專利名稱:一種自動糾錯系統(tǒng)及方法
技術領域:
本發(fā)明涉及計算機領域,特別是涉及一種自動糾錯系統(tǒng)及方法。
背景技術:
隨著數(shù)字科技的發(fā)展,使得日常生活的數(shù)據(jù)慢慢轉變成為以數(shù)字數(shù)據(jù)的方 式進行存儲,并可通過各種不同的接口進行數(shù)字數(shù)據(jù)的備份與傳輸,從而有利 于提高數(shù)據(jù)存儲的便利性和正確性。然而,在進行數(shù)據(jù)傳輸或存儲的過程中, 難免會出現(xiàn)數(shù)據(jù)傳輸或存儲錯誤的情形,目前普遍是利用錯誤檢査修正碼
(Error Checking and Correcting, ECC)對傳輸或存儲的數(shù)據(jù)進行檢測及 糾正,以檢査和糾正數(shù)據(jù)在傳輸或存儲過程中是否有出現(xiàn)錯誤的情形。
圖1是現(xiàn)有技術中的一種ECC糾錯系統(tǒng)的結構示意圖,通過它可以說明現(xiàn) 有技術中ECC算法的運算原理。這種ECC糾錯系統(tǒng)以預先確定的具有固定位數(shù) 的數(shù)據(jù)包(本實施例中為64位)為工作對象。來自原始數(shù)據(jù)包的被選位被發(fā) 送到多個奇偶校驗樹(本實施例中為8個),用于計算不同數(shù)據(jù)子集的奇偶性。 每個數(shù)據(jù)子集大約由數(shù)據(jù)包數(shù)據(jù)位的一半組成,而且每個子集當中的數(shù)據(jù)都與 其他子集當中的數(shù)據(jù)存在部分重疊。最后得出來的奇偶校驗位(也稱為糾錯碼 位)將與原始數(shù)據(jù)一起被傳輸或存儲。由于采用這樣的形勢來選擇數(shù)據(jù)子集, 因而當在數(shù)據(jù)傳輸過程中有錯誤被引入到原始數(shù)據(jù)中時可以通過比較由同樣 奇偶計算方法計算得到的奇偶校驗位與初始糾錯碼位來識別錯誤位。盡管此種 ECC糾錯系統(tǒng)能夠為數(shù)據(jù)完整性提供優(yōu)良的保護,但是奇偶計算需要復雜的布 線,從而導致ECC糾錯系統(tǒng)不僅速度慢而且十分復雜;另外,如果數(shù)據(jù)包的大 小發(fā)生改變,就需要重新設計ECC糾錯系統(tǒng),而且當數(shù)據(jù)包大小增加時,ECC 糾錯系統(tǒng)的運算速度往往會產(chǎn)生明顯下降。
另外,目前一些發(fā)明專利大多是通過不同的方式實現(xiàn)產(chǎn)生ECC的功能,但 在糾正錯誤位的問題上仍然需要人工進行修改,不能實現(xiàn)自動糾正讀寫錯誤功
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種自動糾錯系統(tǒng)及方法,以實現(xiàn)自動糾正存儲介 質中的讀寫錯誤。
為實現(xiàn)本發(fā)明的目的而提供的一種自動糾錯系統(tǒng),設置在讀寫請求總線和 結果輸出總線之間,用于實現(xiàn)在產(chǎn)生錯誤檢査修正碼功能的同時自動糾正讀寫 錯誤的功能,所述自動糾錯系統(tǒng)包括存儲介質輸入模塊、存儲介質存儲模塊、 錯誤檢査修正碼產(chǎn)生模塊以及存儲介質輸出模塊,其中
所述存儲介質輸入模塊,用于向存儲介質輸入數(shù)據(jù),和接受錯誤檢查修正 碼糾錯請求;
所述錯誤檢查修正碼產(chǎn)生模塊,用于根據(jù)輸入數(shù)據(jù)或讀出數(shù)據(jù)產(chǎn)生錯誤檢 査修正碼;
所述存儲介質存儲模塊,用于存儲輸入數(shù)據(jù)以及根據(jù)輸入數(shù)據(jù)編碼產(chǎn)生的 錯誤檢查修正碼;
所述存儲介質輸出模塊,用于根據(jù)輸入數(shù)據(jù)產(chǎn)生的錯誤檢查修正碼和讀出 數(shù)據(jù)產(chǎn)生的錯誤檢査修正碼進行比較,査找并糾正錯誤數(shù)據(jù)位;并將糾錯后的 數(shù)據(jù)和錯誤檢査修正碼糾錯請求發(fā)送給所述存儲介質輸入模塊,同時發(fā)出重新 讀出數(shù)據(jù)請求。
所述存儲介質輸出模塊,包括錯誤檢査修正碼對比模塊、錯誤檢查修正 碼糾錯模塊和請求發(fā)送模塊,其中
所述錯誤檢査修正碼對比模塊,用于根據(jù)輸入數(shù)據(jù)產(chǎn)生的錯誤檢査修正碼 和讀出數(shù)據(jù)產(chǎn)生的錯誤檢査修正碼進行比較,査找錯誤數(shù)據(jù)位;
所述錯誤檢査修正碼糾錯模塊,用于糾正錯誤數(shù)據(jù)位;
所述請求發(fā)送模塊,用于將糾錯后的數(shù)據(jù)和錯誤檢査修正碼糾錯請求發(fā)送 給所述存儲介質輸入模塊,同時發(fā)出重新讀出數(shù)據(jù)請求。
為實現(xiàn)本發(fā)明的目的還提供一種自動糾錯方法,用于自動糾正存儲介質中 的讀寫錯誤,所述方法包括下列步驟
步驟ioo.根據(jù)輸入數(shù)據(jù)進行錯誤檢査修正碼編碼,并將所述根據(jù)輸入數(shù)
據(jù)進行編碼得到的錯誤檢査修正碼和所述輸入數(shù)據(jù)一并存儲;
步驟200.根據(jù)讀出的所述輸入數(shù)據(jù)進行錯誤檢查修正碼編碼,同時將所述根據(jù)輸入數(shù)據(jù)進行編碼得到的錯誤檢査修正碼與所述根據(jù)讀出數(shù)據(jù)進行編 碼得到的錯誤檢查修正碼進行對比,查找錯誤數(shù)據(jù)位;
步驟300.根據(jù)所述錯誤數(shù)據(jù)位對讀出數(shù)據(jù)進行糾正,并將糾正后的數(shù)據(jù)
輸入存儲介質,同時將包括所述錯誤數(shù)據(jù)位的信息發(fā)送出去并發(fā)出重新讀出數(shù) 據(jù)請求。
所述步驟ioo,包括下列步驟-
步驟110.根據(jù)輸入數(shù)據(jù)進行錯誤檢査修正碼編碼;
步驟120.將所述錯誤檢査修正碼和輸入數(shù)據(jù)一并存儲。
所述步驟IIO,包括下列步驟
步驟111.根據(jù)輸入數(shù)據(jù),對標簽信息進行錯誤檢查修正碼編碼; 步驟112.根據(jù)輸入數(shù)據(jù),對數(shù)據(jù)信息進行錯誤檢査修正碼編碼。 所述對標簽信息進行錯誤檢查修正碼編碼,是根據(jù)標簽信息的位數(shù),對標
簽信息高位加n位零,合并為64位數(shù)據(jù)進行編碼。
所述步驟112,包括下列步驟
步驟112a.將N位輸入數(shù)據(jù)分成M (M=N/64)個64位數(shù)據(jù)data—in;
步驟112b.為第m(m二l )個64位數(shù)據(jù)data—in,產(chǎn)生8個64位密鎖Cx, CO, Cl, C2, C4, C8, C16, C32;
步驟112c.將所述8個64位密鎖Cx, CO, Cl, C2, C4, C8, C16, C32分 別與所述64位數(shù)據(jù)進行運算,得到8位錯誤檢查修正碼
data_ecc
= " (data—in & Cx)
data—ecc[l]二 ~ (~(data—in & CO))
data一ecc[2]二 ' (data—in & Cl)
data_ecc[3]= "(data—in & C2)
data_ecc[4]= ^(data—in & C4)
data_ecc[5]= ("(data—in & C8))
data—ecc[6]二 "(data—in & C16)
data_ecc[7]= "(data—in & C32)
步驟112d.令m=m+l,判斷m是否小于或等于M,若是則返回步驟112b; 否則結束錯誤檢查修正碼編碼。 所述步驟200,包括下列步驟步驟210.根據(jù)讀出的所述輸入數(shù)據(jù)進行錯誤檢査修正碼編碼;
步驟220.將所述根據(jù)輸入數(shù)據(jù)進行編碼得到的錯誤檢査修正碼與所述根
據(jù)讀出的所述輸入數(shù)據(jù)進行編碼得到的錯誤檢查修正碼進行對比,査找錯誤數(shù)據(jù)位。
所述步驟210,包括下列步驟-
步驟211.根據(jù)讀出的所述輸入數(shù)據(jù),對標簽信息進行錯誤檢査修正碼編
碼;
步驟212.根據(jù)讀出的所述輸入數(shù)據(jù),對數(shù)據(jù)信息進行錯誤檢查修正碼編碼。
所述步驟220,包括下列步驟
步驟221.對比所述輸入數(shù)據(jù)的標簽信息的錯誤檢査修正碼與讀出數(shù)據(jù)的 標簽信息的錯誤檢查修正碼,查找錯誤標簽信息位;
步驟222.對比所述輸入數(shù)據(jù)的數(shù)據(jù)信息的錯誤檢査修正碼與讀出數(shù)據(jù)的 數(shù)據(jù)信息的錯誤檢査修正碼,查找錯誤數(shù)據(jù)信息位。
所述步驟300,包括下列步驟
步驟310.根據(jù)所述錯誤數(shù)據(jù)位對讀出的所述輸入數(shù)據(jù)進行糾正,對錯誤 數(shù)據(jù)位取反;
步驟320.發(fā)送錯誤檢査修正碼糾錯請求,并將糾正后的數(shù)據(jù)重新輸入存 儲介質;
步驟330.將包括所述錯誤數(shù)據(jù)位的信息發(fā)送出去并發(fā)出重新讀出數(shù)據(jù)請求。
所述步驟330,包括下列步驟
步驟331.將錯誤數(shù)據(jù)位的信息組成緩存內(nèi)部錯誤檢査修正碼校驗結果總 線發(fā)送出去;
步驟332.將緩存訪問結果輸出總線中的scacheres—ecc信息發(fā)送出去, 報告出現(xiàn)錯誤檢查修正碼錯誤,提醒進行重新讀出數(shù)據(jù)。 本發(fā)明的有益效果在于
1. 本發(fā)明的自動糾錯系統(tǒng)布線簡單,節(jié)省原材料,運算速度快;
2. 本發(fā)明的自動糾錯系統(tǒng)能夠一次檢測出多位讀寫錯誤,提高糾錯效率;
3. 本發(fā)明的自動糾錯系統(tǒng)不需要人工進行修改,能夠實現(xiàn)自動糾正讀寫錯
9誤功能。
圖1是現(xiàn)有技術中的一種ECC糾錯系統(tǒng)的結構示意圖2是本發(fā)明一種自動糾錯系統(tǒng)的結構示意圖3是本發(fā)明一種自動糾錯方法的流程圖4是本發(fā)明中對數(shù)據(jù)進行ECC編碼并存儲的流程圖5是本發(fā)明中對比數(shù)據(jù)輸入前后的ECC進行錯誤査找的流程圖6是本發(fā)明中根據(jù)錯誤信息自動糾正讀寫錯誤的方法的流程圖。
具體實施例方式
為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實 施例,對本發(fā)明的一種自動糾錯系統(tǒng)及方法進行進一步詳細說明。應當理解, 此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明的一種自動糾錯系統(tǒng)及方法,是通過自動對寫入Cache的數(shù)據(jù)產(chǎn)生 一份錯誤檢査修正碼(Error Checking and Correcting, ECC)并一起存入 Cache中;在讀出數(shù)據(jù)時再次對數(shù)據(jù)產(chǎn)生新的ECC,并將新的ECC與原ECC進 行比較,得出錯誤位信息;自動糾正錯誤位并通過總線發(fā)送錯誤信息,并讓系 統(tǒng)重新讀取糾錯后的信息,同時將糾錯后的數(shù)據(jù)存入Cache實現(xiàn)自動糾正存儲 介質讀寫錯誤。
下面結合上述目標詳細介紹本發(fā)明一種自動糾錯系統(tǒng)。圖2是本發(fā)明一種 自動糾錯系統(tǒng)的結構示意圖,如圖2所示,所述自動糾錯系統(tǒng)位于讀寫請求總 線和結果輸出總線之間,包括存儲介質輸入模塊l、 ECC產(chǎn)生模塊2、存儲 介質存儲模塊3以及存儲介質輸出模塊4,其中
所述存儲介質輸入模塊1,用于向存儲介質輸入數(shù)據(jù)和接受ECC糾錯請求;
所述存儲介質輸入模塊1,根據(jù)從讀緩存請求總線(Scacheref)和寫緩 存請求總線(Scachewrite)接收到的數(shù)據(jù),向存儲介質輸入數(shù)據(jù);同時接收 通過緩存內(nèi)部ECC校驗結果總線(Scorrect)傳輸?shù)腅CC糾錯請求。
所述ECC產(chǎn)生模塊2,用于根據(jù)輸入數(shù)據(jù)或讀出數(shù)據(jù)產(chǎn)生ECC;
較佳地,作為一種可實施方式,對64位的輸入數(shù)據(jù)產(chǎn)生ECC。所述存儲介質存儲模塊3,用于存儲輸入數(shù)據(jù)以及根據(jù)輸入數(shù)據(jù)編碼產(chǎn)生
的ECC;
所述存儲介質存儲模塊3,接收通過緩存內(nèi)部存儲器輸入總線傳輸?shù)臄?shù)據(jù) 并存儲。
所述存儲介質輸出模塊4,用于根據(jù)輸入數(shù)據(jù)產(chǎn)生的ECC和讀出數(shù)據(jù)產(chǎn)生 的ECC進行比較,査找并糾正錯誤數(shù)據(jù)位;并將糾錯后的數(shù)據(jù)和ECC糾錯請求 發(fā)送給所述存儲介質輸入模塊1 ,同時發(fā)出重新讀出數(shù)據(jù)請求。
所述存儲介質輸出模塊4,對通過緩存內(nèi)部存儲器輸出總線(Sramout) 傳輸?shù)臄?shù)據(jù)進行處理,對于沒有錯誤的數(shù)據(jù),通過緩存訪問結果輸出總線和緩 存對外寫數(shù)據(jù)總線輸出數(shù)據(jù);對于有錯誤的數(shù)據(jù),通過緩存內(nèi)部ECC校驗結果 總線(Scorrect)發(fā)出包括重新讀出數(shù)據(jù)請求的ECC糾錯請求。
所述存儲介質輸出模塊4,包括ECC對比模塊41、 ECC糾錯模塊42和請 求發(fā)送模塊43,其中
所述ECC對比模塊41,用于根據(jù)輸入數(shù)據(jù)產(chǎn)生的ECC和讀出數(shù)據(jù)產(chǎn)生的 ECC進行比較,查找錯誤數(shù)據(jù)位;
所述ECC糾錯模塊42,用于糾正所述錯誤數(shù)據(jù)位;
所述請求發(fā)送模塊43,用于將糾錯后的數(shù)據(jù)和ECC糾錯請求發(fā)送給所述 存儲介質輸入模塊,同時發(fā)出重新讀出數(shù)據(jù)請求。
所述重新讀出數(shù)據(jù)請求,是通過緩存內(nèi)部ECC校驗結果總線(Scorrect) 發(fā)到存儲介質輸入模塊。
相應于本發(fā)明的一種自動糾錯系統(tǒng),本發(fā)明還提供一種自動糾錯方法,用 于實現(xiàn)在產(chǎn)生錯誤檢査修正碼功能的同時自動糾正讀寫錯誤的功能。
圖3是本發(fā)明一種自動糾錯方法的流程圖,如圖3所示,所述方法包括下 列步驟
步驟100.根據(jù)輸入數(shù)據(jù)進行ECC編碼,并將所述根據(jù)輸入數(shù)據(jù)進行編碼 得到的ECC和所述輸入數(shù)據(jù)一并存儲;
圖4是本發(fā)明中對數(shù)據(jù)進行ECC編碼并存儲的流程圖,如圖4所示,所述 步驟IOO,包括下列步驟
步驟110.根據(jù)輸入數(shù)據(jù)進行ECC編碼;
所述ECC編碼的方法,是現(xiàn)有技術中一種公開的方法,是根據(jù)需要編碼的
ii位數(shù)不同,相應密鎖有不同。在此不再一一贅述。
步驟111.根據(jù)輸入數(shù)據(jù),對標簽信息進行ECC編碼;
對標簽信息進行ECC編碼的方法是根據(jù)tag信息的位數(shù),對tag信息高 位加n位零,合并為64位數(shù)據(jù)進行編碼。
作為一種可實施方式,對于一個需要存儲的cache行,其中包括256位數(shù) 據(jù)信息和40位標簽(tag)信息。
針對40位標簽(tag)信息進行ECC編碼,得到tag—ecc[7:0]是(24' b0, tag[39:0]〉的ECC,其中{24, b0, tag[39:0])表示高24位為0,低40位為tag 信息的64位數(shù)據(jù)。
步驟112.根據(jù)輸入數(shù)據(jù),對數(shù)據(jù)信息進行ECC編碼;
步驟112a,將N位輸入數(shù)據(jù)分成M (M=N/64)個64位數(shù)據(jù)data_in;
步驟112b.為第m(m=l )個64位數(shù)據(jù)data_in,產(chǎn)生8個64位密鎖Cx, CO, Cl, C2, C4, C8, C16, C32;
所述64位密鎖對相應的ECC來說是固定的,查詢相應ECC算法即能得到, 是一種現(xiàn)有技術,在此不再一一贅述。
步驟112c.將所述8個64位密鎖Cx, CO, Cl, C2, C4, C8, C16, C32分 別與所述64位數(shù)據(jù)進行運算,得到8位ECC: data—ecc[O]、 data—ecc[l]、 data—ecc[2] 、 data一ecc[3] 、 data一ecc[4] 、 data_ecc[5]、 data一ecc[6]、 data_ecc[7],所述64位數(shù)據(jù)data_in、64位密鎖與ECC的對應關系如下(其 中,"&"為二元邏輯與操作;"'"為異或操作,當只有一個操作數(shù)的時候, "一"表示對這個數(shù)所有位,按位進行異或,當有兩個操作數(shù)的時候,"""表 示對兩個數(shù)之間相同的位進行異或;" "為邏輯非操作。)
data_ecc
= " (data—in & Cx)
data—ecc[l]= (T (data—in & CO))
data—ecc[2]= " (data—in & Cl)
data_ecc[3]= 一(data—in & C2)
data一ecc[4]二 ~(data—in & C4)
data_ecc[5]= ("(data—in & C8))
data_ecc[6]= "(data—in & C16)
data_ecc[7]= "(data—in & C32)作為一種可實施方式,根據(jù)上述實施例,針對256位數(shù)據(jù)信息進行ECC 編碼,將256位數(shù)據(jù)信息分成4個64位數(shù)據(jù)分別進行ECC編碼,得到32位 data—ecc信息,8位tag—ecc信息。data—ecc信息是寫入時對數(shù)據(jù)進行的ECC 編碼結果data—ecc[7:0]位是data[63:0]位的ECC, data_ecc[15:8]位是 data[127:64]位的ECC, data—ecc[23:16]位是data[191:128]位的ECC, data—ecc [31:24]位是data[255:192]位的ECC。
步驟112d.令HFm+l,判斷m是否小于或等于M,若是則返回步驟112b; 否則結束ECC編碼。
步驟120.將所述ECC和輸入數(shù)據(jù)一并存儲。
根據(jù)上述假設,將所述40位tag信息的8位ECC和40位tag信息,256
位數(shù)據(jù)信息的32位ECC和256位數(shù)據(jù)信息一起存儲到cache 。
步驟200.對讀出的所述輸入數(shù)據(jù)再次進行ECC編碼,同時將所述根據(jù)輸
入數(shù)據(jù)進行編碼得到的ECC與所述根據(jù)讀出數(shù)據(jù)進行編碼得到的ECC進行對
比,査找錯誤數(shù)據(jù)位;
讀取存儲的數(shù)據(jù),對于讀出的數(shù)據(jù)生成新的ECC,同時根據(jù)隨數(shù)據(jù)一起讀
出的舊ECC,進行對比,査找錯誤數(shù)據(jù)位。
圖5是本發(fā)明中對比數(shù)據(jù)輸入前后的ECC進行錯誤査找的流程圖,如圖5
所示,所述步驟200,包括下列步驟
步驟210.根據(jù)讀出的所述輸入數(shù)據(jù)進行ECC編碼;
步驟211.根據(jù)讀出的所述輸入數(shù)據(jù),對其標簽信息進行ECC編碼;
步驟212.根據(jù)讀出的所述輸入數(shù)據(jù),對其數(shù)據(jù)信息進行ECC編碼。
步驟210中所述ECC編碼方法與步驟110的編碼方法完全一致,在此不再
--贅述o
作為一種可實施方式,根據(jù)上述假設,對讀出的data, tag信息重新進行 編碼,產(chǎn)生data_chk, tag一chk信息,其中data—chk [7:0]位是data[63:0] 位的新的ECC, data—chk[15:8]位是data[127:64]位的新的ECC , data—chk[23:16]位是data[191:128]位的新的ECC, data_chk[31:24]位是 data[255:192]位的新的ECC; tag—chk[7:0]是{24, b0, tag[39:0]}的新的 ECC,其中{24, bO,tag[39:0])表示高24位為0,低40位為tag信息的64位
、jl i r~i數(shù)據(jù)。
13步驟220.將所述根據(jù)輸入數(shù)據(jù)進行編碼得到的ECC與所述根據(jù)讀出的所 述輸入數(shù)據(jù)進行編碼得到的ECC進行對比,査找錯誤數(shù)據(jù)位;
根據(jù)ECC算法,將新舊校驗碼進行異或操作,得到一個8位的值,這8 位的值根據(jù)ECC算法提供的表進行比較,如果是64種不同值中的一種,則表 示64位數(shù)據(jù)相應位出錯,如果是0,表示沒有錯誤,如果是其他,表示出現(xiàn) 了不可糾正的錯誤。此方法為現(xiàn)有技術,在此不再一一贅述。
步驟221.對比所述輸入數(shù)據(jù)的標簽信息的ECC與讀出數(shù)據(jù)的標簽信息的 ECC,査找錯誤標簽信息位;
步驟222.對比所述輸入數(shù)據(jù)的數(shù)據(jù)信息的ECC與讀出數(shù)據(jù)的數(shù)據(jù)信息的 ECC,查找錯誤數(shù)據(jù)信息位;
作為一種可實施方式,根據(jù)上述實施例,對輸入的data一ecc和data_chk、 tag—ecc和tag—chk信息,以及ECC校驗有效信息refvec—ecc, tag位有效信 息tag—valid,進行查錯。生成data—error, data—fatal, tag—error, tag_fatal 信息。具體過程如下
對于新舊校驗碼data—ecc[7:0]和data—chk[7:0],進行"""操作,得到 中間變量syndrome, syndrome = data—ecc data一chk, data一error二i syndrome; data一fatel二data—error && err—syndrome, 其中err—syndrome表示錯誤不可 糾正。
對于新舊校驗碼tag—ecc[7:0]和tag—chk[7.'0],進行"'"操作,得到中 間變量syndrome, syndrome = data—ecc data_chk, tag—error =| syndrome tag—fatal=tag_error && err—syndrome, 其中err—syndrome表示錯誤不可纟4 正。
步驟220中的對比方法,不同于現(xiàn)有技術中的奇偶檢驗法,它能夠一次檢 測出多位錯誤數(shù)據(jù)。
步驟300.根據(jù)所述錯誤數(shù)據(jù)位對讀出數(shù)據(jù)進行糾正,并將糾正后的數(shù)據(jù) 輸入存儲介質,同時將包括所述錯誤數(shù)據(jù)位的信息發(fā)送出去并發(fā)出重新讀出數(shù) 據(jù)請求。
作為一種可實施方式,對于64位數(shù)據(jù)輸入:data—in, 8位舊ECC: data—ecc, 8位新ECC: data_chk,產(chǎn)生64位糾正的數(shù)據(jù)輸出data—out,
圖6是本發(fā)明中根據(jù)錯誤信息自動糾正讀寫錯誤的方法的流程圖,如圖6
14所示,所述步驟300,包括下列步驟-
步驟310.根據(jù)所述錯誤數(shù)據(jù)位對讀出的所述輸入數(shù)據(jù)進行糾正,對錯誤 數(shù)據(jù)位取反;
在步驟220中,已經(jīng)査找到錯誤數(shù)據(jù)位后,對錯誤位糾錯采用機器糾錯, 糾錯后的正確數(shù)據(jù)的每一位,是根據(jù)這一位是否錯誤,來選擇是用數(shù)據(jù),還是 取反。
作為一種可實施方式,例如某一位原來數(shù)據(jù)是data[4],它的固有錯誤標 記是syndrome4 ,檢査得到的syndrome等于syndrome4,則正確數(shù)據(jù) new一data[4] = (syndrome 二二 syndrome4) 7 ! data [4] : data [4], 這個表達 式表示該位錯誤則取反,正確則取原值。
步驟320.發(fā)送ECC糾錯請求,將糾正后的數(shù)據(jù)重新輸入存儲介質; 發(fā)送ECC糾錯請求,將由二級緩存發(fā)出的scachewrite—allow信號(目的 是告訴上級模塊,二級緩存是否做好了準備接受寫數(shù)據(jù)請求)置為0,不再允 許外部的寫請求,而優(yōu)先將來自scorrect的正確的糾正信息通過sramin總線 (sramin總線是scache內(nèi)部的信號,作用是將寫入的信息送入存儲器中)寫 入存儲器。
作為一種可實施方式,當error為1時,如果ECC校驗有效(表示檢測到 ECC錯誤),并且tag—error或者data—error為1 (表示tag或者data有 錯,而非不可糾正錯誤),那么表示取出的數(shù)據(jù)有錯,需要進行糾正。cache 輸出模塊里用信號 scacheres一ecc = sramout一ecccheck & (tag—error | data—error)來向系統(tǒng)發(fā)出是否有ECC錯誤的信息。
步驟330.將包括所述錯誤數(shù)據(jù)位的信息發(fā)送出去并發(fā)出重新讀出數(shù)據(jù)請求。
所述步驟330,包括下列步驟
步驟331.將錯誤數(shù)據(jù)位的信息組成scorrect總線發(fā)送出去; 緩存內(nèi)部ECC校驗結果(scorrect)總線,表示如下 scorrect [O]二scorrect一valid; scorrect [2 1] =scorrect—scseti; scorrect[15:3]=scorrect—scindex; scorrect[16:16]=scorrect—wen;scorrect [56 17] =scorrect—tag', scorrect[312:57]=scorrect—data;
其中
scorrect—valid,表示是否需要進行ECC糾錯,置1表示需要進行ECC 糾錯;置O表示不需要進行ECC糾錯;
SCOrreCt_SCSeti,根據(jù)判斷出哪一組數(shù)據(jù)出錯得到,表示出錯數(shù)據(jù)組編
號;
scorrect_scindex,包含讀請求的索弓l信息;
所述索引信息的位數(shù)表示的是scache中索引塊的數(shù)量,不同的scache 可能定義的長度會有不同,這里13位表示2的13次方種映射可能,如果每個 索引塊大小是64個字節(jié),那么這個scache就是8k * 64B 二 512KB大小。
SCOrrect_wen,表示是否要將正確數(shù)據(jù)寫入存儲器,置1表示要將正確數(shù) 據(jù)寫入存儲器;置0表示不要將正確數(shù)據(jù)寫入存儲器;
對cache來說,讀出里面數(shù)據(jù)有很多種情況,如果是一個置換操作,讀的 目的是將舊的數(shù)據(jù)寫出去,寫到內(nèi)存中去,同時將新的數(shù)據(jù)寫入這個被置換的 位置。此時如果糾錯,需要將正確數(shù)據(jù)寫出去,而不是寫入cache,因為原來 位置已經(jīng)被新的數(shù)據(jù)代替了.這種情況下,正確數(shù)據(jù)重新在cache里走了一遍, 然后輸出,而不需要再寫入存儲器。
scorrect_tag,表示經(jīng)過校驗后得到的正確tag信息; scorrect—data,表示經(jīng)過校驗后得到的正確數(shù)據(jù)信息。 通過設置scorrect總線中的參數(shù),發(fā)出所述錯誤數(shù)據(jù)位的信息。 步驟332.將緩存訪問結果輸出(scacheres)總線(scacheres總線是 scache模塊的輸出信號,將讀取出來的數(shù)據(jù)和信息傳送出去)中的 scacheres—ecc信息發(fā)送出去,報告出現(xiàn)ECC錯誤,提醒進行重新讀出數(shù)據(jù)。 步驟330中,發(fā)出重新讀出數(shù)據(jù)請求,使得正確的數(shù)據(jù)被重新讀取,不必 人工進行查找再加以改動,實現(xiàn)了自動糾錯。 本發(fā)明的有益效果在于
1. 本發(fā)明的自動糾錯系統(tǒng)布線簡單,節(jié)省原材料,運算速度快;
2. 本發(fā)明的自動糾錯系統(tǒng)能夠一次檢測出多位讀寫錯誤,提高糾錯效率;
3. 本發(fā)明的自動糾錯系統(tǒng)不需要人工進行修改,能夠實現(xiàn)自動糾正讀寫錯誤功能。
通過結合附圖對本發(fā)明具體實施例的描述,本發(fā)明的其它方面及特征對本 領域的技術人員而言是顯而易見的。
以上對本發(fā)明的具體實施例進行了描述和說明,這些實施例應被認為其只 是示例性的,并不用于對本發(fā)明進行限制,本發(fā)明應根據(jù)所附的權利要求進行 解釋。
權利要求
1. 一種自動糾錯系統(tǒng),設置在讀寫請求總線和結果輸出總線之間,其特征在于,所述自動糾錯系統(tǒng)包括存儲介質輸入模塊、存儲介質存儲模塊、錯誤檢查修正碼產(chǎn)生模塊以及存儲介質輸出模塊,其中所述存儲介質輸入模塊,用于向存儲介質輸入數(shù)據(jù),和接受錯誤檢查修正碼糾錯請求;所述錯誤檢查修正碼產(chǎn)生模塊,用于根據(jù)輸入數(shù)據(jù)或讀出數(shù)據(jù)產(chǎn)生錯誤檢查修正碼;所述存儲介質存儲模塊,用于存儲輸入數(shù)據(jù)以及根據(jù)輸入數(shù)據(jù)編碼產(chǎn)生的錯誤檢查修正碼;所述存儲介質輸出模塊,用于對根據(jù)輸入數(shù)據(jù)產(chǎn)生的錯誤檢查修正碼和讀出數(shù)據(jù)產(chǎn)生的錯誤檢查修正碼進行比較,查找并糾正錯誤數(shù)據(jù)位;并將糾錯后的數(shù)據(jù)和錯誤檢查修正碼糾錯請求發(fā)送給所述存儲介質輸入模塊,同時發(fā)出重新讀出數(shù)據(jù)請求。
2. 根據(jù)權利要求1所述的自動糾錯系統(tǒng),其特征在于,所述存儲介質輸出 模塊,包括錯誤檢查修正碼對比模塊、錯誤檢査修正碼糾錯模塊和請求發(fā)送 模塊,其中所述錯誤檢査修正碼對比模塊,用于根據(jù)輸入數(shù)據(jù)產(chǎn)生的錯誤檢査修正碼 和讀出數(shù)據(jù)產(chǎn)生的錯誤檢查修正碼進行比較,查找錯誤數(shù)據(jù)位; 所述錯誤檢査修正碼糾錯模塊,用于糾正錯誤數(shù)據(jù)位;所述請求發(fā)送模塊,用于將糾錯后的數(shù)據(jù)和錯誤檢査修正碼糾錯請求發(fā)送 給所述存儲介質輸入模塊,同時發(fā)出重新讀出數(shù)據(jù)請求。
3. —種自動糾錯誤方法,用于實現(xiàn)在產(chǎn)生錯誤檢查修正碼功能的同時自動 糾正讀寫錯誤的功能,其特征在于,所述方法包括下列步驟步驟100.根據(jù)輸入數(shù)據(jù)進行錯誤檢査修正碼編碼,并將所述根據(jù)輸入數(shù) 據(jù)進行編碼得到的錯誤檢查修正碼和所述輸入數(shù)據(jù)一并存儲;步驟200.根據(jù)讀出的所述輸入數(shù)據(jù)進行錯誤檢查修正碼編碼,同時將所述根據(jù)輸入數(shù)據(jù)進行編碼得到的錯誤檢查修正碼與所述根據(jù)讀出數(shù)據(jù)進行編 碼得到的錯誤檢查修正碼進行對比,査找錯誤數(shù)據(jù)位;步驟300.根據(jù)所述錯誤數(shù)據(jù)位對讀出數(shù)據(jù)進行糾正,并將糾正后的數(shù)據(jù) 輸入存儲介質,同時將包括所述錯誤數(shù)據(jù)位的信息發(fā)送出去并發(fā)出重新讀出數(shù) 據(jù)請求。
4. 根據(jù)權利要求3所述的自動糾錯方法,其特征在于,所述步驟IOO,包 括下列步驟步驟110.根據(jù)輸入數(shù)據(jù)進行錯誤檢査修正碼編碼;步驟120.將所述錯誤檢査修正碼和輸入數(shù)據(jù)一并存儲。
5. 根據(jù)權利要求4所述的自動糾錯方法,其特征在于,所述步驟IIO,包 括下列步驟-步驟111.根據(jù)輸入數(shù)據(jù),對標簽信息進行錯誤檢査修正碼編碼; 步驟112.根據(jù)輸入數(shù)據(jù),對數(shù)據(jù)信息進行錯誤檢查修正碼編碼。
6. 根據(jù)權利要求5所述的自動糾錯方法,其特征在于,所述對標簽信息進 行錯誤檢査修正碼編碼,是根據(jù)標簽信息的位數(shù),對標簽信息高位加n位零, 合并為64位數(shù)據(jù)進行編碼。
7. 根據(jù)權利要求5所述的自動糾錯方法,其特征在于,所述步驟112,包 括下列步驟步驟112a.將N位輸入數(shù)據(jù)分成M (M=N/64)個64位數(shù)據(jù)data_in;步驟112b.為第m(m二l )個64位數(shù)據(jù)data_in,產(chǎn)生8個64位密鎖Cx, CO, Cl, C2, C4, C8, C16, C32;步驟112c.將所述8個64位密鎖Cx, C0, Cl, C2, C4, C8, C16, C32分 別與所述64位數(shù)據(jù)進行運算,得到8位錯誤檢査修正碼data—ecc
二 ' (data_in & Cx)data—ecc[l]= (一(data—in & CO))data_ecc[2]= — (data—in & Cl)data—ecc[3]= "(data—in & C2)data_ecc[4]= '(data—in & C4)data—ecc[5]二 ("(data—in & C8))data—ecc[6]二 —(data_in & C16)data—ecc[7]= —(data—in & C32)步驟112d.令npm+l,判斷m是否小于或等于M,若是則返回步驟112b;否則結束錯誤檢查修正碼編碼。
8. 根據(jù)權利要求3所述的自動糾錯方法,其特征在于,所述步驟200,包 括下列步驟步驟210.根據(jù)讀出的所述輸入數(shù)據(jù)進行錯誤檢査修正碼編碼;步驟220.將所述根據(jù)輸入數(shù)據(jù)進行編碼得到的錯誤檢査修正碼與所述根 據(jù)讀出的所述輸入數(shù)據(jù)進行編碼得到的錯誤檢査修正碼進行對比,査找錯誤數(shù) 據(jù)位。
9. 根據(jù)權利要求8所述的自動糾錯方法,其特征在于,所述步驟210,包 括下列步驟步驟211.根據(jù)讀出的所述輸入數(shù)據(jù),對標簽信息進行錯誤檢査修正碼編碼;步驟212.根據(jù)讀出的所述輸入數(shù)據(jù),對數(shù)據(jù)信息進行錯誤檢査修正碼編碼。
10. 根據(jù)權利要求8所述的自動糾錯方法,其特征在于,所述步驟220, 包括下列步驟步驟221.對比所述輸入數(shù)據(jù)的標簽信息的錯誤檢查修正碼與讀出數(shù)據(jù)的 標簽信息的錯誤檢査修正碼,査找錯誤標簽信息位;步驟222.對比所述輸入數(shù)據(jù)的數(shù)據(jù)信息的錯誤檢査修正碼與讀出數(shù)據(jù)的 數(shù)據(jù)信息的錯誤檢查修正碼,查找錯誤數(shù)據(jù)信息位。
11. 根據(jù)權利要求3所述的自動糾錯方法,其特征在于,所述步驟300, 包括下列步驟步驟310.根據(jù)所述錯誤數(shù)據(jù)位對讀出的所述輸入數(shù)據(jù)進行糾正,對錯誤 數(shù)據(jù)位取反;步驟320.發(fā)送錯誤檢査修正碼糾錯請求,并將糾正后的數(shù)據(jù)重新輸入存 儲介質;步驟330.將包括所述錯誤數(shù)據(jù)位的信息發(fā)送出去并發(fā)出重新讀出數(shù)據(jù)請求。
12. 根據(jù)權利要求11所述的自動糾錯方法,其特征在于,所述步驟330, 包括下列步驟步驟331.將錯誤數(shù)據(jù)位的信息組成緩存內(nèi)部錯誤檢査修正碼校驗結果總線發(fā)送出去;步驟332.將緩存訪問結果輸出總線中的scacheres—ecc信息發(fā)送出去, 報告出現(xiàn)錯誤檢査修正碼錯誤,提醒進行重新讀出數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種自動糾錯系統(tǒng)及方法。該方法包括下列步驟根據(jù)輸入數(shù)據(jù)進行錯誤檢查修正碼編碼,并將所述根據(jù)輸入數(shù)據(jù)進行編碼得到的錯誤檢查修正碼和所述輸入數(shù)據(jù)一并存儲;根據(jù)讀出的所述輸入數(shù)據(jù)進行錯誤檢查修正碼編碼,同時將所述根據(jù)輸入數(shù)據(jù)進行編碼得到的錯誤檢查修正碼與所述根據(jù)讀出數(shù)據(jù)進行編碼得到的錯誤檢查修正碼進行對比,查找錯誤數(shù)據(jù)位;根據(jù)所述錯誤數(shù)據(jù)位對讀出數(shù)據(jù)進行糾正,并將糾正后的數(shù)據(jù)輸入存儲介質,同時將包括所述錯誤數(shù)據(jù)位的信息發(fā)送出去并發(fā)出重新讀出數(shù)據(jù)請求。其能夠實現(xiàn)自動糾正存儲介質中的讀寫錯誤。
文檔編號G06F11/10GK101477481SQ20091007799
公開日2009年7月8日 申請日期2009年2月6日 優(yōu)先權日2009年2月6日
發(fā)明者胡偉武, 誠 錢, 陳云霽 申請人:中國科學院計算技術研究所