一种Booth乘法器及其运算方法与流程

文档序号:24735232发布日期:2021-04-20 19:28阅读:619来源:国知局
一种Booth乘法器及其运算方法与流程
一种booth乘法器及其运算方法
技术领域
1.本发明涉及乘法器运算领域,特别是涉及一种booth乘法器及其运算方法。


背景技术:

2.乘法器是一种完成两个互不相关的模拟信号相乘作用的电子器件,它作为乘法、除法、乘方和开方等模拟运算的主要基本单元,广泛用于电子通信系统作为调制、解调、混频、鉴相和自动增益控制,另外还可用于滤波、波形形成和频率控制等场合,是一种用途广泛的功能电路。近年来,处理海量数据需要越来越多的乘法运算,基于booth编码的乘法器是最常用的乘法器之一。在现有的booth乘法器中,大多在高位部分积压缩的过程中仍需精确压缩,因此由于进位的问题,部分积的求和运算占主要资源和功耗,同时也限制了电路的关键路径,从而使得乘法运算速度减慢,性能降低,功耗升高。因此,当下亟需一种运算速度快、高性能、低功耗的新型的booth乘法器。


技术实现要素:

3.本发明的目的是提供一种booth乘法器及其运算方法,解决现有的booth 乘法器普遍存在的运算速度慢、性能低、功耗高的问题,有效增强booth乘法器的性能,并显著降低功耗。
4.为实现上述目的,本发明提供了如下方案:
5.一种booth乘法器,包括:
6.初步译码模块,连接数据输入设备,用于对输入的乘数和被乘数进行初步译码,得到部分积,并对所述部分积进行正负标记,得到正负标志信号;
7.修正译码模块,连接所述初步译码模块,用于根据正负标志信号对所述部分积进行分类处理,再根据分类结果,对所述部分积进行修正译码处理,得到修正部分积;
[0008]4‑
2压缩单元,连接所述修正译码模块,用于对所述修正部分积进行两级 4

2压缩处理,得到压缩部分积;
[0009]
32位超前进位加法器,连接所述4

2压缩单元,用于计算所述压缩部分积的和值,所述和值为最终的乘积结果;
[0010]
信号控制模块,分别连接所述修正译码模块、所述4

2压缩单元和所述32 位超前进位加法器,用于根据正负标志信号,确定取补操作中所需“加1”的个数,并向所述4

2压缩单元和所述32位超前进位加法器发送控制信号,控制所述4

2压缩单元和所述32位超前进位加法器执行相应的取补操作;所述取补操作包括按位取反操作和“加1”操作。
[0011]
可选的,所述初步译码模块对输入的乘数和被乘数进行初步译码,得到部分积,并对所述部分积进行正负标记,得到正负标志信号,具体包括:
[0012]
对16位乘数的低8位和高8位同时进行基于radix

4的booth初步译码,输出8个初步32位部分积,定义低8位输出的部分积为i0~i3,高8位输出的部分积为i4~i7;
[0013]
设被乘数为a,则初次译码后得到的所述部分积有0,a,2a三种情况,对每个所述部
分积进行正负标记,输出正负标志信号sign
n
,n为0~7的整数,正负标志信号sign0~sign7与所述部分积i0~i7相对应;
[0014]
当所述部分积是正数时,则所述初步译码模块输出所述部分积的原值,同时正负标志信号sign
n
输出低电平“0”;
[0015]
当所述部分积是负数时,则所述初步译码模块输出所述部分积的绝对值,同时正负标志信号sign
n
输出高电平“1”。
[0016]
可选的,所述修正译码模块根据正负标志信号对所述部分积进行分类处理,再根据分类结果,对所述部分积进行修正译码处理,得到修正部分积,具体包括:
[0017]
当所述部分积i0~i7都为正时,则将所述部分积作为修正部分积直接输出给所述4

2压缩单元;
[0018]
当所述部分积i0~i7都为负时,计算所述部分积i0~i7的绝对值的乘积,然后对乘积进行取补操作;
[0019]
当所述部分积i1~i3中至少有一个为正时,将负部分积按位取反,同时利用正负标志信号sign1~sign3计算负部分积的个数,负部分积的个数即为需要“加1”的个数,将需要“加1”的个数这一数值转化为二进制数,添加到任意一个正部分积的尾部;
[0020]
当所述部分积i4~i7中至少有一个为正时,将负部分积按位取反,同时利用正负标志信号sign4~sign7计算负部分积的个数,负部分积的个数即为需要“加1”的个数,将需要“加1”的个数这一数值转化为二进制数,添加到任意一个正部分积的尾部;
[0021]
当所述部分积i4~i7全为负,i1~i3非全负时,则将i1~i3中的负部分积按位取反,同时利用正负标志信号sign1~sign3计算负部分积的个数,负部分积的个数即为需要“加1”的个数,将需要“加1”的个数这一数值转化为二进制数,添加到i1~i3中任意一个正部分积的尾部;i4~i7的处理根据 [x]

+[y]

=[x+y]

原理,对i4~i7的和值进行取补操作,取补操作在压缩处理后进行,i4~i7依旧输出正值;
[0022]
当所述部分积i0~i3全为负,i4~i7非全负时,则将i4~i7中的负部分积按位取反,同时利用正负标志信号sign4~sign7计算负部分积的个数,负部分积的个数即为需要“加1”的个数,将需要“加1”的个数这一数值转化为二进制数,添加到i4~i7中任意一个正部分积的尾部;i0~i3的处理根据 [x]

+[y]

=[x+y]

原理,对i0~i3的和值进行取补操作,取补操作在压缩处理后进行,i0~i3依旧输出正值;
[0023]
当所述部分积i1~i3为负,i0为正时,i1~i3取反输出,i0直接输出正值。
[0024]
可选的,所述4

2压缩单元包括第一4

2压缩器和第二4

2压缩器,所述第一4

