本發(fā)明涉及硬件循環(huán)處理技術(shù),尤其涉及一種針對處理器或DSP取址級架構(gòu)進行改進的硬件循環(huán)處理技術(shù)。
背景技術(shù):
在處理器或DSP中,循環(huán)是一種很常見的程序類型?,F(xiàn)有技術(shù)中,通常利用普通的跳轉(zhuǎn)指令并配合使用通用寄存器來實現(xiàn)循環(huán)處理。但是這種處理方式在循環(huán)體的最后,需要使用額外的指令來判斷循環(huán)是否結(jié)束,如果沒有結(jié)束還需要使用跳轉(zhuǎn)指令跳轉(zhuǎn)到循環(huán)體的第一條指令,這樣會給循環(huán)體帶來不少的附加周期。尤其在循環(huán)嵌套的情況下,運算效率會因此大大受損。
為了提高循環(huán)的執(zhí)行效率,目前,有些處理器或DSP中開始使用硬件循環(huán)的方式對循環(huán)進行處理。即通過硬件來自動判斷循環(huán)是否結(jié)束,并跳轉(zhuǎn)到循環(huán)體的第一條指令。這種方式雖然不再使用額外的判斷指令以及跳轉(zhuǎn)指令,但是由于程序存儲器存在延時,所以每次從循環(huán)體最后一條指令跳轉(zhuǎn)至循環(huán)體第一條指令的時候,仍需要額外的等待周期,才能讀取到循環(huán)體的第一條指令。在這種情況下,如果循環(huán)體中指令比較少,這些額外的等待周期依舊會對循環(huán)的效率產(chǎn)生嚴重影響。
針對現(xiàn)有技術(shù)的問題,本發(fā)明公開的處理器或DSP的硬件循環(huán)處理方法和系統(tǒng),可以消除每次從循環(huán)體最后一條指令跳轉(zhuǎn)至循環(huán)體第一條指令時的額外的等待周期,實現(xiàn)循環(huán)的零延時跳轉(zhuǎn),能夠大幅度提高循環(huán)的效率。并且可以由此減少程序存儲器的讀取次數(shù),降低處理器或DSP功耗。
技術(shù)實現(xiàn)要素:
為了解決現(xiàn)有技術(shù)存在的不足,本發(fā)明的目的在于提供一種處理器的硬件循環(huán)處理方法及系統(tǒng)。
首先,為實現(xiàn)上述目的,本發(fā)明提出一種處理器硬件循環(huán)處理系統(tǒng)。系統(tǒng)包括程序存儲器、取指單元、循環(huán)緩存、選擇模塊、譯碼單元和執(zhí)行單元;
所述程序存儲器連接取指單元的輸入端,所述取指單元的指令輸出端連接選擇模塊的一個輸入端,選擇模塊的另一個輸入端連接循環(huán)緩存的輸出端;選擇模塊的輸出端連接譯碼單元的輸入端;所述譯碼單元的輸出端連接執(zhí)行單元的輸入端;
所述取指單元還與譯碼單元的第一控制信號端連接,所述循環(huán)緩存還與譯碼單元的第二控制信號端連接。
進一步的,上述系統(tǒng)中,所述譯碼單元的第一控制信號端用于在譯碼單元未讀取到循環(huán)節(jié)點指令時,控制所述取指單元通過選擇模塊向譯碼單元)輸出需要進行譯碼的下一條指令;同時,所述譯碼單元在讀取到新循環(huán)的第一條指令后,還通過第一控制信號端控制所述取指單元通過選擇模塊同步向循環(huán)緩存輸出新循環(huán)體的第一條至第N條指令;所述循環(huán)緩存用于接收新循環(huán)體的前N條指令,并將接受的N條指令壓入堆棧進行存儲;其中,所述的循環(huán)節(jié)點指令指循環(huán)進行的過程中,循環(huán)體中的最后一條指令;所述的循環(huán)緩存接收的新循環(huán)體內(nèi)指令的條數(shù)N=min{n,m}, n為循環(huán)體中指令條數(shù),m為指令從程序存儲器到達譯碼單元所經(jīng)歷的時鐘周期數(shù)減1;
所述譯碼單元的第二控制信號端用于在譯碼單元讀取到循環(huán)節(jié)點指令時,控制循環(huán)緩存通過選擇模塊依次向譯碼單元輸出當前循環(huán)體的第一條至第N條指令。
這樣,可以根據(jù)譯碼單元需要進行譯碼的指令,通過選擇模塊根據(jù)該條指令在循環(huán)體中所處的位置,判斷是直接從循環(huán)緩存中讀取指令,還是需要一級一級的從程序存儲器中讀取指令??刂蒲h(huán)體內(nèi)部的前N條指令直接通過取指級的循環(huán)緩存出輸至譯碼單元,從而避免循環(huán)中,每次從程序存儲器中一級一級向譯碼單元傳遞指令而造成的額外的等待周期。本發(fā)明在實現(xiàn)硬件循環(huán)的零延時跳轉(zhuǎn)的同時,也減少了對程序存儲器的訪問,從而降低功耗。
進一步的 ,上述系統(tǒng)中,所述的循環(huán)緩存為由兩個以上指令緩存構(gòu)成的堆棧,堆棧的層數(shù)為指令緩存的個數(shù),指令緩存的個數(shù)為所述處理器所支持的循環(huán)嵌套的層數(shù),堆棧的讀取方式為先進后出。
這里,通過堆棧,將最外一層循環(huán)所對應(yīng)的N條指令壓在堆棧的最底層,將嵌套的最內(nèi)一層是循環(huán)內(nèi)的N條指令置于堆棧的頂層。讀取指令時,根據(jù)循環(huán)的結(jié)構(gòu),先完成對嵌套的最內(nèi)一層循環(huán)處理完畢后,再對其外一層循環(huán)的指令進行處理。通過堆棧先進后出的讀取方式,使得循環(huán)的每一層都按照其所處的嵌套的位置進行處理。不至于出現(xiàn)運算順序上的錯誤。
進一步的,上述系統(tǒng)中,所述的指令緩存為一個大小為N的存儲器,所述的每一個存儲器中按照地址從0至N-1的順序依次存儲對應(yīng)循環(huán)體中的第一條至第N條指令。
上述系統(tǒng)中,所述的循環(huán)緩存中的存儲器為大小為N條指令長度的RAM(Random-Access Memory,隨機存取存儲器)或寄存器。
其次,為實現(xiàn)上述目的,還提出一種處理器流水線取指級處理方法,本發(fā)明所提供的取指級方法用于替換現(xiàn)有流水線中取指級的處理方法。本方法中,取指級對上一級輸入的每一條指令按照以下步驟處理:
第一步,判斷從上一級輸入的指令是否為新循環(huán)體的第一條指令,若是,則由取指級依次存儲并同步向下一級輸出當前循環(huán)體中的第一至第N條指令;否則,跳轉(zhuǎn)至第三步;
這一步的判斷由位于取指級下一級的譯碼單元進行,并通過譯碼單元的兩個控制信號端分別向去址單元和循環(huán)緩存發(fā)送控制信號而實現(xiàn)。
其中,N=min{n,m}, n為當前循環(huán)體中指令的條數(shù),m為處理器流水線中從讀取存儲器中到譯碼級所需要經(jīng)歷的時鐘周期數(shù)減1;
第二步,若指令是否為循環(huán)體的最后一條指令,且循環(huán)還未結(jié)束,則將指級內(nèi)存儲的當前循環(huán)體中的第一至第N條指令依次向下一級輸出后,等待接收到上一級輸入新指令并跳轉(zhuǎn)至第一步;否則,跳轉(zhuǎn)至第三步;
第三步,由取指級將其從上一級得到的指令向下一級輸出后,結(jié)束本輪取指級處理流程。
取指級的一輪處理流程指向其下一級輸出一條指令的過程,對應(yīng)處理器的一個時鐘周期。取指級每接收到一條指令都按照上述的步驟進行處理。
進一步的,上述方法中,所述的取指級包括一個深度為所處處理器所支持的循環(huán)嵌套的層數(shù)的堆棧,由所述堆棧按照如下步驟完成第一步中存儲當前循環(huán)體中的第一至第N條指令的操作:
步驟101,判斷指令是否為新循環(huán)體的第一條指令,若是,則將當前(堆棧中)存儲的所有的循環(huán)體的指令壓向下一層存儲單元(即壓向堆棧的下一層)后,跳轉(zhuǎn)至步驟102;否則,直接跳轉(zhuǎn)至步驟102;
步驟102,在最上一層存儲單元中(即堆棧的最上一層中),按照地址從0至N-1的順序依次存儲當前循環(huán)體中的第一條至第N條指令。
同時,上述方法中,所述的堆棧按照如下步驟完成上述第二步中輸出取指級內(nèi)存儲的當前循環(huán)體中的第一至第N條指令的操作:
步驟201,判斷指令是否為當前循環(huán)體的第N條指令,若是,且循環(huán)體已經(jīng)結(jié)束,則將當前堆棧中存儲的所有的循環(huán)體的指令提向上一層存儲單元(即向堆棧的上方上提一層)后,跳轉(zhuǎn)至步驟202;否則,直接跳轉(zhuǎn)至步驟202;
步驟202,從最上一層存儲單元(即堆棧的最上一層)中,按照地址從0至N-1的順序依次輸出當前循環(huán)體中的第一條至第N條指令。
有益效果
本發(fā)明,在原有的DSP的取指單元中增加了循環(huán)緩存,由循環(huán)緩存存儲并輸出對應(yīng)循環(huán)體中的前N條指令。通過這樣的方式,消除循環(huán)處理過程中,每次從循環(huán)體最后一條指令跳轉(zhuǎn)至循環(huán)體第一條指令時,由于程序存儲器讀出數(shù)據(jù)的延時而造成的額外的等待周期,從而實現(xiàn)硬件循環(huán)的零延時跳轉(zhuǎn)。同時,由于循環(huán)緩存的設(shè)計,有效的減少了處理器中對程序存儲器的訪問,從而降低功耗。
本發(fā)明所述的方法和處理器系統(tǒng)中,在程序首次進入循環(huán)后,將該循環(huán)體中的前N條指令存入該層循環(huán)對應(yīng)的循環(huán)緩存中。存入循環(huán)緩存的指令個數(shù)N等于從發(fā)出程序存儲器讀命令到指令到達譯碼單元的時鐘周期數(shù)減1,但不會超過循環(huán)體的指令個數(shù)。每次從循環(huán)體最后一條指令跳轉(zhuǎn)至循環(huán)體第一條指令時都需要額外的等待周期N,因而在預(yù)先存儲這N個周期的指令后,當循環(huán)體在執(zhí)行完最后一條指令時,就可以直接跳轉(zhuǎn)至第N+1條指令,而無需額外的等待周期。
進一步的,本發(fā)明針對循環(huán)嵌套的狀況,通過堆棧,將最外一層循環(huán)所對應(yīng)的N條指令壓在堆棧的最底層,將嵌套的最內(nèi)一層是循環(huán)內(nèi)的N條指令置于堆棧的頂層。在讀取指令時,根據(jù)循環(huán)的結(jié)構(gòu),先完成對最內(nèi)一層循環(huán)的處理,再對其外一層循環(huán)的指令進行處理。由于堆棧具有先進后出的讀取方式,最內(nèi)一層循環(huán)的指令始終會最先被處理,因而,這樣的設(shè)計可以保證循環(huán)的每一層都按照其所處的嵌套的位置進行,在保證運算順序正確的同時,也省去了運算過程中額外的等待周期。
利用本方法設(shè)計的系統(tǒng)不僅可實現(xiàn)硬件循環(huán)的零延時跳轉(zhuǎn),而且可減少程序存儲器的讀取次數(shù),尤其是在循環(huán)嵌套的情況下可大幅度減少存儲器讀取次數(shù),有效降低功耗
本發(fā)明的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發(fā)明而了解。
附圖說明
附圖用來提供對本發(fā)明的進一步理解,并且構(gòu)成說明書的一部分,并與本發(fā)明的實施例一起,用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的限制。在附圖中:
圖1為根據(jù)本發(fā)明的流水線架構(gòu)圖;
圖2為根據(jù)本發(fā)明的循環(huán)緩存架構(gòu)框圖;
圖3為無循環(huán)緩存狀態(tài)下的循環(huán)執(zhí)行的示意圖;
圖4為加入循環(huán)緩存狀態(tài)下的循環(huán)執(zhí)行的示意圖。
具體實施方式
以下結(jié)合附圖對本發(fā)明的優(yōu)選實施例進行說明,應(yīng)當理解,此處所描述的優(yōu)選實施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。在任意的處理器或DSP中均可按照本設(shè)計提供的方法完成循環(huán)緩存的設(shè)計。
圖1為根據(jù)本發(fā)明的流水線架構(gòu)圖。圖中所示的處理器或DSP包括依次順序級聯(lián)的程序存儲器100、取指單元101、譯碼單元103和執(zhí)行單元108分別對應(yīng)該處理器或DSP的四級流水線F0~E0。F0為指令讀取的第一級流水線,取指單元101在這一級流水線發(fā)出程序存儲器100的讀請求。F1為指令讀取的第二級流水線,在這一級流水線,程序總線104返回F0流水線所讀指令給取指單元101,并且和循環(huán)緩存102輸出的指令進行選擇之后,送給譯碼單元103。D0為指令譯碼流水線,用于對指令進行譯碼。E0為指令執(zhí)行流水線,用于執(zhí)行完成譯碼的指令。
本實施例提供的處理器硬件循環(huán)處理系統(tǒng)與現(xiàn)有系統(tǒng)的區(qū)別在于,本系統(tǒng)中,取指單元101的指令輸出端和所述譯碼單元103的指令輸入端之間還包括選擇模塊107和循環(huán)緩存102;所述選擇模塊107的兩個輸入端分別連接取指單元101和循環(huán)緩存102的輸出端。也就是說,本實施例中的4級流水線處理器包括程序存儲器100、取指單元101、循環(huán)緩存102、選擇模塊107、譯碼單元103和執(zhí)行單元108,共6個模塊。其中的程序存儲器100連接取指單元101的輸入端,所述取指單元101的指令輸出端連接選擇模塊107的一個輸入端,選擇模塊107的另一個輸入端連接循環(huán)緩存102的輸出端;選擇模塊107的輸出端連接譯碼單元103的輸入端;所述譯碼單元103的輸出端連接執(zhí)行單元108的輸入端;
這種系統(tǒng)結(jié)構(gòu)下,所述取指單元101還與譯碼單元103的第一控制信號端105連接,所述循環(huán)緩存102還與譯碼單元103的第二控制信號端106連接。
所述譯碼單元103的第一控制信號端105用于在譯碼單元103未讀取到循環(huán)節(jié)點指令時,控制所述取指單元101通過選擇模塊107向譯碼單元103輸出需要進行譯碼的下一條指令;同時,所述譯碼單元103在讀取到新循環(huán)的第一條指令后,還通過第一控制信號105控制所述取指單元101通過選擇模塊107同步向循環(huán)緩存102輸出新循環(huán)體的第一條至第N條指令;所述循環(huán)緩存102用于接收新循環(huán)體的前N條指令,并將接受的N條指令壓入堆棧進行存儲;其中,所述的循環(huán)節(jié)點指令指循環(huán)進行的過程中,循環(huán)體中的最后一條指令;所述的循環(huán)緩存102接收的新循環(huán)體內(nèi)指令的條數(shù)N=min{n,m}, n為循環(huán)體中指令條數(shù),m為指令從程序存儲器100到達譯碼單元103所經(jīng)歷的時鐘周期數(shù)減1;
所述譯碼單元103的第二控制信號端106用于在譯碼單元103讀取到循環(huán)節(jié)點指令時,控制循環(huán)緩存102通過選擇模塊107依次向譯碼單元103輸出當前循環(huán)體的第一條至第N條指令。
由于當前實施例中,從發(fā)出程序存儲器100的讀請求到指令到達D0流水線需要2個周期,因此只需要將每層循環(huán)體的第一條指令存入對應(yīng)的循環(huán)緩存102即可,即N等于1。圖1中可以看到,指令在D0流水線完成譯碼之后,如果判斷為循環(huán)體內(nèi)部指令并且為第一次進入循環(huán),此時會將送給譯碼單元103的指令存入循環(huán)緩存102。
所述的循環(huán)緩存102為由兩個以上指令緩存構(gòu)成的堆棧,堆棧的層數(shù)為指令緩存的個數(shù),指令緩存的個數(shù)為所述處理器所支持的循環(huán)嵌套的層數(shù),堆棧的讀取方式為先進后出。
本實施例中,循環(huán)緩存102的結(jié)構(gòu)如圖2所示。假設(shè)當前的處理器支持3層硬件循環(huán)嵌套,而且根據(jù)前面的描述,需要將每層循環(huán)體的第一條指令存入對應(yīng)的循環(huán)緩存102,因此循環(huán)緩存102實際上是一個深度為3的堆棧,每層堆棧存放對應(yīng)層的硬件循環(huán)的第一條指令。每進入一個新的硬件循環(huán),都會將循環(huán)體的第一條指令壓入指令緩存0,并同時將指令緩存0和指令緩存1中的有效指令分別壓入指令緩存1和指令緩存2(也就是說,圖2中,在指令緩存0中存放嵌套的最內(nèi)層循環(huán)的指令,在指令緩存1中存放嵌套的中間一層循環(huán)的指令,在指令緩存2中存放嵌套的最外層循環(huán)的指令)。每當執(zhí)行到硬件循環(huán)體的最后一條指令,會將指令緩存0中存放的指令彈出,并在下一個周期送入譯碼單元,同時將指令緩存2和指令緩存1中的有效指令壓入指令緩存1和指令緩存0。
上述的每一個指令緩存為一個大小為N的存儲器,所述的每一個存儲器中按照地址從0至N-1的順序依次存儲對應(yīng)循環(huán)體中的第一條至第N條指令。在本實施例中,也就是每個指令緩存剛好存儲一條指令,3個指令緩存構(gòu)成了一個深度為3的堆棧。
這里的每層指令緩存是一個大小為N(本實施例為中N=1)的存儲器,該存儲器可以用RAM或者寄存器實現(xiàn),用于在程序首次進入循環(huán)后,存儲該循環(huán)體中的前N條指令。存入循環(huán)緩存的指令個數(shù)N等于從發(fā)出程序存儲器讀命令到指令到達譯碼單元的時鐘周期數(shù)減1,但不會超過循環(huán)體的指令個數(shù)。根據(jù)前面循環(huán)緩存的描述,每層指令緩存的讀寫地址都是按照0~N-1的順序變換的。
下面詳細介紹圖1所示的實施例的循環(huán)緩存102的操作過程。
取指單元101發(fā)出程序存儲器100的讀請求后,經(jīng)過2個周期,讀取的指令到達D0流水線。在譯碼單元103完成譯碼之后,如果判斷為循環(huán)體內(nèi)部指令并且為第一次進入循環(huán),將該指令送入執(zhí)行單元108的同時,需要將該指令壓入循環(huán)緩存102。當譯碼單元103判斷譯碼指令為循環(huán)體的最后一條指令,并且循環(huán)沒有結(jié)束,取指單元101將發(fā)出對程序存儲器的讀請求,且讀取的指令為循環(huán)體的第2條指令。由于新讀取的指令需要2個周期到達D0流水線,因此在第一個時鐘周期將從循環(huán)緩存102中取出循環(huán)體的第一條指令并進行譯碼,第二個周期完成新取回的循環(huán)體的第二條指令的譯碼。
需要注意的是,如果循環(huán)體只有一條指令,除第一次循環(huán)外,之后的每次循環(huán)都將從循環(huán)緩存102中讀取循環(huán)體指令,無需對程序存儲器100進行反復(fù)的讀操作。因為在程序首次進入循環(huán)后,需要將該循環(huán)體中的前N條指令存入該層循環(huán)對應(yīng)的循環(huán)緩存中。存入循環(huán)緩存的指令個數(shù)N等于從發(fā)出程序存儲器讀命令到指令到達譯碼單元的時鐘周期數(shù)減1。如果循環(huán)體的指令數(shù)小于或等于N,則只在首次循環(huán)的時候需要從程序存儲器100讀取循環(huán)體指令并存入循環(huán)緩存102,之后便可從循環(huán)緩存102讀取全部循環(huán)體指令,直到循環(huán)結(jié)束。如果循環(huán)體的指令個數(shù)大于N,當再次進入循環(huán)后,首先從循環(huán)緩存讀取之前存入的N條指令,直到從程序存儲器讀回的循環(huán)體的第N+1條指令返回譯碼單元。這樣便可以實現(xiàn)硬件循環(huán)的零延時跳轉(zhuǎn)。
也就是說,對于從讀取存儲器中到譯碼級需要經(jīng)歷m+1個時鐘周期的處理器流水線來說,其取指級按照如下步驟輸出指令:
第一步,判斷從上一級輸如至取指級的指令是否為新循環(huán)體的第一條指令,若是,則由取指級依次存儲并同步向下一級(即譯碼級)輸出當前循環(huán)體中的第一至第N條指令;否則,跳轉(zhuǎn)至第三步;
其中,N=min{n,m}, n為當前循環(huán)體中指令的條數(shù),m為處理器流水線中從讀取存儲器中到譯碼級所需要經(jīng)歷的時鐘周期數(shù)減1;
第二步,若指令是否為循環(huán)體的最后一條指令,且循環(huán)還未結(jié)束,則由取指級依次向下一級(即譯碼級)輸出取指級內(nèi)存儲的當前循環(huán)體中的第一至第N條指令,輸出完畢后等待接收到上一級輸入新指令再跳轉(zhuǎn)至第一步;否則,跳轉(zhuǎn)至第三步;
第三步,由取指級向下一級(即譯碼級)輸出其從上一級得到的指令,結(jié)束本輪取指級處理流程。
其中,所述的取指級包括一個深度為所處處理器所支持的循環(huán)嵌套的層數(shù)的堆棧,由所述堆棧按照如下步驟進行上述第一步中的存儲當前循環(huán)體中的第一至第N條指令的操作:
步驟101,判斷指令是否為新循環(huán)體的第一條指令,若是,則將當前堆棧中存儲的所有的循環(huán)體的指令向堆棧的深處下壓一層(即將原先存儲在第一層存儲單元中的指令壓向第二層存儲單元,將原先存儲在第二層存儲單元中的指令壓向第三層存儲單元,依次類推),之后跳轉(zhuǎn)至步驟102;否則,直接跳轉(zhuǎn)至步驟102;
步驟102,在堆棧的最上一層中(即最上一層存儲單元中),按照地址從0至N-1的順序依次存儲當前循環(huán)體中的第一條至第N條指令。
同時,所述的堆棧按照如下步驟完成上述第二步中輸出取指級內(nèi)存儲的當前循環(huán)體中的第一至第N條指令的操作:
步驟201,判斷指令是否為當前循環(huán)體的第N條指令,若是,且循環(huán)體已經(jīng)結(jié)束,則將當前堆棧中存儲的所有的循環(huán)體的指令向堆棧的上方上提一層(即,將原先存儲在第三層存儲單元中的指令提至第二層,將原先存儲在第二層存儲單元中的指令提至第一層,依次類推),之后跳轉(zhuǎn)至步驟102;否則,直接跳轉(zhuǎn)至步驟202;
步驟202,從最上一層存儲單元中(即堆棧的最上一層),按照地址從0至N-1的順序依次輸出當前循環(huán)體中的第一條至第N條指令。
對比圖3所示的無循環(huán)緩存狀態(tài)下的循環(huán)執(zhí)行狀態(tài)過程不難發(fā)現(xiàn),由于程序存儲器存在延時,所以每次從循環(huán)體最后一條指令跳轉(zhuǎn)至循環(huán)體第一條指令的時候,需要插入一個周期的氣泡,讀取的循環(huán)體的第一條指令才能到達D0流水線。因此在循環(huán)體指令比較少,或者循環(huán)嵌套的情況下,這個插入的氣泡對程序執(zhí)行的效率會有比較大的影響。
在圖4中增加了循環(huán)緩存后,原先圖3中插入的氣泡被從循環(huán)緩存102中讀取的循環(huán)體的第一條指令所代替,實現(xiàn)了硬件循環(huán)的零延時跳轉(zhuǎn)。同時利用本方法還可減少程序存儲器的讀取次數(shù),尤其是在循環(huán)嵌套的情況下可大幅度減少存儲器讀取次數(shù),有效降低功耗。
通過本實施例可知,循環(huán)緩存是一個深度為M的堆棧,M的大小為該處理器支持的硬件循環(huán)的嵌套層數(shù),每一層堆棧對應(yīng)方法流程中描述的一層存儲單元,即圖2中的一個指令緩存。每進入一個新的循環(huán),都會將新循環(huán)的前N條指令按照指令順序存入指令緩存0,并同時將指令緩存0和指令緩存1中的有效指令壓入指令緩存1和指令緩存2。每當執(zhí)行到硬件循環(huán)體的最后一條指令,會將指令緩存0中存放的指令按照順序彈出,并送入譯碼單元,等待指令緩存0中所有指令彈出之后,將指令緩存2和指令緩存1中的有效指令壓入指令緩存1和指令緩存0。
這樣,通過堆棧,將最外一層循環(huán)所對應(yīng)的N條指令壓在堆棧的最底層,將嵌套的最內(nèi)一層是循環(huán)內(nèi)的N條指令置于堆棧的頂層。在讀取指令時,根據(jù)循環(huán)的結(jié)構(gòu),先完成對最內(nèi)一層循環(huán)的處理,再對其外一層循環(huán)的指令進行處理。由于堆棧具有先進后出的讀取方式,最內(nèi)一層循環(huán)的指令始終會最先被處理,因而,這樣的設(shè)計可以保證循環(huán)的每一層都按照其所處的嵌套的位置進行,在保證運算順序正確的同時,也省去了運算過程中額外的等待周期。
本文公開的處理器或DSP的硬件循環(huán)處理方法和系統(tǒng),通過在原有的取指單元中增加循環(huán)緩存,可以消除每次從循環(huán)體最后一條指令跳轉(zhuǎn)至循環(huán)體第一條指令時的額外的等待周期。本方法設(shè)計簡單,在原有系統(tǒng)中增加很少的硬件的資源,便可實現(xiàn)硬件循環(huán)的零延時跳轉(zhuǎn)。另外,本方法還能夠減少取指單元對程序存儲器的訪問,從而降低功耗。
本領(lǐng)域普通技術(shù)人員可以理解:以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,盡管參照前述實施例對本發(fā)明進行了詳細的說明,對于本領(lǐng)域的技術(shù)人員來說,其依然可以對前述各實施例記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。