제 1 장 vhdl의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=vhdl.doc · web view1...

84
제 1 제 VHDL제 제제 1

Upload: others

Post on 01-Jan-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

제 1 장 VHDL의 개요

1

Page 2: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

2

Page 3: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

1. VHDL이란

- VHDL이란 VHSIC Hardware Description Language의 약자로 반도체 회로 설계용 언어

- VHDL은 학문도 아니고 연구 대상이 아닌 Word Processor처럼 회로 설계를 위한 도구일 뿐이다.

1.1. VHDL의 역사

연 도 내 용 비 고

1985 DoD (미국방성)의 VHSIC (Very High Speed IC) 개발 계획의 일환으로 탄생

보고서 수준

1986 Vantage에서 VHDL Simulator 상용 제품 출시 Simulation 시작

1987 Synopsys에서 VHDL Synthesis 제품 출시 Synthesis 시작1989 IEEE-1076으로 표준화 표준화의 시작1992 IEEE-1076 (1992)로 1164 VHDL로 업계 표준

시도std_logic_1164 탄생

1.2. HDL의 종류

VHDL Verilog-HDLDoD에 의해 탄생다양한 회로 설계 표현

설계 Engineer에 의해 탄생RTL 회로 설계 위주

배우기 어렵지만 회로 표현 용이대소문자 상관 없음

배우기 쉽고 표현이 단순대소문자 가려서 표현

전자 제품 개발자 주로 사용 반도체 회사에서 주로 사용

3

Page 4: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

1.3. 회로 설계의 역사

(1) 회로 크기의 변화

회로 크기 (Gates)

1,000,000

100,000

10,000

1,000

시간 ’70 ’80 ’90 2000

(2) 설계 방법의 변화

연 대 내 용 회로 크기

1970 수작업 회로 설계 -> CAD로의 변화TTL, Memory의 상용화

1,000 Gates 급

1980 CAE의 도입, Simulator 탄생CPU의 탄생ASIC과 FPGA의 탄생

CMOS 공정 도입10k Gates급

1990 EDA로 발전 (설계 자동화 도입)Semi-Custom 반도체 활성 및 응용

DSM 도입100k Gates급

2000 IP를 이용한 회로 설계SoC 설계의 활성화

1M Gates급

4

Page 5: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

2. VHDL의 간단한 회로 표현 예

2.1. 2 Input NAND의 표현

A B C A 0 0 1 C 0 1 1 B 1 0 1 1 1 0

library IEEE; use IEEE.std_logic_1164.all;

entity NAND2 is port ( A, B : in std_logic; C : out std_logic );end NAND2;

-- NAND2의 다른 동작 표현architecture BEHAVE1 of NAND2 isbegin process (A, B) begin if (A = ‘1’) and (B = ‘1’) then C <= ‘0’; else C <= ‘1’; end if; end process;end BEHAVE1;

5

Page 6: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

architecture BEHAVE2 of NAND2 isbegin C <= ‘0’ when (A = ‘1’) and (B = ‘1’) else ‘1’;end BEHAVE2;

architecture Data_Flow1 of NAND2 isbegin C <= A nand B;end Data_Flow1;

architecture Data_Flow2 of NAND2 isbegin C <= not (A and B);end Data_Flow2;

6

Page 7: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

2.2. Flip-Flop의 표현

D Q RST CK Q

CK 0 X 0 1 / D

RST

library IEEE; use IEEE.std_logic_1164.all;

entity DFF is port ( D : in std_logic; CK : in std_logic; RST : in std_logic; Q : out std_logic );end;

architecture Func_DFF of DFF isbegin

process (RST, CK)begin if (RST = ‘0’) then Q <= ‘0’;

-- elsif rising_edge (CK) then elsif CK’event and CK = ‘1’ then Q <= D; end if;end process;end Func_DFF;

7

Page 8: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

2.3. 계층 구조에 대한 표현

MUX21

U1 A A_OUT N_SEL U3

U0 DOUT

B SEL B_OUT U2

library IEEE; use IEEE.std_logic_1164.all;

entity MUX21 is port ( A, B : in std_logic; SEL : in std_logic; DOUT : out std_logic );end MUX21;

architecture Func_MUX21 of MUX21 is component NAND2 port ( IN1, IN2 : in std_logic; DO : out std_logic ); end component;

component INV port ( DI : in std_logic; DO : out std_logic ); end component;

8

Page 9: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

signal A_Out, B_Out : std_logic; signal N_SEL : std_logic;begin U0 : INV port map (SEL, N_SEL); U1 : NAND2 port map (A, N_SEL, A_Out); U2 : NAND2 port map (IN1 => B, DO => B_Out, IN2 => SEL); u3 : NAND2 port map (IN1=>A_Out, IN2=>B_Out, DO=>DOUT);end Func_MUX21;

-- INV VHDL library IEEE;

use IEEE.std_logic_1164.all;

entity INV is port ( DI : in std_logic; DO : out std_logic );

end INV;

architecture BEHAVE of INV is begin DO <= not DI; end BEHAVE;

9

Page 10: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

2.4. Counter의 설계

RST CLK ENB LOADB DOUT

0 X X X 0 (Initialize) 1 / 0 X Hold 1 / 1 0 DIN 1 / 1 1 Up Count

library IEEE; use IEEE.std_logic_1164.all;

use IEEE.std_logic_unsigned.all;

entity COUNTER is port ( RST : in std_logic; CLK : in std_logic; LOADB : in std_logic;

ENB : in std_logic; DIN : in std_logic_vector(3 downto 0);

DOUT : out std_logic_vector(3 downto 0));end COUNT;

architecture ARC_COUNTER of COUNTER is signal T_DOUT : std_logic_vector (3 downto 0);

begin

DOUT <= T_DOUT;

process (RST, CLK)begin if (RST = ‘0’) then T_DOUT <= (others => ‘0’);

10

Page 11: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

elsif rising_edge (CLK) then if (ENB = ‘0’) then null; elsif (LOADB = ‘0’) then T_DOUT <= DIN; else T_DOUT <= T_DOUT + ‘1’; end if; end if;end process;

end ARC_COUNTER;

11

Page 12: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

2.5. Test Bench를 이용한 회로 검증

- Test Bench : Simulation 입력과 확인 사항을 HDL로 표현하는 방법

Test Bench

Test Fixture (ARCHITECTURE)

library IEEE; use IEEE.std_logic_1164.all;

use IEEE.std_logic_unsigned.all;

entity TB_LD_CNT is end;

architecture ARC_TB_LD_CNT of TB_LD_CNT is

signal RST, CLK : std_logic; signal ENB, LOAD : std_logic; signal DIN, DOUT : std_logic_vector(3 downto 0);

-- 본 회로에 대한 COMPONENT 선언 component COUNTER port ( RST : in std_logic; CLK : in std_logic; LOADB : in std_logic;

ENB : in std_logic;

12

Drive(PROCESS)

MUT(COMPONENT)

Page 13: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

DIN : in std_logic_vector(3 downto 0); DOUT : out std_logic_vector(3 downto 0)); end component;begin

