張 濤,李瑞軍,范延芳
(北京空間飛行器總體設(shè)計(jì)部,北京 100094)
近年來(lái),隨著航天技術(shù)的快速發(fā)展,星載嵌入式軟件在型號(hào)中發(fā)揮著越來(lái)越重要的作用??臻g站、深空探測(cè)等為代表的復(fù)雜航天器呈現(xiàn)出智能化、網(wǎng)絡(luò)化的特點(diǎn),越來(lái)越多的功能將通過(guò)軟件實(shí)現(xiàn),信息流、控制流交互復(fù)雜,任務(wù)、中斷、IO等時(shí)序要求及其嚴(yán)苛。面對(duì)軟件研制任務(wù)激增、研制周期縮短的挑戰(zhàn)和軟件高可靠性和安全性的需求,傳統(tǒng)的基于硬件的星載嵌入式軟件測(cè)試已逐漸不能適應(yīng)新形勢(shì)的要求,存在以下問(wèn)題:
1)硬件設(shè)備定制開(kāi)發(fā),致使型號(hào)研制成本高;軟件測(cè)試設(shè)備都是根據(jù)各個(gè)型號(hào)定制研發(fā)的,不同系列型號(hào)間難以復(fù)用;同時(shí)由于型號(hào)內(nèi)許多人員都有需求,重點(diǎn)型號(hào)和領(lǐng)域有時(shí)還需要配備多套設(shè)備,致使型號(hào)研制的成本非常高。
2)星載嵌入式軟件測(cè)試依賴于硬件研制進(jìn)度,無(wú)法實(shí)現(xiàn)軟硬件同步開(kāi)發(fā)和早期驗(yàn)證。航天器星載軟件測(cè)試嚴(yán)重受制于航天器單機(jī)設(shè)備和地面測(cè)試設(shè)備的研制,測(cè)試啟動(dòng)較晚,導(dǎo)致許多接口和時(shí)序問(wèn)題層層闖關(guān),直到分系統(tǒng)級(jí)或者整星級(jí)測(cè)試的最后階段才暴露出來(lái),對(duì)型號(hào)研制進(jìn)度產(chǎn)生極大影響。
3)傳統(tǒng)的基于硬件的軟件測(cè)試環(huán)境難以對(duì)運(yùn)行狀態(tài)進(jìn)行控制和監(jiān)視、故障注入困難,無(wú)法實(shí)現(xiàn)對(duì)各種飛行工況和異常工況的測(cè)試覆蓋。
全數(shù)字仿真平臺(tái)針對(duì)真實(shí)硬件設(shè)備生產(chǎn)設(shè)計(jì)周期長(zhǎng),成本昂貴、使用資源緊張、狀態(tài)監(jiān)視和故障注入困難等缺陷,利用軟件仿真技術(shù),對(duì)真實(shí)的星載計(jì)算機(jī)進(jìn)行虛擬化建模,從而逼真的模擬硬件目標(biāo)系統(tǒng)[1]。原來(lái)運(yùn)行于星載計(jì)算機(jī)的嵌入式軟件,可以不加修改直接在虛擬平臺(tái)上運(yùn)行,并且其運(yùn)行的動(dòng)態(tài)特性與真實(shí)目標(biāo)機(jī)上一致。利用全數(shù)字仿真平臺(tái),可以在不具備目標(biāo)硬件的情況下,進(jìn)行星載嵌入式軟件開(kāi)發(fā)、調(diào)試、測(cè)試和驗(yàn)證。
SPARC V8(scalable processor ARChitecture version 8)是采用精簡(jiǎn)指令集的CPU指令集架構(gòu),其設(shè)計(jì)的指令集能提高執(zhí)行的效率以及優(yōu)化編譯器生成的代碼,從而使代碼執(zhí)行起來(lái)更為高效、快速[2]。基于SPARC V8架構(gòu)的處理器被廣泛應(yīng)用于航天領(lǐng)域。運(yùn)行于SPARC V8處理器的星載軟件在實(shí)時(shí)嵌入式操作系統(tǒng)的支持下,完成衛(wèi)星遙測(cè)、遙控、總線通信、姿軌控和自主管理等功能。本文提出了一種基于SPARC V8的全數(shù)字仿真平臺(tái)設(shè)計(jì)和實(shí)現(xiàn)方法, 能夠在不具備硬件環(huán)境的情況下,對(duì)星載嵌入式軟件進(jìn)行調(diào)試、測(cè)試和仿真驗(yàn)證。
全數(shù)字仿真平臺(tái)架構(gòu)如圖1所示。主要包括ECLIPSE集成開(kāi)發(fā)環(huán)境、虛擬目標(biāo)機(jī)、虛擬外設(shè)模型、設(shè)備管理器以及其他輔助工具和配置文件。
圖1 全數(shù)字仿真平臺(tái)架構(gòu)
集成開(kāi)發(fā)環(huán)境基于ECLIPSE平臺(tái),結(jié)合CDT(C Developing Toolkit)插件、調(diào)試插件和模擬器插件,結(jié)合編譯器、調(diào)試器等工具,提供了模擬器配置、目標(biāo)應(yīng)用工程管理、目標(biāo)應(yīng)用源代碼編輯、可配置編譯和快捷調(diào)試、仿真器運(yùn)行控制等功能。
底層的虛擬目標(biāo)機(jī)與虛擬外設(shè)模型構(gòu)成了功能趨近硬件的虛擬嵌入式硬件模型,提供了目標(biāo)應(yīng)用程序的仿真執(zhí)行環(huán)境。虛擬目標(biāo)機(jī)支持SPARC V8 CPU處理器的指令集仿真,同時(shí)對(duì)CPU寄存器、存儲(chǔ)器、定時(shí)器、中斷控制器和串口等內(nèi)部結(jié)構(gòu)進(jìn)行仿真。虛擬外設(shè)模型包括通用外設(shè)和用戶自定義外設(shè),通用外設(shè)一般包含1553B總線,659總線芯片,用戶自定義外設(shè)一般包括遙測(cè)、遙控等專用FPGA邏輯芯片。CPU模型還內(nèi)嵌了GDB協(xié)議,與ECLIPSE的CDT插件調(diào)試模塊和目標(biāo)架構(gòu)的GDB工具組成完整的調(diào)試環(huán)境。
作為集成開(kāi)發(fā)環(huán)境與底層模型的適配器,設(shè)備管理器收集IDE提供接口、自身提供接口以及虛擬CPU提供接口,向上對(duì)IDE提供模擬器控制接口,解析模擬器配置文件;向下可依據(jù)配置信息調(diào)用并管理相應(yīng)虛擬設(shè)備,并為虛擬設(shè)備提供統(tǒng)一的模型接口。
虛擬目標(biāo)機(jī)是全數(shù)字仿真平臺(tái)的核心,為目標(biāo)程序測(cè)試和驗(yàn)證提供虛擬的硬件平臺(tái)。虛擬目標(biāo)機(jī)通常包括SPARC V8 CPU模擬器、存儲(chǔ)器仿真、片上外設(shè)如中斷控制器、定時(shí)器等模型仿真。
SPARC V8 CPU模擬器使用了動(dòng)態(tài)二進(jìn)制翻譯器翻譯目標(biāo)指令到本地X86指令,并在指令執(zhí)行時(shí)按照指令的功能操作相應(yīng)的寄存器和觸發(fā)中斷或異常。
2.1.1 寄存器模擬
虛擬CPU內(nèi)核內(nèi)部維持了一個(gè)處理器狀態(tài)結(jié)構(gòu)體變量(記為CPUSTAT),成員包括寄存器變量定義和其他輔助變量定義。在虛擬CPU內(nèi)核初始化時(shí)保存變量CPUSTAT中各目標(biāo)寄存器變量的偏移;在目標(biāo)代碼執(zhí)行開(kāi)始時(shí)將變量CPUSTAT指針存入固定的本地寄存器(記為L(zhǎng)Rx)中,LRx不會(huì)再被用作它途;在需要使用目標(biāo)寄存器(記為T(mén)R)時(shí),以LRx寄存器值為基地址加上保存的目標(biāo)寄存器的偏移,則獲取目標(biāo)寄存器在本地內(nèi)存中的地址,就可取得目標(biāo)寄存器的值或向目標(biāo)寄存器賦值。
2.1.2 指令翻譯與執(zhí)行
虛擬CPU內(nèi)核使用動(dòng)態(tài)二進(jìn)制翻譯技術(shù)將SPARC V8的指令翻譯成本地X86指令,包括目標(biāo)代碼到中間代碼的前端翻譯和中間代碼到本地代碼的后端翻譯兩個(gè)翻譯過(guò)程,如圖2所示。
圖2 動(dòng)態(tài)二進(jìn)制翻譯執(zhí)行
動(dòng)態(tài)二進(jìn)制翻譯以基本塊為翻譯和執(zhí)行的基本單位,其中基本塊為一段一般以跳轉(zhuǎn)指令為結(jié)尾的一段目標(biāo)代碼;采用邊翻譯邊執(zhí)行的策略,只有在執(zhí)行時(shí)翻譯代碼緩存中未發(fā)現(xiàn)待執(zhí)行基本塊才進(jìn)行翻譯和緩存;前端翻譯中還進(jìn)行內(nèi)存管理和異常處理等。
2.2.1 存儲(chǔ)器模擬
存儲(chǔ)器的模擬是將虛擬目標(biāo)存儲(chǔ)器直接綁定到相同大小的本地內(nèi)存上,虛擬目標(biāo)機(jī)訪問(wèn)存儲(chǔ)器實(shí)際是訪問(wèn)綁定的本地內(nèi)存區(qū)域。同時(shí),作為采用大端模式的處理器,在訪問(wèn)存儲(chǔ)器數(shù)據(jù)時(shí)需要進(jìn)行字節(jié)序的調(diào)整。
2.2.2 中斷模擬
中斷和陷阱是兩種異常處理機(jī)制。陷阱是由與特定指令相關(guān)的硬件引起的異常,在引起異常產(chǎn)生的指令運(yùn)行期間觸發(fā);中斷是由處理器的外部事件產(chǎn)生并在指令執(zhí)行期間發(fā)生。
對(duì)于陷阱的模擬是在相關(guān)指令翻譯時(shí)插入陷阱條件判斷邏輯,并在執(zhí)行時(shí)依條件觸發(fā)陷阱,陷阱觸發(fā)后虛擬CPU內(nèi)核進(jìn)入異常處理邏輯;對(duì)于中斷的模擬是通過(guò)置標(biāo)志位使基本塊退出執(zhí)行,虛擬CPU內(nèi)核進(jìn)入異常處理邏輯。虛擬CPU內(nèi)核進(jìn)入異常處理邏輯后,依照硬件邏輯操作相關(guān)寄存器并根據(jù)特定的異常向量表完成程序的跳轉(zhuǎn)。
虛擬中斷控制器在初始化時(shí)以內(nèi)存映射MMIO(MEMORY-MAPPED IO)方式映射寄存器到虛擬CPU內(nèi)核地址空間的指定地址區(qū)域,在虛擬CPU內(nèi)核訪問(wèn)虛擬中斷控制器的寄存器時(shí)觸發(fā)相應(yīng)的寄存器處理邏輯。同時(shí),分配虛擬中斷輸入引腳和中斷輸出引腳,并注冊(cè)中斷信號(hào)輸入回調(diào)。虛擬中斷輸入引腳根據(jù)硬件中斷引腳連接分別接入虛擬片上外設(shè)中斷引腳或虛擬外部中斷引腳,虛擬中斷輸出引腳分別接到虛擬CPU內(nèi)核的中斷引腳,如圖3所示。當(dāng)中斷輸入信號(hào)到來(lái)時(shí)觸發(fā)注冊(cè)的中斷信號(hào)輸入回調(diào)函數(shù),根據(jù)寄存器編程配置進(jìn)行中斷信號(hào)選擇輸出到虛擬CPU內(nèi)核。
圖3 中斷控制器結(jié)構(gòu)示意圖
2.2.3 定時(shí)器模擬
定時(shí)器的寄存器模擬使用虛擬CPU內(nèi)核中的MMIO映射機(jī)制實(shí)現(xiàn)。當(dāng)虛擬CPU內(nèi)核訪問(wèn)到該虛擬定時(shí)器的寄存器地址區(qū)域時(shí)觸發(fā)MMIO的訪問(wèn)回調(diào),在回調(diào)函數(shù)中處理寄存器的訪問(wèn)邏輯。
定時(shí)器的中斷模擬是在虛擬定時(shí)器創(chuàng)建時(shí)創(chuàng)建一個(gè)虛擬中斷引腳,并將其連接到虛擬中斷控制器相應(yīng)引腳上。當(dāng)虛擬定時(shí)器需要觸發(fā)中斷時(shí),向虛擬中斷引腳設(shè)值則會(huì)觸發(fā)虛擬中斷控制器的中斷信號(hào)輸入回調(diào)函數(shù)。
定時(shí)器的計(jì)時(shí)功能模擬依靠虛擬CPU內(nèi)核中的精確減計(jì)數(shù)器機(jī)制實(shí)現(xiàn)。虛擬CPU內(nèi)核中維護(hù)了一個(gè)減計(jì)數(shù)器集合,創(chuàng)建或刪除虛擬定時(shí)器時(shí)會(huì)操作該集合增加或刪減。虛擬CPU內(nèi)核中有獨(dú)立的線程循環(huán)檢查減計(jì)數(shù)器是否計(jì)數(shù)到0,到期后則觸發(fā)創(chuàng)建定時(shí)器時(shí)注冊(cè)的回調(diào)函數(shù)。
2.2.4 串口模擬
串口的寄存器模擬使用虛擬CPU內(nèi)核中的MMIO映射機(jī)制實(shí)現(xiàn)。當(dāng)虛擬CPU內(nèi)核訪問(wèn)到該虛擬串口的寄存器地址區(qū)域時(shí)觸發(fā)MMIO的訪問(wèn)回調(diào),在回調(diào)函數(shù)中處理寄存器的訪問(wèn)邏輯。
串口的中斷模擬是在虛擬串口創(chuàng)建時(shí)創(chuàng)建一個(gè)虛擬中斷引腳,并將其連接到虛擬中斷控制器相應(yīng)引腳上。當(dāng)虛擬串口需要觸發(fā)中斷時(shí),向虛擬中斷引腳設(shè)值則會(huì)觸發(fā)虛擬中斷控制器的中斷信號(hào)輸入回調(diào)函數(shù)。
串口的數(shù)據(jù)流可以定向到虛端口,也可基于虛擬CPU內(nèi)核提供字符驅(qū)動(dòng)選擇定向到本地虛擬串口、TCP端口或UDP端口。當(dāng)數(shù)據(jù)流定向到虛端口時(shí),可以在虛端口的連接端進(jìn)行數(shù)據(jù)交互;定向到其他本地端口時(shí),可以使用本地輔助工具進(jìn)行數(shù)據(jù)交互。
本地端口作為數(shù)據(jù)流傳輸方式時(shí),發(fā)送數(shù)據(jù)通過(guò)相應(yīng)本地端口數(shù)據(jù)發(fā)送接口發(fā)送。當(dāng)循環(huán)檢查線程檢測(cè)到本地端口有數(shù)據(jù)時(shí),會(huì)向虛擬串口詢問(wèn)是否接收數(shù)據(jù),允許后將接收的數(shù)據(jù)返回給虛擬串口,虛擬串口操作相關(guān)寄存器并根據(jù)用戶編程配置決定是否向終端控制器投遞中斷信號(hào)。
對(duì)于虛擬CPU內(nèi)核主動(dòng)要求外設(shè)動(dòng)作的通信,虛擬CPU內(nèi)核訪問(wèn)外設(shè)寄存器時(shí)觸發(fā)寄存器上的MMIO回調(diào)函數(shù),在回調(diào)函數(shù)中實(shí)現(xiàn)外設(shè)的功能。
對(duì)于某些外設(shè)事件發(fā)生要通知虛擬CPU內(nèi)核,虛擬CPU內(nèi)核會(huì)主動(dòng)循環(huán)檢查。虛擬CPU內(nèi)核內(nèi)部使用循環(huán)檢查線程來(lái)檢查虛擬定時(shí)器到期和虛擬串口數(shù)據(jù)到來(lái)等事件,檢測(cè)到這些事件后通知相關(guān)虛擬外設(shè)進(jìn)行相應(yīng)的處理,如寄存器改變和觸發(fā)中斷等操作。虛擬CPU內(nèi)核通過(guò)查詢相關(guān)寄存器或響應(yīng)中斷得知事件源并進(jìn)行相應(yīng)處理。
虛擬外設(shè)模型用來(lái)搭建虛擬目標(biāo)機(jī)的外圍仿真環(huán)境,實(shí)現(xiàn)虛擬目標(biāo)機(jī)與外設(shè)模型的數(shù)據(jù)交互。為了保證被測(cè)軟件的真實(shí)性,虛擬外設(shè)模型的邏輯功能必須與硬件邏輯功能保持一致:即虛擬外設(shè)模型接收到虛擬目標(biāo)機(jī)的輸入輸出請(qǐng)求時(shí),需要根據(jù)硬件邏輯改變自己的狀態(tài)。虛擬外設(shè)模型可為虛擬目標(biāo)機(jī)提供輸入激勵(lì),如模擬上行遙控注入,也可以接收虛擬目標(biāo)機(jī)輸出數(shù)據(jù),如接收下行遙測(cè)輸出。因此,虛擬外設(shè)模型建模是全數(shù)字仿真平臺(tái)開(kāi)發(fā)的一個(gè)重要環(huán)節(jié)。
虛擬外設(shè)模型仿真接口作為虛擬目標(biāo)機(jī)的擴(kuò)展媒介,需要盡可能簡(jiǎn)便直觀地將虛擬CPU內(nèi)核與外設(shè)模型間的不同操作隔離。模型仿真采用單個(gè)函數(shù)以消息類(lèi)型方式分隔操作,提高接口的擴(kuò)展性、易使用性,也保證各接口的單一性。
虛擬外設(shè)模型導(dǎo)出函數(shù)接口如下:
MainProc(MESSAGE Msg, UINT32 uParam)
其中第一個(gè)參數(shù)Msg是消息類(lèi)型,代表不同的操作,共有以下幾種消息類(lèi)型:
1)SETPROPERTY消息用于設(shè)備管理器解析模擬器配置文件中的外設(shè)模型的屬性;
2)INIT消息用于設(shè)備管理器通知外設(shè)模型進(jìn)行端口創(chuàng)建等初始化操作;
3)RESET消息用于設(shè)備管理器通知外設(shè)模型復(fù)位操作;
4)READ/WRITE消息用于設(shè)備管理器通知外設(shè)模型虛擬CPU內(nèi)核正在進(jìn)行uParam參數(shù)指定的IO讀/寫(xiě)操作;
5)PINCONNECT消息用于設(shè)備管理器通知外設(shè)模型虛擬引腳有電平信號(hào)輸入;
6)VWRITE消息用于通知外設(shè)模型大量邏輯數(shù)據(jù)輸入;
7)CLOCK消息用于通知外設(shè)模型uParam指定的時(shí)鐘定時(shí)到期;
8)TERMINATE消息用于通知外設(shè)模型虛擬目標(biāo)機(jī)即將終止,進(jìn)行終止前的資源釋放等操作。
虛擬外設(shè)模型端口是全數(shù)字仿真系統(tǒng)中CPU內(nèi)核與其他設(shè)備模型通信以及模型間通信的接口,包括IO端口、虛端口和PIN引腳。
3.2.1 IO端口設(shè)計(jì)
IO端口是虛擬外設(shè)模型與虛擬CPU內(nèi)核間的通信媒介。IO端口的設(shè)計(jì)包括3個(gè)部分:
1)IO端口初始化。在模型初始化時(shí),IO端口初始化完成端口ID、名稱和類(lèi)型初始化。
2)IO端口配置。設(shè)備管理器會(huì)解析模擬器配置文件中IO端口配置,創(chuàng)建MMIO并在訪問(wèn)回調(diào)函數(shù)中觸發(fā)READ、WRITE消息。IO端口配置默認(rèn)寬度為4字節(jié),可配置其他尺寸表示寄存器區(qū)域。
3)IO端口訪問(wèn)。虛擬CPU內(nèi)核在訪問(wèn)IO端口所處地址區(qū)域時(shí)會(huì)觸發(fā)READ、WRITE消息,在消息回調(diào)中進(jìn)行IO的邏輯處理。
3.2.2 虛端口設(shè)計(jì)
虛端口是設(shè)備模型間大量數(shù)據(jù)的通信媒介。虛端口的設(shè)計(jì)包括3個(gè)部分:
1)虛端口初始化。在模型初始化時(shí),虛端口初始化完成端口ID、名稱和類(lèi)型初始化。
2)虛端口連接配置。設(shè)備管理器會(huì)解析模擬器配置文件中虛端口連接配置,保存虛端口連接關(guān)系。虛端口支持一對(duì)多連接配置。
3)虛端口寫(xiě)操作。在設(shè)備模型進(jìn)行虛端口寫(xiě)操作時(shí),設(shè)備管理器會(huì)依據(jù)虛端口連接關(guān)系向所有連接端虛端口寫(xiě)入數(shù)據(jù)。
3.2.3 PIN引腳連接設(shè)計(jì)
引腳是設(shè)備模型間電平信號(hào)的通信媒介。引腳的設(shè)計(jì)包括3個(gè)部分:
1)引腳初始化。在模型初始化時(shí),引腳初始化完成ID、名稱和類(lèi)型初始化。
2)引腳連接配置。設(shè)備管理器會(huì)解析模擬器配置文件中引腳連接配置,保存引腳連接關(guān)系。引腳支持一對(duì)多連接配置。
3)引腳寫(xiě)操作。在設(shè)備模型進(jìn)行引腳寫(xiě)操作時(shí),設(shè)備管理器會(huì)依據(jù)引腳連接關(guān)系向所有連接端引腳寫(xiě)入電平信號(hào)。
當(dāng)全數(shù)字仿真平臺(tái)啟動(dòng)時(shí),設(shè)備管理器會(huì)解析模擬器配置文件,根據(jù)解析的信息啟動(dòng)相應(yīng)的模擬器并執(zhí)行指定的目標(biāo)應(yīng)用。設(shè)備管理器在模擬器啟動(dòng)時(shí)的主要工作如下:
1)解析全數(shù)字仿真平臺(tái)構(gòu)建所需的模擬設(shè)備,加載相應(yīng)設(shè)備DLL。
2)解析模型內(nèi)存、IO、虛端口、引腳配置,保存所有IO、虛端口和引腳連接關(guān)系。
3)以RESET消息復(fù)位CPU及各虛擬外設(shè)。
全數(shù)字仿真平臺(tái)啟動(dòng)后,設(shè)備管理器在模擬器運(yùn)行中的主要工作如下:
1)在虛擬CPU訪問(wèn)IO端口時(shí),設(shè)備管理器創(chuàng)建IO端口時(shí)的回調(diào)函數(shù)會(huì)觸發(fā),在回調(diào)函數(shù)中向IO端口所屬設(shè)別發(fā)送READ/WRITE消息。
2)在虛擬CPU或外設(shè)模型拉動(dòng)引腳時(shí),設(shè)備管理器查找引腳連接關(guān)系向連接端設(shè)備引腳發(fā)送PINCONNECT消息。
3)在虛擬CPU或外設(shè)模型寫(xiě)虛端口時(shí),設(shè)備管理器查找虛端口連接關(guān)系向連接端虛端口發(fā)送VWRITE消息。
4)當(dāng)虛擬外設(shè)模型創(chuàng)建的定時(shí)器到期時(shí),設(shè)備管理器在定時(shí)器到期回調(diào)函數(shù)中以CLOCK消息通知所屬設(shè)備到期定時(shí)器ID。
為了盡可能保證虛擬目標(biāo)機(jī)、虛擬外設(shè)間時(shí)序統(tǒng)一并與真實(shí)硬件時(shí)序保持一致,虛擬CPU內(nèi)核時(shí)鐘使用指令統(tǒng)計(jì)周期作為基礎(chǔ)。虛擬CPU核在翻譯指令時(shí)一般以跳轉(zhuǎn)指令為結(jié)尾作為一個(gè)基本塊,在每個(gè)基本塊翻譯時(shí)將基本塊內(nèi)所有指令的執(zhí)行周期、取指周期和其他周期求和計(jì)算出基本塊的總時(shí)鐘周期并保存。在目標(biāo)代碼執(zhí)行時(shí),對(duì)所有執(zhí)行的基本塊進(jìn)行時(shí)鐘周期求和,再結(jié)合CPU內(nèi)核的主頻即得到所有執(zhí)行的目標(biāo)代碼耗時(shí),即得到模擬時(shí)間。
虛擬CPU核內(nèi)部的減計(jì)數(shù)器功能就是基于模擬時(shí)間進(jìn)行計(jì)數(shù)的,減計(jì)數(shù)器Tick為1ns。在減計(jì)數(shù)器創(chuàng)建時(shí),根據(jù)目標(biāo)計(jì)數(shù)值和當(dāng)前模擬時(shí)間設(shè)置到期計(jì)數(shù)值,并安裝計(jì)數(shù)到期回調(diào)函數(shù)。虛擬CPU核使用循環(huán)檢查方式檢查當(dāng)前模擬時(shí)間是否達(dá)到減計(jì)數(shù)器到期計(jì)數(shù)值,達(dá)到后觸發(fā)到期回調(diào)函數(shù)進(jìn)行到期邏輯處理。如果減計(jì)數(shù)器是單次計(jì)時(shí)則到期后就刪除,否則減計(jì)數(shù)器的計(jì)數(shù)值復(fù)位并重新開(kāi)始計(jì)數(shù)。仿真平臺(tái)內(nèi)部虛擬設(shè)備的定時(shí)功能均使用減計(jì)數(shù)器實(shí)現(xiàn),這就保證了所有虛擬設(shè)備的時(shí)間是統(tǒng)一的。
本文設(shè)計(jì)與實(shí)現(xiàn)的全數(shù)字仿真平臺(tái)已在航天器多個(gè)型號(hào)的星載軟件測(cè)試中得到應(yīng)用,該平臺(tái)可作為SPARC V8處理器的模擬運(yùn)行平臺(tái),支持RTEMS和VxWorks操作系統(tǒng),同時(shí)提供良好的人機(jī)界面,便于用戶快速搭建虛擬目標(biāo)機(jī)和虛擬外設(shè)環(huán)境,進(jìn)行星載嵌入式軟件運(yùn)行仿真、調(diào)試驗(yàn)證等工作。
通過(guò)測(cè)試程序在硬件實(shí)物上運(yùn)行結(jié)果與全數(shù)字仿真平臺(tái)上的運(yùn)行結(jié)果,遙測(cè)、遙控、總線通信等功能均正確仿真,表1為某個(gè)進(jìn)程相同斷點(diǎn)下目標(biāo)機(jī)與全數(shù)字仿真環(huán)境寄存器和內(nèi)存的值,兩者保持一致,全數(shù)字仿真平臺(tái)運(yùn)行結(jié)果正確。
本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于SPARC V8的星載嵌入式軟件全數(shù)字仿真平臺(tái),該平臺(tái)與基于硬件的測(cè)試平臺(tái)相比具有可重用性強(qiáng)、可快速搭建、成本低廉、高可控性、調(diào)試和測(cè)試手段豐富、支持故障注入等優(yōu)點(diǎn)。該全數(shù)字仿真平臺(tái)已在星載嵌入式軟件型號(hào)研制工作中得到了應(yīng)用,可大大提高軟件的可靠性和安全性,從而保證型號(hào)軟件的質(zhì)量,推動(dòng)航天事業(yè)的發(fā)展。
表1 全數(shù)字仿真與目標(biāo)機(jī)運(yùn)行結(jié)果比對(duì)