预饱和固定点乘法器的制作方法

文档序号:6618681阅读:346来源:国知局
专利名称:预饱和固定点乘法器的制作方法
技术领域
本发明大体来说涉及数字电路的领域且更特定来说涉及一种预饱和固定点乘法
器°
背景技术
固定点乘法是由数字计算电路(例如处理器)执行的基本算术运算。大多数处理 器指令集合架构包括各种固定点乘法指令。固定点乘法的已知危险是在某些条件下(如 本文中更全面地说明),乘积可超出可以可用位宽度表示的数值,此条件称作溢出。 在此情形中,为避免所述乘积的严重误表示,乘法指令将规定"饱和"输出,其是可 用位字段中可表示的最大数值-实际上,是可能与实际乘积最接近的逼近。此指令称作 饱和固定点乘法指令。所述指令通常为乘积规定位宽度,其是操作数的位宽度的两倍。
整数及分数值两者可以固定点数字形式来表示,此取决于所使用的约定。通常,
所有现代处理器使用2的补数格式来以固定宽度的数字表示来表示正及负整数。2的 补数格式是常见的。在2的补数表示中,整数"带有符号"。也就是说,可通过检査 最高有效位(MSB)或"符号位"来确定整数是正还是负。另外,在2的补数表示中, 对带符号整数的二进制算术运算得出正确的2的补数结果。
正的2的补数使用零符号位以简单的二进制形式表示。因此,可以2的补数格式 表示的最大正数是211—1-1,其中n是所述数字表示的位宽度。负的2的补数表示为当加 到相同量值的正数时等于零的二进制数。负的2的补数具有为1的符号位。由于负数 的2的补数表示可使用所述数字表示的所有n个位,因此可以2的补数格式表示的最 大负数是211—1,其在量值上比最大正2的补数大1。因此,举例来说,32-位字段中可 表示的带符号整数值的范围是-231 (0x8000 0000)至1」+231-1 (0x7FFFFFFF)。
可通过逐位反转所述数(得出1的补数)并加1来形成任何2的补数的求反。因 此, 一种计算负数的2的补数表示的方式是反转对应正数的二进制表示(其是所述正 数的1的补数形式)并加1。此求反算法的唯一例外是可表示的最大负数。对所述数 执行2的补数求反产生相同的数,此是溢出错误。还应注意,求反零的2的补数得出 零-反转所有位得出全部为1,且加l得出零(当舍弃进位输出时)。
可使用所谓的Q格式记法以固定宽度数字形式表示分数值。在Qii.x格式记法中, 值的位解释为 一个符号位、n个整数位及x个分数位。用于数字信号处理的常见Q 格式是QO.x (或简单的Q.x),其指示存在一个符号位、无整数位及x个分数位。在Q.31记法中,数将以32个位来表达且将具有从-l (0x8000 0000)到l-2—31 (ox7FFF FFFF)的范围的值。
当以Q格式使数相乘时,重要的是计及二进制小数点。举例来说,将Q.15乘Q.15 相乘将得出Q2.30的结果。然而,需要将值保持为Q.x格式。为应对此情形,乘法运 算包括乘以因数2的乘法(此等同于左移位运算)以产生Q.31结果。将两个n-位值乘 在一起将始终产生可以2n个位表示的值。在除最大负值的情形外的所有情形中,将此 乘积增加一倍将产生可以2n个位表示的值。2的补数中的最大负值是为1的符号位 (MSB)而所有其它位为零。将此值向左移位产生溢出。
实例是以下两个16-位操作数的相乘以产生32-位乘积。所述操作数中的每一者均 为负(符号位为l),而其乘积应为正数。
0x8000 x 0x8000 = 0x4000 0000 乘法
0x4000 0000x0x2 = 0x8000 0000加倍(不正确的结果;应为正) 0x8000 0000 - 1 = 0x7FFF FFFF 饱和结果(最大正值)
在此实例中,所述两个操作数各自为可以2的补数格式以16位表示的最大负数。 其乘积应得出大的正值。然而,加倍乘法指令的实际结果是最大负值。因此,必须从 此值中减去'l'以获得0x7FFFFFFF的饱和值-符号位为零而其它位位置中全部为1。 常规饱和乘法器仅在执行乘法之后检测溢出条件,但然后必需采取措施以通过使 输出饱和来校正溢出条件。在某些实施方案中,此可需要(例如)通过导致例外来使 处理器暂停。此有害地影响处理器性能并导致增加的功率消耗。即使溢出在硬体中达 到饱和,但在乘法完成之后如此做会有害地影响性能。