-- 본 회로와의 연결 정보 MUT: COUNTER port map (RST => RST, CLK => CLK, LOADB => LOAD, ENB => ENB,

DIN => DIN, DOUT => DOUT);

-- CLK에 대한 Simulation 입력 DRIVE1: process begin CLK <= ‘0’, ‘1’ after 10 ns; wait for 20 ns; end process;

-- 나머지 입력값에 대한 Simulation 입력 DRIVE2: process begin if (NOW = 0 nS) then RST <= ‘0’, ‘1’ after 40 ns; LOAD <= ‘1’; ENB <= ‘1’; DIN <= “1001”;

wait for 100 ns;

else ENB <= ‘0’ after 200 nS, ‘1’ after 600 nS; LOAD <= ‘0’ after 400 nS, ‘1’ after 800 nS;

wait for 1 uS;

13

Page 14: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

RST <= ‘0’, ‘1’ after 100 nS; DIN <= DIN(2 downto 0) & DIN(3);

wait for 100 nS; end if; end process;end ARC_TB_LD_CNT;

RST

CLK 50 MHz Clock (주기 20 ns)

ENB

LOAD

DIN 1001

0011

DOUT 0 Up Count HOLD LOAD Up Count 0

100 200 300 400 500 600 700 800 900 1000 1100

1200

14

Page 15: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. ModelSim 명령어 모음

(1) UNIX Prompt에서의 작업

# vlib work : Library Setting# vcom –explicit ???.vhd : VHDL Compile# vsim ??? & : VHDL Simulation

(2) VHDL Simulator 명령

vsim> add wave * : 모든 Signal을 Waveform 표시vsim> add wave U0/SIG : U0 밑의 SIG를 Waveform 표시vsim> force SIG 0, 1 10 : SIG에 0, 10 ns후에 1 입력vsim> force CLK 0, 1 10 –rep 20

: 20 주기의 CLK 입력vsim> run 10 us : 10 us Simulationvsim> echo “화면 출력” : “화면 출력” 글자가 표시vsim> restart –for : Simulation Restart

vsim> quit : Simulator Exit

(3) MTI 사용 순서 (GUI 이용)

Project 생성 =>Library 생성 및 확인 =>VHDL Compile & Edit =>VHDL Simulation Load =>View All로 도움 화면 열기 =>Simulation & Debug

15

Page 16: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. 실습 1. 간단한 VHDL 표현 (NAND2)

1. 2.1.의 NAND2 회로 표현을 Text Edit나 MTI의 Files->Open을 이용하여 VHDL File을 만든다.

2. Compile을 한 다음, Simulation 준비를 한다.

3. VHDL Simulation 명령은 아래와 같다.

vsim> add wave *vsim> force a 0, 1 10, 0 30vsim> force b 0, 1 20, 0 40vsim> run 50

4. Waveform Window에서 20 ns ~ 30 ns일 때에만 출력이 ‘1’임을 확인한다.

5. 단, NAND2 회로에서 하나의 Architecture만을 선택하여 사용한다.

16

Page 17: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. 실습 2. Flip-Flop에 대한 Simulation

1. 2.2.의 Flip-Flop을 VHDL로 만들고 Compile을 한다.

2. 아래와 같은 명령으로 Simulation 해본다.

vsim> add wave *vsim> force RST 0, 1 40vsim> force CK 0, 1 10 –rep 20vsim> force DI 1, 0 60, 1 80, 0 120vsim> run 140

3. Simulation 결과가 아래와 같은지 확인한다.

RST

CK

D

Q

20 40 60 80 100 120 140

4. vsim> restart –for 명령을 사용하여 Simulation을 다시 시작한다.

5. Simulator 화면 상단의 “Step –over” ICON을 이용하여 Code의 실행 순서와 Simulation 진행 상태를 알아본다.

17

Page 18: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. 실습 3. MUX21과 Counter에 대한 실습

1. 2.3.의 INV 회로를 먼저 완성한다.

2. MUX21 회로를 VHDL로 완성한다.

3. 두 VHDL File을 Compile 한다.

4. MUX21을 Simulation 하고 결과를 확인한다.

VSIM 1> add wave *VSIM 2> force a 0, 1 10, 0 30 -r 60VSIM 3> force b 1, 0 20, 1 40 -r 60VSIM 4> force sel 0, 1 60, 0 120VSIM 5> run 200

5. 결과가 SEL 0일 때 A값이 나오고 1일 경우 B가 나오는지 확인한다.

6. 2.4.의 Counter와 2.5.의 TB_LD_CNT를 VHDL로 만든다.

7. 두 VHDL File을 Compile 한다.

8. TB_LD_CNT를 Simulation 한다.

vsim> add wave *vsim> run 2500 ns

9. Simulation 결과가 2.5.의 Waveform과 같이 나오는지 확인한다.

18

Page 19: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. 실습 4. MUX21 응용 회로

1. 2 Input MUX에 대한 Structure 표현이 아닌 Behave 표현으로 VHDL을 만든다.

2. 실습 3.에서 했던 Simulation 명령을 다시 실행하여 실습 3.과 같은 결과가 나오는지 확인한다.

19

Page 20: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

20

Page 21: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

제 2 장 VHDL 문법

21

Page 22: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

22

Page 23: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

3. VHDL의 기본 구조

- Library- Defined : STD, IEEE- User : WORK

- Entity : 회로 표현의 외부 모형- Architecture : 실제 회로 표현

- Package : 선언문, Sub-Program이 있는 VHDL- 썬언문 : 선언문, 지정문- Sub-Program : Function, Procedure

23

Library

Architecture

선언문 Sub-Program

Entity Package

Page 24: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

3.1. Entity

- Entity Declaration이라 부르며 Design Unit을 정의하는데 사용

*. 표현 방법

(1) Generic

- Design Parameter를 선언하는 것이 주요 기능. - 계층 구조(Hierarchy) 표현이 가능하다. - “Generic_표시자”로 선언된 것은 상수(Constant)로 사용된다.

*. 표현 방법

24

generic ( Generic_표시자 ) ;

Generic_표시자 ::= 상수_표시자 : Data_Type [ := 초기값 ] [ ; Generic_표시자 ]

entity Entity_이름 is [ generic ( Generic_표시자 ) ; ] [ port ( Port_표시자 ) ; ] [ 선언문 ][ begin Entity_본문 ]end [ entity ] [ Entity_이름 ] ;

Page 25: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(2) PORT

- 회로의 입출력을 선언한다.

*. 표현 방법

(3) 선언문

ALIAS ATTRIBUTECONSTANT DISCONNECTIONFILE SIGNALSub-Program 선언 및 동작 표현 SUBTYPETYPE USE

(4) Entity_본문

- 회로 표현 중에서의 진행 상태나 결과문 출력에 사용.Concurrent ASSERT문Concurrent PROCEDURE CallPassive PROCESS

25

port ( Port_표시자 ) ;

