專利名稱:一種支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于嵌入式處理器系統(tǒng)領(lǐng)域。更具體地說,涉及一種函數(shù)返回地址棧實(shí)現(xiàn)
方法。
背景技術(shù):
嵌入式處理器發(fā)展至今,已經(jīng)在多媒體編解碼、通信技術(shù)和超大規(guī)模集成電路設(shè) 計(jì)領(lǐng)域展現(xiàn)出了巨大的應(yīng)用價(jià)值。 一直以來,嵌入式處理器對(duì)于功耗、面積、成本、性能等多 項(xiàng)指標(biāo)都有著嚴(yán)格的設(shè)計(jì)要求。隨著應(yīng)用領(lǐng)域的不斷擴(kuò)大和應(yīng)用要求的不斷提高,對(duì)于嵌 入式處理器的處理性能提出了更高的要求。 在流水線技術(shù)廣泛應(yīng)用于處理器設(shè)計(jì)的今天,如何充分發(fā)揮流水線的作用成為設(shè) 計(jì)中需要考慮的重點(diǎn)問題。分支指令對(duì)于流水線技術(shù)的運(yùn)用帶來的障礙使得分支預(yù)測(cè)技術(shù) 在處理器的設(shè)計(jì)中變得越來越重要,為實(shí)現(xiàn)高性能,精確的分支預(yù)測(cè)成為關(guān)鍵。分支預(yù)測(cè)失 效將浪費(fèi)大量的時(shí)鐘周期,無法發(fā)揮處理器亂序執(zhí)行的效能,從而影響處理器性能的進(jìn)一
步提咼o 函數(shù)調(diào)用和函數(shù)返回作為重要的分支指令,在處理器的指令集中占有相對(duì)重要的 地位,能否在盡可能少的等待時(shí)間之內(nèi)完成函數(shù)返回指令正確目標(biāo)地址的獲取,成為了一 種重要的分支預(yù)測(cè)技術(shù)。當(dāng)前大多數(shù)高性能的嵌入式處理器都采用了返回地址棧為函數(shù)返 回指令提供返回地址,而返回地址棧的維護(hù)方法在不同的嵌入式處理器中各不相同。在現(xiàn) 有的常見嵌入式處理器架構(gòu)中,返回地址棧主要采用保存當(dāng)前棧頂指針、數(shù)據(jù)或保存全棧 的修復(fù)方法。前者需要對(duì)每一條分支指令保存一個(gè)棧頂指針的拷貝,預(yù)測(cè)精度也不高;后者 雖然可以獲得百分之百的預(yù)測(cè)準(zhǔn)確率,但硬件開銷過大。
發(fā)明內(nèi)容
為了克服已有的嵌入式處理器的函數(shù)返回地址棧實(shí)現(xiàn)方法的函數(shù)返回的預(yù)測(cè)精 度較低、限制處理器的性能的不足,本發(fā)明提供一種有效提高函數(shù)返回的預(yù)測(cè)精度、提升處 理器的性能的支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是 —種支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法,所述的返回地址棧實(shí)現(xiàn)方法包括 以下步驟 1)在指令預(yù)取過程中對(duì)函數(shù)調(diào)用指令和函數(shù)返回指令進(jìn)行預(yù)譯碼,并根據(jù)預(yù)譯碼 結(jié)果進(jìn)行函數(shù)返回地址信息的入棧和出棧操作; 2)設(shè)置棧頂指針標(biāo)識(shí)指令預(yù)譯碼時(shí)返回地址棧的當(dāng)前操作的位置; 3)采用退休指針記錄函數(shù)調(diào)用和函數(shù)返回指令退休后的返回地址棧狀態(tài),在流水 線清空操作時(shí),利用退休指針對(duì)棧頂指針的自動(dòng)恢復(fù)。 作為優(yōu)選的一種方案所述的返回地址棧實(shí)現(xiàn)方法還包括步驟4)采用檢驗(yàn)指針 記錄后級(jí)流水線確認(rèn)預(yù)測(cè)后的返回地址棧狀態(tài),在分支跳轉(zhuǎn)預(yù)測(cè)出錯(cuò)時(shí),利用檢驗(yàn)指針對(duì)棧頂指針的自動(dòng)恢復(fù)。 作為優(yōu)選的另一種方案在所述步驟1)中,在指令預(yù)取過程中設(shè)置返回地址棧,并對(duì)預(yù)取指令進(jìn)行動(dòng)態(tài)預(yù)譯碼,若當(dāng)前指令為函數(shù)調(diào)用指令,將函數(shù)的返回地址壓入返回地址棧;若當(dāng)前指令為函數(shù)返回指令,從返回地址棧中獲得返回地址,跳入返回函數(shù)開始預(yù)取指令。 進(jìn)一步,在所述步驟2)中,所述返回地址棧為循環(huán)堆棧結(jié)構(gòu),棧頂指針指示返回地址棧當(dāng)前寫入和讀取的位置,棧頂指針在有效范圍內(nèi)循環(huán)更新,在指令預(yù)取的同時(shí)控制棧頂指針的更新和返回地址棧對(duì)應(yīng)位置的入棧和出棧操作。 更進(jìn)一步,在所述步驟3)中,程序遇到異常時(shí)產(chǎn)生流水線清空操作,流水線的各種狀態(tài)恢復(fù)為指令退休時(shí)的狀態(tài),利用退休指針恢復(fù)返回地址棧的棧頂指針,返回地址棧重新進(jìn)入正常工作狀態(tài)。 再進(jìn)一步,在所述步驟4)中,后級(jí)流水線在函數(shù)調(diào)用指令和函數(shù)返回指令執(zhí)行時(shí)即對(duì)返回地址預(yù)測(cè)進(jìn)行檢驗(yàn)。 當(dāng)流水線執(zhí)行過程中出現(xiàn)分支預(yù)測(cè)錯(cuò)誤,將返回地址棧棧頂指針更新為檢驗(yàn)指針,恢復(fù)操作無需等待當(dāng)前分支預(yù)測(cè)錯(cuò)誤指令退休時(shí)進(jìn)行,返回地址棧提前進(jìn)入正常工作狀態(tài)。 本發(fā)明的技術(shù)構(gòu)思為利用一組指針寄存器的協(xié)同工作,實(shí)現(xiàn)了在流水線出現(xiàn)清空操作或其他分支預(yù)測(cè)出現(xiàn)錯(cuò)誤時(shí)的自動(dòng)糾錯(cuò)。該單元的本質(zhì)是在嵌入式處理器中通過簡(jiǎn)單的擴(kuò)展,保持其控制能力的同時(shí),確保了函數(shù)調(diào)用和函數(shù)返回指令接近百分之百的預(yù)測(cè)精度。 支持自動(dòng)糾錯(cuò)功能的返回地址棧是一個(gè)為通用嵌入式處理器設(shè)計(jì)的加速函數(shù)調(diào)用和函數(shù)返回指令執(zhí)行的硬件執(zhí)行單元。其僅僅是一個(gè)執(zhí)行單元,是復(fù)雜嵌入式處理器的有效補(bǔ)充。 因此,利用較小的硬件代價(jià)對(duì)返回地址棧進(jìn)行必要的修復(fù),能夠獲得正確的返回地址,即提高函數(shù)返回指令的預(yù)測(cè)精度,就顯得尤為重要。 本發(fā)明的有益效果主要表現(xiàn)在在實(shí)現(xiàn)對(duì)函數(shù)調(diào)用和函數(shù)返回指令的自動(dòng)識(shí)別的基礎(chǔ)上,通過相應(yīng)的入棧和出棧操作,達(dá)到對(duì)函數(shù)返回指令加速的目的;通過退休指針、檢驗(yàn)指針和棧頂指針的協(xié)同工作,實(shí)現(xiàn)返回地址棧在流水線進(jìn)行清空操作和分支預(yù)測(cè)出現(xiàn)錯(cuò)誤時(shí)的自動(dòng)糾錯(cuò)功能。該方法應(yīng)用于嵌入式處理器中,有效地提高了處理器取指單元的取指效率,從而提升整個(gè)嵌入式處理器的處理性能。
圖1是返回地址棧指針寄存器組的硬件原理 圖2是棧頂指針自動(dòng)糾錯(cuò)的硬件原理 圖3是返回地址棧入棧出棧操作的硬件原理圖。
具體實(shí)施例方式
下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步描述。 參照?qǐng)D1-圖3,一種支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法,所述的返回地址棧實(shí)現(xiàn)方法包括以下步驟 1)在指令預(yù)取過程中對(duì)函數(shù)調(diào)用指令和函數(shù)返回指令進(jìn)行預(yù)譯碼,并根據(jù)預(yù)譯碼 結(jié)果進(jìn)行函數(shù)返回地址信息的入棧和出棧操作; 2)設(shè)置棧頂指針標(biāo)識(shí)指令預(yù)譯碼時(shí)返回地址棧的當(dāng)前操作的位置; 3)采用退休指針記錄函數(shù)調(diào)用和函數(shù)返回指令退休后的返回地址棧狀態(tài),在流水
線清空操作時(shí),利用退休指針對(duì)棧頂指針的自動(dòng)恢復(fù)。
所述的返回地址棧實(shí)現(xiàn)方法還包括步驟4)采用檢驗(yàn)指針記錄后級(jí)流水線確認(rèn)
預(yù)測(cè)后的返回地址棧狀態(tài),在分支跳轉(zhuǎn)預(yù)測(cè)出錯(cuò)時(shí),利用檢驗(yàn)指針對(duì)棧頂指針的自動(dòng)恢復(fù)。 本實(shí)施例的支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法特征如下 1)在指令預(yù)取過程中對(duì)函數(shù)調(diào)用和函數(shù)返回指令進(jìn)行預(yù)譯碼,并根據(jù)預(yù)譯碼結(jié)果
進(jìn)行函數(shù)返回地址信息的入棧和出棧操作; 2)設(shè)置棧頂指針標(biāo)識(shí)指令預(yù)譯碼時(shí)返回地址棧的當(dāng)前操作的位置; 3)采用退休指針記錄函數(shù)調(diào)用和函數(shù)返回指令退休后的返回地址棧狀態(tài); 4)采用檢驗(yàn)指針記錄后級(jí)流水線確認(rèn)預(yù)測(cè)后的返回地址棧狀態(tài); 5)在流水線清空操作時(shí),利用退休指針對(duì)棧頂指針的自動(dòng)恢復(fù); 6)在分支跳轉(zhuǎn)預(yù)測(cè)出錯(cuò)時(shí),利用檢驗(yàn)指針對(duì)棧頂指針的自動(dòng)恢復(fù)。 本專利提出的返回地址棧通過循環(huán)堆棧結(jié)構(gòu)實(shí)現(xiàn),設(shè)計(jì)棧頂指針指示返回地址棧
當(dāng)前操作的位置。在不同的處理器指令集中,都有不同的函數(shù)調(diào)用和函數(shù)返回指令,但都通
過固定的編碼格式實(shí)現(xiàn)。取指單元對(duì)預(yù)取指令的動(dòng)態(tài)預(yù)譯碼通過一組比較器組成的譯碼單
元實(shí)現(xiàn),根據(jù)處理器中單發(fā)或多發(fā)的不同分配邏輯,實(shí)現(xiàn)相關(guān)地址信息的入棧和出棧操作。 在返回地址棧中存放的是函數(shù)返回指令的目標(biāo)返回地址,也就是函數(shù)調(diào)用指令下
一條指令對(duì)應(yīng)的PC。根據(jù)取指單元?jiǎng)討B(tài)預(yù)譯碼的結(jié)果,若當(dāng)前指令為函數(shù)調(diào)用指令,將函數(shù)
的返回地址壓入返回地址棧;若當(dāng)前指令為函數(shù)返回指令,從返回地址棧中獲得返回地址,
跳入返回函數(shù)開始預(yù)取指令。這一過程如圖1所示。 棧頂指針決定了返回地址棧入棧和出棧操作的位置,棧頂指針的維護(hù)由取指單元 來完成。取指單元直接根據(jù)譯碼單元對(duì)操作數(shù)的譯碼結(jié)果,直接完成對(duì)棧頂指針的修改,按 序記錄函數(shù)調(diào)用和函數(shù)返回指令的序列信息。當(dāng)譯碼為函數(shù)調(diào)用指令,棧頂指針做加一操 作;當(dāng)譯碼為函數(shù)返回指令,棧頂指針做減一操作。這一過程如圖2所示。
在亂序執(zhí)行的處理器中,指令只有在按序退休后才被確認(rèn)為正常完成,設(shè)計(jì)退休 指針記錄函數(shù)調(diào)用和函數(shù)返回指令的退休情況,為特殊情況下棧頂指針的自動(dòng)糾錯(cuò)做準(zhǔn) 備。在綜合執(zhí)行單元中,將根據(jù)取指單元的譯碼信息對(duì)函數(shù)調(diào)用、函數(shù)返回指令的退休發(fā)起 廣播,取指單元在獲得這一信息后,將修改退休指針以確保準(zhǔn)確記錄這一過程。函數(shù)調(diào)用指
令退休,退休指針做加一操作;函數(shù)返回指令退休,退休指針做減一操作,這一過程如圖2 所示。 分支指令的目標(biāo)地址預(yù)測(cè)預(yù)取是一種重要的處理器技術(shù),只有在分支預(yù)測(cè)正確的 情況下,取指單元獲得的函數(shù)調(diào)用和函數(shù)返回指令才是有可能被執(zhí)行的,設(shè)計(jì)檢驗(yàn)指針記 錄函數(shù)調(diào)用和函數(shù)返回指令在分支預(yù)測(cè)正確情況下的指令序列信息,為特殊情況下棧頂指 針的自動(dòng)糾錯(cuò)做準(zhǔn)備。當(dāng)分支預(yù)測(cè)出現(xiàn)錯(cuò)誤的時(shí)候,取指單元將會(huì)把錯(cuò)誤指令序列下的函 數(shù)調(diào)用和函數(shù)返回指令譯碼并記錄下來,從而導(dǎo)致返回地址棧錯(cuò)誤的入棧或出棧操作。在綜合執(zhí)行單元中,將根據(jù)取指單元的譯碼信息對(duì)已經(jīng)確保正確預(yù)測(cè)的分支后的函數(shù)調(diào)用和 函數(shù)返回指令進(jìn)行檢驗(yàn),并廣播確認(rèn)信息,取指單元在獲得這一信息后,將修改檢驗(yàn)指針以 確保準(zhǔn)確記錄這一過程。函數(shù)調(diào)用指令被確認(rèn),檢驗(yàn)指針做加一操作;函數(shù)返回指令被確 認(rèn),檢驗(yàn)指針做減一操作,這一過程如圖2所示。 返回地址棧的修復(fù)將通過退休指針和檢驗(yàn)指針的協(xié)同工作來實(shí)現(xiàn),具體的糾錯(cuò)方 案如下 在流水線清空操作時(shí),利用退休指針對(duì)棧頂指針自動(dòng)恢復(fù)。當(dāng)流水線出現(xiàn)清空操 作時(shí),棧頂指針將有可能錯(cuò)誤的記錄下已被清空的函數(shù)調(diào)用和函數(shù)返回指令,由于退休指 針正確記錄了所有函數(shù)調(diào)用和函數(shù)返回指令的退休信息,可用于在這種情況下對(duì)棧頂指針 的恢復(fù)。當(dāng)取指單元獲得綜合執(zhí)行單元廣播的流水線清空操作后,直接將棧頂指針同步到 和退休指針相同的數(shù)值,這一過程如圖3所示。 在分支跳轉(zhuǎn)預(yù)測(cè)出錯(cuò)時(shí),利用檢驗(yàn)指針對(duì)棧頂指針的自動(dòng)恢復(fù)。當(dāng)分支預(yù)測(cè)出現(xiàn) 錯(cuò)誤時(shí),棧頂指針將有可能錯(cuò)誤的記錄下不會(huì)被執(zhí)行的函數(shù)調(diào)用和函數(shù)返回指令,由于檢 驗(yàn)指針正確記錄了在分支預(yù)測(cè)正確前提下的所有函數(shù)調(diào)用和函數(shù)返回指令的序列信息,可 用于在這種情況下對(duì)棧頂指針的恢復(fù)。當(dāng)取指單元獲得綜合執(zhí)行單元廣播的分支指令預(yù)測(cè) 錯(cuò)誤信息后,直接將棧頂指針同步到和檢驗(yàn)指針相同的數(shù)值,恢復(fù)操作無需等待當(dāng)前分支 預(yù)測(cè)錯(cuò)誤指令退休時(shí)進(jìn)行,返回地址棧提前進(jìn)入正常工作狀態(tài)。這一過程如圖3所示。
由于取指單元利用棧頂指針直接完成所有函數(shù)調(diào)用指令的入棧操作和所有函數(shù) 返回指令的出棧操作,因此無論被調(diào)用子程序的指令周期長(zhǎng)短如何,由于有退休指針、檢驗(yàn) 指針對(duì)棧頂指針的自動(dòng)糾錯(cuò)功能的支持,其函數(shù)返回指令的目標(biāo)地址都會(huì)被正確的獲得。 根據(jù)返回地址棧的深度可以確定棧頂指針的寬度,相應(yīng)的退休指針、檢驗(yàn)指針的寬度因?yàn)?和棧頂指針相同可以隨之確定。
權(quán)利要求
一種支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法,其特征在于所述的返回地址棧實(shí)現(xiàn)方法包括以下步驟1)在指令預(yù)取過程中對(duì)函數(shù)調(diào)用指令和函數(shù)返回指令進(jìn)行預(yù)譯碼,并根據(jù)預(yù)譯碼結(jié)果進(jìn)行函數(shù)返回地址信息的入棧和出棧操作;2)設(shè)置棧頂指針標(biāo)識(shí)指令預(yù)譯碼時(shí)返回地址棧的當(dāng)前操作的位置;3)采用退休指針記錄函數(shù)調(diào)用和函數(shù)返回指令退休后的返回地址棧狀態(tài),在流水線清空操作時(shí),利用退休指針對(duì)棧頂指針的自動(dòng)恢復(fù)。
2. 如權(quán)利要求1所述的一種支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法,其特征在于 所述的返回地址棧實(shí)現(xiàn)方法還包括步驟4)采用檢驗(yàn)指針記錄后級(jí)流水線確認(rèn)預(yù)測(cè)后的返回地址棧狀態(tài),在分支跳轉(zhuǎn)預(yù) 測(cè)出錯(cuò)時(shí),利用檢驗(yàn)指針對(duì)棧頂指針的自動(dòng)恢復(fù)。
3. 如權(quán)利要求1或2所述的一種支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法,其特征在 于在所述步驟1)中,在指令預(yù)取過程中設(shè)置返回地址棧,并對(duì)預(yù)取指令進(jìn)行動(dòng)態(tài)預(yù)譯碼, 若當(dāng)前指令為函數(shù)調(diào)用指令,將函數(shù)的返回地址壓入返回地址棧;若當(dāng)前指令為函數(shù)返回 指令,從返回地址棧中獲得返回地址,跳入返回函數(shù)開始預(yù)取指令。
4. 如權(quán)利要求1或2所述的一種支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法,其特征在 于在所述步驟2)中,所述返回地址棧為循環(huán)堆棧結(jié)構(gòu),棧頂指針指示返回地址棧當(dāng)前寫 入和讀取的位置,棧頂指針在有效范圍內(nèi)循環(huán)更新,在指令預(yù)取的同時(shí)控制棧頂指針的更 新和返回地址棧對(duì)應(yīng)位置的入棧和出棧操作。
5. 如權(quán)利要求3所述的一種支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法,其特征在于 在所述步驟2)中,所述返回地址棧為循環(huán)堆棧結(jié)構(gòu),棧頂指針指示返回地址棧當(dāng)前寫入和 讀取的位置,棧頂指針在有效范圍內(nèi)循環(huán)更新,在指令預(yù)取的同時(shí)控制棧頂指針的更新和 返回地址棧對(duì)應(yīng)位置的入棧和出棧操作。
6. 如權(quán)利要求1或2所述的一種支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法,其特征在于在所述步驟3)中,程序遇到異常時(shí)產(chǎn)生流水線清空操作,流水線的各種狀態(tài)恢復(fù)為指令退休時(shí)的狀態(tài),利用退休指針恢復(fù)返回地址棧的棧頂指針,返回地址棧重新進(jìn)入正常工 作狀態(tài)。
7. 如權(quán)利要求5所述的一種支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法,其特征在于在所述步驟3)中,程序遇到異常時(shí)產(chǎn)生流水線清空操作,流水線的各種狀態(tài)恢復(fù)為指令退休時(shí)的狀態(tài),利用退休指針恢復(fù)返回地址棧的棧頂指針,返回地址棧重新進(jìn)入正常工作狀 態(tài)。
8. 如權(quán)利要求2所述的一種支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法,其特征在于在所述步驟4)中,后級(jí)流水線在函數(shù)調(diào)用指令和函數(shù)返回指令執(zhí)行時(shí)即對(duì)返回地址預(yù)測(cè)進(jìn)行檢驗(yàn)。
9. 如權(quán)利要求8所述的一種支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法,其特征在于在所述步驟4)中,當(dāng)流水線執(zhí)行過程中出現(xiàn)分支預(yù)測(cè)錯(cuò)誤,將返回地址棧棧頂指針更新為檢驗(yàn)指針,恢復(fù)操作無需等待當(dāng)前分支預(yù)測(cè)錯(cuò)誤指令退休時(shí)進(jìn)行,返回地址棧提前進(jìn)入正 常工作狀態(tài)。
全文摘要
一種支持自動(dòng)糾錯(cuò)功能的返回地址棧實(shí)現(xiàn)方法,所述的返回地址棧實(shí)現(xiàn)方法包括以下步驟1)在指令預(yù)取過程中對(duì)函數(shù)調(diào)用指令和函數(shù)返回指令進(jìn)行預(yù)譯碼,并根據(jù)預(yù)譯碼結(jié)果進(jìn)行函數(shù)返回地址信息的入棧和出棧操作;2)設(shè)置棧頂指針標(biāo)識(shí)指令預(yù)譯碼時(shí)返回地址棧的當(dāng)前操作的位置;3)采用退休指針記錄函數(shù)調(diào)用和函數(shù)返回指令退休后的返回地址棧狀態(tài),在流水線清空操作時(shí),利用退休指針對(duì)棧頂指針的自動(dòng)恢復(fù)。本發(fā)明能有效提高函數(shù)返回的預(yù)測(cè)精度、提升處理器的性能。
文檔編號(hào)G06F9/38GK101727312SQ20091020720
公開日2010年6月9日 申請(qǐng)日期2009年10月12日 優(yōu)先權(quán)日2009年1月22日
發(fā)明者嚴(yán)曉浪, 孟建熠, 葛海通, 龔帥帥 申請(qǐng)人:杭州中天微系統(tǒng)有限公司