SV语言部分(4)

文章详细介绍了随机约束和分布的概念,包括为什么需要随机测试和约束,以及如何声明和控制随机变量。约束用于限制随机生成的激励在合法范围内,而随机化函数如pre_randomize()和post_randomize()则用于在随机化前后执行特定操作。此外,文章还讨论了数组约束,如产生唯一元素值的数组,并提到了随机控制手段,如randsequence和randcase。
摘要由CSDN通过智能技术生成

目录

一、随机约束和分布

1、为什么需要随机?

2、为什么需要约束?

3、我们要随机什么

4、声明随机变量的类

 rand和randc的区别:

 5、什么是约束

6、权重分布

 7、集合成员和inside运算符

 8、条件约束

 9、双向约束

二、约束块控制

1、打开或关闭约束

2、内嵌约束 (in-line)

三、随机函数

1、pre_randomize()和post_randomize()

2、随机数函数

 3、随机化个别变量

四、数组约束

1、数组的属性约束

2、约束数组中的元素

 3、产生唯一元素值的数组

 4、随机化句柄数组

五、随机控制

1、随机序列

2、随机控制 

​3、总结


一、随机约束和分布

1、为什么需要随机?

  1. 芯片体积增大,复杂度日渐提高,在20年前定向测试已经无法满足验证的需求,而随机测试的比例逐渐提高
  2. 定向测试能找到你认为可能存在的缺陷,而随机测试可以找到连你都没有想到的缺陷
  3. 随机测试的环境要求比定向测试复杂它需要激励、参考模型和在线比较。上百次的仿真不再需要人为参与,以此来提高验证效率
  4. 激随机测试相对于定向测试可以减少相当多的代码量,而产生的激随励较定向测试也更多样
  5. 如果说定向测试是"站着测”,那么随机测试就是"躺着测”、“跪着测”、“跑着测”各种花式测,只有想不到,没有测不到

2、为什么需要约束?

  1. 如果随机没有约束,意味着什么?是绝对的自由吗?肯定不是,它是一匹脱缰的野马,没有拘束,产生有效激励的同时也产生了很多无效和非法的激励
  2. 那么我们想要的随机自由是一种合法的随机,需要限定激励的合法范围。同时,伴随测试的进行约束甚至应该"变形”变得更趋于为测试的数值范围或者期待的数值范围
  3. 随机的对象不只是一个数据而是有联系的变量集。通常这些变量会被封装在一个数据类中,同时需要在类中声明数据之间的约束关系。因此约束之后要产生随机数据需要一个“求解器",即在满足数据本身和数据之间约束关系时的随机数值解
  4. 约束不但可以指定数据的取值范围,还可以指定各个数值的随机权重分布

3、我们要随机什么

 :随机测试中,可以随机化设计的结构吗?

不可以,随机、验证的结构(类是动态的)发生在仿真设计的结构发生在编译的时候

4、声明随机变量的类

随机化是为了产生更多可能的驱动,因此在软件世界"class”的运用更多,所以我们倾向于将相关数据有机整理在一个类的同时,也用rand关键词来表明它们的随机属性

randc表示周期随机性,即所有可能的值都赋过值后随机值才可能重复

随机属性需要配合SV预定义的类随机函数std::randomize()使用。即只有通过声明rand变量,并且在后期通过对象调用randomize()函数,才可以随机化变量

约束constraint也同随机变量一起在类中声明

说明:  randrandc都是关键词,必须用来修饰类的成员变量

           类里面方法的局部变量不能用这两个关键词修饰

 rand和randc的区别:

以抽扑克牌为例子(一副扑克牌有54张):

 5、什么是约束

  1. 约束表达式的求解是由SV的约束求解器(constraint solver)完成的
  2. 求解器能够选择满足约束的值,这个值是有SV的PRNG (伪随机数发生器 Pseudoandom number generator )从一个初始值 (seed) 产生。只要改变种子的值࿰
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值