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

用于人工神经网络中的模拟神经存储器的精确编程方法和装置与流程

2022-06-22 20:59:54 来源:中国专利 TAG:

用于人工神经网络中的模拟神经存储器的精确编程方法和装置
1.优先权声明
2.本技术要求于2019年11月11日提交的名称为“precise programming method and apparatus for analog neural memory in a deep learning artificial neural network”的美国临时申请号62/933,809和于2020年1月23日提交的名称为“precise programming method and apparatus for analog neural memory in a deep learning artificial neural network”的美国专利申请号16/751,202的优先权。
技术领域
3.本发明公开了用于将正确的电荷量精确快速地沉积在人工神经网络中的矢量-矩阵乘法(vmm)阵列内的非易失性存储器单元的浮栅上的精确编程算法和装置的多个实施方案。


背景技术:

4.人工神经网络模拟生物神经网络(动物的中枢神经系统,特别是大脑),并且用于估计或近似可取决于大量输入并且通常未知的函数。人工神经网络通常包括互相交换消息的互连“神经元”层。
5.图1示出了人工神经网络,其中圆圈表示神经元的输入或层。连接部(称为突触)用箭头表示,并且具有可以根据经验进行调整的数值权重。这使得人工神经网络适应于输入并且能够学习。通常,人工神经网络包括多个输入的层。通常存在神经元的一个或多个中间层,以及提供神经网络的输出的神经元的输出层。处于每一级别的神经元分别地或共同地根据从突触所接收的数据作出决定。
6.在开发用于高性能信息处理的人工神经网络方面的主要挑战中的一个挑战是缺乏足够的硬件技术。实际上,实际人工神经网络依赖于大量的突触,从而实现神经元之间的高连通性,即非常高的计算并行性。原则上,此类复杂性可通过数字超级计算机或专用图形处理单元集群来实现。然而,相比于生物网络,这些方法除了高成本之外,能量效率也很普通,生物网络主要由于其执行低精度的模拟计算而消耗更少的能量。cmos模拟电路已被用于人工神经网络,但由于给定大量的神经元和突触,大多数cmos实现的突触都过于庞大。
7.申请人先前在美国专利申请号15/594,439(公开为美国专利公布2017/0337466)中公开了一种利用一个或多个非易失性存储器阵列作为突触的人工(模拟)神经网络,该专利申请以引用方式并入本文。非易失性存储器阵列作为模拟神经形态存储器操作。如本文所用的术语“神经形态”是指实现神经系统模型的电路。模拟神经形态存储器包括被配置成接收第一多个输入并从其生成第一多个输出的第一多个突触,以及被配置成接收第一多个输出的第一多个神经元。第一多个突触包括多个存储器单元,其中存储器单元中的每个存储器单元包括:形成于半导体衬底中的间隔开的源极区和漏极区,其中沟道区在源极区和漏极区之间延伸;设置在沟道区的第一部分上方并且与第一部分绝缘的浮栅;以及设置在
沟道区的第二部分上方并且与第二部分绝缘的非浮栅。多个存储器单元中的每个存储器单元被配置成存储与浮栅上的多个电子相对应的权重值。多个存储器单元被配置成将第一多个输入乘以所存储的权重值以生成第一多个输出。以这种方式布置的存储器单元阵列可被称为矢量矩阵乘法(vmm)阵列。
8.必须擦除和编程在模拟神经形态存储器阵列中使用的每个非易失性存储器单元,以在浮栅中保持非常特定且精确的电荷量(即电子数量)。例如,每个浮栅必须保持n个不同值中的一个,其中n是可由每个单元指示的不同权重的数量。n的示例包括16、32、64、128和256。模拟神经形态存储器系统中的一个挑战是能够以不同n值所需的精度和粒度来编程所选单元。
9.需要适于与模拟神经形态存储器中的vmm阵列一起使用的改进的编程系统和方法。


技术实现要素:

10.本发明公开了用于将正确的电荷量精确快速地沉积在模拟神经形态存储器中的矢量-矩阵乘法(vmm)阵列内的非易失性存储器单元的浮栅上的精确编程算法和装置的多个实施方案。因此,可极精确地对所选单元进行编程,以保持n个不同值中的一个值。
附图说明
11.图1为示出现有技术的人工神经网络的示意图。
12.图2示出现有技术分裂栅闪存存储器单元。
13.图3示出另一现有技术的分裂栅闪存存储器单元。
14.图4示出另一现有技术的分裂栅闪存存储器单元。
15.图5示出另一现有技术的分裂栅闪存存储器单元。
16.图6示出另一现有技术的分裂栅闪存存储器单元。
17.图7示出现有技术的堆叠栅闪存存储器单元。
18.图8为示出使用一个或多个非易失性存储器阵列的示例性人工神经网络的不同层级的示意图。
19.图9为示出矢量-矩阵乘法系统的框图。
20.图10为示出使用一个或多个矢量-矩阵乘法系统的示例性人工神经网络的框图。
21.图11示出矢量-矩阵乘法系统的另一实施方案。
22.图12示出矢量-矩阵乘法系统的另一实施方案。
23.图13示出矢量-矩阵乘法系统的另一实施方案。
24.图14示出矢量-矩阵乘法系统的另一实施方案。
25.图15示出矢量-矩阵乘法系统的另一实施方案。
26.图16示出矢量-矩阵乘法系统的另一实施方案。
27.图17示出矢量-矩阵乘法系统的另一实施方案。
28.图18示出矢量-矩阵乘法系统的另一实施方案。
29.图19示出矢量-矩阵乘法系统的另一实施方案。
30.图20示出矢量-矩阵乘法系统的另一实施方案。
31.图21示出矢量-矩阵乘法系统的另一实施方案。
32.图22示出矢量-矩阵乘法系统的另一实施方案。
33.图23示出矢量-矩阵乘法系统的另一实施方案。
34.图24示出矢量-矩阵乘法系统的另一实施方案。
35.图25示出现有技术的长短期存储器系统。
36.图26示出在长短期存储器系统中使用的示例性单元。
37.图27示出图26的示例性单元的一个实施方案。
38.图28示出图26的示例性单元的另一实施方案。
39.图29示出现有技术的栅控递归单元系统。
40.图30示出在栅控递归单元系统中使用的示例性单元。
41.图31示出图30的示例性单元的一个实施方案。
42.图32示出图30的示例性单元的另一实施方案。
43.图33a示出对非易失性存储器单元进行编程的方法的实施方案。
44.图33b示出对非易失性存储器单元进行编程的方法的另一实施方案。
45.图34示出粗略编程方法的一个实施方案。
46.图35示出在非易失性存储器单元的编程中使用的示例性脉冲。
47.图36a示出在非易失性存储器单元的编程中使用的示例性脉冲。
48.图36b示出在非易失性存储器单元的编程中使用的示例性互补递增和递减脉冲。
49.图37示出用于编程非易失性存储器单元的校准算法,该校准算法基于该单元的斜率特征来调整编程参数。
50.图38示出在图37的校准算法中使用的电路。
51.图39示出用于编程非易失性存储器单元的校准算法。
52.图40示出用于编程非易失性存储器单元的校准算法。
53.图41示出在图41的校准算法中使用的电路。
54.图42示出在编程操作期间施加到非易失性存储器单元的控制栅的电压的示例性累进。
55.图43示出在编程操作期间施加到非易失性存储器单元的控制栅的电压的示例性累进。
56.图44示出用于在矢量-乘法矩阵系统内的非易失性存储器单元的编程期间施加编程电压的系统。
57.图45示出矢量-矩阵乘法系统,该矢量-矩阵乘法系统具有包括调制器、模数转换器和求和器的输出模块。
58.图46示出电荷求和器电路。
59.图47示出电流求和器电路。
60.图48示出数字求和器电路。
61.图49a示出用于神经元输出的积分型模数转换器的一个实施方案。
62.图49b示出示出图49a的积分型模数转换器的电压输出随时间变化的曲线图。
63.图49c示出用于神经元输出的积分型模数转换器的另一实施方案。
64.图49d示出示出图49c的积分型模数转换器的电压输出随时间变化的曲线图。
65.图49e示出用于神经元输出的积分型模数转换器的另一实施方案。
66.图49f示出用于神经元输出的积分型模数转换器的另一实施方案。
67.图50a和图50b示出神经元输出的逐次逼近型模数转换器。
68.图51示出σ-δ型模数转换器的一个实施方案。
69.图52a、图52b和图52c示出斜坡型模数转换器的实施方案。
70.图53示出算法型模数转换器的一个实施方案。
71.图54示出逻辑多位单元。
72.图55示出编程图54的逻辑多位单元的方法。
具体实施方式
73.本发明的人工神经网络利用cmos技术和非易失性存储器阵列的组合。
74.非易失性存储器单元
75.数字非易失性存储器是众所周知的。例如,美国专利5,029,130(“130专利”),其以引用方式并入本文,公开了分裂栅非易失性存储器单元的阵列,它是一种闪存存储器单元。此类存储器单元210在图2中示出。每个存储器单元210包括形成于半导体衬底12中的源极区14和漏极区16,其间具有沟道区18。浮栅20形成在沟道区18的第一部分上方并且与其绝缘(并控制其电导率),并且形成在源极区14的一部分上方。字线端子22(其通常被耦接到字线)具有设置在沟道区18的第二部分上方并且与该沟道区的第二部分绝缘(并且控制其电导率)的第一部分,以及向上延伸并且位于浮栅20上方的第二部分。浮栅20和字线端子22通过栅极氧化物与衬底12绝缘。位线端子24耦接到漏极区16。
76.通过将高的正电压置于字线端子22上来对存储器单元210进行擦除(其中电子从浮栅去除),这导致浮栅20上的电子经由fowler-nordheim隧穿从浮栅20到字线端子22隧穿通过中间绝缘体。
77.通过将正的电压置于字线端子22上以及将正的电压置于源极区14上来编程存储器单元210(其中电子被置于浮栅上)。电子电流将从源极区14(源极线端子)流向漏极区16。当电子到达字线端子22和浮栅20之间的间隙时,电子将加速并且变热。由于来自浮栅20的静电引力,一些加热的电子将通过栅极氧化物被注入到浮栅20上。
78.通过将正的读取电压置于漏极区16和字线端子22(其接通沟道区18的在字线端子下方的部分)上来读取存储器单元210。如果浮栅20带正电(即,电子被擦除),则沟道区18的在浮栅20下方的部分也被接通,并且电流将流过沟道区18,该沟道区被感测为擦除状态或“1”状态。如果浮栅20带负电(即,通过电子进行了编程),则沟道区的在浮栅20下方的部分被大部分或完全关断,并且电流将不会(或者有很少的电流)流过沟道区18,该沟道区被感测为编程状态或“0”状态。
79.表1示出可施加到存储器单元110的端子用于执行读取操作、擦除操作和编程操作的典型电压范围:
80.表1:图2的闪存存储器单元210的操作
[0081] wlblsl读取10.5-3v0.1-2v0v读取20.5-3v0-2v2-0.1v
擦除约11-13v0v0v编程1-2v1-3μa9-10v
[0082]“读取1”是其中单元电流在位线上输出的读取模式。“读取2”是其中单元电流在源极线端子上输出的读取模式。
[0083]
图3示出了存储器单元310,其与图2的存储器单元210类似,但增加了控制栅(cg)端子28。控制栅端子28在编程中被偏置在高电压处(例如,10v),在擦除中被偏置在低电压或负电压处(例如,0v/-8v),在读取中被偏置在低电压或中等电压处(例如,0v/2.5v)。其他端子类似于图2那样偏置。
[0084]
图4示出了四栅极存储器单元410,其包括源极区14、漏极区16、在沟道区18的第一部分上方的浮栅20、在沟道区18的第二部分上方的选择栅22(通常耦接到字线wl)、在浮栅20上方的控制栅28、以及在源极区14上方的擦除栅30。这种配置在美国专利6,747,310中有所描述,该专利以引用方式并入本文以用于所有目的。这里,除了浮栅20之外,所有的栅极均为非浮栅,这意味着它们电连接到或能够电连接到电压源。编程由来自沟道区18的将自身注入到浮栅20的加热的电子执行。擦除通过从浮栅20隧穿到擦除栅30的电子来执行。
[0085]
表2示出可施加到存储器单元410的端子用于执行读取操作、擦除操作和编程操作的典型电压范围:
[0086]
表2:图4的闪存存储器单元410的操作
[0087] wl/sgblcgegsl读取10.5-2v0.1-2v0-2.6v0-2.6v0v读取20.5-2v0-2v0-2.6v0-2.6v2-0.1v擦除-0.5v/0v0v0v/-8v8-12v0v编程1v1μa8-11v4.5-9v4.5-5v
[0088]“读取1”是其中单元电流在位线上输出的读取模式。“读取2”是其中单元电流在源极线端子上输出的读取模式。
[0089]
图5示出了存储器单元510,除了不含擦除栅eg端子,存储器单元510与图4的存储器单元410类似。通过将衬底18偏置到高电压并将控制栅cg端子28偏置到低电压或负电压来执行擦除。另选地,通过将字线端子22偏置到正电压并将控制栅端子28偏置到负电压来执行擦除。编程和读取类似于图4的那样。
[0090]
图6示出三栅极存储器单元610,其为另一种类型的闪存存储器单元。存储器单元610与图4的存储器单元410相同,除了存储器单元610没有单独的控制栅端子。除了没有施加控制栅偏置,擦除操作(通过使用擦除栅端子进行擦除)和读取操作类似于图4的操作。在没有控制栅偏置的情况下,编程操作也被完成,并且结果,在编程操作期间必须在源极线端子上施加更高的电压,以补偿控制栅偏置的缺乏。
[0091]
表3示出可施加到存储器单元610的端子用于执行读取操作、擦除操作和编程操作的典型电压范围:
[0092]
表3:图6的闪存存储器单元610的操作
[0093] wl/sgblegsl读取10.5-2.2v0.1-2v0-2.6v0v读取20.5-2.2v0-2v0-2.6v2-0.1v
擦除-0.5v/0v0v11.5v0v编程1v2-3μa4.5v7-9v
[0094]“读取1”是其中单元电流在位线上输出的读取模式。“读取2”是其中单元电流在源极线端子上输出的读取模式。
[0095]
图7示出堆叠栅存储器单元710,其为另一种类型的闪存存储器单元。存储器单元710与图2的存储器单元210类似,不同的是浮栅20在整个沟道区18上方延伸,并且控制栅端子22(其在这里将耦接到字线)在浮栅20上方延伸,由绝缘层(未示出)分开。擦除、编程和读取操作以与先前针对存储器单元210所述类似的方式操作。
[0096]
表4示出可以施加到存储器单元710和衬底12的端子用于执行读取、擦除和编程操作的典型电压范围:
[0097]
表4:图7的闪存存储器单元710的操作
[0098] cgblsl衬底读取10-5v0.1

