unit 10 introduction to vhdl

59
Unit 10 Introduction to VHDL

Upload: clinton-walters

Post on 03-Jan-2016

302 views

Category:

Documents


5 download

DESCRIPTION

Unit 10 Introduction to VHDL. 강의 개요. VHDL 소개 VHDL 문법 소개 VHDL 을 활용한 조합 논리 회로 설계 연산자의 우선순위 파악 산술 연산 수행. 10.0 VHDL 소개. 하드웨어기술언어 (HDL : Hardware Description Language) 최초로 공인된 표준 하드웨어 설계언어   CPLD/FPGA 등 소규모 설계에서 주문형집적회로 (ASIC) 등 대규모 시스템설계에 사용 회로도와 하드웨어기술언어의 설계 비교. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Unit 10 Introduction to VHDL

Unit 10 Introduction to VHDL

Page 2: Unit 10 Introduction to VHDL

강의 개요VHDL 소개

VHDL 문법 소개 VHDL 을 활용한 조합 논리 회로 설계 연산자의 우선순위 파악 산술 연산 수행

Page 3: Unit 10 Introduction to VHDL

10.0 VHDL 소개

하드웨어기술언어 (HDL : Hardware Description Language)

최초로 공인된 표준 하드웨어 설계언어 CPLD/FPGA 등 소규모 설계에서 주문형집적회로 (ASIC) 등 대규모

시스템설계에 사용

회로도와 하드웨어기술언어의 설계 비교

(a) 회로도를 이용한 설계   (b) 하드웨어기술언어를 이용한 설계

Page 4: Unit 10 Introduction to VHDL

10.0 VHDL 소개

■ 하드웨어기술 언어의 종류

[ 표 ] 하드웨어기술언어의 종류

Page 5: Unit 10 Introduction to VHDL

10.0 VHDL 소개VHDL 의 출현배경 VHDL 의 기능 ① V:VHSIC(Very High Speed Integrated Circuit) + HDL: Hardware Description Language ② 문서화 (coding/modeling), 검증 (simulation/verification), 합성 (synthesis)   IEEE(the Institute of Electrical and Electronics Engineers) 공인 1987 년 ; IEEE_1076, 1991 년 : IEEE_1164

VHDL 의 사용 배경 ① 컴퓨터 , 휴대전화 , 통신장치 등 고부가가치 제품의 다양한 기능과 높은 성능이 요구 ② 고 집적화 , 낮은 가격 , 빠른 개발기간이 요구 ③ 기존의 전통적인 설계방법은 경쟁력이 없어지고 , 하드웨어기술언어 의 사용이 필요한 상황

Page 6: Unit 10 Introduction to VHDL

10.0 VHDL 소개VHDL 의 특징 장점 ① 특정기술 , 공정에 독립적 : 특정기술이나 공정에 관계없이 디지털시스 템의 설계가 가능 ② 광범위한 기술능력 : 다양한 설계기법을 이용한 설계가 가능하여 , 사 용자가 원하는 기술의 사용이 가능하고 , 소규모는 물론 대규모 시스 템의 설계에 유용하며 , 설계 재사용이 가능 ③ 표준화와 문서화 :  IEEE 에 의한 표준화 , 하드웨어 관련 문서화에 용이 ④ 설계기간 단축 : 검증의 빠른 반복능력으로 설계기간이 단축되고 , 설 계자 오류의 검증이 용이하며 , 제품 설계비용의 감소 등 경쟁력 강화 에 적합

단점 ① VHDL 자체의 복잡성으로 많은 시간과 노력이 필요 ② 회로합성 단계가 필요하므로 합성 툴 (tool) 에 따라 회로 성능이 좌우 ③ 합성 툴 (tool) 이 VHDL 구문의 일부 지원에 따른 불편

Page 7: Unit 10 Introduction to VHDL

10.0 VHDL 소개VHDL 의 역사

VHDL 관련 표준화 설명 ꋻ IEEE std_1076 : VHDL 표준의 핵심부분으로 언어의 정의를 표준화 ① 1076.1: VHDL 아날로그 (analog) 와 혼합 아날로그 - 디지털 시스템 (mixed analog-digital system) 부분의 정의 ② 1076.2: 수학연산을 위한 수학도구에 대한 부분의 정의 ③ 1976.3: VHDL 합성 (synthesis) 에 대한 부분의 정의 ④ 1076.4: VITAL(VHDL initiative towards ASIC libraries) 에 대한 부분의 정의 ⑤ 1976.5: IEEE 라이브러리 부품 (library components) 에 대한 부분의 정의 ꋻ IEEE std-_1164 : 실제 시스템에 적용할 수 있는 다중 값 (multi value) 에 대한 부분의 정의 ꋻ IEEE std_1029 : 타이밍 검증을 위한 파형 , 벡터변환 등에 대한 부분 의 정의

[ 그림 1.12] VHDL 관련 표준화의 역사

Page 8: Unit 10 Introduction to VHDL

10.1 조합회로의 VHDL 표현<= 연산자 신호의 할당 연산자로 오른쪽의 논리식이 계산 되어 기호의 왼쪽에

위치하는 신호에 할당 된다는 의미

괄호 연산자 () 실행의 우선순위

일반적인 신호 할당문 Signal_name <= expression [after_delay];

After_delay 는 꼭 필요하지 않다 . 생략 되면 Delta delay 후 갱신된다 .

C <= A and B after 5ns;E <= C or D after 5ns;

E <= D or (A and B);

Page 9: Unit 10 Introduction to VHDL

10.1 조합회로의 VHDL 표현 인스턴스 구문 Gate1 : AND2 portmap (A,B,D); Gate2 : OR2 portmap(C,D,E);

자체 포트맵의 입력신호 중 하나 이상이 변하는 즉시 실행 되는 동시문 .

