首页> 中国专利> 基于时间域的存内乘法电路和基于时间域的存内乘加电路

基于时间域的存内乘法电路和基于时间域的存内乘加电路

摘要

本公开实施例公开了一种基于时间域的存内乘法电路和基于时间域的存内乘加电路、芯片、计算装置,其中,该存内乘法电路包括:第一预设数量个数据存储单元、数据输入接口、脉冲输入接口、脉冲输出接口、第二预设数量个延迟单元和第二预设数量个延迟控制单元,各个延迟单元串行连接;延迟控制单元的两个输入端口分别连接数据输入接口和对应的数据存储单元,延迟控制单元的输出端口连接对应的延迟单元;延迟单元用于根据对应的延迟控制单元输出的数值,确定是否开启脉宽调整;第二预设数量个延迟单元中排在首位和末位的延迟单元分别与脉冲输入接口和脉冲输出接口连接。本公开实施例降低了存内计算电路的功耗,提高了存内计算电路的集成度。

著录项

  • 公开/公告号CN113268220A

    专利类型发明专利

  • 公开/公告日2021-08-17

    原文格式PDF

  • 申请/专利权人 南京后摩智能科技有限公司;

    申请/专利号CN202110821811.8

  • 申请日2021-07-21

  • 分类号G06F7/544(20060101);

  • 代理机构11657 北京思源智汇知识产权代理有限公司;

  • 代理人毛丽琴

  • 地址 210046 江苏省南京市栖霞区经济技术开发区兴智路6号兴智科技园C栋第18层1807室

  • 入库时间 2023-06-19 12:16:29

说明书

技术领域

本公开涉及计算机技术领域,尤其是一种基于时间域的存内乘法电路和基于时间域的存内乘加电路、芯片和计算装置。

背景技术

存内计算,是通过将存储部分和计算部分结合在一起的一种技术,为打破传统冯诺依曼体系结构的存储墙等诸多问题。该技术涉及了计算机体系结构、数字集成电路、模拟集成电路、数模转换、软硬件协同优化等诸多学科。其相关技术主要包括:存储阵列设计、存内布尔逻辑计算方法和存内计算结果提取这三类关键技术。存内计算技术在低功耗芯片设计,人工智能加速器设计等多种领域都有广泛应用。

发明内容

本公开的实施例提供了一种基于时间域的存内乘法电路和基于时间域的存内乘加电路,该电路包括:第一预设数量个数据存储单元、数据输入接口、脉冲输入接口、脉冲输出接口、一一对应的第二预设数量个延迟单元和第二预设数量个延迟控制单元,第二预设数量个延迟单元串行连接;对于第二预设数量个延迟控制单元中的延迟控制单元,该延迟控制单元的两个输入端口分别连接数据输入接口和对应的数据存储单元,该延迟控制单元的输出端口连接对应的延迟单元;延迟单元用于根据对应的延迟控制单元输出的数值,确定是否开启脉宽调整,如果开启,在输入的脉冲的脉宽的基础上,使脉宽变化对应宽度并输出调整脉宽后的脉冲;如果不开启,输出不经过脉宽调整的脉冲;第二预设数量个延迟单元中排在首位和末位的延迟单元分别与脉冲输入接口和脉冲输出接口连接,脉冲输出接口用于输出表示数据输入接口输入的单比特数据与第一预设数量个数据存储单元存储的数据的乘积的脉冲。

在一些实施例中,该电路还包括:符号位输入接口、乘积符号位判断单元,第一预设数量个数据存储单元包括符号位存储单元;乘积符号位判断单元的两个输入端分别连接符号位输入接口和符号位存储单元,第二预设数量个延迟单元分别连接乘积符号位判断单元的输出端;对于第二预设数量个延迟单元中的延迟单元,该延迟单元用于根据乘积符号位判断单元的输出端输出的数值,控制经过该延迟单元的脉冲的脉宽增大或减小。

