verilog中的初始化优先级

verilog中的初始化优先级,verilog,system-verilog,Verilog,System 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;

大家好,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

符合SystemVerilog的模拟器必须在任何初始或始终过程开始之前执行变量声明初始化。所以top.test.p应该是200

第6.8节说

将静态变量的初始值设置为变量的一部分 声明(包括静态类成员)应在任何 初始或始终启动程序(另请参见第6.21节和第10.5节 具有静态和自动生命周期的变量初始化)

此顺序在Verilog中未定义。

您是指参数
参数real p=1e3
?我猜它一定是
p
而不是
p
(可能是打字错误),而且它必须是变量,而不是参数。不能在程序块中更改参数,只能在实例化时或通过
defparam
对其进行覆盖。