本發(fā)明涉及一種微處理器流水線錯(cuò)誤的檢測與恢復(fù)裝置,尤其涉及一種sparcv8處理器中流水線錯(cuò)誤的檢測與恢復(fù)裝置。本發(fā)明還涉及一種sparcv8處理器中流水線中數(shù)據(jù)翻轉(zhuǎn)錯(cuò)誤的屏蔽方法。
背景技術(shù):
單粒子翻轉(zhuǎn)(singleeventupset,seu)是在空間應(yīng)用環(huán)境下,由于單粒子入射導(dǎo)致集成電路中存儲單元發(fā)生數(shù)據(jù)翻轉(zhuǎn)錯(cuò)誤的事件,是空間環(huán)境下電子系統(tǒng)發(fā)生故障和工作異常的重要誘因之一。隨著半導(dǎo)體工藝技術(shù)的快速發(fā)展,芯片的尺寸在不斷減小,處理器工作頻率不斷提高,節(jié)點(diǎn)工作電壓的降低使得單粒子翻轉(zhuǎn)現(xiàn)象越來越嚴(yán)重。單粒子轟擊流水線的組合邏輯部分,導(dǎo)致信號發(fā)生擾動,有可能會被級間寄存器鎖存發(fā)生set故障,導(dǎo)致流水線出現(xiàn)錯(cuò)誤。單粒子轟擊級間寄存器,使其寄存的內(nèi)容發(fā)生反轉(zhuǎn),導(dǎo)致seu和mbu故障。研究指出,在納米級芯片中,單粒子翻轉(zhuǎn)導(dǎo)致的多位數(shù)據(jù)翻轉(zhuǎn)(mbu)概率也在迅速提高,會導(dǎo)致最多8位隨機(jī)數(shù)據(jù)翻轉(zhuǎn)錯(cuò)誤,對空間應(yīng)用的電子系統(tǒng)產(chǎn)生更大的危害。在微處理器及電子系統(tǒng)中采取加固措施對單粒子故障進(jìn)行容錯(cuò)設(shè)計(jì)已成為重要的技術(shù)手段。
作為現(xiàn)代微處理器的重要組成部分,流水線主要完成程序代碼的指令流執(zhí)行,并將執(zhí)行結(jié)果寫入數(shù)據(jù)存儲和寄存器堆。如果單粒子轟擊流水線導(dǎo)致級間寄存器發(fā)生翻轉(zhuǎn)引發(fā)的錯(cuò)誤數(shù)據(jù)被鎖存,就會導(dǎo)致流水線執(zhí)行結(jié)果不正確,在沒有對流水線單元進(jìn)行容錯(cuò)加固的情況下,錯(cuò)誤的執(zhí)行結(jié)果將會擴(kuò)散到數(shù)據(jù)存儲和寄存器堆或者執(zhí)行錯(cuò)誤的指令流,進(jìn)而導(dǎo)致更多不可控的錯(cuò)誤產(chǎn)生。因此,對于空間應(yīng)用的高可靠微處理器而言,進(jìn)行流水線單元的容錯(cuò)設(shè)計(jì)具有重要的意義。
現(xiàn)有對空間微處理器的加固技術(shù)有以下三種方案:采用基于時(shí)間的容錯(cuò)方法,能有效解決mbu問題,但是處理器性能大大降低;采用基于編碼的容錯(cuò)方法,只能有效的驗(yàn)證計(jì)算部分的正確性,并且不同的編碼方式針對不同的單粒子故障不能全部處理,容錯(cuò)能力有限;采用基于硬件冗余的方案,寄存器級三模冗余時(shí),無法應(yīng)對mbu故障;流水線級三模冗余,雖然可以定位出故障流水線,但是硬件資源功耗等開銷較大;流水線級雙模冗余可以應(yīng)對mbu故障,但是無法定位,起不到屏蔽故障的作用,每次都進(jìn)行流水線回退會顯著增加流水線性能開銷,尤其是在單粒子故障日益常見的情況下會導(dǎo)致整體處理速度明顯降低。自修復(fù)雙冗余流水線(self-recoverydualpipeline,srdp)在雙冗余流水線的基礎(chǔ)上,通過比較邏輯檢測故障,自校驗(yàn)邏輯定位故障,實(shí)現(xiàn)對set、seu、mbu故障導(dǎo)致的錯(cuò)誤進(jìn)行執(zhí)行,雖然srdp對單粒子故障有很好的容錯(cuò)效果,但比較邏輯與功能邏輯的串行、自校驗(yàn)的編碼邏輯以及復(fù)雜的流水線恢復(fù)操作導(dǎo)致處理器的主頻下降幅度很大??傊?,現(xiàn)有技術(shù)無法實(shí)現(xiàn)一個(gè)以低面積、低性能開銷并有效應(yīng)對seu、set和mbu故障的cpu加固方案。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于設(shè)計(jì)一種基于檢查點(diǎn)技術(shù)的雙冗余流水線及容錯(cuò)方法,能夠從系統(tǒng)結(jié)構(gòu)上有效的屏蔽單粒子瞬變(set)、單粒子翻轉(zhuǎn)(seu)、多位數(shù)據(jù)翻轉(zhuǎn)(mbu)導(dǎo)致的故障,并減少邏輯延遲,提高工作速度。
為實(shí)現(xiàn)上述目的,本發(fā)明所采用的技術(shù)方案為:
一種基于檢查點(diǎn)技術(shù)的雙冗余流水線,其特征在于:所述基于檢查點(diǎn)技術(shù)的雙冗余流水線包括流水線a、流水線b、指令緩存(301)、備份寄存器組(401)、比較邏輯(501)、寫緩存(601)、數(shù)據(jù)緩存(701)和寄存器堆(801);所述流水線a包括取指段(101)、譯碼段(102)、執(zhí)行段(103)、訪存段(104)、寫回段(105)五個(gè)流水段;所述流水線b包括取指段(201)、譯碼段(202)、執(zhí)行段(203)、訪存段(204)、寫回段(205)五個(gè)流水段;數(shù)據(jù)緩存(701)和寄存器堆(801)由流水線a和流水線b共享,正常情況下,執(zhí)行指令流時(shí)默認(rèn)寫入流水線a的執(zhí)行結(jié)果;所述指令緩存(301)用于存儲流水線執(zhí)行的代碼,與流水線a中取指段(101)進(jìn)行數(shù)據(jù)交互,流水線a取出指令后分發(fā)給兩條流水線執(zhí)行;所述備份寄存器組(401)以周期粒度對流水線a的級間寄存器進(jìn)行備份,一旦比較邏輯(501)檢測出單粒子故障,將備份的內(nèi)容恢復(fù)到流水線a和流水線b的級間寄存器中,2個(gè)周期后流水線正常執(zhí)行;所述比較邏輯(501)設(shè)置在流水線a與流水線b之間,對比兩條流水線的級間寄存器內(nèi)容,檢測單粒子故障;所述寫緩沖(601)設(shè)置在數(shù)據(jù)緩存(701)和寄存器堆(801)的入口,用于暫存流水線給出的更新數(shù)據(jù);所述數(shù)據(jù)緩存(701)用于存儲流水線輸出的數(shù)據(jù),并向流水線提供運(yùn)算操作數(shù);所述寄存器堆(801)用于存儲流水線輸出的數(shù)據(jù),并向流水線提供運(yùn)算操作數(shù)。
一種基于檢查點(diǎn)技術(shù)的雙冗余流水線的容錯(cuò)方法,其特征在于:該容錯(cuò)方法用于基于檢查點(diǎn)技術(shù)的雙冗余流水線;所述基于檢查點(diǎn)技術(shù)的雙冗余流水線包括流水線a、流水線b、指令緩存(301)、備份寄存器組(401)、比較邏輯(501)、寫緩沖(601)、數(shù)據(jù)緩存(701)和寄存器堆(801);所述容錯(cuò)方法采用如下步驟和方法對單粒子導(dǎo)致的set、seu、mbu故障進(jìn)行容錯(cuò):
(1)取指段,將流水線a取指段(101)的級間寄存器內(nèi)容存儲到備份寄存器組(401);流水線a的取指段(101)給出指令地址,從指令緩存(301)中取出指令分發(fā)給兩條流水線執(zhí)行;比較邏輯(501)對比兩條流水線的級間寄存器信息,如果比較結(jié)果相同,說明流水線單元的取指段沒有被單粒子轟擊,流水線繼續(xù)向下執(zhí)行,如果比較結(jié)果不同,說明一條流水線的取指段的級間寄存器發(fā)生seu/mbu故障,給出流水線取指段的錯(cuò)誤信號;
(2)譯碼段,將流水線a譯碼段(102)的級間寄存器內(nèi)容存儲到備份寄存器組(401);流水線a的譯碼段(102)讀地址信息,判斷操作數(shù)是否存在寫緩沖(601)中,如果存在,則從寫緩沖(601)中取出操作數(shù)并分發(fā)給兩條流水線操作,否則,從寄存器堆(801)中取出操作數(shù)分發(fā)給兩條流水線操作;比較邏輯(501)對比兩條流水線的譯碼段級間寄存器信息,如果比較結(jié)果相同,說明流水線單元的譯碼段沒有被單粒子轟擊,流水線繼續(xù)向下執(zhí)行,如果比較結(jié)果不同,說明一條流水線的取指段的功能邏輯發(fā)生set故障,或者譯碼段的級間寄存器發(fā)生seu/mbu故障,給出流水線譯碼段的錯(cuò)誤信號;
(3)執(zhí)行段,將流水線a執(zhí)行段(103)的級間寄存器內(nèi)容存儲到備份寄存器組(401);流水線a的執(zhí)行段(103)讀地址信息,判斷操作數(shù)是否存在寫緩沖(601)中,如果存在,則從寫緩沖(601)中取出操作數(shù)并分發(fā)給兩條流水線操作,否則,從數(shù)據(jù)緩存(701)中取出操作數(shù)分發(fā)給兩條流水線操作;比較邏輯(501)對比兩條流水線的級間寄存器信息,如果比較結(jié)果相同,說明流水線單元的執(zhí)行段沒有被單粒子轟擊,流水線繼續(xù)向下執(zhí)行,如果比較結(jié)果不同,說明某條流水線的譯碼段的功能邏輯發(fā)生set故障,或者執(zhí)行段的級間寄存器發(fā)生seu/mbu故障,給出流水線執(zhí)行段的錯(cuò)誤信號;
(4)訪存段,將流水線a訪存段(104)的級間寄存器內(nèi)容存儲到備份寄存器組(401);流水線a的訪存段(104)給出與數(shù)據(jù)緩存(701)的寫交互信息,并將其更新到寫緩沖(601);比較邏輯(501)對比兩條流水線的級間寄存器信息,如果比較結(jié)果相同,說明流水線單元的訪存段沒有被單粒子轟擊,流水線繼續(xù)向下執(zhí)行,如果比較結(jié)果不同,說明某條流水線的執(zhí)行段的功能邏輯發(fā)生set故障,或者訪存段的級間寄存器發(fā)生seu/mbu故障,給出流水線訪存段的錯(cuò)誤信號;
(5)寫回段,將流水線a寫回段(105)的級間寄存器內(nèi)容存儲到備份寄存器組(401);流水線a的寫回段(105)和流水線b的寫回段(205)給出與寄存器堆(701)的寫交互信息,并將其更新到寫緩沖(601);比較邏輯(501)對比兩條流水線的級間寄存器信息,如果比較結(jié)果相同,說明流水線單元的寫回段沒有被單粒子轟擊,流水線繼續(xù)向下執(zhí)行,如果比較結(jié)果不同,說明某條流水線的訪存段的功能邏輯發(fā)生set故障,或者寫回段的級間寄存器發(fā)生seu/mbu故障,給出流水線寫回段的錯(cuò)誤信號;
(6)比較邏輯(501)對比步驟(5)中兩條流水線存入寫緩沖(601)中的信息,如果比較結(jié)果相同,說明流水線單元沒有被單粒子轟擊,如果比較結(jié)果不同,則說明寫回段的功能邏輯發(fā)生set故障,給出錯(cuò)誤信號;
(7)將步驟(1)、(2)、(3)、(4)、(5)、(6)中錯(cuò)誤信號進(jìn)行或操作,生成恢復(fù)信號,如果恢復(fù)信號有效,作廢當(dāng)前周期流水線單元所有操作,并將備份寄存器組(401)中的內(nèi)容恢復(fù)到兩條流水線對應(yīng)的級間寄存器中,同時(shí)清空寫緩沖(601)的信息,禁止更新數(shù)據(jù)緩存(701)和寄存器堆(801),流水線重新執(zhí)行發(fā)生故障的操作。
本發(fā)明實(shí)現(xiàn)的一種基于檢查點(diǎn)技術(shù)的雙冗余流水線及容錯(cuò)方法,在嵌入式微處理器中,將級間寄存器的信息備份到備份寄存器組中,一旦比較器檢測出單粒子故障,將備份寄存器組中的信息恢復(fù)到兩條流水線相應(yīng)的級間寄存器中,不僅能夠屏蔽單粒子轟擊流水線單元導(dǎo)致的set、seu和mbu故障,從而可以提高微處理器在空間等惡劣環(huán)境下應(yīng)用的可靠性,還減少了故障檢測及流水線恢復(fù)功能的復(fù)雜度,減小了邏輯延遲,提升處理器的工作主頻。
附圖說明
圖1是五級流水線結(jié)構(gòu)圖;
圖2是srdp結(jié)構(gòu)圖;
圖3是根據(jù)本發(fā)明的基于檢查點(diǎn)技術(shù)的雙冗余流水線結(jié)構(gòu)圖;
圖4是故障檢測與恢復(fù)機(jī)制結(jié)構(gòu)圖;
圖5是級間寄存器的seu/mbu故障檢測與恢復(fù)時(shí)序圖;
圖6是功能邏輯的set故障檢測與恢復(fù)時(shí)序圖;
圖7是寫緩沖容錯(cuò)結(jié)構(gòu)圖;
圖8是seu/mbu的寫緩沖容錯(cuò)時(shí)序圖;
圖9是set的寫緩沖容錯(cuò)時(shí)序圖。
具體實(shí)施方式
本實(shí)施例結(jié)合一種sparcv8體系結(jié)構(gòu)的嵌入式微處理器leon2對本發(fā)明的具體實(shí)施方式進(jìn)行說明。該sparcv8體系結(jié)構(gòu)的嵌入式微處理器leon2采用32位的risc架構(gòu),其流水線單元為經(jīng)典的五級流水線,流水線的各個(gè)流水級與指令緩存、數(shù)據(jù)緩存和寄存器堆進(jìn)行數(shù)據(jù)交互。
leon2處理器的流水線單元包括取指(if)、譯碼(id)、執(zhí)行(ex)、訪存(me)、寫回(wr)五個(gè)組合邏輯單元,以及各流水級之間設(shè)置的五組級間寄存器if、if/id、id/ex、ex/me、me/wr,其結(jié)構(gòu)如圖1所示。單粒子轟擊流水線的組合邏輯部分導(dǎo)致set故障,有可能會被級間寄存器鎖存導(dǎo)致流水線錯(cuò)誤。單粒子轟擊級間寄存器,使其寄存的內(nèi)容發(fā)生翻轉(zhuǎn),導(dǎo)致seu和mbu故障。組合邏輯產(chǎn)生的關(guān)鍵信息將通過級間寄存器在流水級之間傳遞,級間寄存器中的錯(cuò)誤信息使得流水線單元執(zhí)行出錯(cuò)誤結(jié)果,并在me或wr段更新到數(shù)據(jù)存儲器或寄存器堆。同時(shí),指令地址紊亂的錯(cuò)誤可能造成指令流的執(zhí)行順序發(fā)生錯(cuò)誤。
自修復(fù)雙冗余流水線(self-recoverydualpipeline),簡稱srdp,其結(jié)構(gòu)示意圖如圖2所示。srdp基于硬件冗余的思想,對傳統(tǒng)的流水線級雙模冗余結(jié)構(gòu)進(jìn)行改進(jìn),在兩條流水線之間設(shè)置比較器對流水線單元進(jìn)行故障檢測,利用自校驗(yàn)?zāi)K對級間寄存器進(jìn)行校驗(yàn)定位出故障流水線,根據(jù)比較結(jié)果和自校驗(yàn)錯(cuò)誤信息對流水線進(jìn)行恢復(fù),實(shí)現(xiàn)對set、seu、mbu故障導(dǎo)致的錯(cuò)誤進(jìn)行執(zhí)行,雖然srdp對單粒子故障有很好的容錯(cuò)效果,但比較邏輯與功能邏輯的串行、自校驗(yàn)的編碼邏輯以及復(fù)雜的流水線恢復(fù)操作導(dǎo)致處理器的主頻下降幅度很大。
本發(fā)明針對于srdp容錯(cuò)性能的缺陷,在保證容錯(cuò)效果的基礎(chǔ)上,以容錯(cuò)時(shí)間開銷為代價(jià),避免復(fù)雜的容錯(cuò)邏輯導(dǎo)致處理器性能大幅度降低,提出一種基于檢查點(diǎn)技術(shù)的雙冗余流水線。
基于檢查點(diǎn)技術(shù)的雙冗余流水線是以流水線級雙模冗余為基礎(chǔ),并行執(zhí)行相同的指令流,通過比較器對比兩條流水線的級間寄存器以檢測單粒子故障。以周期粒度對級間寄存器的內(nèi)容進(jìn)行備份,當(dāng)檢測到單粒子故障時(shí),使用2個(gè)周期對流水線進(jìn)行恢復(fù)。為避免臟數(shù)據(jù)流出流水線,在數(shù)據(jù)緩存和寄存器堆的入口設(shè)置寫緩沖,通過延遲寫入保證信息可靠性。相對于srdp方案,此方案取消了自校驗(yàn)邏輯、并行執(zhí)行功能邏輯與比較邏輯以及簡化的流水線恢復(fù)機(jī)制,向處理器的關(guān)鍵路徑引入較小的延遲,相對于leon2原型,此方案實(shí)現(xiàn)的處理器的時(shí)鐘頻率只下降了9.8%,面積開銷增加66%左右。與dmr和srdp相比,性能上提升了36.9%和70.3%。隨著集成電路的飛速發(fā)展,面積開銷不再是容錯(cuò)處理器設(shè)計(jì)的瓶頸,容錯(cuò)方案的性能開銷對于處理器的意義更大,更小關(guān)鍵路徑延遲意味著處理器的處理能力更強(qiáng)。因此,基于周期粒度的級間寄存器備份機(jī)制在面積和性能開銷方面更具優(yōu)勢。
基于上述基本原理與設(shè)置,本發(fā)明的基于檢查點(diǎn)技術(shù)的雙冗余流水線的一種具體實(shí)施方式如下:
在sparcv8體系結(jié)構(gòu)的嵌入式微處理器中,將流水線單元設(shè)置成如圖3所示,主要包括流水線a、流水線b、指令緩存(301)、備份寄存器組(401)、比較邏輯(501)、寫緩沖(601)、數(shù)據(jù)緩存(701)和寄存器堆(801)。
流水線a和流水線b包括取指(if)、譯碼(id)、執(zhí)行(ex)、訪存(me)、寫回(wr)組合邏輯單元,以及各流水級之間設(shè)置的級間寄存器(if、if/id、id/ex、ex/me、me/wr)。兩條流水線擁有各自的數(shù)據(jù)通路,同時(shí)共享指令緩存、數(shù)據(jù)緩存和寄存器堆。并行執(zhí)行相同指令流,并默認(rèn)用流水線a的執(zhí)行結(jié)果與指令緩存、數(shù)據(jù)緩存和寄存器堆進(jìn)行數(shù)據(jù)交互,流水線b為備份單元。
指令緩存(301)用于存儲流水線執(zhí)行的代碼,與流水線a中if段進(jìn)行數(shù)據(jù)交互,流水線a取出指令后分發(fā)給兩條流水線執(zhí)行。
備份寄存器組(401)以周期粒度對流水線a的級間寄存器進(jìn)行備份,一旦比較邏輯(501)檢測出單粒子故障,將備份的內(nèi)容恢復(fù)到流水線a和流水線b的級間寄存器中,2個(gè)周期后流水線正常執(zhí)行,從而避免了故障累積和傳播效應(yīng)。
比較邏輯(501)設(shè)置在流水線a與流水線b之間,對比兩條流水線的級間寄存器內(nèi)容,從而檢測出單粒子故障。由于取指段需要根據(jù)指令地址從指令緩存中取出指令,譯碼段需要從寄存器堆中取操作數(shù),執(zhí)行段和訪存段均會產(chǎn)生與指令緩存交互的信息,寫回段會將執(zhí)行結(jié)果更新到寄存器堆。因此,需要將五級的級間寄存器進(jìn)行對比,避免流水線發(fā)生共模錯(cuò)誤或?qū)㈠e(cuò)誤數(shù)據(jù)更新到數(shù)據(jù)存儲和寄存器堆。
寫緩沖(601)必須保證數(shù)據(jù)緩存(701)和寄存器堆(801)不會被流水線單元給出的錯(cuò)誤更新。分別在數(shù)據(jù)緩存入口設(shè)置1個(gè)寫緩沖和寄存器堆入口設(shè)置2個(gè)寫緩沖,用于緩存流水線需要寫入數(shù)據(jù)緩存和寄存器堆的值,并對比寄存器堆入口的寫緩沖的內(nèi)容(用于檢測wr段功能邏輯的set故障),一旦比較邏輯(501)檢測到單粒子故障,作廢掉寫緩沖中的數(shù)據(jù),避免臟數(shù)據(jù)流出流水線。
數(shù)據(jù)緩存(701)和寄存器堆(801)用于存儲流水線單元需要的數(shù)據(jù),流水線單元根據(jù)指令字會對寄存器堆和數(shù)據(jù)緩存器進(jìn)行讀寫操作,與流水線a給出的信息進(jìn)行交互,流水線a將執(zhí)行結(jié)果寫入寄存器堆和數(shù)據(jù)緩存器,或者從中讀出數(shù)據(jù)分發(fā)給兩條流水線操作。
所述基于檢查點(diǎn)技術(shù)的雙冗余流水線采用如下步驟與方法對流水線中的錯(cuò)誤數(shù)據(jù)進(jìn)行檢測和處理:
(1)取指段,將流水線a取指段(101)的級間寄存器內(nèi)容存儲到備份寄存器組(401);流水線a的取指段(101)給出指令地址,從指令緩存(301)中取出指令分發(fā)給兩條流水線執(zhí)行;比較邏輯(501)對比兩條流水線的級間寄存器信息,如果比較結(jié)果相同,說明流水線單元的取指段沒有被單粒子轟擊,流水線繼續(xù)向下執(zhí)行,如果比較結(jié)果不同,說明一條流水線的取指段的級間寄存器發(fā)生seu/mbu故障,給出流水線取指段的錯(cuò)誤信號;
(2)譯碼段,將流水線a譯碼段(102)的級間寄存器內(nèi)容存儲到備份寄存器組(401);流水線a的譯碼段(102)讀地址信息,判斷操作數(shù)是否存在寫緩沖(601)中,如果存在,則從寫緩沖(601)中取出操作數(shù)并分發(fā)給兩條流水線操作,否則,從寄存器堆(801)中取出操作數(shù)分發(fā)給兩條流水線操作;比較邏輯(501)對比兩條流水線的譯碼段級間寄存器信息,如果比較結(jié)果相同,說明流水線單元的譯碼段沒有被單粒子轟擊,流水線繼續(xù)向下執(zhí)行,如果比較結(jié)果不同,說明一條流水線的取指段的功能邏輯發(fā)生set故障,或者譯碼段的級間寄存器發(fā)生seu/mbu故障,給出流水線譯碼段的錯(cuò)誤信號;
(3)執(zhí)行段,將流水線a執(zhí)行段(103)的級間寄存器內(nèi)容存儲到備份寄存器組(401);流水線a的執(zhí)行段(103)讀地址信息,判斷操作數(shù)是否存在寫緩沖(601)中,如果存在,則從寫緩沖(601)中取出操作數(shù)并分發(fā)給兩條流水線操作,否則,從數(shù)據(jù)緩存(701)中取出操作數(shù)分發(fā)給兩條流水線操作;比較邏輯(501)對比兩條流水線的級間寄存器信息,如果比較結(jié)果相同,說明流水線單元的執(zhí)行段沒有被單粒子轟擊,流水線繼續(xù)向下執(zhí)行,如果比較結(jié)果不同,說明某條流水線的譯碼段的功能邏輯發(fā)生set故障,或者執(zhí)行段的級間寄存器發(fā)生seu/mbu故障,給出流水線執(zhí)行段的錯(cuò)誤信號;
(4)訪存段,將流水線a訪存段(104)的級間寄存器內(nèi)容存儲到備份寄存器組(401);流水線a的訪存段(104)給出與數(shù)據(jù)緩存(701)的寫交互信息,并將其更新到寫緩沖(601);比較邏輯(501)對比兩條流水線的級間寄存器信息,如果比較結(jié)果相同,說明流水線單元的訪存段沒有被單粒子轟擊,流水線繼續(xù)向下執(zhí)行,如果比較結(jié)果不同,說明某條流水線的執(zhí)行段的功能邏輯發(fā)生set故障,或者訪存段的級間寄存器發(fā)生seu/mbu故障,給出流水線訪存段的錯(cuò)誤信號;
(5)寫回段,將流水線a寫回段(105)的級間寄存器內(nèi)容存儲到備份寄存器組(401);流水線a的寫回段(105)和流水線b的寫回段(205)給出與寄存器堆(701)的寫交互信息,并將其更新到寫緩沖(601);比較邏輯(501)對比兩條流水線的級間寄存器信息,如果比較結(jié)果相同,說明流水線單元的寫回段沒有被單粒子轟擊,流水線繼續(xù)向下執(zhí)行,如果比較結(jié)果不同,說明某條流水線的訪存段的功能邏輯發(fā)生set故障,或者寫回段的級間寄存器發(fā)生seu/mbu故障,給出流水線寫回段的錯(cuò)誤信號;
(6)比較邏輯(501)對比步驟(5)中兩條流水線存入寫緩沖(601)中的信息,如果比較結(jié)果相同,說明流水線單元沒有被單粒子轟擊,如果比較結(jié)果不同,則說明寫回段的功能邏輯發(fā)生set故障,給出錯(cuò)誤信號;
(7)將步驟(1)、(2)、(3)、(4)、(5)、(6)中錯(cuò)誤信號進(jìn)行或操作,生成恢復(fù)信號,如果恢復(fù)信號有效,作廢當(dāng)前周期流水線單元所有操作,并將備份寄存器組(401)中的內(nèi)容恢復(fù)到兩條流水線對應(yīng)的級間寄存器中,同時(shí)清空寫緩沖(601)的信息,禁止更新數(shù)據(jù)緩存(701)和寄存器堆(801),流水線重新執(zhí)行發(fā)生故障的操作。
為了詳細(xì)說明基于檢查點(diǎn)技術(shù)的雙冗余流水線的容錯(cuò)方法,從以下三個(gè)方面進(jìn)行分析:
1、多位容錯(cuò)的雙冗余流水線結(jié)構(gòu):兩條流水線并行執(zhí)行相同指令流的按序的流水線,命名為流水線a、流水線b,以流水線a執(zhí)行結(jié)果與流水線單元外部進(jìn)行交互,比較器對兩條流水線中級間寄存器的內(nèi)容進(jìn)行比較,從而實(shí)現(xiàn)對流水線單元的單粒子故障的檢測。
2、周期粒度的級間寄存器備份機(jī)制:單粒子故障發(fā)生后,為了對流水線單元進(jìn)行恢復(fù),同時(shí)避免故障累積和傳播效應(yīng),將會對流水線級間寄存器以周期粒度進(jìn)行備份,一旦比較器檢測出單粒子故障,將備份的內(nèi)容恢復(fù)到流水線的級間寄存器中,2個(gè)周期后流水線正常執(zhí)行。
3、輸出數(shù)據(jù)的寫緩沖機(jī)制:以周期粒度對級間寄存器進(jìn)行備份的機(jī)制只能保證流水線單元數(shù)據(jù)的正確性,因此,需要在數(shù)據(jù)緩存和寄存器堆的入口設(shè)置寫緩沖,用于緩存流水線需要寫入數(shù)據(jù)緩存和寄存器堆的值,一旦比較邏輯檢測到單粒子故障,作廢掉寫緩沖中的數(shù)據(jù),避免臟數(shù)據(jù)流出流水線。
基于檢查點(diǎn)技術(shù)的雙冗余流水線的故障檢測和恢復(fù)機(jī)制如圖4所示,級間寄存器ij為流水線i(i=a,b)的第j(j=1,2,3,4,5)級級間寄存器,功能邏輯ij為流水線i的第j級的功能邏輯,備份寄存器j為流水線第j級的備份寄存器,比較器j為流水線第j級的比較器。以流水線第2級的檢錯(cuò)與恢復(fù)操作為例,當(dāng)前周期,功能邏輯a1/b1的計(jì)算結(jié)果da2/db2。第二個(gè)周期,da2/db2被鎖存到級間寄存器a2/b2中,qa2/qb2為da2/db2的鎖存結(jié)果。第三個(gè)周期,備份寄存器2對級間寄存器a2的內(nèi)容進(jìn)行備份,bp2為qa2的鎖存結(jié)果。error為比較器2給出的錯(cuò)誤信號,用于控制將備份寄存器的內(nèi)容恢復(fù)到級間寄存器中。由上述分析可知:時(shí)鐘clk會按周期刷新級間寄存器ij,同時(shí),備份寄存器j對流水線a中的級間寄存器進(jìn)行備份,比較器通過比較兩條流水線級間寄存器的內(nèi)容檢測單粒子故障,比較結(jié)果相同,則流水線正常流動,一旦比較結(jié)果不同,將錯(cuò)誤信息error置為有效,將備份寄存器j中的值在下個(gè)周期恢復(fù)到兩條流水線的級間寄存器中重新執(zhí)行。
由圖4中可知,流水線單元有三大主要部件:級間寄存器、備份寄存器和功能邏輯。級間寄存器和備份寄存器為時(shí)序邏輯電路,容易受單粒子影響而引發(fā)seu和mbu故障。功能邏輯則是組合邏輯電路,容易被單粒子轟擊導(dǎo)致信號發(fā)生瞬變,被級間寄存器鎖存后引發(fā)set故障。由于備份寄存器受到單粒子轟擊不會影響處理器的運(yùn)行,因此,只討論級間寄存器和功能邏輯發(fā)生故障后的檢錯(cuò)和恢復(fù)方法:
(1)級間寄存器發(fā)生seu/mbu故障后,將采用以下三步進(jìn)行檢錯(cuò)與恢復(fù),其時(shí)序如圖5所示:
第一步:流水線中指令正常執(zhí)行;
第二步:備份寄存器鎖存第一步中的指令,流水線的級間寄存器被單粒子轟擊導(dǎo)致seu/mbu,通過比較級間寄存器的內(nèi)容,檢測出單粒子故障,流水線被暫停;
第三步:將第二步中備份寄存器鎖存的內(nèi)容更新到流水線級間寄存器,重新執(zhí)行第一步流水線中的指令。
(2)功能邏輯發(fā)生set故障后,將采用以下三步進(jìn)行檢錯(cuò)與恢復(fù),其時(shí)序如圖6所示:
第一步:流水線的功能邏輯被單粒子轟擊導(dǎo)致set,流水線中指令非正常執(zhí)行;
第二步:備份寄存器鎖存第一步中的指令,set被級間寄存器鎖存,通過比較級間寄存器的內(nèi)容,檢測出單粒子故障,流水線被暫停;
第三步:將第二步中備份寄存器鎖存的內(nèi)容更新到流水線級間寄存器,重新執(zhí)行第一步流水線中的指令。
當(dāng)發(fā)生單粒子故障后,本文提出的故障檢測與恢復(fù)機(jī)制能夠控制兩條流水線重新執(zhí)行發(fā)生故障指令,從而保證流水線單元的數(shù)據(jù)恢復(fù)到正常狀態(tài),但寄存器堆和數(shù)據(jù)緩存可能會被流水線中的臟數(shù)據(jù)更新。
如圖7所示,在數(shù)據(jù)緩存和寄存器堆入口設(shè)置寫緩沖用于暫存數(shù)據(jù)。在數(shù)據(jù)緩存的入口設(shè)置一個(gè)寫緩沖,緩存流水線a在訪存段給出用于修改數(shù)據(jù)緩存的地址、數(shù)據(jù)以及控制信號。在寄存器堆的入口設(shè)置兩個(gè)寫緩沖,分別緩存流水線a和流水線b在寫回段給出用于修改寄存器堆的地址、數(shù)據(jù)以及控制信號。在本文提出檢測與恢復(fù)機(jī)制中,如果流水線5個(gè)流水級的級間寄存器發(fā)生seu/mbu故障,以及流水線前4級的功能邏輯發(fā)生的set故障,均可以通過比較器檢測,但寫回段的功能邏輯發(fā)生set故障則無法檢測。因此,在寄存器堆的入口設(shè)置兩個(gè)寫緩沖,將兩條流水線的結(jié)果都緩存,并在下一個(gè)周期比較兩個(gè)寫緩沖中的內(nèi)容,既達(dá)到檢測出寫回段功能邏輯中set故障的目的,又不會對關(guān)鍵路徑增加額外的延遲。
由于在數(shù)據(jù)緩存和寄存器堆的入口設(shè)置了寫緩沖,導(dǎo)致在流水線正常執(zhí)行時(shí),延遲一個(gè)周期將數(shù)據(jù)更新到數(shù)據(jù)緩存/寄存器堆。流水線單元向數(shù)據(jù)緩存和寄存器堆發(fā)出讀數(shù)據(jù)請求時(shí),會優(yōu)先判斷目的信息是否存在于寫緩沖。如果存在,則從寫緩沖讀取需要的數(shù)據(jù)分發(fā)給兩條流水線執(zhí)行,如果不存在,則從寄存器堆/數(shù)據(jù)緩存中讀出數(shù)據(jù)分發(fā)給兩條流水線執(zhí)行。當(dāng)檢測出單粒子故障時(shí),則作廢寫緩沖的中的數(shù)據(jù),阻止其更新數(shù)據(jù)緩存/寄存器堆,同時(shí)禁止當(dāng)前周期對寫緩沖的更新。
圖8是流水線級間寄存器發(fā)生seu/mbu故障的容錯(cuò)時(shí)序圖。第6個(gè)周期,時(shí)鐘上升沿將寫緩沖中的內(nèi)容更新到數(shù)據(jù)緩存和寄存器堆,同時(shí)將第5個(gè)周期中me和wr給出的更新數(shù)據(jù)緩存和寄存器堆的信息存儲到寫緩沖;單粒子轟擊流水線的me的級間寄存器導(dǎo)致seu/mbu故障,比較器檢測出故障,清空寫緩沖,則流水線在第5個(gè)時(shí)鐘周期給出用于修改數(shù)據(jù)緩存和寄存器堆的值被作廢。第7個(gè)周期,時(shí)鐘上升沿禁止第6個(gè)周期中me和wr給出的數(shù)據(jù)更新到寫緩沖,將備份寄存器組中的內(nèi)容更新到兩條流水線的級間寄存器,重新執(zhí)行第5個(gè)時(shí)鐘周期的所有操作。第8個(gè)周期,時(shí)鐘上升沿將第7個(gè)周期中me和wr給出的更新數(shù)據(jù)緩存和寄存器堆的信息存儲到寫緩沖。第8個(gè)周期,時(shí)鐘上升沿將寫緩沖中的內(nèi)容更新到數(shù)據(jù)緩存和寄存器堆。
圖9是流水線功能邏輯發(fā)生set故障的容錯(cuò)時(shí)序圖。第5個(gè)周期,時(shí)鐘上升沿將寫緩沖中的內(nèi)容更新到數(shù)據(jù)緩存和寄存器堆,同時(shí)將第4個(gè)周期中me和wr給出的更新數(shù)據(jù)緩存和寄存器堆的信息存儲到寫緩沖;單粒子轟擊流水線的me的級間寄存器導(dǎo)致set故障。第6個(gè)周期,時(shí)鐘上升沿將set故障鎖存,并將寫緩沖中的內(nèi)容更新到數(shù)據(jù)緩存和寄存器堆,同時(shí)將第5個(gè)周期中me和wr給出的更新數(shù)據(jù)緩存和寄存器堆的信息存儲到寫緩沖;比較器檢測出故障,清空寫緩沖,則流水線在第5個(gè)時(shí)鐘周期給出用于修改數(shù)據(jù)緩存和寄存器堆的值被作廢。第7個(gè)周期,時(shí)鐘上升沿禁止第6個(gè)周期中me和wr給出的數(shù)據(jù)更新到寫緩沖,將備份寄存器組中的內(nèi)容更新到兩條流水線的級間寄存器,重新執(zhí)行第5個(gè)時(shí)鐘周期的所有操作。第8個(gè)周期,時(shí)鐘上升沿將第7個(gè)周期中me和wr給出的更新數(shù)據(jù)緩存和寄存器堆的信息存儲到寫緩沖。第9個(gè)周期,時(shí)鐘上升沿將寫緩沖中的內(nèi)容更新到數(shù)據(jù)緩存和寄存器堆。
綜上所述,基于寫緩沖的容錯(cuò)機(jī)制通過增加第6、7兩個(gè)周期的時(shí)間開銷保證了seu/mbu故障不會對數(shù)據(jù)緩存/寄存器堆進(jìn)行重復(fù)的寫操作以及set故障導(dǎo)致的臟數(shù)據(jù)不會對數(shù)據(jù)緩存和寄存器堆進(jìn)行更新。
本發(fā)明實(shí)現(xiàn)的一種基于檢查點(diǎn)技術(shù)的雙冗余流水線及容錯(cuò)方法,將流水線的級間寄存器的內(nèi)容備份到備份寄存器組中,通過比較邏輯檢測流水線單元中的單粒子故障,利用備份寄存器組中的值對流水線進(jìn)行恢復(fù),從而解決了嵌入式微處理器對于單粒子導(dǎo)致的set、seu和mbu故障的容錯(cuò)問題,可以提高嵌入式微處理器在空間環(huán)境下工作的可靠性。