《电子技术应用》
您所在的位置:首页 > 模拟设计 > 业界动态 > 基于改进波兹编码的符号位快速处理算法

基于改进波兹编码的符号位快速处理算法

2008-05-19
作者:丁 俊, 赵 峰

  摘 要: 基于改进波兹编码的乘法器" title="乘法器">乘法器设计中,在处理部分积累加时, 为了提高速度、减小面积,可以单独对符号位扩展部分进行优化处理。本文就符号位扩展运算提出了一种使用‘或’-‘异或’处理的快速算法。该方法有效地减少了门的使用数量,提高了处理速度。
  关键词: 乘法器 改进波兹算法" title="改进波兹算法">改进波兹算法 部分积 符号位扩展阵列


  设计快速乘法器,通常要重点处理三个关键问题:减少部分积产生、加速部分积累加和提高最终多位数相加速度。例如,用传统的乘法运算模式处理16位×16位所用的时间为t=t产生16行部分积+t16行部分积累加成最终积。若运用改进波兹(Booth)算法以后,可以减少部分积的产生。而基于改进波兹算法的乘法器设计,在后续部分积相加的过程中,无论采用哪种处理方式,如华莱氏树结构等,都不可避免地要解决符号位扩展阵列问题。本文提出了一种新的基于改进波兹算法的逻辑设计" title="逻辑设计">逻辑设计来处理符号位部分:通过简单地运用‘或门’、‘异或门’来优化乘法器的局部速度和面积两方面的性能。
1 改进波兹算法
  改进波兹算法MBA(Modified Booth′s Algorithm)[1]是建立在波兹算法[2]基础上的。对乘数三位一组的划分包含了一个重叠位,每一组的三位按表1编码,并形成一个部分积。由此而产生5个系数:±1、±2、0。在部分积的累加过程中,减法也就是补码相加。经过编码以后,通过高低电平信号对符号位进行指示。n位乘数乘以m位被乘数会产生n+m位积。因此累加过程中由于对负数补码的相加,每个部分积必须把符号位扩展到最高位(第n+m-1位),以此来保证后续运算的正确性。若以8位X×8位Y为例,产生的部分积阵列如图1所示。由于部分积含有±2X,因此其字长为9位,即A0~A8,第10位A9为符号位。在做减法补码运算时,其符号位应扩充至最高位(第15位),再加上相应每组最高位,即y1。B、C、D、E也按此规律产生。8位×8位最终产生16位积。

 


  观察图1可以发现在部分积阵列中,有相当大的一部分是符号位扩展阵列,并且随着两个相乘数的位数成倍地增加,符号位扩展阵列也不断扩大,因此考虑对这个特殊阵列的处理就相当有价值。
2 ‘或’-‘异或’快速算法处理符号位部分
  对符号位扩展阵列单独处理,逻辑设计则按照下面顺序来进行:
  (1)若乘数有偶数个位即2k(k=1,2……n),那么就会产生k+1行部分积。在部分积中,有k行符号扩展位,符号扩展位阵列的最大宽度为2k-1个位;若乘数有奇数个位,即2k+1(k=0,1,2......n),那么就会产生k+1行部分积。在部分积中,有k行符号扩展位,符号扩展位阵列的最大宽度为2k个位。
  (2) 若编码结果为负数,那么产生该行的所有符号位都是1,否则都为0。
  (3) 除了第0列,对符号位扩展阵列每一列进行奇偶划分,即第1、3、5……为奇数列,第2、4、6……为偶数列。
  (4) 符号位扩展阵列和的偶数位与该列上(从上至下)最后一位相关联。该阵列和的奇数位等于该列上所涉及位的‘或’运算,偶数位等于与该位相关联的那位与低一位的奇数列的和位的‘异或’运算,第0位等于第0行的编码产生的符号信号。
  以8位×8位的例子来说明:r0~r6是符号位阵列累加的和位,s0~s3表示阵列第0行到第3行,如图2所示。


  当乘数有奇数个位时,符号位扩展阵列排布如图4所示。


  求证方法类似于偶数位乘数,得到的结论为:
  r2i-1=sign[i-1]|…|sign[1]|sign[0],r2i-2=sign[i-1]^r2i-3
