【DFT】Scan reorder导致的形式验证失败
时间:2021-12-07 14:37:29
手机看文章
扫描二维码
随时随地手机看文章
[导读]我们可以在做布局之前通过读入scandef或者其他方式来告诉工具扫描链的起止信息,然后在Place的时候启动scanreorder,让工具对扫描链进行重排序以节省绕线资源。 关于scanreorder的设置/命令:Innovus:在布局之前设置:setPlaceMode-plac...
我们可以在做布局之前通过读入scandef或者其他方式来告诉工具扫描链的起止信息,然后在Place的时候启动scan reorder,让工具对扫描链进行重排序以节省绕线资源。 关于scan reorder的设置/命令:Innovus:在布局之前设置:setPlaceMode -place_global_reorder_scan true|false默认该选项就处于true状态,也就是工具会自动做reorder。 ICC:place_opt -optimize_dft 下面两幅图为同一条扫描链在做scan reorder和不做reorder的局部放大图的对比,能清楚的看到差异:从图中能看出做了reorder之后,扫描链的连接效果挺好的,没有出现扫描链多次交叉的情况,因此节省了很多绕线资源,否则的话扫描链随意交叉将浪费大量的绕线资源。 按照上述在DFT Compiler中做完Scan chain导入ICC中做PR,然后在做形式验证的时候发现形式验证是失败的,如下图所示:做形式验证和DFT设计的流程也完全没用问题。正如上面显示的Port Failing一样,经过Debug发现问题发生在输出端口处: 在做PR之前的网表中,IO fsk_out_block的输入Pin I上接的是…_count_reg_2的Q Pin,可是在做完布局布线后的网表中,它接的却是…_count_reg_1的Q Pin,这显然是不对的。大家可以思考下这个问题的原因以及解决方案。 下面公布答案:原因:这是一个带有IO的full chip design,scan def中通过制定scan chain的起止IO来定义scan chain的order。导入ICC中后,工具对中间的部分做了reorder,因此将…_count_reg_1接到了输出IO也是scan output的IO上因此产生了这个问题。Scan def before scan reorder:Scan def after scan reorder: 有看过Place阶段scan reorder推文以及里面里面的scan def语法的话你应该就知道这个问题的解决方案了(推文和scan def的介绍在 自己的网易云课堂课程:《Innovus Flow系列教程(图文教程)》中)。我们只需要对DFT Compiler导出的scan def文件进行小的修改即可,将…_count_reg_2到fsk_out_block的那部分设置成ORDER即可,工具便不会对该部分进行重组。其实如果你做了Innovus的Lab的话可以看到在scan def中做了类似的处理。修改后的scan def文件:VERSION 5.5 ;NAMESCASESENSITIVE ON ;DIVIDERCHAR "/" ;BUSBITCHARS "[]" ;DESIGN top_pad ; SCANCHAINS 1 ; - C1 START data_in_block C FLOATING fsk_modulator_count_reg_0_ ( IN SI ) ( OUT QN ) fsk_modulator_count_reg_1_ ( IN SI ) ( OUT Q ) ORDERED fsk_modulator_count_reg_2_ ( IN SI ) ( OUT Q ) fsk_out_block ( IN I ) ( OUT PAD ) STOP fsk_out_block I ; END SCANCHAINS END DESIGN 做完PR以及scan reorder之后,ICC吐出的scan def:可以看到工具并未修改输出IO上的连接关系,后边做形式验证的结果:
是通过的。