基于X86平臺的ARM指令集模擬器的設計
摘要:隨著嵌入式系統(tǒng)軟件的發(fā)展,以及嵌入式應用在各個行業(yè)的普及,嵌入式系統(tǒng)開發(fā)已經(jīng)被越來越多的人所關注。目前,嵌入式軟件更新頻率快,因此要求開發(fā)者在短期內能開發(fā)出具有針對型的應用程序,然而嵌入式系統(tǒng)運行環(huán)境往往是用戶制定,并且運行在特定的硬件環(huán)境中。常規(guī)的軟件開發(fā)方法往往導致嵌入式系統(tǒng)開發(fā)效率低下,同時大幅提高了開發(fā)成本。因此,實現(xiàn)對嵌入式系統(tǒng)硬件環(huán)境的仿真能有效提高嵌入式系統(tǒng)開發(fā)效率。本文針對此問題,結合現(xiàn)有ARM體系架構和指令集模擬器實現(xiàn)原理,提出了一套基于X86平臺的ARM指令集模擬器的設計方案。
關鍵詞:嵌入式系統(tǒng)開發(fā);ARM體系架構;指令集模擬技術;ARM指令集模擬器
如今,仿真技術和虛擬技術被廣泛應用各個領域,特別在嵌入式系統(tǒng)的開發(fā)過程中,由于在不同應用領域中,嵌入式開發(fā)要求的硬件體系差別很大,用軟件進行系統(tǒng)仿真或虛擬硬件非常必要。軟件仿真的重點是微控制器的仿真,而對微控制器的仿真重點又在指令仿真上,因此本文給出一種基于解釋型仿真策略的指令仿真器的實現(xiàn)。指令集仿真器(Instruction Set Simulator,ISS)是用來在宿主機仿真另一種目標機上程序運行過程的軟件工具。它通過仿真每條指令在目標處理器上的執(zhí)行效果來仿真目標機程序,是目標處理器的軟件仿真器。在嵌入式軟硬件的并行開發(fā)中,指令仿真器是必不可少的工具之一,在目標機可用之前,通過它就可以完成軟件的仿真調試,真正做到了軟硬件的并行開發(fā)。
1 ARM體系架構及指令集模擬技術
1.1 ARM體系架構
到目前為止,ARM微處理器以其體積小、低功耗、低成本、高性能、指令執(zhí)行速度快、尋址方式靈活簡單、執(zhí)行效率高、指令長度固定等優(yōu)點幾乎已經(jīng)深入到各個領域。ARM處理器實現(xiàn)加載/存儲(load/store)體系結構,是典型的RISC處理器。只有加載和存儲指令可以訪問存儲器。數(shù)據(jù)處理指令支隊寄存器的內容進行操作,傳統(tǒng)的CISC(Complex Instruction Set Computer,復雜指令集計算機)技術的指令集隨著計算機的發(fā)展引入了各種各樣的復雜指令,已經(jīng)不堪重負。圖1描述了ARM微處理器的體系架構。
1.2 指令集模擬技術
1.2.1 指令集模擬解釋型模擬技術
解釋型模擬器的模擬流程是參照硬件環(huán)境中的指令執(zhí)行,并不進行任何執(zhí)行信息的服用,故執(zhí)行起來性能不高,愛目前主流配置的主機上的運行性能能一般從幾十到幾百個KIPS(Kilo-Instructions Per-Second)。由于解釋型模擬器實現(xiàn)較為簡單,同時能夠提供足夠的模擬精度以及靈活性,但解釋型模擬器的模擬性能低下,故在對于模擬性能沒有特別高的要求下,采用這種模擬技術是非常優(yōu)越的。目前絕大部分商用的模擬器是解釋型模擬器。這類模擬器的典型代表是SimpleScalar。
1.2.2 指令集模擬器動態(tài)翻譯模擬技術
動態(tài)翻譯模擬是在解釋型模擬技術基礎上的一種優(yōu)化,由于使用了緩存技術盡可能大的復用已解析的信息,提高了模擬的效率。模擬器的工作流程是:模擬一條指令,先核對這條指令是否存在于緩沖頁,如果是,則調用存儲中已有的解碼結果,實現(xiàn)模擬;如果沒有,則翻譯該指令并將結果緩存頁中備用,同時按照解釋型模擬的模式,繼續(xù)進行。由于啟動模擬編譯器的系統(tǒng)開銷較大,為了提高性能,每次啟動模擬編譯器完成若干條指令的翻譯,為了處理方便,每次編譯的指令數(shù)是固定的,稱為一個“翻譯頁”。在動態(tài)翻譯模擬技術中,翻譯和模擬的過程耦合度較低,可以分配給不同的線程完成,或結合多核技術,將代碼的執(zhí)行工作分配給幾個CPU同時來執(zhí)行,來提高模擬速度。目前采用動態(tài)翻譯技術的應用的較好的模擬器有Intel IA-32 Execution Layer等。
2 ARM指令集模擬器的設計
2.1 ARM指令集模擬器系統(tǒng)總體框架設計
本模擬器的主要功能是模擬ARM處理器對指令集的處理能力,當把內容為ARM指令的二進制BIN文件輸入時,可以模擬在真實ARM處理器上的運行效果。由圖2指令集模擬器的總體架構圖可以看出一個應用程序在運行的時候和指令集模擬器之間的關系。一個應用程序在經(jīng)過ARM交叉編譯器編譯生成基于ARM指令集的二進制可執(zhí)行文件,可執(zhí)行文件進入ARM指令集模擬器內核被解釋執(zhí)行,最后得到運行后的結果。
其中模擬器內核是整個模擬器的核心部分,也是本文將要重點設計和實現(xiàn)的部分。它主要包含一下功能:對可執(zhí)行文件的加載,執(zhí)行取指令、指令譯碼、指令模擬執(zhí)行的三級流水和解析結果的展示。在模擬器內核設計部分,模擬指令執(zhí)行的過程是內核的核心部分,在本模擬器設計中,借鑒CPU模型中的指令流水設計內核翻譯程序的取指、譯碼和指令執(zhí)行3個過程。圖3描述了指令集模擬器內核的總體架構。如圖所示,整個內核包含程序加載模塊、指令譯碼模塊、取指模塊、指令調度與模擬模塊、寄存器模擬模塊和數(shù)據(jù)存儲模塊。在此模擬器中,存儲模塊不做實現(xiàn),調用gdb中的相應模塊。
評論