用于处理器指令缓冲与循环缓冲的装置及其操作方法_2

文档序号:9489266阅读:来源:国知局
[0]写入AB[1], IB[1]写入ΙΒ[0],IB[n]写入IB[n-l]。同时,只有当ΑΒ[0]整行读取完成后,才执行上述 操作。循环缓冲器的使能或禁用由lb_en信号控制,该信号例如可由专用的循环处理器单 元产生。循环缓冲器未使能时,识别执行包时,读取指令包的位置始终为AB。当循环缓冲器 使能后,即lb_en信号有效后,从AB中读取执行包的同时,将执行包的地址与循环体的首执 行包的首指令地址进行比较,若相等,则同时将该执行包依次写入LB中。直到从AB读取的 执行包的地址等于循环体的尾执行包的首指令地址时,将循环体尾执行包也写入LB中,此 时循环体指令在执行第一遍的同时,也完成了循环体在LB中的加载。那么,从执行第二遍 循环体开始,就从LB中依次读取循环体的指令。此时,IB和AB可以关闭,停止工作,以降 低功耗;或者,也可以继续向存储器发起循环体外的后续指令读请求,并依次写入IB中,直 到IB满时,再关闭IB和AB,节省功耗。LB中需要设定读写指针,并在装载循环体时,记录 循环体的首/尾执行包的首地址在LB中对应的单元编号,设标号分别为ltn_rp和lbn_rp, 其中η可以为0,1,2等数字,用于分别标识各个循环体的首/尾执行包的首地址在LB中对 应的单元编号,以支持嵌套循环。从LB中读取循环体时,当读指针等于lbn_rp且同时该 循环体对应的循环次数lcn大于1时,说明循环体还需要执行多次,此时,切换读指针到循 环体首执行包首指令的编号处,开始读取新一轮的循环体。如此循环执行,直到读指针等于 lbn_rp且lcn也等于1时,说明循环体执行到最后一遍,在该最后一遍执行之后应当继续执 行循环体外的后续指令。此时,清空循环缓冲器(若是单层循环,则清空整个循环器;若是 嵌套循环,则需要等待外层循环执行完毕后,再清空整个循环缓冲器),禁止循环缓冲器使 能信号lb_en,并切换read_buffer,从AB中继续读取后续的指令。对IB、AB、LB和MUX2_1 的各种读写和控制操作均由其所在的模块执行。
[0030] 图2是根据本发明实施例的指令缓冲器与循环缓冲器执行流程图,适用于仅单层 循环能放入循环缓冲器的情况,即循环缓冲器中存储的循环体不存在循环嵌套。该方法的 步骤包括201-212 :
[0031] 在步骤201 :从对齐缓冲器中读取指令,发送到译码模块。
[0032] 步骤202:判断循环缓冲器是否开启,若未开启,返回步骤201,若开启,进入步骤 203〇
[0033] 步骤203:判断当前指令包到执行包的首地址是否等于循环体首执行包的首地 址,若是,则需要在读取循环体的同时,将循环体写入到循环缓冲器中,则进入步骤204 ;否 贝丨J,返回步骤201。
[0034] 步骤204:加载循环体:从对齐缓冲器中读取执行包的同时,将循环体指令也写入 到循环缓冲器中。并记录循环体首执行包首指令在循环缓冲器中存入的位置。
[0035] 步骤205:加载循环体的过程中,判断当前指令包到执行包的首地址是否等于循 环体尾执行包的首地址,若是,说明执行到循环体的最后一个执行包了,进入步骤206,否 贝丨J,返回步骤204。
[0036] 步骤206:加载循环体尾执行包。从对齐缓冲器中读取执行包的同时,将循环体尾 执行包也写入到循环缓冲器中。并记录循环体尾执行包首指令在循环缓冲器中存入的位 置,切换缓冲器区读取位置标记到循环缓冲器。然后进入步骤207。
[0037] 步骤207:从循环缓冲器中读取按序读取循环体的执行包。
[0038] 步骤208:判断当前读取执行包的循环缓冲器读指针位置是否等于步骤206中记 录的循环体尾执行包首指令在循环缓冲器中存入的位置,若是,进入步骤209,否则,循环缓 冲器读指针根据执行包的长度进行自动累加,返回步骤207。
[0039] 步骤209:判断循环体对应的循环次数是否大于1,若是,说明循环体还需要反复 执行,进入步骤210 ;否则,说明最后一遍循环体执行完毕,进入步骤211。
[0040] 步骤210 :切换循环缓冲器的读指针到步骤204中记录的循环体首执行包首指令 在循环缓冲器中存入的位置,准备读取循环体的首执行包。同时控制循环次数减1。然后, 进入步骤207。
[0041] 步骤211 :清空循环缓冲器的内容,并进入步骤201。
[0042] 指令缓冲器与循环缓冲器的读写控制等采用状态机的方法进行控制,图3是本发 明一实施例支持双层循环的循环缓冲器控制逻辑的状态机转换图。该状态机转换图中各状 态的含义及选择读出指令的缓冲器区域如表1所示。设支持的两组循环分别叫L00P0和 L00P1,当两个循环体的结束地址相等时,L00P1的优先级更高。下表1到表10中,IF3流水 级代表从指令存储区读回指令包,写回指令缓冲器的流水级。bcs代表状态机的当前状态, bns代表状态机的下一周期将要进入的状态。fpc代表当前读出并发送到译码级的执行包 的首指令地址。
[0043] 若当前状态为AB_READ,状态改变列表的条件及其示意图如表2所示;
[0044] 若当前状态为S_LB_L0AD,状态改变列表的条件及其示意图如表3所示;
[0045] 若当前状态为S_LB_READ,状态改变列表的条件及其示意图如表4所示;
[0046] 若当前状态为LB_FLUSH,状态改变列表的条件及其示意图如表5所示;
[0047] 若当前状态为DI_LB_L0AD,状态改变列表的条件及其示意图如表6所示;
[0048] 若当前状态为DI_LB_READ,状态改变列表的条件及其示意图如表7所示;
[0049] 若当前状态为D0_LB_L0AD,状态改变列表的条件及其示意图如表8所示;
[0050] 若当前状态为D_LB_READ,状态改变列表的条件及其示意图如表9所示;
[0051] 若当前状态为DE_LB_READ,状态改变列表的条件及其示意图如表10所示;
[0052] 表1循环缓冲器状态机的状态说明
[0053]






