子单元、MAC阵列、位宽可重构的模数混合存内计算模组的制作方法

文档序号:21541334发布日期:2020-07-17 17:43阅读:416来源:国知局
子单元、MAC阵列、位宽可重构的模数混合存内计算模组的制作方法

本发明涉及一种模数混合存内计算领域,并且更具体地,涉及一种子单元、mac阵列、位宽可重构的模数混合存内计算模组。



背景技术:

目前,现有移动和物联网之类的新兴边缘应用要求高能效和高单位面积的运算速率。高能效意味着更长的电池寿命,而高单位面积的运算速率意味着在指定的运算速率下减小面积,进而降低成本。如今,深度神经网络(deepneuralnetwork,dnn)中的前馈推理计算以乘法累加(multiply-and-accumulate,mac)计算为主导,需要mac计算的高能效和低面积的实现,同时减少待处理数据的搬运量。传统数字集成电路实现mac有抗噪声能力强、精度高、扩展性好、设计方法成熟等优点,但是数字电路占用的芯片面积大、功耗大,难以实现高能效的大规模神经网络。并且传统数字电路采用的冯诺依曼结构带来的存储器和中央运算单元之间的数据交换瓶颈在dnn应用中的大规模数据搬运下会严重限制运算能效和运算速度。模拟电路实现mac具有结构简单、功耗较低的优点,所以模拟和模数混合信号计算具有实现高能效的潜力。而为了打破冯诺依曼架构的瓶颈,近年来成为研究热点的存内计算从本质上无法以纯数字电路的形式实现,需要模拟电路的辅助。同时由于dnn对包括电路噪声造成的计算错误的承受能力较高,dnn专用集成电路(asic)正重新引起关注。

论文“amixed-signalbinarizedconvolutional-neural-networkacceleratorintegratingdenseweightstorageandmultiplicationforreduceddatamovement”,doi:10.1109/vlsic.2018.8502421(以下称“论文1”)和论文“amicroprocessorimplementedin65nmcmoswithconfigurableandbit-scalableacceleratorforprogrammablein-memorycomputing”,arxiv:1811.04047(以下称“论文2”),阐述1位mac计算的乘法阶段是等效于1位权重和1位输入进行同或(xnor)运算,把xnor运算结果以电压的形式存储到电容器,加法阶段是利用电荷共享,每个电容器的电荷相同但所有电容器的总电荷不变,得出1位mac计算结果。上述1位mac计算的每个1位计算单元都有10个晶体管。论文1和论文2的现有技术存在的问题为:(1)对于每个加法操作,将无条件驱动每个计算单元中的传输门,而无法利用输入数据的稀疏性达到节省能耗的目的;(2)每一个进行1位乘法的运算单元配置一个独立电容器,逐次逼近型(successiveapproximation,sar)模拟数字转换器(analogtodigitalconverter,adc)的金属氧化物金属(metaloxidemetal,mom)电容器位于静态随机存储器(staticrandomaccessmemory,sram)计算阵列之外,因为该阵列内部没有空间,从而降低了面积效率;(3)利用电荷共享的加法阶段需要连接存储xnor运算结果的电容器的顶板。这种电路拓扑使加法容易受到非理想效应的影响,例如电荷注入,时钟馈通,传输门晶体管的漏极/源极处的非线性寄生电容,以及连接到电容器顶板的晶体管的漏电等,从而导致计算错误。此外,因为物理版图的不匹配而带来的运算电容器与adc中的数模转换器里的电容器之间的不匹配也会导致计算错误。

论文“analways-on3.8μj/86%cifar-10mixed-signalbinarycnnprocessorwithallmemoryonchipin28nmcmos”,doi:10.1109/isscc.2018.8310264(以下称“论文3”)提出一种仅支持二进制化的权重和激活值的二值神经网络(bnn)的运算模组。论文3中的运算模组的不足为:(1)该架构只支持bnn,无法用于视觉应用的大型dnn模型,例如对象检测等,适用范围小;(2)1位mac计算的乘法阶段至少需要一个或(or)门,两个同或(xnor)门,两个异或(nor)门和一个锁存器,使用的晶体管数量多,面积占用大。

论文“conv-ram:anenergy-efficientsramwithembeddedconvolutioncomputationforlow-powercnn-basedmachinelearningapplications”,doi:10.1109/isscc.2018.8310397(以下称“论文4”)提出一种具有嵌入式卷积计算功能的节能sram。论文4中的sram的不足有:(1)每个1位计算sram单元具有10个晶体管。每个单元中的晶体管数越高,存储密度越小;(2)利用位线上的寄生电容存储电荷,以用于随后的平均操作。与如mom电容器之类的显式电容器相比,位线寄生电容的建模不充分,并且可能遭受更大的失配,导致较低的计算精度;(3)论文内所使用的水平电荷平均方法需要6个额外的晶体管,这些晶体管在几行单元之间共享,限制了吞吐量,因为并非所有行都可以同时执行计算;(4)差分电荷平均线vpavg和vnavg上的共模电压取决于输入数据xin的大小,在通过局部mav电路评估平均值后,此共模电压是不稳定的。因此差分结构的高效率高速adc,例如saradc并不适用。文章的方案采用了最大占用2n-1(n是adc分辨率)次步骤进行收敛的基于斜坡的adc,降低了模数转换的速度,导致了较低的计算吞吐量;(5)阵列的输入使用额外的dac电路将输入数据xin(通常是特征图)从数字表示转换为模拟表示,dac电路的非理想特性会导致更多的精度损失以及面积和能量的开销。

