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

一种存内运算方法、装置及其应用与流程

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


1.本发明涉及存储器术领域,具体涉及一种存内运算方法、装置及其应用。


背景技术:

2.存内计算被广泛应用于人工智能的矩阵运算加速,常见的有向量矩阵乘法,以及高维的卷积运算。但随着人工智能算法的发展,轻量型算法开始获得更多的关注,卷积神经网络也由传统的卷积逐渐向更加轻量的卷积转变,其中最常见的方式就是分组卷积或深度可分离卷积。而现有的存内计算对这类的轻量的卷积支持较弱,很难发挥存算的优势。
3.例如现有的一种传统的方法在计算分组卷积时,先将权重的矩阵映射到存储阵列中,计算时选取相应的通道开启,其他的通道关闭。而由于分组卷积的输入通道有限,故每次计算时,待计算的通道被打开之后,其他通道的输入必须为0,以避免产生电流影响最终的计算结果。而又由于输出通道和输入通道一一对应,故也只有一个输出通道的结果有效,其他通道的输出没有意义。
4.现今还有一种方法在计算分组卷积时,可以将待计算的通道依次错开,其他通道的权重均置为0。以使得计算可以同时发生,此方案具有较高的计算性能,但由于计算时,其他通道需置为0,对任何输入不产生电流响应亦即不能存储任何信息,故在面积上具有很大的浪费。
5.此外由于存内计算利用存储器的模拟域特性进行运算,其计算结果易受噪声的影响。虽依托于人工智能算法本身的容错性,在多数情况下存内计算可以容许一定的计算误差,但如何减少存内计算的误差,也对存储器性能和存内计算方法或者结构提出了很高的要求。
6.因此设计一种存内运算方法以提高包括分组卷积在内的卷积运算效率和准确率变得尤为重要。


技术实现要素:

