从可测性设计的目标来说,可测性设计应考虑下列三个方面的问题:
(1)变不可测故障为可测故障;
(2)测试数据生成的时间少;
(3)测试数据少。
另一方面,可测性设计本身增加了电路的复杂性:增加了硬件量,降低了电路速度,也应作为评价的标准之一。
目前几乎所有的大型电路都进行可测性设计。
一、可测性分析
为进行可测性设计,就必须能对电路的可测性(Testability )进行定量分析。
1.可控性与可观性
从前面求故障测试码的算法原理中,我们可以看到,一个电路的可测性问题应该包括下列两个方面:
(1)要容易由外部输入信号来控制电路中各节点的电平值,以便能够敏化故障和控制敏化通路上的各控制信号。这种特性反映用测试向量来改变一个节点逻辑状态的难易程度,称为节点的可控性(Controllability )。
(2)要容易建立故障敏化通路,使内部故障能构传播到外部输出端,以便能够从外部输出端口观察内部故障是否存在。这种特性反映从外部输出端口观察内部故障的难易程度,称为可观性(Observability )。
对可控性和可观性的度量可作为可测性的一种度量方法。目前出现的分析可控性和可观性的度量基准和方法都不相同。下面简要介绍几种常见的方法。
可测性分为可控性和可观性两个方面。通俗地说,可控性是指可以找到测试码控制该故障,即可从输入端控制;而可观性则表示故障可以传播到输出端,即可从输出端观察。
可测性分析的算法有许多,下面讲一个简单的算法,有一定的代表性。
2.Stephenson可测性分析
Stephenson可测性分析将可控性和可观性都定义为0到1之间的值。
对可控性(CY )来说,外部输入端的可控性最强,令CY=1。完全不可控的节点其CY=0。电路内部一般节点的可控性的值在0~1之间。
对可观性(OY )来说,外部输出端的可观性最强,令OY=1。完全不可观的节点其OY=0。电路内部一般节点的可观性的值在0~1之间。可观性是相对于某一观察点而言的。同一个节点,相对不同的观察点,其可观性的值不同。
这里定义的可控性和客观性比较好地反映了实际情况。也比较容易理解。还有其它的定义方法,不再赘述。
一个逻辑单元输出端的可控性定义如下:
CYout = CTF·f ( CYIn )
其中,CTF为可控性传递因子,f (CYIn )是对该输出有控制作用的各输入的组合函数。
已知外部输入端可控性为1,利用CTF可以从外部输入端开始一个一个元件依次计算其输出端的可控性,直到求出所有的元件输出端的可控性。可观性的求法类似。注意不是输出端的可控性最小,而是中间的不可控节点的可控性最小,设为0。
CTF描述了输出状态由'0'转换到'1'或由'1'转换到'0'的难易程度,它只取决于逻辑单元的逻辑函数,与该单元在电路中的位置无关,即与逻辑单元输入端的可控性无关。
![]()
式中N(0)和N(1)分别表示使输出取值为'0'和'1'的方法数。对于一个n输入端的逻辑单元,由于每个输入端可以取'0'和'1'两种值,故有
N(0) +N(1)=2n
例如一个二输入端与门,使输出为'0'的方法有1种,使输出为'1'的方法有3种,故
N(0)=1, N(1)=3
因而
![]()
基本逻辑元件的CTF是固定的。可以预先求出,使用时查表即可。
对于一般的逻辑单元,f(CYIn )为人为定义的逻辑单元输入端的平均可控性与每个输入端(前级输出端)可控性的关系,可定义为
其中CYasyn表示各异步输入端的可控性,CYclk表示时钟输入端的可控性,CYsyn表示各同步输入端的可控性。对于一个组合电路单元,上式可表为
![]()
即各输入端可控性的平均值。i为输入端个数。
对于一般的逻辑单元,各输入端的贡献可能不一样,上面的公式给出求整个逻辑单元平均可控性的方法。
现在以图7.24的JK触发器为例,计算其可控性。
图7.24 JK触发器 
根据JK触发器的真值表,可以得出N(1)和N(0)分别为24和16。因而有
设
CY(R)=CY(S)=0.3,
CY(J)=CY(K)=0.5,
CY(T)=0.6
则有

