跳轉到

Multiplexers

2-to-1 multiplexer

原題:2-to-1 multiplexer

可以用三元運算子簡潔地寫出 multiplexer。

Verilog
module top_module( 
    input a, b, sel,
    output out ); 
    assign out = sel? b: a;
endmodule

2-to-1 bus multiplexer

原題:2-to-1 bus multiplexer

和前一題類似,可以用三元運算子簡潔地寫出 vector 的 multiplexer。

Verilog
module top_module( 
    input [99:0] a, b,
    input sel,
    output [99:0] out );
    assign out = sel ? b : a;
endmodule

9-to-1 multiplexer

原題:9-to-1 multiplexer

可以用case 來實現9-to-1 multiplexer。

Verilog
module top_module( 
    input [15:0] a, b, c, d, e, f, g, h, i,
    input [3:0] sel,
    output [15:0] out );
    always@(*)begin
        case(sel)
            4'b0000: out = a;
            4'b0001: out = b;
            4'b0010: out = c;
            4'b0011: out = d;
            4'b0100: out = e;
            4'b0101: out = f;
            4'b0110: out = g;
            4'b0111: out = h;
            4'b1000: out = i;
            default: out = {16{1'b1}};
        endcase
    end
endmodule

256-to-1 multiplexer

原題:256-to-1 multiplexer

講述sel也可以放在index的位置。

Verilog
module top_module( 
    input [255:0] in,
    input [7:0] sel,
    output out );
    assign out = in[sel];
endmodule

256-to-1 4-bit multiplexer

原題:256-to-1 4-bit multiplexer

題目講說assign out = in[4*sel+3 :4*sel];會編不過,所以可以改寫成assign out = in[4*sel +:4];,從4*sel的地方往上取4位。

Verilog
module top_module( 
    input [1023:0] in,
    input [7:0] sel,
    output [3:0] out );
    assign out = in[4*sel +:4];
endmodule