Introduction to VHDL
VHDL 개요
- VHDL : Very high speed integrated circuit HDL
- H/W를 기술하는 정형화 된 언어(HDL)이다.
(VLSI 시스템을 설계하기 위해 제작된 언어이다.)
- Modeling(H/W를 표현하는 방법)에는 Behavioral Modeling(동작적 모델링), Structural Modeling(구조적 모델링),
Dataflow Modeling(데이터플로우 모델링)이 있다.
* VHDL의 특징
1) 표준화된 HDL이다.
2) 범용적으로 사용되고 있다.
- VHDL은 IEEE가 지원하는 표준이며, 미국 정부의 공인 HDL이다.
3) H/W 기술 능력이 우수하다.
- 시뮬레이션 등을 위해 여러 레벨을 혼합해서 사용할 수 있다.
- 다양한 Delay 표현, Concurrent Signal Assignment, Resolution Function과 같은 기술이 지원된다.
4) 언어로서 다양한 기능을 제공한다.
- 회로의 문서화, 시뮬레이션 이외에도 Synthesis를 위한 언어로도 활용된다.
- High-Level Programming 언어와 같이, 함수, 연산자, User Defined Data Type과 같은 기능이 지원된다.
5) 디지털 설계가 가능하다.
* 집적회로 설계의 변천 과정
시기 | 1970's | 1980's | 1990's |
설계 방법 | 트렌지스터 레벨의 레이아웃 설계 (Bottom-Up Design) | Gate나 RTL 레벨의 논리 설계 | 알고리즘이나 기능 레벨의 고급 설계 (Ypo-Down Design) |
설계 도구 | 레이아웃 편집기 | 스케메틱 편집기 | HDL과 합성기 (컴파일러) |
설계 범위 | 10^3 게이트 이하 | 10^3 ~ 10^5 게이트 | 10^5 게이트 이상 |
설계 예시 | 게이트, 카운터, 멀티플렉서, 가산기 | 마이크로프로세서, 주변장치 | 고성능 마이크로프로세서, 실시간 영상 처리기 |
* Abstraction Hierarchy
1) Structural Domain
- 기초적인 Component들의 연결을 언어상으로 표현하는 Domain이다.
2) Behavioral Domain
- 입출력 포트 등을 정의한 Domain이다.
Level | Structural Primitives (구조적) |
Behavioral Representation (추상적) |
PMS (Processor Memory Switch) |
CPU, Memory, BUS | Performance Specification |
Chip | Microprocessor, RAM, ROM, UART, Parallel Ports |
I/O Response, Algorithm, Micro-Operation |
Register | Register ALU, Counter, MUX | Truth Table, Static Table, Micro-Operation |
Gate | Gate, Flip-Flop | Boolean Equation |
Circuit | Transistor, RLC | Differential Equation (회로 전류, 전압값에 대한 미분방정식) |
Silicon | Geometrical, Object | None |
HDL (Hardware Description Language)
- 집적도가 증가함에 따라 설계의 복잡성이 증가하고, 이로인해 칩의 크기, 집적도, 수행시간, 시뮬레이션 등
고려사항이 많아지는 문제점의 해결 방안이 되는 언어이다.
- 수정, 재사용에 불리한 기존의 직접적인 Layout Design과 직접적인 Schematic Design 방식의 대체재가 되었다.
(Layout은 기계어, Schematic은 어셈블리어, HDL은 프로그래밍 언어라 생각하면 쉽다.)
- HDL을 통해 High-Level 혹은 Algorithm-Level에서의 H/W를 보다 쉽게 설계할 수 있다.
- HDL로 인해, 많은 Component를 가진 계층 설계가 가능해졌다.
- 대표적인 HDL로는 VHDL과 Verilog HDL이 있다.
* HDL의 장점
- 간결한 H/W 표현, 표준화, 문서화, 시뮬레이션 용이성, 용이한 설계 정보 교환 등이 있다.
* HDL vs High-Level Programming Language
* Synthesis (Silicon Compilation)
- 회로의 동작이 기술된 HDL 코드를 Gate-Level로 변환하는 과정이다.
- Synthesis를 수행하는 S/W 혹은 시스템을 Synthesizer(합성기), Silicon Compiler(실리콘 컴파일러)라 부른다.
(특히, Silicon Compiler는 HDL을 Layout Design으로 변환하는 전 과정을 총괄한다.)
- Synthesis는 HDL에 대한 Compilation이라 할 수 있다.
- Synthesis는 Behavioral Synthesis(동작적 합성), RTL* Synthesis(RTL 합성), Logic Synthesis(논리 합성) 등으로 세분화된다.
* RTL : Register Transfer Logic
* Design Automation Tool (설계 자동화 도구)
- 전반적인 설계 과정을 쉽게 수행하게 하는 도구이다.
- 설계 과정에는 모델링, 합성, 검증, 설계 모듈 관리 등이 포함된다.
- 설계 자동화 도구에는 HDL 입력을 위한 Text Editor, 설계를 검증하는 Simulator,
회로를 최적화하는 Optimizer, Layout Design으로의 변환을 위한 Synthsizer 등이 포함된다.
Behavioral Modeling (추상적 모델링)
- 3가지 모델링 방법 중, 가장 High-Level에서 모델링하는 단계이다.
- 시스템이 내부적으로 어떤 H/W 구조를 가지는지는 은닉되어 있다.
- Truth Table 등으로 표현된 논리를 기능적, 수학적 알고리즘을 통해 시스템 동작을 기술한다.
- 즉, 입력에 따른 출력 결과만 고려하여 동작을 기술한다.
- VHDL의 \(\texttt{Process}\)문이 사용된다.
* Behavioral Modeling에서의 계층적 구분
Behavioral Modeling | Design Hierarchy | Structural Model |
설계 명세 | 시스템 | 컴퓨터, 디스크 장치 |
칩의 내용을 알고리즘으로 표현 | 칩 | 마이크로프로세서, RAM, ROM |
RTL | 레지스터 | 레지스터, MUX, ALU, 카운터 |
부울 함수 | 게이트 | AND, NAND, OR 등의 게이트 |
Example. Behavioral Description
architecture behave of rsff is
begin
q <= not(qb and set) after 2 ns;
qb <= not(q and reset) after 2 ns;
end behave;
Dataflow Modeling (데이터플로우 모델링)
- 신호 및 제어의 흐름을 모델링하는 단계이다.
- 주로, 부울 대수, 함수, RTL 또는 연산자(AND, OR 등)를 사용하여 입력에서 출력까지의 경로를 표현한다.
- 표현상의 모든 문장들은 동시에 Concurrent하게 작동된다. (Sequential하게 작동하지 않는다.)
(각 모듈이 병행하여 작동하고 있음을 표현하는 방법이다.)
- 데이터플로우 모델링에서는 버스, 레지스터 전달 등을 보다 잘 표현할 수 있다.
※ 관점에 따라, 데이터플로우 모델링을 동작적 모델링에 포함시키는 경우도 있다.
Structural Modeling (구조적 모델링)
- 3가지 모델링 방법 중, 가장 Low-Level에서 모델링하는 단계이다.
- 모든 회로의 Component들과 이들의 상호 연결 상태까지 표현한다.
- 설계자가 Synthesis까지 고려하여 Component들을 표현할 수 있다.
- 레지스터, 버스, 게이트 레벨의 설계가 가능하다.
- 한 시스템에서 필요한 Component, Sub-System과 이들의 Interface를 정의할 수 있으며,
또한 이미 설계된 Component를 재사용할 수 있다.
※ 세 가지 모델링 방법간에 상호 작용을 위해 Data Conversion Function이나 Resolution Function을 사용할 수 있다.
Example. Structural Description for RS-FF
use work.std_logic_1164.all;
ENTITY rsff IS
PORT (set, reset : in bit;
q, qb : buffer bit); -- qb = q' = not(q)
END rsff;
ARCHITECTURE netlist OF rsff IS
COMPONENT nand2 -- std.logic_1164 Library에 정의된 nand2
PORT (a, b : in bit;
c : out bit);
END COMPONENT;
BEGIN
u1 : nand2
PORT MAP(set, qb, q);
u2 : nand2
PORT MAP(reset, q, qb);
END netlist;