專利名稱:數(shù)據(jù)處理設備中的流水線之間的同步化的制作方法
技術領域:
本發(fā)明涉及一種用于實現(xiàn)數(shù)據(jù)處理設備中的流水線之間的同步化術。
背景技術:
為人們所公知的是,給數(shù)據(jù)處理設備提供一種采取了具有多個流水線級的流水線處理器的形式的主處理器。這使多條指令能在任何時間點處于主處理器所執(zhí)行的過程中。在執(zhí)行任何特定指令期間,該指令都將經過主處理器的各個流水線級,當經由主處理器的末級流水線級處理所述指令時,那條指令的執(zhí)行典型地結束,在該點處更新數(shù)據(jù)處理設備的狀態(tài)以反映那條指令的執(zhí)行結果。作為一個例子,可能會依據(jù)指令的執(zhí)行結果來更新可由主處理器訪問的寄存器組的一個或多個寄存器的內容。
同樣為人們所公知的是,給數(shù)據(jù)處理設備提供一個或多個協(xié)處理器用于執(zhí)行特定的協(xié)處理器指令,所述協(xié)處理器指令出現(xiàn)在將由數(shù)據(jù)處理設備執(zhí)行的指令序列中。在主處理器具備流水線結構的情況下,協(xié)處理器具備流水線結構也是常見的,因此協(xié)處理器還具有多個流水線級同樣也是常見的,其中經由所述多個流水線級處理協(xié)處理器指令以便執(zhí)行那條協(xié)處理器指令。典型來講,將每條協(xié)處理器指令設置成能通過主處理器的流水線和協(xié)處理器的流水線兩者而被路由。所述協(xié)處理器是用來與主處理器差不多同步地運行,因此采取步驟來保持該協(xié)處理器流水線與主處理器流水線同步。
對同步化的需要源于在執(zhí)行協(xié)處理器指令期間需要主處理器的各個流水線級和協(xié)處理器各個流水線級之間的交互的事實。例如,如果不符合由協(xié)處理器指令指定的條件碼,則可以由主處理器取消協(xié)處理器指令,或者萬一正在執(zhí)行的協(xié)處理器指令中已產生誤預測分支,則可能需要清除(flush)整個的協(xié)處理器流水線。此外,如果協(xié)處理器指令定義加載或存儲操作,則可能需要在主處理器和協(xié)處理器之間傳遞數(shù)據(jù)。
迄今為止,已經通過以固定計時將信號從一條流水線傳遞到另一條流水線來保持協(xié)處理器流水線與主處理器流水線同步。當一條流水線停頓時這些信號主要是在另一條流水線中致使停頓,以便維持同步。然而,存在其它復雜的因素,例如當主流水線需要取消協(xié)處理器指令或需要清除流水線時,這在主處理器和協(xié)處理器對停頓有影響時會顯著地使它們之間的交互變得復雜。由于流水線處理器的長度已經增加,已變得越來越難以利用這種涉及以固定計時在流水線之間傳遞信號的緊耦合方案來實現(xiàn)流水線之間的同步化。
在協(xié)處理器接口上采用的主要約束條件就是它必須運行兩個周期延遲,也就是說從主處理器傳遞到協(xié)處理器的任何信號或反之亦然,都必須得到完整時鐘周期來從一個到另一個進行傳送,由此直到下一個時鐘周期以前都無法動作。這意味著跨越接口的信號必須從在接口一側上的寄存器中計時,并且必須直接計時到在另一側上的另一個寄存器中,并且不必插進任何組合過程。這個約束條件源于可能將主處理器(在此也稱為處理器核心)和協(xié)處理器置于相當大的相隔距離并且必須考慮很大的計時余量以覆蓋信號傳送時間的事實。這在下述情況中尤其如此,其中例如可以由不同方分別涉及主處理器和協(xié)處理器。信號傳送中的這種延遲使得難以利用早先描述的緊耦合同步化技術來維持流水線同步化。
因此,人們將希望提供一種改善的技術,用于獲得數(shù)據(jù)處理設備中的流水線之間的同步化。
發(fā)明內容
從第一方面考慮,本發(fā)明提供了一種數(shù)據(jù)處理設備,包括主處理器,可操作用于執(zhí)行指令序列,所述主處理器包括具有第一多個流水線級的第一流水線;協(xié)處理器,可操作用于執(zhí)行所述指令序列中的協(xié)處理器指令,所述協(xié)處理器包括具有第二多個流水線級的第二流水線,并且將每條協(xié)處理器指令都設置成經由第一流水線和第二流水線而被路由;和至少一個同步化隊列,將其中一條流水線中的預定流水線級與其它流水線中的伙伴流水線級相耦合,當處理協(xié)處理器指令時,所述預定流水線級可操作用于使令牌置于同步化隊列中,而當從同步化隊列中接收到所述令牌時,所述伙伴流水線級可操作用于處理該條協(xié)處理器指令,借此使預定流水線級與伙伴流水線級之間的第一和第二流水線同步化。
依照本發(fā)明,所述數(shù)據(jù)處理設備具備將其中一條流水線中的預定流水線級與其它流水線中的伙伴流水線級相耦合的至少一個同步化隊列。所述預定流水線級被設置成當處理協(xié)處理器指令時使令牌被置于同步化隊列中,而當從同步化隊列中接收到該令牌時,所述伙伴流水線級然后可操作用于處理該條協(xié)處理器指令,借此在該點上使第一和第二流水線同步化。
因此,本發(fā)明提供了一種基于令牌的流水線同步化技術,該技術允許兩條流水線之間的一些松弛,因為不必在所有級都精確同步化,同時確保了為關鍵的信息傳送而正確地同步化流水線。同涉及以固定計時在流水線之間傳遞信號的現(xiàn)有技術的控制驅動的、緊耦合的方案相比,可以把本發(fā)明的所述技術看作是數(shù)據(jù)驅動的、松耦合的同步化方案。
雖然在某些實施例中可能只有單個同步化隊列,但是在優(yōu)選實施例中,所述數(shù)據(jù)處理設備進一步包括多個所述的同步化隊列,每一個所述的同步化隊列都將其中一條流水線中的預定流水線級與其它流水線中的伙伴流水線級相耦合。
在優(yōu)選實施例中,至少一個同步化隊列中的一個是指令隊列,所述預定流水線級處于第一流水線中并且被設置成使標識協(xié)處理器指令的令牌置于指令隊列中,而所述伙伴流水線級處于第二流水線中并且當接收到令牌時可操作用于開始處理由令牌標識的協(xié)處理器指令。
對于指令隊列而言,預定流水線級和伙伴流水線級兩者優(yōu)選地都是他們各自流水線的第一流水線級中的一個。更具體而言,在優(yōu)選實施例中,預定流水線級是第一流水線中的取出級,而伙伴流水線級是第二流水線中的譯碼級,當接收到令牌時,該譯碼級可操作用于對協(xié)處理器指令進行譯碼。
在這樣的優(yōu)選實施例中,第一流水線中的取出級優(yōu)選地可操作用于為指令序列中的每條指令使令牌置于指令隊列中,而第二流水線中的譯碼級被設置成當接收到相關的令牌時對每條指令進行譯碼,以判斷該指令是否是需要由協(xié)處理器進一步處理的協(xié)處理器指令。
作為上述手段的替換方案,人們將會認識到的是,作為替代允許首先通過第一流水線的譯碼級來對每條指令進行譯碼、然后只經由指令隊列指令加以傳遞(實際上也就是說將由協(xié)處理器動作的協(xié)處理器指令)也是可以的。在這種情況下,顯然所述預定流水線級需要成為第一流水線的譯碼級或者譯碼級后面的級。
在優(yōu)選實施例中,至少一個同步化隊列中的一個是取消隊列,所述預定流水線級處于第一流水線中并且被設置成使標識位于該預定流水線級上的協(xié)處理器指令是否將被取消的令牌置于該取消隊列中,而所述伙伴流水線級處于第二流水線中并且當從該取消隊列中接收到令牌時并且如果該令牌標識出所述協(xié)處理器指令將被取消的話,則可操作用于令該條協(xié)處理器指令被取消。
因此,主處理器可能想要取消它已經傳遞到協(xié)處理器上的指令。例如,如果指令沒能達到任何其條件碼的話,則這可能會發(fā)生,這將需要在主處理器和協(xié)處理器兩者中執(zhí)行待取消的指令。取消隊列從主處理器將這一信息攜帶到協(xié)處理器。
在優(yōu)選實施例中,對于取消隊列而言,所述預定流水線級是第一流水線中的發(fā)出級,而所述伙伴流水線級是第二流水線中的發(fā)出級后面的級。更具體而言,在優(yōu)選實施例中,所述伙伴流水線級是協(xié)處理器流水線的第一執(zhí)行級。
在優(yōu)選實施例中,當從取消隊列中接收到令牌時,并且如果該令牌標識出協(xié)處理器指令將被取消,則所述伙伴流水線級可操作用于從第二流水線中刪除該協(xié)處理器指令。將會認識到的是,存在許多種能夠從第二流水線中刪除或清除指令的方式。例如,實際上從流水線中刪除指令可能會立即生效。然而,在優(yōu)選實施例中,作為替代允許指令經過流水線的一些剩余級,但是帶有一個設置以指示將不執(zhí)行該指令的標志,從而使所述指令仍然可以從隊列中取出令牌。
在優(yōu)選實施例中,至少一個同步化隊列中的一個是結束隊列,所述預定流水線級處于第一流水線中并且被設置成能使標識允許從第二流水線中收回在該預定流水線級的協(xié)處理器指令的令牌置于該結束隊列當中,而所述伙伴流水線級處于第二流水線中,并且當從結束隊列中接收到令牌時并且如果該令牌標識出允許收回所述協(xié)處理器指令的話,則可操作用于令那條協(xié)處理器指令被收回。
因此,所述結束隊列通過為協(xié)處理器流水線中的每條指令的收回提供許可,從而在流水線的末尾保持同步性。在優(yōu)選實施例中,按照足夠長地延遲協(xié)處理器指令的收回以使對應令牌的接收能夠從結束隊列末尾出現(xiàn)的需要來規(guī)定協(xié)處理器流水線的長度。
對于結束隊列而言,所述預定流水線級優(yōu)選的是第一流水線中的回寫級,而所述伙伴流水線級優(yōu)選的是第二流水線中的回寫級。
在優(yōu)選實施例中,至少一個同步化隊列中的一個是長度隊列,所述預定流水線級處于第二流水線中并且對于矢量協(xié)處理器指令被設置成使標識矢量協(xié)處理器指令的長度信息的令牌置于該長度隊列當中,而所述伙伴流水線級處于第一流水線中并且當從長度隊列中接收到令牌時,可操作用于將長度信息分解到第一流水線內的矢量協(xié)處理器指令的進一步處理中。
一些協(xié)處理器指令可以是矢量的,因為他們允許在單個指令內待指定的指令的幾次重復。典型的例子就是加載和存儲指令,矢量加載或矢量存儲指令允許在單個指令中傳送幾個數(shù)據(jù)值。這將典型地涉及在協(xié)處理器中的一組寄存器和存儲器中的連續(xù)位置集之間傳送幾個數(shù)據(jù)字,或者反之亦然。
當協(xié)處理器已經譯碼了協(xié)處理器指令時,它將知道矢量加載或存儲操作將會多久,并且經由長度隊列將這一信息作為同步化令牌送回到主處理器。
對于長度隊列而言,在優(yōu)選實施例中,所述預定流水線級是第二流水線中的譯碼級,而所述伙伴流水線級是第一流水線中的第一執(zhí)行級。
在本發(fā)明的優(yōu)選實施例中,至少一個同步化隊列中的一個是接受隊列,所述預定流水線級處于第二流水線中并且被設置成使標識在該預定流水線級中的協(xié)處理器指令是否被接受以用于由協(xié)處理器執(zhí)行的令牌置于接受隊列當中,而所述伙伴流水線級處于第一流水線中并且當從該接受隊列中接收到令牌時并且如果該令牌標識將不接受協(xié)處理器指令的話,則可操作用于使主處理器拒絕該條協(xié)處理器指令。
所述協(xié)處理器可以在預定流水線級上判斷它無法接受另外有效的協(xié)處理器指令,并且經由該接受隊列將這個信息作為同步化令牌傳遞給主處理器。如果無法由協(xié)處理器接受指令的話,就被認為已經“回彈(bounced)”。在優(yōu)選實施例中,如果協(xié)處理器回彈指令,它就不從它的流水線中刪除該指令,而是把它轉換成一條“幻影(phantom)”指令,這將確保那條指令的執(zhí)行不會完成。
對于接受隊列而言,在優(yōu)選實施例中,所述預定流水線級是第二流水線中的發(fā)出級,而所述伙伴流水線級是第一流水線中的第二執(zhí)行級。
此外,所述伙伴流水線級優(yōu)選地當從接受隊列中接收到令牌時并且如果該令牌標識出將不接受協(xié)處理器指令,則可操作用于從第一流水線中刪除該協(xié)處理器指令。正如前面提到的那樣,就取消隊列而論,存在能夠從流水線中刪除或清除指令的許多方式。在優(yōu)選實施例中,當從接受隊列中接收到指示將不接受對應的協(xié)處理器指令的令牌時,第一流水線中的伙伴流水線級被設置成允許該指令經過第一流水線的一些剩余級,但是帶有設置以指示不執(zhí)行該指令的標志。
除上面描述的各種可以用在本發(fā)明的優(yōu)選實施例中的控制隊列之外,還可以提供一個或多個同步化隊列以充當主處理器和協(xié)處理器之間的數(shù)據(jù)隊列。更具體而言,在優(yōu)選實施例中,至少一個同步化隊列中的一個是當協(xié)處理器指令是一條存儲指令時使用的存儲隊列,所述存儲指令可操作用于使數(shù)據(jù)項從協(xié)處理器傳遞到可由主處理器訪問的存儲器,所述預定流水線級處于第二流水線中并且設置成當處理所述存儲指令中的一條時使標識每個待傳送的數(shù)據(jù)項的令牌置于存儲隊列當中,而所述伙伴流水線級處于第一流水線中并且當從該存儲隊列中接收到每個令牌時可操作用于使對應的數(shù)據(jù)項將被傳送給存儲器。
在優(yōu)選實施例中,對于存儲隊列而言,所述預定流水線級是第二流水線中的發(fā)出級,而所述伙伴流水線級是第一流水線中的地址生成級。
存儲傳送可以是單個值或矢量。在后一種情況下,所述協(xié)處理器通過在第二流水線的發(fā)出級中重復所述指令,從而有效地把多路傳送轉換成一連串的單路傳送。這產生了每個待傳送的項的存儲指令實例。所述指令當它重復時停留在協(xié)處理器發(fā)出級中,從而創(chuàng)建它自身的拷貝,所述拷貝沿著流水線往下移動。所重復的指令的第一個稱為“頭”,而其它稱為“尾”。
在優(yōu)選實施例中,至少一個同步化隊列中的一個是當協(xié)處理器指令是加載指令時所使用的加載隊列,所述加載指令可操作用于使數(shù)據(jù)項從可由主處理器訪問的存儲器中被傳遞給協(xié)處理器,所述預定流水線級處于第一流水線中并且當處理所述加載指令中的一條時設置成使標識待傳送的每個數(shù)據(jù)項的令牌置于該加載隊列中,而所述伙伴流水線級處于第二流水線中并且當從該加載隊列中接收到每個令牌時,可操作用于使對應的數(shù)據(jù)項將被傳送給協(xié)處理器。
在優(yōu)選實施例中,對于加載隊列而言,所述預定流水線級是第一流水線中的回寫級,而所述伙伴流水線級是第二流水線中的回寫級。
如同存儲指令的情況一樣,加載指令可以指定單個數(shù)據(jù)值的傳送,或經由矢量加載指令指定多個數(shù)據(jù)值的傳送。因此,在優(yōu)選實施例中,通過主處理器的回寫級橫跨接口發(fā)送加載數(shù)據(jù)并且通過協(xié)處理器流水線的回寫級來進行接收。在優(yōu)選實施例中,由于協(xié)處理器流水線不能停頓超過發(fā)出級,因此除等待允許在回寫級中收回的指令的結束令牌之外,所述加載指令將總是與數(shù)據(jù)到達協(xié)處理器同步地到達協(xié)處理器流水線的回寫級。因此,在優(yōu)選實施例中,加載隊列只由雙緩沖器來形成,利用所述雙緩沖器將數(shù)據(jù)與在回寫級中的加載指令的到達重新對準級。
在優(yōu)選實施例中,正如先前提到的那樣,所述加載指令和存儲指令可以是定義待傳送的多個數(shù)據(jù)項的矢量協(xié)處理器指令,并且所述設備還包括與加載隊列和存儲隊列中的至少一個相關聯(lián)的流控制邏輯,其可操作用于向預定流水線級發(fā)送控制信號以便當它確定相關的加載或存儲隊列可能變滿時停止預定流水線級發(fā)出令牌。
如果接收流水線不能處理數(shù)據(jù)的話,則所述流控制邏輯允許暫停數(shù)據(jù)流。在優(yōu)選實施例中,所述流控制邏輯是為存儲隊列而提供的,所述流控制邏輯可操作用于當從主處理器那里接收到伙伴流水線級不能接受數(shù)據(jù)項的指示時發(fā)出控制信號。假定早先提到的事實在優(yōu)選實施例中,加載指令將總是與數(shù)據(jù)經由加載隊列到達協(xié)處理器同步地到達協(xié)處理器流水線的回寫級,而在與加載隊列相關聯(lián)的流控制邏輯的優(yōu)選實施例中不必這樣。然而,將會認識到的是在無法保證這種同步性的實施方式中,如果需要的話,流控制邏輯還可以具備加載隊列。
在優(yōu)選實施例中,所述存儲數(shù)據(jù)需要流控制以便允許主處理器的加載存儲單元暫停來自于協(xié)處理器的數(shù)據(jù)流。這是通過向協(xié)處理器發(fā)送停止信號來完成的。由于在優(yōu)選實施例中這個信號占用兩個時鐘周期以到達協(xié)處理器,因此優(yōu)選的是剛一存在存儲隊列變滿的危險就生成這個信號。對于相對較短的隊列而言,一旦主處理器的加載存儲單元不能接受數(shù)據(jù)項,這一危險就會變成現(xiàn)實,因此在優(yōu)選實施例中無論何時主處理器的加載存儲單元不能接受數(shù)據(jù),都向協(xié)處理器發(fā)送停止信號。
對于主處理器而言能識別協(xié)處理器流水線中的指令有時也是必需的。例如,對于清除來說這就是必需的,以便使主處理器能夠向協(xié)處理器指示將要清除哪條指令。因此,主處理器給每條發(fā)送到協(xié)處理器的指令一個標記,在優(yōu)選實施例中所述標記是從足夠大的數(shù)值池中取出的,從而使得流水線中的所有標記無論在任何時候都是唯一的。
因此,在優(yōu)選實施例中,每個令牌都包括標識該令牌涉及哪個協(xié)處理器指令的標記。
因此,在優(yōu)選實施例中,當必需從第一和第二流水線兩者中清除協(xié)處理器指令時,主處理器可操作用于向協(xié)處理器廣播識別與需要被清除的最舊指令有關的標記的清除信號,所述協(xié)處理器可操作用于從所述標記中識別出最舊的指令并且用于從第二流水線中清除掉那條最舊的指令以及協(xié)處理器內任何最近的指令。
此外,在優(yōu)選實施例中,響應于所述清除信號來清除一個或多個所述的至少一個同步化隊列,具有用于識別隊列內的哪個令牌將被清除掉的標記。
在優(yōu)選實施例中,如果連續(xù)的協(xié)處理器指令具有連續(xù)的標記,則可以簡化清除機制。在優(yōu)選實施例中,這僅僅是通過當傳遞給協(xié)處理器的指令是協(xié)處理器指令時增加標記號來實現(xiàn)的。這是在發(fā)送指令之后進行的,因此標記在發(fā)送協(xié)處理器指令之后改變,而不是在此之前改變。在優(yōu)選實施例中,由于主處理器還不具備對指令進行譯碼以判斷它是哪類指令的時間,因而在發(fā)送指令之前不可能增加標記。當協(xié)處理器譯碼級刪除非協(xié)處理器指令時,留下攜帶連續(xù)標記的指令流。
將會認識到的是,使隊列同步化能夠采取各種形式。然而,在優(yōu)選實施例中,每個同步化隊列都包括具有預定數(shù)目的用于存儲令牌的條目的先進先出(FIFO)緩沖器。在優(yōu)選實施例中,除了加載隊列之外,每個隊列都具有用于存儲令牌的三個條目或槽。正如前面提到的那樣,優(yōu)選地通過雙緩沖器來提供優(yōu)選實施例的加載隊列。
在某些實施例中,可以提供多個協(xié)處理器,每個同步化隊列將主處理器中的流水線級與其中一個協(xié)處理器中的流水線級耦合在一起。為了節(jié)約起見,在優(yōu)選實施例中確保復制盡可能少的協(xié)處理器接口。具體來講,優(yōu)選實施例中的協(xié)處理器將共享所述長度隊列、接受隊列和存儲數(shù)據(jù)隊列,這由主處理器來維護。如果這些隊列都被共享,則任何時候只有一個協(xié)處理器可以使用這些隊列,這通過在任何時候只允許一個協(xié)處理器是活動的而很容易地得到了保證。然而,通常這并非是一種效果顯著的限制,因為一般說來在任何時候只有一個協(xié)處理器在使用。更具體而言,典型地通過驅動器軟件來驅動處理器,這將僅驅動一個協(xié)處理器。對驅動器軟件的調用和從它那里返回,將通常確保在使用一個協(xié)處理器和使用不同協(xié)處理器之間存在多條核心指令。
將會認識到的是,本發(fā)明的基于令牌的流水線同步化技術既能夠適用于異步設計的數(shù)據(jù)處理設備又能夠適用于同步設計的數(shù)據(jù)處理設備。然而,在優(yōu)選實施例中,所述數(shù)據(jù)處理設備具備同步設計,由此通過預定流水線級來使令牌置于隊列中,并且當改變時鐘周期的邊沿時通過伙伴流水線級從所述隊列中接收這些令牌。
從第二方面考慮,本發(fā)明提供了一種在數(shù)據(jù)處理設備中的流水線之間同步化的方法,所述數(shù)據(jù)處理設備包括主處理器,可操作用于執(zhí)行指令序列;還包括協(xié)處理器,可操作用于執(zhí)行所述指令序列中的協(xié)處理器指令,所述主處理器包括具有第一多個流水線級的第一流水線,而所述協(xié)處理器包括具有第二多個流水線級的第二流水線,并且將每個協(xié)處理器指令都設置成能經由第一流水線和第二流水線兩者被路由,所述方法包括以下步驟(a)經由同步化隊列將其中一條流水線中的預定流水線級與其它流水線中的伙伴流水線級相耦合;(b)當預定流水線級正在處理協(xié)處理器指令時將令牌置于同步化隊列中;(c)當伙伴流水線級從同步化隊列中接收到令牌時,在伙伴流水線級內處理協(xié)處理器指令;借此在預定流水線級和伙伴流水線級之間獲得第一和第二流水線的同步。
將正如附圖中舉例說明的那樣、參照本發(fā)明的優(yōu)選實施例,進一步僅按舉例的方式來描述本發(fā)明,在圖中
圖1是在其中可以實現(xiàn)本發(fā)明的優(yōu)選實施例的同步化技術的系統(tǒng)框圖;圖2A是示意性地舉例說明依照本發(fā)明的優(yōu)選實施例的流水線處理器的圖;圖2B是示意性地舉例說明依照本發(fā)明的優(yōu)選實施例的流水線協(xié)處理器的圖;圖3是示意性地舉例說明依照本發(fā)明的優(yōu)選實施例的處理器核心的流水線級、協(xié)處理器的流水線級和在它們之間通信的同步化控制隊列的圖;圖4是舉例說明各種流水線和連接它們的隊列的更詳細框圖;圖5是示意性地舉例說明用于加載和存儲操作的主處理器的加載存儲單元與協(xié)處理器流水線的加載存儲單元之間的通信的圖;圖6是舉例說明依照本發(fā)明的優(yōu)選實施例的隊列結構的圖;圖7是舉例說明隊列的讀和寫的時序圖;圖8是舉例說明用在本發(fā)明的優(yōu)選實施例中的流控制原理的圖;圖9是舉例說明在本發(fā)明的優(yōu)選實施例中如何實現(xiàn)指令隊列的圖;圖10是示意性地舉例說明核心與協(xié)處理器流水線之間的交互的正常操作的圖;圖11是舉例說明依照本發(fā)明的一個實施例、當協(xié)處理器在它的發(fā)出級中停頓時核心和協(xié)處理器流水線如何運轉的圖;圖12是舉例說明依照本發(fā)明的一個實施例、當核心在它的發(fā)出級中取消協(xié)處理器指令時核心和協(xié)處理器流水線如何運轉的圖;圖13是舉例說明依照本發(fā)明的一個實施例、當協(xié)處理器回彈協(xié)處理器指令時核心和協(xié)處理器流水線如何運轉的圖;圖14是舉例說明依照本發(fā)明的一個實施例的如下方式的圖,在所述方式中流水線處理由核心取消的以及由協(xié)處理器回彈的指令;圖15是舉例說明依照本發(fā)明的一個實施例、當核心向協(xié)處理器發(fā)送清除信號時核心和協(xié)處理器流水線如何運轉的圖;圖16是示意性地舉例說明用在本發(fā)明的一個實施例中的隊列清除手段的圖;圖17是舉例說明依照本發(fā)明的一個實施例的矢量加載指令“C”的指令重復的圖;圖18是示意性地舉例說明依照本發(fā)明的一個實施例的加載數(shù)據(jù)的緩沖的圖;和圖19是舉例說明依照本發(fā)明的一個實施例、核心中的加載指令如何進入核心的加載存儲單元以及如何啟動加載數(shù)據(jù)的其中一項的生成的圖,其中所述加載數(shù)據(jù)的其中一項繼而將被傳到協(xié)處理器。
具體實施例方式
圖1是舉例說明在其中可以采用本發(fā)明的優(yōu)選實施例的同步化技術的數(shù)據(jù)處理系統(tǒng)的框圖。如圖1所示,處理器核心40耦合于指令高速緩存或其它存儲裝置10,從所述指令高速緩存或其它存儲設備那里可以存取處理器核心40所需要的指令。在處理器核心40之內,提供預取單元20用于經路徑50發(fā)出對由預取單元確定的流水線處理器3需要的指令的請求。然后,從中檢索指令的指令存儲器10經路徑60將這些指令輸出返回預取單元20,繼而經路徑70從所述預取單元中將它們傳遞到流水線處理器30中。當執(zhí)行指令時,所述流水線處理器30將與包含將由指令操縱的數(shù)據(jù)值的寄存器組35的寄存器進行接口連接。加載指令可以用來將數(shù)據(jù)值從數(shù)據(jù)存儲器87加載到寄存器組中,而存儲指令可以用來將數(shù)據(jù)值從寄存器組35存儲到數(shù)據(jù)存儲器87中。接著,可以對寄存器組35的特定寄存器中所存儲的數(shù)據(jù)值執(zhí)行數(shù)據(jù)處理指令。
由預取單元預取的指令序列中的一些指令可以是分支指令,所述分支指令被設置成能導致指令流上的改變。一些分支指令在指令本身的操作碼內指定分支的目標地址,由此能夠執(zhí)行這些分支指令的一些預測以便在判斷在這樣的分支指令之后預取哪條指令的過程中輔助預取單元20。這類分支預測是由分支預測邏輯25來執(zhí)行的。如果分支預測邏輯25預測將要執(zhí)行所述分支指令而且由此將占用所述分支,則預取單元20就設置成檢索由目標地址指定的指令作為下一個指令。
很明顯,當在流水線處理器30內最終判斷是否執(zhí)行任何一條這類分支指令時,重要的是如果需要預取單元20采取任何動作的話則把相關的信息傳回到預取單元20。例如,對于可預測的分支指令而言,如果預測錯誤的話則必須通知預取單元20。例如,如果分支預測邏輯25預測占用了所述分支,則由此在目標地址上檢索指令,但是當隨后由流水線處理器30執(zhí)行所述指令時,判定實際上不應該執(zhí)行那條分支指令,那么需要經路徑80將恢復地址作為強制PC信號輸出,在這種情況下,所述恢復地址是繼那條分支指令之后的下一條連續(xù)地址。同樣,如果分支預測邏輯25已經預測出不執(zhí)行分支指令,但事實上流水線處理器30后來判定應該執(zhí)行這條指令,那么再次需要經路徑80向預取單元20發(fā)出恢復地址,在這種情況下,所述恢復地址是所述分支的目標地址。換句話說,如果分支預測是正確的,則就不再需要進一步的動作,而且不需要經路徑80向預取單元20發(fā)出強制PC信號。
為什么實際上未必執(zhí)行分支指令的一個原因就是因為往往將分支指令指定成條件指令,只有在執(zhí)行時存在某種條件時才會執(zhí)行它。這些各種不同的條件是參照一組條件碼加以指定的,由此如果指令將被執(zhí)行的話則將指定一個或多個條件碼必須具備特定值。雖然可以查明關于條件碼狀態(tài)的預測,且由此預測是否將執(zhí)行分支指令,但是由于條件碼可由指令序列中的條件碼設置指令更新,并且由此條件碼的狀態(tài)將隨著時間而變化,因此只有當那條分支指令到達流水線處理器30內的預定點時,才會發(fā)生條件碼的絕對估計。
指令序列內的某些指令也可能是協(xié)處理器指令,所述協(xié)處理器指令將在協(xié)處理器110的流水線處理器130內被執(zhí)行。經路徑95向協(xié)處理器110的流水線處理器130發(fā)出這類協(xié)處理器指令。所述流水線處理器130于是將根據(jù)需要參照協(xié)處理器寄存器120來執(zhí)行協(xié)處理器指令,并且如果需要將協(xié)處理器指令的結果返回到核心40,則它們將經路徑100被返回。
雖然經路徑95向協(xié)處理器傳遞協(xié)處理器指令,但是也可以通過核心40的流水線處理器30的各種流水線級來傳遞,例如以允許做出如下判斷,即如果依據(jù)執(zhí)行時條件碼的狀態(tài)確定那條協(xié)處理器指令是一條有條件協(xié)處理器指令的話,那么是否實際應該執(zhí)行那條協(xié)處理器指令。經由預定隊列在流水線處理器30與流水線處理器130之間傳遞控制信號,從而確保協(xié)處理器指令經過兩條流水線的進程在要求的點上保持同步。稍后將更詳細地論述這一處理。
圖2A是舉例說明依照本發(fā)明的優(yōu)選實施例、圖1的流水線處理器30內提供的流水線的各種流水線級的框圖。在級190,從預取單元20中取出指令,在此之后在譯碼級200對其進行譯碼,然后隨后將其傳遞到發(fā)出級210上,在其中從寄存器組35的適當寄存器中獲取指令所需的數(shù)據(jù)。
在此時,處理器分支成兩個附屬流水線,第一條附屬流水線包含流水線級220、230、240和250,而第二個附屬流水線包含流水線級260、270、280和290。第一條附屬流水線是加載/存儲流水線222,在此也稱為加載/存儲單元(LSU)。所述加載/存儲流水線用于處理加載或存儲指令,且因此將把加載或存儲指令從流水線級210路由到流水線級220中。在流水線級220執(zhí)行的過程是生成存儲器存取所需的地址,所述地址用于實施加載或存儲操作。這個過程將典型地包含共同添加兩個寄存器的值,或將寄存器的值添加到指令內指定的“即時(immediate)”值上,等等。級230和240是兩個存儲器流水線級,在這兩個級期間發(fā)生加載或存儲指令所需的存儲器存取。在圖2A中舉例說明的本發(fā)明的優(yōu)選實施例中,由于在這樣的實施例中加載和存儲操作典型地占用至少兩個時鐘周期,因此存在兩個存儲器級230、240。
當存儲器存取已經結束時,指令將從存儲器2流水線級240移動到回寫級250中,在此也稱為收回級。在回寫級中,為更新而準備寄存器組35以反映加載或存儲操作的結果,也就是在回寫級的末尾發(fā)生更新。
任何運算邏輯指令,比如像加指令或減指令,都將從流水線級210被路由到第二附屬流水線262(在此也稱為ALU流水線)的流水線級260中,這個級提供轉移邏輯以允許待執(zhí)行的操作數(shù)的任何所需的轉移。然后,將所述指令路由到流水線級270中,所述流水線級包括有用于執(zhí)行那條運算邏輯指令的算術邏輯單元。在這個執(zhí)行級之后,將所述指令傳遞到流水線的飽和級280,在其中執(zhí)行任何所需的結果飽和。例如,一些運算邏輯指令要求使結果飽和到預定的位數(shù),因此例如可能需要使16位的結果飽和到9位的結果。這類過程是在流水線級280內執(zhí)行的。在任何所需的飽和之后,接著將所述指令傳遞到回寫級290,在此也稱為收回級。正如早先比照回寫級250所描述的那樣,回寫級的目的是更新數(shù)據(jù)處理設備的狀態(tài),具體來講是考慮到回寫級中指令執(zhí)行的結果來更新寄存器組35。
圖2B舉例說明了依照本發(fā)明的優(yōu)選實施例、在圖1的協(xié)處理器110的流水線處理器130內提供的流水線的各種流水線級。開頭兩個級是譯碼級205和發(fā)出級215。接著,所述指令經過五個執(zhí)行級225、235、245、255和265,在此之后所述指令進入回寫級275,在其中考慮到回寫級中協(xié)處理器指令執(zhí)行的結果來更新協(xié)處理器寄存器120。
正如將參照其余的圖更詳細論述的那樣,在處理器核心和協(xié)處理器的特定流水線級之間提供各種隊列,以使同步化能在利用基于令牌的方案而被每個隊列耦合的流水線級之間發(fā)生。更具體而言,可以在ALU流水線262與協(xié)處理器流水線之間提供一個或多個控制隊列285,另外還可以在所述核心的LSU流水線222與協(xié)處理器流水線之間提供一個或多個數(shù)據(jù)隊列295。
現(xiàn)在,將參照圖3到19來描述用在本發(fā)明優(yōu)選實施例中以確保為重要的信息傳送而正確地使流水線同步化的、基于令牌的流水線同步化技術。在下列說明中,將把主處理器稱為核心,也將把協(xié)處理器稱為“GCP”或普通協(xié)處理器。將參照下列已編號的段落來提供圖3到19的說明。
1介紹所述核心可能需要將指令傳遞到許多協(xié)處理器并且與它們交換數(shù)據(jù)。這些協(xié)處理器都是用來與所述核心差不多同步地加以運行并且用類似于所述核心的方式將它們流水線化。指令從核心流水線的取出級通過,由協(xié)處理器譯碼級,所述協(xié)處理器接著將譯碼后的指令沿著它自己的流水線向下傳遞。如果條件碼缺乏的話,則可以由核心來取消協(xié)處理器指令,或者萬一錯誤預測分支的話,則清除整個協(xié)處理器流水線。加載和存儲數(shù)據(jù)也需要在核心LSU與協(xié)處理器流水線之間進行傳遞。
在協(xié)處理器接口上施加的主要約束條件就是它必須運行超過兩個周期延遲,也就是說從核心傳遞到協(xié)處理器或反之亦然的任何信號,必須得到整個時鐘周期來從一個到另一個傳送。這意味著跨越接口的信號必須從在接口一側上的寄存器中計時,并且必須直接計時到在另一側上的另一個寄存器中,并且不必插進任何組合過程。這個約束條件是因為核心和協(xié)處理器可能相隔相當大的距離放置并且必須考慮很大的計時容量以覆蓋信號傳送時間而出現(xiàn)的。排除緊耦合的同步化方法,信號傳送中的這一延遲使得難以保持流水線同步化。
下列說明描述了基于令牌的流水線同步化方法,所述方法允許兩條流水線之間的一些松弛,同時為重要的信息傳送保證正確地對準流水線。
2說明所述GCP接口通過從一條流水線到另一條流水線交換令牌來實現(xiàn)兩條流水線之間的松同步化。這些令牌把流水線之間的隊列往下傳遞并且可以攜帶附加信息。在很多情況下,隊列的最初目的是攜帶關于正在被處理的指令的信息或向一條流水線通知在另一條流水線中發(fā)生的事件。每當協(xié)處理器指令從相關的流水線級當中傳遞到下一級級中時,都要生成令牌。這些令牌由另一條流水線中的伙伴級拾起級,并且用來許可該級中的對級應指令繼續(xù)前進。協(xié)處理器指令沿著每條流水線向下的移動剛好配合令牌沿著連接流水線的各個隊列的移動。由此,普通的協(xié)處理器接口是數(shù)據(jù)驅動的,而不是控制驅動的。
2.1協(xié)處理器指令所述GCP可能需要執(zhí)行取自于協(xié)處理器專用的一組指令的多條指令。給定的協(xié)處理器也許不必執(zhí)行所有可能的協(xié)處理器指令,并且可以拒絕那些它無法處理的指令。下面的表1列出了一種特定處理器核心(即,英國劍橋的ARM有限公司研發(fā)的ARM處理器核心中的一種)所支持的所有協(xié)處理器指令,并且給出了對每一條指令的簡要說明。
表1-協(xié)處理器指令所述協(xié)處理器指令分為三個主要的組加載指令、存儲指令和處理指令。所述加載和存儲指令允許信息在核心與協(xié)處理器之間傳遞。它們有一些可以是矢量的,也就是它們允許在單個指令中傳送多個值。這將典型地包含多個數(shù)據(jù)字在協(xié)處理器中的一組寄存器與存儲器中一組連續(xù)位置之間的傳送。其它指令,例如MCR和MRC,允許在核心與協(xié)處理器寄存器之間的數(shù)據(jù)傳送。所述CDP指令控制對早已保留在協(xié)處理器內的數(shù)據(jù)執(zhí)行指定的操作,將結果寫回到協(xié)處理器寄存器,或用某種其它方法改變協(xié)處理器的狀態(tài)。將要執(zhí)行哪個操作可以由指令內的操作碼字段來指定。
所述核心流水線處理所有指令,既有核心指令又有協(xié)處理器指令。在另一方面,所述協(xié)處理器只處理協(xié)處理器指令,所以協(xié)處理器流水線在一段相當長的時間內很可能是空的。
2.2協(xié)處理器流水線所述GCP流水線非常類似于核心流水線,不過沒有取出級。作為替代,指令是從核心傳遞到GCP流水線的譯碼級中的。接著,譯碼級對指令進行譯碼,拒絕非協(xié)處理器指令和包含非匹配協(xié)處理器號的任何協(xié)處理器指令。在此時還確定任何矢量數(shù)據(jù)傳送的長度并送回核心。然后,譯碼后的指令傳遞到發(fā)出級中。這個級判斷是否可以接受所述指令的這個特定實例。如果不能接受,或許因為它尋址一個不存在的寄存器,那么就回彈指令,告訴核心它無法被接受。如果指令既是有效的又是可執(zhí)行的,那么它就接著沿著執(zhí)行流水線向下傳遞,從EX1到EX6。在流水線的底部,在EX6(在此也稱為回寫(WB)級)當中,指令等待收回,當它從核心所饋送的另一個隊列中接收匹配令牌時它就能進行收回。
2.3基于令牌的流水線同步化圖3示出了核心和GCP流水線以及在它們之間通信的同步化隊列。每個隊列都實現(xiàn)為非常短的先進先出(FIFO)緩沖器。所述這些隊列不需要顯式的流控制,因為隊列之間的流水線長度限制了任何隊列在任何時候能保留的項的數(shù)量。所示幾何結構要求在每個隊列中需要至多三個可用的槽。所需的唯一的狀態(tài)信息就是用于指示何時隊列為空的標志。這只需要通過隊列的接收端的監(jiān)視,并且判斷相關的流水線級是否能夠繼續(xù)前進。還可以同時讀取隊列所攜帶的任何信息并同時對該信息起作用。
將通過描述每個隊列的目的來描述流水線同步化的操作。
2.3.1指令隊列所述核心將離開它的取出級190的每個指令沿著指令隊列300向下傳遞。理論上講,它僅應該傳遞協(xié)處理器指令,但是在這個級它還不具有時間來對指令進行譯碼。在到達GCP自己的譯碼級205時,把對指令的譯碼工作留給GCP處理,并且拒絕非協(xié)處理器指令。由于所述核心不需要確認這些指令的刪除,因而它可以默默地完成這個工作,這是因為它將已經在它的譯碼級200中判斷了每條指令的類型。所述指令隊列300是三個槽長。
2.3.2取消隊列所述核心可能希望取消它早已傳遞到協(xié)處理器上的指令。如果所述指令缺乏它的條件碼的話則就可能發(fā)生這種情況,這將需要從核心和協(xié)處理器兩者中的指令流中刪除所述指令。所述取消隊列310攜帶這個信息跨過到達協(xié)處理器;它是三個槽長。
2.3.3結束隊列為三個槽長的結束隊列320通過為協(xié)處理器流水線中的每條指令提供收回的許可而在流水線的末尾處保持同步性。按照足夠長地延遲協(xié)處理器指令的收回以便符合從結束隊列320末尾出現(xiàn)的令牌的需要來規(guī)定協(xié)處理器流水線的長度。加載和存儲指令不用結束隊列,所以只有CDP指令需要這個隊列。在稍后的部分中將描述如何加載和存儲指令收回。
2.3.4長度隊列當協(xié)處理器已經對指令進行譯碼時,它將知道矢量的加載或存儲操作將會多久。該信息與同步化令牌一起沿著長度隊列330向下發(fā)送。在一般的情況下,在需要信息的地方,與沿著核心流水線將指令從取出級190傳遞到EX1級260(在此也稱為轉移級)相比較,需要花費更長時間來接收指令、對它進行譯碼并返回長度。在核心EX1級內,令牌到達過程中的延遲令那個級停頓一個循環(huán)周期。這將額外的周期加到協(xié)處理器指令的執(zhí)行中。幸好,不是每條協(xié)處理器指令都會招致這種損失,并且在稍后的部分中將研究這種情況的原因。所述長度隊列是三個槽長。
2.3.5接受隊列所述協(xié)處理器可以在發(fā)出級中判定它無法接受指令,并且將這個信息連同同步化令牌一起沿著接受隊列340向下傳遞。當核心EX2級270(在此也稱為ALU級)接收到告知它拒絕對應指令的令牌時,它通過清除EX2級而從流水線中刪除該指令。所述接受隊列是三個槽長。
2.3.6清除廣播如果已經錯誤預測了分支,則可能必須要讓核心清除兩條流水線。由于這個動作可能影響整條的流水線,因而不跨隊列傳遞它,而是根據(jù)與隊列相同的計時約束條件將它從核心廣播到協(xié)處理器。所述清除信號,當被協(xié)處理器接收到時,將使流水線和指令隊列300被清除直至觸發(fā)清除的指令為止。
圖4示出了核心和流水線級以及連接它們兩者的隊列的更詳細的視圖。還示出了核心的加載/存儲單元(LSU)222。所述LSU經由存儲隊列400從協(xié)處理器那里接受存儲數(shù)據(jù),并生成加載數(shù)據(jù)以便經由加載隊列410發(fā)送到協(xié)處理器。
單獨地示出了所述指令隊列300和協(xié)處理器譯碼級205,但事實上它們形成優(yōu)選實施例中的單個塊。這個的原因在部分2.5.4中作了解釋。
2.4數(shù)據(jù)傳送多數(shù)協(xié)處理器指令都會引發(fā)數(shù)據(jù)跨接口的傳遞,要么作為單個值要么作為矢量。因此,數(shù)據(jù)傳遞需要路徑。這些路徑允許核心LSU 222與協(xié)處理器流水線相通信。所述協(xié)處理器通常不具備獨立的LSU,所以用于存儲的數(shù)據(jù)的生成以及加載數(shù)據(jù)的接收都將直接由流水線執(zhí)行。
圖5示出了核心LSU 222與協(xié)處理器流水線之間的通信的概括視圖。
將在下面的部分中單獨描述加載和存儲。
2.4.1加載如圖5所示,通過核心LSU 222的WB級250將加載數(shù)據(jù)跨接口發(fā)送出去,并且由協(xié)處理器流水線的EX6級275(即,WB級)來接收。由于協(xié)處理器流水線無法停頓超出發(fā)出級,除非等待允許EX6中的指令收回的結束令牌,因此加載指令將總是與數(shù)據(jù)到達協(xié)處理器同步地到達EX6。因此,所述加載隊列可以由雙緩沖器410來實現(xiàn),所述雙緩沖器用來隨著EX6中的加載指令的到達而重新對準數(shù)據(jù)。在圖4中示出了這個雙緩沖器410。
2.4.2存儲由于當數(shù)據(jù)到達時核心LSU也許不能保證接受該數(shù)據(jù),因此需要存儲隊列400。這個隊列將LSU 222的DC1級230(在此也稱為存儲器1級)連接到協(xié)處理器的發(fā)出級215。由于可以傳送數(shù)據(jù)的變化量,因而在存儲隊列400上需要流控制以便允許LSU 222臨時停止數(shù)據(jù)的傳送。這將在稍后更詳細地論述。
2.5令牌隊列管理全部都為三個槽長且功能相同的令牌隊列(即,除了加載隊列410之外的所有隊列)都實現(xiàn)為短FIFO。大多數(shù)隊列因同步化流水線的自我限制特性而無需流控制,但是存儲數(shù)據(jù)隊列400的確需要能夠控制從協(xié)處理器到它當中的信息流。在下面的部分中將論述隊列的形式和流控制的增加。
2.5.1隊列實施方式隊列FIFO可以實現(xiàn)為三個寄存器600、610、620,通過使用多路復用器660、670來選擇當前輸出。圖6舉例說明了這種布局方案。所述隊列由三個寄存器600、610、620構成,每個寄存器分別與標志630、640、650相關聯(lián),以指示所述寄存器是否包含有效數(shù)據(jù)。通過將新數(shù)據(jù)寫入到緩沖器A(即寄存器600)中來把該新數(shù)據(jù)移動到隊列中,并且只要下一個寄存器為空或即將變空,就繼續(xù)沿著隊列往前移動。如果隊列充滿了最舊的數(shù)據(jù),則首先從隊列中讀出的數(shù)據(jù)將占據(jù)緩沖器C,而最新的數(shù)據(jù)將占據(jù)緩沖器A。
多路復用器660、670也選擇當前標志,所述當前標志繼而指示所選定的輸出是否有效。
2.5.2隊列修改在每個循環(huán)周期上對隊列進行寫入,緩沖器A 600接受跨接口到達的數(shù)據(jù),而緩沖器A標志630接受與該數(shù)據(jù)相關聯(lián)的有效位。由于在同一個循環(huán)周期期間把緩沖器A的內容移動到緩沖器B 610,因此只要隊列不是滿的,這就不會造成數(shù)據(jù)的丟失。如果隊列是滿的,那么就禁止緩沖器A 600的加載以便防止數(shù)據(jù)丟失。在任何情況下,正如前面提到的那樣,圖3和4中所示的流水線的幾何結構在每個隊列中需要至多三個可用的槽,因此當隊列是滿的時,接口不應該呈現(xiàn)任何有效數(shù)據(jù),這樣應該就不會接著發(fā)生數(shù)據(jù)丟失。利用三個緩沖器標志630、640、650的狀態(tài)來判斷哪個緩沖器在每個循環(huán)期間提供隊列輸出。所述輸出將總是由包含最舊數(shù)據(jù)的緩沖器來提供。這將是緩沖器C(如果它是滿的)或緩沖器B,或者如果它是空的則將是緩沖器A。簡單的優(yōu)先級編碼器(檢查所述三個標志)能夠提供正確的多路復用器選擇信號。這三個標志的狀態(tài)還可以判定如何將數(shù)據(jù)從一個緩沖器移動到隊列中的另一個緩沖器。表2示出了可以如何對三個標志進行譯碼(“X”表示“無關”狀態(tài))。
表2-隊列緩沖器的尋址應當注意的是,假如隊列不滿的話,即使設置了它的標志,也可以把新數(shù)據(jù)移動到緩沖器A,因為緩沖器A的當前內容也將被移動到緩沖器B。
當讀取隊列時,必須清除與提供信息的緩沖器相關聯(lián)的標志。這個操作可以與輸入操作相結合,以便在循環(huán)的末尾重寫緩沖器,在此循環(huán)期間它提供隊列輸出。這可以通過利用讀使能信號來實現(xiàn),以屏蔽所選的級的標志,從而使其可用于輸入。圖7提供了對隊列進行讀和寫的舉例說明。
將四個有效輸入(“一”、“二”、“三”和“四”)寫入到隊列中,并且當它們到達時計時到緩沖器A 600中。該圖示出了如何將這些輸入從緩沖器到緩沖器計時直到第一個輸入到達緩沖器C 620為止。此時,需要進行從隊列中讀取。由于緩沖器C是滿的,因此選它來提供數(shù)據(jù)。當正在讀取它時,它能夠自由接受更多的輸入,因此它從緩沖器B中接收數(shù)值“二”,該緩沖器B從緩沖器A中接收數(shù)值“三”。因為正在通過寫入緩沖器B而釋放出緩沖器A,所以它能夠接受來自于所述輸入的數(shù)值“四”。
2.5.3流控制正如先前指明的那樣,存儲數(shù)據(jù)需要流控制以便允許核心LSU 222暫停來自于協(xié)處理器的數(shù)據(jù)流。這是通過向協(xié)處理器發(fā)送停止信號來完成的。由于這個信號要花二個時鐘周期到達協(xié)處理器,因此必須一旦存在存儲隊列400變滿的危險就生成它。對于隊列長度為三的情況,一旦核心LSU無法接受數(shù)據(jù)項,這個危險就會變成現(xiàn)實。這樣,無論何時LSU無法接受數(shù)據(jù),就向協(xié)處理器發(fā)送停止信號。由于延遲的緣故,協(xié)處理器在產生停止信號之后繼續(xù)在兩個更多的循環(huán)周期中發(fā)送數(shù)據(jù)。如果當發(fā)送停止信號時還有一項“在傳送中(in flight)”,則隊列將不得不在發(fā)送它之后接受三項。圖8舉例說明了這種情況。
所述LSU接受開始的兩次傳送A和B。然而,它不能接受第三項C,并且在點800處產生停止信號。當這個信號在點810處到達協(xié)處理器時,它已經發(fā)送三個更多的項C、D和E,并且早已將第六項F放在接口上?,F(xiàn)在已經接收到停止信號,協(xié)處理器把項F留在接口上。看到這個新的項并且不能接受它,所述LSU 222在點820處設置待定(Pending)標志以記錄它的存在。當LSU能夠接受更多的數(shù)據(jù)時,它開始卸載隊列并且在點830處解除聲明停止信號。當這個解除聲明在點840處到達協(xié)處理器時,隊列被清空并且能夠重新開始正常的服務。
2.5.4指令譯碼所述核心跨GCP接口傳遞從存儲器取出的每一條指令,在所述接口中它進入指令隊列300。理論上講,它僅僅應該傳遞協(xié)處理器指令,但在這個級它還沒有時間來對這些指令進行譯碼。當?shù)竭_GCP自己的譯碼級205時,將譯碼指令的工作留給GCP來處理,并且拒絕非協(xié)處理器指令。由于核心不需要確認這些指令的刪除,因而它能夠默默地完成這個工作,這是因為到那時候它將已經在它自己的譯碼級200中判定出了每條指令的類型。這意味著主要從核心接收的指令進入指令隊列,就必須對它進行譯碼。因此,指令隊列300是標準隊列的改良形式,它包括指令譯碼器205。圖9示出了如何可以實現(xiàn)指令隊列。
只要寫入到緩沖器A 900中的指令到達,解碼器205就對它進行譯碼,并且隨后的緩沖器B 910和C 920接收緩沖器A中的指令的譯碼后的形式。A標志930目前表明A中的數(shù)據(jù)是有效的,并且還代表協(xié)處理器指令。由此,立即從指令隊列中丟棄非協(xié)處理器或未被識別出的指令,并且永不傳遞它們。所述協(xié)處理器還比較協(xié)處理器指令中的協(xié)處理器號字段并且將其與它自己的進行比較。如果所述號不匹配的話,則所述指令就是無效的。
2.6指令標記有時,所述核心必須能夠識別協(xié)處理器流水線中的指令。這是清除(在稍后將詳細地介紹)所必需的,以便核心能夠向協(xié)處理器指示將要清除哪條指令。因此,所述核心給向協(xié)處理器發(fā)送的每條指令一個標記,所述標記是從足夠大的數(shù)值池中取出的,從而使得流水線中的所有標記無論何時都是唯一的。在優(yōu)選實施例中十六個標記足以實現(xiàn)這個,從而需要四位的標記字段。每當將標記分配給指令時,按模16來增加標記號以生成下一個標記。
如果連續(xù)的協(xié)處理器指令具有連續(xù)的標記,則可以簡化清除機制。這是通過只有當傳遞到協(xié)處理器的指令是協(xié)處理器指令時才增加標記號來實現(xiàn)的。這是在發(fā)送指令之后進行的,所以標記在協(xié)處理器指令被發(fā)送之后變化,而不是在此之前變化。在發(fā)送指令之前增加標記是不可能的,因為核心還沒有時間來對指令進行譯碼以判斷它是哪類指令。當協(xié)處理器譯碼級205刪除非協(xié)處理器指令時,給它留有攜帶連續(xù)標記的指令流。
還可以使用標記來核對沿著隊列往下移動的令牌序列匹配沿著核心和協(xié)處理器流水線往下移動的指令序列。
3操作現(xiàn)在,將通過舉例說明可能執(zhí)行的各種操作和可能發(fā)生的各種事件來論述GCP接口的工作方式。論述隨帶的這些圖示出了令牌跨兩條流水線之間的接口而沿著各種隊列向下傳遞。通過觀察起點和終點并參照圖3可以推斷出每個隊列的身份。
3.1正常操作圖10示出了核心和協(xié)處理器流水線的正常操作。
在正常操作中,核心經由指令隊列300、將所有指令傳遞到協(xié)處理器那邊,然后如果所述指令是協(xié)處理器指令的話就增加標記。所述協(xié)處理器對指令進行譯碼并且如果它不是協(xié)處理器指令或者如果它包含錯誤的協(xié)處理器號的話,則就把它扔掉。然后,沿著流水線往下傳遞每條協(xié)處理器指令,當它移動到發(fā)出級時,沿著長度隊列330往下發(fā)送令牌。然后,將所述指令保留在發(fā)出級中直到已經從取消隊列310中接收到令牌為止。如果取消令牌不請求取消所述指令的話,則就把它移到EX1級,將令牌放在接受隊列340上。然后,沿著流水線往下移動所述指令直到它到達EX6級。此時,它等待從結束隊列320中接收令牌,從而允許它收回。
圖10示出了協(xié)處理器利用沿著長度隊列330向下的令牌來作出響應所占的時間如何使核心流水線在EX1級中停頓指令A,同時等待所述令牌。當B離開它的發(fā)出級時,這種延遲又使指令B在協(xié)處理器流水線級EX1中等待由核心發(fā)送的令牌。指令B因而晚到達EX6,并且發(fā)現(xiàn)在結束隊列中的令牌已在那里等待一個循環(huán)周期了。然而,當指令C到達流水線的底部時,再一次使兩條流水線同步化。
從圖10很清楚得知,協(xié)處理器流水線的執(zhí)行由于指令在核心的發(fā)出級中停頓而導致一個循環(huán)周期的時間損失。但是下兩條指令藉此停頓而分擔了所述損失。如果沿著流水線往下傳遞的所有指令都是協(xié)處理器指令的話,則每隔一條指令就將有一次停頓,這樣對于每一條協(xié)處理器指令損失就傳給額外的三分之一循環(huán)周期。從另一方面來講,如果協(xié)處理器指令在流水線中的是稀疏的,那么對于每條協(xié)處理器指令都會招致單個循環(huán)周期的損失。由此,平均計時損失隨著協(xié)處理器指令的比率升高而降低。
3.2停頓圖11示出了當協(xié)處理器在它的發(fā)出級中停頓時核心和協(xié)處理器流水線如何運轉。
協(xié)處理器指令A沿著流水線往下的傳遞是以正常的方式開始的,且在指令從核心的發(fā)出級和協(xié)處理器的譯碼級傳遞出來時帶有令牌的交換。然后,所述指令在協(xié)處理器的發(fā)出級中停頓,從而延遲令牌經由接受隊列340向核心的EX2級的傳遞,因此這當其等待它的時候停頓。當指令最終前進到協(xié)處理器的EX1級中時,當它離開核心的發(fā)出級時,它拾起先前經由取消隊列310由指令公布(post)的令牌。
圖11還舉例說明了流水線自身如何在任一時刻限制能夠在隊列中等待的項的數(shù)目。當指令A停頓在EX2級中等待令牌出現(xiàn)在接受隊列340上時級,它防止指令C繼續(xù)前進并且將一個令牌放在取消隊列310上,不過指令B早已這樣做了。借此,將在取消隊列中等待的項的數(shù)目限制為兩個。在于流水線之間傳遞令牌的其它隊列中,類似的機制在起作用。
3.3取消圖12示出了當核心在它的發(fā)出級中取消協(xié)處理器指令時核心和協(xié)處理器流水線如何運轉。
指令C通常沿著核心流水線向下進行,沿著指令隊列300往下發(fā)送令牌,直到它到達發(fā)出級為止。此時,它沿著取消隊列310往下發(fā)送一個令牌,以指示該指令應被取消。完成這個之后,它變成核心流水線內的幻影(用陰影表示)并且繼續(xù)像正常情況那樣沿著流水線向下前進直至EX2級。它這樣做以便它能夠拾起由它在協(xié)處理器中的對方經由長度隊列330和接受隊列340發(fā)送的令牌。這些將都在協(xié)處理器隊列中的指令從取消隊列310中讀取令牌之前就已被發(fā)送出去。這通過確保每個發(fā)送指令在其它流水線中具有對應的接收指令,來保持令牌沿著隊列往下的傳遞正確。指令C在它離開核心的EX2級時最終可能會期滿,因為級不再需要拾起令牌。剛一在EX1級中從取消隊列310中拾起取消令牌,協(xié)處理器流水線中的指令就會立刻期滿。
3.4回彈圖13示出了當協(xié)處理器回彈(不接受)協(xié)處理器指令時核心和協(xié)處理器流水線如何運轉。
指令C以正常的方式沿著協(xié)處理器流水線往下傳遞,將一個令牌傳遞到長度隊列330中直到它到達發(fā)出級為止。此時,它沿著接受隊列340往下發(fā)送一個令牌,以指示協(xié)處理器不接受所述指令。完成這個之后,它變成幻影并且像正常情況那樣繼續(xù)沿著流水線向下前進直到當它期滿時它離開EX1為止。它這樣做以便它能夠拾起它在核心流水線中的對方沿著取消隊列310往下發(fā)送的令牌。剛一在EX2級中從接受隊列340中拾起接受令牌,核心流水線中的指令就會立刻期滿。
在協(xié)處理器流水線中指令被回彈的情況,幾乎與在核心流水線中被取消的情況相同,并且通過流水線處理被核心取消以及被協(xié)處理器回彈的指令的方式來提供這種機制的充分說明。圖14示出了這種情況。
在這種情況下,兩條流水線都已經產生幻影,其唯一目的就是從其它流水線中拾起令牌,或者就協(xié)處理器來說,其唯一目的是提供在清除期間用于匹配的標記。每個接收告知它期滿的令牌,但這個信息是冗余的,因為作為幻影,它早已是注定的。
3.5清除圖15示出了當核心向協(xié)處理器發(fā)送清除信號時核心和協(xié)處理器流水線如何運轉。
核心可以在從發(fā)出級到EX4級(包括在內)的任意級中觸發(fā)清除。可以經由一連串的隊列將這個信息傳遞給協(xié)處理器流水線,不過這種方案使隊列不必要地激增。作為替代,使用標記以便能夠通過發(fā)送對應的標記來將標識待清除的指令的單個廣播信號發(fā)送給協(xié)處理器。然后,所述協(xié)處理器必須找到具有與清除標記相同或比清除標記更新的標記的所有指令并刪除它們。與沿著隊列向下傳遞的令牌不同,清除信號具有固定延遲,以便精確知曉核心中的清除與協(xié)處理器中的清除之間的計時關系。
在圖15中,指令C當它到達核心中的EX1級時觸發(fā)清除。因此,它在下一個循環(huán)周期上期滿,同時帶上流水線中繼它之后的所有指令。當它期滿時,它向協(xié)處理器流水線發(fā)送廣播信號450(在圖中用虛線箭頭示出)。當協(xié)處理器接收到這個信號時,它查看流水線以供匹配標記并自那個點起向上刪除所有指令,在圖15中,所述這些指令是指令C、D和F(在任何情況下,即將期滿的譯碼級中的核心指令)。指令A和B繼續(xù)沿著流水線向下傳送因為它們在清除點之前。
大多數(shù)的令牌隊列同樣需要清除,并且這同樣也可以利用附于每條指令上的標記來完成。如果通過在令牌隊列的接收端處的級之前已經發(fā)現(xiàn)匹配,那么就僅僅清除該令牌隊列。否則,必須通過匹配隊列中的標記來正確地清除它。必須對除結束隊列320之外的所有隊列(包括存儲隊列400在內)執(zhí)行這個操作。因此,協(xié)處理器必須清除指令隊列300和取消隊列310,并且所述核心必須清除長度隊列330、接受隊列340和存儲隊列400。
一旦接收到清除信號,就可以由協(xié)處理器來執(zhí)行清除操作,并且因為隊列將不會執(zhí)行其它操作所以可以簡化所述清除操作。這意味著清除不需要與隊列更新相結合。圖15的試驗示出了繼清除之后存在單個循環(huán)周期,在所述單個循環(huán)周期中,沒有發(fā)生任何影響清除后的隊列的事情,這對于執(zhí)行隊列清除操作而言是一個好機會。然而,這不適用于加載隊列或存儲隊列,稍后將會論述所述加載隊列或存儲隊列。
清除命令已經將一個指示應該在哪里開始清除的標記值與它相關聯(lián)。將這個標記值與每條指令所攜帶的標記相匹配。如果所述隊列將被清除,則清除帶有相同的或更新的標記的每個緩沖器。圖16提供了隊列清除的例圖。
隊列中的每個緩沖器600、610、620都具有與它相關聯(lián)的標記比較器604、614、624。向每個比較器呈現(xiàn)將要同屬于隊列中所保存的每條有效指令的標記602、612、622相比較的清除標記632。如果緩沖器的標記大于或等于清除標記,則隊列中的緩沖器就清除它的滿標志,以表明它現(xiàn)在是空的。
3.6收回當指令到達協(xié)處理器流水線的底部時,它想要收回。它如何收回取決于它是哪類指令以及是否重復它。當CDP指令在結束隊列320中找到符合它的令牌時,CDP指令收回。
在稍后的部分中論述這樣的條件,根據(jù)所述條件可以收回加載和存儲指令。
4數(shù)據(jù)傳送4.1概括數(shù)據(jù)傳送是由核心側上的LSU 222以及協(xié)處理器側上的流水線自身來管理的。傳送可以是單個數(shù)值或矢量。在后一種情況下,所述協(xié)處理器通過重復發(fā)出級中的指令,有效地將多路傳送轉換成一連串的單路傳送。這為待傳送的每一項產生加載或存儲指令的實例。所述指令當它重復時停留在協(xié)處理器發(fā)出級中,從而產生它自己的拷貝。對于加載,這些指令沿著流水線往下移動,以便當每個數(shù)據(jù)項達到EX6級時,它們能夠從加載隊列410中拾起所述每個數(shù)據(jù)項。對于存儲,不從發(fā)出級傳遞所重復的指令出去,而是當產生它們時會消失,從而在每次重復的基礎上生成存儲數(shù)據(jù)以供置于存儲隊列400當中。圖17示出了加載指令C的示例。所重復的指令的第一個(以大寫字母示出)是頭,而其它的(以小寫字母示出)都是尾。在該示例中示出的矢量長度為4,所以存在一個頭和三個尾。
只有頭指令與同核心流水線互換令牌有關,其不以這種方式重復指令,尾指令沿著協(xié)處理器流水線默默地往下傳遞。當所重復的加載指令被取消或清除時,必須從流水線中刪除掉所有的尾指令(標以相同的標記)。當被取消時只有頭指令會變成幻影;所述尾被完全刪除。
4.2加載加載數(shù)據(jù)自核心LSU 222的WB級250中出現(xiàn),并且是通過協(xié)處理器EX6級275從加載隊列410中接收的。利用所重復的加載指令的一個實例來拾起矢量加載中的每一項。所述流水線計時是這樣的加載指令將總是處于就緒狀態(tài),或者剛好到達EX6以拾起每個數(shù)據(jù)項。如果加載指令已經到達EX6,但是加載信息還沒有出現(xiàn),那么加載指令就必須在EX6中停頓,從而停頓其余的協(xié)處理器流水線。由此,加載指令當其符合加載數(shù)據(jù)時收回。
4.2.1加載緩沖器為了在協(xié)處理器EX6級中獲得加載數(shù)據(jù)與加載指令的正確對準,當數(shù)據(jù)達到協(xié)處理器時需要對該數(shù)據(jù)進行雙緩沖。圖18提供了例圖。
加載數(shù)據(jù)緩沖器起流水線寄存器的作用,因此無需流控制并且不需要攜帶任何標記。唯一要求就是數(shù)據(jù)和有效位。將自核心LSU 222的WB級250出現(xiàn)的加載數(shù)據(jù)的每一項置于核心緩沖器1000中,同時將其對應的有效位存儲在緩沖器1030中。然后,經由接口向GCP傳遞所述數(shù)據(jù)項和相關的有效位,其中又依次經由緩沖器1010、1040和1020、1050來傳遞它。圖19示出了核心中的加載指令如何進入核心LSU并且啟動生成加載數(shù)據(jù)的一項,接著經由GCP的核心接口緩沖器1010和雙緩沖器1020、1030將所述加載數(shù)據(jù)項傳遞到協(xié)處理器,在EX6處遇到協(xié)處理器加載指令。
對于這種形式的緩沖用于加載傳送的數(shù)據(jù),要求以這種方式使兩條流水線達到同步,即指令到達協(xié)處理器EX6中總是與對應的指令到達核心EX4級同時或在此之前。還要求從核心沿著結束隊列320往下移動的令牌與對應的加載數(shù)據(jù)項到達加載數(shù)據(jù)流水線緩沖器的末端相同時間到達。假如協(xié)處理器流水線響應于結束隊列320中的令牌的缺乏而僅在發(fā)出級之后停頓,并且假如LSU 222在它允許加載指令自其ADD級220繼續(xù)移動之前從接受隊列340中看到所述令牌,這些條件將得到滿足。另外,WB停頓必須延遲從LSU發(fā)送加載數(shù)據(jù)。
4.2.2清除沒有不涉及核心EX4級290的清除能夠影響加載數(shù)據(jù)緩沖器,并且加載傳送將正常地結束。如果清除是由核心EX4級中的指令啟動的,那么這就不會是一條加載指令,因為加載指令無法觸發(fā)清除。如果清除點后面的任何協(xié)處理器加載指令達到協(xié)處理器流水線的EX6級275,則由于缺乏結束令牌而級發(fā)現(xiàn)它們自己被停頓,所以將沒有數(shù)據(jù)傳送發(fā)生。當流水線重新加載時,加載數(shù)據(jù)緩沖器410中的任何數(shù)據(jù)將在清除死周期期間自然地期滿。
4.2.3取消如果取消一條加載指令,則所述頭和任何尾都必須被刪除,同時僅僅用幻影來替代頭。由于所述取消將在協(xié)處理器EX1級225中發(fā)生,因而沒有數(shù)據(jù)傳送已經發(fā)生,并且因此不需要采取特定措施來處理加載數(shù)據(jù)。
4.2.4收回當加載指令到達協(xié)處理器流水線的底部時,它必須在加載數(shù)據(jù)緩沖器410的末端找到數(shù)據(jù)項。如果所述指令是一條頭指令,則它也必須在結束隊列320中找到令牌。尾指令只需要呈現(xiàn)加載數(shù)據(jù),但無需來自結束隊列的令牌。
4.3存儲存儲數(shù)據(jù)自協(xié)處理器發(fā)出級215中出現(xiàn),并且是通過核心LSU DC1級230來接收的。當存儲指令在協(xié)處理器發(fā)出級中重復時,生成矢量存儲的每一項。所重復的存儲指令不具備進一步的用途,且不再沿著協(xié)處理器流水線往下傳遞它們。只將頭指令沿著流水線往下傳遞。這意味著一旦被啟動,存儲重復就將不會停止除非所述核心明確停止它。具體來講,如果在協(xié)處理器流水線的EX1級中存儲頭指令被停頓,則所述重復就繼續(xù)下去且不受停頓的影響。
4.3.1存儲數(shù)據(jù)隊列由于可以在任何時候由LSU 222停止存儲數(shù)據(jù)傳送,因此需要一個存儲數(shù)據(jù)隊列400。此外,由于存儲數(shù)據(jù)矢量可以具有任意的長度,因此需要流控制,而這早已在第2.5.3部分中論述過了。三個槽的隊列長度剛好足以允許使用流控制而無數(shù)據(jù)丟失。
4.3.2清除當存儲指令牽涉到清除時,所述核心必須清除存儲數(shù)據(jù)隊列400。由于所述隊列將在核心向協(xié)處理器通知所述清除(由于信號傳播延遲)之后繼續(xù)填充兩個循環(huán)周期,因此所述核心必須在執(zhí)行存儲數(shù)據(jù)隊列400清除之前延遲兩個循環(huán)周期。在清除之后的死周期充分地延長以致完成這一操作。
4.3.3取消如果所述核心取消一條存儲指令,那么它知道在它開始接收存儲數(shù)據(jù)之前取消所述指令。當協(xié)處理器接收并作用于取消信號時,它將早已沿著存儲數(shù)據(jù)隊列400向下發(fā)送了一個數(shù)據(jù)項。因此,所述核心必須在取消之后刪除并處置這個單項。這可以通過經LSU 222發(fā)送單個存儲指令幻影以拾起死的數(shù)據(jù)來實現(xiàn)。作為選擇,發(fā)出級可以超前查看取消隊列以確定不會在開始發(fā)送數(shù)據(jù)之前取消所述存儲指令。
4.3.4收回存儲指令不使用結束令牌隊列320,因此一旦它們到達協(xié)處理器流水線的底部就收回。
5多個協(xié)處理器可能存在一個以上的協(xié)處理器附著于核心上,因此需要一些手段來處理多個協(xié)處理器。重要的是,為了節(jié)約起見,要保證復制盡可能少的協(xié)處理器接口。具體來講,所述協(xié)處理器應該共用由核心所維護的長度隊列330、接受隊列340和存儲數(shù)據(jù)隊列400。如果將要共用這些隊列,則只有一個協(xié)處理器可以在任何時候使用這些隊列。通過在任何時候只允許一個協(xié)處理器被激活,能極其容易地保證這一點。這不是重要限制,因為一般而言在任何時候都應該只使用一個協(xié)處理器。典型地,將通過驅動器軟件來驅動處理器,從而將僅僅驅動一個協(xié)處理器。對驅動器軟件的調用和從其中返回將確保在使用一個協(xié)處理器和使用不同的協(xié)處理器之間存在多條核心指令。
5.1互連考慮如果在任何時候只允許一個協(xié)處理器與核心相通信,那么所有協(xié)處理器就都可以共用來自核心的GCP接口信號。假如每個協(xié)處理器當其失效時都將它的輸出保持為零,則僅需要將從協(xié)處理器到核心的信號一起求或(ORed)。
5.2協(xié)處理器選擇協(xié)處理器是由來自于核心的信號來使能的。在優(yōu)選實施例中,存在這些信號中的16個信號,一個用于每個協(xié)處理器,而只有一個可以在任何時候是有效的。另外,到協(xié)處理器的指令將包括協(xié)處理器號,其允許協(xié)處理器拒絕不匹配它們自己的號的指令以及拒絕核心指令。
5.3協(xié)處理器轉換當所述核心對為不同協(xié)處理器指定給最后編址的那個的協(xié)處理器指令進行譯碼時,它停頓這條指令直到已經收回先前的協(xié)處理器指令為止。這確保當前選擇的協(xié)處理器中的所有動作都已經中止。然后,轉換協(xié)處理器選擇,使上次的有效協(xié)處理器無效并激活新的協(xié)處理器。應該已經接收到新協(xié)處理器指令的協(xié)處理器將已忽略它,正在被中止。因此,所述指令需要被核心重新發(fā)送,并且現(xiàn)在將由新激活的協(xié)處理器來接受。
雖然已經在此描述了本發(fā)明的特定實施例,但是顯然本發(fā)明不限于此,而是可以在本發(fā)明的范圍內進行許多修改和添加。例如,在不背離本發(fā)明范圍的情況下,可以利用獨立權利要求的特征做出隨后從屬權利要求的特征的各種組合。
權利要求
1.一種數(shù)據(jù)處理設備,包括主處理器,可操作用于執(zhí)行指令序列,所述主處理器包括具有第一多個流水線級的第一流水線;協(xié)處理器,可操作用于執(zhí)行所述指令序列中的協(xié)處理器指令,所述協(xié)處理器包括具有第二多個流水線級的第二流水線,并且將每條協(xié)處理器指令都設置成能經由第一流水線和第二流水線而被路由;和至少一個同步化隊列,將其中一條流水線中的預定流水線級與其它流水線中的伙伴流水線級相耦合,當處理協(xié)處理器指令時,所述預定流水線級可操作用于使令牌置于同步化隊列中,而當從同步化隊列中接收到所述令牌時,所述伙伴流水線級可操作用于處理該協(xié)處理器指令,借此使預定流水線級與伙伴流水線級之間的第一和第二流水線同步化。
2.如權利要求1所述的數(shù)據(jù)處理設備,還包括多個所述同步化隊列,每個所述同步化隊列都將其中一條流水線中的預定流水線級與其它流水線中的伙伴流水線級相耦合。
3.如權利要求1或2所述的數(shù)據(jù)處理設備,其中至少一個同步化隊列的其中一個是指令隊列,所述預定流水線級處于第一流水線中并且被設置成使標識協(xié)處理器指令的令牌置于指令隊列中,而所述伙伴流水線級處于第二流水線中并且當接收到該令牌時可操作用于開始處理由該令牌標識的協(xié)處理器指令。
4.如權利要求3所述的數(shù)據(jù)處理設備,其中所述預定流水線級是第一流水線中的取出級,而所述伙伴流水線級是第二流水線中的譯碼級,當接收到所述令牌時,所述譯碼級可操作用于對協(xié)處理器指令進行譯碼。
5.如權利要求4所述的數(shù)據(jù)處理設備,其中第一流水線中的取出級可操作用于對于指令序列中的每條指令使令牌置于指令隊列中,而第二流水線中的譯碼級被設置成當接收到相關的令牌時對每條指令進行譯碼,以便判斷該指令是否是需要進一步由協(xié)處理器處理的協(xié)處理器指令。
6.如前述任一權利要求所述的數(shù)據(jù)處理設備,其中至少一個同步化隊列的其中一個是取消隊列,所述預定流水線級處于第一流水線中并且被設置成使標識在所述預定流水線級處的協(xié)處理器指令是否要被取消的令牌置于取消隊列中,而所述伙伴流水線級處于第二流水線中,并且當從取消隊列中接收到令牌時且如果該令牌標識出協(xié)處理器指令要被取消的話,則可操作用于使該協(xié)處理器指令被取消。
7.如權利要求6所述的數(shù)據(jù)處理設備,其中所述預定流水線級是第一流水線中的發(fā)出級,而所述伙伴流水線級是第二流水線中跟隨在發(fā)出級后面的級。
8.如權利要求6或7所述的數(shù)據(jù)處理設備,其中當從取消隊列中接收到令牌時,且如果該令牌標識出協(xié)處理器指令要被取消的話,則所述伙伴流水線級可操作用于從第二流水線中刪除該協(xié)處理器指令。
9.如前述任一權利要求所述的數(shù)據(jù)處理設備,其中至少一個同步化隊列中的一個是結束隊列,所述預定流水線級處于第一流水線中并且被設置成使標識允許在該預定流水線級處的協(xié)處理器指令從第二流水線收回的令牌置于結束隊列中,而所述伙伴流水線級處于第二流水線中,并且當從結束隊列中接收到令牌時且如果該令牌標識出允許收回所述協(xié)處理器指令的話,則可操作用于使該協(xié)處理器指令被收回。
10.如權利要求9所述的數(shù)據(jù)處理設備,其中所述預定流水線級是第一流水線中的回寫級,而所述伙伴流水線級是第二流水線中的回寫級。
11.如前述任一權利要求所述的數(shù)據(jù)處理設備,其中至少一個同步化隊列中的一個是長度隊列,所述預定流水線級處于第二流水線中并且為矢量協(xié)處理器指令設置成使標識矢量協(xié)處理器指令的長度信息的令牌置于長度隊列中,而所述伙伴流水線級處于第一流水線中并且當從長度隊列中接收到令牌時,可操作用于將該長度信息分解成進一步處理第一流水線內的矢量協(xié)處理器指令。
12.如權利要求11所述的數(shù)據(jù)處理設備,其中所述預定流水線級是第二流水線中的譯碼級,而所述伙伴流水線級是第一流水線中的第一執(zhí)行級。
13.如前述任一權利要求所述的數(shù)據(jù)處理設備,其中至少一個同步化隊列中的一個是接受隊列,所述預定流水線級處于第二流水線中并且被設置成使標識在該預定流水線級中的協(xié)處理器指令是否被接受以供由協(xié)處理器執(zhí)行的令牌置于接受隊列中,而所述伙伴流水線級處于第一流水線中,并且當從接受隊列中接收到令牌時且如果該令牌標識出不接受所述協(xié)處理器指令的話,則可操作用于使協(xié)處理器指令被主處理器拒絕。
14.如權利要求13所述的數(shù)據(jù)處理設備,其中所述預定流水線級是第二流水線中的發(fā)出級,而所述伙伴流水線級是第一流水線中的第二執(zhí)行級。
15.如權利要求13或14所述的數(shù)據(jù)處理設備,其中當從接受隊列中接收到令牌時,且如果該令牌標識出不接受所述協(xié)處理器指令的話,則所述伙伴流水線級可操作用于從第一流水線中刪除該協(xié)處理器指令。
16.如前述任一權利要求所述的數(shù)據(jù)處理設備,其中至少一個同步化隊列中的一個是當協(xié)處理器指令是存儲指令時所用的存儲隊列,所述存儲指令可操作用于使數(shù)據(jù)項從協(xié)處理器被傳遞到可由主處理器訪問的存儲器,所述預定流水線級處于第二流水線中,并且當處理其中一條所述的存儲指令時被設置成使標識待傳送的每個數(shù)據(jù)項的令牌置于存儲隊列中,而所述伙伴流水線級處于第一流水線中并且當從存儲隊列中接收到每個令牌時,可操作用于使對應的數(shù)據(jù)項被傳送到存儲器。
17.如權利要求16所述的數(shù)據(jù)處理設備,其中所述預定流水線級是第二流水線中的發(fā)出級,而所述伙伴流水線級是第一流水線中的地址生成級。
18.如前述任一權利要求所述的數(shù)據(jù)處理設備,其中至少一個同步化隊列中的一個是當協(xié)處理器指令是加載指令時所用的加載隊列,所述加載指令可操作用于使數(shù)據(jù)項從可由主處理器訪問的存儲器被傳送到協(xié)處理器,所述預定流水線級處于第一流水線中,并且當處理其中一條所述的加載指令時被設置成使標識待傳送的每個數(shù)據(jù)項的令牌置于加載隊列中,而所述伙伴流水線級處于第二流水線中并且當從加載隊列中接收到每個令牌時,可操作用于使對應的數(shù)據(jù)項被傳送到協(xié)處理器。
19.如權利要求17所述的數(shù)據(jù)處理設備,其中所述預定流水線級是第一流水線中的回寫級,而所述伙伴流水線級是第二流水線中的回寫級。
20.當從屬于權利要求書16時如權利要求書18所述的數(shù)據(jù)處理設備,其中所述加載指令和存儲指令可以是定義待傳送的多個數(shù)據(jù)項的矢量協(xié)處理器指令,并且所述設備進一步包括與加載隊列和存儲隊列中的至少其中一個相關聯(lián)的流控制邏輯,可操作用于向預定流水線級發(fā)送控制信號,以便當判定相關的加載或存儲隊列可能變滿時停止由預定流水線級發(fā)出令牌。
21.如權利要求20所述的數(shù)據(jù)處理設備,其中所述流控制邏輯是為存儲隊列而提供的,所述流控制邏輯可操作用于當從主處理器中接收伙伴流水線級無法接受數(shù)據(jù)項的指示時發(fā)出控制信號。
22.如權利要求21所述的數(shù)據(jù)處理設備,其中所述加載隊列是雙緩沖器。
23.如前述任一權利要求所述的數(shù)據(jù)處理設備,其中每個令牌都包括標識令牌涉及的協(xié)處理器指令的標記。
24.如權利要求23所述的數(shù)據(jù)處理設備,其中當必需從第一和第二流水線兩者中清除協(xié)處理器指令時,所述主處理器可操作用于向協(xié)處理器廣播識別與需要被清除的最舊指令有關的標記的清除信號,所述協(xié)處理器可操作用于根據(jù)標記來識別該最舊指令,并且從第二流水線中清除掉該最舊指令以及協(xié)處理器內任何以后的指令。
25.如權利要求24所述的數(shù)據(jù)處理設備,其中響應于所述清除信號來清除一個或多個所述的至少一個同步化隊列,利用標記來識別要清除隊列內的哪個令牌。
26.如前述任一權利要求所述的數(shù)據(jù)處理設備,其中所述至少一個同步化隊列包括具有預定數(shù)量的用于存儲令牌的條目的先進先出(FIFO)緩沖器。
27.如前述任一權利要求所述的數(shù)據(jù)處理設備,其中提供多個所述協(xié)處理器,每個同步化隊列將主處理器中的流水線級與其中一個協(xié)處理器中的流水線級相耦合。
28.如前述任一權利要求所述的數(shù)據(jù)處理設備,其中所述數(shù)據(jù)處理設備具備同步設計,從而由預定流水線級使令牌置于隊列中,并且當改變時鐘周期的邊沿時,由伙伴流水線級使所述令牌從隊列中被接收。
29.一種在數(shù)據(jù)處理設備中的流水線之間同步化的方法,所述數(shù)據(jù)處理設備包括主處理器,可操作用于執(zhí)行指令序列;以及協(xié)處理器,可操作用于執(zhí)行所述指令序列中的協(xié)處理器指令,所述主處理器包括具有第一多個流水線級的第一流水線,而所述協(xié)處理器包括具有第二多個流水線級的第二流水線,并且將每個協(xié)處理器指令都設置成經由第一流水線和第二流水線兩者而被路由,所述方法包括以下步驟(a)經由同步化隊列將其中一條流水線中的預定流水線級與其它流水線中的伙伴流水線級相耦合;(b)當預定流水線級正在處理協(xié)處理器指令時將令牌置于同步化隊列中;(c)當伙伴流水線級從同步化隊列中接收到令牌時,處理伙伴流水線級內的協(xié)處理器指令;由此獲得在預定流水線級與伙伴流水線級之間的第一和第二流水線的同步化。
30.如權利要求29所述的方法,其中提供多個所述同步化隊列,并且為每個同步化隊列執(zhí)行所述步驟(a)到(c)。
31.如權利要求29或30所述的方法,其中至少一個同步化隊列中的一個是指令隊列,所述預定流水線級處于第一流水線中,而所述伙伴流水線級處于第二流水線中,所述方法包括以下步驟在所述步驟(b),將標識協(xié)處理器指令的令牌置于指令隊列中;以及在所述步驟(c),當接收到令牌時,開始處理由伙伴流水線級內的令牌標識的協(xié)處理器指令。
32.如權利要求29至31中任一權利要求所述的方法,其中至少一個同步化隊列中的一個是取消隊列,所述預定流水線級處于第一流水線中,而所述伙伴流水線級處于第二流水線中,所述方法包括以下步驟在所述步驟(b),將標識在該預定流水線級處的協(xié)處理器指令是否被取消的令牌置于取消隊列中;以及在所述步驟(c),當伙伴流水線級從取消隊列中接收到令牌時,且如果該令牌標識出該協(xié)處理器指令要被取消,則使該協(xié)處理器指令被取消。
33.如權利要求29至32中任一權利要求所述的方法,其中至少一個同步化隊列中的一個是結束隊列,所述預定流水線級處于第一流水線中,而所述伙伴流水線級處于第二流水線中,所述方法包括以下步驟在所述步驟(b),將標識允許在該預定流水線級處的協(xié)處理器指令從第二流水線中收回的令牌置于結束隊列中;以及在所述步驟(c),當伙伴流水線級從結束隊列中接收到令牌時,且如果該令牌標識出允許收回協(xié)處理器指令的話,則使該協(xié)處理器指令被收回。
34.如權利要求29至33中任一權利要求所述的方法,其中至少一個同步化隊列中的一個是長度隊列,所述預定流水線級處于第二流水線中,而所述伙伴流水線級處于第一流水線中,并且所述方法包括以下步驟在所述步驟(b),對于矢量協(xié)處理器指令,將標識矢量協(xié)處理器指令的長度信息的令牌置于長度隊列中;以及在所述步驟(c),當伙伴流水線級從長度隊列中接收到令牌時,將該長度信息分解成進一步處理第一流水線內的矢量協(xié)處理器指令。
35.如權利要求29至34中任一權利要求所述的方法,其中至少一個同步化隊列中的一個是接受隊列,所述預定流水線級處于第二流水線中,而所述伙伴流水線級處于第一流水線中,所述方法包括以下步驟在所述步驟(b),將標識在該預定流水線級中的協(xié)處理器指令是否被接受以供由協(xié)處理器執(zhí)行的令牌置于接受隊列中;以及在所述步驟(c),當伙伴流水線級從接受隊列中接收到令牌時,并且如果該令牌標識出不接受該協(xié)處理器指令的話,則使該協(xié)處理器指令被主處理器拒絕。
36.如權利要求29至35中任一權利要求所述的方法,其中至少一個同步化隊列中的一個是當協(xié)處理器指令是存儲指令時所用的存儲隊列,所述存儲指令可操作用于使數(shù)據(jù)項從協(xié)處理器中被傳送到可由主處理器訪問的存儲器,所述預定流水線級處于第二流水線中,而所述伙伴流水線級處于第一流水線中,所述方法包括以下步驟在所述步驟(b),當處理其中一條所述的存儲指令時,將標識待傳送的每個數(shù)據(jù)項的令牌置于存儲隊列中;以及在所述步驟(c),當伙伴流水線級從存儲隊列接收到每個令牌時,使對應的數(shù)據(jù)項被傳送到存儲器。
37.如權利要求29至36中任一權利要求所述的方法,其中至少一個同步化隊列中的一個是當協(xié)處理器指令是加載指令時所用的加載隊列,所述加載指令可操作用于使數(shù)據(jù)項從可由主處理器訪問的存儲器中被傳送到協(xié)處理器,所述預定流水線級處于第一流水線中,而所述伙伴流水線級處于第二流水線中,所述方法包括以下步驟在所述步驟(b),當處理其中一條所述的加載指令時,將標識待傳送的每個數(shù)據(jù)項的令牌置于加載隊列中;以及在所述步驟(c),當伙伴流水線級從加載隊列中接收到每個令牌時,使對應的數(shù)據(jù)項被傳送到協(xié)處理器。
38.當從屬于權利要求36時如權利要求37所述的方法,其中所述加載指令和存儲指令可以是定義待傳送的多個數(shù)據(jù)項的矢量協(xié)處理器指令,并且所述方法進一步包括以下步驟(d)對于加載隊列和存儲隊列的至少其中之一,當確定相關的加載或存儲隊列可能變滿時,向預定流水線級發(fā)送控制信號以停止預定流水線級發(fā)出令牌。
39.如權利要求38所述的方法,其中所述步驟(d)是為存儲隊列執(zhí)行的,在所述步驟(d),所述方法包括以下步驟當從主處理器中接收到伙伴流水線級無法接受數(shù)據(jù)項的指示時,發(fā)出控制信號。
40.如權利要求29至39中任一權利要求所述的方法,其中每個令牌都包括標識令牌涉及的協(xié)處理器指令的標記。
41.如權利要求40所述的方法,其中當必需從第一和第二流水線中清除協(xié)處理器指令時,所述方法進一步包括以下步驟從主處理器向協(xié)處理器廣播標識與需要被清除的最舊指令相關的標記的清除信號;在協(xié)處理器內,根據(jù)標記識別該最舊的指令,并從第二流水線中清除掉該最舊的指令以及協(xié)處理器內任何以后的指令。
42.如權利要求41所述的方法,進一步包括以下步驟響應于所述清除信號清除一個或多個所述的至少一個同步化隊列,利用標記來標識要清除隊列內的哪個令牌。
43.如權利要求29至42中任一權利要求所述的方法,其中所述至少一個同步化隊列包括具有預定數(shù)量的用于存儲令牌的條目的先進先出(FIFO)緩沖器。
44.如權利要求29至43中任一權利要求所述的方法,其中提供多個所述協(xié)處理器,每個同步化隊列將主處理器中的流水線級與其中一個協(xié)處理器中的流水線級相耦合。
45.如權利要求29至44中任一權利要求所述的方法,其中所述數(shù)據(jù)處理設備具備同步設計,從而由預定流水線級將令牌置于隊列中,并且當改變時鐘周期的邊沿時,由伙伴流水線級從所述隊列中接收所述令牌。
全文摘要
本發(fā)明提供了一種用于數(shù)據(jù)處理設備中的流水線之間的同步化的技術。所述數(shù)據(jù)處理設備包括可操作用于執(zhí)行指令序列的主處理器和可操作用于執(zhí)行所述指令序列中的協(xié)處理器指令的協(xié)處理器,所述主處理器包括具有第一多個流水線級的第一流水線。所述協(xié)處理器包括具有第二多個流水線級的第二流水線,并且將每個協(xié)處理器指令設置成通過第一流水線和第二流水線兩者而被路由。此外,提供至少一個同步化隊列,所述同步化隊列將其中一條流水線中的預定流水線級與其它流水線中的伙伴流水線級相耦合,當處理協(xié)處理器指令時,所述預定流水線級可操作用于使令牌置于同步化隊列中,并且當從同步化隊列中接收到所述令牌時,所述伙伴流水線級可操作用于處理該協(xié)處理器指令。通過這種方法,使第一和第二流水線在預定的流水線級和伙伴流水線級之間達到同步,并由此為重要的信息傳送確保正確地使流水線同步,而不要求必需在所有級都精確同步。
文檔編號G06F9/38GK1678988SQ03821122
公開日2005年10月5日 申請日期2003年6月4日 優(yōu)先權日2002年9月4日
發(fā)明者M·R·埃文斯, I·V·德弗羅 申請人:Arm有限公司