2013-12-10 33 views
0

我寫了兩個verilog模塊。第一個名爲topmodule.v,第二個是tx.v.模塊topmodule.v將參數數據[31:0]傳遞給tx.v.我想從數據[31:0]中獲取變量Rmax和Cmax。之後,我想讓Rmax和Cmax成爲公交車的寬度。此外,我想定義一個稱爲Mat的reg矩陣,其維數爲Cmax-x-Rmax。我在代碼的第6行收到錯誤,「範圍必須以常量表達式爲界」。請幫我解決這個問題。代碼如下。Verilog:傳遞參數

tx (data, output) 
input [31:0] data; 
reg [15:0] Rmax, Cmax; 
assign Rmax [15:0] = data [31:16]; 
assign Cmax [15:0] = data [15:0]; 
reg [Rmax-1:0] Matrix [0:Cmax-1]; 

回答

2

的錯誤意味着差不多就是它說,你不能有一個可變大小公共汽車或數組。

聲明你的矩陣是您需要的最大尺寸,如果你想使用一個較小的一個,那麼就使用它的一個子部分,同時保留其餘的空缺。

請記住,總線的寬度是物理對象,它們在電路運行時不能改變,只能在合成期間改變。

0

如果你真的想這些是參數,然後使用:

module tx #(parameter DATA=32'h00000000) (
    // inputs and outputs here 
); 

    reg [DATA[31:16]-1:0] Matrix [0:DATA[15:0]-1]; 

不過,我真的不知道你正在試圖完成的任務。顯示更多僞代碼並獲得更有用的答案。