关于pre-scan的test DRC问题
1.test DRC的流程
很简单,只要注意到只有在创建test_protocol之后才可能test DRC检查。
2.test DRC后时序单元的分类
分为两类,一类是有违例的,一类是没有违例的,需要对违例的时序单元进行违例排除。
3.模型的违例
黑盒违例:在链接库中找不到该cell。需要查看链接库是不是没有给全。DFTC会将黑盒看成一个时序单元。latch违例:DFTC找不到带扫描链的latch,就会把latch当成黑盒来处理。
4.设置时序的属性
两
种strobe协议:一种是strobe_after_clock,一种是strobe_before_clock。默认是
strobe_after_clock的。几个时序属性:test_default_period:定义测试周期,如果测试仪和被测芯片允许,可以设更小
的值,默认是100ns。test_default_delay:定义输入延时,缺省值为5。test_default_bidir_delay:定义双
向端口的时序。test_default_strobe:定义探测点的位置test_default_strobe_width:定义探测的宽度,默认为
0。
5.创建测试协议
使用的命令就是create_test_protocol的方法。
6.屏蔽DRC错误
DRC
错误按照严重程度可以分为:error,warning,ignore。可以使用set_dft_drc_rules来对某种错误进行降低或者升级处理,
使用的方法就是set_dft_drc_rules -error XXX -cells
YYY如果要恢复到默认的等级,可以使用reset_dft_drc_rules。如果要查看DRC错误的等级,可以使用
report_dft_drc_rules。
今天着重分析下扫描单元替换(scan
replacement)的内容。所谓scan
replacement,顾名思意就是在设计中用扫描单元替代非扫描单元。如果设计是以RTL形式给出的,则在RTL综合成门级网表的过程中自动插入扫描
单元。如果设计是以门级网表给出来的,则专门做一次扫描替换。
流程:1.选择扫描链的策略---> 2.test DRC检查---> 3.带扫描链的综合
在做扫描链之前,还需要考虑下面问题:
1 .根据目前设计的格式,选择插入扫描链的流程。
如
果是RTL或者未优化的门级设计,则采用test-ready Compile,如果是优化的门级设计,采用constraint-optimized
插入方式。test-ready Compile包括逻辑优化和扫描链插入。采用的命令就是 compile
-scan。优点就是流程简单,能够得到更好时序和面积。注意test-ready Compile只是将单元替代,并没有将扫描单元连接起来。
2.找出扫描替代的障碍。
障碍有很多种啊,比如本身工艺库就不提供扫描单元,或者某些寄存器找不到相对应的扫描单元,或者设计本身有dont_touch属性或者scan_element属性为false等等。
(set_scan_element truefalse [get_cells ADA])
扫
描链类型本身有带mux的寄存器,LSSD,clocked
SD。具体选择那一个要考虑到工艺库和本身的设计,一般采用带mux的寄存器。有两种方式来设置扫描链的类型,一种就是设计
test_default_scan_style变量。设置的方法跟tcl设置变量的方法一样,默认的是multiplexed_flip_flop。另
一种设置的方式是set_scan_configuration -style来设置。
(tips:如何查看typical库中是否有扫描单元呢。
get_pins typical/*/* -filter "signal_type==test_scan_in")在
插入扫描链的过程中,可以指定扫描单元。使用的命令是set_scan_register_type。选项有-
exact和-type,如果使用了exact选项,则在后面的优化过程中(compile
-increment)仍然会保留只使用type列表中的扫描单元。(注意DC命令中类似的命令就是set_register_type)。
下面说说constraint-optimized的扫描链插入流程。包括插入扫描链,根据约束优化扫描逻辑,修正DRC错误。对于这种流程,输入可以是优化后的门级网表,可以不包含扫描单元,也可以包含扫描单元。这里需要用到的命令有:
set_drc_configuration
preview_dft.
这些命令以后再深入学习把。
文章评论(0条评论)
登录后参与讨论