本發(fā)明涉及糾正多位錯誤的糾錯碼譯碼領(lǐng)域,尤其涉及長BCH碼的快速譯碼領(lǐng)域。
背景技術(shù):BCH碼作為一種可以糾正隨機多位錯誤的糾錯碼正被廣泛應(yīng)用于通信、信息存儲等領(lǐng)域。隨著技術(shù)的發(fā)展,芯片的存儲密度不斷增加,存儲容量增大,數(shù)據(jù)在存儲過程中出現(xiàn)位翻轉(zhuǎn)的概率正在不斷增大,需要通過增加冗余校驗位等措施保障數(shù)據(jù)的可靠存取。為了保證數(shù)據(jù)的可靠性,傳統(tǒng)的信息存儲過程主要采用Hamming等糾1檢2的糾錯碼。其優(yōu)點是編譯碼原理簡單,軟硬件實現(xiàn)的效率很高,但是其糾錯能力有限,只能糾正1位錯誤,檢測2位錯誤,對錯誤率較高的場合并不適用。例如:針對NandFlash芯片,隨著技術(shù)的進步,NandFlash芯片正從SLC型向MLC型轉(zhuǎn)變(本領(lǐng)域內(nèi)的人員可以理解SLC、MLC為NandFlash的芯片類型),存儲密度的增加的代價是可靠性的降低,出現(xiàn)多位錯誤的可能性增大,傳統(tǒng)的糾1檢2碼已經(jīng)不能滿足需求,具有更大糾錯能力的糾錯碼必須被采用。BCH碼正是這樣一種能夠提供多位糾錯能力的糾錯碼,其使用方法為:在寫數(shù)據(jù)的過程中編碼獲得校驗位,在讀數(shù)據(jù)的過程中通過校驗位檢驗數(shù)據(jù)是否存在錯誤,糾正錯誤。目前對BCH碼譯碼的研究主要集中于硬件領(lǐng)域,通過求伴隨式,BM算法求錯誤位置多項式,錢搜索驗根的硬件電路實現(xiàn)BCH碼的譯碼過程,其優(yōu)點是時間冗余度小。但是并不是所有的設(shè)備都支持硬件譯碼結(jié)構(gòu),針對不具備硬件譯碼結(jié)構(gòu)的存儲設(shè)備,如何通過軟件實現(xiàn)BCH糾錯過程就變得非常必要了。目前BCH碼譯碼的軟件實現(xiàn)多針對碼長非常短的BCH碼,針對長BCH碼的研究非常少見。而針對大容量的存儲器件,則需要長BCH 碼才能滿足可靠性需求。如果長BCH碼的譯碼過程依然采用傳統(tǒng)的流程,則勢必導(dǎo)致算法復(fù)雜度非常大,造成的時間冗余很大,嚴(yán)重影響B(tài)CH碼的使用效率。故迫切需要一種能夠快速實現(xiàn)的長BCH碼的譯碼系統(tǒng)及方法。
技術(shù)實現(xiàn)要素:本發(fā)明的目的是提供一種快速實現(xiàn)的長BCH譯碼系統(tǒng)及方法,適用于不具備硬件ECC糾錯結(jié)構(gòu)的存儲設(shè)備的可靠性增強。在保證糾錯能力的同時,盡可能提升BCH碼的使用效率。為達到所述目的,本發(fā)明提供的一種長BCH碼的譯碼系統(tǒng),所述系統(tǒng)具有伴隨式求取模塊、錯誤位置多項式產(chǎn)生模塊、求根模塊、錯誤位置修正模塊,其中:伴隨式求取模塊接收輸入的待譯碼數(shù)據(jù)信息,通過余式比較獲得并輸出伴隨式;錯誤位置多項式產(chǎn)生模塊獲得伴隨式求取模塊輸出的伴隨式后,根據(jù)錯誤位數(shù)判決條件判斷錯誤位置多項式的次數(shù),調(diào)用相應(yīng)次數(shù)的1次多項式生成子模塊、2次多項式生成子模塊、3次多項式生成子模塊或4次多項式生成子模塊,生成相應(yīng)的1次錯誤位置多項式、2次錯誤位置多項式、3次錯誤位置多項式或4次錯誤位置多項式;求根模塊包括1次多項式求根子模塊,2次多項式求根子模塊,3次多項式求根子模塊和4次多項式求根子模塊,以錯誤位置多項式產(chǎn)生模塊傳遞來的錯誤位置多項式的次數(shù)為觸發(fā)信號,調(diào)用相應(yīng)的所述多項式求根子模塊,用于求得錯誤位置多項式的根,進而找到錯誤位置所在,并將錯誤位置輸出到錯誤位置修正模塊;錯誤位置修正模塊,用于將錯誤位置處的數(shù)據(jù)取反,輸出取反數(shù)據(jù),并糾正錯誤。本發(fā)明還提供一種使用長BCH碼的譯碼系統(tǒng)的長BCH碼的譯碼方法,包括如下步驟:步驟S1:對待譯碼的數(shù)據(jù)的信息位進行再次編碼運算,獲得新的校驗位;步驟S2:調(diào)用伴隨式求取模塊,利用余式比較的方法獲得并輸出伴隨式的值;步驟S3:錯誤位置多項式產(chǎn)生模塊利用伴隨式的值,并根據(jù)錯誤位數(shù)判決條件判斷錯誤位置多項式的次數(shù),調(diào)用相應(yīng)次數(shù)多項式生成子模塊,輸出錯誤位置多項式的次數(shù)及各項系數(shù);步驟S4:糾錯模塊根據(jù)錯誤位置多項式的次數(shù)調(diào)用相應(yīng)次數(shù)多項式求根子模塊,采用有限域擴域多項式求根方法(Zinoviev)法求得錯誤位置多項式的根,進而求得錯誤位置所在;步驟S5:將錯誤位置處的數(shù)據(jù)取反并輸出,完成糾錯過程。本發(fā)明采取以上技術(shù)方案后相對于現(xiàn)有技術(shù)具有以下優(yōu)點:1)本發(fā)明提供針對長BCH碼的譯碼系統(tǒng),能夠不依靠硬件結(jié)構(gòu)快速實現(xiàn)長BCH碼的譯碼過程,很好的降低了目前糾錯碼通過硬件實現(xiàn)帶來的高成本。2)本發(fā)明提供的長BCH碼的譯碼系統(tǒng)在實現(xiàn)譯碼過程中,依靠錯誤位數(shù)判決條件求解錯誤位置多項式,取代傳統(tǒng)的SiBM算法,只包含少量的數(shù)學(xué)運算,減少了循環(huán)和分支判斷,更適合軟件架構(gòu);以針對不同次數(shù)有限域擴域多項式求根方法(Zinoviev)法求根模塊取代傳統(tǒng)的錢搜索算法,免去了按位驗根的過程;在執(zhí)行以上操作后,使譯碼過程復(fù)雜度大大降低,有效提升了BCH碼的使用效率,使譯碼過程的時間冗余降至可接受的范圍,能夠滿足一般應(yīng)用場合和一些實時性要求較高的場合,具有很高的應(yīng)用價值。3)本發(fā)明提供的長BCH碼的譯碼系統(tǒng)不局限于系統(tǒng)運行的平臺,可以是DSP芯片、FPGA芯片、ARM芯片、PC機等多種平臺,具有很高的通用性和可移植性。附圖說明圖1為本發(fā)明提供的長BCH碼的譯碼系統(tǒng)的組成框圖。圖2為本發(fā)明提供的長BCH碼的譯碼方法的流程圖。圖3為本發(fā)明提供的錯誤位數(shù)判決條件實現(xiàn)流程圖。圖4為本發(fā)明提供的求錯誤位置多項式的根的實現(xiàn)流程圖。圖5為本發(fā)明提供的2次多項式求根子模塊的實現(xiàn)流程圖。圖6為本發(fā)明提供的3次多項式求根子模塊的實現(xiàn)流程圖。圖7為本發(fā)明提供的4次多項式求根子模塊的實現(xiàn)流程圖。具體實施方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下結(jié)合具體實施例,并參照附圖,對本發(fā)明進一步詳細(xì)說明。在本發(fā)明的一個具體實施案例中,實現(xiàn)針對NandFlash芯片(本領(lǐng)域的人員都知道NandFlash是一種芯片名稱)的BCH糾錯碼BCH(4148,4096,9)譯碼系統(tǒng),碼長4148位,信息位4096位,具有最大糾錯能力為4位。譯碼過程中的所有運算都是基于2階有限域GF(2)的擴域GF(2m),其中m為限制有限域擴域GF(2m)大小的正整數(shù),由BCH碼的碼長決定,在所述具體實施案例中m=13。隨機生成4096位0,1組合的數(shù)據(jù),在寫入NandFlash芯片中的過程中對隨機生成的數(shù)據(jù)進行編碼,將編碼生成校驗位存儲于NandFlash芯片中的空閑區(qū),然后向生成的數(shù)據(jù)中隨機注入不超過4位錯誤,構(gòu)成讀到的待譯碼數(shù)據(jù),應(yīng)用本發(fā)明提供的譯碼系統(tǒng)對待譯碼的數(shù)據(jù)進行譯碼過程。如圖1所示為本發(fā)明提供的長BCH碼的譯碼系統(tǒng)的組成框圖,圖中具體標(biāo)示了每一部分的連接關(guān)系。所述系統(tǒng)具有伴隨式求取模塊11、錯誤位置多項式產(chǎn)生模塊12、求根模塊13、錯誤位置修正模塊14,其中:伴隨式求取模塊11接收輸入的待譯碼數(shù)據(jù)信息,通過余式比較獲得并輸出伴隨式;錯誤位置多項式產(chǎn)生模塊12連接伴隨式求取模塊11,用于根據(jù)伴隨式生成并輸出錯誤位置多項式及各項系數(shù);求根模塊13連接錯誤位置多項式產(chǎn)生模塊12,用于根據(jù)錯誤位置多項式及各項系數(shù)生成并輸出錯誤位置多項式的根,找出錯誤位置所在;錯誤位置修正模塊14,用于將錯誤位置處的數(shù)據(jù)取反,輸出取反數(shù)據(jù),并糾正錯誤。其中,所述伴隨式求取模塊11采用余式比較求伴隨式,首先對待譯碼數(shù)據(jù)的信息位進行再次編碼,將編碼生成的新的校驗位與存儲的原校驗位進行按位異或運算,如果運算結(jié)果的每一位都為0,則接收碼字沒有錯誤,跳出譯碼過程;如果運算結(jié)果中有任何一位不為0,則需要對碼字進行糾錯,計算伴隨式的值。其中,所述錯誤位置多項式產(chǎn)生模塊12根據(jù)錯誤位數(shù)判決條件判 斷錯誤位置多項式的次數(shù),調(diào)用相應(yīng)次數(shù)的1次多項式生成子模塊121、2次多項式生成子模塊122、3次多項式生成子模塊123或4次多項式生成子模塊124,生成相應(yīng)的1次錯誤位置多項式、2次錯誤位置多項式、3次錯誤位置多項式或4次錯誤位置多項式。其中,所述求根模塊13包括1次多項式求根子模塊131,2次多項式求根子模塊132,3次多項式求根子模塊133和4次多項式求根子模塊134,以錯誤位置多項式產(chǎn)生模塊12傳遞來的錯誤位置多項式的次數(shù)為觸發(fā)信號,調(diào)用相應(yīng)的所述多項式求根子模塊,用于求得錯誤位置多項式的根,進而找到錯誤位置所在。如圖2所示為本發(fā)明提供的長BCH碼的譯碼方法的流程圖,使用本實施案例中長BCH碼的譯碼系統(tǒng)的譯碼方法包括如下步驟:步驟S1:對待譯碼的數(shù)據(jù)的信息位進行再次編碼運算,獲得新的校驗位;步驟S2:調(diào)用伴隨式求取模塊,利用余式比較的方法獲得并輸出伴隨式的值;步驟S3:錯誤位置多項式產(chǎn)生模塊利用伴隨式的值,并根據(jù)錯誤位數(shù)判決條件判斷錯誤位置多項式的次數(shù),調(diào)用相應(yīng)次數(shù)多項式生成子模塊,輸出錯誤位置多項式的次數(shù)及各項系數(shù);步驟S4:糾錯模塊根據(jù)錯誤位置多項式的次數(shù)調(diào)用相應(yīng)次數(shù)多項式求根子模塊,采用有限域擴域多項式求根方法(Zinoviev)法求得錯誤位置多項式的根,進而求得錯誤位置所在;步驟S5:將錯誤位置處的數(shù)據(jù)取反并輸出,完成糾錯過程。如步驟S2所述的利用余式比較的方法獲得并輸出伴隨式的值,包含如下步驟:將生成的校驗位與讀取到的校驗位按位異或運算,得到運算結(jié)果為y(x),y(x)表示為y(x)=y(tǒng)mt-1xmt-1+…+y1x+y0,其中ymt-1,…,y1,y0分別為按位異或運算結(jié)果y(x)的第mt-1,…,1,0位的值,變量x為有限域擴域上的元素,t為BCH碼能夠糾正的最大錯誤位數(shù),m為限制有限域擴域GF(2m)大小的正整數(shù);在得到運算結(jié)果y(x)后,判斷運算結(jié)果y(x)的每一位是否等于0,若運算結(jié)果y(x)的每一位都為0,則讀到的數(shù)據(jù)沒有錯誤,譯碼結(jié)束,直接輸出數(shù)據(jù);如果運算結(jié)果y(x)中有任 何一位不為0,則令有限域擴域上的元素x=αi(本領(lǐng)域內(nèi)的人員可以知曉αi為有限域擴域GF(2m)上的第i個元素),根據(jù)Si=y(tǒng)(αi)求伴隨式S(x),其中所述伴隨式S(x)={S1,S3…S2t-1},伴隨式S(x)為一個一維數(shù)組,S1,S3…S2t-1為伴隨式S(x)中的元素用Si表示,下標(biāo)i=1,3…2t-1為伴隨式S(x)的索引。如圖3所示步驟3所述的根據(jù)錯誤位數(shù)判決第一條件、第二條件和第三條件判斷錯誤位置多項式的次數(shù)的步驟包括:步驟31:對伴隨式S(x)中的元素Si進行判斷,當(dāng)元素Si滿足第一條件時,則調(diào)用1次多項式生成子模塊121,求得次數(shù)為1的錯誤位置多項式σ(x),得到1次錯誤位置多項式σ(x)的系數(shù)為:σ0=1,σ1=S1,得到1次錯誤位置多項式為:σ(x)=σ1x+σ0,進入步驟S4;當(dāng)元素Si不滿足第一條件時,則執(zhí)行步驟32;步驟32:當(dāng)元素Si滿足第二條件時,則調(diào)用2次多項式生成子模塊122,求得次數(shù)為2的錯誤位置多項式σ(x),得到2次錯誤位置多項式σ(x)的系數(shù)為:σ0=1,σ1=S1,得到2次錯誤位置多項式為:σ(x)=σ2x2+σ1x+σ0,進入步驟S4;當(dāng)元素Si不滿足第二條件時,則執(zhí)行步驟33;步驟33:當(dāng)元素Si滿足第三條件:時,則調(diào)用3次多項式生成子模塊123,求得次數(shù)為3的錯誤位置多項式σ(x)系數(shù)為:σ0=1,σ1=S1,得到3次錯誤位置多項式為:σ(x)=σ3x3+σ2x2+σ1x+σ0,進入步驟S4;當(dāng)元素Si不滿足第三條件時,則調(diào)用4次多項式生成子模塊124,求得次數(shù)為4的錯誤位置多項式σ(x)系數(shù)為:σ0=1,σ1=S1,得到4次錯誤位置多項式為:σ(x)=σ4x4+σ3x3+σ2x2+σ1x+σ0,進入步驟 S4;所述σ0,σ1,σ2,σ3,σ4為錯誤位置多項式σ(x)的系數(shù)。步驟S4所述的采用有限域擴域多項式求根方法(Zinoviev)法求得錯誤位置多項式的根,如圖4所示,包括如下步驟:步驟S41:將有限域擴域上的錯誤位置多項式轉(zhuǎn)化成仿射多項式σ(z)=L(z)+c的形式,其中z為有限域擴域GF(2m)上的變量,c為有限域擴域GF(2m)上的常量,σ(z)為有限域擴域GF(2m)上的仿射多項式,為有限域擴域GF(2m)上的線性多項式,其中GF(2m)為2階有限域GF(2)的擴域,m為限制有限域擴域GF(2m)大小的正整數(shù),n為控制有限域擴域GF(2m)上的線性多項式的次數(shù)的任意正整數(shù),Lj為有限域擴域GF(2m)上的元素,j為線性多項式的系數(shù)索引,j從0,1…n變化;步驟S42:采用有限域擴域多項式求根方法(Zinoviev)法求有限域擴域下1次仿射多項式、2次仿射多項式、3次仿射多項式或4次仿射多項式的根;步驟S43:根據(jù)仿射多項式的根通過反變換運算求得錯誤位置多項式的根;步驟S44:對錯誤位置多項式的根求逆運算得到錯誤位置。在本實施案例中,如步驟S4所述的根據(jù)錯誤位置多項式的次數(shù)調(diào)用相應(yīng)次數(shù)多項式求根子模塊,在1次多項式求根子模塊、2次錯多項式求根子模塊、3次多項式求根子模塊、4次多項式求根子模塊中分別進行所述步驟S41、步驟S42、步驟S43、步驟S44的操作。1次多項式求根模塊執(zhí)行的操作為:獲得1次多項式生成子模塊傳遞來的1次錯誤位置多項式σ(x)=σ1x+σ0,1次錯誤位置多項式已經(jīng)是仿射多項式的形式,求得1次仿射多項式的根即為錯誤位置多項式的根:σ0/σ1,求逆運算得到錯誤位置處在第σ1/σ0位。2次多項式求根子模塊的實現(xiàn)流程圖如圖5所示,2次多項式求根過程包括如下步驟:步驟51:獲得2次多項式生成子模塊傳遞來的2次錯誤位置多項式σ(x)=σ2x2+σ1x+σ0;步驟52:將2次錯誤位置多項式轉(zhuǎn)化為2次仿射多項式σ(z)=L(z)+c的形式,其中有限域擴域GF(2m)上的變量z=σ1x/σ2,L(z)為有限域擴域GF(2m)上的線性多項式,c為有限域擴域GF(2m)上的常量;步驟53:采用有限域擴域多項式求根方法(Zinoviev)法,找到2次仿射多項式σ(z)的兩個根:z1,z2,其中z2=z1+1;步驟54:根據(jù)2次仿射多項式的兩個根z1,z2反變換求出2次錯誤位置多項式σ(x)的兩個根:x1,x2,其中步驟55:對2次錯誤位置多項式σ(x)的2個根求逆運算,求出錯誤位置。3次多項式求根子模塊的實現(xiàn)流程圖如圖6所示,3次多項式求根過程包括如下步驟:步驟61:獲得3次多項式生成子模塊傳遞來的3次錯誤位置多項式σ(x)=σ3x3+σ2x2+σ1x+σ0;步驟62:將3次錯誤位置多項式σ(x)的3次項系數(shù)化為1;步驟63:為3次錯誤位置多項式σ(x)增加一個額外的根:σ2/σ3,將3次錯誤位置多項式轉(zhuǎn)化為4次仿射多項式的形式;步驟64:轉(zhuǎn)到4次多項式求根子模塊,應(yīng)用4次仿射多項式求根方法,求解出4次多項式的4個根。步驟65:得到4次多項式的4根后,將步驟63中增加的額外的根(σ2/σ3)去除,剩余的3個根為3次錯誤位置多項式σ(x)的根;步驟66:對3次錯誤位置多項式σ(x)的3個根求逆運算,求出錯誤位置。4次多項式求根子模塊的實現(xiàn)流程圖如圖7所示,4次多項式求根過程包括如下步驟:步驟71:獲得:4次多項式生成子模塊傳遞來的4次錯誤位置多項式σ(x)=σ4x4+σ3x3+σ2x2+σ1x+σ0;步驟72:將4次錯誤位置多項式σ(x)的4次項系數(shù)化為1;步驟73:判斷4次錯誤位置多項式σ(x)的3次項系數(shù)是否為0,若3次項系數(shù)為0,則進入步驟75,若3次項系數(shù)不等于0,則進入步驟 74;步驟74:消除4次錯誤位置多項式的3次項系數(shù),令有限域擴域上的變量z=1/(x-h),將4次錯誤位置多項式轉(zhuǎn)化為4次仿射多項式σ(z)=L(z)+c的形式,所述h為有限域擴域GF(2m)上的常量,且h滿足σ3h2+σ1=0,用來消除3次項系數(shù),L(z)為有限域擴域GF(2m)上的線性多項式,c為有限域擴域GF(2m)上的常量;步驟75:采用有限域擴域多項式求根方法(Zinoviev)法,求得4次仿射多項式的4個根:z3,z4,z5,z6;步驟76:根據(jù)4次仿射多項式的4個根z3,z4,z5,z6反變換得到對應(yīng)的4次錯誤位置多項式σ(x)的4個根:x3,x4,x5,x6,其中,h為步驟74中所述的有限域擴域GF(2m)上的常量;步驟77:對4次錯誤位置多項式σ(x)的4個根求逆運算,找到錯誤位置。本發(fā)明所述系統(tǒng)流程采用軟件實現(xiàn),不局限于系統(tǒng)運行平臺的選擇,具備非常強的可移植性。在本案例中選擇主頻2.0GHzPC機,ADI公司出產(chǎn)的主頻300MHz的ADITS101以及ADI公司出產(chǎn)的主頻600MHz的ADITS201分別針對BCH(4148,4096,9)執(zhí)行控制和計算過程,得到最大錯誤位數(shù)的情況下的結(jié)果如下表1:表1:BCH(4148,4096,9)不同實現(xiàn)效果對比設(shè)備運行機器周期數(shù)運行時間(μs)PC7521TS1011327744.2TS2011529325.4本發(fā)明描述的GF(2)、GF(2m)、伴隨式S(x)及其表示方法、錯誤位置多項式σ(x)及其表示方法,α表示有限域擴域的本原元,αi表示有限域擴域GF(2m)上的元素,是糾錯碼領(lǐng)域的常用符號,沒有其他解釋方法,該領(lǐng)域的人員可以讀懂。上面描述是用于實現(xiàn)本發(fā)明及其實施例,本發(fā)明的范圍不應(yīng)由該描 述來限定,本領(lǐng)域的技術(shù)人員應(yīng)該理解,在不脫離本發(fā)明的范圍的任何修改或局部替換,均屬于本發(fā)明權(quán)利要求來限定的范圍。