在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 8620|回复: 6

[求助] verilog testbench产生随机数的疑问

[复制链接]
发表于 2015-7-22 10:16:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在使用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产生无符号数外)。
发表于 2015-7-22 16:22:36 | 显示全部楼层
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对其处理机制不一样,且也不能排除不同编译仿真器对其理解的不同而导致的。
 楼主| 发表于 2015-7-23 19:58:33 | 显示全部楼层
本帖最后由 welco 于 2015-7-23 19:59 编辑

多谢回答!


$urandom不带种子可以随机,是因为simv加了这个option:+ntb_random_seed_automatic
表示加入以日期和服务器ID组合成的种子,即每次仿真的种子不同。

$random我试过带不同的种子,但每次仿真仍然是相同的。使用simv+ntb_random_seed_automatic
也仍然没有效果。
发表于 2015-7-23 20:45:48 | 显示全部楼层
看来我没有说清楚,你使用ntb_random_seed_automatic这个只是产生了随机的种子而已,但随机序列发生器需要用不同的种子进行初始化才会得到不同的随机数。
可以使用$srandom(seed)来,也可以直接使用$random(seed).系统函数必须带种子的参数,否则使用缺省种子,即种子不会改变。
 楼主| 发表于 2015-7-29 17:00:38 | 显示全部楼层
你说的是对的。
$random必须通过$random(seed)的方式指定seed,seed不同则得到的随机数不同。

$urandom可以通过$urandom(seed)的方式指定seed,此时:simv+ntb_random_seed_automatic
不起作用。
$urandom也可以不指定seed,通过simv+ntb_random_seed_automatic得到随机的seed值,此时也可以得到随机数。
发表于 2022-3-29 16:30:52 | 显示全部楼层
学习了
发表于 2024-7-17 16:58:08 | 显示全部楼层


verilog的$random配合使用VCS支持的系统函数$get_initial_random_seed(),就可以获取到“+ntb_random_seed_automatic”的seed值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-16 11:52 , Processed in 0.022976 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表