1 / 59

Unit 10 Introduction to VHDL

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

Télécharger la présentation

Unit 10 Introduction to VHDL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Unit 10Introduction to VHDL

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

  3. 10.0 VHDL 소개 • 하드웨어기술언어(HDL : Hardware Description Language) • 최초로 공인된 표준 하드웨어 설계언어   • CPLD/FPGA 등 소규모 설계에서 주문형집적회로(ASIC) 등 대규모 시스템설계에 사용 • 회로도와 하드웨어기술언어의 설계 비교 (a)회로도를 이용한 설계(b) 하드웨어기술언어를 이용한 설계

  4. 10.0 VHDL 소개 • ■ 하드웨어기술 언어의 종류 [표] 하드웨어기술언어의 종류

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

  6. 10.0 VHDL 소개 • VHDL의 특징 • 장점 • ① 특정기술, 공정에 독립적: 특정기술이나 공정에 관계없이 디지털시스 • 템의 설계가 가능 • ② 광범위한 기술능력: 다양한 설계기법을 이용한 설계가 가능하여, 사 • 용자가 원하는 기술의 사용이 가능하고, 소규모는 물론 대규모 시스 • 템의 설계에 유용하며, 설계 재사용이 가능 • ③ 표준화와 문서화:  IEEE에 의한 표준화, 하드웨어 관련 문서화에 용이 • ④ 설계기간 단축: 검증의 빠른 반복능력으로 설계기간이 단축되고, 설 • 계자 오류의 검증이 용이하며, 제품 설계비용의 감소 등 경쟁력 강화 • 에 적합 • 단점 • ① VHDL 자체의 복잡성으로 많은 시간과 노력이 필요 • ② 회로합성 단계가 필요하므로 합성 툴(tool)에 따라 회로 성능이 좌우 • ③ 합성 툴(tool)이 VHDL구문의 일부 지원에 따른 불편

  7. 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관련 표준화의 역사

  8. 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);

  9. 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의 새로운 값을 계산.

  10. 10.1 조합회로의 VHDL 표현 • CLK 신호를 통한 동시성 • 출력이 ‘0’ 이라면. 피드백 된 신호 ‘0’이 인버터의 입력력으로 입력 되고. • 10ns 후에 ‘1’이 출력된다. • 대소문자 구분이 없다. • 아래 두 줄은 같은 의미를 가진다.

  11. 10.1 조합회로의 VHDL 표현 • 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; 11

  12. 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구문의 예약어는 식별자로 사용 불가

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

  14. 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

  15. 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”과 동등 값

  16. 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 멀티플렉서

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

  18. 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게이트 설계

  19. 10.3 VHDL 모듈 • VHDL의 기본 구성 • ▪ 필수적인 설계단위 - 엔티티(entity)와 아키텍처 몸체(architecture body) • ① 제1단계 : 엔티티(entity)를 선언 • ꋻ 하드웨어 외부의 입ㆍ출력 Interface를 정의한 디지털 시스템의 본체 • ꋻ 하드웨어 블럭의 이름과 입ㆍ출력 port를 선언   • ② 제2단계 : 아키텍처 몸체(architecture body)를 표현 • ꋻ 디지털 시스템인 하드웨어 내부를 표현 • ꋻ 내부회로의 연결, 동작 또는 구조 등을 표현 • ▪ VHDL의 기본구조 [그림] VHDL의 기본 구조

  20. 10.3 VHDL 모듈 • VHDL의 설계단위와의 관계 (a) 기본 개념 (b) VHDL code 개념 [그림] VHDL의 기본 설계단위 구조

  21. 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 영역

  22. 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) 전가산기 회로

  23. 10.3 VHDL 모듈(엔티티) • 엔티티(entity)의 일반적 형식 • [형식] 일반적 형식 • entity 엔티티_이름 is • port( 포트_이름 : [모드] 자료형; • 포트_이름 : [모드] 자료형); • end엔티티_이름; • 엔티티(entity)의 모델과 구성   • (a) 엔티티의 모델 • (b)엔티티의 구성 • [그림] 엔티티(entity)의 구조

  24. 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게이트

  25. 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 ; • [그림] 간단한 조합논리회로

  26. 10.3 VHDL 모듈(엔티티) • 포트(port) 기능의 이해 • 하드웨어 부품(component)상의 단자들을 표현하며 포트의 이름, 신호의 • 흐름 및 자료형으로 나타내는 부분으로 엔티티 내 외부 신호선의 • 연결상태를 기술 • [형식]  포트(port)의 일반적 형식 • port(포트_이름, 포트_이름 : [모드] 자료형; • 포트_이름,포트_이름 : [모드] 자료형); •    [예제] 포트(port)의 활용 • port(X, Y, Ci : in bit;  •                    S : inout bit; •                   Co : out bit);

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

  28. 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)에서 자료의 형태

  29. 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

  30. 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의 영역

  31. 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) 전가산기 회로

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

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

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

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

  36. 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; [그림] 간단한 조합논리회로

  37. 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

  38. 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

  39. 10.4 신호와 상수 • 신호(signal)와 변수(variable)의 비교 • ▪ 신호(signal)  • ꋻ 외부 변수 • ꋻ 선언 : architecture와 begin 사이에서 선언, 부프로그램에서 선언, • port signal에서 선언 • ꋻ 합성시 wire로 구현되며, 비교적 간단한 연산이 요구될 때 이용 • ꋻ signal에 값(파형)이 인가될 때 현재의 변화된 값이 바로 대입되지 • 않고 process가 끝난 시점에 대입 • 변수(variable) • ꋻ 내부 변수 • ꋻ 선언 : process와 begin 사이에서 선언,부프로그램의 parameter에서 • 선언 • ꋻ 합성시 선(wire)로 바로 구현되지 않고 연산의 중간단계로 활용 • ꋻ 복잡한 알고리즘의 구현시 사용되며, 현재의 값만 가짐 • ꋻ process와 subprogram내에서만 유효, 이 영역을 벗어나면 variable • 값이 무효

  40. 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)

  41. 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 ;

  42. 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)

  43. 10.6 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 게이트) [그림] 논리 연산의 논리도

  44. 10.6 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가 오른쪽보다 작음 [표] 관계 연산자의 종류

  45. 10.6 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; [표] 산술 연산자의 종류

  46. 10.6 VHDL 연산자 • 순환 연산자(shift operators) 순환 연산자는 1차원적인 bit의 배열이나 부울형을 지원. [표] 순환 연산자의 종류 [그림] 순환 연산

  47. 10.6 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’)

  48. 10.6 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"이 출력 [표] 연결 연산자의 종류

  49. 10.6 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; [표] 부호 연산자의 종류

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

More Related