《1 引言》
1 引言
电路系统在设计、制造以及运行过程中需要进行测试, 以保证其设计要求或正常工作, 它已成为集成电路设计与生产过程的一个重要组成部分。电路存在故障的测试通常称故障检测, 若还要定位故障点, 则称为故障定位或故障诊断
在逻辑函数的电路可测性设计方面, Reddy最先提出基于Reed-Muller模式的异或门级联的实现方法
《2 电路设计》
2 电路设计
《2.1 逻辑函数的表示形式》
2.1 逻辑函数的表示形式
任何一个具有n个变量的组合逻辑函数f均可用如下的Reed-Muller模式表示:
其中⊕表示异或运算,
若在函数f的Reed-Muller表达式中, 所有变量xi (i=1, 2, …, n) 以原变量 (即xi的形式) 出现, 则称为PPRM形式;若在表达式中一些变量以原变量xi出现, 而另一些变量以求反变量
《2.2 电路结构》
2.2 电路结构
对有n个变量x*i (i=1, 2, …, n) 的逻辑函数f, 设它的GRM中积项有m项。对每一积项在f中的位置做如下调整:按变量x1, x2 , …, xn,
GRM电路的一般结构如图1所示。为了电路测试的需要, 在其基础上增加了4个控制输入C0, C1, C2和C3, 以及2个与门AND11和AND12, 和2个或门OR11和OR12, 这4个门的输出节点分别为O1、O2、O3和O4。AND11和OR11的输入都是C1, C2, C3和所有原始输入xi (i=1, 2, …, n) , AND12和OR12的输入都是所有原始输入求反
控制输入C1, C2和C3的连接方法如下:定义矢量V1= (0 0 1) , V2= (0 1 0) , V3= (0 1 1) , 并为XOR树的原始输出节点赋这三个矢量中的一个, 把其余的两个矢量分别赋给该XOR门的两个输入节点, 以此类推, 直至XOR树的每一个原始输入节点都赋了V1, V2, V3中的一个矢量, 参见图3a。图 3a和图3b分别是8个输入的XOR树和XOR门级联的例子。对AND阵列的每一个AND门, 若它的输出节点 (即相应XOR树的输入节点) 被分配的矢量为Vi (i=1, 2, 3) , 则把控制输入Ci (i=1, 2, 3) 连至该AND门作为门的输入节点。
图3可见, 变量数相同时, XOR树电路比XOR门级联有更小的延迟。下面在讨论GRM电路时, 把它分为:输入与控制、AND阵列、XOR树等三部分, 在图2中已用虚线标出。具有n个输入变量的逻辑函数f, 若只考虑电路中节点的固定型故障 (s-a-0或s-a-1, 通常电路中的一些短路故障属于s-a-0, 开路故障属于s-a-1) , 可以得到检测GRM电路的通用测试集。定义n+4维矢量的各分量形式为R= (C0C1C2C3x1x2…xn) ;a1= (0 0 0 0 0 0 … 0) , a2= (0 1 1 1 1 1 … 1) , a3= (1 0 0 0 0 0 … 0) ;矢量bi (i=1, 2, …, n) 的分量为C0=0, C1=C2=C3 =1, xi=0, 其他所有分量xj=1 (j≠i) ;d1= (0 0 1 1 1 1 … 1) , d2= (0 1 0 1 1 1 …1) 。其中T1={a1, a2, a3}可以检测GRM电路输入与控制部分的故障;T2={a2, b1, b2, …, bn}能检测AND阵列的故障;T3={a1, d1, d2}可以检测XOR树的故障。用如上n+5个矢量组成的测试集是电路的通用测试集T=T1∪T2∪T3 。
《3 GRM电路的故障定位》
3 GRM电路的故障定位
若GRM电路发生了一个故障 (s-a-0或s-a-1) , 可依次对电路的三部分即输入与控制、XOR树、AND阵列进行故障定位。
《3.1 输入与控制部分的故障定位》
3.1 输入与控制部分的故障定位
首先对节点C0的故障做定位。令矢量S1= (1 0 0 0 … 0) , S2= (0 0 0 0 … 0) , S1和S2中各分量的含义与矢量R相同。对电路的输入节点施加矢量S1, 若节点O4=0, 则节点C0发生了s-a-0故障;其他的故障情况, 即C0发生s-a-1故障、C1, C2, C3和原始输入节点xi 及其求反
使控制输入C0=0, 此时电路的原始输入xi与其求反
对电路的输入节点施加n+3个矢量:tc1, tc2 , tc3 , t1, t2, …, tn , 各矢量的分量含义同矢量R。每一矢量有2个分量的值为0, 其他分量都为1。其中分量C0都为0, 矢量tc1的分量C1=0, tc2的分量C2=0, tc3的分量C3=0, ti (i=1, 2, …, n) 的分量xi为0。把节点O1作为观测点, 分别用矢量tc1, tc2和tc3对发生在节点C1, C2和C3的s-a-1故障定位, 例如, 节点C1有s-a-1故障时, 矢量tc1使O1=1, 而当节点C1有s-a-0故障及其他节点 (C0除外) 发生故障时, 矢量tc1使O1=0。同理用矢量tj (1≤j≤n) , 以节点O1作为观测点对原始输入节点xj的s-a-1故障定位, 且以节点O3作为观测点对发生在节点
《3.2 XOR树的故障定位》
3.2 XOR树的故障定位
由于GRM电路的XOR树的输入为AND门阵列的AND门输出, 增加了对XOR树进行故障定位的难度。下面用AB表示在XOR树中从节点A至节点B的路径, 包含A和B两个端点 (节点) 。由于XOR树是无扇出电路, 从一个节点A至另一节点B的路径是唯一的。设每一个与门ANDj (j=1, 2, …, m) 的输出节点为Yj, 电路的原始输出 (主输出) 节点为Y, 因此Y1Y, Y2Y, …, YmY都是XOR树中的路径。为XOR树的故障定位设置两张表Tab.1和Tab.2, Tab.1用于存放可能是有故障的节点, Tab.2用于存放无故障节点。
《3.2.1 XOR树s-a-0故障的定位 对XOR树的s-a-0故障定位采用算法1。》
3.2.1 XOR树s-a-0故障的定位 对XOR树的s-a-0故障定位采用算法1。
算法1
Step 1 使控制输入C0=0, C1=C2=C3=1;置Tab.1和Tab.2为空。
Step 2 首先对门AND1, 由于它的输入节点是最少的, 因此可以选择电路的一个输入矢量X1, X1使AND1的输出Y1的值为1, 而使其他与门ANDj (j>1) 的输出Yj的值为0。这里, 选取的X1是把与AND1的输入对应的电路原始输入节点的值取为1, 而把原始输入的其它节点取值为0。例如, 对有6个原始输入x1 … x6 的GRM电路, 若AND1的输入为x1, x3和x4, 则把其输入值取1, 而把x2, x5和x6的值取0。
对电路施加矢量X1, 若电路的输出Y=0, 则在XOR树中从节点Y1至Y路径上有一个节点发生s-a-0故障, 将路径Y1Y中所有节点写入Tab.1;若电路的输出Y=1, 则节点Y1至Y路径上所有节点无故障, 将Y1Y路径上所有节点写入Tab.2。
Step 3 对AND阵列的其他与门ANDj (j≥2) 可进行类似于门AND1的处理, 但此时当选择一个输入矢量Xj使门ANDj的输出Yj =1时, 可能会使多个 (设为k个) 其他与门ANDi (i<j) 的输出Yi=1。下面针对路径YjY进行讨论。
在对路径YjY进行操作时, 若在对Yi (i=1, 2, …, j-1) 进行的操作中路径都无故障, 此时把路径YjY与路径Yj-1Y的交点记为C, 对应C的XOR门输入节点记为A和B, 如图4 (a) 所示。设输入矢量Xj会使k个门ANDi (i<j) 的输出Yi=1。当k=0或偶数时, 对被测电路施加矢量Xj, 若电路输出Y=0, 则路径YjB有故障;若Y=1时, 则路径YjB无故障。当k为奇数时则相反, 若Y=1, 则YjB有故障;若Y=0时, 则YjB无故障。若确定了路径YjB有故障, 则转Step 4, 若确定路径YjB无故障, 则对路径Yj+1Y继续进行此步的故障定位操作。
Step 4 若发现一条路径有故障, 则设此故障路径为YtY。通过选取XOR树中的一些路径YjY (j>t) , 并对电路施加多个矢量Xj, 即可确定故障节点。首先考虑到与故障路径YtY相交的路径YjY, 见图4b, 施加矢量Xj, 当k=0或偶数时, 若Y=0, 则CY故障 (YtA无故障) , 若Y=1, 则YtA故障 (CY无故障) ;当k为奇数时, 若Y=1, 则CY故障, 若Y=0, 则YtA故障。其具体步骤见图5。
当已确定故障路径为Y1Y时, 对电路施加矢量X2, 若电路输出Y=0则m12Y故障, 节点Y1无故障, 若电路输出Y=1则节点Y1故障, m12Y无故障。若是m12Y故障, 则再用路径Y3Y的矢量X3判定是节点m12还是路径m1234Y故障;若m1234Y有故障, 则用路径Y5Y的X5判定是节点m1234还是节点Y有故障。因此当路径Y1Y有故障时, 只需用YjY中的一些路径就可确定故障节点, 例如图5中的Y2Y, Y3Y和Y5Y。若确定路径Y1Y无故障, 则故障路径在其他的子树上, 例如当路径Y5Y有故障时, 由于Y1Y无故障, 因此节点Y无故障, 是路径Y5m5678有故障, 此时可对以节点m5678为输出的子树进行处理, 依次选取路径Y6m5678、Y7m5678来进行。
在算法进行过程中当发现故障路径时, 将该路径中不在Tab.2中的节点写入表Tab.1;当发现无故障路径时将其写入表Tab.2, 并在表Tab.1除去此路径的节点。确定某一路径有故障, 则使用Setp 4以缩小故障范围, 当表Tab.1中只有一个节点时, 该节点即为故障节点, 算法结束。
《3.2.2 对XOR树s-a-1故障的定位》
3.2.2 对XOR树s-a-1故障的定位
首先确定XOR树是否有s-a-1故障。设零矢量θ为:控制输入C0=C1=C2=C3=0, 电路的所有原始输入节点取值0。在零矢量θ作用下, 若电路的原始输出Y=0, 则XOR树无s-a-1故障;若Y=1, 则XOR树有s-a-1故障。XOR树的s-a-1故障定位与s-a-0故障定位类似, 主要是在算法1中把Y=0改为Y=1, 而把Y=1改为Y=0。每一个与门ANDj仍用前面的方法选取矢量Xj。例如相对应于Setp 2, 在矢量X1的作用下, 若Y=1, 则路径Y1Y有s-a-1故障;若Y=0, 则路径Y1Y无故障, 因为故障s-a-1只可能发生在路径Y1Y或其他路径YiY (2≤i≤m) 。
《3.3 AND阵列的故障定位》
3.3 AND阵列的故障定位
在进行故障定位时, 依次确定门AND1, AND2, …, ANDm是否有故障, 然后对故障节点进行定位。
《3.3.1 AND阵列s-a-0故障的定位》
3.3.1 AND阵列s-a-0故障的定位
对AND门阵列的每一个AND门, 由于每个输入节点的s-a-0故障和门输出节点的s-a-0故障等效, 因此只需把故障定位到AND门。
算法2
Step 1 使控制输入C0=0;置j=1。
Step 2 选取电路的一个输入矢量Zj, 使ANDj的输出Zj的值为1。这里选取Zj时是把对应ANDj输入节点的控制输入Ci (1≤i≤3) 和电路原始输入的值全取1, 其他输入节点值取0 (与算法1中选取矢量Xj类似) 。对被测电路施加矢量Zj, 记电路的输出为f (Zj) , 并计算电路无故障时的输出值g (Zj) 。 若g (Zj) ≠f (Zj) 则ANDj有故障, 算法结束; 若f (Zj) =g (Zj) 则ANDj无故障, 执行Step 3。
Setp 3 置j←j+1, 若j<m+1, 转Step2;若j=m+1, 输出所有AND门无s-a-0故障的相关信息, 算法结束。
《3.3.2 对AND阵列s-a-1故障的定位》
3.3.2 对AND阵列s-a-1故障的定位
AND阵列的s-a-1故障主要有AND门的输入节点故障和输出节点故障, 把AND门的输出节点故障作为XOR树的输入节点故障处理, 这里仅考虑AND门输入节点的s-a-1故障。
算法3
Step 1 使控制输入C0=0;置j=1。
Step 2 对电路AND阵列的门ANDj, 依次确定其输入节点ui (i=1, 2, …, Kj, Kj为输入节点数) 和输出节点Yj的s-a-1故障, 置i=1。
Step 3 对门ANDj的输入节点ui, 生成矢量Ui, 使该节点ui值为0, 而使门ANDj的其他输入节点uj值为1, 对ANDj未使用的其他控制输入Ci (1≤i≤3) 值和原始输入值为0。施加矢量Ui, 记电路的输出为f (Ui) , 并计算电路无故障时的输出值g (Ui) 。 若f (Ui) =g (Ui) , 则ANDj的节点ui无故障, 执行Setp 4。若f (Ui) ≠g (Ui) , 则ANDj的输入节点ui或输出节点Yj有故障。由于在算法1中已对节点Yj的故障情况做了处理。若节点Yj有故障, ui就无s-a-1故障, 执行Step 4;若节点Yj无故障, ui就有s-a-1故障, 输出相关的故障信息, 算法结束。
Step 4 置i←i+1, 若i≤Kj , 转Step 3;若i>Kj , 执行Step 5。
Step 5 置j←j+1, 若j≤m, 转Step 2;若j>m, 则所有AND门的输入节点无s-a-1故障。输出相关信息, 算法结束。
算法2和算法3说明:
1) 算法2中的矢量Zj和算法3中的矢量Ui有相同的性质, 都使所有门ANDs (s>j) 的输出Ys=0, 以及对AND阵列中的与门按AND1, AND2, …, ANDm的次序操作, 保证了算法的有效性。
2) 算法3中对无故障电路输出g (Ui) 的计算, 可根据逻辑函数GRM模式中每一积项的表达形式, 模拟计算在矢量Ui下每个门ANDk (1≤k≤j) 无故障时的输出值Yk 。若Yk中等于1的个数为偶数或0, 则电路输出Y=0, 为奇数时Y=1。算法2中g (Zj) 的计算与此类似。
3) 在算法2和算法3中, 对控制输入C1, C2和C3的扇出分支节点, 可作为AND阵列中AND门的输入节点进行故障定位。
在具体进行故障定位时, 可首先对被测电路施加测试集T, 若发现电路有故障 (本文假定只发生一个故障s-a-0或s-a-1) , 再做故障定位。在做定位时, 若用电路每部分的测试集T1, T2和T3能将故障确定于输入与控制、AND阵列、XOR树中的一个部分, 则只需对相应的部分进行, 否则首先对电路的输入与控制部分进行故障定位;然后对XOR树及AND阵列部分做故障定位。
《3.4 实验结果》
3.4 实验结果
已将如上故障定位方法用C++ 语言在586计算机 (Pentium4, 1.5 GHZ) 上实现, 实验时电路结构采用电路描述语言 (CDL) 描述;然后生成检测电路故障的测试集T;对电路依次设置每一节点的s-a-0或s-a-1故障, 并由算法来进行定位。选取了15个逻辑布尔函数, 变量最多的一个函数有19个变量, 25项积项, 图2所示电路是实验时选取积项数最少的一个。结果表明:故障定位准确率均为100%;对GRM电路节点的s-a-0或s-a-1故障进行定位所需的平均时间<2 min;随着电路规模的增大, 故障定位时间会有所增加。
《4 结论》
4 结论
在数字电路的可测性设计中, 研究逻辑函数电路可测性的实现具有实用价值, 逻辑函数的GRM形式可以使用AND阵列和XOR门树结构来实现, 用本文方法所得的电路是完全可故障定位的。此外, a. 本文采用增加三个控制输入C1, C2和C3的方法, 在于减少GRM电路的测试集规模, 否则电路测试集规模会较大