综上所述,在神经网络计算过程中,现有技术中的mac阵列中进行1位乘法的计算单元使用的晶体管多;存储乘法结果用于累加的电容器与存储单元一一对应,即存储单元的个数与电容器的数量相同,而电容一般会比sram单元大很多,特别是在先进工艺制程下,会导致mac阵列占用面积大;同时存在乘加运算中晶体管的无条件驱动,导致运算能效不高;另外,计算错误率高导致适用场景有限等。

因此,在模数混合存内计算领域,亟需一种面积小、能效高、容错能力好的位宽可重构的模数混合存内计算的运算模组。



技术实现要素:

有鉴于此,本发明提供一种子单元、mac阵列、位宽可重构的模数混合存内计算模组。为减小计算误差,还提供了差分体系的mac阵列的实现。为达到上述目的,本发明采用如下技术方案:

第一方面,提供了一种内存内计算子单元,进行1位乘法计算,包括:一个传统6tsram单元、一个互补传输门、一个第一n型mos管、一个计算电容器;

所述传统6tsram单元由mos管m1、m2、m3、m4、m5、m6组成,其中mos管m1、m2组成的cmos反相器与mos管m3、m4组成cmos反相器交叉耦合,所述交叉耦合的两个cmos反相器存储1位的过滤器参数,m5、m6为用于所述过滤器参数读写的位线的控制开关;

所述传统6tsram单元中m1、m2组成的cmos反相器输出端连接互补传输门的输入端,互补传输门的输出端连接第一n型mos管漏极;

所述第一n型mos管源极接地,漏极连接计算电容器的底板;

所述运算中的子单元的互补传输门的n型mos管栅极连接输入信号,p型mos管栅极与所述第一n型mos管栅极输入信号在运算时电平相同;

所述输入信号与过滤器参数的乘法结果存储为计算电容器底板的电压,多个子单元用于组成一个计算单元,同一所述计算单元内的每一个子单元共用同一所述第一n型mos管、计算电容器。

在该方案中,过滤器参数/权重w写入并存储在sram单元中,输入信号a连接互补传输门的n型mos管栅极,互补传输门的p型mos管栅极连接互补信号na,第一n型mos管栅极连接信号b。特别地,对于一个计算子单元,互补输入信号na的电平在计算时与信号b相同。这样的拓扑结构可以避免传输门的无条件驱动,提高能效。例如,当信号b=0,信号na=0,输入信号a=1,过滤器参数w=1,计算电容器与第一n型mos管连接的支路不通,互补传输门与计算电容器连接的支路导通,过滤器参数w与输入信号a的乘法结果存储为计算电容器底板电压vbtm。那么,完成一位乘法(过滤器参数w与输入信号a)的子单元只需要9个晶体管,减小了单元的面积,传输门避免了连接到进行电荷累加的电容器的顶板,这样可以以最小化计算误差,特别是由于mos管用作开关时的时钟馈通、由导通转向关断时的电荷注入、在传输门晶体管的漏/源处的非线性寄生电容、以及晶体管的漏电引起的误差。

在一些实施方式中,多个所述子单元组成一个计算单元,同一所述计算单元内的每一个子单元共用同一所述第一n型mos管、计算电容器,子单元以2×2、4×2等可行的方式排列。直观地,该方案减少了第一n型mos管的数量以及计算电容器的数量,以2×2的子单元组成的计算单元为例,减少了3个第一n型mos管以及3个计算电容器。

特别地,越多的子单元共用所述第一n型mos管与计算电容器,此时需要的器件数量及面积均摊到每一个子单元上,每个子单元需要的晶体管数量越逼近于8个,需要的电容器的面积也被均分。

结合第一方面,在一些实施方式中,计算单元内的子单元以时分复用的方式被激活,例如一个子单元被激活时,同一个计算单元内的其他子单元被停用。在一个子单元参与完成计算后,同一计算单元包含的其他子单元内的sram单元存储的过滤器参数可以立即用于内存内运算,不需要再从外部移动数据储存到sram内后再进行计算,这极大地提高了计算速度,提高吞吐量并且减少能量损耗以及面积消耗。

