热度 10| |
RRAM阵列 阻变随机存储器(RRAM)是一种基于材料阻值变化来记录存储数据信息的非易失性存储器件。其核心特性是近乎线性的电流-电压(I-V)特性,即忆阻特性。 由于RRAM的高密度,高写入速度和三维集成优势,有很多学术工作将RRAM视为存内计算的主要器件之一,并广泛应用于模拟存内计算芯片样片的设计。(C. H. Lien et al., 2014.7021431) 本文将介绍RRAM模拟存内计算原理,RRAM模拟存内计算的实现和RRAM模拟存内计算面临的挑战/困难,文末附上RRAM基本工作原理。 (下次还会介绍RRAM数字存内计算) RRAM模拟存内计算原理 RRAM模拟存内计算原理(A. Shafiee et al., 2016) 传统的RRAM存算比较传统的方式是通过模拟计算来实现深度学习中计算量巨大的乘加计算(一般用在全连接/卷积计算或者矩阵乘法中)。 如上图(a)所示,G1和G2分别是RRAM的存储单元,对应电导值分别为G1和G2。这些电导值可以通过RRAM单元的编程实现。此时在两者的字线(Word Line)上分别加电压V1和V2(一般由DAC转换数字信号产生),则此时流过位线的电流I0=I00+I01=V0xG00+V1xG01。则I0代表了全连接计算中的乘加计算之和。这种模拟计算模式可以用于加速计算神经网络中的矩阵的乘累加(Multiply and Accumulation,MAC)计算。 RRAM模拟存内计算的等效矩阵计算 当然,这样的计算模式主要适用于矩阵乘法。对于卷积这类共享权重的乘加计算,这种计算方式的计算效率会略有降低(依然比传统MAC阵列计算效率高)。 RRAM模拟存内计算的实现 RRAM模拟存内计算芯片整体架构 上图为一个典型的RRAM模拟存内计算芯片架构(P. Chiet al., 2016)。芯片由多个存算Bank组成,每个存算Bank中包括了计算子阵列(同时具备卷积计算和存储功能)、存储子阵列、Buffer子阵列三个子阵列。 其中计算子阵列负责主要计算,Buffer子阵列作为中间数据的缓存和交换,存储子阵列负责数据的保存,互联通道除了在计算子阵列与Buffer子阵列之间进行数据互联外,也提供了矩阵的数据调整等功能(例如向量转置等),全局行译码器则为三个子阵列提供选择控制信号(选中的子阵列才操作,注意要与子阵列的字线译码驱动区分开)。整个Bank由Bank控制器控制读写和计算的功能与时序。 RRAM模拟存内计算芯片计算流示意(修改自P. Chi et al., 2016) (蓝色线为数据读写路径,黄色线为数据计算路径) 计算子阵列主要由以下对称的几个模块构成: 1) RRAM计算阵列 一个计算子阵列中有多个成对的RRAM计算阵列,这组成对的阵列分别正权重和负权重的存内矩阵计算。(形如I0=I00+I01=V0xG00+V1xG01) 2) 多电平字线译码驱动 负责产生RRAM计算阵列所需的字线电压。完成相当于传统存储器字线译码器+DAC的功能。 3) 列选通/模拟减法/Sigmoid 负责当前计算的位线的选通,完成正负阵列相减的模拟减法和Sigmoid等操作。 4) 多值输出灵敏放大器 作为关键的加和电流保持、读出中间通道计算结果(ADC功能),并完成激活(例如ReLU)、池化(例如Max Pooling)等功能。 存储子阵列的结构与计算子阵列基本一致。 计算时,数据从存储子阵列中读出,放入RRAM计算阵列中进行矩阵计算,然后通过列选通,正阵列减去负阵列的值,如果有Sigmoid就进行模拟的Sigmoid计算。之后进入多值输出灵敏放大器,读出中间计算的加和,之后进行ReLU和Max Pooling(如果有)计算。 RRAM模拟存内计算面临的挑战/困难 虽然近年来有大量基于RRAM的存内模拟计算芯片工作,但RRAM存内模拟计算依然面临工程化落地的挑战(也可以视为现阶段的不足)。包括: 1) 工艺/温度浮动的挑战 RRAM器件容易受到工艺浮动的影响,以及环境温度浮动的影响,使得其I-V特性曲线发生变化。特别是同一器件中的不同RRAM单元具有统计上不同的I-V特性(电阻浮动可以超过20%),这使得RRAM的模拟读写容易出现错误和可靠性问题。(E. Brum et al., 2021) 2) 编程代价 相对于SRAM和DRAM这些易失性存储器,RRAM需要更高的编程/复位电压(F. M. Puglisi et al., 2015// J. Chen, et al.,2020),再加上模拟存内计算需要相对较高的编程精度,这使得RRAM模拟存内计算需要在编程后进行验证/补充编程来确保写入值的准确性,这使得写入操作消耗的实际功耗和时间大于SRAM等易失性存储器。而且写-验证(Write-Verification)这类设计对于高速电路设计而言并不友好,意味着数据的读写很可能需要一个不确定的等待时间甚至写入失败。 3) 写入耐久性(Endurance) 与易失性存储器相比,RRAM的写入耐久性(一般是106到108)有较低的天花板,特别是受到工艺浮动的影响,老化的RRAM存储单元容易出现非线性和写入错误的影响,进而导致模拟计算的错误。(Z. Swaidan et al., 2019,) 4) 与卷积计算的不兼容 卷积计算 目前主流的深度学习模型都采用卷积作为矩阵类计算的主力算子,与模拟存内计算对应的矩阵乘法差别较大。 卷积计算所需的矩阵计算模式 将卷积计算与模拟存内计算对应的矩阵乘法对比,可以看到卷积计算中有大量的权重共享操作(指某个权重值在同一个特征图的同一通道中重复参与计算),具有二维乘法的特点(相对矩阵乘法的一维特点)。这样在RRAM模拟存算中就容易出现大量的存储单元电导值重复或者大量的字线电压值重复,降低权重参数存储的密度和存算的计算效率。同时,在模拟存内计算中,需要两个尺寸对称权重存储阵列,分别保存正权重和负权重,这也进一步导致了存储空间的浪费。(Z. Dong et al., 2019)相对而言,如果使用存内逻辑的架构,或者采用光忆阻器,则可以较好的规避这种存储资源的浪费。 附:RRAM基本工作原理 RRAM本身具有高密度、高速和低功耗的特点。在整体结构上,单个RRAM存储单元由顶电极(Top Electrode)、金属氧化层(Metal Oxide)和(Bottom Electrode)底电极组成。 RRAM存储单元基本结构 相对于传统的硅基闪存器件,RRAM的读写速度、可靠性(包括耐久性Endurance和保持性Retention)都具备明显的优势,特别是RRAM在尺寸微缩(Scaling Down )方面相对于闪存和其他新型非易失存储具有明显的优势,具有非常广阔的工业化应用前景。 (1) 在未加电压时,由于电极间氧化层默认绝缘,RRAM两端为高阻抗状态(HRS); (2) 在两端加一电压,若该电压超过形成电压(Forming Voltage)时,则氧化层中间形成导电纤维(Conductive Filament, CF),从而进入低阻抗状态(LRS)(一般阻值比HRS约低三个数量级); (3)若给处于LRS的RRAM两端加一反向的电压,器件将从LRS再次变为HRS阻态。(以Bipolar型为例) RRAM 的I-V特性曲线 基于这种线性记忆的I-V特性,一个RRAM单元可以背编程为2N(N一般取1~5)种不同的记忆值,类似于闪存中的MLC或TLC单元。 单个RRAM单元以二维或者三维阵列的形式组织起来。RRAM阵列可以是1T1R结构(1T1R代表每个存储单元由一个晶体管和一个阻变存储器件组成)或1TnR结构(一个晶体管控制多个阻变存储器件的列选中)。 两种典型的RRAM阵列结构