首页> 中国专利> 蒙哥马利乘法器中的流水线内核

蒙哥马利乘法器中的流水线内核

摘要

一种安排用于以素数为模将第一长整数实体与第二长整数实体进行相乘的乘法器设备。特别地,它包括一种流水线乘法器内核,同时以蒙哥马利方式执行全部的乘法运算。

著录项

  • 公开/公告号CN1605059A

    专利类型发明专利

  • 公开/公告日2005-04-06

    原文格式PDF

  • 申请/专利权人 皇家飞利浦电子股份有限公司;

    申请/专利号CN02824949.6

  • 发明设计人 G·T·M·胡伯特;

    申请日2002-12-05

  • 分类号G06F7/72;

  • 代理机构72001 中国专利代理(香港)有限公司;

  • 代理人李亚非;王勇

  • 地址 荷兰艾恩德霍芬

  • 入库时间 2023-12-17 16:04:13

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-12-23

    专利权有效期届满 IPC(主分类):G06F 7/72 专利号:ZL028249496 申请日:20021205 授权公告日:20080416

    专利权的终止

  • 2019-04-12

    专利权的转移 IPC(主分类):G06F7/72 登记生效日:20190325 变更前: 变更后: 申请日:20021205

    专利申请权、专利权的转移

  • 2008-04-16

    授权

    授权

  • 2007-10-17

    专利申请权、专利权的转移专利申请权的转移 变更前: 变更后: 登记生效日:20070914 申请日:20021205

    专利申请权、专利权的转移专利申请权的转移

  • 2005-06-08

    实质审查的生效

    实质审查的生效

  • 2005-04-06

    公开

    公开

查看全部

说明书

本发明涉及一种乘法器设备,用于以素数为模将第一长整数实体乘以第二长整数实体,该乘法器设备包括一种流水线乘法器内核,并被安排用于以蒙哥马利方式执行所有的乘法运算。

发明背景

以素数为模的长整数乘法是一种基本和重复的运算,这些运算用于所谓的公共密钥系统和各种其它的应用。为了有效地使用这种应用,应该将乘法的执行时间最小化。因此,本发明尤其涉及一种如权利要求1前序部分所述的设备。为了上述目的,已经提出了通过使用一种乘法和归约运算(reduction operation)的组合的各种方法和设备。特别是,所述结果的最高有效部分实际上常常用来作用于所述归约。然而,本发明已经意识到这种最高有效部分的展开将实质上延迟所有的运算,尤其当现有硬件应该以最大可能高的工作周期使用时,这时由于这种乘法的次序必须以一种连续的方式来执行。

发明概述

因此,本发明的一个目的是提供一种如前序部分所述的乘法器设备,其中与现有技术相比,使用实际结果的最低有效部分作用于归约,同时提高实际使用所述硬件的时间片,以便能够处理这种基本的和长序列的乘法。

因此,现在根据本发明的其中一个方面,其特征在于根据权利要求1的特征部分。实际上,根据本发明的组合使其更容易保持流水线被充满,因此在叠加运算中缩短平均计算时间。所述乘法器设备可用于GF(p)以及GF(2n)中的运算,其中p为素数。

在独立权利要求中阐述了本发明的其它有利方面,这些权利要求限定了本发明的基本组件应用的有利扩展,或者应用领域。

附图说明

参照公开的优选实施例,并特别参照所附附图,在下文将更加详细地讨论本发明的这些和其它方面以及优点,附图示出了:

图1,流水线乘法器的方框图;

图2,用于长整数乘法X*Y+W的方框图;

图3,用于长整数乘法Xi.Y+W的方框图;

图4,用于伽罗瓦域(Galois field)GF(2n)的流水线乘法器;  

图5,无进位传送加法器的结构;

图6,图示中间进位和求和量的图。

优选实施例详述

1.流水线乘法器

