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