第二方面,提供了一种包括第一方面及第一方面可能的实施方式的mac阵列,进行乘加运算,包括:多个计算单元,同一列的所有计算单元内的计算电容器顶板连接同一累加总线。

该方案中,相对于独立的子单元组成的mac阵列,采用所述共用电容器及晶体管的模式的计算单元,mac阵列可以存储更多的神经网络参数或者用于下一层网络的激活值,具体地,计算单元内完成1位乘法的计算并将计算结果存储在计算电容器中,处于mac阵列中的同一列计算单元通过计算电容器顶板连接的同一条总线将各自的1位乘法结果累加,每一累加总线的电压对应mac阵列中每一列乘法计算的累加和。

另外,由于一个电容占用的面积一般是一个6tsram单元占用面积的数倍,采用所述器件共享的方式,即多个用于1位乘法的子单元共用一个晶体管和计算电容器进行计算、存储,相对其他的1个子单元用于1位乘法需要连接一个电容器存储乘法计算的结果的设计,可以极大地提高单位面积的存储容量。对于内存内计算,减少内外部数据的移动是减少能量消耗的最主要方式之一。方案中,单位面积mac阵列包括更多的sram单元,可以一次性存储更多的神经网络过滤器参数以减少数据移动。

结合第二方面,在一些实施方式中,mac阵列还包括差分互补传输门、差分计算电容器和第一p型mos管;所述mac阵列的每一计算单元内,每个传统6tsram单元中m3、m4组成的cmos反相器的输出端分别连接一个差分互补传输门的输入端,所有m3、m4组成的cmos反相器所连接的差分互补传输门的输出端连接同一第一p型mos管漏极;所述第一p型mos管漏极连接差分计算电容器的底板,源极接vdd;差分乘法结果存储为差分计算电容器底板的电压,同一列每一差分单元的差分计算电容器的顶板连接同一差分累加总线。

结合第二方面,在另一些实施方式中,mac阵列还包括第一cmos反相器和差分计算电容器;组成mac阵列的每一个计算单元内所有互补传输门的输出端连接同一第一cmos反相器的输入端,第一cmos反相器的输出端连接一个差分计算电容器底板,差分乘法结果存储为差分计算电容器底板的电压,同一列的所有差分计算电容器顶板连接同一差分累加总线。

第三方面,提出了一种位宽可重构的模数混合内存内计算的运算模组,包括:

第二方面及第二方面可能实施方式的mac阵列,阵列中列向累积的乘法结果表示为模拟电压;

filter/ifmap模块,提供被写入并存储在mac阵列中的过滤器参数或上一层计算完成的激活值;ifmap/filter模块,提供mac阵列的输入,与所述的神经网络的过滤器参数或者上一层计算完成的激活值进行乘法计算;模数转换模块,将所述mac阵列计算后得到的模拟电压转换为数字表示;数字处理模块,对模数转换模块的输出至少进行多位融合、偏置、缩放或非线性等操作,输出结果为部分和或者为能直接用于下一层网络输入的激活值。

该方案中,所述过滤器参数或者神经网络上一层计算完的激活值通过filter/ifmap模块写入并存储在mac阵列中,此过程按照标准的传统6tsram写入过程操作,使子单元中的sram存储逻辑1或0,并与ifmap/filter块提供的输入进行乘加运算。此过程,每个子单元内的存储值与输入的乘法运算属于数字运算,等效于and,乘法运算的结果存储在计算电容器中,加法阶段,由于同一列的所有计算电容器的顶板通过累加总线连接在一起,不同计算电容器中存储的电荷通过累加总线进行共享,列向累积的乘法结果存储为模拟电压。随后,模拟结果通过模数转换模块转换为数字表示,最后对该数字表示进行处理,输出结果为部分和或者为能用于下一层网络输入的激活值。在神经网络计算过程中,mac耗费大量能耗。该方案中,mac采用模数混合运算,可以极大降低能耗,同时mac阵列的低面积实现可以提高能效以及计算速度。针对整个神经网络计算的不同阶段采用不同的运算方式的结合,极大地利用了模拟和数字电路的不同优点,保证了计算过程的低功耗、高能效、高速度、高精度的实现。

结合第三方面,在一种可能的实施方式中,模数转换模块采用saradc,具体为二进制加权电容阵列的saradc。

结合第三方面和第一种可能的实施方式,在第二种实施方式中,mac阵列的输入数值以及存储数值的稀疏性可以使sardac中的部分电容器的开关序列免于切换,从而获得更高的能效和adc转换速度。换一种方式说,mac阵列中每一列saradc的位宽可以实时地由输入数值以及存储数值的稀疏性来决定。

结合第三方面或第三方面的第一种或第二种可能的实施方式,在第三种可能的实施方式中,macdac和sardac可以连接在一起,应当理解,所述macdac指的是mac阵列中的一列计算电容器,即所有mac阵列中的电容器与sardac中的电容器并联。

