为什么我的多路复用器没有在Verilog中产生输出?

时间:2011-09-22 03:25:38

标签: verilog

我已经写过我认为的工作MUX,但我的输出固执地保持在高阻抗状态。有人可以给我指导吗?

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 个答案:

答案 0 :(得分:2)

这不应该编译,因为范围表达式不是常量。

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

试试这个。

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