一种扩展处理器指令集的方法及装置转让专利

申请号 : CN201610777425.2

文献号 : CN106371807B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李延松吴求应

申请人 : 华为技术有限公司

摘要 :

本发明公开了一种扩展处理器指令集的方法及装置,涉及通信技术领域,能够在不修改处理器内核的前提条件下,提高处理器的处理速度。本发明的方法包括:监控模块通过片上总线识别指令,并将指令中的扩展指令保存至本地存储器;在处理器内核通过片上总线从内存中加载到扩展指令之后,处理器内核译码扩展指令,产生未定义指令异常;在处理器内核执行完当前指令之后,处理器内核执行异常处理程序,并暂停执行扩展指令之后的指令,且通过监控模块触发扩展指令对应的执行模块执行扩展指令;监控模块控制处理器内核退出异常处理程序,以便于处理器内核继续执行扩展指令之后的指令。本发明适用于扩展指令的执行过程。

权利要求 :

1.一种扩展处理器指令集的方法,其特征在于,所述方法用于一种芯片,所述芯片包括处理器内核、监控模块和至少一个用于执行扩展指令的执行模块,所述监控模块和所述至少一个用于执行扩展指令的执行模块通过可编程逻辑来实现,所述方法包括:所述监控模块通过片上总线识别指令,所述指令为所述处理器内核通过所述片上总线从内存加载的指令;

所述监控模块将所述指令中的扩展指令保存至本地存储器;

在所述处理器内核通过所述片上总线从所述内存中加载到扩展指令之后,所述处理器内核译码扩展指令,产生未定义指令异常,所述扩展指令为已存储至所述本地存储器中的所述扩展指令;

在所述处理器内核执行完当前指令之后,所述处理器内核执行异常处理程序,所述异常处理程序为所述未定义指令异常触发的程序;

在所述处理器内核执行所述异常处理程序时,所述处理器内核暂停执行所述扩展指令之后的指令,且通过所述监控模块触发所述扩展指令对应的执行模块执行所述扩展指令;

所述监控模块在所述扩展指令对应的执行模块执行完所述扩展指令后,控制所述处理器内核退出所述异常处理程序,以便于所述处理器内核继续执行所述扩展指令之后的指令。

2.根据权利要求1所述的方法,其特征在于,每个执行模块能够执行至少一条扩展指令,每条扩展指令对应一个指令地址,所述处理器内核通过所述监控模块触发所述扩展指令对应的执行模块执行所述扩展指令,包括:所述处理器内核向所述监控模块发送当所述处理器内核产生所述未定义指令异常时程序计数器中的内容,所述程序计数器中的内容为所述扩展指令的下一条指令的指令地址;

所述监控模块根据所述下一条指令的指令地址,确定所述扩展指令的指令地址;

所述监控模块通知所述扩展指令对应的执行模块执行与所述指令地址对应的扩展指令。

3.根据权利要求2所述的方法,其特征在于,在所述监控模块通知所述扩展指令对应的执行模块执行与所述指令地址对应的扩展指令之前,包括:所述监控模块根据已存储至所述本地存储器的所述扩展指令,确定所述扩展指令对应的执行模块。

4.根据权利要求1至3中任意一项所述的方法,其特征在于,所述监控模块将所述指令中的扩展指令保存至本地存储器,包括:所述监控模块将所述指令中的扩展指令按照预设格式保存至所述本地存储器,所述预设格式包括所述扩展指令的指令地址、所述扩展指令的内容和所述扩展指令对应的执行模块。

5.根据权利要求2所述的方法,其特征在于,在所述处理器内核通过所述监控模块触发所述扩展指令对应的执行模块执行所述扩展指令之后,包括:所述处理器内核暂时停留在所述异常处理程序中。

6.根据权利要求5所述的方法,其特征在于,所述处理器内核暂时停留在所述异常处理程序中,包括:所述处理器内核访问预设的保留内存地址,所述保留内存地址不对应任何一个物理内存单元;

当所述监控模块向所述处理器内核发送重试响应之后,所述处理器内核再次访问所述保留内存地址。

7.根据权利要求6所述的方法,其特征在于,所述监控模块控制所述处理器内核退出所述异常处理程序,包括:当所述监控模块向所述处理器内核发送正常完成响应之后,所述处理器内核退出所述异常处理程序。

8.根据权利要求5所述的方法,其特征在于,在所述处理器内核译码扩展指令,产生未定义指令异常之后,包括:所述监控模块生成硬件信号,所述硬件信号用于控制所述处理器内核是否停留在所述异常处理程序中;

所述监控模块向所述处理器内核发送所述硬件信号;

所述处理器内核暂时停留在所述异常处理程序中,包括:

当所述硬件信号为低电平时,所述处理器内核暂时停留在所述异常处理程序中。

9.根据权利要求8所述的方法,其特征在于,所述监控模块控制所述处理器内核退出所述异常处理程序,包括:当所述硬件信号为高电平时,所述处理器内核退出所述异常处理程序。

10.根据权利要求7或9所述的方法,其特征在于,所述处理器内核继续执行所述扩展指令之后的指令,包括:所述处理器内核将执行所述异常处理程序之前备份的通用寄存器、程序计数器和状态寄存器的数据恢复;

所述处理器内核根据所述程序计数器中存储的下一条指令地址,从所述下一条指令地址取指令;

所述处理器内核执行所述下一条指令地址对应的指令。

11.根据权利要求1所述的方法,其特征在于,所述芯片还包括内存控制器,所述内存控制器用于从所述内存中读取指令和数据,所述监控模块能够设置在所述内存控制器中,或是与所述内存控制器分设于所述芯片中。

12.一种扩展处理器指令集的装置,其特征在于,所述装置用于一种芯片,所述芯片包括处理模块、监控模块和至少一个用于执行扩展指令的执行模块,所述监控模块和所述至少一个用于执行扩展指令的执行模块通过可编程逻辑来实现,其中:所述监控模块,用于通过片上总线识别指令,所述指令为所述处理模块通过所述片上总线从内存加载的指令;

