在NAND存储器阵列中实现具有三值输入和二值权重的神经网络的制作方法

文档序号:19830804发布日期:2020-02-04 12:24阅读:389来源:国知局
在NAND存储器阵列中实现具有三值输入和二值权重的神经网络的制作方法

相关申请的交叉引用

本申请涉及2018年7月24日提交的美国临时申请号62/702,713,并且涉及与本申请同时提交的题目为“realizationofbinaryneuralnetworksinnandmemoryarrays(在nand存储器阵列中实现二值神经网络)”的申请,该两个申请都以引用方式并入本文。



背景技术:

人工神经网络越来越多地用于人工智能和机器学习应用。在人工神经网络中,输入集通过一个或多个中间或隐藏层传播以生成输出。将输入连接到输出的层通过权重集连接,权重集在训练或学习阶段中通过确定数学运算集合以将输入转换为输出,在计算每个输出的概率的层中移动来生成。一旦建立了权重,就可以在推断阶段使用它们来根据输入集确定输出。虽然这种神经网络可以提供高度准确的结果,但它们在计算方面是非常密集的,并且读取将不同层连接到存储器之外的权重并将它们传递到处理单元的各处理单元中所涉及的数据传递可能非常密集。

附图说明

相同编号的元件是指不同图中的共同部件。

图1是连接到主机的存储器系统的一个实施方案的框图。

图2是前端处理器电路的一个实施方案的框图。在一些实施方案中,前端处理器电路是控制器的一部分。

图3是后端处理器电路的一个实施方案的框图。在一些实施方案中,后端处理器电路是控制器的一部分。

图4是存储器封装的一个实施方案的框图。

图5是存储器管芯的一个实施方案的框图。

图6示出了人工神经网络的简单示例。

图7a是描述用于训练神经网络以生成权重集的过程的一个实施方案的流程图。

图7b是描述使用神经网络进行推断的过程的一个实施方案的流程图。

图8是在神经网络中使用矩阵乘法的示意图。

图9是示出响应于不同输入-权重组合的二值神经网络的输出的表。

图10示出了用于在一对串联连接的存储器单元中存储二值权重的单位突触单元的实施方案。

图11示出了用于在二值或单级单元(slc)存储器上存储数据状态的阈值电压的分布。

图12和图13示出了使用一对串联连接的slc存储器单元作为单位突触来实现二值神经网络的实施方案。

图14和图15分别对应于图12和图13,其被扩展为包括用于实现三值输入的“0”输入逻辑值。

图16示出了将单位突触合并到nand阵列中。

图17和图18考虑了用于二值神经网络代数的点积的计算的示例,以及如何使用基于计数器的求和数字电路来实现这一点以用于slcnand二值神经网络(bnn)实施方案。

图19是推断中使用二值神经网络的点积计算的一个实施方案的流程图。

图20和图21考虑了扩展点积计算以用于三值-二值神经网络的示例,以及如何使用基于计数器的求和数字电路来实现这一点以用于slcnand三值-二值网络(tbn)实施方案。

图22示出了用于slcnand阵列以支持三值-二值神经网络的求和电路的实施方案。

图23a和图23b提供了图22的组合逻辑电路的两个实施方案。

图24是在推断中使用三值-二值神经网络的点积计算的一个实施方案的流程图,如图20和图21的表以及阵列架构22所示。

图25和图26示出了神经网络的示例及其通过nand阵列的实施方式。

图27示出了神经网络的示例及其通过nand阵列的实施方式,以通过利用单个平面内的多个块来实现跨nand块的高并行性。

图28是类似于图19的点积计算的一个实施方案的流程图,但其结合了图27所示的多块并行性。

图29示出了可跨多个平面同时针对神经网络输入进行推断的附加实施方案。

图30示出了用于不同神经网络层的平面流水线的实施方案。

图31示出了其中不同层的权重可以存储在相同块、相同平面或两者中的实施方案。

具体实施方式

为了降低计算复杂度并放宽神经网络的存储器要求,已经引入了二值神经网络(bnn)。在bnn中,神经网络的权重和输入被截断成二值(-1,+1),并且二值算法简化xnor和位计数运算的乘法和加法。以下公开内容提出了利用nand存储器结构以用于存储二值神经网络的权重以及用于在nand存储器内执行乘法和累加运算的技术。

每个二值权重存储在由一对串联连接的二值存储器单元(诸如nand串上的一对相邻存储器单元)形成的单位突触中,其中一个存储器单元处于编程状态并且另一个处于擦除状态。取决于单位突触的哪个存储器单元在编程状态以及哪个存储器单元处于擦除状态,单位突触将为-1或+1权重。然后将二值输入作为电压模式应用在对应字线上,其中字线对中的一者处于读取电压(针对其只有擦除状态存储器单元将导通),并且字线对中的另一者处于通过电压(针对其存储器单元在任何状态下都将导通)。取决于字线对的哪个字线处于哪个值,输入将是-1或+1输入。通过将输入应用于字线对,单位突触(和对应的nand串)将导通或不导通,这取决于输入和权重是否匹配。结果可以由连接到对应位线的读出放大器确定。通过沿nand串使输入/单位突触对顺序工作并累加读出放大器的结果,可以执行通过神经网络层传播输入的乘法和累加运算。由于阵列的字线跨越多个nand串,因此可以对多个单位突触的二值权重同时执行运算。

通过引入多位读出放大器可以增加并行性的程度,使得可以同时感测来自阵列的不同存储器块的单位突触。通过在多个平面上同时感测并且将对应于神经网络的一层的一个平面的输出流水线化为对应于神经网络的后续层的另一个平面的输入,可以获得并行性的进一步增加。

通过使用三值-二值网络(tbn)可以提高二值权重神经网络的准确性。在tbn布置中,权重值是二值(-1,+1),但输入现在是三值(-1,0,+1)。如在bnn情况下,权重仍然可以存储在由一对串联连接的存储器单元形成的单位突触中。0输入值可以被实现为电压模式,其中字线对的两个字线都处于读取电压(针对其仅擦除状态存储器单元将导通)。为了考虑此类0输入值,逻辑电路可以确定字线对的电压电平何时匹配并相应地调整从读出放大器累加的计数。

图1是连接到主机120的存储器系统100的一个实施方案的框图。存储器系统100可以实现本文提出的技术,其中从主机120接收神经网络输入或其他数据。取决于实施方案,可以从主机120接收输入并且然后将输入提供给存储器封装104,以用于推断先前编程到存储器封装104的存储器阵列中的权重。许多不同类型的存储器系统可以与本文提出的技术一起使用。示例性存储器系统包括固态驱动器(“ssd”)、存储卡和嵌入式存储器设备;然而,也可以使用其他类型的存储系统。

图1的存储系统100包括控制器102、用于存储数据的非易失性存储器104、以及本地存储器(诸如dram/reram)106。控制器102包括前端处理器(fep)电路110和一个或多个后端处理器(bep)电路112。在一个实施方案中,fep电路110在asic上实现。在一个实施方案中,每个bep电路112在单独asic上实现。在其他实施方案中,统一控制器asic可以组合前端功能和后端功能两者。用于bep电路112和fep电路110中的每个的asic在相同半导体上实现,使得控制器102被制造为片上系统(“soc”)。fep电路110和bep电路112均包括其本身的处理器。在一个实施方案中,fep电路110和bep电路112用作主从配置,其中fep电路110是主设备,并且每个bep电路112是从设备。例如,fep电路110实现闪存转换层(ftl)或介质管理层(mml),其执行存储器管理(例如,垃圾收集、损耗均衡等)、逻辑到物理地址转换、与主机的通信、dram(本地易失性存储器)的管理以及ssd(或其他非易失性存储系统)的整体操作的管理。bep电路112根据fep电路110的请求来管理存储器封装/管芯中的存储器操作。例如,bep电路112可进行读取、擦除和编程过程。另外,bep电路112可执行缓冲器管理,设置fep电路110所需的特定电压电平,执行纠错(ecc),控制到存储器封装的切换模式接口等。在一个实施方案中,每个bep电路112负责其本身的一组存储器封装。