Gate 1 은 A 또는 B 가 변할 때 마다 . D 의 새로은 값을

계산 . Gate 2 는 C 또는 D 가 변할 때 마다 . E 의 새로운 값을

계산 .

Page 10: Unit 10 Introduction to VHDL

10.1 조합회로의 VHDL 표현 CLK 신호를 통한 동시성

출력이 ‘ 0’ 이라면 . 피드백 된 신호 ‘ 0’ 이 인버터의 입력력으로 입력되고 .

10 ns 후에 ‘ 1’ 이 출력된다 .

대소문자 구분이 없다 . 아래 두 줄은 같은 의미를 가진다 .

Page 11: Unit 10 Introduction to VHDL

10.1 조합회로의 VHDL 표현

11

VHDL 에서의 주석문 (comments) 설계의 내용을 설계자가 쉽게 이해할 수 있도록 기술한 것으로 VHDL 컴파일러 (compiler) 입장에서는 무시하고 넘어가는 부분 . 두 개의 하이픈 (hyphen) 즉 , “--” 으로 시작하고 , 그 끝 줄에서 종료

▪ 주석문의 활용

[ 예제 ] 주석문의 활용 예 1  process(rst, clk)

       2    begin        3     -- if 문 4      if rst='0' then              -- low active reset        5        cnt <= (others => '0');          6         E <= '0'; RS <= '0'; RW <= '0';        7         DB <= "00000000";        8      elsif clk'event and clk='1' then    -- clock's rising edge        9        if 10000 = '1' then       10        -- if 100 = '1' then       11         cnt <= cnt+1;       12         if cnt = 1 then       13            E <= '1'; RS <= '0'; RW <= '0';       14            DB <= "00111000";           -- function

      15         elsif cnt =3 then       16            E <= '1'; RS <= '0'; RW <='0';       17            DB <= "00001110";                  -- DB : display on       18         end if;

Page 12: Unit 10 Introduction to VHDL

10.1 조합회로의 VHDL 표현 식별자 (identifiers)

이름을 의미 , 즉 VHDL 코드 (code) 를 구성하는 엔티티 (entity), 아키텍처 (architecture) , 포트 (port) 등 여러 가지 기능을 정의하여 식별하기 위한 공백이 없는 문자열

▪ 식별자 활용 [ 예제 ] 식별자의 활용 (4bit 비교기 )         1   library ieee;         2   use ieee.std_logic_1164.all;         3   -- entity structure                4   entity compare_4 is         5      port(x, y : in std_logic_vector( 3 downto 0);         6           equal : out std_logic);         7   end compare_4;          8   -- 아키텍처 몸체 9  architecture equal_logic of compare_4 is        10      begin        11        equal <= '1' when (x=y) else '0';        12   end equal_logic;

▪ 식별자의 규칙 ① 첫 번째 문자는 반듯이 영문자 (a ~ z) 로 시작 , 두 번째 문자부터 영문자 , 숫자 (0 ~ 9) 및 밑줄 문자 등의 혼합이 가능 ② 마지막 문자는 밑줄 문자와 밑줄 문자를 두 개 이상 연속 사용 불가 ③ 대문자 , 소문자의 구별은 없으며 , VHDL 구문의 예약어는 식별자로 사용 불가

Page 13: Unit 10 Introduction to VHDL

10.1 조합회로의 VHDL 표현▪ 올바른 식별자의 사용

[ 예제 ] 올바른 식별자의 사용 올바른 식별자 ꋻ FET        Decoder_4        sig_N        compare_eq        main_clock 잘못된 식별자 ꋻ ① _ Decoder_4  -- 첫 문자는 영문자로 시작 ② 2FET_2      -- 첫문자는 영문자로 시작 ③ sig_*R       -- 문자 , 숫자 , 밑줄 문자로만 구성 ④ MOS-FET   -- 문자 , 숫자 , 밑줄 문자로만 구성 ⑤ Decoder_     -- 밑줄 문자가 마지막에 기술되면 안됨 ⑥ Main__clk    -- 밑중 문자가 연속 2개 사용 불가

Page 14: Unit 10 Introduction to VHDL

10.1 조합회로의 VHDL 표현 리터럴 (literals) VHDL 코드로 설계를 할 때 , 직접적으로 표현하는 값 또는 문자를 말함 .

▪ 리터럴 (literal) 의 사용

[ 예제 ] 리터럴의 사용 1     elsif cnt =3 then           2       E <= '1'; RS <= '0'; RW <= '0';         3       DB <= "00001100";

▪ 리터럴의 표현법 숫자 (numbers) 의 표현 : 숫자는 10 진수 표현 (decimal literals) 과 2진 , 8 진 , 16 진과 같이 밑 수 (base) 에 따라 표시되는 방법 (based literals) 이 있으며 , 숫자에 소수점이 있으면 실수 (real literal) , 없으면 정수 (integer literal) 표현 [ 예제 ] 10 진수에 의한 표현 0  1  123_456_78- 9987E6    -- 정수 0.0 0.5 2.718_28  12.4E-9   -- 실수 [ 예제 ] 밑 수에 의한 표현 16#FE         -- 16 진수 : FE = 정수 254       2#1111_1110#   -- 2 진수 : 11111110 = 정수 254       16#D#E1       -- 16 진수 : D=13, E1= 161 = 13 x 161 = 실수 208

Page 15: Unit 10 Introduction to VHDL

10.1 조합회로의 VHDL 표현 문자 (characters literals) 의 표현

[ 예제 ] 문자의 표현 ‘1’, '?', 'B', 'b' ▪ 문자열 (strings literals) 의 표현법 ① 단일문자들의 집합인 문자열은 이중 인용 부호 ( 큰 따옴표 : “ ”) 에 넣어 표시 ② 한 줄을 벗어나는 길이의 문자열은 접합연산자 & 를 사용하여 구성 [ 예제 ] 문자열의 표현 "B string", "A string in a strong"