结合第三方面或第三方面的第一种或第二种或第三种实施方式中,在第四种可能的实施方式中,允许macdac通过底板采样复用为sardac,从而使用相同的电容阵列实现mac操作以及模数转换,避免在mac操作环节的macdac和模数转换阶段的sardac中使用不同电容阵列导致的失配以及精度损失,进一步地,并且允许全差分saradc的实现,更好地解决共模相关的比较器的输入失调电压偏移的问题。

附图说明

图1为本发明一实施例中用于1位乘运算的子单元结构的示意图;

图2为本发明一实施例中1位乘子单元真值表的示意图;

图3a为本发明一实施例中计算单元中子单元排列示意图;

图3b为本发明一实施例中多个子单元组成的计算单元的示意图;

图3c为本发明一实施例中计算单元运行时的真值表;

图4a为本发明一实施例中mac阵列示意图;

图4b为本发明一实施例中计算电容器底、顶板电压示意图;

图5a为本发明一实施例中10t结构示意图;

图5b为本发明一实施例计算单元拓展示意图;

图6a为本发明一实施例中8t结构示意图;

图6b为本发明另一实施例中计算单元拓展示意图;

图6c为本发明一实施例中差分体系下的mac阵列结构示意图;

图7为本发明一实施例中存内计算模组示意图;

图8为本发明一实施例中模数转换模块示意图;

图9为本发明另一实施例中模数转换模块示意图;

图10为本发明另一实施例中模数转换模块示意图;

图11为本发明另一实施例中模数转换模块示意图;

图12为本发明另一实施例中模数转换模块差分结构示意图;

图13为本发明一实施例中减少模数转换的能量消耗的架构示意图。

具体实施方式

为了使发明的目的、原理、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,正如本发明内容部分所述,此处所描述的具体实施例用以解释本发明,并不用于限定本发明。

需要特别说明的是,根据说明书的文字或者技术内容可以确定的连接或位置关系,为了图画的简洁进行了部分的省略或者没有画出全部的位置变化图,本说明书未明确说明省略的或者没有画出的位置变化图,不能认为没有说明,为了阐述的简洁,在具体阐述时不再一一进行说明,在此统一说明。

作为一种常见的应用场景,本发明实施例所提供的的位宽可重构的模数混合计算模组可以应用在视觉、声学dnn架构中,更具体地,用于实现对象检测、低功耗的声学特征提取等。

以特征提取为例,将待处理数据与特征提取器中的由权重构成的过滤器进行卷积运算后,输出相应的特征图。过滤器选取不同,提取的特征也会不同。此过程中,待处理数据与过滤器的卷积运算需要的能耗最高,需要避免电路无条件驱动等情形造成的能耗,特别是待处理数据为稀疏矩阵时。

图1为用于1位乘运算的子单元结构一实施例示意图,进行1位乘法计算,包括:一个传统6tsram单元、一个互补传输门、一个第一n型mos管、一个计算电容器;所述传统6tsram单元由mos管m1、m2、m3、m4、m5、m6组成,其中mos管m1、m2组成的cmos反相器与mos管m3、m4组成cmos反相器交叉耦合,所述交叉耦合的两个cmos反相器存储1位的过滤器参数,m5、m6为用于所述过滤器参数读写的位线的控制开关;

所述传统6tsram单元中m1、m2组成的cmos反相器输出端连接互补传输门的输入端,互补传输门的输出端连接第一n型mos管漏极;

所述第一n型mos管源极接地,漏极连接计算电容器的底板;

所述运算中的子单元的互补传输门的n型mos管栅极连接输入信号,p型mos管栅极与所述第一n型mos管栅极输入信号在运算时电平相同;

所述输入信号与过滤器参数的乘法结果存储为计算电容器底板的电压,多个计算子单元用于组成一个计算单元,所述同一计算单元内的每一个子单元共用同一所述第一n型mos管、计算电容器。

互补传输门的n端和p端栅极的输入信号分别为a和na,第一n型mos管的栅极信号b,特别地,如图1,对于一个子单元,信号b和na相同,在一些可能的实施方式中,可以采用信号na与信号b共用节点从而提供相同的电平。传统6tsram存储被写入的过滤器参数w,写入过程按照标准的6tsram单元的写入,即字线wl置vdd,位线bl、nbl根据被写入的值为0或1。以写入“0”为例,字线wl置高电平vdd,m5和m6均导通,位线bl置0,nbl置vdd,w处电压透过m6下降,为逻辑0;nw处电压透过m5上升,为逻辑1。

可选的,子单元进行一位乘法计算的过程如下:

1.计算电容器的顶板电压vtop通过累加总线上的复位开关srst复位到vrst;

2.将子单元中第一n型mos管的栅极信号b提升到vdd,导通第一n型mos管,将电容器的底板电压vbtm重置为0,将子单元中的传输门的输入信号a和na分别保持在0和vdd。vbtm重置为0后,srst断开连接;