2v0-2v0v读取20.5-2v0-2v2-0.1v0v擦除-8至-10v/0vfltflt8-10v/15-20v编程8-12v3-5v/0v0v/3-5v0v
[0099]“读取1”是其中单元电流在位线上输出的读取模式。“读取2”是其中单元电流在源极线端子上输出的读取模式。任选地,在包括存储器单元210、310、410、510、610或710的行和列的阵列中,源极线可耦接到一行存储器单元或相邻的两行存储器单元。即,源极线端子可由相邻行的存储器单元共享。
[0100]
为了在人工神经网络中利用包括上述类型的非易失性存储器单元之一的存储器阵列,进行了两个修改。第一,对线路进行配置,使得每个存储器单元可被单独编程、擦除和读取,而不会不利地影响阵列中的其他存储器单元的存储器状态,如下文进一步解释。第二,提供存储器单元的连续(模拟)编程。
[0101]
具体地,阵列中的每个存储器单元的存储器状态(即,浮栅上的电荷)可在独立地并且对其他存储器单元的干扰最小的情况下连续地从完全擦除状态变为完全编程状态。在另一个实施方案,阵列中的每个存储器单元的存储器状态(即,浮栅上的电荷)可在独立地并且对其他存储器单元的干扰最小的情况下连续地从完全编程状态变为完全擦除状态,反之亦然。这意味着单元存储装置是模拟的,或者至少可存储许多离散值(诸如16或64个不同的值)中的一个离散值,这允许对存储器阵列中的所有单元进行非常精确且单独的调谐,并且这使得存储器阵列对于存储和对神经网络的突触权重进行微调调整是理想的。
[0102]
本文所述的方法和装置可应用于其他非易失性存储器技术,诸如但不限于sonos(硅-氧化物-氮化物-氧化物-硅,电荷捕获在氮化物中)、monos(金属-氧化物-氮化物-氧化物-硅,金属电荷捕获在氮化物中)、reram(电阻式ram)、pcm(相变存储器)、mram(磁性ram)、feram(铁电ram)、otp(双层或多层式一次可编程)和ceram(关联电子ram)等。本文所述的方法和装置可应用于用于神经网络的易失性存储器技术,诸如但不限于sram、dram和/或易失性突触单元。
[0103]
采用非易失性存储器单元阵列的神经网络
[0104]
图8概念性地示出本实施方案的使用非易失性存储器阵列的神经网络的非限制性
示例。该示例将非易失性存储器阵列神经网络用于面部识别应用,但任何其他适当的应用也可使用基于非易失性存储器阵列的神经网络来实现。
[0105]
对于该示例,s0为输入层,其为具有5位精度的32x32像素rgb图像(即,三个32x32像素阵列,分别用于每个颜色r、g和b,每个像素为5位精度)。从输入层s0到层c1的突触cb1在一些情况下应用不同的权重集,在其他情况下应用共享权重,并且用3x3像素重叠滤波器(内核)扫描输入图像,将滤波器移位1个像素(或根据模型所指示的多于1个像素)。具体地,将图像的3x3部分中的9个像素的值(即,称为滤波器或内核)提供给突触cb1,其中将这9个输入值乘以适当的权重,并且在对该乘法的输出求和之后,由cb1的第一突触确定并提供单个输出值以用于生成特征映射的其中一层c1的像素。然后将3x3滤波器在输入层s0内向右移位一个像素(即,添加右侧的三个像素的列,并释放左侧的三个像素的列),由此将该新定位的滤波器中的9个像素值提供给突触cb1,其中将它们乘以相同的权重并且由相关联的突触确定第二单个输出值。继续该过程,直到3x3滤波器在输入层s0的整个32x32像素图像上扫描所有三种颜色和所有位(精度值)。然后使用不同组的权重重复该过程以生成c1的不同特征映射,直到计算出层c1的所有特征映射。
[0106]
在层c1处,在本示例中,存在16个特征映射,每个特征映射具有30x30像素。每个像素是从输入和内核的乘积中提取的新特征像素,因此每个特征映射是二维阵列,因此在该示例中,层c1由16层的二维阵列构成(记住本文所引用的层和阵列是逻辑关系,而不必是物理关系,即阵列不必定向于物理二维阵列)。在层c1中的16个特征映射中的每个特征映射均由应用于滤波器扫描的十六个不同组的突触权重中的一组生成。c1特征映射可全部涉及相同图像特征的不同方面,诸如边界识别。例如,第一映射(使用第一权重组生成,针对用于生成该第一映射的所有扫描而共享)可识别圆形边缘,第二映射(使用与第一权重组不同的第二权重组生成)可识别矩形边缘,或某些特征的纵横比,以此类推。
[0107]
在从层c1转到层s1之前,应用激活函数p1(池化),该激活函数将来自每个特征映射中连续的非重叠2x2区域的值进行池化。池化函数的目的是对邻近位置求均值(或者也可使用max函数),以例如减少边缘位置的依赖性,并在进入下一阶段之前减小数据大小。在层s1处,存在16个15x15特征映射(即,十六个每个特征映射15x15像素的不同阵列)。从层s1到层c2的突触cb2利用4x4滤波器扫描s1中的映射,其中滤波器移位1个像素。在层c2处,存在22个12x12特征映射。在从层c2转到层s2之前,应用激活函数p2(池化),该激活函数将来自每个特征映射中连续的非重叠2x2区域的值进行池化。在层s2处,存在22个6x6特征映射。将激活函数(池化)应用于从层s2到层c3的突触cb3,其中层c3中的每个神经元经由cb3的相应突触连接至层s2中的每个映射。在层c3处,存在64个神经元。从层c3到输出层s3的突触cb4完全将c3连接至s3,即层c3中的每个神经元都连接到层s3中的每个神经元。s3处的输出包括10个神经元,其中最高输出神经元确定类。例如,该输出可指示对原始图像的内容的识别或分类。
[0108]
使用非易失性存储器单元的阵列或阵列的一部分来实现每层的突触。
[0109]
图9为可用于该目的的系统的框图。矢量-矩阵乘法(vmm)系统32包括非易失性存储器单元,并且用作一层与下一层之间的突触(诸如图6中的cb1、cb2、cb3和cb4)。具体地,vmm系统32包括vmm阵列33(包括以行和列布置的非易失性存储器单元)、擦除栅和字线栅解码器34、控制栅解码器35、位线解码器36和源极线解码器37,这些解码器对非易失性存储器
单元阵列33的相应输入进行解码。对vmm阵列33的输入可来自擦除栅和字线栅解码器34或来自控制栅解码器35。在该示例中,源极线解码器37还对vmm阵列33的输出进行解码。另选地,位线解码器36可对vmm阵列33的输出进行解码。
[0110]
vmm阵列33用于两个目的。首先,它存储将由vmm系统32使用的权重。其次,vmm阵列33有效地将输入与存储在vmm阵列33中的权重相乘并且每个输出线(源极线或位线)将它们相加以产生输出,该输出将作为下一层的输入或最终层的输入。通过执行乘法和加法函数,vmm阵列33消除了对单独的乘法和加法逻辑电路的需要,并且由于其原位存储器计算也是高功效的。
[0111]
将vmm阵列33的输出提供至差分求和器(诸如求和运算放大器或求和电流镜)38,该差分求和器对vmm阵列33的输出进行求和,以为该卷积创建单个值。差分求和器38被布置用于执行正权重输入和负权重输入两者的求和,以输出单个值。
[0112]
然后将差分求和器38的输出值求和后提供至激活函数电路39,该激活函数电路对输出进行修正。激活函数电路39可提供sigmoid、tanh、relu函数或任何其他非线性函数。激活函数电路39的经修正的输出值成为作为下一层(例如,图8中的层c1)的特征映射的元素,然后被应用于下一个突触以产生下一个特征映射层或最终层。因此,在该示例中,vmm阵列33构成多个突触(其从现有神经元层或从输入层诸如图像数据库接收它们的输入),并且求和器38和激活函数电路39构成多个神经元。
[0113]
图9中对vmm系统32的输入(wlx、egx、cgx以及任选的blx和slx)可为模拟电平、二进制电平、数字脉冲(在这种情况下,可能需要脉冲-模拟转换器pac来将脉冲转换至合适的输入模拟电平)或数字位(在这种情况下,提供dac以将数字位转换至合适的输入模拟电平);输出可为模拟电平、二进制电平、数字脉冲或数字位(在这种情况下,提供输出adc以将输出模拟电平转换成数字位)。
[0114]
图10为示出多层vmm系统32(此处标记为vmm系统32a、32b、32c、32d和32e)的使用的框图。如图10所示,通过数模转换器31将输入(表示为inputx)从数字转换为模拟,并将其提供至输入vmm系统32a。转换的模拟输入可以是电压或电流。第一层的输入d/a转换可通过使用将输入inputx映射到输入vmm系统32a的矩阵乘法器的适当模拟电平的函数或lut(查找表)来完成。输入转换也可由模拟至模拟(a/a)转换器完成,以将外部模拟输入转换成到输入vmm系统32a的映射模拟输入。输入转换也可由数字至数字脉冲(d/p)转换器完成,以将外部数字输入转换成到输入vmm系统32a的映射的一个或多个数字脉冲。
[0115]
由输入vmm系统32a产生的输出被作为到下一个vmm系统(隐藏级别1)32b的输入提供,该输入继而生成作为下一vmm系统(隐藏级别2)32c的输入而提供的输出,以此类推。vmm系统32的各层用作卷积神经网络(cnn)的突触和神经元的不同层。每个vmm系统32a、32b、32c、32d和32e可以是包括相应非易失性存储器阵列的独立物理系统、或者多个vmm系统可利用相同物理非易失性存储器阵列的不同部分、或者多个vmm系统可利用相同物理非易失性存储器阵列的重叠部分。每个vmm系统32a、32b、32c、32d和32e也可针对其阵列或神经元的不同部分进行时分复用。图10所示的示例包含五个层(32a,32b,32c,32d,32e):一个输入层(32a)、两个隐藏层(32b,32c)和两个完全连接的层(32d,32e)。本领域的普通技术人员将会知道,这仅仅是示例性的,并且相反,系统可包括两个以上的隐藏层和两个以上的完全连接的层。
[0116]
vmm阵列
[0117]
图11示出神经元vmm阵列1100,该神经元vmm阵列特别适用于图3所示的存储器单元310,并且用作输入层与下一层之间的神经元的突触和部件。vmm阵列1100包括非易失性存储器单元的存储器阵列1101和非易失性参考存储器单元的参考阵列1102(在阵列的顶部)。另选地,可将另一个参考阵列置于底部。
[0118]
在vmm阵列1100中,控制栅线(诸如控制栅线1103)在竖直方向上延伸(因此参考阵列1102在行方向上与控制栅线1103正交),并且擦除栅线(诸如擦除栅线1104)在水平方向上延伸。此处,vmm阵列1100的输入设置在控制栅线(cg0,cg1,cg2,cg3)上,并且vmm阵列1100的输出出现在源极线(sl0,sl1)上。在一个实施方案中,仅使用偶数行,并且在另一个实施方案中,仅使用奇数行。置于各源极线(分别为sl0、sl1)上的电流执行来自连接到该特定源极线的存储器单元的所有电流的求和函数。
[0119]
如本文针对神经网络所述,vmm阵列1100的非易失性存储器单元(即vmm阵列1100的闪存存储器)优选地被配置成在亚阈值区域中操作。
[0120]
在弱反转中偏置本文所述的非易失性参考存储器单元和非易失性存储器单元:
[0121]
ids=io*e
(vg-vth)/nvt
=w*io*e
(vg)/nvt