所述监控模块,还用于将所述指令中的扩展指令保存至本地存储器;

所述处理模块,用于在所述处理模块通过所述片上总线从所述内存中加载到扩展指令之后,译码扩展指令,产生未定义指令异常,所述扩展指令为已存储至所述本地存储器中的所述扩展指令;

所述处理模块,还用于在所述处理模块执行完当前指令之后,执行异常处理程序,所述异常处理程序为所述未定义指令异常触发的程序;

所述处理模块,还用于在所述处理模块执行所述异常处理程序时,暂停执行所述扩展指令之后的指令,且通过所述监控模块触发所述扩展指令对应的执行模块执行所述扩展指令;

所述监控模块,还用于在所述扩展指令对应的执行模块执行完所述扩展指令后,控制所述处理模块退出所述异常处理程序,以便于所述处理模块继续执行所述扩展指令之后的指令。

13.根据权利要求12所述的装置,其特征在于,每个执行模块能够执行至少一条扩展指令,每条扩展指令对应一个指令地址,所述处理模块,具体用于向所述监控模块发送当所述处理模块产生所述未定义指令异常时程序计数器中的内容,所述程序计数器中的内容为所述扩展指令的下一条指令的指令地址;

所述监控模块,具体用于根据所述下一条指令的指令地址,确定所述扩展指令的指令地址;

所述监控模块,还具体用于通知所述扩展指令对应的执行模块执行与所述指令地址对应的扩展指令。

14.根据权利要求13所述的装置,其特征在于,所述监控模块,还用于根据已存储至所述本地存储器的所述扩展指令,确定所述扩展指令对应的执行模块。

15.根据权利要求12至14中任意一项所述的装置,其特征在于,所述监控模块,具体用于将所述指令中的扩展指令按照预设格式保存至所述本地存储器,所述预设格式包括所述扩展指令的指令地址、所述扩展指令的内容和所述扩展指令对应的执行模块。

16.根据权利要求13所述的装置,其特征在于,所述处理模块,还用于暂时停留在所述异常处理程序中。

17.根据权利要求16所述的装置,其特征在于,所述处理模块,具体用于访问预设的保留内存地址,所述保留内存地址不对应任何一个物理内存单元;

当所述监控模块向所述处理模块发送重试响应之后,再次访问所述保留内存地址。

18.根据权利要求17所述的装置,其特征在于,所述处理模块,还用于当所述监控模块向所述处理模块发送正常完成响应之后,退出所述异常处理程序。

19.根据权利要求16所述的装置,其特征在于,所述监控模块,还用于生成硬件信号,所述硬件信号用于控制所述处理模块是否停留在所述异常处理程序中;

所述监控模块,还用于向所述处理模块发送所述硬件信号;

所述处理模块,具体用于当所述硬件信号为低电平时,暂时停留在所述异常处理程序中。

20.根据权利要求19所述的装置,其特征在于,所述处理模块,还用于当所述硬件信号为高电平时,退出所述异常处理程序。

21.根据权利要求18或20所述的装置,其特征在于,所述处理模块,具体用于将执行所述异常处理程序之前备份的通用寄存器、程序计数器和状态寄存器的数据恢复;

根据所述程序计数器中存储的下一条指令地址,从所述下一条指令地址取指令;

执行所述下一条指令地址对应的指令。

22.根据权利要求12所述的装置,其特征在于,所述芯片还包括内存控制器,所述内存控制器用于从所述内存中读取指令和数据,所述监控模块能够设置在所述内存控制器中,或是与所述内存控制器分设于所述芯片中。

说明书 :

一种扩展处理器指令集的方法及装置

技术领域

[0001] 本发明涉及通信技术领域,尤其涉及一种扩展处理器指令集的方法及装置。

背景技术

[0002] 随着通信技术的发展,为了提升通信系统的处理能力,往往需要使用硬件加速模块来对复杂业务进行处理,例如:浮点运算、加解密、压缩解压缩等操作。目前,可以采用如下方法来实现对复杂业务的处理:
[0003] 采用协处理器执行诸如浮点指令的专用指令,也就是说,处理器需要将专用指令发送给协处理器来执行。这种处理方式的优点为编程简单,可以直接使用协处理器指令;缺点为处理器必须支持这种专用指令,但是,并非所有的处理器内核都支持这个功能,比如:厂家使用第三方的处理器内核来设计自己的处理器,就无法支持该协处理器的运行。
[0004] 或者,将硬件加速模块作为处理器的外设,处理器通过PCIe(英文:Peripheral Component Interconnect express,中文:PCI快速通道)等接口将数据发送给加速模块进行处理,加速模块会将处理结果通过处理器存储至内存,当处理器需要访问处理结果时,则从内存读取处理结果。这种处理方式在实现过程中比较灵活,因为加速模块与处理器是解耦的,但是处理器与加速模块之间存在频繁的数据交互,这样就降低了业务的处理性能。
[0005] 因此,目前仍需要一种能够结合上述两种技术的优点的实现方法,以提高业务的处理能力并简化程序设计。

发明内容

