專利名稱:設計用戶可定制的處理器的方法以及裝置的制作方法
技術領域:
本發(fā)明涉及集成電路設計領域,特別涉及使用一種硬件描述語言(HDL)、以在流水線化的中央處理器(CPU)或用戶可定制的微處理器中執(zhí)行指令。
背景技術:
RISC(或稱精簡指令集計算機)處理器在計算技術中廣為人知。RISC處理器通常具有利用大幅精簡的——相比于非RISC(通常稱為“CISC”)處理器而言——指令集的基本特征。一般地,RISC處理器機器指令并非全部微編碼化,而是可直接執(zhí)行、無需解碼,從而在運行速度上提供了明顯的高效率。而且這一“流線型的”指令處理能力在處理器的設計中又允許進一步的簡化(與非RISC裝置相比),從而提供了更小的硅片以及更低的制造成本。
RISC處理器通常還具有這樣的特征(i)裝入/儲存存儲器體系結構(亦即僅裝入和儲存指令具有對存儲器的入口,其它指令則經由處理器內的內部寄存器而進行操作);(ii)處理器和編譯程序結合;(iii)流水線作業(yè)。
流水線作業(yè)是一種通過將處理器中的操作順序分成分立部分——一旦有可能這些分立部分即被高效地同時執(zhí)行——以提高處理器性能的技術。在典型的流水線化的處理器中,相應于處理器算術運算(如ADD,MULTIPLY,DIVIDE等等)的運算單元通常被“分段”,從而在任一時鐘周期中,可令操作的一個特定部分在該單元的一個給定部分完成。圖1表示一個具有這樣分段的運算單元的典型處理器體系結構。所以這些單元可在任一給定時鐘周期對不同的計算結果進行運算。例如在第一時鐘周期,兩個數A和B被饋送到乘法單元10并由該單元的第一部分12部分地加以處理。在第二時鐘周期,來自于A和B相乘的部分結果被傳送到第二部分14,而此時第一部分12接收兩個新數(比如C和D),開始進行處理。凈結果為初始的啟動周期之后,每個時鐘周期都由運算單元10完成一次乘法運算。
流水線深度會依體系結構而異。在這里上下文中,“深度”一詞意指出現于流水線中的分立階段的數目。總的來說,一條流水線的階段愈多,運行程序愈快,但也會愈加難以編程——雖然對程序員來說流水線作用顯而易見。大多數流水線化的處理器為三階段(取指令,解碼,執(zhí)行)或四階段(例如取指令,解碼,取操作數,執(zhí)行或者還可為取指令,解碼/取操作數,執(zhí)行,寫回),不過也使用更多或更少的階段。
盡管有處理器中運算的前述“分段法”,原有技術處理器的流水線中的指令一般是連續(xù)的。具體地說,一個階段中的指令一般以最少的空時隙、NOP碼之類而直接隨之以稍后階段中的指令。而且,當一個稍后階段中的指令被阻塞(例如在運行階段中的一條指令等待來自一個取操作的信息),則該流水線中稍前、稍后的階段也都被阻塞。通過這種方式,流水線易于基本上以“鎖步”方式運行。
在開發(fā)一個流水線化處理器的指令集時,必須考慮到若干“冒險”。例如,所謂“結構”或“資源爭奪”冒險起因于重疊指令爭奪同樣的資源(例如總線,寄存器,或其它功能單元),這些冒險通常用一個或更多的流水線阻塞加以解決。所謂“數據”流水線冒險發(fā)生于讀/寫沖突的情況,這種沖突會改變存儲器或寄存器存取的順序。“控制”冒險則一般由程序流中的轉移或類似變化所產生。
流水線化處理器通常需要聯(lián)鎖以解決許多這類冒險。例如,考慮這種情況在一個稍前流水線階段中的一個后繼指令(n+1)需要來自于一個稍后階段的指令n的結果。對上述問題的一個簡單解答是以一個或一個以上的時鐘周期來延遲處于解碼階段中的操作數計算。然而這種延遲的一個結果,即為對處理器的一個給定指令的執(zhí)行時間部分地由流水線內圍繞該指令的指令所決定。這就使對處理器的編碼優(yōu)化復雜化,因為使程序員在編碼內確定聯(lián)鎖情況通常是困難的。
可在處理器中用“記分牌”來實現聯(lián)鎖;在這種方法中,為每個處理器寄存器附加一位,用以作為寄存器內容的指示符;具體地說,指示是否(i)寄存器內容已被更新并因此而可以使用,或者(ii)內容正在進行由其它寄存器所寫入這樣的改動。在有些體系結構中這一記分牌也用于生成聯(lián)鎖,這種聯(lián)鎖防止執(zhí)行要依賴于記分牌寄存器內容的指令,直至記分牌指示該寄存器可用為止。這種方法被稱為“硬件”聯(lián)鎖,這是因為這種聯(lián)鎖純粹通過記分牌的檢查、經由處理器中的硬件而被調用。這種聯(lián)鎖生成“阻塞”,它們阻礙了對于數據依賴指令的執(zhí)行(從而阻塞了流水線),直至寄存器可用為止。
另外,還可將NOP(空操作操作碼)插入編碼中,以在需要時延遲相應的流水線階段。這后一種方法被稱為“軟件”聯(lián)鎖,具有加大編碼長度及程序——使用了要求聯(lián)鎖指令的程序——復雜性的缺點。就其編碼結構而言,大量使用了軟件聯(lián)鎖的設計同樣往往不能充分優(yōu)化。
在處理器設計中另一個重要的考慮是程序轉移或“跳轉”。所有的處理器都支持某種類型的轉移指令。簡而言之,轉移指的是程序流被中斷或改變的情況。其它的操作——例如循環(huán)設置和子例程調用指令——也以類似方式中斷或改變程序流。“跳轉延遲時隙”一詞經常用于表示在一條流水線中,處于解碼中的轉移——或稱跳轉——之后的時隙。當等待轉移/裝入指令完成時,執(zhí)行在轉移(或裝入)之后的指令。轉移可為有條件的(亦即基于一個或更多的參數的真或數值)或無條件的。還可為絕對的(例如基于絕對內存地址),或是相對的(例如基于相對地址以及不依賴于任一特定的內存地址)。
轉移對流水線系統(tǒng)可具有深遠影響。在一個轉移指令被插入并由處理器的指令解碼階段進行解碼(指示該處理器必須開始執(zhí)行其它的存取)前,在該指令序列中的下一個指令字即已被取出并插入這一流水線中。對于這一問題的一個解答即為清除所取出的指令字并暫?!蚍Q阻塞——進一步的取操作,直至轉移指令被執(zhí)行完畢,如圖2所示。但這一方法由于在若干指令周期內執(zhí)行轉移指令的需要,而通常相等于在處理器設計中所使用的流水線深度。這種結果對于處理器速度及效率是有害的,因為在這一期間處理器不能進行其它操作。
此外,還可使用延遲轉移方法。這一方法中,當一個轉移指令到達解碼階段時,流水線并不進行清除,而一般是在該轉移被執(zhí)行之前,執(zhí)行出現于流水線稍前階段的后續(xù)指令。因此當轉移指令被解碼時,該轉移即表現得是以執(zhí)行流水線中所有后續(xù)指令所需的指令周期的數目而延遲。轉移方法與上述的多周期轉移相比,提高了流水線效率,然而也增加了基本編碼的復雜性(還減少了程序員的理解)。
在原有技術中已提出了各種各樣的用于數字處理器內流水線控制的方法及裝置。例如專利號為European Patent(Application)No.0352103、轉讓給Digital Equipment Corporation、申請于1989年7月20日的專利中所描述的,該專利技術特別描述了用于在一個5段流水線化的設備中“氣泡”壓縮的一種裝置及方法,該設備包括執(zhí)行單元,微定序器,存儲管理單元,總線接口單元。這一體系結構在流水線鎖存器內通過過重標志來識別氣泡;這個氣泡生成及識別過程進行于6個獨立的周期上;見該專利文件的表1。類似地,在這個DEC發(fā)明中的氣泡壓縮進行于多個(5個)周期上。
專利號European Patent(Application)No.0649085、轉讓給CyrixCorporation、申請于1994年10月17日的專利中,特別描述了一種用于流水線控制——涉及在一個多流水線(例如X和Y)結構體系中的流水線“滑動”及“沖洗”——的方法及裝置。這個Cyrix發(fā)明進一步利用了“例外”,該例外生成于一個指令由于錯誤條件而不能完成、并且不應被移出其當前階段的情況。這類指令被從流水線“沖洗”掉?!盎瑒印碑a生于在后續(xù)階段的一個指令為一個先前階段中的指令所改寫的情況。
還請參見專利號U.S Patent 5,809,320、申請于1998年9月15日、轉讓給Digital Equipment Corporation的專利,該專利公布了用于流水線處理的替代方法,該流水線阻塞于流水線預計密集流動中的特定階段。當一個上游階段被阻塞時插入一個空操作(NOP),從而允許連續(xù)的下游處理。
但上述方法或裝置對于單流水線RISC處理器應用均非最佳,上述方法或裝置中每個都(i)過于復雜并/或要求實際上額外的邏輯、機器周期和/或其它功能以取得所需的流水線“氣泡”生成或氣泡壓縮(滑動)性能,(ii)不提供當前氣泡的類型評估,(iii)不提供評估是否在壓縮期間被改寫的氣泡能夠在其被改寫前得以完成的能力,或者(iv)不提供靈活性以使程序員用多種方法來實現上述類型的NOP類功能。
而且,就阻塞而言——這些阻塞由設置標志指令的存在所引發(fā)、產生于流水線中轉移/跳轉指令之前,所有這類流水線氣泡信息或產生于流水線內的壓縮還必須與設置標志和轉移/跳轉指令之間的聯(lián)鎖兼容。但對于設置標志和轉移/跳轉指令聯(lián)鎖,原有技術方法一般不易兼容——無論是對氣泡生成、還是對壓縮(或者二者都包括)。舉例來說,請參見研究報告“Condition Register Coherency Lookahead”,Industrial Opportunities,Ltd.,no.348,1993年4月,作為原有技術關于設置標志和轉移/跳轉指令聯(lián)鎖的一般性代表。
基于上述,處理器設計員及程序員必須與非聯(lián)鎖體系結構相對,仔細權衡相應于利用硬件或軟件聯(lián)鎖的折衷方案。而且,必須考慮在具有選定聯(lián)鎖模式的指令集內,轉移指令(以及延遲或多周期轉移)的交互作用。
對流水線及聯(lián)鎖,需要有一種改進方法,該方法既優(yōu)化了處理器流水線性能,而同時又為程序員提供了附加的編碼靈活性。而且,隨更多的流水線階段(甚至于多條多階段流水線)添加進處理器設計中,在該處理器內改進流水線性能及編碼優(yōu)化的益處可成倍增加。另外,以某種特定方式、方便地綜合這些經過改進的流水線處理器設計以及使用現有綜合工具的能力,對于設計員和程序員也具有明顯效益。
發(fā)明內容
本發(fā)明通過提供經過改進的、用于在流水線化的處理器體系結構中執(zhí)行指令的方法和裝置,而滿足了上述這些要求。
于本發(fā)明第一方面,公布了一種經過改進的、控制處理器內一條或一條以上流水線的操作的方法。在一個實施例中,公布了一種流水線分段法(“撕裂”),其中(i)先于一個被阻塞階段的階段中,指令也被阻塞,(ii)被阻塞指令的后續(xù)階段的指令允許完成。從而有目的地在流水線中生成了間斷或稱“撕裂”。將空時隙(或NOP)插入流水線的后續(xù)階段,以阻礙當前在被撕裂階段中的被執(zhí)行指令受到多次執(zhí)行。類似地,公布了一種方法,該方法允許指令——其它情況下這些指令會在流水線中稍前階段被阻塞——于稍后阻塞的階段被再裝配,從而有效地修復了任何撕裂或存在的流水線間斷。
于本發(fā)明第二方面,公布了一種經過改進的處理器結構體系,該處理器結構體系使用上述的流水線撕裂及抓起方法。在一個示范性實施例中,該處理器包括一個精簡指令集計算機(RISC),該計算機具有一條三階段流水線——包括取指令、解碼及執(zhí)行階段,這些階段部分地由上述的流水線撕裂/抓起模式所控制。還公布了綜合的被用來實現這些模式的門邏輯,門邏輯既包括受約束的也包括無約束的。其中上述處理器在設計期間是用戶可定制的和可擴展的,包含具有一條多階段指令流水線的處理器核心,該流水線具有至少第一、第二和第三階段,所述核心適配于解碼及執(zhí)行一個包括多個指令字的指令集;一個在所述處理器核心與一個信息存儲設備之間的數據接口;以及一個包括多個指令字的指令集,所述指令字包括一個或多個用戶選定的擴展指令,所述處理器與所述指令集進一步適配于(i)通過與所述流水線相關的邏輯,檢測出現于所述流水線的所述第三階段的一個被阻塞指令;(ii)通過與所述流水線相關的邏輯,檢測在所述第三階段與出現于所述流水線的所述第一階段的一個指令之間的一個指令;(iii)利用流水線邏輯,確定在所述第三和第一階段之間的所述指令在下一周期期間完成處理的能力;和(iv)基于所述確定,處理出現于所述第一階段的所述指令而同時將所述第三階段保持為阻塞;其中所述被阻塞指令和所述另一指令中,至少其中之一包括擴展指令。因此,可針對所需特性使設計得到優(yōu)化。
于本發(fā)明第三方面,公布了一種用于設計經過改進的處理器結構體系的方法和裝置,該處理器結構體系使用上述的流水線撕裂及抓起方法。所述設計方法包括接收關于處理器的設計配置的用戶輸入,所述輸入的至少一部分與一個擴展指令有關;識別在生成所述設計時使用的至少一個技術描述;和基于至少部分所述用戶輸入和所述至少一個識別的描述,生成所述處理器的至少一個定制的描述語言模型,所述模型具有所述擴展指令作為所述指令集的一部分。所述設計裝置包括適合運行計算機程序的計算機系統(tǒng);和至少一個實現所述設計方法的計算機程序。
圖1為一種使用“分段的”運算單元的典型原有技術處理器結構體系框圖。
圖2圖解說明了一個原有技術四階段流水線處理器的操作,該處理器正進行一個多周期轉移操作。
圖3為一個流水線流程圖,說明在一個相應于本發(fā)明的多階段流水線中“撕裂”的概念。
圖4為一個邏輯流程圖,說明根據本發(fā)明、使用“撕裂”以控制一條流水線的一般化方法。
圖5為一個流水線流程圖,說明在一個相應于本發(fā)明的多階段流水線中“抓起”的概念。
圖6為一個邏輯流程圖,說明根據本發(fā)明、使用“抓起”以控制一條流水線的概括方法。
圖7為一個邏輯流程圖,說明了根據本發(fā)明、對包括了流水線撕裂/抓起的處理器邏輯加以綜合的概括方法。
圖8a-8b為示意圖,說明一個實現本發(fā)明流水線“撕裂”功能的門邏輯的示范性實施例(分別為無約束的以及受約束的),用圖7的方法加以綜合。
圖8c-8d為示意圖,說明一個實現本發(fā)明流水線“抓起”功能的門邏輯的示范性實施例(分別為無約束的以及受約束的),用圖7的方法進行綜合。
圖9為包括了相應于本發(fā)明流水線撕裂/抓起模式的處理器設計的框圖。
圖10為一個計算設備的功能區(qū)塊示意圖,該計算設備使用了包括圖7方法的一個計算機程序以對一個流水線化的處理器設計進行綜合。
具體實施例方式
現對附圖進行編號,全部附圖中同樣的編號指同樣的部分。
在此所用的“處理器”一詞意為任何集成電路或其它能夠根據至少一個指令字完成一次操作的電子器件,包括——但不限于——諸如本申請受讓人所生產的ARC用戶配置計算機這樣的精簡指令集計算機(RISC)處理器,中央處理器(CPU),以及數字信號處理器(DSP)。
另外,本領域普通技術人員會認識到,此處所用的“階段”一詞指的是流水線處理器中各個連續(xù)階段,即階段1指的是第一流水線階段,階段2指的是第二流水線階段,等等。盡管以下討論就一個三階段流水線(即取指令、解碼及執(zhí)行階段)而進行,然而應認識到,此處所公布的方法和裝置可廣泛應用于具有一條或一條以上有著多于或少于三階段的流水線的處理器結構體系。
還應認識到,盡管以下討論就VHSIC硬件描述語言(VHDL)而進行,然而還可使用其它如Verilog這樣的硬件描述語言,同樣成功地描述本發(fā)明的各個實施例。而且,盡管使用了一個示范性的Synopsy綜合引擎——如Design Compiler 1999.05(DC99)——以對此處提出的各個實施例進行綜合,但也可使用其它綜合引擎——如可從Cadence Design Systems,Inc.購到的Buildgates 。“IEEE標準1076.3-1997”,IEEE Standard VHDL Synthesis Packages規(guī)定了一種工業(yè)接受的語言,用于規(guī)定硬件定義語言基的設計及綜合能力——一個本領域的普通技術人員也許希望能對此加以使用。
最后,應認識到,盡管以下描述說明了邏輯——該邏輯由本申請受讓人使用上述綜合引擎及VHSIC硬件描述語言進行了綜合——的特定實施例,這類實施例在某些方面受到約束,然而這些實施例對于本發(fā)明的設計過程來說僅僅為示范性的及說明性的。
流水線分段法(“撕裂”)本發(fā)明的體系結構包括一條大體上自由流動的流水線。如果在這條流水線中的一個階段被阻塞,則以前階段也被阻塞——如果它們包含指令的話。但盡管以前階段阻塞,使流水線中稍后階段(即“下游”)得以繼續(xù)——如果未另外施加聯(lián)鎖的話——仍有一些優(yōu)點。這些優(yōu)點包括——除其它優(yōu)點之外——(i)由此而得以在流水線內繼續(xù)的某些指令處理導致了與“阻塞”整條流水線相比,更好的處理性能;(ii)連續(xù)處理位于流水線內稍后階段的設置標志指令的能力,由此而確保了在跳轉或轉移指令——這些指令的執(zhí)行會受標志狀態(tài)的影響——執(zhí)行之前設置標志,(iii)使記分牌裝入指令得以在流水線的一個稍后階段向存儲器發(fā)出請求,而依賴于這一裝入的指令則被保持于流水線的某個稍前階段。這一裝入必須被允許發(fā)出,否則即會引發(fā)死鎖狀態(tài)。
提請注意,對應于設置標志指令的連續(xù)處理,本申請人與本申請一道同時辦理的、標題為“用于流水線化處理器中的跳轉控制的方法及裝置”的美國專利申請中,公布了一種方法及裝置,用于以后續(xù)的跳轉/轉移指令而對設置標志指令進行聯(lián)鎖,這些跳轉/轉移指令會受設置標志指令所作設置標志的影響。
作為上述方法的一個示例,考慮一個具有三階段流水線(取出,解碼,執(zhí)行)的處理器,其中一個指令被阻塞于階段2,但在階段3的指令被允許從稍前階段“撕裂開”而繼續(xù)其向下通過流水線其余階段的行程。圖3圖解說明了這一原理(假定未施加聯(lián)鎖)。
現參見圖4,描述使用本發(fā)明流水線撕裂概念以控制一條多階段流水線的方法。方法400的第一個步驟402包括生成一個指令集,該指令集包括多個要在處理器上運行的指令字。這一指令集通常儲存在一個其類型在本領域中廣為人知的芯片上程序存儲設備(如一個程序RAM或ROM存儲器)中,雖然也可使用其它類型的設備,包括芯片外存儲器。指令集自身的生成同樣在本領域中廣為人知,只是在范圍上將其加以改進,包括了流水線撕裂功能,下面會更詳細地描述這一改進。
以下在步驟404,指令集(程序)由——特別是——程序計數器(PC)以指定順序從存儲設備依次取出,并運行于處理器上,所取出的指令在流水線的各個階段順序得到處理。請注意,在一個RISC處理器的上下文中,僅有裝入/儲存指令可訪問程序存儲空間,因此,在這樣的處理器中可使用多個中間寄存器來物理地接收及保持取自程序存儲器的指令信息。在處理器內的這樣一種裝入/儲存體系結構以及寄存器結構的使用在本領域中是眾所周知的,故不作進一步描述。
在步驟406,在流水線一個階段中的阻塞條件由邏輯塊取出,這些邏輯塊將信號組合以確定是否發(fā)生了沖突,這種沖突通常是為了訪問某個數據值或其它資源。此步驟的一個例子是這種條件的檢測正為某個指令寄存器讀取的一個寄存器被標記為“上了記分牌”,意為處理器必須等待,直至該寄存器為一個新值所更新為止。另一個例子是在一個多周期操作(如一個移位及加乘)進行時某個狀態(tài)機生成了阻塞周期。
在步驟408,流水線N+1階段(這里N=經步驟406調用了阻塞的階段的階段號)中有效指令的存在受到檢驗。在這里上下文中,一個“有效指令”指一個未由于任何原因而被標記為“無效”(步驟410)、而且已在先前(N)階段成功地完成了處理(步驟412)的指令。例如,在一個相應于本申請人的ARC Core的實施例中,“p3iv”信號(即“階段3指令有效”)即用于表示流水線的階段3包含一個有效指令。階段3中的指令由于若干原因而可能是無效的,包括1.當指令移進階段2時該指令被標記為無效(即p2iv=‘0’),并因此而在其移進階段3時繼續(xù)為無效;2.在階段3中的指令已在一個先前周期由流水線撕裂邏輯標記為無效,但隨后為一個從階段3移進階段2的指令所替換。
請注意,從步驟410得出的“停止”條件來自于條件“無效=是”,這是因為僅當階段2和階段3中同時出現有效指令時才會發(fā)生撕裂。
注意這種情況出現于階段2的指令在步驟412中被確定為已不能完成處理(上面第二條),而在階段3的指令能夠完成處理,必須允許在階段3的指令脫離流水線(或移到下一階段)并將階段3標記為正處于無效,以填補每個步驟414的間隔。另一種方法是將一個NOP或其它空指令插進階段3,并將階段3標記為有效。如果未插入這一空白或將該階段標記為無效,則指令——該指令在階段2不能完成處理時,即于階段3處理——即會在下一個指令周期被再次執(zhí)行,而這是所不希望的。
請進一步注意,對本申請人ARC Core的相應于“v6”實施例的聯(lián)鎖而言——對此詳細描述于本申請人與本申請一道共同待審的、標題為“用于流水線化處理器中的跳轉控制的方法及裝置”的美國專利申請中,如果出現一個跳轉指令而且階段3包含一個設置標志指令,則流水線的階段2即會阻塞。所以需要本發(fā)明的流水線撕裂功能以用于v6跳轉聯(lián)鎖。
最后,在步驟418,出現于階段3(以及一條具有5個或更多階段的流水線中的后續(xù)階段)的有效指令依下一時間周期而被執(zhí)行,同時保持出現于階段2、阻塞于該階段的指令。請注意依后續(xù)時鐘周期,會出現對階段2中被阻塞指令的處理,這有賴于引起阻塞的阻塞/聯(lián)鎖信號的狀態(tài)。一旦該阻塞/聯(lián)鎖信號失效,則該階段中被阻塞指令的處理即會在下一指令周期的前沿開始。
以下摘自本申請附錄I的示范性代碼用于與本申請人ARC Core(三階段流水線變體)結合,以實現前述的“撕裂”功能n_p3iv<=ip3iv WHEN ien3=‘0’ELSE‘0’WHEN ien2=‘0’AND ien3=‘1’ELSEip2iv;p3ivreg;PROCESS(ck,clr)BEGINIF clr=‘1’THENip3iv<=‘0’;ELSIF(ck‘EVENTAND ck=‘1’)THENip3iv<=n_p3iv;END IF;END PROCESS;不過要認識到,不同于此處所提出的編碼模式——無論用于同樣的還是其它的處理器上——也可用于實現本發(fā)明的流水線撕裂功能。
阻塞時流水線再裝配(“抓起”)在上述的流水線撕裂概念之外,本發(fā)明還以機制處理相反情況;即當各階段之間出現空時隙或空白時,允許流水線的稍前階段繼續(xù)處理或“抓起”到稍后階段,否則流水線即被“撕裂”。這一功能也被稱為“流水線轉換啟動”。
作為上述概念的一個示例,請考慮前述的三階段流水線的情況,其中一個指令被阻塞于階段3,階段2為空或包含一個注銷的指令/長立即字(這里以后稱之為“未用時隙”)。應用本發(fā)明的抓起功能,通過使階段1指令得以繼續(xù)處理、直至完成——完成時該指令即進入階段2,一個新指令進入階段1——而允許階段1依時鐘脈沖邊沿被抓起到階段2。應用這種處理,取消了被阻塞階段3與階段1之間的任何空時隙或空白。圖5圖解說明了這一概念。
參見圖6,描述了利用本發(fā)明的“抓起”技術而控制一條多階段處理器流水線的方法。在該方法600的第一個步驟602,確定在某個第一階段(所示例中的階段2)上的指令的有效性。在流水線抓起上下文中,一個有效指令簡單地規(guī)定為當其進入其當前階段(所示例中的階段2)時、未被標記為無效的指令。如果指令經步驟602無效,則流水線轉換啟動信號即經步驟602被置于“真”,如下面所更詳細討論的那樣。所描述的這個流水線轉換啟動信號控制指令字從階段1進入階段2的轉換。如果階段3中的指令不能完成處理,這一事件中即會出現流水線“抓起”。階段2中的無效時隙即會為來自階段1的前行指令所替換,而階段3上的指令即會保持于階段3。
如果階段2中的指令經步驟602為有效,在階段2中完成處理的該有效指令的能力即隨后在步驟604進行確定。如果該有效指令不能完成處理并在下一個周期移出階段2,轉換啟動信號即經步驟606被置于“偽”,從而使流水線轉換失效。這就防止了有效的、待處理的指令為來自先前階段的前行指令所替代(圖1)。如果階段2中的該有效指令能夠完成處理,其次即確定是否在階段2中有一個中斷偽指令正在等待一個未決取指令在步驟608中完成處理。如確實如此,則轉換啟動信號即再次被置為“偽”,從而再次阻礙了在階段2中的這個有效指令被替換,這是因為該有效(但未完成)指令不會在下一周期前進到階段3。如果階段2中的該有效指令能夠在下一周期完成處理,而且不等待未決取指令,則轉換啟動信號即經步驟610被置為“真”,從而允許階段1指令前行至階段2——隨之以階段2中的指令同時移進階段3。
所以根據上述邏輯,當處理器運行時,流水線轉換啟動信號總被置為“真”,除非當(i)階段2中的一個有效指令因某種原因而不能完成;或者(ii)假設在階段2中有一個中斷正在等待一個未決取指令完成。請注意,如果階段2中的一個無效指令被保持(特別是由于階段3上的一次阻塞),則轉換啟動信號即即被置為“真”并允許階段1中的指令移進階段2。因此,這個無效階段2指令將為該有效階段1指令所替換。
本發(fā)明的“抓起”或流水線轉換啟動信號(en1)可以——在一個實施例中——利用本處下列的示范性代碼(摘自附錄II)而生成ien1<=‘0’WHEN en=‘0’OR(p2int=‘1’AND ien2=‘0’)OR(p2int=‘1’AND ien2=‘0’)ELSE‘1’;還請注意,本發(fā)明的流水線撕裂及抓起方法可與流水線控制及聯(lián)鎖的其它方法相結合(或者單獨地或者共同地),那些方法尤其包括了在本申請人與本申請一道同時辦理的、標題為“用于流水線化處理器中的跳轉控制的方法及裝置”的美國專利申請中所公布的方法,以及在本申請人與本申請一道同時辦理的、標題為“用于流水線化處理器中的跳轉延遲時隙控制的方法及裝置”的美國專利申請中所公布的方法,該兩申請與此一道提交,二者均包括進來、在此全部地引為參考資料。此外,各種寄存器編碼模式——如“松散”寄存器編碼,這種編碼描述于本申請人與本申請一道同時辦理的、標題為“用于在流水線化處理器內松散寄存器編碼的方法及裝置”的美國專利申請,該申請與此一道提交,并包括進來、在此全部地引為參考資料——可與這里所描述的流水線撕裂以及/或者抓起發(fā)明結合使用。
綜合方法現在參見圖7,描述結合前述的流水線撕裂及/或抓起功能、對邏輯進行綜合的方法700。這一綜合集成電路邏輯的一般化方法具有一個用戶定制的(即“軟的”)指令集,公布于本申請人與本申請一道辦理、在1999年10月14日呈交、申請?zhí)枮閁.S.Patent ApplicationSerial No.09/418,663(現在是美國6862563號專利)、標題為“用于管理半導體設計的結構以及功能的方法及裝置”的專利申請中,這里將該專利申請全部地包括進來、引為參考資料。
雖然以下描述就運行于計算機或其它類似處理裝置上的算法或計算機程序而進行,要認識到其它硬件環(huán)境(包括微型計算機,工作站,聯(lián)網的計算機,“超級計算機”,以及大型計算機)也可用于實行本方法。另外,計算機程序的一部分或更多部分還可實施于相對于軟件的硬件或固件上——如果愿意的話,這類備選實施例完全在計算機技術人員的技能范圍內。
開始,在第一個步驟702,依照設計結構而取得用戶輸入。具體地說,由用戶選擇為這一設計所需的模塊或功能,并且隨需要而加、減或者生成與設計有關的指令。例如,在信號處理應用中,令CPU包括一個單一的“乘和累加”(MAC)指令通常是有益的。在本發(fā)明中,對綜合設計的指令集進行了改動,使之于其中包括了前述的流水線撕裂及/或抓起模式(或另一個可比的流水線控制結構體系)。每個VHDL文件的技術庫位置也由用戶在步驟702加以規(guī)定。在本發(fā)明中技術庫文件儲存所有與為綜合處理所必需的單元相關的信息,包括——舉例來說——邏輯功能。輸入/輸出計時,以及所有相關約束。在本發(fā)明中,每個用戶都可規(guī)定他/她自己的庫名及位置,從而增加了更多的靈活性。
其次在步驟703,用戶基于步驟702中所規(guī)定的用戶輸入及已有功能庫而創(chuàng)建定制的HDL功能塊。
在步驟704,基于用戶輸入及上述庫文件而確定設計層次結構。層次結構文件、新的庫文件以及程序描述文件順序地基于該設計層次結構而生成。這里“程序描述文件”一詞用于指常用的UNIX程序描述文件功能或為計算機編程技術人員所熟知的計算機系統(tǒng)的類似功能。該程序描述文件功能使其它程序或算法駐留于計算機系統(tǒng)中,依指定順序被執(zhí)行。此外,它還進一步指定為成功運行被指定程序所必需的數據文件和其它資料的名字和位置。但請注意,這里所公布的本發(fā)明可利用不同于“程序描述文件”類型的文件結構來產生所需功能。
在本發(fā)明程序描述文件生成進程的一個實施例中,經由顯示器提示而互動地請求用戶輸入關于所要設計的信息,如“建立”的類型(例如總設備或系統(tǒng)結構),外部存儲器系統(tǒng)數據總線,不同的擴展類型,高速緩存類型/大小,等等??墒褂迷S多其它的輸入信息結構及信息源,然而仍與本發(fā)明相一致。
在步驟706,用戶運行在步驟704生成的程序描述文件以生成結構HDL。這一結構HDL將設計中離散的功能塊結合在一起,以作出一個完整的設計。
然后在步驟708,運行在步驟706所生成的稿本,為仿真程序而生成一個程序描述文件。用戶還運行該稿本以在步驟708生成一個綜合稿本。
這時在程序中作出決定,是綜合還是仿真該設計(步驟710)。如選擇仿真,用戶就使用在步驟712生成的設計及仿真程序描述文件來進行仿真。另外,如選擇綜合,用戶就使用綜合稿本及在步驟中所生成的設計進行綜合。完成了綜合/仿真稿本后,在步驟716評估設計是否恰當。例如,一個綜合引擎可生成該設計的一個特定物理布局,它滿足總設計過程的性能條件但不滿足芯片大小要求。在此情況下,設計員即會對控制文件、庫或其它能影響芯片大小的成分進行改動。這個設計信息的結果集合隨后即被用于再次運行綜合稿本。
如果生成的設計是可接受的,則這一設計過程即完成。如果生成的設計是不可接受的,則開始于步驟702的過程各步驟過程重新執(zhí)行,直至得到一個可接受的設計。以這種方式,方法700為可迭代的。
現在參見圖8a-8b,描述了示范性門邏輯的一個實施例(包括參照附錄工的VHDL的“p3iv”信號),該門邏輯用上述圖7的SynopsyDesign Compiler及方法進行了綜合。注意,在用于生成圖8a邏輯的綜合過程進行期間,規(guī)定了一個LSI 10k 1.0μm,工藝,并且未對設計施加約束。對圖8b應用了同樣的過程;但在從len3到時鐘的通路上約束了設計。附錄III包括了用于生成圖8a-8b的示范性門邏輯的編碼。
參見圖8c-8d,描述了示范性門邏輯的一個實施例(包括參照附錄II的VHDL的“ien1”信號),該門邏輯用圖7的方法進行了綜合。注意,在用于生成圖8c邏輯的綜合過程進行期間,規(guī)定了一個LSI 10k1.0μm工藝,并且未對設計施加約束。對圖8d應用了同樣的過程;但約束了設計以防止使用AND-OR門。附錄IV包含了用于生成圖8c-8d的示范性門邏輯的編碼。
圖9表示了一個示范性流水線化的處理器,該處理器用1.0μm工藝生產,并包括了這里在前面所描述的流水線撕裂及抓起模式。如圖9所示,處理器900為一個ARC微處理器類的CPU器件,它尤其是有一個處理器核心902,芯片上存儲器904,以及一個外部接口906。該器件以定制的VHDL設計生產,而該設計用本發(fā)明的方法900取得,隨后將其綜合為一個邏輯級表達式,然后簡化為一個使用編譯、布局和生產技術——這些技術在半導體技術中廣為人知——的物理器件。
本領域技術人員會認識到,圖9的處理器可包含任何普通可得的外圍設備,例如串行通信裝置,并行端口,計時器,計數器,高電流驅動器,模數(A/D)轉換器,數模(D/A)轉換器,中斷處理器,LCD驅動器,存儲器以及其它的類似裝置。另外,處理器還可包括用戶專用或應用專用的電路元件。本發(fā)明并不受限于外圍設備及其它會使用本方法及裝置加以組合的電路元件的類型,數量,或復雜性。反之,任何由現有半導體工藝的物理能力所施加的限制都會隨時間而改進。因此可預期,隨半導體工藝的進步,可能應用本發(fā)明的集成的復雜性及質量將進一步提高。
還請注意,許多IC設計目前使用微處理器核心或DSP核心。但DSP僅會被要求用于有限數量的DSP功能(如有限脈沖響應分析或者話音編碼),或用于IC的快速DMA體系結構。這里所公布的本發(fā)明可支持許多DSP指令功能,并且其快速的本地RAM系統(tǒng)提供了對數據的立即存取。通過將公布于此的方法應用于IC的CPU及DSP功能二者,可節(jié)約可觀的成本。
另外,請注意這里如前所述的方法(及相應的計算機程序)可容易地以相對簡單的再綜合適應于更新的生產技術,例如0.18或0.1微米工藝——而非使用“硬的”原有微技術系統(tǒng)時,為了適應這類技術通常要采用冗長昂貴的處理。
現在參見圖10,對能夠相應公布于此的撕裂/抓起信號、綜合邏輯的計算設備的一個實施例加以描述。該計算設備1000包括一個母板1001,該母板有一個中央處理器(CPU)1002,隨機存儲存儲器(RAM)1004,以及存儲器控制器1005。還提供了一個存儲設備1006(如硬盤驅動器或CD-ROM),輸入設備1007(如鍵盤或鼠標),和顯示設備1008(如CRT、等離子體或TFT顯示器),以及必要的總線以支持主機和外圍設備部件的運行。前述的VHDL描述及綜合引擎以一個計算機程序目標代碼表達式的形式儲存在RAM 1004和/或存儲設備1006,以在設計綜合期間由CPU 1002使用,后者在計算技術中為人所熟知。用戶(未示)在系統(tǒng)運行期間,通過由程序顯示器及輸入設備1007、將設計結構規(guī)范輸入進綜合程序而綜合邏輯設計。由程序所生成的經過綜合的設計儲存于存儲設備1006中以便以后檢索,顯示于圖形顯示設備1008,或經由一個串行或并行接口1012輸出到一臺外部設備,如打印機,數據存儲設備,其它外圍設備——如果需要的話。
雖然以上詳述已表明、描述、并指出了本發(fā)明應用到各個實施例上的新穎特性,然而應認識到本領域技術人員可對所表述的設備或過程的形式及細節(jié)作出各種各樣的省略、替換或改變而不偏離本發(fā)明。本描述絕不意味著限制、而只應將其作為本發(fā)明一般原理的說明。本發(fā)明的范圍應參照權利要求書而確定。
附錄I用于為流水線撕裂而生成綜合邏輯的VHDL<pre listing-type="program-listing">library ieee; use ieee.std_logie_1164.all; entity v007a is port(ck in std_ulogic; clr in std_ulogic; ien2 in std_ulogic; ien3 in std_ulogic; ip2iv in std_ulogic; p3iv out std_ulogic); end v007a; architecture synthesis of v007a is signal n_p3iv std_ulogic; signal ip3iv std_ulogic; begin n_p3iv<=ip3iv WHEN ien3=‘0’ ELSE ′0′WHEN ien2=′0′AND ien3=′1′ ELSE ip2iv; p3ivregPROCESS(ck,clr) BEGIN IF clr=′1′THEN ip3iv<=′0′; ELSIF(ck′EVENT AND ck=′1′)THEN ip3iv<=n_p3iv; END IF; END PROCESS; p3iv<=ip3iv; end synthesis;</pre>
附錄II用于為流水線抓起而生成綜合邏輯的VHDL<pre listing-type="program-listing">library ieee; use ieee.std_logic_1164.all; entity v007b is port(enin std_ulogic; p2int in std_ulogic; ien2 in std_ulogic; ip2iv in std_ulogic; ien1 out std_ulogic); end v007b; architecture synthesis of v007b is begin ien1<=′0′WHEN en=′0′ OR(p2int=′1′AND ien2=′0′) OR(ip2iv=′1′AND ien2=′0′)ELSE ′1′; end synthesis;</pre>
附錄III用于為撕裂邏輯而生成樣本示意圖的綜合稿本<pre listing-type="program-listing">/*Analyze VHDL*/ analyze-library user-format vhdl vhdl/v007a.vhdl /*Unconstrained logic*/ elaborate-library user v007a compile write-format db-hierarchy-output db/v007a_uc.db create_schematic-schematic_view plot-output v007a_uc.ps remove_design-all /*Constrained logic*/ elaborate-library user v007a create_clock-name″ck″-period 10-waveform{05}ck set_input_delay-clock ck 8 ien 3 compile write-format db-hierarchy-output db/v007a_c.db create_schematic-schematic_view plot-output v007a_c.ps</pre>
附錄IV用于為抓起邏輯而生成樣本示意圖的綜合稿本<pre listing-type="program-listing">/*Analyze VHDL*/ analyze-library user-format vhdl vhdl/v007b.vhdl /*Unconstrained logic*/ elaborate-library user v007b compile write-format db-hierarchy-output db/v007b_uc.db create_schematic-schematic_view plot-output v007b_uc.ps remove_design-all /*Constrained logic*/ elaborate-library user v007b set_max_area 0 set_dont_use find(cell,lsi_10k/AO*) compile-map_effort high write-format db-hierarchy-output db/v007b_c.db create_schematic-schematic_view plot-output v007b_c.ps</pre>
權利要求
1.一種設計用戶可定制的數字處理器的方法,所述處理器具有指令集和流水線,該流水線包括至少三個階段,所述方法包括接收關于所述處理器的設計配置的用戶輸入,至少一部分所述輸入與一個擴展指令有關;識別在生成所述設計時使用的至少一個技術描述;和基于至少部分所述用戶輸入和所述至少一個識別的描述,生成所述處理器的至少一個定制的描述語言模型,所述模型具有所述擴展指令作為所述指令集的一部分;其中所述流水線被配置以(i)檢測在所述流水線的所述至少三個階段中的第一階段阻塞的第一指令;(ii)檢測第二指令何時出現于所述流水線的所述至少三個階段中的第二階段,所述第二階段是所述第一階段的下游;和(iii)在所述第一階段被阻塞之后執(zhí)行所述第二指令。
2.如權利要求1的方法,其中所述擴展指令包括所述第一和第二指令中的一個。
3.如權利要求1的方法,其中所述至少三個階段包括至少取指令、解碼、執(zhí)行和寫回階段,所述至少三個階段中的所述第一階段包括所述指令解碼階段,且所述第二階段包括所述執(zhí)行階段。
4.如權利要求1的方法,進一步包括基于至少部分所述用戶輸入和所述至少一個識別的技術描述,生成至少一個定制的功能塊。
5.如權利要求1的方法,其中接收用戶輸入的動作包括接收用戶選擇的一個或多個所需的處理器配置參數,所述參數是從由(i)整體設備配置和(ii)高速緩存配置組成的組中選擇的。
6.如權利要求1的方法,其中所述至少一個技術描述包括一個或多個技術庫文件。
7.一種適合設計用戶可定制的數字處理器的裝置,所述處理器具有指令集和流水線,該流水線包括至少三個流水線階段,所述裝置包括適合運行計算機程序的計算機系統(tǒng);和至少一個計算機程序,其被配置以接收關于所述處理器的設計配置的用戶輸入,至少一部分所述輸入與一個擴展指令有關;識別在生成所述設計時使用的至少一個技術描述;和基于至少部分所述用戶輸入和所述至少一個識別的描述,生成所述處理器的至少一個定制的描述語言模型,所述模型具有所述擴展指令作為所述指令集的一部分;其中從所述模型生成的所述處理器被配置以(i)檢測在所述流水線的所述至少三個階段中的第一階段阻塞的第一指令;(ii)檢測第二指令何時出現于所述流水線的所述至少三個階段中的第二階段,所述第二階段是所述第一階段的下游;和(iii)在所述第一階段被阻塞之后執(zhí)行所述第二指令。
8.如權利要求7的裝置,其中所述擴展指令包括所述第一和第二指令中的一個。
9.一種設計用戶可定制的數字處理器的方法,所述處理器具有指令集和流水線,該流水線包括至少三個階段,所述方法包括接收關于所述處理器的設計配置的用戶輸入,至少一部分所述輸入與一個擴展指令有關;識別在生成所述設計時使用的至少一個技術描述;和基于至少部分所述用戶輸入和所述至少一個識別的描述,生成所述處理器的至少一個定制的描述語言模型,所述模型具有所述擴展指令作為所述指令集的一部分;其中所述流水線被配置用于(i)檢測在所述流水線的所述至少三個階段中的第一階段阻塞的第一指令;(ii)在所述第二階段檢測一個空的、停止的或者未用的時隙,所述第二階段是所述第一階段的上游;和(iii)至少部分基于所述空的、停止的或者未用時隙的所述檢測,處理在所述第三階段出現的指令,所述第三階段是所述第二階段的上游;和(iv)把在所述第三階段中的所述指令前移到所述流水線內的后續(xù)階段。
10.一種適合設計用戶可定制的數字處理器的裝置,所述處理器具有指令集和流水線,該流水線包括至少三個流水線階段,所述裝置包括適合運行計算機程序的計算機系統(tǒng);和至少一個計算機程序,其被配置以接收關于所述處理器的設計配置的用戶輸入,至少一部分所述輸入與一個擴展指令有關;識別在生成所述設計時使用的至少一個技術描述;和基于至少部分所述用戶輸入和所述至少一個識別的描述,生成所述處理器的至少一個定制的描述語言模型,所述模型具有所述擴展指令作為所述指令集的一部分;其中從所述模型生成的所述處理器被配置以(i)檢測在所述流水線的所述至少三個階段中的第一階段阻塞的第一指令;(ii)在所述第二階段檢測一個空的、停止的或者未用的時隙,所述第二階段是所述第一階段的上游;和(iii)至少部分基于所述空的、停止的或者未用時隙的所述檢測,處理在所述第三階段出現的指令,所述第三階段是所述第二階段的上游;和(iv)把在所述第三階段中的所述指令前移到所述流水線內的后續(xù)階段。
全文摘要
用于在流水線化的中央處理器(CPU)或用戶可定制的微處理器上執(zhí)行指令的改進的方法及裝置。在本發(fā)明第一方面,公布了一種在一個階段已被阻塞或中斷情況下控制流水線運行的改進方法。在一個實施例中,公布了一種流水線分段法(“撕裂”),其中該流水線在后面、未阻塞各階段仍被允許繼續(xù)下去而不顧稍前階段的阻塞。類似地,還公布了一種方法,其中允許出現于流水線中稍前階段的指令被再裝配(“抓起”)到稍后的阻塞階段。還公布了一種設計包括了上述分段法及再裝配方法的用戶可定制的處理器的方法,以及一種能夠實現所述設計方法的裝置。
文檔編號G06F9/32GK1716189SQ200510084318
公開日2006年1月4日 申請日期2000年5月12日 優(yōu)先權日1999年5月13日
發(fā)明者J·R·H·黑克威爾, J·桑德斯 申請人:Arc國際美國控股公司