[0122]
其中w=e
(-vth)/nvt
[0123]
其中ids为漏极到源极电流;vg为存储器单元上的栅极电压;vth是存储器单元的阈值电压;vt是热电压=k*t/q,其中k是玻尔兹曼常数,t是以开尔文为单位的温度,并且q是电子电荷;n是斜率因子=1 (cdep/cox),其中cdep=耗尽层的电容,并且cox是栅极氧化物层的电容;io是等于阈值电压的栅极电压下的存储器单元电流,io与(wt/l)*u*cox*(n-1)*vt2成比例,其中u是载流子迁移率,并且wt和l分别是存储器单元的宽度和长度。
[0124]
对于使用存储器单元(诸如参考存储器单元或外围存储器单元)或晶体管将输入电流ids转换为输入电压vg的i到v对数转换器:
[0125]
vg=n*vt*log[ids/wp*io]
[0126]
此处,wp为参考存储器单元或外围存储器单元的w。
[0127]
对于使用存储器单元(诸如参考存储器单元或外围存储器单元)或晶体管将输入电流ids转换为输入电压vg的i到v对数转换器:
[0128]
vg=n*vt*log[ids/wp*io]
[0129]
此处,wp为参考存储器单元或外围存储器单元的w。
[0130]
对于用作矢量矩阵乘法器vmm阵列的存储器阵列,输出电流为:
[0131]
iout=wa*io*e
(vg)/nvt
,即
[0132]
iout=(wa/wp)*iin=w*iin
[0133]
w=e
(vthp-vtha)/nvt
[0134]
iin=wp*io*e
(vg)/nvt
[0135]
此处,wa=存储器阵列中的每个存储器单元的w。
[0136]
字线或控制栅可用作输入电压的存储器单元的输入。
[0137]
另选地,本文所述的vmm阵列的非易失性存储器单元可被配置成在线性区域中操作:
[0138]
ids=β*(vgs-vth)*vds;β=u*cox*wt/l,
[0139]
wα(vgs-vth),
[0140]
意指线性区域中的权重w与(vgs-vth)成比例
[0141]
字线或控制栅或位线或源极线可以用作在线性区域中操作的存储器单元的输入。位线或源极线可用作存储器单元的输出。
[0142]
对于i到v线性转换器,在线性区域工作的存储器单元(例如参考存储器单元或外围存储器单元)或晶体管或电阻器可以用来将输入/输出电流线性转换成输入/输出电压。
[0143]
另选地,本文所述的vmm阵列的存储器单元可被配置成在饱和区域中操作:
[0144]
ids=1/2*β*(vgs-vth)2;β=u*cox*wt/l
[0145]
wα(vgs-vth)2,意指权重w与(vgs-vth)2成比例
[0146]
字线、控制栅或擦除栅可以用作在饱和区域中操作的存储器单元的输入。位线或源极线可用作输出神经元的输出。
[0147]
另选地,本文所述的vmm阵列的存储器单元可用于所有区域或其组合(亚阈值、线性或饱和区域)。
[0148]
美国专利申请第15/826,345号中描述了图9的vmm阵列33的其他实施方案,该申请以引用方式并入本文。如本文所述,源极线或位线可以用作神经元输出(电流求和输出)。
[0149]
图12示出神经元vmm阵列1200,该神经元vmm阵列特别适用于图2所示的存储器单元210,并且用作输入层与下一层之间的突触。vmm阵列1200包括非易失性存储器单元的存储器阵列1203、第一非易失性参考存储器单元的参考阵列1201和第二非易失性参考存储器单元的参考阵列1202。沿阵列的列方向布置的参考阵列1201和1202用于将流入端子blr0、blr1、blr2和blr3的电流输入转换为电压输入wl0、wl1、wl2和wl3。实际上,第一非易失性参考存储器单元和第二非易失性参考存储器单元通过多路复用器1214(仅部分示出)二极管式连接,其中电流输入流入其中。参考单元被调谐(例如,编程)为目标参考电平。目标参考电平由参考微阵列矩阵(未示出)提供。
[0150]
存储器阵列1203用于两个目的。首先,它将vmm阵列1200将使用的权重存储在其相应的存储器单元上。第二,存储器阵列1203有效地将输入(即,在端子blr0、blr1、blr2和blr3中提供的电流输入,参考阵列1201和1202将它们转换成输入电压以提供给字线wl0、wl1、wl2和wl3)乘以存储在存储器阵列1203中的权重,然后将所有结果(存储器单元电流)相加以在相应的位线(bl0-bln)上产生输出,该输出将是下一层的输入或最终层的输入。通过执行乘法和加法函数,存储器阵列1203消除了对单独的乘法逻辑电路和加法逻辑电路的需要,并且也是高功效的。这里,电压输入在字线(wl0、wl1、wl2和wl3)上提供,并且输出在读取(推断)操作期间出现在相应位线(bl0-bln)上。置于位线bl0-bln中的每个位线上的电流执行来自连接到该特定位线的所有非易失性存储器单元的电流的求和函数。
[0151]
表5示出用于vmm阵列1200的工作电压。表中的列指示置于用于所选单元的字线、用于未选单元的字线、用于所选单元的位线、用于未选单元的位线、用于所选单元的源极线和用于未选单元的源极线上的电压,其中flt指示浮动,即未施加电压。行指示读取、擦除和编程操作。
[0152]
表5:图12的vmm阵列1200的操作
[0153] wlwl-未选blbl-未选slsl-未选读取0.5-3.5v-0.5v/0v0.1-2v(ineuron)0.6v-2v/flt0v0v
擦除约5-13v0v0v0v0v0v编程1-2v-0.5v/0v0.1-3uavinh约2.5v4-10v0-1v/flt
[0154]
图13示出神经元vmm阵列1300,该神经元vmm阵列特别适用于图2所示的存储器单元210,并且用作输入层与下一层之间的神经元的突触和部件。vmm阵列1300包括非易失性存储器单元的存储器阵列1303、第一非易失性参考存储器单元的参考阵列1301和第二非易失性参考存储器单元的参考阵列1302。参考阵列1301和1302在vmm阵列1300的行方向上延伸。vmm阵列与vmm 1000类似,不同的是在vmm阵列1300中,字线在竖直方向上延伸。这里,输入设置在字线(wla0、wlb0、wla1、wlb2、wla2、wlb2、wla3、wlb3)上,并且输出在读取操作期间出现在源极线(sl0、sl1)上。置于各源极线上的电流执行来自连接到该特定源极线的存储器单元的所有电流的求和函数。
[0155]
表6示出用于vmm阵列1300的工作电压。表中的列指示置于用于所选单元的字线、用于未选单元的字线、用于所选单元的位线、用于未选单元的位线、用于所选单元的源极线和用于未选单元的源极线上的电压。行指示读取、擦除和编程操作。
[0156]
表6:图13的vmm阵列1300的操作
[0157] wlwl-未选blbl-未选slsl-未选读取0.5-3.5v-0.5v/0v0.1-2v0.1v-2v/flt约0.3-1v(ineuron)0v擦除约5-13v0v0v0v0vsl-禁止(约4-8v)编程1-2v-0.5v/0v0.1-3uavinh约2.5v4-10v0-1v/flt
[0158]
图14示出神经元vmm阵列1400,该神经元vmm阵列特别适用于图3所示的存储器单元310,并且用作输入层与下一层之间的神经元的突触和部件。vmm阵列1400包括非易失性存储器单元的存储器阵列1403、第一非易失性参考存储器单元的参考阵列1401和第二非易失性参考存储器单元的参考阵列1402。参考阵列1401和1402用于将流入端子blr0、blr1、blr2和blr3的中的电流输入转换为电压输入cg0、cg1、cg2和cg3。实际上,第一非易失性参考存储器单元和第二非易失性参考存储器单元通过多路复用器1412(仅部分示出)二极管式连接,其中电流输入通过blr0、blr1、blr2和blr3流入其中。多路复用器1412各自包括相应的多路复用器1405和共源共栅晶体管1404,以确保在读取操作期间第一非易失性参考存储器单元和第二非易失性参考存储器单元中的每一者的位线(诸如blr0)上的恒定电压。将参考单元调谐至目标参考电平。
[0159]
存储器阵列1403用于两个目的。首先,它存储将由vmm阵列1400使用的权重。第二,存储器阵列1403有效地将输入(提供到端子blr0、blr1、blr2和blr3的电流输入,参考阵列1401和1402将这些电流输入转换成输入电压以提供给控制栅cg0、cg1、cg2和cg3)乘以存储在存储器阵列中的权重,然后将所有结果(单元电流)相加以产生输出,该输出出现在bl0-bln并且将是下一层的输入或最终层的输入。通过执行乘法和加法函数,存储器阵列消除了对单独的乘法和加法逻辑电路的需要,并且也是高功效的。这里,输入提供在控制栅线(cg0、cg1、cg2和cg3)上,输出在读取操作期间出现在位线(bl0

bln)上。置于各位线上的电流执行来自连接到该特定位线的存储器单元的所有电流的求和函数。
[0160]
vmm阵列1400为存储器阵列1403中的非易失性存储器单元实现单向调谐。也就是说,每个非易失性存储器单元被擦除,然后被部分编程,直到达到浮栅上的所需电荷。这可例如使用下文所述的精确编程技术来执行。如果在浮栅上放置过多电荷(使得错误的值存
储在单元中),则必须擦除单元,并且部分编程操作的序列必须重新开始。如图所示,共享同一擦除栅(诸如eg0或eg1)的两行需要一起擦除(其被称为页面擦除),并且此后,每个单元被部分编程,直到达到浮栅上的所需电荷。
[0161]
表7示出用于vmm阵列1400的工作电压。表中的列指示置于用于所选单元的字线、用于未选单元的字线、用于所选单元的位线、用于未选单元的位线、用于所选单元的控制栅、用于与所选单元相同扇区中的未选单元的控制栅、用于与所选单元不同扇区中的未选单元的控制栅、用于所选单元的擦除栅、用于未选单元的擦除栅、用于所选单元的源极线、用于未选单元的源极线上的电压。行指示读取、擦除和编程操作。
[0162]
表7:图14的vmm阵列1400的操作
[0163][0164]
图15示出神经元vmm阵列1500,该神经元vmm阵列特别适用于图3所示的存储器单元310,并且用作输入层与下一层之间的神经元的突触和部件。vmm阵列1500包括非易失性存储器单元的存储器阵列1503、第一非易失性参考存储器单元的参考阵列1501和第二非易失性参考存储器单元的参考阵列1502。eg线egr0、eg0、eg1和egr1竖直延伸,而cg线cg0、cg1、cg2和cg3以及sl线wl0、wl1、wl2和wl3水平延伸。vmm阵列1500与vmm阵列1400类似,不同的是vmm阵列1500实现双向调谐,其中每个单独的单元可以根据需要被完全擦除、部分编程和部分擦除,以由于使用单独的eg线而在浮栅上达到期望的电荷量。如图所示,参考阵列1501和1502将端子blr0、blr1、blr2和blr3中的输入电流转换成要在行方向上施加到存储器单元的控制栅电压cg0、cg1、cg2和cg3(通过经由多路复用器1514的二极管连接的参考单元的动作)。电流输出(神经元)在位线bl0-bln中,其中每个位线对来自连接到该特定位线的非易失性存储器单元的所有电流求和。
[0165]
表8示出用于vmm阵列1500的工作电压。表中的列指示置于用于所选单元的字线、用于未选单元的字线、用于所选单元的位线、用于未选单元的位线、用于所选单元的控制栅、用于与所选单元相同扇区中的未选单元的控制栅、用于与所选单元不同扇区中的未选单元的控制栅、用于所选单元的擦除栅、用于未选单元的擦除栅、用于所选单元的源极线、用于未选单元的源极线上的电压。行指示读取、擦除和编程操作。
[0166]
表8:图15的vmm阵列1500的操作
[0167][0168]
图16示出神经元vmm阵列1600,该神经元vmm阵列特别适用于图2所示的存储器单元210,并且用作输入层与下一层之间的神经元的突触和部件。在vmm阵列1600中,输入input0…
,inputn分别在位线bl0,...bln上被接收,并且输出output1、output2、output3和output4分别在源极线sl0、sl1、sl2和sl3上生成。
[0169]
图17示出神经元vmm阵列1700,该神经元vmm阵列特别适用于图2所示的存储器单元210,并且用作输入层与下一层之间的神经元的突触和部件。在该示例中,输入input0、input1、input2和input3分别在源极线sl0、sl1、sl2和sl3上被接收,并且输出output0,...outputn在位线bl0,

