?

一種基于flash 的硬件ECC 設計原理及實現

2023-12-28 02:51段曦冉
微處理機 2023年6期
關鍵詞:校驗碼校驗原理

段曦冉

(中國電子科技集團公司第四十七研究所,沈陽 110000)

1 引 言

隨著芯片技術的進步,對flash 的容量要求也在快速增加。但由于工藝的局限性和復雜性,往往越大容量的flash 越容易出現位翻轉問題。為提高系統可靠性,盡可能避免數據錯誤的發生,不僅要提高工藝可靠性,也要對數據進行校驗。針對這種情況,需要在flash 控制器中加入ECC(Error Checking and Correction)校驗糾正設計。傳統的校驗方法有奇偶校驗、循環冗余校驗(CRC)和漢明校驗。奇偶校驗是最常見的校驗方法之一,其原理是在數據末尾加上1 位校驗位。這種算法僅需1 位校驗碼就可以檢測出1 位數據出錯或奇數個位出錯。CRC 校驗是通過模2(mod 2)運算,其特征是信息字段和校驗字段可以任意選定長度。這種算法優點是錯誤檢測能力很強。漢明校驗是在有效信息位中加入校驗位形成漢明碼。漢明碼編譯簡單,不僅能校驗數據,還能定位數據錯誤位置,因此基于漢明碼的ECC 技術被廣泛使用[1-2]。在此對flash 控制器中錯誤檢測糾正的設計原理和實現過程展開研究。

2 ECC 工作原理

對于flash 讀數據出現錯誤的情況,1 位錯誤的處理措施是產生單錯誤中斷標志、糾正1 位錯誤并記錄錯誤地址;多位錯誤的處理措施是產生多錯誤中斷標志并記錄錯誤地址。ECC 工作原理的簡單之處在于,在使用時一定會檢測并糾正1 位錯誤,一定會檢測到2 位錯誤。

基于漢明碼的ECC 校驗由奇偶校驗發展而來,改進了以往校驗只能檢測出錯誤而無法糾正的弊端。其工作原理為在數據后加入校驗碼,當1 位數據發生翻轉時,會發生半數校驗碼計算值不一致。通過對不一致校驗碼進行比較,可以確定具體錯誤比特位,進而糾正數據。當2 位發生翻轉時,會發生校驗碼計算值不一致,只可以確定具體地址錯誤,無法判斷具體比特位。當多位發生翻轉時,且校驗碼計算值不一致時,只可以確定具體地址錯誤,無法判斷具體比特位。多位發生翻轉時校驗碼計算值可能不變,但是概率極低、基本不會發生。

在此設計的ECC 是基于144 位flash,以128bit數據為單位計算校驗碼,將128bit 數據分為16 個字節,相應的校驗位有14 位。在flash 寫入數據時,同時寫入校驗碼,讀取數據后就可進行校驗碼比較。當校驗碼不一致時便可判定數據錯誤,此時判斷數據錯誤是1 位錯誤或是多位錯誤。1 位錯誤產生中斷、記錄地址并在糾正錯誤后輸出正確數據,多位錯誤數據產生中斷、記錄地址輸出錯誤數據。具體流程參考ECC 校驗流程圖,如圖1 所示。

圖1 ECC 校驗流程圖

為直觀描述校驗碼計算過程,將128bit 數據分為16 個字節并排列為計算矩,共計8 列16 行數據。ECC 校驗碼計算如表1 所示。

表1 ECC 校驗碼計算表

相應的ECC 校驗碼計算為一系列的異或操作,算式如下(Cn代表n 列數據,Rn代表n 行數據):

計算后將數據位和校驗位存儲在flash 中,讀出后根據數據位重新計算校驗碼比較。

3 ECC 設計與實現

基于設計和實際的硬件情況,ECC 整體上由三個模塊組成,即:ECC 校驗碼計算模塊、ECC 校驗糾正模塊和ECC 寄存器模塊。其中,ECC 校驗碼計算模塊在寫flash 時起作用,ECC 校驗糾正模塊在讀flash 時起作用,ECC 寄存器模塊則用于存儲ECC標志位和flash 錯誤地址。所設計的ECC 的結構框圖如圖2 所示。

圖2 ECC 結構框圖

ECC_en 是ECC 寄存器中ECC 使能位,可以由系統總線控制。信號data_e 為數據錯誤標志。ADDR為flash 地址。

ECC 校驗碼設計便于實現。此處給出部分flash控制器ECC 模塊的verilogHDL 的RTL 級實現。flash控制器的ECC 校驗碼計算模塊設計采用分半異或,同時計算14 次,得出ECC 校驗碼。校驗碼計算過程如下述代碼[3-8]:

在ECC 糾正模塊設計中校驗碼計算方法與校驗碼計算模塊計算方法相同,增加了1 位錯誤糾正功能,其糾正原理如表2 所示(以正確數據為144'h9 995_0000_0014_0000_0013_0000_0012_0000_0011,錯誤數據為144'h9995_0000_0014_0000_0013_0000_0002_0000_0011 為例)。

表2 糾錯原理表

對比表1 的ECC 校驗碼計算表,便可以清楚地看出錯誤位位數為bit36,將該錯誤位取反即可得出正確數據。

對于2 位及2 位以上錯誤,目前還沒有方法進行糾正,但本設計可以檢測大部分的數據錯誤情況并記錄錯誤數據存放地址。

4 功能仿真

在ECC 模塊設計完成后,將其與其他IP 進行整合,并掛接到Cortex-M4 為核心處理器的一款MCU 設計中,搭建仿真驗證平臺進行功能驗證以及FPGA 驗證。仿真結果如下:

(1) 寫數據

使用總線寫flash,使能ECC,對flash 寫操作進行功能仿真,仿真結果如圖3 表示(以正確數據為144'h9995_0000_0014_0000_0013_0000_0012_0000_0011,錯誤數據為144'h9995_0000_0014_0000_001 3_0000_0002_0000_0011 為例)。

圖3 校驗碼計算

(2) 讀數據1 位錯誤

使用總線讀flash,使能ECC,對讀flash 模式進行功能仿真,強制翻轉1 位數據,仿真結果如圖4 表示(以正確數據為144'h9995_0000_0014_0000_0013_0000_0012_0000_0011,錯誤數據為144'h9995_000 0_0014_0000_0013_0000_0002_0000_0011 為例)。

圖4 讀數據1 位錯誤

在仿真中,強制將第36 位置0,使flash 輸出結果錯1 位。32'h810_c040~32'h810_c04C 地址為數據128'h 0000_0014_0000_0013_0000_0012_0000_0011地址,所以在系統總線中32'h810_c044 為32'h0000_0012 地址。

5 結束語

通過對設計的研究與分析,完成了基于144 位flash 的硬件ECC 設計,并將設計集成在flash 控制器中。設計采用VerilogHDL 硬件描述語言設計并實現了ECC 校驗。該設計方法簡單且易于實現,可1位錯誤檢測糾正、2 位錯誤檢測并記錄錯誤地址。記錄錯誤地址也可以避免其繼續使用,在芯片實際應用時可以優化flash 壞區管理策略。

猜你喜歡
校驗碼校驗原理
了解咳嗽祛痰原理,有效維護健康
平均場正倒向隨機控制系統的最大值原理
爐溫均勻性校驗在鑄鍛企業的應用
化學反應原理全解讀
基于Excel實現書號校驗碼的驗證
通信原理教學改革探索
基于FPGA的循環冗余校驗碼設計
身份證號碼中的數學
大型電動機高阻抗差動保護穩定校驗研究
基于加窗插值FFT的PMU校驗方法
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合