'Decoder'에 해당되는 글 1건

  1. 2010.01.09 VHDL Basic 3
Studyhard/VHDL2010.01.09 01:57
(1) 7segment Decoder 동작을 하는 7447 IC를 설계

http://www.alldatasheet.com 에서 확인한 74ls47 BCD-to-SEGMENT Truth Table 이다 

library ieee;
use ieee.std_logic_1164.all;

entity segment is
port( s : in std_logic_vector(3 downto 0);
 o : out std_logic_vector(6 downto 0));
end segment;

architecture arc of segment is
begin
process (s)
begin
case s is
when "0000" => o <="0000001";
when "0001" => o <="1001111";
when "0010" => o <="0010010";
when "0011" => o <="0000110";
when "0100" => o <="1001100";
when "0101" => o <="0100100";
when "0110" => o <="1100000";
when "0111" => o <="0001111";
when "1000" => o <="0000000";
when "1001" => o <="0001100";
end case;
end process;
end arc;

Truth Table 을 참고하여 SEGMENT 에 0 - 9 까지 출력이 가능한 BCD TO SEGMENT DECODER 를 설계하였다. DECODER 설계와 마찬가지로 ENCODER 설계도 어렵지 않으니, 각자 DATA SHEET 를 참고하여 만들어 보기 바란다.

(2) MUX 와 DEMUX 를 각각 설계
MUX = > MULTIPLEXER 회로에서 입력되는 신호 중 어느 하나의 입력신호를 선택하여 출력회로에 실어 주 는 기능을 수행하는 데이터 선택 논리회로
DEMUX = > DEMULTIPLEXER, MULTIPLEXER의 정반대의 역할을 하는 논리회로

MUX 설계
library ieee;
use ieee.std_logic_1164.all;

entity Mux_4to1 is
port (a : in std_logic_vector(3 downto 0);
 Data : out std_logic;
 s : in std_logic_vector(1 downto 0));
end Mux_4to1;

architecture arc of Mux_4to1 is
begin
with s select
Data <= a(0) when "00",
       a(1) when "01",
       a(2) when "10",
       a(3) when "11",
'0' when others;
end arc;

위의 소스와 같이 MUX 는 SELECT 로 출력이 바뀌는 것을 알 수 있다. 




DEMUX 설계
library ieee;
use ieee.std_logic_1164.all;
 

entity Demux_1to4 is
port(a : in std_logic;
y : out std_logic_vector(3 downto 0);
sel : in std_logic_vector(1 downto 0));
end Demux_1to4;

architecture arc of Demux_1to4 is
begin
process (sel)
begin
y<="0000";
case sel is
when "00" => y(0)<=a;
when "01" => y(1)<=a;
when "10" => y(2)<=a;
when "11" => y(3)<=a;
when others=> y<="0000";
end case;
end process;
end arc;


VHDL Basic 3

우리가 Hardware 를 만들 때, 나중에 쓰기 위해 모듈을 만들거나, 사서 쓰는 경우가 있다. 모듈의 장점은 나중에 어디다 써도 분해 하지 않고 쓸 수 있다는 것이다. VHDL 언어도 이와 마찬 가지로 Component 라는 기능을 가지고 있다. 예를 들어, 디지털 시계를 만들 때, 초를 세는 부분, Segment 디스플레이 부분, Stopwatch 부분 등 따로 따로 분리해서 만들어 놓고 Component 로 합치면 디지털 시계가 만들어 지는 것이다. 

Component 
 - Component 로 합성할 Source 는 Main Source 와 같은 경로로 저장 되어 있어야 한다.
 - Architecture 아래에 놓여진다.
  ex)
architecture arc of x is 
component (모듈 부분 entity name) port ( a : in std_logic;
  d : out std_logic);
end component; 
* 모듈에서 port 가 a, b, c  가 입력이고 d 가 출력인데, 그중 a, d 만 필요하다면, 위와 같이 코딩 해주면 된다.

 - begin 후에 Main 부분의 포트와 Component 의 포트를 서로 연결해 주기만 하면 된다.
  ex)
begin
u0 : (모듈 부분 entity name) port map(모듈 포트 = > 연결 포트, 모듈 포트 => 연결 포트);
end arc;
* 단지 연결해 줄 뿐이다.  =>  ◀ 이 표시가 있다고 해서 대입이라는 의미가 절대 아니다
* 한 모듈을 여러 번 쓸 수 가 있다.


과제
library ieee;
use ieee.std_logic_1164.all;

entity ADD is
port( a,b,c: in std_logic;
sum,cout : out std_logic);
end ADD;

architecture arc of ADD is
begin
sum <= (a xor b)xor c ;
cout <= (a and b) or ((a xor b) and c);
end arc;

위 소스는 1비트 전가산기 소스이다. 다음을 참고하여 4비트 전가산기를 설계하라.



저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈

티스토리 툴바