반응형

범용 로직으로서의 멀티플렉서

대부분의 응용 프로그램에서 멀티플렉서를 사용합니다. 멀티플렉서 또는 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으로 할당됩니다.

 

2:1 MUX 및 게이트 레벨 설계의 진리표

sel_in y_out
O a_in
1 b_in

 

module mux_2to1 ( input a_in, b_in, sel_in, output y_out );
assign y_out = (sel_in) ? b_in : a_in ;
endmodule

 

 

MUX를 범용 로직을 사용하는 이유는 이해하기 쉽고 구조가 간단하기 때문입니다. 다음 그림은 2:1 MUX를 사용하여 2개의 입력 XOR 논리 게이트를 구현하는 방법을 이해하는 데 유용합니다. XOR 논리 게이트에 두 개의 입력 a, b 및 출력 y가 있다고 가정합니다.

 

 

if...else case 구문

2:1 MUX를 코딩할 수 있는 다양한 방법이 있습니다.

if-else를 사용하거나 case… endcase를 사용하여 코딩할 수 있습니다.

 

다음 예는 if-else를 사용하여 합성 가능한 디자인과 case문을 사용하여 합성 가능한 디자인을 설명합니다.

 

module mux_2to1( input a_in, b_in, sel_in, output reg y_out );
always@*
begin
  if
(sel_in)
    y_out = b_in;
  else
    y_out = a_in;
  end
endmodule

 

module mux_2to1 ( input a_in, b_in, sel_in, output reg y_out );
always@*
begin
  case
(sel_in)
    1'b0 : y_out = a_in;
    1'b1 : y_out = b_in;
  endcase
end
endmodule

 

if...else를 사용하는 4:1 MUX

4:1 MUX에는 4개의 입력 라인과 단일 출력 라인이 있습니다. 4:1 MUX에는 두 개의 선택 라인이 있으며 한 번에 하나의 입력을 선택하는 데 사용됩니다.

 

4:1 MUX의 진리표

sel_in[1] sel_in[0] y_out
0 0 d_in[0]
0 1 d_in[1]
1 0 d_in[2]
1 1 d_in[3]

 

module mux_4to1 ( input [3:0] d_in, input [1:0] sel_in, output reg y_out );
always @*
begin
  if
(sel_in ==2'b00)
    y_out = d_in[0];
  else if (sel_in ==2'b01)
    y_out = d_in[1];
  else if (sel_in ==2'b10)
    y_out = d_in[2];
  else
    y_out = d_in[3];
  end
endmodule

 

 

반응형

+ Recent posts