HDLBits个人刷题详解合集7-Circuits-Combinational Logic-Multplexers-HDBits题目分析

Mux2to1

Create a one-bit wide, 2-to-1 multiplexer. When sel=0, choose a. When sel=1, choose b.

代码如下:

module top_module(

    input a, b, sel,

    output out );

    assign out = (sel)?b:a;

endmodule

参考答案:

module top_module(

    input a, b, sel,

    output out );

    assign out = (sel&b)| (~sel&a);

endmodule

Mux2to1v

Create a 100-bit wide, 2-to-1 multiplexer. When sel=0, choose a. When sel=1, choose b.

代码如下:

module top_module(

    input [99:0] a, b,

    input sel,

    output [99:0] out );

    assign out = sel?b:a;

endmodule

Mux9to1v

Create a 16-bit wide, 9-to-1 multiplexer. sel=0 chooses a, sel=1 chooses b, etc. For the unused cases (sel=9 to 15), set all output bits to '1'.

我的解决办法:

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'b1111111111111111;// 参考答案:out = '1;

                endcase

            end

endmodule

Mux256to1

Create a 1-bit wide, 256-to-1 multiplexer. The 256 inputs are all packed into a single 256-bit input vector. sel=0 should select in[0], sel=1 selects bits in[1], sel=2 selects bits in[2], etc.

代码如下:

module top_module(

    input [255:0] in,

    input [7:0] sel,

    output out );

    assign out = in[sel];

endmodule

Mux256to1v

Create a 4-bit wide, 256-to-1 multiplexer. The 256 4-bit inputs are all packed into a single 1024-bit input vector. sel=0 should select bits in[3:0], sel=1 selects bits in[7:4], sel=2 selects bits in[11:8], etc.

代码如下:

module top_module(

    input [1023:0] in,

    input [7:0] sel,

    output [3:0] out );

    assign out = in[4*sel+3-:4];//verilog语言中没有这种写法in[(4*sel)+3:(4*sel)]但与前面的写法表示意义相同

endmodule

还有一种清晰明了的写法:

assign out = {in[sel*4+3], in[sel*4+2], in[sel*4+1], in[sel*4+0]};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值