美国专利申请号2002/0069385公开一种测试具有多个时钟域的集成电路的方法。
测试电路的常规方式是使用扫描链技术,用于测试具有逻辑电路和触发器的电路,所述触发器具有连接到逻辑电路的工作输入和输出。在测试期间,将该电路被切换到使触发器临时从它们的工作输入断开的模式并被切换以形成移位寄存器。测试输入码(test input pattern)通过移位寄存器进入,从而每个触发器接收测试码的相应位。接着,在一个时钟周期内将触发器切换回到它们的正常工作输入和输出,以便捕获逻辑电路对触发器中的测试码的响应。随后,再次切换触发器以形成移位寄存器,通过该移位寄存器提取逻辑电路的捕获响应。
要实现特定电路的经济的和可靠的测试,需要一组电路专用的测试码。用于选择若干组输入码的测试设计技术本身是已知的。测试设计技术的任务是为了找到一组具有最小数量的测试码,从而响应至少一个测试码而将可观测到被选组的故障的每个的效应。一组故障例如是在逻辑电路的所有电路节点上的一组“固定”故障,由于这个故障使电路节点将保持在固定逻辑电平上,而与逻辑电路的输入信号无关。为了测试固定故障,一组测试码必须包括若干个码,从而通过至少一个测试码使每个电路节点驱动到与可能的固定值相反的逻辑值,并且使得在该节点上的逻辑值影响电路的可观测响应。另一方面,该组中的测试码的数量应该最小化,这是因为当测试输入码的数量需要增加时,集成电路的测试时间增加,因此成本也增加了。
已知的测试设计技术采取具有单个时钟的电路来捕获测试响应。然而,现代集成电路通常包括多个时钟域。就是说,它们采用多个不同的时钟信号,而在不同时钟信号之间并不呈现预定相关的定时关系。每个时钟信号给相应的一组触发器定时。不同组之间的接口电路保证这些组之间的数据传输不取决于时钟信号的准确定时关系。不同时钟域的存在引起了测试的问题。在触发器中被捕获的响应数据的值甚至在无故障集成电路中也可以变得不确定,其中所述触发器是用从一个域开始的时钟进行定时的,并取决于另一时钟域中的时钟定时。
美国专利申请号2002/0069385公开了对于多时钟域电路可以进行如何可靠的测试。在该电路中,这种可行性的产生使得在响应测试输入数据的捕获期间、至可选时钟域的触发器的时钟信号无效。在这种方式中,可以产生在测试响应数据取决于仅一个时钟域的启动时钟信号的测试条件,从而除去了不确定性。原则上,通过一次只启动一个时钟域的时钟信号,可以保证可靠的测试。
然而,美国专利申请号2002/0069385提出,一次只启动一个时钟域的时钟信号不是在相同时钟域内测试连接触发器的逻辑电路中的故障所必须的。可以在所有时钟信号都被启动的同时测试这些故障。因此,可以并行测试不同时钟域中的故障,这减少了所需测试码的数量,并由此减少了测试时间和测试成本。在启动所有时钟域的时钟信号的同时不能可靠测试的故障可以通过使除了一个相关域以外的其它所有域的时钟信号都无效来进行测试。
通过使用技巧,可以使用常规单一时钟域测试码产生软件来产生也能用于测试这种类型的多时钟域电路的所需测试码组。假设这些测试码包括若干个时钟状态信号,这些时钟状态信号表示哪些时钟域将被启动用于捕获对测试码的响应。通过产生用于“虚拟”电路的测试码,使得可以使用常规测试码产生软件,所述“虚拟”电路的设计适合于根据被测电路的实际设计,而不是用于实际设计。
这种适应是通过添加若干个电路来实现的,使得在该虚拟电路中,取决于时钟定时的信号的效果呈现出在时钟状态信号的控制下是看不见的,如果不禁止相关时钟。这迫使常规测试码产生软件包括具有使被选时钟域无效的时钟状态信号的值的测试码。因此,常规测试码产生软件可以继续运行,好像只有单个时钟域。对于每个得到的测试码,确定响应的哪一部分表示附加虚拟电路中的故障(可能引起测试响应位中的失常的电路的确定是常规测试设计技术的标准选项)。这些响应部分由于测试目的而被忽视,因为在实际电路中它们受到定时不准确的影响。
人们起初认为,这种技术不需要很多附加测试输入码,因为希望连接在由不同时钟进行定时的触发器之间的逻辑电路具有有限的复杂性。然而,实际上已发现,很多逻辑电路需要相当多的附加数量的测试码,因而相应地导致测试时间显著增加。
图1示意性地表示具有多个触发器单元10a-c、11、一群逻辑电路12(表示为一个盒子)和测试控制电路15的可测试电路的例子。功能性触发器单元10a-c具有耦合到逻辑电路12的工作输入和输出。此外,触发器单元10a-c、11具有若干个串联移位输入和输出,它们被连接在扫描链中并具有输入14和输出16。
图1a表示可用在图1的电路中的触发器单元10的实施例。每个单元10包括多路复用器112和触发器110。多路复用器112具有耦合到单元10的输入和耦合到前一单元的触发器110的数据输出上的若干个输入。在每个单元10中,多路复用器112的输出连接到单元10的触发器110的数据输入上。触发器110的数据输出形成单元的数据输出。触发器110用该单元的时钟信号来定时。测试控制信号控制单元10的多路复用器112,以便响应时钟信号,利用逻辑电路12交换输入和输出数据,或数据从一个单元转移到另一个单元。可选地,可以将若干个附加的触发器插入到触发器110之间,并且使附加的触发器被定时在触发器110的定时之间。
该电路包括多个时钟域,每个时钟域包含触发器单元10a-c、11的相应的一组,并且每个触发器具有用于相应的时钟信号的时钟输入CLKa、CLKb、CLKc。提供时钟启动门18、19,这样可以禁止来自输入CLKa、CLKb、CLKc中选择的输入的时钟。当测试控制电路15表示应该产生启动信号时或者当来自时钟域控制触发器单元11的数据表示时钟信号应该通过时,OR门19产生相应时钟域的时钟启动信号。当已经产生启动信号时,AND门18使来自输入CLKa、CLKb、CLKc的时钟信号通过。
应该理解的是,图1和1a的电路被示出作为一个电路的示例,该电路具有在测试期间可选择地被启动的扫描链和若干个时钟域。准确的实施与本发明的无关。
在电路的工作中,测试控制电路15控制是否该电路工作在正常方式和测试方式。在正常方式下,触发器单元10a-c从逻辑电路12接收数据和向逻辑电路12输送数据。时钟信号CLKa、CLKb、CLKc施加于触发器单元10a-c。不需要在时钟信号之间有预定的定时关系:时钟信号可以来自于不同的振荡器,这些振荡器例如被锁定到某个时钟源上。触发器单元10a-c中的数据在由施加于触发器单元10a-c的时钟信号CLKa、CLKb、CLKc确定的时间点上进行更新。
在原则上,逻辑电路12可以包含若干个内部时钟域逻辑电路,这些内部时钟域逻辑电路具有直接、或经过其它逻辑电路间接地耦合到只接收相同单一时钟信号CLKa、CLKb、CLKc的触发器单元10上的逻辑输入和输出。其它逻辑电路可以是连接到来自一个以上时钟域的触发器单元10上的域间逻辑电路,例如,具有耦合到一个时钟域的触发器单元10a上的一个或多个输入以及耦合另一时钟域的触发器单元10b的输出(不同输入,在多个输入的情况下,也可以利用不同延迟、经过不同逻辑电路连接到一个时钟域的触发器单元10a上),或者具有耦合到来自不同时钟域的触发器单元10a、b的不同输入。
在逻辑电路12中可包含本身已知的同步或握手电路,以便控制这种多域逻辑电路的定时。
图2表示在测试模式下操作电路的测试系统。测试系统包含测试码选择器20、测试数据信号发生器22和被测电路24,被测电路24包含图1的电路。测试码选择器20具有用于发送选择码和期望响应信号给发生器22的输出。发生器22具有测试数据输入/输出26、和耦合到测试输入14、测试输出16和被测电路24的一个或多个时钟输入的时钟输出28。尽管分开示出了测试码选择器20和发生器22,并且在这两者之间具有连接,应该理解的是,实际上它们可以是同一设备的部件,或者可替换地,测试码选择器被实现在通用计算机中,所述计算机将一组测试码经过网络、或使用载有限定该组测试码的信息的一个或多个盘、磁带等发送给包含发生器22的测试器。
在测试模式下,首先切换触发器单元10a-c,以便通过给所有触发器单元10a-c施加一串时钟脉冲,将测试数据从测试输入14经过触发器单元10a-c进行转移。
接着,当输入数据已到达指定的触发器单元10a-c时,执行捕获步骤,其中测试数据从这些触发器单元10a-c传播通过逻辑电路12,时钟信号被施加到触发器单元10a-c,以捕获逻辑电路12对输入数据的响应。随后,通过向所有触发器单元10a-c施加一系列时钟脉冲,触发器单元10a-c被切换以将结果数据转移到测试输出16。
当在捕获步骤中使用了所有时钟信号CLKa、CLKb、CLKc时,在捕获步骤中,以此方式就可以没有问题地捕获来自于逻辑电路12当中的内部时钟域逻辑电路的测试结果。
然而,如果在捕获步骤中都使用了CLKa、CLKb、CLKc,则来自内部域逻辑电路的测试结果可能是不确定的。这是因为所包含的时钟之间的定时关系是不确定的。常规上,通过在捕获步骤中禁止时钟信号的一部分,执行用于测试逻辑电路12当中的内部域逻辑电路的测试结果,从而在捕获步骤中不会更新被选触发器单元10a-c的数据内容。因此,在捕获步骤中,这些单元10a-c的更新的定时不影响测试结果,从得到的测试响应中除去了不确定性。
利用已经经过扫描链与测试输入数据一起被转移到时钟控制触发器单元11中的时钟启动信号,可以禁止时钟信号,但是也可以利用任何其它方式禁止这些时钟信号。而且,不必使整个时钟域的触发器单元10a-c的时钟信号一起被禁止。可以使用更可选择的禁止,以便保证由于定时不确定性导致的不确定性阻止只更新与测试结果相关的那些触发器单元。因此,为了测试目的有效地产生更多时钟域。
测试码选择器20选择一组测试输入码。这里使用的“选择”一般包括构成合适的测试码,因此由该组总的可能测试码有效地构成选择。“选择”不假设预先存在的一组储存测试码,其中一些被使用,而另一些没有被使用。每个测试码确定位值的组合,所述位值将在捕获步骤中从触发器单元10a-c组合地施加。该组测试码被选择,使得利用最少测试码实现某组故障的足够的测试覆盖率。一组故障要求在图1的电路的任何门输出上的固定故障应该是可检测的,但是其它或更少的故障可以根据需要包含在这一组中。固定故障是由于电路节点保持在与逻辑输入无关的固定逻辑电平上而产生的故障。为了测试这种故障,测试码必须包括如下码:该码应该在电路节点上产生相反电平,其方式使得这会影响被捕获的响应。
对于单个时钟域逻辑电路,用于选择这样的测试码组的算法本身是公知的。可以修改这些算法以便也为多域逻辑电路找到一组测试码。这可以通过使公知算法产生用于虚拟电路的测试码来实现,其中所述虚拟电路通过使附加电路屏蔽不确定结果而采用附加电路来表示由于定时不确定性导致的不确定性。为了这个目的,对于每个特定触发器单元10a-c来说,触发器单元10a-c(这里,称为该特定触发器单元10a-c的“源触发器单元”)被确定为影响在定时灵敏触发器单元10a-c的输入上的信号。如果这些源触发器单元10a-c中的至少一个属于该特定触发器单元10a-c的特定时钟域以外的另外的时钟域(这里称为该特定触发器单元10a-c的另外的源时钟域),则可能存在不确定性。在这种情况下,该特定触发器单元将被称为“定时灵敏触发器单元”。
图3表示为了选择测试码的目的,如何可以将附加门30虚拟地添加到定时灵敏触发器单元32的输入的前部(“虚拟地”在其意义上是:它只是被添加到选择测试输入码的程序的输入中,而不是在物理电路中)。从图中看出,已经省略了与解释无关的触发器和连接。附加门30具有耦合到逻辑电路12的一部分的输出上的输入,其中所述逻辑电路12的一部分连接到物理电路中的定时灵敏触发器单元32的输入上,并且附加门30具有耦合到定时灵敏触发器单元32的输入上的输出。
附加门30被指定,使得其输出信号取决于时钟控制信号,所述时钟控制信号表示源触发器单元34的所有另外源时钟域的时钟是否被禁止。如果这些时钟不是所有都被禁止,则附加门使X值(独立于定时灵敏触发器单元32的原始输入信号的值)通过到定时灵敏触发器单元32的输入。如果所有这些时钟都被禁止,则附加门使来自逻辑电路12的输出信号通过,其中所述逻辑电路12耦合到物理电路中的定时灵敏触发器单元32的输入。
对于测试码选择器20,其呈现为就好像必须为逻辑电路产生测试码,所述逻辑电路包括逻辑电路12加上附加门30,并从测试控制触发器单元11接收时钟控制信号作为测试码的正常部分。结果是,强迫测试码发生器包括测试码,在所述测试码中,到另外源域的时钟信号被禁止用于测试附加门30前面的逻辑电路12的输出上的故障。附加门30使得对于常规测试码发生器可检测到,在附加门30的输出上的结果使得不能观测到逻辑电路12中的逻辑信号,除非源触发器单元34的另外源时钟域被禁止。优选地,给选择器20输送必须被检测的一组故障不包括附加电路中的故障的信息。这就防止产生附加测试矢量来测试附加逻辑。
作为一种改进的设计,可以将一个或多个附加门30放在经过逻辑电路12到定时灵敏触发器单元32的输入的信号路径上的其他位置上,而不是直接位于定时灵敏触发器单元32的输入上。到定时灵敏触发器单元32的输入的信号路径分出树枝状结构,并具有在对应逻辑电路的树的树叶和节点上的源触发器单元34。附加门30的位置可以通过经过这个树枝状结构回溯到最近逻辑电路并直到定时灵敏触发器单元32来选择,使得每个最近逻辑电路的输入信号都不取决于来自一个以上另外源时钟域的逻辑数据值。
在这种情况下,一个或多个附加门可以被虚拟添加在被选的最近逻辑电路的输出上,而不是位于定时灵敏触发器单元32的输入上。附加门30被指定,使得每个附加门30的输出信号取决于源触发器单元34的时钟域的时钟是否被禁止,其中附加门30从所述源触发器单元34接收信号。如果这个时钟是有效的,则附加门使X值朝向定时灵敏触发器单元32的输入通过。如果这个时钟是无效的,则附加门30使被选逻辑门的输出信号通过到物理电路中的定时灵敏触发器单元32的输入。这就使得测试码发生器可以产生较少的测试码,因为在更多时钟域的时钟有效时,就可以测试有些逻辑电路。
根据本发明,测试码产生考虑源触发器中的数据值是否改变。因此,将需要甚至更少的测试码。
图4表示可以虚拟添加到设计中的附加电路,以使常规测试码选择器考虑信号变化选择测试码。在这种情况下,已添加了“同”门40和“或”门42。“同”门40具有耦合到定时灵敏触发器单元32的源触发器单元34的输入和输出上的输入。该电路的设计使得:如果源触发器单元34的输入和输出信号相等,或者如果来自时钟启动触发器单元11的时钟启动信号发送源触发器单元34的另外源时钟(CLKa)被禁止的信号,则附加门30使来自逻辑电路12的输出的信号通过。
对于测试码选择器20,就好像必须为逻辑电路产生测试码,所述逻辑电路包括逻辑电路12加上附加门30以及“同”门40和“或”门42,并从测试控制触发器单元11接收时钟控制信号作为测试码的正常部分。附加门30和其控制电路对于常规测试码发生器来说可检测到,在附加门30的输出上的结果不会使逻辑电路12中的逻辑信号可观测到,除非源触发器单元34的另外源时钟被禁止,或者当在测试期间给其计时时,源触发器单元34的数据值不变。结果是,测试码发生器得以选择包括测试码,其中到另外源域的时钟信号被禁止或者源触发器单元34的输入和输出信号是相等的。这使得测试码选择器20能够以较少的测试码覆盖所有要求的故障。
图5表示关于输入和输出信号的相等的信息如何可用在更复杂电路中。该图示出若干个逻辑电路12,这些逻辑电路12分成公用部分和只分别在第一和第二时钟域中从源触发器单元34接收输入信号的部分(尽管在这些部分之间示出了单一连接,当然也可以存在更多的连接)。
在第二时钟域中,一个以上的源触发器单元34影响定时灵敏触发器单元32的输入信号。在这种情况下,为每个源触发器单元34添加用于测试输入和输出是否不同的若干个虚拟电路。该电路设计成:当这些电路发出相关源触发器单元34的每个的输入和输出信号的信号相等的信号时,或者当来自源触发器单元34的时钟域的时钟启动触发器单元11的时钟启动信号被禁止时,附加门30使其输入信号通过。
图5还表示如何可将附加门30设置于逻辑电路12的不同部分之间,从而使每个附加门30的输入只取决于来自在相应时钟域中的源触发器的数据,并且控制门的信号通过只取决于相关域的时钟信号的无效。然而,应该理解的是,不是必须将附加门30放在逻辑电路的不同部分之间。或者,可以使用在定时灵敏触发器单元34的输入上的单个附加门,如果对于所有时钟域:(a)来自时钟启动触发器单元11的时钟启动信号发送表示时钟无效的信号,或者(b)来自该域的所有相关源触发器单元34具有相等的输入和输出信号,则该单个附加门仅使其输入信号通过。
应该理解的是,在图5中,必须设置用于测试输入和输出是否不同的电路,并添加用于潜在地影响到定时灵敏触发器单元32的输入信号的每个源触发器单元34。然而,通过进一步向后朝向源触发器单元34设置附加门,这个条件可以放松。在这种情况下,每个附加门的输入受到域中的源触发器单元34的一部分的影响,并且如果(a)该域的时钟被禁止或(b)来自可能影响附加门30的输入信号的该域的所有源触发器单元34具有相等输入和输出信号时,仅使其输入信号通过。对于有些门,后种可能性可以省略,其可能导致更大量的测试码,但是不会导致故障覆盖率的缺乏。
应该明白,在前面图的电路中,已经添加了虚拟电路,这些虚拟电路不是实际存在于被测电路中。在虚拟电路中,就好像时钟启动触发器单元11具有到逻辑电路12的输出连接,它们并不存在于实际被测电路中。还应该理解的是,为了举例说明,图1的电路表示了作为扫描链的一部分的时钟启动触发器单元11。在实际被测电路中,甚至这些时钟启动触发器单元11不必包含在该扫描链中,但是测试发生器22可以从测试码读取时钟启动位,并通过对于相关时钟不给外部IC管脚施加时钟信号,可以用任何其它便利方式启动或禁止各个域中的时钟。
在评估测试结果时,被定时灵敏触发器单元32捕获的响应对于那些测试码来说被忽视了,其中来自源触发器单元34的另外时钟域的时钟被启动,并且源触发器单元32的输入和输出信号不等,即,对于那些其中虚拟附加门30阻挡正常信号的输入码。
图6表示了根据本发明操作的测试码选择器20的操作的流程图。在第一步骤61中,测试码选择器20接收被测电路的设计的电子说明。在第二步骤62中,测试码选择器20检查设计中的每个触发器单元10a-c是否它接收取决于其它时钟域中的触发器单元10a-c中的数据的输入信号。如果是,则测试码选择器20对于这种定时灵敏触发器单元10a-c执行第三步骤63,给该电子说明添加一个或多个附加门,如前所述。在第四步骤中,测试码选择器20测试是否所有触发器单元10a-c都已经被处理了。如果没有,则从第二步骤62开始重复执行该过程。在第五步骤65中,测试码选择器20产生包括若干个时钟启动信号的一组测试码,以便利用最少测试码提供一组可能故障的全故障覆盖。在第五步骤65中,可使用常规算法,其操作就好像该电路只有单个时钟域那样。
优选地,使用如下算法,它还产生对可能电路故障的每个测试码的响应的每位表示,该可能电路故障能影响这个位。对于这些测试码,测试码选择器20发出表示在测试中必须忽视这个响应位的信号。或者,可以分析所得到的测试码,以便检测在哪些测试码中,已经添加附加电路的定时灵敏触发器单元32,源触发器单元的时钟域的时钟信号被启动,并且在这些测试码中,源触发器单元34的输入和输出不同。
在第六步骤66中,通过使测试码的位经过触发器单元10a-c、11的链偏移,测试码选择器20使测试码选择器20向被测电路24输送连续的测试码,并且观测被测电路的响应,为此测试选择器20没有发送它们应该被忽视的信号。当所有码导致相关触发器单元的预计响应时,接受被测电路。
应该理解的是,本发明不限于图6的过程。例如,优选的是添加若干个虚拟附加门,这些附加门检测响应测试码的处于“错误”时钟域中的所有源触发器的输出信号是否与响应测试码的输入信号相同。然而,对于源触发器单元34中的任何单元来说,可以省略这种检测。这仅导致效率更差的测试,而不会导致错误。
同样,应该理解的是,如果测试码产生步骤65“被骗”处理各种时钟域的时钟启动信号作为测试码中的标准输入位,则对于测试码产生的最小变化是必须的。然而,在不偏离本发明的情况下,这些位可以在第五步骤65中给出特殊处理的特殊位。
应该理解的是,可以给图中的过程增加各种改进。作为例子,在第三步骤63中,测试码选择器20可直接在接收受到在其它时钟域中的源触发器影响的数据的定时灵敏触发器32的前面插入若干个附加门。在这种情况下,如果任何域都含有源触发器单元34且这些源触发器单元34具有相互不同的输入和输出信号、以及具有被启动的域时钟,则附加门30抑制对来自源触发器的数据的依赖性。
或者,在第三步骤中,测试码选择器20可检索电路节点,以便在逻辑电路12中向电子说明添加附加门,并进一步与定时灵敏触发器单元32分开。在这种情况下,选择任何一组电路节点,通过该组电路节点,定时灵敏触发器单元32的输入取决于来自其它时钟域中的源触发器单元34的信号。在电路节点上添加附加门30,如果通常影响电路节点上的信号的任何域含有源触发器单元34、且所述源触发器单元34具有相互不同的输入和输出信号以及具有被启动的域时钟,则抑制信号电路节点对来自其它时钟域的源触发器单元34的数据的依赖性。
为此,测试码选择器20优选选择逻辑电路12中的一组内部电路节点,其信号可能影响定时灵敏触发器单元32上的输入信号,并承载取决于来自只有一个时钟域中的触发器单元34的数据的信号。
作为在触发器单元上直接添加比较电路40的替代方案,可以在中间电路节点上添加比较电路,并使其一个输入耦合到逻辑电路的在前部分的复制件上,其具有的输入耦合到源触发器的输入上。然而,这只在该电路的特性使得不发生故障时才使可行的。
在第二步骤62中,测试码选择器20可从每个特定触发器单元10a-c的输入回溯跟踪通过电路的设计,从而发现影响该特定触发器单元10a-c的输入上的信号的源触发器单元10a-c。测试码选择器20接着检测是否这些源触发器单元10a-c的至少一个属于除该特定触发器单元10a-c的特定时钟域以外的另外源时钟域。在这种情况下,该特定触发器单元10a-c被判断为定时灵敏触发器单元10a-c。
此外,应该理解的是,作为使用预处理步骤来“欺骗”常规单个时钟域测试码选择器20产生用于虚拟电路的一组测试码的替代方案,可以采用专用的测试码产生算法,其响应测试码来考虑触发器单元10a-c的输入和输出的相等。例如,当算法在逻辑电路的相关部分上操作时,可以在执行测试码产生算法过程中动态地添加相关虚拟电路。在另一例子中,在实施例中的这种测试码产生算法对每个测试码作标记,以表示对于与所有故障一起作标记的一组码,它将检测和搜索哪些故障。
在另一实施例的测试码选择器20中,发生器22首先对于原始电路设计只产生一组测试输入码,忽略由于定时不确定性引起的任何不确定性,然后,由其中被选时钟信号被禁止的那组产生若干形式的测试码。在本实施例中,测试码选择器20识别了具有来自其它时钟域的由源触发器单元得到的输入信号的特定触发器。测试码选择器20产生附加形式的测试码,其中只有在响应测试码在其它时钟域中的源触发器上的输入和输出信号不等的情况下,来自其它域的时钟被禁止。