본문 바로가기
개발 Tools/Verilog HDL

Verilog HDL Multiplexor (멀티플렉서, mux, 예제)

by 전컴반 2022. 2. 16.
반응형

여러 개의 신호 중에 하나를 선택하여 출력으로 내보낸다. sel 신호는 4개의 입력 중에 하나를 선택하여 보낸다.

아래 예시의 경우 sel [1:0] == 2'b01 이면 y = b가 된다.

 

 

verilog로 구현해보자, 회로만 보고 코드를 짜는 연습을 하면 좋은 거 같다. 

 

module mux(a, b, c, d, sel, y);
    input [15:0] a, b, c, d;
    input [1:0]sel;
    output [15:0]y;
    
    reg [15:0]y;
    
    always @(*) 
    case(sel)
    2'b00 : y = a;
    2'b01 : y = b;
    2'b10 : y = c;
    2'b11 : y = d;
    endcase
endmodule

 

입력은 a, b, c, d, sel이고 출력은 y값으로 정해져 있다. always구문을 사용하기 때문에 reg로 선언했다. 

*의 의미는 모든 입력에 대해서 동작한다는 의미다.

test bench를 보자

 

module tb_mux;
    wire [15:0] y;
    reg [15:0] a, b, c, d;
    reg [2:0] sel; // for문을 이용하기 위해
    
    mux u0 (.a(a), .b(b), .c(c), .d(d), .y(y), .sel(sel));
    
    initial begin
    a = 111;
    b = 222; 
    c = 333; 
    d = 444;
    for (sel = 3'b000 ; sel < 3'b011 ; sel = sel+1)
    #10; 
    end
    
endmodule

 

출력은 wire로 선언하고 입력은 reg로 선언한다. 이때 sel은 DUT에선 [1:0]인데 test bench에선 왜 [2:0]이냐면 for문을 돌려야 하기 때문에 1bit를 더 줬다. 만약 그대로 사용하면 2'b11 이 입력으로 가할 수 없다.

 

wave 폼을 보면 잘 들어간 걸 볼 수 있다. sel값에 따라 원하는 출력이 들어갔다.

 

반응형

댓글