在一个实施方案中,非易失性存储器104包括多个存储器封装。每个存储器封装包括一个或多个存储器管芯。因此,控制器102连接到一个或多个非易失性存储器管芯。在一个实施方案中,存储器封装104中的每个存储器管芯利用nand闪存(包括二维nand闪存和/或三维nand闪存)。在其他实施方案中,存储器封装可以包括其他类型的存储器。

控制器102经由接口130与主机120通信,该接口通过pciexpress(pcie)来实现nvmexpress(nvme)。为了与存储器系统100一起工作,主机120包括沿总线128连接的主机处理器122、主机存储器124和pcie接口126。主机存储器124是主机的物理存储器,并且可以是dram、sram、非易失性存储器或其他类型的存储装置。主机120在存储器系统100外部并与该存储器系统分离。在一个实施方案中,存储器系统100嵌入在主机120中。

图2是bep电路110的一个实施方案的框图。图2示出与主机120通信的pcie接口150,以及与pcie接口通信的主机处理器152。主机处理器152可以是本领域中已知的适用于实现的任何类型的处理器。主机处理器152与片上网络(noc)154通信。noc是集成电路上的通信子系统,通常在soc中的核心之间。noc可跨越同步和异步时钟域,或者使用非时钟的异步逻辑。noc技术将网络理论和方法应用于片上通信,并且与常规总线和交叉开关互连相比带来了显著的改善。与其他设计相比,noc提高了soc的可扩展性以及复杂soc的功效。noc的导线和链路由许多信号共享。由于noc中的所有链路可在不同的数据包上同时运行,因此实现了高水平的并行性。因此,随着集成子系统的复杂性不断增长,与先前的通信架构(例如,专用的点对点信号线、共享总线或带有桥接器的分段总线)相比,noc提供增强的性能(诸如吞吐量)和可扩展性。连接到noc154并与其通信的是存储器处理器156、sram160和dram控制器162。dram控制器162用于操作dram(例如,dram106)并且与该dram通信。sram160是由存储器处理器156使用的本地ram存储器。存储器处理器156用于运行fep电路并且执行各种存储器操作。与noc通信的还有两个pcie接口164和166。在图2的实施方案中,ssd控制器将包括两个bep电路112;因此,存在两个pcie接口164/166。每个pcie接口与bep电路112中的一个通信。在其他实施方案中,可存在多于或少于两个bep电路112;因此,可存在不止两个pcie接口。

fep电路110还可以包括闪存转换层(ftl),或者更大体地包括介质管理层(mml)158,其执行存储器管理(例如,垃圾收集、损耗均衡、负载平衡等)、逻辑到物理地址转换、与主机的通信、dram(本地易失性存储器)的管理以及ssd或其他非易失性存储系统的整体操作的管理。媒体管理层mml158可以被集成为可处理存储器错误并与主机接口连接的存储器管理的一部分。具体地,mml可以是fep电路110中的模块并且可以负责存储器管理的内部。具体地讲,mml158可包括存储器设备固件中的算法,该算法将来自主机的写入转换为对管芯的存储器结构(例如,以下图5的326)的写入。可能需要mml158,因为:1)存储器可能具有有限的耐久性;2)存储器结构可以只被写入多个ecc页面;并且/或者3)除非将存储器结构作为块擦除,否则可以不写入存储器结构。mml158理解存储器结构的这些潜在限制,这些限制可能对主机不可见。因此,mml158尝试将来自主机的写入转换为写入存储器结构。

图3是bep电路112的一个实施方案的框图。图3示出用于与fep电路110通信(例如,与图2的pcie接口164和166中的一个通信)的pcie接口200。pcie接口200与两个noc202和204通信。在一个实施方案中,两个noc可以被组合成一个大的noc。每个noc(202/204)通过xor引擎(224/254)和ecc引擎(226/256)连接到sram(230/260)、缓冲器(232/262)、处理器(220/250)和数据路径控制器(222/252)。ecc引擎226/256用于执行纠错,如本领域所知。xor引擎224/254用于对数据进行异或,使得可在存在编程错误的情况下以可恢复的方式组合和存储数据。数据路径控制器222连接到接口模块,以用于通过四个信道与存储器封装进行通信。因此,顶部noc202与用于与存储器封装通信的四个信道的接口228相关联,并且底部noc204与用于与存储器封装通信的四个附加信道的接口258相关联。每个接口228/258包括四个切换模式接口(tm接口)、四个缓冲器和四个调度器。对于信道中的每个存在一个调度器、缓冲器和tm接口。处理器可以是本领域中已知的任何标准处理器。数据路径控制器222/252可以是处理器、fpga、微处理器、或其他类型的控制器。xor引擎224/254和ecc引擎226/256是专用的硬件电路,称为硬件加速器。在其他实施方案中,xor引擎224/254和ecc引擎226/256可在软件中实现。调度器、缓冲器和tm接口是硬件电路。

图4是存储器封装104的一个实施方案的框图,该存储器封装包括连接到存储器总线(数据线和芯片使能线)294的多个存储器管芯292。存储器总线294连接到切换模式接口296以用于与bep电路112的tm接口进行通信(参见例如图3)。在一些实施方案中,存储器封装可包括连接到存储器总线和tm接口的小控制器。存储器封装可具有一个或多个存储器管芯。在一个实施方案中,每个存储器封装包括8或16个存储器管芯;然而,也可以实现其他数量的存储器管芯。本文描述的技术不限于任何特定数量的存储器管芯。

图5是存储器管芯300的一个实施方案的功能框图。图5中描绘的部件是电路。在一个实施方案中,每个存储器管芯300包括存储器结构326、控制电路310和读/写电路328。存储器结构126能够通过行解码器324由字线来寻址,并且通过列解码器332由位线来寻址。读取/写入电路328包括多个感测块350并且允许存储器单元页面被并行读取或并行编程,该感测块包括sb1、sb2、…、sbp(感测电路)。命令和数据经由线路318在控制器与存储器管芯300传输。在一个实施方案中,存储器管芯300包括连接到线路318的一组输入和/或输出(i/o)引脚。

控制电路310与读/写电路328配合以在存储器结构326上执行存储器操作(例如,写入、读取等),并且包括状态机312、片上地址解码器314和功率控制电路316。状态机312提供存储器操作的管芯级控制。在一个实施方案中,状态机312可由软件编程。在其他实施方案中,状态机312不使用软件并且完全以硬件(例如,电子电路)实现。在另一个实施方案中,状态机312被微控制器替换。在一个实施方案中,控制电路310包括诸如寄存器的缓冲器、rom熔丝和用于存储默认值(诸如基准电压和其他参数)的其他存储设备。

片上地址解码器314提供控制器102使用的地址与解码器324和332使用的硬件地址之间的地址接口。功率控制模块316控制在存储器操作期间提供给字线和位线的功率和电压。功率控制模块316可以包括用于产生电压的充电泵。感测块包括位线驱动器。

出于本文件的目的,短语“一个或多个控制电路”是指控制器、状态机、微控制器和/或控制电路310、或用于控制非易失性存储器的其他模拟电路。

在一实施方案中,存储器结构326包括非易失性存储器单元的三维存储器阵列,其中在单个衬底(诸如晶片)上方形成多个存储器层。存储器结构可以包括在存储器单元的一个或多个物理层中单片地形成的任何类型的非易失性存储器,其具有设置在硅(或其他类型)衬底上方的有源区域。在一个示例中,非易失性存储器单元包括具有电荷俘获材料的垂直nand串,诸如例如在美国专利9,721,662中所描述的,该专利全文以引用方式并入本文。

在另一个实施方案中,存储器结构326包括非易失性存储器单元的二维存储器阵列。在一个示例中,非易失性存储器单元是利用浮栅的nand闪存单元,诸如例如在美国专利9,082,502中所描述的,该专利全文以引用方式并入本文。也可以使用其他类型的存储器单元(例如,nor型闪存)。

