SSD ECC中的LDPC編解碼原理


轉自:http://blog.csdn.net/zhuzongpeng/article/details/78899198

目前SSD中ECC糾錯代碼主要兩種BCH和LDPC。不過,隨着SSD對ECC糾錯技術要求越來越高,BCH糾錯碼開始有些吃力,所以,LDPC糾錯碼是發展趨勢,也是最新最主流的糾錯碼。

為何需要LDPC?

我們先回顧一下NAND閃存的基礎知識。在這里以MLC NAND為例。在MLC NAND中,有四個Vt level. 如下圖,

隨着P/E cycles的增加,MLC NAND的vt電壓分布就會變大變寬,如下圖,

當P/E cycle到了一定的數值之后,MLC NAND不同vt level之間就會有交叉,這樣的話,就會引起數據讀取錯誤,這時,就需要請出LDPC糾錯碼了。

LDPC編碼

LDPC,是Low Density Parity Check Code的簡稱,翻譯為中文就是“低密度奇偶校驗碼”。在1963年,LDPC第一次出現在R.G.Gallager博士發表的論文之中。LDPC碼是一種稀疏校驗矩陣線性分組碼。為何稱為“稀疏”呢?因為校驗矩陣中的1要遠小於0的數目,這樣做的好處就是,譯碼復雜度低,結構非常靈活。

在LDPC編碼中,會用到一個叫做H矩陣的校驗矩陣(Parity Check Matrix),比如,我們來看一個交單的H矩陣:

為了可以更加直觀的理解H矩陣,可以借助Tanner圖,來表示H矩陣:

左側V1~V7是變量節點,右側C1~C3是校驗節點。變量節點和校驗節點之間的連接線稱為沿(edge),也代表這H矩陣中的1. 每個節點上連接線(edge)的數目稱為節點維度(Degree).

LDPC編碼分為正則編碼和非正則編碼。正則編碼中,橫向和縱向中1的個數是固定的。非正則編碼中,橫向和縱向中1的個數不固定。舉一個例子,正則LDPC編碼矩陣:

在這個正則H矩陣中,橫向維度Dr=4, 縱向維度Dc=3. Codeword長度=20.

與校驗H矩陣對偶的矩陣,稱為G矩陣,也是生成矩陣。構建優異的H校驗矩陣,是不同SSD主控商實現LDPC的核心內容,每家都有各自的專利。

LDPC解碼

在SSD內部的LDPC解碼過程中,主要包括了兩方面內容:硬解碼(Hard Decode)和軟解碼(Soft Decode). LDPC解碼的方法就是收到碼字之后,與校驗矩陣H相乘,如果是0矩陣,則說明收到的是正確碼字。反之,則不正確碼字,再根據相乘結果進行進一步糾錯解碼。

硬解碼(Hard Decode):

信息傳遞(Messag passing)是LDPC硬解碼常用的方法。校驗節點和可變節點之間傳遞信息,進行迭代,直至所有的奇偶校驗歸0,則解碼成功。

舉個解碼的例子:

迭代1:第一次信息傳遞迭代之后,Hard decode解碼,此時n0,n4,n6仍為1.

迭代2:第二次信息傳遞迭代之后,Hard decode解碼,此時n0仍為1.

迭代3:第二次信息傳遞迭代之后,Hard decode解碼,奇偶校驗歸0.

軟解碼(Soft Decode):

軟解碼的原理是調整不同read level,根據讀取結果后,判斷bit是1或者0的概率,然后根據1或者0概率實現軟解碼, 如下圖。

結語

本文我們簡單的闡述了為何需要LDPC,LDPC編解碼的基本原理。

本文鏈接:http://www.cnblogs.com/sylar5/p/8136314.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM