인코더의 기능은 디코더와 정확히 반대입니다. 인코더에는 n개의 입력 라인과 m개의 출력 라인이 있으며, 입력 라인과 출력 라인 사이의 관계는 n = 2m로 주어진다. 예를 들어 4:2 인코더를 고려해보자. 입력 라인의 수는 n = 4이고 출력 라인은 m = 2입니다. 4:2 인코더의 블록 다이어그램은 아래 그림과 같습니다.
우선 순위 인코더는 실제 응용 분야에서 사용되며 n개의 입력 라인과 m개의 출력 라인을 가지며 입력 라인과 출력 라인 간의 관계는 n = 2m로 주어집니다. 예를 들어 4:2 우선 순위 인코더를 고려해보면 입력 라인의 수는 n = 4이고 출력 라인은 m = 2입니다. 4:2 우선 순위 인코더의 블록 다이어그램은 다음 그림과 같습니다.
입력 In[3]이 가장 높은 우선 순위를 가지며 입력 in[0]이 가장 낮은 우선 순위를 갖습니다. 여기서 'X'는 상관 없음을 나타냅니다.
시스템 설계에서 대부분의 경우 디코더를 사용하여 메모리 또는 IO 장치 중 하나를 선택합니다.
디코더
디코더에는 n개의 선택 라인 또는 입력 라인과 m개의 출력 라인이 있으며 high 활성 또는 low 활성 출력을 생성하는 데 사용됩니다. 선택 라인과 출력 라인 사이의 관계는 m = 2n으로 주어진다. 한 번에 n개의 입력 라인의 논리 상태에 따라 출력 라인 중 하나가 하이 또는 로우가 됩니다.
다음 그림은 3:8 디코더를 나타냅니다. 그림과 같이 X2, X1, X0은 선택 입력이고 Y0 ~ Y7은 하이 활성 출력 라인입니다.
다음 표는 디코더의 진리표입니다. 하이 활성 출력 디코더의 경우 한 번에 출력 라인 중 하나가 하이 활성됩니다.
X2
X1
X0
Y7
Y6
Y5
Y4
Y3
Y2
Y1
Y0
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
다음 그림은 하이 활성 인에이블 입력 en을 갖는 3:8 디코더의 상징적 표현입니다. 표시된 진리표는 활성 하이 활성화 en = 1을 갖는 디코더에 대해 양호합니다. en = 0일 때 디코더는 비활성화되고 출력 Y = 8'b0000_0000입니다.
1 라인 대 2 또는 1:2 디코더에는 1개의 선택 입력 Sel, 인에이블 입력 En 및 2개의 출력 라인 Out_Y0 및 Out_Y1이 있습니다.
En
Sel
Out_Y1
Out_Y0
1
0
0
1
1
1
1
0
0
X
0
0
//Verilog RTL for 1 Line to 2 Line decoder with active high enable input module one_two_decoder_with_enable ( Sel, En, Out_Y1, Out_Y0); input Sel; input En; output Out_Y1; output Out_Y0; reg Out_Y1; reg Out_Y0;
always @ (Sel or En) begin if (En) case (Sel) 1'b0 : {Out_Y1, Out_Y0} = 2'b01; 1'b1 : {Out_Y1, Out_Y0} = 2'b10; endcase else {Out_Y1, Out_Y0} = 2'b00; end endmodule
2 Line to 4 Decoder with Enable 사용 사례
2 라인 대 4 또는 (2:4) 디코더에는 2개의 선택 입력 sel_in[1], sel_in[0], enable 입력 enable_in 및 4개의 출력 라인 y_out[3], y_out[2], y_out[1] 및 y_out이 있습니다.
2 라인 대 4 또는 (2:4) 디코더에는 2개의 선택 입력 Sel[1], Sel[0], 로우 활성화 입력 En_bar 및 4개의 활성 로우 출력 라인 Out_Y[3], Out_Y[2], Out_Y[1], Out_Y[0]이 있습니다.
En_bar
Sel[1]
Sel[0]
Out_Y[3]
Out_Y[2]
Out_Y[1]
Out_Y[0]
0
0
0
1
1
1
0
0
0
1
1
1
0
1
0
1
0
1
0
1
1
0
1
1
0
1
1
1
1
X
X
1
1
1
1
//Verilog RTL for 2 Line to 4 Line decoder with active low enable input and active low output lines module Two_to_Four_decoder(Sel,En_bar, Out_Y); input [1:0] Sel; input En_bar; output [3:0] Out_Y; reg [3:0] Out_Y;
always @ (Sel or En_bar) begin if (~En_bar) case (Sel) 2'b00 : Out_Y = 4'b1110; 2'b01 : Out_Y = 4'b1101; 2'b10 : Out_Y = 4'b1011; 2'b11 : Out_Y = 4'b0111; endcase else Out_Y = 4'b1111; end endmodule
//Verilog RTL for 2 Line to 4 Line decoder with active low enable input and for active low output lines module Two_to_Four_decoder(Sel,En_bar, Out_Y); input [1:0] Sel;
initial begin // Initialize Inputs sel_in = 0; enable_in = 0; // Wait 100 ns and then force enable_in =1 #100; enable_in =1 ;
// Wait 250 ns and then force enable_in =0 #250 enable_in =0;
end endmodule
2:4 디코더를 사용하여 4라인에서 16 디코더로
4 라인 대 16 또는 (4:16) 디코더에는 4개의 선택 입력 sel_in[3]: sel_in[0], 활성 로우 인에이블 입력 enable_in이 있으며 4개의 2:4 디코더를 사용하여 설계되었습니다. 각 2:4 디코더에는 4개의 활성 로우 출력 라인 y_out[3], y_out[2], y_out[1] 및 y-out[0]이 있습니다. 출력에 16개의 2:1 멀티플렉서가 있습니다.
대부분의 응용 프로그램에서 멀티플렉서를 사용합니다. 멀티플렉서 또는 MUX는 Boolean 함수 또는 논리 게이트를 구현하는 데 사용되며 범용 로직이라고 합니다. 멀티플렉서의 주요 응용 프로그램은 입력 중 하나를 선택하는 스위치라고 생각하면 됩니다.
멀티플렉서
멀티플렉서는 많은 입력 중 하나를 선택하는 데 사용됩니다. 멀티플렉서는 범용 로직이라고도 하며 실제로 사용되는 용어는 MUX입니다. 적절한 멀티플렉서를 사용하여 모든 조합 논리 기능을 실현할 수 있습니다.
멀티플렉서는 ASIC 및 FPGA 기반 설계에서 선택 로직으로 사용됩니다.
멀티플렉서는 가산기에 비해 더 적은 면적을 차지하며, 대부분의 경우 MUX는 가산기 및 감산기와 같은 산술 구성 요소를 구현하는 데 사용됩니다.
다음 그림은 n:1 MUX의 블록도를 나타내고 있으며 n개의 입력 라인, m개의 선택 라인, 하나의 출력 라인으로 구성됩니다. 입력 라인은 i[0], i[1] … i[n - 1]로 표시됩니다. s[0], s[1], … s[m - 1]로 라인을 선택하고 y로 라인을 출력합니다.
멀티플렉서는 n개의 입력 라인, m개의 선택 라인 및 단일 출력 라인을 가지고 있습니다. 입력 라인과 선택 라인 사이의 관계는 n = 2m로 표시됩니다.
예를 들어, 4:1 MUX 입력 라인은 4개이므로 m = log2n, 즉 2와 동일한 라인을 선택합니다.
범용 로직으로서의 멀티플렉서
모든 조합 논리 기능이 MUX를 사용하여 실현될 수 있으므로 범용 논리로 취급됩니다.
2:1 먹스
2:1 MUX에는 2개의 입력 라인이 있습니다. 하나는 선택 라인이고 다른 하나는 출력 라인입니다. sel_in 입력이 논리 0일 때 출력 y_out은 a_in으로 할당되고 출력은 논리 1과 동일한 sel_in에 대해 b_in으로 할당됩니다.
MUX를 범용 로직을 사용하는 이유는 이해하기 쉽고 구조가 간단하기 때문입니다. 다음 그림은 2:1 MUX를 사용하여 2개의 입력 XOR 논리 게이트를 구현하는 방법을 이해하는 데 유용합니다. XOR 논리 게이트에 두 개의 입력 a, b 및 출력 y가 있다고 가정합니다.
if...else 대 case 구문
2:1 MUX를 코딩할 수 있는 다양한 방법이 있습니다.
if-else를 사용하거나 case… endcase를 사용하여 코딩할 수 있습니다.
다음 예는 if-else를 사용하여 합성 가능한 디자인과 case문을 사용하여 합성 가능한 디자인을 설명합니다.