胡鑫犇,王 通,劉書萌,許志宏,楊凱文,王新鋒,焦運(yùn)良,張洪印
(1. 中電長城圣非凡信息系統(tǒng)有限公司,北京 102209; 2. 北京空間飛行器總體設(shè)計(jì)部,北京 100094)
空間單個(gè)高能粒子入射到半導(dǎo)體器件或集成電路芯片時(shí)可能會產(chǎn)生單粒子效應(yīng)[1]。星載計(jì)算機(jī)作為空間飛行器的核心部件之一,具有數(shù)據(jù)處理、通信聯(lián)絡(luò)、控制調(diào)配各載荷分系統(tǒng)的作用[2]。其主控制器即中央處理器(CPU)為對抗空間單粒子效應(yīng)影響多選用宇航級抗輻射CPU[3]。對CPU 而言,常見的單粒子效應(yīng)有單粒子鎖定(SEL)、單粒子翻轉(zhuǎn)(SEU)及單粒子功能中斷(SEFI)[4],引發(fā)的結(jié)果包括CPU 運(yùn)算錯(cuò)誤、程序跑飛甚至器件燒毀。因此,單粒子效應(yīng)是影響空間飛行器可靠性的重要因素之一。
隨著低軌通信衛(wèi)星互聯(lián)網(wǎng)星座的部署,對星載計(jì)算機(jī)的CPU 需求量將大幅度增加[5]。例如,美國太空探索技術(shù)公司(SpaceX)的星鏈(StarLink)計(jì)劃預(yù)期部署4.2 萬顆低軌通信衛(wèi)星,考慮到星載計(jì)算機(jī)的冗余備份,對CPU 的需求數(shù)量將超過數(shù)十萬[6-7]。然而,目前宇航級CPU 價(jià)格昂貴,星載計(jì)算機(jī)的主控制器若全部采用宇航級CPU,硬件成本將十分高昂。與宇航級CPU 相比,商用現(xiàn)貨(COTS)CPU 性能高、價(jià)格低,將其用作負(fù)責(zé)數(shù)據(jù)處理的星載計(jì)算機(jī)主控制器不僅能夠降低硬件成本,還可以大幅度提升計(jì)算處理能力[8],但應(yīng)用前必須通過地面單粒子效應(yīng)試驗(yàn)驗(yàn)證[9]。
COTS CPU 多為通用型處理器,具有制程先進(jìn)、集成度高、功能復(fù)雜、接口豐富等特點(diǎn),針對此類CPU 的單粒子效應(yīng)試驗(yàn)檢測系統(tǒng)需要根據(jù)其特點(diǎn)專門定制。為此,本文從單粒子效應(yīng)試驗(yàn)測試項(xiàng)、試驗(yàn)電路板硬件設(shè)計(jì)、測試程序設(shè)計(jì)以及試驗(yàn)流程4 方面考慮,設(shè)計(jì)了一套針對高性能COTS CPU的單粒子效應(yīng)試驗(yàn)檢測系統(tǒng)。
在針對CPU 的單粒子效應(yīng)試驗(yàn)過程中,SEL表現(xiàn)為CPU 某路或多路電流瞬間增大,超出器件運(yùn)行時(shí)的正常值范圍;SEU 表現(xiàn)為CPU 片內(nèi)存儲器、寄存器某位或多位值發(fā)生翻轉(zhuǎn);SEFI 表現(xiàn)為CPU 外設(shè)接口功能異?;蛑噶钸\(yùn)算錯(cuò)誤[10]。COTS CPU 的片內(nèi)存儲器、寄存器資源萬倍于宇航級CPU,并且接口功能更加豐富,因此需要選定合適的測試項(xiàng),以保證在單粒子效應(yīng)試驗(yàn)過程中檢測系統(tǒng)能夠?qū)OTS CPU 的抗輻射特性進(jìn)行全面、準(zhǔn)確的測試。本測試方案選定的試驗(yàn)測試項(xiàng)如下:
1)SEL 測試,用于驗(yàn)證CPU 在輻照過程中是否會出現(xiàn)某路或多路電流突然超出正常值范圍的情況。當(dāng)CPU 發(fā)生SEL 時(shí),需要進(jìn)行硬件復(fù)位操作,并觀察SEL 現(xiàn)象是否消除;若電流依舊超出正常值范圍,需立即切斷試驗(yàn)電路板供電,防止CPU被燒毀,并記錄相應(yīng)數(shù)據(jù)。
2)存儲器和寄存器翻轉(zhuǎn)測試,用于檢驗(yàn)單粒子效應(yīng)試驗(yàn)過程中CPU 內(nèi)部存儲器和寄存器內(nèi)的數(shù)值是否會因?yàn)檩椪斩a(chǎn)生翻轉(zhuǎn)。當(dāng)翻轉(zhuǎn)發(fā)生后,需記錄相應(yīng)的粒子能量、翻轉(zhuǎn)存儲器地址、翻轉(zhuǎn)位、翻轉(zhuǎn)寄存器所在鏈和翻轉(zhuǎn)次數(shù)等數(shù)據(jù),供試驗(yàn)后進(jìn)行分析。
3)典型指令集測試,用于檢驗(yàn)CPU 在單粒子效應(yīng)試驗(yàn)過程中是否能夠正確執(zhí)行給定指令。當(dāng)未正確執(zhí)行指令時(shí),需記錄出錯(cuò)指令以及錯(cuò)誤執(zhí)行的次數(shù)。
4)接口功能測試,用于檢驗(yàn)單粒子效應(yīng)試驗(yàn)過程中CPU 接口功能是否會因?yàn)檩椪斩a(chǎn)生異常。當(dāng)接口功能異常時(shí),需記錄具體的接口以及功能異常的次數(shù)。
單粒子效應(yīng)試驗(yàn)檢測系統(tǒng)需要滿足第1 章所述各試驗(yàn)測試項(xiàng)的要求,整個(gè)系統(tǒng)通常包含以下部分:
1)搭載被測CPU 及輔助電路的試驗(yàn)電路板;
2)從外部直接訪問CPU 片內(nèi)存儲器和寄存器的工具;
3)對被測CPU 各路供電電流進(jìn)行監(jiān)控的工具;
4)進(jìn)行測試指令下發(fā)并顯示各測試項(xiàng)信息的上位機(jī)界面;
5)測試程序。
如圖1 所示,本方案設(shè)計(jì)的單粒子效應(yīng)試驗(yàn)檢測系統(tǒng)由試驗(yàn)電路板、JTAG 工具板、多路電流采集器、上位機(jī)監(jiān)控界面、PC 機(jī)(分別位于粒子加速器室及監(jiān)控大廳)和測試程序構(gòu)成。試驗(yàn)電路板位于粒子加速器室內(nèi),通過串口與同樣位于粒子加速器室的PC 機(jī)進(jìn)行通信。JTAG 工具板通過SJTAG接口與被測CPU 相連,用于直接對CPU 片內(nèi)的存儲器和寄存器進(jìn)行訪問,并通過串口與粒子加速器室內(nèi)的PC 機(jī)通信。多路電流采集器用于獲取被測CPU 的各路電流信息,并通過串口報(bào)送給粒子加速器室內(nèi)的PC 機(jī)。上位機(jī)監(jiān)控界面程序運(yùn)行在粒子加速器室內(nèi)的PC 機(jī)上,實(shí)時(shí)顯示測試信息,并向檢測系統(tǒng)發(fā)送測試命令。位于監(jiān)控大廳的PC 機(jī)通過以太網(wǎng)遠(yuǎn)程登錄粒子加速器室內(nèi)的PC 機(jī),供試驗(yàn)現(xiàn)場人員監(jiān)控單粒子效應(yīng)試驗(yàn)的整體運(yùn)行情況。
圖1 單粒子效應(yīng)試驗(yàn)檢測系統(tǒng)構(gòu)成示意Fig. 1 Schematic diagram of the SEE detection system
圖2 為試驗(yàn)電路板設(shè)計(jì),包含被測CPU 及其主要外圍電路、CPLD 配置管理單元和供電模塊。被測CPU 外部接口包括但不限于PCIE、LMU、CAN、QSPI、SPI、UART、GPIO、GMAC、I2C。其中,PCIE 接口通過SATA 控制器掛載一塊SATA硬盤,LMU 接口掛載總?cè)萘? GByte 的DDR 器件,其余接口均通過CPLD 在試驗(yàn)電路板上進(jìn)行回環(huán)測試。CPLD 負(fù)責(zé)試驗(yàn)電路板的配置管理,包括控制CPU 上/下電,對CPU 外設(shè)接口進(jìn)行回環(huán)測試,向外引出調(diào)試串口和SJTAG 接口等。試驗(yàn)電路板采用12 V 外部供電,通過LDO 轉(zhuǎn)換為5 路不同電壓(5 V、3.3 V、2.5 V、1.8 V、0.8 V)的電源,向板內(nèi)各元器件供電。電流采集器串接在各路電源的輸出端,用于監(jiān)控電源電流,并通過串口將電流信息報(bào)送給PC 機(jī)監(jiān)控界面。
圖2 試驗(yàn)電路板設(shè)計(jì)示意Fig. 2 Schematic diagram of the test circuit board
圖3 為試驗(yàn)電路板實(shí)物。單粒子效應(yīng)試驗(yàn)過程中高能粒子束流有一定的范圍,故在繪制電路板時(shí)其他外圍元器件應(yīng)與被測CPU 保持一定距離,以免受到高能帶電粒子影響,導(dǎo)致測試結(jié)果不準(zhǔn)確。單粒子效應(yīng)試驗(yàn)測試時(shí)須對被測CPU 進(jìn)行開帽,直接裸露硅片;對于倒裝器件,需要將襯底減薄到一定程度,以保證試驗(yàn)效果。
圖3 試驗(yàn)電路板Fig. 3 The test circuit board
單粒子效應(yīng)試驗(yàn)測試程序包含5 部分——存儲器翻轉(zhuǎn)測試程序、寄存器翻轉(zhuǎn)測試程序、指令集測試程序、接口功能測試程序和上位機(jī)監(jiān)控界面。CPU 的存儲器、寄存器資源需要通過芯片廠商預(yù)留的SJTAG 接口才能直接訪問,因此存儲器和寄存器測試程序運(yùn)行在JTAG 工具板上。指令集和接口功能測試程序運(yùn)行在被測CPU 上。測試結(jié)果均通過串口報(bào)送給上位機(jī)監(jiān)控界面并實(shí)時(shí)顯示。
如圖4 所示,在存儲器單粒子翻轉(zhuǎn)測試過程中,須將被測CPU 配置成Mbist 測試模式。首先指定被測CPU 片內(nèi)存儲器地址,隨后將預(yù)設(shè)數(shù)據(jù)(通常為“0x5555aaaa”)通過SJTAG 接口寫入指定地址對應(yīng)的CPU 片內(nèi)存儲器中,再將寫入數(shù)據(jù)與讀出數(shù)據(jù)進(jìn)行比較。如果寫入與讀出數(shù)據(jù)不相等,則認(rèn)為發(fā)生SEU 事件,并記錄發(fā)生翻轉(zhuǎn)的存儲器地址和數(shù)據(jù)。測試地址空間從存儲器基地址逐漸遞增,待測試地址覆蓋整個(gè)存儲器地址空間后,存儲器測試輪數(shù)加1。
圖4 存儲器翻轉(zhuǎn)測試流程Fig. 4 Flow chart for memory flip test
如圖5 所示,在寄存器單粒子翻轉(zhuǎn)測試過程中,須將被測CPU 配置成移位寄存器鏈模式。
圖5 寄存器翻轉(zhuǎn)測試流程Fig. 5 Flow chart for register flip test
先通過鏈掃方式向寄存器鏈推入預(yù)設(shè)值(通常為“0x5555aaaa”),之后將寄存器鏈的值讀出并與預(yù)設(shè)值比較,如果寫入與讀出數(shù)據(jù)相等,則認(rèn)為測試通過;如果不相等,則認(rèn)為某些寄存器產(chǎn)生翻轉(zhuǎn),并記錄發(fā)生翻轉(zhuǎn)的寄存器鏈和數(shù)據(jù)。待測試覆蓋被測CPU 所有的寄存器鏈后,寄存器測試輪數(shù)加 1。
在指令集測試中,須不斷對特定數(shù)據(jù)進(jìn)行運(yùn)算,在每次運(yùn)算結(jié)束后都將運(yùn)算結(jié)果與預(yù)期的正確結(jié)果進(jìn)行比較,若兩者相等,則認(rèn)為此次指令運(yùn)算正確;若不相等,則認(rèn)為此次指令運(yùn)算出現(xiàn)錯(cuò)誤,并記錄運(yùn)算錯(cuò)誤的指令。通常CPU 架構(gòu)不同,其指令集所包含的指令數(shù)量也不同,包括但不限于加、減、乘、除、移位、跳轉(zhuǎn)、比較、浮點(diǎn)運(yùn)算、壓棧和出棧等。以浮點(diǎn)運(yùn)算指令為例,其測試流程如圖6 所示。
圖6 浮點(diǎn)運(yùn)算指令集測試程序流程Fig. 6 Flow chart for the instruction set test of floating point arithmetic
PCIE 接口下掛SATA 硬盤,在試驗(yàn)過程中須反復(fù)執(zhí)行向硬盤指定地址范圍內(nèi)寫入預(yù)設(shè)數(shù)據(jù),然后讀出并與預(yù)設(shè)數(shù)據(jù)比較的操作。如果出現(xiàn)寫入與讀出數(shù)據(jù)不等的情況,則認(rèn)為發(fā)生1 次PCIE 接口功能中斷錯(cuò)誤。
LMU 接口掛載總?cè)萘? GByte 的DDR 器件,在試驗(yàn)過程中須反復(fù)執(zhí)行向DDR 指定地址范圍寫入預(yù)設(shè)數(shù)據(jù),然后讀出并與預(yù)設(shè)數(shù)據(jù)比較的操作。如果出現(xiàn)寫入與讀出數(shù)據(jù)不等的情況,則認(rèn)為發(fā)生1 次LMU 接口功能中斷錯(cuò)誤。
CAN、 QSPI、 SPI、 UART、 GPIO、 GMAC、I2C 均為通信接口,測試方式相同。以CAN 接口為例,在試驗(yàn)過程中,硬件連接上將CAN 接口進(jìn)行回環(huán),循環(huán)地使CAN 0 發(fā)送預(yù)設(shè)數(shù)據(jù),CAN 1 接收數(shù)據(jù),并將發(fā)送和接收的數(shù)據(jù)進(jìn)行比較:如果兩者相等,則認(rèn)為CAN 接口功能正常;如果不相等,則認(rèn)為發(fā)生1 次CAN 接口功能中斷錯(cuò)誤。
接口功能測試程序?qū)ν庠O(shè)接口依次進(jìn)行測試,當(dāng)完成所有外設(shè)接口的功能測試后,接口測試輪數(shù)加1。
單粒子效應(yīng)試驗(yàn)中,由上位機(jī)下發(fā)各測試項(xiàng)的測試指令,并顯示測試信息。上位機(jī)監(jiān)控界面如圖7所示。
圖7 上位機(jī)監(jiān)控界面Fig. 7 Monitoring interface of the upper computer
試驗(yàn)電路板、JTAG 工具板與上位機(jī)之間采用預(yù)先設(shè)定的幀格式通過串口進(jìn)行通信,波特率為115 200 bit/s,數(shù)據(jù)每0.1 s 刷新1 次。上位機(jī)對接收到的數(shù)據(jù)幀進(jìn)行解析,并將數(shù)據(jù)顯示出來。
需要強(qiáng)調(diào)的是,對于存儲器和寄存器測試,由于COTS CPU 的片內(nèi)存儲器、寄存器數(shù)量萬倍于宇航級CPU,且SJTAG 接口速率有限,完成1 輪存儲器、寄存器測試的時(shí)間相對較長,因此無法通過其測試輪數(shù)信息判斷存儲器、寄存器測試是否正確執(zhí)行。本方案在上位機(jī)監(jiān)控界面中增加了存儲器、寄存器測試狀態(tài)指示信息:當(dāng)測試程序正常運(yùn)行時(shí),該指示信息會呈現(xiàn)0、1 交替跳變的狀態(tài)。
試驗(yàn)流程是1 個(gè)或多個(gè)試驗(yàn)測試項(xiàng)的集合,需要將上述所設(shè)計(jì)的測試項(xiàng)全部涵蓋,同時(shí)要盡可能節(jié)省測試時(shí)間,能夠同步進(jìn)行的測試項(xiàng)要并行開展。本文將COTS CPU 的單粒子效應(yīng)試驗(yàn)流程劃分為SEL 測試、SEU 測試和SEFI 測試3 部分。
SEL 測試項(xiàng)只涉及監(jiān)控被測CPU 各路電源電流,因此可與其他2 項(xiàng)測試同步進(jìn)行。SEU 測試針對CPU 片內(nèi)存儲器和寄存器,包含存儲器單粒子翻轉(zhuǎn)、寄存器單粒子翻轉(zhuǎn)測試項(xiàng)。SEFI 測試針對CPU 各外設(shè)接口功能和指令運(yùn)算功能,包含典型指令集測試、接口功能測試項(xiàng)。需要強(qiáng)調(diào)的是,當(dāng)通過SJTAG 鏈路直接訪問CPU 內(nèi)部存儲器、寄存器時(shí),會導(dǎo)致CPU 功能異常,故SEU 和SEFI 測試需要分別進(jìn)行。
SEU 測試流程如圖8 所示,啟動(dòng)JTAG 工具板中的存儲器/寄存器測試程序后,打開上位機(jī)監(jiān)控界面查看測試程序是否運(yùn)行正常,之后開始進(jìn)行重離子轟擊,并通過上位機(jī)界面監(jiān)控被測CPU 的存儲器、寄存器是否發(fā)生翻轉(zhuǎn),通過電流監(jiān)控軟件監(jiān)測被測CPU 各路電流是否正常,當(dāng)發(fā)生SEL 或SEU 事件后,記錄現(xiàn)象并保存數(shù)據(jù),供試驗(yàn)結(jié)束后進(jìn)行分析。
圖8 SEU 測試流程Fig. 8 Flow chart for SEU test
SEFI 測試流程如圖9 所示,啟動(dòng)接口、指令集功能測試程序后,打開上位機(jī)監(jiān)控界面查看測試程序是否運(yùn)行正常,之后的測試步驟與SEU 測試流程一致。
圖9 SEFI 測試流程Fig. 9 Flow chart for SEFI test
采用某國產(chǎn)ARM 架構(gòu)高性能COTS CPU 作為被測CPU,根據(jù)上述方案并結(jié)合被測CPU 實(shí)際硬件參數(shù)設(shè)計(jì)試驗(yàn)電路板、編寫相應(yīng)測試程序。通過故障注入的方式,驗(yàn)證單粒子效應(yīng)試驗(yàn)檢測系統(tǒng)是否能夠檢測到被測CPU 發(fā)生單粒子效應(yīng),以及所檢測出的單粒子翻轉(zhuǎn)和單粒子功能中斷次數(shù)是否準(zhǔn)確。
對于存儲器翻轉(zhuǎn)測試故障注入驗(yàn)證,首先向被測CPU 片內(nèi)存儲器全部地址空間寫入預(yù)設(shè)數(shù)據(jù)0x5555aaaa;再隨機(jī)向存儲器地址空間范圍內(nèi)的20 個(gè)地址寫入數(shù)據(jù)0x4555aaaa,人為造成1 位數(shù)據(jù)翻轉(zhuǎn);最后將存儲器內(nèi)數(shù)據(jù)讀出并與預(yù)設(shè)數(shù)據(jù)進(jìn)行比較,此時(shí)上位機(jī)監(jiān)控界面顯示存儲器單粒子翻轉(zhuǎn)次數(shù)為20(見圖10),表明測試系統(tǒng)在該測試輪中準(zhǔn)確檢測出存儲器翻轉(zhuǎn)故障。
圖10 存儲器翻轉(zhuǎn)測試故障注入驗(yàn)證結(jié)果Fig. 10 Fault injection verification results in memory flip test
寄存器翻轉(zhuǎn)測試故障注入驗(yàn)證除了故障注入目標(biāo)為CPU 片內(nèi)寄存器外,其余操作與存儲器翻轉(zhuǎn)測試故障注入驗(yàn)證一致,上位機(jī)監(jiān)控界面顯示的結(jié)果(見圖11)同樣表明測試系統(tǒng)在該測試輪中準(zhǔn)確檢測出寄存器翻轉(zhuǎn)故障。
圖11 寄存器翻轉(zhuǎn)測試故障注入驗(yàn)證結(jié)果Fig. 11 Fault injection verification results in register flip test
反復(fù)進(jìn)行上述操作,結(jié)果表明該測試系統(tǒng)能夠準(zhǔn)確檢測出CPU 的存儲器、寄存器是否發(fā)生單粒子翻轉(zhuǎn)及發(fā)生次數(shù)。
以浮點(diǎn)運(yùn)算指令為例,通過GDB 單步調(diào)試的方式運(yùn)行測試程序。在程序執(zhí)行完浮點(diǎn)運(yùn)算指令后、執(zhí)行運(yùn)算結(jié)果和預(yù)期結(jié)果比較代碼之前,對保存浮點(diǎn)運(yùn)算指令結(jié)果的變量進(jìn)行修改,人為注入1 次浮點(diǎn)運(yùn)算指令故障,此時(shí)上位機(jī)監(jiān)控界面顯示數(shù)據(jù)處理指令錯(cuò)誤執(zhí)行次數(shù)為1(見圖12),準(zhǔn)確檢測出該注入故障。
圖12 典型指令集測試故障注入驗(yàn)證結(jié)果Fig. 12 Fault injection verification results in typical instruction set test
其他指令均采用相同方式進(jìn)行故障注入驗(yàn)證,結(jié)果表明該測試系統(tǒng)能夠準(zhǔn)確檢測出被測CPU 指令運(yùn)算是否發(fā)生單粒子效應(yīng)及發(fā)生次數(shù)。
對于PCIE 接口,在測試過程中隨機(jī)向SSD 指定地址范圍寫入錯(cuò)誤數(shù)據(jù)。對于LMU 接口,在測試過程中隨機(jī)向DDR 指定地址范圍寫入錯(cuò)誤數(shù)據(jù)。對于其他外設(shè)接口,由于采用的是回環(huán)測試方法,可以將其硬件通路的某一點(diǎn)進(jìn)行接地處理,人為制造故障。此時(shí)上位機(jī)監(jiān)控界面顯示各接口功能異常次數(shù)不斷上漲(見圖13);當(dāng)停止故障注入后,上位機(jī)監(jiān)控界面顯示接口測試輪數(shù)繼續(xù)上漲,而各接口功能異常次數(shù)不再增加。這表明該測試系統(tǒng)能夠準(zhǔn)確檢測出被測CPU 各外設(shè)接口功能是否發(fā)生異常。
圖13 接口功能測試故障注入驗(yàn)證結(jié)果Fig. 13 Fault injection verification results in interface function test
本文從確定測試項(xiàng)、試驗(yàn)電路板硬件設(shè)計(jì)、測試程序設(shè)計(jì)和試驗(yàn)流程4 方面考慮,設(shè)計(jì)了一套COTS CPU 地面單粒子效應(yīng)試驗(yàn)檢測系統(tǒng);采用某國產(chǎn)ARM 架構(gòu)COTS CPU 作為被試樣品,根據(jù)所提出方案和CPU 實(shí)際硬件參數(shù)設(shè)計(jì)試驗(yàn)電路板、編寫相應(yīng)測試程序,并通過故障注入的方式進(jìn)行驗(yàn)證。結(jié)果顯示,該檢測系統(tǒng)能夠準(zhǔn)確檢測出被測CPU是否發(fā)生單粒子效應(yīng)及發(fā)生次數(shù),為后續(xù)進(jìn)行單粒子效應(yīng)試驗(yàn)提供可靠的測試系統(tǒng)支撐。
其他不同架構(gòu)、不同型號的COTS CPU 均可參照本文所提出的方案,結(jié)合CPU 實(shí)際硬件參數(shù)設(shè)計(jì)具有針對性的地面單粒子效應(yīng)試驗(yàn)檢測系統(tǒng)。