一种协处理器指令集的扩展方法 【技术领域】
本发明涉及处理器设计中的协处理器指令集,尤其是一种协处理器指令集的扩展装置。
背景技术
指令集是处理器软硬件交互的接口,处理器通过自动从内存中读取指令,并进行译码和执行,完成复杂的运算和控制任务。每个处理器都需要有特定的指令集与其进行对应。指令集的先进与否,直接影响到处理器的性能发挥,因此指令集是处理器设计的重要内容。
目前的处理器设计中,除了需要为基本运算和控制定义相应的指令集外,还需要设计面向特定应用的指令集子系统。面向特定应用的指令集子系统是将复杂的运算控制流程简化为抽象的操作,并由处理器根据解码的信息直接运行,避免通过基本指令集产生复杂控制运算流程。这种方法在目前的嵌入式处理器领域中得到了十分广泛的应用,如ARM的SIMD指令集,MIPS的DSP ASE等。
指令集扩展技术目前主要可分为两个大类:主处理器指令集扩展和协处理器指令集扩展。主处理器指令集扩展技术是指在主处理器的指令集空间内进行专用指令的扩展,扩展指令通常在主处理器内部通过增加特殊的执行单元实现支持;协处理器指令集扩展技术指在主处理器指令集空间之外进行专用指令的扩展,扩展指令通常通过协处理器接口发送到目标协处理器完成执行。主处理器指令集扩展技术与主处理器架构的耦合度高,资源复用度高。协处理器指令集扩展技术与主处理器的耦合度相对较低,但扩展相对灵活,可以根据应用的特征进行灵活的支持。协处理器指令集扩展技术由于扩展方便、设计风险小,成为目前指令集扩展的主要形式。
目前的协处理器指令集扩展技术通常是在主处理器指令编码空间中划分一个特殊的区域用于协处理器指令集的定义,如MIPS处理器将32位机器码的最高4位为0100保留给协处理器使用。这种技术的优点是协处理器的指令可以由主处理器按照普通指令的方式进行预取,并通过解码,将主处理器指令和协处理器指令进行快速的区分。这样协处理器的取指就会变得简单,主处理器和协处理器的接口定义会变得清晰。但这种方法同样存在着一些问题,主要表现在:1、在指令代码空间相对紧凑的16位指令集中扩展空间难度较大;2、由于协处理器与主处理器共享取指和解码单元,因此协处理器指令的格式受到主处理器格式的影响。
【发明内容】
为了克服已有的在主处理器指令编码空间中划分一个特殊的区域用于协处理器指令集的扩展性能差、灵活性差的不足,本发明提供一种具有良好的扩展性能、灵活性好的协处理器指令集的扩展装置。
本发明解决其技术问题所采用的技术方案是:
一种协处理器指令集的扩展装置,在与所述协处理器连接的主处理器的指令集内包括:用于产生协处理器指令码的立即数产生指令,以及用于实现所述协处理器指令码从主处理器通用寄存器到协处理器指令寄存器的装载的协处理器指令码装载指令;
所述主处理器包括:用于控制立即数产生指令先产生协处理器指令码的立即数产生单元,用于临时存放由立即数产生指令产生的协处理器指令码的主处理器通用寄存器,以及用于将存放于主处理器通用寄存器中的协处理器指令码装载进协处理器指令寄存器的协处理器指令装载执行单元;
所述协处理器包括:用于接收由主处理器装载的协处理器指令码,并将接收的指令码发送至协处理器执行的协处理器指令寄存器,以及用于从协处理器指令寄存器读取指令并完成解码和执行的协处理器指令执行模块。
进一步,所述立即数产生指令由主处理器完成取指、解码、执行,并将产生的立即数结果回写至通用寄存器中。
更进一步,所述协处理器指令码装载指令的源操作数存储于主处理器通用寄存器内,目的寄存器为协处理器指令寄存器。
更进一步,所述立即数产生指令为复用主处理器中的原立即数产生指令或者单独设计专门用于产生协处理器指令码立即数的指令。
所述的协处理器指令执行模块包括:用于译码协处理器指令的协处理器指令译码单元,用于执行协处理器指令并产生相应结果的协处理器指令指令单元。
本发明的技术构思为:基于本申请实现的协处理器扩展技术将主处理器与协处理器的指令空间有效隔离,实现了协处理器指令集扩展与主处理器相对独立。通过该方法不仅可以扩展出多个并行独立的指令集,同时也为用户独立进行协处理器的开发打下了坚实的基础。
本发明的有益效果主要表现在:1、具有良好的扩展性能、灵活性 好;2、有效简化了协处理器指令集扩展的方式,为在统一基本指令集架构上扩展出各种面向应用的用户自定义指令提供了灵活高效的支持。
【附图说明】
图1是立即数产生指令的编码方式的示意图。
图2是协处理器指令码装载指令的编码方式的示意图。
图3是协处理器指令集扩展指令的执行装置框架示意图。
图4是通过预编译获得立即数产生的指令的执行机制的示意图。
【具体实施方式】
下面结合附图对本发明作进一步描述。
参照图1~图4,一种协处理器指令集的扩展装置,在与所述协处理器连接的主处理器的指令集内包括:用于产生协处理器指令码的立即数产生指令,以及用于实现所述协处理器指令码从主处理器通用寄存器到协处理器指令寄存器的装载的协处理器指令码装载指令;
所述主处理器包括:用于控制立即数产生指令先产生协处理器指令码的立即数产生单元,用于临时存放由立即数产生指令产生的协处理器指令码的主处理器通用寄存器,以及用于将存放于主处理器通用寄存器中的协处理器指令码装载进协处理器指令寄存器的协处理器指令装载执行单元;
所述协处理器包括:用于接收由主处理器装载的协处理器指令码,并将接收的指令码发送至协处理器执行的协处理器指令寄存器,以及用于从协处理器指令寄存器读取指令并完成解码和执行的协处理器指令执行模块。
所述立即数产生指令由主处理器完成取指、解码、执行,并将结果回写至通用寄存器中。
所述协处理器指令码装载指令的源操作数存储于主处理器通用寄存器内,目的寄存器为协处理器指令寄存器。
所述立即数产生指令为复用主处理器中的原立即数产生指令或者单独设计专门用于产生协处理器指令码立即数的指令。
所述的协处理器指令执行模块包括:用于译码协处理器指令的协处理器指令译码单元,用于执行协处理器指令并产生相应结果的协处理器指令指令单元。
本实施例的协处理器指令集扩展指令是指立即数产生指令和协处理器指令码装载指令两条指令。
立即数产生指令可以复用主处理器中的原立即数产生指令,也可以单独设计专门用于产生协处理器指令码立即数的指令。立即数产生的过程既可通过将立即数编码在指令码中;也可以通过编译器将立即数预先编译存放于内存中,在程序运行的过程中,通过特殊的载入指令从内存中动态获得。立即数产生指令的目的寄存器是主处理器的通用寄存器,目的寄存器的编号需要编入指令码中。立即数产生指令的两种具体编码方式如图1所示:(a)是立即数编入指令码的一种方式,11是该指令的操作码,指令码中的立即数13在执行过程中被直接截取,然后送入由12指示的目的寄存器中存储;(b)是基于编译器预先编译的立即数载入指令,14为操作码,15为目的寄存器,16为当前指令的偏移量指示位,用于表示目标立即数在内存中相对当前指令的偏移量。
协处理器指令码装载指令的功能是将临时存放于主处理器通用寄存器中的协处理器指令码传送至协处理器的指令寄存器中。该指令为主处理器编码空间内的指令,本质是一条特殊的传送指令。协处理器指令码装载指令的源寄存器是主处理器的通用寄存器,目的寄存器为协处理器的指令寄存器。指令编码时,可以固定主处理器通用寄存器和协处理器指令寄存器的编码,也可以设计专用的比特用来指示该指令所选中的主处理器通用寄存器和目的协处理器指令寄存器。如图2给出了协处理器指令码转载指令的具体编码方式:21为指令的操作码,22指示目标协处理器的指令寄存器,通常一个协处理器只有一个指令寄存器,因此这部分并不是指令码中必须的,23指示存储协处理器指令码的主处理器通用寄存器编号。
协处理器指令集扩展指令的执行过程和框架如图3所示,其中:
31为主处理器的取指单元,除预取普通主处理器指令外,同时还预取本发明中增加的立即数产生指令和协处理器指令装载指令。
32为主处理器的译码单元,除译码普通主处理器指令外,同时译码本发明中增加的立即数产生指令和协处理器指令装载指令,并将它们分别发送到对应的执行单元中。
33为主处理器的立即数产生单元,用于执行本发明所提出的立即数产生指令。
34为主处理器的通用寄存器单元,存储运算的操作数和运算结果,本发明中由立即数产生单元33产生的协处理器指令码也临时存放于通用寄存器单元中。
35为协处理器指令码转载执行单元,用来执行将协处理器指令码 从主处理器的通用寄存器中搬运到相应的协处理器指令寄存器的操作。
36为协处理器指令寄存器,用于接收来自主处理器发送的协处理器指令码。
37为协处理器指令译码单元,译码协处理器指令。
38为协处理器指令指令单元,执行协处理器指令,产生相应结果。
立即数产生指令的执行过程为:首先主处理器取指单元31从存储器中获得指令,送至译码单元32中译码,若当前指令为立即数产生指令,则将该指令发送至立即数指令执行单元33,立即数指令执行单元33根据指令的操作码执行相应的立即数产生过程,最终将产生的结果写入到主处理器通用寄存器34中。
协处理器指令码装载指令的执行过程为:首先主处理器取指单元31从存储器中获得指令,送至译码单元32中译码,若当前指令为协处理器指令码装载指令,则将该指令发送至协处理器指令码装载执行单元35,协处理器指令码装载执行单元35从主处理器通用寄存器单元34中读取对应的协处理器指令操作码,然后将其传送到协处理器指令寄存器中36。
协处理器指令的执行过程为:从协处理器指令寄存器36中获得指令码,然后将指令码发送到协处理器译码单元37,根据译码结果将指令发送到对应的执行单元38中进行执行。
立即数指令执行单元33用于执行立即数产生指令并生成目标立即数。对于立即数编入指令码的方案图1(a)所示,执行单元仅需对指令码进行按位截取便可获得相应的立即数。对于立即数通过编译器 预编译然后从内存中获得的方案,可以获得位宽更宽的立即数,其执行过程如图4所示。指令被送入到立即数产生单元之后,指令的低位41被截取,并于当前指令的地址(PC)通过加法器43相加后获得立即数的目标地址。于此同时由控制逻辑42向存储器发起读请求,获得的立即数结果最终被回写通用寄存器组中。
通用寄存器单元34为包含主处理器用于存储操作数及其结果的临时缓冲空间。通过指令段中对应位,如图1中的12、15,图2中的23进行索引。
协处理器指令装载执行单元35在获得指令后,从通用寄存器34中获得对应的立即数,然后送入到协处理器的指令寄存器中,实现协处理器指令的成功装载。