3.计算过程中,激活输入信号a和na,激活子单元时1位乘法运算的真值表如图2所示;

4.子单元乘法运算完成后,计算电容器的底板电压vbtm要么保持在0,要么进入vdd,乘法运算的输出结果为计算电容器底板的电压表示为vdd×w×a。

可以理解,对于一个子单元,所述完成一位乘法(过滤器参数w与输入信号a)的结构只需要9个晶体管,减小了子单元的面积,提高能效。应当理解,所述子单元中第一n型mos管起控制作用,输入信号a与sram单元内存储的过滤器参数w的1位乘法计算结果存储为计算电容器底板的电压。为方便描述,所述sram单元与互补传输门连接的结构包含8个晶体管,称为8t结构(8tsub-cell,8个晶体管)。另外,所述计算子单元是对标准的传统6tsram单元外部拓展,一方面在实际应用中,标准化的结构实施具备更好的经济效益,另一方面提高了子单元的可拓展性,且传输门连接在计算电容器的底板相对于现有技术中采用连接在计算电容器的顶板的方式,能够最小化计算误差,特别是由于mos管用作开关时的时钟馈通,由导通转向关断时的电荷注入,在传输门晶体管的漏/源处的非线性寄生电容,以及晶体管本身的漏电等等引起的误差。

为了进一步减少子单元的器件,在一些实施例中,多个所述子单元用于组成一个计算单元,子单元以2×2、4×2等可行的方式排列,排列方式参考图3a。如图3b所示,同一个计算单元内的每个子单元保留各自所述的8t结构(8tsub-cell,8个晶体管),所有子单元共用同一所述第一n型mos管、计算电容器。具体地,同个计算单元内的每个子单元的互补传输门输出端连接同一个第一n型mos管的漏极,第一n型mos管的漏极连接一个计算电容器的底板,可以理解,一个计算单元内只有一个第一n型mos管、一个计算电容器,多个子单元共用一个计算电容器以及第一n型mos管进行1位乘法的计算。直观地,该方案减少了第一n型mos管的数量以及计算电容器的数量,以2×2的子单元组成的计算单元为例,减少了3个第一n型mos管以及3个计算电容器。应当理解,越多的子单元共用所述第一n型mos管与电容器,分摊下来每个子单元的晶体管数量就会越接近8个。

另外,由于单个电容占用的面积一般是整个6tsram占用面积的数倍,差距悬殊,采用所述子单元共用器件的方式,即多个用于1位乘法的子单元共用一个电容器存储计算结果相对其他的独立的1个子单元用于1位乘法需要连接一个电容器存储乘法计算结果的方式,可以极大的提高单位面积的存储容量,即相同面积内可以一次性存储较现有技术更多的过滤器参数或权重。

进一步地,计算单元内的子单元以时分复用的方式被激活,即一个子单元被激活时,同一个计算单元内的其他子单元被停用。子单元被激活后按照上述执行一位乘法的运算,单元内计算的真值表参考图3c,具体地,在一些实施例中,子单元互补传输门n型mos管栅极和p型mos管栅极的信号分别为aij和naij,其中i为单元列的索引,且为0~(n-1)的非负整数,j为单元内子单元的索引,在2×2的单元内,j=a,b,c,d。可以理解,所述子单元共用一个计算电容器以及一个第一n型mos管,指的是一个计算单元内包含了多个能用于乘加运算的子单元,应当注意,不同于单个独立的子单元,当多个子单元组成一个计算单元时,所述第一n型mos管栅极的输入信号bi与每个子单元的互补传输门的p端栅极的互补输入信号naij是分别控制的,在时分复用下,虽然某时刻处于工作状态的子单元内的互补输入信号naij与信号bi电平相同,但是不再适用二者共用节点的情形。应当理解,所述子单元共用一个计算电容器以及一个第一n型mos管,指的是一个计算单元内包含了多个能用于乘加运算的子单元,相对于相同数量且独立的子单元来说,子单元组合成的计算单元内需要的计算电容器以及第一n型mos管的数量分别减少n-1个,计算单元内完成1位乘法的子单元结构逼近8个晶体管。一般地,由于制作工艺的区别,计算电容器的占用的面积是sram单元的数倍,减少单位面积中电容器的数量,可以提高计算单元组成的阵列模组的存储容量。

应当理解,所述的子单元内部如果采用非传统6tsram的结构,但是起到同样存入和读出1位过滤器参数的功能时,同样适用所述的共用器件模式。

第二方面,提供了一种包括第一方面及第一方面可能实施方式的子单元的mac阵列,进行乘加运算,参见图4a,mac阵列包括多个计算单元,同一列的所有计算单元内的计算电容器顶板连接同一累加总线。

