4:1 MUX 사용 사례 구성
4:1 MUX는 case-endcase 구조를 사용하여 설명됩니다.
표시된 것처럼 case-endcase 구성은 병렬 논리를 추론하는 데 사용됩니다.
module mux_4to1 ( input [3:0] d_in, input [1:0] sel_in, output reg y_out);
always @*
begin
case ( sel_in )
2'b00 : y_out = d_in[0];
2'b01 : y_out = d_in[1];
2'b10 : y_out = d_in[2];
2'b11 : y_out = d_in[3];
endcase
end
endmodule

2:1 MUX를 사용하는 4:1 Mux
4:1 MUX는 2:1 MUX를 사용하여 구현할 수 있습니다.
4:1 MUX는 3개의 2:1 멀티플렉서를 사용하여 구현됩니다.

module mux_4to1 ( input [3:0] d_in, input [1:0] sel_in, output y_out );
reg tmp_1, tmp_2;
always @*
begin
case ( sel_in[0] )
1'b0 : begin
tmp_1 = d_in[0];
tmp_2 = d_in[2];
end
1'b1 : begin
tmp_1 = d_in[1];
tmp_2 = d_in[3];
end
endcase
end
assign y_out = (sel_in[1]) ? tmp_2 : tmp_1;
endmodule
멀티플렉서를 사용하여 조합 논리 설계
이제 합성 가능한 구조를 사용하여 다음 표에 표시된 단일 비트 가산기와 감산기를 구현해 보겠습니다.
if…else 구성의 사용으로 인해 추론된 논리는 출력에서 멀티플렉서 체인을 사용합니다.
| Control input | Operation | Description |
| 0 | a_in + b_in | Perform addition of (a_in, b_in) |
| 1 | a_in - b_in | Perform subtraction of (a_in, b_in) |
module add_sub ( input a_in, b_in, control_in, output reg result_out, carry_out );
always @ *
if (control_in)
{ carry_out, result_out } = a_in + b_in;
else
{ carry_out, result_out } = a_in + (~b_in) + 1;
endmodule
RTL 조정을 사용한 최적화 전략
위의 예제의 최적화 전략은 한 번에 하나의 연산만 수행하고 최소 리소스를 사용합니다.
module add_sub ( input a_in, b_in, control_in, output reg result_out, carry_out );
reg tmp_1;
always @*
{ carry_out, result_out } = a_in + tmp_1 + control_in ;
always @ *
if (control_in)
tmp_1 = ~b_in;
else
tmp_1 = b_in;
endmodule
'프로그래밍 언어 > Verilog' 카테고리의 다른 글
| [Verilog 학습] 인코더 (0) | 2022.04.14 |
|---|---|
| [Verilog 학습] 디코더 (0) | 2022.04.13 |
| [Verilog 학습] 멀티플렉서 (0) | 2022.04.11 |
| [Verilog 학습] Verilog 구성 및 조합 설계 2 (0) | 2022.04.10 |
| [Verilog 학습] 다중비트 가산기 및 감산기 (0) | 2022.04.09 |