仿真方法、仿真器、计算机可连接设备及仿真器程序转让专利

申请号 : CN200610114917.X

文献号 : CN1912838B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 小泉贵义

申请人 : 索尼计算机娱乐公司

摘要 :

公开了一种仿真方法、仿真器、计算机可连接设备及仿真器程序。所提供的是优化仿真之后的处理器的虚拟操作定时的技术。基于本发明,为了精确地估计仿真之后的总线访问周期数,针对每个因素划分在从处理器(MIPS)提交指令时访问所需的周期数,并且总线访问周期数被估计为相应因素所需的周期数的总和。例如,总线仲裁器对象从执行来自MIPS的请求的外设接收指示执行请求所需的基本时间的数据并且从DMA控制器接收DMA的当前状态,并且通知MIPS接收数据及接收状态。MIPS基于基本时间优化其自身虚拟操作定时。

权利要求 :

1.一种用于仿真以流水线方式实现指令的处理器的功能的方法,该方法包括步骤:用多级段的处理模块配置流水线,其中相邻模块彼此相关,并且使对应于处理器的处理器对象以并行及独立方式操作处理模块;

由处理器对象输入指令到多级段的处理模块;

由多级段的处理模块的操作处理模块针对指令的每个步骤存储在每个操作中递增的操作周期数;以及输出所存储的操作周期数中的最大值,以作为该步骤中流水线的执行步骤周期数。

2.如权利要求1所述的仿真方法,还包括提供能够由多级段的处理模块访问的寄存器的步骤,其中:处理模块之一在寄存器中存储所述处理模块之一的操作周期数;以及其操作周期数大于已经存储在寄存器中的操作周期数的处理模块将存储在寄存器中的操作周期数更新为其操作周期数。

3.一种用于仿真以流水线方式实现指令的处理器的操作的仿真器,包括:对应于处理器的处理器对象;

多级段的处理模块,其中相邻处理模块彼此相关以对应于流水线,该多级段的处理模块能够基于处理器对象的控制以并行及独立方式操作;以及周期数存储装置,用于针对输入指令的每个步骤,存储在所述多级段的处理模块中具有最大操作周期数的处理模块的操作周期数,其中处理器对象输出存储在周期数存储装置中的操作周期数,以作为该步骤中流水线的执行步骤周期数。

4.如权利要求3所述的仿真器,其中处理器对象在指令的第一步骤中设置周期数存储装置中存储的操作周期数为初值,并且针对每个级段中的处理模块的每个操作,确定所操作的处理模块的操作周期数是否大于已经存储在周期数存储装置中的操作周期数,并且允许在所操作的处理模块的操作周期数更大时更新存储在周期数存储装置中的操作周期数。

5.如权利要求3所述的仿真器,其中多级段的处理模块包含至少一个具有固定操作周期数的处理模块。

6.一种计算机可连接装置,用于在一设备中仿真以流水线方式实现指令的处理器的功能,所述设备不同于装有该处理器的设备,其中:该计算机可连接装置在连接到所述设备时,在所述设备中通过与所述设备的硬件资源协作来提供:对应于处理器的处理器对象;

多级段的处理模块,其中相邻处理模块彼此相关以对应于流水线,所述处理模块能够基于处理器对象的控制以并行及独立方式操作;以及周期数存储装置,用于针对输入指令的每个步骤,存储在所述多级段的处理模块中具有最大操作周期数的处理模块的操作周期数,计算机可连接装置使处理器对象输出存储在周期数存储装置中的操作周期数,以作为这个步骤的流水线的执行步骤周期数。

说明书 :

仿真方法、仿真器、计算机可连接设备及仿真器程序

[0001] 对相关专利申请的交叉引用
[0002] 本申请要求于2005年8月10日提交的日本专利申请No.2005-231528及于2005年8月10日提交的日本专利申请No.2005-231529的优先权,在这里参考引用其公开内容。

技术领域

[0003] 本发明涉及仿真器,尤其是在把性能等等方面不同的另一个计算机系统实现到指定计算机系统中时,精确地调整该指定计算机系统中包含的多个硬件资源的操作定时的技术。

背景技术

[0004] 为了在具有不同处理性能等等的另一个计算机系统(第二计算机系统)上操作为指定计算机系统(第一计算机系统)创建的程序,使用仿真器。当仿真器被用于仿真在其上运行一般程序的计算机系统时,某些程序的操作定时必须严格地与硬件资源的操作定时一致。为了仿真这种计算机系统,有必要以某种方式把硬件资源的操作定时与程序的操作定时同步。在这种情况下,通常,仿真器估计每个硬件资源的虚拟操作周期数,并且比较每个硬件资源的虚拟操作周期数和操作周期数,以在仿真之后调整程序的操作定时。
[0005] 然而,在第二计算机系统上程序可能不按正确定时正确地运行,除非以足够高的准确度估计每个硬件资源的虚拟操作周期数。
[0006] 然而,由于各种原因,难于高准确度地估计硬件资源的虚拟操作周期数。
[0007] 例如,当要仿真的系统包含CPU及通过总线连接到CPU的外设时,有必要不仅按其各自正确定时操作CPU和外设,而且调整CPU和外设的操作定时,以调整整个系统中的CPU和外设的定时。
[0008] 为了如整个系统那样整体调整定时,显然需要高准确度地估计每个CPU及外设的虚拟操作周期数。然而,在所有硬件资源中,尤其难于估计CPU的虚拟操作周期数。这是由于CPU的操作周期数可能受例如指令的执行顺序,高速缓存及总线访问的各种因素的影响。
[0009] 例如,操作周期数因高速缓存是否存在于CPU中而有所不同,并且即使高速缓存出现在CPU中,操作周期数仍然因高速缓存中是否出现命中或命中失误而有所不同。当高速缓存命中出现时,操作被封闭在CPU内以完成数据交换。然而,当高速缓存命中失误出现时,有必要计算直至获得总线访问权所经过的操作周期数。
[0010] 此外,如果要仿真的CPU执行流水线操作,则更加难于估计虚拟操作周期数。此后,将针对这个方面给出描述。
[0011] 传统仿真器中最简单的仿真器顺序地逐个处理指令。具体地,不执行指令,除非前面指令的执行己完成。然而,例如精简指令集计算机(RISC)CPU的近来的处理器以流水线的方式处理指令。在流水线处理中,每个级段中的操作周期数是不固定的,而是取决于相邻(前一和后一)状态。一般指令从不在一个周期中完成,除非至少发生高速缓存命中。
[0012] 因此,当如此仿真的计算机包含以流水线方式操作的处理器时,存在非常难于在仿真之后调整程序的操作定时的问题。
[0013] 考虑到上述问题,本发明的基本目的是提供一种利于在仿真之后进行操作定时调整的仿真方法,例如,一种利于调整包含CPU和外设的整个系统的操作定时的仿真方法。
[0014] 本发明的另一个目的是提供一种使得能够在仿真之后使程序的操作定时与硬件资源的操作定时同步的仿真方法。
[0015] 此外,本发明的另一个目的是提供一种利于在仿真具有以流水线方式处理指令的处理器的计算机之后,调整程序的操作定时的仿真方法。
[0016] 本发明的另一个目的是提供一种能以适当方式执行仿真方法的仿真器,计算机可连接设备及用于在计算机上实现仿真器的仿真器程序。