,bln上生成。
[0170]
图18示出神经元vmm阵列1800,该神经元vmm阵列特别适用于图2所示的存储器单元210,并且用作输入层与下一层之间的神经元的突触和部件。在该示例中,输入input0,

,inputm分别在字线wl0,

,wlm上被接收,并且输出output0,..outputn在位线bl0,

,bln上生成。
[0171]
图19示出神经元vmm阵列1900,该神经元vmm阵列特别适用于图3所示的存储器单元310,并且用作输入层与下一层之间的神经元的突触和部件。在该示例中,输入input0,

,inputm分别在字线wl0,

,wlm上被接收,并且输出output0,..outputn在位线bl0,

,bln上生成。
[0172]
图20示出神经元vmm阵列2000,该神经元vmm阵列特别适用于图4所示的存储器单元410,并且用作输入层与下一层之间的神经元的突触和部件。在该示例中,输入input0,

,inputn分别在竖直控制栅线cg0,

,cgn上被接收,并且输出output1和output2在源极线sl0和sl1上生成。
[0173]
图21示出神经元vmm阵列2100,该神经元vmm阵列特别适用于图4所示的存储器单元410,并且用作输入层与下一层之间的神经元的突触和部件。在该示例中,输入input0至inputn分别在位线控制栅极2901-1、2901-2至2901-(n-1)和2901-n的栅极上被接收,这些栅极分别耦接到位线bl0至bln。示例性输出output1和output2在源极线sl0和sl1上生成。
[0174]
图22示出神经元vmm阵列2200,该神经元vmm阵列特别适用于图3所示的存储器单元310、图5所示的存储器单元510和图7所示的存储器单元710,并且用作输入层与下一层之间的神经元的突触和部件。在该示例中,输入input0,

,inputm在字线wl0,

,wlm上被接收,并且输出output0,

,outputn分别在位线bl0,

,bln上生成。
[0175]
图23示出神经元vmm阵列2300,该神经元vmm阵列特别适用于图3所示的存储器单元310、图5所示的存储器单元510和图7所示的存储器单元710,并且用作输入层与下一层之间的神经元的突触和部件。在该示例中,输入input0至inputm在控制栅线cg0至cgm上被接收。输出output0,

,outputn分别在竖直源极线sl0,

,sln上生成,其中每个源极线sli耦接
到列i中的所有存储器单元的源极线。
[0176]
图24示出神经元vmm阵列2400,该神经元vmm阵列特别适用于图3所示的存储器单元310、图5所示的存储器单元510和图7所示的存储器单元710,并且用作输入层与下一层之间的神经元的突触和部件。在该示例中,输入input0至inputm在控制栅线cg0至cgm上被接收。输出output0,

,outputn分别在竖直位线bl0,