流水线乘法器被设计成在每个时钟周期接收两个将被相乘的新数字。两者的乘积在许多级中计算,并当所有级已经运算过时准备好该乘积。例如,对于32*32位的乘法,级数可以是17(16个用于乘法和1个用于最后的加法)。每个时钟周期,计算下一个乘积,但是仅在17个时钟周期后准备好结果。所以在同一个时钟周期至多同时处理17个乘积。

对于一种高效的流水线乘法器,已经设计出长整数计算从而保持流水线被充满。一种必须避免的情况是新的计算依靠正在进行的计算结果。在这种情况必须插入等待状态。这就是为什么设计蒙哥马利乘法器用于不同于类似RSA计算的椭圆曲线计算的原因。

紧接着所述乘法,乘法器执行两步加法P=X.Y+A+B。其中一步加法两个长整数乘法所必需的,其中该乘法必须被分成许多基本的32*32位乘法。

流水线乘法器能够被设计用于不同的位数,例如8*8或16*16。

2.蒙哥马利乘法

蒙哥马利乘法计算乘积P=x.y.R-1 mod p。这里,x和y是要被相乘的输入,p是乘法的模数。此外,R=2n,其中n是该系统的位数,例如1024用于类似RSA的系统,和160用于椭圆曲线。作为一个实例选择一种具有17级的32*32位乘法器。

3.利用基数B的蒙哥马利乘法

这种方法适用于很大的值Nw以及RSA。

·B=232,假定32位的处理器字长。

·R=BNw,Nw是长整数的32位字的数目。

·a[i]是数字a的第i个32位字。

·T[0]是临时变量T的最低有效32位部分。

预先存储的常量:

·m’=-(p-1)mod B(32位宽)

·素数p

输入:a mod p,b mod p

输出:蒙哥马利乘积:MonPro(a,b)=a.b.R-1mod p

运算如下:

T=0

For i=0 to Nw-1

  {T=T+a[i].b;                   //Nw乘法

    Ui=T[0].m’mod B;         //1乘法

    T=(T+Ui.p)/B                  //Nw乘法

  }

if T>p then T=T-p

4.对于512位操作数的计算

在我们的实例中,a和b由16个32位字组成。首先从i=0开始计算T=T+a[i].b。

第一个计算在时隙0开始,最后一个计算在时隙15开始。在时隙16增加一个等待周期。

在时隙17准备好第一个结果T[0]。然后我们从这个时隙开始计算乘积Ui=T[0].m’,该乘积在时隙34输出。

下一系列的计算是T=(T+Ui.p)/B,其在时隙34开始,并在时隙49结束。其第一个结果在时隙51输出,但因为该结果总是为零所以将其丢弃。第二个结果是在时隙52输出。

从时隙52开始,重新开始循环。当前一轮结果准备好时,它立刻使用前一轮的结果。

这里有16轮,所以时隙总数是16*52=832。

在时隙848准备好完全的结果。

5.对于1024位操作数的计算

首先从i=0开始计算T=T+a[i].b。

我们以计算最初的17个乘积开始。

第一个结果T[0]在时隙17准备好。在该时隙中我们计算乘积Ui=T[0].m’,该乘积在时隙34输出.从时隙18直到32,我们计算T=T+a[i].b的剩余的乘积。

下一系列计算(T+Ui.p)/B从时隙34开始并在时隙65结束。当在时隙66开始新一轮计算时,准备好第一个结果。

这里有32轮,所以时隙总数是32*66=2112。

在时隙2128准备好完全的结果。

6.对于2048位操作数的计算

首先从i=0开始计算T=T+a’[i].b’。

我们以计算最初的17个乘积开始。

第一个结果T[0]在时隙17准备好。在该时隙中我们计算乘积Ui=T[0].m’,该乘积在时隙34输出。从时隙18到Nw,我们计算剩余的乘积。

下一系列计算(T+Ui.p)/B从时隙Nw开始,并在时隙2Nw-1结束。

当在时隙2Nw开始新一轮计算时,准备好第一个结果。