发明内容

[0017] 基于本发明的一个方面的仿真方法是在仿真之后正确地估计总线访问周期数,以优化处理器的操作定时。为此,针对每个因素划分在从处理器(MIPS)发出指令时进行总线访问所需的周期数。根据相应因素的周期数的总和来估计总线访问周期数。
[0018] 更具体地,仿真方法包含的步骤有:在第二计算机中通过软件提供第一计算机的功能,所述功能包含处理器的功能,用于连接处理器和外设的总线的功能,以及用于仲裁总线的访问权的仲裁装置的功能;由通过软件提供的处理器向连接到总线的外设发出预定请求;由仲裁装置向外设传送发出到总线的请求,从外设接收指示执行该请求所需的基本时间的数据,以及进一步向处理器传送所接收的数据;以及由接收到数据的处理器基于由该数据指示的基本时间控制其自身的虚拟操作定时。
[0019] ″外设″是例如计算机的外部设备。术语″基本时间(substantial time)″表示基本时间信息。例如,基本时间是用于确定第一计算机的虚拟操作定时的总线访问周期数。操作时钟也是一种基本时间。
[0020] 仲裁装置对用于限制处理器对总线的一部分访问的限制装置,例如与处理器竞争对总线的访问权的DMA功能模块进行仲裁。仲裁装置也可以把仲裁所需的基本时间加到由从外设接收的数据指示的基本时间上,以向处理器传送通过相加获得的总线访问周期数的数据。仲裁装置也可以通过软件在第二计算机中提供第一计算机的高速缓冲存储器和高速缓存管理装置,其中高速缓存管理装置可以判断高速缓冲存储器中的命中或命中失误,并且也可以基于判断结果确定要进一步加到通过所述相加获得的基本时间上的基本时间。按照这种方式,可以获得更加实际的基本时间,从而在仿真之后获得处理器中的最优虚拟操作周期的估计。
[0021] 本发明提供了一种仿真器,用于通过软件实现不同于包含该仿真器的计算机的第一计算机中包含的多个硬件资源的功能。该仿真器包含:被提供为对应于第一计算机的处理器的处理器对象;被提供为对应于第一计算机的外设的外设对象;被提供为对应于处理器和外设所连接到的总线的总线对象;以及仲裁装置,用于仲裁对总线对象的访问,在仿真器中,外设对象和仲裁装置的每个具有把实现对其请求的指令所需的基本时间返回到该指令的请求源的功能;以及处理器对象具有向连接到由仲裁装置的仲裁允许访问的总线对象的外设对象发出请求的功能,以及基于接收请求结果所需的基本时间来控制其自身虚拟操作定时的功能。
[0022] 基于本发明的仿真器还可以包含被提供为对应于第一计算机中的DMA控制器的DMA控制器对象,DMA控制器与处理器竞争对总线的访问权,并且在仿真器中,仲裁装置执行对DMA控制器对象的仲裁,并且把仲裁所需的基本时间加到要由其自身返回的基本时间上。
[0023] 基于本发明的仿真器还可以包含第一计算机的高速缓冲存储器以及被提供为对应于第一计算机中的高速缓存管理装置的高速缓存管理装置,第一计算机中的高速缓存管理装置具有把执行对其请求的指令所需的基本时间返回到处理器对象的功能,在仿真器中,高速缓存管理装置还可以判断高速缓存命中和高速缓存命中失误中的哪种情况已出现在高速缓冲存储器中,并且基于判断结果确定要被加到所要返回到处理器对象的基本时间上的基本时间。
[0024] 此外,基于本发明,通过上述仿真器实现的处理器对象,外设对象,总线对象,仲裁装置等等可以通过可连接设备或仿真器程序来提供。
[0025] 基于本发明的另一个方面,提供一种用于仿真以流水线方式实现指令的处理器的功能的方法。更具体地,该方法包含步骤:用多级段的处理模块配置流水线,其中相邻模块彼此相关,并且使对应于处理器的处理器对象以并行及独立方式操作处理模块;由处理器对象输入指令到多级段的处理模块;由多级段的处理模块的操作处理模块针对指令的每个步骤存储在每个操作中递增的操作周期数;以及输出所存储的操作周期数中的最大值,以作为该步骤中流水线的执行步骤周期数。
[0026] 仿真方法还可以包含提供能够由多级段的处理模块访问的寄存器的步骤,并且在仿真器中,任何处理模块把其自身操作周期数存储在寄存器中,并且其操作周期数大于已经存储在寄存器中的操作周期数的处理模块将存储在寄存器中的操作周期数更新为其操作周期数。
[0027] 本发明还提供了一种用于仿真以流水线方式实现指令的处理器的操作的仿真器。该仿真器包含:对应于处理器的处理器对象;多级段的处理模块,其中相邻处理模块彼此相关以对应于流水线,该多级段的处理模块能够基于处理器对象的控制以并行及独立方式操作;以及周期数存储装置,用于针对输入指令的每个步骤,存储在所述多级段的处理模块中具有最大操作周期数的处理模块的操作周期数,并且仿真器中,处理器对象输出存储在周期数存储装置中的操作周期数,以作为该步骤中流水线的执行步骤周期数。
[0028] 在基于本发明的另一个方面的仿真器中,处理器对象在指令的第一步骤中设置周期数存储装置中存储的操作周期数为初值,并且针对每个级段中的处理模块的每个操作,确定所操作的处理模块的操作周期数是否大于已经存储在周期数存储装置中的操作周期数,并且允许在所操作的处理模块的操作周期数更大时更新存储在周期数存储装置中的操作周期数。多级段的处理模块可以包含无论何指令均具有固定操作周期数的处理模块。
[0029] 此外,基于本发明,通过上述仿真器实现的处理器对象,处理模块,周期数存储装置等等可以由附连设备或仿真器程序提供。
[0030] 基于本发明,可以获得利于在仿真之后进行程序的操作定时的调整的效果。
[0031] 此外,基于本发明,仿真包含指定计算机(第一计算机)的处理器的总线连接结构,以获得要返回到处理器、从第一计算机的处理器发出的指令所需的基本时间。因此,即使针对其操作定时被各种因素改变的处理器,在对应于仿真目标(第二计算机)的计算机中的处理器的虚拟操作定时(虚拟操作周期数)可以容易地与仿真目标的硬件资源的操作定时(操作周期数)同步。
[0032] 此外,基于本发明,流水线由多级段的处理模块构成,并且可以配置每个处理模块,使得对应于处理器的处理器对象并行及独立地操作。另外,对于输入指令的每个步骤,指定多级段的处理模块中的操作处理模块的操作周期数的最大值,以便作为该步骤中流水线的执行步骤周期数输出。因此,即使对于以流水线方式处理指令的处理器(在该流水线中相邻处理彼此相关),操作周期数可以在仿真目标中估计。因此,本发明具有的突出效果在于利于仿真目标中操作周期数的同步。