Port_표시자 ::= Signal_표시자 : 입출력_선언자 Data_Type [ := 초기값 ] [ ; Generic_표시자 ]

입출력_선언자 ::= in ::= Input out ::= Output inout ::= 양방향 buffer ::= Input으로도 사용되는 Output

Page 26: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

3.2. ARCHITECTURE

- Architecture Body라 불리며 실제 회로의 동작을 표현하는데 사용된다.

*. 표현 방법

(1) 선언문

ALIAS ATTRIBUTECOMPONENT CONFIGURATIONCONSTANT DISCONNECTIONFILE SIGNALSub-Program 선언 및 동작 표현 SUBTYPETYPE USE

(2) 동작_표현문

*. 동작 표현에 의한 분류

Behavioral Style - 일반 컴퓨터 언어와 비슷한 표현 방법.Data Flow Style - 함수 표현을 주로 사용하는 RTL 표현 방법.Structural Style - Netlist 표현 방법.

*. 기능에 의한 분류

Concurrent문 - 표현 순서에 상관없는 문장.Sequential문 - 일반 컴퓨터 언어와 비슷한 순차적인 문장.

26

architecture Architecture_이름 of Entity_이름 is [ 선언문 ]begin 동작_표현문end [ architecture ] [ Architecture_이름 ] ;

Page 27: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

3.3. PACKAGE

- 각종 선언문과 Sub-Program을 하나의 File로 만든 것이 PACKAGE이다.

*. 사용 방법

use Library_이름.Package_이름.all ;

*. 표현 방법

2.1.5.1 선언문

ALIAS ATTRIBUTE COMPONENTCONSTANT DISCONNECTION FILESIGNAL Sub-Program 선언 SUBTYPETYPE USE

2.1.5.2 본문

ALIAS CONSTANT FILESub-Program 선언 및 동작 표현 SUBTYPETYPE USE

27

package Package_이름 is [ 선언문 ]end [ package ] [ Package_이름 ] ;

