專利名稱:仿真方法、仿真器、計算機可連接設(shè)備及仿真器程序的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及仿真器,尤其是在把性能等等方面不同的另一個計算機系統(tǒng)實現(xiàn)到指定計算機系統(tǒng)中時,精確地調(diào)整該指定計算機系統(tǒng)中包含的多個硬件資源的操作定時的技術(shù)。
背景技術(shù):
為了在具有不同處理性能等等的另一個計算機系統(tǒng)(第二計算機系統(tǒng))上操作為指定計算機系統(tǒng)(第一計算機系統(tǒng))創(chuàng)建的程序,使用仿真器。當仿真器被用于仿真在其上運行一般程序的計算機系統(tǒng)時,某些程序的操作定時必須嚴格地與硬件資源的操作定時一致。為了仿真這種計算機系統(tǒng),有必要以某種方式把硬件資源的操作定時與程序的操作定時同步。在這種情況下,通常,仿真器估計每個硬件資源的虛擬操作周期數(shù),并且比較每個硬件資源的虛擬操作周期數(shù)和操作周期數(shù),以在仿真之后調(diào)整程序的操作定時。
然而,在第二計算機系統(tǒng)上程序可能不按正確定時正確地運行,除非以足夠高的準確度估計每個硬件資源的虛擬操作周期數(shù)。
然而,由于各種原因,難于高準確度地估計硬件資源的虛擬操作周期數(shù)。
例如,當要仿真的系統(tǒng)包含CPU及通過總線連接到CPU的外設(shè)時,有必要不僅按其各自正確定時操作CPU和外設(shè),而且調(diào)整CPU和外設(shè)的操作定時,以調(diào)整整個系統(tǒng)中的CPU和外設(shè)的定時。
為了如整個系統(tǒng)那樣整體調(diào)整定時,顯然需要高準確度地估計每個CPU及外設(shè)的虛擬操作周期數(shù)。然而,在所有硬件資源中,尤其難于估計CPU的虛擬操作周期數(shù)。這是由于CPU的操作周期數(shù)可能受例如指令的執(zhí)行順序,高速緩存及總線訪問的各種因素的影響。
例如,操作周期數(shù)因高速緩存是否存在于CPU中而有所不同,并且即使高速緩存出現(xiàn)在CPU中,操作周期數(shù)仍然因高速緩存中是否出現(xiàn)命中或命中失誤而有所不同。當高速緩存命中出現(xiàn)時,操作被封閉在CPU內(nèi)以完成數(shù)據(jù)交換。然而,當高速緩存命中失誤出現(xiàn)時,有必要計算直至獲得總線訪問權(quán)所經(jīng)過的操作周期數(shù)。
此外,如果要仿真的CPU執(zhí)行流水線操作,則更加難于估計虛擬操作周期數(shù)。此后,將針對這個方面給出描述。
傳統(tǒng)仿真器中最簡單的仿真器順序地逐個處理指令。具體地,不執(zhí)行指令,除非前面指令的執(zhí)行已完成。然而,例如精簡指令集計算機(RISC)CPU的近來的處理器以流水線的方式處理指令。在流水線處理中,每個級段中的操作周期數(shù)是不固定的,而是取決于相鄰(前一和后一)狀態(tài)。一般指令從不在一個周期中完成,除非至少發(fā)生高速緩存命中。
因此,當如此仿真的計算機包含以流水線方式操作的處理器時,存在非常難于在仿真之后調(diào)整程序的操作定時的問題。
考慮到上述問題,本發(fā)明的基本目的是提供一種利于在仿真之后進行操作定時調(diào)整的仿真方法,例如,一種利于調(diào)整包含CPU和外設(shè)的整個系統(tǒng)的操作定時的仿真方法。
本發(fā)明的另一個目的是提供一種使得能夠在仿真之后使程序的操作定時與硬件資源的操作定時同步的仿真方法。
此外,本發(fā)明的另一個目的是提供一種利于在仿真具有以流水線方式處理指令的處理器的計算機之后,調(diào)整程序的操作定時的仿真方法。
本發(fā)明的另一個目的是提供一種能以適當方式執(zhí)行仿真方法的仿真器,計算機可連接設(shè)備及用于在計算機上實現(xiàn)仿真器的仿真器程序。
發(fā)明內(nèi)容
基于本發(fā)明的一個方面的仿真方法是在仿真之后正確地估計總線訪問周期數(shù),以優(yōu)化處理器的操作定時。為此,針對每個因素劃分在從處理器(MIPS)發(fā)出指令時進行總線訪問所需的周期數(shù)。根據(jù)相應因素的周期數(shù)的總和來估計總線訪問周期數(shù)。
更具體地,仿真方法包含的步驟有在第二計算機中通過軟件提供第一計算機的功能,所述功能包含處理器的功能,用于連接處理器和外設(shè)的總線的功能,以及用于仲裁總線的訪問權(quán)的仲裁裝置的功能;由通過軟件提供的處理器向連接到總線的外設(shè)發(fā)出預定請求;由仲裁裝置向外設(shè)傳送發(fā)出到總線的請求,從外設(shè)接收指示執(zhí)行該請求所需的基本時間的數(shù)據(jù),以及進一步向處理器傳送所接收的數(shù)據(jù);以及由接收到數(shù)據(jù)的處理器基于由該數(shù)據(jù)指示的基本時間控制其自身的虛擬操作定時。
″外設(shè)″是例如計算機的外部設(shè)備。術(shù)語″基本時間(substantialtime)″表示基本時間信息。例如,基本時間是用于確定第一計算機的虛擬操作定時的總線訪問周期數(shù)。操作時鐘也是一種基本時間。
仲裁裝置對用于限制處理器對總線的一部分訪問的限制裝置,例如與處理器競爭對總線的訪問權(quán)的DMA功能模塊進行仲裁。仲裁裝置也可以把仲裁所需的基本時間加到由從外設(shè)接收的數(shù)據(jù)指示的基本時間上,以向處理器傳送通過相加獲得的總線訪問周期數(shù)的數(shù)據(jù)。仲裁裝置也可以通過軟件在第二計算機中提供第一計算機的高速緩沖存儲器和高速緩存管理裝置,其中高速緩存管理裝置可以判斷高速緩沖存儲器中的命中或命中失誤,并且也可以基于判斷結(jié)果確定要進一步加到通過所述相加獲得的基本時間上的基本時間。按照這種方式,可以獲得更加實際的基本時間,從而在仿真之后獲得處理器中的最優(yōu)虛擬操作周期的估計。
本發(fā)明提供了一種仿真器,用于通過軟件實現(xiàn)不同于包含該仿真器的計算機的第一計算機中包含的多個硬件資源的功能。該仿真器包含被提供為對應于第一計算機的處理器的處理器對象;被提供為對應于第一計算機的外設(shè)的外設(shè)對象;被提供為對應于處理器和外設(shè)所連接到的總線的總線對象;以及仲裁裝置,用于仲裁對總線對象的訪問,在仿真器中,外設(shè)對象和仲裁裝置的每個具有把實現(xiàn)對其請求的指令所需的基本時間返回到該指令的請求源的功能;以及處理器對象具有向連接到由仲裁裝置的仲裁允許訪問的總線對象的外設(shè)對象發(fā)出請求的功能,以及基于接收請求結(jié)果所需的基本時間來控制其自身虛擬操作定時的功能。
基于本發(fā)明的仿真器還可以包含被提供為對應于第一計算機中的DMA控制器的DMA控制器對象,DMA控制器與處理器競爭對總線的訪問權(quán),并且在仿真器中,仲裁裝置執(zhí)行對DMA控制器對象的仲裁,并且把仲裁所需的基本時間加到要由其自身返回的基本時間上。
基于本發(fā)明的仿真器還可以包含第一計算機的高速緩沖存儲器以及被提供為對應于第一計算機中的高速緩存管理裝置的高速緩存管理裝置,第一計算機中的高速緩存管理裝置具有把執(zhí)行對其請求的指令所需的基本時間返回到處理器對象的功能,在仿真器中,高速緩存管理裝置還可以判斷高速緩存命中和高速緩存命中失誤中的哪種情況已出現(xiàn)在高速緩沖存儲器中,并且基于判斷結(jié)果確定要被加到所要返回到處理器對象的基本時間上的基本時間。
此外,基于本發(fā)明,通過上述仿真器實現(xiàn)的處理器對象,外設(shè)對象,總線對象,仲裁裝置等等可以通過可連接設(shè)備或仿真器程序來提供。
基于本發(fā)明的另一個方面,提供一種用于仿真以流水線方式實現(xiàn)指令的處理器的功能的方法。更具體地,該方法包含步驟用多級段的處理模塊配置流水線,其中相鄰模塊彼此相關(guān),并且使對應于處理器的處理器對象以并行及獨立方式操作處理模塊;由處理器對象輸入指令到多級段的處理模塊;由多級段的處理模塊的操作處理模塊針對指令的每個步驟存儲在每個操作中遞增的操作周期數(shù);以及輸出所存儲的操作周期數(shù)中的最大值,以作為該步驟中流水線的執(zhí)行步驟周期數(shù)。
仿真方法還可以包含提供能夠由多級段的處理模塊訪問的寄存器的步驟,并且在仿真器中,任何處理模塊把其自身操作周期數(shù)存儲在寄存器中,并且其操作周期數(shù)大于已經(jīng)存儲在寄存器中的操作周期數(shù)的處理模塊將存儲在寄存器中的操作周期數(shù)更新為其操作周期數(shù)。
本發(fā)明還提供了一種用于仿真似流水線方式實現(xiàn)指令的處理器的操作的仿真器。該仿真器包含對應于處理器的處理器對象;多級段的處理模塊,其中相鄰處理模塊彼此相關(guān)以對應于流水線,該多級段的處理模塊能夠基于處理器對象的控制以并行及獨立方式操作;以及周期數(shù)存儲裝置,用于針對輸入指令的每個步驟,存儲在所述多級段的處理模塊中具有最大操作周期數(shù)的處理模塊的操作周期數(shù),并且仿真器中,處理器對象輸出存儲在周期數(shù)存儲裝置中的操作周期數(shù),以作為該步驟中流水線的執(zhí)行步驟周期數(shù)。
在基于本發(fā)明的另一個方面的仿真器中,處理器對象在指令的第一步驟中設(shè)置周期數(shù)存儲裝置中存儲的操作周期數(shù)為初值,并且針對每個級段中的處理模塊的每個操作,確定所操作的處理模塊的操作周期數(shù)是否大于已經(jīng)存儲在周期數(shù)存儲裝置中的操作周期數(shù),并且允許在所操作的處理模塊的操作周期數(shù)更大時更新存儲在周期數(shù)存儲裝置中的操作周期數(shù)。多級段的處理模塊可以包含無論何指令均具有固定操作周期數(shù)的處理模塊。
此外,基于本發(fā)明,通過上述仿真器實現(xiàn)的處理器對象,處理模塊,周期數(shù)存儲裝置等等可以由附連設(shè)備或仿真器程序提供。
基于本發(fā)明,可以獲得利于在仿真之后進行程序的操作定時的調(diào)整的效果。
此外,基于本發(fā)明,仿真包含指定計算機(第一計算機)的處理器的總線連接結(jié)構(gòu),以獲得要返回到處理器、從第一計算機的處理器發(fā)出的指令所需的基本時間。因此,即使針對其操作定時被各種因素改變的處理器,在對應于仿真目標(第二計算機)的計算機中的處理器的虛擬操作定時(虛擬操作周期數(shù))可以容易地與仿真目標的硬件資源的操作定時(操作周期數(shù))同步。
此外,基于本發(fā)明,流水線由多級段的處理模塊構(gòu)成,并且可以配置每個處理模塊,使得對應于處理器的處理器對象并行及獨立地操作。另外,對于輸入指令的每個步驟,指定多級段的處理模塊中的操作處理模塊的操作周期數(shù)的最大值,以便作為該步驟中流水線的執(zhí)行步驟周期數(shù)輸出。因此,即使對于以流水線方式處理指令的處理器(在該流水線中相鄰處理彼此相關(guān)),操作周期數(shù)可以在仿真目標中估計。因此,本發(fā)明具有的突出效果在于利于仿真目標中操作周期數(shù)的同步。
在附圖中圖1圖解了要仿真的目標機系統(tǒng)的結(jié)構(gòu)視圖;圖2圖解了基于本發(fā)明的仿真器的對象框圖;圖3圖解了指令總線讀取訪問的序列圖;圖4圖解了數(shù)據(jù)總線讀取訪問的序列圖;圖5圖解了數(shù)據(jù)總線寫入訪問的序列圖;圖6圖解了示出流水線中調(diào)整操作的必要性的視圖;圖7圖解了示出MIPS對象(類)的示例性內(nèi)部結(jié)構(gòu)的視圖;圖8圖解了ExecData對象和切換階段之間的關(guān)系的視圖;圖9圖解了示出在仿真流水線時示例性指令的視圖;圖10A和10B圖解了例如步驟周期數(shù)寄存器的值,要存儲在MIPS寄存器模塊中的值,及當實際實現(xiàn)仿真時要存儲在ExecData對象中的數(shù)據(jù)的每個內(nèi)容的說明性視圖;圖11A和11B圖解了例如步驟周期數(shù)寄存器的值,要存儲在MIPS寄存器模塊中的值,及當實際實現(xiàn)仿真時要存儲在ExecData對象中的數(shù)據(jù)的每個內(nèi)容的說明性視圖;圖12A和12B圖解了例如步驟周期數(shù)寄存器的值,要存儲在MIPS寄存器模塊中的值,及當實際實現(xiàn)仿真時要存儲在ExecData對象中的數(shù)據(jù)的每個內(nèi)容的說明性視圖;
圖13A和13B圖解了例如步驟周期數(shù)寄存器的值,要存儲在MIPS寄存器模塊中的值,及當實際實現(xiàn)仿真時要存儲在ExecData對象中的數(shù)據(jù)的每個內(nèi)容的說明性視圖;圖14A和14B圖解了例如步驟周期數(shù)寄存器的值,要存儲在MIPS寄存器模塊中的值,及當實際實現(xiàn)仿真時要存儲在ExecData對象中的數(shù)據(jù)的每個內(nèi)容的說明性視圖;圖15A和15B圖解了例如步驟周期數(shù)寄存器的值,要存儲在MIPS寄存器模塊中的值,及當實際實現(xiàn)仿真時要存儲在ExecData對象中的數(shù)據(jù)的每個內(nèi)容的說明性視圖;圖16A和16B圖解了例如步驟周期數(shù)寄存器的值,要存儲在MIPS寄存器模塊中的值,及當實際實現(xiàn)仿真時要存儲在ExecData對象中的數(shù)據(jù)的每個內(nèi)容的說明性視圖;圖17A和17B圖解了例如步驟周期數(shù)寄存器的值,要存儲在MIPS寄存器模塊中的值,及當實際實現(xiàn)仿真時要存儲在ExecData對象中的數(shù)據(jù)的每個內(nèi)容的說明性視圖;圖18A和18B圖解了例如步驟周期數(shù)寄存器的值,要存儲在MIPS寄存器模塊中的值,及當實際實現(xiàn)仿真時要存儲在ExecData對象中的數(shù)據(jù)的每個內(nèi)容的說明性視圖;圖19圖解了例如步驟周期數(shù)寄存器的值,要存儲在MIPS寄存器模塊中的值,及當實際實現(xiàn)仿真時要存儲在ExecData對象中的數(shù)據(jù)的每個內(nèi)容的說明性視圖;圖20A圖解了示出當在流水線中操作圖9中的指令時,第一步驟的操作周期數(shù)的視圖;圖20B圖解了示出第二步驟的操作周期數(shù)的視圖;圖20C圖解了示出第三步驟的操作周期數(shù)的視圖;及圖20D圖解了示出最后步驟的操作周期數(shù)的視圖。
具體實施例方式
在下文說明本發(fā)明的優(yōu)選實施例。首先,描述要仿真的計算機系統(tǒng)(此后,被稱作″目標機系統(tǒng)″)。如示出示例性結(jié)構(gòu)的圖1所示,目標機系統(tǒng)被配置為包含系統(tǒng)LSI 10,具體地是其中多個功能被集成在一個芯片上的超級多功能大規(guī)模集成(LSI);以及由隨機訪問存儲器(RAM)組成的系統(tǒng)存儲器20。
圖形處理單元(GPU)30通過總線橋11被連接到系統(tǒng)LSI 10。外部外設(shè)IC 40和50等等也通過總線橋12及外部總線B2被連接到系統(tǒng)LSI10。內(nèi)部總線B1被連接在兩個總線橋11和12之間。CPU 13,直接存儲器訪問(DMA)控制器15及多個內(nèi)部外設(shè)模塊16到19被連接到內(nèi)部總線B1。
在這個例子中,CPU 13是MIPS核心(由MIPS技術(shù)公司設(shè)計的CPU核心)。作為MIPS核心,CPU 13包含用于向量運算的協(xié)處理器14。協(xié)處理器14是簡化指令集以允許進行高速處理的RISC處理器。DMA控制器15允許來自CPU 13的DMA并且具有總線仲裁器的功能(仲裁)。系統(tǒng)存儲器20被連接到DMA控制器15。每個內(nèi)部外設(shè)模塊16到19與CPU 13協(xié)作以處理特定硬件功能。
CPU 13和DMA控制器15的每個充當總線主設(shè)備。因此,CPU 13和DMA控制器15彼此競爭對內(nèi)部總線B1的訪問權(quán)。當外部外設(shè)IC 40和50通過外部總線B2和總線橋12被連接到內(nèi)部總線B1時,每個外部外設(shè)IC 40和50的寄存器組被映射在系統(tǒng)存儲器20的存儲器映射上。
當CPU 13通過內(nèi)部總線B1訪問例如系統(tǒng)存儲器20的模塊時,CPU 13首先必須通過總線仲裁獲得總線訪問權(quán)。CPU 13的獲得總線訪問權(quán)的訪問被稱作″主設(shè)備訪問″。對于主設(shè)備訪問,當內(nèi)部總線B1正被DMA控制器15使用時,使來自CPU 13的訪問進行等待。當CPU 13獲得訪問權(quán)時,將該訪問通知要訪問的模塊。在CPU 13獲取訪問權(quán)之后的訪問被稱作″從設(shè)備訪問″。對于從設(shè)備訪問,根據(jù)要訪問的模塊的狀態(tài),訪問周期數(shù)有所不同。此外,當要訪問的模塊在外部總線B2上時,需要總線橋12的處理時間。
如上所述,例如總線訪問周期數(shù)的CPU 13的操作定時由三個要素確定,即,直到獲取對內(nèi)部總線B1的訪問權(quán)的周期數(shù),進行總線訪問的周期數(shù),及要訪問的模塊的響應周期數(shù)。
接著將描述基于本發(fā)明的用于仿真目標機系統(tǒng)的仿真器的示例性結(jié)構(gòu)。
基于本發(fā)明的仿真器通過仿真器程序及包含存儲器的計算機或計算機系統(tǒng)的協(xié)作來實現(xiàn)。具體地,實現(xiàn)仿真的計算機等(此后,被稱作″第二計算機″)的處理器讀取及執(zhí)行仿真器程序,或附連設(shè)備被連接到第二計算機。結(jié)果,第二計算機充當仿真器?;诒景l(fā)明的仿真器也可以通過把附連設(shè)備連接到第二計算機的內(nèi)部總線或外部總線,或通過把附連設(shè)備插入到與第二計算機的處理器相連的預定插槽中來實現(xiàn)。
仿真器可以將包含圖1所示的目標機系統(tǒng)的CPU 13及總線連接結(jié)構(gòu)的硬件資源,以及其操作表示為對象的組件,每個對象均具有其適當角色。圖2是仿真器的對象框圖。在圖2中,連線表示相關(guān)關(guān)系,并且具有原點的連線表示從屬于該原點的所有關(guān)系(ownershiprelation)。
參考圖2的對象框圖,被提供(或形成)為對應于CPU 13的MIPS對象包含Cop1,Cop2,I總線,D總線及INTC,以作為針對與其它對象的相關(guān)連接的連接終端。
Cop1被提供為MIPS的系統(tǒng)協(xié)處理器。由于系統(tǒng)協(xié)處理器與MIPS核心緊密相關(guān),所以MIPS對象自身負責其功能。因此,如圖2所示,MIPS對象自身被連接到Cop1。在目標機系統(tǒng)中,向量運算單元被連接到協(xié)處理器。用于仿真向量運算單元的連接終端是另一個協(xié)處理器(Cop2)。對應于圖1所示的協(xié)處理器14的向量運算協(xié)處理器對象被連接到Cop2。
眾所周知,MIPS使用哈佛(Harvard)體系結(jié)構(gòu)。因此,存在作為目標機系統(tǒng)中的外部總線B2的兩個總線,即指令總線(I總線)及數(shù)據(jù)總線(D總線)。為了仿真兩個總線,如圖2所示,存在針對MIPS對象的I總線連接終端及D總線連接終端。I總線連接終端被連接到I總線對象,而D總線連接終端被連接到D總線對象。
MIPS對象的INTC連接終端被用于與外部中斷控制器的接口,以仿真外部中斷,并且被連接到INT控制器對象。
I總線對象仿真指令總線(I總線)的存儲器管理單元(MMU)。I總線對象執(zhí)行從指令總線的地址變換(物理地址/邏輯地址變換),并且確定指令高速緩存(圖2所示的高速緩存對象)中的命中/命中失誤。為了將功能仿真為總線主設(shè)備(BusMaster),存在針對I總線對象的主設(shè)備連接終端??偩€仲裁器(BusArbiter)對象被連接到主設(shè)備連接終端。
D總線對象仿真數(shù)據(jù)總線(D總線)的MMU,執(zhí)行自數(shù)據(jù)總線的地址變換(物理地址/邏輯地址變換),并且管理四個階段的寫緩沖器(WriteBuffer)。為了仿真總線主設(shè)備的功能,存在針對D總線對象的主設(shè)備連接終端??偩€仲裁器對象被連接到主設(shè)備連接終端。
總線仲裁器對象在從I總線對象或D總線對象發(fā)出總線訪問請求時,基于DMA控制器(DMA_Controller)的狀態(tài)估計直到獲得總線訪問權(quán)為止所計數(shù)的總線訪問周期數(shù)。為此,總線仲裁器對象具有連接到DMA控制器對象的DMAC連接終端。
總線仲裁器對象具有連接到多個外設(shè)對象的從設(shè)備連接終端。從設(shè)備連接終端用于一對多連接。總線仲裁器對象通過例如在存儲器映射上進行映射來管理每個外設(shè)對象。例如,當從I總線對象或D總線對象進行總線訪問時,基于存儲器映射找到適當外設(shè)對象進行總線訪問。
在外設(shè)對象中,DMA控制器對象及INT控制器對象在基于本發(fā)明的仿真器中具有特殊功能。
DMA控制器對象仿真目標機系統(tǒng)中的DMA控制器,并且監(jiān)視在當前時間點正被激活的DMA的狀態(tài)。因此,為了估計總線仲裁的周期數(shù),總線仲裁器對象發(fā)出獲得DMA的狀態(tài)的請求。
INT控制器對象管理中斷。更具體地,響應來自每個外設(shè)模塊的中斷請求,INT控制器對象管理針對MIPS對象的中斷標志。因此,從圖2中的外設(shè)類導出的每個外設(shè)#1到#n對象具有用于中斷請求的INTC連接終端。每個INTC連接終端被連接到INT控制器對象。INT控制器對象還被連接到MIPS對象的INTC連接終端。在接受中斷的定時,MIPS對象請求INT控制器對象以獲得中斷標志的狀態(tài)。
接著,在如上所述配置的仿真器中,描述仿真之后估計總線訪問周期數(shù)的方法。總線訪問周期數(shù)是從總線主設(shè)備針對總線訪問的請求到總線訪問完成的操作周期數(shù)。在這個例子中,描述在出現(xiàn)三種類型的訪問(具體地,指令總線讀取訪問,數(shù)據(jù)總線讀取訪問及數(shù)據(jù)總線寫入訪問)的情況下的操作,及估計總線處理時間的方法。
<指令總線讀取訪問>
圖3是指令總線讀取訪問的序列圖。上面的行示出對象名稱。參考圖3,MIPS對象向I總線對象發(fā)出指令讀取訪問(iRA1)。此時,發(fā)送到I總線對象的請求命令是″ReadBus()″。在執(zhí)行預定地址變換之后,I總線對象發(fā)送例如數(shù)據(jù)請求的指令請求到總線仲裁器對象(iRA2)。此時,發(fā)送到總線仲裁器對象的請求命令是″ReadBus()″。
總線仲裁器對象向?qū)诘刂酚成淦ヅ涞哪繕说耐庠O(shè)模塊(對象)發(fā)出數(shù)據(jù)請求(iRA3)。此時,發(fā)送到外設(shè)模塊#1到#n的每個的請求命令是″ReadBus()″。對應外設(shè)模塊把存儲在所請求的地址處的讀取數(shù)據(jù)及讀取所需的訪問周期數(shù)的數(shù)據(jù)(AS11)返回到對應于請求源的總線仲裁器對象(iRA4)。
總線仲裁器對象也向DMA控制器對象發(fā)出針對指示DMA的狀態(tài)的數(shù)據(jù)的請求(iRA5)。此時,發(fā)送到DMA控制器對象的請求命令是″GetDMAStatus()″。DMA控制器對象把指示DMA的狀態(tài)的DMA狀態(tài)(ST11)返回到總線仲裁器對象(iRA5)。結(jié)果,總線仲裁器對象可以接收DMA的當前狀態(tài)(iRA6)。因此,總線仲裁器對象基于DMA的狀態(tài)確定仲裁的周期數(shù)??偩€仲裁器對象把所確定的仲裁周期數(shù)加到讀取所需的訪問周期數(shù)上,并且向I總線對象發(fā)送讀數(shù)據(jù)和相加之后的訪問周期數(shù)數(shù)據(jù)(AS12)。
I總線對象判斷高速緩存命中/命中失誤的出現(xiàn)以開始計算要返回到MIPS對象的訪問周期數(shù)(iRA8)。此時,當判斷出現(xiàn)高速緩存命中失誤時,用讀數(shù)據(jù)獲得的周期數(shù)被確定為要返回到MIPS對象的訪問周期數(shù)。當判斷出現(xiàn)高速緩存命中時,一個周期被確定為要返回到MIPS對象的訪問周期數(shù)。接著,I總線對象發(fā)送讀數(shù)據(jù)及所確定的訪問周期數(shù)數(shù)據(jù)(AS13)到MIPS對象(iRA9)。
結(jié)果,由于MIPS對象獲得反映DMA的當前狀態(tài)及高速緩存的狀態(tài)的總線訪問周期的精確數(shù)量,所以MIPS對象可以調(diào)整其自身虛擬操作周期數(shù)為所獲得的總線訪問周期數(shù)。
<數(shù)據(jù)總線讀取訪問>
圖4是數(shù)據(jù)總線讀取訪問的序列圖。上面的行示出對象名稱。參考圖4,MIPS對象向D總線對象發(fā)出數(shù)據(jù)讀取訪問(dRA1)。此時,發(fā)送到D總線對象的請求命令是″ReadBus()″。在執(zhí)行預定地址變換之后,D總線對象發(fā)送數(shù)據(jù)讀取請求到總線仲裁器對象(dRA2)。此時,發(fā)送到總線仲裁器對象的請求命令是″ReadBus()″。
總線仲裁器對象向?qū)诘刂酚成淦ヅ涞哪繕说耐庠O(shè)模塊(對象)發(fā)出數(shù)據(jù)請求(dRA3)。此時,發(fā)送到外設(shè)模塊#1到#n的每個的請求命令是″ReadBus()″。對應外設(shè)模塊把存儲在所請求的地址處的讀取數(shù)據(jù)及讀取所需的訪問周期數(shù)數(shù)據(jù)(AS21)返回到對應于請求源的總線仲裁器對象(dRA4)??偩€仲裁器對象也向DMA控制器對象發(fā)出針對指示DMA的狀態(tài)的數(shù)據(jù)的請求(dRA5)。此時,發(fā)送到DMA控制器對象的請求命令是″GetDMAStatus()″。DMA控制器對象把指示DMA的狀態(tài)的DMA狀態(tài)(ST21)返回到總線仲裁器對象(dRA5)。總線仲裁器對象基于DMA的狀態(tài)確定仲裁周期數(shù)??偩€仲裁器對象把所確定的仲裁周期數(shù)加到讀取所需的訪問周期數(shù)上,以向D總線對象(dRA6)發(fā)送讀數(shù)據(jù)和相加之后的訪問周期數(shù)數(shù)據(jù)(AS22)。
D總線對象向MIPS對象(dRA7)發(fā)送讀數(shù)據(jù)及相加之后的訪問周期數(shù)數(shù)據(jù)(AS22),而無需任何處理(AS23)。結(jié)果,MIPS對象可以算出反映DMA的當前狀態(tài)及高速緩存的狀態(tài)的總線訪問周期的精確數(shù)量。
即使在數(shù)據(jù)總線讀取訪問的情況下,像在指令總線讀取訪問的情況中那樣,考慮到高速緩存管理功能,可以相加訪問周期數(shù)。
<數(shù)據(jù)總線寫入訪問>
圖5是數(shù)據(jù)總線寫入訪問的序列圖。上面的行示出對象名稱。參考圖5,MIPS對象向D總線對象發(fā)出數(shù)據(jù)寫入訪問(dWA1)。此時,發(fā)送到D總線對象的請求命令是″WriteBus()″。在執(zhí)行預定地址變換之后,D總線對象發(fā)送數(shù)據(jù)寫請求到總線仲裁器對象(dWA2)。此時,發(fā)送到總線仲裁器對象的請求命令是″WriteBus()″。
總線仲裁器對象向?qū)诘刂酚成淦ヅ涞哪繕说耐庠O(shè)模塊(對象)發(fā)出數(shù)據(jù)寫入請求(dWA3)。此時,發(fā)送到外設(shè)模塊#1到#n的每個的請求命令是″WriteBus()″。對應外設(shè)模塊把在所請求的地址處的數(shù)據(jù)寫入的完成和訪問所需的訪問周期數(shù)數(shù)據(jù)(AS31)返回到對應于請求源的總線仲裁器對象(iWA4)??偩€仲裁器對象也向DMA控制器對象發(fā)出針對指示DMA的狀態(tài)的數(shù)據(jù)的請求(dWA5)。此時,發(fā)送到DMA控制器對象的請求命令是″GetDMAStatus()″。DMA控制器對象把指示DMA的狀態(tài)的DMA狀態(tài)(ST31)返回到總線仲裁器對象(dWA5)??偩€仲裁器對象基于DMA的狀態(tài)確定仲裁周期數(shù)??偩€仲裁器對象把所確定的仲裁周期數(shù)加到寫入所需的訪問周期數(shù)上,并且向D總線對象發(fā)送相加之后的訪問周期數(shù)數(shù)據(jù)(AS32)。
當寫緩沖器(WriteBuffer)有空閑空間時,D總線對象確定周期數(shù)為1并且把它發(fā)送給MIPS對象。否則,D總線對象向MIPS對象發(fā)送所返回的周期數(shù)數(shù)據(jù)(AS33)(dWA7)。結(jié)果,MIPS對象可以估計反映DMA的當前狀態(tài)及寫緩沖器的狀態(tài)的訪問周期的精確數(shù)量。
如上所述,為了實現(xiàn)目標機系統(tǒng)中包含的多個硬件資源的功能,基于這個實施例的仿真器包含被提供為對應于目標機系統(tǒng)的CPU 13的MIPS對象,被提供為對應于目標機系統(tǒng)的外設(shè)的外設(shè)對象,被提供為對應于內(nèi)部總線B1和外部總線B2的I總線對象和D總線對象,和被提供為對應于DMA控制器15的DMA控制器對象。仿真器還包含具有總線訪問仲裁功能的總線仲裁器對象和用于執(zhí)行高速緩存管理的對象。因此,在仿真之后的計算機中,操作在目標機系統(tǒng)上運行的程序所需的虛擬操作周期數(shù)可以被精確地估計。因此,仿真之后的MIPS的虛擬操作定時可以容易地控制。
此外,針對總線訪問所需的周期數(shù)的每個因素劃分模塊。根據(jù)相應模塊所需的周期數(shù)的總和來估計總線訪問周期數(shù)。因此,獲得增加估計準確度的效果。
在例如MIPS的RISC處理器中,除哈佛體系結(jié)構(gòu)之外還使用流水線,以增加操作并行度并且減少指令執(zhí)行周期的外在數(shù)量。流水線把指令操作分割成適當數(shù)量的階段,并且并行操作這些階段以增加指令運算的速度。對于仿真MIPS核心的操作,也考慮流水線的操作以允許以更高準確度估計指令執(zhí)行的操作周期數(shù),以及允許所估計的操作周期數(shù)的外部輸出。
在這個實施例中,描述了在仿真MIPS對象的流水線使對I總線和D總線的每個訪問獨立,從而更加精確地估計指令操作時鐘數(shù)的情況下的示例性操作。
流水線的一般操作階段為五個階段;F(獲取)階段,D(解碼)階段,E(處理)階段,M(存儲器訪問)階段,以及W(回寫)階段。當上述五個階段的F階段及M階段的每個被配置為獨立總線時,獲得上述哈佛體系結(jié)構(gòu)。
盡管這些階段并行操作,但相鄰階段彼此相關(guān)。因此,各階段不能獨立操作,而是需要彼此調(diào)整。具體地,在相應階段中所需的周期的最大數(shù)量對應于操作所需的周期數(shù)。這個狀態(tài)在圖6中示出。
在圖6中,橫坐標軸指示時間(t),縱坐標指示處理順序。處理順序是F階段,D階段,E階段,M階段及W階段。所有階段并行操作并且順序地發(fā)出指令以便執(zhí)行。最下面的行中的數(shù)值對應于對應時間處的操作周期數(shù)。在圖6中,參考符號i101指示當響應指令#4進行存儲器訪問并且訪問周期數(shù)是1時使所有階段等待存儲器訪問完成的狀態(tài)。
此外,在圖6中,參考符號i102指示由于響應指令#9的指令獲取的延遲而使所有階段等待獲取完成的狀態(tài)。類似地,參考符號i103指示由于指令#9的執(zhí)行需要兩個周期而使其它階段等待指令#9的執(zhí)行完成的狀態(tài)。
在五個階段中,D階段和W階段的每個只需要一個周期的固定時間。因此,存在確定對應于圖1示出的CPU 13的MIPS對象的執(zhí)行周期數(shù)的三個因素,具體為F階段所需的周期數(shù)(I總線訪問處理時間),E階段所需的周期數(shù)(盡管正常指令需要一個周期,但很少需要若干周期),及M階段所需的周期數(shù)。
具體地,流水線中這三個因素的周期數(shù)被獨立地估計。在所估計的周期數(shù)中的最大周期數(shù)被用作執(zhí)行步驟周期數(shù),以允許以更高準確度估計操作周期數(shù)。
為描述流水線操作,下面詳細描述上述MIPS對象。圖7是示出MIPS對象的示例性內(nèi)部結(jié)構(gòu)的框圖。
MIPS對象100包含步驟周期數(shù)寄存器101,MIPS寄存器模塊102,獲取處理模塊103,解碼執(zhí)行處理模塊104,存儲器訪問處理模塊105,回寫處理模塊106,及臨時存儲操作期間相應處理模塊103到106的處理結(jié)果的三個ExecData對象113到115。上述模塊101到106的操作由MIPS對象100的控制機構(gòu)(未示出)控制。
步驟周期數(shù)寄存器101是在開始執(zhí)行步驟時被設(shè)置成0的寄存器(可變),并且允許每個階段中的處理模塊響應其自身階段所需的處理周期數(shù)的更新請求而存儲最大值。
MIPS寄存器模塊102仿真MIPS的硬件寄存器。MIPS寄存器模塊102具有針對MIPS對象的″PC″,″Hi″及″Low″,以及三十二個″通用寄存器(GPR)″。″PC″是程序計數(shù)器的值,并且″Hi″及″Low″是唯一值。
在三個ExecData對象113,114和115的每個中,存在例如″PC″,″Inst″,″解碼″,″TReg″,″結(jié)果″,及″訪問類型″的成員。
當讀取″Inst″時,″PC″是一個地址?!錓nst″是指令代碼?!褰獯a″是指令的分析結(jié)果?!褰獯a″被用于確定指令是加載還是存儲目標寄存器(MIPS寄存器或協(xié)處理器寄存器)的模塊,指令是否是分支指令等等?!錞reg″存儲要在Store存儲指令的情況下寫入的數(shù)據(jù)。否則,目標寄存器號被存儲在″Treg″中?!褰Y(jié)果″在加載/存儲指令的情況下存儲訪問目標地址。否則,操作結(jié)果數(shù)據(jù)被存儲在″結(jié)果″中?!逶L問類型″在加載/存儲指令的情況下存儲要訪問的訪問數(shù)據(jù)長度或協(xié)處理器號。在協(xié)處理器指令的情況下,要訪問的協(xié)處理器號被存儲在″訪問類型″中。否則,″訪問類型″未使用。
獲取處理模塊103訪問MIPS寄存器模塊102中的″PC″,并且通過使用I總線對象獲得由″PC″指示的地址的數(shù)據(jù)。獲取處理模塊103存儲用″PC″中的″PC″值和ExecData對象113的″Inst″讀取的數(shù)據(jù)。此時,從I總線對象獲得的數(shù)據(jù)讀取周期數(shù)被用于更新步驟周期數(shù)寄存器101。
解碼執(zhí)行處理模塊104訪問存儲在ExecData對象114的″Inst″中的指令以判斷存儲在其中的指令的類型。解碼執(zhí)行處理模塊104根據(jù)需要訪問MIPS寄存器模塊102,每個協(xié)處理器對象121的協(xié)處理器寄存器,以更新ExecData對象114的″解碼″,″Treg″,″結(jié)果″及″訪問類型″的數(shù)值。此時,估計執(zhí)行所需的周期數(shù)以更新步驟周期數(shù)寄存器101。
存儲器訪問處理模塊105首先訪問ExecData對象115的″解碼″以判斷指令是否是存儲器訪問指令。當指令不是存儲器訪問指令時,終止處理而無需任何其它處理。當指令是存儲器訪問指令時,判斷″解碼″是指示加載還是存儲。此外,存儲器訪問處理模塊105訪問存儲在″結(jié)果″中的訪問目標地址以向D總線對象發(fā)出讀/寫訪問請求。在存儲的情況下,要寫入的數(shù)據(jù)被存儲在″Treg″中。在加載的情況下,訪問″訪問類型″及″Treg″以識別存儲目標模塊和寄存器編號,以在指定寄存器中存儲寫入的數(shù)據(jù)。此時,從D總線對象獲得的數(shù)據(jù)讀取周期數(shù)被用于更新步驟周期數(shù)寄存器101。
回寫處理模塊106用于實現(xiàn)MIPS的延遲時隙。回寫處理模塊106與解碼執(zhí)行處理模塊104共享ExecData對象114?;貙懱幚砟K106在存儲器訪問處理模塊105的執(zhí)行之后更新寄存器中除了存儲器訪問指令的結(jié)果之外的執(zhí)行結(jié)果,以仿真MIPS的延遲時隙。
回寫處理模塊106首先遞增MIPS寄存器模塊102中的″PC″。接著,回寫處理模塊106訪問ExecData對象114中的″解碼″以判斷指令是否是存儲器訪問指令。當指令是存儲器訪問指令時,終止處理而無需任何進一步處理。當指令不是存儲器訪問指令時,回寫處理模塊106訪問″訪問類型″及″Treg″以判斷哪個模塊中的哪個寄存器要被更新。接著,回寫處理模塊106更新目標寄存器中的″結(jié)果″的值。由于這個處理總是在MIPS中在一個周期中完成,所以步驟周期數(shù)寄存器101不特別需要更新。
由獲取處理模塊103執(zhí)行的處理是F處理,由解碼執(zhí)行處理模塊104執(zhí)行的處理是D-E處理,由存儲器訪問處理模塊105執(zhí)行的處理是M處理,由回寫處理模塊106執(zhí)行的處理是W處理。通過使用基于這個實施例的仿真器按F處理,D-E處理,M處理及W處理的順序執(zhí)行處理,可以從步驟周期數(shù)寄存器101中的數(shù)據(jù)獲得步驟最終所需的周期數(shù)。
此外,在完成一個步驟的執(zhí)行之后,如圖8所示切換ExecData對象及各自階段之間的關(guān)系。結(jié)果,順序地執(zhí)行指令。圖8在左邊示出切換之前的ExecData對象,并且在右邊示出切換之后的ExecData對象。
在圖7示出的MIPS對象中,D階段中的處理和E階段中的處理被統(tǒng)一為D-E處理,并且未提供用于W處理的ExecData對象。這是由于以下原因。
=第一個原因=在第一個原因中,考慮流水線中級段的數(shù)量。如果流水線中級段的數(shù)量遞增,則處理速度變慢。例如,必須考慮到避免數(shù)據(jù)故障等等的轉(zhuǎn)移。因此,用盡可能少的級段數(shù)執(zhí)行處理是有利的。MIPS使用延遲一個級段的分支和一個級段的加載延遲。在延遲的分支中,在分支指令之后執(zhí)行的指令不是分支目標處的指令,而是即使在采用分支(建立分支)時仍跟隨分支指令的指令。在MIPS中,執(zhí)行一個后續(xù)指令(一個級段)。當執(zhí)行加載指令時,所加載的值不用于加載指令之后的指令。因此,有必要執(zhí)行在適當定時使用所加載的值的處理。加載延遲表示這個處理不是通過硬件而是通過軟件實現(xiàn)。引入兩個級段的優(yōu)點是簡化了硬件實現(xiàn)以使工作頻率提高。
=第二個原因=在第二個原因中,考慮數(shù)據(jù)故障和轉(zhuǎn)移。
例如,假定發(fā)出以下兩個指令。
$1=$2+$3(指令1)$4=$1+$1(指令2)當$1=0,$2=1并且$3=2被指定為第一狀態(tài)時,$4應當結(jié)果是6。在硬件中,這些指令穿過流水線的上述五個級段。然而,在W階段,指令被寫入寄存器堆。
當指令2進入D階段來訪問寄存器堆以讀取$1的值時,指令1仍然保持在E階段并且因此不在W階段。因而,寄存器堆中的$1仍然是0。如果繼續(xù)執(zhí)行處理,則$4是0。具體地,為了精確地執(zhí)行處理,指令2必須在D階段等待,直到指令1進入W階段。這個現(xiàn)象是數(shù)據(jù)故障。避免數(shù)據(jù)故障的技術(shù)是轉(zhuǎn)移。
在轉(zhuǎn)移中,來自E階段中的操作單元的輸出,要在M階段輸入的鎖存,及W階段中的輸入被循環(huán)返回到一個位置,在該位置中D階段中的結(jié)果被轉(zhuǎn)移到E階段。按照這種方式,尚未被寫入寄存器堆的寄存器的最新值可被用于D階段。通過轉(zhuǎn)移的實現(xiàn),D階段中的指令2可以把E階段中的指令3的結(jié)果(具體地,3)作為$1寄存器的值。因此,6被正確地存儲在$4寄存器中,而無需進入任何等待狀態(tài)(即無需停轉(zhuǎn)流水線)。
當通過仿真器仿真流水線時,同樣的問題在D階段,E階段及W階段被分別執(zhí)行(即,ExecData對象被分別執(zhí)行)的情況下出現(xiàn)。在這種情況下,出現(xiàn)對應對這個問題的處理的需要。
具體地,在仿真器中,期望將E階段,D階段及W階段作為一個處理來執(zhí)行。結(jié)果,不再有必要考慮數(shù)據(jù)故障。
=第三個原因=在第三個原因中,考慮延遲分支。為了仿真延遲的分支,只需要在F階段之后的階段執(zhí)行分支。延遲的分支的執(zhí)行對應于把分支目標的地址寫入PC。因此,在簡單實現(xiàn)中,在W階段中執(zhí)行延遲的分支。這是由于可以按照這種方式維護僅在W階段重寫寄存器的值的策略。
如前面針對第二個原因描述的,如果D階段,E階段及W階段被執(zhí)行為一個處理,則在F階段之后的周期中執(zhí)行W階段。因此,針對延遲的分支,獲得與第二個原因中的那些共同的利益。
=第四個原因=在第四原因中,考慮加載延遲。在加載延遲中,不是通過硬件來保證要響應加載指令之后的指令加載的寄存器的訪問。具體地,該訪問必須通過軟件來保證。如果把訪問要加載的寄存器的指令作為加載指令之后的指令提交,則讀取執(zhí)行加載指令之前的值??梢酝ㄟ^分別地執(zhí)行D階段及E階段及M階段來實現(xiàn)仿真。這是基于要在加載指令之后的指令中加載的寄存器的改寫指令的考慮。
在這種情況下,應當遵守指令順序。為此,需要在執(zhí)行M階段之后實現(xiàn)W階段。
=概括=它是對在MIPS對象中期望執(zhí)行的周期數(shù)的估計。如上所述,需要F階段,E階段及M階段來估計周期數(shù)。需要獨立地操作這些階段。另一方面,期望D階段和W階段與E階段同時操作。此外,必須在M階段之后執(zhí)行W階段。因此,D階段與E階段被同時執(zhí)行。此外,盡管W階段必須在執(zhí)行M階段之后執(zhí)行,但W階段與E階段作為一個虛擬步驟被同時執(zhí)行。結(jié)果,D階段和E階段被合并為一個階段。W階段的ExecData對象被用于D階段和E階段兩者。針對每個上述原因,在這個實施例中,在D-E階段中的處理被合并為一個階段,并且W階段的ExecData對象也被用于D-E階段。
接著,在基于這個實施例的仿真器中,具體描述仿真流水線的例子。為了方便,通過在這個例子中使用MIPS指令來描述如圖9所示的簡單計算的例子。
在流水線中的各階段中,在F階段中,從由″PC″指示的地址讀取指令。在D階段中,解釋讀取的指令以選擇下一個階段所需的原始數(shù)據(jù)。D階段的解碼結(jié)果也被用于后續(xù)階段。在E階段中,對在D階段選擇的數(shù)據(jù)執(zhí)行操作?;陧樞騻魉偷腄階段中的處理結(jié)果來選擇操作類型等等。在M階段中,響應操作結(jié)果進行存儲器訪問。基于順序傳送的D階段中的處理結(jié)果,選擇訪問的類型及指示是否進行訪問的信息。當不進行存儲器訪問時,E階段的結(jié)果被發(fā)送到下一個階段而無需任何其它處理。在W階段中,基于最終結(jié)果更新通用寄存器堆?;陧樞騻魉偷腄階段中的處理結(jié)果選擇要更新的寄存器堆。終止寄存器堆而無需針對D階段中的某些處理結(jié)果而對寄存器堆進行更新?!錚C″遞增1,并且繼續(xù)更新,除非提交跳轉(zhuǎn)指令。
在上述五個階段中,D階段和M階段的每個固定為一個周期。因此,剩余三個階段,即F階段,E階段及M階段影響步驟執(zhí)行周期數(shù)。
由于顯然指令順序必須與硬件的順序相同,所以按下面四個步驟仿真流水線。
獲取->解碼&執(zhí)行->存儲器->回寫及PC更新在上述前提下,將檢查當圖9中示出的MIPS指令由仿真器操作時的操作周期數(shù)。指令是以下四個。
ORI $r1,$r0,0x300LW $r2,0($r1)ADDI$r1,$r1,4LW $r3,0($r1)當高速緩存的行數(shù)是″4″時,上述四個指令中除了第一個之外的三個指令發(fā)生高速緩存命中有非常高的可能性。然而,在MIPS中,$r0的值固定為0。
圖10A示出步驟周期數(shù)寄存器101,MIPS寄存器模塊102,F(xiàn)階段的ExecData對象113,D-E/W階段的ExecData對象114,及M階段的ExecData對象115的示例性結(jié)構(gòu)。盡管大量寄存器模塊實際存在于如圖7的左上角所示的MIPS寄存器模塊102中,但只示出必要的寄存器模塊。步驟執(zhí)行周期數(shù)被存儲在步驟周期數(shù)寄存器101中。
在步驟執(zhí)行的開始處,MIPS寄存器模塊102中的″PC″被初始化成0,步驟計數(shù)器被初始化成″1″。步驟計數(shù)器的值″1″被存儲在步驟周期數(shù)寄存器101中。在F階段中,訪問這些PC值0和1,從而獲得指令代碼。接著,所獲得的指令代碼被存儲在與F階段相關(guān)的ExecData對象113中(圖10B)。
之后,總線訪問所需的周期數(shù)被設(shè)置成步驟執(zhí)行周期數(shù)(此后,假定步驟執(zhí)行周期數(shù)為″5″)。結(jié)果,步驟執(zhí)行周期數(shù)被從″1″更新為″5″(圖11A)。
在D階段中,讀取并解碼D-E/W階段的ExecData對象114的″Inst″。由于在當前時間″Inst″空閑,所以不執(zhí)行處理并且執(zhí)行周期數(shù)為″1″。由于這個數(shù)小于步驟執(zhí)行周期數(shù)″5″,所以不執(zhí)行更新。
在M階段中,M階段的ExecData對象115的″解碼″被讀取以確認存儲器訪問的執(zhí)行/非執(zhí)行。由于在當前時間″解碼″空閑,所以不執(zhí)行處理并且執(zhí)行周期數(shù)為″1″。由于這個數(shù)小于步驟執(zhí)行周期數(shù)″5″,所以不執(zhí)行更新。在W階段中,把″4″加到MIPS寄存器模塊102中的″PC″上以更新結(jié)果(圖11B)。在這個處理中,檢查其是否是除了存儲器訪問之外的指令。由于在當前時間″Inst″空閑,所以不執(zhí)行處理。為了執(zhí)行到下一個步驟,切換ExecData對象113到115的關(guān)系。具體地,F(xiàn)階段的ExecData對象113的內(nèi)容被切換到D-E/W階段的ExecData對象114(圖12A)。
作為上述仿真操作的結(jié)果,每個階段中的執(zhí)行周期數(shù)受如圖20A所示F階段中的處理的影響。操作周期數(shù)為″5″,即,存儲在步驟周期數(shù)存儲寄存器101中的數(shù)值。
在下一個步驟中,首先,在F階段中,訪問PC值″5″,從而獲得指令代碼。接著,所獲得的指令代碼被存儲在ExecData對象113中(圖12B)。之后,總線訪問所需的周期數(shù)被寫入步驟周期數(shù)寄存器101中(″1″為高速緩存命中;圖13A)。在D階段中,讀取ExecData對象114中的″Inst″以解釋″ORI $r1,$r0,0x300″。接著,指示正常指令(正常)的信息被存儲在″解碼″中,指示要更新的寄存器的″1″被存儲在″Treg″中,并且$r0(=0)和邏輯加法的結(jié)果″0x300″被存儲在″結(jié)果″中(圖13B)。ORI指令被設(shè)置成″1″,并且與計數(shù)器數(shù)值″1″比較以在一個周期中終止DecodeExe。在這個例子的情況下,由于ORI指令等于或小于計數(shù)器數(shù)值,所以O(shè)RI指令未被更新。在M階段中,由于不執(zhí)行處理,所以未出現(xiàn)狀態(tài)改變。在W階段中,″PC″首先被更新(圖14A)。接著,從ExecData對象114讀取″解碼″以確認指令不是存儲器訪問。由于″解碼″是″正常″,所以使用″結(jié)果″的值更新由″Treg″的值指示的寄存器。具體地,″0x300″被設(shè)置到MIPS寄存器模塊102中的$r1(圖15B)。為了執(zhí)行到下一個步驟,切換ExecData對象113到115的關(guān)系(圖15A)。
作為上述仿真操作的結(jié)果,在完成如圖20B所示的所有階段的處理時,每個階段中的執(zhí)行周期數(shù)為″1″。因此,存儲在步驟周期數(shù)寄存器101中的數(shù)值在這種情況下是″1″。
在第三步驟中,首先,在F階段中,訪問PC數(shù)值″8″,從而獲得指令代碼。接著,所獲得的指令代碼被存儲在ExecData對象113中(圖15B)。之后,總線訪問周期數(shù)被寫為對應于高速緩存命中數(shù)的″1″以重寫計數(shù)器數(shù)值。在D階段中,從ExecData對象114讀取″Inst″以解釋″LW,$2,0($r1)″。接著,″加載″被存儲在″解碼″中,″2″被存儲在″Treg″中,對應于0+$r1的″0x300″被存儲在″結(jié)果″中,并且″字″被存儲在″訪問類型″中(圖16A)。由于在D階段中的LW的處理在一個周期內(nèi)完成,所以比較″1″與計數(shù)器數(shù)值。由于處理數(shù)等于或小于計數(shù)器數(shù)值,所以不執(zhí)行更新。在M階段中,讀取ExecData對象115中的″解碼″。由于″正?!灞淮鎯υ凇褰獯a″中,所以判斷出不進行存儲器訪問。在W階段中,在把″PC″更新到″12″之后,讀取ExecData對象114中的″解碼″(圖16B)。由于″加載″被存儲在″解碼″中,所以判斷指令為存儲器訪問指令。作為處理,不執(zhí)行任何處理。為了執(zhí)行到下一個步驟,切換ExecData對象113到115的關(guān)系(圖17A)。
作為上述仿真操作的結(jié)果,在完成如圖20C所示的所有階段的處理時,每個階段中的執(zhí)行周期數(shù)為″1″。因此,存儲在步驟周期數(shù)寄存器101中的數(shù)值在這種情況下是″1″。
在最后步驟中,首先,在F階段中,象在上述處理中那樣,對″PC″和″Inst″進行寫入。隨著總線訪問,再次確定高速緩存命中。確定周期數(shù)為1,并且更新計數(shù)器數(shù)值為″1″(圖17B)。在D階段中,從ExecData對象114讀取″Inst″以計算″$1+4″。結(jié)果數(shù)被存儲在″結(jié)果″中。在″Treg″中,存儲″1″。在″解碼″中,存儲″正?!?。周期數(shù)為″1″(圖18A)。在M階段中,讀取ExecData對象115中的″解碼″以確認″加載″。接著,對由″結(jié)果″指示的地址,以由″訪問類型″指示的長度(“字”=4字節(jié))進行總線訪問。接著,結(jié)果被寫入由″Treg″指示的寄存器中。假定總線訪問地址0x300需要五個周期。在這種情況下,由于周期數(shù)大于計數(shù)器數(shù)值,所以計數(shù)器數(shù)值被更新為″5″(圖18B)。在W階段中,在把″PC″更新到″16″之后,讀取ExecData對象114中的″解碼″。由于″正?!灞淮鎯υ凇褰獯a″中,所以″結(jié)果″的數(shù)值被寫入由″Treg″指示的寄存器中(圖19)。
作為上述仿真操作的結(jié)果,每個階段中的執(zhí)行周期數(shù)受如圖20D所示的M階段中的處理的影響。因此,操作周期數(shù)為″5″。
如上所述,當要仿真MIPS核心時,也仿真RISC處理器包含的流水線。結(jié)果,可以高準確度地計算周期數(shù)。流水線的仿真意味著針對要順序執(zhí)行的每個流水線階段劃分處理,而無需逐個執(zhí)行指令。對于執(zhí)行,選擇各階段所需時間的最長時間作為步驟需要的周期數(shù)。結(jié)果,確保與其它硬件資源的操作周期數(shù)的同步。
在上述實施例和例子中,將用面向?qū)ο蠊ぞ吲渲玫姆抡嫫髅枋鰹橐粋€例子。然而,本發(fā)明不必僅通過這種工具來實施。例如,本發(fā)明可以實現(xiàn)為軟件仿真器。此外,仿真器的一部分功能可以通過軟件配置,而剩余部分可以通過硬件配置。
本發(fā)明可以被廣泛地用于例如娛樂設(shè)備及通信設(shè)備的各種設(shè)備中,其用于按正確的操作定時操作具有不同性能等等的另一個計算機的程序。
權(quán)利要求
1.一種仿真方法,包括步驟在第二計算機中通過軟件提供第一計算機的功能,所述功能包含處理器的功能,用于連接處理器和外設(shè)的總線的功能,以及用于仲裁總線的訪問權(quán)的仲裁裝置的功能;由通過軟件提供的處理器向連接到總線的外設(shè)發(fā)出預定請求;由仲裁裝置向外設(shè)傳送發(fā)出到總線的請求,從外設(shè)接收指示執(zhí)行該請求所需的基本時間的數(shù)據(jù),以及進一步向處理器傳送所接收的數(shù)據(jù);以及由接收到數(shù)據(jù)的處理器基于由該數(shù)據(jù)指示的基本時間控制其自身的虛擬操作定時。
2.如權(quán)利要求1所述的仿真方法,其中仲裁裝置仲裁用于限制處理器對總線的一部分訪問的限制裝置,并且把仲裁所需的基本時間加到由從外設(shè)接收的數(shù)據(jù)指示的基本時間上,以向處理器傳送通過相加獲得的總線訪問周期數(shù)的數(shù)據(jù)。
3.如權(quán)利要求2所述的仿真方法,其中限制裝置包括與處理器競爭對總線的訪問權(quán)的直接存儲器訪問(DMA)功能模塊。
4.如權(quán)利要求2所述的仿真方法,還包括通過軟件提供第一處理器的高速緩沖存儲器和高速緩存管理裝置的步驟,其中所述高速緩存管理裝置判斷高速緩存命中和高速緩存命中失誤中的哪種情況已出現(xiàn)在高速緩沖存儲器中,并且基于判斷結(jié)果確定要進一步加到通過所述相加獲得的基本時間上的基本時間。
5.如權(quán)利要求4所述的仿真方法,其中基本時間是用于確定第一計算機的虛擬操作定時的總線訪問周期數(shù)。
6.一種仿真器,用于通過軟件實現(xiàn)不同于該仿真器的第一計算機中包含的多個硬件資源的功能,包括被提供為對應于第一計算機的處理器的處理器對象;被提供為對應于第一計算機的外設(shè)的外設(shè)對象;被提供為對應于處理器和外設(shè)所連接到的總線的總線對象;以及仲裁裝置,用于仲裁對總線對象的訪問,其中外設(shè)對象和仲裁裝置的每個具有把實現(xiàn)對其請求的指令所需的基本時間返回到該指令的請求源的功能;以及處理器對象具有向連接到由仲裁裝置的仲裁允許訪問的總線對象的外設(shè)對象發(fā)出請求的功能,以及基于接收請求結(jié)果所需的基本時間來控制其自身虛擬操作定時的功能。
7.如權(quán)利要求6所述的仿真器,還包括DMA控制器對象,其被提供為對應于第一計算機中的DMA控制器,第一計算機中的DMA控制器與處理器競爭對總線的訪問權(quán),其中仲裁裝置執(zhí)行對DMA控制器對象的仲裁,并且把仲裁所需的基本時間加到要由其自身返回的基本時間上。
8.如權(quán)利要求7所述的仿真器,還包括第一計算機的高速緩沖存儲器以及被提供為對應于第一計算機中的高速緩存管理裝置的高速緩存管理裝置,第一計算機中的高速緩存管理裝置具有把執(zhí)行對其請求的指令所需的基本時間返回到處理器對象的功能,其中高速緩存管理裝置還判斷高速緩存命中和高速緩存命中失誤中的哪種情況已出現(xiàn)在高速緩沖存儲器中,并且基于判斷結(jié)果確定要被加到所要返回到處理器對象的基本時間上的基本時間。
9.一種用于在第二計算機中實現(xiàn)第一計算機的功能的計算機可連接設(shè)備,所述功能包含處理器的功能,處理器和外設(shè)所連接到的總線的功能,以及用于仲裁對總線的訪問權(quán)的仲裁裝置的功能,其中計算機可連接設(shè)備在連接到第二計算機時,通過與第二計算機的硬件資源的協(xié)作,在第二計算機中提供被提供為對應于第一計算機的處理器的處理器對象;被提供為對應于第一計算機的外設(shè)的外設(shè)對象;被提供為對應于處理器和外設(shè)所連接到的總線的總線對象;以及仲裁裝置,用于仲裁對總線對象的訪問;計算機可連接設(shè)備為外設(shè)對象和仲裁裝置的每個提供把實現(xiàn)對其請求的指令所需的基本時間返回到該指令的請求源的功能;以及計算機可連接設(shè)備為處理器對象提供向連接到由仲裁裝置的仲裁允許訪問的總線對象的外設(shè)對象發(fā)出請求的功能,以及基于接收請求結(jié)果所需的基本時間來控制第二計算機中的虛擬操作定時的功能。
10.一種仿真器程序,用于通過軟件使第二計算機充當用于實現(xiàn)不同于第二計算機的第一計算機中包含的多個硬件資源的功能的仿真器,該仿真器程序使第二計算機充當被提供為對應于第一計算機的處理器的處理器對象;被提供為對應于第一計算機的外設(shè)的外設(shè)對象;被提供為對應于處理器和外設(shè)所連接到的的總線的總線對象;以及仲裁裝置,用于仲裁對總線對象的訪問,其中仿真器程序為外設(shè)對象和仲裁裝置的每個提供把實現(xiàn)對其請求的指令所需的基本時間返回到該指令的請求源的功能;及仿真器程序為處理器對象提供向連接到由仲裁裝置的仲裁允許訪問的總線對象的外設(shè)對象發(fā)出請求的功能,以及基于接收請求結(jié)果所需的基本時間來控制其自身虛擬操作定時的功能。
11.一種用于仿真以流水線方式實現(xiàn)指令的處理器的功能的方法,該方法包括步驟用多級段的處理模塊配置流水線,其中相鄰模塊彼此相關(guān),并且使對應于處理器的處理器對象以并行及獨立方式操作處理模塊;由處理器對象輸入指令到多級段的處理模塊;由多級段的處理模塊的操作處理模塊針對指令的每個步驟存儲在每個操作中遞增的操作周期數(shù);以及輸出所存儲的操作周期數(shù)中的最大值,以作為該步驟中流水線的執(zhí)行步驟周期數(shù)。
12.如權(quán)利要求11所述的仿真方法,還包括提供能夠由多級段的處理模塊訪問的寄存器的步驟,其中處理模塊之一在寄存器中存儲所述處理模塊之一的操作周期數(shù);以及其操作周期數(shù)大于已經(jīng)存儲在寄存器中的操作周期數(shù)的處理模塊將存儲在寄存器中的操作周期數(shù)更新為其操作周期數(shù)。
13.一種用于仿真以流水線方式實現(xiàn)指令的處理器的操作的仿真器,包括對應于處理器的處理器對象;多級段的處理模塊,其中相鄰處理模塊彼此相關(guān)以對應于流水線,該多級段的處理模塊能夠基于處理器對象的控制以并行及獨立方式操作;以及周期數(shù)存儲裝置,用于針對輸入指令的每個步驟,存儲在所述多級段的處理模塊中具有最大操作周期數(shù)的處理模塊的操作周期數(shù),其中處理器對象輸出存儲在周期數(shù)存儲裝置中的操作周期數(shù),以作為該步驟中流水線的執(zhí)行步驟周期數(shù)。
14.如權(quán)利要求13所述的仿真器,其中處理器對象在指令的第一步驟中設(shè)置周期數(shù)存儲裝置中存儲的操作周期數(shù)為初值,并且針對每個級段中的處理模塊的每個操作,確定所操作的處理模塊的操作周期數(shù)是否大于已經(jīng)存儲在周期數(shù)存儲裝置中的操作周期數(shù),并且允許在所操作的處理模塊的操作周期數(shù)更大時更新存儲在周期數(shù)存儲裝置中的操作周期數(shù)。
15.如權(quán)利要求13所述的仿真器,其中多級段的處理模塊包含無論何指令均具有固定操作周期數(shù)的處理模塊。
16.一種計算機可連接設(shè)備,用于在一設(shè)備中仿真以流水線方式實現(xiàn)指令的處理器的功能,所述設(shè)備不同于裝有該處理器的設(shè)備,其中該計算機可連接設(shè)備在連接到所述設(shè)備時,在所述設(shè)備中通過與所述設(shè)備的硬件資源協(xié)作來提供對應于處理器的處理器對象;多級段的處理模塊,其中相鄰處理模塊彼此相關(guān)以對應于流水線,所述處理模塊能夠基于處理器對象的控制以并行及獨立方式操作;以及周期數(shù)存儲裝置,用于針對輸入指令的每個步驟,存儲在所述多級段的處理模塊中具有最大操作周期數(shù)的處理模塊的操作周期數(shù),計算機可連接設(shè)備使處理器對象輸出存儲在周期數(shù)存儲裝置中的操作周期數(shù),以作為這個步驟的流水線執(zhí)行步驟周期數(shù)。
17.一種用于使計算機充當仿真器的仿真器程序,該仿真器用于仿真以流水線方式實現(xiàn)指令的處理器的操作,所述仿真器程序使計算機充當對應于處理器的處理器對象;多級段的處理模塊,其中相鄰處理模塊彼此相關(guān)以對應于流水線,所述處理模塊能夠基于處理器對象的控制以并行及獨立方式操作;以及周期數(shù)存儲裝置,用于針對輸入指令的每個步驟,存儲所述多級段的處理模塊中的處理模塊的操作周期數(shù),其中仿真器程序使處理器對象輸出存儲在周期數(shù)存儲裝置中的操作周期數(shù),以作為該步驟中流水線的執(zhí)行步驟周期數(shù)。
全文摘要
公開了一種仿真方法、仿真器、計算機可連接設(shè)備及仿真器程序。所提供的是優(yōu)化仿真之后的處理器的虛擬操作定時的技術(shù)?;诒景l(fā)明,為了精確地估計仿真之后的總線訪問周期數(shù),針對每個因素劃分在從處理器(MIPS)提交指令時訪問所需的周期數(shù),并且總線訪問周期數(shù)被估計為相應因素所需的周期數(shù)的總和。例如,總線仲裁器對象從執(zhí)行來自MIPS的請求的外設(shè)接收指示執(zhí)行請求所需的基本時間的數(shù)據(jù)并且從DMA控制器接收DMA的當前狀態(tài),并且通知MIPS接收數(shù)據(jù)及接收狀態(tài)。MIPS基于基本時間優(yōu)化其自身虛擬操作定時。
文檔編號G06F13/36GK1912838SQ20061011491
公開日2007年2月14日 申請日期2006年8月10日 優(yōu)先權(quán)日2005年8月10日
發(fā)明者小泉貴義 申請人:索尼計算機娛樂公司