2压缩器分别与所述修正译码模块、所述第二4

2压缩器连接,所述第二4

2压缩器还与所述32位超前进位加法器连接;所述第一4

2压缩器用于对所述修正部分积进行第一级4

2压缩处理,所述第二4

2压缩器用于对第一级4

2压缩处理结果进行第二级4

2压缩处理。
[0025]
可选的,所述booth乘法器还包括数选器,所述数选器包括第一数选器和第二数选器;
[0026]
所述第一4

2压缩器经所述第一数选器与所述修正译码模块相连接,所述第二数选器与所述32位超前进位加法器相连接,所述第一数选器和所述第二数选器还分别与所述信号控制模块相连接;
[0027]
所述第一数选器用于从所述压缩部分积中进行数据选择,使被选择的所述压缩部
分积进入所述第二4

2压缩器进行第二级4

2压缩处理;所述第二数选器用于从所述32位超前进位加法器的输出结果或者对所述输出结果进行取补操作后得到的数值中进行数据选择,将选择的数据作为最终的乘积结果;所述信号控制模块向所述第一数选器和所述第二数选器下发控制信号,控制所述第一数选器和所述第二数选器进行数据选择。
[0028]
可选的,所述booth乘法器还包括反相器,所述反相器包括第一反相器和第二反相器;所述第一反相器分别与所述第一4

2压缩器、所述第一数选器连接,所述第二反相器分别与所述32位超前进位加法器、所述第二数选器连接;所述第一反相器用于对所述压缩部分积进行按位取反,所述第二反相器用于对所述32位超前进位加法器的输出结果进行按位取反。
[0029]
可选的,所述初步译码模块设置有2个,所述信号控制模块、所述32位超前进位加法器以及所述修正译码模块均仅有1个,所述第一4

2压缩器设置有2个,所述第二4

2压缩器设置有1个,所述第一数选器、所述第一反相器均设置有4个,所述第二数选器、所述第二反相器均设置有1个。
[0030]
本发明还提出了一种booth乘法器的运算方法,包括:
[0031]
对输入的乘数和被乘数进行初步译码,得到部分积,并对所述部分积进行正负标记,得到正负标志信号;
[0032]
根据正负标志信号对所述部分积进行分类处理,再根据分类结果,对所述部分积进行修正译码处理,得到修正部分积;
[0033]
根据正负标志信号,确定取补操作中所需“加1”的个数,并执行相应的取补操作;所述取补操作包括按位取反操作和“加1”操作;
[0034]
对所述修正部分积进行两级4

2压缩处理,得到压缩部分积;
[0035]
计算所述压缩部分积的和值,所述和值为最终的乘积结果。
[0036]
可选的,所述对输入的乘数和被乘数进行初步译码,得到部分积,并对所述部分积进行正负标记,得到正负标志信号,具体包括:
[0037]
对16位乘数的低8位和高8位同时进行基于radix

4的booth初步译码,输出8个初步32位部分积,定义低8位输出的部分积为i0~i3,高8位输出的部分积为,i4~i7;
[0038]
设被乘数为a,则初次译码后得到的所述部分积有0,a,2a三种情况,对每个所述部分积进行正负标记,输出正负标志信号sign
n
,n为0~7的整数,正负标志信号sign0~sign7与所述部分积i0~i7相对应;
[0039]
当所述部分积是正数时,则输出所述部分积的原值,同时正负标志信号 sign
n
输出低电平“0”;
[0040]
当所述部分积是负数时,则输出所述部分积的绝对值,同时正负标志信号 sign
n
输出高电平“1”。
[0041]
可选的,所述根据正负标志信号对所述部分积进行分类处理,再根据分类结果,对所述部分积进行修正译码处理,得到修正部分积,具体包括:
[0042]
当所述部分积i0~i7都为正时,则将所述部分积作为修正部分积直接输出;
[0043]
当所述部分积i0~i7都为负时,计算所述部分积i0~i7的绝对值的乘积,然后对乘积进行取补操作;
[0044]
当所述部分积i1~i3中至少有一个为正时,将负部分积按位取反,同时利用正负标
志信号sign1~sign3计算负部分积的个数,负部分积的个数即为需要“加1”的个数,将需要“加1”的个数这一数值转化为二进制数,添加到任意一个正部分积的尾部;
[0045]
当所述部分积i4~i7中至少有一个为正时,将负部分积按位取反,同时利用正负标志信号sign4~sign7计算负部分积的个数,负部分积的个数即为需要“加1”的个数,将需要“加1”的个数这一数值转化为二进制数,添加到任意一个正部分积的尾部;
[0046]
当所述部分积i4~i7全为负,i1~i3非全负时,则将i1~i3中的负部分积按位取反,同时利用正负标志信号sign1~sign3计算负部分积的个数,负部分积的个数即为需要“加1”的个数,将需要“加1”的个数这一数值转化为二进制数,添加到i1~i3中任意一个正部分积的尾部;i4~i7的处理根据 [x]

+[y]

=[x+y]

原理,对i4~i7的和值进行取补操作,取补操作在压缩处理后进行,i4~i7依旧输出正值;
[0047]
当所述部分积i0~i3全为负,i4~i7非全负时,则将i4~i7中的负部分积按位取反,同时利用正负标志信号sign4~sign7计算负部分积的个数,负部分积的个数即为需要“加1”的个数,将需要“加1”的个数这一数值转化为二进制数,添加到i4~i7中任意一个正部分积的尾部;i0~i3的处理根据 [x]

+[y]

=[x+y]

