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