在一些实施例中,对于第二预设数量个延迟单元中的延迟单元,当乘积符号位判断单元输出的数值表示乘积为正数,且由延迟控制单元确定开启脉宽调整时,经过该延迟单元的脉冲的脉宽增大对应宽度;当乘积符号位判断单元输出的数值表示乘积为负数,且由延迟控制单元确定开启脉宽调整时,经过该延迟单元的脉冲的脉宽减小对应宽度。

在一些实施例中,乘积符号位判断单元由用于判断两个符号位是否相同的逻辑电路构成,用于判断两个符号位是否相同的逻辑电路包括以下任一种:异或门、同或门。

在一些实施例中,经过延迟单元调整的脉宽变化幅度是预设幅度的整数倍,且不同的延迟单元对应不同的整数倍。

在一些实施例中,第二预设数量个延迟控制单元中的延迟控制单元包括以下任一种逻辑电路:与门、或非门、与非门、或门。

根据本公开实施例的另一个方面,提供了一种基于时间域的存内乘加电路,包括:通过脉冲输入接口和脉冲输出接口串行连接的预设数量个存内乘法模块,其中,存内乘法模块由上述基于时间域的存内乘法电路构建,预设数量个存内乘法模块的数据输入接口用于分别依次接收预设数量个输入数据包括的相同位置的单比特位;时间数字转换模块,用于接收预设数量个存内乘法模块中的排在末位的存内乘法模块的脉冲输出接口输出的脉冲,并检测脉冲的脉宽,基于脉宽生成表征预设数量个输入数据中相同位置的单比特位与预设数量个存内乘法模块存储的数据的中间乘加结果;移位累加器,用于将依次得到的各个中间乘加结果进行相应位数的移位累加,得到预设数量个输入数据与预设数量个存内乘法模块存储的数据的乘加结果。

在一些实施例中,时间数字转换模块进一步用于:基于预设数量个存内乘法模块的原始脉冲的脉宽相对于输出脉冲的脉宽的变化幅度与预设幅度的倍数,得到当前输入的预设数量个输入数据的单比特位对应的中间乘加结果。

根据本公开实施例的另一个方面,提供了一种芯片,该芯片包括基于时间域的存内乘法模块阵列,该阵列包括的存内乘法模块包括上述实施例中描述的基于时间域的存内乘法电路,该芯片还包括时间数字转换模块和移位累加器。

根据本公开实施例的另一个方面,提供了一种计算装置,该计算装置包括上述芯片。

本公开上述实施例提供的基于时间域的存内乘法电路和基于时间域的存内乘加电路、芯片、计算装置,通过在电路内设置数据存储单元对应的延迟单元和延迟控制单元,由延迟控制单元对输入的比特位和存储的比特位进行乘法计算,计算结果用来控制对应的延迟单元是否调整输入的脉冲的脉宽,进而由串联的各个延迟单元输出表示输入的单比特位和存储的多比特数据的乘积的脉冲,根据该脉冲的脉宽,可以将单比特位和多比特数据的乘积还原,从而实现了利用时间域的脉冲信号进行存内乘法计算,有效避免了现有技术中由于存内计算电路使用了大量敏感放大器造成的电路面积开销庞大和模数转换精度下降的问题,降低了存内计算电路的功耗,提高了存内计算电路的集成度。

下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。

附图说明

通过结合附图对本公开实施例进行更详细的描述,本公开的上述以及其他目的、特征和优势将变得更加明显。附图用来提供对本公开实施例的进一步理解,并且构成说明书的一部分,与本公开实施例一起用于解释本公开,并不构成对本公开的限制。在附图中,相同的参考标号通常代表相同部件或步骤。

图1是本公开一示例性实施例提供的基于时间域的存内乘法电路的结构示意图。

图2是本公开另一示例性实施例提供的基于时间域的存内乘法电路的结构示意图。

图3是本公开一示例性实施例提供的基于时间域的存内乘加电路的结构示意图。

图4是本公开一示例性实施例提供的芯片的结构示意图。

具体实施方式

