(a) 门级测试综合的流程(b) 寄存器传输级测试综合的流程
图1 测试综合的流程图
无论是在门级还是在寄存器传输级进行测试综合,有关的处理都包括四个基本步骤,且这些步骤都是集成到一个基于综合的设计方法当中的。这些步骤是:可测试性方案选择,测试结构的插入,电路验证和测试程序准备。随着门级或寄存器传输级等应用的不同,这些步骤的形式和重要性也随之改变。
1 可测试性方案选择
可测试性方案是指设计者为了在设计中引入可测试性而采用的全部可测试性设计规范、结构和设计约束。在不同的设计层次上,设计者可能以不同的精确度来定义可测试性设计方案。对于门级测试综合来说,许多测试综合工具限制用户只能采用一种或几种较为固定的测试方法,如利用多路选通D触发器或电平灵敏的扫描设计LSSD来实现扫描链。理想的情况是测试综合工具既有预先定义好的、通用的可测试性方案,也允许用户在需要的情况下定义他们自己的可测试性方案。这样,一个可测试性方案是对如何实现测试的一种较高层次的考虑:诸如采用什么种类的扫描触发器,存在什么样的测试信号,是否或怎样进行时序测试,采用多少数量和什么性质的扫描链(包括边界扫描链)等。对于寄存器传输级测试综合,设计者可以在更高的层次上来描述可测试性方案。例如设计者可以指定一个实现9n跨步测试(march test)的BIST结构来检测RAM。这里并不需要作十分细致的描述,如对某个芯片上的BIST电路进行重用,而这些细节描述对于门级测试综合则是必要的。
2 测试结构的插入
这是所有测试综合方法中真正的综合步骤。软件工具所综合进去的实际测试结构与整个测试流程中测试综合所处的位置直接相关。对于门级测试综合,被综合的测试结构一般是常规的扫描设计,且这个过程是很直接的:将触发器归并到它们所属的扫描链中,然后将链中的触发器连接起来,并连接全局信号线,最后用结果电路来替代原来最初的设计。理想的情况是,一个扫描链连接工具将维持原设计的层次结构并支持所有的扫描测试方式。它应该允许用户显式地将某一存储单元(触发器)合并到扫描链中,或从链中删除有关的存储单元,定义全局信号,在可能的情况下将测试逻辑与系统逻辑相合并。该连接工具也应该允许用户基于布线信息和进行设计合并后面积的考虑,对扫描链进行重新排序。与上述情况相反,门级的边界扫描和BIST电路的综合,通常是将预先设计好的模块合并到电路网表中去,其灵活性将受到限制。对于在寄存器传输级上实现的测试综合,其结果是与产生可测试性电路有关的寄存器传输级语句。例如,对于RAM的自测试,有关的寄存器传输级代码包括:一个测试代码产生器和测试响应分析器;在测试方式下使能BIST电路和在正常操作方式下不使能BIST电路的控制语句;将它们与设计的其他部分相连接,同时加入一个测试控制器。软件工具也可以在寄存器传输级上产生边界扫描电路,包括对测试访问端口TAP和其他辅助的测试控制电路,如BIST和内部扫描链的控制电路的一个可综合的描述。在寄存器传输级上描述一个常规的扫描链是可行的,但是这样做并没有明显的好处。
3 电路验证
对于测试综合来说,两方面的验证都是同等重要的:设计者必须验证测试电路和功能电路在测试方式下和在正常的系统操作方式下都能完成预期的功能。对于门级测试综合,这里的电路验证就是对可测试性设计规范的检查。可测试性设计规范是在整个测试过程所遇到的与设计相关的测试问题的列表,包括会在ATPG、IC生产、可靠性和其他领域中引起问题的设计。一个理想的软件工具应允许用户添加有关的可测试性设计规范,同时也应允许用户删除某些规范,因为这些规范可能对某种设计方法或生产环境是不适用的。一个好的门级测试综合环境应能够针对用户选定的电路表示方式,对违反规范的情况进行提示和警告,不论这种表示方式是逻辑图、HDL描述或其他方式。但是从逻辑综合回溯到最初的寄存器传输级描述将是困难的。在寄存器传输级测试综合中,对于测试结构的验证操作比在门级更为明确。门级的测试结构验证关注的是电路是否符合于可测试性设计规则,而不是测试电路能否完成预期的功能。寄存器传输级上的测试结构验证试图修正违反可测试性设计规范的情况,而不仅仅是报告这些情况。软件工具不但可以检查边界扫描链关于IEEE 1149.1标准的兼容性,同时也能验证BIST电路能否正确地工作并获得预期的故障覆盖率。此外,验证测试电路不会影响系统逻辑的操作也是其中一项重要的内容。寄存器传输级的测试结构验证工作通常需要一个寄存器传输级模拟器的支持。
4 测试处理的准备
测试综合的最终结果既不是测试结构,也不是测试矢量,而是在电路生产过程中所要求的测试处理,以保证通过综合而生成的电路能在所有预期的测试级(园片、封装、印制板、系统和现场)都是正确的。由于软件工具、设计人员、IC生产线和制造厂家的界面没有清楚的定义,要保证这项工作的正确性需要非常细致和小心。与门级测试综合相关的测试处理准备工作分为自动测试代码生成(ATPG)和测试矢量转换两部分。绝大部分ATPG程序在实质上是非常类似的,它们都源于经典的测试算法。一个理想的ATPG程序应该是高速、精确、灵活和可验证的。速度的重要性是不言自明的;精确性是指ATPG软件能正确地区分检测到的故障、潜在检测到的故障以及各种类型的不可检测的故障。所谓潜在检测到的故障是与测试设备能否识别出一个处于三态的引腿有关的。不可检测的故障包括这样一些故障:信号输出到不用的引腿上,节点信号是一个固定值,信号不能按时序进行传输,或组合冗余等;灵活性是指ATPG软件应能支持那些不利于ATPG处理的设计技术,如异步时序电路、被选通的时钟和多时钟区域等,支持包括固定型、路径延迟、IDDQ和桥接等多种故障模型,同时能支持标准网表、库和延迟格式,从而保证电路的可重用性、巨型单元(megacell)的引入以及与时序验证工具之间的交互作用;最后,一个ATPG软件必须是可以验证的:用户能够访问软件所生成的测试矢量和故障列表,从而验证逻辑模拟和故障模拟的正确性。一个理想的测试矢量转换软件应支持串行数据格式、并行数据格式以及边界扫描描述语言BSDL等标准的表示形式。在寄存器传输级的测试综合中,测试处理准备的内容更为丰富。将寄存器传输级的验证矢量转化为测试矢量,对于芯片测试来说可能是简单的,但是对于系统测试来说则将是困难的。反之亦然。由于寄存器传输级测试结构的多样性和软件工具的不成熟,当前可用于测试方案准备的软件工具是很少的,需要针对具体的应用进行开发。虽然在系统测试中尚没有在边界扫描之上的标准化的标准,严格地遵循象IEEE 1149.1那样的标准将有利于简化测试处理准备工作。
测试综合技术正得到迅速的发展,随着其中基础技术的日益成熟,更多的寄存器传输级测试综合工具将出现在EDA市场上,更高层次的测试综合工具也会出现。当前测试综合软件最薄弱的环节是测试处理的准备,在这一领域实现标准化将是必然的趋势。