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