基于二次Booth编码的大数乘法器的制作方法

文档序号:6610339阅读:193来源:国知局
专利名称:基于二次Booth编码的大数乘法器的制作方法
技术领域
本发明涉及公开密钥密码体制算法的集成电路设计领域,特别是涉及一种适合公开密钥加密算法的大数乘法的硬件实现。

背景技术
迅速发展的电子商务、保密通讯等应用对开放网路上的信息安全提出了更高的要求。RSA、ECC等公开密钥密码体制被广泛用于密钥传递和数字签名。RSA和素数域ECC的核心操作都是模乘运算,而且为了保证一定程度的安全性,RSA模数的位长需要达到1024位以上,ECC模数的位长也需要达到233位以上。应用最广泛的模乘法算法是蒙哥马利算法,它的核心思想是将模乘运算转化为基本的乘法运算。综上RSA、ECC算法实现的关键运算是大数乘法。但是这种规模的大数乘法运算用软件实现效率是很低的,会占用大量的系统资源,因此各种大数乘法器的硬件设计应运而生。
在乘法中,如果乘数是两位或两位以上的数,乘的时候,就要用乘数的每一位去乘被乘数,每次乘得的积,叫做部分积。大数高速乘法器通常采用并行结构,一般分为3个部分一是产生部分积;二是将产生的部分积进行压缩,得到两个部分积和(Sum)、进位(Carry);三是通过加法器将两个部分积相加得到结果。
产生部分积简单的方法是由被乘数X和乘数Y中的一位二进制数Yi相与。则N位二进制乘数将产生N个部分积。其具体算法表示为 Function Mult(X,Y)=X×Y For i from 0 to n-1 step by 1 if Yi equal 1 then temp←temp+XX←X×2 Return temp 其中n为二进制数X,Y的位数。
改进的Booth 4算法是一种常见的产生部分积方法。其原理是将乘数Y中相邻三位的二进制数Yi-1YiYi+1进行编码,从而使得部分积个数减少近一半。
改进的Booth 4算法数学表达式如下所示 其中Bj=-2Y2j+1+Y2j+Y2j-1(Y-1=0),n为二进制有符号数X,Y的位数。
图1以8×8b乘法器为例说明改进的Booth 4算法。改进的Booth 4编码一次考虑三位乘数本位,相邻高位,相邻低位,由于每三位之间都重叠一位,因此实际每次编码处理了两位乘数,这样,比不编码的部分积数目降低了近1/2。在对乘数进行编码时,乘数需要再最低位第0位后补充一位,即第-1位Y-1,该位恒为0。图1中的部分积选择由改进的Booth 4编码确定,见表1所示,其中X代表被乘数。表1中两倍的被乘数2X可以通过被乘数X左移1位得到,补码表示的被乘数相反数-X可以通过对被乘数取反加一实现。当部分积选择为正数时,补偿位S为0;当部分积选择为负数时,对被乘数取反,补偿位S为1,从而实现取反加一的操作。
表1改进的Booth 4编码 图2以一个具体实例说明Booth 4算法。乘数为91,二进制表示为01011011;被乘数M为100,二进制表示为01100100。对乘数从低位到高位每三位进行编码,编码规则见表1。例如乘数的第1位,第0位,第~1位为110,根据编码规则,产生部分积为-X。对于-X,由于硬件采用补码表示,可以通过被乘数各位取反然后加一实现。部分积的最高位为符号位,可以直接扩展。又如乘数的第5位,第4位,第3位为011,根据编码规则,产生部分积为2X。在硬件上可以将被乘数左移一位实现。同理产生其他部分积。通过Booth 4编码,产生4个部分积,将这4个部分积相加,即得到乘数91和被乘数100相乘的乘积9100。
改进的Booth 4算法推广到Booth 8算法。Booth 8算法可以将部分积数量减少为原来的1/3。其部分积从{±0X,±1X,±2X,±3X,±4X}中选择。由于3倍的被乘数3X不能通过移位操作得到,需要化成2X+X;其余部分积选择可以通过移位操作得到。改进的Booth 8算法数学表达式如下所示 其中Bj=-4Y3j+2+2Y3j+1+Y3j+Y3j-1(Y-1=0),n为二进制有符号数X,Y的位数。
同样,改进的Booth 8算法可以推广到Booth 64算法。它将部分积数量减少为原来的1/6,但需要预先计算3X、5X……、31X,这显然制约该算法在实际中的应用。本发明解决了高阶Booth算法需要预计算大量奇数倍被乘数的问题,提高了大数乘法器的运算速度。


