Почему мой мультиплексор не производит вывод в Verilog? - PullRequest
0 голосов
/ 22 сентября 2011

Я написал то, что я мысль будет рабочим 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 Ответ

2 голосов
/ 22 сентября 2011

Это не должно компилироваться, потому что выражение диапазона не является константой.

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

Попробуйте вместо этого.

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