基于CISC微处理器的32位整数乘法器转让专利

申请号 : CN200810175922.0

文献号 : CN100595729C

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 高德远王党辉王得利樊晓桠张盛兵黄小平魏廷存张萌

申请人 : 西北工业大学

摘要 :

本发明公开了一种三十二位整数乘法器,属于计算机微处理器设计领域。它包括4-2压缩器,其特点是所述的4-2压缩器是三级4-2压缩器阵列,显示该乘法器可以完成有符号或者是无符号32位乘法运算,将被乘数经过符号扩展之后,使用基于4的布斯编码,通过被乘数寄存器生成16个部分积;采用三级流水,分批次返回计算结果,第二拍返回结果的低32位部分,第三拍返回结果的高32位部分,结果总线32位;由三条微指令或者两条微指令控制完成一次乘法运算。由于采用三级4-2压缩器阵列设计,使用微指令来控制,满足不同时机的各种乘法操作;对有符号无符号32位操作数基4的布斯编码部分积的生成从17个简化为16个,简化了乘法器的结构,降低了乘法延时。

权利要求 :

1、一种三十二位整数乘法器,包括4-2压缩器,其特征在于:所述的4-2压缩器是三级 4-2压缩器阵列,显示该乘法器可以完成有符号或者是无符号32位乘法运算,将被乘数经过 符号扩展之后,使用基于4的布斯编码,通过被乘数寄存器生成16个部分积;

该乘法器采用三级流水,分批次返回计算结果,第二拍返回结果的低32位部分,第三拍 返回结果的高32位部分,结果总线32位;

该乘法器由三条微指令或者两条微指令控制完成一次乘法运算。

说明书 :

技术领域

本发明涉及一种基于CISC微处理器的32位整数乘法器。

背景技术

参照图6。Intel的X86指令中存在两种乘法指令,有符号乘和无符号乘。因此参与运算 的乘数和被乘数最高位可能为符号位也可能为非符号位,为提高利用率,基于Intel的CISC (Complex InStruction Computer复杂指令集微处理器)乘法器常采用有符号无符号混合型乘 法器。因此参与运算的两个数均以补码形式出现。
设两个以补码表示的乘数A与被乘数B作乘法运算,乘数A位宽为N,即A[N-1:0], 并设N为偶数,则乘数A可以表示为:
A=-AN-1×2N-1+AN-2×2N-2+…A1×21+A0×20
=(-AN-1+AN-2)×2N-1+(-AN-2+AN-3)×2N-2+…+(-A2+A1)×22+(A1+A0)×21+(A0+0)×2 =(-2AN-1+AN-2+AN-3)×2N-2(-2AN-3+AN-4+AN-5)×2N-4+·+(2A3+A2+A1)×22+(-2A1+A0+0)×2
于是A与B相乘即可表示为
A × B = ( Σ i = 0 , A - 1 = 0 N 2 - 1 ( - 2 A 2 i + 1 + A 2 i + A 2 i - 1 ) × 2 2 i ) × B
= Σ i = 0 , A - 1 = 0 N 2 - 1 ( ( - 2 A 2 i + 1 + A 2 i + A 2 i - 1 ) × B ) × 2 2 i
对于(-2A2i+1+A2i+A2j-1)×B部分,可以采用预处理方法,将其转换为简单的几个数相加。被 乘数经过预处理后得到四个有效结果,分别是被乘数本身、被乘数的两倍、被乘数的取反加1、被 乘数两倍后取后再加1。可以依据A2i+1,A2i,A2i-1的值从下表中选取对被乘数的处理,其中的2B指的 是将被乘数直接左移一位,-B指将被乘数取反,而-2B是将被乘数左移一位后再取反。在对B乘以 一个负值的时候,对B先乘相应的倍数后,还要取反再加1。E表示的就是这一数值。
  A2i+1   A2i   A2i-1   对B的操作   Ei   0   0   0   0·B   0   0   0   1   +1·B   0   0   1   0   +1·B   0   0   1   1   +2·B   0   1   0   0   -2·B   +1   1   0   1   -1·B   +1   1   1   0   -1·B   +1   1   1   1   0·B   0