,bln上生成,其中每个位线bli耦接到列i中的所有存储器单元的位线。
[0177]
长短期存储器
[0178]
现有技术包括被称为长短期存储器(lstm)的概念。lstm通常用于人工神经网络。lstm允许人工神经网络在预定的任意时间间隔内记住信息并在后续操作中使用该信息。常规的lstm包括单元、输入栅、输出栅和忘记栅。三个栅调控进出单元的信息流以及信息在lstm中被记住的时间间隔。vmm在lstm中特别有用。
[0179]
图25示出了示例性lstm 2500。该示例中的lstm 2500包括单元2501、2502、2503和2504。单元2501接收输入矢量x0并生成输出矢量h0和单元状态矢量c0。单元2502接收输入矢量x1、来自单元2501的输出矢量(隐藏状态)h0和来自单元2501的单元状态c0,并生成输出矢量h1和单元状态矢量c1。单元2503接收输入矢量x2、来自单元2502的输出矢量(隐藏状态)h1和来自单元2502的单元状态c1,并生成输出矢量h2和单元状态矢量c2。单元2504接收输入矢量x3、来自单元2503的输出矢量(隐藏状态)h2和来自单元2503的单元状态c2,并生成输出矢量h3。可以使用另外的单元,并且具有四个单元的lstm仅仅是示例。
[0180]
图26示出可用于图25中的单元2501、2502、2503和2504的lstm单元2600的示例性具体实施。lstm单元2600接收输入矢量x(t)、来自前一单元的单元状态矢量c(t-1)和来自前一单元的输出矢量h(t-1),并生成单元状态矢量c(t)和输出矢量h(t)。
[0181]
lstm单元2600包括sigmoid函数设备2601、2602和2603,每个sigmoid函数设备应用0至1之间的数字来控制允许输入矢量中的每个分量通过到输出矢量的数量。lstm单元2600还包括用于将双曲线正切函数应用于输入矢量的tanh设备2604和2605、用于将两个矢量相乘在一起的乘法器设备2606、2607和2608以及用于将两个矢量相加在一起的加法设备2609。输出矢量h(t)可被提供给系统中的下一个lstm单元,或者其可被访问用于其他目的。
[0182]
图27示出lstm单元2700,该lstm单元为lstm单元2600的具体实施的示例。为了方便读者,lstm单元2700中使用与lstm单元2600相同的编号。sigmoid函数设备2601、2602和2603以及tanh设备2604各自包括多个vmm阵列2701和激活电路区块2702。因此,可以看出,vmm阵列在某些神经网络系统中使用的lstm单元中特别有用。
[0183]
lstm单元2700的另选形式(以及lstm单元2600的具体实施的另一示例)在图28中示出。在图28中,sigmoid函数设备2601、2602和2603以及tanh设备2604以时分复用方式共享相同的物理硬件(vmm阵列2801和激活函数块2802)。lstm单元2800还包括将两个矢量相乘在一起的乘法器设备2803,将两个矢量相加在一起的加法设备2808,tanh设备2605(其包括激活电路区块2802),当从sigmoid函数块2802输出值i(t)时存储值i(t)的寄存器2807,当值f(t)*c(t-1)通过多路复用器2810从乘法器设备2803输出时存储该值的寄存器2804,当值i(t)*u(t)通过多路复用器2810从乘法器设备2803输出时存储该值的寄存器2805,当值o(t)*c~(t)通过多路复用器2810从乘法器设备2803输出时存储该值的寄存器2806,和多路复用器2809。
[0184]
lstm单元2700包含多组vmm阵列2701和相应的激活函数块2702,而lstm单元2800仅包含一组vmm阵列2801和激活函数块2802,它们用于表示lstm单元2800的实施方案中的多个层。lstm单元2800将需要比lstm 2700更少的空间,因为与lstm单元2700相比,lstm单元2800只需要其1/4的空间用于vmm和激活函数块。
[0185]
还可理解,lstm单元通常将包括多个vmm阵列,每个vmm阵列需要由vmm阵列之外的某些电路区块(诸如求和器和激活电路区块以及高电压生成区块)提供的功能。为每个vmm阵列提供单独的电路区块将需要半导体设备内的大量空间,并且将在一定程度上是低效的。因此,下文所述的实施方案试图最小化vmm阵列本身之外所需的电路。
[0186]
栅控递归单元
[0187]
模拟vmm具体实施可用于gru(栅控递归单元)。gru是递归人工神经网络中的栅控机构。gru类似于lstm,不同的是gru单元一般包含比lstm单元更少的部件。
[0188]
图29示出了示例性gru 2900。该示例中的gru 2900包括单元2901、2902、2903和2904。单元2901接收输入矢量x0并生成输出矢量h0。单元2902接收输入矢量x1、来自单元2901的输出矢量h0并生成输出矢量h1。单元2903接收输入矢量x2和来自单元2902的输出矢量(隐藏状态)h1并生成输出矢量h2。单元2904接收输入矢量x3和来自单元2903的输出矢量(隐藏状态)h2并生成输出矢量h3。可以使用另外的单元,并且具有四个单元的gru仅仅是示例。
[0189]
图30示出可用于图29的单元2901、2902、2903和2904的gru单元3000的示例性具体实施。gru单元3000接收输入矢量x(t)和来自前一个gru单元的输出矢量h(t-1),并生成输出矢量h(t)。gru单元3000包括sigmoid函数设备3001和3002,这些设备中的每个设备将介于0和1之间的数应用于来自输出矢量h(t-1)和输入矢量x(t)的分量。gru单元3000还包括用于将双曲线正切函数应用于输入矢量的tanh设备3003、用于将两个矢量相乘在一起的多个乘法器设备3004、3005和3006、用于将两个矢量相加在一起的加法设备3007,以及用于从1中减去输入以生成输出的互补设备3008。
[0190]
图31示出gru单元3100,该gru单元为gru单元3000的具体实施的示例。为了方便读者,gru单元3100中使用与gru单元3000相同的编号。如图31所示,sigmoid函数设备3001和3002以及tanh设备3003各自包括多个vmm阵列3101和激活函数块3102。因此,可以看出,vmm阵列在某些神经网络系统中使用的gru单元中特别有用。
[0191]
gru单元3100的另选形式(以及gru单元3000的具体实施的另一示例)在图32中示出。在图32中,gru单元3200利用vmm阵列3201和激活函数块3202,该激活函数块在被配置成sigmoid函数时,应用0与1之间的数字来控制允许输入矢量中的每个分量有多少通过到输出矢量。在图32中,sigmoid函数设备3001和3002以及tanh设备3003以时分复用方式共享相同的物理硬件(vmm阵列3201和激活函数块3202)。gru单元3200还包括将两个矢量相乘在一起的乘法器设备3203,将两个矢量相加在一起的加法设备3205,从1减去输入以生成输出的互补设备3209,多路复用器3204,当值h(t-1)*r(t)通过多路复用器3204从乘法器设备3203输出时保持该值的寄存器3206,当值h(t-1)*z(t)通过多路复用器3204从乘法器设备3203输出时保持该值的寄存器3207,和当值h^(t)*(1-z(t))通过多路复用器3204从乘法器设备3203输出时保持该值的寄存器3208。
[0192]
gru单元3100包含多组vmm阵列3101和激活函数块3102,而gru单元3200仅包含一
组vmm阵列3201和激活函数块3202,它们用于表示gru单元3200的实施方案中的多个层。gru单元3200将需要比gru单元3100更少的空间,因为与gru单元3100相比,gru单元3200只需要其1/3的空间用于vmm和激活函数块。
[0193]
还可以理解的是,利用gru的系统通常将包括多个vmm阵列,每个vmm阵列需要由vmm阵列之外的某些电路区块(诸如求和器和激活电路区块以及高电压生成区块)提供的功能。为每个vmm阵列提供单独的电路区块将需要半导体设备内的大量空间,并且将在一定程度上是低效的。因此,下文所述的实施方案试图最小化vmm阵列本身之外所需的电路。
[0194]
vmm阵列的输入可为模拟电平、二进制电平、定时脉冲、或数字位,并且输出可为模拟电平、二进制电平、定时脉冲或数字位(在这种情况下,需要输出adc来将输出模拟电平电流或电压转换成数字位)。
[0195]
对于vmm阵列中的每个存储器单元,每个权重w可由单个存储器单元或由差分单元或由两个混合存储器单元(2个或更多个单元的平均值)来实现。在差分单元的情况下,需要两个存储器单元来实现权重w作为差分权重(w=w

w-)。在两个混合存储器单元中,需要两个存储器单元来实现权重w作为两个单元的平均值。
[0196]
用于对vmm中的单元进行精确编程的实施方案
[0197]
现在将描述用于通过递增或递减施加到存储器单元的不同端子的编程电压来精确地编程vmm内的存储器单元的实施方案。
[0198]
图33a示出编程方法3300。首先,该方法开始(步骤3301),这通常响应于接收到编程(调谐)命令而发生。接下来,批量编程操作将所有单元编程到“0”状态(步骤3302)。然后,软擦除操作将所有单元擦除到中间弱擦除电平,使得每个单元在读取操作期间将消耗例如大约3μa-5μa的电流(步骤3303)。这与深度擦除最大电平形成对比,在深度擦除最大电平中每个单元在读取操作期间将消耗大约约20μa-30μa的电流。例如,通过施加递增擦除电压脉冲直至达到中间单元电流来完成软擦除。执行递增擦除电压脉冲以限制硬擦除(即,最大擦除电平)对存储器单元造成的劣化。然后,对所有未选择的单元执行硬编程到非常深的编程状态,以将电子添加到单元的浮栅(步骤3304),以确保那些单元真正“关断”,这意味着那些单元将在读取操作期间消耗可忽略不计的电流量,例如未使用的存储器单元。硬编程例如以更高的递增编程电压脉冲和/或更长的编程时间来执行。
[0199]
然后对所选择的单元执行粗略编程方法(以使单元更接近目标,例如,目标的2倍-100倍)(步骤3305),之后对所选择的单元执行精密编程方法(步骤3306)以对每个所选择的单元所需的精确值进行编程。
[0200]
图33b示出与编程方法3300类似的另一种编程方法3310。然而,并非如图33a的步骤3302中那样将所有单元编程到“0”状态的编程操作,而是在该方法开始(步骤3301)之后,使用软擦除操作将所有单元擦除到“1”状态(步骤3312)。然后使用软编程操作(步骤3313)将所有单元编程到中间状态,使得每个单元在读取操作期间将消耗大约3ua-5ua的电流。之后,如图33a所示执行粗略编程方法3305和精确编程方法3306。图33b的实施方案的变型将完全移除软编程操作(步骤3313)。可使用多个粗略编程方法来加速编程,诸如通过在执行精确(精细)编程步骤3306之前瞄准多个逐渐变小的粗略目标。精确编程方法3306例如以精细(精确)增量编程电压脉冲或恒定编程定时脉冲来完成。
[0201]
存储器单元的不同端子可用于粗略编程方法3305和精确编程方法3306。也就是
说,在粗略编程方法3305期间,施加到存储器单元的端子中的一个端子(其可被称为粗略编程端子)的电压将改变,直至浮栅20内实现期望的电压电平,并且在精确编程方法3306期间,施加到存储器单元的端子中的一个端子(其可被称为精确编程端子)的电压将改变,直至实现期望的电平。可用作粗略编程端子和精确编程端子的端子的各种组合示于表9中:
[0202]
表9:用于粗略编程方法和精确编程方法的存储器单元端子
[0203][0204]
对于粗略编程步骤和精确编程步骤,端子的其他组合是可能的。
[0205]
图34示出了粗略编程方法3305的第一实施方案,其为搜索和执行方法3400。首先,执行查找表搜索或函数(i-v曲线),以基于旨在存储在所选择的单元中的值来确定该所选择的单元的粗略目标电流值(i
ct
)(步骤3401)。例如,该表由硅特性或晶圆测试校准创建。所选择的单元可被编程为存储n个可能值(例如,128、64、32等)中的一个可能值。n个值中的每个值对应于在读取操作期间由所选择的单元消耗的不同期望电流值(id)。在一个实施方案中,查找表可包含m个可能的电流值,以在搜索和执行方法3400期间用作所选单元的粗略目标电流值i
ct
,其中m为小于n的整数。例如,如果n为8,则m可以为4,这意味着存在所选择的单元可存储的8个可能值,并且4个粗略目标电流值中的一者将被选择用作搜索和执行方法3400的粗略目标。也就是说,搜索和执行方法3400(其也是粗略编程方法3305的一个实施方案)旨在将所选择的单元快速编程为在一定程度上接近期望值(id)的值(i
ct
),然后精确编程方法3306旨在将所选择的单元更精确地编程为达到或极其接近期望值(id)。
[0206]
对于n=8和m=4的简单示例,单元值、期望电流值和粗略目标电流值的示例示于表10和表11中:
[0207]
表10:n=8时的n个期望电流值的示例
[0208]
要存储在所选择单元中的值期望电流值(id)0000.5na0011na0101.5na0112na1002.5na1013na1103.5na1114na
[0209]
表11:m=4时的m个目标电流值的示例
[0210]
粗略目标电流值(i
ct
)相关联的单元值4na i
ctoffset1
000,0018na i
ctoffset2
010,01112na i
ctoffset3
100,10116na i
ctoffset4
110,111
[0211]
偏移值i
ctoffsetx
用于防止在粗调期间超过期望电流值。
[0212]
在步骤3402中,一旦选定粗略目标电流值i
ct
,则通过根据上表9中列出的序列中的一个序列将初始电压v0施加到所选择单元的粗略编程端子来对所选择单元进行编程。(初始电压v0的值和粗略编程端子任选地可从存储v0与粗略目标电流值i
ct
的电压查找表中确定。):
[0213]
表12:施加到粗略编程端子的初始电压v0[0214]
编程序列名称粗略编程端子施加到粗略编程端子的初始电压vocg-cg控制栅28(cg)3-6vcg-eg控制栅28(cg)3-6veg-eg擦除栅30(eg)0-3vcg-sl控制栅28(cg)3-6vsl-cg源极线14(sl)3-4vsl-eg源极线14(sl)3-4v
[0215]
接下来,在步骤3403中,通过将电压vi=v
i-1
v
increment
施加到粗略编程端子对所选择的单元进行编程,其中i从1开始并在每次重复该步骤时递增,并且其中v
increment
是粗略电压的将导致适合于所需变化粒度的编程程度的增量。因此,执行第一时间步骤3403,i=1,并且v1将为v0 v
increment
。然后验证操作发生(步骤3404),其中对所选择的单元执行读取操作,并且测量通过所选择的单元消耗的电流(i
cell
)。如果i
cell
小于或等于i
ct
(此处为第一阈值),则搜索和执行方法3400完成,并且可开始精确编程方法3306。如果i
cell
不小于或等于i
ct
,则重复步骤3403,并且i递增。
[0216]
因此,在粗略编程方法3305结束并且精确编程方法3306开始的时刻,电压vi将是施加到粗略编程端子以对所选择的单元进行编程的最终电压,并且所选择的单元将存储与粗略目标电流值i
ct
相关联的值,具体地小于或等于i
ct
。精确编程方法3306的目的是将所选择的单元编程到在读取操作期间其消耗电流id(加上或减去可接受的偏差幅度,诸如 /-30%或更小)的程度,该电流是与旨在存储在所选择的单元中的值相关联的期望电流值。
[0217]
图35示出了可在粗略编程方法3305期间根据表9施加到所选择存储器单元的粗略编程端子和/或在精确编程方法3306期间施加到所选择存储器单元的精确编程端子的不同电压累进的示例。
[0218]
在第一种方法下,累进地向粗略编程端子和/或精确编程端子施加递增的电压以进一步编程所选择的存储器单元。起点为vi,其为在粗略编程方法3305期间施加的最终电压。将增量v
p1
添加到vi,然后使用电压vi v
p1
对所选择单元(由从累进3501中的左侧起的第二脉冲所指示)进行编程。v
p1
是小于v
increment
(在粗略编程方法3305期间使用的电压增量)的增量。在将每个编程电压施加到编程端子之后,执行验证步骤(类似于步骤3404),其中确定icell
是否小于或等于i
pt1
(其为第一精确目标电流值并且此处为第二阈值),其中i
pt1
=id i
pt1offset
,其中i
pt1offset
是为防止编程过冲而添加的偏移值。如果不是,则将另一个增量v
p1
添加到先前施加的编程电压,并重复该过程。重复,直至i
cell
小于或等于i
pt1
的时刻,此时编程序列的该部分停止。任选地,如果i
pt1
等于id或以足够的允许精度近似等于id,则所选择的存储器单元已被成功编程。
[0219]
如果i
pt1
不够接近id,则可进行较小粒度的进一步编程。这里,现使用累进3502。累进3502的起点是用于累进3501下的编程的最终电压。将增量v
p2
(其小于v
p1
)添加到该电压,并且将组合电压施加到精确编程端子以对所选择的存储器单元进行编程。在施加每个编程电压之后,执行验证步骤(类似于步骤3404),其中确定i
cell
是否小于或等于i
pt2
(其为第二精确目标电流值并且此处为第三阈值),其中i
pt2
=id i
pt2offset
,其中i
pt2offset
是为防止编程过冲而添加的偏移值。如果不是,则将另一个增量v
p2
添加到先前施加的编程电压,并重复该过程。重复,直至i
cell
小于或等于i
pt2
的时刻,此时编程序列的该部分停止。这里,假设i
pt2
等于id或足够接近id,以便编程可停止,因为目标值已以足够的允许精度实现。本领域的普通技术人员可以理解,可通过使用越来越小的编程增量来施加附加的累进。例如,在图36a中,施加三个累进(3601、3602和3603)而不是仅两个累进。
[0220]
在累进3503中示出了第二种方法。此处,并非增加在所选择的存储器单元的编程期间施加的电压,而是在周期递增的持续时间内施加相同的电压(诸如vi或vi v
p1
v
p1
或vi v
p2
v
p2
)。并非在累进3501中添加增量电压诸如v
p1
并且在累进3502中添加v
p2
,而是将附加的时间增量t
p1
添加到编程脉冲,使得每个施加的脉冲比先前施加的脉冲长t
p1
。在将每个编程脉冲施加到精确编程端子之后,执行与先前针对累进3501所述相同的验证步骤。任选地,在添加到编程脉冲中的附加时间增量比先前使用的进度具有更短的持续时间的情况下,则可以施加附加累进。
[0221]
任选地,可施加附加的编程循环累进,其中编程脉冲具有与所使用的先前编程循环累进相同的持续时间。尽管仅示出一个时间累进,但本领域的普通技术人员将理解,可施加任何数量的不同时间累进。也就是说,并非改变编程期间所使用的电压幅值或改变编程期间所使用的电压脉冲的周期,而是系统可改为改变所使用的编程循环的数目。
[0222]
图36b示出了互补脉冲编程累进的图,其中施加到一个精确编程端子的电压增加,而施加到另一个精确编程端子的电压减小。例如,可将递增的电压累进施加到所选择单元的控制栅,并且将递减的电压累进施加到所选择单元的擦除栅或源极线。或者在另选方案中,可将递增的电压累进施加到所选择单元的擦除栅或源极线,并且将递减的电压累进施加到所选择单元的控制栅。这些互补的累进编程脉冲在编程中得到更高精度。例如,在具有10mv的cg增量和20mv的eg减量的编程脉冲循环中,在精确编程脉冲循环之后fg中的所得电压是10mv*40%-20mv*15%=约1mv,假定40%的cg到fg耦合比和10%的eg到fg耦合比。此互补脉冲编程方法可在粗略编程步骤3305之后的精确编程步骤3306中使用,因为粗略编程步骤3305通常将在其编程操作期间仅使用cg增量或eg增量。
[0223]
现在将提供针对粗略编程方法3305的第二和第三实施方案的附加细节。
[0224]
图37示出了粗略编程(调谐)方法3305的第二实施方案,其为自适应校准方法3700。该方法开始(步骤3701)。通过根据表9中所示的序列中的一个序列将初始电压v0施加到粗略编程端子来对单元进行编程(步骤3702)。与搜索和执行方法3400中不同,这里v0不
[0238][0239]
在步骤3903中,形成用于预测下一个编程电压的i-v斜率参数。将第一电压v1施加到所选择单元的控制栅或擦除栅,并且测量所得的单元电流ir1。然后将第二电压v2施加到所选择单元的控制栅或擦除栅,并且测量所得的单元电流ir2。基于这些测量值来确定斜率,并且例如根据亚阈值区域(在亚阈值中操作的单元)中的等式来存储斜率:
[0240]
斜率=(v1

v2)/(log(ir1)

log(ir2))
[0241]
(步骤3903)。v1和v2的值的示例示于上表13中。
[0242]
确定i-v斜率信息允许选择针对所讨论的特定单元定制的v
increment
值。这通常将使编程过程更短。
[0243]
每次执行步骤3904时,i递增(初始值为0),以基于所存储的斜率值以及电流目标和偏移值,使用如下等式确定期望的编程电压vi:
[0244]
vi=v
i-1
v
increment

