Search Images Play YouTube Gmail Drive Calendar Translate More »
Sign in
Screen reader users: click this link for accessible mode. Accessible mode has the same essential features but works better with your reader.

Patents

  1. Advanced Patent Search
Publication numberCN102508635 A
Publication typeApplication
Application numberCN 201110319091
Publication date20 Jun 2012
Filing date19 Oct 2011
Priority date19 Oct 2011
Also published asCN102508635B
Publication number201110319091.1, CN 102508635 A, CN 102508635A, CN 201110319091, CN-A-102508635, CN102508635 A, CN102508635A, CN201110319091, CN201110319091.1
Inventors侯朝焕, 张铁军, 洪缨, 王东辉, 王琪
Applicant中国科学院声学研究所
Export CitationBiBTeX, EndNote, RefMan
External Links: SIPO, Espacenet
一种处理器装置及其循环处理方法
CN 102508635 A
Abstract
本发明公开了一种超长指令字的处理器装置及其循环处理方法,该装置包括循环单元、地址发送单元和指令译码单元,其中循环单元包括循环体数据计算模块、循环计数模块、存储模块和取指地址计算模块。该方法包括:获取循环标志指令;提取循环标志(LP)指令携带的循环参数;根据循环标志指令的地址和循环参数得到并保存循环体数据;将保存的循环体数据作为当前循环体数据;根据所述当前取指地址获取指令并执行;根据当前取指地址得到下一取指地址,并通过比较下一取指地址和循环体数据得到当前取指地址。本发明解决了超长指令字的处理器循环的控制不能完全由硬件实现,且循环执行开销大的问题,从而大大提高了超长指令字的处理器性能。
Claims(11)
1. 一种超长指令字的处理器装置,其特征在于包括:循环单元(10)、地址发送单元 (15)和指令译码单元(18),所述循环单元(10)的接收端与所述指令译码单元(18)的输出端相连接,所述循环单元(10)的发送端与所述地址发送单元(1相连接,当所述指令译码单元(18)译码循环标志指令后,将所述循环标志指令携带的循环参数发送给所述循环单元(10),所述循环单元(10)进一步包括循环体数据计算模块(11)、循环计数模块(12)、存储模块(1和取指地址计算模块(14),其中循环体数据计算模块(11),用于接收所述指令译码单元(18)发送的循环参数,并根据所述循环标志指令的地址和循环参数得到循环体数据:循环起始地址、循环结束地址和循环次数;存储模块(13),与所述循环体数据计算模块(11)连接,用于存储所述循环体数据;取指地址计算模块(14),与所述存储模块(1连接,用于读取所述存储模块(13)得到当前循环体数据:当前循环起始地址、当前循环结束地址和当前循环次数,根据当前取指地址得到下一取指地址,若所述下一取指地址大于所述当前循环结束地址并且所述当前循环次数非0,则产生本次循环完成标志信号,更改当前取指地址为所述当前循环起始地址并发给地址发送单元(15),否则将所述下一取指地址作为当前取指地址发送给地址发送单元 (15);循环计数模块(12),连接所述指令取指地址计算模块(14)和所述存储模块(13),用于读取所述存储模块(1得到当前循环次数,根据所述本次循环结束标志信号更新当前循环次数为所述当前循环次数减1并存入所述存储模块(13)。
2.根据权利要求1所述的装置,其特征在于,按照先进后出顺序存储和读出所述存储模块(1的循环体数据;所述取指地址计算模块(14)还用于当所述当前取指地址大于所述当前循环结束地址以及所述当前循环次数是0,产生当前循环结束标志信号;所述存储模块(1还用于根据所述当前循环结束标志信号将存储的对应循环体数据清除,然后判断所述存储模块(13)中是否还有保存的循环体数据,若有,则所述取指地址计算模块(14)按照先进后出顺序读取所述存储模块(1得到当前循环体数据。
3.根据权利要求1所述的装置,其特征在于:所述装置还包括指令接收单元(16)、指令拆包单元(17)和指令存储器(20),所述指令接收单元(16)根据所述地址发送单元(15)发送的取指地址从所述指令存储器00)中接收指令,所述指令拆包单元(17)对接收的指令进行拆包,将拆包后的指令发送给所述指令译码单元(18)。
4.根据权利要求1所述的装置,其特征在于:所述循环参数包括循环体中指令数目和循环次数。
5.根据权利要求4所述的装置,其特征在于:所述循环标志指令携带的循环体中指令数目由链接器计算并赋给。
6.根据权利要求4所述的装置,其特征在于:所述循环标志指令是其所在指令执行包的最后一条指令;根据所述循环标志指令地址和所述循环参数得到循环体数据是:通过循环标志指令地址+指令编码长度/处理器最小寻址单元长度得到循环起始地址,通过循环标志指令地址 + (循环体中指令数目+1) X (指令编码长度/处理器最小寻址单元长度)得到循环结束地址,循环次数是所述循环标志指令携带的循环次数。
7. 一种超长指令字处理器的循环处理方法,其特征在于包括以下步骤:1)获取循环标志指令;2)提取所述循环标志指令携带的循环参数;3)根据所述循环标志指令的地址和所述循环参数得到并保存循环体数据:循环起始地址、循环结束地址和循环次数;根据所述循环标志指令的地址得到当前取指地址;4)将所述保存的循环体数据作为当前循环体数据,得到当前循环起始地址、当前循环结束地址和当前循环次数;5)根据所述当前取指地址获取指令并执行;根据所述当前取指地址得到下一取指地址,判断所述下一取指地址是否大于所述当前循环结束地址,如否,则将所述下一取指地址作为当前取指地址,重复本步骤;若是,则判断所述当前循环次数是否是0,若不是0,则更新当前循环次数为所述当前循环次数减1,将所述当前循环起始地址作为当前取指地址,重复本步骤,若是0,则将所述下一取指地址作为当前取指地址。
8.根据权利要求7所述的方法,其特征在于,步骤4)进一步包括:按照先进后出顺序将所述保存的循环体数据作为当前循环体数据,得到当前循环起始地址、当前循环结束地址、当前循环次数;步骤幻进一步包括:若所述下一取指地址大于所述当前循环结束地址并且所述当前循环次数是0,则清除保存的对应循环体数据;步骤幻之后还包括步骤:判断是否有保存的循环体数据,若有,则转到步骤4)。
9.根据权利要求7所述的方法,其特征在于:所述循环参数包括循环体中指令数目和循环次数。
10.根据权利要求9所述的方法,其特征在于:所述循环标志指令携带的循环体中指令数目由链接器计算并赋给。
11.根据权利要求9所述的方法,其特征在于:所述循环标志指令是其所在指令执行包的最后一条指令;根据所述循环标志指令地址和所述循环参数得到循环体数据是:通过循环标志指令地址+指令编码长度/处理器最小寻址单元长度得到循环起始地址,通过循环标志指令地址 + (循环体中指令数目+1) X (指令编码长度/处理器最小寻址单元长度)得到循环结束地址,循环次数是所述循环标志指令携带的循环次数。
Description