以上即是基4布斯(布斯)算法的原理。其中任何一项((-2A2i+1+A2i+A2i-1)×B×22i)即 为生成的一个部分积,从推导过程来看,对于位宽为偶数位N的两个乘数相乘,将生成N/2 个部分积。
目前32位有符号无符号混合型乘法器的一般作法是:先进行符号扩展,扩展成两个33 位的补码操作数,因为布斯算法要求位宽为偶数,所以要求进行两位符号扩展,再使用基4 布斯算法生成17个部分积,然后采用压缩器比如4-2压缩器进行部分积求和,得到两个运算 结果。采用4-2压缩器时,需要[log4k]级4-2压缩器才能得到最终的两个值,其中k指的是 部分积的个数,而方扩号指的是满足大于或等于log4k的最小的整数。因而17个部分积就需 要4级4-2压缩。这两个运算结果再进行加法运算,最终得到64位运算值。这种方法设计的 乘法器结构图如图6。
按这种方法设计的乘法器有几个缺点:1,基4布斯运算要求参与运算的乘数为偶数宽度, 所以将32位扩展成34个后,生成的部分积达到17个,这在后面进行4-2压缩时造成许多4-2 压缩器运算项不完整,面积有很大的浪费,因为是四级4-2压缩,运算时间也会过长。2,最 终一次生成64位结果,这样在写回寄存器时,要求结果公共总线为64位。但绝大多数X86 指令一次运算的结果最多为32位,单为乘法运算而将总线位宽扩展1倍并不值得。并且如果 一次同时写回64位结果,会加重寄存器文件、指令分派追踪等部件的负担,比如会导致要求 寄存器文件支持多端口写,数据相关链表项的增加,以及寄存器旁路逻辑的复杂化。3,同时 不同的X86乘法指令对于结果的要求也不一样,IMUL r/m32类指令要求乘法的64位结果分 高32位和低32位写回两个不同的寄存器,而IMUL r32,r/m32类指令要求乘法的64位结果 低32位写回某个寄存器,而高32位结果舍弃。因此,乘法器的运算过程应该按照指令的不 同,适时的结束乘法操作,并返回正确的结果。而一般方法所设计的微处理器在这方面适应 性较差。

发明内容

为了克服现有技术的上述不足,本发明提供一种基于CISC微处理器的32位整数乘法 器,该乘法器时间周期少、面积小、结果相关不复杂、复用率高。
本发明解决其技术问题所采用的技术方案:一种基于CISC微处理器的32位整数乘法 器,包括4-2压缩器,其特点是所述的4-2压缩器是三级4-2压缩器阵列,显示该乘法器可以 完成有符号或者是无符号32位乘法运算,将被乘数经过符号扩展之后,使用基于4的布斯编 码,通过被乘数寄存器生成16个部分积;
该乘法器采用三级流水,分批次返回计算结果,第二拍返回结果的低32位部分,第三拍 返回结果的高32位部分,结果总线32位;
该乘法器由三条微指令或者两条微指令控制完成一次乘法运算。
本发明的有益效果是:由于该乘法器从系统级观点来综合考虑,避免单一从功能上着手 的执行单元设计而造成的与体系结构不匹配的弊端。所设计的乘法器对系结构寄存器保留站 及标签判断、公共结果总线位宽等压力较小。确定微指令后,采用最佳的三级流水线来满足 不同时机需求的各种乘法操作。同时对扩充符号位的有符号无符号32位操作数基4的布斯编 码部分积的生成从17个简化为16个,不仅减少了乘法器的结构,也有效的降低了乘法延时。 最终所设计的乘法器结构紧凑,面积也较现有技术乘法器小,结果相关不复杂、复用率高。 下面结合附图和实施例对本发明作详细说明。

附图说明

图1是本发明基于CISC微处理器的32位整数乘法器结构图。
图2是图1中16个部分积生成器生成的部分积原始形式示意图。
图3是图1中16个部分积生成器生成的部分积符号简化形式示意图。
图4是图1中4-2压缩器结构图。
图5是图1中4-2压缩器阵列图。
图6是背景技术乘法器结构图。

