verilog中的初始化优先级
大家好,verilog专家 在下面的verilog代码中,我是否可以100%保证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;
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
对其进行覆盖。