一种支持自动纠错功能的返回地址栈实现方法

文档序号:6582807阅读:165来源:国知局
专利名称:一种支持自动纠错功能的返回地址栈实现方法
技术领域
本发明属于嵌入式处理器系统领域。更具体地说,涉及一种函数返回地址栈实现
方法。
背景技术
嵌入式处理器发展至今,已经在多媒体编解码、通信技术和超大规模集成电路设 计领域展现出了巨大的应用价值。 一直以来,嵌入式处理器对于功耗、面积、成本、性能等多 项指标都有着严格的设计要求。随着应用领域的不断扩大和应用要求的不断提高,对于嵌 入式处理器的处理性能提出了更高的要求。 在流水线技术广泛应用于处理器设计的今天,如何充分发挥流水线的作用成为设 计中需要考虑的重点问题。分支指令对于流水线技术的运用带来的障碍使得分支预测技术 在处理器的设计中变得越来越重要,为实现高性能,精确的分支预测成为关键。分支预测失 效将浪费大量的时钟周期,无法发挥处理器乱序执行的效能,从而影响处理器性能的进一
步提咼o 函数调用和函数返回作为重要的分支指令,在处理器的指令集中占有相对重要的 地位,能否在尽可能少的等待时间之内完成函数返回指令正确目标地址的获取,成为了一 种重要的分支预测技术。当前大多数高性能的嵌入式处理器都采用了返回地址栈为函数返 回指令提供返回地址,而返回地址栈的维护方法在不同的嵌入式处理器中各不相同。在现 有的常见嵌入式处理器架构中,返回地址栈主要采用保存当前栈顶指针、数据或保存全栈 的修复方法。前者需要对每一条分支指令保存一个栈顶指针的拷贝,预测精度也不高;后者 虽然可以获得百分之百的预测准确率,但硬件开销过大。

发明内容
为了克服已有的嵌入式处理器的函数返回地址栈实现方法的函数返回的预测精 度较低、限制处理器的性能的不足,本发明提供一种有效提高函数返回的预测精度、提升处 理器的性能的支持自动纠错功能的返回地址栈实现方法。
本发明解决其技术问题所采用的技术方案是 —种支持自动纠错功能的返回地址栈实现方法,所述的返回地址栈实现方法包括 以下步骤 1)在指令预取过程中对函数调用指令和函数返回指令进行预译码,并根据预译码 结果进行函数返回地址信息的入栈和出栈操作; 2)设置栈顶指针标识指令预译码时返回地址栈的当前操作的位置; 3)采用退休指针记录函数调用和函数返回指令退休后的返回地址栈状态,在流水 线清空操作时,利用退休指针对栈顶指针的自动恢复。 作为优选的一种方案所述的返回地址栈实现方法还包括步骤4)采用检验指针 记录后级流水线确认预测后的返回地址栈状态,在分支跳转预测出错时,利用检验指针对栈顶指针的自动恢复。 作为优选的另一种方案在所述步骤1)中,在指令预取过程中设置返回地址栈,并对预取指令进行动态预译码,若当前指令为函数调用指令,将函数的返回地址压入返回地址栈;若当前指令为函数返回指令,从返回地址栈中获得返回地址,跳入返回函数开始预取指令。 进一步,在所述步骤2)中,所述返回地址栈为循环堆栈结构,栈顶指针指示返回地址栈当前写入和读取的位置,栈顶指针在有效范围内循环更新,在指令预取的同时控制栈顶指针的更新和返回地址栈对应位置的入栈和出栈操作。 更进一步,在所述步骤3)中,程序遇到异常时产生流水线清空操作,流水线的各种状态恢复为指令退休时的状态,利用退休指针恢复返回地址栈的栈顶指针,返回地址栈重新进入正常工作状态。 再进一步,在所述步骤4)中,后级流水线在函数调用指令和函数返回指令执行时即对返回地址预测进行检验。 当流水线执行过程中出现分支预测错误,将返回地址栈栈顶指针更新为检验指针,恢复操作无需等待当前分支预测错误指令退休时进行,返回地址栈提前进入正常工作状态。 本发明的技术构思为利用一组指针寄存器的协同工作,实现了在流水线出现清空操作或其他分支预测出现错误时的自动纠错。该单元的本质是在嵌入式处理器中通过简单的扩展,保持其控制能力的同时,确保了函数调用和函数返回指令接近百分之百的预测精度。 支持自动纠错功能的返回地址栈是一个为通用嵌入式处理器设计的加速函数调用和函数返回指令执行的硬件执行单元。其仅仅是一个执行单元,是复杂嵌入式处理器的有效补充。 因此,利用较小的硬件代价对返回地址栈进行必要的修复,能够获得正确的返回地址,即提高函数返回指令的预测精度,就显得尤为重要。 本发明的有益效果主要表现在在实现对函数调用和函数返回指令的自动识别的基础上,通过相应的入栈和出栈操作,达到对函数返回指令加速的目的;通过退休指针、检验指针和栈顶指针的协同工作,实现返回地址栈在流水线进行清空操作和分支预测出现错误时的自动纠错功能。该方法应用于嵌入式处理器中,有效地提高了处理器取指单元的取指效率,从而提升整个嵌入式处理器的处理性能。


