在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

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

            exe_mem_reg

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

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

              

              圖 22 exe_mem_reg時(shí)序圖

              mem_stage

              本模塊完成對(duì)數(shù)據(jù)Cache的讀寫(xiě)。模塊的對(duì)外接口符合Wishbone總線(xiàn)標(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

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

              

              圖 25 wb_stage時(shí)序圖

              except

              本模塊完成流水線(xiàn)中的中斷及異常處理。為了完成精確中斷,即產(chǎn)生異常的指令前已經(jīng)在流水線(xiàn)中的指令完成執(zhí)行,而在異常指令后的指令不允許完成執(zhí)行(不修改CPU狀態(tài)),才能響應(yīng)異常。因此,在實(shí)現(xiàn)精確中斷時(shí),需要對(duì)流水線(xiàn)中的指令進(jìn)行跟蹤,所有的異常或中斷信號(hào)將延遲到流水線(xiàn)的特定階段(Writeback)進(jìn)行響應(yīng),并且對(duì)不同類(lèi)型的異常信號(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的寫(xiě)策略為寫(xiě)通過(guò)(主存和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)翻譯效率,我們?cè)贑PU中增加了硬件加速模塊。動(dòng)態(tài)翻譯硬件加速包括以下部分:

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

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

            • 子模塊列表

            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之間通過(guò)campi, camwi, ramwi, ramwi四條指令進(jìn)行交互。

              campi用于CAM的查表,camwi用于CAM的寫(xiě)操作,ramwi用于RAM的寫(xiě)操作,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)制翻譯主要有三類(lèi):解釋執(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)制翻譯可以分為三大類(lèi):解釋執(zhí)行、靜態(tài)翻譯和動(dòng)態(tài)翻譯。

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

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

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

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

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

              

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

              基本塊執(zhí)行時(shí)有硬件模塊輔助,如圖 12所示。硬件模塊管理跳轉(zhuǎn)緩存,緩存的基本項(xiàng)為對(duì)。程序執(zhí)行到跳轉(zhuǎn)指令時(shí),程序向跳轉(zhuǎn)緩存發(fā)送SPC,得到相應(yīng)的TPC,再跳至TPC繼續(xù)執(zhí)行生成塊。簡(jiǎn)單的示例如圖 30所示。源程序從塊A開(kāi)始執(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é)議中,類(lèi)型碼為86,要求.com文件僅使用一個(gè)段,大小限制為64KB。服務(wù)器找到所指定的文件,并將其傳送給系統(tǒng),系統(tǒng)將其存放在內(nèi)存中。至此,完成8086可執(zhí)行程序的載入。

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

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

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

              若采用提供硬件支持,那么硬件平臺(tái)需稍做修改,增加一個(gè)類(lèi)FLAGS寄存器。仍以上面的add ax, bx為例。將ax、bx分別放到$t0、$t1的高16位,然后進(jìn)行相加,是否溢出的結(jié)果會(huì)自動(dòng)保存到新添加的類(lèi)FLAGS寄存器里,因而軟件層面無(wú)需再做處理。此種做法,增加了硬件工作,但大大簡(jiǎn)化了軟件的操作。8086的FLAGS有多個(gè)標(biāo)志位,若要完全實(shí)現(xiàn),那么對(duì)本身的硬件平臺(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寄存器對(duì)應(yīng)一個(gè)MIPS寄存器,而不需要對(duì)寄存器進(jìn)行置換,簡(jiǎn)化了寄存器的管理。


            上一頁(yè) 1 2 下一頁(yè)

            關(guān)鍵詞:

            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