2011-09-22 71 views
0

我写过什么,我认为将是一个工作的MUX,但我的输出固执地停留在高阻抗。有人可以请我提供指导吗?为什么我的多路复用器不能在Verilog中产生输出?

module mux_in #(parameter WIDTH = 1, parameter LOG_CHOICES = 1) 
(
    input [LOG_CHOICES - 1 : 0] choice, 
    input [(1 << LOG_CHOICES) * WIDTH - 1 : 0] data_i, 
    output [WIDTH - 1 : 0] data_o 
); 
    assign data_o = data_i[WIDTH * choice + WIDTH - 1 : WIDTH * choice]; 
endmodule 

这里是我的(坏)输出:

data_i: 11111010101111100001001100100010 
data_o: zzzzzzzz 
Choice 0: (Expected 34) Output: z 
Choice 1: (Expected 19) Output: z 
Choice 2: (Expected 190) Output: z 
Choice 3: (Expected 250) Output: z 
+1

这是什么模拟器?你可以发布测试平台吗?您的输出与默认参数不匹配。 – 2011-09-22 03:57:56

+0

如果您编辑问题以包含模块实例,那将会很有帮助,因此我们可以看到您已连接的端口以及您为模块参数指定了哪些值。 –

回答

2

这不应该编译,因为范围表达式不恒定。

assign data_o = data_i[WIDTH * choice + WIDTH - 1 : WIDTH * choice]; 

试试这个。

assign data_o = data_i[WIDTH * choice + WIDTH - 1 -: WIDTH]; 
相关问题