发明内容
本发明的目的在于提出了一种适用于大数乘法器的二次编码Booth 64线性变换式,并给出了基于该线性变换式的大数乘法器电路实现。该方法能满足高速公共密钥算法体制的大数乘法计算速度要求,提高签名认证的次数。
本发明所述的方法的思路在于,采用二次编码Booth64线性变换式对高阶Booth64编码结果进行再次编码,从而使得需要预计算奇数倍被乘数的数量大为减小,减少了乘法器面积,增大了部分积压缩率,提高了大数乘法器的运算速度。本发明所述的二次编码Booth64线性变换式指的是利用线性变换式B=8a+b对部分积产生的Booth 64算法结果进行二次编码这种转换方式,使得部分积不再从有大量奇数倍的被乘数集合{±0,±1,±2,±3,…,±32}中选取,而是转化成从集合{±0,±1,±2,±3,±4}中选取,从而大大地简化了电路的设计。
本发明所述的系统的思路在于,根据本发明所述二次Booth编码方法所处理乘数位宽大小的不同,采用相应的部分积压缩阵列,采用3级流水线结构,缩小了关键路径延迟,提高了硬件工作频率,实现了一个基于硬件的3段流水线完成大数乘法的硬件系统。本发明所述的大数乘法器架构,将在下文的实施例中给出详细说明。
本发明的特征在于利用线性变换式B=8a+b对部分积产生的Booth 64算法结果进行二次编码,基于二次Booth 64编码的乘法器分为3级流水线结构。第1级结构由一个超前进位加法器预计算3倍的被乘数。在预计算的同时,分别对权为81的aj和权为80的bj进行二次Booth编码;第2级结构由两个相同部分积选择和压缩阵列,分别进行权为81的aj和权为80的bj的部分积阵列进行化简。部分积的压缩采用Wallace树结构。部分积阵列采用4-2计数器和免进位加法器进行部分积的化简;第3级结构将第二级得到的部分积通过加法器进行相加。
1.本发明提到的二次编码Booth 64线性变换式详细说明如下 1.1高阶Booth 64算法 设两个位长为n的补码二进制数X、Y分别表示被乘数和乘数 其中Xi,Yj∈{0,1}。
设乘法结果为Z,则基本乘法运算为 高阶Booth 64编码一次考虑7位乘数。由于每7位之间都重叠一位,因此实际每次编码处理了6位乘数,其数学表达式如下 式(4)假设乘数Y的位宽n为6的倍数,若其位宽不是6的倍数,则在其高位进行符号位补偿,得其位宽补足至6的倍数。
根据式(4),高阶Booth 64算法部分积产生的编码规则为 Bj=-32Y6j+5+16Y6j+4+8Y6j+3+4Y6j+2+2Y6j+1+Y6j+Y6j-1,(5) 则高阶Booth 64算法可以表示为 式(6)表示部分积从集合{±0X,±1X,±2X,±3X,…,±32X}进行选择。在产生部分积前需要预计算被乘数的奇数倍3X,5X,……,31X。部分积个数从n减少为
1.2二次Booth 64编码 由于高阶Booth 64算法需要预计算大量奇数倍被乘数,给硬件实现造成了困难。为了克服这个困难,基于Booth编码基础上,再次进行线性变换编码。即用一个线性表达式B=ka+b来表达高阶Booth 64编码结果,其中k为系数,a、b为变量。
本发明提出的二次Booth 64线性变换式为 B=8a+b.(7) 其中a∈{0,1,2,3,4},b∈{±0,±1,±2,±3,±4},B={±0,±1,±2,±3,…,±32}.根据式(7)可得到二次Booth 64编码,见表2二次Booth 64编码表。
表2二次Booth 64编码表 上表说明高阶Booth 64算法得到的结果{±0,±1,±2,±3,…,±32}完全可以用线性表达式B=8×a+b.来实现。这种转换方式,使得部分积不再从有大量的奇数倍被乘数集合{±0,±1,±2,±3,…,±32}中选取,而是转化成从集合{±0,±1,±2,±3,±4}中选取,从而大大地简化了电路的设计。
现将式(7)代入式(6),进一步化简得 式(8)说明二次Booth 64编码将产生两组部分积压缩阵列。每个压缩阵列的部分积数量为

