王兴华,王天,王乾,李潇然
(北京理工大学 集成电路与电子学院,北京 100081)
近年随着数据化时代的到来,人工智能产品逐渐优化,基于神经网络的算法日趋复杂,网络内部权重增多,与之对应的数据集更加庞大,造成总线上过高的能耗和较慢的速度,导致计算单元和存储单元分离的传统结构(冯·诺依曼体系)不符合高能效、低能耗的目标,变得不适用于现在的大规模神经网络.因此,存算一体(computing in memory,CIM)结构的提出为实现这种复杂的神经网络结构提供新的可能,随之出现了大量基于存算一体的新型存储器,例如FLASH、MRAM 等,其中,基于阻变存储器的存算一体结构因为自身的特性,在存算一体的领域使用较为广泛[1].
目前,在神经网络的计算中,由于参数位宽度的增加和数据形式的变化,带符号位的浮点运算逐渐成为神经网络的主流计算模式,对内存的要求也越来越高. 同时,3D RRAM 的出现为此类问题提供有效的解决方案[2]. 根据存算一体结构对于存储器的高位宽权重存储、内部独立进行运算的要求,3D RRAM可以完成CNN 卷积层中的带符号位的浮点运算,并且具有很高的集成度.
本文基于现有的3D RRAM 模型,与目前2D 平面阻变忆阻器阵列[3−5]进行了对比,介绍了3D RRAM的结构和阻态. 图1 为3D RRAM 模型的结构,包括写电路和读电路. 3D RRAM 阵列中的每一层中还存储有一个带符号位的浮点数据表. 可以发现,在写过程中存在着一定的特点:当在模型中写入某个RRAM时,周围RRAM 单元的电阻将受到影响,因此有必要添加自适应电路以保持阵列中的权重不变. 在此基础上,本文提出一种3D RRAM 模型的外围读写电路,以达到存算一体的目的,为完成高位宽的带符号位的浮点数运算提供了新方法. 测试结果表明,3D RRAM可以达到0.529 MHz 的读取速度,并且在完成带符号位的浮点数运算时,系统可以达到99.8%的精确度.
图1 3D RRAM 模型及外围电路的整体结构Fig.1 The whole structure of 3D RRAM model and peripheral circuits
目前,3D RRAM 模型分为8 层,每一层阵列中含有8×32 个阻变存储器,用来存储神经网络中的数据权值. 其中,在模型的每一层分别用字线和位线来控制行和列;而对于整体模型来说,需要层选总线来控制模型层数的选择,即当反馈到模型端口时,需要8-bit 字线、32-bit 位线和8-bit 层选总线来控制整个模型中的某一个存储单元进行读写.
在阻态和阻值方面,传统的2D 阻变存储器主要分为高阻态和低阻态,其中高阻态的电阻约为100 kΩ,低阻态的电阻约为10 kΩ[6]. 而3D 阻变存储器模型中的单元可以有多个阻态,并且稳定可测,其中最高阻值为10 GΩ,最低阻值为10 MΩ,电阻处于连续变化、持续可调的状态,可用于存储多位宽的权值,对复杂的CNN 网络更加友好. 目前在使用上来说,常用的是将存储单元分为4 个阻态,阻值分别为10 MΩ、100 MΩ、1 GΩ、10 GΩ. 由此可知,3D RRAM 模型的阻值要比平面存储器阵列的阻值大,这保证了在使用过程中节约能耗的目标,同时可以减弱阻态中阻值漂移对于区分不同阻态的影响,使得阵列在实际使用过程中更容易分辨.
如图2 所示,在外围电路的使用方面,3D 阻变式存储器基于两坐标来定位单层存储阵列中的某个存储单元. 其中,字线(WLs)和位线(BLs)用来确定平面上的某个存储单元. 除此之外,还需要一位层数总线来确定需要使用的层数. 在图2(b)中,平面阵列中的单元主要由晶体管和RRAM(1T1R)[7−8]组成. 而2D 阻变式存储器是基于三坐标来定位单层存储阵列中的某个存储单元的,其中用字线来控制平面上的行坐标,而字线和源线来控制平面上的列坐标[9−11].
图2 3D RRAM 阵列和2D RRAM 阵列结构图Fig.2 3D RRAM array and 2D RRAM array diagram
3D RRAM 和2D RRAM 的比较如表1 所示. 在阻变存储器的写入过程中,平面式阻变存储器模型的正向写入电压大于3 V,反向写入电压大于2.5 V,而3D 阻变式存储器的写入电压更高,一般在4 ~5 V左右. 因此,由于特殊的高写入电压,3D 阻变式存储器的外围写电路中需要加入ESD 保护电路和高耐压保护电路来保护特殊的高电压输入.
表1 3D RRAM 和2D RRAM 的对比Tab.1 Comparison between 3D and 2D RRAM
由于3D RRAM 是一种根据阻值变化存储权重的存储器,因此可通过改写多阻态的3D RRAM 的阻值来选择存储在内部的多位宽权重大小,以此达到3D RRAM 存储的特性. 同时,当在3D RRAM 的一端施加一定的电压信号时,通过完成电压和导纳的乘法运算,在另一端得到一定量的电流信号,该电流信号大小可被认定为是乘法运算的结果,从而实现3D RRAM 运算的目的. 这样既存储权重又进行乘法运算的存储器,可作为存算一体结构的重要组成部分.在卷积神经网络中,阻变式存储器成为重要的存储阵列单元器件,用来保证存储网络权值的同时,对于输入数据集进行一定量的计算,达到手势识别、图片分类等目的.
在图3 中,CNN 主要包括卷积层、池化层和全连接层. 在卷积层部分,主要由多个卷积核参与运算.通过将输入进网络的数据集根据卷积核大小进行切割后,不断与存储不同权值的卷积核进行运算,得到多张特征图,特征图再与同等大小的下一层卷积层进行运算. 卷积层的最终输出结果经过数据整合,再与全链接层中的权值进行卷积,得到输出结果[12−13].
图3 CNN 的架构以及卷积层中传统结构和现代结构的区别Fig.3 The architecture of the CNNs and difference between the traditional and modern structures in the convolutional layer
在整个卷积神经网络中,可以使用3D RRAM 来完成卷积核中的运算. 其中,在运算前,通过外围写电路将多位宽的权重写入3D 模型中,每个存储单元都可以存储大于等于1 bit 的数据. 写入完成后需要对于阵列中的权重进行验证,保证权值的准确性和稳定性. 一般来说,具有该特性的存储器适用于存储带符号位的浮点数的权重并完成相应的运算. 这对于CNN 网络的卷积层操作具有通用性,因此能够实现更复杂的神经网络系统.
针对现有3D 阻变存储器模型来说,在单个写周期内,只需要针对一个阻变式存储器进行电阻态权值的写入. 层选信号模块、WLs 模块和BLs 模块如图4 所示. 由于3D 阻变式存储器的特殊优势,可以一次性写入多位宽的权值. 当单个写周期开始时,所有模块中的写入信号处于开启状态. 在层数选择上面,通过3 位地址信号对于模型中的8 层阵列中选择一层进行控制,打开被选中层的通道,并同时关闭其他层的通道选择信号;在单层阻变式存储器阵列中,通过地址<0:2>选择字线的同时,通过地址<3:7>选择位线,便可确定需要写入的阻变存储器位置. 此时,在字线和位线两端分别加入写入电压,根据需要写入的权值大小确定阻态和开关的状态.
图4 3D RRAM 阵列周围的模块和电压输出单元中的电源电压转换器(PSVC)的架构Fig.4 The modules around 3D RRAM array and the architecture of the power supply voltage converter (PSVC) in voltage-output unit
由于3D RRAM 过高的写电压,需要单独设置,因此在写电路中利用电源电压转换器(PSVC)结构将低电压转换成高电压,满足3D 阻变式存储器阻态改写的条件,最终在输出电压出输出足够高的写电压. 图4 还显示出了电压输出单元的部分和PSVC 的架构. 在单个写入周期中,只有一层中的某个单元可以被写入. 在单个写周期内,只能对单层中的某个电阻进行阻态的改写,因此,完成整个模型写电阻的任务至少需要8×8×32=2 048 个周期.
3D RRAM 模型的外围读电路主要针对的是3D RRAM 的读功能,利用电压作为输入信号,将在阵列中存储的权值以电流的形式表达出来,并通过阵列外部的模数转换器将电流转化成电压的形式读出,表示为存储在阵列内部的信息. 写入和读取 3D RRAM 阵列的过程的时间线如图5 所示.
图5 关于写入和读取 3D RRAM 阵列的过程的时间线Fig.5 The timelines about the process of writing and reading the 3D RRAM array
在3D 阵列的阻变存储器模型中,外围读电路一次性只能选择阵列中的一个阻变存储器进行读取.首先,通过阵列中的三位层地址选择读出存储器的层数,再通过地址<0:7>选择当前层中的存储器坐标,确定读出存储器的位置和权值. 此时,利用一个比写入电压要低的读出电压作为输入信号,与阻变存储器上的阻值进行运算,得到的电流作为外围读电路的输出信号,输出到模数转换模块,并最终转化为与权值相对应的可测电压值,将阵列内写入的信息准确无误的读出来.
在测试过程中,存储器阵列和外围电路连接到印刷电路板(printed circuit board,PCB),龙芯C300B测试芯片用于提供输入信号和时钟,整体连接结构图如图6 所示.
图6 演示系统Fig.6 The demo system
不同RRAM 在不同读取电压下的电阻变化范围和趋势的测试结果如图7 所示. 在图7(a)中,不同曲线表示不同读取电压下相同类型的电阻,图7(b)描述了通过散点图拟合获得的电阻值曲线,表明当读取电压增加时电阻值逐渐增加.
图7 不同读数电压下的多级电阻值Fig.7 The multi-level resistance values under different reading voltages
由坐标点拟合的曲线可知,当读取电压在0.25~2.5 V 之间变化时,3D RRAM 显示多级电阻值. 其中,当读取的电压为0.25 V 时,RRAM 的最小电阻大约为2 MΩ;当读取电压为2.5 V 时,RRAM 的最大电阻约为20 MΩ. 在测试过程中,由于噪声对测试环境的影响无法控制,可以发现,当在相同的测试条件下读取不同的RRAM 时,在2.5 V 电压下不同3D RRAM最大电阻差可达10 MΩ. 然而,由于3D RRAM 的范围为10 MΩ~10 GΩ,此类误差不会影响实际使用.
利用不同读取电压下形成的多级电阻状态,可以分割3D RRAM 单元的电阻值以存储多位权重. 与只能存储1 bit 数据的2D RRAM 相比,3D RRAM 可以在同一区域放置更多的单元,并增加阵列中的数据量.
利用3D RRAM 中的非易失性、CMOS 兼容性和高集成度,RRAM 的主要应用方向为存算一体. 限制RRAM 使用的条件主要有两个指标,即为能效比和速度. 当外围电路中ADC 的速度被释放时,RRAM的读取速度成为整个电路实现的关键指标. 在不考虑外围电路读取速度的情况下,3D RRAM 的最低读取频率为0.529 MHz,即峰值读取速度为1.89×10−6字符/s. 表2 比较了几种内存的性能,与其他存储器相比,3D RRAM 在读取速率方面具有一定的优势.
表2 几种储存器的性能比较Tab.2 Comparison of performance about several kinds of memory
由于每个单元中都有多位数据存储,因此在神经网络中使用3D RRAM 阵列来存储复杂的权值,权值通常是带符号位的浮点数. 此时,通过外围读取电路向阵列输入相同数据形式的信号,可以在整个电路中完成卷积操作. 如图8 所示,在写入和验证权重后,可以通过将图像数据输入到3D RRAM 阵列来得到相应的输出结果. 通过比较输入和输出图像,可以得知,在卷积神经网络中使用3D RRAM 作为存算一体基本单元完成运算的方案是可行的. 经验证可以得知,这种带符号位的浮点数运算卷积系统的精度在99%以上.
图8 3D RRAM 阵列中的带符号位的浮点数卷积运算Fig.8 Signed floating-point numbers convolution operations in 3D RRAM array
本文主要介绍3D RRAM 的结构、外围电路以及多阶阻态特性,3D RRAM 既可以存储多位宽数据又可以进行乘法运算的特性,使其成为存算一体结构的重要组成部分,可完成卷积神经网络中的带符号位的浮点数运算. 通过与其他存储器的比较,该存储器可以在每个单元中存储多比特数据,因此适用于复杂的神经网络,提高了存储效率和集成度. 由测试可知,3D RRAM 可以达到0.529 MHz 的读取速度,并且在完成带符号位的浮点数运算时,系统可以达到99.8%的精确度.