存储器阵列架构或包括在存储器结构326中的存储器单元的确切类型不限于上述示例。可以使用许多不同类型的存储器阵列架构或存储器技术来形成存储器结构326。出于本文提出的新的要求保护的实施方案的目的,不需要特定的非易失性存储器技术。用于存储器结构326的存储器单元的合适技术的其他示例包括reram存储器、磁阻存储器(例如,mram、自旋转移矩mram、自旋轨道转矩mram)、相变存储器(例如,pcm)等。用于存储器结构126的存储器单元架构的合适技术的示例包括二维阵列、三维阵列、交叉点阵列、堆叠二维阵列、垂直位线阵列等。

reram或pcmram交叉点存储器的一个示例包括可逆电阻切换元件,其布置在由x线和y线(例如,字线和位线)存取的交叉点阵列中。在另一个实施方案中,存储器单元可包括导电桥存储器元件。导电桥存储器元件也可称为可编程金属化单元。基于固体电解质内的离子的物理重新定位,导电桥存储器元件可用作状态改变元件。在一些情况下,导电桥存储器元件可包括两个固体金属电极,一个是相对惰性的(例如,钨),而另一个是电化学活性的(例如,银或铜),在两个电极之间具有固体电解质的薄膜。随着温度升高,离子的迁移率也增加,这导致导电桥存储器单元的编程阈值降低。因此,导电桥存储器元件可在整个温度范围内具有宽范围的编程阈值。

磁阻存储器(mram)通过磁存储元件存储数据。元件由两个铁磁板形成,每个铁磁板可保持磁化,由薄的绝缘层隔开。两个板中的一个是设置为特定极性的永磁体;可以改变另一个板的磁化以匹配外磁场的磁化以存储内存。存储器设备由此类存储器单元的网格构建。在用于编程的一个实施方案中,每个存储器单元位于一对写入线之间,该对写入线被布置成彼此成直角,与单元平行,一个在单元上方并且一个在单元下方。当电流通过它们时,产生感应磁场。

相变存储器(pcm)利用硫属化合物玻璃的独特行为。一个实施方案使用gete-sb2te3超晶格通过简单地用激光脉冲(或来自另一个源的光脉冲)改变锗原子的配位状态来实现非热相变。因此,编程的剂量是激光脉冲。可以通过阻止存储器单元接收光来抑制存储器单元。在其他pcm实施方案中,存储器单元由电流脉冲编程。应当注意,在该文件中使用“脉冲”不需要矩形脉冲,但包括声音、电流、电压光或其他波的(连续或非连续)振动或脉冲串。

本领域普通技术人员将认识到,本文所述的技术不限于单个特定存储器结构,但涵盖了在本文所述和如本领域普通技术人员所理解的技术实质与范围内的许多相关的存储器结构。

现在转到可存储在非易失性存储器设备上的数据类型,在下面的讨论中,数据类型的感兴趣的特定示例是在深度神经网络中使用的权重。人工神经网络由输入层与输出层之间的一个或多个中间层形成。神经网络找到一种数学运算以将输入转为输出,从而移动通过计算每个输出的概率的层。图6示出了人工神经网络的简单示例。

在图6中,人工神经网络表示为由圆圈表示的节点或人工神经元的互联组,以及从一个人工神经元的输出到另一个人工神经元的输入的连接的集合。该示例示出了三个输入节点(i1、i2、i3)和两个输出节点(o1、o2),其中中间层包含四个隐藏或中间节点(h1、h2、h3、h4)。人工神经网络的节点或人工神经元/突触由主机或其他处理系统的逻辑元件实现为数学函数,该数学函数接收一个或多个输入并将它们相加以产生输出。通常,每个输入都是单独加权的,并且总和通过节点的数学函数传递以提供节点的输出。

在常见的人工神经网络实施方式中,节点(人工神经元/突触)之间的连接处的信号是实数,并且每个人工神经元的输出通过其输入总和的某个非线性函数来计算。节点及其连接通常具有随着学习过程进行而调整的权重。权重增加或减少连接处的信号的强度。节点可以具有阈值,使得仅在聚合信号超过该阈值时才发送信号。通常,节点被聚合成层。不同的层可以对其输入执行不同类型的变换。信号可能在多次遍历各层之后从第一层(输入层)行进到最后层(输出层)。尽管图6仅示出了单个中间层或隐藏层,但复杂的深度神经网络(dnn)可以具有许多此类中间层。

通过供应输入并且然后检查和校正输出来“训练”人工神经网络。例如,被训练以识别狗品种的神经网络将处理图像集并计算图像中的狗是某个品种的概率。用户可以查看结果并且选择网络应当显示的概率(高于某个阈值等)并返回所提出的标签。这样,每个数学运算被认为是一层,并且复杂的神经网络具有许多层。由于大量中间层或隐藏层提供的深度,神经网络可以在其被训练时模拟复杂的非线性关系。

图7a是描述用于训练神经网络以生成权重集的过程的一个实施方案的流程图。通常在云中执行训练过程,从而允许对访问附加或更强大的处理。在步骤701处,在输入节点(例如,图6中的i1、i2、i3)处接收输入(诸如图像集)。在步骤703处,使用当前权重集来使输入传播通过隐藏中间层(例如,图6中的h1、h2、h3、h4)的节点。然后在步骤705中,在输出节点(例如,图6中的o1、o2)处接收神经网络的输出。在前一段的狗品种示例中,输入将是许多狗的图像数据,并且中间层使用当前权重值来计算图像中的狗是某个品种的概率,在步骤705处返回所提出的狗品种标签。然后,用户可以在步骤707处查看结果以选择神经网络应当返回的概率并判断当前的权重集是否供应足够准确的标签,并且如果是,则完成训练(步骤711)。如果结果不够准确,则神经网络在步骤709处基于用户选择的概率调整权重,然后循环回到步骤703以便再次用已调整的权重运行输入数据。一旦已经确定神经网络的权重集,就可以用来“推断”使用所确定的权重根据输入到神经网络中的数据来生成输出结果的过程。一旦在步骤711处确定权重,就可以将它们存储在非易失性存储器中供以后使用,其中在下面进一步详细讨论这些权重在非易失性存储器中的存储。

图7b是描述使用神经网络以便使用估计的准确度来预测输入数据的“含义”的监督学习的推断阶段的过程的流程图。取决于情况,可以在云和边缘设备(例如,智能电话、汽车过程、硬件加速器)的处理器处推断神经网络。在步骤721处,接收输入,诸如上面使用的示例中的狗的图像。如果先前确定的权重不存在于运行神经网络应用程序的设备中,则在步骤722处加载它们。例如,在执行神经网络的主机处理器上,可以从ssd中读出权重,在ssd中存储权重并将权重加载到主机设备上的ram中。在步骤723处,然后使输入数据传播通过神经网络层。步骤723将类似于图7b的步骤703,但现在使用在步骤711的训练过程结束时建立的权重。在使输入传播通过中间层之后,然后在步骤725处提供输出。

神经网络通常是前馈网络,其中数据从输入层流动,通过中间层,并且到达输出层,而不会循环返回。首先,在如图7a所示的监督学习的训练阶段,神经网络创建虚拟神经元的映射并将随机数值或“权重”分配给它们之间的连接。权重和输入相乘并返回0与1之间的输出。如果网络未准确识别特定模式,则算法调整权重。这样算法可以使某些参数的影响力更大(通过增加对应的权重)或影响力更小(通过减轻权重)并且相应地调整,直到它确定提供足够正确的数学运算以完全处理数据的权重集。

