HDLBits学习------Problem 60~64

112 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 ​

 参考链接:HDLBits导学


Problem 60 : 2-to-1 multiplexer (Mux2to1)

问题: 本题中需要实现一个 2 选 1 选择器,sel 信号作为选择信号,当 sel = 1 时选择 b,反之选择 a

解决:

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

endmodule


Problem 61 : 2-to-1 bus multiplexer (Mux2to1v)

问题: 本题中需要实现一个 2 选 1 选择器,sel 信号作为选择信号,当 sel = 1 时选择 b,反之选择 a

解决:

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

endmodule


Problem 62 : 9-to-1 multiplexer (Mux9to1v)

问题: 本题中需要实现一个 9 选 1 选择器,sel 信号作为选择信号,当 sel = 0 时选择 a,sel = 1 时选择 b,以此类推。sel 信号位宽为 4bit,当 sel 大于 8 时,输出 16'hffff

解决:

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'd0:out = a;
		4'd1:out = b;
		4'd2:out = c;
		4'd3:out = d;
		4'd4:out = e;
		4'd5:out = f;
		4'd6:out = g;
		4'd7:out = h;
		4'd8:out = i;
		default:out = 16'hffff;
	endcase
end

endmodule


Problem 63 : 256-to-1 multiplexer (Mux256to1)

问题: 本题中需要实现一个 256 选 1 选择器,sel 信号作为选择信号,当 sel = 0 时选择 in[0],sel = 1 时选择 in[1],以此类推

解决:

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

assign out = in[sel];

//参考大佬写法
//assign out = in >> sel;

endmodule


Problem 64 : 256-to-1 4-bit multiplexer (Mux256to1v)

问题: 本题中需要实现一个 256 选 1 选择器,sel 信号作为选择信号,当 sel = 0 时选择 in[3:0],sel = 1 时选择 in[7:4],以此类推。同上一题的区别在于,位宽从 1 位变到了 4 位

解决:

module top_module( 
    input [1023:0] in,
    input [7:0] sel,
    output [3:0] out );

    //参考大佬写法
    assign out = {in[sel*4+3], in[sel*4+2], in[sel*4+1], in[sel*4+0]};

    //用上一题的写法会报错
    //assign out = in[(sel+1)*4:sel*4];
endmodule