下面,将参考附图详细地描述根据本公开的示例实施例。显然,所描述的实施例仅仅是本公开的一部分实施例,而不是本公开的全部实施例,应理解,本公开不受这里描述的示例实施例的限制。

应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。

本领域技术人员可以理解,本公开实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等,既不代表任何特定技术含义,也不表示它们之间的必然逻辑顺序。

还应理解,在本公开实施例中,“多个”可以指两个或两个以上,“至少一个”可以指一个、两个或两个以上。

还应理解,对于本公开实施例中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。

另外,本公开中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本公开中字符“/”,一般表示前后关联对象是一种“或”的关系。

还应理解,本公开对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

申请概述

传统的存内计算方法,目前主要是使用存储阵列中不同大小的电压电流值,结合敏感放大器来完成存内乘法和累加操作。但是随着阵列扩大,敏感放大器很难进行精确的模数转换,而且敏感放大器也带来了庞大的面积开销,使得传统存内计算架构的阵列过于庞大,无法拥有更高的集成度的同时也带来了巨大的功耗。

示例性结构

图1是本公开一示例性实施例提供的基于时间域的存内乘法电路的结构示意图。该电路包含的各个组成部分可以集成到一个芯片中,也可以设置到不同的芯片或电路板中,这些芯片或电路板之间建立数据通信的链路。

如图1所示,该电路包括:第一预设数量个数据存储单元101、数据输入接口102、脉冲输入接口103、脉冲输出接口104、一一对应的第二预设数量个延迟单元105和第二预设数量个延迟控制单元106,第二预设数量个延迟单元106串行连接。

串行连接的各个延迟单元中,排在首位的延迟单元与脉冲输入接口103连接,排在末位的延迟单元与脉冲输出接口104连接。延迟单元可以对输入其中的脉冲的宽度进行加宽、缩窄或保持不变。数据输入接口102通常按照次序依次输入多比特数据的每个单比特位。输入次序可以是由高位到低位,也可以是由低位到高位。通常,可以将多个该乘法电路通过脉冲输入接口和脉冲输出接口串联,若该乘法电路位于串联电路的首位,则在通过数据输入接口102接收到一个比特位的同时,可以向脉冲输入接口103输入一个固定脉宽的脉冲。若该乘法电路位于串联电路的其他位置,则可以由脉冲输入接口103接收与其连接的其他延迟单元输出的脉冲。

上述第一预设数量个数据存储单元101包括的每个数据存储单元用于存储多比特数据包括的单比特位。作为示例,当该乘法电路应用于人工神经网络时,可以在第一预设数量个数据存储单元101中预先存储权重数据包括的每个比特位。数据存储单元可以是各种用于存储单比特数据的存储单元,例如SRAM(静态随机存取存储器,Static RandomAccessMemory)。如图2所示,W[1][3]~ W[1][0]是4比特权重数据包括的每个比特位,分别存储在由SRAM构成的数据存储单元中。

在本实施例中,如图1所示,对于第二预设数量个延迟控制单元106中的延迟控制单元,该延迟控制单元的两个输入端口分别连接数据输入接口102和对应的数据存储单元,该延迟控制单元的输出端口连接对应的延迟单元。需要说明的是,第二预设数量可以与第一预设数量相同或不同。例如,当相同时,该电路可以实现对无符号二进制数的乘法运算,当不同时,可以实现对有符号二进制数的乘法运算。例如,图2示出了W[1][3]为有符号数的符号位的情况,此时,第一预设数量为4,第二预设数量为3,图2包含三个延迟控制单元(即AND表示的三个与门)和三个延迟单元(用DELAY表示)。

延迟控制单元输出的数据用于控制对应的延迟单元是否开启脉宽调整。

