国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      具有多種長度指令集體系結(jié)構(gòu)的可配置數(shù)據(jù)處理器的制作方法

      文檔序號:6403168閱讀:243來源:國知局
      專利名稱:具有多種長度指令集體系結(jié)構(gòu)的可配置數(shù)據(jù)處理器的制作方法
      優(yōu)先權(quán)與相關(guān)申請本申請主張如下優(yōu)先權(quán)2002年1月31日提交的名稱為“具有多種長度指令集體系結(jié)構(gòu)的可配置數(shù)據(jù)處理器”的60/353,647號美國臨時申請、2003年1月31日提交的同名10/356,129號美國申請,以及申請?zhí)枮镻CT/US03/02834(2003年8月7日賦予國際公布號WO 03/065165 A2)的PCT國際申請,其內(nèi)容在此全文引用以資參考。
      背景技術(shù)
      1.發(fā)明領(lǐng)字段本發(fā)明涉及數(shù)據(jù)處理器領(lǐng)字段,特別是涉及一種經(jīng)過改進(jìn)的數(shù)據(jù)處理器指令集體系結(jié)構(gòu)(instruction set architecture-ISA)及其相關(guān)的裝置和方法。
      2.背景技術(shù)已知現(xiàn)有技術(shù)中有多種技術(shù)手段利用數(shù)據(jù)處理器實現(xiàn)特定的功能(如FFT、卷積編碼、以及其他計算密集形的應(yīng)用程序)。這些技術(shù)手段通常分為三大類(i)“固定”硬件;(ii)軟件;和(iii)用戶可配置。
      現(xiàn)有技術(shù)中所謂的“固定”體系結(jié)構(gòu)處理器的特征是加入特殊指令和/或硬件以加速某些特定的功能。由于具有這種體系結(jié)構(gòu)的處理器事先已經(jīng)基本定型,并且對于處理器的設(shè)計者來說,無法得知其終端應(yīng)用軟件的具體內(nèi)容,為了加速運算而加入的特殊指令在性能上沒有得到優(yōu)化。而且,目前現(xiàn)有技術(shù)的處理器中的硬件實現(xiàn)是無彈性的,并且,當(dāng)沒有被積極地用于編碼時,邏輯線路通常不被其他用于“通用”計算的設(shè)備所使用,從而使處理器在晶圓面積、門數(shù)和耗能方面大大超過其需要。還有,對于這種“固定”的手段,不能對指令集體系結(jié)構(gòu)增加后續(xù)的擴(kuò)展。
      可選地,基于軟件的實現(xiàn)方案具有在靈活性方面的優(yōu)勢,特別是只要通過改變軟件程序就可以更改函數(shù)運算。由于程序編寫者擁有有高級編譯器和調(diào)試工具,軟件的譯碼也具有優(yōu)勢。但是,這種工具方便的靈活性和可用性是以降低效率(例如循環(huán)計數(shù))為代價獲得的,因為與相對應(yīng)的硬件解決方案相比,軟件解決方案通常要使用更多的循環(huán)來完成所謂的“用戶可配置”的可擴(kuò)展的數(shù)據(jù)處理器,如本發(fā)明的受讓人生產(chǎn)的ARCtangentTM,允許用戶對處理器配置進(jìn)行定制,從而將最終設(shè)計的某一項或多項屬性優(yōu)化。在使用用戶可配置的可擴(kuò)展的數(shù)據(jù)處理器時,在設(shè)計/合成階段就已知終端應(yīng)用軟件了,用戶對處理器進(jìn)行配置,就能夠得到預(yù)想的功能和屬性。用戶還可適當(dāng)?shù)貙μ幚砥鬟M(jìn)行配置,使之僅包含執(zhí)行功能所必需的硬件資源,從而得到一種比固定體系結(jié)構(gòu)的處理器更高的硅效率(節(jié)能)的體系結(jié)構(gòu)。
      ARCtangent處理器是一種用于ASIC、系統(tǒng)芯片(system-on-chip,SoC)和FPGA集成的用戶可定制的32位RISC內(nèi)核。由于它是可合成、可配置和可擴(kuò)展的,開發(fā)者可以對該體系結(jié)構(gòu)進(jìn)行改進(jìn)和擴(kuò)展,使其更好地應(yīng)用于特定的應(yīng)用軟件。它包括一個帶有4階段執(zhí)行流水線(four-stage executionpipeline)的32位RISC體系結(jié)構(gòu)。指令集、寄存器文件、條件碼、緩存、總線和其他體系結(jié)構(gòu)特征都是用戶可配置和可擴(kuò)展的。它具有一個32x32位核心寄存器文件,如果需要可以加倍。此外,還可以使用大量的輔助寄存器(可達(dá)到2E32)。該處理器核心的功能元件包括算術(shù)及邏輯部件(ALU)、寄存器文件(如32x32)、程序計數(shù)器(PC)、取指令(i-fetch)接口邏輯,以及各種狀態(tài)鎖存器(stage latch)。
      即使在諸如A4的可配置處理器中,現(xiàn)有技術(shù)的指令集(例如那些采用單字長指令的指令集)的特點是用于支持該指令集的編碼尺寸相對較大,因而需要大量的存儲開銷,因而受到限制。這種開銷必然導(dǎo)致使用超過原本需要量的額外的存儲能力,以及更大的晶圓面積和能耗。相反地,對于一個給定的固定晶圓面積或存儲能力,利用剩余存儲執(zhí)行其他功能的能力受到了限制。這一問題對于可配置處理器尤為突出,因為這些限制本身就表明設(shè)計者能夠向指令集增加的擴(kuò)展指令(擴(kuò)展)的數(shù)量和/或類型受到了限制。這一問題使用戶可配置原本的用途落空,即,用戶能夠根據(jù)其特殊的應(yīng)用軟件和自由地增加各種不同的擴(kuò)展指令并符合其設(shè)計制約。
      還有,隨著32位的體系結(jié)構(gòu)越來越廣泛地應(yīng)用于深度嵌入式系統(tǒng),程序代碼密度對于系統(tǒng)成本有著直接的影響。比較典型的是,在一個系統(tǒng)芯片設(shè)備的硅晶面積中,存儲器就占了很大比例。
      作為前述的一個例子,表1列舉了一個現(xiàn)有的典型的RISC處理器指令集。盡管還存在額外的單獨操作數(shù)指令的空間,該指令集僅有兩個剩余的擴(kuò)充槽?;旧蟻碚f,在未來應(yīng)用(例如DSP硬件)或希望增加許多自己的擴(kuò)展的用戶等方面的發(fā)展余地不大。
      表1
      可變長度ISA現(xiàn)有技術(shù)中已經(jīng)提出了很多關(guān)于可變或多種長度指令方面的技術(shù)方案。例如,1978年7月4日授予Kancler的名稱為“可變體系結(jié)構(gòu)數(shù)字計算機(jī)”的美國專利4,099,229。該專利公開了一種可變體系結(jié)構(gòu)數(shù)字計算機(jī),通過執(zhí)行可變長度指令提供對導(dǎo)彈的實時控制。該可變長度指令是借助一微程序控制處理器和一種指令字節(jié)串概念而專為此應(yīng)用而優(yōu)化的。該指令集是可變長度的,并經(jīng)過優(yōu)化通過兩種途徑解決計算問題。第一,一條指令內(nèi)所包含的信息量與指令的復(fù)雜性成正比,格式最短的被賦予執(zhí)行最頻繁的指令以節(jié)省執(zhí)行時間。第二,借助微程序控制機(jī)制和彈性指令格式,通過存取適當(dāng)?shù)奈⒗谐绦颍惶峁┨囟ㄓ嬎銘?yīng)用需要的指令,其結(jié)果是節(jié)省了存儲器的空間。
      1996年1月30日授予Sato等人的名稱為“由用于同時對多個可變長度指令譯碼的指令長度譯碼電路構(gòu)成的緩沖存儲器和數(shù)據(jù)處理器”的美國專利申請5,488,710中公開了一種緩沖存儲器和一種包括有該緩沖存儲器的數(shù)據(jù)處理器,用于處理至少一條來自存儲器的可變長度指令并將處理信息輸出到一個控制單元,如一個中央處理器(CPU)。該緩沖存儲器包括一個對來自存儲器的可變長度指令的指令長度進(jìn)行譯碼的單元,以及一個用于儲存來自存儲器的可變長度指令和經(jīng)過譯碼的指令長度信息的單元。該可變長度指令和指令長度信息被送至控制單元。相應(yīng)地,緩沖存儲器使控制單元能夠同時對多個可變長度指令進(jìn)行譯碼,從表面上看實現(xiàn)了更高的處理速度。
      1997年6月3日授予Bealkowski等的名稱為“使用壓縮指令的方法和裝置”的美國專利5,636,352號公開了一種處理器,該處理器包括以下步驟接收一個指令,該指令包括一指令標(biāo)識符和多個指令同義詞;為每個指令同義詞產(chǎn)生至少一個全寬度指令;以及處理器執(zhí)行生成的全寬度指令。使用了一種標(biāo)準(zhǔn)指令單元,用來容納系統(tǒng)處理器將要執(zhí)行的指令。對于PowerPC 601 RISC型的微處理器來說,指令單元的寬度為32位。指令為四字節(jié)長度(32位)并且是字對正的。指令字的第0-5位表示主要操作碼。某些指令可能還有第二操作碼,對第一操作碼進(jìn)一步限定。指令的剩余位包含一個或多個用于不同指令格式的字段。壓縮指令單元由壓縮單元說明符(Condensed Cell Specifier-CCS)和一個或多個指令同義詞(InstructionSynonyms-IS)IS1、IS2...ISn構(gòu)成。典型的指令同義詞是一個(在總位數(shù)中)更短的值,用于代表一個全寬度指令單元的值。
      1998年10月6日授予Miller等的名稱為“處理器的指令壓縮和解壓縮系統(tǒng)和方法”的美國專利5,636,352號公開了一種壓縮和解壓縮包含在具有多個處理單元的處理器的可變長度指令包中的可變長度指令的系統(tǒng)及其方法。提供了一個壓縮系統(tǒng),包括一用于生成一含有多個指令的指令包的系統(tǒng);一用于將一具一預(yù)定長度的壓縮指令分配給一指令包內(nèi)的指令;一對應(yīng)于一較頻繁使用指令的更短的壓縮指令;和一個用于生成一包含有壓縮指令的指令包的系統(tǒng),這些壓縮指令對應(yīng)處理單元的指令。解壓縮系統(tǒng)包括一個用于在多個存儲區(qū)字段存儲多個指令包的系統(tǒng),一個用于生成一個在存儲系統(tǒng)中指向一個選定的可變長度指令包的地址的系統(tǒng),以及一個解壓縮系統(tǒng),將該選定的指令包內(nèi)的壓縮指令解壓縮,為每個處理單元生成一個可變長度指令。該解壓縮系統(tǒng)還可以具有一個用于從該解壓縮系統(tǒng)向每個處理單元為該可變長度指令選擇路徑的系統(tǒng)。
      1999年3月9日授予Raje等的名稱為“利用每條指令內(nèi)的指令邊界標(biāo)記為可變長度指令定序和譯碼的方法和裝置”的美國專利5,881,260號公開了一種將處理器內(nèi)的可變長度指令譯碼的裝置和方法,來自指令緩沖存儲器的一隊可變長度指令被裝入一個指令緩沖器,并且指令中指示出該隊可變長度指令的指令邊界的起始位被裝入起始位緩沖器。一個第一移位寄存器被裝入起始位并對應(yīng)一較低的程序計數(shù)值被移位,該計數(shù)值也用于對指令緩沖器進(jìn)行移位。檢測第一寄存器內(nèi)起始位的下一指令邊界的位置,獲取當(dāng)前指令的長度。當(dāng)前指令的長度被加入較低程序計數(shù)值的當(dāng)前值,以便為較低程序計數(shù)獲取下一連續(xù)值,該較低程序計數(shù)被裝入較低程序計數(shù)寄存器。將起始位裝入一第二位移寄存器,對應(yīng)較低程序計數(shù)值將起始位移位,并檢測何時在指令緩沖器中只留有一條指定,由此確定一較高程序計數(shù)值,2001年3月27日授予Otani等的名稱為“執(zhí)行具有兩種不同長度指令代碼的處理器和輸入該指令代碼的設(shè)備”的美國專利6,209,079號公開了一種具有兩種指令長度(16位和32位)的處理器,和定位該指令代碼的方法。這些方法限于以下兩種類型(1)兩個16位指令代碼被存儲于32位字邊界內(nèi),和(2)一個單一32位指令代碼被存儲于該32位字邊界內(nèi)。僅在該32位字邊界內(nèi)規(guī)定一個分支轉(zhuǎn)移目的地址。每條指令代碼的MSB用作一個1位指令長度標(biāo)識符,控制該指令代碼的執(zhí)行序列。這就為處理器內(nèi)由指令取部分向指令譯碼部分提供兩條跳轉(zhuǎn)路徑,從表面上達(dá)到代碼和硬件的減少,從而提高了運算速度。
      2001年8月28日授予Killian等的名稱為“高數(shù)據(jù)密度RISC處理器”的美國專利6,282,633號公開了一種RISC處理器,該處理器所執(zhí)行的指令集不僅試圖對執(zhí)行程序所需要的指令數(shù)目,時鐘周期和每條指令的平均時鐘數(shù)之間的關(guān)系進(jìn)行優(yōu)化,還試圖優(yōu)化等式S=IS*BI,其S為程序指令的位數(shù)大小,IS是代表程序所需的指令的靜態(tài)數(shù)量(不是執(zhí)行所需要的數(shù)量),BI是每條指令的平均位數(shù)。該技術(shù)手段的目的是在盡量減少時鐘周期和每條指令的平均時鐘數(shù)的情況下減少BI和IS。該處理器尋求對基于RISC原則的固定長度高性能編碼提供理想代碼密度,包括一個帶裝入/存儲的通用寄存器體系結(jié)構(gòu)。還有,該處理器采用可變長度編碼。
      2002年10月8日授予Otani等的名稱為“執(zhí)行兩種不同長度的指令碼的處理器和輸入該指令碼的設(shè)備”的美國專利6,463,520號公開了一種有助于處理器中指令碼的處理的技術(shù)。存儲器件設(shè)置有由多個2N位字邊界構(gòu)成,其中N大于等于一。該發(fā)明的處理器執(zhí)行2N位長度和N位長度的指令代碼。指令代碼被存儲于存儲器件中,存儲方式是2N位字邊界包括一個單一2N位指令碼或兩個N位指令碼。每條指令中最有效位作為指令格式標(biāo)識符控制指令代碼的執(zhí)行(或譯碼)隊列。結(jié)果是從處理器的取指令部至指令譯碼部僅需要兩條傳輸路徑,從而減少了處理器的硬件要求并增加了系統(tǒng)吞吐量。
      1999年9月7日授予Hsu等的名稱為“可變長度指令、超標(biāo)量流水線處理器的分支轉(zhuǎn)移預(yù)測和取指令機(jī)制”的美國專利5,948,100號公開了處理器體系結(jié)構(gòu),包括一個引入單元(fetcher)、數(shù)據(jù)包單元(packet unit)和一個分支轉(zhuǎn)移目標(biāo)緩沖器。分支轉(zhuǎn)移目標(biāo)緩沖器設(shè)有一個以組聯(lián)合(setassociative)方式組織的標(biāo)記RAM(tag RAM)。對應(yīng)于接收一個尋址,標(biāo)記RAM中的多個組同時對預(yù)計要取的分支轉(zhuǎn)移指令進(jìn)行搜尋。數(shù)據(jù)包單元具有一個包含有指令的隊列,取出的緩沖塊存儲于該隊列中。隊列入口還具有指示指令序列的起始或最終數(shù)據(jù)是否包含在隊列入口的指示符,并且如果是,還具有一個指示該特點起始或最終數(shù)據(jù)字的偏移量。相應(yīng)地,數(shù)據(jù)包單元將指令序列的數(shù)據(jù)字連接成一個連續(xù)的塊1999年2月9日授予Faraboschi等的名稱為“在一個包含指令壓縮指針的指令緩沖器中檢測到一個為寬指令文字處理器機(jī)構(gòu)壓縮指令的遺漏條件下存儲和擴(kuò)展可變長度程序指令的方法和裝置”的美國專利5,870,576號公開了一種計算機(jī)系統(tǒng)中存儲和擴(kuò)展寬指令字的方法和裝置。該計算機(jī)系統(tǒng)包括一個存儲器和一個指令緩沖器。程序的壓縮指令字被存入存儲器的代碼堆段(code heap segment),并且代碼指針被存入存儲器內(nèi)的代碼指針段(code pointer segment)。每個代碼指針都包含一個指向一個壓縮指令字的指針。程序的一部分作為擴(kuò)展指令字存儲于指令緩沖區(qū)。在程序的執(zhí)行過程中,一個指令字在指令緩沖器中被存取。當(dāng)需要執(zhí)行的指令字不在指令緩沖器中時,指示緩沖器遺漏,對應(yīng)于需要的指令字的代碼指針在存儲器的代碼指針段中被存取。使用代碼指針存取存儲器的代碼堆段中對應(yīng)需要的指令字的壓縮指令字。壓縮指令字被擴(kuò)展,以便提供一擴(kuò)展指令字,該擴(kuò)展指令字被裝入指令緩沖器并被存取執(zhí)行。
      1999年1月26日授予Battle等的名稱為“使用具有源操作碼的操作碼規(guī)約的可變長度指令作為在先指令的多媒體處理器”的美國專利5,864,704號公開了一種將多種媒體功能納入一單片結(jié)構(gòu)的媒體引擎。該媒體引擎包括一個與主機(jī)CPU共享一個存儲器的信號處理器,還包括多個控制模塊,每個控制模塊負(fù)責(zé)七個多媒體功能中的一個。該信號處理將主機(jī)CPU放入共享存儲器中的指令恢復(fù)并對其作出響應(yīng),從而通過片上控制模塊之一使這些指令被執(zhí)行。信號處理器利用一具有可移動分區(qū)的指令寄存器,該移動分區(qū)允許將一較長指令與一較短指令配對。該信號處理器通過如下方式減少對存儲器讀入口的需求量將數(shù)據(jù)放入指令寄存器,數(shù)據(jù)在該指令寄存器中可以被直接路由到算術(shù)邏輯單元執(zhí)行,在第一個指令的目標(biāo)地址與第二指令的源地址匹配時,默認(rèn)地將第二指令源分類符放置于執(zhí)行第一指令的ALU的結(jié)果寄存器。
      1998年9月15日授予Thusoo等的名稱為“超標(biāo)量處理器內(nèi)可變長度指令的早期指令長度預(yù)譯碼”的美國專利5,809,272號公開了一種超標(biāo)量處理器,可以在一個時鐘周期內(nèi)分派兩條指令。第一條指令在一個大的指令緩沖器內(nèi)由指令字節(jié)譯碼。第個指令緩沖器被裝入在一個周期內(nèi)將被分派的第二指令的頭幾個字節(jié)的副本。在上一周期內(nèi)該第二指令緩沖器被用來確定分派到該上一周期的該第二指令的長度。然后該第二指令的長度被用來提取第三指令的首字節(jié),并且其長度也是確定的。然后第四條指令的首字節(jié)被定位。當(dāng)?shù)谝恢噶詈偷诙噶疃急环峙蓵r,第二緩沖器被裝入第一指令的若干字節(jié)。如果只分派第一指令,那么第二緩沖器被裝入第三指令的首字節(jié)。這樣第二緩沖器總是被裝入未分派指令的起始字節(jié)。起始字節(jié)在上一周期被找到。一旦激活,每個周期就可以分派兩條指令。
      盡管已經(jīng)存在該種種努力,仍然需要提供一種改進(jìn)的處理器指令集體系結(jié)構(gòu)(ISA)和相關(guān)功能,能夠(i)將指令集需要的開銷減少或壓縮到一個絕對最小值,從而減少內(nèi)存(及相關(guān)硬件硅晶)的需要量;(ii)在給定的約束條件下為設(shè)計者提供在增加用戶擴(kuò)展方面的最大彈性。這種改進(jìn)的ISA將能夠理想地在不使用模式轉(zhuǎn)換開關(guān)的情況下提供不同指令格式的自由格式混合,從而極大地簡化編程和編譯操作,并且有助于減少前述的開銷。

      發(fā)明內(nèi)容
      本發(fā)明通過提供一改進(jìn)的處理指令集體系結(jié)構(gòu)(ISA)及相關(guān)裝置和方法來滿足該需要。
      根據(jù)本發(fā)明的第一個方面,公開了一種改進(jìn)的處理指令集體系結(jié)構(gòu)(ISA)。該改進(jìn)的ISA主要包括多個具有第一長度的第一指令和多個具有第二長度的第二指令,該第二長度比該第一長度短。在本發(fā)明的一個典型實施例中,ISA即包括16位指令,也包括32位指令,當(dāng)他們包含在一個單一碼表中時,可以被32位內(nèi)核譯碼和處理。16位指令被有選擇地用于不需要32位指令的操作和/或可以減少循環(huán)計數(shù)的情況。這樣就為主處理器提供壓縮或精減的編碼大小,并提供更多數(shù)目的擴(kuò)充槽和可用的擴(kuò)展指令。
      根據(jù)本發(fā)明的第二個方面,公開了一種基于該ISA的改進(jìn)的處理器。該處理器主要包括多個具有第一長度的指令;多個具有第二長度的指令;以及一個為了適合從一具有第一和第二長度指令的單一程序中譯碼和處理該第一長度和第二長度指令的邏輯(線路)。在一本發(fā)明的一個典型實施例中,該處理器由一個具有取指令、譯碼、執(zhí)行和寫回等階段的用戶可配置的擴(kuò)展RISC處理器構(gòu)成,并同時具有16位和32位指令的譯碼和處理能力。該處理器僅需要數(shù)目有限片上存儲器(on-chip memory)支持該的使用基于“壓縮的”16位和32位ISA的編碼。
      根據(jù)本發(fā)明的第三個方面,公開了一種用于該ISA的改進(jìn)的指令調(diào)整器(instruction aligner)。在本發(fā)明的一個典型實施例中,該指令調(diào)整器被置于流水線的第一(取)階段,并使之適合于接收來自指令緩存的指令并生成基于該指令的16位和32位長的指令字。正確的或有效的指令被挑出并沿流水線向后傳遞。16位指令在調(diào)整器內(nèi)被有選擇地緩沖,從而允許處理器的32位體系結(jié)構(gòu)的適當(dāng)格式化。
      根據(jù)本發(fā)明的第四個方面,公開了一種改進(jìn)的在數(shù)字處理器指令流水線內(nèi)多種長度指令的處理方法。該方法主要包括以下步驟提供多個第一長度的第一指令;提供多個第二長度的第二指令,該第二指令至少有一部分包括長字部件;確定一給定長字何時包括一個第一指令或多個第二指令,以及該給定長字何時包括多個第二指令,將至少一個第二指令緩沖。在本發(fā)明的一個典型實施例中,該長字由具有16位邊界的32位的字構(gòu)成,并且指令的MSB被用于確定它們是16位指令還是32位指令。
      根據(jù)本發(fā)明的第五個方面,公開了一種改進(jìn)的將具有該改進(jìn)的ISA的處理器設(shè)計合成的方法。在本發(fā)明的一個典型實施例中,該方法包括以下步驟提供至少一個需要的功能;提供一個處理器設(shè)計工具,該處理器設(shè)計工具包括多個邏輯模塊,該設(shè)計工具適合于生成一個具有混合16位和32位ISA的處理器設(shè)計;為該設(shè)計工具提供多個對上設(shè)計的約束;至少利用該設(shè)計工具并至少部分地基于該多個約束生成一個混合ISA處理器設(shè)計。
      附圖簡要說明

      圖1是用圖形表示的使用本發(fā)明ISA的幾種指令格式的示例,包括LD、ST、分支轉(zhuǎn)移,和比較/分支轉(zhuǎn)移指令。
      圖2是用圖形表示的通用寄存器格式的示例。
      圖3是用圖形表示的分支轉(zhuǎn)移、MOV/CMP、ADD/SUB格式的示例。
      圖4是用圖形表示的BL指令格式示例。
      圖5是高位寄存器指令格式的MOV、CMP和ADD。
      圖6是指令BSET、BCLR、BTST和BMSK的流水線圖。
      圖7是16位和32位指令的選擇器復(fù)用器的示意圖。
      圖8是通過流水線階段2的數(shù)據(jù)通路的示意圖。
      圖9是在流水線階段3內(nèi)生成s2val_one_bit的示意圖。
      圖10是在流水線階段3內(nèi)生成2val_mask的示意圖。
      圖11是BRNE指令的流水線示意圖。
      圖12是‘fs1a’和‘s2offset’的階段1mux的示意圖。
      圖13是‘s1val’和‘s2val’的階段2數(shù)據(jù)通路的示意圖。
      圖14是BR和BBIT指令的階段2分支轉(zhuǎn)移目標(biāo)計算的示意圖。
      圖15是ALU和標(biāo)志計算的階段3數(shù)據(jù)流的示意圖。
      圖16是ABS指令的示意圖。
      圖17是移位加/減指令的示意圖。
      圖18是右移和遮蔽擴(kuò)展的示意圖。
      圖19是代碼壓縮體系結(jié)構(gòu)的示意圖。
      圖20是譯碼邏輯(階段2)配置的示意圖。
      圖21是處理器層次的示意22是取操作數(shù)的示意23是階段1的數(shù)據(jù)路徑的示意24是16位指令的擴(kuò)展邏輯的示意25是16位指令2的擴(kuò)展邏輯的示意26是當(dāng)Actionpoint/BRK時階段1的關(guān)門邏輯的示意27是當(dāng)單一指令步進(jìn)時階段1的關(guān)門邏輯的示意28是當(dāng)無指令時階段1的關(guān)門邏輯的示意29是取指令邏輯的示意30是長立即數(shù)的示意31是程序計數(shù)器開通邏輯的示意32是程序計數(shù)器開通邏輯2的示意33是指令未決邏輯的示意34是BRK指令譯碼的示意35是階段1的actionpoint/BRK遲延的示意36是階段2的actionpoint/BRK遲延邏輯的示意37是階段2數(shù)據(jù)路徑-源1操作數(shù)的示意38是階段2數(shù)據(jù)路徑-源2操作數(shù)的示意39是比例尋址的示意40是分支轉(zhuǎn)移目標(biāo)地址的示意41是Next PC信號生成(1)的示意42是Next PC信號生成(2)的示意43是狀態(tài)寄存器編碼的示意44是PC32寄存器編碼的示意45是Status32寄存器編碼的示意46是用圖形表示更新PC/Status寄存器。
      圖47是在等待延遲裝入時階段2的關(guān)門邏輯的示意48是階段2分支轉(zhuǎn)移停頓邏輯(branch holdup logic)的示意49是條件跳轉(zhuǎn)遲延(stall)的示意50是的取消延遲槽(killing delay slot)示意51是階段3數(shù)據(jù)路徑的示意2是本發(fā)明的處理器使用的運算器的示意53是地址生成的示意54是邏輯部件的示意55是算術(shù)/循環(huán)功能的示意56是階段3結(jié)果選擇的示意57是標(biāo)志生成的示意58是寫回地址生成(p3a)的示意59是MIN/MAX數(shù)據(jù)路徑的示意60是MIN/MAX指令的進(jìn)位標(biāo)志的示意61是圖形表示的第一操作-重置時對準(zhǔn)指令。
      圖62是圖形表示的第二操作-重置時對準(zhǔn)指令。
      圖63是圖形表示的第一操作-分支轉(zhuǎn)移后對準(zhǔn)指令。
      圖64是圖形表示的第二操作-分支轉(zhuǎn)移后對準(zhǔn)指令。
      圖65是圖形表示的圖64的操作。
      實施例詳述所有附圖中相同的標(biāo)記符號都代表相同的部件。在本申請中,術(shù)語“處理器”的含意包括所有能夠在至少按一個指令字執(zhí)行一個操作的集成電路或其他電子器件(或器件的集合),包括(但不限于)精簡指令集內(nèi)核(reducedinstruction set core-RISC)的處理器,例如本發(fā)明的受讓人制造的ARCtangentTMA4,A5,A600和A700用戶本配置內(nèi)核,中央處理單元(CPU),以及數(shù)字信號處理器(digital signal processor-DSP)。這些器件的硬件可以是被集成到一個基片(例如硅“片”),或是分布在兩個或更多的基片上。此外,處理器的各種功能可由與處理器相關(guān)的軟件或固件獨自地實現(xiàn)。
      此外,本技術(shù)領(lǐng)字段的普通專業(yè)人員應(yīng)該明白,術(shù)語“階段”在本申請中指流水線處理器中的各種連續(xù)的階段;即,階段1指第一流水線階段,階段2指第二流水線階段,如此等等。例如,這些階段可包括取指令、譯碼、執(zhí)行和寫回階段等。
      最后,本發(fā)明中提及的所有硬件描述語言(hardware description language-HDL)或超高速集成電路硬件描述語言(VHSIC HDL-VHDL)都包括其他硬件描述語言,如Verilog。此外,示例性的Synopsys合成引擎如DesignCompiler 2000.05(DC00)可被用于合成本文中提及的各個實施例,或其他合成引擎如Cadence Design Systems公司出品的Buildgates等均可以使用。IEEE標(biāo)準(zhǔn)1076.3-1997、IEEE標(biāo)準(zhǔn)VHDL合成包描述一種產(chǎn)業(yè)化的語言,用來規(guī)定基于硬件定義語言的設(shè)計和本技術(shù)領(lǐng)字段普通技術(shù)人員可以獲得的合成能力。
      概述本發(fā)明是一種新型的指令集體系結(jié)構(gòu)(ISA),允許設(shè)計者自由地在他們的32位用戶可配置處理器上混合16位和32位指令。ISA最重要的優(yōu)點在于能夠大比例地減少系統(tǒng)芯片(system-on-chip,SoC)上對存儲器的需求量,從而降低深度嵌入式應(yīng)用系統(tǒng)的能耗和成本,如無線通信和高容量用戶電子產(chǎn)品。本發(fā)明的受讓人根據(jù)經(jīng)驗確定,與現(xiàn)有技術(shù)的(非壓縮的)單一長度指令I(lǐng)SA相比,本發(fā)明的改進(jìn)ISA提供對ISA代碼的最多至40%的壓縮。
      本發(fā)明的(ARCompact)ISA主要特點包括旨在提供更大代碼密度的32位指令;用于最常用操作的16位指令集;不需要模式轉(zhuǎn)換的16位和32位指令的自由形式的混合。它們的意義在于,與正在競爭的模式轉(zhuǎn)換體系結(jié)構(gòu)相比,極大地減少了編譯器使用的復(fù)雜性。本指令集擴(kuò)展了可以由用戶加入基本方案(base-case)ARCtangentTM或其他處理器指令集的用戶擴(kuò)展指令的數(shù)量。現(xiàn)有的可配置處理器體系結(jié)構(gòu)早已允許用戶增加多達(dá)69條新指令以加速關(guān)鍵例行程序和算法程序。而本發(fā)明的改進(jìn)的ISA可以使用戶增加多至256條新指令。用戶還可以增加新的核心寄存器、輔助寄存器和條件碼。本發(fā)明的ISA不僅保持了現(xiàn)有的可配置處理器技術(shù)的用戶可定制這一特點,而且還有所增強(qiáng)和擴(kuò)展。
      本發(fā)明的改進(jìn)的ISA提供了高密度代碼,有助于大大減少嵌入式軟件對存儲器的需要量,如閃速存儲器卡(flash memory card),這對大容量用戶應(yīng)用軟件還說是一個重要因素。此外,通過使代碼適于更小的存儲器區(qū)字段,處理器對存儲器的存取勢必減少。如此就減少了能耗并延長了諸如MP3播放器、數(shù)字照相機(jī)和無線手機(jī)等移動設(shè)備的電池壽命。此外,本發(fā)明的ISA所提供的較短指令可以通過在一個時鐘周期內(nèi)執(zhí)行原本需要兩條或更多的指令才能完成的操作來提高系統(tǒng)吞吐量。這樣常??梢圆槐卦诟邥r鐘頻率上運行處理器就可以提高應(yīng)用性能。
      由于支持對16位和32位指令的自由使用,編譯和程序設(shè)計人員可以為給定任務(wù)使用最適合的指令,而不需要專門的代碼分區(qū)可系統(tǒng)模式管理。16位指令對相應(yīng)的32位指令直接替代提供一種立即代碼密度優(yōu)點,可以在整個應(yīng)用軟件的單個指令水平上實現(xiàn)。由于不需要編譯人員對代碼進(jìn)行重構(gòu),在更大指令范圍上達(dá)到了更大范圍上的優(yōu)化。應(yīng)用軟件的調(diào)試也更為直觀,因為新生成的代碼尾隨在原始源代碼結(jié)構(gòu)之后。
      本發(fā)明提供對基于ARCtangent處理器的32位和16位ISA的示范性的詳細(xì)說明,但應(yīng)該明白,本發(fā)明的優(yōu)點還可以用于許多不同類型和配置的數(shù)據(jù)處理器。本發(fā)明還描述了允許對16位和32位指令進(jìn)行譯碼和處理的數(shù)據(jù)和控制路徑配置。16位ISA的加入使更多的指令被插入并減少了代碼長度,從而提供了一種與現(xiàn)有的“單一長度(例如32位)ISA相比較而言對代碼一定程度的“壓縮”。
      本文中描述的處理器還具有能夠執(zhí)行混合在同一段源代碼內(nèi)的16位和32位指令的優(yōu)點。該改進(jìn)的ISA還允許設(shè)計者使用數(shù)量眾多的擴(kuò)展槽。
      還應(yīng)注意到此文中公開的內(nèi)容中引用了將前述的16/32位ISA功能納入的某些參數(shù)(“build”)的處理器設(shè)計的合成方法。本申請人于1999年10月14提交的(2000年4月20公開,公開號WO 00/22553)另一正在審查中的名稱為“管理半導(dǎo)體設(shè)計的配置和功能的方法和裝置”的美國專利申請09/418,663號中公開了合成具有用戶設(shè)定(即“soft”)指令集的集成電路的通用方法。該方法被置入本申請的受讓人制造“ARChitect”設(shè)計軟件,其內(nèi)容在此全文引用并作為本申請的一部分。但是應(yīng)該明白,其他軟件環(huán)境和技術(shù)方案可以和可表明一同利用。例如,2003年12月11日公開的公開號20030229482由Cook等人提交的名稱為“管理集成電路設(shè)計的裝置和方法”的美國專利申請中描述的面向?qū)ο蠹夹g(shù)手段也可以使用。因此,本申請中對前述ARChitect程序的特殊屬性的引用僅僅是說明性的。
      此外,盡管在此對關(guān)于在微機(jī)或其他類似處理器件上運行的算法或計算機(jī)程序的本發(fā)明的各個方面進(jìn)行了說明,應(yīng)該明白其他硬件環(huán)境(包括小型機(jī)、工作站、網(wǎng)絡(luò)計算機(jī)、“超級計算機(jī)”、特大型機(jī),以及分布式處理環(huán)境等)也可以用于本發(fā)明的實施。此外,如果需要還可以將計算機(jī)程序的一個或多個部分固化到硬件或固件中等等,這些實施例的變形都在本領(lǐng)字段的技術(shù)人員能夠達(dá)到的范圍之內(nèi)。
      32位ISA
      以下參考圖1-5對本發(fā)明的一個示范實施例的改進(jìn)ISA的32位部分進(jìn)行說明。該實施例采用一個32位指令集,該指令集對現(xiàn)有指令集(例如用于ARCtangent A4處理器的指令集)進(jìn)行了增強(qiáng)和改進(jìn)。這些增強(qiáng)和改進(jìn)使任何給定應(yīng)用軟件的代碼長度縮短了,從而使存儲器開銷保持在一個絕對最小值。本實施例的代碼壓縮方案包括將指令集分區(qū)為兩個子指令集(i)一個32位指令集;和(ii)一個16位指令集。如下面的詳細(xì)說明中所指出的那樣,該“雙ISA”方案還使處理器能夠很容易地進(jìn)行16位和32位指令的轉(zhuǎn)換。
      表2是本發(fā)明的核心寄存器“雙ISA”處理器的格式。
      表2

      32位指令集包括(i)位設(shè)置(bit set)、測試(test)、屏蔽(mask)、清除(clear);(ii)進(jìn)棧/退棧(push/pop);(iii)比較并分支轉(zhuǎn)移(compare &amp; branch);(iv)裝入相對于PC的偏移量;和(v)2個輔助寄存器(auxiliary register),32位PC和狀態(tài)寄存器(status Register)。此外,如表3所示,本實施例中的另一32位指令被編入操作碼槽(opcode slot)0x0至0x07(在前述的ARCtangent A4 32指令集的情況下)。
      表3

      本實施例中的分支轉(zhuǎn)移指令已經(jīng)被分別配置到操作碼槽0x0和0x1,即,條件分支轉(zhuǎn)移(Bcc)與分支轉(zhuǎn)移并連接(BL)。該指令格式如下(i)Bcc21位無地址(0x0);及(ii)BLcc22位地址(0x1)。該分支轉(zhuǎn)移和連接指令為32位對齊,而分支轉(zhuǎn)移指令為16位對齊。盡管意識到還可以規(guī)定其他的和更為復(fù)雜的跳轉(zhuǎn)延遲槽模式,例如2000年3月13日提交的名稱為“流水線處理器跳轉(zhuǎn)延遲槽控制的方法和裝置”的美國專利申請09/523,877號中所描述的,本申請的受讓人為該美國專利申請的共同專利權(quán)人,本申請將其全文并入引用,在圖中所示實施例中,只有兩個延遲槽模式(delay slot mode)提供給跳轉(zhuǎn)(jump),即,“.nd”(不執(zhí)行延遲槽)和“.d”(總是執(zhí)行延遲槽)。
      本實施例的裝入/存儲(LD/ST)指令配置為能夠通過一核心寄存器(coreregister)加短立即偏移量(short immediate offset)(例如9位)LD/ST操作的尋址模式包括(i)相對于程序計數(shù)器(PC)的LD;和(ii)比例索引尋址模式(scaled index addressing mode)。
      LD/ST PC相對指令允許32位ISA的LD/ST指令與PC相對。在圖中所示的實施例中的實施方式是具有作為PC的只讀值的寄存器r63。該寄存器作為一個源寄存器對于所有其他的指令都是可用的。
      該比例索引尋址模式允許操作數(shù)二通過數(shù)據(jù)存取的大小移位,例如,字節(jié)(byte)為0,字(word)為1,長字(longword)為2。后文將對該功能具體說明。
      還應(yīng)注意到可以使用不同的編碼,例如,64位為3。
      算術(shù)和邏輯指令的數(shù)量被包含在前述的操作碼槽0x2至0x7,如下(i)算術(shù)指令-ADD,SUB,ADC,SBC,MUL64,MULU64,MACU,MAC,ADDS,SUBS,MIN,MAX;(ii)位移指令-ASR,ASL,LSR,ROR;和(iii)邏輯指令-AND,OR,NOT,XOR,BIC.
      圖中所示實施例的移位和加/減指令允許數(shù)值被移動0、1或2位,然后與一個寄存器中的內(nèi)容相加。這樣在處理器階段3增加了額外的開銷(overhead),這是因為會為2級別的邏輯被加入32位加法器的輸入端(bigalu)。后文將對該功能具體說明。
      位設(shè)置、清空并測試(Bit Set,Clear &amp; Test)指令去除了用于屏蔽目的的長立即(limm)數(shù)據(jù)。這允許一個指令編碼中的5位字值生成一個“2的乘冪”32位操作數(shù)。在本實施例中,執(zhí)行這些操作的邏輯被置于處理器的階段3。
      邏輯乘并屏蔽(And&amp;Mask)指令與前述的位設(shè)置指令類似,都是允許指令編碼中的一個5位值生成一個32位屏蔽碼。這一特征部分利用了該的階段3邏輯。
      進(jìn)棧(PUSH)指令根據(jù)棧指針?biāo)A舻闹迪虼鎯ζ鲀?nèi)存儲一個數(shù)值,然后將棧指針遞增。這基本上是一個激活地址寫回模式的存儲操作,因此存在一個對地址的預(yù)遞減。一個額外的出棧(POP)指令類型是“POP PC”,該指令按如下方式拆分POP BlinkJ [Blink]該出棧指令正好相反,根據(jù)棧針?biāo)甘镜闹祻拇鎯ζ餮b入一個數(shù)值并將棧指針遞減。這是一個向存儲器存儲之前帶有對地址后遞減的裝入指令。
      移動(MOV)指令被配置為無符號12位常數(shù)可以被移入核心寄存器。比較(CMP)指令基本上是一個SUB指令的特殊編碼,具有標(biāo)志設(shè)置而沒有結(jié)果目的地。
      循環(huán)(LOOP)指令被配置為將一個寄存器用于循環(huán)的迭代數(shù)和一個短立即值(shimm),該短立即值提供循環(huán)所包含的指令的偏移量。為了激活一個單一指令循環(huán),需要額外的互鎖。在一個實施例中,循環(huán)計數(shù)寄存器(Loopcount Register)被移至輔助寄存器空間。在實施例中所有與本指令有關(guān)的寄存器的寬度都是32位(即LP_START、LP_END、LP_COUNT)本發(fā)明ISA的指令格式參見附錄I和圖1-5。表4定義了32位ISA的編碼。
      表4

      如前述,由于程序計數(shù)器(PC)被擴(kuò)展到了32位寬,處理器內(nèi)額外提供了四個輔助寄存器。這些寄存器是(i)PC32;(ii)Status32;(iii)Status32l1/Status32_l2。這些寄存器允許對全部地址空間的存取,對已有的狀態(tài)寄存器(status Register)是一個補(bǔ)充。一個額外的標(biāo)志寄存器(flag Register)還允許對額外標(biāo)志的擴(kuò)展。表5顯示了對這些寄存器的映射(mapping)。
      表5

      16位指令集體系結(jié)構(gòu)請參閱圖2-5,是處理器ISA1的16位部分的一個示范性實施例。如前所述,本發(fā)明的配置中使用一16位指令集,以便最終減少存儲器開銷。這允許用戶/設(shè)計者降低外部存儲器方面的成本。下面對該指令集(ISA)中的16位部分進(jìn)行詳細(xì)說明。
      表6定義了處理器中16位ISA的核心寄存器映射(Core RegisterMapping)的格式。
      表6

      表7顯示了該ARCtangent A4處理器中的16位ISA的實施例。請注意,現(xiàn)有的指令(例如A4的指令)已經(jīng)被重新組織以適合操作碼槽0x0C~0x1F。
      表7

      以下各段提供了對每條指令的詳細(xì)描述。圖2顯示了使用寄存器的16位指令格式,圖2中的通用寄存器指令格式中的每一個字段(field)都履行下面的指令(i)位4~0-子操作碼字段為指令類型提供額外的選擇或者可以是一個用于移位的5位無符號的立即值;(ii)位7~5-源2字段包含指令的第二源操作數(shù);(iii)位10~8-B字段包含指令的源/目的地;和(iv)位15~11-主操作碼。
      圖3是Branch,MOV/CMP,ADD/SUB指令的格式。字段編碼如下(i)位6~0-立即數(shù)據(jù)值;(ii)位7-子操作碼;(iii)位10~8-B字段包含指令的源/目的地;(iv)位15~11-主操作碼。
      圖4是BL指令格式。該字段編碼如下(i)位10~0-有符號12位立即地址長字對齊;和(ii)位15~11-主操作碼。
      圖5是顯示MOV、CMP、ADD高位寄存器指令格式。指令中的每一個字段都履行下列功能(i)位1~0-子操作碼字段;(ii)位7~2-指令的目的地寄存器(destination register);(iii)位10~8-B字段包含指令的源操作碼;和(iv)位15~11-主操作碼個定義了LD/ST指令的不同格式(0x0C-0x0D,0x10-0x17,0x1B)。無符號常數(shù)按數(shù)據(jù)存取對齊的要求被左移位。
      表8

      進(jìn)棧(PUSH)指令根據(jù)棧指針?biāo)A舻闹迪虼鎯ζ鲀?nèi)存儲一個數(shù)值,然后將棧指針遞增。這基本上是一個激活地址寫回模式的存儲操作,因此存在一個對地址的預(yù)遞減。一個額外的出棧(POP)指令類型是“POP PC”,該指令按如下方式拆分POP BlinkJ [Blink]該出棧指令正好相反,根據(jù)棧針?biāo)甘镜闹祻拇鎯ζ餮b入一個數(shù)值并將棧指針遞減。這是一個向存儲器存儲之前帶有對地址后遞減(post-decrement)的裝入指令。
      LD PC相對指令允許16位ISA的LD指令與PC相關(guān)。這可以通過將寄存器r63作為一個PC的只讀值來實施。這作為一個源寄存器對于所有其他指令都是可以的。
      該16位ISA還提供比例索引尋址模式;這里,操作數(shù)2可以通過數(shù)據(jù)存取的大小而被移位,例如,字節(jié)為0、字為1、長字為2。
      移位并加/減指令允許一個值向左移動0、1、2或3位,然后與寄存器的的內(nèi)容相加。這樣該指令就去除了對長立即數(shù)據(jù)(limm)的需要。由于有2級邏輯被加入32位加法器的輸入(bigalu),這樣該指令在處理器的階段3增加了一個額外的開銷。
      帶有SHIMM操作數(shù)指令的標(biāo)準(zhǔn)(即基本方案核心IS)加/減(ADD/SUB)指令由基本方案核心算術(shù)指令構(gòu)成。
      右移和屏蔽(Shift Right and Mask)擴(kuò)展指令根據(jù)一個5位數(shù)值進(jìn)行移位,然后根據(jù)另一個4位常數(shù)將結(jié)果屏蔽,該4位常數(shù)確定一個1~6位屏蔽碼。這些4位和5位常數(shù)被壓縮到9位短立即值中。該功能基本上是一個桶式位移(barrel shift),其后是屏蔽處理。這樣盡管計算是順序進(jìn)行的,由于編碼的原因可以將其設(shè)置為并行的。現(xiàn)有的桶形位移器邏輯可用于運算的第一部分,但是,第二部分需要額外的專用邏輯,可以由本技術(shù)領(lǐng)域的普通技術(shù)人員很容易地合成。該功能是桶式位移器擴(kuò)展的一部分,并且在實施上僅對現(xiàn)有的桶式位移器的門數(shù)增加了數(shù)量很小(大約50個)的門。
      16位IS的位設(shè)置、清空并測試指令免去了屏蔽所需的長立即數(shù)(limm)數(shù)據(jù)。這就允許在指令編碼中的一個5位生成一個“2的乘冪”32位操作數(shù)。實施這些運算所需要的邏輯被置于處理器的階段3,需要大約100個額外的邏輯門。CMP指令是一個激活標(biāo)志設(shè)置沒有目的寄存器的SUB指令,即,SUB.f0、a、u7其中u7是一個無符號的7位常數(shù)。
      分支轉(zhuǎn)移和比較(Branch and Compare)指令根據(jù)比較結(jié)果進(jìn)行分支轉(zhuǎn)移。該指令不是條件執(zhí)行的,沒有標(biāo)志設(shè)置的能力。這就需要在流水線的階段2計算出分支轉(zhuǎn)移地址,并且在階段3進(jìn)行比較。這樣就實現(xiàn)了完成比較后的分支轉(zhuǎn)移。該指令會產(chǎn)生2個延遲槽。但是,另一解決方案是在階段2進(jìn)行分支轉(zhuǎn)移,并且如果比較結(jié)果為假,那么處理器就可以從比較/分支轉(zhuǎn)移指之后的那一點立即執(zhí)行。
      對于該指令的32位版本來說,還可以提供一個可選的提示標(biāo)志(hintflag),在實施例中該提示標(biāo)志被缺省為總是接受分支轉(zhuǎn)移或總是取消分支轉(zhuǎn)移。因此,為了實行這個功能,必須在階段2存儲一個保持未接受路徑的PC的32位寄存器。
      16位IS具有兩條相關(guān)的分支轉(zhuǎn)移指令,即(i)條件分支轉(zhuǎn)移,和(ii)分支轉(zhuǎn)移和連接。條件分支轉(zhuǎn)移(Bcc)指令具有帶符號的16位對齊的偏移量,并為了某些條件(即,AL、EQ、NE)具有一個更長的范圍。該分支轉(zhuǎn)移和連接指令為了具有一個更大范圍而具有一個帶符號的32位對齊的偏移量。表9列出了ISA內(nèi)可用的分支轉(zhuǎn)移指令。
      表9

      注意到當(dāng)實行一個壓縮的(16位)跳轉(zhuǎn)或分支轉(zhuǎn)移指令時,相關(guān)的延遲槽應(yīng)該總是包括另一個16位指令。該指令與普通的32位指令類似,或者被執(zhí)行,或者不被執(zhí)行。在本實施例中,盡管其他配置可以被替代,分支轉(zhuǎn)移和跳轉(zhuǎn)不能被包括在指令的延遲槽中。
      本發(fā)明的指令集體系結(jié)構(gòu)(ISA)中的額外指令包括以下內(nèi)容(i)LD/ST尋址模式;(ii)移動指令;(iii)位設(shè)置、清空和測試指令;(iv)邏輯與并屏蔽;(v)比較并分支轉(zhuǎn)移;(vi)循環(huán)指令;(vii)非指令;(viii)求反指令;(ix)絕對指令;(x)移位并加/減;和(xi)右移并屏蔽(擴(kuò)展)。下文中將對這些指令的實施進(jìn)行詳細(xì)描述。
      裝入/存儲操作(LD/ST)的尋址模式按如下劃分1.預(yù)先更新模式-在ALU加之前取得地址2.后更新模式-在ALU加之后取得地址3.比例尋址模式(scaled addressing mode)-根據(jù)指令的操作碼編碼方式對短立即常數(shù)移位(具體說明見下)。
      預(yù)先/后更新尋址模式在處理器的階段3進(jìn)行,下文對此還有具體說明。進(jìn)棧/出棧指令在階段2分別被譯碼為LD/ST操作,地址寫回向棧指針開啟(例如r28)。
      移動指令在處理器的階段2被譯碼并映射到基本指令集中的AND指令。提供了互鎖,用于處理長立即數(shù)據(jù)編碼(r62)或PC(r63)作為目的地址。該互鎖可以是編譯程序匯編器的組成部分,因為所有使用前述寄存器作為目的地的指令都不進(jìn)行寫操作。
      位設(shè)置(BSET)、清空(BCLR)、測試(BTST)和屏蔽(BMSK)指令免除了用于屏蔽目的的對長立即(limm)數(shù)據(jù)的需要。這就允許一個指令編碼中的5位數(shù)值生成一個“2的乘冪”32位操作數(shù)。執(zhí)行這些操作所需要的邏輯被置于處理器的階段3。此“2的乘冪”操作是一個有效的簡單譯碼塊。該譯碼操作在ALU邏輯之前實行,并且對于所有本文中所提及的位處理指令都是通用的。
      圖6是一個前述指令的操作的流水線圖。對于位設(shè)置操作,按如下的序列進(jìn)行1.在時間(t)處源字段為“sla”并且利用圖7所示的邏輯700將“fs2a”或“s2shimm”提取。結(jié)果地址“dest”也被提取。
      2.在時間(t+1)處該指令位于流水線的階段2并且,如圖8所示,邏輯800從寄存器文件提取數(shù)據(jù)“s1val”并且從寄存器文件(使用地址“s2a”)或“p2shimm” 提取數(shù)據(jù)“s2val”3.在時間(t+2)處譯碼器902在階段3 900(圖9)將“s2val”解碼為“s2val one bit”。然后復(fù)用器904選擇“s2val one bit”以產(chǎn)生“s2val new”。該數(shù)據(jù)與“s1val”一同被送入“bigalu”內(nèi)的邏輯塊906以實行邏輯或運算。其結(jié)果被鎖存入“wbdata”。
      4.在時間(t+3)處階段4內(nèi),“wben”信號與設(shè)定“wba”一同被斷言(asserted)到原“dest”地址以執(zhí)行寫回操作。
      對于位清空指令,ALU對譯碼后的數(shù)據(jù)有效地執(zhí)行一個BIC操作。對于位測試指令,ALU對譯碼后的數(shù)據(jù)有效地為位測試指令執(zhí)行一個AND.F運算。如果被測試位為零,將設(shè)置零標(biāo)志。還有,在階段1地址62(“l(fā)imm”地址)被放入“dest”字段,防止寫回的發(fā)生。
      位屏蔽指令與階段3的其他指令不同。請參閱圖10所示,首先在帶有(u6+1)個被稱為“s2val mask”的屏蔽碼生成器塊1002生成一個屏蔽碼。然后該屏蔽碼通過復(fù)用器1004在進(jìn)入邏輯塊1006前進(jìn)被復(fù)用到“s2valnew”,邏輯塊1006利用寄存器“s1val”對該屏蔽碼進(jìn)行邏輯乘操作。
      本實施例的邏輯乘并屏蔽指令與位設(shè)置指令類似,該指令允許在指令編碼中存在一個5位數(shù)據(jù)以生成一個32位屏蔽碼,隨后該32位屏蔽碼與寄存器(s1val)中的源操作數(shù)的數(shù)據(jù)進(jìn)行邏輯乘。
      比較并分支轉(zhuǎn)移指令需要在流水線的階段2計算的分支轉(zhuǎn)移地址,并且在階段3進(jìn)行比較。因此,需要在比較進(jìn)行后實施取得分支轉(zhuǎn)移;這將產(chǎn)生2個延遲槽。
      圖11所示的是通過流水線的取得分支轉(zhuǎn)移但不使用延遲槽(BranchTaken But Delay Slot Not Used-BRNE)指令。對于該BRNE指令,按如下序列實行1.在時間(t)處BRNE指令進(jìn)入流水線的階段1,利用如圖12所示的邏輯1200將“p1iw16”或“p1iw32”被拆分并鎖存入“p2offset”、“p2cc”、“fs1a”,和“s2a”或“p2shimm”。
      2.在時間(t+1)處通過復(fù)用器1302將“fs1a”與“h_addr”復(fù)用以生成“s1a”,并向寄存器文件1304尋址以生成值“pd_a”,參見圖13。隨后該值被鎖存入“s1val”。同時從地址為“s2a”的寄存器文件1304或從“p2shimm”生成被鎖存的值“s2val”。還有在階段2,邏輯塊1402內(nèi)的“l(fā)ast_pc”+1被加入“p2offset”以生成“target”,隨后又被鎖存入“target_buffer”(參見圖14)。需要存儲條件碼信號“p2cc”,但是“p3cc”已經(jīng)存在,所以沒有必要生成,例如,“p2ccbuffer”。
      3.在時間(t+2)處,“s2val”被譯碼并生成“s2val_one_bit”,是一個只有一個位設(shè)置的值。這2個信號被復(fù)用,生成“s2val_new”。只有實行一個BBIT指令,“s2val_one_bit”值才會被選定;否則該復(fù)用選擇“s2val”。在塊“bigalu”內(nèi),“type_decode”這一處理根據(jù)當(dāng)前存在的是BRcc指令還是BBIT指令,選擇“arith”塊1502或“l(fā)ogic”塊1504以執(zhí)行操作(參見圖15)?!癮lurflags”1506內(nèi)的標(biāo)志信號通常被鎖存入“aux_regs”塊內(nèi)的“aluflags”。但是,在這種情況下,需要一個回到階段2的捷徑,以便在不引入一個阻塞的情況的允許一個分支轉(zhuǎn)移判斷。在“rctl”塊1410(參見圖14)中,需要信號“ip2ccbuffermatch”對應(yīng)“alurflags”和“p3cc”匹配,從而判斷是否應(yīng)該授受該分支轉(zhuǎn)移。還有,提供一個額外輸出“docmprel”1412檢查信號“p3iw”是否是一個BR或BBIT指令。該“docmprel”信號進(jìn)入“cr_int”塊1414,使“pcen_related”選擇“target_buffer”1416作為下一個地址。
      4.在時間(t+3)處,“current_pc”(當(dāng)前程序計數(shù)器)具有分支轉(zhuǎn)移目標(biāo)值并且“p1iw”在那個目標(biāo)包含該指令。階段2和階段3的指令通過對 “p2iv”和“p3iv” 取消斷言(de-asserting)被取消。。對“p3killnext”的斷言會取消“p3iv”。該斷言是通過增加的條件“p3iw=obr AND p2dd=nd”來實現(xiàn)的。類似地,對“p2killnext”的斷方將第二延遲槽取消。該斷言是通過增加的條件“p3iw=obr OR p3iw=obbit”來實現(xiàn)的。
      求反(NEG)指令采用減法(SUB)指令的編碼,即,SUB r0、0、r0。因此求反指令被譯碼為帶源雙操作數(shù)(source two-operand)的減法指令,用來規(guī)定被求反的值,并且這也是目的寄存器。在本實施例中,源單操作數(shù)(source one-operand)字段的值總為零。
      如果源操作數(shù)是負(fù)的(最高有效位=1),那么實行求反操作;否則允許不改變通過。在本實施例中,該功能在流水線的階段2和階段3實施,參見圖16。絕對(ABS)指令對帶符號32位值實行下列操作(i)正數(shù)不變;(ii)負(fù)數(shù)要求在源雙操作數(shù)上實行求反操作。這意味著如果s2_direct 1602的最高有效位(msb)為“1”,那么在s2val上階段3補(bǔ)入求反操作。但是,如果最高有效位為“0”,那么在階段3,p3iv=0上將絕對指令取消。這意味著該值已經(jīng)是一個絕對值,不需要再改變。如圖16所示,用于取消階段的絕對指令的信號為p3killabs 1604。
      移位并加/減(擴(kuò)展)指令采用一個常數(shù),該常數(shù)確認(rèn)立即值在補(bǔ)入加法或減法之前應(yīng)該移位多少。因此源操作數(shù)二可以在實行算術(shù)運算之前被左移1到3位。這樣就在大多數(shù)情況下免去了對長立即數(shù)據(jù)的需求。移位操作在處理器流水線的階段3由與“基本”運算器(如下所述)邏輯1702實行,以便在加/減操作之前完成移位,參見圖17。
      右移并屏蔽(擴(kuò)展)指令是根據(jù)一個5位值進(jìn)行移位,然后根據(jù)另一個4位常數(shù)將結(jié)果屏蔽,該4位常數(shù)定義一個1至16位寬的屏蔽碼。這些4位和5位常數(shù)被壓縮到9位短立即值中。該功能實際上是一個后跟屏蔽處理的桶式移位。以上盡管計算是依次完成的,由于編碼操作的原因可以并行完成??梢圆捎矛F(xiàn)有的桶式移位器1802(參見圖18)完成操作的第一部分;但是,第二部分要求專用邏輯1804。該功能在圖示的實施例中被作為桶式移位器擴(kuò)展的一部分。
      這樣,如圖18所示,右移并屏蔽的子操作碼在階段2被譯碼并且這將標(biāo)志出在階段3的s2val 1806是右移并屏蔽指令控制的一部分硬件實現(xiàn)請參閱圖19~20,以下對處理器的四階段流水線(即取、譯碼、執(zhí)行和寫回階段)內(nèi)的組合16/32位ISA的硬件實現(xiàn)進(jìn)行說明。如圖19所未,與現(xiàn)有技術(shù)的結(jié)構(gòu)相比主要的不同在于處理器的指令高速緩沖存儲器1902和階段2的1904,該1904實行從核心寄存器文件1906取操作數(shù)。在實施例中提供了模塊1908,在此稱之為“指令調(diào)整器”(instruction aligner)。圖示實施例中的該調(diào)整器1908向處理器的階段1提供一個32位指令和一個16位指令。這些指令中僅有一個是有效的,由階段1的解碼邏輯(圖中未示)來確定。為寄存器文件1906輸入端的操作碼取邏輯提供一個額外的復(fù)用器2002(參見圖20),使其根據(jù)16位指令和32位指令之一選擇適當(dāng)?shù)牟僮鲾?shù)。
      指令調(diào)整器1908還被配置為生成一個信號2004用來規(guī)定哪條指令是有效的,即,32位或16位。當(dāng)進(jìn)行16位存取或未對齊的存取時,其包含一個內(nèi)部緩沖區(qū)(實施例中為16位寬),這樣可以保持系統(tǒng)的最快存取。這基本上意味著僅使用取出的32位指令的一半的指令需要一個緩沖器。因此,即使需要取兩個長字時,一條越過一個長字邊界的指令也不會導(dǎo)致流水線阻塞。
      處理器的第二階段還被配置為為分支轉(zhuǎn)移生成目標(biāo)地址的邏輯包括一個32位加法器和控制邏輯以便支持新指令、比較并分支轉(zhuǎn)移指令。除了用于這些指令的移位和屏蔽邏輯之外,ALU階段還支持預(yù)先/后遞增邏輯處理器的寫回階段基本沒有改變,因為本發(fā)明的ISA不采用額外寫回模式。
      代碼壓縮的集成本發(fā)明的代碼壓縮方案需要對與內(nèi)核相關(guān)的配置文件進(jìn)行正確的配置;例如,在圖21所示的處理器設(shè)計層次內(nèi)quarc級2102以下的配置。流水線階段1和階段2內(nèi)的控制和數(shù)據(jù)路徑被專門配置,并且32/16位ISA的指令和擴(kuò)展被集成了。例如,在如圖21所示的ARCtangent處理器中,核心配置中受到影響的主模塊有(i)arcutil,extutil,xdefs(對于32位ISA的寄存器、操作數(shù)和操作碼映射,需要合適的常數(shù));(ii)rctl(支持額外指令格式的配置);(iii)coreregs,aux_regs,bigalu(在某些情況下某些基本方案(basecase)指令可導(dǎo)致對這些文件的修改);(iv)xalu,xcore_regs,xrctl;xaux_regs(移位并相加擴(kuò)展要求對這些文件正確的配置);和(v)asmutil,pdisp(ISA流水線線顯示機(jī)制的配置).此外,新的擴(kuò)展指令要求正確配置的擴(kuò)展占位符(placeholder)文件;即,xrctl,xalu,xaux_regs,and xcoreregs。
      這些塊被劃分入這些相應(yīng)的模塊中,允許在不需要過量越界優(yōu)化的情況對內(nèi)部關(guān)鍵路徑的優(yōu)化。這些擴(kuò)展文件、控制、運算器、輔助和寄存器的每個父模塊都在內(nèi)部被串行化(flattened),以便協(xié)助合成處理。特別是圖21所示的層次結(jié)構(gòu)中,所有在控制、寄存器、輔助和運算器模塊之下的塊都被串行化了。
      以下參考圖22對本發(fā)明的指令譯碼、執(zhí)行、寫回和取操作界面進(jìn)行詳細(xì)說明。
      在圖22所示的實施例中,處理器的第二階段2202除生成分支轉(zhuǎn)移操作的目標(biāo)地址外,還從寄存器文件1906中選擇操作數(shù)。在這一階段,控制單元(rctl)標(biāo)志出下一個長字應(yīng)該是長立即數(shù)據(jù),并且在階段1將這一點向調(diào)整器1908發(fā)送信號(參見圖19)。LD生成后,第二階段2202還對裝入記分板單元(lsu)進(jìn)行更新。
      參見圖21,在表10中顯示了本實施例中為了支持聯(lián)合的32/16位ISA經(jīng)過重新配置的子模塊。
      表10

      用于為分支轉(zhuǎn)移生成目標(biāo)地址的流水線階段2 2202的加法器4006(參見圖40)被改造,使其變?yōu)?2位寬。還存在譯碼階段配置的其他方面支持相加指令格式。例如,比較/分支轉(zhuǎn)移指令必需配置控制邏輯,以使延遲槽機(jī)制保持不變。因此,在知曉條件是否為真之前就會在階段2分支轉(zhuǎn)移,因為在運算器階段對此進(jìn)行了評估。這樣,被證明非真的比較會導(dǎo)致跳轉(zhuǎn)的取消,并且將流水線退回至分支轉(zhuǎn)移之后的那一點,并從那一點開始繼續(xù)執(zhí)行。
      此處描述的RISC處理器的流水線的第四階段是一個寫回階段,操作的結(jié)果,如返回裝入和邏輯操作結(jié)果,被寫入寄存器1906;例如LD和MOV。經(jīng)過配置的用來支持聯(lián)合32/16位ISA(帶相關(guān)信號)的子模塊如下(i)rctl-p3iv,en3,p3_wben,p3lr,p3sr;(ii)cr_int-next_pc,en2;(iii)aux_regs,pcounter,flags-p3sr,p3lr,en3;(iv)loopcnt-next_pc;(v)int_unit-p3iv,en3;(vi)bigalu-en3,mc_addr,p3int;and(vii)sync_regs-en2。
      額外的復(fù)用邏輯被加在流水線階段3的32位加法器之前,用來生成地址和其他數(shù)學(xué)表達(dá)式。這包括對指令的屏蔽和邏輯移位,例如,移位加(SADD)、移位減(SSUB)。運算器的輸出還包括用于進(jìn)棧/出棧指令的遞增模式的額外的復(fù)用邏輯。本技術(shù)領(lǐng)域的普通技術(shù)人員根據(jù)本描述可以很容易地生成該邏輯,因此不再作更詳細(xì)的說明。
      此處所說的處理器的中斷被配置為當(dāng)開始使用一個中斷時,硬件既存儲新的狀態(tài)寄存器(映射到輔助寄存器空間)內(nèi)的值,也存儲32位PC。應(yīng)用于中斷的寄存器如下(i)1級中斷-32位PC-ILINK1(r29)-狀態(tài)信息-Status_il1(ii)2級中斷-32位PC-ILINK2(r30)-狀態(tài)信息-Status_il2狀態(tài)寄存器的格式與狀態(tài)32寄存器的定義方式一樣。
      為了支持本發(fā)明的聯(lián)合32/16位ISA需要對處理器界面的取指令(ifetch)進(jìn)行配置。下面將對此詳細(xì)描述。
      表11

      下面對寄存器文件、程序計數(shù)器、相關(guān)中斷邏輯在取指令階段為了使用而生成的信號進(jìn)行詳細(xì)描述。
      圖23顯示了一個階段1的數(shù)據(jù)路徑。它存在于指令高速緩沖存儲器1902(即,代碼RAM等)和階段2的控制單元rctl內(nèi)的寄存器p2iw_r之間。如圖23所示,調(diào)整器1908將出入指令高速緩沖存儲器的信號格式化。盡管由于調(diào)整器塊包括在內(nèi),某些信號在控制塊中被重命名(即,p1iw信號變?yōu)閜0iw;無效信號被拆分為ivalid0),指令高速緩沖存儲器1902的行為保持不變來自調(diào)整器1908的16位ISA指令字的格式被進(jìn)一步格式化,使其擴(kuò)展到填滿32位值,該值被控制單元讀出。將16位指令擴(kuò)展到32位指令長字空間的邏輯是需要的,因為采用了同樣的寄存器文件,并且在16位ISA內(nèi)編碼的源操作數(shù)不是一個32位ISA的直接映射。請參閱表11,是16位和32位ISA之間的寄存器編碼。在本實施例中,16位ISA被映射到32位指令長字的頭16位中。16位ISA向32位指令的映射的編碼使階段2的解碼處理與現(xiàn)有技術(shù)手段相比要簡單,這是因為操作碼字段總是在[31:27]之間。源寄存器位置按如下方式進(jìn)行編碼(i)源1地址寄存器-26:24(16位)-26:24 &amp; 14:12(32位)(ii)源2地址寄存器-23:21(16位)-5:0(位)對16位ISA剩余的編碼(不包括操作碼)被定義在[20:16]之間。圖24顯示了擴(kuò)展處理過程。包括了指令高速緩沖存儲器的階段1的數(shù)據(jù)路徑不變。特別是,在圖中所示的實施例中,16位指令的下8位被映射到32位寄存器文件p2iw的位[23:16]。上8位被用于保留操作碼,下2位被用于源操作數(shù)1向寄存器文件編碼。操作碼被移動,駐留在數(shù)位位置[31:27],使其與32位ISA相配。16位ISA的源操作數(shù)被移至數(shù)位位置[14:12],[26:24]和[11:6]。
      對寄存器文件的接口也在階段2生成操作數(shù)時被改造了。下文對該邏輯進(jìn)行描述。
      相對于SP/GP的LD-從棧指針或全局指針相對取地址的16位LD編碼在指令中被暗示了。這意味著必需將該編碼轉(zhuǎn)譯為符合32位ISA所規(guī)定的編碼。用于GP的LD相對的(r26)為操作碼0x0D,并且用于SP相LD相對的(r28)為操作碼0x17(參見圖25)。
      進(jìn)棧/出棧指令不規(guī)定棧指針寄存器內(nèi)的地址應(yīng)該被自動遞增(或遞減)。這是指令自身固有的,因此對于進(jìn)棧/出棧指令存在一個向SP的寫回。
      操作數(shù)尋址-從寄存器文件、擴(kuò)展、長立即數(shù)據(jù)得到指令所需要的操作數(shù),或者操作數(shù)就作為一個常數(shù)嵌在指令當(dāng)中。用于源單字段的寄存器地址(sla)來自如下的資源1.plc_field(pliw[11:6])-32位指令(plopcode=0x04,0x05)當(dāng)MOV,RCMP若RSUB時2.p1hi_reg16(p1iw[18:16]&amp;p1iw[23:21])-16位指令(plopcode=0x0E)需要向所有64核心寄存器。
      3.rglobalptr(0x1A)-全局指針操作(plopcode=0x19)4.rstackptr(0x1C)-全局指針操作(plopcode=0x18)5.plb_field(p1iw[14:12]&amp;p1iw[26:24])-對于抽有其他空調(diào)。獲取源二字段的取寄存器地址(fs2a)所需要的邏輯來自不同的源,如下所示1.plb_field(p1iw[14:12]&amp;p1iw[26:24])-32位指令(plopcode=0x04,0x05)當(dāng)它是MOV,RSUB時.為16位指令(plopcode=0x0E),0x0F)2.plhi_reg16(p1iw[18:16]&amp;p1iw[23:21])-16位指令(plopcode=0x0E)要求為MOV和CMP指令存取所有64核心寄存器的位置。
      3.rblink(0x1F)-分支轉(zhuǎn)移并連接寄存器更新(plopcode=0x0F)16位跳轉(zhuǎn)并連接指令4.plc_field(p1iw[14:12]&amp;p1iw[26:24])-所有其他指令階段1控制路徑被配置為支持聯(lián)合ISA處理器流水線階段1的控制信號如下表12

      被配置過的以支持子模塊的聯(lián)合ISA為rctl,lsu和cr_int。下面對前述的控制信號進(jìn)行更為詳盡的說明。
      流水線激活(en1)-如果下列任一條件為真時,流水線階段1的寄存器的激活為假(1)處理器核心暫停,en=0;(2)階段1的指令無效,NOT(ivalid);(3)檢測到中斷點或有效行為點,因此階段2必需暫停,同時其余的階段必需被清除,break_stage1_non_iv=1;(4)單一指令步驟已經(jīng)將指令移動到了階段2并且在階段1沒有依存,p2step AND NOT(p2p1dep)AND NOT(p2int);(5)階段1內(nèi)沒有指令,(p2int OR p2iv)AND p2_real_stall;or(6)接受BRcc指令失敗,未能將延遲槽內(nèi)的指令取消。
      對于一個中斷點或一個有效行為點被檢測到的情況,break_stage1_non_iv,根據(jù)圖26中所定義的信號,流水線階段1被禁止。信號i_brk_decode_non_iv是斷開指令在流水線階段1來自16位和32位指令格式的p1iw_aligned的譯碼。signal p2_sleep_inst是對流水線階段2來自32位指令格式的p2iw(并且為p2iv限定)的休眠(SLEEP)指令的譯碼。
      圖27是顯示當(dāng)實行單一指令步驟時,流水線階段1的禁止邏輯的圖。在圖示實施例中,主機(jī)已經(jīng)實施了一單一指令步驟操作并且階段2的指令在階段1沒依存關(guān)系。類似地,流水線激活在階段1沒有指令時是不活動的(如圖28所示)。
      取指令(ifetch)-取指令(ifetch)信號限定處理器要執(zhí)行的下一條指令(next_pc)的地址。當(dāng)發(fā)生由于處理器、休眠、斷開或行動點,即i_break_stage1_non_iv 2902導(dǎo)致的暫停時,用于清除流水線的信號被特別地適合于16/32位ISA長立即數(shù)據(jù)(p2limm)-本發(fā)明的處理器的實施例支持長立即數(shù)據(jù)格式;當(dāng)信號p2limm為真時發(fā)出信號。圖30顯示了實施這一功能的邏輯3000。源寄存器(s1en,s2en)的激活的分離是由階段2獲得的并且包括16位指令格式。請注意,如果操作碼(p2opcode)利用源一和源二字段規(guī)定的許可的寄存器的內(nèi)容,圖30所示邏輯輸入3002、3004被設(shè)定為“1”程序計數(shù)器激活(pcen)-圖31顯示了程序計數(shù)器激活邏輯3100。程序計數(shù)器(pcen)在下列情況不激活(i)處理器暫停,en=0;(ii)階段1內(nèi)的指令無效,NOT(ivalid);(iii)檢測到一個斷開點或一個有效的行動點,剩余階段只能被清除,break_stage1_non_iv;(iv)一個單一指令步驟已經(jīng)將指令移動到了階段2并且在階段1沒有依存,inst_stepping;(v)在階段1檢測到了一個中斷,p1int,因此當(dāng)前指令應(yīng)該被取消,使正確的PC存儲為i1ink寄存器;(vi)在階段2檢測到了一個中斷,p2int,因此階段1的指令應(yīng)該被取消;或(vii)在階段2存在一條指令,p2iv,并且階段1的指令由于長立即數(shù)據(jù)的關(guān)系應(yīng)該被取消。
      在另一配置中(參見圖32),PC激活(pcen_non_iv)對于來自階段1的指令有效(ivalid)信號不限定。如圖31的實施例那樣,該激活被優(yōu)化時序。
      指令未決(ipending)-ipending信號表明當(dāng)前有一條指令正在被取出。當(dāng)取指令(ifetch)信號被設(shè)定時將一條指令稱為未決,并且當(dāng)一指令有效(ivalid_16,ivalid_32)信號被設(shè)定并且ifetch為不活動的或高速緩沖存儲器正在被無效時,這條指令才被清空。圖33顯示了實施該功能的邏輯。
      斷開(BRK)指令-斷開指令使處理器核心在流水線階段1對指令進(jìn)行譯碼時發(fā)生阻塞。圖34是一個斷開指令譯碼邏輯3400。階段2的指令被清除(flush),前提是這些指令在階段1不存在任何依存;例如,斷開指令是一個待執(zhí)行分支轉(zhuǎn)移的一個延遲槽。斷開指令從p1iw_aligned信號被譯碼,該信號通過前述的指令調(diào)整器1908(參見圖19)被提供給處理器。在本實施例中,對斷開指令有兩個編碼,即,一個為ivalid限定,另一個不限定。
      請參閱圖35~36,對本發(fā)明的流水線清除機(jī)制進(jìn)行詳細(xì)說明。本實施例中使用的用于在階段1(或引發(fā)了行動點(actionpoint))存在一個斷開指令時對處理器流水線進(jìn)行清除的機(jī)制使階段2和階段3的指令在停止前完成。任何在階段1存在依存的階段2的指令,例如延遲槽或長立即數(shù)據(jù)等都被掛起,直到處理器通過清空暫停標(biāo)志被激活。實行這一功能的邏輯由階段2和3的控制信號所使用。清除流水線的信號如下1.i_brk_stage1-階段1的Stall信號(圖35).
      2.i_brk_stage1_non_iv-階段1的Stall信號(參見圖35).
      3.i_brk_stage2-階段2的Stall信號(參見圖36).
      4.i_brk_stage2_non_iv-階段2的Stall信號(參見圖36).
      5.i_p2disable-階段2的有效信號(參見圖36).
      -階段2的指令在階段1存在依存關(guān)系(break_stage2)-激活一個行為點(或斷開)并且階段2被允許向前移動(en2)-激活一個行為點(或斷開)并且階段2該指令為無效(NOT p2iv)6.i_p3disable-階段3的有效信號(參見圖40).
      -階段2的指令無效(i_p2disable_r)并且階段3指令也無效(NOTp3iv)-階段2的指令無效(i_p2disable_r)并且階段3的指令被激活(en3)下面對進(jìn)一步對支持前述的聯(lián)合32/16位ISA所需要指令譯碼接口的配置進(jìn)行更為詳盡的說明。表13定義了取指令接口的信號。
      表13

      流水線階段2的譯碼邏輯對下列模塊產(chǎn)生影響
      1.rctl-拆分指令字的編碼以代表源/目的地、操作碼、子操作碼字段等2.lsu-為階段和階段2生成阻塞邏輯(支持12)3.cr_int-將新指令邏輯位移之外生成操作碼和寫回。
      4.aux_regs-對PC/Status寄存器進(jìn)行改信。
      對于階段2數(shù)據(jù)路徑的功能的主要考慮包括(i)生成階段3的操作數(shù);(ii)生成用于跳轉(zhuǎn)/分支轉(zhuǎn)移的目標(biāo)地址;(iii)更新程序計數(shù)器;和(iv)裝入計分板考慮。作為處理器組成部分的指令模式如屏蔽、比例尋址、和額外立即數(shù)據(jù)格式需要為尋址、分支轉(zhuǎn)移和源操作數(shù)選擇而復(fù)用。以下對支持邏輯進(jìn)行描述。
      字段提取-表14顯示了從圖示實施例的32位指令長字提取的信息表14

      當(dāng)i_enable2被設(shè)置為真時,這些信號被鎖存入階段3。
      取操作數(shù)-指令要求的操作數(shù)是從寄存器文件、擴(kuò)展、長立即數(shù)據(jù)等取得的,或作為一個常數(shù)被嵌入指令本身。圖37顯示了從源一字段獲取操作數(shù)(s1val)所需要邏輯3700。該操作數(shù)從各種來源取得(i)核心寄存器提供r0~r31;(ii)占用r32~r59的用于擴(kuò)展的x1data;(iii)存取r60時的loopcnt_r寄存器;(iv)寄存器r62被編碼時被選定的長立即數(shù)(p1iw_aligned);(v)當(dāng)寄存器r63被編碼時PC的只讀值被選定;(vi)當(dāng)激活捷徑(sc_load2)并且標(biāo)志rct_fast_load_returns都被設(shè)定時選定回裝(drd);以及(vii)階段3帶來的捷徑(p3res_sc)。
      圖38顯示了從源二字段獲取操作數(shù)(s2val)所需要的邏輯3800。該操作數(shù)是從下列不同的源獲得的(i)核心寄存器文件提供r0~r31;(ii)占用r32~r59的用于擴(kuò)展的x2data;(iii)存取r60時的loopcnt_r寄存器;(iv)長立即(p1iw)在寄存器r62被編碼時被選定;(v)當(dāng)寄存器r63被編碼時,PC的只讀值被選定;(vi)立即數(shù)據(jù)類型(shimmx)由于在指令s2_shimm內(nèi)根據(jù)操作碼被明確地定義;(vii)當(dāng)捷徑被激活時(sc_load2)回裝(drd)被選定并且標(biāo)志rct_fast_load_returns均被設(shè)定;(viii)當(dāng)捷徑被激活時階段3產(chǎn)生的捷徑(p3res_sc),sc_reg2為真;(ix)當(dāng)JL或BL被接受時程序計數(shù)+4(或?qū)τ?6位指令加2)被選定,即,s2_pp被設(shè)定;(x)當(dāng)階段2中存在一個中斷時程序計數(shù)器(currentpc_r)被選定,即,s2_currentpc被設(shè)定;及(xi)當(dāng)階段中存在一個有效ST時(p2iv AND p2st)最終復(fù)用器在鎖存前選定ls_shimm_sext,否則缺省到s2tmp。
      源操作數(shù)2的比例尋址-圖39所示的實施例中的比例尋址模式在處理器的階段2被實行并被鎖存到s2val。對于16位ISA該比例尋址模式在操作碼字段中被編碼。短立即值被被從0到2位置定比例(i)LD/ST與shimm(LDB/STB);(ii)LD/ST與shimm定比例的1位左移(LDW/STW);和/或(iii)LD/ST與定比例的2位左移(LD/ST)參見圖39,ALU指令的短立即數(shù)據(jù)-ALU操作短立即數(shù)據(jù)的選擇見表15表15

      分支轉(zhuǎn)移地址(目標(biāo))-內(nèi)建子模塊cr_int提供用于跳轉(zhuǎn)和分支指令的地址生成邏輯4000(參見圖40)。該模塊接受來自分支轉(zhuǎn)移指令偏移的地址并將其加入currentpc寄存的結(jié)果。currentpc_r的值在加偏移量時被四舍五入至最接近的長字地址。所有的分支轉(zhuǎn)移目標(biāo)地址都是16位對齊的,而分支轉(zhuǎn)移和連接(BL)目標(biāo)地址是32位對齊的。這意味著對16位對齊的存取的分支轉(zhuǎn)移的偏移必須向左移位一個位置并對于32位對齊的存取向左移位兩個位置。該偏移量還是符號擴(kuò)展的。
      下一程序計數(shù)(next_pc)-程序計數(shù)的下一值是根據(jù)當(dāng)前指令和數(shù)據(jù)編碼類型來確定的(如圖41中所示的下一PC邏輯4100)。對于下一PC值產(chǎn)生影響的主要有(i)跳轉(zhuǎn)指令(jcc_pc);(ii)分支轉(zhuǎn)移指令(target);(iii)中斷(int_vec);(iv)零開銷循環(huán)(loopstart_r);和(v)主存取(pc_or_hwrite)-核心寄存器文件提供r0至r31-占用r32~r59的用于擴(kuò)展的x1data-存取r60時loopcnt_r寄存器當(dāng)寄存器r62被編碼時選擇長立即數(shù)(p1iw)-當(dāng)寄存器r63被編碼時選定PC的只讀值(currentpc_r)-根據(jù)子操作碼對擴(kuò)展的立即數(shù)據(jù)類型(shimm_sext)加符號-當(dāng)激活捷徑(sc_load2)并且flag rct_fast_load_returns都被設(shè)定時選擇回裝(drd)-階段3的捷徑結(jié)果(p3res_sc)為PC生成邏輯4200的下一級復(fù)用(參見圖42所示的配置)向所有邏輯相關(guān)的指令提供PC激活信號,即,pcen_niv_nbrk,包括(i)跳轉(zhuǎn)指令(jcc_pc),當(dāng)dojcc為真時;(ii)中斷向量(int_vec),當(dāng)p2int為真時;(iii)分支轉(zhuǎn)移目標(biāo)地址(目標(biāo)),當(dāng)dorel為真時;(iv)比較和分支轉(zhuǎn)移目標(biāo)地址(target_buffer),當(dāng)docmprel為真時;(v)loopstart_r,當(dāng)doloop被設(shè)定時;和(vi)否則移動到下一指令(pc_plus_value)。請注意,向下一指令遞增取決于當(dāng)前指令的大小,因此相應(yīng)地16位指令要求遞增2,32位指令要求遞增4。PC的選擇處理的最終部分是如圖42所示的pcen_related 4204和pc_or_hwrite 4206之間。在圖示的實施例中,這些選擇是基于下列標(biāo)準(zhǔn)的1.pcen_related 4204當(dāng)
      -階段1未檢測到BRK指令i;-階段1的指令有效(ivalid);及-程序計數(shù)器被激活(pcen_niv_nbrk)2.currentpc_r[31:26]和h_dataw[23:0]4208,當(dāng)存在從主機(jī)寫入狀寄存器(h_pcwr)時3.h_dataw[31:0]4210,當(dāng)存在從主機(jī)寫入32位PC時(h_pc32wr)4.currentpc_r4212,適用于所有其他情況短立即數(shù)據(jù)(p2shimm_data)-短立即數(shù)據(jù)(p2shimm_data)是從指令本身中提取出來然后與階段3中使用的第二操作數(shù)(s2val)合并。該短立即數(shù)據(jù)是根據(jù)主次操作碼的標(biāo)準(zhǔn)從指令類型中提取的。該短立即數(shù)據(jù)被送到s2val的選擇邏輯。
      表16

      符號擴(kuò)展(i_p2sex)-回裝的符號擴(kuò)展(i_p2sex)按如下生成(i)op_16_ldwx_u6(p2opcode=0x13)-符號擴(kuò)展,當(dāng)和6位不帶符號數(shù)據(jù)執(zhí)行LDW指令時;(ii)對于所有其他16位LD操作停用符號擴(kuò)展;(iii)LD(p2opcode=0x02)-基于p2iw_r[6]符號擴(kuò)展裝入。
      狀態(tài)及PC輔助寄存器-圖示實施例的狀態(tài)寄存器和32位PC寄存器在合適時采用相同的寄存器;即,新寄存器的位置的當(dāng)前狀態(tài)寄存器內(nèi)的PCPC32[25:2]。
      向狀態(tài)寄存器4300(參見圖43)的一個寫入是指新PC32寄存器4400(圖44)在剩余部分不變的情況下僅在PC32[25:2]之間更新。ALU標(biāo)志、中斷激活和暫停標(biāo)志也在狀態(tài)32位寄存器4500中更新(圖45)。向PC32寄存器的寫入還反向工作,PC[25:2]在狀態(tài)寄存器4300中更新并且剩余的字段保持不變。狀態(tài)32寄存器4500的行為與ALU標(biāo)志更新、中斷激活和暫停標(biāo)志相同。所有在此討論的寄存器都是輔助映射的。
      用于更新上述寄存器的數(shù)據(jù)路徑4602,4604,4606參見圖46。狀態(tài)寄存器4300在如下情況下通過主機(jī)更新(i)向狀態(tài)寄存器4300實行一個寫操作(h_pcwr);或(ii)向PC32寄存器440實行一個寫操作(h_pc32wr)。其他情況下將PC的當(dāng)前值向前傳送。
      當(dāng)下列情況時暫停標(biāo)志被更新(i)接收到一個外部暫停信號,例如i_en=0;(ii)該暫停位被寫入調(diào)試寄存器(h_db_halt),例如,i_en=0;(iii)實行一個復(fù)位(i_postrst),并且處理器被設(shè)定為用戶定義的暫停狀態(tài),例如,i_en=arc_start;(iv)向狀態(tài)寄存器4300實行一個主機(jī)寫入(h_en_write),例如,i_en=NOT h_data_w(25);(v)向狀態(tài)32寄存器4300實行一個主機(jī)寫入(h_en32_write),即,i_en=NOT h_data_w(25);(vi)實行一個單循環(huán)步驟操作(l_do_step AND NOT do_inst_step),即,i_en=dostep;(vii)實行一個指令步驟操作(do_inst_step),即,i_en=NOT stop_step;(viii)引發(fā)一個來自行動點的處理器的暫停,存在一個BRK指令,即,i_en=0;或(ix)實行一個標(biāo)志操作(doflag AND en3),并且軼標(biāo)志被設(shè)定為適當(dāng)值,即,i_en=NOTs1val(0)。否則,將位設(shè)定為暫停位的上一個值,或?qū)嵭幸粋€單循環(huán)步驟;即,i_en=i_en_r OR step。
      采用類似的方式更新ALU標(biāo)志,當(dāng)(i)向狀態(tài)寄存器實行一個主機(jī)寫入(hostwrite)即,i_aflags=h_data_w(31:28);(ii)向狀態(tài)32寄存器實行一個主機(jī)寫入(host32_write)即,i_aflags=h_data_w(31:28);(iii)流水線階段3被遲延(NOT en3),即,i_aflags=i_aluflags r;(iv)在階段3內(nèi)有JLcc.f(ip3dojcc),因此更新標(biāo)志,即,i_aflags=s1val[31:28];(v)已經(jīng)執(zhí)行了一個激活標(biāo)志設(shè)定的擴(kuò)展指令,即,i_aflags=xflags;(vi)實行一個標(biāo)志操作(doflag AND NOT s1val(0)),并且設(shè)定為適當(dāng)值的ALU標(biāo)志,即,i_aflags=s1val[7:4];或(vii)一個激活標(biāo)志廟宇的有效指令已經(jīng)被執(zhí)行(alurload),即i_aflags=alurflags。否則,ALU標(biāo)志被設(shè)定為ALU標(biāo)志的上一個值,即,i_aflags=i_aluflags_r。
      階段2控制路徑被配置為支持16/32位ISA的處理器階段2的控制信號如表17所示
      表17

      以下對前述的信號進(jìn)行更為詳細(xì)的描述。
      如果以下條件中任何一個為真,那么階段2流水線激活(en2)-流水線階段2寄存器的激活en2為假(1)處理器核心被暫停,en=0;(2)階段3的一個有效指令被阻塞(held-up);(3)由于延遲裝入造成指令引用的寄存器被阻塞,holdup12 OR hp2_ld_nsc;(4)擴(kuò)展要求階段2被掛起,xholdup12=1;(5)階段2的中斷在發(fā)出取中斷向量之前等待未決指令的取操作,p2intAND NOT(ivalid);(6)階段2的分支轉(zhuǎn)移等待階段1的有效指令(延遲槽),i_branch_holdup2 AND(ivalid);(7)階段2的指令要求來自階段1的長立即數(shù),ip2limm AND(ivalid);(8)階段3的指令設(shè)定標(biāo)志,并且階段的分支轉(zhuǎn)移取決于遲延階段1和2,即i_branch_holdup2;(9)操作碼無效(p2iv=0)并且不是由于中斷引起的,(p2int=0);(10)如果階段1中存在分支轉(zhuǎn)移/跳轉(zhuǎn)指令,一行動點(或BRK)被引發(fā),該行動點(或BRK)使指令不能進(jìn)入階段3;(11)在階段2存在一個分支轉(zhuǎn)移/跳轉(zhuǎn)(I_p2branch),并在階段1具有一個沒有被取消的(NOT p2killnext)延遲槽依存(NOT p2limm ANDplp2step);(12)在階段3比較/分支轉(zhuǎn)移指令的比較結(jié)果為假,導(dǎo)致階段2的指令被遲延(cmpbcc_holdup12);或(13)在階段2檢測到一個寄存器的條件跳轉(zhuǎn),對于該跳轉(zhuǎn)需要來自階段3的一個指令的捷徑。以上這些不可得到,因此將流水線遲延(ip2_jcc_scstall)。當(dāng)指令引用的寄存器由于延遲裝入(3)的原因被阻塞時,holdup12 OR hp2_ld_nsc,流水線階段2根據(jù)圖47所未的關(guān)門邏輯4700中定義的信號被停用。
      要求階段3操作的標(biāo)志狀態(tài)的一個階段2分支轉(zhuǎn)移將會需要將階段1和2遲延(暫停);利用圖48所示的邏輯4800實施該遲延,此條件不適用于BRcc指令。
      停用機(jī)制在當(dāng)有條件轉(zhuǎn)移帶寄存器包含該地址時被激活,用于核心寄存器中選擇操作數(shù)1(sla)的地址是由下表(表18a)確定的表18a

      從核心寄存器選擇操作數(shù)2的地址是由下表(表18b)中的方式?jīng)Q定的。
      表18b

      目的地址(dest)-用于向核心處理器寫回的目的地址(dest)被送入裝入記分板單元(lsu),并至階段3的ALU。這些目的地址是基于指令編碼的。
      表19

      階段2指令有效(p2iv)-用于階段2的指令有效(p2iv)信號限定每條指令,隨著它進(jìn)入流水線時。當(dāng)存在遲延時是一個重要的信號,即,階段2的指令導(dǎo)致遲延并且執(zhí)行階段3的指令,這樣當(dāng)階段2的指令被允許在后面的階段繼續(xù)指令時就被無效,因為它已經(jīng)完成了。階段2有效信號在下列時刻被更新(i)階段2被允許繼續(xù),而階段1被掛起(en2 AND NOT en1),因此階段2的指令必需被取消,這樣當(dāng)階段1的指令可用時不再被重新執(zhí)行,i_p2iv=0;(ii)階段1被遲延(NOT en1),因此p2iv的狀被保留,i_p2iv=i_p2iv_r;或(iii)在階段1或階段2內(nèi)有中斷,或有長立即數(shù),或需要取消延遲槽,i_p2iv=0。否則階段2有效信號被設(shè)定到階段1的指令有效信號,i_p2iv=ivalid。
      階段2內(nèi)取消下一指令(p2killnext)-利用圖50所示的邏輯5000實施取消信號,該取消信號根據(jù)所選擇的模式將跳轉(zhuǎn)/分支轉(zhuǎn)移的延遲槽內(nèi)的指令取消。根據(jù)下面的標(biāo)準(zhǔn)取消延遲槽(i)延遲槽被取消并且分支轉(zhuǎn)移/跳轉(zhuǎn)指令被接受;(ii)延遲槽總是被取消并且跳轉(zhuǎn)/分支轉(zhuǎn)移指令不被接受。
      指令錯誤(instruction error)-當(dāng)軟件中斷(SWI)指令在階段2被檢測到時生成該錯誤。這與未知指令中斷是相同的,但是本實施例中被賦予了一個特別編碼,用以在程序控制下生成此中斷。當(dāng)以下任何為真時引發(fā)指令錯誤(i)對于32位ISA一個主操作碼是無效的并且子操作碼也都是無效的(f_arcop(p2opcode,p2subopcode)=0);(ii)一個16位ISA主操作碼無效(f_arcop16(p2opcode)=0),并且這不是一個擴(kuò)展指令(NOT x_idecode2 ANDNOT xt_aluop);(iii)檢測到一個SWI指令。當(dāng)上述任何一個條件為真時,p2iv的狀態(tài)被傳遞到instruction_error。
      條件代碼評價(p2condtrue)-該指令中的條件代碼字段被使用,用來規(guī)定需要為待執(zhí)行指令而設(shè)定的ALU標(biāo)志的狀態(tài)。當(dāng)條件代碼字段內(nèi)設(shè)定的條件與適當(dāng)?shù)臉?biāo)志設(shè)定相匹配時p2ccmatch和p2ccmatch16信號被設(shè)定。這些信號被下列相應(yīng)的32和16位指令的函數(shù)所設(shè)定1.對于32位ISA,p2ccmatch在(f_ccunit(aluflags_r,i_p2q_r)=1)時被設(shè)定2.對于16位ISA,p2ccmatch16在(f_ccunit16(aluflags_r,i_p2q16_r)=1)時被設(shè)定3.如果規(guī)定的條件為真并且如下所示,p2condtrue信號激活一條指令的執(zhí)行。
      4.對于分支轉(zhuǎn)移,p2condtrue=‘1’- 操作碼,p2opcode=0x0(op_bcc)-條件執(zhí)行,p2iw_r[4]/=0x15.對于基本方案指令,p2condtrue=‘1’-操作碼,p2opcode=0x4(op_fmt1)-條件寄存器操作,p2iw_r[23:22]=0x36.沒有設(shè)定條件代碼擴(kuò)展位,p2condtrue=p2ccmatch7.設(shè)定了條件代碼擴(kuò)展位,p2condtrue=xp2ccmatch8.如果規(guī)定的條件為真并且如下所示,那么信號p2condtrue16激活指令的執(zhí)行9.操作碼,p2opcode=0x1E(op_16_bcc),p2condtrue16=p2ccmatch1610.操作碼,p2opcode=0x1F(op_16_bl),p2condtrue16=p2ccmatch16寄存器字段對LSU有效(s1en,s2en,desten)-這些信號的作用是激活裝入記分板單元(lsu),以限定寄存器地址總線,即,s1a,fs2a和dest。這些信號從主操作碼(p2opcode)和子操作碼(p2subopcode)譯碼。每一個激活都1.源1操作數(shù)激活-s1en-f_s1en(使用有效核心寄存器時函數(shù)為真)-OR寫入核心寄存器的一條擴(kuò)展指令-OR寫入核心寄存器的一條擴(kuò)展運算2.源2操作數(shù)激活-s2en-f_s2en(使用有效核心寄存器時函數(shù)為真)
      -OR寫入核心寄存器的一條擴(kuò)展指令3.目的地址激活-desten-f_desten(使用有效核心寄存器時函數(shù)為真)-OR寫入核心寄存器的一條擴(kuò)展指令檢測到的進(jìn)棧/出棧指令(p2pushpop)-階段2存在一進(jìn)?;虺鰲V噶睿?dāng)(i)出棧-操作碼(p2opcode)=0x17且子操作碼(p2subopcode)=0x6;or(ii)出棧-操作碼(p2opcode)=0x17和子操作碼(p2subopcode)=0x7。存在LD/ST指令的特殊編碼。存在為出棧和進(jìn)棧的單獨信號,即分別為p2push和p2pop。
      檢測到的裝入和存儲-階段2檢測到的LD或ST編碼在表20中定義。這些編碼是從32/16位ISA的主操作碼(p2opcode)和子操作碼中提取的。主信號如下所示-p2st-這是階段2內(nèi)對所有ST的解碼-p2ld-這是階段2內(nèi)對所有LD的解碼-p2sr-這是階段2內(nèi)對所有輔助SR的解碼-p2lr-這是階段2內(nèi)對所有輔助LR的解碼表20

      階段2中的有效LD/ST被限定如下(i)mload2-p2ld ANDp2iv;和(ii)mstore2-p2st AND p2iv.請注意,取決于指令類型,16位ISA的子操作碼從指令字的不同單元中被提出。還有一點很重要的就是本實施例中所有的16位LD/ST運算都不支持.DI(指向存儲器繞過數(shù)據(jù)高速緩存)。
      更新BLINK寄存器(p2dolink)-該信號在階段2為有效分支轉(zhuǎn)移和連接指令的存在加上標(biāo)志(p2iv and p2jblcc),并且執(zhí)行此條BLcc指令的前置條件也是有效的(p2condtrue)。這種配置的后果是,BLINK寄存器在其到達(dá)流水線階段4時被更新。
      實行分支轉(zhuǎn)移(dorel/dojcc)-接受一個相對分支轉(zhuǎn)移(Bcc/BLcc),當(dāng)(i)分支轉(zhuǎn)移的條件為真(p2condtrue);(ii)循環(huán)的條件為假(NOT p2condtrue);和(iii)階段2指令有效(p2iv)。接受一個直接跳轉(zhuǎn)(Jcc),當(dāng)(i)該跳轉(zhuǎn)的條件為真(p2condtrue);(ii)該指令為一個跳轉(zhuǎn)指令(p2opcode=ojcc);和(iii)階段2的指令為有效(p2iv)。
      指令執(zhí)行接口以下對需要支持聯(lián)合32/16位ISA的指令執(zhí)行接口配置進(jìn)行詳細(xì)描述,特別是關(guān)于流水線的第三(執(zhí)行)階段。在這一階段,LD/ST要求被處理并且ALU運算也被執(zhí)行。本處理器第三階段包括一個桶式移位器,用來循環(huán)左/右移,算術(shù)左/右移運算。具有一個ALU,除地址生成外還執(zhí)行標(biāo)準(zhǔn)數(shù)學(xué)運算的加法和減法。指令執(zhí)行接口的信號在表21中定義。
      表21

      階段3的執(zhí)行邏輯要求對以下模塊進(jìn)行配置(i)rctl-控制額外指令,即,CMPBcc,BTST,等;(ii)bigalu-除了為LD/ST操作的地址生成,還有算術(shù)運算和邏輯表達(dá)式;(iii)aux_regs-包含輔助寄存器,包括loopstart,loopend寄存器;和(iv)lsu-對新進(jìn)棧/出棧指令的記分板的改進(jìn)。
      階段3數(shù)據(jù)路徑-參見圖51,是根據(jù)本發(fā)明階段3數(shù)據(jù)路徑的配置。在設(shè)計本數(shù)據(jù)路徑中考慮到的特殊功能包括(i)LD/ST指令的地址生成;(ii)執(zhí)行預(yù)先/后遞增邏輯進(jìn)棧/出棧指令的額外復(fù)用;(iii)作為基本方案ALU運算的MIN/MAX指令;(iv)NOT/NET/ABS指令;(v)ALU單元的配置;和(vi)Status32_L1/Status32_L2寄存器。圖51所示的數(shù)據(jù)路徑5100顯示兩個操作數(shù),s1val 5102和s2val 5104,被鎖存入階段3,其中加法器5106和其他硬件執(zhí)行適當(dāng)?shù)挠嬎銠C(jī)運算;即算術(shù)、邏輯、移位等。在本配置中,一條指令一旦離開階段3就不能被取消,因此所有寫回和LD/ST指令都將被執(zhí)行。
      還提供了復(fù)用器4602(參見圖46),如果標(biāo)志設(shè)定被禁止,用于根據(jù)當(dāng)前操作或最后標(biāo)志設(shè)定操作來選擇標(biāo)志。
      本實施例的階段3算術(shù)單元為了生成LD/ST存取而生成的地址執(zhí)行必要的計算和標(biāo)準(zhǔn)算術(shù)操作,例如,ADD,SUB等。階段2的的輸出,即s1val 5102和s2val 5104被送入階段3,并且這些輸入在進(jìn)入32位加法器5106之前被格式化(取決于指令類型)。加法器具有四種運算模式,包括加、帶進(jìn)位加、減、帶進(jìn)位減。這些模式從32位指令的指令操作碼和子操作碼中提取。圖52顯示了與算術(shù)單元相關(guān)的邏輯5200。信號s2val_shift與如前所定義的移位ADD/SUB指令相關(guān)。
      在ALU中使用加法器5106以生成一個結(jié)果的指令如表22所示。操作碼被集合到一起以便為第二操作數(shù)選擇合適的值。
      表1

      在第一實施例中,將來自相干光源404的輻射經(jīng)過可選的光學(xué)向上的單位移位的指令。在圖中所式的實施例中,這些指令都是單操作數(shù)據(jù)指令,并且被表23所限定。
      表23

      被寫回到寄存器文件的階段3的運算結(jié)果是從以下源中提取的(i)回裝(drd);(ii)主機(jī)寫入核心寄存器(h_dataw);(iii)PC到ILINK/BLINK寄存器,分別用于中斷和分支轉(zhuǎn)移(s2val);和(iv)ALU運算的結(jié)果(i_aluresult)。圖56顯示了本發(fā)明的結(jié)果選擇邏輯5600。請注意ALU(i_aluresult)5602的操作結(jié)果是由邏輯單元5604、32位加法器5606、桶式位移器5608、擴(kuò)展ALU5610和輔助接口5612中提取的。
      狀態(tài)標(biāo)志的更新隨著算術(shù)運算(ADD,ADC,SUB,SBC)、邏輯運算(AND,OR,NOT,XOR,BIC)和單操作數(shù)指令(ASL,LSR,ROR,RRC)進(jìn)行的。圖57顯示了從各種算術(shù)、邏輯和擴(kuò)展單元中選擇標(biāo)志。
      寫回寄存器地址-寫回寄存器地址是從以下按優(yōu)先順序排列的源中選定的,(1)來自LSU的用于回裝的寄存器地址,regadr;(2)用于寫入核心寄存器的來自主機(jī)的寄存器地址;h_regadr;(3)用于1級中斷的Ilink1(r29)寄存器,rilink1;(4)用于2級中斷的Ilink2(r30)寄存器,rilink2;(5)LD/ST地址寫回,p3b;(6) POP/PUSH地址寫回,r28;(7)用于BLcc指令的Blink寄存器,rblink;和(8)標(biāo)準(zhǔn)ALU運算的地址寫回,p3a。圖58顯示了本發(fā)明的寫回地址生成邏輯5800。
      延遲LD寫回通過為一個周期設(shè)定hold_host信號越過(override)主機(jī)寫入。參見本文其他地方此數(shù)據(jù)路徑關(guān)于控制信號的討論。對于16位指令,操作碼(p3opcode)是0x08 to 0x1f的,因此,寫回地址必須被重新映射到32位指令編碼(在流水線的階段2實行)。這適用于p3a字段,其應(yīng)該將16位寄存器地址格式化,這樣寄存器文件可以正確地更新。從階段2的目的字段的16位編碼為p2a_16 5802,并且被翻譯成32位編碼,如圖62所示。新的寫回5804根據(jù)操作碼和流水線激活(en2)被廟宇而被鎖存入階段3Min/Max指令-圖59顯示了處理器內(nèi)MIN/MAX指令數(shù)據(jù)路徑5900的配置。圖示實施例的該MIN/MAX指令要求適當(dāng)?shù)男盘?,即s1val 5902或s2val 5904被傳送到階段4并根據(jù)計算結(jié)果進(jìn)行寫回。這些指令是通過從s1val減去s2val并依靠是否MAX或MIN檢查哪個值大些或小些。從算術(shù)單元有三個源可供選擇,因為返回到階段4的值不作為加法器內(nèi)計算的結(jié)果,而是來自源操作數(shù)。該值按如下選擇(i)s1val-操作碼為MIN(p3opcode=omin)并且源二操作數(shù)大于源一操作數(shù)(s2val_gt_s1val=1);(ii)s1val-操作碼為MAX(p3opcode=omax)a且源二操作數(shù)不大于源一操作數(shù)(s2val_gt_s1val=0);(iii)s2val-用于所有其他情況的MIN/MAX指令。這些指令的零、溢出和負(fù)的標(biāo)志自標(biāo)準(zhǔn)算術(shù)運算保持不變。進(jìn)位樗需要額外的支持,如圖60所示,顯示了MIN/MAX指令的進(jìn)位標(biāo)志邏輯6000。
      Status32_L1 &amp; Status32_L2寄存器-用于當(dāng)1級或2級叫斷被激活時的保存標(biāo)志狀態(tài)的寄存器被分別稱為Status32_L1和Status32_L2。Status32_L1寄存器在下列任何一種條件為真時被更新(i)中斷在階段3(p3int AND wba=rilink1) -用aluflags_r,i_e1_r and i_e2_r對新值更新;(ii)要求主機(jī)存取(h_write AND aux_access AND h_addr=rilink1)-用h_dataw更新新值;(iii)要求輔助存取(aux_write AND aux_access ANDaux_addr=rilink1)-用aux_dataw對新值更新。
      Status32_L1和Status32_L2Status32_L2寄存器在當(dāng)以下任何一條件為真時被更新(i)中斷在在階段3(p3int AND wba=rilink2)-用aluflags_r,i_e1_r和i_e2_r對新值更新;(ii)要求主機(jī)存取(h_write ANDaux_access AND h_addr=rilink2)-用h_dataw對新值進(jìn)行更新;或(iii)要求輔助存取(aux_write AND aux_access ANDaux_addr=rilink2)-用aux_dataw對新值更新。
      階段3控制路徑-階段3的控制信號如下(i)為階段3激活-en3;(ii)階段3指令有效-p3iv;(iii)遲延階段1,2和3-holdup123;(iv)LD/ST要求-mload,mstore;(v)寫回,p3wba;(vi)其他控制信號,p3_wb_req.這些信號支持進(jìn)行ALU運算,擴(kuò)展指令和LD/ST存取機(jī)制。
      激活流水線階段3(en3)-如果以下任何條件為真(i)處理器內(nèi)核被暫停,en=0;(ii)擴(kuò)展要求階段1,2和3掛起,因為多周期ALU運算,xholdup123 AND xt_aluop;(iii)直接存儲器流水線忙(mwait)并且不能接受本自處理的更多的LD/ST存??;(iv)在下一個周期實行一個延遲的LD寫回并且階段3的指令會寫回到寄存器文件,ip3_load_stall;(v)行動點(或BRK)被檢測到并且指令已經(jīng)被清除(i_AP_p3disable_r)至stage4。階段3返回LD遲延信號(ip3_load_stall)被從ldvalid中取出。當(dāng)rctl_fast_load_returns被激活時,階段3按如下被定義激活(i)延遲的LD寫回(ldvalid_wb)會在下一個周期被實行并且階段3的指令會寫回到寄存器文件(p3_wb_req);(ii)延遲的LD寫回(ldvalid_wb)會在下一個周期實行并且階段3的指令迫使一個向寄存器文件的寫回,并且想從寫回階段得到數(shù)據(jù)和寄存器地址(p3_wb_rsv)。
      階段3指令有效(p3iv)-階段3的有效指令(p3iv)信號在每條指令通向流水線的階段3的過程中限定每條指令。階段3無效信號被更新,當(dāng)(i)階段3被遲延(NOT en3)因此p3iv的狀態(tài)被保留,i_p3iv=i_p3iv_r;(ii)階段2(NOT en2)指令沒有完成,當(dāng)指令在階段3已經(jīng)成功地被實現(xiàn)(en3),所以會移向階段4。這樣以下周期的指令應(yīng)該被無效,否則會被重復(fù)執(zhí)行,i_p3iv=0.(iii)階段2有ABS指令并且操作數(shù)為正(p3killabs),因此在階段3將指令無效,i_p3iv=0;或(iv)一個CMPBcc已經(jīng)到達(dá)了階段3并且比較為假,因此下一條指令應(yīng)該被無效,i_p3iv=0。信號p3iv在其他情況被設(shè)定為來自上一階段的指令無效信號;即,i_p3iv=i_p2iv_r。
      寫回地址激活(p3_wb_req)-在下列條件下將會請求一個寫回(i)分支轉(zhuǎn)移并連接(BLcc)寄存器寫回,p3dolink AND p3iv;(ii)中斷連接寄存器寫回,(p3int);(iii)LD/ST地址寫回包括PUSH/POP,p3m_awb;(iv)擴(kuò)展指令寄存器寫回,p3xwb_op;(v)從輔助寄存器空間裝入,p31r;或(vi)標(biāo)準(zhǔn)條件指令寄存器寫回,p3ccwb_op。BLcc指令被p3iv限定,因此被取消的指令被算入,而所有其他條件早已被p3iv限定。寫回至寄存器文件支持PUSH/POP指令,因為必須自動更新保留SP值的寄存器(r28)。
      還提供了另一為當(dāng)前階段3內(nèi)指令而保留階段4的寫回請求。
      檢測到的PUSH/POP指令(p3pushpop)-階段3是否存在PUSH或POP指令的狀態(tài)在流水線激活階段2(en2)時被設(shè)定(p3pushpop=p2pushpop),否則它還保持不變。還相應(yīng)地存在PUSH或POP指令于階段3,當(dāng)PUSH-操作碼(p3opcode)=0x17并且子操作碼(p3subopcode)=0x6,和指令有效(p3iv);或POP-操作碼(p3opcode)=0x17和子操作碼(p3subopcode)=0x6,和指令是有效的(p3iv)存在特別LD/ST指令的編碼。存在單獨的PUSH和PO指令,即,分別為p3push和p3pop。本指令被作為16位指令支持。
      檢測到的裝入和存儲-LD,ST,LR或SR操作的編碼在階段3被檢測到并被從與子操作碼相關(guān)的主操作碼中取出(p3opcode),如表24所示表24

      更新BLINK寄存器(p3dolink)-標(biāo)志存在階段3的有效分支轉(zhuǎn)移和連接指令是信號是p3dolink。當(dāng)流水線激活階段2(en2)被設(shè)定時,該信號通過采用p2dolink更新p3dolink由階段2被更新。否則p3dolink保持不變。
      寫回寄存器地址選擇器-該寫回寄存器地址通過下列控制信號進(jìn)行選擇,按優(yōu)先順序排列(1)來自LSU的寄存器地址用于回裝,regadr;(2)來自主機(jī)寄存器地址用于向核心寄存器寫入,h_regadr;(3)Ilink1(r29)寄存器,用于1級中斷,rilink1;(4)Ilink2(r30)寄存器,用于2級中斷,rilink2;(5)LD/ST地址寫回,p3b;(6)POP/PUSH地址寫回,r28;(7)Blink寄存器,用于BLcc指令,rblink;和(8)地址寫回,用于標(biāo)準(zhǔn)ALU運算,p3a。延遲LD寫回通過為一個周期設(shè)定hold_host信號來超越主機(jī)寫入。數(shù)據(jù)路徑如前所述。
      寫回階段寫回階段是本處理器的最后階段,ALU運算、回裝、擴(kuò)展和主機(jī)寫入的結(jié)果都被寫入核心寄存器文件。該寫回接口在表25中描述。
      表25

      當(dāng)發(fā)生下列情況時寫回激活(p3wb_nxt)的預(yù)鎖值被更新1.正在發(fā)生主機(jī)寫入(cr_hostw),p3wb_nxt=1;2.一個延遲裝入返回(ldvalid_wb),p3wb_nxt=1;3.Tangent處理器被暫停(NOT en),p3wb_nxt=0;4.由于多周期ALU運算,擴(kuò)展要求階段1,2和3(xholdup123AND xt_aluop),p3wb_nxt=0;5.直接存儲器流水線忙(mwait)并且不能接受更多的來自處理器的LD/ST存儲,p3wb_nxt=0;或6.在下一周期實行一延遲的LD寫回并且階段3的指令會寫到寄存器文件(ip3_load_stall),p3wb_nxt=0.
      取指令接口取指令接口實行通過調(diào)整器來自指令高速緩存對指令的要求。調(diào)整器將返回指令格式化進(jìn)32位或16位,隨源操作數(shù)寄存器依靠指令進(jìn)行擴(kuò)展。來自調(diào)整器16位指令的指令格式在表26中示出(注意下面的例子中假設(shè)16位指令被定位于I-cache返回的長字的高位字)。
      表26

      用于本16位ISA的16位指令源操作數(shù)被映射到32位ISA。操作碼的格式為5位寬度。16位ISA的剩余部分在主流水線控制塊(rctl)中譯碼。
      操作碼(iplopcode)是從調(diào)整器輸出p1iw[31:27]提取的。該操作碼僅在當(dāng)流水線激活階段1信號en1對p2opcode為真時時被鎖存。源操作數(shù)的地址取自對準(zhǔn)器輸出p1iw[25:12]。這些源地址在流水線激活階段1的信號en1對s1a,s2a為真時被鎖存。來自16位ISA的3位地址必須被擴(kuò)展至其在32位ISA中相當(dāng)?shù)拇笮 ?br> 16位指令字的剩余字段在進(jìn)入處理器階段2之前不要求任何操作。
      在16位指令集內(nèi)定義字段位置用的常數(shù)在表27中給出。請注意15位ISA的操作數(shù)已經(jīng)被重新映射到被送至處理器的32位指令長字的高部。已經(jīng)這樣做是為了使聯(lián)合ISA的指令譯解更為簡潔。
      表27

      圖式實施例的32位ISA的常量定義使用一現(xiàn)有的處理器(如,ARCtangent A4)作為一個基線。這樣的好處在于命名約定不需要改變,即便是每個字段在指令長字中的位置是特別適合于本發(fā)明的。
      指令調(diào)整器接口下面對指令調(diào)整器的接口進(jìn)行詳細(xì)描述。該模塊具有從一個指令高速緩存提取一個32/16位值的能力,并將其格式化,使處理器能夠?qū)⑵渥g碼。本實施例的調(diào)整器配置支持以下特性(i)32位存儲器系統(tǒng);(ii)對32/16位指令格式化并將其送至處理器;(iii)支持big endian和little endian;(iv)對齊和未對齊的存??;和(v)中斷。表28中對指令調(diào)整接口進(jìn)行了說明。
      表28

      所據(jù)舉實施例的調(diào)整器能夠確定所要求的指令是16位還是32位,如下所述。
      通過讀取兩個最重要的位,即[31]和[32],調(diào)整器能夠確定指令是16位還是32位。它取決于p1iw[31:30]=“00”,指令是32位寬,或者當(dāng)p1iw=“01”,“10”or“11”中的任何一個,則位16位。如上所述,如果調(diào)整器中的緩沖器含有長字的較低的16位,當(dāng)一個通路被執(zhí)行時,沒有從緩存器中應(yīng)用全部的32位的長字指令。調(diào)整器保持這個值的歷史,并決定是否是一個32/16位的指令。如果下一個指令是一個緩存器的沖擊,緩沖器的值是指令的一部分,則這允許未對齊通道的單個循環(huán)的執(zhí)行。從處理器上會有一個附加的信號,祺告訴調(diào)整器下一個32位的長字是長時間的(p2limm),因此其能夠傳到下一階段而保持不變。
      當(dāng)被重置(或重啟)時,調(diào)整器的性能取決于指令是32位寬(=“00”)或是16位(當(dāng)p1iw=“01”,“10”or“11”中的任意一個)。圖61顯示了連續(xù)指令流的一個實例。如圖所示,由于p1iw[31:30]=“00”,第一個指令6102是一個32位的。調(diào)整器不需要進(jìn)行任何格式化。由于p1iw=“01”,“10”or“11”,第二指令6104是16位的。注意,當(dāng)較低的16位代表的是地址在pc+6的指令時,這個長字的前16位代表的是地址在pc+4的指令。由于調(diào)整器貯存的是較低的16位,其必須檢測,以確定其是否是一個完整的16位指令或一個32位指令的前半部分。這取決于調(diào)整器如何過濾取回的信號。第三指令6106是16位寬,其從緩沖器中獲取,并轉(zhuǎn)存到處理器中。沒有必要從存儲器中取回。第四個指令6108是32位寬,其作為第一指令處理。
      由于p1iw[31:30]!=“00”,第五個指令是6110。較低的16位是可緩沖的。第六個指令6112是32位寬,從下一個連續(xù)的長字通過緩沖的16位和前16位的串連而產(chǎn)生。較低的16位是可緩沖的。
      圖62顯示了連續(xù)指令流的另一個實例。由于p1iw=“01”,“10”or“11”,第一指令6202是16位的。調(diào)整器通過p1iw 16將這個指令傳至處理器。較低的16位是可緩沖的。第二指令6204也是16位的,其被發(fā)現(xiàn)為同一長字的一部分,并在p1iw[15:14]=“01”處保持第一指令。注意,前16為代表的指令在位置pc,而較低的16位代表的是pc+2處的指令。第三指令6206也是16位的指令,并以與(1)相同的方式處理。較低的16位是可緩沖的。第四指令6208是32位寬的,其通過(3)處可緩沖的指令與下一連續(xù)長字的串連而產(chǎn)生。較低的16位是可緩沖的。第五指令6208是32位寬的,其通過(4)處可緩沖的指令與下一連續(xù)長字的串連而產(chǎn)生。較低的16位是可緩沖的。第六指令6212是16位的指令,其從緩沖器中的歷史取出,并轉(zhuǎn)存到處理器中。
      對于被校對的具有目的文件地址的分支轉(zhuǎn)移(或跳轉(zhuǎn)),由于當(dāng)p1iw=“01”,“10”or“11”時,第一指令是16位。這就是跳轉(zhuǎn)(或者分支轉(zhuǎn)移)指令。調(diào)整器在將指令傳遞給處理器之前,執(zhí)行合適的格式化。較低的16位是可緩沖的。由于緩沖值為p1iw[15:14]=“00”,第二指令是32位的。注意,指令的前16位在地址pc+4,e而較低的16位在pc+6。這遲延了跳轉(zhuǎn)(或分支轉(zhuǎn)移)指令的跟蹤。在分支轉(zhuǎn)移(2)后的下一個指令是32位寬的。這個長字被校對,所以沒有等待時間。接下來的指令(3)是16位的指令,較低的16位是可緩沖的。過程繼續(xù),直至被終止。
      當(dāng)分支轉(zhuǎn)移(或跳轉(zhuǎn))被采納,調(diào)整器的性能取決于跳轉(zhuǎn)指令是否為32位寬(=“00”)或16位(當(dāng)p1iw=“01”,“10”or“11”中的任何一個)。圖64顯示了分支轉(zhuǎn)移或跳轉(zhuǎn)指令流的實例。調(diào)整器在將指令傳給處理器前現(xiàn)進(jìn)行合適的格式化。較低的16位是可緩沖的。由于(1)處的緩沖值p1iw[15:14]=“00”,第二指令(1a)是32位的。注意,指令前16位在pc+4處,而較低的16位在pc+6處。這延緩了跳轉(zhuǎn)(或分支轉(zhuǎn)移)指令的跟蹤。分支轉(zhuǎn)移(2)后采用的下一個指令是32位寬。由于調(diào)整器因為一個未對齊的通道必須取回兩個長字,這兒有兩個周期的等待時間。這意味著PC+N處的較低的16位是指令的前部分,下述長字的前16位體哦女冠了較低部分的指令。第二長字的較低的16位是可緩沖的。下述指令(3)也是32位寬的指令,其通過(3)處的16位和下一連續(xù)的長字的前16位之間的串連而產(chǎn)生。較低的16位是可緩沖的。
      注意,當(dāng)未對齊通道從分支轉(zhuǎn)移返回,調(diào)整器如上所述進(jìn)行運轉(zhuǎn)。
      零點以上的環(huán)的單個32位出現(xiàn)的調(diào)整器的性能可以被優(yōu)化。當(dāng)32位的指令降低通過一個長字的邊界,默認(rèn)的調(diào)整器的性能每次指令進(jìn)行2次讀取。較好的方法是發(fā)現(xiàn)當(dāng)前讀取的下一個脈沖pc與前一個讀取脈沖的“下一個pc”的匹配。這個信息可以用于阻止額外的讀取過程。圖64顯示了這種情況下指令流的一個實例。如圖所示,由于p1iw[31:30]?。健?0”,第一指令(1)是16位的。這是跳轉(zhuǎn)(或分支轉(zhuǎn)移)指令。調(diào)整器在指令傳給處理器前進(jìn)行合適的格式化。較低的16位是可緩沖的。由于(1)處的緩沖值p1iw[15:14]=“00”,第二指令(1a)是32位的。注意,指令的前16位在pc+4處,而較低的16位在pc+6處。這遲延了跳轉(zhuǎn)(或分支轉(zhuǎn)移)指令的跟蹤。分支轉(zhuǎn)移(2)后采取的下一個指令是32位寬的。由于調(diào)整器必須因未對齊通道進(jìn)行讀取兩個長字,所以有兩個周期的等待時間。這意味著位于PC+N處的較低16位是指令的前16位,并且接下來的長字前16位提供了較低部分的指令。第二長字的較低的16位是可緩沖的。接下來的指令(3)也是32位寬的指令,其通過(3)處緩沖的16位和下一連續(xù)長字的前16位的串連而產(chǎn)生,較低的16位是可緩沖的。
      MOVLP_COUNT,5 ;no.of times to do loopMOVr0, dooploop>>2 ;convert to longword sizeADDr1, r0,1 ;add 1 to‘dooploop’addressSR r0, [LP_START] ;setup loop start regi sterSR r1, [LP_END] ;setup loop end registerNOP ;allow time to update regsNOPdooploopOR r21, r22,r23 ;single inst in loopADDr19, r19,r20 ;first inst.after loop請參閱圖65和下述實例代碼。注意當(dāng)未對齊通道從分支轉(zhuǎn)移返回,調(diào)整器如上所述進(jìn)行運轉(zhuǎn)。
      注意,當(dāng)中斷信號產(chǎn)生時,本實施例中的調(diào)整器也必須能夠支持中斷信號。所以運行排列的字的中斷信號可以通過。當(dāng)緩沖器的指令時無效的或當(dāng)分支轉(zhuǎn)移/跳轉(zhuǎn)被采納時,調(diào)整器的狀態(tài)被重置。
      集成電路裝置如上所述,此處公開的處理器的核心結(jié)構(gòu)時IC設(shè)備的基礎(chǔ)。實例中的設(shè)備通過運用本發(fā)明的方法,為用戶定制的VHDL設(shè)計進(jìn)行生產(chǎn)。然后集成為邏輯等級的方法,接著通過在半導(dǎo)體領(lǐng)域常用的合成、設(shè)計和制造,以簡化為一個物理設(shè)備。例如,本發(fā)明于0.38、0.18和0.1微米的工藝相兼容,并最終可以應(yīng)用到甚至更小的工藝中(如IBM/AMD發(fā)展的0.065微米的工藝),或除了此處清楚公開的替代的其它解決辦法。設(shè)備制造的一個實施例為0.1微米的“藍(lán)色邏輯“Cu-11的工藝由IBM提供,盡管其它的可以清晰的被應(yīng)用。
      本領(lǐng)域技術(shù)人員可以知道,本發(fā)明中的IC設(shè)備也可以包括任何普通的可用的外圍設(shè)備,如連續(xù)的通信設(shè)備,平行端口,USB端口/驅(qū)動器,定時器,計數(shù)器,高速驅(qū)動器,模擬到數(shù)字的轉(zhuǎn)換器(A/D),數(shù)字到模擬的轉(zhuǎn)換器(D/A)),中斷信號處理器,LCD驅(qū)動器,存儲器,RF系統(tǒng)構(gòu)件,和其它的類似的設(shè)備。而且,處理器也可以包括其它常用的或應(yīng)用較好的電路,以便在芯片上形成一個有用的系統(tǒng),以提供一些不同功能,如上所述。本發(fā)明不僅限于類型,數(shù)字或外圍設(shè)備的復(fù)雜性和其它電路,其可以通過應(yīng)用方法和設(shè)備進(jìn)行合并。更確切的,任何由主要施加在物理存儲器上的現(xiàn)有半導(dǎo)體工藝的缺陷,可以通過超時進(jìn)行改進(jìn)。因此,如同半導(dǎo)體工藝得到改善,應(yīng)用本發(fā)明的復(fù)雜性和可能的集成度會進(jìn)一步提高。
      其進(jìn)一步認(rèn)識到,任何結(jié)合如前所述的“雙重ISA”功能的方法或其組合可以應(yīng)用到制造IC設(shè)備。前面提到的申請?zhí)枮?9/418.663的美國專利公開了一種具有面向用戶的指令(即軟件)體系的一個實例,其是一種邏輯電路的集成方法。
      在本發(fā)明的技術(shù)領(lǐng)域內(nèi),只要具備最基本的知識,可以對本發(fā)明的其他可操作的實施例進(jìn)行改進(jìn)。在本發(fā)明中對實質(zhì)性技術(shù)方案提出了專利保護(hù)請求,其保護(hù)范圍應(yīng)包括具有上述技術(shù)特點的一切變化方式。
      以上所述,僅是本發(fā)明的較佳實施例而已,并非對本發(fā)明作任何形式上的限制,雖然本發(fā)明已以較佳實施例揭露如上,然而并非用以限定本發(fā)明,任何熟悉本專業(yè)的技術(shù)人員,在不脫離本發(fā)明技術(shù)方案范圍內(nèi),當(dāng)可利用上述揭示的方法及技術(shù)內(nèi)容作出些許的更動或修飾為等同變化的等效實施例,但凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實質(zhì)對以上實施例所作的任何簡單修改、等同變化與修飾,均仍屬于本發(fā)明技術(shù)方案的范圍內(nèi)。
      附錄1-指令編碼的實施例2000-2003 ARC International.All rights reserved.使用寄存器的32位指令(圖1)-5~0位-目的文件字段-11~6位-源操作數(shù)2的字段-14~12位-源操作數(shù)1的字段(高于3位)-15位-由標(biāo)記(F)位使用,以便將基于指令的結(jié)果標(biāo)記在寄存器中的狀態(tài)被被置位-21~16位-Sub-opcode字段提供指令類型可用的附加選擇-23~22位-模式字段提供第2操作數(shù)的信息,即“00”-Register(寄存器)“01”-Unsigned 6-bit immediate(立即不標(biāo)記6位)“10”-Signed 12-bit immediate(立即標(biāo)記12位)“11”-Conditional execution(有條件執(zhí)行)-Bits 26 to 24-Source Operand 1 field(lower 3-bits)-26~24位-源操作數(shù)1的字段(低于3位)-Bits 31 to 27-Major Opcode-31~27位-Major Opcode32位LD指令(圖1)-0位-標(biāo)記擴(kuò)展(X)短快數(shù)據(jù)-2~1位-數(shù)據(jù)大小(ZZ),即“00”-Byte(字節(jié))“01”-Word(字)“10”-Longword(長字)“11”-Reserved(保留)-4~3位-重寫的地址模式(A),即“00”-No update(沒有更新)“01”-Pre-increment/decrement(預(yù)增/減)“10”-Post-increment/decrement(滯后增/減)“11”-Scaled address mode(排列的地址模式)-5位-直接向存儲器中負(fù)載,迂回數(shù)據(jù)緩存器(DI)-11~6位-返回負(fù)載的目的文件的寄存器-Bits 14 to 12-Source Operand 1 field(upper 3-bits)-14~12位-源操作數(shù)1的字段(高于3位)-15位-當(dāng)與從源操作數(shù)1的數(shù)據(jù)合并時,大部分重要的9位的位立即標(biāo)記數(shù)據(jù)偏移字段至存儲器的位置-23~16位-當(dāng)與從源操作數(shù)1的數(shù)據(jù)合并時,較低部分的9位立即標(biāo)記數(shù)據(jù)偏移字段至存儲器的位置-26~24位-源操作數(shù)1的字段(低于3位)-31~27位-Major Opcode32位ST指令(圖1)-0位-標(biāo)記擴(kuò)展(X)短快數(shù)據(jù)-2~1位-數(shù)據(jù)大小(ZZ),即
      “00”-Byte(字節(jié))“01”-Word(字)“10”-Longword(長字)“11”-Reserved(保留)-4~3位-重寫的地址模式(A),即“00”-No update(沒有更新)“01”-Pre-increment/decrement(預(yù)增/減)“10”-Post-increment/decrement(滯后增/減)“11”-Scaled address mode(排列的地址模式)-Bit 5-Store direct to memory and bypass the data cache(.DI)-5位-直接貯存到存儲器和迂回數(shù)據(jù)緩沖器(DI)-11~6位-源寄存器字段,其含有寄存器的地址,寄存器中含有存儲到存儲器的數(shù)據(jù)-14~12位-源操作數(shù)1的字段(高于3位)-15位-當(dāng)與從源操作數(shù)1的數(shù)據(jù)合并時,大部分重要9位的位,立即標(biāo)記數(shù)據(jù)偏移字段,應(yīng)用到來自存儲器的位置-23~16位-當(dāng)與從源操作數(shù)1的數(shù)據(jù)合并時,較低部分的9位,立即標(biāo)記數(shù)據(jù)偏移字段,應(yīng)用到來自存儲器的位置標(biāo)記直接的數(shù)據(jù)偏移字段-26~24位-源操作數(shù)1的字段(低于3位)-Bits 31 to 27-Major Opcode-31~27位-Major Opcode32位Bcc/BLcc指令(圖1)-4~0位-條件碼(Q)的字段-5位-這種選擇遲延了跟蹤模式-15~6位-21位的較高部分標(biāo)記直接的數(shù)據(jù)偏移字段至源自分支轉(zhuǎn)移的目標(biāo)地位-16位-總是將有條件的分支轉(zhuǎn)移設(shè)置為0-26~17位-21位的較低部分標(biāo)記直接的數(shù)據(jù)偏移字段至源自分支轉(zhuǎn)移的目標(biāo)地位32位BRcc指令(圖1)-4~0位-條件碼(Q)的字段-5位-這種選擇遲延了跟蹤模式-11~6位-源存儲器的字段,當(dāng)位4是正確的時候,含有寄存器的地址,該寄存器含有數(shù)據(jù)或未標(biāo)記的6位的直接的值。其和源操作數(shù)1的值相比較-14~12位-源操作數(shù)1的字段(高于3位)-15位-大部分重要的9位的位標(biāo)記直接數(shù)據(jù)字段,應(yīng)用于源自分支轉(zhuǎn)移的目標(biāo)地位-16位-總是將有條件的比較/分支轉(zhuǎn)移指令設(shè)置為1-23~17為-較低部分的9位標(biāo)記直接數(shù)據(jù)字段,應(yīng)用于源自分支轉(zhuǎn)移的目標(biāo)地位-26~24位-源操作數(shù)1的字段(低于3位)-31~27位-Major Opcode
      權(quán)利要求
      1.一種數(shù)據(jù)處理器裝置,具有一多階段流水線和一指令集;其特征在于其包括多個第一指令,具有一第一長度;多個第二指令,具有一第二長度;和邏輯部分,被適合于從一具有該第一長度和第二長度指令的單一程序中將其中包含的該第一長度指令和第二長度指令進(jìn)行譯碼和處理。
      2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理器裝置,其特征在于其中所述的邏輯部分包括一指令調(diào)整器,該指令調(diào)整器被置于該流水線的第一階段,該調(diào)整器被適合于提供該第一長度的至少一個第一字和該第二長度的至少一個第二字到譯碼邏輯,該譯碼邏輯在該至少一個第一和第二字中進(jìn)行選擇。
      3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)處理器裝置,其特征在于其中所述的調(diào)整器還進(jìn)一步包括一個緩沖器,該緩沖器被適合于存儲來自一個與該調(diào)整器在操作上聯(lián)接的指令高速緩沖存儲器的一個取出指令的至少一部分,該存儲減緩該流水線的遲延
      4.根據(jù)權(quán)利要求2或3所述的數(shù)據(jù)處理器裝置,其特征在于其中所述的選擇行為的作出至少部分的基于該存儲器最小開銷。
      5.根據(jù)權(quán)利要求4所述的數(shù)據(jù)處理器裝置,其特征在于其中所述的指令集包括至少一條用戶配置的擴(kuò)展指令。
      6.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理器裝置,其特征在于其中所述的數(shù)據(jù)處理器是用戶可配置的,該用戶可配置至少包括選擇至少一條用于該指令集內(nèi)的擴(kuò)展指令的能力。
      7.根據(jù)權(quán)利要求6所述的數(shù)據(jù)處理器裝置,其特征在于其中所述的至少一條擴(kuò)展指令包括該第一或第二指令之一。
      8.根據(jù)權(quán)利要求7所述的數(shù)據(jù)處理器裝置,其特征在于其中所述的邏輯部分包括一個指令調(diào)整器,置于該流水線的第一階段,該調(diào)整器被適合于提供該該第一長度的至少一個第一字和該第二長度的至少一個第二字以便譯碼邏輯,該譯碼邏輯在該至少一個第一和第二字中進(jìn)行選擇。
      9.根據(jù)權(quán)利要求8所述的數(shù)據(jù)處理器裝置,其特征在于其中所述的調(diào)整器還進(jìn)一步包括一個緩沖器,該緩沖器被適合于存儲來自一個與該調(diào)整器在操作上聯(lián)接的指令高速緩沖存儲器的一個取出指令的至少一部分,該存儲減緩該流水線的遲延
      10.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理器裝置,其特征在于其中所述的至少一個第一或第二指令包括一個分支轉(zhuǎn)移或跳轉(zhuǎn)指令,該數(shù)據(jù)處理器裝置被配置為提供在一個具有一個高部和低部的第一長字內(nèi)的第一16位分支轉(zhuǎn)移/跳轉(zhuǎn)指令,該分支轉(zhuǎn)移/跳轉(zhuǎn)指令被置于該高部;處理該分支轉(zhuǎn)移/跳轉(zhuǎn)指令,包括緩沖該低部;連接該第一長字被緩沖的低部于一個第二長字的高部,產(chǎn)生一個第一32位指令;并且保留該分支轉(zhuǎn)移/跳轉(zhuǎn),其中該第二長字的低部被丟棄。
      11.根據(jù)權(quán)利要求10所述的數(shù)據(jù)處理器裝置,其特征在于其中所述的第一32位指令駐留于該第一16位分支轉(zhuǎn)移/跳轉(zhuǎn)指令的延遲槽內(nèi)。
      12.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理器裝置,其特征在于其中所述的流水線包括一個取指令階段;一個指令譯碼階段,與該取指令階段的下游操作上的聯(lián)接;一個指令執(zhí)行階段,與該譯碼指令階段的下游操作上的聯(lián)接;和一個寫回階段,與該指令執(zhí)行階段的下游操作上的聯(lián)接;其中該的取、譯碼、執(zhí)行和寫回階段被適合于處理該多個第一指令,該多個第一指令包括16位指令和該包括32位指令的多個第二指令。
      13.根據(jù)權(quán)利要求12所述的數(shù)據(jù)處理器裝置,其特征在于其中至少一個該多個第一或第二指令包括一個用戶可配置擴(kuò)展指令。
      14.根據(jù)權(quán)利要求12所述的數(shù)據(jù)處理器裝置,其特征在于其還進(jìn)一步包括至少一個選擇器,該選擇器操作性地至少與取階段聯(lián)接,該至少一個選擇器在該16位和32位指令中操作性地選擇獨立的指令。
      15.根據(jù)權(quán)利要求12所述的數(shù)據(jù)處理器裝置,其特征在于其進(jìn)一步包括一個寄存器文件,置于該譯碼階段。
      16.根據(jù)權(quán)利要求12所述的數(shù)據(jù)處理器裝置,其特征在于其進(jìn)一步包括一個指令高速緩沖存儲器,在該取階段內(nèi);一個指令調(diào)整器,與該指令高速緩沖存儲器操作上的聯(lián)接;和譯碼邏輯,與該指令調(diào)整器和該譯碼階段操作上的聯(lián)接;其中所述的調(diào)整器被配置為向該譯碼邏輯提供16位和32位指令,該譯碼邏輯在該16位和32位指令中進(jìn)行選擇,以便產(chǎn)生一個選定指令,該選定指令經(jīng)過該流水線裝置的譯碼階段。
      17.一個處理器流水線代碼壓縮裝置,其特征在于其包括一個指令高速緩沖存儲器,被適合于存儲多個第一和第二長度的指令字;一個指令調(diào)整器,操作性地與該指令高速緩沖存儲器聯(lián)接;和譯碼邏輯,與該調(diào)整器操作性地聯(lián)接;其中該調(diào)整器被適合于提供該第一長度的至少一個第一字和該第二長度的至少一個第二字到該譯碼邏輯,在該譯碼邏輯在該至少一個第一和第二字中進(jìn)行選擇。
      18.根據(jù)權(quán)利要求17所述的處理器流水線代碼壓縮裝置,其特征在于該調(diào)整器還進(jìn)一步包括一個緩沖器,該緩沖器被適合于存儲來自該高速緩沖存儲器的一個取指令的至少一部分,該存儲減緩該流水線的遲延
      19.根據(jù)權(quán)利要求18所述的處理器流水線代碼壓縮裝置,其特征在于其中所述的取指令越過一個長字邊界。
      20.根據(jù)權(quán)利要求19所述的處理器流水線代碼壓縮裝置,其特征在于其進(jìn)一步包括一個寄存器文件,置于該調(diào)整器的下游,該寄存器文件被適合于存儲多個源數(shù)據(jù)。
      21.根據(jù)權(quán)利要求20所述的處理器流水線代碼壓縮裝置,其特征在于其進(jìn)一步包括至少一個復(fù)用器,與該譯碼邏輯和該寄存器文件操作性聯(lián)接,其中該至少一個復(fù)用器為上述選定的第一或第二字之一選擇至少一個操作數(shù)。
      22.根據(jù)權(quán)利要求17所述的處理器流水線代碼壓縮裝置,其特征在于其中所述的第一長度比該第二長度短,并且該譯碼邏輯還進(jìn)一步包括邏輯部分,該邏輯部分被適合于將該第一字從該第一長度擴(kuò)展該第二長度。
      23.一種壓縮一種用戶可配置的數(shù)字處理器設(shè)計的指令集的方法,其特征在于其包括以下步驟提供一個第一指令字;生成至少第二和第三指令字,該第二字具有一個第一長度并且該第三字具有一個第二長度,該第二長度比該第一長度長;以及選擇,根據(jù)該第一指令字內(nèi)的至少一位進(jìn)行選擇,選擇該第二和第三字中有效的那一個;其中履行該生成和選擇步驟是為了提供代一個碼密度給指令集,該指令集大于僅利用該第二長度的指令獲取的指令集。
      24.根據(jù)權(quán)利要求23所述的壓縮一種用戶可配置的數(shù)字處理器設(shè)計的指令集的方法,其特征在于其中所述的第一長度包括16位,并且該第二長度包括32位。
      25.根據(jù)權(quán)利要求24所述的壓縮一種用戶可配置的數(shù)字處理器設(shè)計的指令集的方法,其特征在于該方法還進(jìn)一步包括選擇合適的操作數(shù),該選擇是基于利用一個復(fù)用器對該16位或32位指令的該選擇而作出的。
      26.一種處理一個數(shù)字處理器指令流水線內(nèi)多位長度指令的方法,該指令中至少有一條包括一個分支轉(zhuǎn)移或跳轉(zhuǎn)指令,該方法包括提供在一個具有高部和低部的第一長字內(nèi)的一個第一16位分支轉(zhuǎn)移/跳轉(zhuǎn)指令,該分支轉(zhuǎn)移/跳轉(zhuǎn)指令被置于該高部中;處理該分支轉(zhuǎn)移/跳轉(zhuǎn)指令,包括將該低部緩沖;連接一個第二長字的高部于該第一長字的該被緩沖的低部,以便產(chǎn)生一個第一32位指令;和保留該分支轉(zhuǎn)移/跳轉(zhuǎn),其中該第二長字的低部被丟棄。
      27.根據(jù)權(quán)利要求26所述的方法,其中所述的該第一32位指令駐留在該第一16位分支轉(zhuǎn)移/跳轉(zhuǎn)指令的延遲槽內(nèi)。
      28.一種帶有ISA的單一模式流水線的數(shù)字處理器,該ISA具有多個至少第一和第二長度的指令,每條該指令都具有一個位于其高部的操作碼,該操作碼包含至少兩指定操作長度的位。
      29.一個為一個數(shù)字處理器編程的方法,其特征在于該方法包括以下步驟提供一個具有一個與其相關(guān)的第一長度的多個第一指令的第一ISA;提供一個具有第二長度的多個第二指令的第二ISA,該第一長度是該第二長度的整數(shù)倍;以及該編程過程中在該第一和第二指令中選擇;以及利用至少上述選定的第一和第二指令生成一個計算機(jī)程序;其中在該處理器上該計算機(jī)程序的執(zhí)行不需要指令集模式轉(zhuǎn)換。
      全文摘要
      本發(fā)明是關(guān)于一種具有指令字長度相異的指令集體系結(jié)構(gòu)(ISA)的數(shù)字處理器裝置。在示范性的實施例中,該處理器包括擴(kuò)展的用戶可配置的RISC處理器,具有四個階段的流水線(取、譯碼、執(zhí)行和寫回)以及被適合于譯碼和處理一單一程序內(nèi)的32位和16位指令字的相關(guān)邏輯部分,從而增加指令集的靈活性,并且允許更好的代碼壓縮和精減的內(nèi)存開銷。提供了不需要模式轉(zhuǎn)換的自由形式的使用不同長度的指令。本發(fā)明還公開了一種改進(jìn)的指令調(diào)整器和代碼壓縮體系結(jié)構(gòu)。
      文檔編號G06F9/30GK1625731SQ03803112
      公開日2005年6月8日 申請日期2003年1月31日 優(yōu)先權(quán)日2002年1月31日
      發(fā)明者戴維森 西蒙, 費格森 約拿單, 諾薩得可汗 穆罕默德, 坦普爾 羅比, 沃那思 彼得, A 富勒 理查得 申請人:Arc國際公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1