▪ 비트 열 (bit string) 의 표현 ① 비트는 단일 인용 부호 ( 작은 따옴표 :‘ ’) 사이에 숫자를 넣어 ‘ 1’ 또는 ‘0’ 으로 표시하고 , 비트 열은 이중 인용 부호 ( 큰 따옴표 :“ ”) 사이에 비트 열을 표시 ② 비트 벡터의 값을 정의하기 위해 사용하며 , 기수를 정의하는 문자가 앞에 표시되는 수열을 나타내고 , 2 진수는 B, 8 진수는 O, 16 진수는 X 로 시작 [ 예제 ] 비트열의 표현 B"1010110"    -- 2 진수로 bit 의 길이가 7              O"127"        -- 8 진수로 bit 의 길이가 9이며 , 2 진수로 “ 001_010_111” 과 동등 값 X"FF"         -- 16 진수로 bit길이가 8이며 , 2 진수로 “ 1111_1111” 과 동등 값

Page 16: Unit 10 Introduction to VHDL

10.2 멀티플렉서를 위한 VHDL 모델 2-to-1 멀티 플렉서

F = A’·I0 + A · I1 로 표현 되며 아래 두가지 방법으로 표시 할 수 있다 .

F <= (not A and I0) or (A and I1) F <= I0 when A=‘0’ else I1;

조건부 신호 할당문 signal_name <= expression1 when condition1 else expression2 when condition2 [else expression N];

[ 예 ] 직렬로 연결된 2개의 2-to-1 멀티플렉서

Page 17: Unit 10 Introduction to VHDL

10.2 멀티플렉서를 위한 VHDL 모델 4-to-1 멀티 플렉서

Page 18: Unit 10 Introduction to VHDL

10.3 VHDL 모듈

설계단위의 VHDL 구문 예

[ 예제 ] 설계단위의 예 <VHDL 구문 >  1  entity nor_2 is                    -- Primary unit  2     port (x, y : in bit;          -- NOR 게이트의 외적 표현 3              z : out bit);        4  end nor_2; 5  architecture example of nor_2 is   -- secondary unit 6     begin                      7       z <= x nor y;                 -- NOR 게이트의 내적 표현 8  end example;

2 입력 NOR 게이트 설계

Page 19: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 VHDL 의 기본 구성 ▪ 필수적인 설계단위 - 엔티티 (entity) 와 아키텍처 몸체 (architecture body)

① 제 1단계 : 엔티티 (entity) 를 선언 하드웨어 외부의 입ㆍ출력 ꋻ Interface 를 정의한 디지털 시스템의 본체 하드웨어 블럭의 이름과 입ㆍ출력 ꋻ port 를 선언 ② 제 2단계 : 아키텍처 몸체 (architecture body) 를 표현 디지털 시스템인 하드웨어 내부를 표현 ꋻ

내부회로의 연결ꋻ , 동작 또는 구조 등을 표현

▪ VHDL 의 기본구조

[ 그림 ] VHDL 의 기본 구조

Page 20: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 VHDL 의 설계단위와의 관계

(a) 기본 개념

[ 그림 ] VHDL 의 기본 설계단위 구조

(b) VHDL code 개념

Page 21: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 ( 엔티티 ) 기본 형식

▪ 엔티티 (entity) 선언 설계할 영역의 이름과 외부 환경과의 입ㆍ출력 정보를 나타낸 포트 (port) 부분을 합한 것

[ 예제 ] 엔티티 선언 (NAND 게이트 )  엔티티ꋻ (entity) 의 영역

ꋻ NAND 게이트의 엔티티 선언 <VHDL 구문 >      1   entity nand_2 is           -- 하드웨어 블록 이름이 nand_2      2         port ( x, y : in bit;   -- 단자 (port) 신호 : x, y 는 입력 , bit 형 데이터 3                   z : out bit );   -- z 는 출력 , bit 형 데이터 4   end nand_2 ;                -- nand_2 의 마감

[ 그림 ] entity nand_2 영역

Page 22: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 ( 엔티티 ) [ 예제 ] 엔티티 선언 (1bit full_adder)   엔티티ꋻ (entity) 영역과 회로도

ꋻ VHDL 의 엔티티 선언 1   entity adder_1 is                     2         port ( X, Y, Ci : in bit;        3                   S : inout bit;          4                   Co : out bit);        5   end adder_1;  

(a) 엔티티 영역 (b) 회로도 [ 그림 ] 1 비트 (bit) 전가산기 회로

Page 23: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 ( 엔티티 ) 엔티티 (entity) 의 일반적 형식 [ 형식 ] 일반적 형식 entity 엔티티 _이름 is             port( 포트 _이름 : [ 모드 ] 자료형 ;                 포트 _이름 : [ 모드 ] 자료형 );        end 엔티티 _이름 ;

엔티티 (entity) 의 모델과 구성

(a) 엔티티의 모델

[ 그림 ] 엔티티 (entity) 의 구조

(b) 엔티티의 구성

Page 24: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 ( 엔티티 ) 엔티티의 기본활용

[ 예제 ] 엔티티 선언 (2_ 입력 NAND 게이트 )

<VHDL 구문 >     1   entity NAND2_system is     2          port ( x, y : in bit;     3                   z : out bit );     4    end NAND2_system ;     5   architecture example of NAND2_system is     6            begin     7                z <= x nand y ;     8    end example ;

[ 그림 ] 2_ 입력 NAND 게이트

Page 25: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 ( 엔티티 )

