999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于FPGA的NAND Flash ECC校驗

2011-04-23 10:12:46呂小微
電子科技 2011年6期
關鍵詞:檢測

呂小微

(西安電子科技大學電子工程學院,陜西西安 710071)

移動產品應用領域,NAND Flash設備已成為人們解決高密度固態存儲的專用方法。信息技術的飛速發展,人們對信息的需求量也越來越大。因此,大量數據在系統內部以及網絡之間存儲和傳遞時,對數據進行檢測并更正可能出現的錯誤尤為重要。糾錯碼ECC(Error Correction Code)滿足這一需求,其被稱為ECC校驗,是一種常用于NAND Flash讀寫控制器的校驗編碼[1-2]。

ECC校驗負責檢測錯誤、維護ECC信息、更正由原數值改變了的單比特錯誤。所有ECC的操作處理都可由一個ECC模塊來控制,其作為一種簡單地存儲—映射接口,放置在NAND器件和處理器接口之間。該模塊一般包含Hamming編碼產生模塊和出錯位置模塊,分別用于產生ECC校驗碼和計算出錯位置[3-5]。

1 Hamming編碼

Hamming編碼計算簡單。廣泛用于NAND Flash的Hamming算法,通過計算塊上數據包得到2個ECC值。為計算ECC值,數據包中的比特數據要先進行分割,如1/2組、1/4組、1/8組等,直到其精度達到單個比特為止,以8 bit即1 Byte的數據包為例進行說明,如圖1所示。

圖1 8 bit數據包校驗的數據分割

該數據按圖1所示方式進行比特分割,分別得到上方的偶校驗值ECCe和下方的奇校驗值ECCo。其中,1/2校驗值經“異或”操作構成ECC校驗的最高有效位,同理1/4校驗值構成ECC校驗的次高有效位,最低有效位由具體到比特的校驗值填補。圖2展示了兩個ECC校驗值的計算過程。

圖2 計算奇偶ECC數據

即偶校驗值ECCe為“101”,奇校驗值ECCo為“010”。圖1所示為只有1 Byte數據的數據包,更大的數據包需要更多的ECC值。事實上,每n bit的ECC數值可滿足2nbit數據包的校驗要求。又由于這種Hamming碼算法要求一對ECC數據(奇偶),所以總共要求2n bit的ECC校驗數據來處理2nbit的數據包。

計算之后,原數據包和ECC數值都要寫入NAND器件。稍后,原數據包將從NAND器件中讀取,此時ECC值將重新計算。如果新計算的ECC不同于先前編入NAND器件的ECC,那么表明數據在讀寫過程中出錯。

例如,原始數據01010001中有1個單一的比特出現錯誤,出錯后的數據是01010101。經前面所示方法計算,從圖3中可以清楚地看到由于數據發生了變化,2個新的ECC數值已不同與原來的ECC值。

圖3 發生錯誤數據包的ECC計算

此時把所有4個ECC數值進行按位“異或”,就可以判斷是否出現了1個單一比特的錯誤或者是多比特的錯誤。如果計算結果為全“0”,說明數據在讀寫過程中未發生變化。如果計算的結果為全“1”,表明發生了1 bit錯誤,如圖4所示。如果計算結果是除了全“0”和全“1”的任何一種情況,那么就是2 bit出錯的情況。2 bit錯誤總可以檢測到,然而,Hamming碼算法僅能夠保證更正單一比特的錯誤。如果兩個或是更多的比特出錯,那么就不能修改該出錯的數據包,在這種情況下,Hamming算法就可能不能夠指示出已經出現的錯誤。不過,考慮到SLC NAND器件的比特錯誤的情況,出現2、3 bit錯誤的可能性非常低。

圖4 判斷是否發生錯誤

對于1 bit錯誤的情況,出錯地址可通過將原有ECCo值和新ECCo值進行按位“異或”來識別獲取。通過圖5中的計算,結果為2,表明原數據第2 bit位出現了問題。該計算采用奇校驗數據ECCo,這是因為它們可以直接地反映出出錯比特的位置。

圖5 找出出錯比特位置

找到出錯比特后,只要通過翻轉它的狀態就可修復數據包,具體操作也就是將該位與“1”進行異或操作,如圖6所示。

圖6 把出錯的數據恢復為原始數據

2 擴展數據包

在上述舉例中,校驗1個8 bit數據包需要6 bit的ECC數據。在這種情況下,校驗數據量達到原始數據包的數據量的75%,看上去并不令人滿意。然而,隨著數據包大小的增加,Hamming算法將表現得越來越有效率。由前面2n bit數據需要2nbit ECC校驗的關系推知,每增加一倍的數據要求兩個額外的ECC信息比特。這樣,當數據增加到,比如512 Byte時,僅產生24 bit的ECC,此時用于校驗的數據占原數據的比例降為0.06%,效率較高。下面,以1個8 Byte的數據包為例說明擴展數據包的校驗情況。