7.针对现有技术的不足,本发明提供一种存内运算方法、装置及应用,能够更高效准确地实现包括传统卷积、分组卷积等计算,具有更高的计算性能和性能功耗比。
8.本发明解决技术问题采用如下技术方案:
9.本发明提供一种存内运算方法,包括:
10.对存储阵列按照单通道运算功能划分配置成若干运算基本块;
11.对运算基本块中所有运算单元的输出端归一接入匹配的局部求和线lsl;
12.对位于同一行上的各运算基本块输入端配置接入同一矩阵输入;
13.按列设置总和线gsl,匹配运算基本块分别设置受控开关,将位于同一列上的各求和线lsl分别通过受控开关与总和线gsl数据连接;
14.根据目标运算功能,配置运算基本块参数、读取待运算数据,选择执行受控开关的断开或闭合,并配合输出移位操作实现目标运算结果数据的输出,所述目标运算功能至少
包括传统卷积、分组卷积和深度可分离卷积中的一种或几种。
15.优选地,所述存储阵列为nor flash存储阵列、reram存储阵列、sram存储阵列或dram存储阵列中的一种;
16.所述运算单元为单个存储单元或单个存储单元和电流镜单元的组合。
17.优选地,所述运算单位为单个存储单元,所述配置运算基本块参数、读取待运算数据具体包括:
18.根据各存储单元的初始参数,获取存储单元的阈值电压随编程操作的变化曲线;
19.根据预设权值以及变化曲线配置各运算基本块中各存储单元的阈值电压;
20.读取待运算数据,转换处理成若干矩阵输入接入各运算基本块输入端。
21.优选地,所述单个存储单元和电流镜单元的组合具体包括:
22.基于cmos晶体管配置电流镜单元,所述电流镜单元的输出侧mos管的一端接存储单元漏端,另一端作为该运算单元输出端接入局部求和线lsl,所述电流镜单元的输入端作为该运算单元的输入端接入矩阵输入。
23.优选地,所述运算单元为单个存储单元和电流镜单元的组合:
24.位于同一行上的各运算基本块中接入同一输入的运算单元的电流镜单元共用同一输入侧;
25.所述配置运算基本块参数、读取待运算数据具体包括:
26.根据预设权值配置各运算单元中电流镜单元的输入输出比例;
27.匹配设置存储单元阈值使其用于控制电流镜单元是否输出电流数据;
28.读取待运算数据,转换处理成若干矩阵输入接入各运算基本块输入端。
29.优选地,所述电流镜单元为可配置比例的电流镜,所述可配置比例的电流镜输入侧和输出侧分别包括若干不同参数且相互并联的cmos晶体管,所述输入侧cmos晶体管漏端均通过受控开关接入电流镜单元的输入端,所述输入侧cmos晶体管漏端均通过受控开关接入电流镜单元的输出端,所述参数包括cmos晶体管宽长比。
30.优选地,所述选择执行受控开关的断开或闭合,并配合输出移位操作实现目标运算结果数据的输出具体包括:
31.若目标运算功能为传统卷积,则闭合所有受控开关;
32.若目标运算功能为分组卷积或深度可分离卷积,则按照预设算法在每次计算时只闭合相应运算基本块的受控开关,并配合输出移位操作将每次计算后运算基本块的输出数据按照预定顺序进行同步输出。
33.本发明还提供一种存内运算装置,包括相互配合设置的运算阵列、输入模块、dac模块、时钟模块、sel控制模块、控制器模块、adc模块和移位选择模块;
34.所述运算阵列由若干运算基本块、求和线lsl、总和线gsl和受控开关组成,其中运算基本块中所有运算单元的输出端归一接入局部求和线lsl,位于同一列上的各求和线lsl分别通过受控开关与按列设置的总和线gsl数据连接,且位于同一行上的各运算基本块输入端配置接入同一矩阵输入,所述运算基本块基于存储阵列按照单通道运算功能划分配置而成;
35.所述输入模块和dac模块匹配设置并配置成用于接收待运算数据并将其转换成目标格式信号并以矩阵输入方式接入各运算基本块输入端;
36.所述时钟模块配置成用于向其他模块提供所需频率的时钟信号;
37.所述sel控制模块配置成用于根据控制器模块的指令信号选择执行受控开关的断开或闭合;
38.所述移位操作模块配置成用于将每次计算后运算基本块的输出数据按照预定顺序进行同步输出;
39.所述adc模块配置成用于采集目标运算结果数据并转换成目标种类信号输出;
40.所述控制器模块配置成用于根据触发信号选择预先存储的目标运算功能算法,匹配时钟模块,控制运算阵列、输入模块、dac模块、sel控制模块、adc模块和移位选择模块相互配合动作,配置运算基本块参数、读取待运算数据,选择执行受控开关的断开或闭合,执行目标运算功能算法的步骤,实现目标运算结果数据的输出。
41.优选地,所述存储阵列为nor flash存储阵列、reram存储阵列、sram存储阵列或dram存储阵列中的一种;
42.所述运算单元为单个存储单元或单个存储单元和电流镜单元的组合;
43.所述单个存储单元和电流镜单元的组合具体包括:
44.基于cmos晶体管配置电流镜单元,所述电流镜单元的输出侧mos管的一端接存储单元漏端,另一端作为该运算单元输出端接入局部求和线lsl,所述电流镜单元的输入端作为该运算单元的输入端接入矩阵输入。
45.优选地,若运算单元为单个存储单元和电流镜单元的组合时:
46.位于同一行上的各运算基本块中接入同一输入的运算单元的电流镜单元共用同一输入侧;
47.dac模块配置成用于根据输入模块的输入信号为电流镜单元提供匹配的电流输入;
48.所述配置运算基本块参数、读取待运算数据具体包括:
49.根据预设权值配置各运算单元中电流镜单元的输入输出比例;
50.匹配设置存储单元阈值使其用于控制电流镜单元是否输出电流数据;
51.读取待运算数据,转换处理成若干矩阵输入接入各运算基本块输入端;
52.若所述运算单位为单个存储单元时,所述配置运算基本块参数、读取待运算数据具体包括:
53.根据各存储单元的初始参数,获取存储单元的阈值电压随编程操作的变化曲线;
54.根据预设权值以及变化曲线配置各运算基本块中各存储单元的阈值电压;
55.读取待运算数据,转换处理成若干矩阵输入接入各运算基本块输入端。
56.优选地,所述dac模块采用电流输出型dac或开关控制型dac配置而成;
57.所述开关控制型dac具体为:预设多级固定电流,采用开关控制多级固定电流的接入并根据输入模块的输入信号选择开关打开或闭合。
58.优选地,所述电流镜单元为可配置比例的电流镜,所述可配置比例的电流镜输入侧和输出侧分别包括若干不同参数且相互并联的cmos晶体管,所述输入侧cmos晶体管漏端均通过受控开关接入电流镜单元的输入端,所述输入侧cmos晶体管漏端均通过受控开关接入电流镜单元的输出端,所述参数包括cmos晶体管宽长比;
59.所述选择执行受控开关的断开或闭合,执行目标运算功能算法的步骤,实现目标
运算结果数据的输出具体包括:
60.若目标运算功能为传统卷积,则sel控制模块接收控制器发出控制指令闭合所有受控开关;
61.若目标运算功能为分组卷积或深度可分离卷积,则按照预设算法在每次计算时sel控制模块只闭合相应运算基本块的受控开关,并配合移位操作模块执行输出移位操作将每次计算后运算基本块的输出数据按照预定顺序进行同步送入adc模块进行输出。
62.本发明还提供一种芯片,包含前述的存内运算装置,所述存内运算装置被设置为按照预设程序执行前述的存内运算方法。
63.与现有技术相比,本发明具有如下的有益效果:
64.本发明提出的一种存内运算方法,不仅兼容传统卷积计算和分组卷积计算等卷积计算功能,还可以将存储利用率维持在100%,同时保留一定的计算性能,具有较高的计算性能和计算能效,在此基础上本发明设计的存内运算装置基于现有的存储阵列结构配置而成,具有高效的权重映射和利用率,能够保证整体计算的正确性以及高效性;
65.进一步的本发明还对基本运算单元做了优化设计,采用电流镜搭配存储器阵列完成存内计算,大大降低对存储单元状态控制的要求,并能够完成高准确度、高性能的存内计算,并且由于所有的存储阵列都可以共享该电流镜阵列,故电路面积成本不会有明显提升,能够获得更好的计算性能和性能功耗比。
66.关于本发明相对于现有技术,其他突出的实质性特点和显著的进步在实施例部分进一步详细介绍。
附图说明
67.通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
68.图1为实施例1中运算基本块的电路结构示意图;
69.图2为实施例1中单个浮栅场效应晶体管结构示意图;
70.图3为实施例1中运算基本块和总和线gsl连接结构示意图;
71.图4为实施例1中执行传统卷积运算时电路结构示意图;
72.图5为实施例1中执行分组卷积或者深度可分离卷积运算时电路结构示意图;
73.图6为实施例1中执行受控开关移位时电路简易示意图;
74.图7为实施例2中运算单元电路结构示意图;
75.图8为实施例2中运算基本块的电路结构示意图;
76.图9为实施例2中电流镜阵列和存储阵列的电路结构示意图;
77.图10为实施例4中开关控制型dac的电路结构示意图;
78.图11为实施例2中可配置比例电流镜单元的电路结构示意图;
79.图12为实施例3中存内运算装置的结构示意图;
80.图13为实施例4中存内运算装置的结构示意图;
81.图14为实施例2中进行多比特输入乘法功能时电路结构示意图;
82.图15为实施例4中进行多比特输入乘加功能时运算阵列的电路结构示意图。
具体实施方式
83.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
84.需要说明的是,在说明书及权利要求书当中使用了某些名称来指称特定组件。应当理解,本领域普通技术人员可能会用不同名称来指称同一个组件。本技术说明书及权利要求书并不以名称的差异作为区分组件的方式,而是以组件在功能上的实质性差异作为区分组件的准则。如在本技术说明书和权利要求书中所使用的“包含”或“包括”为一开放式用语,其应解释为“包含但不限定于”或“包括但不限定于”。具体实施方式部分所描述的实施例为本发明的较佳实施例,并非用以限定本发明的范围。
85.实施例1
86.请参照图1

