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