VHDL
VHDL이란? 1. HDL(Hardware Descrption Language)의 필요성 2. VHDL의 유래 대형회로를 설계시 기존의 설계 방법 비효율성 (시간/비용 증가) 복잡한 하드웨어를 쉽게 기술하기 위하여 언어를 사용하는 방법 연구 프로그래밍 언어 : 회로의 지연처리, 합성등의 문제점 HDL : VHDL, VerilogHDL ,AHPL,IDL등이 연구, 사용 2. VHDL의 유래 VHSIC(Very High Speed Integrated Circuit Hardware) Description Language 미국 국방성에서 직접회로 관련 업체들 상호간에 개발을 위한 정보 교환 및 문서화를 위하여 제작 1987년 IEEE 1076-1987로 불리는 IEEE 표준 HDL탄생 1993년 IEEE 1076-1993으로 불리는 IEEE 표준 HDL new version 탄생 3. VHDL의 응용 분야 Documentation : 회로의 문서화 Simulation : 시물레이션을 통한 검증 Synthesis : 합성과정을 통해 실제 하드웨어로 제작 VHDL이란?
회로도를 이용한 설계와 VHDL을 이용한 설계 의 특징
VHDL의 구성 하드웨어 표현의 최소단위 : Design entity Design entity Entity Declaration Architecture Body VHDL의 구성
VHDL 문법 Library 및 use문 (library / package 선언부) Entity declaration Library ieee; Use ieee.std_logic_1164.all; Entity name is Port ( a : in std_logic_vector(2 downto 0); b, c, d : in std_logic; x, y : out std_logic); End name; Architecture arch of name is Signal u1, u2 : std_logic; Begin u1 <= c and b; u2 <= u1 when a = “001” else d; x <= u1; y <= not u2; End arch; Library 및 use문 (library / package 선언부) Entity declaration (interface 선언부) Architecture declarative section Architecture body (회로의 동작 기술) VHDL 문법
VHDL 표현방법 동작적 모델링 자료흐름 모델링 구조적 모델링 가장 높은 레벨의 추상적인 표현 기능적 또는 수학적인 알고리즘을 사용해 시스템의 동작 을 기술하는 것 자료흐름 모델링 자료의 흐름 즉, 신호 및 제어의 흐름 주로 부울대수, 함수, RTL 또는 연산자를 사용하여 입력 으로부터 출력까지의 경로 표현을 위주로 함 동작적 모델링과 구조적 모델링의 중간적 모델링 구조적 모델링 하드웨어에 가장 가까운 하위레벨의 표현 컴포넌트와 게이트들과의 연결상태를 나타냄 VHDL 표현방법
알고있어야 할 사항 모든 알파벳 문자는 소문자와 대문자를 구별하 지 않고 똑같이 취급 주석은 마이너스 두 개(--)로 시작되며, 그 줄 끝까지 유효 한 문장은 세미콜론(;)으로 끝남 알고있어야 할 사항
Library 및 Package library ieee; --라이브러리 ieee를 사용한다고 선언 VHDL에서 사용하는 라이브러리 및 패키지 라이브러리는 패키지를 묶은 집합 패키지는 표준 VHDL에서 제공하지 않는 기능, 형, 연산자들을 사용할 수 있게 함 사용방법 library 라이브러리 이름; use 라이브러리.패키지 이름.all; 사용 예 library ieee; --라이브러리 ieee를 사용한다고 선언 use ieee.std_logic_1164.all; -- 라이브러리 ieee안에 있는 -- std_logic_1164패키지에 선언된 것들을 사용 Library 및 Package
Library 및 Package ieee.std_logic_1164 패키지 VHDL이 기본으로 제공하는 형은 bit, bit_vector인데 이는 0 과 1밖에 표현 할 수 없다. 실제 신호는 하이 임피던스, 약한 신 호 0과 1, 초기 설정되지 않은 값 등 여러 상태로 있을 수 있기 때문에 ieee에서 이 패키지 안에 이들을 표현 할 수 있는 형들 을 제공한다. std_logic : 0, 1, Z등을 표현 std_logic_vector : std_logic의 벡터(배열)형 Library 및 Package
Entity Declaration Entity 선언 Entity는 크게 두가지로 나누어 짐 Syntax 기능이 아닌, 설계를 위한 입,출력 인터페이스, 동작에 필 요한 매개변수 목록 정의 Entity는 크게 두가지로 나누어 짐 Port와 Generic Port : 입·출력을 선언 Generic : 하드웨어에 필요한 파라미터를 선언 Syntax entity [entity name] is port ([input port name] : in [data type]; [output port name] : out [data type]); end [entity name]; Entity Declaration
Entity Declaration Entity 선언의 예 Entity and2 is port( A, B : in std_logic; C : out std_logic); end and2; 주의할 점! Entity의 시작을 설정해줘야 한다. (ex : and2) End명령어로 끝을 표시해야 한다. (ex : end and2;) Entity의 시작과 끝의 이름이 같아야 한다. (ex : and2) 이름 앞에 숫자를 표기 할 수 없다. (ex : 2and) 이름에 공백이 있어서는 안 된다. (ex : and 2) Entity Declaration
Port 선언 Port의 종류 In Out Inout Buffer Entity로의 입력단자, 단방향 데이터 입력 양방향 신호를 사용, 내부 피드백 허용 다른 모든 포트를 대치할 수 있음 Buffer Out포트와 비슷하나 피드백을 허용함 Entity 외부에서의 포트 구동을 허용하지 않음 Port 선언
Port 선언 Port Type Vector Type Std_logic Std_logic_vector Std_unlogic Std_unlogic_vector Bit Bit_vector Vector Type Ex) 8bit의 경우 Std_logic_vector(7 downto 0) MSB LSB Std_logic_vector(0 to 7) A(7) A(6) A(5) A(4) A(3) A(2) A(1) A(0) A(0) A(1) A(2) A(3) A(4) A(5) A(6) A(7) Port 선언
Entity내에 기술하며, Generic의 매개변수를 Entity에 전달함으로써 회로의 개수나 입출력의 크기가 매개변수에 의해 결정되게 하는 것 Ex) Generic(size : integer := 8); Generic의 사용은 사용할 Component의 Entity에 먼저 선언을 하고 다음 Component를 사용하는 Logic System에서 이를 이용한다. Generic(일반화)
객체(Object) 상수(Constant) 신호(Signal) Architecture 와 Begin 사이에 선언 한번 정해진 값은 바꿀 수 없다. 사용 예 Constant width : integer := 8; 신호(Signal) 선(wire)을 나타낼 수 있음 구성요소들을 서로 연결할 때 사용 Signal에 값을 대입할 때는 ‘<=‘을 사용 Signal count : bit_vector ( 3 downto 0); 객체(Object)
객체(Object) 변수(Variable) 파일(File) 프로세스문과 부프로그램 내에서 사용 신호(Signal)와는 달리 선이나 메모리 요소를 나타내지 못함 계산 목적으로 흔히 쓰임 한 순간에 1개의 값만 가짐 변수할당과 초기화 기호 ‘:=‘은 즉시 할당을 나타냄 Process 와 Begin 사이에 선언 사용 예 Variable result : std_logic := ‘0’; 파일(File) 객체 선언과 동시에 파일을 open 할 수 도 있고, 객체를 선언한 후에 파일 open/close를 procedure call로 별도로 할 수도 있다. File infile : text open READ_MODE is in “sample.dat”; 객체(Object)
Signal과 Variable의 차이 Signal Variable Wire로 구현 Component에 연결에 사용되는 외적 변수 객체 대입 방법 : ‘<=‘를 사용 VHDL에서 필요시 되는 시점에서 대입 초기값 선언에는 ‘:=‘를 사용(즉시 대입) 중간 연산단계에서 주로 이용 Variabe 값은 내적 변수로 사용 대입기호 : ‘:=‘ Signal과는 달리 값이 바로 대입 Signal과 Variable의 차이
Architecture Body Architecture Body Syntax 사용자가 설계하고자 하는 시스템 내부의 동작을 세부적으 로 정의하는 부분 Entity와 Architecture는 각각 독립적인 구성요소 Syntax architecture [architecture name] of [entity name] is begin architecture statement end [architecture name]; Architecture Body
Architecture Body Architecture Body의 예 Architecture rtl of and2 is Begin c <= a and b; End and2_a; Architecture Body
Architecture Body Architecture Body 설계 시 주의할 점 Architecture의 시작과 끝은 begin과 end이다. Entity이름은 앞에 선언된 Entity이름과 같아야 한 다. (ex : and2) Architecture의 이름을 선언해야 한다. (ex : sample, rtl) Architecture Body
기본적인 연산자 기본적인 연산자 <= : 신호 대입문 논리 연산자 A<= ‘1’; -- A에 논리 ‘1’을 전달 <= : 신호 대입문 A<= ‘1’; -- A에 논리 ‘1’을 전달 B<=“0101” -- B에 4비트 “0101”을 전달 논리 연산자 기본적인 연산자
If 문 조건에 맞게 실행 Architecture rtl of if_1 is Begin Process(clk, a1, a2) if(clk=‘1’) then y <= ‘1’; else y <= ‘0’; end if; end process End rtl; If 문
다중 If 문 조건이 여러 개 일 때 주의할 점! Architecture rtl of if_2 is Begin Process(a1, a2, a3, clk1, clk2) begin if (clk1=‘1’) then z <= a1; elsif(clk2=‘1’) then z <= a2; else z <= a3; end if end process; End rtl; 주의할 점! Elseif(X) → elsif(O) 다중 If 문
Else가 없을 때는 if 문이 거짓일 때 수행되어지는 명령이 없으므 로 전에 작성되어 있던 값을 그대로 출력하여야 함(기억소자가 필요) 대표적인 예 : Latch, Flip-Flop Architecture rtl of if_4 is Signal qtmp : std_logic; Begin Process(reset_n, j, k, clk) begin if reset_n = ‘0’ then qtmp <= ‘0’; elsif clk’ event and clk=‘1’ then if(j=‘1’ and k=‘0’) then qtmp <= ‘1’; elsif(j=‘0’ and k=‘1’) then qtmp <= ‘0’; elsif(j=‘1’ and k=‘1’) then qtmp <= not qtmp; end if; end process; q <= qtmp; End rtl; Else가 없는 if 문
Case 문 수식 값에 따라 문장을 선택 수식 값이 when의 값과 일치하면 그 문장 수행 Architecture rtl of ex3 is begin Process (sel, a0, a1, a2, a3) case sel is when “00” => y <= a0; when “01” => y <= a1; when “10” => y <= a2; when others => y <= a3; end case; end process; End rtl; Case 문
Loop 문 순차 처리문이며 반복 처리문 Loop For-loop While-loop 순차처리문; End loop; For 루프변수 in 변수범위 loop While-loop While 조건 loop Loop 문