專利名稱:一種跳轉指令編碼的方法和系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及處理器領域,具體涉及一種跳轉指令編碼的方法和系統(tǒng)。
背景技術:
目前,處理器性能損失的原因之一可能是循環(huán)指令的執(zhí)行,一個循環(huán)體包含N條指令,它需要被重復執(zhí)行多次。循環(huán)體最后一條指令可以用L00P_END表示,當在PIPELINE (指令流水線)的譯碼階段看到L00P_END時,如果此時才從MEMORY (存儲器)取L00P_BEGIN(循環(huán)體第一條指令),PIPELINE必須停下來等待MEMORY,等待的周期取決于MEMORY的速度和架構。對于常見的處理器,循環(huán)指令的使用頻率是非常頻繁的,所以這樣的開銷帶來的性能損失是非常大的?,F有的解決辦法有兩種,第一種是添加L00P_BUFFER(循環(huán)緩沖器),當循環(huán)體第一次執(zhí)行時,把循環(huán)體的指令保存到L00P_BUFFER,第二次執(zhí)行時就不需要從MEMORY取L00P_BEGIN,而是直接從BUFFER獲取,這樣PIPELINE就不需要停頓。 這種實現方案需要添加BUFFER (緩沖器)以及相應的硬件邏輯,電路也非常復雜,實現的代價大。第二種是添加計數器,比如添加一條專門的L00P_BEGIN指令,它包含循環(huán)體指令條數的信息,這樣從第一條開始計數,每執(zhí)行一條就減一,因而可以提前知道L00P_END到達,提前從MEMORY取指令,其間PIPELINE不需要停頓。這種方案同樣需要增加硬件邏輯,對于循環(huán)嵌套,需要的硬件資源更多,而且如果循環(huán)體指令條數小于N(N表示從MEMORY取指令需要的周數)時,這種方案不具有適應性。
發(fā)明內容
有鑒于此,本發(fā)明的主要目的在于提供一種跳轉指令編碼的方法和系統(tǒng),以簡化硬件邏輯,提高實現的可靠性和性能。為達到上述目的,本發(fā)明的技術方案是這樣實現的一種跳轉指令編碼的方法,該方法包括在執(zhí)行循環(huán)時,相對于操作周期,提前到內存中獲取循環(huán)開始指令;當循環(huán)體最后一條指令執(zhí)行完時,完成循環(huán)開始指令的獲取。所述相對于操作周期,提前到內存中獲取循環(huán)開始指令的方法為將循環(huán)體最后一條指令的標志位提前N周,并生成需要的執(zhí)行文件exe. bin ;所述N周對應于循環(huán)開始指令至循環(huán)體最后一條指令的操作周期。所述完成循環(huán)開始指令的獲取的過程包括所述exe. bin指令在被執(zhí)行時,硬件提前N周發(fā)現循環(huán)體最后一條指令,從而提前N周從存儲器MEMORY獲取該指令。該方法進一步包括涉及執(zhí)行循環(huán)的指令流水線PIPELINE在不需要等待的情況下繼續(xù)工作。該方法通過ASS匯編譯器實現。一種跳轉指令編碼的系統(tǒng),該系統(tǒng)包括操作周期提前單元、循環(huán)開始指令獲取單元;其中,所述操作周期提前單元,用于在執(zhí)行循環(huán)時,相對于操作周期,確認要提前到內存中獲取循環(huán)開始指令;所述循環(huán)開始指令獲取單元,用于在循環(huán)體最后一條指令執(zhí)行完時,完成循環(huán)開始指令的獲取。所述操作周期提前單元,相對于操作周期,提前到內存中獲取循環(huán)開始指令時,用于將循環(huán)體最后一條指令的標志位提前N周,并生成需要的執(zhí)行文件exe. bin ;所述N周對應于循環(huán)開始指令至循環(huán)體最后一條指令的操作周期。所述循環(huán)開始指令獲取單元完成循環(huán)開始指令的獲取時,用于觸發(fā)所述exe. bin指令的執(zhí)行,使硬件提前N周發(fā)現循環(huán)體最后一條指令,從而提前N周從MEMORY獲取該指令。該系統(tǒng)進一步包括涉及執(zhí)行循環(huán)的PIPELINE,用于在不需要等待的情況下繼續(xù)工作。該系統(tǒng)設置于ASS中。本發(fā)明跳轉指令編碼的方法和系統(tǒng),通過ASS匯編編碼的預處理,從軟件的層面簡化了硬件邏輯,保證不需要去添加額外的BUFFER和計數器等邏輯來解決循環(huán)折回時流水線需要停頓的問題,省去了很多的硬件邏輯和硬件資源,節(jié)省了面積和成本,使得實現簡單,也提高了實現方案的可靠性。
圖I為本發(fā)明實施例的跳轉指令編碼流程簡圖;圖2為本發(fā)明實施例的跳轉指令編碼系統(tǒng)圖。
具體實施例方式由于在循環(huán)折回時從MEMORY取L00P_BEGIN的指令需要消耗N個周期,如果在等到L00P_END指令時才開始去MEMORY取指令,那么流水線必須停頓N個周期,性能的損失很大。為了避免這種損失,可以在硬件中提前N個周期去MEMORY取指令,這樣當L00P_END執(zhí)行完時,L00P_BEGIN的指令也已經從MEMORY取回來了,使得PIPELINE不需要停頓。上述方案可以通過匯編譯器(ASS)來實現。ASS能夠將程序員寫的匯編指令編碼成二進制或十六進制。ASS在編碼時,可以將L00P_END的標志位提前N周(該周期即L00P_BEGIN至L00P_END的操作周期),生成需要的執(zhí)行文件exe. bin。exe. bin指令在被執(zhí)行時,硬件就能提前N周看到L00P_END,從而提前N周從MEMORY取該指令,消除PIPELINE的停頓,實現高性能。 程序員寫的匯編代碼指令序列可以例舉為InstO ;Instl ;Inst2 ;L00P_START ;Inst3 ;
Inst4 ;Inst5 ;Inst6 ;L00P_END其中,Inst2至Inst6表示循環(huán)體指令。ASS匯編后的機器碼序列可以例舉為00000001 ; 10000000 ;20000000 ;30000000 ;40000002 ;50000000 ;60000000 ;其中,L00P_MARKER(循環(huán)標簽)占用每條指令的低2bit,I表示L00P_BEGIN,2表示L00P_END,0表示沒有循環(huán)標簽。上述表示方式只是一種編碼方式之一,并不是唯一的??梢?,在編碼時將L00P_END提前了 2條指令。Inst6對應L00P_END,在機器碼中被編碼在了 Inst4上,提前了 2條指令。這個過程是編譯器自動完成的,程序員寫的循環(huán)體依舊是Inst2-Inst6。當機器碼指令被執(zhí)行時,當執(zhí)行到Inst4時,就看到了 L00P_END(即機器碼低2bit的值為2),這時就開始從MEMORY取Inst2指令。當執(zhí)行到Inst6時,Inst2就已經從MEMORY取出來了(這里假定從MEMORY取指令需要2周),指令就又從Inst2開始順序執(zhí)行。當執(zhí)行到Inst4時,又去MEMORY取Inst2,這樣就形成了 Inst2至Inst6的循環(huán)執(zhí)行,直到循環(huán)退出。由上述技術描述可見,本發(fā)明跳轉指令編碼的操作思路可以表示如圖I所示的流程,該流程包括以下步驟步驟110 :在執(zhí)行循環(huán)時,相對于操作周期,提前到內存中獲取循環(huán)開始指令。步驟120 :當循環(huán)體最后一條指令執(zhí)行完時,完成循環(huán)開始指令的獲取。需要說明的是,所述相對于操作周期,提前到內存中獲取循環(huán)開始指令的方法可以為將循環(huán)體最后一條指令的標志位提前N周,并生成需要的執(zhí)行文件exe.bin ;所述N周對應于循環(huán)開始指令至循環(huán)體最后一條指令的操作周期。并且,所述完成循環(huán)開始指令的獲取的過程可以包括所述exe. bin指令在被執(zhí)行時,硬件提前N周發(fā)現循環(huán)體最后一條指令,從而提前N周從MEMORY獲取該指令。還可以由涉及執(zhí)行循環(huán)的PIPELINE在不需要等待的情況下繼續(xù)工作。另外,本發(fā)明可以通過ASS匯編譯器實現。為了保證上述技術描述以及操作思路能夠順利實現,可以進行如圖2所示的設置。參見圖2,圖2為本發(fā)明實施例的跳轉指令編碼系統(tǒng)圖,該系統(tǒng)包括相連的操作周期提前單元、循環(huán)開始指令獲取單元。在實際應用時,操作周期提前單元能夠在執(zhí)行循環(huán)時,相對于操作周期,確認要提前到內存中獲取循環(huán)開始指令;循環(huán)開始指令獲取單元則能夠在循環(huán)體最后一條指令執(zhí)行完時,完成循環(huán)開始指令的獲取。需要說明的是,所述操作周期提前單元,相對于操作周期,提前到內存中獲取循環(huán)開始指令時,可以用于將循環(huán)體最后一條指令的標志位提前N周,并生成需要的執(zhí)行文件exe. bin ;所述N周對應于循環(huán)開始指令至循環(huán)體最后一條指令的操作周期。并且,所述循環(huán)開始指令獲取單元完成循環(huán)開始指令的獲取時,可以用于觸發(fā)所述exe. bin指令的執(zhí)行,使硬件提前N周發(fā)現循環(huán)體最后一條指令,從而提前N周從MEMORY獲取該指令。還可以進一步由涉及執(zhí)行循環(huán)的PIPELINE在不需要等待的情況下繼續(xù)工作。另外,本發(fā)明所述系統(tǒng)可以設置于ASS中。綜上所述可見,無論是方法還是系統(tǒng),本發(fā)明跳轉指令編碼的方法和系統(tǒng),通過ASS匯編編碼的預處理,從軟件的層面簡化了硬件邏輯,保證不需要去添加額外的BUFFER和計數器等邏輯來解決循環(huán)折回時流水線需要停頓的問題,省去了很多的硬件邏輯和硬件資源,節(jié)省了面積和成本,使得實現簡單,也提高了實現方案的可靠性。
以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。
權利要求
1.一種跳轉指令編碼的方法,其特征在于,該方法包括 在執(zhí)行循環(huán)時,相對于操作周期,提前到內存中獲取循環(huán)開始指令; 當循環(huán)體最后一條指令執(zhí)行完時,完成循環(huán)開始指令的獲取。
2.根據權利要求I所述的方法,其特征在于,所述相對于操作周期,提前到內存中獲取循環(huán)開始指令的方法為 將循環(huán)體最后一條指令的標志位提前N周,并生成需要的執(zhí)行文件exe. bin ; 所述N周對應于循環(huán)開始指令至循環(huán)體最后一條指令的操作周期。
3.根據權利要求2所述的方法,其特征在于,所述完成循環(huán)開始指令的獲取的過程包、括 所述exe. bin指令在被執(zhí)行時,硬件提前N周發(fā)現循環(huán)體最后一條指令,從而提前N周從存儲器MEMORY獲取該指令。
4.根據權利要求I至3任一項所述的方法,其特征在于,該方法進一步包括 涉及執(zhí)行循環(huán)的指令流水線PIPELINE在不需要等待的情況下繼續(xù)工作。
5.根據權利要求4所述的方法,其特征在于,該方法通過ASS匯編譯器實現。
6.一種跳轉指令編碼的系統(tǒng),其特征在于,該系統(tǒng)包括操作周期提前單元、循環(huán)開始指令獲取單元;其中, 所述操作周期提前單元,用于在執(zhí)行循環(huán)時,相對于操作周期,確認要提前到內存中獲取循環(huán)開始指令; 所述循環(huán)開始指令獲取單元,用于在循環(huán)體最后一條指令執(zhí)行完時,完成循環(huán)開始指令的獲取。
7.根據權利要求6所述的系統(tǒng),其特征在于,所述操作周期提前單元,相對于操作周期,提前到內存中獲取循環(huán)開始指令時,用于 將循環(huán)體最后一條指令的標志位提前N周,并生成需要的執(zhí)行文件exe. bin ; 所述N周對應于循環(huán)開始指令至循環(huán)體最后一條指令的操作周期。
8.根據權利要求7所述的系統(tǒng),其特征在于,所述循環(huán)開始指令獲取單元完成循環(huán)開始指令的獲取時,用于 觸發(fā)所述exe. bin指令的執(zhí)行,使硬件提前N周發(fā)現循環(huán)體最后一條指令,從而提前N周從MEMORY獲取該指令。
9.根據權利要求6至8任一項所述的系統(tǒng),其特征在于,該系統(tǒng)進一步包括涉及執(zhí)行循環(huán)的PIPELINE,用于在不需要等待的情況下繼續(xù)工作。
10.根據權利要求9所述的系統(tǒng),其特征在于,該系統(tǒng)設置于ASS中。
全文摘要
本發(fā)明公開了一種跳轉指令編碼的方法和系統(tǒng),均可在執(zhí)行循環(huán)時,相對于操作周期,提前到內存中獲取循環(huán)開始指令;當循環(huán)體最后一條指令執(zhí)行完時,完成循環(huán)開始指令的獲取。本發(fā)明方法和系統(tǒng),通過匯編編碼的預處理,從軟件的層面簡化了硬件邏輯,保證不需要去添加額外的邏輯來解決循環(huán)折回時流水線需要停頓的問題,省去了很多的硬件邏輯和硬件資源,節(jié)省了面積和成本,使得實現簡單,也提高了實現方案的可靠性。
文檔編號G06F9/32GK102736894SQ201110081939
公開日2012年10月17日 申請日期2011年4月1日 優(yōu)先權日2011年4月1日
發(fā)明者保羅帕瓦旺薩克, 曹慶新, 黎立煌 申請人:中興通訊股份有限公司