4 算法实现
  实现这一设计很容易:根据设计规则,r3、r5……r2i-1
  位全部由‘或门’来实现,r2、r4、r6……r2i-2位全部由‘异或门’来实现,r0、r1用编码产生的符号指示信号表示。把8位×8位的例子用‘或门’和‘异或门’实现如图5所示,图中用了2个‘或门’和3个‘异或门’。


5 性能评估
  该设计方案的性能评价从如下两方面考虑:
  (1)从速度和面积两方面性能考虑,符号位扩展阵列作为一个模块单独设计。
  首先,把原本符号位之间的累加转换成用‘或’-‘异或’进行处理,既大大降低了门的使用数量,从而减小了该硬件乘法器模块所占的面积,也避免了累加过程中的进位等待问题而提高了速度。如果不对符号位扩展阵列单独处理,而是在后续处理的过程中选择特殊压缩器来进一步解决累加的速度问题,其面积上的增加是显而易见的。
  (2)考虑该设计结果对后续部分积处理的影响。
  因为通过符号位扩展阵列的特性可以知道,和的位数就是以第0行部分积中的符号扩展位的位数,不产生多余的累加行。因此阵列最终产生一行和位,与现在所知的其他处理方法相比,没有多余的位与除去符号位扩展阵列的部分积进行相加。并且该行和位也不作为额外的累加行介入部分积累加。在相关文献中,对符号位扩展阵列处理有使用预求和并加上修正位的方法:先假设所有n位×n位符号位扩展阵列中每个位都是1,预算出最后的和,然后根据符号指示信号对相应行加1,并将这个1作为符号修正位[3]。也有根据等式,对符号扩展部分做相应恒等变形处理的方法[4]。这些方法除了产生与符号位扩展阵列宽度相同的一行位以外,还有额外的位要累加到部分积上。以8位×8位乘法用三种" title="三种">三种不同方案处理符号位部分所得部分积如图6所示。图中r0~r6作为符号位阵列累加的和位,作为符号修正位。

 


  把符号位扩展阵列的结果嵌入到后续部分积累加过程中,可以发现运用‘或’-‘异或’处理符号位扩展阵列的方案与另外两个方案相比,所用的加法单元少,在乘法器设计中尽可能地减少了部分积累加延迟。图6三种方案的比较结果如表4所示。由此可以得出:运用‘或门’和‘异或门’处理符号位部分对后续处理的意义很大(由于后续处理有不同的方式,不同的设计可能对使用的门数产生略微的变化),并且这种设计方案具有良好的通用性。随着两个相乘位数的递增,运用‘或’-‘异或’处理符号位扩展阵列的方法同样适用,并且能很快地产生结果。
  乘法运算在数字信号处理中是个瓶颈,通过不断改进算法和结构的设计来提高乘法器的运算速度" title="运算速度">运算速度,并同时兼顾面积和功耗问题,变得越来越重要。随着运算位的成倍增加:从16×16到32×32,再到64×64,若设计中使用了改进波兹算法,其符号位扩展阵列也可成倍地递增,因此,研究其算法和结构设计很重要。本文提出使用‘或’-‘异或’逻辑来解决符号位部分的设计方案,符合设计目标,在降低面积和提高运算速度方面有显著的优势。
参考文献
1 MacSorely O L. High speed arithmetic in binary computers. Proc IRE, 1961;(49):67~91
2 Booth A D. A signed binary multiplication technique.Mech- anics and Applied Mathematics Quarterly J, 1951;4(2): 236~240
3 应 征, 吴 金. 高速浮点乘法器设计. 电路与系统学报, 2005;(10):6~11
4 郑 伟, 姚庆栋, 张 明等. 一种高性能、低功耗乘法器的设计. 浙江大学学报(工学版), 2004;(38):534~538

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。