[0006] 本发明提供一种扩展处理器指令集的方法及装置,能够在不修改处理器内核的前提条件下,提高处理器的处理速度。
[0007] 为达到上述目的,本发明采用如下技术方案:
[0008] 一方面,本发明提供的扩展处理器指令集的方法。该方法用于一种芯片,该芯片包括处理器内核、监控模块和至少一个用于执行扩展指令的执行模块,监控模块和至少一个用于执行扩展指令的执行模块通过可编程逻辑来实现。扩展处理器指令集的方法包括:监控模块通过片上总线识别指令,该指令为处理器内核通过片上总线从内存加载的指令;监控模块将指令中的扩展指令保存至本地存储器;在处理器内核通过片上总线从内存中加载到扩展指令之后,处理器内核译码扩展指令,产生未定义指令异常,该扩展指令为已存储至本地存储器中的扩展指令;在处理器内核执行完当前指令之后,处理器内核执行异常处理程序,该异常处理程序为未定义指令异常触发的程序;在处理器内核执行异常处理程序时,处理器内核暂停执行扩展指令之后的指令,且通过监控模块触发扩展指令对应的执行模块执行扩展指令;监控模块控制处理器内核退出异常处理程序,以便于处理器内核继续执行扩展指令之后的指令。由此可见,虽然处理器内核无法执行该扩展指令,但由于每条扩展指令都存在与其对应的执行模块来执行该扩展指令,因此,即便处理器内核不具备能够执行该扩展指令的能力,但仍可以借助执行模块来顺利完成扩展指令的执行过程,且在执行完该扩展指令之后,再触发处理器内核继续执行该扩展指令之后的指令。这样一来,就相当于扩展了处理器内核的指令集,因此,提升了处理器的业务处理能力,从而提高了处理器的处理速度。
[0009] 在一种可能的设计中,考虑到每个执行模块能够执行至少一条扩展指令,每条扩展指令对应一个指令地址,因此,为了确保准确确定扩展指令,处理器内核通过监控模块触发扩展指令对应的执行模块执行扩展指令的过程,可以具体实现为:处理器内核向监控模块发送当处理器内核产生未定义指令异常时程序计数器中的内容,该程序计数器中的内容为扩展指令的下一条指令的指令地址;监控模块根据下一条指令的指令地址,确定扩展指令的指令地址;监控模块通知扩展指令对应的执行模块执行与指令地址对应的扩展指令。由此可见,本发明可以根据所获取的程序计数器中所记载的下一条指令的指令地址,准确推算出扩展指令的指令地址,从而确保监控模块可以及时通知能够用于执行该扩展指令的执行模块执行该扩展指令。
[0010] 在一种可能的设计中,在监控模块通知扩展指令对应的执行模块执行与指令地址对应的扩展指令之前,包括:监控模块根据已存储至本地存储器的扩展指令,确定扩展指令对应的执行模块。由此可见,本发明可以通过先根据扩展指令来确定执行模块的方式,可以找到唯一的用于执行该扩展指令的执行模块,这样能够确保在监控模块通知该执行模块执行扩展指令之后,该执行模块可以成功执行该扩展指令。
[0011] 在一种可能的设计中,监控模块将指令中的扩展指令保存至本地存储器,具体可以实现为:监控模块将指令中的扩展指令按照预设格式保存至本地存储器,该预设格式包括扩展指令的指令地址、扩展指令的内容和扩展指令对应的执行模块。由此可见,本发明中监控模块可以通过按照预设格式对从片上总线识别到的扩展指令进行存储,可以便于对已存储的扩展指令进行管理。此外,当需要为扩展指令确定对应的执行模块时,也可以直接从本地存储器调用已存储的内容,来快速锁定扩展指令所对应的执行模块,并由监控模块触发该执行模块执行该扩展指令。
[0012] 在一种可能的设计中,在处理器内核通过监控模块触发扩展指令对应的执行模块执行扩展指令之后,处理器内核暂时停留在异常处理程序中。由此可见,当处理器内核暂时停留在异常处理程序中时,可以确保处理器内核在当前能够不继续执行扩展指令之后的指令。
[0013] 在一种可能的设计中,处理器内核暂时停留在异常处理程序中,具体可以实现为:处理器内核访问预设的保留内存地址,该保留内存地址不对应任何一个物理内存单元;当监控模块向处理器内核发送重试响应之后,处理器内核再次访问保留内存地址。由此可见,在处理器内核访问预设的保留内存地址时,由于监控模块向处理器内核返回了重试响应,因此,处理器内核会反复访问这个预设的保留内存地址,从而确保处理器内核能够暂时停留在异常处理程序中。也就意味着,处理器内核能够暂时不执行扩展指令之后的下一条指令。
[0014] 在一种可能的设计中,监控模块控制处理器内核退出异常处理程序,可以具体实现为:当监控模块向处理器内核发送正常完成响应之后,处理器内核退出异常处理程序。即本发明能够确保处理器内核能在必要时退出异常处理程序。
[0015] 在一种可能的设计中,在处理器内核译码扩展指令,产生未定义指令异常之后,监控模块生成硬件信号,该硬件信号用于控制处理器内核是否停留在异常处理程序中;监控模块向处理器内核发送硬件信号。处理器内核暂时停留在异常处理程序中,具体可以实现为:当硬件信号为低电平时,处理器内核暂时停留在异常处理程序中。由此可见,在监控模块根据程序计数器中的内容,生成低电平的硬件信号,且向处理器内核发送之后,可以确保处理器内核能够暂时停留在异常处理程序中。也就意味着,处理器内核能够暂时不执行扩展指令之后的下一条指令。
[0016] 在一种可能的设计中,监控模块控制处理器内核退出异常处理程序,具体可以实现为:当硬件信号为高电平时,处理器内核退出异常处理程序。也就意味着,监控模块可以通过生成不同电平的硬件信号,来有效控制处理器内核的工作状态。
[0017] 在一种可能的设计中,处理器内核继续执行扩展指令之后的指令,具体可以实现为:处理器内核将执行异常处理程序之前备份的通用寄存器、程序计数器和状态寄存器的数据恢复,之后根据程序计数器中存储的下一条指令地址,从下一条指令地址取指令;处理器内核执行下一条指令地址对应的指令。由此可见,在执行模块完成扩展指令的执行过程之后,处理其内核可以采用上述方法恢复断点,直接执行扩展指令之后的指令。
[0018] 在一种可能的设计中,芯片还包括内存控制器,内存控制器用于从内存中读取指令和数据,监控模块能够设置在内存控制器中,或是与内存控制器分设于芯片中。
[0019] 另一方面,本发明提供一种扩展处理器指令集的装置。该装置可以实现上述方法示例中监控模块、执行模块与处理模块,即处理器内核所执行的功能,所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个上述功能相应的模块。
[0020] 在一种可能的设计中,该装置的结构中包括处理器和通信接口,该处理器被配置为支持该装置执行上述方法中相应的功能。该通信接口用于支持该装置与其他设备之间的通信。该装置还可以包括存储器,该存储器用于与处理器耦合,其保存该装置必要的程序指令和数据。
[0021] 本发明提供的一种扩展处理器指令集的方法及装置,相比较于现有技术中采用协处理器执行诸如浮点指令的专用指令,或是将硬件加速模块作为处理器的外设,由处理器通过PCIe等接口将数据发送给加速模块进行处理,本发明通过提出一种芯片内部结构,在不修改处理器内核的前提下,确保监控模块能够将扩展指令分配到与该扩展指令对应的执行模块上执行,且在执行模块执行该扩展指令的过程中,使处理器内核暂停执行扩展指令之后的指令,以保证指令的执行顺序。虽然处理器内核无法执行该扩展指令,但由于执行模块能够执行该扩展指令,因此,即便处理器内核不具备能够执行该扩展指令的能力,但仍可以借助执行模块来顺利完成扩展指令的执行过程,且在执行完该扩展指令之后,再触发处理器内核继续执行该扩展指令之后的指令。这样一来,就相当于扩展了处理器内核的指令集,因此,提升了处理器的业务处理能力,提高了处理器的处理速度。