可选的,第二预设数量个延迟控制单元106中的延迟控制单元包括以下任一种逻辑电路:与门、或非门、与非门、或门。如图2所示,延迟控制单元由与门构成,图中AND表示与门,当输入的数据IN[1]包括的一个单比特数据(如图中所示的IN[1][2]或IN[1][1]或IN[1][0])通过数据输入接口输入某个与门时,该与门对输入的单比特数据和存储在对应的数据存储单元的单比特数据进行“与”运算,当输入的两个单比特数据均为1时,向对应的延迟控制单元输出1,此时延迟控制单元对输入其中的脉冲进行脉宽调整。通过使用与门构造延迟控制单元106,可以简单、有效地实现模拟两个单比特位相乘,从而有助于提高该电路实现时的效率。

需要说明的是,本实施例中的延迟控制单元还可以由其他形式的电路实现,例如可以使用与非门、或非门等。

在本实施例中,延迟单元用于根据对应的延迟控制单元输出的数值,确定是否开启脉宽调整,如果开启,在输入的脉冲的脉宽的基础上,使脉宽变化对应宽度并输出调整脉宽后的脉冲;如果不开启,输出不经过脉宽调整的脉冲。

具体地,每个数据存储单元对应的延迟单元进行脉宽调整时的脉宽变化幅度不同。

在一些可选的实现方式中,经过延迟单元调整的脉宽变化幅度是预设幅度的整数倍,且不同的延迟单元对应不同的整数倍。通常,可以根据二进制数的特点,从第一预设数量个数据存储单元101存储的二进制数的第0位开始,每个比特位对应的延迟单元进行脉宽调整的脉宽变化幅度为预设幅度的1倍、2倍、4倍、8倍……。作为示例,如图2所示的W[1][0]、W[1][1]、W[1][2]分别对应的脉宽变化幅度为1*Δt,2*Δt,4*Δt,其中,Δt为预设幅度。该实现方式通过设置每个延迟单元对应的不同的脉宽变化幅度,可以有效地利用各个延迟单元输出的脉冲的脉宽,与二进制数的特点相对应,进而有助于后续更加准确、高效地将输出的脉冲根据脉宽还原为单比特数与多比特数的乘积。

在本实施例中,第二预设数量个延迟单元105中排在首位和末位的延迟单元分别与脉冲输入接口103和脉冲输出接口104连接,脉冲输出接口104用于输出表示从数据输入接口102输入的单比特数据与第一预设数量个数据存储单元101存储的数据的乘积的脉冲。

如图1所示,脉冲从脉冲输入接口103输入排在首位的延迟单元,经过各个延迟单元后,最终由脉冲输出接口104输出一个脉冲,根据输出的脉冲相对于输入的脉冲的脉宽变化幅度,可以得到输入的单比特数据与存储的多比特数据的乘积。

作为示例,当输出的脉冲相对于输入的脉冲的脉宽变化幅度为+5倍预设幅度时,则乘积为5。

在一些可选的实现方式中,如图1所示,该电路还包括:符号位输入接口107、乘积符号位判断单元108,第一预设数量个数据存储单元101包括符号位存储单元1011。

乘积符号位判断单元108的两个输入端分别连接符号位输入接口107和符号位存储单元1011,第二预设数量个延迟单元105分别连接乘积符号位判断单元1011的输出端。上述符号位输入接口107用于输入有符号的多比特数据包括的符号位。上述乘积符号位判断单元108用于根据输入的数据的符号位和存储的数据的符号位,判断乘积的符号。

可选的,乘积符号位判断单元由用于判断两个符号位是否相同的逻辑电路构成,用于判断两个符号位是否相同的逻辑电路包括以下任一种:异或门、同或门。如图2所示,乘积符号位判断单元为异或门(即图2中的XOR)。当符号位输入接口107输入的符号位IN[1][3]与符号位存储单元1011存储的符号位不同时,输出1,相同时,输出0,从而达到区分乘积的正负号。通过使用异或门构建乘积符号位判断单元,可以简单、有效地实现对乘积符号位的判断,有助于提高实现该乘法电路的效率。

需要说明的是,乘积符号判断单元还可以基于其他电路实现,例如同或门等,凡是可以判断两个数的乘积的电路,均在乘积符号判断单元的范围内。

