하드웨어
VHDL 구문
1)주석문
'--'로 시작.
‘--’ 부터 문장 끝(‘Enter')까지 주석으로 처리
2)식별자(Identifier)
VHDL에서 사용되는 variable, signal, label 명으로 대/소문자 구분이 없으며 문자로 시작해야 한다.
중간에 특수문자를 사용할 수 없다.
3) entity 선언 : 모듈의 입출력을 지정
entity <entity_name> is
generic (
<generic_name> : <type> := <value>;
<other generics>...
);
port (
<port_name> : <mode> <type>;
<other ports>...
);
end <entity_name>;
4) port문
회로에서 사용될 port 및 port종류에 대해 기술한다.
I/O port 종류 : IN, OUT, INOUT, BUFFER
· IN : 신호의 입력
· OUT : 신호의 출력
· INOUT : 신호의 입력 및 출력(출력되는 신호를 회로 내에서 사용 불가능)
· BUFFER : 신호의 입력 및 출력(출력되는 신호를 회로 내에서 사용가능)
· LINKAGE : 동작에 영향을 주지 않고 port로서 연결된 경우
5) Architecture 선언 : 선언된 엔티티의 동작에 관련된 정의
architecture <arch_name> of <entity_name> is
-- declarative_items (signal declarations, component declarations, etc.)
begin
-- architecture body
end <arch_name>;
6) Process문 : 감지리스트에 있는 신호가 바뀌면 순차적으로 실행
process (<all_input_signals_seperated_by_commas>)
begin
<statements>;
end process;
Wait문 : Wait문은 세가지 다른 형태로 사용가능
Wait on <감지리스트> : 신호가 바뀔 때까지 기다린다.
Wait for <시간> : 얼마의 시간동안 기다린다.
Wait until <부울대수 표현> : 표현식의 신호중 하나가 바뀔 때 계산되어 그 표현식이 '참'일 때 실행
7) 변수, 신호, 상수의 선언
constant <name>: <type> := <value>;
signal <name>: <type> := <value>;
signal <name>: std_logic_vector(15 downto 0):= x"0000";
variable <name>: <type> := <value>;
variable <name>: std_logic_vector(15 downto 0):= x"0000";
변수는 Process안에서 선언되고 초기화되어야 하는 반면 신호는 Process밖에서 선언되고 초기화되어야 함.
사용가능한 Type
bit '0' 또는 '1'
Boolean True or false
interger -(2^31-1)~2^31-1 범위의 정수
Real -1.0E38~ +1.0E38 범위의 부동 소수점 숫자
Chearacter 대소문자, 아라비아숫자 특수문자를 포함하는 모든 합법적인 문자
time fs, ps, ns, ms, sec, min 혹은 hr을 단위로 하는 정수
간단한 D-F/F 예제
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity d_ff is
port ( clk, rst : in std_logic;
D : in std_logic;
Q : out std_logic);
end d_ff;
architecture top of d_ff is
begin
process(clk, rst)
begin
if rst = '0' then
Q <= '0';
elsif clk = '1' and clk'event then
Q <= D;
end if;
end process;
end top;