[ 예제 ] 엔티티의 구조 ( 간단한 조합논리회로 )

    <VHDL 구문 >      1   entity combi_sys is      2         port ( a, b, c, d : in bit ;      3                     out1, out2, out3 : out bit );      4    end combi_sys ;      5   architecture example of combi_sys is      6         begin      7              out1 <= a or b ;      8              out2 <= b nand c ;      9              out3 <= not(d);    10    end example ;

[ 그림 ] 간단한 조합논리회로

Page 26: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 ( 엔티티 )

포트 (port) 기능의 이해 하드웨어 부품 (component) 상의 단자들을 표현하며 포트의 이름 , 신호의 흐름 및 자료형으로 나타내는 부분으로 엔티티 내 외부 신호선의 연결상태를 기술

[ 형식 ]  포트 (port) 의 일반적 형식 port( 포트 _이름 , 포트 _이름 : [ 모드 ] 자료형 ;              포트 _이름 ,포트 _이름 : [ 모드 ] 자료형 );       [ 예제 ] 포트 (port) 의 활용 port(X, Y, Ci : in bit;                     S : inout bit;                   Co : out bit);

Page 27: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 ( 엔티티 )

모드 (mode) 의 종류 in(안으로 ) : 입력 (input) 으로 신호가 해당 엔티티로 들어가는 경우에 사용 out(밖으로 ) : 출력 (output) 으로 해당 엔티티에서 신호가 출력되는 경우에 사용 inout(안 밖으로 ) : 입 /출력 (input/output) 으로 해당 엔티티에서 신호가 양방향으로 사용 buffer(밖으로 , 되 읽음 ) : 출력기능과 같으나 , 단지 자신의 신호를 되 읽는 경우에 사용 linkage : 동작에 영향을 주지 않으며 단지 포트의 연결상태만 나타냄

[ 그림 ] 포트 (port) 에서 모드 (mode) 의 종류

Page 28: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 ( 엔티티 )

포트 신호 (port signal) 의 자료형태 ▪ 자료형에 대한 bit 와 bit_vector ꋻ bit : signal 의 개수가 1개인 경우에 사용 ꋻ bit_vector: signal 의 개수가 여러 개인 경우에 사용 오름차순ꋻ : bit_vector(0 to 7), 내림차순 : bit_vector(7 downto

0)

             1    entity block_port is       2            port( x, c :   in      bit;       3                    y :   in     bit_vector (7 downto 0);       4                    z :   out    bit_vector (3 downto 0);       5                    d :   out    bit);       6    end block_port;                                    ▲         ▲                             모드 (mode)   형태 (type)

[ 그림 2.11] 포트 (port) 에서 자료의 형태

Page 29: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 ( 엔티티 )

bus signal 의 내림차순과 오름차순 ꋻ downto : 내림차순 표현 port ( clk : in bit ;                   z  : buffer bit_vector (3 downto 0)) ;

z <="0011" ;    -- z(3)=0, z(2)=0, z(1)=1, z(0)=1 ꋻ to : 오름차순표현 port ( clk : in bit ;                   z  : buffer bit_vector (0 to 3)) ;  

z <="0011" ;    -- z(0)=0, z(1)=0, z(2)=1, z(3)=1

Page 30: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 ( 아키텍처 ) 아키텍처 (architecture) 설계할 회로의 실질적인 내부 동작 또는 각 부품들 사이의 연결구조ꋻ 를 기술하는 부분 . 하나의 엔티티 선언에는 여러 개의 아키텍처 몸체ꋻ (architecture body) 가 연결 가능 . 아키텍처 기술방법은 동작적ㆍ자료흐름적 기법과 구조적 기법ꋻ . [ 예제 ] 아키텍처 활용 (NAND 게이트 ) 

            ꋻ <VHDL 구문 > 아키텍처 몸체 선언 1  architecture example of nand2_system is -- nand2_system 의 -- 회로의 이름이 example      2        begin                           -- 내용의 시작 3              z <= x nand y;              -- z 에 x nand y 를 대입 4  end example;                            -- example 의 끝

[ 그림 2.13] 아키텍처 example 의 영역

Page 31: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 ( 아키텍처 )[ 예제 ] 아키텍처의 활용 (1bit full_adder)   아키텍처의 영역과 회로도 ꋻ

ꋻ VHDL 의 아키텍처 구문 ( 선언문이 없는 경우 )         architecture combi_logic of ADDER1_system is            begin             S <= (X xor Y) xor Ci;  -- 덧셈 결과 Co <= (X and Y) or (S and Ci);         end combi_logic; ꋻ VHDL 의 아키텍처 구문 ( 선언문이 있는 경우 )

       1   architecture combi_logic of ADDER1_system is        2     signal n1, n2, n3 : bit;   -- n1, n2, n3 을 신호로 선언 3      begin        4        n1 <= X xor Y;   -- n1 : 내부 신호 연결 5        S <= n1 xor Ci;  -- 덧셈 결과 6         n2 <= X and Y;    -- n2 : 내부 신호 연결 7         n3 <= S and Ci;    -- n3 : 내부 신호 연결 8        Co <= n2 or n3;  -- 자리올림수 결과 9    end combi_logic;

▪ 아키텍처 (architecture) 의 일반적 형식 [ 형식 2.3] 일반적인 형식 architecture 아키텍처 _이름 of 엔티티 _이름 is             { 선언문 }            begin              { 내부적 동작표현 }          end 아키텍처 _이름 ;

[ 그림 ] 1 비트 (bit) 전가산기 회로

Page 32: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 ( 아키텍처 ) Full Adder

Page 33: Unit 10 Introduction to VHDL

10.3 VHDL 모듈 ( 아키텍처 ) 4 bit Full Adder

Page 34: Unit 10 Introduction to VHDL

10.4 신호와 상수

객체 (data object) VHDL 에서 값을 갖을 수 있는 것으로 모든 객체는 자료형을 갖음 [ 예제 ] 객체의 종류 및 특징

