CN116774966B - 乘法器、乘累加电路、运算电路、处理器和计算装置 - Google Patents
乘法器、乘累加电路、运算电路、处理器和计算装置 Download PDFInfo
- Publication number
- CN116774966B CN116774966B CN202311056807.2A CN202311056807A CN116774966B CN 116774966 B CN116774966 B CN 116774966B CN 202311056807 A CN202311056807 A CN 202311056807A CN 116774966 B CN116774966 B CN 116774966B
- Authority
- CN
- China
- Prior art keywords
- multiplier
- circuit
- output
- multiply
- input
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000012545 processing Methods 0.000 claims abstract description 90
- 238000009825 accumulation Methods 0.000 claims abstract description 54
- 230000036961 partial effect Effects 0.000 claims description 223
- 238000007906 compression Methods 0.000 claims description 197
- 230000006835 compression Effects 0.000 claims description 196
- 238000013461 design Methods 0.000 description 15
- 238000010586 diagram Methods 0.000 description 14
- 238000000034 method Methods 0.000 description 12
- 238000013528 artificial neural network Methods 0.000 description 10
- 230000002829 reductive effect Effects 0.000 description 10
- 230000000670 limiting effect Effects 0.000 description 7
- 230000004913 activation Effects 0.000 description 6
- 230000009977 dual effect Effects 0.000 description 6
- 230000009466 transformation Effects 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000003062 neural network model Methods 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000009795 derivation Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000005406 washing Methods 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000010267 cellular communication Effects 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000001035 drying Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000003071 parasitic effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000001556 precipitation Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Landscapes
- Complex Calculations (AREA)
Abstract
本公开涉及乘法器、乘累加电路、运算电路、处理器和计算装置。一种运算电路包括输入处理电路和乘累加电路。输入处理电路接收第一数并且在第一数是有符号数的情况下通过对第一数的符号位取反来输出第一数作为用于馈入乘累加电路的第一乘数,并在第一数是无符号数的情况下直接输出第一数作为用于馈入乘累加电路的第一乘数。输入处理电路还接收预先已知的第二数并直接输出第二数作为用于馈入乘累加电路的第二乘数。乘累加电路包括乘法子电路和累加子电路。乘法子电路包括用于执行第一乘数与第二乘数的乘法运算并提供无符号输出的乘法器。累加子电路接收乘法子电路的输出并对其累加。
Description
技术领域
本公开涉及数据处理技术领域,并且更具体地,涉及一种乘法器、乘累加电路、运算电路以及包含这种乘法器或乘累加电路或运算电路的处理器和计算装置。
背景技术
乘累加(Multiply and Accumulate,MAC)电路用于完成向量相乘、矩阵相乘和向量矩阵互乘等乘累加运算,是协处理器、数字信号处理器、中央处理器和专用指令处理器、神经网络处理器等处理器中极其重要的运算子系统。特别地,人工智能的飞速发展凸显了神经网络处理器的重要作用,使得神经网络处理器逐渐成为智能计算技术的基石。卷积计算单元是神经网络处理器的核心单元,其实现离不开乘累加电路对激活数据和权重(Weight)数据的乘累加运算,因此乘累加电路的设计对于卷积计算单元和神经网络处理器至关重要。
发明内容
根据本公开的第一方面,提供了一种乘法器,用于执行第一乘数与第二乘数的乘法运算,所述第一乘数是无符号数,所述第二乘数是预先已知的无符号数或有符号数。所述乘法器包括:部分积产生电路,被配置为接收所述第一乘数与所述第二乘数并输出其部分积;部分积求和电路,所述部分积求和电路的输入端耦接到所述部分积产生电路的输出端,所述部分积求和电路被配置为接收由所述部分积产生电路输出的部分积并对其进行求和。所述部分积产生电路包括用于输出所述第二乘数的最高一位与所述第一乘数的部分积的第一部分积产生单元。所述第一部分积产生单元被配置为:在所述第二乘数是无符号数的情况下,输出所述第二乘数的最高一位与所述第一乘数的部分积;在所述第二乘数是有符号数的情况下,输出所述第二乘数的最高一位与所述第一乘数的部分积的取反结果。
在一些实施例中,所述第一部分积产生单元被配置为:接收指示所述第二乘数是无符号数还是有符号数的符号标志位;在所述符号标志位指示所述第二乘数是无符号数的情况下,输出所述第二乘数的最高一位与所述第一乘数的部分积;在所述符号标志位指示所述第二乘数是有符号数的情况下,输出所述第二乘数的最高一位与所述第一乘数的部分积的取反结果。
在一些实施例中,所述第一部分积产生单元包括:与门组,被配置为接收所述第二乘数的最高一位与所述第一乘数并对其执行与运算;异或门组,被配置为接收所述与门组的与运算结果与所述符号标志位并对其执行异或运算,其中,所述异或门组的异或运算结果被提供作为所述第一部分积产生单元的输出。
在一些实施例中,所述第一部分积产生单元包括:与非门组,被配置为接收所述第二乘数的最高一位与所述第一乘数并对其执行与非运算;异或门组,被配置为接收所述与非门组的与非运算结果与所述符号标志位并对其执行异或运算,其中,所述异或门组的异或运算结果被提供作为所述第一部分积产生单元的输出。
在一些实施例中,所述第一部分积产生单元包括:异或门,被配置为接收所述第二乘数的最高一位与所述符号标志位并对其执行异或运算;多路选择器组,所述多路选择器组中的每个多路选择器被配置为接收所述符号标志位作为第一输入,接收所述异或门的异或运算结果作为第二输入,接收所述第一乘数的相应位作为选择信号,并根据所述选择信号输出所述第一输入或所述第二输入,其中,所述多路选择器组的输出被提供作为所述第一部分积产生单元的输出。
在一些实施例中,所述第一部分积产生单元包括:异或门,被配置为接收所述第二乘数的最高一位与所述符号标志位并对其执行异或运算;反相多路选择器组,所述反相多路选择器组中的每个反相多路选择器被配置为接收所述符号标志位作为第一输入,接收所述异或门的异或运算结果作为第二输入,接收所述第一乘数的相应位作为选择信号,并根据所述选择信号输出所述第一输入或所述第二输入,其中,所述反相多路选择器组的输出被提供作为所述第一部分积产生单元的输出。
在一些实施例中,所述第一部分积产生单元包括:与门组,被配置为接收所述第二乘数的最高一位与所述第一乘数并对其执行与运算;多路选择器组,被配置为接收所述与门组的与运算结果作为第一输入,接收所述与门组的所述与运算结果的取反结果作为第二输入,接收所述符号标志位作为选择信号,并根据所述选择信号输出所述第一输入或所述第二输入,其中,所述多路选择器组的输出被提供作为所述第一部分积产生单元的输出。
在一些实施例中,所述乘法器具有双输出端,并且所述部分积求和电路包括:部分积压缩电路,所述部分积压缩电路的输入端耦接到所述部分积产生电路的输出端,所述部分积压缩电路被配置为接收由所述部分积产生电路输出的部分积并对其进行压缩求和以输出部分积的压缩求和结果的和位与进位。在一些实施例中,所述乘法器具有单输出端,并且所述部分积求和电路包括:部分积压缩电路,所述部分积压缩电路的输入端耦接到所述部分积产生电路的输出端,所述部分积压缩电路被配置为接收由所述部分积产生电路输出的部分积并对其进行压缩求和以输出部分积的压缩求和结果的和位与进位;最终相加电路,所述最终相加电路的输入端耦接到所述部分积压缩电路的输出端,所述最终相加电路被配置为接收由所述部分积压缩电路输出的和位与进位并对其进行求和。
在一些实施例中,所述部分积产生电路还包括用于输出经修改的第二乘数与所述第一乘数的部分积的第二部分积产生单元,所述经修改的第二乘数是通过移除所述第二乘数的最高一位得到的并且是无符号数,所述第二部分积产生单元包括用于执行无符号数与无符号数的乘法运算的乘法器。
在一些实施例中,所述部分积产生电路还包括多个第二部分积产生单元,所述多个第二部分积产生单元中的每个第二部分积产生单元用于输出所述第二乘数的除最高一位以外的相应位与所述第一乘数的部分积。
在一些实施例中,所述多个第二部分积产生单元中的每个第二部分积产生单元包括:与门组,被配置为接收所述第二乘数的除最高一位以外的相应位与所述第一乘数并对其执行与运算,其中,所述与门组的与运算结果被提供作为所述第二部分积产生单元的输出。在一些实施例中,所述多个第二部分积产生单元中的每个第二部分积产生单元包括:与非门组,被配置为接收所述第二乘数的除最高一位以外的相应位与所述第一乘数并对其执行与非运算,其中,所述与非门组的与非运算结果被提供作为所述第二部分积产生单元的输出。
在一些实施例中,所述部分积求和电路的输出端耦接到附加相加电路的输入端,所述附加相加电路被配置为在所述第二乘数是有符号数的情况下将所述部分积求和电路的输出与常数相加,所述常数是(1-2z)·2w-1,其中z是所述第一乘数的位宽,w是所述第二乘数的位宽。
根据本公开的第二方面提供了一种乘累加电路,用于执行多对第一数和第二数的乘累加运算,所述第二数是预先已知的。所述乘累加电路包括至少一个乘累加单元。所述乘累加单元包括:乘法子电路,所述乘法子电路包括用于执行第一乘数与第二乘数的乘法运算的乘法器,所述第一乘数从所述第一数获得并且是无符号数,所述第二乘数从所述第二数获得并且是预先已知的无符号数或有符号数,所述乘法器被配置为提供作为无符号数的输出;以及累加子电路,所述累加子电路的输入端耦接到所述乘法子电路的输出端,所述累加子电路被配置为接收所述乘法子电路的输出并对其累加。
在一些实施例中,所述乘法子电路的所述乘法器是根据本公开的第一方面的任一实施例所述的乘法器。
在一些实施例中,所述乘法子电路包括多个所述乘法器,每个所述乘法器被配置为接收相应一对第一乘数与第二乘数并对所述相应一对第一乘数与第二乘数求积。
在一些实施例中,所述累加子电路包括:n级压缩树、第一加法器、第二加法器与寄存器组,所述乘法子电路的输出端耦接到所述n级压缩树中的第1级压缩树的相应输入端,所述n级压缩树中的第i级压缩树的输出端耦接到所述n级压缩树中的第(i+1)级压缩树的相应输入端,所述n级压缩树中的第n级压缩树的输出端耦接到所述第一加法器的相应输入端,所述第一加法器的输出端耦接到所述第二加法器的相应输入端,所述第二加法器的输出端耦接到所述寄存器组的输入端,所述寄存器组的输出端耦接到所述第二加法器的相应输入端,其中,n为正整数,i=1,2,…,n-1。
在一些实施例中,所述累加子电路包括:n级压缩树、全加器、加法器与寄存器组,所述乘法子电路的输出端耦接到所述n级压缩树中的第1级压缩树的相应输入端,所述n级压缩树中的第i级压缩树的输出端耦接到所述n级压缩树中的第(i+1)级压缩树的相应输入端,所述n级压缩树中的第n级压缩树的输出端耦接到所述全加器的相应输入端,所述全加器的输出端耦接到所述加法器的相应输入端,所述加法器的输出端耦接到所述寄存器组的输入端,所述寄存器组的输出端耦接到所述全加器的相应输入端,其中,n为正整数,i=1,2,…,n-1。
在一些实施例中,所述累加子电路包括:n级压缩树、加法器与寄存器组,所述乘法子电路的输出端耦接到所述n级压缩树中的第1级压缩树的相应输入端,所述n级压缩树中的第i级压缩树的输出端耦接到所述n级压缩树中的第(i+1)级压缩树的相应输入端,所述n级压缩树中的第n级压缩树的输出端耦接到所述加法器的相应输入端,所述加法器的输出端耦接到所述寄存器组的输入端,所述寄存器组的输出端耦接到所述n级压缩树中的第1级压缩树的相应输入端,其中,n为正整数,i=1,2,…,n-1。
在一些实施例中,所述累加子电路包括:具有一级或多级全加器的全加器模块、加法器与寄存器组,所述乘法子电路的输出端耦接到所述全加器模块的相应输入端,所述全加器模块的输出端耦接到所述加法器的相应输入端,所述加法器的输出端耦接到所述寄存器组的输入端,所述寄存器组的输出端耦接到所述全加器模块的相应输入端。
在一些实施例中,所述至少一个乘累加单元包括两个或更多个所述乘累加单元,所述乘累加电路还包括求和单元,所述求和单元的输入端耦接到所述两个或更多个所述乘累加单元的输出端,所述求和单元被配置为接收所述两个或更多个所述乘累加单元的输出并对其求和。
在一些实施例中,所述求和单元包括s级压缩树和加法器,所述两个或更多个所述乘累加单元中的每个乘累加单元的输出端耦接到所述s级压缩树中的第1级压缩树的相应输入端,所述s级压缩树中的第i级压缩树的输出端耦接到所述s级压缩树中的第(i+1)级压缩树的相应输入端,所述s级压缩树中的第s级压缩树的输出端耦接到所述加法器的相应输入端,其中,s为非负整数,i=1,2,…,s-1。
在一些实施例中,所述求和单元还包括附加寄存器组,所述附加寄存器组的输入端耦接到所述加法器的输出端,并且所述附加寄存器组的输出端耦接到所述s级压缩树中的第1级压缩树的相应输入端。
在一些实施例中,所述乘累加电路还包括设置在所述两个或更多个所述乘累加单元中的每个乘累加单元的输出端与所述求和单元的相应输入端之间的控制元件,所述控制元件被配置为接收控制信号和相应乘累加单元的输出并根据所述控制信号而控制是否在所述控制元件的输出端向所述求和单元提供所述相应乘累加单元的输出。
在一些实施例中,所述乘法子电路的输入端还耦接到输入处理电路的输出端,所述输入处理电路被配置为接收所述第一数和所述第二数并且:在所述第一数是有符号数的情况下,通过对所述第一数的符号位取反来输出所述第一数作为用于馈入所述乘法器的第一乘数,以及输出所述第二数作为用于馈入所述乘法器的第二乘数;在所述第一数是无符号数的情况下,输出所述第一数作为用于馈入所述乘法器的第一乘数,以及输出所述第二数作为用于馈入所述乘法器的第二乘数。
在一些实施例中,所述输入处理电路包括:异或门,被配置为接收所述第一数的最高一位和指示所述第一数是无符号数还是有符号数的符号标志位并对其执行异或运算,其中,所述异或门的异或运算结果被提供作为由所述输入处理电路输出的所述第一数的最高一位。在一些实施例中,所述输入处理电路包括:多路选择器,被配置为接收所述第一数的最高一位作为第一输入,接收所述第一数的最高一位的取反结果作为第二输入,接收指示所述第一数是无符号数还是有符号数的符号标志位作为选择信号,并根据所述选择信号输出所述第一输入或所述第二输入,其中,所述多路选择器的输出被提供作为由所述输入处理电路输出的所述第一数的最高一位。
在一些实施例中,所述乘法子电路的输入端还耦接到输入处理电路的输出端,所述输入处理电路被配置为接收所述第一数和所述第二数,所述输入处理电路还被配置为根据所述乘法器的位宽拆分所述第一数,并且所述乘累加电路还包括耦接至所述乘法子电路的输出端的移位器,所述移位器被配置为执行与所述拆分对应的移位运算。在一些实施例中,所述输入处理电路还被配置为根据所述乘法器的位宽拆分所述第二数。在一些实施例中,所述输入处理电路被配置为接收预先根据所述乘法器的位宽拆分的所述第二数。
在一些实施例中,所述累加子电路的输出端耦接到输出处理电路的输入端,所述输出处理电路被配置为执行以下至少之一:将所述累加子电路的输出与第一常数相减,所述第一常数是所述多对第一数和第二数中的所有与作为有符号数的第一数配对的第二数在左移(z-1)位后的总和,其中z是所述第一数的位宽;或者将所述累加子电路的输出与第二常数相加,所述第二常数是(1-2z)·2w-1·y,其中z是所述第一乘数的位宽,w是所述第二乘数的位宽,y是从所述多对第一数和第二数中的所有第二数获得的作为有符号数的第二乘数的数量。
根据本公开的第三方面,提供了一种运算电路,包括:根据本公开的第二方面的任一实施例所述的乘累加电路;以及输入处理电路,所述输入处理电路的输出端耦接到所述乘累加电路的输入端。所述输入处理电路被配置为接收所述第一数和所述第二数并且:在所述第一数是有符号数的情况下,通过对所述第一数的符号位取反来输出所述第一数作为用于馈入所述乘法器的第一乘数,以及输出所述第二数作为用于馈入所述乘法器的第二乘数;在所述第一数是无符号数的情况下,输出所述第一数作为用于馈入所述乘法器的第一乘数,以及输出所述第二数作为用于馈入所述乘法器的第二乘数。
在一些实施例中,所述输入处理电路包括:异或门,被配置为接收所述第一数的最高一位和指示所述第一数是无符号数还是有符号数的符号标志位并对其执行异或运算,其中,所述异或门的异或运算结果被提供作为由所述输入处理电路输出的所述第一数的最高一位。在一些实施例中,所述输入处理电路包括:多路选择器,被配置为接收所述第一数的最高一位作为第一输入,接收所述第一数的最高一位的取反结果作为第二输入,接收指示所述第一数是无符号数还是有符号数的符号标志位作为选择信号,并根据所述选择信号输出所述第一输入或所述第二输入,其中,所述多路选择器的输出被提供作为由所述输入处理电路输出的所述第一数的最高一位。
在一些实施例中,所述输入处理电路还被配置为根据所述乘法器的位宽拆分所述第一数,并且所述乘累加电路还包括耦接至所述乘法子电路的输出端的移位器,所述移位器被配置为执行与所述拆分对应的移位运算。在一些实施例中,所述输入处理电路还被配置为根据所述乘法器的位宽拆分所述第二数。在一些实施例中,所述输入处理电路被配置为接收预先根据所述乘法器的位宽拆分的所述第二数。
在一些实施例中,所述运算电路还包括输出处理电路,所述乘累加电路的输出端耦接到所述输出处理电路的输入端。所述输出处理电路被配置为执行以下至少之一:将所述乘累加电路的输出与第一常数相减,所述第一常数是所述多对第一数和第二数中的所有与作为有符号数的第一数配对的第二数在左移(z-1)位后的总和,其中z是所述第一数的位宽;或者将所述乘累加电路的输出与第二常数相加,所述第二常数是(1-2z)·2w-1·y,其中z是所述第一乘数的位宽,w是所述第二乘数的位宽,y是从所述多对第一数和第二数中的所有第二数获得的作为有符号数的第二乘数的数量。
根据本公开的第四方面,提供了一种运算电路,包括:根据本公开的第一方面的任一实施例所述的乘法器;以及附加相加电路,所述乘法器的输出端耦接到所述附加相加电路的输入端,所述附加相加电路被配置为在所述第二乘数是有符号数的情况下将所述部分积求和电路的输出与常数相加,所述常数是(1-2z)·2w-1,其中z是所述第一乘数的位宽,w是所述第二乘数的位宽。
根据本公开的第五方面,提供了一种处理器,包括根据本公开的第一方面的任一实施例所述的乘法器或者根据本公开的第二方面的任一实施例所述的乘累加电路或者根据本公开的第三方面和第四方面的任一实施例所述的运算电路。
根据本公开的第六方面,提供了一种计算装置,包括根据本公开的第五方面所述的处理器。
通过以下参照附图对本公开的示例性实施例的详细描述,本公开的其它特征及其优点将会变得更为清楚。
附图说明
构成说明书的一部分的附图描述了本公开的实施例,并且连同说明书一起用于解释本公开的原理。
参照附图,根据下面的详细描述,可以更加清楚地理解本公开,其中:
图1至图3分别示出了根据本公开的一些比较示例的乘累加电路的电路图;
图4和图5分别示出了根据本公开的一些实施例的运算电路的示意性框图;
图6至图9分别示出了根据本公开的一些实施例的用于实现图4和图5的运算电路的输入处理电路的示例电路图;
图10至图17分别示出了根据本公开的一些实施例的用于实现图4和图5的运算电路的乘累加电路的示例电路图;
图18示出了根据本公开的一些实施例的用于实现图4和图5的运算电路的乘累加电路的示意性框图;
图19至图22分别示出了根据本公开的一些实施例的用于实现图18的乘累加电路的示例电路图;
图23示出了根据本公开的一些实施例的乘法器的示意性框图;
图24至图27分别示出了根据本公开的一些实施例的用于实现图23的乘法器的示例电路图;
图28至图30分别示出了根据本公开的一些实施例的用于实现图23的乘法器的第一部分积产生单元的示例电路图;
图31示出了根据本公开的一些实施例的包括图23的乘法器和附加相加电路的运算电路的示意性框图。
注意,在以下说明的实施方式中,有时在不同的附图之间共同使用同一附图标记来表示相同部分或具有相同功能的部分,而省略其重复说明。在本说明书中,使用相似的标号和字母表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
为了便于理解,在附图等中所示的各结构的位置、尺寸及范围等有时不表示实际的位置、尺寸及范围等。因此,所公开的发明并不限于附图等所公开的位置、尺寸及范围等。此外,附图不必按比例绘制,一些特征可能被放大以示出具体组件的细节。
具体实施方式
下面将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。也就是说,本文中的结构及方法是以示例性的方式示出,来说明本公开中的结构和方法的不同实施例。然而,本领域技术人员将会理解,它们仅仅说明可以用来实施的本公开的示例性方式,而不是穷尽的方式。此外,附图不必按比例绘制,一些特征可能被放大以示出具体组件的细节。
另外,对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。
图1示出了一种乘累加电路10,其包括乘法器11、加法器12、寄存器13。假设乘累加电路10要计算x对数的乘累加(a1·b1+a2·b2+……ax·bx,x为正整数),那么在x个周期中的每个周期,将这x对数中的相应一对数ak、bk(k=1,2,……,x)作为乘数馈入乘法器11以计算这对数的乘积ak·bk,然后ak·bk经由加法器12和寄存器13被累加。比如,这x对数从1到x依次馈送,那么在第1个周期结束时寄存器13中存储的结果为a1·b1,第2个周期结束时寄存器13中存储的结果为a1·b1+a2·b2,一直到第x个周期结束时寄存器13中存储的结果为a1·b1+a2·b2+……ax·bx。
但是,乘累加电路10无法兼容不同数据类型的乘累加运算,所述不同数据类型包括有符号数和无符号数。对于有符号数而言,其最高位(bit)用于表示符号并可称为符号位,符号位为0可表示正数,符号位为1可表示负数。而对于无符号数而言,其最高位仅用于表示数值。例如,假设ak=0b10101010,bk=0b01010101:如果ak、bk都是有符号数,则ak·bk的十进制表示为(-86×85)=-7310;如果ak、bk都是无符号数,则ak·bk的十进制表示为(170×85)=14450。可见,如果乘累加电路10本身设计用于执行有符号数的乘累加运算,则一旦将无符号数输入乘累加电路10就会得到错误的运算结果,而如果乘累加电路10本身设计用于执行无符号数的乘累加运算,则一旦将有符号数输入乘累加电路10就会得到错误的运算结果。
为了使同一乘累加电路可以兼容不同数据类型的乘累加运算,可以在将ak、bk馈入乘累加电路之前对ak、bk进行符号位扩展。具体地,对有符号数扩展符号位(即往高位补符号位),以及对无符号数扩展0(即往高位补0)。例如,对于有符号数0101,扩展一位为00101,扩展四位为00000101;对于有符号数1010,扩展一位为11010,扩展四位为11111010;对于无符号数0101,扩展一位为00101,扩展四位为00000101;对于无符号数1010,扩展一位为01010,扩展四位为00001010。具体扩展的位数可根据乘法器的设计位宽来确定,或者反过来说,可以根据具体扩展的位数来设计乘法器。一般情况下,为了节省乘法器资源,只扩展一位。符号位扩展的核心在于只扩展数据位宽而不改变数据大小。在符号位扩展前,ak、bk均有可能是有符号数或无符号数,但在符号位扩展后,ak、bk都是有符号数。图2示出了乘累加电路20,乘累加电路20包括支持有符号数乘以有符号数并提供有符号输出的乘法器21、加法器22和寄存器23,用于对经符号位扩展的ak、bk执行乘累加运算。乘累加电路20可以兼容不同数据类型的乘累加运算,但是在一方面,符号位扩展使得数据位宽增大导致相应设计的乘法器21需要耗费更多的资源,在另一方面,乘法器21执行有符号数与有符号数的乘法并提供有符号输出,导致后续的数据通路(不仅是乘累加电路20中的加法器22、寄存器23等,还可能包括耦接到乘累加电路20的输出端的其它电路)变得复杂,增加了设计难度和电路面积与功耗。
替代地,还可以通过以下数学推导将有符号数ak(假设位宽为z)与有符号数bk(假设位宽为w)的乘累加运算sum统一为无符号数的运算。
令Ak=ak+2z-1(相当于对ak的符号位取反),并,
令Bk=bk+2w-1(相当于对bk的符号位取反),
x·2z+w-2可作为常数项析出。可用图3所示的乘累加电路30处理。如图3所示,乘累加电路30除了包括支持无符号数乘以无符号数并提供无符号输出的乘法器31、加法器32、寄存器33之外,还包括加法器34和减法器35。乘法器31用于计算Ak·Bk,加法器34用于计算(2w-1Ak+2z-1Bk),减法器35用于计算[Ak·Bk-(2w-1Ak+2z-1Bk)],加法器32和寄存器33用于进行累加。
类似地,可以通过以下数学推导将有符号数ak(假设位宽为z)与无符号数bk(假设位宽为w)的乘累加运算sum统一为无符号数的运算。
令Ak=ak+2z-1(相当于对ak的符号位取反),
同样可以用乘累加电路30来处理,但是需要使用第一控制元件361来将加法器34的第一输入端处的输入置为0,加法器34的第二输入端可以接收2z-1bk。这样的第一控制元件361例如可以通过与门来实现,所述与门的第一输入端可接收希望由加法器34处理的输入(2w-1Ak或稍后将描述的2w-1ak)而第二输入端可接收控制信号Sc1,输出端可耦接到加法器34的第一输入端。对于与门,通过使Sc1=0来禁止加法器34的第一输入端接收与门的第一输入端处的输入并且通过使Sc1=1来允许加法器34的第一输入端接收与门的第一输入端处的输入。
类似地,可以通过以下数学推导将无符号数ak(假设位宽为z)与有符号数bk(假设位宽为w)的乘累加运算sum统一为无符号数的运算。
令Bk=bk+2w-1(相当于对bk的符号位取反),
同样可以用乘累加电路30来处理,但是需要使用第二控制元件362来将加法器34的第二输入端处的输入置为0,加法器34的第一输入端可以接收2w-1ak。这样的第二控制元件362同样例如可以通过与门来实现,所述与门的第一输入端可接收希望由加法器34处理的输入(2z-1Bk或2z-1bk)而第二输入端可接收控制信号Sc2,输出端可耦接到加法器34的第二输入端。对于与门,通过使Sc2=0来禁止加法器34的第二输入端接收与门的第一输入端处的输入并且通过使Sc2=1来允许加法器34的第二输入端接收与门的第一输入端处的输入。
对于无符号数ak(假设位宽为z)与无符号数bk(假设位宽为w)的乘累加运算同样可以用乘累加电路30来处理,此时第一控制元件361和第二控制元件362被配置为禁止加法器34的第一输入端和第二输入端接收与门的第一输入端处的输入。
由此,乘累加电路30可以兼容不同数据类型的乘累加运算。由于无需符号位扩展,因此乘累加电路30的乘法器31相比于乘累加电路20的乘法器21可消耗更少的资源。但是,乘累加电路30相比于乘累加电路20具有显著增多的电路元件。在一方面,乘累加电路30具有额外的加法器34和控制元件361、362来处理额外的累加项,加法器的资源耗费是很大的,并且控制元件361、362的引入也使得控制逻辑变得复杂。在另一方面,虽然乘法器31支持无符号数乘以无符号数并提供无符号输出,但乘累加电路30还具有减法器35,其仍提供有符号输出,使得在减法器35之后的数据通路(不仅是乘累加电路30中的加法器32、寄存器33等,还可能包括耦接到乘累加电路30的输出端的其它电路)变得复杂,增加了设计难度和电路面积与功耗。
本公开的发明人注意到,在一些涉及两组数据的乘累加运算的应用场景中,其中一组数据可以是预先已知的。例如,在神经网络处理器的卷积计算单元中,需要乘累加电路对激活数据和权重数据的乘累加运算。出于非限制性说明目的,激活数据可以是图像数据,其例如来源于摄像头实时拍摄的要由神经网络处理器搭载的神经网络模型进行目标检测的图像,而权重数据来源于该神经网络模型的权重参数。由于训练好的神经网络模型的权重参数是固定的,因此权重数据是预先已知的。相比之下,激活数据是预先未知的,只有等到要处理的时候才能确定。可以利用这一特点来优化运算电路。
具体地,可以通过以下数学推导将预先未知的ak(假设位宽为z)与预先已知的bk(假设位宽为w)的乘累加运算sum统一为如下运算。
当ak是无符号数并且bk是有符号数或无符号数时,
因此,用乘累加电路计算即可。
当ak是有符号数并且bk是有符号数或无符号数时,
令Ak=ak+2z-1(相当于对ak的符号位取反),
因为bk是预先已知的,所以(-2z-1bk)可以作为常数项析出。因此,同样仅需用乘累加电路计算即可。
为此,本公开提供了一种运算电路,其能够利用上述运算原理执行多对第一数和预先已知的第二数的乘累加运算。下面将结合附图详细描述根据本公开的各种实施例的运算电路。应理解,实际的运算电路可能还会包括附加的部件,而为了避免模糊本公开的要点,附图中没有示出并且本公开也没有讨论这些附加的部件。
图4示出了根据本公开的一些实施例的运算电路1000,其用于执行多对第一数ak和第二数bk的乘累加运算,其中第二数bk是预先已知的。假设第一数ak的位宽为z,第二数bk的位宽为w,这仅仅出于说明目的,而不旨在限制第一数ak和第二数bk的位宽相同或不同。事实上,本公开可适用第一数ak和第二数bk的位宽相同和不同两种情况。在很多实际情况中,第一数ak和第二数bk的位宽相同。
如图4所示,运算电路1000包括乘累加电路100和输入处理电路200。输入处理电路200的输入端可提供运算电路1000的输入端IN。输入处理电路200的输出端耦接到乘累加电路100的输入端。乘累加电路100的输出端可提供运算电路1000的输出端OUT。
图5示出了运算电路1000的另一示例1000’,其与运算电路1000相比进一步包括输出处理电路300。乘累加电路100的输出端耦接到输出处理电路300的输入端。输出处理电路300的输出端可提供运算电路1000’的输出端OUT。输出处理电路300是用来处理上述数学推导中析出的常数项。具体地,输出处理电路300可被配置为将乘累加电路100的输出与第一常数相减,所述第一常数是所述多对第一数ak和第二数bk中的所有与作为有符号数的第一数ak配对的第二数bk在左移(z-1)位后(2z-1bk)的总和。在一些情况下,图4的运算电路1000就已足够,并不需要设置专门的输出处理电路300来处理这些常数项。例如,在神经网络处理器的卷积计算单元中,除了对激活数据和权重数据进行乘累加运算之外,还需要将该乘累加运算的结果与偏置项(Bias)相加。在卷积计算单元中,偏置项的加法本身就已有专门的硬件负责,因此上述常数项可提前与偏置项融合到一起,而不需要付出额外的硬件代价来处理。
输入处理电路200可被配置为接收第一数ak和第二数bk。输入处理电路200还可被配置为在第一数ak是有符号数的情况下,通过对第一数ak的符号位取反来输出第一数Ak作为用于馈入乘累加电路100的乘法器的第一乘数,以及输出第二数bk作为用于馈入乘累加电路100的乘法器的第二乘数。输入处理电路200还可被配置为在第一数ak是无符号数的情况下,输出第一数ak作为用于馈入乘累加电路100的乘法器的第一乘数,以及输出第二数bk作为用于馈入乘累加电路100的乘法器的第二乘数。也就是说,输入处理电路200不会对预先已知的第二数bk做任何变换,而不论第二数bk是有符号数还是无符号数。至于预先未知的第一数ak,输入处理电路200只会对作为有符号数的第一数ak做取反符号位的变换,而不会对作为无符号数的第一数ak做任何变换。
可以设计任何合适的电路来实现根据第一数ak的数据类型选择性地对第一数ak做取反符号位的变换。
在一些实施例中,输入处理电路200可包括被配置为接收第一数ak的最高一位和指示第一数ak是无符号数还是有符号数的符号标志位并对其执行异或运算的异或门,该异或门的异或运算结果被提供作为由输入处理电路200输出的第一数Ak的最高一位。图6示出了输入处理电路200的示例200A,其包括异或门XOR。异或门XOR接收第一数ak的最高一位ak(z-1)和指示第一数ak是无符号数还是有符号数的符号标志位Flag1并对其执行异或运算。Flag1=0指示第一数ak是无符号数,此时异或门XOR的输出为ak(z-1)。Flag1=1指示第一数ak是有符号数,此时异或门XOR的输出为ak(z-1)的取反结果。将异或门XOR的输出与第一数ak的除最高一位ak(z-1)以外的其它位ak(z-2):0拼接成Ak。另外,输入处理电路200不对第二数bk做任何变换,因此可以直接输出bk。
替代地,在另一些实施例中,输入处理电路200也可包括多路选择器,其可被配置为接收第一数ak的最高一位作为第一输入,接收第一数ak的最高一位的取反结果作为第二输入,接收指示第一数ak是无符号数还是有符号数的符号标志位作为选择信号,并根据选择信号输出第一输入或第二输入。多路选择器的输出可被提供作为由输入处理电路200输出的第一数Ak的最高一位。可利用非门接收第一数ak的最高一位并对其执行非运算来获得第一数ak的最高一位的取反结果。图7示出了输入处理电路200的示例200B,其包括多路选择器MUX和非门NOT。非门NOT用于得到第一数ak的最高一位ak(z-1)的取反结果。多路选择器MUX接收第一数ak的最高一位ak(z-1)作为第一输入,接收第一数ak的最高一位ak(z-1)的取反结果作为第二输入,接收指示第一数ak是无符号数还是有符号数的符号标志位Flag1作为选择信号,并根据选择信号输出第一输入或第二输入。选择信号Flag1=0指示第一数ak是无符号数,此时多路选择器MUX的输出为第一输入即ak(z-1)。选择信号Flag1=1指示第一数ak是有符号数,此时多路选择器MUX的输出为第二输入即ak(z-1)的取反结果。将多路选择器MUX的输出与第一数ak的除最高一位ak(z-1)以外的其它位ak(z-2):0拼接成Ak。另外,输入处理电路200不对第二数bk做任何变换,因此可以直接输出bk。
可以将乘累加电路100设计为适配第一数ak和第二数bk的位宽。反过来,也可以根据乘累加电路100尤其是其乘法器的设计位宽来拆分第一数ak和第二数bk。以第一数ak和第二数bk的位宽为2r、乘法器的设计位宽为r为例,说明所述拆分的运算原理如下。
akh是第一数ak的最高r位,akl是第一数ak的最低r位,bkh是第二数bk的最高r位,bkl是第二数bk的最低r位。由此,一个大位宽2r乘法运算可以等效为4个小位宽r乘法运算。“·22r”、“·2r”是移位运算,分别代表左移2r位和左移r位,其可由移位器来执行。
因此,在一些实施例中,输入处理电路200还可被配置为根据乘累加电路100的乘法器的位宽拆分第一数ak,并且乘累加电路100还包括耦接至乘法子电路111的输出端的移位器,所述移位器被配置为执行与所述拆分对应的移位运算。另外,对于预先已知的第二数bk,其拆分也可由输入处理电路200执行,即输入处理电路200还可被配置为根据乘累加电路100的乘法器的位宽拆分第二数bk。图8示出了输入处理电路200的示例200C,其相比于示例200A,还进一步将Ak拆分为Akh(Ak的高位部分)和Akl(Ak的低位部分),并将bk拆分为bkh(bk的高位部分)和bkl(bk的低位部分)。注意,这里所示的拆分仅出于说明目的而非限制,例如还可以将Ak和bk中的每一者拆分成更多部分,每个部分的位宽可以相同或不同。不过,由于第二数bk是预先已知的,因此其拆分可被预先处理(例如,经由编译器等软件),故输入处理电路200可替代地被配置为接收预先根据乘法器的位宽拆分的第二数bk。图9示出了输入处理电路200的示例200D,其相比于示例200C,没有执行bk的拆分,而是直接接收预先拆分好的bkh和bkl。因此,与示例200C相比,示例200D的硬件代价更小,因为消除了用于拆分bk的相应电路部件。可以理解的是,虽然图8和图9示出的是先变换再拆分,但是先拆分再变换也是可行的。
在输入处理电路200处理完第一数和第二数之后,乘累加电路100将执行作为无符号数的第一数与预先已知的第二数的乘累加运算。返回参考图4和图5,乘累加电路100可包括至少一个乘累加单元110。乘累加单元110包括乘法子电路111和累加子电路112。乘法子电路111可包括用于执行第一乘数与第二乘数的乘法运算的乘法器。第一乘数从(例如,经由输入处理电路200处理的)第一数获得并且是无符号数。第二乘数从(例如,经由输入处理电路200处理的)第二数获得并且是预先已知的无符号数或有符号数。乘法子电路111的乘法器支持无符号数乘以无符号数和无符号数乘以有符号数二者,并且被配置为提供作为无符号数的输出。累加子电路112的输入端耦接到乘法子电路111的输出端。累加子电路112被配置为接收乘法子电路112的输出并对其累加。
在一些实施例中,乘法子电路111可包括一个或多个乘法器,所述一个或多个乘法器中的每个乘法器被配置为接收相应一对第一乘数与第二乘数并对所述相应一对第一乘数与第二乘数求积。乘法子电路111中的乘法器可以是具有单输出端的乘法器,也可以是具有双输出端的乘法器,这可根据具体需要进行配置。当乘法子电路111包括多个乘法器时,可实现并行计算。
在一些实施例中,累加子电路112可包括n级压缩树、第一加法器、第二加法器与寄存器组,乘法子电路111的输出端耦接到所述n级压缩树中的第1级压缩树的相应输入端,所述n级压缩树中的第i级压缩树的输出端耦接到所述n级压缩树中的第(i+1)级压缩树的相应输入端,所述n级压缩树中的第n级压缩树的输出端耦接到第一加法器的相应输入端,第一加法器的输出端耦接到第二加法器的相应输入端,第二加法器的输出端耦接到寄存器组的输入端,寄存器组的输出端耦接到第二加法器的相应输入端,其中,n为正整数,i=1,2,…,n-1。
在一些实施例中,累加子电路112可包括n级压缩树、全加器、加法器与寄存器组,乘法子电路111的输出端耦接到所述n级压缩树中的第1级压缩树的相应输入端,所述n级压缩树中的第i级压缩树的输出端耦接到所述n级压缩树中的第(i+1)级压缩树的相应输入端,所述n级压缩树中的第n级压缩树的输出端耦接到全加器的相应输入端,全加器的输出端耦接到加法器的相应输入端,加法器的输出端耦接到寄存器组的输入端,寄存器组的输出端耦接到全加器的相应输入端,其中,n为正整数,i=1,2,…,n-1。
在一些实施例中,累加子电路112可包括n级压缩树、加法器与寄存器组,乘法子电路111的输出端耦接到所述n级压缩树中的第1级压缩树的相应输入端,所述n级压缩树中的第i级压缩树的输出端耦接到所述n级压缩树中的第(i+1)级压缩树的相应输入端,所述n级压缩树中的第n级压缩树的输出端耦接到加法器的相应输入端,加法器的输出端耦接到寄存器组的输入端,寄存器组的输出端耦接到所述n级压缩树中的第1级压缩树的相应输入端,其中,n为正整数,i=1,2,…,n-1。
n级压缩树中的每级压缩树可包括一个压缩树或并行的多个压缩树。常见的压缩树包括4:2压缩树、3:2压缩树等具有两个输出端的压缩树,还包括5:3压缩树、6:3压缩树、7:3压缩树等具有三个输出端的压缩树。累加子电路112中使用的压缩树可以是现在已有的或以后开发的具有任意数量的输入端和输出端的压缩树,也可以是通过多个现在已有的压缩树的组合实现的具有任意数量的输入端和输出端的压缩树模块,只要能够实现对乘法子电路111的输出结果的压缩即可。
在另一些实施例中,压缩树也可以被替代地实现为全加器或者全加器与半加器的组合。例如,在一些实施例中,累加子电路112可包括具有一级或多级全加器的全加器模块、加法器与寄存器组,乘法子电路111的输出端耦接到全加器模块的相应输入端,全加器模块的输出端耦接到加法器的相应输入端,加法器的输出端耦接到寄存器组的输入端,寄存器组的输出端耦接到所述全加器模块的相应输入端。
寄存器组中包括的寄存器的数量可取决于寄存器的位宽和输入数据的位宽。另外,与寄存器组类似地,对于在本文其它地方提到的各种电路元件组(包括与门组、非门组、与非门组、异或门组、多路选择器组、反相多路选择器组等),其电路元件的数量均可取决于电路设计位宽。
出于非限制性说明目的,图10至图17分别示出了根据本公开的一些实施例的用于实现图4和图5的运算电路1000、1000’的乘累加电路100的示例电路图。
如图10所示,乘累加电路100A包括乘累加单元110,乘累加单元110包括乘法子电路111和累加子电路112。在图10的示例中,乘法子电路111包括一个具有单输出端的乘法器1110。假设乘累加电路100A用于x对数的乘累加(a1·b1+a2·b2+……ax·bx,x为正整数),其中ak(k=1,2,……,x)已经由例如图6的输入处理电路200A处理成Ak,那么在x个周期中的每个周期,可以将这x对数中的相应一对数Ak、bk分别作为第一乘数和第二乘数馈入乘法器1110,乘法器1110计算这对数的乘积Ak·bk并提供无符号输出,然后Ak·bk经由累加子电路112被累加。累加子电路112包括加法器(Adder)ADD和寄存器组1121。加法器ADD的第一输入端耦接到乘法器1110的输出端,第二输入端耦接到寄存器组1121的输出端,并且输出端耦接到寄存器组1121的输入端。假设乘累加电路100A要计算的x对数从1到x依次馈送到乘法器1110,那么在第1个周期结束时寄存器组1121中存储的结果为A1·b1,第2个周期结束时寄存器组1121中存储的结果为(A1·b1+A2·b2),一直到第x个周期结束时寄存器组1121中存储的结果为(A1·b1+A2·b2+……Ax·bx)。
与图2的乘累加电路20相比,图10的乘累加电路100A的乘法器1110提供无符号输出,使得后续数据通路简单,降低了设计难度和电路面积与功耗。与图3的乘累加电路30相比,图10的乘累加电路100A具有减少的部件数量(减少了一个加法器、一个减法器和两个控制元件),无需复杂的控制逻辑,而且乘法器1110的后续数据通路均无符号,降低了设计难度和电路面积与功耗。
图11示出了乘累加电路100B,其与图10的乘累加电路100A相比,区别在于乘法器1110从单输出端变为双输出端,相应地加法器ADD变为全加器(Full Adder)FA。乘法器通常包括三个部分,部分积产生部分、部分积累加部分和最终相加部分。具有双输出端的乘法器相比于具有单输出端的乘法器可减少最终相加部分,即可以减少一个加法器,因此采用具有双输出端的乘法器相比于采用具有单输出端的乘法器可实现降低的功耗。另外,用全加器FA替代加法器ADD也带来了降低的功耗。
图12示出了乘累加电路100C,其与图10的乘累加电路100A相比,区别在于乘法子电路111包括m个并行的乘法器11101、11102、……1110m(m为大于1的正整数),相应地累加子电路112进一步包括m:2压缩树1120和加法器ADD0,其中,乘法器11101、11102、……1110m的输出端耦接到压缩树1120的相应输入端,压缩树1120的输出端耦接到加法器ADD0的相应输入端,加法器ADD0的输出端耦接到加法器ADD的输入端。当m:2压缩树不便设计时,也可采用现有压缩树的组合来实现m个输入到2个输出的压缩。通过乘法器的并行设计,乘累加电路100C在每个周期可实现m对数的乘累加,相比于图10的乘累加电路100A和图11的乘累加电路100B各自所需的x个周期,乘累加电路100C只需要(x/m)个周期,因而具有提高的运算效率。可以根据实际需要灵活配置并行的乘法器的数量m。
相比之下,图2的乘累加电路20是很难实现乘法器21的并行计算的,因为乘法器21提供的是有符号输出,这使得压缩树的设计将变得极其复杂。因此,乘累加电路20的运算效率较低。而对于图3的乘累加电路30而言,虽然其乘法器31提供的是无符号输出因而可以相对容易地设计压缩树以利于并行计算,但是同时也要与多个乘法器31相应地增加多个加法器34及相关控制元件361、362,这使得电路元件数量大幅增加从而使得电路面积与功耗增加。
图13示出了乘累加电路100D,其与图12的乘累加电路100C相比,区别在于用全加器FA替换了加法器ADD0,其中,压缩树1120的输出端耦接到全加器FA的相应输入端,全加器FA的输出端耦接到加法器ADD的相应输入端,寄存器组1121的输出端改为耦接到全加器FA的相应输入端。通过用全加器FA替换了加法器ADD0,乘累加电路100D实现了节省的资源和降低的功耗。
图14示出了乘累加电路100E,其与图13的乘累加电路100D相比,区别在于省略了全加器FA,其中,压缩树1120的输出端耦接到加法器ADD的相应输入端,寄存器组1121的输出端改为耦接到压缩树1120的相应输入端。
图15示出了可用于图12至图14中的每一者的压缩树1120的示例布置。如图15所示,压缩树1120包括两级压缩树,其中第1级压缩树包括两个并行的压缩树11201,第2级压缩树包括一个压缩树11202。图15相当于用三个4:2压缩树的组合实现了一个8:2压缩树。从另一个角度看,当图15与图12至图14采用同种压缩树时,前者可容纳更大的乘法器规模,从而进一步提高电路处理性能。另外,虽然图15未图示,但是在将一级压缩树分成两级压缩树后,还可以在这两级压缩树之间插入寄存器组,从而实现更优的时序。
图16示出了乘累加电路100F,其与图14的乘累加电路100E相比,区别在于用具有多级全加器FA的全加器模块1120’替代了压缩树1120。
图17示出了乘累加电路100G,其与图13的乘累加电路100D相比,区别在于还在压缩树1120的输出端与全加器FA的相应输入端之间设置了移位器11231、11232。例如,假设Ak、bk是经由图8、图9的输入处理电路200处理的,那么可以通过移位器11231、11232的移位配置来实现与输入处理电路200执行的拆分对应的移位运算。因此,乘累加电路100G具备了支持混合比特乘累加运算的能力。作为替代方案,也可以改为在每个乘法器1110的每个输出端与压缩树1120的相应输入端之间设置对应移位器,但这显然需要数量大得多的移位器,从而造成电路面积与功耗的不必要增加。
可以理解,前述乘累加电路都可以通过增设移位器来增加支持混合比特乘累加运算的能力。例如,在图10中,可在乘法器1110的输出端与加法器ADD的输入端之间增设移位器;在图11中,可在乘法器1110的每个输出端与全加器FA的相应输入端之间增设移位器;在图12中,可在每个乘法器1110的每个输出端与压缩树1120的相应输入端之间增设移位器,或在压缩树1120的每个输出端与加法器ADD0的相应输入端之间增设移位器,或在加法器ADD0的输出端与加法器ADD的输入端之间增设移位器;在图13中,可在每个乘法器1110的每个输出端与压缩树1120的相应输入端之间增设移位器,或在压缩树1120的每个输出端与全加器FA的相应输入端之间增设移位器;在图14中,可在每个乘法器1110的每个输出端与压缩树1120的相应输入端之间增设移位器;在图16中,可在每个乘法器1110的每个输出端与全加器模块1120’的相应输入端之间增设移位器。
图18示出了根据本公开的一些实施例的可用于实现图4和图5的运算电路1000和1000’的乘累加电路100的乘累加电路100’。乘累加电路100’包括两个或更多个乘累加单元1101、1102、……110j(j为大于1的正整数)以及求和单元120。乘累加单元1101、1102、……110j中的每个乘累加单元的输出端耦接到求和单元120的相应输入端。乘累加单元1101、1102、……110j中的每个乘累加单元的输入端可提供乘累加电路100’的输入端IN,而求和单元120的输出端可提供乘累加电路100’的输出端OUT。
乘累加单元1101、1102、……110j各自包括乘法子电路1111、1112、……111j以及累加子电路1121、1122、……112j。求和单元120被配置为接收乘累加单元1101、1102、……110j的输出并对其求和。
乘累加单元1101、1102、……110j中的每一个乘累加单元类似于前述乘累加电路100的乘累加单元110,因此前面关于乘累加单元110的描述及其各种实施例同样适用于此,在此不多赘述。可以理解的是,乘累加单元1101、1102、……110j可以具有相同的设计,也可以具有不同的设计。
相比于只具有一个乘累加单元110的乘累加电路100,乘累加电路100’具有多个并行的乘累加单元1101、1102、……110j,每个乘累加单元承担一部分累加功能,使得可以将每个乘累加单元保持在适当规模,避免了单个乘累加单元的电路规模过大造成时序收敛困难,便于降低毛刺功耗并优化电路速度。
求和单元120可以包括s级压缩树和加法器,乘累加单元1101、1102、……110j中的每个乘累加单元的输出端耦接到所述s级压缩树中的第1级压缩树的相应输入端,所述s级压缩树中的第i级压缩树的输出端耦接到所述s级压缩树中的第(i+1)级压缩树的相应输入端,所述s级压缩树中的第s级压缩树的输出端耦接到所述加法器的相应输入端,其中,s为非负整数,i=1,2,…,s-1。应理解,当s=0时,意味着求和单元120只包括加法器而不包括压缩树。例如,当j为2时,求和单元120可只包括加法器。每级压缩树可包括一个压缩树或并行的多个压缩树。与以上类似地,这里的压缩树也可以被替代地实现为全加器或者全加器与半加器的组合。
另外,在一些实施例中,求和单元120还可包括附加寄存器组,所述附加寄存器组的输入端耦接到所述加法器的输出端,并且所述附加寄存器组的输出端耦接到所述s级压缩树中的第1级压缩树的相应输入端。应理解,当s=0时,求和单元120只包括加法器,此时求和单元120可还包括第二加法器和附加寄存器组,所述附加寄存器组的输入端耦接到所述第二加法器的输出端,并且所述附加寄存器组的输出端和所述加法器的输出端耦接到所述第二加法器的相应输入端。由于附加寄存器组的引入使得求和单元120也具备了累加功能,这使得乘累加单元1101、1102、……110j中的每一个乘累加单元的累加子电路不必完全累加,降低了对累加子电路的寄存器组的位宽要求,使得累加子电路的寄存器组中的寄存器可以具有较小的比特数进而具有较低的面积和功耗。
由于在乘累加单元1101、1102、……110j的整个运算过程中,求和单元120都要一直翻转(翻转表示电路信号从0到1或从1到0)以执行求和运算,导致乘累加电路100’的动态功耗较高。因此,在一些实施例中,乘累加电路100’还包括设置在乘累加单元1101、1102、……110j中的每个乘累加单元的输出端与求和单元120的相应输入端之间的控制元件,所述控制元件可被配置为接收控制信号和相应乘累加单元的输出并根据所述控制信号而控制是否在所述控制元件的输出端向求和单元120提供所述相应乘累加单元的输出。例如,控制元件可包括以下至少之一:与门、与非门、多路选择器、反相多路选择器。
控制信号可以被配置为使得控制元件在相应乘累加单元完成每轮累加之前不在控制元件的输出端向求和单元120提供所述相应乘累加单元的输出,并且被配置为在所述相应乘累加单元完成每轮累加之后且在开始下一轮累加之前在控制元件的输出端向求和单元120提供所述相应乘累加单元的输出。注意,这里的“每轮累加”指的是从每个乘累加单元的寄存器组每次清空其中存储的结果以准备累加到寄存器组下次清空其中存储的结果以准备累加期间所进行的累加,而不是指寄存器组每次更新其中存储的结果。
在控制元件的控制下,求和单元120在各乘累加单元完成本轮累加之前不会接收到各乘累加单元的输出,因而不会执行求和运算。或者说,在控制元件的控制下,求和单元120在各乘累加单元完成本轮累加之前所接收到的输入一直为零。在各乘累加单元完成本轮累加之后,求和单元120才会在控制元件的控制下接收到各乘累加单元的输出并对其求和。也就是说,在乘累加单元1101、1102、……110j的整个运算过程中,各乘累加单元一直翻转,但是求和单元120不会翻转。仅在乘累加单元1101、1102、……110j的运算结束后,求和单元120才会翻转一个周期用于求和。通过控制元件的隔离,求和单元120的翻转频率相比于乘累加单元1101、1102、……110j的翻转频率要低得多。乘累加单元1101、1102、……110j可视为乘累加电路100’的动区,而求和单元120可视为乘累加电路100’的静区。通过动区与静区的划分,乘累加电路100’实现了降低的功耗。
出于非限制性说明目的,图19至图22分别示出了根据本公开的一些实施例的用于实现图18的乘累加电路100’的示例电路图。
图19示出了乘累加电路100H,其与图17的乘累加电路100G相比,区别在于乘累加单元的数量从1个变成了j个,并且还增设了求和单元120以便对来自j个乘累加单元1101、……110j的输出进行求和。求和单元120包括一级压缩树1210和加法器1200。当j=2时,可省略压缩树1210。通过乘累加单元1101、……110j的并行设计,乘累加电路100H的每个乘累加单元在每个周期都可实现m对数的乘累加。相比于图17的乘累加电路100G所需的(x/m)个周期,图19的乘累加电路100H只需要(x/jm+1)个周期,因而具有提高的运算效率。可以根据实际需要灵活配置并行的乘累加单元的数量j。另外,相比于乘累加电路100G使用单个累加子电路进行累加,乘累加电路100H使用多个累加子电路进行累加,可以避免一个累加子电路的电路规模过大造成时序收敛困难。
参考图20,其示出了求和单元120在加法器1200前设置了两级压缩树,其中第1级压缩树包括两个并行的压缩树12101、12102,第2级压缩树包括一个压缩树1220。乘累加单元1101、……110j的输出端可耦接到第1级压缩树12101、12102的相应输入端,第1级压缩树12101、12102的输出端可耦接到第2级压缩树1220的相应输入端,第2级压缩树1220的输出端可耦接到加法器1200,加法器1200的输出端可提供求和单元120的输出端也提供乘累加电路的输出端。图20相当于用三个4:2压缩树的组合实现了一个8:2压缩树。图20的求和单元120的压缩树相比于图19的求和单元120的压缩树可具有更简单的设计。从另一个角度看,当图20的求和单元120与图19的求和单元120采用同种压缩树时,前者可容纳更大的乘累加单元规模,从而进一步提高电路处理性能。
图21示出了乘累加电路100I,其与图19的乘累加电路100H相比,区别在于求和单元120还包括附加寄存器组1201,附加寄存器组1201的输入端耦接到加法器1200的输出端,并且附加寄存器组1201的输出端耦接到第1级压缩树1210的相应输入端。附加寄存器组1201的引入使得求和单元120也具备了累加功能,这使得乘累加单元1101、……110j中的每一个乘累加单元的累加子电路不必完全累加,降低了对累加子电路的寄存器组的位宽要求,使得累加子电路的寄存器组中的寄存器可以具有较小的比特数进而具有较低的面积和功耗。
图22示出了乘累加电路100J,其与图21的乘累加电路100I相比,区别在于在乘累加单元1101、……110j的输出端与求和单元120的相应输入端之间还设置有控制元件1131、……113j,控制元件1131、……113j接收相应乘累加单元1101、……110j的输出和控制信号Sc1、……Scj作为输入并被配置为根据控制信号Sc1、……Scj而控制是否在控制元件1131、……113j的输出端向求和单元120提供相应乘累加单元1101、……110j的输出。控制元件1131、……113j中的每一个可包括以下至少之一:与门、与非门、多路选择器、反相多路选择器。例如,控制元件1131、……113j中的每一个可包括与门组或与非门组或多路选择器组或反相多路选择器组。与门组或与非门组或多路选择器组或反相多路选择器组中的元件数量可取决于数据位宽。例如,当控制元件1131、……113j各自包括与门组时,可在控制信号Sc1、……Scj为0的情况下不在其输出端提供相应乘累加单元的寄存器组的输出(替代地,可在其输出端输出0)而在控制信号Sc1、……Scj为1的情况下在其输出端提供相应乘累加单元的寄存器组的输出。当控制元件1131、……113j各自包括多路选择器组时,控制信号Sc1、……Scj可充当选择信号,0可充当第一输入,而相应乘累加单元的寄存器组的输出可充当第二输入,由此多路选择器组可在控制信号Sc1、……Scj=0的情况下在其输出端提供作为0的第一输入(即不在其输出端提供作为相应乘累加单元的寄存器组的输出的第二输入)而在控制信号Sc1、……Scj=1的情况下在其输出端提供作为相应乘累加单元的寄存器组的输出的第二输入。当控制元件1131、……113j各自包括与非门组时的情形以及当控制元件1131、……113j各自包括反相多路选择器组时的情形分别与当控制元件1131、……113j各自包括与门组时的情形以及当控制元件1131、……113j各自包括多路选择器组时的情形类似,但是会提供反相输出,这可以通过调整求和单元120的配置(例如,增设非门或反相器等)来在求和单元120内部进行校正。
举例来说,假设乘累加电路100J要实现1024对数的乘累加(A1·b1+A2·b2+……A1024·b1024),乘累加电路100J包括4个乘累加单元(j=4),每个乘累加单元的乘法子电路包括4个乘法器(m=4),那么典型的乘累加运算过程可以如下进行:16个乘法器并行计算以在每个周期输出16个乘法运算结果;4个累加子电路并行累加,每个累加子电路中的寄存器组被配置为每8个周期输出所存储结果并清空(意味着一轮累加包括8个周期),因此在相应控制元件的控制下每个乘累加单元每次提供给求和单元的输出包括32对数的乘累加结果,也即求和单元每隔8个周期会接收到128对数的乘累加结果;为了完成1024对数的乘累加,求和单元中的压缩树、加法器和附加寄存器组仅需要翻转8次,因此实现了功耗降低。
如前面已提到的,由于预先未知的第一数ak可被处理为无符号数Ak,因此乘累加电路100、100’的乘法器只需支持无符号数Ak与预先已知数bk(无论是有符号数还是无符号数)的乘法运算即可。可以通过以下数学推导将无符号数Ak(假设位宽为z)与预先已知数bk(假设位宽为w)的乘法运算mul的运算过程统一如下。
当bk为无符号数时,
mul=Ak·bk
mul=Ak·(bk(w-1)·2w-1+bk[(w-2):0])
mul=Ak·bk(w-1)·2w-1+ Ak·bk[(w-2):0]
其中,bk(w-1)是bk的最高一位,bk[(w-2):0]是bk的除最高一位bk(w-1)以外的其他位。“·2w-1”是移位运算,意味着左移(w-1)位。
当bk为有符号数时,
mul=Ak·bk
mul=Ak·(-bk(w-1)·2w-1+ bk[(w-2):0])
mul=Ak·(-bk(w-1)·2w-1)+ Ak·bk[(w-2):0]
mul=[~(Ak·bk(w-1))]·2w-1+ Ak·bk[(w-2):0]+(1-2z) ·2w-1
其中,~是按位取反运算符。(1-2z)·2w-1可作为常数项析出。因此,无符号数Ak与预先已知的无符号数bk的运算过程类似于无符号数Ak与预先已知的有符号数bk的运算过程,其在求Ak与bk的除最高一位bk(w-1)以外的其他位bk[(w-2):0]的部分积(Ak·bk[(w-2):0])方面是相同的,区别在于求Ak与bk的最高一位bk(w-1)]的部分积方面,因为对于有符号数bk而言其最高一位是符号位并不表示数值。
根据上述运算原理,本公开提供了一种乘法器,其可用于执行第一乘数与第二乘数的乘法运算,所述第一乘数是无符号数,所述第二乘数是预先已知的无符号数或有符号数。这样的乘法器可以包括部分积产生电路和部分积求和电路。部分积产生电路被配置为接收所述第一乘数与所述第二乘数并输出其部分积。部分积求和电路的输入端耦接到部分积产生电路的输出端。部分积求和电路被配置为接收由部分积产生电路输出的部分积并对其进行求和。特别地,部分积产生电路可以包括用于输出所述第二乘数的最高一位与所述第一乘数的部分积的第一部分积产生单元。第一部分积产生单元被配置为:在所述第二乘数是无符号数的情况下,输出所述第二乘数的最高一位与所述第一乘数的部分积;在所述第二乘数是有符号数的情况下,输出所述第二乘数的最高一位与所述第一乘数的部分积的取反结果。例如,第一部分积产生单元可被配置为:接收指示所述第二乘数是无符号数还是有符号数的符号标志位;在所述符号标志位指示所述第二乘数是无符号数的情况下,输出所述第二乘数的最高一位与所述第一乘数的部分积;在所述符号标志位指示所述第二乘数是有符号数的情况下,输出所述第二乘数的最高一位与所述第一乘数的部分积的取反结果。第一部分积产生单元也可通过其它方式确定所述第二乘数是无符号数还是有符号数。
图23示出了根据本公开的一些实施例的乘法器1110。如图23所示,乘法器1110包括部分积产生电路510和部分积求和电路520。部分积产生电路510的输入端可提供乘法器1110的输入端IN。部分积求和电路520的输入端耦接到部分积产生电路510的输出端。部分积求和电路520的输出端可提供乘法器1110的输出端OUT。
部分积产生电路510被配置为接收作为无符号数的第一乘数与预先已知的第二乘数并输出其部分积。部分积产生电路510可包括用于输出第二乘数的最高一位与第一乘数的部分积的第一部分积产生单元511。第一部分积产生单元511可以接收第二乘数的最高一位与第一乘数并且接收指示第二乘数是无符号数还是有符号数的符号标志位。第一部分积产生单元511被配置为在所接收的符号标志位指示第二乘数是无符号数的情况下,输出第二乘数的最高一位与第一乘数的部分积。第一部分积产生单元511还被配置为在所接收的符号标志位指示第二乘数是有符号数的情况下,输出第二乘数的最高一位与第一乘数的部分积的取反结果。
在一些实施例中,第一部分积产生单元511包括:与门组,被配置为接收第二乘数的最高一位与第一乘数并对其执行与运算;异或门组,被配置为接收与门组的与运算结果与指示第二乘数是无符号数还是有符号数的符号标志位并对其执行异或运算。异或门组的异或运算结果被提供作为第一部分积产生单元511的输出。
在一些实施例中,第一部分积产生单元511包括:与非门组,被配置为接收第二乘数的最高一位与第一乘数并对其执行与非运算;异或门组,被配置为接收与非门组的与非运算结果与指示第二乘数是无符号数还是有符号数的符号标志位并对其执行异或运算。异或门组的异或运算结果被提供作为第一部分积产生单元511的输出。
在一些实施例中,第一部分积产生单元511包括:异或门,被配置为接收第二乘数的最高一位与指示第二乘数是无符号数还是有符号数的符号标志位并对其执行异或运算;多路选择器组,多路选择器组中的每个多路选择器被配置为接收符号标志位作为第一输入,接收异或门的异或运算结果作为第二输入,接收第一乘数的相应位作为选择信号,并根据选择信号输出第一输入或第二输入。多路选择器组的输出被提供作为第一部分积产生单元511的输出。
在一些实施例中,第一部分积产生单元511包括:异或门,被配置为接收第二乘数的最高一位与指示第二乘数是无符号数还是有符号数的符号标志位并对其执行异或运算;反相多路选择器组,反相多路选择器组中的每个反相多路选择器被配置为接收符号标志位作为第一输入,接收异或门的异或运算结果作为第二输入,接收第一乘数的相应位作为选择信号,并根据选择信号输出第一输入或第二输入。反相多路选择器组的输出被提供作为第一部分积产生单元511的输出。
在一些实施例中,第一部分积产生单元511包括:与门组,被配置为接收第二乘数的最高一位与第一乘数并对其执行与运算;多路选择器组,被配置为接收所述与门组的与运算结果作为第一输入,接收所述与门组的所述与运算结果的取反结果作为第二输入,接收指示第二乘数是无符号数还是有符号数的符号标志位作为选择信号,并根据所述选择信号输出所述第一输入或所述第二输入,多路选择器组的输出被提供作为第一部分积产生单元511的输出。可利用非门组接收所述与门组的与运算结果并对其执行非运算来获得所述与门组的所述与运算结果的取反结果。另外,与门组也可以被替换为与非门组。附加地或替代地,多路选择器组也可以被替换为反相多路选择器组。
部分积产生电路510还可包括用于输出第二乘数的除最高一位以外的其他位与第一乘数的部分积的第二部分积产生单元512。
在一些实施例中,第二部分积产生单元512可用于输出经修改的第二乘数(bk[(w-2):0])与第一乘数(Ak)的部分积,所述经修改的第二乘数(bk[(w-2):0])是通过移除第二乘数(bk)的最高一位(bk(w-1))得到的并且是无符号数。在这样的实施例中,第二部分积产生单元512可包括用于执行无符号数与无符号数的乘法运算的乘法器。
替代于将bk[(w-2):0]作为整体来产生部分积的方案,也可以将bk[(w-2):0]拆分为多个部分来分别产生部分积,每个部分可以包括bk[(w-2):0]中的一位或多位。例如,第二部分积产生单元512可包括多个第二部分积产生单元,每个第二部分积产生单元用于输出第二乘数(bk)的除最高一位(bk(w-1))以外的相应位与第一乘数(Ak)的部分积。在一些实施例中,每个第二部分积产生单元可包括与门组,其被配置为接收第二乘数的除最高一位以外的相应位与第一乘数并对其执行与运算。与门组的与运算结果被提供作为每个第二部分积产生单元的输出。在另一些实施例中,每个第二部分积产生单元也可包括与非门组,其被配置为接收第二乘数的除最高一位以外的相应位与第一乘数并对其执行与非运算。与非门组的与非运算结果被提供作为每个第二部分积产生单元的输出。
继续参考图23,部分积求和电路520被配置为接收由部分积产生电路510输出的部分积并对其进行求和。在乘法器1110被配置为具有双输出端的情况下,部分积求和电路520可包括部分积压缩电路521。部分积压缩电路521的输入端耦接到部分积产生电路510的输出端。部分积压缩电路521被配置为接收由部分积产生电路510输出的部分积并对其进行压缩求和以输出部分积的压缩求和结果的和位与进位。在乘法器1110被配置为具有单输出端的情况下,部分积求和电路520除了部分积压缩电路521外可进一步包括最终相加电路522。最终相加电路522的输入端耦接到部分积压缩电路521的输出端。最终相加电路522被配置为接收由部分积压缩电路521输出的和位与进位并对其进行求和。
出于非限制性说明目的,图24至图27分别示出了根据本公开的一些实施例的用于实现图23的乘法器1110的示例电路图。
如图24所示,乘法器1110A具有双输出端,并且包括部分积产生电路510和部分积求和电路520。部分积产生电路510包括第一部分积产生单元511和多个第二部分积产生单元5120、……、512w-3、512w-2。第一部分积产生单元511包括与门组AND和异或门组XOR,其中与门组AND接收第一乘数Ak与第二乘数bk的最高一位bk(w-1)并对其执行与运算,异或门组XOR接收该与门组AND的与运算结果与指示第二乘数是无符号数还是有符号数的符号标志位Flag2并对其执行异或运算。异或门组XOR的异或运算结果被提供作为第一部分积产生单元511的输出。第二部分积产生单元5120、……、512w-3、512w-2中的每一者包括与门组AND,该与门组AND接收第一乘数Ak与第二乘数bk的bk0、……、bk(w-3)、bk(w-2)中的相应一者并对其执行与运算,与运算结果被提供作为第二部分积产生单元的输出。部分积求和电路520可以包括压缩树作为部分积压缩电路521。第一部分积产生单元511和多个第二部分积产生单元5120、……、512w-3、512w-2的输出端分别耦接到部分积压缩电路521的相应输入端,而部分积压缩电路521的两个输出端提供乘法器1110A的两个输出端。在图24中,部分积压缩电路521被示出为单个w:2压缩树,其也可以采用多个压缩树的组合(例如,多级压缩树的级联,每级压缩树可包括一个压缩树或并行的多个压缩树),或者也可以被替代地实现为全加器或者全加器与半加器的组合。
图25示出了乘法器1110B,其相比于图24的乘法器1110A,区别在于部分积求和电路520还包括加法器作为最终相加电路522,以使得乘法器1110B具有单输出端。
图26示出了乘法器1110C,其相比于图24的乘法器1110A,区别在于用与非门组NAND替代了部分积产生电路510中的与门组AND。这导致乘法器1110C的部分积产生电路510的输出相对于乘法器1110A的部分积产生电路510的输出是反相的。相应地,乘法器1110C的部分积压缩电路521’相比于乘法器1110A的部分积压缩电路521需要做出相应调整,以在内部校正乘法器1110C的部分积产生电路510的反相输出。这种调整例如但不限于通过在部分积压缩电路521’中并入非门或反相器来实现。
图27示出了乘法器1110D,其相比于图26的乘法器1110C,区别在于部分积求和电路520还包括加法器作为最终相加电路522,以使得乘法器1110D具有单输出端。
出于非限制性说明目的,图28至图30还分别示出了根据本公开的一些实施例的用于实现图23的乘法器1110的第一部分积产生单元511的示例电路图。
如图28所示,第一部分积产生单元511A包括异或门XOR,其被配置为接收第二乘数bk的最高一位bk(w-1)与指示第二乘数是无符号数还是有符号数的符号标志位Flag2并对其执行异或运算。第一部分积产生单元511A还包括多路选择器组MUX。每个多路选择器MUX被配置为接收符号标志位Flag2作为第一输入q0,接收异或门XOR的异或运算结果作为第二输入q1,接收第一乘数Ak的相应位(Ak0、……Ak(z-2)、Ak(z-1))作为选择信号,并根据选择信号输出第一输入q0或第二输入q1。具体地,当选择信号为0时多路选择器MUX输出第一输入q0,当选择信号为1时多路选择器MUX输出第二输入q1。多路选择器组MUX的输出被提供作为第一部分积产生单元511A的输出。图28的第一部分积产生单元511A相比于图24和图25的第一部分积产生单元511可具有更少的逻辑门数量。
图29示出了第一部分积产生单元511B,其相比于图28的第一部分积产生单元511A,区别在于用反相多路选择器组MUXI替代了多路选择器组MUX。这导致第一部分积产生单元511B的输出相对于第一部分积产生单元511A的输出是反相的。相应地,乘法器1110的部分积压缩电路521也需要做出相应调整,以在内部校正第一部分积产生单元511B的反相输出。这种调整例如但不限于通过在部分积压缩电路521中并入非门或反相器来实现。图29的第一部分积产生单元511B相比于图26和图27的第一部分积产生单元511可具有更少的逻辑门数量。
图30示出了第一部分积产生单元511C,其包括与门组AND、非门组NOT和多路选择器组MUX。与门组AND被配置为接收第二乘数bk的最高一位bk(w-1)与第一乘数Ak并对其执行与运算。非门组NOT被配置为接收与门组AND的与运算结果并对其执行非运算(取反)。多路选择器组MUX被配置为接收与门组AND的与运算结果作为第一输入,接收非门组NOT的非运算结果作为第二输入,接收指示第二乘数bk是无符号数还是有符号数的符号标志位Flag2作为选择信号,并根据选择信号输出第一输入或第二输入。多路选择器组MUX的输出被提供作为第一部分积产生单元511的输出。与以上类似地,与门组也可以被替换为与非门组。附加地或替代地,多路选择器组也可以被替换为反相多路选择器组。相应地,乘法器1110的部分积压缩电路521可酌情做出相应调整。
另外,关于析出的常数项(1-2z)·2w-1,在一些实施例中,参考图31,乘法器1110的部分积求和电路520的输出端耦接到附加相加电路600的输入端,附加相加电路600可被配置为在第二乘数bk是有符号数的情况下将部分积求和电路520的输出与常数相加,所述常数是(1-2z)·2w-1,其中z是第一乘数Ak的位宽,w是第二乘数bk的位宽。在一些实施例中,乘法器1110也可进一步包括附加相加电路600。在另一些实施例中,可以不使用附加相加电路600,而将常数项(1-2z)·2w-1与前面提到的析出的常数项(-2z-1bk)一并处理。例如,在一些实施例中,如图5所示的输出处理电路300可被配置为执行以下至少之一:将累加子电路112的输出与第一常数相减,所述第一常数是所述多对第一数ak和第二数bk中的所有与作为有符号数的第一数ak配对的第二数bk在左移(z-1)位后(2z-1bk)的总和,其中z是第一数ak的位宽;或者将累加子电路112的输出与第二常数相加,所述第二常数是(1-2z)·2w-1·y,其中z是第一乘数Ak的位宽,w是第二乘数bk的位宽,y是从所述多对第一数ak和第二数bk中的所有第二数bk获得的作为有符号数的第二乘数bk的数量。在一些情况下,并不需要设置专门的输出处理电路300或附加相加电路600来处理这些常数项(1-2z)·2w-1。例如,在神经网络处理器的卷积计算单元中,除了对激活数据和权重数据进行乘累加运算之外,还需要将该乘累加运算的结果与偏置项相加。在卷积计算单元中,偏置项的加法本身就已有专门的硬件负责,因此上述常数项(1-2z)·2w-1和(-2z-1bk)均可提前与偏置项融合到一起,而不需要付出额外的硬件代价来处理。
本公开在另一方面还提供了一种处理器,其可包括根据前述任一实施例所述的乘法器或根据前述任一实施例所述的乘累加电路或根据前述任一实施例所述的运算电路。例如,这样的处理器可以是协处理器、数字信号处理器、中央处理器、专用指令处理器、神经网络处理器等各种处理器。在这样的处理器是神经网络处理器的情况下,其卷积计算单元可包括根据前述任一实施例所述的乘法器或根据前述任一实施例所述的乘累加电路或根据前述任一实施例所述的运算电路。
本公开在又一方面还提供了一种计算装置,其可包括根据前述任意实施例所述的处理器。计算装置的示例可以包括但不限于消费电子产品、消费电子产品的部件、电子测试设备、诸如基站的蜂窝通信基础设施等。计算装置的示例可以包括但不限于诸如智能电话的移动电话、诸如智能手表或耳机的可穿戴计算设备、电话、电视、计算机监视器、计算机、调制解调器、手持式计算机、膝上型计算机、平板计算机、个人数字助理(PDA)、微波炉、冰箱、如汽车电子系统的车载电子系统、立体声系统、DVD播放器、CD播放器、如MP3播放器的数字音乐播放器、收音机、便携式摄像机、如数码相机的相机、便携式存储芯片、洗衣机、烘干机、洗衣机/烘干机、外围设备、时钟等。此外,计算装置可包括非完整产品。
说明书及权利要求中的词语“左”、“右”、“前”、“后”、“顶”、“底”、“上”、“下”、“高”、“低”等,如果存在的话,用于描述性的目的而并不一定用于描述不变的相对位置。应当理解,这样使用的词语在适当的情况下是可互换的,使得在此所描述的本公开的实施例,例如,能够在与在此所示出的或另外描述的那些取向不同的其它取向上操作。例如,在附图中的装置倒转时,原先描述为在其它特征“之上”的特征,此时可以描述为在其它特征“之下”。装置还可以以其它方式定向(旋转90度或在其它方位),此时将相应地解释相对空间关系。
在说明书及权利要求中,称一个元件位于另一元件“之上”、“附接”至另一元件、“连接”至另一元件、“耦接”至另一元件、或“接触”另一元件等时,该元件可以直接位于另一元件之上、直接附接至另一元件、直接连接至另一元件、直接耦接至另一元件或直接接触另一元件,或者可以存在一个或多个中间元件。相对照的是,称一个元件“直接”位于另一元件“之上”、“直接附接”至另一元件、“直接连接”至另一元件、“直接耦接”至另一元件或“直接接触”另一元件时,将不存在中间元件。在说明书及权利要求中,一个特征布置成与另一特征“相邻”,可以指一个特征具有与相邻特征重叠的部分或者位于相邻特征上方或下方的部分。
如在此所使用的,词语“示例性的”意指“用作示例、实例或说明”,而不是作为将被精确复制的“模型”。在此示例性描述的任意实现方式并不一定要被解释为比其它实现方式优选的或有利的。而且,本公开不受在技术领域、背景技术、发明内容或具体实施方式中所给出的任何所表述的或所暗示的理论所限定。
如在此所使用的,词语“基本上”意指包含由设计或制造的缺陷、器件或元件的容差、环境影响和/或其它因素所致的任意微小的变化。词语“基本上”还允许由寄生效应、噪声以及可能存在于实际的实现方式中的其它实际考虑因素所致的与完美的或理想的情形之间的差异。
另外,仅仅为了参考的目的,还可以在本文中使用“第一”、“第二”等类似术语,并且因而并非意图限定。例如,除非上下文明确指出,否则涉及结构或元件的词语“第一”、“第二”和其它此类数字词语并没有暗示顺序或次序。
还应理解,“包括/包含”一词在本文中使用时,说明存在所指出的特征、整体、步骤、操作、单元和/或组件,但是并不排除存在或增加一个或多个其它特征、整体、步骤、操作、单元和/或组件以及/或者它们的组合。
另外,当在本申请中使用时,词语“此处”,“以上”、“以下”、“下文”、“上文”和类似含义的词语应当指代本申请的整体而不是本申请的任何特定部分。此外,除非另有明确说明或者在所使用的上下文中以其它方式理解,否则本文使用的条件语言,例如“可以”、“可能”、“例如”、“诸如”等等通常旨在表达某些实施例包括,而其它实施例不包括某些特征、元素和/或状态。因此,这种条件语言通常不旨在暗示一个或多个实施例以任何方式需要特征、元素和/或状态,或者是否包括这些特征、元素和/或状态或者在任何特定实施例中执行这些特征、元素和/或状态。
在本公开中,术语“提供”从广义上用于涵盖获得对象的所有方式,因此“提供某对象”包括但不限于“购买”、“制备/制造”、“布置/设置”、“安装/装配”、和/或“订购”对象等。
如本文所使用的,术语“和/或”包括相关联的列出项目中的一个或多个的任何和所有组合。本文中使用的术语只是出于描述特定实施例的目的,并不旨在限制本公开。如本文中使用的,单数形式“一”、“一个”和“该”也旨在包括复数形式,除非上下文另外清楚指示。
本领域技术人员应当意识到,在上述操作之间的边界仅仅是说明性的。多个操作可以结合成单个操作,单个操作可以分布于附加的操作中,并且操作可以在时间上至少部分重叠地执行。而且,另选的实施例可以包括特定操作的多个实例,并且在其它各种实施例中可以改变操作顺序。但是,其它的修改、变化和替换同样是可能的。可以以任何方式和/或与其它实施例的方面或元件相结合地组合以上公开的所有实施例的方面和元件,以提供多个附加实施例。因此,本说明书和附图应当被看作是说明性的,而非限制性的。实际上,这里描述的新颖设备、方法和系统可以以各种其它形式体现。此外,在不脱离本公开的精神的情况下,可以对这里描述的方法和系统的形式进行各种省略、替换和改变。例如,虽然以给定布置呈现块,但是替代实施例可以执行具有不同组件和/或电路拓扑的类似功能,并且可以删除、移动、添加、细分、组合和/或修改一些块。这些块中的每一个可以以各种不同的方式实现。
本公开的各个实施例可采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。在本公开中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本公开的至少一个实施例或示例中。在本公开中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。
虽然已通过示例对本公开的一些特定实施例进行了详细说明,但本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本公开的范围。在此公开的各实施例可以任意组合,而不脱离本公开的精神和范围。本领域的技术人员还应理解,可以对实施例进行多种修改而不脱离本公开的范围和精神。本公开的范围由所附权利要求来限定。
Claims (31)
1.一种乘法器,用于执行第一乘数与第二乘数的乘法运算,所述第一乘数是无符号数,所述第二乘数是预先已知的无符号数或有符号数,所述乘法器包括:
部分积产生电路,被配置为接收所述第一乘数与所述第二乘数并输出其部分积;
部分积求和电路,所述部分积求和电路的输入端耦接到所述部分积产生电路的输出端,所述部分积求和电路被配置为接收由所述部分积产生电路输出的部分积并对其进行求和,
其中,所述部分积产生电路包括用于输出所述第二乘数的最高一位与所述第一乘数的部分积的第一部分积产生单元,所述第一部分积产生单元被配置为:
在所述第二乘数是无符号数的情况下,输出所述第二乘数的最高一位与所述第一乘数的部分积;
在所述第二乘数是有符号数的情况下,输出所述第二乘数的最高一位与所述第一乘数的部分积的取反结果。
2.根据权利要求1所述的乘法器,其中,所述第一部分积产生单元被配置为:
接收指示所述第二乘数是无符号数还是有符号数的符号标志位;
在所述符号标志位指示所述第二乘数是无符号数的情况下,输出所述第二乘数的最高一位与所述第一乘数的部分积;
在所述符号标志位指示所述第二乘数是有符号数的情况下,输出所述第二乘数的最高一位与所述第一乘数的部分积的取反结果。
3.根据权利要求2所述的乘法器,其中,所述第一部分积产生单元包括:
与门组,被配置为接收所述第二乘数的最高一位与所述第一乘数并对其执行与运算;
异或门组,被配置为接收所述与门组的与运算结果与所述符号标志位并对其执行异或运算,
其中,所述异或门组的异或运算结果被提供作为所述第一部分积产生单元的输出。
4.根据权利要求2所述的乘法器,其中,所述第一部分积产生单元包括:
与非门组,被配置为接收所述第二乘数的最高一位与所述第一乘数并对其执行与非运算;
异或门组,被配置为接收所述与非门组的与非运算结果与所述符号标志位并对其执行异或运算,
其中,所述异或门组的异或运算结果被提供作为所述第一部分积产生单元的输出。
5.根据权利要求2所述的乘法器,其中,所述第一部分积产生单元包括:
异或门,被配置为接收所述第二乘数的最高一位与所述符号标志位并对其执行异或运算;
多路选择器组,所述多路选择器组中的每个多路选择器被配置为接收所述符号标志位作为第一输入,接收所述异或门的异或运算结果作为第二输入,接收所述第一乘数的相应位作为选择信号,并根据所述选择信号输出所述第一输入或所述第二输入,
其中,所述多路选择器组的输出被提供作为所述第一部分积产生单元的输出。
6.根据权利要求2所述的乘法器,其中,所述第一部分积产生单元包括:
异或门,被配置为接收所述第二乘数的最高一位与所述符号标志位并对其执行异或运算;
反相多路选择器组,所述反相多路选择器组中的每个反相多路选择器被配置为接收所述符号标志位作为第一输入,接收所述异或门的异或运算结果作为第二输入,接收所述第一乘数的相应位作为选择信号,并根据所述选择信号输出所述第一输入或所述第二输入,
其中,所述反相多路选择器组的输出被提供作为所述第一部分积产生单元的输出。
7.根据权利要求2所述的乘法器,其中,所述第一部分积产生单元包括:
与门组,被配置为接收所述第二乘数的最高一位与所述第一乘数并对其执行与运算;
多路选择器组,被配置为接收所述与门组的与运算结果作为第一输入,接收所述与门组的所述与运算结果的取反结果作为第二输入,接收所述符号标志位作为选择信号,并根据所述选择信号输出所述第一输入或所述第二输入,
其中,所述多路选择器组的输出被提供作为所述第一部分积产生单元的输出。
8.根据权利要求1至7中任一项所述的乘法器,其中,所述部分积产生电路还包括用于输出经修改的第二乘数与所述第一乘数的部分积的第二部分积产生单元,所述经修改的第二乘数是通过移除所述第二乘数的最高一位得到的并且是无符号数,所述第二部分积产生单元包括用于执行无符号数与无符号数的乘法运算的乘法器。
9.根据权利要求1至7中任一项所述的乘法器,其中,所述部分积产生电路还包括多个第二部分积产生单元,所述多个第二部分积产生单元中的每个第二部分积产生单元用于输出所述第二乘数的除最高一位以外的相应位与所述第一乘数的部分积。
10. 根据权利要求9所述的乘法器,其中,所述多个第二部分积产生单元中的每个第二部分积产生单元包括以下之一:
与门组,被配置为接收所述第二乘数的除最高一位以外的相应位与所述第一乘数并对其执行与运算,其中,所述与门组的与运算结果被提供作为所述第二部分积产生单元的输出;或者
与非门组,被配置为接收所述第二乘数的除最高一位以外的相应位与所述第一乘数并对其执行与非运算,其中,所述与非门组的与非运算结果被提供作为所述第二部分积产生单元的输出。
11.根据权利要求1所述的乘法器,其中,所述部分积求和电路的输出端耦接到附加相加电路的输入端,所述附加相加电路被配置为在所述第二乘数是有符号数的情况下将所述部分积求和电路的输出与常数相加,所述常数是(1-2z)·2w-1,其中z是所述第一乘数的位宽,w是所述第二乘数的位宽。
12. 一种乘累加电路,用于执行多对第一数和第二数的乘累加运算,所述第二数是预先已知的,所述乘累加电路包括至少一个乘累加单元,所述乘累加单元包括:
乘法子电路,所述乘法子电路包括用于执行第一乘数与第二乘数的乘法运算的乘法器,所述第一乘数从所述第一数获得并且是无符号数,所述第二乘数从所述第二数获得并且是预先已知的无符号数或有符号数,所述乘法器被配置为提供作为无符号数的输出,且所述乘法器是根据权利要求1至11中任一项所述的乘法器;以及
累加子电路,所述累加子电路的输入端耦接到所述乘法子电路的输出端,所述累加子电路被配置为接收所述乘法子电路的输出并对其累加。
13.根据权利要求12所述的乘累加电路,其中,所述乘法子电路包括多个所述乘法器,每个所述乘法器被配置为接收相应一对第一乘数与第二乘数并对所述相应一对第一乘数与第二乘数求积。
14. 根据权利要求13所述的乘累加电路,其中,所述累加子电路包括以下之一:
n级压缩树、第一加法器、第二加法器与寄存器组,所述乘法子电路的输出端耦接到所述n级压缩树中的第1级压缩树的相应输入端,所述n级压缩树中的第i级压缩树的输出端耦接到所述n级压缩树中的第(i+1)级压缩树的相应输入端,所述n级压缩树中的第n级压缩树的输出端耦接到所述第一加法器的相应输入端,所述第一加法器的输出端耦接到所述第二加法器的相应输入端,所述第二加法器的输出端耦接到所述寄存器组的输入端,所述寄存器组的输出端耦接到所述第二加法器的相应输入端,其中,n为正整数,i=1,2,…,n-1;或者
n级压缩树、全加器、加法器与寄存器组,所述乘法子电路的输出端耦接到所述n级压缩树中的第1级压缩树的相应输入端,所述n级压缩树中的第i级压缩树的输出端耦接到所述n级压缩树中的第(i+1)级压缩树的相应输入端,所述n级压缩树中的第n级压缩树的输出端耦接到所述全加器的相应输入端,所述全加器的输出端耦接到所述加法器的相应输入端,所述加法器的输出端耦接到所述寄存器组的输入端,所述寄存器组的输出端耦接到所述全加器的相应输入端,其中,n为正整数,i=1,2,…,n-1;或者
n级压缩树、加法器与寄存器组,所述乘法子电路的输出端耦接到所述n级压缩树中的第1级压缩树的相应输入端,所述n级压缩树中的第i级压缩树的输出端耦接到所述n级压缩树中的第(i+1)级压缩树的相应输入端,所述n级压缩树中的第n级压缩树的输出端耦接到所述加法器的相应输入端,所述加法器的输出端耦接到所述寄存器组的输入端,所述寄存器组的输出端耦接到所述n级压缩树中的第1级压缩树的相应输入端,其中,n为正整数,i=1,2,…,n-1;或者
具有一级或多级全加器的全加器模块、加法器与寄存器组,所述乘法子电路的输出端耦接到所述全加器模块的相应输入端,所述全加器模块的输出端耦接到所述加法器的相应输入端,所述加法器的输出端耦接到所述寄存器组的输入端,所述寄存器组的输出端耦接到所述全加器模块的相应输入端。
15.根据权利要求12至14中任一项所述的乘累加电路,其中,所述至少一个乘累加单元包括两个或更多个所述乘累加单元,所述乘累加电路还包括求和单元,所述求和单元的输入端耦接到所述两个或更多个所述乘累加单元的输出端,所述求和单元被配置为接收所述两个或更多个所述乘累加单元的输出并对其求和。
16.根据权利要求15所述的乘累加电路,其中,所述求和单元包括s级压缩树和加法器,所述两个或更多个所述乘累加单元中的每个乘累加单元的输出端耦接到所述s级压缩树中的第1级压缩树的相应输入端,所述s级压缩树中的第i级压缩树的输出端耦接到所述s级压缩树中的第(i+1)级压缩树的相应输入端,所述s级压缩树中的第s级压缩树的输出端耦接到所述加法器的相应输入端,
其中,s为非负整数,i=1,2,…,s-1。
17.根据权利要求16所述的乘累加电路,其中,所述求和单元还包括附加寄存器组,所述附加寄存器组的输入端耦接到所述加法器的输出端,并且所述附加寄存器组的输出端耦接到所述s级压缩树中的第1级压缩树的相应输入端。
18.根据权利要求15所述的乘累加电路,其中,所述乘累加电路还包括设置在所述两个或更多个所述乘累加单元中的每个乘累加单元的输出端与所述求和单元的相应输入端之间的控制元件,所述控制元件被配置为接收控制信号和相应乘累加单元的输出并根据所述控制信号而控制是否在所述控制元件的输出端向所述求和单元提供所述相应乘累加单元的输出。
19.根据权利要求12所述的乘累加电路,其中,所述乘法子电路的输入端还耦接到输入处理电路的输出端,所述输入处理电路被配置为接收所述第一数和所述第二数并且:
在所述第一数是有符号数的情况下,通过对所述第一数的符号位取反来输出所述第一数作为用于馈入所述乘法器的第一乘数,以及输出所述第二数作为用于馈入所述乘法器的第二乘数;
在所述第一数是无符号数的情况下,输出所述第一数作为用于馈入所述乘法器的第一乘数,以及输出所述第二数作为用于馈入所述乘法器的第二乘数。
20. 根据权利要求19所述的乘累加电路,其中,所述输入处理电路包括以下之一:
异或门,被配置为接收所述第一数的最高一位和指示所述第一数是无符号数还是有符号数的符号标志位并对其执行异或运算,其中,所述异或门的异或运算结果被提供作为由所述输入处理电路输出的所述第一数的最高一位;或者
多路选择器,被配置为接收所述第一数的最高一位作为第一输入,接收所述第一数的最高一位的取反结果作为第二输入,接收指示所述第一数是无符号数还是有符号数的符号标志位作为选择信号,并根据所述选择信号输出所述第一输入或所述第二输入,其中,所述多路选择器的输出被提供作为由所述输入处理电路输出的所述第一数的最高一位。
21.根据权利要求12所述的乘累加电路,其中,所述乘法子电路的输入端还耦接到输入处理电路的输出端,所述输入处理电路被配置为接收所述第一数和所述第二数,所述输入处理电路还被配置为根据所述乘法器的位宽拆分所述第一数,并且所述乘累加电路还包括耦接至所述乘法子电路的输出端的移位器,所述移位器被配置为执行与所述拆分对应的移位运算。
22. 根据权利要求21所述的乘累加电路,其中,
所述输入处理电路还被配置为根据所述乘法器的位宽拆分所述第二数;或者
所述输入处理电路被配置为接收预先根据所述乘法器的位宽拆分的所述第二数。
23. 根据权利要求12所述的乘累加电路,其中,所述累加子电路的输出端耦接到输出处理电路的输入端,所述输出处理电路被配置为执行以下至少之一:
将所述累加子电路的输出与第一常数相减,所述第一常数是所述多对第一数和第二数中的所有与作为有符号数的第一数配对的第二数在左移(z-1)位后的总和,其中z是所述第一乘数的位宽;或者
将所述累加子电路的输出与第二常数相加,所述第二常数是(1-2z)·2w-1·y,其中z是所述第一乘数的位宽,w是所述第二乘数的位宽,y是从所述多对第一数和第二数中的所有第二数获得的作为有符号数的第二乘数的数量。
24. 一种运算电路,包括:
根据权利要求12至23中任一项所述的乘累加电路;以及
输入处理电路,所述输入处理电路的输出端耦接到所述乘累加电路的输入端,所述输入处理电路被配置为接收所述第一数和所述第二数并且:
在所述第一数是有符号数的情况下,通过对所述第一数的符号位取反来输出所述第一数作为用于馈入所述乘法器的第一乘数,以及输出所述第二数作为用于馈入所述乘法器的第二乘数;
在所述第一数是无符号数的情况下,输出所述第一数作为用于馈入所述乘法器的第一乘数,以及输出所述第二数作为用于馈入所述乘法器的第二乘数。
25. 根据权利要求24所述的运算电路,其中,所述输入处理电路包括以下之一:
异或门,被配置为接收所述第一数的最高一位和指示所述第一数是无符号数还是有符号数的符号标志位并对其执行异或运算,其中,所述异或门的异或运算结果被提供作为由所述输入处理电路输出的所述第一数的最高一位;或者
多路选择器,被配置为接收所述第一数的最高一位作为第一输入,接收所述第一数的最高一位的取反结果作为第二输入,接收指示所述第一数是无符号数还是有符号数的符号标志位作为选择信号,并根据所述选择信号输出所述第一输入或所述第二输入,其中,所述多路选择器的输出被提供作为由所述输入处理电路输出的所述第一数的最高一位。
26.根据权利要求24所述的运算电路,其中,所述输入处理电路还被配置为根据所述乘法器的位宽拆分所述第一数,并且所述乘累加电路还包括耦接至所述乘法子电路的输出端的移位器,所述移位器被配置为执行与所述拆分对应的移位运算。
27. 根据权利要求26所述的运算电路,其中,
所述输入处理电路还被配置为根据所述乘法器的位宽拆分所述第二数;或者
所述输入处理电路被配置为接收预先根据所述乘法器的位宽拆分的所述第二数。
28.根据权利要求24所述的运算电路,还包括:
输出处理电路,所述乘累加电路的输出端耦接到所述输出处理电路的输入端,所述输出处理电路被配置为执行以下至少之一:
将所述乘累加电路的输出与第一常数相减,所述第一常数是所述多对第一数和第二数中的所有与作为有符号数的第一数配对的第二数在左移(z-1)位后的总和,其中z是所述第一乘数的位宽;或者
将所述乘累加电路的输出与第二常数相加,所述第二常数是(1-2z)·2w-1·y,其中z是所述第一乘数的位宽,w是所述第二乘数的位宽,y是从所述多对第一数和第二数中的所有第二数获得的作为有符号数的第二乘数的数量。
29. 一种运算电路,包括:
根据权利要求1至11中任一项所述的乘法器;以及
附加相加电路,所述乘法器的输出端耦接到所述附加相加电路的输入端,所述附加相加电路被配置为在所述第二乘数是有符号数的情况下将所述部分积求和电路的输出与常数相加,所述常数是(1-2z)·2w-1,其中z是所述第一乘数的位宽,w是所述第二乘数的位宽。
30.一种处理器,包括根据权利要求1至11中任一项所述的乘法器或者根据权利要求12至23中任一项所述的乘累加电路或者根据权利要求24至29中任一项所述的运算电路。
31.一种计算装置,包括根据权利要求30所述的处理器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311056807.2A CN116774966B (zh) | 2023-08-22 | 2023-08-22 | 乘法器、乘累加电路、运算电路、处理器和计算装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311056807.2A CN116774966B (zh) | 2023-08-22 | 2023-08-22 | 乘法器、乘累加电路、运算电路、处理器和计算装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116774966A CN116774966A (zh) | 2023-09-19 |
CN116774966B true CN116774966B (zh) | 2023-12-08 |
Family
ID=87991637
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311056807.2A Active CN116774966B (zh) | 2023-08-22 | 2023-08-22 | 乘法器、乘累加电路、运算电路、处理器和计算装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116774966B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002342070A (ja) * | 2001-05-18 | 2002-11-29 | Fujitsu Ltd | ディジタル積分装置 |
CN101384991A (zh) * | 2006-02-15 | 2009-03-11 | 松下电器产业株式会社 | 乘法器、数字滤波器、信号处理装置、合成装置、合成程序和合成程序记录介质 |
CN102662624A (zh) * | 2012-04-13 | 2012-09-12 | 钜泉光电科技(上海)股份有限公司 | 乘法器 |
CN106897046A (zh) * | 2017-01-24 | 2017-06-27 | 青岛朗思信息科技有限公司 | 一种定点乘累加器 |
CN110515590A (zh) * | 2019-08-30 | 2019-11-29 | 上海寒武纪信息科技有限公司 | 乘法器、数据处理方法、芯片及电子设备 |
CN110647307A (zh) * | 2019-09-24 | 2020-01-03 | 上海寒武纪信息科技有限公司 | 数据处理器、方法、芯片及电子设备 |
CN112540743A (zh) * | 2020-12-21 | 2021-03-23 | 清华大学 | 面向可重构处理器的有无符号乘累加器及方法 |
CN116257210A (zh) * | 2022-12-14 | 2023-06-13 | 四川九洲电器集团有限责任公司 | 一种基于概率计算的空间并行混合乘法器及其工作方法 |
CN116301714A (zh) * | 2023-01-30 | 2023-06-23 | 深圳市立创普电源技术有限公司 | 在mcu上实现乘法运算的方法、系统、存储介质及电子设备 |
CN116450217A (zh) * | 2023-04-11 | 2023-07-18 | 青岛本原微电子有限公司 | 一种多功能定点乘法和乘累加运算装置及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220405559A1 (en) * | 2021-06-17 | 2022-12-22 | Samsung Electronics Co., Ltd. | Mixed-precision neural network accelerator tile with lattice fusion |
-
2023
- 2023-08-22 CN CN202311056807.2A patent/CN116774966B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002342070A (ja) * | 2001-05-18 | 2002-11-29 | Fujitsu Ltd | ディジタル積分装置 |
CN101384991A (zh) * | 2006-02-15 | 2009-03-11 | 松下电器产业株式会社 | 乘法器、数字滤波器、信号处理装置、合成装置、合成程序和合成程序记录介质 |
CN102662624A (zh) * | 2012-04-13 | 2012-09-12 | 钜泉光电科技(上海)股份有限公司 | 乘法器 |
CN106897046A (zh) * | 2017-01-24 | 2017-06-27 | 青岛朗思信息科技有限公司 | 一种定点乘累加器 |
CN110515590A (zh) * | 2019-08-30 | 2019-11-29 | 上海寒武纪信息科技有限公司 | 乘法器、数据处理方法、芯片及电子设备 |
CN110647307A (zh) * | 2019-09-24 | 2020-01-03 | 上海寒武纪信息科技有限公司 | 数据处理器、方法、芯片及电子设备 |
CN112540743A (zh) * | 2020-12-21 | 2021-03-23 | 清华大学 | 面向可重构处理器的有无符号乘累加器及方法 |
CN116257210A (zh) * | 2022-12-14 | 2023-06-13 | 四川九洲电器集团有限责任公司 | 一种基于概率计算的空间并行混合乘法器及其工作方法 |
CN116301714A (zh) * | 2023-01-30 | 2023-06-23 | 深圳市立创普电源技术有限公司 | 在mcu上实现乘法运算的方法、系统、存储介质及电子设备 |
CN116450217A (zh) * | 2023-04-11 | 2023-07-18 | 青岛本原微电子有限公司 | 一种多功能定点乘法和乘累加运算装置及方法 |
Non-Patent Citations (1)
Title |
---|
基于异步NoC机制的Booth乘法器设计;冯广博等;《内蒙古大学学报(自然科学版)》;第48卷(第6期);第703-709页 * |
Also Published As
Publication number | Publication date |
---|---|
CN116774966A (zh) | 2023-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4584580B2 (ja) | 単一命令複数データ(simd)命令用の積和演算(mac)ユニット | |
US6601077B1 (en) | DSP unit for multi-level global accumulation | |
US9176709B2 (en) | Shared integer, floating point, polynomial, and vector multiplier | |
Kenney et al. | A high-frequency decimal multiplier | |
CN110221808A (zh) | 向量乘加运算的预处理方法、乘加器及计算机可读介质 | |
US8069200B2 (en) | Apparatus and method for implementing floating point additive and shift operations | |
CN112712172B (zh) | 用于神经网络运算的计算装置、方法、集成电路和设备 | |
TW202115560A (zh) | 用於浮點運算的乘法器、方法、積體電路晶片和計算裝置 | |
CN104246690A (zh) | 数字信号处理器中用于信号处理的系统和方法 | |
US20210319079A1 (en) | Supporting floating point 16 (fp16) in dot product architecture | |
JP3536063B2 (ja) | デジタル乗算システム | |
US20160239297A1 (en) | Instruction Class for Digital Signal Processors | |
CN116774966B (zh) | 乘法器、乘累加电路、运算电路、处理器和计算装置 | |
EP3767454B1 (en) | Apparatus and method for processing floating-point numbers | |
EP3767455A1 (en) | Apparatus and method for processing floating-point numbers | |
US8275822B2 (en) | Multi-format multiplier unit | |
US7847349B2 (en) | Single-cycle FFT butterfly calculator | |
CN116700670B (zh) | 乘累加电路、包含该乘累加电路的处理器和计算装置 | |
GB2530883A (en) | Implementing a square root operation in a computer system | |
CN110506255A (zh) | 节能型可变功率加法器及其使用方法 | |
CN100392584C (zh) | 进位存储加法器及其系统 | |
Efstathiou et al. | On the design of configurable modulo 2n±1 residue generators | |
CN113485751A (zh) | 执行伽罗瓦域乘法的方法、运算单元和电子装置 | |
CN105577372A (zh) | 模逆算法的无符号处理方法及模逆加速器 | |
EP2296093A2 (en) | DSP execution unit for efficient alternate modes of operation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |