第5章 逻辑内建自测试 逻辑芯片测试的全过程包括4个主要步骤,即针对芯片生成测试激励(第1步),对芯片施加测试向量(第2步),获得芯片实际测试响应(第3步),以及通过与期待测试响应比较得出测试结果(第4步)。芯片测试的基本方式为向量储存型测试(stored pattern test),也就是说,第1步通过使用ATPG工具完成,而第2~4步由ATE来完成。向量储存型测试的优点是可以利用的测试向量种类丰富而且测试能力强,且故障诊断较为方便。但是,向量储存型测试的缺点是ATE需提供巨大的存储空间以保存全部测试向量,而且还需要具有高速的信号输入/输出和处理能力,导致ATE体积大、价格高,使之只能用于芯片的出厂测试而无法应用于芯片被组装入系统之后的测试。 芯片测试的另一个主要方式为内建自测试(BuiltIn SelfTest,BIST),它是一种可测试性设计(Design for Test,DFT)技术,其基本思路是对原有电路增加一些特殊设计以使其能够不借助ATE就可以对其自身主要部分进行测试。以逻辑电路为对象的内建自测试技术称为逻辑内建自测试(Logic BIST)。逻辑内建自测试的优点是不需要体积大价格高的ATE,从而可以有效地降低测试开销; 比较容易提供高质量测试所需的高速信号输入/输出及处理能力; 比较容易产生和利用极为大量的测试激励以增加检测芯片内部各种复杂缺陷的可能性,特别是在芯片被组装入系统之后也可以对芯片反复进行测试。逻辑内建自测试的缺点是需要对被测电路做一些增改,在实际设计上难度较高,而且测试向量种类和测试能力往往受到一定限制,另外故障诊断较为困难。在芯片广泛应用于航空航天、国防、汽车、银行、医疗保健、网络、电信行业等的今天,出厂时的良品芯片由于使用中的老化而产生新的缺陷的问题已成为对系统的整体可靠性的重大威胁。因此,逻辑内建自测试已经超出了单纯的芯片测试的范畴,成为提高和保证整个系统的可靠性的关键技术手段。 本章首先介绍逻辑内建自测试的基本结构,特别是得到工业界广泛应用的STUMPS(SelfTest Using a MISR and Parallel Shift register sequence generater)结构。随后,对逻辑内建自测试所要求的测试对象电路的基本设计规则和改善故障覆盖率的方法进行介绍。接下来,重点介绍适用于逻辑内建自测试实现的多种测试向量生成和测试响应分析技术,以及逻辑内建自测试常用的时序控制方法。本章末尾以一个设计实践为例,介绍使用商用Logic BIST工具进行逻辑内建自测试的所有必要步骤,以使读者对逻辑内建自测试有进一步的感性认识。 5.1基本结构 逻辑内建自测试的基本结构如图51所示,它由4个主要部分组成,即BIST对象电路,测试向量生成器(Test Pattern Generator,TPG),测试响应分析器(Test Response Analyzer,TRA)和BIST控制器。 图51逻辑内建自测试的基本结构 BIST对象电路的测试由一个BIST_Mode信号控制,当BIST_Mode=1时电路进入BIST测试模式,启动自测试的运行。BIST对象电路的核心是具有一条或多条扫描链的全扫描电路,测试向量的输入和测试响应的输出都利用扫描链。因为逻辑内建自测试下的测试向量的产生和测试响应的分析都在芯片内部进行,无须与外界发生数据交换,所以可使BIST对象电路拥有很多条扫描链,以缩短扫描链长度,从而减少测试向量的输入和测试响应的输出所需的时间。BIST对象电路的最基本要求是被测电路当中出现的未确定值(X)不能进入测试响应分析器,以保证可用简单的电路设计来实现测试响应分析。此外,BIST对象电路往往还需要加入一些叫作测试点的特殊电路,以提高测试向量生成器所产生的伪随机向量的故障覆盖率。 目前在工业界获得广泛应用的测试向量生成器(TPG)和测试响应分析器(TRA)的设计主要基于20世纪80年代由IBM公司提出的STUMPS方式。在测试向量生成方面,它利用线性反馈移位寄存器(Linear Feedback Shift Register,LFSR)来产生原始伪随机向量,再利用移相器(Phase Shifter,PS)增强其随机性后作为测试向量使用。在测试响应分析方面,它利用多输入特征寄存器(Multiple Input Signature Register,MISR)来对测试响应进行压缩以获得最终特征,再把最终特征与期待特征进行比较来决定测试结果。 BIST控制器可由一个输入控制信号(比如BIST_Start)加以启动,它的作用是生成所需的BIST时序控制信号,包括扫描驱动信号和时钟信号,以协调BIST对象电路、测试向量生成器和测试响应分析器之间的相关操作。一旦逻辑内建自测试的全部操作完成,BIST控制器可提供一个输出信号(比如BIST_End)显示测试完成,并通过另一个输出信号(比如BIST_Result)来报告测试结果是通过(Pass)还是失败(Fail)。 5.2BIST对象电路 逻辑内建自测试的BIST对象电路的核心是全扫描电路,与一般的扫描设计相比,它需要进一步遵循许多与未确定值(X)的传播有关的设计限制。这是因为任何直接或间接地传播到测试响应分析器的未确定值(X)都会使特征失去单一性,从而导致无法简单有效地得出测试结果。比如,假设在BIST测试过程当中的某个时刻的特征由8位逻辑值组成。若其中1位变成了未确定值(X),就会导致必须考虑2个特征,分别对应X=0或X=1的情况。这样,若在BIST测试过程当中不断有未确定值(X)传播到测试响应分析器,就会导致必须考虑的特征的数量爆发性地增加,致使无法用与一个期待特征进行比较的方式快速有效地确定BIST的测试结果。因此,在逻辑内建自测试的设计当中,必须对未确定值进行屏蔽,以防止它们直接或间接地传播到测试响应分析器。 除了需要对未确定值进行屏蔽之外,BIST对象电路往往还需要加入一些测试点以提高逻辑内建自测试的故障覆盖率。这是因为在电路面积开销的限制下,测试向量生成器往往只能利用构造简单的线性反馈移位寄存器所产生的伪随机向量作为测试向量,而这样的测试向量往往很难满足一些故障检测的条件,造成难以达到较高的故障覆盖率。这就需要加入一些测试点以增加伪随机向量检测故障的可能性。 5.2.1未确定值屏蔽 一般来说,在进行逻辑内建自测试时,作为测试对象的逻辑电路中有可能会出现一些未确定值发生源(X源),即在Logic BIST模式下(BIST_Mode=1)产生未确定值(X)的信号线。比如,大规模系统芯片往往同时拥有逻辑电路和内置存储器。在Logic BIST模式下(BIST_Mode=1),由于内置存储器不是测试对象而不受任何控制,因此其输出值往往为未确定值,从而使其输出线成为X源。能够直接或间接地将其未确定值(X)传播到测试响应分析器(TRA)的任何X源,都必须使用相应的可测试性设计的手法进行未确定值屏蔽(X屏蔽)。 图52是几种基本的X屏蔽方法,用于在Logic BIST测试模式下(BIST_Mode=1)对X源进行屏蔽。图52(a)为0控制点,它在Logic BIST测试模式下(BIST_Mode=1)通过将Z强制设置为0来屏蔽X源的未确定输出; 图52(b)为1控制点,它在Logic BIST测试模式下(BIST_Mode=1),通过将Z强制设置为1来屏蔽X源的未确定输出; 图52(c)为旁路控制点,它在Logic BIST测试模式下(BIST_Mode=1),通过将Z切换到某个可变化的外部输入信号来屏蔽X源的未确定输出; 图52(d)为利用逻辑门的旁路控制点,它在Logic BIST测试模式下(BIST_Mode=1),通过将Z切换到电路内部的某个逻辑门的输出信号来屏蔽X源的未确定输出; 图52(e)为利用扫描单元的旁路控制点,它在Logic BIST测试模式下(BIST_Mode=1),通过将Z切换到某个扫描单元的输出信号来屏蔽X源的未确定输出。0控制点和1控制点虽然都可以屏蔽掉未确定值,但是控制点的输出Z分别被固定为0和1,对提高故障覆盖率不利。旁路控制点通过用某个逻辑值可变的信号来驱动控制点的输出Z,使之有助于故障覆盖率的提高; 特别是利用扫描单元的旁路控制点的输出Z出现各种逻辑值变化的可能性最大,因此也就最有助于故障覆盖率的提高。 图52X屏蔽的基本方法 在准备BIST对象电路时,应该根据每个X源的特征和性质,选择包括上述基本方法在内的最佳X屏蔽方法,以期望在实现X屏蔽功能的同时,尽量减少电路面积开销和对电路时序的影响。下边介绍几种典型的X源屏蔽方法。 模拟电路模块。芯片当中的模拟电路模块的典型例子是模/数转换器(AnalogtoDigital Converter,ADC)。在BIST测试模式下,任何有可能出现未确定值(X)的模拟电路模块的输出都必须强制设置为确定值。这可以通过插入0控制点、1控制点、旁路控制点来实现。 存储器和非扫描存储单元。对于芯片当中的存储器(包括DRAM、SRAM、闪存等)和非扫描存储单元(包括D触发器、D锁存器等),常用旁路控制点来屏蔽来自它们的未确定值(X)。另一种方法是使用初始化序列将存储器或非扫描存储单元设置为某种确定的状态,这样可以避免增加旁路控制点导致的关键通路的时延增加,但是必须确保在整个BIST操作过程中存储状态都不会遭到损坏。 组合反馈环路。应该尽量避免在电路设计当中使用组合反馈环路。如果这样做不可避免的话,则必须在组合反馈环路上插入0控制点、1控制点或旁路控制点,以保证在BIST测试模式下切断每个组合反馈环路。 异步置位/复位信号。逻辑内建自测试的基础是逻辑电路的扫描设计,因此如果异步置位/复位信号在扫描移位操作期间变为有效,会导致扫描链中的测试数据遭到破坏。这个问题可以使用如图53所示的方法解决。为了在扫描移位操作期间(SE=1)使图53(a)所示异步复位信号RL无效(RL=1),图53(b)中增加了一个由SE控制的OR门,使RL在扫描移位操作期间(SE=1)只能取1,从而防止扫描存储单元SFF2被强制复位。 图53X异步复位信号的处理方法 三态总线。当多个驱动单元(通常为三态门)向同一条总线上施加不同的逻辑值时,就会导致总线竞争,从而产生过大电流而对电路造成损坏。如图54(a)所示,在电路正常工作时会通过对EN1和EN2的适当控制来保证任何时刻只有一个三态门打开。但是在BIST测试模式下(BIST_Mode=1),由于伪随机向量的使用,在移位(SE=1)和捕获(SE=0)操作期间都可能导致两个三态门同时打开而产生总线竞争。为了解决这个问题,可利用图54(b)的电路设计来确保在每次移位(SE=1)或捕获(SE=0)操作期间仅允许一个三态门来驱动总线。 图54针对三态总线的X屏蔽方法 假通路。假通路(false path)是在电路正常工作状态下不会被激活的通路,因此它们通常不符合时序要求。但是在BIST测试模式下,由于伪随机向量的使用,假通路有可能被激活,导致针对时延故障的逻辑内建自测试错误地报告测试失败,从而使良品芯片无法通过测试。为避免这个问题,每个假通路应插入一个0控制点或1控制点以屏蔽其影响。 关键通路。关键通路(critical path)是对时序敏感的功能路径,它的时延决定整个电路的工作速度,因此应尽可能避免在关键通路上添加其他逻辑门,以防止增加它的时延。为了屏蔽关键通路中的未确定值(X),可在关键通路上向选定一个门(例如NOT门、NAND门或NOR门)并为其添加一根输入线,以最大限度地减少在关键通路上的时延增加。如图55所示,可以选择一个NOT门(图55(a)),在BIST测试模式下(BIST_Mode=1)把它变成一个0控制点(图55(b))或一个1控制点(图55(c))。 图55针对关键通路的X屏蔽方法 多周期通路。多周期通路(multiplecycle path)是正常的功能通路,但是信号通过时需要两个或更多时钟周期。与假通路类似,它可能导致针对时延故障的逻辑内建自测试错误地报告测试失败,从而使良品芯片无法通过测试。为避免这个问题,每个多周期通路应插入一个0控制点或1控制点以屏蔽其影响。 悬空的输入或输出端口。在BIST测试模式下,任何外部输入或外部输出端口都不能悬空,这些端口必须正确连接到电源或接地。另外,也必须避免任何内部的模块有悬空的输入,因为这有可能将未确定值(X)传播到测试响应分析器(TRA)。 双向I/O端口。双向I/O端口在电路设计中很常见。为了正确地进行逻辑内建自测试,应确保每个双向I/O端口的方向在BIST测试模式下(BIST_Mode=1)固定为输入或输出。图56是一个将双向I/O端口强制设为单向输出的例子。 图56将双向I/O端口强制设为单向输出的例子 5.2.2测试点插入 逻辑内建自测试通常使用伪随机向量作为测试激励,这会造成电路中的某些故障很难被检测。其原因之一是在施加伪随机向量时,被测电路中的某些点常常固定在某个逻辑值(0或1),也就是说那些点的可控制性(controllability)极低。另一个原因是在施加伪随机向量时,电路中的某些点的逻辑状态(0或1)非常难以反映在测试响应中,也就是说那些点的可观察性(observability)极低。为了提高在施加伪随机向量时的可控制性和可观察性,可以在电路中加入一些测试点(test point),包括用于提高可控制性的控制点(control point)和用于提高可观察性的观察点(observe point)。 图57为插入控制点的一个例子。图57(a)中的C1和C2为两个逻辑电路,其中C1的输出值在施加伪随机向量时基本为1,造成C2中的一些故障不能被检测。图57(b)是一个基于AND门的控制点,它利用C1的输出值基本为1使得扫描单元的输出值进入C2。因为扫描单元输出值为0和1的可能性都很大,使得各种逻辑值得以输入C2,这有助于C2中的故障检测。图57(c)是一个基于MUX的控制点,它在BIST测试模式下(BIST_Mode=1)把扫描单元的输出值直接送进C2,使得各种逻辑值得以输入C2,从而有助于C2中的故障检测。 图57插入控制点的例子 图58为插入观察点的一个例子。图58(a)中的C1和C2为两个逻辑电路,其中C1的输出值很难被反映在测试响应中,造成C1中的一些故障的效果观察不到而不能被检测。图58(b)是一个专用观察点,它直接把C1的输出接到一个观察用的扫描单元,从而有助于C1中的故障检测。图58(c)是一个共享观察点,C3和C4也是两个逻辑电路,而且C3的输出值也很难被反映在测试响应中。如图58(c)所示,C1和C3的输出通过XOR门接到一个观察用的扫描单元,这样做对C1和C3中的故障检测都有帮助,而且所需的硬件开销也较低。 图58插入观察点的例子 5.2.3ReTiming 如图51所示,在进行逻辑内建自测试的设计时,若把测试向量生成器(TPG)和测试响应分析器(TRA)放置在距离BIST对象电路较远的地方,在TPG和扫描链输入端之间以及在扫描链输出端和TRA之间有可能出现时钟偏移(clock skew),造成测试向量和测试响应不能正确传输。为了避免这种问题并简化设计实现,可以在TPG和扫描链输入端之间以及在扫描链输出端和TRA之间插入ReTiming电路,它包含一个下降沿触发D触发器和一个上升沿触发D触发器。图59的例子显示在扫描链的每一端使用两个触发器的ReTiming逻辑,其中的3个时钟(CK1,CK2,CK3)可属于同一个时钟树。 图59ReTiming的例子 5.3测试向量生成 逻辑内建自测试往往使用由线性反馈移位寄存器(Linear Feedback Shift Register,LFSR)所构成的测试向量生成器(TPG),以产生穷举测试、伪穷举测试和伪随机测试所需的测试向量。穷举测试针对具有n个输入的被测组合电路生成所有可能的2n个测试向量,这在n很大的情况下非常耗时。当具有n个输入的被测组合电路的每个输出最多取决于w个输入时,可以使用伪穷举测试,它生成2w或2k-1个测试向量(wn,共有2L-n种可能的方式来产生n位特征,而其中只有一个是正常特征。由于L位输出序列中总共有2L-1个错误输出序列,因此使用n段SISR进行串行特征分析(Serial Signature Analysis,SSA)时发生错误屏蔽的概率为 PSSA(n)=(2L-n- 1)/(2L- 1) 如果Ln,则PSSA(n)≈2-n当n=20时,PSSA(n)<2-20=0.0001%。这也就是说,SISR的段数较多(>20)时,发生错误屏蔽的概率非常低,对测试质量影响不大。 5.4.2并行特征分析 在逻辑内建自测试当中应用最广的特征分析技术是并行特征分析(Parallel Signature Analysis,PSA),它利用多输入特征寄存器(MultiInput Signature Register,MISR)压缩来自具有多个输出的测试对象电路的测试响应。图515显示n段MISR的一般构成,它使用n个XOR门将n个L位输出序列(M0~Mn-1)同时压缩到一个n段模块化LFSR中。 图515n段MISR的一般构成 n输入MISR可以表述为单输入SISR,其有效输入序列M(x)和有效错误多项式E(x)可分别表示如下: M(x)=M0(x)+xM1(x)+…+xn-2Mn-2(x)+xn-1Mn-1(x) E(x)=E0(x)+xE1(x)+…+xn-2En-2(x)+xn-1En-1(x) 图516(a)是一个4段MISR,它的特征多项式为f(x)=1+x+x4。假设这个4段MISR的压缩对象为4个5位输出序列: M0={10010},M1={01010},M2={11000}和M3={10011}。根据这些信息,MISR的特征R可以计算为{1011}。使用M(x)=M0(x)+xM1(x)+x2M2(x)+x3M3(x),可以得到M(x)=1+x3+x4+x6+x7或M={10011011}。如图516(b)所示,这与在如图514(b)中的4段SISR的例子中的数据流M相同。 图5164段MISR的例子 假设在n段MISR中有m个L位输出序列要压缩,其中L>n≥m≥2。并行特征分析的错误屏蔽概率为 PPSA(n)=(2m(L-n)-1)/(2mL -1) 如果Ln,PPSA(n)≈2-n。当n=20时,PPSA(n)<2-20=0.0001%。这表明当Ln时,PPSA(n)主要取决于n。因此,增加MISR段数或使用段数相同但具有不同特征多项式f(x)的MISR可以大幅降低错误屏蔽概率。 5.5测试时序控制 逻辑内建自测试可以通过将ATE的大多数功能转移到被测电路上来降低测试成本,其最关键且最困难的部分是如何设计测试时序控制,因为它关系到时钟设计。下面简单介绍低速测试和实速测试所需的测试时序控制方式。 5.5.1低速测试 低速测试(slowspeed test)是指测试向量的输入结束时刻到测试响应的捕获时刻之间的时间间隔大于被测电路的工作时钟周期,它用来检测时钟域之间和时钟域之内的结构故障(如固定故障和桥接故障)。低速测试的特点是在捕获针对每个测试向量的测试响应时,对每个时钟域仅需要施加一个捕获脉冲。 图517是低速测试的时序控制的例子,其中CK和SE分别是测试时钟和扫描使能信号。首先,把SE设置为1以进入移位窗口(shift window),并施加与扫描链长度(即构成扫描链的扫描单元的总数)相同数目的移位脉冲,完成测试向量的输入。随后,把SE设置为0以进入捕获窗口(capture window),并施加一个捕获脉冲(C),这样可以检测电路内的结构故障。如图517所示,在进行低速测试的时序控制设计时应该注意适当调整时延d1(最后一个移位脉冲Sn与捕获脉冲C之间的时间间隔)和d2(捕获脉冲C与下一个移位窗口的第一个移位脉冲S1之间的时间间隔)以满足各个扫描触发器的时序要求。值得注意的是,d1和d2都不需要太短,以便SE可以有充足的时间从1变化到0(进入捕获窗口)和从0变化到1(进入移位窗口)。也就是说,用于低速测试的SE可以是低速信号,所以比较便于在设计中实现。 图517低速测试的时序控制 5.5.2实速测试 实速测试(atspeed test)是指逻辑跳变产生的时刻到测试响应捕获的时刻之间的时间间隔与被测电路的工作时钟周期相同,它用来检测时延故障(如路径时延故障和跳变时延故障)。实速测试可以通过移位激发(LaunchonShift,LoS)或捕获激发(LaunchonCapture,LoC)的方式来实现。 图518是基于移位激发的实速测试的时序控制的例子,其中CK和SE分别是测试时钟和扫描使能信号。首先,把SE设置为1以进入移位窗口(shift window),并施加移位脉冲。随后,把SE设置为0以进入捕获窗口(capture window),并在捕获窗口施加一个捕获脉冲C,而且保证最后一个移位脉冲Sn的到达时刻和在捕获窗口施加的一个捕获脉冲C的到达时刻之间的时间间隔d1与被测电路的工作时钟周期相同。如图518所示,若最后一个移位脉冲Sn和它之前的移位脉冲Sn-1使扫描单元SC1输出不同的逻辑值,则扫描单元SC1的输出端会在时刻T1(最后一个移位脉冲Sn的到达时刻)产生一个逻辑跳变。假设这个逻辑跳变可以沿路径P(由一个或多个逻辑门构成)传播到另一个扫描单元SC2的输入端。由于扫描单元SC2在时刻T2(捕获脉冲C的到达时刻)进行捕获,而且T1和T2的时间间隔d1与被测电路的工作时钟周期相同,所以路径P上的时延故障可以被检测。值得注意的是,若被测电路的速度很快,则d1非常短,因此SE必须高速地从1变化到0(进入捕获窗口)。也就是说,用于移位激发(LoS)方式的SE是与时钟信号同等的高速信号,设计实现比较困难。但是,LoS方式的故障覆盖率一般比较高。由于LoS方式利用移位窗口的最后两个移位脉冲造成同一个扫描单元的输出值的变化来激发逻辑跳变,因此移位激发也被称为偏载(skewedload)。请注意,为了进入移位窗口,SE只需低速地从0变化到1。也就是说,尽管d1往往需要很短,但是d2不用太短,因此SE可以有充足的时间从0变化到1(进入移位窗口)。 图518基于LoS的实速测试的时序控制 图519是基于捕获激发(LoC)的实速测试的时序控制的例子,其中CK和SE分别是测试时钟和扫描使能信号。首先,把SE设置为1以进入移位窗口(shift window),并施加移位脉冲。随后,把SE设置为0以进入捕获窗口(capture window),并在捕获窗口施加两个捕获脉冲C1和C2,而且保证这两个捕获脉冲之间的时间间隔d与被测电路的工作时钟周期相同。如图519所示,若最后一个移位脉冲Sn和第1捕获脉冲C1使扫描单元SC1输出不同的逻辑值,则扫描单元SC1的输出端会在时刻T1(捕获脉冲C1的到达时刻)产生一个逻辑跳变。假设这个逻辑跳变可以沿路径P(由一个或多个逻辑门构成)传播到另一个扫描单元SC2的输入端。由于扫描单元SC2在时刻T2(捕获脉冲C2的到达时刻)进行捕获,而且T1和T2的时间间隔d与被测电路的工作时钟周期相同,所以路径P上的时延故障可以被检测。值得注意的是,d1和d2都不需太短,因此SE可以有充足的时间从1变 图519基于LoC的实速测试的时序控制 化到0(进入捕获窗口)和从0变化到1(进入移位窗口)。也就是说,用于LoC方式的SE可以是低速信号,比较便于在设计中实现。但是,LoC方式的故障覆盖率一般不如移位激发(LoS)。因为LoC方式在捕获窗口施加两个捕获脉冲,所以它也被称为双重捕获(double capture)。 5.6实例介绍 本节简单地介绍一个利用商用软件工具(Tessent)进行逻辑内建自测试(Logic BIST)设计的实例,以便读者对本章的内容 图520EDT/Tessent LogicBIST 模块插入的流程 有一些具体的感知。这个实例是运用tsdb流程在RTL设计中插入hybrid tklbist测试模块。图520包含Tessent工具中插入测试模块的流程,其基本步骤如下。 A1. 准备好在rtl1 阶段插入mbist电路之后的设计: 这些设计包括rtl1阶段生成的Verilog设计,icl、pdl、tcd文件,以及在rtl2 阶段加载进来的用于插入hybrid tklbist的测试模块。 A2. 定义dft信号: 该信号用于edt和lbist电路的控制。 A3. 创建dft specification: 定义要插入的occ、edt、lbist测试模块的配置。 A4. 插入测试电路: 根据dft specification的定义插入电路并将修改后的设计信息以及插入模块的信息保存在tsdb中,保存下来的文件包括它们的verilog、icl、pdl、tcd文件。 A5. 抽取整个设计的连接关系: 保存为icl文件。 A6. 创建pattern specification: 定义测试模块的测试向量的性质。 A7. 生成测试向量: 根据pattern specification的定义生成测试向量。 A8. 对测试向量进行仿真: 验证插入的测试电路以确定其功能是否正常。 在设计中插入hybrid EDT/Tessent LogicBIST测试模块时用到的主要操作命令如下。 B1. 通过命令行启动Tessent Shell,其默认模式是配置(Setup)模式。 $ tessent -shell B2. 通过set_context 命令,将工具的context设成在RTL级修改设计,插入测试电路的环境。 SETUP> set_context dft -rtl -design_id rtl2 B3. 通过set_tsdb_output_directory定义保存修改后的设计以及其他输出文件的tsdb目录位置。 SETUP> set_tsdb_output_directory ../tsdb_outdir B4. 通过read_design piccpu design_id rtl1,工具自动在tsdb目录下寻找并加载rtl1阶段修改后的设计信息。 SETUP> read_design piccpu -design_id rtl1 B5. 通过read_cell_library命令载入标准单元模拟库和存储器模拟库。 SETUP> read_cell_library ../lib/tessent/adk.tcelllib ../lib/tessent/picdram.atpglib B6. 通过set_current_design命令设置工具处理的当前设计。 SETUP> set_current_design piccpu B7. 通过add_dft_signal添加dft信号用于memory bypass控制和clock控制。 SETUP> add_dft_signal ltest_en memory_bypass_en tck_occ_en SETUP> add_dft_signal edt_update -source_node {edt_update } SETUP> add_dft_signal test_clock -source_node test_clock SETUP> add_dft_signal edt_clock shift_capture_clock -create_from_other_signals B8. 通过add_dft_signal添加dft信号用于HTKLB电路控制。 SETUP> add_dft_signals control_test_point_en observe_test_point_en x_bounding_en SETUP> add_dft_signals int_ltest_en ext_ltest_en int_mode ext_mode B9. 通过set_dft_specification_requirements logic_test on定义逻辑测试的需求,后续通过process_dft_specification插入逻辑测试电路。 SETUP> set_dft_specification_requirements -logic_test on B10. 添加min occ模块到当前设计中用于lbist 测试。 SETUP> add_core_instances -instances [get_instances *_tessent_sib_sti_inst] B11. 通过set_system_mode命令,将系统模式切换到Analysis 模式,该模式进行电路扁平化、电路学习和设计规则验证。 SETUP> set_system_mode analysis B12. 通过set spec [create_dft_specification sri_sib_list {occ edt lbist } ] 创建dft specification wrapper,并保存在变量中,后续可以修改自定义插入的occ、edt、lbist电路的配置。 ANALYSIS> set spec [create_dft_specification -sri_sib_list {occ edt lbist } ] B13. 通过read_config_data in $spec from_string修改dft specification,定义要插入设计中的OCC 模块的配置。 ANALYSIS> read_config_data -in $spec -from_string { Occ { ijtag_host_interface: Sib(occ); capture_trigger: capture_en; static_clock_control: both; Controller(clk) { clock_intercept_node: clk; } Controller(ramclk) { clock_intercept_node: ramclk; } } } B14. 通过read_config_data in $spec from_string修改dft specification,定义要插入设计中的Hybrid TK/LBIST controller和NCPindexDecoder的配置。 ANALYSIS> read_config_data -in $spec -from_string { LogicBist { ijtag_host_interface: Sib(lbist); Controller(c0) { burn_in : on ; pre_post_shift_dead_cycles : 8 ; SingleChainForDiagnosis { Present : on ; } ShiftCycles { max: 40; hardware_default: 33 ;} CaptureCycles { max: 4; } PatternCount { max: 10000; hardware_default : 1024 ; } WarmupPatternCount { max : 512;} ControllerChain { segment_per_instrument : off; present : on; clock : tck; } Connections { shift_clock_src: clk; scan_en_in : scan_en; controller_chain_enable: piccpu_rtl1_tessent_tdr_sri_ctrl_inst/HTKLB_CCM_EN ; } } NcpIndexDecoder{ Ncp(clk_occ_ncp) { cycle(0): OCC(clk); cycle(1): OCC(clk); } Ncp(ramclk_occ_ncp) { cycle(0): OCC(ramclk); cycle(1): OCC(ramclk); } Ncp(ALL_occ_ncp) { cycle(0): OCC(clk) ,OCC(ramclk) ,piccpu_rtl1_tessent_sib_1 ; } Ncp(sti_occ_ncp) { cycle(0):piccpu_rtl1_tessent_sib_1 ; cycle(1):piccpu_rtl1_tessent_sib_1 ; } } } } B15. 通过read_config_datain $spec from_string修改dft specification,定义要插入设计中的EDT controller的配置。 ANALYSIS> read_config_data -in $spec -from_string { EDT { ijtag_host_interface : Sib(edt); Controller (c0) { Compactor { type : basic ; } longest_chain_range : 20,60 ; scan_chain_count : 10 ; input_channel_count : 1; output_channel_count : 1; ShiftPowerOptions { present : on ; min_switching_threshold_percentage : 15 ; } LogicBistOptions { misr_input_ratio : 1 ; chain_mask_register_ratio : 1 ; ShiftPowerOptions { present : on ; default_operation : disabled ; SwitchingThresholdPercentage { min : 25 ; } } } } } } B16. 通过process_dft_specification按照定义在dft specification中的occ、edt、lbist的配置将occ、edt、lbist电路插入当前设计中。 ANALYSIS> process_dft_specification B17. 通过extract_icl抽取ijtag network,并生成修改设计之后的icl文件。 INSERTION> extract_icl B18. 通过create_pattern_specification生成当前插入的测试模块(ijtag、edt、occ、lbist)的pattern specification。 SETUP> create_pattern_specification B19. 通过process_pattern_specification验证pattern specificaiton中的定义并生成当前测试模块(ijtag、edt、occ、lbist)的Verilog格式测试向量。 SETUP> process_pattern_specification B20. 通过set_simulation_library_sources定义仿真单元库的存放位置。 SETUP> set_simulation_library_sources -v {../lib/verilog/adk.v} -y ../lib/verilog -extension v B21. 通过run_testbench_simulations验证测试模块的测试向量是否正确。 SETUP> run_testbench_simulations B22. 通过run_synthesis generate_script_only 创建综合的脚本用于后续的综合过程。 SETUP> run_synthesis -generate_script_only SETUP> write_design_import_script../03.synthesis/piccpu.dc_shell_import_script –replace B23. 退出Tessent Shell。 SETUP> exit 5.7本章小结 逻辑内建自测试通过对原有电路增加一些特殊设计,使其不借助ATE就可以自行对其主要部分进行自测试。逻辑内建自测试的优势在于不需要体大价高的ATE可有效降低测试开销,比较容易提供高质量测试所需要的高速的信号输入/输出和处理能力,比较容易产生和利用极为大量的测试激励来增加检测芯片内缺陷的可能性,而且在芯片装入系统之后亦可进行反复测试,从而提高系统在使用过程中的可靠性。 本章介绍了逻辑内建自测试的4个主要部分,即BIST对象电路、测试向量生成器(TPG)、测试响应分析器(TRA)和BIST控制器。BIST对象电路需要对未确定值(X)进行屏蔽,而且还需插入测试点以提高故障覆盖率; 测试向量生成器主要由LFSR生成的伪随机向量来作为测试向量; 测试响应分析器主要利用MISR对测试响应序列进行压缩以获得特征; 时序控制需根据测试对象要求和设计能力选择最适合的方式。 随着芯片越来越广泛地应用于航空航天、国防、汽车、银行、医疗保健、网络、电信行业等关键领域,出厂时的良品芯片由于老化而产生故障的问题已成为系统整体可靠性的重大威胁。目前,逻辑内建自测试在降低测试功耗,提高测试质量,改进故障诊断能力等方面的研发不断深化。逻辑内建自测试越来越超出单纯的芯片测试的范畴,成为保证系统可靠性的必不可少的关键技术手段。 5.8习题 5.1针对由3个三态门构成的三态总线设计一个独热(onehot)解码器,以便在Logic BIST模式(BIST_Mode=1)下避免发生总线竞争,从而防止过大电流对电路造成损坏。 5.2针对双向I/O端口,设计一个X屏蔽电路,使之在Logic BIST模式(BIST_Mode=1)下被强制设置为输入。 5.3图521中的逻辑值为该LSFR的初始状态,请给出该LSFR的输出序列。 图521LSFR的输出序列分析 5.4图514(a)是一个特征多项式为f(x)=1+x+x4的4段单输入特征寄存器(SingleInput Signature Register,SISR)。假设某故障f存在于被测电路当中,其输出序列为Mf={11111111}。试问该故障f是否可被检测? 参 考 文 献 [1]FUJIWARA H.Logic testing and design for testability[M].Cambridge,MA: The MIT Press,1985. [2]ABRAMOVICI M,BREUER M A,FRIEDMAN A D.Digital systems testing and testable design[M].New York: Computer Science Press,1990. [3]CROUCH A L.Designfortest for digital ICs and embedded core systems[M].Upper Saddle River,NJ: Prentice Hall PTR,1999. [4]BUSHNELL M L,AGRAWAL V D.Essentials of electronic testing for digital,memory and mixedsignal VLSI circuits[M].Boston: Kluwer Academic Publishers,2000. [5]WANG L T,WU C W,WEN X.VLSI test principles and architectures: Design for testability[M].San Francisco: Elsevier,2006.