【问题标题】:I am doing a mux 4:1 on verilog, but the output is not the expeted我在 verilog 上做一个多路复用器 4:1,但输出不是 expeted
【发布时间】:2016-08-24 16:53:46
【问题描述】:

我在互联网上看到了一些关于 verilog 上 mux 4:1 的示例。我已经尝试过做某事,但输出不是那么快。这是来源:

module mux41 (a, b, c, d,select,z);

input a,b,c,d;
input [1:0]select;
output reg z;

always@(select )
begin
case (select)
    2'b00: assign z=a;
    2'b01: assign z=b;
    2'b10: assign z=c;
    2'b11: assign z=d;
endcase
end
endmodule

这是测试台:

module mux41_tb;

reg at,bt,ct,dt;
reg [1:0] selectt;
wire zt;

mux41   test(.a(at),.b(bt),.c(ct),.d(dt),.select(selectt),
            .z(zt));

initial
begin
     $monitor ("a=%d",at,"b=%b",bt,"c=%b",ct,
                    "d=%b","select=%b",selectt,"z=%z",zt);

    selectt =2'b00;
    #5
    selectt =2'b01;
    #5
    selectt =2'b10;
    #5
    selectt =2'b11;
    #5;

end

endmodule

但输出如下:

我的问题是我应该在两个代码(源代码和测试平台)中找到什么机会。

真诚地, 宁。

【问题讨论】:

  • 您是否使用板上的物理开关来选择多路复用器?如果是这样,您可能会受到开关弹跳引起的故障的影响。如果是这种情况,您需要添加模拟或数字去抖动器。
  • 嗨 russell.. 并非如此.. 我只是想在 verilog 中模拟一个简单的多路复用器 IC(多路复用器 4:1)。
  • 仅供参考,您不应在 always 块内使用 assign

标签: verilog mux


【解决方案1】:

你得到了

a=xb=xc=x

因为你从来没有给 a、b 或 c 任何值。例如,您将z 分配给a,但a 没有价值,因为at 没有价值,所以您只是得到x。

至于

d = 0111...

因为你的监控线

$monitor ("a=%d",at,"b=%b",bt,"c=%b",ct,
                "d=%b","select=%b",selectt,"z=%z",zt);

你忘了 dt

$monitor ("a=%d",at,"b=%b",bt,"c=%b",ct,
                "d=%b",dt,"select=%b",selectt,"z=%z",zt);

【讨论】:

  • 谢谢你投反对票。我已经改进了测试平台,现在这是新的输出:(查看我帖子的更新)
  • 太棒了,现在给at,bt,ct,dt,和selectt
  • Downvote 但我想我正在给 { selectt } 赋值:selectt = 2'b00;选择 2'b01,以此类推。
  • 是的,否决票。非常感谢你。哇,我终于看到了我的问题所在。请看更新。
  • 抱歉这个问题。可以联系你吗?
猜你喜欢
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多