CN102508635B - 一种处理器装置及其循环处理方法 - Google Patents
一种处理器装置及其循环处理方法 Download PDFInfo
- Publication number
- CN102508635B CN102508635B CN201110319091.1A CN201110319091A CN102508635B CN 102508635 B CN102508635 B CN 102508635B CN 201110319091 A CN201110319091 A CN 201110319091A CN 102508635 B CN102508635 B CN 102508635B
- Authority
- CN
- China
- Prior art keywords
- instruction
- address
- current
- loop
- circulation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Abstract
本发明公开了一种超长指令字的处理器装置及其循环处理方法,该装置包括循环单元、地址发送单元和指令译码单元,其中循环单元包括循环体数据计算模块、循环计数模块、存储模块和取指地址计算模块。该方法包括:获取循环标志指令;提取循环标志(LP)指令携带的循环参数;根据循环标志指令的地址和循环参数得到并保存循环体数据;将保存的循环体数据作为当前循环体数据;根据所述当前取指地址获取指令并执行;根据当前取指地址得到下一取指地址,并通过比较下一取指地址和循环体数据得到当前取指地址。本发明解决了超长指令字的处理器循环的控制不能完全由硬件实现,且循环执行开销大的问题,从而大大提高了超长指令字的处理器性能。
Description
技术领域
本发明涉及一种处理器技术,尤其涉及一种处理器装置及其循环处理方法。
背景技术
随着计算机和信息技术的飞速发展,数字信号处理(Digital SignalProcessing,DSP)技术应运而生并得到迅速的发展。DSP处理器则广泛的应用于数据密集型计算类应用,如图像、视频编码等。这些应用的计算复杂性和实时性特点对处理器的性能提出了更高的要求。而这些应用大部分计算都集中在循环以及循环嵌套中完成。
在DSP的应用中,如果DSP处理器能够实现零开销循环,将可以大大提高DSP处理器的性能。所谓零开销循环是DSP处理器在执行循环时,不用花时间去检查循环计数器的值就能执行一组指令,由硬件完成循环跳转和循环计数器的增减。
现有的零循环开销技术大多不支持超长指令字(Very LongInstruction Word,VLIW)结构的DSP处理器,而且增加的循环指令众多,硬件实现方法复杂。所支持的循环体内指令数目和循环次数有限,循环的控制不能完全由硬件实现,循环开销依然存在。
如2010年12月6-8号在成都举办的第18届智能信号处理与通信系统国际会议(ISPACS)上Zhenqi Wei,Peilin Liu,Ji Kong,Rendong Ying等人发表的《Low-Power Microarchitecture of Zero-Overhead NestedLoops in Embedded Processors》文章中公开了通过增加专用的循环指令:LOOP.C,LOOP.B,LOOP.R,LOOP.BR来通知硬件接下来循环体的指令数目和循环次数,或者刷新硬件中循环计数器等专用寄存器的值。通过增加硬件单元,包括一个循环寄存器堆栈和循环缓存器,其中循环寄存器堆栈用于存储循环体的起始地址、结束地址、当前循环PC、循环次数和循环体是否可用、是否使用循环缓冲的标志位,循环缓存器用于存储小循环的循环指令。文章所公开的方法虽然能较好的解决零循环开销的问题,但是增加的指令较多,虽然文章提出其支持循环嵌套,但是没有提出具体的硬件实现方式。而且该方法只适用于单发射的DSP处理器结构,不适用于具有VLIW结构的高性能DSP处理器。
如计算机期刊IEEE Transactions on computers,Vol 57,NO.2,February 2008中Nikolaos Kavvadias and Spirdon Nikoladis等人发表的《Elimination of overhead operations in complex loop structuresfor embedded microprocessors》文章中提到通过任务控制循环图(TaskControl-flow Graph,TCFG)优化应用程序的循环节点,编译产生优化后的代码。增加的循环硬件模块包括:循环参数表、索引计算单元和任务选择单元。可以支持循环嵌套,以及多入口和多出口循环。多入口和多出口循环主要用于控制密集型循环,而大多数程序的计算密集型循环控制逻辑简单,不存在多入口和多出口。而且这种方法只支持单发射的处理器结构,而且不能被传统编译器优化,硬件结构复杂。
如德州仪器(Texas Instruments,TI)公司DSP芯片C64X+系列支持VLIW,主要采用软件流水机制减少循环开销。硬件部分包括1个缓冲器和两个计数器,另外还有7条相关指令。其中,缓冲器可以用来存储最多14个指令执行包的循环体代码,使得循环时不用每次访问内存重新取值,节省功耗和存储访问带宽。在程序编译过程中,编译器会自动将可以放入缓冲器的循环指令用特殊指令标识,用MVC指令将循环次数装载到内部循环计数器,循环代码的开始和结束分别用指令SPLOOP和SPKERNEL指令标识。这样循环体执行结束时,其硬件机制可以控制代码从循环体开始处继续执行,减少了分支指令的开销。但是该方法中,对计数器的写入和读取,循环体的开始和结束都需要通过指令实现,浪费指令周期。循环次数由循环计数器的值决定,而且从加载循环计数器值到它的内容可以使用需要4个时钟周期,因而要求在SPLOOP指令前4个周期加载循环计数器。这种方法对指令顺序要求严格,而且这4个周期的间隔通道需要通过插入空指令来实现,浪费指令周期。
发明内容
本发明的目的是通过在超长指令字的处理器中增加一条指令和一个循环单元,解决超长指令字的处理器循环控制不能完全由硬件实现,循环执行开销大的问题。
为实现上述目的,本发明一方面提供了一种超长指令字的处理器装置,包括循环单元、地址发送单元和指令译码单元,其中循环单元的接收端与译码单元的输出端相连接,循环单元的发送端与地址发送单元相连接,当指令译码单元译码到循环标志指令(L P指令)时,则将循环标志指令携带的循环参数信息发送给循环单元,循环单元进一步包括循环体数据计算模块、循环计数模块、存储模块和取指地址计算模块,其中循环体数据计算模块用于接收指令译码单元发送的循环参数,并根据循环标志指令的地址和循环参数得到循环体数据:循环起始地址、循环结束地址和循环次数;存储模块与循环体数据计算模块连接,用于存储循环体数据;取指地址计算模块与存储模块连接,用于读取存储模块得到当前循环体数据:当前循环起始地址、当前循环结束地址和当前循环次数,根据当前取指地址得到下一取指地址,若下一取指地址大于当前循环结束地址并且当前循环次数非0,则产生本次循环完成标志信号,更改当前取指地址为当前循环起始地址并发送给地址发送单元,否则将下一取指地址作为当前取指地址发送给地址发送单元;循环计数模块连接指令取指地址计算模块和存储模块,用于读取存储模块得到当前循环次数,根据本次循环结束标志信号更新当前循环次数为当前循环次数减1并存入所述存储模块。
本发明另一方面提供了一种超长指令字处理器的循环处理方法,该方法的步骤包括:(1)获取循环标志指令;(2)提取循环标志指令携带的循环参数;(3)根据循环标志指令的地址和循环参数得到并保存循环体数据:循环起始地址、循环结束地址、循环次数;根据循环标志指令的地址得到当前取指地址;(4)将保存的循环体数据作为当前循环体数据,得到当前循环起始地址、当前循环结束地址、当前循环次数;(5)根据当前取指地址获取指令并执行;根据当前取指地址得到下一取指地址,判断下一取指地址是否大于当前循环结束地址,如否,则将下一取指地址作为当前取指地址,重复本步骤;若是,则判断当前循环次数是否是0,若不是0,则更新当前循环次数为所述当前循环次数减1,将当前循环起始地址作为当前取指地址,重复本步骤,若是0,则将下一取指地址作为当前取指地址。
根据本发明的处理器装置及其循环处理方法,循环执行完全由硬件实现,无需通过指令实现循环计数器的赋值和修改,能够实现超长指令字的处理器循环零开销,可以大大提高超长指令字处理器的性能。
附图说明
通过以下结合附图以举例方式对本发明的实施方式进行详细描述后,本发明的其他特征、特点和优点将会更加明显。
图1是循环标志指令示意图;
图1A是本发明一实施例循环标志指令编码示意图;
图1B是本发明另一实施例循环标志指令编码示意图;
图2A是本发明一个实施例超长指令字的处理器结构示意图;
图2B是本发明另一个实施例超长指令字的处理器结构示意图;
图3是本发明实施例处理器的循环处理方法流程图。
具体实施方式
本发明通过在现有技术的超长指令字的处理器中增加一条循环标志指令(LP指令)和一个循环单元实现了超长指令字的处理器循环执行零开销。
针对LP指令的编码格式以及该指令的定义做如下描述。
LP指令语法中带有一个标号(label),一个无符号参数(uimmn)和一个并行标志位符号。标号(label)代表该循环体结束后下一个指令执行包的标号,无符号参数(uimmn)代表该循环体内的循环次数,并行标志位符号代表本条指令和下一条指令是否同属于一个指令执行包,即是否可以并行执行。程序中每个指令执行包内可包括1到N条指令,N为该超长指令字处理器支持的多发射数目。如图1所示,可以通过自动或手动标识循环体内容,循环次数,在循环体结束后下一个指令执行包前插入相应的标号(label),并且在循环体前插入指令LP label,uimmn.。其中参数label等于循环体结束后下一个指令执行包前插入的标号名称。在链接过程中,汇编器和链接器通过(label指令包的首地址-LP指令的地址)/(指令编码长度/处理器最小寻址单元长度)-1得到循环体内指令数目,并将其赋给LP指令编码中无符号参数(uimmm)。无符号参数(uimmn)代表该循环体内的循环次数。“.”是并行标志位符号,可自己定义。此处“.”表示该指令与后面的指令不属于一个指令执行包,不能并行执行。
图1A是本发明一实施例循环标志指令编码示意图。如图所示,LP指令编码总长度为Linst,其中指令标识位占a位;并行位等占b位;LP指令第一操作数uimmm占m位,用于存储循环体中的指令的数目,该指令的数目由公式(uimmm+1)*(Linst/Step)+lp_pc=PC_label计算得到,其中lp_pc代表LP指令的地址,PC_label代表循环体结束后下一个指令执行包的首指令地址;第二操作数uimmn占n位,用于存储循环体的循环次数;Step代表处理器的最小寻址单元位宽,例如按字节寻址的处理器的最小寻址单元位宽为8比特,按字寻址的处理器的最小寻址单元位宽为32比特。
在指令译码阶段,通过译码可以将循环体中的指令数目uimmm信息和循环的次数uimmn信息传递给循环单元做相应的处理。针对不同的处理器,其LP指令编码总长度Z,以及标识位和并行位等所占的长度都不一致,但都是固定的,而m+n=Linst-a-b,具体m和n的长度可以根据不同的处理器编码格式进行调节,一般n>m。由于超长指令字的处理器应用中,密集计算的循环体内容都不会很大,但循环次数却可能会很大。可以支持的循环体内指令条数为2n,支持循环次数为2m。要求LP指令必须为其所在指令执行包中的最后一条指令。
在一个实施例中,以某一超长指令字的处理器设计为例。LP指令编码如图1B所示,LP指令编码总长度为32比特,其中标识位占5比特;pr占3比特,代表推断寄存器的索引;p占1比特,代表并行标志位;操作数imm9占9比特,代表循环体内的指令数目高达29;操作数imm14占14比特,代表循环次数高达214。根据操作数imm9、操作数imm14和当前LP指令所在指令执行包的首指令地址和该指令执行包内指令数目可以计算出循环体的开始的指令地址和结束的指令地址。
以上针对超长指令字的处理器中增加的LP指令做了相应描述,以下结合附图针对DSP处理器进行描述。
图2A是本发明一个实施例超长指令字的处理器结构示意图。如图2A所示,该处理器包括循环单元10、地址发送单元15、指令接收单元16、指令拆包单元17、指令译码单元18和指令存储器20,其中循环单元10的接收端与指令译码单元18的输出端相连接,循环单元10的发送端与地址发送单元15相连接。
指令接收单元16根据地址发送单元15发送的取指地址从指令存储器20中接收指令,由指令拆包单元17对指令接收单元16接收的指令进行拆包处理,并将拆包处理后的指令发送给指令译码单元18。当指令译码单元18译码到循环标志指令后,则将循环标志指令携带的循环参数发送给循环单元10进行处理,循环参数包括循环体中指令数目(uimmm)和循环次数(uimmn)。其中循环体中指令数目和循环次数通过循环标志指令编码中的第一操作数和第二操作数获取。循环单元10根据接收到的循环参数信息以及接收的指令译码单元18当前正在译码的指令执行包中的指令数目(N)、正在译码的指令执行包首指令地址(PC_current)、LP指令标志(lp_lable)。根据循环标志指令所在指令执行包的首指令地址和所在指令执行包中指令数目得到该循环标志指令的地址,根据循环标志指令的地址和循环参数得到并保存循环体数据:循环起始地址、循环结束地址和循环次数。按照先进后出顺序将保存的循环体数据读出作为当前循环体数据:当前循环起始地址、当前循环结束地址和当前循环次数;根据当前循环体数据和地址发送单元15发送的取指地址(pc_fetch),计算并获得下一周期指令的取指地址再发送给地址发送模块15。
图2B是本发明另一个实施例超长指令字的处理器结构示意图。如图2B所示,处理器的循环单元10进一步包括循环体数据计算模块11、循环计数模块12、存储模块13和取指地址计算模块14。
循环体数据计算模块11与存储模块13和指令译码单元18连接,接收来自指令译码单元18发送的循环参数,上述循环参数包括循环体中指令数目(uimmm)和循环次数(uimmn)。此外循环体数据计算模块11还接收译码单元18当前正在译码的指令执行包中的指令数目(N)、正在译码的指令执行包首指令地址(PC_current)、LP指令标志(lp_lable),此外循环体数据计算模块11还接收存储模块13的信号counter[0]寄存器的值。循环体数据计算模块11通过上述接收的循环参数信息生成循环使能信号(loop_en),当LP指令标志(lp_lable)有效时,置循环使能信号有效,当从存储模块13中读出的counter[0]寄存器为0时,说明循环(对于嵌套循环而言指最外层循环)执行完毕,置循环使能信号无效,其余情况下循环使能信号保持不变。循环体数据包括循环起地址、循环结束地址和循环次数,其中根据公式:lp_pc=PC_current+(N-1)*(Linst/Step),计算出LP指令的地址(lp_pc);根据公式:lpc_start=lp_pc+(Linst/Step),计算出循环体的起始地址(lpc_start);根据公式:lpc_end=lp_pc+(uimmm+1)*(Linst/Step),计算出循环体的结束地址(lpc_end);根据公式:counter=uimmn,得到循环次数(counter)。循环体数据计算模块11将得到的循环体数据和循环使能信号和LP指令标志一起发送给存储模块13,同时将循环使能信号发送给循环计算模块12。
存储模块13连接循环体数据计算模块11和取指地址计算模块14,存储由循环体数据计算模块11发送的循环体数据:循环体的起始地址、循环体的结束地址和循环体的循环次数。
存储模块13选用FILO(First In Last Out,先进后出)存储模块,通过该存储模块可支持多层嵌套循环,设支持的嵌套循环层数为N,那么存储模块的深度就必须为N。以N=4为例,如表一所示,支持4层嵌套循环。存储模块内含3组寄存器,分别为lpc_start寄存器、lpc_end寄存器和counter寄存器,分别用于存储循环体起始地址、循环体结束地址和循环体循环次数。
表一:
N | 0 | 1 | 2 | 3 |
lpc_start | ||||
lpc_end | ||||
counter |
存储模块13的数据读出和写入分别受到读指针rp和写指针wp的控制,读指针rp指向当前循环应该读取的存储模块的位置,代表了目前正在执行的循环体所在的循环嵌套层次,写指针wp指向下一次遇到循环标志lp_label时,应该写入的存储模块的位置,代表下一个循环嵌套的层次。读指针和写指针的数值是0至N-1。本发明通过修改读指针的方法实现存储内容清除或无效的功能。
当存储模块13接收的LP指令标志lp_lable信号有效时,则将接收到的循环体数据:循环体的起始地址、循环体的结束地址和循环次数分别写入到存储模块13中的lpc_start寄存器、lpc_end寄存器和counter寄存器,然后修改读写指针,此时正常情况下,读写指针分别加1,但是以下三种情况除外:(1)如果当前读指针rp和写指针wp都为0,则表明之前没有循环执行,或之前的循环已经完成,即将开始一个新的循环,这时如果有数据写入存储模块13,那么读指针rp保持0不变,写指针wp加1。(2)如果当前写指针为N-1,表明当前循环标志lp_label所在的循环嵌套层次是该处理器所能支持的最大的第N层嵌套循环,所以写指针保持不变,读指针正常加1。(3)如果当前读指针为N-1,表明当前正在执行的循环的循环嵌套层次是该处理器所能支持的最大的第N层嵌套循环,而此时循环标志lp_label所在的循环嵌套层次是N+1,超出了处理器所能支持的范围,属于例外情况,这种情况应该由编译器根据处理器的参数来避免,不应该出现。这种情况下设定读写指针都保持不变。
如果当前嵌套层的循环执行完毕,即当前读指针所指的循环次数寄存器counter[rp]为0,那么正常情况下,读写指针应该减1。但下述情况除外:(1)如果当前写指针为0,说明还未有循环参数写入存储体,因而读写指针应该保持为0;(2)如果当前读指针为N-1,表明正在执行的是该处理器所能支持的最大的第N层嵌套循环,因而当第N层嵌套循环执行完毕时,等待下一次写入的是第N层嵌套循环,所以写指针保持不变,读指针减1;(3)如果当前读指针为0,说明正在执行的是第1层嵌套循环,即循环的最外层,那么当第1层嵌套循环执行完毕时,说明当前循环执行完毕,下一次写入的将是一个新的循环,因而读指针应该保持为0,写指针减1。
在一个例子中,存储模块13的内容写入控制代码如下所示:
在上述代码中,当复位信号rst信号有效时,将存储模块13中的内容复位为全0。当LP指令标志(lp_lable)信号有效时,则将循环体数据计算模块11发过来的循环起始地址、循环结束地址和循环次数分别写入到写指针wp指向的寄存器lpc_start[wp]、寄存器lpc_end[wp]和寄存器counter[wp]中,否则将循环计数模块12发送的下一个周期的循环次数(counter_next)信号根据写指针写入到相应的循环次数寄存器counter[wp]中。
在一个例子中,存储模块13的内容读出控制代码如下所示:
在上述代码中,当来自循环体数据计算模块11的循环使能信号loop_en有效时,根据读指针rp将存储模块13中的lpc_start[rp]寄存器,lpc_end[rp]寄存器,counter[rp]寄存器中的信息读出,信号名分别为当前循环的循环次数(counter_now)、当前循环的循环体起始地址(lpc_start_now)和当前循环的循环体结束地址(lpc_end_now),否则输出信号“32′b0”,上述代码中“32′b0”代表32比特都为0。
取指地址计算模块14连接存储模块13和循环计数模块12,从存储模块13读出当前循环的循环次数(counter_now)、当前循环的循环体起始地址(lpc_start_now)和当前循环的循环体结束地址(lpc_end_now),并且根据以上参数和当前取指地址计算出下一取指地址,下一取指地址=当前取指地址(pc_fetch)+指令包的宽度/寻址单元位宽(Step)。判断下一取指地址是否大于当前循环结束地址,如果不是,说明当前循环体尚未执行完毕,则下一取指地址作为当前取指地址(pc_send);如果是,说明当前循环体执行完毕,产生本次循环完成标志信号(loops_end),并发送给循环计数模块12,进而判断当前循环次数是否是0,若不是0,则说明当前循环尚未执行完毕,应从循环体开始处再进行取指,将当前循环起始地址作为当前取指地址;若是0,说明当前循环执行完毕,产生循环结束标志信号(loop_end),程序应该顺序往下执行,则将下一取指地址作为当前取指地址。
循环计数模块12用于循环计数器的计算,分别与循环体数据计算模块11、存储模块13和取指地址计算模块14连接,从存储模块13中读取当前循环的循环次数(counter_now)信号,并接收来自取指地址计算模块14的循环结束信号和来自循环体数据计算模块11的循环使能信号。循环计数模块12通过上述信号产生下一个周期的循环次数(counter_next)信号,如果循环使能信号有效,并且本次循环完成标志信号(loops_end)有效,更新下一个周期的循环次数(counter_next)为当前循环次数(counter_now)减1,并将下一个周期的循环次数(counter_next)信号发送给存储模块13,用于更新当前循环次数counter[rp]寄存器。
图3是本发明实施例超长指令字处理器的循环处理方法流程图。该方法的步骤包括301-311:
在步骤301,获取循环标志指令。
循环标志指令带有两个操作数,用于存储循环参数,该循环参数包括循环体中指令数目和循环次数,其中第一操作数(uimmm)用于存储循环体中的指令数目,循环体中指令数目是由链接器根据循环标志指令包的首地址和循环标志指令的地址相减再除以一条指令所占地址的步长再减1得到;第二操作数(uimmn)用于存储循环体的循环次数。处理器在指令取指阶段根据当前取指地址从指令存储器中获取指令,并对指令进行译码操作,当译码到循环标志指令后,处理器获取该循环标志指令。
在步骤302,提取循环标志指令携带的循环参数。
当处理器获取循环标志指令后,通过循环标志指令的第一个操作数(uimmm)提取循环体中指令数目,通过第二操作数(uimmn)提取循环次数。
在步骤303,根据循环标志指令的地址和循环参数得到并保存循环体数据,并根据循环标志指令的地址得到当前取指地址。
处理器根据公式:lp_pc=PC_current+(N-1)*(Linst/Step)得到循环标志指令的地址,其中lp_pc代表循环标志指令地址、PC_current代表正在译码的指令执行包首指令地址、N代表当前正在译码的指令执行包中的指令数目、Linsn代表指令编码长度、Step代表处理器的最小寻址单元位宽。
处理器根据得到的循环标志指令的地址和在步骤302提取的循环参数得到并保存循环体数据,该循环体数据包括循环起始地址、循环结束地址和循环次数,其中循环起始地址根据公式:lpc_start=lp_pc+(Linst/Step)得到,lpc_start代表循环起始地址;循环结束地址根据公式:lpc_end=lp_pc+(uimmm+1)*(Linst/Step)得到,lpc_end代表循环结束地址,公式中(uimmm+1)代表循环体中指令数目+1;循环次数是循环标志指令第二操作数(uimmn)携带的循环次数。
在步骤304,将保存的循环体数据作为当前循环体数据,得到当前循环起始地址、当前循环结束地址和当前循环次数。
优选地,处理器按照先进后出的顺序将保存的循环体数据作为当前循环体数据,得到当前循环起始地址、当前循环结束地址和当前循环次数。
在步骤305,处理器根据当前取指地址从指令存储器中获取指令并执行相应的操作。
在步骤306,处理器根据当前取指地址计算出下一取指地址。
在步骤307,处理器将下一取指地址与当前循环结束地址进行比较,如果下一取指地址不大于当前循环结束地址,说明当前循环体尚未执行完毕,流程进入步骤308;如果下一取指地址大于当前循环结束地址,说明当前循环体执行完毕,产生本次循环完成标志信号,流程进入步骤309。
在步骤308,处理器将下一取指地址作为当前取指地址,流程转而执行步骤305。
在步骤309,处理器进一步判断当前循环次数是否是0,如果当前循环次数不是0,则说明当前循环尚未执行完毕,流程进入步骤310;如果循环次数是0,说明当前循环执行完毕,产生循环结束标志信号,流程转而进入步骤308。
在步骤310,处理器更新当前循环次数为当前循环次数减1。
在步骤311,处理器将当前循环起始地址作为当前取指地址,流程转而进入步骤305。
在本发明实施例中,处理器的循环处理方法进一步包括:当下一取指地址大于当前循环结束地址并且当前的循环次数是0时,处理器清除保存的对应循环体数据,如果处理器还有保存的循环体数据时,则流程跳转至步骤304继续执行,否则循环处理结束。
本发明实施例循环处理方法的循环执行完全由硬件实现,无需通过指令实现循环计数器的赋值和修改,能够实现超长指令字的处理器循环零开销,可以大大提高超长指令字处理器的性能。
显而易见,在不偏离本发明的真实精神和范围的前提下,在此描述的本发明可以有许多变化。因此,所有对于本领域技术人员来说显而易见的改变,都应包括在本权利要求书所涵盖的范围之内。本发明所要求保护的范围仅由所述的权利要求书进行限定。
Claims (9)
1.一种超长指令字的处理器装置,其特征在于包括:循环单元(10)、地址发送单元(15)和指令译码单元(18),所述循环单元(10)的接收端与所述指令译码单元(18)的输出端相连接,所述循环单元(10)的发送端与所述地址发送单元(15)相连接,当所述指令译码单元(18)译码循环标志指令后,将所述循环标志指令携带的循环参数发送给所述循环单元(10),所述循环单元(10)进一步包括循环体数据计算模块(11)、循环计数模块(12)、存储模块(13)和取指地址计算模块(14),其中
循环体数据计算模块(11),用于接收所述指令译码单元(18)发送的循环参数,并根据所述循环标志指令的地址和循环参数得到循环体数据:循环起始地址、循环结束地址和循环次数;
存储模块(13),与所述循环体数据计算模块(11)连接,用于存储所述循环体数据;
取指地址计算模块(14),与所述存储模块(13)连接,用于读取所述存储模块(13)得到当前循环体数据:当前循环起始地址、当前循环结束地址和当前循环次数,根据当前取指地址得到下一取指地址,若所述下一取指地址大于所述当前循环结束地址并且所述当前循环次数非0,则产生本次循环完成标志信号,更改当前取指地址为所述当前循环起始地址并发给地址发送单元(15),否则将所述下一取指地址作为当前取指地址发送给地址发送单元(15);
循环计数模块(12),连接所述取指地址计算模块(14)和所述存储模块(13),用于读取所述存储模块(13)得到当前循环次数,根据所述本次循环完成标志信号更新当前循环次数为所述当前循环次数减1并存入所述存储模块(13)。
2.根据权利要求1所述的装置,其特征在于,
按照先进后出顺序存储和读出所述存储模块(13)的循环体数据;
所述取指地址计算模块(14)还用于当所述当前取指地址大于所述当前循环结束地址以及所述当前循环次数是0,产生当前循环结束标志信号;
所述存储模块(13)还用于根据所述当前循环结束标志信号将存储的对应循环体数据清除,然后判断所述存储模块(13)中是否还有保存的循环体数据,若有,则所述取指地址计算模块(14)按照先进后出顺序读取所述存储模块(13)得到当前循环体数据。
3.根据权利要求1所述的装置,其特征在于:所述装置还包括指令接收单元(16)、指令拆包单元(17)和指令存储器(20),所述指令接收单元(16)根据所述地址发送单元(15)发送的取指地址从所述指令存储器(20)中接收指令,所述指令拆包单元(17)对接收的指令进行拆包,将拆包后的指令发送给所述指令译码单元(18)。
4.根据权利要求1所述的装置,其特征在于:所述循环参数包括循环体中指令数目和循环次数。
5.根据权利要求4所述的装置,其特征在于:所述循环标志指令携带的循环体中指令数目由链接器计算并赋给。
6.根据权利要求4所述的装置,其特征在于:
所述循环标志指令是其所在指令执行包的最后一条指令;
根据所述循环标志指令的地址和所述循环参数得到循环体数据是:通过循环标志指令的地址+指令编码长度/处理器最小寻址单元长度得到循环起始地址,通过循环标志指令的地址+(循环体中指令数目+1)×(指令编码长度/处理器最小寻址单元长度)得到循环结束地址,循环次数是所述循环标志指令携带的循环次数。
7.一种超长指令字处理器的循环处理方法,其特征在于包括以下步骤:
1)获取循环标志指令,所述循环标志指令是其所在指令执行包的最后一条指令;
2)提取所述循环标志指令携带的循环参数,所述循环参数包括循环体中指令数目和循环次数;
3)根据所述循环标志指令的地址和所述循环参数得到并保存循环体数据:循环起始地址、循环结束地址和循环次数;根据所述循环标志指令的地址得到当前取指地址;所述循环标志指令的地址根据以下公式获取:lp_pc=PC_current+(N-1)*(Linst/Step),其中lp_pc代表循环标志指令地址、PC_current代表正在译码的指令执行包首指令地址、N代表当前正在译码的指令执行包中的指令数目、Linst代表指令编码长度、Step代表处理器的最小寻址单元位宽;所述循环起始地址是通过所述循环标志指令的地址+指令编码长度/处理器最小寻址单元长度得到,所述循环结束地址是通过循环标志指令的地址+(循环体中指令数目+1)×(指令编码长度/处理器最小寻址单元长度)得到,所述循环次数是所述循环标志指令携带的循环次数;
4)将所述保存的循环体数据作为当前循环体数据,得到当前循环起始地址、当前循环结束地址和当前循环次数;
5)根据所述当前取指地址获取指令并执行;根据所述当前取指地址得到下一取指地址,判断所述下一取指地址是否大于所述当前循环结束地址,如否,则将所述下一取指地址作为当前取指地址,重复本步骤;若是,则判断所述当前循环次数是否是0,若不是0,则更新当前循环次数为所述当前循环次数减1,将所述当前循环起始地址作为当前取指地址,重复本步骤,若是0,则将所述下一取指地址作为当前取指地址。
8.根据权利要求7所述的方法,其特征在于,
步骤4)进一步包括:按照先进后出顺序将所述保存的循环体数据作为当前循环体数据,得到当前循环起始地址、当前循环结束地址、当前循环次数;
步骤5)进一步包括:若所述下一取指地址大于所述当前循环结束地址并且所述当前循环次数是0,则清除保存的对应循环体数据;
步骤5)之后还包括步骤:判断是否有保存的循环体数据,若有,则转到步骤4)。
9.根据权利要求7所述的方法,其特征在于:所述循环标志指令携带的循环体中指令数目由链接器计算并赋给。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110319091.1A CN102508635B (zh) | 2011-10-19 | 2011-10-19 | 一种处理器装置及其循环处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110319091.1A CN102508635B (zh) | 2011-10-19 | 2011-10-19 | 一种处理器装置及其循环处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102508635A CN102508635A (zh) | 2012-06-20 |
CN102508635B true CN102508635B (zh) | 2014-10-08 |
Family
ID=46220729
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110319091.1A Expired - Fee Related CN102508635B (zh) | 2011-10-19 | 2011-10-19 | 一种处理器装置及其循环处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102508635B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5623677B2 (ja) * | 2012-06-28 | 2014-11-12 | 三菱電機株式会社 | リードリクエスト処理装置 |
CN103336681B (zh) * | 2013-07-03 | 2015-11-25 | 同济大学 | 针对采用变长指令集的流水线结构处理器的取指方法 |
CN105468550B (zh) * | 2015-11-19 | 2018-10-19 | 深圳国微技术有限公司 | 一种可实现链表循环的系统及方法 |
CN106708473B (zh) * | 2016-12-12 | 2019-05-21 | 中国航空工业集团公司西安航空计算技术研究所 | 一种统一染色器阵列多warp取指电路 |
CN108595210B (zh) * | 2018-04-09 | 2021-12-10 | 杭州中天微系统有限公司 | 实现零开销循环的处理器 |
CN109656641B (zh) * | 2018-11-06 | 2021-03-02 | 极芯通讯技术(南京)有限公司 | 一种多层循环程序的运行系统和方法 |
CN111522584B (zh) * | 2020-04-10 | 2023-10-31 | 深圳优矽科技有限公司 | 一种硬件循环加速处理器及其执行的硬件循环加速方法 |
CN111783737B (zh) * | 2020-07-29 | 2024-02-02 | 郑州航空工业管理学院 | 一种数学公式的识别方法和识别装置 |
CN112000370B (zh) | 2020-08-27 | 2022-04-15 | 北京百度网讯科技有限公司 | 循环指令的处理方法、装置、设备和存储介质 |
CN111796869A (zh) * | 2020-09-07 | 2020-10-20 | 华夏芯(北京)通用处理器技术有限公司 | 程序指令块处理方法及装置 |
CN112835624A (zh) * | 2021-02-18 | 2021-05-25 | 中国科学院自动化研究所 | 指令字处理器及零开销循环处理方法、电子设备及介质 |
CN112817664B (zh) * | 2021-04-19 | 2021-07-16 | 北京燧原智能科技有限公司 | 一种数据处理系统、方法及芯片 |
CN116501657B (zh) * | 2023-06-19 | 2023-11-10 | 阿里巴巴(中国)有限公司 | 缓存数据的处理方法、设备及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101169710A (zh) * | 2006-10-26 | 2008-04-30 | 中国科学院计算技术研究所 | 对状态寄存器进行重命名的方法和使用该方法的处理器 |
CN101256504A (zh) * | 2008-03-17 | 2008-09-03 | 中国科学院计算技术研究所 | 一种支持x86虚拟机的risc处理器装置及方法 |
CN101894013A (zh) * | 2010-07-16 | 2010-11-24 | 中国科学院计算技术研究所 | 处理器内指令级流水线控制方法及其系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU2003274591A1 (en) * | 2002-11-28 | 2004-06-18 | Koninklijke Philips Electronics N.V. | A loop control circuit for a data processor |
-
2011
- 2011-10-19 CN CN201110319091.1A patent/CN102508635B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101169710A (zh) * | 2006-10-26 | 2008-04-30 | 中国科学院计算技术研究所 | 对状态寄存器进行重命名的方法和使用该方法的处理器 |
CN101256504A (zh) * | 2008-03-17 | 2008-09-03 | 中国科学院计算技术研究所 | 一种支持x86虚拟机的risc处理器装置及方法 |
CN101894013A (zh) * | 2010-07-16 | 2010-11-24 | 中国科学院计算技术研究所 | 处理器内指令级流水线控制方法及其系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102508635A (zh) | 2012-06-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102508635B (zh) | 一种处理器装置及其循环处理方法 | |
US6567895B2 (en) | Loop cache memory and cache controller for pipelined microprocessors | |
CN101965554B (zh) | 选择性地提交已执行指令的结果的系统和方法 | |
CN101373427B (zh) | 程序执行控制装置 | |
US5163139A (en) | Instruction preprocessor for conditionally combining short memory instructions into virtual long instructions | |
EP2951681B1 (en) | Solution to divergent branches in a simd core using hardware pointers | |
CN109918130A (zh) | 一种具有快速数据旁路结构的四级流水线risc-v处理器 | |
KR20180021812A (ko) | 연속하는 블록을 병렬 실행하는 블록 기반의 아키텍쳐 | |
WO2010139941A1 (en) | A data processing apparatus and method for handling vector instructions | |
CN102298514A (zh) | 用于有效动态二进制变换的寄存器映射技术 | |
US7480783B2 (en) | Systems for loading unaligned words and methods of operating the same | |
GB2375852A (en) | Loop instruction processing using a loop buffer and inhibiting instruction fetch. | |
CN104424128A (zh) | 变长指令字处理器系统和方法 | |
CN111984319A (zh) | 嵌套循环控制 | |
WO2016210021A1 (en) | Locking operand values for groups of instructions executed atomically | |
CN102880449A (zh) | 一种超长指令字结构下延迟槽调度方法及其系统 | |
CN104536914A (zh) | 基于寄存器访问标记的相关处理装置和方法 | |
CN101714076B (zh) | 对指令束进行解压缩的处理器和方法 | |
TW201712534A (zh) | 關於包括指令組的大小之指令組的資訊解碼 | |
US20160092182A1 (en) | Methods and systems for optimizing execution of a program in a parallel processing environment | |
CN208580395U (zh) | 一种处理器流水线结构 | |
CN100409180C (zh) | 用于处理指令循环的方法和系统 | |
US20220113975A1 (en) | Vector dataflow architecture for embedded systems | |
US20060059470A1 (en) | System and method for run-time value tracking during execution | |
CN109683959B (zh) | 处理器的指令执行方法及其处理器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20141008 Termination date: 20201019 |
|
CF01 | Termination of patent right due to non-payment of annual fee |