一种处理器装置及其循环处理方法

技术领域

[0001] 本发明涉及一种处理器技术,尤其涉及一种处理器装置及其循环处理方法。 背景技术

[0002] 随着计算机和信息技术的飞速发展,数字信号处理(Digital Signal Processing, DSP)技术应运而生并得到迅速的发展。DSP处理器则广泛的应用于数据密集型计算类应用,如图像、视频编码等。这些应用的计算复杂性和实时性特点对处理器的性能提出了更高的要求。而这些应用大部分计算都集中在循环以及循环嵌套中完成。

[0003] 在DSP的应用中,如果DSP处理器能够实现零开销循环,将可以大大提高DSP处理器的性能。所谓零开销循环是DSP处理器在执行循环时,不用花时间去检查循环计数器的值就能执行一组指令,由硬件完成循环跳转和循环计数器的增减。

[0004] 现有的零循环开销技术大多不支持超长指令字(Very Long Instruction Word, VLIff)结构的DSP处理器,而且增加的循环指令众多,硬件实现方法复杂。所支持的循环体内指令数目和循环次数有限,循环的控制不能完全由硬件实现,循环开销依然存在。

[0005] 如2010年12月6-8号在成都举办的第18届智能信号处理与通信系统国际会议(ISPACS)上 Zhenqi Wei, Peilin Liu, Ji Kong, Rendong Ying 等人发表的《Low-Power Microarchitecture of Zero-Overhead Nested Loops in Embedded Processors))文章中公开了通过增加专用的循环指令:L00P. C,LOOP. B, LOOP. R,LOOP. BR来通知硬件接下来循环体的指令数目和循环次数,或者刷新硬件中循环计数器等专用寄存器的值。通过增加硬件单元,包括一个循环寄存器堆栈和循环缓存器,其中循环寄存器堆栈用于存储循环体的起始地址、结束地址、当前循环PC、循环次数和循环体是否可用、是否使用循环缓冲的标志位,循环缓存器用于存储小循环的循环指令。文章所公开的方法虽然能较好的解决零循环开销的问题,但是增加的指令较多,虽然文章提出其支持循环嵌套,但是没有提出具体的硬件实现方式。而且该方法只适用于单发射的DSP处理器结构,不适用于具有VLIW结构的高性能DSP处理器。

