VHDL 배워보기를 시작하며
이 곳에서 설명 할 내용은 VHDL의 기술에대한 방법에 대해서 간단한 설명을 합니다. 따라서 VHDL을 처음 접하는 분들에게 이해를 돕고자 마련된 곳 입니다. 혹 부족한 설명이나 잘 못된 설명이 있다면 Q/A란을 통하여 질문해 주시면 성의 껏 답변 드리겠습니다.
이 곳에서 설명 할 내용은 VHDL의 기술에대한 방법에 대해서 간단한 설명을 합니다. 따라서 VHDL을 처음 접하는 분들에게 이해를 돕고자 마련된 곳 입니다. 혹 부족한 설명이나 잘 못된 설명이 있다면 Q/A란을 통하여 질문해 주시면 성의 껏 답변 드리겠습니다.
1. VHDL의 기본
VHDL을 시작하기 전에 기본적인 내용을 설명합니다.
1-1. Identifier(식별어)
VHDL의 식별어(identofier)란 설계자가 임의로 정의할 수 있는 문자열로 entity 이름(회로이름), architecture body, port, 함수 등의 이름을 정의하기 위하여 사용되며, 규칙은 다음과 같다.
- VHDL에서는 대소문자 구분을 하지 않습니다.
- 두개의 대쉬("--")는 주석으로 처리합니다.
- 식별어는 알파벳(a~z,A~Z), 숫자(0~9), 밑줄("_")를 사용할 수 있으며, 첫 문자는 반드시 알파벳 문자로 시작하여야 된다.
- 하나의 식별어내에 2개의 밑줄("_")을 사용 또는 식별어 마직막 문자로 밑줄을사용하지 않는것이 좋다.
- 식별어 내에 공백(Spaces)은 허용되지 않는다.
- Object 이름은 받드시 하나만 있어야 한다. 예) signal 이름 A 와 bus 이름 A(7 downto 0)를 같은 이름으로 사용될 수 없다.
1-2. Reserved Keywords(지정어)
VHDL의 지정어(Reserved keywords)란 VHDL 구문을 위해서 미리 지정된 문자열이며, 사용자가 식별어로 사용할 수 없다.
다음은 지정어 리스트 이다.
다음은 지정어 리스트 이다.
abs | downto | library | postponed | subtype | |
access | else | linkage | procedure | then | |
after | elsif | literal | process | to | |
alias | end | loop | pure | transport | |
all | entity | map | range | type | |
and | exit | mod | record | unaffected | |
architecture | file | nand | register | units | |
array | for | new | reject | until | |
assert | function | next | rem | use | |
attribute | generate | nor | report | variable | |
begin | generic | not | return | wait | |
block | group | null | rol | when | |
body | guarded | of | ror | while | |
buffer | if | on | select | with | |
bus | impure | open | severity | xnor | |
case | in | or | shared | xor | |
component | inertial | others | signal | ||
configuration | inout | out | sla | ||
constant | is | package | sra | ||
disconnect | label | port | srl |
2. Design Unit
VHDL을 이용하여 하드웨어를 설계하기 위한 기본 구성으로 여러 개의 Design Unit가 있다. 그 중 최소의 하드웨어를 기술하기 위해서는 entity declaration 과 architecture body 두 개의 Design Unit가 있어야 한다.
그 이외에 package( package declaration, package body), configuration
declaration 등의 Design Unit가 있다.
VHDL을 이용하여 하드웨어를 설계하기 위한 기본 구성으로 여러 개의 Design Unit가 있다. 그 중 최소의 하드웨어를 기술하기 위해서는 entity declaration 과 architecture body 두 개의 Design Unit가 있어야 한다.
그 이외에 package( package declaration, package body), configuration
declaration 등의 Design Unit가 있다.
2-1. Entity Declaration
Entity 선언은 회로의 이름과 함께 인터페이스(in/out port)등 설계할 회 로와 외부와의 연결을 설정하는 부분이다.
library ieee;
use ieee.std_logic_1164.all; entity D_FF is -- 회로이름이 D_FF port ( data, clk : in std_logic; -- 입력으로 data , clk 사용 q : out std_logic); -- 출력으로 q 사용 end D_FF; -- 회로의 외부연결끝 |
* 진한 글씨는 점유어(Reserved kwywords)이고 그 이외의 것은 식별어(identifier) 이다.
2-1-1. Port
입,출력 port의 이름(data, clk, q)과 port signal의 방향(in, out)
그리고 data type(std_logic)을 기술한다.
입,출력 port의 이름(data, clk, q)과 port signal의 방향(in, out)
그리고 data type(std_logic)을 기술한다.
2-1-2. 기타
Entity Unit에는 위에서 설명한 port 이 외에
Design parameter를 회로에 전달하기 위한 generic 이 올 수 있으며,
선언문을 통하여 여러 architecture body에서 선언할 것을 한 번만
선언해서 사용할 수 있도록 할 수 있다.
Entity Unit에는 위에서 설명한 port 이 외에
Design parameter를 회로에 전달하기 위한 generic 이 올 수 있으며,
선언문을 통하여 여러 architecture body에서 선언할 것을 한 번만
선언해서 사용할 수 있도록 할 수 있다.
2-2. Architecture Body
Architecture Body는 회로의 동작 및 내부 연결상태를 기술하는 부분이다.
library ieee;
use ieee.std_logic_1164.all; entity D_FF is
port ( data, clk : in std_logic; q : out std_logic); end D_FF; architecture behav of D_FF is begin process (clk) -- sensitivity list --> clk begin if (clk'event and clk= '1') then -- 클럭의 Rising event q <= data; -- 회로의 동작과 연결 end if; -- if문의 끝 end process; -- process의 끝 end behav; -- architecture의 끝. |
* D_FF는 entity 이름(회로이름)이며, behav는 architecture 이름으로 사용자가 정의하는 식별어 이다.
2-2-1. process 문
architecture body내의 회로의 동작을 기술한 문장으로 순차적으로 수행된다. 그러나 process문이 여러개인 경우 process 문들은 기술된 문장 순서대로 동작되는 것이 아니라 동시수행(Concurrent)된다.
sensitivity list는 signal의 이름이며, 이 값이 변해야만 process
문이 수행된다.
문이 수행된다.
3. Design Library
Library는 이미 VHDL을 이용하여 설계된 것으로 반복설계를 피하고 공유할 목적으로 만들어진 저장장소이다.
ex)
liibrary IEEE -- IEEE 라는 Library 저장장소의
use IEEE.std_logic_1164.all; -- std_logic.1164라는 Package 사용 |
4. Data Type & Object
VHDL에서 signal(신호), variable(변수), constant(상수)등을 Object라 하며, 모든 Object는 data type(데이타형)을 가진다.
signal net_a : std_logic; -- signal net_a 는 9가지 표준논리상태를
A B C 갖는 표준 Data Type 이다.
A : Object의 종류가 신호(signal)임.
B : Object의 이름은 net_a
C : Object의 data type은 bit 형태의 표준 data type |
VHDL에서는 여러형태의 Data Type을 가지고 있으며, 사용자로 하여금 임의의 data type도 정의하여 사용할 수 있다. 여기에선 IEEE 1164 표준 Data Type만 설명하고자 한다.
4-1-1. IEEE 1164 표준 Data Type
특정 시스템에 종속되지않는 표준화된 논리상태로서 9개의 상태값을 가지고 있다.
다음은 표준화된 9개의 논리값과 이를 사용하기 위한 Package 형태이다
Package 형태 |
표준화된 9개의 논리값. | |
liibrary IEEE
use IEEE.std_logic_1164.all; |
'U' -- Uninitialized
'X' -- Strong Unknown
'0' -- Strong Logic 0
'1' -- Strong Logic 1
'Z' -- High Impedance
'W' -- Weak Unknown
'L' -- Weak Logic 0
'H' -- Weak Logic 1
'-' -- Don't Care |