一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

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

2021-11-09 22:17:00 来源:中国专利 TAG:

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


背景技术:

2.目前,现有移动和物联网之类的新兴边缘应用要求高能效和高单位面积的运算速率。高能效意味着更长的电池寿命,而高单位面积的运算速率意味着在指定的运算速率下减小面积,进而降低成本。如今,深度神经网络(deep neural network,dnn)中的前馈推理计算以乘法累加(multiply-and-accumulate,mac)计算为主导,需要mac计算的高能效和低面积的实现,同时减少待处理数据的搬运量。传统数字集成电路实现mac有抗噪声能力强、精度高、扩展性好、设计方法成熟等优点,但是数字电路占用的芯片面积大,功耗大,难以实现高能效的大规模神经网络。并且传统数字电路采用的冯诺依曼结构带来的存储器和中央运算单元之间的数据交换瓶颈在dnn应用中的大规模数据搬运下会严重限制运算能效和运算速度。模拟电路实现mac具有结构简单、功耗较低的优点,所以模拟和模数混合信号计算具有实现高能效的潜力。而为了打破冯诺依曼架构的瓶颈,近年来成为研究热点的存内计算从本质上无法以纯数字电路的形式实现,需要模拟电路的辅助。同时由于dnn对包括电路噪声造成的计算错误的承受能力较高,dnn专用集成电路(asic)正重新引起关注。
3.论文“amixed-signal binarized convolutional-neural-network accelerator integrating dense weight storage and multiplication for reduced data movement”,doi:10.1109/vlsic.2018.8502421(以下称“论文1”)和论文“a microprocessorimplemented in65nm cmos with configurable and bit-scalable accelerator for programmable in-memory computing”,arxiv:1811.04047(以下称“论文2”),阐述1位mac计算的乘法阶段是等效于1位权重和1位输入进行同或(xnor)运算,把xnor运算结果以电压的形式存储到电容器,加法阶段是利用电荷共享,每个电容器的电荷相同但所有电容器的总电荷不变,得出1位mac计算结果。上述1位mac计算的每个1位计算单元都有10个晶体管。论文1和论文2的现有技术存在的问题为:(1)对于每个加法操作,将无条件驱动每个计算单元中的传输门,而无法利用输入数据的稀疏性达到节省能耗的目的;(2)每一个进行1位乘法的运算单元配置一个独立电容器,逐次逼近型(successive approximation,sar)模拟数字转换器(analog to digital converter,adc)的金属氧化物金属(metal oxide metal,mom)电容器位于静态随机存储器(static random access memory,sram)计算阵列之外,因为该阵列内部没有空间,从而降低了面积效率;(3)利用电荷共享的加法阶段需要连接存储xnor运算结果的电容器的顶板。这种电路拓扑使加法容易受到非理想效应的影响,例如电荷注入,时钟馈通,传输门晶体管的漏极或源极处的非线性寄生电容,以及连接到电容器顶板的晶体管的漏电等,从而导致计算错误。此外,因为物理版图的不匹配而带来的运算电容器与adc中的数模转换器里的电容器之间的不匹配也会导致计算错误。
4.论文“an always-on3.8μj/86%cifar-10mixed-signal binary cnn processor with all memory on chip in28nm cmos”,doi:10.1109/isscc.2018.8310264(以下称“论文3”)提出一种仅支持二进制化的权重和激活值的二值神经网络(bnn)的运算模组。论文3中的运算模组的不足为:(1)该架构只支持bnn,无法用于视觉应用的大型dnn模型、例如对象检测等,适用范围小;(2)1位mac计算的乘法阶段至少需要一个或(or)门,两个同或(xnor)门,两个异或(nor)门和一个锁存器,使用的晶体管数量多,面积占用大。
5.论文“conv-ram:an energy-efficient sram withembedded convolution computation for low-power cnn-based machine learning applications”,doi:10.1109/isscc.2018.8310397(以下称“论文4”)提出一种具有嵌入式卷积计算功能的节能sram。论文4中的sram的不足有:(1)每个1位计算sram单元具有10个晶体管。每个单元中的晶体管数越高,存储密度越小;(2)利用位线上的寄生电容存储电荷,以用于随后的平均操作。与如mom电容器之类的显式电容器相比,位线寄生电容的建模不充分,并且可能遭受更大的失配,导致较低的计算精度;(3)论文内所使用的水平电荷平均方法需要6个额外的晶体管,这些晶体管在几行单元之间共享,限制了吞吐量,因为并非所有行都可以同时执行计算;(4)差分电荷平均线vp
avg
和vn
avg
上的共模电压取决于输入数据x
in
的大小,在通过局部mav电路评估平均值后,此共模电压是不恒定的。因此差分结构的高效率高速adc,例如sar adc并不适用。文章的方案采用了最大占用2
n-1(n是adc分辨率)次步骤进行收敛的基于斜坡的adc,降低了模数转换的速度,导致了较低的计算吞吐量;(5)阵列的输入使用额外的dac电路将输入数据x
in
(通常是特征图)从数字表示转换为模拟表示,dac电路的非理想特性会导致更多的精度损失以及面积和能量的开销。
6.综上所述,现有技术中的mac阵列中进行1位乘法的计算单元使用的晶体管多;存储乘法结果用于累加的电容器与存储单元一一对应,即存储单元的个数与电容器的数量相同,而电容一般会比sram单元大很多,特别是在先进工艺制程下,会导致mac阵列占用面积大;同时存在乘加运算中晶体管的无条件的驱动,导致运算能效不高;另外,计算错误率高导致适用场景有限等。
7.因此,在模数混合存内计算领域,亟需一种面积小、能效高、容错能力好的位宽可重构的模数混合存内计算的运算模组。