[0245]
其中v
increment
=α*斜率*(log(ir1)

log(i
ct
)),其中,i
ct
是目标电流,并且α是预定常数《1(编程偏移值)以防止过冲,例如,0.9。
[0246]
然后使用vi对所选择的单元进行编程(步骤3905)。
[0247]
接下来,验证操作发生,其中对所选择的单元执行读取操作,并且测量通过所选择的单元消耗的电流(i
cell
)(步骤3906)。如果i
cell
小于或等于i
ct
(此处其为粗略目标阈值),其中i
ct
=id i
ctoffset
,其中i
ctoffset
是为防止编程过冲所添加的偏移值,则过程进行到步骤3907。如果不是,则过程返回到步骤3903(新的斜率测量值)或3904(重新使用先前的斜率),并且i递增。
[0248]
在步骤3907,将i
cell
与小于i
ct
的阈值
ct2
进行比较。这样做的目的是查看过冲是否已经发生。也就是说,尽管目标是让i
cell
低于ict,但如果它远远低于ict,则过冲已经出现,并且所存储的值实际上可能对应错误的值。如果i
cell
不小于或等于i
ct2
,则没有过冲发生,并且自适应校准方法3900已经完成,此时过程前进到精确编程方法3306。如果i
cell
小于或等于i
ct2
,则过冲已经出现。然后擦除所选择的单元(步骤3908),并且编程过程在步骤3902处重新开始。任选地,如果步骤3908被执行超过预定次数,则所选择的单元可被视为不应该被使用的坏单元,并且输出错误信号,或设置标记,从而标识该单元。
[0249]
精确编程方法3306可由多个验证循环和编程循环组成,其中编程电压按具有固定脉冲宽度的恒定精细电压递增,或者其中编程电压是固定的并且编程脉冲宽度对于每个附加编程脉冲是变化。
[0250]
任选地,确定在读取或验证操作期间通过所选择的非易失性存储器单元的电流是否小于或等于第一阈值电流值的步骤3906可通过下方式来执行:向非易失性存储器单元的端子施加固定偏置;测量和数字化由所选择的非易失性存储器单元消耗的电流以生成数字
输出位;以及将该数字输出位与表示第一阈值电流i
ct
的数字位进行比较。
[0251]
任选地,确定在读取或验证操作期间通过所选择的非易失性存储器单元的电流是否小于或等于第二阈值电流值的步骤3907可通过下方式来执行:向非易失性存储器单元的端子施加固定偏置;测量和数字化由所选择的非易失性存储器单元消耗的电流以生成数字输出位;以及将该数字输出位与表示第二阈值电流i
ct2
的数字位进行比较。
[0252]
任选地,确定在读取或验证操作期间通过所选择的非易失性存储器单元的电流是否相应地小于或等于第一阈值电流值或第二阈值电流值的步骤3906、3907中的每一者可通过以下方式来执行:将输入施加到非易失性存储器单元的端子;用输出脉冲调制由所选择的非易失性存储器单元消耗的电流以生成调制输出;数字化该调制输出以生成数字输出位;以及将该数字输出位相应地与表示第一阈值电流值或第二阈值电流值的数字位进行比较。
[0253]
出于验证或读取电流的目的而测量单元电流可通过取多次(例如8至32次)的平均值来完成,以减小噪声的影响。
[0254]
图40示出了粗略编程方法3305的第四实施方案,其为绝对校准方法4000。该方法开始(步骤4001)。以默认起始值v0对单元的相关端子进行编程(步骤4002)。v0的示例示于表14中:
[0255]
表14:在绝对校准方法4000期间施加到存储器单元端子的初始电压v0[0256]
编程序列名称粗略编程端子施加到粗略编程端子的初始电压vocg-cg控制栅28(cg)约5-7vcg-eg控制栅28(cg)约5-7veg-eg擦除栅30(eg)约0-2vcg-sl控制栅28(cg)约5-7vsl-cg源极线14(sl)约3-3.5vsl-eg源极线14(sl)约3-3.5v
[0257]
粗略编程端子上的电压vtx以如上关于图38所述的被驱动通过单元的电流值itarget来测量并被存储(步骤4003)。新的粗略编程电压v1基于所存储的电压vtx和偏移值vtoffset(其对应于ioffset)来确定(步骤4004)。例如,新的期望电压v1可按如下方式计算:v1=v0 (vtbias-vtx)-vtoffset,其中vtbias例如为约1.5v,其为最大目标电流(意味着存储器单元允许的最大电流电平)下的默认端子电压。基本上,按目标电流处的当前电压vtx与最大电压和偏移之差的量来调节新的目标电压。
[0258]
然后使用vi对单元进行编程(步骤4005)。当i=1时,使用得自步骤4004的电压v1。当i》=2时,使用电压vi=v
i-1
v
increment
。v
increment
可从存储v
increment
值与目标电流值的查找表中确定。接下来,验证操作发生,其中对所选择的单元执行读取操作,并且将通过所选择的单元消耗的电流(i
cell
)与i
ct
进行比较(步骤4006)。如果i
cell
小于或等于i
ct
(此处其为阈值),则绝对校准方法4000完成,并且可开始精确编程方法3306。如果i
cell
不小于或等于i
ct
,则重复步骤4005至4006,并且i递增。
[0259]
图41示出了用于在绝对校准方法4000的步骤4003中测量vtx的电路4100。在每个存储器单元4103(4103-0、4103-1、4103-2、

、4103-n)测量vtx。此处,n 1个不同的电流源4101(4101-0、4101-1、4101-2、...、4101-n)生成幅值递增的不同电流io0、io1、io2、