在這里,由于異或操作滿足交換律,用一種更為有效的方法進行校驗。如圖7所示,首先將該8 Byte數據排為1個矩陣的形式,每行為1 Byte。分別計算每行各bit的異或結果記為字節校驗碼(Byte-Wise),計算每列各bit的異或結果記為比特校驗碼(Bit-Wise)。接下來,將兩個校驗碼分別按上述方法分割計算得到ECC校驗碼,并將字節校驗碼的ECC結果作為ECCe和ECCo的高有效位(MSB)、比特校驗碼的ECC結果做為低有效位(LSB)進行組合,最終得到8 Byte數據包的ECC校驗碼。

圖7 計算數據包的ECC

當數據包發生錯誤時,錯誤檢測和更正所使用的方法與先前所描述的方法相似,這里仍以1 bit錯誤來說明校驗過程,具體如圖8所示。

圖8 出錯數據包的校驗過程

經步驟1~步驟4的計算,新的數據包存在錯誤且出錯位置為“110010”,由于前面將字節校驗碼設為ECC值的高位,比特校驗碼設為低位,因此,“110010”的高有效位表示出錯的字節地址,低有效位代表出錯的比特地址,即字節地址為6、比特地址為2的數據發生了錯誤,與設定的錯誤情況相符。此時,只需將該位的數據比特與“1”異或即可完成數據包的修正。

將8 Byte數據包擴展到512 Byte數據包,雖然數據量大大增加,但僅添加了數據分割的情況,算法仍然一樣。計算所得奇偶ECC數據均為12 bit長,其中,3個低有效位代表bit地址(7~0),9個高有效位代表512 Byte的地址(255~0)。

3 實驗分析

本實驗處理對像為256 Byte的數據包,對其進行ECC校驗共生成22 bit校驗數據。為方便讀取,可以在末尾添加兩位,形成完整的3 Byte校驗數據。這3 Byte共24 bit,分成兩部分:6 bit的比特校驗和16 bit的字節校驗,多余的兩個比特置1并置于校驗碼的最低位,在進行異或操作時此兩比特忽略。

當往NAND Flash頁中寫入數據時,每256 bit生成一個ECC校驗,稱之為原ECC校驗和,并保存到頁的OOB數據區中;當從NAND Flash中讀取數據的時,每256 bit又生成一個新ECC校驗,稱之為新的ECC校驗和。校驗時,將從OOB區中讀出的原ECC校驗和與新ECC校驗和并執行按位異或操作,若計算結果為全“0”,則表示不存在出錯,并將出錯狀態變量errSTATUS賦值為“00”;若結果為全“1”,表示出現1個比特錯誤,將errSTATUS賦值為“01”并進行糾正;除全“0”和全“1”外的其他情況將errSTATUS賦值為“10”表示出現了無法糾正的2 bit錯誤,如表1所示。

表1 出錯狀態比特描述

實驗仿真環境為Altera Quartus II 7.0,編程語言為VHDL[3]。VHDL語言為硬件編程語言,具有并行處理的特點,而原程序中有大量的需要并行處理的異或操作,因此程序執行效率高,非常有利于硬件實現。

圖9 1 bit錯誤的仿真結果

圖9給出了數據包發生1 bit錯誤的校驗情況。其中,DATAin表示待讀取的數據,HammingCALC表示在寫入 NAND Flash頁時計算好的原始 ECC,HAMMINGout表示后面在讀取DATAin數據時計算的新的ECC,errSTATUS為出錯狀態,ERRloc為計算所得出錯的位置。為滿足1 bit錯誤的條件且易于觀察,將256 Byte數據(0~255)的最后一個 Byte由“11110110”變為“11111110”,如圖9中陰影部分所示。此時,errSTATUS結果為“01”,表明程序檢測出了該1 bit錯誤,且ERRloc輸出為“111111111011”,即出錯位置為第255 Byte的比特3發生了錯誤。為糾正該錯誤,此時,只要將該位置的比特取反輸出即可。

圖10 2 bit錯誤的仿真結果

在原來1 bit錯誤的情況下,將其相鄰的第254 bit的數據由“11110101”變為“01110101”,如圖10陰影部分所示,整個數據包有2 bit發生了變化。此時,errSTATUS結果顯示為“10”,即檢測出了有2 bit錯誤。但此時的ERRloc無效,不能表征出兩個出錯的位置,也就是為什么ECC校驗只能檢測出2 bit錯誤而不能對其進行更正的原因。

圖11 無數據出錯的仿真結果

當然,如果數據包沒有發生任何錯誤,也就是若讀出的數據與先前寫入的數據完全一致,ECC校驗也是能夠保證檢測出來的。如圖11所示,當未發生任何錯誤時,errSTATUS為“00”,驗證了數據的一致性。此時,ERRloc無意義。

