专利名称::数字运算电路的制作方法
技术领域:
:本发明涉及一种数字运算电路,更具体地,本发明涉及一种具有错误检测功能的电路。数字运算电路广泛地应用于许多领域。在过去的十年里,电子技术得到迅速发展,其结果是增加了集成电路和系统技术的复杂性。复杂性的增加产生了一些问题,具体地讲就是因老化而引起的可靠性降低、操作中的瞬态故障和制造过程中的生产故障。这些问题随着电路和系统复杂性的增加和器件尺寸的减小而增加。增加电路复杂性的另一个方面是,对一个复杂电路或系统的所有方面的完全测试也许在经济上是不可能的。因此,这样的一种电路或系统在制造时就可能会有导致未能识别的错误形式。对于一些安全要求严格的应用,诸如航空器系统,检测电路错误变得越来越重要。检测错误的一些方法是公知的,诸如象在“错误检测和错误校正码”(“ErrorDetectingandErrorCorrectingCodes”),RWHamming,DellsystemsTechnicalJournal,Vol29No1pp147-160,1950年1月中描述的海明(Hamming)码的应用。海明码是奇偶检验码,它适用于检验数据的传输和存储。但是,它们有一个严重的缺点,这就是它们不能在运算操作中保留,因而不能用于运算电路。克服有关在运算操作中保留的限制的编码见“错误检测码,自校验电路和应用”(“ErrorDetectingCode,Self-CheckingCircuitsandApplications”),JWalkerly,Elserier,NorthHollandInc,1978。一个简单的例子就是所谓的AN码。其中,输入数据字乘以一个外加的被乘数。因此,不是此被乘数的倍数的输出可以认为含有错误。所有的运算码都需要附加电路以实现原始编码和错误检验。而且,由于编码后的数据字比未编码时长,因此需要更多的硬件以实现其运算功能。对于错误检测,也曾采用时间冗余方法。与执行所需操作的正常时间相比,这些时间冗余方法需要额外的处理时间。因此,如果一个操作在没有错误检测时需要一个时间单元来完成,那么在一个采用时间冗余的错误检测系统中,此操作可能需要两个或多个时间单元来实现。Patel和Fung已经提出了一个时间冗余的例子(“ConcurrentErrorDetectioninALU’sbyRecomputingwithshiftedOperand”,JHPatelandLYFung,IEEETrans。OnComputers,Volc-31,pp589-595,July1982)。它包括两次计算一给定的结果,而同时在第一次和第二次计算之间对操作数的比特位进行移位。在重新对齐两个输出结果后,由硬件引起的任何错误将表现在所述两个输出结果中的不同位置上,因而可被检测到。这种方法可用于诸如算术逻辑单元(ALU)等的电路,前述ALU电路可以以模块的形式构成,而且在各模块之间几乎没有或者没有连通性。其缺点是需要额外的硬件模块以处理所述的被移位的操作数。THChen等人的方法(“DesignofconcurrentError-DetetableVLSI-BasedArrayDividers”,THChen,LGChen,YSChang,ProcIEEEInternationalConferenceonComputerDesign(ICCD),1992)利用电路的规则性而将一个电路分成两个相等的部分,其中每一部分仅执行所需计算的一半。然后,每一部分电路被使用两次以产生两个完整的结果,而在没有错误时,这两个完整的结果应该是相等的。但是,这种方法仅限于具有能够分开执行计算功能的规则性的电路。本发明的一个目的是提供一种具有错误检测功能的数字运算电路的可供选择的结构。本发明提供了一种数字运算电路,包括用于提供至少一个输入操作数到所述电路中的装置,其特征在于此电路包括(i)用于把输入到所述电路的至少一个操作数进行反相的装置,以及(ii)一种装置,用于从被反相和未反相的操作数所产生的电路输出获得一比较值,以便提供在电路操作中的错误产生或未产生的一个指示。根据本说明书的目的,术语“操作数”定义为一个带符号的二进制数,本发明的数字运算电路对所述的二进制数执行一个运算操作。本发明适用于其符号隐含于比特表达式中的那些操作数,即这些操作数没有表示符号的附加位。因此,本发明适应于采用补码表示的系统,例如2的补码表示。术语“反相”(inverting),对于一个操作数来说,“反相”意味着改变一个数的符号而保持其大小不变。对于一个二的补码数,就是将此数的所有位分别相应地从0或1改变到1或0,并且对产生的结果加1。术语“反相”(inverted)和“未反相”(non-inverted)可由此得到解释。本发明具有的优点是,它提供了一种用于运算电路中的错误检测的装置,与现有技术中的电路相比,此装置能够简单地实现。输入操作数被两次提供给本发明的电路并在第二次应用中被反相。当这两个输出结果由比较装置比较时,此反相使错误能够被检测。本发明提供了检测由永久的和瞬态的电路故障所引起的错误的能力,前述的故障改变了一个电路节点处的逻辑值。本发明也能够检测多个错误。本发明可用于现有的数字信号处理(DSP)电路,并且也可用于自测试应用。本发明的数字运算电路可以提供一个能指示电路中错误的位置的输出值。当故障位置已被确定时,纠错将易于进行。在本发明的一个优选实施例中,当电路中没有故障时从所述比较装置产生一个零输出。而一个非零输出表示存在一个错误。在另一个实施例中,本发明包含至少两个相同的数字运算电路,其中的一个对所述的操作数执行一个操作,而另一个对所述的被反相的操作数执行一个并发的操作。现在,本发明将结合附图进行描述,其中图1是本发明的一个数字运算电路;图2是图1所示电路操作的时序图;图3是乘法器—累加器形式的本发明的数字运算电路的另一个实施例;图4是图3中的电路的一个单元;图5是图3所示电路在错误检测中的一些例子。参照图1,图1显示了本发明的数字运算电路的一个方框图,此电路总体上被标示为10。电路10接收图1中没有示出的两个输入数A和B,这两个数为二的补码数,并且电路10将A和B相加而产生一个输出即二的补码和数S。A和B都为四位数,其相应的位分别是a0至a3和b0至b3。一般地,A和B相应地具有位ai和bj(i=0-3,j=0-3),其中i=0和j=0分别表示最低有效位(Lsb),而i=3和j=3分别表示最高有效位(msb)。和数S是一个五位数,其相应位为s0至s4;通常,S具有位sk,其中k=0和k=4分别表示S的Isb和msb。由于两个四位数A和B相加可能产生一个进位位,因此S有第5位s4。数A和B分别在标示为12、14、16、18和20、22、24、26的输入线上输入到电路10,其中所有的这些输入线都连接到一反相电路28。反相电路28有一允许输入端30。当反相电路28从允许输入端30接收到的一输入信号为高电平时,它将产生输出-A和-B,即它将使数A和B反相。A和B的符号的反相通过将相应的每一位a和b分别反相并对结果各自加1来实现。当所述允许输入信号为低电平时,所述反相电路28的输出为A和B,即数A和B经过所述反相电路28传输时没有对其执行任何操作。反相电路28的输出位a0、a1、a2、a3和b1、b2、b3、b4分别输出到线32、34、36、38和40、42、44、46上。线32-38和40-46将反相电路28连接到加法电路48。加法电路48是一个二进制行波加法器,此加法器将二的补码数A和B,或者它们的反相形式-A和-B相加而产生一个二的补码结果。加法电路48的输出位s0、s1、s2、s3和s4分别输出到线50、52、54、56和58上。输出线50-58将加法电路48连接到一组时钟触发锁存器60,其中每条线分配一个锁存器。当时钟信号为高电平时,这些锁存器60将其内容传送到输出线62、64、66、68和70,而当时钟信号为低电平时,这些锁存器端保持那些信号值。一组分开的输出线72、74、76、78和80分别取自输出线50-58。当所述反相器28已经被允许输入端30起动时,这些输出线传送来自加法电路48的输出位s0至s4。因此,当电路48输出-A和-B的和数时,线50-58的输出分别被传送到线72-80上。输出线62-70和72-80连接到一比较电路82。由这些输出线传送的比特分别是来自锁存器60的比特和来自加法器电路48的比特。比较电路82比较相应的位并产生一个5比特的输出,r0、r1、r2、r3和r4。这些比特输出到线84、86、88、90和92上。输出线84-92连接到具有一允许输入端96的锁存器94。此锁存器94具有5条输出线98、100、102、104和106。当允许输入端96为高时,此锁存器94接收线84-92上的比特并输出到线98-106上,而当允许输入端为低时则保留它们。现在将参照图2的时序图来描述电路10的操作。在一个周期的开始,在时刻t=0时,输入数A和B输入到输入线12至18和20至26上。它们在这些线上保持两个时钟周期,即直到时刻t=4。由于在此时刻所述反相电路28没有被输入端30启动,因此,数A和B未经反相地通过反相电路28而传送。因此,数A和B分别在线32-38和40-46上输入到加法器电路48。加法器电路45计算和数S1=A+B,并且此结果输出到线50-58上。在时钟信号t=1时,在线50-58上的和数S1的值存储在锁存器60中。因此,在线62-70上的锁存器60的输出保持等于线50-58上的输入S1直至在t=3时的下一个时钟信号为止。在时刻t=2,反相电路28的允许输入端30的反相信号变成高电平,因而启动反相器电路28。然后反相器电路28产生数-A和-B,它们分别输出到线32-38和40-46上。然后加法器电路48计算和数S2=(-A)+(-B),此和数输出到线50-58上,并且因而输出到与线50-58相连接的线72-80上。结果是,在时刻t=2和t=3之间,比较电路82具有的输入为线62-70上的S1和线72-80上的S2。比较电路82通过将和数S1和S2相加而比较它们,即,此比较电路为一加法器电路,而其结果输出到线84-92。在时刻t=2和t=3之间,在锁存器94的允许输入端96上的信号变为高电平。因此,S1和S2的比较结果输出到线98-106上并且在时刻t=3和t=4之间保持在这些线上。电路10以下述的方法检测在其操作中的错误。如果电路10在操作时没有错误,那么在线98-106每一个上的输出都为零。这是因为,比较电路82把S1和S2相加,它等价于将(A+B)和((-A)+(-B))相加,其结果等于零。然而,如果在电路10中存在错误,那么,比较电路82的一个或多个输出位就可能为1。通常,在通过电路10的第一趟操作结束时,即在A和B被反相之前的时刻t=2时,锁存器的输出为S1=A+B+e′(1)其中e′是由第一趟操作的错误引起的一个值,当没有错误时e′为</tables></tables>电路的第二趟操作中产生了一个错误,但是在第一趟操作期间没有产生错误,因为在第一趟操作中b1已经具有值1。对这两趟操作结果的比较在输出线98-106上产生了一个非零的结果00010,这表示错误已经产生。例3-位a0保持为0第一趟操作第二趟操作比较例3显示了传送位a0的线固定为1时的影响。这使得在两次通过电路10操作期间都产生了一个错误。这两趟操作结果的比较也在输出线98-106上产生了一个非零的结果11110,它表示产生了错误。例4-加法器48的进位位固定为0在这个例子中,由a1和b1相加产生的进位位以及a0和b0相加的任意进位都保持为0。第一次传送第二次传送比较仅仅在第一趟操作中引起了一个错误,同样,其非零的比较结果表示产生了一个错误。由上可见,例2、3和4中的所有错误在S1和S2的比较中产生不同的结果。因此,当一个错误发生时,其所导致的比较值就能够提供在电路10中的错误位置的指示。参照图3,显示了一个本发明的数字运算电路的示意图,其形式为二的补码乘法器—累加器电路,整个电路被标示为210。电路210接收二的补码数X、Y和Z作为输入,并且产生一输出P,这里的P=XY+Z。数X、Y和Z为四位二的补码数,它们分别为位x0至x3、y0至y3和z0至z3。P是一个由位P0至P7表示的八位二的补码数。电路210包含由圆圈表示的四行乘法器—加法器单元212,每行有四个这样的单元。单元212也安排成四列。这些单元具有表示其行和列位置的下标i,j;即,单元212ij是第i列中的第j个单元(i=0-3,j=0-3)。列索引i以从右到左的方向递增,因而单元212oj(j=0-3)是最右边的单元。同样地,行索引j以从上到下的方向递增,因而单元212io(i=0-3)是最上面的单元。这些列都是斜的,使得单元212ij位于单元212i+1,j-1的下面,即,行i的一个单元从相同列中的行i-1上的单元位置向左移动一个单元。单元212由诸如x的连接连到其相应列的邻元,并且由诸如y的连接连到其行的邻元。它们还由诸如s的连接连到在次最高行中的邻元。例如,单元21222由连接s31连到单元21231。为了减少图示的复杂性而没有列出所有的x、y、z的各种连接。一个进位输入,进位j输入到每行的最右单元212oj。对于行j=0,1和2,这个输入的值为0,而对于行j=3,其值为1。在每一行中的每个单元都有一个诸如c11的进位连接连到其在此行中的相邻的单元212。另外,单元21230、21331和21232具有连到在相同列i=3中的次低单元212的进位连接c30、c31和c32,即,前述的那些连接是连到单元21231、21232和21233的。单元21233具有一进位连接c33连到一个半加器214。半加器214具有一个设置为1的输入216。电路210有8个输出。每个输出是二的补码输出P中的一位。它们由线p0至p7表示。线p0至p3从单元21200、21201、21202和21203输出;即,它们从列i=0中的各个单元输出。输出p4至p6从单元21213、21223和21233输出,即,它们从列j=1,2,3中的各单元212输出。输出p7是所述半加器214的一个输出。在所述顶行即j=0中的各单元212接收对应于二的补码数x的输入,而z则输入到对应于各个位标识的单元212io中。例如,位x2和z2输入到单元21220。同样地,位x1和a1输入到单元21210。在最右列即i=0中的单元接收对应于二的补码数Y的输入。y0至y3中的每一位输入到对应于各个位标识的单元212oj。例如,位y1和y2输入到单元21201和21202。参照图4,显示了一个诸如212ij的单元的逻辑和连接的示意图。每个单元212ij有两个部件一个与门300和一个全加器302。诸如300的每个与门有两个输入来自斜线x的一个输入和来自线y的一个横向输入。线x从单元212i,j-1到达单元212i,j+1而对单元212ij构成一个列贯通互连(throug-interconnection)。同样地,线y从单元212i-1,j通至单元212i+1,j而对单元212i,j构成一个行贯通互连。因此,在线x和y上的比特同时传送到在其相应的列和行中的所有单元212。加法器302接收来自上方的一个和数输入和一个由与门300的输出构成的第二输入。它还从右边的c上接收一个进位位并产生一个进位位输出到左边的c′上。线x和y提供来自数X和Y的各个位。每个与门300对连到其上的x和y线上的比特作“与”运算。它产生一个这些比特的部分积并输出到全加器302,此全加器302从线s接收第二输入并且从进位线c接收第三输入。对于在j>0的那些行中的单元212,输入线s连接到单元212i,j并从其斜上方的相邻单元212i+1,j-1中提供一相应的位。进位线c从相同行中的单元212i-1,j中提供一个进位位。全加器的进位输出c′提供一个进位位到位于此行中存在的下一个单元212i+1,j。其和数输出s′提供一个部分和而作为下一个单元212i-1,j+1的输入。送到单元21230的输入比特z3被反相。这是因为它是二的补码数Z的最高有效位并且具有一个负权(negativeweight)。单元21230、21231、21232、21223、21213和21203具有代替与门300的与非门(未示出)。这是因为,这些单元212包括诸如x3的符号位与非符号位的交互作用并且产生具有负权的部分积。用与非门代替与门300可在全加器302做加法之前对所述的部分积进行反相。现在描述电路210的操作。如前所述,对应于数X的比特x0至x3通过顶行上相应的单元212io输入到电路210。比特y0至y3通过电路210右侧的单元212oj输入。如前所述,比特x0至x3还通过单元212的互联而传送到相应输入列中的其余单元。同样地,如前所述,比特y0至y3也传送到相应输入行中的其余单元。因此,数X的每一位都在其输入列的单元212中与数y的每一位形成一个部分积。例如,比特x2在单元21220中与y0、在单元21221中与y1、在单元21222中与y2、在单元21223中与y3都分别形成一个部分积。如前所述,对应于数Z的比特z0至z3通过相应的顶行单元212io也输入到电路210。在单元212io中,z0至z3的每一位都在诸如302的全加器中加到来自比特y0对x0至x3的部分积中。由上可知,电路210的功能是将数x和y相乘,从而在单元212中形成部分积。然后加上第三个数Z。所述各个部分积在单元212中求和,其流程顺序是在诸如s′的输出线上从顶至下。如前所述,最后的乘积是出现在输出线p0至p7上的值P=XY+Z。现在描述在电路210中的错误检测。图5显示了电路210操作的三个例子。为清晰起见,单元标识没有注明。在每个单元圆圈中的数对应于在此单元中计算的部分积。在这些单元的水平输出线上的数是相应单元的进位输出值;而在其垂直输出线上的数是对应于s′的部分和的比特输出。图5的例子用下面的操作数值来说明所述电路的操作X=6(0110),Y=-4(1100),Z=-7(1001)。电路的输出P的值为P=11100001。为了错误检测,需要产生值-P。为了实现这一点,输入操作数x和z被反相,但y不反相。可替换的方法是,Y和Z被反相而X不变。用于P的反相的操作数值如下-X=-6(1010),Y=-4(1100)、-C=7(0111)。例1说明了电路210没有错误时的操作。在这个例子中输出-P等于00011111。P和-P相加产生的和数为00000000,它表示没有产生错误。例2说明了电路210在单元21211中有一个错误时的操作。这里的部分积固定为1。这使得在输出中P为11100101。在第二趟电路的操作中,由于操作数被反相,因此,输出P为00100011。因此,P和-P的和等于00001000。由于此和数为非零,因此它表示已经产生了一个错误。例3说明了两个错误同时产生时的影响。这里,z0在输入时固定为0,而输出p6固定为1。因z0固定为0而产生的错误在两趟操作中都引起一个错误,而p6固定为1仅在第二趟操作中引起一个错误。其结果是,在第一趟操作中输出P为11100000,而在第二趟操作中输出-P为01011110。P和-P的和数为00111110,也表示产生了错误。如同电路10,对未加改变的操作数和然后经反相的操作数的输出相加后所得和数为非零这一情况提供了出现故障的一个指示。此外,和数的实际值还可能提供故障位置的一个指示。如同电路10,其错误检测由时间冗余,即由经过一个电路的两趟操作来实现。采用硬件冗余来实现错误检测也是可能的,即,用两个或多个诸如210的电路来对被反相的操作数计算-P。这将使得在不损失处理时间的条件下实现错误检测。所述的错误检测方法可以用于具有多个操作数且其中至少一个可被反相的任意电路中。此错误检测方法也可用于采用带符号二进制数表示(SBNR)的电路中。在无错误操作中,本发明也可提供一非零的和值。例如,表示对一输入操作数x的递增的一个电路的输出Y将由Y=X+1给出。在第二趟操作时把X反相将产生一输出Y=-X+1。对第一和第二趟操作输出进行比较在无错该操作时会产生一个等于2的和数S=(X+1)+(-X+1)。在此例中,当其比较值是2以外的一个数时,电路操作中的一个错误就被检测到。权利要求1.一种数字运算电路,包括用于提供至少一个输入操作数到所述电路(10)的输入装置(12-18),其特征在于所述电路(10)包括i)用于把输入到电路(10)的至少一个操作数进行反相的装置(28),以及ii)装置(82),用于根据从被反相和未反相的操作数所产生的电路输出(98-106)获得一比较值,从而提供在电路操作中的错误产生或未产生的一个指示。2.一种数字运算电路,包括用于向其提供至少一个输入操作数的输入装置(12-18),其特征在于所述电路(10)包括i)用于把输入到电路(10)的至少一个操作数进行反相的装置(28),以及ii)比较装置(82),用于比较对应于被反相和未反相操作数的电路输出信号,以便提供在电路操作中错误的产生或未产生的一个指示。3.根据权利要求1或2所述的电路,其特征在于,在用另一个相同的电路计算未反相操作数的同时,它被安排对被反相的操作数计算电路输出信号。4.根据权利要求1或2的电路,其特征在于,它被安排成在不同的时刻产生被反相的操作数的输出和未反相操作数的输出。5.根据前述任一权利要求的电路,其特征在于,此电路被安排成响应在电路操作中出现的错误而提供一非零比较值。6.根据权利要求2至5中任意一项要求的电路,其特征在于,所述的输入装置(12-26)提供至少两个输入操作数。7.根据前述任一权利要求的电路,其特征在于,其中的输入操作数为二的补码的数。8.根据权利要求7的电路,其特征在于,所述电路被安排成将所述的输入操作数相加。9.根据权利要求7的电路,其特征在于,此电路是一个乘法器—累加器电路(212)。10.根据权利要求2~9中任意一项要求的电路,其特征在于,所述的比较装置提供电路中错误位置的指示。11.根据前述任一权利要求的电路,其特征在于,此电路可用于带符号的二进制数表示(SBNR)的操作。12.一种在数字运算电路(10)的操作中检测错误的方法,包括下列步骤(i)向所述电路(10)提供至少一个输入操作数;(ii)把所述的至少一个输入操作数反相;以及(iii)比较由被反相和未反相的操作数所产生的电路输出以提供一比较值,此比较值指示在电路操作中出现一个或多个错误或未出现错误。13.一种用于在电路操作中检测错误的数字运算电路。全文摘要一种数字运算电路(10),包括一反相电路(28),此反相电路连接到一个要检测出其中错误的数字电路(48)。输入到电路(10)的一个操作数在第一操作中产生一输出结果并存储于一比较电路(82)中。此操作数在电路(10)的操作的第二周期中由反相电路(28)反相,并且其输出结果由比较电路(82)与来自第一操作的结果进行比较。来自此比较的一个非零结果表示在电路(10)的操作中产生了一个或多个错误。文档编号G06F7/544GK1163007SQ9519618公开日1997年10月22日申请日期1995年9月11日优先权日1995年9月11日发明者R·A·埃文斯申请人:英国国防部