`$ srandom`应该适用于`$ urandom_range`的种子吗?

时间:2018-02-01 09:24:32

标签: random verilog system-verilog

使用ModelSim看起来使用$srandom的种子随机调用不适用于$urandom_range的后续随机值生成。

运行流程:

initial
  begin
  $srandom(42);
  $display("1: %0d, %0d, %0d", $urandom_range(1, 10), $urandom_range(1, 10), $urandom_range(1, 10));
  $srandom(42);
  $display("2: %0d, %0d, %0d", $urandom_range(1, 10), $urandom_range(1, 10), $urandom_range(1, 10));
  $srandom(42);
  $display("3: %0d, %0d, %0d", $urandom_range(1, 10), $urandom_range(1, 10), $urandom_range(1, 10));
  end

输出是:

# 1: 3, 1, 7
# 2: 9, 7, 2
# 3: 6, 4, 8

但是,我原本以为第1,2和3行是相同的,因为$srandom被称为具有相同的种子值。

为什么生成的值不一样?

1 个答案:

答案 0 :(得分:2)

您需要使用process::self().srandom()代替$srandom。然后,您将获得所需的结果。