來控制相應(yīng)的MUX0主RS 204的繞過輸出230以類似的方式被分布在MUX 310 - 320的其他輸入之間。推送輸出和繞過輸出206和230的具體數(shù)目和配置可基于特定實(shí)現(xiàn)方式而變化。
[0051]雖然次RS 208被示為用這里描述的RS結(jié)構(gòu)中的選定一種(例如,多重分派、分害J、集群)來實(shí)現(xiàn),但次RS 208也可用這些結(jié)構(gòu)的組合來實(shí)現(xiàn)。
[0052]圖6是包括被示為RSQ 602的傳統(tǒng)RS結(jié)構(gòu)的流水線600的簡(jiǎn)化框圖。RSQ 602表示單獨(dú)用作唯一 RS結(jié)構(gòu)的已知RS結(jié)構(gòu)中的任何一種。在圖6中以單數(shù)形式示出和描述了信號(hào)路徑,其中要理解通過流水線600可處理多個(gè)指令。例如,微處理器流水線在給定的時(shí)鐘周期中發(fā)射最多四個(gè)指令并且分派最多六個(gè)指令是常見的。RAT 106的輸出向MUX 202的一個(gè)輸入并且向ROB 110的一個(gè)輸入發(fā)射指令。ROB 110具有一個(gè)重發(fā)射輸出,向鎖存級(jí)606的輸入提供重發(fā)射指令,鎖存級(jí)606的輸出被提供到MUX 202的另一輸入。包括鎖存級(jí)606在內(nèi)的每個(gè)鎖存級(jí)包括被一同步時(shí)鐘信號(hào)控制的多個(gè)鎖存器,用以同步數(shù)據(jù)吞吐量。ROB 110的輸出響應(yīng)于時(shí)鐘通過鎖存級(jí)606被鎖存到MUX 202。垂直虛線標(biāo)示流水線600的同步級(jí)之間的邊界。例如,與鎖存級(jí)606和RAT 106對(duì)齊的垂直虛線608表示RAT106和鎖存級(jí)606的輸出是彼此同步的并且是在同一時(shí)鐘周期中提供的。RAT 106和ROB110具有內(nèi)部鎖存級(jí)(未示出),用于提供與時(shí)鐘信號(hào)同步的發(fā)射/重發(fā)射指令。對(duì)于MUX202,ROB 110的輸出落后RAT 106的輸出一個(gè)時(shí)鐘周期。
[0053]MUX 202的輸出被提供到另一鎖存級(jí)610的輸入,鎖存級(jí)610的輸出耦合到RSQ602的輸入并且耦合到RS FULL邏輯612的輸入。鎖存級(jí)610同步被提供到RSQ 602的發(fā)射/重發(fā)射指令并且確保流水線600的適當(dāng)時(shí)序。RS FULL邏輯612從RSQ 602接收RSQ602中的空條目的數(shù)目并且從鎖存級(jí)610接收在當(dāng)前周期期間要被存儲(chǔ)到RSQ 602中的指令的數(shù)目,從而確定并輸出RS_FULL信號(hào)到另一鎖存級(jí)614的輸入。鎖存級(jí)614的輸出耦合到重發(fā)射指針計(jì)算器616的輸入,重發(fā)射指針計(jì)算器616通過另一鎖存級(jí)618向ROB 110的另一輸入提供重發(fā)射指針RPT。RSQ 602的輸出向寄存器模塊216分派指令。至少與重發(fā)射模式相關(guān)的流水線級(jí)被分別標(biāo)記為RI_E (鎖存級(jí)618位于其中)、RI_A (鎖存級(jí)618的輸出)、RI_B(R0B 110的輸出)、RI_C(鎖存級(jí)606的輸出)和RI_D(RS FULL邏輯612位于其中,并且在鎖存級(jí)610的輸出處)。
[0054]在普通操作期間,MUX 202選擇RAT 106的輸出,RAT 106向RSQ 602并且向ROB110發(fā)射指令(或指令標(biāo)簽)。RSQ 602經(jīng)由寄存器模塊216將接收到的指令分派到執(zhí)行單元112。如果RSQ 602中的指令沒有一個(gè)準(zhǔn)備好被分派(例如,指令的操作數(shù)尚未準(zhǔn)備好),則它們可累積在RSQ 602中直到其變滿為止。當(dāng)RSQ 602已滿并且不能夠接收更多指令時(shí),RSQ FULL邏輯612聲明RS_FULL信號(hào)。當(dāng)RS_FULL被聲明時(shí),MUX 202被禁用并且不輸出額外的指令。從RAT 106發(fā)射的額外的指令會(huì)繼續(xù)累積在ROB 110內(nèi),如果RSQ 602在充分?jǐn)?shù)量的周期仍舊保持為滿,則ROB 110可變滿。
[0055]當(dāng)RS_FULL信號(hào)被取消聲明時(shí)(例如,在RS_FULL信號(hào)被聲明后的一個(gè)周期后),流水線轉(zhuǎn)換到重發(fā)射模式,其中MUX 202改為經(jīng)由鎖存級(jí)606選擇ROB 110的輸出。MUX202可不立即被切換,而是最終被切換用于重發(fā)射模式,如本文進(jìn)一步描述。即使ROB 110經(jīng)由重發(fā)射路徑(鎖存級(jí)606、MUX 202、鎖存級(jí)610)向RSQ 602 “重發(fā)射”后續(xù)指令,指令也只被RSQ 602按順序接收,以使得其取得的下一個(gè)指令是RSQ 602拒絕的第一指令。當(dāng)RS FULL邏輯612在重發(fā)射級(jí)RI_D中取消聲明RS_FULL信號(hào)時(shí),被取消聲明的RS_FULL信號(hào)經(jīng)由鎖存級(jí)614被傳遞到重發(fā)射指針計(jì)算器616。在級(jí)RI_E中的下一時(shí)鐘周期中,重發(fā)射指針計(jì)算器616確定相應(yīng)的重發(fā)射指針RPT。在級(jí)RI_A中的下一時(shí)鐘周期中,RPT經(jīng)由鎖存級(jí)618被傳遞到ROB IlOo重發(fā)射指針RPT指向ROB 110內(nèi)的與被RSQ 602拒絕的第一指令相對(duì)應(yīng)的指令條目,從而操作可從該指令起繼續(xù)進(jìn)行。在級(jí)Ri_B中的下一時(shí)鐘周期中,根據(jù)RPT可從ROB 110讀取該第一被拒指令。在級(jí)RI_C中的下一時(shí)鐘周期中,由MUX202從鎖存級(jí)606輸出第一指令(第一被拒指令)并且由ROB 110輸出第二指令。在下一時(shí)鐘周期中,第一指令再次被呈現(xiàn)給RSQ 602。注意,從RS_FULL信號(hào)被取消聲明起直到第一指令最終被提供回到RSQ 602的輸入為止要花至少4個(gè)時(shí)鐘周期(級(jí)RI_E、RI_A、RI_B、RI_C) o另外,如果RSQ 602再次為滿,則若干個(gè)后續(xù)指令可經(jīng)由ROB 110在重發(fā)射路徑中循環(huán),直到RSQ 602不再滿為止。最終,當(dāng)(ROB 110的)ROB指針變得等于(RAT 106的)RAT指針時(shí),操作恢復(fù)到普通操作,其中MUX 202被切換回到RAT 106的輸出。
[0056]傳統(tǒng)流水線的重發(fā)射路徑在RSQ 602取消聲明RS_FULL時(shí)插入“氣泡”或延遲。即使RS_FULL在被聲明之后的下一個(gè)時(shí)鐘周期就被取消聲明,重發(fā)射指針RPT也首先被計(jì)算并被提供到ROB 110,ROB 110隨后在下一周期中可輸出相應(yīng)的(第一被拒)指令,這在最終被提供回到RSQ 602的輸入之前要再花兩個(gè)時(shí)鐘周期。因此對(duì)于操作的重發(fā)射模式,最短的重發(fā)射延遲是至少四個(gè)時(shí)鐘周期。另外,如果RSQ 602再次為滿,則插入額外的延遲周期。
[0057]圖7是包括根據(jù)本發(fā)明的一個(gè)實(shí)施例的融合RS結(jié)構(gòu)的流水線700的簡(jiǎn)化框圖。流水線700中的與流水線600的組件相似的組件具有相同的標(biāo)號(hào)。流水線700的前端是相似的,包括以類似方式耦合的RAT 106,ROB 110,MUX 202、鎖存級(jí)606、重發(fā)射指針計(jì)算器616和鎖存級(jí)618。RSQ 602被融合RS模塊108替換,其中鎖存級(jí)610被具有內(nèi)部鎖存級(jí)(未示出)的主RS 204替換以在普通操作期間符合相似的時(shí)序。重發(fā)射流水線級(jí)RI_A(鎖存級(jí)618的輸出)、RI_B(R0B 110的輸出)和RI_C(鎖存級(jí)606的輸出)以相似的方式命名。在此情況中,重發(fā)射流水線級(jí)RI_E被重命名為RI_D (或者不然的話RI_D被移動(dòng)并且RI_E被消除)。在級(jí)RI_C中,RS FULL邏輯612根據(jù)主RS 204中的空條目的數(shù)目和在當(dāng)前周期期間將從MUX 202存儲(chǔ)到主RS 204中的指令的數(shù)目來確定RS_FULL信號(hào)。RS FULL信號(hào)被提供到鎖存級(jí)614,鎖存級(jí)614的輸出以類似的方式被提供回到重發(fā)射指針計(jì)算器616的輸入,只不過鎖存級(jí)614與主RS 204對(duì)齊。這樣,與流水線600相比,在RS_FULL信號(hào)的取消聲明之后,重發(fā)射指針RPT更早一個(gè)周期被重發(fā)射指針計(jì)算器616計(jì)算(在重發(fā)射級(jí)RI_D中)并被提供到ROB 110 (在重發(fā)射級(jí)RI_A中)。
[0058]融合RS模塊108也包括次RS 208,其具有接收主RS 204的推送輸出206的輸入。次RS 208的分派輸出210被提供到繞過系統(tǒng)212的第一輸入。主RS 204的繞過輸出230被提供到繞過系統(tǒng)212的第二輸入,繞過系統(tǒng)212具有向寄存器模塊216提供分派的指令的輸出,用于如前所述向執(zhí)行單元112提供指令。繞過系統(tǒng)212根據(jù)在當(dāng)前時(shí)鐘周期期間在次RS 208中是否有任何指令準(zhǔn)備好被分派來在次RS 208的分派輸出210和繞過輸出230之間作出選擇來分派指令。融合RS模塊108可根據(jù)本文描述的任何配置實(shí)現(xiàn),例如圖2 - 5所示的那些。
[0059]當(dāng)次RS 208已滿或者因其他原因不能從任何RSQ分派指令時(shí),并且如果主RS 204具有至少一個(gè)指令準(zhǔn)備好分派,則主RS 204可經(jīng)由繞過輸出230分派至少一個(gè)指令(包括如前所述的部分繞過分派)。另外,當(dāng)次RS 208已滿時(shí),指令繼續(xù)被發(fā)射到主RS 204中,直到次RS 208不再為滿為止或者直到主RS 204變滿為止。當(dāng)主RS 208也已滿時(shí),RS_FULL信號(hào)被聲明,然后被取消聲明以發(fā)起重發(fā)射模式。當(dāng)RS_FULL信號(hào)由于次RS 208不再為滿而被取消聲明時(shí),取消聲明的RS_FULL信號(hào)經(jīng)過RS FULL邏輯612并且通過鎖存級(jí)614被鎖存,重發(fā)射指針計(jì)算器616根據(jù)取消聲明的RS_FULL信號(hào)計(jì)算重發(fā)射指針RPT,并且重發(fā)射指針RPT通過鎖存級(jí)618被鎖存并被提供到ROB 110。當(dāng)次RS 208從滿變成不滿時(shí),不是必須在三個(gè)時(shí)鐘周期(級(jí)RI_D、RI_A和RI_B)期間等待來自ROB 110的重發(fā)射指令,而是指令可被從主RS 204推送到次RS 208中以在來自ROB 110的重發(fā)射指令到達(dá)之前喂給饑餓的次RS 208。
[0060]流水線700的重發(fā)射操作與流水線600的類似,除了重發(fā)射路徑具有更少的延遲以外。例如,如果RS_FULL在被聲明之后的下一個(gè)時(shí)鐘周期就被取消聲明,則重發(fā)射指針RPT被計(jì)算并被提供到ROB 110,ROB 110隨后在下一周期中可輸出相應(yīng)的(第一被拒)指令,這在最終被提供回到主RS 204的輸入之前只要再花一個(gè)時(shí)鐘周期。最短的重發(fā)射延遲因此只是三個(gè)時(shí)鐘周期。另外,一旦次RS 208不再滿,主RS 204就可開始在重發(fā)射過程期間向次RS 208喂指令。到執(zhí)行單元1