图8是在神经网络中使用矩阵乘法的示意图。矩阵乘法或matmul是神经网络的训练阶段和推断阶段中常用的方法并且是用于机器学习的核方法。图8在顶部类似于图6,其中在输入层与输出层之间仅示出了单个隐藏层。输入数据被表示为长度与输入节点的数量相对应的向量。权重以权重矩阵来表示,其中列数对应于隐藏层中的中间节点数的数量,并且行数对应于输入节点的数量。通过输入向量和权重矩阵的矩阵乘法来确定输出,其中输出向量的每个元素是输入数据向量与权重矩阵列的点积。

用于执行矩阵乘法的常用技术是使用乘法器-累加器(mac或mac单元)。然而,这具有许多问题。返回参考图7b,在步骤723处通过传播执行矩阵乘法之前,推断阶段在步骤722加载神经网络权重。然而,由于所涉及的数据量可能非常大,因此使用乘法器-累加器进行推断会产生与加载权重相关的若干问题这些问题之一是由于必须使用具有所需位宽的大型mac阵列而引起的高能耗。另一个问题是由于mac阵列的有限大小而引起的高能耗,从而导致逻辑与存储器之间的高数据移动以及比逻辑计算本身中使用的能耗高得多的能耗。

为了帮助避免这些限制,可以用其他存储器技术来替换乘法器-累加器阵列的使用。例如,可以通过利用存储类存储器(scm)的特性(诸如基于以下的特性:基于reram、pcm或mram的存储器单元)在存储器阵列内计算矩阵乘法。这允许经由读取命令提供神经网络输入并且预加载神经权重以用于推断。通过使用存储器内计算,这可以移除逻辑在mac阵列中执行矩阵乘法的需要以及在存储器与mac阵列之间移动数据的需要。

以下考虑基于使用nand型架构的存储器阵列(诸如使用具有电荷存储区域的存储器单元的闪存nand存储器)的实施方案。可以使用多级单元(mlc)结构和单级单元(slc)结构来实现闪存nand存储器,其中以下主要考虑基于slc闪存的实施方案。与mac阵列逻辑相比,使用slc闪存具有若干优点,包括更高的面积/位值、更高的吞吐率、以及由于通过执行阵列内乘法使数据移动最小化而引起的能耗的显著减小。此外,nand闪存结构具有高度可扩展性,支持深度和宽度神经网络。

可用于降低推断过程的计算复杂度的技术是通过使用二值化神经网络(bnn),其中神经网络通过二值权重和激活进行工作。bnn(也称为xnor-net)通过“二值”输入{-1,1}和“二值”权重{-1,1}计算矩阵向量乘法。图9是示出响应于不同输入-权重组合的二值神经网络的输出的表。如最右列所示,当输入和权重匹配时,输出为1;并且当输入和权重不同时,输出为-1。图10至图13示出了在slcnand阵列中实现具有二值输入和二值权重的神经网络

图10示出了用于在一对串联连接的存储器单元fg1和fg2中存储二值权重的单位突触单元的实施方案。在该示例中,每个存储器单元是存储两个状态之一的slc单元,并且可以是较大nand串的一部分。存储器单元fg1和fg2可以是闪存单元,并且通过分别从电荷存储层或浮栅中添加或移除电子来编程或擦除,并且通过将对应的电压v1和v2应用于其控制栅极来感测。当存储器单元fg1和fg2是包括附加单位突触单元或其他存储器单元的较大nand串的一部分时,该对存储器单元可以在nand串上相邻或者被形成nand串的其他存储器单元分开。在下面的讨论中,单位突触单元的单独存储器单元将被表示为相邻,但取决于实施方案,其他布置也是可能的。例如,nand串的上半部分可以保持每个单位突触的第一存储器单元,其中每个单位中突触的第二存储器单元在nand串的下半部分中。对于任何这些布置,当感测到给定单位突触时,相同nand串上的其他存储器单元和选择栅极将被偏置,使得非选定单位突触的两个存储器单元和任何其他存储器单元,连同选择栅极一起导通。

图11示出了用于在slc存储器上存储数据状态的阈值电压的分布。在该实施方案中,擦除负阈值状态被取为“1”状态,并且正阈值状态被取为“0”。图10示出了在存储器单元已经被擦除(这里被分配“1”状态)并且存储器单元被编程为正阈值状态(这里被分配“0”状态)之后的存储器单元集合(诸如擦除块或整个阵列)中的存储器单元的阈值电压的典型分布。如相对于图12和图13进一步讨论的,二值权重将具有单位突触的处于“0”状态的一个存储器单元和处于“1”状态的另一个存储器单元。更一般地,“1”状态不必是负阈值状态,只要这两个状态对应于较低阈值状态(这里被定义为“1”状态)和较高阈值状态(这里被定义为“0”状态)即可。

为了感测具有图11所示的阈值分布的存储器单元,使用第一电压电平vread来区分数据状态,使得如果应用于存储器单元的控制栅极,则存储器单元将在“1”状态下导通并且在“0”状态下不导通。例如,如果“1”状态是负阈值电压状态并且“0”状态是正阈值电压状态,则vread可以取为0v。第二感测电压vpass足够高以使得处于任一状态的存储器单元都将导通。例如,vpass可能是几伏。在下文中,vread将被定义为“0”输入电压值,并且vpass将被定义为“1”输入电压值。

在nand闪存的实施方式中,对于slc和mlc存储器,在程序验证和读取操作中经常使用许多不同的电压电平来进行感测操作。例如,针对给定数据状态的编程验证电平可以从针对相同数据状态的读取电压电平偏移。而且,各种电平可以用于不同操作和状况下的通过电压,以使存储器单元独立于其存储的数据状态而处于导通状态。仅为了下面的讨论,将仅使用单个vread电压来区分数据状态,并且当存储器单元或选择栅极要针对所有存储的数据状态值进入导通状态时,仅使用单个vpass电压。

图12和图13示出了使用一对串联连接的slc存储器单元作为单位突触来实现二值神经网络的实施方案。更具体地,图13分别示出了图9的输入逻辑、权重逻辑和输出逻辑的对应关系,以及输入电压模式、单位突触的存储器单元的阈值电压vth和输出电压的一个实施方案。图12是单位突触对不同情况的响应的示意图。

在图12和图13中,逻辑输入-1对应于输入电压模式v1=vpass=“1”,v2=vread=“0”;并且逻辑输入+1对应于输入电压模式v1=vread=“0”,v2=vpass=“1”。权重逻辑-1对应于存储器单元fg1处于“0”(编程)状态并且fg2处于“1”(擦除状态);并且权重逻辑+1对应于存储器单元fg1处于“1”状态并且fg2处于“0”状态。输出逻辑+1对应于单位突触导通电流icell,从而导致单位突触上的输出电压降δv;并且输出逻辑-1对应于单位突触不导通,从而导致单位突触上的输出电压降很小或没有。

图12示意性地表示输入、权重对的四种情况。在情况1中,输入和权重都匹配值-1。所应用的输入电压模式将vpass的较高输入电压或“1”应用于具有较高vth“0”数据状态的上单元,并且将vread的较低输入电压或“0”应用于具有较低vth“1”数据状态的下单元,使得单元导通并使电流icell经过。在情况2中,输入电压模式相对于情况1反转,其中输入逻辑现在处于+1,而权重处于-1。这导致将较低vpass或“0”电压电平应用于处于较高vth的顶部单元,其因此不会导通(如存储器单元下的x所指示)并且没有可感知的电流流过该对。

对于图12底部的情况3和4,权重值现在为+1,其中上单元中为较低vth状态“1”并且较高vth“0”被编程到下单元中。在情况3中,-1输入电压模式被应用于单位突触,从而导致下单元在接收到较低vread或“0”电压电平时不导通。在情况4中,较高vpass或“1”输入现在应用于下存储器单元,该下存储器单元因此导通,并且单位突触使电流icell经过。

如图12和图13的实施方案中所表示的,使用图10的一对串联连接的存储器单元作为单位突触可以用于实现图9的二值神经网络逻辑表。单位突触可以合并到具有多个此类串联连接的单位突触的较大nand串中。当感测到nand串上的选定单位突触时,可以通过使用vpass电压将相同nand串上的其他单位突触偏置为开启,其中nand串选择栅极也被偏置为开启。