值得說明的是,如果數據包發生的錯誤多于2 bit,該算法并不適宜。測定了更多比特(≥3)出錯的情況,結果證明,errSTATUS的結果可能為“00”、“01”、“10”中的任何一個,也就是說在這種情況下,該算法很可能出現誤檢。因此,在這里,可以得出與ECC校驗原理相符的結論:ECC能夠保證糾正1 bit錯誤和檢測2 bit錯誤,但對于1 bit以上的錯誤無法糾正,對2 bit以上的錯誤不保證能檢測。

4 結束語

本文將ECC校驗算法通過硬件編程語言VHDL在Altera Quartus II 7.0開發環境下進行了后仿真測試,實現了NAND Flash的ECC校驗功能。本程序可實現每256 Byte數據生成3 Byte ECC校驗數據,且通過與原始ECC數據對比,能夠保證檢測出1 bit的錯誤及其出錯位置,進一步結合對此錯誤的糾正,可應用于NAND Flash讀寫控制器的FPGA設計,實現對數據的ECC校驗,確保數據準備有效地傳輸。經硬件實驗結果反饋,該算法硬件適應性良好。

ECC是一種在NAND Flash處理中比較專用的校驗,其原理簡便、易于執行、計算速度快并且數據量越大,其算法越有效。但這樣一個高效的算法仍存在缺陷,那就是其有限的糾錯能力。本文也驗證了其對于2 bit以上錯誤是無效的,盡管這種情況在Flash中發生的幾率很低,但就校驗原理來說,是否存在一種改進的算法可用于多比特錯誤的糾正還有待進一步研究和驗證。

[1] NAND Flash.Technical notes[M].USA:NAND Conproation,2006.

[2] NAND Flash.Data sheet[M].USA:NAND Conproation,2008.

[3] 曾繁泰,陳美金.VHDL程序設計[M].2版.北京:清華大學出版社,2001.

[4] 韋峰,盧再奇,劉偉.YAFFS2在嵌入式系統中的實現[J].現代電子技術,2010(8):38-42,45.

[5] 李璐,周海燕.一種含 BCH編解碼器的 SLC/MLCNAND Flash控制器的VLSI設計[J].現代電子技術,2009(7):174-177.

猜你喜歡
檢測
QC 檢測
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
“幾何圖形”檢測題
“角”檢測題
“有理數的乘除法”檢測題
“有理數”檢測題
“角”檢測題
“幾何圖形”檢測題
主站蜘蛛池模板: 国内精品久久久久鸭| 国产毛片基地| 夜夜拍夜夜爽| 中国国产高清免费AV片| 欧美怡红院视频一区二区三区| 精品视频第一页| 亚洲无码高清一区二区| 国产成人av大片在线播放| 久久精品亚洲热综合一区二区| 国产综合在线观看视频| 色噜噜狠狠色综合网图区| 日本午夜影院| 91视频99| 国产内射一区亚洲| 国产精品男人的天堂| 成年人免费国产视频| 韩日午夜在线资源一区二区| 久久久久久久久18禁秘| 国产精品专区第一页在线观看| 国产美女在线观看| 久久这里只有精品2| 成人永久免费A∨一级在线播放| 热久久国产| 国产亚洲精品97AA片在线播放| 亚洲成人播放| 国产成人h在线观看网站站| 99re经典视频在线| 亚洲精品另类| 亚洲成人网在线播放| 黄色网页在线播放| 美女免费精品高清毛片在线视| 国产精品2| 欧美国产综合色视频| 日韩在线播放欧美字幕| 中国一级特黄大片在线观看| 欧美日韩中文国产| 国产激情无码一区二区免费| 啊嗯不日本网站| 国产福利拍拍拍| 日韩国产精品无码一区二区三区| 在线99视频| 不卡无码h在线观看| 九色视频一区| 伊人色综合久久天天| 久久一级电影| 亚洲天堂区| 97影院午夜在线观看视频| 日本国产精品一区久久久| 国产男女免费完整版视频| 国产精品免费p区| lhav亚洲精品| 久久国产香蕉| 亚洲中文字幕国产av| a级毛片视频免费观看| 久久99国产乱子伦精品免| 日韩欧美中文| 9cao视频精品| 亚洲无码91视频| 亚洲成人www| 色国产视频| 久久婷婷人人澡人人爱91| 亚亚洲乱码一二三四区| 国产精品永久久久久| 在线观看国产网址你懂的| 久久 午夜福利 张柏芝| 五月天福利视频| 欧美笫一页| 亚国产欧美在线人成| 五月婷婷伊人网| 国产精品刺激对白在线| 亚洲国产在一区二区三区| 国产福利一区视频| 国产精品分类视频分类一区| 国产小视频a在线观看| 999国内精品久久免费视频| 在线亚洲精品自拍| 欧美精品伊人久久| 亚洲午夜18| 曰韩免费无码AV一区二区| 国产白浆一区二区三区视频在线| 国产啪在线91| 一级毛片不卡片免费观看|