针对SoC设计的层次化扫描测试技术
芯片测试一般指的是结构测试,它的目的是为了检测芯片生产过程的缺陷(主要包括工艺缺陷、材料缺陷、老化缺陷、封装缺陷等)。由于实际中引起这些缺陷的因素非常复杂,为了能进行有效的测试,一般要对各种复杂的缺陷类型进行统一的故障建模,这就是早在1959年Eldred提出的结构测试的思想。此后,在硬件设计的不同层次,面对不同的应用背景,出现过数十种不同的故障模型,但使用最为普遍的还是单固定型故障。
可测试性作为衡量硬件设计的一个属性,是反映给芯片产生测试程序难易程度的一个量化参数,主要包括可控制性和可观测性2个方面。早期的测试是和设计分开的,测试工作只在芯片出厂后考虑,但现在的测试和设计是同时进行的,被称为可测试性设计。有很多技术可以用来提高芯片的可测试性,如存储器的结构比较规则,一般采用March算法进行测试;边界扫描结构又为芯片之间的互联测试、板级测试和系统级测试提供了便利;内建自测试也在不断地应用于存储器和逻辑器件的可测试性设计中;宏测试技术可以完成基于扫描的黑盒测试:以上这些可测试性设计技术都已经在芯片设计中得到广泛应用。
扫描测试是提高时序电路可测试性的有效方法,在工程实现中一般可分为3种:全扫描、部分扫描和分块扫描。本文针对SoC的多时钟域、多用异步逻辑、时钟门控、系统集成的特点,给出了层次化的扫描设计方案,并将该方法成功应用于一款数百万门级的SoC设计中,为量产测试提供了令人满意的测试效果。
一、工作原理
SoC是基于IP复用进行设计的,而每个IP也都具有自己的可测试性设计结构。这样,在不影响单个IP的可测试性的条件下,如何有效地利用原有的测试结构便成为测试领域的重要研究内容。下面首先介绍传统的扫描设计原理,然后详细分析本文的层次化方法及理论模型。
1、扫描设计原理
时序电路可以模型化为一个组合网络和一组具有记忆功能的器件(触发器、锁存器等)2部分,如图。中实线所示。内部扫描就是把这些记忆元件替换为可扫描的触发器,并连接成为扫描链(相当于可以移位的寄存器),扫描链的输入在芯片管脚可控,其输出在管脚可观测,从而达到对记忆元件的取值进行控制和观测的目的。如图。中虚线所示,在扫描控制有效的情况下,可以通过扫描输入口把确定的数据串行移位到扫描链中相应的单元中,也可以通过扫描输出端口串行地观测它们。
最基本的扫描触发器由一个D触发器和一个多路选择器MUX组成,如图2所示。当SE=1时,触发器的输入数据为扫描输入SI,它完成的是测试状态的串行移位功能;而当SE=0时,触发器的输入数据为正常功能状态的输入D,它完成的是正常功能。这样,通过在管脚控制SE便可以在不影响正常功能的条件下完成测试任务。由于图2中的扫描结构需要在每个触发器前加入选择器,因此对系统性能影响较大,实际应用中经常使用不影响时延的双时钟扫描结构或者电平敏感扫描结构。
2、层次化扫描设计结构
自顶向下的扫描设计方法已经不再适用于SoC的可测试性设计。如图3所示,其中的SoC中主要包括5个IP,它们中的部分模块已经完成扫描设计,我们仅了解模块外部扫描结构信息,根本无法看到IP内部的逻辑结构。因此,采用适用于SoC的自底向上的层次化扫描设计方案,主要步骤如下:
Step1。子模块的扫描设计。对于自己开发的模块和提供了RT级或门级描述的IP模块,首先进行必要的逻辑综合,这里可能采用传统的自顶向下的流程,但应该尽可能避免多时钟域的合并,扫描链的分布也尽可能平衡。由于后面还有顶层的扫描集成的操作,因此一般使用独立的扫描输入P输出管脚。
Step2。确定扫描设计方案。需要注意以下问题:a。扫描6862计算机辅助设计与图形学学报2005年输入P输出端口可以是专用的,也可以复用双向数据总线或地址总线,采用尽可能多的扫描链数可以降低测试成本;b。测试时钟的确定最好使用单独测试时钟端口,并且其数目为子模块的最大时钟域数;c。扫描链的连接实际上是多约束下的集合划分问题;d。部分逻辑(如锁相环)需要添加单独的观察管脚来进行测试。
Step3。顶层扫描设计集成。在确定扫描设计方案后,就需要进行扫描集成,有很多细节问题需要考虑:a。可测试性设计规则检查,有些规则可能导致测试失败或覆盖率下降;b。测试控制信号的匹配,主要包括测试使能、扫描使能、测试时钟、异步修复等信号;c。子模块测试时钟域合并及其他测试模式的划分。
Step4。自动向量测试生成(Automatic Test Pattern Generation, ATPG)。测试生成的目的除了需要将子模块的测试向量应用于顶层模块上,进而从整个系统的外部管脚处进行测试外,更重要的是对若干模块构成的功能单元或者整个模块生成测试文件,用于在测试仪上进行测试,它反映了设计的可测试性及扫描设计的质量。
二、关键问题
在对超大规模的SoC进行可测试性设计时,可能会出现很多违反测试规则的现象,其中绝大部分可以通过修改实现方式来解决;而有些违例是由设计本身引入的,只能通过特定的可测试性方法来处理。下面主要就时钟域合并、时钟门控、异步逻辑、存储器等方面进行讨论。
1、时钟域合并
实际系统中可能存在过多的时钟域,而又不可能建立那么多的测试时钟将它们完全分开,这样就必须对部分频率相位相近的时钟域进行合并。一般来说,单个独立IP的时钟域个数远远小于整个SoC的时钟域个数,而这些独立IP内部对时钟域的要求也比IP之间要苛刻得多,所以,在合并时钟域时,尽可能不要把IP内部的时钟域合并。例如,对于IP1。和IP2,前者有CLK1和CLK22个时钟,后者含有CLK3,CLK4和CLK53个时钟,那么在没有其他特殊要求的情况下,我们就可以将其合并成3个时钟域{CLK1,CLK3},{CLK2,CLK4}和{CLK5},而如果将{CLK1,CLK2}合并在一起,扫描链将可能出现跨时钟现象,如果不采取一些方法进行处理,是相当危险的。
2、时钟门控
时钟门控是低功耗设计的一项通用而又十分有效的方法,由于门控信号一般是由内部电路产生的,它会导致时钟在管脚不能直接可控,属于可测试性违例。一般可以通过直接在门控时钟输出端口处添加用测试控制信号控制的控制点加以解决,如图4所示。通过控制信号test-mode可以解决本来因为时钟门控问题而无法直接注入的时钟,当test-mode值为“。”时,进入测试模式,此时,直接将clkin引入到电路中去;反之,则处于正常工作模式下,时钟为与门的输出端口,可以用close信号将时钟打开和关闭,不受测试模式的影响。
3、异步逻辑
异步逻辑产生的原因有多种,为了保证较高的测试覆盖率,一般都需要进行处理。处理方法有以下3种:1)组合逻辑环。这一般也是设计者所不期望的,可以通过添加测试点或者直接打断该逻辑环,以保证测试有效性;2)异步触发器的使用。通过对触发器的setPreset端添加控制点的方法进行处理,具体方法与为门控时钟加测试控制点类似,此处略;3)触发器的数据端来自于时钟信号。只能通过修改原始设计来解决了。
4、嵌入式存储器
嵌入式存储器在芯片设计中越来越普遍,它本身的测试可以通过存储器内建自测试或宏测试的方法来进行。但是对于其周围的组合逻辑(称为阴影逻辑)却很难测试,严重影响测试覆盖率,其处理方法一般有2种:第一种是将存储器旁路,即在测试时数据输入直接写入输出端;第二种是通过专用测试管脚使得存储器的读P写控制信号在测试模式下可以直接从芯片管脚进行控制,这样我们可以将数据直接写入存储器,或从存储器直接读出确定的数据,以实现阴影逻辑可控制性与可观测性。实践证明这2种方法都是有效的,差异是前者需要添加一定的旁路逻辑开销,后者需要专用测试端口的开销。
三、设计实践
将本文方法应用于一款面向嵌入式CPU应用的具有数百万门级的SoC芯片设计中,采用了徐勇军等:SoC设计中的扫描测试技术TSMC的0.18μm的制成工艺流片。由于功能的需要,该芯片主要包含了14个IP核,大部分IP具有多个时钟域、时钟门控处理、异步逻辑及存储器,内部支持有。0个以上时钟频率同时工作。相关IP信息如表。所示(不包括内存器、锁相环等),其中属于不同的时钟域或不同有效边沿的触发器被不同的扫描链分开,所有时钟合并工作都是在设计顶层完成的,而每条链的触发器数也被限制在1000以下。
对主要的IP单元进行单独测试产生,单固定型故障的结果如表2所示,对所有可能的故障点都注入了故障,对每个故障点可能有5种测试结果,依次递减如下:1)ATPG可测点,它是覆盖率的主要贡献者,是指已经用ATPG方法产生了测试;2)可能被检测点,主要指冗余故障,由于它的检测与否不会影响芯片的成品率,因此它也是覆盖率的贡献者;3)未被检测故障,这部分故障没有被ATPG方法检测到,可能是因为时序深度或者测试时间不够等因素造成的,但如果被证明是用ATPG方法所无法检测到的故障就属于第4类了;4)ATPG不可测,主要是因为电路的可测试性不够引起的,可以通过增加测试点或其他可测试性方法进行测试;5)不可检测故障,即使增加测试点也无法检测。其中后3种是覆盖损失的主要原因。
表2中的最后2列给出了我们所使用的组合ATPG和时序ATPG2种方法的测试覆盖率,后一种方法虽然覆盖率高些,但生成的测试向量数明显高于前者,具体数目这里没有给出;除了M5,M9和M143个模块由于扫描测试不够而导致覆盖率较低外,其他模块的覆盖率基本都超过了98%,基本能够满足量产测试要求。