使用nand闪存来存储权重并计算阵列中输入和权重的点积可以用于训练阶段和推断阶段。训练阶段可以如图7a的流程那样进行,其中步骤709将根据需要擦除和重新编程权重以调整权重,直到在步骤707被确定为足够准确。本讨论将主要集中于推断阶段,其中权重先前已在训练过程中确定,并且然后通过将单位突触编程到所确定的二值权重值而加载到nand存储器中。

用于提高二值权重神经网络的准确度的一种技术是通过在三值输入和二值权重神经(tbn)网络中使用3值或三值。在这种tbn网络中,图9的逻辑表仍然适用于-1和+1输入,但现在扩展为包括第三输入值“0”,其输出现在与权重无关并且对于任何一个权重值为“-1”。图14和图15分别对应于图12和图13,其被扩展为包括“0”输入逻辑值作为情况5和6。由于权重仍然是二值的,因此单位突触以及数据状态和输入电压的分配可以与图10和图11所示的相同。

在图15的表中,情况1-4的前四行与图13相同,但扩展为包括用于实现三值输入的“0”输入逻辑值。情况5和6分别对应于权重逻辑值-1和+1,但现在具有输入逻辑值“0”。二值权重值在如前所述的单位突触中实现,但输入逻辑“0”通过将vread的低输入电压或“0”应用于单位突触的两个存储器单元的控制栅极来实现。这在图14中示意性地表示。

图14重复来自图12的情况1-4并添加情况5和6。如情况5所示,当vread或0被应用于两个控制栅极并且顶部存储器单元针对权重-1被编程为高vth“0”数据状态时,单位突触将不导通,如在非导通存储器单元下的x所表示。。对于情况6,针对权重+1,单位突触的下存储器单元被编程为高vth“0”数据状态并且单位突触将再次不导通,如x所示。这在图15中表示,其中情况5和6都具有输出逻辑-1,对应于没有放电电流和没有输出电压降。

图16示出了将单位突触并入nand阵列中,诸如图5的存储器结构326中。图16示出了可以是许多块的较大阵列的一个块,其各自具有连接在源极线1615与对应位线bli1603i之间的多个nand串。典型nand存储器阵列将由许多此类存储器块形成。每个nand串由串联连接在源极侧选择栅极ssli1609i(nand串通过其连接到源极线1615)以及漏极侧选择栅极dsli1607i(nand串通过其连接到对应位线bli1603i)之间的多个串联存储器单元形成。

沿着每个nand串的存储器单元被配对成存储权重wi,j的一对存储器单元的单位突触,如图10的单位突触所示。每个nand串可以具有串联连接的一个或多个单位突触,其中图16的实施方案示出了每个nand串有32个单位突触。每个单位突触可以存储二值权重并且沿着一对字线wl<j>1605j和wl'<j>1605'j连接,该对字线接收对应于图13的电压的对应逻辑输入input<j>以用于二值输入情况并且接收对应于图15的电压的该应逻辑输入以用于三值输入情况。字线对wl<j>1605j和wl'<j>1605'j跨越块的nand串的列。在图16的实施方案中,单位突触的存储器单元在nand串上相邻,但可以使用其他布置以使得突触的存储器单元是交错的而不是连续的;并且虽然这里的讨论集中在每个突触使用两个slc存储器单元的二值权重,但其他实施方案可以使用每单位突触有更多存储器单元、多级存储器单元或两者来存储具有多于二值示例的两个值的神经网络权重。附加地,尽管nand串在所示实施方案中由电荷存储的闪存单元形成,但是也可以使用具有相同阵列架构的其他存储器单元。

可以通过将输入逻辑电压模式应用于对应输入input<j>来确定存储权重wi,j的单位突触1601i,j的输出,而选定nand串的其他存储器单元和选择栅极被偏置为开启。基于输入逻辑和权重逻辑,存储1601i,j权重wi,j的单位突触将导通或不导通,如图15的表所示,这可以由对应读出放大器sai1611i确定。如下面进一步讨论的,对于每个位线,对应的基于计数器的数字求和电csci1613i可以跟踪沿着位线的多少单位突触响应于输入而导通,从而对这些值求和,其中读出放大器和求和电路可以是图5的感测块350的一部分。针对使对应选择栅极ssli1609i和dsli1607i中的选择栅极偏置的所有位线bli1603i,对存储权重wi,j的所有单位突触1601i,j同时应用相同输入input<j>。因此,相同的输入可以同时应用于多个突触。沿着nand串的不同突触可以被顺序地选择以用于感测,其中沿每个位线bli1603i的结果由csci1613i累加。在nand存储器中,页面是读取和编程的单位,其中读取页面和程序页面通常被认为是相同的,诸如沿着字线连接的整体存储器单元或沿着公共字线连接的存储器单元的一些部分。对于编程,沿着单个字线的单位突触的数据仍将被逐字线编程;然而,相对于标准nand存储器操作,其中目标是确定单独存储器单元的数据内容,在字线对中执行对二值权重单位突触的页面的读取,使得在这种情况下,读取页面可以被视为对应于字线对。

图16所示的布置可以用于其中权重和输入都是二值的二值神经网络(bnn),并且用于其中权重是二值的,但输入是三值的三值-二值神经网络(tbn)。返回参照图15,然而对于三值输入情况,读出放大器的输出对于情况2和5都是相同的,并且对于情况3和6也是相同的。如通过比较情况2和5所示,当权重逻辑为-1时,+1输入和0输入都将导致单位突触不导通,使得读出放大器将看不到电压降。类似地,如通过比较情况3和6所示,当权重逻辑为+1时,-1输入和0输入都将导致单位突触不导通,使得读出放大器将看不到电压降。因此,仅基于nand串的导通状态不能区分情况2和5以及情况3和6。

返回参考图8,矩阵乘法是用于神经网络中的推断的输入-权重向量对(输入矩阵的行-列)的乘积(点积)计算的多重和。图17和图18考虑了用于二值神经网络代数的点积的计算的示例,以及如何使用基于计数器的求和数字电路来实现这一点以用于slcnandbnn实施方案。更具体地说,尽管基于图8的表所示的逻辑的二值神经网络基于权重、输入和输出具有值+1或-1,但在由如图16所示的nand阵列实现时,读出放大器将记录为导通(“1”)或不导通(“0”)。因此,对于基于计数器的数字求和电路csci1613i,为了累加结果以计算矩阵乘法的点积需要将基于(+1,-1)的值转换为(1,0)基础,其中-1值被0替换。

图17的表考虑了当向量元素全部被量化为-1/+1时,在顶行上的8元素二值神经网络输入向量ibnn以及在第二行中的8元素二值神经网络权重向量wbnn的示例的点积。第三行示出了ibnn和wbnn的逐元素乘积,当两者匹配时等于+1,并且当它们不同时等于-1。然后,点积基于对这些逐位乘积求和以生成两个向量的点积pbnn_dec。在十进制中,将这些值相加的最终正确结果被计算为pbnn_dec=2。

在图18的表的前两行中,针对与图17中相同的向量,输入向量ibnn和权重向量wbnn被转换成1/0二值基础。图18的第三行示出了对应的读出放大器输出,即两个向量的逐位xnor值,其在值匹配时为1并且在值不同时为0。通过在对应的求和电路csci1613i中累加来自读出放大器sai1611i的这些值以确定其总和,这产生了对应于数字1值的popcountcntbnn_out。在图18的示例中,cntbnn_out=5,其与图17的pbnn_dec=2值不同,因为输入和权重的不匹配的结果现在是0而不是-1。

为了纠正这一点并在二值系统中确定pbnn_dec,将popcount操作数cntbnn_out的输出替换为等式1可以用于获得导出的pbnn_dec

pbnn_dec=2*cntbnn_out–s,(等式1)