6,本实施例的一种存内运算方法,包括:
87.对存储阵列按照单通道运算功能划分配置成若干运算基本块,其中存储阵列可以为为nor flash存储阵列、reram存储阵列、sram存储阵列或dram存储阵列中的一种,至于选用何种存储阵列实现本发明的运算单元的结构均可,技术人员可以根据需要选择,因此在本实施例以nor flash存储阵列为例进行进一步的介绍;
88.对运算基本块中所有运算单元的输出端归一接入匹配的局部求和线lsl,如图1所示,在本实施例中运算单元为单个存储单元,单个存储单元也即单个浮栅场效应晶体管如图2所示,通过该浮栅场效应晶体管可以实现输入和权值的乘积运算输出,例如:由于单个存储单元的漏端电流i
d
受自身阈值电压v
th
和各端电压的控制,i
d
=k(v
gs

v
th
)v
ds
,其中v
gs
为栅源电压,v
ds
为漏源电压,导电因子k=(μc_ox w)/l,对确定工艺及尺寸的存储单元,其导电因子k为定值,同时通过编程(pgm)和擦除(ers)操作,可以控制flash浮栅中电荷量的多少,进而控制存储单元的阈值电压v
th
大小,从而可以以(v
gs

v
th
)为乘数(权值)、v
ds
(输入)为被乘数实现乘法运算,运算结果以漏端电流形式输出;当然也可以基于浮栅场效应晶体管采用其他方式实现乘法运算功能,在本实施例中为了重点说明本发明的求和线lsl和总和线gsl的独特设计,因此采用最简化的乘法运算进行举例说明,也即输入接入浮栅场效应晶体管栅极,权值直接映射浮栅场效应晶体管的阈值电压,输出为浮栅场效应晶体管的漏端,同时还要配置使得浮栅场效应晶体管工作在饱和区,此种方式可以实现最简单的1比特的乘法,至于其他多比特的乘法可以根据需要选择合适的参数设定方式和单个浮栅场效应晶体管输入输出接入方式,在此不做赘述;
89.因此在本实施例中所有运算单元的输出端也即存储单元的漏端归一接入匹配的局部求和线lsl,存储单元的源端分别接地,每个运算模块接入一个单列n行的矩阵输入其中行数n和存储单元的个数匹配,每路输入接入存储单元的栅极,将权重[w1…
w
n
]分别映射到每个存储单元中,也即每个运算块实现乘加运算,每个求和线lsl上的输出为
[0090]
请参照图3

