專利名稱:Ecc參數(shù)可配置的存儲器控制裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種存儲器相關(guān)的裝置,尤其涉及一種帶有數(shù)據(jù)糾錯(cuò)編碼的存儲器控 制裝置。
背景技術(shù):
隨著人們生活的信息化程度越來越高,數(shù)字化的數(shù)據(jù)存儲也是無處不在,成為當(dāng) 今信息社會不可缺少的關(guān)鍵技術(shù)。NAND型閃存(也可以稱為NAND Flash)是一種新興的數(shù) 字存儲介質(zhì),應(yīng)用越來越廣泛。在NAND Flash的實(shí)際應(yīng)用中,糾錯(cuò)碼(Error-Correcting Code, ECC)技術(shù)起著至關(guān)重要的作用。這是由于NAND Flash在讀寫數(shù)據(jù)的過程中會發(fā)生 比特錯(cuò)誤。應(yīng)用于NAND Flash的ECC碼主要有Hamming碼、RS碼和BCH碼。Hamming碼只 能糾正Ibit錯(cuò)誤和檢查2bit錯(cuò)誤,因此隨著NAND Flash對ECC碼糾錯(cuò)能力的要求不斷提 高,Hamming碼逐漸被其他具有更強(qiáng)糾錯(cuò)能力的線性分組碼(如BCH碼和RS碼)所取代。 特定設(shè)計(jì)的BCH碼可以在一定范圍內(nèi)進(jìn)行多比特糾錯(cuò),而特定設(shè)計(jì)的RS碼可以在一定范圍 內(nèi)進(jìn)行多符號糾錯(cuò)(一個(gè)符號由若干比特表達(dá))。在本文以下部分,ECC碼指BCH碼和RS 碼。各種ECC碼的算法不盡相同,但基本原理是一樣的將原有數(shù)據(jù)經(jīng)過編碼運(yùn)算,生 成相應(yīng)的監(jiān)督碼,然后將原始數(shù)據(jù)與監(jiān)督碼一同存儲;在解碼時(shí)原始數(shù)據(jù)與監(jiān)督碼一同參 與運(yùn)算。如果存儲中有一定的錯(cuò)誤,并且在該ECC碼的糾錯(cuò)能力范圍之內(nèi),則可以恢復(fù)出無 誤的原始數(shù)據(jù)。由此可見,ECC碼是通過增加冗余數(shù)據(jù)的方法來實(shí)現(xiàn)抗干擾,保證數(shù)據(jù)的正 確性。而增加冗余數(shù)據(jù)的代價(jià)是NAND Flash要增加一塊冗余的存儲空間來存放冗余數(shù)據(jù)。 這部分增加的存儲空間被稱為Spare區(qū)。ECC碼運(yùn)算復(fù)雜,運(yùn)算量大,為了保證實(shí)時(shí)性,NAND Flash應(yīng)用系統(tǒng)中的ECC碼運(yùn) 算一般以硬件方式來實(shí)現(xiàn),進(jìn)行ECC碼編碼和解碼運(yùn)算的硬件模塊被稱為ECC模塊。圖1 所示為一個(gè)典型的NAND Flash應(yīng)用系統(tǒng)。該系統(tǒng)包含一片或多片NANDFlash、一個(gè)中央處 理器CPU和一個(gè)NAND Flash控制器。NAND Flash控制器包含ECC模塊、閃存接口等。ECC 模塊負(fù)責(zé)對寫入NAND Flash的數(shù)據(jù)進(jìn)行ECC編碼,以及對由NAND Flash讀出的數(shù)據(jù)進(jìn)行 ECC解碼(包含可能的糾錯(cuò)操作)。傳統(tǒng)的ECC模塊設(shè)計(jì)一般都采用編碼數(shù)據(jù)分組長度以及糾錯(cuò)比特/符號數(shù) 為固定值的方式,比如數(shù)據(jù)長度為512Byte且需要Sbit糾錯(cuò),則設(shè)計(jì)的ECC模塊為 8bitECC/525Byte。這種設(shè)計(jì)方式的最大的限制在于,當(dāng)應(yīng)用發(fā)生變化時(shí),ECC模塊需要 重新設(shè)計(jì)。以NAND Flash的控制芯片(比如常見的U盤、SD卡的控制芯片)設(shè)計(jì)為 例,NAND Flash對ECC的需求從最早的lbit/520Byte,到后來的4bit/528Byte, 一直到 24bit/1040Byte,不斷在改變。相應(yīng)地,ECC模塊也需要不斷地修改設(shè)計(jì)。甚至為了兼容不 同的需求,出現(xiàn)了同一個(gè)芯片中同時(shí)存在幾種不同的ECC模塊的情形,顯然這對于芯片的 研發(fā)成本還是芯片本身的硬件成本都是不小的開銷。另外,在NAND Flash應(yīng)用中,也有對 不同長度數(shù)據(jù)進(jìn)行糾錯(cuò)編碼的需求,比如希望同一個(gè)ECC模塊能夠分別對長為512Bytes和
51024Bytes的數(shù)據(jù)進(jìn)行編碼。顯然,固定的數(shù)據(jù)分組長度也不能完全適應(yīng)人們對NAND Flash 應(yīng)用的要求。
發(fā)明內(nèi)容
本發(fā)明的目的在于解決上述問題,提供了一種ECC參數(shù)可配置的存儲器控制裝 置,可在一定范圍內(nèi)對ECC模塊的數(shù)據(jù)分組長度和糾錯(cuò)能力進(jìn)行配置,從而不但可以滿足 NAND Flash管理軟件對多種ECC編碼長度的要求,而且可以滿足多種NAND Flash對其控制 器ECC模塊不同糾錯(cuò)能力的要求,從而延長NAND Flash控制器的生命周期。本發(fā)明的技術(shù)方案為本發(fā)明揭示了一種ECC參數(shù)可配置的存儲器控制裝置,包 括存儲器接口,用于連接存儲器;ECC碼數(shù)據(jù)分組長度寄存器,用于存儲ECC編碼時(shí)的數(shù)據(jù)分組長度;迭代初始值存儲單元,用于存儲根據(jù)預(yù)設(shè)的糾錯(cuò)比特/符號數(shù)和該ECC碼數(shù)據(jù)分 組長度寄存器中存儲的數(shù)據(jù)分組長度計(jì)算得到的用于ECC解碼過程的錢搜索算法的一組 迭代初始值;ECC模塊,在ECC編碼時(shí)基于由預(yù)設(shè)的糾錯(cuò)比特/符號數(shù)得到的生成多項(xiàng)式對數(shù)據(jù) 進(jìn)行ECC編碼,在ECC解碼時(shí)基于該迭代初始值存儲單元中的該組迭代初始值,利用錢搜索 算法進(jìn)行ECC解碼。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該迭代初始值存儲 單元是迭代初始值寄存器組。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,在系統(tǒng)上電或該 ECC碼數(shù)據(jù)分組長度寄存器中的數(shù)據(jù)分組長度被修改時(shí),通過存儲器控制裝置外的計(jì)算設(shè) 備根據(jù)預(yù)設(shè)的糾錯(cuò)比特/符號數(shù)和該ECC碼數(shù)據(jù)分組長度寄存器中存儲的數(shù)據(jù)分組長度 計(jì)算得到用于ECC解碼過程的錢搜索算法的一組迭代初始值,并寫入迭代初始值寄存器組 中。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該存儲器控制裝置 還包括迭代初始值計(jì)算電路,在系統(tǒng)上電或該ECC碼數(shù)據(jù)分組長度寄存器中的數(shù)據(jù)分組 長度被修改時(shí),根據(jù)預(yù)設(shè)的糾錯(cuò)比特/符號數(shù)和該ECC碼數(shù)據(jù)分組長度寄存器中存儲的數(shù) 據(jù)分組長度以硬件電路的方式計(jì)算得到用于ECC解碼過程的錢搜索算法的一組迭代初始 值,并寫入迭代初始值寄存器組中。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該迭代初始值存儲 單元是一邏輯電路,將預(yù)設(shè)的糾錯(cuò)比特/符號數(shù)和各個(gè)數(shù)據(jù)分組長度值所對應(yīng)的各組迭代 初始值配置成一張硬件實(shí)現(xiàn)的查詢表,該ECC模塊根據(jù)該ECC碼數(shù)據(jù)分組長度寄存器中存 儲的數(shù)據(jù)分組長度搜索該查詢表,以獲得相應(yīng)的一組迭代初始值。本發(fā)明還揭示了一種ECC參數(shù)可配置的存儲器控制裝置,包括存儲器接口,用于連接存儲器;ECC碼糾錯(cuò)能力寄存器,用于存儲ECC編碼時(shí)的糾錯(cuò)比特/符號數(shù);生成多項(xiàng)式存儲單元,用于存儲根據(jù)該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特/符號數(shù)計(jì)算得到的用于ECC編碼過程的生成多項(xiàng)式;迭代初始值存儲單元,用于存儲根據(jù)該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特 /符號數(shù)和預(yù)設(shè)的數(shù)據(jù)分組長度計(jì)算得到的用于ECC解碼過程的錢搜索算法的一組迭代初 始值;ECC模塊,在ECC編碼時(shí)根據(jù)該生成多項(xiàng)式存儲單元中的生成多項(xiàng)式對數(shù)據(jù)進(jìn)行 ECC編碼,在ECC解碼時(shí)基于該迭代初始值存儲單元中的該組迭代初始值,利用錢搜索算法 進(jìn)行ECC解碼。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該生成多項(xiàng)式存儲 單元是生成多項(xiàng)式寄存器。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,在系統(tǒng)上電或該 ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù)被修改時(shí),通過存儲器控制裝置外的計(jì)算設(shè) 備根據(jù)糾錯(cuò)比特/符號數(shù)計(jì)算出相應(yīng)的生成多項(xiàng)式,并存儲在該生成多項(xiàng)式寄存器中。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該存儲器控制裝置 還包括生成多項(xiàng)式計(jì)算電路,在系統(tǒng)上電或該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符 號數(shù)被修改時(shí),根據(jù)該糾錯(cuò)比特/符號數(shù)以硬件電路的方式計(jì)算出相應(yīng)的生成多項(xiàng)式,并 存儲在該生成多項(xiàng)式寄存器中。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該生成多項(xiàng)式存儲 單元是第一邏輯電路,將各個(gè)糾錯(cuò)比特/符號數(shù)的值所對應(yīng)的各個(gè)生成多項(xiàng)式配置成一張 硬件實(shí)現(xiàn)的查詢表,該ECC模塊根據(jù)該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特/符號數(shù) 搜索該查詢表,以獲得相應(yīng)的生成多項(xiàng)式。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該迭代初始值存儲 單元是迭代初始值寄存器組。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,在系統(tǒng)上電或該 ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù)被修改時(shí),通過存儲器控制裝置外的計(jì)算設(shè) 備根據(jù)預(yù)設(shè)的數(shù)據(jù)分組長度和該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù)計(jì)算得到用 于ECC解碼過程的錢搜索算法的一組迭代初始值,并寫入迭代初始值寄存器組中。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該存儲器控制裝置 還包括迭代初始值計(jì)算電路,在系統(tǒng)上電或該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符 號數(shù)被修改時(shí),根據(jù)預(yù)設(shè)的數(shù)據(jù)分組長度和該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特/ 符號數(shù)以硬件電路的方式計(jì)算得到用于ECC解碼過程的錢搜索算法的一組迭代初始值,并 寫入迭代初始值寄存器組中。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該迭代初始值存儲 單元是第二邏輯電路,將預(yù)設(shè)的數(shù)據(jù)分組長度和各個(gè)糾錯(cuò)比特/符號數(shù)的值所對應(yīng)的各組 迭代初始值配置成一張硬件實(shí)現(xiàn)的查詢表,該ECC模塊根據(jù)該ECC碼糾錯(cuò)能力寄存器中存 儲的糾錯(cuò)比特/符號數(shù)搜索該查詢表,以獲得相應(yīng)的一組迭代初始值。本發(fā)明又揭示了一種ECC參數(shù)可配置的存儲器控制裝置,包括存儲器接口,用于連接存儲器;
7
ECC碼數(shù)據(jù)分組長度寄存器,用于存儲ECC編碼時(shí)的數(shù)據(jù)分組長度;ECC碼糾錯(cuò)能力寄存器,用于存儲ECC編碼時(shí)的糾錯(cuò)比特/符號數(shù);生成多項(xiàng)式存儲單元,用于存儲根據(jù)該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特 /符號數(shù)計(jì)算得到的用于ECC編碼過程的生成多項(xiàng)式;迭代初始值存儲單元,用于存儲根據(jù)該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特 /符號數(shù)和該ECC碼數(shù)據(jù)分組長度寄存器中存儲的數(shù)據(jù)分組長度計(jì)算得到的用于ECC解碼 過程的錢搜索算法的一組迭代初始值;ECC模塊,在ECC編碼時(shí)根據(jù)該生成多項(xiàng)式存儲單元中的生成多項(xiàng)式對數(shù)據(jù)進(jìn)行 ECC編碼,在ECC解碼時(shí)基于該迭代初始值存儲單元中的該組迭代初始值,利用錢搜索算法 進(jìn)行ECC解碼。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該生成多項(xiàng)式存儲 單元是生成多項(xiàng)式寄存器。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,在系統(tǒng)上電或該 ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù)被修改時(shí),通過存儲器控制裝置外的計(jì)算設(shè) 備根據(jù)糾錯(cuò)比特/符號數(shù)計(jì)算出相應(yīng)的生成多項(xiàng)式,并存儲在該生成多項(xiàng)式寄存器中。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該存儲器控制裝置 還包括生成多項(xiàng)式計(jì)算電路,在系統(tǒng)上電或該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符 號數(shù)被修改時(shí),根據(jù)該糾錯(cuò)比特/符號數(shù)以硬件電路的方式計(jì)算出相應(yīng)的生成多項(xiàng)式,并 存儲在該生成多項(xiàng)式寄存器中。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該生成多項(xiàng)式存儲 單元是第一邏輯電路,將各個(gè)糾錯(cuò)比特/符號數(shù)的值所對應(yīng)的各個(gè)生成多項(xiàng)式配置成一張 硬件實(shí)現(xiàn)的查詢表,該ECC模塊根據(jù)該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特/符號數(shù) 搜索該查詢表,以獲得相應(yīng)的生成多項(xiàng)式。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該迭代初始值存儲 單元是迭代初始值寄存器組。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,在系統(tǒng)上電或該 ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù)被修改或該ECC碼數(shù)據(jù)分組長度寄存器中的 數(shù)據(jù)分組長度被修改時(shí),通過存儲器控制裝置外的計(jì)算設(shè)備根據(jù)該ECC碼數(shù)據(jù)分組長度寄 存器中的數(shù)據(jù)分組長度和該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù)計(jì)算得到用于 ECC解碼過程的錢搜索算法的一組迭代初始值,并寫入迭代初始值寄存器組中。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該存儲器控制裝置 還包括迭代初始值計(jì)算電路,在系統(tǒng)上電或該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符 號數(shù)被修改或該ECC碼數(shù)據(jù)分組長度寄存器中的數(shù)據(jù)分組長度被修改時(shí),根據(jù)該ECC碼數(shù) 據(jù)分組長度寄存器中的數(shù)據(jù)分組長度和該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特/符號 數(shù)以硬件電路的方式計(jì)算得到用于ECC解碼過程的錢搜索算法的一組迭代初始值,并寫入 迭代初始值寄存器組中。根據(jù)本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的一實(shí)施例,該迭代初始值存儲單元是第二邏輯電路,將各個(gè)糾錯(cuò)比特/符號數(shù)和各個(gè)數(shù)據(jù)分組長度所對應(yīng)的各組迭代初 始值配置成一張硬件實(shí)現(xiàn)的查詢表,該ECC模塊根據(jù)該ECC碼糾錯(cuò)能力寄存器中存儲的糾 錯(cuò)比特/符號數(shù)和該ECC碼數(shù)據(jù)分組長度寄存器中的數(shù)據(jù)分組長度搜索該查詢表,以獲得 相應(yīng)的一組迭代初始值。本發(fā)明對比現(xiàn)有技術(shù)有如下的有益效果本發(fā)明的ECC參數(shù)可配置的存儲器控制 裝置內(nèi)部有一個(gè)ECC碼數(shù)據(jù)分組長度寄存器和一個(gè)ECC碼糾錯(cuò)能力寄存器,分別存放ECC 編碼的數(shù)據(jù)分組長度和糾錯(cuò)能力(以糾錯(cuò)比特/符號數(shù)來表達(dá))。在實(shí)際應(yīng)用中,用戶根 據(jù)NAND Flash的要求,通過CPU對這兩個(gè)寄存器進(jìn)行設(shè)置。在存儲器控制裝置中還設(shè)置一 個(gè)生成多項(xiàng)式寄存器或生成多項(xiàng)式表以及一個(gè)迭代初始值寄存器組或迭代初始值表,通過 生成多項(xiàng)式寄存器(或生成多項(xiàng)式表)以及迭代初始值寄存器組(或迭代初始值表),基 于ECC碼數(shù)據(jù)分組長度寄存器和ECC碼糾錯(cuò)能力寄存器中的數(shù)值進(jìn)行相應(yīng)的編碼和解碼操 作,從而滿足NAND Flash對糾錯(cuò)編碼的不同需求,達(dá)到可配置的目的。相對于傳統(tǒng)的ECC 模塊,針對需要實(shí)現(xiàn)數(shù)據(jù)分組長度或糾錯(cuò)比特/符號數(shù)可變的情況,本發(fā)明的控制裝置中 只需要設(shè)計(jì)一個(gè)ECC模塊,通過參數(shù)配置的方式,在預(yù)設(shè)的范圍內(nèi)可自由調(diào)整糾錯(cuò)的數(shù)據(jù) 分組長度和糾錯(cuò)比特/符號數(shù),從而實(shí)現(xiàn)了最大的靈活性。這樣不僅節(jié)省了設(shè)計(jì)的時(shí)間,對 于硬件成本也是大幅降低,而且可適用的場合則大幅增加,允許不同領(lǐng)域的硬件設(shè)計(jì)共用 同一種ECC模塊。
圖1示出了傳統(tǒng)的ECC模塊的原理圖。圖2是本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的第一實(shí)施例的原理圖。圖3是本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的第二實(shí)施例的原理圖。圖4是本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的第三實(shí)施例的原理圖。圖5是本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的第四實(shí)施例的原理圖。圖6是本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的第五實(shí)施例的原理圖。圖7是本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的第六實(shí)施例的原理圖。圖8是本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的第七實(shí)施例的原理圖。圖9是本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的第八實(shí)施例的原理圖。圖10是本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的第九實(shí)施例的原理圖。
具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例對本發(fā)明作進(jìn)一步的描述。ECC參數(shù)可配置的存儲器控制裝置的第一實(shí)施例圖2示出了本發(fā)明的ECC參數(shù)可配置的存儲器控制裝置的第一實(shí)施例的原理。請 參見圖1,本實(shí)施例的存儲器控制裝置10包括ECC模塊100、ECC碼數(shù)據(jù)分組長度寄存器 101、迭代初始值寄存器組102和存儲器接口 103。在本實(shí)施例中,存儲器控制裝置10以閃 存存儲設(shè)備的控制裝置為例,也就是說,與存儲器控制裝置10連接的是NAND閃存12 (NAND 型Flash)。而且,在本實(shí)施例中,ECC碼以BCH碼為例進(jìn)行說明。對于本實(shí)施例的存儲器控制裝置10來說,ECC碼的糾錯(cuò)比特/符號數(shù)(也就是ECC碼糾錯(cuò)能力)這個(gè)參數(shù)是固定的,用戶可以調(diào)整的是ECC碼的數(shù)據(jù)分組長度這一參數(shù)。 裝置中的ECC碼數(shù)據(jù)分組長度寄存器101是用來存放ECC模塊編碼時(shí)的數(shù)據(jù)分組長度。在 實(shí)際應(yīng)用中,人們可以根據(jù)NAND閃存12的要求,通過CPU 11對這個(gè)寄存器101進(jìn)行設(shè)置。 ECC模塊100在工作時(shí),將根據(jù)這個(gè)寄存器中的數(shù)據(jù)進(jìn)行相應(yīng)的編碼和解碼操作,從而滿足 NAND閃存12對糾錯(cuò)編碼的不同需求,達(dá)到可配置的目的。存儲器控制裝置10內(nèi)的迭代初始值寄存器組102用于ECC模塊100的解碼過程。 ECC模塊100在解碼時(shí)如果發(fā)現(xiàn)碼元有錯(cuò),將使用錢搜索(Chien Search)算法進(jìn)行查錯(cuò)。 錢搜索算法依賴于在不同位置下對錯(cuò)誤位置多項(xiàng)式的迭代計(jì)算,其中要用到一組迭代計(jì)算 寄存器,來存放每次迭代計(jì)算的結(jié)果。在BCH碼為縮短碼的情況下,如果在錢搜索計(jì)算開始 時(shí)根據(jù)實(shí)際碼長賦予迭代計(jì)算寄存器組初始值,則可以實(shí)現(xiàn)錢搜索計(jì)算時(shí)間最小化。由于 ECC模塊100所使用的BCH碼一般都是縮短碼,因此需要在存儲器控制裝置10內(nèi)設(shè)置一個(gè) 迭代初始值寄存器組102,用于存放迭代計(jì)算寄存器組的初始值。在系統(tǒng)上電或者ECC碼數(shù) 據(jù)分組長度寄存器中的數(shù)值被修改時(shí),通過CPU 11向迭代初始值寄存器組102寫入迭代計(jì) 算初始值。ECC模塊100在每次進(jìn)行錢搜索計(jì)算之前,只要從迭代初始值寄存器組102中讀 取相應(yīng)的迭代計(jì)算初始值,并存放于迭代計(jì)算寄存器中,即可快速啟動(dòng)錢搜索計(jì)算。和傳統(tǒng)技術(shù)相比,本實(shí)施例在于ECC編碼時(shí)的數(shù)據(jù)分組長度不是固定的。在傳統(tǒng) 技術(shù)中,由于ECC的數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)都是固定的,因此錢搜索算法的迭代 計(jì)算初始值也是固定的,傳統(tǒng)技術(shù)是先根據(jù)數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)計(jì)算出錢搜 索算法的迭代計(jì)算初始值,在ECC解碼時(shí)用這個(gè)已經(jīng)計(jì)算出的迭代計(jì)算初始值進(jìn)行ECC解 碼,實(shí)現(xiàn)解碼過程中的校驗(yàn)和糾錯(cuò)。然而,在本實(shí)施例中,數(shù)據(jù)分組長度不是固定的,是在裝 置使用的時(shí)候由用戶來配置的,因此錢搜索算法的迭代計(jì)算初始值也就不是固定的。本實(shí) 施例是用一個(gè)寄存器(ECC碼數(shù)據(jù)分組長度寄存器101)存放用戶自行配置的數(shù)據(jù)分組長度 值,外部的CPU 11根據(jù)數(shù)據(jù)分組長度值計(jì)算對應(yīng)的這組迭代計(jì)算初始值(具體的計(jì)算方法 是和傳統(tǒng)技術(shù)相同的,只不過計(jì)算的時(shí)間點(diǎn)不同,傳統(tǒng)技術(shù)是預(yù)先計(jì)算,本實(shí)施例是在用戶 配置好數(shù)據(jù)分組長度后計(jì)算),并將計(jì)算出的值放入迭代初始值寄存器組102中。而后續(xù)的 根據(jù)迭代計(jì)算初始值以及錢搜索算法來實(shí)現(xiàn)解碼時(shí)糾錯(cuò)功能,也和傳統(tǒng)技術(shù)相同,在此不 再一一贅述。ECC參數(shù)可配置的存儲器控制裝置的第二實(shí)施例圖3示出了本實(shí)施例的ECC參數(shù)可配置的存儲器控制裝置的第二實(shí)施例的原理。 請參見圖3,本實(shí)施例的存儲器控制裝置20包括ECC模塊200、ECC碼數(shù)據(jù)分組長度寄存器 201、迭代初始值計(jì)算電路202、迭代初始值寄存器組203以及存儲器接口 204。在本實(shí)施例 中,存儲器控制裝置20以閃存存儲設(shè)備的控制裝置為例,也就是說,與存儲器控制裝置20 連接的是NAND閃存22(NAND型Flash)。而且,在本實(shí)施例中,ECC碼以BCH碼為例進(jìn)行說 明。對于本實(shí)施例的存儲器控制裝置20來說,ECC碼的糾錯(cuò)比特/符號數(shù)(也就是 ECC碼糾錯(cuò)能力)這個(gè)參數(shù)是固定的,用戶可以調(diào)整的是ECC碼的數(shù)據(jù)分組長度這一參數(shù)。 裝置中的ECC碼數(shù)據(jù)分組長度寄存器201是用來存放ECC模塊編碼時(shí)的數(shù)據(jù)分組長度。在 實(shí)際應(yīng)用中,人們可以根據(jù)NAND閃存22的要求,通過CPU 21對這個(gè)寄存器201進(jìn)行設(shè)置。 ECC模塊200在工作時(shí),將根據(jù)這個(gè)寄存器中的數(shù)據(jù)進(jìn)行相應(yīng)的編碼和解碼操作,從而滿足NAND閃存22對糾錯(cuò)編碼的不同需求,達(dá)到可配置的目的。存儲器控制裝置20內(nèi)的迭代初始值寄存器組203用于ECC模塊200的解碼過程。 ECC模塊200在解碼時(shí)如果發(fā)現(xiàn)碼元有錯(cuò),將使用錢搜索(Chien Search)算法進(jìn)行查錯(cuò)。 錢搜索算法依賴于在不同位置下對錯(cuò)誤位置多項(xiàng)式的迭代計(jì)算,其中要用到一組迭代計(jì)算 寄存器,來存放每次迭代計(jì)算的結(jié)果。在BCH碼為縮短碼的情況下,如果在錢搜索計(jì)算開始 時(shí)根據(jù)實(shí)際碼長賦予迭代計(jì)算寄存器組初始值,則可以實(shí)現(xiàn)錢搜索計(jì)算時(shí)間最小化。由于 ECC模塊200所使用的BCH碼一般都是縮短碼,因此需要在存儲器控制裝置20內(nèi)設(shè)置一個(gè) 迭代初始值寄存器組203,用于存放迭代計(jì)算寄存器組的初始值。在系統(tǒng)上電或ECC碼數(shù)據(jù) 分組長度寄存器201中的數(shù)值被修改時(shí),通過迭代初始值計(jì)算電路202以硬件方式計(jì)算出 迭代計(jì)算初始值后放入迭代初始值寄存器組203中。ECC模塊200在每次進(jìn)行錢搜索計(jì)算 之前,只要從迭代初始值寄存器組203中讀取相應(yīng)的迭代計(jì)算初始值,并存放于迭代計(jì)算 寄存器中,即可快速啟動(dòng)錢搜索計(jì)算。和傳統(tǒng)技術(shù)相比,本實(shí)施例在于ECC編碼時(shí)的數(shù)據(jù)分組長度不是固定的。在傳統(tǒng) 技術(shù)中,由于ECC的數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)都是固定的,因此錢搜索算法的迭代 計(jì)算初始值也是固定的,傳統(tǒng)技術(shù)是先根據(jù)數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)計(jì)算出錢搜 索算法的迭代計(jì)算初始值,在ECC解碼時(shí)用這個(gè)已經(jīng)計(jì)算出的迭代計(jì)算初始值進(jìn)行ECC解 碼,實(shí)現(xiàn)解碼過程中的校驗(yàn)和糾錯(cuò)。然而,在本實(shí)施例中,數(shù)據(jù)分組長度不是固定的,是在裝 置使用的時(shí)候由用戶來配置的,因此錢搜索算法的迭代計(jì)算初始值也就不是固定的。本實(shí) 施例是用一個(gè)寄存器(ECC碼數(shù)據(jù)分組長度寄存器101)存放用戶自行配置的數(shù)據(jù)分組長度 值,由裝置內(nèi)的迭代初始值計(jì)算電路202以硬件方式根據(jù)數(shù)據(jù)分組長度值計(jì)算對應(yīng)的這組 迭代計(jì)算初始值(具體的計(jì)算方法是和傳統(tǒng)技術(shù)相同的,一是計(jì)算的時(shí)間點(diǎn)不同,傳統(tǒng)技 術(shù)是預(yù)先計(jì)算,本實(shí)施例是在用戶配置好數(shù)據(jù)分組長度后計(jì)算,二是計(jì)算方式不同,傳統(tǒng)技 術(shù)是軟件實(shí)現(xiàn),本實(shí)施例是以裝置內(nèi)的硬件電路計(jì)算實(shí)現(xiàn),并將計(jì)算出的值放入迭代初始 值寄存器組203中。而后續(xù)的根據(jù)迭代計(jì)算初始值以及錢搜索算法來實(shí)現(xiàn)解碼時(shí)糾錯(cuò)功 能,也和傳統(tǒng)技術(shù)相同,在此不再一一贅述。從本實(shí)施例可以看出,和第一實(shí)施例的不同之處在于,迭代計(jì)算初始值的計(jì)算方 式不同,第一實(shí)施例是交由CPU計(jì)算,得到的結(jié)果傳回裝置的迭代初始值寄存器組中;而本 實(shí)施例是直接由裝置內(nèi)的硬件電路實(shí)現(xiàn)迭代計(jì)算初始值的計(jì)算。ECC參數(shù)可配置的存儲器控制裝置的第三實(shí)施例圖4示出了本實(shí)施例的ECC參數(shù)可配置的存儲器控制裝置的第三實(shí)施例的原理。 請參見圖4,本實(shí)施例的存儲器控制裝置30包括ECC模塊300、ECC碼數(shù)據(jù)分組長度寄存器 301、迭代初始值查詢表電路302、存儲器接口 303。在本實(shí)施例中,存儲器控制裝置30以閃 存存儲設(shè)備的控制裝置為例,也就是說,與存儲器控制裝置30連接的是NAND閃存32 (NAND 型Flash)。而且,在本實(shí)施例中,ECC碼以BCH碼為例進(jìn)行說明。對于本實(shí)施例的存儲器控制裝置30來說,ECC碼的糾錯(cuò)比特/符號數(shù)(也就是 ECC碼糾錯(cuò)能力)這個(gè)參數(shù)是固定的,用戶可以調(diào)整的是ECC碼的數(shù)據(jù)分組長度這一參數(shù)。 裝置中的ECC碼數(shù)據(jù)分組長度寄存器301是用來存放ECC模塊編碼時(shí)的數(shù)據(jù)分組長度。在 實(shí)際應(yīng)用中,人們可以根據(jù)NAND閃存32的要求,通過CPU 31對這個(gè)寄存器301進(jìn)行設(shè)置。 ECC模塊300在工作時(shí),將根據(jù)這個(gè)寄存器中的數(shù)據(jù)進(jìn)行相應(yīng)的編碼和解碼操作,從而滿足
11NAND閃存22對糾錯(cuò)編碼的不同需求,達(dá)到可配置的目的。存儲器控制裝置30內(nèi)的迭代初始值查詢表電路302用于ECC模塊300的解碼過 程。ECC模塊300在解碼時(shí)如果發(fā)現(xiàn)碼元有錯(cuò),將使用錢搜索(Chien Search)算法進(jìn)行查 錯(cuò)。錢搜索算法依賴于在不同位置下對錯(cuò)誤位置多項(xiàng)式的迭代計(jì)算,其中要用到一組迭代 計(jì)算寄存器,來存放每次迭代計(jì)算的結(jié)果。在BCH碼為縮短碼的情況下,如果在錢搜索計(jì)算 開始時(shí)根據(jù)實(shí)際碼長賦予迭代計(jì)算寄存器組初始值,則可以實(shí)現(xiàn)錢搜索計(jì)算時(shí)間最小化。 由于ECC模塊300所使用的BCH碼一般都是縮短碼,因此需要在存儲器控制裝置30內(nèi)設(shè)置 一個(gè)迭代初始值查詢表電路,用于存放各種可能情況下的迭代計(jì)算初始值。例如,對于同一 糾錯(cuò)比特/符號數(shù)而言,不同的數(shù)據(jù)分組長度所對應(yīng)的迭代計(jì)算初始值各不相同,裝置30 先將各種情況下對應(yīng)的迭代計(jì)算初始值存入迭代初始值查詢表電路302中,迭代初始值查 詢表電路302例如是一種邏輯電路,根據(jù)查詢表的方式來配置邏輯電路的實(shí)現(xiàn)方式。在系 統(tǒng)上電或ECC碼數(shù)據(jù)分組長度寄存器中的數(shù)值被修改時(shí),ECC模塊300根據(jù)ECC碼數(shù)據(jù)分 組長度寄存器301中存儲的數(shù)據(jù)分組長度搜索這張查詢表,以獲得相應(yīng)的一組迭代計(jì)算初 始值,并存放于迭代計(jì)算寄存器中,即可快速啟動(dòng)錢搜索計(jì)算。和傳統(tǒng)技術(shù)相比,本實(shí)施例在于ECC編碼時(shí)的數(shù)據(jù)分組長度不是固定的。在傳統(tǒng) 技術(shù)中,由于ECC的數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)都是固定的,因此錢搜索算法的迭代 計(jì)算初始值也是固定的,傳統(tǒng)技術(shù)是先根據(jù)數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)計(jì)算出錢搜 索算法的迭代計(jì)算初始值,在ECC解碼時(shí)用這個(gè)已經(jīng)計(jì)算出的迭代計(jì)算初始值進(jìn)行ECC解 碼,實(shí)現(xiàn)解碼過程中的校驗(yàn)和糾錯(cuò)。然而,在本實(shí)施例中,數(shù)據(jù)分組長度不是固定的,是在裝 置使用的時(shí)候由用戶來配置的,因此錢搜索算法的迭代計(jì)算初始值也就不是固定的。本實(shí) 施例是用一個(gè)寄存器(ECC碼數(shù)據(jù)分組長度寄存器101)存放用戶自行配置的數(shù)據(jù)分組長度 值,將各種可能情況下對應(yīng)的迭代計(jì)算初始值存放在一個(gè)邏輯電路中(迭代計(jì)算初始值的 計(jì)算方法是和傳統(tǒng)技術(shù)相同的,但是傳統(tǒng)技術(shù)中由于糾錯(cuò)比特/符號數(shù)和數(shù)據(jù)分組長度都 是固定的因此迭代計(jì)算初始值也是預(yù)先就計(jì)算好的,而本實(shí)施例中由于數(shù)據(jù)分組長度是不 確定的,因此先計(jì)算各種可能情況下的迭代計(jì)算初始值,并根據(jù)用戶配置的數(shù)據(jù)分組長度 查詢出其中對應(yīng)的這組迭代計(jì)算初始值),并將查詢到的值放入迭代初始值寄存器組203 中。而后續(xù)的根據(jù)迭代計(jì)算初始值以及錢搜索算法來實(shí)現(xiàn)解碼時(shí)糾錯(cuò)功能,也和傳統(tǒng)技術(shù) 相同,在此不再一一贅述。從本實(shí)施例可以看出,和第一、第二實(shí)施例的不同之處在于,前兩個(gè)實(shí)施例都是根 據(jù)固定的糾錯(cuò)比特/符號數(shù)和用戶配置的數(shù)據(jù)分組長度計(jì)算出對應(yīng)的迭代計(jì)算初始值,而 本實(shí)施例是先將各種可能的迭代計(jì)算初始值存放成一張查詢表(可以以邏輯電路方式實(shí) 現(xiàn)),然后根據(jù)用戶配置的數(shù)據(jù)分組長度在查詢表中查找對應(yīng)的迭代計(jì)算初始值。ECC參數(shù)可配置的存儲器控制裝置的第四實(shí)施例圖5示出了本實(shí)施例的ECC參數(shù)可配置的存儲器控制裝置的第四實(shí)施例的原理。 請參見圖5,本實(shí)施例的存儲器控制裝置40包括ECC模塊400、ECC碼糾錯(cuò)能力寄存器401、 生成多項(xiàng)式寄存器402、迭代初始值寄存器組403以及存儲器接口 404。在本實(shí)施例中,存 儲器控制裝置40以閃存存儲設(shè)備的控制裝置為例,也就是說,與存儲器控制裝置40連接的 是NAND閃存42 (NAND型Flash)。而且,在本實(shí)施例中,ECC碼以BCH碼為例進(jìn)行說明。對于本實(shí)施例的存儲器控制裝置40來說,ECC碼的數(shù)據(jù)分組長度這個(gè)參數(shù)是固定的,用戶可以調(diào)整的是ECC碼的糾錯(cuò)比特/符號數(shù)(代表糾錯(cuò)能力)這一參數(shù)。裝置中的 ECC碼糾錯(cuò)能力寄存器401是用來存放ECC模塊編碼時(shí)的糾錯(cuò)比特/符號數(shù)。在實(shí)際應(yīng)用 中,人們可以根據(jù)NAND閃存42的要求,通過CPU41對這個(gè)寄存器401進(jìn)行設(shè)置。ECC模塊 400在工作時(shí),將根據(jù)這個(gè)寄存器中的數(shù)據(jù)進(jìn)行相應(yīng)的編碼和解碼操作,從而滿足NAND閃 存42對糾錯(cuò)編碼的不同需求,達(dá)到可配置的目的。ECC模塊400在進(jìn)行編碼操作時(shí),需要使用生成多項(xiàng)式,而生成多項(xiàng)式與ECC碼的 糾錯(cuò)能力有關(guān)。因此,對于可配置的ECC模塊400而言,生成多項(xiàng)式需要根據(jù)ECC碼糾錯(cuò)能 力寄存器401存儲的糾錯(cuò)比特/符號數(shù)計(jì)算出來。由于計(jì)算生成多項(xiàng)式的運(yùn)算量很大,而 ECC模塊進(jìn)行編碼操作時(shí)有實(shí)時(shí)性要求,在每次編碼操作之前分別進(jìn)行生成多項(xiàng)式的計(jì)算 是不可行的。為此需要在存儲器控制裝置40內(nèi)設(shè)置一個(gè)生成多項(xiàng)式寄存器402用于存放 生成多項(xiàng)式。ECC模塊400在每次編碼操作時(shí),只要從生成多項(xiàng)式寄存器402中讀取所需的 生成多項(xiàng)式即可。在系統(tǒng)上電或ECC碼糾錯(cuò)能力寄存器401內(nèi)的數(shù)值被修改時(shí),通過CPU 41直接向生成多項(xiàng)式寄存器402內(nèi)寫入正確的生成多項(xiàng)式。ECC模塊400在編碼時(shí)根據(jù)生 成多項(xiàng)式寄存器402中的生成多項(xiàng)式進(jìn)行ECC編碼。而裝置內(nèi)的迭代初始值寄存器組403用于ECC模塊400的解碼過程。ECC模塊400 在解碼時(shí)如果發(fā)現(xiàn)碼元有錯(cuò),將使用錢搜索(Chien Search)算法進(jìn)行查錯(cuò)。錢搜索算法依 賴于在不同位置下對錯(cuò)誤位置多項(xiàng)式的迭代計(jì)算,其中要用到一組迭代計(jì)算寄存器,來存 放每次迭代計(jì)算的結(jié)果。在BCH碼為縮短碼的情況下,如果在錢搜索計(jì)算開始時(shí)根據(jù)實(shí)際 碼長賦予迭代計(jì)算寄存器組初始值,則可以實(shí)現(xiàn)錢搜索計(jì)算時(shí)間最小化。由于ECC模塊400 所使用的BCH碼一般都是縮短碼,因此需要在存儲器控制裝置40內(nèi)設(shè)置一個(gè)迭代初始值寄 存器組403,用于存放計(jì)算出的迭代計(jì)算初始值。例如,在系統(tǒng)上電或ECC碼糾錯(cuò)能力寄存 器401中的數(shù)值被修改時(shí),通過CPU 41直接向迭代初始值寄存器組403寫入正確的迭代計(jì) 算初始值。ECC模塊400在每次進(jìn)行錢搜索計(jì)算之前,只要從迭代初始值寄存器組403中讀 取相應(yīng)的迭代計(jì)算初始值,并存放于迭代計(jì)算寄存器中,即可快速啟動(dòng)錢搜索計(jì)算。和傳統(tǒng)技術(shù)相比,本實(shí)施例在于ECC編碼時(shí)的糾錯(cuò)比特/符號數(shù)(代表糾錯(cuò)能 力)不是固定的。在傳統(tǒng)技術(shù)中,由于ECC的數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)都是固定 的,因此編碼時(shí)的生成多項(xiàng)式和錢搜索算法的迭代計(jì)算初始值也是固定的,傳統(tǒng)技術(shù)是在 編碼時(shí)先根據(jù)糾錯(cuò)比特/符號數(shù)計(jì)算出生成多項(xiàng)式,根據(jù)這個(gè)生成多項(xiàng)式進(jìn)行ECC編碼; 在解碼時(shí)先根據(jù)數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)計(jì)算出錢搜索算法的迭代計(jì)算初始值, 在ECC解碼時(shí)用這個(gè)已經(jīng)計(jì)算出的迭代計(jì)算初始值進(jìn)行ECC解碼,實(shí)現(xiàn)解碼過程中的校驗(yàn) 和糾錯(cuò)。然而,在本實(shí)施例中,糾錯(cuò)比特/符號數(shù)不是固定的,是在裝置使用的時(shí)候由用戶 來配置的,因此編碼時(shí)的生成多項(xiàng)式和解碼時(shí)錢搜索算法的迭代計(jì)算初始值也就不是固定 的。本實(shí)施例是用一個(gè)寄存器(ECC碼糾錯(cuò)能力寄存器401)存放用戶自行配置的糾錯(cuò)比 特/符號數(shù)值,在ECC編碼時(shí)外部的CPU 41根據(jù)糾錯(cuò)比特/符號數(shù)計(jì)算對應(yīng)的生成多項(xiàng)式 (具體的計(jì)算方法是和傳統(tǒng)技術(shù)相同的,只不過計(jì)算的時(shí)間點(diǎn)不同,傳統(tǒng)技術(shù)是預(yù)先計(jì)算, 本實(shí)施例是在用戶配置好糾錯(cuò)比特/符號數(shù)后計(jì)算),并將計(jì)算出的值放入生成多項(xiàng)式寄 存器402中。而后續(xù)的根據(jù)生成多項(xiàng)式進(jìn)行ECC編碼,也和傳統(tǒng)技術(shù)相同,在此不再一一贅 述。在ECC解碼時(shí)外部的CPU 41根據(jù)用戶配置的糾錯(cuò)比特/符號數(shù)和預(yù)先設(shè)定好的數(shù)據(jù) 分組長度得到迭代計(jì)算初始值(具體的計(jì)算方法是和傳統(tǒng)技術(shù)相同的,只不過計(jì)算的時(shí)間點(diǎn)不同,傳統(tǒng)技術(shù)是預(yù)先計(jì)算,本實(shí)施例是在用戶配置好糾錯(cuò)比特/符號數(shù)后計(jì)算),并將 計(jì)算出來的值放入迭代初始值寄存器組403中。而后續(xù)的根據(jù)迭代計(jì)算初始值通過錢搜索 算法的ECC解碼的校驗(yàn)和糾錯(cuò),也和傳統(tǒng)技術(shù)相同,在此不再一一贅述。ECC #艦配,胃讓諸碰鑑翻Il五棚列圖6示出了本實(shí)施例的ECC參數(shù)可配置的存儲器控制裝置的第五實(shí)施例的原理。 請參見圖5,本實(shí)施例的存儲器控制裝置50包括ECC模塊500、ECC碼糾錯(cuò)能力寄存器501、 生成多項(xiàng)式計(jì)算電路502、生成多項(xiàng)式寄存器503、迭代初始值計(jì)算電路504、迭代初始值寄 存器組505以及存儲器接口 506。在本實(shí)施例中,存儲器控制裝置50以閃存存儲設(shè)備的控 制裝置為例,也就是說,與存儲器控制裝置50連接的是NAND閃存52 (NAND型Flash)。而 且,在本實(shí)施例中,ECC碼以BCH碼為例進(jìn)行說明。對于本實(shí)施例的存儲器控制裝置50來說,ECC碼的數(shù)據(jù)分組長度這個(gè)參數(shù)是固定 的,用戶可以調(diào)整的是ECC碼的糾錯(cuò)比特/符號數(shù)(代表糾錯(cuò)能力)這一參數(shù)。裝置中的 ECC碼糾錯(cuò)能力寄存器501是用來存放ECC模塊編碼時(shí)的糾錯(cuò)比特/符號數(shù)。在實(shí)際應(yīng)用 中,人們可以根據(jù)NAND閃存52的要求,通過CPTOl對這個(gè)寄存器501進(jìn)行設(shè)置。ECC模塊 500在工作時(shí),將根據(jù)這個(gè)寄存器中的數(shù)據(jù)進(jìn)行相應(yīng)的編碼和解碼操作,從而滿足NAND閃 存52對糾錯(cuò)編碼的不同需求,達(dá)到可配置的目的。ECC模塊500在進(jìn)行編碼操作時(shí),需要使用生成多項(xiàng)式,而生成多項(xiàng)式與ECC碼的 糾錯(cuò)能力有關(guān)。因此,對于可配置的ECC模塊500而言,生成多項(xiàng)式需要根據(jù)ECC碼糾錯(cuò)能 力寄存器501存儲的糾錯(cuò)比特/符號數(shù)計(jì)算出來。由于計(jì)算生成多項(xiàng)式的運(yùn)算量很大,而 ECC模塊500進(jìn)行編碼操作時(shí)有實(shí)時(shí)性要求,在每次編碼操作之前分別進(jìn)行生成多項(xiàng)式的 計(jì)算是不可行的。為此需要在存儲器控制裝置50內(nèi)設(shè)置一個(gè)生成多項(xiàng)式寄存器503用于 存放生成多項(xiàng)式。ECC模塊500在每次編碼操作時(shí),只要從生成多項(xiàng)式寄存器503中讀取 所需的生成多項(xiàng)式即可。在系統(tǒng)上電或ECC碼糾錯(cuò)能力寄存器501內(nèi)的數(shù)值被修改時(shí),由 生成多項(xiàng)式計(jì)算電路502根據(jù)糾錯(cuò)比特/符號數(shù)以硬件電路的方式計(jì)算出相應(yīng)的生成多項(xiàng) 式,并寫入到生成多項(xiàng)式寄存器503中。ECC模塊500在編碼時(shí)根據(jù)生成多項(xiàng)式寄存器503 中的生成多項(xiàng)式進(jìn)行ECC編碼。而裝置內(nèi)的迭代初始值寄存器組505用于ECC模塊500的解碼過程。ECC模塊 500在解碼時(shí)如果發(fā)現(xiàn)碼元有錯(cuò),將使用錢搜索(Chien Search)算法進(jìn)行查錯(cuò)。錢搜索算 法依賴于在不同位置下對錯(cuò)誤位置多項(xiàng)式的迭代計(jì)算,其中要用到一組迭代計(jì)算寄存器, 來存放每次迭代計(jì)算的結(jié)果。在BCH碼為縮短碼的情況下,如果在錢搜索計(jì)算開始時(shí)根據(jù) 實(shí)際碼長賦予迭代計(jì)算寄存器組初始值,則可以實(shí)現(xiàn)錢搜索計(jì)算時(shí)間最小化。由于ECC模 塊500所使用的BCH碼一般都是縮短碼,因此需要在存儲器控制裝置50內(nèi)設(shè)置一個(gè)迭代初 始值寄存器組505,用于存放計(jì)算出的迭代計(jì)算初始值。例如,在系統(tǒng)上電或ECC碼糾錯(cuò)能 力寄存器501中的數(shù)值被修改時(shí),由迭代初始值計(jì)算電路504根據(jù)預(yù)設(shè)的數(shù)據(jù)分組長度和 ECC碼糾錯(cuò)能力寄存器501中存儲的糾錯(cuò)比特/符號數(shù)以硬件電路的方式計(jì)算得到一組迭 代初始值并寫入到迭代初始值寄存器組505中。ECC模塊500在每次進(jìn)行錢搜索計(jì)算之前, 只要從迭代初始值寄存器組505中讀取相應(yīng)的迭代計(jì)算初始值,并存放于迭代計(jì)算寄存器 中,即可快速啟動(dòng)錢搜索計(jì)算。和傳統(tǒng)技術(shù)相比,本實(shí)施例在于ECC編碼時(shí)的糾錯(cuò)比特/符號數(shù)(代表糾錯(cuò)能力)不是固定的。在傳統(tǒng)技術(shù)中,由于ECC的數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)都是固定的,因 此編碼時(shí)的生成多項(xiàng)式和錢搜索算法的迭代計(jì)算初始值也是固定的,傳統(tǒng)技術(shù)是在編碼時(shí) 先根據(jù)糾錯(cuò)比特/符號數(shù)計(jì)算出生成多項(xiàng)式,根據(jù)這個(gè)生成多項(xiàng)式進(jìn)行ECC編碼;在解碼 時(shí)先根據(jù)數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)計(jì)算出錢搜索算法的迭代計(jì)算初始值,在ECC 解碼時(shí)用這個(gè)已經(jīng)計(jì)算出的迭代計(jì)算初始值進(jìn)行ECC解碼,實(shí)現(xiàn)解碼過程中的校驗(yàn)和糾 錯(cuò)。然而,在本實(shí)施例中,糾錯(cuò)比特/符號數(shù)不是固定的,是在裝置使用的時(shí)候由用戶來配 置的,因此編碼時(shí)的生成多項(xiàng)式和解碼時(shí)錢搜索算法的迭代計(jì)算初始值也就不是固定的。 本實(shí)施例是用一個(gè)寄存器(ECC碼糾錯(cuò)能力寄存器501)存放用戶自行配置的糾錯(cuò)比特/符 號數(shù)值,通過存儲器控制裝置內(nèi)的生成多項(xiàng)式計(jì)算電路502根據(jù)糾錯(cuò)比特/符號數(shù)計(jì)算對 應(yīng)的生成多項(xiàng)式(具體的計(jì)算方法是和傳統(tǒng)技術(shù)相同的,只不過計(jì)算的時(shí)間點(diǎn)和實(shí)現(xiàn)方式 不同,傳統(tǒng)技術(shù)是預(yù)先計(jì)算,本實(shí)施例是在用戶配置好糾錯(cuò)比特/符號數(shù)后計(jì)算,傳統(tǒng)技術(shù) 是軟件計(jì)算為主,本實(shí)施例是通過設(shè)置在裝置內(nèi)的硬件電路來計(jì)算),并將計(jì)算出的值放入 生成多項(xiàng)式寄存器503中。而后續(xù)的根據(jù)生成多項(xiàng)式進(jìn)行ECC編碼,也和傳統(tǒng)技術(shù)相同,在 此不再一一贅述。在ECC解碼時(shí)存儲器控制裝置內(nèi)的迭代初始值計(jì)算電路504根據(jù)用戶配 置的糾錯(cuò)比特/符號數(shù)和預(yù)先設(shè)定好的數(shù)據(jù)分組長度得到迭代計(jì)算初始值(具體的計(jì)算方 法是和傳統(tǒng)技術(shù)相同的,只不過計(jì)算的時(shí)間點(diǎn)和實(shí)現(xiàn)方式不同,傳統(tǒng)技術(shù)是預(yù)先計(jì)算,本實(shí) 施例是在用戶配置好糾錯(cuò)比特/符號數(shù)后計(jì)算,傳統(tǒng)技術(shù)是軟件實(shí)現(xiàn)為主,本實(shí)施例是通 過設(shè)置在裝置內(nèi)的硬件電路來實(shí)現(xiàn)),并將計(jì)算出來的值放入迭代初始值寄存器組505中。 而后續(xù)的根據(jù)迭代計(jì)算初始值通過錢搜索算法的ECC解碼的校驗(yàn)和糾錯(cuò),也和傳統(tǒng)技術(shù)相 同,在此不再一一贅述。ECC參數(shù)可配置的存儲器控制裝置的第六實(shí)施例圖7示出了本實(shí)施例的ECC參數(shù)可配置的存儲器控制裝置的第六實(shí)施例的原理。 請參見圖7,本實(shí)施例的存儲器控制裝置60包括ECC模塊600、ECC碼糾錯(cuò)能力寄存器601、 生成多項(xiàng)式查詢表電路602、迭代初始值查詢表電路603以及存儲器接口 604。在本實(shí)施例 中,存儲器控制裝置60以閃存存儲設(shè)備的控制裝置為例,也就是說,與存儲器控制裝置60 連接的是NAND閃存62 (NAND型Flash)。而且,在本實(shí)施例中,ECC碼以BCH碼為例進(jìn)行說 明。對于本實(shí)施例的存儲器控制裝置60來說,ECC碼的數(shù)據(jù)分組長度這個(gè)參數(shù)是固定 的,用戶可以調(diào)整的是ECC碼的糾錯(cuò)比特/符號數(shù)(代表糾錯(cuò)能力)這一參數(shù)。裝置中的 ECC碼糾錯(cuò)能力寄存器601是用來存放ECC模塊編碼時(shí)的糾錯(cuò)比特/符號數(shù)。在實(shí)際應(yīng)用 中,人們可以根據(jù)NAND閃存62的要求,通過CPTOl對這個(gè)寄存器601進(jìn)行設(shè)置。ECC模塊 600在工作時(shí),將根據(jù)這個(gè)寄存器中的數(shù)據(jù)進(jìn)行相應(yīng)的編碼和解碼操作,從而滿足NAND閃 存62對糾錯(cuò)編碼的不同需求,達(dá)到可配置的目的。ECC模塊600在進(jìn)行編碼操作時(shí),需要使用生成多項(xiàng)式,而生成多項(xiàng)式與ECC碼的 糾錯(cuò)能力有關(guān)。因此,對于可配置的ECC模塊600而言,生成多項(xiàng)式需要根據(jù)ECC碼糾錯(cuò)能 力寄存器601存儲的糾錯(cuò)比特/符號數(shù)計(jì)算出來。由于計(jì)算生成多項(xiàng)式的運(yùn)算量很大,而 ECC模塊進(jìn)行編碼操作時(shí)有實(shí)時(shí)性要求,在每次編碼操作之前分別進(jìn)行生成多項(xiàng)式的計(jì)算 是不可行的。為此需要在存儲器控制裝置60內(nèi)設(shè)置一個(gè)生成多項(xiàng)式查詢表電路602。這個(gè) 生成多項(xiàng)式查詢表電路602存有各種情況下(各個(gè)糾錯(cuò)比特/符號數(shù))對應(yīng)的各個(gè)生成多項(xiàng)式,其功能實(shí)質(zhì)是查詢表,硬件實(shí)現(xiàn)是邏輯電路。ECC模塊600在每次編碼操作時(shí),根據(jù)寄 存器601中的糾錯(cuò)比特/符號數(shù)在生成多項(xiàng)式查詢表電路602中找到對應(yīng)的生成多項(xiàng)式。 ECC模塊600在編碼時(shí)根據(jù)生成多項(xiàng)式查詢表電路402中的查詢到的生成多項(xiàng)式進(jìn)行ECC編碼。而裝置內(nèi)的迭代初始值查詢表電路603用于ECC模塊600的解碼過程。ECC模塊 600在解碼時(shí)如果發(fā)現(xiàn)碼元有錯(cuò),將使用錢搜索(Chien Search)算法進(jìn)行查錯(cuò)。錢搜索算 法依賴于在不同位置下對錯(cuò)誤位置多項(xiàng)式的迭代計(jì)算,其中要用到一組迭代計(jì)算寄存器, 來存放每次迭代計(jì)算的結(jié)果。在BCH碼為縮短碼的情況下,如果在錢搜索計(jì)算開始時(shí)根據(jù) 實(shí)際碼長賦予迭代計(jì)算寄存器組初始值,則可以實(shí)現(xiàn)錢搜索計(jì)算時(shí)間最小化。由于ECC模 塊600所使用的BCH碼一般都是縮短碼,因此需要在存儲器控制裝置60內(nèi)設(shè)置一個(gè)迭代初 始值查詢表電路603,用于存放各種可能情況(預(yù)設(shè)的數(shù)據(jù)分組長度和不同的糾錯(cuò)比特/符 號數(shù)的組合)下的迭代計(jì)算初始值。迭代初始值查詢表電路603和生成多項(xiàng)式查詢表電路 602 一樣,功能實(shí)質(zhì)是一張查詢表,硬件實(shí)質(zhì)是一個(gè)邏輯電路。ECC模塊400在每次進(jìn)行錢搜 索計(jì)算之前,只要根據(jù)寄存器601中的糾錯(cuò)比特/符號數(shù)從迭代初始值查詢表電路603中 讀取相應(yīng)的一組迭代計(jì)算初始值,并存放于迭代計(jì)算寄存器中,即可快速啟動(dòng)錢搜索計(jì)算。和傳統(tǒng)技術(shù)相比,本實(shí)施例在于ECC編碼時(shí)的糾錯(cuò)比特/符號數(shù)(代表糾錯(cuò)能 力)不是固定的。在傳統(tǒng)技術(shù)中,由于ECC的數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)都是固定 的,因此編碼時(shí)的生成多項(xiàng)式和錢搜索算法的迭代計(jì)算初始值也是固定的,傳統(tǒng)技術(shù)是在 編碼時(shí)先根據(jù)糾錯(cuò)比特/符號數(shù)計(jì)算出生成多項(xiàng)式,根據(jù)這個(gè)生成多項(xiàng)式進(jìn)行ECC編碼; 在解碼時(shí)先根據(jù)數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)計(jì)算出錢搜索算法的迭代計(jì)算初始值, 在ECC解碼時(shí)用這個(gè)已經(jīng)計(jì)算出的迭代計(jì)算初始值進(jìn)行ECC解碼,實(shí)現(xiàn)解碼過程中的校驗(yàn) 和糾錯(cuò)。然而,在本實(shí)施例中,糾錯(cuò)比特/符號數(shù)不是固定的,是在裝置使用的時(shí)候由用戶 來配置的,因此編碼時(shí)的生成多項(xiàng)式和解碼時(shí)錢搜索算法的迭代計(jì)算初始值也就不是固定 的。本實(shí)施例是用一個(gè)寄存器(ECC碼糾錯(cuò)能力寄存器401)存放用戶自行配置的糾錯(cuò)比特 /符號數(shù)值,用第一邏輯電路存儲各種情況下的生成多項(xiàng)式,用第二邏輯電路存儲各種情況 下的迭代初始值。在ECC編碼時(shí)根據(jù)糾錯(cuò)比特/符號數(shù)從邏輯電路中查找出對應(yīng)的生成多 項(xiàng)式(具體的計(jì)算方法是和傳統(tǒng)技術(shù)相同的,只不過實(shí)現(xiàn)方式不同,傳統(tǒng)技術(shù)是預(yù)先計(jì)算, 本實(shí)施例是在用戶配置好糾錯(cuò)比特/符號數(shù)后根據(jù)這一數(shù)值從第一邏輯電路中查詢出對 應(yīng)的生成多項(xiàng)式)。而后續(xù)的根據(jù)生成多項(xiàng)式進(jìn)行ECC編碼,也和傳統(tǒng)技術(shù)相同,在此不再 一一贅述。在ECC解碼時(shí)裝置根據(jù)用戶配置的糾錯(cuò)比特/符號數(shù)和預(yù)先設(shè)定好的數(shù)據(jù)分組 長度在第二邏輯電路中查找對應(yīng)的迭代初始值。(具體的計(jì)算方法和傳統(tǒng)技術(shù)相同,只不過 實(shí)現(xiàn)方式不同,傳統(tǒng)技術(shù)是預(yù)先計(jì)算,本實(shí)施例是在用戶配置好糾錯(cuò)比特/符號數(shù)在第二 邏輯電路中查找到對應(yīng)的一組迭代初始值)。而后續(xù)的根據(jù)迭代計(jì)算初始值通過錢搜索算 法的ECC解碼的校驗(yàn)和糾錯(cuò),也和傳統(tǒng)技術(shù)相同,在此不再一一贅述。ECC參數(shù)可配置的存儲器控制裝置的第七實(shí)施例圖8示出了本實(shí)施例的ECC參數(shù)可配置的存儲器控制裝置的第七實(shí)施例的原理。 請參見圖8,本實(shí)施例的存儲器控制裝置70包括ECC模塊700、ECC碼數(shù)據(jù)分組長度寄存 器701、ECC碼糾錯(cuò)能力寄存器702、生成多項(xiàng)式寄存器703、迭代初始值寄存器組704以及 存儲器接口 705。在本實(shí)施例中,存儲器控制裝置70以閃存存儲設(shè)備的控制裝置為例,也就是說,與存儲器控制裝置70連接的是NAND閃存72 (NAND型Flash)。而且,在本實(shí)施例中, ECC碼以BCH碼為例進(jìn)行說明。對于本實(shí)施例的存儲器控制裝置70來說,用戶可以調(diào)整ECC碼的數(shù)據(jù)分組長度和 ECC碼的糾錯(cuò)比特/符號數(shù)(代表糾錯(cuò)能力)這兩個(gè)參數(shù)。裝置中的ECC碼數(shù)據(jù)分組長度 寄存器701用來存放ECC模塊編碼時(shí)的數(shù)據(jù)分組長度,ECC碼糾錯(cuò)能力寄存器702用來存放 ECC模塊編碼時(shí)的糾錯(cuò)比特/符號數(shù)。在實(shí)際應(yīng)用中,人們可以根據(jù)NAND閃存72的要求, 通過CPU 71對這兩個(gè)寄存器701和702進(jìn)行設(shè)置。ECC模塊700在工作時(shí),將根據(jù)這兩個(gè) 寄存器701和702中的數(shù)據(jù)進(jìn)行相應(yīng)的編碼和解碼操作,從而滿足NAND閃存72對糾錯(cuò)編 碼的不同需求,達(dá)到可配置的目的。ECC模塊700在進(jìn)行編碼操作時(shí),需要使用生成多項(xiàng)式,而生成多項(xiàng)式與ECC碼的 糾錯(cuò)能力有關(guān)。因此,對于可配置的ECC模塊700而言,生成多項(xiàng)式需要根據(jù)ECC碼糾錯(cuò)能 力寄存器702存儲的糾錯(cuò)比特/符號數(shù)計(jì)算出來。由于計(jì)算生成多項(xiàng)式的運(yùn)算量很大,而 ECC模塊進(jìn)行編碼操作時(shí)有實(shí)時(shí)性要求,在每次編碼操作之前分別進(jìn)行生成多項(xiàng)式的計(jì)算 是不可行的。為此需要在存儲器控制裝置70內(nèi)設(shè)置一個(gè)生成多項(xiàng)式寄存器703用于存放 生成多項(xiàng)式。ECC模塊700在每次編碼操作時(shí),只要從生成多項(xiàng)式寄存器703中讀取所需的 生成多項(xiàng)式即可。在系統(tǒng)上電或ECC碼糾錯(cuò)能力寄存器702內(nèi)的數(shù)值被修改時(shí),通過CPU 71直接向生成多項(xiàng)式寄存器703內(nèi)寫入正確的生成多項(xiàng)式。ECC模塊700在編碼時(shí)根據(jù)生 成多項(xiàng)式寄存器703中的生成多項(xiàng)式進(jìn)行ECC編碼。而裝置內(nèi)的迭代初始值寄存器組704用于ECC模塊700的解碼過程。ECC模塊700 在解碼時(shí)如果發(fā)現(xiàn)碼元有錯(cuò),將使用錢搜索(Chien Search)算法進(jìn)行查錯(cuò)。錢搜索算法依 賴于在不同位置下對錯(cuò)誤位置多項(xiàng)式的迭代計(jì)算,其中要用到一組迭代計(jì)算寄存器,來存 放每次迭代計(jì)算的結(jié)果。在BCH碼為縮短碼的情況下,如果在錢搜索計(jì)算開始時(shí)根據(jù)實(shí)際 碼長賦予迭代計(jì)算寄存器組初始值,則可以實(shí)現(xiàn)錢搜索計(jì)算時(shí)間最小化。由于ECC模塊700 所使用的BCH碼一般都是縮短碼,因此需要在存儲器控制裝置70內(nèi)設(shè)置一個(gè)迭代初始值寄 存器組704,用于存放計(jì)算出的迭代計(jì)算初始值。例如,在系統(tǒng)上電或ECC碼糾錯(cuò)能力寄存 器702或ECC碼數(shù)據(jù)分組長度寄存器701中的數(shù)值被修改時(shí),通過CPU 71直接向迭代初始 值寄存器組704寫入正確的迭代計(jì)算初始值。ECC模塊700在每次進(jìn)行錢搜索計(jì)算之前, 只要從迭代初始值寄存器組704中讀取相應(yīng)的迭代計(jì)算初始值,并存放于迭代計(jì)算寄存器 中,即可快速啟動(dòng)錢搜索計(jì)算。和傳統(tǒng)技術(shù)相比,本實(shí)施例在于ECC編碼時(shí)的數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù) (代表糾錯(cuò)能力)不是固定的。在傳統(tǒng)技術(shù)中,由于ECC的數(shù)據(jù)分組長度和糾錯(cuò)比特/符 號數(shù)都是固定的,因此編碼時(shí)的生成多項(xiàng)式和錢搜索算法的迭代計(jì)算初始值也是固定的, 傳統(tǒng)技術(shù)是在編碼時(shí)先根據(jù)糾錯(cuò)比特/符號數(shù)計(jì)算出生成多項(xiàng)式,根據(jù)這個(gè)生成多項(xiàng)式進(jìn) 行ECC編碼;在解碼時(shí)先根據(jù)數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)計(jì)算出錢搜索算法的迭代 計(jì)算初始值,在ECC解碼時(shí)用這個(gè)已經(jīng)計(jì)算出的迭代計(jì)算初始值進(jìn)行ECC解碼,實(shí)現(xiàn)解碼 過程中的校驗(yàn)和糾錯(cuò)。然而,在本實(shí)施例中,數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)都不是固定 的,是在裝置使用的時(shí)候由用戶來配置的,因此編碼時(shí)的生成多項(xiàng)式和解碼時(shí)錢搜索算法 的迭代計(jì)算初始值也就不是固定的。本實(shí)施例是用一個(gè)寄存器(ECC碼數(shù)據(jù)分組長度寄存 器701)存放用戶自行配置的數(shù)據(jù)分組長度和一個(gè)寄存器(ECC碼糾錯(cuò)能力寄存器702)存放用戶自行配置的糾錯(cuò)比特/符號數(shù)值,在ECC編碼時(shí)外部的CPU 71根據(jù)糾錯(cuò)比特/符號 數(shù)計(jì)算對應(yīng)的生成多項(xiàng)式(具體的計(jì)算方法是和傳統(tǒng)技術(shù)相同的,只不過計(jì)算的時(shí)間點(diǎn)不 同,傳統(tǒng)技術(shù)是預(yù)先計(jì)算,本實(shí)施例是在用戶配置好糾錯(cuò)比特/符號數(shù)后計(jì)算),并將計(jì)算 出的值放入生成多項(xiàng)式寄存器703中。而后續(xù)的根據(jù)生成多項(xiàng)式進(jìn)行ECC編碼,也和傳統(tǒng) 技術(shù)相同,在此不再一一贅述。在ECC解碼時(shí)外部的CPU 71根據(jù)用戶配置的糾錯(cuò)比特/符 號數(shù)和數(shù)據(jù)分組長度得到迭代計(jì)算初始值(具體的計(jì)算方法是和傳統(tǒng)技術(shù)相同的,只不過 計(jì)算的時(shí)間點(diǎn)不同,傳統(tǒng)技術(shù)是預(yù)先計(jì)算,本實(shí)施例是在用戶配置好糾錯(cuò)比特/符號數(shù)后 計(jì)算),并將計(jì)算出來的值放入迭代初始值寄存器組704中。而后續(xù)的根據(jù)迭代計(jì)算初始值 通過錢搜索算法的ECC解碼的校驗(yàn)和糾錯(cuò),也和傳統(tǒng)技術(shù)相同,在此不再一一贅述。ECC #艦配,胃讓諸碰鑑翻11聽_丨圖9示出了本實(shí)施例的ECC參數(shù)可配置的存儲器控制裝置的第八實(shí)施例的原理。 請參見圖9,本實(shí)施例的存儲器控制裝置80包括ECC模塊800、ECC碼數(shù)據(jù)分組長度寄存 器801、ECC碼糾錯(cuò)能力寄存器802、生成多項(xiàng)式計(jì)算電路803、生成多項(xiàng)式寄存器804、迭代 初始值計(jì)算電路805、迭代初始值寄存器組806以及存儲器接口 807。在本實(shí)施例中,存儲 器控制裝置80以閃存存儲設(shè)備的控制裝置為例,也就是說,與存儲器控制裝置80連接的是 NAND閃存82 (NAND型Flash)。而且,在本實(shí)施例中,ECC碼以BCH碼為例進(jìn)行說明。對于本實(shí)施例的存儲器控制裝置80來說,用戶可以調(diào)整的是ECC碼的數(shù)據(jù)分組長 度和ECC碼的糾錯(cuò)比特/符號數(shù)(代表糾錯(cuò)能力)這兩個(gè)參數(shù)。裝置中的ECC碼數(shù)據(jù)分組 長度寄存器801用來存放ECC模塊編碼時(shí)的數(shù)據(jù)分組長度,ECC碼糾錯(cuò)能力寄存器802用來 存放ECC模塊編碼時(shí)的糾錯(cuò)比特/符號數(shù)。在實(shí)際應(yīng)用中,人們可以根據(jù)NAND閃存82的 要求,通過CPU 81對這兩個(gè)寄存器801和802進(jìn)行設(shè)置。ECC模塊800在工作時(shí),將根據(jù)這 兩個(gè)寄存器中的數(shù)據(jù)進(jìn)行相應(yīng)的編碼和解碼操作,從而滿足NAND閃存82對糾錯(cuò)編碼的不 同需求,達(dá)到可配置的目的。ECC模塊800在進(jìn)行編碼操作時(shí),需要使用生成多項(xiàng)式,而生成多項(xiàng)式與ECC碼的 糾錯(cuò)能力有關(guān)。因此,對于可配置的ECC模塊800而言,生成多項(xiàng)式需要根據(jù)ECC碼糾錯(cuò)能 力寄存器802存儲的糾錯(cuò)比特/符號數(shù)計(jì)算出來。由于計(jì)算生成多項(xiàng)式的運(yùn)算量很大,而 ECC模塊800進(jìn)行編碼操作時(shí)有實(shí)時(shí)性要求,在每次編碼操作之前分別進(jìn)行生成多項(xiàng)式的 計(jì)算是不可行的。為此需要在存儲器控制裝置80內(nèi)設(shè)置一個(gè)生成多項(xiàng)式寄存器804用于 存放生成多項(xiàng)式。ECC模塊800在每次編碼操作時(shí),只要從生成多項(xiàng)式寄存器804中讀取 所需的生成多項(xiàng)式即可。在系統(tǒng)上電或ECC碼糾錯(cuò)能力寄存器801內(nèi)的數(shù)值被修改時(shí),由 生成多項(xiàng)式計(jì)算電路803根據(jù)糾錯(cuò)比特/符號數(shù)以硬件電路的方式計(jì)算出相應(yīng)的生成多項(xiàng) 式,并寫入到生成多項(xiàng)式寄存器804中。ECC模塊800在編碼時(shí)根據(jù)生成多項(xiàng)式寄存器804 中的生成多項(xiàng)式進(jìn)行ECC編碼。而裝置內(nèi)的迭代初始值寄存器組806用于ECC模塊800的解碼過程。ECC模塊800 在解碼時(shí)如果發(fā)現(xiàn)碼元有錯(cuò),將使用錢搜索(Chien Search)算法進(jìn)行查錯(cuò)。錢搜索算法依 賴于在不同位置下對錯(cuò)誤位置多項(xiàng)式的迭代計(jì)算,其中要用到一組迭代計(jì)算寄存器,來存 放每次迭代計(jì)算的結(jié)果。在BCH碼為縮短碼的情況下,如果在錢搜索計(jì)算開始時(shí)根據(jù)實(shí)際 碼長賦予迭代計(jì)算寄存器組初始值,則可以實(shí)現(xiàn)錢搜索計(jì)算時(shí)間最小化。由于ECC模塊800 所使用的BCH碼一般都是縮短碼,因此需要在存儲器控制裝置80內(nèi)設(shè)置一個(gè)迭代初始值寄存器組806,用于存放計(jì)算出的迭代計(jì)算初始值。例如,在系統(tǒng)上電或ECC碼糾錯(cuò)能力寄存 器802中的數(shù)值被修改或ECC碼數(shù)據(jù)分組長度寄存器801中的數(shù)值被修改時(shí),由迭代初始 值計(jì)算電路805根據(jù)ECC碼數(shù)據(jù)分組長度寄存器801中存儲的數(shù)據(jù)分組長度和ECC碼糾錯(cuò) 能力寄存器802中存儲的糾錯(cuò)比特/符號數(shù)以硬件電路的方式計(jì)算得到一組迭代初始值并 寫入到迭代初始值寄存器組806中。ECC模塊800在每次進(jìn)行錢搜索計(jì)算之前,只要從迭代 初始值寄存器組806中讀取相應(yīng)的迭代計(jì)算初始值,并存放于迭代計(jì)算寄存器中,即可快 速啟動(dòng)錢搜索計(jì)算。和傳統(tǒng)技術(shù)相比,本實(shí)施例在于ECC編碼時(shí)的數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù) (代表糾錯(cuò)能力)不是固定的。在傳統(tǒng)技術(shù)中,由于ECC的數(shù)據(jù)分組長度和糾錯(cuò)比特/符號 數(shù)都是固定的,因此編碼時(shí)的生成多項(xiàng)式和錢搜索算法的迭代計(jì)算初始值也是固定的,傳 統(tǒng)技術(shù)是在編碼時(shí)先根據(jù)糾錯(cuò)比特/符號數(shù)計(jì)算出生成多項(xiàng)式,根據(jù)這個(gè)生成多項(xiàng)式進(jìn)行 ECC編碼;在解碼時(shí)先根據(jù)數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)計(jì)算出錢搜索算法的迭代計(jì) 算初始值,在ECC解碼時(shí)用這個(gè)已經(jīng)計(jì)算出的迭代計(jì)算初始值進(jìn)行ECC解碼,實(shí)現(xiàn)解碼過程 中的校驗(yàn)和糾錯(cuò)。然而,在本實(shí)施例中,糾錯(cuò)比特/符號數(shù)和數(shù)據(jù)分組長度都不是固定的, 是在裝置使用的時(shí)候由用戶來配置的,因此編碼時(shí)的生成多項(xiàng)式和解碼時(shí)錢搜索算法的迭 代計(jì)算初始值也就不是固定的。本實(shí)施例是用一個(gè)寄存器(ECC碼數(shù)據(jù)分組長度寄存器 801)存放用戶自行配置的數(shù)據(jù)分組長度,用一個(gè)寄存器(ECC碼糾錯(cuò)能力寄存器802)存放 用戶自行配置的糾錯(cuò)比特/符號數(shù)值,通過存儲器控制裝置內(nèi)的生成多項(xiàng)式計(jì)算電路803 根據(jù)糾錯(cuò)比特/符號數(shù)計(jì)算對應(yīng)的生成多項(xiàng)式(具體的計(jì)算方法是和傳統(tǒng)技術(shù)相同的,只 不過計(jì)算的時(shí)間點(diǎn)和實(shí)現(xiàn)方式不同,傳統(tǒng)技術(shù)是預(yù)先計(jì)算,本實(shí)施例是在用戶配置好糾錯(cuò) 比特/符號數(shù)后計(jì)算,傳統(tǒng)技術(shù)是軟件計(jì)算為主,本實(shí)施例是通過設(shè)置在裝置內(nèi)的硬件電 路來計(jì)算),并將計(jì)算出的值放入生成多項(xiàng)式寄存器804中。而后續(xù)的根據(jù)生成多項(xiàng)式進(jìn)行 ECC編碼,也和傳統(tǒng)技術(shù)相同,在此不再一一贅述。在ECC解碼時(shí)存儲器控制裝置內(nèi)的迭代 初始值計(jì)算電路805根據(jù)用戶配置的糾錯(cuò)比特/符號數(shù)和數(shù)據(jù)分組長度得到迭代計(jì)算初始 值(具體的計(jì)算方法是和傳統(tǒng)技術(shù)相同的,只不過計(jì)算的時(shí)間點(diǎn)和實(shí)現(xiàn)方式不同,傳統(tǒng)技 術(shù)是預(yù)先計(jì)算,本實(shí)施例是在用戶配置好糾錯(cuò)比特/符號數(shù)和數(shù)據(jù)分組長度后計(jì)算,傳統(tǒng) 技術(shù)是軟件實(shí)現(xiàn)為主,本實(shí)施例是通過設(shè)置在裝置內(nèi)的硬件電路來實(shí)現(xiàn)),并將計(jì)算出來的 值放入迭代初始值寄存器組806中。而后續(xù)的根據(jù)迭代計(jì)算初始值通過錢搜索算法的ECC 解碼的校驗(yàn)和糾錯(cuò),也和傳統(tǒng)技術(shù)相同,在此不再一一贅述。ECC參數(shù)可配置的存儲器控制裝置的第九實(shí)施例圖10示出了本實(shí)施例的ECC參數(shù)可配置的存儲器控制裝置的第九實(shí)施例的原理。 請參見圖10,本實(shí)施例的存儲器控制裝置90包括ECC模塊900、ECC碼數(shù)據(jù)分組長度寄存 器901、ECC碼糾錯(cuò)能力寄存器902、生成多項(xiàng)式查詢表電路903、迭代初始值查詢表電路904 以及存儲器接口 905。在本實(shí)施例中,存儲器控制裝置90以閃存存儲設(shè)備的控制裝置為例, 也就是說,與存儲器控制裝置90連接的是NAND閃存92 (NAND型Flash)。而且,在本實(shí)施例 中,ECC碼以BCH碼為例進(jìn)行說明。對于本實(shí)施例的存儲器控制裝置90來說,用戶可以調(diào)整的是ECC碼的數(shù)據(jù)分組長 度和ECC碼的糾錯(cuò)比特/符號數(shù)(代表糾錯(cuò)能力)這兩個(gè)參數(shù)。裝置中的ECC碼數(shù)據(jù)分組 長度寄存器901用來存放ECC模塊編碼時(shí)的數(shù)據(jù)分組長度,ECC碼糾錯(cuò)能力寄存器902用來存放ECC模塊編碼時(shí)的糾錯(cuò)比特/符號數(shù)。在實(shí)際應(yīng)用中,人們可以根據(jù)NAND閃存92的要求,通過CPU 91對這兩個(gè)寄存器901和902進(jìn)行設(shè)置。ECC模塊900在工作時(shí),將根據(jù)這 兩個(gè)寄存器901和902中的數(shù)據(jù)進(jìn)行相應(yīng)的編碼和解碼操作,從而滿足NAND閃存92對糾 錯(cuò)編碼的不同需求,達(dá)到可配置的目的。ECC模塊900在進(jìn)行編碼操作時(shí),需要使用生成多項(xiàng)式,而生成多項(xiàng)式與ECC碼的 糾錯(cuò)能力有關(guān)。因此,對于可配置的ECC模塊900而言,生成多項(xiàng)式需要根據(jù)ECC碼糾錯(cuò)能 力寄存器902存儲的糾錯(cuò)比特/符號數(shù)計(jì)算出來。由于計(jì)算生成多項(xiàng)式的運(yùn)算量很大,而 ECC模塊進(jìn)行編碼操作時(shí)有實(shí)時(shí)性要求,在每次編碼操作之前分別進(jìn)行生成多項(xiàng)式的計(jì)算 是不可行的。為此需要在存儲器控制裝置90內(nèi)設(shè)置一個(gè)生成多項(xiàng)式查詢表電路903。這個(gè) 生成多項(xiàng)式查詢表電路903存有各種情況下(各個(gè)糾錯(cuò)比特/符號數(shù))對應(yīng)的各個(gè)生成多 項(xiàng)式,其功能實(shí)質(zhì)是查詢表,硬件實(shí)現(xiàn)是邏輯電路。ECC模塊900在每次編碼操作時(shí),根據(jù)寄 存器902中的糾錯(cuò)比特/符號數(shù)在生成多項(xiàng)式查詢表電路903中找到對應(yīng)的生成多項(xiàng)式。 ECC模塊900在編碼時(shí)根據(jù)生成多項(xiàng)式查詢表電路903中的查詢到的生成多項(xiàng)式進(jìn)行ECC 編碼。而裝置內(nèi)的迭代初始值查詢表電路904用于ECC模塊900的解碼過程。ECC模塊 900在解碼時(shí)如果發(fā)現(xiàn)碼元有錯(cuò),將使用錢搜索(Chien Search)算法進(jìn)行查錯(cuò)。錢搜索算 法依賴于在不同位置下對錯(cuò)誤位置多項(xiàng)式的迭代計(jì)算,其中要用到一組迭代計(jì)算寄存器, 來存放每次迭代計(jì)算的結(jié)果。在BCH碼為縮短碼的情況下,如果在錢搜索計(jì)算開始時(shí)根據(jù) 實(shí)際碼長賦予迭代計(jì)算寄存器組初始值,則可以實(shí)現(xiàn)錢搜索計(jì)算時(shí)間最小化。由于ECC模 塊900所使用的BCH碼一般都是縮短碼,因此需要在存儲器控制裝置90內(nèi)設(shè)置一個(gè)迭代初 始值查詢表電路904,用于存放各種可能情況(不同的數(shù)據(jù)分組長度和不同的糾錯(cuò)比特/符 號數(shù)的組合)下的迭代計(jì)算初始值。迭代初始值查詢表電路904和生成多項(xiàng)式查詢表電路 903 一樣,功能實(shí)質(zhì)是一張查詢表,硬件實(shí)質(zhì)是一個(gè)邏輯電路。ECC模塊900在每次進(jìn)行錢 搜索計(jì)算之前,只要根據(jù)寄存器902中的糾錯(cuò)比特/符號數(shù)和寄存器901中的數(shù)據(jù)分組長 度從迭代初始值查詢表電路904中讀取相應(yīng)的一組迭代計(jì)算初始值,并存放于迭代計(jì)算寄 存器中,即可快速啟動(dòng)錢搜索計(jì)算。和傳統(tǒng)技術(shù)相比,本實(shí)施例在于ECC編碼時(shí)的數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù) (代表糾錯(cuò)能力)不是固定的。在傳統(tǒng)技術(shù)中,由于ECC的數(shù)據(jù)分組長度和糾錯(cuò)比特/符號 數(shù)都是固定的,因此編碼時(shí)的生成多項(xiàng)式和錢搜索算法的迭代計(jì)算初始值也是固定的,傳 統(tǒng)技術(shù)是在編碼時(shí)先根據(jù)糾錯(cuò)比特/符號數(shù)計(jì)算出生成多項(xiàng)式,根據(jù)這個(gè)生成多項(xiàng)式進(jìn)行 ECC編碼;在解碼時(shí)先根據(jù)數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)計(jì)算出錢搜索算法的迭代計(jì) 算初始值,在ECC解碼時(shí)用這個(gè)已經(jīng)計(jì)算出的迭代計(jì)算初始值進(jìn)行ECC解碼,實(shí)現(xiàn)解碼過程 中的校驗(yàn)和糾錯(cuò)。然而,在本實(shí)施例中,數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)都不是固定的, 是在裝置使用的時(shí)候由用戶來配置的,因此編碼時(shí)的生成多項(xiàng)式和解碼時(shí)錢搜索算法的迭 代計(jì)算初始值也就不是固定的。本實(shí)施例用一個(gè)寄存器(ECC碼數(shù)據(jù)分組長度寄存器901) 存放用戶自行配置的數(shù)據(jù)分組長度,用一個(gè)寄存器(ECC碼糾錯(cuò)能力寄存器902)存放用戶 自行配置的糾錯(cuò)比特/符號數(shù)值,用第一邏輯電路(生成多項(xiàng)式查詢表電路903)存儲各種 情況下的生成多項(xiàng)式,用第二邏輯電路(迭代初始值查詢表電路904)存儲各種情況下的迭 代初始值。在ECC編碼時(shí)根據(jù)糾錯(cuò)比特/符號數(shù)從第一邏輯電路中查找出對應(yīng)的生成多項(xiàng)式(具體的計(jì)算方法是和傳統(tǒng)技術(shù)相同的,只不過實(shí)現(xiàn)方式不同,傳統(tǒng)技術(shù)是預(yù)先計(jì)算, 本實(shí)施例是在用戶配置好糾錯(cuò)比特/符號數(shù)后根據(jù)這一數(shù)值從第一邏輯電路中查詢出對 應(yīng)的生成多項(xiàng)式)。而后續(xù)的根據(jù)生成多項(xiàng)式進(jìn)行ECC編碼,也和傳統(tǒng)技術(shù)相同,在此不再 一一贅述。在ECC解碼時(shí)裝置根據(jù)用戶配置的糾錯(cuò)比特/符號數(shù)和數(shù)據(jù)分組長度在第二邏 輯電路中查找對應(yīng)的迭代初始值。(具體的計(jì)算方法和傳統(tǒng)技術(shù)相同,只不過實(shí)現(xiàn)方式不 同,傳統(tǒng)技術(shù)是預(yù)先計(jì)算,本實(shí)施例是在用戶配置好糾錯(cuò)比特/符號數(shù)在第二邏輯電路中 查找到對應(yīng)的一組迭代初始值)。而后續(xù)的根據(jù)迭代計(jì)算初始值通過錢搜索算法的ECC解 碼的校驗(yàn)和糾錯(cuò),也和傳統(tǒng)技術(shù)相同,在此不再一一贅述。
需要理解的是,本發(fā)明的實(shí)施例雖然以BCH碼為例,但是其他的ECC碼,例如RS 碼,和BCH碼一樣,適用于本發(fā)明。本發(fā)明的保護(hù)范圍并不局限于上述的九個(gè)實(shí)施例,還包 括其他的一些組合例如生成多項(xiàng)式采用CPU計(jì)算并直接將計(jì)算結(jié)果寫入生成多項(xiàng)式寄存 器的方式,而迭代初始值采用裝置內(nèi)部的硬件計(jì)算電路計(jì)算并寫入迭代初始值寄存器組。 或者,生成多項(xiàng)式采用裝置內(nèi)部的硬件計(jì)算電路計(jì)算并寫入生成多項(xiàng)式寄存器,而迭代初 始值采用根據(jù)數(shù)據(jù)分組長度和糾錯(cuò)比特/符號數(shù)在迭代初始值查詢表電路中查找對應(yīng)的 一組迭代初始值。還有其他可以組合的方式,和上述例子的組合方式類似,在此不再一一贅 述。至于生成多項(xiàng)式的具體計(jì)算過程,迭代初始值組的具體計(jì)算過程,這些都是本領(lǐng) 域的公知常識。為了理解上的方便,現(xiàn)對這些過程進(jìn)行簡單的說明如下。牛成多項(xiàng)式的計(jì)算過稈的簡介下面以BCH碼為例,對可配置ECC模塊的生成多項(xiàng)式的計(jì)算過程進(jìn)行簡單的說明。 設(shè)BCH碼的數(shù)據(jù)分組長度d是可配置的d = 4096 16640BU (相當(dāng)于512 2080Byte)。 糾錯(cuò)能力t (也稱為糾錯(cuò)比特/符號數(shù)t)也是可配置的t= 1 40Bit。設(shè)BCH碼為定義 于有限域GF(2m)上的二進(jìn)制碼,其標(biāo)準(zhǔn)碼長為2m-l(Bit),其中m為正整數(shù)。顯然,根據(jù)BCH 碼的可配置要求,只要取m= 15即可。因此,所設(shè)計(jì)的BCH碼是標(biāo)準(zhǔn)碼長為32767BU的 BCH碼的縮短碼,其實(shí)際碼長為L = d+m *t??梢?,實(shí)際碼長隨數(shù)據(jù)分組長度d和糾錯(cuò)能力 t改變而變化。設(shè)α為GF (2m)上的本原元,可得以α,α 3,. . .,α 79為根的最小多項(xiàng)式為gl(X) =X15+X+1,g3(X) = X15+X10+X5+X+l,...g79 (X) = X15+X12+Xn+X9+X6+X5+X3+X2+1對于任意設(shè)置的糾錯(cuò)能力t(t ( 40),BCH碼的生成多項(xiàng)式按下式構(gòu)造G(X) = gl (X) · g3 (X)……g2t_! (X)如前文所述,G(X)的計(jì)算可由CPU或硬件計(jì)算電路完成,并將其系數(shù)存入生成多 項(xiàng)式寄存器?;蛘邔⑺锌赡艿腉(X)的系數(shù)制成一張表,以ROM或其它電路形式存放于 NAND閃存的控制器中,供ECC模塊在編碼時(shí)根據(jù)t選擇使用。如果G(X)的計(jì)算由CPU或硬 件計(jì)算電路完成,則在系統(tǒng)上電或者t發(fā)生變化時(shí),需要重新計(jì)算G(X)。
在根據(jù)配置信息t得到生成多項(xiàng)式后,ECC模塊即可進(jìn)行編碼操作。設(shè)待編碼數(shù) 據(jù)為如下的比特序列1ν bi; b2,…,Iv1,則相應(yīng)的數(shù)據(jù)多項(xiàng)式為B (X) = boX-t+H+bJ-t+d-2+... +b^X^^+b.^X^ ECC模塊通過電路計(jì)算的方式完成GF⑵域上的多項(xiàng)式除法B⑴/G⑴,所得余式 系數(shù)即為監(jiān)督碼。NAND閃存控制器將數(shù)據(jù)和監(jiān)督碼寫入NAND Flash,完成一次編碼操作。
迭代初始倌組的計(jì)算過稈的簡介下面以BCH碼為例說明迭代初始值組的計(jì)算過程。在對BCH碼進(jìn)行解碼操作時(shí),首先由NAND閃存控制器從NAND閃存中讀取數(shù)據(jù)和 監(jiān)督碼。ECC模塊依次處理數(shù)據(jù)和監(jiān)督碼,得到伴隨式。根據(jù)伴隨式是否為全零,判斷數(shù)據(jù) 和監(jiān)督碼是否有錯(cuò)誤發(fā)生。如果伴隨式為全零,則判定無錯(cuò)誤發(fā)生。如果伴隨式不是全為 零,則判定有錯(cuò)誤發(fā)生,ECC模塊進(jìn)一步進(jìn)行查錯(cuò)計(jì)算。在查錯(cuò)計(jì)算階段,首先根據(jù)伴隨式 計(jì)算出錯(cuò)誤位置方程各項(xiàng)的系數(shù)(含常數(shù)項(xiàng))Otl, O1, σ2,…,σΝΟ錯(cuò)誤位置方程可表達(dá) 為σ ΝΧΝ+—+ σ ^+O0 = O(1)在上述方程中,非零項(xiàng)的最高冪次數(shù)為N。上述方程的根決定了 BCH碼的出錯(cuò)位 置。對于碼長為L = d+m 的BCH碼縮短碼而言,如果位置數(shù)d"-1-w是上述方程的根,則 表明BCH碼的第i比特出錯(cuò)。求解錯(cuò)誤位置方程的有效方法是錢搜索算法,它采用迭代計(jì)算的方式在所有錯(cuò)誤 數(shù)范圍內(nèi)搜索方程可能的根,進(jìn)而找到BCH碼的出錯(cuò)位置。設(shè)^是一組有限域上的變量,η 為正整數(shù),1彡η彡N。在迭代計(jì)算開始之前,首先對&進(jìn)行賦值操作然
后更新rn的值rn= onrn。完成迭代計(jì)算的初始化操作。迭代計(jì)算開始后,計(jì)算R = ΓΝαΝ+···+Για + σ0(2)如果R = 0,則說明BCH碼的第1比特出錯(cuò)。否則,說明第1比特沒有出錯(cuò)。對所 有1彡η彡N,用rn α η的值來更新rn(即rn = rn α n),完成一次迭代計(jì)算。同樣,在第2次 迭代計(jì)算中首先按式(2)計(jì)算R。如果R = 0,則說明BCH碼的第2比特出錯(cuò)。否則,說明 第2比特沒有出錯(cuò)。依此類推,完成L次迭代計(jì)算,從而找出BCH碼的所有錯(cuò)誤位置。設(shè)錯(cuò) 誤個(gè)數(shù)為M。如果M = N,說明BCH碼的錯(cuò)誤個(gè)數(shù)沒有超出BCH碼的糾錯(cuò)能力,通過錢搜索 算法找到的錯(cuò)誤位置是有效的。否則,說明BCH碼的錯(cuò)誤個(gè)數(shù)超出BCH碼的糾錯(cuò)能力,通過 錢搜索算法找到的錯(cuò)誤位置是無效的。在上述錢搜索算法中,rn的初始值(α2 —1’"與碼長L有關(guān),也就是說與數(shù)據(jù)長度d 和BCH碼糾錯(cuò)能力t有關(guān)。因此,在本發(fā)明提出的帶有可配置ECC模塊的NAND Flash控制 器中,設(shè)置了一個(gè)迭代初始值寄存器組或一個(gè)由硬件方式實(shí)現(xiàn)的表,用來存放^的初始值 (α2""'1-1)".如果采用迭代初始值寄存器組,則該寄存器組應(yīng)足以存放巧 !^的初始值(因 為在本例中t的最大值是40)。如果采用由硬件方式實(shí)現(xiàn)的表,則該表應(yīng)包含所有可能碼長 下A r4(l的初始值。ECC模塊在每次進(jìn)行錢搜索計(jì)算之前,只要從迭代初始值寄存器組或 迭代初始值表中讀取相應(yīng)的迭代計(jì)算初始值,并存放于迭代計(jì)算寄存器(即存放rn的寄存 器)中,即可快速啟動(dòng)錢搜索計(jì)算。如前文所述,迭代初始值的計(jì)算可由CPU或硬件電路完成,并將其存入迭代初始值寄存器?;蛘邔⑺锌赡艿牡跏贾抵瞥梢粡埍恚訰OM或其它電路形式存放于NAND 閃存控制器中,供ECC模塊在進(jìn)行錢搜索計(jì)算時(shí)根據(jù)d和t選擇使用。如果迭代初始值的 計(jì)算由CPU或ECC模塊完成,則在系統(tǒng)上電時(shí)或者d或t發(fā)生變化時(shí),需要重新計(jì)算迭代初 始值。綜上所述,本發(fā)明的可配置ECC模塊的 技術(shù)方案,其優(yōu)點(diǎn)是ECC模塊只需要設(shè)計(jì)一 個(gè),通過參數(shù)配置的方式,在預(yù)設(shè)的范圍內(nèi)可自由調(diào)整糾錯(cuò)的數(shù)據(jù)長度和糾錯(cuò)比特/符號 數(shù),從而實(shí)現(xiàn)最大的靈活性。這樣不僅節(jié)省了設(shè)計(jì)的時(shí)間,對于硬件成本也是大幅降低,而 且可適用的場合會大幅增加,可以允許不同領(lǐng)域的硬件設(shè)計(jì)共用同一種ECC模塊。上述實(shí)施例是提供給本領(lǐng)域普通技術(shù)人員來實(shí)現(xiàn)或使用本發(fā)明的,本領(lǐng)域普通技 術(shù)人員可在不脫離本發(fā)明的發(fā)明思想的情況下,對上述實(shí)施例做出種種修改或變化,因而 本發(fā)明的保護(hù)范圍并不被上述實(shí)施例所限,而應(yīng)該是符合權(quán)利要求書提到的創(chuàng)新性特征的 最大范圍。
權(quán)利要求
一種ECC參數(shù)可配置的存儲器控制裝置,包括存儲器接口,用于連接存儲器;ECC碼數(shù)據(jù)分組長度寄存器,用于存儲ECC編碼時(shí)的數(shù)據(jù)分組長度;迭代初始值存儲單元,用于存儲根據(jù)預(yù)設(shè)的糾錯(cuò)比特/符號數(shù)和該ECC碼數(shù)據(jù)分組長度寄存器中存儲的數(shù)據(jù)分組長度計(jì)算得到的用于ECC解碼過程的錢搜索算法的一組迭代初始值;ECC模塊,在ECC編碼時(shí)基于由預(yù)設(shè)的糾錯(cuò)比特/符號數(shù)得到的生成多項(xiàng)式對數(shù)據(jù)進(jìn)行ECC編碼,在ECC解碼時(shí)基于該迭代初始值存儲單元中的該組迭代初始值,利用錢搜索算法進(jìn)行ECC解碼。
2.根據(jù)權(quán)利要求1所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該迭代初始 值存儲單元是迭代初始值寄存器組。
3.根據(jù)權(quán)利要求2所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,在系統(tǒng)上電 或該ECC碼數(shù)據(jù)分組長度寄存器中的數(shù)據(jù)分組長度被修改時(shí),通過存儲器控制裝置外的計(jì) 算設(shè)備根據(jù)預(yù)設(shè)的糾錯(cuò)比特/符號數(shù)和該ECC碼數(shù)據(jù)分組長度寄存器中存儲的數(shù)據(jù)分組長 度計(jì)算得到用于ECC解碼過程的錢搜索算法的一組迭代初始值,并寫入迭代初始值寄存器 組中。
4.根據(jù)權(quán)利要求2所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該存儲器控 制裝置還包括迭代初始值計(jì)算電路,在系統(tǒng)上電或該ECC碼數(shù)據(jù)分組長度寄存器中的數(shù)據(jù)分組長度 被修改時(shí),根據(jù)預(yù)設(shè)的糾錯(cuò)比特/符號數(shù)和該ECC碼數(shù)據(jù)分組長度寄存器中存儲的數(shù)據(jù)分 組長度以硬件電路的方式計(jì)算得到用于ECC解碼過程的錢搜索算法的一組迭代初始值,并 寫入迭代初始值寄存器組中。
5.根據(jù)權(quán)利要求1所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該迭代初始 值存儲單元是一邏輯電路,將預(yù)設(shè)的糾錯(cuò)比特/符號數(shù)和各個(gè)數(shù)據(jù)分組長度值所對應(yīng)的各 組迭代初始值配置成一張硬件實(shí)現(xiàn)的查詢表,該ECC模塊根據(jù)該ECC碼數(shù)據(jù)分組長度寄存 器中存儲的數(shù)據(jù)分組長度搜索該查詢表,以獲得相應(yīng)的一組迭代初始值。
6.一種ECC參數(shù)可配置的存儲器控制裝置,包括存儲器接口,用于連接存儲器;ECC碼糾錯(cuò)能力寄存器,用于存儲ECC編碼時(shí)的糾錯(cuò)比特/符號數(shù);生成多項(xiàng)式存儲單元,用于存儲根據(jù)該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特/符 號數(shù)計(jì)算得到的用于ECC編碼過程的生成多項(xiàng)式;迭代初始值存儲單元,用于存儲根據(jù)該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特/符 號數(shù)和預(yù)設(shè)的數(shù)據(jù)分組長度計(jì)算得到的用于ECC解碼過程的錢搜索算法的一組迭代初始 值;ECC模塊,在ECC編碼時(shí)根據(jù)該生成多項(xiàng)式存儲單元中的生成多項(xiàng)式對數(shù)據(jù)進(jìn)行ECC編 碼,在ECC解碼時(shí)基于該迭代初始值存儲單元中的該組迭代初始值,利用錢搜索算法進(jìn)行 ECC解碼。
7.根據(jù)權(quán)利要求6所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該生成多項(xiàng) 式存儲單元是生成多項(xiàng)式寄存器。
8.根據(jù)權(quán)利要求7所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,在系統(tǒng)上 電或該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù)被修改時(shí),通過存儲器控制裝置外的 計(jì)算設(shè)備根據(jù)糾錯(cuò)比特/符號數(shù)計(jì)算出相應(yīng)的生成多項(xiàng)式,并存儲在該生成多項(xiàng)式寄存器 中。
9.根據(jù)權(quán)利要求7所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該存儲器控 制裝置還包括生成多項(xiàng)式計(jì)算電路,在系統(tǒng)上電或該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù) 被修改時(shí),根據(jù)該糾錯(cuò)比特/符號數(shù)以硬件電路的方式計(jì)算出相應(yīng)的生成多項(xiàng)式,并存儲 在該生成多項(xiàng)式寄存器中。
10.根據(jù)權(quán)利要求6所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該生成多 項(xiàng)式存儲單元是第一邏輯電路,將各個(gè)糾錯(cuò)比特/符號數(shù)的值所對應(yīng)的各個(gè)生成多項(xiàng)式配 置成一張硬件實(shí)現(xiàn)的查詢表,該ECC模塊根據(jù)該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特 /符號數(shù)搜索該查詢表,以獲得相應(yīng)的生成多項(xiàng)式。
11.根據(jù)權(quán)利要求6所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該迭代初 始值存儲單元是迭代初始值寄存器組。
12.根據(jù)權(quán)利要求11所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,在系統(tǒng)上 電或該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù)被修改時(shí),通過存儲器控制裝置外的 計(jì)算設(shè)備根據(jù)預(yù)設(shè)的數(shù)據(jù)分組長度和該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù)計(jì)算 得到用于ECC解碼過程的錢搜索算法的一組迭代初始值,并寫入迭代初始值寄存器組中。
13.根據(jù)權(quán)利要求11所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該存儲器 控制裝置還包括迭代初始值計(jì)算電路,在系統(tǒng)上電或該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù) 被修改時(shí),根據(jù)預(yù)設(shè)的數(shù)據(jù)分組長度和該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特/符號 數(shù)以硬件電路的方式計(jì)算得到用于ECC解碼過程的錢搜索算法的一組迭代初始值,并寫入 迭代初始值寄存器組中。
14.根據(jù)權(quán)利要求6所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該迭代初 始值存儲單元是第二邏輯電路,將預(yù)設(shè)的數(shù)據(jù)分組長度和各個(gè)糾錯(cuò)比特/符號數(shù)的值所對 應(yīng)的各組迭代初始值配置成一張硬件實(shí)現(xiàn)的查詢表,該ECC模塊根據(jù)該ECC碼糾錯(cuò)能力寄 存器中存儲的糾錯(cuò)比特/符號數(shù)搜索該查詢表,以獲得相應(yīng)的一細(xì)迭代初始值。
15.一種ECC參數(shù)可配置的存儲器控制裝置,包括存儲器接口,用于連接存儲器;ECC碼數(shù)據(jù)分組長度寄存器,用于存儲ECC編碼時(shí)的數(shù)據(jù)分組長度;ECC碼糾錯(cuò)能力寄存器,用于存儲ECC編碼時(shí)的糾錯(cuò)比特/符號數(shù);生成多項(xiàng)式存儲單元,用于存儲根據(jù)該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特/符 號數(shù)計(jì)算得到的用于ECC編碼過程的生成多項(xiàng)式;迭代初始值存儲單元,用于存儲根據(jù)該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特/符 號數(shù)和該ECC碼數(shù)據(jù)分組長度寄存器中存儲的數(shù)據(jù)分組長度計(jì)算得到的用于ECC解碼過程 的錢搜索算法的一組迭代初始值;ECC模塊,在ECC編碼時(shí)根據(jù)該生成多項(xiàng)式存儲單元中的生成多項(xiàng)式對數(shù)據(jù)進(jìn)行ECC編3碼,在ECC解碼時(shí)基于該迭代初始值存儲單元中的該組迭代初始值,利用錢搜索算法進(jìn)行 ECC解碼。
16.根據(jù)權(quán)利要求15所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該生成多 項(xiàng)式存儲單元是生成多項(xiàng)式寄存器。
17.根據(jù)權(quán)利要求16所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,在系統(tǒng)上 電或該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù)被修改時(shí),通過存儲器控制裝置外的 計(jì)算設(shè)備根據(jù)糾錯(cuò)比特/符號數(shù)計(jì)算出相應(yīng)的生成多項(xiàng)式,并存儲在該生成多項(xiàng)式寄存器 中。
18.根據(jù)權(quán)利要求16所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該存儲器 控制裝置還包括生成多項(xiàng)式計(jì)算電路,在系統(tǒng)上電或該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù) 被修改時(shí),根據(jù)該糾錯(cuò)比特/符號數(shù)以硬件電路的方式計(jì)算出相應(yīng)的生成多項(xiàng)式,并存儲 在該生成多項(xiàng)式寄存器中。
19.根據(jù)權(quán)利要求15所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該生成多 項(xiàng)式存儲單元是第一邏輯電路,將各個(gè)糾錯(cuò)比特/符號數(shù)的值所對應(yīng)的各個(gè)生成多項(xiàng)式配 置成一張硬件實(shí)現(xiàn)的查詢表,該ECC模塊根據(jù)該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特 /符號數(shù)搜索該查詢表,以獲得相應(yīng)的生成多項(xiàng)式。
20.根據(jù)權(quán)利要求15所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該迭代初 始值存儲單元是迭代初始值寄存器組。
21.根據(jù)權(quán)利要求20所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,在系統(tǒng)上 電或該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù)被修改或該ECC碼數(shù)據(jù)分組長度寄存 器中的數(shù)據(jù)分組長度被修改時(shí),通過存儲器控制裝置外的計(jì)算設(shè)備根據(jù)該ECC碼數(shù)據(jù)分組 長度寄存器中的數(shù)據(jù)分組長度和該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù)計(jì)算得到 用于ECC解碼過程的錢搜索算法的一組迭代初始值,并寫入迭代初始值寄存器組中。
22.根據(jù)權(quán)利要求20所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該存儲器 控制裝置還包括迭代初始值計(jì)算電路,在系統(tǒng)上電或該ECC碼糾錯(cuò)能力寄存器中的糾錯(cuò)比特/符號數(shù) 被修改或該ECC碼數(shù)據(jù)分組長度寄存器中的數(shù)據(jù)分組長度被修改時(shí),根據(jù)該ECC碼數(shù)據(jù)分 組長度寄存器中的數(shù)據(jù)分組長度和該ECC碼糾錯(cuò)能力寄存器中存儲的糾錯(cuò)比特/符號數(shù)以 硬件電路的方式計(jì)算得到用于ECC解碼過程的錢搜索算法的一組迭代初始值,并寫入迭代 初始值寄存器組中。
23.根據(jù)權(quán)利要求19所述的ECC參數(shù)可配置的存儲器控制裝置,其特征在于,該迭代 初始值存儲單元是第二邏輯電路,將各個(gè)糾錯(cuò)比特/符號數(shù)和各個(gè)數(shù)據(jù)分組長度所對應(yīng)的 各組迭代初始值配置成一張硬件實(shí)現(xiàn)的查詢表,該ECC模塊根據(jù)該ECC碼糾錯(cuò)能力寄存器 中存儲的糾錯(cuò)比特/符號數(shù)和該ECC碼數(shù)據(jù)分組長度寄存器中的數(shù)據(jù)分組長度搜索該查詢 表,以獲得相應(yīng)的一組迭代初始值。
全文摘要
本發(fā)明公開了ECC參數(shù)可配置的存儲器控制裝置,可在一定范圍內(nèi)對ECC模塊的數(shù)據(jù)分組長度和糾錯(cuò)能力進(jìn)行配置。其技術(shù)方案為本發(fā)明的裝置內(nèi)有ECC碼數(shù)據(jù)分組長度寄存器和ECC碼糾錯(cuò)能力寄存器,分別存放ECC編碼的數(shù)據(jù)分組長度和糾錯(cuò)能力。在實(shí)際應(yīng)用中,用戶根據(jù)閃存的要求,通過CPU對這兩個(gè)寄存器進(jìn)行設(shè)置。在存儲器控制裝置中還設(shè)置一個(gè)生成多項(xiàng)式寄存器或生成多項(xiàng)式表以及一個(gè)迭代初始值寄存器組或迭代初始值表,通過生成多項(xiàng)式寄存器以及迭代初始值寄存器組,基于ECC碼數(shù)據(jù)分組長度寄存器和ECC碼糾錯(cuò)能力寄存器中的數(shù)值進(jìn)行相應(yīng)的編碼和解碼操作,從而滿足閃存對糾錯(cuò)編碼的不同需求。
文檔編號G11C16/06GK101882467SQ201010219290
公開日2010年11月10日 申請日期2010年7月2日 優(yōu)先權(quán)日2010年7月2日
發(fā)明者張江安, 張欽 申請人:中穎電子有限公司