#2. 8 to 1 Multiplexer
논리회로설계실험(VHDL) 2020. 12. 20. 05:14모바일 버전으로 볼 경우, 텍스트가 깨질수 있습니다. 데스크탑 버전으로 보시는 것을 추천드립니다.
1. 배경이론
multiplexer는 입력값을 통해 출력값을 선택하는 기능을 하는 논리 회로입니다. 예를 들어 입력값을 000~111까지 지정할 수 있다면 총 8개의 출력값을 설정하여, 원하는 출력을 입력값에 따라 나타낼 수 있습니다. 아래 그림은 mux를 표현한 모식도입니다. 두가지 입력을 통해 출력을 결정하게 됩니다.
위 그림과 같이 input이 1비트면 0 과 1 두개의 출력이 가능케 됩니다. 따라서 2개의 출력을 선택할 수 있게 됩니다. 오늘은 이것을 VHDL코드로 구현해보겠습니다.
아래는 truth table과 식을 나타냈습니다.
2. Multiplexer 코드
use IEEE.STD_LOGIC_1164.ALL;
Port ( mux2_i : in STD_LOGIC_VECTOR (1 downto 0); -- 포트구성 : 2-1 multiplexer의 입력값(2bit)
mux2_s : in STD_LOGIC ; -- 포트구성 : 2-1 multiplexer의 selection 값
mux2_o : out STD_LOGIC); -- 포트구성 : 2-1 multiplexer의 출력값
end mux2;
use IEEE.STD_LOGIC_1164.ALL;
entity mux8 is
Port ( mux8_i : in STD_LOGIC_VECTOR (7 downto 0); --포트구성 : 8-1multiplexer의 입력값(8bit)
mux8_s : in STD_LOGIC_VECTOR (2 downto 0); --포트구성 : 8-1multiplexer의 selection값(3bit)
mux8_o : out STD_LOGIC); -- 포트구성 : 8-1multiplexer의 출력값(1bit)
end mux8;
architecture Behavioral of mux8 is
component mux2 port (mux2_i : in STD_LOGIC_VECTOR (1 downto 0); mux2_s : in STD_LOGIC ;mux2_o : out STD_LOGIC); --component선언, mux2를 불러온다.
end component;
signal temp1 : STD_LOGIC_VECTOR(3 downto 0); --첫번째 단의 2-1multiplexer에서 나온 출력값들을 저장할 내부신호 선언(4bit)
signal temp2 : STD_LOGIC_VECTOR(1 downto 0); --두번째 단의 2-1multiplexer에서 나온 출력값들을 저장할 내부신호 선언(2bit)
begin
mux_1 : mux2 port map(mux8_i(1 downto 0), mux8_s(0), temp1(0)); --첫번째 단의 2-1multiplexer, mux8_s(0)에 의해 값이 선택되고, 그 값들이 temp1에 저장(4bit)
mux_2 : mux2 port map(mux8_i(3 downto 2), mux8_s(0), temp1(1));
mux_3 : mux2 port map(mux8_i(5 downto 4), mux8_s(0), temp1(2));
mux_4 : mux2 port map(mux8_i(7 downto 6), mux8_s(0), temp1(3));
mux_5 : mux2 port map(temp1(1 downto 0), mux8_s(1), temp2(0)); --두번째 단의 2-1multiplexer, temp1으로 부터 들어온 값들이 mux8_s(1)에 의해 값이 선택되고, 그 값들이 temp2에 저장(2bit)
mux_6 : mux2 port map(temp1(3 downto 2), mux8_s(1), temp2(1));
mux_7 : mux2 port map(temp2(1 downto 0), mux8_s(2), mux8_o); --세번째 단의 2-1multiplexer, temp2로 부터 들어온 값들이 mux8_s(2)에 의해 값이 선택되고, mux8_o으로 출력
end Behavioral;
USE ieee.std_logic_1164.ALL;
ENTITY mux8_TB IS
END mux8_TB;
ARCHITECTURE behavior OF mux8_TB IS --mux8을 기반으로 한 TestBench
COMPONENT mux8
PORT(
mux8_i : IN std_logic_vector(7 downto 0); --mux8의 포트 구성
mux8_s : IN std_logic_vector(2 downto 0);
mux8_o : OUT std_logic
);
END COMPONENT;
signal mux8_i : std_logic_vector(7 downto 0) := (others => '0'); --mux8의 내부신호 선언
signal mux8_s : std_logic_vector(2 downto 0) := (others => '0');
signal mux8_o : std_logic;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: mux8 PORT MAP (
mux8_i => mux8_i,
mux8_s => mux8_s,
mux8_o => mux8_o
);
stim_proc: process
--여기서부터 실습에 주어진 입력값과 selection값이 대입됩니다.
begin
mux8_i<="00000001";
mux8_s<="000";
wait for 10ns;
mux8_i<="00000010";
mux8_s<="001";
wait for 10ns;
mux8_i<="00000100";
mux8_s<="010";
wait for 10ns;
mux8_i<="00001000";
mux8_s<="011";
wait for 10ns;
mux8_i<="00010000";
mux8_s<="100";
wait for 10ns;
mux8_i<="00100000";
mux8_s<="101";
wait for 10ns;
mux8_i<="01000000";
mux8_s<="110";
wait for 10ns;
mux8_i<="10000000";
mux8_s<="111";
wait for 10ns;
mux8_i<="00000000";
mux8_s<="000";
wait for 10ns;
wait;
end process;
END;
다음은 testbench를 돌렸을 때의 결과물입니다.
위 내용들을 모두 포함한 보고서를 위 사이트에서 참조하실 수 있습니다.
#5. RAM/ROM (0) | 2021.03.08 |
---|---|
#4.Binary/Gray counter(이진,그레이 카운터) (0) | 2020.12.27 |
#3. FlipFlop(플립플롭)을 이용한 ShiftRegister 구현 (0) | 2020.12.24 |
#1. Full adder(전가산기) (0) | 2020.10.22 |