디코더 디코더(decoder)란 n비트의 2진 코드(code) 값을 입력으로 받아들여 최대 2^n개의 서로 다른 정보로 바꿔 주는 조합 회로를 말한다. 일반적으로 디코더는 n개의 입력선과 최대 2^n개의 출력선을 가지며, 입력 값에 따라 선택된 하나의 출력선이 나머지 출력선들과 반대값을 갖는다. 3x8디코더 : 3개의 입력선과 최대 2^3개의 출력선을 가지며 입력 값에 따라 선택된 하나의 출력선이 나머지 7개의 출력선들과 반대값을 갖는다. 2.소스코드 및 코드설명 library ieee; use ieee.std_logic_1164.all; entity Decoder_38 is -- Decoder_38에 대한 entity port ( A : in std_logic_vector (2 downto 0); --A 입력 로직벡터 (3부터0 내림차순), A2A1A0 3비트 선언 Y :out std_logic_vector (7 downto 0)); --Y 출력 로직벡터(7부터 0내림차순) , 8비트 선언 end Decoder_38; architecture Behavioral of Decoder_38 is --Decoder_38에 대한 동작적모델링 begin process(A) -- A의 입력신호 변화에의한 순차적 처리begin case A is when "000" => Y <= "00000001"; when "001" => Y <= "00000010"; when "010" => Y <= "00000100"; when "011" => Y <= "00001000"; when "100" => Y <= "00010000"; when "101" => Y <= "00100000"; when "110" => Y <= "01000000"; when "111" => Y <= "10000000"; end case; --CASE문 종료 end process; -- 순차처리문 종료 end Behavioral; --동작적모델링 종료 3.시뮬레이션 결과 및 설명 (1) 입력신호 A의 값이 001이 나올 경우 디코더의 출력 Y의 값은 00000010이 나왔다. 설계한 디코더의 진리표에서 A가 001일시 Y의 출력은 Y(1), Y의 1비트에 1을 선택하였으므로 나머지 비트의 출력은 Y 1비트의 출력값과 반대이다. (2) 입력신호 A의 값이 000이 나올 경우 디코더의 출력 Y의 값은 00000001이 나왔다. 설계한 디코더의 진리표에서 A가 000일시 Y의 출력은 Y(0), Y의 0비트에 1을 선택하였으므로 나머지 비트의 출력은 Y 0비트의 출력값과 반대이다. (3) 입력신호 A의 값이 111이 나올 경우 디코더의 출력 Y의 값은 10000000이 나왔다. 설계한 디코더의 진리표에서 A가 1일시 Y의 출력은 Y(7), Y의 7비트에 1을 선택하였으므로 나머지 비트의 출력은 Y 7비트의 출력값과 반대이다. ★디코더의 진리표는 설계자에 의해 입출력이 달라 질 수있다. 이 포스트를 보기전에 아래 버튼(View on)을 꾹 눌러주시길 바랍니당 ^^ 외부 링크로 첨부된 음악, 동영상은 디코더 ( Decoder ) 디코더는 인코더와 정반대 기능을 수행하며, n 비트의 2진 코드 입력에 의해 최대 2ⁿ개의 출력이 나오므로 가능한 한 2진 입력의 조합만큼 출력을 가진다. 디코더는 인코더가 한 일 암호화또는 컴퓨터가 인식할수있는 것들을 해독해서 사람이 읽을 수 있게 바꾸는 해독기 역할을 한다. 디코더의 진리표는 아래와 같다. 00 이란 값이 들어오면 D0 으로 가는 것이고, 01 이란 값이 들어오면 D1, 10이 들어오면 D2, 11이 들어오면 D3 이렇게해서 출력을 갖는다. 이 진리표를 가지고 2x4 디코더를 위한 논리 회로는 아래와 같이 작성 할 수 있다. 2x4 디코더를 위한 블록도는 아래와 같다. 2x4 뿐만아니라 3x8, 4x16 등 설계할 수 있다. 입력이 2,3,4 ...n개 갯수에따라 출력이 2ⁿ개가 나올 수 있다. 아래는 3x8 디코더 회로이다 참고하길 바란다. 3x8 디코더는 3개의 입력을 받고 8개의 출력을 갖는 디코더를 말한다. 아래는 3x8 디코더의 진리표이다. 이 진리표를 가지고 논리회로를 그려보면 아래와 같다. |