5,对位于同一行上的各运算基本块输入端配置接入同一矩阵输入,例如若有m行运算基本块,而且每行有m个运算基本块,则一共有m个单列矩阵第i行上的m个运算基本块共同接入同一个单列矩阵
[0091]
如图3所示,按列设置总和线gsl,匹配运算基本块分别设置受控开关,受控开关可以采用常见的mos管开关,将位于同一列上的各局部求和线lsl分别通过受控开关与总和线gsl数据连接,也就是将位于不同行但是同一列的运算基本块的局部求和线lsl均通过各自的受控开关接入该列设置的总和线gsl;
[0092]
根据目标运算功能,配置运算基本块参数、读取待运算数据,选择执行受控开关的断开或闭合,并配合输出移位操作实现目标运算结果数据的输出,并采用模拟数字转换器(analogdigital convertor,adc)将该数据转换为具体结果输出,在本实施例中的目标运算功能至少包括传统卷积、分组卷积和深度可分离卷积中的一种,其中配置运算基本块参数、读取待运算数据具体包括:
[0093]
首先对nor flash存储阵列进行离线标定,获取其初始参数,得到nor flash存储阵列中各存储单元自身阈值电压v
th
随编程操作的变化曲线;
[0094]
根据预设权值w
i
以及变化曲线配置各运算基本块中各存储单元的阈值电压;
[0095]
读取待运算数据,转换处理成若干单列矩阵输入接入各运算基本块输入端,具体为将待运算数据转换成合适幅度及宽度的电压信号依次形成矩阵输入送入各运算基本块输入端;
[0096]
其中选择执行受控开关的断开或闭合,并配合输出移位操作实现目标运算结果数据的输出具体包括:
[0097]
请参照图4若目标运算功能为传统卷积,则闭合所有受控开关,也即将所有运算通道打开,此时即可完成与传统卷积一致的计算。
[0098]
若目标运算功能为分组卷积或深度可分离卷积,则按照预设算法在每次计算时只闭合相应运算基本块的受控开关,并配合输出移位操作将每次计算后运算基本块的输出数据按照预定顺序进行同步输出,也即当进行分组卷积,或者深度可分离卷积时,可以将相应的运算基本块受控开关打开,其他运算基本块受控开关关闭,如此可以在未使用的运算基本块中仍然存储数据,但对任何输入产生的响应不会影响最终总和线gsl上的测量结果。如图5所示,此时灰底的mos管处于断开的状态,对应局部求和线lsl产生的电流不会汇入总和线gsl中。故该方法可以既将存储利用率维持在100%,又能同时保留一定的计算性能,克服了现有技术的缺点。
[0099]
当进行后续其他计算时,可以进行切换,亦即将受控开关移位,为此需要进行上述的输出移位操作用于对输出结果进行移位,以使得错位的输出数据可以通过移位选择模块恢复正确的对应关系,具体如图6所示,当第一次选择的运算基本块位于对角线时,输入和输出通道对应的关系为一一对应关系。第一个输入通道对应第一个输出通道,第n个输入通
道对应第n个输出通道。但对下一次运算时,由于受控开关的受控信号sel会向着某一方向移位,此时若使用原有的计算逻辑,则会产生计算错误。故此处使用移位操作对错位的输出结果进行移位,使得移位后的计算结果可以与输入通道相对应。
[0100]
实施例2
[0101]
本实施例一种存内运算方法和实施例1的存内方法相类似,主要区别在于运算单元的构成不同,因此本实施例中与实施例1中类似地方,不做赘述,请参考实施例1中的内容;
[0102]
本实施例提供的一种存内运算方法包括:
[0103]
对存储阵列按照单通道运算功能划分配置成若干运算基本块,其中存储阵列可以为为nor flash存储阵列、reram存储阵列、sram存储阵列或dram存储阵列中的一种,在本实施例也以nor flash存储阵列为例进行进一步的介绍;
[0104]
对运算基本块中所有运算单元的输出端归一接入匹配的局部求和线lsl,请参照图7,在本实施例中运算单元为单个存储单元和电流镜单元的组合,其中单个存储单元也即单个浮栅场效应晶体管,该组合具体为:
[0105]
基于cmos晶体管配置电流镜单元,所述电流镜单元的输出侧mos管的一端接存储单元漏端,另一端作为该运算单元输出端接入局部求和线lsl,请参照图8,在图8中为了结构清晰,故省略了存储单元,所述电流镜单元的输入端作为该运算单元的输入端接入矩阵输入,由于电流镜的输出晶体管与存储单元串联,所以其输出受存储单元状态控制,将权重[w1…
w
n
]分别映射为每个电流镜单元的输入输出比例,也即每个运算块实现乘加运算,每个求和线lsl上的输出为
[0106]
一般的电流镜比例可以预先设置其固化,也可以采用如后述的可配置比例的电流镜单元,且这种比例关系一旦确定具有极高的准确度,不会随存储单元接入而改变,故该方法可以完成高计算准确度的模拟域计算。并且此处存储单元作用更多地是控制通路的开关,故对存储单元状态控制的要求大大降低。因此可以完成高准确度,高性能的存内计算;
[0107]
例如可以将乘数与电流镜比例进行映射,将被乘数转换为电流输入电流镜单元输入端,控制存储单元即可实现电流镜的电流输出,而输出的电流即为相乘的结果;
[0108]
又例如如图14所示,可以将多比特数据的位数权重与位于同一行的多个电流镜单元比例进行映射,也即从左至右,第一个电流镜单元比例为k,第二个电流镜单元比例为2k,第三个电流镜单元比例为22k
····
第n个电流镜单元比例为2
n
‑1k,然后将多比特数据的各位数值映射到对应的存储单元中,例如第一位bit