附图说明

[0033] 在附图中:
[0034] 图1图解了要仿真的目标机系统的结构视图;
[0035] 图2图解了基于本发明的仿真器的对象框图;
[0036] 图3图解了指令总线读取访问的序列图;
[0037] 图4图解了数据总线读取访问的序列图;
[0038] 图5图解了数据总线写入访问的序列图;
[0039] 图6图解了示出流水线中调整操作的必要性的视图;
[0040] 图7图解了示出MIPS对象(类)的示例性内部结构的视图;
[0041] 图8图解了ExecData对象和切换阶段之间的关系的视图;
[0042] 图9图解了示出在仿真流水线时示例性指令的视图;
[0043] 图10A和10B图解了例如步骤周期数寄存器的值,要存储在MIPS寄存器模块中的值,及当实际实现仿真时要存储在ExecData对象中的数据的每个内容的说明性视图;
[0044] 图11A和11B图解了例如步骤周期数寄存器的值,要存储在MIPS寄存器模块中的值,及当实际实现仿真时要存储在ExecData对象中的数据的每个内容的说明性视图;
[0045] 图12A和12B图解了例如步骤周期数寄存器的值,要存储在MIPS寄存器模块中的值,及当实际实现仿真时要存储在ExecData对象中的数据的每个内容的说明性视图;
[0046] 图13A和13B图解了例如步骤周期数寄存器的值,要存储在MIPS寄存器模块中的值,及当实际实现仿真时要存储在ExecData对象中的数据的每个内容的说明性视图;
[0047] 图14A和14B图解了例如步骤周期数寄存器的值,要存储在MIPS寄存器模块中的值,及当实际实现仿真时要存储在ExecData对象中的数据的每个内容的说明性视图;
[0048] 图15A和15B图解了例如步骤周期数寄存器的值,要存储在MIPS寄存器模块中的值,及当实际实现仿真时要存储在ExecData对象中的数据的每个内容的说明性视图;
[0049] 图16A和16B图解了例如步骤周期数寄存器的值,要存储在MIPS寄存器模块中的值,及当实际实现仿真时要存储在ExecData对象中的数据的每个内容的说明性视图;
[0050] 图17A和17B图解了例如步骤周期数寄存器的值,要存储在MIPS寄存器模块中的值,及当实际实现仿真时要存储在ExecData对象中的数据的每个内容的说明性视图;
[0051] 图18A和18B图解了例如步骤周期数寄存器的值,要存储在MIPS寄存器模块中的值,及当实际实现仿真时要存储在ExecData对象中的数据的每个内容的说明性视图;
[0052] 图19图解了例如步骤周期数寄存器的值,要存储在MIPS寄存器模块中的值,及当实际实现仿真时要存储在ExecData对象中的数据的每个内容的说明性视图;
[0053] 图20A图解了示出当在流水线中操作图9中的指令时,第一步骤的操作周期数的视图;
[0054] 图20B图解了示出第二步骤的操作周期数的视图;
[0055] 图20C图解了示出第三步骤的操作周期数的视图;及
[0056] 图20D图解了示出最后步骤的操作周期数的视图。

具体实施方式