该方案中,相对于独立的子单元组成的mac阵列,所述采用共用电容器及晶体管的模式的计算单元,mac阵列可以存储更多的神经网络参数或者上一层网络计算完成的值,具体地,计算单元内的完成1位乘法的计算并将计算结果存储在计算电容器中,处于mac阵列中的同一列计算单元通过计算电容器顶板连接的同一条累加总线将各自的1位乘法结果累加。

另外,对于内存内计算,减少内外部数据的移动是减少能量消耗的直接方式。可以理解,方案中,单位面积mac阵列包括更多的sram单元,可以一次性存储较现有技术更多的过滤器参数,在一个子单元计算完成后,同一单元其他子单元内存储的过滤器参数可以立即用于内存内运算,不需要再从外部移动数据储存到sram内后再进行计算,这能提高吞吐量并且减少能量损耗以及面积消耗。一般地,计算电容器占用的面积是传统6tsram单元的数倍,减少计算单元中电容的数量,可以提高模组的吞吐量以及降低能耗。

参见图4b所示,特别地,同一列的所有计算电容器的顶板通过累加总线连接在一起,累加总线电压为vtop,需要明确的是,多个计算单元按列分布,1个计算单元对应1个计算电容器,1个计算单元中包含多个第一方面或者第一方面实施例所述的子单元。

在一些实施例中,mac阵列以下列“方式一”执行乘加运算:

1.过滤器参数(或上一层网络计算完成的激活值)首先按照6tsram写入过程写入单元,并被存储在子单元中;

2.计算电容器的顶板电压vtop通过累加总线上的复位开关srst复位到vrst,vrst可以为0;

3.将每个计算单元中的信号bi提升到vdd,计算电容器的底板电压vbtmi重置为0,每个计算单元中的信号aij和naij分别保持在0和vdd。srst断开连接;

4.在计算过程中,信号aij和naij以时间复用的方式被激活,例如,当a0a和na0a被激活时,a0j和na0j(j=b,c,d)被停用,即分别保持在0和vdd。值得注意,在计算过程中,一个计算单元的b0与该时刻被激活的子单元内的na0j是一样的电平。

5.在一列中的每个计算单元的相乘完成后,计算电容器的底板电压vbtmi要么保持在0,要么进入vdd。电荷在一列计算电容器中重新分布,类似于sardac的电容器中的电荷重新分布。如果不考虑寄生电容等非理想性,则一列计算电容器的模拟输出电压vtop表示如下式的累加结果,如图4b。

在其他实施例中,mac阵列可以按照下面的“方式二”进行运算:

1.过滤器参数(或上一层网络计算完成的激活值)写入各个子单元;

2.计算电容器的顶板电压vtop通过累加总线上的复位开关srst复位到vrst。srst保持vtop和vrst之间的连接。

3.将每个计算单元中的信号bi提升到vdd,将计算电容器的底板电压vbtmi重置为0,将每个计算单元中的信号aij和naij分别保持在0和vdd;

4.在计算过程中,同理,信号aij和naij以时间复用的方式被激活。

5.在一列中的每个计算单元的相乘完成后,每个计算电容器的底板电压vbtmi要么保持在0,要么进入vdd。然后断开srst,将底板电压vbtmi设置为0或vdd,每个计算单元的控制模块里的mos开关运行逐次逼近算法进行模数转换。以vbtmi均被置为0为例,电压vtop可表示为:

特别地,所述的mac阵列可用于多位权重的计算。每一列的计算单元执行逐位的mac操作,通过把模数转换后的数字表示进行移位相加的操作得到多位权重的输出结果,举例而言,对于一个k位的权重或过滤器参数,每一列执行逐位的mac,可以是第一列执行最低位,即第0位的值与输入信号的mac,第k列执行最高位,即第k位的值与输入信号的mac。可以理解,相当于每一列单独对一个多位的二进制权重的一位进行mac,所有参与计算的列得到的mac结果包含了k个元素,最后对进行模数转换后的k个元素进行数字域的移位相加。

为了减少计算误差,可使用差分体系的mac阵列架构,在一些实施方式中,mac阵列还包括差分互补传输门、差分计算电容器和第一p型mos管;所述mac阵列的每一计算单元内,每个传统6tsram单元中m3、m4组成的cmos反相器的输出端分别连接一个差分互补传输门的输入端,同一所述计算单元内所有m3、m4组成的cmos反相器所连接的差分互补传输门的输出端连接同一第一p型mos管漏极;所述第一p型mos管漏极连接差分计算电容器的底板,源极接vdd;差分乘法结果存储为差分计算电容器底板的电压,同一列每一差分单元的差分计算电容器的顶板连接同一差分累加总线。为描述方便,参见图5a,所述6tsram结构连接差分互补传输门和互补传输门的结构为10t结构(10tsub-cell,包含10个晶体管)。参见图5b,组成mac阵列的计算单元连接结构称为第一差分单元。那么可以理解,所述第一差分单元是计算单元的拓展,进一步地,是对组成计算单元的子单元的拓展,本实施例中所述第一差分单元内除了10t结构外,部分晶体管以及电容器是共用的,具体地,共用所述第一n型mos管、第一p型mos管、差分计算电容器、计算电容器,而且所述第一差分单元内的子单元同样以所述的时分复用的方式被激活。