1数值映射到与第一个电流镜单元连接的存储单元,第二位bit

2数值映射到与第二个电流镜单元连接的存储单元
···
第二位bit

n数值映射到与第n个电流镜单元连接的存储单元,此时将每个电流镜单元的输出值进行合并,i
out
即为输入电流i
in
与多比特数据之积;
[0109]
请参照图9,在本实施例中位于同一行上的各运算基本块中接入同一输入的运算单元的电流镜单元共用同一输入侧;因此实际上本实施例中的各电流镜单元相当于组成了一个电流镜阵列,而与之连接的存储单元则构成了常见的存储阵列,而存储阵列和电流镜阵列间可以通过编程控制连接与否,如图9中的解码器(decoder)电路层,可以控制选择与电流镜阵列的存储阵列地址,因此所有的存储阵列都可以共享该同一个电流镜阵列,故此
方案下存内电路的面积成本不会有明显提升,有效保证了方法的运算性能比。
[0110]
为了进一步说明上述电流镜阵列与存储阵列构成的运算单元的运算功能,本实施例以二值化运算为例,将所有的电流镜单元设置为相同比例,将二值的权重矩阵编程到存储阵列中;在计算时,将电流镜阵列与待计算的存储阵列连接,并根据输入值向对应的电流镜输入端输入合适的电流;连接高阻状态存储单元的电流镜不会产生电流,连接低阻状态存储单元的电流镜则会产生电流,纵向上所有电流镜的电流会进行累加,并可以被adc所采样,即完成了输入与二值化权重的乘加运算。
[0111]
更进一步地采用利用一对电流镜做差,可以将权重扩展为0、
±
1三种权重,进而完成三值的乘加运算,例如电流镜a和b为一对,a对应的存储单元为af,b对应的存储单元为bf。如果af中存储权值为1,bf中存储权值为0,用af

