淺談veriloghdl中parameter的用法

最近有朋友在學習verilog的時候遇到了一些關於parameter語法知識問題,在找尋網絡上發現各博主講述的大多基於存語法,本文在語法上又添加了一部分相關仿真內容共大家學習探討,仿真環境為modelsim10.4。

1.parameter參數使用

parameter參數定義方式:

淺談veriloghdl中parameter的用法

parameter 參數定義可以放在接口定義前和模塊內部。

parameter參數定義放在接口處格式:

淺談veriloghdl中parameter的用法

可以看到,模塊名後參數定義的具體格式。

事例1:

定義模塊:

淺談veriloghdl中parameter的用法

調用模塊:

淺談veriloghdl中parameter的用法

仿真結果:

淺談veriloghdl中parameter的用法

可以看到,最終的parameter_1,parameter_2,parameter_3的參數改變成了調用時賦予的值,而不是定義時的值。同時可以看到在調用的時候幾個參數的名字不是按照定義時的順序,這是因為在點對點時可以不用按照順序調用,在調用的時候,如國並沒有給與參數值,在實際的運用當中,模塊裡就會默認的認為是定義的值。

事例2:

定義模塊:

淺談veriloghdl中parameter的用法

調用模塊:

淺談veriloghdl中parameter的用法

仿真結果:

淺談veriloghdl中parameter的用法

可以看到在調用的時候,並沒有給parameter_2賦值,而仿真呈現的結果默認是parameter_2定義時的值。

除了點對點的調用賦值外,也可以使用直接給值。

事例3

定義模塊:

淺談veriloghdl中parameter的用法

調用模塊:

淺談veriloghdl中parameter的用法

仿真結果:

淺談veriloghdl中parameter的用法

可以看到最後仿真的parameter結果嚴格按照賦值的順序為基準。此種方式可讀性與點對點相比要弱一些。

除了將parameter定義在接口處,也可以定義在模塊內部,除了作用域不同,完全一樣。

事例4

定義模塊:

淺談veriloghdl中parameter的用法

調用模塊:

淺談veriloghdl中parameter的用法

仿真結果:

淺談veriloghdl中parameter的用法

可以看到parameter_1, parameter_2, parameter_3的值嚴格的按照調用時的賦值順序。其他的賦值方式不在累述。

2.defparam使用

defparam可以直接在上層模塊去直接修改下層模塊的參數,從而實現參數化調用,但是參數需要使用絕對路徑來指定。格式如下:

事例5

定義模塊:

淺談veriloghdl中parameter的用法

調用模塊:

淺談veriloghdl中parameter的用法

仿真結果:

淺談veriloghdl中parameter的用法

可以看到parameter_2的值根據調用模塊的defparam語法的改變而改變。

3.parameter與`define的區別

define和paramneterr都可以用於完成文本替換的功能,但其存在本質上的不同,前者是編譯之前就預處理,而後者是在正常編譯過程中完成替換的。此外,` define和parameter存在下列兩點不同之處。

(1)作用域不同.

parameter作用於聲明的那個文件;`define從編譯器讀到這條指令開始到編譯結束都有效,或者遇到undef命令使之失效,可以應用於整個工程。如果要讓parameter作用於整個項目,可以將如下聲明寫於單獨文件,並用include讓每個文件都包含聲明文件。

(2)傳遞功能不同

parameter可以用作模塊例化時的參數傳遞,實現參數化調用;define語句則沒有此作用。`define語句可以定義表達式,而parameter只能用於定義變量。例如:

define可以實現此種語法,而parameter則不可以。

4.localparam介紹

localparam其作用域僅可以用作所定義的module內使用,不可以用作參數傳遞使用。

原文鏈接:

https://blog.csdn.net/qq_35553265/article/details/103025231


分享到:


相關文章: