基于固態(tài)存儲器的ECC算法分析及實(shí)現

發(fā)布時(shí)間:2010-11-18 11:22    發(fā)布者:eetech
關(guān)鍵詞: ECC , 分析 , 固態(tài)存儲器 , 實(shí)現 , 算法
評評價(jià)存儲器的一個(gè)重要指標就是它的可靠性,在一般的數據存儲中,幾個(gè)位的錯誤可能不是很關(guān)鍵的問(wèn)題,如果但是發(fā)生在某個(gè)敏感的數據上,這個(gè)小小的故障可能會(huì )導致嚴重的后果。因此,必須采取一些措施來(lái)及時(shí)檢出并糾正出錯的數據。目前常用的方法有:奇偶校驗、CRC校驗、重復碼校驗等。

ECC校驗是在奇偶校驗的基礎上發(fā)展而來(lái)的,它將數據塊看作一個(gè)矩陣,利用矩陣的行、列奇偶信息生成ECC校驗碼。它能夠檢測并糾正單比特錯誤和檢測雙比特錯誤,但對雙比特以上的錯誤不能保證檢測。它克服了傳統奇偶校驗只能檢出奇數位出錯、校驗碼冗長(cháng)、不能糾錯的局限性。文中在高速大容量固態(tài)存儲器的硬件結構基礎上,詳細介紹了ECC校驗碼的生成規則以及ECC校驗流程,并用C語(yǔ)言VHDL語(yǔ)言?xún)煞N方法實(shí)現了該算法。

1 存儲器的硬件結構及芯片介紹

本存儲器是以FPGA為控制核心,用64片Flash芯片構成存儲陣列,采用CPCI接口實(shí)現數據的高速率存儲。Flash存儲陣列分為16組,每組4片,每組Flash芯片共用數據和控制總線(xiàn)。該存儲器的硬件結構圖,如圖1所示。





存儲板上的存儲芯片用的是Samsung公司的高速大容量固態(tài)存儲芯片K9W8G08U1 M Nand Flash Memory,其容量為1 G×8 bit,分為8 192個(gè)塊,每個(gè)塊又分為64頁(yè),1頁(yè)有(2 k+64)Byte,其中一頁(yè)有64 bit的空閑區。存儲板上的控制芯片是Ahera公司的高端FPGA芯片EP3SE110F1152C4,它負責數據的緩沖和整個(gè)存儲器的時(shí)序控制,并負責以頁(yè)為單位生成校驗碼,并把校驗碼存人到頁(yè)的空閑區內。下面以1頁(yè)2 048 bit為單位介紹校驗碼的生成以及校驗流程。

2 EGG算法分析及校驗流程

2.1 EGG校驗碼生成規則

Flash在讀寫(xiě)數據的時(shí)候是以頁(yè)為單位進(jìn)行的,一頁(yè)有2 048個(gè)數據,所以可以以2 048 bit為單位生成校驗碼。每個(gè)數據有8位信息組成,可以把這2 048個(gè)數據看成2 048×8的矩陣,這樣就可以分別生成行校驗碼和列校驗碼來(lái)分別校驗。ECC校驗中,每2 048個(gè)數據生成4個(gè)字節的校驗碼,這32位的校驗碼分成3個(gè)部分:6位的列校驗信息,22位的行校驗信息,其余的4位置1,ECC校驗碼組成,如表1所示。





其中P4_l,P4_2,P2_1,P2_2,P1_1,P1_2是列校驗碼,而P8_1,P8_2,P16_1,P16_2,P32_1,P32_2,P64_1,P64_2,P128_1,P128_2,P256_1,P256_2, P512_1,P512_2,P1024_1,P1 024_2, P2 048_1, P2 048_2, P4 096_1,P4096_2,P8192_1,P8192_2是行校驗碼。行列校驗碼生成表,如表2所示。













列校驗碼生成用數學(xué)表達式表示為









行校驗碼生成用數學(xué)表達式表示為





這里xor表示異或操作。

因為發(fā)生錯誤的數據位在該數據塊中的字節的偏移量為





發(fā)生錯誤的數據位在所處的字節中的位偏移量為P4_1,P2_1,P1_1

所以根據字節的偏移量和字節中的位的偏移量即可確定該頁(yè)數據中哪一位發(fā)生了變化。

2.2 ECC校驗流程

當向NAND Flash的頁(yè)中寫(xiě)入數據的時(shí)候,每2 048 bit生成4 bit的ECC校驗碼,稱(chēng)之為寫(xiě)ECC校驗碼,保存到每一頁(yè)的空閑數據區中。

當從NAND Flash中讀取數據的時(shí)候,每2 048 bit生成4 bit的ECC校驗碼,稱(chēng)之為讀ECC校驗碼。校驗的時(shí)候,根據上述ECC生成原理不難推斷:將從頁(yè)空閑區中讀出的寫(xiě)ECC校驗碼和讀ECC校驗碼按位異或,若結果為0,則表示不存在錯;若4 bit的異或結果中存在14 bit為1,表示存在1 bit錯誤,且可糾正;若4個(gè)bit的異或結果中只存在1 bit為1,表示空閑區中的校驗碼出錯;其他情況均表示出現了無(wú)法糾正的錯誤,校驗流程圖,如圖2所示。






3 ECC算法的實(shí)現

3.1 C語(yǔ)言實(shí)現ECC算法

以一頁(yè)數據2 048個(gè)字節作為測試數據產(chǎn)生ECC校驗碼,數據是0x00~0xFF,循環(huán)8次產(chǎn)生2048個(gè)數據,數據序列,如圖3所示。





 按前面的ECC校驗碼生成規則,2 048個(gè)數據應該生成4個(gè)校驗碼,生成的校驗碼,如圖4所示,其中ecccode1,ecccode2,ecccode3,ecccode4是生成的4個(gè)校驗碼。





現在假設讀出的數據中有一位數據發(fā)生了翻轉,出現了一位數據錯誤的情況,即假設數據的第2 bit的最低位發(fā)生了翻轉,0×0l變成了O×00,此時(shí)讀出的數據序列,如圖5所示。









3.2 利用VHDL語(yǔ)言實(shí)現EGG算法



文中以0x00"OxFF循環(huán)8次產(chǎn)生2 048個(gè)數據,利用VHDL語(yǔ)言編程,在QuartusII7.2下進(jìn)行了仿真,得到了如圖7所示的校驗碼。其中ecccodel =00000000,ecccode2=00000000,ecccode3=11000000,ecccode4=000000ll是生成的4個(gè)校驗碼,從圖中可以看到利用VHDL語(yǔ)言得到的校驗碼和用C語(yǔ)言得到的ECC校驗碼是相同的。





4 結束語(yǔ)

文中介紹了ECC算法的一種實(shí)現方法,說(shuō)明了ECC的校驗流程,最后用兩種方法實(shí)現ECC校驗算法。ECC校驗算法簡(jiǎn)單,軟硬件均能實(shí)現,它能夠檢測并糾正單比特錯誤和檢測雙比特錯誤,所以可以為數據存儲和通信系統提供一種強有力的差錯檢測手段。
本文地址:http://selenalain.com/thread-40431-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页