原理,对i0~i3的和值进行取补操作,取补操作在压缩处理后进行,i0~i3依旧输出正值;
[0048]
当所述部分积i1~i3为负,i0为正时,i1~i3取反输出,i0直接输出正值。
[0049]
根据本发明提供的具体实施例,本发明公开了以下技术效果:
[0050]
(1)本发明基于改进的booth乘法器算法,提出了一种新的计算思路,将负部分积的求补操作分为取反和进位添位两个部分进行。当出现负的部分积时,不是直接取反加1,也不是像其他实现方法中依次将前一个部分积的取反“加1”中的“1”放到下一个部分积的末尾,而是在译码的同时就知道要添1 的个数,由于在初步译码阶段已经将所有部分积移位后进行了低位扩展,正部分积不需要取反,所以对负部分积进行取反之后的“加1”,可以直接添到移位后正部分积的末尾,也就是说,对于任何一个负部分积的“加1”操作,这个“1”的权值都为1。因此,只需要计算负部分积的个数,便可直接确定添位值为多少,相比于传统乘法器,这种方法大大减少了取反加1时用到的32 位超前进位加法器的数目,减少了电路面积,节约了功耗,还有效提升了运算速度。
[0051]
(2)本发明提出的booth乘法器,与传统的booth乘法器相比,省去了负部分积求补运算所需的32位超前进位加法器,将“加1”操作变换到其他地方,如正部分积尾部和4

2压缩单元的进位输入信号等。并且,当负部分积数量较多时,根据[x1+x2+x3]

=[x1

]+[x2

]+[x3

]、[x]

+[y]

=[x+y]

的原理减少了取补操作次数,一是表现在8个负部分积的情况,先计算乘积的绝对值,最后再求补,只需一次“加1”取补操作,而传统的booth乘法器需要 8次取补操作,从而提升了运算速度;二是表现在当i4~i7都为负或i3~i0都为负时,先计算正部分积的和,d1、c1或d2、c2取补后作为第二4

2压缩器输入,从而将4次取补操作减少为2次,进一步简化了运算过程,提升了运算速度。即先计算结果正值,将取补操作放在后面,从而进一步使booth乘法器的运算速度快、面积小、功耗低。
[0052]
(3)本发明提出的改进算法核心思想,在于对于负部分积的巧妙处理,从而总体提升乘法器运算性能,将负部分积求补所需要的“取反”和“加1”操作非连续处理,将“加1”根据部分积不同的分类情况选择加在正部分积尾部、4

2压缩单元进位输入信号cin端或4

2压缩单元输出的32位c信号的最低位,从而省掉了全加器,提升了运算速度,节省了电路面
积。当负部分积数目较多时,采取先计算绝对值,再将结果求补的方法,从而减少了取补操作数目,减少了电路面积,降低了功耗,提高了运算速度。
[0053]
(4)本发明的booth乘法器的设计思路,源自通过改进部分积取补操作的方式,达到提高乘法器性能的目的,并没有对传统乘法器的整体结构进行太大的改动,仅在传统乘法器的结构基础上加入了一个信号控制模块,这个信号控制模块可根据部分积不同的分类情况来控制部分积的处理过程,从而更容易对传统乘法器进行改进,具有很强的适用性和推广性。
附图说明
[0054]
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0055]
图1为本发明实施例1提供的booth乘法器具体结构示意图;
[0056]
图2为本发明实施例1提供的booth乘法器的运算方法的流程图。
[0057]
附图标号:
[0058]1‑
初步译码模块,2

修正译码模块,3

第一4

2压缩器,4

第二4

2压缩器, 5

32位超前进位加法器,6

信号控制模块,7

第一数选器,8

第二数选器,9
‑ꢀ
第一反相器,10

第二反相器,11

32位加法器。
具体实施方式
[0059]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0060]
本发明的目的是提供一种booth乘法器及其运算方法,解决现有的booth 乘法器普遍存在的运算速度慢、性能低、功耗高的问题,有效提高了补码乘法运算速度,增强了booth乘法器的性能,并显著降低了功耗。
[0061]
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
[0062]
实施例1
[0063]
图1为本实施例提供的booth乘法器具体结构示意图,从图1中可直观看出,本实施例提出的booth乘法器,主要包括初步译码模块1、修正译码模块 2、4

2压缩单元、32位超前进位加法器5以及信号控制模块6。
[0064]
其中,初步译码模块1,连接数据输入设备,用于对输入的乘数和被乘数进行初步译码,得到部分积,并对所述部分积进行正负标记,得到正负标志信号;修正译码模块2,连接所述初步译码模块1,用于根据正负标志信号对所述部分积进行分类处理,再根据分类结果,对所述部分积进行修正译码处理,得到修正部分积;4

2压缩单元,连接所述修正译码模块2,用于对所述修正部分积进行两级4

2压缩处理,得到压缩部分积;32位超前进位加法器
5,连接所述4

2压缩单元,用于计算所述压缩部分积的和值,所述和值为最终的乘积结果;信号控制模块6,分别连接所述修正译码模块2、所述4

2压缩单元和所述32位超前进位加法器5,用于根据正负标志信号,确定取补操作中所需“加1”的个数,并向所述4

2压缩单元和所述32位超前进位加法器5发送控制信号,控制所述4

2压缩单元和所述32位超前进位加法器5执行相应的取补操作;所述取补操作包括按位取反操作和“加1”操作。
[0065]
并且,从图1中还可直观看出,所述4

2压缩单元包括第一4

2压缩器3 和第二4

2压缩器4,从而实现两级压缩处理的作用。其中,所述第一4

2压缩器3分别与所述修正译码模块2、所述第二4

2压缩器4连接,所述第二4

2 压缩器4还与所述32位超前进位加法器5连接;所述第一4

2压缩器3用于对所述修正部分积进行第一级4

2压缩处理,所述第二4

2压缩器4用于对第一级4

2压缩处理结果进行第二级4

2压缩处理。
[0066]
所述booth乘法器还包括数选器,所述数选器包括第一数选器7和第二数选器8。所述第一4

2压缩器3经所述第一数选器7与所述修正译码模块2相连接,所述第二数选器8与所述32位超前进位加法器5相连接,所述第一数选器7和所述第二数选器8还分别与所述信号控制模块6相连接;所述第一数选器7用于从所述压缩部分积中进行数据选择,使被选择的所述压缩部分积进入所述第二4