ion。
每个电流源4101连接到相应的反相器4102(4102-0、4102-1、4102-2、...、4102-n)和存储器单元4103(4103-0、4103-1、4103-2、...、4103-n)。对每个反相器4102(4102-0、4102-1、4102-...、4102-n)的输入初始为高电平,并且每个反相器的输出初始为低电平。因为io0《io1《io2《

《ion,所以反相器4102-0的输出将首先从低电平切换到高电平,原因是存储器单元4103-0将从电流源4101-0并且还从反相器4102-0的输入节点汲取电流,从而致使到反相器4102-0的输入电压在到其他反相器4102的输入电压之前下降到低电平。接下来,反相器4102-1的输出将从低电平切换到高电平,然后是反相器4102-2的输出,依此类推,直到反相器4102-n的输出从低电平切换到高电平。每个反相器4102控制相应的开关4104(4104-0、4104-1、4104-2、...、4104-n),使得当反相器4102的输出为高电平时,开关4104闭合,这将使vtx被电容器4105(4105-0、4105-1、4105-2、...、4105-n)采样。因此,开关4104和电容器4105可形成采样保持电路。这样,使用采样保持电路来测量vtx。
[0260]
图42示出了用于在自适应校准方法3700或绝对校准方法4000期间对所选择的单元进行编程的示例性累进4200。使用位线使能信号en_blx(其中x在1和n之间变化,其中n是位线的数目)将电压vtp(其为施加到cg或eg端子的编程电压,并且其对应于图37的步骤3704中的vi和图40的步骤4005中的vi)施加到所选择存储器单元的端子。
[0261]
图43示出了用于在自适应校准方法3700或绝对校准方法4000期间对所选择的单元进行编程的另一个示例性累进4300。使用位线使能信号en_blx(其中x在1和n之间变化,其中n是位线的数目)将电压vtp(其为施加到cg或eg端子的编程电压,并且其对应于图37的步骤3704中的vi和图40的步骤4005中的vi)施加到所选择存储器单元的端子。
[0262]
在另一个实施方案中,施加到控制栅端子的电压递增并且施加到擦除栅端子的电压也递增。
[0263]
在另一个实施方案中,施加到控制栅端子的电压递增并且施加到擦除栅端子的电压递减。这在表15中示出:
[0264]
表15:控制栅端子增量和擦除栅端子减量
[0265][0266]
为了进行比较,仅递增控制栅端子或仅递增擦除栅端子的示例包括在表16中:
[0267]
表16:控制栅端子增量;擦除栅端子增量
[0268][0269]
图44示出了用于实施在精确编程之后在vmm阵列内进行读取或验证的输入和输出方法的系统。输入功能电路4401接收数字位值并将这些数字值转换成模拟信号,该模拟信
号继而用于将电压施加到阵列4404中所选择的单元的控制栅,其中通过控制栅解码器4402来确定所选择的单元。同时,字线解码器4403还用于选择所选择的单元所在的行。输出神经元电路区块4405接收来自阵列4404中的单元的每列的输出电流。输出电路区块4405可包括积分型模数转换器(adc)、逐次逼近型(sar)adc、σ-δ型adc或任何其他adc方案以提供数字输出。
[0270]
在一个实施方案中,提供给输入功能电路4401的数字值包括四个位(din3、din2、din1和din0)或任何数量的位,并且由这些位表示的数字值对应于在编程操作期间要施加到控制栅的输入脉冲的数量。更大数量的脉冲将导致更大的值被存储在单元中,这将在单元被读取时导致更大的输出电流。输入位值和脉冲值的示例示于表17中:
[0271]
表17:数字位输入与生成的脉冲
[0272]
din3din2din1din0已生成的输入脉冲00000000110010200113010040101501106011171000810019101010101111110012110113111014111115
[0273]
在上述示例中,对于4位输入数字存在最多15个脉冲。每个脉冲等于一个单位的单元值(电流),即精确编程电流。例如,如果icell单位=1na,则对于din[3-0]=0001,icell=1*1na=1na;并且对于din[3-0]=1111,icell=15*1na=15na。
[0274]
在另一个实施方案中,数字位输入使用数字位位置求和来读出单元值或神经元值(例如,位线输出上的精确编程值),如表18所示。这里,仅需要4个脉冲或4个固定的相同偏置输入(例如,字线或控制栅上的输入)来评估4位数字值。例如,使用第一脉冲或第一固定偏置来评估din0,使用与第一脉冲或第二固定偏置具有相同值的第二脉冲或第二固定偏置来评估din1,使用与第一脉冲或第二固定偏置具有相同值的第三脉冲或第三固定偏置来评估din2,并且使用与第一脉冲或第四固定偏置具有相同值的第四脉冲或第四固定偏置来评估din3。然后,根据位位置将四个脉冲的结果相加,其中每个输出结果乘以(缩小)一个乘数,即2^n,n是数字位位置,如表19所示。实现的数字位求和公式如下:输出=2^0*din0 2^1*din1 2^2*din2 2^3*din3)*icell单位,其中icell单位表示精确编程电流。
[0275]
例如,如果icell单位=1na,则对于din[3-0]=0001,icell总数=0 0 0 1*1na=1na;并且对于din[3-0]=1111,i
cell
总数=8*1na 4*1na 2*1na 1*1na=15na。
[0276]
表18:数字位输入求和
[0277]
2^3*din32^2*din22^1*din12^0*din0总值00000000110020200213040040401504206042178000880019802010802111840012840113842014842115
[0278]
表19:具有2^n输出乘法因子的数字输入位dn求和
[0279]
din3din2din1din0输出x因子
ꢀꢀꢀ
yx1
ꢀꢀ
y x2 y
ꢀꢀ
x4y
ꢀꢀꢀ
x8
[0280]
对于示例性4位数字输入,表20示出了具有混合输入的另一个实施方案,该混合输入具有多个数字输入脉冲范围和输入数字范围总和。在该实施方案中,dinn-0可被划分成m个不同的组,其中对每个组进行评估并且输出根据组二进制位置按某个乘法因子缩放。例如,针对4位din3-0,组可以是din3-2和din1-0,其中针对din1-0的输出按1(x1)缩放,din3-2的输出按4(x4)缩放。
[0281]
表20:具有多个输入范围的混合输入输出求和
[0282][0283]
另一个实施方案将混合输入范围与混合超级单元相结合。混合超级单元包括多个物理x位单元,以实现逻辑n位单元,其中x位输出由2^n二进制位置缩放。例如,为了实现8位逻辑单元,使用了两个4位单元(单元1、单元0)。针对单元0的输出按1(x1)缩放,并且针对单元1的输出按4(x、2^2)缩放实现n位逻辑单元的物理x单元的其他组合也是可能的,诸如实现8位逻辑单元的两个2位物理单元和一个4位物理单元。
[0284]
图45示出了类似于图44的系统的另一个实施方案,不同之处在于数字位输入使用数字位位置求和来读出由调制器4510调制的单元或神经元(例如,位线输出上的值)电流,其中输出脉冲宽度是根据数字输入位位置设计的(例如,将电流转换成输出电压v=电流*脉冲宽度/电容)。例如,第一偏置(施加在输入字线或控制栅上)用于评估din0,电流(单元或神经元)输出由调制器4510以与din0位位置成比例的单位脉冲宽度调制,该单位脉冲宽度是一(x1)个单位,第二输入偏置用于评估din1,电流输出由调制器4510以与din1位位置成比例的单位脉冲宽度调制,该单位脉冲宽度是两(x2)个单位,第三输入偏置用于评估din2,电流输出由调制器4510以与din2位位置成比例的脉冲宽度调制,该脉冲宽度是四(x4)个单位,第四输入偏置用于评估din3,电流输出由调制器4510以与din3位位置成比例的脉冲宽度调制,该脉冲宽度是八(x8)个单位。然后,由adc(模数转换器)4511针对每个数字输入位din0至din3将每个输出转换成数字位。然后,由求和器4512输出总输出,作为从din0-3输入生成的四个数字输出的总和。
[0285]
图46示出了电荷求和器4600的示例,该电荷求和器可用于在验证操作期间或在输出神经元模数转换期间对vmm的输出icell求和,以获得表示vmm的输出的单个模拟值,然后任选地将其转换为数字位值。例如,电荷求和器4600可用作求和器4512。电荷求和器4600包括电流源4601(这里表示由vmm输出的电流icell)和采样保持电路,该采样保持电路包括开关4602和采样保持(s/h)电容器4603。所示的示例将4位数字值用于输出,尽管也可使用其他位数代替。存在4个s/h电路以保持由4个评估脉冲生成的值,其中这些值在过程结束时相加。s/h电容器4603被选择为具有与该s/h电容器的2^n*dinn位位置相关联的比率。例如,c_din3的开关4602在icell》8x电流阈值时闭合,c_din2的开关4602在icell》4x电流阈值时闭合,c_din1的开关4602在icell》2x电流阈值时闭合,并且c_din0的开关4602在icell》电流阈值时闭合。因此,由采样保持电容器4603存储的数字值将反映icell 4601的值。
[0286]
图47示出了电流求和器4700,该求和器可用于在验证操作期间或在输出神经元模数转换期间对vmm的输出icell求和。例如,电荷求和器4700可用作求和器4512。电流求和器4700包括电流源4701(这里表示来自vmm的icell输出)、开关4702、开关4703和4704以及晶
体管4705。所示的示例将4位数字值用于输出,其中位值由电流i_din0、i_din1、i_din2和i_din3表示。每个晶体管4705的位位置影响由该位表示的值。i_din3的开关4703在icell》8x电流阈值时闭合,i_din2的开关4703在icell》4x电流阈值时闭合,i_din1的开关4704在icell》2x电流阈值时闭合,i_din0的开关4703在icell》电流阈值时闭合。因此,由晶体管4705输出的数字值(其中“1”由正电流表示,并且“0”由无电流表示,反之亦然)将反映icell 4601的值。
[0287]
图48示出了数字求和器4800,该数字求和器接收多个数字值,将它们求和并且生成表示输入的总和的输出dout。例如,数字求和器4600可用作求和器4512。数字求和器4800可用于验证操作期间或输出神经元模数转换期间。如针对4位数字值的示例所示,存在数字输出位以保持来自4个评估脉冲的值,其中这些值在过程结束时相加。基于2^n*dinn位位置对数字输出进行数字缩放;例如,dout3=x8 dout0,_dout2=x4 dout1,i_dout1=x2 dout0,i_dout0=dout0。
[0288]
图49a示出了应用于输出神经元以将单元电流转换成数字输出位的积分型双斜率adc 4900。由积分型运算放大器4901和积分型电容器4902组成的积分器对单元电流icell与参考电流iref进行积分。如图49b所示,在固定时间t1期间,开关s1闭合并且开关s2断开,并且单元电流被向上积分(vout在波形4950中上升),然后开关s1断开并且开关s2闭合,使得参考电流iref被施加以在时间t2内向下积分(vout在波形4950中下降)。确定电流icell的值=t2/t1*iref。例如,对于t1,对于10位数字位分辨率,使用1024个周期,并且对于t2,周期数根据icell值从0到1024个周期而变化。在目标值作为vref施加到比较器4904的情况下,比较器4904的输出ec 4905可用作触发器以确定施加iref直到vout降到vref以下的循环数目。
[0289]
图49c示出了应用于输出神经元4966icell以将单元电流转换成数字输出位的积分型单斜率adc 4960。adc 4960包括积分型运算放大器4961、积分型电容器4962、运算放大器4964以及开关s1和s3。积分型运算放大器4961和积分型电容器4962对输出神经元电流icell进行积分。如图49d所示,在时间t1期间,单元电流被向上积分(vout上升直到它达到vref2),并且在时间t2(在与时间t1相同的时间开始,但大于时间t1)期间,参考单元的单元电流被向上积分。单元电流icell被确定为=cint*vref2/t。耦接到比较器4965的输出的脉冲计数器用于在相应的积分时间t1、t2期间对脉冲数量(数字输出位)进行计数。例如,如图所示,t1的数字输出位小于t2的数字输出位,这意味着t1期间的单元电流大于t2期间的单元电流。进行初始校准以利用参考电流和固定时间来校准积分型电容器值cint=tref*iref/vref2。
[0290]
图49e示出了应用于输出神经元4984icell以将单元电流转换成数字输出位的积分型双斜率adc 4980。积分型双斜率adc 4980包括开关s1、s2和s3、运算放大器4981、电容器4982以及参考电流源4983。积分型双斜率adc 4980不使用积分型运算放大器。单元电流或参考电流直接针对电容器4982积分。脉冲计数器用于对积分时间期间的脉冲(数字输出位)进行计数。电流icell=t2/t1*iref。
[0291]
图49f示出了应用于输出神经元4994icell以将单元电流转换成数字输出位的积分型单斜率adc 4990。积分型单斜率adc 4990包括开关s2和s3、运算放大器4991以及电容器4992。积分型单斜率adc 4980不使用积分型运算放大器。单元电流直接针对电容器4992
积分。脉冲计数器用于对积分时间期间的脉冲(数字输出位)进行计数。单元电流icell=cint*vref2/t。
[0292]
图50a示出了应用于输出神经元以将单元电流转换成数字输出位的sar(逐次逼近寄存器)adc。单元电流可在电阻器两端下降以转换成电压vcell。另选地,单元电流可使s/h电容器充电以将单元电流转换成电压vcell。vcell被提供给比较器5003的反相输入,比较器的输出被馈送给sar 5001的选择输入。时钟输入clk被进一步提供给sar 5001。二进制搜索用于计算从msb位(最高有效位)开始的位。基于从sar 5001输出并作为dac 5002的输入接收的数字位dn-d0,dac 5002的输出用于设置比较器5003的非反相输入,即,比较器5003的适当模拟参考电压。比较器5003的输出继而反馈到sar 5001以选择下一个模拟电平。如图50b所示,对于4位数字输出位的示例,存在4个评估周期:第一脉冲通过将模拟电平设置在中间来评估dout3,然后第二脉冲通过将模拟电平设置在上半部的中间或下半部的中间来评估dout2,没有限制。
[0293]
诸如循环(算法)adc等经修改的二进制搜索可用于单元调谐(例如,编程)验证或输出神经元转换。诸如开关电容(sc)电荷再分配adc的经改进的二进制搜索可用于单元调谐(例如,编程)验证或输出神经元转换。
[0294]
图51示出了应用于输出神经元以将单元电流转换成数字输出位的σ-δ型adc 5100。由运算放大器5101和电容器5105组成的积分器对来自所选择的单元电流5106的电流icell和来自1位电流cdac 5104的参考电流iref的总和进行积分。比较器5102将运算放大器5101的积分输出电压与参考电压vref2进行比较。时钟控制的dff 5103根据比较器5102在dff5103的d输入端接收的输出来提供数字输出流。数字输出流通常在被输出为数字输出位之前进入数字滤波器。
[0295]
图52a示出了斜坡模数转换器5200,该斜坡模数转换器包括电流源5201(其表示所接收的神经元电流icell)、开关5202、可变可配置电容器5203以及比较器5204,该比较器接收跨可变可配置电容器5203形成的电压(表示为vneu)作为非反相输入并且接收可配置参考电压vreframp作为反相输入并且生成输出cout。vreframp随着每个比较时钟周期以离散电平斜升。比较器5204将vneu与vreframp进行比较,并且因此当vneu》vreframp时,输出cout将为“1”,并且否则将为“0”。因此,输出cout将是脉冲,其宽度响应于ineu而变化。较大的ineu将致使cout在较长时间段内为“1”,从而导致输出cout的较宽脉冲。数字计数器5220将输出cout的脉冲522中的每个脉冲转换成计数值5221,其为数字输出位,如图52b分别针对两个不同的icell电流(表示为ot1a和ot2a)所示。
[0296]
另选地,斜坡电压vreframp是连续斜坡电压5255,如图52b的曲线5250所示。
[0297]
另选地,图52c中示出了用于通过利用粗略-精细斜坡转换算法来减少转换时间的多斜坡实施方案。首先,粗略参考斜坡参考电压5271以快速方式斜坡变化以找出每个icell的子范围。接下来,针对每个子范围分别使用精细参考斜坡参考电压5272(即,vreframp1和vreframp2)以转换相应子范围内的icell电流。如图所示,存在精细参考斜坡电压的两个子范围。超过两个粗略/精细步骤或超过两个子范围是可能的。
[0298]
图53示出了算法型模数输出转换器5300,该算法型模数输出转换器包括开关5301、开关5302、采样保持(s/h)电路5303、1位模数转换器(adc)5304、1位数模转换器(dac)5305、求和器5306,以及两个残余运算放大器(2个运算放大器)5307的增益。算法型模数输
出转换器5300响应于模拟输入vin和施加到开关5302和5302的控制信号而生成转换数字输出5308。在模拟输入vin处接收的输入(例如,图52的vneu)首先被s/h电路5303采样以响应开关5302,然后针对n位在n个时钟周期中执行转换。对于每个转换时钟周期,1位adc 5304将s/h电压5309与参考电压vref/2进行比较并且输出数字位(例如,如果输入《=vref/2,则输出“0”,并且如果输入》vref/2,则输出“1”)。该数字输出位(其为数字输出信号5308)继而由1位dac 5305转换成模拟电压(例如,转换成vref/2或0v)并且馈送到求和器5306以从s/h电压5309中减去。2x残余opamp 5307然后将求和器差电压输出放大成转换残余电压5310,该转换残余电压通过开关5301馈送到s/h电路5303以用于下一个时钟周期。代替该1位(即,2个电平)算法adc,可使用1.5位(即,3个电平)算法adc来减小诸如来自adc 5304和残余运算放大器5307的偏移的影响。对于与1.5位算法adc一起使用的情况,1.5位或2位(即,4个电平)dac是优选的。
[0299]
在另一个实施方案中,可以使用混合adc。例如,对于9位adc,前4位可以由sar adc生成,并且其余5位可以使用斜率adc或斜坡adc生成。
[0300]
编程和验证作为单个逻辑多位单元的多个物理单元
[0301]
上述编程和验证设备及方法可在作为逻辑多位单元的多个物理单元上同时操作。
[0302]
图54示出了逻辑多位单元5400,该逻辑多位单元包括被标记为物理单元5401-1、5401-2、

