專利名稱:用于流水線化處理器中跳轉(zhuǎn)控制的方法及裝置的制作方法
本專利申請(qǐng)要求下列申請(qǐng)以優(yōu)先權(quán)申請(qǐng)于1999年5月13日的美國(guó)臨時(shí)專利申請(qǐng)、申請(qǐng)?zhí)枮閁.S.Serial No.60/134,253、標(biāo)題為“Method And Apparatus For Synthesizing And Implementing IntergratedCircuit Designs”,和共同待審的申請(qǐng)于1999年10月14日、申請(qǐng)?zhí)枮閁.S.Serial No.09/418,663、標(biāo)題為“Method And Apparatus For ManagingThe Configuration And Functionality Of A Semiconductor Design”的專利申請(qǐng),該申請(qǐng)要求申請(qǐng)于1998年10月14日申請(qǐng)?zhí)枮閁.S.Serial No.60/102,271、并具有同樣標(biāo)題的的美國(guó)臨時(shí)專利申請(qǐng)的優(yōu)先權(quán)。
背景技術(shù):
1.發(fā)明領(lǐng)域本發(fā)明涉及集成電路設(shè)計(jì)領(lǐng)域,特別設(shè)計(jì)使用一種硬件描述語(yǔ)言(HDL)、以在流水線化的中央處理器(CPU)或用戶可定制的微處理器中執(zhí)行指令。
2.相關(guān)技術(shù)描述RISC(或稱精簡(jiǎn)指令集計(jì)算機(jī))處理器在計(jì)算技術(shù)中為人所熟知。RISC處理器通常具有利用大幅精簡(jiǎn)的——相比于非RISC(通常稱為“CISC”)處理器而言——指令集的基本特征。一般地,RISC處理器機(jī)器指令并非全部微編碼化,而是可直接執(zhí)行、無(wú)需解碼,從而在運(yùn)行速度上提供了明顯的高效率。而且這一“流線型的”指令處理能力在處理器的設(shè)計(jì)中又允許進(jìn)一步的簡(jiǎn)化(與非RISC裝置相比),從而提供了更小的硅片以及更低的制造成本。
RISC處理器通常還具有這樣的特征(i)裝入/儲(chǔ)存存儲(chǔ)器體系結(jié)構(gòu)(亦即僅裝入和儲(chǔ)存指令具有對(duì)存儲(chǔ)器的入口,其它指令則經(jīng)由處理器內(nèi)的內(nèi)部寄存器而進(jìn)行操作);(ii)處理器和編譯程序結(jié)合;(iii)流水線作業(yè)。
流水線作業(yè)是一種通過(guò)將處理器中的操作順序分成分立部分——一旦有可能這些分立部分即被高效地同時(shí)執(zhí)行——以提高處理器性能的技術(shù)。在典型的流水線化的處理器中,相應(yīng)于處理器算術(shù)運(yùn)算(如ADD,MULTIPLY,DIVIDE等等)的運(yùn)算單元通常被“分段”,從而在任一時(shí)鐘周期中,可令操作的一個(gè)特定部分在該單元的一個(gè)給定部分完成。
圖1表示一個(gè)具有這樣分段的運(yùn)算單元的典型處理器體系結(jié)構(gòu)。所以這些單元可在任一給定時(shí)鐘周期對(duì)不同的計(jì)算結(jié)果進(jìn)行運(yùn)算。例如在第一時(shí)鐘周期,兩個(gè)數(shù)A和B被饋送到乘法單元10并由該單元的第一部分12部分地加以處理。在第二時(shí)鐘周期,來(lái)自于A和B相乘的部分結(jié)果被傳送到第二部分14,而此時(shí)第一部分12接收兩個(gè)新數(shù)(比如C和D),開(kāi)始進(jìn)行處理。凈結(jié)果為初始的啟動(dòng)周期之后,每個(gè)時(shí)鐘周期都由運(yùn)算單元10完成一次乘法運(yùn)算。
流水線深度會(huì)依體系結(jié)構(gòu)而異。在這里上下文中,“深度”一詞意指出現(xiàn)于流水線中的分立階段的數(shù)目。總的來(lái)說(shuō),一條流水線的階段愈多,運(yùn)行程序愈快,但也會(huì)愈加難以編程——雖然對(duì)程序員來(lái)說(shuō)流水線作用顯而易見(jiàn)。大多數(shù)流水線化的處理器為三階段(取指令,解碼,執(zhí)行)或四階段(例如取指令,解碼,取操作數(shù),執(zhí)行或者還可為取指令,解碼/取操作數(shù),執(zhí)行,寫(xiě)回),不過(guò)也使用更多或更少的階段。
在開(kāi)發(fā)一個(gè)流水線化處理器的指令集時(shí),必須考慮到若干“冒險(xiǎn)”。例如,所謂“結(jié)構(gòu)”或“資源爭(zhēng)奪”冒險(xiǎn)起因于重疊指令爭(zhēng)奪同樣的資源(例如總線,寄存器,或其它功能單元),這些冒險(xiǎn)通常用一個(gè)或更多的流水線阻塞加以解決。所謂“數(shù)據(jù)”流水線冒險(xiǎn)發(fā)生于讀/寫(xiě)沖突的情況,這種沖突會(huì)改變存儲(chǔ)器或寄存器存取的順序?!翱刂啤泵半U(xiǎn)則一般由程序流中的轉(zhuǎn)移或類似變化所產(chǎn)生。
流水線化處理器通常需要聯(lián)鎖以解決許多這類冒險(xiǎn)。例如,考慮這種情況在一個(gè)稍前流水線階段中的一個(gè)后繼指令(n+1)需要來(lái)自于一個(gè)稍后階段的指令n的結(jié)果。對(duì)上述問(wèn)題的一個(gè)簡(jiǎn)單解答是以一個(gè)或一個(gè)以上的時(shí)鐘周期來(lái)延遲處于解碼階段中的操作數(shù)計(jì)算。然而這種延遲的一個(gè)結(jié)果,即為對(duì)處理器的一個(gè)給定指令的執(zhí)行時(shí)間部分地由流水線內(nèi)圍繞該指令的指令所決定。這就使對(duì)處理器的編碼優(yōu)化復(fù)雜化,因?yàn)槭钩绦騿T在編碼內(nèi)確定聯(lián)鎖情況通常是困難的。
可在處理器中用“記分牌”來(lái)實(shí)現(xiàn)聯(lián)鎖;在這種方法中,為每個(gè)處理器寄存器附加一位,用以作為寄存器內(nèi)容的指示符;具體地說(shuō),指示是否(i)寄存器內(nèi)容已被更新并因此而可以使用,或者(ii)內(nèi)容正在進(jìn)行由其它寄存器所寫(xiě)入這樣的改動(dòng)。在有些體系結(jié)構(gòu)中這一記分牌也用于生成聯(lián)鎖,這種聯(lián)鎖防止執(zhí)行要依賴于記分牌寄存器內(nèi)容的指令,直至記分牌指示該寄存器可用為止。這種方法被稱為“硬件”聯(lián)鎖,這是因?yàn)檫@種聯(lián)鎖純粹通過(guò)記分牌的檢查、經(jīng)由處理器中的硬件而被調(diào)用。這種聯(lián)鎖生成“阻塞”,它們阻礙了對(duì)于數(shù)據(jù)依賴指令的執(zhí)行(從而阻塞了流水線),直至寄存器可用為止。
另外,還可將NOP(空操作操作碼)插入編碼中,以在需要時(shí)延遲相應(yīng)的流水線階段。這后一種方法被稱為“軟件”聯(lián)鎖,具有加大編碼長(zhǎng)度及程序——使用了要求聯(lián)鎖指令的程序——復(fù)雜性的缺點(diǎn)。就其編碼結(jié)構(gòu)而言,大量使用了軟件聯(lián)鎖的設(shè)計(jì)同樣往往不能充分優(yōu)化。
在處理器設(shè)計(jì)中另一個(gè)重要的考慮是程序轉(zhuǎn)移或“跳轉(zhuǎn)”。所有的處理器都支持某種類型的轉(zhuǎn)移指令。簡(jiǎn)而言之,轉(zhuǎn)移指的是程序流被中斷或改變的情況。其它的操作——例如循環(huán)設(shè)置和子例程調(diào)用指令——地以類似方式中斷或改變程序流。“跳轉(zhuǎn)延遲時(shí)隙”一詞經(jīng)常用于表示在一條流水線中,處于解碼中的轉(zhuǎn)移——或稱跳轉(zhuǎn)——之后的時(shí)隙。當(dāng)?shù)却D(zhuǎn)移/裝入指令完成時(shí),執(zhí)行在轉(zhuǎn)移(或裝入)之后的指令。轉(zhuǎn)移可為有條件的(亦即基于一個(gè)或更多的參數(shù)的真或數(shù)值)或無(wú)條件的。還可為絕對(duì)的(例如基于絕對(duì)內(nèi)存地址),或是相對(duì)的(例如基于相對(duì)地址以及不依賴于任一特定的內(nèi)存地址)。
轉(zhuǎn)移會(huì)對(duì)流水線系統(tǒng)具有深遠(yuǎn)影響。在一個(gè)轉(zhuǎn)移指令被插入并由處理器的指令解碼階段進(jìn)行解碼(指示該處理器必須開(kāi)始執(zhí)行其它的存取)前,在該指令序列中的下一個(gè)指令字即已被取出并插入這一流水線中。對(duì)于這一問(wèn)題的一個(gè)解答即為清除所取出的指令字并暫?!蚍Q阻塞——進(jìn)一步的取操作,直至轉(zhuǎn)移指令被執(zhí)行完畢,如圖2所示。但這一方法由于在若干指令周期內(nèi)執(zhí)行轉(zhuǎn)移指令的需要,而通常相等于在處理器設(shè)計(jì)中所使用的流水線深度。這種結(jié)果對(duì)于處理器速度及效率是有害的,因?yàn)樵谶@一期間處理器不能進(jìn)行其它操作。
此外,還可使用延遲轉(zhuǎn)移方法。這一方法中,當(dāng)一個(gè)轉(zhuǎn)移指令到達(dá)解碼階段時(shí),流水線并不進(jìn)行清除,而一般是在該轉(zhuǎn)移被執(zhí)行之前,執(zhí)行出現(xiàn)于流水線稍早階段的后續(xù)指令。因此當(dāng)轉(zhuǎn)移指令被解碼時(shí),該轉(zhuǎn)移即表現(xiàn)得是以執(zhí)行流水線中所有后續(xù)指令所需的指令周期的數(shù)目而延遲。轉(zhuǎn)移方法與上述的多周期轉(zhuǎn)移相比,提高了流水線效率,然而也增加了基本編碼的復(fù)雜性(還減少了程序員的理解)。
基于上述,處理器設(shè)計(jì)員及程序員必須與非聯(lián)鎖體系結(jié)構(gòu)相對(duì),仔細(xì)權(quán)衡相應(yīng)于利用硬件或軟件聯(lián)鎖的折衷方案。而且,必須考慮在具有選定聯(lián)鎖模式的指令集內(nèi),轉(zhuǎn)移指令(以及延遲或多周期轉(zhuǎn)移)的交互作用。對(duì)流水線及聯(lián)鎖,需要有一種改進(jìn)方法,該方法既優(yōu)化了處理器流水線性能,而同時(shí)又為程序員提供了附加的編碼靈活性。而且,隨更多的流水線階段(甚至于多條多階段流水線)添加進(jìn)處理器設(shè)計(jì)中,在該處理器內(nèi)改進(jìn)流水線性能及編碼優(yōu)化的益處可成倍增加。另外,以某種特定方式、方便地綜合這些經(jīng)過(guò)改進(jìn)的流水線處理器設(shè)計(jì)以及使用現(xiàn)有綜合工具的能力,對(duì)于設(shè)計(jì)員和程序員也具有明顯效益。
發(fā)明概述本發(fā)明通過(guò)提供經(jīng)過(guò)改進(jìn)的、用于在流水線化的處理器體系結(jié)構(gòu)內(nèi)執(zhí)行指令的方法和裝置,而滿足了上述這些要求。
在本發(fā)明第一方面,公布了一種經(jīng)過(guò)改進(jìn)的、控制CPU跳轉(zhuǎn)的方法。在第一個(gè)實(shí)施例中,提供了一種流水線聯(lián)鎖模式,以此檢測(cè)一個(gè)設(shè)置轉(zhuǎn)移指令的指令與一個(gè)后續(xù)轉(zhuǎn)移之間的關(guān)系;防止這類指令——它們直接在預(yù)定增量?jī)?nèi)的轉(zhuǎn)移之前——影響轉(zhuǎn)移,所以允許將一個(gè)設(shè)置標(biāo)志指令調(diào)度到直接在該轉(zhuǎn)移之前的時(shí)隙內(nèi)??捎靡粋€(gè)空時(shí)隙(或NOP)占據(jù)在該轉(zhuǎn)移之前的時(shí)隙。在第二個(gè)實(shí)施例中,通過(guò)一個(gè)具有一種編碼結(jié)構(gòu)的模式而避免了這個(gè)NOP,該編碼結(jié)構(gòu)要求在流水線某個(gè)稍前階段的一個(gè)轉(zhuǎn)移被延遲,直至該設(shè)置標(biāo)志指令已被移到流水線的稍后階段、而且該標(biāo)志已被設(shè)置為止。
在本發(fā)明第二方面,公布了一種經(jīng)過(guò)改進(jìn)的綜合集成電路設(shè)計(jì)——在設(shè)計(jì)中采用了前述的跳轉(zhuǎn)延遲時(shí)隙方法——的方法。在一個(gè)示范性實(shí)施例中,這一方法包括了取得關(guān)于設(shè)計(jì)結(jié)構(gòu)的用戶輸入;基于該用戶輸入及現(xiàn)有功能庫(kù)而生成專用HDL功能區(qū)塊;基于該用戶輸入及庫(kù)而確定設(shè)計(jì)層次結(jié)構(gòu)并生成一個(gè)層次結(jié)構(gòu)文件、新庫(kù)文件、和程序描述文件(makefile);運(yùn)行程序描述文件以生成結(jié)構(gòu)HDL及稿本;運(yùn)行生成的稿本以為仿真程序及綜合稿本而生成一個(gè)程序描述文件;基于生成的設(shè)計(jì)及綜合稿本而綜合這一設(shè)計(jì)。
在本發(fā)明第三方面,公布了一種經(jīng)過(guò)改進(jìn)的計(jì)算機(jī)程序,該程序可用于綜合處理器設(shè)計(jì)并實(shí)施上述方法。在一個(gè)示范性實(shí)施例中,這一計(jì)算機(jī)程序包括了儲(chǔ)存于一臺(tái)微型計(jì)算機(jī)的磁存儲(chǔ)器裝置中、并適于由此運(yùn)行在其中央處理器上的一個(gè)目標(biāo)代碼表示。該計(jì)算機(jī)程序進(jìn)一步包括了一個(gè)交互式的、菜單驅(qū)動(dòng)的圖形用戶界面(GUI),因此便于輕松使用。
在本發(fā)明第四方面,公布了一套經(jīng)過(guò)改進(jìn)的裝置,以運(yùn)行上述的計(jì)算機(jī)程序——該程序被用于對(duì)相應(yīng)于流水線化處理器的邏輯加以綜合。在一個(gè)示范性實(shí)施例中,這一系統(tǒng)包括了一個(gè)具有顯示器、中央處理器、數(shù)據(jù)存儲(chǔ)裝置以及輸入裝置的獨(dú)立微型計(jì)算機(jī)系統(tǒng)。
在本發(fā)明第五方面,公布了一種經(jīng)過(guò)改進(jìn)的處理器結(jié)構(gòu)體系,該處理器結(jié)構(gòu)體系使用上述的跳轉(zhuǎn)聯(lián)鎖方法以及約束/無(wú)約束綜合邏輯。在一個(gè)示范性實(shí)施例中,該處理器包括一個(gè)精簡(jiǎn)指令集計(jì)算機(jī)(RISC),該計(jì)算機(jī)具有一條三階段流水線——包括取指令、解碼及執(zhí)行階段,這些階段部分地由上述的跳轉(zhuǎn)聯(lián)鎖方法所控制。
附圖簡(jiǎn)述圖1為一種使用“分段的”運(yùn)算單元的典型原有技術(shù)處理器結(jié)構(gòu)體系框圖。
圖2圖解說(shuō)明了一個(gè)原有技術(shù)四階段流水線處理器的操作,該處理器正進(jìn)行一個(gè)多周期轉(zhuǎn)移操作。
圖3為一個(gè)流水線流程圖,說(shuō)明根據(jù)本發(fā)明,經(jīng)由第一聯(lián)鎖模式而控制在一個(gè)流水線化的處理器中的轉(zhuǎn)移的一般化方法。
圖4為一個(gè)示意圖,說(shuō)明一個(gè)綜合邏輯(無(wú)約束)的第一實(shí)施例,用于實(shí)現(xiàn)圖3的跳轉(zhuǎn)流水線聯(lián)鎖方法。
圖5為一個(gè)示意圖,說(shuō)明一個(gè)綜合邏輯(受約束)的第二實(shí)施例,用于實(shí)現(xiàn)圖3的跳轉(zhuǎn)流水線聯(lián)鎖方法。
圖6為一個(gè)邏輯流程圖,說(shuō)明根據(jù)本發(fā)明、經(jīng)由第二聯(lián)鎖模式而控制在一個(gè)流水線化的處理器中的轉(zhuǎn)移的一般化方法。
圖7為一個(gè)示意圖,說(shuō)明一個(gè)綜合邏輯(無(wú)約束)的第一實(shí)施例,用于實(shí)現(xiàn)圖6的跳轉(zhuǎn)流水線聯(lián)鎖方法。
圖8為一個(gè)示意圖,說(shuō)明一個(gè)綜合邏輯(受約束)的第二實(shí)施例,用于實(shí)現(xiàn)圖6的跳轉(zhuǎn)流水線聯(lián)鎖方法。
圖9為一個(gè)邏輯流程圖,說(shuō)明根據(jù)本發(fā)明而綜合處理器邏輯的一般化方法,包括了跳轉(zhuǎn)控制聯(lián)鎖。
圖10為一個(gè)包括了相應(yīng)于本發(fā)明的流水線聯(lián)鎖的處理器設(shè)計(jì)框圖。
圖11為一個(gè)計(jì)算設(shè)備的功能區(qū)塊示意圖,它包括了本發(fā)明的硬件描述語(yǔ)言,用以對(duì)圖4-5和7-8的邏輯設(shè)備進(jìn)行綜合。
發(fā)明詳述現(xiàn)對(duì)附圖進(jìn)行編號(hào),全部附圖中同樣的編號(hào)指同樣的部分。
在此所用的“處理器”一詞意為任何集成電路或其它能夠根據(jù)至少一個(gè)指令字完成一次操作的電子器件,包括——但不限于——諸如本申請(qǐng)受讓人所生產(chǎn)的ARC用戶配置計(jì)算機(jī)這樣的精簡(jiǎn)指令集計(jì)算機(jī)(RISC)處理器,中央處理器(CPU),以及數(shù)字信號(hào)處理器(DSP)。這些設(shè)備的硬件可集成到單獨(dú)一個(gè)芯片(“小片”)上,或分布于兩個(gè)或更多的小片上。而且處理器的各種功能特征可依照相應(yīng)于本發(fā)明的軟件或者固件而完全實(shí)現(xiàn)。
另外,本領(lǐng)域普通技術(shù)人員會(huì)認(rèn)識(shí)到,此處所用的“階段”一詞指的是流水線處理器中各個(gè)連續(xù)階段,即階段1指的是第一流水線階段,階段2指的是第二流水線階段,等等。
還應(yīng)認(rèn)識(shí)到,盡管以下討論就VHSIC硬件描述語(yǔ)言(VHDL)而進(jìn)行,然而還可使用其它如Verilog這樣的硬件描述語(yǔ)言,同樣成功地描述本發(fā)明的各個(gè)實(shí)施例。而且,盡管使用了一個(gè)示范性的Synopsy綜合引擎——如Design Compiler 1999.05(DC99)——以對(duì)此處提出的各個(gè)實(shí)施例進(jìn)行綜合,但也可使用其它綜合引擎——例如,特別是可從Cadence Design Systems,Inc.購(gòu)到的Buildgates?!癐EEE標(biāo)準(zhǔn)1076.3-1997”,IEEE Standard VHDL Synthesis Packages規(guī)定了一種工業(yè)接受的語(yǔ)言,用于規(guī)定硬件定義語(yǔ)言基的設(shè)計(jì)及綜合能力——一個(gè)本領(lǐng)域的普通技術(shù)人員也許希望能對(duì)此加以使用。
最后,應(yīng)認(rèn)識(shí)到,盡管以下描述說(shuō)明了邏輯——該邏輯由本申請(qǐng)受讓人使用上述綜合引擎及VHSIC硬件描述語(yǔ)言進(jìn)行了綜合——的特定實(shí)施例,這類實(shí)施例在某些方面受到約束,然而這些實(shí)施例對(duì)于本發(fā)明的設(shè)計(jì)過(guò)程來(lái)說(shuō)僅僅為示范性的及說(shuō)明性的。而且,盡管對(duì)于這些實(shí)施例規(guī)定了1.0μm工藝,其它工藝(如0.35μm或0.18μm)相信也可結(jié)合這里所公布的本發(fā)明而使用。
現(xiàn)描述根據(jù)本發(fā)明,經(jīng)過(guò)改進(jìn)的、控制在處理器內(nèi)跳轉(zhuǎn)(包括轉(zhuǎn)移、循環(huán)設(shè)置、子例程調(diào)用等等)的方法。
本發(fā)明的方法概括地說(shuō),包括在處理器指令集內(nèi)的一個(gè)指令字——它設(shè)置一個(gè)標(biāo)志——以及一個(gè)作為該標(biāo)志結(jié)果的跳轉(zhuǎn)(指令)之間設(shè)置一個(gè)或更多的聯(lián)鎖。在以下參照?qǐng)D3所描述的一個(gè)實(shí)施例中,禁止先于某個(gè)給定的跳轉(zhuǎn)指令若干預(yù)定周期的設(shè)置標(biāo)志指令影響該跳轉(zhuǎn)的執(zhí)行。例如,要求在一個(gè)設(shè)置標(biāo)志指令與任一作為該標(biāo)志結(jié)果的跳轉(zhuǎn)之間由該指令設(shè)置最低數(shù)目的周期(n)。在另一實(shí)施例中(圖6),在第一階段的跳轉(zhuǎn)指令被延遲,直至在某個(gè)稍后階段的設(shè)置標(biāo)志指令被移出該階段為止。為說(shuō)明起見(jiàn),假定處理器結(jié)構(gòu)體系每個(gè)機(jī)器周期執(zhí)行一個(gè)指令——盡管可認(rèn)識(shí)到可使用其它的結(jié)構(gòu)體系。
考慮一個(gè)流水線化的結(jié)構(gòu)體系,其中可令跳轉(zhuǎn)以一個(gè)處理器標(biāo)志為條件,而且該跳轉(zhuǎn)指令在一個(gè)早于該標(biāo)志為一個(gè)指令所設(shè)置前的階段被執(zhí)行??赡茉谝粋€(gè)有條件跳轉(zhuǎn)的同時(shí)執(zhí)行一個(gè)設(shè)置標(biāo)志指令,因?yàn)檫@兩個(gè)指令在同一時(shí)刻處于流水線的不同階段。假定在每個(gè)周期結(jié)束時(shí)更新處理器標(biāo)志,則這一有條件跳轉(zhuǎn)就會(huì)基于周期開(kāi)始的值而確定是否改變程序流——而非基于由設(shè)置標(biāo)志指令在該周期當(dāng)中所計(jì)算出的標(biāo)志值。這樣跳轉(zhuǎn)指令就不會(huì)受到設(shè)置標(biāo)志指令的影響。
為確保跳轉(zhuǎn)指令會(huì)使用由設(shè)置標(biāo)志指令所設(shè)的標(biāo)志值,不執(zhí)行該跳轉(zhuǎn)指令,直到標(biāo)志值已被更新為止。因此在設(shè)置標(biāo)志指令的執(zhí)行與跳轉(zhuǎn)指令的執(zhí)行之間,會(huì)有若干周期(n)。
但如果該跳轉(zhuǎn)由于某種原因而阻塞于流水線上,而且在一個(gè)稍后階段的設(shè)置標(biāo)志指令不受這一阻塞影響、被允許完成并更新處理器標(biāo)志,則當(dāng)跳轉(zhuǎn)被允許繼續(xù)時(shí),它即會(huì)以這個(gè)更新了的處理器標(biāo)志為條件并得到一個(gè)不同的結(jié)果。
熟練程序員會(huì)希望確保有用的指令可在設(shè)置標(biāo)志指令與跳轉(zhuǎn)指令之間的所需周期得以執(zhí)行。如非描述于此的本發(fā)明,程序員就不得不確保位于設(shè)置標(biāo)志指令與跳轉(zhuǎn)指令之間的任何指令都不得改變由跳轉(zhuǎn)指令所檢測(cè)的處理器標(biāo)志值。
這里所描述的改進(jìn)的方法和裝置允許程序員在某個(gè)第一設(shè)置標(biāo)志指令與其相應(yīng)的有條件跳轉(zhuǎn)之間的所需周期中,調(diào)度一個(gè)第二設(shè)置標(biāo)志指令,并確保該有條件跳轉(zhuǎn)不受該第二設(shè)置標(biāo)志指令影響——如果這個(gè)跳轉(zhuǎn)阻塞于流水線上的話。這就會(huì)——舉例來(lái)說(shuō)——允許一個(gè)第二有條件跳轉(zhuǎn)指令與該第二設(shè)置標(biāo)志指令配成對(duì),其方式使得這兩對(duì)指令重疊,從而節(jié)省了運(yùn)行時(shí)間。
現(xiàn)在參見(jiàn)圖3,描述根據(jù)本發(fā)明、控制在一個(gè)流水線化的處理器內(nèi)跳轉(zhuǎn)的一般化方法的第一實(shí)施例。在方法300的第一步驟302,提供一個(gè)適于在處理器上運(yùn)行并包括多個(gè)指令字的程序。在該程序中的每個(gè)指令字都表示為并包括了多個(gè)數(shù)據(jù)位,并且至少其中一個(gè)指令字包括一個(gè)設(shè)置標(biāo)志指令(如下面更詳細(xì)討論的“xor.f”指令),而至少另一個(gè)字包括一個(gè)跳轉(zhuǎn)指令。但請(qǐng)注意此處所用的“跳轉(zhuǎn)”一詞可指任何轉(zhuǎn)移、跳轉(zhuǎn)、循環(huán)設(shè)置或調(diào)用指令,盡管其它要求改變處理器指令處理流程的指令也相信可與所公布的本發(fā)明一起使用。設(shè)置標(biāo)志與跳轉(zhuǎn)指令二者的形式與內(nèi)容都在數(shù)字處理器技術(shù)中為人所熟知。
設(shè)置標(biāo)志指令字對(duì)于跳轉(zhuǎn)指令字可為任何順序或關(guān)系;然而,情況是在程序內(nèi)至少一個(gè)設(shè)置標(biāo)志指令字位于至少一個(gè)跳轉(zhuǎn)指令字之前。這一設(shè)置標(biāo)志指令字先于一個(gè)后續(xù)跳轉(zhuǎn)指令字的這種相對(duì)的鄰近關(guān)系(以程序序列中相應(yīng)于指令字的機(jī)器或處理器周期的數(shù)目加以衡量)還會(huì)變化。在原有技術(shù)方法中,當(dāng)設(shè)置標(biāo)志指令字以一個(gè)程序序列中小于預(yù)定增量或數(shù)目的指令字而先于一個(gè)跳轉(zhuǎn)指令字時(shí),該跳轉(zhuǎn)指令的操作即會(huì)受由直接在它的設(shè)置標(biāo)志指令之前所設(shè)置標(biāo)志的影響。相應(yīng)地,跳轉(zhuǎn)操作也依是否在先于該跳轉(zhuǎn)的時(shí)隙中調(diào)度進(jìn)了設(shè)置標(biāo)志指令而變化;設(shè)備程序員需要清楚地考慮到這一行為。
相比之下,本發(fā)明實(shí)施例的聯(lián)鎖特性防止了出現(xiàn)于一個(gè)跳轉(zhuǎn)指令之前小于預(yù)定增量的一個(gè)設(shè)置標(biāo)志指令影響該跳轉(zhuǎn)的操作。特別地,在所描述的實(shí)施例中,這個(gè)增量包括了一個(gè)機(jī)器周期,并且相應(yīng)地任何在處理器中算術(shù)邏輯單元(ALU)或其它單元內(nèi)、在直接優(yōu)先于該跳轉(zhuǎn)的周期或時(shí)隙內(nèi)的設(shè)置標(biāo)志都不能在該跳轉(zhuǎn)指令完成之前進(jìn)行標(biāo)志的設(shè)置,所以它不改變跳轉(zhuǎn)所要考慮的標(biāo)志(例如ALU的那些標(biāo)志)。
作為一個(gè)一般性命題,當(dāng)在階段3有一個(gè)裝入,以防止一個(gè)在階段2上的跳轉(zhuǎn)指令(例如“Jcc rn”)與一個(gè)在階段3上的裝入指令(例如“LD rn,[…]”)之間可能的鎖位情況時(shí),所說(shuō)明實(shí)施例的聯(lián)鎖信號(hào)不置于真(即聯(lián)鎖未啟動(dòng))。在這種情況下,記分牌會(huì)防止裝入完成,這意味著該記分牌不會(huì)被清零、導(dǎo)致一種完全死鎖的情況。不認(rèn)為這種裝入排除相應(yīng)于本發(fā)明有問(wèn)題,因?yàn)檠b入并不設(shè)置標(biāo)志。
在步驟306,對(duì)出現(xiàn)于跳轉(zhuǎn)指令一個(gè)指令之前的設(shè)置標(biāo)志指令進(jìn)行解碼并執(zhí)行,從而在ALU或處理器內(nèi)的其它寄存器內(nèi)設(shè)置指定標(biāo)志。請(qǐng)注意在本實(shí)施例中,在階段2的一個(gè)跳轉(zhuǎn)指令及一個(gè)在階段3的設(shè)置標(biāo)志指令必須依它們能被分析之前的關(guān)系而被解碼。
下面在步驟308,流水線已從步驟306移來(lái)并分析了出現(xiàn)于流水線上的任何跳轉(zhuǎn)及設(shè)置標(biāo)志指令之間的關(guān)系。確定了這樣的聯(lián)鎖出現(xiàn)于階段3的設(shè)置標(biāo)志指令直接在出現(xiàn)于階段2的跳轉(zhuǎn)指令之前。該跳轉(zhuǎn)指令被阻塞于當(dāng)前周期的結(jié)尾,因?yàn)橐粋€(gè)用于階段2的阻塞請(qǐng)求被置于真。為防止設(shè)置標(biāo)志指令影響后續(xù)的跳轉(zhuǎn),設(shè)置標(biāo)志指令也必須被阻塞于當(dāng)前周期的結(jié)尾。這個(gè)聯(lián)鎖生成了一個(gè)用于階段3的阻塞請(qǐng)求。在這個(gè)周期結(jié)束時(shí),該阻塞請(qǐng)求信號(hào)防止了在階段2和階段3的指令移到流水線上的下一階段。
在步驟312,被調(diào)度到設(shè)置標(biāo)志指令之后的一個(gè)跳轉(zhuǎn)指令在階段2阻塞被取消、并取出了指定跳轉(zhuǎn)的某個(gè)稍后時(shí)間由處理器進(jìn)行解碼及執(zhí)行。對(duì)指令解碼有用的方法及裝置為計(jì)算機(jī)技術(shù)領(lǐng)域所熟知,相應(yīng)地就不在此處進(jìn)一步詳述。
在步驟314,阻塞的(第二)設(shè)置標(biāo)志指令在步驟312的跳轉(zhuǎn)完成的同時(shí)也被解碼并執(zhí)行。這種同時(shí)完成確保了該第二設(shè)置標(biāo)志指令不影響跳轉(zhuǎn)的結(jié)果。
提供了圖3方法的以下示例(特別是在本申請(qǐng)人的ARC Core的版本5或“v5”中)用以說(shuō)明。如前所述,在一個(gè)設(shè)置標(biāo)志的指令與一個(gè)作為該標(biāo)志的結(jié)果的轉(zhuǎn)移之間要求有最少一個(gè)周期;這使得設(shè)置標(biāo)志的指令可被調(diào)度到轉(zhuǎn)移之前、不會(huì)影響這個(gè)轉(zhuǎn)移結(jié)果的時(shí)隙,如下所述xor.f 0,r1,-1;為jz指令設(shè)置標(biāo)志and.f r0,r1,r2 ;不影響轉(zhuǎn)移結(jié)果jz [r10];進(jìn)行跳轉(zhuǎn)經(jīng)常以一個(gè)NOP(空操作)指令填入該時(shí)隙,如下例所示xor.f 0,r0,-2;測(cè)試是否r0為-2nop ;留下一個(gè)空時(shí)隙(“填充”)bz r0_is_minus_2;進(jìn)行跳轉(zhuǎn)規(guī)定這個(gè)v5聯(lián)鎖以確保當(dāng)?shù)诙O(shè)置標(biāo)志指令到達(dá)階段3時(shí),該指令不會(huì)在轉(zhuǎn)移指令完成前設(shè)置標(biāo)志,并從而使它不能改變?cè)撧D(zhuǎn)移所要考慮的標(biāo)志(如ALU標(biāo)志)。在上述例子中,聯(lián)鎖檢測(cè)這種情況會(huì)出現(xiàn)的場(chǎng)合,并阻塞在階段3中的設(shè)置標(biāo)志指令。
所述實(shí)施例的v5聯(lián)鎖信號(hào)(“ibch_holgp3”)進(jìn)一步考慮會(huì)影響一個(gè)跳轉(zhuǎn)的階段2阻塞的三種類型;i. 后續(xù)指令未出現(xiàn)ii. 一個(gè)轉(zhuǎn)移(如,Jcc[rn])引用了一個(gè)上記分牌的寄存器iii. 一個(gè)轉(zhuǎn)移(如,Jcc[rn])由一個(gè)擴(kuò)展階段2阻塞所保持i.在ARC v5處理器中,直接后續(xù)于一個(gè)跳轉(zhuǎn)指令的指令被稱為‘延遲時(shí)隙’指令。該跳轉(zhuǎn)指令以模式為特征,用以根據(jù)轉(zhuǎn)移的結(jié)果而控制延遲時(shí)隙指令的執(zhí)行。為進(jìn)行所要控制的后續(xù)指令的執(zhí)行,它必須處于流水線中。如無(wú)后續(xù)的指令字可置于階段1中,跳轉(zhuǎn)指令就會(huì)阻塞于階段2,如一個(gè)寄存器‘失誤’導(dǎo)致的結(jié)果。
ii.如對(duì)于一個(gè)跳轉(zhuǎn)的目標(biāo)地址從一個(gè)寄存器取得,而該寄存器被標(biāo)記為一個(gè)未完成裝入的目的地(一個(gè)上了記分牌的寄存器),則該跳轉(zhuǎn)必須被阻塞,直至該裝入完成、并且寄存器值被更新為止。
iii.在ARC v5處理器中,提供一個(gè)接口以用于增加額外的‘?dāng)U展’寄存器。這個(gè)接口允許生成一個(gè)外部阻塞信號(hào)。一個(gè)外部阻塞會(huì)阻塞一個(gè)在階段2的跳轉(zhuǎn)指令——如果該跳轉(zhuǎn)指令引用了一個(gè)擴(kuò)展寄存器而該擴(kuò)展寄存器不能在該周期上返回?cái)?shù)據(jù)的話。
上述“ibch_holdp3”聯(lián)鎖功能的一個(gè)總結(jié)性VHDL表達(dá)式如下<pre listing-type="program-listing"><![CDATA[ibch_holdp3<=‘1’ WHEN ip2bch=‘1’ AND imload 3=‘0’ AND((holdup12 Or ihp2 1d nsc)=‘1’ OR xholdup12=‘1’ OR ivalid=‘0’)ELSE ‘0’;]]></pre>注意,如果在階段2的一個(gè)指令被阻塞,則相應(yīng)于ibch holdp3的邏輯將阻塞在階段3的任何指令,除非在階段3的指令為裝入。在本實(shí)施例中,邏輯并不為設(shè)置標(biāo)志指令進(jìn)行特別校驗(yàn),而只是一個(gè)可設(shè)置標(biāo)志的指令。
這里的附錄A提供了一個(gè)示范性VDHL表達(dá)式,用于綜合ARC Core版本5(v5)的跳轉(zhuǎn)流水線聯(lián)鎖。
注意,除了上述調(diào)度到預(yù)置空時(shí)隙中的NOP外,一個(gè)熟練的程序員會(huì)構(gòu)造其編碼、使之在這一時(shí)隙中完成某種有用操作。對(duì)這類編碼的選擇方案范圍很廣,依作為一個(gè)整體的程序總結(jié)構(gòu)而定。例如在一個(gè)例子中,可能在這個(gè)預(yù)置空時(shí)隙中完成轉(zhuǎn)移中的第一個(gè)編碼邏輯運(yùn)算。這就使得這個(gè)預(yù)置空時(shí)隙可用于有用的程序執(zhí)行。再舉一例,某些算法可被分段,使得在程序流的兩個(gè)分支中執(zhí)行同樣的下一個(gè)指令。在這種情況下,就可能在這個(gè)預(yù)置空時(shí)隙中編碼,令其執(zhí)行而無(wú)論是否使用了這一分支。許多這樣的選擇方案都是可能的,并被認(rèn)為屬于這里所公布的本發(fā)明的范圍。
圖4表示了綜合邏輯的第一實(shí)施例,用于實(shí)現(xiàn)本發(fā)明的v5的跳轉(zhuǎn)流水線聯(lián)鎖。圖4的邏輯使用上述的應(yīng)用了LSI 10k 1.0μm工藝、未加約束的SynopsyDesign Compiler而進(jìn)行綜合。
圖5表示了v5跳轉(zhuǎn)流水線聯(lián)鎖的綜合邏輯第二實(shí)施例,只是包括了令ivalid與ibch_holdp3之間的延遲最小的約束。但可以認(rèn)識(shí)到,還可將其它約束用于選擇方案——與/或該ivalid與ibch_holdp3之間最小化約束一起。
現(xiàn)在參見(jiàn)圖6,描述根據(jù)本發(fā)明、控制在一個(gè)流水線化的處理器內(nèi)跳轉(zhuǎn)的一般化方法的第二實(shí)施例。在方法600的第一個(gè)步驟602中,如前所述地提供了一個(gè)適配于運(yùn)行在處理器上并包括有多個(gè)指令字的指令集。至少其中一個(gè)指令字包括一個(gè)設(shè)置標(biāo)志指令(如上例中的“xor.f”指令),而且至少其中另一個(gè)字包括一個(gè)跳轉(zhuǎn)指令。
不過(guò)相對(duì)于圖3的方法,圖6實(shí)施例的聯(lián)鎖不允許將一個(gè)NOP或設(shè)置標(biāo)志指令調(diào)度到直接在跳轉(zhuǎn)之前的時(shí)隙中。反之,處理器首先將設(shè)置標(biāo)志指令移進(jìn)解碼階段并在步驟604將該指令解碼。其次在步驟606,該設(shè)置標(biāo)志指令被移進(jìn)執(zhí)行階段并被執(zhí)行。此時(shí),確定在執(zhí)行階段的指令的標(biāo)識(shí)(步驟608);以下相應(yīng)于表1描述一種可用于作出這一確定的示范性編碼。跳轉(zhuǎn)指令經(jīng)步驟610而被移進(jìn)解碼階段并進(jìn)行解碼。該跳轉(zhuǎn)指令被阻塞于這個(gè)解碼階段(步驟612)直至經(jīng)步驟614,設(shè)置標(biāo)志指令被移出執(zhí)行階段并相應(yīng)地設(shè)置了標(biāo)志為止。注意僅在步驟608確定出現(xiàn)了一個(gè)設(shè)置標(biāo)志指令時(shí),才會(huì)發(fā)生步驟612的阻塞。這個(gè)跳轉(zhuǎn)指令隨后即被移進(jìn)執(zhí)行階段并在步驟616執(zhí)行。如所易知,這一方法特別允許為“如果—于是”結(jié)構(gòu)而寫(xiě)入一種更緊致的編碼。并且可以理解,許多上述步驟(例如設(shè)置標(biāo)志指令移進(jìn)執(zhí)行階段以及跳轉(zhuǎn)指令移進(jìn)解碼階段)都會(huì)同時(shí)發(fā)生。
以下示范性編碼結(jié)構(gòu)(涉及ARC Core的版本6或“v6”)說(shuō)明圖6的方法v6 codexor.f 0,r0,-2 ;測(cè)試是否r0為-2bz r0_is_minus_2 ;進(jìn)行轉(zhuǎn)移以上v6聯(lián)鎖編碼結(jié)構(gòu)允許v5編碼的NOP(此處圖3)被省略,因?yàn)樵陔A段2的轉(zhuǎn)移會(huì)被延遲直到設(shè)置標(biāo)志指令已經(jīng)移出階段3并且該指令已被設(shè)置為止。v6編碼執(zhí)行時(shí)間與v5編碼相同,但明顯減少了編碼長(zhǎng)度,因?yàn)槌霈F(xiàn)于v5編碼中的許多NOP被略去。
對(duì)下列類型的有效指令必須在階段3進(jìn)行檢測(cè)及識(shí)別,以啟動(dòng)v6聯(lián)鎖i.任何設(shè)置標(biāo)志的ALU指令(例如“p3setflags”)
ii.設(shè)置標(biāo)志跳轉(zhuǎn)指令(例如Jcc.F或JLcc.F)iii.FLAG指令這些設(shè)置標(biāo)志跳轉(zhuǎn)指令被用于從子例程或中斷返回,因?yàn)樗鼈冊(cè)试S包含程序計(jì)數(shù)器及處理器標(biāo)志的32位寄存器從一個(gè)寄存器中的一個(gè)單一儲(chǔ)存的32位量進(jìn)行同時(shí)重裝。
本實(shí)施例中對(duì)這些指令檢測(cè)的完成如表1所示表1
注意,為生成阻塞,還要求檢測(cè)出現(xiàn)于階段2的有效轉(zhuǎn)移指令(例如“ip2bch”)。因此,在下列兩個(gè)條件同時(shí)出現(xiàn)時(shí)即生成一個(gè)阻塞1.在階段3的一個(gè)指令正在試圖設(shè)置標(biāo)志;2.在階段2的一個(gè)轉(zhuǎn)移指令需要使用這些新標(biāo)志下列示范性編碼結(jié)構(gòu)被用于v6以確定這兩個(gè)條件是否為真表2
注意在所說(shuō)明實(shí)施例中,還可能檢測(cè)這樣一些程序條件,其中或者(a)標(biāo)志未被設(shè)置;或者(b)后續(xù)轉(zhuǎn)移指令不校驗(yàn)所設(shè)置標(biāo)志。在這兩種情況下,均將在設(shè)置標(biāo)志與后續(xù)轉(zhuǎn)移之間的聯(lián)鎖取消。相應(yīng)地,這些條件的檢測(cè)就在處理器性能上提供了進(jìn)一步潛在的改進(jìn),這是因?yàn)椴槐貫樵O(shè)置標(biāo)志/轉(zhuǎn)移組合而生成聯(lián)鎖——如檢測(cè)到該標(biāo)志不會(huì)被設(shè)置(如指令隨后被取消),或者該標(biāo)志由不為選定轉(zhuǎn)移條件所測(cè)試的指令所設(shè)置的話。
下列v6編碼的特定例子說(shuō)明了上述概念i.在階段3的有條件設(shè)置標(biāo)志指令不設(shè)置標(biāo)志(例如add.cc.fr0,r0,r0,導(dǎo)致c=1)ii.在階段2的轉(zhuǎn)移指令使用了AL(總是)條件模式。
此處附錄B包括了一個(gè)相應(yīng)于本發(fā)明的示范性跳轉(zhuǎn)流水線聯(lián)鎖VHDL表達(dá)式,如同所用于ARC Core版本6(v6)綜合的。但應(yīng)認(rèn)識(shí)到,上述方法并不限于這一特定實(shí)施方案,而是可與任意數(shù)量的不同處理器設(shè)計(jì)結(jié)合使用。
圖7說(shuō)明用以實(shí)現(xiàn)本發(fā)明v6跳轉(zhuǎn)流水線聯(lián)鎖的綜合邏輯的第一實(shí)施例。圖7邏輯使用上述的應(yīng)用了LSI 10k 1.0μm工藝、未加約束的SynopsyDesign Compiler而進(jìn)行綜合。
圖8表示了v6跳轉(zhuǎn)流水線聯(lián)鎖的綜合邏輯第二實(shí)施例,只是包括了令輸入與ibch_holdp3之間的延遲最小的約束。圖8邏輯也使用上述的應(yīng)用了LSI 10k 1.0μm工藝的SynopsyDesign Compiler而進(jìn)行綜合。
進(jìn)一步可認(rèn)識(shí)到,所實(shí)施于v5或v6(或與本發(fā)明相一致的其它實(shí)施例)的跳轉(zhuǎn)流水線聯(lián)鎖功能可與其它跳轉(zhuǎn)控制或流水線聯(lián)鎖技術(shù)結(jié)合。例如,描述于本申請(qǐng)人同處辦理中的、標(biāo)題為“用于流水線化處理器中的跳轉(zhuǎn)延遲時(shí)隙控制的方法及裝置”的美國(guó)專利申請(qǐng)中的跳轉(zhuǎn)延遲時(shí)隙控制,以及本申請(qǐng)人同處辦理中的、標(biāo)題為“用于處理器流水線分段法及再裝配的方法以及裝置”的美國(guó)專利申請(qǐng)中的流水線撕裂與抓起方法,二者均與此同時(shí)提出申請(qǐng),并且二者均于此全部被包括進(jìn)來(lái)、作為參考資料。此外,各種寄存器編碼模式——如公布于本申請(qǐng)人同處辦理中的、標(biāo)題為“用于在流水線化處理器內(nèi)松散寄存器編碼的方法及裝置”的美國(guó)專利申請(qǐng)——也可與本發(fā)明結(jié)合使用。
綜合方法現(xiàn)參見(jiàn)圖9,描述包括了上述的跳轉(zhuǎn)流水線聯(lián)鎖功能綜合邏輯的方法900。綜合集成電路邏輯——它具有一個(gè)用戶定制的(即“軟的”)指令集——的一般化方法公布在本申請(qǐng)人同處辦理中的、申請(qǐng)于1999年10月14日、申請(qǐng)?zhí)枮閁.S.Patent Application Serial No.09/418,663、標(biāo)題為“用于管理半導(dǎo)體設(shè)計(jì)的結(jié)構(gòu)以及功能的方法及裝置”專利申請(qǐng)中,這里將其全部引入、作為參考資料。
雖然以下描述就運(yùn)行于微型計(jì)算機(jī)或其它類似處理設(shè)備上的算法或計(jì)算機(jī)程序而進(jìn)行,應(yīng)認(rèn)識(shí)到其它硬件環(huán)境(包括小型計(jì)算機(jī)、工作站、聯(lián)網(wǎng)的計(jì)算機(jī)、“超級(jí)計(jì)算機(jī)”以及大型機(jī))也可被用于應(yīng)用這一方法。另外,還可將這個(gè)計(jì)算機(jī)程序的一個(gè)或一個(gè)以上的部分實(shí)施于相對(duì)于軟件的硬件或固件上——如果愿意的話,這類備選實(shí)施例完全屬于計(jì)算機(jī)技術(shù)人員的技術(shù)范圍內(nèi)。
首先,在步驟902根據(jù)設(shè)計(jì)結(jié)構(gòu)而取得用戶輸入。具體地,由用戶選擇所要的功能塊或功能,并根據(jù)需要而增加、減少或生成涉及設(shè)計(jì)的指令。例如,在信號(hào)處理應(yīng)用中,令CPU包括一個(gè)單一的“乘和累加(MAC)”指令通常是有利的。在本發(fā)明中,將綜合設(shè)計(jì)的指令集加以改進(jìn)、以在其中包括上述的跳轉(zhuǎn)流水線聯(lián)鎖(或另一個(gè)可比的聯(lián)鎖/控制結(jié)構(gòu)體系)。對(duì)各VHDL文件的技術(shù)庫(kù)位置也由用戶在步驟902加以規(guī)定。本發(fā)明中的技術(shù)庫(kù)文件儲(chǔ)存所有為綜合處理所需的單元,包括——舉例來(lái)說(shuō)——邏輯功能、輸入/輸出計(jì)時(shí)以及所有相關(guān)約束。本發(fā)明中,各用戶可規(guī)定他/她自己的庫(kù)名及位置,從而增加了更多的靈活性。
其次在步驟903,基于用戶輸入及在步驟902規(guī)定的現(xiàn)有功能庫(kù)而創(chuàng)建定制的HDL功能塊。
在步驟904,即于用戶輸入及上述庫(kù)文件而確定設(shè)計(jì)層次結(jié)構(gòu)?;谠撛O(shè)計(jì)層次結(jié)構(gòu)而順序生成一個(gè)層次結(jié)構(gòu)文件、新庫(kù)文件以及程序描述文件。這里所用的“程序描述文件”一詞指普遍使用的UNIX程序描述文件功能或?yàn)榫哂杏?jì)算機(jī)編程技術(shù)的人員所熟知的計(jì)算機(jī)系統(tǒng)類似功能。程序描述文件功能使駐存在計(jì)算機(jī)系統(tǒng)中的其它軟件或算法以規(guī)定的順序運(yùn)行。另外,它還規(guī)定數(shù)據(jù)文據(jù)以及為指定程序的成功運(yùn)行所必需的其它信息的名字及位置。不過(guò)注意,此處所公布的本發(fā)明可使用不同于該“程序描述文件”類型的文件結(jié)構(gòu)來(lái)產(chǎn)生所需功能。
在本發(fā)明程序描述文件生成過(guò)程的一個(gè)實(shí)施例中,用戶經(jīng)由顯示器而被互動(dòng)地要求輸入關(guān)于所需設(shè)計(jì)的信息,例如“建立”的類型(例如總的設(shè)備或系統(tǒng)結(jié)構(gòu)),擴(kuò)展存儲(chǔ)系統(tǒng)數(shù)據(jù)總線的寬度,擴(kuò)展的不同類型,寄存器類型/大小,等等。但也可使用與本發(fā)明一致的輸入信息的許多其它結(jié)構(gòu)及資源。
在步驟906,運(yùn)行在步驟904生成的程序描述文件以創(chuàng)建結(jié)構(gòu)HDL。該結(jié)構(gòu)HDL將設(shè)計(jì)中分立的功能塊結(jié)合在一起,以作出一個(gè)完整的設(shè)計(jì)。
其后在步驟908,運(yùn)行生成于步驟906的稿本以為仿真程序而創(chuàng)建一個(gè)程序描述文件。在步驟908還運(yùn)行生成一個(gè)綜合稿本的稿本。
此時(shí)在程序中決定是對(duì)設(shè)計(jì)進(jìn)行綜合還是進(jìn)行仿真(步驟910)。如選擇仿真,用戶即在步驟912使用生成的設(shè)計(jì)及仿真程序描述文件運(yùn)行仿真程序。另外,如選擇綜合,用戶即在步驟914使用綜合稿本及生成的設(shè)計(jì)而進(jìn)行綜合。在綜合/仿真稿本完成后,在步驟916評(píng)估設(shè)計(jì)是否合適。例如,一個(gè)綜合引擎也許會(huì)生成設(shè)計(jì)的一個(gè)特定的物理布局,該布局滿足了總設(shè)計(jì)過(guò)程的性能條件但不滿足這個(gè)小片的大小要求。在這種情況下,設(shè)計(jì)者會(huì)對(duì)控制文件、庫(kù)或其它能夠影響小片大小的單元進(jìn)行改動(dòng)。所得到的設(shè)計(jì)信息集合隨后即被用于重新運(yùn)行綜合稿本。
如果生成的設(shè)計(jì)是可接受的,設(shè)計(jì)過(guò)程即結(jié)束。如果生成的設(shè)計(jì)是不可接受的,則重新進(jìn)行開(kāi)始于步驟902的過(guò)程步驟,直到取得一個(gè)可接受的設(shè)計(jì)。以這種方式,方法900為可重復(fù)的。
圖10表示一個(gè)使用1.0μm工藝所生產(chǎn)、包括了圖4、5、7或8的邏輯以及此處前述的跳轉(zhuǎn)流水線聯(lián)鎖功能的示范性流水線化處理器。如圖10所示,處理器100為一個(gè)ARC微型處理器類的CPU設(shè)備,它特別地具有一個(gè)處理器核心1002,芯片上存儲(chǔ)器1004,以及一個(gè)擴(kuò)展接口1006。這個(gè)設(shè)備使用定制的、利用本發(fā)明的方法900而取得的VHDL設(shè)計(jì)生產(chǎn),該設(shè)計(jì)隨后被綜合為一個(gè)邏輯級(jí)表達(dá)式,然后使用在半導(dǎo)體技術(shù)中為人所熟知的編譯、布局以及生產(chǎn)技術(shù)歸約為一個(gè)物理設(shè)備。
本領(lǐng)域技術(shù)人員會(huì)認(rèn)識(shí)到,圖7處理器可包含任何普通可得的外圍設(shè)備,如串行通信設(shè)備,并行接口,計(jì)時(shí)器,高電流驅(qū)動(dòng)器,模數(shù)(A/D)轉(zhuǎn)換器,數(shù)模轉(zhuǎn)換器(D/A),中斷處理器,LCD驅(qū)動(dòng)器,存儲(chǔ)器以及其它類似設(shè)備。另外,該處理器還可包括用戶特定或應(yīng)用特定的電路元件。本發(fā)明并不限于外圍設(shè)備及其它應(yīng)用本方法及裝置進(jìn)行組合的電路元件的類型、數(shù)量或復(fù)雜性。反之,任何由現(xiàn)有半導(dǎo)體工藝的物理能力所施加的限制都會(huì)隨時(shí)間而改進(jìn)。因此可預(yù)期,隨半導(dǎo)體工藝的進(jìn)步,可能應(yīng)用本發(fā)明的集成的復(fù)雜性及質(zhì)量將進(jìn)一步提高。
還請(qǐng)注意,許多IC設(shè)計(jì)目前使用微處理器芯片或DSP芯片。但DSP僅會(huì)被要求用于有限數(shù)量的DSP功能(如有限脈沖響應(yīng)分析或者話音編碼),或用于IC的快速DMA體系結(jié)構(gòu)。這里所公布的本發(fā)明可支持許多DSP指令功能,并且其快速的本地RAM系統(tǒng)提供了對(duì)數(shù)據(jù)的立即存取。通過(guò)將公布于此的方法應(yīng)用于IC的CPU及DSP功能二者,可節(jié)約可觀的成本。
另外,請(qǐng)注意這里如前所述的方法(及相應(yīng)的計(jì)算機(jī)程序)可容易地以相對(duì)簡(jiǎn)單的再綜合適應(yīng)于更新的生產(chǎn)技術(shù),例如0.18或0.1微米工藝——而非使用“硬的”原有微技術(shù)系統(tǒng)時(shí),為了適應(yīng)這類技術(shù)通常要采用冗長(zhǎng)昂貴的處理。
現(xiàn)在參見(jiàn)圖11,描述一個(gè)能夠綜合——尤其是—此處圖4-5及7-8的跳轉(zhuǎn)流水線聯(lián)鎖邏輯結(jié)構(gòu)的計(jì)算設(shè)備的實(shí)施例。計(jì)算設(shè)備1100包括一個(gè)母板1101,該母板有一個(gè)中央處理器(CPU)1002,隨機(jī)存儲(chǔ)存儲(chǔ)器(RAM)1004,以及存儲(chǔ)器控制器1005。還提供了一個(gè)存儲(chǔ)設(shè)備1006(如硬盤驅(qū)動(dòng)器或CD-ROM),輸入設(shè)備1007(如鍵盤或鼠標(biāo)),和顯示設(shè)備1008(如CRT、等離子體或TFT顯示器),以及必要的總線以支持主機(jī)和外圍設(shè)備部件的運(yùn)行。前述的VHDL描述及綜合引擎以一個(gè)計(jì)算機(jī)程序目標(biāo)代碼表達(dá)式的形式儲(chǔ)存在RAM 1004和/或存儲(chǔ)設(shè)備1006中,以在設(shè)計(jì)綜合期間由CPU 1002使用,后者在計(jì)算技術(shù)中為人所熟知。用戶(未示)在系統(tǒng)運(yùn)行期間,通過(guò)由程序顯示器及輸入設(shè)備1007、將設(shè)計(jì)結(jié)構(gòu)規(guī)范輸入進(jìn)綜合程序而綜合邏輯設(shè)計(jì)。由程序所生成的經(jīng)過(guò)綜合的設(shè)計(jì)儲(chǔ)存于存儲(chǔ)設(shè)備1006中以便以后檢索,顯示于圖形顯示設(shè)備1008,或經(jīng)由一個(gè)串行或并行接口1012而輸出到一臺(tái)外部設(shè)備,如打印機(jī)、數(shù)據(jù)存儲(chǔ)設(shè)備、其它外圍設(shè)備——如果需要的話。
雖然以上詳述已表明、描述、并指出了本發(fā)明應(yīng)用到各個(gè)實(shí)施例上的新穎特性,然而應(yīng)認(rèn)識(shí)到本領(lǐng)域技術(shù)人員可對(duì)所表述的設(shè)備或過(guò)程的形式及細(xì)節(jié)作出各種各樣的省略、替換或改變而不偏離本發(fā)明。本描述絕不意味著限制、而只應(yīng)將其作為本發(fā)明一般原理的說(shuō)明。本發(fā)明的范圍應(yīng)參照權(quán)利要求書(shū)而確定。
附錄A用于綜合的示范性跳轉(zhuǎn)流水線VHDL(v5)<pre listing-type="program-listing"><![CDATA[library ieee;use ieee.std_logic_1164.all;entity jump_pipe_v5 isPORT( ip2bch ; in std_ulogic; imload3 ; in std_ulogic; holdup12 ; in std_ulogic; ihp2_ld_nsc ; in std_ulogic; xholdup12; in std_ulogic; ivalid ; in std_ulogic; ibch_holdp3 ; out std_ulogic;end jump_pipe_v5;architecture synthesis of jump_pipe_v5 isbeginibch_holdp3<= ‘1’ WHEN ip2bch=‘1’ AND imload3=‘0’ AND((holdup12 OR ihp2_ld_nsc)=‘1’ OR xholdup12=‘1’ OR ivalid=‘0’) ELSE ‘0’;end synthesis;]]></pre>
附錄B用于綜合的示范性跳轉(zhuǎn)流水線VHDL(v6)<pre listing-type="program-listing"><![CDATA[library ieee.arc;use ieee.std_logic 1164.all;use arc.arcutil.all;entity jump_pipe_v6 isPORT(ip2iv;instd_ulogic; ip3iv;instd_ulogic; ip3setflags ;instd_ulogic; ip2i ;instd_ulogic_vector(4 downto 0); ip3i ;instd_ulogic_vector(4 downto 0); ip3c ;instd_ulogic_vector(5 downto 0); ip3_fbit ;instd_ulogic); ibch_holdp2 ;out std_ulogic);end jump_pipe_v6;architecture synthesis of jump_pipe_v6 is signal bch p3flagset; std_ulogic; signal p2bch ; std_ulogic;begin--Detect branch in stage 2 ip2bch<= ‘1’WHEN ip2iv=‘1’AND (ip2i=obcc OR ip2i=oblcc OR ip2i=olpcc OR ip2i=ojcc)ELSE ‘0’;--------------------ibch_holdp2Branch protection system------------------------ ----In order to reduce code size,we want to remove the need to have a NOP--between setting the flags and taking the associated branch.----e.g.sub.f 0,r0,23 ;is r0=23?--nop ;padding instruction.<<----bz r0_is_23 ;----In order that the compiler does not have to generate these instructions,--we can generate a stage 2 stall if an instruction in stage 3 is attempting--to set the flags.Once this instruction has completed,and has passed out--of stage 3,then stage 2 will continue.----We need to detect the following types of valid instruction at stage 3;----i.Any ALU instruction which sets the nags(p3setflags)--ii.Jcc.F or JLcc.F--iii.A FLAG instruction--ibch_p3flagset<=ip3iv WHEN(ip3setflags=‘1’) --ALU OR((ip3i=ojcc)AND(ip3_fbit=‘1’))--Jcc/JLcc OR((ip3i=oflag)AND(ip3c=so_flag)) --FlagELSE‘0’;--In order to generate the stall,we also need to detect a valid branch instruction--present in stage 2(ip2bch).----We generate a stall when the two conditions are present together----a.An instruction in stage 3 is attempting to set the flags--b.A branch instruction at stage 2 needs to use these new flags------Both of the following cases remove the link between setting the flags and the followingbranch,either because the flags don’t get set,or because the branch doesn’t--check the flags.----i. Conditional flag set instruction at stage 3 does not set flags--e.g.,add.cc.f r0,r0,r0,resulting in c=1----ii. Branch at stage 2 uses the AL(always)condition code.-- ibch_holdp2<=‘1’WHEN(ibch_p3flagset=‘1’)--p3 setting flags AND(ip2bch=‘1’)ELSE--branch in p2 ‘0’;end synthesis;]]></pre>
權(quán)利要求
1.一種在具有一條流水線的處理器內(nèi)控制程序跳轉(zhuǎn)的方法,包括提供包括多個(gè)指令字的程序,至少一個(gè)所述字包括一個(gè)設(shè)置標(biāo)志指令,而且至少另一個(gè)所述指令字包括了一個(gè)在所述流水線內(nèi)跟隨所述至少一個(gè)設(shè)置標(biāo)志指令之后的跳轉(zhuǎn)指令;檢測(cè)至少一個(gè)這類情況此時(shí)一個(gè)或更多的由所述至少一個(gè)設(shè)置標(biāo)志指令所設(shè)置的標(biāo)志會(huì)影響所述至少一個(gè)跳轉(zhuǎn)指令的后續(xù)執(zhí)行;以及在所述流水線內(nèi)阻塞所述至少一個(gè)跳轉(zhuǎn)指令的執(zhí)行,至少直到由所述至少一個(gè)設(shè)置標(biāo)志指令所設(shè)置的所有標(biāo)志均被設(shè)置完畢為止。
2.如權(quán)利要求1的方法,其中檢測(cè)的動(dòng)作包括檢測(cè)何時(shí)所述至少一個(gè)設(shè)置標(biāo)志指令處于所述至少一個(gè)跳轉(zhuǎn)指令的預(yù)定增量?jī)?nèi);以及生成一個(gè)信號(hào)。
3.如權(quán)利要求2的方法,其中阻塞的動(dòng)作包括檢測(cè)所述信號(hào);以及在檢測(cè)到信號(hào)時(shí),在所述流水線的執(zhí)行階段內(nèi)將所述至少一個(gè)跳轉(zhuǎn)指令阻塞一個(gè)指令周期。
4.如權(quán)利要求3的方法,其中所述至少一個(gè)跳轉(zhuǎn)指令包括有條件轉(zhuǎn)移指令。
5.一種在流水線化的處理器中控制程序轉(zhuǎn)移的方法,包括提供一個(gè)包括多個(gè)指令字的指令集,所述的多個(gè)指令字包括至少一個(gè)設(shè)置標(biāo)志指令字以及至少一個(gè)轉(zhuǎn)移指令字,所述至少一個(gè)設(shè)置標(biāo)志指令字在所述指令集內(nèi)先于所述的至少一個(gè)轉(zhuǎn)移指令字;在所述指令集內(nèi)定義至少一種聯(lián)鎖功能,其中在所述設(shè)置標(biāo)志指令字以預(yù)定增量而先于所述的至少一個(gè)轉(zhuǎn)移指令字時(shí),由所述至少一個(gè)設(shè)置標(biāo)志指令字所設(shè)置的標(biāo)志才能為所述處理器所識(shí)別;以及在所述處理器上運(yùn)行所述指令集。
6.如權(quán)利要求5的方法,其中所述增量包括一個(gè)處理器周期。
7.如權(quán)利要求5的方法,進(jìn)一步包括了基于至少一個(gè)參數(shù)的值而確定所述增量的值,所述的至少一個(gè)參數(shù)至少部分地涉及出現(xiàn)于流水線的至少一個(gè)階段的指令字的類型。
8.一種由包括下列步驟所綜合的處理器設(shè)計(jì)方法編輯特定于該設(shè)計(jì)的一個(gè)第一文件以包括至少一個(gè)后續(xù)以至少一個(gè)跳轉(zhuǎn)指令的設(shè)置標(biāo)志指令,所述至少一個(gè)跳轉(zhuǎn)指令的執(zhí)行至少部分地由被所述至少一個(gè)設(shè)置標(biāo)志指令所設(shè)置的標(biāo)志所確定;定義至少一個(gè)庫(kù)文件的位置;使用所述第一文件、所述庫(kù)文件以及用戶輸入信息而生成一個(gè)稿本;運(yùn)行所述稿本以生成一個(gè)定制的描述語(yǔ)言模型;以及基于所述描述語(yǔ)言模型而綜合所述設(shè)計(jì)。
9.如權(quán)利要求8的方法,其中綜合的動(dòng)作包括基于所述定制的描述語(yǔ)言模型而運(yùn)行綜合稿本。
10.如權(quán)利要求9的方法,進(jìn)一步包括生成一個(gè)用以仿真的第二文件,并用所述第二文件仿真所述設(shè)計(jì)。
11.如權(quán)利要求10的方法,進(jìn)一步包括了基于所述仿真而評(píng)估設(shè)計(jì)的可接受性的動(dòng)作。
12.如權(quán)利要求11的方法,進(jìn)一步包括了修訂設(shè)計(jì)以產(chǎn)生一個(gè)經(jīng)修訂的設(shè)計(jì)、并將所述經(jīng)修訂的設(shè)計(jì)再次綜合的動(dòng)作。
13.如權(quán)利要求8的方法,其中編輯的動(dòng)作包括了選擇多個(gè)相應(yīng)于所述設(shè)計(jì)的輸入?yún)?shù)的動(dòng)作,所述參數(shù)包括(i)一寄存器配置;和(ii)一存儲(chǔ)器接口配置。
14.一種機(jī)器可讀數(shù)據(jù)存儲(chǔ)設(shè)備,包括一種適于儲(chǔ)存多個(gè)數(shù)據(jù)位的數(shù)據(jù)存儲(chǔ)媒體;和一個(gè)以多個(gè)數(shù)據(jù)位表現(xiàn)并儲(chǔ)存于所述數(shù)據(jù)存儲(chǔ)媒體中的計(jì)算機(jī)程序,所述程序適于運(yùn)行在計(jì)算機(jī)系統(tǒng)的處理器上并綜合集成電路邏輯,以用于具有一條流水線并包括一個(gè)指令集的處理器,該指令集有至少一個(gè)設(shè)置標(biāo)志指令,至少一個(gè)轉(zhuǎn)移指令以及至少一個(gè)在其之間形成的聯(lián)鎖,其中所述至少一個(gè)聯(lián)鎖包括用于檢測(cè)至少一次這類情況的裝置此時(shí)一個(gè)或更多的由所述設(shè)置標(biāo)志指令所設(shè)置的標(biāo)志會(huì)影響所述至少一個(gè)跳轉(zhuǎn)指令的后續(xù)執(zhí)行;用于在所述流水線內(nèi)阻塞所述至少一個(gè)跳轉(zhuǎn)指令的執(zhí)行、至少直到由所述至少一個(gè)設(shè)置標(biāo)志指令所設(shè)置的所有標(biāo)志均被設(shè)置完畢為止的裝置。
15.如權(quán)利要求14的數(shù)據(jù)存儲(chǔ)設(shè)備,其中所述的數(shù)據(jù)存儲(chǔ)媒體為只讀光盤存儲(chǔ)器(CD-ROM),而且所述的多個(gè)數(shù)據(jù)位包括了所述程序的目標(biāo)代碼表達(dá)式。
16.一種數(shù)字處理器,包括具有一條多階段指令流水線的處理器核心,所述核心適于解碼并運(yùn)行一個(gè)包括了多個(gè)指令字的指令集;一個(gè)在所述處理器核心與一個(gè)信息存儲(chǔ)設(shè)備之間的數(shù)據(jù)接口;一個(gè)包括了多個(gè)指令字的指令集,至少一個(gè)所述指令字包括了一個(gè)設(shè)置標(biāo)志指令,而且至少另一個(gè)所述指令字包括了一個(gè)跳轉(zhuǎn)指令,該跳轉(zhuǎn)指令在所述流水線內(nèi)跟隨于所述的至少一個(gè)設(shè)置標(biāo)志指令,所述處理器與所述指令集進(jìn)一步適配于(i)檢測(cè)至少一次這類情況此時(shí)一個(gè)或更多的由所述至少一個(gè)設(shè)置標(biāo)志指令所設(shè)置的標(biāo)志會(huì)影響所述至少一個(gè)跳轉(zhuǎn)指令的后續(xù)執(zhí)行;(ii)在所述流水線內(nèi)阻塞所述至少一個(gè)跳轉(zhuǎn)指令的執(zhí)行,至少直到由所述至少一個(gè)設(shè)置標(biāo)志指令所設(shè)置的所有標(biāo)志均被設(shè)置完畢為止。
17.如權(quán)利要求14的處理器,其中所述至少一個(gè)跳轉(zhuǎn)指令包括一個(gè)具有相應(yīng)邏輯條件的有條件轉(zhuǎn)移指令,由所述至少一個(gè)有條件轉(zhuǎn)移指令所指定、跳轉(zhuǎn)到所述信息存儲(chǔ)設(shè)備內(nèi)的地址的執(zhí)行,由所述邏輯條件所確定。
18.一種具有至少一條流水線及相應(yīng)數(shù)據(jù)存儲(chǔ)設(shè)備的數(shù)字處理器,其中在所述至少一條流水線內(nèi)指令的執(zhí)行由包括以下步驟的方法所控制提供包括多個(gè)指令字的一個(gè)指令集,至少一個(gè)所述字包括一個(gè)設(shè)置標(biāo)志指令,而且至少另一個(gè)所述指令字包括了一個(gè)在所述流水線內(nèi)跟隨所述至少一個(gè)設(shè)置標(biāo)志指令之后的跳轉(zhuǎn)指令;檢測(cè)至少一個(gè)這類情況此時(shí)一個(gè)或更多的由所述至少一個(gè)設(shè)置標(biāo)志指令所設(shè)置的標(biāo)志會(huì)影響所述至少一個(gè)跳轉(zhuǎn)指令的后續(xù)執(zhí)行;和在所述流水線內(nèi)阻塞所述至少一個(gè)跳轉(zhuǎn)指令的執(zhí)行,至少直到由所述至少一個(gè)設(shè)置標(biāo)志指令所設(shè)置的所有標(biāo)志均被設(shè)置完畢為止。
19.如權(quán)利要求18的方法,其中所述的至少一條流水線包括一條至少3階段流水線,該3階段流水線包括了取指令、解碼及執(zhí)行階段。
20.一種在具有一條多階段流水線以及相應(yīng)存儲(chǔ)設(shè)備的數(shù)字處理器的程序內(nèi)控制轉(zhuǎn)移的方法,包括在所述數(shù)據(jù)存儲(chǔ)設(shè)備中儲(chǔ)存一個(gè)指令集,所述指令集包括多個(gè)指令字,至少一個(gè)所述字包括一個(gè)設(shè)置標(biāo)志指令,而且至少另一個(gè)所述指令字包括了一個(gè)在所述流水線內(nèi)稍前階段的跳轉(zhuǎn)指令,該稍前階段先于所述至少一個(gè)設(shè)置標(biāo)志指令;檢測(cè)至少一個(gè)這類情況此時(shí)一個(gè)或更多的由所述至少一個(gè)設(shè)置標(biāo)志指令所設(shè)置的標(biāo)志會(huì)影響所述至少一個(gè)跳轉(zhuǎn)指令的后續(xù)執(zhí)行;和在所述流水線內(nèi)將所述至少一個(gè)跳轉(zhuǎn)指令的執(zhí)行阻塞至少一個(gè)指令周期。
21.一種用于綜合用在數(shù)字處理器內(nèi)的邏輯設(shè)計(jì)的裝置,包括一個(gè)中央處理器;一個(gè)可操作地連接于所述中央處理器的數(shù)據(jù)存儲(chǔ)設(shè)備,所述數(shù)據(jù)存儲(chǔ)設(shè)備適配于儲(chǔ)存并檢索一個(gè)計(jì)算機(jī)程序;一個(gè)輸入設(shè)備,適配于根據(jù)來(lái)自于所述系統(tǒng)的用戶的輸入而生成信號(hào);一個(gè)計(jì)算機(jī)程序,儲(chǔ)存于所述數(shù)據(jù)存儲(chǔ)設(shè)備,所述程序適于接收所述信號(hào)并允許所述用戶對(duì)特定于該設(shè)計(jì)的一個(gè)第一文件輸入信息,以包括至少一個(gè)跳轉(zhuǎn)指令,所述至少一個(gè)跳轉(zhuǎn)指令包括至少一個(gè)跳轉(zhuǎn)聯(lián)鎖,所述至少一個(gè)跳轉(zhuǎn)聯(lián)鎖適于阻塞在所述指令集內(nèi)至少一個(gè)指令的執(zhí)行;定義至少一個(gè)庫(kù)文件的位置;使用所述第一文件、所述庫(kù)文件以及用戶輸入信息而生成一個(gè)稿本;運(yùn)行所述稿本以生成一個(gè)定制的描述語(yǔ)言模型;以及基于所述描述語(yǔ)言模型而綜合所述設(shè)計(jì)。
22.一種數(shù)字處理器,包括具有一條多階段數(shù)據(jù)流水線的處理裝置,所述處理裝置適配于解碼并執(zhí)行一個(gè)包括多個(gè)指令字的指令集;用于儲(chǔ)存指令集的裝置;數(shù)據(jù)接口裝置,用于在所述處理裝置與所述用于儲(chǔ)存數(shù)據(jù)的裝置之間傳輸數(shù)據(jù);和一個(gè)指令集,儲(chǔ)存于所述用于的裝置中,包括一個(gè)第一指令字,適于在被執(zhí)行時(shí)改變至少一個(gè)在所述處理裝置內(nèi)的變量的狀態(tài);一個(gè)第二指令字,適于影響在所述指令集內(nèi)的轉(zhuǎn)移,所述轉(zhuǎn)移至少部分地依賴于所述至少一個(gè)變量的狀態(tài);以及聯(lián)鎖裝置,用于檢測(cè)這種情況此時(shí)所述轉(zhuǎn)移會(huì)受到所述至少一個(gè)變量的狀態(tài)的影響,并且在這種情況被檢測(cè)到時(shí)阻塞所述第二指令字的執(zhí)行。
23.一種用于綜合用在數(shù)字處理器內(nèi)的邏輯設(shè)計(jì)的裝置,包括用于處理數(shù)據(jù)的裝置;用于儲(chǔ)存數(shù)據(jù)的裝置,所述用于儲(chǔ)存的裝置可操作地連接于所述用于處理的裝置,并且適配于儲(chǔ)存并檢索一個(gè)計(jì)算機(jī)程序;用于輸入信息的裝置,可操作地連接于所述用于處理的裝置,所述用于輸入信息的裝置適配于根據(jù)來(lái)自所述系統(tǒng)用戶的輸入而生成信號(hào);一個(gè)計(jì)算機(jī)程序,儲(chǔ)存于所述數(shù)據(jù)存儲(chǔ)設(shè)備,所述程序適于檢索所述信號(hào)而且包括對(duì)特定于該設(shè)計(jì)的一個(gè)第一文件輸入信息、以包括至少一個(gè)跳轉(zhuǎn)聯(lián)鎖的裝置,所述的至少一個(gè)跳轉(zhuǎn)聯(lián)鎖包括用于檢測(cè)何時(shí)一個(gè)跳轉(zhuǎn)指令會(huì)受到一個(gè)先前設(shè)置標(biāo)志指令的影響的裝置;和用于阻塞所述設(shè)置標(biāo)志指令的執(zhí)行、直到所述跳轉(zhuǎn)指令已被執(zhí)行為止的裝置;用于定義至少一個(gè)庫(kù)文件的位置的裝置;用于使用所述第一文件、所述庫(kù)文件以及用戶輸入信息而生成一個(gè)稿本的裝置;用于運(yùn)行所述稿本以生成一個(gè)定制的描述語(yǔ)言模型的裝置;和用以基于所述描述語(yǔ)言模型而綜合所述設(shè)計(jì)的裝置。
24.一種在具有一條流水線的處理器內(nèi)控制程序跳轉(zhuǎn)的方法,包括提供適于運(yùn)行在所述處理器上的一個(gè)指令集,包括一個(gè)第一設(shè)置標(biāo)志指令;一個(gè)第二設(shè)置標(biāo)志指令;一個(gè)跳轉(zhuǎn)指令,所述跳轉(zhuǎn)指令在所述流水線中跟隨于所述第一設(shè)置標(biāo)志指令及第二設(shè)置標(biāo)志指令之后并至少部分地依賴于由所述第一及第二設(shè)置標(biāo)志指令所設(shè)置的標(biāo)志,所述第二設(shè)置標(biāo)志指令在所述跳轉(zhuǎn)指令之前一個(gè)預(yù)定增量?jī)?nèi);解碼所述第一設(shè)置標(biāo)志指令;執(zhí)行所述第一設(shè)置標(biāo)志指令,從而在所述處理器內(nèi)設(shè)置至少一個(gè)標(biāo)志;解碼所述第二設(shè)置標(biāo)志指令;在對(duì)其加以執(zhí)行之前阻塞所述第二設(shè)置標(biāo)志指令;解碼所述跳轉(zhuǎn)指令;以及至少部分地基于所述至少一個(gè)標(biāo)志而執(zhí)行所述跳轉(zhuǎn)指令。
25.如權(quán)利要求24的方法,其中所述增量包括一個(gè)處理器指令周期。
26.如權(quán)利要求24的方法,其中所述處理器流水線包括一條至少三階段的流水線,該流水線包括了取指令、解碼及執(zhí)行階段。
27.如權(quán)利要求24的方法,其中設(shè)置至少一個(gè)指令的動(dòng)作包括以所述處理器的算術(shù)邏輯單元(ALU)而設(shè)置多個(gè)標(biāo)志。
28.如權(quán)利要求24的方法,進(jìn)一步包括了分析所述第二設(shè)置標(biāo)志指令以確定由所述第二指令所設(shè)置的標(biāo)志會(huì)影響由所述跳轉(zhuǎn)指令所進(jìn)行的跳轉(zhuǎn)。
29.一種在具有一條流水線的處理器內(nèi)控制程序跳轉(zhuǎn)的方法,包括提供一個(gè)包括多個(gè)指令字的指令集,每個(gè)所述字都包括多位,至少一個(gè)所述字包括一個(gè)設(shè)置標(biāo)志指令,而且至少另一個(gè)所述指令字包括了一個(gè)在所述流水線內(nèi)跟隨所述至少一個(gè)設(shè)置標(biāo)志指令之后的跳轉(zhuǎn)指令;以多個(gè)數(shù)值中的一個(gè)而對(duì)所述至少一個(gè)跳轉(zhuǎn)指令的所述數(shù)據(jù)位賦值;檢測(cè)至少一個(gè)這類情況此時(shí)一個(gè)或更多的由所述至少一個(gè)設(shè)置標(biāo)志指令所設(shè)置的標(biāo)志會(huì)影響所述至少一個(gè)跳轉(zhuǎn)指令的后續(xù)執(zhí)行;和當(dāng)所述至少一個(gè)跳轉(zhuǎn)指令被解碼時(shí),基于所述至少一個(gè)數(shù)據(jù)位的所述被賦予的值,而控制在所述流水線內(nèi)至少一個(gè)后續(xù)指令的執(zhí)行;其中在所述流水線內(nèi)所述至少一個(gè)跳轉(zhuǎn)指令的執(zhí)行被阻塞,至少直到由所述至少一個(gè)設(shè)置標(biāo)志指令所設(shè)置的所有標(biāo)志均被設(shè)置完畢為止。
全文摘要
一種在流水線化的處理器(CPU)或用戶可定制微處理器內(nèi)用于控制及執(zhí)行指令的改進(jìn)方法及裝置。在本發(fā)明第一方面,公布了一種允許跳轉(zhuǎn)指令聯(lián)鎖的用戶控制的改進(jìn)方法。在一個(gè)實(shí)施例中,要求在一個(gè)設(shè)置標(biāo)志的指令與一個(gè)作為該標(biāo)志結(jié)果而進(jìn)行的轉(zhuǎn)移之間最少有一個(gè)周期;用聯(lián)鎖來(lái)檢測(cè)其前面有設(shè)置標(biāo)志指令的轉(zhuǎn)移,以確保直接在該轉(zhuǎn)移之前的這個(gè)指令不會(huì)影響轉(zhuǎn)移結(jié)果。在第二實(shí)施例中,跟隨在一個(gè)其標(biāo)志會(huì)影響跳轉(zhuǎn)結(jié)果的設(shè)置標(biāo)志指令之后的跳轉(zhuǎn)指令被阻塞,直到所有標(biāo)志均被設(shè)置完畢。在本發(fā)明第二方面,公布了一種包括了上述聯(lián)鎖的綜合處理器設(shè)計(jì)的方法。還公布了使用上述方法所綜合的示范性門邏輯,以及一個(gè)能夠?qū)崿F(xiàn)這些方法的計(jì)算機(jī)系統(tǒng)。
文檔編號(hào)G06F9/318GK1357122SQ00808459
公開(kāi)日2002年7月3日 申請(qǐng)日期2000年5月12日 優(yōu)先權(quán)日1999年5月13日
發(fā)明者J·R·H·黑克威爾, J·桑德斯 申請(qǐng)人:Arc國(guó)際美國(guó)控股公司