用于处理器指令缓冲与循环缓冲的装置及其操作方法
【技术领域】
[0001] 本发明涉及处理器设计领域,尤其涉及一种用于处理器指令缓冲与循环缓冲的装 置及该装置的操作方法。
【背景技术】
[0002] 现代微处理器一般采用多级流水的方式执行指令。典型的超长指令字结构的处理 器流水线一般包括取值、拆包、译码、执行、写回几部分。从指令高速缓冲存储器(Cache)中 取回指令后,一般会存入指令缓冲器中。通过从指令缓冲器读取指令,进行指令的拆包、译 码等操作。指令Cache的访问频率很高,消耗的功耗也很大。现代微处理器越来越多地应 用到电池供电的设备中,因而,处理器的低功耗设计也越来越重要。
[0003] 在嵌入式应用程序中,图像处理、视频编解码等数据密集型应用占比很高。在这些 应用的核心代码中,循环所占比重也很大。因而,若处理器在执行循环时,能够将循环指令 保存到处理器内核之中,进而可以关闭取指令单元,并减少对指令Cache的访问次数,就能 降低取指令的功耗。
[0004] 现有技术中,一般采用在处理器内部添加循环缓冲器的方法来保存循环体,以降 低循环执行时对指令Cache的访问次数,进而达到降低功耗的目的。
[0005] 现有的循环缓冲器技术解决方案中,大多数都只能存储单个的循环体,不支持嵌 套循环,也没有对处理器中原有指令缓冲器和新增的循环缓冲器如何交替工作提出对应的 解决方案。
[0006] 专利CN201310100176.X《一种循环缓冲装置以及循环缓冲方法》中,重点描述了 如何用硬件实现循环体的识别,然后加载并读取循环体。但其也存在如下缺点:
[0007] 1.循环缓冲器中只能存放单个的循环体,不支持嵌套循环。
[0008] 2.没有说明指令缓冲器与循环缓冲器的切换方法。
[0009] 3.没有提出对变长指令,或超长指令字的处理器的支持方法。
【发明内容】
[0010] 为了降低循环执行时对指令Cache的访问次数,从而降低处理器的取指令功耗, 本发明改进了循环缓冲器的设计方法,提供了一种适用于VLIW:(VeryLongInstruction Word,超长指令字)处理器或部分变长指令编码(即指令编码的长度为指令寻址宽度的整 数倍)处理器的循环缓冲器设计方法。
[0011] 为实现上述目的,本发明的一个方面提供了一种用于处理器指令缓冲与循环缓冲 的装置,包括:指令缓冲器IB、对齐缓冲器AB、循环缓冲器LB、以及多路选择器MUX2_1。并 且提供了多种实施方式。其中,指令缓冲器与对齐缓冲器相连,对齐缓冲器与循环缓冲器相 连,对齐缓冲器和循环缓冲器都与多路选择器相连。
[0012] 处理器从指令存储器中取回来的指令包可以直接存入对齐缓冲器或指令缓冲器 中。处理器启动时,从对齐缓冲器中读取指令,根据指令编码的特点对指令包进行拆包,得 到执行包。执行过程中,若循环缓冲器使能(lb_en)有效,进而判断循环缓冲器的状态,若 还未加载循环体,则将执行包的地址与循环体的首尾地址进行比较,若大于等于首地址,小 于等于尾地址,则说明当前拆包的指令为循环体内的指令,则将其从对齐缓冲器读出的同 时,也写入循环缓冲器中。直到执行包地址等于循环体尾地址,则说明循环体加载完成。循 环体加载完成后,切换读缓冲器区标志(reacLbuffer),从循环缓冲器中读取指令,直到循 环体执行完毕,再切换读缓冲器区标志,重新从对齐缓冲器中读取指令。
[0013] 本发明另一方面提供了一种操作操作上述用于处理器指令缓冲与循环缓冲的装 置的方法,包括:(1)从对齐缓冲器中读取指令;(2)检测循环缓冲器是否开启,若没有开 启,继续从对齐缓冲器中读取下一条指令;若开启了,进一步判断当前拆包的指令地址是否 等于循环体的首执行包的指令地址,若否,则继续从对齐缓冲器中读取下一条指令,若是, 开启循环缓冲器加载模式;(3)循环缓冲器加载:从对齐缓冲器中读取循环体指令送入后 续译码模块的同时,将读取的指令同时也写入循环缓冲器中;(4)判断循环体加载是否完 成:若当前拆包指令的地址等于循环体尾执行包的地址,若是,循环体加载完毕,否则,继续 循环缓冲器的加载。
[0014] 根据本发明的实施例,该方法还可以包括:(5)从循环缓冲器中读取指令,送到 后续的译码模块;以及(6)判断循环体是否执行完毕,如果循环体执行完毕,则清空循环缓 冲器,切换读取指令的位置到对齐缓冲器中。具体地,步骤(6)可以包括:首先判断循环次 数是否大于1,若是,进一步判断当前从循环缓冲器中读取的拆包指令地址是否等于循环体 尾执行包地址,若不是,则从循环缓冲器中继续按顺序读取后续指令;否则,切换循环缓冲 器的读指针,读取循环体的首指令,并将循环次数减1。然后,再次通过循环次数判断循环是 否执行完毕:若循环次数等于1,进一步判断当前从循环缓冲器中读取的拆包指令地址是 否等于循环体尾执行包地址,若不是,则从循环缓冲器中继续按顺序读取后续指令,否则, 说明最后一遍循环体执行到最后一个执行包,从循环缓冲器中读取循环体数据完毕,清空 循环缓冲器,切换读取指令的位置到对齐缓冲器中。
[0015] 根据本发明的指令缓冲器与循环缓冲器的装置及其对循环缓冲器的处理方法,能 够在指令拆包的过程中识别循环体指令,并且装载进入循环缓冲器中,在循环缓冲器装载 完毕后,从循环缓冲器中读取循环体指令并执行,通过循环缓冲器指针的变换实现循环体 指令的反复执行。当循环体执行完毕后,再次从对齐缓冲器中读取指令。本发明能够有效 的实现超长指令字处理器的循环体加载,执行等过程,能有效减少循环体执行时,访问指令 Cache的次数,从而大大降低处理器的取指令功耗。
【附图说明】
[0016]图1是根据本发明第一实施例的用于处理器指令缓冲与循环缓冲的装置的结构 示意图;
[0017] 图2是根据本发明实施例的用于处理器指令缓冲与循环缓冲的装置在执行普通 指令与循环指令时的切换流程图;
[0018]图3是根据本发明实施例支持双层嵌套循环的循环缓冲器控制逻辑的状态机转 换图;
[0019]图4是根据本发明第二实施例的用于处理器指令缓冲与循环缓冲的装置的结构 示意图;
[0020] 图5是根据本发明第三实施例的用于处理器指令缓冲与循环缓冲的装置的结构 不意图;以及
[0021] 图6是根据本发明第四实施例的用于处理器指令缓冲与循环缓冲的装置的结构 示意图。
[0022] 附图标记说明:
[0023]insn_pak:输入指令包
[0024] lb_en :循环缓冲器使能信号
[0025] read_buffer :多路选择器控制信号
[0026] exe_pak :输出指令包
[0027]rst_n:复位信号,低电平有效
【具体实施方式】
[0028] 为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照 附图,对本发明做进一步详细说明。
[0029]图1是根据本发明第一实施例的用于处理器指令缓冲与循环缓冲的装置的结构 示意图。如图1所示,该装置包括:指令缓冲器(InstructionBuffer,IB) 101、对齐缓冲器 (AlignBuffer,AB) 102、循环缓冲器(LoopBuffer,LB) 103、以及多路选择器(MUX2_1) 104。 IB的输出端连接到AB的输入端,AB的输出端连接到LB的输入端,AB的输出端和LB的输 出端分别连接到MUX2_1的两个输入端。其中,IB和AB均包括多个缓冲行,其中每个缓冲行 的位宽(即,能存放的比特数)为宽度,缓冲行的个数为深度。IB的深度可调节,此处设为 正整数m。AB的深度一般为2,用于指令对齐。当从指令包中根据指令编码的特点读取执行 包时,执行包可能为1条或多条指令,一个执行包有可能跨越2个指令包,因而设置AB的深 度为2。IB和AB的缓冲区的宽度(即其缓冲行的位宽)为指令包的宽度(即指令包所包 含的比特数),标识为正整数b。例如,根据本发明的实施例,处理器的单条指令的编码为16 位或32位,并且支持多发射,取指令宽度为64位,指令包的宽度也为64位,同时,允许16, 32或64位的执行包,因而,对应这款处理器,AB和IB的宽度等于指令包的宽度,即64位。 LB采用扁平化的结构,以最小指令宽度为单位(标识为正整数a),长度可调节,设总长度为 正整数η。对应上述处理器,LB的单位长度为16位,长度为n。MUX2_1为1个2选1的多 路选择器,根据读缓冲区标志信号read_buffer选择从AB或LB中读出执行包,送到处理器 中的译码模块。处理器启动时,默认循环缓冲器关闭,从指令存储器中读取返回的指令存入 IB或AB中,当IB和AB都为空时,默认存入AB中,当AB满后,依次再存入IB中。根据本发 明的实施例,在AB和IB中均为从低编号缓冲行向高编号缓冲行存储。AB中的指令读取后, 将IB中的缓冲行发送到AB中。根据本发明的实施例,在发送缓冲行时,从高编号缓冲行向 低编号缓冲行依次传输,每次"下沉"一个缓冲行,如AB[1]写入ΑΒ[0],ΙΒ