附图说明

[0022] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0023] 图1为本发明实施例提供的一种芯片内部结构的示意图;
[0024] 图2和图3为本发明实施例提供的另一种芯片内部结构的示意图;
[0025] 图4为本发明实施例提供的一种嵌入式系统架构图;
[0026] 图5为本发明实施例提供的一种扩展处理器指令集的方法交互图;
[0027] 图6至图14为本发明实施例提供的另一种扩展处理器指令集的方法交互图;
[0028] 图15为本发明实施例提供的一种扩展处理器指令集的装置结构示意图;
[0029] 图16为本发明实施例提供的另一种扩展处理器指令集的装置结构示意图。

具体实施方式

[0030] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0031] 本发明实施例可以用于一种芯片,芯片内部可以设置有处理器内核、监控模块和至少一个用于执行扩展指令的执行模块,比如:如图1所示的加速器1和加速器2。其中,监控模块和至少一个用于执行扩展指令的执行模块可以通过可编程逻辑(如FPGA、CPLD等)来实现。需要说明的是,芯片还可以包括内存控制器。其中,内存控制器用于从内存中读取指令和数据,而上述监控模块可以设置在内存控制器中,也可以与内存控制器分设于芯片中,在此不做限定。
[0032] 以图1所示的架构为例,芯片内部设置有一条片上总线,该片上总线的功能与ARM(英文:Advanced RISC Machine,中文:一种RISC处理器架构)架构中的AHB总线(英文:Advanced High performance Bus,中文:先进的高性能总线)类似,可以用来连接芯片内部的各个功能模块;芯片内部还包括一个处理器内核,例如ARM内核,具有取指令、指令译码、指令执行等功能;芯片内部还包括至少一个加速器,用于实现各种业务的加速功能,例如加、解密、压缩、解压缩等功能;芯片内部还包括一个内存控制器,该内存控制器,外接SDRAM(英文:Synchronous Dynamic Random Access Memory,中文:同步动态随机存储器),用于从SDRAM读取指令、数据,或是将数据写入SDRAM。在本发明实施例中,图1所示的内存可以被视为上述SDRAM。其中,SDRAM接口具体可以包括DDR(英文:Double Data Rate,中文:双倍速率)2、DDR3或DDR4。需要说明的是,诸如加速器的执行模块和内存控制器都可以用FPGA(英文:Field Programmable Gate Array,中文:现场可编程门阵列)来实现。在实际应用过程中,可以将修改后的逻辑配置代码加载到FPGA中,这样就可以改变执行模块和/或内存控制器所能实现的功能,既可以用来修正设计上的缺陷,也可以为执行模块和/或内存控制器增加新功能。需要说明的是,监控模块在此时可以设置于内存控制器中。
[0033] 考虑到目前存在各种片上总线标准,除了上述AHB总线之外,还有
[0034] CoreConnect、Wishbone或其他自定义的总线,这些总线均可以将芯片内部的各个功能模块连接起来,以实现各个模块之间的数据传输。在实际应用中,还可以在芯片内部设置多条总线,形成层次结构。在本发明实施例中,如图2所示,可以通过在两条总线之间设置一个桥接模块来将这两条总线联系起来。比如:在ARM架构中,除了包括AHB总线之外,还可以包括APB总线(英文:Advanced Peripheral Bus,中文:先进外设总线)。其中,APB总线可以用来连接低速模块,而AHB总线可以用来连接加速器等高速模块。需要说明的是,将高速模块和低速模块分开进行连接,可以有效避免总线阻塞,提高总线的吞吐量。
[0035] 在如图1、图2所示的架构中,内存控制器除了具有读写内存的功能之外,还需要具有监控功能,即能够监测片上总线上所传递的指令,并将扩展指令保存到本地的指令存储器中,之后还需要控制对应的加速器启动,并接收加速操作完成的信息。在本发明实施例中,这些功能也可以通过一个独立的监控模块来实现,也就是由FPGA来实现,并且,可以通过动态修改来支持新的扩展指令,而原有的内存控制器,可以使用硬逻辑实现而不用FPGA来实现,这样能够有助于提高内存接口的性能。以如图1所示的架构为例,如图3所示内存控制器可以根据所具有的功能分设为内存控制器与监控模块。
[0036] 需要说明的是,上述如图1至图3所示的芯片,均可以应用于一个嵌入式系统。例如:如图4所示,在该嵌入式系统中,除了包括该芯片以外,还可以包括内存、BIOS(中文:Basic Input Output System,英文:基本输入输出系统)、网络接口芯片、串行接口芯片等。
其中,该芯片可以被视为处理器,分别与内存、BIOS、网络接口芯片和串行接口芯片相连接。
[0037] 本发明实施例提供一种扩展处理器指令集的方法,如图5所示,该方法流程由芯片内部各个模块共同来执行,该方法流程包括:
[0038] 101、处理器内核通过片上总线从内存加载指令。
[0039] 系统在运行过程中,机器语言程序都保存在内存里,处理器内核需要不断的从内存中读取这些程序代码,并译码、执行,从而完成这些指令对应的功能。以ARM7内核的三级指令流水线为例,当第一条指令正在执行时,第二条指令正在译码,第三条指令正在从内存读取,此时,程序计数器中的内容为第三条指令的指令地址。
[0040] 在本发明实施例中,在处理器内核从内存读取程序代码时,这些代码会经过片上总线,此时,用FPGA实现的监控模块、加速器都可以识别这些指令。为了便于监控模块和执行模块来进行指令的识别,在本发明实施例中,AHB总线定义了HPROT[3:0]信号。其中,HPROT[0]=0表示当前的总线操作是在取指令,HPROT[0]=1表示当前的总线操作是在取数据。并且,这个信号可以连接到片上总线上的所有设备,也就意味着,其他设备可以通过HPROT[3:0]信号的电平来区分当前在片上总线上传送的是指令还是数据,并且,仅当片上总线上传输的为指令时,执行步骤102。
[0041] 102、监控模块通过片上总线识别指令,并将指令中的扩展指令保存至本地存储器。
[0042] 当监控模块识别到经过片上总线进行传输的指令中存在扩展指令时,可以直接将扩展指令保存至本地存储器。需要说明的是,执行模块也可以将扩展指令保存在本地,并且暂时不执行这些扩展指令。也就是当HPROT[0]=0,且通过片上总线传送的指令为扩展指令时,监控模块会将这个扩展指令存储在本地的指令存储器中,即存储在本地存储器中。与此同时,能够识别该扩展指令的执行模块也会将这个指令保存到本地。此时,执行模块并不会执行该扩展指令,而是等待监控模块发出触发执行模块执行该扩展指令的信息。
[0043] 103、当处理器内核加载到扩展指令之后,处理器内核译码扩展指令,产生未定义指令异常。
[0044] 其中,扩展指令为已存储至本地存储器中的扩展指令。
[0045] 在处理器内核对扩展指令进行译码时,由于处理器内核不能识别这条扩展指令,因此,处理器内核会产生“未定义指令”的异常,即产生未定义指令异常,并跳转到“未定义指令”对应的处理程序去执行。需要说明的是,在产生未定义指令异常之后并不会立即执行,而是等到当前正在执行的指令执行完后才会处理,具体处理方式会在后文提及,在此不做赘述。
[0046] 104、在处理器内核执行完当前指令之后,处理器内核执行异常处理程序。
[0047] 其中,异常处理程序为未定义指令异常触发的程序。
[0048] 在开始执行异常处理程序时,处理器内核保存当前的断点,即备份处理器内核的通用寄存器、程序计数器和状态寄存器中的内容。对于ARM7内核来说,备份的程序计数器的取值等于当前程序计数器的内容减去4,即扩展指令的下一条指令的指令地址,将该指令地址作为异常处理程序的返回地址;修改程序计数器的内容,即设置未定义指令异常的处理程序的起始地址,例如:设置为
[0049] 0x0000_0004;处理器内核从程序计数器指定的内存地址加载代码,而这个代码就是异常处理程序。
[0050] 需要说明的是,在处理器内核执行异常处理程序时,处理器内核暂停执行扩展指令之后的指令,并告知监控模块,以确保监控模块能够触发扩展指令对应的执行模块执行扩展指令。在本发明实施例中,当执行模块完成扩展指令的执行操作之后,可以通过片上总线向监控模块发送完成信息,或者通过执行模块与监控模块之间的握手信号来通知监控模块。
[0051] 105、监控模块触发扩展指令对应的执行模块执行扩展指令。
[0052] 106、执行模块执行扩展指令。
[0053] 107、执行模块向监控模块发送执行模块执行完扩展指令的消息。
[0054] 108、监控模块控制处理器内核退出异常处理程序。
[0055] 在对应的执行模块执行完扩展指令之后,监控模块就可以控制处理器内核退出异常处理程序,并执行步骤109,具体的实现方式会在后文提出,在此不做赘述。
[0056] 109、处理器内核继续执行扩展指令之后的指令。
[0057] 在本发明中,提出了一种芯片内部结构,在不修改处理器内核的前提下,确保监控模块能够将扩展指令分配到与该扩展指令对应的执行模块上执行,且在执行模块执行该扩展指令的过程中,使处理器内核暂停执行扩展指令之后的指令,以保证指令的执行顺序。虽然处理器内核无法执行该扩展指令,但由于执行模块能够执行该扩展指令,因此,即便处理器内核不具备能够执行该扩展指令的能力,但仍可以借助执行模块来顺利完成扩展指令的执行过程,且在执行完该扩展指令之后,再触发处理器内核继续执行该扩展指令之后的指令。这样一来,就相当于扩展了处理器内核的指令集,因此,提升了处理器的业务处理能力,提高了处理器的处理速度
[0058] 为了准确确定能够执行当前扩展指令的执行模块,在本发明实施例的一个实现方式中,每个执行模块能够执行至少一条扩展指令,每条扩展指令对应一个指令地址,监控模块可以根据处理器内核产生未定义指令异常时程序计数器中的内容来确定扩展指令的下一条指令的指令地址,之后推算出扩展指令的指令地址,并通知扩展指令对应的执行模块来执行该扩展指令。因此,在如图5所示的实现方式的基础上,还可以实现为如图6所示的实现方式。其中,在执行步骤104之后,还可以执行步骤110;步骤105监控模块触发扩展指令对应的执行模块执行扩展指令,可以具体实现为步骤1051和步骤1052:
[0059] 110、处理器内核向监控模块发送当处理器内核产生未定义指令异常时程序计数器中的内容。
[0060] 其中,程序计数器中的内容为扩展指令的下一条指令的指令地址。
[0061] 在处理器内核进入异常处理程序之前,处理器内核需要先将产生未定义指令异常时程序计数器中的内容进行备份,之后在处理器内核执行异常处理程序时,处理器内核需要将已经备份的内容向监控模块发送。
[0062] 1051、监控模块根据下一条指令的指令地址,确定扩展指令的指令地址。
[0063] 1052、监控模块通知扩展指令对应的执行模块执行与指令地址对应的扩展指令。
[0064] 在程序指令中,可能存在跳转指令或者条件指令。对于跳转指令而言,程序在执行指令时候并不是按顺序执行的,而是跳过后面的若干条指令继续执行;对于条件指令而言,程序在执行某条指令之前,需要先判断是否满足指定条件,不满足的话就不执行这条指令,因此,此前保存的扩展指令不一定需要执行,很有可能跳过扩展指令来执行后面的指令。例如:如表一所示内容,一个程序段依次包括五条指令,前面三条已经进入指令流水线,其中,第一条指令是跳转指令,要求跳转到第三条指令,这样一来,扩展指令1虽然已经预先被保存到监控模块和对应的执行模块的本地存储器中,但并不会被执行,而实际需要执行的指令是扩展指令2。因此,为了避免执行模块执行了错误的扩展指令,监控模块需要将当前应该执行的扩展指令的信息告诉该扩展指令对应的执行模块。
[0065] 表一
[0066]
[0067]
[0068] 在处理器内核执行扩展指令2时,即在扩展指令2的译码过程中会产生未定义指令异常,处理器内核进入异常处理程序。此时,处理器内核需要先获取保存的断点地址,也就是扩展指令的下一条指令的指令地址,并将下一条指令的指令地址发给监控模块,或者减去4以后再发给监控模块。考虑到每条指令的长度是4个字节,这样监控模块就可以根据处理器内核发送的指令地址,来确定扩展指令2自身所在的地址。
[0069] 本发明实施例提供的一种扩展处理器指令集的方法,在处理器内核执行异常处理程序时,处理器内核暂停执行扩展指令之后的指令,并向监控模块发送当处理器内核产生未定义指令异常时程序计数器中的下一条指令的指令地址,之后由监控模块根据下一条指令的指令地址,确定扩展指令的指令地址,并通知扩展指令对应的执行模块执行与指令地址对应的扩展指令。本发明可以根据所获取的程序计数器中所记载的下一条指令的指令地址,准确推算出扩展指令的指令地址,从而确保监控模块可以及时通知能够用于执行该扩展指令的执行模块执行该扩展指令。
[0070] 考虑到芯片中可能设置有多个执行模块,而每个执行模块都对应至少一个能够执行的扩展指令,因此,为了确保监控模块所触发的执行模块可以用于执行扩展指令,在本发明实施例的一个实现方式中,监控模块在通知执行模块执行扩展指令之前,需要先确定待通知的执行模块具体为哪个执行模块。因此,在如图6所示的实现方式的基础上,还可以实现为如图7所示的实现方式。其中,在执行步骤1052监控模块通知扩展指令对应的执行模块执行与指令地址对应的扩展指令之前,还可以执行步骤111:
[0071] 111、监控模块根据已存储至本地存储器的扩展指令,确定扩展指令对应的执行模块。
[0072] 监控模块的本地存储器中存储有扩展指令与执行模块之间的对应关系,因此,监控模块可以根据已存储的扩展指令的内容来确定各个扩展指令对应的执行模块。
[0073] 本发明实施例提供的一种扩展处理器指令集的方法,在监控模块通知执行模块执行扩展指令之前,监控模块需要根据扩展指令来确定该扩展指令对应的执行模块。本发明可以通过先根据扩展指令来确定执行模块的方式,可以找到唯一的用于执行该扩展指令的执行模块,这样能够确保在监控模块通知该执行模块执行扩展指令之后,该执行模块可以成功执行该扩展指令。
[0074] 为了对所有存储至本地存储器的扩展指令进行统一的管理,在本发明实施例的一个实现方式中,监控模块可以将指令中的扩展指令按照预设格式存储至本地存储器,以便于后续根据已存储的内容来准确确定扩展指令对应的执行模块。因此,在如图5所示的实现方式的基础上,还可以实现为如图8所示的实现方式。其中,步骤102监控模块通过片上总线识别指令,并将指令中的扩展指令保存至本地存储器,可以具体实现为步骤1021:
[0075] 1021、监控模块通过片上总线识别指令,并将指令中的扩展指令按照预设格式保存至本地存储器。
[0076] 其中,预设格式包括扩展指令的指令地址、扩展指令的内容和扩展指令对应的执行模块。
[0077] 扩展指令保存至监控模块的本地存储器中的格式如表二所示,其中,保存着每条扩展指令的指令地址、内容,以及每条扩展指令对应的执行模块。当监控模块接收到处理器内核发来的指令地址时,可以根据指令地址与表二所示的内容,查出当前将要执行的扩展指令具体为哪一条指令,以及该扩展指令对应于哪一个执行模块,之后将上述内容向对应的执行模块发送。
[0078] 表二
[0079]扩展指令的指令地址 扩展指令的内容 扩展指令对应的执行模块
指令地址1 扩展指令1 加速器1
指令地址2 扩展指令2 加速器1
指令地址3 扩展指令3 加速器2
指令地址4 扩展指令4 加速器2
[0080] 在加速器接收到信息之后,根据扩展指令的内容,从指定的源数据地址读取数据,并执行对应的加速操作,之后保存到指定的目标地址。
[0081] 本发明实施例提供的一种扩展处理器指令集的方法,在监控模块通过片上总线识别到扩展指令之后,监控模块将所识别到的扩展指令进行存储,存储格式如下:指令地址、内容和对应的执行模块。本发明中监控模块可以通过按照预设格式对从片上总线识别到的扩展指令进行存储,可以便于对已存储的扩展指令进行管理。此外,当需要为扩展指令确定对应的执行模块时,也可以直接从本地存储器调用已存储的内容,来快速锁定扩展指令所对应的执行模块,并由监控模块触发该执行模块执行该扩展指令。
[0082] 为了确保处理器内核能够暂停执行该扩展指令之后的指令,在本发明实施例的一个实现方式中,处理器内核可以暂时停留在异常处理程序中,因此,在如图6所示的实现方式的基础上,还可以实现为如图9所示的实现方式。其中,在执行完步骤1052监控模块通知扩展指令对应的执行模块执行与指令地址对应的扩展指令之后,还可以执行步骤112:
[0083] 112、处理器内核暂时停留在异常处理程序中。
[0084] 考虑到在处理器内核进入异常处理程序后,暂时不能退出,否则处理器内核会继续执行产生未定义指令异常的扩展指令之后的指令。如果之后的指令依赖于产生未定义指令异常的扩展指令对应的执行模块的执行结果,那么数据就会出错。因此,处理器内核必须等到执行模块完成扩展指令的执行之后,才可以退出异常处理程序。因此,处理器内核开始执行异常处理程序之后,仅当执行模块完成扩展指令的执行操作之后,才能退出异常处理程序,否则,处理器内核将停留在异常处理程序中。比如:处理器内核在加速器完成加速操作之前,不能退出异常处理程序,即处理器内核需要暂时停留在异常处理程序中。
[0085] 本发明实施例提供的一种扩展处理器指令集的方法,可以通过使处理器内核暂时停留在异常处理程序中,来确保处理器内核暂停执行扩展指令之后的指令。本发明中,当处理器内核暂时停留在异常处理程序中时,可以确保处理器内核在当前能够不继续执行扩展指令之后的指令。
[0086] 为了确保处理器内核能够暂时停留在异常处理程序中,在本发明实施例的一个实现方式中,处理器内核可以通过反复访问预设的保留内存地址来使自身暂时停留在异常处理程序中。因此,在如图9所示的实现方式的基础上,还可以实现为如图10所示的实现方式。其中,步骤112处理器内核暂时停留在异常处理程序中,可以具体实现为步骤1121至步骤
1123:
[0087] 1121、处理器内核访问预设的保留内存地址。
[0088] 其中,保留内存地址不对应任何一个物理内存单元。
[0089] 1122、监控模块向处理器内核发送重试响应。
[0090] 1123、处理器内核再次访问保留内存地址。
[0091] 在处理器内核访问预设的保留内存地址时,由于保留内存地址不对应任何一个物理内存单元,因此,监控模块监测到处理器内核访问保留内存地址后,可以通过AHB总线的HRESP[1:0]信号和HREADY信号向处理器内核发出响应,即重试响应。当HRESP[1:0]=10,且HREADY=0时,表示RETRY响应,此时,处理器内核会反复重试直到成功。需要说明的是,当HRESP[1:0]=10,且HREADY=0时,处理器内核均会反复执行访问保留内存地址的指令,且不会继续执行扩展指令之后的指令。
[0092] 本发明实施例提供的一种扩展处理器指令集的方法,可以通过使处理器反复访问预设的保留内存地址,来确保处理内核能够暂时停留在异常处理程序中。本发明中,在处理器内核访问预设的保留内存地址时,由于监控模块向处理器内核返回了重试响应,因此,处理器内核会反复访问这个预设的保留内存地址,从而确保处理器内核能够暂时停留在异常处理程序中。也就意味着,处理器内核能够暂时不执行扩展指令之后的下一条指令。
[0093] 为了确保处理器内核能在必要时退出异常处理程序,从而继续执行扩展指令之后的指令,在本发明实施例的一个实现方式中,在处理器内核接收到监控模块发送的正常完成响应之后,处理器内核退出异常处理程序。因此,在如图10所示的实现方式的基础上,还可以实现为如图11所示的实现方式。其中,步骤108监控模块控制处理器内核退出异常处理程序,可以具体实现为步骤1081和步骤1082:
[0094] 1081、监控模块向处理器内核发送正常完成响应。
[0095] 需要说明的是,正常完成响应为处理器内核在访问保留内存地址之后,正常完成访问过程的响应。
[0096] 1082、处理器内核退出异常处理程序。
[0097] 当监控模块知道执行模块已执行完扩展指令之后,如果处理器内核再次发起重试操作,则会向处理器内核返回HRESP[1:0]=00且HREADY=1的信号。其中,HRESP[1:0]=00表示OKAY响应,于是处理器内核完成当前指令的执行,退出异常处理程序,继续执行扩展指令之后的指令。
[0098] 本发明实施例提供的一种扩展处理器指令集的方法,可以使处理器内核在接收到监控模块发送的正常完成响应之后,退出异常处理程序。本发明能够确保处理器内核能在必要时退出异常处理程序。
[0099] 在本发明实施例的一个实现方式中,除了通过使处理器内核反复访问预设的保留内存地址来确保处理器内核暂时停留在异常处理程序中,还可以由监控模块向处理器内核发送硬件信号,并当硬件信号为低电平时,使处理器内核暂时停留在异常处理程序中。因此,在如图9所示的实现方式的基础上,还可以实现为如图12所示的实现方式。其中,在执行完步骤103之后,还可以执行步骤114和步骤115;步骤112处理器内核暂时停留在异常处理程序中,可以具体实现为步骤1124:
[0100] 114、监控模块生成硬件信号。
[0101] 其中,硬件信号用于控制处理器内核是否停留在异常处理程序中。
[0102] 115、监控模块向处理器内核发送硬件信号。
[0103] 1124、当硬件信号为低电平时,处理器内核暂时停留在异常处理程序中。
[0104] 本发明实施例提供的一种扩展处理器指令集的方法,在处理器内核产生未定义指令异常之后,处理器内核向监控模块发送备份的程序计数器中的内容,之后监控模块根据所接收到的程序计数器中的内容生成硬件信号,并向处理器内核发送。当处理器内核接收到的硬件信号为低电平时,处理器内核暂停运行,也就相当于处理器内核暂时停留在异常处理程序中。本发明中,在监控模块根据程序计数器中的内容,生成低电平的硬件信号,且向处理器内核发送之后,可以确保处理器内核能够暂时停留在异常处理程序中。也就意味着,处理器内核能够暂时不执行扩展指令之后的下一条指令。
[0105] 考虑到在执行模块完成扩展指令的执行过程之后,处理器内核需要继续执行扩展指令之后的指令,在本发明实施例的一个实现方式中,可以根据监控模块向处理器内核发送的硬件信号为高电平时,使处理器内核继续执行扩展指令之后的指令。因此,在如图12所示的实现方式的基础上,还可以实现为如图13所示的实现方式。其中,步骤108监控模块控制处理器内核退出异常处理程序,可以具体实现为步骤1083:
[0106] 1083、当硬件信号为高电平时,处理器内核退出异常处理程序。
[0107] 本发明实施例提供的一种扩展处理器指令集的方法,当监控模块向处理器内核发送的硬件信号为高电平时,处理器内核继续执行扩展指令之后的指令。本发明中,监控模块可以通过生成不同电平的硬件信号,来有效控制处理器内核的工作状态。
[0108] 为了确保处理器内核能够顺利执行扩展指令之后的下一条指令,在本发明实施例的一个实现方式中,处理器内核需要在恢复断点之后继续执行扩展指令后面的下一条指令。因此,在如图11或13所示的实现方式的基础上,以如图11所示的内容为例,还可以实现为如图14所示的实现方式。其中,步骤109处理器内核继续执行扩展指令之后的指令,可以具体实现为步骤1091至步骤1093:
[0109] 1091、处理器内核将执行异常处理程序之前备份的通用寄存器、程序计数器和状态寄存器的数据恢复。
[0110] 处理器内核在退出异常处理程序之后,需要先恢复断点,才能继续执行扩展指令之后的下一条指令,因此,处理器内核需要将此前备份的处理器内核的通用寄存器、程序计数器和状态寄存器都恢复到对应的寄存器中。
[0111] 1092、处理器内核根据程序计数器中存储的下一条指令地址,从下一条指令地址取指令。
[0112] 处理器内核根据程序计数器的新值,从对应的指令地址取指令,此时,处理器内核已经退出异常处理程序。
[0113] 1093、处理器内核执行下一条指令地址对应的指令。
[0114] 处理器内核继续执行产生未定义指令异常的扩展指令之后的指令。
[0115] 本发明实施例提供的一种扩展处理器指令集的方法,处理器内核将执行异常处理程序之前存储的通用寄存器、程序计数器和状态寄存器的数据恢复,并根据程序计数器中存储的下一条指令地址,从下一条指令地址取指令,之后执行下一条指令地址对应的指令。相比较于现有技术中采用协处理器执行诸如浮点指令的专用指令,或是将硬件加速模块作为处理器的外设,由处理器通过PCIe等接口将数据发送给加速模块进行处理,本发明可以不通过修改处理器内核就实现扩展处理器内核的指令集的效果,从而提高处理器的处理速度。
[0116] 上述主要从芯片内部各个模块之间交互的角度对本发明实施例提供的方案进行了介绍。可以理解的是,各个模块,例如监控模块、执行模块、处理模块等为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本发明能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0117] 本发明实施例可以根据上述方法示例对扩展处理器指令集的装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
[0118] 在采用对应各个功能划分各个功能模块的情况下,图15示出了上述实施例中所涉及的扩展处理器指令集的装置的一种可能的结构示意图,装置20包括:处理模块21、监控模块22、执行模块23。其中,处理模块21用于执行指令,或是在出发场处理程序之后暂停执行扩展指令之后的指令,并在适当的时机,恢复断点,继续执行扩展指令之后的指令,比如:图5中的过程101、103和104、109,图9中的过程112,图10中的过程1121和1123,图11中的过程
1082,图12中的过程1124,图13中的过程1083,图14中的过程1091至1093;监控模块22,用于识别经过片上总线的扩展指令,并保存在本地存储器中,之后触发相应的执行模块执行该扩展指令,以及后续控制处理模块退出异常处理程序等,比如:图5中的过程102、105、108,图6中的过程1051和1052,图7中的过程111,图10中的过程1122,图11中的过程1081,图12中的过程114和115;执行模块23,用于执行扩展指令,并在完成执行过程之后反馈至监控模块,比如:图5至图14中的过程106和107。该装置20还可以包括存储模块24,用于存储相关的程序代码和数据。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
[0119] 其中,处理模块21可以是处理器或控制器,例如可以是中央处理器(英文:Central Processing Unit,简称:CPU),通用处理器,数字信号处理器(英文:Digital Signal Processor,简称:DSP),专用集成电路(英文:Application-Specific Integrated Circuit,简称:ASIC),现场可编程门阵列(英文:Field Programmable Gate Array,简称:FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。存储模块24可以是存储器。
[0120] 当处理模块21和执行模块23为处理器,存储模块24为存储器,且各个模块之间通过通信接口进行数据传输时,本发明实施例所涉及的扩展处理器指令集的装置可以为图16所示的装置30。
[0121] 参阅图16所示,该装置30包括:处理器31、通信接口32、存储器33以及总线34。其中,通信接口32、处理器31以及存储器33通过总线34相互连接;总线34可以是外设部件互连标准(英文:Peripheral Component Interconnect,简称:PCI)总线或扩展工业标准结构(英文:Extended Industry Standard Architecture,简称:EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图16中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0122] 结合本发明公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(英文:Random Access Memory,简称:RAM)、闪存、只读存储器(英文:Read Only Memory,简称:ROM)、可擦除可编程只读存储器(英文:Erasable Programmable ROM,简称:EPROM)、电可擦可编程只读存储器(英文:Electrically EPROM,简称:EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(简称:CD-ROM)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于核心网接口设备中。当然,处理器和存储介质也可以作为分立组件存在于核心网接口设备中。
[0123] 本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
[0124] 以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。