verilog产生随机数序列_verilog testbench产生随机数的疑问

在使用verilog testbench产生随机数时碰到如下疑问:

testbench中的代码:

read_times = $random;

vcs命令为:

vcs -full64 -sverilog -debug_pp

simv +ntb_random_seed_automatic

尽管每次产生的seed不同,但每次跑vcs得到的read_times都是相同的。

如果把testbench中的代码改成如下:

read_times = $urandom;

则每次跑vcs可以得到不同的read_times。

从systerverilog的标准中也看不出$random和$urandom有什么区别(除了$urandom产生无符号数外)。

1、随机系统函数包括$random(seed),$urandom(seed),$urandom_range(min,max),$srandom(seed),其中$random(seed)是verilog2001的语法,后面3个是sv的语法。

2、$random与$urandom除了有无符号的区别还有其他不同。sv语法中有提到线程稳定性的区别。

3、$random如果不带种子会使用系统缺省的种子产生随机数,这可能是每次不变的原因,你带上种子参数试试看是是否改变。

4、$urandom不带种子也可以随机,我猜测可能是因为verilog与sv对其处理机制不一样,且也不能排除不同编译仿真器对其理解的不同而导致的。

多谢回答!

$urandom不带种子可以随机,是因为simv加了这个option:+ntb_random_seed_automatic

表示加入以日期和服务器ID组合成的种子,即每次仿真的种子不同。

$random我试过带不同的种子,但每次仿真仍然是相同的。使用simv+ntb_random_seed_automatic

也仍然没有效果。

看来我没有说清楚,你使用ntb_random_seed_automatic这个只是产生了随机的种子而已,但随机序列发生器需要用不同的种子进行初始化才会得到不同的随机数。

可以使用$srandom(seed)来,也可以直接使用$random(seed).系统函数必须带种子的参数,否则使用缺省种子,即种子不会改变。

你说的是对的。

$random必须通过$random(seed)的方式指定seed,seed不同则得到的随机数不同。

$urandom可以通过$urandom(seed)的方式指定seed,此时:simv+ntb_random_seed_automatic

不起作用。

$urandom也可以不指定seed,通过simv+ntb_random_seed_automatic得到随机的seed值,此时也可以得到随机数。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值