用于處理器指令緩沖與循環(huán)緩沖的裝置及其操作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及處理器設(shè)計(jì)領(lǐng)域,尤其涉及一種用于處理器指令緩沖與循環(huán)緩沖的裝 置及該裝置的操作方法。
【背景技術(shù)】
[0002] 現(xiàn)代微處理器一般采用多級(jí)流水的方式執(zhí)行指令。典型的超長(zhǎng)指令字結(jié)構(gòu)的處理 器流水線一般包括取值、拆包、譯碼、執(zhí)行、寫回幾部分。從指令高速緩沖存儲(chǔ)器(Cache)中 取回指令后,一般會(huì)存入指令緩沖器中。通過(guò)從指令緩沖器讀取指令,進(jìn)行指令的拆包、譯 碼等操作。指令Cache的訪問頻率很高,消耗的功耗也很大?,F(xiàn)代微處理器越來(lái)越多地應(yīng) 用到電池供電的設(shè)備中,因而,處理器的低功耗設(shè)計(jì)也越來(lái)越重要。
[0003] 在嵌入式應(yīng)用程序中,圖像處理、視頻編解碼等數(shù)據(jù)密集型應(yīng)用占比很高。在這些 應(yīng)用的核心代碼中,循環(huán)所占比重也很大。因而,若處理器在執(zhí)行循環(huán)時(shí),能夠?qū)⒀h(huán)指令 保存到處理器內(nèi)核之中,進(jìn)而可以關(guān)閉取指令單元,并減少對(duì)指令Cache的訪問次數(shù),就能 降低取指令的功耗。
[0004] 現(xiàn)有技術(shù)中,一般采用在處理器內(nèi)部添加循環(huán)緩沖器的方法來(lái)保存循環(huán)體,以降 低循環(huán)執(zhí)行時(shí)對(duì)指令Cache的訪問次數(shù),進(jìn)而達(dá)到降低功耗的目的。
[0005] 現(xiàn)有的循環(huán)緩沖器技術(shù)解決方案中,大多數(shù)都只能存儲(chǔ)單個(gè)的循環(huán)體,不支持嵌 套循環(huán),也沒有對(duì)處理器中原有指令緩沖器和新增的循環(huán)緩沖器如何交替工作提出對(duì)應(yīng)的 解決方案。
[0006] 專利CN201310100176.X《一種循環(huán)緩沖裝置以及循環(huán)緩沖方法》中,重點(diǎn)描述了 如何用硬件實(shí)現(xiàn)循環(huán)體的識(shí)別,然后加載并讀取循環(huán)體。但其也存在如下缺點(diǎn):
[0007] 1.循環(huán)緩沖器中只能存放單個(gè)的循環(huán)體,不支持嵌套循環(huán)。
[0008] 2.沒有說(shuō)明指令緩沖器與循環(huán)緩沖器的切換方法。
[0009] 3.沒有提出對(duì)變長(zhǎng)指令,或超長(zhǎng)指令字的處理器的支持方法。
【發(fā)明內(nèi)容】
[0010] 為了降低循環(huán)執(zhí)行時(shí)對(duì)指令Cache的訪問次數(shù),從而降低處理器的取指令功耗, 本發(fā)明改進(jìn)了循環(huán)緩沖器的設(shè)計(jì)方法,提供了一種適用于VLIW:(VeryLongInstruction Word,超長(zhǎng)指令字)處理器或部分變長(zhǎng)指令編碼(即指令編碼的長(zhǎng)度為指令尋址寬度的整 數(shù)倍)處理器的循環(huán)緩沖器設(shè)計(jì)方法。
[0011] 為實(shí)現(xiàn)上述目的,本發(fā)明的一個(gè)方面提供了一種用于處理器指令緩沖與循環(huán)緩沖 的裝置,包括:指令緩沖器IB、對(duì)齊緩沖器AB、循環(huán)緩沖器LB、以及多路選擇器MUX2_1。并 且提供了多種實(shí)施方式。其中,指令緩沖器與對(duì)齊緩沖器相連,對(duì)齊緩沖器與循環(huán)緩沖器相 連,對(duì)齊緩沖器和循環(huán)緩沖器都與多路選擇器相連。
[0012] 處理器從指令存儲(chǔ)器中取回來(lái)的指令包可以直接存入對(duì)齊緩沖器或指令緩沖器 中。處理器啟動(dòng)時(shí),從對(duì)齊緩沖器中讀取指令,根據(jù)指令編碼的特點(diǎn)對(duì)指令包進(jìn)行拆包,得 到執(zhí)行包。執(zhí)行過(guò)程中,若循環(huán)緩沖器使能(lb_en)有效,進(jìn)而判斷循環(huán)緩沖器的狀態(tài),若 還未加載循環(huán)體,則將執(zhí)行包的地址與循環(huán)體的首尾地址進(jìn)行比較,若大于等于首地址,小 于等于尾地址,則說(shuō)明當(dāng)前拆包的指令為循環(huán)體內(nèi)的指令,則將其從對(duì)齊緩沖器讀出的同 時(shí),也寫入循環(huán)緩沖器中。直到執(zhí)行包地址等于循環(huán)體尾地址,則說(shuō)明循環(huán)體加載完成。循 環(huán)體加載完成后,切換讀緩沖器區(qū)標(biāo)志(reacLbuffer),從循環(huán)緩沖器中讀取指令,直到循 環(huán)體執(zhí)行完畢,再切換讀緩沖器區(qū)標(biāo)志,重新從對(duì)齊緩沖器中讀取指令。
[0013] 本發(fā)明另一方面提供了一種操作操作上述用于處理器指令緩沖與循環(huán)緩沖的裝 置的方法,包括:(1)從對(duì)齊緩沖器中讀取指令;(2)檢測(cè)循環(huán)緩沖器是否開啟,若沒有開 啟,繼續(xù)從對(duì)齊緩沖器中讀取下一條指令;若開啟了,進(jìn)一步判斷當(dāng)前拆包的指令地址是否 等于循環(huán)體的首執(zhí)行包的指令地址,若否,則繼續(xù)從對(duì)齊緩沖器中讀取下一條指令,若是, 開啟循環(huán)緩沖器加載模式;(3)循環(huán)緩沖器加載:從對(duì)齊緩沖器中讀取循環(huán)體指令送入后 續(xù)譯碼模塊的同時(shí),將讀取的指令同時(shí)也寫入循環(huán)緩沖器中;(4)判斷循環(huán)體加載是否完 成:若當(dāng)前拆包指令的地址等于循環(huán)體尾執(zhí)行包的地址,若是,循環(huán)體加載完畢,否則,繼續(xù) 循環(huán)緩沖器的加載。
[0014] 根據(jù)本發(fā)明的實(shí)施例,該方法還可以包括:(5)從循環(huán)緩沖器中讀取指令,送到 后續(xù)的譯碼模塊;以及(6)判斷循環(huán)體是否執(zhí)行完畢,如果循環(huán)體執(zhí)行完畢,則清空循環(huán)緩 沖器,切換讀取指令的位置到對(duì)齊緩沖器中。具體地,步驟(6)可以包括:首先判斷循環(huán)次 數(shù)是否大于1,若是,進(jìn)一步判斷當(dāng)前從循環(huán)緩沖器中讀取的拆包指令地址是否等于循環(huán)體 尾執(zhí)行包地址,若不是,則從循環(huán)緩沖器中繼續(xù)按順序讀取后續(xù)指令;否則,切換循環(huán)緩沖 器的讀指針,讀取循環(huán)體的首指令,并將循環(huán)次數(shù)減1。然后,再次通過(guò)循環(huán)次數(shù)判斷循環(huán)是 否執(zhí)行完畢:若循環(huán)次數(shù)等于1,進(jìn)一步判斷當(dāng)前從循環(huán)緩沖器中讀取的拆包指令地址是 否等于循環(huán)體尾執(zhí)行包地址,若不是,則從循環(huán)緩沖器中繼續(xù)按順序讀取后續(xù)指令,否則, 說(shuō)明最后一遍循環(huán)體執(zhí)行到最后一個(gè)執(zhí)行包,從循環(huán)緩沖器中讀取循環(huán)體數(shù)據(jù)完畢,清空 循環(huán)緩沖器,切換讀取指令的位置到對(duì)齊緩沖器中。
[0015] 根據(jù)本發(fā)明的指令緩沖器與循環(huán)緩沖器的裝置及其對(duì)循環(huán)緩沖器的處理方法,能 夠在指令拆包的過(guò)程中識(shí)別循環(huán)體指令,并且裝載進(jìn)入循環(huán)緩沖器中,在循環(huán)緩沖器裝載 完畢后,從循環(huán)緩沖器中讀取循環(huán)體指令并執(zhí)行,通過(guò)循環(huán)緩沖器指針的變換實(shí)現(xiàn)循環(huán)體 指令的反復(fù)執(zhí)行。當(dāng)循環(huán)體執(zhí)行完畢后,再次從對(duì)齊緩沖器中讀取指令。本發(fā)明能夠有效 的實(shí)現(xiàn)超長(zhǎng)指令字處理器的循環(huán)體加載,執(zhí)行等過(guò)程,能有效減少循環(huán)體執(zhí)行時(shí),訪問指令 Cache的次數(shù),從而大大降低處理器的取指令功耗。
【附圖說(shuō)明】
[0016]圖1是根據(jù)本發(fā)明第一實(shí)施例的用于處理器指令緩沖與循環(huán)緩沖的裝置的結(jié)構(gòu) 示意圖;
[0017] 圖2是根據(jù)本發(fā)明實(shí)施例的用于處理器指令緩沖與循環(huán)緩沖的裝置在執(zhí)行普通 指令與循環(huán)指令時(shí)的切換流程圖;
[0018]圖3是根據(jù)本發(fā)明實(shí)施例支持雙層嵌套循環(huán)的循環(huán)緩沖器控制邏輯的狀態(tài)機(jī)轉(zhuǎn) 換圖;
[0019]圖4是根據(jù)本發(fā)明第二實(shí)施例的用于處理器指令緩沖與循環(huán)緩沖的裝置的結(jié)構(gòu) 示意圖;
[0020] 圖5是根據(jù)本發(fā)明第三實(shí)施例的用于處理器指令緩沖與循環(huán)緩沖的裝置的結(jié)構(gòu) 不意圖;以及
[0021] 圖6是根據(jù)本發(fā)明第四實(shí)施例的用于處理器指令緩沖與循環(huán)緩沖的裝置的結(jié)構(gòu) 示意圖。
[0022] 附圖標(biāo)記說(shuō)明:
[0023]insn_pak:輸入指令包
[0024] lb_en :循環(huán)緩沖器使能信號(hào)
[0025] read_buffer :多路選擇器控制信號(hào)
[0026] exe_pak :輸出指令包
[0027]rst_n:復(fù)位信號(hào),低電平有效
【具體實(shí)施方式】
[0028] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,并參照 附圖,對(duì)本發(fā)明做進(jìn)一步詳細(xì)說(shuō)明。
[0029]圖1是根據(jù)本發(fā)明第一實(shí)施例的用于處理器指令緩沖與循環(huán)緩沖的裝置的結(jié)構(gòu) 示意圖。如圖1所示,該裝置包括:指令緩沖器(InstructionBuffer,IB) 101、對(duì)齊緩沖器 (AlignBuffer,AB) 102、循環(huán)緩沖器(LoopBuffer,LB) 103、以及多路選擇器(MUX2_1) 104。 IB的輸出端連接到AB的輸入端,AB的輸出端連接到LB的輸入端,AB的輸出端和LB的輸 出端分別連接到MUX2_1的兩個(gè)輸入端。其中,IB和AB均包括多個(gè)緩沖行,其中每個(gè)緩沖行 的位寬(即,能存放的比特?cái)?shù))為寬度,緩沖行的個(gè)數(shù)為深度。IB的深度可調(diào)節(jié),此處設(shè)為 正整數(shù)m。AB的深度一般為2,用于指令對(duì)齊。當(dāng)從指令包中根據(jù)指令編碼的特點(diǎn)讀取執(zhí)行 包時(shí),執(zhí)行包可能為1條或多條指令,一個(gè)執(zhí)行包有可能跨越2個(gè)指令包,因而設(shè)置AB的深 度為2。IB和AB的緩沖區(qū)的寬度(即其緩沖行的位寬)為指令包的寬度(即指令包所包 含的比特?cái)?shù)),標(biāo)識(shí)為正整數(shù)b。例如,根據(jù)本發(fā)明的實(shí)施例,處理器的單條指令的編碼為16 位或32位,并且支持多發(fā)射,取指令寬度為64位,指令包的寬度也為64位,同時(shí),允許16, 32或64位的執(zhí)行包,因而,對(duì)應(yīng)這款處理器,AB和IB的寬度等于指令包的寬度,即64位。 LB采用扁平化的結(jié)構(gòu),以最小指令寬度為單位(標(biāo)識(shí)為正整數(shù)a),長(zhǎng)度可調(diào)節(jié),設(shè)總長(zhǎng)度為 正整數(shù)η。對(duì)應(yīng)上述處理器,LB的單位長(zhǎng)度為16位,長(zhǎng)度為n。MUX2_1為1個(gè)2選1的多 路選擇器,根據(jù)讀緩沖區(qū)標(biāo)志信號(hào)read_buffer選擇從AB或LB中讀出執(zhí)行包,送到處理器 中的譯碼模塊。處理器啟動(dòng)時(shí),默認(rèn)循環(huán)緩沖器關(guān)閉,從指令存儲(chǔ)器中讀取返回的指令存入 IB或AB中,當(dāng)IB和AB都為空時(shí),默認(rèn)存入AB中,當(dāng)AB滿后,依次再存入IB中。根據(jù)本發(fā) 明的實(shí)施例,在AB和IB中均為從低編號(hào)緩沖行向高編號(hào)緩沖行存儲(chǔ)。AB中的指令讀取后, 將IB中的緩沖行發(fā)送到AB中。根據(jù)本發(fā)明的實(shí)施例,在發(fā)送緩沖行時(shí),從高編號(hào)緩沖行向 低編號(hào)緩沖行依次傳輸,每次"下沉"一個(gè)緩沖行,如AB[1]寫入ΑΒ[0],ΙΒ