2008年12月9日星期二

DFT Compiler的学习-----part4 构建test design

本学习单元为DFT compiler的重点内容。

准备好设计之后,就可以考虑构建test design。

1.DFT规格的指定。

1.1 扫描链的构建

利用set_scan_configuration来对全局的scan chain进行配置。比如扫描链的类型,长度,个数等

等信息。利用set_dft_signal来对指定test port管脚。这些都是全局性的配置。

除了对全局性的scan chain进行配置之外,也可以对某个特定的scan path进行配置。

利用set_scan_path来对scan path进行配置,这条命令可以对scan chain命名,指定扫描链的长度

等等,功能很强大。option很多,建议看看man文档,这里挑几个常用的来说明。

<1> exact_length:指定某个扫描链的长度。例如:

set_scan_path chain_name1 -exact_length 10

如果要对整个扫描链设置长度。使用set_scan_configuration -exact_length来设置。

<2>complete trulefalse :指定当前的扫描链是否完备,如果完备,则insert_dft不会添加新的

scan cell来balance 扫描链,否则就可以添加。

如何控制routing order呢?可以通过set_scan_path的-ordering_list选项来指定顺序。

一般扫描单元有两个输出,一个是scan_out,一个是其反相scan_out_inverted,DFT会根据时序

选择一个好的,如果要改变默认的行为,可以将变量test_disable_find_best_scan_out置为

true。

如何对扫描链进行重新连线呢?一般DFT为了优化设计,会进行下面的处理:会对扫描单元做单

独的优化来满足时序等信息,如果插入的扫描单元不满足test DRC,会在insert_dft的时候,将其

还原成原先的非扫描结构的形式。

如果不考虑优化来连接扫描链呢?这又叫做快速扫描链综合,比如在top层做扫描链,底层的扫描

链都已经优化好了,在顶层只需要将其连接起来就可以了。又比如不想在logic综合中优化,而是

放在后面的物理设计中优化,也可以先直接将扫描链先连接起来。可以使用命令

set_scan_replacement -none_scan none_scan_cell_list -multiplexed_flip_flop scan_cell。

注意上面的命令的option必须成对出现,而且scan_cell只能有一个。

1.2 扫描信号的构建

如何抑制某些时序单元的scan替代呢?使用set_scan_element -false cell_list来实现。

如何对三态信号进行处理呢?为了防止出现bus竞争和bus漂移,DFT会在scan_shift的时候保证

只有一个drive。DFT会自动判断内部的三态逻辑是否满足一个drive有效的要求,如果不满足,

会自动在内部添加逻辑来满足要求。如果设计的逻辑本身已经加入了此种逻辑,则可以使用命令

让DFT不用加入该disable逻辑。使用的命令是set_dft_configuration -fix_bus disable。如果采用

bottom-up的方式来插入扫描链,需要注意在底层可以将fix_bus disable掉,但顶层需要将其

enable。

如何对双向端口进行处理呢?同上面处理三态的方法一样,如果设计本身就包含处理的模块,那

么可以使用set_dft_configuration -fix_bidirectional false。同理,DFT也提供了对特定的双向端

口处理和全局的双向端口处理的命令。对特定的双向端口处理,可以使用set_auto_element的命

令。

如何控制lock-up element的插入?如果相邻的时序cell是由不同的时钟来驱动的,那么DFT会默

认在cell之间插入一个lock-up element。可以通过set_scan_configuration -add_lockup truelfalse

来指定,也可以通过选项 -lockup_type latchflip_flop来选择插入的lock-up element的类型。

1.3 测试时钟的构建

需要特别注意的是多时钟的构建,DFT在默认的时候是为每个时钟域创建一个scan chain,当然可

以使用set_scan_configuration -clock_mixing mixing_clocks就允许多个时钟域的信号位于同一个

扫描链上。

还有就是内部时钟。默认情况下DFT在处理的时候会将所有内部时钟都由顶层定义的test clock来

驱动。可以通过设置set_scan_configuration的-internal_clocks multi选项来将其当作不同的时

钟,这样如果没有mixing的化,将会创建出两条扫描链,如果mixing的化,将会加入lock-up单

元。

2.post_scan DRC的检查。

没有评论: