728x90
멀티플렉서란?
- 멀티플렉서는 2^n개의 입력을 받아 그들 중 하나를 선택하여 출력으로 연결해주는 조합회로
- 데이터 선택기라도고 하며 간단히 MUX라고 부름.
- 한개의 입력을 받아서 2^n개의 출력 중 하나의 출력에 회로를 디멀티플래서 또는 DEMUX라고 함.
- 멀티플렉서나 디멀티플렉서는 여러 개의 데이터 중에서 하나를 선택하기 위해 제어신호가 필요함.
회로(8비트 4-to-1 Multiplexer)
진리표(8비트 4-to-1 Multiplexer)
sel[1] | sel[0] | out |
0 | 0 | a |
0 | 1 | b |
1 | 0 | c |
1 | 1 | d |
verilog 코드
// case문을 이용한 4x1 MUX 설계
module mux(a, b, c, d, sel, out);
input [7:0] a, b, c, d;
input [1:0] sel;
output reg [7:0] out;
always@(a or b or c or d or sel)
case(sel)
0 : out = a; // 2'b00
1 : out = b; // 2'b01
2 : out = c; // 2'b10
3 : out = d; // 2'b11
endcase
endmodule
테스트 벤치
// 4x1 MUX tb
module tb_mux;
reg [7:0] a, b, c, d;
reg [1:0] sel;
wire [7:0] out;
// name porting
mux U0(.a(a), .b(b), .c(c), .d(d), .sel(sel), .out(out));
initial begin
// EDA playground waveform
$dumpfile("dump.vcd");
$dumpvars(0);
a = 8'h00; b = 8'h01; c = 8'h02; d = 8'h03; sel = 2'b00; #100;
a = 8'h00; b = 8'h01; c = 8'h02; d = 8'h03; sel = 2'b01; #100;
a = 8'h00; b = 8'h01; c = 8'h02; d = 8'h03; sel = 2'b10; #100;
a = 8'h00; b = 8'h01; c = 8'h02; d = 8'h03; sel = 2'b11; #100;
end
endmodule
Waveform
- sel의 값이 2'b00일 때 a 값 선택(2'b00000000 = 8'h00)
- sel의 값이 2'b01일 때 b 값 선택(2'b00000001 = 8'h01)
- sel의 값이 2'b10일 때 c 값 선택(2'b00000010 = 8'h02)
- sel의 값이 2'b11일 때 d 값 선택(2'b00000011 = 8'h03)
'verilog > 실습' 카테고리의 다른 글
[Verilog] 조합회로(Combinational logic) : 인코더(Encoder)와 디코더(Decoder) (0) | 2025.03.04 |
---|---|
[Verilog] 순차 회로(Sequential logic) : D-플립플롭(Flip-Flop) (0) | 2025.03.04 |
[Verilog] 조합회로(Combinational logic) : ALU(산술 논리 장치) (0) | 2025.03.04 |
[Verilog] 조합회로(Combinational logic) : 전가산기(Full Adder) (0) | 2025.03.03 |