Questasim设置仿真随机种子(random seed)

在systemverilog代码运行中,EDA工具会先给1个随机种子值(seed),所有代码里的随机数都是根据这个初始种子衍生出来的。因此,通常来说,只要代码没有改动,且初始种子一样,那么仿真运行结果也一样。那么在questasim里如何设置和查看种子值呢?

1. 设置种子值

Questasim给vsim命令提供了-sv_seed <interger> | random的参数。有几个关键点:

  1. 如果vsim后面没有跟着sv_seed,那么默认seed是0;
  2. 如果vsim后面跟着sv_seed,但没有提供<interger> 或 random,那么会报错;
  3. 如果sv_seed后面跟着非负32-bit整数(interger),那么这个非负整数就是初始seed值。如果是无效值的话,那么questasim会报warning信息并且忽略掉;
  4. 如果sv_seed后面这个random单词的话,那么vsim命令每次运行都会使用随机生成的seed;
  5. sv_seed在modelsim.ini文件里是只读的,不能改写;

2. 读取种子值

Questasim里提供了$get_initial_random_seed系统函数,User可以在systemverilog code里调用这个系统函数就可以得到当前仿真使用的初始seed值。

另外一种方式是在Tcl shell窗口中,通过echo $Sv_Seed把seed值展示在shell窗口。

3. 使用例子

3.1 设置初始seed值为666的整数:

vsim -sv_seed 666

3.2 设置初始seed值为随机数:

vsim -sv_seed random

4. 测试代码

测试代码如下:

vsim -sv_seed random
$display("1. The seed is: %0d, random data:%0d", $get_initial_random_seed, $urandom);
vsim -sv_seed 666
$display("2. The seed is: %0d, random data:%0d", $get_initial_random_seed, $urandom);
vsim
$display("3. The seed is: %0d, random data:%0d", $get_initial_random_seed, $urandom);
vsim -sv_seed
$display("4. The seed is: %0d, random data:%0d", $get_initial_random_seed, $urandom);

结果如下:

1. The seed is: 281111952, random data:3445949350
2. The seed is: 666, random data:3072267859
3. The seed is: 0, random data:313949478
Error. Use the -help option for complete vsim usage.


欢迎关注:

微信公众号:专芯致志er

微信号:cccccccchip

简介:分享Arm architecture, 各种ABMA协议, 芯片验证, 方法学, 脚本, EDA等知识


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷公子的藏经阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值