- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[시스템분석및설계] 7,8장 3선8선 디코더, 4입력 멀티플렉서 예비레포트 본문
◎ 실험 목적
▶ 3선/8선 디코더와 4입력 멀티플렉서의 동작을 VHDL로 기술하고, 시뮬레이션
을 통해 동작을 검증한다.
◎ 이론 설명
▶ 3선/8선 디코더
① n 비트의 입력 신호를 받아들여, 출력 신호 개를 만들어 내면서 그중에 하나(입력 신 호 비트의 십진 값에 해당하는 출력)만을 나머지 신호와 다른 값을 갖게 만들어 주는 조 합 회로를 “디코더”라 부른다.
② n선/m선 디코더라 하면 n개의 입력과 m개의 출력을 갖는 디코더를 말하며, n×m 디코 더라 부르기도 한다.
③ 3선/8선 디코더의 동작은 3개의 입력 신호의 조건에 따라 8개의 출력 신호중 하나의 출 력만이 1이된다. 즉, 입력 3비트 이진수의 십진 값에 해당하는 출력만이 다른 출려과 구 별되는 값을 갖는 것이라 할 수 있다.
④ 진리표
입 력 |
출 력 | |||||||||
a2 |
a1 |
a0 |
d7 |
d6 |
d5 |
d4 |
d3 |
d2 |
d1 |
d0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
▶ 4입력 멀티플렉서
① 멀티플렉서(MUX)는 디지털 회로에서 가장 많이 쓰이는 회로 중 하나이다.
② MUX는 n개의 입력 중 선택된 하나의 입력 값이 출력으로 전달되게 하여 주는 조합 회 로이다.
③ 어느 입력을 선택할지를 결정하여 주는 데이터 선택 신호가 반드시 필요하다.
④ 입력이 4개인 MUX를 4입력 MUX 또는 4x1 MUX라고 한다.
⑤ 진리표
데이터 선택 신호 |
출 력 | |
s1 |
s0 |
out1 |
0 |
0 |
입력 a0 |
0 |
1 |
입력 a1 |
1 |
0 |
입력 a2 |
1 |
1 |
입력 a3 |
⑥ 선택 신호 s1, s0의 값이 각각 1, 0 이면 출력 out1의 값은 항상 입력 신호 a2와 같게 된다는 것이다.
◎ 실험 장비
▶ Xilinx ISE
▶ ModelSIM
▶ Rov-Lab 트레이닝 키트
◎ 실험 순서
▶ 3선/8선 디코더
① 3선/8선 디코더의 동작을 VHDL로 기술
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity dec3x8 is Port ( a : in std_logic_vector(2 downto 0); d : out std_logic_vector(7 downto 0)); end dec3x8; architecture Behavioral of dec3x8 is begin process (a) begin case a is when "000" => d <= "00000001"; when "001" => d <= "00000010"; when "010" => d <= "00000100"; when "011" => d <= "00001000"; when "100" => d <= "00010000"; when "101" => d <= "00100000"; when "110" => d <= "01000000"; when "111" => d <= "10000000"; when others => d <= "00000000"; end case; end process; end Behavioral; => 이번에는 입력과 출력 신호를 정의하는데 std_logic_vector 라는 신호 data 형태를 사용 하였다. 이 형태는 버스(bus)처럼 여러 개의 신호가 뭉쳐져 있을 때 사용한다. => 구조(architecture)문에서는 process문을 사용하고, CASE-WHEN 명령어를 사용하였다. IF-ELSE문을 사용해도 되지만, 입출력 신호가 std_logic_vector로 선언되어 있기 때문에 CASE-WHEN 명령어가 더 쉬울 수 있기 때문이다. *** Test Bench - User Defined Section *** tb : PROCESS BEGIN wait for 1000 ns; --will wait forever END PROCESS; PROCESS BEGIN L1 : LOOP a(2) <= '0'; wait for 200 ns; a(2) <= '1'; wait for 200 ns; END LOOP L1; END PROCESS; PROCESS BEGIN L2 : LOOP a(1) <= '0'; wait for 100 ns; a(1) <= '1'; wait for 100 ns; END LOOP L2; END PROCESS; BEGIN L3 : LOOP a(0) <= '0'; wait for 50 ns; a(0) <= '1'; wait for 50 ns; END LOOP L3; END PROCESS; < 3선/8선 디코더 Test Bench > => 여기서 보면 3개의 LOOP 명령어를 사용하여, 입력 신호 a(2), a(1), a(0)의 값을 변화 시키고 있음을 볼 수 있다. ② TestBenchWaveform으로 시뮬레이션 주어진 입력(a2, a1, a0)에 따라 출력(d7, d6, d5, d4, d3, d2, d1, d0)이 진리표대로 정확하게 출력되는지를 검증 ③ 트레이닝 키트로 동작 검증 주어진 입력(a2, a1, a0)에 따라 출력(d7, d6, d5, d4, d3, d2, d1, d0)이 진리표대로 정확하게 출력되는지를 검증 ▶ 4입력 멀티플렉서 ① 4입력 멀티플렉서의 동작을 VHDL로 기술 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity mux4x1 is Port ( a : in std_logic_vector(3 downto 0); s : in std_logic_vector(1 downto 0); out1 : out std_logic); end mux4x1; architecture Behavioral of mux4x1 is begin process ( a , s ) begin case s is when "00" => out1 <= a(0); when "01" => out1 <= a(1); when "10" => out1 <= a(2); when "11" => out1 <= a(3); when others => out1 <= "0"; end case; end process; end Behavioral; => 구조(architecture)문에서는 process문을 사용하고, CASE-WHEN 명령어를 사용하였다. 물론 IF-ELSE문을 사용해도 된다. *** Test Bench - User Defined Section *** tb : PROCESS BEGIN wait for 4000 ns; --will wait forever END PROCESS; PROCESS BEGIN L1 : LOOP a(0) <= '0'; wait for 50 ns; a(0) <= '1'; wait for 50 ns; END LOOP L1; END PROCESS; PROCESS BEGIN L2 : LOOP a(1) <= '0'; wait for 100 ns; a(1) <= '1'; wait for 100 ns; END LOOP L2; END PROCESS; PROCESS BEGIN L3 : LOOP a(2) <= '0'; wait for 200 ns; a(2) <= '1'; wait for 200 ns; END LOOP L3; END PROCESS; PROCESS BEGIN L4 : LOOP a(3) <= '0'; wait for 400 ns; a(3) <= '1'; wait for 400 ns; END LOOP L4; END PROCESS; PROCESS BEGIN L5 : LOOP s(0) <= '0'; wait for 1000 ns; s(0) <= '1'; wait for 1000 ns; END LOOP L5; END PROCESS; PROCESS BEGIN L6 : LOOP s(1) <= '0'; wait for 2000 ns; s(1) <= '1'; wait for 2000 ns; END LOOP L6; END PROCESS; *** End Test Bench - User Defined Section *** ② TestBenchWaveform으로 시뮬레이션 주어진 데이터 선택 신호 (s1, s0)에 따라 출력 (out1)이 진리표대로 정확하게 출력되는지를 검증 ③ 트레이닝 키트로 동작 검증 주어진 데이터 선택 신호 (s1, s0)에 따라 출력 (out1)이 진리표대로 정확하게 출력되는지를 검증
PROCESS
*** End Test Bench - User Defined Section ***
=> 이번에도 입력과 출력 신호를 정의하는데 std_logic_vector 라는 신호 data 형태를 사용 하였다. 이 형태는 버스(bus)처럼 여러 개의 신호가 뭉쳐져 있을 때 사용하면 편하다.
< 4입력 MUX Test Bench >
=> 여기서 모두 6개의 LOOP 명령어를 사용하고 있음을 볼 수 있다. 이는 동작 검증의 시각 효과를 높이기 위해 입력 4개의 신호를 서로 다른 주파수의 신호로 만들어 주고, 데이터 선택 신호 s(1), s(0)는 모두 4가지 경우의 값을 갖도록 변화시키기 위해서이다.
'★─Multi Media > ☆─2학년 2학기' 카테고리의 다른 글
[경영정보학원론] 퀴즈06 제6장,제7장 (0) | 2007.11.26 |
---|---|
[데이터구조] 다항식 프로그램 과제 (원형연결리스트) (0) | 2007.11.07 |
[경영정보학원론] [토론] 컴퓨터 언제사는게 적기인가?? (0) | 2007.10.29 |
[경영정보학원론] Report 정보보호에 관한 법률과 피해조사 (0) | 2007.10.25 |
[경영정보학원론] Report 오로비츠(Orbitz)와 같은 국내여행전문포털싸이트 (0) | 2007.10.25 |