这里有Nw轮,所以时隙总数是Nw.(2Nw+1)。

在时隙Nw.(2Nw+1)+17(对于2048位,等于8273)准备好完全的结果。

7.利用基数R的蒙哥马利乘法

该算法适用于小值Nw,也适用于椭圆曲线。

·B=232(假定为32位的处理器字长)

·R=BNw(Nw是长整数的32位字的数目)

预先存储的常量:

·m’=-(p-1)mod R(m’是Nw32位宽)

·素数p

输入:a mod p,b mod p

输出:MonPro(a,b)=a.b.R-1 mod p

T=a.b

U=T.m’mod R

T’=T+U.p

T=T/R

if T>p then T=T-p

对于GF(2n)上的系统,所有加法都是按模2计算。这里,m’是多项式B=α32倒数。

8.计算方法

首先,计算T=a.b的完全积。这需要Nw2次乘法。然后准备好T的第一个结果,因此我们在此之后就可以立刻开始。对于乘积T.m′,我们仅需要计算比R更小的乘积。

·在时隙17准备好乘积T[0].T[0]*(m[0]..m[Nw-1])的计算在时隙Nw2开始,并需要Nw次乘法。

·在时隙17+Nw准备好乘积T[1].T[1]*(m[0]..m[Nw-2])的计算在时隙Nw2+Nw开始,并需要Nw-1次乘法。

·在时隙17+2Nw准备好乘积T[2].T[2]*(m[0]..m[Nw-3])的计算在时隙Nw2+2Nw-1开始,并需要Nw-2次乘法,等等。

·在时隙17+j.Nw准备好乘积T[j].T[j]*(m[0]..m[Nw-j-1])的计算在时隙Nw2+(2Nw-j+1).j/2开始,并需要Nw-j次乘法,等等。

·在时隙17+(Nw-1).Nw准备好乘积T[Nw-1].T[Nw-1]*m[0]的计算在时隙Nw2+(Nw+2).(Nw-1)/2开始,并需要1次乘法。

可以证明,对于Nw≥5,在新的乘积T[j]*m[0]开始之前,总是准备好乘积T[j]。因此,不需要等待周期。

·U[0]在时隙Nw2+17准备好。从该时刻起,计算乘积U.p。

·最后一次乘法在时隙Nw2+(Nw+2).(Nw-1)/2+1开始。对于Nw=5,最后一次乘法在在时隙40开始,并且U[0]在时隙42开始。因此这里就要求有两个等待周期。对于更大的值Nw,就不需要有等待周期。

·U.p的计算占用Nw2个时隙。

·对于Nw>5,时隙总数是2.Nw2+(Nw+2).(Nw-1)/2+1

·对于Nw=5,时隙总数是67个时隙。

·完全的结果在时隙2.Nw2+(Nw+2).(Nw-1)/2+18准备好。

9.改进的布斯(BOOTH)算法

改进的布斯算法设计为用被乘数的两位来作部分乘法。这使部分乘法的数量减少了一半。

首先重新编码乘数Y,其中y’i可以具有值-2,-1,0,+1和+2(有符号数字符号)。

y’i=-2.yi+1+yi+yi-1(仅为i的偶数值定义)

Y=y′30.230+y′28.228+…+y′0.20

yi’=-2.yi+1+yi+yi-1

yn=0

>>p>=>>Σ>>i>=>1>,>odd>>>n>->1>>>>>y>′>>i>>.>>2>i>>.>X>=>>Σ>>i>=>1>,>odd>>>n>->1>>>>(>->2>>y>>i>+>1>>>+>>y>i>>+>>y>>i>->1>>>)>>.>>2>i>>.>X>=>>>

>>=>->X>>Σ>>i>=>1>,>odd>>>n>->1>>>>y>>i>+>1>>>.>>2>>i>+>1>>>+>X>.>>Σ>>i>=>1>,>odd>>>n>->1>>>>y>i>>.>>2>i>>+>2>X>.>>Σ>>i>=>1>,>odd>>>n>->1>>>>y>>i>->1>>>.>>2>>i>->1>>>=>>>

