关注 望森FPGA 查看更多FPGA资讯
这是望森的第 9 期分享
作者 | 望森
来源 | 望森FPGA
目录
1 2-to-1 multiplexer | 2 对 1 多路复用器
2 2-to-1 bus multiplexer | 2 对 1 总线多路复用器
3 9-to-1 multiplexer | 9 对 1 多路复用器
4 256-to-1 multiplexer | 256 对 1 多路复用器
5 256-to-1 4-bit multiplexer | 256 对 1 4 位多路复用器
本文中的代码都能够正常运行,请放心食用😋~
练习的官方网站是:https://hdlbits.01xz.net/
注:作者将每个练习的知识点都放在了题目和答案之后
1 2-to-1 multiplexer | 2 对 1 多路复用器
题目:
创建一个 1 位宽、2 对 1 的多路复用器。当 sel=0 时,选择 a。当 sel=1 时,选择 b。
答案:
我的答案:
module top_module(
input a, b, sel,
output out );
assign out = sel ? b : a;
endmodule
2 2-to-1 bus multiplexer | 2 对 1 总线多路复用器
题目:
创建一个 100 位宽、2 选 1 的多路复用器。当 sel=0 时,选择 a。当 sel=1 时,选择 b。
答案:
module top_module(
input [99:0] a, b,
input sel,
output [99:0] out );
assign out = sel ? b : a;
endmodule
3 9-to-1 multiplexer | 9 对 1 多路复用器
题目:
创建一个 16 位宽、9 选 1 的多路复用器。sel=0 选择 a,sel=1 选择 b,等等。对于未使用的情况(sel=9 到 15),将所有输出位设置为“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'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'b1111_1111_1111_1111;
endcase
end
endmodule
参考答案:
module top_module (
input [15:0] a,
input [15:0] b,
input [15:0] c,
input [15:0] d,
input [15:0] e,
input [15:0] f,
input [15:0] g,
input [15:0] h,
input [15:0] i,
input [3:0] sel,
output logic [15:0] out
);
// Case statements can only be used inside procedural blocks (always block)
// This is a combinational circuit, so use a combinational always @(*) block.
always @(*) begin
out = '1; // '1 is a special literal syntax for a number with all bits set to 1.
// '0, 'x, and 'z are also valid.
// I prefer to assign a default value to 'out' instead of using a
// default case.
case (sel)
4'h0: out = a;
4'h1: out = b;
4'h2: out = c;
4'h3: out = d;
4'h4: out = e;
4'h5: out = f;
4'h6: out = g;
4'h7: out = h;
4'h8: out = i;
endcase
end
endmodule
4 256-to-1 multiplexer | 256 对 1 多路复用器
题目:
创建一个 1 位宽、256 对 1 的多路复用器。256 个输入全部打包成一个 256 位输入向量。sel=0 应选择 in[0],sel=1 选择 in[1] 中的位,sel=2 选择 in[2] 中的位,等等。
答案:
module top_module (
input [255:0] in,
input [7:0] sel,
output out
);
// Select one bit from vector in[]. The bit being selected can be variable.
assign out = in[sel];
endmodule
5 256-to-1 4-bit multiplexer | 256 对 1 4 位多路复用器
题目:
创建一个 4 位宽、256 对 1 的多路复用器。256 个 4 位输入全部打包成一个 1024 位输入向量。sel=0 应选择 [3:0] 中的位,sel=1 选择 [7:4] 中的位,sel=2 选择 [11:8] 中的位,等等。
答案:
module top_module (
input [1023:0] in,
input [7:0] sel,
output [3:0] out
);
// We can't part-select multiple bits without an error, but we can select one bit at a time,
// four times, then concatenate them together.
assign out = {in[sel*4+3], in[sel*4+2], in[sel*4+1], in[sel*4+0]};
// Alternatively, "indexed vector part select" works better, but has an unfamiliar syntax:
// assign out = in[sel*4 +: 4]; // Select starting at index "sel*4", then select a total width of 4 bits with increasing (+:) index number.
// assign out = in[sel*4+3 -: 4]; // Select starting at index "sel*4+3", then select a total width of 4 bits with decreasing (-:) index number.
// Note: The width (4 in this case) must be constant.
endmodule
- END -
公z号/CSDN搜索【望森FPGA】,查看更多FPGA资讯~
相关推荐文章,点击跳转:
望森FPGA的HDLBits专栏