王興華,王天,王乾,李瀟然
(北京理工大學(xué) 集成電路與電子學(xué)院,北京 100081)
近年隨著數(shù)據(jù)化時(shí)代的到來,人工智能產(chǎn)品逐漸優(yōu)化,基于神經(jīng)網(wǎng)絡(luò)的算法日趨復(fù)雜,網(wǎng)絡(luò)內(nèi)部權(quán)重增多,與之對應(yīng)的數(shù)據(jù)集更加龐大,造成總線上過高的能耗和較慢的速度,導(dǎo)致計(jì)算單元和存儲單元分離的傳統(tǒng)結(jié)構(gòu)(馮·諾依曼體系)不符合高能效、低能耗的目標(biāo),變得不適用于現(xiàn)在的大規(guī)模神經(jīng)網(wǎng)絡(luò).因此,存算一體(computing in memory,CIM)結(jié)構(gòu)的提出為實(shí)現(xiàn)這種復(fù)雜的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)提供新的可能,隨之出現(xiàn)了大量基于存算一體的新型存儲器,例如FLASH、MRAM 等,其中,基于阻變存儲器的存算一體結(jié)構(gòu)因?yàn)樽陨淼奶匦?,在存算一體的領(lǐng)域使用較為廣泛[1].
目前,在神經(jīng)網(wǎng)絡(luò)的計(jì)算中,由于參數(shù)位寬度的增加和數(shù)據(jù)形式的變化,帶符號位的浮點(diǎn)運(yùn)算逐漸成為神經(jīng)網(wǎng)絡(luò)的主流計(jì)算模式,對內(nèi)存的要求也越來越高. 同時(shí),3D RRAM 的出現(xiàn)為此類問題提供有效的解決方案[2]. 根據(jù)存算一體結(jié)構(gòu)對于存儲器的高位寬權(quán)重存儲、內(nèi)部獨(dú)立進(jìn)行運(yùn)算的要求,3D RRAM可以完成CNN 卷積層中的帶符號位的浮點(diǎn)運(yùn)算,并且具有很高的集成度.
本文基于現(xiàn)有的3D RRAM 模型,與目前2D 平面阻變憶阻器陣列[3?5]進(jìn)行了對比,介紹了3D RRAM的結(jié)構(gòu)和阻態(tài). 圖1 為3D RRAM 模型的結(jié)構(gòu),包括寫電路和讀電路. 3D RRAM 陣列中的每一層中還存儲有一個(gè)帶符號位的浮點(diǎn)數(shù)據(jù)表. 可以發(fā)現(xiàn),在寫過程中存在著一定的特點(diǎn):當(dāng)在模型中寫入某個(gè)RRAM時(shí),周圍RRAM 單元的電阻將受到影響,因此有必要添加自適應(yīng)電路以保持陣列中的權(quán)重不變. 在此基礎(chǔ)上,本文提出一種3D RRAM 模型的外圍讀寫電路,以達(dá)到存算一體的目的,為完成高位寬的帶符號位的浮點(diǎn)數(shù)運(yùn)算提供了新方法. 測試結(jié)果表明,3D RRAM可以達(dá)到0.529 MHz 的讀取速度,并且在完成帶符號位的浮點(diǎn)數(shù)運(yùn)算時(shí),系統(tǒng)可以達(dá)到99.8%的精確度.
圖1 3D RRAM 模型及外圍電路的整體結(jié)構(gòu)Fig.1 The whole structure of 3D RRAM model and peripheral circuits
目前,3D RRAM 模型分為8 層,每一層陣列中含有8×32 個(gè)阻變存儲器,用來存儲神經(jīng)網(wǎng)絡(luò)中的數(shù)據(jù)權(quán)值. 其中,在模型的每一層分別用字線和位線來控制行和列;而對于整體模型來說,需要層選總線來控制模型層數(shù)的選擇,即當(dāng)反饋到模型端口時(shí),需要8-bit 字線、32-bit 位線和8-bit 層選總線來控制整個(gè)模型中的某一個(gè)存儲單元進(jìn)行讀寫.
在阻態(tài)和阻值方面,傳統(tǒng)的2D 阻變存儲器主要分為高阻態(tài)和低阻態(tài),其中高阻態(tài)的電阻約為100 kΩ,低阻態(tài)的電阻約為10 kΩ[6]. 而3D 阻變存儲器模型中的單元可以有多個(gè)阻態(tài),并且穩(wěn)定可測,其中最高阻值為10 GΩ,最低阻值為10 MΩ,電阻處于連續(xù)變化、持續(xù)可調(diào)的狀態(tài),可用于存儲多位寬的權(quán)值,對復(fù)雜的CNN 網(wǎng)絡(luò)更加友好. 目前在使用上來說,常用的是將存儲單元分為4 個(gè)阻態(tài),阻值分別為10 MΩ、100 MΩ、1 GΩ、10 GΩ. 由此可知,3D RRAM 模型的阻值要比平面存儲器陣列的阻值大,這保證了在使用過程中節(jié)約能耗的目標(biāo),同時(shí)可以減弱阻態(tài)中阻值漂移對于區(qū)分不同阻態(tài)的影響,使得陣列在實(shí)際使用過程中更容易分辨.
如圖2 所示,在外圍電路的使用方面,3D 阻變式存儲器基于兩坐標(biāo)來定位單層存儲陣列中的某個(gè)存儲單元. 其中,字線(WLs)和位線(BLs)用來確定平面上的某個(gè)存儲單元. 除此之外,還需要一位層數(shù)總線來確定需要使用的層數(shù). 在圖2(b)中,平面陣列中的單元主要由晶體管和RRAM(1T1R)[7?8]組成. 而2D 阻變式存儲器是基于三坐標(biāo)來定位單層存儲陣列中的某個(gè)存儲單元的,其中用字線來控制平面上的行坐標(biāo),而字線和源線來控制平面上的列坐標(biāo)[9?11].
圖2 3D RRAM 陣列和2D RRAM 陣列結(jié)構(gòu)圖Fig.2 3D RRAM array and 2D RRAM array diagram
3D RRAM 和2D RRAM 的比較如表1 所示. 在阻變存儲器的寫入過程中,平面式阻變存儲器模型的正向?qū)懭腚妷捍笥? V,反向?qū)懭腚妷捍笥?.5 V,而3D 阻變式存儲器的寫入電壓更高,一般在4 ~5 V左右. 因此,由于特殊的高寫入電壓,3D 阻變式存儲器的外圍寫電路中需要加入ESD 保護(hù)電路和高耐壓保護(hù)電路來保護(hù)特殊的高電壓輸入.
表1 3D RRAM 和2D RRAM 的對比Tab.1 Comparison between 3D and 2D RRAM
由于3D RRAM 是一種根據(jù)阻值變化存儲權(quán)重的存儲器,因此可通過改寫多阻態(tài)的3D RRAM 的阻值來選擇存儲在內(nèi)部的多位寬權(quán)重大小,以此達(dá)到3D RRAM 存儲的特性. 同時(shí),當(dāng)在3D RRAM 的一端施加一定的電壓信號時(shí),通過完成電壓和導(dǎo)納的乘法運(yùn)算,在另一端得到一定量的電流信號,該電流信號大小可被認(rèn)定為是乘法運(yùn)算的結(jié)果,從而實(shí)現(xiàn)3D RRAM 運(yùn)算的目的. 這樣既存儲權(quán)重又進(jìn)行乘法運(yùn)算的存儲器,可作為存算一體結(jié)構(gòu)的重要組成部分.在卷積神經(jīng)網(wǎng)絡(luò)中,阻變式存儲器成為重要的存儲陣列單元器件,用來保證存儲網(wǎng)絡(luò)權(quán)值的同時(shí),對于輸入數(shù)據(jù)集進(jìn)行一定量的計(jì)算,達(dá)到手勢識別、圖片分類等目的.
在圖3 中,CNN 主要包括卷積層、池化層和全連接層. 在卷積層部分,主要由多個(gè)卷積核參與運(yùn)算.通過將輸入進(jìn)網(wǎng)絡(luò)的數(shù)據(jù)集根據(jù)卷積核大小進(jìn)行切割后,不斷與存儲不同權(quán)值的卷積核進(jìn)行運(yùn)算,得到多張?zhí)卣鲌D,特征圖再與同等大小的下一層卷積層進(jìn)行運(yùn)算. 卷積層的最終輸出結(jié)果經(jīng)過數(shù)據(jù)整合,再與全鏈接層中的權(quán)值進(jìn)行卷積,得到輸出結(jié)果[12?13].
圖3 CNN 的架構(gòu)以及卷積層中傳統(tǒng)結(jié)構(gòu)和現(xiàn)代結(jié)構(gòu)的區(qū)別Fig.3 The architecture of the CNNs and difference between the traditional and modern structures in the convolutional layer
在整個(gè)卷積神經(jīng)網(wǎng)絡(luò)中,可以使用3D RRAM 來完成卷積核中的運(yùn)算. 其中,在運(yùn)算前,通過外圍寫電路將多位寬的權(quán)重寫入3D 模型中,每個(gè)存儲單元都可以存儲大于等于1 bit 的數(shù)據(jù). 寫入完成后需要對于陣列中的權(quán)重進(jìn)行驗(yàn)證,保證權(quán)值的準(zhǔn)確性和穩(wěn)定性. 一般來說,具有該特性的存儲器適用于存儲帶符號位的浮點(diǎn)數(shù)的權(quán)重并完成相應(yīng)的運(yùn)算. 這對于CNN 網(wǎng)絡(luò)的卷積層操作具有通用性,因此能夠?qū)崿F(xiàn)更復(fù)雜的神經(jīng)網(wǎng)絡(luò)系統(tǒng).
針對現(xiàn)有3D 阻變存儲器模型來說,在單個(gè)寫周期內(nèi),只需要針對一個(gè)阻變式存儲器進(jìn)行電阻態(tài)權(quán)值的寫入. 層選信號模塊、WLs 模塊和BLs 模塊如圖4 所示. 由于3D 阻變式存儲器的特殊優(yōu)勢,可以一次性寫入多位寬的權(quán)值. 當(dāng)單個(gè)寫周期開始時(shí),所有模塊中的寫入信號處于開啟狀態(tài). 在層數(shù)選擇上面,通過3 位地址信號對于模型中的8 層陣列中選擇一層進(jìn)行控制,打開被選中層的通道,并同時(shí)關(guān)閉其他層的通道選擇信號;在單層阻變式存儲器陣列中,通過地址<0:2>選擇字線的同時(shí),通過地址<3:7>選擇位線,便可確定需要寫入的阻變存儲器位置. 此時(shí),在字線和位線兩端分別加入寫入電壓,根據(jù)需要寫入的權(quán)值大小確定阻態(tài)和開關(guān)的狀態(tài).
圖4 3D RRAM 陣列周圍的模塊和電壓輸出單元中的電源電壓轉(zhuǎn)換器(PSVC)的架構(gòu)Fig.4 The modules around 3D RRAM array and the architecture of the power supply voltage converter (PSVC) in voltage-output unit
由于3D RRAM 過高的寫電壓,需要單獨(dú)設(shè)置,因此在寫電路中利用電源電壓轉(zhuǎn)換器(PSVC)結(jié)構(gòu)將低電壓轉(zhuǎn)換成高電壓,滿足3D 阻變式存儲器阻態(tài)改寫的條件,最終在輸出電壓出輸出足夠高的寫電壓. 圖4 還顯示出了電壓輸出單元的部分和PSVC 的架構(gòu). 在單個(gè)寫入周期中,只有一層中的某個(gè)單元可以被寫入. 在單個(gè)寫周期內(nèi),只能對單層中的某個(gè)電阻進(jìn)行阻態(tài)的改寫,因此,完成整個(gè)模型寫電阻的任務(wù)至少需要8×8×32=2 048 個(gè)周期.
3D RRAM 模型的外圍讀電路主要針對的是3D RRAM 的讀功能,利用電壓作為輸入信號,將在陣列中存儲的權(quán)值以電流的形式表達(dá)出來,并通過陣列外部的模數(shù)轉(zhuǎn)換器將電流轉(zhuǎn)化成電壓的形式讀出,表示為存儲在陣列內(nèi)部的信息. 寫入和讀取 3D RRAM 陣列的過程的時(shí)間線如圖5 所示.
圖5 關(guān)于寫入和讀取 3D RRAM 陣列的過程的時(shí)間線Fig.5 The timelines about the process of writing and reading the 3D RRAM array
在3D 陣列的阻變存儲器模型中,外圍讀電路一次性只能選擇陣列中的一個(gè)阻變存儲器進(jìn)行讀取.首先,通過陣列中的三位層地址選擇讀出存儲器的層數(shù),再通過地址<0:7>選擇當(dāng)前層中的存儲器坐標(biāo),確定讀出存儲器的位置和權(quán)值. 此時(shí),利用一個(gè)比寫入電壓要低的讀出電壓作為輸入信號,與阻變存儲器上的阻值進(jìn)行運(yùn)算,得到的電流作為外圍讀電路的輸出信號,輸出到模數(shù)轉(zhuǎn)換模塊,并最終轉(zhuǎn)化為與權(quán)值相對應(yīng)的可測電壓值,將陣列內(nèi)寫入的信息準(zhǔn)確無誤的讀出來.
在測試過程中,存儲器陣列和外圍電路連接到印刷電路板(printed circuit board,PCB),龍芯C300B測試芯片用于提供輸入信號和時(shí)鐘,整體連接結(jié)構(gòu)圖如圖6 所示.
圖6 演示系統(tǒng)Fig.6 The demo system
不同RRAM 在不同讀取電壓下的電阻變化范圍和趨勢的測試結(jié)果如圖7 所示. 在圖7(a)中,不同曲線表示不同讀取電壓下相同類型的電阻,圖7(b)描述了通過散點(diǎn)圖擬合獲得的電阻值曲線,表明當(dāng)讀取電壓增加時(shí)電阻值逐漸增加.
圖7 不同讀數(shù)電壓下的多級電阻值Fig.7 The multi-level resistance values under different reading voltages
由坐標(biāo)點(diǎn)擬合的曲線可知,當(dāng)讀取電壓在0.25~2.5 V 之間變化時(shí),3D RRAM 顯示多級電阻值. 其中,當(dāng)讀取的電壓為0.25 V 時(shí),RRAM 的最小電阻大約為2 MΩ;當(dāng)讀取電壓為2.5 V 時(shí),RRAM 的最大電阻約為20 MΩ. 在測試過程中,由于噪聲對測試環(huán)境的影響無法控制,可以發(fā)現(xiàn),當(dāng)在相同的測試條件下讀取不同的RRAM 時(shí),在2.5 V 電壓下不同3D RRAM最大電阻差可達(dá)10 MΩ. 然而,由于3D RRAM 的范圍為10 MΩ~10 GΩ,此類誤差不會影響實(shí)際使用.
利用不同讀取電壓下形成的多級電阻狀態(tài),可以分割3D RRAM 單元的電阻值以存儲多位權(quán)重. 與只能存儲1 bit 數(shù)據(jù)的2D RRAM 相比,3D RRAM 可以在同一區(qū)域放置更多的單元,并增加陣列中的數(shù)據(jù)量.
利用3D RRAM 中的非易失性、CMOS 兼容性和高集成度,RRAM 的主要應(yīng)用方向?yàn)榇嫠阋惑w. 限制RRAM 使用的條件主要有兩個(gè)指標(biāo),即為能效比和速度. 當(dāng)外圍電路中ADC 的速度被釋放時(shí),RRAM的讀取速度成為整個(gè)電路實(shí)現(xiàn)的關(guān)鍵指標(biāo). 在不考慮外圍電路讀取速度的情況下,3D RRAM 的最低讀取頻率為0.529 MHz,即峰值讀取速度為1.89×10?6字符/s. 表2 比較了幾種內(nèi)存的性能,與其他存儲器相比,3D RRAM 在讀取速率方面具有一定的優(yōu)勢.
表2 幾種儲存器的性能比較Tab.2 Comparison of performance about several kinds of memory
由于每個(gè)單元中都有多位數(shù)據(jù)存儲,因此在神經(jīng)網(wǎng)絡(luò)中使用3D RRAM 陣列來存儲復(fù)雜的權(quán)值,權(quán)值通常是帶符號位的浮點(diǎn)數(shù). 此時(shí),通過外圍讀取電路向陣列輸入相同數(shù)據(jù)形式的信號,可以在整個(gè)電路中完成卷積操作. 如圖8 所示,在寫入和驗(yàn)證權(quán)重后,可以通過將圖像數(shù)據(jù)輸入到3D RRAM 陣列來得到相應(yīng)的輸出結(jié)果. 通過比較輸入和輸出圖像,可以得知,在卷積神經(jīng)網(wǎng)絡(luò)中使用3D RRAM 作為存算一體基本單元完成運(yùn)算的方案是可行的. 經(jīng)驗(yàn)證可以得知,這種帶符號位的浮點(diǎn)數(shù)運(yùn)算卷積系統(tǒng)的精度在99%以上.
圖8 3D RRAM 陣列中的帶符號位的浮點(diǎn)數(shù)卷積運(yùn)算Fig.8 Signed floating-point numbers convolution operations in 3D RRAM array
本文主要介紹3D RRAM 的結(jié)構(gòu)、外圍電路以及多階阻態(tài)特性,3D RRAM 既可以存儲多位寬數(shù)據(jù)又可以進(jìn)行乘法運(yùn)算的特性,使其成為存算一體結(jié)構(gòu)的重要組成部分,可完成卷積神經(jīng)網(wǎng)絡(luò)中的帶符號位的浮點(diǎn)數(shù)運(yùn)算. 通過與其他存儲器的比較,該存儲器可以在每個(gè)單元中存儲多比特?cái)?shù)據(jù),因此適用于復(fù)雜的神經(jīng)網(wǎng)絡(luò),提高了存儲效率和集成度. 由測試可知,3D RRAM 可以達(dá)到0.529 MHz 的讀取速度,并且在完成帶符號位的浮點(diǎn)數(shù)運(yùn)算時(shí),系統(tǒng)可以達(dá)到99.8%的精確度.