>>=>->X>>Σ>>i>=>2>,>even>>n>>>y>i>>.>>2>i>>+>X>.>>Σ>>i>=>1>,>odd>>>n>->1>>>>y>i>>.>>2>i>>+>2>X>.>>Σ>>i>=>0>>>n>->2>>>>y>i>>.>>2>i>>=>>>

>>=>->X>>Σ>>i>=>0>,>even>>>n>->2>>>>y>i>>.>>2>i>>+>X>.>>Σ>>i>=>1>,>odd>>>n>->1>>>>y>i>>.>>2>i>>+>2>X>.>>Σ>>i>=>0>>>n>->2>>>>y>i>>.>>2>i>>+>>y>0>>.>X>=>>>

>>=>X>.>>Σ>>i>=>0>>>n>->1>>>>y>i>>.>>2>i>>+>>y>0>>.>X>=>X>.>Y>+>>y>0>>.>X>>>

为了得到正确的结果,我们必须从乘积减去y0.X。

10.并行进行的减法

X=x31.231+x30.230+…x1.21+x0.20

Y=y31.231+y30.230+…y1.21+y0.20

W=w31.231+w30.230+…w1.21+w0.20

Z=X.Y+W。

在这方面,图1是流水线乘法器实施例的方框图。这里,具有星号的圆圈执行乘法运算,但具有加号标记的圆圈执行加法运算,诸如一种包括进位存储运算的加法运算。各种方框将临时保留那里指示的量。为了更清楚起见,各种相互连接示出了一道将被传送的位的位排列顺序。在右侧,一列方框用于引入必要的修正项。

左侧部分计算Z=X.Y+W+y0.X。这个末项是该算法的人为项,右侧部分与其它计算并行减去该末项。这就是本发明。

以下实施例公开了乘法是怎样建立的,但这种实现可以在细节上有所偏差。

在第一个时隙计算Z0=X.Y(1∶0)+W0并将它存储在寄存器Z0中。°X被传送到第二X寄存器,且Y(31∶2)被传送到第二Y寄存器。

在第二个时隙计算Z1=X.Y(3∶2)+Z0并将它存储在寄存器Z1中。此外,X被传送到第三X寄存器,且Y(31∶2)被传送到第三Y寄存器。

而且计算-y0*X(1∶0),并把它加到Z(1∶0),等等。

在第16个时隙计算Z15=X.Y(31∶30)+Z15,并将它存储在寄存器Z15中。

此外还计算-y0*X(31∶30),并把它加到Z(31∶30)。

现在,Z15包含了64位。