其中s是向量的大小。在该示例中,s=8,使得pbnn_dec=2*5-8=2,这是图17的点积的准确pbnn_dec=2。

图19是推断中使用二值神经网络的点积计算的一个实施方案的流程图,如图17和图18所示。在步骤1901处,将第一输入值应用于第一单位突触的权重以执行阵列内乘法。返回参照图16,这对应于将input<j>值应用于在位线bli1603i上存储权重wi,j的对应选定单位突触1601i,j,例如应用于bl0上的最底部单位突触的input<0>。在步骤1903处,对应的读出放大器sai1611i确定nand串是导通(1)还是不导通(0),其对应于输入值和权重值的xnor。步骤1905执行累加,其中感测结果被添加到由计数器csci1613i保持的cntbnn_out值。在步骤1907处,确定是否有更多的输入/权重对来有助于点积,其对应于nand的另一个输入/权重对(或者沿着位线连接的其他块上的其他nand串),并且如果是,则循环回到步骤1901。如果所有输入/权重对已经被计算和求和以用于点积的cntbnn_out,则流程移动到步骤1909以通过使用等式1将popcountcntbnn_out值转换为点积pbnn_dec。(步骤1908区分二值输入情况和三值输入情况,如以下所讨论。)在图17和图18的表的示例中,等式1的s值将是8,而对于如图16所示的整个nand串,s=32。应当注意,图16的nand阵列结构允许沿着每个位线同时执行根据图19的流程的点积计算。

图20和图21考虑了扩展点积计算以用于三值输入-二值权重神经网络的示例,以及如何使用基于计数器的求和数字电路来实现这一点以用于slcnandtbn实施方案。图20对应于图17的bnn情况,但其中输入值现在可以包括0以及-1和+1值。这通过包括-1、0和+1值的三值输入向量itbn的示例来示出。权重也是其值为-1和+1的二值输入向量wtbn。第三行输出值对于-1和+1值如前所述,如果权重和输入匹配则为+1,如果它们不同则为-1,但对于任一权重值,输入为0时输出为0。然后,点积ptbn_dec对应于对输出值求和,在该示例中给出结果1。

图21将这些tbn输入和权重映射到值0和1。如图18所示,对于权重和输入,+1值映射到1并且-1值映射到0。然而现在,0输入值现在也映射到0。这在图21的表中的ibin和wbin行中示出。当ibin和wbin被xnor时,正如读出放大器的电流所示,这可能导致0ibin值的无效输出,诸如在图21的表中具有读出放大器输出1的第六列中看到的,然而图20的表中的对应输出值是0。这导致popcount值cnttbn_dec=4。因此,需要一种方法来调整图16的基于计数器的求和数字电路csci1613i的输出以考虑0个三值输入值的这些异常结果。

如果应用相同的方法(如针对使用等式1的二值情况所使用的),则这也会导致不正确的输出结果:例如,在图20和图21的情况下,等式1给出pbnn_dec=4*2-8=0,而正确的结果是1。然而,通过丢弃对应于0输入的来自读出放大器的xnor输出,可以使用等式2来获得已经调整的正确导出的ptbn_dec

ptbn_dec=2*cnttbn_out–stbn,(等式2)

其中stbn=s-z,s再次是向量的大小并且z是零输入的数量。将此应用于图20和图21的示例,这导致第2、3和6列的(三值)0输入的xnor(读出放大器输出)输出被丢弃,使得z=3,并且stbn=s–z=5。新cnttbn_out=3,因为第6列的xnor值现在由于它来自(三值)0输入而被丢弃。针对tbn使用已调整的导出ptbn_dec可以从等式2获得:ptbn_dec=2*3–5=1。

返回参考图19,步骤1908确定存储器阵列是以二值输入(bnn)还是三值输入(tbn)模式操作。(可以基于zid_enb控制信号建立模式,如下面参考图22进一步描述的。)如果以二值模式,则流程继续到如上所述的步骤1909并使用等式1。如果以三值输入模式,则流程代替地转到步骤1911并使用等式2将popcountcnttbn_out转换为ptbn_dec

图22示出了用于slcnand阵列以支持三值-二值神经网络的求和电路的实施方案。如图22的高级架构所示,引入电路以提供0输入的早期检测,然后丢弃在读出放大器的输出处示出的0输入的影响。更具体地,图23以稍微简化的形式重复图16的许多元件,但还包括零输入检测(zid)单元2201并且示出字线解码器块2211。

zid单元2201连接到字线对wl<j>、wl'<j>以检测0输入数据,其被编码为设置到vread的两个字线。如图15的表所示,对于-1和+1三值输入,选定单位突触的wl<j>和wl'<j>的电压电平将不同,但对于0输入是相同的。对于nand串上的未选择单位突触,wl<j>和wl'<j>都将被设置为与vpass相同的电压电平。因此,对于选定单位突触的0输入,每对字线上的电压电平将匹配;但是对于选定单位突触上的-1或+1输入,其中一个字线对(选定单位突触的那些)将不匹配,而其他字线对(所有选定单位突触的那些)的电压电平将匹配。为了确定字线对wl<j>、wl'<j>的电压电平是否与所应用的输入电压模式匹配,nor逻辑块2203j连接到每个字线对。nor逻辑块2203j的输出连接到组合逻辑电路cl2205以确定所有字线对是否匹配(选定单位突触的0输入)或者其中一个字线对是否匹配(选定单位突触的-1或+1输入)。

基于这些输入,组合逻辑电路cl2205生成块控制信号(bsc),其被提供给每个位线的基于计数器的求和数字电路csci1613i。每个csc单元csci1613i可以增加计数,或者如果检测到0输入,则在累加过程中覆盖读出放大器的输出并在bcc信号的控制下丢弃读出放大器sai1611i的无效输出。zid电路2201不增加nand读取命令的延迟,并且zid逻辑不在nand命令的关键路径中。通过使用可基于例如模式寄存器值的zid_enb控制信号来禁用zid电路2201,可以在图22的三值-二值架构中执行二值神经网络。

图23a和图23b提供了组合逻辑电路cl2205的两个实施方案。在两种情况下,对于m个字线对,m个输入将是m个nor逻辑块2203i的输出并且输出是bcc信号。图23a的实施方案使用or逻辑缩减树来减少来自nor逻辑块2203i的m个输出。图23b的实施方案使用基于三态的电路,其中每个三态元件在a输入处具有1并且在b输入处具有对应nor逻辑块2203i的输出。

图24是在推断中使用三值-二值神经网络的点积计算的一个实施方案的流程图,如图20和图21的表以及图22的阵列架构所示。在步骤2401处开始,并参考图22,存储器阵列接收输入input<j>并将此转换为电压值集合,其中在三值输入中,输入的电压模式可以对应于-1、0或+1输入值;并且在步骤2403处,将电压电平应用于字线对wl<j>、wl'<j>1605j、1605j。当字线跨越选定块的nand串时,对于沿着字线对wl<j>、wl'<j>1605j、1605j连接的单位突触的任何nand串,可以同时执行图24的过程。附加地,在nand结构中,在步骤2405处,将选定nand串的其他元件(ssli1609i、dsli1607i和nand串的未选择存储器单元)偏置为开启,诸如应用vpass。尽管在图24中被列为有序单独步骤的集合,但步骤2403和2405通常由字线解码器2211同时执行。

在步骤2407处,nor逻辑块2203j确定input<j>的电压模式是否匹配0输入,这在该示例的实施方案中对应于对wl<j>、wl'<j>1605j、1605'j的两个字线上的电压电平在vread电压匹配。nor逻辑块的输出在组合逻辑电路cl2205处被接收,并且如果zid_enb信号被断言,则生成bcc信号并将其供应到csc电路1613i。如果以二值输入bnn模式使用电路,则zid_enb信号不被断言,并且csc电路1613i可以如图13的表中所示的那样操作。

