本文介绍sv中的约束。
简单表达式
1 | constraint c_simple{ |
等效表达式
1 | constraint C1{ |
权重分布
也可动态改变权重,只需要将权重改为变量即可。
1 | constraint c_dist{ |
集合成员和inside
1 | constraint c_range1{ |
条件约束
1 | constraint c_len{ |
约束中solve..before操作
有时,我们希望某种组合出现的频率更高一些,比如
1 | class B; |
约束中s和d是同时确定的,{s,d}共有2^33种组合,但是s仅在{1,0}这种情况下才是真的,因此s为真的概率为1/2^33,近似为零。
因此约束中为排序提供了一种机制,这样s可以独立于d被选择。
1 | class B; |
这样,order约束块的结算器指示s在d的被求解之前求解,这时候s就具有50%的概率被选择为真,接下来d根据s的值被选择,相应的,d==0的概率也为50%。
结构体中某一项之和
1 | typedef struct{ |
其中10-12行是为了确保每一项的内容都小于20,不然可能会出现溢出情况,比如随机出来是 -1,21,0 的情况。