国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Lx5280模擬器移植設(shè)計(jì)及實(shí)施

2011-08-22 02:22夏興昇
科技視界 2011年5期
關(guān)鍵詞:指令集累加器配置文件

夏興昇

(江蘇經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院 江蘇 南京 211168)

在分析模擬器基本原理,剖析GNU模擬器源程序,及分析了Lx5280新增部分的基礎(chǔ)上,開始對模擬器進(jìn)行移植,下面是移植設(shè)計(jì)及實(shí)施。

1 移植設(shè)計(jì)

1.1 Lx5280增加的結(jié)構(gòu)和指令總結(jié)

經(jīng)過第三章Lx5280結(jié)構(gòu)分析,總結(jié)出Lx5280在結(jié)構(gòu)上增加有:

(1)采取超標(biāo)量流水線結(jié)構(gòu)

(2)增加 Circular Buffers

(3)增加 Zero Overhead Loop 功能

(4)增加了一個用于乘除的DMAC單元

(5)增加了8個高優(yōu)先級中斷

增加的指令有六大類:

(1)雙字讀寫指令

LT、ST

從存儲器讀寫雙字(64位)到一對偶數(shù)開始的通用寄存器中。

(2)Circular Buffers 存取操作指令(指令含”P”)

LBP[.Cn]、 LBPU[.Cn]、LHP[.Cn]、 LHPU[.Cn]、 LWP[.Cn]、LTP[.Cn]、 SBP[.Cn]、SHP[.Cn]、 SWP[.Cn]、STP[.Cn]

(3)對新增寄存器操作指令

MFRU、 MTRU 讀 寫 cbe[0-2]、cbs[0-2]、lpc0、lps0、lpe0、mmd

MFRK、MTRK 讀寫Lexra-Cop0kernal寄存器(目前保留)

MFLXC0 、MTLXC0 讀 寫 ESTATUS、ECAUSE、INTVEC

(4)DMAC 操作指令

CMULTA

DIVA(U)

MULTA(U)、MULTA2、MADDA(U)、MADDA2[.S]

MSUBA(U)、MSUBA2[.S]、MULNA2 、

SUBMA[.s]、ADDMA[.s]

MTA2[.G]、MFA、MFA2

RNDA2

(5)算數(shù)操作指令、

ADDR、SUBR、SLTR、SLLV、SRLV、SRAV、MIN、MAX、ABSR、MUX、CLS、BITREV

(6)條件轉(zhuǎn)移指令

CMVEQZ[.H][.L]、CMVNEZ[.H][.L]

1.2 移植設(shè)計(jì)分析

下面按照配置文件修改,對新增結(jié)構(gòu)支持,對新增指令支持的順序進(jìn)行分析。

1.2.1 要求產(chǎn)生的模擬器為支持Lx5280的模擬器,將配置時的target定為lx5280。這就需要對configure文件進(jìn)行修改,以支持target=lx5280。對于mips和lx5280在基本配置上都一樣,只是他們的指令集不同(mips用MIPS1指令集,lx5280用lx5280指令集),所以在非指令集配置中含有mips選項(xiàng)的就增加lx5280選項(xiàng),而對于指令集配置要對lx5280單獨(dú)配置。

1.2.2 對于新增超標(biāo)量流水線結(jié)構(gòu),如前面所述,它不影響程序的執(zhí)行,而且模擬它并不能提高模擬器的速度,所以不移植。

1.2.3 對于 Circular Buffers。 它包含 cbs[0-2]、cbe[0-2]六個32位寄存器,增加到原來的寄存器組registers中即可,相關(guān)指令會根據(jù)其內(nèi)容進(jìn)行操作。

1.2.4 對于 Zero Overhead Loop 功能。 它包含 lps0、lpe0、lpc0三個32位寄存器。同樣增加到原來的寄存器組registers中。可但它的行為并不是靠指令驅(qū)動的,而是在每條指令執(zhí)行期間都會發(fā)生,并且是靠硬件完成的,判斷PC值是否和它的寄存器值相匹配??梢栽诿織l指令行為函數(shù)中加上,但這很冗長。我的解決方法是在指令生成程序igen的源程序gen-semantics.c文件中加上其行為。編譯后用它處理*.igen文件,產(chǎn)生的semantic.c文件中每條指令都會包含Zero Overhead Loop的行為。

