彭 博,袁三男,沃煜敏
(上海電力大學(xué) 電子與信息工程學(xué)院,上海 200120)
隨著軍用領(lǐng)域系統(tǒng)的功能日漸強大,結(jié)構(gòu)愈發(fā)復(fù)雜,軟件已逐漸成為武器級系統(tǒng)中關(guān)鍵的組成部分,許多重要、復(fù)雜的功能都是由軟件來實現(xiàn)的[1]。軍用系統(tǒng)嵌入式軟件能否安全可靠的運行直接關(guān)系到機載設(shè)備(如衛(wèi)星、飛機、飛行器等)系統(tǒng)裝備演練任務(wù)的成敗,使得嵌入式技術(shù)在苛刻性環(huán)境中需要滿足更高的條件。而傳統(tǒng)的開發(fā)工具很難有效應(yīng)對這些苛刻性系統(tǒng)的設(shè)計、調(diào)試、集成、測試及維護,導(dǎo)致嵌入式系統(tǒng)在開發(fā)及驗證過程中存在如下瓶頸:
周期性:嵌入式軟件開發(fā)過程中,需等待相匹配的硬件設(shè)備,才可以開展后續(xù)的開發(fā)與調(diào)試工作,導(dǎo)致整個項目的周期拖長;
困難性:在軟件開發(fā)調(diào)試階段,受影響于硬件設(shè)備的時間與成本問題,導(dǎo)致軟件無法在正常節(jié)點內(nèi)完成開發(fā)與調(diào)試;遇到系統(tǒng)及設(shè)計異常問題時,很難正常開展測試和驗證工作[2];
安全性:有些系統(tǒng)(如武器裝備)在沒有通過充分的軟件驗證,就直接進行軟硬件集成會具有一定的危險性,導(dǎo)致設(shè)備損壞甚至人員傷亡;
低效性:在測試系統(tǒng)性能和解決Bug時,硬件設(shè)備只能在1∶1的實時環(huán)境中進行,一定程度上增大測試難度,導(dǎo)致項目周期長、可靠性低,甚至面臨失敗的危險;
基于上述問題所導(dǎo)致的不良現(xiàn)象,在衛(wèi)星等系統(tǒng)的各部分實物生產(chǎn)之前,需要為控制系統(tǒng)的方案設(shè)計和技術(shù)設(shè)計提供一個盡可能真實的虛擬仿真系統(tǒng);這個虛擬的目標(biāo)系統(tǒng)是以數(shù)字孿生為基礎(chǔ)設(shè)計的仿真模型,模擬出與真實硬件相同的功能,而后根據(jù)此模型設(shè)計出本文介紹的虛擬仿真系統(tǒng),以及在該系統(tǒng)中實現(xiàn)的控制軟件開發(fā)、調(diào)試、測試、閉環(huán)仿真驗證和故障注入測試等功能,使控制系統(tǒng)設(shè)計結(jié)果的正確性與合理性能夠在該平臺上得到驗證。
數(shù)字孿生的概念最早出現(xiàn)于美國國防部提出的Digital Twin技術(shù),用于航空航天飛行器的健康維護與保障[3]。2012年NASA 給出了數(shù)字孿生的概念描述:數(shù)字孿生是指充分利用物理模型、傳感器等數(shù)據(jù),對物理實體的組成、特征、功能和性能進行數(shù)字化定義和建模的過程;它作為虛擬空間中對實體產(chǎn)品的鏡像,反映了相對應(yīng)物理實體產(chǎn)品的全生命周期過程[4]。 Gartner在2018年和2019年的十大戰(zhàn)略科技發(fā)展趨勢中把數(shù)字孿生定位為重要技術(shù)之一。
2012年,電子科技大學(xué)的羅天成以QEMU為模擬器工具,設(shè)計實現(xiàn)了一個基于虛擬機技術(shù)的飛控計算機虛擬仿真系統(tǒng)[5];該虛擬平臺為該型號機載飛控軟件的測試開發(fā)提供了便利的支持環(huán)境。2018年,電子科技大學(xué)的歐陽潤宇基于真實飛控計算機,搭建了能在設(shè)計初期對飛控計算機架構(gòu)設(shè)計方案進行驗證分析的虛擬化驗證平臺,為系統(tǒng)的可靠性分析提供了一種嶄新的方法[6]。
近年來,數(shù)字孿生成為推動創(chuàng)新和成果的強大技術(shù),它的發(fā)展得到我國的政策支持,不僅是5G賦能產(chǎn)業(yè)鏈上的重要一環(huán),與5 G三大場景之一的萬物互聯(lián)需求強耦合,還可以應(yīng)用到電網(wǎng)中,使得電網(wǎng)智能化轉(zhuǎn)型的速度得到迅速提升。目前,數(shù)字孿生技術(shù)的重要程度已經(jīng)和云計算、AI、5 G等一樣,上升到國家高度。
本文基于數(shù)字孿生技術(shù),建立對星載設(shè)備的實物進行結(jié)構(gòu)和功能模擬的數(shù)字孿生模型,設(shè)計出可以嵌入CPU模擬器、片上外設(shè)、通信板卡、電源等設(shè)備的全數(shù)字虛擬仿真系統(tǒng)。其中,基于數(shù)字孿生技術(shù)對主設(shè)備上掛載的從設(shè)備進行功能性模擬的動力學(xué)模型如圖1所示;該模型仿真有虛擬仿真系統(tǒng)中加載的各種單機設(shè)備寄存器以及數(shù)據(jù)的輸入輸出接口等,是對真實單機設(shè)備的數(shù)字仿真,其中輸出端out是處理器模塊輸出到數(shù)據(jù)庫的數(shù)據(jù),輸入端in是處理器模塊接收來自數(shù)據(jù)庫的數(shù)據(jù);各個仿真的單機數(shù)據(jù)再經(jīng)過虛擬仿真系統(tǒng)解析后,將轉(zhuǎn)換成16位整型數(shù)據(jù),并顯示到系統(tǒng)界面之中;對動力學(xué)模型的輸入輸出端解析出的結(jié)構(gòu)和數(shù)據(jù)如圖2所示。
圖1 基于數(shù)字孿生驅(qū)動的動力學(xué)模型
圖2 虛擬仿真系統(tǒng)解析出的動力學(xué)模型IO接口圖
該系統(tǒng)不僅完成了對各種型號中涉及的CPU、內(nèi)存、看門狗、中斷控制器等硬件設(shè)備的功能模擬,還添加了超實時仿真系統(tǒng),能夠?qū)χ骺赜嬎銠C軟件進行快速全面的系統(tǒng)測試,實現(xiàn)全數(shù)字高速閉環(huán)仿真運行,適用于軍事武器裝備以及高校實驗項目等各個領(lǐng)域的系統(tǒng)級仿真。
本文所設(shè)計的虛擬仿真系統(tǒng)運用數(shù)字孿生驅(qū)動真實目標(biāo)機的方法,實現(xiàn)與真實目標(biāo)機相同的功能;該系統(tǒng)包含虛擬目標(biāo)機和超實時仿真軟件等部分;其中,虛擬目標(biāo)機是用于對不同處理器、外圍設(shè)備和動力學(xué)模型中單機設(shè)備的數(shù)字仿真,實現(xiàn)故障模擬與注入功能;超實時仿真軟件用于協(xié)同控制以及超實時環(huán)境下的系統(tǒng)仿真[7]。其內(nèi)部子系統(tǒng)協(xié)同工作的結(jié)構(gòu)如圖3所示。
圖3 虛擬仿真系統(tǒng)模塊化結(jié)構(gòu)圖
本文設(shè)計的虛擬仿真系統(tǒng)較傳統(tǒng)仿真系統(tǒng)而言,獨創(chuàng)性地添加了可以達到實時仿真速率20倍以上的超實時運行模式,并可以進行在線調(diào)試、在線故障注入、以及封裝多種通信協(xié)議的通用性數(shù)字軟總線等特色功能。下面將對本文所設(shè)計的仿真系統(tǒng)核心部分做詳細介紹。
虛擬目標(biāo)機是在保持高速交叉仿真完整嵌入式系統(tǒng)的基礎(chǔ)上設(shè)計的虛擬開發(fā)與驗證平臺,獨創(chuàng)性地將圖形化建模的思想引入虛擬系統(tǒng)的搭建過程中,可以用作系統(tǒng)級的開發(fā)、調(diào)試、測試和驗證。
虛擬目標(biāo)機的界面通過MFC多文檔模式框架進行編寫,主要由CPU模擬器、虛擬芯片、虛擬內(nèi)存等核心部件構(gòu)成;其中,CPU模擬器模擬目標(biāo)CPU的內(nèi)核及其行為,如模擬PowerPC處理器的指令集仿真,將目標(biāo)機的指令轉(zhuǎn)換到宿主機上執(zhí)行,從而實現(xiàn)直接通過宿主機執(zhí)行目標(biāo)機上的代碼[8];虛擬芯片是對硬件板卡中設(shè)備進行數(shù)字化處理,封裝成可以直接調(diào)用的函數(shù)庫,包括串口、并口、中斷控制器、各種通信總線控制器等;虛擬內(nèi)存是對用于存儲的RAM區(qū)、Flash以及系統(tǒng)寄存器的數(shù)字仿真。
虛擬目標(biāo)機結(jié)合被控仿真對象以及其他仿真子系統(tǒng)一起構(gòu)成虛擬目標(biāo)系統(tǒng);各個功能組件通過已經(jīng)封裝的內(nèi)部總線進行通信,確定好主框架后,通過C++為編程語言對虛擬目標(biāo)機的各個組件進行功能實現(xiàn)。例如操作、編輯模式的切換,可執(zhí)行固件程序的加載,對目標(biāo)碼文件的解釋執(zhí)行,解釋函數(shù)、全局變量的地址分配情況等;解析目標(biāo)碼與源碼的對應(yīng)關(guān)系,并在此基礎(chǔ)上對調(diào)試功能的開發(fā)、運行以及加載模型代碼等功能。
基本功能實現(xiàn)后,再編寫通用設(shè)備模型。設(shè)備模型是虛擬目標(biāo)機的組成和搭建的基本單元,通過調(diào)用VC++運行庫集合包(Runtime Library/Pack)以及代碼編寫來實現(xiàn),是對CPU外圍電路、單機寄存器、通信電路板等設(shè)備進行的模塊化處理;然后生成虛擬目標(biāo)機可兼容的DLL文件;最后通過圖形化、積木式拖拽功能的開發(fā),實現(xiàn)對內(nèi)部各個模型進行快速關(guān)聯(lián)與連線,使其相互間通過虛擬總線進行通信,從而完成對物理設(shè)備的純數(shù)字仿真。虛擬目標(biāo)機對物理設(shè)備的數(shù)字化處理以及進行模塊化編程如圖4所示。
圖4 虛擬目標(biāo)機環(huán)境示意圖
通用處理器模塊主要提供計算資源、程序/數(shù)據(jù)存儲器、硬件看門狗功能、1553B總線、內(nèi)總線管理等功能。處理器模塊仿真的硬件行為包括CPU芯片、存儲器芯片、內(nèi)總線隔離驅(qū)動線路、FPGA芯片、1553B總線接口芯片和其他邏輯電路等。在虛擬目標(biāo)機中數(shù)字化仿真通用處理器模塊時,需要設(shè)計匹配的指令集,通過指令集去控制處理器實現(xiàn)相應(yīng)功能,指令仿真方法采用模擬處理器的執(zhí)行,從仿真內(nèi)存中取指令。
以PowerPC處理器為例,指令集以字段的形式分析內(nèi)部指令,通過主機處理器模擬執(zhí)行過程中的行為,然后將運行結(jié)果回寫到相應(yīng)的虛擬仿真寄存器中;最后運用緩存技術(shù),得到較高的執(zhí)行性能[9];整個計算流程采用C語言完成,并由VC++編譯器編譯。
PowerPC處理器的仿真設(shè)計包含整數(shù)單元、浮點單元、指令集、動態(tài)編譯和解釋執(zhí)行五部分;其中,指令集是處理器單元中用來計算和控制計算機系統(tǒng)的一套指令的集合;整點運算性能和浮點運算性能是用來反映CPU處理數(shù)據(jù)的能力;解釋執(zhí)行即傳統(tǒng)系統(tǒng)中使用的實時運行模式,其執(zhí)行速度較慢[10];動態(tài)編譯采用LLVM提供的接口進行指令的操作處理,即超實時仿真系統(tǒng)中設(shè)計的超實時運行模式。
整數(shù)單元是專為可靠性要求高的空間和軍事應(yīng)用設(shè)計,且支持錯誤檢測;其采用了精簡指令集RISC結(jié)構(gòu),可以使得指令執(zhí)行速度更為精準(zhǔn)。為保證指令執(zhí)行速度,整數(shù)單元設(shè)計采用四級流水線技術(shù),允許并行執(zhí)行多條指令,整體過程分為4個部分:取指、解碼、執(zhí)行和寫回,所有階段實行并行工作方式,即一次性可以處理多達四條不同的指令。浮點單元也使用四階段的指令流水線工作,可以同時滿足單精度和雙精度浮點指令。
在整個處理器模塊開發(fā)過程中,時常存在有錯誤指令的情況;針對此現(xiàn)象,不僅可以通過定位具體函數(shù)模塊找出對應(yīng)的出錯指令解決問題,還可以通過動態(tài)編譯技術(shù)對整個處理器架構(gòu)和指令集進行優(yōu)化。
故障注入是一種可靠性驗證技術(shù),通過受控實驗向系統(tǒng)中刻意引入故障,并觀察系統(tǒng)中存在故障時的行為[11]。
故障注入技術(shù)分為多種,此次虛擬仿真系統(tǒng)采用的是基于軟件的故障注入以及對嵌入式系統(tǒng)與處理器相關(guān)的故障注入;基于軟件的故障注入,是在軟件級生成錯誤,從而模擬硬件級的故障行為;其注入方式有很多種,如修改內(nèi)存或寄存器數(shù)據(jù),通過應(yīng)用軟件生成故障或者通過底層軟件如操作系統(tǒng)運行故障[12];具體實現(xiàn)主要是通過操作各下位單機的被測仿真模型接口實現(xiàn)對接口功能性及各分系統(tǒng)間的數(shù)據(jù)鏈路的故障模擬,如寄存器故障、存儲器故障、CPU總線故障等。具體實現(xiàn)流程如圖5所示。
圖5 故障注入邏輯流程圖
故障模擬是在日常開發(fā)時,為了保證硬軟件的準(zhǔn)確性以及代碼的健壯性,需要模擬各種故障測試[13];通過修改虛擬目標(biāo)機的內(nèi)存、寄存器和圖形化接口仿真軟件中模擬的數(shù)據(jù)內(nèi)容完成對軟件的故障注入測試,以確保在這些故障出現(xiàn)時軟件仍能正確工作。在系統(tǒng)全速運行時虛擬仿真系統(tǒng)實時監(jiān)控外圍設(shè)備各單機發(fā)生故障的狀態(tài)顯示如圖6所示,它不僅可以監(jiān)控仿真單機發(fā)生故障的狀態(tài),還可以監(jiān)控發(fā)生故障后接收的異常數(shù)據(jù),從而可以作為系統(tǒng)調(diào)試與維護時的有效輔助,使得虛擬仿真系統(tǒng)中主控計算機軟件可以進行快速全面的系統(tǒng)測試,突出了其在各個領(lǐng)域中的實用性。
圖6 虛擬仿真系統(tǒng)監(jiān)控的故障狀態(tài)
本文提供對處理器全部引腳的模擬及故障注入,通過硬件方式實現(xiàn)對被測系統(tǒng)進行最低程度的干涉,以加速測評系統(tǒng)容錯機制;通過觀測和分析系統(tǒng)對所注入故障的反應(yīng),從而提供可靠的數(shù)據(jù),保證系統(tǒng)容錯機制。
超實時仿真系統(tǒng)軟件的功能基于C++語言開發(fā),界面通過MFC添加控件實現(xiàn),各個控件之間以及虛擬目標(biāo)機和其他開發(fā)工具之間的通信通過封裝好的虛擬總線完成。超實時仿真系統(tǒng)內(nèi)部邏輯采用固定增量推進法推進仿真時間,由系統(tǒng)定時器控制仿真時間推進;仿真時間的推進可以加快系統(tǒng)運行速度,從而達到超實時仿真的目的[14],
經(jīng)過實測,超實時仿真系統(tǒng)的仿真速率可以達到20倍以上的超實時仿真測試要求。例如,以PowerPC處理器為例,設(shè)處理器運行性能為MMIPS(百萬條指令/秒),PowerPC處理器主頻是NMHz,則處于該處理器中的仿真倍數(shù)N的計算公式為P=M/N,可以使整個仿真目標(biāo)系統(tǒng)在執(zhí)行過程中,達到20倍以上的超實時仿真測試要求。在虛擬仿真系統(tǒng)中,可以對相關(guān)處理器進行性能監(jiān)控,不僅可以監(jiān)視出優(yōu)化后的性能指標(biāo),還可以實時顯示出特定性能下的超實時倍數(shù);PowerPC處理器實際運行性能監(jiān)控如圖7所示,在主頻設(shè)置為10 MHz的情況下,其性能指數(shù)可達到400 MIPS,根據(jù)超實時仿真倍數(shù)計算方法可知,此時超實時速率可達到基于硬件時鐘的40倍。
圖7 PowerPC處理器性能監(jiān)控
在具體工作任務(wù)中,多個仿真實體之間需要進行協(xié)同仿真,即對多個仿真對象之間進行時序同步。在其過程中,為了加快仿真速度,多個實體之間采用并行運行的方式實現(xiàn)相互間通過封裝好的數(shù)字軟總線進行指令收發(fā)與數(shù)據(jù)傳輸。與此同時,為了驗證開發(fā)工具輸出數(shù)據(jù)及超實時運行速率的準(zhǔn)確性,超實時仿真工具還可以通過JTAG連接硬件設(shè)備嵌入式目標(biāo)機和仿真測試設(shè)備,從而與硬件板卡直接通信,得出真實的實驗數(shù)據(jù)。不僅如此虛擬仿真系統(tǒng)還可以直接通過虛擬總線連接到服務(wù)器與硬件設(shè)備,更好地增加了虛擬工具與物理設(shè)備的聯(lián)動性。其整體結(jié)構(gòu)如圖8所示。
圖8 超實時仿真子系統(tǒng)示意圖
虛擬仿真系統(tǒng)中設(shè)計的通信中間件協(xié)議,是基于分布式數(shù)據(jù)通訊總線協(xié)議的實時分布式網(wǎng)絡(luò)中間件而設(shè)計的,以實時數(shù)據(jù)分布式服務(wù)作為聯(lián)合試驗的基礎(chǔ)通信設(shè)施,進行對象管理和時間管理等功能;能夠?qū)崿F(xiàn)大型異構(gòu)仿真系統(tǒng)的靈活集成、配置、部署及運行;底層采用發(fā)布/訂閱方式通信總線,提供實時、可靠、穩(wěn)定、高效的數(shù)據(jù)通信[15]。
由于不同項目所使用的處理器以及硬件設(shè)備不同,從而需要依據(jù)特定需求設(shè)計出虛擬仿真系統(tǒng)與外部設(shè)備模型之間的通信協(xié)議,即模擬SPI、RS422、1553b、AD等通信設(shè)備的硬件板卡,實現(xiàn)數(shù)字軟總線標(biāo)準(zhǔn)化。比如仿真AD/DA的通信機制時,首先實現(xiàn)AD和DA寄存器以及相關(guān)控制寄存器的邏輯功能;然后進行AD轉(zhuǎn)換,把接收到動力學(xué)模型中的模擬量數(shù)據(jù)轉(zhuǎn)換成數(shù)字量并存儲到對應(yīng)的AD寄存器中;最后完成對DA轉(zhuǎn)換的操作,即把軟件要發(fā)送的數(shù)字量轉(zhuǎn)換成模擬量,通過數(shù)字軟總線定義的接口發(fā)送給動力學(xué)模型,最終完成對AD/DA通信過程的數(shù)字仿真;在具體實驗中對AD采集寄存器讀取的數(shù)據(jù)以及計算出的采樣結(jié)果如表1所示,其中計算公式為D=A/(10/4096)+ 0×800,D是輸出結(jié)果,即轉(zhuǎn)化后的數(shù)字量,A是采樣值,即模擬量。
表1 具體寄存器模擬信號采集對照表
在進行分布式虛擬總線標(biāo)準(zhǔn)化時,模擬的各個通信設(shè)備原理類似,下面以1553b通信板卡進行數(shù)字化處理為例。1553b系統(tǒng)采用模塊化設(shè)計,主要仿真模擬1553b通信板卡芯片功能,包括芯片上的寄存器,內(nèi)存空間,中斷等[16]。系統(tǒng)由一個BC終端、2個RT終端和一個BM終端構(gòu)成,提供所需要的總線和終端模塊。首先模擬出芯片在BC模式和RT模式的寄存器和內(nèi)存空間,而后根據(jù)芯片手冊實現(xiàn)通信板卡芯片中所有寄存器的功能,最后在通過相關(guān)通信協(xié)議實現(xiàn)對所使用寄存器和內(nèi)存RAM區(qū)域的讀寫操作、各個節(jié)點之間的數(shù)據(jù)收發(fā),以及消息的解析和邏輯流程的模擬仿真,中斷模擬仿真等,對應(yīng)的總體結(jié)構(gòu)如圖9所示。當(dāng)用戶使用本文提出的虛擬仿真系統(tǒng)時,必須遵循對應(yīng)的通信協(xié)議,從而大大提升了用戶的使用效率。
圖9 1553B物理總線拓撲關(guān)系邏輯圖
內(nèi)置調(diào)試器為嵌入式軟件在虛擬開發(fā)過程提供調(diào)試環(huán)境,支持多種調(diào)試手段對代碼問題進行快速定位,虛擬目標(biāo)機調(diào)試器的設(shè)計過程如下:
1)對ELF、COFF、HEX等格式的固件可執(zhí)行文件的調(diào)試信息(一般為Stabs,DWARF2/3的符號)進行解析,提取出變量分配地址、函數(shù)分配代碼段地址,函數(shù)對應(yīng)的源碼的路徑及目標(biāo)碼對應(yīng)源碼的行數(shù)信息。
2)解釋二進制目標(biāo)碼。按照CPU指令的存儲格式解析二進制目標(biāo)碼到匯編偽代碼。
3)在調(diào)試界面添加畫布,把匯編指令和源碼打印到畫布中。用戶可根據(jù)自己需要和目標(biāo)系統(tǒng)執(zhí)行情況查看各種調(diào)試信息。
基于調(diào)試器的基本功能,實現(xiàn)對目標(biāo)板控制功能的仿真,進一步完成在源碼和目標(biāo)碼上設(shè)置斷點,通過在調(diào)試環(huán)境中添加時間判斷,根據(jù)不同的事件調(diào)用不同的接口函數(shù)的方式,實現(xiàn)各種控制功能,如:斷點、單步執(zhí)行、進函數(shù)、出函數(shù)、執(zhí)行過函數(shù)、復(fù)位、停止等基本調(diào)試控制,并支持在任何時刻暫停程序[17];相關(guān)功能以及在線調(diào)試過程中操作的寄存器對應(yīng)的地址和數(shù)據(jù)如圖10所示。
在搭建好虛擬仿真系統(tǒng)的開發(fā)環(huán)境后,編寫用于模擬硬件功能的外設(shè)模型,通過圖形化編程的方法對整個系統(tǒng)進行數(shù)字化仿真;而后由超實時仿真工具發(fā)出指令,協(xié)同控制虛擬目標(biāo)機向動力學(xué)模型收發(fā)數(shù)據(jù),對仿真結(jié)果進行數(shù)據(jù)監(jiān)視、錯誤排查以及超實時加速仿真等功能。
作為虛擬仿真系統(tǒng)的重要組成部分,以虛擬目標(biāo)機為載體,首先編寫處理器與片上外設(shè)模型,模擬動力學(xué)模型中涉及的各種單機設(shè)備寄存器通道、通用處理器模塊、存儲器、AD/DA采集、二次電源燈等功能。各個設(shè)備模型之間通過節(jié)點連接建立聯(lián)系,其中虛擬內(nèi)核用于加載主處理器的DLL文件,并向外圍設(shè)備發(fā)送指令,而后外圍設(shè)備再通過虛擬總線控制ROM、RAM等內(nèi)存空間進行讀寫操作,以及串口輸出、模數(shù)轉(zhuǎn)換、LED等控件的功能實現(xiàn);還可以通過中斷觸發(fā)控制動力學(xué)模型包含的各個單機設(shè)備所處的狀態(tài),最終把實驗結(jié)果通過串口打印輸出,也可以通過堆棧區(qū)監(jiān)控數(shù)據(jù)。
虛擬仿真系統(tǒng)的超實時仿真子系統(tǒng)采用了嵌入式系統(tǒng)調(diào)試技術(shù)、HIL(硬件在環(huán))半實物仿真技術(shù)、基于模型開發(fā)技術(shù)、系統(tǒng)測試與驗證技術(shù)及分布式數(shù)據(jù)總線技術(shù),可廣泛應(yīng)用于高安全性、高可靠性系統(tǒng)研制的各個階段及各種開發(fā)模式之中;不僅支持傳統(tǒng)的模式開發(fā),還支持迭代開發(fā)。該系統(tǒng)適用于各研制階段的開發(fā)、仿真與驗證;下面將對兩種應(yīng)用場景展開介紹。
在應(yīng)用場景一中,將虛擬目標(biāo)機與真實物理外設(shè)進行連接,外接如1553B、AD/DA、CAN等通信板卡實物,采用HIL硬件在環(huán)仿真技術(shù)對復(fù)雜設(shè)備控制器的開發(fā)與測試過程進行全數(shù)字化模擬,然后通過真實通信板卡和仿真工具輸出精準(zhǔn)數(shù)據(jù)給HIL硬件在環(huán)仿真與測試系統(tǒng),最后把解析出的測試序列回傳給虛擬目標(biāo)機之中,由此得出的數(shù)據(jù)和時序可以用于后續(xù)的全數(shù)字化虛擬仿真系統(tǒng)中測試驗證;采用這種模式可實現(xiàn)對虛擬目標(biāo)系統(tǒng)的硬件在環(huán)仿真與驗證,適合于在系統(tǒng)研制初期對系統(tǒng)設(shè)計方案進行試驗與評估,以及系統(tǒng)研制中期的實驗數(shù)據(jù)驗證與調(diào)試。虛擬仿真系統(tǒng)的應(yīng)用場景一的系統(tǒng)結(jié)構(gòu)如圖11所示。
圖11 場景一系統(tǒng)結(jié)構(gòu)圖
在應(yīng)用場景二中,由虛擬仿真系統(tǒng)中模擬的虛擬外設(shè)下發(fā)指令給被控對象模型,待被控對象接收到命令后,再輸出數(shù)據(jù)給圖形化界面測試系統(tǒng),用于數(shù)據(jù)記錄與分析;而后,經(jīng)過實測的序列以激勵的形式回讀給虛擬目標(biāo)機之中,完成虛擬仿真系統(tǒng)與外部系統(tǒng)的閉環(huán)聯(lián)合調(diào)試;其中所有的功能組件由封裝的數(shù)字軟總線進行交互與調(diào)度,最終實現(xiàn)基于虛擬仿真系統(tǒng)的全數(shù)字化仿真驗證,適合于在系統(tǒng)研制后期對系統(tǒng)得出的實驗結(jié)果進行分析與驗證,以及在系統(tǒng)交付后的維護與調(diào)優(yōu)。虛擬仿真系統(tǒng)的應(yīng)用場景二的系統(tǒng)結(jié)構(gòu)如圖12所示。
圖12 場景二系統(tǒng)結(jié)構(gòu)圖
本文設(shè)計的虛擬仿真系統(tǒng)適用于很多領(lǐng)域,以在航天領(lǐng)域的建設(shè)為例,被用于面向衛(wèi)星任務(wù)地面操控系統(tǒng)的聯(lián)調(diào)聯(lián)試與任務(wù)仿真訓(xùn)練,配合總體地面單位完成衛(wèi)星發(fā)射任務(wù),以及在各分系統(tǒng)之間的集成與測試、陣地部署,與外部系統(tǒng)集成聯(lián)試等演練任務(wù)中起到了重要的作用。
虛擬仿真系統(tǒng)對衛(wèi)星的具體應(yīng)用方面,首先對星載計算機做數(shù)字化處理,搭建衛(wèi)星的虛擬化運行環(huán)境,然后模擬處理器模塊、內(nèi)存空間、定時器、中斷、IO接口等硬件設(shè)備以及掛載的單機設(shè)備[18],最后在搭建好星載設(shè)備運行所需要的數(shù)字化仿真環(huán)境后,加載超實時仿真系統(tǒng),使用固定增量推進法快速推動星上時間與動力學(xué)模型時間,使得軌道動力學(xué)的推進步長加快達到快速推進目的;待系統(tǒng)推進到設(shè)定的時間后,同時更新星上系統(tǒng)鐘、動力學(xué)模型系統(tǒng)鐘、軌道信息、姿態(tài)信息等到最新狀態(tài),從而實現(xiàn)虛擬衛(wèi)星的快速連續(xù)運行,達到幾十倍于物理測試環(huán)境下的快速測試。做到提前測試衛(wèi)星姿態(tài)與軌道的運行狀態(tài),以及對衛(wèi)星的發(fā)射、軌控等策略的運用、分析和預(yù)案進行有效性與合理性的保障,降低了任務(wù)的風(fēng)險,有效保證了任務(wù)的圓滿成功。
虛實結(jié)合技術(shù)是一種將實物設(shè)備與數(shù)字模型進行聯(lián)合試驗的系統(tǒng)及方法,以驗證數(shù)字模型的正確性;常應(yīng)用于武器裝備的性能試驗、故障排查等方面[19]。
本文通過虛實結(jié)合技術(shù)將虛擬仿真系統(tǒng)中模擬的處理器和周邊設(shè)備的性能指標(biāo)、與動力學(xué)模型交互的數(shù)據(jù)、通過總線進行傳輸?shù)臄?shù)據(jù)以及在超實時仿真倍數(shù)下進行的快速仿真結(jié)果進行準(zhǔn)確性驗證。進行數(shù)據(jù)驗證時,把超實時仿真軟件的仿真速率調(diào)整至一倍速,運行測試程序,再把測試程序運行在物理設(shè)備上,通過在某個進程中設(shè)置相同的斷點,監(jiān)控兩種開發(fā)環(huán)境中讀取到的寄存器和內(nèi)存的值,比較兩者數(shù)據(jù)可以得出虛擬仿真系統(tǒng)中的仿真結(jié)果與真實實物中得出實驗結(jié)果一致,監(jiān)控的結(jié)果如表2所示。
表2 虛擬仿真系統(tǒng)與真實目標(biāo)機實驗結(jié)果對比
為了確保數(shù)據(jù)驗證的可靠性,首先要保證虛擬設(shè)備模擬器與真實設(shè)備協(xié)同時的實時性;在與真實時間基準(zhǔn)相同的環(huán)境下進行單倍數(shù)指令采集,尤其是仿真外部激勵行為,通過虛擬CPU執(zhí)行cycle數(shù)的方式確保虛擬設(shè)備模擬器與真實設(shè)備協(xié)同時的實時性[20]。比如外部GPS秒脈沖信號仿真、周期定時、外部中斷觸發(fā)等,在結(jié)合宿主機本身資源的情況下,諸如bios時鐘進行輔助精確定時等。
在通過虛擬總線進行數(shù)據(jù)傳輸時,考慮到設(shè)計的通用化,將主要體現(xiàn)在對于各種類型通信板卡的統(tǒng)型設(shè)計,其核心為虛擬目標(biāo)機與板卡通過集成API接口調(diào)用的通用化設(shè)計,結(jié)合可配置計算機預(yù)留的多種擴展接口,根據(jù)實際資源情況進行靈活搭配,實現(xiàn)虛實結(jié)合完成系統(tǒng)驗證。
其中模擬1553B總線的標(biāo)準(zhǔn)內(nèi)部處理邏輯時,通過Alta 1553硬件驅(qū)動板提供的二次開發(fā)API接口實現(xiàn)與真實1553B節(jié)點的數(shù)據(jù)傳輸,從而實現(xiàn)虛實結(jié)合的半實物仿真環(huán)境的部署,核心是通過調(diào)用1553板卡驅(qū)動程序,完成虛擬環(huán)境和真實設(shè)備之間的橋接。
虛擬仿真系統(tǒng)的運行環(huán)境在X86主機下,可以同時仿真出搭載不同處理器的設(shè)備;其每秒仿真的指令條數(shù)比真實物理環(huán)境下快很多倍,也可以使超實時倍數(shù)設(shè)置成等比模式,達到與實際硬件平臺相同節(jié)拍速度。根據(jù)第二章給出的論證,在保證數(shù)據(jù)真實性的前提下,本文所設(shè)計虛擬仿真系統(tǒng)的超實時倍數(shù)可以達到實時運行速率的20倍以上。
目前,大部分虛擬仿真系統(tǒng)在仿制處理器指令時會選擇解釋執(zhí)行模式,即實時運行;它的執(zhí)行速率較慢,執(zhí)行流程分為取址、譯碼、執(zhí)行三部分[21]。
而本次虛擬仿真系統(tǒng)選擇的是動態(tài)編譯模式,即超實時運行,它在虛擬仿真系統(tǒng)中引入編譯器技術(shù)中的動態(tài)二進制編譯機制;其運行速率較快,可以大幅度提高仿真速度[22]。動態(tài)編譯執(zhí)行流程分為6步:1)根據(jù)PC地址從內(nèi)存中取出一組目標(biāo)指令;2)將該組目標(biāo)指令翻譯成中間語言IR指令;3)使用底層虛擬機(LLVM)編譯和優(yōu)化技術(shù)生成X86本地代碼;4)把編譯過的指令塊放入Cache中;5)執(zhí)行該指令塊代碼,調(diào)用處理器運行函數(shù);6)從Cache中查找下一個指令塊,若找到則繼續(xù)執(zhí)行,沒有則繼續(xù)從內(nèi)存中取出一組目標(biāo)指令,重復(fù)上述操作[23]。執(zhí)行流程如圖13所示。
圖13 動態(tài)編譯執(zhí)行流程
該平臺可以對接入分布式總線的仿真實體引入同步命令及應(yīng)答機制,實現(xiàn)仿真計算機與模型之間的運行時序與真實目標(biāo)機中運行一致,使誤差小于一個節(jié)拍。在保證誤差范圍內(nèi),不僅可以通過改善硬件設(shè)備環(huán)境的性能,提升虛擬仿真系統(tǒng)的超實時倍數(shù),還可以通過增加代碼的魯棒性等方式,具體方法介紹如下:
1)運用動態(tài)二進制翻譯技術(shù):以目標(biāo)平臺的二進制碼為輸入,通過調(diào)用LLVM的API接口,把目標(biāo)平臺二進制碼翻譯成LLVM中間代碼。整個翻譯過程中將中間代碼拆分成Tag和Translate兩個部分并進行兩遍掃描。第一遍是預(yù)先分析代碼的性質(zhì),并把每一條目標(biāo)代碼指令的信息保存到一個Tag表中;第二遍掃描的時候?qū)Υa進行翻譯[23]。這種掃描過程為真正的翻譯提供了必要的信息,簡化了系統(tǒng)的復(fù)雜度,從而把一個復(fù)雜的系統(tǒng)拆分為兩個相對簡單的系統(tǒng),一定程度上降低了開發(fā)難度和風(fēng)險;
2)快速內(nèi)存訪問:內(nèi)存訪問的快慢會影響整個系統(tǒng)的速度;對內(nèi)存的操作可以通過使用LLVM中間語言實現(xiàn),實現(xiàn)方法類似于對數(shù)組的操作;首先通過指針計算語句計算一段地址的數(shù)據(jù)在模擬內(nèi)存中的偏移量,然后計算讀寫地址在模擬內(nèi)存中的偏移量,通過load/store指令讀寫,從而在一定程度上簡化了內(nèi)存操作的過程。該模式下的運行時間比外調(diào)C函數(shù)庫的方式實現(xiàn)內(nèi)存訪問速度提高了數(shù)倍以上;
3)在多個線程訪問同一個全局資源時使用原子操作,能夠確保所有線程不會在同一時間內(nèi)訪問相同的資源;也就確保了在同一時刻只有唯一的線程對這個資源進行訪問[24]。由于原子操作更加接近底層,因此相比于以互斥對象對共享資源的訪問的保護,具有更高的效率;
4)在開發(fā)虛擬仿真系統(tǒng)和外設(shè)模型時,盡量使用位運算代替乘法和除法運算;對于存取函數(shù)以及其它函數(shù)體比較短或者性能關(guān)鍵的函數(shù),盡可能多的使用內(nèi)聯(lián)函數(shù),使目標(biāo)代碼更加高效;
通過上述設(shè)計方案及改進方法,不僅完善了虛擬仿真系統(tǒng)的實用性、標(biāo)準(zhǔn)性、真實性及高效率地提升仿真結(jié)果,還提升了虛擬仿真系統(tǒng)測試時的超實時倍數(shù),極大提高了對數(shù)字裝備的準(zhǔn)確結(jié)果輸出及快速測試,這也是本文虛擬仿真系統(tǒng)的一個重要功能。
本文以虛擬仿真系統(tǒng)的開發(fā)過程為研究對象,基于數(shù)字孿生技術(shù)添加了數(shù)字軟總線、在線調(diào)試功能以及故障模擬與注入等功能,為嵌入式軟件開發(fā)提供一個全生命周期的純數(shù)字系統(tǒng)開發(fā)和驗證平臺,適用于PowerPC等通用處理器的系統(tǒng)之中,可以應(yīng)用于航空航天領(lǐng)域等諸多領(lǐng)域之中。不同于目前常用的全物理環(huán)境和半物理仿真環(huán)境,基于該平臺可以很好地解決現(xiàn)有嵌入式軟件開發(fā)及驗證過程中存在的問題,如各種軍事裝備在投入使用前進行測試、演習(xí)與故障排除時,提前判別流程是否合理;出差錯時,如何去補救;如何尋找合適的解決方案以及備用方案等問題。不僅如此,本文還引入了超實時仿真系統(tǒng)的概念,以及提升超時倍數(shù)的方法,用于減少對目標(biāo)計算機測試環(huán)節(jié)的依賴,增大測試效率,從而大大縮短開發(fā)測試的周期,可以應(yīng)用到軟件研制的各個階段,實現(xiàn)軟硬件的平行開發(fā),具有硬件系統(tǒng)不具備的諸多優(yōu)勢,是硬件開發(fā)、測試環(huán)節(jié)的有效補充。