于是
CY(Q) = CTF(Q)·f(Q) = 0.8×0.3= 0.24
对于一个敏化输入端和敏化输出端的逻辑单元,定义敏化输入端的可观性为
OYsens-In = OTF·OYSens-Out·g(CYother-Ins )
其中,OTF为可观性传递因子,g是其它输入端的可控性的组合函数。
OTF描述了故障从敏化输入端向敏化输出端传递的难易程度,它定义为
其中,NPDC表示故障信号从敏化输入端I到敏化输出端O的可能传输的方法总数,每两种方法均应可区分。例如一个实现y = x1 x2 x3的三输入与门,求任意一个输入端到输出端的可观性传递因子,则有NPDC(xi)= 1, NNPDC(xi)=3, 故有
组合函数g反映逻辑单元其他输入端对敏化输入端可观性的作用,定义如下:
关于可控性和可观性的定义和算法有许多种,因篇幅关系不一一介绍。根据可测性分析可以得到各个故障点的可控性和可观性。
二、设置观察点和控制点
从可测性分析可以看到,可测性体现在可控性和可观性两个方面。设置观察点和控制点是最简单的提高可测性的方法。
在故障难以传播到外部输出端的情况下,如果在能反映该故障的节点引出一条输出线,就改善了可观性。所增加的输出线称为观察点。观察点的设置可以减少测试数据,也可以使原来不可测故障成为可测故障。
图7.25是一个冗余电路,C点故障不可测。在g点增加一条输出线后,C点故障就成为可测故障。
图7.25 设观察点使不可测故障边为可测故障 ![]() |
图7.26所示的电路中,a和b是专为测试而增设的控制点。当a、b不存在时,电路逻辑功能为
图7.26 设置控制点求冗余电路的测试码 ![]() |
不难看出,
是一个冗余项,即G1是冗余部分电路。这一点的故障不可测。增加控制点a, b后,令a='0', b='1',就可以求得冗余部分故障的测试。当a='1', b='0'时,可以求得非冗余部分故障的测试。而当a=b='1'时,电路与原来的电路功能相同。
对可控性较差的故障设置控制线,对可观性较差的故障设置观察线,可以方便地解决可测性问题。但对于较大规模的电路来说,由于引脚的限制,并不是总可以解决的。另一个缺点是会大量增加硬件开销。
三、组合电路的可测性电路结构
组合电路用某些特殊的结构实现,可以很容易求得其测试码。下面介绍常用的可测性电路结构。
1. 树型模块结构
树型模块结构由图7.27(a )所示的树型连接模块构成。模块中C, A0 , A1 为逻辑输入端,P1 , P2 为测试输入端。
图7.27 树型连接模块 ![]() |
整个电路都有树型逻辑组成。C节外部输入,f0, f1接前面模块的输出,或者接外部输入。P1和P2是控制端。
由图7.27(a)不难看出,当P1 = P2 = 1时,该模块的逻辑函数为
![]()
而当P1 = 0时F = 1;当P2 = 0, P1= 1时F= 0。
这样,若要对该模块进行敏化,只要令P1 = P2 = 1。在求蕴涵和一致性计算时,若要求F = 1,则令P1 = 0;若要求F= 0 ,则令P2 = 0, P1 = 1。
可以看出,通过控制P1和P2,可以在正常工作方式和测试方式下切换,可以设置F的值,可以对模块中任意点找到敏化路径。
对于任一输入变量xi, 函数fn (x1 , x2 , ... , xn )可展开为

其中,,
表示fn中令x1 = 0得到的(n-1 )个变量的逻辑函数,
表示fn中令x1 = 1得到的(n-1 )个变量的逻辑函数。
即先农(Shannon)展开。
很明显,按照同样的方法可以把
和
继续展开,直到只剩下一个变量。这样便形成了(n-1)级门构成的树型电路结构。
下面举一个函数展开的例子。

