基于sprac v8指令集的指令分類多發(fā)射方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及基于SPRACV8指令集的指令分類多發(fā)射方法,屬于嵌入式應(yīng)用領(lǐng)域。
【背景技術(shù)】
[0002] RISC結(jié)構(gòu)是單發(fā)射處理器體系結(jié)構(gòu)設(shè)計(jì)的一大進(jìn)展。單發(fā)射結(jié)構(gòu)中流水線設(shè)計(jì)的 目標(biāo),是做到平均每個(gè)周期能執(zhí)行完成一條指令,即IPC= 1,但由于控制相關(guān)、數(shù)據(jù)相關(guān)和 資源相關(guān)等問題引起的沖突,使得IPC達(dá)不到1。通過指令重組、分支預(yù)測(cè)和前向數(shù)據(jù)通路 等技術(shù)可以提高IPC使之接近于1,但不可能大于或等于1。為了突破這一上限,當(dāng)前嵌入 式處理器的總體發(fā)展趨勢(shì)是在保持低功耗的前提下,通過創(chuàng)新指令集和流水線架構(gòu)來提高 處理器的綜合性能,適應(yīng)日益發(fā)展的嵌入式系統(tǒng)對(duì)于性能的需求。從技術(shù)角度,嵌入式處理 器主要從淺流水(流水線級(jí)數(shù)小于8)往深流水(流水線級(jí)數(shù)超過8)發(fā)展,從單發(fā)射架構(gòu) 往多發(fā)射架構(gòu)發(fā)展。所謂多發(fā)射即在一個(gè)周期內(nèi)發(fā)出多條指令,通過分時(shí)復(fù)用執(zhí)行單元或 配置多個(gè)執(zhí)行單元同時(shí)進(jìn)行處理,通過增加寄存器端口同時(shí)提交多個(gè)執(zhí)行結(jié)果,從而提高 處理指令的效率。
[0003] SPRACV8(ScalableProcessorArchitectureV8)體系結(jié)構(gòu)作為RISC處理器的 經(jīng)典代表之一,占有十分重要的地位。國(guó)產(chǎn)SPRACV8系列處理器面向嵌入式系統(tǒng),已經(jīng)成 功應(yīng)用于數(shù)字聽寫機(jī)、指紋識(shí)別系統(tǒng)、GPS處理器等。隨著技術(shù)的發(fā)展,市場(chǎng)對(duì)高性能處理 器的需求增強(qiáng),通過多發(fā)射技術(shù)來提高SPARCV8處理器的性能適應(yīng)市場(chǎng)的需求,是一種行 之有效的方式。但是目前尚沒有針對(duì)SPARCV8處理器的多發(fā)射方法。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明解決的技術(shù)問題是:克服現(xiàn)有技術(shù)的不足,提供基于SPRACV8指令集的指 令分類多發(fā)射方法,實(shí)現(xiàn)了指令的并行執(zhí)行,提高了SPRACV8處理器的性能。
[0005] 本發(fā)明的技術(shù)解決方案是:基于SPRACV8指令集的指令分類多發(fā)射方法,包括如 下步驟:
[0006] (1)將SPRACV8處理器劃分為取指、譯碼、執(zhí)行、訪存、寫回五個(gè)流水級(jí),將SPRAC V8指令劃分為分支指令、乘除法指令、加載存儲(chǔ)指令和其他指令四類,五個(gè)流水級(jí)之間通過 公共數(shù)據(jù)總線連接,在取指級(jí)增加n-1條取指通路,在譯碼級(jí)增加n-1個(gè)譯碼單元,在譯碼 級(jí)和執(zhí)行級(jí)之間加入η組保留站,每組保留站與一類指令相對(duì)應(yīng);在執(zhí)行級(jí)和訪存級(jí)之間 加入重排序緩沖區(qū);根據(jù)待執(zhí)行指令的類別在執(zhí)行級(jí)加入對(duì)應(yīng)的執(zhí)行單元,所述執(zhí)行單元 包括加法器、移位器、乘法器/除法器和算術(shù)邏輯單元;η為自然數(shù),η大于等于1小于8 ;
[0007] (2)取指級(jí)從指令緩存中同時(shí)取回η條指令,并通過公共數(shù)據(jù)總線將這η條指令分 別發(fā)送給譯碼級(jí)η個(gè)譯碼單元,同時(shí)取指級(jí)將這η條指令在指令緩存中的順序存放在重排 序緩沖區(qū);
[0008] (3)譯碼級(jí)η個(gè)譯碼單元對(duì)這η條指令進(jìn)行并行譯碼,譯碼的同時(shí)分別對(duì)每條指令 進(jìn)行跳轉(zhuǎn)指令判斷,將判斷后得到的待執(zhí)行指令對(duì)應(yīng)的操作、源地址、目的地址或操作數(shù)通 過公共數(shù)據(jù)總線發(fā)送給該指令相應(yīng)的保留站;
[0009] (4)各保留站根據(jù)指令地址對(duì)操作數(shù)進(jìn)行預(yù)取,并判斷各條指令之間是否存在相 關(guān)沖突,對(duì)于存在相關(guān)沖突的指令,將其放在下一周期執(zhí)行,將不存在相關(guān)沖突的m條指令 分別通過公共數(shù)據(jù)總線發(fā)送給指令對(duì)應(yīng)的執(zhí)行單元執(zhí)行,m為自然數(shù),m小于等于η;
[0010] (5)執(zhí)行單元對(duì)m條指令并行執(zhí)行后,分別將運(yùn)算結(jié)果通過公共數(shù)據(jù)總線發(fā)送給 重排序緩沖區(qū);存在相關(guān)沖突的指令所在的保留站可通過公共數(shù)據(jù)總線從重排序緩沖區(qū)讀 取本周期指令的執(zhí)行結(jié)果,作為下一周期指令執(zhí)行時(shí)的操作數(shù);
[0011] (6)重排序緩沖區(qū)判斷這m條指令是否按序排在存在相關(guān)沖突的指令之前,如果 是,則將m條指令的執(zhí)行結(jié)果通過公共數(shù)據(jù)總線同時(shí)寫回對(duì)應(yīng)的存儲(chǔ)器或寄存器,否則,將 按序排在相關(guān)沖突指令之前的指令執(zhí)行結(jié)果同時(shí)提交,按序排在后面的指令等待存在相關(guān) 沖突的指令執(zhí)行之后寫回對(duì)應(yīng)的存儲(chǔ)器或寄存器,從而實(shí)現(xiàn)了SPRACV8處理器的多發(fā)射。
[0012] 所述步驟(3)中譯碼級(jí)η個(gè)譯碼單元對(duì)這η條指令進(jìn)行并行譯碼,譯碼的同時(shí)分 別對(duì)每條指令進(jìn)行跳轉(zhuǎn)指令判斷的實(shí)現(xiàn)方式為:
[0013] (2. 1)譯碼級(jí)通過公共數(shù)據(jù)總線從重排序緩沖區(qū)中讀出這η條指令在指令緩存中 的順序,將所述η條指令按順序進(jìn)行標(biāo)識(shí);
[0014] (2. 2)在譯碼時(shí)判斷每一條指令是否是跳轉(zhuǎn)指令,如果第i個(gè)指令是跳轉(zhuǎn)指令,且 i小于等于n-3,則將按序排在第i+Ι個(gè)指令后面的指令全部清除不再向保留站分配,同時(shí) 將跳轉(zhuǎn)的目標(biāo)地址反饋給取指級(jí),第i+2個(gè)指令之前的所有指令為待執(zhí)行指令;如果第i 個(gè)指令是跳轉(zhuǎn)指令,且i等于n-2,則將第η個(gè)指令清除不再向保留站分配,同時(shí)將跳轉(zhuǎn)的 目標(biāo)地址反饋給取指級(jí),第η個(gè)指令之前的所有指令為待執(zhí)行指令;i為自然數(shù),i= 1,2, 3,......,n_2 〇
[0015] 所述步驟(4)中保留站判斷各條指令之間是否存在相關(guān)沖突的方法為:
[0016] (3. 1)各保留站通過公共數(shù)據(jù)總線從重排序緩沖區(qū)中讀出所存放指令的順序;
[0017] (3. 2)每個(gè)保留站對(duì)所存放的指令進(jìn)行分析,如果所存放的指令需要用到按序排 在前面指令的運(yùn)算結(jié)果,則該指令存在相關(guān)沖突,否則,不存在相關(guān)沖突。
[0018] 所述步驟(6)中,如果多個(gè)指令的寫目的寄存器或存儲(chǔ)器相同,則只需要將按序 排在最后的指令的結(jié)果寫入相應(yīng)的寄存器或存儲(chǔ)器,前面指令的結(jié)果被忽略。
[0019] 本發(fā)明與現(xiàn)有技術(shù)相比,具有如下有益效果:
[0020] (1)本發(fā)明是對(duì)指令分類之后實(shí)現(xiàn)的多發(fā)射方法,根據(jù)待執(zhí)行指令的情況增加執(zhí) 行單元,執(zhí)行單元的面積增加較小,例如僅加入一個(gè)加法器和一個(gè)移位器,就能夠?qū)崿F(xiàn)四發(fā) 射結(jié)構(gòu),從而用較小的面積代價(jià)換取較好的性能提升效果;
[0021] (2)本發(fā)明設(shè)計(jì)了包括保留站、公共數(shù)據(jù)總線(⑶B,CommonDataBus)和重排序 緩沖區(qū)的動(dòng)態(tài)執(zhí)行核結(jié)構(gòu),采用順序發(fā)射-亂序執(zhí)行-順序提交的機(jī)制,在不打亂指令發(fā)射 和提交順序的前提下,充分利用指令間潛在的并行性,從而提高指令的執(zhí)行效率。
[0022] (3)本發(fā)明通過加入保留站同時(shí)實(shí)現(xiàn)操作數(shù)預(yù)取和相關(guān)沖突的檢測(cè)和處理,解決 了單發(fā)射結(jié)構(gòu)變換到多發(fā)射結(jié)構(gòu)的一大難點(diǎn)一一多指令相關(guān)沖突問題,保證了處理器基本 功能的正確性,同時(shí)可以通過公共數(shù)據(jù)總線快速取回前面指令的執(zhí)行結(jié)果供后續(xù)指令使 用,提高了相關(guān)沖突處理效率;
[0023] (4)本發(fā)明對(duì)于并行指令寫回的寫相關(guān)沖突問題,僅寫入按序排在最后的指令的 執(zhí)行結(jié)果,避免了多次寫造成的資源和時(shí)間浪費(fèi)。
【附圖說明】
[0024] 圖1為本發(fā)明基于的SPRACV8處理器五級(jí)流水結(jié)構(gòu)圖;
[0025] 圖2為利用本發(fā)明方法實(shí)現(xiàn)的四發(fā)射五級(jí)流水處理器結(jié)構(gòu)圖;
[0026] 圖3為本發(fā)明保留站的結(jié)構(gòu);
[0027] 圖4為本發(fā)明重排序緩沖區(qū)的結(jié)構(gòu)。
[0028] 圖5為本發(fā)明的具體實(shí)現(xiàn)流程圖;
【具體實(shí)施方式】
[0029] 本發(fā)明涉及嵌入式應(yīng)用領(lǐng)域,特別針對(duì)應(yīng)用SPARCV8指令集的多發(fā)射處理器結(jié) 構(gòu),通過分析指令的執(zhí)行過程,對(duì)指令分類處理,根據(jù)功能需要配置處理單元。
[0030] 本發(fā)明實(shí)現(xiàn)的是基于國(guó)產(chǎn)SPRACV8系列處理器的多發(fā)射方法,該方法首先將 SPRACV8處理器劃分為五級(jí)流水結(jié)構(gòu),如圖1所示,五級(jí)流水分別是取指級(jí)、譯碼級(jí)、執(zhí)行 級(jí)、訪存級(jí)和寫回級(jí),五級(jí)之間通過數(shù)據(jù)總線和控制總線傳遞數(shù)據(jù)和控制信息。本發(fā)明方法 通過分析指令的執(zhí)行過程將SPARCV8指令按照功能劃分為四個(gè)類別(分支跳轉(zhuǎn)指令、加載 /存儲(chǔ)指令、乘/除法指令和其他類指令),分別通過不同的功能單元(依次對(duì)應(yīng)移位器、加 法器、乘/除法器和算術(shù)邏輯部件)處理,并且將對(duì)分支指令的處理提前到譯碼級(jí)完成,各 類指令在各個(gè)流水級(jí)執(zhí)行的操作如表1所示。
[0031] 表 1
[0032]
[0033] 如圖5所示,本發(fā)明方法包括如下步驟:
[0034] (1)建立SPRACV8處理器多發(fā)射結(jié)構(gòu),將SPRACV8處理器劃分為取指、譯碼、執(zhí) 行、訪存、寫回五個(gè)流水級(jí),將SPRACV8指令劃分為分支指令,乘除法指令,加載存儲(chǔ)指令和 其他指令四類,五個(gè)流水級(jí)之間通過公共數(shù)據(jù)總線連接,在取指級(jí)增加n-1條取指通路,在 譯碼級(jí)增加n-1個(gè)譯碼單元,在譯碼級(jí)和執(zhí)行級(jí)之間加入η組保留站,每組保留站與一類指 令相對(duì)應(yīng);在執(zhí)行級(jí)和訪存級(jí)之間加入重排序緩沖區(qū);根據(jù)待執(zhí)行指令的類別在執(zhí)行級(jí)加 入對(duì)應(yīng)的執(zhí)行單元,所述執(zhí)行單元包括加法器、移位器、乘法器/除法器和算術(shù)邏輯單元;η 為自然數(shù),η大于等于1小于8 ;
[0035] (2)取指級(jí)從指令緩存中同時(shí)取回η條指令,并通過公共數(shù)據(jù)總線將這η條指令分 別發(fā)送給譯碼級(jí)η個(gè)譯碼單元,同時(shí)取指級(jí)將這η條指令在指令緩存中的順序存放在重排 序緩沖區(qū);
當(dāng)前第1頁
1 
2 
3