■ signal( 신호 ) : 외적 변수 , 선 (wire) 으로 표현

                                                                       signal a, b, c : bit        -- signal 선언      c <= a and b ;             -- 값 ( 파형 ) 대입 ■ variable( 변수 ): 내적변수 ,process 내부에서 유효     variable temp : bit ;      -- variable 선언    temp := a or b;            -- 값 ( 파형 ) 대입 ■ constant( 상수 ) :

   초기에 선언된 값을 계속 유지하는 상수값 지님    constant p1 : integer := 314 ;                              -- 상수선언과 동시에 상수값 대입

Page 35: Unit 10 Introduction to VHDL

10.4 신호와 상수

신호 (signal) ▪ 신호는 VHDL 합성시 선 (wire) 으로 구현되며 , 각 부품의 연결에 사용되는 외적변수 . ▪ 객체에 값의 대입 “<=” 의 오른쪽에서 왼쪽으로 대입하는 시간지연요소 대입기호를 사용 .  signal 의 초기값 대입의 경우는 즉시 대입 기호 “ :=” 사용 . ▪ 자료형의 선언 bit : 신호의 자료형이 0 혹은 1일 때 단일신호로 사용 bit_vector : 다중신호를 의미 , 신호의 개수를 나타내는 내림차순 (downto) 또는 올림차순 (to) 를 사용

[ 그림 ] 버스 다발과 비트의 순서

Page 36: Unit 10 Introduction to VHDL

10.4 신호와 상수

[ 예제 ] 자료형이 bit 인 signal 의 선언 signal  a, b, c : bit         -- a, b, c 는 객체의 이름 -- a, b, c 의 객체 종류는 signal 이므로 선 (wire) 으로 구현가능 -- a, b, c 의 자료형이 bit 형이므로 ‘ 1', '0' 의 두 가지 값을 갖음

[ 예제 ] signal 의 활용

<VHDL 구문 >       1    entity combi_logic is       2      port ( a, b : in bit;       3              z, y : out bit);       4    end combi_logic;       5    architecture data_flow of combi_logic is       6       signal s1, s2 : bit;  -- architecture 와 begin 사이에 선언 7     begin       8        s1 <= a;           -- 신호 a 를 s1 으로 전달 9        s2 <= b;           -- 신호 b 를 s2 로 전달 10        z  <= s1 or s2;    -- "s1 or s2" 를 z 에 전달 11        y  <= s1 and s2;   -- "s1 and s2" 를 y 에 전달 12    end data_flow;

[ 그림 ] 간단한 조합논리회로

Page 37: Unit 10 Introduction to VHDL

10.4 신호와 상수

[ 예제 ] signal 의 선언 ( 자료형 : bit_vector)     1   signal count : bit_vector (3 downto 0) ;            -- signal count(3), count(2), count(1), count(0) : bit 와 동일한 선언 -- count 를 4 비트 bus 로 선언 2  signal temp : bit_vector (3 downto 0) := "1100";            -- temp 를 4 비트 bus 로 선언하고 초기값 대입

[ 예제 ] signal 선언의 활용 <VHDL 구문 >   1  entity combi_system is   2      port ( x1, x2, x3 : in bit ;  -- signal x1, x2, x3 선언 3                 y_out : out bit );    -- signal y_out 선언 4  end combi_system;

  5  architecture example of combi_system is   6   signal  s0 : bit  ; -- signal s0 선언 , signal 선언위치 -- : architecture 와 begin 사이 7  begin                 8       s0   <= x1 nand x2 ;  -- signal 에 파형 대입 9       y_out <= s0 xor x3 ;   -- s0 과 x3 를 exclusive 하여10  end sample; -- y_out 에 대입

[ 그림 ] 간단한 조합회로 system

Page 38: Unit 10 Introduction to VHDL

10.4 신호와 상수

변수 (variable) process 나 부프로그램에서만 사용되는 내적변수로서 중간연산단계에 주로 이용 , 대입기호 즉시 대입기호 ‘ :=’ 사용 [ 예제 ] 변수 선언방식 variable temp1, temp2:bit;  -- variable_ 이름이 temp1, temp2 로 정의 , 자료형은 bit               temp1 := '1';     -- := 는 즉시 값이 대입 temp2 := a or b;   -- a, b 는 signal 이고 , temp2 는 variable

[ 예제 ] 3 입력 NAND 게이트 <VHDL 구문 > 1     architecture example of nand_system is 2       begin 3         process (x, y, z) 4                variable temp : bit; -- variable 선언 , variable 위치 process 와 begin 사이 5                    begin       6                     temp := '1' ;             -- temp 가 즉시 ‘1’ 로 바뀜

7                     temp := x nand temp ;    --  variable 의 즉시 대입 , temp=x

8                     temp := y nand temp ;    -- temp=x · y

9                     temp := z nand temp ;    -- temp=x · y · z        10                  y_out <= temp ;  --  signal 에 variable 의 시간지연 대입 , y_out=x*y*z

11        end process ; 12    end example ;

[ 그림 ] 엔티티 nand_system

Page 39: Unit 10 Introduction to VHDL

10.4 신호와 상수

신호 (signal) 와 변수 (variable) 의 비교 ▪ 신호 (signal)      외부 변수 ꋻ 선언 ꋻ : architecture 와 begin 사이에서 선언 , 부프로그램에서 선언 , port signal 에서 선언 합성시 ꋻ wire 로 구현되며 , 비교적 간단한 연산이 요구될 때 이용 ꋻ signal 에 값 ( 파형 ) 이 인가될 때 현재의 변화된 값이 바로 대입되지 않고 process 가 끝난 시점에 대입