1.2.5 對于 DMAC 單元,包含 m0l、m0h、m1l、m1h、m2l、m2h、m3l、m3h八個40位累加器和一個mmd 32位寄存器。mmd寄存器可以添加到原來的寄存器組registers中,但m0l、m0h、m1l、m1h、m2l、m2h、m3l、m3h 八個累加器是 40 位的,registers寄存器數(shù)組是32位的,模仿原浮點(diǎn)寄存器結(jié)構(gòu),另外增加一個mul[8]數(shù)組。DMAC相關(guān)指令會對其操作

1.2.6 對于新增中斷。 包含 estatus、ecause、intvec 三個 32 位寄存器。如前所述,由于本模擬器并不模擬cpu引腳,就在registers中添加estatus、ecause、intvec三個32位寄存器。如果需要模擬引腳,可添加一個模擬cpu端口的外部設(shè)備。

1.2.7 對于新增指令,雖然指令較多,但模擬都是寫一個指令行為函數(shù)和它的指令編碼結(jié)構(gòu)(供生成解碼表)。把它們添加到一個指令生成文件radiax.igen中。在mips.igen中添加一條包含命令 (include radiax.igen)。 由于支持的 target是lx5280,對原來mips1的指令在mips.igen中增加對lx5280的支持。

1.2.8 另外,在源碼分析中可以看到寄存器寬度和對寄存器讀寫對新增寄存器也有影響,對新增寄存器寬度加以修改,在寄存器讀寫函數(shù)中對累加器操作要重新定位到mul[]數(shù)組。

以上是對所有新增結(jié)構(gòu)和指令的分析處理,把它們總結(jié)合并后按照以下順序移植

1.3 移植順序

1.3.1 配置文件修改

a、修改mips下的配置文件 sim/mips/configure和 sim/mips/configure.in

b、修改模擬器總的配置文件sim/configure和sim/configure.in

1.3.2 添加新增寄存器

為了是模擬器支持對新增寄存器操作,作如下順序修改

a、添加寄存器到數(shù)組

b、修改寄存器長度寄存器

c、修改寄存器讀寫操作函數(shù)

1.3.3 添加新增指令

a、修改原有mips.igen文件

b、新增radiax.igen指令文件

作了以上移植分析設(shè)計(jì)后,開始移植代碼。下面是具體實(shí)現(xiàn)。

2 配置文件的修改

在程序編譯前,用configure來指定target。為了支持Lx5280,需對configure進(jìn)行修改。對于mips和lx5280在基本配置上都一樣,只是他們的指令集不同(mips用MIPS1指令集,lx5280用lx5280指令集),所以在非指令集配置中含有mips選項(xiàng)的就增加lx5280選項(xiàng),而對于指令集配置要對lx5280單獨(dú)配置。修改如下:

2.1 對 sim/mips/configure的修改

L1435 mips*-*-*|lx5280*-*-*)

2.2 對 sim/mips/configure.in的修改

L74 mips*-*-*|lx5280*-*-*)

2.3 對 sim/configure的修改

2.4 對 sim/configure.in的修改

3 添加新增Register及修改相關(guān)操作

Lx5280新增寄存器有

cbs0、cbs1、cbs2、cbe0、cbe1、cbe2、lps0、lpe0、lpc0、mmd、estatus、ecause、intvec、(32 位,13 個,用原有 registers數(shù)組,增加數(shù)組元素)

m0l、m0h、m1l、m1h、m2l、m2h、m3l、m3h(64 位模擬 40 位寄存器,8個,用新增mul數(shù)組)

對寄存器操作有:

寫寄存器操作sim_store_register()

讀寄存器操作sim_fetch_register()

對他們修改如下:

3.1 增加寄存器

按寄存器位寬度把增加寄存器分成32位(13個)和40位(8個)兩組,一共21個新增寄存器。作的修改為

3.1.1 修改總寄存器數(shù),原有寄存器LAST_EMBED_REGNUM是89,現(xiàn)在把它增加21個為110。這樣寄存器數(shù)組定義也由registers[89+1]變成registers[110+1]。新增寄存器編號從90-110。

3.1.2 由于REGISTERS數(shù)組寬度是按通用寄存器寬度定義的(32位),而8個累加器寄存器是40位的,就必須另外增加一個累加器的數(shù)組mul[],由于數(shù)據(jù)類型沒有40位整數(shù),定義mul[]的長度是64位,在寄存器操作時會對它們作40的溢出處理。這8個累加器在REGISTERS[]的位置仍然保留,以保證寄存器序號的唯一性。

對源程序修改如下:

3.2 設(shè)置新增寄存器寬度