[0077]图4是根据本发明第二实施例的用于处理器指令缓冲与循环缓冲的装置的结 构示意图。该装置包括:指令缓冲器(InstructionBuffer,IB)401,循环缓冲器(Loop Buffer,LB)402,对齐缓冲器(AlignBuffer,AB)403,选择器(MUX2_1)404。IB和LB的输 出端分别连接到MUX2_1的两个输入端,MUX2_1的输出端连接到AB的输入端,AB的输出端 连接到LB的输入端。其中,IB、AB和LB均包括多个缓冲行,其中每个缓冲行的位宽(即, 能存放的比特数)为宽度,缓冲行的个数为深度。IB、LB深度可调节,此处分别设为正整数 m和正整数η。AB的深度一般为2,用于指令对齐,即从指令包中根据指令编码的特点读取 执行包,执行包可能为1条或多条指令,一个执行包有可能跨越2个指令包,因而设置ΑΒ的 深度为2。IB、ΑΒ和LB的缓冲器区的宽度(即其缓冲行的位宽)为指令包的宽度,标识为 正整数b。根据本发明的实施例,处理器的单条指令的编码为16位或32位,并且支持多发 射,允许64位的执行包,因而,对应这款处理器,IB、AB和LB的宽度均为64位。从AB中读 出执行包并送到处理器中的译码模块。处理器启动时,默认循环缓冲器关闭,从指令存储 器中读取返回的指令存入IB或AB中,当IB、AB都为空时,默认存入AB中,当AB满后,依次 再存入IB中。在对齐缓冲器和指令缓冲器中均为从低编号缓冲行向高编号缓冲行存储。AB 中的指令读取后,将IB中的缓冲行发送到AB中。根据本发明的实施例,在发送缓冲行时, 从高编号缓冲行向低编号缓冲行依次传输,每次"下沉"一个缓冲行,如AB[1]写入ΑΒ[0], ΙΒ[0]写入AB[1],IB[1]写入ΙΒ[0],IB[n]写入IB[n-l]。同时,只有当ΑΒ[0]整行读取 完成后,才执行上述操作。当循环缓冲器使能后,从AB中读取执行包的同时,需要将执行包 的地址与循环体的首执行包的首指令地址进行比较,若相等,则同时将该执行包所在的指 令包,即AB中的一行,依次写入LB的行中。直到从AB读取的执行包的地址等于循环体的 尾执行包的首指令地址时,将循环体尾执行包所在的指令包行也写入LB的行中。循环体指 令在执行第一遍的同时,也完成了循环体在LB中的加载。此时,IB可以关闭,停止工作,以 降低功耗;或者,也可以继续向存储器发起循环体外的后续指令读请求,并依次写入IB中, 直到IB满时,再关闭IB以节省功耗。接下来,进行循环体从循环缓冲器中的读取:此时LB 中的指令需要依次写入AB中,在AB中进行执行包的读取,AB中每读取完一行的同时,也将 读出的缓冲行写入LB中最后一缓冲行的位置,同时LB中原有缓冲行依次向下前进一行,如 LB[1]的内容写入LB[0] ;LB[0]的内容写入AB[1],AB[1]的内容写入ΑΒ[0],即将LB与AB 首尾相接,形成一个循环的缓冲器区。当从AB中读出的执行包地址等于循环体尾执行包的 首指令地址时,若
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1