bf产生权值1,用类似的方式同样能产生0、
±
1,也即将两个运算单元进行匹配,并将各自输出进行差分输出即可实现三值化运算。
[0112]
按列设置总和线gsl,匹配运算基本块分别设置受控开关,受控开关可以采用常见的mos管开关,将位于同一列上的各局部求和线lsl分别通过受控开关与总和线gsl数据连接,也就是将位于不同行但是同一列的运算基本块的局部求和线lsl均通过各自的受控开关接入该列设置的总和线gsl;
[0113]
根据目标运算功能,配置运算基本块参数、读取待运算数据,选择执行受控开关的断开或闭合,并配合输出移位操作实现目标运算结果数据的输出,并采用模拟数字转换器(analogdigital convertor,adc)将该数据转换为具体结果输出,在本实施例中的目标运算功能至少包括传统卷积、分组卷积和深度可分离卷积中的一种,其中配置运算基本块参数、读取待运算数据具体包括:
[0114]
根据预设权值配置各运算单元中电流镜单元的输入输出比例;
[0115]
匹配设置存储单元阈值使其用于控制电流镜单元是否输出电流数据;
[0116]
读取待运算数据,转换处理成若干矩阵输入接入各运算基本块输入端。
[0117]
为了进一步的提高计算的准确性和兼容性,在本实施例中对电流镜单元进行了进一步的设计,采用可配置比例的电流镜作为电流镜单元设置,如图11所示,其中可配置比例的电流镜输入侧和输出侧分别包括若干不同参数且相互并联的cmos晶体管,所述输入侧cmos晶体管漏端均通过受控开关接入电流镜单元的输入端,所述输入侧cmos晶体管漏端均通过受控开关接入电流镜单元的输出端,所述参数包括cmos晶体管宽长比,此种设计一方面可以对电流镜的比例进行调节,提高了运算的广度,另一方面由于局部求和线lsl 总和线gsl的配置,会存在电流差异过大的问题,具体地以16个局部求和线lsl,每个局部求和线lsl上有16个存储单元为例,在计算时,传统卷积可能会使用16个局部求和线lsl上的所有存储单元,假设每个存储单元可以提供最大i
max
的电流,此时最大电流为256i
max
;在深度可分离卷积中,可能只会使用1个求和线lsl上的9个存储单元,此时最大电流为9i
max
。二者之间在量程上具有很大的差距,此时若使用相同的adc进行采样,则很难保证二者都能被准确地采样,因此采用可配置比例的电流镜作为电流镜单元设置可以解决这一问题,如图11所示,右框对应cmos电流镜的输出端,左框对应cmos电流镜的输入端,由于单独的输入端配置会产生前述的问题,故此处使用可配置比例的电流镜,使用开关进行选择,如此,在传统卷积时,可以使用16:1的电流镜,则最大电流会将为16i
max
;进行深度可分离卷积时,使用1:1
的电流镜,最大电流为9i
max
。此时用量程为16i
max
的adc,可以同时测量二者的计算结果,同时能够保证测量结果的精准度。
[0118]
在本实施例中选择执行受控开关的断开或闭合,并配合输出移位操作实现目标运算结果数据的输出具体包括:
[0119]
若目标运算功能为传统卷积,则闭合所有受控开关,也即将所有运算通道打开,此时即可完成与传统卷积一致的计算。
[0120]
若目标运算功能为分组卷积或深度可分离卷积,则按照预设算法在每次计算时只闭合相应运算基本块的受控开关,并配合输出移位操作将每次计算后运算基本块的输出数据按照预定顺序进行同步输出,具体为当进行分组卷积,或者深度可分离卷积时,可以将相应的运算基本块受控开关打开,其他运算基本块受控开关关闭。如此,可以在未使用的运算基本块中仍然存储数据,但对任何输入产生的响应不会影响最终总和线gsl上的测量结果。如图5所示,此时灰底的mos管处于断开的状态,对应局部求和线lsl产生的电流不会汇入总和线gsl中。故该方法可以既将存储利用率维持在100%,又能同时保留一定的计算性能,克服了现有技术的缺点。当进行其他计算时,可以进行切换,如图6所示,亦即将受控开关移位。
[0121]
实施例3
[0122]
请参照图12,本实施例提供一种存内运算装置,该存内装置是匹配实施例1中的存内运算方法设置的,因此本实施例中有些与实施1中的相同内容,请参照实施例1,本实施例的存内运算装置包括相互配合设置的运算阵列、输入模块、dac模块、时钟模块、sel控制模块、控制器模块、adc模块和移位选择模块;
[0123]
其中运算阵列由若干运算基本块、求和线lsl、总和线gsl和受控开关组成,其中运算基本块中所有运算单元的输出端归一接入局部求和线lsl,位于同一列上的各求和线lsl分别通过受控开关与按列设置的总和线gsl数据连接,且位于同一行上的各运算基本块输入端配置接入同一矩阵输入,所述运算基本块基于存储阵列按照单通道运算功能划分配置而成,其中存储阵列可以采用nor flash存储阵列/reram(电阻式ram)存储阵列、sram存储阵列或dram存储阵列中的一种,在本实施例中以nor flash存储阵列进行举例说明;
[0124]
在本实施例中运算单元为单个存储单元,单个存储单元也即单个浮栅场效应晶体管如图2所示;
[0125]
输入模块和dac模块匹配设置并配置成用于接收待运算数据并将其转换成目标格式信号并以矩阵输入方式接入各运算基本块输入端;
[0126]
时钟模块配置成用于向其他模块提供所需频率的时钟信号;
[0127]
sel控制模块配置成用于根据控制器模块的指令信号选择执行受控开关的断开或闭合;其根据需要的卷积运算类型以及计算规模,控制运算阵列中受控开关的控制信号sel。当进行传统卷积运算时,连续的通道sel信号为开启,开启的通道数与输入通道和输出通道的个数。这种结构的设计可以最大化减少分组卷积和深度可分离卷积运算过程中的功耗,提升计算的能效比;
[0128]
移位操作模块配置成用于将每次计算后运算基本块的输出数据按照预定顺序进行同步输出,移位选择模块用于对输出结果进行移位的目的是为了使得错位的输出数据可以通过移位选择模块恢复正确的对应关系,具体如图6所示,当第一次选择的运算基本块位
于对角线时,输入和输出通道对应的关系为一一对应关系。第一个输入通道对应第一个输出通道,第n个输入通道对应第n个输出通道。但对下一次运算时,由于受控开关的受控信号sel会向着某一方向移位,此时若使用原有的计算逻辑,则会产生计算错误。故此处使用移位选择模块对错位的输出结果进行移位,使得移位后的计算结果可以与输入通道相对应;
[0129]
adc模块配置成用于采集目标运算结果数据并转换成目标种类信号输出;
[0130]
控制器模块配置成用于根据触发信号选择预先存储的目标运算功能算法,匹配时钟模块,控制运算阵列、输入模块、dac模块、sel控制模块、adc模块和移位选择模块相互配合动作,配置运算基本块参数、读取待运算数据,选择执行受控开关的断开或闭合,执行目标运算功能算法的步骤,实现目标运算结果数据的输出,前述的目标运算功能至少包括传统卷积、分组卷积和深度可分离卷积中的一种或几种;
[0131]
在本实施例中其中配置运算基本块参数、读取待运算数据具体包括:
[0132]
首先通过控制器模块对nor flash存储阵列进行离线标定,获取其初始参数,得到nor flash存储阵列中各存储单元自身阈值电压v
th
随编程操作的变化曲线;
[0133]
根据预设权值w
i
以及变化曲线,控制器模块执行擦除或编写操作,配置各运算基本块中各存储单元的阈值电压;
[0134]
输入模块读取待运算数据,配合dac模块转换处理成若干单列矩阵输入接入各运算基本块输入端,具体为将待运算数据转换成合适幅度及宽度的电压或电流信号依次形成矩阵输入送入各运算基本块输入端;
[0135]
其中选择执行受控开关的断开或闭合,并配合输出移位操作实现目标运算结果数据的输出具体包括:
[0136]
若目标运算功能为传统卷积,则控制器模块根据传统卷积算法的步骤,发送控制指令至sel控制模块控制闭合所有受控开关,也即将所有运算通道打开,此时即可完成与传统卷积一致的计算。
[0137]
若目标运算功能为分组卷积或深度可分离卷积,则控制器模块按照预设算法,发送控制指令至sel控制模块,在每次计算时只闭合相应运算基本块的受控开关,并配合移位操作模块执行输出移位操作将每次计算后运算基本块的输出数据按照预定顺序进行同步输出,也即当进行分组卷积,或者深度可分离卷积时,可以将相应的运算基本块受控开关打开,其他运算基本块受控开关关闭,如此可以在未使用的运算基本块中仍然存储数据,但对任何输入产生的响应不会影响最终总和线gsl上的测量结果。可以既将存储利用率维持在100%,又能同时保留一定的计算性能,克服了现有技术的缺点。
[0138]
实施例4
[0139]
如图13所示,本实施例提供一种存内运算装置,该存内装置是匹配实施例1中的存内运算方法设置的,其与实施例3的区别在于运算阵列中运算基本块的构成不一样,因此本实施例中与实施例3中类似地方,不做赘述,请参考实施例3中的内容;本实施例中运算基本块中运算单元为单个存储单元和电流镜单元的组合,其中单个存储单元也即单个浮栅场效应晶体管,该组合具体为:
[0140]
基于cmos晶体管配置电流镜单元,所述电流镜单元的输出侧mos管的一端接存储单元漏端,另一端作为该运算单元输出端接入局部求和线lsl,所述电流镜单元的输入端作为该运算单元的输入端接入矩阵输入,由于电流镜的输出晶体管与存储单元串联,所以其
输出受存储单元状态控制。
[0141]
一般的电流镜比例可以通过预先设计使其固化,且这种比例关系具有极高的准确度,不会随存储单元接入而改变,故该方法可以完成高计算准确度的模拟域计算。并且此处存储单元作用更多地是控制通路的开关,故对存储单元状态控制的要求大大降低。因此可以完成高准确度,高性能的存内计算;
[0142]
例如可以将乘数与电流镜比例进行映射,将被乘数转换为电流输入电流镜单元输入端,控制存储单元即可实现电流镜的电流输出,而输出的电流即为相乘的结果;
[0143]
例如可以将乘数与电流镜比例进行映射,将被乘数转换为电流输入电流镜单元输入端,控制存储单元即可实现电流镜的电流输出,而输出的电流即为相乘的结果;
[0144]
又例如如图14所示,可以将多比特数据的位数权重与位于同一行的多个电流镜单元比例进行映射,也即从左至右,第一个电流镜单元比例为k,第二个电流镜单元比例为2k,第三个电流镜单元比例为22k
····
第n个电流镜单元比例为2
n
‑1k,然后将多比例数据的各位数值映射到对应的存储单元中,例如第一位bit