对于第二预设数量个延迟单元105中的延迟单元,该延迟单元用于根据乘积符号位判断单元108的输出端输出的数值,控制经过该延迟单元的脉冲的脉宽增大或减小。作为示例,当判断乘积的符号为正时,可以增大脉宽,为负时,减小脉宽;或者,当判断乘积的符号为负时,可以增大脉宽,为正时,减小脉宽。

脉宽增大或减小的幅度可以根据存储数据的比特位的不同进行不同幅度的变化。例如上述可选的实现方式描述的,存储的数据的每个比特位对应的延迟单元进行脉宽调整的脉宽变化幅度为预设幅度的1倍、2倍、4倍、8倍……。

本实现方式通过乘积符号位判断单元判断乘积的符号,根据判断结果由每个延迟单元在调整脉宽时进行脉宽增大或减小,从而实现了基于时间域的脉冲信号进行有符号数据的乘法计算,扩展了该电路的应用范围,提高了该电路的适用性。

在一些可选的实现方式中,对于第二预设数量个延迟单元中的延迟单元,当乘积符号位判断单元输出的数值表示乘积为正数,且由延迟控制单元确定开启脉宽调整时,经过该延迟单元的脉冲的脉宽增大对应宽度;当乘积符号位判断单元输出的数值表示乘积为负数,且由延迟控制单元确定开启脉宽调整时,经过该延迟单元的脉冲的脉宽减小对应宽度。

作为示例,当乘积符号位判断单元为异或门时,若输入的数据的符号位与存储的数据的符号位不同,即相乘的数据异号时,输出1,表示乘积为负数;若输入的数据的符号位与存储的数据的符号位相同,即相乘的数据同号时,输出0,表示乘积为正数。

该实现方式可以与上述关于不同的延迟单元对应不同的整数倍的可选实现方式相结合。例如,如图2所示的W[1][0]、W[1][1]、W[1][2]分别对应的脉宽变化幅度为1*Δt,2*Δt,4*Δt。对于W[1][2],若由数据输入接口102输入的单比特位与W[1][2]存储的单比特位均为1且乘积为正时,W[1][2]对应的延迟单元的脉冲的脉宽增大4*Δt;若输入的单比特位与W[1][2]存储的单比特位均为1且乘积为负时,W[1][2]对应的延迟单元的脉冲的脉宽减小4*Δt。

本实现方式通过设定乘积为正时增大脉宽,乘积为负时减小脉宽,能够通过对输出的脉冲的脉宽进行测量确定乘积的正负及数值,从而实现了基于时间域的脉冲进行数字域的有符号数的精确计算。

下面根据一个具体示例,说明该存内乘法电路的工作过程。如图2所示,W[1][3]~W[1][0]分别存储人工神经网络的一个4比特权重数据由高到低的每个比特位,假设该权重数据为有符号数0101,即十进制数+5,由数据输入接口依次输入与权重数据相乘的特征数据IN[1]的各个单比特位,其中IN[1]的符号位也就是IN[1][3]为0,表示输入为正数。假设当前输入的是特征数据的bit 0位的数据“1”,同时输入设定脉宽为T的脉冲。需要计算1×0101的乘积。由W[1][3]和IN[1][3]都为0可以由乘积符号位判断单元得出乘积结果为正数,也就是延迟单元对脉冲的调整均为“增宽”。三个与门分别进行输入的“1”与W[1][2]、W[1][1]、W[1][0]的与运算,得到“101”,对应的三个延迟单元分别对输入的脉冲增宽4*Δt、0*Δt、1*Δt,即W[1][2]对应的延迟单元输出的脉冲宽度为T+4*Δt;然后将该脉冲输入W[1][1]对应的延迟单元,脉冲宽度保持不变,即输出的脉冲宽度为T+4*Δt;接着将该脉冲输入W[1][0]对应的延迟单元,脉冲宽度增大1*Δt,即输出的脉冲宽度为T+5*Δt。

