《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計 > 設(shè)計應(yīng)用 > 基于固態(tài)存儲器的ECC算法分析及實現(xiàn)
基于固態(tài)存儲器的ECC算法分析及實現(xiàn)
摘要: 評價存儲器的一個重要指標(biāo)就是它的可靠性,,在一般的數(shù)據(jù)存儲中,,幾個位的錯誤可能不是很關(guān)鍵的問題,,如果但是發(fā)生在某個敏感的數(shù)據(jù)上,,這個小小的故障可能會導(dǎo)致嚴(yán)重的后果。因此,,必須采取一些措施來及時檢出并糾正出錯的數(shù)據(jù),。目前常用的方法有:奇偶校驗、CRC校驗,、重復(fù)碼校驗等,。
關(guān)鍵詞: FPGA 固態(tài)存儲器 ECC校驗
Abstract:
Key words :

  評價存儲器的一個重要指標(biāo)就是它的可靠性,在一般的數(shù)據(jù)存儲中,,幾個位的錯誤可能不是很關(guān)鍵的問題,,如果但是發(fā)生在某個敏感的數(shù)據(jù)上,這個小小的故障可能會導(dǎo)致嚴(yán)重的后果,。因此,,必須采取一些措施來及時檢出并糾正出錯的數(shù)據(jù)。目前常用的方法有:奇偶校驗,、CRC校驗,、重復(fù)碼校驗等。

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

  1 存儲器的硬件結(jié)構(gòu)及芯片介紹

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

存儲器的硬件結(jié)構(gòu)圖

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

  2 EGG算法分析及校驗流程

  2.1 EGG校驗碼生成規(guī)則

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

ECC校驗碼組成

  其中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所示,。

行列校驗碼生成表

程序

程序

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

程序

程序

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

程序

  這里xor表示異或操作,。

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

程序

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

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

  2.2 ECC校驗流程

  當(dāng)向NAND Flash的頁中寫入數(shù)據(jù)的時候,每2 048 bit生成4 bit的ECC校驗碼,,稱之為寫ECC校驗碼,,保存到每一頁的空閑數(shù)據(jù)區(qū)中。

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

校驗流程圖

   3 ECC算法的實現(xiàn)

  3.1 C語言實現(xiàn)ECC算法

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

寫進(jìn)的2048個測試數(shù)據(jù)

  按前面的ECC校驗碼生成規(guī)則,,2 048個數(shù)據(jù)應(yīng)該生成4個校驗碼,生成的校驗碼,,如圖4所示,,其中ecccode1,ecccode2,,ecccode3,,ecccode4是生成的4個校驗碼。

2 048個數(shù)據(jù)應(yīng)該生成4個校驗碼

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

讀出的數(shù)據(jù)序列

讀出數(shù)據(jù)生成的ECC校驗碼

  3.2 利用VHDL語言實現(xiàn)EGG算法

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

VHDL語言生成的ECC校驗碼

  4 結(jié)束語

  文中介紹了ECC算法的一種實現(xiàn)方法,,說明了ECC的校驗流程,,最后用兩種方法實現(xiàn)ECC校驗算法。ECC校驗算法簡單,,軟硬件均能實現(xiàn),,它能夠檢測并糾正單比特錯誤和檢測雙比特錯誤,所以可以為數(shù)據(jù)存儲和通信系統(tǒng)提供一種強(qiáng)有力的差錯檢測手段,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。