1. constraints的一些重要属性
- constraints可以是任何包括整型variables或整型constant的expression,如:bit, reg, logic, integer, enum, packed, struct.
- 求解存在时返回正确的值,如果constraint过约束而导致误解,返回error
- constraints时双向的,所有的expression operators都认为是双向的,包含implication operator(->)
- constraints只支持2-state value。4-state values(x/z)或4-state operators(e.g., ===, !==)都不支持,且会报错。
- constraint_mode()可以用于enable或disable任何object中的named constraint block
- rand_mode()可以用于enable或disable任何的random variable。如果一个random variable被disabled了,那么它的行为就是nonrandom variable的。
- pre_randomize()和post_randomize()是sv内建的函数,它们分别会自动在randomize()之前和之后调用。
- Randomize()是virtual类型的,因此它只看object类型,不管object handle是什么。
2. :=和:/区别

3. Uniqueness constraints
一组variables可以用unique来进行约束,使得在该group中variables在randomization之后,没有任何两个members有相同的值。variables的类型可以是整型scalar variable、unpacked array variable的一个(leaf element)、一片(slice)或全部。
Leaf element的定义是:

例子如下:

4. implication
constraints为定义conditional(predicated) relations提供了两种结构:implication和if-else。两种定义如下:


implication使用(->)操作符来定义一个expression中蕴含着constraint。expression可以时任何的整数sv expression 。
Implication operator的布尔等式为:a->b 等价于(!a||b)。这表明如果expression(指的是a)为真,那么产生的随机数要受到该constraint的约束,否则,随机数是unconstrainted。总得来说:就是a为true,b也要受到constraint,a为false,b就任意的。
If-else约束中expression也要求为任何的整数expression。如果expression为真,那么if里的constraint_set就要满足,如果为false,那么else里的constraint_set要满足。
5. iterative constraints
Iterative constraints允许arrayed variables使用loop variables和indexing expression或者array reduction methods去约束。
foreach iterative constraints的语法:


foreach iterative constraints中也可以嵌套conditional(predicated) relations。
对于dynamic array和queue来说,array size也是可以被约束的,如果size constraint和iterative constraint同时发生,那么会先求解size constraints,然后求解iterat

SystemVerilog的约束随机化机制包括约束属性、变量赋值顺序、唯一性约束、蕴含关系、迭代约束、数组减少约束、全局约束、函数在约束中的使用、约束保护、软约束、随机化方法、作用域解析、随机变量的启用与禁用、约束启用与禁用、内联随机变量控制、内联约束检查、范围变量随机化、随机数系统函数和方法、随机稳定性属性以及随机加权选择和随机序列生成。这些特性使能高效和可控的仿真激励生成。

被折叠的 条评论
为什么被折叠?



