Verilog重載模塊參數:spa
當一個模塊引用另一個模塊時,高層模塊能夠改變低層模塊用parameter定義的參數值,改變低層模塊的參數值可採用如下兩種方式:code
1)defparam 重定義參數
語法:defparam path_name = value ;
低層模塊的參數能夠經過層次路徑名從新定義,以下例:blog
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。input
2) 實例化時傳遞參數
在這種方法中,實例化時把參數傳遞進去,以下例所示:class
module top ( .....) input....; output....; M1 #( 10 ) U1 (..........); endmodule
在該例中,用#( 10 )修改了上例中的參數para1,當有多個參數時,用逗號隔開,如#( 10 , 5 )test
defparam可綜合性問題:通常狀況下是不可綜合的.
提示:不要使用defparam語句!module
[例1] 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
[例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
建議用此方法!file