一種基于at697處理器的單粒子翻轉故障處理方法
【專利摘要】本發明提出了一種針對AT697處理器的單粒子翻轉故障處理方法,所述方法包含:步驟101)定義AT697處理器變量的格式;步驟102)初始化AT697F處理器的EDAC功能模塊及RAM空間的數據;步驟103)檢測并修改與EDAC模塊相連的RAM或EEPROM存儲器由單粒子翻轉造成的錯誤;步驟104)建立維護策略,主動周期性的遍歷訪問所有RAM和EEPROM存儲器的存儲空間,進而減少并消除單bit錯誤。本發明根據AT697處理器提供EDAC檢測接口的特點,針對空間單粒子故障提出一套完成的軟件處理設計方案。本方案不需額外增加芯片,不增加設備的重量、體積、功耗;處理方法簡單、高效;接口靈活、可移植性強,對提高我國衛星發展的可靠性與安全性具有重要的意義。
【專利說明】一種基于AT697處理器的單粒子翻轉故障處理方法
【技術領域】
[0001]本發明涉及航空、航天電子綜合化【技術領域】,更具體地涉及一種針對航天抗輻照處理器AT697系列處理器單粒子翻轉故障軟件處理設計方案。
【背景技術】
[0002]隨著航天技術的不斷發展,設備的高集成度、高復雜度、高可靠性成為星上設備必然發展趨勢,大規模集成電路現已廣泛的應用于航天設備的研制。然而復雜的空間環境對大規模集成電路的影響也日益嚴重,特別是空間單粒子翻轉(SEU)現象,已成為星載設備的最為常見的故障之一。空間單粒子翻轉現象是指宇宙中單個高能粒子射入半導體器件的靈敏區,使器件存儲的內容發生翻轉變化(“0”-> “I”或“1”_> “O”),導致系統功能紊亂,嚴重時會發生災難性事故。單粒子事件最易發生在SRAM、RAM、EEPROM等存儲器件及CPU、FPGA等邏輯器件中。
[0003]目前處理器、FPGA抗輻照技術日益成熟,可以實現單粒子翻轉免疫或發生概率極低,但是CPU的抗輻照能力優秀不能決定整個星載設備的安全可靠,如何減少RAM、EEPROM等最易受到單粒子事件影響的存儲器件對星載設備的發展至關重要。目前對于SRAM、RAM、EEPROM等器件抗單粒子事件設計通常采用EDAC (錯誤檢測與糾正)的設計方式,由EDAC專用芯片或FPGA實現對RAM、EEPROM的Ibit翻轉錯誤和多bit錯誤的檢測接口。
[0004]ATMEL公司生產的宇航級抗輻照處理器AT697系列(ATMEL697D\E\F),作為一款完全抗輻照設計的處理器,集成了 EDAC單元模塊,目前被廣泛應用。其提供了對RAM、EEPROM等存儲器件的單粒子翻轉檢測功能及糾錯接口。但是沒有提供具體的處理策略及實現功能,需要設計人員在實際使用中完成。
[0005]本發明基于AT697系列處理器,根據其提供EDAC檢測接口的特點,針對空間單粒子故障提出一套完成的軟件處理設計方案。
【發明內容】
[0006]本發明的目的在于,為克服上述問題,本發明提供了一種基于AT697處理器的單粒子翻轉故障處理方法。
[0007]為實現上述目的,本發明提供了一種基于AT697處理器的單粒子翻轉故障處理方法,所述方法包含:
[0008]步驟101)定義AT697處理器變量的格式;
[0009]步驟102)初始化AT697F處理器的EDAC功能模塊及RAM空間的數據;
[0010]步驟103)檢測并修改與EDAC模塊相連的RAM或EEPROM存儲器由單粒子翻轉造成的錯誤;
[0011]步驟104)建立維護策略,主動周期性的遍歷訪問所有RAM和EEPROM存儲器的存儲空間,進而減少并消除單bit錯誤。
[0012]根據AT697處理器的硬件特征定義變量類型,并將全局變量分為重要變量和常規變量,具體為;
[0013]a.將所有變量使用32位寬定義;
[0014]b.將重要變量集中存放在指定地址空間內,并且存儲內容一式三份,在讀取時進行按位三取二處理。
[0015]可選的,上述步驟102)進一步包含:
[0016]步驟102-1)將RAM或EEPROM存儲器的控制寄存器初始化并清除錯誤地址寄存器;
[0017]步驟102-2)將RAM存儲空間的存儲單元清零;
[0018]步驟102-3)配置RAM或EEPROM存儲器的第二控制寄存器的保護位PE位使能;
[0019]步驟102-4)清除錯誤狀態寄存器的內容。
[0020]將發生錯誤的地址存放在AT697處理器的錯誤地址寄存器中,并將發生錯誤的狀態類型存放在AT697處理器的CPU錯誤狀態寄存器中。
[0021]可選的,步驟103-1)檢測一比特錯誤并進行糾錯:
[0022]a關閉中斷;
[0023]b讀取錯誤地址寄存器;
[0024]c檢查是否發生EDAC模塊的單比特錯誤,如果沒有發生則清除錯誤狀態寄存
[0025]器后,重新開啟中斷后結束;
[0026]d當發生單比特錯誤時,讀取錯誤地址;檢查錯誤地址是否在RAM空間,如果出錯地址在RAM空間,則從錯誤地址寄存器中讀出錯誤地址,讀取錯誤地址空間的對應的數據,并將該數據回寫至錯誤地址中,記錄錯誤狀態;
[0027]如果錯誤發生在EEPROM空間,開啟EEPROM寫使能后,從錯誤地址寄存器中讀出錯誤地址,讀取錯誤地址空間的對應的數據,并將該數據回寫至錯誤地址中,執行EEPROM寫禁止,記錄錯誤狀態;如果不在上述空間,清除錯誤狀態寄存器后,重新開啟中斷后結束;
[0028]e完成RAM和EEPROM存儲器的糾錯后,清除錯誤狀態寄存器后,重新開啟中斷后結束;
[0029]步驟103-2)檢測指令訪問異常錯誤并糾錯;
[0030]a關閉中斷;
[0031]b記錄發生異常時PC指針;
[0032]c讀取錯誤地址寄存器;
[0033]d判斷錯誤地址是否在RAM存儲器存儲的代碼空間中,如果錯誤不在RAM存儲的代碼空間則清除狀態寄存器后,記錄錯誤狀態,開中斷結束;
[0034]如果錯誤在RAM存儲器的代碼空間中,計算指令代碼對應的在EEPROM存儲中的位置;讀取三次EEPROM回寫指令代碼;對回寫代碼進行三取二動作后寫入至出錯地址;清除狀態寄存器后,記錄錯誤狀態,開中斷結束;
[0035]步驟103-3)檢測數據訪問異常處理錯誤并糾錯:
[0036]a關閉中斷;
[0037]b記錄發生異常時PC指針;
[0038]c讀取錯誤地址寄存器;
[0039]d判斷錯誤地址是否在RAM存儲器存儲的重要變量空間中,如果錯誤地址不在RAM存儲器存儲的重要變量空間中則清除狀態寄存器后,記錄錯誤狀態,開中斷結束;
[0040]如果錯誤地址在RAM存儲器存儲的重要變量空間中,則計算錯誤數據冗余存儲位置,再讀取其他兩個冗余數據,錯誤地址數據按照全零處理與其他兩個冗余數據進行三取二糾錯,將正確數據回寫至出錯地址,清除狀態寄存器后,記錄錯誤狀態,開中斷結束。
[0041]可選的,上述步驟104)之后還包含:對單位或多位錯誤故障處理進行驗證,具體為:
[0042]步驟205)計算待測試數據的EDAC校驗碼,即獲得待測數據的tcb碼,其中待測試的數據的長度為32bit ;
[0043]步驟206制造待測試數據的單比特位或多位錯誤,即將待測試數據的一位或多位進行取反操作;
[0044]步驟207)將處理器中存儲器控制寄存器中的寫旁路檢測Wb位使能,同時寫入待測試數據的正確tcb碼;使能寫旁路檢測wb位后,向RAM和EEPROM空間寫數據時校驗位不由處理器EDAC模塊產生,而是由此次操作所寫入的固定tcb碼;
[0045]步驟208)向設定地址寫入步驟206)輸出的待測試數據;
[0046]步驟209)將存儲器的第三控制寄存器寫旁路檢測wb位禁止;
[0047]步驟210)從設定地址中讀取步驟208)寫入的測數據;
[0048]步驟211)由于tcb碼與實際寫入數據存在單比特位或多位錯誤,觸發EDAC異常或中斷ISR驗證異常糾錯;
[0049]步驟212)程序進入EDAC異常或中斷ISR,處理單比特位或多位錯誤,完成糾錯、返回動作;
[0050]步驟213)重復讀取設定地址中寫入的數據,如果沒有糾正則再次進入EDAC異常或中斷ISR,如此循環;如果糾正結果正確則不會再次觸發EDAC異常或中斷ISR ;
[0051]步驟214)查詢糾錯計數進行比對驗證,單粒子翻轉故障的處理情況。
[0052]與現有方法相比,本發明的技術優勢在于:
[0053]本發明基于AT697系列處理器,根據其提供EDAC檢測接口的特點,針對空間單粒子故障提出一套完成的軟件處理設計方案。本方案不需額外增加芯片,不增加設備的重量、體積、功耗;處理方法簡單、高效;接口靈活、可移植性強,對提高我國衛星發展的可靠性與安全性具有重要的意義。
【專利附圖】
【附圖說明】
[0054]圖1是本發明中的軟件框架結構示意圖;
[0055]圖2是本發明中是本發明中EDAC模塊初始化程序流程圖;
[0056]圖3是本發明中Ibit錯誤的糾正程序流程圖;
[0057]圖4是本發明中指令訪問異常處理程序流程圖;
[0058]圖5是本發明中數據訪問異常處理程序流程圖;
[0059]圖6是本發明中系統維護模塊在系統組成中的結構圖;
[0060]圖7是本發明中系統維護任務在系統組成中的結構圖;
[0061]圖8是本發明中EDAC功能驗證程序流程圖。【具體實施方式】
[0062]下面通過具體實施例對本發明的方法做進一步闡述。
[0063]本發明的目的是通過軟件設計并使用AT697系列處理器提供的空間單粒子翻轉故障檢測接口(EDAC功能模塊),采取異常時處理、主動維護、程序設計約束的方式,實現在RAM、EEPROM器件的空間Ibit錯誤的消除,多bit錯誤的分區處理,可以最大程度的對多bit錯誤進行糾正、對于不可糾正的錯誤進行容錯設計,避免由于空間單粒子翻轉導致系統功能出現嚴重錯誤。
[0064]軟件運行環境為:
[0065]處理器:AT697系列處理器;
[0066]EEPROM 大小:IMB 字節;
[0067]RAM 大小:256MB 字節;
[0068]軟件存儲于EEPROM中,上電后將代碼復制到RAM中運行。
[0069]AT697系列處理器EDAC功能檢測接口如下:
[0070]AT697系列處理器具有32位EDAC(錯誤檢測和校正)功能,EDAC機制采用7位漢明碼,可檢查出40位總線上的任何單、多位錯誤,并通過異常中斷方式通知處理器軟件進行處理,并且可以區分單位還是多位錯誤。1.發生單位錯誤,通過硬件總線異常(trapOxll)通知處理器軟件;2.對于多位錯誤,處理器分別通過指令訪問異常(trapOxOl)和數據訪問異常(trap0x09)通知處理器軟件,指令訪問異常(trapOxOl)和數據訪問異常(trap0x09)兩者的區別在于,前者多位錯誤發生在處理器取址階段,后者多位錯誤發生在數據訪問階段。發生單、多位錯誤處理器在觸發中斷的同時會更新系統錯誤相關寄存器,將發生錯誤的地址存放在處理器錯誤地址寄存器(FAILAR)中,發生錯誤的狀態類型存放在(PU錯誤狀態寄存器(FAILSR)中,作為軟件異常處理的輔助信息,具體包括:a.CPU錯誤狀態寄存器(FAILSR)中的D9位EDAC可糾錯誤檢測位(eed) ;b.錯誤地址寄存器(FAILAR);
c.發生異常時的PC指針、堆棧信息的內容。
[0071]本發明的軟件處理方案中包括:1.程序實現前的變量類型與定義設計約束;2.初始化處理器EDAC模塊、3.單bit錯誤糾正、多bit錯誤處理、4.建立主動維護策略,主動消除單bit錯誤、5.發明一種檢測軟件EDAC處理正確性的驗證方法,具體內容包括:
[0072]1.在程序實現前提出設計約束,所有變量全部定義為32位寬的數據結構,將所有全局變量定義為重要變量與常規變量。重要變量采取三模冗余存儲方式,常規變量采取單變量存儲方式。當發生多bit不可糾錯誤時,對于不同類型變量采取區別處理。重要變量進行冗余糾錯并回寫,常規變量則退出等待后續邏輯判斷糾錯。
[0073]2.在軟件初始化設計時增加對處理器EDAC功能模塊的初始化配置。
[0074]3.通過AT697系列提供的硬件異常接口,完成對Ibit錯誤的糾正,包括EEPROM與RAM、EEPROM存儲空間,同時記錄錯誤狀態。
[0075]4.通過AT697系列提供的硬件異常接口,完成對多bit錯誤的區分處理,包括指令訪問異常(trapOxOl)和數據訪問異常(trap0x09)的處理,同時記錄錯誤狀態。
[0076]5.在程序設計建立系統維護模塊(任務),主動周期性的遍歷訪問所有RAM和EEPROM的空間,Ibit的單粒子錯誤可以被及時檢測并進行糾正。
[0077]6.空間單粒子翻轉糾錯軟件功能的驗證方法,在完成了所有AT697系列處理單粒子翻轉故障處理后,設計一套通過軟件注入的方式對單位或多位錯誤故障處理設計方案進行驗證的手段。
[0078]與傳統的通過外擴EDAC芯片或增加FPGA功能模塊相比本發明具有如下優點:
[0079](I)該種設計方式不需額外增加芯片,不增加設備的重量、體積、功耗等系統資源,提高系統的可靠性、安全性;
[0080](2)處理方法簡單、高效,不降低系統性能和增大存儲空間;
[0081](3)保存錯誤現場,便于對故障的診斷與分析;
[0082](4)接口靈活、可移植性強,便于其他SPARC V8體系結構處理器移植操作,使用范圍廣。設計思路同樣適用于其他對可靠性、安全性要求高的國防、工業領域。
[0083]方案內容:
[0084]一、在程序實現前提出設計約束,由于AT697F系列處理器采用RISC體系結構,采用32位統一取址、譯碼、執行、EDAC模塊采用32位統一取址,將所有變量全部定義為32位寬的數據結構,可以提高EDAC模塊糾錯的效率;將所有全局變量定義為重要變量與常規變量(全局變量定義空間分配圖見附圖1),重要變量指一旦出錯將影響整個軟件核心功能及設備安全的關鍵變量;常規變量指出錯后可以通過后期處理消除或糾正的一些全局變量或局部變量。重要變量集中存放在指定地址空間內,并且存儲內容所有變量一式三份,在讀取時進行按位三取二處理(前兩個變量按位“與”后與第三個變量進行“或”操作),確保使用時不會因為某一變量發生錯誤導致關鍵部分發生異常;寫操作將三個變量統一賦值,一式三份,完成變量寫操作。當發生多bit不可糾錯誤時,對于不同類型變量采取區別處理。重要變量進行冗余糾錯并回寫,常規變量則退出等待后續邏輯判斷糾錯。
[0085]二、在軟件初始化設計時增加對處理器EDAC功能模塊的初始化配置。在系統加電,啟動代碼程序運行在EEPROM空間時,需要對CPU寄存器中RAM接口寄存器進行初始化,程序流程圖見附圖2所示。具體包含以下幾步:
[0086]1、首先根據存儲空間硬件配置(RAM)對處理器中的存儲器配置寄存器2 (MCFG2Memory Configuration Register 2)中的相關定義位進行配置,配置值按照硬件芯片手冊進行配置即可,主要包括存儲空間的大小,位寬,刷新時間、讀寫等待時間等內容。如果使用EDAC功能必須保證軟件設置位寬為32位,最后使能RAM工作。
[0087]2、將RAM存儲空間中的數據進行清零初始化,目的是將EDAC校驗碼寫入初始值,防止程序在RAM中運行時訪問到沒有進行初始化校驗位的存儲空間而產生單位、雙位錯誤,該清零操作必不可少。對于啟動時間苛刻要求的系統,程序在EEPROM中運行速度較低,可以初始化最小存儲空間,保證程序順利運行在RAM后,其他RAM、EEPROM存儲空間可以在后續RAM中執行初始化過程。
[0088]3.對處理器中的存儲器配置寄存器3 (MCFG3 Memory Configuration Register3)中的PE位(RAM EDAC保護位)使能,對于AT697系列處理器而言只要硬件連接、存儲空間設置正確,無論是否開關EDAC功能在初始化清零操作時都會將校驗碼寫入對應的校驗位。
[0089]4.將處理器中的CPU錯誤狀態寄存器(FAILSR-Fail Status Register)清零,保證發生錯誤時會將錯誤地址更新到出錯地址寄存器(FAILAR-Fail Address Register)。
[0090]三、通過AT697系列提供的硬件異常接口,完成對Ibit錯誤的糾正,包括EEPROM與RAM、EEPROM存儲空間,同時記錄錯誤狀態。當CPU檢測到RAM或EEPROM有I位可糾錯錯誤時,CPU進入硬件錯誤(Hardware error)中斷(trapOxll),該中斷包含AT697F中所有與硬件錯誤相關內容,具體為:CPU內部總線錯、寫保護錯,EDAC可糾錯、EDAC不可糾錯、PCI接口錯誤。進入異常中斷后需要根據CPU錯誤狀態寄存器(FAILSR)中的D9位EDAC可糾錯誤檢測位(eed)判斷是否發生EDAC可糾錯誤,如果發生可就錯誤,eed為I并且CPU會更新錯誤地址寄存器(FAILAR),該地址存放發生可糾EDAC錯誤的地址;如果不是EDAC可糾錯誤則eed為0,此次中斷(trapOxll)不屬于EDAC可糾錯誤。對于EDAC可糾錯誤的異常中斷處理原理為:關中斷,將發生EDAC錯誤的地址從錯誤地址寄存器(FAILAR)讀出,判斷發生EDAC錯的地址空間是否在RAM、EEPROM存儲空間,如果發生地址確為該空間,則將該地址的值重新讀出(完成EDAC糾錯)并再回寫到發生錯誤的地址,清除CPU錯誤狀態寄存器(FAILSR-Fail Status Register),保正當發生EDAC中斷時,更新錯誤地址寄存器(FAILAR),記錄錯誤狀態,并開啟中斷后退出;如果EDAC錯誤的地址發生在EEPROM空間,則關閉EEPROM寫保護使EEPROM進入到可寫狀態,則將該地址的值重新讀出(完成EDAC糾錯)并再回寫到發生錯誤的EEPROM地址,打開EEPROM寫保護,使EEPROM恢復到不可寫狀態,清除CPU錯誤狀態寄存器(FAILSR-Fail Status Register),保正當發生EDAC中斷時,更新錯誤地址寄存器(FAILAR),記錄錯誤狀態,并開啟中斷后退出。記錄的錯誤狀態包括發生EDAC錯的地址,及糾錯成功計數。EDAC可糾中斷處理程序流程圖見附圖3所示。
[0091]四、通過AT697系列提供的硬件異常接口,完成對多bit錯誤的區分處理,包括指令訪問異常(trapOxOl)和數據訪問異常(trap0x09)的處理,同時記錄錯誤狀態。
[0092]對于指令訪問異常(trapOxOl)是指程序運行過程中,在CPU取指令時,由于受到單粒子事件影響,所取的指令碼發生多位不可糾錯誤,出現該異常中斷。發生該異常后軟件立即跳轉至指令訪問異常處理程序。因為軟件設計時程序是從EEPROM空間復制到RAM、EEPROM存儲空間中運行,所以指令代碼在RAM和EEPROM的內容一致,且相對位置也是可以計算出的,因此對于指令訪問異常可以將EEPROM中的指令代碼重新復制到RAM、EEPROM存儲空間可以解決該問題。對于指令訪問多位不可糾錯誤的異常中斷處理為:關中斷,記錄發生異常時的程序位置即PC指針,將發生多位取址錯誤的地址從錯誤地址寄存器(FAILAR)讀出,判斷發生多位取址錯的地址空間是否在RAM、EEPROM存儲空間中的代碼段,如果發生地址確為代碼空間,則根據該地址計算出EEPROM存儲該指令的地址,將該地址指令連續讀取三次進行三取二后,回寫到RAM、EEPROM存儲空間中出錯的地址,清除CPU錯誤狀態寄存器(FAILSR-Fail Status Register),保正當發生EDAC中斷時,更新錯誤地址寄存器(FAILAR),并開啟中斷后,設置中斷退出后執行PC指針為該指令即中斷退出后重復執行該指令;如果發生地址不為代碼空間,清除CPU錯誤狀態寄存器(FAILSR-Fail StatusRegister),保正當發生EDAC中斷時,更新錯誤地址寄存器(FAILAR),記錄錯誤狀態,并開啟中斷后,設置中斷退出后執行PC指針為該指令即中斷退出后重復執行該指令。記錄的錯誤狀態包括發生指令訪問異常的地址,及糾錯成功計數。指令訪問異常處理程序流程圖見附圖4所示。
[0093]對于數據訪問異常(trap0x09)是指程序執行取址操作時,由于受到單粒子事件影響,所取的數據發生多位不可糾錯誤,出現該異常中斷。發生該異常后軟件立即跳轉至數據訪問異常處理程序。數據訪問異常處理必須依據到出錯數據重要性分開情況處理,即依靠此前設計約束對變量的重要程度進行針對處理。重要數據一旦發生錯誤對系統運行造成影響,設計為三取二校驗操作,如此設計即使其中數據發生錯誤,也可以從其他兩個數據中進行糾正,對于重要變量發生多位錯誤,在異常處理程序中出記錄出錯地址,同時可以計算出該數據冗余存儲的其他兩個地址,執行錯誤地址數據三取二讀取數據,并將三取二修正后的數據重新回寫到出錯數據地址實現多位錯誤糾錯。對于常規變量,如僅采集轉發的探測數據或狀態數據,或某些不重要的狀態值,就可以將數據訪問值回寫為某些自定義特征值(如0xEB9001CF)在后續的運算中對該值加以判斷,并進行相應的后續處理。對于數據訪問多位不可糾錯誤的異常中斷處理為:關中斷,記錄發生異常時的程序位置即PC指針,將發生多位取址錯誤的地址從錯誤地址寄存器(FAILAR)讀出,判斷發生多位取址錯的地址空間是否在RAM、EEPROM存儲空間中的重要變量段,如果發生地址確為重要變量段,則計算該數據的冗余存放地址,并進行出錯地址的三取二糾錯計算,之后將糾錯后的數據回寫至出錯地址,實現糾錯動作;如果發生地址不為重要變量段,將向該錯誤地址寫入特征碼即可;此后按照既定流程執行,清除CPU錯誤狀態寄存器(FAILSR-Fail Status Register),保正當發生EDAC中斷時,更新錯誤地址寄存器(FAILAR),記錄錯誤狀態,并開啟中斷后,設置中斷退出后執行PC指針為該指令即中斷退出后重復執行該指令,繼續讀取地址數據。記錄的錯誤狀態包括發生指令訪問異常的地址,及糾錯成功計數。數據訪問異常處理程序流程圖見附圖5所示。
[0094]五、在程序設計建立系統維護模塊(適用于無操作系統環境)或系統維護任務(適用于有操作系統環境),由于對多bit錯誤不能使用處理器的糾錯功能進行糾正,所以在程序運行時應避免多bit錯的發生,采用主動周期性的遍歷訪問RAM及EEPROM的空間的方式,進行數據的讀操作,Ibit的單粒子錯誤可以被及時檢測并進行糾正,可以減少多bit發生的幾率,如圖6、7所示。同一宇宙高能粒子打翻RAM或EEPROM的同一地址空間多bit數據的概率極低,一般都由Ibit錯誤累計所致,如此操作還可以極大減少多bit不可糾錯誤的概率。在周期性遍歷RAM及EEPROM的空間時,為了提高系統實時性,不能一次遍歷所有空間,而是采用分段遍歷的方式,循環覆蓋的方式,當超出可訪問的地址空間時,地址歸零從新進行遍歷。
[0095]六、在軟件實現了空間單粒子翻轉事件的處理后,需對軟件的糾錯功能進行驗證,由于單粒子翻轉事件只能在空間發生,所以在地面只能模擬該現象,檢查軟件處理的正確性。使用AT697系列處理器中EDAC驗證模塊可以簡單高效的模擬出空間單粒子翻轉現象、從而檢查軟件處理的正確性。模塊AT697系列CPU中存儲器的配置寄存器3(MCFG3Memory Configuration Register 3)中的寫檢測位(wb)和讀檢測位(rb)及校驗修改位(tcb [0-7])組合使用,以實現對EDAC功能的測試。MCFG3寄存器可以通過對wb或rb位來控制校驗位的讀寫開關開關。當wb及rb位置O時,為正常工作模式所有校驗碼(tcb [0-7])由CPU EDAC模塊根據寫入內容生成;當4或rb位置I時,為EDAC測試模式,此時7bit的tcb (tcb [6:0])碼由MCFG3寄存器的O?6bit內的值決定。兩者的區別在于:wb有效時,對存儲空間進行寫操作時將校驗修改位直接寫入RAM、EEPROM存儲空間的校驗位中;rb位有效時,進行讀操作直接屏蔽實際的校驗位,直接從校驗修改位中直接讀取校驗位,對RAM、EEPROM存儲空間的校驗位不做修改RAM、EEPR0M存儲空間。使用以上策略采用軟件打樁的方式即可實現對所有存儲的EDAC功能的驗證,不需要進行外部硬件改造或專門研制檢測設備。本專利使用Wb有效方式進行EDAC功能測試,具體流程為:I計算待測試數據的EDAC校驗值(即tcb值),對待寫入數據進行單位或多位的修改;2使能MCFG3寄存器中的wb位,并將計算好的tcb值,一起寫入MCFG3寄存器中;3再將修改后的待測試數據寫入對應地址,并關閉MCFG3寄存器wb位;4讀取測試數據,當CPU對該測試地址進行訪問時就會引起EDAC錯誤相關中斷(trap0xl、trapx09、trap0xll),進入EDAC異常處理或中斷服務程序;5執行EDAC處理后,再次讀取該地址,查詢糾錯計數進行比對驗證,EDAC驗證功能流程圖如8所示。當糾錯計數增加值滿足單粒子翻轉處理計數時則基于AT697處理器的單粒子翻轉故障處理方法滿足要求,否則說明該處理方案中的部分內容不正確,需要進行修改,具體情況可分為:
[0096]I)針對單比特錯情況可以考慮以下幾方面:
[0097]a.處理器EDAC功能模塊是否已經使能;
[0098]b.錯誤地址寄存器中的錯誤地址是否為設定地址;
[0099]c.CPU錯誤狀態寄存器是否在上次糾錯后及時清除;
[0100]d.真對EEPROM空間的單比特錯誤,在修改EERPOM時,EEPROM的寫使能操作是否有效,回寫數據是否存儲到EEPRM空間。
[0101]2)針對多比特錯指令訪問情況可以考慮以下幾方面:
[0102]a.處理器EDAC功能模塊是否已經使能;
[0103]b.錯誤地址寄存器中的錯誤地址是否為出錯的指令地址;
[0104]c.CPU錯誤狀態寄存器是否在上次糾錯后及時清除;
[0105]d.出錯代碼在EEPROM空間位置的偏移計算是否正確。
[0106]3)針對多比特錯指令訪問情況可以考慮以下幾方面:
[0107]a.處理器EDAC功能模塊是否已經使能;
[0108]b.錯誤地址寄存器中的錯誤地址是否為出錯的指令地址;
[0109]c.CPU錯誤狀態寄存器是否在上次糾錯后及時清除;
[0110]d.錯誤地址如果在重要變量空間,兩冗余備份偏移地址計算是否正確,回寫數據內容是否正確。
[0111]總之,本發明提供了一種航天抗輻照處理器AT697單粒子翻轉故障軟件處理設計方案。包括1.程序實現前的變量類型與定義設計約束;2.初始化處理器EDAC模塊、3.單bit錯誤糾正、多bit錯誤處理、4.建立主動維護策略,主動消除單bit錯誤、5.發明一種檢測軟件EDAC處理正確性的驗證方法。ATMEL公司生產的宇航級抗輻照處理器AT697系列(ATMEL697D\E\F),作為一款完全抗輻照設計的處理器,集成了 EDAC單元模塊,但是處理器只提供了對RAM、EEPROM等存儲器件的單粒子翻轉檢測功能及糾錯接口,沒有提供具體的處理策略及實現功能,需要設計人員在實際使用中完成。本發明基于該系列處理器,根據其提供EDAC檢測接口的特點,針對空間單粒子故障提出一套完成的軟件處理設計方案。本方案不需額外增加芯片,不增加設備的重量、體積、功耗;處理方法簡單、高效;接口靈活、可移植性強,對提高我國衛星發展的可靠性與安全性具有重要的意義。
[0112]最后所應說明的是,以上實施例僅用以說明本發明的技術方案而非限制。盡管參照實施例對本發明進行了詳細說明,本領域的普通技術人員應當理解,對本發明的技術方案進行修改或者等同替換,都不脫離本發明技術方案的精神和范圍,其均應涵蓋在本發明的權利要求范圍當中。
【權利要求】
1.一種基于AT697處理器的單粒子翻轉故障處理方法,所述方法包含: 步驟101)定義AT697處理器變量的格式; 步驟102)初始化AT697F處理器的EDAC功能模塊及RAM空間的數據; 步驟103)檢測并修改與EDAC模塊相連的RAM或EEPROM存儲器由單粒子翻轉造成的錯誤; 步驟104)建立維護策略,主動周期性的遍歷訪問所有RAM和EEPROM存儲器的存儲空間,進而減少并消除單bit錯誤。
2.根據權利要求1所述的基于AT697處理器的單粒子翻轉故障處理方法,其特征在于,根據AT697處理器的硬件特征定義變量類型,并將全局變量分為重要變量和常規變量,具體為; a.將所有變量使用32位寬定義; b.將重要變量集中存放在指定地址空間內,并且存儲內容一式三份,在讀取時進行按位三取二處理。
3.根據權利要求1所述的基于AT697處理器的單粒子翻轉故障處理方法,其特征在于,所述步驟102)進一步包含: 步驟102-1)將RAM或EEPROM存儲器的控制寄存器初始化并清除錯誤地址寄存器; 步驟102-2)將RAM存儲空間的存儲單元清零; 步驟102-3)配置RAM或EEPROM存儲器的第二控制寄存器的保護位PE位使能; 步驟102-4)清除錯誤狀態寄存器的內容。
4.根據權利要求1所述的基于AT697處理器的單粒子翻轉故障處理方法,其特征在于,將發生錯誤的地址存放在AT697處理器的錯誤地址寄存器中,并將發生錯誤的狀態類型存放在AT697處理器的CPU的錯誤狀態寄存器中。
5.根據權利要求4所述的基于AT697處理器的單粒子翻轉故障處理方法,其特征在于,所述步驟103)進一步包含:步驟103-1)檢測一比特錯誤并進行糾錯: a關閉中斷; b讀取錯誤地址寄存器; c檢查是否發生EDAC模塊的單比特錯誤,如果沒有發生則清除錯誤狀態寄存 器后,重新開啟中斷后結束; d當發生單比特錯誤時,讀取錯誤地址;檢查錯誤地址是否在RAM空間,如果出錯地址在RAM空間,則從錯誤地址寄存器中讀出錯誤地址,讀取錯誤地址空間的對應的數據,并將該數據回寫至錯誤地址中,記錄錯誤狀態; 如果錯誤發生在EEPROM空間,開啟EEPROM寫使能后,從錯誤地址寄存器中讀出錯誤地址,讀取錯誤地址空間的對應的數據,并將該數據回寫至錯誤地址中,執行EEPROM寫禁止,記錄錯誤狀態;如果不在上述空間,清除錯誤狀態寄存器后,重新開啟中斷后結束; e完成RAM和EEPROM存儲器的糾錯后,清除錯誤狀態寄存器后,重新開啟中斷后結束; 步驟103-2)檢測指令訪問異常錯誤并糾錯; a關閉中斷; b記錄發生異常時PC指針; c讀取錯誤地址寄存器;d判斷錯誤地址是否在RAM存儲器存儲的代碼空間中,如果錯誤不在RAM存儲的代碼空間則清除狀態寄存器后,記錄錯誤狀態,開中斷結束; 如果錯誤在RAM存儲器的代碼空間中,計算指令代碼對應的在EEPROM存儲中的位置;讀取三次EEPROM回寫指令代碼;對回寫代碼進行三取二動作后寫入至出錯地址;清除狀態寄存器后,記錄錯誤狀態,開中斷結束; 步驟103-3)檢測數據訪問異常處理錯誤并糾錯: a關閉中斷; b記錄發生異常時PC指針; c讀取錯誤地址寄存器; d判斷錯誤地址是否在RAM存儲器存儲的重要變量空間中,如果錯誤地址不在RAM存儲器存儲的重要變量空間中則清除狀態寄存器后,記錄錯誤狀態,開中斷結束; 如果錯誤地址在RAM存儲器存儲的重要變量空間中,則計算錯誤數據冗余存儲位置,再讀取其他兩個冗余數據,錯誤地址數據按照全零處理與其他兩個冗余數據進行三取二糾錯,將正確數據回寫至出錯地址,清除狀態寄存器后,記錄錯誤狀態,開中斷結束。
6.根據權利要求3所述的基于AT697處理器的單粒子翻轉故障處理方法,其特征在于,所述步驟104)之后還包含:對單位或多位錯誤故障處理進行驗證,具體為: 步驟205)計算待測試數據的EDAC校驗碼,即獲得待測數據的tcb碼,其中待測試的數據的長度為32bit ; 步驟206)制造待測試數據的單比特位或多位錯誤,即將待測試數據的一位或多位進行取反操作; 步驟207)將處理器中存儲器控制寄存器中的寫旁路檢測wb位使能,同時寫入待測試數據的正確tcb碼;使能寫旁路檢測wb位后,向RAM和EEPROM空間寫數據時校驗位不由處理器EDAC模塊產生,而是由此次操作所寫入的固定tcb碼; 步驟208)向設定地址寫入步驟206)輸出的待測試數據; 步驟209)將存儲器的第三控制寄存器寫旁路檢測wb位禁止; 步驟210)從設定地址中讀取步驟208)寫入的測數據; 步驟211)由于tcb碼與實際寫入數據存在單比特位或多位錯誤,觸發EDAC異常或中斷ISR驗證異常糾錯; 步驟212)程序進入EDAC異常或中斷ISR,處理單比特位或多位錯誤,完成糾錯、返回動作; 步驟213)重復讀取設定地址中寫入的數據,如果沒有糾正則再次進入EDAC異常或中斷ISR,如此循環;如果糾正結果正確則不會再次觸發EDAC異常或中斷ISR ; 步驟214)查詢糾錯計數進行比對驗證,當糾錯計數增加值滿足單粒子翻轉處理計數時則基于AT697處理器的單粒子翻轉故障處理方法滿足要求。
【文檔編號】G06F11/36GK103984630SQ201410228339
【公開日】2014年8月13日 申請日期:2014年5月27日 優先權日:2014年5月27日
【發明者】趙勛峰, 薛長斌, 周晴, 郭林 申請人:中國科學院空間科學與應用研究中心