我已经写过我认为的工作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
答案 0 :(得分:2)
这不应该编译,因为范围表达式不是常量。
assign data_o = data_i[WIDTH * choice + WIDTH - 1 : WIDTH * choice];
试试这个。
assign data_o = data_i[WIDTH * choice + WIDTH - 1 -: WIDTH];