国产精品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>

      數(shù)據(jù)處理裝置的制作方法

      文檔序號(hào):6414369閱讀:156來(lái)源:國(guó)知局
      專利名稱:數(shù)據(jù)處理裝置的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及在程序設(shè)計(jì)中把帶條件的算術(shù)命令編制得相當(dāng)好的數(shù)據(jù)處理裝置。
      以往,在以流水線方式順序執(zhí)行多個(gè)命令的微處理器中,分支命令的執(zhí)行打亂了流水線結(jié)構(gòu),從而成為處理器的處理效率降低的一個(gè)原因。為了防止該處理性能的降低,例如有使用延遲間隙的方法。
      假定程序由以下的指令序列1作成。
      &lt;指令序列1&gt;
      (I0)CMPEQ r10,r11(I1)ADD r1,r2(I2)BRA F0=1H’1000(I3)……(I4)……指令I(lǐng)0是比較指令,比較寄存器10和寄存器11,若相等則置標(biāo)記F0。指令I(lǐng)1是加法指令,將寄存器r1和寄存器r2的內(nèi)容相加,結(jié)果寫入寄存器r1。指令I(lǐng)2是條件分支指令,若標(biāo)記F0置位,程序分支到存儲(chǔ)器地址為1000的指令上。指令I(lǐng)3、I4是任意的指令,在執(zhí)行指令I(lǐng)2時(shí)已輸入微處理器中。若因執(zhí)行指令I(lǐng)2而使程序分支,則流水線處理中的指令I(lǐng)3、I4就無(wú)效了。
      因此,考慮指令I(lǐng)1不是為決定指令I(lǐng)2的分支條件而進(jìn)行運(yùn)算的指令,而是不管指令I(lǐng)2的分支如何而執(zhí)行的指令,進(jìn)行象下面的指令序列2那樣的指令序列。
      &lt;指令序列2&gt;
      (I0)CMPEQ r10,r11(I2)BRA F0=1H’1000(I1)ADD r1,r2(I5)NOP即使因執(zhí)行指令I(lǐng)2決定了轉(zhuǎn)向1000地址的分支,已經(jīng)輸入流水線并處理的指令I(lǐng)1可以執(zhí)行而不無(wú)效,當(dāng)程序設(shè)計(jì)成在指令I(lǐng)2執(zhí)行的時(shí)刻有2個(gè)指令輸入流水線時(shí),就會(huì)出現(xiàn)2個(gè)指令的延遲間隙。在指令序列2的情況下,延遲間隙由指令I(lǐng)1、I5形成。指令I(lǐng)5是所謂NOP(無(wú)運(yùn)算)指令。當(dāng)由指令I(lǐng)2決定分支時(shí),在指令I(lǐng)5之后取分支目的地的指令。
      從指令序列1到指令序列2的編制由程序本身或程序編譯進(jìn)行。
      關(guān)于這樣的指令的編制,在《Computer Architecture:AQuantitative Approach》(Morgan Kaufmann co.,1990)中提出了各種各樣的方法。
      這樣,為了最大地發(fā)揮微處理器的處理能力,在程序上編制指令的技術(shù)很重要。但是,根據(jù)指令的種類,程序的編制有種種限制。從上述例子來(lái)看,在指令序列中,指令I(lǐng)2的條件分支指令不能放在決定其執(zhí)行條件的指令I(lǐng)0之前。這是由于當(dāng)指令I(lǐng)2參照作為分支條件的標(biāo)記F0的內(nèi)容時(shí)、決定該條件的指令I(lǐng)0還沒(méi)有執(zhí)行完。這樣一來(lái),不受帶條件的分支指令限制的帶條件的算術(shù)運(yùn)算指令同樣會(huì)成為使指令的自由度受到限制的原因。
      在VLIW(very long instruction word)型的微處理器中,可并行執(zhí)行的多個(gè)子指令作為1個(gè)指令組表現(xiàn)。在這種類型的微處理器中,必需要有高超的編程技術(shù),要考慮什么樣的指令可以并行執(zhí)行,由于帶條件的算術(shù)指令的存在,大多必須在指令序列中插入程序上沒(méi)有意義的所謂NOP指令。處理NOP指令也是使微處理器的處理性能低下的原因。
      因而,本發(fā)明的技術(shù)課題是在處理帶條件的算術(shù)指令的數(shù)據(jù)處理裝置中為程序員提供可以以很高的自由度編制程序的環(huán)境。
      本發(fā)明的數(shù)據(jù)處理裝置具有指令譯碼器和指令執(zhí)行部,指令譯碼器對(duì)程序編制中所記述的已編碼的多個(gè)運(yùn)算指令依次進(jìn)行譯碼,輸出與各運(yùn)算指令對(duì)應(yīng)的控制信號(hào),指令執(zhí)行部根據(jù)從該指令譯碼器輸出的控制信號(hào),執(zhí)行由多個(gè)運(yùn)算指令分別指定的運(yùn)算。在第1時(shí)間對(duì)第1運(yùn)算指令譯碼,接著在第2時(shí)間執(zhí)行指定的運(yùn)算。另一方面,在第3時(shí)間對(duì)在給定條件的基礎(chǔ)上執(zhí)行運(yùn)算的第2運(yùn)算指令進(jìn)行譯碼,在從第3時(shí)間的結(jié)束經(jīng)過(guò)和第2時(shí)間相同的時(shí)間或比其更長(zhǎng)的時(shí)間之后才開始的第4時(shí)間中,指令執(zhí)行部判斷是否滿足規(guī)定的條件,根據(jù)該判斷結(jié)果執(zhí)行由第2運(yùn)算指令指定的運(yùn)算。
      數(shù)據(jù)處理裝置進(jìn)而具有延遲量指定寄存器,可以可變地設(shè)定保存的值。指令執(zhí)行部開始根據(jù)作為延遲量而保存在上述延遲量寄存器中的值判斷第2運(yùn)算指令是否滿足規(guī)定的條件。
      指令執(zhí)行部在包含于第4時(shí)間的第5時(shí)間中,判斷是否滿足規(guī)定的條件。接著,當(dāng)在第6時(shí)間內(nèi)滿足規(guī)定的條件時(shí),執(zhí)行由第2運(yùn)算指令指定的運(yùn)算,該第6時(shí)間包含在第4時(shí)間內(nèi),而且在第5時(shí)間結(jié)束后經(jīng)過(guò)和第2時(shí)間相同或更長(zhǎng)的時(shí)間才開始。
      在第3時(shí)間之后開始的第7時(shí)間內(nèi),由指令譯碼器對(duì)多個(gè)運(yùn)算指令中的第3運(yùn)算指令進(jìn)行譯碼,在上述第7時(shí)間后開始的第8時(shí)間中,用由第3運(yùn)算指令指定的指令執(zhí)行部執(zhí)行運(yùn)算,并將該運(yùn)算結(jié)果寫入指定的存儲(chǔ)地點(diǎn)。這時(shí),第2運(yùn)算指令指定運(yùn)算指令,該指令是當(dāng)?shù)?運(yùn)算指令的運(yùn)算結(jié)果具有規(guī)定值時(shí)才被執(zhí)行的,指令執(zhí)行部決定是否應(yīng)該參照規(guī)定的存儲(chǔ)地點(diǎn)執(zhí)行運(yùn)算,以便使第4時(shí)間的開始至少在第8時(shí)間之后。
      多個(gè)運(yùn)算指令的各個(gè)指令具有指定運(yùn)算內(nèi)容的運(yùn)算指定字段、指定該運(yùn)算的執(zhí)行條件的條件指定字段和指定使判斷該執(zhí)行條件的時(shí)序延遲的量的延遲量指定字段。
      若第1運(yùn)算指令是無(wú)條件執(zhí)行的指令,則在第1運(yùn)算指令的條件指定字段記述表示無(wú)條件的信息。指令譯碼器根據(jù)第1運(yùn)算指令中的運(yùn)算指定字段輸出第1控制信號(hào),控制上述指令執(zhí)行部,根據(jù)條件指定字段在第2時(shí)間內(nèi)執(zhí)行由上述第1運(yùn)算指令指定的運(yùn)算。
      此外,若第1運(yùn)算指令是帶條件的運(yùn)算指令,則在條件指定字段和延遲量指定字段分別記述表示與第2運(yùn)算指令所規(guī)定的條件不同的條件的信息和表示在第1時(shí)間判斷上述不同條件的信息。指令譯碼器根據(jù)第1運(yùn)算指令中的運(yùn)算指定字段輸出第1控制信號(hào),控制指令執(zhí)行部,根據(jù)條件指定字段和延遲量指定字段,在第2時(shí)間內(nèi)執(zhí)行由上述第1運(yùn)算指令指定的運(yùn)算。
      指令譯碼器根據(jù)第1運(yùn)算指令中的條件指定字段和延遲量指定字段判斷是否滿足條件,根據(jù)該判斷結(jié)果,按照第1運(yùn)算指令中的運(yùn)算指定字段輸出第1控制信號(hào)。
      在第2運(yùn)算指令的條件指定字段和延遲量指定字段分別記述表示規(guī)定的條件的信息和表示從第3時(shí)間結(jié)束到第4時(shí)間開始的間隔的信息。指令譯碼器根據(jù)第2運(yùn)算指令中的運(yùn)算指定字段輸出第1控制信號(hào),控制指令執(zhí)行部,根據(jù)第2運(yùn)算指令中的延遲量指定字段,在第4時(shí)間判斷是否滿足規(guī)定的條件,控制指令執(zhí)行部,根據(jù)第2運(yùn)算指令中的條件指定字段,確定是否滿足了規(guī)定的條件。
      此外,本發(fā)明的數(shù)據(jù)處理裝置具有對(duì)帶條件的運(yùn)算指令進(jìn)行譯碼并輸出第1控制信號(hào)的指令譯碼器、和根據(jù)該第1控制信號(hào)執(zhí)行運(yùn)算的指令執(zhí)行部。指令執(zhí)行部包括保存第1控制信號(hào)的第1寄存器、保存表示帶條件的運(yùn)算指令所指定的運(yùn)算的執(zhí)行條件的第1信息的第2寄存器和保存表示開始該條件的判斷的時(shí)間的第2信息的第3寄存器。而且,當(dāng)根據(jù)第3寄存器保存的第2信息檢測(cè)出是開始條件判斷的時(shí)間時(shí),指令執(zhí)行部便作出響應(yīng),根據(jù)第2寄存器保存的第1信息開始判斷上述條件是否滿足,根據(jù)該判斷結(jié)果,讀出第1寄存器保存的第1控制信號(hào),開始執(zhí)行運(yùn)算指令所指定的運(yùn)算。
      可以可變地設(shè)定保存在第3寄存器中的第2信息。
      數(shù)據(jù)處理裝置具有程序計(jì)數(shù)器,對(duì)與多個(gè)運(yùn)算指令中的各個(gè)指令對(duì)應(yīng)添加的地址順序進(jìn)行計(jì)數(shù)并保存下來(lái)。第3寄存器將地址值作為第2信息保存下來(lái),當(dāng)指令執(zhí)行部檢測(cè)出第3寄存器保存的地址值和程序計(jì)數(shù)器的地址值一致時(shí),就響應(yīng)該檢測(cè),開始判斷條件是否滿足。
      指令執(zhí)行部進(jìn)而具有第4寄存器,保存表示開始由運(yùn)算指令指定的運(yùn)算的時(shí)間的第3信息。當(dāng)根據(jù)該第3信息檢測(cè)出是由運(yùn)算指令指定的運(yùn)算開始的時(shí)間時(shí),指令執(zhí)行部便響應(yīng)該檢測(cè)結(jié)果,判斷條件是否滿足,進(jìn)而,根據(jù)該判斷結(jié)果,開始由上述運(yùn)算指令指定的運(yùn)算。


      圖1是表示本發(fā)明實(shí)施形態(tài)1的微處理器的結(jié)構(gòu)的方框圖。
      圖2是表示微處理器的指令格式的說(shuō)明圖。
      圖3是表示微處理器2個(gè)指令并行執(zhí)行時(shí)的流水線動(dòng)作的說(shuō)明圖。
      圖4是表示運(yùn)算字段的詳細(xì)內(nèi)容的說(shuō)明圖。
      圖5是表示微處理器的寄存器的結(jié)構(gòu)的說(shuō)明圖。
      圖6是表示PSW的詳細(xì)內(nèi)容的說(shuō)明圖。
      圖7是表示延遲分支指令的基本格式的說(shuō)明圖。
      圖8是表示由圖1的微處理器處理的程序的一個(gè)例子的說(shuō)明圖。
      圖9是表示處理圖8的程序時(shí)的微處理器的流水線動(dòng)作的說(shuō)明圖。
      圖10是表示由圖1的微處理器處理的另一個(gè)程序的例子的說(shuō)明圖。
      圖11是表示處理圖9的程序時(shí)的微處理器的流水線動(dòng)作的說(shuō)明圖。
      圖12是表示本發(fā)明實(shí)施形態(tài)1的微處理器的結(jié)構(gòu)的方框圖。
      下面說(shuō)明本發(fā)明的一個(gè)實(shí)施形態(tài)。
      實(shí)施形態(tài)1圖1是表示本發(fā)明實(shí)施形態(tài)1的微處理器的結(jié)構(gòu)的方框圖。該微處理器是具有32位內(nèi)部數(shù)據(jù)總線的32位微處理器。圖中,2是指令譯碼單元(指令譯碼器),對(duì)從指令RAM6經(jīng)64位ID總線輸入的指令代碼進(jìn)行譯碼處理,3是進(jìn)行地址計(jì)算的存儲(chǔ)器單元(指令執(zhí)行部),4是進(jìn)行邏輯運(yùn)算和移位運(yùn)算的整數(shù)運(yùn)算單元(指令執(zhí)行部),5是32位×64字的通用寄存器,7是存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)RAM。
      在指令譯碼單元2中,8、9分別是對(duì)指令代碼進(jìn)行譯碼的譯碼器,10是表示處理器的狀態(tài)的狀態(tài)字(Processor Status Word,以下,將處理器的狀態(tài)字稱為PSW)。指令譯碼單元2進(jìn)而在譯碼器8的譯碼結(jié)果和PSW10的內(nèi)容的基礎(chǔ)上生成控制信號(hào)11,將它加給存儲(chǔ)器單元3。此外,指令譯碼單元2在譯碼器9的譯碼結(jié)果和PSW10的內(nèi)容的基礎(chǔ)上生成控制信號(hào)12,將它加給整數(shù)運(yùn)算單元4。
      在存儲(chǔ)器單元3中,13是PC控制部,當(dāng)執(zhí)行不含跳轉(zhuǎn)和分支的指令時(shí),使PC值加8,然后對(duì)下次執(zhí)行的指令算出PC值,同時(shí),在執(zhí)行含有跳轉(zhuǎn)和分支的指令時(shí),使分支位移量與PC值相加,進(jìn)行與由運(yùn)算指定了的尋址方式相應(yīng)的計(jì)算,對(duì)跳轉(zhuǎn)目的地的指令計(jì)算其PC值。此外,PC控制部13將計(jì)算的PC值經(jīng)32位IA總線送給指令RAM6,從指令RAM6輸出指令代碼。14是控制成為運(yùn)算數(shù)的數(shù)據(jù)的存取的存儲(chǔ)器控制部。存儲(chǔ)器控制部14經(jīng)32位DA總線,將地址數(shù)據(jù)轉(zhuǎn)送給數(shù)據(jù)RAM7,經(jīng)64位DD總線對(duì)執(zhí)行指令所必需的數(shù)據(jù)進(jìn)行存取。15是ALU,使用從通用寄存器5經(jīng)32位S1總線、S2總線、S3總線轉(zhuǎn)送來(lái)的最多3個(gè)字的數(shù)據(jù)進(jìn)行算術(shù)邏輯運(yùn)算,將運(yùn)算結(jié)果經(jīng)32位D1總線轉(zhuǎn)送給通用寄存器5。16是移位器,使用從通用寄存器5經(jīng)S1總線、S2總線、S3總線轉(zhuǎn)送來(lái)的數(shù)據(jù)進(jìn)行移位運(yùn)算,將運(yùn)算結(jié)果經(jīng)D1總線轉(zhuǎn)送給通用寄存器5。
      對(duì)存儲(chǔ)器單元3,經(jīng)S1總線、S2總線、S3總線、S4總線同時(shí)傳送4個(gè)字的32位字長(zhǎng)的數(shù)據(jù)是可能的。因此,可以實(shí)現(xiàn)2個(gè)字的存儲(chǔ)指令,例如,將第3寄存器的內(nèi)容存儲(chǔ)在由第1寄存器的內(nèi)容和第2寄存器的內(nèi)容的和去尋址的存儲(chǔ)器區(qū)域內(nèi),同時(shí),將第4寄存器的內(nèi)容存儲(chǔ)到由在存儲(chǔ)了第3寄存器的內(nèi)容的地址上加上規(guī)定值所得到的值去尋址的存儲(chǔ)器區(qū)域內(nèi)。此外,存儲(chǔ)器單元3可以經(jīng)D1總線和D2總線、將存儲(chǔ)器單元3內(nèi)的2個(gè)字的運(yùn)算結(jié)果或從數(shù)據(jù)RAM7傳送來(lái)的2個(gè)字的數(shù)據(jù)轉(zhuǎn)送到通用寄存器5中。
      此外,PC控制部13包括寄存器30、31、32、和33,還包括存儲(chǔ)1位的存儲(chǔ)電路。存儲(chǔ)器控制部14包括寄存器40、41和42。ALU15包括寄存器50、51和52。移位器16包括寄存器60、61和62。關(guān)于這些寄存器后面再進(jìn)行說(shuō)明。
      在整數(shù)運(yùn)算單元4中,17是乘法器,使用從通用寄存器5經(jīng)32位的S4總線、S5總線、S6總線轉(zhuǎn)送來(lái)的最多3個(gè)字的數(shù)據(jù)進(jìn)行乘法運(yùn)算,將運(yùn)算結(jié)果經(jīng)32位D2總線、D3總線轉(zhuǎn)送給通用寄存器5。18是對(duì)乘法運(yùn)算結(jié)果進(jìn)行累加或累減并存儲(chǔ)的累加器。作為累加器,有2個(gè)64位的累加器。19是ALU,使用從通用寄存器5經(jīng)S4總線、S5總線、S6總線轉(zhuǎn)送來(lái)的最多3個(gè)字的數(shù)據(jù)進(jìn)行算術(shù)邏輯運(yùn)算,將運(yùn)算結(jié)果經(jīng)D2總線、D3總線轉(zhuǎn)送給通用寄存器5。20是移位器,使用從通用寄存器5經(jīng)S4總線、S5總線、S6總線轉(zhuǎn)送來(lái)的數(shù)據(jù)進(jìn)行移位運(yùn)算,將運(yùn)算結(jié)果經(jīng)D2總線、D3總線轉(zhuǎn)送給通用寄存器5。
      乘法器17包括寄存器70、71和72。ALU19包括寄存器80、81和82。移位器20包括寄存器90、91和92。關(guān)于這些寄存器后面再進(jìn)行說(shuō)明。
      在該微處理器中,可以從通用寄存器5中讀出最多6種寄存器的值,讀出的數(shù)據(jù)分別向S1總線、S2總線、S3總線、S4總線、S5總線、S6總線輸出。此外,對(duì)通用寄存器5,可以經(jīng)D1總線、D2總線、D3總線同時(shí)寫入最多3種寄存器的值。
      圖2是表示微處理器1的指令格式的說(shuō)明圖。作為指令格式,有圖2(a)所示的用1個(gè)指令代碼指示2個(gè)運(yùn)算的2運(yùn)算指令的格式101和圖2(b)所示的用1個(gè)指令代碼指示1個(gè)運(yùn)算的1運(yùn)算指令的格式102。
      在2運(yùn)算指令格式101中,包括由字段103和字段104構(gòu)成的格式字段、2個(gè)運(yùn)算字段106和107、分別附在運(yùn)算字段106、107上的執(zhí)行條件字段401和402,進(jìn)而包括分別附在執(zhí)行條件字段401和402上的條件判斷延遲量指定字段(以下稱CD字段)404、405。
      在1運(yùn)算指令格式102中,包括由字段103和字段104構(gòu)成的格式字段、由字段108、109和110構(gòu)成的運(yùn)算字段、附在該運(yùn)算字段上的執(zhí)行條件字段403和附在執(zhí)行條件字段403上的CD字段406。
      格式字段表示的意義如下。
      代碼格式 執(zhí)行順序operation_0operation_1FM=00:2指令 第1第101:2指令 第1第210:2指令 第2第111:1指令 第2--這里,F(xiàn)M是由字段103和104構(gòu)成的2位的值。
      微處理器1的多個(gè)流水線級(jí)由取指令級(jí)IF、指令譯碼級(jí)D/A、指令執(zhí)行級(jí)E/M和往回寫入級(jí)W構(gòu)成,各級(jí)的處理在1周期內(nèi)完成。
      圖3是用于說(shuō)明在微處理器1中處理2運(yùn)算指令101的流水線級(jí)的說(shuō)明圖。在取指令單元IF中,2運(yùn)算指令101是從存儲(chǔ)器RAM6向譯碼單元2取指令。在指令譯碼單元D/A中,運(yùn)算字段106記述的operation_0由譯碼器8譯碼,運(yùn)算字段107記述的operation_1由譯碼器9譯碼。此外,若operation_0、1的各運(yùn)算地址或各operation_0、1是分支指令,則分支目的地的地址在譯碼級(jí)D/A中算出。在指令執(zhí)行級(jí)E/M中,在存儲(chǔ)器單元3中,根據(jù)控制信號(hào)11執(zhí)行由operation_0指定的運(yùn)算,在整數(shù)運(yùn)算單元4中,根據(jù)控制信號(hào)12執(zhí)行由operation_1指定的運(yùn)算。若operation_1是裝入指令、存儲(chǔ)指令等伴隨存儲(chǔ)器存取的指令,在指令執(zhí)行及E/M中,由存儲(chǔ)器單元3進(jìn)行存儲(chǔ)器的存取。在往回寫入級(jí)W中,將存儲(chǔ)器單元3得到的運(yùn)算結(jié)果和由整數(shù)運(yùn)算單元4得到的運(yùn)算結(jié)果分別寫入由operation_0、1指定的寄存器中。沒(méi)有伴隨將運(yùn)算結(jié)果寫入處理器1內(nèi)的寄存器中的指令的指令(分支指令、跳轉(zhuǎn)指令、向存儲(chǔ)器存儲(chǔ)數(shù)據(jù)的存儲(chǔ)指令、運(yùn)算結(jié)果反映在標(biāo)記中的比較指令)不存在往回寫入級(jí)W。再有,根據(jù)微處理器的結(jié)構(gòu),往回寫入級(jí)W與指令執(zhí)行級(jí)E/M是在相同的時(shí)鐘周期內(nèi)進(jìn)行處理的。
      當(dāng)FM=00時(shí),如圖3(a)所示,operation_0、1的IF、D/A、E/M、W級(jí)相互并行進(jìn)行,operation_0、1用4個(gè)時(shí)鐘周期處理。
      當(dāng)FM=01時(shí),如圖3(b)所示,operation_0的IF、D/A、E/M、W級(jí)需要4個(gè)時(shí)鐘連續(xù)地進(jìn)行。operation_0、1的IF、D/A級(jí)相互并行進(jìn)行,另一方面,operation_1的E/M、W級(jí)比operation_0遲1個(gè)周期進(jìn)行。operation_1的E/M級(jí)與operation_0的W級(jí)并行進(jìn)行。因此operation_1用5個(gè)時(shí)鐘周期進(jìn)行處理。
      當(dāng)FM=10時(shí),如圖3(c)所示,operation_1的IF、D/A、E/M、W級(jí)需要4個(gè)時(shí)鐘周期連續(xù)地進(jìn)行。operation_0、1的IF、D/A相互并行進(jìn)行,另一方面,operation_0的E/M、W級(jí)比operation_1遲1個(gè)周期進(jìn)行。operation_0的E/M級(jí)與operation_1的W級(jí)并行進(jìn)行。因此operation_1用5個(gè)時(shí)鐘周期進(jìn)行處理。
      此外,圖2(b)所示格式的1運(yùn)算指令102也在取指令級(jí)IF、指令譯碼級(jí)D/A、指令執(zhí)行級(jí)E/M、往回寫入級(jí)W中分別以1個(gè)時(shí)鐘周期進(jìn)行處理。在IF級(jí)中,從指令RAM6取出1運(yùn)算指令102,送往指令譯碼單元2。在D/A級(jí)中,分別向譯碼器8、9輸入1運(yùn)算指令。譯碼器8、9中的某一個(gè)根據(jù)1運(yùn)算指令102指定的運(yùn)算類型對(duì)1運(yùn)算指令102進(jìn)行譯碼。若譯碼器8譯碼完畢,則輸出控制信號(hào)11,若譯碼器9譯碼完畢,則輸出控制信號(hào)12。在E/M級(jí)中,存儲(chǔ)器單元3(或整數(shù)運(yùn)算單元4)根據(jù)控制信號(hào)11(或12)執(zhí)行1運(yùn)算指令102指定的運(yùn)算。在W級(jí)中,將E/M級(jí)得到的運(yùn)算結(jié)果寫入由1運(yùn)算指令102指定的寄存器中。
      其次,說(shuō)明執(zhí)行條件代碼。執(zhí)行條件字段401、402、403分別具有以下意義。
      代碼 執(zhí)行條件CC=000平時(shí)001F0=真且F1=忽略010F0=假且F1=忽略011F0=忽略且F1=真
      100F0=忽略且F1=假101F0=真且F1=真110F0=真且F1=假111已保留執(zhí)行條件字段401~403是指定附屬運(yùn)算指令的執(zhí)行條件的字段,所以,根據(jù)微處理器的執(zhí)行控制標(biāo)記F0、F1的值,決定運(yùn)算字段106、107的operation_0和operation_1的運(yùn)算以及由字段108、109、110形成的運(yùn)算字段的運(yùn)算是有效還是無(wú)效。執(zhí)行控制標(biāo)記F0、F1如后面所述是在處理機(jī)狀態(tài)字(PSW)10內(nèi)。當(dāng)運(yùn)算有效時(shí),運(yùn)算結(jié)果被反映在寄存器、存儲(chǔ)器和標(biāo)記中,意味著該運(yùn)算產(chǎn)生的動(dòng)作結(jié)果保留下來(lái)了。另一方面,所謂運(yùn)算無(wú)效,則意味著雖然運(yùn)算指令已被譯碼但沒(méi)有執(zhí)行它所指定的運(yùn)算,或者即使已經(jīng)運(yùn)算但其運(yùn)算結(jié)果在寄存器、存儲(chǔ)器和標(biāo)記中沒(méi)有反映,就象把執(zhí)行無(wú)效運(yùn)算(NOP)的動(dòng)作結(jié)果保留下來(lái)一樣。
      當(dāng)執(zhí)行條件字段的值CC=000時(shí),不管執(zhí)行控制標(biāo)記F0、F1的值如何,運(yùn)算總是有效。當(dāng)CC=001時(shí),只有當(dāng)執(zhí)行控制標(biāo)記F0=真時(shí),運(yùn)算才有效。執(zhí)行控制標(biāo)記F1則無(wú)論是哪個(gè)狀態(tài)都行。當(dāng)CC=010時(shí),只有當(dāng)執(zhí)行控制標(biāo)記F0=假時(shí),運(yùn)算才有效。執(zhí)行控制標(biāo)記F1則無(wú)論是哪個(gè)狀態(tài)都行。當(dāng)CC=011時(shí),只有執(zhí)行控制標(biāo)記F1=真時(shí)運(yùn)算才有效,執(zhí)行控制標(biāo)記F0的狀態(tài)可以是任意的。當(dāng)CC=100時(shí),只有當(dāng)執(zhí)行控制標(biāo)記F1=假時(shí)運(yùn)算才有效。執(zhí)行控制標(biāo)記F0則無(wú)論是哪個(gè)狀態(tài)都行。當(dāng)CC=101時(shí),只有當(dāng)執(zhí)行控制標(biāo)記F0=真且F1=假時(shí)運(yùn)算才有效。當(dāng)CC=110時(shí),只有當(dāng)執(zhí)行控制標(biāo)記F0=真且F1=假時(shí)運(yùn)算才有效。CC=111時(shí)的動(dòng)作未定義,用戶不能使用使CC=111的指令。
      圖4是表示運(yùn)算字段的詳細(xì)內(nèi)容的說(shuō)明圖。
      格式111~117分別是由28位表現(xiàn)的短運(yùn)算字段106或運(yùn)算字段107形成的。格式118是由由字段108、109、110構(gòu)成的長(zhǎng)運(yùn)算字段形成的。
      格式111(short_M)是由指定運(yùn)算內(nèi)容的字段120、指定寄存器編號(hào)的2個(gè)字段121、122、指定寄存器編號(hào)或6位長(zhǎng)的立即數(shù)的字段123和指定字段123是表示寄存器編號(hào)還是表示立即數(shù)的字段124構(gòu)成的。如圖3所示,當(dāng)字段124的值X是‘00’、‘01’或‘11’時(shí),表示字段123代表寄存器編號(hào),當(dāng)字段124的值X是‘10’時(shí),表示字段123代表立即數(shù)。
      該格式111用于寄存器間接尋址的存儲(chǔ)器存取運(yùn)算。
      格式112(Short_A)是由指定運(yùn)算內(nèi)容的字段20、指定寄存器編號(hào)的2個(gè)字段121、122、指定寄存器編號(hào)或6位長(zhǎng)的立即數(shù)的字段123和指定字段123是表示寄存器編號(hào)還是表示立即數(shù)的字段125構(gòu)成的。如圖3所示,當(dāng)字段125的值X’是‘00’時(shí),表示字段123代表寄存器編號(hào),當(dāng)字段124的值X’是‘1’時(shí),表示字段123代表立即數(shù)。
      該格式112用于算術(shù)運(yùn)算、邏輯運(yùn)算、移位運(yùn)算和位運(yùn)算。
      格式113(Short_B1)由指定運(yùn)算內(nèi)容的字段120和指定寄存器編號(hào)的字段126構(gòu)成。該格式113用于根據(jù)寄存器指定進(jìn)行的跳轉(zhuǎn)指令和分支指令。
      格式114(Short_B2)由指定運(yùn)算內(nèi)容的字段120和18位長(zhǎng)的位移量字段127構(gòu)成。該格式114用于跳轉(zhuǎn)指令和分支指令。
      格式115(Short_B3)由指定運(yùn)算內(nèi)容的字段120、指定寄存器編號(hào)的字段121、指定寄存器編號(hào)或12位長(zhǎng)的立即數(shù)的字段128、指定字段128是表示寄存器編號(hào)還是表示立即數(shù)的字段129和根據(jù)零判定指定是否進(jìn)行根據(jù)字段121的條件跳轉(zhuǎn)或條件分支的字段130構(gòu)成。
      該格式115使用于條件跳轉(zhuǎn)指令和條件分支指令。
      格式116(Short_D1)由指定運(yùn)算內(nèi)容的字段120、指定寄存器編號(hào)的字段121、指定寄存器編號(hào)或12位長(zhǎng)的立即數(shù)的字段128、指定字段128是表示寄存器編號(hào)還是表示立即數(shù)的字段129構(gòu)成。
      該格式116用于條件跳轉(zhuǎn)指令、條件分支指令和重復(fù)指令。
      格式117(Short_D2)由指定運(yùn)算內(nèi)容的字段120、指定寄存器編號(hào)或12位長(zhǎng)的立即數(shù)的字段128、指定字段128是表示寄存器編號(hào)還是表示立即數(shù)的字段129和與延遲指令有關(guān)的字段131構(gòu)成。
      該格式117用于延遲跳轉(zhuǎn)指令、延遲分支指令和重復(fù)指令。
      格式118(Long)由指定運(yùn)算內(nèi)容的字段120、指定寄存器編號(hào)的2個(gè)字段121、122和指定32位長(zhǎng)的立即數(shù)的字段132構(gòu)成。
      該格式118用于復(fù)雜的算術(shù)運(yùn)算、使用大的立即數(shù)的運(yùn)算運(yùn)算、大位移量寄存器間接尋址的存儲(chǔ)器存取運(yùn)算、大位移的分支運(yùn)算和向絕對(duì)地址的跳轉(zhuǎn)指令等。
      圖5是表示微處理器的寄存器的結(jié)構(gòu)的說(shuō)明圖。
      該微處理器包括圖5所示那樣的64個(gè)32位通用寄存器5、圖5(b)所示那樣的12個(gè)控制寄存器150和圖5(c)所示那樣的2個(gè)累加器18。R0通用寄存器140的內(nèi)容始終是0,向它的寫入將不被考慮。R62通用寄存器是設(shè)定從子程序返回的地址的鏈接寄存器。R63通用寄存器是堆棧指針,與PSW10的SM字段的值對(duì)應(yīng),作為用戶堆棧指針(SPU)或中斷堆棧指針(SPI)工作??刂萍拇嫫?50包含程序計(jì)數(shù)器151、PSW10和各種專用寄存器。
      在圖4所示的格式112的運(yùn)算中,可以將64個(gè)通用寄存器5分別分成高16位和低16位進(jìn)行存取。此外,可以將2個(gè)累加器18分別分成高32位和低32位進(jìn)行存取。
      圖6是表示PSW10的詳細(xì)內(nèi)容的說(shuō)明圖。
      PSW10的高16位有用于切換堆棧指針的SM字段171、表示檢測(cè)出自調(diào)試陷阱(self debug trap,SDBT)的EA字段172、指定允許SDBT的DB字段173、指定允許中斷的IE字段174、指定允許重復(fù)動(dòng)作的RP字段175和指定允許模尋址的MD字段176。低16位是標(biāo)記字段180。標(biāo)記字段180有8個(gè)標(biāo)記,其中的F0標(biāo)記181和F1標(biāo)記182指定運(yùn)算有效/無(wú)效。各標(biāo)記的值隨比較運(yùn)算和算術(shù)運(yùn)算的結(jié)果而變化。此外,各標(biāo)記的值在標(biāo)記初始化運(yùn)算時(shí)被初始化,當(dāng)由標(biāo)記值寫入運(yùn)算將任意值寫入標(biāo)記字段180時(shí),該標(biāo)記值發(fā)生變化。標(biāo)記字段180的內(nèi)容由標(biāo)記值讀出運(yùn)算進(jìn)行讀出。
      各標(biāo)記具有下述意義。
      SM=0堆棧方式0→使用SPISM=1堆棧方式1→使用SPUEA=0未檢測(cè)出SDBTEA=1檢測(cè)出SDBTDB=0不允許SDBTDB=1允許SDBTIE=0不允許中斷IE=1允許中斷RP=0重復(fù)塊無(wú)效RP=1重復(fù)塊有效MD=0模尋址無(wú)效MD=1模尋址有效F0 通用標(biāo)記(執(zhí)行控制標(biāo)記)F1 通用標(biāo)記(執(zhí)行控制標(biāo)記)F3 通用標(biāo)記F4(S) 飽和運(yùn)算標(biāo)記F5(V) 溢出標(biāo)記F6(VA) 累積溢出標(biāo)記F7(C) 進(jìn)位/借位標(biāo)記下面,示出該微處理器的指令。A、與微處理器功能有關(guān)的指令A(yù)-1、加載/存儲(chǔ)指令LDB 將1個(gè)字節(jié)送給1個(gè)寄存器(帶符號(hào)擴(kuò)展)LDBU將1個(gè)字節(jié)送給1個(gè)寄存器(帶0擴(kuò)展)LDH 將半字送給1個(gè)寄存器(帶符號(hào)擴(kuò)展)LDHH將半字送給1個(gè)寄存器的高位LDHU將半字送給1個(gè)寄存器(帶0擴(kuò)展)LDW 將1個(gè)字送給1個(gè)寄存器LD2W將2個(gè)字送給寄存器LD4BH 將4個(gè)字節(jié)送給2個(gè)寄存器的4個(gè)半字(帶符號(hào)擴(kuò)展)LD4BHU 將4個(gè)字節(jié)送給2個(gè)寄存器的4個(gè)半字(帶0擴(kuò)展)LD2H將2個(gè)半字送給2個(gè)寄存器的2個(gè)字(帶符號(hào)擴(kuò)展)STB 存儲(chǔ)1個(gè)寄存器的1個(gè)字節(jié)STH 存儲(chǔ)1個(gè)寄存器的半字STHH存儲(chǔ)1個(gè)寄存器高位的半字STW 存儲(chǔ)1個(gè)寄存器的1個(gè)字ST2W 存儲(chǔ)寄存器的2個(gè)字ST4HB 存儲(chǔ)2個(gè)寄存器的4個(gè)半字的4字節(jié)ST2H 存儲(chǔ)2個(gè)寄存器的2個(gè)半字MODDEC將1個(gè)寄存器的值減去1個(gè)5比特的立即數(shù)MODINC將1個(gè)寄存器的值增加1個(gè)5比特的立即數(shù)A-2、傳送指令MVFSYS從1個(gè)控制寄存器送給1個(gè)通用寄存器MVTSYS從1個(gè)通用寄存器送給1個(gè)控制寄存器MVFACC從累加器來(lái)的1個(gè)字傳送MVTACC向2個(gè)通用寄存器內(nèi)容的累加器的傳送A-3、比較指令CMPcc 比較cc=EQ(相等),NE(不等),GT(大于),GE(大于等于),LT(小于),LE(小于等于),PS(都為正),NG(都為負(fù))CMPUcc 不帶符號(hào)的比較cc=GT,GE,LT,LEA-4、最大值/最小值指令已保留A-5、算術(shù)運(yùn)算指令A(yù)BS 取絕對(duì)值A(chǔ)DD 加法運(yùn)算ADDC 帶進(jìn)位的加法運(yùn)算ADDHppp 半字加法運(yùn)算ppp=LLL(寄存器低位,寄存器低位,寄存器低位),LLH(寄存器低位,寄存器低位,寄存器高位),LHL,LHH,HLL,HLH,HHL,HHHADDS 對(duì)Rb寄存器添加第3運(yùn)算數(shù)的符號(hào)ADDS2H對(duì)2個(gè)半字添加符號(hào)ADD2H 2個(gè)半字之間的加法運(yùn)算AVG 求平均值A(chǔ)VG2H 對(duì)2個(gè)半字求平均值JOINpp鏈接2個(gè)半字pp=LL,LH,HL,HHSUB 減法運(yùn)算SUBB 帶借位的減法運(yùn)算SUBHppp 半字減法運(yùn)算ppp=LLL,LLH,LHL,LHH,HLL,HLH,HHL,HHHSUB2H 2個(gè)半字的減法運(yùn)算A-6、邏輯運(yùn)算指令A(yù)ND 與OR或NOT 反相XOR 異或ANDFG 標(biāo)記與0RFG 標(biāo)記或NOTFG 標(biāo)記反相XORFG 標(biāo)記異或A-7、移位指令SRA 算術(shù)右移SRA2H 2個(gè)半字的算術(shù)右移SRC 寄存器串聯(lián)右移SRL 邏輯右移SRL2H 2個(gè)半字邏輯右移ROT 循環(huán)右移ROT2H 2個(gè)半字的循環(huán)右移A-8、位運(yùn)算指令BCLR 位清除BNOT 位反相BSET置位BTST位測(cè)試A-9、分支指令BRA 分支BRATZR 若為0則轉(zhuǎn)移BRATNZ 若不為0則轉(zhuǎn)移BSR 轉(zhuǎn)向子程序BSRTZR 若為0則轉(zhuǎn)向子程序BSRTNZ 若不為0則轉(zhuǎn)向子程序JMP 無(wú)條件跳轉(zhuǎn)JMPTZR ;若為0則跳轉(zhuǎn)JMPTNZ ;若不為0則跳轉(zhuǎn)JSR 跳轉(zhuǎn)到子程序JSRTZR 若為0則跳轉(zhuǎn)到子程序JSRTNZ 若不為0則跳轉(zhuǎn)到子程序NOP 無(wú)運(yùn)算(延遲分支,跳轉(zhuǎn)指令)DBRA延遲分支DBRAI 延遲分支(立即數(shù))DBSR延遲分支到子程序DBSRI 延遲分支到子程序(立即數(shù))DJMP延遲跳轉(zhuǎn)DJMPI 延遲跳轉(zhuǎn)(立即數(shù))DJSR延遲跳轉(zhuǎn)到子程序DJSRI 延遲跳轉(zhuǎn)到子程序(立即數(shù))A-10、0S指令TRAP陷阱REIT從異常事件、中斷和陷阱返回B、有關(guān)DSP功能的指令B-1、算術(shù)運(yùn)算指令MUL 乘法運(yùn)算MULX擴(kuò)充精度乘法運(yùn)算
      MULXS 擴(kuò)充精度乘法運(yùn)算和1位右移MULX2H 每2個(gè)半字的擴(kuò)充精度乘法運(yùn)算MULHXpp;2個(gè)半字的擴(kuò)充精度乘法運(yùn)算pp=LL,LH,HL,HHMUL2H 每2個(gè)半字的乘法運(yùn)算MAC a 1位右移乘法和加法運(yùn)算a(累加器指定)=0,1MSUB a 乘法和減法運(yùn)算a=0,1MSUBS a1位右移乘法和減法運(yùn)算a=0,1B-2、重復(fù)指令REPEAT 重復(fù)1個(gè)指令塊REPEATI重復(fù)1個(gè)指令塊(指定立即數(shù))下面,說(shuō)明圖2的指令格式內(nèi)的CD寄存器。
      CD格式404是在由對(duì)應(yīng)的運(yùn)算字段106指定的operation_0的流水線處理中,用來(lái)指定使其延遲一段用于判定由對(duì)應(yīng)的執(zhí)行條件字段401指定的執(zhí)行條件的時(shí)間的延遲量的,通過(guò)用戶適當(dāng)?shù)卦O(shè)定CD字段404的值,可以可變地設(shè)定該延遲量。
      具體地說(shuō),在CD字段404中,將從存儲(chǔ)運(yùn)算字段106中記述的指令格式101存儲(chǔ)的存儲(chǔ)器地址X開始的偏移值a作為立即數(shù)記下來(lái)。這時(shí),在operation_0的處理中判定記述在執(zhí)行條件字段401中的執(zhí)行條件的時(shí)間變成微處理器1的PC值保持(X+a)地址的時(shí)鐘周期。偏移值也可以是0。這時(shí),判定該執(zhí)行條件的時(shí)間成為PC值保持X地址的時(shí)鐘周期。進(jìn)而,在CD字段404中,也可以記述指定寄存器的編號(hào)的信息,該寄存器是在微處理器1內(nèi)用來(lái)保持地址值的。這時(shí),判斷記述在執(zhí)行條件字段401中的執(zhí)行條件的時(shí)間成為微處理器1的PC值是保持在由它指定的寄存器中的地址的時(shí)鐘周期。用于識(shí)別在CD字段404中是記述了立即數(shù)還是記述了寄存器序號(hào)的位同樣是在CD字段404中。
      但是,當(dāng)執(zhí)行條件字段401表示cc=000的無(wú)條件執(zhí)行時(shí),在對(duì)應(yīng)的operation_0的執(zhí)行處理中,CD字段404的值被指令譯碼單元2和單元3、4所忽視。
      CD字段405對(duì)運(yùn)算字段107和條件執(zhí)行字段402來(lái)說(shuō),和CD字段404是一樣的。此外,CD字段406對(duì)字段108~110的運(yùn)算和條件執(zhí)行字段403來(lái)說(shuō),和CD字段404也是一樣的。
      就圖1所示的存儲(chǔ)器3內(nèi)的各寄存器進(jìn)行說(shuō)明。
      PC控制部13的寄存器30、存儲(chǔ)器控制部14的寄存器40、ALU15的寄存器50和移位器16的寄存器60分別原封不動(dòng)地把由運(yùn)算字段106指定的operation_0譯碼所得到的控制信號(hào)11保持下來(lái)。
      PC控制部13的寄存器31、存儲(chǔ)器控制部14的寄存器41、ALU15的寄存器51和移位器16的寄存器61分別把指定執(zhí)行operation_0的運(yùn)算的條件的信息保持下來(lái)。在本實(shí)施形態(tài)的情況下,指令格式101內(nèi)的條件執(zhí)行字段401的cc值被原封不動(dòng)地保持下來(lái)。
      PC控制部13的寄存器32、存儲(chǔ)器控制部14的寄存器42、ALU15的寄存器52和移位器16的寄存器62分別把判斷operation_0的運(yùn)算執(zhí)行條件的時(shí)間的信息保持下來(lái)。實(shí)際上,是保持判斷operation_0的運(yùn)算執(zhí)行條件時(shí)的PC值(地址值)。例如,PC控制部13根據(jù)具有偏移值的CD字段404生成應(yīng)保持在該寄存器32中的地址值。PC控制部13從指令譯碼單元2中接受CD字段404的偏移值,將該偏移值與operation_0記述的指令格式101的地址相加,將其和送入寄存器32。在CD格式404指定寄存器序號(hào)的情況下,PC控制部13從指令譯碼單元中接受該寄存器序號(hào)并將其原封不動(dòng)地送入寄存器32。將判斷operation_0的運(yùn)算執(zhí)行條件時(shí)的PC值(地址值)保持在由寄存器32保存的寄存器序號(hào)所特定的寄存器中。再有,在寄存器32中設(shè)有識(shí)別寄存器32是保持PC值還是保持寄存器編號(hào)的位。
      存儲(chǔ)器控制部14、ALU15和移位器16根據(jù)和PC控制部13同樣的方法生成PC值或寄存器序號(hào),并分別送入寄存器42、52和62。
      當(dāng)由運(yùn)算字段106指定的operation_0是上述(A-9)中那樣的分支指令時(shí),PC控制部13作為指令執(zhí)行部的運(yùn)算單元工作,若operation_0是分支指令,寄存器30~32起上述那樣的作用,其余的寄存器40~42、50~52、60~62不被使用。
      此外,當(dāng)由運(yùn)算字段106指定的operation_0是上述(A-1)的加載/存儲(chǔ)指令那樣的存儲(chǔ)器存取指令時(shí),存儲(chǔ)器控制部14作為指令執(zhí)行部的運(yùn)算單元工作,若operation_0是存儲(chǔ)器存取指令,寄存器40~42起上述那樣的作用,其余的寄存器不被使用。
      此外,當(dāng)由運(yùn)算字段106指定的operation_0是上述(A-5)中那樣的算術(shù)運(yùn)算指令或(A-6)中那樣的邏輯運(yùn)算指令時(shí),ALU15作為指令執(zhí)行部的運(yùn)算單元工作,若operation_0是算術(shù)運(yùn)算指令或邏輯運(yùn)算指令,則寄存器40~42起上述那樣的作用,其余的寄存器不被使用。
      進(jìn)而,當(dāng)由運(yùn)算字段106指定的operation_0是上述(A-7)中那樣的移位運(yùn)算指令時(shí),移位器16作為指令執(zhí)行部的運(yùn)算單元工作,若operation_0是移位運(yùn)算命令,則寄存器40~42起上述那樣的作用,其余的寄存器不被使用。
      PC控制部13內(nèi)的寄存器33和存儲(chǔ)電路34是在operation_0特別是延遲分支指令和延遲跳轉(zhuǎn)指令的情況下使用的。
      圖7是表示延遲分支指令的基本格式320的說(shuō)明圖。延遲分支指令的格式320基本上包括運(yùn)算碼321、指定用于使執(zhí)行分支的時(shí)間延遲的延遲量的執(zhí)行延遲量指定字段322和指定用于指定分支目的地地址的偏移量或地址的分支目的地指定字段323。延遲分支指令例如由圖4所示的格式116(Short_D1)、格式117(Short_D2)或格式118(Long)實(shí)現(xiàn)。格式116(Short_D1)是當(dāng)寄存器設(shè)定值作為延遲量使用時(shí)才被使用。格式117(Short_D2)是當(dāng)立即數(shù)作為延遲量使用時(shí)才被使用。格式118(Long)是當(dāng)由32位立即數(shù)指定分支目的地地址時(shí)才被使用。在各格式中,運(yùn)算碼由字段120指定。此外,字段129用來(lái)指定字段128是表示寄存器序號(hào)還是立即數(shù)的。字段121在DBRA、DBSR、DJMP、DJSR的各指令中作為延遲量由寄存器指定時(shí)的寄存器指定區(qū)使用,字段131作為指定延遲量的立即數(shù)的區(qū)使用。
      延遲跳轉(zhuǎn)指令也由圖7所示的格式記述。但是,在格式323中,指定保持跳轉(zhuǎn)目的地的地址的寄存器的寄存器編號(hào)。
      在本實(shí)施形態(tài)中,在格式131中作為立即數(shù)記述的延遲量是從延遲分支(或跳轉(zhuǎn))指令記述的2運(yùn)算指令101的地址X開始的偏移值b。因此,用戶可以通過(guò)適當(dāng)設(shè)定執(zhí)行延遲量指定字段322的值使該延遲量可變。但是,用戶必須設(shè)定執(zhí)行延遲量指定字段322或CD字段404,以便執(zhí)行分支的時(shí)間不會(huì)在判斷由CD字段404所決定的分支條件的時(shí)間的前面。
      PC控制部13具有的寄存器33保存執(zhí)行由延遲分支(或跳轉(zhuǎn))指令指定的分支的時(shí)間。實(shí)際上是保存執(zhí)行分支時(shí)的PC值(地址值)。PC控制部13根據(jù)具有偏移值的字段322生成應(yīng)保存在該寄存器33中的地址值。PC控制部13從指令譯碼單元2取出字段322的偏移值,將該偏移值與延遲分支(或跳轉(zhuǎn))指令記述的指令格式101的地址相加,將其和送入寄存器33。當(dāng)格式322指定寄存器序號(hào)時(shí),PC控制部13從指令譯碼單元取出寄存器編號(hào)并原封不動(dòng)地送入寄存器33。在由寄存器33保存的寄存器序號(hào)特定的寄存器中保存執(zhí)行分支時(shí)的PC值(地址值)。
      此外,PC控制部13的存儲(chǔ)電路34保存PC控制部13判斷延遲分支(或跳轉(zhuǎn))指令的執(zhí)行條件的結(jié)果和表示執(zhí)行條件是否已滿足的信息。
      再有,在寄存器30所保存的控制信號(hào)11中包含1個(gè)位的信息,用于識(shí)別對(duì)該控制信號(hào)11的指令是延遲分支指令還是沒(méi)有延遲的通常的分支指令。
      進(jìn)而,說(shuō)明圖1所示的整數(shù)運(yùn)算單元3內(nèi)的各寄存器。
      乘法器17的寄存器70、ALU19的寄存器80和移位器20的寄存器90分別原封不動(dòng)地保存由運(yùn)算字段106指定的operation_1譯碼所得到的控制信號(hào)12。
      乘法器17的寄存器71、ALU19的寄存器81和移位器20的寄存器91分別保存指定執(zhí)行operation_1運(yùn)算的條件的信息。在本實(shí)施形態(tài)中,是原封不動(dòng)地保存指令格式101內(nèi)的條件執(zhí)行字段402的cc值。
      乘法器17的寄存器72、ALU19的寄存器82和移位器20的寄存器92分別保存判斷operation_1運(yùn)算的執(zhí)行條件的時(shí)間的信息。若CD字段405是偏移值,則作為判斷operation_1運(yùn)算的執(zhí)行條件時(shí)的PC值(地址值)保存在各寄存器中。該應(yīng)保存的PC值是將該偏移值與operation_1記述的指令格式101的地址相加的值。此外,若CD字段405指定寄存器序號(hào),則原封不動(dòng)地保存該寄存器序號(hào)。在由寄存器72保存的寄存器序號(hào)特定的寄存器中,保存判斷operation_0運(yùn)算的執(zhí)行條件時(shí)的PC值(地址值)。給寄存器72、82和92設(shè)值時(shí),按照從指令譯碼單元接收CD字段405的CD字段405,分別由乘法器17、ALU19和移位器20進(jìn)行。
      當(dāng)由運(yùn)算字段107指定的operation_1是上述(B-1)中那樣的伴隨乘法運(yùn)算的乘法運(yùn)算指令和相乘并相加指令時(shí),乘法器17作為指令執(zhí)行部的運(yùn)算單元工作,若operation_1是伴隨乘法運(yùn)算的指令,寄存器70~72起上述那樣的作用,其余寄存器80~82、90~92不被使用。
      此外,當(dāng)由運(yùn)算字段107指定的operation_1是上述(A-5)中那樣的算術(shù)運(yùn)算指令或是(A-6)中那樣的邏輯運(yùn)算指令時(shí),ALU19作為指令執(zhí)行部的運(yùn)算單元工作,若operation_1是算術(shù)運(yùn)算指令或邏輯運(yùn)算指令,寄存器80~82起上述那樣的作用,其余寄存器不被使用。
      進(jìn)而,當(dāng)由運(yùn)算字段107指定的operation_1是上述(A-7)中那樣的移位運(yùn)算指令時(shí),移位器20作為指令執(zhí)行部的運(yùn)算單元工作,若operation_1是移位運(yùn)算指令,則寄存器40~42起上述那樣的作用,其余寄存器80~82、90~92不被使用。
      當(dāng)處理圖2(b)所示的指令格式102的運(yùn)算指令時(shí),根據(jù)分支、存儲(chǔ)器存取和算術(shù)運(yùn)算等的種類,將PC控制部13、存儲(chǔ)器控制部14、ALU15、19、移位器16、20和乘法器17中的一個(gè)作為指令執(zhí)行部的運(yùn)算單元去執(zhí)行運(yùn)算指令。同樣,在1運(yùn)算指令的流水線處理中,CD字段406指定使判斷由執(zhí)行條件字段403指定的執(zhí)行條件的時(shí)間延遲的延遲量。而且,執(zhí)行1運(yùn)算指令102的指令執(zhí)行部的運(yùn)算單元所具有的寄存器對(duì)該1運(yùn)算指令102保存與上述相同的值。
      其次,使用圖8所示的程序說(shuō)明微處理器1的動(dòng)作。
      在該程序中,每行中的2個(gè)子指令由圖2(a)的指令格式的2運(yùn)算指令101記述,子指令I(lǐng)01、I11、I21、I31、I41、I51、和I61作為operation_0由運(yùn)算字段106記述,子指令I(lǐng)02、I12、I22、I32、I41、I51和I61作為operation_1由運(yùn)算字段107記述。各個(gè)2運(yùn)算指令利用同一行記述的存儲(chǔ)器地址進(jìn)行存取。例如,子指令I(lǐng)01、I02存儲(chǔ)在1000~1007的存儲(chǔ)器區(qū),可以利用1000地址進(jìn)行存取。
      子指令101是分支指令BRA,若滿足“標(biāo)記F0為假(即標(biāo)記為0)”的分支條件,則向有l(wèi)oop記述的子指令I(lǐng)11、I12分支,該分支條件可以在執(zhí)行end記述的子指令I(lǐng)41、I42時(shí)進(jìn)行判斷。此外,分支指令BRA是沒(méi)有延遲的通常的分支指令。子指令I(lǐng)21是加法運(yùn)算指令A(yù)DD,將寄存器R2和寄存器R3的各個(gè)內(nèi)容相加,其和存儲(chǔ)在寄存器R2中。子指令I(lǐng)31是比較指令CMPEQ,若寄存器R2和寄存器R4的內(nèi)容相等,則向標(biāo)記F0寫入“1”,若不等則寫入“0”。子指令I(lǐng)11、I41、I51、I61是在存儲(chǔ)器單元2中進(jìn)行E/M級(jí)的處理的任意的算術(shù)運(yùn)算指令,其它的子指令是在整數(shù)運(yùn)算單元3中進(jìn)行E/M級(jí)的處理的任意的算術(shù)運(yùn)算指令。
      在與子指令I(lǐng)01對(duì)應(yīng)的執(zhí)行條件字段401中記述“cc=010”,除子指令I(lǐng)01以外的所有的子指令是無(wú)條件執(zhí)行的指令,在與其對(duì)應(yīng)的執(zhí)行條件字段中記述“cc=000”。
      此外,與子指令I(lǐng)01對(duì)應(yīng)的CD字段404中記述偏移值‘20’。
      此外,每一行記述的2運(yùn)算指令是將FM字段103、104設(shè)定為00、使2個(gè)子指令的運(yùn)算并行執(zhí)行的指令。
      在圖8的程序中,由地址1008、1010、1018和1020的4個(gè)2運(yùn)算指令形成1個(gè)循環(huán),該程序意味著按順序反復(fù)執(zhí)行該循環(huán)內(nèi)的4個(gè)2運(yùn)算指令,直到在執(zhí)行子指令131的比較指令時(shí)標(biāo)記F0為真為止。
      圖9示出流水線處理圖8所示的程序時(shí)的微處理器1的動(dòng)作。圖中,時(shí)標(biāo)t1~t13表示1個(gè)連續(xù)的時(shí)鐘周期,各時(shí)鐘周期內(nèi)的所有流水線級(jí)的處理是并行進(jìn)行的。例如,在時(shí)標(biāo)t5中,子指令I(lǐng)11、I12的各級(jí)W、子指令I(lǐng)21、I22的各級(jí)E/M、子指令I(lǐng)31、I32的各級(jí)D/A、子指令I(lǐng)41、I42的各級(jí)IF都是并行處理。其他時(shí)鐘周期也是一樣。
      在圖9中,微處理器1的PC保存的地址值表示具有該地址值的時(shí)鐘周期是由該地址取出的2運(yùn)算指令在指令譯碼級(jí)D/A進(jìn)行處理的周期的下一個(gè)周期。
      關(guān)于子指令I(lǐng)01、I02,其取指令級(jí)IF和指令譯碼級(jí)D/A分別在時(shí)鐘周期t1、t2進(jìn)行并行處理。子指令I(lǐng)02的指令執(zhí)行級(jí)E/M和往回寫入級(jí)W分別在時(shí)鐘周期t3、t4中進(jìn)行處理,另一方面,子指令I(lǐng)01的指令執(zhí)行級(jí)E/M不進(jìn)行執(zhí)行條件的判斷和在此基礎(chǔ)上執(zhí)行分支,直到被允許為止。
      根據(jù)子指令I(lǐng)01的分支指令BRA的條件指定字段401和CD字段404,指令譯碼單元2檢測(cè)出子指令I(lǐng)01是使執(zhí)行條件的判斷延遲的指令,該條件指定字段和CD字段的內(nèi)容作為用于延遲并判斷執(zhí)行條件的控制信號(hào),向PC控制部13輸出。此外,運(yùn)算指定字段由譯碼器8譯碼,與該譯碼結(jié)果對(duì)應(yīng)輸出控制信號(hào)11。該控制信號(hào)11包括用于控制PC控制部13使其產(chǎn)生分支指令BRA的第1信息、表示子指令I(lǐng)01是不產(chǎn)生執(zhí)行延遲的通常指令的第2信息和表示分支指令的分支目的地地址的第3信息。該第3信息就是分支目的地地址本身,是根據(jù)由分支指令BRA的字段323指定的偏移量、在指令譯碼級(jí)E/A由計(jì)算地址專用的加法器(未圖示)計(jì)算出來(lái)的。
      在時(shí)鐘周期t3中,PC控制部13接收某個(gè)信息,該信息說(shuō)明從指令譯碼單元2來(lái)的子指令I(lǐng)01是帶條件的指令,而且是使判斷該條件的時(shí)間延遲的指令,此外,PC控制部13將對(duì)分支指令BRA的控制信號(hào)11原封不動(dòng)地保存在寄存器30中。這時(shí),根據(jù)控制信號(hào)11,不執(zhí)行分支。從指令譯碼單元2輸出的作為執(zhí)行條件字段的cc=010的值也原封不動(dòng)地保存在寄存器31中。進(jìn)而,PC控制部13在時(shí)鐘周期t13中分別取出從指令譯碼單元2來(lái)的作為CD字段的偏移值“20”和從PC來(lái)的地址1000,使它們相加并將作為其結(jié)果的地址1020保存在寄存器32中。PC控制部13將寄存器32保存的值與PC示出的值進(jìn)行比較。在PC的地址值和寄存器32的地址值相等的時(shí)鐘周期、即時(shí)鐘周期t7中,PC控制部13根據(jù)寄存器31保存的cc值開始判斷分支指令BRA的執(zhí)行條件。
      另一方面,關(guān)于子指令I(lǐng)02,指令譯碼單元2的譯碼器9分析運(yùn)算指定字段107,并輸出在ALU18中進(jìn)行算術(shù)運(yùn)算的控制信號(hào)12。而且,指令譯碼單元2檢測(cè)其子指令I(lǐng)01是基于條件指定字段的、子指令I(lǐng)02是無(wú)條件指令,并輸出表示無(wú)條件(cc=000)的信息。
      ALU18接收表示無(wú)條件的信息,不將控制信號(hào)12保存在寄存器80中,而根據(jù)控制信號(hào)12進(jìn)行加法運(yùn)算。此外,從指令譯碼單元2輸出子指令I(lǐng)01中的執(zhí)行條件字段402的值和CD字段405的值,但是,ALU18忽視這些值而將迄今為止保存在寄存器81、82中的值原封不動(dòng)地保存下來(lái)。下面所示的其它的無(wú)條件執(zhí)行的子指令也是一樣的。
      關(guān)于子指令I(lǐng)11、I12,取指令級(jí)IF、指令譯碼級(jí)D/A、指令執(zhí)行級(jí)E/M和往回寫入級(jí)W分別在時(shí)鐘周期t2、t3、t4、t5中并行地進(jìn)行處理。
      關(guān)于子指令I(lǐng)21、I22,取指令級(jí)IF、指令譯碼級(jí)D/A、指令執(zhí)行級(jí)E/M和往回寫入級(jí)W分別在時(shí)鐘周期t2、t3、t4、t5中并行地進(jìn)行處理。在子指令I(lǐng)21的加法運(yùn)算指令中,利用ALU15,在時(shí)鐘周期t5的E/M級(jí)將寄存器R5和寄存器R6的內(nèi)容相加,在時(shí)鐘周期t6的W級(jí)將該相加的結(jié)果寫入寄存器R5。
      關(guān)于子指令I(lǐng)31、I32,取指令級(jí)IF、指令譯碼級(jí)D/A和指令執(zhí)行級(jí)E/11分別在時(shí)鐘周期t4、t5、t6中并行地進(jìn)行處理。在子指令I(lǐng)31的比較指令CMPEQ中,利用ALU15,在時(shí)鐘周期t6的E/M級(jí)將寄存器R2和寄存器R4的內(nèi)容進(jìn)行比較,若相等則將‘1’寫入標(biāo)記F0,若不等則將‘0’寫入標(biāo)記F0。本來(lái),比較指令CMPEQ的執(zhí)行級(jí)E/M在加法運(yùn)算指令A(yù)DD的運(yùn)算結(jié)果沒(méi)有寫入寄存器r5的時(shí)鐘周期t6之前不能開始,但可以利用設(shè)在處理器1內(nèi)部的旁路電路,使用通過(guò)在時(shí)鐘周期t5得到的加法運(yùn)算指令A(yù)DD的運(yùn)算結(jié)果進(jìn)行處理。
      再有,比較指令CMPEQ不存在往回寫入級(jí)W。另一方面,子指令I(lǐng)32的往回寫入級(jí)W在時(shí)鐘周期t7進(jìn)行處理。
      關(guān)于子指令I(lǐng)41、I42,取指令級(jí)IF、指令譯碼級(jí)D/A、指令執(zhí)行級(jí)E/M和往回寫入級(jí)W分別在時(shí)鐘周期t5、t6、t7、t8中并行地進(jìn)行處理。
      分支指令BRA的分支條件因必須參照子指令I(lǐng)31的運(yùn)算結(jié)果,故在時(shí)鐘周期t7進(jìn)行判定。在時(shí)鐘周期t7中,PC控制部13根據(jù)寄存器31保存的‘010’的值去參照標(biāo)記F0,若標(biāo)記F0是‘0’則決定分支,若是‘1’則決定不分支。
      PC控制部13根據(jù)寄存器30保存的控制信號(hào)11的第2信息所表示的分支指令BRA是沒(méi)有延遲的分支指令的內(nèi)容,不考慮寄存器33的內(nèi)容。即,在PC控制部13中,根據(jù)分支條件已決定的事實(shí),在同一個(gè)時(shí)鐘周期t7中處理指令執(zhí)行級(jí)E/M。因?yàn)橹噶領(lǐng)41是算術(shù)運(yùn)算指令,不在PC控制部13而在ALU15中進(jìn)行指令執(zhí)行級(jí)E/M的處理,所以,子指令I(lǐng)01、I41的E/M級(jí)可以并行處理。
      在圖9所示的微處理器1的動(dòng)作中,假定由比較指令CMPEQ將‘0’寫入標(biāo)記F0,PC控制部13通過(guò)生成表示已滿足執(zhí)行條件的信息(例如,邏輯值‘1’)去結(jié)束條件判斷,并根據(jù)響應(yīng)該信息而保存在寄存器30的控制信號(hào)11執(zhí)行分支處理。具體地說(shuō),PC控制部3根據(jù)控制信號(hào)11的第3信息,經(jīng)IA總線向指令RAM6輸出分支目的地地址(這時(shí)是地址1008),同時(shí),在下一個(gè)時(shí)鐘周期將該分支目的地地址送給PC。進(jìn)而,PC控制部3根據(jù)控制信號(hào)11的第1信息控制指令RAM6,將分支目的地地址1008中存儲(chǔ)的2運(yùn)算指令(子指令I(lǐng)11、I21)送給指令譯碼單元2。PC控制部13根據(jù)該第1信息控制指令譯碼單元2、存儲(chǔ)器單元3和整數(shù)運(yùn)算單元4,將在時(shí)鐘周期t7已開始的IF、E/A級(jí)的處理子指令I(lǐng)51、I52和已開始的IF級(jí)的處理子指令I(lǐng)61、I62的流水線處理取消。但是,不取消在時(shí)鐘周期t7中已完成E/M級(jí)的處理的子指令I(lǐng)41、I42的往回寫入級(jí)W,而繼續(xù)處理。
      指令譯碼單元2接收從指令RAM6輸出的地址1008中的子指令I(lǐng)11、I12的2運(yùn)算指令,在時(shí)鐘周期t8完成取指令級(jí)IF的處理。子指令I(lǐng)11、I12的指令譯碼級(jí)D/A、指令執(zhí)行級(jí)E/M和往回寫入級(jí)W分別在時(shí)鐘周期t9、t10、t11中進(jìn)行處理。PC直到處理地址1008的2運(yùn)算指令中的指令執(zhí)行級(jí)E/M的時(shí)鐘周期t10為止都原封不動(dòng)地保存地址值1008,在時(shí)鐘周期t10之后,8個(gè)8個(gè)地進(jìn)行計(jì)數(shù)。
      接在子指令I(lǐng)11、I12的2運(yùn)算指令之后,地址1010、1018、1020的各2運(yùn)算指令按順序順延1個(gè)時(shí)鐘周期進(jìn)行流水線處理。而且,PC控制部13的寄存器30、31、32將在時(shí)鐘周期t3保持的值原封不動(dòng)地保存下來(lái),所以,在PC保持地址1020的時(shí)鐘周期t13中,PC控制部13根據(jù)寄存器30、31、32的內(nèi)容參照標(biāo)記F0再次判斷所謂“標(biāo)記F0的值是‘0’”的相同的執(zhí)行條件,然后執(zhí)行分支指令BRA的分支。雖未圖示,但執(zhí)行條件是由作為在時(shí)鐘周期t12中得到的子指令I(lǐng)31的執(zhí)行結(jié)果的標(biāo)記F0的更新決定的。
      在時(shí)鐘周期t7中,當(dāng)判斷不滿足分支指令BRA的執(zhí)行條件時(shí),在PC控制部13中生成表示不滿足執(zhí)行條件的信息(例如,邏輯值‘0’),不參照響應(yīng)該信息而保存在寄存器30中的控制信號(hào)11,就不執(zhí)行分支處理。不取消子指令I(lǐng)51、I52的2運(yùn)算指令和子指令I(lǐng)61、I62的2運(yùn)算指令的各流水線級(jí)的處理而繼續(xù)進(jìn)行。此外,保存在寄存器30、31、32中的內(nèi)容也可以原封不動(dòng)地保存下來(lái),直到被下一個(gè)帶條件的分支指令更新為止,也可以全部復(fù)位。
      此外,若相對(duì)分支指令BRA的CD字段404的偏移值是0,則在PC值指示作為分支指令自身地址的地址1000的時(shí)鐘周期t3判斷執(zhí)行條件,執(zhí)行分支處理。
      此外,使用圖10的程序例說(shuō)明微處理器1的別的動(dòng)作。
      與圖8相同,各行中的2個(gè)子指令由圖2(a)的指令格式的2運(yùn)算指令101記述,子指令I(lǐng)01、I11、I21、I31、I41、I51和I61作為operation_0由字段106記述,子指令I(lǐng)02、I12、I22、I32、I42、I52和I62作為operation_1由字段107記述。
      子指令I(lǐng)01若滿足所謂“標(biāo)記F0為真(保持‘1’)”的執(zhí)行條件,它就是跳轉(zhuǎn)指令DJMP,跳轉(zhuǎn)到寄存器R5所保存的地址的指令上,跳轉(zhuǎn)指令DJMP是圖7所示格式的延遲跳轉(zhuǎn)指令。子指令I(lǐng)11是加法運(yùn)算指令A(yù)DD,將寄存器R1和寄存器r2的內(nèi)容相加并將其相加的結(jié)果寫入寄存器R1。子指令I(lǐng)21是比較指令CMPEQ,將寄存器R1和寄存器R3的內(nèi)容進(jìn)行比較,若相等則向標(biāo)記F0寫入‘1’,若不等則向標(biāo)記F0寫入‘0’。子指令I(lǐng)31是加法運(yùn)算指令A(yù)DD,將寄存器R5和寄存器R6的內(nèi)容相加并將其相加的結(jié)果寫入寄存器R5。子指令I(lǐng)11、I41、I51、I61是任意的算術(shù)運(yùn)算指令,在寄存器單元2中進(jìn)行E/M級(jí)的處理,其它的子指令是在整數(shù)運(yùn)算單元3中進(jìn)行E/M級(jí)處理的任意的算術(shù)運(yùn)算指令。
      在與子指令I(lǐng)01對(duì)應(yīng)的執(zhí)行條件字段401中記述“cc=001”,除子指令I(lǐng)01以外的所有子指令是無(wú)條件執(zhí)行的指令。
      此外,與子指令I(lǐng)01對(duì)應(yīng)的CD字段404中記述偏移值“20”。
      進(jìn)而,在子指令I(lǐng)01的執(zhí)行延遲量指定字段322(圖7)中記述作為立即數(shù)的偏移值‘28’。
      此外,記述在各行中的2運(yùn)算指令假定是FM字段103、104被設(shè)定為00、并行地執(zhí)行2個(gè)子指令的運(yùn)算的指令。
      在圖10的程序中,子指令I(lǐng)01的跳轉(zhuǎn)指令產(chǎn)生的跳轉(zhuǎn)是在判斷作為子指令I(lǐng)21的比較結(jié)果的標(biāo)記F0的值之后進(jìn)行的,而且,該跳轉(zhuǎn)目的地地址是由子指令I(lǐng)31的加法運(yùn)算結(jié)果決定的。不管跳轉(zhuǎn)指令DJMP是否產(chǎn)生跳轉(zhuǎn),地址1020、1028的2運(yùn)算指令照樣執(zhí)行。
      圖11示出流水線處理圖8所示的程序的微處理器1的動(dòng)作。與圖9相同,時(shí)鐘t1至t13表示1個(gè)連續(xù)的時(shí)鐘周期,各時(shí)鐘周期內(nèi)的所有的流水線級(jí)的處理是并行進(jìn)行的。PC值的意義也和圖9相同。
      關(guān)于子指令I(lǐng)01、I02,取指令級(jí)IF、指令譯碼級(jí)D/A分別在時(shí)鐘周期t1、t2中并行地進(jìn)行處理。子指令I(lǐng)02的指令執(zhí)行級(jí)E/M和往回寫入級(jí)W分別在時(shí)鐘周期t3、t4中并行地進(jìn)行處理。另一方面,子指令I(lǐng)01的指令執(zhí)行級(jí)E/M直到允許為止,不進(jìn)行分支條件的判斷及在此基礎(chǔ)上執(zhí)行分支處理。
      作為子指令I(lǐng)01的延遲跳轉(zhuǎn)指令DJMP,由圖1中的譯碼器8譯碼,輸出與該譯碼結(jié)果對(duì)應(yīng)的控制信號(hào)11。在該控制信號(hào)11中,包含用于PC控制部13控制產(chǎn)生跳轉(zhuǎn)指令BRA的第1信息、表示子指令I(lǐng)01是使執(zhí)行延遲的指令的第2信息和指示分支指令BRA的分支目的地地址的第3信息。第3信息是由跳轉(zhuǎn)指令DJMP指定的寄存器序號(hào)。
      在時(shí)鐘周期t3中,對(duì)于跳轉(zhuǎn)指令DJMP,PC控制部13將控制信號(hào)11原封不動(dòng)地保持在寄存器30中,不根據(jù)該控制信號(hào)11進(jìn)行分支處理。從指令譯碼單元2輸出的作為跳轉(zhuǎn)指令BRA的執(zhí)行條件字段的cc=001的值原封不動(dòng)地保存在寄存器31中。進(jìn)而,PC控制部13在時(shí)鐘周期t3中從指令譯碼單元2取出跳轉(zhuǎn)指令DJMP的執(zhí)行延遲量指定字段322的偏移值“28”,從PC中取出地址值1000,將它們相加,將作為相加結(jié)果的地址值1018保存在寄存器32中。PC控制部13將寄存器32保存的值與PC表示的值進(jìn)行比較。在PC的地址值與寄存器32的地址值相等的時(shí)鐘周期、即時(shí)鐘周期t6中,PC控制部13根據(jù)寄存器31保存的cc值開始判斷分支指令BRA的執(zhí)行條件。
      進(jìn)而,PC控制部13在時(shí)鐘周期t3中從指令譯碼單元2取出跳轉(zhuǎn)指令BRA的CD字段的偏移值“18”,從PC中取出地址值1000,將它們相加,將作為相加結(jié)果的地址值1028保存在寄存器33中。PC控制部13將寄存器33保存的值與PC表示的值進(jìn)行比較。在PC的地址值與寄存器32的地址值相等的時(shí)鐘周期、即時(shí)鐘周期t8中開始執(zhí)行跳轉(zhuǎn)指令DJMP的跳轉(zhuǎn)。
      關(guān)于子指令I(lǐng)11、I12,取指令級(jí)IF、指令譯碼級(jí)D/A、指令執(zhí)行級(jí)E/M和往回寫入級(jí)W分別在時(shí)鐘周期t2、t3、t4、t5中并行地進(jìn)行處理。在子指令I(lǐng)11的加法運(yùn)算指令A(yù)DD中,利用ALU15,在E/M級(jí)將寄存器R1和寄存器R2的內(nèi)容相加,在W級(jí)將該相加的結(jié)果寫入寄存器R1。
      關(guān)于子指令I(lǐng)21、I22,取指令級(jí)IF、指令譯碼級(jí)D/A和指令執(zhí)行級(jí)E/M分別在時(shí)鐘周期t3、t4、t5中并行地進(jìn)行處理。在子指令I(lǐng)21的比較指令CMPEQ中,利用ALU15,在時(shí)鐘周期t5的E/M執(zhí)行級(jí)將寄存器R1和寄存器R3的內(nèi)容進(jìn)行比較,若相等則將‘1’寫入標(biāo)記F0,若不等則將‘0’寫入標(biāo)記F0。
      再有,比較指令CMPEQ不存在往回寫入級(jí)W。另一方面,子指令I(lǐng)32的往回寫入級(jí)W在時(shí)鐘周期t7進(jìn)行處理。
      跳轉(zhuǎn)指令DJMP的執(zhí)行條件因必須參照作為子指令I(lǐng)21的運(yùn)算結(jié)果的標(biāo)記F0,故在時(shí)鐘周期t6進(jìn)行判定。在時(shí)鐘周期t6中,PC控制部13根據(jù)寄存器31保存的‘001’的值去參照標(biāo)記F0,若標(biāo)記F0是‘1’則決定分支,若是‘0’則決定不分支。而且,在時(shí)鐘周期T6,在存儲(chǔ)電路34設(shè)置1個(gè)已決定是否分支的信息位。但是,實(shí)際上,直到時(shí)鐘周期t8之前,不執(zhí)行跳轉(zhuǎn)指令的跳轉(zhuǎn)。
      這里,考慮因比較指令CMPEQ使標(biāo)記F0寫入‘1’從而滿足執(zhí)行條件的情況。
      存儲(chǔ)電路34置‘1’,該信息表示滿足執(zhí)行條件。第2信息表示寄存器30保存的控制信號(hào)11的跳轉(zhuǎn)指令DJMP是有延遲的跳轉(zhuǎn)指令,PC控制部13按照該第2信息檢查寄存器33保存的地址是否與PC值一致。即使已經(jīng)肯定滿足執(zhí)行條件,由于在時(shí)鐘周期t6這一階段尚未一致,所以,根據(jù)寄存器30保存的控制信號(hào)11的第1和第3信息,PC控制部13不執(zhí)行分支處理。
      關(guān)于子指令I(lǐng)31、I32,取指令級(jí)IF、指令譯碼級(jí)D/A、指令執(zhí)行級(jí)E/M和往回寫入級(jí)W分別在時(shí)鐘周期t4、t5、t6、t7中并行地進(jìn)行處理。在子指令I(lǐng)31的加法運(yùn)算指令A(yù)DD中,利用ALU15,在E/M級(jí)將寄存器R5和寄存器R6的內(nèi)容相加,在W級(jí)將該相加的結(jié)果寫入寄存器R5。
      關(guān)于子指令I(lǐng)41、I42,取指令級(jí)IF、指令譯碼級(jí)D/A、指令執(zhí)行級(jí)E/M和往回寫入級(jí)W分別在時(shí)鐘周期t5、t6、t7、t8中并行地進(jìn)行處理。此外,關(guān)于子指令I(lǐng)51、I52,取指令級(jí)IF、指令譯碼級(jí)D/A、指令執(zhí)行級(jí)E/M和往回寫入級(jí)W分別在時(shí)鐘周期t6、t7、t8、t9中并行地進(jìn)行處理。
      因根據(jù)跳轉(zhuǎn)指令DJMP的跳轉(zhuǎn)必須參照作為子指令I(lǐng)31的運(yùn)算結(jié)果的寄存器R5的內(nèi)容,故在時(shí)鐘周期t8中執(zhí)行。在時(shí)鐘周期t8中,PC控制部13檢測(cè)寄存器33保存的地址值是否和PC的值一致。接著,因?yàn)榇鎯?chǔ)電路34保持著‘1’的狀態(tài),所以,PC控制部13在時(shí)鐘周期t8中對(duì)跳轉(zhuǎn)指令DJMP的指令執(zhí)行級(jí)E/M進(jìn)行處理。PC控制部13根據(jù)寄存器30保存的控制信號(hào)11發(fā)生分支。因指令I(lǐng)51是算術(shù)運(yùn)算指令,不是由PC控制部13而是由ALU15進(jìn)行指令執(zhí)行級(jí)E/M的處理,故子指令I(lǐng)01、I51的E/M級(jí)可以并行進(jìn)行。
      具體地說(shuō),按照控制信號(hào)11的第3信息,PC控制部13經(jīng)IA總線將第3信息指定的寄存器中保存的分支目的地地址(假定是地址2000)輸出到指令RAM6中,同時(shí),在下一個(gè)時(shí)鐘周期將該分支目的地地址寫入PC。進(jìn)而,PC控制部13根據(jù)控制信號(hào)11的第1信息控制指令RAM6,將存儲(chǔ)在分支目的地地址2000中的2運(yùn)算指令(子指令I(lǐng)11、I21)送給指令譯碼單元2。進(jìn)而,PC控制部3在時(shí)鐘周期T8根據(jù)該第1信息控制指令譯碼單元2、存儲(chǔ)單元3和整數(shù)運(yùn)算單元4,將IF級(jí)和E/A級(jí)處理的子指令I(lǐng)61、I62和已進(jìn)行了IF級(jí)處理的子指令I(lǐng)71、I72的流水線處理取消。但是,在時(shí)鐘周期T8已進(jìn)行了E/M級(jí)處理的子指令I(lǐng)51、I52的往回寫入級(jí)W不被取消,照樣處理。
      指令譯碼單元2從指令RAM6接收輸出的2000號(hào)地址中的2運(yùn)算指令,在時(shí)鐘周期t9處理該2運(yùn)算指令的各取指令級(jí)IF,在每一個(gè)時(shí)鐘周期按順序處理D/A、E/M和W級(jí)。
      此外,當(dāng)在時(shí)鐘周期T6不滿足跳轉(zhuǎn)指令的執(zhí)行條件時(shí),則在時(shí)鐘周期T6使存儲(chǔ)電路34保持表示不滿足跳轉(zhuǎn)指令的執(zhí)行條件的信息‘0’。接著,在時(shí)鐘周期T8,即使寄存器33保存的地址值與PC的值相等,因?yàn)榇鎯?chǔ)電路34保持‘0’的狀態(tài),所以,PC控制部13不參照寄存器30保存的控制信號(hào)11,不發(fā)生分支。子指令I(lǐng)61、I62的2運(yùn)算指令和子指令I(lǐng)71、I72的2運(yùn)算指令的各流水線級(jí)的處理不被取消而繼續(xù)進(jìn)行。此外,寄存器30、31、32、33和存儲(chǔ)電路34保存的內(nèi)容可以原封不動(dòng)地保留下來(lái),直到由下一個(gè)帶條件的分支指令更新為止,也可以全部復(fù)位。
      此外,作為別的方法,也可以在時(shí)鐘周期t6判斷條件,根據(jù)表示不滿足條件的信息,將寄存器30保存的控制信號(hào)11改寫成PC控制部13被控制成跳轉(zhuǎn)無(wú)效、即不執(zhí)行跳轉(zhuǎn)的控制信號(hào)。而且,當(dāng)表示滿足條件的信息產(chǎn)生時(shí),原封不動(dòng)地保存寄存器30的控制信號(hào)11。這樣一來(lái),在時(shí)鐘周期T8實(shí)際執(zhí)行跳轉(zhuǎn)時(shí),可以不設(shè)參照用的存儲(chǔ)電路34。
      當(dāng)然,也可以使延遲跳轉(zhuǎn)指令DJMP(或延遲分支指令DBRA)改變執(zhí)行延遲量指定字段322的值,在與判斷執(zhí)行條件的時(shí)鐘周期相同的周期執(zhí)行分支處理。
      這種使判斷執(zhí)行條件的時(shí)間延遲的做法不限于帶條件的分支或跳轉(zhuǎn)指令。在2運(yùn)算指令101的2個(gè)子指令的任意一個(gè)子指令和任意一個(gè)1運(yùn)算指令102的執(zhí)行處理中,可以利用CD格式404~406,使判斷由條件指定字段401~403指定的執(zhí)行條件的時(shí)間延遲。這分別由具有與PC控制部13的寄存器30~32相同的結(jié)構(gòu)和功能的各存儲(chǔ)器控制部14的寄存器40~42、ALU15的寄存器50~52、移位器16的寄存器60~62、乘法器17的寄存器70~72、ALU19的寄存器80~82以及移位器20的寄存器90~92來(lái)實(shí)現(xiàn)。
      例如,在圖8的程序中,假定子指令I(lǐng)12是I12(ADD F1T R13 R8,R8,R9)……(A)即,假定I12是加法指令,當(dāng)滿足“標(biāo)記F1為真”的執(zhí)行條件時(shí),將寄存器R8和寄存器R9的內(nèi)容相加,并將該相加結(jié)果寫入寄存器R8,執(zhí)行條件的判斷在PC值成為寄存器R13保存的地址值的時(shí)鐘周期內(nèi)進(jìn)行。條件指定字段402記述cc=011、CD字段405記述寄存器序號(hào)‘13’。寄存器13保存地址號(hào)1018。
      在圖9中,子指令I(lǐng)12的指令執(zhí)行級(jí)E/M在時(shí)鐘周期t4中處理,但如果子指令I(lǐng)12是上述(A)那樣的加法指令,則指令執(zhí)行級(jí)E/M在時(shí)鐘周期t6中進(jìn)行處理。
      子指令I(lǐng)12在時(shí)鐘周期t3由譯碼器9譯碼,與該譯碼結(jié)果對(duì)應(yīng)輸出控制信號(hào)12。該控制信號(hào)12包含用于控制ALU19使其產(chǎn)生加法指令的第1信息和指定運(yùn)算用寄存器R8、R9的第2信息。
      在時(shí)鐘周期t4中,ALU19只是原封不動(dòng)地將該控制信號(hào)12保存在寄存器80中,還沒(méi)有執(zhí)行加法運(yùn)算。從指令譯碼單元2輸出的作為執(zhí)行條件字段的cc=011的值原封不動(dòng)地保存在寄存器81中。進(jìn)而,ALU19在時(shí)鐘周期t4中,將從指令譯碼單元2來(lái)的作為CD字段的寄存器序號(hào)‘13’原封不動(dòng)地保存下來(lái)。ALU19將寄存器82保存的序號(hào)‘13’指示的寄存器中保存的值與PC的值進(jìn)行比較。在PC的地址值與1018相等的時(shí)鐘周期、即時(shí)鐘周期t6,ALU19開始根據(jù)寄存器81保存的cc值判斷加法指令的執(zhí)行條件。ALU19生成表示是否滿足執(zhí)行條件的信息。
      ALU19根據(jù)該信息,若滿足條件,則在同一個(gè)時(shí)鐘周期根據(jù)寄存器80保存的控制信號(hào)12進(jìn)行加法運(yùn)算,在時(shí)鐘周期t7將相加的結(jié)果保存在指定的通用寄存器5中。若不滿足條件,則不考慮控制信號(hào)12,不進(jìn)行加法運(yùn)算。
      此外,作為不滿足條件時(shí)使用的另外一種方法,也可以這樣來(lái)構(gòu)成ALU19,即,雖然也可以使ALU19根據(jù)控制信號(hào)12進(jìn)行加法運(yùn)算,但可以根據(jù)表示是否滿足執(zhí)行條件的信息來(lái)決定是否將加法運(yùn)算的結(jié)果寫入由加法指令指定的寄存器。
      決定作為(A)的加法指令執(zhí)行條件的標(biāo)記F1的值運(yùn)算指令(將2個(gè)值進(jìn)行比較并在標(biāo)記F1中反映等與不等或大小的比較指令)是程序序列子指令I(lǐng)12的下位地址中的指令,例如,可以位于子指令I(lǐng)22的位置。
      此外,在CD字段404、405和406中,除偏移值的信息或指定寄存器的信息之外,還可以記述一種信息,該信息表示在各運(yùn)算字段中記述的運(yùn)算指令的指令譯碼級(jí)D/A中判斷由各執(zhí)行條件指定字段指定的執(zhí)行條件。
      例如,在圖8中,當(dāng)與子指令I(lǐng)01的分支指令BRA對(duì)應(yīng)的CD字段404具有表示在指令譯碼級(jí)D/A中進(jìn)行判斷的信息時(shí),指令譯碼單元2在時(shí)鐘周期t2中響應(yīng)CD字段404,開始執(zhí)行條件的判斷,根據(jù)條件指定字段401,并參照PSW10內(nèi)的已指定的標(biāo)記F0的內(nèi)容。接著,指令譯碼單元2輸出表示子指令I(lǐng)01是否滿足執(zhí)行條件的第4信息。此外,指令譯碼單元2通過(guò)譯碼器8,在分支指令BRA的運(yùn)算指定字段的譯碼結(jié)果的基礎(chǔ)上生成控制信號(hào)11。該控制信號(hào)11包含用于控制PC控制部13去產(chǎn)生分支指令BRA的第1信息、表示分支指令是分支執(zhí)行不發(fā)生延遲的通常指令的第2信息和表示分支指令BRA的分支目的地的第3信息。
      當(dāng)判斷滿足執(zhí)行條件時(shí),指令譯碼單元2作為第4信息輸出滿足執(zhí)行條件的信息、即表示可以由PC控制部3無(wú)條件執(zhí)行的信息。PC控制部13接收表示無(wú)條件的信息,不把控制信號(hào)11保存在寄存器30中,而在時(shí)鐘周期t3中根據(jù)控制信號(hào)11進(jìn)行分支。
      當(dāng)判斷不滿足執(zhí)行條件時(shí),指令譯碼單元2作為第4信息輸出表示運(yùn)算無(wú)效的信息。PC控制部13根據(jù)表示運(yùn)算無(wú)效的信息,即使接收控制信號(hào)11也不進(jìn)行分支。
      分支指令以外的其他種類的運(yùn)算指令也完全一樣。只是,在加法等算術(shù)運(yùn)算指令中,當(dāng)在指令譯碼級(jí)D/A中已判斷為無(wú)效時(shí),也可以即使讓運(yùn)算單元執(zhí)行算術(shù)運(yùn)算、也不將運(yùn)算結(jié)果寫入由運(yùn)算指令指定的寄存器中。
      此外,在圖1所示的該微處理器1中,如果沒(méi)準(zhǔn)備有具有延遲功能的分支指令BRA和跳轉(zhuǎn)指令DJMP的指令,則沒(méi)有必要在PC控制部13設(shè)置寄存器33和存儲(chǔ)電路34。
      此外,成為運(yùn)算指令的指令執(zhí)行部的運(yùn)算單元的PC控制部13、存儲(chǔ)器控制部14、ALU15、19、移位器16、20和乘法器17都具有作為使判斷執(zhí)行條件的時(shí)間延遲的裝置的寄存器,但也可以只讓這些指令執(zhí)行部的運(yùn)算單元中的選擇的部分具備這種寄存器。
      例如,在在指定的條件下執(zhí)行的運(yùn)算指令中,用戶制作的程序中最經(jīng)常使用的指令是帶條件的分支指令(或跳轉(zhuǎn)指令)。因此,可以只在對(duì)分支指令的處理中才使其具有延遲判斷執(zhí)行條件的時(shí)間的功能。這樣一來(lái),只讓PC控制部13具有寄存器30、31、32即可。
      如上所述,該實(shí)施形態(tài)具有如下特征。
      (1)例如,若是象圖8子指令I(lǐng)31那樣的無(wú)條件執(zhí)行的運(yùn)算指令,或者是即使有條件也是在其譯碼級(jí)決定條件的運(yùn)算指令,則在時(shí)鐘周期t5對(duì)指令進(jìn)行譯碼,在接在時(shí)鐘周期t5之后的、在上述帶條件的運(yùn)算指令的延遲量之內(nèi)的時(shí)鐘周期t6中,執(zhí)行由子指令I(lǐng)31指定的運(yùn)算。另一方面,象子指令I(lǐng)01那樣的帶條件的運(yùn)算指令在時(shí)鐘周期t2進(jìn)行譯碼,在時(shí)鐘周期t7開始判斷分支運(yùn)算的執(zhí)行條件,該時(shí)鐘周期t7是從時(shí)鐘周期t2開始經(jīng)過(guò)一個(gè)比象子指令I(lǐng)31那樣的指令執(zhí)行級(jí)E/M的處理時(shí)間、即時(shí)鐘周期T6的時(shí)間還要長(zhǎng)的時(shí)間之后的時(shí)鐘周期。即,將從時(shí)鐘周期t3到時(shí)鐘周期t6的時(shí)間作為延遲量,使判斷執(zhí)行條件的時(shí)間延遲。因此,象圖8的程序序列那樣,帶條件的運(yùn)算指令可以放在進(jìn)行決定該運(yùn)算指令的執(zhí)行條件的運(yùn)算的運(yùn)算指令(子指令I(lǐng)31)的前面。若是過(guò)去的處理器,有可能在子指令I(lǐng)01的位置不能放NOP指令以外的指令,但是,若采用本實(shí)施形態(tài)的處理器,作為子指令I(lǐng)01,可以放置帶條件的運(yùn)算指令,指令的調(diào)度就靈活了。
      (2)例如,可以可變地設(shè)定存儲(chǔ)在各運(yùn)算單元的寄存器32、42等中的、表示判斷指令執(zhí)行條件的時(shí)間的延遲量。因此,例如在子指令I(lǐng)01中,可以在從時(shí)鐘周期t4開始的各時(shí)鐘周期內(nèi)判斷執(zhí)行條件。從而,在調(diào)度指令時(shí),可以根據(jù)程序的內(nèi)容適當(dāng)改變帶條件的運(yùn)算指令的位置。特別是,因保存在寄存器32、43等中的值可以根據(jù)構(gòu)成程序的指令格式的CD字段403、404和405中記述的內(nèi)容進(jìn)行設(shè)定,故程序員(或編譯器)可以很容易決定對(duì)應(yīng)該帶條件的運(yùn)算指令需要多大的延遲量。
      (3)作為保存在寄存器32、42等中的延遲量的信息,可以考慮各種形式。作為延遲量可以保存時(shí)鐘周期的個(gè)數(shù)。這時(shí),將寄存器32、42等構(gòu)成為減法計(jì)數(shù)器。例如,可以在PC控制部13中,在時(shí)鐘周期t3將時(shí)鐘周期數(shù)‘4’保存在寄存器32中,利用計(jì)數(shù)器進(jìn)行時(shí)鐘周期數(shù)的減法運(yùn)算,在寄存器保存的數(shù)為‘0’的時(shí)鐘周期t7開始條件的判斷。但是,在該實(shí)施形態(tài)中,作為表示判斷運(yùn)算執(zhí)行條件的時(shí)間的延遲量,保存的是地址值,在該地址值和程序計(jì)數(shù)器的值相等的時(shí)鐘周期判斷執(zhí)行條件。即,因使用PC值去管理延遲量,故比較有效。例如,在圖8的程序中,在地址1008和1020之間跳轉(zhuǎn)到其他指令,返回時(shí)也不必改變寄存器32、42等的值去調(diào)整判斷執(zhí)行的時(shí)間,控制簡(jiǎn)單。如果保存了上述時(shí)鐘周期數(shù),則需要采取一些措施,例如保存跳轉(zhuǎn)到其他指令的時(shí)刻的減法計(jì)數(shù)器的值等。
      (4)若是帶條件的延遲分支或跳轉(zhuǎn)指令,如圖11所示,在時(shí)鐘周期t6判斷分支的條件,在經(jīng)過(guò)1個(gè)或更多個(gè)時(shí)鐘周期之后的時(shí)鐘周期t8執(zhí)行分支處理。假如,子指令I(lǐng)41、I42是改寫在時(shí)鐘周期t7決定跳轉(zhuǎn)指令DJMP的執(zhí)行條件的標(biāo)記F0的指令,就可以使用沒(méi)有延遲的跳轉(zhuǎn)指令,即作為子指令I(lǐng)01在與判斷執(zhí)行條件相同的時(shí)鐘周期執(zhí)行跳轉(zhuǎn)。因此,本實(shí)施形態(tài)的帶條件的延遲運(yùn)算指令使程序中的指令調(diào)度更加靈活。
      (5)各運(yùn)算單元、例如PC控制部13分別將用于控制PC控制部13使之執(zhí)行第1運(yùn)算指令的運(yùn)算的控制信號(hào)11、作為表示第1運(yùn)算指令的執(zhí)行條件的第1信息的條件指定字段的值和作為表示判斷該執(zhí)行條件的時(shí)間的第2信息的地址值(或指定保存該地址值的寄存器的信息)保存在寄存器30、31、32中。而且,在在第1運(yùn)算指令之后由指令譯碼器2譯碼的第2帶條件的運(yùn)算指令中,這些寄存器的值原封不動(dòng)地保存下來(lái),直到為了延遲條件判斷的時(shí)間而被改寫為止。這對(duì)于圖8的程序中由帶條件的運(yùn)算指令形成的循環(huán)處理是有效的。若開始將各信息暫時(shí)保存在寄存器30、31、32中,只要在每次發(fā)生循環(huán)時(shí)使用該寄存器30、31、32保存的信息,就可以執(zhí)行帶條件的指令。若是以往的技術(shù),則必須在每次發(fā)生循環(huán)時(shí),將帶條件的運(yùn)算指令從指令RAM中取出,并由譯碼器進(jìn)行譯碼,但若按照本實(shí)施形態(tài),只要取一次子指令I(lǐng)01的運(yùn)算指令并進(jìn)行譯碼即可。因此,可以提高微處理器的處理效率。
      (6)在本實(shí)施形態(tài)中,微處理器處理的所有的指令是圖2的格式,在這里設(shè)定與指定運(yùn)算字段對(duì)應(yīng)的條件指定字段,進(jìn)而,與該條件指定字段對(duì)應(yīng)設(shè)置條件判斷延遲量指定字段。條件指定字段也可指定無(wú)條件地執(zhí)行。即,由于確保了插入表示在指令格式中是否帶條件的信息和表示如果帶條件又是什么樣的條件及判斷該條件的時(shí)間的信息的場(chǎng)所,所以,程序員(或編程器)可以很容易構(gòu)成指令。
      (7)在條件判斷延遲量指定字段中,作為判斷條件的時(shí)間,也可以指定由指令譯碼單元2在指令譯碼階段進(jìn)行判斷。若滿足指令的條件,指令執(zhí)行部將該指令作為無(wú)條件執(zhí)行的指令進(jìn)行運(yùn)算。這也使指令的調(diào)度具有靈活性。
      (8)進(jìn)而,考慮下面的變形例。
      在帶條件的運(yùn)算指令的處理中,決定條件時(shí)所參照的值是標(biāo)記F0,但并不限于此,也可以是保存多個(gè)位的寄存器的值。
      該實(shí)施例的微處理器采用VLIW結(jié)構(gòu),對(duì)多個(gè)流水線并行地進(jìn)行處理,在該帶條件的運(yùn)算指令中,將使條件判斷的時(shí)間延遲的功能設(shè)在處理單一流水線的處理器中也有效。
      (9)將使條件判斷延遲的3個(gè)寄存器作為1組設(shè)在各運(yùn)算單元中,但進(jìn)而也可以在各運(yùn)算單元中設(shè)置1組或多組具有和上述3個(gè)寄存器相同的功能的3個(gè)寄存器。當(dāng)在由圖8的程序形成循環(huán)中進(jìn)而存在1個(gè)或多個(gè)循環(huán)時(shí),這是有效的。
      例如,考慮下面的程序。
      地址100:I01(BRA F0F#H30 110)地址108:I11(BRA F1T#H10 118)地址110:I21地址118:I31地址120:I41地址128:I51地址130:I61指令I(lǐng)01是當(dāng)標(biāo)記F0為偽時(shí)向地址108分支的分支指令,是執(zhí)行條件在地址130的指令I(lǐng)61的指令執(zhí)行級(jí)的周期內(nèi)進(jìn)行判斷并執(zhí)行分支處理的指令。指令I(lǐng)21是當(dāng)標(biāo)記F0為真時(shí)向地址118分支的分支指令,是執(zhí)行條件在地址120的指令I(lǐng)41的指令執(zhí)行級(jí)的周期內(nèi)進(jìn)行判斷并執(zhí)行分支處理的指令。該程序從地址110到130形成第1循環(huán),從地址118到120形成第2循環(huán)。
      當(dāng)指令I(lǐng)01被譯碼時(shí),將對(duì)指令I(lǐng)01的分支指令的控制信號(hào)11、指定條件的信息和指定條件判斷時(shí)間的信息保存在PC控制部13的寄存器30~32中。當(dāng)指令I(lǐng)01的下一個(gè)指令I(lǐng)11被譯碼時(shí),將對(duì)指令I(lǐng)11的分支指令的控制信號(hào)11、指定條件的信息和指定條件判斷時(shí)間的信息保存在PC控制部13另外具備的3個(gè)寄存器中。因此,每當(dāng)?shù)?、第2循環(huán)發(fā)生時(shí),只要分別參照寄存器30、31、32保存的信息和相同功能的另外3個(gè)寄存器保存的信息,就可以適當(dāng)?shù)貓?zhí)行2個(gè)帶條件運(yùn)算指令。不需要在每一個(gè)循環(huán)發(fā)生時(shí)分別取指令I(lǐng)01和I02并進(jìn)行譯碼,可以提高處理器的處理性能。
      實(shí)施形態(tài)2圖12示出與圖1不同的微處理器的結(jié)構(gòu)。
      該微處理器在存儲(chǔ)器控制部14設(shè)有寄存器43和存儲(chǔ)電路44,在ALU15設(shè)有寄存器53和存儲(chǔ)電路54,在移位器16設(shè)有寄存器63和存儲(chǔ)電路64,在乘法器17設(shè)有寄存器73和存儲(chǔ)電路74,在ALU19設(shè)有寄存器83和存儲(chǔ)電路84,在移位器20設(shè)有寄存器93和存儲(chǔ)電路94。
      其余的結(jié)構(gòu)和圖1相同。
      在圖1的微處理器中,具有延遲功能的運(yùn)算指令、即在條件判斷的時(shí)鐘周期之后的時(shí)鐘周期執(zhí)行運(yùn)算的運(yùn)算指令只有分支和跳轉(zhuǎn)指令,但對(duì)于送數(shù)存儲(chǔ)指令、算術(shù)運(yùn)算指令、移位算術(shù)運(yùn)算指令等任意運(yùn)算指令也可附加延遲功能。各運(yùn)算單元另加的6個(gè)寄存器與PC控制部13的寄存器33具有完全相同的功能,用于保存表示執(zhí)行各運(yùn)算單元應(yīng)執(zhí)行的運(yùn)算的時(shí)間的信息。此外,各運(yùn)算單元另加的6個(gè)存儲(chǔ)電路與PC控制部13的存儲(chǔ)電路34具有完全相同的功能,用于保存各運(yùn)算單元應(yīng)執(zhí)行的運(yùn)算的執(zhí)行條件的判斷結(jié)果的信息。
      這樣構(gòu)成的微處理器例如可以準(zhǔn)備指令DADD FOT #H20,H30 R5,R5,R6該指令是以‘標(biāo)記F0為真’為條件,將寄存器R5和R6的內(nèi)容相加并將該相加的結(jié)果寫入寄存器R5的加法運(yùn)算指令。該加法運(yùn)算指令具有2個(gè)作為立即數(shù)的偏移值‘20’‘30’。若加法運(yùn)算指令DADD的地址是2000,則在處理地址為2000+20=2020的運(yùn)算指令的指令執(zhí)行級(jí)E/M的時(shí)鐘周期內(nèi),判斷加法運(yùn)算指令DADD的條件。接著,在處理地址為2000+30=2030的運(yùn)算指令的指令執(zhí)行級(jí)E/M的時(shí)鐘周期內(nèi)執(zhí)行加法運(yùn)算。若該加法運(yùn)算指令DADD是圖2的operation_0,則由ALU15判斷條件并進(jìn)行加法運(yùn)算,若是operation_1,則由ALU19判斷條件并進(jìn)行加法運(yùn)算。
      在該實(shí)施形態(tài)中,各運(yùn)算單元附加了寄存器和存儲(chǔ)電路,當(dāng)然,也可以只讓多個(gè)運(yùn)算單元中選擇的運(yùn)算單元具備這樣的寄存器和存儲(chǔ)電路。這時(shí),該附加了寄存器和存儲(chǔ)電路的運(yùn)算單元只對(duì)能夠處理的運(yùn)算指令附加延遲功能。
      如上所述,若按照本發(fā)明的數(shù)據(jù)處理裝置,第1運(yùn)算指令在第1時(shí)間譯碼,接著在第2時(shí)間執(zhí)行,另一方面,在規(guī)定的條件下執(zhí)行運(yùn)算的第2運(yùn)算指令在第3時(shí)間譯碼,在第3時(shí)間結(jié)束后,經(jīng)過(guò)至少和第2時(shí)間相同的時(shí)間的第4周期判斷條件并執(zhí)行。因帶條件的運(yùn)算指令即使譯碼后也不象第1運(yùn)算指令那樣立即執(zhí)行,而是在延遲一個(gè)判斷該執(zhí)行條件的時(shí)間之后再執(zhí)行,所以,在該延遲的時(shí)間內(nèi)就可以執(zhí)行決定第2運(yùn)算指令的執(zhí)行條件的運(yùn)算指令。因此,在程序序列中,可以在決定第2運(yùn)算指令的執(zhí)行條件的另外的運(yùn)算指令之前記述第2運(yùn)算指令,從而增加了指令調(diào)度的自由度。
      此外,通過(guò)使執(zhí)行由第2運(yùn)算指令指定的運(yùn)算的時(shí)間比進(jìn)行條件判斷的時(shí)間進(jìn)一步延遲,在該延遲的時(shí)間內(nèi),即使因其它運(yùn)算指令的處理而改寫了決定第2運(yùn)算指令的條件的值,也可以恰當(dāng)?shù)貓?zhí)行帶條件的運(yùn)算指令。進(jìn)一步增加了指令調(diào)度的自由度。
      此外,若按照另一種數(shù)據(jù)處理裝置,指令執(zhí)行部具有處理帶條件的運(yùn)算指令時(shí)使用的第1至第3寄存器。第1寄存器保存指令譯碼器輸出的控制信號(hào),第2寄存器保存表示執(zhí)行由帶條件的運(yùn)算指令指定的運(yùn)算的條件的第1信息,第3寄存器保存表示開始該條件判斷的時(shí)間的第2信息。
      指令執(zhí)行部根據(jù)這3個(gè)信息對(duì)運(yùn)算指令進(jìn)行譯碼,經(jīng)過(guò)指定的時(shí)間后判斷條件并執(zhí)行,所以,在指令調(diào)度時(shí),可以在該延遲的時(shí)間內(nèi)執(zhí)行決定第2運(yùn)算指令的執(zhí)行條件的運(yùn)算指令。因此,增加了指令調(diào)度的自由度。
      權(quán)利要求
      1.一種數(shù)據(jù)處理裝置,其特征在于,具有指令譯碼器和指令執(zhí)行部,指令譯碼器對(duì)程序中所記的已編碼的多個(gè)運(yùn)算指令依次進(jìn)行譯碼,輸出與各運(yùn)算指令對(duì)應(yīng)的控制信號(hào),指令執(zhí)行部根據(jù)從上述指令譯碼器輸出的控制信號(hào),執(zhí)行由上述多個(gè)運(yùn)算指令分別指定的運(yùn)算;在第1時(shí)間,上述指令譯碼器對(duì)上述多個(gè)運(yùn)算指令中的第1運(yùn)算指令譯碼并輸出第1控制信號(hào),在接在上述第1時(shí)間之后的第2時(shí)間,上述指令執(zhí)行部根據(jù)上述第1控制信號(hào)執(zhí)行由上述第1運(yùn)算指令指定的運(yùn)算;在第3時(shí)間,上述指令譯碼器對(duì)執(zhí)行上述多個(gè)運(yùn)算指令中給定條件下的運(yùn)算的第2運(yùn)算指令進(jìn)行譯碼并輸出第2控制信號(hào),在從上述第3時(shí)間的結(jié)束開始經(jīng)過(guò)和上述第2時(shí)間相同的時(shí)間、或比其更長(zhǎng)的時(shí)間后才開始的第4時(shí)間中,上述指令執(zhí)行部判斷是否滿足上述規(guī)定的條件,根據(jù)該判斷結(jié)果,執(zhí)行由上述第2運(yùn)算指令指定的運(yùn)算。
      2.權(quán)利要求1記載的數(shù)據(jù)處理裝置,其特征在于,具有可以可變地設(shè)定該保存的值的延遲量指定寄存器;上述指令執(zhí)行部開始根據(jù)作為延遲量保存在上述延遲量寄存器中的值判斷第2運(yùn)算指令是否滿足規(guī)定的條件。
      3.權(quán)利要求1記載的數(shù)據(jù)處理裝置,其特征在于,指令執(zhí)行部在包含于第4時(shí)間的第5時(shí)間中判斷是否滿足規(guī)定的條件,在包含在上述第4時(shí)間內(nèi)、而且在上述第5時(shí)間結(jié)束后經(jīng)過(guò)和第2時(shí)間相同或更長(zhǎng)的時(shí)間才開始的第6時(shí)間執(zhí)行由第2運(yùn)算指令指定的運(yùn)算。
      4.權(quán)利要求1記載的數(shù)據(jù)處理裝置,其特征在于,在第3時(shí)間之后開始的第7時(shí)間內(nèi),指令譯碼器對(duì)多個(gè)運(yùn)算指令中的第3運(yùn)算指令進(jìn)行譯碼并輸出第3控制信息,在上述第7時(shí)間后開始的第8時(shí)間中,指令執(zhí)行部根據(jù)上述第3控制信號(hào)執(zhí)行由第3運(yùn)算指令指定的運(yùn)算并將該運(yùn)算結(jié)果寫入指定的存儲(chǔ)地點(diǎn);第2運(yùn)算指令指定運(yùn)算指令,該指令是當(dāng)上述第3運(yùn)算指令的運(yùn)算結(jié)果具有規(guī)定值時(shí)才被執(zhí)行的;上述指令執(zhí)行部決定是否應(yīng)該參照上述規(guī)定的存儲(chǔ)地點(diǎn)執(zhí)行由上述第2運(yùn)算指令指定的運(yùn)算,以便第4時(shí)間的開始至少是在第8時(shí)間之后。
      5.權(quán)利要求1記載的數(shù)據(jù)處理裝置,其特征在于,第2運(yùn)算指令是分支指令、跳轉(zhuǎn)指令或加法指令。
      6.權(quán)利要求1記載的數(shù)據(jù)處理裝置,其特征在于,多個(gè)運(yùn)算指令的各個(gè)指令分別具有指定運(yùn)算內(nèi)容的運(yùn)算指定字段、指定該運(yùn)算的執(zhí)行條件的條件指定字段和指定使判斷該執(zhí)行條件的時(shí)序延遲的量的延遲量指定字段;第1運(yùn)算指令是無(wú)條件執(zhí)行的指令,在上述第1運(yùn)算指令的條件指定字段記述表示無(wú)條件的信息;在第2運(yùn)算指令的條件指定字段和延遲量指定字段分別記述表示規(guī)定的條件的信息和表示從第3時(shí)間的結(jié)束到第4時(shí)間的開始的時(shí)間間隔的信息;上述指令譯碼器根據(jù)上述第1運(yùn)算指令中的運(yùn)算指定字段輸出第1控制信號(hào),控制上述指令執(zhí)行部,根據(jù)上述第1運(yùn)算指令中的條件指定字段,在第2時(shí)間內(nèi)執(zhí)行由上述第1運(yùn)算指令指定的運(yùn)算;上述指令譯碼器根據(jù)上述第2運(yùn)算指令中的運(yùn)算指定字段輸出第1控制信號(hào),控制上述指令執(zhí)行部,根據(jù)上述第2運(yùn)算指令中的延遲量指定字段,在第4時(shí)間判斷是否滿足規(guī)定的條件,根據(jù)上述第2運(yùn)算指令中的條件指定字段,控制上述指令執(zhí)行部,確定是否滿足了規(guī)定的條件。
      7.權(quán)利要求1記載的數(shù)據(jù)處理裝置,其特征在于,多個(gè)運(yùn)算指令的各個(gè)指令分別具有指定運(yùn)算內(nèi)容的運(yùn)算指定字段、指定該運(yùn)算的執(zhí)行條件的條件指定字段和指定使判斷該執(zhí)行條件的時(shí)序延遲的量的延遲量指定字段;第1運(yùn)算指令是帶條件執(zhí)行的指令;在上述第1運(yùn)算指令中,上述條件指定字段和延遲量指定字段分別記述表示與第2運(yùn)算指令的規(guī)定的條件不同的另外條件的信息和表示在第1時(shí)間判斷上述另外的條件的信息;在上述第2運(yùn)算指令中,上述條件指定字段和延遲量指定字段分別記述表示規(guī)定的條件的信息和表示從第3時(shí)間的結(jié)束到第4時(shí)間的開始的時(shí)間間隔的信息;上述指令譯碼器根據(jù)上述第1運(yùn)算指令中的運(yùn)算指定字段輸出第1控制信號(hào),控制上述指令執(zhí)行部,根據(jù)上述第1運(yùn)算指令中的條件指定字段和延遲量指定字段,在上述第2時(shí)間內(nèi)執(zhí)行由上述第1運(yùn)算指令指定的運(yùn)算;上述指令譯碼器根據(jù)上述第2運(yùn)算指令中的條件指定字段和運(yùn)算指定字段輸出第1控制信號(hào),控制上述指令執(zhí)行部,根據(jù)上述第2運(yùn)算指令中的延遲量指定字段,判斷在第4時(shí)間是否滿足規(guī)定的條件,根據(jù)上述第2運(yùn)算指令中的條件指定字段控制上述指令執(zhí)行部,確定是否滿足了規(guī)定的條件。
      8.一種數(shù)據(jù)處理裝置,其特征在于,具有對(duì)程序序列中記述的編碼了的多個(gè)運(yùn)算指令順序進(jìn)行譯碼并輸出與各運(yùn)算指令對(duì)應(yīng)的控制信號(hào)的指令譯碼器和根據(jù)上述指令譯碼器輸出的上述控制信號(hào)執(zhí)行由上述多個(gè)運(yùn)算指令分別指定的運(yùn)算的指令執(zhí)行部;當(dāng)上述多個(gè)運(yùn)算指令中的1個(gè)是帶條件的運(yùn)算指令時(shí),上述指令譯碼器對(duì)上述帶條件的運(yùn)算指令進(jìn)行譯碼并輸出第1控制信號(hào);上述指令執(zhí)行部包括保存從上述指令譯碼器輸出的第1控制信號(hào)的第1寄存器、保存表示上述帶條件的運(yùn)算指令所指定的運(yùn)算被執(zhí)行的條件的第1信息的第2寄存器和保存表示開始上述條件的判斷的時(shí)間的第2信息的第3寄存器;當(dāng)根據(jù)上述第3寄存器保存的第2信息檢測(cè)出是開始上述條件判斷的時(shí)間時(shí),上述指令執(zhí)行部便作出響應(yīng),根據(jù)上述第2寄存器保存的第1信息開始判斷上述條件是否滿足,根據(jù)該判斷結(jié)果,讀出上述第1寄存器保存的第1控制信號(hào),開始根據(jù)該讀出的第1控制信號(hào)執(zhí)行上述運(yùn)算指令所指定的運(yùn)算。
      9.權(quán)利要求8記載的數(shù)據(jù)處理裝置,其特征在于,可以可變地設(shè)定保存在第3寄存器中的第2信息。
      10.權(quán)利要求8記載的數(shù)據(jù)處理裝置,其特征在于,具有程序計(jì)數(shù)器,對(duì)與多個(gè)運(yùn)算指令中的各個(gè)指令對(duì)應(yīng)添加的地址順序進(jìn)行計(jì)數(shù)并保存下來(lái);上述第3寄存器將地址值作為第2信息保存下來(lái);當(dāng)上述第3寄存器保存的地址值和上述程序計(jì)數(shù)器的地址值一致時(shí),上述指令執(zhí)行部將其檢測(cè)出來(lái)并作出響應(yīng),開始判斷上述條件是否滿足。
      11.權(quán)利要求8記載的數(shù)據(jù)處理裝置,其特征在于,指令執(zhí)行部進(jìn)而具有第4寄存器,保存表示開始進(jìn)行由運(yùn)算指令指定的運(yùn)算的時(shí)間的第3信息;當(dāng)根據(jù)該第3信息檢測(cè)出是開始進(jìn)行由上述運(yùn)算指令指定的運(yùn)算的時(shí)間時(shí),上述指令執(zhí)行部便響應(yīng)該檢測(cè)結(jié)果,判斷條件是否滿足,根據(jù)該判斷結(jié)果,開始進(jìn)行由上述運(yùn)算指令指定的運(yùn)算。
      全文摘要
      一種數(shù)據(jù)處理裝置,可提高指令調(diào)度的自由度。執(zhí)行分支運(yùn)算的PC控制部13具有保存譯碼結(jié)果的第1寄存器30、保存條件指定字段值的寄存器31和保存PC地址值的寄存器32。寄存器32保存的值和PC值一致時(shí),根據(jù)寄存器31的信息判斷執(zhí)行條件。若滿足條件,PC控制部13根據(jù)寄存器30保存的內(nèi)容運(yùn)算??墒古袛鄨?zhí)行條件的時(shí)間延遲,在該延遲時(shí)間內(nèi)進(jìn)行決定該執(zhí)行條件的運(yùn)算。因此,可將分支指令放在決定執(zhí)行條件的運(yùn)算指令前。
      文檔編號(hào)G06F9/38GK1226026SQ9811694
      公開日1999年8月18日 申請(qǐng)日期1998年8月28日 優(yōu)先權(quán)日1998年2月9日
      發(fā)明者吉田豐彥, 藤井秀至 申請(qǐng)人:三菱電機(jī)株式會(huì)社
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1