Design for test, then test for what?
花0.01秒钟思考了一下,当然是为了发现被测电路中的制造缺陷(defect)啊!假如,我说假如啊,假如制造缺陷只有一种(嘿嘿嘿),那么为芯片测试准备的测试向量(Test Pattern)也只需要一种,芯片测试的时间将大大减少,测试成本将大大降低,芯片设计公司将大大开心。
但是,在实际的集成电路制造过程中,造成缺陷(Defect)的原因多种多样,比如:
连线的短路或开路
掺杂浓度不稳定
金属导线不规则
过孔不完整或过大
......
这就好像世界上坏人那么多种,你总不能都说他们寻衅滋事吧?坏人们(张三)需要法律对他们进行分类,坏缺陷(Defect)也需要进行分类。将千奇百怪的缺陷划分为固定的几类故障,这样的有限的故障,即为故障模型(Fault Model)。
故障模型的意义在于,让测试向量(Test Pattern)的生成可以自动化。举个栗子,芯片内部某根线接地了恒为0,你在故障的输入端写1,在故障的输出端读1,就可以测出这个故障,而“写1读1”就是你用你的聪明小脑瓜生成的测试向量(Test Pattern)。是不是觉得自己很吊?假如告诉你还有一万种未被分类的缺陷呢,是不是头都大了。但是你发现这一万种缺陷都有共同的特点,即短路恒为0,那它们的测试向量就由一万种变成了一万个,这种重复性的工作,就可以写个固定算法,让计算机自动去生成了。这就是故障模型的意义了。
言归正传,故障模型(Fault Model)可以分为哪几类呢?下面介绍两类常见的故障模型:
固定型故障(Stuck-At Faults, SAF)
逻辑门中有一条信号线的逻辑状态,一直固定在0或1,与其他信号线上的逻辑值无关。
固定0故障可以通过写1操作敏化,再通过读1操作可以检测出是否存在固定0故障;
固定1故障可以通过写0操作敏化,再通过读0操作可以检测出是否存在固定1故障。

跳变故障(Transition Delay Faults, TDF)
因逻辑们故障节点延时,导致未能在期望时间内由1翻转为0或由0翻转为1。注意看,不会同时具有既不能上跳变或下跳变的故障,只有其一,否则就成了固定故障。
检测跳变故障的测试向量的必要条件: 待测节点必须经历上跳变或下跳变。一般要经历两次跳变(两个时钟周期),如, 若存在上跳变故障,可用写0操作敏化,再进行写1操作,最后读1可以检测出这个故障;下跳变故障的检测方法反之。

其他故障类型还有IDDQ Fault、Bridge Fault、Coulping Fault等,由于本人在工作中很少碰到,这里不做介绍,感兴趣的童鞋可以自行研究。
参考文章:
《高性能CPU中高速接口IP核的DFT集成设计和验证》-https://www.docin.com/p-1048146040.html
《DFT中Fault Model的介绍》-https://zhuanlan.zhihu.com/p/522551644