專利名稱:管理重命名寄存器的寄存器重命名系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微處理器體系結(jié)構(gòu)技術(shù)領(lǐng)域,特別涉及一種采用多個(gè)重命名寄存器隊(duì)列的寄存器重命名系統(tǒng)和方法。
背景技術(shù):
現(xiàn)代的微處理器體系結(jié)構(gòu),大多采用了超標(biāo)量(Super kale)技術(shù),即在一個(gè)周期內(nèi),有多條流水線在并行執(zhí)行多條指令。寄存器重命名(Register Renaming)技術(shù)是超標(biāo)量微處理器的關(guān)鍵技術(shù)之一,它通過將同一個(gè)邏輯寄存器映射到多個(gè)物理寄存器的方式,解決了程序運(yùn)行中的讀后寫(WAR)和寫寫(WAW)數(shù)據(jù)相關(guān),大大提高了指令的并行執(zhí)行能力。其中一種寄存器重命名操作的實(shí)現(xiàn)方式是針對(duì)一組物理寄存器,采用體系結(jié)構(gòu)寄存器映射表(Architecture Register Mapping Table,簡稱為ARMT)來保存物理寄存器與邏輯寄存器的對(duì)應(yīng)關(guān)系。所述邏輯寄存器,是指在編程時(shí)指令所用到的寄存器,在采用寄存器重命名技術(shù)的微處理器中,不同指令的同一個(gè)寄存器地址不一定對(duì)應(yīng)物理上存在的同一個(gè)寄存器,因此引入邏輯寄存器的概念來表示指令所用到的寄存器,而區(qū)別于真正意義上的物理上存在的寄存器。所述物理寄存器,是在微處理器中實(shí)際存在的物理上的寄存器電路,在處理器運(yùn)行的不同時(shí)刻,可以與不同的邏輯寄存器相對(duì)應(yīng)。在處理器運(yùn)行時(shí),同一個(gè)邏輯寄存器可能對(duì)應(yīng)多個(gè)物理寄存器,但是只有一個(gè)物理寄存器保存的是已經(jīng)確認(rèn)的結(jié)果,所述確認(rèn)結(jié)果,是重排序緩沖器ROB按照順序提交指令后指令的執(zhí)行結(jié)果,無論微處理器的內(nèi)部結(jié)構(gòu)如何實(shí)現(xiàn),這個(gè)物理寄存器的內(nèi)容都是與按照順序執(zhí)行的編程模型中的邏輯寄存器是統(tǒng)一的,在本文中稱這些保存確認(rèn)的結(jié)果的物理寄存器為體系結(jié)構(gòu)寄存器。體系結(jié)構(gòu)寄存器映射表保存的就是現(xiàn)在被作為體系結(jié)構(gòu)寄存器而保存對(duì)應(yīng)的邏輯寄存器的確認(rèn)結(jié)果的那些物理寄存器。重命名引擎用物理寄存器地址代替指令中的邏輯寄存器地址,執(zhí)行單元根據(jù)這個(gè)物理寄存器地址從物理寄存器中取得操作數(shù)或?qū)⒉僮鲾?shù)寫回到物理寄存器中。那些沒有被當(dāng)作體系結(jié)構(gòu)寄存器使用的物理寄存器稱為重命名寄存器,如果指令有目標(biāo)寄存器,那么在重命名時(shí)就要找到一個(gè)未被使用的重命名寄存器,用這個(gè)重命名寄存器的物理寄存器地址來代替指令的目標(biāo)寄存器邏輯地址。也就是說,如果指令有目標(biāo)寄存器,就要找到一個(gè)未被使用的重命名寄存器并且將其對(duì)于指令的目標(biāo)寄存器(邏輯寄存器)對(duì)應(yīng)起來。隨著超標(biāo)量微處理器發(fā)射寬度的提升,要求重命名引擎在一個(gè)周期內(nèi)可以進(jìn)行多次重命名操作,這就要求在一個(gè)周期內(nèi)可以搜索到多個(gè)空閑的重命名寄存器,而更大的發(fā)射寬度也要求有更多的物理寄存器可被用于寄存器重命名操作,增加了重命名引擎進(jìn)行空閑寄存器搜索的工作量,使重命名引擎成為影響微處理器頻率提升的瓶頸。對(duì)于空閑寄存器的搜索,傳統(tǒng)的搜索辦法要在找到一個(gè)空閑寄存器之后再搜索下一個(gè)空閑寄存器,不同空閑寄存器的搜索在時(shí)序上是串行的關(guān)系,類似于加法器的進(jìn)位鏈, 因此當(dāng)待選的物理寄存器數(shù)目很多而又要求獲得多個(gè)搜索結(jié)果的情況下會(huì)產(chǎn)生很大的延時(shí),影響微處理器工作頻率的提升。
為了提高對(duì)空閑物理寄存器的查找速度,有一些已有的研究成果,比如把寄存器分塊并采用雙向搜索,參見中國專利申請(qǐng)?zhí)?00910004886. 6,專利名稱《使用多塊物理寄存器映射表的寄存器重命名系統(tǒng)及其方法》。但是將物理寄存器分成多個(gè)塊,不同塊的物理寄存器不能互換,就要保證每個(gè)塊的空閑寄存器數(shù)目大體相等以避免因?yàn)槟骋粔K的物理寄存器全部被使用而阻塞重命名操作進(jìn)行;而雙向搜索也需要對(duì)每個(gè)寄存器塊做空閑寄存器數(shù)目是否大于等于2的判斷以驗(yàn)證雙向搜索的結(jié)果是否會(huì)重疊,這就需要一個(gè)復(fù)雜的邏輯來對(duì)每個(gè)塊的空閑物理寄存器數(shù)目進(jìn)行判斷,增加了時(shí)序上的延時(shí)。
發(fā)明內(nèi)容
本發(fā)明目的在于克服現(xiàn)有技術(shù)的瓶頸,提高對(duì)大量物理寄存器進(jìn)行多次寄存器重命名操作的速度。為了達(dá)到上述目的,根據(jù)本發(fā)明的一個(gè)方面,提供一種采用多個(gè)重命名寄存器隊(duì)列管理重命名寄存器的寄存器重命名系統(tǒng),所述系統(tǒng)包括
物理寄存器組,包括在微處理器運(yùn)行時(shí)被動(dòng)態(tài)地映射為用于保存已提交的指令的結(jié)果的體系結(jié)構(gòu)寄存器和用于保存提交前指令結(jié)果的重命名寄存器,所述重命名寄存器被分成所述多個(gè)重命名寄存器隊(duì)列,每個(gè)重命名寄存器隊(duì)列包括多項(xiàng),每項(xiàng)又包括寄存器空閑/ 使用標(biāo)識(shí)、物理寄存器地址和使用這個(gè)物理寄存器的指令所在的基本塊編號(hào);
寄存器別名表RAT,所述RAT保存最新的邏輯寄存器與物理寄存器之間的映射關(guān)系,準(zhǔn)備進(jìn)行重命名的指令的源操作數(shù)寄存器以寄存器別名表的內(nèi)容作為重命名的依據(jù);
體系結(jié)構(gòu)寄存器映射表ARMT,指示在當(dāng)前狀態(tài)下哪些物理寄存器是被當(dāng)作體系結(jié)構(gòu)寄存器使用,也即保存已經(jīng)被確認(rèn)的邏輯寄存器與物理寄存器的映射關(guān)系;
重命名寄存器隊(duì)列選擇指針,用于指示當(dāng)前被用于重命名操作的物理寄存器來自所述多個(gè)重命名寄存器隊(duì)列中的哪個(gè)重命名寄存器隊(duì)列;
譯碼器,用于提供需要進(jìn)行重命名操作的一個(gè)或多個(gè)邏輯寄存器地址; 寄存器重命名裝置,用于對(duì)所述一個(gè)或多個(gè)邏輯寄存器進(jìn)行重命名操作; RAT修改裝置,用于根據(jù)重命名操作的結(jié)果修改RAT ; 重命名寄存器隊(duì)列更新裝置,用于對(duì)重命名寄存器隊(duì)列進(jìn)行更新操作,以及 ARMT更新裝置,用于對(duì)AMRT進(jìn)行更新操作。根據(jù)本發(fā)明,所述寄存器空閑/使用標(biāo)示表示該物理寄存器是已經(jīng)用于重命名操作還是沒有被使用,在微處理器復(fù)位時(shí)所有項(xiàng)的空閑/使用標(biāo)示都表示為空閑;所述物理寄存器地址是該項(xiàng)當(dāng)前所對(duì)應(yīng)的物理寄存器地址,在任何時(shí)刻,所有的重命名寄存器隊(duì)列中存儲(chǔ)的物理寄存器地址都不會(huì)重復(fù);所述基本塊編號(hào)是當(dāng)該項(xiàng)的物理寄存器地址所對(duì)應(yīng)的物理寄存器被使用時(shí),使用該物理寄存器的指令所處的基本塊的編號(hào),在沒有分支延遲槽的微處理器中,基本塊是一條分支指令和到它前一條分支指令之前的所有指令的集合, 在有分支延遲槽的微處理器中,這個(gè)集合還要加上延遲槽中的指令,當(dāng)空閑/使用標(biāo)示為空閑時(shí),基本塊編號(hào)沒有意義,當(dāng)使用標(biāo)示為使用時(shí),基本塊編號(hào)用于在分支預(yù)測(cè)失敗時(shí)判斷指令是否要被取消,被取消的指令使用的重命名寄存器要被釋放,即該寄存器在重命名寄存器隊(duì)列中所對(duì)應(yīng)的項(xiàng)的空閑/使用標(biāo)識(shí)被由使用變成空閑。根據(jù)本發(fā)明的系統(tǒng),其中所述寄存器重命名裝置通過以下操作對(duì)所述一個(gè)或多個(gè)邏輯寄存器進(jìn)行重命名操作
(i)并行查找所述多個(gè)重命名寄存器隊(duì)列,從每個(gè)隊(duì)列找出一個(gè)空閑的物理寄存器的物理寄存器地址;
(ii)根據(jù)重命名寄存器隊(duì)列選擇指針,將從該指針?biāo)付ǖ闹孛拇嫫麝?duì)列中查到的空閑物理寄存器地址賦給需要做重命名操作的第一個(gè)邏輯寄存器;
(iii)將用于重命名的物理寄存器的空閑/使用標(biāo)識(shí)設(shè)為使用,以及
(iv)將用于重命名的物理寄存器在重命名寄存器隊(duì)列中的基本塊編號(hào)設(shè)為等于使用這個(gè)物理寄存器的指令所屬的基本塊編號(hào),
(ν)如果有多個(gè)邏輯寄存器需要進(jìn)行重命名操作,則將寄存器隊(duì)列選擇指針加1,并重復(fù)步驟(i)_ (iv)的操作。根據(jù)本發(fā)明的系統(tǒng),所述重命名寄存器隊(duì)列更新裝置根據(jù)ROB要提交的指令的目標(biāo)寄存器物理地址在重命名寄存器隊(duì)列中搜索出需要更新的項(xiàng),并用使用該目標(biāo)寄存器邏輯地址從ARMT中讀出的物理地址對(duì)搜索到的項(xiàng)進(jìn)行更新操作。具體地,所述重命名寄存器隊(duì)列更新裝置通過以下步驟對(duì)重命名寄存器隊(duì)列進(jìn)行更新操作
(i)根據(jù)ROB要提交的指令的目標(biāo)寄存器邏輯地址在ARMT中查找到的與該目標(biāo)寄存器邏輯地址對(duì)應(yīng)的物理寄存器地址;
(ii)根據(jù)ROB要提交的指令的目標(biāo)寄存器物理地址在各個(gè)重命名寄存器隊(duì)列中查找到保存這個(gè)目標(biāo)寄存器物理地址的項(xiàng);
(iii)將重命名寄存器隊(duì)列中保存所述目標(biāo)寄存器物理地址的項(xiàng)的物理寄存器地址改為從ARMT中查到的物理寄存器地址;以及
(iv)將重命名寄存器隊(duì)列中保存所述目標(biāo)寄存器物理地址的項(xiàng)的空閑/使用標(biāo)識(shí)改為空閑,以及
(ν)如果重命名寄存器隊(duì)列中有多個(gè)項(xiàng)需要更新,則重復(fù)步驟(i)_ (iv)的操作。根據(jù)本發(fā)明的系統(tǒng),其中所述ARMT更新裝置通過將在ARMT中查找到的與所述指令的目標(biāo)寄存器邏輯地址所對(duì)應(yīng)的物理寄存器地址替換為ROB要提交的指令的目標(biāo)寄存器物理地址來完成對(duì)AMRT的更新操作。根據(jù)本發(fā)明的系統(tǒng),其中所述寄存器重命名裝置從重命名寄存器隊(duì)列選擇指針指定的隊(duì)列開始,按照編號(hào)遞增的順序依次從各個(gè)重命名寄存器隊(duì)列中查找將被賦給需要做重命名操作的邏輯寄存器的空閑物理寄存器,隊(duì)列編號(hào)增加到最大后可以回卷到最小的編號(hào)來進(jìn)行。根據(jù)本發(fā)明的系統(tǒng),其中所述物理寄存器組包括M+N個(gè)物理寄存器,其中M為在微處理器運(yùn)行時(shí)被動(dòng)態(tài)地映射為體系結(jié)構(gòu)寄存器的物理寄存器的個(gè)數(shù),N為被映射為體系結(jié)構(gòu)寄存器的物理寄存器外用于重命名操作的物理寄存器的個(gè)數(shù)。根據(jù)本發(fā)明的系統(tǒng),其中所述寄存器別名表RAT和體系結(jié)構(gòu)寄存器映射表ARMT的項(xiàng)數(shù)都是M,每一項(xiàng)分別對(duì)應(yīng)于一個(gè)邏輯寄存器。根據(jù)本發(fā)明的系統(tǒng),其中所述重命名寄存器隊(duì)列選擇指針的內(nèi)容就是要被用于邏輯寄存器重命名操作的物理寄存器所屬的重命名寄存器隊(duì)列的編號(hào),每對(duì)一個(gè)邏輯寄存器做一次重命名操作就要將重命名寄存器隊(duì)列選擇指針加1,以選擇下一個(gè)重命名寄存器隊(duì)列。
根據(jù)本發(fā)明的系統(tǒng),其中所述多個(gè)重命名寄存器隊(duì)列的數(shù)目大于或等于在微處理器的一個(gè)時(shí)鐘周期內(nèi)最多可以進(jìn)行的重命名操作的次數(shù)。根據(jù)本發(fā)明的系統(tǒng),其中所述多個(gè)重命名寄存器隊(duì)列中的每個(gè)中保存的物理寄存器地址在微處理器運(yùn)行時(shí)是可變的。根據(jù)本發(fā)明的系統(tǒng),其中對(duì)于所述多個(gè)重命名寄存器隊(duì)列,每個(gè)隊(duì)列的項(xiàng)數(shù)可以是相等的。根據(jù)本發(fā)明的系統(tǒng),其中所述多個(gè)重命名寄存器隊(duì)列,每個(gè)隊(duì)列的項(xiàng)數(shù)可以是不相等的,但這種情況只應(yīng)該出現(xiàn)在用于重命名操作的物理寄存器數(shù)目不能被重命名寄存器隊(duì)列數(shù)整除的條件下。根據(jù)本發(fā)明的系統(tǒng),其中在用于重命名操作的物理寄存器數(shù)目不能被重命名寄存器隊(duì)列數(shù)整除的情況下,把整除后的余下的寄存器按照重命名寄存器隊(duì)列選擇指針增加的方向按每隊(duì)列一個(gè)依次分配給從編號(hào)零開始的重命名寄存器隊(duì)列,直到分配完為止。根據(jù)本發(fā)明的系統(tǒng),其中體系結(jié)構(gòu)寄存器映射表中的內(nèi)容不會(huì)因?yàn)槌龔?fù)位以外的異常或分支預(yù)測(cè)錯(cuò)誤而改變。此外,還提供了一種采用多個(gè)重命名寄存器隊(duì)列管理重命名寄存器的方法,所述重命名寄存器被分成所述多個(gè)重命名寄存器隊(duì)列,每個(gè)重命名寄存器隊(duì)列包括多項(xiàng),每項(xiàng)又包括寄存器空閑/使用標(biāo)識(shí)、物理寄存器地址和使用這個(gè)物理寄存器的指令所在的基本塊編號(hào),所述方法包括
使用譯碼器提供需要進(jìn)行重命名操作的一個(gè)或多個(gè)邏輯寄存器地址; 對(duì)所述一個(gè)或多個(gè)邏輯寄存器進(jìn)行重命名操作;
根據(jù)重命名操作的結(jié)果修改寄存器別名表RAT,其中所述RAT保存最新的邏輯寄存器與物理寄存器之間的映射關(guān)系,準(zhǔn)備進(jìn)行重命名的指令的源操作數(shù)寄存器以寄存器別名表的內(nèi)容作為重命名的依據(jù);
在指令提交時(shí),根據(jù)重排序緩沖器ROB要提交的指令的目標(biāo)寄存器邏輯地址和物理地址對(duì)重命名寄存器隊(duì)列進(jìn)行更新操作,以及
在指令提交時(shí),根據(jù)ROB要提交的指令的目標(biāo)寄存器邏輯地址和物理地址對(duì)體系結(jié)構(gòu)寄存器映射表AMRT進(jìn)行更新操作。根據(jù)本發(fā)明的方法,其中通過以下操對(duì)所述一個(gè)或多個(gè)邏輯寄存器進(jìn)行重命名操作
(i)并行查找所述多個(gè)重命名寄存器隊(duì)列,從每個(gè)隊(duì)列找出一個(gè)空閑的物理寄存器的物理寄存器地址;
(ii)根據(jù)重命名寄存器隊(duì)列選擇指針,將從該指針?biāo)付ǖ闹孛拇嫫麝?duì)列中查到的空閑物理寄存器地址賦給需要做重命名操作的第一個(gè)邏輯寄存器,其中所述重命名寄存器隊(duì)列選擇指針用于指示當(dāng)前被用于重命名操作的物理寄存器來自所述多個(gè)重命名寄存器隊(duì)列中的哪個(gè)重命名寄存器隊(duì)列;
(iii)將用于重命名的物理寄存器的空閑/使用標(biāo)識(shí)設(shè)為使用,以及
(iv)將用于重命名的物理寄存器在重命名寄存器隊(duì)列中的基本塊編號(hào)設(shè)為等于使用這個(gè)物理寄存器的指令所屬的基本塊編號(hào),以及
(ν)如果有多個(gè)體系結(jié)構(gòu)寄存器需要進(jìn)行重命名操作,則將寄存器隊(duì)列選擇指針加1,并重復(fù)步驟(i)_ (iv)的操作。其中,在對(duì)體系結(jié)構(gòu)寄存器進(jìn)行重命名時(shí),如果重命名寄存器隊(duì)列選擇指針?biāo)x擇的重命名寄存器隊(duì)列沒有找到空閑的物理寄存器,微處理器會(huì)停止進(jìn)行重命名操作,將待重命名的指令及其后面的指令保持住直到有新的空閑物理寄存器被找到為止。根據(jù)本發(fā)明的方法,其中根據(jù)ROB要提交的指令的目標(biāo)寄存器物理地址在重命名寄存器隊(duì)列中搜索出需要更新的項(xiàng),并用使用該目標(biāo)寄存器邏輯地址從ARMT中讀出的物理地址對(duì)搜索到的項(xiàng)進(jìn)行更新操作。具體地,通過以下步驟對(duì)重命名寄存器隊(duì)列進(jìn)行更新操作
(i )根據(jù)ROB要提交的指令的目標(biāo)寄存器邏輯地址在ARMT中查找到與該目標(biāo)寄存器邏輯地址對(duì)應(yīng)的物理寄存器地址,其中所述ARMT保存已經(jīng)被確認(rèn)的體系結(jié)構(gòu)寄存器與物理寄存器的映射關(guān)系;
(ii)根據(jù)ROB要提交的指令的目標(biāo)寄存器物理地址在各個(gè)重命名寄存器隊(duì)列中查找到保存這個(gè)目標(biāo)寄存器物理地址的項(xiàng);
(iii)將重命名寄存器隊(duì)列中保存所述目標(biāo)寄存器物理地址的項(xiàng)的物理寄存器地址改為從ARMT中查到的物理寄存器地址;以及
(iv)將重命名寄存器隊(duì)列中保存所述目標(biāo)寄存器物理地址的項(xiàng)的空閑/使用標(biāo)識(shí)改為空閑,以及
(ν)如果重命名寄存器隊(duì)列中有多個(gè)項(xiàng)需要更新,則重復(fù)步驟(i)_ (iv)的操作。根據(jù)本發(fā)明的方法,進(jìn)一步包括通過將在ARMT中查找到的與所述指令的目標(biāo)寄存器邏輯地址所對(duì)應(yīng)的物理寄存器地址替換為ROB要提交的指令的目標(biāo)寄存器物理地址來完成對(duì)AMRT的更新操作。根據(jù)本發(fā)明的方法,進(jìn)一步包括從重命名寄存器隊(duì)列選擇指針指定的隊(duì)列開始, 按照編號(hào)遞增的順序依次從各個(gè)重命名寄存器隊(duì)列中查找將被賦給需要做重命名操作的邏輯寄存器的空閑物理寄存器,隊(duì)列編號(hào)增加到最大后可以回卷到最小的編號(hào)來進(jìn)行。根據(jù)本發(fā)明的方法,其中所述物理寄存器組包括M+N個(gè)物理寄存器,其中M為在微處理器運(yùn)行時(shí)被動(dòng)態(tài)地映射為體系結(jié)構(gòu)寄存器的物理寄存器的個(gè)數(shù),N為被映射為體系結(jié)構(gòu)寄存器的物理寄存器外用于重命名操作的物理寄存器的個(gè)數(shù)。根據(jù)本發(fā)明的方法,其中所述寄存器別名表RAT和體系結(jié)構(gòu)寄存器映射表ARMT的項(xiàng)數(shù)都是M,每一項(xiàng)分別對(duì)應(yīng)于一個(gè)邏輯寄存器。根據(jù)本發(fā)明的方法,其中所述重命名寄存器隊(duì)列選擇指針的內(nèi)容就是要被用于邏輯寄存器重命名操作的物理寄存器所屬的重命名寄存器隊(duì)列的編號(hào),每對(duì)一個(gè)邏輯寄存器做一次重命名操作就要將重命名寄存器隊(duì)列選擇指針加1,以選擇下一個(gè)重命名寄存器隊(duì)列。由于在一個(gè)時(shí)鐘周期內(nèi)可以進(jìn)行多次重命名操作,則一個(gè)時(shí)鐘周期后重命名寄存器隊(duì)列選擇指針的增加值為在這個(gè)周期內(nèi)進(jìn)行的重命名操作的次數(shù)。根據(jù)本發(fā)明的方法,其中所述多個(gè)重命名寄存器隊(duì)列的數(shù)目大于或等于在微處理器的一個(gè)時(shí)鐘周期內(nèi)最多可以進(jìn)行的重命名操作的次數(shù)。當(dāng)重命名寄存器隊(duì)列的數(shù)目大于在微處理器的一個(gè)時(shí)鐘周期內(nèi)最多可以進(jìn)行的重命名操作的次數(shù)時(shí),對(duì)于同樣的物理寄存器數(shù)目的情況可以使每個(gè)重命名寄存器隊(duì)列的長度更短,從而減小隊(duì)列的搜索時(shí)間。根據(jù)本發(fā)明的方法,其中所述多個(gè)重命名寄存器隊(duì)列中的每個(gè)中保存的物理寄存器地址在微處理器運(yùn)行時(shí)是可變的。根據(jù)本發(fā)明的方法,其中對(duì)于所述多個(gè)重命名寄存器隊(duì)列,每個(gè)隊(duì)列的項(xiàng)數(shù)可以是相等的。根據(jù)本發(fā)明的方法,其中所述多個(gè)重命名寄存器隊(duì)列,每個(gè)隊(duì)列的項(xiàng)數(shù)可以是不相等的,但這種情況只應(yīng)該出現(xiàn)在用于重命名操作的物理寄存器數(shù)目不能被重命名寄存器隊(duì)列數(shù)整除的條件下。根據(jù)本發(fā)明的方法,其中在用于重命名操作的物理寄存器數(shù)目不能被重命名寄存器隊(duì)列數(shù)整除的情況下,把整除后的余下的寄存器按照重命名寄存器隊(duì)列選擇指針增加的方向按每隊(duì)列一個(gè)依次分配給從編號(hào)零開始的重命名寄存器隊(duì)列,直到分配完為止。根據(jù)本發(fā)明的方法,其中體系結(jié)構(gòu)寄存器映射表ARMT中的內(nèi)容不會(huì)因?yàn)槌龔?fù)位以外的異?;蚍种ьA(yù)測(cè)錯(cuò)誤而改變。此外,根據(jù)本發(fā)明,寄存器別名表RAT具有恢復(fù)邏輯,用于當(dāng)異常產(chǎn)生時(shí)或發(fā)生分支預(yù)測(cè)錯(cuò)誤時(shí),取消正在執(zhí)行的全部或部分指令并且同時(shí)取消對(duì)被取消指令的寄存器重命名操作,將寄存器別名表恢復(fù)到被取消指令重命名之前的狀態(tài)。根據(jù)本發(fā)明,所述重命名寄存器隊(duì)列選擇指針具有恢復(fù)邏輯,其在異常產(chǎn)生或分支預(yù)測(cè)錯(cuò)誤時(shí),將重命名寄存器隊(duì)列選擇指針恢復(fù)到被取消指令重命名之前的狀態(tài)。如上所述,物理寄存器組包含所有的物理寄存器,包括已經(jīng)被映射為體系結(jié)構(gòu)寄存器的物理寄存器和用于重命名操作的物理寄存器,而重命名寄存器隊(duì)列中包含的物理寄存器在運(yùn)行時(shí)是可以變化的,所有的物理寄存器都可能出現(xiàn)在任何一個(gè)重命名寄存器隊(duì)列中,可能原來不屬于任何一個(gè)隊(duì)列的物理寄存器被放到其中一個(gè)隊(duì)列中,也可能原來在一個(gè)隊(duì)列中的物理寄存器被放到另一個(gè)隊(duì)列中,但是在任何時(shí)刻不同隊(duì)列中的物理寄存器都是不重疊的,而所有重命名寄存器隊(duì)列中的項(xiàng)數(shù)加起來,就是微處理器中可被用于重命名操作的物理寄存器數(shù)量,包括空閑的和已被使用的。進(jìn)一步地,如上所述,重命名寄存器隊(duì)列從重命名寄存器隊(duì)列選擇指針指定的隊(duì)列開始,按照編號(hào)遞增的順序依次對(duì)應(yīng)需要進(jìn)行重命名操作的目標(biāo)寄存器,編號(hào)增加到最大后可以卷繞到最小的編號(hào)來進(jìn)行,比如假設(shè)有4個(gè)隊(duì)列,要給四個(gè)寄存器做重命名操作, 當(dāng)前重命名寄存器多列選擇指針為1,則這四個(gè)需要做重命名操作的寄存器,按照所屬指令的順序從前到后分別使用編號(hào)為1、2、3、0的重命名寄存器隊(duì)列的查找結(jié)果進(jìn)行重命名操作。進(jìn)一步地,在寄存器重命名時(shí)各個(gè)重命名寄存器隊(duì)列總是被依照編號(hào)的順序被依次使用的。。進(jìn)一步地,當(dāng)有指令因?yàn)楫惓;蚍种ьA(yù)測(cè)錯(cuò)誤被取消時(shí),要把RAT,所有的重命名寄存器隊(duì)列和重命名寄存器隊(duì)列選擇指針恢復(fù)到對(duì)這些指令做重命名操作之前的狀態(tài)。 RAT和重命名寄存器隊(duì)列選擇指針的恢復(fù)可以采用為每一個(gè)基本塊保留一個(gè)副本的形式, 當(dāng)發(fā)生指令取消時(shí)用副本覆蓋當(dāng)前值。重命名寄存器隊(duì)列的恢復(fù)方法是將隊(duì)列中的每個(gè)項(xiàng)中的基本塊編號(hào)與基本塊取消信號(hào)進(jìn)行比對(duì)。指令的取消是以基本塊為單位進(jìn)行的,基本塊取消信號(hào)指示哪些基本塊中的指令需要被取消,如果對(duì)列中的某一項(xiàng)的基本塊編號(hào)是屬于要被取消的基本塊,這一項(xiàng)的空閑/使用標(biāo)識(shí)將被重置為空閑,從而實(shí)現(xiàn)被取消指令的重命名寄存器釋放。至于該項(xiàng)的基本塊編號(hào),由于在物理寄存器處于空閑狀態(tài)時(shí)基本塊編號(hào)是沒有意義的,所以不需要恢復(fù)。進(jìn)一步地,被使用的物理寄存器在使用它的指令提交時(shí),會(huì)用該指令執(zhí)行前其目標(biāo)體系結(jié)構(gòu)寄存器所對(duì)應(yīng)的物理寄存器代替被該指令的重命名操作使用的物理寄存器在重命名寄存器隊(duì)列中的位置。比如該指令使用了編號(hào)2的重命名寄存器隊(duì)列的第3個(gè)物理寄存器,其物理寄存器地址為rail,該指令的目標(biāo)邏輯寄存器為R8,在體系結(jié)構(gòu)寄存器映射表中R8對(duì)應(yīng)的物理寄存器為PR19,則在該指令提交時(shí),邏輯寄存器R8被重新映射為 PRl 1,而編號(hào)2的重命名寄存器隊(duì)列的第3個(gè)物理寄存器由I3Rll變?yōu)镻R19,即冊(cè)19被從體系結(jié)構(gòu)寄存器映射表中刪除移入編號(hào)2的重命名寄存器隊(duì)列中的第3項(xiàng)(原rail所在的位置),而I3Rll被移入到體系結(jié)構(gòu)寄存器映射表中。本發(fā)明具有下列優(yōu)點(diǎn)
本發(fā)明使用多個(gè)互不重疊的重命名寄存器隊(duì)列對(duì)一個(gè)同一個(gè)物理寄存器組同時(shí)進(jìn)行空閑寄存器查找,每個(gè)隊(duì)列中所含的物理寄存器沒有地址范圍限制,通過重命名寄存器隊(duì)列選擇指針可以很方便的確定從物理寄存器組中選出的空閑物理寄存器與等待重命名的邏輯寄存器的對(duì)應(yīng)關(guān)系,而不需知道每個(gè)組中還有多少個(gè)空閑物理寄存器。當(dāng)同一周期內(nèi)需要對(duì)多個(gè)寄存器進(jìn)行重命名操作或物理寄存器的數(shù)目很多時(shí),本發(fā)明不是通過采用雙向搜索算法提高搜索速度,而是通過增加隊(duì)列數(shù),減少每個(gè)隊(duì)列查找的工作量而減小隊(duì)列搜索時(shí)間。由于根據(jù)重命名寄存器隊(duì)列指針進(jìn)行的重命名寄存器隊(duì)列搜索結(jié)果選擇和重命名寄存器隊(duì)列內(nèi)部的空閑物理寄存器搜索是同時(shí)進(jìn)行,設(shè)計(jì)者可以根據(jù)實(shí)際情況決定隊(duì)列數(shù)的多少和隊(duì)列的長度,達(dá)到隊(duì)列間搜索結(jié)果的選擇和隊(duì)列內(nèi)的搜索在時(shí)間上的平衡,從而提高重命名引擎的處理速度。
圖1是本發(fā)明的總體結(jié)構(gòu)示意圖。圖2顯示根據(jù)本發(fā)明的對(duì)重命名寄存器隊(duì)列和體系結(jié)構(gòu)寄存器映射表進(jìn)行更新前的各自的狀態(tài)。圖3顯示根據(jù)本發(fā)明的對(duì)重命名寄存器隊(duì)列和體系結(jié)構(gòu)寄存器映射表進(jìn)行更新后的各自的狀態(tài)。圖4示出了根據(jù)本發(fā)明的重命名寄存器隊(duì)列在發(fā)生基本塊取消前的狀態(tài)。圖5示出了根據(jù)本發(fā)明的重命名寄存器隊(duì)列在發(fā)生基本塊取消后的狀態(tài)。圖6是用于顯示根據(jù)被發(fā)明的方法的流程圖。
具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)描述
在本實(shí)施例中,物理寄存器組包括64個(gè)物理寄存器,其中有32個(gè)物理寄存器被映射為體系結(jié)構(gòu)寄存器,所述體系結(jié)構(gòu)寄存器,是保存確認(rèn)的邏輯寄存器內(nèi)容的物理寄存器,與邏輯寄存器一一對(duì)應(yīng),另外的32個(gè)物理寄存器為重命名寄存器,所述重命名寄存器,是在微處理器運(yùn)行時(shí)為了消除指令間的數(shù)據(jù)相關(guān)而臨時(shí)保存指令執(zhí)行結(jié)果的物理寄存器。特別地,本發(fā)明中的物理寄存器不限于64個(gè),一般來說,所述物理寄存器組可以包括M+N個(gè)物理寄存器,其中M為在微處理器運(yùn)行時(shí)被動(dòng)態(tài)地映射為體系結(jié)構(gòu)寄存器的物理寄存器的個(gè)數(shù),N為被映射為體系結(jié)構(gòu)寄存器的物理寄存器外用于重命名操作的物理寄存器的個(gè)數(shù)。在這種情況下,寄存器別名表RAT和體系結(jié)構(gòu)寄存器映射表ARMT的項(xiàng)數(shù)都是M,每一項(xiàng)分別對(duì)應(yīng)于一個(gè)邏輯寄存器。重命名引擎每個(gè)周期最多可以進(jìn)行4次重命名操作101、102、103和104,而ROB每個(gè)周期也最多可以提交4條指令。在本實(shí)施例中,共有4個(gè)重命名寄存器隊(duì)列105、106、107和108,每個(gè)隊(duì)列包含8
個(gè)物理寄存器。根據(jù)本發(fā)明,多個(gè)重命名寄存器隊(duì)列的數(shù)目大于或等于在微處理器的一個(gè)時(shí)鐘周期內(nèi)最多可以進(jìn)行的重命名操作的次數(shù)并且所述多個(gè)重命名寄存器隊(duì)列中的每個(gè)項(xiàng)中保存的物理寄存器地址在微處理器運(yùn)行時(shí)是可變的。當(dāng)重命名寄存器隊(duì)列的數(shù)目大于在微處理器的一個(gè)時(shí)鐘周期內(nèi)最多可以進(jìn)行的重命名操作的次數(shù)時(shí),對(duì)于同樣的物理寄存器數(shù)目的情況可以使每個(gè)重命名寄存器隊(duì)列的長度更短,從而減小隊(duì)列的搜索時(shí)間。請(qǐng)注意雖然上文表示了每個(gè)重命名寄存器隊(duì)包括相等的物理寄存器數(shù)量(即,具有相等的項(xiàng)數(shù)),但是本發(fā)明并不限于此。多個(gè)重命名寄存器隊(duì)列中每個(gè)隊(duì)列的項(xiàng)數(shù)可以是不相等的。 這在用于重命名操作的物理寄存器數(shù)目不能被重命名寄存器隊(duì)列數(shù)整除的情況下會(huì)出現(xiàn)。 在這種情況下,可以把整除后的余下的寄存器按照重命名寄存器隊(duì)列選擇指針增加的方向按每隊(duì)列一個(gè)依次分配給從編號(hào)零開始的重命名寄存器隊(duì)列,直到分配完為止。繼續(xù)參照?qǐng)D1,四個(gè)重命名寄存器隊(duì)列同時(shí)查找各自的空閑寄存器,查找的結(jié)果由四個(gè)多選器109、 110、111和112根據(jù)重命名寄存器隊(duì)列選擇指針的值決定將被用于如圖1所示的四個(gè)重命名操作101、102、103和104中的哪一個(gè)。根據(jù)本發(fā)明,使用譯碼器還提供需要進(jìn)行重命名操作的邏輯寄存器的地址,為清楚起見,未在圖1中示出譯碼器。雖然在本發(fā)明中使用譯碼器來提供需要進(jìn)行重命名操作的邏輯寄存器的地址,但是本領(lǐng)域的技術(shù)人員能夠想到提供需要進(jìn)行重命名操作的邏輯寄存器的地址的其它方式。下面具體說明如何對(duì)邏輯寄存器進(jìn)行重命名操作。首先,如上所述,四個(gè)重命名寄存器隊(duì)列同時(shí)查找各自的空閑寄存器,從每個(gè)隊(duì)列找出一個(gè)空閑的物理寄存器的物理寄存器地址;此后,根據(jù)重命名寄存器隊(duì)列選擇指針,將從該指針?biāo)付ǖ闹孛拇嫫麝?duì)列中查到的空閑物理寄存器地址賦給需要做重命名操作的第一個(gè)邏輯寄存器(即,進(jìn)行第一重命名操作);此后將用于重命名的該物理寄存器的空閑/使用標(biāo)識(shí)設(shè)為使用并將用于重命名的該物理寄存器在重命名寄存器隊(duì)列中的基本塊編號(hào)設(shè)為等于使用這個(gè)物理寄存器的指令所屬的基本塊編號(hào)。如果還有多個(gè)邏輯寄存器需要進(jìn)行重命名操作,則將寄存器隊(duì)列選擇指針加1,并重復(fù)進(jìn)行上述操作(即,進(jìn)行第二重命名操作直到第四重命名操作)。注意,在圖1中,前三個(gè)重命名操作101、102和103的重命名結(jié)果被發(fā)給源操作數(shù)寄存器重命名邏輯用于解決在本周期內(nèi)指令間的數(shù)據(jù)相關(guān)。如果等待進(jìn)行重命名的指令間存在先寫后讀數(shù)據(jù)相關(guān),那么對(duì)使用前面指令的目標(biāo)體系結(jié)構(gòu)寄存器作為源操作數(shù)寄存器的指令來說,源操作數(shù)寄存器的物理地址將不再來自寄存器別名表而是來自109、110或 111的重命名結(jié)果。所有4個(gè)重命名結(jié)果都要被送到寄存器別名表中用于更新寄存器別名表。當(dāng)ROB提交指令時(shí),從體系結(jié)構(gòu)寄存器映射表中找到提交指令的目標(biāo)寄存器邏輯地址所對(duì)應(yīng)的物理寄存器地址,在重命名寄存器隊(duì)列中搜索提交的指令的目標(biāo)寄存器物理地址所在的項(xiàng),用在體系結(jié)構(gòu)寄存器映射表中讀出的物理寄存器地址替代原來的值,而在體系結(jié)構(gòu)寄存器映射表中原來存儲(chǔ)的物理寄存器地址也將被提交指令的物理寄存器地址所替換。下面具體描述當(dāng)指令提交時(shí)更新重命名寄存器隊(duì)列和體系結(jié)構(gòu)寄存器映射表的過程。圖2和圖3分別顯示了重命名寄存器隊(duì)列和體系結(jié)構(gòu)寄存器映射表更新前的狀態(tài)和更新后的狀態(tài)。在圖2中,左側(cè)是待提交的4個(gè)ROB項(xiàng),提交的順序是由下至上。其中與重命名寄存器隊(duì)列更新有關(guān)的三項(xiàng)分別是保存目標(biāo)寄存器有效位的項(xiàng)201、202、203和 204,保存目標(biāo)寄存器邏輯地址的項(xiàng)205、206、207和208以及保存目標(biāo)寄存器物理地址的項(xiàng) 209、210、211 和 212。先判斷第一個(gè)被提交項(xiàng)的ROB項(xiàng)中的目標(biāo)寄存器有效位,如圖所示,201中的內(nèi)容為1,這表示這條被提交的指令使用了目標(biāo)寄存器。根據(jù)保存在205中的目標(biāo)寄存器邏輯地址R2在體系結(jié)構(gòu)寄存器映射表ARMT中找到保存與R2相對(duì)應(yīng)的物理寄存器地址冊(cè)13的項(xiàng)217,此后根據(jù)保存在209中的指令的目標(biāo)寄存器物理地址冊(cè)19在重命名寄存器隊(duì)列2 中找到項(xiàng)213,項(xiàng)213中保存的物理寄存器地址冊(cè)19與209中保存的目標(biāo)寄存器物理地址冊(cè)19 一致,其中213的左邊是物理寄存器地址,右邊是空閑/使用標(biāo)識(shí),目前為1,表示該物理寄存器已經(jīng)被用于重命名操作,213的基本塊編號(hào)因?yàn)樵诟轮袥]有用到所以沒有畫出來。此時(shí),將項(xiàng)217的內(nèi)容冊(cè)13存入213中,并把213的空閑使用標(biāo)識(shí)設(shè)為0 (表示空閑), 而同時(shí)把209的內(nèi)容存入217中,完成第一個(gè)被提交的ROB項(xiàng)的寄存器重命名隊(duì)列和體系結(jié)構(gòu)寄存器映射表更新工作。再判斷第二個(gè)被提交的ROB項(xiàng)的目標(biāo)寄存器有效位,如圖所示,202中的內(nèi)容為1, 表示這條被提交的指令使用了目標(biāo)寄存器。根據(jù)保存在206中的目標(biāo)寄存器邏輯地址R9 在體系結(jié)構(gòu)寄存器映射表ARMT中找到保存與R9相對(duì)應(yīng)的物理寄存器地址PR4的項(xiàng)218,此后根據(jù)保存在210中的指令的目標(biāo)寄存器物理地址冊(cè)19在重命名寄存器隊(duì)列3中找到項(xiàng) 214,項(xiàng)214中保存的物理寄存器地址PR3與210中保存的目標(biāo)寄存器物理地址PR3 —致。 此時(shí),將項(xiàng)218的內(nèi)容PR4存入214中,并把214的空閑使用標(biāo)識(shí)設(shè)為0 (表示空閑),而同時(shí)把210的內(nèi)容PR3存入218中,完成第二個(gè)被提交的ROB項(xiàng)的寄存器重命名隊(duì)列和體系結(jié)構(gòu)寄存器映射表更新工作。然后判斷第三個(gè)被提交項(xiàng)的目標(biāo)寄存器有效位,如圖所示,203中的內(nèi)容為0,表示這條指令沒有使用目標(biāo)寄存器,因此也不需要進(jìn)行更新操作。最后判斷第四個(gè)被提交項(xiàng)的目標(biāo)寄存器有效位,如圖所述,204中的內(nèi)容為1,表示這條被提交的指令使用了目標(biāo)寄存器。根據(jù)保存在206中的目標(biāo)寄存器邏輯地址R8在體系結(jié)構(gòu)寄存器映射表ARMT中找到保存與R8相對(duì)應(yīng)的物理寄存器地址PR16的項(xiàng)219,此后根據(jù)保存在212中的指令的目標(biāo)寄存器物理地址冊(cè)12在重命名寄存器隊(duì)列0中找到項(xiàng) 215,項(xiàng)215中保存的物理寄存器地址冊(cè)12與212中保存的目標(biāo)寄存器物理地址冊(cè)12—致。 215的格式與213和214 —樣。此時(shí),將項(xiàng)219的內(nèi)容存入215中,并把215的空閑使用標(biāo)識(shí)設(shè)為0 (表示空閑),而同時(shí)把212的內(nèi)容冊(cè)12存入219中,完成第四個(gè)被提交項(xiàng)的寄存器重命名隊(duì)列和體系結(jié)構(gòu)寄存器映射表更新工作。更新完成后的重命名寄存器隊(duì)列了體系結(jié)構(gòu)寄存器映射表的狀態(tài)如圖3所示。參照?qǐng)D4和圖5,分別示出了根據(jù)本發(fā)明的重命名寄存器隊(duì)列在指令取消前的狀態(tài)。圖5表示出了根據(jù)本發(fā)明的重命名寄存器隊(duì)列在指令發(fā)生基本塊取消前和取消后的狀態(tài)。假設(shè)有分支預(yù)測(cè)錯(cuò)誤發(fā)生,微處理器中正在運(yùn)行的部分基本塊要取消,圖4表示重命名寄存器隊(duì)列在發(fā)生基本塊取消前的狀態(tài),此時(shí)重命名寄存器隊(duì)列選擇指針指向重命名寄存器隊(duì)列1,有效的基本塊有第1、2、3、4、5五塊。正如本領(lǐng)域所公知的,所述基本塊表示微處理器實(shí)際執(zhí)行的指令流中,分支指令和該分支指令之前到上一條分支指令之間的內(nèi)容,在有分支延遲槽的微處理器中,還包括該分支指令的延遲槽中的指令。也就是說,每個(gè)基本塊包含的是一個(gè)內(nèi)部沒有分支的程序段,也是分支預(yù)測(cè)錯(cuò)誤時(shí)指令取消的基本單位, 取消某一基本塊的意義就是該基本塊內(nèi)的所有指令都要被取消。假設(shè)處于基本塊2的分支指令預(yù)測(cè)錯(cuò)誤,則要取消第3、4、5三個(gè)基本塊內(nèi)的指令,并收回對(duì)它們進(jìn)行的重命名操作。 重命名寄存器的每一項(xiàng)都包括它所對(duì)應(yīng)的基本塊編號(hào),在恢復(fù)重命名寄存器隊(duì)列時(shí)要看這一編號(hào)所對(duì)應(yīng)的基本塊是不是要被取消,在本例中,基本塊編號(hào)為3、4、5的項(xiàng)要被取消,即將它們的空閑/使用標(biāo)識(shí)設(shè)為空閑。圖5是恢復(fù)后的狀態(tài),重命名寄存器隊(duì)列選擇指針也要被恢復(fù),可以通過為每一個(gè)基本塊結(jié)束時(shí)的重命名寄存器隊(duì)列選擇指針保留一個(gè)副本,在恢復(fù)時(shí)調(diào)用這個(gè)副本來實(shí)現(xiàn)。最后應(yīng)說明的是以上實(shí)施例僅用以說明而非限制本發(fā)明的技術(shù)方案,盡管參照上述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解依然可以對(duì)本發(fā)明進(jìn)行修改或者等同替換,而不脫離本發(fā)明的精神和范圍的任何修改或局部替換,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
1.一種采用多個(gè)重命名寄存器隊(duì)列管理重命名寄存器的寄存器重命名系統(tǒng),所述系統(tǒng)包括物理寄存器組,包括在微處理器運(yùn)行時(shí)被動(dòng)態(tài)地映射為用于保存已提交的指令的結(jié)果的體系結(jié)構(gòu)寄存器和用于保存提交前指令結(jié)果的重命名寄存器,所述重命名寄存器被分成所述多個(gè)重命名寄存器隊(duì)列,每個(gè)重命名寄存器隊(duì)列包括多項(xiàng),每項(xiàng)又包括寄存器空閑/ 使用標(biāo)識(shí)、物理寄存器地址和使用這個(gè)物理寄存器的指令所在的基本塊編號(hào);寄存器別名表RAT,所述RAT保存最新的邏輯寄存器與物理寄存器之間的映射關(guān)系,準(zhǔn)備進(jìn)行重命名的指令的源操作數(shù)寄存器以寄存器別名表的內(nèi)容作為重命名的依據(jù);體系結(jié)構(gòu)寄存器映射表ARMT,指示在當(dāng)前狀態(tài)下哪些物理寄存器是被當(dāng)作體系結(jié)構(gòu)寄存器使用,也即保存已經(jīng)被確認(rèn)的邏輯寄存器與物理寄存器的映射關(guān)系;重命名寄存器隊(duì)列選擇指針,用于指示當(dāng)前被用于重命名操作的物理寄存器來自所述多個(gè)重命名寄存器隊(duì)列中的哪個(gè)重命名寄存器隊(duì)列;譯碼器,用于提供需要進(jìn)行重命名操作的一個(gè)或多個(gè)邏輯寄存器地址; 寄存器重命名裝置,用于對(duì)所述一個(gè)或多個(gè)邏輯寄存器進(jìn)行重命名操作; RAT修改裝置,用于根據(jù)重命名操作的結(jié)果修改RAT ; 重命名寄存器隊(duì)列更新裝置,用于對(duì)重命名寄存器隊(duì)列進(jìn)行更新操作,以及 AMRT更新指針,用于對(duì)AMRT進(jìn)行更新操作。
2.根據(jù)權(quán)利要求1的系統(tǒng),其中所述寄存器重命名裝置通過以下操作對(duì)所述一個(gè)或多個(gè)邏輯寄存器進(jìn)行重命名操作(i)并行查找所述多個(gè)重命名寄存器隊(duì)列,從每個(gè)隊(duì)列找出一個(gè)空閑的物理寄存器的物理寄存器地址;(ii)根據(jù)重命名寄存器隊(duì)列選擇指針,將從該指針?biāo)付ǖ闹孛拇嫫麝?duì)列中查到的空閑物理寄存器地址賦給需要做重命名操作的第一個(gè)邏輯寄存器;(iii)將用于重命名的物理寄存器的空閑/使用標(biāo)識(shí)設(shè)為使用,以及(iv)將用于重命名的物理寄存器在重命名寄存器隊(duì)列中的基本塊編號(hào)設(shè)為等于使用這個(gè)物理寄存器的指令所屬的基本塊編號(hào),(ν)如果有多個(gè)邏輯寄存器需要進(jìn)行重命名操作,則將寄存器隊(duì)列選擇指針加1,并重復(fù)步驟(i)- (iv)的操作。
3.根據(jù)權(quán)利要求1的系統(tǒng),其中所述重命名寄存器隊(duì)列更新裝置通過以下步驟對(duì)重命名寄存器隊(duì)列進(jìn)行更新操作(i)根據(jù)ROB要提交的指令的目標(biāo)寄存器邏輯地址在ARMT中查找到的與該目標(biāo)寄存器邏輯地址對(duì)應(yīng)的物理寄存器地址;(ii)根據(jù)ROB要提交的指令的目標(biāo)寄存器物理地址在各個(gè)重命名寄存器隊(duì)列中查找到保存這個(gè)目標(biāo)寄存器物理地址的項(xiàng);(iii)將重命名寄存器隊(duì)列中保存所述目標(biāo)寄存器物理地址的項(xiàng)的物理寄存器地址改為從ARMT中查到的物理寄存器地址;(iv)將重命名寄存器隊(duì)列中保存所述目標(biāo)寄存器物理地址的項(xiàng)的空閑/使用標(biāo)識(shí)改為空閑,以及(ν)如果重命名寄存器隊(duì)列中有多個(gè)項(xiàng)需要更新,則重復(fù)步驟(i)_ (iv)的操作。
4.根據(jù)權(quán)利要求3的系統(tǒng),其中所述ARMT更新裝置通過將在ARMT中查找到的與所述指令的目標(biāo)寄存器邏輯地址所對(duì)應(yīng)的物理寄存器地址替換為ROB要提交的指令的目標(biāo)寄存器物理地址來完成對(duì)AMRT的更新操作。
5.根據(jù)權(quán)利要求1的系統(tǒng),其中所述重命名寄存器隊(duì)列選擇指針的內(nèi)容就是要被用于邏輯寄存器重命名操作的物理寄存器所屬的重命名寄存器隊(duì)列的編號(hào),每對(duì)一個(gè)邏輯寄存器做一次重命名操作就要將重命名寄存器隊(duì)列選擇指針加1,以選擇下一個(gè)重命名寄存器隊(duì)列。
6.一種采用多個(gè)重命名寄存器隊(duì)列管理重命名寄存器的方法,所述重命名寄存器被分成所述多個(gè)重命名寄存器隊(duì)列,每個(gè)重命名寄存器隊(duì)列包括多項(xiàng),每項(xiàng)又包括寄存器空閑/使用標(biāo)識(shí)、物理寄存器地址和使用這個(gè)物理寄存器的指令所在的基本塊編號(hào),所述方法包括使用譯碼器提供需要進(jìn)行重命名操作的一個(gè)或多個(gè)邏輯寄存器地址;對(duì)所述一個(gè)或多個(gè)邏輯寄存器進(jìn)行重命名操作;根據(jù)重命名操作的結(jié)果修改寄存器別名表RAT,其中所述RAT保存最新的邏輯寄存器與物理寄存器之間的映射關(guān)系,準(zhǔn)備進(jìn)行重命名的指令的源操作數(shù)寄存器以寄存器別名表的內(nèi)容作為重命名的依據(jù);在指令提交時(shí),根據(jù)重排序緩沖器ROB要提交的指令的目標(biāo)寄存器邏輯地址和物理地址對(duì)重命名寄存器隊(duì)列進(jìn)行更新操作,以及在指令提交時(shí),根據(jù)ROB要提交的指令的目標(biāo)寄存器邏輯地址和物理地址對(duì)體系結(jié)構(gòu)寄存器映射表AMRT進(jìn)行更新操作。
7.根據(jù)權(quán)利要求6的方法,其中通過以下操對(duì)所述一個(gè)或多個(gè)邏輯寄存器進(jìn)行重命名操作(i)并行查找所述多個(gè)重命名寄存器隊(duì)列,從每個(gè)隊(duì)列找出一個(gè)空閑的物理寄存器的物理寄存器地址;(ii)根據(jù)重命名寄存器隊(duì)列選擇指針,將從該指針?biāo)付ǖ闹孛拇嫫麝?duì)列中查到的空閑物理寄存器地址賦給需要做重命名操作的第一個(gè)邏輯寄存器,其中所述重命名寄存器隊(duì)列選擇指針用于指示當(dāng)前被用于重命名操作的物理寄存器來自所述多個(gè)重命名寄存器隊(duì)列中的哪個(gè)重命名寄存器隊(duì)列;(iii)將用于重命名的物理寄存器的空閑/使用標(biāo)識(shí)設(shè)為使用,以及(iv)將用于重命名的物理寄存器在重命名寄存器隊(duì)列中的基本塊編號(hào)設(shè)為等于使用這個(gè)物理寄存器的指令所屬的基本塊編號(hào),以及(ν)如果有多個(gè)體系結(jié)構(gòu)寄存器需要進(jìn)行重命名操作,則將寄存器隊(duì)列選擇指針加1, 并重復(fù)步驟(i)_ (iv)的操作。
8.根據(jù)權(quán)利要求6的方法,其中通過以下步驟對(duì)重命名寄存器隊(duì)列進(jìn)行更新操作(i)根據(jù)ROB要提交的指令的目標(biāo)寄存器邏輯地址在ARMT中查找到與該目標(biāo)寄存器邏輯地址對(duì)應(yīng)的物理寄存器地址,其中所述ARMT保存已經(jīng)被確認(rèn)的體系結(jié)構(gòu)寄存器與物理寄存器的映射關(guān)系;(ii)根據(jù)ROB要提交的指令的目標(biāo)寄存器物理地址在各個(gè)重命名寄存器隊(duì)列中查找到保存這個(gè)目標(biāo)寄存器物理地址的項(xiàng);(iii)將重命名寄存器隊(duì)列中保存所述目標(biāo)寄存器物理地址的項(xiàng)的物理寄存器地址改為從ARMT中查到的物理寄存器地址;以及(iv)將重命名寄存器隊(duì)列中保存所述目標(biāo)寄存器物理地址的項(xiàng)的空閑/使用標(biāo)識(shí)改為空閑,以及(ν)如果重命名寄存器隊(duì)列中有多個(gè)項(xiàng)需要更新,則重復(fù)步驟(i)_ (iv)的操作。
9.根據(jù)權(quán)利要求8的方法,其中通過將在ARMT中查找到的與所述指令的目標(biāo)寄存器邏輯地址所對(duì)應(yīng)的物理寄存器地址替換為ROB要提交的指令的目標(biāo)寄存器物理地址來完成對(duì)AMRT的更新操作。
10.根據(jù)權(quán)利要求6的方法,進(jìn)一步包括從重命名寄存器隊(duì)列選擇指針指定的隊(duì)列開始,按照編號(hào)遞增的順序依次從各個(gè)重命名寄存器隊(duì)列中查找將被賦給需要做重命名操作的邏輯寄存器的空閑物理寄存器,隊(duì)列編號(hào)增加到最大后可以回卷到最小的編號(hào)來進(jìn)行。
全文摘要
本發(fā)明涉及管理重命名寄存器的寄存器重命名系統(tǒng)和方法。具體地,本發(fā)明提供了一種采用多個(gè)重命名寄存器隊(duì)列管理重命名寄存器的寄存器重命名系統(tǒng),所述系統(tǒng)包括物理寄存器組;寄存器別名表RAT;體系結(jié)構(gòu)寄存器映射表ARMT;重命名寄存器隊(duì)列選擇指針;譯碼器;邏輯寄存器重命名裝置;RAT修改裝置和重命名寄存器隊(duì)列更新裝置。此外,本發(fā)明還提供了一種采用多個(gè)重命名寄存器隊(duì)列管理重命名寄存器的方法。根據(jù)本發(fā)明的技術(shù)方案,可以在同一周期內(nèi)同時(shí)進(jìn)行多個(gè)寄存器重命名操作,實(shí)現(xiàn)方法簡單,時(shí)間開銷小,適用于有較高發(fā)射寬度的超標(biāo)量微處理器。
文檔編號(hào)G06F9/38GK102566976SQ20101060722
公開日2012年7月11日 申請(qǐng)日期2010年12月27日 優(yōu)先權(quán)日2010年12月27日
發(fā)明者楊思博 申請(qǐng)人:北京國睿中數(shù)科技股份有限公司