每次开始新模拟时,如何更改$urandom_range
的种子。我尝试了很多没用过的东西。
always@(posedge tb_rd_clkh)
begin
$random(9);
tbo9_ready_toggle_q <= $urandom_range(0, 1);
end
答案 0 :(得分:0)
在使用urandom_range
访问随机数范围之前,使用常规方法设置种子值 seed = 2;
void'($urandom(seed));
这里上面的代码片段也将uramdom_range的种子值设置为2,每次运行时,随机数生成器创建相同的序列,只要种子相同,你可以在{{3找到一个工作示例}}
<强>更新强> 对于你的问题,如何为urandom_range insde设置种子总是阻止?根据SV EDA-Playground第18.13.3节srandom()
的更通用的方法srandom()方法允许手动播种对象的RNG或 线程。
因此,通过利用它创建了一个简化的自包含示例,以显示如何在always block
中设置种子module dut(input clk,output reg [31:0] out);
integer seed;
assign seed = 10;
always @ (posedge clk)
begin
$srandom(seed);
out <= $urandom_range (10,1);
$display ("out = %d",out);
end
endmodule
您可能想尝试一下,上面的例子与tb可以在LRM IEEE 1800 - 2012中找到。
解决您的问题
在您的代码段中,您必须将$random(9)
更改为$srandom(9)
,其中9是种子值
答案 1 :(得分:0)
您可以使用以下标志更改种子:
irun -seed seed_number
或者您可以使用随机种子:
irun -seed random
我非常确定每个工具(Questa和VCS)都有选项可以执行此操作。如果您没有设置种子,则默认为1。