System verilog 使用get_randstate和set_randstate时未保留RNG状态
我试图理解为什么在下面的示例中,RNG状态没有得到保留:System verilog 使用get_randstate和set_randstate时未保留RNG状态,system-verilog,System Verilog,我试图理解为什么在下面的示例中,RNG状态没有得到保留: module test; string Seed_s = "0"; int unsigned Seed_i = 0; initial begin process p; p = process::self(); $display("Process randstate1 = ", p.get_randstate()); Seed_s = p.get_randstate(); $disp
module test;
string Seed_s = "0";
int unsigned Seed_i = 0;
initial
begin
process p;
p = process::self();
$display("Process randstate1 = ", p.get_randstate());
Seed_s = p.get_randstate();
$display("Process Seed_s = %s", Seed_s);
Seed_i = Seed_s.atobin();
$display("Process Seed_s = %s", Seed_s);
$display("Process randstate2 = %d", Seed_i);
p.set_randstate(Seed_s);
$display("Process randstate3 = ", p.get_randstate());
end
endmodule
以下是输出:
Process randstate1 = 0000000000000000000000000000000000001001011001101001101001011110
Process randstate2 = 157719134
Process randstate3 = 0X1Z00ZZXZX011Z00X0ZX01XZXZ0X111XZZXZZZXZXZXZZXZZZZXZZZZXXXXXXXX
我希望看到randstate1=randstate3。我错过了什么
编辑:在atobin()之前和之后添加了一个显示字符串
这看起来像一个模拟器bug。你用什么模拟器 当我创建您的代码的简化版本,并使用Cadence Incisive模拟器运行它时,我会在
set\u randstate
之前和之后获得相同的状态:
module tb;
string Seed_s;
initial begin
process p;
p = process::self();
$display("Process randstate = ", p.get_randstate());
Seed_s = p.get_randstate();
p.set_randstate(Seed_s);
$display("Process randstate = ", p.get_randstate());
end
endmodule
输出:
Process randstate = svseed=1 ; 3130931317 ;
Process randstate = svseed=1 ; 3130931317 ;
当我使用Synopsys VCS运行时,我会得到与您类似的结果。这看起来像是一个模拟器错误。你用什么模拟器 当我创建您的代码的简化版本,并使用Cadence Incisive模拟器运行它时,我会在
set\u randstate
之前和之后获得相同的状态:
module tb;
string Seed_s;
initial begin
process p;
p = process::self();
$display("Process randstate = ", p.get_randstate());
Seed_s = p.get_randstate();
p.set_randstate(Seed_s);
$display("Process randstate = ", p.get_randstate());
end
endmodule
输出:
Process randstate = svseed=1 ; 3130931317 ;
Process randstate = svseed=1 ; 3130931317 ;
当我使用Synopsys VCS运行时,我得到了与您类似的结果。您的代码在Questa中运行良好,产生以下输出
# Process randstate1 = MS47527bb5f9e2c20661d2ea9091ed841d
# Process randstate2 = 0
# Process randstate3 = MS47527bb5f9e2c20661d2ea9091ed841d
我猜你的模拟器在执行Seed_.atobin()时有一个bug我将在这之前和之后显示
种子的值。您的代码在Questa中运行良好,产生以下输出
# Process randstate1 = MS47527bb5f9e2c20661d2ea9091ed841d
# Process randstate2 = 0
# Process randstate3 = MS47527bb5f9e2c20661d2ea9091ed841d
我猜你的模拟器在执行Seed_.atobin()时有一个bug
我会在这之前和之后显示种子的值。添加了显示语句。Seed_的值保持不变显示语句。种子的值保持不变