2压缩器4进行第二级4

2压缩处理;所述第二数选器8用于从所述32位超前进位加法器5的输出结果或者对所述输出结果进行取补操作后得到的数值中进行数据选择,将选择的数据作为最终的乘积结果;所述信号控制模块6向所述第一数选器7和所述第二数选器8下发控制信号,控制所述第一数选器7和所述第二数选器8进行数据选择。
[0067]
此外,所述booth乘法器还包括反相器,所述反相器包括第一反相器9和第二反相器10;所述第一反相器9分别与所述第一4

2压缩器3、所述第一数选器7连接,所述第二反相器10分别与所述32位超前进位加法器5、所述第二数选器8连接;所述第一反相器9用于对所述压缩部分积进行按位取反,所述第二反相器10用于对所述32位超前进位加法器5的输出结果进行按位取反。
[0068]
此外,还需要说明的是,所述第二反相器10还与1个32位加法器11相连,所述第二反相器10通过所述32位加法器11,与所述第二数选器8相连。所述第二反相器10负责对所述32位超前进位加法器5的输出结果进行按位取反,所述32位加法器11负责进行“加1”操作,通过所述第二反相器10和所述32位加法器11的结合实现按位取反后再“加1”,即完整的取补操作,使得所述第二数选器8可以选择将所述32位超前进位加法器5直接输出结果的原值或者经所述第二反相器10、所述32位加法器11对原值进行取补操作后得到的数值作为最终的乘法运算结果。所述32位加法器11可以为任意类型的加法器,只要保证32位即可,优选32位超前进位加法器5。
[0069]
图1中可直观看出,本实施例中,在单个的所述的booth乘法器中,所述初步译码模块1设置有2个,所述信号控制模块6、所述32位超前进位加法器5以及所述修正译码模块2均仅有1个,所述第一4

2压缩器3设置有2个,所述第二4

2压缩器4设置有1个,所述第一数选器7、所述第一反相器9均设置有4个,所述第二数选器8、所述第二反相器10和所述32位加法器11 均设置有1个。
[0070]
本实施例的booth乘法器,通过改进部分积取补操作的方式,达到提高乘法器性能的目的,并没有对传统乘法器的整体结构进行太大的改动,仅在传统乘法器的结构基础上
加入了一个信号控制模块6,这个信号控制模块6可根据部分积不同的分类情况来控制部分积的取补操作过程,从而更易对传统乘法器进行改进,具有很强的适用性和推广性。
[0071]
本实施例还提出了一种booth乘法器的运算方法,下面结合所述booth乘法器的具体结构,对所述booth乘法器的运算方法进行详细说明,具体包括以下步骤:
[0072]
s1、对输入的乘数和被乘数进行初步译码,得到部分积,并对所述部分积进行正负标记,得到正负标志信号。
[0073]
本实施例中,通过所述初步译码模块1对输入的乘数和被乘数进行初步译码,得到部分积,并对所述部分积进行正负标记,得到正负标志信号,具体包括:
[0074]
对16位乘数的低8位和高8位同时进行基于radix

4的booth初步译码,输出8个初步32位部分积,定义低8位输出的部分积为i0~i3,高8位输出的部分积为i4~i7。
[0075]
设被乘数为a,则初次译码后得到的所述部分积有0,a,2a三种情况,对每个所述部分积进行正负标记,输出正负标志信号sign
n
,sign
n
=1或0,n为 0~7的整数,当sign
n
=1时,表示所述部分积为负,当sign
n
=0时,表示所述部分积为正,正负标志信号sign0~sign7与所述部分积i0~i7相对应。
[0076]
当所述部分积是正数时,则所述初步译码模块1输出所述部分积的原值,同时正负标志信号sign
n
输出低电平“0”;当所述部分积是负数时,则所述初步译码模块1输出所述部分积的绝对值,同时正负标志信号sign
n
输出高电平“1”。
[0077]
从图1中可直观看出,本发明对传统的booth乘法器的译码方式进行了改进,为了更好的解释原理,以下均以16*16的booth乘法器为例,本实施例中,初步译码模块1设有2个,初步译码过程也分为两个,通过数据输入设备向所述booth乘法器输入16位乘数b和16位被乘数a后,首先利用初步译码模块1对16位乘数b和16位被乘数a进行基于radix

4的booth初步译码,初步译码时,将16位乘数b分为低8位0~7bit和高8位7~15bit,将低8位0~7bit 输入至一个初步译码模块1中,将高8位7~15bit输入至另一个初步译码模块 1中,并保持16位被乘数a不变,直接将16位被乘数a同时输入至两个初步译码模块1中,两个初步译码模块1的初步译码过程同时进行。
[0078]
通过两个初步译码模块1的两次初步译码过程,以输出正确的部分积以及控制信号。对16位乘数的低8位和高8位同时进行基于radix

4的booth初步译码后,输出了8个初步32位部分积,即输入低8位0~7bit的初步译码模块 1输出部分积i0~i3,输入高8位7~15bit的初步译码模块1输出部分积i4~i7, i0~i7这8个部分积都为正值。假设被乘数是a,初次译码得到的部分积则有 0,a,2a三种情况,同时对应每个部分积输出一个正负标志信号sign
n
,用于下一次译码时对初始译码值进行修正。即在传统booth译码表中如果部分积是正数,则初步译码输出原值,且正负标志信号sign
n
输出低电平0,如果部分积是负数,则初步译码输出其绝对值,且正负标志信号sign
n
输出高电平1。表1是传统booth算法译码表,表2是本实施例booth乘法器所用的部分积初步译码表,包含部分积和正负标志信号sign
n

