VHDL(VHSIC Hardware Description Language)는 하드웨어 설계를 기술하는 언어이다.(VHSIC는 Very High-Speed Intergrated Circuit의 약자다)
Ada 프로그래밍 언어를 응용해 미합중국 국방부 주도로 IBM, 텍사스 인스트루먼트 등의 반도체 설계 회사에서 개발되었으며 오늘날 Verilog와 함께 하드웨어 설계용 언어 표준으로 많이 쓰인다. 다만 요즘은 VHDL은 비주류로 전락한지 오래인 Ada처럼 점점 퇴물이 되어가는 상황이다. 어쨌든 문법은 Ada와 비슷하기에 Ada를 알고 있으면 입문이 쉬운 편이고 대부분의 로직이 Ada 함수처럼 A is begin B end 구조를 띤다.다. 그래서 베릴로그보다 더 빨리 퇴물이 된 것일 수도 있다.
프로그래밍 과정 특징
편집- 주석은 - 두 개(--) 뒤에 쓴다.
- 먼저 Entity를 정의한다. Entity는 반도체 칩 내에서 처리 작업을 하는 최소 단위의 개별 유닛이 어떤 입력을 받아 어떤 출력을 내는지 정의한 것이다. 보통 다음 구조를 가진다.
entity FIRST_ENTITY is
port(A, B : in std_logic;
C_OUT : out std_logic);
end entity FIRST_ENTITY;- 그 다음 각 엔티티들의 내부 구조를 묘사하는 Architecture를 정의한다. 가령 FIRST_ENTITY 유닛이 비트 AND 연산을 한다면 다음과 같이 아키텍처의 동작(Behavioral_FE)을 정의한다.
architecture Behavioral_FE of FIRST_ENTITY is
begin
process(A, B)
begin
C_OUT <= A and B;
end process;
end archtecture Behavioral_FE;- package 접두어로 모듈화를 할 수 있다. package 내의 function과 procedure로 C++ 클래스 작성하듯 유닛을 정의하고 호출할 수 있다.
- 모듈/외부 라이브러리를 가져와야 할 경우
library (라이브러리 이름);을 쓴 다음use (라이브러리 이름).(기능 이름).(세부 기능)과 같이 가져온다. 세부 기능에는 all을 넣어서 기능 전부를 가져올 수 있다.
- 모듈/외부 라이브러리를 가져와야 할 경우
- process를 사용하는 대신 다른 엔티티의 아키텍처를 가져오는 component를 사용한 뒤 map(…)으로 개별적인 signal 변수가 어디로 이어지는지 선언하는 방법도 있다. 주로 개별 유닛을 결합할 때 이 방법을 사용한다.
- 테스트벤치(Testbench)를 작성할 때에는 configuration을 사용하면 여러 유닛을 단일 configuration 서술을 조금씩 변경하는 방법으로 테스트할 수 있다.
- loop는 소프트웨어 프로그래밍 언어들의 반복문(작업을 순차적으로 반복)과 달리 loop 내에 정의된 유닛을 정해진 횟수만큼 복사하는 작업이다. 즉 순차 회로 구현이 아닌 조합 회로에 쓴다.