verilog改变随机种子

时间:2015-06-27 02:04:57

标签: verilog system-verilog

每次开始新模拟时,如何更改$urandom_range的种子。我尝试了很多没用过的东西。

always@(posedge tb_rd_clkh)
  begin
    $random(9);
    tbo9_ready_toggle_q <= $urandom_range(0, 1);
  end

2 个答案:

答案 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。