技术实现要素:

8.有鉴于此,本发明提供一种子单元、mac阵列、位宽可重构的模数混合存内计算模组。为减小计算误差,还提供了差分体系的mac阵列的实现。为达到上述目的,本发明采用如下技术方案:
9.第一方面,提供了一种内存内计算的子单元,包括:存储模块、计算电容器、以及控制模块;
10.所述存储模块包括交叉耦合的两个cmos反相器和一个互补传输门,交叉耦合的两个cmos反相器存储1位的过滤器参数,所述互补传输门n型mos管栅极连接输入信号,互补传输门p型mos管栅极连接互补输入信号,其中一个cmos反相器的输出端连接互补传输门的输入端,互补传输门的输出端连接计算电容器的底板以及控制模块;
11.所述输入信号与所述过滤器参数的乘法结果存储为计算电容器底板的电压;
12.多个子单元用于组成一个计算单元,所述同一计算单元内的每一个子单元共用同一所述控制模块和一个计算电容器。
13.在该方案中,1位的过滤器参数或权重w写入并存储在交叉耦合的两个cmos反相器中,输入信号a连接互补传输门的n型mos管栅极,互补传输门的p型mos管栅极连接互补输入信号na,输入信号a与权重w的乘法结果存储为计算电容器底板的电压,所述多个子单元组成一个计算单元,同一计算单元内的每一个子单元共用同一所述控制模块和计算电容器,子单元以2
×
2、4
×
2等可行的方式排列。直观地,该方案减少了由mos管组成的控制模块的数量。以2
×
2的子单元为例,减少了3个控制模块以及3个计算电容器。
14.在一些实施方式中,控制模块包括一个第一n型mos管、一个第二n型mos管、一个p型mos管,第一n型mos管栅极连接信号b。特别地,对于一个计算子单元,互补输入信号na的电平在计算时与信号b相同。交叉耦合的两个cmos反相器中的一个cmos反相器的输出端连接互补传输门的输入端。所述第二n型mos管的源极接地,栅极接一条位线,所述p型mos管的源极接vdd,栅极接另一条互补位线。这样的拓扑结构可以避免传输门的无条件驱动,提高能效。例如,当信号b=0,互补输入信号na=0,输入信号a=1,过滤器参数w=1,计算电容与n型mos管连接的支路不通,互补传输门与计算电容器连接的支路导通,过滤器参数w与输入信号a的乘法结果存储为计算电容器底板电压v
btm
。这样,所述完成一位乘法(过滤器参数w与输入信号a)的子单元只需要9个晶体管,减小了完成1位乘法的子单元的面积。传输门避免了连接到进行电荷累加的电容器的顶板,这样可以最小化计算误差,特别是由于mos管用作开关时的时钟馈通、由导通转向关断时的电荷注入、在传输门晶体管的漏/源处的非线性寄生电容、以及晶体管的漏电引起的误差。
15.结合第一方面及其可能的实施方式,在一些实施方式中,为了减少位线的数量方便物理版图中的走线,改变了控制模块中mos管之间的连接方式,与计算电容器底板连接的第二n型mos管和p型mos管串联形成一个第一cmos反相器。所述第一cmos反相器的p型mos管的源极接vdd,第一cmos反相器的第二n型mos管的源极连接第一n型mos管的漏极;所述第一n型mos管源极接地,栅极的输入信号与所述互补传输门p型mos管栅极连接的信号在运算时电平相同;所述第一cmos反相器的输入连接一条位线,输出连接计算电容器底板。
16.结合第一方面及其可能的实施方式,在一些实施方式中,为了减少计算单元中晶体管的数量,并且方便存储单元内容的读出,控制单元中保留第一n型mos管和p型mos管,去掉第二n型mos管。第一n型mos管的漏极与p型mos管的漏极相连并连接到电容器的底板,第一n型mos管的源极与p型mos管的源极相连并连接到一条位线。第一n型mos管的栅极连接一条控制字线,其电平在计算时与互补传输门中p型mos管的栅极电平相同。p型mos管的栅极连接另一条控制字线。
17.结合第一方面及其可能的实施方式,越多的子单元共用所述控制单元中的mos管与计算电容器,此时需要的器件数量及面积均摊到每一个子单元上,每个子单元需要的晶体管数量越接近于6个。
18.结合第一方面,在一些实施方式中,计算单元内的子单元以时分复用的方式被激活,即一个子单元被激活时,同一个计算单元内的其他子单元被停用,每个计算单元内的第一n型mos管栅极输入的信号与某时刻处于工作状态的子单元内互补传输门的p端栅极电平相同。在一个子单元参与完成计算后,同一计算单元包含的其他子单元内存储的过滤器参
数可以立即用于内存内运算,不需要再从外部移动数据储存到子单元内后再进行计算,提高了计算速度以及数据吞吐量并且减少能量损耗以及面积消耗。
19.第二方面,提供了包含第一方面以及第一方面可能实施方式的一种mac阵列,进行乘加运算,包括:多个计算单元,每个计算单元内的所有子单元的互补传输门的输出端连接同一个计算电容器同一底板,同一列的所有计算单元内的计算电容器顶板连接同一累加总线,每一累加总线的电压对应每一列乘法计算的累加和。
20.在该方案中,由于一个电容占用的面积一般是一个sram单元占用面积的数倍,在所述子单元采用共用由晶体管组成的控制模块以及计算电容器的方式下,即多个用于1位乘法的子单元共用一个电容器存储计算结果相对其他的1个子单元用于1位乘法需要连接一个电容器存储计算结果的设计,可以极大地提高单位面积的存储容量。对于内存内计算,减少片内外部数据的移动是减少能量消耗的最主要方式之一。方案中,单位面积mac阵列包括更多的交叉耦合的cmos反相器,可以一次性存储更多的神经网络过滤器参数从而减少数据移动。
21.结合第二方面,在一些实施方式中,mac阵列还包括第二cmos反相器和差分计算电容器,对应组成mac阵列的每一计算单元中,所有子单元的互补传输门的输出端连接同一第二cmos反相器的输入端,第二cmos反相器的输出端连接差分计算电容器的同一底板;同一列的所有差分计算电容器顶板连接同一差分累加总线。
22.第三方面,提供了一种位宽可重构的模数混合mac计算器,包括:第二方面或第二方面的任意可能的实现方式中的mac阵列,计算后列向累积的结果表示为模拟电压;filter/ifmap模块,提供被写入并存储在mac阵列中的过滤器参数或神经网络上一层计算完的激活值;ifmap/filter模块,提供mac阵列的输入,与所述的过滤器参数或神经网络上一层计算完的激活值进行乘加运算;模数转换模块,将mac后得到的模拟电压转换为数字表示;数字处理模块,对模数转换模块输出的数字表示进行多位融合、偏置、缩放或非线性操作,输出结果为部分和或者为能用于下一层网络输入的激活值。
23.该方案中,所述过滤器参数或者神经网络上一层计算完的激活值通过filter/ifmap模块写入并存储在mac阵列中,使子单元中的交叉耦合的两个cmos反相器存储逻辑1或0,并与ifmap/filter模块提供的输入进行乘加运算。此过程,每个子单元内的存储值与输入的乘法运算属于数字运算,等效于and运算,乘法运算的结果存储在计算电容器中,加法阶段,由于同一列的所有计算电容器的顶板通过同一累加总线连接在一起,不同计算电容器中存储的电荷通过该累加总线进行共享,列向累积的乘法结果存储为模拟电压。随后,模拟结果通过模数转换模块转换为数字表示,最后对该数字表示进行处理,输出结果为部分和或者为能用于下一层网络输入的激活值。在传统数字实现的神经网络计算过程中,mac耗费大量能耗。该方案中,mac采用模数混合运算,可以极大降低能耗,同时mac阵列的低面积实现可以提高能效以及计算速度。针对整个神经网络计算的不同阶段采用不同的运算方式的结合,极大地利用了模拟和数字运算的不同优点,保证了计算过程的低功耗、高能效、高速度、高精度的实现。
24.结合第三方面,在一种可能的实施方式中,模数转换模块采用sar adc,具体为二进制加权电容结构的sar adc。
25.结合第三方面和第一种可能的实施方式,在第二种实施方式中,mac阵列的输入数
值以及存储数值的稀疏性可以使sar dac中的部分电容器的开关序列免于切换,从而获得更高的能效和adc转换速度。换一种方式说,mac阵列中每一列sar adc的位宽可以实时地由输入数值以及存储数值的稀疏性来决定。
26.结合第三方面或第三方面可能的实施方式,在第三种可能的实施方式中,mac dac和sar dac可以连接在一起,应当理解,所述mac dac指的是mac阵列中的一列计算电容阵列,即一列mac阵列中的电容器与sar dac中的电容器并联。
27.结合第三方面或第三方面可能的实施方式,在其他实施方式中,允许mac dac通过底板采样复用为sar dac,从而使用相同的电容阵列实现mac操作以及模数转换,避免在mac操作环节的mac dac和模数转换阶段的sar dac中使用不同电容阵列导致的失配以及精度损失,进一步地,并且允许全差分sar adc的实现,更好地解决共模相关的比较器的输入失调电压偏移的问题。
附图说明
28.图1a为本发明一实施例中的子单元的示意图;
29.图1b为本发明一实施例中的子单元中6t结构的示意图;
30.图2a为本发明一实施例中的子单元结构的示意图;
31.图2b为本发明另一实施例中的子单元结构的示意图;
32.图2c为本发明另一实施例中的子单元结构的示意图;
33.图2d为本发明一实施例中1位乘子单元真值表的示意图;
34.图3a为本发明一实施例中计算单元中子单元排列示意图;
35.图3b为本发明一实施例中多个子单元组成的计算单元的示意图;
36.图3c为本发明另一实施例中多个子单元组成的计算单元的示意图;
37.图3d为本发明另一实施例中多个子单元组成的计算单元的示意图;
38.图3e为本发明一实施例中计算单元内子单元真值表;
39.图4为本发明一实施例中包含计算单元mac阵列示意图;
40.图5为本发明一实施例中计算电容器底、顶板电压示意图;
41.图6a为本发明一实施例中计算单元连接第二cmos反相器和差分计算电容器示意图;
42.图6b为本发明另一实施例中计算单元连接第二cmos反相器和差分计算电容器示意图;
43.图6c为本发明另一实施例中计算单元连接第二cmos反相器和差分计算电容器示意图;
44.图7为本发明一实施例中差分体系下组成mac阵列示意图;
45.图8为本发明一实施例中存内计算模组示意图;
46.图9为本发明一实施例中模数转换模块示意图;
47.图10为本发明另一实施例中模数转换模块示意图;
48.图11为本发明另一实施例中模数转换模块示意图;
49.图12为本发明另一实施例中模数转换模块示意图;
50.图13为本发明另一实施例中模数转换模块差分结构示意图;
51.图14为本发明一实施例中减少模数转换的能量消耗的架构示意图。
具体实施方式
52.为了使发明的目的、原理、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,正如本发明内容部分所述,此处所描述的具体实施例用以解释本发明,并不用于限定本发明。
53.需要特别说明的是,根据说明书的文字或者技术内容可以确定的连接或位置关系,为了图画的简洁进行了部分的省略或者没有画出全部的位置变化图,本说明书未明确说明省略的或者没有画出的位置变化图,不能认为没有说明,为了阐述的简洁,在具体阐述时不再一一进行说明,在此统一说明。
54.此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。
55.作为一种常见的应用场景,本发明实施例所提供的的位宽可重构的模数混合计算模组可以应用在视觉、声学dnn架构中,更具体地,实现对象检测、低功耗的声学特征提取等。
56.以特征提取为例,将待处理数据与特征提取器中的由权重构成的过滤器进行卷积运算后,输出相应的特征图/激活值。过滤器选取不同,提取的特征也会不同。此过程中,待处理数据与过滤器的卷积运算需要的能耗最高,需要避免电路无条件驱动等情形造成的能耗,特别是待处理数据为稀疏矩阵时。
57.本技术提出一种用于存内计算的子单元,如图1a,包括:存储模块、计算电容器、以及控制模块;所述存储模块包括交叉耦合的两个cmos反相器和一个互补传输门,交叉耦合的两个cmos反相器存储1位的过滤器参数,所述互补传输门n型mos管栅极连接输入信号a,互补传输门p型mos管栅极连接互补输入信号na,其中一个cmos反相器的输出端连接互补传输门的输入端,互补传输门的输出端连接计算电容器的底板和控制模块。应当注意,互补传输门是一个双向器件,本发明中所说的互补传输门的输入端指的是与其中一个cmos反相器的输出端连接的一端。互补传输门的n端和p端栅极的既可以分别连接到字线信号wl、nwl,用于控制子单元的写入或者读出权重w,又可以分别连接到输入信号a和互补输入信号na,用于参与1位乘法计算。
58.所述输入信号a与权重w的乘法结果存储为计算电容器底板的电压v
btm

