(57)【特許請求の範囲】
【請求項１】
プログラムシーケンスに記述されたコード化された複数の演算命令を順次デコードして、各演算命令に対応する制御信号を出力する命令デコーダ、および、
前記命令デコーダから出力される前記制御信号に従って、前記複数の演算命令によりそれぞれ指定された演算を実行する命令実行部を備え、
第１の期間において、前記命令デコーダが前記複数の演算命令のうちの第１の演算命令をデコードして第１の制御信号を出力し、前記第１の期間に続く第２の期間において、前記命令実行部が前記第１の制御信号に従って前記第１の演算命令で指定された演算を実行し、
第３の期間において、前記命令デコーダが、前記複数の演算命令のうちの所定の条件の基で演算が実行される第２の演算命令をデコードして第２の制御信号を出力し、前記第３の期間の終わりから前記第２の期間と同じ時間、あるいはそれより長い時間が経過した後に開始される第４の期間において、前記命令実行部が前記所定の条件を満たしているか否かを判断し、その判断結果に応じて前記第２の演算命令で指定された演算を実行する、データ処理装置。
【請求項２】
その保持される値を可変に設定できる遅延量指定レジスタを備え、
前記命令実行部は、前記遅延量指定レジスタに遅延量として保持されている値に応じて第２の演算命令が所定の条件を満たしているかの判断を開始する、請求項１に記載のデータ処理装置。
【請求項３】
コード化された第２の演算命令は、演算を指定する演算指定フィールドと、第３の期間の終わりから第４の期間の開始までの間隔を指定する遅延量指定フィールドとを有し、
遅延量指定レジスタには、前記遅延量指定フィールドに記述された内容に従って遅延量が設定される、請求項２に記載のデータ処理装置。
【請求項４】
複数の演算命令の各々に対応付けられたアドレスを順次カウントして保持するプログラムカウンタを備え、
前記遅延量指定レジスタは遅延量としてアドレス値を保持し、
前記命令実行部は、前記遅延量指定レジスタに保持されたアドレス値が前記プログラムカウンタの値と一致したことに応答して、第２の演算命令が所定の条件を満たしているかの判断を開始する、請求項２に記載のデータ処理装置。
【請求項５】
命令実行部は、第４の期間に含まれる第５の期間において、所定の条件を満たしているか否かを判断し、前記第４の期間に含まれ、且つ前記第５の期間が終了して第２の期間と同じ時間あるいはそれより長い時間が経過して開始する第６の期間に前記所定の条件を満たしたときに第２の演算命令で指定された演算を実行する、請求項１に記載のデータ処理装置。
【請求項６】
各々はその保持される値を可変に設定できる第１および第２の遅延量指定レジスタを備え、
前記命令実行部は、前記第１の遅延量指定レジスタに第１の遅延量として保持されている値に従って第２の演算命令が所定の条件を満たしているかの判断を開始し、
前記第２の遅延量指定レジスタに第２の遅延量として保持されている値に従って第２の演算命令所定の条件を満たしたときに第２の演算命令で指定された演算を開始して実行する、請求項５に記載のデータ処理装置。
【請求項７】
コード化された第２の演算命令は、演算を指定する演算指定フィールドと、第３の期間の終わりから第４の期間の開始までの時間を指定する第１の遅延量指定フィールドと、第５の期間の終わりから第６の期間の開始までの時間を指定する第２の遅延量指定フィールドとを有し、
第１の遅延量指定レジスタには、前記第１の遅延量指定フィールドに記述された内容に従って第１の遅延量が設定され、第２の遅延量指定レジスタには、前記第２の遅延量指定フィールドに記述された内容に従って第２の遅延量が設定される請求項６に記載のデータ処理装置。
【請求項８】
複数の演算命令の各々に対応付けられたアドレスを順次カウントして保持するプログラムカウンタを備え、
前記第１および第２の遅延量指定レジスタはそれぞれ第１および第２の遅延量としてアドレス値を保持し、
前記命令実行部は、前記第１の遅延量指定レジスタに保持されたアドレス値が前記プログラムカウンタの値と一致したことに応答して、所定の条件が満たされているかの判断を開始し、前記第２の遅延量指定レジスタに保持されたアドレス値が前記プログラムカウンタの値と一致したことに応答して、前記所定の条件を満たした場合に第２の演算命令で指定された演算を開始し実行する、請求項６に記載のデータ処理装置。
【請求項９】
命令デコーダは、第３の期間より後に開始される第７の期間において、複数の演算命令のうちの第３の演算命令をデコードして第３の制御信号を出力し、命令実行部は、前記第７の期間より後に開始される第８の期間において、前記第３の制御信号に従って前記第３の演算命令で指定された演算を実行してその演算結果を所定の記憶場所に書き込み、
第２の演算命令は、前記第３の演算命令の演算結果が所定の値を有している場合に実行される演算命令を指定しており、
前記命令実行部は、第４の期間の開始が少なくとも前記第８の期間の後になるように、前記所定の記憶場所を参照して前記第２の演算命令により指定される演算を実行すべきか否か決定する、請求項１に記載のデータ処理装置。
【請求項１０】
所定の記憶場所はフラグあるいはレジスタであり、
第３の演算命令は、２つのレジスタの値を比較して、その比較結果を前記所定の記憶場所に書き込む比較命令である、請求項９に記載のデータ処理装置。
【請求項１１】
第２の演算命令は、分岐命令、ジャンプ命令、あるいは加算命令である、請求項１に記載のデータ処理装置。
【請求項１２】
複数の演算命令の各々は、演算の内容を指定する演算指定フィールドと、その演算の実行条件を指定する条件指定フィールドと、その実行条件を判断するタイミングを遅延させる量を指定する遅延量指定フィールドとを有し、
第１の演算命令は無条件に実行される命令であり、前記第１の演算命令の条件指定フィールドに無条件であることを示す情報が記述され、
第２の演算命令の条件指定フィールドおよび遅延量指定フィールドに、それぞれ所定の条件を示す情報および第３の期間の終わりから第４の期間の開始までの間隔を示す情報が記述され、
前記命令デコーダは、前記第１の演算命令における演算指定フィールドに従って第１の制御信号を出力し、前記第１の演算命令における条件指定フィールドに基づき、前記命令実行部が第２の期間で前記第１の演算命令で指定された演算を実行するように前記命令実行部を制御し、
前記命令デコーダは、前記第２の演算命令における演算指定フィールドに従って第２の制御信号を出力し、前記第２の演算命令における遅延量指定フィールドに従って第４の期間で所定の条件を満たしているかを判断させるように前記命令実行部を制御し、前記第２の演算命令における条件指定フィールドに従って所定の条件を満たしたか否かを決定するように前記命令実行部を制御する、請求項１に記載のデータ処理装置。
【請求項１３】
複数の演算命令の各々は、各演算の内容を指定する演算指定フィールドと、その演算の実行条件を指定する条件指定フィールドと、その実行条件を判断するタイミングを遅延させる量を指定する遅延量指定フィールドとを有し、
第１の演算命令は条件付き命令であり、
前記第１の演算命令においては、前記条件指定フィールドおよび遅延量指定フィールドに、それぞれ第２の演算命令の所定の条件とは別の条件を示す情報、および第１の期間に前記別の条件を判断することを示す情報が記述され、
第２の演算命令において、前記条件指定フィールドおよび遅延量指定フィールドに、それぞれ所定の条件を示す情報および第３の期間の終わりから第４の期間の開始までの間隔を示す情報が記述されており、
前記命令デコーダは、前記第１の演算命令における演算指定フィールドに従って第１の制御信号を出力し、前記第１の演算命令における条件指定フィールドおよび遅延量指定フィールドに基づき、前記命令実行部が第２の期間で前記第１の演算命令で指定された演算を実行するように前記命令実行部を制御し、
前記命令デコーダは、前記第２の演算命令における条件指定フィールドおよび演算指定フィールドに従って第１の制御信号を出力し、前記第２の演算命令における遅延量指定フィールドに従って第４の期間で所定の条件を満たしているかを判断させるように前記命令実行部を制御し、前記第２の演算命令における条件指定フィールドに従って所定の条件を満たしたか否かを決定するように前記命令実行部を制御する、請求項１に記載のデータ処理装置。
【請求項１４】
プログラムシーケンスに記述されたコード化された複数の演算命令を順次デコードして、各演算命令に対応する制御信号を出力する命令デコーダ、および、
前記命令デコーダから出力される前記制御信号に従って、前記複数の演算命令によりそれぞれ指定された演算を実行する命令実行部を備え、
前記複数の演算命令のうちの１つが条件付きの演算命令である場合、
前記命令デコーダは、前記条件付きの演算命令をデコードして第１の制御信号を出力し、
前記命令実行部は、
前記命令デコーダから出力される第１の制御信号を保持させる第１のレジスタ、前記条件付き演算命令に指定される演算が実行される条件を示す第１の情報を保持させる第２のレジスタ、および、前記条件の判断を開始する時期を示す第２の情報を保持する第３のレジスタを含み、
前記命令実行部は、
前記第３のレジスタに保持された第２の情報に基づき、前記条件の判断が開始される時期であることを検出したことに応答して、前記第２のレジスタに保持された第１の情報に基づき前記条件が満たされているか否かの判断を開始し、その判断結果に応じて前記第１のレジスタに保持された第１の制御信号を読み出し、その読み出された第１の制御信号に従い前記演算命令に指定された演算の実行を開始するデータ処理装置。
【請求項１５】
第３のレジスタに保持される第２の情報を可変に設定することのできる、請求項１４に記載のデータ処理装置。
【請求項１６】
複数の演算命令の各々に対応付けられたアドレスを順次カウントして保持するプログラムカウンタを備え、
前記第３のレジスタには、第２の情報としてアドレス値が保持され、
前記命令実行部は、前記第３のレジスタに保持されたアドレス値が前記プログラムカウンタのアドレスと一致したことを検出し、その検出に応答して前記条件が満たされているか否かの判断を開始する、請求項１４に記載のデータ処理装置。
【請求項１７】
コード化された条件付き演算命令は、演算の内容を指定する演算指定フィールドと、その演算の実行条件を指定する条件指定フィールドと、その実行条件を判断する時期を指定する遅延量指定フィールドとを有し、
前記命令デコーダは、前記演算指定フィールドに記述された内容に基づいて前記第１の制御信号を生成し、前記条件指定フィールドに記述された内容を第１の情報として出力するとともに前記遅延量指定フィールドに記述された内容を出力し、
前記命令デコーダから出力された第１の情報は、前記第２のレジスタに保持され、
前記命令実行部は、前記命令デコーダから出力される前記遅延量指定フィールドに従って第２の情報を第３のレジスタに書き込む、請求項１５に記載のデータ処理装置。
【請求項１８】
命令実行部は、
さらに、演算命令で指定された演算を開始する時期を示す第３の情報を保持する第４のレジスタを有し、
この第３の情報に従って、前記演算命令で指定された演算が開始される時期であることを検出し、その検出結果に応答して条件が満たされているか否かを判断し、その判断結果に応じて前記演算命令で指定された演算を開始する、請求項１４に記載のデータ処理装置。
【請求項１９】
複数の演算命令の各々に対応付けられたアドレスを順次カウントして保持するプログラムカウンタを備え、
前記第３のレジスタには、第２の情報としてアドレス値が保持され、
前記第４のレジスタには、第３の情報として前記第２の情報とは異なるアドレス値が保持され、
前記命令実行部は、前記第３のレジスタに保持されたアドレス値が前記プログラムカウンタのアドレスと一致したことを検出し、その検出に応答して前記条件が満たされているか否かの判断を開始し、前記第４のレジスタに保持されたアドレス値が前記プログラムカウンタのアドレスと一致したことを検出し、その検出に応答して前記演算命令に指定された演算の実行を開始する、請求項１８に記載のデータ処理装置。
【請求項２０】
コード化された条件付き演算命令は、演算の内容を指定する演算指定フィールドと、その演算の実行条件を指定する条件指定フィールドと、その実行条件を判断する時期を指定する第１の遅延量指定フィールドと、その演算実行を開始する時期を指定する第２の遅延量指定フィールドを有し、
前記命令デコーダは、前記演算指定フィールドに記述された内容に基づいて前記第１の制御信号を生成し、前記条件指定フィールドに記述された内容を第１の情報として出力するとともに前記第１および第２の遅延量指定フィールドに記述された内容を出力し、
前記命令実行部は、前記命令デコーダから出力された前記第１の遅延量指定フィールドに記述された内容に従って第２の情報を第３のレジスタに書き込み、さらに前記命令デコーダから出力された前記第２の遅延量指定フィールドに記述された内容に従って第３の情報を第４のレジスタに書き込む、請求項１８に記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、プログラムシーケンスにおいて条件付き演算命令をうまくスケジューリングするためのデータ処理装置に関するものである。
【０００２】
【従来の技術】
従来、パイプラインにより複数の命令を順々に実行するマイクロプロセッサにおいて、分岐命令の実行はパイプラインを乱してプロセッサの処理効率を低下させる１つの原因となっている。この処理性能の低下を防止するために、例えば遅延スロットを用いた手法がある。
【０００３】
プログラマーが次の命令シーケンス１を作成したとする。
〈命令シーケンス１〉
（Ｉ０）  CMPEQ r10,r11
（Ｉ１）  ADD r1,r2
（Ｉ２）  BRA F0=1 H■1000
（Ｉ３）  ・・・・・・
（Ｉ４）  ・・・・・・
【０００４】
命令Ｉ０は、レジスタ10とレジスタ11とを比較して等しければフラグF0をセットする比較命令である。命令Ｉ１は、レジスタr1とレジスタr2との内容を加算してレジスタr1に書き込む加算命令である。命令Ｉ２は、フラグF0がセットされていたら、メモリの1000番地にある命令に分岐する条件分岐命令である。命令Ｉ３、Ｉ４は任意の命令で、命令Ｉ２が実行される時点ではすでにマイクロプロセッサに投入されている。命令Ｉ２の実行により分岐が発生したらパイプライン処理中の命令Ｉ３、Ｉ４は無効化される。
【０００５】
そこで、命令Ｉ１は、命令Ｉ２の分岐条件を決定する演算を行う命令ではなく、命令Ｉ２の分岐に拘わらず実行される命令であることを考慮して、次の命令シーケンス２のような命令のスケジューリングを行う。
〈命令シーケンス２〉
（Ｉ０）  CMPEQ r10,r11
（Ｉ２）  BRA F0=1 H■1000
（Ｉ１）  ADD r1,r2
（Ｉ５）  NOP
【０００６】
命令Ｉ２の実行により1000番地への分岐が決定されたとしても、すでにパイプラインに投入され、処理されている命令Ｉ１は無効にすることなく実行すればよく、命令Ｉ２の実行される時点で２つ命令がパイプラインに投入されているアーキテクチャの場合、遅延スロットは２つの命令で埋められることになる。命令シーケンス２の場合、遅延スロットは命令Ｉ１、Ｉ５により構成される。命令Ｉ５はいわゆるNOP（no operation ）命令である。命令Ｉ２により分岐が決定されると命令Ｉ５の次には分岐先の命令がフェッチされる。この命令シーケンス１から命令シーケンス２へのスケジューリングはプログラマ自身あるいはコンパイラーにより行われる。このような命令のスケジューリングに関して、“Computer Architecture: A Quantitative Approach, Morgan Kaufmann 社, 1990年”で種々の手法が提案されている。
【０００７】
【発明が解決しようとする課題】
このように、マイクロプロセッサの処理能力を最大に発揮させるために、プログラム上で命令をスケジューリングする技術は重要である。しかしながら命令の種類によってスケジューリングする上で種々の制約が存在する。上記の例によると、命令シーケンスにおいて、命令Ｉ２の条件分岐命令はその実行条件を決定する命令Ｉ０より前に置くことはできない。これは、命令Ｉ２が分岐の条件であるフラグF0の内容を参照する際、まだその条件を決定する命令Ｉ０の実行が終了できないからである。  このようにして、条件付きの分岐命令に限らず条件付きの算術演算命令も同様に命令のスケジューリングの自由度を損ねる原因となる。
【０００８】
ＶＬＩＷ（very long instruction word）タイプのマイクロプロセッサにおいては、並列に実行することのできる複数のサブ命令を１つの命令コードで表現している。このタイプではどの命令が並列に実行できるかを考慮した高度なスケジューリング技術が必要となり、条件付きの演算命令の存在により、いわゆるＮＯＰ（No Operation）命令というプログラム上意味のない命令を命令シーケンスに挿入しなければならないことが多くなる。ＮＯＰ（No Operation）命令を処理することもマイクロプロセッサの処理性能を低下させる原因でもある。
【０００９】
しかるに、本発明の技術課題は、条件付きの演算命令を処理するデータ処理装置において、自由度の高い命令のスケジューリングができる環境をプログラマに提供することである。
【００１０】
【課題を解決するための手段】
この発明によるデータ処理装置は、プログラムシーケンスに記述されたコード化された複数の演算命令を順次デコードして、各演算命令に対応する制御信号を出力する命令デコーダ、および、この命令デコーダから出力される制御信号に従って、複数の演算命令によりそれぞれ指定された演算を実行する命令実行部を備えている。第１の演算命令に関して、第１の期間でデコーダされ、これに続く第２の期間でその指定される演算が実行される。一方、所定の条件の基で演算が実行される第２の演算命令に関して、第３の期間でデコードされ、第３の期間の終わりから第２の期間と同じ時間、あるいはそれより長い時間が経過した後に開始される第４の期間において、命令実行部が所定の条件を満たしているか否かを判断し、その判断結果に応じて第２の演算命令で指定された演算を実行している。
【００１１】
データ処理装置は、さらに、保持される値を可変に設定できる遅延量指定レジスタを備えている。命令実行部は前記遅延量指定レジスタに遅延量として保持されている値に応じて第２の演算命令が所定の条件を満たしているかの判断を開始している。
【００１２】
コード化された第２の演算命令は、演算を指定する演算指定フィールドと、第３の期間の終わりから第４の期間の開始までの間隔を指定する遅延量指定フィールドとを有し、遅延量指定レジスタには、遅延量指定フィールドに記述された内容に従って遅延量が設定される。
【００１３】
データ処理装置は、さらに、複数の演算命令の各々に対応付けられたアドレスを順次カウントして保持するプログラムカウンタを備えている。遅延量指定レジスタは遅延量としてアドレス値を保持するものであり、命令実行部は、遅延量指定レジスタに保持されたアドレス値がプログラムカウンタの値と一致したことに応答して、第２の演算命令が所定の条件を満たしているかの判断を開始している。
【００１４】
命令実行部は第４の期間に含まれる第５の期間において、所定の条件を満たしているか否かを判断する。そして命令実行部は第４の期間に含まれており且つこの第５の期間の終了して第２の期間と同じ時間あるいはそれより長い時間が経過して開始する第６の期間に所定の条件を満たしたときに第２の演算命令で指定された演算を実行している。
【００１５】
データ処理装置は、各々はその保持される値を可変に設定できる第１および第２の遅延量指定レジスタを備えている。命令実行部は、第１の遅延量指定レジスタに第１の遅延量として保持されている値に従って第２の演算命令が所定の条件を満たしているかの判断を開始し、第２の遅延量指定レジスタに第２の遅延量として保持されている値に従って第２の演算命令所定の条件を満たしたときに第２の演算命令で指定された演算を開始して実行している。
【００１６】
コード化された第２の演算命令は、演算を指定する演算指定フィールドと、第３の期間の終わりから第４の期間の開始までの時間を指定する第１の遅延量指定フィールドと、第５の期間の終わりから第６の期間の開始までの時間を指定する第２の遅延量指定フィールドとを有している。第１の遅延量指定レジスタには、第１の遅延量指定フィールドに記述された内容に従って第１の遅延量が設定され、第２の遅延量指定レジスタには、第２の遅延量指定フィールドに記述された内容に従って第２の遅延量が設定される。
【００１７】
第１および第２の遅延量指定レジスタはそれぞれ第１および第２の遅延量としてアドレス値を保持している。命令実行部は第１の遅延量指定レジスタに保持されたアドレス値がプログラムカウンタの値と一致したことに応答して、所定の条件が満たされているかの判断を開始している。さらに命令実行部は、第２の遅延量指定レジスタに保持されたアドレス値がプログラムカウンタの値と一致したことに応答して、所定の条件を満たした場合に第２の演算命令で指定された演算を開始し実行している。
【００１８】
複数の演算命令のうち第３の演算命令に関し、第３の期間より後に開始される第７の期間において命令デコーダでデコードされ、前記第７の期間より後に開始される第８の期間において第３の演算命令で指定された命令実行部で演算が実行されその演算結果が所定の記憶場所に書き込まれる。このとき、第２の演算命令は、第３の演算命令の演算結果が所定の値を有している場合に実行される演算命令を指定しており、命令実行部は、第４の期間の開始が少なくとも第８の期間の後になるように、所定の記憶場所を参照して演算を実行すべきか否か決定している。
【００１９】
所定の記憶場所はフラグあるいはレジスタである。また第３の演算命令は、２つのレジスタの値を比較して、その比較結果を前記所定の記憶場所に書き込む比較命令である。さらに、第２の演算命令は、分岐命令、ジャンプ命令、あるいは加算命令である。
【００２０】
複数の演算命令の各々は、演算の内容を指定する演算指定フィールドと、その演算の実行条件を指定する条件指定フィールドと、その実行条件を判断するタイミングを遅延させる量を指定する遅延量指定フィールドとを有している。
【００２１】
第１の演算命令が無条件に実行される命令であれば、第１の演算命令の条件指定フィールに無条件であることを示す情報が記述されている。命令デコーダは、第１の演算命令における演算指定フィールドに従って第１の制御信号を出力し、条件指定フィールドに基づき、第２の期間で前記第１の演算命令で指定された演算を実行するように前記命令実行部を制御する。
【００２２】
また、第１の演算命令が条件付き演算命令であれば条件指定フィールドおよび遅延量指定フィールドに、それぞれ第２の演算命令の所定の条件とは別の条件を示す情報、および第１の期間に前記別の条件を判断することを示す情報が記述されている。命令デコーダは、第１の演算命令における演算指定フィールドに従って第１の制御信号を出力し、条件指定フィールドおよび遅延量指定フィールドに基づき、第２の期間で第１の演算命令で指定された演算を実行するように命令実行部を制御する。
命令デコーダは、第１の演算命令における条件指定フィールドおよび遅延量指定フィールドに従って条件を満たしているか否かを判断し、その判断結果に応じて第１の演算命令における演算指定フィールドに従って第１の制御信号を出力する。
【００２３】
第２の演算命令の条件指定フィールドおよび遅延量指定フィールドに、それぞれ所定の条件を示す情報および第３の期間の終わりから第４の期間の開始までの間隔を示す情報が記述されている。命令デコーダは、第２の演算命令における演算指定フィールドに従って第１の制御信号を出力し、第２の演算命令における遅延量指定フィールドに従って第４の期間で所定の条件を満たしているかを判断させるように命令実行部を制御し、第２の演算命令における条件指定フィールドに従って所定の条件を満たしたか否かを決定するように命令実行部を制御する。
【００２４】
また、この発明によるデータ処理装置は、条件付きの演算命令をデコードして第１の制御信号を出力する命令デコーダ、その第１の制御信号に従い演算を実行する命令実行部を備えている。命令実行部は第１の制御信号を保持させる第１のレジスタ、条件付き演算命令に指定される演算が実行される条件を示す第１の情報を保持させる第２のレジスタ、および、その条件の判断を開始する時期を示す第２の情報を保持する第３のレジスタを含んでいる。そして命令実行部は、第３のレジスタに保持された第２の情報に基づき、条件の判断が開始される時期であることを検出したことに応答して第２のレジスタに保持された第１の情報に基づき前記条件が満たされているか否かの判断を開始し、その判断結果に応じて第１のレジスタに保持された第１の制御信号を読み出して演算命令に指定された演算の実行を開始する。
【００２５】
第３のレジスタに保持される第２の情報を可変に設定することができる。
【００２６】
データ処理装置は、複数の演算命令の各々に対応付けられたアドレスを順次カウントして保持するプログラムカウンタを備えている。第３のレジスタには、第２の情報としてアドレス値が保持され、命令実行部は第３のレジスタに保持されたアドレス値がプログラムカウンタのアドレスと一致したことを検出し、その検出に応答して条件が満たされているか否かの判断を開始している。
【００２７】
条件付き演算命令は、演算の内容を指定する演算指定フィールドと、その演算の実行条件を指定する条件指定フィールドと、その実行条件を判断する時期を指定する遅延量指定フィールドとを有する。命令デコーダは演算指定フィールドに記述された内容に基づいて第１の制御信号を生成し、条件指定フィールドに記述された内容を第１の情報として出力するとともに遅延量指定フィールドに記述された内容を出力する。命令デコーダから出力された第１の情報は第２のレジスタに保持される。そして命令実行部は、命令デコーダから出力される遅延量指定フィールドに従って第２の情報を第３のレジスタに書き込む。
【００２８】
命令実行部は、さらに、演算命令で指定された演算を開始する時期を示す第３の情報を保持する第４のレジスタを有している。命令実行部はこの第３の情報に従って、演算命令で指定された演算が開始される時期であることを検出し、その検出結果に応答して条件が満たされているか否かを判断し、さらにその判断結果に応じて前記演算命令で指定された演算を開始する。
【００２９】
データ処理装置は、複数の演算命令の各々に対応付けられたアドレスを順次カウントして保持するプログラムカウンタを備えている。第３のレジスタには、第２の情報としてアドレス値が保持され、第４のレジスタには、第３の情報として第２の情報とは異なるアドレス値が保持されている。命令実行部は、第３のレジスタに保持されたアドレス値がプログラムカウンタのアドレスと一致したことを検出し、その検出に応答して条件が満たされているか否かの判断を開始する、さらに命令実行部は第４のレジスタに保持されたアドレス値がプログラムカウンタのアドレスと一致したことを検出し、その検出に応答して前記演算命令に指定された演算の実行を開始している。
【００３０】
コード化された条件付き演算命令は、演算の内容を指定する演算指定フィールドと、その演算の実行条件を指定する条件指定フィールドと、その実行条件を判断する時期を指定する第１の遅延量指定フィールドと、その演算実行を開始する時期を指定する第２の遅延量指定フィールドを有している。命令デコーダは、演算指定フィールドに記述された内容に基づいて第１の制御信号を生成し、条件指定フィールドに記述された内容を第１の情報として出力するとともに第１および第２の遅延量指定フィールドに記述された内容を出力する。命令実行部は、命令デコーダから出力された第１の遅延量指定フィールドに記述された内容に従って第２の情報を第３のレジスタに書き込み、さらに命令デコーダから出力された第２の遅延量指定フィールドに記述された内容に従って第３の情報を第４のレジスタに書き込む。
【００３１】
【発明の実施の形態】
以下、この発明の実施の一形態を説明する。
実施の形態１．
図１はこの発明の実施の形態１によるマイクロプロセッサの構成を示すブロック図である。このマイクロプロセッサは３２ビットの内部データバスを有する３２ビットマイクロプロセッサである。図において、２は命令ＲＡＭ６から６４ビット幅のＩＤバスを介して入力した命令コードをデコードする処理を行う命令デコードユニット（命令デコーダ）、３はアドレス計算を行うメモリユニット（命令実行部）、４は論理演算やシフト演算を行う整数演算ユニット（命令実行部）、５は３２ビット×６４ワードの汎用レジスタ、７はデータが格納されるデータＲＡＭである。
【００３２】
命令デコードユニット２において、８，９はそれぞれ命令コードをデコードするデコーダ、１０はプロセッサの状態を示すプロセッサ状態語（Processor Status Word 、以下、プロセッサ状態語をＰＳＷと呼ぶ）である。命令デコードユニット２は、さらに、デコーダ８のデコード結果とＰＳＷ１０の内容にもとづいて制御信号１１を作成し、それをメモリユニット３に与える。また、命令デコードユニット２は、デコーダ９のデコード結果とＰＳＷ１０の内容にもとづいて制御信号１２を作成し、それを整数演算ユニット４に与える。
【００３３】
メモリユニット３において、１３はジャンプや分岐を含まない命令を実行するとＰＣ値に８を加えて次に実行する命令に対するＰＣ値を算出するとともに、ジャンプや分岐を含む命令の実行時に分岐変位をＰＣ値に加算したり、演算で指定されたアドレッシングモードに応じた計算を行ってジャンプ先の命令に対するＰＣ値を計算するＰＣ制御部である。また、ＰＣ制御部１３は、計算したＰＣ値を３２ビット幅のＩＡバスを介して命令ＲＡＭ６に送り、命令ＲＡＭ６から命令コードを出力させる。１４はオペランドとなるデータのアクセスを制御するメモリ制御部である。メモリ制御部１４は、３２ビット幅のＤＡバスを介してアドレスデータをデータＲＡＭ７に転送し命令実行に必要なデータを６４ビット幅のＤＤバスを介してアクセスする。１５は汎用レジスタ５から３２ビット幅のＳ１バス、Ｓ２バス、Ｓ３バスを介して転送された最大３ワードのデータを用いて算術論理演算を行い演算結果を３２ビット幅のＤ１バスを介して汎用レジスタ５に転送するＡＬＵ、１６は汎用レジスタ５からＳ１バス、Ｓ２バス、Ｓ３バスを介して転送されたデータを用いてシフト演算を行い演算結果をＤ１バスを介して汎用レジスタ５に転送するシフタである。
【００３４】
メモリユニット３に対して、Ｓ１バス、Ｓ２バス、Ｓ３バス、Ｓ４バスを介して、３２ビット長のデータを一時に４ワード転送することが可能である。従って、例えば、第１のレジスタの内容と第２のレジスタの内容との和でアドレッシングされるメモリの領域に第３のレジスタの内容をストアするとともに、第３のレジスタの内容をストアしたアドレスに所定値を加算して得られる値でアドレッシングされるメモリの領域に第４のレジスタの内容をストアする２ワードストア命令を実現することができる。また、メモリユニット３は、Ｄ１バスおよびＤ２バスを介して、メモリユニット３内での２ワードの演算結果またはデータＲＡＭ７から転送された２ワードのデータを汎用レジスタ５に転送することができる。
【００３５】
また、ＰＣ制御部１３はレジスタ３０、３１、３２および３３、さらに１ビットを保持する記憶回路３４を含む。メモリ制御部１４はレジスタ４０、４１および４２を含む。ＡＬＵ１５はレジスタ５０、５１および５２を含む。さらにシフタ１６はレジスタ６０、６１および６２を含む。これらのレジスタに関しては後述する。
【００３６】
整数演算ユニット４において、１７は汎用レジスタ５から３２ビット幅のＳ４バス、Ｓ５バス、Ｓ６バスを介して転送された最大３ワードのデータを用いて乗算を行い演算結果を３２ビット幅のＤ２バス、Ｄ３バスを介して汎用レジスタ５に転送する乗算器、１８は乗算の結果を累積加算または累積減算して保持するアキュムレータである。アキュムレータとして、６４ビットのものが２本ある。１９は汎用レジスタ５からＳ４バス、Ｓ５バス、Ｓ６バスを介して転送された最大３ワードのデータを用いて算術論理演算を行い演算結果をＤ２バス、Ｄ３バスを介して汎用レジスタ５に転送するＡＬＵ、２０は汎用レジスタ５からＳ４バス、Ｓ５バス、Ｓ６バスを介して転送されたデータを用いてシフト演算を行い演算結果をＤ２バス、Ｄ３バスを介して汎用レジスタ５に転送するシフタである。
【００３７】
乗算器１７はレジスタ７０、７１、および７２を含む。ＡＬＵ１９はレジスタ８０、８１および８２を含む。さらにシフタ２０はレジスタ９０、９１および９２を含む。これらのレジスタに関しても後述する。
【００３８】
このマイクロプロセッサでは、汎用レジスタ５から、最大６種類のレジスタ値を読み出すことが可能であって、読み出されたデータは、それぞれ、Ｓ１バス、Ｓ２バス、Ｓ３バス、Ｓ４バス、Ｓ５バス、Ｓ６バスに出力される。また、汎用レジスタ５には、Ｄ１バス、Ｄ２バス、Ｄ３バスを介して最大３種類のレジスタ値を同時に書き込むことが可能である。
【００３９】
図２はマイクロプロセッサ１の命令フォーマットを示す説明図である。命令フォーマットとして、図２（ａ）に示すような１つの命令コードで２つの演算（operation ）を指示する２演算命令のフォーマット１０１と、図２（ｂ）に示すような１つの命令コードで１つの演算を指示する１演算命令のフォーマット１０２とがある。
２演算命令のフォーマット１０１には、フィールド１０３およびフィールド１０４からなるフォーマットフィールドと、２つの演算フィールド１０６、１０７と、演算フィールド１０６、１０７にそれぞれ付属する実行条件フィールド４０１および４０２と、さらに、実行条件フィールド４０１および４０２にそれぞれ付属する条件判定遅延量指定フィールド（以下、ＣＤフィールド）４０４、４０５とが含まれる。
１演算命令のフォーマット１０２には、フィールド１０３および１０４からなるフォーマットフィールドと、フィールド１０８、１０９および１１０からなる演算フィールドと、この演算フィールドに付属する実行条件フィールド４０３と、この実行条件フィールド４０３に付属するＣＤフィード４０６とが含まれる。
【００４０】
フォーマットフィールドは、以下のような意味を示す。
0003881763.tif 000002
ここで、ＦＭは、フィールド１０３およびフィールド１０４からなる２ビットの値である。
【００４１】
マイクロプロセッサ１の複数のパイプラインステージは、命令フェッチステージIF、命令デコードステージD/A、命令実行ステージE/M、ライトバックステージWにより構成され、各々のステージでの処理は１クロックサイクルでなされる。
図３はマイクロプロセッサ１において２演算命令１０１を処理するパイプラインステージを説明するための説明図である。命令フェッチユニットIFにおいて、２演算命令１０１がメモリＲＡＭ６から命令デコードユニット２へフェッチされる。命令デコードユニットD/Aにおいて、演算フィールド１０６に記述されたoperation_0がデコーダ８でデコードされ、演算フィールド１０７に記述されたoperation_1 がデコーダ９でデコードされる。また、operation_0、1の各オペランドアドレス、又は、operation_0、1の各々が分岐命令であれば分岐先アドレスが、命令デコードステージD/Aで算出される。命令実行ステージE/Mにおいて、制御信号11に従ってoperation_0 で指定された演算がメモリユニット３で実行され、制御信号12に従ってoperation_1 で指定された演算が整数演算ユニット４で実行される。operation_1 がロード命令、ストア命令等のメモリアクセスを伴う命令であれば、命令実行ステージE/M においてメモリユニット３によりメモリへのアクセスが行われる。ライトバックステージW において、メモリユニット３で得られた演算結果、整数演算ユニット４で得られた演算結果が、それぞれoperation_0 、1 で指定されるレジスタに書き込まれる。演算結果をプロセッサ１内のレジスタに書き込む命令を伴わない命令（分岐命令、ジャンプ命令、メモリへデータをストアするストア命令、演算結果をフラグに反映させる比較命令等）は、ライトバックステージW は存在しない。なおマイクロプロセッサによっては、ライトバックステージW が命令実行ステージE/M 同じクロックサイクルで処理されるものもある。
【００４２】
ＦＭ＝００の場合、図３（ａ）に示すようにoperation_0、1のステージIF、D/A、E/M、Wは互いに並列に行われ、operation_0、1は４クロックで処理される。
ＦＭ＝０１の場合、図３（ｂ）に示すようにoperation_0のステージIF、D/A、E/M、Wは４クロックを要して連続的に行われる。operation_0、1のステージIF、D/Aは互いに並列に行われる一方、operation_1のステージE/M、Wは、operation_0より１クロック遅れて行われる。operation_1のステージE/Mがoperation_0のステージWと並列に行われる。よってoperation_1は５クロックで処理される。
ＦＭ＝０１の場合、図３（ｃ）に示すようにoperation_1のステージIF、D/A、E/M、Wは４クロックを要して連続的に行われる。operation_0、1のステージIF、D/Aは互いに並列に行われる一方、operation_0のステージE/M、Wは、operation_1より１クロック遅れて行われる。operation_0のステージE/Mがoperation_1のステージWと並列に行われる。よってoperation_1は５クロックで処理される。
【００４３】
また、図２（ｂ）に示すフォーマットによる１演算命令１０２もまた、命令フェッチステージIF、命令デコードステージD/A、命令実行ステージE/M、ライトバックステージW においてそれぞれ１クロックサイクルでもって処理される。ステージIFにおいて、１演算命令１０２が命令ＲＡＭ６から命令デコードユニット２へフェッチされる。ステージD/A において、１演算命令１０２がデコーダ８、９の各々に入力される。１演算命令１０２で指定される演算の種類に応じて、デコーダ８、９のいずれか一方が１演算命令１０２をデコードする。デコーダ８がデコードしたならば制御信号１１を出力し、デコーダ９がデコードしたならば制御信号１２を出力する。ステージE/M において、制御信号１１（または１２）に従ってメモリユニット３（又は整数演算ユニット４）が、１演算命令１０２で指定された演算を実行する。ステージWにおいて、ステージE/Mで得られた演算結果が、１演算命令１０２で指定されたレジスタに書き込まれる。
【００４４】
次いで、実行条件コードについて説明する。実行条件フィールド４０１、４０２、４０３の各々は、以下のような意味を持つ。
コード：  実行条件
ＣＣ＝０００：  常時
００１：  Ｆ０＝真    かつ  Ｆ１＝無視
０１０：  Ｆ０＝偽    かつ  Ｆ１＝無視
０１１：  Ｆ０＝無視  かつ  Ｆ１＝真
１００：  Ｆ０＝無視  かつ  Ｆ１＝偽
１０１：  Ｆ０＝真    かつ  Ｆ１＝真
１１０：  Ｆ０＝真    かつ  Ｆ１＝偽
１１１：  予約済
【００４５】
実行条件フィールド４０１〜４０３の各々は、その付属する演算命令の実行条件を指定するもので、マイクロプロセッサの実行コントロールフラグＦ０，Ｆ１の値に応じて、演算フィールド１０６、１０７のoperation_0の演算やoperation_１ の演算、およびフィールド１０８、１０９、１１０からなる演算フィールドの演算が有効であるか無効であるか定める。実行コントロールフラグＦ０，Ｆ１については後で説明するようにプロセッサステータスワード（ＰＳＷ）１０内にある。演算が有効であるとは、演算結果がレジスタ、メモリおよびフラグに反映され、その演算による動作の結果が残ることを意味する。一方演算が無効であるとは、演算命令がデコードされたがその指定された演算が実行されないこと、または演算されてもその演算結果がレジスタ、メモリおよびフラグに反映されず、あたかも無効演算（ＮＯＰ）が実行されたかのような動作の結果が残ることを意味する。
【００４６】
実行条件フィールドの値ＣＣ＝０００のときには、実行コントロールフラグＦ０、Ｆ１の値にかかわらず常に演算は有効である。ＣＣ＝００１のときには、実行コントロールフラグＦ０＝真のときにのみ演算は有効である。実行コントロールフラグＦ１の状態はいずれでもよい。ＣＣ＝０１０のときには、実行コントロールフラグＦ０＝偽のときにのみ演算は有効である。実行コントロールフラグＦ１の状態はいずれでもよい。ＣＣ＝０１１のときには、実行コントロールフラグＦ１＝真のときにのみ演算は有効である。実行コントロールフラグＦ０の状態はいずれでもよい。ＣＣ＝１００のときには、実行コントロールフラグＦ１＝偽のときにのみ演算は有効である。実行コントロールフラグＦ０の状態はいずれでもよい。ＣＣ＝１０１のときには、実行コントロールフラグＦ０＝真かつＦ１＝真のときにのみ演算は有効である。ＣＣ＝１１０のときには、実行コントロールフラグＦ０＝真かつＦ１＝偽のときにのみ演算は有効である。ＣＣ＝１１１のときの動作は未定義であり、ユーザはＣＣ＝１１１となる命令を用いることはできない。
【００４７】
図４は演算フィールドの詳細な内容を示す説明図である。
フォーマット１１１〜１１７は、それぞれ２８ビットで表現される短型の演算フィールド１０６または演算フィールド１０７によるものである。フォーマット１１８は、フィールド１０８，１０９，１１０で構成される長型の演算フィールドによるものである。
【００４８】
フォーマット１１１（Ｓｈｏｒｔ＿Ｍ）は、演算内容を指定するフィールド１２０、レジスタ番号を指定する２つのフィールド１２１，１２２、レジスタ番号または６ビット長の即値を指定するフィールド１２３、およびフィールド１２３がレジスタ番号を示すのか即値を示すのかを指定するフィールド１２４で構成される。図３に示すように、フィールド１２４の値Ｘが「００」、「０１」または「１１」であるときにはフィールド１２３がレジスタ番号を示していることを示し、「１０」であるときには即値を示していることを示す。
このフォーマット１１１は、レジスタ間接アドレッシングのメモリアクセス演算に用いられる。
【００４９】
フォーマット１１２（Ｓｈｏｒｔ＿Ａ）は、演算内容を指定するフィールド１２０、レジスタ番号を指定する２つのフィールド１２１，１２２、レジスタ番号または６ビット長の即値を指定するフィールド１２３、およびフィールド１２３がレジスタ番号を示すのか即値を示すのかを指定するフィールド１２５で構成される。図３に示すように、フィールド１２５の値Ｘ’が「０」であるときにはフィールド１２３がレジスタ番号を示していることを示し、「１」であるときには即値を示していることを示す。
このフォーマット１１２は、算術演算、論理演算、シフト演算およびビット演算に用いられる。
【００５０】
フォーマット１１３（Ｓｈｏｒｔ＿Ｂ１）は、演算内容を指定するフィールド１２０およびレジスタ番号を指定するフィールド１２６で構成される。このフォーマット１１３は、レジスタ指定によるジャンプ命令および分岐命令に用いられる。
フォーマット１１４（Ｓｈｏｒｔ＿Ｂ２）は、演算内容を指定するフィールド１２０および１８ビット長のディスプレイスメントのフィールド１２７で構成される。このフォーマット１１４は、ジャンプ命令および分岐命令に用いられる。
【００５１】
フォーマット１１５（Ｓｈｏｒｔ＿Ｂ３）は、演算内容を指定するフィールド１２０、レジスタ番号を指定するフィールド１２１、レジスタ番号または１２ビット長の即値を指定するフィールド１２８、フィールド１２８がレジスタ番号を示すのか即値を示すのかを指定するフィールド１２９、およびゼロ判定にもとづいてフィールド１２１にもとづく条件ジャンプまたは条件分岐を行うか否か指定するフィールド１３０で構成される。
このフォーマット１１５は、条件ジャンプ命令および条件分岐命令に使用される。
【００５２】
フォーマット１１６（Ｓｈｏｒｔ＿Ｄ１）は、演算内容を指定するフィールド１２０、レジスタ番号を指定するフィールド１２１、レジスタ番号または１２ビット長の即値を指定するフィールド１２８、フィールド１２８がレジスタ番号を示すのか即値を示すのかを指定するフィールド１２９で構成される。
このフォーマット１１６は、条件ジャンプ命令、条件分岐命令およびリピート命令に使用される。
フォーマット１１７（Ｓｈｏｒｔ＿Ｄ２）は、演算内容を指定するフィールド１２０、レジスタ番号または１２ビット長の即値を指定するフィールド１２８、フィールド１２８がレジスタ番号を示すのか即値を示すのかを指定するフィールド１２９、遅延命令（ディレイド命令）に関するフィールド１３１で構成される。
このフォーマット１１７は、ディレイドジャンプ命令、ディレイド分岐命令およびリピート命令に使用される。
【００５３】
フォーマット１１８（Ｌｏｎｇ）は、演算内容を指定するフィールド１２０、レジスタ番号を指定する２つのフィールド１２１，１２２、３２ビット長の即値を指定するフィールド１３２で構成される。
このフォーマット１１８は、複雑な算術演算、大きな即値を用いる算術演算、大きなディスプレイスメント付きレジスタ間接アドレッシングのメモリアクセス演算、大きな変位の分岐演算および絶対番地へのジャンプ命令などに使用される。
【００５４】
図５はマイクロプロセッサのレジスタ構成を示す説明図である。
このマイクロプロセッサは、図５（ａ）に示すような６４本の３２ビット長の汎用レジスタ５、図５（ｂ）に示すような１２本の制御レジスタ１５０、および図５（ｃ）に示すような２本のアキュムレータ１８を持つ。Ｒ０の汎用レジスタ１４０の内容は常に０であり、そこへの書き込みは無視される。Ｒ６２の汎用レジスタは、サブルーチンからの戻り先アドレスが設定されるリンクレジスタである。Ｒ６３の汎用レジスタは、スタックポインタであり、ＰＳＷ１０のＳＭフィールドの値に応じてユーザスタックポインタ（ＳＰＵ）または割り込みスタックポインタ（ＳＰＩ）として動作する。制御レジスタ１５０には、プログラムカウンタ１５１、ＰＳＷ１０、および各種の専用レジスタが含まれる。
図４に示すフォーマット１１２による演算では、６４本の汎用レジスタ５のそれぞれを上位１６ビットと下位１６ビットとに分けてアクセスできる。また、２本のアキュムレータ１８を、上位３２ビットと下位３２ビットとに分けて別々にアクセスできる。
【００５５】
図６はＰＳＷ１０の詳細内容を示す説明図である。
ＰＳＷ１０の上位１６ビットには、スタックポインタを切り替えるためのＳＭフィールド１７１、セルフデバッグトラップ（ＳＤＢＴ）の検出を示すＥＡフィールド１７２、ＳＤＢＴの許可を指定するＤＢフィールド１７３、割り込み許可を指定するＩＥフィールド１７４、リピート動作の許可を指定するＲＰフィールド１７５、モジュロアドレッシングの許可を指定するＭＤフィールド１７６がある。下位１６ビットはフラグフィールド１８０である。フラグフィールド１８０には８個のフラグがあり、その中のＦ０フラグ１８１およびＦ１フラグ１８２は演算の有効／無効を指定する。各フラグの値は比較演算や算術演算の結果に応じて変化する。また、フラグ初期化演算で初期化したり、フラグ値書き込み演算で任意の値をフラグフィールド１８０に書き込むことによって変化する。フラグフィールド１８０の内容は、フラグ値読み出し演算によって読み出される。
【００５６】
各フラグは、以下のような意味を有する。
ＳＭ＝０    ：スタックモード０→ＳＰＩを使用
ＳＭ＝１    ：スタックモード１→ＳＰＵを使用
ＥＡ＝０    ：ＳＤＢＴを未検出
ＥＡ＝１    ：ＳＤＢＴを検出
ＤＢ＝０    ：ＳＤＢＴを非許可
ＤＢ＝１    ：ＳＤＢＴを許可
ＩＥ＝０    ：割り込み非許可
ＩＥ＝１    ：割り込み許可
ＲＰ＝０    ：リピートブロック無効
ＲＰ＝１    ：リピートブロック有効
ＭＤ＝０    ：モジュロアドレッシング無効
ＭＤ＝１    ：モジュロアドレッシング有効
Ｆ０        ：汎用フラグ（実行コントロールフラグ）
Ｆ１        ：汎用フラグ（実行コントロールフラグ）
Ｆ２        ：汎用フラグ
Ｆ３        ：汎用フラグ
Ｆ４（Ｓ）  ：飽和演算フラグ
Ｆ５（Ｖ）  ：オーバーフローフラグ
Ｆ６（ＶＡ）：累積オーバーフローフラグ
Ｆ７（Ｃ）  ：キャリー／ボローフラグ
【００５７】
以下、このマイクロプロセッサの命令一覧を示す。
0003881763.tif 000003
0003881763.tif 000004
【００５８】
0003881763.tif 000005
【００５９】
0003881763.tif 000006
【００６０】
0003881763.tif 000007
【００６１】
0003881763.tif 000008
【００６２】
0003881763.tif 000009
【００６３】
0003881763.tif 000010
【００６４】
0003881763.tif 000011
【００６５】
0003881763.tif 000012
0003881763.tif 000013
【００６６】
0003881763.tif 000014
【００６７】
0003881763.tif 000015
【００６８】
0003881763.tif 000016
【００６９】
次に、図２の命令フォーマット内のＣＤレジスタについて説明する。ＣＤフィールド４０４は、対応している演算フィールド１０６で指定されたoperation_0 のパイプラインでの処理において、対応している実行条件フィールド４０１で指定される実行条件を判定する時期を遅延させる遅延量を指定するもので、ユーザがＣＤフィールド４０４の値を適宜設定することによりその遅延量を可変に設定することができる。
【００７０】
具体的にＣＤフィールド４０４には、演算フィールド１０６の記述された命令フォーマット１０１が格納されているメモリアドレスＸからのオフセット値ａが即値として記述される。この場合、operation_0 の処理において実行条件フィールド４０１に記述された実行条件が判断される時期は、マイクロプロセッサ１のＰＣ値が（Ｘ＋ａ）番地を保持しているクロックサイクルとなる。オフセット値ａはゼロであってもよい。その場合実行条件が判断される時期は、ＰＣの値がＸ番地を保持しているクロックサイクルとなる。さらに、ＣＤフィールド４０４には、アドレス値を保持するプロセッサ１内のレジスタの番号を指定する情報を記述することもできる。その場合、実行条件フィールド４０１に記述された実行条件が判断される時期は、マイクロプロセッサ１のＰＣ値がその指定されたレジスタに保持されたアドレスであるクロックサイクルとなる。ＣＤフィールド４０４に即値が記述してあるかレジスタ番号が記述してあるかを識別するビットが同じＣＤフィールド４０４にある。
但し、実行条件フォールド４０１がＣＣ＝０００の無条件実行を示している場合、対応するoperation_0 の実行処理においてＣＤフィールド４０４の値は命令デコードユニット２や各ユニット３、４で無視される。
【００７１】
ＣＤフィールド４０５は、演算フィールド１０７及び条件実行フィールド４０２に対して、ＣＤフィールド４０４と同一である。また、ＣＤフィールド４０６も、フィールド１０８〜１１０の演算及び条件実行フィールド４０３に対して、ＣＤフィールド４０４と同一である。
【００７２】
図１に示されたメモリユニット３内の各レジスタについて説明する。
ＰＣ制御部１３のレジスタ３０、メモリ制御部１４のレジスタ４０、ＡＬＵ１５のレジスタ５０、及びシフタ１６のレジスタ６０の各々は、演算フィールド１０６で指定されるoperation_0 がデコードされて得られる制御信号１１をそのまま保持する。
【００７３】
ＰＣ制御部１３のレジスタ３１、メモリ制御部１４のレジスタ４１、ＡＬＵ１５のレジスタ５１、及びシフタ１６のレジスタ６１の各々は、operation_0 の演算が実行される条件を指定する情報を保持する。本実施の形態の場合には、命令フォーマット１０１内の条件実行フィールド４０１のＣＣ値がそのまま保持される。
【００７４】
ＰＣ制御部１３のレジスタ３２、メモリ制御部１４のレジスタ４２、ＡＬＵ１５のレジスタ５２、及びシフタ１６のレジスタ６２の各々は、operation_0 の演算の実行条件を判断する時期の情報を保持する。実際にはoperation_0 の演算の実行条件を判断するときのＰＣ値（アドレス値）が保持される。例えばＰＣ制御部１３がオフセット値を有するＣＤフィールド４０４に基づいて、そのレジスタ３２に保持されるべきアドレス値を生成する。ＰＣ制御部１３は命令デコードユニット２からＣＤフィールド４０４のオフセット値を受け取り、operation_0 の記述された命令フォーマット１０１のアドレスにそのオフセット値を加算し、その加算値をレジスタ３２にセットする。ＣＤフィールド４０４がレジスタ番号を指定している場合には、ＰＣ制御部１３は命令デコードユニットからそのレジスタ番号を受け取ったそのままレジスタ３２にセットする。レジスタ３２の保持するレジスタ番号で特定されるレジスタには、operation_0 の演算の実行条件を判断するときのＰＣ値（アドレス値）を保持されている。なお、レジスタ３２にＰＣ値が保持されているかレジスタ番号が保持されているかを識別するビットがレジスタ３２に設けられている。メモリ制御部１４、ＡＬＵ１５及びシフタ１６は、ＰＣ制御部１３と同様の方法により、ＰＣ値あるいはレジスタ番号を生成してそれぞれレジスタ４２、５２および６２へセットする。
【００７５】
ＰＣ制御部１３は、演算フィールド１０６で指定されるoperation_0 が、上記（Ａ−９）にあるような分岐命令である場合に命令実行部の演算ユニットとして動作するものであり、operation_0 が分岐命令であればレジスタ３０〜３２が上述のように機能し、他のレジスタ４０〜４２、５０〜５２、６０〜６２は使用されない。
またメモリ制御部１４は、演算フィールド１０６で指定されるoperation_0 が、上記（Ａ−１）のロード／ストア命令ようなメモリアクセス命令である場合に命令実行部の演算ユニットとして動作するものであり、operation_0 がメモリアクセス命令であればレジスタ４０〜４２が上述のように機能し、他のレジスタは使用されない。
またＡＬＵ１５は、演算フィールド１０６で指定されるoperation_0 が、上記（Ａ−５）にあるような算術演算命令、又は（Ａ−６）にあるような論理演算命令である場合に命令実行部の演算ユニットとして動作するものであり、operation_0 が算術演算命令あるいは論理演算命令であればレジスタ４０〜４２が上述のように機能し、他のレジスタは使用されない。
さらに、シフタ１６は、演算フィールド１０６で指定されるoperation_0 が、上記（Ａ−７）にあるようなシフト演算命令である場合に命令実行部の演算ユニットとして動作するものであり、operation_0 がシフト演算命令であればレジスタ４０〜４２が上述のように機能し、他のレジスタは使用されない。
【００７６】
ＰＣ制御部１３内のレジスタ３３、及び記憶回路３４は、operation_0 が特にディレイド分岐命令およびディレイドジャンプ命令である場合に使用されるものである。
図７はディレイド分岐命令の基本的なフォーマット３２０を示す説明図である。基本的には、ディレイド分岐命令のフォーマット３２０は、オペコード３２１、分岐を実行する時期を遅延させるための遅延量を指定する実行遅延量指定フィールド３２２および分岐先アドレスを指定するためのオフセットまたはアドレスが指定される分岐先指定フィールド３２３を持つ。ディレイド分岐命令は、例えば、図４に示すフォーマット１１６（Ｓｈｏｒｔ＿Ｄ１）、フォーマット１１７（Ｓｈｏｒｔ＿Ｄ２）またはフォーマット１１８（Ｌｏｎｇ）で実現される。フォーマット１１６（Ｓｈｏｒｔ＿Ｄ１）は、遅延量としてレジスタ設定値が用いられる場合に使用される。フォーマット１１７（Ｓｈｏｒｔ＿Ｄ２）は、遅延量として即値が用いられる場合に使用される。フォーマット１１８（Ｌｏｎｇ）は、分岐先アドレスを３２ビット即値で指定する場合に使用される。各フォーマットにおいて、オペコードはフィールド１２０で指定される。また、フィールド１２９は、フィールド１２８がレジスタ番号を示すのか即値を示すのかを指定するために使用される。フィールド１２１は、ＤＢＲＡ，ＤＢＳＲ，ＤＪＭＰ，ＤＪＳＲの各命令において遅延量がレジスタで指定されるときのレジスタ指定領域として使用され、フィールド１３１は、遅延量を指定する即値の領域として使用される。
【００７７】
ディレイドジャンプ命令も図７に示すフォーマットで記述される。但し、フィールド３２３では、ジャンプ先のアドレスを保持しているレジスタのレジスタ番号が指定されている。
【００７８】
本実施の形態の場合、フィールド１３１に即値として記述された遅延量はディレイド分岐（あるいはジャンプ）命令の記述されている２演算命令１０１のアドレスＸからのオフセット値ｂである。よってユーザは実行遅延量指定フィールド３２２の値を適宜設定することによりその遅延量は可変とすることができる。ただし分岐の実行される時期がＣＤフィールド４０４により決定される分岐の条件を判断する時期より前にならないように、ユーザは実行遅延量指定フィールド３２２あるいはＣＤフィールド４０４を設定しなければならない。
【００７９】
ＰＣ制御部１３に備えられたレジスタ３３は、ディレイド分岐（あるいはジャンプ）命令で指定される分岐を実行する時期の情報を保持する。実際には分岐を実行するときのＰＣ値（アドレス値）が保持される。ＰＣ制御部１３がオフセット値を有するフィールド３２２に基づいて、そのレジスタ３３に保持されるべきアドレス値を生成する。ＰＣ制御部１３は命令デコードユニット２からフィールド３２２のオフセット値を受け取り、ディレイド分岐（あるいはジャンプ）命令の記述された命令フォーマット１０１のアドレスにそのオフセット値を加算し、その加算値をレジスタ３３にセットする。フォーマット３２２がレジスタ番号を指定している場合には、ＰＣ制御部１３は命令デコードユニットからそのレジスタ番号を受け取ったそのままレジスタ３３にセットする。レジスタ３３の保持するレジスタ番号で特定されるレジスタには、分岐を実行するときのＰＣ値（アドレス値）を保持されている。
【００８０】
またＰＣ制御部１３の記憶回路３４は、ＰＣ制御部１３がディレイド分岐（あるいはジャンプ）命令の実行条件を判断した結果、実行条件を満たしたか満たしていないかを示す情報を保持するものである。
【００８１】
なお、レジスタ３０に保持されている制御信号１１には、その制御信号１１に対する命令が、ディレイド分岐命令であるかディレイなしの通常の分岐命令であるかを識別する１ビットの情報を含んでいる。
【００８２】
さらに、図１に示された整数演算ユニット４内の各レジスタについて説明する。乗算器１７のレジスタ７０、ＡＬＵ１９のレジスタ８０、及びシフタ２０のレジスタ９０の各々は、演算フィールド１０６で指定されるoperation_1 がデコードされて得られる制御信号１２をそのまま保持する。
【００８３】
乗算器１７のレジスタ７１、ＡＬＵ１９のレジスタ８１、及びシフタ２０のレジスタ９１の各々は、operation_1 の演算が実行される条件を指定する情報を保持する。本実施の形態の場合には、命令フォーマット１０１内の条件実行フィールド４０２のＣＣ値がそのまま保持される。
【００８４】
乗算器１７のレジスタ７２、ＡＬＵ１９のレジスタ８２、及びシフタ２０のレジスタ９２の各々は、operation_1 の演算の実行条件を判断する時期の情報を保持する。ＣＤフィールド４０５がオフセット値であれば、operation_1 の演算の実行条件を判断するときのＰＣ値（アドレス値）として各レジスタに保持される。その保持されるべきＰＣ値はoperation_1 の記述された命令フォーマット１０１のアドレスとそのオフセット値との加算値である。またＣＤフィールド４０５がレジスタ番号を指定しているならば、そのレジスタ番号がそのまま保持される。レジスタ７２の保持するレジスタ番号で特定されるレジスタには、operation_0 の演算の実行条件を判断するときのＰＣ値（アドレス値）を保持されている。レジスタ７２、８２及び９２への値のセットは、ＣＤフィールド４０５を命令デコードユニットから受け取るＣＤフィールド４０５に従い、それぞれ乗算器１７、ＡＬＵ１９及びシフタ２０により行われる。
【００８５】
乗算器１７は、演算フィールド１０７で指定されるoperation_1 が上記（Ｂ−１）にあるように乗算を伴う乗算命令および積和命令である場合に命令実行部の演算ユニットとして動作するものであり、operation_1 が乗算を伴う命令であればレジスタ７０〜７２が上述のように機能し、他のレジスタ８０〜８２、９０〜９２は使用されない。
またＡＬＵ１９は、演算フィールド１０７で指定されるoperation_1 が、上記（Ａ−５）にあるような算術演算命令、又は（Ａ−６）にあるような論理演算命令である場合に命令実行部の演算ユニットとして動作するものであり、operation_1 が算術演算命令あるいは論理演算命令であればレジスタ８０〜８２が上述のように機能し、他のレジスタは使用されない。
さらに、シフタ２０は、演算フィールド１０７で指定されるoperation_1 が、上記（Ａ−７）にあるようなシフト演算命令である場合に命令実行部の演算ユニットとして動作するものであり、operation_1 がシフト演算命令であればレジスタ４０〜４２が上述のように機能し、他のレジスタは使用されない。
【００８６】
図２（ｂ）に示す命令フォーマット１０２による１演算命令が処理される場合には、分岐、メモリアクセス、算術演算等の種類によって、ＰＣ制御部１３、メモリ制御部１４、ＡＬＵ１５、１９、シフタ１６、２０及び乗算器１７のうちの１つが命令実行部の演算ユニットとして演算命令を実行する。ＣＤフィールド４０６は、同様に１演算命令のパイプラインでの処理において、実行条件フィールド４０３で指定される実行条件を判定する時期を遅延させる遅延量を指定する。そして１演算命令１０２を実行する命令実行部の演算ユニットに備えられたレジスタは、その１演算命令１０２について上述したものと同じ内容の値を保持する。
【００８７】
次に、図８に示されたプログラム例を用いてマイクロプロセッサ１の動作を説明する。このプログラムにおいて、各行における２つのサブ命令が、図２（ａ）の命令フォーマットの２演算命令１０１で記述され、サブ命令Ｉ０１、Ｉ１１、Ｉ２１、Ｉ３１、Ｉ４１、Ｉ５１及びＩ６１がoperation_0 として演算フィールド１０６で記述され、サブ命令Ｉ０２、Ｉ１２、Ｉ２２、Ｉ３２、Ｉ４２、Ｉ５２及びＩ６２がoperation_1 として演算フィールド１０７で記述されている。それぞれの２演算命令は、同じ行に記述されたメモリのアドレス番地によりアクセスされる。例えば、サブ命令Ｉ０１、Ｉ０２は１０００〜１００７番地のメモリの領域に格納され、１０００番地のアドレスでアクセスされる。
【００８８】
サブ命令Ｉ０１は、「フラグＦ０が偽（つまりフラグが０を保持している）」という分岐条件を満たしていれば、ｌｏｏｐの記述されたサブ命令Ｉ１１、Ｉ１２に分岐する分岐命令ＢＲＡで、この分岐条件をｅｎｄの記述されたサブ命令Ｉ４１、Ｉ４２の実行時に判断することのできる。また分岐命令ＢＲＡはディレイなしの通常の分岐命令である。サブ命令Ｉ２１は、レジスタＲ２とレジスタＲ３とのそれぞれ内容を加算してレジスタＲ２に格納する加算命令ＡＤＤである。サブ命令Ｉ３１は、レジスタＲ２とレジスタＲ４との内容が等しければフラグＦ０に“１”を書き込み、等しくなければ“０”を書き込む比較命令ＣＭＰＥＱである。サブ命令Ｉ１１、Ｉ４１、Ｉ５１、Ｉ６１は、メモリユニット３でステージE/M の処理がなされる任意の算術演算命令で、その他のサブ命令は整数演算ユニット４でステージE/Mの処理がなされる任意の算術演算命令である。
【００８９】
サブ命令Ｉ０１に対応する実行条件フィールド４０１には、“ＣＣ＝０１０”が記述されており、サブ命令Ｉ０１以外のすべてのサブ命令は無条件に実行する命令であるとし、その対応の実行条件フィールドには“ＣＣ＝０００”が記述されている。
また、サブ命令Ｉ０１に対応するＣＤフィールド４０４にはオフセット値’２０’が記述されている。
また、各行に記述された２演算命令は、ＦＭフィールド１０３、１０４が００に設定されて２つのサブ命令の演算を並列に実行する命令であるとする。
【００９０】
図８のプログラムにおいて、１００８番地、１０１０番地、１０１８番地、１０２０番地の４つの２演算命令で１つのループが形成されており、このプログラムはサブ命令Ｉ３１の比較命令の実行にフラグＦ０が真になるまでこのループ内の４つの２演算命令が繰り返して順次実行されることを意味している。
【００９１】
図９は、図８に示されたプログラムをパイプライン処理するマイクロプロセッサ１の動作を示している。図においてクロックｔ１ないしｔ１３は連続する１クロックサイクルを示し、各クロックサイクル内のすべてのパイプラインステージの処理は並列に行われる。例えば、クロックｔ５において、サブ命令Ｉ１１、Ｉ１２の各ステージW、サブ命令Ｉ２１、Ｉ２２の各ステージE/M、サブ命令Ｉ３１、Ｉ３２の各ステージD/A 、サブ命令Ｉ４１、Ｉ４２の各ステージIFは、すべて並列に処理される。他のクロックサイクルに関しても同様である。
【００９２】
図９において、マイクロプロセッサ１のＰＣが保持するアドレス値は、そのアドレス値を有するクロックサイクルが、そのアドレス値によりアクセスされる２演算命令が命令デコードステージD/A で処理されるサイクルの次サイクルであることを示す。
【００９３】
サブ命令Ｉ０１、Ｉ０２に関し、命令フェッチステージIF、命令デコードステージD/A はそれぞれクロックｔ１、ｔ２で並列に処理される。サブ命令Ｉ０２の命令実行ステージE/M及びライトバックステージWはそれぞれクロックｔ３、ｔ４で処理される一方、サブ命令Ｉ０１の命令実行ステージE/M は許可されるまで実行条件の判断、およびそれに基づく分岐の実行はなされない。
【００９４】
サブ命令Ｉ０１である分岐命令ＢＲＡの条件指定フィールド４０１とＣＤフィールド４０４とに従って、命令デコードユニット２はサブ命令Ｉ０１が実行条件の判断を遅延させる命令であることを検出し、この条件指定フィールドとＣＤフィールドの内容が実行条件を遅延して判断するための制御信号としてＰＣ制御部１３へ出力される。また演算指定フィールドがデコーダ８でデコードされて、このデコード結果に応じた制御信号１１が出力される。この制御信号１１には、分岐命令ＢＲＡを生じさせるようにＰＣ制御部１３を制御するための第１の情報、サブ命令Ｉ０１が実行の遅延を生じさせない通常の命令であることを示す第２の情報、さらに分岐命令ＢＲＡの分岐先アドレスを示す第３の情報を含んでいる。この第３の情報は分岐先アドレスそのものであり、分岐命令ＢＲＡのフィールド３２３で指定されたオフセットに基づき命令デコードステージE/A でアドレス計算専用の加算器（図示していない）で計算されたものである。
【００９５】
クロックｔ３において、ＰＣ制御部１３は、命令デコードユニット２からサブ命令Ｉ０１が条件付きの命令であり、その条件を判断する時期を遅延させる命令であることの情報を受けて分岐命令ＢＲＡに対する制御信号１１をレジスタ３０にそのまま保持する。まだ制御信号１１に基づいて分岐は実行されない。命令デコードユニット２から出力された実行条件フィールドであるｃｃ＝０１０の値がレジスタ３１にそのまま保持される。さらにＰＣ制御部１３は、クロックｔ３において命令デコードユニット２からＣＤフィールドであるオフセット値“２０”を、ＰＣから１０００番地をそれぞれ受け取って加算し、レジスタ３２がその加算結果である１０２０番地を保持する。ＰＣ制御部１３はレジスタ３２に保持された値とＰＣの示す値とを比較している。ＰＣのアドレス値がレジスタ３２のアドレス値と等しいクロックサイクル、つまりクロックｔ７でレジスタ３１に保持されたｃｃ値に基づきＰＣ制御部１３が分岐命令ＢＲＡの実行条件を初めて判断する。
【００９６】
一方サブ命令Ｉ０２に関し、命令デコードユニット２のデコーダ９が演算指定フィールド１０７を解析して、ＡＬＵ１８に算術演算を行わせるための制御信号１２が出力される。そして命令デコードユニット２はこのサブ命令Ｉ０２が条件指定フィールドに基づきサブ命令Ｉ０２が無条件命令であることを検知し無条件（ｃｃ＝０００）であることを示す情報も出力する。ＡＬＵ１８は無条件であることを示す情報を受けて、制御信号１２をレジスタ８０に保持することなく制御信号１２に従って加算演算を行う。また命令デコードユニット２からサブ命令Ｉ０１における実行条件フィールド４０２の値及びＣＤフィールド４０５の値が出力されるが、ＡＬＵ１８はこれらの値を無視してレジスタ８１、８２にはそれまで保持していた値をそのまま保持させる。以下に示す他の無条件実行のサブ命令についても同様である。
【００９７】
サブ命令Ｉ１１、Ｉ１２に関し、命令フェッチステージIF、命令デコードステージD/A、命令実行ステージE/M及びライトバックステージW は、それぞれクロックｔ２、ｔ３、ｔ４、ｔ５で並列に処理される。
【００９８】
サブ命令Ｉ２１、Ｉ２２に関し、命令フェッチステージIF、命令デコードステージD/A、命令実行ステージE/M及びライトバックステージW は、それぞれクロックｔ３、ｔ４、ｔ５、ｔ６で並列に処理される。サブ命令Ｉ２１である加算命令ＡＤＤにおいては、クロックｔ５のステージE/M でレジスタＲ５とレジスタＲ６との内容がＡＬＵ１５により加算演算され、クロックｔ６のステージW でその加算結果がレジスタＲ５に書き込まれる。
【００９９】
サブ命令Ｉ３１、Ｉ３２に関し、命令フェッチステージIF、命令デコードステージD/A、命令実行ステージE/Mは、それぞれクロックｔ４、ｔ５、ｔ６で並列に処理される。サブ命令Ｉ３１である比較命令ＣＭＰＥＱにおいては、クロックｔ６のステージE/M で、レジスタＲ２とレジスタＲ４との内容がＡＬＵ１５により比較され、等しければフラグＦ０に‘１’を書き込み、等しくなければフラグＦ０に‘０’を書き込む。比較命令ＣＭＰＥＱの実行ステージE/M は、本来加算命令ＡＤＤによる演算結果がレジスタＲ５に書き込まれるクロックｔ６まで開始できないが、プロセッサ１内部に設けられたバイパス回路によってクロックｔ５で得られる加算命令ＡＤＤの演算結果を用いて処理される。なお、比較命令ＣＭＰＥＱの場合、ライトバックステージWは存在しない。一方サブ命令Ｉ３２のライトバックステージWはクロックｔ７で処理される。
【０１００】
サブ命令Ｉ４１、Ｉ４２に関し、命令フェッチステージIF、命令デコードステージD/A、命令実行ステージE/M及びライトバックステージW は、それぞれクロックｔ５、ｔ６、ｔ７、ｔ８で並列に処理される。
【０１０１】
分岐命令ＢＲＡの分岐条件は、サブ命令Ｉ３１の演算結果を参照しなければならないためクロックｔ７で判定される。クロックｔ７において、ＰＣ制御部１３はレジスタ３１に保持された‘０１０’の値に従ってフラグＦ０を参照し、フラグＦ０が‘０’ならば分岐を発生させることを決定し、‘１’ならば分岐を発生させないことを決定する。
【０１０２】
ＰＣ制御部１３はレジスタ３０に保持されている制御信号１１の第２の情報が分岐命令ＢＲＡがディレイなしの分岐命令であることを示していることに従い、レジスタ３３の内容を無視する。つまり、ＰＣ制御１３において、分岐条件が決定されたことに従い、同じクロックｔ７で命令実行ステージE/M が処理される。命令Ｉ４１は算術演算命令であり、ＰＣ制御部１３ではなくＡＬＵ１５で命令実行ステージE/Mの処理がなされているので、サブ命令Ｉ０１、Ｉ４１のステージE/Mは並列に行える。
【０１０３】
図９に示されたマイクロプロセッサ１の動作において、比較命令ＣＭＰＥＱでフラグＦ０に‘０’が書き込まれとすると、ＰＣ制御部１３が実行条件を満たしたことを示す情報（例えば‘１’の論理値）を生成することにより条件判断が完了され、その情報に応答してレジスタ３０に保持された制御信号１１に基づき分岐が実行される。具体的には、制御信号１１の第３の情報に従いＰＣ制御部１３は分岐先アドレス（この場合１００８番地）をＩＡバスを介して命令ＲＡＭ６へ出力するとともに、その分岐先アドレスを次クロックサイクルでＰＣへセットする。さらに制御信号１１の第１の情報に従い、ＰＣ制御部１３は分岐先アドレス１００８に格納されている２演算命令（サブ命令Ｉ１１、Ｉ２１）を命令デコードユニット２へ与えるように命令ＲＡＭ６を制御する。ＰＣ制御部１３はこの第１の情報に従い、クロックｔ７ですでにステージIF、E/A が処理されているサブ命令Ｉ５１、Ｉ５２、及びすでにステージIFの処理がされているサブ命令Ｉ６１、Ｉ６２のパイプラインの処理をキャンセルするように命令デコードユニット２、メモリユニット３および整数演算ユニット４を制御する。但し、クロックｔ７でステージE/M の処理がなされたサブ命令Ｉ４１、Ｉ４２のライトバックステージWは、キャンセルされずに処理される。
【０１０４】
命令デコードユニット２は、命令ＲＡＭ６から出力された１００８番地にあるサブ命令Ｉ１１、Ｉ１２の２演算命令を受け取り、クロックｔ８で命令フェッチステージIFが処理されたことになる。サブ命令Ｉ１１、Ｉ１２の命令デコードステージD/A、命令実行ステージE/M、ライトバックステージW がそれぞれクロックｔ９、ｔ１０、ｔ１１で処理される。ＰＣは、１００８番地の２演算命令における命令実行ステージE/M が処理されるクロックｔ１０まで１００８番地をそのまま保持し、クロックｔ１０以降８ずつカウントする。
【０１０５】
サブ命令Ｉ１１、Ｉ１２の２演算命令に続き、１０１０番地、１０１８番地、１０２０番地のそれぞれ２演算命令は１クロックずつ遅れて順にパイプラインにて処理される。そしてＰＣ制御部１３のレジスタ３０、３１、３２は、クロックｔ３で保持した値をそのまま保持しているので、ＰＣが１０２０番地を保持するクロックｔ１３において、レジスタ３０、３１、３２の内容に基づき、ＰＣ制御１３がフラグＦ０を参照して「フラグＦ０の値が‘０’である」という同じ実行条件を再び判断して分岐命令ＢＲＡの分岐を実行する。図示していないが実行条件は、クロックｔ１２において得られるサブ命令Ｉ３１の実行結果であるフラグＦ０の更新で決定される。
【０１０６】
クロックｔ７において、分岐命令ＢＲＡの実行条件を満たされていないと判断された場合には、ＰＣ制御部１３において実行条件を満たしていないことを示す情報（例えば、‘０’の論理値）が生成され、その情報に応答してレジスタ３０に保持された制御信号１１を参照することなく分岐は実行されない。サブ命令Ｉ５１、Ｉ５２の２演算命令、サブ命令Ｉ６１、Ｉ６２の２演算命令のそれぞれパイプラインステージの処理がキャンセルされることなく引き続き行われる。また、レジスタ３０、３１、３２に保持されている内容は、次の条件付き分岐命令により更新されるまでそのまま残しておいてもよいし、すべてリセットしてもよい。
【０１０７】
また、分岐命令ＢＲＡに対するＣＤフィールド４０４のオフセット値がゼロであれば、ＰＣ値が分岐命令自身のアドレスである１０００番地を示すクロックｔ３で実行条件が判断され、分岐が実行される。
【０１０８】
また、図１０のプログラム例を用いてマイクロプロセッサ１の別の動作を説明する。
図８と同じく、各行における２つのサブ命令が、図２（ａ）の命令フォーマットの２演算命令１０１で記述され、サブ命令Ｉ０１、Ｉ１１、Ｉ２１、Ｉ３１、Ｉ４１、Ｉ５１及びＩ６１がoperation_0 として演算フィールド１０６で記述され、サブ命令Ｉ０２、Ｉ１２、Ｉ２２、Ｉ３２、Ｉ４１、Ｉ５１及びＩ６１がoperation_1として演算フィールド１０７で記述されている。
【０１０９】
サブ命令Ｉ０１は、「フラグＦ０が真（‘１’を保持している）」という実行条件を満たしていれば、レジスタＲ５に保持されているアドレス番地の命令にジャンプするジャンプ命令ＤＪＭＰであり、ジャンプ命令ＤＪＭＰは、図７に示されたフォーマットのディレイドジャンプ命令である。サブ命令Ｉ１１は、レジスタＲ１とレジスタＲ２との内容を加算して加算結果をレジスタＲ１へ書き込む加算命令ＡＤＤである。サブ命令Ｉ２１は、レジスタＲ１とレジスタＲ３との内容を比較し、等しければフラグＦ０に‘１’を書き込み、等しくなければフラグＦ０に‘０’を書き込む比較命令ＣＭＰＥＱである。サブ命令Ｉ３１は、レジスタＲ５とレジスタＲ６との内容を加算して加算結果をレジスタＲ５に書き込む加算命令ＡＤＤである。サブ命令Ｉ７１、Ｉ４１、Ｉ５１、Ｉ６１は、メモリユニット３でステージE/M の処理がなされる任意の算術演算命令で、その他のサブ命令は整数演算ユニット４でステージE/M の処理がなされる任意の算術演算命令である。
【０１１０】
サブ命令Ｉ０１に対応する実行条件フィールド４０１には、“ＣＣ＝００１”が記述されており、サブ命令Ｉ０１以外のすべてのサブ命令は無条件に実行する命令であるとする。また、サブ命令Ｉ０１に対応するＣＤフィールド４０４にはオフセット値“１８”が記述されている。さらに、サブ命令Ｉ０１の実行遅延量指定フィールド３２２（図７）には即値としてオフセット値‘２８’が記述されている。また、各行に記述された２演算命令は、ＦＭフィールド１０３、１０４が００に設定されて２つのサブ命令の演算を並列に実行する命令であるとする。
【０１１１】
図１０のプログラムにおいて、サブ命令Ｉ０１のジャンプ命令ＤＪＭＰによるジャンプは、サブ命令Ｉ２１の比較結果であるフラグＦ０の値を判断して実行され、且つそのジャンプ先命令のアドレスはサブ命令Ｉ３１の加算結果で決定される。そして、ジャンプ命令ＤＪＭＰによりジャンプするしないに拘わらず１０２０番地、１０２８番地の２演算命令は実行されるものである。
【０１１２】
図１１は、図１０に示されたプログラムをパイプライン処理するマイクロプロセッサ１の動作を示している。図９と同じく、クロックｔ１ないしｔ１３は連続する１クロックサイクルを示し、各クロックサイクル内のすべてのパイプラインステージの処理は並列に行われる。ＰＣの値の意味も図９と同じである。
【０１１３】
サブ命令Ｉ０１、Ｉ０２に関し、命令フェッチステージIF、命令デコードステージD/A はそれぞれクロックｔ１、ｔ２で並列に処理される。サブ命令Ｉ０２の命令実行ステージE/M及びライトバックステージWはそれぞれクロックｔ３、ｔ４で処理される一方、サブ命令Ｉ０１の命令実行ステージE/M は許可されるまで実行条件の判断、およびそれに基づく分岐の実行はなされない。
【０１１４】
サブ命令Ｉ０１であるディレイドジャンプ命令ＤＪＭＰは図１におけるデコーダ８でデコードされて、このデコード結果に応じた制御信号１１が出力される。この制御信号１１には、ジャンプ命令ＤＪＭＰを生じさせるようにＰＣ制御部１３を制御するための第１の情報、サブ命令Ｉ０１が実行の遅延を生じさせる命令であることを示す第２の情報、さらに分岐命令ＢＲＡの分岐先アドレスを示す第３の情報を含んでいる。第３の情報はジャンプ命令ＤＪＭＰで指定されているレジスタ番号である。
【０１１５】
クロックｔ３において、ＰＣ制御部１３はジャンプ命令ＤＪＭＰに対する制御信号１１をレジスタ３０にそのまま保持し、その制御信号１１に基づき分岐を実行しない。命令デコードユニット２から出力されたジャンプ命令ＤＪＭＰの実行条件フィールドであるｃｃ＝００１の値がレジスタ３１にそのまま保持される。さらにＰＣ制御部１３は、クロックｔ３において命令デコードユニット２からジャンプ命令ＤＪＭＰのＣＤフィールド４０４のオフセット値“１８”を、ＰＣから１０００番地をそれぞれ受け取って加算し、レジスタ３２がその加算結果である１０１８番地を保持する。ＰＣ制御部１３はレジスタ３２に保持された値とＰＣの示す値とを比較している。ＰＣのアドレス値がレジスタ３２のアドレス値と等しいクロックサイクル、つまりクロックｔ６でレジスタ３１に保持されたｃｃ値に基づきＰＣ制御部１３が分岐命令ＢＲＡの実行条件を初めて判断する。
【０１１６】
さらにＰＣ制御部１３は、クロックｔ３において命令デコードユニット２からジャンプ命令ＤＪＭＰの実行遅延量指定フィールド３２２のオフセット値“２８”を、ＰＣから１０００番地をそれぞれ受け取って加算し、レジスタ３３がその加算結果である１０２８番地を保持する。ＰＣ制御部１３はレジスタ３３に保持された値とＰＣの示す値とを比較している。ＰＣのアドレス値がレジスタ３３のアドレス値と等しいクロックサイクル、つまりクロックｔ８でジャンプ命令ＤＪＭＰによるジャンプが初めて実行される。
【０１１７】
サブ命令Ｉ１１、Ｉ１２に関し、命令フェッチステージIF、命令デコードステージD/A、命令実行ステージE/M及びライトバックステージW は、それぞれクロックｔ２、ｔ３、ｔ４、ｔ５で並列に処理される。サブ命令Ｉ１１の加算命令ＡＤＤにあっては、ステージE/M でレジスタＲ１とレジスタＲ２との内容がＡＬＵ１５により加算され、ステージW でその加算結果がレジスタＲ１に書き込まれる。
【０１１８】
サブ命令Ｉ２１、Ｉ２２に関し、命令フェッチステージIF、命令デコードステージD/A、命令実行ステージE/Mは、それぞれクロックｔ３、ｔ４、ｔ５で並列に処理される。サブ命令Ｉ２１である比較命令ＣＭＰＥＱにおいては、クロックｔ５の実行ステージE/M で、レジスタＲ１とレジスタＲ３との内容がＡＬＵ１５により比較され、等しければフラグＦ０に‘１’を書き込み、等しくなければフラグＦ０に‘０’を書き込む。なお、比較命令ＣＭＰＥＱの場合、ライトバックステージWは存在しない。一方サブ命令Ｉ３２のライトバックステージWはクロックｔ７で処理される。
【０１１９】
ジャンプ命令ＤＪＭＰの実行条件はサブ命令Ｉ２１の演算結果であるフラグＦ０を参照しなければならないためクロックｔ６で判定される。クロックｔ６において、ＰＣ制御部１３はレジスタ３１に保持された‘００１’の値に従ってフラグＦ０を参照し、フラグＦ０が‘１’ならば分岐を発生させることを決定し、’０’ならば分岐を発生させないことを決定する。そしてクロックｔ６で記憶回路３４に分岐を発生させるか否かを決定した１ビットの情報をセットする。しかし実際にジャンプ命令によるジャンプはクロックｔ８になるまで実行されない。
【０１２０】
ここで、比較命令ＣＭＰＥＱによりフラグＦ０に‘１’が書き込まれ、実行条件が満たされた場合を考える。
記憶回路３４には実行条件が満たされたという情報である‘１’がセットされる。レジスタ３０に保持されている制御信号１１のジャンプ命令ＤＪＭＰがディレイのあるジャンプ命令であることを示している第２の情報に従い、ＰＣ制御部１３はレジスタ３３に保持されているアドレス値がまだＰＣの値と一致しているかどうかをチェックする。実行条件を満たしていると決定したとしてもクロックｔ６の段階ではまだ一致していないため、レジスタ３０に保持されている制御信号１１の第１および第３の情報に従ってＰＣ制御１３は分岐を実行しない。
【０１２１】
サブ命令Ｉ３１、Ｉ３２に関し、命令フェッチステージIF、命令デコードステージD/A、命令実行ステージE/M及びライトバックステージW は、それぞれクロックｔ４、ｔ５、ｔ６、ｔ７で並列に処理される。サブ命令Ｉ３１の加算命令ＡＤＤにあっては、ステージE/M でレジスタＲ５とレジスタＲ６との内容がＡＬＵ１５により加算され、ステージW でその加算結果がレジスタＲ５に書き込まれる。
【０１２２】
サブ命令Ｉ４１、Ｉ４２に関し、命令フェッチステージIF、命令デコードステージD/A、命令実行ステージE/M及びライトバックステージW は、それぞれクロックｔ５、ｔ６、ｔ７、ｔ８で並列に処理される。また、サブ命令Ｉ５１、Ｉ５２に関し、命令フェッチステージIF、命令デコードステージD/A 、命令実行ステージE/M及びライトバックステージWは、それぞれクロックｔ６、ｔ７、ｔ８、ｔ９で並列に処理される。
【０１２３】
ジャンプ命令ＤＪＭＰによるジャンプはサブ命令Ｉ３１の演算結果であるレジスタＲ５を参照しなければならないためクロックｔ８で実行される。クロックｔ８においてＰＣ制御部１３はレジスタ３３に保持されているアドレス値がＰＣの値と一致していることを検知する。そして記憶回路３４に‘１’が保持されていることに従って、ＰＣ制御部１３はクロックｔ８でジャンプ命令ＤＪＭＰの命令実行ステージE/M を処理する。ＰＣ制御部１３はレジスタ３０に保持された制御信号１１に基づいて分岐を発生させる。命令Ｉ５１は算術演算命令であり、ＰＣ制御部１３ではなくＡＬＵ１５で命令実行ステージE/M の処理がなされているので、サブ命令Ｉ０１、Ｉ５１のステージE/Mは並列に行える。
【０１２４】
具体的には、制御信号１１の第３の情報に従い、ＰＣ制御部１３は第３の情報で指定されているレジスタに保持されている分岐先アドレス（例えば２０００番地とする）をＩＡバスを介して命令ＲＡＭ６へ出力するとともに、その分岐先アドレスを次クロックサイクルでＰＣへセットする。さらに制御信号１１の第１の情報に従い、ＰＣ制御部１３は分岐先アドレス２０００に格納されている２演算命令を命令デコードユニット２へ与えるように命令ＲＡＭ６を制御する。さらに、ＰＣ制御部１３はこの第１の情報に従いクロックｔ８ですでにステージIF、E/A が処理されているサブ命令Ｉ６１、Ｉ６２、及びすでにステージIFの処理がされているサブ命令Ｉ７１、Ｉ７２のパイプラインの処理をキャンセルするように命令デコードユニット２、メモリユニット３および整数演算ユニット４を制御する。但し、クロックｔ８でステージE/M の処理がなされたサブ命令Ｉ５１、Ｉ５２のライトバックステージWは、キャンセルされずに処理される。
【０１２５】
命令デコードユニット２は、命令ＲＡＭ６から出力された２０００番地にある２演算命令を受け取り、クロックｔ９でその２演算命令のそれぞれ命令フェッチステージIFが処理され、１クロックサイクル毎にステージD/A、E/M、W が順に処理される。
【０１２６】
また、クロックｔ６でジャンプ命令の実行条件が満たされていない場合は、クロックｔ６で記憶回路３４にジャンプ命令の実行条件が満たされていないという情報である‘０’が保持される。そして、クロックｔ８でレジスタ３３に保持されたアドレス値がＰＣの値と等しくなったとしても、記憶回路３４に‘０’が保持されていることに従い、ＰＣ制御部１３はレジスタ３０の保持された制御信号１１を参照することなく分岐を生じさせない。サブ命令Ｉ６１、Ｉ６２の２演算命令、サブ命令Ｉ７１、Ｉ７２の２演算命令のそれぞれパイプラインステージの処理がキャンセルされることなく引き続き行われる。また、レジスタ３０、３１、３２、３３及び記憶回路３４に保持されている内容は、次の条件付き分岐命令により更新されるまでそのまま残してもよいし、すべてリセットしてもよい。
【０１２７】
また別の方法として、クロックｔ６で条件を判断し、条件を満たしていないことを示す情報に従い、レジスタ３０に保持された制御信号１１を、ジャンプを無効にする、つまりジャンプを実行しないようにＰＣ制御１３が制御される制御信号に書き換えるようにしてもよい。そして、条件を満たしているを示す情報が生成されれば、レジスタ３０の制御信号１１はそのまま保持されるようにする。そうすると、クロックｔ８で実際にジャンプを実行する際に参照する記憶回路３４を設けなくてよい。
【０１２８】
無論、ディレイドジャンプ命令ＤＪＭＰ（あるいはディレイド分岐命令ＤＢＲＡ）は実行遅延量指定フィールド３２２の値を変えて、実行条件を判断するクロックサイクルと同じサイクルで分岐を実行させることもできる。
【０１２９】
このように実行条件を判断する時期を遅延させるのは、条件付きの分岐あるいはジャンプ命令に限るものではない。ＣＤフォーマット４０４〜４０６により、２演算命令１０１の２つの任意のサブ命令、及び任意の１演算命令１０２の実行処理において、条件指定フィールド４０１〜４０３で指定された実行条件の判断する時期を遅延させることができる。それは、ＰＣ制御部１３のレジスタ３０〜３２と同じ構成、機能を有するそれぞれメモリ制御部１４のレジスタ４０〜４２、ＡＬＵ１５のレジスタ５０〜５２、シフタ１６のレジスタ６０〜６２、乗算器１７のレジスタ７０〜７２、ＡＬＵ１９のレジスタ８０〜８２、及びシフタ２０のレジスタ９０〜９２により実現される。
【０１３０】
例えば、図８のプログラムにおいて、サブ命令Ｉ１２が
I12 (ADD F1T R13 R8,R8,R9)・・・・（Ａ）
であるとする。つまり「フラグＦ１が真である」という実行条件を満たすときレジスタＲ８とレジスタＲ９との内容を加算し、その加算結果をレジスタＲ８に書き込む加算命令で、実行条件の判断は、ＰＣ値がレジスタＲ１３に保持されたアドレス値となるクロックサイクルで行われる。条件指定フィールド４０２はｃｃ＝０１１、ＣＤフィールド４０５はレジスタ番号‘１３’がそれぞれ記述されている。レジスタ１３には１０１８番地が保持されているものとする。
【０１３１】
図９において、サブ命令Ｉ１２の命令実行ステージE/M はクロックｔ４で処理されているが、サブ命令Ｉ１２が上記（Ａ）のような加算命令であれば、命令実行ステージE/Mはクロックｔ６される。
【０１３２】
サブ命令Ｉ１２は、クロックｔ３でデコーダ９でデコードされ、このデコード結果に応じた制御信号１２が出力される。この制御信号１２には、加算命令を生じさせるようにＡＬＵ１９を制御するための第１の情報、演算に使用されるレジスタＲ８、Ｒ９を指定する第２の情報を含んでいる。
【０１３３】
クロックｔ４において、ＡＬＵ１９はその制御信号１２をレジスタ８０にそのまま保持するだけで、まだ加算を実行しない。命令デコードユニット２から出力された実行条件フィールドであるｃｃ＝０１１の値がレジスタ８１にそのまま保持される。さらにＡＬＵ１９は、クロックｔ４において命令デコードユニット２からＣＤフィールドであるレジスタ番号‘１３’をそのまま保持する。ＡＬＵ１９はレジスタ８２に保持された番号‘１３’のレジスタに保持さされた値とＰＣの示す値とを比較している。ＰＣのアドレス値が１０１８番地と等しいクロックサイクル、つまりクロックｔ６でレジスタ８１に保持されたｃｃ値に基づきＡＬＵ１９が加算命令の実行条件を初めて判断する。ＡＬＵ１９は実行条件を満たしたかどうか示す情報を生成する。
【０１３４】
ＡＬＵ１９は、その情報に従って、条件を満たしていればレジスタ８０に保持された制御信号１２に基づいて同じクロックｔ６で加算演算を行い、クロックｔ７で加算結果を指定された汎用レジスタ５に保持させる。また条件を満たしていなければ、制御信号１２を無視して加算演算を行わない。
また、条件を満たしていない場合の別の手段として、ＡＬＵ１９が制御信号１２に基づき加算演算を行ってもよいが、実行条件を満たしたかどうか示す情報に従い加算結果を加算演算命令で指定されたレジスタへ書き込まないようにＡＬＵ１９を構成してもよい。
【０１３５】
（Ａ）の加算命令の実行条件であるフラグＦ１の値を決定する演算命令（２つの値を比較して、等不等あるいは大小をフラグＦ１に反映させる比較命令）は、プログラムシーケンス中のサブ命令Ｉ１２より下位のアドレスにある命令、例えば、サブ命令Ｉ２２の位置に置くことができる。
【０１３６】
また、ＣＤフィールド４０４、４０５及び４０６の各々において、オフセット値の情報又はレジスタを指定する情報以外に、各実行条件指定フィールドで指定された実行条件が、各演算フィールドに記述された演算命令の命令デコードステージD/Aで判断されることを示す情報を記述することができる。
【０１３７】
例えば図８において、サブ命令Ｉ０１の分岐命令ＢＲＡに対応するＣＤフィールド４０４が命令デコードステージD/A で判断されることを示す情報を有している場合、命令デコードユニット２は、クロックｔ２において、ＣＤフィールド４０４に応答して実行条件の判断を開始し、条件指定フィールド４０１に従いＰＳＷ１０内の指定されたフラグＦ０の内容を参照する。そして命令デコードユニット２はサブ命令Ｉ０１が実行条件が満たされたか否かを示す第４の情報を出力する。また命令デコードユニット２はデコーダ８による分岐命令ＢＲＡの演算指定フィールドのデコード結果に基づき制御信号１１を作成する。この制御信号１１には分岐命令ＢＲＡを生じさせるようにＰＣ制御部１３を制御するための第１の情報、分岐実行の遅延を生じさせない通常の命令であることを示す第２の情報、さらに分岐命令ＢＲＡの分岐先アドレスを示す第３の情報を含んでいる。
【０１３８】
実行条件が満たしていると判断された場合には、命令デコードユニット２は第４の情報として実行条件が満たさている情報、つまり、ＰＣ制御部１３で無条件で実行してよいことを示す情報を出力する。ＰＣ制御部１３は無条件であることを示す情報を受けて、制御信号１１をレジスタ３０に保持することなくクロックｔ３で制御信号１１に従って分岐を行う。
実行条件が満たされていないと判断された場合には、命令デコードユニット２が第４の情報として、演算が無効であることを示す情報を出力する。ＰＣ制御部１３は、演算が無効であることを示す情報に従い制御信号１１を受けていても分岐を実行しない。
分岐命令以外の他の種類の演算命令についても全く同様である。ただし、加算などの算術演算命令では、命令デコードステージD/A で演算が無効と判断された場合には、演算ユニットが算術演算を実行しても演算命令で指定されたレジスタに演算結果を書き込まないようにしてもよい。
【０１３９】
また、図１に示されたこのマイクロプロセッサ１に、ディレイ機能を有する分岐命令ＤＢＲＡやジャンプ命令ＤＪＭＰの命令が用意されないならば、ＰＣ制御部１３にレジスタ３３及び記憶回路３４を設ける必要はない。
【０１４０】
また、演算命令の命令実行部の演算ユニットとなるＰＣ制御部１３、メモリ制御部１４、ＡＬＵ１５、１９、シフタ１６、２０、及び乗算器１７の各々に実行条件を判断する時期を遅延させる手段であるレジスタを備えたが、これらの命令実行部の演算ユニットのうちの選択された一部にだけ備えても良い。
例えば、所定の条件の下で実行されるような演算命令のうち、ユーザの作成するプログラムで最もよく使用されるのは、条件付き分岐（あるいはジャンプ）命令である。従って、分岐命令のみの処理において、実行条件を判断する時期を遅延させる機能を持たせても良い。そうすると、ＰＣ制御部１３のみにレジスタ３０、３１、３２を備えればよい。
【０１４１】
以上のように、この実施の形態には次の特徴がある。
（１）例えば、図８のサブ命令Ｉ３１ような無条件実行の演算命令、あるいは条件ありでもそのデコードステージで条件が決定している演算命令であれば、クロックｔ５の期間で命令をデコードし、クロックｔ５の期間に続くクロックｙ６の期間で上記の条件付き演算命令の遅延量以内であるクロックｔ６の期間でサブ命令Ｉ３１で指定された演算が実行されている。一方、サブ命令Ｉ０１のような条件付き演算命令はクロックｔ２の期間でデコードされ、クロックｔ２からサブ命令Ｉ３１のように命令実行ステージE/M の処理期間であるクロックｔ６の時間より少なくとも長い期間が経過した後のクロックｔ７で分岐の演算の実行条件の判断を開始している。つまり、このクロックｔ３からクロックｔ６までの期間を遅延量として実行条件を判断する時期を遅延させている。従って、図８のプログラムシーケンスのように、条件付きの演算命令はその演算命令の実行条件を決める演算を行う演算命令（サブ命令Ｉ３１）より前に置くことができる。従来のプロセッサならば、サブ命令Ｉ０１の位置にＮＯＰ命令以外置くことができない可能性があるが、本実施の形態のプロセッサを採用すれば、サブ命令Ｉ０１として条件付きの演算命令を置くことができ、命令のスケジューリングを柔軟にする。
【０１４２】
（２）例えば各演算ユニットのレジスタ３２、４２等で保持される演算の実行条件を判断する時期を示す遅延量を可変に設定することができる。これにより、例えばサブ命令Ｉ０１において実行条件は、クロックｔ４をはじめ、種々のクロックサイクルで判断されるようになる。よって、命令をスケジューリングする際、プログラムの内容に応じて条件付き演算命令の位置を適宜変えることができる。特に、レジスタ３２、４３等に保持される値は、プログラムを構成する命令フォーマットのＣＤフィールド４０３、４０４。４０５に記述された内容に従い設定されるため、プログラマー（あるいはコンパイラ）は、その条件付き演算命令に対応させてどの程度の遅延量を要するのかを容易に決めることができる。
【０１４３】
（３）レジスタ３２、４２等で保持される遅延量としての情報は、種々の形式が考えられる。遅延量としてクロック数を保持しておいてもよい。そのときレジスタ３２、４２等を減算カウンタとして構成する。例えばＰＣ制御部１３において、クロックｔ３でクロック数「４」をレジスタ３２に保持し、カウンタによりクロック数とともに減算し、「０」を保持したクロックｔ７で条件の判断を開始するようにすればよい。しかし、この実施の形態では、演算の実行条件を判断する時期を示す遅延量としてアドレス値が保持され、そのアドレス値プログラムカウンタの値と等しいクロックサイクルで実行条件を判断するようにしている。つまり、遅延量をＰＣの値で管理しているためより効果的である。例えば図８のプログラムにおいて１００８番地と１０２０番地との間で他の命令にジャンプし、復帰する場合でもレジスタ値３２、４２等の値を変更して実行判断する時期を調整する必要がなく制御が簡単になる。上記のクロック数を保持したならば他の命令にジャンプする時点の減算値を退避させるなどの措置を要する。
【０１４４】
（４）条件付きのディレイド分岐、あるいはジャンプ命令であれば、図１１のようにクロックｔ６で分岐の条件を判断し、１クロックサイクルあるいはそれ以上のクロックサイクルを経過した後に開始するクロックｔ８で分岐を実行している。もし、サブ命令Ｉ４１、Ｉ４２がクロックｔ７でジャンプ命令ＤＪＭＰの実行条件を決定するフラグＦ０を書き換える命令であるならば、サブ命令Ｉ０１として実行条件の判断と同じクロックサイクルでジャンプを実行してしまうディレイなしのジャンプ命令が用いることができる。よって、本実施の形態のような条件付きのディレイド演算命令は、プログラムにおける命令スケジューリングをさらに柔軟にするものである。
【０１４５】
（５）各演算ユニット、例えばＰＣ制御部１３は第１の演算命令の演算を実行するようにＰＣ制御部１３を制御するための制御信号１１、第１の演算命令の実行条件を示す第１の情報である条件指定フィールドの値、さらに、この実行条件を判断する時期を示す第２の情報であるアドレス値（あるいはそのアドレス値を保持するレジスタを指定する情報）をそれぞれレジスタ３０、３１、３２に保持する。そして、これらレジスタの値は、第１の演算命令の後に命令デコーダ２でデコードされる第２の条件付き演算命令において、条件判断の時期を遅延させるために書き換えるまでそのまま保持し続ける。これは、図８のプログラムで条件付き演算命令により形成されるループ処理に効果的である。最初にレジスタ３０、３１、３２に各情報を一旦保持させておけば、ループが発生する毎にそのレジスタ３０、３１、３２に保持された情報を用いるだけで、条件付き演算命令が実行される。従来技術ならば、ループが生じる毎に条件付き演算命令を命令ＲＡＭからフェッチしてデコーダでデコードしなければならないが、本実施の形態によるとサブ命令Ｉ０１の演算命令を１回だけフェッチし、デコーダすればよい。従ってマイクロプロセッサの処理効率を挙げることができる。
【０１４６】
（６）本実施の形態では、マイクロプロセッサが処理するすべての命令は図２のフォーマットであり、そこには演算を指定するフィールドに対応して条件指定フィールドが設けられ、さらにこの条件指定フィールドに対応して条件判断遅延量指定フィールドが設けられている。条件指定フィールドは無条件で実行されることを指定することもできる。つまり、命令フォーマット中に条件付きか否かを示す情報、条件付きであればどのような条件か、その条件を判断する時期を示す情報を挿入する場所が確保されているので、プログラマー（あるいはコンパイラ）は容易に命令を構成することができる。
【０１４７】
（７）条件判断遅延量指定フィールドにおいて、条件を判断する時期として命令デコーユニット２により命令のデコード段階で判断することを指定することもできる。命令の条件を満たせば命令実行部はその命令を無条件に実行される命令であるとして演算を行う。これも命令のスケジューリングに融通性を与える。
【０１４８】
（８）さらに次の変形例が考えられる。
条件付き演算命令の処理で条件を決定する際に参照された値はフラグＦ０であったが、これに限らず複数のビットを保持するレジスタの値であってもよい。
この実施例のマイクロプロセッサはＶＬＩＷアーキテクチャを採用して複数のパイプラインを並列に処理するものであるが、この条件付き演算命令で条件判断の時期を遅延させる機能は、単一のパイプラインを処理するプロセッサに設けても有効である。
【０１４９】
（９）条件判断の時期を遅延させる手段である３つのレジスタを１セットにして各演算ユニットに設けているが、さらに各演算ユニットにこれら３つのレジスタと同じ機能をもつ３つのレジスタのセットを１又は複数個設けてもよい。これは、図８のプログラムで形成されたループの中に、さらに１又は複数のループが存在している場合に効果的である
【０１５０】
例えば、
100番地：I01(BRA F0F #H30 110)
108番地：I11(BRA F1T #H18 118)
110番地：I21
118番地：I31
120番地：I41
128番地：I51
130番地：I61
というプログラムを考える。命令Ｉ０１は、フラグＦ０が偽ならば１１０番地に分岐する分岐命令で、実行条件が１３０番地の命令Ｉ６１の命令実行ステージのサイクルで判断されて分岐が実行されるものである。命令Ｉ１１は、フラグＦ１が真ならば１１８番地に分岐する分岐命令で、実行条件が１２０番地の命令Ｉ４１の命令実行ステージで判断されて分岐が実行される物である。このプログラムは、１１０番地から１３０番地で第１のループが形成され、かつ１１８番地から１２０番地で第２のループが形成されている。
【０１５１】
命令Ｉ０１がデコードされた場合、ＰＣ制御部１３のレジスタ３０〜３２に命令Ｉ０１の分岐命令に対する制御信号１１、条件を指定する情報、条件判断する時期を指定する情報を保持させる。命令Ｉ０１に次いで命令Ｉ１１がデコーダされた場合、ＰＣ制御部１３にさらに備えられた３つのレジスタに、命令Ｉ１１の分岐命令に対する制御信号１１、条件を指定する情報、条件判断する時期を指定する情報を保持させる。これにより、第１、第２のループが発生する毎にレジスタ３０、３１、３２に保持された情報、同じ機能の３つのレジスタに保持された情報をそれぞれ参照するだけで適切に２つの条件付き演算命令が実行される。命令Ｉ０１、Ｉ０２をそれぞれループが発生する毎にフェッチし、デコードする必要はなくプロセッサの処理性能を挙げることができる。
【０１５２】
実施の形態２．
図１２は図１のものとは別のマイクロプロセッサの構成を示したものである。このマイクロプロセッサは、メモリ制御部１４にレジスタ４３、記憶回路４４を設け、ＡＬＵ１５にレジスタ５３、記憶回路５４を設け、シフタ１６にレジスタ６３、記憶回路６４を設け、乗算機１７にレジスタ７３、記憶回路７４を設け、ＡＬＵ１９にレジスタ８３、記憶回路８４を設け、シフタ２０にレジスタ９３、記憶回路９４を設けている。
その他の構成は、図１のものと同じである。
【０１５３】
図１のマイクロプロセッサにおいては、ディレイ機能を有する演算命令、つまり条件判断するクロックサイクルよりさらに後のクロックサイクルで演算を実行する演算命令は、分岐・ジャンプ命令のみであったが、ロードストア命令、算術演算演算、シフト算術演算命令等、任意の演算命令に対してディレイ機能を付加することはできる。各演算ユニットにさらに加えられた６つのレジスタは、ＰＣ制御部１３のレジスタ３３と全く同じ機能を有し、各演算ユニットで実行されるべき演算を実行する時期を示す情報を保持する。また各演算ユニットにさらに加えられた６つの記憶回路は、ＰＣ制御部１３の記憶回路３４と全く同じ機能で、各演算ユニットで実行されるべき演算の実行条件の判断結果の情報を保持する。
【０１５４】
このように構成されたマイクロプロセッサは、例えば、
DADD F0T #H20, H30 R5,R5,R6
という命令を用意することができる。
この命令は、「フラグＦ０が真」を条件にしてレジスタＲ５、Ｒ６のそれぞれ内容を加算して、その加算結果をレジスタＲ５に書き込む加算命令である。この加算命令は、即値として２つのオフセット値‘２０’‘３０’を有する。加算命令ＤＡＤＤのアドレスが２０００番地であれば、２０００＋２０＝２０２０番地の演算命令の命令実行ステージE/M が処理されるクロックサイクルで加算命令ＤＡＤＤの条件が判断される。そして２０００＋３０＝２０３０番地の演算命令の実行ステージE/M が処理されるクロックサイクルで加算演算を実行する。この加算命令ＤＡＤＤが図２のoperation_0 であれば、ＡＬＵ１５で条件が判断されて加算が行われ、operation_1 であれば、ＡＬＵ１９で条件が判断されて加算が行われる。
【０１５５】
この実施の形態で各演算ユニットにレジスタ、記憶回路を付加したが、無論複数の演算ユニットの選択されたものにのみに備えてもよい。その場合にはそのレジスタ、記憶回路が付加された演算ユニットが処理できる演算命令のみにディレイ機能が付加されることになる。
【０１５６】
【発明の効果】
以上説明したように、この発明に係るデータ処理装置によると、第１の演算命令は第１の期間でデコードされ、それに続く第２の期間で実行さる一方、所定の条件のもので演算が実行される第２の演算命令は、第３の期間でデコードされ、第３の期間が終了して少なくとも第２の期間と同じ時間を経過した第４の期間で条件が判断されて実行される。条件付きの演算命令がデコードされても、第１の演算命令のように直ちに実行するのではなくその実行条件を判断する時期を遅延させた上で実行するので、その遅延している間に第２の演算命令の実行条件を決定する演算命令を実行することができる。よってプログラムシーケンスにおいて、第２の演算命令をその実行条件を決定する別の演算命令より前に記述することが可能で、命令のスケジューリングの自由度が増す。
【０１５７】
また、第２の演算命令で指定された演算が実行される時期を、条件判断が行われる時期よりさらに遅延させることにより、その遅延の間に、他の演算命令の処理で第２の演算命令の条件を決定している値が書き換えられても適切に条件付き演算命令を実行することができる。命令のスケジューリングの自由度がさらに増す。
【０１５８】
また、別のデータ処理装置によると、条件付き演算命令を処理する際に使用される第１ないし第３のレジスタを命令実行部に備えている。第１のレジスタは命令デコーダから出力される制御信号を保持し、条件付き演算命令に指定される演算が実行される条件を示す第１の情報を保持し、第３のレジスタはその条件の判断を開始する時期を示す第２の情報を保持するものである。命令実行部がこれら２つの情報に基づき、デコードされて所定の時間を経過したのちに演算命令の実行条件が判断されて演算命令を実行するので、命令をスケジューリングする際にその遅延している間に第２の演算命令の実行条件を決定する演算命令を実行することができる。よって命令のスケジューリングの自由度が増す。
【図面の簡単な説明】
【図１】  この発明の実施の形態１によるマイクロプロセッサの構成を示すブロック図である。
【図２】  マイクロプロセッサの命令フォーマットを示す説明図である。
【図３】  マイクロプロセッサの並列２命令実行時のパイプライン動作を示す説明図である。
【図４】  演算フィールドの詳細な内容を示す説明図である。
【図５】  マイクロプロセッサのレジスタ構成を示す説明図である。
【図６】  ＰＳＷの詳細内容を示す説明図である。
【図７】  ディレイド分岐命令の基本的なフォーマットを示す説明図である。
【図８】  図１のマイクロプロセッサで処理されるプログラムの一例を示す説明図である。
【図９】  図８のプログラムを処理したときのマイクロプロセッサのパイプライン動作を示す説明図である。
【図１０】  図１のマイクロプロセッサで処理される別のプログラムの一例を示す説明図である。
【図１１】  図９のプログラムを処理したときのマイクロプロセッサのパイプライン動作を示す説明図である。
【図１２】  この発明の実施の形態１によるマイクロプロセッサの構成を示すブロック図である。
【符号の説明】
２…命令デコードユニット、３…メモリユニット、４…整数演算ユニット、５…汎用レジスタ、１０…ＰＳＷ、１３…ＰＣ制御部、１４…メモリ制御部、１５、１９…ＡＬＵ、１６、２０…シフタ、１７…乗算器、３０〜３３、４０〜４２、５０〜５２、６０〜６２、７０〜７２、８０〜８２、９０〜９２…レジスタ、３４…記憶回路
【図１】
0003881763.tif 000017
【図２】
0003881763.tif 000018
【図３】
0003881763.tif 000019
【図４】
0003881763.tif 000020
【図５】
0003881763.tif 000021
【図６】
0003881763.tif 000022
【図７】
0003881763.tif 000023
【図８】
0003881763.tif 000024
【図９】
0003881763.tif 000025
【図１０】
0003881763.tif 000026
【図１１】
0003881763.tif 000027
【図１２】
0003881763.tif 000028