在差分体系的mac阵列架构另一些的实施方式中,mac阵列还包括第一cmos反相器和差分计算电容器;组成mac阵列的每一个计算单元内所有互补传输门的输出端连接同一第一cmos反相器的输入端,第一cmos反相器的输出端连接一个差分计算电容器底板。类似的,为描述方便,参见图6a,所述6tsram结构连接互补传输门为8t结构(8tsub-cell,包含8个晶体管)。参见图6b,组成mac阵列的计算单元连接结构称为第二差分单元,差分乘法结果存储为差分计算电容器底板的电压。那么可以理解,本实施例中所述第二差分单元内除了8t结构外,部分晶体管以及电容器是共用的。具体地,共用所述第一n型mos管、第一cmos反相器、差分计算电容器和计算电容器,所述第二差分单元内的子单元同样以所述的时分复用的方式被激活。

应当注意,所述第一差分单元、第二差分单元均是根据计算单元的拓展,此处命名只是为了方便电路结构的描述。图6c为由前述第一差分单元或者第二差分单元构成差分体系的mac阵列架构的示意图,同一列的所有计算电容器顶板连接同一累加总线,所有差分计算电容器顶板连接同一差分累加总线。

第三方面,提供了一种位宽可重构的模数混合计算模组,参见图7,包括:第二方面或第二方面的任意可能的实现方式的mac阵列,计算完成后列向累积的结果表示为模拟电压,即上述实施例中电容器顶板vtop的值;filter/ifmap模块,提供被写入并存储在mac阵列中的过滤器参数,应当理解,对于神经网络,所述被写入并存储在mac阵列中的还可以是上一层网络计算完成所输出的值;ifmap/filter模块,提供mac阵列的输入,具体地,提供计算单元内互补传输门的输入,与所述的过滤器参数或上一层网络计算后的激活值进行乘加运算;模数转换模块,将mac操作得到的模拟电压转换为数字表示;数字处理模块,对模数转换模块输出的数字表示至少进行多位融合、偏置、缩放或非线性等操作,输出结果为部分和或者为能直接用于下一层网络的激活值(特征图)。

可以理解,将本申请的模组用于神经网络的mac计算时,一般情况下,由于相同的面积上,模组包括更多的存储单元,即6tsram单元,可以一次性预先用于加载过滤器参数(权重)。在完成一层网络的计算后,输出部分和或者是最终用于下一层网络计算的激活值(特征图),可以立即与预先加载并存储在模组中的过滤器参数(权重)进行mac计算,减少了片外的数据搬运的等待时间以及功耗。另外,模组的大吞吐量可以提高片上的存储能力,例如,存储单元除了存储过滤器参数外,本层网络输出的激活值(特征值)也可以存储在mac阵列中。

应当理解,除了在第一方面或第二方面所述的计算单元和mac阵列内采用共用晶体管和计算电容器的方式,实际上,在所述模组的非mac阵列区域,计算单元还共用一些参与模数转换和数字处理的晶体管。

