用于多精度整数算术运算的装置的制作方法

文档序号:6415917阅读:179来源:国知局

专利名称::用于多精度整数算术运算的装置的制作方法
背景技术
:本发明一般涉及以大整数为运算对象的算术运算,具体涉及一种用于进行大整数乘法和模数约简(modularreduction)运算的装置。现有技术的说明本发明是根据包括RSA方案(RSA研究室,“Thepublic-KeyCryptographyStandard”(公钥加密标准),RSA数据安全公司,Redwood市,加利福尼亚,1993年11月);Diffie-Hellman方案(W.Diffie和M.Hellman,“NewDirectionsinCryptography”(密码技术的新方向),IEEETransactiononInformationTheory(IEEE信息理论汇刊),Vol.IT-22,No.6,1977年6月,74-84页);和DSA方案(“DigitalSignatureStandard”(数字符号标准),FIPS公告186,国家标准与技术协会,美国商业部,1994年5月18日)在内的多种公钥加密方法应用不断增长的需求而进行的。通常,这些应用均需要乘方取模(modularexponentiation)的计算步骤,即,类似于“求AB与P模数”形式的计算,其中A,B和P均是大整数。乘方取模运算是一个需要很长时间的大计算量运算过程,特别是在配置较低的计算装置上,情况尤显突出。通常,计算装置均被设计成以固定大小的基本单位来对数据进行处理。这种基本数据单位通常被叫做一个“字”并由“b”个数位组成。其中b值的大小是在最初设计该装置时便已选定的。典型的b值为8、16、32或64位。一个字可以表示0≤x≤W-1范围内的一个非负整数x,其中W=2b。而如果需要表示大于W-1的整数X,则需要使用一种多精度表示方法。如果0≤X≤Wn-1,其中n是某个正整数,则X可被表示成X=x{n-1}*Wn-1+x{n-2}*Wn-2…+x{1}*W+x{0},其中每个x{j}的取值范围是0≤x{j}≤W-1。因此,整数X可以由n个字x{0},x{1},…,x{n-1}来表示,同时字x{j}代表了作为Wj的系数的某个整数。对于某个给定的字长b,以及某个给定的字数n,X的上述多精度表达式是唯一的。乘方取模运算需要包括以多精度整数为运算对象的多种运算。其中的一种是乘法运算。给定两个整数X和Y、其中每个分别字数为n的多精度表达式,则其可以很容易地通过对该种计算装置进行编程,来计算其乘积Z=X*Y。此运算过程比小学中所教的用于进行多位数乘法的“乘与加”方法略微复杂。该运算过程的复杂性为二次,即,其所必须计算的“内积”的次数为n2。所得乘积Z需要由2n个字来进行表示。在实际的公钥应用中,单独一次乘方取模运算需要成百上千次此类乘法运算,而每次又均以长度为几十或几百个字的整数作为运算对象。在配置较低的计算装置上,单独一次乘方运算的计算时间便可能会长达几分钟。因此,对于许多应用,例如电子商务来说,其将由于时间太长而无法使用。乘法运算并不是乘方取模所涉及的仅有运算类型。另一种运算是模数约简,即通过应用“moduloP”运算将乘积Z的字数从2n个字减小为n个字。模数约简的复杂性与乘法运算的复杂性大致相同,因而两种运算几乎分别占用了乘方取模总运算时间的各一半。发明概述本发明利用了如下条件,即如果计算装置能够高效地执行下述运算Z←Z±(X*Y),则其便可以快速地进行多精度乘法和模数约简运算,对现有技术进行了改进。在此运算中,X是一个由m个字所表示的整数,而Y和Z则是分别由n个字所表示的整数。其中n是乘方取模运算中所计算模数的字数,同时m小于n。通过分别执行近似n/m次上述计算,便可以实现多精度乘法和模数约简,因此对于整个多精度乘法,所需要的运算总次数为2n/m。本发明公开了一种能够被添加到某种计算装置上,以使其能够高效地进行上述复杂运算的协处理器。当计算装置发出指令要求其进行上述运算时,该协处理器将执行Z←Z±(X*Y)运算,从存储器中读出X,Y和Z,并将新求出Z值的各个“字”写回到存储器中。该计算装置将这些运算汇编为多精度乘法,然后是模数约简,最后成为乘方取模运算。上述协处理器的主要构件是一个大整数单元(LIU)。该种协处理器包含有一个或多个彼此相同的LIU。其中每个LIU又分别包括一个乘法器,一个加法器,一个寄存器和一个或门。多个LIU可以彼此连在一起,而形成一个LIU阵列,其中包括一个非门,一个锁存器和一个输出门。该阵列中所包含LIU的个数越多,则乘方运算的速度便越快。本发明另外的目的和优点将部分地通过接下来的说明,以及部分地通过本发明的实践来阐明。另外,其也可以利用原附的权利要求中所特别指出的工具及其组合,来实现和获得本发明的目的和优点。附图的简要说明本说明书所收入并构成了本说明书的一部分的附图,例示了本发明的优选实施例,并与本说明书一起用于对本发明的原理进行解释与说明。其中图1所示为与计算装置在一起的协处理器的示意图。图2所示为大整数单元(LIU)的示意图;图3所示为四个LIU互连在一起构成了一个LIU阵列的方框图;图4所示为与一个控制器和随机存取存储器(RAM)组合在一起的LIU阵列的示意图;图5所示为与一个控制器和具有读取-修改-写入功能的RAM组合在一起的LIU阵列的示意图;图6所示为与一个控制器、第一RAM和第二RAM组合在一起的LIU阵列的示意图;图7所示为一种流水线型大整数单元(LIU)的示意图;图8所示为互连在一起构成了一个LIU阵列的4个流水线型LIU的方框图;图9所示为一种双端口RAM装置的示意图;以及图10所示为一种与双端口RAM配合使用的读取-修改-写入装置的方框图。优选实施例的详细说明接下来将参照附图中所示的实例(其中相似图注表示相似的元件),对本发明的优选实施例进行详细地说明。在接下来的讨论中,记号“X~n个字”表示以上述多精度表达式格式所表示的整数X。另外其还引入了几种运算符。运算符“/”被用来表示舍去余数的整数除法。运算符“%”表示整数取模运算,即,求上述除法运算所得的余数的运算。利用上述记号,X/W=x{n-1}*Wn-2+x{n-2}*Wn-3…X{2}*W+x{1},同时X%W=X{0}。本发明公开了一种可以被添加到计算装置上,以使其能够高效地执行上述运算的协处理器。该协处理器与计算装置11之间的配置关系如图1所示。协处理器14共享计算装置用来与其存储器12进行通信的总线。该总线的宽度与计算装置的字长b相匹配。当计算装置向其发出指令要求执行上述运算时,该协处理器将执行运算Z←Z±(X*Y),从存储器12中读出X,Y和Z,并将新求出Z值的各个“字”写回到存储器12中。计算装置将这些运算汇编为多精度乘法,模数约简,以及最后成为乘方取模。图2所示为大整数单元(LIU)21的示意图。协处理器14包含有m个彼此相同的LIU。LIU的数目决定了Z←Z±(X*Y)运算中各运算数的字数。乘方取模运算的执行时间近似与1/m成正比。由此,其向系统设计者提供了一种可伸缩(scaleable)体系,以使其能够在系统结构复杂度与运算速度之间进行折衷LIU越多,乘方运算的速度便越快。大整数单元(LIU)参照图2所示的大整数单元(LIU)21,位宽为1的信号被显示为虚线,而位宽大于1的则被显示为实线,同时标注有其位数的大小。在其它的另选实施例中,其位数可以不相同,本发明意欲涵盖所有此类型的另选实施例。第一乘法器输入m1和第二乘法器输入m2是到大整数单元21的两个被乘数输入。第一乘法器输入m1和第二乘法器输入m2分别是一个代表了位数为b的整数的字。第一乘法器输入m1和第二乘法器输入m2,被馈送给产生乘积信号p=m1*m2的乘法器22,其中“*”表示乘法运算。由于0≤m1≤(W-1)且0≤m2≤(W-1),所以乘积信号p的取值范围是0≤p≤(W-1)2。其意味着需要用2b个数位来表示乘积信号p。而乘积信号p则被分为高端部分积信号ph和低端部分积信号pl。高端部分积信号ph构成了乘积信号p的高端b个数位,而低端部分积信号pl则构成了其低端b个数位。因此,p=ph*W+pl,其中0≤ph≤(W-1),0≤pl≤(W-1)。高端部分积信号ph是大整数单元21的输出信号,而低端部分积信号pl则只用于内部计算。第一加法器信号a1和第二加法器信号a2,是到大整数单元21的两个加法器输入。其分别是一个代表了b位整数的“字”。第一加法器信号a1和第二加法器信号a2被馈送给加法器23。而加法器23同时还接收有低端部分积信号pl,及进位信号(carrysignal)c(其是一个2位数值)。加法器23产生第一和数信号qd,其中qd=a1+a2+pl+c。第一加法器信号a1,第二加法器信号a2,或低端部分积信号pl所可能具有的最大值为W-1。进位信号c所可能具有的最大值为3。因此,第一和数信号qd所可能具有的最大值为3*(W-1)+3=3W,其意味着需要用b+2个数位来表示和数信号qd。加法器23的输出第一和数信号qd被锁存到寄存器24中。寄存器24的位宽为b+2。每当到大整数单元21的时钟信号输入clk被触发时,第一和数信号qd的值便被传送给寄存器24的输出。寄存器24的输出为第二和数信号q。直到下一个clk输入,或大整数单元21的清零输入clr被触发时,第二和数信号q的值将保持不变。通过触发大整数单元21的clr输入信号,可以将寄存器24清零。当clr输入被触发时,寄存器24的输出位将被清为零。直到下一次clk输入被触发之前,该输出将一直保持为0,触发的同时第一和数信号qd的值将被传送给该输出。寄存器24输出上的第二和数信号q被分为一个进位信号c和一个和数信号s。进位信号c构成了第二和数信号q的高端2位,而和数信号s则构成了其低端b位。因此,q=cW+s,其中0≤s≤(W-1)且0≤c≤3。和数信号s是大整数单元21的一个输出信号。进位输入(carryin)信号ci是到大整数单元21的进位输入,而进位输出信号co则是其进位输出。两个信号均是一个1位值。进位输出信号co,是利用或门29,将进位输入信号ci与构成了第二和数信号q的各数位进行OR逻辑计算所得的逻辑或值。换句话说,如果进位输入信号ci为0,而第二和数信号q的每个数位也均为0,则进位输出信号co将为0;否则,进位输出信号co的值将为1。辅助进位信号ca,是利用或门25,对构成了进位信号c的两个数位进行逻辑OR运算所得的逻辑或值。换句话说,如果进位信号c的每个数位均为0,则辅助进位信号ca的值将为0;否则,辅助进位信号ca的值为1。LIU阵列说明如图3所示,可以将多个大整数单元互连在一起而构成一个LIU阵列。或另选地,一个LIU阵列也可以只包括一个LIU。图3中,每种信号的位宽或者为1,或者为b。位宽为1的信号被显示为虚线,而位宽为b的信号则被显示为实线。图3所示为其中将4个大整数单元,LIU{0},LIU{1},LIU{2},LIU{3}互连在一起来形成一个LIU阵列39时的情形。通常情况下,可以将任意多个的大整数单元互连在一起。而为了便于说明,本文这里仅考虑如图4所示将4个大整数单元互连在一起的情形,并将其推广到将任意多个大整数单元互连在一起的情形。第一数据信号y是到LIU阵列39的一个输入,并被加载到LIU{0},LIU{1},LIU{2},LIU{3},每个大整数单元的第一乘法器输入m1上。第二数据信号具有多个码元(element),x{0},x{1},x{2},x{3}。每个码元分别与LIU阵列39的每个大整数单元的第二乘法器输入m2相连,即每个码元被分别连到LIU{0},LIU{1},LIU{2},LIU{3}的第二乘法器输入m2上。第三数据信号z是到LIU阵列39的一个输入,并被连到非门35的输入上。该非门35是一个将第三数据信号z的每个数位,与减法指令信号(subtractsignal)组合在一起进行逻辑运算的异或(XOR)门,GATE0;该减法指令信号自身也是到LIU阵列39的一个输入。当减法指令信号无效,即处于逻辑0状态时,第三数据信号z的各数位在通过非门35时,将保持其逻辑状态不变。而当减法指令信号有效,即处于逻辑1状态时,则第三数据信号z的每个数位,在通过非门35后,将变为其互补逻辑状态(logicalcomplement)。另外,非门35的输出则被连到第一大整数单元LIU{0}的第一加法器输入a1上。输出信号a是LIU阵列39的输出,并取自输出门36的输出。输出门36是一个将第一大整数单元LIU{0}的输出,和数信号s的每个数位,与上述减法指令信号组合在一起进行逻辑运算的异或(XOR)门,GATE1。当减法指令信号无效时,则和数信号s的各数位,在通过输出门36之后将保持不变。而当减法指令信号有效时,则第一大整数单元的和数信号s的每个数位,将被替换为其互补逻辑值。锁存器34是一个位宽为b的寄存器REG0。锁存器34的输入与第四大整数单元LIU{3}的输出高端部分积信号ph相连,同时锁存器34的输出还与第四大整数单元LIU{3}的输入,即第二加法器信号a2相连。因此,锁存器34可以在一个时钟脉冲之前将来自第四大整数单元的高端部分积信号ph锁存起来,并在该时钟脉冲之后,将其值回送给第四大整数单元的输入,第二加法器信号a2。锁存器34也具有一个以与图2所示的大整数单元21中的寄存器24的clr输入相同方式进行操作的清零输入clr。时钟信号clk,是到LIU阵列39的一个输入,并与每个大整数单元,LIU{0},LIU{1},LIU{2},LIU{3}的clk输入,以及锁存器34的clk输入相连。当时钟输入被触发时,每个大整数单元中的寄存器的内容,以及锁存器34的内容将被同时更新。清零信号clr是到LIU阵列39的一个输入,并与每个大整数单元,LIU{0},LIU{1},LIU{2},LIU{3}的clr输入,以及锁存器34的clr输入相连。当该清零输入被触发时,每个大整数单元中的寄存器的内容以及锁存器34的内容将被同时清零。进位溢出信号cy是LIU阵列39的一个输出,并与第四大整数单元LIU{3}的co输出相连。进位溢出信号cy表明了运算过程中是否出现了上溢和下溢。为了将多于4个的大整数单元互连到LIU阵列中,需要重复(replicate)第三大整数单元的互连逻辑。如下所示的表1中,详细说明了用于将m个大整数单元互连到LIU阵列中的逻辑,其中m≥4;表1<tablesid="table1"num="001"><table>LIU{k}信号k=0k=1k=2,3…,m-2k=m-1m1yyyym2x{0}x{1}x{k}X{m-1}ci逻辑0LIU{0}caLIU{k-1}caLIU{m-2}caa1GATE0输出LIU{0}phLIU{k-1}phLIU{m-2}pha2LIU{1}sLIU{2}sLIU{k+1}sREFG0输出caLIU{1}ciN/CN/CN/CcoN/CLIU{2}ciLIU{k+1}cicyphLIU{1}a1LIU{2}a1LIU{k+1}a1REG0输入sGATE1输入LIU{0}a2LIU{k-1}a2LIU{m-2}a2</table></tables>表1中记号“LIU{k}x”表示LIU{k}的信号x,“REG0x”表示REG0的信号x,依此类推;而“N/C”则表示该信号被切断(为进行连接)。表1中最左列标示的是第k个大整数单元LIU{k}中的各个信号,而接下来的各列所显示的是当k分别等于0,1,…,m-1时,用于相应信号的互连逻辑。从中可以看出,表1中的数据项与图3所示当m=4时的互连逻辑相匹配。为了在LIU阵列中只互连少于4个的大整数单元,则需要对某些大整数单元的互连逻辑进行精简(condense)。表2,3和4所示分别为对应于m=3,m=2,m=1三种不同情况下,用于将m个大整数单元互连到LIU阵列中的逻辑。m=3<tablesid="table2"num="002"><table>LIU{k}信号k=0k=1k=2m1Yyym2x{0}x{1}x{1}ci逻辑0LIU{0}caLIU{1}:coa1GATE0输出LIU{0}phLIU{1}pha2LIU{1}sLIU{2}sREFG0输出caLIU{1}ciN/CN/CcoN/CLIU{2}cicyphLIU{1}a1LIU{2}a1REG0输入sGATE1输入LIU{0}a2LIU{1}a2</table></tables>表2m=2<tablesid="table3"num="003"><table>LIU{k}信号k=0k=1m1yym2x{0}x{1}逻辑0LIU{0}coa1GATE0输出LIu{0)pha2LIU{1}sREFG0输出caLIU{1}ciN/CN/CCyphLIU{1}a1REG0输入GATE1输入LIU{0}a2</table></tables>表3m1<tablesid="table4"num="004"><table>LIU{k)信号k=0M1yM2x{0}Ci逻辑0A1GATE0输出A2REG0输出CacyCoN/CPhREG0输入SGATE1输入</table></tables>表4表2-表4中所没有出现的LIU阵列信号对于任何m值均具有相同的互连逻辑。为了更加完整,表5列出这些信号的详细情况。<tablesid="table5"num="005"><table>信号连接clrREG0clr和LIU{k}clr,k=0,1,…,m-1clkREG0clk和LIU{k}clk,k=0,1,…,m-1zGATE0输入subGATE0输出GATE1输入aGATE1输出</table></tables>表5运算LIU阵列所执行的通式函数(generalfunction)如下A←Z±(X*Y),其中X~m个字;Y~n个字;Z~n个字;而A~n个字。整数X,Y和Z是输入运算数(operand),而整数A则是其输出运算数。X的各个“字”被同时加载到LIU阵列的输入x{0},x{1},…,x{m-1}上。而Y和Z的各个“字”则一次一个“字”地被分别加载到LIU阵列的输入y和z上。同时,从LIU阵列的输出a,一次一个字地读出A的各个“字”。到LIU阵列的减法指令输入选择执行“±”运算中的加法或减法。激活该减法指令输入,即将减法指令输入置为逻辑1,则将选择减法运算,而当取消激活减法指令输入时,即将减法指令输入清为逻辑0,则将选择加法运算。LIU阵列的进位溢出信号cy,表明了运算过程中是否发生了上溢和下溢。在加法运算中,如果计算所得值大于n个字所能表示的有效数范围,则将发生上溢。而在减法运算中,如果计算所得值为负数,则将会发生下溢。运算结束后,无论出现了上溢还是下溢,进位溢出信号cy输出均将变为有效状态。如果既没有出现上溢,也没有出现下溢,则进位溢出信号cy输出将处于无效状态。利用如下的运算过程,便可以LIU阵列来完成上述通式函数运算1.触发clr2.激活或取消激活信号sub3.加载数据输入x{0},x{1},…,x{m-1}4.对于j=0,1,…,n-1,执行a.加载数据输入yb.加载数据输入zc.触发clkd.读取数据输出a步骤1将LIU寄存器和锁存器34(REG0)清零。由此清除掉先前运算的任何累加值。步骤2选择“±”运算中的加法或减法。减法指令输入的无效值选择加法,而其有效值则选择减法。步骤3加载X运算数各“字”的数值。在整个运算过程中,将一直加载这些数值。步骤4控制循环执行n次。每次循环由索引j进行编号,其中j=0,1,…,n-1。在步骤4a中,加载运算数Y的字j;在步骤4b中,加载运算数Z的字j;在步骤4c中,触发信号clk。由此利用新求出的数值来更新LIU寄存器和锁存器34(REG0),同时使得在输出a处可以得到一个新的“字”。步骤4d,读出运算数A的字j。LIU阵列时钟控制分析接下来将通过单独一个时钟周期,即时钟输入信号的单独触发一次,来分析LIU阵列的操作。作为实例,这里所用的例子中,LIU阵列由4个LIU构成。显而易见,可以将本分析推广到具有任意多个LIU的情形。对于目前所进行的讨论,接下来将只对当到LIU阵列的减法指令输入信号无效时的情况进行分析。而当减法指令信号有效时的情况,将在随后的说明中给出。参照图3和图2,整数Q被定义为其值Q=q{0}+q{1}*W+q{2}*W2+q{3}*W3+rW4,其中q{j}是LIU{j}的寄存器中所存储的数值,而r则是LIU阵列的寄存器REG0中所存储的数值。每个q{i}由b+2个数位构成,同时W=2b。当时钟信号被触发,Q的值将发生变化。可以将新的数值叫做Q+。Q+的值是由每个LIU的加法器的输出、以及LIU{3}中乘法器的输出推导而得的。可以利用叠加(superposition)的方法来确定Q+的值,其步骤如下所示。首先,假设Q的值为0,而输入信号y的值也为0。在此情况下,唯一的“贡献”来自输入信号z。z的值通过LIU{0}中的加法器进行传送,并出现在LIU{0}的寄存器输出上。LIU阵列中其他各寄存器的输出值均为0。因此,在此情况下Q+=z(ⅰ)接着,假设Q的值为0,而z的值也为0。在此情况下,对Q+的“贡献”来自每个LIU中的乘法器的输出。该乘法器输出的低端部分对同一LIU中的寄存器有“贡献”。而该乘法器输出的高端部分则对编号级稍高的下一LIU中的寄存器有“贡献”,或对于LIU{3}中的乘法器来说,则是对REG0有“贡献”。因此,当对Q+的数值有“贡献”时,LIU{i}中的乘法器输出的低端部分将被加上一个权值Wj,而其高端部分则被加上一个权值Wj+1。这意味着,当其对Q+有贡献时,LIU{j}中乘法器的全部输出将被加上一个权值Wj。由于LIU{j}中乘法器的两个输入分别是输入信号y和x{j},所以在此情况下,其将满足如下关系Q+=yx{0}+yx{1}W+yx{2}W2+yx{3}W3(ⅱ)随后,假设z的值为0,而y的值也为0。在此情况下,对Q+的仅有“贡献”来自Q的当前值。在LIU{j}内,可以将q{j}的值写为c{j}W+s{j},其中c{j}由q{j}的高端数位构成,而s{j}则由剩余的数位构成。因此,Q的值可以被写成Q=s(0)+(c{0}+s{1})W+(c{1}+s{2})W2+(C{2}+S{3})W3+rW4每个c{j}对LIU{j}中的新寄存器值均有贡献,而当对Q+有贡献时,将赋给其一个权值Wj。每个s{j}对LIU{j-1}中的寄存器值有贡献,其中j=1,2和3,并赋给其一个权值Wj-1。因此,在此情况下Q+=(c{0}+s{1})+(c{1}+s{2})W+(c{2}+s{3})W2+rW3不难看出,存在如下的关系式Q+=Q/W(ⅲ)其中“/”表示舍去余数的整数除法。公式(ⅰ),(ⅱ),和(ⅲ)包含了对新Q+值的所有“贡献”。通过叠加的方法,将这些“贡献”组合在一起,可以得到Q+=z+y(x{0}+x{1}W+x{2}W2+x{3}W3)+Q/W(ⅳ)在该时钟脉冲之后,LIU阵列输出信号的值可以由如下公式给出a+=Q+%W(ⅴ)其中a+表示该时钟脉冲后的数值,而“%”则表示整数取模运算。换句话说,a+是用W除Q+所得的余数。公式(ⅵ)和(ⅴ)概括了当时钟被触发时LIU阵列的操作。对用于计算通式函数的运算过程的分析此小节中,将对LIU阵列在被用来计算上述通式函数的运算过程中的的操作进行说明。此运算过程已在前一小节中给出了介绍。正如接下来所将要说明的,当将LIU阵列用在上述运算过程中时,能够正确地计算上述通式函数。对于目前所进行的讨论,将只对其中到LIU阵列的减法指令输入,处于无效状态时的情况进行分析。随后将另外对减法指令信号处于有效状态时的情况进行分析。上面所说的总体般函数的形式为A←(Z+X*Y)%Wn,其中Z=z{0}+z{1}W+z{2}W2+…+z{n-1}Wn-1;Y=y{0}+y{1}W+y{2}W2+…+y{n-1}Wn-1;X=x{0}+x{1}W+x{2}W2+…+x{n-1}Wn-1;A=a{0}+a{1}W+a{2}W2+…+a{n-1}Wn-1;其中m是该LIU阵列中LIU的个数,以及运算数X的字数;而n是运算数Y,Z和A的字数。取模运算“%Wn”的目的则是,将所求得的数值Z+X*Y截短,以使其字数以A的字数n相匹配。如果(Z+X*Y)<Wn,则A=Z+X*Y;即通式函数的“无上溢”情形。如果(Z+X*Y)≥Wn,则A由Z+X*Y的低端n个字构成;即通式函数的“上溢”情形。用于计算通式函数的运算过程已在前面的小节中进行过了说明。综合此运算过程和先前关于LIU阵列的分析,通式函数的计算可以用如下的递归运算来描述对于k=0,1,…,n-1Q(k)=z(k)+y(k)X+S(k-1);A{k}=Q{k}%W;S{k}=Q{k}/W;其中S{-1}=0;“%”表示整数取余运算;而“/”则表示将余数截去(truncate)的整数除法。在完成了上述递归运算的n个步骤之后,可以看出有下式成立a{0}+a{1}W+a{2}W2+…+a{n-1}Wn-1+S{n-1}Wn=z{0}+z{1}W+z{2}W2+…+z{n-1}Wn-1+X(y{0}+y{1}W+y{2}W2+…+y{n-1}Wn-1)(ⅵ)该式的右端是Z+X*Y。而其左端则是A+S{n-1}Wn。对上式的两侧同时进行一次“%Wn”运算,可以得到公式A=(Z+X*Y)%Wn。因此,只要能够表明公式(ⅵ)成立,则其便可以证明上述运算过程确实可以使LIU阵列正确地计算通式函数。公式(ⅵ)可以通过归纳法来进行证明。首先其将先证明当n=1时,上述公式成立。随后,其将证明如果当n=t时,上述公式成立,则当n=t+1时,其也成立。由此,便证明了上述公式对于所有大于等于1的n均成立。考虑n=1时的情况。由于S{-1}=0,则从上述递归公式中,可以得到Q{0}=z{0}+y{0}X请注意,由于用W除Q{k}所得的商为S{k},而余数为a{k},因此,对于任何k值,WS{k}+a{k}=Q{k}。令k=0,可以得到a{0}+WS{0}=Q{0}=z{0}+y{0}X其与公式(ⅵ)中令n=1时所得的等式相同。现在考虑n=t+1时的情况。假设对于n=t,公式(ⅵ)成立,于是可以推出a{0}+a{1}W+a{2}W2+…+a{t-1}Wt-1+S{t-1}Wt=z{0}+z{1}W+z{2}W2+…+z{t-1}Wt-1+X(y{0}+y{1}W+y{2}W2+…+y{t-1}Wt-1)(ⅶ)由于WS{k}+a{k}=Q{k},所以我们还可以得到Wt+1S{t}+Wta{t}=WtQ{t}=Wt(z{t}+y{t}X+S{t-1})(ⅷ)将公式(ⅶ)和公式(ⅷ)加在一起,可以得到a{0}+a{1}W+a{2}W2+…+a{t}Wt+S{t}Wt+1=z{0}+z{1}W+z{2}W2+…+z{t}Wt+X(y{0}+y{1}W+y{2}W2+…+y{t}Wt)上式即公式(ⅵ)中n=t+1时所得的等式,由此证明完毕。当减法指令信号处于有效状态时的分析当LIU阵列的减法指令输入信号有效时,运算数Z的每个字在被加载到LIU阵列上之前,将均被进行取反运算(complement)。从数值计算的角度看,其等价于用(Wn-Z-1)来代替Z。类似地,运算数A的每个“字”在从LIU阵列输出之前,也将进行取反运算。其等价于用(Wn-A-1)来代替Z。因此,当减法指令信号有效时,通式函数将按照如下步骤来进行计算Z’=Wn-Z-1A’=(Z'+X*Y)%WnA=Wn-A’-1由于0≤Z’<Wn且0≤A’<Wn,因此我们可以对上述关于Z’和A’的公式另外再增加一次“%Wn”运算,而并不改变其之间的关系Z’=(Wn-Z-1)%WnA’=(Z’+X*Y)%WnA=(Wn-A’-1)%Wn从此形式中,很明显可以看出“%Wn”运算可以被忽略,由此可以将上述公式合并,而将“%Wn”运算放在等式的最后,如下所示A=(Wn-((Wn-Z-1)+X*Y)-1)%Wn化简上式可以推出A=(Z-X*Y)%Wn则其便是所需要得到的减法运算形式的通式函数。单RAM装置LIU阵列可以与控制器和随机存取存储器(RAM)组合在一起,以形成一种能够根据如上所述的通式函数进行计算的装置。图4所示便是这样一种装置的示意图。控制器41与LIU阵列39的组合包括一个能够与计算装置一起配合使用的协处理器。在此情况下,随机存取存储器(RAM)42可以为如图1所示的计算装置11所共享。控制器41对LIU阵列39的信号进行操控,以使该阵列执行所需的运算。控制器41需要从RAM42中读出输入运算数,并将其传送给LIU阵列39和计算装置。另外,控制器41还需要从LIU阵列39中读出输出运算数,并将写入到RAM42中。有很多方式来实现控制器41的功能,其中的一种方式便是利用有限状态机。RAM42是一种常规设备。其具有位宽为b的数据总线,以与LIU阵列39的字数多少相匹配。控制器41通过向地址总线加载适当的数值,以激活读信号,并读出由RAM42所提供于数据总线上的该字的数值,以及随后取消激活上述读信号,来从RAM42中读出一个字。另外,控制器41通过向地址总线加载适当的数值,将该字的数值加载到数据总线上,以及随后触发写信号,来将某个字写入到RAM42中。我们把其读取或写入一个字所需的时间叫做一个RAM周期。例如,当控制器41读取或写入由n个字构成的整数X时,其所需的时间将是n个RAM周期。控制器41利用如下的运算过程,来使本装置执行上述通式函数运算A←Z±(X*Y),其中X~m个字,Y~n个字,Z~n个字,而A~n个字1.控制器41触发LIU阵列39的clr输入2.控制器激活或取消激活LIU阵列的减法指令信号输入。在随后的运算过程中,该控制器将一直把此数值保持为恒定值。3.控制器从RAM42中读出m个数值,并将其加载到LIU阵列的x{0},x{1},…,x{m-1}输入上。在随后的运算过程中,控制器将一直把这些数值保持为恒定值。4.对于j=0,1,…,n-1,执行a.控制器从RAM中读出一个数值,并将其加载到LIU阵列的y输入上b.控制器从RAM中读出一个数值,并将其加载到LIU阵列的z输入上c.控制器触发LIU阵列的clk输入d.控制器读出LIU阵列的输出值,并将其写入到RAM中。在步骤3中控制器41从RAM42中读出X运算数的多个字。其需要n个RAM周期。在步骤4a中,控制器41从RAM42中读出Y运算数的n个字。其需要n个RAM周期。在步骤4b中,控制器41从RAM42中读出Z运算数的m个字。其需要m个RAM周期。在步骤4d中,控制器41将A运算数的n个字写入到RAM42中。其需要n个RAM周期。因此,通过将步骤3,4a,4b和4d中所需的RAM周期数加在一起,可以看出上述运算过程所需要的RAM周期总数为m+3n。如图5所示,利用一种能够执行读取-修改-写入运算的RAM43,可以减少执行上述通式函数运算所需的RAM周期数。这样一种运算允许控制器41在一个单独的RAM周期内,从RAM43中读取一个字,修改该字的数值,并将所得到的新值写回到RAM43中。控制器41与LIU阵列39的组合包括一个可以与计算装置一起使用的协处理器。在此情况下,RAM43可以为如图1所示的计算装置11所共享。控制器41在RAM43上,通过如下方式来执行读取-修改-写入功能。首先,控制器将适当的数值加载到地址总线上,并同时激活读取-修改-写入信号rmw。随后,控制器激活读信号,读出由RAM所提供于数据总线上的数值,随后取消激活该读信号。接着,控制器41将修改后的数值加载到数据总线上,并触发写信号。最后,控制器41取消激活rmw信号。上述的整个运算过程是在单独一个RAM周期内完成的。RAM43还具有执行普通的读/写操作的能力,如上所述。控制器通过取消激活rmw信号来选择普通的读/写操作。读、写和读取-修改-写入三种操作均需要单独一个单独RAM周期。为了尽可能利用读取-修改-写入功能,可以将通式函数改写成A←Z±(X*Y)形式,其中X~m个字,Y~n个字,而Z~n个字。因此,可以通过增加或减去数量X*Y,来修改运算数Z。控制器41将使该装置利用如下的运算过程来执行上述函数1.控制器41触发LIU阵列39的clr输入。2.控制器激活或取消激活LIU阵列的减法指令输入。在随后的运算过程中,该控制器将一直把此数值保持为恒定值。3.控制器从RAM43中读出m个数值,并将其加载到LIU阵列的x{0},x{1},…,x{m-1}输入上。在随后的运算过程中,控制器将一直把这些数值保持为恒定值。4.对于j=0,1,…,n-1,执行a.控制器从RAM中读出一个数值,并将其加载到LIU阵列的y输入上b.控制器从RAM中读出一个数值,并将其加载到LIU阵列的z输入上;触发LIU阵列的clk输入;读出LIU阵列的输出值,并将其写入到RAM中。在步骤3中控制器41从RAM中读出X运算数的m个字。其需要m个RAM周期。在步骤4a中,控制器41从RAM中读出Y运算数的n个字。其需要n个RAM周期。在步骤4b中,控制器41对从RAM读出的Z运算数的n个字的每一个都要执行一次读取-修改-写入操作。因此其需要n个RAM周期。因此,通过将步骤3,4a和4b中所需的RAM周期数加在一起,可以看出上述运算过程所需要的总RAM周期数为m+2n。双RAM装置如图6所示,通过为本装置增加一个第二RAM,可以进一步减少执行通式函数运算所需的RAM周期数。第一RAM44,被称为“Z-RAM”,用于存储Z运算数;Z-RAM44具有读取-修改-写入功能。第二RAM45,被称为“Y-RAM”,用于存储Y运算数;Y-RAM45不需要具有读取-修改-写入功能。利用双RAM,控制器41便可以同时读取Y运算数的一个字,以及对Z运算数的一个字进行读取-修改-写入操作。这种同步操作也是在单独一个RAM周期内完成的。控制器41,LIU阵列39以及Z-RAM44的组合包括一个能够与图1所示的计算装置11一起使用的协处理器。在此情况下,Y-RAM45可以如图1所示为计算装置11所共享。双RAM装置利用如下的运算过程,来执行通式函数运算Z←Z±(X*Y),其中X~m个字,Y~n个字,Z~n个字1.控制器41触发LIU阵列39的clr输入2.控制器激活或取消激活LIU阵列的减法指令信号输入。在随后的运算过程中,该控制器将一直把此数值保持为恒定值。3.控制器从Y-RAM45或Z-RAM44中读出m个数值,并将其加载到LIU阵列的x{0},x{1},…,x{m-1}输入上。在随后的运算过程中,控制器将一直把这些数值保持为恒定值。4.对于j=0,1,…,n-1,执行a.控制器从Y-RAM中读出一个数值,并将其加载到LIU阵列的y输入上;从Z-RAM中读出一个数值,并将其加载到LIU阵列的z输入上;触发LIU阵列的clk输入;读出LIU阵列的输出值,并将其写入到Z-RAM中。在步骤3中控制器41从RAM中读出X运算数的m个字。其需要m个RAM周期。在步骤4a中,控制器41从RAM中读出Y运算数的n个字,并对从RAM中读出的Z运算数的n个字的每一个进行读取-修改-写入操作。其需要n个RAM周期。因此,通过将步骤3,4a所需的RAM周期数加在一起,可以看出上述运算过程所需要的总RAM周期数为m+n。采用流水线处理逻辑的大整数单元LIU的关键运算流程(criticalpath)出现在进行乘法-累加运算时的,该阵列的前n-1个LIU中。其中,乘法器的高端部分积信号ph通过a1信号,被传送到编号级稍高的下一LIU的加法器中。该运算流程经过该加法器后,继续延伸,并作为和数信号s离开该LIU,而后又通过第二加法器信号a2返回到最初的LIU。通过对上述运算逻辑进行流水线结构设计,可以进一步提高LIU的工作频率。图7中例示了一种具有流水线处理逻辑的LIU。通过另外引入一个寄存器REG1,可以减小沿关键运算流程的时间延迟。新增加的寄存器用于寄存该乘法器输出的高端部分积信号。这样做将关键运算流程原来的乘法器延迟+求和延迟减小为仅仅一个乘法器延迟。由于增加了此寄存器,使其需要对阵列的互连关系进行适当地改变。图8所示为一种具有流水线处理逻辑LIU的LIU阵列。注意每个LIU的高端部分积信号ph现在通过a1反馈给其自身。信号ph与第一加法器信号a1相比,延迟有1个周期。熟悉本
技术领域
的人,可以很容易地看出乘法器也可以是具有流水线处理逻辑的乘法器。每个流水线站引入另一个等待时间周期,其可以大于通过提高运算频率所补偿的时间长度。实际上,目前已经出现能够以最优方式来配置这些寄存器的电子设计自动化软件。可以通过调节控制器来事先计算出X*Y,以使其能够正确地计算A←Z±(X*Y)。双端口RAM装置除了乘法-累加运算之外,设计过程中的另一条关键运算流程是读取-修改-写入运算。通过用一种双端口RAM来代替原有的单端口RAM,可以减短此运算流程。注意,其不是完全的双端口RAM,而是一种单写端口/单读端口RAM。此类型的RAM允许从一个地址读取数据,而同时向另一个不同地址写入数据。图9所示为修改后的装置的示意图。通过使用双端口RAM,可以将读取-修改-写入操作分为3个部分。其如图10所示。第一部分是读操作(Z{i});第二部分是修改操作,其中计算出(Z{i-1}=Z{i-1}±X{i-1}*Y{i-1}。第三部分是将A{i-2}写回到RAM中的操作。读地址永远不会与写地址相同;其之间总是相差2。这样便确保了写操作不会影响在z上所正在读取的数据。以此方式,这三个部分构成了一个完整的周期,从而显著地提高了最大工作频率。另一种可行的另选方案是将修改和写操作组合到一个单独的周期内。这样可以减小长达一个周期的等待时间,并且对于某些类型的RAM,可以与通常只需要在一个周期的最后部分才有效的写入到RAM中的数据一样快。同样地,其也要求满足读地址与写地址必须不同的条件。具体算术运算前一小节所讨论是如何利用具体的装置来执行通式函数运算A←Z±(X*Y),其中Y和Z是字数为n的运算数,而X为一个字数为m的运算数,同时m不大于LIU阵列中LIU的个数。可以将此函数专用于执行可用于多精度算术和模数约简运算中的算术运算。上述的专用方式是通过控制器对LIU阵列的控制和数据信号进行操控来实现的。在接下来的讨论中,将给出此类算术运算的几种实例。这些实例仅仅是其所能够执行的多种运算的一部分,而不应被理解为代表了所有可能的算术运算。乘该装置被用来计算Z←X*Y,其中X~m个字;Y~k个字;Z~n个字,n≥k。如果X*Y的数值太大,以致于超过了n个字所能表示的数值范围,则将会出现上溢。如果n≥k+m,则X*Y的值将永远与字数n相匹配。而如果n<k+m,则X*Y的数值可能会与字数n相匹配,也可能不匹配,其取决于X和Y的值。计算结束时LIU阵列cy输出的值将表明是否发生了上溢。利用单RAM装置所执行的运算过程如下1.控制器触发LIU阵列的clr输入;2.控制器撤销LIU阵列的减法指令输入,并向该LIU阵列的z输入加载逻辑0值。在随后的运算过程中,该控制器将一直把此数值保持为恒定值。3.控制器从RAM中读出m个数值,并将其加载到LIU阵列的x{0},x{1},…,x{m-1}输入上。在随后的运算过程中,控制器将一直把这些数值保持为恒定值。4.对于j=0,1,…,n-1,执行a.控制器从RAM中读出一个数值,并将其加载到LIU阵列的y输入上b.控制器触发LIU阵列的clk输入c.控制器读出LIU阵列的输出值,并将其写入到RAM中。5.控制器向LIU阵列的y输入加载0值。在随后的运算过程中,该控制器将一直把此数值保持为恒定值。6.对于j=k,k+1,…,n-1,执行a.控制器触发LIU阵列的clk输入b.控制器读出LIU阵列的输出值,并将其写入到RAM中。在步骤4c和6b写入到RAM中的数值是所需结果Z的多个字。至于此运算过程是否可以给出正确的结果,可以看出其等价于计算通式函数A←Z±(X*Y’),其中Z的初始值是一个用n个字所表示的数值0,而Y’则是用n个字所表示的数值Y。用于具有读取-修改-写入功能的单RAM装置的运算过程与此相同。读取-修改-写入功能并未提供任何优势,因为对于Z运算数,只需执行写操作,而不需执行读操作。用于双RAM装置的运算过程除了步骤4a与步骤4c同时进行之外,与此运算过程类似。表6中对每种装置所需的RAM周期数进行了总结。<tablesid="table6"num="006"><table>单RAM装置单RAM装置w/rmw双RAM装置步骤3mmm步骤42k2kk步骤6n-kn-kn-k总数m+n+kM+n+km+n</table></tables>表6乘-累加上述装置可用于执行下述计算Z←Z+(X*Y)其中X~m个字;Y~k个字;Z~n个字,且n≥k。如果所得数值太大,以致于超过了n个字所能表示的数值范围,则将会出现上溢。上溢被表示为计算结束时,LIU阵列的cy输出的有效值。利用单RAM装置的运算过程如下1.控制器触发LIU阵列的clr输入;2.控制器取消激活LIU阵列的减法指令输入。在随后的运算过程中,该控制器将一直把此数值保持为恒定值。3.控制器从RAM中读出m个数值,并将其加载到LIU阵列的x{0},x{1},…,x{m-1}输入上。在随后的运算过程中,控制器将一直把这些数值保持为恒定值。4.对于j=0,1,…,k-1,执行a.控制器从RAM中读出一个数值,并将其加载到LIU阵列的y输入上b.控制器从RAM中读出一个数值,并将其加载到LIU阵列的z输入上c.控制器触发LIU阵列的clk输入d.控制器读出LIU阵列的输出值,并将其写入到RAM中。5.控制器向LIU阵列的y输入加载0值。在随后的运算过程中,该控制器将一直把此数值保持为恒定值。6.对于j=k,k+1,…,n-1,执行a.控制器读取LIU阵列cy输出的数值。如果该数值无效,则控制器将终止该运算过程b.控制器从RAM中读出一个数值,并将其加载到LIU阵列的z输入上c.控制器触发LIU阵列的clk输入d.控制器读出LIU阵列的输出值,并将其写入到RAM中。在步骤4c和6d写入到RAM中的数值是所需结果Z的多个字。至于此运算过程是否可以给出正确的结果,可以看出其等价于计算通式函数z←z±(X*Y’),其中Y’是用n个字数表示的数值Y。在Z的所有n个字被替换为新数值之前,上述运算过程在步骤6a便可能终止。这种情况出现在,当运算过程中发现替换值与原有的数值相同时。通过去除无用的周期,提前终止运算过程能够减小所用的RAM周期总数。用于具有读取-修改-写入功能单RAM装置的上述运算过程与此类似,只是步骤4b和4d,以及步骤6b和6d分别是在一个单独的读取-修改-写入周期内完成这一点不同。用于双RAM装置的运算过程与用于具有读取-修改-写入功能的单RAM装置类似,只是步骤4a与步骤4b和4d是在同一个读取-修改-写入周期完成这一点不同。表7对每种装置所需的RAM周期数进行了总结。<tablesid="table7"num="007"><table>单RAM装置单RAM装置w/rmw双RAM装置步骤3mmm步骤43k2kk步骤6≤2(n-k)≤n-k≤n-k总数≤m+2n+k≤m+n+k≤m+n</table></tables>表7其中“≤”号反映了运算过程可能会在步骤6a之前终止的可能性。乘-减-累加上述装置也可以被用来执行如下计算Z←Z-(X*Y)其中X~m个字;Y~k个字;Z~n个字,且n≥k。如果所得数值为负数,则将会出现下溢。下溢被表示为计算结束时,LIU阵列cy输出的有效值。其运算过程与用于“乘-累加”的运算过程相同,除了在步骤2中是激活减法指令输入,而不是取消激活之外。同样地,如果其发现用于Z的各个字的替换值与原有值相同时,上述运算过程也将提前终止。其所需的RAM周期数,与用于乘-累加运算的RAM周期数相同。在乘方取模运算方面的应用令A,B和P分别为字数为n的整数。乘方取模运算是一种计算AB%P的问题。一种用于进行乘方取模运算的常用技术是Montgoery方法(见P.Montgomery,“ModularMultiplicationwithoutTrailDivision”,MathematicsofComputation,(无尾数除法的乘方取模,计算数学),44(1985),519-521页)。该方法十分适合基于LIU阵列的本装置。本专利并不打算对Montgomery方法进行过细的讲授性分析和介绍。而只是希望表明如何利用本发明来实施此种方法,以及以RAM周期为单位来分析其实施的速度。Montgomery方法基于一种被叫做“Montgomery乘积”的函数。两个整数X和Y相对模数P的Montgomery积,被定义为F(X,Y,P)={(X*Y*G)%P}+kP其中G是一个满足(G*Wn)%P=1关系的整数,而k是一个小整数。只有当P是奇数时,才会存在这样的整数G,而当P为偶数时,整数G就不存在了。因此,Montgomery方法只适用于其中P为奇数的情况。另外还包括了术语“kP”,以放宽f()的值必须在0到P-1范围内的要求。这样做的原因将在随后的说明中给出。以下是一种用于利用Montgomery方法来执行我们的乘方取模运算的运算过程1.T←W2n%P2.A←f(T,A,P)3.T←f(T,l,P)4.对于B中每个数位,最为重要地,执行a.T←f(T,T,P)b.如果B中的数位为1,则T←f(T,A,P)5.T←f(T,l,P)6.T←T%PT是一个字数为n的整数。当上述运算过程结束时,T中将包含有AB%P的值。对指数B的每一位重复步骤4中的循环。由于B具有n个字,且每个字具有b个数位,所以上述循环将重复nb次。对于该循环的每次迭代,均将在步骤4a中计算Montgomery乘积。如果其指数对应位数的一半为1,则其将只在一半的循环迭代中,计算步骤4b中的Montgomery积。根据此假设,在该循环过程中所执行的Montgomery乘积运算的总次数为1.5*nb。在公钥密码技术中,指数的位数一般很大,通常具有成百上千个数位。这就意味着乘方运算将需要进行成百上千次的Montgomery乘积计算。因此,快速计算乘方的关键在于如何快速地计算Montgomery乘积。基于本发明LIU阵列的装置能够高效地计算Montgomery乘积。接下来的小节中对其工作情况进行说明。步骤1,2,3是“预计算”步骤,而步骤5和6是“后续计算”步骤。这些步骤与步骤4的计算量相比均只需要很少的计算量,因而可以忽略不计。管理运算过程的职责可以由将本装置作为协处理器附加于其上的控制器和计算装置来共同承担。系统设计者可以灵活地来确定如何分摊其所承担职责的大小。作为一种极端情况,控制器可以被设计成具有充分的智能来执行该运算过程的所有步骤,而同时计算装置则仅仅起到启动运算过程,和向控制器提供用于运算数的存储单元的作用。而作为其另一种极端情况,可以将控制器设计成仅仅用于处理通式函数Z←Z+(X*Y),而计算装置则负责利用上述运算过程来求解Montgomery乘积,并将其进而汇编为乘方取模运算值。多精度乘法计算Montgomery乘积f(x,Y,P)过程中的第一步骤是,计算X和Y的乘积。即通常小学所教的“乘法和加法”。所得的乘积需要用2n个字来表示,其中n是每个整数X,Y和P所分别具有的字数。为了便于说明,将沿用上文中的记号。令X为字数为n的整数。记号X={x{j},0≤j<n},表示X的值是x{0}+x{1}W+x{2}W2…+x{n-1}Wn-1。同时,其将对X的“子整数(subinteger)”,即由X的连续字的子集构成的X的整数部分进行操作。例如,整数X’={x{j},2≤j<5}是其值为x{2}+x{3}W+x{4}W2的X的一个字数为3的子整数。运算X’←X’+1用x{2}替换了x{2}+1(假设x{2}很小而不会产生上溢)。由于x{2}在X中的权值为W2,所以其具有将X增大W2倍的效果。令m为LIU阵列中LIU的个数。假设n是m的倍数。由于总可以通过在其高端增加值为0的字,而将某个整数的长度变为m的倍数,所以上述假设并不影响所论证结论的一般性。整数Z,Zi和Xi的定义如下Z={z{j},0≤j≤2n}Zi={z{j},i≤j≤i+n+m}Xi={x{j},i≤j≤i+m}Z是一个字数为2n+1的整数,其被用来保存计算所得的乘积。Z整数的字数比其所需的字数要多1,其原因将在接下来的说明中给出。Zi是Z的从z{i]开始具有n+m个字的子整数。Xi则是X的从x{i}开始,并具有m个字的子整数。可以通过下面的运算过程来计算X与Y的乘积1.Z←02.i←03.当(i<n)执行a.Zi←Zi+(Xi*Y)b.i=i+m在步骤1中将Z清为0。随后步骤3中的循环进行“乘和加”运算。该循环的每次迭代处理X运算数的m个字。这些字构成了与运算数Y相乘后再与Zi相加的Xi。Zi在Z内被偏移与Xi在Z中所偏移的字数相同的字数。在最后一次的迭代完成之后,Z将包含有所需的乘积X*Y。考虑进行完运算Zi←Zi+(Xi*Y)之后Z的值。Z的值为Si*Y,其中Si={x{j},0≤j<i+m},因为X共有i+m个字被进行了处理。Si*Y字数为n+m+i。由于Zi偏移Z有i个字,且长度为n+m,所以运算Zi←Zi+(Xi*Y)不会上溢。上述循环一共迭代n/m次。表8中给出了该循环中每次迭代步骤3a所需的RAM周期数,以及所需要的总的RAM周期数。<tablesid="table8"num="008"><table>单RAM装置单RAM装置w/rmw双RAM装置步骤3a3m+3n2m+2n2m+n总数3n+3n2/m2n+2n2/m2n+n2/m</table></tables>表8步骤3a很可能只需要少于表中所给出次数的周期。这种情况出现于当LIU阵列的cy输出表明可接受提前终止的条件下。在实践中,由于此效应所带来的周期数的减小量,只是所需周期总数很少的一部分。Montgomery约简一旦求出了Z中所包含的字数为2n的乘积,Montgomery乘积运算的第二步骤便是以模数P来对其进行约简,使其变为一个字数为n的数值。Montgomery约简的计算方向是从右向左进行在Z上增加一个合适的倍数P,从而使Z的最右端的字(即最低有效字)可以被消掉。约简计算需要有一个满足如下关系的整数Q(Q*P)%Wm=Wm-1Q是一个字数为m的整数。如果P是奇数,则必然存在满足上述条件的Q。计算Q的方法很简单。在开始乘方运算时计算一次Q值,随后将其用于乘方运算的每个约简步骤。由于只需计算一次Q的值,所以其所涉及的计算量很小。这里,子整数Zi的定义可以与乘法步骤中所定义的方式有所不同Zi={z{j},i≤j≤2n},即,Zi是Z的一个从z{j}开始,并包含有到z{i}的左侧的Z的所有字(包含边界)。Zi由2n+1-i个字组成。在这里还需要定义一个字数为m的整数V。V只是一个临时变量。约简步骤可以利用如下的运算过程来实现1.i←02.当(i<n)则执行a.V←Q*Zib.Zi←Zi+(V*P)c.i=i+m步骤2中每迭代一次上述循环,则步骤2b便将Z的m个字清零。即,字z{i},z{i+1},…,z{i+m-1}的值将变为0。上述清零操作的工作过程如下在步骤2a中,Q被乘以Zi,而其结果被放置在V中。由于Q和V均是字数为m的整数,因此只有Zi的最低m个字(即,{z{j},i≤j≤i+m})有关系;而Zi的其他字则由于被截短为m个字,以适应V的字数,而与结果无关。因此步骤2a是作为“半乘法运算(half-multiplication)”来执行的,所谓“半乘法运算”是指在对两个字数均为m的整数进行乘法运算时,只计算其低端m个字的乘积。在步骤2b中,V与模数P相乘,并被累加到Zi中。步骤2a中计算所得的V值,使得Zi的最低有效m个字中的结果值均为0。同时其能够保证Zi的累加值不会上溢,且与上述说明十分类似,该累加过程也可能会由于LIU阵列的cy输出变成无效状态而提前终止。终止发生的确切时间取决于数据,但因为V的字数为m,而P的字数为n,所以终止通常发生在累加完Zi的n+m个字之后。该循环总共将迭代n/m次。表9所示为上述循环的每次迭代中,步骤2a和2b所需的RAM周期数。<tablesid="table9"num="009"><table>单RAM装置单RAM装置w/rmw双RAM装置步骤2a3m3m2m步骤2b3m+3n2m+2n2m+n总数6n+3n2/m5n+2n2/m4n+n2/m</table></tables>表9在循环的最后,Z的低端n个字(即,{z{j},0≤j≤n})的值均为0;而Z的最高端的那个字则具有0或1的值。如果最高端的字(即,z{2n})为1,则必须通过将Z的高端字中减去P而将其清零,如下所示Zn←Zn-(1*P)这里,通过将其中的一个运算数置为1,还可以利用根据本发明的装置来执行“乘法-非-累加运算(multiply-negate-accumulate)”。此运算可以保证其最高端字的值为0的Z。是否需要此运算(即是否需要在运算之前将z{2n}令为1)取决于数据。而无论怎样,其所涉及的RAM周期数与乘法和约简循环中所需的周期数相比,可以忽略不计。在此情况下,Z是一个字数为2n,其最低n个字的值为0的整数。为了最终得到Montgomery乘积,需要再执行下述运算Z←Z/Wn上述运算只是一种很简单的将Z的高端n个字右移到其低端n个字的移位操作。所得数值是一个字数为n的整数,即所要计算的Montgomery乘积。约简运算过程保证了Z与字数n相匹配,但其不能确保Z一定小于P。为了进行乘方运算的步骤4中的循环,在约简步骤中只要将Z约简为适合的字数n即可。乘方运算过程还包括用于将最终结果约简为小于P的值的后续计算步骤6。总RAM周期来自前一小节的关于乘法和约简步骤中所需的RAM周期数的结果,被组合在表10中,成为用于计算Montgomery乘积的单独一个结果。将此数值被乘以1.5nb,便可以给出计算乘方取模所需的RAM周期总数。<tablesid="table10"num="010"><table>单RAM装置单RAM装置w/rmw双RAM装置Montgomery乘积6n(1.5+n/m)4n(1.75+n/m)2n(3+n/m)乘方9n2b(1.5+n/m)6n2b(1.75+n/m)3n2b(3+n/m)</table></tables>表10乘方运算的公式忽略了“预计算”和“后续计算”步骤,即乘方运算过程中的步骤1,2,3和5,所需的RAM周期。与步骤4相比,这些步骤所需的RAM周期数很小,从而可以忽略不计。如果运算数与LIU的数目相比太大,则n/m将很大。对于公钥加密应用来说,这种情况很常见。在这样一种情况中,RAM周期的数目大约为Kbn3/m,其中对于上述三种类型的装置,K分别为9,6或3。因此,RAM周期总数近似与1/m成正比;例如,LIU的数目加倍,则所需的RAM周期数将近似减半。双RAM装置所需的RAM周期数大约是单RAM装置所需周期数的1/3,同时是具有读取-修改-写入功能的单RAM装置的一半。对于本领域的技术人员来说,很明显在不背离本发明的范围和精神的情况下,可以对根据本发明的用于多精度整数算术运算的方法和装置进行多种形式的修改,因此本发明意欲涵盖包含于所附权利要求及其等价物的范围内的多精度整数算术运算方法和装置的所有修正和变型。权利要求1.一种用于通过处理第一数据信号(y),第二数据信号(x),来进行多精度整数算术运算的装置,其特征在于包括多个大整数单元(LIU)(LIU{0},LIU{1},LIU{2},…,LIU{n-1}),其中“n”是该组大整数单元中大整数单元的个数,其中每个大整数单元分别具有具有第一乘法器输入,第二乘法器输入,高端部分积输出和低端部分积输出的乘法器;具有第一加法器输入,第二加法器输入,第三加法器输入,第四加法器输入,和加法器输出的加法器,所述第三加法器输入与乘法器相连,用于接收低端部分积输出;和具有LIU寄存器输入和LIU寄存器输出的LIU寄存器,所述LIU寄存器输入与加法器相连,以接收加法器输出,所述LIU寄存器用于在一个时钟脉冲之前锁存加法器输出的数值,以及在该时钟脉冲之后将该数值传送给所述LIU寄存器输出,所述LIU寄存器输出被分为LIU寄存器高端输出和LIU寄存器低端输出,所述LIU寄存器高端输出包含有所述LIU寄存器输出的两个高端数位,所述LIU寄存器低端输出包含有所述LIU寄存器输出中除了所述LIU寄存器高端输出中的那些数位之外的所有数位,所述LIU寄存器高端输出与第四加法器输入相连,所述LIU寄存器还具有一个LIU寄存器清零输入,用于在所述LIU寄存器清零输入被激活时,将所述LIU寄存器输出清零;与LIU寄存器相连的第一逻辑或(OR)门,用于接收LIU寄存器输出和进位输入信号(ci),所述第一逻辑或门用于产生进位输出信号(co),所述进位输出信号(co)在LIU寄存器输出的任何一位和所述进位输入信号(ci)均处于有效状态时被激活;与LIU寄存器相连,用于接收LIU寄存器高端输出并产生辅助进位信号(ca)的第二逻辑或门,所述辅助进位信号(ca)在LIU寄存器输出的任一位处于有效状态时被激活;被加载到所述多个大整数单元的每个大整数单元的第一乘法器输入上的第一数据信号(y);具有多个码元(x{0},x{1},x{2},…,x{n-1})的第二数据信号(x),其中每个码元分别与所述多个大整数单元的每个大整数单元的第二乘法器输入相连;所述多个大整数单元的每个(第i个)大整数单元(LIU{i})(i>0),分别具有与第i-1个大整数单元(LIU{i-1})的高端部分积输出相连的第一加法器输入;所述多个大整数单元的每个(第i个)大整数单元(LIU{i})(i>0),分别具有与第i-1个大整数单元(LIU{i-1})的第二加法器输入相连的LIU寄存器低端输出;与第一大整数单元(LIU{0})的第一加法器输入相连的第一非门,用于在减法指令信号有效时,对第三数据信号(z)进行求反操作;与第一大整数单元(LIU{0})的LIU寄存器低端输出相连的第二非门,用于在减法指令信号有效时,对所述LIU寄存器低端输出进行求反操作,另外,所述第二非门还用于产生第四数据信号;具有锁存器输入和锁存器输出的锁存器,所述锁存器输入与所述第n个大整数单元(LIU{n-1})的高端部分积输出相连,所述锁存器输出与所述第n个大整数单元(LIU{n-1})的第二加法器输入相连,用于在时钟脉冲触发之前锁存第n个高端部分积,以及在该时钟脉冲之后将第n个高端部分积馈送给所述第n个大整数单元的第二加法器输入;所述第一大整数单元(LIU{0})的ci输入与某个逻辑0值相连;所述第二大整数单元(LIU{1})的ci输入与第一大整数单元(LIU{0})的ca输出相连;所述多个大整数单元的每个(第i个)大整数单元(LIU{i})(i>0)的ci输入与第i-1个大整数单元(LIU{i-1})的co输出相连,而第n个大整数单元(LIU{n-1})的co输出则是第五数据信号,即进位溢出信号cy;所述锁存器具有一个锁存器清零信号,而每个LIU也分别具有一个LIU寄存器清零输入,多个LIU寄存器清零输入和所述锁存器清零信号被连在一起,构成了数据信号(clr);和所述锁存器具有一个时钟输入,而每个LIU也分别具有一个时钟输入,多个时钟输入被连在一起,构成了时钟信号(clk)。2.一种用于通过处理第一数据信号(y),第二数据信号(x),来进行多精度整数算术运算的装置,其特征在于包括多个大整数单元(LIU)(LIU{0},LIU{1},LIU{2},…,LIU{n-1}),其中“n”是该组大整数单元中大整数单元的总数,其中每个大整数单元分别具有具有第一乘法器输入,第二乘法器输入,高端部分积输出和低端部分积输出的乘法器;具有第一加法器输入,第二加法器输入的加法器,所述加法器与乘法器相连,用于接收低端部分积输出;和具有一个和数信号输出的LIU寄存器,所述LIU寄存器与所述加法器相连;被加载到所述多个大整数单元中每个大整数单元的第一乘法器输入上的第一数据信号(y);具有多个码元(x{0},x{1},x{2},…,x{n-1})的第二数据信号(x),其中每个码元分别与所述多个大整数单元中每个大整数单元的第二乘法器输入相连;所述多个大整数单元的每个(第i个)大整数单元(LIU{i})(i>0)的第一加法器输入,分别与第i-1个大整数单元(LIU{i-1})的高端部分积输出相连;所述多个大整数单元的每个(第i个)大整数单元(LIU{i})(i>0)的LIU寄存器低端输出,分别与第i-1个大整数单元(LIU{i-1})的第二加法器输入相连;与第一大整数单元(LIU{0})的第一加法器输入相连的非门,用于在减法指令信号有效时对第三数据信号(z)进行求反操作;具有锁存器输入和锁存器输出的锁存器,所述锁存器输入与所述第n个大整数单元(LIU{n-1})的高端部分积输出相连,所述锁存器输出与所述第n个大整数单元(LIU{n-1})的第二加法器输入相连,用于在时钟脉冲触发之前锁存第n个高端部分积以及在该时钟脉冲之后将第n个高端部分积馈送给所述第n个大整数单元的第二加法器输入。3.一种用于通过处理第一数据信号(y),第二数据信号(x),来进行多精度整数算术运算的装置,其特征在于包括大整数单元(LIU),其具有具有第一乘法器输入,第二乘法器输入,高端部分积输出和低端部分积输出的乘法器;具有第一加法器输入,第二加法器输入的加法器,所述加法器与用于接收低端部分积输出的乘法器相连,并输出有第一和数信号;和与所述寄存器相连,以接收第一和数信号并输出第二和数信号的LIU寄存器;被加载到所述多个大整数单元的每个大整数单元的第一乘法器输入上的第一数据信号(y);被加载到所述大整数单元的第二乘法器输入上的第二数据信号(x);与所述大整数单元的第一加法器输入相连的非门,用于在减法指令信号有效时对第三数据信号(z)进行求反操作;与所述大整数单元的高端部分积输出以及所述大整数单元的第二加法器输入相连的锁存器,用于在时钟脉冲触发之前锁存高端部分积,以及在该时钟脉冲之后将该高端部分积馈送给所述大整数单元的第二加法器输入。4.如权利要求3所述的装置,其特征在于所述大整数单元包括一或门,耦连到所述LIU寄存器的一个输出上,用于接收来自所述LIU寄存器的第二和数信号的高端数位,作为一个进位信号,所述第二或门输出该进位信号的逻辑或值,作为进位溢出信号。5.如权利要求3或4所述的装置,其特征在于另外包括一组大整数单元(LIU{0},LIU{1},…,LIU{n-1}),其中“n”是该组大整数单元中大整数单元的总数;所述多个大整数单元的每个(第i个)大整数单元(LIU{i})(i>0)的第一加法器输入,分别与第i-1个大整数单元(LIU{i-1})的高端部分积输出相连;所述多个大整数单元的每个(第i个)大整数单元(LIU{i})(i>0)的和数信号输出,分别与第i-1个大整数单元(LIU{i-1})的第二加法器输入相连。6.一种用于通过处理第一数据信号(y),第二数据信号(x),来进行多精度整数算术运算的装置,其特征在于包括多个大整数单元(LIU),其中每个大整数单元分别具有第一乘法器输入,第二乘法器输入,高端部分积输出,第一加法器输入,第二加法器输入和一个和数信号输出;被加载到所述多个大整数单元中每个大整数单元的第一乘法器输入上的第一数据信号(y);具有多个码元的第二数据信号(x),其中每个码元分别与所述多个大整数单元中每个大整数单元的第二乘法器输入相连;所述多个大整数单元的每个(第i个)大整数单元(LIU{i})(i>0)的第一加法器输入,分别与第i-1个大整数单元(LIU{i-1})的高端部分积输出相连;所述多个大整数单元的每个(第i个)大整数单元(LIU{i})(i>0)的和数信号输出,分别与第i-1个大整数单元(LIU{i-1})的第二加法器输入相连。7.如权利要求6所述的用于进行多精度整数算术运算的装置,其特征在于另外包括与所述大整数单元的第一加法器输入相连的非门,用于在减法指令信号有效时对第三数据信号(z)进行求反操作;同时与所述第n个大整数单元的高端部分积输出以及所述第n个大整数单元(LIU{n-1})的第二加法器输入相连的锁存器,其中n是大整数单元的总数,所述锁存器用于在时钟脉冲触发之前锁存第n个高端部分积,以及在该时钟脉冲之后将第n个高端部分积馈送给所述第n个大整数单元的第二加法器输入。8.如权利要求6所述的用于进行多精度整数算术运算的装置,其特征在于另外包括一个与第一大整数单元(LIU{0})的第一加法器输入相连的非门,用于在减法指令信号有效时,对第三数据信号(z)进行求反操作。9.如权利要求6或8所述的用于进行多精度整数算术运算的装置,其特征在于另外包括一个锁存器,其同时与所述第n个大整数单元的高端部分积输出,以及所述第n个大整数单元(LIU{n-1})(n是大整数单元的总数)的第二加法器输入相连的第二加法器输入,用于在时钟脉冲触发之前锁存第n个高端部分积,以及在该时钟脉冲之后将第n个高端部分积馈送给所述第n个大整数单元。10.如权利要求6所述的用于进行多精度整数算术运算的装置,其特征在于另外包括多个与第一大整数单元(LIU{0})的第一加法器输入相连,用于在减法指令信号有效时对第三数据信号(z)进行求反操作的逻辑门;和同时与第n个大整数单元(LIU{n-1})的高端部分积输出,以及所述第n个大整数单元的第二加法器输入相连(其中n是所述多个大整数单元中大整数单元的总个数),用于在时钟脉冲触发之前锁存第n个高端部分积,以及在该时钟脉冲之后将第n个高端部分积馈送给所述第n个大整数单元的第二加法器输入的寄存器装置。11.如权利要求6所述的用于进行多精度整数算术运算的装置,其特征在于另外包括与第一大整数单元(LIU{0})的第一加法器输入相连的逻辑门装置,用于在减法指令信号信号有效时对第三数据信号(z)进行求反操作。12.如权利要求6或11所述的用于进行多精度整数算术运算的装置,其特征在于另外包括同时与第n个大整数单元(LIU{n-1})的高端部分积输出,以及所述第n个大整数单元的第二加法器输入相连的寄存器装置(其中n是所述多个大整数单元中大整数单元的总数),用于在时钟脉冲触发之前锁存第n个高端部分积,以及在该时钟脉冲之后将第n个高端部分积馈送给所述第n个大整数单元的第二加法器输入。13.如权利要求2所述的用于进行多精度整数算术运算的装置,其特征在于另外包括与第一大整数单元(LIU{0})的和数信号输出相连的输出门,用于输出一个输出信号。14.如权利要求3所述的用于进行多精度整数算术运算的装置,其特征在于另外包括与所述大整数单元的和数信号输出相连的输出门,用于输出一个输出信号。15.一种用于通过处理第一数据信号(y),第二数据信号(x),来进行多精度整数算术运算的装置,其特征在于包括大整数单元(LIU),其包含有具有第一乘法器输入,第二乘法器输入,高端部分积输出和低端部分积输出的乘法器;具有第一加法器输入,第二加法器输入的加法器,所述加法器与乘法器相连,以接收低端部分积输出,同时该加法器还输出有第一和数信号;以及与所述加法器相连的LIU寄存器,用于接收第一和数信号并输出第二和数信号;耦连到所述LIU寄存器的输出上的或门,用于接收来自所述LIU寄存器的,作为进位信号的第二和数信号,所述第二或门输出该进位信号的逻辑或值,作为进位溢出信号;被加载到所述多个大整数单元的每个大整数单元的第一乘法器输入上的第一数据信号(y);被加载到所述大整数单元的所述第二乘法器输入上的第二数据信号(x)。16.如权利要求15所述的用于进行多精度整数算术运算的装置,其特征在于另外包括与所述大整数单元的第一加法器输入相连的非门,用于在减法指令信号有效时对第三数据信号(z)进行求反操作;同时与所述大整数单元的高端部分积输出,以及大整数单元的第二加法器输入相连的锁存器,用于在时钟脉冲触发之前锁存第n个高端部分积,以及在该时钟脉冲之后将第n个高端部分积馈送给所述第n个大整数单元的第二加法器输入。17.如权利要求15所述的用于进行多精度整数算术运算的装置,其特征在于另外包括一个与所述大整数单元的第一加法器输入相连的非门,用于在减法指令信号有效时,对第三数据信号(z)进行求反操作。18.如权利要求15或17所述的用于进行多精度整数算术运算的装置,其特征在于另外包括一个锁存器,其同时与所述大整数单元的高端部分积输出,以及所述大整数单元的第二加法器输入相连,用于在时钟脉冲触发之前锁存第n个高端部分积,以及在该时钟脉冲之后将第n个高端部分积馈送给所述第n个大整数单元的第二加法器输入。19.一种用于利用具有至少一个大整数单元(LIU)的LIU阵列来处理第一数据信号(y)和第二数据信号(x)的方法,其中该LIU阵列具有清零输入,减法指令输入,时钟输入,数据输入(z)和数据输出(a),该方法特征在于包括如下步骤触发清零输入,以将该LIU阵列中的LIU寄存器和锁存器清零;在需要进行减法和加法时,分别相应地将减法指令输入设置为逻辑1和逻辑0;将用于第二数据信号(x)的值加载到该LIU阵列上;将用于第一数据信号(y)的值加载到该LIU阵列上;触发时钟输入,以利用新的数值来更新上述多个LIU寄存器和锁存器;读取数据输出(a)。20.一种用于进行多精度整数算术运算的装置,其特征在于包括大整数单元(LIU)阵列,具有清零输入,减法指令输入,多个数据输入(x{0},x{1},…,x{m-1}),输入(y),输入(z),时钟输入和输出(a);耦连到所述大整数单元(LIU)阵列上的控制器,其用于触发清零输入,选择性地激活或取消激活减法指令输入,分别读取m个数值并将其加载到多个数据输入(x{0},x{1},…,x{m-1})上,读取值(y)并将其加载到输入(y)上,读取值(z)并将其加载到输入(z)上,触发时钟输入,读取输出值(a),并将输出值(a)写入到随机存取存储器中;以及耦连到所述控制器上的随机存取存储器(RAM),用于存储由该控制器所读取的m个数值,存储由控制器所读取的值(y),存储由该控制器所读取的值(z),以及存储由该控制器所写入的输出值(a)。21.一种用于进行多精度整数算术运算的装置,其特征在于包括大整数单元,具有清零输入,减法指令输入,数据输入(x),输入(y),输入(z),时钟输入和输出(a);耦连到所述大整数单元(LIU)阵列上的控制器,其用于触发清零输入,选择性地激活或取消激活减法指令输入,读取m个数值并将其加载到数据输入(x)上,读取值(y)并将其加载到输入(y)上,读取值(z)并将其加载到输入(z)上,触发时钟输入,读取输出值(a),并将输出值(a)写入到随机存取存储器中;以及耦连到所述控制器上的随机存取存储器,用于存储由该控制器所读取的m个数值,存储由控制器所读取的值(y),存储由该控制器所读取的值(z),以及存储由该控制器所写入的输出值(a)。22.如权利要求20或21所述的用于进行多精度整数算术运算的装置,其特征在于上述RAM具有响应于控制器,在单独一个RAM周期内便能够从随机存取存储器中读出,然后进行修改并将修改后的值写回到随机存取存储器中的读取-修改-写入功能。23.如权利要求20或21所述的用于进行多精度整数算术运算的装置,其中该随机存取存储器另外包括用于存储值(z)的第一随机存取存储器,该第一随机存取存储器具有读取-修改-写入功能;用于存储y值的第二随机存取存储器;其中控制器在单独一个RAM周期内,同时完成对值(y)的读取和对值(z)的读取-修改-写入操作。24.如权利要求20或21所述的用于进行多精度整数算术运算的装置,其中该随机存取存储器具有单写端口,和单读端口,使其对应于控制器,同时从第一地址读出第一数值,以及向第二地址写入第二数值。25.一种用于通过处理第一数据信号(y),第二数据信号(x),来进行多精度整数算术运算的装置,其特征在于包括一组大整数单元(LIU)(LIU{0},LIU{1},LIU{2},…,LIU{n-1}),其中“n”是该组大整数单元中大整数单元的个数,且每个大整数单元分别具有具有第一乘法器输入,第二乘法器输入,高端部分积输出和低端部分积输出的乘法器;具有第一加法器输入,第二加法器输入,第三加法器输入,第四加法器输入,以及加法器输出的加法器,所述第三加法器输入与用于接收低端部分积输出的乘法器相连;和具有LIU寄存器输入和LIU寄存器输出的第一LIU寄存器,所述LIU寄存器输入与加法器相连,以接收加法器输出,所述第一LIU寄存器用于在一个时钟脉冲触发之前锁存加法器输出的数值,以及在该时钟脉冲之后将该数值传送给所述LIU寄存器输出,所述LIU寄存器输出被分为LIU寄存器高端输出和LIU寄存器低端输出,所述LIU寄存器高端输出包含有所述LIU寄存器输出的两个高端数位,所述LIU寄存器低端输出包含有所述LIU寄存器输出中除了所述LIU寄存器高端输出中的那些数位之外的所有数位,所述LIU寄存器高端输出与第四加法器输入相连,所述第一LIU寄存器还具有用于在所述LIU寄存器清零输入被激活时,将所述LIU寄存器输出清零的LIU寄存器清零输入;用于接收乘法器的高端部分积输出的第二LIU寄存器;与第一LIU寄存器相连的第一逻辑或门,用于接收LIU寄存器输出和进位输入(carry-in)信号(ci),所述第一逻辑或门用于产生进位输出信号(co),所述进位输出信号(co)在LIU寄存器输出的任何一位和所述进位输入信号(ci)均处于有效状态时被激活;与第一LIU寄存器相连,用于接收该LIU寄存器高端输出并产生辅助进位信号(ca)的第二逻辑或门,所述辅助进位信号(ca)在LIU寄存器输出的任一位处于有效状态时被激活;被加载到所述多个大整数单元的每个大整数单元的第一乘法器输入上的第一数据信号(y);具有多个码元(x{0},x{1},x{2},…,x{n-1})的第二数据信号(x),其中每个码元分别与所述多个大整数单元的每个大整数单元的第二乘法器输入相连;所述多个大整数单元的每个(第i个)大整数单元(LIU{i})(i>0)的第一加法器输入,分别与第i个大整数单元(LIU{i})的高端部分积输出相连;所述多个大整数单元的每个(第i个)大整数单元(LIU{i})(i>0)的LIU寄存器低端输出,分别与第i-1个大整数单元(LIU{i-1})的第二加法器输入相连;与第一大整数单元(LIU{0})的第一加法器输入相连的第一非门,用于在减法指令信号有效时,对第三数据信号(z)进行求反操作;与第一大整数单元LIU{0}的LIU寄存器低端输出相连,用于在减法指令信号有效时对所述LIU寄存器低端输出进行求反操作的第二非门,另外,所述第二非门产生第四数据信号;所述第一大整数单元(LIU{0})的输入(ci)与逻辑0值相连;所述第二大整数单元(LIU{1})的输入(ci)与第一大整数单元(LIU{0})的输出(ca)相连;所述第n个大整数单元(LIU{n-1})的第二加法器输入与某个逻辑0值相连;所述多个大整数单元的每个(第i个)大整数单元(LIU{i})(i>0)的输入(ci)与第i-1个大整数单元(LIU{i-1})的输出(co)相连,而第n个大整数单元(LIU{n-1})的输出(co)则构成了第五数据信号,进位溢出信号(cy)。26.一种用于通过处理第一数据信号(y),第二数据信号(x),来进行多精度整数算术运算的装置,其特征在于包括大整数单元,其具有乘法器,其具有第一乘法器输入,第二乘法器输入,高端部分积输出和低端部分积输出;加法器,其具有第一加法器输入,第二加法器输入,第三加法器输入,第四加法器输入,以及加法器输出,所述第三加法器输入与用于接收低端部分积输出的乘法器相连;和第一LIU寄存器具有LIU寄存器输入和LIU寄存器输出,所述LIU寄存器输入与加法器相连,以接收加法器输出,所述第一LIU寄存器用于在一个时钟脉冲触发之前锁存加法器输出的数值,以及在该时钟脉冲之后将该数值传送给所述LIU寄存器输出,所述LIU寄存器输出被分为LIU寄存器高端输出和LIU寄存器低端输出,所述LIU寄存器高端输出包含有所述LIU寄存器输出的两个高端数位,所述LIU寄存器低端输出包含有所述LIU寄存器输出中除了所述LIU寄存器高端输出中的那些数位之外的所有数位,所述LIU寄存器高端输出与第四加法器输入相连,所述第一LIU寄存器还具有LIU寄存器清零输入,用于在所述LIU寄存器清零输入被激活时,将所述LIU寄存器输出清零;用于接收乘法器的高端部分积输出的第二LIU寄存器;与第一LIU寄存器相连的逻辑或门,用于接收LIU寄存器高端输出并产生进位溢出信号(cy),所述进位溢出信号(cy)在LIU寄存器高端输出的任何一位处于有效状态时被激活;被加载到所述多个大整数单元的每个大整数单元的第一乘法器输入上的第一数据信号(y);被加载到所述大整数单元的第二乘法器输入上的第二数据信号(x);与所述大整数单元的第一加法器输入相连的第一非门,用于在减法指令信号有效时对第三数据信号(z)进行求反操作;与所述大整数单元的LIU寄存器低端输出相连的第二非门,用于在所述减法指令信号有效时对所述LIU寄存器低端输出进行求反操作,另外,所述第二非门还用于产生第四数据信号(a)。27.一种用于通过处理第一数据信号(y),第二数据信号(x),来进行多精度整数算术运算的装置,其特征在于包括大整数单元(LIU),其具有具有第一乘法器输入,第二乘法器输入,高端部分积输出和低端部分积输出的乘法器;具有第一加法器输入,第二加法器输入,第三加法器输入,第四加法器输入,以及加法器输出的加法器,所述第三加法器输入与用于接收低端部分积输出的乘法器相连;和具有LIU寄存器输入和LIU寄存器输出的LIU寄存器,所述LIU寄存器输入与加法器相连,以接收该加法器输出,所述LIU寄存器用于在一个时钟脉冲触发之前锁存加法器输出的数值,以及在该时钟脉冲之后将该数值传送给所述LIU寄存器输出,所述LIU寄存器输出被分为LIU寄存器高端输出和LIU寄存器低端输出,所述LIU寄存器高端输出包含有所述LIU寄存器输出的两个高端数位,所述LIU寄存器低端输出包含有所述LIU寄存器输出中除了所述LIU寄存器高端输出中的那些数位之外的所有数位,所述LIU寄存器高端输出与第四加法器输入相连,所述LIU寄存器还具有LIU寄存器清零输入,用于在所述LIU寄存器清零输入被激活时,将所述LIU寄存器输出清零;与第一LIU寄存器相连,用于接收LIU寄存器高端输出并产生进位溢出信号(cy)的逻辑或门,所述进位溢出信号(cy)在LIU寄存器高端输出的任何一位处于有效状态时被激活;被加载到所述多个大整数单元的每个大整数单元的第一乘法器输入上的第一数据信号(y);被加载到所述大整数单元的第二乘法器输入上的第二数据信号(x);与所述大整数单元的第一加法器输入相连的第一非门,用于在减法指令信号有效时对第三数据信号(z)进行求反操作;与所述大整数单元的LIU寄存器低端输出相连的第二非门,用于在所述减法指令信号有效时对所述LIU寄存器低端输出进行求反操作,另外,所述第二非门产生第四数据信号(a)。具有锁存器输入和锁存器输出的锁存器,所述锁存器输入与所述大整数单元的高端部分积输出相连,所述锁存器输出与所述大整数单元的第二加法器输入相连,用于在时钟脉冲触发之前锁存第n个高端部分积以及在该时钟脉冲之后将第n个高端部分积馈送给所述第n个大整数单元的第二加法器输入;所述锁存器具有锁存器清零信号,而所述大整数单元也具有LIU寄存器清零输入,所述LIU寄存器清零输入和所述锁存器清零信号连在一起,构成了数据信号(clr);和所述锁存器具有时钟输入,而所述大整数单元也具有时钟输入,所述时钟输入被连在一起,构成了时钟信号(clk)。全文摘要一种用于进行大整数的乘法和模数约简运算的系统和方法。该系统包括至少一个大整数单元(21),每个大整数单元分别具有一个乘法器(22),一个加法器(23),和一个寄存器(24)。乘法器上加载有第一和第二乘法器输入,而加法器上则加载有第一和第二加法器输入。该乘法器的一个输出也被加载到该加法器上。多个大整数单元可以被连成一个大整数单元阵列(39),其中包括有一个非门(35)和一个锁存器(34)。该乘法器的第二输出被加载到下一个大整数单元的第一加法器输入上,随着在该阵列中增加另外的大整数单元,处理速度可以得到进一步地提高。文档编号G06F7/00GK1279781SQ98811527公开日2001年1月10日申请日期1998年11月4日优先权日1997年11月26日发明者迈克尔·J·萨宾,马克·W·海辛申请人:阿塔迈尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1