色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 電源與新能源 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的M2M異構(gòu)虛擬化系統(tǒng)(二)

          基于FPGA的M2M異構(gòu)虛擬化系統(tǒng)(二)

          作者: 時(shí)間:2018-08-31 來源:網(wǎng)絡(luò) 收藏

          exe_mem_reg

          本文引用地址:http://cafeforensic.com/article/201808/388222.htm

            本模塊完成EXE和MEM兩個(gè)階段之間的信號(hào)流水。本模塊的時(shí)序圖如下。

            

            圖 22 exe_mem_reg時(shí)序圖

            mem_stage

            本模塊完成對數(shù)據(jù)Cache的讀寫。模塊的對外接口符合Wishbone總線標(biāo)準(zhǔn)。本模塊的主要時(shí)序如下圖。

            

            圖 23 mem_stage時(shí)序圖

            mem_wb_reg

            本模塊完成MEM和WB兩個(gè)階段之間的信號(hào)流水。本模塊的時(shí)序圖如下。

            

            圖 24 mem_wb_reg時(shí)序圖

            wb_stage

            本模塊完成寫回指令的寄存器堆修改操作。本模塊的時(shí)序圖如下。

            

            圖 25 wb_stage時(shí)序圖

            except

            本模塊完成流水線中的中斷及異常處理。為了完成精確中斷,即產(chǎn)生異常的指令前已經(jīng)在流水線中的指令完成執(zhí)行,而在異常指令后的指令不允許完成執(zhí)行(不修改CPU狀態(tài)),才能響應(yīng)異常。因此,在實(shí)現(xiàn)精確中斷時(shí),需要對流水線中的指令進(jìn)行跟蹤,所有的異常或中斷信號(hào)將延遲到流水線的特定階段(Writeback)進(jìn)行響應(yīng),并且對不同類型的異常信號(hào),中斷程序的返回地址不同。本模塊的主要時(shí)序圖如下。

            

            圖 26 except時(shí)序圖

            4.1.2.2Cache模塊詳細(xì)設(shè)計(jì)方案

            功能描述

            本模塊實(shí)現(xiàn)指令Cache和數(shù)據(jù)Cache。其中,指令Cache和數(shù)據(jù)Cache的映射策略都采用直接映射方式。指令Cache只讀,數(shù)據(jù)Cache的寫策略為寫通過(主存和Cache里的數(shù)據(jù)時(shí)鐘保持一致)。

          • 子模塊列表

          Instruction Cache top

          Data Cache top

            詳細(xì)設(shè)計(jì)

            ic_top

            本模塊的時(shí)序圖如下。

            

            圖 27 ic_top時(shí)序圖

            4.1.2.3動(dòng)態(tài)翻譯硬件模塊詳細(xì)設(shè)計(jì)方案

            功能描述

            為了提高動(dòng)態(tài)翻譯效率,我們在CPU中增加了硬件加速模塊。動(dòng)態(tài)翻譯硬件加速包括以下部分:

            在QS-I CPU的ALU模塊中增加x86 flag寄存器(MIPS架構(gòu)中沒有flag標(biāo)志寄存器),軟件可通過mtc0,mfc0兩條指令來訪問flag寄存器。這樣x86的算術(shù)邏輯或比較指令(如add, sub, cmp等),以及條件跳轉(zhuǎn)指令(如ja, jb, jg等)有效地得到了硬件支持,使得軟件的翻譯效率大大提高。

            在QS-I CPU外增加了JLUT(Jump address Lookup Table),即跳轉(zhuǎn)地址查表。通過CAM(Content Address Memory)的硬件支持,跳轉(zhuǎn)指令的翻譯效率將比完全基于軟件的翻譯方式提高一個(gè)數(shù)量級。在QS-I中將新增4條用戶指令campi, ramri, camwi, camwi用于軟件對JLUT的訪問。

          • 子模塊列表

          JLUT top

          SPC is stored in CAMs, and it will take less than two clock cycles to get address of the CAMs content specified.

          TPC is stored in ubiquitous RAMs.

            詳細(xì)設(shè)計(jì)

            如下方的JLUT詳細(xì)設(shè)計(jì)圖所示,JLUT模塊與QS-I CPU之間通過campi, camwi, ramwi, ramwi四條指令進(jìn)行交互。

            campi用于CAM的查表,camwi用于CAM的寫操作,ramwi用于RAM的寫操作,RAMRI用于RAM的讀操作。

            4條指令的格式如下。

          Instruction

          Format

          Usage

          campi

          opcode, rs, 5’h0, rd, 5’h0, func

          campi rd, rs

          camwi

          opcode, rs, rt, 5’h0, 5’h0, func

          camwi rt, rs

          ramwi

          opcode, rs, rt, 5’h0, 5’h0, func

          ramwi rt, rs

          ramri

          opcode, rs, 5’h0, rd, 5’h0, func

          ramri rd, rs

            

            圖 28 JLUT詳細(xì)設(shè)計(jì)圖

            4.2.動(dòng)態(tài)翻譯詳細(xì)設(shè)計(jì)方案

            二進(jìn)制翻譯技術(shù)能夠把一種體系結(jié)構(gòu)的二進(jìn)制程序翻譯成另一種體系結(jié)構(gòu)的二進(jìn)制程序,以在新的體系結(jié)構(gòu)下運(yùn)行。二進(jìn)制翻譯主要有三類:解釋執(zhí)行、靜態(tài)翻譯及動(dòng)態(tài)翻譯。

            在系統(tǒng)總體框架圖中,二進(jìn)制翻譯層可運(yùn)行不同的翻譯程序,以在不同的體系之間進(jìn)行轉(zhuǎn)換,如x86到MIPS、ARM到MIPS、x86到ARM等。本部分挑選了8086到MIPS的動(dòng)態(tài)翻譯作為實(shí)現(xiàn)原型。

            4.2.1.二進(jìn)制翻譯介紹

            二進(jìn)制翻譯可以分為三大類:解釋執(zhí)行、靜態(tài)翻譯和動(dòng)態(tài)翻譯。

            解釋執(zhí)行的流程是:取指、解析、執(zhí)行。它對源機(jī)器代碼進(jìn)行實(shí)時(shí)解釋并執(zhí)行,然后繼續(xù)下一條指令。系統(tǒng)不對已解釋的指令進(jìn)行保存或緩存。在這個(gè)框架下,不能對代碼進(jìn)行優(yōu)化。這種翻譯技術(shù)能取得高度兼容性,但執(zhí)行效率很低。

            靜態(tài)翻譯是先將源可執(zhí)行文件轉(zhuǎn)換成目標(biāo)機(jī)器可執(zhí)行文件,然后運(yùn)行在目標(biāo)機(jī)器上。這是離線翻譯,因此有充足的時(shí)間對代碼進(jìn)行優(yōu)化,以提高代碼的執(zhí)行效率。但靜態(tài)翻譯很難做到正確性,如代碼的自修改問題,執(zhí)行過程中有些跳轉(zhuǎn)值只能在運(yùn)行時(shí)才能獲知等問題。

            解釋執(zhí)行是實(shí)時(shí)翻譯,靜態(tài)翻譯是離線翻譯,動(dòng)態(tài)翻譯就像是兩者的折中。它不像解釋執(zhí)行那樣對每條指令進(jìn)行翻譯并馬上執(zhí)行,也不像靜態(tài)翻譯那樣將指令完全翻譯好之后才執(zhí)行。它每次對一個(gè)基本塊進(jìn)行翻譯并執(zhí)行,然后取另一個(gè)塊。一個(gè)基本塊一般包含多條算術(shù)類型指令,最后是一條控制流(Control Flow)類型指令。已翻譯的塊可進(jìn)行緩存或保存。動(dòng)態(tài)翻譯只對將要執(zhí)行的代碼進(jìn)行翻譯,且能很好地解決代碼自修改問題。

            4.2.2.二進(jìn)制翻譯策略選擇

            本項(xiàng)目采取的是軟硬協(xié)同動(dòng)態(tài)翻譯策略,將源二進(jìn)制代碼進(jìn)行翻譯,當(dāng)遇到控制流類型指令,如跳轉(zhuǎn)指令,系統(tǒng)調(diào)用等,翻譯過程掛起,將已翻譯的指令序列作為一個(gè)基本塊,然后運(yùn)行基本塊。當(dāng)基本塊執(zhí)行完以后,會(huì)跳到下一處執(zhí)行。若下一處已翻譯過,則繼續(xù)執(zhí)行,否則暫停執(zhí)行以進(jìn)行翻譯,如此過程循環(huán)。完整的流程如下圖所示。

            

            圖 29 x86程序翻譯執(zhí)行流程

            基本塊執(zhí)行時(shí)有硬件模塊輔助,如圖 12所示。硬件模塊管理跳轉(zhuǎn)緩存,緩存的基本項(xiàng)為對。程序執(zhí)行到跳轉(zhuǎn)指令時(shí),程序向跳轉(zhuǎn)緩存發(fā)送SPC,得到相應(yīng)的TPC,再跳至TPC繼續(xù)執(zhí)行生成塊。簡單的示例如圖 30所示。源程序從塊A開始執(zhí)行,到末尾時(shí),需要跳轉(zhuǎn)到塊C。翻譯后執(zhí)行,執(zhí)行完塊A’后將要跳轉(zhuǎn),此時(shí)的跳轉(zhuǎn)地址是SMEM中地址,即SPC,要轉(zhuǎn)換成相應(yīng)的TPC,該TPC就由跳轉(zhuǎn)緩存中尋找。

            

            圖 30 SMEM與TMEM的映射

            4.2.3.8086程序的載入

            首先,由系統(tǒng)向服務(wù)器發(fā)送命令,命令格式為x86 *.com,它包含在自定義傳輸協(xié)議中,類型碼為86,要求.com文件僅使用一個(gè)段,大小限制為64KB。服務(wù)器找到所指定的文件,并將其傳送給系統(tǒng),系統(tǒng)將其存放在內(nèi)存中。至此,完成8086可執(zhí)行程序的載入。

            4.2.4.標(biāo)志寄存器處理

            8086中有個(gè)標(biāo)志寄存器FLAGS,而MIPS中沒有與之相對應(yīng)的標(biāo)志寄存器,解決辦法有二,軟件模擬實(shí)現(xiàn)或硬件提供支持。

            軟件模擬指的是,當(dāng)一條8086指令執(zhí)行后,會(huì)影響哪些標(biāo)志位,然后用軟件方法將其模擬出來,使兩者的結(jié)果一致。如執(zhí)行add ax, bx對溢出位的影響。模擬時(shí),將ax移到MIPS的$t0寄存器的低16位,將bx移到MIPS的$t1寄存器的低16位,然后對$t0和$t1做加法,結(jié)果放到$t0,相對應(yīng)的指令為add $t0, $t0, $t1。結(jié)果是否溢出則要查看$t0的第16位。最后,還要將溢出位存放至標(biāo)志寄存器的對應(yīng)位。這中間還要涉及移位運(yùn)算、位運(yùn)算等,所需代價(jià)很大,但有個(gè)好處是無需對硬件平臺(tái)做改動(dòng),使硬件平臺(tái)更為純粹。

            若采用提供硬件支持,那么硬件平臺(tái)需稍做修改,增加一個(gè)類FLAGS寄存器。仍以上面的add ax, bx為例。將ax、bx分別放到$t0、$t1的高16位,然后進(jìn)行相加,是否溢出的結(jié)果會(huì)自動(dòng)保存到新添加的類FLAGS寄存器里,因而軟件層面無需再做處理。此種做法,增加了硬件工作,但大大簡化了軟件的操作。8086的FLAGS有多個(gè)標(biāo)志位,若要完全實(shí)現(xiàn),那么對本身的硬件平臺(tái)改動(dòng)會(huì)比較大,因此,我們只選擇了其中幾個(gè)進(jìn)行實(shí)現(xiàn),如Z、O、C、S等。

            4.2.5.寄存器映射

            MIPS有32個(gè)通用寄存器,從0號(hào)到31號(hào),每個(gè)寄存器為32位。8086的通用寄存器有8個(gè):AX、CX、DX、BX、SP、BP、SI和DI。這8個(gè)通用寄存器都是16位,AX、CX、DX和BX還可以分成兩個(gè)8位寄存器,高8位和低8位,如AX可分為AH和AL。此外,段寄存器有CS、DS、ES和SS,都是16位。還有IP寄存器和FLAGS寄存器,也都是16位。

            因?yàn)镸IPS的寄存器數(shù)量比8086的寄存器多,可以采用直接映射,一個(gè)8086寄存器對應(yīng)一個(gè)MIPS寄存器,而不需要對寄存器進(jìn)行置換,簡化了寄存器的管理。


          上一頁 1 2 下一頁

          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