作为另一示例,假设权重数据为有符号数1011,即十进制数-5,由数据输入接口依次输入与权重数据相乘的特征数据IN[1]的各个单比特位,其中IN[1]的符号位也就是IN[1][3]为0,表示输入为正数。假设当前输入的是特征数据的bit 0位的数据“1”,同时输入设定脉宽为T的脉冲。需要计算1×1011的乘积。由W[1][3]为1而IN[1][3]为0可以由乘积符号位判断单元得出乘积结果为负数,也就是延迟单元对脉冲的调整均为“缩窄”。三个与门分别进行输入的“1”与W[1][2]、W[1][1]、W[1][0]的与运算,得到“011”,对应的三个延迟单元分别对输入的脉冲缩窄0*Δt、2*Δt、1*Δt,即W[1][2]对应的延迟单元输出的脉冲宽保持不变为T;然后将该脉冲输入W[1][1]对应的延迟单元,脉冲宽度减小2*Δt,即输出的脉冲宽度为T-2*Δt;接着将该脉冲输入W[1][0]对应的延迟单元,脉冲宽度减小1*Δt,即输出的脉冲宽度为T-3*Δt。

本公开的上述实施例提供的电路,通过在电路内设置数据存储单元对应的延迟单元和延迟控制单元,由延迟控制单元对输入的比特位和存储的比特位进行乘法计算,计算结果用来控制对应的延迟单元是否调整输入的脉冲的脉宽,进而由串联的各个延迟单元输出表示输入的单比特位和存储的多比特数据的乘积的脉冲,根据该脉冲的脉宽,可以将单比特位和多比特数据的乘积还原,从而实现了利用时间域的脉冲信号进行存内乘法计算,有效避免了现有技术中由于存内计算电路使用了大量敏感放大器造成的电路面积开销庞大和模数转换精度下降的问题,降低了存内计算电路的功耗,提高了存内计算电路的集成度。

图3是本公开一示例性实施例提供的基于时间域的存内乘加电路的结构示意图。该电路包含的各个组成部分可以集成到一个芯片中,也可以设置到不同的芯片或电路板中,这些芯片或电路板之间建立数据通信的链路。

如图3所示,该电路包括:预设数量个存内乘法模块301、时间数字转换模块302、移位累加器303。

其中,存内乘法模块由上述图1对应实施例描述的基于时间域的存内乘法电路构建,即本实施例中的存内乘法模块实现的功能以及包含的单元、接口与上述基于时间域的存内乘法电路相同。

上述预设数量个存内乘法模块301通过脉冲输入接口(如图1所示的脉冲输入接口103)和脉冲输出接口(如图1所示的脉冲输出接口104)串行连接,即相邻的两个存内乘法模块中的第一存内乘法模块的脉冲输出接口与第二存内乘法模块的脉冲输入接口连接。

上述预设数量个存内乘法模块301的数据输入接口(如图1所示的数据输入接口120)用于分别依次接收预设数量个输入数据包括的相同位置的单比特位。如图3所示,预设数量为m,当前通过各个存内乘法模块的数据输入接口输入IN[1]~IN[m]的同一位置的单比特位,例如均输入IN[1]~IN[m]的bit0位。每个存内乘法模块输入的单比特数据和存储的多比特数据,均按照上述图1描述的电路执行的运算过程进行乘法计算。由于各个存内乘法模块是通过脉冲输入接口和脉冲输出接口串联的,因此,如图3所示,位于首位的存内乘法模块输出的脉冲输入位于第二位的存内乘法模块,位于第二位的存内乘法模块按照相同的执行过程,在输入的脉冲的基础上进行乘法运算,输出表示乘积的脉冲至下一个存内乘法模块,以此类推,每个存内乘法模块输出的脉冲是基于上一个存内乘法模块输出的脉冲进行叠加的脉冲。位于末位的存内乘法模块输出的脉冲即表示m个乘积相加的中间乘加结果。