[0079]
表1传统booth算法译码表
[0080]
译码位部分积符号0000正001被乘数正010被乘数正
0112*被乘数正100~2*被乘数负101~被乘数负110~被乘数负111~0负
[0081]
表2本实施例booth乘法器所用的部分积初步译码表
[0082]
译码位部分积sign
n
00000001被乘数0010被乘数00112*被乘数01002*被乘数1101被乘数1110被乘数111100
[0083]
根据传统booth算法:
[0084]
16位乘法器乘积结果=i0+22i1+24i2+26i3+28i4+2
10
i5+2
12
i6+2
14
i7,其中 i0~i3是低8位数据产生的部分积,i4~i7是高8位数据产生的部分积,均从低到高排列,根据上述16位乘法器乘积结果的表达式可知,除了i0,其他部分积(i1~i7)都要分别与2
n
相乘,n为2,4,6,8,12,14,在硬件实现上就是左移。
[0085]
如果部分积为负,需要对初步译码得到的部分积取反加1。而补码运算有个公式:[x
×2k
]

=[x]

×2k
,其中补码位x为正负都满足,k为2的指数。因此,根据该补码运算公式可知,在对部分积进行译码时,可以先移位再求补。
[0086]
本实施例中,booth乘法器在初步译码时根据每个部分积所处权重将部分积与2
n
相乘,即左移相应的位数,且每个部分积在高位扩展符号位,每一个部分积都扩展至32位。表3是本实施例8个部分积的初始译码示意图,其中省略号表示扩展的符号位a7,8个部分积都是32位。
[0087]
表3本实施例8个部分积的初始译码示意图
[0088][0089]
s2、根据正负标志信号对所述部分积进行分类处理,再根据分类结果,对所述部分积进行修正译码处理,得到修正部分积。
[0090]
具体的,对步骤s1中得到的部分积进行分类处理,根据步骤s1译码时得到的部分积正负标志信号sign0~sign7,判断部分积的正负情况,结合译码位,共同控制电路采取不同的计算方式。本实施例根据部分积的正负情况,将部分积分为了7种组合,请参见表4:
[0091]
表4本实施例7种部分积组合情况
[0092]
组合部分积正负情况描述1i7~i0全为正2i7~i0全为负3i3~i1中至少一个为正4i7~i4中至少一个为正5i3~i1非全负,i7~i4全为负6i3~i0全为负,i7~i4非全负7i3~i1全为负,i0为正,i7~i4任意
[0093]
需要说明的是,针对表4中部分积的递进顺序采用正向、逆向均可,意义相同,也就是说,“i3~i
1”等同于“i1~i
3”,“i7~i
4”等同于“i4~i
7”。
[0094]
本步骤中,实际就是通过所述修正译码模块2根据正负标志信号对所述部分积进行分类处理,再根据分类结果,对所述部分积进行修正译码处理,得到修正部分积。从图1中可直观看出,两个初步译码模块1向修正译码模块2 输入部分积i0~i7,经过修正译码模块2的修正译码处理后,分别得到修正部分积i0'~i3'和i4'~i7',然后将i0'~i3'和i4'~i7'作为输入,分别传输至两个第一4

2压缩器3。
[0095]
根据表4中的7种部分积组合情况,具体包括:
[0096]
(1)当所述部分积i0~i7都为正时,则将所述部分积作为修正部分积直接输出给所述4

2压缩单元。
[0097]
(2)当所述部分积i0~i7都为负时,计算所述部分积i0~i7的绝对值的乘积,然后
对乘积进行取补操作。
[0098]
利用的数学公式是:
[0099]
(

i7)+(

i6)+(

i5)+(

i4)+(

i3)+(

i2)+(

i1)+(

i0)=

(i7+i6+i5+i4+i3+i2+i1+i0)。即先输出步骤s1得到的正的部分积,计算得到绝对值乘积结果,还需产生正负标志信号,标志这个结果不是最终输出结果。然后根据[x]

+[y]

=[x+y]

的原理,即“先移位再求补”等于“先求补再移位”的原理,对8个部分积的和进行取补操作从而得出正确结果。
[0100]
(3)当所述部分积i1~i3中至少有一个为正时,将负部分积按位取反,同时利用正负标志信号sign1~sign3计算负部分积的个数,负部分积的个数即为需要“加1”的个数,将需要“加1”的个数这一数值转化为二进制数,添加到任意一个正部分积的尾部。
[0101]
如果i1~i3中至少有一个正部分积,在传统乘法器里,需要对每个负部分积取反并“加1”。而本实施例将取反所需要的“加1”进行合并,利用负部分积的个数即所需“加1”的个数,并将所需“加1”的个数转化为2bit二进制数的格式,并添加到任意一个正部分积的尾部。首先利用初次译码得到的正负标志位sign1~sign3计算一共有几个负部分积,每个部分积都进行取反,“加 1”的个数这里最多为3个,可以用2bit二进制数来表示。将这个2bit数放在正部分积的末尾完成取补操作。
[0102]
如表5所示,表5中的p
i
表示被乘数的第i位,表示被乘数的第i位被取反。其中,末尾低两位是可以进行“加1”的。假设i2为正,i0、i1、i3为负,一共有3个负部分积,就在i2的低2位添加2bit的“11”。这种对负部分积的处理方式有效省略了传统乘法器里的加法器。
[0103]
表5部分积i1~i3中至少有一个为正时的取补示意
[0104][0105]
此外,还应说明的是,虽然表5中涉及到了“i
0”,但第(3)、(5)种情况中并没有考虑“i
0”的正负情况,而是仅考虑到了“i1~i
3”,这是因为本发明将“加1”的个数添加到正部分积的尾部的方法,这些正部分积的最低两位一定是二进制00,因此可以直接进行替换,无需进行加法操作。请参见表3 和表5中的“i
0”,假设i0为正,i1~i3为负这一种情况,是不能把补码操作需要的“1”直接添加在i0的尾部的,因为i0没有进行左移,所以它的最低2位不一定是二进制00,因此,不能直接把最低2bit的数据替换掉,因此,本实施例仅需要保证这个正部分积在i1~i3中即可,所以在第(3)、(5)种情况中无需考虑“i
0”的正负情况,表5中仅需要考虑“i1~i
3”中至少有一个为正的情况,而“i
0”仅用以辅助说明。
[0106]
(4)当所述部分积i4~i7中至少有一个为正时,将负部分积按位取反,同时利用正负标志信号sign4~sign7计算负部分积的个数,负部分积的个数即为需要“加1”的个数,将需要“加1”的个数这一数值转化为二进制数,添加到任意一个正部分积的尾部。
[0107]
如果i4~i7中至少有一个正部分积,和上述第(3)种情况同理,先将负部分积按位
取反,同时i4~i7中计算负部分积的个数,即可得知由于负部分积求补码一共需要添加几个“1”,合并添加在任意一个正部分积尾部。
[0108]
如表6所示:假设i4、i7为正部分积,i5、i6为负部分积,负部分积的个数为2,将2转化为二进制数为“10”,则需要在正部分积i4或i7的尾部添加“10”,例如,表6在i4的低2位处添加“10”。二进制的“10”即表示十进制“2”。
[0109]
表6部分积i4~i7中至少有一个为正时的取补示意
[0110][0111]
(5)当所述部分积i4~i7全为负,i1~i3非全负时,则将i1~i3中的负部分积按位取反,同时利用正负标志信号sign1~sign3计算负部分积的个数,负部分积的个数即为需要“加1”的个数,将需要“加1”的个数这一数值转化为二进制数,添加到i1~i3中任意一个正部分积的尾部;i4~i7的处理根据 [x]

