指令緩沖與對齊緩沖裝置及其操作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及處理器設(shè)計(jì)領(lǐng)域,尤其涉及一種指令緩沖與對齊緩沖裝置及其操作方法。
【背景技術(shù)】
[0002]在超長指令字處理器中,為了提高程序的執(zhí)行性能,一般都采用一個(gè)指令緩沖將取指令流水和指令執(zhí)行流水分開。以此來減少指令訪存停頓對執(zhí)行流水的影響。指令訪存總線的寬度一般等于最大的并行指令包的寬度,而同一時(shí)鐘周期可以發(fā)射進(jìn)入執(zhí)行級(jí)進(jìn)行譯碼執(zhí)行的指令條數(shù)卻不固定,最少為I條,最多為指令包的指令數(shù)目。因而執(zhí)行包中的指令寬度也不固定。當(dāng)從指令緩沖中讀取執(zhí)行包時(shí),需要進(jìn)行指令對齊,即根據(jù)指令編碼的特點(diǎn),從指令包中得到合適的執(zhí)行包。在現(xiàn)有的處理器結(jié)構(gòu)中,多發(fā)射處理器指令集日益豐富,指令拆包的流水級(jí)往往要承擔(dān)指令存儲(chǔ),指令對齊,指令拆包,指令碼識(shí)別,指令分發(fā)等功能,邏輯量大。隨著技術(shù)的進(jìn)步,對處理器的性能要求日益增高,處理器的工作頻率也迅速增加,因而,在指令拆包分發(fā)的流水級(jí),應(yīng)該盡量降低數(shù)據(jù)通路的路徑長度,提高處理器的頻率。
[0003]傳統(tǒng)的指令緩沖結(jié)構(gòu)中,指令讀取邏輯負(fù)載大,路徑延時(shí)長,在處理器日益增長的工作頻率下,很可能成為處理器性能的瓶頸。
【發(fā)明內(nèi)容】
[0004]為了從指令緩沖中讀取執(zhí)行包的邏輯量,提高處理器的運(yùn)行速度,本發(fā)明提出了一種指令緩沖與對齊緩沖的裝置及其操作方法。該裝置包括指令緩沖區(qū)(Instruct1nBuffer, IB)和對齊緩沖區(qū)(Alignment Buffer,AB)。
[0005]所述指令緩沖區(qū)和對齊緩沖區(qū)的寬度均等于指令總線的數(shù)據(jù)寬度,一般情況下,也等于處理器支持的最大并行包的指令寬度。指令緩沖區(qū)的深度可根據(jù)處理器的情況具體設(shè)定,主要用于存儲(chǔ)從指令存儲(chǔ)器中取回的指令包。對齊緩沖區(qū)的深度設(shè)置為2,主要用于實(shí)現(xiàn)指令對齊。從指令包中根據(jù)指令編碼的特點(diǎn)讀取執(zhí)行包,執(zhí)行包可能為I條或多條指令,一個(gè)執(zhí)行包有可能跨越2個(gè)指令包,因而設(shè)置對齊緩沖的深度為2。
[0006]當(dāng)指令緩沖區(qū)與對齊緩沖區(qū)均為空的時(shí)候,從指令存儲(chǔ)器返回的指令包優(yōu)先寫入對齊緩沖區(qū),由低向高寫入;當(dāng)對齊緩沖區(qū)寫滿時(shí),再由低向高寫入指令緩沖區(qū)中。
[0007]發(fā)送給譯碼單元的執(zhí)行包均讀取自對齊緩沖區(qū)。讀取執(zhí)行包時(shí),均從對齊緩沖的低位行ΑΒ[0]處讀取,當(dāng)最低位行讀取完畢時(shí),將高位行的內(nèi)容依次寫入次低位的行,如:IB[2]的內(nèi)容寫入IB[1],IB[1]的內(nèi)容寫入ΙΒ[0],ΙΒ[0]的內(nèi)容寫入AB[1],AB[1]的內(nèi)容寫入AB [O]。
[0008]從對齊緩沖區(qū)中讀取執(zhí)行包時(shí),以最小指令寬度為單位,設(shè)定讀指針,從讀指針指向處,讀取一條或多條指令編碼,根據(jù)處理器指令集并行指令的編碼特點(diǎn),判斷當(dāng)前執(zhí)行包指令的數(shù)目,將執(zhí)行包讀出發(fā)送到譯碼單元,同時(shí),根據(jù)讀出執(zhí)行包指令的寬度對讀指針進(jìn)行累加。
[0009]本發(fā)明另一方面提供了一種上述指令緩沖與對齊緩沖裝置的操作方法,包括寫入步驟和讀出步驟。
[0010]寫入步驟包括:(I)初始化時(shí),指令緩沖區(qū)和對齊緩沖區(qū)均為空,讀寫指針均為O。
(2)等待指令包從指令存儲(chǔ)器中返回。(3)指令包返回時(shí)進(jìn)行判斷,首先檢查AB是否滿,若滿,則將返回指令包寫入IB寫指針指向的IB行,并發(fā)送請求控制IB寫指針累加,然后等待新的指令包返回;若AB不滿,則進(jìn)一步判斷AB[O]是否為空,若ΑΒ[0]為空,則將返回的指令包寫入ΑΒ[0],并發(fā)送請求控制AB寫指針累加,然后等待新的指令包返回;SAB[0]若不為空,則將返回指令包寫入AB [I],并發(fā)送AB滿標(biāo)志,然后等待新的指令包返回。
[0011]讀出步驟包括:(I)初始化時(shí),指令緩沖,對齊緩沖均為空,讀寫指針均為O。(2)等待AB中指令包的寫入(3)檢查AB的狀態(tài):a.若AB[1]和ΑΒ[0]都滿,則首先根據(jù)AB讀指針位置進(jìn)行執(zhí)行包的讀取,將讀出執(zhí)行包發(fā)送到譯碼單元,同時(shí)根據(jù)執(zhí)行包長度修改AB讀指針;然后判斷讀出的執(zhí)行包是否跨越兩個(gè)指令包,若是,則產(chǎn)生ΑΒ[0]讀完的標(biāo)志信號(hào),由其控制IB和AB中內(nèi)容的更新,然后返回繼續(xù)檢查AB的狀態(tài);若不需要跨越兩個(gè)指令包,則直接返回繼續(xù)檢查AB的狀態(tài)。b.若AB[1]空,ΑΒ[0]滿,則首先根據(jù)AB讀指針的位置進(jìn)行執(zhí)行包的預(yù)讀取,判斷是否需要跨越指令包讀取,若需要,則停止讀取執(zhí)行包,等待AB [I]的寫入,保持AB讀指針不變,并返回繼續(xù)檢查AB的狀態(tài);若不需要跨包讀取,則將讀出的執(zhí)行包發(fā)送到譯碼單元,并且根據(jù)執(zhí)行包長度修改AB讀指針,并返回繼續(xù)檢查AB的狀態(tài)。
[0012]根據(jù)本發(fā)明的指令緩沖與對齊緩沖裝置及其操作方法,可以降低執(zhí)行包讀出邏輯的負(fù)載以及讀出邏輯的路徑,從而提高處理器的運(yùn)行速度。
【附圖說明】
[0013]圖1是經(jīng)典處理器的內(nèi)核結(jié)構(gòu)圖;
[0014]圖2是傳統(tǒng)指令緩沖區(qū)的結(jié)構(gòu)圖;
[0015]圖3是傳統(tǒng)指令緩沖區(qū)的讀寫邏輯結(jié)構(gòu)圖;
[0016]圖4是本發(fā)明實(shí)施例的指令緩沖與對齊緩沖裝置的結(jié)構(gòu)圖;
[0017]圖5是本發(fā)明實(shí)施例的指令緩沖與對齊緩沖裝置的讀寫邏輯結(jié)構(gòu)圖;
[0018]圖6是本發(fā)明實(shí)施例的指令緩沖與對齊緩沖裝置的寫入控制流程圖;
[0019]圖7是本發(fā)明實(shí)施例的指令緩沖與對齊緩沖裝置的讀出控制流程圖;
【具體實(shí)施方式】
[0020]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,并參照附圖,對本發(fā)明做進(jìn)一步詳細(xì)說明。
[0021]圖1是經(jīng)典處理器的內(nèi)核結(jié)構(gòu)圖;如圖1所示,該處理器包括指令地址計(jì)算發(fā)送單元10,指令等待單元11,指令緩沖區(qū)12,指令譯碼單元13,執(zhí)行單元14,寫回單元15,指令存儲(chǔ)單元16。其中指令地址計(jì)算發(fā)送單元10發(fā)送取指令地址給指令存儲(chǔ)單元16,指令存儲(chǔ)單元16根據(jù)指令地址,讀取對應(yīng)的指令行,將指令包返回,寫入指令緩沖區(qū)12中,在指令緩沖區(qū)12中,進(jìn)行指令對齊,根據(jù)指令集的編碼特點(diǎn),尋找指令串行或并行的標(biāo)志位,通過讀取串并行標(biāo)志位的值進(jìn)而判斷執(zhí)行包的分界從而讀取執(zhí)行包,發(fā)送到指令譯碼單元13進(jìn)行進(jìn)一步的譯碼,然后將譯碼結(jié)果發(fā)送到對應(yīng)的執(zhí)行單元14進(jìn)行運(yùn)算,最后通過寫回單元15完成寄存器結(jié)果的寫回。指令緩沖區(qū)12的主要作用有兩個(gè):(I)緩存返回的指令包
(2)將指令包分解成執(zhí)行包。
[0022]圖2是傳統(tǒng)指令緩沖區(qū)的結(jié)構(gòu)圖。如圖2所示,該指令緩沖區(qū)包括2n行,η是正整數(shù),其選擇可以根據(jù)處理器的面積,性能等約束確定。每行包括2m個(gè)單元,m是正整數(shù)。每個(gè)單元的寬度為處理器支持的最小指令寬度。例如在本發(fā)明的一個(gè)實(shí)施例中,處理器支持的指令寬度為16位或32位,并且支持指令并行執(zhí)行,最大執(zhí)行包的寬度為64位。因而,每行中的每個(gè)基本單元為16位,每行寬度為64位,m等于2。在圖2中,每一行代表一個(gè)指令包,如圖2中黑色標(biāo)識(shí),即從指令存儲(chǔ)器中寫回的指令包的寬度。執(zhí)行包的長度可以為I個(gè)或多個(gè)最小單元,一個(gè)執(zhí)行包可能位于一個(gè)指令行中,也可能跨越兩個(gè)指令包,形成跨包的執(zhí)行包,如圖2中灰色標(biāo)識(shí)。
[0023]圖3是傳統(tǒng)指令緩沖區(qū)的讀寫邏輯結(jié)構(gòu)圖;具體包括指令包輸入選擇開關(guān)300-30X,多個(gè)指令緩沖行310-31X,多個(gè)初級(jí)執(zhí)行包選擇及拼接器320_32x,以及次級(jí)執(zhí)行包選擇及拼接器399。X的數(shù)目等于指令緩沖行最大的行號(hào),如圖2所示,設(shè)為2n-l。從指令存儲(chǔ)器中返回的指令包,根據(jù)指令緩沖區(qū)的寫指針控制選擇開關(guān)組301-30X的閉與合,將指令