2011-09-22 72 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]; 
相關問題