。由aj产生的部分积需要乘以8后再与由bj产生的部分积进行相加。乘8的运算可以通过左移得到。



本说明书中的附图仅为图示的目的而提供,并不对本发明的内容产生任何限制,其中 图1示出了经典的8×8改进的Booth 4乘法器的结构框图; 图2示出了一个Booth 4算法的具体乘法计算实例示意图; 图3示出了本发明提出的二次Booth 64乘法器的结构框图; 图4示出了本发明提出的二次Booth 64编码器结构框图; 图5示出了经典的CSA计数器结构框图; 图6示出了经典的4-2压缩器结构框图; 图7示出了经典的4-2压缩器链结构框图; 图8示出了本发明所采用的部分积阵列示意图; 图9示出了本发明所采用的部分积压缩Wallace Tree拓扑结构图。

具体实施例方式 本发明的显著特点在于,采用二次编码Booth64线性变换式B=8a+b对高阶Booth64编码结果进行再次编码,从而使得使得部分积不再从有大量的奇数倍被乘数集合{±0,±1,±2,±3,…,±32}中选取,而是转化成从集合{±0,±1,±2,±3,±4}中选取,需要预计算奇数部被乘数的数量大为减小,减少了乘法器面积,增大了部分积压缩率,提高了大数乘法器的运算速度。
本发明的另一特点在于,提出了一种二次编码Booth64编码器结构。Booth编码逻辑包括3部分,分别是高阶Booth编码、二次编码和部分积选择逻辑。利用高阶Booth 64编码结果的相邻位是否相等的信息,根据线性变换式B=8a+b,进行二次编码,简化了二次Booth 64编码器的硬件逻辑复杂度。
本发明的第三个特点在于,采用了三段流水线结构乘法器,该结构符合本发明所提二次编码Booth64线性变化式方法中先编码,后压缩,再合并三步骤要求,合理分配了计算任务,缩短了关键路径延迟。
本发明的第四个特点在于提出了一种数字电路系统,该系统实现了本发明所提出的二次编码的Booth 64线性变换式方法。该系统减小预计算奇数倍被乘数的个数,快速的大数乘法。
下面将根据附图对本发明的具体实施方式
进行详细说明。
2.本发明基于二次编码Booth 64线性变换式设计的大数乘法器结构如下 2.1电路结构 图3给出了基于二次Booth 64编码的乘法器流水线实现结构。
1)在第一级结构中,用一个超前进位加法器预计算3倍的被乘数。加法器的输入分别是被乘数X和被乘数的两倍2X。2X在硬件实现上可以通过左移一位实现。在预计算的同时,分别对权为81的aj和权为80的bj进行二次Booth编码。编码器和部分积选择器逻辑在2.2介绍。
2)在第二级结构中,存在两个相同部分积选择和压缩阵列,分别进行权为81的aj和权为80的bj的部分积化简。部分积从集合{±0X,±1X,±2X,±3X,4X}选择。部分积数目的压缩采用Wallace树结构。部分积阵列采用4-2计数器和免进位加法器(CSA-carry save adder)进行部分积的化简,直至得到两个部分积(Sum与Carry)。那么,两个部分积选择和压缩阵列共产生4个部分积Sum_a、Carry_a、Sum_b、Carry_b。
3)在第三级结构中,将第二级得到的4个部分积相加。依据式(7),权为81的aj产生的2个部分积Sum_a、Carry_a首先需要通过移位产生8_Sum_a、8_Carry_a。这样得到的4个部分积8_Sum_a、8_Carry_a、Sum_b、Carry_b再通过一个4∶2部分积压缩电路得到最终的两个部分积Sum、Carry。
2.2二次Booth编码器设计 如图4所示,Booth编码逻辑包括3部分,分别是高阶Booth编码、二次编码和部分积选择逻辑。
1)高阶Booth编码 高阶Booth 64编码取每7位相邻的乘数Y6Y5Y4Y3Y2Y1Y0为一组作为输入,其编码规则见式(5)。由于 其中B为乘数Y6Y5Y4Y3Y2Y1Y0的高阶Booth 64编码结果,

