jasper gold c2rtl 简介2-- 代码剪枝(code pruning)

随着模型变得复杂,c model中分支代码可能越来越多。为了减少验证复杂度,c2rtl引入了代码剪裁(code pruning)特征。

c2rtl通过constant propagation和形式化分析,找到不影响cmodel 输出或者用户定义的assertion的代码,尽可能将其剪裁掉。

基于constant propagation的代码剪枝:

在cmodel中可能存在一些情况,例如,某些分支的走向可以在运行代码之前分析出来,或者某些变量与输出并不相关。比如:

代码中,select变量值已经确定,if-else分支会走false分支。因此,c2rtl不会分析true分支,同时,select变量也会忽略。

基于 Dynamic Path pruning 的代码剪枝:

1. if-else分支剪枝

在验证过程中,cmodel中的变量取值并不完全,变量中某些bit取值可能是不变的,而这些特性需要进行形式化分析才能得出结论,这一过程是在RTL synthesis之前完成的。

上图中,如果cond经过形式化分析,只有0x0,0x1分支能够取到,则后两个分支也会被忽略。

 

 2.for 剪枝

形式化验证过程中,c2rtl前端在综合之前需要将for循环展开成并行执行的语句。默认情况下,for循环会展开256次。但是某些for循环由变量来控制循环次数,对于这些for循环,c2rtl可以通过分析代码来确定一个展开的上界N。

在上图中,N为一个4bit的变量,因此可以确定for循环展开不会超过16次。 

用户可以自定义for循环展开的次数,使用:

check_c2rtl -compile... -unwind_limit <N>

或更精确的自定义展开:

check_c2rtl -set_bound -loop -file <filename> -line <line_num> -bound <bound>
check_c2rtl -set_unwind_limit -loop -file <filename> -name <name> -bound <bound>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值