변수 (variable) 내부 변수 ꋻ 선언 ꋻ : process 와 begin 사이에서 선언 ,부프로그램의 parameter 에서 선언 합성시 선ꋻ (wire) 로 바로 구현되지 않고 연산의 중간단계로 활용 복잡한 알고리즘의 구현시 사용되며ꋻ , 현재의 값만 가짐 ꋻ process 와 subprogram 내에서만 유효 , 이 영역을 벗어나면 variable 값이 무효

Page 40: Unit 10 Introduction to VHDL

10.4 신호와 상수

[ 예제 ]signal 과 variable 의 사용상 차이점

signal 이 잘못 사용한 예 <VHDL 구문 >      1   architecture example1 of nand2_system is      2       signal temp : bit ; -- signal 선언 (architecture 와 begin 사이 )      3     begin      4          process (x, y)      5            begin      6                temp <= '1' ; -- 현 시점에서는 temp = '0', end process 에서 temp ='1'

   7                temp <= x nand temp; -- end process 에서 temp =‘1'      8                temp <= y nand temp; -- end process 에서 temp =‘1'      9                z_out <= temp;      -- end process 에서 z_out = ‘1'      10         end process ;      11   end example1 ;

[ 그림 ] 두 입력 AND 게이트 (entity nand2_system)

Page 41: Unit 10 Introduction to VHDL

10.4 신호와 상수

variable 을 사용한 문제 해결 <VHDL 구문 >    1   architecture example2 of nand2_system is    2       begin    3         process (x, y)    4            variable temp : bit ;   -- variable 선언 (process 와 begin 사이 )    5           begin    6               temp := '1' ;            -- temp 가 즉시 '1' 로 바뀜 7               temp := x nand temp ; -- temp = (x*1)'

   8               temp := y nand temp ; -- temp = (x*y)'

   9               z_out <= temp ;         -- z_out = (x*y)'

   10         end process ;    11    end example2 ;

Page 42: Unit 10 Introduction to VHDL

10.4 신호와 상수 상수 (constant) 초기에 선언한 상수의 값을 유지하는데 사용하며 , 고정된 값을 갖음

[ 형식 ] 상수의 선언 방식 constant 상수 _이름 : 자료형 [:= 초기값 ] ;   -- 상수선언과 초기화 [ 예제 ] 상수의 활용 constant delay : time :=5ns       -- constant 선언

constant size : integer :=516;     -- constant 선언 , 초기화

문장 (statements) ▪ VHDL 의 기본 문장 ▪ 선언문 (declaration statement) 설계내에서 사용할 수 있는 상수 , 자료형 , 객체 , 부프로그램 등을 정의하는데 사용 상수 (constants) : 리터럴 (literal) 숫자 , 스트링 (strings) 자료형 (types) : 레코드 (records) 배열 (array) 객체 (objects) : 신호 (signal), 변수 (variable), 부품 (component) 부프로그램 : 함수 (function), 프로시저 (procedure)

Page 43: Unit 10 Introduction to VHDL

연산자 (operators) 논리 연산자 (logic operators) 논리조합을 만드는데 사용하며 , bit, boolean, bit_vector 를 지원 .

[ 예제 ] 논리연산자의 활용 (bit_vector, bit, boolean) 1  architecture example of combi_logic is 2       signal   w, x, y   : bit_vector (3 downto 0); 3       signal   a, b, c, d : bit ; 4       signal   e, f, g, h : boolean ; 5      begin 6            w <= x and y;                -- w, x, y 는 같은 수의 bit_vector 형임 7            d <= (a and b) and c ;   -- a, b, c, d 는 같은 bit 형 임 8            e <= (f nand g) xor h ;  -- e, f, g 는 같은 boolean 형 임 9   end example;

[ 표 3.1] 논리 연산자 (AND 게이트 )

[ 그림 ] 논리 연산의 논리도

10.6 VHDL 연산자

Page 44: Unit 10 Introduction to VHDL

관계 연산자 (relational operators) 비교함수를 만드는데 사용되며 , 대부분의 자료형을 지원 .

    [ 예제 ] 관계 연산자의 사용 1  variable num1 : real := 100.0;     2  variable num2 : bit_vector(7 downto 0) :=('0','0','0','0','0','0')     3  variable num3, num4 : bit_vector(2 downto 0)     4     num1 /= 350.54                   -- num1 과 350.54 는 같지 않음 5     num1 = 100.0                    -- num1 과 100.0 은 같음 6     num2 /= ('1','0','0','0','0','0')   -- num2 가 오른쪽과 같지 않음 7     num1 > 45.54                    -- num1 은 45.54보다 큼 8     num2 < ('1','0','0','0','0','0')    -- num2 가 오른쪽보다 작음

[ 표 ] 관계 연산자의 종류

10.6 VHDL 연산자

Page 45: Unit 10 Introduction to VHDL

산술 연산자 (arithmetic operators) 정수와 실수 등의 숫자형만 지원 가능하며 , 다른 자료형의 경우 IEEE1076.3 의 numeric_std 패키지 이용 .

[ 예제 ] 산술 연산자의 사용 1   architecture arith of or2 is       2    begin       3         process(a,b)       4          begin       5              y1 <= a+b;            -- a 더하기 b       6              y2 <= a-b;             -- a 빼기 b       7              y3 <= a*b;             -- a 곱하기 b        8              y4 <= a mod b;     -- a 를 b 로 나눈 모듈 9              y5 <= a rem b;      -- a 를 b 로 나눈 나머지 10              y6 <= abs a;        -- a 의 절대값 11          end process;      12     end arith;

[ 표 ] 산술 연산자의 종류

10.6 VHDL 연산자

Page 46: Unit 10 Introduction to VHDL

순환 연산자 (shift operators) 순환 연산자는 1 차원적인 bit 의 배열이나 부울형을 지원 .

[ 표 ] 순환 연산자의 종류

[ 그림 ] 순환 연산

10.6 VHDL 연산자

