verilog中defparam的用法及 的用法

2021-10-25 21:03:10 字數 1661 閱讀 9681

有機會看下defparam的語法了:如下:

當乙個模組引用另外乙個模組時,高層模組可以改變低層模組用parameter定義的引數值,改變低層模組的引數值可採用以下兩種方式:

1)defparam 重定義引數

語法:defparam path_name = value ;

低層模組的引數可以通過層次路徑名重新定義,如下例:

module top ( .....)

input....;

output....;

defparam u1 . para1 = 10 ;

m1 u1 (..........);

endmodule

module m1(....);

parameter para1 = 5 ;

input...;

output...;

......

endmodule

在上例中,模組m1引數 para1 的預設值為5,而模組top例項了m1後將引數的值改為10。

2) 例項化時傳遞引數

在這種方法中,例項化時把引數傳遞進去,如下例所示:

module top ( .....)

input....;

output....;

m1 #( 10 ) u1 (..........);

endmodule

在該例中,用#( 10 )修改了上例中的引數para1,當有多個引數時,用逗號隔開,如#( 10 , 5 ,3 )傳遞了3個引數值。

模組引數的方法使得模組的重用性更強,當需要在同乙個設計中多次例項化同樣的模組,只是引數值不同時,就可以採用模組引數的方式,而不必只因為引數不同產生了多個檔案。

引用:利用defparam定義引數宣告語句!

[例]module mod ( out, ina, inb);

…parameter cycle = 8, real_constant = 2.039,

file = "/user1/jmdong/design/mem_file.dat";

…endmodule

module test;

…mod mk(out,ina,inb); // 對模組mod的例項引用

defparam mk.cycle = 6, mk.file = "../my_mem.dat"; // 引數的傳遞

…endmodule

模組例項引用時引數的傳遞——方法之二:利用特殊符號"#"

被引用模組名 # (引數1,引數2,…)例化模組名(埠列表);

[例]module mod ( out, ina, inb);

…parameter cycle = 8, real_constant = 2.039,

file = "/user1/jmdong/design/mem_file.dat";

…endmodule

module test;

…mod # (5, 3.20, "../my_mem.dat") mk(out,ina,inb); // 對模組mod的例項引用

…endmodule

被引用模組

引數的傳遞必須與被引用模組中的引數一一對應!

建議用此方法!

#的用法:1)可用作引數的傳遞

2)用於時序**中的延時

Verilog中的函式

verilog中的函式 verilog hdl與大多數可程式語言一樣,將使用率很高的 按照軟體工程的思想,寫成函式,這樣,該函式可以被多次呼叫。verilog中函式常用語三種情況 verilog中的函式與c語言中的函式的主要不同之處是 在verilog中,呼叫函式時,需要將乙個或則多個自變數傳給函式...

verilog中的task用法

定義乙個任務。task task demo 任務定義結構開頭,命名為 task demo input 7 0 x,y 輸入埠說明 output 7 0 tmp 輸出埠說明 if x y 給出任務定義的描述語句 tmp x else tmp y endtask 上述 定義了乙個名為 task demo...

Verilog中generate的用法

一 generate verilog 2001新增了generate迴圈,允許產生module和primitive的多個例項化,同時也可以產生多個variable,net,task,function,continous assignment,initial和always。在generate語句中可以...