面向片上大容量緩沖存儲器的任意多位容錯方法及裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及處理器的緩沖存儲器(Cache)的容錯設計技術領域,具體涉及一種面向片上大容量緩沖存儲器的任意多位容錯方法及裝置。
【背景技術】
[0002]在現(xiàn)代處理器中,緩沖存儲器(以下簡稱Cache)通常占據(jù)絕大部分(大于50%)的芯片面積。由于摩爾定律的持續(xù)穩(wěn)定發(fā)展,片上Cache的容量,即存儲單元數(shù)量,也快速增長。于是在生產(chǎn)、制造和使用過程中,存儲單元發(fā)生錯誤的概率也隨著基數(shù)的增大而增長。同時,新型的非易失性存儲器件(NVM)由于面積和功耗優(yōu)勢開始廣泛應用于片上最后一級緩沖(Last Level Cache)。NVM器件的一個普遍缺點就是寫壽命不高,即器件在寫入一定次數(shù)以后就會損壞。且由于Cache對不同存儲單元的寫操作分布不均勻,處于寫熱點的NVM存儲單元失效的速度大大提高。針對這些情況,如果Cache沒有容錯設計,則某一位存儲單元的錯誤就將導致整個處理器不能正常工作,大大降低系統(tǒng)的可用性、可靠性甚至芯片的良率。相反的,采用容錯設計的Cache在存儲單元發(fā)生錯誤時,仍可保證系統(tǒng)正確運行。且由于Cache占據(jù)芯片的絕大部分面積,芯片生產(chǎn)、制造過程中引入的瑕疵有較大的概率被Cache的容錯設計吸收,直接提升芯片的良率。
[0003]Cache存儲單元的錯誤可分為兩類:軟錯誤和硬錯誤。存儲單元的軟錯誤指暫時性的可恢復錯誤。比如Cache使用過程中,存儲單元由于放射性粒子或電磁場干擾等原因發(fā)生單位電平翻轉(zhuǎn),從而導致存儲內(nèi)容出錯。發(fā)生這種錯誤時存儲單元本身并沒有損壞,在重新寫入正確數(shù)據(jù)后仍然可以正常使用。存儲單元的硬錯誤是存儲單元發(fā)生永久性的損壞,比如生產(chǎn)、制造過程中由塵埃引起的存儲單元結(jié)構(gòu)損壞,或者讀寫次數(shù)超過單元壽命造成的永久性破壞。
[0004]為保證處理器穩(wěn)定運行,Cache中存儲的有效數(shù)據(jù)不能發(fā)生錯誤。傳統(tǒng)方法采用Error Correcting Coding (ECC)編碼來檢測并糾正Cache存儲單元的軟和硬錯誤。ECC編碼要求占用Cache的一部分存儲空間用于保存冗余校驗碼。比如海明編碼需要H立冗余碼來保護(k=2tr-l)位數(shù)據(jù)位。雖然海明編碼的有效編碼率(即有效數(shù)據(jù)位和冗余編碼位的比例)高,但它只能糾正一位錯誤。當Cache存儲單元發(fā)生多位錯誤時,類似海明編碼的ECC校驗就不再有效,導致處理器運行出錯從而中斷系統(tǒng)正常運行。這里,Cache發(fā)生多位錯定義為:一個η (η>2)位的存儲單元同時發(fā)生2位及以上錯誤的情形。現(xiàn)代處理器通常采用η=72,其中64位為有效數(shù)據(jù)8位為ECC編碼。隨著片上Cache容量的快速增長以及新型存儲器件的應用,Cache發(fā)生多位錯的概率也隨之增長。于是更先進的能糾多位錯的ECC編碼技術也開始引起大家注意,比如Reed-Solomon (RS)編碼或Low-density parity-check(LDPC)編碼。RS和LDPC編碼雖然能糾多位錯,但是不可避免的要求更多的空間和邏輯開銷。冗余位增加會降低Cache的有效容量,而更復雜的校驗碼邏輯必然增加每一次讀寫請求的延遲,降低讀寫效率。
【發(fā)明內(nèi)容】
[0005]本發(fā)明要解決的技術問題是:針對現(xiàn)有技術的上述缺陷,提供一種能夠避免不同類型錯誤的疊加和累積效應,降低緩沖存儲器發(fā)生多位錯的概率,降低對更復雜ECC校驗編碼的需求,提升緩沖存儲器的空間效率,減少對正常緩沖存儲器中存儲體讀寫的影響,提升緩沖存儲器訪問的時間效率,實現(xiàn)代價低、容錯效率高、可擴展性好的面向片上大容量緩沖存儲器的任意多位容錯方法及裝置。
[0006]為了解決上述技術問題,本發(fā)明采用的技術方案為:
一種面向片上大容量緩沖存儲器的任意多位容錯方法,步驟包括:
1)在處理器上電復位后輸出數(shù)據(jù)陣列掃描啟動信號;在緩沖存儲器完成掃描識別數(shù)據(jù)陣列中各個存儲單元的硬錯誤后的正常工作狀態(tài)下,監(jiān)測緩沖存儲器的標簽陣列和數(shù)據(jù)陣列的狀態(tài),如果標簽陣列或者數(shù)據(jù)陣列發(fā)生ECC校驗錯誤則輸出標簽陣列刷新啟動信號或者數(shù)據(jù)陣列刷新啟動信號;
2)如果檢測到數(shù)據(jù)陣列掃描啟動信號,則進行數(shù)據(jù)掃描識別數(shù)據(jù)陣列中各個存儲單元的硬錯誤,將數(shù)據(jù)陣列中發(fā)生硬錯誤的存儲單元對應的錯誤隔離標志位標記I ;如果檢測到標簽陣列刷新啟動信號則刷新標簽陣列,完成對標簽陣列中每一個存儲單元狀態(tài)信息的ECC校驗,如果檢測到數(shù)據(jù)陣列刷新啟動信號則刷新數(shù)據(jù)陣列,完成對數(shù)據(jù)陣列中每一個存儲單元中存儲數(shù)據(jù)的ECC校驗;
3)檢測數(shù)據(jù)陣列中存儲單元的寫入或者替換操作,當需要進行存儲單元的寫入或者替換操作時,從組相連的多路存儲單元中選擇對應的錯誤隔離標志位未被標記為I的存儲單元作為寫入或者替換的目標存儲單元來進行寫入或者替換操作。
[0007]優(yōu)選地,所述步驟2)的詳細步驟包括:建立具有空閑狀態(tài)、請求發(fā)送狀態(tài)兩種狀態(tài)的數(shù)據(jù)陣列掃描及刷新狀態(tài)機,將數(shù)據(jù)陣列掃描及刷新狀態(tài)機初始化為空閑狀態(tài),在空閑狀態(tài)下如果檢測到數(shù)據(jù)陣列掃描啟動信號或者數(shù)據(jù)陣列刷新啟動信號,則數(shù)據(jù)陣列掃描及刷新狀態(tài)機進入請求發(fā)送狀態(tài);在請求發(fā)送狀態(tài)下,如果收到的信號為數(shù)據(jù)陣列掃描啟動信號,則生成不同類型的寫數(shù)據(jù),對數(shù)據(jù)陣列中的存儲單元進行反復寫入和讀出,如果發(fā)現(xiàn)某個存儲單元寫入和讀出的數(shù)據(jù)不相符合,則判定該存儲單元發(fā)生硬錯誤,輸出標簽更新信號,將數(shù)據(jù)陣列中發(fā)生硬錯誤的存儲單元對應的錯誤隔離標志位標記1,所述錯誤隔離標志位存儲于發(fā)生硬錯誤的存儲單元在標簽陣列中對應的存儲單元狀態(tài)信息中;如果收到的信號為數(shù)據(jù)陣列刷新啟動信號,則順序讀取數(shù)據(jù)陣列中每一個存儲單元的內(nèi)容并進行ECC校驗,如果ECC校驗出錯,則針對ECC校驗出錯的存儲單元進行糾錯并將糾錯后的正確數(shù)據(jù)更換ECC校驗出錯的存儲單元中的錯誤數(shù)據(jù),然后繼續(xù)讀取數(shù)據(jù)陣列中下一個存儲單元直至完成數(shù)據(jù)陣列中所有存儲單元的遍歷讀取,數(shù)據(jù)陣列掃描及刷新狀態(tài)機恢復空閑狀態(tài);同時,建立具有空閑狀態(tài)、刷新狀態(tài)兩種狀態(tài)的標簽陣列更新及刷新狀態(tài)機,將標簽陣列更新及刷新狀態(tài)機初始化為空閑狀態(tài),在空閑狀態(tài)下如果檢測到標簽陣列刷新啟動信號或者標簽更新信號,則標簽陣列更新及刷新狀態(tài)機進入刷新狀態(tài);在刷新狀態(tài)下,順序讀取標簽陣列中每一個存儲單元狀態(tài)信息并進行ECC校驗,如果ECC校驗出錯,則針對ECC校驗出錯的存儲單元狀態(tài)信息進行糾錯并將糾錯后的正確數(shù)據(jù)更換ECC校驗出錯的存儲單元狀態(tài)信息,然后繼續(xù)讀取標簽陣列中下一個存儲單元狀態(tài)信息直至完成標簽陣列中所有存儲單元狀態(tài)信息的遍歷讀取,標簽陣列更新及刷新狀態(tài)機恢復空閑狀態(tài)。
[0008]優(yōu)選地,所述步驟2)還包括定時啟動標簽陣列和數(shù)據(jù)陣列刷新的步驟,所述定時啟動標簽陣列和數(shù)據(jù)陣列刷新的詳細步驟包括分別為標簽陣列和數(shù)據(jù)陣列設置刷新定時器,當標簽陣列的刷新定時器超時,則向標簽陣列輸出標簽陣列刷新啟動信號,重置并重新啟動標簽陣列的刷新定時器;當數(shù)據(jù)陣列的刷新定時器超時,則向數(shù)據(jù)陣列輸出數(shù)據(jù)陣列刷新啟動信號,重置并重新啟動數(shù)據(jù)陣列的刷新定時器。
[0009]本發(fā)明還提供一種面向片上大容量緩沖存儲器的任意多位容錯裝置,包括: 掃描與刷新控制單元,用于在處理器上電復位后輸出數(shù)據(jù)陣列掃描啟動信號;在緩沖存儲器完成掃描識別數(shù)據(jù)陣列中各個存儲單元的硬錯誤后的正常工作狀態(tài)下,監(jiān)測緩沖存儲器的標簽陣列和數(shù)據(jù)陣列的狀態(tài),如果標簽陣列或者數(shù)據(jù)陣列發(fā)生ECC校驗錯誤則輸出標簽陣列刷新啟動信號或者數(shù)據(jù)陣列刷新啟動信號;
標簽陣列及數(shù)據(jù)陣列錯誤檢測單元,用于如果檢測到數(shù)據(jù)陣列掃描啟動信號,則進行數(shù)據(jù)掃描識別數(shù)據(jù)陣列中各個存儲單元的硬錯誤,將數(shù)據(jù)陣列中發(fā)生硬錯誤的存儲單元對應的錯誤隔離標志位標記I ;如果檢測到標簽陣列刷新啟動信號則刷新標簽陣列,完成對標簽陣列中每一個存儲單元狀態(tài)信息的ECC校驗,如果檢測到數(shù)據(jù)陣列刷新啟動信號則刷新數(shù)據(jù)陣列,完成對數(shù)據(jù)陣列中每一個存儲單元中存儲數(shù)據(jù)的ECC校驗;
容錯替換策略單元,用于檢測數(shù)據(jù)陣列中存儲單元的寫入或者替換操作,當需要進行存儲單元的寫入或者替換操作時,從組相連的多路存儲單元中選擇對應的錯誤隔離標志位未被標記為I的存儲單元作為寫入或者替換的目標存儲單元來進行寫入或者替換操作。
[0010]優(yōu)選地,所述標簽陣列及數(shù)據(jù)陣列錯誤檢測單元包括:
數(shù)據(jù)陣列掃描及刷新狀態(tài)機模塊,用于建立具有空閑狀態(tài)、請求發(fā)送狀態(tài)兩種狀態(tài)的數(shù)據(jù)陣列掃描及刷新狀態(tài)機,將數(shù)據(jù)陣列掃描及刷新狀態(tài)機初始化為空閑狀態(tài),在空閑狀態(tài)下如果檢測到數(shù)據(jù)陣列掃描啟動信號或者數(shù)據(jù)陣列刷新啟動信號,則數(shù)