步骤2409确定选定单位突触的存储器单元集合的导通性。如图15的表中所示,nand串的导通性对应于单位突触响应于输入的输出逻辑值,并且可以由读出放大器sai1611i确定。基于单位突触的导通性状态和块计数器控制(bcc)信号的值,在步骤2411处,对应csci1613i的计数值递增或不递增,如以上相对于等式2和图21的表格所讨论的,使得省略对ptbn_dec的错误导出贡献,覆盖读出放大器的结果,并且在计数中忽略0输入贡献。

步骤2413确定是否有更多的输入、权重对要添加到点积中,并且如果是,则流程循环回到步骤2401。一旦确定了所有输入、权重对对点积的贡献,就可以在步骤2415处提供点积。然后,在步骤2415处确定的点积的集合可以用作后续神经网络层的输入或者是推断过程的输出。

图25和图26示出了神经网络的示例及其通过nand阵列的实施方式。在上面参考图24描述的过程中,基于对应读出放大器确定单位突触是否导通来确定沿着每个位线的一个单位突触的输入的响应。对于给定块,沿nand串的每个突触的贡献由读出放大器顺序地确定。

图25示出了各自具有四个节点的三个完全连接层的示例,使得层之间的权重矩阵是4×4矩阵。在图25中,节点处的输入被标记为il,i,n,其中l是层索引、i是输入索引,并且n是神经元索引。在图25的示例中,示出了三个层,l=(0,1,2),并且每个层具有四个节点,n=(0,1,2,3)。(输入索引用于并行性增加的一些以下示例。)连接各层的权重矩阵wl,n,n则为4×4,其中用于形成从一层到下一层的输入的点积的矩阵乘法是:

il+1,i,n=il,i,n*wl,n,n

将一层的输入作为字线对上的电压模式应用于单位突触以生成作为下一层的输入的点积值。

图26是这些权重矩阵如何存储在nand阵列的单位突触中以用于矩阵乘法的阵列内计算的示意图。相对于图22,块(这里标记为块0)以存储在单位突触中的权重而不是对应存储器单元对来表示,电压电平输入模式被表示为单个输入,而不是应用于对应字线对的电压电平。然后,沿着多个nand串将一对层之间的权重矩阵存储在多个单位突触中,其中每个nand串的单位突触的数量和nand串的数量对应于权重矩阵的大小。在4×4权重矩阵的该示例中,这对应于沿着4个nand串的4个单位突触。如图26所示,这些是4个相邻位线上的4个相邻单位突触,但这些可以取决于实施方案不同地分布在块上。

相对于图25的表示,权重矩阵以转置的形式存储在nand阵列上。例如,沿着连接到bl0的第一nand串存储从图25的第一层的不同输入到第二层的顶部节点2501中的权重;并且沿着连接到bl3的第四nand串存储到底部节点2503中的权重。为了说明对应关系,在图26中还使用附图标记2501和2503来说明对应权重在这些节点中的放置。

为了计算矩阵乘法的不同点积,以读取命令序列提供数据输入。为了计算单层的输出,则在该示例中,由读出放大器在四个周期内依次读取权重页:

周期1:实现i0,0,0*w0,0,0

周期2:实现i0,0,1*w0,0,1

周期3:实现i0,0,2*w0,0,2

周期4:实现i0,0,3*w0,0,3

其中每个周期对应于图24的流程中的循环,并且在不同实施方案中可以使用不同感测顺序。周期的结果由每个位线上的读出放大器sa感测并累加在csc中,这将减去pcc信号中呈现的值以便丢弃零输入的影响,其中累加过程的延迟在并发乘法运算下隐藏以用于后续周期读取。然后,来自每个位线的输出ptbn_dec将是下一层的输入il+1,i,n

图27示出了神经网络的示例及其通过nand阵列的实施方式,以通过利用单个平面内的多个块来实现跨nand块的高并行性。在上面参考图24和图26描述的过程中,基于对应读出放大器确定单位突触是是否导通来确定对沿每个位线的一个单位突触的输入的响应。图27考虑使用多位读出放大器的实施方案,诸如可区分不同电流电平的放大器,从而允许同时感测单个平面内的多个块。

在目标是确定存储在存储器单元中的数据状态的标准读取操作中,基于所选择的存储器单元是否导通,由读出放大器基于位线上的电流或电压电平进行确定。如果同时感测到沿公共位线的多个单元,其中一些单元导通并且一些不导通,则无法确定哪些单独存储器是导通的存储器单元并建立其对应数据状态。然而,对于来自矩阵乘法中的计数器输出ptbn_dec,它只是响应于所关注的输入导通的单位突触的数量的总和,而不是单独突触所贡献的总和。因此,如果读出放大器能够确定导通突触的数量,则可以同时确定不同块上的多个单位突触响应于对应输入集而产生的响应,由此增加并行性。通过结合多感测放大器,图27的实施方案允许来自不同块的沿着公共位线的多个单位突触被并行地感测。

图27与图26类似地布置,并且再次被示为存储连接图25的前两层的相同4×4权重矩阵。图27与图26的不同之处在于权重现在分布在两个不同块之间,这里标记为块0和块1,但这些可以是相同平面的任意两个块,并且讨论可以扩展到两个以上的块以进一步增加并行性。如上面相对于图25和图26所讨论的,权重矩阵再次以转置形式存储。

图27的不同之处还在于,需要考虑来自所有被感测块的块计数器控制bcc以便为0输入值正确地偏移csc计数。平面计数器控制(pcc)是指示在平面的l个块中存在的零输入的总数的多位信号。由于一次只将一个输入应用于给定块,在读取命令序列的每个周期,每个块最多只有一个零输入被馈送到countbtc块逻辑以确定来自不同块的1的数量。csc减去pcc信号中呈现的值以便改变计数并丢弃并行访问的多个块中存在的零输入的影响。然后可以并行访问共享多比特读出放大器和csc的多个块以计算神经网络的单层的输出。

为了执行矩阵乘法,在读取命令序列中提供数据输入,但为了计算单层的输出,现在并行读取多个块(每个块读取一页单位突触)。在图27的示例中,对于图25的矩阵,其中两个块同时被激活,层的输出可以在2个周期的延迟内计算:

周期1:实现i0,0,0*w0,0,0+i0,0,2*w0,0,2

周期2:实现i0,0,1*w0,0,1+i0,0,3*w0,0,3

其中累加周期2,同时计算周期1的输出,使得在并发乘法运算下隐藏累加延迟。

图28是类似于图19的点积计算的一个实施方案的流程图,但其结合了图27所示的多块并行性。相对于步骤1901,在步骤2801处的多个块的并行感测现在可以在每个循环中同时并发地应用多个输入。在步骤2803处,读出放大器的输出现在是多位值,而不是步骤1903的二值,并且对应于沿位线的导通单位突触的数量。然后在步骤2805处累加多位值,其中步骤2805、2807、2808、2809和2811对应于图19的步骤1905、1907、1908、1909和1911。

为了进一步增加并行性,同时感测的块的数量可以增加到超过图27的示例中所示的两个,直到层的输入的总数。并行性程度可以基于包括以下的考虑因素:将被汲取的所得电流的量,以及多位读出放大器根据可用电流窗口可以合理实现的分辨率水平。

图29示出了可以通过使用可跨多个平面同时针对神经网络输入进行推断的架构来进一步增加并行性的附加实施方案。多平面实施方式可以用于在每个平面内一次感测单个块(如图26所示)或在每个平面内一次感测多个块(如图27所示)。图29的示例再次基于图25的网络的示例,并且在每个平面内使用两个平面和两个块,但平面和块的数量都可以扩展。

图29示出了两个平面,即平面0和平面1,用于其中每个平面有两个块被同时感测的实施方案,其中平面可以在公共管芯上或在不同管芯上。对于平面0和平面1,权重如图27所示的那样存储,并且其他元件也从图27中重复。平面不同之处在于两个平面的输入索引不同,其中针对平面0是输入i0,0,n并且针对平面1是i0,1,n层的后续输入集。