[0057] 在下文说明本发明的优选实施例。首先,描述要仿真的计算机系统(此后,被称作″目标机系统″)。如示出示例性结构的图1所示,目标机系统被配置为包含:系统LSI10,具体地是其中多个功能被集成在一个芯片上的超级多功能大规模集成(LSI);以及由随机访问存储器(RAM)组成的系统存储器20。
[0058] 图形处理单元(GPU)30通过总线桥11被连接到系统LSI 10。外部外设IC 40和50等等也通过总线桥12及外部总线B2被连接到系统LSI10。内部总线B1被连接在两个总线桥11和12之间。CPU 13,直接存储器访问(DMA)控制器15及多个内部外设模块16到19被连接到内部总线B1。
[0059] 在这个例子中,CPU 13是MIPS核心(由MIPS技术公司设计的CPU核心)。作为MIPS核心,CPU 13包含用于向量运算的协处理器14。协处理器14是简化指令集以允许进行高速处理的RISC处理器。DMA控制器15允许来自CPU 13的DMA并且具有总线仲裁器的功能(仲裁)。系统存储器20被连接到DMA控制器15。每个内部外设模块16到19与CPU 13协作以处理特定硬件功能。
[0060] CPU 13和DMA控制器15的每个充当总线主设备。因此,CPU 13和DMA控制器15彼此竞争对内部总线B1的访问权。当外部外设IC 40和50通过外部总线B2和总线桥12被连接到内部总线B1时,每个外部外设IC 40和50的寄存器组被映射在系统存储器20的存储器映射上。
[0061] 当CPU 13通过内部总线B1访问例如系统存储器20的模块时,CPU 13首先必须通过总线仲裁获得总线访问权。CPU 13的获得总线访问权的访问被称作″主设备访问″。对于主设备访问,当内部总线B1正被DMA控制器15使用时,使来自CPU 13的访问进行等待。当CPU 13获得访问权时,将该访问通知要访问的模块。在CPU 13获取访问权之后的访问被称作″从设备访问″。对于从设备访问,根据要访问的模块的状态,访问周期数有所不同。此外,当要访问的模块在外部总线B2上时,需要总线桥12的处理时间。
[0062] 如上所述,例如总线访问周期数的CPU 13的操作定时由三个要素确定,即,直到获取对内部总线B1的访问权的周期数,进行总线访问的周期数,及要访问的模块的响应周期数。
[0063] [仿真器的示例性结构]
[0064] 接着将描述基于本发明的用于仿真目标机系统的仿真器的示例性结构。
[0065] 基于本发明的仿真器通过仿真器程序及包含存储器的计算机或计算机系统的协作来实现。具体地,实现仿真的计算机等(此后,被称作″第二计算机″)的处理器读取及执行仿真器程序,或附连设备被连接到第二计算机。结果,第二计算机充当仿真器。基于本发明的仿真器也可以通过把附连设备连接到第二计算机的内部总线或外部总线,或通过把附连设备插入到与第二计算机的处理器相连的预定插槽中来实现。
[0066] 仿真器可以将包含图1所示的目标机系统的CPU 13及总线连接结构的硬件资源,以及其操作表示为对象的组件,每个对象均具有其适当角色。图2是仿真器的对象框图。在图2中,连线表示相关关系,并且具有原点的连线表示从属于该原点的所有关系(ownership relation)。
[0067] 参考图2的对象框图,被提供(或形成)为对应于CPU 13的MIPS对象包含Cop1,Cop2,I总线,D总线及INTC,以作为针对与其它对象的相关连接的连接终端。
[0068] Cop1被提供为MIPS的系统协处理器。由于系统协处理器与MIPS核心紧密相关,所以MIPS对象自身负责其功能。因此,如图2所示,MIPS对象自身被连接到Cop1。在目标机系统中,向量运算单元被连接到协处理器。用于仿真向量运算单元的连接终端是另一个协处理器(Cop2)。对应于图1所示的协处理器14的向量运算协处理器对象被连接到Cop2。
[0069] 众所周知,MIPS使用哈佛(Harvard)体系结构。因此,存在作为目标机系统中的外部总线B2的两个总线,即指令总线(I总线)及数据总线(D总线)。为了仿真两个总线,如图2所示,存在针对MIPS对象的I总线连接终端及D总线连接终端。I总线连接终端被连接到I总线对象,而D总线连接终端被连接到D总线对象。
[0070] MIPS对象的INTC连接终端被用于与外部中断控制器的接口,以仿真外部中断,并且被连接到INT控制器对象。
[0071] I总线对象仿真指令总线(I总线)的存储器管理单元(MMU)。I总线对象执行从指令总线的地址变换(物理地址/逻辑地址变换),并且确定指令高速缓存(图2所示的高速缓存对象)中的命中/命中失误。为了将功能仿真为总线主设备(BusMaster),存在针对I总线对象的主设备连接终端。总线仲裁器(BusArbiter)对象被连接到主设备连接终端。
[0072] D总线对象仿真数据总线(D总线)的MMU,执行自数据总线的地址变换(物理地址/逻辑地址变换),并且管理四个阶段的写缓冲器(WriteBuffer)。为了仿真总线主设备的功能,存在针对D总线对象的主设备连接终端。总线仲裁器对象被连接到主设备连接终端。
[0073] 总线仲裁器对象在从I总线对象或D总线对象发出总线访问请求时,基于DMA控制器(DMA_Controller)的状态估计直到获得总线访问权为止所计数的总线访问周期数。为此,总线仲裁器对象具有连接到DMA控制器对象的DMAC连接终端。
[0074] 总线仲裁器对象具有连接到多个外设对象的从设备连接终端。从设备连接终端用于一对多连接。总线仲裁器对象通过例如在存储器映射上进行映射来管理每个外设对象。例如,当从I总线对象或D总线对象进行总线访问时,基于存储器映射找到适当外设对象进行总线访问。
[0075] 在外设对象中,DMA控制器对象及INT控制器对象在基于本发明的仿真器中具有特殊功能。
[0076] DMA控制器对象仿真目标机系统中的DMA控制器,并且监视在当前时间点正被激活的DMA的状态。因此,为了估计总线仲裁的周期数,总线仲裁器对象发出获得DMA的状态的请求。
[0077] INT控制器对象管理中断。更具体地,响应来自每个外设模块的中断请求,INT控制器对象管理针对MIPS对象的中断标志。因此,从图2中的外设类导出的每个外设#1到#n对象具有用于中断请求的INTC连接终端。每个INTC连接终端被连接到INT控制器对象。INT控制器对象还被连接到MIPS对象的INTC连接终端。在接受中断的定时,MIPS对象请求INT控制器对象以获得中断标志的状态。
[0078] [虚拟操作周期数估计]
[0079] 接着,在如上所述配置的仿真器中,描述仿真之后估计总线访问周期数的方法。总线访问周期数是从总线主设备针对总线访问的请求到总线访问完成的操作周期数。在这个例子中,描述在出现三种类型的访问(具体地,指令总线读取访问,数据总线读取访问及数据总线写入访问)的情况下的操作,及估计总线处理时间的方法。
[0080] <指令总线读取访问>
[0081] 图3是指令总线读取访问的序列图。上面的行示出对象名称。参考图3,MIPS对象向I总线对象发出指令读取访问(iRA1)。此时,发送到I总线对象的请求命令是″ReadBus()″。在执行预定地址变换之后,I总线对象发送例如数据请求的指令请求到总线仲裁器对象(iRA2)。此时,发送到总线仲裁器对象的请求命令是″ReadBus()″。
[0082] 总线仲裁器对象向对应于地址映射匹配的目标的外设模块(对象)发出数据请求(iRA3)。此时,发送到外设模块#1到#n的每个的请求命令是″ReadBus()″。对应外设模块把存储在所请求的地址处的读取数据及读取所需的访问周期数的数据(AS11)返回到对应于请求源的总线仲裁器对象(iRA4)。
[0083] 总线仲裁器对象也向DMA控制器对象发出针对指示DMA的状态的数据的请求(iRA5)。此时,发送到DMA控制器对象的请求命令是″GetDMAStatus()″。DMA控制器对象把指示DMA的状态的DMA状态(ST11)返回到总线仲裁器对象(iRA5)。结果,总线仲裁器对象可以接收DMA的当前状态(iRA6)。因此,总线仲裁器对象基于DMA的状态确定仲裁的周期数。总线仲裁器对象把所确定的仲裁周期数加到读取所需的访问周期数上,并且向I总线对象发送读数据和相加之后的访问周期数数据(AS12)。
[0084] I总线对象判断高速缓存命中/命中失误的出现以开始计算要返回到MIPS对象的访问周期数(iRA8)。此时,当判断出现高速缓存命中失误时,用读数据获得的周期数被确定为要返回到MIPS对象的访问周期数。当判断出现高速缓存命中时,一个周期被确定为要返回到MIPS对象的访问周期数。接着,I总线对象发送读数据及所确定的访问周期数数据(AS13)到MIPS对象(iRA9)。
[0085] 结果,由于MIPS对象获得反映DMA的当前状态及高速缓存的状态的总线访问周期的精确数量,所以MIPS对象可以调整其自身虚拟操作周期数为所获得的总线访问周期数。
[0086] <数据总线读取访问>
[0087] 图4是数据总线读取访问的序列图。上面的行示出对象名称。参考图4,MIPS对象向D总线对象发出数据读取访问(dRA1)。此时,发送到D总线对象的请求命令是″ReadBus()″。在执行预定地址变换之后,D总线对象发送数据读取请求到总线仲裁器对象(dRA2)。此时,发送到总线仲裁器对象的请求命令是″ReadBus()″。
[0088] 总线仲裁器对象向对应于地址映射匹配的目标的外设模块(对象)发出数据请求(dRA3)。此时,发送到外设模块#1到#n的每个的请求命令是″ReadBus()″。对应外设模块把存储在所请求的地址处的读取数据及读取所需的访问周期数数据(AS21)返回到对应于请求源的总线仲裁器对象(dRA4)。总线仲裁器对象也向DMA控制器对象发出针对指示DMA的状态的数据的请求(dRA5)。此时,发送到DMA控制器对象的请求命令是″GetDMAStatus()″。DMA控制器对象把指示DMA的状态的DMA状态(ST21)返回到总线仲裁器对象(dRA5)。总线仲裁器对象基于DMA的状态确定仲裁周期数。总线仲裁器对象把所确定的仲裁周期数加到读取所需的访问周期数上,以向D总线对象(dRA6)发送读数据和相加之后的访问周期数数据(AS22)。
[0089] D总线对象向MIPS对象(dRA7)发送读数据及相加之后的访问周期数数据(AS22),而无需任何处理(AS23)。结果,MIPS对象可以算出反映DMA的当前状态及高速缓存的状态的总线访问周期的精确数量。
[0090] 即使在数据总线读取访问的情况下,像在指令总线读取访问的情况中那样,考虑到高速缓存管理功能,可以相加访问周期数。
[0091] <数据总线写入访问>
[0092] 图5是数据总线写入访问的序列图。上面的行示出对象名称。参考图5,MIPS对象向D总线对象发出数据写入访问(dWA1)。此时,发送到D总线对象的请求命令是″WriteBus()″。在执行预定地址变换之后,D总线对象发送数据写请求到总线仲裁器对象(dWA2)。此时,发送到总线仲裁器对象的请求命令是″WriteBus()″。
[0093] 总线仲裁器对象向对应于地址映射匹配的目标的外设模块(对象)发出数据写入请求(dWA3)。此时,发送到外设模块#1到#n的每个的请求命令是″WriteBus()″。对应外设模块把在所请求的地址处的数据写入的完成和访问所需的访问周期数数据(AS31)返回到对应于请求源的总线仲裁器对象(iWA4)。总线仲裁器对象也向DMA控制器对象发出针对指示DMA的状态的数据的请求(dWA5)。此时,发送到DMA控制器对象的请求命令是″GetDMAStatus()″。DMA控制器对象把指示DMA的状态的DMA状态(ST31)返回到总线仲裁器对象(dWA5)。总线仲裁器对象基于DMA的状态确定仲裁周期数。总线仲裁器对象把所确定的仲裁周期数加到写入所需的访问周期数上,并且向D总线对象发送相加之后的访问周期数数据(AS32)。
[0094] 当写缓冲器(WriteBuffer)有空闲空间时,D总线对象确定周期数为1并且把它发送给MIPS对象。否则,D总线对象向MIPS对象发送所返回的周期数数据(AS33)(dWA7)。结果,MIPS对象可以估计反映DMA的当前状态及写缓冲器的状态的访问周期的精确数量。
[0095] 如上所述,为了实现目标机系统中包含的多个硬件资源的功能,基于这个实施例的仿真器包含被提供为对应于目标机系统的CPU 13的MIPS对象,被提供为对应于目标机系统的外设的外设对象,被提供为对应于内部总线B1和外部总线B2的I总线对象和D总线对象,和被提供为对应于DMA控制器15的DMA控制器对象。仿真器还包含具有总线访问仲裁功能的总线仲裁器对象和用于执行高速缓存管理的对象。因此,在仿真之后的计算机中,操作在目标机系统上运行的程序所需的虚拟操作周期数可以被精确地估计。因此,仿真之后的MIPS的虚拟操作定时可以容易地控制。
[0096] 此外,针对总线访问所需的周期数的每个因素划分模块。根据相应模块所需的周期数的总和来估计总线访问周期数。因此,获得增加估计准确度的效果。
[0097] [涉及流水线的操作定时估计]
[0098] 在例如MIPS的RISC处理器中,除哈佛体系结构之外还使用流水线,以增加操作并行度并且减少指令执行周期的外在数量。流水线把指令操作分割成适当数量的阶段,并且并行操作这些阶段以增加指令运算的速度。对于仿真MIPS核心的操作,也考虑流水线的操作以允许以更高准确度估计指令执行的操作周期数,以及允许所估计的操作周期数的外部输出。
[0099] 在这个实施例中,描述了在仿真MIPS对象的流水线使对I总线和D总线的每个访问独立,从而更加精确地估计指令操作时钟数的情况下的示例性操作。
[0100] 流水线的一般操作阶段为五个阶段;F(获取)阶段,D(解码)阶段,E(处理)阶段,M(存储器访问)阶段,以及W(回写)阶段。当上述五个阶段的F阶段及M阶段的每个被配置为独立总线时,获得上述哈佛体系结构。
[0101] 尽管这些阶段并行操作,但相邻阶段彼此相关。因此,各阶段不能独立操作,而是需要彼此调整。具体地,在相应阶段中所需的周期的最大数量对应于操作所需的周期数。这个状态在图6中示出。
[0102] 在图6中,横坐标轴指示时间(t),纵坐标指示处理顺序。处理顺序是F阶段,D阶段,E阶段,M阶段及W阶段。所有阶段并行操作并且顺序地发出指令以便执行。最下面的行中的数值对应于对应时间处的操作周期数。在图6中,参考符号i101指示当响应指令#4进行存储器访问并且访问周期数是1时使所有阶段等待存储器访问完成的状态。
[0103] 此外,在图6中,参考符号i102指示由于响应指令#9的指令获取的延迟而使所有阶段等待获取完成的状态。类似地,参考符号i103指示由于指令#9的执行需要两个周期而使其它阶段等待指令#9的执行完成的状态。
[0104] 在五个阶段中,D阶段和W阶段的每个只需要一个周期的固定时间。因此,存在确定对应于图1示出的CPU 13的MIPS对象的执行周期数的三个因素,具体为F阶段所需的周期数(I总线访问处理时间),E阶段所需的周期数(尽管正常指令需要一个周期,但很少需要若干周期),及M阶段所需的周期数。
[0105] 具体地,流水线中这三个因素的周期数被独立地估计。在所估计的周期数中的最大周期数被用作执行步骤周期数,以允许以更高准确度估计操作周期数。
[0106] 为描述流水线操作,下面详细描述上述MIPS对象。图7是示出MIPS对象的示例性内部结构的框图。
[0107] MIPS对象100包含步骤周期数寄存器101,MIPS寄存器模块102,获取处理模块103,解码执行处理模块104,存储器访问处理模块105,回写处理模块106,及临时存储操作期间相应处理模块103到106的处理结果的三个ExecData对象113到115。上述模块101到106的操作由MIPS对象100的控制机构(未示出)控制。
[0108] 步骤周期数寄存器101是在开始执行步骤时被设置成0的寄存器(可变),并且允许每个阶段中的处理模块响应其自身阶段所需的处理周期数的更新请求而存储最大值。
[0109] MIPS寄存器模块102仿真MIPS的硬件寄存器。MIPS寄存器模块102具有针对MIPS对象的″PC″,″Hi″及″Low″,以及三十二个″通用寄存器(GPR)″。″PC″是程序计数器的值,并且″Hi″及″Low″是唯一值。
[0110] 在三个ExecData对象113,114和115的每个中,存在例如″PC″,″Inst″,″解码″,″TReg″,″结果″,及″访问类型″的成员。
[0111] 当读取″Inst″时,″PC″是一个地址。″Inst″是指令代码。″解码″是指令的分析结果。″解码″被用于确定指令是加载还是存储目标寄存器(MIPS寄存器或协处理器寄存器)的模块,指令是否是分支指令等等。″Treg″存储要在Store存储指令的情况下写入的数据。否则,目标寄存器号被存储在″Treg″中。″结果″在加载/存储指令的情况下存储访问目标地址。否则,操作结果数据被存储在″结果″中。″访问类型″在加载/存储指令的情况下存储要访问的访问数据长度或协处理器号。在协处理器指令的情况下,要访问的协处理器号被存储在″访问类型″中。否则,″访问类型″未使用。
[0112] 获取处理模块103访问MIPS寄存器模块102中的″PC″,并且通过使用I总线对象获得由″PC″指示的地址的数据。获取处理模块103存储用″PC″中的″PC″值和ExecData对象113的″Inst″读取的数据。此时,从I总线对象获得的数据读取周期数被用于更新步骤周期数寄存器101。
[0113] 解码执行处理模块104访问存储在ExecData对象114的″Inst″中的指令以判断存储在其中的指令的类型。解码执行处理模块104根据需要访问MIPS寄存器模块102,每个协处理器对象121的协处理器寄存器,以更新ExecData对象114的″解码″,″Treg″,″结果″及″访问类型″的数值。此时,估计执行所需的周期数以更新步骤周期数寄存器101。
[0114] 存储器访问处理模块105首先访问ExecData对象115的″解码″以判断指令是否是存储器访问指令。当指令不是存储器访问指令时,终止处理而无需任何其它处理。当指令是存储器访问指令时,判断″解码″是指示加载还是存储。此外,存储器访问处理模块105访问存储在″结果″中的访问目标地址以向D总线对象发出读/写访问请求。在存储的情况下,要写入的数据被存储在″Treg″中。在加载的情况下,访问″访问类型″及″Treg″以识别存储目标模块和寄存器编号,以在指定寄存器中存储写入的数据。此时,从D总线对象获得的数据读取周期数被用于更新步骤周期数寄存器101。
[0115] 回写处理模块106用于实现MIPS的延迟时隙。回写处理模块106与解码执行处理模块104共享ExecData对象114。回写处理模块106在存储器访问处理模块105的执行之后更新寄存器中除了存储器访问指令的结果之外的执行结果,以仿真MIPS的延迟时隙。
[0116] 回写处理模块106首先递增MIPS寄存器模块102中的″PC″。接着,回写处理模块106访问ExecData对象114中的″解码″以判断指令是否是存储器访问指令。当指令是存储器访问指令时,终止处理而无需任何进一步处理。当指令不是存储器访问指令时,回写处理模块106访问″访问类型″及″Treg″以判断哪个模块中的哪个寄存器要被更新。接着,回写处理模块106更新目标寄存器中的″结果″的值。由于这个处理总是在MIPS中在一个周期中完成,所以步骤周期数寄存器101不特别需要更新。
[0117] 由获取处理模块103执行的处理是F处理,由解码执行处理模块104执行的处理是D-E处理,由存储器访问处理模块105执行的处理是M处理,由回写处理模块106执行的处理是W处理。通过使用基于这个实施例的仿真器按F处理,D-E处理,M处理及W处理的顺序执行处理,可以从步骤周期数寄存器101中的数据获得步骤最终所需的周期数。
[0118] 此外,在完成一个步骤的执行之后,如图8所示切换ExecData对象及各自阶段之间的关系。结果,顺序地执行指令。图8在左边示出切换之前的ExecData对象,并且在右边示出切换之后的ExecData对象。
[0119] 在图7示出的MIPS对象中,D阶段中的处理和E阶段中的处理被统一为D-E处理,并且未提供用于W处理的ExecData对象。这是由于以下原因。
[0120] =第一个原因=
[0121] 在第一个原因中,考虑流水线中级段的数量。如果流水线中级段的数量递增,则处理速度变慢。例如,必须考虑到避免数据故障等等的转移。因此,用尽可能少的级段数执行处理是有利的。MIPS使用延迟一个级段的分支和一个级段的加载延迟。在延迟的分支中,在分支指令之后执行的指令不是分支目标处的指令,而是即使在采用分支(建立分支)时仍跟随分支指令的指令。在MIPS中,执行一个后续指令(一个级段)。当执行加载指令时,所加载的值不用于加载指令之后的指令。因此,有必要执行在适当定时使用所加载的值的处理。加载延迟表示这个处理不是通过硬件而是通过软件实现。引入两个级段的优点是简化了硬件实现以使工作频率提高。
[0122] =第二个原因=
[0123] 在第二个原因中,考虑数据故障和转移。
[0124] 例如,假定发出以下两个指令。
[0125] $1=$2+$3(指令1)
[0126] $4=$1+$1(指令2)
[0127] 当$1=0,$2=1并且$3=2被指定为第一状态时,$4应当结果是6。在硬件中,这些指令穿过流水线的上述五个级段。然而,在W阶段,指令被写入寄存器堆。
[0128] 当指令2进入D阶段来访问寄存器堆以读取$1的值时,指令1仍然保持在E阶段并且因此不在W阶段。因而,寄存器堆中的$1仍然是0。如果继续执行处理,则$4是0。具体地,为了精确地执行处理,指令2必须在D阶段等待,直到指令1进入W阶段。这个现象是数据故障。避免数据故障的技术是转移。
[0129] 在转移中,来自E阶段中的操作单元的输出,要在M阶段输入的锁存,及W阶段中的输入被循环返回到一个位置,在该位置中D阶段中的结果被转移到E阶段。按照这种方式,尚未被写入寄存器堆的寄存器的最新值可被用于D阶段。通过转移的实现,D阶段中的指令2可以把E阶段中的指令3的结果(具体地,3)作为$1寄存器的值。因此,6被正确地存储在$4寄存器中,而无需进入任何等待状态(即无需停转流水线)。
[0130] 当通过仿真器仿真流水线时,同样的问题在D阶段,E阶段及W阶段被分别执行(即,ExecData对象被分别执行)的情况下出现。在这种情况下,出现对应对这个问题的处理的需要。
[0131] 具体地,在仿真器中,期望将E阶段,D阶段及W阶段作为一个处理来执行。结果,不再有必要考虑数据故障。
[0132] =第三个原因=
[0133] 在第三个原因中,考虑延迟分支。为了仿真延迟的分支,只需要在F阶段之后的阶段执行分支。延迟的分支的执行对应于把分支目标的地址写入PC。因此,在简单实现中,在W阶段中执行延迟的分支。这是由于可以按照这种方式维护仅在W阶段重写寄存器的值的策略。
[0134] 如前面针对第二个原因描述的,如果D阶段,E阶段及W阶段被执行为一个处理,则在F阶段之后的周期中执行W阶段。因此,针对延迟的分支,获得与第二个原因中的那些共同的利益。
[0135] =第四个原因=
[0136] 在第四原因中,考虑加载延迟。在加载延迟中,不是通过硬件来保证要响应加载指令之后的指令加载的寄存器的访问。具体地,该访问必须通过软件来保证。如果把访问要加载的寄存器的指令作为加载指令之后的指令提交,则读取执行加载指令之前的值。可以通过分别地执行D阶段及E阶段及M阶段来实现仿真。这是基于要在加载指令之后的指令中加载的寄存器的改写指令的考虑。
[0137] 在这种情况下,应当遵守指令顺序。为此,需要在执行M阶段之后实现W阶段。
[0138] =概括=
[0139] 它是对在MIPS对象中期望执行的周期数的估计。如上所述,需要F阶段,E阶段及M阶段来估计周期数。需要独立地操作这些阶段。另一方面,期望D阶段和W阶段与E阶段同时操作。此外,必须在M阶段之后执行W阶段。因此,D阶段与E阶段被同时执行。此外,尽管W阶段必须在执行M阶段之后执行,但W阶段与E阶段作为一个虚拟步骤被同时执行。结果,D阶段和E阶段被合并为一个阶段。W阶段的ExecData对象被用于D阶段和E阶段两者。针对每个上述原因,在这个实施例中,在D-E阶段中的处理被合并为一个阶段,并且W阶段的ExecData对象也被用于D-E阶段。
[0140] [具体例子]
[0141] 接着,在基于这个实施例的仿真器中,具体描述仿真流水线的例子。为了方便,通过在这个例子中使用MIPS指令来描述如图9所示的简单计算的例子。
[0142] 在流水线中的各阶段中,在F阶段中,从由″PC″指示的地址读取指令。在D阶段中,解释读取的指令以选择下一个阶段所需的原始数据。D阶段的解码结果也被用于后续阶段。在E阶段中,对在D阶段选择的数据执行操作。基于顺序传送的D阶段中的处理结果来选择操作类型等等。在M阶段中,响应操作结果进行存储器访问。基于顺序传送的D阶段中的处理结果,选择访问的类型及指示是否进行访问的信息。当不进行存储器访问时,E阶段的结果被发送到下一个阶段而无需任何其它处理。在W阶段中,基于最终结果更新通用寄存器堆。基于顺序传送的D阶段中的处理结果选择要更新的寄存器堆。终止寄存器堆而无需针对D阶段中的某些处理结果而对寄存器堆进行更新。″PC″递增1,并且继续更新,除非提交跳转指令。
[0143] 在上述五个阶段中,D阶段和M阶段的每个固定为一个周期。因此,剩余三个阶段,即F阶段,E阶段及M阶段影响步骤执行周期数。
[0144] 由于显然指令顺序必须与硬件的顺序相同,所以按下面四个步骤仿真流水线。
[0145] 获取->解码&执行->存储器->回写及PC更新
[0146] 在上述前提下,将检查当图9中示出的MIPS指令由仿真器操作时的操作周期数。指令是以下四个。
[0147] ORI $r1,$r0,0x300
[0148] LW $r2,0($r1)
[0149] ADDI $r1,$r1,4
[0150] LW $r3,0($r1)
[0151] 当高速缓存的行数是″4″时,上述四个指令中除了第一个之外的三个指令发生高速缓存命中有非常高的可能性。然而,在MIPS中,$r0的值固定为0。
[0152] 图10A示出步骤周期数寄存器101,MIPS寄存器模块102,F阶段的ExecData对象113,D-E/W阶段的ExecData对象114,及M阶段的ExecData对象115的示例性结构。尽管大量寄存器模块实际存在于如图7的左上角所示的MIPS寄存器模块102中,但只示出必要的寄存器模块。步骤执行周期数被存储在步骤周期数寄存器101中。
[0153] 在步骤执行的开始处,MIPS寄存器模块102中的″PC″被初始化成0,步骤计数器被初始化成″1″。步骤计数器的值″1″被存储在步骤周期数寄存器101中。在F阶段中,访问这些PC值0和1,从而获得指令代码。接着,所获得的指令代码被存储在与F阶段相关的ExecData对象113中(图10B)。
[0154] 之后,总线访问所需的周期数被设置成步骤执行周期数(此后,假定步骤执行周期数为″5″)。结果,步骤执行周期数被从″1″更新为″5″(图11A)。
[0155] 在D阶段中,读取并解码D-E/W阶段的ExecData对象114的″Inst″。由于在当前时间″Inst″空闲,所以不执行处理并且执行周期数为″1″。由于这个数小于步骤执行周期数″5″,所以不执行更新。
[0156] 在M阶段中,M阶段的ExecData对象115的″解码″被读取以确认存储器访问的执行/非执行。由于在当前时间″解码″空闲,所以不执行处理并且执行周期数为″1″。由于这个数小于步骤执行周期数″5″,所以不执行更新。在W阶段中,把″4″加到MIPS寄存器模块102中的″PC″上以更新结果(图11B)。在这个处理中,检查其是否是除了存储器访问之外的指令。由于在当前时间″Inst″空闲,所以不执行处理。为了执行到下一个步骤,切换ExecData对象113到115的关系。具体地,F阶段的ExecData对象113的内容被切换到D-E/W阶段的ExecData对象114(图12A)。
[0157] 作为上述仿真操作的结果,每个阶段中的执行周期数受如图20A所示F阶段中的处理的影响。操作周期数为″5″,即,存储在步骤周期数存储寄存器101中的数值。
[0158] 在下一个步骤中,首先,在F阶段中,访问PC值″5″,从而获得指令代码。接着,所获得的指令代码被存储在ExecData对象113中(图12B)。之后,总线访问所需的周期数被写入步骤周期数寄存器101中(″1″为高速缓存命中;图13A)。在D阶段中,读取ExecData对象114中的″Inst″以解释″ORI$r1,$r0,0x300″。接着,指示正常指令(正常)的信息被存储在″解码″中,指示要更新的寄存器的″1″被存储在″Treg″中,并且$r0(=0)和逻辑加法的结果″0x300″被存储在″结果″中(图13B)。ORI指令被设置成″1″,并且与计数器数值″1″比较以在一个周期中终止DecodeExe。在这个例子的情况下,由于ORI指令等于或小于计数器数值,所以ORI指令未被更新。在M阶段中,由于不执行处理,所以未出现状态改变。在W阶段中,″PC″首先被更新(图14A)。接着,从ExecData对象114读取″解码″以确认指令不是存储器访问。由于″解码″是″正常″,所以使用″结果″的值更新由″Treg″的值指示的寄存器。具体地,″0x300″被设置到MIPS寄存器模块102中的$r1(图15B)。为了执行到下一个步骤,切换ExecData对象113到115的关系(图15A)。
[0159] 作为上述仿真操作的结果,在完成如图20B所示的所有阶段的处理时,每个阶段中的执行周期数为″1″。因此,存储在步骤周期数寄存器101中的数值在这种情况下是″1″。
[0160] 在第三步骤中,首先,在F阶段中,访问PC数值″8″,从而获得指令代码。接着,所获得的指令代码被存储在ExecData对象113中(图15B)。之后,总线访问周期数被写为对应于高速缓存命中数的″1″以重写计数器数值。在D阶段中,从ExecData对象114读取″Inst″以解释″LW,$2,0($r1)″。接着,″加载″被存储在″解码″中,″2″被存储在″Treg″中,对应于0+$r1的″0x300″被存储在″结果″中,并且″字″被存储在″访问类型″中(图16A)。由于在D阶段中的LW的处理在一个周期内完成,所以比较″1″与计数器数值。由于处理数等于或小于计数器数值,所以不执行更新。在M阶段中,读取ExecData对象115中的″解码″。由于″正常″被存储在″解码″中,所以判断出不进行存储器访问。在W阶段中,在把″PC″更新到″12″之后,读取ExecData对象114中的″解码″(图16B)。由于″加载″被存储在″解码″中,所以判断指令为存储器访问指令。作为处理,不执行任何处理。为了执行到下一个步骤,切换ExecData对象113到115的关系(图17A)。
[0161] 作为上述仿真操作的结果,在完成如图20C所示的所有阶段的处理时,每个阶段中的执行周期数为″1″。因此,存储在步骤周期数寄存器101中的数值在这种情况下是″1″。
[0162] 在最后步骤中,首先,在F阶段中,象在上述处理中那样,对″PC″和″Inst″进行写入。随着总线访问,再次确定高速缓存命中。确定周期数为1,并且更新计数器数值为″1″(图17B)。在D阶段中,从ExecData对象114读取″Inst″以计算″$1+4″。结果数被存储在″结果″中。在″Treg″中,存储″1″。在″解码″中,存储″正常″。周期数为″1″(图18A)。在M阶段中,读取ExecData对象115中的″解码″以确认″加载″。接着,对由″结果″指示的地址,以由″访问类型″指示的长度(“字”=4字节)进行总线访问。接着,结果被写入由″Treg″指示的寄存器中。假定总线访问地址0x300需要五个周期。在这种情况下,由于周期数大于计数器数值,所以计数器数值被更新为″5″(图
18B)。在W阶段中,在把″PC″更新到″16″之后,读取ExecData对象114中的″解码″。
由于″正常″被存储在″解码″中,所以″结果″的数值被写入由″Treg″指示的寄存器中(图19)。
[0163] 作为上述仿真操作的结果,每个阶段中的执行周期数受如图20D所示的M阶段中的处理的影响。因此,操作周期数为″5″。
[0164] 如上所述,当要仿真MIPS核心时,也仿真RISC处理器包含的流水线。结果,可以高准确度地计算周期数。流水线的仿真意味着针对要顺序执行的每个流水线阶段划分处理,而无需逐个执行指令。对于执行,选择各阶段所需时间的最长时间作为步骤需要的周期数。结果,确保与其它硬件资源的操作周期数的同步。
[0165] 在上述实施例和例子中,将用面向对象工具配置的仿真器描述为一个例子。然而,本发明不必仅通过这种工具来实施。例如,本发明可以实现为软件仿真器。此外,仿真器的一部分功能可以通过软件配置,而剩余部分可以通过硬件配置。
[0166] 本发明可以被广泛地用于例如娱乐设备及通信设备的各种设备中,其用于按正确的操作定时操作具有不同性能等等的另一个计算机的程序。