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