本发明中,所述模数转换模块可为并行电容结构的saradc,将列向计算单元输出的顶板电压vtop转换为数字表示,包括macdac、sardac、比较器、开关序列和sar逻辑,所述sar逻辑控制所述开关序列。相对于采用其他类型如电阻、混合阻容结构等的saradc,采用并行电容结构的saradc更能充分利用本发明已有的结构,达到节省器件,减小面积的效果。macdac由前述mac阵列中一列计算单元的电容器并联组成,应当理解,所述macdac的输出电压为vtop。sardac包括(b+1)个并联电容器,b=log2bit,lsb)的电容呈2倍递减的b个电容器,还包括一个与最低位lsb电容等值的电容器,作为冗余电容器。举例说明,macdac中电容器的数量n=8,则b=3,最高位msb电容器c significant bit,msb)到最低位(leastsignificant n,n是macdac中电容器的数量;所述电容器包括从最高位(mostb-1的电容为c,次高位电容器cb-2的电容为c/2,最低位lsb电容器c0的电容为c/4,从msb到lsb能够分配sardac的基准电压比例分别为:1/2、1/4、1/8,冗余电容器cu的电容为c/4,所述b个电容器和冗余电容器的一端并联在一起,b个电容器的另一端连接开关序列,冗余电容器的另一端始终接地。所述开关序列的自由端包括vdd端和接地端,sar逻辑控制所述开关序列。

在一实施例中,如图8,macdac的输出电压vtop作为比较器的正输入v+;sardac的输出vsar作为比较器的负输入v-,sar逻辑控制所述开关序列使负输入v-近似等于正输入v+,最终的sar逻辑输出是v+的数字表示。特别地,mac阵列的激活稀疏性可以使sardac中的某些电容器免于切换,从而获得更高的能效和adc转换速度。例如,如果已知在mac操作之后,底板电压vbtmi为vdd的mac电容器数量小于25%,即mac阵列中,一列计算单元进行1位乘法中1×0、0×0、0×1的情形较多,而1×1的情形小于该列计算单元数量的1/4,则可以将sardac的前两位电容器,即cb-1和cb-2对应的开关序列的sb-1和sb-2拨向接地端,并不是无条件激活sardac中的所有电容进行数模转换,节省能耗。应当注意,本发明附图所示的比较器v+侧和v-侧的连接方式只是为了方便说明,实际上v+侧和v-侧的连接可以互换。

在另一实施例中,参见图9,macdac和sardac可以连接在一起,即所有电容器并联,产生的总电压为比较器的正输入v+;比较器的负输入v-为vref;sar逻辑控制开关序列使正输入v+逼近vref。应当注意,本实施例应在mac操作遵循前述“方式一”的情况下。如果vrst=0且未考虑电路非理想情况,连接至比较器负输入v-侧的vref可以为0或vdd/2。例如,如果vref=0,sardac中的电容器最初是通过从s0到sb-1的开关连接到vdd的,则sar操作可以在给出数字表示的同时使v+返回0,对应了“方式一”中电容器的顶板电压vtop通过重置开关srst重置为0这一步骤所需的vrst=0。

图8和图9所示的两个实施例中,当比较器的正输入v+和负输入v-无限地彼此接近时,比较器很容易在模数转换过程中遭受亚稳性问题,即在短暂的时间内无法判断比较器的正输入v+和负输入v-的差异。这是因为要量化的模拟mac结果的幅度不是连续的而是离散的,并且离散的幅度级别与sardac对齐。为了减轻比较器的亚稳性,如图10,在另一实施例中,相对于图8,比较器的正输入v+侧的macdac和负输入v-侧的sardac均添加一个与其他电容器并联的半lsb电容器;正输入v+侧的半lsb电容器另一端始终接地,负输入v-侧的半lsb电容器另一端可连接开关序列。这将在macdac和sardac之间的离散模拟电平之间产生半个lsb电压的差异,提供额外的误差容限。上述半lsb电容器可以是两个串联的最低位lsb电容器,以实现良好的匹配。

在另一实施例,允许macdac通过底板采样复用为sardac。如图11,比较器的正输入v+侧连接macdac和一个半lsb电容器,macdac的第1个至第n-1个单元的电容器和半lsb电容器均可连接开关序列的接vdd端或者接地端,第n个单元的电容器可选择连接地端;比较器的负输入v-侧不连接电容器而是电压vref。实际上,本实施例中的macdac也是sardac。应当注意,此实施例应当在mac计算遵循“方式二”的操作,且通常vref=vrst。sar转换完成后,比较器的正输入电压v+返回vrst,对应了“方式二”中电容器的顶板电压vtop通过重置开关srst重置为vrst这一步骤所需的vrst。这样使用相同的电容阵列实现mac操作以及模数转换,避免在mac操作环节的macdac和模数转换阶段sardac中的电容阵列不同而导致的失配以及精度损失,并且允许全差分saradc的实现。

结合图11的实施例,在另一实施例中,图12显示差分mac体系结构,解决了共模相关比较器输入失调电压偏移的问题。比较器的正输入v+侧连接macdac和一个额外的lsb电容器,在模数转换的过程中,macdac的第1个至第n-1个单元的电容器和额外的lsb电容器均可连接开关序列的接vdd端或者接地端,第n个单元的电容器可连接接地开关序列;比较器的负输入v-侧连接差分macdac和一个额外的差分lsb电容器,在模数转换过程中,差分macdac的第1个至第n-1个单元的电容器和额外的差分lsb电容器均可连接开关序列,第n个单元的电容器可选择连接接地开关序列。所述差分macdac包括mac阵列中的差分计算电容阵列。应当注意,所述差分mac体系结构需与前述差分结构的模组结合才可实现。

在一实施例中,一列saradc的位宽可以实时地由输入数据以及存储在该列的数值的稀疏性来决定,这样平均下来在模数转换过程中需要充放电的二进制加权电容器阵列里的电容的个数有可能大量减少,从而达到大幅节省模数转换能耗的效果。特别地,如图13所示,saradc的实时位宽可以计算为ceil(log2(min(x,w)+1))。其中ceil为上取整函数,min为最小值函数,x为1比特输入向量中1的个数,可以通过加法器树计算得到,w为计算阵列的一列里存储的1的个数,可以在片下计算得到,并且在将数据存储在计算阵列里的时候已经存放在sar逻辑里。计算位宽的式子里的min,log2,ceil函数可以被简单的数字组合逻辑替代而得到同样的计算结果。

值得注意的是,上述实施例中,所包括的各个模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1