CN111522528B - 乘法器、乘法运算方法、运算芯片、电子设备及存储介质 - Google Patents

乘法器、乘法运算方法、运算芯片、电子设备及存储介质 Download PDF

Info

Publication number
CN111522528B
CN111522528B CN202010322268.2A CN202010322268A CN111522528B CN 111522528 B CN111522528 B CN 111522528B CN 202010322268 A CN202010322268 A CN 202010322268A CN 111522528 B CN111522528 B CN 111522528B
Authority
CN
China
Prior art keywords
sub
multiplier
module
different
partial product
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
Application number
CN202010322268.2A
Other languages
English (en)
Other versions
CN111522528A (zh
Inventor
李超
林博
朱炜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xingchen Technology Co ltd
Original Assignee
Xingchen Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xingchen Technology Co ltd filed Critical Xingchen Technology Co ltd
Priority to CN202010322268.2A priority Critical patent/CN111522528B/zh
Publication of CN111522528A publication Critical patent/CN111522528A/zh
Priority to TW109139769A priority patent/TWI783295B/zh
Priority to US17/146,946 priority patent/US20210349692A1/en
Application granted granted Critical
Publication of CN111522528B publication Critical patent/CN111522528B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/533Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3812Devices capable of handling different types of numbers
    • G06F2207/382Reconfigurable for different fixed word lengths
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Biophysics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Neurology (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Pharmaceuticals Containing Other Organic And Inorganic Compounds (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

本公开提出了一种乘法器、乘法运算方法、运算芯片、电子设备以及存储介质。乘法器包括一个乘数预处理模块、一个编码模块、一个加法模块和一个部分积选择模块,乘数预处理模块,用于根据不同的运算位宽将其接收到的乘数生成不同的编码输入值;编码模块,用于根据不同的编码输入值生成不同的编码值,并根据不同的编码值与接收到的被乘数进行运算得到第一部分积;加法模块,用于根据不同的运算位宽将第一部分积进行对应次数的累加,生成不同的第二部分积。支持多种混合位宽的乘法,面对不同精度的乘法运算时可复用乘法器单元,降低硬件资源的消耗,针对需要实现大量卷积运算、包含多个复杂乘法和加法组合的运算,能有效的减少延时、降低能耗。

Description

乘法器、乘法运算方法、运算芯片、电子设备及存储介质
技术领域
本公开涉及乘法运算技术领域,具体涉及一种乘法器、一种乘法运算方法、一种运算芯片、一种电子设备以及一种计算机可读存储介质。
背景技术
深度学习(Deep learning)是开展人工智能(Artificial intelligence,AI)的重要应用技术之一,其广泛应用于计算机视觉、语音识别等领域。其中卷积神经网络(Convolutional Neural Network,CNN)则是近年来引起重视的一种深度学习高效识别技术,它通过直接输入原始图像或数据,与多个特征滤波器(filter)进行若干层的卷积运算及矢量运算,从而在图像和语音识别方面产生高准确性结果。其中滤波器的规模可由1×1、3×3的小区块规模到5×5、7×7甚至是11×11的大规模卷积运算区块,因此卷积运算也是一种很耗费效能的运算。
在计算机对信号进行处理的过程中往往包含许多复杂的运算,这些复杂的运算可以被拆解为加法和乘法运算的组合。以神经网络中的卷积运算为例,一次卷积运算需要执行多次读取数据、加法、乘法的操作,以最终实现卷积运算。
传统的加法器逐位地对加数以及被加数执行加的运算、传统的乘法器将乘数与被乘数中的每一位分别相乘再通过移位以及传统的加法器将所得的结果相加以执行乘法运算,尽管上述传统的加法器和乘法器能够获得具有很高的准确性的计算结果,然而,采用这样的加法器和乘法器对于诸如神经网络这样包含大量计算的应用而言会带来非常高的延时、能耗。在神经网络中包含多个网络层,网络层对神经网络的输入或者对前一个网络层的输出执行诸如卷积、以及其他复杂运算,以获得针对该网络层的输出,通过多个网络层的计算最终获得学习、分类、识别、处理等相应的结果。可以理解,神经网络中多个网络层的计算量非常大,并且这样的计算往往需要使用较早执行的计算结果,采用上述传统的加法器和乘法器会占用神经网络处理器中大量的资源,带来极高的延时、能耗。
AI处理器中需要进行大量的卷积运算,乘累加(MAC)阵列的数量对AI处理器性能影响非常大,并且不同类型的神经网络(CNN)在运算过程中对算子的计算精度不同,例如有些运算是8bit乘法,有些是16bit乘法、甚至有些是2bit乘法。因此,乘法器作为AI处理器中重要的功能单元,如何设计并优化乘法器,减少乘法器的时序路径延时,是提升AI处理器性能的关键;而面对不同精度的乘法运算时,如何尽可能复用乘法器单元,降低硬件资源的消耗,是减少AI处理器芯片面积的关键。
发明内容
本公开旨在至少解决现有技术中存在的技术问题之一,提供一种乘法器、一种乘法运算方法、一种运算芯片、一种电子设备和一种计算机可读存储介质。
本公开的一个方面,提供一种乘法器,所述乘法器包括一个乘数预处理模块、一个编码模块、一个加法模块和一个部分积选择模块,其中:
所述乘数预处理模块,用于根据不同的运算位宽将其接收到的乘数生成不同的编码输入值;
所述编码模块,用于根据不同的所述编码输入值生成不同的编码值,并根据所述不同的编码值与接收到的被乘数进行运算得到第一部分积;
所述加法模块,用于根据所述不同的运算位宽将所述第一部分积进行对应次数的累加,生成不同的第二部分积;
所述部分积选择模块,用于根据接收到的输出位宽选择性地从所述第一部分积和所述不同的第二部分积中选择出对应的部分积作为目标部分积并输出。
进一步的,所述根据不同的运算位宽将其接收到的乘数生成不同的编码输入值,还包括:
所述乘数预处理模块,还用于:
根据所述不同的运算位宽和预设的编码基数,将接收到的所述乘数生成依序放置的多组子编码输入值,第一组所述子编码输入值包括固定零位和乘数位,其余组所述子编码输入值包括选择位和乘数位;
根据所述乘数确定所述乘数位,根据所述运算位宽确定所述选择位。
进一步的,所述乘数预处理模块还包括至少一个选择器,每个所述选择器对应其余组所述子编码输入值中的一组所述子编码输入值,其中,
所述选择器,用于根据所述不同的运算位宽,生成对应一组所述子编码输入值的所述选择位。
进一步的,所述根据所述不同的运算位宽,生成对应一组所述子编码输入值的所述选择位,还包括:
当所述运算位宽为一个预设的高运算位宽时,所述选择器,还用于根据所述高运算位宽,将当前选择器所对应的子编码输入值的前一组子编码输入值中处于高位的乘数位作为所述选择位;
当所述运算位宽为一个预设的低运算位宽时,所述选择器,还用于根据所述低运算位宽,将固定零位作为所述选择位。
进一步的,所述编码模块采用一个booth编码模块,所述根据不同的编码输入值生成不同的编码值,具体为:
所述booth编码模块,用于根据所述不同的编码输入值生成带不同的固定偏值的不同的booth编码值;其中,所述固定偏值与所述运算位宽相对应。
进一步的,所述加法模块还包括一个第一级子加法模块、一个第二级子加法模块和一个第三级子加法模块;其中,
所述编码模块选择性地与所述第一级子加法模块和所述部分积选择模块相连;
所述第一级子加法模块选择性地与所述第二级子加法模块和所述部分积选择模块相连;
所述第二级子加法模块选择性地与所述第三级子加法模块和所述部分积选择模块相连;
所述第三级子加法模块与所述部分积选择模块相连。
进一步的,所述乘数预处理模块还用于根据接收到的不同符号信息将其接收到的乘数生成不同的编码输入值。
本公开的另一个方面,提供一种乘法运算方法,包括:
根据不同的运算位宽将接收到的乘数生成不同的编码输入值;
根据不同的编码输入值生成不同的编码值,并根据所述不同的编码值与接收到的被乘数进行运算得到第一部分积;
根据所述不同的运算位宽将所述第一部分积进行对应次数的并行累加,生成不同的第二部分积;
根据接收到的输出位宽选择性地从所述第一部分积和所述不同的第二部分积中选择出对应的部分积作为目标部分积并输出。
进一步的,所述根据不同的运算位宽将接收到的乘数生成不同的编码输入值,还包括:
根据所述不同的运算位宽和预设的编码基数,将接收到的所述乘数生成依序放置的多组子编码输入值,第一组所述子编码输入值包括固定零位和乘数位,其余组所述子编码输入值包括选择位和乘数位;
根据所述乘数确定所述乘数位,根据所述运算位宽确定所述选择位。
进一步的,所述根据所述运算位宽确定所述选择位,还包括:
当所述运算位宽为一个预设的高运算位宽时,根据所述高运算位宽,将前一组子编码输入值中处于高位的乘数位作为对应一组所述子编码输入值的所述选择位;
当所述运算位宽为一个预设的低运算位宽时,根据所述低运算位宽,将固定零位作为对应一组所述子编码输入值的所述选择位。
进一步的,所述根据不同的编码输入值生成不同的编码值,还包括:
根据所述不同的编码输入值生成带不同的固定偏值的不同的booth编码值;其中,所述固定偏值与所述运算位宽相对应。
本公开的另一个方面,提供一种运算芯片,包括前文记载的乘法器。
本公开的另一个方面,提供一种电子设备,包括:
一个或多个处理器;
一个存储单元,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,能使得所述一个或多个处理器实现前文记载的乘法运算方法。
本公开的另一个方面,提供一种计算机可读存储介质,其上存储有一组计算机程序,
所述计算机程序被处理器执行时能够实现前文记载的乘法运算方法。
本公开实施例的乘法器、乘法运算方法及运算芯片,可以支持多种混合位宽的乘法,支持有符号、无符号混合的乘法运算,且在硬件面积上,一个乘法器的面积远小于对应数量一种数据位宽乘法器的面积,大大减少了硬件资源消耗;在硬件功耗上,一个乘法器的功耗也远小于对应数量一种数据位宽乘法器的功耗,面对不同精度的乘法运算时可复用乘法器单元,降低硬件资源的消耗。针对神经网络等需要实现大量卷积运算、包含多个复杂乘法和加法组合的运算,能有效的减少延时、降低能耗。
附图说明
图1为用于实现根据本公开实施例的乘法器以及乘法运算方法的示例电子设备的示意性框图;
图2为本公开另一实施例中提出的一种乘法器的结构框图;
图3为本公开另一实施例中提出的一种乘法器的结构示意图;
图4为本公开另一实施例中提出的一种乘法运算方法的流程图;
图5为本公开另一实施例中提出的一种运算装置的结构示意图。
具体实施方式
为使本领域技术人员更好地理解本公开的技术方案,下面结合附图和具体实施方式对本公开作进一步详细描述。
首先,参照图1来描述用于实现本公开实施例的一种乘法器以及乘法运算方法以及运算芯片以及电子设备及存储介质的示例电子设备。
如图1所示,电子设备200包括一个或多个处理器210、一个或多个存储装置220、一个或多个输入装置230、一个或多个输出装置240等,这些组件通过总线系统250和/或其他形式的连接机构互连。应当注意,图1所示的电子设备的组件和结构只是示例性的,而非限制性的,根据需要,电子设备也可以具有其他组件和结构。
处理器210可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备200中的其他组件以执行期望的功能。
存储装置220可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器可以运行所述程序指令,以实现下文所述的本公开实施例中(由处理器实现)的客户端功能以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储各种应用程序和各种数据,例如,所述应用程序使用和/或产生的各种数据等。
输入装置230可以是用户用来输入指令的装置,并且可以包括键盘、鼠标、麦克风和触摸屏等中的一个或多个。
输出装置240可以向外部(例如用户)输出各种信息(例如图像或声音),并且可以包括显示器、扬声器等中的一个或多个。
下面,根据图2来描述本公开实施例的乘法器。
如图2所示,一种乘法器100,包括一个乘数预处理模块110、一个编码模块120、一个加法模块130和一个部分积选择模块140。其中,所述乘数预处理模块100,用于根据不同的运算位宽将其接收到的乘数生成不同的编码输入值。所述编码模块120,用于根据不同的所述编码输入值生成不同的编码值,并根据所述不同的编码值与接收到的被乘数进行运算得到第一部分积。所述加法模块130,用于根据所述不同的运算位宽将所述第一部分积进行对应次数的累加,生成不同的第二部分积。所述部分积选择模块140,用于根据接收到的输出位宽选择性地从所述第一部分积和所述不同的第二部分积中选择出对应的部分积作为目标部分积并输出。
具体地,本实施例的乘法器,利用所设置的乘数预处理模块可以实现根据不同的运算位宽(例如,2bit、4bit、8bit、16bit等)对乘数进行预处理,获得不同的编码输入值。之后,利用编码模块对不同的编码输入值进行编码并与被乘数进行运算得到第一部分积。加法模块根据不同的运算位宽将第一部分积进行对应次数的累加,获得第二部分积,例如,在运算位宽为4bit时,加法模块可以对第一部分积进行一次累加,从而获得所需的第二部分积等。最后,部分积选择模块,根据输出位宽从第一部分积和第二部分积中选择对应的部分积输出,完成乘法运算。例如,若运算位宽为2bit,则所述输出位宽可以为2bit。再例如,若运算位宽为4bit,则所述输出位宽可以为2bit、4bit。此外,若所运算位宽为16bit,则所述输出位宽可以为2bit、4bit、8bit、16bit。也就是说,输出位宽应当小于或等于所述运算位宽。所述乘法器能处理的乘法的运算位宽优选2n,也可以处理其他多位运算位宽的乘法。
本实施例的乘法器,可以实现多种运算位宽的乘法运算,并且,不需要为每一种运算位宽设置对应的硬件结构,只需借助所设置的乘数预处理模块即可实现多种运算位宽的处理,从而可以简化乘法器的硬件资源消耗,提高乘法运算效率。
示例性的,所述乘数预处理模块110,可以根据所述不同的运算位宽m和预设的编码基数n,将接收到的所述乘数生成依序放置的多组子编码输入值,第一组所述子编码输入值包括固定零位和乘数位,其余组所述子编码输入值包括选择位和乘数位;其中,所述乘数位根据所述乘数确定,所述选择位根据所述运算位宽确定。
具体地,根据所述运算位宽m和预设的编码基数n将编码输入值分解为多组依序放置的子编码输入值,具体为以n-1的位数为一组、将编码输入值进行分组,所述编码输入值共包括m/(n-2)组子编码输入值,所述多组子编码输入值从第一组至最后一组依序放置。所述编码基数n为根据实际情况具体选择,例如可以选择基数n为4、5、6等。此外,第一组子编码输入值包括固定零位和乘数位,其余组所述子编码输入值包括选择位和乘数位。
示例性的,如图3所示,本实施例中编码基数取值为4,因此将编码输入值按每3位一组分成多组子编码输入值。若运算位宽选择为16位,则所述编码输入值共有8组子编码输入值,若运算位宽选择为8,则所述编码输入值共有4组子编码输入值,若运算位宽选择为2,则所述编码输入值共有1组子编码输入值。
在确定了多组子编码输入值以后,需要对每组子编码输入值的乘数位和选择位进行确定,下文将进行具体描述。
示例性的,在确定乘数位时,根据乘数位值和运算位宽来确定,即根据所述子编码输入值的位数将所述乘数依序放置入每组子编码输入值中的乘数位中,所述依序放置具体为从低位到高位依序方式。本实施例中,如图3所示,若接收到的乘数为2bit的乘数,即分别将所述乘数的第一位和第二位放置到第一组子编码输入值的第二位和第三位中,由于所述第一子编码输入值的最低位即第一位是固定零位,因此,所述第二位即为最低位的乘数位,从而实现依序放置。反之,若接收到的乘数为4bit的乘数,即分别将所述乘数的第一位和第二位放置到所述第一组子编码输入值的第二位和第三位中,分别将所述乘数的第三位和第四位放置到所述第二组子编码输入值的第二位和第三位中,从而实现依序放置。依次类推,对于其余运算位宽,将乘数采用类似的分配方式。
示例性的,在确定每组子编码输入值的选择位时,需要根据所述不同的运算位宽生成对应一组所述子编码输入值的所述选择位。例如,第二组子编码输入值的选择位可以为第一组子编码输入值的最高位,或者,第二组子编码输入值的选择位也可以为零,这取决于当前的运算位宽,比如,在运算位宽为2bit时,第二组子编码输入值的选择位为零。在当前的运算位宽为4bit时,第二组子编码输入值的选择位为第一组子编码输入值的最高位。再例如,在当前的运算位宽为8bit时,第二组子编码输入值的选择位为第一组子编码输入值的最高位,第三组子编码输入值的选择位为第二组子编码输入值的最高位,依次类推。当然,选择位除了这种分配方式以外,本领域技术人员还可以根据实际需要,选择其他的一些分配方式,本实施例对此并不限制。
示例性的,作为乘数预处理模块的一种具体结构,如图3所示,所述乘数预处理模块100中还包括至少一个选择器,每个选择器根据所述运算位宽生成对应一组所述子编码输入值的所述选择位。所述选择器可以为一个或多个,当选择器为多个,则多个选择器直接采用级联的方式连接,每个所述选择器对应其余组所述子编码输入值中的一组所述子编码输入值,即第一组子编码输入值不设置对应的选择器。所述选择器的数量由所述运算位宽的最大值k和编码基数n确定,具体为k/(n-2)-1。
在本实施例中,由于所述运算位宽最大值k为16bit,所述编码基数n为4,因此所述选择器的数量为7个,即为图3中A、B、C、D、E、F、G共7个选择器,即所述7个选择器级联。在具体使用过程中,7个选择器并不一定全部使用,而是根据运算位宽和需要并行处理的乘法数量来决定。例如,处理16bit的一个乘数和被乘数的乘法,需要使用7个选择器;处理2bit的八个乘数和被乘数的乘法,需要使用7个选择器;处理2bit的四个乘数和被乘数的乘法,仅需要使用3个选择器;处理4bit的三个乘数和被乘数的乘法,仅需要使用5个选择器。
示例性的,当所述运算位宽为一个预设的高运算位宽时,所述选择器还用于根据所述高运算位宽,将当前选择器所对应的子编码输入值的前一组子编码输入值中处于高位的乘数位作为对应一组所述子编码输入值的所述选择位。当所述运算位宽为一个预设的低运算位宽时,所述选择器还用于根据所述低运算位宽,将固定零位作为对应一组所述子编码输入值的所述选择位。
需要说明的是,对于每一个选择器而言,其低运算位宽和高运算位宽并不是只有一个,并且,低运算位宽和高运算位宽也仅仅是相对而言的。如,在2bit运算位宽时,对于选择器A至选择器G而言,该运算位宽均为低运算位宽。反之,在4bit运算位宽时,对于选择器A、C、E而言,是高运算位宽,对于选择器B、D和F而言,其为低运算位宽,依次类推。
本实施例中,7个选择器预设的高运算位宽和低运算位宽具体如下:
A:低运算位宽:2bit;高运算位宽:4bit、8bit、16bit。
B:低运算位宽:2bit、4bit;高运算位宽:8bit、16bit。
C:低运算位宽:2bit;高运算位宽:4bit、8bit、16bit。
D:低运算位宽:2bit、4bit、8bit;高运算位宽:16bit。
E:低运算位宽:2bit;高运算位宽:4bit、8bit、16bit。
F:低运算位宽:2bit、4bit;高运算位宽:8bit、16bit。
G:低运算位宽:2bit;高运算位宽:4bit、8bit、16bit。
具体地,如图3所示,以选择器A为例,当所述运算位宽为2bit时,选择器A将固定零位作为所述选择位,即a取值为0。当所述运算位宽为4bit或8bit或16bit时,选择器A将当前选择器(选择器A)所对应的子编码输入值的前一组子编码输入值中处于高位的乘数位作为所述选择位,由于选择器A对应第二组子编码输入值,则前一组子编码输入值即为第一组子编码输入值,即将所述第一组子编码输入值中处于高位的乘数位作为选择位,选择器A输出的选择结果a为Bit1,将Bit1作为选择器A对应一组所述子编码输入值(第二组子编码输入值)的所述选择位,即第二组子编码输入值的选择位为Bit1。
以选择器B为例,当所述运算位宽为2bit或4bit时,即所述运算位宽为选择器B预设的低运算位宽,选择器B将固定零位作为所述选择位,即b取值为0;当所述运算位宽8bit或16bit时,即所述运算位宽为选择器B预设的高运算位宽,选择器B将当前选择器(选择器B)所对应的子编码输入值的前一组子编码输入值中处于高位的乘数位作为所述选择位,由于选择器B对应第三组子编码输入值,则前一组子编码输入值即为第二组子编码输入值,即将所述第二组子编码输入值中处于高位的乘数位作为选择位,选择器B输出的选择结果b为Bit3,将Bit3作为选择器B对应一组所述子编码输入值(第三组子编码输入值)的所述选择位,即第三组子编码输入值的选择位为Bit3。
其他选择器的工作原理相同,此处不再赘述。需要注意的是,上述对选择器的高运算位宽和低运算位宽的设置方式仅为举例说明,由于本实施例中提出的选择器优选用于处理运算位宽为2n的乘法运算,因此对高运算位宽和低运算位宽的设置方式仅举例说明了运算位宽为2n的情况,并不代表本实施例中提出的乘法器仅能处理运算位宽为2n的乘法运算,所述高运算位宽和低运算位宽也可设置为3bit、6bit、15bit等数值。
在本实施例中,由于优选使用booth编码,因此所述编码模块120优选采用一个booth编码模块。所述编码模块根据不同的编码输入值生成不同的编码值具体为根据不同的booth编码输入值生成不同的booth编码值。进一步的,所述booth编码模块,用于根据所述不同的编码输入值生成带不同的固定偏值的不同的booth编码值;其中,所述固定偏值与所述运算位宽相对应。
所述带固定偏值的booth编码主要用于对有符号乘法进行编码,所述固定偏值由乘法器本身的设计决定。本实施例中,根据每个子编码输入值生成的booth编码值的固定偏值为-1。例如,使用本实施例中的乘法器处理8bit乘法,由于需要4个2bit乘法的部分积累加,4组3bit子编码输入值生成的booth编码的偏差各为-1,因此4个booth累积的偏差就为二进制的16`b0101_0101_0000_0000,即十六进制的16`h5500,同理16bit乘法偏差为32`h5555_0000;4bit乘法的偏差为8`h50;2bit乘法的偏差为4`h4。
本实施例的乘法器,其所采用的booth编码模块,与传统的booth编码方式不同,在本实施例中,booth编码模块所产生的编码结果带有一个固定偏值的,这样做的好处就是减少面积,比传统booth编码面积小。
示例性的,如图3所示,所述编码模块120包括多个编码子模块,例如,该编码模块可以包括8个编码子模块,每个编码子模块用于接收并处理一个子编码输入值。在所述编码模块120工作过程中,首先,将所述被乘数根据子编码输入值进行分解,使所述被乘数分解后与所述乘数位相对应,在本实施例中,即为按两位一组对被乘数进行分解,得到多组子被乘数;其次,所述多个编码子模块通过子编码输入值对对应的子被乘数进行并行运算,生成多个第一部分子积;最后,输出多个第一部分子积,即第一部分积。
本实施例的乘法器,通过booth编码值对接收到的被乘数进行乘法运算得到第一部分积,具体为booth编码模块根据所述不同的booth编码值与接收到的被乘数进行运算得到第一部分积,即为多个booth编码子模块通过多个子编码输入值对对应的子被乘数进行并行运算,生产多个第一部分子积,所述第一部分子积的数量与子编码输入值的组数相同且一一对应。
在本实施例中,由于booth编码基数为4,每个子编码输入值为3位,因此,每个子编码输入值为2bit,所述被乘数被分解为每2bit一组的子被乘数,所述每个编码子单元可通过2bit的子编码输入值对对应的2bit的子被乘数进行并行的编码,得到4bit的第一部分子积,多个4bit的第一部分子积共同组成所述第一部分积,即每个所述第一部分子积为2bit乘数和被乘数运算的结果,即每个所述第一部分子积为一个4bit数。
示例性的,如图3所示,所述加法模块130用于根据所述不同的运算位宽将所述第一部分积进行对应次数的累加,生成不同的第二部分积。所述加法模块可为可实现加法功能的模块,在本实施例中,使用Wallace tree加法模块。
具体地,如图3所示,所述加法模块包括多级子加法模块,所述子加法模块的级数根据运算位宽的最大值k来确定,具体为
Figure BDA0002461885130000131
本实施例中,由于所述运算位宽的最大值k为16bit,即本实施例中的加法模块包括3级子加法模块。如图3所示,所述加法模块130包括一个第一级子加法模块131、一个第二级子加法模块132和一个第三级子加法模块133;其中,所述编码模块120选择性地与所述第一级子加法模块131和所述部分积选择模块140相连;所述第一级子加法模块131选择性地与所述第二级子加法模块132和所述部分积选择模块140相连;所述第二级子加法模块132选择性地与所述第三级子加法模块133和所述部分积选择模块140相连;所述第三级子加法模块133与所述部分积选择模块140相连。
进一步的,所述每个子加法模块130中包括至少一个加法单元,所述加法单元用于具体实现加法运算。所述第一级子加法模块131的加法单元的数量为所述编码子模块的数量的1/2、也即第一部分子积数量的1/2,即所述编码模块120输出的每两个第一部分子积对应输入至第一级子加法模块131中的一个加法单元中,每个所述加法单元对所述每两个第一部分子积做加法运算,并分别输出多个一级第二部分子积,得到一级第二部分积。所述第二级子加法模块132中加法单元的数量为所述第一级子加法模块131加法单元数量的1/2,每个所述加法单元对每两个一级第二部分子积做加法运算,并分别输出多个二级第二部分子积,得到二级第二部分积;所述第三级子加法模块133中加法单元的数量为所述第二级子加法模块132中加法单元数量的1/2,每个所述加法单元对每两个二级第二部分子积做加法运算,并分别输出多个三级第二部分子积,得到三级第二部分积。
在本实施例中,由于所述加法模块使用Wallace tree加法模块,则所述Wallacetree加法模块包括多级Wallace tree子加法模块,每个多级Wallace tree子加法模块包括多个Wallace tree加法单元。如图3所示,所述第一级子加法模块131包括4个加法单元,所述第二级子加法模块132包括2个加法单元,所述第三级子加法模块133包括1个加法单元,所述加法单元为Wallace tree加法单元。
所述多级子加法模块分别选择性的输出多级第二部分积,所述第一级子加法模块131选择性的将输入的第一部分积进行累加,输出一级第二部分积;所述第二级子加法模块132选择性的将输入的一级第二部分积进行累加,输出二级第二部分积;所述第三级子加法模块133选择性的将输入的二级第二部分积进行累加,输出三级第二部分积。在本实施例中,由于所述第一部分积为2bit乘法运算的部分积、即4bit的部分积,则若多级子加法模块分别选择输出多级第二部分积,则所述一级第二部分积为4bit乘法运算的部分积、即8bit的部分积,所述二级第二部分积为8bit乘法运算的部分积、即16bit的部分积,所述三级第二部分积为16bit乘法运算的部分积、即32bit的部分积。
所述编码模块将所述第一部分积输出至部分积选择模块,所述多级子加法模块分别选择性的将所述多级第二部分积输出至部分积选择模块。在本实施例中,即为所述第一级子加法模块选择性的输出一级第二部分积至部分积选择模块,所述第二级子加法模块选择性的输出二级第二部分积至部分积选择模块,所述第三级子加法模块选择性的输出三级第二部分积至部分积选择模块。
所述多级子加法模块选择性的与所述部分积选择模块相连,或者说所述多级加法子模块选择性的输出,指的是多级子加法模块根据运算位宽选择性的输出第二部分积,具体为:当所述运算位宽为所述多级子加法模块的预设的加法位宽时,所述第一级子加法模块与所述编码模块相连,或所述多级子加法模块与上一级子加法模块相连,所述多级子加法模块输出对应的多级第二部分积;否则,所述第一级子加法模块不与所述编码模块相连,或所述多级子加法模块不与上一级子加法模块相连,多级子加法模块不进行输出。所述预设的加法位宽可根据实际使用情况具体设置。
在本实施例中,所述第一级子加法模块的预设的加法位宽为4bit、8bit、16bit,所述第二级子加法模块的预设的加法位宽为8bit、16bit,所述第三级子加法模块的预设的加法位宽为16bit。
若所述运算位宽为2bit,则第一级子加法模块、第二级子加法模块和第三级子加法模块均不与所述部分积选择模块相连、均不输出第二部分积;所述编码模块不与所述第一级子加法模块相连,仅编码模块输出第一部分积至部分积选择模块。
若所述运算位宽为4bit,所述第一级子加法模块不与所述第二级子加法模块相连,所述第二级子加法模块和第三级子加法模块均不与所述部分积选择模块相连,所述第二级子加法模块和所述第三级子加法模块不输出第二部分积;编码模块选择与第一级子加法模块相连,第一级子加法模块选择与所述部分积选择模块相连、输出一级第二部分积。
若所述运算位宽为8bit,所述第二级子加法模块不与所述第三级子加法模块相连,所述第三级子加法模块不与所述部分积选择模块相连、不输出第二部分积;编码模块选择与第一级子加法模块相连,第一级子加法模块选择与所述部分积选择模块相连、输出一级第二部分积;第一级子加法模块选择与第二级子加法模块相连,第二级子加法模块选择与所述部分积选择模块相连、输出二级第二部分积。
若所述运算位宽为16bit,编码模块选择与第一级子加法模块相连,第一级子加法模块选择与所述部分积选择模块相连、输出一级第二部分积;第一级子加法模块选择与第二级子加法模块相连,第二级子加法模块选择与所述部分积选择模块相连、输出二级第二部分积;第二级子加法模块选择与第三级子加法模块相连,第三级子加法模块选择与所述部分积选择模块相连、输出三级第二部分积。
进一步的,所述乘数预处理模块还用于根据接收到的不同符号信息将其接收到的乘数生成不同的编码输入值。所述不同符号信息为有符号或无符号。
若符号信息为乘数有符号和被乘数有符号时,则所述乘法器进行有符号乘数和有符号被乘数的乘法运算,乘数预处理模块将接收到的有符号的乘数生成有符号信息的编码输入值,所述编码模块根据有符号信息的编码输入值生成不同的带固定偏值的编码值,并根据不同的带固定偏值的编码值将接收到的有符号的被乘数进行运算,得到第一部分积。
具体的,所述带固定偏值的booth编码值的生成过程为,将根据有符号信息的booth编码输入值生成的booth编码输入值中的符号位补0,例如,子编码输入值为100,对应生成的booth编码为-2,将-2中的符号位补0,而不是使用负号的1来表述,所述符号位的位宽根据运算位宽来决定。使用这种设计节约硬件资源,降低逻辑延时。此时,所述第一部分积包含输出值和进位值,所述输出值为根据编码值得到的被乘数的一倍数或多倍数,所述进位值为根据编码值得到的第一部分积的符号,即正符号或负符号。本实施例中,所述输出值为根据带固定偏值的booth编码与其接收到的被乘数得到的乘积的非符号位来确定,所述进位值为根据带固定偏值的booth编码与其接收到的被乘数得到的乘积的符号位来确定。
进一步的,所述第二部分积包含输出值和进位值,所述输出值为根据编码值得到的被乘数的一倍数或多倍数,所述进位值为根据第一部分积得到的第二部分积的符号,即正符号或负符号。
若符号信息为乘数有符号和被乘数无符号时,乘法器的工作过程与符号信息为乘数有符号和被乘数有符号时相同,区别仅在于,需要对被乘数进行符号位扩展,具体为根据运算位宽将乘数和被乘数的高位补0,使得所述被乘数与乘数的位宽相同,再进行乘法运算。
若符号信息为乘数无符号和被乘数无符号时,则所述乘法器进行无符号乘数和无符号被乘数的乘法运算,乘数预处理模块将接收到的无符号的乘数生成无符号信息的编码输入值,所述编码模块根据无符号信息的编码输入值生成不同的编码值,并根据不同的编码值将接收到的无符号的被乘数进行运算,得到第一部分积。此外,在进行乘法运算时,将所述乘数和被乘数进行符号位扩展,具体为根据运算位宽将乘数和被乘数的高位补0,得到符号扩展位。
此外,此时所述编码器中还包括符号扩展编码子模块,用于对无符号乘数的符号扩展位进编码并输出符号扩展位编码值,并根据所述符号扩展位编码值对被乘数进行运算。本实施例中,所述扩展编码子模块为booth扩展编码子模块,用于处理的子编码输入值仅为000或001,逻辑很简单,资源占用远小于正常的booth编码器,使用这种方式进行无符号乘法处理,有效节约了硬件资源。
所述部分积选择模块140选择性地从所述第一部分积和所述不同的第二部分积中选择出与所述不同的运算位宽相对应的目标部分积并输出,具体为:所述部分积选择模块根据接收的输出位宽,从所述第一部分积和所述不同的第二部分积中选择出与接收的输出位宽相同的部分积作为目标部分积并输出。所述第二部分积包括多级第二部分积,在本实施例中,即为一级第二部分积、二级第二部分积和三级第二部分积。
进一步的,所述部分积选择模块140包括第一部分积选择子模块和第二部分积选择子模块;所述第一部分积选择子模块用于选择性地从所述第一部分积输出值和所述不同的第二部分积输出值中选择出与所述不同的输出位宽相对应的部分积输出值作为目标部分积输出值并输出;所述第二部分积选择子模块用于选择性地从所述第一部分积进位值和所述不同的第二部分积进位值中选择出与所述不同的输出位宽相对应的部分积进位值作为目标部分积进位值并输出。如图3所示,本实施例中,第一部分积选择子模块和第二部分积选择子模块使用了MUX选择器。
结合图3可知,本实施例中提出的乘法器中乘数预处理模块中有7个选择器。编码模块采用booth编码实现乘法运算,booth编码基数为4。加法模块采用Wallace tree实现加法预算,具有三级子加法模块,第一级子加法模块具有4个Wallace tree加法单元,第二级子加法模块具有2个Wallace tree加法单元,第三级子加法模块具有1个Wallace tree加法单元。部分积选择模块使用2个MUX选择器分别对第一部分积和不同的第二部分积的输出值和进位值进行选择。
使用本实施例中提出的乘法器进行1个16bit的乘法运算,即选择运算位宽为16bit,乘数和被乘数均为16bit数,所述编码基数为4,所述编码输入值每3位为一组,共分为8组。
所述乘数的16bit分别输入图3中编码输入值中的乘数位Bit0-Bit15,即8组编码子输入值中的两个乘数位中,完成编码输入值中乘数位的赋值;所述第一组子编码输入值的最低位为固定0位,所述A-G七个选择器根据运算位宽16bit分别进行选择判断,由于所述运算位宽16bit为七个选择器预设的高运算位宽,因此七个选择器均输出所述选择器所对应的子编码输入值的前一组子编码输入值中处于高位的乘数位作为所述选择位,即七个选择器分别输出Bit1、Bit3、Bit5、Bit7、Bit9、Bit11、Bit13作为第二个子输入值至第八组子编码输入值中的选择位,完成编码输入值中选择位的赋值;完成了乘数位和选择位的赋值,即生成了包含8组子编码输入值的编码输入值,8组子编码输入值由高位至低位具体为:
第一组为:{bit1,bit0,0};
第二组为{bit3,bit2,a},其中a为第A个选择器产生的值,若为2bit位宽乘法,则A=0,若为4/8/16bit位宽乘法,则A=bit1;由于运算位宽为16bit,因此A=bit1。
第三组为{bit5,bit4,b},其中b为第B个选择器产生的值,若为2/4bit位宽乘法,则B=0,若为8/16bit位宽乘法,则B=bit3;由于运算位宽为16bit,因此B=bit3。
第四组为{bit7,bit6,c},其中c为第C个选择器产生的值,若为2bit位宽乘法,则C=0,若为4/8/16bit位宽乘法,则C=bit5;由于运算位宽为16bit,因此C=bit5。
第五组为{bit9,bit8,d},其中d为第D个选择器产生的值,若为2/4/8bit位宽乘法,则D=0,若为16bit位宽乘法,则D=bit7;由于运算位宽为16bit,因此D=bit7。
第六组为{bit11,bit10,e},其中e为第E个选择器产生的值,若为2bit位宽乘法,则E=0,若为4/8/16bit位宽乘法,则E=bit9;由于运算位宽为16bit,因此E=bit9。
第七组为{bit13,bit12,f},其中f为第F个选择器产生的值,若为2/4bit位宽乘法,则F=0,若为8/16bit位宽乘法,则F=bit11;由于运算位宽为16bit,因此F=bit11。
第八组为{bit15,bit14,g},其中g为第G个选择器产生的值,若为2bit位宽乘法,则G=0,若为4/8/16bit位宽乘法,则G=bit13。由于运算位宽为16bit,因此G=bit3。
所述编码输入值输入至编码模块,首先将被乘数根据子编码输入值进行分解,使所述被乘数分解后与所述乘数位相对应,如图3所示,即为按两位一组对被乘数进行分解,得到多组子被乘数,本实施例中实际得到8组子被乘数,图3中仅为示例性说明;通过子编码输入值对对应的子被乘数进行并行乘法运算,生成8个第一部分子积;输出8个第一部分子积,每个第一部分子积为2bit乘数和2bit被乘数进行乘法运算得到的4bit部分积,8个第一部分子积即为第一部分积。
由于所述运算位宽16bit为所述第一级子加法模块的预设的加法位宽,因此所述编码模块与所述第一级子加法模块相连接,第一级子加法模块与所述部分积选择模块相连接,所述第一部分积输入至第一级子加法模块中,第一级子加法模块中的4个Wallace tree加法单元分别对8个第一部分子积进行两两加法运算,输出包含4组4bit加法的结果,即4组8bit部分积,即为一级第二部分积。
由于所述运算位宽16bit为所述第二级子加法模块的预设的加法位宽,因此所述第一级子加法模块与所述第二级子加法模块相连接,第二级子加法模块与所述部分积选择模块相连接,所述一级第二部分积输入至第二级子加法模块中,第二级子加法模块中的2个Wallace tree加法单元分别对一级第二部分积中的4组8bit部分积进行两两加法运算,输出包含2组8bit加法的结果,即2组16bit部分积,即为二级第二部分积。
由于所述运算位宽16bit为所述第三级子加法模块的预设的加法位宽,因此所述第二级子加法模块与所述第三级子加法模块相连接,第三级子加法模块与所述部分积选择模块相连接,所述二级第二部分积输入至第三级子加法模块中,第三级子加法模块中的1个Wallace tree加法单元分别对二级第二部分积中的2组16bit部分积进行两两加法运算,输出包含1组16bit加法的结果,即1组32bit部分积,即为三级第二部分积。
所述编码模块输出2bit乘法结果、4bit部分积至所述部分积选择模块,所述第一级子加法模块输出4bit乘法结果、8bit部分积至所述部分积选择模块,所述第二级子加法模块输出8bit乘法结果、16bit部分积至所述部分积选择模块,所述第三级子加法模块输出16bit乘法结果、32bit部分积至所述部分积选择模块。
所述部分积选择模块根据通过位宽选择模块选择的输出位宽,从第一部分积和多个第二部分积中选择与输出位宽相同的部分积作为目标部分积并输出,即为从4bit部分积、8bit部分积、16bit部分积、32bit部分积中选择与输出位宽相同的部分积作为目标部分积并输出。若输出位宽为2bit,则选择2bit部分积作为目标部分积并输出;若输出位宽为4bit,则选择4bit部分积作为目标部分积并输出;若输出位宽为8bit,则选择8bit部分积作为目标部分积并输出;若输出位宽为16bit,则选择16bit部分积作为目标部分积并输出;若输出位宽为32bit,则选择32bit部分积作为目标部分积并输出。
本实施例中提出的乘法器,支持同时计算8组2bit×2bit运算,其每组结果为4bit数据,支持同时计算4组4bit×4bit运算,其每组结果为8bit数据,支持同时计算2组8bit×8bit运算,其每组结果为16bit数据,支持同时计算1组16bit×16bit运算,其每组结果为32bit数据。以上也可以发现,乘数为16bit,被乘数为16bit,两个部分积各为32bit,无论采用哪种位宽,硬件上输入、输出的端口都是兼容的。此外,在以上数据位宽的基础上,还支持符号位的选择,即支持乘数为有符号数,被乘数为有符号数;支持乘数为无符号数,被乘数为有符号数;支持乘数为无符号数,被乘数为无符号数。
综上,本实施例中提出的乘法器实现了对不同位宽乘法的运算,并输出不同位宽的乘法目标部分积。
下面,根据图4描述本公开另一实施例的乘法运算方法,该乘法运算方法可以采用前文记载的乘法器实现,具体可以参考前文相关记载,在此不作赘述。
如图4所示,一种乘法运算方法,包括:
S1:根据不同的运算位宽将接收到的乘数生成不同的编码输入值;
S2:根据不同的编码输入值生成不同的编码值,并根据所述不同的编码值与接收到的被乘数进行运算得到第一部分积;
S3:根据所述不同的运算位宽将所述第一部分积进行对应次数的并行累加,生成不同的第二部分积;
S4:根据接收到的输出位宽选择性地从所述第一部分积和所述不同的第二部分积中选择出对应的部分积作为目标部分积并输出。
进一步的,在步骤S1之前,还包括步骤S0:
S0:选择位宽模式,具体为选择运算位宽和选择输出位宽,所述输出位宽小于等于运算位宽。此外,步骤S0中,所述选择位宽模式还包括选择符号信息。
步骤S1中,所述乘数预处理模块110根据不同的运算位宽将接收到的乘数生成不同的编码输入值,具体为根据所述不同的运算位宽和预设的编码基数,将接收到的所述乘数生成依序放置的多组子编码输入值,第一组所述子编码输入值包括固定零位和乘数位,其余组所述子编码输入值包括选择位和乘数位;根据所述乘数确定每组子编码输入值的乘数位;根据所述运算位宽确定每组子编码输入值的选择位。
所述步骤S1具体包括:
S11:根据所述运算位宽m和预设的编码基数n将编码输入值分解为多个子编码输入值,具体为以n-1的位数为一组、将编码输入值进行分组,所述编码输入值共包括m/(n-2)组子编码输入值。此外,第一组子编码输入值包括固定零位和乘数位,其余组所述子编码输入值包括选择位和乘数位。
S12:根据所述乘数确定每组子编码输入值的乘数位,具体为:
根据所述子编码输入值的位数将所述乘数依序放置入每组子编码输入值中的乘数位中,所述依序放置具体为从低位到高位依序方式。
S13:根据所述运算位宽确定每组子编码输入值的选择位,即固定零位和选择位,固定零位值为0,根据所述不同的运算位宽生成对应一组所述子编码输入值的所述选择位,具体为:
当所述运算位宽为一个预设的高运算位宽时,根据所述高运算位宽,将前一组子编码输入值中处于高位的乘数位作为对应一组所述子编码输入值的所述选择位;
当所述运算位宽为一个预设的低运算位宽时,根据所述低运算位宽,将固定零位作为对应一组所述子编码输入值的所述选择位。
步骤S2中,所述编码模块120根据不同的编码输入值生成不同的编码值,本实施例中,所述编码模块120使用一个booth编码模块,即根据所述不同的编码输入值生成带不同的固定偏值的不同的booth编码值;其中,所述固定偏值与所述运算位宽相对应。
步骤S2中,所述据所述不同的编码值与接收到的被乘数进行运算得到第一部分积,具体为:将所述被乘数根据子编码输入值进行分解,使所述被乘数分解后与所述乘数位相对应,在本实施例中,即为按两位一组对被乘数进行分解,得到多组子被乘数;通过子编码输入值对对应的子被乘数进行并行乘法运算,生成多个第一部分子积;根据多个第一部分子积得到第一部分积。所述第一部分子积的数量与子编码输入值的组数相同且一一对应。
步骤S3中,所述加法模块130根据所述不同的运算位宽将所述第一部分积进行对应次数的并行累加,生成不同的第二部分积,具体为:判断所述运算位宽是否与多级预设的加法位宽相同,若相同,则执行当前级累加运算,得到当前级第二部分积;否则,则不执行累加运算。在执行当前级累加运算时,具体为并行的执行多次累加运算,即为将每两个第一部分子积进行累加或为将每两个多级第二部分子积进行累加。本实施例中,所述多级第二部分子积包括一级第二部分子积、二级第二部分子积和三级第二部分子积。在本实施例中,所述累加使用Wallace tree方法进行。
步骤S4中,所述部分积选择模块140选择性地从所述第一部分积和所述不同的第二部分积中选择出对应的部分积作为目标部分积并输出,具体为:所述部分积选择模块根据接收的输出位宽,从所述第一部分积和所述不同的第二部分积中选择出与接收的输出位宽相同的部分积作为目标部分积并输出。所述第二部分积包括多级第二部分积,在本实施例中,即为一级第二部分积、二级第二部分积和三级第二部分积。
下面,参考图5描述本公开另一实施例的运算装置。
如图5所示,所述运算装置包括实施1中公开的乘法器,还包括目标部分积累加器和固定偏值修正器;
所述目标部分积累加器用于将所述乘法器输出的目标部分积进行累加运算,生成带固定偏值的乘法结果;
所述固定偏值修正器用于修正带固定偏值的乘法结果的固定偏值,得到乘法结果。
进一步的,本实施例中还公开一种运算芯片,所述芯片使用前文记载的乘法器。
进一步的,本实施例中还公开一种电子设备,包括:一个或多个处理器;一个存储单元,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,能使得所述一个或多个处理器实现前文记载的乘法运算方法。
此外,本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时能实现根据前文记载的乘法运算方法,乘法运算方法具体可以参考前文相关记载。
其中,计算机可读介质可以是本公开的装置、设备、系统中所包含的,也可以是单独存在。
其中,计算机可读存储介质可是任何包含或存储程序的有形介质,其可以是电、磁、光、电磁、红外线、半导体的系统、装置、设备,更具体的例子包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、光纤、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件,或它们任意合适的组合。
其中,计算机可读存储介质也可包括在基带中或作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码,其具体的例子包括但不限于电磁信号、光信号,或它们任意合适的组合。
可以理解的是,以上实施方式仅仅是为了说明本公开的原理而采用的示例性实施方式,然而本公开并不局限于此。对于本领域内的普通技术人员而言,在不脱离本公开的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本公开的保护范围。

Claims (10)

1.一种乘法器,其特征在于,所述乘法器包括一个乘数预处理模块、一个编码模块、一个加法模块和一个部分积选择模块,其中:
所述乘数预处理模块,用于根据不同的运算位宽将其接收到的乘数生成不同的编码输入值;
所述编码模块,用于根据不同的所述编码输入值生成不同的编码值,并根据所述不同的编码值与接收到的被乘数进行运算得到第一部分积;
所述加法模块,用于根据所述不同的运算位宽将所述第一部分积进行对应次数的累加,生成不同的第二部分积;
所述部分积选择模块,用于根据接收到的输出位宽选择性地从所述第一部分积和所述不同的第二部分积中选择出对应的部分积作为目标部分积并输出;
所述根据不同的运算位宽将其接收到的乘数生成不同的编码输入值,还包括:
所述乘数预处理模块,还用于:
根据所述不同的运算位宽和预设的编码基数,将接收到的所述乘数生成依序放置的多组子编码输入值,第一组所述子编码输入值包括固定零位和乘数位,其余组所述子编码输入值包括选择位和乘数位;
根据所述乘数确定所述乘数位,根据所述运算位宽确定所述选择位;
所述乘数预处理模块还包括至少一个选择器,每个所述选择器对应其余组所述子编码输入值中的一组所述子编码输入值,其中,
所述选择器,用于根据所述不同的运算位宽,生成对应一组所述子编码输入值的所述选择位;
所述根据所述不同的运算位宽,生成对应一组所述子编码输入值的所述选择位,还包括:
当所述运算位宽为一个预设的高运算位宽时,所述选择器,还用于根据所述高运算位宽,将当前选择器所对应的子编码输入值的前一组子编码输入值中处于高位的乘数位作为所述选择位;
当所述运算位宽为一个预设的低运算位宽时,所述选择器,还用于根据所述低运算位宽,将固定零位作为所述选择位。
2.根据权利要求1所述的乘法器,其特征在于,所述编码模块采用一个booth编码模块,所述根据不同的编码输入值生成不同的编码值,具体为:
所述booth编码模块,用于根据所述不同的编码输入值生成带不同的固定偏值的不同的booth编码值;其中,所述固定偏值与所述运算位宽相对应。
3.根据权利要求1或2所述的乘法器,其特征在于,所述加法模块还包括一个第一级子加法模块、一个第二级子加法模块和一个第三级子加法模块;其中,
所述编码模块选择性地与所述第一级子加法模块和所述部分积选择模块相连;
所述第一级子加法模块选择性地与所述第二级子加法模块和所述部分积选择模块相连;
所述第二级子加法模块选择性地与所述第三级子加法模块和所述部分积选择模块相连;
所述第三级子加法模块与所述部分积选择模块相连。
4.根据权利要求1或2所述的乘法器,其特征在于,所述乘数预处理模块还用于根据接收到的不同符号信息将其接收到的乘数生成不同的编码输入值。
5.根据权利要求3中所述的乘法器,其特征在于,所述乘数预处理模块还用于根据接收到的不同符号信息将其接收到的乘数生成不同的编码输入值。
6.一种乘法运算方法,其特征在于,包括:
根据不同的运算位宽将接收到的乘数生成不同的编码输入值;
根据不同的编码输入值生成不同的编码值,并根据所述不同的编码值与接收到的被乘数进行运算得到第一部分积;
根据所述不同的运算位宽将所述第一部分积进行对应次数的并行累加,生成不同的第二部分积;
根据接收到的输出位宽选择性地从所述第一部分积和所述不同的第二部分积中选择出对应的部分积作为目标部分积并输出;
所述根据不同的运算位宽将接收到的乘数生成不同的编码输入值,还包括:
根据所述不同的运算位宽和预设的编码基数,将接收到的所述乘数生成依序放置的多组子编码输入值,第一组所述子编码输入值包括固定零位和乘数位,其余组所述子编码输入值包括选择位和乘数位;
根据所述乘数确定所述乘数位,根据所述运算位宽确定所述选择位;
所述根据所述运算位宽确定所述选择位,还包括:
当所述运算位宽为一个预设的高运算位宽时,根据所述高运算位宽,将前一组子编码输入值中处于高位的乘数位作为对应一组所述子编码输入值的所述选择位;
当所述运算位宽为一个预设的低运算位宽时,根据所述低运算位宽,将固定零位作为对应一组所述子编码输入值的所述选择位。
7.根据权利要求6所述的方法,其特征在于,所述根据不同的编码输入值生成不同的编码值,还包括:
根据所述不同的编码输入值生成带不同的固定偏值的不同的booth编码值;其中,所述固定偏值与所述运算位宽相对应。
8.一种运算芯片,其特征在于,包括权利要求1-5中任一项所述的乘法器。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
一个存储单元,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,能使得所述一个或多个处理器实现根据权利要求6-7中任意一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,
所述计算机程序被处理器执行时能够实现根据权利要求6-7中任意一项所述的方法。
CN202010322268.2A 2020-04-22 2020-04-22 乘法器、乘法运算方法、运算芯片、电子设备及存储介质 Active CN111522528B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202010322268.2A CN111522528B (zh) 2020-04-22 2020-04-22 乘法器、乘法运算方法、运算芯片、电子设备及存储介质
TW109139769A TWI783295B (zh) 2020-04-22 2020-11-13 乘法器及乘法運算方法
US17/146,946 US20210349692A1 (en) 2020-04-22 2021-01-12 Multiplier and multiplication method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010322268.2A CN111522528B (zh) 2020-04-22 2020-04-22 乘法器、乘法运算方法、运算芯片、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN111522528A CN111522528A (zh) 2020-08-11
CN111522528B true CN111522528B (zh) 2023-03-28

Family

ID=71904394

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010322268.2A Active CN111522528B (zh) 2020-04-22 2020-04-22 乘法器、乘法运算方法、运算芯片、电子设备及存储介质

Country Status (3)

Country Link
US (1) US20210349692A1 (zh)
CN (1) CN111522528B (zh)
TW (1) TWI783295B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112214199B (zh) * 2020-09-11 2022-06-21 北京草木芯科技有限公司 256位乘法器
CN112114776B (zh) * 2020-09-30 2023-12-15 本源量子计算科技(合肥)股份有限公司 一种量子乘法运算方法、装置、电子装置及存储介质
CN112527241B (zh) * 2020-12-10 2023-08-08 深圳市紫光同创电子有限公司 并行有限域乘法装置
CN113010148B (zh) * 2021-02-09 2022-11-11 南方科技大学 一种适用于混合精度神经网络的定点乘加运算单元及方法
WO2023015442A1 (zh) * 2021-08-10 2023-02-16 华为技术有限公司 一种乘法器
CN114239819B (zh) * 2021-12-24 2023-09-26 西安交通大学 一种基于dsp的混合位宽加速器及融合计算方法
CN114063975B (zh) * 2022-01-18 2022-05-20 中科南京智能技术研究院 一种基于sram存内计算阵列的计算系统及方法
CN116126282B (zh) * 2022-12-21 2023-08-18 辉羲智能科技(上海)有限公司 自动驾驶辅助控制方法、系统及其ai计算方法、装置
CN115857873B (zh) * 2023-02-07 2023-05-09 兰州大学 乘法器、乘法计算方法、处理系统及存储介质
CN116974514B (zh) * 2023-07-21 2024-02-02 北京市合芯数字科技有限公司 位值计数电路装置、处理器芯片及位值计数方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6035318A (en) * 1998-03-31 2000-03-07 Intel Corporation Booth multiplier for handling variable width operands
CN102591615A (zh) * 2012-01-16 2012-07-18 中国人民解放军国防科学技术大学 结构化混合位宽乘法运算方法及装置
CN104090737A (zh) * 2014-07-04 2014-10-08 东南大学 一种改进型部分并行架构乘法器及其处理方法
CN110673823A (zh) * 2019-09-30 2020-01-10 上海寒武纪信息科技有限公司 乘法器、数据处理方法及芯片

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6421698B1 (en) * 1998-11-04 2002-07-16 Teleman Multimedia, Inc. Multipurpose processor for motion estimation, pixel processing, and general processing
JP4282193B2 (ja) * 2000-01-13 2009-06-17 株式会社ルネサステクノロジ 乗算装置
TWI263164B (en) * 2004-12-29 2006-10-01 Ind Tech Res Inst Booth array multiplier with bypass circuits
JP4988627B2 (ja) * 2008-03-05 2012-08-01 ルネサスエレクトロニクス株式会社 フィルタ演算器及び動き補償装置
US9563401B2 (en) * 2012-12-07 2017-02-07 Wave Computing, Inc. Extensible iterative multiplier

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6035318A (en) * 1998-03-31 2000-03-07 Intel Corporation Booth multiplier for handling variable width operands
CN102591615A (zh) * 2012-01-16 2012-07-18 中国人民解放军国防科学技术大学 结构化混合位宽乘法运算方法及装置
CN104090737A (zh) * 2014-07-04 2014-10-08 东南大学 一种改进型部分并行架构乘法器及其处理方法
CN110673823A (zh) * 2019-09-30 2020-01-10 上海寒武纪信息科技有限公司 乘法器、数据处理方法及芯片

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
高性能乘法器设计;周啸等;《信息通信》;20180515(第05期);全文 *

Also Published As

Publication number Publication date
CN111522528A (zh) 2020-08-11
US20210349692A1 (en) 2021-11-11
TW202141261A (zh) 2021-11-01
TWI783295B (zh) 2022-11-11

Similar Documents

Publication Publication Date Title
CN111522528B (zh) 乘法器、乘法运算方法、运算芯片、电子设备及存储介质
US10491239B1 (en) Large-scale computations using an adaptive numerical format
CN111008003B (zh) 数据处理器、方法、芯片及电子设备
CN110515589B (zh) 乘法器、数据处理方法、芯片及电子设备
CN112434801B (zh) 一种按照比特精度进行权重拆分的卷积运算加速方法
CN110362293B (zh) 乘法器、数据处理方法、芯片及电子设备
KR20200134281A (ko) 추계학적 반올림 로직
CN108256638B (zh) 微处理器电路以及执行神经网络运算的方法
US11907680B2 (en) Multiplication and accumulation (MAC) operator
WO1999066423A1 (fr) Dispositif pour calcul de donnees
CN102004627B (zh) 乘法舍入实现方法和装置
WO2022170811A1 (zh) 一种适用于混合精度神经网络的定点乘加运算单元及方法
CN112241251B (zh) 用于处理浮点数的设备和方法
CN110147217B (zh) 除法器
CN115840556A (zh) 一种基于6位近似全加器的2组有符号张量计算电路结构
CN116166217A (zh) 执行浮点操作的系统和方法
CN115526131A (zh) 多级编码近似计算Tanh函数的方法及装置
CN209895329U (zh) 乘法器
CN110647307B (zh) 数据处理器、方法、芯片及电子设备
CN116090513A (zh) 矩阵乘法的运算方法及装置
CN209879493U (zh) 乘法器
CN109992242B (zh) 基于乘法器的运算方法及装置
CN112783470A (zh) 一种用于执行浮点对数运算的装置和方法
CN117632854B (zh) 数据处理方法、装置以及设备
CN111126580B (zh) 采用Booth编码的多精度权重系数神经网络加速芯片运算装置

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
CB02 Change of applicant information

Address after: 361005 1501, zone a, innovation building, software park, torch hi tech Zone, Xiamen City, Fujian Province

Applicant after: Xiamen Xingchen Technology Co.,Ltd.

Address before: 361005 1501, zone a, innovation building, software park, torch hi tech Zone, Xiamen City, Fujian Province

Applicant before: Xiamen Xingchen Technology Co.,Ltd.

Address after: 361005 1501, zone a, innovation building, software park, torch hi tech Zone, Xiamen City, Fujian Province

Applicant after: Xingchen Technology Co.,Ltd.

Address before: 361005 1501, zone a, innovation building, software park, torch hi tech Zone, Xiamen City, Fujian Province

Applicant before: Xiamen Xingchen Technology Co.,Ltd.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant