e语言当中的软强约束

今天有位同事遇到了一个关于软硬约束的问题,具体如下:

 

例1:

结果:val被约束到为【2..3】

 

例2:

结果:val被约束为【12..14】

 

在e语言当中,硬约束可以覆盖软约束,硬约束执行的时候按代码顺序从上到下执行,而软约束是从下住上执行的。

所以 例1是可以解释的,先硬约束为【2..14】,然后软约束从下住上,约束为【2..3】,再遇到 >11的软约束,因为冲突,忽略掉了。

而例2百思不得其解。

 

后来把post_generate()当中的大于号改成了小于号,结果变成了【2..3】,更加百思不得其解了。因为post_generate()永远是在最后面执行的呀。

 

后来觉得问题是出在了post_generate()当中的gen上。就是说,在post_generate()之前,已经生成了一个值,但是又遇到了一个gen, 所以就需要考虑所以的约束条件。这样解释就非常的通了。 先硬约束到【2..14】,然后根据post_generate()当中的条件,约束到【10..14】,遇到 <4 的软约束,冲突忽略,遇到 > 11的约束,进一步得到【12..14】.

 

同样解释post_generate()改成<9也是可行的。

 

PS:做为一名IC验证工程师,在此地感觉有点孤独。代码连e语言和sv 都不支持。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值