package body Package_이름 is [ 본문 ]end [ package ] [ {ackage_이름 ] ;

Page 28: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

4. VHDL 문장 표현

4.1. Concurrent 문

- 표현 순서에 상관없이 동시에 수행되는 문장 형태. - ARCHITECTURE에서 바로 사용할 수 있는 문장.

*. 종류

PROCESS문 - 일반적인 Sequential 회로 표현SIGNAL 전달문 - 값 전달문.COMPONENT 관련문 - Structural VHDL 표현.BLOCK문 - Design Block 표현PROCEDURE Call - 독자적인 Sub-Program 실裔문.GENERATE - 반복문의 간략화된 표현.ASSERT문 - 화면 출력 및 Simulation 진행 제어.

28

Page 29: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(1) PROCESS문

- 실질적인 Behavioral VHDL 문장 표현이다. - Sequential 문장 표현 만이 가능하다. - “동작_선언자”의 값이 변한 시점에서만 수행한다. - “동작_선언자”가 없으면 WAIT문으로 변화 시점을 표현한다. - “동작_선언자”가 없는 Process를 Passive Process라 한다.

*. 표현 방법

*. 선언문

ALIAS ATTRIBUTECOMPONENT CONFIGURATIONCONSTANT DISCONNECTIONFILE Sub-Program 선언 및 동작 표현SUBTYPE TYPEUSE VARIABLE

29

[ Process_이름 : ] process [ (동작_선언자) ] [ is ] [ 선언문 ]begin Sequential문end process [ Process_이름 ] ;

Page 30: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(2) SIGNAL 전달문

*. 표현 방법

a. 조건적 SIGNAL 전달문

- IF문을 Concurrent문으로 사용할 수 있게 표현한 것.

*. 표현 방법

b. 선택적 SIGNAL 전달문

- CASE문을 Concurrent문으로 사용할 수 있게 표현한 것.

*. 표현 방법

30

[ 이름 : ] 결과값 <= [ transport | [ reject 시간 ] inertial ] 전달_표현문 ;

전달_표현문 ::= -- Waveform 전달_표현1 [, 전달_표현2 ] | unaffected

[ 이름 : ] 결과값 <= 전달_표현문1 [ when 조건문 else 전달_표현문2 ] ;

[ 이름 : ] with 제어문 select 결과값 <= 전달_표현문1 when 조건문1 [, 전달_표현문2 when 조건문2 | 전달_표현문3 when others ] ;

Page 31: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. 참고 : Delay의 관계

5 ns Delay

INPUT

5 ns 4 ns 3 ns 2 ns

INPUT

INERTIAL

TRANSPORT

GATED

- 일반적인 Logic Simulator, HDL Simulator의 기본 Delay값은 Inertial

(1) Inertial Delay 표현

DO <= DI after 5 ns;

(2) Transport Delay 표현

DO <= transport DI after 5 ns;

(3) Gated Delay 표현

DO <= reject 2 ns DI after 5 ns;

31

Page 32: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(3) COMPONENT 관련문

- Structural VHDL 표현 문장. (Netlist 표현)

*. 표현 방법

32

이름 : Component_이름 [ generic map ( Generic_연결문 ) ] [ port map ( Port_연결문 ) ] ;

Page 33: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(4) BLOCK문

- ARCHITECTURE 내부의 또 다른 VHDL 문장이라고 할 수 있다.- 독자적인 입출력 표현을 할 수 있다.- 내부에 또 다른 Concurrent 문을 계속 사용할 수 있다.- GENERIC MAP 사용시 “GENERIC_표시자” 뒤에 “;”를 사용할 수 없다.- PORT MAP 사용시 “PORT_표시자” 뒤에 “;”를 사용할 수 없다.- “동작_제한식”을 이용하여 Guarded Signal 표현을 할 수 있다.

*. 표현 방법

*. 선언문

ALIAS ATTRIBUTECOMPONENT CONFIGURATIONCONSTANT DISCONNECTIONFILE PROCEDURE CallSIGNAL SUBTYPETYPE USE

33

[ Block_이름 : ] block [ (동작_제한식) ] [ is ] [ generic ( Generic_표시자 ) [ generic map ( Generic_연결문 ) ; ]] [ port ( Port_표시자 ) [ port map ( Port_연결문 ) ; ]] [ 선언문 ]begin Concurrent문end block [ Block_이름 ] ;

Page 34: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(5) PROCEDURE Call

- 독자적인 Sub-Program 진행문 표현. *. 표현 방법

(6) GENERATE문

- 반복되는 문장을 하나의 문장으로 표현할 때 사용.

*. 표현 방법

(7) ASSERT문

- 임의의 조건에 만족하지 않을 때 화면 출력 및 Simulation 제어.

*. 표현 방법

34

[ 이름 : ] Procedure_Call_문장 ;

Generate_이름 : Generate_관련문 generate [ Concurrent문 ]end generate [ Generate_이름 ] ;

[ 이름 : ] assert 조건문

[ report 출력_내용 ] [ severity 등급 ] ;

등급 ::= -- Severity_Level note -- 단순한 화면 출력

warning -- Warning Message 출력 : 시간, 곳 error -- Warning Message & Simulation Stop failure -- Warning Message & Simulation Exit

Page 35: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

4.2. Sequential문

- 앞의 문장이 수행되어야만 뒤의 문장 수행 가능. (순차적 표현 문장) - 일반 컴퓨터 언어와 표현 방법 비슷. (Behavioral 표현) - PROCESS문과 Sub-Program 동작 표현문에서만 사용 가능.

*. 종류

ASSERT - 화면 출력 및 Simulation 진행 제어.CASE - 선택적 판단문.EXIT - 현재 제어문 탈출.IF - 조건 판단문.Loop문 - 반복 진행문.NEXT - 다음 제어문으로 옮김.NULL - 현재 상태 유지.PROCEDURE Call - 독자적인 Sub-Program 실裔문.RETURN - 본문으로 귀환.SIGNAL 전달문 - H/W 적 값 전달문.VARIABLE 전달문 - S/W 적 값 전달문.WAIT - 동작 진행문.

35

Page 36: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(1) ASSERT - “assert 조건문”의 생략 가능. - 주로 Timing Violation Check용으로 사용.

*. 표현 방법

(2) CASE

*. 표현 방법

(3) IF

*. 표현 방법

36

[ 이름 : ] [ assert 조건문 ] [ report 출력_내용 ] [ severity 등급 ] ;

[ 이름 : ] case 판단문 is when 조건문 => 실행문 [ when 조건문2-1 | 조건문2-2 => 실행문2 ] [ when 조건문3-1 to 조건문3-2 => 실행문3 ] [ when others => 실행문4 ]end case [ 이름 ] ;

[ 이름 : ] if 조건문1 then 실행문1 [ elsif 조건문2 then 실행문2 ] [ else 실행문3 ]end if [ 이름 ];

Page 37: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(4) Loop문

- 조건 반복 수행문 표현 (FOR, WHILE, 일반 Loop문)

*. 표현 방법

(5) SIGNAL & VARIABLE 전달문

- SIGNAL 전달문은 H/W적 표현. (외적 변수 사용) - VARIABLE 전달문은 S/W적 표현. (내적 변수 사용)

*. 표현 방법

37

-- SIGNAL 전달문 표현 방법 [이름 :] 결과값 <= [ transport | [ reject 시간 ] inertial ] 전달_표현문 ;

전달_표현문 ::= -- Waveform{ 전달값 [ after 시간 ] | null [ after 시간 ]} [, 전달_표현문| unaffected ] ;

-- VARIABLE 전달문 표현 방법 결과값 := 전달값 ;

[Loop_이름 :] [while 조건문| for 변수 in 조건_범위 ] loop실행문

end loop [Loop_이름] ;

Page 38: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(6) WAIT

- 임의의 조건이 만족할 때까지 수행 중단. - WAIT ON: “Signal_이름”의 값이 변화되었을 때 다음 문장 수행. - WAIT UNTIL : “조건문”이 만족되었을 때 다음 문장 수행. - WAIT FOR : “시간”이 지나면 다음 문장 수행.

*. 표현 방법

38

wait [ on Signal_이름 [ , Signal_이름 ]] [ until 조건문 ] [ for 시간 ] ;

Page 39: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. 실습 5. Concurrent 문장에 대한 이해 (BLOCK_TEST.VHD)

1. block_test.vhd 화일을 아래와 같이 작성한다.

library IEEE; use IEEE.std_logic_1164.all;

entity BLK_TEST is port ( A, B, C, D : in std_logic; OUT1, OUT2 : out std_logic );end BLK_TEST;

architecture Func_BLK_TEST of BLK_TEST isbegin B1: block signal S : std_logic; begin S <= A and B;

B2: block signal S : std_logic; begin S <= C or D; OUT1 <= S; end block;

OUT2 <= S; end block;end Func_BLK_TEST;

이 VHDL 문장은 Block문에서의 Signal이 서로 이름이 같다고 하여도 내부에서만 동작한다는 것을 증명하는 실습이다. B1 Block과 B2 Block 둘 다 S라는 Signal을 선언하여 각자 사용하고 있지만 이 둘은 엄연히 서로 다른 동작을 하게 된다.

39

Page 40: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. 실습 6. 여러 종류의 Counter에 대한 실습

Up Count Grey Count Johnson Count

0123456789101112131415

0000000100100011010001010110011110001001101010111100110111101111

0000000100110010011001110101010011001101111111101010101110011000

0000000100000010000001000000100000010000001000000100000010000000

1. 위의 Count 중에서 Up Count를 제외한 Grey Count와 Johnson Count를 VHDL 회로로 만들고 Simulation 한다.

40

Page 41: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. 실습 7. Sequential 문에 대한 실습. (DFF_TEST.VHD)

1. 아래와 같이 dff_test.vhd 화일을 만든다.

library IEEE; use IEEE.std_logic_1164.all;

entity DFF_TEST is generic ( SU : time := 5 ns; HD : time := 2 ns; T_DLY : time := 3 ns ); port ( DI, CK : in std_logic; DO : out std_logic );end DFF_TEST;

architecture Func_DFF_TEST of DFF_TEST isbegin

process (DI, CK) variable Last_DI, Last_CK : time := 0 ns;begin if CK’event and CK = ‘1’ then if (NOW - Last_DI) < SU then assert FALSE report “Setup Time Violation” severity ERROR; DO <= ‘X’; else DO <= DI after T_DLY; end if;

Last_CK := NOW; elsif DI’event then if (NOW - Last_CK) < HD then assert FALSE report “Hold Time Violation” severity WARNING;

41

Page 42: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

DO <= ‘X’; end if;

Last_DI := NOW; end if;end process;end architecture;

2. 아래와 같이 Simulation Batch File을 만든다. (dff_test.do)

add wave *force ck 0, 1 10 -r 20force di 0, 1 25, 0 46, 1 72, 0 91run 120 ns

3. VCOM 명령과 VSIM 명령을 수행시켜 Simulator Window를 만든다.

4. Simulator Window의 Menu에서 ASSERT Mode를 ERROR로 선택한다..

5. Simulation Window로 다시 되돌아와 아래의 명령을 수행한다.

VSIM 1> do dff_test.do

6. 위의 명령을 수행하면 Error Message가 화면에 떨어지면서 50 ns에서 Simulator가 멈추게 된다. (ASSERT의 Severity가 ERROR이기 때문)

7. 계속 Simulation 하려면 아래와 같다.

VSIM (pause) 2> continue

8. Simulation은 120 ns까지 실행되었으나 91 ns에서 Hold Time에 대한 Warning이 나온 것을 확인한다.

-- 이 실습은 Assert문을 이용한 DFF의 간단한 Modeling을 한 것이다. Assert 문의 등급이 서로 다를 때마다 실제 Simulator의 동작을 제어하는 과정과 그에 대한 동작 확인을 하는데 그 목적이 있다.

42

Page 43: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

43

Page 44: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

5. Data Type

*. Data Type 종류

Data Type 표현자

숫자형

(Scalar Type)

열거형 (Enumeration Type) BIT, BOOLEAN정수형 (Integer Type) INTEGER, NATURAL실수형 (Real Type) REAL물리형 (Physical Type) TIME, VOLT

혼합형

(Composite Type)

배열형

(Array Type)

제한형

(Constraint Type)TO, DOWNTO

무제한형

(Unconstraint Type)STD_LOGIC_VECTOR

뭉침형

(Record Type)RECORD

연결형 (Access Type)

ACCESS, NEW

File Type FILE

44

Page 45: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

5.1. 정수형 (Integer Type)

- 정수 -(2**32 - 1)에서 (2**32 - 1)까지의 모든 숫자 사용 가능. - 정수형의 최고값은 INTEGER’high로 나타냄. - 정수형의 죄저값은 INTEGER’low로 나타냄. - 응용 정수형 : NATURAL, POSITIVE

5.2. 실수형 (Floating Point Type)

- 실수 -1E38에서 1E38까지 표현 가능. - 실수형의 최고값은 REAL’high로 나타냄. - 실수형의 최저값은 REAL’low로 나타냄.

5.3. 물리형 (Physical Type)

- 시간, 거리, 전류 등의 물리적인 단위를 표시. - 기본 단위의 고정 범위는 -(2**31 - 1)에서 (2**32 - 1)까지 가능.

45

Page 46: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

5.4. 열거형 (Enumeration Type)

- 정의된 Data들이 열거된 숫자값을 가진다. (Enumeration Encoding)

*. Standard VHDL의 사용 예

type BOOLEAN is (FALSE, TRUE)type STD_ULOGIC is (‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’);

(1) Logic의 상태 표현

U UninitializedX Unknown0 Strong Low1 Strong HighZ High ImpedanceW Weak UnknownL Weak LowH Weak High- Don’t Care

46

Page 47: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

5.5 배열형 (Array Type)

- 같은 형태의 Data들을 모아서 하나로 묶은 형태.

(1) 무제한형 (Unconstraint Type)

- 이미 선언된 Data를 무제한으로 나열하여 재배열 시킨 형태.

*. 표현 방법

(2) 제한형 (Constraint Type)

- 이미 선언된 Data들을 정해진 범위를 가진 배열로 만들어 사용.

*. 표현 방법

(3) TO와 DOWNTO

- 배열형 내부의 진행 범위를 나타내준다. - TO는 오름차순 : (0 to 4) - DOWNTO는 내림차순 : (4 downto 0)

47

type 배열_이름 is array ( 범위_이름 range <> ) of Type_이름;

type 배열_이름 is array ( 정수_범위 ) of Type_이름 ;

Page 48: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(4) 배열형의 값 전달 방법

*. Array Assignment

B := “0101”;C <= “11110000”;

*. Slice

C(7 downto 4) <= B;C(3 downto 0) <= “0000”;

*. Aggregate

C <= (‘0’, A, others => ‘1’);C <= (7 => ‘0’, 6 => A(3), 5 => A(2), A(1), A(0), ‘1’,

others => ‘1’);

*. Variable Index

for I in 0 to 3 loop C(i+4) <= B(i);

(5) 다차원 배열 표현 방법

-- Multi-Dimensional Arraytype Memory1 is array (0 to 4, 3 downto 0) of BIT;

-- Array of Arraytype WORD is array (3 downto 0) of BIT;type Memory2 is array (0 to 4) of WORD;

48

Page 49: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

6. 연산자 (Operator)

*. 연산자의 종류

연산자 종 류 우선 순위

논리 연산자 비교 연산자 자리 바꿈

연산자 덧셈 연산자

부호 곱셈 연산자 기타 연산자

AND OR NAND NOR XOR XNOR

= /= <= < > >=SLL SRL SLA SRA ROL ROR

+ - & + -

* / MOD REM ** ABS NOT

제일 높음

제일 낮음

6.1. 비교 연산자

-- TRUE가 되는 경우 -- FALSE가 되는 경우“1011” = “1011” “1011” /= “1011”“1101” > “1100” “1101” < “1100” “10” < “100” “010” > “100” “11” > “100” “11” < “100” “01” < “011” “011” > “100”

49

Page 50: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

6.2. 자리 바꿈 연산자

SLL -- Shift Left Logical SRL -- Shift Right LogicalSLA -- Shift Left Arithmetic SRA -- Shift Right ArithmeticROL -- ROtational Left logical ROR -- ROtational Right logic

*. ‘&’ (Concatenation)의 사용 예C1 <= ‘0’ & A; C2 <= A & B;

(1) Shift Register의 종류

Logical Shift Arithmetic Rotational

0 MSB

(2) Logical Shift의 표현

DO <= DI (2 downto 0) & ‘0’;

(3) Arithmetic Shift의 표현

DO <= DI (2 downto 0) & DI(0);

(4) Rotational Shift의 표현

DO <= DI (2 downto 0) & DI (3);

50

Page 51: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

6.3. Literal

-- 어떤 한 종류의 문자열을 쉽게 볼 수 있도록 만들어 주는 것.

*. 숫자 문자열 (Numerical Literal)

170 -- 보통의 정수 표현1_7_0 -- 구분자를 사용한 표현10#170# -- 구별자를 사용한 10진수 표현2#1010_1010# -- 구분자와 구별자를 사용한 2진수 표현16#AA# -- 구별자를 사용한 16진수 표현

*. 열거 문자열 (Enumeration Literal)

X”AAA” -- 16진수 표현B”1010_1010_1010” -- 구분자를 사용한 2진수 표현B”1_010101_010_10” -- 구분자를 사용한 2진수 표현O”5252” -- 8진수 표현O”5_25_5” -- 구분자를 사용한 8진수 표현

51

Page 52: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

7. ATTRIBUTE

- 회로 동작이나 Simulation 상태의 다양화 표현을 위한 일종의 함수 표현. - “Type_이름’Attribute_이름”의 형식으로 사용.

7.1. TYPE 관련 ATTRIBUTE

*. TYPE의 전체적인 범위를 알아보기 위한 것들.

가능한 Data Type은 숫자형과 관련된 SUBTYPE.

type’LEFT - Index Range의 가장 왼쪽을 말함.type’RIGHT - Index Range의 가장 오른쪽을 말함.type’HIGH - Index Range의 가장 높은 구간을 말함.type’LOW - Index Range의 가장 낮은 구간을 말함.

*. TYPE의 위치와 관련된 것을 알아보기 위한 것들.

사용 가능한 Data Type은 일반적인 TYPE 및 SUBTYPE.

type’BASE - TYPE이나 SUBTYPE으로 지정되기 전의 TYPE.type’SUCC(V) - TYPE 내에서 V의 다음 순서를 말함.type’PRED(V) - TYPE 내에서 V의 전 순서를 말함.type’LEFTOF(V) - TYPE 내에서 V의 왼쪽에 있는 것을 말함.type’RIGHTOF(V) - TYPE 내에서 V의 오른쪽에 있는 것을 말함.type’POS(V) - TYPE 내에서 V가 몇번째 값인가를 말함.type’VAL(N) - TYPE 내에서 N번째의 값을 말함.

52

Page 53: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

7.2. 배열 관련 ATTRIBUTE

- 접두사는 배열 관련자 (Array Object)만이 사용 가능.

*. 다차원 배열 관련.

type’LEFT[(N)] - N번째 Index Range의 가장 왼쪽을 말함.type’RIGHT[(N)] - N번째 Index Range의 가장 오른쪽.type’HIGH[(N)] - N번째 Index Range의 가장 위를 말함.type’LOW[(N)] - N번째 Index Range의 가장 아래를 말함.

*. 배열 길이 및 구간 관련.

type’LENGTH[(N)] - N번째 Index Range의 길이를 말함.type’RANGE[(N)] - N번째 Index Range의 구간 범위를 말함.

type’LEFT[(N)] to type’RIGHT[(N)]type’REVERSE_RANGE[(N)]

- N번째 Index Range 반대 상태의 구간 범위.type’RIGHT[(N)] to type’LEFT[(N)]

7.3. SIGNAL ATTRIBUTE

- SIGNAL과 관련된 여러 가지 상태를 표현.

signal’ACTIVE - Simulation 동안 signal이 사용되면 TRUE.signal’LAST_ACTIVE - (NOW - signal의 먼젓번 사용 순간)signal’EVENT - Simulation 동안 signal이 변화되면 TRUE.signal’LAST_EVENT - (NOW - signal이 마지막으로 변화된 시간).signal’LAST_VALUE - 변화되기 이전의 signal 값.signal’DELAYED(T) - T 시간 만큼 signal이 지연됨.signal’QUIET(T) - T 시간 만큼 signal이 안 사용되면 TRUE.signal’STABLE(T) - T 시간 만큼 signal이 안 변화되면 TRUE.

53

Page 54: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

8. 선언문

8.1. 일반 선언문 (Declaration)

*. 일반 선언문의 종류

ALIAS - UNIX에서의 ALIAS와 비슷한 기능.ATTRIBUTE - ATTRIBUTE로 사용할 상수들 선언.COMPONENT - Structural VHDL 표현을 위한 하부 ENTITY.CONSTANT - 상수 선언.FILE - 입출력을 위한 FILE Type 선언.SIGNAL - H/W 적 변수 및 내부 Net 선언.VARIABLE - S/W 적 임시 변수 선언.SUBTYPE - TYPE의 일부를 변형시켜 사용할 때 사용.TYPE - 새로운 Data Type 선언.

54

Page 55: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(1) ALIAS

- 원래의 Data Type을 다른 이름으로 잠시 사용할 때 사용. - 본래의 Data Type의 성질을 그대로 유지한다.

*. 표현 방법

*. 선언 위치

55

alias Alias_이름 : 선언자_표시 is 피선언자_이름 ;

선언자_표시 ::= -- Subtype_Indication [ Resolution_Function_이름 ] Type_이름 [ range 구간 ]

entity ENT is architecture ARC of ENT isAlias_선언 Alias_선언

begin begin... ...

end ENT; end ARC;

package PKG is package body PKG isAlias_선언 Alias_선언... ...

end PKG; end PKG;

procedure P (...) isAlias_선언

begin...

end P;

B: block P: processAlias_선언 Alias_선언

begin begin... ...

end block B; end process P;

Page 56: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(2) ATTRIBUTE

- 사용자 정의 ATTRIBUTE를 선언. - 연결형, FILE 형, 제한형 등을 제외한 모든 Data Type 선언 가능.

*. 표현 방법

*. 선언 위치

56

attribute Attribute_이름 : Type_이름 ;

entity ENT is architecture ARC of ENT is Attribute_선언 Attribute_선언begin begin ... ...end ENT; end ARC;

package PKG is procedure P (...) is Attribute_선언 Attribute_선언 ... beginend PKG; ...

end P;

B: block P: process Attribute_선언 Attribute_선언begin begin ... ...end block B; end process P;

Page 57: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(3) COMPONENT

- Structural VHDL 표현을 위해 하부 ENTITY를 COMPONENT로 선언.

*. 표현 방법

*. 선언 위치

57

component Component_이름 is [ generic ( Generic_표시자 ) ] [ port ( Port_표시자 ) ]end component ;

package PKG is architecture ARC of ENT is Component_선언 Component_선언 ... beginend PKG; ...

end ARC;

B: block Component_선언begin ...end block B;

Page 58: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(4) CONSTANT

- 상수 선언. - 연결형과 FILE Type을 제외한 모든 Data Type 선언 가능. - 선언 위치는 ALIAS의 선언 위치와 같다.

*. 표현 방법

(5) FILE

- File 입출력을 위한 선언. - 선언 위치는 ALIAS와 같다.

*. 표현 방법

58

constant Constant_이름 : 선언자_표시 [ := 초기값 ] ;

file File_이름 : 선언자_표시 is [ 입출력 ] File_외부_이름;

입출력 ::= -- mode in| out| inout| buffer| linkage

Page 59: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(6) SUBTYPE

- 이미 선언된 Data Type을 임의대로 변형하여 사용할 때 선언. - 선언 위치는 ALIAS와 같다.

*. 표현 방법

(7) TYPE

- 새로운 Data Type을 만들 때 사용. - 숫자형, 열거형, 연결형, FILE Type 등 모든 Data Type 선언 가능. - 선언 위치는 ALIAS의 선언 위치와 같다.

*. 표현 방법

59

subtype Subtype_이름 is 선언자_표시 ;

type Type_이름 is Type_피선언자 ;

Page 60: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(8) SIGNAL & VARIABLE

- SIGNAL은 H/W적 변수, VARIABLE은 S/W적 임시 변수. - FILE Type을 제외한 모든 Data Type 선언 가능.

*. 표현 방법

*. 선언 위치

60

signal Signal_이름1 [, Signal_이름2] : 선언자_표시[ := 초기값 ] ;

variable Variable_이름1 [, Variable_이름2] : 선언자_표시[ := 초기값 ] ;

entity ENT is architecture ARC of ENT is Signal_선언 Signal_선언begin begin ... ...end ENT; end ARC;

package PKG is B: block Signal_선언 Signal_선언 ... beginend PKG ...

end B;

procedure P (...) is P: process Variable_선언 Variable_선언begin begin ... ...end P; end process P;

Page 61: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

8.2. 지정문 (Specifications)

(1) ATTRIBUTE 지정문

- 사용자 정의 ATTRIBUTE를 선언한 후에 이에 대한 구체 사항 정의.

*. 표현 방법

61

attribute Attribute_이름 of Entity_지정 is 초기값 ;

Entity_지정 ::= -- Entity_spec.Entity_이름_관련 : Entity_표시

Entity_이름_관련 ::= -- Entity_Name_ListEntity_이름 [, Entity_이름 ]| others| all

Entity_표시 ::= -- Entity_classentity| architecture | configuration| procedure | function| package | type| subtype | constant| signal | variable| component | label

Page 62: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. 선언 위치

62

entity ENT is architecture ARC of ENT is Attribute_지정 Attribute_지정begin begin ... ...end ENT; end ARC;

package PKG is configuration CONF of ENT is Attribute_지정 Attribute_지정 ... beginend PKG ...

end CONF;

B: block P: process Attribute_지정 Attribute_지정begin begin ... ...end block B; end process P;

procedure P (...) is Attribute_지정begin ...end P;

Page 63: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(2) CONFIGURATION 지정문

- CONFIGURATION을 사용하지 않고 ARCHITECTURE에서 직접 사용.

*. 표현 방법

63

for Component_지정 use 묶음_처리문 ;

Component_지정 ::= -- Component_SpecificationInstance_이름_관련 : Component_이름

Instance_이름_관련 ::= -- Instantiation_listInstance_이름 [, Instance_이름 ]| others| all

묶음_처리문 ::= -- Binding_IndicationEntity_구조문

[ generic map ( Generic_연결문 ) ][ port map ( Port_연결문 ) ]

Entity_구조문 ::= -- Entity_Aspectentity Library_이름.Entity_이름[(Archit_이름)]| configuration Config_이름| open

Page 64: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

8.3. 기타 선언문

- PACKAGE, LIBRARY 등을 현재의 VHDL에서 사용할 수 있게 선언함. - 아무런 선언을 하지 않아도 아래의 문장이 기본적으로 선언됨.

(1) USE 선언문 (USE Clause)

- 해당 LIBRARY의 PACKAGE 또는 ENTITY 연결 선언문.

*. 표현 방법

(2) LIBRARY 선언문 (LIBRARY Clause)

- LIBRARY 연결 선언문.

*. 표현 방법

64

library STD; use STD.STANDARD.all;library WORK;

use Library_이름.Package_이름.{Item | all} ;use Library_이름.Entity_이름.{Item | all} ;

library Library_이름 ;

Page 65: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

(3) 기타 선언문의 위치

65

Library_선언 Library_선언Use_선언 Use_선언entity ENT is architecture ARC of ENT is Use_선언 Use_선언begin begin ... ...end ENT; end ARC;

Library_선언 Library_선언Use_선언 Use_선언package PKG is package body PKG is Use_선언 Use_선언 ... ...end PKG; end PKG;

procedure P (...) is Library_선언begin Use_선언 Use_선언 configuration CONF of ENT is ... Use_선언end P; ...

end CONF;

B: block P: process Use_선언 Use_선언begin begin ... ...end block B; end process P;

Page 66: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. 실습 8. 복합 ALU에 대한 실습

RST CLK CMD Description

0 X X Initialize 1 / 0 A + B 1 / 1 A - B 1 / 2 A * B 1 / 3 Hold 1 / 4 Logical Shift Left A with B 1 / 5 Logical Shift Right A with B 1 / 6 Arith. Shift Left A with B 1 / 7 Rotational Shift Left A with B

1. 위의 동작을 하는 복합 ALU를 아래의 Entity를 이용하여 VHDL을 완성한다.

entity ALU is port ( RST : in std_logic; CLK : in std_logic; CMD : in std_logic_vector (2 downto 0); A : in std_logic_vector (7 downto 0); B : in std_logic_vector (7 downto 0); DO : out std_logic_vector (7 downto

0));end ALU;

2. Compile을 한 다음 동작이 제대로 되는지 확인한다.

66

Page 67: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. 실습 9. ATTRIBUTE에 대한 실습 (DFFR_TEST.VHD)

1. 아래의 ENTITY를 기본으로 하여 Reset이 달린 D Flip-Flop을 실제 Modeling 한다.

library IEEE: use IEEE.std_logic_1164.all;

entity DFFR_TEST is generic ( SU : time := 5 ns; HD : time := 2 ns; RT : time := 3 ns; T_DLY : time := 3 ns ); port ( RST : in std_logic; CK : in std_logic; DI : in std_logic; DO : out std_logic );end DFFR_TEST;

2. 이 DFFR_TEST에 대한 Simulation Batch File은 아래와 같다.

add wave *force CK 0, 1 10 -r 20force RST 0, 1 20, 0 120, 1 147, 0 160, 1 188force DI 1, 0 45, 1 66, 0 92, 1 111run 220

3. 위의 명령을 실행하면 아래와 같이 Timing Violation이 걸리게 되어 있다. 만약 제대로 동작되지 않았으면 본문을 다시 한번 확인하기 바란다.

70 ns : Setup Time Violation111 ns : Hold Time Violation190 ns : Recovery Time Violation

67

Page 68: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. 참고 : Timing Violation에 대하여

RST RT MPW_H MPW_L

CLK SU HD

DI

RT Recovery Time, Clock에 의한 동작이 되기 위한 Reset 신호의 Off 최소 준비 시간

SU Setup Time, Clock에 의해 DATA가 받아들여지는 최소 준비 시간HD Hold Time, Clock에 의해 DATA가 처리되어 질 때까지의 최소 유지

시간MPW Min. Pulse Width, Clock에 동작하기 위한 최소 Pulse 유지 시간

68

Page 69: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

69

Page 70: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

제 3 장 VHDL의 응용

70

Page 71: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

71

Page 72: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

9. Memory에 대한 표현

*. Memory의 종류

(1) ROM

- Read Only Memory- 내장형 : MROM (Mask ROM)

PROM (Programmable ROM)- 외장형 : MROM (Mask ROM)

PROM (Programmable ROM) EPROM (Erasable ROM) – EEPROM Flash ROM

(2) RAM

- Read/Write Memory- 내장형 : SRAM – SPRAM, DPRAM, QPRAM

DRAM – General Sync DRAM- 외장형 : SRAM – Fast SRAM, FIFO

DRAM – SDRAM, SGRAM, Flash

(3) 기능에 대한 분류

- Sync. Memory : Clock에 의해 동작 (Flip-Flop 형식)- Async. Memory : Write Enable에 의해 동작 (Latch 형식)

72

Page 73: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

9.1. Async. ROM에 대한 표현

library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all;

entity ASYNC_ROM is generic ( DSize : positive := 8; ASize : positive := 4 ); port ( REB : in std_logic;

A : in std_logic_vector (ASize-1 downto 0); DO : out std_logic_vector (DSize-1 downto 0));end ASYNC_ROM;

architecture ARC_ASYNC_ROM of ASYNC_ROM isconstant AWord : positive := 2**ASize;

type MEM_Tbl is array (0 to AWord-1) of bit_vector (DSize-1 downto 0);

constant ROM_Tbl : MEM_Tbl := -- 7:6 5:1 0 -- CNTL A/D R/W

( B”00_00001_0”, -- JMP Ax (02/h) B”01_00010_0”, -- LD Ax (44/h) B”01_00011_0”, -- LD Bx, Ax (46/h) B”01_00100_0”, -- LD Cx, Ax (48/h) B”00_11001_1”, -- ACC Ax (33/h) B”00_10001_1”, -- ACC Bx, Ax (23/h) B”11_01110_1”, -- ADD Ax (DD/h) B”10_10101_1”, -- ADD Bx, Ax (AB/h) B”10_00001_0”, -- SUB Ax (82/h) B”10_00010_0”, -- SUB Bx, Ax (84/h) B”01_00011_0”, -- LD Bx, Ax (46/h) B”01_00100_0”, -- LD Cx, Ax (48/h) B”00_11001_1”, -- ACC Ax (33/h)

73

Page 74: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

B”00_10001_1”, -- ACC Bx, Ax (23/h) B”11_01110_1”, -- ADD Ax (DD/h) B”10_10101_1”); -- ADD Bx, Ax (AB/h)

begin

process (REB, A) variable I_ADDR : natural;beginI_ADDR := Conv_Integer (A);

if (REB = ‘0’) then DO <= To_StdLogicVector (ROM_TBL (I_ADDR));end if;

end process;

end ARC_ASYNC_ROM;

74

Page 75: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

9.2. Sync SRAM에 대한 표현

library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all;

entity SYNC_SRAM is generic ( DSize : positive := 8; ASize : positive := 4 );

port ( CLK : in std_logic; WEB : in std_logic; OEB : in std_logic;

A : in std_logic_vector (ASize-1 downto 0); DI : in std_logic_vector (DSize-1 downto 0);

DO : out std_logic_vector (DSize-1 downto 0));end SYNC_SRAM;

architecture ARC_SYNC_SRAM of SYNC_SRAM isconstant AWord : positive := 2**ASize;

type MEM_Tbl is array (0 to AWord-1) of std_logic_vector (DSize-1 downto 0);

signal T_DO : std_logic_vector (DSize-1 downto 0);begin

DO <= T_DO when (OEB = ‘0’) else(others => ‘Z’);

process (CLK) variable RAM_TBL : MEM_Tbl; variable I_ADDR : natural;beginI_ADDR := Conv_Integer (A);

if (WEB = ‘0’) then

75

Page 76: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

RAM_TBL (I_ADDR) := DI;else T_DO <= RAM_TBL (I_ADDR);end if;

end process;

end ARC_SYNC_SRAM;

76

Page 77: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

9.3. DPRAM에 대한 표현

1. 입력하면서 출력하고자 할 때

IN 1 2 3 4 5 6 7 8 9 10

OUT 2 4 6 8 10 1 3 5 7 9

2. 입출력 Timing이 서로 다를 때

IN

OUT

3. 입출력 Clock이 서로 다를 때

IN

OUT

library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all;

entity SYNC_DPRAM is generic ( DSize : positive := 8; ASize : positive := 4 );

port ( CLK_L : in std_logic; WEB_L : in std_logic; A_L : in std_logic_vector (ASize-1 downto 0); CLK_R : in std_logic;

77

Page 78: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

OEB_R : in std_logic; A_R : in std_logic_vector (ASize-1 downto 0);

DI : in std_logic_vector (DSize-1 downto 0); DO : out std_logic_vector (DSize-1 downto 0));end SYNC_DPRAM;

architecture ARC_SYNC_DPRAM of SYNC_DPRAM isconstant AWord : positive := 2**ASize;

type MEM_Tbl is array (0 to AWord-1) of std_logic_vector (DSize-1 downto 0);

signal RAM_TBL : MEM_TBL;begin

process (CLK_L) variable I_ADDR : natural;beginI_ADDR := Conv_Integer (A_L);

if rising_edge (CLK_L) thenif (WEB_L = ‘0’) then

RAM_TBL (I_ADDR) <= DI;end if;

end if;end process;

process (CLK_R)variable I_ADDR : natural;

beginI_ADDR := Conv_Integer (A_R);

if (CLK_R’event and CLK_R = ‘1’) then if (OEB_R = ‘0’) then

78

Page 79: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

DO <= RAM_TBL (I_ADDR); else DO <= (others => ‘Z’); end if;end if;

end process;

end ARC_SYNC_DPRAM;

79

Page 80: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. 실습 10. DPRAM에 대한 실습

1. 9.3.에서 표현된 DPRAM을 이용하여 Compile을 한 다음 Test Bench를 직접 짠다.

2. Test Bench를 이용하여 동작이 제대로 되는지 확인한다.

80

Page 81: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

*. 실습 11. FIFO에 대한 실습

DI DO

WRITE A_L A_R READ

FULL EMPTY

1. 위의 Block Diagram을 참고하여 FIFO를 설계한다.

2. 아래의 Test Bench를 이용하여 동작이 제대로 이루어지는지 확인한다.

library IEEE; use IEEE.std_logic_1164.all;

entity TB_FIFO is end;

architecture TB_FIFO_Test of TB_FIFO is constant DSize : positive := 8; constant AWord : positive := 4;

signal RST, CLK, READ, WRITE : std_logic; signal FULL, EMPTY : std_logic; signal DI, DO : std_logic_vector(DSize - 1 downto 0);

component FIFO

81

DPRAM

Write Control

Read Control

SignalControl

Page 82: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

generic ( DSize : positive; AWord : positive );port (RST : in std_logic;

CLK : in std_logic; READ : in std_logic; WRITE : in std_logic; DI : in std_logic_vector(DSize - 1 downto 0); FULL : buffer std_logic; EMPTY : buffer std_logic; DO : out std_logic_vector(DSize - 1 downto 0)); end component;begin MUT: FIFO generic map (DSize, AWord) port map (RST, CLK, READ, WRITE, DI, FULL, EMPTY, DO);

DRIVE1: process begin if NOW = 0 nS then RST <= '0', '1' after 50 nS; CLK <= '0'; wait for 100 nS; else CLK <= '1'; wait for 50 nS; CLK <= '0'; wait for 50 nS; end if; end process;

DRIVE2: process begin if NOW = 0 nS then DI <= "00010010"; wait for 50 nS; else DI <= "00100011" after 100 nS,

82

Page 83: 제 1 장 VHDL의 개요cfs12.blog.daum.net/.../29/48d9981061f6a&filename=VHDL.doc · Web view1 장 VHDL의 개요 1. VHDL이란 VHDL이란 VHSIC Hardware Description Language의

"00110100" after 200 nS; wait for 200 nS;

DI <= "01000101" after 100 nS, "01010110" after 200 nS, "10001001" after 300 nS; wait for 300 nS; end if; end process;

DRIVE3: process begin if NOW = 0 nS then WRITE <= '1'; READ <= '1'; wait for 50 nS; else WRITE <= '0', '1' after 100 nS; READ <= '1', '0' after 100 nS, '1' after 200 nS; wait for 200 nS;

WRITE <= '0', '1' after 200 nS; READ <= '0' after 200 nS, '1' after 300 nS; wait for 300 nS;

WRITE <= '0'; wait until FULL = '1'; wait for 50 nS;

WRITE <= '1'; READ <= '0'; wait until EMPTY = '1'; wait for 50 nS; end if; end process;end TB_FIFO_Test;

83