【问题标题】:Should `$srandom` apply to seed for `$urandom_range`?`$srandom` 是否应该应用于`$urandom_range` 的种子?
【发布时间】:2018-02-01 09:24:31
【问题描述】:

使用 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 被调用之前具有相同的种子值。

为什么生成的值不一样?

【问题讨论】:

  • 正如工具所提到的,$srandom 不是 IEEE1800 (SystemVerilog) 的一部分;或 IEEE1364 (Verilog)。 IEEE1800中有一个srandom()
  • 好的,谢谢,看起来 ModelSim 在某些情况下接受它,但我发现它不是标准的一部分。
  • Modesim accepts $srandom 错误提示它无法识别用户定义的 PLI 例程。这与忽略它是一样的。

标签: random verilog system-verilog


【解决方案1】:

您需要使用process::self().srandom() 而不是$srandom。然后你会得到想要的结果。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-05-30
  • 2021-11-10
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 2023-02-08
相关资源
最近更新 更多