DFT全称为Design for Test,可测性设计。就是说我们设计好一个芯片后,在仿真时可能99%的用例都通过了,怎么保证流片出来的实际芯片也能正常工作呢?这里大家必须建立一个概念就是,不管是前端后端,总之只要是设计阶段,不管是waveform还是版图,他都不能完全代表最终出来的芯片的样子,那些设计图纸只是我们美好的想象,实际的制造结果可能会有工艺的偏差的。比如GDS里没有short,但是有可能制造出来的芯片真的有short,这就关系到我们所谓的良率问题。那么DFT的终极目标就是在流片后,我也能通过某些测试的方法,保证芯片和我们的设计图纸吻合,不出现异常。
对于DFT工程师来说,芯片的open/short可以等效为两种fault:Stuck at 0、stuck at 1,说的是不管信号如何变化,某些点可能一直保持0或者1,其实就是发生了open/short。噢,我这里还说的不太准确,也有可能是cell内部的错误,不是metal的open/short。举一个简单的例子,一个二输入与门,它在输入10、01、00的时候输出都为0,看起来是正常的,但是输入11的时候输出也为0,这就不对了,发生了stuck at 0的错误;如果对于所有的输入都输出1,那也不对,发生了stuck at 1的错误。那么反过来,我现在想测这个与门是否正常,怎么来测?思路是先测是否有stuck at 0,再测是否有stuck at 1.那么我如何测出它是否有stuck at 0?我就先假设它有SA0,我就找它应该输出为1的输入是什么,然后灌进去这个输入(这个例子里就是11),如果测到输出为0,那么他就发生SA0,如果输出为1,那么他就没有SA0. SA1也是一样,我把所有应该产生0的输入灌进去(10、01、00),如果至少有一个的输出为1,那么就发生SA1,如果全部输出为0,那么就没有发生SA1. 听起来这个逻辑关系好像很简单,对于这个与门的例子一个小学生可能都会自发的想出要这么测。但我这里费了这么多笔墨要把这件事讲清楚,就是当电路复杂的时候,需要这样一步一步来推导所需要的输入是什么。