参考链接: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