+[y]

=[x+y]

原理,对i4~i7的和值进行取补操作,取补操作在压缩处理后进行,i4~i7依旧输出正值。
[0112]
如果i4~i7全为负,i1~i3非全负,此种情况下,则i1~i3按第(3)种情况产生,为了减少取补操作,i4~i7的处理根据[x]

+[y]

=[x+y]

原理,取补操作在后面进行,故i4~i7依旧输出正值。需要注意的是,此时负部分积取补操作在压缩操作后进行。
[0113]
(6)当所述部分积i0~i3全为负,i4~i7非全负时,则将i4~i7中的负部分积按位取反,同时利用正负标志信号sign4~sign7计算负部分积的个数,负部分积的个数即为需要“加1”的个数,将需要“加1”的个数这一数值转化为二进制数,添加到i4~i7中任意一个正部分积的尾部;i0~i3的处理根据 [x]

+[y]

=[x+y]

原理,对i0~i3的和值进行取补操作,取补操作在压缩处理后进行,i0~i3依旧输出正值。
[0114]
当i0~i3全为负,i4~i7非全负,此种情况下,与第(5)种情况的处理过程相似,i4~i7按照第(4)种情况产生,为了减少取补操作,i0~i3的处理根据[x]

+[y]

=[x+y]

原理,取补操作放在后面进行,故i0~i3依旧输出正值。此时,负部分积取补操作在压缩处理后进行。
[0115]
(7)当所述部分积i1~i3为负,i0为正时,i1~i3取反输出,i0直接输出正值。
[0116]
s3、根据正负标志信号,确定取补操作中所需“加1”的个数,并执行相应的取补操作。
[0117]
本实施例中,通过所述信号控制模块6根据正负标志信号,确定取补操作中所需“加1”的个数,并向所述4

2压缩单元和所述32位超前进位加法器5 发送控制信号,控制所述4

2压缩单元和所述32位超前进位加法器5执行相应的取补操作。此外,所述信号控制模块6向所述4

2压缩单元、所述32位超前进位加法器5以及所述数选器下发控制指令的控制信号,例如cin1、cin2、 cin3、cin4、c_1、c_2、c_3、ctr_1、ctr_2、ctr_3、ctr_4以及ctr_5等
控制信号,从而实现对4

2压缩单元、32位超前进位加法器5以及数选器的控制。
[0118]
本实施例中,步骤s3实际是伴随着步骤s2~s5进行的,即在步骤s2~s5 中进行取补操作。所述取补操作包括对所述部分积进行按位取反和“加1”操作。
[0119]
需要说明的是,取补操作的方式有很多种,但均是围绕按位取反和“加1”实现取补,而本实施例的优点在于,根据部分积的正负标志信号的情况即正部分积和负部分积的数量,在对负部分积进行按位取反的同时,根据负部分积的个数确定所需“加1”的个数,所需“加1”的个数等于负部分积的个数,然后将所需“加1”的个数这一数值转化为2bit二进制数的格式,将这一2bit数值添加到任意一个正部分积的尾部,即完成了取补操作。举例说明,在表6 中,i4、i7为正部分积,i5、i6为负部分积,由此可见,负部分积的个数为2,也就是说所需“加1”的个数为2,即需要2个“加1”操作,将2转化为2bit 二进制数为“10”,则需要在正部分积i4或i7的尾部直接添加“10”,从而避免了现有的乘法器需要对每个负部分积都进行按位取反和“加1”操作而造成的运算速度慢的问题,有效提升了运算速度,还降低了功耗,提升了乘法器性能。
[0120]
还应注意的是,为了叙述更加简便易懂,上述采用“所述部分积”这一统称,也就是说,上述过程中的“所述部分积”是对所有部分积的一个泛指,并不是仅限于在初步译码时得到的部分积,还应包括修正部分积、压缩部分积等各个步骤中的部分积,只要涉及取补操作的“部分积”均应包括在内。
[0121]
s4、对所述修正部分积进行两级4

2压缩处理,得到压缩部分积。
[0122]
s4.1、利用第一4

2压缩器3对所述修正部分积进行第一级4

2压缩处理。
[0123]
为了加速部分积求和运算,采用4

2压缩单元,8个部分积需要进行2级 4