在块级并行性中,存储器可以使用单个平面的多个块来计算单个层的一个输出,其中读取命令可以并行发出以访问如关于图27所描述的多个块,其中在一个周期中对于每个块访问(单位突触的)一页。通过添加图29的平面级并行性,多个平面可以用于通过使用存储在两个平面中的相同权重矩阵来计算单个层的多个输出,并且其中数据可以并行提供给两个平面。在图29的实施方案中,在并行使用具有2个块/平面的2个平面时,可以在2周期延迟内计算单个层的两个输出,其中在乘法(读取命令)下隐藏累加延迟。

通过使用平面流水线也可以增加并行性,其中一个平面的输出(对应于一组节点之间的矩阵乘法)可以用作另一个平面的输入(对应于下一组节点之间的矩阵乘法)。平面流水线还可以是组合块级并行性、平面级并行性或两者以实现更高水平的并行性。

图30示出了用于不同神经网络层的平面流水线的实施方案。返回参考图25的示例,流水线中的第一级存储层0和1之间的权重矩阵,并且下一级存储权重矩阵连接层1和2。图30的示例用于两个级,并且还包括2平面并行性和2块并行性,但这些都是独立的方面并且可以类似地结合更多的流水线级,并且当包括这样的附加并行性时,两个平面块级并行性的程度更高。这些平面可以在单个管芯上或在多个管芯上形成。

在图30的顶部处,平面0,0和平面0,1被布置为图29的实施方案的平面0和平面1,并且接收平面0,0的输入i0,0,n和平面0,1的输入i0,1,n。平面0,0和平面0,1使用块和平面级并行性来计算层0的输出,以便为平面1,0和平面1,1的流水线中的下一级生成输入i1,0,n和i1,1,n。在图30的下部分,平面1,0和平面1,1被布置用于平面0,0和平面0,1中的先前流水线级,但现在存储第二层的权重矩阵条目w1,n,n(再次以转置形式存储)而不是第一层的w0,n,n条目。通过将第一级的输出供应到第二级并将输入i1,0,n和i1,1,n应用于层1的矩阵条目,然后计算层1的输出。

应当注意,不同层的权重可以存储在相同的块、相同的平面或两者中,但这会降低并行性的程度,因为不同层的矩阵乘法不会同时执行。这由图31的实施方案示出。

图31示出了其中不同层的权重可以存储在相同块、相同平面或在该情况下两者中的实施方案。更具体地说,图31示出了一个平面,其中一个平面上有两个层的输入,每个层的权重在相同块中。在该示例中,图30的平面1,0中的层1权重与图30的平面0,0中的层0权重现在处于相同块中。因此,图31中的块0包括层0和层1的input<0>和input<1>的权重,并且块1包括层0和层1的input<2>和input<3>的权重。然后,层0的输入i0,0,n生成层0的i1,0,n的输出pn,然后可以如第一组读取中关于图27所描述的那样计算。i1,0,n用作层1的输入,再次如关于图27所描述的那样,但具有层1的权重矩阵值w1,n,n以生成第二组读取中的层1输出。

上述实施方案提供了在nand存储器结构中实现具有三值输入和二值权重的神经网络的推断阶段的方法和架构。通过使用两个串联连接的存储器单元作为单位突触,可以对神经网络的二值权重编码并将其存储在nand存储器阵列中。可以通过使用简单的零输入检测(zid)电路来使用三值输入,该电路可以通过消除由三值-二值神经网络中的零输入引起的误差来调整基于计数器的求和数字电路的最终输出。当将tbn应用于大型数据集和复杂深度神经网络(dnn)结构时,这些技术允许具有改进推断精度的矩阵乘法的阵列内实施方式。

相对于标准的基于nand的架构,所描述的实施方案为现有的nand存储器架构预设了一些小的特征变化以支持各种级别的计算并行性。对于编程和擦除操作,不需要改变电路。在行、块和/或平面解码器上引入修改以用于控制读取操作以感测存储在双单元的单位突触上的权重,因为这些使用具有不同电压控制的双字线选择,并且对于多块实施方案,使用多个块选择。为了检测0输入,引入了修改的基于计数器的求和数字电路以及零输入检测电路。通过引入多位读出放大器,还可以使用跨块和平面的并行计算。

根据第一组方面,一种装置包括源极线、位线和多个字线。nand串连接在源极线与位线之间,其中nand串包括各自连接到多个字线中的对应字线的多个非易失性存储器单元。读出放大器连接到位线并且被配置成响应于同时应用于多个字线的一组电压电平以确定nand串的导通状态。逻辑电路连接到多个字线,并且计数器电路连接到读出放大器和逻辑电路。计数器电路被配置成响应于由读出放大器确定的导通状态以使计数递增,并且响应于来自指示应用于多个字线的电压电平的模式的逻辑电路的输出以改变计数的递增。

在附加的方面中,非易失性存储器电路包括:非易失性存储器单元阵列,该非易失性存储器单元阵列被布置为nand串并且被配置成存储神经网络的一个或多个二值权重,每个权重存储在公共nand串上的一对非易失性存储器单元中;以及连接到非易失性存储器单元阵列的一个或多个控制电路。一个或多个控制电路被配置成:接收用于神经网络层的一个或多个输入并且将一个或多个输入转换成一组电压模式中的一个或多个对应电压模式;将一个或多个电压模式应用于非易失性存储器单元阵列,从而执行一个或多个输入与权重的阵列内乘法;累加阵列内乘法的结果;以及确定对应于第一电压模式的一个或多个电压模式的数量,并且基于与第一电压模式相对应的一个或多个电压模式的数量来调整阵列内乘法的累加结果。

其他方面包括一种方法,该方法包括接收一个或多个输入值,以及将一个或多个输入值中的每一个转换成对应的电压模式,每个电压模式是包括一组n个电压值的多个电压模式中的一个。将一个或多个电压模式应用于连接到共享位线的一个或多个nand串,其中一次只将电压模式中的一个应用于nand串中的任何单个nand串,并且将每个电压模式的一组n个电压值应用于电压模式应用于的nand串的对应n个存储器单元。该方法还包括:确定连接到共享位线的一个或多个nand串的数量,nand串响应于向其应用一个或多个第一电压模式而导通;确定与多个模式中的预定模式匹配的一个或多个电压模式的数量;基于连接到共享位线的一个或多个nand串的数量使计数递增,nand串响应于向其应用一个或多个电压模式而导通;以及基于与多个模式中的预定模式匹配的所述一个或多个电压模式的数量调整所述第一计数。

出于本文件的目的,说明书中提到“实施方案”、“一个实施方案”、“一些实施方案”或“另一个实施方案”可用于描述不同的实施方案或相同的实施方案。

出于本文档的目的,连接可以是直接连接或间接连接(例如,经由一个或多个其他部件)。在一些情况下,当元件被提及连接或耦接到另一个元件时,该元件可直接连接到另一个元件,或者经由居间元件间接连接到另一个元件。当元件被提及直接连接到另一个元件时,则在该元件与另一个元件之间没有居间元件。如果两个设备是直接连接或间接连接的,则两个设备是“通信”的,使得它们能够在它们之间进行电子信号通信。

出于本文档的目的,术语“基于”可理解为“至少部分地基于”。

出于本文档的目的,在没有附加上下文的情况下,诸如“第一”对象、“第二”对象和“第三”对象的数字术语的使用可能不意味着对象的排序,而是可用于识别目的以识别不同的对象。

出于本文档的目的,对象的术语“组”可指一个或多个对象的“组”。

已经出于举例说明和描述的目的提供了前述详细说明。它并非意图详尽无遗,也不旨在限制所公开的精确形式。根据以上教导内容,很多修改形式和变型形式都是可能的。选择所述实施方案以便最好地解释所建议的技术的原理及其实际应用,从而使本领域的其他技术人员能够在各种实施方案中和适合于设想的具体使用的各种修改中最好地利用它。本发明的范围旨在由所附权利要求书限定。

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