[0006] 如计算机期干U IEEE Transactions on computers, Vol 57,NO. 2,February 2008 中 Nikolaos Kavvadias and Spirdon Nikoladis 等人发表的《Elimination of overhead operations in complex loop structures for embedded microprocessors))文章中提到通过任务控制循环图(Task Control-flow Graph,TCFG)优化应用程序的循环节点,编译产生优化后的代码。增加的循环硬件模块包括:循环参数表、索引计算单元和任务选择单元。 可以支持循环嵌套,以及多入口和多出口循环。多入口和多出口循环主要用于控制密集型循环,而大多数程序的计算密集型循环控制逻辑简单,不存在多入口和多出口。而且这种方法只支持单发射的处理器结构,而且不能被传统编译器优化,硬件结构复杂。

[0007] 如德州仪器(Texas Instruments, Tl)公司DSP芯片C64X+系列支持VLIW,主要采用软件流水机制减少循环开销。硬件部分包括1个缓冲器和两个计数器,另外还有7条相关指令。其中,缓冲器可以用来存储最多14个指令执行包的循环体代码,使得循环时不用每次访问内存重新取值,节省功耗和存储访问带宽。在程序编译过程中,编译器会自动将可以放入缓冲器的循环指令用特殊指令标识,用MVC指令将循环次数装载到内部循环计数器,循环代码的开始和结束分别用指令SPLOOP和SPKERNEL指令标识。这样循环体执行结束时,其硬件机制可以控制代码从循环体开始处继续执行,减少了分支指令的开销。但是该方法中,对计数器的写入和读取,循环体的开始和结束都需要通过指令实现,浪费指令周期。循环次数由循环计数器的值决定,而且从加载循环计数器值到它的内容可以使用需要 4个时钟周期,因而要求在SPLOOP指令前4个周期加载循环计数器。这种方法对指令顺序要求严格,而且这4个周期的间隔通道需要通过插入空指令来实现,浪费指令周期。

发明内容

[0008] 本发明的目的是通过在超长指令字的处理器中增加一条指令和一个循环单元,解决超长指令字的处理器循环控制不能完全由硬件实现,循环执行开销大的问题。

[0009] 为实现上述目的,本发明一方面提供了一种超长指令字的处理器装置,包括循环单元、地址发送单元和指令译码单元,其中循环单元的接收端与译码单元的输出端相连接, 循环单元的发送端与地址发送单元相连接,当指令译码单元译码到循环标志指令(L P指令)时,则将循环标志指令携带的循环参数信息发送给循环单元,循环单元进一步包括循环体数据计算模块、循环计数模块、存储模块和取指地址计算模块,其中循环体数据计算模块用于接收指令译码单元发送的循环参数,并根据循环标志指令的地址和循环参数得到循环体数据:循环起始地址、循环结束地址和循环次数;存储模块与循环体数据计算模块连接,用于存储循环体数据;取指地址计算模块与存储模块连接,用于读取存储模块得到当前循环体数据:当前循环起始地址、当前循环结束地址和当前循环次数,根据当前取指地址得到下一取指地址,若下一取指地址大于当前循环结束地址并且当前循环次数非0,则产生本次循环完成标志信号,更改当前取指地址为当前循环起始地址并发送给地址发送单元,否则将下一取指地址作为当前取指地址发送给地址发送单元;循环计数模块连接指令取指地址计算模块和存储模块,用于读取存储模块得到当前循环次数,根据本次循环结束标志信号更新当前循环次数为当前循环次数减1并存入所述存储模块。

