• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種1750A指令集仿真軟核設計與驗證

      2022-06-01 13:17:46李士剛祝周榮
      計算機測量與控制 2022年5期
      關鍵詞:指令集故障注入遙測

      李士剛,祝周榮

      (海裝駐上海地區(qū)第六軍事代表室,上海 201109)

      0 引言

      國產(chǎn)P1750A的研制成功并大量投入使用,規(guī)避了1750芯片完全依賴進口的風險,使得MIL-STD-1750A指令集已經(jīng)成為我國星載彈載計算機常用指令集之一,它提供多種數(shù)據(jù)類型,包括16位、32位整數(shù)和32位、48位浮點數(shù),以及直接尋址、間接尋址、立即尋址、短變址、長變址尋址等十三種尋址方式,指令類型有130種。

      通常星載彈載計算機的結構是CPU+FPGA結合的方式來控制各個存儲模塊和IO模塊,如看門狗電路、存儲器控制功能(包括EDAC)、總線接口芯片控制電路等。CPU軟件和FPGA產(chǎn)品都有程序的概念,都要進行專門的驗證和測試,現(xiàn)有的測試方式通常是將CPU軟件和FPGA產(chǎn)品分開測試,CPU軟件在硬件平臺上進行測試,而FPGA產(chǎn)品只能通過仿真器對CPU時序的讀寫IO時序和讀寫SRAM時序進行單一模擬,但是實際CPU時序會根據(jù)各種指令集產(chǎn)生不同時序和不同時序組合,因此現(xiàn)有測試方法僅能滿足簡單測試用例的實施,缺少通用性,時序產(chǎn)生的隨意性和主觀性較強,不能真正反映實際CPU時序的運行情況,從而導致FPGA內部設計隱患無法發(fā)現(xiàn)。因此需要有一種測試方法,既能實現(xiàn)實際意義上CPU時序的組合,又能進行某些安全性、強度、單粒子翻轉等異常測試激勵故障注入,從而實現(xiàn)軟硬件聯(lián)合仿真,并完全滿足測試覆蓋率要求。

      本文提出一種CPU+FPGA的仿真模型搭建方法,設計了一種精簡1750仿真軟核,實現(xiàn)了基于1750A指令集架構微處理器仿真軟核和FPGA軟硬件聯(lián)合仿真驗證方法。該精簡1750仿真軟核能在執(zhí)行星載彈載CPU程序的過程中,恰當產(chǎn)生該微處理器各引腳輸出信號、并根據(jù)該微處理器各引腳輸入信號(如中斷等)激發(fā)程序正確執(zhí)行相應的響應處理程序,實現(xiàn)真正意義上的軟硬件聯(lián)合仿真。

      1 通用仿真模型搭建框架

      該通用仿真模型參照硬件實際情況進行構建,同時還應建立PROM的仿真驗證模型和CAN總線控制器的仿真驗證模型,就像搭建一臺單機一樣,將FPGA和CPU仿真軟核的各個信號按照硬件接口圖或者原理圖的連接方式進行連接,實現(xiàn)數(shù)字化的仿真驗證平臺,如圖1所示。模擬整個硬件環(huán)境,主要驗證整個軟硬件系統(tǒng)包括FPGA產(chǎn)品和CPU軟件的實現(xiàn)功能,相當于對裝有正式CPU軟件的單機進行測試,從而保證整個系統(tǒng)功能的正確性。驗證人員需要將CPU軟件轉換為二進制執(zhí)行代碼,載入到PROM中運行。

      測試內容不僅包括通常的應用功能,如接口模塊的控制和應用層協(xié)議幀的驗證。更重要的是還可以進行空間寄存器單粒子翻轉、空間狀態(tài)機單粒子翻轉、中斷信號異常等在硬件上無法 模擬的故障安全性驗證等測試。此外,由于仿真模型可以記錄下內總線的所有操作記錄,因此可以對操作記錄進行分析,并將該操作記錄和PROM中的程序指令地址中的指令數(shù)據(jù)進行比對,從而可以得到目標碼覆蓋率結果。

      利用該通用仿真模型進行軟硬件協(xié)同仿真驗證不僅可以進行RTL級仿真驗證(前仿),還可以進行動態(tài)時序仿真驗證(后仿),將不同溫度和電壓工況下的FPGA的電路延時放入仿真中進行執(zhí)行運算,與真實系統(tǒng)更為接近,對各接口的時序測試更為精準。

      如圖1所示,基于1750A指令集軟核的FPGA第三方驗證通用激勵模型包括起主動控制作用的MIL-STD-1750A指令集架構微處理器軟核、提供系統(tǒng)時鐘和復位電路等仿真輸入模塊、用于仲裁總線控制的CAN總線控制器仿真模塊、系統(tǒng)正常信號監(jiān)控仿真測試模塊、存儲數(shù)據(jù)的SRAM存儲仿真模塊和用于抗單粒子翻轉EDAC仿真測試模塊、中斷濾波仿真測試模塊、用于調試的RS422串口協(xié)議仿真測試模塊和用于存放二進制碼星載程序的PROM存儲仿真。顯而易見,精簡1750仿真軟核在該仿真激勵模型中起了至關重要的作用,其功能包括:能夠依據(jù)MIL-STD-1750A指令集架構規(guī)范完成指令功能,能夠執(zhí)行P1750A典型應用系統(tǒng)的工作流程,能夠進行多種典型的故障注入和相應調試,能夠進行內部寄存器和外部存儲器的任意單粒子翻轉場景設置,能夠通過用戶界面程序進行的配置和調試操作。

      圖1 基于1750A指令集軟核的FPGA第三方驗證通用激勵模型

      2 仿真軟核內部體系結構

      該仿真軟核參照P1750A芯片,使用32位內總線結構,由3部分總線構成,如圖2所示,連接一個24 bitx24 bit的乘法器(Multiplier)、一個32位的運算器(ALU)、一個32位移位網(wǎng)絡(shift network)、一個多端口寄存器文件控制器(Registerfile)、一個狀態(tài)記錄模塊(Flags)和一個地址計算單元(Address generator),此外,還內置了一個時序生成模塊(Sequencer)、一個外圍IO設備控制模塊(IO control)和一個存放微指令代碼的ROM(Microcode ROM)。其中,Sequencer內部主要是一個狀態(tài)機,由系統(tǒng)晶振控制時鐘產(chǎn)生處理器時序和控制信號。Microcode ROM是一個可存放1 408個64 bit字的小ROM,可用于存儲初始程序、中斷響應、總線響應、指令預取和自測試程序等。

      圖2 精簡1750A仿真軟核的內部體系結構

      3 關鍵技術及設計方法

      3.1 中斷處理設計

      中斷處理的完整流程如圖3所示,其過程概括起來可分為鎖存、檢測、跳轉和返回四大步驟。以下將逐一闡述各個步驟的具體流程。

      圖3 中斷處理過程

      1)鎖存:

      在不同的時間節(jié)點將各個信號在鎖存至中斷懸掛寄存器或故障寄存器,具體實現(xiàn)如表1所述。

      表1 鎖存實現(xiàn)

      2)檢測:

      檢測中斷的時間節(jié)點主要為每條指令執(zhí)行結束后、下一條指令開始執(zhí)行前。此時檢測優(yōu)先級判斷邏輯給出的中斷請求信號,若為有效則自動調轉至中斷處理服務微程序。由于1750A標準要求move等長指令在各個子周期間允許被打斷,所以對此條指令須單獨處理。不僅要在指令過程中檢測中斷的發(fā)生,還要在跳轉時將返回地址修改至當前move指令的地址。

      3)跳轉:

      跳轉進行了表2兩種情況處理方式設計。

      表2 跳轉方式

      4)返回:

      中斷處理程序通常由LST指令返回。該指令會自動裝載跳轉前的處理器配置和狀態(tài),將IC指向跳轉前的地址,并自動裝載指令流水線。根據(jù)1750A標準的要求,LST執(zhí)行失敗會導致中斷不能返回,進而繼續(xù)執(zhí)行下一條指令。CPU的默認行為與此相符,不需要特殊處理。

      3.2 浮點運算單元

      1750A指令集共定義了兩種格式的浮點數(shù):普通浮點數(shù)(32位雙字)和擴展精度浮點數(shù)(48位三字),以及6種浮點數(shù)的操作類型,包括加減乘除以及和定點數(shù)的相互轉換。浮點運算單元依據(jù)FPU指令集中規(guī)定的運算方法對浮點數(shù)進行計算和處理,圖4描述了FPU運算邏輯的工作原理,送入FPU的操作數(shù)首先經(jīng)過預規(guī)格化后根據(jù)不同的操作類型傳送給對應的運算單元,由于加減法和乘除法對操作數(shù)的規(guī)格化要求不一致,故采用了獨立的規(guī)格化模塊。運算結果經(jīng)規(guī)格化和舍入后輸出。浮點數(shù)的比較運算與定點數(shù)不同,無需經(jīng)過實際的減操作,而直接由邏輯引腳給出比較結果。若操作數(shù)不合法或不符合指定的運算規(guī)則,F(xiàn)PU模塊會產(chǎn)生異常。這些異常大多由異常模塊給出,而除數(shù)為零的異常由除法運算器給出。

      圖4 浮點運算單元模塊工作原理示意圖

      圖4所述的浮點運算單元模塊包括加減法、乘法和除法運算功能,且各自獨立,不用的運算單元能夠關閉通道,從而提高仿真驗證效率。

      3.3 故障注入機制設計

      通過調研當前各型號的常見錯誤故障,實現(xiàn)如表3述類型的故障注入,進一步完善軟核的功能。

      表3 故障注入實現(xiàn)類型

      續(xù)表

      在要進行故障注入的時刻點,先讀取要注入故障的寄存器和信號線當前結果,然后通過寫force強制語句強制寄存器和信號線為相反的結果,然后過1微秒后,釋放強制,從而實現(xiàn)故障注入。

      3.4 圖形控制界面

      為方便系統(tǒng)和用戶之間進行交互和信息交換,以圖形的方式提供一套軟核控制機制,提供軟核初始狀態(tài)設置、故障注入、內存管理、調試斷點設置、單步執(zhí)行等功能,主要分為3個部分:頂層配置、內存管理和故障注入,如表4所述。

      表4 圖形控制界面設計部分

      4 仿真驗證和結果分析

      4.1 仿真模型構建

      項目組挑選了某衛(wèi)星型號項目計算機CPU板FPGA和遙測采集FPGA進行仿真驗證,目前主流的仿真驗證方法一般分為2步:1)先是通過仿真器對CPU時序的讀寫IO時序和讀寫SRAM時序進行單一模擬先對計算機CPU板FPGA進行仿真驗證,無法運行真正的CPU程序,而且故障注入方式單一,不能真正反映實際CPU時序的運行情況,不能體現(xiàn)實際外部RAM的運行情況,因此無法發(fā)現(xiàn)計算機CPU板FPGA內部設計較深層次隱患;2)觀察計算機CPU板FPGA輸出時序,由于CPU時序的讀寫IO時序和讀寫SRAM時序本身就是模擬的,具有不確定性,因此對遙測采集FPGA的輸入激勵就存在錯誤的可能性,從而造成遙測采集FPGA測試的不確定。此外,這種主流仿真方法只能進行FPGA產(chǎn)品的語句、分支和狀態(tài)機覆蓋率,對更為關注條件覆蓋率和甚至是翻轉覆蓋率的測試無法達到測試要求。

      利用該1750仿真軟核搭建仿真激勵模型將計算機CPU板FPGA和遙測采集FPGA聯(lián)合起來能夠很好的解決上述2個問題,既能實現(xiàn)實際意義上CPU時序組合的精準輸出,還能聯(lián)合構建2個FPGA同時進行仿真,從而實現(xiàn)系統(tǒng)級軟硬件聯(lián)合仿真,此外還能進行RAM運行情況測試、單粒子翻轉等異常測試激勵故障注入,實現(xiàn)正確的計算機CPU板FPGA和遙測采集FPGA仿真波形,最終滿足各種代碼測試覆蓋率要求。激勵模型頂層連線情況如圖5所示。

      圖5 1750A、CPU板FPGA和遙控遙測FPGA連線

      如圖5所示,該系統(tǒng)聯(lián)合仿真模型主要由1750A仿真軟核、CPU板FPGA和遙測采集FPGA三大模塊組成。其中1750A仿真軟核運行星載程序產(chǎn)生總線時序給CPU板FPGA。CPU板FPGA作為1750A仿真軟核和遙測采集FPGA的橋梁,進行總線時序轉換,此外,還完成圖1中通用激勵模型的功能。遙測采集FPGA實現(xiàn)該系統(tǒng)實際和外部硬件接口的遙控遙測指令控制。

      激勵模型構建完成后,執(zhí)行了一段RAM翻轉檢查的程序。該段程序通過my_printf()函數(shù)調用XIO命令向0x0100端口寫ASCII碼,prints ()函數(shù)用于構造錯誤信息字符串,程序主函數(shù)調用my_printf()輸出一個內容為“RAM TEST ”的字符串,標志著程序開始執(zhí)行,然后將FIELD_BEGIN(0xD000)和FIELD_END(0xD05C)之間的一段RAM區(qū)域初始化為某個數(shù)值(0xF5A9),再將該區(qū)域內的值讀出并與期望值比較,若發(fā)現(xiàn)不同,則調用my_printf()打印類似“<>”字樣的出錯信息,接著,程序將該段被測區(qū)域的數(shù)值讀出后再寫回,以便利用FPGA的數(shù)據(jù)校驗功能修正可能發(fā)生的單粒子翻轉問題。最后,該程序嘗試向0x8030這個只讀區(qū)域寫入內容并檢查是否寫入。

      4.2 RAM區(qū)域讀寫測試

      啟動圖形界面,載入該測試文件程序編譯后結果并執(zhí)行,在執(zhí)行一段時間后暫停軟核,如圖6所述。此時切換到Memory標簽,如圖7所述,可以看到,程序正處于第一個循環(huán),即初始化RAM的階段,此時0xD000至0xD05C之間的內存區(qū)域已經(jīng)被正確初始化,而0xD05D至0xD0FF之間的區(qū)域還未進行初始化。

      圖6 測試文件程序編譯暫停結果

      圖7 RAM區(qū)域讀寫測試截圖

      4.3 單粒子翻轉注入驗證

      分別對0xD040和0xD048兩個單元做單粒子翻轉注入。其中0xD040單元翻轉4位,0xD048單元翻轉1位,如圖8左所示。單粒子翻轉注入完后,切換到Debug標簽并繼續(xù)執(zhí)行,直到整個測試程序執(zhí)行完畢,重新切換到Memory標簽中,檢查剛才注入單粒子翻轉的兩個內存區(qū)域。如圖8右所示,由于0xD048單元僅注入了一位翻轉,此時被內存校驗模塊自動檢測并更正;而0xD040單元,由于同時有4位發(fā)生翻轉,超出了可修復的最大翻轉位數(shù),此單元并未得到修正。

      圖8 單粒子翻轉測試截圖

      4.4 仿真驗證波形分析

      根據(jù)圖5仿真激勵模型,1750A仿真軟核和CPU板FPGA之間的接口時序測試結果如圖9所述,CPU板FPGA和遙控遙測FPGA之間的接口時序測試結果如圖10所示。該仿真模型可以很方便進行模塊間接口時序的測試。

      圖9 1750和CPU板FPGA協(xié)同工作波形

      圖10 CPU板FPGA和遙控遙測FPGA協(xié)同仿真波形

      首先利用軟核通過XIO指令向0x0015、0x0016和0x0017三個端口寫入被測數(shù)據(jù),并通過寫0x0019端口告知遙控遙測寫動作完畢。如圖11所示,四次寫操作分別引起了遙控遙測內部HA15、HA16、HA17和HA19依次產(chǎn)生4個低電平,對應時刻從數(shù)據(jù)線遙控遙測。SD可看到正在寫入的數(shù)據(jù)。此后,軟核進入等待循環(huán),在該循環(huán)中等待遙控遙測將被測數(shù)據(jù)以串行方式寫出。如圖12,遙控遙測以ABCLK時鐘上升沿為同步信號,輸出測試用例所寫入的值,圖中四條縱向白線所隔開的3個波形段分別對應十六進制數(shù)1 234、5 678和90 AB的輸出。測試結果與期望結果相符,該項測試成功。

      圖11 1750A操縱遙控遙測FPGA輸出波形

      圖12 遙控遙測FPGA輸出波形

      4.5 覆蓋率統(tǒng)計

      圖13為仿真驗證執(zhí)行覆蓋率總表,大部分功能模塊和接口的驗證覆蓋率都達到了80%及以上,總覆蓋率超過85%。其中Biu功能模塊的覆蓋率較低,原因是代碼中有一部分采用了宏定義,而VCS仿真無法正確識別這些宏定義,因此在覆蓋率總結中把其作為未覆蓋到的部分。

      圖13 仿真驗證執(zhí)行覆蓋率統(tǒng)計圖

      4.6 效果比對

      從測試結果可以看出,通過使用該1750A軟核,可以明顯提高FPGA代碼的條件覆蓋率和翻轉覆蓋率。在該測試中,執(zhí)行了FIFO讀寫,編/解碼等測試,F(xiàn)PGA的翻轉覆蓋率由41%提高至87%。在測試效率提升方面,原為達到FPGA代碼91%的測試覆蓋率需人工操作4個工作日,利用該軟核后,可在七個小時內完成,測試效率大大提高。

      5 結束語

      本文提出了一種CPU+FPGA的仿真模型搭建方法。首先從通用仿真模型搭建框架入手,介紹了精簡1750仿真軟核的作用和地位,接著在建立了精簡1750仿真軟核內部體系結構的基礎上,對中斷處理機制的實現(xiàn)、浮點運算單元設計方式、故障注入機制設計以及圖形控制界面的實現(xiàn)等關鍵技術進行了闡述,最后搭建了較為完整的1750系列CPU+FPGA的仿真模型平臺并在項目中應用。實驗證明,利用該仿真模型平臺,可極大提高1750系列CPU相關接口的FPGA產(chǎn)品的驗證效率和可靠性。

      猜你喜歡
      指令集故障注入遙測
      模擬訓練裝備故障注入系統(tǒng)研究
      3DNow指令集被Linux淘汰
      電腦報(2021年49期)2021-01-06 18:36:55
      自適應模糊PID控制的遙測方艙溫度調節(jié)方法
      電子制作(2019年11期)2019-07-04 00:34:40
      SM4算法前四輪約減輪故障注入分析
      采用修改-回放原理的1553B故障注入方法
      測控技術(2018年7期)2018-12-09 08:58:10
      某小型無人機遙測軟件設計
      電子測試(2018年13期)2018-09-26 03:30:00
      列車MVB總線故障注入研究
      淺談如何提高遙測狀態(tài)估計合格率
      實時微測量系統(tǒng)指令集及解析算法
      什么是AMD64
      高淳县| 阿拉善右旗| 阜南县| 北宁市| 泰来县| 天长市| 文安县| 保山市| 新源县| 辽宁省| 梁河县| 库伦旗| 会理县| 井冈山市| 凉山| 射阳县| 永善县| 通州市| 宣威市| 黎城县| 南部县| 江川县| 万安县| 南木林县| 博客| 米林县| 丹巴县| 荣昌县| 防城港市| 榆社县| 永和县| 福海县| 张家口市| 甘孜| 新疆| 南京市| 乾安县| 泽库县| 亚东县| 长葛市| 靖宇县|