1数值映射到与第一个电流镜单元连接的存储单元,第二位bit

2数值映射到与第二个电流镜单元连接的存储单元
···
第二位bit

n数值映射到与第n个电流镜单元连接的存储单元,此时将每个电流电流镜单元的输出值进行合并,i
out
即为输入电流i
in
与多比特数据之积;
[0145]
在本实施例中位于同一行上的各运算基本块中接入同一输入的运算单元的电流镜单元共用同一输入侧;因此实际上本实施例中的各电流镜单元相当于组成了一个电流镜阵列,而与之连接的存储单元则构成了常见的存储阵列,因此所有的存储阵列都可以共享该同一个电流镜阵列,故此方案下存内电路的面积成本不会有明显提升,有效保证了方法的运算性能比。
[0146]
也即本实施例中的运算阵列实际上包括传统的存储阵列和电流镜阵列,其中对电流镜阵列按照实施例3中所描述的进行局部求和线lsl 总和线gsl的设置,并配置对应的受控开关;
[0147]
例如按列设置总和线gsl,匹配各电流镜单元分别设置受控开关,受控开关可以采用常见的mos管开关,将位于同一列上的各局部求和线lsl分别通过受控开关与总和线gsl数据连接,也就是将位于不同行但是同一列的电流镜单元的局部求和线lsl均通过各自的受控开关接入该列设置的总和线gsl;
[0148]
进一步举例说明,为了实现多比特的乘加运算,可以设置受控开关使得按照局部求和线lsl 总和线gsl配置的电流镜阵列可以形成如图15所示(图中与各电流镜单元匹配连接存储单元省略未画出)的功能连接电路,此时可以设置所有的电流镜单元的比例相同,在输出adc模块中可以配置一个加权求和子模块,对每路输出进行一个比特位数权重的加权求和,即可实现多比特的乘加运算。
[0149]
在本实施例中dac模块采用电流输出型dac或开关控制型dac配置而成;其中在开关控制型dac如图10所示,具体为:预设多级固定电流,采用开关控制多级固定电流的接入并根据输入模块的输入信号选择开关打开或闭合;
[0150]
根据目标运算功能,配置运算基本块参数、读取待运算数据,选择执行受控开关的断开或闭合,并配合输出移位操作实现目标运算结果数据的输出,并采用模拟数字转换器(analogdigital convertor,adc)将该数据转换为具体结果输出,在本实施例中的目标运
算功能至少包括传统卷积、分组卷积和深度可分离卷积中的一种,其中配置运算基本块参数、读取待运算数据具体包括:
[0151]
根据预设权值配置各运算单元中电流镜单元的输入输出比例;
[0152]
匹配设置存储单元阈值使其用于控制电流镜单元是否输出电流数据;
[0153]
读取待运算数据,转换处理成若干矩阵输入接入各运算基本块输入端。
[0154]
为了进一步的提高计算的准确性和兼容性,在本实施例中对电流镜单元进行了进一步的设计,采用可配置比例的电流镜作为电流镜单元设置,其中可配置比例的电流镜输入侧和输出侧分别包括若干不同参数且相互并联的cmos晶体管,所述输入侧cmos晶体管漏端均通过受控开关接入电流镜单元的输入端,所述输入侧cmos晶体管漏端均通过受控开关接入电流镜单元的输出端,所述参数包括cmos晶体管宽长比,此种设计一方面可以对电流镜的比例进行调节,提高了运算的广度,另一方面由于局部求和线lsl 总和线gsl的配置,会存在电流差异过大的问题,具体地以16个局部求和线lsl,每个局部求和线lsl上有16个存储单元为例,在计算时,传统卷积可能会使用16个局部求和线lsl上的所有存储单元,假设每个存储单元可以提供最大i
max
的电流,此时最大电流为256i
max
;在深度可分离卷积中,可能只会使用1个求和线lsl上的9个存储单元,此时最大电流为9i
max
。二者之间在量程上具有很大的差距,此时若使用相同的adc进行采样,则很难保证二者都能被准确地采样,因此采用可配置比例的电流镜作为电流镜单元设置可以解决这一问题,如图11所示,右框对应cmos电流镜的输出端,左框对应cmos电流镜的输入端,由于单独的输入端配置会产生前述的问题,故此处使用可配置比例的电流镜,使用开关进行选择,如此,在传统卷积时,可以使用16:1的电流镜,则最大电流会将为16i
max
;进行深度可分离卷积时,使用1:1的电流镜,最大电流为9i
max
。此时用量程为16i
max
的adc,可以同时测量二者的计算结果,同时能够保证测量结果的精准度。
[0155]
在本实施例中选择执行受控开关的断开或闭合,并配合输出移位操作实现目标运算结果数据的输出具体包括:
[0156]
若目标运算功能为传统卷积算法,则控制器模块根据传统卷积算法的步骤,发送控制指令至sel控制模块控制闭合所有受控开关,也即将所有运算通道打开,此时即可完成与传统卷积一致的计算。
[0157]
若目标运算功能为分组卷积或深度可分离卷积,则控制器模块按照预设算法,发送控制指令至sel控制模块,在每次计算时只闭合相应运算基本块的受控开关,并配合输出移位操作将每次计算后运算基本块的输出数据按照预定顺序进行同步输出,具体为当进行分组卷积,或者深度可分离卷积时,可以将相应的运算基本块受控开关打开,其他运算基本块受控开关关闭。如此,可以在未使用的运算基本块中仍然存储数据,但对任何输入产生的响应不会影响最终总和线gsl上的测量结果。如图5所示,此时灰底的mos管处于断开的状态,对应局部求和线lsl产生的电流不会汇入总和线gsl中。故该方法可以既将存储利用率维持在100%,又能同时保留一定的计算性能,克服了现有技术的缺点。
[0158]
实施例5
[0159]
本发明提供一种芯片,包含实施例3或4的存内运算装置,所述存内运算装置被设置为按照预设程序执行实施例1或2的存内运算方法。
[0160]
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在
不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
[0161]
此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
再多了解一些

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

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

相关文献