引言
采用parameter可以讓程式變得可維護性,是以在verlog中,盡量在有資料可能發生變動的地方,設定為parameter,以免以後又從頭開始更改。
parameter經常用于定義資料位寬,定義時間延遲,在子產品和執行個體引用時,可以通過參數傳遞,改變被引用的子產品。是以我們盡量把所有的可能變動的參數設定在頂層,一眼明了,友善日後維護。
端口參數與子產品内部參數
本module内有效的定義,可用于參數傳遞;
如果在子產品内部定義時無法進行參數傳遞,
參數傳遞
參數傳遞經常用于頂層的參數傳遞給子子產品,這樣我們隻需要關注頂層實體的内容,把子子產品的内容當做一個黑箱子即可,這也是非常實用的。
可以看到參數傳遞和例化是非常繼續相似的,
頂層子產品名# (
.子子產品參數( 頂層參數)
) 子子產品名(
子端口1(頂層端口1)
子端口2(頂層端口2)
。
。
子端口n(頂層端口n)
);
衆說parameter、define、localparam的差別
`define: 作用 -> 常用于定義常量可以跨子產品、跨檔案;
範圍 -> 整個工程;
parameter: 作用 -> 常用于子產品間參數傳遞;
範圍 -> 本module内有效的定義;
localparam 作用 -> 常用于狀态機的參數定義;
範圍 -> 本module内有效的定義,不可用于參數傳遞;
localparam cannot be used within the module port parameter list.
defparam
defparam這個單獨拿出來說一下,其實這個參數,個人覺得意義不大,因為你用parameter參數執行個體化就可以很好的解決問題,defparam用于重定義參數的數,可以通過
defparam 頂層.子子產品名1.子子產品名2=XXX
這樣的文法格式更改,進而實作專門針對某一個子子產品更改,這樣有助于例化了多個相同的子子產品,但我隻更改一個子子產品的問題。!
我們來一起看看官方文檔IEEE verilog 2005
defparam的文法我們就去親自查閱官方文法!這樣才能有收貨。
這段說了,defparam适用于改變指定層次子產品下的參數,不影響其他子產品的參數。
這段話也再次說明了,即使是使用相同的子子產品執行個體化生成的子產品,也不會受影響,defparam隻針對指定路徑下的參數更改。
/------------------------------------------------------------------------------------------------------------------------------------------------------/
defparam目前所有綜合工具都不支援綜合,是以僅僅用于仿真。