为啥 4 位多路复用器测试台代码给出 x?

Posted

技术标签:

【中文标题】为啥 4 位多路复用器测试台代码给出 x?【英文标题】:Why does 4-bit mux test bench code give x?为什么 4 位多路复用器测试台代码给出 x? 【发布时间】:2016-12-14 20:28:29 【问题描述】:

我不知道为什么它不起作用。我在edaplayground 上运行了一个模拟,每次选择更改为 0 时,我都会在输出中得到一个“x”。不过,当 sel 为“1”时,我正确地得到了“1”。

代码:

 module mux8_2(input [3:0]a,[3:0]b,sel,output [3:0]out);   
 assign out=(sel)?a:b;  
 endmodule

和测试台:

 module mux8_2_tb; 

 reg [3:0]A;  

 reg [3:0]B;  

 reg SEL;  

 wire [3:0]OUT;  

 mux8_2 UUT(A,B,SEL,OUT);  

 initial  
  begin  

 $dumpfile("dump.vcd");  

 $dumpvars(1);  

 A=4'b1; B=4'b0; SEL=1'b1;

 #1 SEL=1'b0;  
 #1 SEL=1'b1;  
 #1 SEL=1'b0;  
 #1 SEL=1'b1;  
 #1 SEL=1'b0;  
 #1 SEL=1'b1;  
 #1;
 end

 endmodule

【问题讨论】:

【参考方案1】:

我无法重现您的结果; OUT 信号一直为我所知。

但是,我确实收到了编译警告:

The following 1-bit expression is connected to 4-bit port "sel" of module 
  "mux8_2", instance "UUT"

这可以解决:

module mux8_2(input [3:0]a,[3:0]b, input sel,output [3:0]out);   

在您的代码中,sel 继承了前一个信号 ([3:0]b) 的宽度。您的代码相当于:

module mux8_2(input [3:0]a,[3:0]b,[3:0]sel,output [3:0]out);   

sel 之前添加另一个input 关键字会强制它使用1 位的默认宽度。

【讨论】:

以上是关于为啥 4 位多路复用器测试台代码给出 x?的主要内容,如果未能解决你的问题,请参考以下文章

请不要再说NIO和多路复用IO是同一个东西了(内含BIONIO多路复用NettyAIO案例测试代码)

Verilog 没有给出预期的结果

计算机网络6--多路复用技术

REDIS01_单线程的概述多线程的引入概述IO多路复用如何开启多线程

为啥 HTTP/2 多路复用虽然 tcp 做同样的事情?

IO多路复用