本章目录:
1. 随即约束和分布
1.1 为什么要随机?
1.2 为什么要约束?
1.3 要随机什么?
1.4 声明随机变量的类
1.5 什么是约束?
1.6 权重分布
1.7 inside运算符
1.8 条件约束
1.9 双向约束
1.10 练习
答案:AC
解析:B错误,设计的结构它是静态的,形成于编译时,不可以随机化,而验证的结构发生在仿真时,可以随机化;D错误,输出不可随机化。
答案:AB
解析:C错误,month不符合条件,以为题中month是3位的,表示07,尽管约束范围是112,那最后只能出现在1~7;D错误,year范围不对。注意:同一个类中只要有一个成员变量随机失败,那整个随机就是失败的。
2. 约束块控制
2.1 打开或者关闭约束块
2.2 内嵌约束
2.3 练习
答案:A
解析:有多个约束并且没有禁止任何约束时,仿真时会报错,该题中p.length初始化为0,约束条件中不影响p.length,所以,最后还是0.
答案:C
解析:注意图中的soft,降低自己的优先级,所以只要满足题中的条件即可。
3. 随机函数
3.1 pre_randomize 和 post_randomize
3.2 随机数函数
3.3 随机化个别变量
答案:C
解析:这里只对low随机,那么其余的都是默认值0,不论怎么初始化,约束条件hi>med不满足,所以low没办法随机出来,故报错。
4. 数组约束
4.1 数组的大小
4.2 数组中每个元素
4.3 产生唯一元素值的数组
4.3.1 方式一
4.3.2 方式二
4.4 随机化句柄数组
4.5 练习
答案:D
分析:原因在于d[i]<=d[i+1],此时的i的取值无法满足,比如i==3,那么就要满足d[3]<=d[4],此时有d[4]吗?显然没有。
答案:B
分析:原因在于类RandStuff中value没有rand修饰,那它的值就是确定的,即为1;如果它要是被rand修饰,此时因为它是2位的,所以它的值在0~3都是对的;
拓展:如果类RandArray没有new的话,句柄数组就会是悬空的,此时他没有指定对象,所以这样做很危险。
总结:2个点===> 其一,一定要对该对象进行new,其二是一定要看句柄所指对象的变量有没有被rand修饰,有的话也要进行随机。
5. 随机控制
声明
本人所有系列的文章,仅供学习,不可商用,如有侵权,请告知,立删!!!
本人主要是记录学习过程,以供自己回头复习,再就是提供给后人参考,不喜勿喷!!!
如果觉得对你有用的话,记得收藏+评论!!!