为Y的反码。因此当Y6Y5Y4Y3Y2Y1Y0的编码结果为B时,将Y6Y5Y4Y3Y2Y1Y0各位取反,则

的编码结果为-B。利用该特点,编码器逻辑I通过异或门得到Y6Y5Y4Y3Y2Y1Y0相邻两位是否相等的输出信号E5E4E3E2E1E0,当Yi+1等于Yi时,Ei为0;当Yi+1不等于Yi时,Ei为1;其中i=0,1,2,3,4,5。编码器逻辑II通过E5E4E3E2E1E0和高阶Booth编码规则公式(5)得到输出信号B和polarity。其中信号sel_B位宽为33位,信号B中有且只有一个比特为高电平,其余比特为低电平。信号sel_B中高电平的比特sel_B[j]表示高阶Booth编码结果B的绝对值|B|等于j。信号polarity表示高阶Booth编码结果B的正负极性。
2)二次编码 二次编码逻辑根据表2的二次Booth 64编码表映射生成。其输入为高阶Booth 64编码信号sel_B、polarity。输出信号sel_a、sel_b位宽均为5位。信号sel_a、sel_b中有且只有一个比特为高电平,其余比特为低电平。信号sel_a、sel_b中高电平比特sel_a[i]、sel_a[j]为高电平,表明二次编码线性变换式(7)中的a、b二次编码结果分别为i、j。
3)部分积选择 部分积选择逻辑是多路选择器。根据选择信号sel_a、sel_b产生部分积。当sel_a[i]为高电平时,多路选择器选择被乘数的i倍输出。例如当sel_a[3]为高电平时,多路选择器选择3倍被乘数3X输出。sel_b的多路选择器逻辑和sel_a的相同。在乘法器结构中,由