2压缩处理。因此,本实施例中,4

2压缩单元包括两个第一4

2压缩器3 和一个第二4

2压缩器4。两个所述第一4

2压缩器3进行一级压缩处理,一个所述第二4

2压缩器4对一级压缩处理结果进行二级压缩处理。
[0124]
从图1中可看出,将s2中得到的8个修正部分积4个一组进行4

2压缩处理,即修正部分积i0'~i3'为一组,i4'~i7'为一组。第一级的两个第一4

2 压缩器3的进位输入信号cin1和cin2的值需要根据不同的修正部分积情况进行赋值,由所述信号控制模块6进行赋值。其中,cin1是对i0'~i3'进行压缩的4

2压缩器进位输入信号,cin2是对i4'~i7'进行压缩的4

2压缩器进位输入信号。i0'~i3'进行压缩后输出c1和d1,i4'~i7'压缩后输出c2和d2。第一 4

2压缩器3的输入和输出关系:i0'+i1'+i2'+i3'=d1+2c1;i4'+i5'+i6'+i7'=d2+2c2。
[0125]
s4.2、利用第二4

2压缩器4对s4.1中得到的2c1、d1、2c2、d2进行第二级4

2压缩处理。
[0126]
第二级4

2压缩处理由第二4

2压缩器4进行,二级4

2压缩处理完成后得到d3、c3,即压缩部分积。第二4

2压缩器4的进位输入信号是cin3。
[0127]
需要说明的是,当部分积的情况是s2中的第(5)或(6)种情况时,二级4

2压缩处理后得到的d3、c3都是正值,所以需要取补后才能得出正确结果值。具体的,如果是第(5)种情况,需要对2c2、d2取补,如果是第(6) 种情况,需要对2c1、d1需要进行取补操作。这样的方法将原来的4次取补操作减少为2次,取补操作的“加1”可以安置在第二4

2压缩器4的进位输入信号和所述32位超前进位加法器5进位输入信号。这些操作都是根据所述信号控制模
块6来控制,所述信号控制模块6向所述4

2压缩单元和所述32位超前进位加法器5发送控制信号,控制所述4

2压缩单元和所述32位超前进位加法器5执行相应的取补操作。
[0128]
s5、计算所述压缩部分积的和值,所述和值为最终的乘积结果。
[0129]
s5.1、经过两级4

2压缩处理后,8个部分积最后被压缩成d3、c3两个压缩部分积,将d3、2c3输入至所述32位超前进位加法器5中进行相加求和,除了8个部分积为全负的情况,在此步骤就可以直接得到乘法器结果,所述32 位超前进位加法器5计算的和值即为booth乘法器最终的运算结果。所述32 位超前进位加法器5的进位输入信号是cin4。应说明的是,进位输入信号cin4 以及上述各个进位输入信号,都是由所述信号控制模块6以控制指令的方式下发的控制信号。此外,所述信号控制模块6还下发cin1、cin2、cin3、cin4、 c_1、c_2、c_3、ctr_1、ctr_2、ctr_3、ctr_4以及ctr_5等控制信号,从而实现对4

2压缩单元、32位超前进位加法器5以及数选器的控制。
[0130]
s5.2、当8个部分积都为负部分积时,对s4中得到的d3、c3两个压缩部分积进行按位取反和“加1”操作,即取补操作,得到最后正确的运算结果。通过所述第二反相器10对所述32位超前进位加法器5的输出结果即d3、c3 两个压缩部分积进行按位取反,通过所述32位加法器11执行“加1”操作,实现对所述32位超前进位加法器5输出结果的取补操作,得到最后正确的结果值。
[0131]
对于上述步骤中,所述4

2压缩单元的cin1、cin2、cin3以及所述32位超前进位加法器5的cin4置为“1”还是“0”,是由所述部分积的正负情况决定的,实质是用来存放取补操作的“1”。由于所述第一4

2压缩器3和所述第二4

2压缩器4生成的c1、c2、c3在输入至下一模块前,需要乘以2,即左移1位。因此,上述步骤中取补操作所需要加的“1”可以加在c1、c2、c3 最低位,设c1、c2、c3的最低位控制信号分别是c_1、c_2和c_3。
[0132]
在步骤s2中,需要对部分积进行取补操作的情况有:
[0133]
(1)当i1~i3全为负部分积,i0为正部分积时,将i1~i3分别取反后,因3次取补操作还需要加3个“1”,分别加在c1、c2、c3的最低位,即c_1、 c_2、c_3均置1。
[0134]
(2)当i4~i7全为负部分积,i1~i3为非全负部分积时,对i4~i7的绝对值进行一级4

2压缩处理后,c1、c3都是正值,所以在输入至第二4

2压缩器4前需要先对2c1、d1进行取补操作,取反后需要添加2个“1”,分别加在cin3和cin4上。
[0135]
(3)当i0~i3为负部分积,i4~i7为非全负部分积时,对i0~i3的绝对值进行一级4

2压缩处理后,c2、d2都是正值,所以在输入至第二4

2压缩器4前需要先对2c2、d2进行取补操作,取反后同样需要添加2个“1”,分别加在cin3和cin4上。
[0136]
需要注意的是,上述三种情况中,第(2)、(3)种情况不会同时出现,因此,可以复用cin3和cin4。
[0137]
下面对于cin1,cin2,cin3,cin4以及c1、c2、c3的尾部的赋值,结合表格进行说明,请参见表7:
[0138]
表7 cin1,cin2,cin3,cin4以及c1、c2、c3的尾部的赋值情况
[0139]
i0~i7的正负情况cin1cin2cin3cin4c_1c_2c_3i1~i3都为负,i0为正0000111i0~i3为负,i4~i7中有正0011000i4~i7为负,i1~i3中有正0011000
[0140]
为了控制所述32位超前进位加法器5、第一4

2压缩器3以及第二4