这样,就可以用三个模块组成7.27(b )所示的树型电路结构。各模块的P2 , P2 端作测试输入端用。
注意展开后的形式与图中各端的对应关系。
测试对象为包括各模块内各点在内的多固定故障,以模块为单位进行故障定位。
设一个若干级别的树型连接模块组成的树型结构电路中,称输出端的模块为第1级,连接输出端模块的两个模块为第2级,依此类推,分别用M1 , M1 , ... , Mi表示。考虑第i级的某一模块Mi(j1)的故障,从该模块到输出模块的路径即为敏化路径,敏化路径上共有i个模块,依次把各模块记为M1(j1), Mi- 1(j2), Mi- 2(j3), ... , M1(ji)。假定除Mi(j1)外其它模块都能正常工作。在Mi(j1)上施加测试输入,同时在路径上各模块的C, P1, P2 各端设置适当的值,就可使这条路径敏化。如果在输出端得到错误输出,就说明模块Mi(j1)有故障,需要更换。从输出端开始一级一级向前进行诊断,发现坏的模块及时更换,就可以把所有的故障模块都更换掉。这种测试方式称为逐次诊断方式。
可见,树型结构电路的测试用数据非常简单,非常容易求得,测试速度也相当快。
测试从输出端开始,在测中间的模块时,保证已测的模块是正常的。
四、扫描方式电路设计
时序电路的测试码生成一般是比较困难的,但具有下列性质的时序电路,其测试码生成的复杂性与组合电路基本相同:
(1)构成时序电路的各触发器可自由地从外部设定其状态。
(2)这些触发器的状态容易观察。
为了使时序电路具有这些性质,除了通常的工作方式之外,还需要增加一种专门为测试用的方式,在这种方式下,利用控制信号使所有的触发器以串行移位寄存器的方式工作。这种新的为测试用的方式称为扫描(Scan )方式。
为了实现测试方式,各触发器出了原来用于逻辑功能的连结之外,还要将所有触发器连接成串行移位寄存器。电路有两种方式:测试方式与工作方式。
图7.29为一种典型的扫描方式电路。
由图中可以看出,当控制输入P=0时,电路的动作按通常方式进行,执行电路的功能。当P=1时,各触发器形成一个移位寄存器,为扫描方式。在扫描方式下,各触发器可设定任意值,也可以方便地从扫描输出端观察其值。
图7.29是一个典型的原理电路。SW时方式切换(switch)模块,当对电路进行测试时利用输入端的方式控制端口切换到测试方式,并把测试向量送到扫描输入端,在扫描输出端察看测试结果。当方式控制切换到工作方式时,扫描电路不起作用,电路处于正常工作状况。各触发器均为电路中不同作用的工作触发器。
图7.29 扫描方式电路设计![]() |
2.电平敏感扫描设计
在扫描电路中,为了把组合电路与时序元件隔离开来,需要增加切换开关。但在作扫描切换时,很容易出现竞争冒险,从而引起扫描电路误触发,使测试失败。为了解决这个问题,选用时钟电平来触发,而不用通常所用的边沿触发方式。用电平触发的扫描电路设计称为电平敏感扫描设计(Level Sensitive Scan Design ) ,简称LSSD 。LSSD 包括两个设计概念:一个是扫描电路的设计概念,即测试方式下的移位寄存器结构;另一个是测试方式下的移位时钟多相化。LSSD使用的基本触发器单元称为 SRL (Shift Register Latch ) ,如图7.30所示。当A='0'时,SRL为通常工作方式,在时钟C,B的作用下工作。测试方式(移位方式 )下C='0',在时钟A, B的作用下工作。图7.31为用这种方式设计的时序电路结构。
对LSSD方式设计的时序电路的故障诊断步骤如下:
(1)用时钟A和B,进行移位方式下的检测,这时输入端Scan-in上施加由'0'和'1'组成的适当序列。
(2)用时钟A和B,将组合电路的测试输入(W, Y)中的Y设定为锁存器L2的值。
(3)与第(2)步相同的部分测试输入(W, Y)中对W施加外部输入,待其输出X1, X2, ... , Xn向锁存器件L1传播之后,由时钟C1将其值取到L1。
(4)将各L1的值与时钟A和B的移位方式下输出端Scan-out取出的正常值作比较。
(5)返回第(2)步继续做下一个检测。
LSSD技术增加的元件和信号有限,且不影响电路的速度,同时由于用了双重锁存器,有动作稳定的优点。
图7.30 SRL的构成![]() |
图7.31 LSSD方式的时序电路![]() |
扫描方式的应用非常广泛,现在几乎所有的电路都要预先设计扫描电路。图7.31是IBM公司所实际应用的电路。近年来陆续出现了许多改进的扫描电路,并针对扫描方式电路的特殊情况,形成特殊的对集成电路芯片的布局布线方法。扫描电路的缺点是增加了相当规模的硬件开销,尤其是增加了端口,占用了较多的引脚。这在超大规模的集成电路的情况下是不能不考虑的。而且也不能避免测试时的繁琐过程。
五、内建自测试设计
LSSD技术简化了测试,但不能代替测试,内建自测试(Built-In Self-Test, 简称BIST )是在集成电路芯片内增加产生激励和做测试分析的电路,使芯片不但能完成逻辑功能,还能在外部给定测试方式命令时进行自我测试分析,并输出结果。这种结构的电路既不需要准备测试码,也不需要专门的测试设备。电路中包含有测试码生成部件、扫描测试电路和测试结果输出部件。
内建自测试技术应用也非常广泛,其特点是不需要外加测试向量,而由电路本身产生,测试结果(合格与不合格)也直接由电路输出。不占用过多的引脚,使用非常方便。缺点同样也是增加了相当规模的硬件开销。
内建自测试技术一般使用伪随机测试码。电路中的伪随机数产生器产生伪随机数测试码,加在扫描电路中。在扫描方式下输出测试结果。其测试结果不是输出全部测试结果数据,而是由数据压缩器将数据压缩后输出。数据压缩的方法采用特征分析法(Signature Analysis )。伪随机数测试码产生器、扫描电路和数据压缩器都可以用线性反馈移位寄存器 (Linear Feed Back Shift Register, 简称 LFSR )实现。
1.线性反馈移位寄存器LFSR
线性反馈移位寄存器(LFSR )是内测试电路中最基本的标准模块结构,既用作伪随机测试码产生器,也作为压缩测试结果数据的特征分析器。
LFSR由一系列D触发器及少量异或元件组成。标准LFSR模块如图7.32所示。它在控制端C1, C2的控制下以四种不同的方式工作。
图7.32 标准LFSR模块![]() |
从图中可以看出,第i个D触发器的输入为
![]()
(1)复位方式。当C1='0', C2='1', 开关置为任意位置时,每个触发器的输入均为'0',与Zi和Qi的状态无关,所有触发器复位。
(2)正常工作方式。当C1 ='1', C2 ='1', 开关置为任意位置时,对任意i, Di =Zi,这是模块的正常工作方式。
(3)扫描测试方式。当C1 ='0', C2='0', 开关接通SD时,D1 =
, Di = Qi-1 , 所以模块以移位寄存器的方式工作,其中SD为外部输入的串行数据,SDO为串行数据输出。
(4)LFSR方式。当C1 ='1', C2 ='0', 开关接通f时,依图7.32的例子,f =
,得
![]()
所以该模块是以并行输入的线性反馈移位寄存器的方式工作。
如果有Zi ='0', 则D1 =Q3
Q4 ,(i=1); Di =Q i-1 , (i >1 )。这样,在输出端Qi 就得到伪随机序列,可以作为测试用的激励信号。
如果有Zi = '1', 但Z1 为任意输入, 则D1=Q3
Q4
Z1,(i=1), Di=
, (i >1 )。这时模块又以串行输入的线性反馈移位寄存器的方式工作。
原书(1996年版)图上标注的信号和公式中部分符号有错,请读者更正。
LFSR的不同连接关系可以得到不同的功能,从而得到对应与不同为随机码的不同的为随机信号发生器,串行输入数据压缩器,并行输入数据压缩器。因篇幅关系,同时也超出本书范围,关于LFSR的具体应用中的问题略去不讲。有兴趣的读者可以参考有关文献。
2. 内部逻辑块观察器
为了将LFSR用于时序电路,将扫描电路与特征分析技术相结合,称为内部逻辑块观察器(Built-In Logic Block Observer)。
内部逻辑块观察器将LFSR作为具有四种功能的元件使用,即随机测试码产生器、测试码压缩器、扫描器、锁存器。在图7.34的例子中,所有的输入输出端都设置一个触发器。输入端的触发器连接成伪随机数产生器的LFSR,输出端的触发器可作为数据压缩器的LFSR使用。当发出测试命令时,电路工作过程如下:
(1)伪随机数产生器输入端设置初始值。压缩器和内部寄存器SDI设置初始值(扫描输入)。
(2)按通常的方式将组合电路N1, N2引起的变化取到内部寄存器中。
(3)按测试方式提供扫描时钟,由输出测的LFSR将一系列随机测试码扫描输入到内部寄存器中,同时进行数据压缩。
(4)重复第(2)(3)两步,最后在扫描数据输出端(SDO)观测压缩的测试码。
图7.34 内建自测式结构 
尽管自测试电路增加了电路的复杂性,也增加了电路的延时,增加了电路的面积,但是它节省了测试码生成和执行测试的时间,又节约了需要存储的数据量,同时也省去了昂贵的测试设备,因而得到了不断的应用和发展。
可测性设计虽然基于测试码生成的理论发展而来,但它还是属于电路设计范畴,已超出CAD领域。本书只是简单地向读者展示一下有关的基本知识,不作详细介绍。有兴趣的读者可以参看专门的书籍。
总结:
测试是在电路产品生产出来之后进行合格性检验的最后一个重要步骤。
测试是要在电路的输入端施加测试向量的序列,并在输出端观察所得到的结果是否与预想的相同,从而判断电路中是否存在故障。CAD的作用在于在设计电路时给出该电路的测试码。本章着重介绍测试码自动生成的方法。
测试码自动生成算法主要有以D算法位代表的基于电路结构的方法和以布尔差分法为代表的基于布尔表达式的方法。它们共同的基本思想是:(1)测试码引起故障点的正常值与故障值不同,即可从输入端控制故障的值;(2)能使输出端在正常情况下与故障情况下的输出值不同,即可从输出端观察故障的存在。在这个指导原则下,研究D算法、布尔差分法等的基本方法。
时序电路常用迭代展开法,主要有扩展D算法。它把时序电路的不同时刻的状态转化为空间序列,从而使用D算法来解决。
故障模拟用来监测一个输入向量或序列是否为测试码,并计算故障覆盖率。
对于复杂的电路,可测性设计是解决寻找测试码遇到的困难的一种有效的常用的方法。本章介绍了可测性的基本分析方法和几种可测性设计方法。