个二次Booth 64编码器生成两组部分积压缩阵列。
2.3部分积压缩阵列设计 部分积位数很大时,进位传播相加相当慢,因为需要很长的线从低位向高位传播进位。最重要提高乘法器速度的方法是运用进位节省加法器(由Wallace发明,又叫全加器或3-2计数器),将三个或更多的数以冗余和形式表示,不用进位相加。
这个方法在图5表示,PP1+PP2+PP3=result2+result1。压缩的延迟为一个加法器的延迟,不受部分积位数的限制。应用最基本的三输入加法器,用递归的方法布局,任何部分积可以相加并且减少到最后2个,而没有使用进位传播加法器。一个单独的进位传播加法器只需要在最后将2个部分积化为最终结果。这个普遍的方法可以应用于树形或者线性以改进性能。
Wallace描述的树形结构的缺点是不规则的互连线以及难以进行版面设计。一个更加规则的树形结构基于二进制树形结构。二进制树形结构由一系列4-2计数器组成。即输入4个数相加得到2位结果。部分积相加所需比例正比于log N。这样的树形结构更加规则。4-2压缩器内部逻辑如图6所示,由4-2压缩器组成4-2压缩器链,如图7所示 令Cin=0,则输入输出关系为I3+I2+I1+I0=2Cout+2C+S。
本发明的大数乘法器,是570*570位大数乘法器。在第一级Booth编码后,在第二级流水线上将通过部分积选择器产生部分积。由于采用二次编码Booth64线性变化式,将产生570/6=95个部分积。其部分积阵列如图8所示。
由于部分积的范围是{±0,±X,±2X,±3X,±4X},因此部分积位数将从570位上升为572位。根据二次编码Booth64线性变化式将乘数每7位一组编码,相邻编组有一位重合,因此相邻的部分积权重相差6。由于部分积有正负极性,因此在每个部分积最低位下会有一个进位信息Carry。因此考虑进位信息后,部分积阵列实际上有96行,其中部分积的进位信息与下一个部分积合并。
采用Wallace Tree结构,结合使用CSA和4∶2压缩器,将96行部分积最终化为2个部分积。其拓扑结构示意图如图9所示。
从Wallace Tree的拓扑结构可以看出,整个部分积相加网络需要5级4∶2压缩器和一级CSA。根据上两节对4∶2压缩器和CSA的延迟分析,可以推断整个部分积相加网络需要的延迟为5*3+2=17个异或门延迟。
本设计用Verilog进行行为级、RTL级编码和功能仿真,验证系统功能的正确性。基于SMIC0.18微米工艺库完成逻辑综合(DC),并提取门延时信息,进行门级仿真验证,确保功能正确性和时序上的准确性。最终,570×570大数乘法器关键路径时延5.8ns,面积约29.5mm2。
权利要求
1.基于二次Booth编码的大数乘法器,其特征在于,该基于二次Booth编码的大数乘法器对高阶Booth64算法结果进行二次编码
1.1高阶Booth 64算法
设两个位长为n的补码二进制数X、Y分别表示被乘数和乘数
其中Xi,Yj∈{0,1};
设乘法结果为Z,则基本乘法运算为
高阶Booth 64编码一次考虑7位乘数,由于每7位之间都重叠一位,因此实际每次编码处理了6位乘数,其数学表达式如下
式(4)假设乘数Y的位宽n为6的倍数,若其位宽不是6的倍数,则在其高位进行符号位补偿,使得其位宽补足至6的倍数;
根据式(3),高阶Booth 64算法部分积产生的编码规则为
Bj=-32Y6j5+16Y6j+4+8Y6j+3+4Y6j+2+2Y6j+1+Y6j+Y6j-1 (4)
则高阶Booth 64算法可以表示为
式(5)表示部分积从集合{±0X,±1X,±2X,±3X,…,±32X}进行选择,在产生部分积前需要预计算3X,5X,……,31X;部分积个数从n减少为
1.2二次Booth 64编码
由于高阶Booth 64算法需要预计算大量奇数倍被乘数,给硬件实现造成了困难;为了克服这个困难,基于Booth编码基础上,再次进行线性变换编码,即用一个线性表达式B=ka+b来表达高阶Booth 64编码的结果,其中k为系数,a、b为变量;
二次Booth 64线性变换式为
B=8a+b.(6)
其中a,b∈{±0,±1,±2,±3,±4},B={±0,±1,±2,±3,…,±32}.
根据式(6)可得到二次Booth 64编码,见表1,
表1二次Booth 64编码表
这种转换方式,使得部分积不再从有大量的奇数倍被乘数集合{±0,±1,±2,±3,…,±32}中选取,而是转化成从集合{±0,±1,±2,±3,±4}中选取,从而大大地简化了电路的设计。
2.基于二次Booth编码的大数乘法器,其特征在于,在一块数字集成电路芯片内采用下述三级流水线的并行结构实现
1)在第一级结构中,用一个超前进位加法器预计算3倍的被乘数,在预计算的同时,分别对权为81的aj和权为80的bj进行二次Booth编码;
2)在第二级结构中,存在两个相同部分积选择和压缩阵列,分别进行权为81的aj和权为80的bj的部分积化简,部分积从集合{±0X,±1X,±2X,±3X,4X}选择,部分积数目的压缩采用Wallace树结构,部分积阵列采用4-2计数器和免进位加法器(CSA-carry save adder)进行部分积的化简,直至得到两个部分积(Sum与Carry),那么,两个部分积选择和压缩阵列共产生4个部分积;
3)在第三级结构中,将第二级得到的4个部分积相加;依据式(6),权为81的aj产生的2个部分积Sum、Carry首先需要通过移位产生8_Sum、8_Carry;这样得到的4个部分积再通过一个4∶2部分积压缩电路得到最终的两个部分积Sum、Carry。
全文摘要
基于二次Booth编码的大数乘法器,属于公开密钥密码体制算法的集成电路设计技术领域。本发明利用线性变换式B=8a+b对部分积产生的Booth 64算法结果进行二次编码,基于二次Booth 64编码的乘法器分为3级流水线结构。第1级结构由一个超前进位加法器预计算3倍的被乘数。在预计算的同时,分别对权为81的aj和权为80的bj进行二次Booth编码;第2级结构由两个相同部分积选择和压缩阵列,分别进aj和bj的的部分积化简。第3级结构将第二级得到的部分积通过加法器进行相加。本发明提高了乘法运算的速度,可用于高性能的RSA、ECC芯片的实现,适用于服务器上大型PKI系统的应用。
文档编号G06F7/533GK101122850SQ20071012208
公开日2008年2月13日 申请日期2007年9月21日 优先权日2007年9月21日
发明者李树国, 颜晓东 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1