上述时间数字转换模块302,用于接收预设数量个存内乘法模块301中的排在末位的存内乘法模块的脉冲输出接口输出的脉冲,并检测脉冲的脉宽,基于脉宽生成表征预设数量个输入数据中相同位置的单比特位与预设数量个存内乘法模块存储的数据的中间乘加结果。

具体地,可以基于现有的脉宽测量方法,对上述排在末位的存内乘法模块输出的脉冲进行脉宽测量,基于脉宽与数字的对应关系,将脉宽转换为相应的数字。

移位累加器303,用于将依次得到的各个中间乘加结果进行相应位数的移位累加,得到预设数量个输入数据与预设数量个存内乘法模块存储的数据的乘加结果。

具体地,对于输入数据的bit 0位,对应的移位累加的位数为0,即不移位;对于输入数据的bit 1位,对应的移位累加的位数为1;依次类推,bit 2位对应移位累加的位数为2……。

作为示例,图3中的m个输入数据为4比特有符号数,对于m个输入数据的bit 0位,该位分别与对应的存内乘法模块中存储的数据的中间乘加结果为S0,对其不进行移位操作;

对于m个输入数据的bit 1位,该位分别与对应的存内乘法模块中存储的数据的中间乘加结果为S1,对其进行左移1位的移位操作;

对于m个输入数据的bit 2位,该位分别与对应的存内乘法模块中存储的数据的中间乘加结果为S2,对其进行左移2位的移位操作;

对于m个输入数据的bit 3位,该位为符号位,通过如图1所示的符号位输入接口107输入,用于计算各个存内乘法模块进行乘法计算的乘积的符号,同时控制各个存内乘法模块中的延迟单元的脉宽增大或减小。上述S0、S1、S2的正负根据输出的脉冲的脉宽相比于原始脉冲的脉宽的变化情况确定。例如S0对应的输出脉冲的脉宽相比于对应的原始脉冲的脉宽缩窄了,则S0为负数。

最后将移位后的中间乘加结果累加,得到每个输入数据和m个存储的数据的乘加结果为:SUM=S2<<2 + S1<<1 + S0。

在一些可选的实现方式中,时间数字转换模块302进一步用于:

基于预设数量个存内乘法模块301的原始脉冲的脉宽相对于输出脉冲的脉宽的变化幅度与预设幅度的倍数,得到当前输入的预设数量个输入数据的单比特位对应的中间乘加结果。

作为示例,对于m个输入数据的bit 0位,经过预设数量个存内乘法模块301输出的脉冲叠加后的脉宽为T+12*Δt,其中,T为输入如图3所示的位于首位的存内乘法模块的原始脉冲的脉宽,Δt为预设的脉宽变化幅度。时间数字转换模块302可以对该脉冲的脉宽与原始脉冲的脉宽比较,确定脉宽增大12*Δt,则m个输入数据的bit 0位分别与对应的存内乘法模块中存储的数据的乘加结果为12。再例如,若输出的脉冲叠加后的脉宽为T-10*Δt,则m个输入数据的bit 0位分别与对应的存内乘法模块中存储的数据的乘加结果为-10。

下面通过具体示例说明该乘加电路的具体执行过程。

假设该乘加电路包括两个存内乘法模块,分别存储的数据为有符号数W[1]:0101和W[2]:0111,分别对应的输入数据为IN[1]:0101和IN[2]:0011。

首先,分别输入IN[1]和IN[2]的最低比特位“1”和“1”至两个存内乘法模块,同时向第一个存内乘法模块的脉冲输入接口输入脉宽为T的原始脉冲。对于第一个存内乘法模块,由于存储的数据为0101,则开启其包括的对应于bit 2和bit 0的延迟单元,脉宽分别增大4*Δt和1*Δt。经过叠加后,第一个存内乘法模块输出的脉冲的脉宽为T+5*Δt。

然后,对于第二个存内乘法模块,由于存储的数据为0111,则开启其包括的对应于bit 2、bit 1和bit 0的延迟单元,脉宽分别增大4*Δt 、2*Δt和1*Δt。在第一个存内乘法模块输出的脉冲的基础上经过叠加后,第二个存内乘法模块输出的脉冲的脉宽为T+5*Δt+7*Δt=T+12*Δt。则输入数据的最低位对应的中间乘加结果为12。

