利用DFT规则提高ASIC错误检测范围
本文是作者关于错误检测范围分析和ASIC设计全扫描测试模拟的第二篇文章(第一篇《在设计中遵循DFT规则提高错误检测覆盖率》见本刊今年8月第二期)。在前一篇里作者讨论了一些实用的方法,系统地分析了未包含在全扫描检测范围内的恒定错误,并提供设计实例,文中主要讲了一些重要的DFT规则,只要遵循这些规则就能大大提高错误检测范围。本文则详细介绍如何针对错误检测范围(而不是逻辑验证)用错误模拟的方法来模拟ASIC非扫描向量,其中的原理同样可以应用在FPGA等其它IC设计中。
ASIC 供应商们广泛应用扫描测试来检测一般称为恒定错误的制造缺陷,错误检测范围分析的目的是精确计算所有可检测错误百分比,并寻找方法将不在检测范围内的错误加入到检测范围内,以使最终错误检测范围百分比达到95%以上,这也是ASIC供应商所使用的标准,用以证明电路本身制造是正确的。
从DFT 规则1(参见《电子工程专辑》2002年8月第二期第46页《在设计中遵循DFT规则,提高错误检测覆盖率》一文)可知,我们应该进行边界扫描,或者在嵌入式RAM周围增加测试点进行全扫描测试,即需要对设计作一些更改。但假如由于进度、性能或面积等原因不能这样做该怎么办呢?如何将非扫描逻辑模块加入到测试范围之内呢?因为大多数不可测错误很可能就存在于这些模块中。在这种情况下,一般是进行错误模拟,使用一个支持恒定错误模型的特殊模拟器(称为错误模拟器),针对错误检测范围模拟非ATPG(自动测试模式)测试向量。非ATPG向量可以是那些最初开发用于功能验证的向量,也可以是手工开发用来针对己知错误的向量(图1)。
错误模拟不能从零开始,它从ATPG工具提供的错误检测范围结果中读出数据,并加上非ATPG测试向量提供的其它错误检测结果。所以让错误模拟器能读入 ATPG工具的输出文件非常重要,确保做到这点的方法之一是使用同一供应商提供的两种工具,如果这两种工具来自不同的供应商,在购买以前就要确认两种工具之间可以交流。另外一个关键之处是有些错误模拟器不能直接使用测试基准程序(如在Verilog中使用的程序),且需要特殊格式的输入激励和输出响应文件,如由1和0组成的二进制格式。
因此需要有一个工具来进行这种转换,工具可以由ASIC供应商提供,大多数情况下必须使用C、C++或者Perl5之类的语言进行开发,记住要分配足够的资源用于该项重要任务。
图1中的功能测试向量由几个不同类型的测试向量组成,错误模拟的第一步是决定哪一类向量能提供最大错误检测范围,从而只模拟这些向量,其中包括:
·逻辑测试向量 由ASIC设计人员或DVT工程师或共同开发生成,用于对设计进行功能验证。
·BSR测试向量由ASIC供应商使用BSDL文件创建生成,如果每一个初级I/O引脚都处于边界扫描链中,那么这些向量还包括参数测试向量。
·参数测试向量由ASIC设计人员或DVT工程师或共同开发生成,用于不是每个初级I/O引脚都处于边界扫描链的设计,这种向量使每个初级I/O引脚在状态1、0和Z态间转换。
·TAP控制器测试向量由ASIC设计人员或DVT工程师或两者共同开发生成,用于通过TAP逻辑中每个要求的状态和扫描指令,并测试边界扫描逻辑。TAP逻辑有些错误可以被扫描测试本身所覆盖,如那些在时钟网表中的错误,但其它的必须用这些向量进行测试。
经验显示,逻辑测试向量对于错误检测范围不是很有效,因为它们不是专门针对错误的,但偶尔它们也会将一些ATPG测试范围内部或外部的错误传送至初级输出处。假如把它们放在芯片测试仪上运行,就可以使用错误模拟找出这些向量是否恰巧检测出一些检测范围以外的错误,如果能够的话就不必再手工编写测试向量将那些错误归到检测范围之内,但这需要对设计有透彻的理解且要做很多工作。
BSR向量很难用于错误模拟,原因是ASIC供应商的边界扫描工具只能读取BSDL文件,并只根据初级I/O引脚状态生成BSR向量,它不知道ASIC内部任何逻辑。图2是两个BSR组成的一个边界扫描链,用于三态初级输出引脚PO。
为了在非ATPG测试向量上进行错误模拟,应确保模拟器会产生带有这些向量的预期输出响应,并且不能有任何不匹配。使用BSR时我们可以从BSR向量中的 TMS信号值算出边界扫描链转移结束时间,对该时间而不是转移中的输出响应进行比较。错误模拟器也可以这样做,但不是自动的(监视TMS引脚数值)。此外,生成BSR向量不需要有关ASIC内部逻辑的知识(我们只对其中的错误分类感兴趣),所以要大幅增加错误检测范围不太可能。鉴于这些理由,通常不使用 BSR向量。
错误模拟的第二步是了解ATPG和错误模拟两者所得到的错误之间的区别,因为后者必须从前者的错误检测范围结果开始,之所以有区别主要源于下面一些原因:
·RAM BIST模块在ATPG中作为黑盒模型而在错误模拟中却作为真实逻辑模型,所以错误模拟能看到ATPG看不到的所有BIST模块错误,这没什么关系,只需告诉错误模拟器不要针对这些模块中的错误即可。
· 错误模拟中使用的网表可能与ATPG中使用的网表不同。例如当ATPG运行时,因为它在后端流程中处于早期阶段,所以还没对设计进行适当优化。设计布局布线完成后,将产生门和网络延迟,根据这些值,有些门可能要进行充实,甚至需要作少许设计更改,这时既可以在修改过的网表上再运行ATPG,也可以用错误模拟覆盖这些增加的错误。注意要将类似这样的不匹配报告给ASIC设计人员,确保引起足够重视。
·ATPG测试中扫描触发器是多路复用扫描型,其clk、d和si引脚是自动测试的(qn引脚不是);而在错误模拟中,这些引脚变成逻辑引脚,是错误模拟器的检测对象,必须告诉模拟器不要对这些引脚进行检测。
·如前所述,如果门级网表使用Verilog赋值语句,ATPG将把它转换为数据库中的伪缓冲器单元,而这些单元不在错误模拟器数据库中。
· 有时候仅仅为了错误模拟器必须修改设计网表,如在使用延迟单元时。图3(a)中的del_1和del_2就是这种单元,结果使clk和 we_ram_unbuf信号间的电路及其产生的波形不能在错误模拟器中直接进行模拟,这是因为we_ram_unbuf的正确波形依赖于通过两个延迟单元的延迟信号,但延迟信息是不能模拟的。在这方面不是只有错误模拟才这样,ASIC仿真和测试系统也有同样的局限。
在错误模拟中我们所能做的就是旁路掉图3(a)中clk和we_ram_unbuf信号间的电路,方法是从一个称为we_ram_unbuf_fs(_fs表示错误模拟)的附加初级输入引脚处将we_ram_unbuf波形直接送至we_logic的a3引脚,如图4。如果设计里有多个RAM,可将引脚 we_ram_unbuf_fs送至所有这些RAM。注意这个引脚和多路器只是为了错误模拟而加上的,并不用在芯片制造中。
总之,你必须了解ATPG和错误模拟之间网表的差别,并决定错误模拟的对象是什么。错误模拟数据库(包括ATPG错误检测范围结果)建立好以后,错误模拟器就可以创建它所能得到的初始错误检测范围,这可能与ATPG看到的初始错误检测范围不同,具体取决于所显示的新错误数量和确定不作为检测对象的错误数量。此外,由于将RAM模拟为灰盒以及测试数据现在可以完全传送以测试所有直接访问RAM的非扫描逻辑,错误模拟中的不可测错误要比在ATPG中少得多。
同样,非扫描触发器也不再是指定的ALWAYS0或ALWAYS1模型,事实上有些类型的不可测错误完全消失了,如像CONS_UNCNTRL_UNTESTABLE和CONS_UNOBSRV_UNTESTABLE错误,这是因为没有将初级I/O引脚限制为恒定值。
错误模拟而不能由ATPG报告,这就是CLOCK_FAULT_UNTESTABLE错误。这种错误大多产生在存贮单元(触发器和锁存器)的时钟引脚上,不可能对它们初始化,从而使不确定值传送到输出端。如图5中latch1引脚en上的恒1错误, CLOCK_FAULT_UNTESTABLE错误也产生在非时钟引脚上,如图6中mux引脚上的恒0错误。
那么在ATPG中这些引脚上会有什么类型的错误呢?因为图6非扫描触发器 register1指定为ALWAYS0模型,所以mux上所有错误都是DANGLING_UNTESTABLE。图5的latch1在BIST模块内部而没有被ATPG看到,因此时钟和使能引脚上的CLOCK_FAULT_UNTESTABLE错误最多变成可能检测到的错误。虽然输出值是不确定的,但一般它们能在测试仪上检测到,因为时钟错误最终会产生一个与预期不同的输出值,所以可从错误模拟器中排除这类错误。
错误模拟的最后一步也是最困难的:将非扫描测试向量翻译成错误模拟器所需的格式。市面上还没有这类翻译器,必须得自己写。
有些ASIC供应商使用一个24-逻辑值系统来描述工作在芯片中的测试向量。例如,如果一个输入脚得到一个值为“1”的激励,在整个模拟周期中1都不会变化;如果加在这个引脚上的激励为“/”,则在当前周期中这个值会从以前的值改变为当前值1,并在当前周期的余下时间里都保持为1。
最困难的问题是将这个24-逻辑值系统与错误模拟器所使用的4-逻辑值系统(1,0,X和Z)匹配起来。例如对于一个三态或双向引脚,如果它的控制信号是X 或改为X,引脚的值可以是24-逻辑值系统中C、E、Z、c、e和z中的一个,但在错误模拟中这个值必须是X或改为X。当控制信号是X时就是大多数逻辑和错误模拟器工作的方式,如果控制信号不是X,而三态或双向引脚是C、E、Z、c、e和z中的一个,那么在错误模拟中这个值将转换成Z。必须充分了解这一细微之处并进行正确处理,否则错误模拟输出响应将不匹配。两个系统之间的另一个区别是,24-逻辑值向量含有用于三态或双向引脚的内部控制信号,这个信号不能进入到错误模拟器使用的激励和响应文件中,但它们可以告诉翻译器什么时候三态引脚为Z值以及什么时候双向引脚改变方向,这样就能正确生成这两个文件。
编写翻译器的工作量很大,因为两个系统之间的区别数量大,而且非常细微,但这一点能够做到而且必须做到。因为错误模拟的关键是要将内部错误的影响传送至初级输出以进行观察,所以我们的目标是测试向量在转换以及被错误模拟器使用时没有输出不匹配。即使有一个输出不匹配错误模拟也是无效的,因为这表示模拟向量没有按芯片在芯片测试仪上进行测试的同样方法运行。错误模拟可以在正确的输入激励和输出响应文件生成后开始,每项测试运行结束后,标出检测到的错误,这样在后面就不用再对其进行测试了。在这种情况下,每项测试都会减少余下检测范围之外的错误。所有提供的非扫描测试运行完以后,很可能仍然有一些检测范围以外的错误。如果这些错误所在的模块必须位于错误检测范围内,就应针对这些错误用手工开发更多的测试向量,这将是一个耗时并需要多次反复的过程,但也可以从很多地方(如错误模拟工具供应商处)获取实用且经过验证的方法和有用的工具。
总之,扫描测试问题在ASIC设计中不是一个小问题,如果前期没有充分考虑到,那么到了后期将花费大量的时间和资源。所以很重要的一点是将它们作为与设计相关的事项对待,而不是与设计无关。同样重要的是,ASIC设计人员应与扫描测试新技术保持同步,因为新技术能以更容易的方法得到更高错误检测范围,并与现有扫描测试方法配合使用。
评论