Page 47: Unit 10 Introduction to VHDL

[ 예제 ] 순환 연산자의 사용 variable sm5 : bit_vector(3 downto 0) :=('1','0','1','1')       sm5 sll  1      -- sm5 을 1 만큼 sll 하면 (‘0’,‘1’,‘1’,‘0’)        sm5 sll  3      -- sm5 을 3 만큼 sll 하면 (‘1’,‘0’,‘0’,‘0’)       sm5 sll -3      -- sm5 을 -3만큼 sll 하면 srl 을 3 만큼 한 것과 같음

sm5 srl  1      -- sm5 을 1 만큼 srl 하면 (‘0’,‘1’,‘0’,‘1’)       sm5 srl  3      -- sm5 을 3 만큼 srl 하면 (‘0’,‘0’,‘0’,‘1’)

      sm5 sla  1     -- sm5 을 1 만큼 sla 하면 (‘0’,‘1’,‘1’,‘1’)       sm5 sla  3     -- sm5 을 3 만큼 sla 하면 (‘1’,‘1’,‘1’,‘1’)       sm5 sla  -3    -- sm5 을 -3만큼 sla 하면 sra 을 3 만큼한 것과 같음

sm5 sra  1     -- sm5 을 1 만큼 sra 하면 (‘1’,‘1’,‘0’,‘1’)       sm5 sra  3     -- sm5 을 3 만큼 sra 하면 (‘1’,‘1’,‘1’,‘1’)

      sm5 rol  1      -- sm5 을 1 만큼 rol 하면 (‘0’,‘1’,‘1’,‘1’)       sm5 rol  3      -- sm5 을 3 만큼 rol 하면 (‘1’,‘1’,‘0’,‘1’)       sm5 rol  -3     -- sm5 을 -3만큼 rol 하면 ror 을 3 만큼 한 것과 같음 sm5 ror  1     -- sm5 을 1 만큼 ror 하면 (‘1’,‘1’,‘0’,‘1’)       sm5 ror  3     -- sm5 을 3 만큼 ror 하면 (‘0’,‘1’,‘1’,‘1’)

10.6 VHDL 연산자

Page 48: Unit 10 Introduction to VHDL

연결연산자 (concatenation operators) 연결 연산자는 원하는 새로운 형태의 1 차원 배열을 만드는데 편리한 기능 제공

[ 예제 ] 연결 연산자의 사용 1  entity con is      2   port(A, B : in unsigned(2 downto 0);   -- 입력 A :"100", 입력 B : "010" 이라 가정 3           Y : out unsigned(14 downto 0));  -- 출력 Y는 15bit     4  end con;     5  architecture cdma of con is     6      constant C : unsigned(2 downto 0) :="001"; -- C 를 상수로 선언하고 , 3bit "001"     7  begin     8       process(A, B)     9       begin   10          Y <= A & B & C & C & "110"; -- 최상위 비트부터 “100”, “010”, “001”,   11       end process;                             -- “001”, "110" 이 연결되어

12  end cdma;                                       -- "100010001001110" 이 출력

[ 표 ] 연결 연산자의 종류

10.6 VHDL 연산자

Page 49: Unit 10 Introduction to VHDL

부호 연산자 (sign operators) 부호 연산자는 단일 요소 연산자로서 연산자 오른쪽에만 숫자형의 피연산자를 갖음

[ 예제 ] 부호 연산자의 사용 1  architecture pone of sign is       2    begin       3       process(A,B)       4        begin       5           Y1 <= +A / (-B);    -- 양수 A 를 음수 B 로 나누어 Y1 에 대입하기 6           Y2 <= (-A) + (-B);  -- 음수 A 와 B 를 더하여 Y2 에 대입하기 7           Y3 <= A * (-B);      -- 양수 A 에 음수 B 를 곱하여 Y3 에 대입하기 8       end process;       9  end pone;

[ 표 ] 부호 연산자의 종류

10.6 VHDL 연산자

Page 50: Unit 10 Introduction to VHDL

연산자의 우선순위 (operators priority)

연산자의 중복 (operating overloading) VHDL 의 가장 유용한 기능 중의 하나로 어떤 연산자 기호가 피연산자의 자료형에 따라 다르게 동작할 때 연산자가 중복되었다고 함 .   [ 예제 ] ‘0’, ‘1’ 의 중복기능 부여 type bit is ('0','1');            type multi_value_logic is ('0', '1', 'X');  

[ 표 ] 연산자의 우선순위

10.6 VHDL 연산자

Page 51: Unit 10 Introduction to VHDL

속성 (attribute) 자료형에 대한 동작이나 상태표현을 위한 특성으로 엔티티 , 아키텍처 , 자료형 및 신호 등에 대한 정보의 제공 [ 예제 ] 많이 사용되는 속성 1     type index is integer range 1 to 30;      2     type state is (one, two, three, four);      3      subtype short_state is states range two to four;      4     signal byte : std_logic_vector(7 downto 0);      5     signal clk : bit;

   < 속성의 예 >            ① ‘속성 left :  index'left = 1       -- index 의 가장 왼쪽의 값 ‘1’ 을 나타냄 ② 속성‘ low :   index'low = 1       -- index 의 가장 작은 값 ‘1’ 을 나타냄     ③ ‘속성 high :  index'high = 30     -- index 의 가장 큰 값 ‘30’ 을 나타냄     ④ ‘속성 right :  state'right = four    -- state 의 가장 오른쪽의 값 ‘ four’ 를 나타냄        ‘속성 length : index'length = 10   -- index 의 길이가 ’10‘ 을 나타냄     ⑤ ‘속성 range : byte'range = (7 downto 0)  -- byte 의 범위가 (7 downto 0) 를

나타냄     ⑥ ‘속성 event : clk'event           -- clk 의 event 가 있을 때 ’ true'        속성의 사용 : signal att : state;                    att <= states'right   -- att = four

