2015-11-02 79 views
1

你好Verilog的專家,初始化優先用Verilog

在下面的Verilog代碼,我可以100%是top.test.p將系統初始化爲200?

或者我會在變量初始化和初始語句之間進行競爭嗎?換句話說,一些模擬器會給我top.test.p == 100和其他top.test.p == 200?任何初始或總是過程開始之前

由於

module test; 
     parameter real P = 1e3; 
     real P=p; 
    endmodule  

    module top; 
     test #(100) test(); 
     initial 
     begin 
     // override the variable initialization (race condition????) 
     test.p = 200; 
     end 
    endmodule 
+0

你的意思是_parameter_ by parameter real P = 1e3'?我猜它必須是'p'而不是'P'(可能是錯字),它也必須是可變的,而不是參數。參數不能在程序塊中更改,它們只能在實例化或'defparam'時被覆蓋。 – sharvil111

回答

3

甲SystemVerilog的兼容仿真器必須執行變量聲明的初始化。所以top.test.p應爲200

6.8節說

設置一個靜態變量的初始值作爲變量 聲明(包括靜態類成員)的一部分,之前的任何 初始或將出現總是啓動程序(關於 的變量初始化,請參閱6.21和10.5,其中包含靜態和自動生命期)。

該命令在Verilog中未定義。