前言
之前的笔记继续往博客上整理,关于验证环境中各种random的特点,之前在另外一篇问文章中有过详细的讨论:
静态模块(module或interface等)中的可控随机探索(
u
r
a
n
d
o
m
/
urandom/
urandom/random)
当然了,上面的文章主要探索的是在静态模块内的随机场景,这篇文章则是动态automatic仿真环境中的使用规则。
随机特点总结
$random / $random()
不同种子的仿真结果一样,不受种子控制。
同一个用例中,同一变量随机多次值不相同。
random(n)
括号内值固定后,随机不受种子控制,为常值。
$urandom() / $uramdom / $urandom_range()
不同种子的仿真结果不同。
同一个种子的仿真结果相同。
$urandom(n)
随机值不受种子影响,且为常值。
大位宽数值的随机
值得注意的是,所有的urandom都只能最大随机32bit的数值,想随机更大的位宽需要使用std::randomize(value)来进行随机。
begin
bit[63:0]test1;
bit[63:0]test2;
test1 = $urandom;
std::randomize(test2);
$display("'h%0h", test1);
$display("'h%0h", test2);
end
随机的结果为:
'h69867058
'heb78ea6bbe59d6dd