1. 约束块控制
- 子类约束不能违背父类约束
- 有冲突的约束可以使用内件函数进行使能控制
- p.c_short.constraint_mode(0)关闭c_short约束
- p.constraint_mode(0)关闭所有约束
- p.c_short.constraint_mode(1)打开c_short约束
- randomize失败,返回0。l.length=0,不同仿真器结果可能报警告/错误
- 继承的约束越来越多的时候,记不清之前的约束,那就在原先的基础上使用randomize()with附加约束。
- 若没有soft,一个约束不满足,整个约束求解失败,所有成员求解都失败,选B。
- soft是“软约束”,当叠加约束有冲突,那么其他约束优先级更高,选C。
2. 数组约束
- 这里的d是动态数组,d的元素个数在1~10。
- 声明了LittleUniqueArray的对象之后,使用randomize对齐进行随机化,真正随机化的其实是里面的val,借助val将类中的ua随机化。
- rc8必须在foreach外做例化,否则无法令randc发生作用,起到的实际上是rand的作用。
- SV2012标准有了一个Unique,限定一个数组元素不重复。
- da[4]<da[5],由于da[5]不存在因此constraint错误。
- 需要加if i < da.size()-2
- B
- 代码中assert(ra.randomize())只能随机化动态句柄数组中句柄的个数,因为RandStuff中成员北邮被表明rand。因此对象中所有的值都是被初始化的值1。
- 若RandStuff中成员是rand的,那么答案是ABCD。
- 一个句柄被表明rand的含义是,该句柄指向的对象中所有内容将被随机化。但是有两个前提:首先句柄不可悬空,然后对象中要有可随机化的成员
- 若一开始没有给array分配最大容量,那么后续就不能保证randomize()with{array.size()==2}的时候每一个句柄都有可以指向的对象。那么randomize会报错,仿真器不知道到底去随机化谁。