鄭敏華,韓國軍
廣東工業(yè)大學 信息工程學院,廣東 廣州 510006
近幾年,NAND 閃存因為其高存儲容量、快速讀寫、非易失性、低成本以及體積小等優(yōu)點,被廣泛應用于各類電子產品和數(shù)據(jù)存儲中心。隨著閃存工藝水平的發(fā)展,閃存芯片的尺寸由早期的50 nm縮減到20 nm 以下,使得閃存密度顯著增大,相鄰閃存單元距離越來越近,單元間干擾加劇[1?4]。同時,閃存在使用過程中存在不同程度的磨損,氧化層的絕緣性降低導致電子泄露從而引起持久性噪聲,使得存儲單元的閾值電壓隨時間向較低狀態(tài)偏移[5?8],閃存的數(shù)據(jù)可靠性和使用壽命都不同程度降低。為了提高MLC 閃存的傳輸完整性,可對信號進行數(shù)據(jù)后補償或數(shù)字預失真的信號處理方式。其中,Adnan[8]利用閃存持久性噪聲的特點對第一次譯碼錯誤的比特置信度進行修正,并重新譯碼。另一種算法[9]通過大量的譯碼數(shù)據(jù)樣本找出更為準確的閾值量化電壓。然而,這2 種算法復雜度高,鑒于此,本文利用閃存讀取順序和編程順序之間的關系,通過相鄰字線低頁的譯碼信息來輔助改善高頁的糾錯性能,并利用譯碼過程中校驗信息與置信度的關系來輔助改善低頁的糾錯性能。
MLC 閃存信道的建模如圖1 所示,數(shù)據(jù)先通過擦除與編程操作寫入存儲單元。不失一般性,閃存信道的干擾主要包括隨機電報噪聲[10?11]、持久性噪聲和單元間干擾。
圖1 MLC 閃存信道模型
由于閃存的物理結構,不能直接改變閃存單元內的電子數(shù)量來完成編程,因此需要對整個閃存塊進行擦除操作,再進行編程操作。處于擦除狀態(tài)與編程狀態(tài)下的閾值電壓均服從高斯分布。
擦除狀態(tài)下閾值電壓概率密度函數(shù)為
式中: μe和 σe分別表示擦除狀態(tài)下閾值電壓概率密度函數(shù)的均值與標準方差, μp和 σp分別表示編程狀態(tài)下閾值電壓概率密度函數(shù)的均值與標準方差。
當前閃存采用的編程順序為坡度編程順序[5,12?13],如圖2 所示。對每個字線(記為WL i)的高頁(記為MSB)與低頁(記為LSB)都進行編號,并按編號從小到大的順序進行編程。除了WL 0 對應的LSB 的編號為0 和最后的字線WL n 對應的MSB 的編號為2n+1,WL i 對應的LSB 的編號為2i?1,對應的MSB 的編號為2i+2。
圖2 編程順序
隨著編程和擦除次數(shù)的增加,干擾也會增加,導致閾值電壓向兩側漂移,隨機電報噪聲服從指數(shù)分布,其概率密度函數(shù)為
閃存氧化層的絕緣性能會隨著PE的增加而降低,使得電子泄露得更快,導致閾值電壓向左偏移。持久性噪聲服從高斯分布,其概率密度函數(shù)如下:
式中: μt=KS(Vs?x0)·[At(PE)ai+Bt(PE)a0]·log(1+T),其中, Ks、 x0、 At、 Bt、 αi、 α0都是常數(shù), T為持久性噪聲時間; σt=0.3·|μt|。
當閃存結構為干擾較小的全位線結構時,由于相鄰閃存單元間寄生電容耦合效應,如圖3 所示。因此,單元間干擾可用每個閃存單元的閾值電壓變化量的線性組合來表示:
式中 ?V(n)和 γ(n)分別表示第n 個干擾單元的閾值電壓變化量和寄生電容的耦合系數(shù)。其中 γ有2 種形式: γy為垂直相鄰方向和 γxy為斜對角相鄰方向,令 γy=0.08s 和 γxy=0.006s , s為單元間干擾影響因子。
圖3 全位線結構下的單元間干擾示意
閾值電壓的條件概率分布函數(shù)在受到隨機電報噪聲、持久性噪聲和單元間干擾后的數(shù)學表達式為
圖4 是MLC 閃存信道在單元間干擾下的閾值電壓分布圖。狀態(tài)‘11’為擦除狀態(tài),不對相鄰單元產生單元間干擾;狀態(tài)‘10’、‘00’和‘01’為編程狀態(tài),會對相鄰單元造成單元間干擾,因此大部分閃存單元會受到單元間干擾,閾值電壓向右移。
圖4 MLC 閃存信道在單元間干擾下的閾值電壓分布(s=1.6 、 PE=10 000、T =0)
如圖4 所示,狀態(tài)‘11’與‘10’的重疊區(qū)設有3 個量化電壓,同樣地,狀態(tài)‘10’與‘00’的重疊區(qū)和狀態(tài)‘00’與‘01’的重疊區(qū)也設有3 個量化電壓,共9 個 量 化 電 壓 R={Ri|i=1,2,···,9},其 中R2、R5、R8為硬判決電壓。這9 個量化電壓把MLC 閃存閾值電壓劃分為10 個閾值電壓區(qū)域,并按閾值電壓從小到大的順序對閾值電壓區(qū)域進行標號{flag(m)=m|m=1,2,···,10}。
存儲單元上不同頁的錯誤概率是不平衡的,通常高頁(記為MSB)的錯誤概率比低頁(記為LSB)的錯誤概率高,同一個存儲單元上的2 個比特的可靠性不同[2],并用置信度信息表示比特的可靠性,作為譯碼時的初始化信息。為了減少計算復雜度,定義MSB 與LSB 的置信度(可靠度)信息為RMSB(i) 和 RLSB(i),i=1,2,···,N,N 為碼長,如圖5 所示。
圖5 MSB 和LSB 的置信度信息賦值
閃存在相同干擾下通過閾值量化電壓對整體閾值電壓進行量化,并不能確保該量化電壓滿足閃存每一字線的閾值電壓量化,存在量化電壓補償不足和過渡補償?shù)目赡?。如圖6 所示。當閾值電壓右移嚴重時,量化電壓會出現(xiàn)補償不足的情況,使得圓形標注的閃存單元在閾值電壓量化后為‘10’狀態(tài)的單元,因此其置信度信息賦值為RMSB(3)。而當閾值電壓右移不嚴重時,量化電壓會出現(xiàn)過渡補償?shù)那闆r,使得三角形標注的閃存單元在閾值電壓量化后為‘11’狀態(tài)的單元,因此其置信度信息賦值為 RMSB(2)。A2 狀態(tài)重疊區(qū)也出現(xiàn)同樣的置信度賦值錯誤,因此需要對譯碼錯誤的MSB 狀態(tài)重疊區(qū)的置信度進行糾正。
圖6 MLC 閃存信道高頁重疊區(qū)置信度錯誤分析
根據(jù)閃存的讀取機制[4,13?14],可同時讀取到WL i 的MSB 和LSB,由 圖2 可 知,在WL i 的MSB 編程前,WL i+1 的LSB 已完成編程。因此,當讀取到WL i 的MSB 時,結合閃存的編程順序可 讀 取 到WL i 的LSB(記 為LLSB)和WL i+1 的LSB(記為NLSB),則譯碼錯誤的MSB 可利用LLSB和NLSB 的譯碼信息。
首先找到譯碼失敗的MSB 重疊區(qū)中的閃存單元在碼字中的位置U。若譯碼錯誤的MSB 讀取到的LLSB 和NLSB 都譯碼正確,說明LLSB和NLSB 的譯碼信息可靠。則譯碼失敗的MSB 可利用譯碼成功的LLSB 和NLSB 在位置U 上的比特值來確定MSB 重疊區(qū)中置信度賦值錯誤的比特位,并糾正其置信度信息。比如,當RMSB(U)==?5,BLLSB(U)==1時,該閃存單元在[R2,R3]區(qū)間內,若BNLSB(U)==0,說明該字線閾值電壓右移嚴重,使得量化電壓補償不足,則修正其置信度RMSB(U)==RMSB(2)。具體過程如算法1。
算法1 利用相鄰低頁信息輔助修正高頁
1)若MSB 譯碼失敗,LLSB 和NLSB 都沒有譯碼成功,則執(zhí)行步驟5)。
2)讀取LLSB 和NLSB 在譯碼后的比特信息,并分別記為 BLLSB(i)和 BNLSB(i),i=1,2,···,N,其中N 為碼長。找出MSB 的變量節(jié)點{vi∈flag(2,3,8,9)}的位置U, U=find(RMSB==|5|)。
3)讀取并更新MSB 重疊區(qū)中錯誤比特的自信度信息:
4)該譯碼錯誤的MSB 頁重新BP 譯碼。
5)結束。
算法1 的延伸:在譯碼錯誤的MSB 讀取到的LLSB 和NLSB 中,會出現(xiàn)只有一個譯碼成功的情況,則此LLSB 和NLSB 并不完全可靠,在位置U 上的比特值未必正確。而閾值電壓區(qū)域對應的置信度信息表示該閾值電壓區(qū)域的可靠性,因此可判斷LLSB 和NLSB 在位置U 上的置信度信息是否可靠,若可靠則表明LLSB 和NLSB 在位置U 上的比特信息可靠。由已發(fā)表的大量文獻[15?18]可知,LSB 只有一個狀態(tài)重疊區(qū),相比LSB 其他區(qū)域的可靠度要低很多。如果LLSB 或NLSB在位置U 上的置信度信息是LSB 在狀態(tài)重疊區(qū)的置信度信息,則LLSB 和NLSB 在位置U 上的比特信息不可靠,若(RLLSB(U)!=|5|)&&(RNLSB(U)!=|5|),進行算法1 的步驟3)。
由于在算法1 中,找出MSB 狀態(tài)重疊區(qū)置信度信息賦值錯誤的比特需要借助LLSB 和NLSB的譯碼信息,若LLSB 和NLSB 譯碼失敗會影響MSB 的修正,所以需要提高LSB 的糾錯性能。
在狀態(tài)‘10’和狀態(tài)‘00’的重疊區(qū)中,存在著少量LSB 可靠性低的變量節(jié)點 vf∈flag(5,6),該部分變量節(jié)點通過校驗節(jié)點ci的更新[19?20],如式(1);傳遞可靠性低的信息給其他變量節(jié)點 vj?flag(5,6)。變量節(jié)點vj通過更新節(jié)點信息,如式(2);對外傳遞含有vf的信息。并在完成一次譯碼后計算vj的總信息,如式(3);并進行硬判決,如式(4)。
由式(1)~(4)可知,可靠性低的變量節(jié)點有可能會影響到可靠性高的變量節(jié)點總信息的計算及其向外傳遞信息的可靠性,從而影響硬判決,導致可靠性高的比特翻轉。在閃存信道內,LSB 的變量節(jié)點 {vi∈flag(1,10)}的可靠性高,比特錯誤率低[15?17],且比特數(shù)幾乎占了一個碼字的一半。為了防止LSB 的變量節(jié)點 {vi∈flag(1,10)}的比特因為錯誤的變量節(jié)點導致翻轉,對比了255 幀LSB 在不同單元間干擾影響因子s 下,LSB 的變量節(jié)點{vi∈flag(1,10)}在傳統(tǒng)BP 譯碼算法和無算法譯碼(硬判決)下的總比特錯誤量,如表1 所示。
表1 BP 譯碼算法和無譯碼下‘11’和‘01’的總比特錯誤量
對LSB 的變量節(jié)點 {vi∈flag(1,10)}不進行譯碼直接硬判決,由表1 可推斷:
經過BP 譯碼后,LSB 的變量節(jié)點vi∈flag(1,10)中存在少量錯誤比特,則該錯誤比特的總信息與置信度信息的正負關系為
因此根據(jù)式(3),可得出該錯誤比特的總信息與校驗信息的正負關系為
所以該錯誤比特的置信度與校驗信息的正負關系是
由以上推導可知,可靠性高的比特會因接收到可靠性低的校驗信息而發(fā)生翻轉,因此對校驗信息增加可靠性權重a。為了去除可靠性低的校驗信息對可靠性高的比特造成影響,令a=0;若校驗信息可靠則保留,令a =1。具體過程如算法2 所示。
算法2 增加LSB 加權可靠度
2)更新校驗節(jié)點,計算式(1)。
3)更新變量節(jié)點,計算碼字總信息。
if {vj∈flag(1,10)|vj∈LSB}
更新式(2)變量節(jié)點,計算式(3)碼字總信息。
else 計算式(3),并計算校正信息可靠性權重:
4)硬判決式(4)。
5)若滿足 c·HT=0,則停止迭代,否則繼續(xù)重復步驟2)、3),直到滿足 c·HT=0或迭代到最大迭代次數(shù) Imax。
本實驗仿真是在MATLAB 平臺上實現(xiàn),所有算法都基于傳統(tǒng)并行BP 譯碼算法上進行改進,在每一算法中MSB 和LSB 同時參與譯碼,參數(shù)T =0,PE=104。圖7 表示的是在不同的單元間干擾影響因子s 下,MSB 重疊區(qū)域的錯誤比特數(shù)以及MSB 的誤碼率和誤幀率在傳統(tǒng)BP 譯碼算法和算法1 及其延伸算法下的比較。當s=1.4 時,算法1 及其延伸算法的誤碼率降低尤為明顯;當s 逐漸增大,算法1 的延伸比算法1 有更明顯的性能提升。算法1 及其延伸算法通過結合閃存的寫入與讀取機制,通過相鄰字線LSB 的譯碼信息,有效確定譯碼錯誤的MSB 重疊區(qū)中置信度賦值錯誤的比特,并對其進行改正,能大幅度提升譯碼性能。
圖7 BP 算法和算法1 及其延伸算法性能分析
圖8 表示在不同的單元間干擾影響因子s 下,狀態(tài)‘11’和狀態(tài)‘01’在LSB 非重疊區(qū)下的錯誤比特數(shù),以及LSB 的誤碼率和誤幀率在傳統(tǒng)BP 譯碼算法和算法2 下的比較??梢奓SB 中變量節(jié)點vi∈flag(1,10)的校驗信息,在傳統(tǒng)BP 譯碼算法下,受到可靠度低的變量節(jié)點的影響很大,導致少部分該變量節(jié)點的比特發(fā)生翻轉。算法2 通過這部分變量節(jié)點的置信度信息與校驗信息之積的正負信息來計算校驗信息的可靠性權重,能有效降低這部分的錯誤比特數(shù),提高譯碼性能。
圖8 BP 算法和算法2 性能分析
根據(jù)高密度NAND 閃存數(shù)據(jù)的寫入與讀取機制,以及高低頁比特之間的關聯(lián)關系,提出了一種融合相鄰單元高低頁存儲可靠性的BP 譯碼算法。
1)算法1 利用讀取順序與編程順序之間的關系,通過相鄰字線的譯碼信息來輔助改善高頁的糾錯性能。由于算法1 性能的改進需通過相鄰字線,因此提出算法2 來改善相鄰字線的糾錯性能。
2)算法2 利用了可靠性較高的比特位上的總信息求和,對該比特位接收到的校驗信息增加可靠性權重,保證可靠性較高的比特位向外傳遞信息的可靠性,并防止可靠性較高的比特位翻轉。理論分析以及數(shù)據(jù)的仿真表明該算法能夠有效提高糾錯性能。