AND, OR, NAND, NOR, XOR, XNOR 설계 예시
library ieee;
use ieee.std_logic_1164.all;
entity AAAA is
port(a, b : in std_logic;
x : out std_logic_vector(5 downto 0));
end AAAA;
architecture arc of AAAA is
begin
x(0) <= a and b;
x(1) <= a or b;
x(2) <= a nand b;
x(3) <= a nor b;
x(4) <= a xor b;
x(5) <= a xnor b;
end arc;
x : out std_logic_vector (5 downto 0); <- ????
C 언어에서 배열과 같은 의미로 이해하면 빠를 듯 싶다.
std_logic 형으로 여러개를 설계 하는 것보다, 같은 형태의 출력 핀이면 std_logic_vector 형이 간편하다.
입력도 마찬가지로 vector 형으로 정의가 가능하다
(5 downto 0) < = 000000 (왼쪽 첫 번째 비트가 5번, 오른쪽 마지막 비트가 0번)
(0 downto 5) < = 000000 (왼쪽 첫 번째 비트가 0번, 오른쪽 마지막 비트가 5번)
VHDL Basic 2
VHDL 은 C 와 마찬가지로 조건문이 가능하다.
(1) IF ELSE 문 (괄호 안에 조건)
- IF ( ) THEN
- IF ( )THEN
ELSIF( ) THEN < = 조건이 들어갈땐 ELSIF
- IF ( ) THEN
ELSE < = 조건이 없을 땐 ELSE
* 마지막엔 항상 END IF 로 마무리를 해주는 센스!
(2) CASE 문
- CASE ( 대상 ) IS
WHEN " 상태 " = > 출력 <= 값
WHEN OTHERS = > 출력 <= 값
* 마지막엔 END CASE;
(3) FOR LOOP 문
- FOR I IN 0 TO 7 LOOP
Y(I) <= A(I) AND B(I);
(4) SELECT 문
WITH 대상 SELECT
출력 <= "값" WHEN 상태,
"값" WHEN 상태,
"값" WHEN 상태,
"값" WHEN 상태;
* 마지막엔 END SELECT;
* VHDL에서 모든 조건문은 architecture 안에 process 문에 쓰여 져야 한다.
- 예
architecture arc of KITEL is
begin
process(a) -- architecture 안에 process는 여러 개가 와도 된다.
begin -- process 시작
if (a ="0")then -- 조건문의 대상은 process(대상 ) 에 정의 되어야한다
b <= '1'; -- 한 비트일 때는 ‘0’ 2개 이상일 때는 “00”
elsif(a ="1")then
b <= '0'; -- 마땅히 조건이 없으면 NULL; 처리를 하여도 무방하다.
end if;
end process; -- process 끝, process 가 여러개일 때는 병렬로 동시에 실행된다
end arc; -- process 안에서는 순차 architecture안의 process는 병렬처리
과제
(1) 7segment Decoder 동작을 하는 7447 IC를 설계
(2) MUX 와 DEMUX 를 각각 설계