在最后的时隙(#17),较高的32位传送到Z16和Z15,并且两个修正位被加到前面的Z16值,然后输出。

当进行长整数乘法时,与X0,X1,…,XNw-1组合输入Nw次Yi。在长整数计算开始时,Z16设置为0。仅当X0.Yi+W达到输出Z时,然后才加Z16=0。

11.对于GF(2n)的蒙哥马利乘法

椭圆曲线计算也可以通过域GF(2n)来定义。

在这个域中所有的加法(这里通过“+”来表示)都是模2计算(异或)。

这个域中的多项式具有最多n-1次的幂。

所以当n=32时,X和Y的多项式定义如下(所有系数都是0或1):

X=x3131+x3030+…x11+x00

Y=y3131+y3030+…y11+y00

还有一个不可约的多项式p,被定义为:

p=pnn+pn-1n-1+…p11+P0α0

乘积P=X.Y mod p通过以下式子来计算:

(xn-1n-1+xn-2n-2+…x1.c1+x00).(yn-1n-1+yn-2n-2+…y11+y00)mod p。

然后由多项式p来除乘积X.Y,余数就是结果。余数的幂总是小于p的幂。

X,Y和p都可用长整数来表示。

约化乘积的计算可以通过正常乘积计算来进行,并具有这样的修改,内部加法利用模2计算进行。然后除了模2加以及保留余数以外,照常规进行除法。

然而,还能够更快地进行蒙哥马利乘法。

12.蒙哥马利乘法

蒙哥马利乘法把许多素数(不可约多项式)加到(部分)乘积中,这样乘积被一个诸如α32或α160的适当因数R可除尽。对于给定多项式的二进制表示,可以考虑用232或2160代替。这里,m’定义为m’=p-1 modR,其中p-1定义为p.p-1 mod R=1

现在,通过以下修改能够应用相同的算法:

·乘法器中的加法运算是模2的。

·省略最后的减法。

这种方案的进一步细节。除了上述的以外,各种其它细节、实施例、和说明将在下面作为补充的形式提出。

13.长整数乘法器和加法器

定义:

·X=xNw-1.BNw-1+…+x2.B2+x1.B1+x0.B0

·Y=yNw-1.BNw-1+…+y2.B2+y1.B1+y0.B0

·Pi=piNw.BNw-1+…+pi2.B2+pi1.B1+pi0.B0

·P=p2Nw-1.B2Nw-1+…+p2.B2+p1.B1+p0.B0

·B=232

·m=Nw-1

长整数乘法涉及很多两个32位字的乘法。该实施例使用一种流水线32位乘法器(参见图1和4),这种乘法器在每个时隙接收三个新32位操作数(X*Y+Z)。这种乘法器速度非常快。然而,这种乘法的输出仅在17个时隙后准备好。所以最多可以有17个乘法同时计算。可是,当想要与正在进行相乘的结果相乘的时候,必须等待将该结果被准备好。这样能够引入等待周期,因此它将降低性能。

Z=X.Y+W

    Z=X.{Y0.B0+Y1.B1+..YmBm}+W

    Z,X和W具有大小为Nw-1的32位字。Yi具有32位宽。

    W=W0.B0+W1.B1+..WmBm}

中间结果Wi=Wi1.B0+Wi2.B1+..Wi.m+1Bm

·计算P0=X.Y0+W。结果以P0=W0.B+Z0分解。

·计算P1=X.Y1+W0。结果以P1=W1.B+Z1分解。

·计算P2=X.Y2+W1。结果以P2=W2.B+Z2分解。

·…

·计算Pm=X.Ym+Wm-1

·对于j≥m,Zj=Pm.j

所以我们需要一个函数来计算Pi=X.Yi+Wi

在这方面,图2是一个用于计算(X*Y+W)的方案的方框图。

Pi=X.Yi+W

这个计算是前述计算的一部分。

X和W具有大小为m=(Nw-1)的32位字。

Yi具有32位宽。

·计算S1=x0.yi+w0。S1以Z1.B+P0分解。

·计算S2=x1.yi+w1+Z1。S2以Z2.B+P1分解,等等。

·计算Sm=Xm.yi+Wm+Zm-1。Sm以Pm+1.B+Pm分解。

在图3中已经示出了相关的实施例,该图是一个用于根据(X*Y+W)执行长整数乘法的方案的方框图。

利用图1的流水线乘法器计算S=x.y+w+z,已在上文讨论。

·为了在GF(2n)上计算,加法是模2计算的。所以没有进位。

14.流水线乘法器

X=x31.231+x30.230+…x1.21+x0.20

Y=y31.231+y30.230+…y1.21+y0.20

W=w31.231+w30.230+…w1.21+w0.20

Z=X.Y+W.

左侧部分计算Z=X.Y+W+y0.X。末项是所用算法的人为项。右侧部分减去所述末项。

下面给出了一种想法,即乘法是怎样建立的,但实现可能在细节上有所偏差。

在第一个时隙中,计算Z0=X.Y(1∶0)+W0并把它存储在寄存器Z0中。X被传送到第二X寄存器并且Y(31∶2)被传送到第二Y寄存器。

