本發(fā)明屬于存儲(chǔ)技術(shù)領(lǐng)域,特別是涉及NAND flash存儲(chǔ)數(shù)據(jù)時(shí)容易發(fā)生比特流翻轉(zhuǎn)的情況,針對(duì)此種情況提出每進(jìn)行NAND flash頁寫入4096bits時(shí),進(jìn)行并行編碼處理,生108bits的校驗(yàn)位,取出數(shù)據(jù)時(shí)完成并行解碼處理,實(shí)現(xiàn)檢錯(cuò)糾錯(cuò)功能,該電路結(jié)構(gòu)能夠?qū)崿F(xiàn)4096bits中最高糾8bits錯(cuò)誤。
背景技術(shù):
近年來基于閃存技術(shù)的存儲(chǔ)設(shè)備,因?yàn)槠淙萘看螅杀镜土膬?yōu)點(diǎn)而廣受歡迎。在閃存存儲(chǔ)領(lǐng)域,NAND flash存儲(chǔ)器件由于具有容量大成本低的顯著優(yōu)勢(shì),從而被頻繁的使用為存儲(chǔ)介質(zhì)。作為閃存的物理結(jié)構(gòu)使其有固定的幾率發(fā)生錯(cuò)誤,而且大多數(shù)現(xiàn)有的存儲(chǔ)器件并沒有集成糾錯(cuò)算法,因而需要糾錯(cuò)碼技術(shù)使得信息安全可靠的存儲(chǔ)。BCH糾錯(cuò)碼因?yàn)榫哂袃?yōu)良的糾錯(cuò)能力和規(guī)則的實(shí)現(xiàn)方法,在閃存存儲(chǔ)結(jié)構(gòu)中的得到廣泛應(yīng)用。
糾錯(cuò)碼是一種在傳輸過程中發(fā)生錯(cuò)誤在接收端能夠自行發(fā)現(xiàn)和糾正的碼。為了使一種碼具有糾錯(cuò)能力,必須對(duì)原碼字增加多余的碼元,即把原碼元按照一定的規(guī)則變成一種具有校驗(yàn)位的碼字,這種關(guān)系的建立稱為編碼。碼字到達(dá)接收端可以根據(jù)編碼規(guī)則是否滿足來判斷是否有錯(cuò),當(dāng)不能滿足時(shí),按照一定的規(guī)則檢測(cè)出錯(cuò)誤所在的位置并給予糾正,這就是解碼。
BCH糾錯(cuò)碼是一類重要的糾錯(cuò)碼,屬于線性分組碼的一種。它將每k個(gè)信息碼元分為一組進(jìn)行獨(dú)立的編碼,變成長(zhǎng)度為n(n>k)的碼組,多出來的n-k個(gè)信息元被稱為監(jiān)督碼元,編碼可以表示為[n,k],解碼過程與編碼過程相反,把長(zhǎng)度為n的碼組進(jìn)行解碼變?yōu)閗個(gè)信息碼元。由于本發(fā)明應(yīng)用于NAND flash存儲(chǔ)領(lǐng)域,信息碼元為4096位,監(jiān)督碼元為104位,糾錯(cuò)能力最高為8bits,本發(fā)明重點(diǎn)研究的是具有該糾錯(cuò)能力的BCH的編碼和解碼電路結(jié)構(gòu)。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)背景技術(shù)中NAND flash存取數(shù)據(jù)時(shí)容易發(fā)生比特流的翻轉(zhuǎn),而現(xiàn)有的存儲(chǔ)器大多數(shù)都沒有集成糾錯(cuò)算法的特點(diǎn),設(shè)計(jì)了一種具有特定糾錯(cuò)能力的糾錯(cuò)電路,具體包括編碼電路和解碼電路,從而使NAND flash存儲(chǔ)數(shù)據(jù)時(shí)達(dá)到特定的糾錯(cuò)能力。該糾錯(cuò)電路采用并行編碼和解碼設(shè)計(jì),該電路具有速度快,成本低,糾錯(cuò)能力強(qiáng),效率高等特點(diǎn)。
本發(fā)明的技術(shù)方案是一種應(yīng)用于NAND flash的具有特定糾錯(cuò)能力的BCH糾錯(cuò)電路結(jié)構(gòu),該糾錯(cuò)電路結(jié)合了并行編碼和解碼優(yōu)點(diǎn),可以為NAND flash讀取數(shù)據(jù)提供快速的糾錯(cuò)檢錯(cuò)。該糾錯(cuò)電路包括:具有八位并行編碼電路、具有八位并行的解碼電路。其中由于事先研究過BCH特定的構(gòu)碼規(guī)則,所以編碼模塊直接就是一個(gè)單獨(dú)的并行編碼電路。解碼模塊包括八位并行的伴隨式計(jì)算電路,錯(cuò)誤位置多項(xiàng)式計(jì)算電路,錢搜索求根電路。
并行編碼電路根據(jù)生成多項(xiàng)式構(gòu)建的。解碼模塊中的伴隨式計(jì)算電路是將接收到的碼字計(jì)算出對(duì)應(yīng)的伴隨式,并根據(jù)伴隨式判斷接收碼字有無錯(cuò)誤發(fā)生。若存在伴隨式不為零的情況,則說明有錯(cuò)誤發(fā)生,則根據(jù)伴隨式求得錯(cuò)誤位置多項(xiàng)式。根據(jù)錯(cuò)誤位置多項(xiàng)式,求解錯(cuò)誤位置的根,得到錯(cuò)誤位置,并進(jìn)行糾錯(cuò)改正,最終得到正確的碼字。
下面簡(jiǎn)單介紹BCH碼的基本原理和構(gòu)建編碼解碼的一些方法。BCH碼是一種線性分組碼,所謂分組碼是將信元拆分為一個(gè)一個(gè)的分組分別進(jìn)行處理和編碼,將每k個(gè)信息碼元分為一組進(jìn)行獨(dú)立的編碼,變成長(zhǎng)度為n(n>k)的碼組,多出來的n-k個(gè)信息元被稱為校驗(yàn)碼,編碼可以表示為[n,k]。線性分組碼是指信息碼元與校驗(yàn)碼之間滿足線性關(guān)系的特殊分組碼。定義一個(gè)線性分組碼的信息序列為M,生成矩陣為G,校驗(yàn)矩陣為H,碼字為C,接收碼字為R,伴隨式為S,其中生成矩陣和校驗(yàn)矩陣關(guān)系為:GHT=0(n-k)*k,編碼方式為信息序列與生成矩陣的乘積得到編碼后的碼字:M1*(n-k)G(n-k)*n=C1*n,譯碼時(shí)接收碼字與校驗(yàn)矩陣得到伴隨式:R1*n HT=S1*k,再根據(jù)伴隨式計(jì)算錯(cuò)誤位置和求解錯(cuò)誤位置的根,達(dá)到糾錯(cuò)的目的。同時(shí)BCH碼也是一種系統(tǒng)循環(huán)碼,一個(gè)碼的碼字經(jīng)過循環(huán)移位之后仍然是一個(gè)碼字,這種碼字稱為循環(huán)碼,要構(gòu)造一個(gè)[n,k]循環(huán)碼,就是找一個(gè)能夠除盡的n-k次生成多項(xiàng)式g(x),該多項(xiàng)式滿足對(duì)于任意一個(gè)次數(shù)小于等于k-1的多項(xiàng)式m(x),都能滿足:C(x)=m(x)g(x),這里的C(x)為碼字多項(xiàng)式,m(x)信息碼元多項(xiàng)式。對(duì)于BCH碼而言,進(jìn)行編碼的關(guān)鍵問題是求解校驗(yàn)碼的問題,對(duì)于校驗(yàn)碼的求解相當(dāng)于將信息碼元多項(xiàng)式m(x)乘以xn-k,然后對(duì)g(x)求余式的問題,這個(gè)在電路里面可以用移位寄存器和異或門來實(shí)現(xiàn)。類似的解碼過程相當(dāng)于將接收到的碼字多項(xiàng)式r(x)除以生成多項(xiàng)式g(x)的余式就是伴隨式r(x),根據(jù)對(duì)伴隨式的計(jì)算求得錯(cuò)誤位置多項(xiàng)式,并求解錯(cuò)誤位置的根,最后達(dá)到糾錯(cuò)的目的。
接下來具體介紹BCH碼的一些規(guī)則,尤其是生成多項(xiàng)式的生成原理。BCH碼的涉及到二進(jìn)制有限域里面的運(yùn)算,對(duì)于BCH碼的具體定義如下:對(duì)于一個(gè)取自GF(2)上的循環(huán)碼,定義一個(gè)擴(kuò)域,若這個(gè)碼的生成多項(xiàng)式g(x)在上存在p-1個(gè)連續(xù)根,則這個(gè)碼被稱為BCH碼。BCH碼的運(yùn)算都在有限域的擴(kuò)域上,下面主要介紹有限域里面的一些概念:1、有限域元素:在有限域GF(2m)上,0,α0,α1,α2,α3,……,α2m-1稱為有限域GF(2m)中的2m個(gè)元素,本次發(fā)明中m取13。2、有限域共軛根元素:對(duì)具有某種共同特性的有限域元素歸納為有限域共軛根集,αi,(αi)2,(αi)3,(αi)4,……(αi)m就是一組共軛根元素,本次發(fā)明m取13,i的取值1,3,5,7……15。3、最小多項(xiàng)式:以有限域共軛集αi為根的GF(2m)上的次數(shù)最低的不可約多項(xiàng)式mi(x)稱為αi的最小多項(xiàng)式,求最小多項(xiàng)式的方法一般采用待定系數(shù)法。4、生成多項(xiàng)式:一個(gè)能夠糾正t個(gè)錯(cuò)誤的BCH碼的生成多項(xiàng)式的基本方法是求出2t個(gè)最小多項(xiàng)式的最小公倍式,由于αi與α2i屬于同一個(gè)共軛根集,有相同的最小多項(xiàng)式,所以生成多項(xiàng)式可以化簡(jiǎn)為求t個(gè)最小多項(xiàng)式的乘積,本次發(fā)明t取8。
總結(jié)下生成多項(xiàng)式的生成具體步驟,首先,根據(jù)預(yù)計(jì)的碼元長(zhǎng)度確定需要使用的有限域,若期望本原BCH碼元長(zhǎng)度為2m-1則選定擴(kuò)域?yàn)镚F(2m);其次,通過查詢表獲得m次的本原多項(xiàng)式,并根據(jù)本原多項(xiàng)式計(jì)算出2m個(gè)有限域元素和相應(yīng)的有限域共軛集;最后,根據(jù)共軛根集求出t個(gè)最小多項(xiàng)式,并計(jì)算乘積求得生成多項(xiàng)式g(x),g(x)的最高次數(shù)為最多為m*t。最后得到的生成多項(xiàng)式會(huì)用在我們的編碼和解碼上。
需要的BCH碼為[4200,4096]碼,該碼是一個(gè)[8191,8087]碼的縮短碼,擁有同樣的生成多項(xiàng)式,只是將信息碼元截短為4096bit即可,故m取13即可。當(dāng)m=13時(shí),本原多項(xiàng)式,最小多項(xiàng)式和生成多項(xiàng)式分別如下所示:
f(x)=x13+x4+x3+x+1
m1(x)=x13+x4+x3+x1+x0,m3(x)=x13+x10+x9+x7+x5+x4+x0
m5(x)=x13+x11+x8+x7+x4+x1+x0,m7(x)=x13+x10+x9+x8+x6+x3+x2+x1+x0
m9(x)=x13+x12+x8+x7+x6+x5+x0,m11(x)=x13+x9+x8+x7+x5+x1+x0
m13(x)=x13+x12+x6+x5+x4+x3+x0,m15(x)=x13+x9+x7+x5+x4+x3+x2+x1+x0
g(x)=x104+x100+x98+x96+x95+x94+x93+x92+x91+x88+x84+x82+x79+x78+x77+x70+x69+x68
+x67+x65+x64+x59+x58+x52+x49+x48+x47+x42+x41+x40+x38+x32+x31+x30+x26+x24+x23
+x22+x18+x15+x14+x13+x12+x11+x9+x8+x5+x1+1
對(duì)于編碼器設(shè)計(jì)關(guān)鍵是求解校驗(yàn)碼的問題,求解校驗(yàn)碼的具體步驟就是將信息多項(xiàng)式m(x)乘以xn-k,然后用生成多項(xiàng)式g(x)求其余式。這個(gè)問題很容易在電路中實(shí)現(xiàn),通常可以使用線性反饋移位寄存器。對(duì)于解碼器設(shè)計(jì)的關(guān)鍵就是求得錯(cuò)誤位置多項(xiàng)式,其中涉及到伴隨式的計(jì)算,求得錯(cuò)誤位置多項(xiàng)式還必須求得具體的錯(cuò)誤所處的位置,并進(jìn)行翻轉(zhuǎn)修正才能達(dá)到糾錯(cuò)的目的,解碼總體來說比編碼結(jié)構(gòu)更復(fù)雜些。
附圖說明
圖1為BCH糾錯(cuò)碼具體電路結(jié)構(gòu)示意圖;
圖2為串行編碼電路結(jié)構(gòu)示意圖;
圖3為八位并行編碼電路結(jié)構(gòu)示意圖;
圖4為串行伴隨式計(jì)算結(jié)構(gòu)示意圖;
圖5為八位并行伴隨式計(jì)算結(jié)構(gòu)示意圖;
圖6為錯(cuò)誤位置多項(xiàng)式求解結(jié)構(gòu)示意圖;
圖7為串行錢搜索求根示意圖;
圖8為八位并行錢搜索求根示意圖;
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施案例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明實(shí)例中具體的BCH糾錯(cuò)碼電路如圖1所示。傳輸中編碼前的數(shù)據(jù)經(jīng)過八位并行編碼電路,得到編碼之后的數(shù)據(jù)存儲(chǔ)在NAND flash里面,編碼之后的數(shù)據(jù)包括信息位和校驗(yàn)位。讀取數(shù)據(jù)時(shí)譯碼前的數(shù)據(jù)經(jīng)過并行伴隨式計(jì)算電路,錯(cuò)誤位置計(jì)算電路,并行錢搜索求根電路,最終得到譯碼之后的數(shù)據(jù),實(shí)現(xiàn)檢錯(cuò)糾錯(cuò)的功能。
具體的,在本發(fā)明實(shí)例中BCH糾錯(cuò)碼電路的并行編碼模塊如圖3所示,在接收并行編碼模塊之前介紹串行編碼模塊如圖2所示。在串行編碼模塊中,4096位信息為從高位到低位依次串行輸入,104個(gè)寄存器用于存儲(chǔ)校驗(yàn)位,最高位異或門的輸出結(jié)果反饋給其它位,具體反饋情況與生成多項(xiàng)式g(x)有關(guān),相關(guān)校驗(yàn)位寄存器在g(x)里面系數(shù)不為0,則存在最高位異或門的輸出結(jié)果到其的反饋通路。具體操作如下,在前4096個(gè)周期依次從高位到低位輸入4096為信息位,信息位傳送完畢,104位校驗(yàn)位寄存器里面所存儲(chǔ)的正是104位的校驗(yàn)位。如果該校驗(yàn)位需要串行輸出的話,總共所需時(shí)間為4200個(gè)周期?;诖芯幋a的原理基礎(chǔ)上,本次發(fā)明改進(jìn)為八位并行編碼,能夠縮短編碼時(shí)間,提高吞吐率,具體電路結(jié)構(gòu)如圖3所示。在每個(gè)周期內(nèi)依次輸入八位信息位,反饋通路與串行編碼一樣,這樣在每個(gè)周期內(nèi)能夠處理八位信息位的計(jì)算,每次計(jì)算結(jié)果依舊保存在104位校驗(yàn)位寄存器中。在這種并行結(jié)構(gòu)中,只需要512個(gè)周期就可以把信息位傳輸完畢,若考慮校驗(yàn)位也是八位傳輸?shù)?,則總共需要525個(gè)周期。根據(jù)對(duì)比可以發(fā)現(xiàn)雖然并行編碼比串行編碼消耗的資源更多,但同時(shí)速度和吞吐率的提升也是非常可觀的。
本發(fā)明實(shí)例中BCH糾錯(cuò)碼電路的并行伴隨式計(jì)算電路如圖5所示,在介紹并行伴隨式計(jì)算之前先介紹串行伴隨式計(jì)算模塊如圖4所示。根據(jù)BCH碼的糾錯(cuò)能力可知,糾錯(cuò)能力為t的BCH碼,需要在接收模塊計(jì)算2t個(gè)伴隨式S1到S2t,計(jì)算伴隨式只需要將有限域元素αj代入到接收碼字多項(xiàng)式C(x)中計(jì)算乘積求得C(x),則伴隨式為Sj=C(αj),計(jì)算伴隨式就會(huì)用到有限域元素的乘法和加法運(yùn)算。在串行伴隨式計(jì)算電路中,只需把接收碼元從高位到低位依次送入計(jì)算電路中,每次對(duì)計(jì)算結(jié)果進(jìn)行迭代和保存,當(dāng)所有的碼元都送入后,下一個(gè)周期寄存器的值就是伴隨式的結(jié)果,對(duì)于不同的伴隨式計(jì)算只需要更新有限域元素。對(duì)于GF(2m)上的加法,就是對(duì)應(yīng)的域元素按位異或運(yùn)算;GF(2m)上的乘法,就是對(duì)應(yīng)的域元素對(duì)冪指數(shù)求模運(yùn)算?;诖械陌殡S式計(jì)算電路很容易改成并行的計(jì)算電路,本次發(fā)明所采用的八位并行伴隨式計(jì)算電路結(jié)構(gòu)如5所示。每次從高位到低位將八位接收碼元送入接收電路,結(jié)合不同的反饋系數(shù)進(jìn)行迭代,可以在一個(gè)周期內(nèi)進(jìn)行多次計(jì)算,大大縮短計(jì)算時(shí)間。與串行伴隨式計(jì)算電路相比,該并行伴隨式計(jì)算電路結(jié)構(gòu)相對(duì)復(fù)雜一些,但是關(guān)鍵路徑大大縮短,效率大大提高。
本發(fā)明實(shí)例中BCH糾錯(cuò)碼電路的錯(cuò)誤位置多項(xiàng)式計(jì)算電路如圖6所示。錯(cuò)誤位置多項(xiàng)式的計(jì)算是BCH碼的譯碼過程中最復(fù)雜的一個(gè)步驟,現(xiàn)有的求解算法也比較多,本次發(fā)明中采用的是改進(jìn)的Berlekamp-Massey迭代算法,采用的是RiBM算法,該算法具有結(jié)構(gòu)簡(jiǎn)單計(jì)算速度快等諸多優(yōu)點(diǎn),具體步驟如下所示。
初始條件:δi(0)=θi(0)=Si,(i=0,1,...,2t-1);δi(0)=1,(i=3t);δi(0)=0,(i=2t,2t+1,...,3t-1);k(0)=0;γ(0)=1;r=0.
跳轉(zhuǎn)部分:判斷r是否等于2t-1,如果相等跳轉(zhuǎn)(5),否則跳轉(zhuǎn)(3)。
計(jì)算判斷部分:δi(r+1)=γ(r)·δi+1(r)-δ0(r)·θi(r),(i=0,1,...,3t).隨后是判斷部分,若有δ0≠0且k(r)≥0,則有:θi(r+1)=δi+1(r),(i=0,1,...3r),γ(r+1)=δi+1(r),k(r+1)=-k(r)-1.否則:θi(r+1)=θi(r),(i=0,1,...3r),γ(r+1)=γ(r),k(r+1)=k(r)+1.
自加部分:r加1,并回到(2),進(jìn)行下一步操作。
結(jié)果部分:結(jié)束循環(huán),輸出錯(cuò)誤位置多項(xiàng)式的各項(xiàng)系數(shù):σi=δ(t+i),(i=0,1,2,……,t)最后得到錯(cuò)誤位置多項(xiàng)式,對(duì)圖5而言數(shù)據(jù)選擇器的判斷端口由條件δ0≠0且k(r)≥0判斷,同樣也涉及到有限域乘運(yùn)算和有限域加運(yùn)算。
本發(fā)明實(shí)例中BCH糾錯(cuò)碼電路的并行錢搜索求根電路如圖8所示,在介紹并行錢搜索求根電路之前先介紹串行錢搜索求根電路如圖7所示。在求得錯(cuò)誤位置多項(xiàng)式的基礎(chǔ)上,接下來就是求得錯(cuò)誤位置的根來確定錯(cuò)誤位置,并進(jìn)行糾錯(cuò)。其中我們通過之前的電路可以得到σ(x),直接求根法比較困難,錢搜索求根的思路是將有限域元素依次帶入錯(cuò)誤位置多項(xiàng)式中看能否滿足:σ(αi)=0。對(duì)于數(shù)據(jù)的第L位數(shù)據(jù)rn-L,要判斷其是否有錯(cuò),則只需判斷σ(αL)是否為0即可,若為0,則說明數(shù)據(jù)有錯(cuò),由于編碼都是二進(jìn)制編碼,對(duì)第L位數(shù)據(jù)取反即可完成對(duì)錯(cuò)誤的修正。對(duì)于串行錢搜索求根計(jì)算電路從碼元的高位開始逐位進(jìn)行檢測(cè),首先寄存器初始化錯(cuò)誤位置多項(xiàng)式系數(shù)σi,然后依次從高位開始輸入接收碼序列,同時(shí)在計(jì)算電路中計(jì)算有限域乘法,并對(duì)結(jié)果進(jìn)行求和。如果求和結(jié)果等于0,則說明對(duì)應(yīng)位有錯(cuò),求和模塊判斷模塊輸出1,與對(duì)應(yīng)的接受碼進(jìn)行異或操作,即可將數(shù)據(jù)取反,進(jìn)行修正;如果不等于0,則求和判斷模塊輸出0,異或之后使得對(duì)應(yīng)位不變,這樣就完成一個(gè)bit的檢錯(cuò)和糾錯(cuò)。接著可以進(jìn)行下一次循環(huán),直到所有的數(shù)據(jù)完全通過錢搜索求根電路完成檢錯(cuò)和糾錯(cuò),計(jì)算才完成。對(duì)于八位并行錢搜索求根電路如圖8所示,設(shè)計(jì)并行錢搜索求根電路與其他并行電路思想類似,采用了迭代的思想,由于并行度為8,所以每次寄存器更新值由串行電路里面的αi變?yōu)椴⑿须娐防锩娴摩?sup>8i,并且加入了αi到α7i的計(jì)算單元電路,用于計(jì)算兩次更新的間隔值。與串行錢搜索求根電路相比,并行錢搜索求根電路雖然消耗的資源較多,但計(jì)算速度大大提升,效率也大大提高。