(※ 인용부호 ' : tick 로 발음 )

10.6 VHDL 연산자

Page 52: Unit 10 Introduction to VHDL

분해함수 (resolution function) ▪ 분해 (resolving) : 서로 다른 신호들의 값이 같은 시간에 만나서 섞이는 것 ▪ 분해함수 (resolution function) : 신호의 값을 섞을때의 규칙을 도표로 정의한 것으로 하나의 신호에 여러 개의 소스 (source) 가 주어지는 경우 하나의 값을 계산하는 함수

[ 예제 ] 분해함수의 활용 architecture comb_logic of resol is             begin                 z <= x or y;                 z <= x and y;           end comb_logic;

(a) 구동회로 (b) 분해함수 [ 그림 ] 충돌 구동신호

10.6 VHDL 연산자

Page 53: Unit 10 Introduction to VHDL

[ 표 ] std_logic 의 분해함수에 대한 진리표

[ 표 ] 분해함수의 진리표

10.6 VHDL 연산자

Page 54: Unit 10 Introduction to VHDL

10.7 패키지와 라이브러리

패키지 (package) 와 라이브러리 (library) ▪ 패키지 (package) ① 자료형 (data type) 과 부 프로그램 (sub program) 을 하나의 파일로 만든것 ② 자료형 , 부 프로그램 등을 중복으로 선언 또는 기술하지 않고 , 한번 기술한 것을 여러설계에서 공동으로 사용할 수 있도록 모아둔 꾸러미 . ▪ 라이브러리 (library) ① VHDL 을 구성하는 설계단위 즉 , 엔티티 (entity), 아키텍처 (architecture), 패키지 (package) 등을 저장하고 , 필요시에 사용할 수 있는 저장장소 (directory). ■ 미리 정의된 패키지 (defined package)

▪ IEEE standard package : 표준 형 (types), 연산자 (operators), 객체 (objects)들을 선언 . library 와 use 를 사용할 필요가 없음 . ▪ IEEE Textio package : IEEE 에서 만든 문서 파일의 입ㆍ출력용 패키지로 문서의 입출력 관련형과 객체들을 정의 .

     [ 형식 ] 패키지를 부르기 위한 library 의 형식 library example               use example. test. all; ① ② ③ ①library 이름 , ②패키지 이름 , ③패키지의 모든 내용

▪ IEEE std_logic_1164 package : IEEE 에서 만든 확장된 표준 로직 패키지 [ 형식 ] 패키지를 부르기 위한 library 의 형식 library IEEE;          use IEEE. std_logic_1164.all;

Page 55: Unit 10 Introduction to VHDL

10.7 패키지와 라이브러리

사용자 선언 패키지 (user defined package) ▪ 패키지 선언 (package declaration) 외부에서 사용할 수 있도록 인터페이스를 담당하는 역할 ꋻ 외부에서 필요한 자료형ꋻ , 부품 , 부프로그램 ( 함수 , 프로시저 ) 을 선언

▪ 패키지 몸체 (package body)  패키지 선언부분에서 선언된 부프로그램의 구체적 내용을 정의 ꋻ [ 형식 ] package 의 구조 -- package 선언부 package 패키지 _이름 is                    { 자료형 선언 };                { 부프로그램 선언 };           end 패키지 _이름 ;         -- package 몸체부 package body 패키지 _이름 is            { 부프로그램 기술 }           end 패키지 _이름 ;

Page 56: Unit 10 Introduction to VHDL

10.7 패키지와 라이브러리

사용자 선언 패키지 (user defined package) ▪ 패키지 선언 (package declaration) 외부에서 사용할 수 있도록 인터페이스를 담당하는 역할 ꋻ 외부에서 필요한 자료형ꋻ , 부품 , 부프로그램 ( 함수 , 프로시저 ) 을 선언

▪ 패키지 몸체 (package body)  패키지 선언부분에서 선언된 부프로그램의 구체적 내용을 정의 ꋻ [ 형식 ] package 의 구조 -- package 선언부 package 패키지 _이름 is                    { 자료형 선언 };                { 부프로그램 선언 };           end 패키지 _이름 ;         -- package 몸체부 package body 패키지 _이름 is            { 부프로그램 기술 }           end 패키지 _이름 ;

Page 57: Unit 10 Introduction to VHDL

10.8 IEEE 표준논리

시뮬레이션을 위한 신호 정의 ▪ ‘0’ 과 ‘ 1’ 이외의 신호 정의

ꋻ ‘ Z’ 하이임피던스 혹은 비 연결 ꋻ ‘ X’ 값을 알 수 없는 경우

ꋻ ‘ U’ 초기화 되어 있지 않을 경우 ꋻ 신호에 대한 결정 함수

ꋻ 3 상태 버퍼를 사용한 버스 구동 표현

Page 58: Unit 10 Introduction to VHDL

10.8 IEEE 표준논리

기본 연산에 대한 정의 ▪ std_logic_unsinged 패키지 사용

ꋻ std_logic_vector 를 부호 없는 숫자로 간주 하여 처리 ꋻ +,-,* 와 같은 산술 연산자와 비교 연산자들을 정의한다 .

비교연산을 수행할때 오퍼랜드크기가 서로 다르면 짧은 오퍼랜드에ꋻ 왼쪽을 0을 채워 비교 한다 .

ꋻ 2진 덧셈에 대한 코드

Page 59: Unit 10 Introduction to VHDL

10.9 VHDL 의 컴파일과 시뮬레이션

시뮬레이션 하는 이유 ▪ VHDL 코드가 설계자가 원하는 기능으로 구현 되었는지 판별 ▪ 디지털 시스템의 사양에 맞게 설계 되었는지 검증

VHDL 코드를 이용한 작업 과정