目前SSD中ECC糾錯代碼主要兩種BCH和LDPC。不過,隨著SSD對ECC糾錯技術(shù)要求越來越高,BCH糾錯碼開始有些吃力,所以,LDPC糾錯碼是發(fā)展趨勢,也是最新最主流的糾錯碼。
我們先回顧一下NAND閃存的基礎(chǔ)知識。在這里以MLC NAND為例。在MLC NAND中,有四個Vt level. 如下圖, 隨著P/E cycles的增加,MLC NAND的vt電壓分布就會變大變寬,如下圖, 當(dāng)P/E cycle到了一定的數(shù)值之后,MLC NAND不同vt level之間就會有交叉,這樣的話,就會引起數(shù)據(jù)讀取錯誤,這時,就需要請出LDPC糾錯碼了。
LDPC,是Low Density Parity Check Code的簡稱,翻譯為中文就是“低密度奇偶校驗碼”。在1963年,LDPC第一次出現(xiàn)在R.G.Gallager博士發(fā)表的論文之中。LDPC碼是一種稀疏校驗矩陣線性分組碼。為何稱為“稀疏”呢?因為校驗矩陣中的1要遠小于0的數(shù)目,這樣做的好處就是,譯碼復(fù)雜度低,結(jié)構(gòu)非常靈活。 在LDPC編碼中,會用到一個叫做H矩陣的校驗矩陣(Parity Check Matrix),比如,我們來看一個交單的H矩陣: 為了可以更加直觀的理解H矩陣,可以借助Tanner圖,來表示H矩陣: 左側(cè)V1~V7是變量節(jié)點,右側(cè)C1~C3是校驗節(jié)點。變量節(jié)點和校驗節(jié)點之間的連接線稱為沿(edge),也代表這H矩陣中的1. 每個節(jié)點上連接線(edge)的數(shù)目稱為節(jié)點維度(Degree). LDPC編碼分為正則編碼和非正則編碼。正則編碼中,橫向和縱向中1的個數(shù)是固定的。非正則編碼中,橫向和縱向中1的個數(shù)不固定。舉一個例子,正則LDPC編碼矩陣: 在這個正則H矩陣中,橫向維度Dr=4, 縱向維度Dc=3. Codeword長度=20. 與校驗H矩陣對偶的矩陣,稱為G矩陣,也是生成矩陣。構(gòu)建優(yōu)異的H校驗矩陣,是不同SSD主控商實現(xiàn)LDPC的核心內(nèi)容,每家都有各自的專利。
在SSD內(nèi)部的LDPC解碼過程中,主要包括了兩方面內(nèi)容:硬解碼(Hard Decode)和軟解碼(Soft Decode). LDPC解碼的方法就是收到碼字之后,與校驗矩陣H相乘,如果是0矩陣,則說明收到的是正確碼字。反之,則不正確碼字,再根據(jù)相乘結(jié)果進行進一步糾錯解碼。 硬解碼(Hard Decode): 信息傳遞(Messag passing)是LDPC硬解碼常用的方法。校驗節(jié)點和可變節(jié)點之間傳遞信息,進行迭代,直至所有的奇偶校驗歸0,則解碼成功。 舉個解碼的例子: 迭代1:第一次信息傳遞迭代之后,Hard decode解碼,此時n0,n4,n6仍為1. 迭代2:第二次信息傳遞迭代之后,Hard decode解碼,此時n0仍為1. 迭代3:第二次信息傳遞迭代之后,Hard decode解碼,奇偶校驗歸0. 軟解碼(Soft Decode): 軟解碼的原理是調(diào)整不同read level,根據(jù)讀取結(jié)果后,判斷bit是1或者0的概率,然后根據(jù)1或者0概率實現(xiàn)軟解碼, 如下圖。
本文我們簡單的闡述了為何需要LDPC,LDPC編解碼的基本原理。小編在此拋磚引玉,歡迎各位看官拍磚討論。 |
|
來自: Long_龍1993 > 《SSD》