基于FPGA的NAND Flash ECC校驗
當(dāng)數(shù)據(jù)包發(fā)生錯誤時,錯誤檢測和更正所使用的方法與先前所描述的方法相似,這里仍以1 bit錯誤來說明校驗過程,具體如圖8所示。
經(jīng)步驟1~步驟4的計算,新的數(shù)據(jù)包存在錯誤且出錯位置為“110010”,由于前面將字節(jié)校驗碼設(shè)為ECC值的高位,比特校驗碼設(shè)為低位,因此,“110010”的高有效位表示出錯的字節(jié)地址,低有效位代表出錯的比特地址,即字節(jié)地址為6、比特地址為2的數(shù)據(jù)發(fā)生了錯誤,與設(shè)定的錯誤情況相符。此時,只需將該位的數(shù)據(jù)比特與“1”異或即可完成數(shù)據(jù)包的修正。
將8 Byte數(shù)據(jù)包擴展到512 Byte數(shù)據(jù)包,雖然數(shù)據(jù)量大大增加,但僅添加了數(shù)據(jù)分割的情況,算法仍然一樣。計算所得奇偶ECC數(shù)據(jù)均為12 bit長,其中,3個低有效位代表bit地址(7~0),9個高有效位代表512Byte的地址(255~0)。
3 實驗分析
本實驗處理對像為256 Byte的數(shù)據(jù)包,對其進行ECC校驗共生成22 bit校驗數(shù)據(jù)。為方便讀取,可以在末尾添加兩位,形成完整的3Byte校驗數(shù)據(jù)。這3 Byte共24 bit,分成兩部分:6 bit的比特校驗和16 bit的字節(jié)校驗,多余的兩個比特置1并置于校驗碼的最低位,在進行異或操作時此兩比特忽略。
當(dāng)往NAND Flash頁中寫人數(shù)據(jù)時,每256 bit生成一個ECC校驗,稱之為原ECC校驗和,并保存到頁的OOB數(shù)據(jù)區(qū)中;當(dāng)從NAND Flash中讀取數(shù)據(jù)的時,每256 bit又生成一個新ECC校驗,稱之為新的ECC校驗和。校驗時,將從OOB區(qū)中讀出的原ECC校驗和與新ECC校驗和并執(zhí)行按位異或操作,若計算結(jié)果為全“0”,則表示不存在出錯,并將出錯狀態(tài)變量errSTATUS賦值為“00”;若結(jié)果為全“1”,表示出現(xiàn)1個比特錯誤,將errSTATUS賦值為01”并進行糾正;除全“0”和全“1”外的其他情況將errSTATUS賦值為“10”表示出現(xiàn)了無法糾正的2 bit錯誤,如表1所示。
實驗仿真環(huán)境為Altera Quartus II 7.0,編程語言為VHDL。VHDL語言為硬件編程語言,具有并行處理的特點,而原程序中有大量的需要并行處理的異或操作,因此程序執(zhí)行效率高,非常有利于硬件實現(xiàn)。
評論