发明内容
本发明提供了一种多比特存内计算单元及存内计算装置。
根据本发明的一个方面,多比特存内计算单元包括:存储单元、晶体管、选择器和读出电路。存储单元设置为存储1比特数据。晶体管的第一端连接所述存储单元,晶体管的第二端连接读出位线。选择器接收2n个输入电压,选择器根据n比特输入数据选择将所述2n个输入电压中的一个输出到晶体管的栅极,n大于或等于2。读出电路设置为感测所述读出位线的电压变化。其中,2n个输入电压使所述晶体管产生不同大小的电流,所述晶体管的电流为所述读出位线充电或放电。
在本发明的另一实现方式中,所述2n个输入电压使所述读出位线的电压增加或减小0,ΔV,2ΔV,…(2n-1)ΔV。
在本发明的另一实现方式中,所述2n个输入电压的大小逐渐增大。
在本发明的另一实现方式中,所述存储单元为静态随机存储器。
在本发明的另一实现方式中,在预充阶段,所述读出位线预充到预定电压,在计算阶段,所述选择器输出与n比特输入数据对应的输入电压。
根据本发明的另一个方面,多比特存内计算单元包括:n个存储单元、第一晶体管、第二晶体管、选择器和读出电路。n个存储单元中的每个设置为存储1比特数据。第一晶体管的第一端连接读出位线。第二晶体管的第一端连接所述第一晶体管的第二端,所述第二晶体管的第二端接地或电源端。第二晶体管的栅极接收1比特输入数据,所述1比特的输入数据为1时,第二晶体管导通,所述1比特输入数据为0时,所述第二晶体管断开。选择器接收2n个输入电压,并根据所述n个存储单元存储的n比特数据选择将所述2n个输入电压中的一个输出到所述第一晶体管的栅极,n大于或等于2。读出电路设置为感测所述读出位线的电压变化,其中,所述2n个输入电压使所述第一晶体管产生不同大小的电流,所述第一晶体管的电流为所述读出位线充电或放电。
在本发明的另一实现方式中,所述2n个输入电压使所述读出位线的电压增加或减小0,ΔV,2ΔV,…(2n-1)ΔV。
在本发明的另一实现方式中,所述2n个输入电压的大小逐渐增大。
在本发明的另一实现方式中,所述存储单元为静态随机存储器。
在本发明的另一实现方式中,在预充阶段,所述读出位线预充到预定电压,在计算阶段,所述选择器输出与n比特存储数据对应的输入电压。
根据本发明的另一个方面,多比特存内计算单元包括:n个存储单元、第一晶体管和第二晶体管、第一选择器和第二选择器,以及读出电路。n个存储单元中的每个设置为存储1比特数据。第一晶体管和所述第二晶体管串联在读出位线和地或读出位线和电源端之间。第一选择器接收2n个第一输入电压,所述第一选择器根据所述n个存储单元存储的n比特数据选择将所述2n个第一输入电压中的一个输出到所述第一晶体管的栅极,n大于或等于2。第二选择器接收2m个第二输入电压,所述第二选择器根据m比特输入数据选择将所述2m个第二输入电压中的一个输出到所述第二晶体管的栅极,m大于或等于2。读出电路设置为感测所述读出位线的电压变化,其中,流过所述第一晶体管和第二晶体管的电流为所述读出位线充电或放电。
在本发明的另一实现方式中,所述存储单元为静态随机存储器。
根据本发明的另一个方面,存内计算装置包括上述的多比特存内计算单元。
在本发明的另一实现方式中,多个所述多比特存内计算单元连接同一读出位线。
多比特存内计算单元执行输入数据和存储单元中的存储数据之间的乘法。输入数据或存储数据包括多个比特。根据多比特输入数据或多比特存储数据产生不同大小的电流,读出位线通过该电流充电或者放电,读出电路根据读出位线的电压变化获得输入数据和存储数据的乘积。在一个计算周期中能够实现多比特乘法,提高了计算效率。
具体实施方式
下面将结合附图,对本发明实施例中的技术方案进行描述。本发明阐述了各种细节,因为这些细节涉及某些实施例。然而,本发明也可以以与本文描述的方式不同的方式实现。在不脱离本发明的情况下,本领域技术人员可以对所讨论的实施例进行修改。因此,本发明不限于本文公开的特定实施例。
存内计算装置通常包括用于执行乘累加(Multiply Accumulate,MAC)运算的单元。图1示出了相关技术的乘累加运算单元的电路图。图1所示的乘累加运算单元能够进行1比特(bit)输入数据和1比特存储数据的乘法并将多个乘积累加。乘累加运算单元包括存储单元Cell0-Cell3,每个存储单元存储1比特的存储数据。存储数据例如是卷积运算的权重数据。每个存储单元通过晶体管T连接读出位线RBL。具体地,晶体管T的漏端连接读出位线RBL,源端连接对应的存储单元。晶体管T的栅极接收对应的1比特输入数据AI。乘累加运算单元进行乘累加运算时,读出位线RBL先被预充到高电平。输入数据AI0-AI3分别被提供到对应的晶体管T的栅极。如果1比特输入数据AI为0,提供到晶体管T的栅极为低电平,晶体管T不导通,无论存储单元Cell中存储的数据W是1还是0,都不对读出位线RBL的电压产生影响。如果1比特输入数据AI为1,电压V提供到晶体管T的栅极。如果存储单元Cell中存储的数据是0,栅极电压为V的晶体管T的源端和漏端都是高电平,读出位线RBL的电压不变。如果存储单元Cell中存储的数据是1,栅极电压为V的晶体管T的源端为低电平,读出位线RBL通过晶体管T放电。经过预定时间的放电,读出位线RBL的电压降低ΔV。即,在输入数据AI和存储单元Cell中存储的数据W都是1时,读出位线RBL的电压降低ΔV。图1所示的乘累加运算单元能够执行4个1比特输入数据和1比特存储数据的乘法以及4个乘积的累加。例如,4个输入数据AI0-AI3分别为0,0,1,1,对应的存储数据W0-W3分别为0,1,0,1,其乘累加运算的结果为1,只有输入数据AI3和对应的存储数据W3使得读出位线RBL的电压降低ΔV。如果4个输入数据AI0-AI3分别为0,0,1,1,对应的存储数据W0-W3分别为0,1,1,1,读出位线RBL的电压会降低2个ΔV。通过模数转换器(analog to digital converter,ADC)将读出位线RBL的电压转化为数字信号,进一步得到乘累加运算的结果,即图1所示的乘累加运算单元可以计算AI0*W0+AI1*W1+AI2*W2+AI3*W3。
本申请提出一种多比特存内计算单元,能够执行多比特数据的乘法,例如,n比特输入数据和1比特存储数据的乘法,1比特输入数据和n比特存储数据的乘法,n比特输入数据和m比特存储数据的乘法,n大于或等于2,m大于或等于2。多比特存内计算单元包括存储单元,用来存储该存储数据。多比特存内计算单元还包括晶体管,根据输入数据或存储数据选择输入电压提供到晶体管使晶体管产生电流,不同的输入数据或存储数据使晶体管产生不同大小的电流。读出位线通过晶体管放电或者充电,通过量化读出位线的电压变化来获得多比特乘法的乘积。下面通过多个实施例介绍本申请的多比特存内计算单元。
在一些实施例中,多比特存内计算单元包括:存储单元、晶体管、选择器和读出电路。存储单元设置为存储1比特数据。在本文中,存储单元中存储的数据称为存储数据。存储数据例如为卷积运算中的权重数据。晶体管的第一端连接存储单元,晶体管的第二端连接读出位线。选择器具有2n个输入端,用于接收2n个输入电压,n大于或等于2。选择器根据n比特输入数据选择将所述2n个输入电压中的一个输出到晶体管的栅极。2n个输入电压能够使晶体管产生2n种不同大小的电流,晶体管的电流为所述读出位线充电或放电。读出电路设置为感测所述读出位线的电压变化。
图2示出了示例性的多比特存内计算单元。图2所示的多比特存内计算单元能够执行2比特的输入数据和1比特的存储数据的乘法,即n=2。多比特存内计算单元包括存储单元111、晶体管T、选择器112和读出电路113。晶体管T的源端(即第一端)连接存储单元111,晶体管T的漏端(即第二端)连接读出位线RBL。晶体管T例如为NMOS。存储单元111存储1比特数据,例如卷积运算中的权重数据W中的1比特。选择器112具有第一输入端、第二输入端、第三输入端、第四输入端、输出端和控制端。第一输入端至第四输入端分别接收第一电压V1至第四电压V4(即输入电压)。选择器112的输出端连接晶体管T的栅极。选择器112的控制端接收2比特的输入数据AI[1:0]。选择器112根据2比特的输入数据AI[1:0]选择将第一电压V1至第四电压V4中的一个输出到晶体管T的栅极。例如,输入数据AI[1:0]为00时,选择器112输出第一电压V1;输入数据AI[1:0]为01时,选择器112输出第二电压V2;输入数据AI[1:0]为10时,选择器112输出第三电压V3;输入数据AI[1:0]为11时,选择器112输出第四电压V4。第一电压V1至第四电压V4的大小不同。晶体管T的栅极电压为第一电压V1时,晶体管T的电流为I1;晶体管T的栅极电压为第二电压V2时,晶体管T的电流为I2;晶体管T的栅极电压为第三电压V3时,晶体管T的电流为I3;晶体管T的栅极电压为第四电压V4时,晶体管T的电流为I4,电流I1-I4的大小不同。不同大小的电流I1-I4可以通过对读出位线RBL进行充电或放电来改变读出位线RBL的电压。
在一些实施例中,2n个输入电压使晶体管产生的电流带来的读出位线RBL的电压变化量为等差数列。
例如,电流I1-I4例如满足:I2=2*I1,I3=3*I1,I4=4*I1。在预定时间内,电流I1-I4可以使读出位线RBL的电压改变ΔV,2ΔV,3ΔV和4ΔV。
再例如,第一电压V1例如为低电平VSS。当晶体管T的栅极电压为第一电压V1时,晶体管T不导通,I1=0。第二电压V2至第四电压V4使得I3=2*I2,I4=3*I2。电流I1-I4可以使读出位线RBL的电压改变0,ΔV,2ΔV和3ΔV。
读出电路113设置为感测所述读出位线的电压变化。读出电路113例如为模数转换器,模数转换器设置为将读出位线RBL的电压转为数字信号,进而获得电压变化。根据读出位线RBL的电压变化,确定多比特输入数据和存储数据的乘积。读出电路113也可以是比较器,比较器通过比较读出位线RBL的电压和一个或多个参考电压来确定读出位线RBL的电压变化。优选地,读出位线RBL和地之间设置有电容C。
图3是示例性的存储单元的电路图。存储单元例如是静态随机存储器(StaticRandom Access Memory,SRAM)。存储单元111可以是包括6个晶体管的6T-SRAM,也可以是包括8个晶体管的8T-SRAM,也可以是包括10个晶体管的10T-SRAM,本申请不做限定。图3以6T-SRAM为例进行说明。存储单元111包括NMOS晶体管N1-N4和PMOS晶体管P1-P2。NMOS晶体管N1和PMOS晶体管P1构成第一反相器INV1。NMOS晶体管N2和PMOS晶体管P2构成第二反相器INV2。节点Q是第一反相器INV1的输入端,也是第二反相器INV2的输出端,节点QB是第二反相器INV2的输入端,也是第一反相器INV1的输出端。节点Q通过NMOS晶体管N3连接位线BL,节点QB通过NMOS晶体管N4连接位线BLB,位线BL和位线BLB为互补位线。在本文中,位线BL称为第一位线,位线BLB称为第二位线,读出位线RBL称为第三位线。NMOS晶体管N3和NMOS晶体管N4的栅极连接字线WL。节点Q和QB作为存储单元111的存储节点,存储1比特的数据。存储单元111存储1,节点Q为高电平,节点QB为低电平;存储单元111存储0,节点Q为低电平,节点QB为高电平。晶体管T的源极连接节点QB。在一些实施例中,晶体管T的源极也可以通过反相器连接节点Q。
下面以第一电压V1为低电平VSS,I1=0,I3=2*I2,I4=3*I2为例描述多比特存内计算单元的计算过程。一个计算周期包括预充阶段和计算阶段。在预充阶段,读出位线RBL充电到高电平。在计算阶段,输入数据AI[1:0]提供到选择器112的控制端,选择器112根据输入数据AI[1:0]选择将第一电压V1至第四电压V4中的一个输出到晶体管T的栅极。节点Q通过反相器(图2和图3未示出)连接晶体管T的源端。如果存储单元111存储的数据为“0”,节点Q为低电平,节点QB为高电平,高电平提供到晶体管T的源端,无论输入数据AI[1:0]取值00、01、10和11中任一个,读出位线RBL的电压都不会降低。如果存储单元111存储的数据为“1”,节点Q为高电平,节点QB为低电平,低电平提供到晶体管T的源端。输入数据AI[1:0]为00时,读出位线RBL的电压不变;输入数据AI[1:0]为01时,读出位线RBL的电压降低ΔV;输入数据AI[1:0]为10时,读出位线RBL的电压降低2ΔV;输入数据AI[1:0]为11时,读出位线RBL的电压降低3ΔV。因此,通过获得读出位线RBL的电压减小量就可以确定输入数据AI[1:0]和存储数据W的乘积。读出电路113确定读出位线RBL的电压的变化量。
在可选实施例中,在预充阶段,读出位线RBL设置为低电平。在计算阶段,输入数据AI[1:0]提供到选择器112的控制端,选择器112根据输入数据AI[1:0]选择将第一电压V1至第四电压V4中的一个输出到晶体管T的栅极。节点Q连接晶体管T的源端。如果存储单元111存储的数据为“0”,节点Q为低电平,低电平提供到晶体管T的源端,无论输入数据AI[1:0]取值00、01、10和11中任一个,读出位线RBL都不会升高。如果存储单元111存储的数据为“1”,节点Q为高电平,高电平被提供到晶体管T的源端。输入数据AI[1:0]为00时,读出位线RBL的电压不变;输入数据AI[1:0]为01时,读出位线RBL的电压增大ΔV;输入数据AI[1:0]为10时,读出位线RBL的电压增大2ΔV;输入数据AI[1:0]为11时,读出位线RBL的电压增大3ΔV。因此,通过获得读出位线RBL的电压增加量就可以确定输入数据AI[1:0]和存储数据W的乘积。
输入数据AI[n-1:0]为n比特数据的情况与上述类似,选择器112根据输入数据AI[n-1:0]选择将2n个输入电压中的对应输入电压提供到晶体管T的栅极。本申请的多比特存内计算单元实现了n比特输入数据与1比特存储数据的乘法。传统存内计算需要2个计算周期才能实现2比特输入数据和1存储数据的乘法,因此本申请的多比特存内计算单元提高了计算效率。
图4示出了基于图2的多比特存内计算单元的乘积累加运算单元。乘积累加运算单元包括j个多比特存内计算单元,j个多比特存内计算单元连接同一条读出位线RBL。j个多比特存内计算单元同时进行乘法运算,j个多比特存内计算单元对读出位线RBL产生的电压变化之和通过读出电路113感测。因此,乘积累加运算单元能够进行如下运算:A1[1:0]*W1+A2[1:0]*W2+…+Aj[1:0]*Wj。
本申请实施例还提供另一种多比特存内计算单元,包括:n个存储单元、第一晶体管、第二晶体管、选择器和读出电路。n个存储单元存储n比特数据。第一晶体管的第一端连接读出位线。第二晶体管的第一端连接第一晶体管的第二端,第二晶体管的第二端接地或电源端。第二晶体管的栅极接收1比特输入数据,该1比特输入数据为1时,第二晶体管导通,该1比特的数据为0时,第二晶体管断开。选择器接收2n个输入电压,选择器根据该n个存储单元存储的n比特数据选择将所述2n个输入电压中的对应之一输出到第一晶体管的栅极,n大于或等于2。读出电路设置为感测读出位线的电压变化。2n个输入电压使第一晶体管产生不同大小的电流,第一晶体管的电流为读出位线充电或放电。
图5示出了示例性的多比特存内计算单元。图5所示的多比特存内计算单元能够执行1比特输入数据和2比特存储数据的乘法,即n=2。多比特存内计算单元包括2个存储单元111-0和111-1、第一晶体管T1、第二晶体管T2、选择器112和读出电路113。第一晶体管T1和第二晶体管T2串联在读出位线RBL和地之间。第一晶体管T的漏端(即第二端)连接读出位线RBL。第二晶体管T的漏端(即第二端)连接第一晶体管T的源端(即第一端),第二晶体管T的源端(即第一端)接地。在一些实施例中,第二晶体管T2设置在第一晶体管T1和读出位线RBL之间。第一晶体管T1和第二晶体管T2例如为NMOS。存储单元111-0和111-1例如为图3所示的SRAM存储单元,每个存储单元存储1比特数据,存储单元111-0和111-1例如存储卷积运算中的权重数据W中的2个比特。选择器112具有第一输入端、第二输入端、第三输入端、第四输入端、输出端和控制端。第一输入端至第四输入端分别接收第一电压V1至第四电压V4。选择器112的输出端连接第一晶体管T1的栅极。选择器112的控制端接收2比特的存储数据W[1:0]。选择器112根据2比特存储数据W[1:0]选择将第一电压V1至第四电压V4中的一个输出到第一晶体管T1的栅极。例如,存储数据W[1:0]为00时,选择器112输出第一电压V1;存储数据W[1:0]为01时,选择器112输出第二电压V2;存储数据W[1:0]为10时,选择器112输出第三电压V3;存储数据W[1:0]为11时,选择器112输出第四电压V4。第一电压V1至第四电压V4的大小不同。第一晶体管T1的源端和漏端的电压差为VDD,栅极电压为第一电压V1时,第一晶体管T1的电流为I1;第一晶体管T1的栅极电压为第二电压V2时,第一晶体管T1的电流为I2;第一晶体管T1的栅极电压为第三电压V3时,第一晶体管T1的电流为I3;第一晶体管T1的栅极电压为第四电压V4时,第一晶体管T1的电流为I4,电流I1-I4的大小不同。不同大小的电流I1-I4可以通过对读出位线RBL进行充电或放电来改变读出位线RBL的电压。
第四电压V4大于第三电压V3,第三电压V3大于第二电压V2,第二电压V2大于第一电压V1。在一些实施例中,第一电压V1例如为低电平VSS。当第一晶体管T1的栅极电压为第一电压V1时,第一晶体管T1不导通,I1=0。第二电压V2、第三电压V3和第四电压V4满足:I3=2*I2,I4=3*I2。电流I1-I4可以使读出位线RBL的电压对应改变0,ΔV,2ΔV和3ΔV。
读出电路113设置为感测所述读出位线RBL的电压变化。根据读出位线RBL的电压变化,确定多比特输入数据和存储数据的乘积。优选地,读出位线RBL和地之间设置有电容C。
下面以第一电压V1为低电平VSS,I1=0,I3=2*I2,I4=3*I2为例描述多比特存内计算单元的计算过程。一个计算周期包括预充阶段和计算阶段。在预充阶段,读出位线RBL充电到高电平。在计算阶段,2比特存储数据W[1:0]提供到选择器112的控制端,1比特输入数据提供到第二晶体管T2的栅极。选择器112根据存储数据W[1:0]选择将第一电压V1至第四电压V4中的一个输出到第一晶体管T1的栅极。如果存储数据W[1:0]为00,选择器112将第一电压V1提供到第一晶体管T1的栅极;如果存储数据W[1:0]为01,选择器112将第二电压V2提供到第一晶体管T1的栅极;如果存储数据W[1:0]为10,选择器112将第三电压V3提供到第一晶体管T1的栅极;如果存储数据W[1:0]为11,选择器112将第四电压V4提供到第一晶体管T1的栅极。如果1比特输入数据AI为0,第二晶体管T2断开,无论存储数据W[1:0]为00,01,10,11中任一个,读出位线RBL的电压都不会降低。如果1比特输入数据AI为1,第二晶体管T2导通,存储数据W[1:0]为00时,读出位线RBL的电压不变;存储数据W[1:0]为01时,读出位线RBL的电压降低ΔV;存储数据W[1:0]为10时,读出位线RBL的电压降低2ΔV;存储数据W[1:0]为11时,读出位线RBL的电压降低3ΔV。因此,通过获得读出位线RBL的电压减小量就可以确定存储数据W[1:0]和输入数据AI的乘积。读出电路113确定读出位线RBL的电压的变化量。
在一些实施例中,第一晶体管T1和第二晶体管T2串联在电源端VDD和读出位线RBL之间。在预充阶段,读出位线RBL设置到低电平。在计算阶段,如果1比特输入数据AI为0,读出位线RBL的电压依然为低电平。如果1比特输入数据AI为1,存储数据W[1:0]为00时,读出位线RBL的电压不变;存储数据W[1:0]为01时,读出位线RBL的电压增大ΔV;存储数据W[1:0]为10时,读出位线RBL的电压增大2ΔV;存储数据W[1:0]为11时,读出位线RBL的电压增大3ΔV。读出电路113确定读出位线RBL的电压的变化量。
存储数据W[n-1:0]为n比特数据的情况与上述类似,选择器112根据存储数据W[n-1:0]选择将2n个输入电压中的对应输入电压提供到第一晶体管T1的栅极。本申请的多比特存内计算单元实现了n比特存储数据与1比特输入数据的乘法。传统存内计算需要2个计算周期才能实现2比特存储数据和1输入数据的乘法,因此本申请的多比特存内计算单元提高了计算效率。
在一些实施例中,多比特存内计算单元包括:n个存储单元、第一晶体管和第二晶体管、第一选择器和第二选择器、以及读出电路。
每个存储单元设置为存储1比特数据,n个存储单元存储n比特数据。第一晶体管和所述第二晶体管串联在读出位线和地或读出位线和电源端之间。第一选择器接收2n个第一输入电压,第一选择器根据所述n个存储单元存储的n比特数据选择将所述2n个第一输入电压中的一个输出到所述第一晶体管的栅极,n大于或等于2。第二选择器接收2m个第二输入电压,第二选择器根据m比特输入数据选择将所述2m个第二输入电压中的一个输出到所述第二晶体管的栅极,m大于或等于2。读出电路设置为感测所述读出位线的电压变化。流过所述第一晶体管和第二晶体管的电流为所述读出位线充电或放电。
图6示出了示例性的多比特存内计算单元。图6所示的多比特存内计算单元能够执行2比特输入数据和2比特存储数据的乘法,即n=m=2。如图6所示,多比特存内计算单元包括:存储单元111-0和存储单元111-1、第一晶体管T1和第二晶体管T2、第一选择器1121和第二选择器1122、以及读出电路113。
存储单元111-0和存储单元111-1例如为图3所示的SRAM存储单元。存储单元111-0和存储单元111-1存储2比特的存储数据W[1:0]。第一晶体管T1和第二晶体管T2串联在读出位线RBL之间。例如,第一晶体管T1的漏端连接读出位线RBL,第二晶体管T2的漏端连接第一晶体管T1的源端,第二晶体管T2的源端接地。
第一选择器1121具有第一输入端至第四输入端,输出端和控制端。第一输入端至第四输入端用于接收一组第一输入电压V11-V14。控制端连接位线BL0和BL1,用于接收存储数据W[1:0]。输出端连接第一晶体管T1的栅极。当存储数据W[1:0]为00时,第一选择器1121将第一输入电压V11提供到第一晶体管T1的栅极;当存储数据W[1:0]为01时,第一选择器1121将第一输入电压V12提供到第一晶体管T1的栅极;当存储数据W[1:0]为10时,第一选择器1121将第一输入电压V13提供到第一晶体管T1的栅极;当存储数据W[1:0]为11时,第一选择器1121将第一输入电压V14提供到第一晶体管T1的栅极。
第二选择器1122具有第一输入端至第四输入端,输出端和控制端。第一输入端至第四输入端用于接收一组第二输入电压V21-V24。控制端用于接收输入数据AI[1:0]。输出端连接第二晶体管T2的栅极。当输入数据AI[1:0]为00时,第二选择器1122将第二输入电压V21提供到第二晶体管T2的栅极;当输入数据AI[1:0]为01时,第二选择器1122将第二输入电压V22提供到第二晶体管T2的栅极;当输入数据AI[1:0]为10时,第二选择器1122将第二输入电压V23提供到第二晶体管T2的栅极;当输入数据AI[1:0]为11时,第二选择器1122将第二输入电压V24提供到第二晶体管T2的栅极。
第一晶体管T1和第二晶体管T2例如为NMOS。在一些实施例中,第一输入电压V11和第二输入电压V21为低电平VSS。当第一晶体管T1的栅极为第一输入电压V11,第一晶体管T1断开。当第二晶体管T2的栅极为第二输入电压V21,第二晶体管T2断开。第一输入电压V11-V14逐渐增大,第二输入电压V21-V24逐渐增大。存储数据W[1:0]和输入数据AI[1:0]对应的第一输入电压V11-V14和第二输入电压V21-V24使得流过串联的第一晶体管T1和第二晶体管T2的电流满足以下表1。
表1
表1是图6所示的多比特存内计算单元的真值表。第一输入电压V12和第二输入电压V22使得串联的第一晶体管T1和第二晶体管T2的电流为Iref;第一输入电压V12和第二输入电压V23使得串联的第一晶体管T1和第二晶体管T2的电流为2*Iref;第一输入电压V12和第二输入电压V24使得串联的第一晶体管T1和第二晶体管T2的电流为3*Iref;第一输入电压V13和第二输入电压V22使得串联的第一晶体管T1和第二晶体管T2的电流为2*Iref;第一输入电压V13和第二输入电压V23使得串联的第一晶体管T1和第二晶体管T2的电流为4*Iref;第一输入电压V13和第二输入电压V24使得串联的第一晶体管T1和第二晶体管T2的电流为6*Iref;第一输入电压V14和第二输入电压V22使得串联的第一晶体管T1和第二晶体管T2的电流为3*Iref;第一输入电压V14和第二输入电压V23使得串联的第一晶体管T1和第二晶体管T2的电流为6*Iref;第一输入电压V14和第二输入电压V24使得串联的第一晶体管T1和第二晶体管T2的电流为9*Iref。如上设置第一输入电压V11-V14和第二输入电压V21-V24可产生表1中的读出位线RBL的电压变化。
多比特存内计算单元的计算过程包括预充阶段和计算阶段。在预充阶段,读出位线RBL被预充到高电平。在计算阶段,根据存储数据W[1:0]和输入数据AI[1:0]的取值选择第一输入电压和第二输入电压,读出位线RBL通过第一晶体管T1和第二晶体管T2的电流放电,读出位线RBL放电预定时间后读出电路113确定读出位线RBL的电压变化,进而确定存储数据W[1:0]和输入数据AI[1:0]的乘积。这样,在一个计算周期实现了2比特输入数据和2比特存储数据的乘法,提高了计算效率。输入数据AI[m-1:0]为m比特数据,存储数据W[n-1:0]为n比特数据的情况与上述类似,不再赘述。
本申请还提供一种存内计算装置。图7示出了本发明的实施例提供的存内计算装置的结构框图。存内计算装置包括:存内计算模块10、行译码器20、列译码器30、读写电路40、输入电路50和读出模块60。存内计算装置能够执行输入数据和存储数据的乘法。存内计算模块10例如基于SRAM单元阵列,包括多行多列的SRAM单元,SRAM单元通过字线WL和位线BL和BLB寻址。行译码器20用于根据行地址选择对应的字线WL。列译码器30用于根据列地址选择对应的位线对BL和BLB。读写电路40用于将数据写入SRAM单元或者将数据从SRAM单元读出。存内计算模块10包括多个多比特存内计算单元100,多比特存内计算单元100可以是上述实施例中的多比特存内计算单元。多个多比特存内计算单元100连接同一读出位线RBL,从而可以进行MAC计算。例如,一列多比特存内计算单元100连接同一读出位线RBL,构成一个多比特MAC计算单元。输入电路50用于将输入数据提供到多比特存内计算单元100。读出模块60连接读出位线RBL。读出模块60包括多个读出电路113,每个读出电路113连接对应的读出位线RBL。读出电路113是上述实施例中的读出电路,即连接同一读出位线RBL的多比特存内计算单元100公用一个读出电路113。读出电路113能够确定一列多比特存内计算单元100带来的读出位线RBL的电压变化,根据读出位线RBL的电压变化确定MAC计算的结果。
存内计算装置例如执行卷积运算,计算输入矩阵和权重矩阵的卷积。权重矩阵中的权重数据通过读写电路40存储到存内计算模块10中的存储单元。输入矩阵的输入数据通过输入电路50提供到对应的多比特存内计算单元100。
以上所述仅为本发明的实施例而已,并不用于限制本发明。对于本领域技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。