使用 Verilog 的 4Way 解复用器电路
4Way Demultiplexer circuit using Verilog
我正在努力完成我的数字逻辑作业 class。我在网上搜索了资源,但没有多少被证明是有用的。似乎每个人的做法都与我们在 class 中所做的不同。也没有教科书,只有每周的讲义,这本也不是很有用。我已经给我的导师发了电子邮件,但没有回复。所以基本上,这是我最后的希望。
我需要构建一个 4 路解复用器,但是,必须先构建一个 2 路解复用器,然后使用其中三个来创建一个四路解复用器。
这就是我们得到的几乎所有说明。我们展示了如何以相同的方式创建一个 4 路多路复用器 - 首先创建一个 2 路,然后使用它 3 次。所以,我只是修改了我们在那里展示的内容。但是我的输出不太正确。我得到每个输出的 'z'。
"exp0, exp1, exp2, exp3" 是我应该得到的预期输出。
2Way Demux
module demux2way(outA, outB, in, sel);
input in, sel;
output outA, outB;
wire s0, w0, w1;
not(s0, sel);
and(outA, w0, s0, in);
and(outB, w1, sel, in);
endmodule
4way Demux
module demux4way(out0, out1, out2, out3, in, sel0, sel1);
input in, sel0, sel1;
output out0, out1, out2, out3;
wire w0, w1;
demux2way dmx0 (w0, w1, in, sel0);
demux2way dmx1 (w0, sel1, out0, out1);
demux2way dmx2 (w1, sel1, out2, out3);
endmodule
4Way Demux 测试平台
module demux4way_tb();
reg inA, selA, selB;
wire outA, outB, outC, outD;
reg exp0, exp1, exp2, exp3;
initial begin
#0 selA=0; selB=0; inA=0; exp0=0; exp1=0; exp2=0; exp3=0;
#2 selB=1; exp0=0; exp1=0; exp2=0; exp3=0;
#2 selA=1; selB=0; exp0=0; exp1=0; exp2=0; exp3=0;
#2 inA=1; selA=0; exp0=1; exp1=0; exp2=0; exp3=0;
#2 selB=1; exp0=0; exp1=1; exp2=0; exp3=0;
#2 selA = 1; selB=0; exp0=0; exp1=0; exp2=1; exp3=0;
#2 selB=1; exp0=0; exp1=0; exp2=0; exp3=1;
#10 $finish; //End the simulation
end
initial begin
$monitor ("time=%4d: sel0=%b sel1=%b in=%b out0=%b out1=%b
out2=%b out3=%b, exp0=%b exp1=%b exp2=%b exp3=%b",
$time, selA, selB, inA, outA, outB, outC, outD, exp0, exp1, exp2, exp3);
end
demux4way demux01( .sel0(selA), .sel1(selB), .in(inA), .out0(outA), .out1(outB), .out2(outC), .out3(outD));
endmodule
您混淆了 demux4way
模块中端口的顺序。您应该使用您在模块实例化测试台中使用的样式来避免此问题:
module demux4way(out0, out1, out2, out3, in, sel0, sel1);
input in, sel0, sel1;
output out0, out1, out2, out3;
wire w0, w1;
demux2way dmx0 (.outA(w0), .outB(w1), .in(in), .sel(sel0));
demux2way dmx1 (.in(w0), .sel(sel1), .outA(out0), .outB(out1)); // Was .outA(w0), .outB(sel1), .in(out0), .sel(out1)
demux2way dmx2 (.in(w1), .sel(sel1), .outA(out2), .outB(out3)); // Was .outA(w1), .outB(sel1), .in(out2), .sel(out3)
endmodule
另请注意,demux2way
中的电线 w0
和 w1
没有任何作用,应将其移除。
我正在努力完成我的数字逻辑作业 class。我在网上搜索了资源,但没有多少被证明是有用的。似乎每个人的做法都与我们在 class 中所做的不同。也没有教科书,只有每周的讲义,这本也不是很有用。我已经给我的导师发了电子邮件,但没有回复。所以基本上,这是我最后的希望。
我需要构建一个 4 路解复用器,但是,必须先构建一个 2 路解复用器,然后使用其中三个来创建一个四路解复用器。
这就是我们得到的几乎所有说明。我们展示了如何以相同的方式创建一个 4 路多路复用器 - 首先创建一个 2 路,然后使用它 3 次。所以,我只是修改了我们在那里展示的内容。但是我的输出不太正确。我得到每个输出的 'z'。
"exp0, exp1, exp2, exp3" 是我应该得到的预期输出。
2Way Demux
module demux2way(outA, outB, in, sel);
input in, sel;
output outA, outB;
wire s0, w0, w1;
not(s0, sel);
and(outA, w0, s0, in);
and(outB, w1, sel, in);
endmodule
4way Demux
module demux4way(out0, out1, out2, out3, in, sel0, sel1);
input in, sel0, sel1;
output out0, out1, out2, out3;
wire w0, w1;
demux2way dmx0 (w0, w1, in, sel0);
demux2way dmx1 (w0, sel1, out0, out1);
demux2way dmx2 (w1, sel1, out2, out3);
endmodule
4Way Demux 测试平台
module demux4way_tb();
reg inA, selA, selB;
wire outA, outB, outC, outD;
reg exp0, exp1, exp2, exp3;
initial begin
#0 selA=0; selB=0; inA=0; exp0=0; exp1=0; exp2=0; exp3=0;
#2 selB=1; exp0=0; exp1=0; exp2=0; exp3=0;
#2 selA=1; selB=0; exp0=0; exp1=0; exp2=0; exp3=0;
#2 inA=1; selA=0; exp0=1; exp1=0; exp2=0; exp3=0;
#2 selB=1; exp0=0; exp1=1; exp2=0; exp3=0;
#2 selA = 1; selB=0; exp0=0; exp1=0; exp2=1; exp3=0;
#2 selB=1; exp0=0; exp1=0; exp2=0; exp3=1;
#10 $finish; //End the simulation
end
initial begin
$monitor ("time=%4d: sel0=%b sel1=%b in=%b out0=%b out1=%b
out2=%b out3=%b, exp0=%b exp1=%b exp2=%b exp3=%b",
$time, selA, selB, inA, outA, outB, outC, outD, exp0, exp1, exp2, exp3);
end
demux4way demux01( .sel0(selA), .sel1(selB), .in(inA), .out0(outA), .out1(outB), .out2(outC), .out3(outD));
endmodule
您混淆了 demux4way
模块中端口的顺序。您应该使用您在模块实例化测试台中使用的样式来避免此问题:
module demux4way(out0, out1, out2, out3, in, sel0, sel1);
input in, sel0, sel1;
output out0, out1, out2, out3;
wire w0, w1;
demux2way dmx0 (.outA(w0), .outB(w1), .in(in), .sel(sel0));
demux2way dmx1 (.in(w0), .sel(sel1), .outA(out0), .outB(out1)); // Was .outA(w0), .outB(sel1), .in(out0), .sel(out1)
demux2way dmx2 (.in(w1), .sel(sel1), .outA(out2), .outB(out3)); // Was .outA(w1), .outB(sel1), .in(out2), .sel(out3)
endmodule
另请注意,demux2way
中的电线 w0
和 w1
没有任何作用,应将其移除。