图1是返回地址栈指针寄存器组的硬件原理 图2是栈顶指针自动纠错的硬件原理 图3是返回地址栈入栈出栈操作的硬件原理图。
具体实施例方式
下面结合附图对本发明作进一步描述。 参照图1-图3,一种支持自动纠错功能的返回地址栈实现方法,所述的返回地址栈实现方法包括以下步骤 1)在指令预取过程中对函数调用指令和函数返回指令进行预译码,并根据预译码 结果进行函数返回地址信息的入栈和出栈操作; 2)设置栈顶指针标识指令预译码时返回地址栈的当前操作的位置; 3)采用退休指针记录函数调用和函数返回指令退休后的返回地址栈状态,在流水
线清空操作时,利用退休指针对栈顶指针的自动恢复。
所述的返回地址栈实现方法还包括步骤4)采用检验指针记录后级流水线确认
预测后的返回地址栈状态,在分支跳转预测出错时,利用检验指针对栈顶指针的自动恢复。 本实施例的支持自动纠错功能的返回地址栈实现方法特征如下 1)在指令预取过程中对函数调用和函数返回指令进行预译码,并根据预译码结果
进行函数返回地址信息的入栈和出栈操作; 2)设置栈顶指针标识指令预译码时返回地址栈的当前操作的位置; 3)采用退休指针记录函数调用和函数返回指令退休后的返回地址栈状态; 4)采用检验指针记录后级流水线确认预测后的返回地址栈状态; 5)在流水线清空操作时,利用退休指针对栈顶指针的自动恢复; 6)在分支跳转预测出错时,利用检验指针对栈顶指针的自动恢复。 本专利提出的返回地址栈通过循环堆栈结构实现,设计栈顶指针指示返回地址栈
当前操作的位置。在不同的处理器指令集中,都有不同的函数调用和函数返回指令,但都通
过固定的编码格式实现。取指单元对预取指令的动态预译码通过一组比较器组成的译码单
元实现,根据处理器中单发或多发的不同分配逻辑,实现相关地址信息的入栈和出栈操作。 在返回地址栈中存放的是函数返回指令的目标返回地址,也就是函数调用指令下
一条指令对应的PC。根据取指单元动态预译码的结果,若当前指令为函数调用指令,将函数
的返回地址压入返回地址栈;若当前指令为函数返回指令,从返回地址栈中获得返回地址,
跳入返回函数开始预取指令。这一过程如图1所示。 栈顶指针决定了返回地址栈入栈和出栈操作的位置,栈顶指针的维护由取指单元 来完成。取指单元直接根据译码单元对操作数的译码结果,直接完成对栈顶指针的修改,按 序记录函数调用和函数返回指令的序列信息。当译码为函数调用指令,栈顶指针做加一操 作;当译码为函数返回指令,栈顶指针做减一操作。这一过程如图2所示。
在乱序执行的处理器中,指令只有在按序退休后才被确认为正常完成,设计退休 指针记录函数调用和函数返回指令的退休情况,为特殊情况下栈顶指针的自动纠错做准 备。在综合执行单元中,将根据取指单元的译码信息对函数调用、函数返回指令的退休发起 广播,取指单元在获得这一信息后,将修改退休指针以确保准确记录这一过程。函数调用指
令退休,退休指针做加一操作;函数返回指令退休,退休指针做减一操作,这一过程如图2 所示。 分支指令的目标地址预测预取是一种重要的处理器技术,只有在分支预测正确的 情况下,取指单元获得的函数调用和函数返回指令才是有可能被执行的,设计检验指针记 录函数调用和函数返回指令在分支预测正确情况下的指令序列信息,为特殊情况下栈顶指 针的自动纠错做准备。当分支预测出现错误的时候,取指单元将会把错误指令序列下的函 数调用和函数返回指令译码并记录下来,从而导致返回地址栈错误的入栈或出栈操作。在综合执行单元中,将根据取指单元的译码信息对已经确保正确预测的分支后的函数调用和 函数返回指令进行检验,并广播确认信息,取指单元在获得这一信息后,将修改检验指针以 确保准确记录这一过程。函数调用指令被确认,检验指针做加一操作;函数返回指令被确 认,检验指针做减一操作,这一过程如图2所示。 返回地址栈的修复将通过退休指针和检验指针的协同工作来实现,具体的纠错方 案如下 在流水线清空操作时,利用退休指针对栈顶指针自动恢复。当流水线出现清空操 作时,栈顶指针将有可能错误的记录下已被清空的函数调用和函数返回指令,由于退休指 针正确记录了所有函数调用和函数返回指令的退休信息,可用于在这种情况下对栈顶指针 的恢复。当取指单元获得综合执行单元广播的流水线清空操作后,直接将栈顶指针同步到 和退休指针相同的数值,这一过程如图3所示。 在分支跳转预测出错时,利用检验指针对栈顶指针的自动恢复。当分支预测出现 错误时,栈顶指针将有可能错误的记录下不会被执行的函数调用和函数返回指令,由于检 验指针正确记录了在分支预测正确前提下的所有函数调用和函数返回指令的序列信息,可 用于在这种情况下对栈顶指针的恢复。当取指单元获得综合执行单元广播的分支指令预测 错误信息后,直接将栈顶指针同步到和检验指针相同的数值,恢复操作无需等待当前分支 预测错误指令退休时进行,返回地址栈提前进入正常工作状态。这一过程如图3所示。
由于取指单元利用栈顶指针直接完成所有函数调用指令的入栈操作和所有函数 返回指令的出栈操作,因此无论被调用子程序的指令周期长短如何,由于有退休指针、检验 指针对栈顶指针的自动纠错功能的支持,其函数返回指令的目标地址都会被正确的获得。 根据返回地址栈的深度可以确定栈顶指针的宽度,相应的退休指针、检验指针的宽度因为 和栈顶指针相同可以随之确定。
权利要求
一种支持自动纠错功能的返回地址栈实现方法,其特征在于所述的返回地址栈实现方法包括以下步骤1)在指令预取过程中对函数调用指令和函数返回指令进行预译码,并根据预译码结果进行函数返回地址信息的入栈和出栈操作;2)设置栈顶指针标识指令预译码时返回地址栈的当前操作的位置;3)采用退休指针记录函数调用和函数返回指令退休后的返回地址栈状态,在流水线清空操作时,利用退休指针对栈顶指针的自动恢复。
2. 如权利要求1所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在于 所述的返回地址栈实现方法还包括步骤4)采用检验指针记录后级流水线确认预测后的返回地址栈状态,在分支跳转预 测出错时,利用检验指针对栈顶指针的自动恢复。
3. 如权利要求1或2所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在 于在所述步骤1)中,在指令预取过程中设置返回地址栈,并对预取指令进行动态预译码, 若当前指令为函数调用指令,将函数的返回地址压入返回地址栈;若当前指令为函数返回 指令,从返回地址栈中获得返回地址,跳入返回函数开始预取指令。
4. 如权利要求1或2所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在 于在所述步骤2)中,所述返回地址栈为循环堆栈结构,栈顶指针指示返回地址栈当前写 入和读取的位置,栈顶指针在有效范围内循环更新,在指令预取的同时控制栈顶指针的更 新和返回地址栈对应位置的入栈和出栈操作。
5. 如权利要求3所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在于 在所述步骤2)中,所述返回地址栈为循环堆栈结构,栈顶指针指示返回地址栈当前写入和 读取的位置,栈顶指针在有效范围内循环更新,在指令预取的同时控制栈顶指针的更新和 返回地址栈对应位置的入栈和出栈操作。
6. 如权利要求1或2所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在于在所述步骤3)中,程序遇到异常时产生流水线清空操作,流水线的各种状态恢复为指令退休时的状态,利用退休指针恢复返回地址栈的栈顶指针,返回地址栈重新进入正常工 作状态。
7. 如权利要求5所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在于在所述步骤3)中,程序遇到异常时产生流水线清空操作,流水线的各种状态恢复为指令退休时的状态,利用退休指针恢复返回地址栈的栈顶指针,返回地址栈重新进入正常工作状 态。
8. 如权利要求2所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在于在所述步骤4)中,后级流水线在函数调用指令和函数返回指令执行时即对返回地址预测进行检验。
9. 如权利要求8所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在于在所述步骤4)中,当流水线执行过程中出现分支预测错误,将返回地址栈栈顶指针更新为检验指针,恢复操作无需等待当前分支预测错误指令退休时进行,返回地址栈提前进入正 常工作状态。
全文摘要
一种支持自动纠错功能的返回地址栈实现方法,所述的返回地址栈实现方法包括以下步骤1)在指令预取过程中对函数调用指令和函数返回指令进行预译码,并根据预译码结果进行函数返回地址信息的入栈和出栈操作;2)设置栈顶指针标识指令预译码时返回地址栈的当前操作的位置;3)采用退休指针记录函数调用和函数返回指令退休后的返回地址栈状态,在流水线清空操作时,利用退休指针对栈顶指针的自动恢复。本发明能有效提高函数返回的预测精度、提升处理器的性能。
文档编号G06F9/38GK101727312SQ20091020720
公开日2010年6月9日 申请日期2009年10月12日 优先权日2009年1月22日
发明者严晓浪, 孟建熠, 葛海通, 龚帅帅 申请人:杭州中天微系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1