按照同样的方法,继续输入IN[1]和IN[2]的bit 1位,得到bit 1位对应的中间乘加结果。最后输入IN[1]和IN[2]的bit 2位,得到bit 2位对应的中间乘加结果。

IN[1]和IN[2]的bit 3位为符号位,可以分别输入两个存内乘法模块的符号位输入接口,分别根据W[1]和W[2]的符号位,计算输入数据的各个单比特位与存内乘法模块存储的数据的乘积的正负,同时控制对应的存内乘法模块中的延迟模块调整脉宽增大(乘积为正时)或减小(乘积为负时)。

最后将各个中间乘加结果进行对应位数的移位累加,得到最终的乘加结果,即相当于IN[1]* W[1]+ IN[2]* W[2]。

本公开的上述实施例提供的电路,通过将多个基于时间域的存内乘加电路通过脉冲输入接口和脉冲输出接口串联,对各个存内乘加电路输出的脉冲进行叠加,然后利用时间数字转换模块对输出的脉冲的脉宽进行检测,根据检测的脉宽得到数字域的中间乘加结果,最后对各个中间乘加结果进行移位累加,得到最终的多个多比特输入数据和多个存储的多比特数据的乘加结果。实现了基于时间域的数据乘加运算,有效避免了现有技术中由于存内计算电路使用了大量敏感放大器造成的电路面积开销庞大和模数转换精度下降的问题,降低了存内计算电路的功耗,提高了存内计算电路的集成度。

本公开的实施例还提供了一种芯片,芯片上集成了包括基于时间域的存内乘法模块阵列,还包括时间数字转换模块和移位累加器。该阵列包括的存内乘法模块包括上述实施例中描述的基于时间域的存内乘法电路,基于时间域的存内乘法电路的技术细节如图1、图2和相关描述所示,此处不再展开描述。该阵列包括的时间数字转换模块和移位累加器如图3和相关描述所示,此处不再展开描述。如图4所示,芯片上集成了至少一行,每行包括m列的存内乘法模块阵列。每次计算时,输入如4所示的输入数据IN[1]、…、IN[m]、…、IN[n]、…、IN[n+m]的相同位置的单比特位,由时间数字转换模块输出每行对应的中间乘加结果。最后由移位累加器对每行得到的多个中间乘加结果进行移位累加,得到每行对应的乘加结果。

可选的,也可以集成至少一行,每行包括m列的存内乘法模块。其中每一列共用一个输入接口,即仅有IN[1]、…、IN[m]这m个输入数据。第一列存内乘法模块均输入IN[1],第二列存内乘法模块均输入IN[2],以此类推。每一行存内乘法模块共用这些输入接口可以减少输入接口数量从而减少面积开销,同时这样设计也有利于同时计算神经网络中不同输出通道的乘加结果。因为神经网络不同输出通道在计算时,仅保存的权重不同,但是输入是相同的。这样就适配了共用输入接口的阵列模式。

本公开的实施例还提供了一种计算装置,该计算装置包括上述实施例描述的芯片。此外,该计算装置还可以包括输入装置、输出装置以及必要的存储器等。其中,输入装置可以包括诸如鼠标、键盘、触控屏、通信网络连接器等,用于输入多比特数据。输出装置可以包括诸如显示器、打印机、以及通信网络及其所连接的远程输出设备等等,用于输出上述实施例描述的乘加结果。存储器用于存储上述输入装置输入的数据,以及基于时间域的存内乘法电路和基于时间域的存内乘加电路运行过程中产生的数据。存储器可以包括易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。

以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。

本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。

本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。

可能以许多方式来实现本公开的电路。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的电路。用于电路中的方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的电路的功能的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的电路的功能的程序的记录介质。

还需要指出的是,在本公开的电路中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。

提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。

为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号