[0010] 本发明另一方面提供了一种超长指令字处理器的循环处理方法,该方法的步骤包括:(1)获取循环标志指令;(2)提取循环标志指令携带的循环参数;(3)根据循环标志指令的地址和循环参数得到并保存循环体数据:循环起始地址、循环结束地址、循环次数; 根据循环标志指令的地址得到当前取指地址;(4)将保存的循环体数据作为当前循环体数据,得到当前循环起始地址、当前循环结束地址、当前循环次数;(根据当前取指地址获取指令并执行;根据当前取指地址得到下一取指地址,判断下一取指地址是否大于当前循环结束地址,如否,则将下一取指地址作为当前取指地址,重复本步骤;若是,则判断当前循环次数是否是0,若不是0,则更新当前循环次数为所述当前循环次数减1,将当前循环起始地址作为当前取指地址,重复本步骤,若是0,则将下一取指地址作为当前取指地址。

[0011] 根据本发明的处理器装置及其循环处理方法,循环执行完全由硬件实现,无需通过指令实现循环计数器的赋值和修改,能够实现超长指令字的处理器循环零开销,可以大大提高超长指令字处理器的性能。附图说明

[0012] 通过以下结合附图以举例方式对本发明的实施方式进行详细描述后,本发明的其他特征、特点和优点将会更加明显。

[0013] 图1是循环标志指令示意图;

[0014] 图IA是本发明一实施例循环标志指令编码示意图;

[0015] 图IB是本发明另一实施例循环标志指令编码示意图;

[0016] 图2A是本发明一个实施例超长指令字的处理器结构示意图;

[0017] 图2B是本发明另一个实施例超长指令字的处理器结构示意图;

[0018] 图3是本发明实施例处理器的循环处理方法流程图。

具体实施方式

[0019] 本发明通过在现有技术的超长指令字的处理器中增加一条循环标志指令(LP指令)和一个循环单元实现了超长指令字的处理器循环执行零开销。

[0020] 针对LP指令的编码格式以及该指令的定义做如下描述。

[0021] LP指令语法中带有一个标号(label),一个无符号参数(uimmn)和一个并行标志位符号。标号(label)代表该循环体结束后下一个指令执行包的标号,无符号参数(uimmn) 代表该循环体内的循环次数,并行标志位符号代表本条指令和下一条指令是否同属于一个指令执行包,即是否可以并行执行。程序中每个指令执行包内可包括1到N条指令,N为该超长指令字处理器支持的多发射数目。如图1所示,可以通过自动或手动标识循环体内容, 循环次数,在循环体结束后下一个指令执行包前插入相应的标号(label),并且在循环体前插入指令LP label,uimmn. 0其中参数label等于循环体结束后下一个指令执行包前插入的标号名称。在链接过程中,汇编器和链接器通过(label指令包的首地址-LP指令的地址)/ (指令编码长度/处理器最小寻址单元长度)-1得到循环体内指令数目,并将其赋给 LP指令编码中无符号参数(ui_)。无符号参数(uimmn)代表该循环体内的循环次数。“.,, 是并行标志位符号,可自己定义。此处“.”表示该指令与后面的指令不属于一个指令执行包,不能并行执行。

[0022] 图IA是本发明一实施例循环标志指令编码示意图。如图所示,LP指令编码总长度为Linst,其中指令标识位占a位;并行位等占b位;LP指令第一操作数Uimmm占m位,用于存储循环体中的指令的数目,该指令的数目由公式(ui_+l)*(LinstAt印)+lp_pc = PC_ label计算得到,其中lp_pc代表LP指令的地址,PC_label代表循环体结束后下一个指令执行包的首指令地址;第二操作数uimmn占η位,用于存储循环体的循环次数ftep代表处理器的最小寻址单元位宽,例如按字节寻址的处理器的最小寻址单元位宽为8比特,按字寻址的处理器的最小寻址单元位宽为32比特。

[0023] 在指令译码阶段,通过译码可以将循环体中的指令数目ui_信息和循环的次数 uimmn信息传递给循环单元做相应的处理。针对不同的处理器,其LP指令编码总长度Z,以及标识位和并行位等所占的长度都不一致,但都是固定的,而m+n = Linst-a-b,具体m和η 的长度可以根据不同的处理器编码格式进行调节,一般η >m。由于超长指令字的处理器应用中,密集计算的循环体内容都不会很大,但循环次数却可能会很大。可以支持的循环体内指令条数为2n,支持循环次数为2m。要求LP指令必须为其所在指令执行包中的最后一条指令。

[0024] 在一个实施例中,以某一超长指令字的处理器设计为例。LP指令编码如图IB所示,LP指令编码总长度为32比特,其中标识位占5比特;pr占3比特,代表推断寄存器的索引;ρ占1比特,代表并行标志位;操作数imm9占9比特,代表循环体内的指令数目高达 29 ;操作数imml4占14比特,代表循环次数高达214。根据操作数imm9、操作数imml4和当前LP指令所在指令执行包的首指令地址和该指令执行包内指令数目可以计算出循环体的开始的指令地址和结束的指令地址。

[0025] 以上针对超长指令字的处理器中增加的LP指令做了相应描述,以下结合附图针对DSP处理器进行描述。

[0026] 图2A是本发明一个实施例超长指令字的处理器结构示意图。如图2A所示,该处理器包括循环单元10、地址发送单元15、指令接收单元16、指令拆包单元17、指令译码单元 18和指令存储器20,其中循环单元10的接收端与指令译码单元18的输出端相连接,循环单元10的发送端与地址发送单元15相连接。

[0027] 指令接收单元I6根据地址发送单元15发送的取指地址从指令存储器20中接收指令,由指令拆包单元17对指令接收单元16接收的指令进行拆包处理,并将拆包处理后的指令发送给指令译码单元18。当指令译码单元18译码到循环标志指令后,则将循环标志指令携带的循环参数发送给循环单元10进行处理,循环参数包括循环体中指令数目(Uimmm) 和循环次数(uimmn)。其中循环体中指令数目和循环次数通过循环标志指令编码中的第一操作数和第二操作数获取。循环单元10根据接收到的循环参数信息以及接收的指令译码单元18当前正在译码的指令执行包中的指令数目(N)、正在译码的指令执行包首指令地址 (PC_current)、LP指令标志(IpJable)。根据循环标志指令所在指令执行包的首指令地址和所在指令执行包中指令数目得到该循环标志指令的地址,根据循环标志指令的地址和循环参数得到并保存循环体数据:循环起始地址、循环结束地址和循环次数。按照先进后出顺序将保存的循环体数据读出作为当前循环体数据:当前循环起始地址、当前循环结束地址和当前循环次数;根据当前循环体数据和地址发送单元15发送的取指地址(pc_fetch),计算并获得下一周期指令的取指地址再发送给地址发送模块15。

[0028] 图2B是本发明另一个实施例超长指令字的处理器结构示意图。如图2B所示,处理器的循环单元10进一步包括循环体数据计算模块11、循环计数模块12、存储模块13和取指地址计算模块14。

[0029] 循环体数据计算模块11与存储模块13和指令译码单元18连接,接收来自指令译码单元18发送的循环参数,上述循环参数包括循环体中指令数目(Uimmm)和循环次数 (uimmn)。此外循环体数据计算模块11还接收译码单元18当前正在译码的指令执行包中的指令数目(N)、正在译码的指令执行包首指令地址(PC_CUrrent)、LP指令标志(IpJable), 此外循环体数据计算模块11还接收存储模块13的信号counter [0]寄存器的值。循环体数据计算模块11通过上述接收的循环参数信息生成循环使能信号(l00p_en),当LP指令标志 (IpJable)有效时,置循环使能信号有效,当从存储模块13中读出的COimter[0]寄存器为0时,说明循环(对于嵌套循环而言指最外层循环)执行完毕,置循环使能信号无效,其余情况下循环使能信号保持不变。循环体数据包括循环起地址、循环结束地址和循环次数, 其中根据公式:lp_pc = PC_current+(N-l)*(Linst/St印),计算出LP指令的地址(lp_pc);根据公式:lpC_Start = lp_pc+(LinstAt印),计算出循环体的起始地址(lpC_Start);根据公式:lpc_end = lp_pc+(ui_+l)* (LinstAt印),计算出循环体的结束地址(lpc_end);根据公式counter = uimmn,得到循环次数(counter)。循环体数据计算模块11将得到的循环体数据和循环使能信号和LP指令标志一起发送给存储模块13,同时将循环使能信号发送给循环计算模块12。

[0030] 存储模块13连接循环体数据计算模块11和取指地址计算模块14,存储由循环体数据计算模块11发送的循环体数据:循环体的起始地址、循环体的结束地址和循环体的循环次数。

[0031] 存储模块13选用FIL0(First In Last Out,先进后出)存储模块,通过该存储模块可支持多层嵌套循环,设支持的嵌套循环层数为N,那么存储模块的深度就必须为N。以 N = 4为例,如表一所示,支持4层嵌套循环。存储模块内含3组寄存器,分别为lpC_start 寄存器、lpc_end寄存器和counter寄存器,分别用于存储循环体起始地址、循环体结束地址和循环体循环次数。

[0032]表一:

[0033]

[0034] 存储模块13的数据读出和写入分别受到读指针rp和写指针wp的控制,读指针rp 指向当前循环应该读取的存储模块的位置,代表了目前正在执行的循环体所在的循环嵌套层次,写指针wp指向下一次遇到循环标志lp_label时,应该写入的存储模块的位置,代表下一个循环嵌套的层次。读指针和写指针的数值是0至N-I。本发明通过修改读指针的方法实现存储内容清除或无效的功能。

[0035] 当存储模块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,超出了处理器所能支持的范围,属于例外情况,这种情况应该由编译器根据处理器的参数来避免,不应该出现。这种情况下设定读写指针都保持不变。

[0036] 如果当前嵌套层的循环执行完毕,即当前读指针所指的循环次数寄存器counter [rp]为0,那么正常情况下,读写指针应该减1。但下述情况除外:(1)如果当前写指针为0,说明还未有循环参数写入存储体,因而读写指针应该保持为0 ;(幻如果当前读指针为N-1,表明正在执行的是该处理器所能支持的最大的第N层嵌套循环,因而当第N层嵌套循环执行完毕时,等待下一次写入的是第N层嵌套循环,所以写指针保持不变,读指针减 1 ;(3)如果当前读指针为0,说明正在执行的是第1层嵌套循环,即循环的最外层,那么当第 1层嵌套循环执行完毕时,说明当前循环执行完毕,下一次写入的将是一个新的循环,因而读指针应该保持为0,写指针减1。

[0037] 在一个例子中,存储模块I3的内容写入控制代码如下所示:

[0038]

always @(posedge elk or negedge rst) begin if(!rst) begin

[0039]

LPC_START[0] <= 32'bO; LPC_END[0] <= 32'bO; COUNTERfO] <= 32'bO; LPClSTART[l] <= 32'bO; LPC=ENE^lj <= 32'bO; C0UNTER[1] <= 32'bO; LPClSTART[2] <= 32'bO; LPClEND[2] <= 32'bO; C0UNTER[2] <= 32'bO; LPClSTART[3] <= 32'bO; LPClEND[3] <= 32'bO; C0UNTER[3] <= 32'bO; end

else if(lp—label) //write the Ip parameter in the LP FIFO// begin

LPC—START [wp] <= lp—start; LPC END [wp] <= lp—end; COUNTER [wp] <= lp—counter;

end

else //change the COUNTER[wp]

COUNTER [wp] <= counter—next;

end

[0040] 在上述代码中,当复位信号rst信号有效时,将存储模块13中的内容复位为全0。 当LP指令标志(IpJable)信号有效时,则将循环体数据计算模块11发过来的循环起始地址、循环结束地址和循环次数分别写入到写指针wp指向的寄存器lpC_start[Wp]、寄存器 lpc_end[wp]和寄存器counter [wp]中,否则将循环计数模块12发送的下一个周期的循环次数(COimter_next)信号根据写指针写入到相应的循环次数寄存器counter [wp]中。

[0041] 在一个例子中,存储模块13的内容读出控制代码如下所示:

[0042]always @(loop—en,LPC—START,LPC—END,COUNTER,rp) begin

if(loop_en) begin

lpc—start—now = LPC_START[rp]; lpcendnow = LPC—END[rp]; counter—now = COUNTER[rp];

end else begin

lpc—start—now = 32'bO; lpcendnow = 32'bO; counter—now = 32'bO;

end

end

[0043] 在上述代码中,当来自循环体数据计算模块11的循环使能信号loop_en有效时,根据读指针rp将存储模块13中的lpC_Start[rp]寄存器,lpc_end[rp]寄存器, counter [rp]寄存器中的信息读出,信号名分别为当前循环的循环次数(C0imter_n0W)、 当前循环的循环体起始地址(lpC_Start_n0W)和当前循环的循环体结束地址(lpC_end_ now),否则输出信号“32' bO”,上述代码中“32' bO”代表32比特都为O。

[0044] 取指地址计算模块14连接存储模块13和循环计数模块12,从存储模块13读出当前循环的循环次数(c0imter_n0W)、当前循环的循环体起始地址(lpC_Start_n0W)和当前循环的循环体结束地址(lpC_end_n0W),并且根据以上参数和当前取指地址计算出下一取指地址,下一取指地址=当前取指地址(pC_fetch) +指令包的宽度/寻址单元位宽(印)。 判断下一取指地址是否大于当前循环结束地址,如果不是,说明当前循环体尚未执行完毕, 则下一取指地址作为当前取指地址(pC_Send);如果是,说明当前循环体执行完毕,产生本次循环完成标志信号(lo0pS_end),并发送给循环计数模块12,进而判断当前循环次数是否是0,若不是0,则说明当前循环尚未执行完毕,应从循环体开始处再进行取指,将当前循环起始地址作为当前取指地址;若是0,说明当前循环执行完毕,产生循环结束标志信号 (l00p_end),程序应该顺序往下执行,则将下一取指地址作为当前取指地址。

[0045] 循环计数模块12用于循环计数器的计算,分别与循环体数据计算模块11、存储模块13和取指地址计算模块14连接,从存储模块13中读取当前循环的循环次数(Coimter_ now)信号,并接收来自取指地址计算模块14的循环结束信号和来自循环体数据计算模块 11的循环使能信号。循环计数模块12通过上述信号产生下一个周期的循环次数(COimter_ next)信号,如果循环使能信号有效,并且本次循环完成标志信号(l00pS_end)有效,更新下一个周期的循环次数(COimter_next)为当前循环次数(C0imter_n0W)减1,并将下一个周期的循环次数(COimter_next)信号发送给存储模块13,用于更新当前循环次数 counter [rp]寄存器。

[0046] 图3是本发明实施例超长指令字处理器的循环处理方法流程图。该方法的步骤包括 301-311 :

[0047] 在步骤301,获取循环标志指令。

[0048] 循环标志指令带有两个操作数,用于存储循环参数,该循环参数包括循环体中指

10令数目和循环次数,其中第一操作数(ui_)用于存储循环体中的指令数目,循环体中指令数目是由链接器根据循环标志指令包的首地址和循环标志指令的地址相减再除以一条指令所占地址的步长再减1得到;第二操作数(uimmn)用于存储循环体的循环次数。处理器在指令取指阶段根据当前取指地址从指令存储器中获取指令,并对指令进行译码操作, 当译码到循环标志指令后,处理器获取该循环标志指令。

[0049] 在步骤302,提取循环标志指令携带的循环参数。

[0050] 当处理器获取循环标志指令后,通过循环标志指令的第一个操作数(ui_)提取循环体中指令数目,通过第二操作数(uimmn)提取循环次数。

[0051] 在步骤303,根据循环标志指令的地址和循环参数得到并保存循环体数据,并根据循环标志指令的地址得到当前取指地址。

[0052] 处理器根据公式:lp_pc = PC_current+ (N-I) * (Linst/St印)得到循环标志指令的地址,其中lp_pc代表循环标志指令地址、PC_current代表正在译码的指令执行包首指令地址、N代表当前正在译码的指令执行包中的指令数目、Linsn代表指令编码长度、Step代表处理器的最小寻址单元位宽。

[0053] 处理器根据得到的循环标志指令的地址和在步骤302提取的循环参数得到并保存循环体数据,该循环体数据包括循环起始地址、循环结束地址和循环次数,其中循环起始地址根据公式:lpc_Start = lp_pc+(Linst/Step)得到,lpc_start代表循环起始地址;循环结束地址根据公式:lpc_end = lp_pc+(ui_+l)*(Linst/St印)得到,lpc_end代表循环结束地址,公式中(ui_+l)代表循环体中指令数目+1 ;循环次数是循环标志指令第二操作数(uimmn)携带的循环次数。

[0054] 在步骤304,将保存的循环体数据作为当前循环体数据,得到当前循环起始地址、 当前循环结束地址和当前循环次数。

[0055] 优选地,处理器按照先进后出的顺序将保存的循环体数据作为当前循环体数据, 得到当前循环起始地址、当前循环结束地址和当前循环次数。

[0056] 在步骤305,处理器根据当前取指地址从指令存储器中获取指令并执行相应的操作。

[0057] 在步骤306,处理器根据当前取指地址计算出下一取指地址。

[0058] 在步骤307,处理器将下一取指地址与当前循环结束地址进行比较,如果下一取指地址不大于当前循环结束地址,说明当前循环体尚未执行完毕,流程进入步骤308 ;如果下一取指地址大于当前循环结束地址,说明当前循环体执行完毕,产生本次循环完成标志信号,流程进入步骤309。

[0059] 在步骤308,处理器将下一取指地址作为当前取指地址,流程转而执行步骤305。

[0060] 在步骤309,处理器进一步判断当前循环次数是否是0,如果当前循环次数不是0, 则说明当前循环尚未执行完毕,流程进入步骤310;如果循环次数是0,说明当前循环执行完毕,产生循环结束标志信号,流程转而进入步骤308。

[0061] 在步骤310,处理器更新当前循环次数为当前循环次数减1。

[0062] 在步骤311,处理器将当前循环起始地址作为当前取指地址,流程转而进入步骤 305。

[0063] 在本发明实施例中,处理器的循环处理方法进一步包括:当下一取指地址大于当前循环结束地址并且当前的循环次数是0时,处理器清除保存的对应循环体数据,如果处理器还有保存的循环体数据时,则流程跳转至步骤304继续执行,否则循环处理结束。

[0064] 本发明实施例循环处理方法的循环执行完全由硬件实现,无需通过指令实现循环计数器的赋值和修改,能够实现超长指令字的处理器循环零开销,可以大大提高超长指令字处理器的性能。

[0065] 显而易见,在不偏离本发明的真实精神和范围的前提下,在此描述的本发明可以有许多变化。因此,所有对于本领域技术人员来说显而易见的改变,都应包括在本权利要求书所涵盖的范围之内。本发明所要求保护的范围仅由所述的权利要求书进行限定。

Patent Citations
Cited PatentFiling datePublication dateApplicantTitle
CN1717654A *31 Oct 20034 Jan 2006皇家飞利浦电子股份有限公司数据处理器的循环控制电路
CN101169710A *26 Oct 200630 Apr 2008中国科学院计算技术研究所对状态寄存器进行重命名的方法和使用该方法的处理器
CN101256504A *17 Mar 20083 Sep 2008中国科学院计算技术研究所一种支持x86虚拟机的risc处理器装置及方法
CN101894013A *16 Jul 201024 Nov 2010中国科学院计算技术研究所处理器内指令级流水线控制方法及其系统
Referenced by
Citing PatentFiling datePublication dateApplicantTitle
CN103336681A *3 Jul 20132 Oct 2013同济大学针对采用变长指令集的流水线结构处理器的取指方法
CN103336681B *3 Jul 201325 Nov 2015同济大学针对采用变长指令集的流水线结构处理器的取指方法
CN104471549B *28 Jun 201216 Jun 2017三菱电机株式会社读取请求处理装置
Classifications
International ClassificationG06F9/30
Legal Events
DateCodeEventDescription
20 Jun 2012C06Publication
18 Jul 2012C10Entry into substantive examination
8 Oct 2014C14Grant of patent or utility model