2压缩器4的进位输入信号cin1~cin4,以及第一4

2压缩器3和第二4

2压缩器4 输出c1~c3信号的最低位,因此,本实施例中,引入了3个控制信号:pn_flag_1、 pn_flag_2以及low_flag_3。
[0141]
当i3~i0都为负部分积时,pn_flag_1是高电平,反之则为低电平。
[0142]
当i7~i4都为负部分积时,pn_flag_2是高电平,反之则为低电平。
[0143]
当i0为正部分积,i3~i1都为负部分积时,low_flag_3为高电平,反之则为低电平。
[0144]
通过公式表达则为:
[0145]
pn_flag_1=sign0&sign1&sign2&sign3[0146]
pn_flag_2=sign4&sign5&sign6&sign7[0147][0148]
根据这三个控制信号pn_flag_1、pn_flag_2以及low_flag_3,得出表7各个信号的表达式:
[0149]
cin1=cin2=0
[0150][0151]
c_1=c_2=c_3=low_flag_3
[0152]
其中,&表示“与”操作,表示“异或”操作。
[0153]
从图1中还可直观看出,ctr_1、ctr_2、ctr_3、ctr_4信号是第一数选器7 的控制信号,而ctr_5是第二数选器8的控制信号,均有所述信号控制模块6 下发,数选器即为数据选择器。图1中,第一数选器7有四个,分别为mux1、 mux2、mux3和mux4,第二数选器8有一个,即mux5。
[0154]
所述信号控制模块6分别向第一数选器7即mux1、mux2、mux3和 mux4对应下发ctr_1、ctr_2、ctr_3、ctr_4的指令信号,控制所述第一数选器7进行数据选择,还向第二数选器8即mux5下发ctr_5的指令信号,控制所述第二数选器8进行数据选择。具体的,ctr_1控制mux1选择d1还是~d1 (d1的非)进入第二4

2压缩器4,ctr_2控制mux2选择c1还是~c1(c1 的非)进入第二4

2压缩器4,ctr_3控制mux3选择d2还是~d2(d2的非) 进入第二4

2压缩器4,ctr_4控制mux4选择c2还是~c2(c2的非)进入第二4

2压缩器4,ctr_5控制mux5选择32位超前进位加法器5的输出还是输出结果的补码为最终的乘法运算结果。
[0155]
需要说明的是,其中“的非”表示该数值是按位取反,并不包含“加1”操作。并且,反相器只能按位取反,取补中的“加1”是对cin1,cin2,cin3, cin4以及c1、c2、c3的赋值来执行,由所述信号控制模块6对上述信号进行赋值。
[0156]
所述第一数选器7和所述第二数选器8的控制信号表达式为:
[0157][0158][0159]
ctr_5=pn_flag_1&pn_flag_2
[0160]
当ctr_1、ctr_2、ctr_3和ctr_4均为0时,分别选择d1、c1、d2、c2 的原值。当ctr_1、ctr_2、ctr_3和ctr_4均为1时,分别选择当ctr_5为0时,选择32位超前进位加法器5的原值输出。当ctr_5为1时,选择32位超前进位加法器5取补操作后结果进行输
出,从而得到booth乘法器的最终运算结果。
[0161]
本实施例提出的改进算法核心思想,在于对于负部分积的巧妙处理,根据部分积的正负标志信号的情况,对负部分积进行按位取反,并将所需“加1”的个数这一数值转化为二进制数,将所述二进制数添加到任意一个正部分积的尾部。将负部分积求补所需要的“取反”和“加1”操作非连续处理,将“加 1”根据部分积不同的分类情况选择加在正部分积尾部、4

2压缩单元进位输入信号cin端或4

2压缩单元输出的32位c信号的最低位,从而省掉了全加器,提升了运算速度,节省了电路面积,从而总体提升乘法器运算性能。当负部分积数目较多时,采取先计算绝对值,再将结果求补的方法,从而减少了取补操作数目,减少了电路面积,降低了功耗,提高了运算速度和性能。
[0162]
本实施例提出的booth乘法器,与传统的booth乘法器相比,省去了负部分积求补运算所需的32位超前进位加法器5,将“加1”操作变换到其他地方,如正部分积尾部和4

2压缩单元的进位输入信号等。并且,当负部分积数量较多时,根据[x1+x2+x3]

=[x1

]+[x2

]+[x3

]即[x]

+[y]

=[x+y]

的原理减少了取补操作次数,一是表现在8个负部分积的情况,先计算乘积的绝对值,最后再求补,只需一次“加1”取补操作,而传统的booth乘法器需要8次取补操作,从而提升了运算速度;二是表现在当i4~i7都为负或i3~i0都为负时,先计算正部分积的和,d1、c1或d2、c2取补后作为第二4

2压缩器4输入,从而将4次取补操作减少为2次,进一步简化了运算过程,提升了运算速度。即先计算结果正值,将取补操作放在后面,从而进一步使booth乘法器的运算速度快、面积小、功耗低。
[0163]
本实施例提出的一种booth乘法器及其运算方法,是一种新的乘法器计算方法,将负部分积的求补操作分为取反和进位添位两个部分进行。当出现负的部分积时,不是直接取反加1,也不是像其他实现方法中依次将前一个部分积的取反“加1”中的“1”放到下一个部分积的末尾,而是在译码的同时就知道要添1的个数,由于在初步译码阶段已经将所有部分积移位后进行了低位扩展,正部分积不需要取反,所以对负部分积进行取反之后的“加1”,可以直接添到移位后正部分积的末尾,也就是说,对于任何一个负部分积的“加1”操作,这个“1”的权值都为1。因此,只需要计算负部分积的个数,便可直接确定添位值为多少,相比于传统乘法器,这种方法大大减少了取反加1时用到的32位超前进位加法器5的数目,减少了电路面积,节约了功耗,还有效提升了运算速度。
[0164]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0165]
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1