Verilog 模塊參數重定義(轉)

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

相關文章
相關標籤/搜索