第六章:随机化(续2)

6.10 随机化句柄数组

如果想要产生多个随机对象,那么你可能需要建立随机句柄数组,和整数数组不同,随机求解器不会创建对象,所以你需要在随机化前分配所有的元素。
动态数组可以按照需要分配最大数量的元素,然后按照约束再逐步减小数组的大小。在随机化时,动态句柄数组的大小可以保持不变或减小,但是不能增加。
产生随机数组的元素

6.11 产生原子激励和场景

每次只产生一个事务,这些产生一个随机总线事务、一个网络包、一条处理器指令都是原子随机事务。

6.11.1 随机序列

产生事务序列的另一种方法是使用SystemVerilog的randsequence结构。
使用randsequence的命令发生器

  • 给出权重分布
  • 程序性代码可以调试($display),不像randomize()函数要么成功,要么失败。
  • 产生序列的代码与序列使用的包是分开的,风格也完全不同。

    6.11.2 随机控制
    之前的介绍能够使我们很随意的产生随机序列,但是如果设计只是偶尔才需要随机决策,你就会认为上面的方法是一件很麻烦的事情。程序员更喜欢用程序性的语句,这样就可以使用调试工具逐条运行。
  • 使用randcase和$urandom_range的随机控制。

使用randcase和$urandom_range的随机控制

  • 使用randomize()函数的随机控制。
    使用randomize()函数的随机控制

    6.11.3 用randcase建立决策树

    通过下列两级代码,便可以清楚知道决策树是怎么建立的。
    用randcase建立决策树

    6.12 随机数发生器

    6.12.1 伪随机数发生器

    Verilog使用了一种简单的PRNG(伪随机数发生器),通过$random函数访问,这个发生器有一个内部状态,可以通过$random的种子来设置。
    SystemVerilog通过randomize()和randcase来调用PRNG。

    6.12.2 随机稳定性---多个随机发生器

    Verilog在整个仿真中使用一个PRNG。
    SystemVerilog中,每个对象和线程都有一个独立的PRNG。

    6.12.3 随机稳定性和层次化种子

    SystemVerilog的每个对象都有自己的PRNG和独立的种子。在仿真开始时,一个种子可以产生可以产生多个随机激励流,它们之间又是相互独立的。
    当调试测试平台的时候,如果修改代码的话,即使是具备随机稳定性,代码的变化也会使测试平台产生不同的随机值。特别是当调试DUT的故障时,测试平台却不能再现相同的激励。把新增的对象和线程放在现有对象和线程之后,可以减小修改代码带来的影响。

    6.12.4 随机器件配置

    测试DUT的一个重要工作是测试DUT内部设置和环绕DUT的系统配置。测试应该随机化环境,这样才能保证尽可能测试足够多的模式。

转载于:https://www.cnblogs.com/xuqing125/p/9550594.html

微信扫码订阅
UP更新不错过~
关注
  • 0
    点赞
  • 0
    收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值