verilog仿真 random 的选择
在verilog仿真中常用的random有如下三个:
$random
$urandom
$urandom_range(low,high)
做如下实验
initial begin
repeat(5) begin
$display("random %d", $random);
end
repeat(5) begin
$display("urandom %d", $urandom);
end
repeat(5) begin
$display("urandom_range %d", $urandom_range(0,100));
end
$stop;
end
默认情况下的执行结果:(且每次执行结果都是一致的)
random 303379748
random -1064739199
random -2071669239
random -1309649309
random 112818957
urandom 3948585912
urandom 393546790
urandom 2634922342
urandom 3166299062
urandom 1359874246
urandom_range 82
urandom_range 17
urandom_range 27
urandom_range 68
urandom_range 30
设置sv_seed为0,结果同默认值:
vsim -sv_seed 0 -coverage -voptargs="+acc" random_test
random 303379748
random -1064739199
random -2071669239
random -1309649309
random 112818957
urandom 3948585912
urandom 393546790
urandom 2634922342
urandom 3166299062
urandom 1359874246
urandom_range 82
urandom_range 17
urandom_range 27
urandom_range 68
urandom_range 30
设置sv_seed为1,结果变化了:
vsim -sv_seed 1 -coverage -voptargs="+acc" random_test
random 303379748
random -1064739199
random -2071669239
random -1309649309
random 112818957
urandom 2759368181
urandom 1434791088
urandom 1064164155
urandom 1102810988
urandom 1088122873
urandom_range 49
urandom_range 86
urandom_range 9
urandom_range 94
urandom_range 15
设置sv_seed为2,结果变化了:
vsim -sv_seed 2 -coverage -voptargs="+acc" random_test
random 303379748
random -1064739199
random -2071669239
random -1309649309
random 112818957
urandom 3261231164
urandom 1624405655
urandom 596997159
urandom 1965739945
urandom 600027335
urandom_range 47
urandom_range 14
urandom_range 63
urandom_range 81
urandom_range 91
结论
$random的结果不随sv_seed的变化而变化,而$urandom和$urandom_range的结果随着sv_seed的变化而变化,因此我们可以在代码中使用$urandom和$urandom_range,然后在命令里面改变随机种子,这样就可以使用不同的种子来进行仿真了