孫川川,高瑛珂,李圣龍,趙云富,梁賢賡
隨著空間技術的發(fā)展,面向宇航應用的電子系統(tǒng)朝著小型化、集成化、高性能、低功耗等方向發(fā)展[1].片上系統(tǒng)(SoC,system on chip)是一種系統(tǒng)級集成化設計方案,即在單芯片上集成處理器、存儲器、外設控制器、IO接口等模塊,在集成度、性能、成本、功耗、可靠性等方面具有優(yōu)勢,良好地契合了空間電子產(chǎn)品的發(fā)展需求,得到了廣泛研究和應用[2-3].與商用SoC應用相比,面向宇航應用的SoC由于復雜的空間環(huán)境等因素,對可靠性提出了更高的要求,需要進行可靠性設計[4-5].處理器在程序正常執(zhí)行過程中,需要處理外設中斷請求以及程序執(zhí)行時出現(xiàn)的各種異常、錯誤情況,可以將復位、外設中斷請求、存儲器數(shù)據(jù)訪問中止、指令執(zhí)行異常等統(tǒng)稱為異常.隨著片上系統(tǒng)功能、復雜度增加,高效、可靠地處理各種異常,對于提高SoC性能及可靠性具有重要意義[6].
本文實現(xiàn)了面向宇航應用的高可靠SoC異常處理系統(tǒng)設計,為提高系統(tǒng)可靠性,一方面處理器及異常處理系統(tǒng)寄存器進行冗余設計;另一方面在SoC片上SRAM及各外設存儲模塊引入硬件EDAC檢錯/糾錯(糾一檢二)機制[7].采用中斷控制器統(tǒng)一管理眾多的外設中斷請求,通過軟件配置中斷源的使能、禁止、判優(yōu)、屏蔽等功能[8].對存儲模塊EDAC校驗邏輯產(chǎn)生的一位錯和二位錯異常采用不同的硬件處理機制,一位錯通過中斷控制器以異步異常方式處理,二位錯通過總線反饋信號以精確異常方式處理,保證了異常響應的效率和系統(tǒng)可靠性.
SoC系統(tǒng)中存在不同類型的異常,例如數(shù)據(jù)訪問異常、指令訪問異常、指令執(zhí)行異常、外設中斷請求等.外設中斷請求又可根據(jù)響應速度分為普通外設中斷和快速外設中斷,快速外部中斷優(yōu)先級更高、響應速度更快,常用于對實時要求高的外設中斷.數(shù)據(jù)訪問異常是存儲器數(shù)據(jù)訪問出現(xiàn)的異常,例如地址未對齊、地址不存在、地址不允許方問等;指令訪問異常是取指令時產(chǎn)生的異常,在相關指令的執(zhí)行階段將異常信息傳遞給處理器.指令執(zhí)行異常是在協(xié)處理器指令不可用、協(xié)處理器指令執(zhí)行時產(chǎn)生異常、執(zhí)行一條沒有被定義的指令(指令集之外的指令)或者被除數(shù)為零時產(chǎn)生的異常.通常采用中斷控制器負責管理眾多的外設中斷請求,并最終將有效的中斷信號以普通外設中斷或者快速外設中斷傳遞給CPU.處理器對不同異常的響應過程是相似的,如圖1所示,都要經(jīng)歷保護現(xiàn)場、執(zhí)行異常服務程序、恢復現(xiàn)場與返回的過程.CPU開始響應異常時,中止當前正在執(zhí)行的事件,由硬件自動切換到響應異常的模式,硬件自動將程序計數(shù)器和程序狀態(tài)字寄存器的值保存.然后根據(jù)異常響應程序的入口地址,自動跳轉(zhuǎn)至異常響應程序.在異常響應程序的入口地址由軟件實現(xiàn)通用寄存器的入棧保護,然后跳轉(zhuǎn)到異常服務程序.異常服務程序執(zhí)行完后,由軟件恢復程序計數(shù)器、程序狀態(tài)信息和通用寄存器的值.異常響應結束,CPU繼續(xù)處理被異常響應中止的事件.
圖1 異常響應基本流程Fig.1 Basic exception handling procedure
在本文的設計中,采用中斷控制器統(tǒng)一管理眾多的外設中斷請求,中斷控制器可實現(xiàn)各個中斷源的使能、禁止、判優(yōu)、屏蔽等管理功能[8].在片上SRAM、外部存儲模塊(EMIF)、外設控制器RAM等存儲模塊引入硬件EDAC邏輯,實現(xiàn)存儲單元的檢錯和糾錯功能,產(chǎn)生數(shù)據(jù)/指令的EDAC校驗一位錯和二位錯異常信號,對一位錯和二位錯引入不同的硬件處理機制,以兼顧異常響應的實時性和效率.由于硬件EDAC邏輯具有糾正一位錯的功能,一位錯不影響處理器正常運行,將一位錯異常通過中斷控制器以外設中斷方式傳遞給CPU處理;二位錯不能通過EDAC邏輯糾正,影響處理器指令執(zhí)行,二位錯異常通過總線實時反饋給處理器,以精確異常方式處理.
本文異常處理系統(tǒng)設計中采用中斷控制器管理眾多的外設中斷源,除了外設發(fā)起的中斷請求,還包括各個存儲模塊引入EDAC邏輯后產(chǎn)生的一位錯信號,例如SDRAM一位錯、EMIF一位錯、1553B一位錯等.為提高可靠性,本文將中斷控制器的寄存器進行了冗余設計.
圖2 采用中斷控制器的中斷處理架構Fig.2 Interrupt handling model using interrupt controller
每一個連接到中斷控制器的中斷源都有一個唯一的中斷號,處理器通過中斷號識別連接到中斷控制器的中斷源模塊,然后通過各個模塊內(nèi)部的中斷狀態(tài)寄存器查找具體的中斷源,并進行相應的中斷處理.采用中斷控制器的中斷處理架構如圖2所示.中斷控制器可通過軟件配置將眾多的中斷源以普通外設中斷或者快速外設中斷的方式傳遞給CPU.其中快速外設中斷的優(yōu)先級高于普通外設中斷,并且響應速度更快,通常用于對響應實時性要求高的中斷請求.在設計中,通過軟件配置中斷控制器實現(xiàn)各個中斷源的使能、禁止、優(yōu)先級判定、屏蔽等管理功能.
根據(jù)圖1的異常響應流程,在響應異常時,硬件根據(jù)異常類型自動跳轉(zhuǎn)至異常響應程序執(zhí)行,在異常響應程序的設計中,需要考慮異常嵌套的情況[9-10].以外設中斷例,當處理器響應外設中斷請求時,硬件自動將處理器切換至相應模式并跳轉(zhuǎn)至外設中斷入口地址開始執(zhí)行.將通用寄存器壓入堆棧保護后,由于響應中斷時硬件自動保存程序計數(shù)器數(shù)值,函數(shù)調(diào)用時的返回地址和中斷的返回地址保存在同一寄存器中,為防止函數(shù)調(diào)用時產(chǎn)生中斷嵌套,將函數(shù)返回地址覆蓋,導致程序不能正常返回,保護現(xiàn)場后將處理器模式切換至其他模式進行中斷處理,跳轉(zhuǎn)到中斷服務程序后打開相應的中斷屏蔽位使能中斷嵌套,中斷服務程序完成后再切換至中斷模式,完成現(xiàn)場恢復后,CPU返回被中止的事件繼續(xù)執(zhí)行.
圖3 考慮嵌套的中斷響應程序設計Fig.3 Interrupt handling program design considering interrupt nesting
處理器在接收到中斷控制器有效信號后,并不會立即終止指令執(zhí)行,而是執(zhí)行完后續(xù)流水線中的指令后,再響應中斷請求,這種機制保證了處理器的執(zhí)行效率.數(shù)據(jù)/指令的EDAC校驗一位錯可以由硬件邏輯自動更正,不需要cpu立即響應,因此可以通過中斷控制器處理.中斷控制器相關功能經(jīng)過VCS仿真和FPGA板級驗證,結果驗證了設計的正確性.外設中斷請求嵌套的VCS仿真波形如圖4所示,圖中所示為EMIF區(qū)EDAC校驗一位錯中斷(single_err_int)和向OR區(qū)寫入數(shù)據(jù)中斷(wr2or_err_int),后者的優(yōu)先級比前者高,實現(xiàn)了中斷嵌套.clk為系統(tǒng)時鐘,mode_i為處理器的模式標志信號,9代表管理模式,8代表中斷模式.中斷控制器在接收到外設的中斷信號后,經(jīng)過1~10個clk后將有效的中斷請求信號傳遞給處理器,處理器在接收到有效信號后并沒有立即響應,而是繼續(xù)執(zhí)行了流水線中的指令.將已經(jīng)預取的指令執(zhí)行完畢后,再響應中斷請求,保證了處理器指令執(zhí)行的效率.在產(chǎn)生中斷的指令后設計了標記程序,結果表明后續(xù)標記指令在中斷響應前已執(zhí)行.過了約400個clk后,切換處理器狀態(tài)開始響應中斷.在中斷的服務程序中,將標志位清除,外設撤銷中斷請求信號.仿真結果表明,整個中斷響應過程正確無誤.
圖4 外設中斷嵌套響應仿真波形,圖(b)為圖(a)中實線框中放大部分Fig.4 Simulation results of peripheral interrupt nesting. Figure (b) is enlarged view of figure (a) marked with solid wireframe.
圖5 總線RESP錯誤信號時序示意圖Fig.5 Timing diagram of bus RESP error signal
圖6 數(shù)據(jù)校驗雙錯響應仿真波形,圖(b)為圖(a)中實線框中放大部分Fig.6 Simulation results of EDAC double error handling. Figure (b) is enlarged view of figure (a) marked with solid wireframe.
為提高系統(tǒng)可靠性,在SoC的各存儲模塊引入EDAC校驗(糾一檢二)邏輯.與數(shù)據(jù)/指令EDAC校驗產(chǎn)生的一位錯不同,二位錯異常不能被硬件邏輯自動更正,會直接影響處理器指令的繼續(xù)執(zhí)行,需要被立即響應,而經(jīng)過中斷控制器傳遞給CPU中斷請求不會被CPU立即響應,因此二位錯異常不能通過中斷控制器傳遞給處理器,否則CPU使用了取回的錯誤指令或數(shù)據(jù),會導致程序出現(xiàn)錯誤結果.CPU及各片上模塊通過總線互連,總線提供了從設備傳輸反饋信號RESP.從設備可用RESP信號告知主設備傳輸?shù)恼_與否,該信號可用于表示向只讀區(qū)的寫保護錯誤等.圖5所示為總線RESP信號反饋ERROR的時序示意圖,T1時刻傳輸?shù)刂稟及其控制信號,T1-T2為插入的等待狀態(tài),T3時刻檢測到反饋的ERROR信號,T4時刻主設備將總線傳輸狀態(tài)更改為IDLE,取消地址B的傳輸,并將READY信號置為有效.
在硬件設計中,將片上SRAM、EMIF、1553B總線、SPW、SD RAM等存儲模塊的校驗錯誤信號通過總線RESP信號傳遞給處理器.對于數(shù)據(jù)和指令訪問的二位錯異常,處理器分別以數(shù)據(jù)訪問異常和指令訪問異常進行處理.對于不同區(qū)域的數(shù)據(jù)訪問異常,設計了一個寄存器用于查詢發(fā)生多位校驗錯的地址,異常服務程序中根據(jù)校驗錯地址分別進行處理.
采用VCS仿真和FPGA板級驗證的方法驗證了設計的有效性.圖6所示為處理器響應EMIF存儲空間EDCA校驗雙錯異常的仿真波形圖.clk為系統(tǒng)時鐘,mode_i為處理器的模式標志信號,9代表管理模式,a代表數(shù)據(jù)數(shù)據(jù)訪問異常模式,異常響應前處理器運行在管理模式,開始響應數(shù)據(jù)異常時,處理器自動切換至數(shù)據(jù)異常模式.數(shù)據(jù)訪問異常的產(chǎn)生是隨機的,因此數(shù)據(jù)訪問異常的響應程序必須考慮異常嵌套的情況.具體的響應程序結構與外設中斷類似,都是在對應的異常模式下保護現(xiàn)場后,切換到管理模式進行異常響應,異常響應結束后,再切換回數(shù)據(jù)異常模式恢復現(xiàn)場.數(shù)據(jù)訪問異常和指令訪問異常的響應過程是類似的,不同之處在于異常響應程序的入口地址不同,具體的異常處理由軟件實現(xiàn).仿真驗證中,在數(shù)據(jù)訪問指令后設計了標記指令,產(chǎn)生數(shù)據(jù)異常后,CPU沒有執(zhí)行后續(xù)指令.從圖中可以看出,從EDAC校驗二位錯信號產(chǎn)生到處理器切換到數(shù)據(jù)異常模式處理該異常,只經(jīng)過了不到40個時鐘周期.數(shù)據(jù)訪問異常產(chǎn)生后,處理器立即進行響應,并沒有繼續(xù)執(zhí)行后續(xù)指令.這種精確異常處理機制,保證了指令和數(shù)據(jù)校驗二位錯的有效性和實時性.
本文基于一款面向宇航應用的高可靠SoC,實現(xiàn)了其異常處理系統(tǒng)設計.采用中斷控制器處理眾多的外設中斷請求,為提高系統(tǒng)可靠性,對SoC的存儲資源引入了硬件EDAC檢錯、糾錯機制,產(chǎn)生校驗一位錯和二位錯異常信號,將不影響處理器運行的一位錯異常通過中斷控制器以異步中斷方式傳遞給處理器;將影響程序執(zhí)行的二位錯異常通過總線反饋信號以精確異常方式處理.仿真結果表明,該異常處理系統(tǒng)可正確處理各種處理器內(nèi)部及外設異常.