组合逻辑电路2:多路复用器
1、2对1多路选择器
拓展:
多路选择器(Multiplexer)简称多路器,它是一个多输入、单输出的组合逻辑电路,在数字系统中有着广泛的应用。它可以根据地址码(选择码)的不同,从多个输入数据流中选取一个,让其输出到公共的输出端。
练习:
创建一个 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对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 对 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'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'hffff;
endcase
end
endmodule
验证结果:
4、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 );
assign out = in[sel];
endmodule
验证结果:
5、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 );
assign out = {in[4*sel+3],in[4*sel+2],in[4*sel+1],in[4*sel]};
endmodule
验证结果: