맨위로가기

AHDL

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

AHDL은 하드웨어 기술 언어(Hardware Description Language, HDL)의 일종으로, 주로 프로그래머블 논리 소자(PLD) 설계를 위해 사용된다. 함수 선언, 변수 선언, 기본값 설정, 논리 연산 등의 문법 요소를 가지며, 플립플롭, 트라이 스테이트 버퍼, 상태 머신 등을 변수로 선언할 수 있다. AHDL 코드는 BEGIN과 END 블록 사이에서 논리 연산을 기술하며, 8비트 업카운터와 같은 디지털 회로를 구현하는 데 사용될 수 있다.

더 읽어볼만한 페이지

  • 하드웨어 기술 언어 - 아벨 (프로그래밍 언어)
    아벨은 고급 프로그래밍 언어의 한 종류이다.
  • 하드웨어 기술 언어 - VHDL
    VHDL은 디지털 회로의 설계, 검증, 구현에 사용되는 하드웨어 설명 언어(HDL)로, 에이다를 기반으로 하며, 병렬 시스템 설명, 데이터 타입 지원, 코드 재사용 및 이식성을 제공한다.
AHDL
개요
유형하드웨어 기술 언어
개발사알테라
파일 확장자.tdf, .inc
특징
영향VHDL, Verilog
기타MAX+PLUS II 환경에서 사용
Quartus II 환경에서 지원 중단

2. AHDL 문법 및 특징

AHDL은 텍스트 기반 하드웨어 기술 언어(HDL)로, 디지털 회로의 동작을 텍스트로 기술한다. C 언어와 유사한 문법 구조를 가지고 있어 C 언어에 익숙한 개발자에게 친숙하다.[1]

다음은 8비트 업카운터(up counter)를 수행하는 AHDL 코드 예시이다.



% a simple AHDL up counter, released to public domain 11/13/2006 %

% [block quotations achieved with percent sign] %

% like c, ahdl functions must be prototyped %

% PROTOTYPE:

FUNCTION COUNTER (CLK)

RETURNS (CNTOUT[7..0]); %

% function declaration, where inputs, outputs, and

bidirectional pins are declared %

% also like c, square brakets indicate an array %

SUBDESIGN COUNTER

(

CLK :INPUT;

CNTOUT[7..0] :OUTPUT;

)

% variables can be anything from flip-flops (as in this case),

tri-state buffers, state machines, to user defined functions %

VARIABLE

TIMER[7..0]: DFF;

% as with all hardware description languages, think of this

less as an algorithm and more as wiring nodes together %

BEGIN

DEFAULTS

TIMER[].prn = VCC; % this takes care of d-ff resets %

TIMER[].clrn = VCC;

END DEFAULTS;

TIMER[].d = TIMER[].q + H"1";

END;



위 코드는 퍼센트 기호(%)를 사용하여 주석을 표시하고, C 언어와 유사하게 함수 프로토타입을 선언하며, `SUBDESIGN` 블록 내에서 입출력 핀을 정의한다.[1] 또한, `VARIABLE` 블록에서 변수를 선언하고, `BEGIN`과 `END` 블록 사이에서 논리 연산을 기술한다.[1]

2. 1. 주요 문법 요소

AHDL은 텍스트 기반 하드웨어 기술 언어(HDL)이다. AHDL의 주요 문법 요소는 다음과 같다.

  • 주석(Comment): 코드 설명이나 메모를 위해 사용되며, 퍼센트 기호(%)를 사용하여 표시한다. 한 줄 주석과 블록 주석 모두 가능하다.[1]
  • 프로토타입(Prototype): C 언어와 유사하게, AHDL 함수는 프로토타입을 가져야 한다.[1] `FUNCTION` 키워드를 사용하여 함수를 선언하고, `RETURNS` 키워드를 사용하여 반환 값을 정의한다.[1]

2. 1. 1. 함수 선언 (Function Declaration)

함수는 `FUNCTION` 키워드를 사용하여 선언한다.[1] 입력, 출력, 양방향 핀을 정의한다.[1] C 언어와 유사하게 대괄호([])는 배열을 나타낸다.[1]