、5401-i的i个物理单元。在一个实施方案中,物理单元5401具有均匀的扩散宽度(晶体管宽度)。在另一个实施方案中,物理单元5401具有非均匀扩散宽度(不同的晶体管宽度,其中具有较大宽度的晶体管可存储较大数量的电平并因此可存储较大数量的位)。在这两个实施方案中,将物理单元5401编程、验证和读取为一个单元,具体地为可存储比每个m位单元更大数量的电平的单个逻辑n位单元。例如,如果m=2,则每个物理单元5401可保持四个电平(l0、l1、l2、l3)中的一个电平。两个此类单元可被视为n=3的单个逻辑单元,使得该单个逻辑单元可保持八个电平(l0、l1、l2、l3、l4、l5、l6、l7)中的一个电平。又如,如果m=3,则每个物理单元5401可保持8个电平(l0、...、l7)中的一个电平。四个此类单元可被视为n=5的单个逻辑单元,使得该单个逻辑单元可保持32个电平(l0、...、l31)中的一个电平。
[0303]
图55示出了编程逻辑多位单元5400的方法5500。首先,使用粗略编程方法3305中的任一种方法对i个物理单元5401-1、

、5401-i中的j个物理单元(其中j《=i)进行编程和验证,直到实现j个物理单元的粗略电流目标(步骤5501)。接下来,使用精确编程方法3306中的任一种方法对j个物理单元中的k个物理单元(其中k《=j)进行编程和验证,直到实现k个物理单元的精确电流目标(步骤5502)。
[0304]
可对i个物理单元5401-1、

、5401-i的超过一个子集执行方法5500,以达到逻辑多位单元5400的期望整体电平。
[0305]
例如,如果i=4,则将存在四个单元5401-1、5401-2、5401-3和5401-4。如果假设每个单元可保持8个不同电平中的一个电平,则逻辑多位单元5400可保持32个不同电平中的一个电平。如果期望的编程值是l27,则可以任何数量的不同方式来达到该电平(其对应于期望的读取电流)。
[0306]
例如,可对单元5401-1、5401-2和5401-3执行方法5500,直到这些单元共同保持l23(第24电平),然后可对单元5401-4执行方法5500,以将该单元编程到其第四电平,使得
逻辑多位单元5400达到l27(第28电平)。
[0307]
又如,可对单元5401-1、5401-2、5401-3和5401-4执行方法5500,直到这些单元共同保持l25(第26电平),然后可仅对单元5401-4执行方法5500,直到其存储使得整个逻辑多位单元5400达到l27(第28电平)的值。
[0308]
其他方法是可能的,并且可对i个物理单元的不同子集执行方法5500,直到达到期望的电平。
[0309]
在另一个实施方案中,在i个物理单元具有非均匀扩散宽度的情况下,可对具有较宽晶体管宽度的j1个物理单元执行粗略编程步骤3305,直到j1个物理单元共同实现粗略电流目标,然后可对具有最小晶体管宽度的j2个物理单元执行精确编程步骤3306,直到j1 j2个物理单元共同实现精确电流目标。
[0310]
应当指出,如本文所用,术语“在

上方”和“在

上”两者包容地包含“直接在

上”(之间未设置中间材料、元件或空间)和“间接在

上”(之间设置有中间材料、元件或空间)。类似地,术语“相邻”包括“直接相邻”(之间没有设置中间材料、元件或空间)和“间接相邻”(之间设置有中间材料、元件或空间),“安装到”包括“直接安装到”(之间没有设置中间材料、元件或空间)和“间接安装到”(之间设置有中间材料、元件或空间),并且“电耦接至”包括“直接电耦接至”(之间没有将元件电连接在一起的中间材料或元件)和“间接电耦接至”(之间有将元件电连接在一起的中间材料或元件)。例如,“在衬底上方”形成元件可包括在两者间没有中间材料/元件的情况下在衬底上直接形成元件,以及在两者间有一个或多个中间材料/元件的情况下在衬底上间接形成元件。
再多了解一些

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

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

相关文献