【发布时间】: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