在讀寫寄存器的時候,模擬器會檢驗(yàn)讀寫數(shù)據(jù)寬度是否和寄存器寬度相同,如果不同則返回失?。拇嫫鲗挾却娣旁趓egister_widths[]數(shù)組中),所以要對新增寄存器的寬度進(jìn)行修改,修改如下

3.3 修改讀寫寄存器函數(shù)的實(shí)現(xiàn)

寫寄存器操作函數(shù)sim_store_register()

讀寄存器操作函數(shù)sim_fetch_register()

在這兩個函數(shù)中會根據(jù)寄存器序號及讀寫寬度決定讀寫位置及返回值,缺省是對registers讀寫,由于新增的8個累加器在mul[]數(shù)組,對它們的讀寫要指向mul[]數(shù)組,修改如下:

3.3.1 寫寄存器 sim_store_register () 在 sim/mips/interp.c L977

3.3.2 讀寄存器 sim_fetch_register 在 sim/mips/interp.c L882

4 添加Radiax指令集

為了使igen文件模塊化,且易于維護(hù),在這里新增了radiax.igen指令文件,保存新增指令,關(guān)于新增指令的igen格式詳見3.8節(jié)指令生成

由于代碼量太大,這里列舉部分例子,詳見mips.igen、lx5280.igen、radiax.h 文件

4.1 修改原有 Mips.igen

4.1.1 增加 lx5280 model,igen 會將其加入 model列表

L46 :model::lx5280:lx5280:

4.1.2 由于新增指令在radiax.igen文件中, 這里也要把它包含進(jìn)來。

L4000 :include::radiax.igen

4.1.3 lx5280指令集包含MIPSI指令集和RADIAX指令集。對原有MIPS1指令增加對lx5280 mode的支持。

例如帶立即數(shù)加法指令(粗體為添加內(nèi)容):

4.2 增加 radiax.igen

4.2.1 把所有 Radiax指令按 igen指令格式添加到 radiax.igen文件

例如讀雙字操作指令的igen形式:

4.2.2 在radiax.igen需要用到的一些宏定義,把它們寫入radiax.h,并包含到sim-main.h中

#include"radiax.h"

5 對Zero Overhead Loop支持

Zero Overhead Loop結(jié)構(gòu)參見4.2.1節(jié) Lx5280新增結(jié)構(gòu)。它的LPC0、LPS0、LPE0三個寄存器在5.2.1節(jié)增加寄存器已添加。但它的行為并不是靠指令驅(qū)動的,而是在每條指令執(zhí)行期間都會發(fā)生,并且是靠硬件完成的。按移植設(shè)計(jì),在指令生成程序gen-semantics中加上其行為。編譯后用它處理*.igen文件,產(chǎn)生的semantic.c文件中每條指令都會包含Zero Overhead Loop的行為。

具體實(shí)施如下:

6 移植正確性測試

在移植之后產(chǎn)生的針對Lx5280的模擬器是否符合需求,我采用聯(lián)合測試的方法,和匯編器as、調(diào)試器insight(gdb窗口形式)共同測試。綜合考慮對新增寄存器和對新增指令的測試,由于添加的寄存器和指令結(jié)合緊密,我采用對Lx5280各個新增功能分模塊測試。

被測指令程序的裝載,我通過兩種方式:

6.1 通過匯編程序匯編指令后通過insight裝入。

6.2 在Lx5280匯編沒有移植好前通過手動匯編方式。在insight寄存器窗口給寄存器賦值及指令memory窗口在當(dāng)前指令地址處寫入手動匯編指令的的機(jī)器指令碼。這種方式也適用于在匯編、調(diào)試、模擬器聯(lián)合調(diào)試時確認(rèn)錯誤范圍。同時可以增加測試的靈活性

采用單步測試方法,測試結(jié)果通過insight寄存器窗口和memory窗口觀察。

經(jīng)調(diào)試、修改后的模擬器通過了上述詳細(xì)測試,證明模擬器能夠可靠使用,表明移植成功,實(shí)現(xiàn)了項(xiàng)目目標(biāo)。

猜你喜歡
指令集累加器配置文件
密碼累加器研究進(jìn)展及應(yīng)用
3DNow指令集被Linux淘汰
忘記ESXi主機(jī)root密碼怎么辦
Fpga的信號發(fā)生器設(shè)計(jì)原理
打印機(jī)設(shè)置
實(shí)時微測量系統(tǒng)指令集及解析算法
用于時間延遲積分型圖像傳感器的流水采樣列級運(yùn)放共享累加器*
什么是AMD64
基于覆蓋率驅(qū)動的高性能DSP指令集驗(yàn)證方法