CN1295598C - 双栈返回地址预测器中返回地址栈的恢复方法 - Google Patents
双栈返回地址预测器中返回地址栈的恢复方法 Download PDFInfo
- Publication number
- CN1295598C CN1295598C CNB2004100229661A CN200410022966A CN1295598C CN 1295598 C CN1295598 C CN 1295598C CN B2004100229661 A CNB2004100229661 A CN B2004100229661A CN 200410022966 A CN200410022966 A CN 200410022966A CN 1295598 C CN1295598 C CN 1295598C
- Authority
- CN
- China
- Prior art keywords
- return
- stack
- address
- data
- ras
- 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
Images
Landscapes
- Advance Control (AREA)
Abstract
本发明公开了一种双栈返回地址预测器中返回地址栈的恢复方法,要解决的技术问题是在修改执行返回地址栈的同一个时钟周期实现对预测返回地址栈的恢复,保证预测返回地址栈及时获得最新数据。本发明的总体逻辑结构包括预测返回地址栈、执行返回地址栈、第一写模块和第二写模块。预测返回地址栈和执行返回地址栈是两个返回地址栈,由第一写模块完成执行返回地址栈的写操作,第二写模块完成预测返回地址栈的写操作。采用本发明能及时、准确地恢复预测返回地址栈,且预测返回地址栈的恢复和执行返回地址栈的修改在同一个时钟周期内进行,不需要在下一个时钟周期发出提示信号,降低了实现的复杂度。
Description
技术领域:本发明涉及微处理器设计中双栈返回地址预测器中预测返回地址栈RAS_PRED(Return Address Stack for PREDiction)的恢复方法,尤其是在对执行返回地址栈RAS_EXE(Return Address Stack for EXEcution)进行修改的同一个时钟周期恢复RAS_PRED的方法。
背景技术:在采用双栈返回地址预测器的微处理器中,发生分支误预测时,使用RAS_EXE恢复RAS_PRED,即把RAS_EXE中各项的数据写到RAS_PRED的相应项中,对返回指令目标地址的预测精度非常高,硬件实现也很简单。但是恢复过程可能存在这样的问题,即发生分支误预测的指令是跳转的调用指令或跳转的返回指令,这时既要修改RAS_EXE,又要恢复RAS_PRED。为了能够使用RAS_EXE中的最新数据恢复RAS_PRED,普遍的做法是在修改RAS_EXE的下一个时钟周期发出信号提示需要恢复RAS_PRED。这种做法虽然可以保证RAS_PRED获得RAS_EXE中的最新数据,实现正确的返回地址栈恢复,但是RAS_PRED要迟一个时钟周期才能获得RAS_EXE中的最新数据,使得数据的恢复不及时;此外还必须在修改RAS_EXE的下一个时钟周期发出信号提示恢复RAS_PRED,从而增加了实现的复杂度。
发明内容:本发明所要解决的技术问题是在修改RAS_EXE的同一个时钟周期实现对RAS_PRED的恢复,保证RAS_PRED及时获得最新数据,进行恢复操作时不需要信号提示,降低实现的复杂度。
本发明的技术方案是:
本发明的主要逻辑结构是对RAS_PRED进行写操作的写模块。为了便于区分,本发明把对RAS_PRED进行写操作的写模块叫做第二写模块,把对RAS_EXE进行写操作的写模块叫做第一写模块。由于使用RAS_EXE恢复RAS_PRED就是把RAS_EXE中各项的数据写到RAS_PRED的相应项中,因此对RAS_PRED的写操作包括使用RAS_EXE恢复RAS_PRED。
本发明涉及到如下信号:
预测栈顶指针TOS_PRED(Top Of Stack for PREDiction):RAS_PRED的栈顶指针。如果TOS_PRED为i,表明RAS_PRED的当前栈顶是它的第i+1项。
执行栈顶指针TOS_EXE(Top Of Stack for EXEcution):RAS_EXE的栈顶指针。如果TOS_EXE为i,表明RAS_EXE的当前栈顶是它的第i+1项。
分支预测信息:包括分支类型以及预测得到的分支方向。
实际执行信息:包括分支类型以及实际得到的分支方向。
第二返回地址:处在分支预测阶段的调用指令的返回地址,即处在分支预测阶段的调用指令的下一条指令地址。
第一返回地址:处在分支执行阶段的调用指令的返回地址,即处在分支执行阶段的调用指令的下一条指令地址。
本发明的总体逻辑结构包括RAS_PRED、RAS_EXE、第一写模块和第二写模块。RAS_PRED和RAS_EXE是两个返回地址栈,各包含n个入口项,设计时可以根据需要调整n的大小。第一写模块完成RAS_EXE的写操作,第二写模块完成RAS_PRED的写操作。用于修改RAS_EXE的信号包括TOS_EXE、第一返回地址和实际执行信息,它们既连到第一写模块上,也连到第二写模块上;TOS_PRED、第二返回地址和分支预测信息只连到第二写模块上。
如果未发生分支误预测,第二写模块根据TOS_PRED和分支预测信息修改RAS_PRED,第一写模块根据TOS_EXE和实际执行信息修改RAS_EXE;如果发生了分支误预测,且是跳转的调用指令发生了分支误预测,这时既要修改RAS_EXE又要恢复RAS_PRED,由于用于修改RAS_EXE的数据既送给了第一写模块也送给了第二写模块,所以第一写模块根据TOS_EXE和实际执行信息修改RAS_EXE,第二写模块根据TOS_EXE和实际执行信息对RAS_PRED进行恢复。这样,在同一个时钟周期既修改了RAS_EXE,又使用最新的数据恢复了RAS_PRED。
本发明由第二写模块完成RAS_PRED的写操作。为了描述清楚,这里只给出对RAS_PRED中一项的写操作,对其他项的写操作都是相同的。假定对RAS_PRED中的i+1项进行写操作,因此来自RAS_PRED的数据是RAS_PRED第i+1项中的数据,且连到第一2选1开关的A端,来自RAS_EXE的数据是RAS_EXE第i+1项中的数据,且连到第二2选1开关的C端。第一开关的B端接的是第二返回地址,输出连到第三2选1开关的E端。第二开关的D端接的是第一返回地址,输出连到第三开关的F端。
如果TOS_PRED为i,同时分支预测信息提示检测到调用指令并且预测其发生跳转,那么第一开关把B端的数据作为输出,否则输出A端的数据。
如果TOS_EXE为i并且实际执行信息提示检测到发生跳转的调用指令,那么第二开关把D端的数据作为输出,否则输出C端的数据。
如果发生了分支误预测,第三开关把F端的数据作为输出,否则输出E端开关的输出是新的将要被写入RAS_EXE第i+1项中的数据。
若用n代表RAS_PRED和RAS_EXE所拥有的入口项数,RAS_PRED[i]表示RAS_PRED第i+1项中的数据,本发明用第二写模块恢复RAS_PRED的流程是:如果发生了分支误预测,则查看实际执行信息,如果检测到发生误预测的分支指令是跳转的调用指令,则把第一返回地址写入RAS_PRED的第TOS_EXE+1项中,RAS_PRED的其他入口中的数据由RAS_EXE中相应项的数据恢复;如果发生了分支误预测,但发生误预测的分支指令不是跳转的调用指令,则RAS_PRED所有入口中的数据都由RAS_EXE中相应项的数据恢复;如果没有发生分支误预测,则查看分支预测信息,如果检测到调用指令并且预测其发生跳转,则把第二返回地址写入RAS_PRED的第TOS_PRED+1项中,RAS_PRED的其他入口中的数据保持不变;如果没有发生分支误预测,并且分支预测信息指示检测到的不是调用指令或者检测到调用指令但预测其不发生跳转,则RAS_PRED所有入口中的数据都保持不变。
采用本发明可以达到以下技术效果:
1)及时、准确恢复RAS_PRED。由于用于修改RAS_EXE的数据送给第一写模块的同时也送给了第二写模块,所以可以在同一个时钟周期完成RAS_EXE的修改和RAS_PRED的恢复,且RAS_PRED中的数据和RAS_EXE中的数据是完全相同的。
2)RAS_PRED的恢复和RAS_EXE的修改在同一个时钟周期内进行,不需要在下一个时钟周期发出提示信号,降低了实现的复杂度。
附图说明:
图1本发明总体逻辑结构图。
图2本发明第二写模块的内部实现图。
图3本发明第一写模块的内部实现图。
图4本发明用第二写模块恢复RAS_PRED的流程图。
具体实施方式:
如图1,本发明的总体逻辑结构包括RAS_PRED、RAS_EXE、第一写模块和第二写模块。RAS_PRED和RAS_EXE是两个返回地址栈,分别由n个寄存器组成,n是RAS_PRED和RAS_EXE的入口项数,设计时可以根据需要调整n的大小。在国防科技大学研制的YHFT64高性能通用CPU芯片设计中,n等于8。第一写模块完成RAS_EXE的写操作,第二写模块完成RAS_PRED的写操作。TOS_EXE、第一返回地址和实际执行信息既连到第一写模块上,也连到第二写模块上;TOS_PRED、第二返回地址和分支预测信息只连到第二写模块上。
如果未发生分支误预测,第二写模块根据TOS_PRED和分支预测信息修改RAS_PRED,第一写模块根据TOS_EXE和实际执行信息修改RAS_EXE;如果发生了分支误预测,第二写模块根据TOS_EXE和实际执行信息恢复RAS_PRED,第一写模块根据TOS_EXE和实际执行信息修改RAS_EXE。
图2是第二写模块的内部实现图。第二写模块完成RAS_PRED的写操作。为了描述清楚,图2只给出了对其中一项的写操作,对其他项的写操作都是相同的。假定对RAS_PRED中的i+1项进行写操作,因此图2中的来自RAS_PRED的数据是RAS_PRED第i+1项中的数据,且连到第一2选1开关的A端,来自RAS_EXE的数据是RAS_EXE第i+1项中的数据,且连到第二2选1开关的C端。第一开关的B端接的是第二返回地址,输出连到第三开关的E端。第二开关的D端接的是第一返回地址,输出连到第三开关的F端。
如果TOS_PRED为i,同时分支预测信息提示检测到调用指令并且预测其发生跳转,那么第一开关把B端的数据作为输出,否则输出A端的数据。
如果TOS_EXE为i并且实际执行信息提示检测到发生跳转的调用指令,那么第二开关把D端的数据作为输出,否则输出C端的数据的数据。
如果发生了分支误预测,第三开关把F端的数据作为输出,否则输出E端的数据。第三开关的输出是新的将要被写入RAS_PRED第i+1项中的数据。
图3是第一写模块的内部实现图。第一写模块完成RAS_EXE的写操作,为了描述清楚,图3同样也只给出了对其中一项的写操作。仍然假定对RAS_EXE中的第i+1项进行写操作,因此图3中的来自RAS_EXE的数据是RAS_EXE第i+1项中的数据,且连到第四2选1开关的G端。第一返回地址连到第四开关的H端。如果TOS_EXE为i,且实际执行信息指示检测到发生跳转的调用指令,那么第四开关把H端的数据作为输出,否则输出G端的数据。第四开关的输出是新的将要被写入RAS_EXE第i+1项中的数据。
图4是本发明用第二写模块恢复RAS_PRED的流程图。其中n代表RAS_PRED和RAS_EXE所拥有的入口项数。RAS_PRED[i]表示RAS_PRED第i+1项中的数据。如果发生了分支误预测,那么接下来查看实际执行信息,如果检测到发生误预测的分支指令是是跳转的调用指令,那么把第一返回地址写入RAS_PRED的第TOS_EXE+1项中,RAS_PRED的其他入口中的数据由RAS_EXE中相应项的数据恢复;如果发生了分支误预测,但发生误预测的分支指令不是跳转的调用指令,那么RAS_PRED所有入口中的数据都由RAS_EXE中相应项的数据恢复。如果没有发生分支误预测,那么查看分支预测信息,如果检测到调用指令并且预测其发生跳转,则把第二返回地址写入RAS_PRED的第TOS_PRED+1项中,RAS_PRED的其他入口中的数据保持不变;如果没有发生分支误预测,并且分支预测信息指示检测到的不是调用指令或者检测到调用指令但预测其不发生跳转,则RAS_PRED所有入口中的数据都保持不变。
Claims (2)
1.一种双栈返回地址预测器中返回地址栈的恢复方法,使用执行返回地址栈恢复预测返回地址栈,即把执行返回地址栈中各项的数据写到预测返回地址栈的相应项中,其总体逻辑结构包括预测返同地址栈、执行返回地址栈和第一写模块,第一写模块完成执行返回地址栈的写操作;采用的信号有预测栈顶指针、执行栈顶指针、分支预测信息、实际执行信息、第二返回地址即处在分支预测阶段的调用指令的返回地址和第一返回地址即处在分支执行阶段的调用指令的返回地址;其特征在于它的总体逻辑结构还包括第二写模块,第二写模块完成预测返回地址栈的写操作;用于修改执行返回地址栈的信号包括执行栈顶指针、第一返回地址和实际执行信息,它们既连到第一写模块上,也连到第二二写模块上;预测栈顶指针、第二返回地址和分支预测信息只连到第二写模块上;在第一写模块修改执行返回地址栈的同一个时钟周期第二写模块完成对预测返回地址栈的恢复操作,保证预测返回地址栈及时获得最新数据;用第二写模块恢复预测返回地址栈的流程是:如果发生了分支误预测,则查看实际执行信息,如果检测到发生误预测的分支指令是跳转的调用指令,则把第一返回地址写入预测返回地址栈的第(执行栈顶指针+1)项中,预测返回地址栈的其他入口中的数据由执行返回地址栈中相应项的数据恢复;如果发生了分支误预测,但发生误预测的分支指令不是跳转的调用指令,则预测返回地址栈所有入口中的数据都由执行返回地址栈中相应项的数据恢复;如果没有发生分支误预测,则查看分支预测信息,如果检测到调用指令并且预测其发生跳转,则把第二返回地址写入预测返回地址栈的第(预测栈顶指针+1)项中,预测返回地址栈的其他入口中的数据保持不变;如果没有发生分支误预测,并且分支预测信息指示检测到的不是调用指令或者检测到调用指令但预测其不发生跳转,则预测返回地址栈所有入口中的数据都保持不变。
2.如权利要求1所述的双栈返回地址预测器中返回地址栈的恢复方法,其特征在于所述第二写模块对预测返回地址栈中第i+1项进行写操作时,来自预测返回地址栈的数据是预测返回地址栈第i+1项中的数据,且连到第一2选1开关的A端,来自执行返回地址栈的数据是执行返回地址栈第i+1项中的数据,且连到第二2选1开关的C端;第一开关的B端接的是第二返回地址,输出连到第三开关的E端;第二开关的D端接的是第一返回地址,输出连到第三开关的F端;如果预测栈顶指针为i,同时分支预测信息提示检测到调用指令并且预测其发生跳转,则第一开关把B端的数据作为输出,否则输出A端的数据;如果执行栈顶指针为i并且实际执行信息提示检测到发生跳转的调用指令,则第二开关把D端的数据作为输出,否则输出C端的数据的数据;如果发生了分支误预测,第三开关把F端的数据作为输出,否则输出E端的数据;第三开关的输出是新的将要被写入预测返回地址栈第i+1项中的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100229661A CN1295598C (zh) | 2004-03-09 | 2004-03-09 | 双栈返回地址预测器中返回地址栈的恢复方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100229661A CN1295598C (zh) | 2004-03-09 | 2004-03-09 | 双栈返回地址预测器中返回地址栈的恢复方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1560735A CN1560735A (zh) | 2005-01-05 |
CN1295598C true CN1295598C (zh) | 2007-01-17 |
Family
ID=34441040
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100229661A Expired - Fee Related CN1295598C (zh) | 2004-03-09 | 2004-03-09 | 双栈返回地址预测器中返回地址栈的恢复方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1295598C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727312B (zh) * | 2009-01-22 | 2013-01-09 | 杭州中天微系统有限公司 | 一种支持自动纠错功能的返回地址栈实现方法 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101770358B (zh) * | 2010-02-10 | 2013-01-30 | 龙芯中科技术有限公司 | 微处理器跳转指令分支预测处理系统和方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07210423A (ja) * | 1994-01-20 | 1995-08-11 | Fuji Facom Corp | 計算機システム |
US6253315B1 (en) * | 1998-08-06 | 2001-06-26 | Intel Corporation | Return address predictor that uses branch instructions to track a last valid return address |
CN1305150A (zh) * | 1999-11-01 | 2001-07-25 | 国际商业机器公司 | 具有改进的地址目标预测的处理器和方法 |
CN1397878A (zh) * | 2001-05-04 | 2003-02-19 | 智慧第一公司 | 假想混合分支方向预测装置 |
US20030120906A1 (en) * | 2001-12-21 | 2003-06-26 | Jourdan Stephan J. | Return address stack |
-
2004
- 2004-03-09 CN CNB2004100229661A patent/CN1295598C/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07210423A (ja) * | 1994-01-20 | 1995-08-11 | Fuji Facom Corp | 計算機システム |
US6253315B1 (en) * | 1998-08-06 | 2001-06-26 | Intel Corporation | Return address predictor that uses branch instructions to track a last valid return address |
CN1305150A (zh) * | 1999-11-01 | 2001-07-25 | 国际商业机器公司 | 具有改进的地址目标预测的处理器和方法 |
CN1397878A (zh) * | 2001-05-04 | 2003-02-19 | 智慧第一公司 | 假想混合分支方向预测装置 |
US20030120906A1 (en) * | 2001-12-21 | 2003-06-26 | Jourdan Stephan J. | Return address stack |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727312B (zh) * | 2009-01-22 | 2013-01-09 | 杭州中天微系统有限公司 | 一种支持自动纠错功能的返回地址栈实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1560735A (zh) | 2005-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3565504B2 (ja) | プロセッサにおける分岐予測方法及びプロセッサ | |
CN101110017B (zh) | 一种组合指令的技术 | |
KR101791811B1 (ko) | 가속기들의 낮은-레이턴시 인보크를 위한 장치 및 방법 | |
JP3548132B2 (ja) | マルチスレッド・プロセッサ内でのパイプライン・ステージのフラッシュ方法および装置 | |
CN1021144C (zh) | 带有指令标识装置的数据处理系统 | |
KR101636836B1 (ko) | 명령어들의 고속 실패 핸들링을 위한 장치 및 방법 | |
US6079014A (en) | Processor that redirects an instruction fetch pipeline immediately upon detection of a mispredicted branch while committing prior instructions to an architectural state | |
CN1109967C (zh) | 多线程处理器中指令和关联读取请求的后台完成 | |
CN1177275C (zh) | 减少处理器中写入通信量的方法和系统 | |
JP5815596B2 (ja) | プロシージャリターンシーケンスを加速するための方法およびシステム | |
CN1831757A (zh) | 中央处理单元中的提前执行 | |
JP2004145903A (ja) | スーパースケーラマイクロプロセサ | |
CN101933002A (zh) | 包含用于逻辑错误保护的混合冗余的处理器 | |
CN1731346A (zh) | 微处理器的整数单元中五级容错流水结构的实现方法 | |
CN1100294C (zh) | 能防止程序故障的中央处理单元 | |
US7689816B2 (en) | Branch prediction with partially folded global history vector for reduced XOR operation time | |
CN1295598C (zh) | 双栈返回地址预测器中返回地址栈的恢复方法 | |
CN1560734A (zh) | 双栈返回地址预测器设计方法 | |
JP3683439B2 (ja) | 分岐予測を抑止する情報処理装置および方法 | |
US6625726B1 (en) | Method and apparatus for fault handling in computer systems | |
US7742544B2 (en) | System and method for efficient CABAC clock | |
US6125443A (en) | Interrupt processing system and method for information processing system of pipeline control type | |
CN1629802A (zh) | 产生管线式微处理器的早期状态标志的装置及方法 | |
EP0212132A1 (en) | Method and digital computer for recovering from errors | |
CN1180339C (zh) | 一种16位微处理器中使用的伪四级流水结构的实现方法 |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20070117 Termination date: 20100309 |