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