发明内容
根据一个或一个以上实施例,预饱和乘法器在执行任何乘法之前检查乘法运算的 操作数。如果所述操作数将导致需要饱和的溢出,那么所述乘法器输出饱和值而不将 所述操作数相乘。
在一个实施例中,更改从所述操作数导出的参数,以便在对所述经更改的参数执 行乘法运算时,所述乘法器产生饱和结果。此可包含更改布思再编码位群组,以选择 负零而不是零来作为部分乘积,并抑制将值1加到所述部分乘积(因此有效地减去值 1)。在另一实施例中,当检测到将导致溢出的操作数时,迫使所述乘法器的输出变成 预定饱和值。
一个实施例涉及一种执行固定点饱和乘法运算的方法,对于所述运算包含乘数及 被乘数的至少一组已知操作数将导致需要饱和的溢出。在执行任何乘法运算之前检测 将导致溢出的操作数,且输出饱和结果而不将所述操作数相乘。
另一实施例涉及包括乘法器电路的预饱和乘法器,所述乘法器电路操作以使两个 包含乘数及被乘数的操作数相乘,并输出其乘积。所述预饱和乘法器还包括溢出预检
测电路,其操作以在所述乘法器电路中检测将导致溢出的操作数。


图1是根据一个实施例的预饱和乘法器的功能性方块图。 图2是根据另一实施例的预饱和乘法器的功能性方块图。 图3是执行预饱和乘法运算的方法的流程图。
具体实施例方式
乘法器检测乘法运算的操作数,如果执行所述乘法,那么所述操作数将导致溢出 条件。响应于此检测,所述乘法器输出饱和值。在一个实施例中,所述乘法器通过以
以下方式更改操作数来输出饱和值所述乘法运算将产生作为乘积的饱和值。图1描
绘根据此实施例的预饱和乘法器40。 GPR寄存器42包含乘数(MR)及被乘数(MD) 操作数。所述乘数输入到布思再编码器电路44。
布思再编码(有时将其称作经修改的布思再编码)是一种用于减少将要在执行乘 法运算中相加的部分乘积的数量的技术。不考虑所述乘数中的每一位且不产生包含被 乘数或零的对应经移位部分乘积,而是以群组形式考虑乘数位,并将包含所述被乘数 的+/-倍数的经移位部分乘积相加。此技术减少将要相加的部分乘积的数量。举例来说, 在基数-4布思再编码中,将所述乘数位与先前群组的MSB —起考虑为两个群组(其 中零被附加到第一群组)。然后根据下表、基于所述位群组的值产生部分乘积
位群组部分乘积
0000
0011 x被乘数
0101 x被乘数
0112x被乘数
100-2x被乘数
101-1 x被乘数
110-1 x被乘数
1110
表1:基数-4布思再编码
对于所述乘数中的每一经布思再编码的位群组,所述被乘数乘以所指示的因素, 且将所得的部分乘积移位到所述乘数中的位群组的位置。然后,求和所述部分乘积以
得出乘积。当将带符号值相乘时,基数-4布思再编码可将部分乘积的数量减少高达一 半。
在此实施方案中,布思再编码器44的输出经由布思多路复用器48选择华莱士 (Wallace)树50 (或其它加法器)的部分乘积。布思多路复用器48从移位/反转逻辑
49选择经适当修改的被乘数,且每一多路复用器48对准所述乘数中再编码位群组的
位置。移位/反转逻辑49如下产生表1中规定的经修改被乘数
0将被乘数位全部取代为零;
Xl直接通过被乘数位;
X2将被乘数位向左移位一个位位置;及
求反对被乘数、经移位的被乘数或零值执行逐位反转(l的补数)。
应注意,所述求反直到在LSB处将'1'加到华莱士树50内的部分乘积(用于求 反的每一2的补数法则l的补数+l)才完成。华莱士树50将所述部分乘积相加,从 而输出和及进位,其在进位传递加法器52中相加,且将所述乘积锁存在54处。所属 技术领域的技术人员将认识到,可锁存所述布思再编码器的输出及布思多路复用器48 的输出(或所述被乘数值)以允许进行管线操作。
溢出检测电路56在每一乘法运算的开始监测乘数及被乘数,从而检测将导致需 要饱和的溢出的操作数的值。当检测到即将来临的溢出时,溢出检测电路56向布思再 编码器44发信号以便以以下方式更改乘数位的再编码,且向华莱士树50发信号以便 以以下方式更改部分乘积的总和所述乘法运算将产生用于所述乘积的饱和值。此因 将导致溢出的操作数数量有限而可行,且预先知道这些操作数。
特定来说,在一个实施例中,仅乘数及被乘数两者均包含最大负值的情形将导致 需要饱和的溢出。当检测到此条件时,溢出检测电路56将信号引导到布思再编码器 44以更改布思再编码。相应地,布思再编码器44修改最低有效布思再编码的位群组 (其具有000的值,通常将选择零)以选择负零。移位/反转逻辑49提供零的1的补 数(即,全部为1),且向华莱士树50发信号以将加到所述部分乘积。另外, 溢出检测电路56将抑制信号引导到华莱士树50以抑制加上与0的求反相关联的 (应注意,在管线化实施方案中,所述"抑制+l"信号将被锁存)。相应地,加上零 的符号延伸的l的补数(OxFFFFFFFF)作为部分乘积,但不加对应的'1'-以有效地 从所述结果中减去'1'。举例来说
0x8000 x 0x8000 = 0x40000000 两个最负值的乘法
0x40000000 x 0x2 = 0x80000000加倍
0x80000000+ OxFFFFFFFF=
0x7FFFFFFF 饱和结果(有效地减去'1')
此饱和结果由进位传递加法器52输出,且锁存为54处的乘积。根据此实施例, 所述饱和乘法运算的定时与不导致溢出且因此需要饱和的操作数的定时相同。特定来 说,无延迟被加到乘法器40的输出。因此,此实施例可具有其中所述乘法运算的定时 至关重要的特定适应性,且可在乘法器40输出处不容许额外的延迟。
图2描绘预饱和乘法器40的另一实施例,其中对应的组件相应地进行编号。在 此实施例中,溢出检测电路56监测乘数及被乘数,从而检测将导致需要饱和的溢出的 己知操作数。当检测到这些操作数时,溢出检测电路56输出用饱和结果取代乘法器40乘积输出的信号。举例来说,溢出检测电路56可输出引导多路复用器60选择代替 进位传递加法器52的输出的预定饱和输出的多路复用器选择信号。所述预定饱和输出 可包含硬接线值(即,其中位位置连接到高或低电压轨),或另一选择为,可包含存 储位置(例如,寄存器)的输出。在其中多个操作数可导致需要不同饱和值的溢出的 实施例中,溢出检测电路56可输出多位多路复用器选择信号,其在多个预定饱和值与 加法器52的输出之间进行选择。可在管线化实施方案中锁存溢出检测电路56输出。
在此实施例中,可抑制乘法运算(也就是说,可停用布思再编码器44、逻辑块 49、华莱士树50、进位传递加法器52及其它乘法器电路)以减小功率消耗。另一选 择为,可允许操作数的乘法穿过乘法器40而继续进行,而仅舍弃结果,因为替代地将 饱和结果锁存在54处。在此实施例中,将多路复用器60的延迟加到乘法器40所执行 的每一乘法运算,尽管可通过以下方式来减轻此延迟使用现存多路复用器的未使用 接脚、使用多路复用锁存器或通过所属技术领域中已知的其它技术。应尽早确定溢出 条件,而选择饱和值的决策并非关键途径的一部分。
图3描绘一种执行固定点饱和乘法运算的方法,对于所述运算,至少一组已知操 作数将导致需要饱和的溢出。首先(即,在执行任何乘法之前),检査操作数(方块 70)。将操作数与将导致溢出的已知值相比较(方块72)。举例来说,在某些情形中, 如果两个操作数均包含操作数位字段内可表示的最大负值,那么将导致溢出。如果将 操作数相乘将不导致溢出(方块72),那么执行所述乘法并输出结果(方块74)。如 果将操作数相乘将导致需要饱和的溢出(方块72),那么根据一个或一个以上实施例, 输出所述饱和结果而不将原始操作数相乘(方块76)。
在一个实施例中,此包含以以下方式更改从所述操作数产生的参数对经更改的 参数执行乘法运算可产生作为所述乘法运算的乘积的饱和值。在另一实施例中,输出 所述饱和结果包含选择预定的饱和值作为代替来自所述乘法运算的乘积的输出。
在两个实施例(即,图l及2中所描绘的实施例)中,较早地检测到将导致溢出 的操作数,且乘法器40直接输出饱和结果。此表示胜过常规方法的显著性能改善及功 率节约,所述常规方法仅通过检査乘积来检测溢出且随后用饱和值取代所述乘积。根 据本文所揭示一个或一个以上实施例,乘法器40尤其适用于高速处理器,及/或其中 低功率消耗是关键因素的处理器,例如,以电池供电的便携式电子装置。
尽管本文已根据本发明的特定特征、方面及实施例说明了本发明的概念,但将明 了的是,许多变化、修改及其它实施例也可归属于本教示的宽广范围内。因此,应在 所有方面将本发明实施例理解为说明性而非限制性,且归属于随附权利要求书的含义 和等效范围内的所有改变均既定涵盖在随附权利要求的范围内。
权利要求
1.一种执行固定点饱和乘法运算的方法,对于所述运算,至少一组已知操作数将导致需要饱和的溢出,所述操作数包含乘数及被乘数,所述方法包含在执行任何乘法运算之前检测将导致溢出的所述操作数;及输出饱和结果而不将所述操作数相乘。
2、 如权利要求1所述的方法,其中将导致溢出的所述操作数是所述操作数位字 段中可表示的最大负数。
3、 如权利要求1所述的方法,其进一步包含调整从所述操作数导出的一个或一个以上参数以使得乘法运算将产生所述饱和 结果;及用所述经调整的参数执行乘法运算。
4、 如权利要求3所述的方法,其中调整从所述操作数导出的一个或一个以上参 数包含更改从所述乘数导出的一个或一个以上经布思再编码的位群组。
5、 如权利要求4所述的方法,其中更改经布思再编码的位群组包含将对经布思 再编码的位群组的选择从零改变到负零及抑制将值1加到从所述被乘数导出的部分乘 积。
6、 如权利要求3所述的方法,其中调整从所述操作数导出的一个或一个以上参 数包含将值负1加到从所述操作数导出的部分乘积。
7、 如权利要求1所述的方法,其中输出所述饱和结果包含不管所述乘法运算的 所述乘积如何而迫使所述乘法运算的输出变成饱和结果。
8、 如权利要求7所述的方法,其中迫使乘法运算的所述输出变成饱和结果包含 响应于检测到将导致溢出的所述操作数而在所述乘法运算输出与所述饱和结果之间进 行选择。
9、 一种预饱和乘法器,其包含乘法器电路,其操作以使包含乘数及被乘数的两个操作数相乘,并输出其乘积;及溢出预检测电路,其操作以在所述乘法器电路中检测将导致溢出的操作数。
10、 如权利要求9所述的乘法器,其中所述溢出预检测电路检测所述操作数位字 段中可表示的最大负值。
11、 如权利要求9所述的乘法器,其中所述乘法器电路包含布思再编码器,其操 作以将所述乘数再编码成位群组,每一位群组将所述被乘数的正或负倍数选择为部分 乘积,所述布思再编码器进一步操作以响应于所述溢出预检测电路而更改一个或一个 以上位群组以在所述乘法器中产生饱和结果。
12、 如权利要求11所述的乘法器,其中所述布思再编码器操作以响应于所述溢 出预检测电路而迫使最低有效经再编码位群组选择负零。
13、 如权利要求11所述的乘法器,其进一步包含并行加法器,其操作以将所述 部分乘积相加并为通过所述经布思再编码的位群组所选择的负部分乘积加上值1,所 述并行加法器进一步操作以响应于所述溢出预检测电路而抑制为负零加上值l。
14、 如权利要求9所述的乘法器,其中所述乘法器电路操作以响应于所述溢出预检测电路而从所述乘积中减去值1。
15、 如权利要求9所述的乘法器,其进一步包含输出选择器,其操作以响应于所 述溢出预检测电路而输出来自所述乘法器电路的所述乘积或预定饱和结果。
全文摘要
本发明揭示一种预饱和乘法器,其在执行任何乘法之前检查乘法运算的操作数。如果所述操作数将导致需要饱和的溢出,那么所述乘法器输出饱和值而不将所述原始操作数相乘。在一个实施例中,更改从所述操作数导出的参数,以便在对所述经更改的参数执行乘法运算时,所述乘法器产生饱和结果。此可包含更改经布思(Booth)再编码的位群组,以选择负零而不是零来作为部分乘积,并抑制将值1加到所述部分乘积(因此有效地减去值1)。在另一实施例中,当检测到将导致溢出的操作数时,迫使所述乘法器的输出变成预定饱和值。
文档编号G06F7/499GK101371221SQ200780002644
公开日2009年2月18日 申请日期2007年1月22日 优先权日2006年1月20日
发明者肯尼思·艾伦·多克塞尔, 邦尼·科利特·塞克斯顿 申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1