本發(fā)明涉及錯誤校正碼(ecc)領域,尤其涉及一種錯誤校正碼幀長調整方法及其裝置。
背景技術:
存儲設備中通常使用nvm(non-volatilememory非易失存儲器)作為存儲介質。nand閃存、相變存儲器、feram、mram等是常見的nvm。nvm中存儲的數據會在一定程度上出現損壞,為克服此類問題,通常在訪問nvm時,通過容錯編解碼對nvm上存儲的數據進行保護。常用的容錯編解碼包括bch、ldpc、rs等。
存儲介質上通常按頁來存儲和讀取數據。存儲介質上的頁(稱為物理頁)具有固定的尺寸,例如17664字節(jié)。而用戶數據單元一般為例如4k字節(jié)數據與元數據的組合,例如用戶數據單元的大小為4120字節(jié)。不同的ecc對校驗數據的長度也有限制,例如每用戶數據單元的校驗數據為120比特。用戶數據單元連同其校驗數據構成ecc塊,在本例中,ecc塊大小為4240字節(jié)。在物理頁容能夠容納4個ecc塊,余下的704字節(jié)可填充無關數據。
用戶數據單元大小與ecc塊大小的比率,被稱為ecc的碼率。ecc的碼率體現了ecc的糾錯能力。一般而言,碼率越低,糾錯能力越強。
技術實現要素:
在不同的場景,可能希望存儲不同尺寸的用戶數據單元,并希望使用不同的ecc碼率。一些ecc或ecc編碼器對用戶數據單元的大小有限制,例如,要求用戶數據單元是64字節(jié)或512比特的整數倍。當用戶數據單元的尺寸不滿足ecc要求時,需要填充用戶數據單元,使其大小滿足ecc的要求。
例如(圖1),用戶數據單元大小是520字節(jié)(包括原始數據與元數據),為滿足ecc要求(用戶數據單元大小需要是64字節(jié)或512比 特的整數倍),需要將520字節(jié)的用戶數據單元填充至576字節(jié)(填充56字節(jié)的填充數據)。對填充后的576字節(jié)用戶數據單元計算校驗數據,例如64字節(jié)。那么ecc塊(包括校驗數據、用戶數據單元與填充數據)的總長度為640字節(jié)。假設nvm的物理頁大小為600字節(jié),這導致640字節(jié)的ecc塊無法被完整容納在nvm的物理頁中。導致在該nvm上無法為520字節(jié)大小的用戶數據單元提供碼率為0.8125(520/640)ecc。
根據本發(fā)明的一個方面,提供了一種錯誤校正碼幀長調整方法,所述方法包括:從ecc塊的填充數據截斷數據,使得修改后的ecc塊能夠寫入nvm的物理頁,其中,所述修改后的ecc塊由用戶數據單元、填充數據的部分和校驗數據組成;將修改后的ecc塊寫入nvm的物理頁。
根據本發(fā)明的一個實施方式,其中對所述用戶數據單元與所述填充數據的組合計算校驗數據,得到ecc塊。
根據本發(fā)明的一個實施方式,進一步包括:向用戶數據單元添加填充數據。
根據本發(fā)明的一個實施方式,進一步包括:接收要寫入nvm的用戶數據單元。
根據本發(fā)明的一個實施方式,其中,判定所述用戶數據單元的長度是否滿足指定ecc編碼器要求,若所述用戶數據單元的長度不滿足指定ecc編碼器要求,向所述用戶數據單元添加填充數據。
根據本發(fā)明的一個實施方式,其中,判定ecc塊的長度是否大于nvm的物理頁大小,若ecc塊的長度大于nvm的物理頁大小,從所述ecc塊的填充數據截斷數據,使得修改后的ecc塊能夠寫入nvm的物理頁。
根據本發(fā)明的一個實施方式,其中,所述填充數據生成方式為使用預定數據、使用結果可重復生成的預定隨機數生成方法和/或隨機數種子生成所述填充數據。
根據本發(fā)明的一個實施方式,其中,使用結果可重復生成的預定隨機數生成方法和/或隨機數種子生成所述填充數據中按照物理頁的 地址選擇隨機數生成方法和/或隨機數種子。
根據本發(fā)明的一個實施方式,其中,使用結果可重復生成的預定隨機數生成方法和/或隨機數種子生成所述填充數據中按照物理頁的地址和所述物理頁的寫入次數選擇隨機數生成方法和/或隨機數種子。
根據本發(fā)明的第二方面,還提供了一種錯誤校正碼幀長調整設備,所述設備包括:用于從ecc塊的填充數據截斷數據,使得修改后的ecc塊能夠寫入nvm的物理頁的裝置,其中,所述修改后的ecc塊由用戶數據單元、填充數據的部分和校驗數據組成;用于將修改后的ecc塊寫入nvm的物理頁的裝置。
根據本發(fā)明的第三方面,還提供了一種錯誤校正碼幀長調整方法,所述方法包括:從nvm的物理頁讀出ecc塊;在ecc塊的填充數據的指定部分填充預定數據來修改ecc塊;對修改后的ecc塊進行ecc解碼,得到信息數據;從信息數據中得到用戶數據單元。
根據本發(fā)明的第四方面,還提供了一種錯誤校正碼幀長調整設備,所述設備包括:用于從nvm的物理頁讀出ecc塊的裝置;用于在ecc塊的填充數據的指定部分填充預定數據的裝置;用于對修改后的ecc塊進行ecc解碼,得到信息數據的裝置;用于從信息數據中得到用戶數據單元的裝置。
根據本發(fā)明的第五方面,還提供了一種錯誤校正碼幀長調整方法,所述方法包括:從nvm的物理頁讀出ecc塊;從ecc塊取得校驗數據與用戶數據單元的組合;重新生成填充數據,并將校驗數據、用戶數據單元與所生成的填充數據組合成修改后的ecc塊;對修改后的ecc塊進行ecc解碼,得到信息數據;從信息數據中得到用戶數據單元。
根據本發(fā)明的第五方面的一個實施方式,其中,當ecc為ldpc時,進行軟譯碼時,對于填充數據調整其llr,以向譯碼器指示填充數據具有高可信度。
根據本發(fā)明的第六方面,還提供了一種錯誤校正碼幀長調整設 備,所述設備包括:用于從nvm的物理頁讀出ecc塊的裝置;用于從ecc塊取得校驗數據與用戶數據單元的組合的裝置;用于重新生成填充數據,并組成修改后的ecc塊即填充數據、校驗數據與用戶數據單元的組合的裝置;用于對修改后的ecc塊進行ecc解碼,得到信息數據的裝置;用于從信息數據中得到用戶數據單元的裝置。
根據本發(fā)明的第七方面,還提供了一種錯誤校正碼幀長調整方法,所述方法包括:從nvm的物理頁讀出校驗數據與用戶數據單元的組合;生成填充數據,并將校驗數據、用戶數據單元與所生成的填充數據組合成修改后的ecc塊;對修改后的ecc塊進行ecc解碼,得到信息數據;從信息數據中得到用戶數據單元。
根據本發(fā)明的第七方面的一個實施方式,其中,當ecc為ldpc時,進行軟譯碼時,對于填充數據調整其llr,以向譯碼器指示填充數據具有高可信度。
根據本發(fā)明的第七方面的一個實施方式,其中,軟譯碼包括以下步驟:從nvm中讀取校驗數據的軟比特與用戶數據單元的軟比特的組合;對校驗數據的軟比特、用戶數據單元的軟比特和填充數據的軟比特的組合進行軟譯碼。
根據本發(fā)明的第八方面,還提供了一種錯誤校正碼幀長調整設備,所述設備包括:用于從nvm的物理頁讀出校驗數據與用戶數據單元的組合的裝置;用于重新生成填充數據,并組成填充數據、校驗數據與用戶數據單元的組合即修改后的ecc塊的裝置;用于對修改后的ecc塊進行ecc解碼,得到信息數據的裝置;用于從信息數據中得到用戶數據單元的裝置。
根據本發(fā)明的第九方面,還提供了一種錯誤校正碼幀長調整方法,所述方法包括:刪除第一ecc塊的第一填充數據的部分,刪除第二ecc塊的第二填充數據的部分,使得修改后的第一ecc塊與第二ecc塊組合能夠被nvm的物理頁容納;其中第一ecc塊包括第一用戶數據單元、第一填充數據以及第一校驗數據,第二ecc塊包括第二用戶數據單元、第二填充數據以及第二校驗數據;以及將修 改后的第一ecc塊與第二ecc塊寫入nvm的物理頁。
根據本發(fā)明的第九方面的一個實施方式,還包括:接收要寫入nvm的第一用戶數據單元;向第一用戶數據單元添加第一填充數據,使得第一用戶數據單元與第一填充數據的組合滿足ecc編碼器對輸入數據大小的要求;對第一用戶數據單元與第一填充數據的組合計算第一校驗數據,得到第一ecc塊;接收要寫入nvm的第二用戶數據單元;向第二用戶數據單元添加第二填充數據,使得第二用戶數據單元與第二填充數據的組合滿足ecc編碼器對輸入數據大小的要求;對第二用戶數據單元與第二填充數據的組合計算第二校驗數據,得到第二ecc塊。
根據本發(fā)明的第九方面的一個實施方式,其中,使用預定數據、或者使用結果可重復生成的預定隨機數生成方法和/或隨機數種子生成所述第一填充數據與所述第二填充數據。
根據本發(fā)明的第九方面的一個實施方式,其中,第一用戶數據單元與第一填充數據的組合的長度為k*n1,而第二用戶數據單元與第二填充數據的組合的長度為k*n2,其中n1與n2為自然數,k為ecc編碼器要求的數據塊大小。
根據本發(fā)明的第十方面,還提供了一種錯誤校正碼幀長調整設備,所述設備包括:用于刪除第一ecc塊的第一填充數據的部分,刪除第二ecc塊的第二填充數據的部分,使得修改后的第一ecc塊與第二ecc塊組合能夠被nvm的物理頁容納的裝置;其中第一ecc塊包括第一用戶數據單元、第一填充數據以及第一校驗數據,第二ecc塊包括第二用戶數據單元、第二填充數據以及第二校驗數據;以及用于將修改后的第一ecc塊與第二ecc塊寫入nvm的物理頁的裝置。
根據本發(fā)明的第十一方面,還提供了一種錯誤校正碼幀長調整方法,所述方法包括:確定第一填充數據的修改后長度與第二填充數據的修改后長度,根據第一填充數據的修改后長度生成第三填充數據與根據第二填充數據的修改后長度生成第四填充數據,使得第一 用戶數據單元、第三填充數據、第一校驗數據與第二用戶數據單元、第四填充數據與第二校驗數據的組合能夠被nvm的一個物理頁容納;生成修改后的第一ecc塊與修改后的第二ecc塊,其中修改后的第一ecc塊包括第一用戶數據單元、第一校驗數據以及第三填充數據,第二ecc塊包括第二用戶數據單元、第二校驗數據以及第四填充數據;以及將修改后的第一ecc塊與第二ecc塊寫入nvm的物理頁。
根據本發(fā)明的第十一方面的一個實施方式,還包括:接收要寫入nvm的第一用戶數據單元;向第一用戶數據單元添加第一填充數據,使得第一用戶數據單元與第一填充數據的組合滿足ecc編碼器對輸入數據大小的要求;對第一用戶數據單元與第一填充數據的組合計算第一校驗數據;接收要寫入nvm的第二用戶數據單元;向第二用戶數據單元添加第二填充數據,使得第二用戶數據單元與第二填充數據的組合滿足ecc編碼器對輸入數據大小的要求;對第二用戶數據單元與第二填充數據的組合計算第二校驗數據。
根據本發(fā)明的第十一方面的一個實施方式,其中,使用預定數據、或者使用結果可重復生成的預定隨機數生成方法和/或隨機數種子生成所述第一填充數據與所述第二填充數據。
根據本發(fā)明的第十一方面的一個實施方式,其中,第一用戶數據單元與第一填充數據的組合的長度為k*n1,而第二用戶數據單元與第二填充數據的組合的長度為k*n2,其中n1與n2為自然數,k為ecc編碼器要求的數據塊大小。
根據本發(fā)明的第十一方面的一個實施方式,其中,隨機生成所述第三填充數據與所述第四填充數據。
根據本發(fā)明的第十二方面,還提供了一種錯誤校正碼幀長調整設備,所述設備包括:用于確定第一填充數據的修改后長度與第二填充數據的修改后長度,根據第一填充數據的修改后長度生成第三填充數據與根據第二填充數據的修改后長度生成第四填充數據,使得第一用戶數據單元、第三填充數據、第一校驗數據與第二用戶數據 單元、第四填充數據與第二校驗數據的組合能夠被nvm的一個物理頁容納的裝置;用于生成修改后的第一ecc塊與修改后的第二ecc塊的裝置,其中修改后的第一ecc塊包括第一用戶數據單元、第一校驗數據以及第三填充數據,第二ecc塊包括第二用戶數據單元、第二校驗數據以及第四填充數據;以及用于將修改后的第一ecc塊與第二ecc塊寫入nvm的物理頁的裝置。
根據本發(fā)明的第十三方面,提供一種包含計算機程序代碼的計算機程序,當被載入計算機系統(tǒng)并在計算機系統(tǒng)上執(zhí)行時,所述計算機程序代碼使所述計算機系統(tǒng)執(zhí)行根據本發(fā)明一方面提供的錯誤校正碼幀長調整方法或者根據本發(fā)明第三方面提供的錯誤校正碼幀長調整方法或者本發(fā)明第五方面提供的錯誤校正碼幀長調整方法或者本發(fā)明第七方面提供的錯誤校正碼幀長調整方法或者本發(fā)明第九方面提供的錯誤校正碼幀長調整方法或本發(fā)明第十一方面提供的錯誤校正碼幀長調整方法。
根據本發(fā)明的第十四方面,提供一種包括程序代碼的程序,當被載入存儲設備并在存儲設備上執(zhí)行時,所述計程序代碼使所述存儲設備執(zhí)行根據本發(fā)明一方面提供的錯誤校正碼幀長調整方法或者根據本發(fā)明第三方面提供的錯誤校正碼幀長調整方法或者本發(fā)明第五方面提供的錯誤校正碼幀長調整方法或者本發(fā)明第七方面提供的錯誤校正碼幀長調整方法或者本發(fā)明第九方面提供的錯誤校正碼幀長調整方法或本發(fā)明第十一方面提供的錯誤校正碼幀長調整方法。
本發(fā)明能夠在單一ecc引擎中支持多種碼率,減少閃存物理頁大小對碼率的限制。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。其中在附圖中,參考數字之后的字母標記指示多個相同的部件,當泛指這些部件時,將省略其最后的字母標記。在 附圖中:
圖1示出了錯誤校正碼幀長的示意圖;
圖2示出了根據本發(fā)明的一個實施方式的錯誤校正碼幀長調整方法的示意圖;
圖3a示出了根據本發(fā)明的一個實施方式的錯誤校正碼幀長調整方法的流程圖;
圖3b示出了根據本發(fā)明的另一個實施方式的錯誤校正碼幀長調整方法的流程圖;
圖4示出了根據本發(fā)明的一個實施方式的錯誤校正碼幀長調整設備的結構示意圖;
圖5a示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的流程圖;
圖5b示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的示意圖;
圖6a示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的流程圖;
圖6b示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的示意圖;
圖7示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的示意圖;
圖8a示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的流程圖;
圖8b示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的流程圖;
圖9示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的流程圖;
圖10示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的示意圖。
在附圖中,使用相同或類似的標號來指代相同或類似的元素。
具體實施方式
下面結合附圖和具體的實施方式對本發(fā)明作進一步的描述。
圖2示出了根據本發(fā)明的一個實施方式的錯誤校正碼幀長調整方法的示意圖。
圖3a示出了根據本發(fā)明的一個實施方式的錯誤校正碼幀長調整方法的流程圖。圖3a所示的流程圖僅僅是示意性的,其中記載的步驟可以并行執(zhí)行、省略和/或增加其他步驟。
如圖3a所示,錯誤校正碼幀長調整方法包括以下步驟:
步驟s3100:從ecc塊的填充數據截斷數據,使得修改后的ecc塊能夠寫入nvm的物理頁;
步驟s3200:將修改后的ecc塊寫入nvm的物理頁。
參看圖2,對用戶數據單元與填充數據(210)的組合計算校驗數據,得到ecc塊(220),ecc塊220由用戶數據單元、填充數據和校驗數據組成,在一些情況下,ecc塊220的總長度大于要寫入nvm的物理頁。例如,用戶數據單元的大小為520字節(jié),填充數據的大小為56字節(jié),校驗數據210的大小為64字節(jié),則ecc塊220的總長度為640字節(jié),假設要寫入nvm的物理頁的大小為600字節(jié),則此時的ecc塊不能被寫入nvm的物理頁,
為將ecc塊寫入nvm的物理頁,參看圖3a,在步驟s3100中將ecc塊220中的填充數據210截斷為填充數據215,使得修改后的ecc塊225的總長度等于或小于要寫入nvm的物理頁。
在步驟s3100中,刪除填充數據210的部分,將56字節(jié)的填充數據210刪除40字節(jié)或更多,從而使得修改后的ecc塊225的總長度等于或小于600字節(jié),從而能夠被nvm的物理頁所容納??蛇x的,nvm可選擇為nand閃存、相變存儲器、feram或mram。
結合圖2和圖3a,在步驟s3200中,修改后的ecc塊225由用戶數據單元、填充數據215(為填充數據210的部分)和校驗數據組成,在步驟s3100中修改后的ecc塊225的總長度等于或小于600字節(jié),將修改后的ecc塊225寫入600字節(jié)的nvm的物理頁中。
圖3b示出了根據本發(fā)明的另一個實施方式的錯誤校正碼幀長調整方法的流程圖。
如圖3b所示,錯誤校正碼幀長調整方法包括以下步驟:
步驟s3040:接收要寫入nvm的用戶數據單元;
步驟s3050:向用戶數據單元添加填充數據;
步驟s3100:從ecc塊的填充數據截斷數據,使得修改后的ecc塊能夠寫入nvm的物理頁;
步驟s3200:將修改后的ecc塊寫入nvm的物理頁。
結合圖2和圖3b所示,在步驟s3040中,接收要寫入nvm的用戶數據單元,在圖2所示的例子中,用戶數據單元大小為520字節(jié)。用戶數據單元包括原始數據與元數據。
在步驟s3050中,向用戶數據單元添加填充數據210(參看圖2)。根據指定ecc編碼器要求,若用戶數據單元的長度不滿足指定ecc編碼器要求,向用戶數據單元添加填充數據。例如,用戶數據單元大小是520字節(jié),為滿足ecc編碼器要求(例如,要求用戶數據單元是64字節(jié)或512比特的整數倍),可將520字節(jié)的用戶數據單元填充至576字節(jié)(填充56字節(jié)填充數據210)??梢岳斫獾氖?,在大多數的情況下,事先已知用戶數據單元的長度不滿足指定ecc編碼器要求,則無需對用戶數據單元的長度是否滿足指定ecc編碼器要求進行判定。
在步驟s3100中,從ecc塊的填充數據210截斷數據,使得修改后的ecc塊225能夠寫入nvm的物理頁。在一個實施例中,判斷ecc塊220的長度是否大于nvm的物理頁大小,若ecc塊220的長度大于nvm的物理頁大小,對ecc塊220的填充數據210進行截斷??梢岳斫獾氖?,在大多數的情況下,事先已知ecc塊210的長度大于nvm的物理頁大小,則無需對ecc塊210的長度和nvm的物理頁大小進行判定。
在根據本發(fā)明的實施例中,可使用多種方式生成填充數據。例 如,填充數據生成方式可以為使用預定數據模式(例如重復的“01”比特序列)、使用結果可重復生成的預定隨機數生成方法和/或隨機數種子生成填充數據。其中,使用結果可重復生成的預定隨機數生成方法和/或隨機數種子生成填充數據中,可按照物理頁的地址選擇隨機數生成方法和/或隨機數種子??蛇x的,使用結果可重復生成的預定隨機數生成方法和/或隨機數種子生成填充數據中按照物理頁的地址和該物理頁的寫入次數選擇隨機數生成方法和/或隨機數種子。
在進一步的實施例中,填充數據的長度可以有多種,例如,ecc編碼器要求信息數據長度為64字節(jié)倍數,而用戶數據單元長度為520字節(jié),那么填充數據的長度可以是56字節(jié),也可以是56+64*n字節(jié)。
根據本發(fā)明的另一個方面,本發(fā)明還提供了一種錯誤校正碼幀長調整設備,如圖4所示,該設備包括:用于從ecc塊的填充數據截斷數據,使得修改后的ecc塊能夠寫入nvm的物理頁的裝置410,其中,修改后的ecc塊由用戶數據單元、填充數據的部分和校驗數據組成;以及用于將修改后的ecc塊寫入nvm的物理頁的裝置420。
在圖2、圖3a與圖3b中,展示了根據本發(fā)明實施例調整錯誤校正碼幀長(ecc塊長度),以寫入nvm的物理頁的過程。接下來將描述從nvm物理頁中讀出ecc塊,調整ecc塊長度并進行ecc解碼的過程。
圖5a示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的流程圖。圖5a所示的流程圖僅僅是示意性的,其中記載的步驟可以并行執(zhí)行、省略和/或增加其他步驟。圖5b示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的示意圖。
如圖5a所示,錯誤校正碼幀長調整方法包括以下步驟:
步驟s5100:從nvm的物理頁讀出ecc塊;
步驟s5200:在ecc塊的填充數據的指定部分填充預定數據來修改ecc塊;
步驟s5300:對修改后的ecc塊進行ecc解碼,得到信息數據;
步驟s5400:從信息數據中刪除填充數據,得到用戶數據單元。
結合圖5a和圖5b所示,在步驟s5100中,從nvm的物理頁讀出ecc塊520(圖5b)。此時的ecc塊是由用戶數據單元、填充數據的部分510和校驗數據組成,在圖2所示的例子中,ecc塊520的長度與nvm的物理頁的大小相等。
結合圖5a和圖5b所示,在步驟s5200中,在ecc塊520的填充數據部分510的指定位置(尾部)填充預定數據來修改ecc塊520,指定位置填充的預定數據為在步驟s3100(圖3a、圖3b)中從填充數據210中刪除的數據,從而還原出同填充數據210具有相同尺寸的填充數據515。修改后的ecc塊525由用戶數據單元、填充數據515和校驗數據組成。
從nvm的物理頁讀出的ecc塊520可能存在錯誤,需要對ecc塊520進行錯誤校正。修改后的ecc塊525的長度滿足ecc解碼器的要求,對ecc塊525進行ecc解碼,若譯碼成功,得到校正后的校驗數據、用戶數據單元與填充數據。將用戶數據單元與填充數據的組合稱為信息數據,在步驟s5400,從信息數據中提取出用戶數據單元。
從nvm物理頁中讀出的填充數據的部分510可能存在錯誤,而在步驟s5200中填充的預定數據則不存在因nvm物理頁引入的錯誤,從而ecc塊525可具有比ecc塊520低的誤碼率,從而有利于通過ecc解碼得到正確的用戶數據單元。
圖6a示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的流程圖。圖6b示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的示意圖。
如圖6a所示,錯誤校正碼幀長調整方法包括以下步驟:
步驟s6100:從nvm的物理頁讀出ecc塊;
步驟s6200:從ecc塊取得校驗數據與用戶數據單元的組合;
步驟s6300:重新生成填充數據,并將校驗數據、用戶數據單元與所生成的填充數據組合成修改后的ecc塊;
步驟s6400:對修改后的ecc塊進行ecc解碼,得到信息數據;
步驟s6500:從信息數據中刪除填充數據,得到用戶數據單元。
在步驟s6100中,參看圖6b,ecc塊620是由用戶數據單元、填充數據的部分610和校驗數據組成。在步驟s6200中,忽略或刪除填充數據的部分610,取得校驗數據與用戶數據單元的組合??蛇x地,步驟s6100與步驟s6200可以合并,從nvm的物理頁讀出ecc塊時,無需讀出完整的nvm物理頁,而是只讀出nvm物理頁中存儲的校驗數據與用戶數據單元??稍趎vm讀命令中指定讀出nvm物理頁中存儲的校驗數據與用戶數據單元。
在步驟s6300中,依據步驟s3050(圖3b)中填充數據生成方式的來重新生成填充數據615,得到ecc塊625。ecc塊625包括從nvm物理頁中讀出的校驗數據、用戶數據單元與填充數據615。在從nvm物理頁中讀出的校驗數據與用戶數據單元存在因nvm物理頁所引入的錯誤然而由于生成方式相同,從而在步驟s6300中生成的填充數據615中不存在因nvm物理頁引入的錯誤。因而修改后的ecc塊625可具有比ecc塊620低的誤碼率,從而有利于通過ecc解碼得到正確的用戶數據單元。
在步驟s6400中,對ecc塊625進行ecc譯碼。若譯碼成功,得到信息數據,信息數據包括用戶數據單元以及填充數據615。
進一步的實施例中,當ecc為ldpc(低密度奇偶校驗碼)時,在進行軟譯碼時,對于填充數據615調整其llr(對數似然比),以向譯碼器指示填充數據615具有高可信度。例如,軟譯碼包括以下步驟:從nvm中讀取校驗數據的軟比特與用戶數據單元的軟比特的組合;對校驗數據的軟比特、用戶數據單元的軟比特和填充數據軟比特的組合進行軟譯碼。
在步驟s6500中,從譯碼結果中移除填充數據,得到用戶數據單元。用戶數據單元位于譯碼結果的預定位置,可從譯碼結果的預定位置獲取用戶數據單元。
圖7示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整 方法的示意圖。根據圖7,在nvm物理頁中存儲兩個ecc塊。所屬領域技術人員將意識到,在nvm物理頁中還可存儲其他數量的ecc塊。
圖8a示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的流程圖。
如圖8a所示,錯誤校正碼幀長調整方法包括以下步驟:
步驟s8100:刪除第一ecc塊的第一填充數據的部分,刪除第二ecc塊的第二填充數據的部分,使得修改后的第一ecc塊與第二ecc塊組合能夠被nvm的物理頁容納;
步驟s8200:將修改后的第一ecc塊與第二ecc塊寫入nvm的物理頁。
結合圖7和圖8a所示,要將ecc塊720與ecc塊722寫入同一nvm物理頁。ecc塊720包括校驗數據、用戶數據單元與填充數據710,ecc塊722包括校驗數據、用戶數據單元與填充數據712。ecc塊710與ecc塊722組合后的大小超過了nvm物理頁的大小,因而通過根據本發(fā)明的實施例來調整ecc塊720與ecc塊722的大小,來滿足nvm物理頁大小的要求。
在步驟s8100中,將ecc塊720的填充數據710截斷,得到填充數據715,以及將將ecc塊722的填充數據712截斷,得到填充數據717。使得修改后的ecc塊725與ecc塊727的總長度等于或小于要寫入nvm的物理頁。
可選的,在截斷填充數據之前,判定ecc塊720和ecc塊722的總長度是否大于nvm的物理頁大小,若ecc塊720和ecc722塊的長度大于nvm的物理頁大小,再執(zhí)行對填充數據710與填充數據712的截斷,使得修改后的ecc725塊和ecc塊727能夠寫入nvm的物理頁??梢岳斫獾氖牵诖蠖鄶档那闆r下,事先已知ecc720塊和ecc722塊的長度,以及nvm的物理頁大小,并確定是否需要截斷填充數據,以及截斷后填充數據的大小,從而無需對ecc塊720與ecc塊722的長度和nvm的物理頁大小進行判定。
可以理解的是,在圖7的例子中,ecc塊的數量為2,在進一步的實施例中,ecc塊的數量可以大于2,從而在nvm的物理頁中寫入多個(大于2)ecc塊,這就需要將每個ecc塊中的填充數據截取部分數據,使得nvm的物理頁可以容納多個ecc塊。
依然可以理解的,從填充數據710中截斷數據的長度與從填充數據712中截斷數據的長度可以不同。ecc塊720與ecc塊722的長度也可以不同。ecc塊可以具有例如4種,每種ecc塊具有預定的長度與填充數據大小。
圖8b示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的流程圖。圖8b所示的流程圖僅僅是示意性的,其中記載的步驟可以按照不同順序執(zhí)行、并行執(zhí)行、省略和/或增加其他步驟。
如圖8b所示,錯誤校正碼幀長調整方法包括以下步驟:
步驟s8040:接收要寫入nvm的第一用戶數據單元;
步驟s8050:向第一用戶數據單元添加第一填充數據,使得第一用戶數據單元與第一填充數據的組合滿足ecc編碼器對輸入數據大小的要求;
步驟s8060:對第一用戶數據單元與第一填充數據的組合計算第一校驗數據,得到第一ecc塊;
步驟s8070:接收要寫入nvm的第二用戶數據單元;
步驟s8080:向第二用戶數據單元添加第二填充數據,使得第二用戶數據單元與第二填充數據的組合滿足ecc編碼器對輸入數據大小的要求;
步驟s8090:對第二用戶數據單元與第二填充數據的組合計算第二校驗數據,得到第二ecc塊;
步驟s8100:刪除第一ecc塊的第一填充數據的部分,刪除第二ecc塊的第二填充數據的部分,使得修改后的第一ecc塊與第二ecc塊組合能夠被nvm的物理頁容納;
步驟s8200:將修改后的第一ecc塊與第二ecc塊寫入nvm的物理頁。
進一步的實施例中,添加填充數據的長度的方式可以有多種,例如,ecc編碼器要求信息數據長度為k字節(jié)倍數,則第一用戶數據單元與第一填充數據的組合的長度為k*n1(n1為自然數),而第二用戶數據單元與第二填充數據的組合的長度為k*n2(n2為自然數)。n1與n2可以相同也可以不同。
圖9示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的流程圖。圖9所示的流程圖僅僅是示意性的,其中記載的步驟可以按照不同順序執(zhí)行、并行執(zhí)行、省略和/或增加其他步驟。圖10示出了根據本發(fā)明的又一個實施方式的錯誤校正碼幀長調整方法的示意圖。
參看圖9與圖10,錯誤校正碼幀長調整方法包括以下步驟:
步驟s9040:接收要寫入nvm的第一用戶數據單元(1030);
步驟s9050:向第一用戶數據單元(1030)添加第一填充數據(1010),使得第一用戶數據單元(1030)與第一填充數據(1010)的組合滿足ecc編碼器對輸入數據大小的要求;
步驟s9060:對第一用戶數據單元(1030)與第一填充數據(1010)的組合計算第一校驗數據(1040);
步驟s9070:接收要寫入nvm的第二用戶數據單元(1032);
步驟s9080:向第二用戶數據單元(1032)添加第二填充數據(1012),使得第二用戶數據單元(1032)與第二填充數據(1012)的組合滿足ecc編碼器對輸入數據大小的要求;
步驟s9090:對第二用戶數據單元(1032)與第二填充數據(1012)的組合計算第二校驗數據(1042);
步驟s9100:確定第一填充數據(1010)的修改后長度與第二填充數據(1012)的修改后長度,使得包括第一用戶數據單元(1030)、第一校驗數據(1040)與第三填充數據(1015)的修改后ecc塊(1025)與包括第二用戶數據單元(1032)、第二校驗數據(1042)與第四填充數據(1017)的修改后ecc塊(1027)組合能夠被nvm的一個物理頁容納。根據第一填充數據(1010)的修改后長度生成第三 填充數據(1015),以及根據第二填充數據(1012)的修改后長度生成第四填充數據(1017)。
作為舉例,使用預定數據、或者使用結果可重復生成的預定隨機數生成方法和/或隨機數種子生成第一填充數據(1010)與第二填充數據(1012)。而對第三填充數據(1015)與第四填充數據(1017)沒有重復生成的需要。優(yōu)選地,根據nvm對寫入數據的隨機化要求而生成第三填充數據(1015)與第四填充數據(1017)。在從nvm物理頁中讀出ecc塊時,無需讀出第三填充數據(1015)與第四填充數據(1017),而是重新生成第一填充數據(1010)與第二填充數據(1012)來用于解碼用戶數據單元。
步驟s9200:生成修改后的第一ecc塊(1025)與修改后的第二ecc塊(1027);以及
步驟s9300:將修改后的第一ecc(1025)塊與第二ecc塊(1027)寫入nvm的物理頁。
應該理解,框圖和流程圖的每個框以及框圖和流程圖的框的組合可以分別由包括計算機程序指令的各種裝置來實施。這些計算機程序指令可以加載到通用計算機、專用計算機或其他可編程數據控制設備上以產生機器,從而在計算機或其他可編程數據控制設備上執(zhí)行的指令創(chuàng)建了用于實現一個或多個流程圖框中指定的功能的裝置。
這些計算機程序指令還可以存儲在可以引導計算機或其他可編程數據控制設備的計算機可讀存儲器中從而以特定方式起作用,從而能夠利用存儲在計算機可讀存儲器中的指令來制造包括用于實現一個或多個流程圖框中所指定功能的計算機可讀指令的制品。計算機程序指令還可以加載到計算機或其他可編程數據控制設備上以使得在計算機或其他可編程數據控制設備上執(zhí)行一系列的操作步驟,從而產生計算機實現的過程,進而在計算機或其他可編程數據控制設備上執(zhí)行的指令提供了用于實現一個或多個流程圖框中所指定功能的步驟。
因而,框圖和流程圖的框支持用于執(zhí)行指定功能的裝置的組合、用于執(zhí)行指定功能的步驟的組合和用于執(zhí)行指定功能的程序指令裝置的 組合。還應該理解,框圖和流程圖的每個框以及框圖和流程圖的框的組合可以由執(zhí)行指定功能或步驟的、基于硬件的專用計算機系統(tǒng)實現,或由專用硬件和計算機指令的組合實現。
上述的不同塊、操作以及技術的至少一部分可以被執(zhí)行,通過使用硬件,控制設備執(zhí)行固件指令,控制設備執(zhí)行軟件指令,或者及其任意組合。當采用執(zhí)行固件以及軟件指令的控制設備執(zhí)行時,軟件或固件指令可以被存儲在任意計算機可讀存儲介質中,例如磁盤,光盤或者其他存儲介質,在ram或者rom或者flash存儲器,控制設備,硬盤,光盤,磁盤等等。同樣地,軟件和固件指令可以被傳輸到用戶或者系統(tǒng),通過任意已知的或者期望的傳輸方式包括,例如,在計算機可讀盤或者其他便攜式計算機存儲機制或者通過通信媒介。通信媒介典型地具體化計算機可讀指令,數據結構,序模塊或者在已調制數據信號中的其它數據例如載波或者其他傳輸機制。通過示例,并非限制,通信介質包括有線介質例如有線網絡或者單線連接,以及無線媒介,例如聲、無線頻率,紅外以及其它無線介質。從而,軟件和固件指令可以被傳輸給用戶或者系統(tǒng),通過通信信道,例如電話線,dsl線,電纜電視線,光纖線纜,無線信道,因特網,等等(通過便攜式存儲介質提供這樣的軟件,其被看作是相同的或者可互換的)。軟件或者固件指令可以包括機器可讀指令,這些可讀指令在由控制設備執(zhí)行時,導致控制設備執(zhí)行不同動作。
當在硬件中執(zhí)行時,硬件可以包括一個或多個離散組件,集成電路,應用的集成電路(asic),等等。
需要理解的是,本發(fā)明可以以純軟件、純硬件、固件以及上述的各種組合來實現。硬件例如可以是控制設備、專用集成電路、大規(guī)模集成電路等等。
雖然當前發(fā)明參考的示例被描述,其只是為了解釋的目的而不是對本發(fā)明的限制,對實施方式的改變,增加和/或刪除可以被做出而不脫離本發(fā)明的范圍。
這些實施方式所涉及的、從上面描述和相關聯的附圖中呈現的教導獲益的領域中的技術人員將認識到這里記載的本發(fā)明的很多修改和其 他實施方式。因此,應該理解,本發(fā)明不限于公開的具體實施方式,旨在將修改和其他實施方式包括在所附權利要求書的范圍內。盡管在這里采用了特定的術語,但是僅在一般意義和描述意義上使用它們并且不是為了限制的目的而使用。