```

SUBDESIGN COUNTER

(

CLK :INPUT;

CNTOUT[7..0] :OUTPUT;

)

2. 1. 2. 변수 선언 (Variable Declaration)

`VARIABLE` 키워드를 사용하여 변수를 선언한다. 변수는 플립플롭(flip-flop), 트라이 스테이트 버퍼(tri-state buffer), 상태 머신(state machine) 등이 될 수 있다.[1]

다음은 8비트 업카운터를 수행하는 코드 예시에서 변수 선언 부분이다.[1]

```text

VARIABLE

TIMER[7..0]: DFF;

```

위 코드에서 `TIMER[7..0]`는 D 플립플롭(`DFF`) 유형의 변수로 선언되었다.[1]

2. 1. 3. 기본값 설정 (Defaults)

`DEFAULTS` 블록을 사용하면 변수의 초기값을 설정할 수 있다. 다음은 `DEFAULTS` 블록을 사용한 예시이다.

```

BEGIN

DEFAULTS

TIMER[].prn = VCC; % 이것은 d-ff 리셋을 처리함 %

TIMER[].clrn = VCC;

END DEFAULTS;

```

위 예시에서 `TIMER[].prn`과 `TIMER[].clrn`은 `VCC`로 초기화된다.[1]

2. 1. 4. 논리 연산 (Logic Operations)

`BEGIN`과 `END` 블록 사이에는 논리 연산이 기술된다. 다음은 그 예시이다.



BEGIN

DEFAULTS

TIMER[].prn = VCC; % d-ff 리셋을 처리함 %

TIMER[].clrn = VCC;

END DEFAULTS;

TIMER[].d = TIMER[].q + H"1";

END;



위 코드에서 `TIMER[].d = TIMER[].q + H"1";`는 `TIMER`의 현재 값(`TIMER[].q`)에 16진수 1(`H"1"`)을 더한 값을 다음 `TIMER` 값(`TIMER[].d`)으로 설정하는 논리 연산을 나타낸다.[1]

2. 2. 특징

AHDL은 다음과 같은 특징을 갖는다.

  • C 언어 유사 문법: C 언어와 유사한 문법 구조를 가지고 있어 C 언어에 익숙한 개발자에게 친숙하다.
  • 모듈화: 함수를 사용하여 설계를 모듈화할 수 있다.
  • 재사용성: 모듈화된 설계는 다른 프로젝트에서 재사용할 수 있다.


AHDL 코드 예시에서 볼 수 있듯이, 함수 프로토타입 선언, 입출력 및 양방향 핀 선언, 변수 선언 등은 C 언어와 유사한 방식으로 이루어진다.[1]

3. AHDL 예제

다음은 AHDL로 구현한 8비트 업카운터 예제이다. 아래 코드는 클럭(CLK) 입력을 받아 8비트 카운터 출력(CNTOUT)을 생성한다.



% 간단한 AHDL 업 카운터, 2006년 11월 13일 공개 %

% [블록 인용문은 퍼센트 기호로 표시] %

% C와 마찬가지로, AHDL 함수는 프로토타입이 있어야 합니다 %

% 프로토타입:

FUNCTION COUNTER (CLK)

RETURNS (CNTOUT[7..0]); %

% 함수 선언, 여기서 입력, 출력 및 양방향 핀이 선언됩니다 %

% C와 마찬가지로 대괄호는 배열을 나타냅니다 %

SUBDESIGN COUNTER

(

CLK :INPUT;

CNTOUT[7..0] :OUTPUT;

)

% 변수는 플립플롭(이 경우), 트라이 스테이트 버퍼, 상태 머신, 사용자 정의 함수 등 무엇이든 될 수 있습니다 %

VARIABLE

TIMER[7..0]: DFF;

% 모든 하드웨어 기술 언어와 마찬가지로, 이것을 알고리즘이라기보다는 노드를 함께 연결하는 것으로 생각하십시오 %

BEGIN

DEFAULTS

TIMER[].prn = VCC; % 이것은 D-FF 재설정을 처리합니다 %

TIMER[].clrn = VCC;

END DEFAULTS;

TIMER[].d = TIMER[].q + H"1";

END;


참조

[1] 서적 MAX+PLUS II AHDL https://www.intel.co[...] Altera Corporation 1995-11
[2] 웹사이트 http://www.altera.co[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com