0. VHDL
; VHSIC(Very High Speed Integrated Circuit) Hardware Description
Language의 약자
; 디지털 시스템의 설계, 검증, 구현 관련된 대부분의 기능 제공
1. 개발과정
1.1
- 미국방부의 반도체 집적회로 납품 문제
- 업체별로 서로 다른 HDL 언어를 사용하여 납품
=> 회로 재사용, 재생산에 많은 문제 야기
1.2. VHSIC 개발 프로젝트 (1980 ~ 1989) : HDL 표준 언어 개발
- IBM, TI, Intermetrics사 합동 개발팀
- 1985년 VHDL version 7.2 개발 및 공개
- IEEE 표준화
- 1987년 12월 IEEE Standard 1076으로 표준화
1993 2000 2002 2008년 일부 내용 개정
2. 특징
- 순차 동작, 병렬동작, net-list, waveform(파형생성), 테스트환경
- 병렬처리 ; 낮은 클럭으로 CPU의 수천배 처리속도 가능.
3. 구조(패키지[library,use] + 입출력[entity] + 내부회로[architecture])
3.1 패키지 선언(library, use) ; 신호 형태 등을 가져 옴.
3.2 입출력 신호 선언 (entity) ; block의 in out설정
3.3 내부회로 서술 (architecture) ; 동작관계 규정
4. 검증
방법 1 논리합성으로 실제 회로로 구현
방법 2 ASIC 이나 FPGA로 회로 테스트
방법 3 test bench로 설계 단계에서 테스트
=> 논리합성 가능여부와 무관, 가급적 실제 회로를 신경써야 함.
=> 입출력 선언 불필요, 로직을 component로 선언.
=> 파형생성문으로 입력신호 생성 -> component 실체화 문으로 신호인가
5. 문법
5.1 VHDL의 문장(statement) 구성
-> 사용 가능 문자(191 도형문자, 포멧제어문자, 주석, 보조문자세트)
-> 분류 : (분리어, 구분어, 예약어, 식별어, 리터럴, 주석, 연산자, 형)
5.2 VHDL의 구조 detail
5.2.1 설계 엔티티
- entity delaration ; 설계 엔티티와 외부 환경 사이 인터페이스 정의
- architecture body ; 입출력 신호의 동작관계 규정
- configuration declaration ; 아키텍쳐 body와 엔티티 연결 정의
VHDL의 구조를 시각적으로 나타낸 것.
VHDL의 구조, 위 그림의 오른쪽 부분.
5.2.1.1 엔티티 선언(entity declaration)
; entity is 헤더, 선언부, end 가 주요 구조이다.
entity declaration
- 디지털 시스템 : 반드시 엔티티 헤더 서술
- 테스트 벤치 : 엔티티 헤더 없어도 됨.
- 선언부, 문장부는 선택사항.
ex1)
entity AND_Gate is
generic (N: Natural := 2);
port (Inputs: in bit_vector (1 to N);
Result: out bit);
end entity And_Gate;
ex2)
entity Full_Adder is
port (X, Y, Cin: in Bit; Cout, Sum: out Bit);
end Full_Adder;
ex3) 테스트 벤치 선언
entity TestBench is
end TestBench;
.1 엔티티 헤더
- 제네릭(generic clause) : 외부 환경 정보를 정의, 설계 엔티티로 전달.
- 포트(port clause) : 설계 엔티티의 외부 인터페이스 입출력 신호 정의.
=> 포트절의 모드
in : Read only( 할당 X ), 신호 배정문( '<=' )의 오른편에만 가능.
대부분 신호속성(attribute) 읽기 가능.
out : Write only(할당만 가능). 신호 배정문( '<=' )의 왼편에만 가능.
대부분 신호속성(attribute) 읽기 가능.
inout : Read & Write. 신호 배정문( '<=' ) 양쪽 가능,
대부분 신호속성(attribute) 읽기 가능.
buffer : Read & Write. 신호 배정문( '<=' ) 양쪽 가능,
대부분 신호속성(attribute) 읽기 가능.
linkage : Read & Write. 신호 배정문( '<=' ) 양쪽 가능. 이외 없음.
-> inout과 buffer의 차이
inout = in + out
; 양방향 버스, 메모리의 data port 모델링에 사용.
buffer = out + internal signal
; 출력신호의 내부적 사용이 필요할 때.
-> 포트 모드는 in,out, inout만 권장.
.2 엔티티 선언부 ; 엔티티에 일관되게 적용되는 항목을 선언
entity ROM is
port ( Addr: in Word;
Data: out Word;
Sel: in Bit);
type Instruction is array (1 to 5) of Natural;
type Program is array (Natural range <>) of Instruction;
useWork.OpCodes.all, Work.RegisterNames.all
constant ROM_Code: Program :=
( (STM, R14, R12, 12, R13), (LD, R7, 32, 0, R1 )) ;
end ROM;
.3 엔티티 문장부(entity statement)
; 엔티티에 공통으로 사용되는 문장 선언.
; 동작조건, 특성의 모니터 용
- 병렬문, 수동문(신호 배정 불가) 형태여야 함.
ex) entity Latch is
port ( Din: in Word;
Dout: out Word;
Load: in Bit;
Clk: in Bit );
constant Setup: Time := 12 ns;
constant PulseWidth: Time := 50 ns;
useWork.TimingMonitors.all
begin
assert Clk='1' or Clk'Delayed'Stable (PulseWidth);
CheckTiming (Setup, Din, Load, Clk);
end Latch ;
5.2.1.2 아키텍쳐 본체(architecture body)
- 입출력 신호의 동작관계 서술 ; structural, dataflow, behavioral
- concurrent 다.
- ex1)
architecture DataFlow of Full_Adder is
signal A,B: Bit;
begin
A <= X xor Y;
B <= A and Cin;
Sum <= A xor Cin;
Cout <= B or (X and Y);
end architecture DataFlow;
- ex2)
library Test;
use Test.Components.all
architecture Structure of TestBench is
component Full_Adder
port (X, Y, Cin: in Bit; Cout, Sum: out Bit);
end component;
signal A, B, C, D, E, F, G: Bit;
signal OK: Boolean;
begin
UUT: Full_Adder port map (A, B, C, D, E);
Generator: AdderTest port map (A, B, C, F, G);
Comparator: AdderCheck port map (D, E, F, G, OK);
end Structure;
- ex3)
architecture Behavior of And_Gate is
begin
process (Inputs)
variable Temp: Bit;
begin
Temp := '1';
for i in Inputs'Range loop
if Inputs(i) = '0' then
Temp := '0'; exit;
end if;
end loop;
Result <= Temp after 10 ns;
end process;
end Behavior;
- ex4) ; 반가산기 구현 => 출처 참고할 것.
5.2.1.3 configuration(구성)
- 엔티티에 복수의 아키텍쳐가 존재할 경우,
=> 아키텍쳐와 엔티티를 연결하는 part.
- 별도의 library에 존재하는 component를 연결짓는 part
ex1)
library IEEE;
use IEEE.std_logic_1164.all;
entity HalfAdder is
port (A, B: in std_logic; S, C : out std_logic);
end HalfAdder;
architecture Dataflow of HalfAdder is
begin
S <= A xor B; C <= A and B;
end Dataflow;
configuration HalfAdder_Conf of HalfAdder is
for Dataflow
end for;
end configuration HalfAdder_Conf;
ex2)
architecture Structure_View of Processor is
component ALU port ( ··· ); end component;
component MUX port ( ··· ); end component;
component Latch port ( ··· ); end component;
begin
A1: ALU port map ( ··· );
M1: MUX port map ( ··· );
M2: MUX port map ( ··· );
M3: MUX port map ( ··· );
L1: Latch port map ( ··· );
L2: Latch port map ( ··· );
end Structure_View;
library TTL, Work;
configuration Processor_Conf1 of Processor is
use Work.all
for Structure_View
for A1: ALU
use configuration TTL.SN74LS181;
end for ;
for M1,M2,M3: MUX
use entity Multiplex4 (Behavior);
end for ;
for all: Latch
-- use defaults
end for ;
end for ;
end configuration Processor_Conf1;
6. VHDL을 이용한 설계 과정
- architecture : 모두 병렬문(대부분 프로세스문)
- 프로세스문 : 내부는 순차문
- 부프로그램(프로시저,함수) : 내부는 순차문
- 나머지는 문법을 통한 기계적인 서술
; type, attribute(속성), interface, 가명, 콤포넌트 선언
; 식별어 선정(entity, architectucre, signal, variable)
; 콤포넌트 실체화, 부프로그램 호출, 생성문, 패키지, 라이브러리 사용
6.1 순차문 & 병렬문
6.1.1 순차문 : 부프로그램이나 프로세스문의 수행을 위한 알고리즘 서술.
-> 함수, 프로시저,프로세스문 내부알고리즘,
-> 순서대로 동작
순차문의 종류
-> 대기문, 보고문, 주장문, 지연 메커니즘, 배정문, 프로시저 호출문
if, case, loop, next, exit, return, null
6.1.2 병렬문 : 회로의 동작이나 구조 서술
병렬문의 종류
-> 프로세스, 블록사이 연결상태
-> 아키텍쳐 내부 부분
-> 각 병렬문은 독립,비동기적 동작.(하드웨어 동작 표현)
-> 프로세스문, 블록문, 병렬 프로시저 호출문, 병렬 주장문, 병렬 신호 배정문, 콤포넌트 실체화 문, 생성문,
출처 : http://dasan.sejong.ac.kr/~dihan/vhdl.htm
'전공지식정리 > 디지털시스템설계' 카테고리의 다른 글
VHDL 3.병렬문 (0) | 2020.12.08 |
---|---|
VHDL2.순차문 (0) | 2020.12.08 |
Practical Combinational Logic design3 (0) | 2020.12.08 |
Practical Combinational Logic design2 (0) | 2020.12.08 |
practical combinational logic design 1 (0) | 2020.12.08 |