2015-04-04 167 views
1

我在初始塊中取了一個計數器變量'n',我計算了一些值。計數後我想用這個作爲一些'reg a'的寬度。 所以我可以聲明可以爲REG寄存器[n:0] 當我嘗試這樣做它給出了一個錯誤r是不恆定....有沒有什麼辦法來解決這個問題我們如何用變量值定義寄存器寬度

回答

3

不,你不能做那。 Verilog描述意味着被翻譯成某種電子電路,並且它們不能動態改變它們總線的位數。

所有你能做的就是定義a與將要使用的最大寬度,然後只需使用的比特數相應與n

你可以做的另一件事情的價值(但我認爲它的這裏不使用)是定義一個帶參數化寬度的reg。然而,這與定義具有可變寬度的reg不同,因爲在編譯時必須知道參數的值。

+0

如果我將n值從一個模塊傳遞給另一個模塊,那該怎麼辦?因爲我使用'n'來指定我想要訪問的內存的寬度。 – 2015-04-04 16:04:28

+0

'n'會有最大值,所以讓你的RAM達到最大值。當你進行訪問時,根據'n'的值包含邏輯來丟棄你不想要的RAM。只要認爲你所描述的內容是用硅製成的,所以它是不可改變的。無論您在描述中做什麼需要動態重新配置,都沒有(至少尚未)被允許。 – 2015-04-04 16:08:26

+0

我明白你的觀點,並且同樣適用。但在大多數情況下,我最終會浪費許多地址行。有沒有其他的替代方案。 – 2015-04-04 16:32:54