59.为描述方便,所述互补传输门与计算电容器连接的是计算电容器的底板,计算电容器与累加总线连接的是顶板。由交叉耦合的两个cmos反相器连接一个互补传输门构成的存储模块称为6t结构(6t sub-cell,包含6个晶体管),参见图1b。
60.多个子单元用于组成一个计算单元,同一所述计算单元内的每一个子单元共用同一所述控制模块和一个计算电容器。
61.图2a为用于1位乘运算的子单元结构一实施例示意图,其中控制模块包括一个第一n型mos管、一个第二n型mos管、一个p型mos管,所述第一n型mos管源极接地,漏极与第二n型mos管漏极、p型mos管的漏极、所述互补传输门的输出端连接计算电容器的同一底板,所述互补传输门n型mos管栅极连接输入信号a,第一n型mos管栅极输入的信号b与互补传输门p型mos管栅极连接的互补输入信号na的电平相同;所述第二n型mos管的源极接地,栅极接
一条位线bl
k
;所述p型mos管的源极接vdd,栅极接另一条位线nbl
k

62.在一些可能的实施方式中,可以采用互补输入信号na与信号b共用节点从而提供相同的电平。应当理解,所述第一n型mos管栅极输入的信号b不仅用于将计算电容器的底板电压重置,使子单元用于下一次的计算,还参与了1位乘法运算,如图2真值表所示。交叉耦合的两个cmos反相器存储被写入的过滤器参数或权重w与所述互补传输门的n端的输入信号a进行一位乘法的运算,所述乘法运算的结果存储为计算电容器底板的电压。举例说明,所述互补传输门用于控制写入w,子单元内的互补传输门的n端和p端栅极接收的字线信号需要确保互补传输门导通。具体地,互补传输门的n端栅极连接的字线wl置vdd和互补传输门的p端栅极连接的另一字线nwl置0。如果要写入“0”,位线bl
k
和nbl
k
都被置为高电平,此时第二n型mos管导通,p型mos管不导通;如果要写入“1”,位线bl
k
和nbl
k
都被置为低电平,此时第二n型mos管不导通,p型mos管导通。而在进行存内计算的时候,bl
k
被置为低电平,nbl
k
被置为高电平,保证互补传输门中的存内计算的乘法结果存储在计算电容器中。
63.进一步地,位线过多对于走线是很大的挑战,为了减少位线的数量方便物理版图中的走线,在另外的实施例中,对基于上述子单元中控制模块的位线设计进行了优化,参见图2b,为优化后一个子单元示意图,具体地,在包含一个第一n型mos管、一个第二n型mos管和一个p型mos管的控制模块中,相对于与图2a的实施例,第二n型mos管和p型mos管串联组成一个第一cmos反相器,所述第一cmos反相器的p型mos管的源极接vdd,第一cmos反相器的第二n型mos管的源极连接第一n型mos管的漏极;所述第一n型mos管源极接地,栅极的输入信号与所述互补传输门p型mos管栅极连接的信号在运算时电平相同;所述第一cmos反相器的输入连接一条位线,输出连接计算电容器底板。在本实施例中,当所述6t结构写入过滤器参数或权重的时候,如果要写入0,位线bl
k
和b都被置为高电平;如果要写入1,位线bl
k
被置为低电平。在进行存内计算的时候,bl
k
被置为高电平,信号b与互补输入信号na的电平相同。
64.进一步地,为了继续减少子单元中晶体管的数量,在另外的实施例中,图2a和图2b两个实施例中的第二n型mos管被去掉,参见图2c,为控制单元只有两个晶体管的子单元示意图。第一n型mos管的漏极连接p型mos管的漏极,并于计算电容器的底板相连。第一n型mos管的源极和p型mos管的源极与一条位线相连。第一n型mos管的栅极连接字线信号b,其电平特别地在计算时与6t单元中互补传输们的p型mos管的栅极电平相同。p型mos管的栅极连接另一条字线信号nb。在本实施例中,当所述6t结构写入过滤器参数或权重的时候,如果要写入0,位线bl
k
被置为低电平,b被置为高电平;如果要写入1,位线bl
k
被置为高电平,nb被置为低电平。在进行存内计算的时候,bl
k
被置为低电平,b与互补输入信号na的电平相同,nb被置为高电平,可以理解,本实施例中完成1位乘法运算的子单元只需要8个晶体管。
65.可选的,子单元进行一位乘法计算的过程如下:
66.1.计算电容器的顶板电压v
top
通过累加总线上的复位开关s
rst
复位到v
rst。
67.2.将子单元中第一n型mos管的栅极信号b提升到vdd,导通第一n型mos管,将电容器的底板电压v
btm
重置为0,将子单元中的传输门的输入信号a和na分别保持在0和vdd。v
btm
重置为0后,s
rst
断开连接。
68.3.计算过程中,激活信号a和na,激活子单元时1位乘法运算的真值表如图2所示。
69.4.子单元乘法运算完成后,计算电容器的底板电压v
btm
要么保持在0,要么进入
vdd,乘法运算的输出结果为计算电容器底板电压v
btm
表示为vdd
×
w
×
a。
70.可以理解,所述完成一位乘法(过滤器参数w与输入信号a)的子单元只需要9个或者甚至8个晶体管,相对现有技术,减小了子单元的面积,提高能效。另外,传输门连接在计算电容器的底板相对于现有技术中的连接在计算电容器的顶板的方案能够最小化计算误差,特别是由于mos管用作开关时的时钟馈通,由导通转向关断时的电荷注入,在传输门晶体管的漏/源处的非线性寄生电容,以及晶体管本身的漏电等等引起的误差。
71.上述实施例中的多个子单元用于组成一个计算单元,子单元以2
×
2、4
×
2等可行的方式排列,排列方式参考图3a。直观地,该方案减少了计算电容器以及组成控制模块的mos管的数量。以2
×
2的子单元为例,减少了3个控制模块和3个计算电容器。如图3b、图3c、图3d所示的分别对应由上述子单元组成计算单元的实施例,同个计算单元内的每个子单元保留各自所述的6t结构,多个计算子单元用于组成一个计算单元,所述同一计算单元内的每一个子单元共用同一所述控制模块和一个计算电容器,可以理解,一个计算单元内只有一个控制模块、一个计算电容器。直观地,该方案通过共用的方式减少了对应实现相同数量独立的子单元所需要的控制模块以及计算电容器的数量,以图3b的计算单元为例,多个子单元共用同一所述计算电容器、一个第一n型mos管、一个第二n型mos管和一个p型mos管,每个子单元的互补传输门输出端连接同一个第一n型mos管的漏极、同一计算电容器的底板、同一p型mos管的漏极、同一第二n型mos管漏极。应当注意,控制模块一般由晶体管组成,那么越多的子单元共用所述器件,分摊下来每个子单元需要的晶体管数量就会越接近存储模块所需要的晶体管数量,也即6t结构的晶体管数量。
72.另外,由于单个电容占用的面积一般是所述6t结构占用面积的数倍,差距悬殊,采用所述子单元共用器件的方式,即多个用于1位乘法的子单元共用一个电容器存储计算结果,相较于每个1位乘法的子单元单独连接一个电容器存储计算结果,可以极大的提高指定面积内的存储容量,即相同面积内可以一次性存储较现有技术更多的过滤器参数或权重。
73.进一步地,同一计算单元内的子单元以时分复用的方式被激活,即一个子单元被激活时,同一个计算单元内的其他子单元被停用。子单元被激活后按照上述执行一位乘法的运算,单元内计算的真值表参考图3e,具体地,在一些实施例中,子单元互补传输门的n端栅极和p端栅极的信号分别为a
ij
和na
ij
,其中i为单元列的索引,且为0~(n-1)的非负整数,j为单元内子单元的索引,在2
×
2的单元内,j=a,b,c,d。可以理解,所述子单元共用晶体管以及电容器的方式,指的是一个计算单元内包含了多个能用于乘法运算的子单元。应当注意,不同于单个独立的子单元,当多个子单元组成一个计算单元时,所述第一n型mos管栅极的输入信号b
i
与每个子单元的互补传输门的p端栅极的输入信号na
ij
是分别控制的,在时分复用下,虽然某时刻处于工作状态的子单元内的na
ij
与b
i
电平相同,但是不再适用二者共用节点的情形。相对于相同数量且独立的子单元来说,子单元组合成的计算单元内需要的计算电容器、控制模块的数量分别减少n-1个,即计算电容器、第一n型mos管、第二n型mos管、p型mos管的控制模块的数量分别减少n-1个,计算单元内完成1位乘法的子单元结构逼近6个晶体管。一般地,由于制作工艺的区别,计算电容器的占用的面积是子单元6t存储结构的数倍,所述共用的方式减少单位面积中电容的数量,可以提高计算单元组成的模组的存储容量。并且,在一个子单元参与完成计算后,同一计算单元包含的其他子单元内存储的过滤器参数可以立即用于内存内运算,不需要再从外部移动数据储存到子单元内后再进行计算,
提高了计算速度。
74.第二方面,结合第一方面的子单元、计算单元,得到一种mac阵列,参见图4,进行乘加运算,所述mac阵列包括:多个计算单元,同一列的所有计算电容器顶板连接同一累加总线。并且,如前述可以理解,每个计算单元包括至少一个所述子单元,计算单元内的每一个互补传输门的输出端连接同一个计算电容器同一底板,每一累加总线的电压对应每一列计算的累加和。
75.该方案中,相对于独立的子单元组成的mac阵列,所述采用共用电容器及晶体管的模式的计算单元,mac阵列可以存储更多的神经网络参数或者上一层网络计算完成的值。具体地,计算单元内的完成1位乘法的计算并将计算结果存储在计算电容器中,处于mac阵列中的同一列计算单元通过计算电容器顶板连接的同一条累加总线将各自的1位乘法结果累加。
76.另外,对于内存内计算,减少芯片内外部数据的移动是减少能量消耗的直接方式。可以理解,因为单个计算电容器的占用的面积是单个存储单元的数倍,方案中,共用计算电容器的方式使得单位面积mac阵列容纳了更多的存储单元,可以一次性存储较现有技术更多的过滤器参数。在一个子单元计算完成后,同一单元的其他子单元内交叉耦合的两个cmos反相器存储的过滤器参数可以立即用于内存内运算,不需要再从外部移动数据储存到存储单元内后再进行计算,这极大地提高了计算速度,提高吞吐量并且减少能量损耗以及面积消耗。
77.参见图5所示,特别地,同一列的所有计算电容器的顶板通过累加总线连接在一起,累加总线电压为v
top
,需要明确的是,多个计算单元按列分布,1个计算单元对应1个计算电容器,1个计算单元中包含多个第一方面或者第一方面实施例所述的子单元。
78.在一些实施例中,mac阵列以下列“方式一”执行乘加运算:
79.1.过滤器参数(或上一层网络计算完成的激活值)首先按照写入过程写入各个子单元,并被存储在子单元的交叉耦合的2个cmos反相器中;
80.2.计算电容器的顶板电压v
top
通过累加总线上的复位开关s
rst
复位到v
rst
,v
rst
可以为0;
81.3.将每个计算单元中的信号b
i
提升到vdd,计算电容器的底板电压v
btmi
重置为0,每个计算单元中的信号a
ij
和na
ij
分别保持在0和vdd。s
rst
断开连接;
82.4.在计算过程中,信号a
ij
和na
ij
以时间复用的方式被激活,例如,当a
0a
和na
0a
被激活时,a
0j
和na
0j
(j=b,c,d)被停用,即分别保持在0和vdd。值得注意,在计算过程中,一个计算单元的b0与该时刻被激活的子单元内的na
0j
是一样的电平。
83.5.在一列计算单元的相乘完成后,计算电容器的底板电压v
btmi
要么保持在0,要么进入vdd。电荷在一列计算电容器中重新分布,类似于sar dac的电容器中的电荷重新分布。如果不考虑寄生电容等非理想性,则一列计算电容器的模拟输出电压v
top
表示如下式的累加结果,如图5。
[0084][0085]
在其他实施例中,mac阵列可以按照下面的“方式二”进行运算:
[0086]
1.过滤器参数(或上一层网络计算完成的激活值)写入各个子单元;
[0087]
2.计算电容器的顶板电压v
top
通过累加总线上的复位开关s
rst
复位到v
rst
。s
rst
保持v
top
和v
rst
之间的连接。
[0088]
3.将每个单元中的信号b
i
提升到vdd,将计算电容器的底板电压v
btmi
重置为0,将每个单元中的信号a
ij
和na
ij
分别保持在0和vdd;
[0089]
4.在计算过程中,同理,信号a
ij
和na
ij
以时间复用的方式被激活。
[0090]
5.在一列计算单元的相乘完成后,每个计算电容器的底板电压v
btmi
要么保持在0,要么进入vdd。然后断开s
rst
,将底板电压v
btmi
设置为0或vdd,每个计算单元的控制模块里的mos开关运行逐次逼近算法进行模数转换。以v
btmi
均被置为0为例,电压v
top
可表示为:
[0091][0092]
特别地,第二方面或者第二方面所述的mac阵列可用于多位权重的计算,每一列的计算单元执行逐位的mac操作,通过把模数转换后的数字表示进行移位相加的操作得到多位权重的输出结果。举例而言,对于一个k位的权重/过滤器参数,每一列执行逐位的mac,可以是第1列执行最低位,即第0位的值与输入信号的mac,第k列执行最高位,即第k-1位的值与输入信号的mac。可以理解,相当于每一列单独对一个多位的二进制权重的一位进行mac,所有参与计算的列得到的mac结果包含了k个元素,最后对进行模数转换后的k个元素进行数字域的移位相加。
[0093]
为了减少计算误差,可使用差分体系的mac阵列架构,在一些实施方式中,mac阵列还包括第二cmos反相器和差分计算电容器,参见图6a、图6b、图6c,mac阵列中每个计算单元连接一个第二cmos反相器和一个差分计算电容器得到mac阵列的差分架构。具体地,每一计算单元中的所有子单元的互补传输门输出端连接同一个第二cmos反相器的输入端,第二cmos反相器的输出端连接差分计算电容器的底板;同一列的所有差分计算电容器顶板连接同一差分累加总线。为描述方便,由上述实施例中的子单元所组成的计算单元连接一个第二cmos反相器和一个差分计算电容器的结构为差分单元。那么可以理解,所述同一差分单元内的子单元共用同一所述第一n型mos管、一个第二n型mos管(图6a、图6b)、一个p型mos管、差分计算电容器和第二cmos反相器,所述差分单元内的子单元同样以所述的时分复用的方式被激活。
[0094]
图7为由前述差分单元构成的mac阵列,差分单元内的每一个互补传输门的输出端连接同一个计算电容器的底板,同一列的所有计算电容器顶板连接同一累加总线,所有差分计算电容器顶板连接同一差分累加总线。
[0095]
第三方面,提供了一种位宽可重构的模数混合计算模组,参见图8,包括:第二方面或第二方面的任意可能的实现方式中的mac阵列,计算完成后mac阵列中列向累积的结果表示为模拟电压,即上述实施例中电容器顶板的v
top
;filter/ifmap模块,提供被写入并存储在mac阵列中的过滤器参数,应当理解,对于神经网络,所述被写入并存储在mac阵列中的还可以是上一层网络计算完成后所输出的值;ifmap/filter模块,提供mac阵列的输入,具体地,提供计算单元内互补传输门两端输入,与所述的过滤器参数或上一层网络的激活值进行乘加运算;模数转换模块,将mac操作得到的模拟电压转换为数字表示;数字处理模块,对
模数转换模块输出的数字表示至少进行多位融合、偏置、缩放或非线性等操作,输出结果为部分和或者为能直接用于下一层网络输入的激活值。
[0096]
可以理解,将本技术的模组用于神经网络的mac计算时,一般情况下,由于相同的面积上,模组包括更多的存储单元,即交叉耦合的两个cmos反相器,可以一次性预先用于加载过滤器参数(权重)。在完成一层网络的计算后,输出部分和或者是最终用于下一层网络计算的激活值(特征图),可以立即与预先加载并存储在模组中的过滤器参数(权重)进行mac计算,减少了片外的数据搬运的等待时间以及功耗。另外,模组的大吞吐量可以提高片上的存储能力,例如,存储单元除了存储过滤器参数外,本层网络输出的激活值(特征图)也可以存储在mac阵列中。
[0097]
应当理解,除了在第一方面、第二方面所述的计算单元、mac阵列内采用的共用晶体管和计算电容器的方式,实际上,在所述模组的非mac阵列区域,所述计算单元还共用一些参与模数转换和数字处理的晶体管等器件。
[0098]
本发明中,所述模数转换模块可为并行电容结构的sar adc,将列向计算单元输出的顶板电压v
top
转换为数字表示,包括mac dac,sar dac,比较器,开关序列和sar逻辑。相对于采用其他类型如电阻、混合阻容结构等的sar adc,采用并行电容结构的sar adc更能充分利用本发明已有的结构,达到节省器件,减小面积的效果。mac dac由前述mac阵列中一列计算单元的电容器并联组成,应当理解,所述mac dac的输出电压为v
top
。sar dac包括(b 1)个并联电容器,b=log2n,n是mac dac中电容器的数量;所述电容器包括从最高位(most significant bit,msb)到最低位(least significant bit,lsb)的电容呈2倍递减的b个电容器,还包括一个1个与最低位lsb电容等值的电容器,作为冗余电容器。举例说明,mac dac中电容器的数量n=8,则b=3,最高位msb电容器c
b-1
的电容为c,次高位电容器c
b-2
的电容为c/2,最低位lsb电容器c0的电容为c/4,从msb到lsb能够分配sar dac的基准电压比例分别为:1/2、1/4、1/8,冗余电容器c
u
的电容为c/4,所述b个电容器和冗余电容器的一端并联在一起,b个电容器的另一端连接开关序列,冗余电容器的另一端始终接地。所述开关序列的自由端包括vdd端和接地端,sar逻辑控制所述开关序列。
[0099]
在一实施例中,如图9,mac dac的输出电压v
top
作为比较器的正输入v ;sar dac的输出v
sar
作为比较器的负输入v-,sar逻辑控制所述开关序列使负输入v-近似等于正输入v ,最终的sar逻辑输出是v 的数字表示。特别地,mac阵列的激活稀疏性可以使sar dac中的某些电容器免于切换,从而获得更高的能效和adc转换速度。例如,如果已知在mac操作之后,底板电压v
btmi
为vdd的mac电容器数量小于25%,即mac阵列中,一列计算单元进行1位乘法中1
×
0、0
×
0、0
×
1的情形较多,而1
×
1的情形小于该列计算单元数量的1/4,则可以将sar dac的前两位电容器,即c
b-1
和c
b-2
对应的开关序列的s
b-1
和s
b-2
拨向接地端,并不是无条件激活sar dac中的所有电容进行数模转换,节省能耗。应当注意,本发明附图所示的比较器v 侧和v-侧的连接方式只是为了方便说明,实际上v 侧和v-侧的连接可以互换。
[0100]
在另一实施例中,参见图10,mac dac和sar dac可以连接在一起,即使所有电容器并联,产生的总电压为比较器的正输入v ;比较器的负输入v-为v
ref
;sar逻辑控制开关序列使正输入v 逼近v
ref
。应当注意,本实施例应在mac操作遵循前述“方式一”的情况下。如果v
rst
=0且未考虑电路非理想情况,连接至比较器负输入v-侧的v
ref
可以为0或vdd/2。例如,如果v
ref
=0,sar dac中的电容器最初是通过从s0到s
b-1
的开关连接到vdd的,则sar操作可
以在给出数字表示的同时使v 返回0,对应了“方式一”中电容器的顶板电压v
top
通过重置开关s
rst
重置为0这一步骤所需的v
rst
=0。
[0101]
图9和图10所示的两个实施例中,当比较器的正输入v 和负输入v-无限地彼此接近时,比较器很容易在模数转换过程中遭受亚稳性问题,即在短暂的时间内无法判断比较器的正输入v 和负输入v-的差异。这是因为要量化的模拟mac结果的幅度不是连续的而是离散的,并且离散的幅度级别与sar dac对齐。为了减轻比较器的亚稳性,如图11,在另一实施例中,相对于图9,比较器的正输入v 侧的mac dac和负输入v-侧的sar dac均添加一个与其他电容器并联的半lsb电容器;正输入v 侧的半lsb电容器另一端始终接地,负输入v-侧的半lsb电容器另一端可连接开关序列。这将在mac dac和sar dac之间的离散模拟电平之间产生半个lsb电压的差异,提供额外的误差容限。上述半lsb电容器可以是两个串联的最低位lsb电容器,以实现良好的匹配。
[0102]
在另一实施例,允许mac dac通过底板采样复用为sar dac。如图12,比较器的正输入v 侧连接mac dac和一个半lsb电容器,mac dac的第1个至第n-1个单元的电容器和半lsb电容器均可连接开关序列的接vdd端或者接地端,第n个单元的电容器可选择连接地端;比较器的负输入v-侧不连接电容器而是电压v
ref
。实际上,本实施例中的mac dac也是sar dac。应当注意,此实施例应当在mac计算遵循“方式二”的操作,且通常v
ref
=v
rst
。sar转换完成后,比较器的正输入电压v 返回v
rst
,对应了“方式二”中电容器的顶板电压v
top
通过重置开关s
rst
重置为v
rst
这一步骤所需的v
rst
。这样使用相同的电容阵列实现mac操作以及模数转换,避免在mac操作环节的mac dac和模数转换阶段sar dac中的电容阵列不同而导致的失配以及精度损失,并且允许全差分sar adc的实现。应当特别指出的是,本实施例中的实现开关序列所需要的晶体管已经包括在前述计算单元里的控制模块中而不需要加入额外的晶体管。
[0103]
结合图12的实施例,在另一实施例中,图13显示差分mac体系结构,解决了共模相关比较器输入失调电压偏移的问题。比较器的正输入v 侧连接mac dac和一个额外的lsb电容器,模数转换过程中,mac dac的第1个至第n-1个单元的电容器和额外lsb电容器均可连接开关序列的接vdd端或者接地端,第n个单元的电容器可选择连接接地端;比较器的负输入v-侧连接差分mac dac和一个额外的lsb电容器,模数转换过程中,差分mac dac的第1个至第n-1个单元的电容器和额外lsb电容器均可连接开关序列,第n个单元的电容器可选择连接接地端。所述差分mac dac由mac阵列中的一列差分计算电容器组成。应当注意,所述差分mac体系结构需与前述差分结构的模组结合才可实现。应当特别指出的是,本实施例中的实现开关序列所需要的晶体管已经包括在前述差分计算单元里的控制模块中而不需要加入额外的晶体管。
[0104]
在一实施例中,一列sar adc的位宽可以实时地由输入数据以及存储在该列的数值的稀疏性来决定,这样平均下来在模数转换过程中需要充放电的二进制加权电容器阵列里的电容的个数有可能大量减少,从而达到大幅节省模数转换能耗的效果。特别地,如图14所示,sar adc的实时位宽可以计算为ceil(log2(min(x,w) 1))。其中ceil为上取整函数,min为最小值函数,x为1比特输入向量中1的个数,可以通过加法器树计算得到,w为计算阵列的一列里存储的1的个数,可以在片下计算得到,并且在将数据存储在计算阵列里的时候已经存放在sar逻辑里。计算位宽的式子里的min,log2,ceil函数可以被简单的数字组合逻
辑替代而得到同样的计算结果。
[0105]
值得注意的是,上述实施例中,所包括的各个模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围,如实施例中的“第一n型mos管”,“第二n型mos管”仅为区分处于不同连接位置的器件,不能理解为特定的器件。
[0106]
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献