具体实施方式

参照图1~5。考虑Intel指令特性,其一般格式为OPcode A B,两个源操作数A和B操 作,最后结果仍然置于A中,也就是说,A既作其中一个源地址,又作为目的地址,因而, 为了尽量保持形式上的统一,CISC类型微处理器微指令也通常采用同样的格式:microcode A B。比如一个加法微操作,A和B相加,结果最终写回A。为了资源的充分利用,乘法器应 该可以同时完成有符号乘和无符号乘运算。对于微指令,它应该最少包含一个有符号乘mul, 以及无符号乘imul。对于单操作数的指令,可以在微指令中,将其隐含的操作数EAX在微指 令指明。但是由于其运算结果为64位,需要写回两个不同的32位寄存器中,在判断写回寄 存器时只依据目的寄存器编号,只能写回其中一部分结果。除非寄存器变成双端口写,并且 写回时对当前的操作再作译码,通常采用的逻辑为:if(microcode==mul),then EAX← Mul_result[31:0],EDX←Mul_result[63:32].这样会造成写回寄存器时逻辑的不规整,加重写回 逻辑负担。对于有符号乘法的单操作数指令形式也可以采用相同的处理方法。但是对于有符 号的双操作数以及三操作数这样处理是不可行的。因为它们的结果只取低32位,而对高32 位结果舍弃。这样如果要求一次写回全部结果,仅有两条微指令mul和imul还是不足,最少 应该加上一条imult微指令,以便解决运算结果仅取低32位的情况。
典型的微处理器采用的流水线结构,主要阶段有取指、译码、取数、执行并写回。指令 执行时出现的数据相关而引起的流水线阻塞会极大的影响流水线性能的发挥。按序执行流水 线中会出现写后读数据相关。有些32位乘法运行一次产生两个32位结果,如果一次写回这 两个结果,对旁路的设计时也同样要求对微指令译码,下一条微指令中的两个操作数都要和 EDX以及EAX作比较以确定是否存在数据相关。进一步考虑,如果采用寄存器重命名技术 来支持乱序执行,会引起体系结构寄存器保留站及标签判断复杂,公共结果总线位宽增加而 利用率降低,这些都会增大对时序的压力。因而需要考虑分时写回两次结果,一次写回一个 结果时比一次写回回两个结果对寄存器写回及旁路的逻辑简单许多。
从上面分析得知,写回寄存器时应该避免一次写回两个。这就要求在乘法器设计中,应 该尽量将结果分两次写回,也就是说最少应该两拍完成一个乘法指令。但是由于存在IMUL A B C这种类型的乘法指令,B和C相乘结果不是写回B而是放置于A中,这样在第一拍中, 必须指明参与运算的两个操作数B和C,而microcode A B类微指令只有两个操作数域,无法 指明在这一拍要写回的目的地址A。所以微指令应该至少再加上一拍,这一拍用来指明参与 运算的两个操作数,从而最少三拍来完成一条乘法指令。这样微指令的内容也就基本上确定 了,第一拍读入两个操作数,第二拍可以写回低32位结果,第三拍写回高32位结果。在硬 件中对应于160。此外,在别的复杂指令中也会用到乘法微操作,经过统计其形式为mulA,B, 也就是A和B相乘结果置于A中,且只需要低32位的结果,即只需要两条微指令,因而一 个乘法操作应该具有一定的弹性,以满足不同的乘法结果需求的时机,如果用状态机来控制 乘法执行的阶段就不大适合。所以仅使用微指令来控制乘法的不同阶段,这就要求易于区分 是第几拍指令。结合微指令格式,有一个写回位wb(write back),在流水线第一个节拍写回位 为0,表明不写回任何结果。第二拍和第三拍要写回结果,写回位wb应该为1。联想到乘法 指令结束之后还需要更新标志寄存器,可以使用更新标志寄存器位flag,在第二拍使flag为0, 第三拍为1就区分了这两个执行阶段。同时,采用这种方法只需要在对应的操作数域内填入 正确的寄存器编号,就可以只用两个微操作码MUL和IMUL来表示所有类型的乘法指令, 避免了增加微指令的位宽的可能性。
这样一条乘法运算所对应的微指令如下,以MUL EBX为例:
mul EAX,EBX no wb  no flag
mul EAX,EBX wb     no flag
mul EDX,EBX wb     flag
经过上面分析,可以得知,采用三拍来完成一个32位乘法操作最合适。对于有符号的两 个源操作数按符号位也扩展成33位,这样就统一为两个33位的有符号乘法相乘。用基4布 斯编码来控制生成部分积,然后用4-2压缩器组成的树形结构来实现部分积的求和。最终产 生的两个结果用加法器来求和。
对布斯编码来说,有一个前提条件,就是乘数A的位宽为偶数,但是由于将有符号乘和 无符号乘统一以后,按符号扩展乘数A的位宽是33,这就需要将A再扩展一位,也就是变 为34位。得到的部分积有17个,而乘法器在得到部分积以后,会使用4-2压缩器来加快求 和速度,这就要求尽量使得部分积为4的倍数。因此需要将部分积减少到16个。对布斯编码 进行分析,如果将乘数A扩展为34位宽,则对于IMUL来说,A33,A32,A31只有两种可能: 全是0或者全是1。对照前表,可发现,这两种情况的部分积都是0。而对MUL来说, A33,A32,A31也只有两种可能:000或者是001,对照前表,可发现在000时部分积也为0, 只有001的时候,部分积为被乘数,又因为这个时候i=16,也就是说这一部分积只对最终乘法 结果的高32位有影响。考虑到前面提到的要在第二拍写回低32位结果,而在第三拍写回高 32位结果,因而可以将这一部分在最后一拍时才加到最终结果的高32位上,这样得以保证 只产生16个部分积,减少4-2压缩器的数量,也可以缓和前两拍的时序压力。同时符号扩展 也需要一位即可。这样,可以将64位加法器拆分成为两个32位的乘法器,高32位乘法器可 以分时复用。符号扩展对应110,部分积生成对应120。高低32位加法对应140和150。
每个部分积因为都要对应Ei,直接在该部分积上加时,会造成计算的不方便,可将该值 添到下一个部分积的尾端。图2所示的是经过布斯编码以后得到的部分积。其中Si是部分积 的符号扩展,如果部分积为正,则Si为1,否则为0。
根据变换:
其中, S ^ S = 1
简化后,可以有效降低功耗和面积。
在生成16个部分积以后,需要将这16个部分积全部求和,较快的结构采用多个4-2压 缩器并行求和。4-2压缩器的结构规整,利用VLSI实现。4-2压缩器的如图5所示,其中L1、 L2、L3、L4是四个输入位,CIN是上一位的进位,输出S是运算结果,COUT是给下一位的 输入进位,CARRY是压缩器的第二个输出。在图5中,COUT在输入位有效后经过两级门延 迟后生成,而计算也是在两级门延时以后才需要CIN,因此多组四个加数可以同时进行加法 运算。每四个部分积需要用多组4-2压缩器来得到两组输出,经过第一级4-2压缩之后,可 以得到8组输出,再经过一级后,得到4组输出,经过第三级压缩后,得到两组输出。
由于三拍要完成两个32位操作数的乘法操作,因此要合理分配三个不同周期完成的逻辑 功能,但是有一个前提是要在第二拍能完成低32位的运算,第三拍完成高32位的运算。由 于主要的时延是低位向高位的进位,因而低32位的计算结果是一定会比高32位提前完成。 其中一种方法可以为:将第一级寄存器置于第二级4-2压缩器之后,并将第二级寄存器置于 将第三级4-2压缩产生的两组输出用选择进位加法器相加之后。这样,在乘法的第一个周期, 需要完成符号扩展,部分积的生成以及前两级4-2压缩,而第二个节拍完成第三级4-2压缩 并产生64位乘法结果,第三个节拍判断是否要在高32位上加被乘数以得到最终乘法结果, 并根据乘法结果设置相应的标志位。其中在每一级逻辑结构前加一个使能信号,三级使能信 号是由微操作码以及flag和wb位共同决定,用以决定是否运行该级操作并是否要将中间结 果打入寄存器中。