在第二个时隙中,计算Z1=X.Y(3∶2)+Z0并把它存储在寄存器Z1中。X被传送到第三X寄存器并且Y(31∶2)被传送到第三Y寄存器。

此外,计算-y0*X(1∶0)并把它加到Z(1∶0)。

在第16个时隙中,计算Z15=X.Y(31∶30)+Z15并把它存储在寄存器Z15中。

此外,计算-y0*X(31∶30)并把它加到Z(31∶30)。现在Z15包括64位。

在最后一个时隙(#17)中,较高的32位被传送到Z16和Z15中,并且两个修正位被加到输出的Z16的前值。

进行如在第13段中描述的长整数乘法,然后与X0,X1,...,XNW-1组合输入Nw次Yi。当X0.Yi+W达到输出Z时,那么就代替加Z16的内容而不加任何内容。Z16具有第13段中Zi的函数:从一个乘法传送到下一个乘法的那个部分。

15.改进的布斯算法

首先重新编码乘法器Y,其中y’i仅可以具有值-2,-1,0,+1和+2(有符号的数字表示)。

y′i=-2.yi+1+yi+yi-1(仅对i的偶数值定义)

Y=y′30.230+y′28.228+…+y′0.20

例如当y=29dec=011101bin时,那么y′=(211)sd=2.24-1.22+1=29dec,其中1表示-1。

使用的这些公式是在以前段落中公开的有关改进布斯算法的内容(第9段)。

为了得到正确的结果,我们必须从乘积y0.X中减去。

用2相乘就是左移1位被乘数。

部分乘积被以一种2根值表示法编码,其中每个乘积都可以具有值-1,0或+1。

现在以16级来计算乘积。在每级中计算y′i.X.2i的部分乘积,并把它相加到在前结果中,例如当x=53dec=110101bin和y=29(y’=(211)sd)时,那么

对于32位操作数,要进行15个加法。在一个普通全加器中,这花费非常长的时间,因为进位必须波动通过。为了防止这种现象,我们将使用一种无进位传送加法器。在这方面,图5示例了一种无进位传送加法器的方案。

16.冗余二进制计数法

加法器的被加数和加数都使用一种冗余二进制计数法,这种方法也是一种有有符号数字表示法。具有一个固定根2和一个数字组{1,0,1},其中1表示-1。一个n位数字的冗余二进制整数Y具有值yn-12n-1+yn-22n-2+…+y1.21+y0.20,其中yi可以具有值-1,0或1。

在冗余二进制计数法中可以有多种方式表示一个整数,例如[0101]SD2=[0111]SD2=[1101]SD2=[1111]SD2=[1011]SD2=5dec。只有‘0’具有唯一的表示:[00…0]。

从标准二进制计数法变换到冗余二进制计数法是简单的:两者都是一样的。

从冗余二进制计数法变换到标准二进制计数法通过以下减法来进行:Xbin=X+-X-,其中X+是通过用‘0’替代所有的‘1’而从Xsd2中得到的,X-是通过用‘0’替代所有的‘1’和用‘1’替代所有的‘1’而从Xsd2中得到的。

例如,当X=[101 1]SD2=5dec时,那么X+=[1000]bin=8dec和X-=[0011]bin=3dec

通过用‘1’替代所有的‘1’和用‘1’替代所有的‘1’来对一个变量求反。例如,当X=[101 1]SD2=5dec,那么-X=[1011]SD2=-5dec

我们将一个变量编码如下(参见表1):

X输出x+x-输入x+x-000001101x101x1

表1对于GF(p)以冗余二进制计数法对X进行编码(x=任意)。从来不使用组合11。

因此,当输入X并且X=1时,比条件x+=1充分。同样,当X=1时,也比x-=1充分。

17.无进位传送加法器

所选择的表示法是,在下一个数字吸收可能的进位,并不影响下一个进位。因此,这种加法器的速度比32位全加器快得多。

至于32*32位乘法器,有16个加法(包括在前乘法的上面最高有效字)。然后仅在末端,所述冗余二进制计数法转换成标准二进制计数法。这种转换不是自由传送的。

加法以(在概念上)2步来进行。首先计算中间和si以及中间进位ci。在下一步,两者都转换成最终和(sumi)。该中间进位可以最可能取决于在前和当前的数字值,但不取决于再早一些的值。

ci和si满足以下等式:2ci+si=xi+yi。而且ci-1和si这样选择,使得两者既不是1也不是1。

在这方面,图6所示为生成中间进位和求和量的图。

和Si=ci+si-1将不再生成一个新的进位:

·类型1,3,4和6:ci-1+si=ci-1

·类型2a,5a:ci-11,也就是0或1,所以ci-1+si1或0。

·类型2b,5b:ci-1≠1,也就是0或1,所以ci-1+si是1或是0。

这通过以下实例说明:

X          [10101001]sd2=87des

Y          [11100111]sd2=101des

           ---------+ 

S           01001110

C           11000101

             ---------+

Sum          111000100=188des

18.转换为标准二进制计数法

在最后一级,结果被转换成标准二进制计数法。X=X+-X-,其中X+由所有xi+构成,以及X-由所有的xi-构成。

因为xi+和xi-决不会同时为1,所以我们不需要全减器。因此,我们尝试一种不同的方法。

我们将从右边到左边移去所有的1

当不从右边借位时:

·当下一个数字是‘1’时,那么就保存该数字并且没有到左边的借位。

·当下一个数字是‘0’时,那么就保存该数字并且没有到左边的借位。

·当下一个数字是‘1’时,那么就用‘1’替代该‘1’并且有到左边的一个借位。

当有来自右边的借位时:

·当下一个数字是‘1’时,那么就用‘0’替代该‘1’,并且没有到左边的借位。

·当下一个数字是‘0’时,那么就用‘1’替代该‘0’,并且有到左边的一个借位。

·当下一个数字是‘1’时,那么就用‘0’替代该‘1’并且有到左边的一个借位。

然而,当最左的数字是‘1’和最右的数字是‘1’时,并且它们之间的所有数字是‘0’时(10…01),这将产生一个非常大的延迟。

为了减小该延迟,我们把32位分成8组,每组4位。

·当最左的非零数字是‘1’时,那么产生一个到下一个左边组的借位。

·当该组中有至少一个‘1’时,从右边组来的一个借位不传送到下一个组。

19.对于GF(2N)的乘法器逻辑

X=x3131+x3030+…x11+x00

Y=y3131+y3030+…y11+y00

W=w3131+w3030+…w11+w00

对于这些向量的表示,在上述公式中可以看到用‘2’来代替‘α’。

Z=X.YW。

>>Z>=>>Σ>>i>=>0>>31>>>Σ>>j>=>0>>31>>>x>i>>.>>y>j>>>α>>i>+>j>>>>>

Zi=(y2iy2i+1.α).X+Zi

在GF(2n)中没有等式用于布斯编码。

在第一个时隙中(参见图4),计算X.Y(1∶0)W并把它存储在寄存器Z0中。X被传送到第二X寄存器以及Y(31∶2)被传送到第二Y寄存器(Y)。

在第二个时隙中,计算X.Y(3∶2)Z0并把它存储在寄存器Z0中。X被传送到第二X寄存器以及Y(31∶4)被传送到第三Y寄存器(Y)。

在第16个时隙中,计算Z15=X.Y(31∶30)Z15并把它存储在寄存器Z15中。

现在Z15包括64位。

在最后一个时隙(#17)中,较高32位被传送到Z16以及Z15被加到输出的在前Z16值。

进行如在第13段中描述的长整数乘法,那么与X0,X1,...,XNW-1组合输入Nw次Yi。当X0.YiW达到输出Z时,那么代替加Z16的内容而不加任何内容。Z16具有第13段中Zi的函数:从一个乘法传送到下一个乘法的那个部分。

特别是,图4示例了一种用于在GF2n中运算的流水线乘法器实施例的方案。

加法

加法是2变量的exor。没有进位。

编码

因为我们想与GF(p)的逻辑组合所述逻辑,所以我们将使用以下冗余编码。这里X=x+^x-,其中^表示一种逻辑“OR”功能。

X输出x+x-输入x+x-0000x1101x110X1

表2用于对GF(2n)以冗余二进制计数法编码X(x=任意)

20.用于GF(p)和GF(2n)的逻辑

两种乘法器级都将使用以下结构zj=ai.xj-1bi.xj

GF(p)

GFp=1

y′i=-2.yi+1+yi+yi-1(仅用于奇数i,参见以下表3)

yi+1yiyi-1y′iaibisigni0000001001101101010110112101100-2100101-1010110-10101110000

              表3用于GF(p)的编码

GF(2n)

GFp=0

ai=yi-1

bi=yi

zj+=zj=ai.xj-1bi.xj

zi-=0

组合

bi=yiGFp.yi-1

zj+=(ai.xj-1bi.xj).yi+1

>>>>z>j>>->>=>>(>>a>i>>.>>x>>j>->1>>>⊕>>b>i>>.>>x>j>>)>>.ver>>>y>>i>+>1>>>‾>>.>GFp>>>

21.无传送进位加法

类型xiyixi-1yi-1f2f5h中间进位ci中间和si11x1xxxxx00x10002a1x00001xx0x0x0x011001110012b1x1x000000001x1xx1xxx1xxxxx1xxx1111100000000001030000xxxx00x000041xx1x11xxxxxxxxx0000xx00005a00x1x100x0x0x0x000111100015b0000x1x1x1x10000x1xxx1xxxxx1xxx100001111000001106x1x1Xxxx00x0100

                               表4中间进位及和

表4与利用根据表1编码的图6类似。

>>h>=ver>>>x>>i>->1>>>‾>>.ver>sup>>y>>i>->1>>-sup>>‾>>>>

si+=(f2∧f5).h

si-=(f2∧f5).h

Si=ci-1+si.

ci-1+ci-1-si+si-Si+Si-000000001x1000x1011x00101x1x-1xx100x10001x11x00x1X1-

              表5总和Si

22.GF(2n)

Si=xiyi

看来如果我们取消GF(p)系统中的进位,根据GF(p)规则生成的Si则产生正确的答案,Si根据表2被编码。

组合逻辑

>>h>=ver>>>x>>i>->1>>>‾>>.ver>>>y>>i>->1>>>‾>>>>

ci-=(xi.yi∧f5.h).GFp

si+=(f2∧f5).h

si-=(f2∧f5).h

23.从冗余二进制到二进制的转换输入是一个xi={1,0,1}的向量X。输出是一个yi={0,1}的向量Y。向量X被划分为每组4位的8个组,i=4m+n(n=0..3,m=0..7)。在各组之间:

·当这个组中最左边非零数字是‘1’时,生成组借位gm

·当所述组没有任何‘1’时,传送组借位gm-1

在各组中:

·当数字是‘1’时,生成一个借位bi

·当数字不是‘1’时,传送一个借位bi-1:bi=bi-1

bi-1xi+xi-yibi0000001x100x1111001111x001x101

表6一个组中的输出和借位

对于i≠0,4,8,…,28,yi=(xi+∧xi-)bi-1

对于i=0,4,8,…,28,yi=(xi+∧xi-)g4i-1

24.GF(2n)

由于不存在借位,因此转换很简单。如果我们抑制所有的借位,那么GF(p)的电路将给出正确的答案。

组合逻辑:

对于i≠0,4,8,…,28,yi=(xi+∧xi-)(bi-1.GFp)

对于i=0,4,8,…,28,yi=(xi+∧x1-)(g4i-1.GFp)

流水线乘法器

如图1中所示的流水线乘法器也能用于GF(2n),但是在右侧部分的-Y[0]被设置为‘0’。上面描述了所有其它改进。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号