(57)【特許請求の範囲】
【請求項１】
命令やデータを格納する命令ＲＡＭやデータＲＡＭ等からなるメモリと、前記メモリへ接続され命令をデコードする命令デコーダと、命令の実行を制御する情報を格納する制御レジスタと、データを格納する複数個のレジスタと、算術演算等を実行する演算ユニットと、前記命令デコーダに接続され前記命令デコーダから出力された出力に従い前記命令を実行する命令実行ユニットと、前記プログラム内の先行命令の動作に基づいて現命令の実行を一時的に停止する実行停止回路と、前記先行命令の実行を行うか否かの判定を行う条件実行判定回路と、前記条件実行判定回路が前記先行命令を実行しないと判定した場合、前記先行命令の動作を開始する信号を無効とする処理を行う条件実行制御回路とを備えることを特徴とする条件実行命令を備えるマイクロプロセッサ。
【請求項２】
実行停止回路は、先行命令がメモリをアクセスし、そのアクセス完了を示すメモリアクセス完了信号が前記メモリから送信されるまでに複数クロック必要とする場合、前記先行命令のメモリアクセスが完了するまで現命令の実行を停止し、前記メモリから送信される前記アクセス完了信号に基づいて条件実行判定回路の動作は制御され、前記条件実行判定回路は、前記先行命令内の実行条件フィールドと制御レジスタ内の汎用フラグの値に基づいて前記先行命令の実行を行うか否かの判定を行い、前記条件実行判定回路が前記先行命令を実行しないと判定した場合に、条件実行制御回路は、前記先行命令の前記メモリへのアクセス処理を開始するアクセス開始信号を無効とすることを特徴とする請求項１記載の条件実行命令を備えるマイクロプロセッサ。
【請求項３】
先行命令の処理結果を汎用レジスタへ書き込む以前に、現命令が前記処理結果を前記汎用レジスタから読み出す場合、前記先行命令のデスティネーションレジスタ指定フィールドと前記現命令のソースレジスタ指定フィールドが一致することを判定するデータ干渉判定回路と、前記先行命令の処理結果を前記汎用レジスタを経由することなく前記現命令を実行する命令実行ユニットに転送するバイパス経路とをさらに備え、実行停止回路は、前記バイパス経路を介して前記先行命令の処理結果が転送可能になるまで、前記現命令の実行を停止し、条件実行判定回路は、前記先行命令内の実行条件フィールドの値および制御レジスタから得られる汎用フラグの値により前記先行命令の実行を行うか否かの判定を行い、前記データ干渉判定回路から送信される制御信号に基づいて前記実行停止回路と前記バイパス経路の動作が制御され、前記条件実行判定回路が、前記先行命令を実行しないと判定した場合、条件実行制御回路は、前記実行停止回路から送信される前記現命令の動作を停止する制御信号および前記先行命令の処理結果を前記現命令を実行する命令実行ユニットへ転送するための前記バイパス経路の動作を制御する制御信号を無効とすることを特徴とする請求項１記載の条件実行命令を備えるマイクロプロセッサ。
【請求項４】
先行命令の処理結果を汎用レジスタへ書き込む以前に、現命令が前記処理結果を前記汎用レジスタから読み出す場合、前記先行命令のデスティネーションレジスタ指定フィールドと前記現命令のソースレジスタ指定フィールドとが一致することを判定するデータ干渉判定回路とをさらに備え、実行停止回路は、前記先行命令の処理結果が前記汎用レジスタへ書き込み完了されるまで前記現命令の実行を停止させ、条件実行判定回路は、前記先行命令内の実行条件フィールドの値および制御レジスタから得られる汎用フラグの値により前記先行命令の実行を行うか否かの判定を行い、前記データ干渉判定回路から送信される制御信号により前記実行停止回路の動作が制御され、前記条件実行判定回路で前記先行命令を実行しないと判定した場合、条件実行制御回路は、前記実行停止回路から送信される前記現命令の動作の停止を制御する制御信号を無効とすることを特徴とする請求項１記載の条件実行命令を備えるマイクロプロセッサ。
【請求項５】
先行命令の処理結果を汎用レジスタへ書き込む以前に、異なる命令実行ユニットで実行される現命令が前記処理結果を前記汎用レジスタから読み出す場合、前記先行命令のデスティネーションレジスタ指定フィールドと前記現命令のソースレジスタ指定フィールドとが一致することを判定するデータ干渉判定回路と、前記先行命令の処理結果を前記汎用レジスタを経由することなく前記現命令を実行する前記異なる命令実行ユニットへ転送するバイパス経路とをさらに備え、実行停止回路は、前記バイパス経路を介して前記先行命令の処理結果を転送可能な時まで前記現命令の実行を停止し、条件実行判定回路は、前記先行命令内の実行条件フィールドおよび制御レジスタから得られる汎用フラグの値により前記先行命令の実行を行うか否かの判定を行い、前記データ干渉判定回路から送信される制御信号に基づいて前記実行停止回路および前記バイパス経路の動作が制御され、前記条件実行判定回路が前記先行命令を実行しないと判定した場合、条件実行制御回路は、前記実行停止回路から送信される前記現命令の実行停止を指示する制御信号と、前記現命令の実行を行う前記異なる命令実行ユニットへ前記先行命令の処理結果を転送するための前記バイパス経路の動作を制御する制御信号を無効とすることを特徴とする請求項１記載の条件実行命令を備えるマイクロプロセッサ。
【請求項６】
先行命令の処理結果を制御レジスタ内の汎用フラグへ書き込む以前に、現命令が前記処理結果を前記制御レジスタ内の前記汎用フラグから読み出す場合、前記先行命令のデスティネーションフラグ指定フィールドと前記現命令のソースフラグ指定フィールドとが一致することを判定するフラグ干渉判定回路とをさらに備え、実行停止回路は前記先行命令の処理結果が前記制御レジスタ内の前記汎用フラグへの書き込み動作が完了するまで前記現命令の実行を停止させ、条件実行判定回路は、前記先行命令内の実行条件フィールドの値と前記制御レジスタ内の前記汎用フラグの値とにより前記先行命令の実行を行うか否かの判定を行い、前記フラグ干渉判定回路から送信された制御信号に基づいて前記実行停止回路の動作が制御され、前記条件実行判定回路が前記先行命令を実行しないと判定した場合、条件実行制御回路は、前記実行停止回路から送信された前記現命令の実行を停止する制御信号を無効とすることを特徴とする請求項１記載の条件実行命令を備えるマイクロプロセッサ。
【請求項７】
先行命令の処理結果を制御レジスタ内の汎用フラグへ書き込む以前に、現命令が前記制御レジスタ内の汎用フラグを用いて条件実行判定を行う場合、前記先行命令のデスティネーションフラグ指定フィールドと前記現命令のソースフラグ指定フィールドとが一致することを判定するフラグ干渉判定回路とをさらに備え、実行停止回路は前記先行命令の前記処理結果が前記制御レジスタ内の前記汎用フラグへ書き込み完了されるまで前記現命令の実行を停止させ、条件実行判定回路は、前記先行命令内の実行条件フィールドと前記制御レジスタから得られる前記汎用フラグの値により前記先行命令の実行を行うか否かの判定を行い、前記フラグ干渉判定回路から送信される制御信号に基づいて前記実行停止回路の動作が制御され、前記条件実行判定回路が前記先行命令を実行しないと判定した場合、条件実行制御回路は、前記実行停止回路から送信される前記現命令の実行停止を指示する制御信号を無効とすることを特徴とする請求項１記載の条件実行命令を備えるマイクロプロセッサ。
【請求項８】
先行命令が制御レジスタ内のモードフラグを更新する場合、前記先行命令が前記制御レジスタ内の前記モードフラグを更新する命令であることを検知するモードフラグ判定回路をさらに備え、実行停止回路は、前記先行命令が前記制御レジスタ内の前記モードフラグの値を更新完了するまで現命令の動作を停止させ、条件実行判定回路は、前記先行命令内の実行条件フィールドと前記制御レジスタから得られる汎用フラグの値により前記先行命令の実行を行うか否かの判定を行い、前記条件実行判定回路から送信される制御信号に基づいて前記実行停止回路の動作が制御され、前記条件実行判定回路で前記先行命令を実行しないと判定した場合、前記条件実行制御回路は、前記実行停止回路から送信される前記現命令の動作の停止を指示する制御信号を無効とすることを特徴とする請求項１記載の条件実行命令を備えるマイクロプロセッサ。
【請求項９】
先行命令が含んでいる少なくとも１つ以上の副命令である先行副命令を実行するため、演算回路及び前記演算回路と汎用レジスタとの間のデータ読み出し及び書き込み経路等が同時に使用される場合、前記先行副命令の組み合わせにより前記データ読み出し及び書き込み経路の同時使用が行われるか否かを検知する同時使用判定回路と、前記先行副命令の実行で前記データ読み出し及び書き込み経路の同時使用を回避するため前記先行副命令のいずれかの動作を停止する衝突回避回路とをさらに備え、実行停止回路は、前記先行副命令の動作が停止される期間と同一期間だけ前記現命令の動作を停止し、条件実行判定回路は、前記先行命令内の実行条件フィールドと制御レジスタ内の汎用フラグの値により前記先行副命令の実行を行うか否かの判定を行い、前記条件実行判定回路から送信される制御信号に基づいて前記衝突回避回路と前記実行停止回路の動作が制御され、前記条件実行判定回路が前記先行副命令を実行しないと判定し、前記データ読み出し及び書き込み経路の同時使用が発生しない場合に、条件実行制御回路は、前記衝突回避回路から送信される前記先行副命令の実行を指示する制御信号と、前記実行停止回路から送信される前記現命令の実行を停止する制御信号を無効とすることを特徴とする先行副命令記載の条件実行命令を備えるマイクロプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、命令の一部で指定される実行条件フィールドを用いて、マイクロプロセッサの命令の実行を制御する機能を備えた条件実行命令を備えるマイクロプロセッサに関するものである。
【０００２】
【従来の技術】
マイクロプロセッサの性能向上のための一手法として、分岐のペナルティを減少させるために、条件実行や、投機実行などの手法が検討されている。条件実行を行う従来のＡＲＭマイクロプロセッサでは、条件実行の判定に用いるためのフラグが、ネガティブフラグ（Ｎ）、ゼロフラグ（Ｚ）、キャリーフラグ（Ｃ）、オーバーフローフラグ（Ｖ）という特定の命令でのみ設定される専用フラグを使用している。
【０００３】
また従来では、マイクロプロセッサの性能向上のための一手法として、一命令の実行を複数ステージに分割しパイプライン的に連続して実行する手法がある。
【０００４】
図２８は、従来のＭＭＡマイクロプロセッサのプロセッサコアの構成を示すブロック図であり、図において、９００は、ＭＭＡマイクロプロセッサのプロセッサコア、９０１はＭＭＡのマイクロプロセッサ内の１つの実行ユニットである。９０２は、ＭＭＡマイクロプロセッサの命令を実行する他の実行ユニット、９０４はデータＲＡＭである。このように、従来のＭＭＡマイクロプロセッサでは一つの命令中の２つのサブ命令を２つの実行ユニット９０１，９０２で同時に実行可能である。
【０００５】
実行ユニット９０１は、乗算器９１０、アキュムレータ９１１、シフタ９１２およびＡＬＵ９１３から構成されている。また、実行ユニット９０２は、ＡＬＵ９１４、ロード／ストアユニット９１５から構成されている。
９２０，９２１は、実行ユニット９０１に含まれる演算器のためのソースデータバスである。このソースデータバス９２０，９２１を介して演算のために必要なデータが汎用レジスタより読み出される。また、９３０，９３１は、実行ユニット９０２内に含まれる演算器等のためのソースデータバスである。演算のために必要なデータが汎用レジスタ９０３より読み出される。
【０００６】
９２５は、実行ユニット９０１内の乗算器９１０やＡＬＵ９１３等の演算結果を汎用レジスタ９０３へ書き戻すためのライトバックバスである。９３２，９３３は、実行ユニット９０２内のＡＬＵ９１４等の演算結果等を汎用レジスタ９０３へ書き戻すためのライトバックレジスタである。９２２，９２３は、乗算器９１０とアキュムレータ９１１との間を結ぶ内部バスであり、この内部バスを介して、ペナルティなしに累積加算を実行することが可能である。９４０は、ロード／ストアユニット９１５とデータＲＡＭ９０４を結ぶ双方向バスであり、オペランドデータのロード／ストアの制御に使用される。
【０００７】
図２９は、図２８に示した従来のＭＭＡマイクロプロセッサ内に組み込まれている実行ユニット９０１の一部の回路をパイプライン的に配置したブロック図である。９０３は汎用レジスタである。９１３はＡＬＵである。９１０ａ，９１０ｂは乗算を行うための部品であり、それぞれワレスの（Ｗａｌｌａｃｅ）ツリー回路とＣＰＡである。乗算は２ステージで実行することが可能である。９２１は、汎用レジスタからソースデータを読み出すバスである。９２５は、汎用レジスタに演算結果を書き戻すためのライトバックレジスタである。９７０，９７１，９７２は、ソースデータバスにデータをドライブする３ステートバッファである。９８０は、ＡＬＵ９１３の演算結果をソースデータバスに出力するためのバイパス経路である。９８１は、乗算結果をソースデータバスに出力するためのバイパス経路である。
【０００８】
図２８に示すように、実行ユニット９０１での１つの命令の実行は、Ｆ，Ｄ，Ｒ，Ｅ，Ｍ，Ｗの６ステージを必要とし、これらのステージはパイプライン的に実行される。１命令を６段のパイプラインで実行するために、データバス用のレジスタ（ＤＲ）９５０，９５１，９５２，９５３，９５４，９５５，９５６等が組込まれている。９６０は命令デコーダである。制御信号もパイプライン的に生成され、制御パス用のレジスタ（ＣＲ）９６１，９６２，９６３，９６４が組込まれている。
【０００９】
制御パス用のレジスタ９６２から出力される出力信号は、レジスタ９５０のライトイネーブル信号である。制御パス用レジスタ９６３の出力信号は、３ステートバッファ９７１，９７２のイネーブル信号である。制御パス用レジスタ９６４の出力信号は、３ステートバッファ９７０のイネーブル信号である。
【００１０】
図３０は、図２８に示す従来のＭＭＡマイクロプロセッサで実行される命令のパイプライン図であり、図において、白の部分は実行ユニット９０１で実行されているサブ命令のパイプラインを示しており、斜線部分は実行ユニット９０２で実行されているサブ命令のパイプラインを示している。１０００は、実行ユニット９０１で実行されるサブ命令のパイプラインである。１００１は、実行ユニット９０２で実行されるサブ命令のパイプラインであり、パイプライン１０００と同時に実行される。１００２は、パイプライン１０００，１００１のサブ命令とデータ干渉が発生しない場合において、後続命令が実行ユニット９０１で実行されるサブ命令のパイプラインである。１００３は、パイプライン１０００，１００１のサブ命令の実行とデータ干渉が発生しない場合、実行ユニット９０２で実行される後続命令としてのサブ命令のパイプラインである。
【００１１】
【発明が解決しようとする課題】
従来のＭＭＡマイクロプロセッサは以上のように構成されているので、先行命令と後続命令との間にデータ干渉が発生しない場合は、パイプラインが乱れることなく１クロック遅れで後続命令を実行することが可能である。１００５は、実行ユニット９０２で実行されるサブ命令のパイプラインであり、パイプライン１０００のサブ命令との間でデータ干渉が発生する場合を示している。１００４は、実行ユニット９０１で実行されるサブ命令のパイプラインであり、パイプライン１００５と同時に実行される。
【００１２】
上記したように、異なる複数の実行ユニット９０１，９０２間で先行命令と後続命令との間にデータ干渉が発生した場合、これらの実行ユニット９０１，９０２を直接に接続する専用のバイパス経路等が組み込まれていない場合は、先行命令が汎用レジスタ９０３内に処理結果を書き込むまでは、後続命令は汎用レジスタ９０３の読み出しを待つ必要がある。
【００１３】
上記した従来例の場合では、パイプライン１００２，１００３に比較して、パイプライン１００４，１００５では３クロックのペナルティが発生する。ＭＭＡマイクロプロセッサのように複数段のパイプライン実行を行うマイクロプロセッサでは、データ干渉を回避するため上記したパイプラインの一時停止が頻繁に発生するという課題があった。
【００１４】
この発明は上記のような課題を解決するためになされたもので、先行命令と現在実行する命令のパイプライン間にデータ干渉が発生し、そのデータ干渉を回避するためパイプラインの停止を行う場合、そのパイプラインの停止を誘因した原因となる命令が、条件実行判定で不実行となった場合、そのパイプラインの停止動作をキャンセルし、パイプラインのペナルティを削減することが可能な条件実行命令を備えるマイクロプロセッサを得ることを目的とする。
【００１５】
【課題を解決するための手段】
請求項１記載の発明に係る条件実行命令を備えるマイクロプロセッサは、命令やデータを格納する命令ＲＡＭやデータＲＡＭ等からなるメモリと、前記メモリへ接続され命令をデコードする命令デコーダと、命令の実行を制御する情報を格納する制御レジスタと、データを格納する複数個のレジスタと、算術演算等を実行する演算ユニットと、前記命令デコーダに接続され前記命令デコーダから出力された出力に従い前記命令を実行する命令実行ユニットと、前記プログラム内の先行命令の動作に基づいて現命令の実行を一時的に停止する実行停止回路と、前記先行命令の実行を行うか否かの判定を行う条件実行判定回路と、前記条件実行判定回路が前記先行命令を実行しないと判定した場合、前記先行命令の動作を開始する信号を無効とする処理を行う条件実行制御回路とを備えるものである。
【００１６】
請求項２記載の発明に係る条件実行命令を備えるマイクロプロセッサは、実行停止回路は、先行命令がメモリをアクセスし、そのアクセス完了を示すメモリアクセス完了信号が前記メモリから送信されるまでに複数クロック必要とする場合、前記先行命令のメモリアクセスが完了するまで現命令の実行を停止し、前記メモリから送信される前記アクセス完了信号に基づいて条件実行判定回路の動作は制御され、前記条件実行判定回路は、前記先行命令内の実行条件フィールドと制御レジスタ内の汎用フラグの値に基づいて前記先行命令の実行を行うか否かの判定を行い、前記条件実行判定回路が前記先行命令を実行しないと判定した場合に、条件実行制御回路は、前記先行命令の前記メモリへのアクセス処理を開始するアクセス開始信号を無効とするものである。
【００１７】
請求項３記載の発明に係る条件実行命令を備えるマイクロプロセッサは、先行命令の処理結果を汎用レジスタへ書き込む以前に現命令が処理結果を汎用レジスタから読み出す場合、先行命令のデスティネーションレジスタ指定フィールドと現命令のソースレジスタ指定フィールドが一致することを判定するデータ干渉判定回路と、先行命令の処理結果を汎用レジスタを経由することなく現命令を実行する命令実行ユニットに転送するバイパス経路とをさらに備え、実行停止回路がバイパス経路を介して先行命令の処理結果が転送可能になるまで、現命令の実行を停止し、条件実行判定回路が先行命令内の実行条件フィールドの値および制御レジスタから得られる汎用フラグの値により先行命令の実行を行うか否かの判定を行い、データ干渉判定回路から送信される制御信号に基づいて実行停止回路とバイパス経路の動作が制御され、条件実行判定回路が先行命令を実行しないと判定した場合、条件実行制御回路が実行停止回路から送信される現命令の動作を停止する制御信号および先行命令の処理結果を現命令を実行する命令実行ユニットへ転送するためのバイパス経路の動作を制御する制御信号を無効とするように制御し、ロード命令のアドレス計算用データが同じ命令実行ユニットで実行される先行命令の結果データと干渉を発生し、かつその先行命令が条件実行判定で不実行となった場合に、その条件実行キャンセル信号でパイプラインインターロック信号とバイパス経路選択信号をキャンセルして、パイプラインのペナルティを削除するものである。
【００１８】
請求項４記載の発明に係る条件実行命令を備えるマイクロプロセッサは、先行命令の処理結果を汎用レジスタへ書き込む以前に、現命令が処理結果を汎用レジスタから読み出す場合、先行命令のデスティネーションレジスタ指定フィールドと現命令のソースレジスタ指定フィールドとが一致することを判定するデータ干渉判定回路とをさらに備え、実行停止回路が先行命令の処理結果が汎用レジスタへ書き込み完了されるまで現命令の実行を停止させ、条件実行判定回路が先行命令内の実行条件フィールドの値および制御レジスタから得られる汎用フラグの値により先行命令の実行を行うか否かの判定を行い、データ干渉判定回路から送信される制御信号により実行停止回路の動作が制御され、条件実行判定回路で先行命令を実行しないと判定した場合、条件実行制御回路は実行停止回路から送信される現命令の動作の停止を制御する制御信号を無効とするように制御し、異なる命令実行ユニット間でデータ干渉が発生し、かつその先行命令が条件実行判定で不実行となった場合に、その条件実行キャンセル信号でパイプラインインターロック信号をキャンセルして、パイプラインのペナルティを削除するものである。
【００１９】
請求項５記載の発明に係る条件実行命令を備えるマイクロプロセッサは、先行命令の処理結果を汎用レジスタへ書き込む以前に、異なる命令実行ユニットで実行される現命令が処理結果を汎用レジスタから読み出す場合、先行命令のデスティネーションレジスタ指定フィールドと現命令のソースレジスタ指定フィールドとが一致することを判定するデータ干渉判定回路と、先行命令の処理結果を汎用レジスタを経由することなく現命令を実行する異なる命令実行ユニットへ転送するバイパス経路とをさらに備え、実行停止回路がバイパス経路を介して先行命令の処理結果を転送可能な時まで現命令の実行を停止し、条件実行判定回路が先行命令内の実行条件フィールドおよび制御レジスタから得られる汎用フラグの値により先行命令の実行を行うか否かの判定を行い、データ干渉判定回路から送信される制御信号に基づいて実行停止回路およびバイパス経路の動作が制御され、条件実行判定回路が先行命令を実行しないと判定した場合、条件実行制御回路は、実行停止回路から送信される現命令の実行停止を指示する制御信号と、現命令の実行を行う異なる命令実行ユニットへ先行命令の処理結果を転送するためのバイパス経路の動作を制御する制御信号を無効とするように制御し、メモリアクセス部で実行されるロード命令のロードデータが、整数演算部で実行される乗算命令のソースデータと干渉を起こし、かつその先行ロード命令が条件実行判定で不実行となった場合に、その条件実行キャンセル信号でパイプラインインターロック信号とバイパス経路選択信号とをキャンセルして、パイプラインのペナルティを削除するものである。
【００２０】
請求項６記載の発明に係る条件実行命令を備えるマイクロプロセッサは、先行命令の処理結果を制御レジスタ内の汎用フラグへ書き込む以前に、現命令が処理結果を制御レジスタ内の汎用フラグから読み出す場合、先行命令のデスティネーションフラグ指定フィールドと現命令のソースフラグ指定フィールドとが一致することを判定するフラグ干渉判定回路とをさらに備え、実行停止回路が先行命令の処理結果が制御レジスタ内の汎用フラグへの書き込み動作が完了するまで現命令の実行を停止させ、条件実行判定回路が先行命令内の実行条件フィールドの値と制御レジスタ内の汎用フラグの値とにより先行命令の実行を行うか否かの判定を行い、フラグ干渉判定回路から送信された制御信号に基づいて実行停止回路の動作が制御され、条件実行判定回路が先行命令を実行しないと判定した場合、条件実行制御回路は実行停止回路から送信された現命令の実行を停止する制御信号を無効とするように制御し、あるフラグを用いる命令の先行命令がそのフラグを更新し、かつその先行命令が条件実行判定で不実行となった場合に、その条件実行キャンセル信号でパイプラインインターロック信号をキャンセルすることでパイプラインのペナルティを削除するものである。
【００２１】
請求項７記載の発明に係る条件実行命令を備えるマイクロプロセッサは、先行命令の処理結果を制御レジスタ内の汎用フラグへ書き込む以前に、現命令が制御レジスタ内の汎用フラグを用いて条件実行判定を行う場合、先行命令のデスティネーションフラグ指定フィールドと現命令のソースフラグ指定フィールドとが一致することを判定するフラグ干渉判定回路とをさらに備え、実行停止回路が先行命令の処理結果が制御レジスタ内の汎用フラグへ書き込み完了されるまで現命令の実行を停止させ、条件実行判定回路が先行命令内の実行条件フィールドと制御レジスタから得られる汎用フラグの値により先行命令の実行を行うか否かの判定を行い、フラグ干渉判定回路から送信される制御信号に基づいて実行停止回路の動作が制御され、条件実行判定回路が先行命令を実行しないと判定した場合、条件実行制御回路が実行停止回路から送信される現命令の実行停止を指示する制御信号を無効とするように制御し、条件実行判定を伴う命令の先行命令が条件実行フラグを更新し、かつその先行命令が条件実行判定で不実行となった場合に、その条件実行キャンセル信号でパイプラインインターロック信号をキャンセルしてパイプラインのペナルティを削除するものである。
【００２２】
請求項８記載の発明に係る条件実行命令を備えるマイクロプロセッサは、先行命令が制御レジスタ内のモードフラグを更新する場合、先行命令が制御レジスタ内のモードフラグを更新する命令であることを検知するモードフラグ判定回路とをさらに備え、実行停止回路は、先行命令が制御レジスタ内のモードフラグの値を更新完了するまで現命令の動作を停止させ、条件実行判定回路が、先行命令内の実行条件フィールドと制御レジスタから得られる汎用フラグの値により先行命令の実行を行うか否かの判定を行い、条件実行判定回路から送信される制御信号に基づいて実行停止回路の動作が制御され、条件実行判定回路で先行命令を実行しないと判定した場合、条件実行制御回路は実行停止回路から送信される現命令の動作の停止を指示する制御信号を無効とするように制御し、モードフラグを更新する命令が条件実行判定で不実行となった場合に、その条件実行キャンセル信号で後続命令のパイプラインインターロック信号をキャンセルすることでパイプラインのペナルティを削除するものである。
【００２３】
請求項９記載の発明に係る条件実行命令を備えるマイクロプロセッサは、先行命令が含んでいる少なくとも１つ以上の副命令である先行副命令を実行するため、演算回路及び演算回路と汎用レジスタとの間のデータ読み出し及び書き込み経路等が同時に使用される場合、先行副命令の組み合わせによりデータ読み出し及び書き込み経路の同時使用が行われるか否かを検知する同時使用判定回路と、先行副命令の実行でデータ読み出し及び書き込み経路の同時使用を回避するため先行副命令のいずれかの動作を停止する衝突回避回路とをさらに備え、実行停止回路は、先行副命令の動作が停止される期間と同一期間だけ現命令の動作を停止し、条件実行判定回路が先行命令内の実行条件フィールドと制御レジスタ内の汎用フラグの値により先行副命令の実行を行うか否かの判定を行い、条件実行判定回路から送信される制御信号に基づいて衝突回避回路と実行停止回路の動作が制御され、条件実行判定回路が先行副命令を実行しないと判定し、データ読み出し及び書き込み経路の同時使用が発生しない場合に、条件実行制御回路は、衝突回避回路から送信される先行副命令の実行を指示する制御信号と、実行停止回路から送信される現命令の実行を停止する制御信号を無効とするように制御して、あるリソースコンフリクトによりパイプラインインターロックが発生し、かつそのリソースコンフリクトを発生させるサブ命令のいずれかが条件実行判定で不実行となった場合に、その条件実行キャンセル信号でパイプラインストール信号をキャンセルしてパイプラインのペナルティを削除するものである。
【００２４】
【発明の実施の形態】
以下、この発明の実施の一形態を説明する。
【００２５】
以下で説明する条件実行命令を備えるマイクロプロセッサの各実施の形態を説明する前に、この発明のマイクロプロセッサに共通の基本構成に関してまず説明する。
【００２６】
マイクロプロセッサのハードウエア構成
図１は、この発明の条件実行命令を備えるマイクロプロセッサの全体構成を示すブロック図であり、マイクロプロセッサ１は、命令デコードユニット（命令デコーダ）２、メモリアクセスユニット（命令実行ユニット）３、整数演算ユニット（命令実行ユニット）４、汎用レジスタ５、命令ＲＡＭ（メモリ）６、データＲＡＭ（メモリ）７から構成されている。
【００２７】
命令デコードユニット２は、命令ＲＡＭ６から６４ビット幅のＩＤバスを通じて送られる命令コードをＭＵデコーダ８、ＩＵデコーダ９を用いてデコードする。ＭＵデコーダ８のデコード結果とプロセッサ状態語（ＰＳＷ）１０よりメモリアクセスユニット３への制御信号１１を生成し、また、ＩＵデコーダ９のデコード結果とプロセッサ状態語１０より整数演算ユニット４への制御信号１２を生成する。メモリアクセスユニット３は、ＰＣ制御部１３、メモリ制御部１４、ＡＬＵ１５、シフタ１６から構成される。ＰＣ制御部１３は、有効なジャンプ演算や分岐演算を含まない命令では、例えば実行した命令のＰＣ値に８を加えて次に実行する命令のＰＣ値を計算し、ジャンプ演算や分岐演算では実行した命令のＰＣ値に分岐変位を加算し、また演算で指定されたアドレッシングモードに従う計算をしてジャンプ先命令のＰＣ値を計算する。
【００２８】
メモリ制御部１４は、ＰＣ制御部１３で計算されたＰＣ値をもとにＩＡバスを用いて命令ＲＡＭ６を起動する。また、命令実行に必要なデータをデータメモリのアドレスを転送するＯＡバス、データを転送するＯＤバスを通じてデータＲＡＭ７にアクセスし、汎用レジスタ５にデータ転送する。ＡＬＵ１５およびシフタ１６では、汎用レジスタ５から３２ビット幅のＳ１バス、Ｓ２バス、Ｓ６バスを通じて転送された最大３ワードのデータを用いて算術論理演算もしくはシフト演算を行い、演算結果をＷ１バスを用いて汎用レジスタ５に転送する。
【００２９】
Ｓ１、Ｓ２、Ｓ６、Ｓ５バスを通じて、汎用レジスタ５から読み出された最大４ワードの３２ビット長のデータが、メモリアクセスユニット３へ転送される。これにより、汎用レジスタ５からデータＲＡＭ７へ２ワードストア命令を実現している。２ワードストア命令では、２つのオペランドを使用し、メモリアドレスを計算し、データＲＡＭ７へ２ワードデータを転送する。また、メモリアクセスユニット３は、Ｗ１、Ｗ３Ｅ、Ｗ３Ｏバスを通じて、メモリアクセスユニット３内での演算結果およびデータＲＡＭ７から転送された２ワードのロードデータを、汎用レジスタ５へ転送する。
【００３０】
整数演算ユニット４は、乗算器１７、アキュムレータ１８、ＡＬＵ１９、シフタ２０から構成される。乗算器１７、ＡＬＵ１９、シフタ２０では、汎用レジスタ５から３２ビット幅のＳ３、Ｓ４、Ｓ５バスを通じて転送された最大３ワードのデータを用いて算術論理演算もしくはシフト演算を行い、演算結果をＷ２，Ｗ３Ｅ、Ｗ３Ｏバスを用いて汎用レジスタ５に転送する。また、アキュムレータ１８は、乗算の結果を累積加算または累積減算してその演算結果を保持する。
【００３１】
汎用レジスタ５は、最大６種類のレジスタ値を同時に読み出すことが可能で、読み出されたデータは、それぞれＳ１、Ｓ２、Ｓ３、Ｓ４、Ｓ５、Ｓ６バスに出力される。また、汎用レジスタ５は、Ｗ１、Ｗ２、Ｗ３Ｅ、Ｗ３Ｏバスに接続され、最大４種類のレジスタ値を同時に書き込むことが可能である。命令ＲＡＭ６は、３２ビット幅のＩＡバスと６４ビット幅のＩＤバスに接続されており、ＩＡバスの示すアドレスに対応する６４ビット長の命令データを読み出す。データＲＡＭ７は、３２ビット幅のＯＡバスと６４ビット幅のＯＤバスに接続されており、ＯＡバスの示すアドレスに対応する、６４ビット長のデータを読み書きする。
【００３２】
命令セットとレジスタ
図２は、図１に示したマイクロプロセッサ１で用いられる命令フォーマットを示す説明図である。マイクロプロセッサ１の命令フォーマットには、１つの命令で２つの演算を指示する２副命令のフォーマット１０１と１つの命令で１つの演算を指示する１演算命令のフォーマット１０２がある。２演算命令のフォーマット１０１にはフィールド１０３とフィールド１０４からなるフォーマットフィールド、２つの演算フィールド１０６、１０７及び各演算フィールドに１つずつ付属する実行条件フィールド１０５がある。１演算命令のフォーマットにはフィールド１０３とフィールド１０４からなるフォーマットフィールド、フィールド１０８とフィールド１０９とフィールド１１０とからなる演算フィールド及びこの演算フィールドに付属する実行条件フィールド１０５がある。
【００３３】
図３は、図２に示した命令フォーマット内のフォーマットフィールド１０３，１０４の詳細を示す説明図であり、図において、ＦＭ＝００の場合、この命令は２演算命令であり、演算フィールド１０６で指示されたｏｐｅｒａｔｉｏｎ＿０の演算と演算フィールド１０７で指示されたｏｐｅｒａｔｉｏｎ＿１の演算がデコード直後のクロックサイクルで並列に実行される。フォーマットフィールドの値ＦＭ＝０１の場合、この命令は２演算命令であり、演算フィールド１０６で指示されたｏｐｅｒａｔｉｏｎ＿０の演算がデコード直後のクロックサイクルに実行され、演算フィールド１０７で指示されたｏｐｅｒａｔｉｏｎ＿１の演算がｏｐｅｒａｔｉｏｎ＿０の演算に対して１クロックサイクル遅れて実行される。
【００３４】
ＦＭ＝１０の場合、この命令は２演算命令であり、演算フィールド１０７で指示されたｏｐｅｒａｔｉｏｎ＿１の演算がデコード直後のクロックサイクルに実行され、演算フィールド１０６で指示されたｏｐｅｒａｔｉｏｎ＿０の演算がｏｐｅｒａｔｉｏｎ＿１の演算に対して１クロックサイクル遅れて実行される。ＦＭ＝１１の場合、この命令は１演算命令であり、１０８と１０９と１１０からなる演算フィールドで指示された１つの演算がデコード直後のクロックサイクルで実行される。
【００３５】
図４は、図２に示した実行条件フィールド（ＣＣ）１０５の詳細を示す説明図である。実行条件フィールド１０５は、後述するマイクロプロセッサ１の状態フラグＦ０及びＦ１の値に依存して演算フィールド１０６、１０７でそれぞれ示されたｏｐｅｒａｔｉｏｎ＿０の演算やｏｐｅｒａｔｉｏｎ＿１の演算及び演算フィールド１０８と１０９と１１０で示された演算が有効であるか無効であるかを定める。演算が有効であるときは、演算結果がレジスタ、メモリ、フラグに反映され、その演算により定義された動作結果が残ることを意味し、演算が無効であるときは、演算結果がレジスタ、メモリ、フラグに反映されず、定められた演算の種類には関わらずその演算により無効演算（ＮＯＰ：ｎｏ  ｏｐｅｒａｔｉｏｎ）と同じ結果がレジスタやフラグに残ることを意味する。
【００３６】
実行条件フィールド１０５の値ＣＣ＝０００のとき、演算はフラグＦ０、Ｆ１の値に関わらず常に有効である。ＣＣ＝００１のとき、演算はＦ１の値には関わらずＦ０＝真のときのみ有効である。ＣＣ＝０１０のとき、演算はＦ１の値には関わらずＦ０＝偽のときのみ有効である。ＣＣ＝０１１のとき、演算はＦ０の値には関わらずＦ１＝真のときのみ有効である。ＣＣ＝１００のとき、演算はＦ０の値には関わらずＦ１＝偽のときのみ有効である。ＣＣ＝１０１のとき、演算はＦ０＝真かつＦ１＝真のときのみ有効である。ＣＣ＝１１０のとき、演算はＦ０＝真かつＦ１＝偽のときのみ有効である。ＣＣ＝１１１のときの動作は未定義であり、この値が命令で用いられることはない。
【００３７】
図５は、２８ビット長で表現される短型の演算フィールド１０６、１０７と５４ビット長で表現される長型の演算フィールド（図２に示した演算フィールド１０８、１０９、１１０で構成される）の詳細を示す説明図である。短型の演算フィールドには、７つのフォーマット１１１、１１２、１１３、１１４、１１５、１１６、１１７があり、長型の演算フィールドには１つのフォーマット１１８がある。
【００３８】
フォーマット１１１は、演算内容を指定するフィールド１２０、レジスタの番号を指定する２つのフィールド１２１、１２２、レジスタ番号または６ビット長の即値を指定するフィールド１２３、フィールド１２３がレジスタ番号を示すか即値を示すかを指定するフィールド１２４から構成される。このフォーマット１１１はレジスタ間接アドレッシングのメモリアクセス演算に使用される。
【００３９】
フォーマット１１２は、演算内容を指定するフィールド１２０、レジスタの番号を指定する２つのフィールド１２１、１２２、レジスタ番号または６ビット長の即値を指定するフィールド１２３、フィールド１２３がレジスタ番号を示すか即値を示すかを指定するフィールド１２５から構成される。このフォーマット１１２は算術演算、論理演算、シフト演算、ビット演算に使用される。
【００４０】
フォーマット１１３は、演算内容を指定するフィールド１２０、レジスタの番号を指定するフィールド１２６から構成される。このフォーマット１１３は、レジスタ指定によるジャンプ、分岐命令に使用される。フォーマット１１４は、演算内容を指定するフィールド１２０、１８ビット長のディスプレイスメントのフィールド１２７から構成される。このフォーマット１１４は、ジャンプ、分岐命令に使用される。
【００４１】
フォーマット１１５は、演算内容を指定するフィールド１２０、レジスタの番号を指定するフィールド１２１、レジスタ番号または１２ビット長の即値を指定するフィールド１２８、フィールド１２８がレジスタ番号を示すか即値を示すかを指定するフィールド１２９、フィールド１２１がゼロ判定による条件ジャンプおよび条件分岐を行うか否かを指定するフィールド１３０から構成される。このフォーマット１１５は、条件ジャンプ、条件分岐命令に使用される。
【００４２】
フォーマット１１６は、演算内容を指定するフィールド１２０、レジスタの番号を指定するフィールド１２１、レジスタ番号または１２ビット長の即値を指定するフィールド１２８、フィールド１２８がレジスタ番号を示すか即値を示すかを指定するフィールド１２９から構成される。このフォーマット１１６は、条件ジャンプ、条件分岐命令、リピート命令に使用される。
【００４３】
フォーマット１１７は、演算内容を指定するフィールド１２０、レジスタ番号または１２ビット長の即値を指定するフィールド１２８、フィールド１２８がレジスタ番号を示すか即値を示すかを指定するフィールド１２９、ディレイド命令のディレイ値を指定するフィールド１３１から構成される。このフォーマット１１７は、ディレイドジャンプ、ディレイド分岐命令に使用される。
【００４４】
フォーマット１１８は、演算内容を指定するフィールド１２０、レジスタの番号を指定する２つのフィールド１２１、１２２、３２ビット長の即値を指定するフィールド１３２から構成される。このフォーマット１１８の演算には、複雑な算術演算、大きな即値を用いる算術演算、大きなディスプレースメント付きレジスタ間接アドレッシングのメモリアクセス演算や大きな分岐変位の分岐演算、絶対番地へのジャンプ演算などがある。
【００４５】
フォーマット１１９は、演算内容を指定するフィールド１２０、レジスタの番号を指定する２つのフィールド１２１、１２２、３２ビット長の即値を指定するフィールド１３２、フィールド１３２がゼロ判定による条件ジャンプおよび条件分岐を行うか否かを指定するフィールド１３３から構成される。このフォーマット１１９は、大きな分岐変位をもつ条件ジャンプ、条件分岐命令に使用される。
【００４６】
図６は、図１に示したマイクロプロセッサ１のレジスタの構成を示す説明図である。マイクロプロセッサ１には、６４本の３２ビット長の汎用レジスタ５、１２本の制御レジスタ１５０、および２本のアキュムレータ１８がある。汎用レジスタ（Ｒ０）１４０は、読み出した場合常に０で書き込みは無視される。汎用レジスタ（Ｒ６３）はスタックポインタであり、プロセッサ状態語（ＰＳＷ）１０のＳＭフィールドの値に依存してユーザスタックポインタ（ＳＰＵ）１４１または割り込みスタックポインタ（ＳＰＩ）１４２が動作する。制御レジスタ１５０には、プログラムカウンタ１５１、プロセッサ状態語１０や各種の専用レジスタが含まれる。フォーマット１１２の演算では、６４本の汎用レジスタ５のそれぞれを上位１６ビットと下位１６ビットに分けて別々にアクセスできる。また、２本のアキュムレータ１８はそれぞれ上位３２ビットと下位３２ビットを別々にアクセスできる。
【００４７】
図７は、プロセッサ状態語１０の詳細を示す説明図である。プロセッサ状態語（ＰＳＷ）１０の上位１６ビット１７０にはスタックポインタを切り替えるＳＭフィールド１７１、ソフトウェアデバッガトラップ（ＳＤＢＴ）の検出を示すＥＡフィールド１７２、ＳＤＢＴの許可を指定するＤＢフィールド１７３、割り込み許可を指定するＥＩフィールド１７４、リピート動作の許可を指定するＲＰフィールド１７５、モジュロアドレシングの許可を指定するＭＤフィールド１７６がある。
【００４８】
下位１６ビットは、フラグフィールド１８０である。フラグフィールド１８０には８個のフラグがあり、その中のＦ０フラグ１８１とＦ１フラグ１８２は演算の有効無効を制御する。各フラグの値は、比較演算や算術演算の結果に依存して変化するほか、フラグ初期化演算で初期化したり、フラグ値書き込み演算で任意の値をフラグフィールド１８０に書き込むことで変化する。また、フラグ値読み出し演算でフラグフィールド１８０の値を読み出すこともできる。
【００４９】
以下に、図１に示したこの発明のマイクロプロセッサ１で用いられる命令一覧を示す。
【００５０】
0003568737.tif 000002
【００５１】
0003568737.tif 000003
【００５２】
0003568737.tif 000004
【００５３】
0003568737.tif 000005
【００５４】
0003568737.tif 000006
【００５５】
0003568737.tif 000007
【００５６】
0003568737.tif 000008
【００５７】
0003568737.tif 000009
【００５８】
0003568737.tif 000010
【００５９】
0003568737.tif 000011
【００６０】
0003568737.tif 000012
【００６１】
0003568737.tif 000013
【００６２】
マイクロプロセッサ１におけるパイプライン動作
図８は、図１に示したこの発明のマイクロプロセッサ１の並列２命令実行時（ＦＭ＝００）のパイプライン動作を示す説明図である。パイプラインは、命令フェッチ（ＩＦ）ステージ１９１、デコード／アドレス演算（Ｄ／Ａ）ステージ１９２、実行／メモリアクセス（ＥｏｒＭ）ステージ１９３、ライトバック（Ｗ）ステージ１９４から構成される。
【００６３】
並列２命令実行時には、メモリアクセスユニット３での実行１９０と整数演算ユニット４での実行１９５（斜線の部分）が並列に行われる。図９は、一つの命令実行でなされる各処理を４段のパイプライン図に割当てた場合を示す説明図である。まず、ＩＦステージで命令フェッチが実行され、Ｄ／Ａステージでその命令のデコードが実行される。そして、同じくＤ／Ａステージの前半から汎用レジスタの読み出しが開始されて、後半でアドレス計算がなされる。ＥｏｒＭステージでは、演算及びメモリアクセスが実行される。そして、Ｗステージの後半で汎用レジスタの書き込みが実行される。これが１命令を実行する際のパイプライン的な処理の概要である。
【００６４】
また、図９においてパイプラインの下に示しているように、４つのステージの前半と後半で行われる処理は、それぞれクロックのＨｉｇｈとＬｏｗに同期して行われている。ＩＦステージの前半と後半の処理をそれぞれＩ１、Ｉ２期間中の処理と呼ぶ。また、Ｄステージの前半と後半の処理をそれぞれＤ１、Ｄ２期間中の処理と呼ぶ。また、Ｅステージの前半と後半の処理をそれぞれＥ１、Ｅ２期間中の処理と呼ぶ。また、Ｗステージの前半と後半の処理をそれぞれＷ１、Ｗ２期間中の処理と呼ぶ。
【００６５】
マイクロプロセッサ１の詳細なブロック図
図１０〜図１３は、図１に示したマイクロプロセッサ１のメモリアクセスユニットと整数演算ユニットを中心とした詳細な構成を示すブロック図であり、図において、マイクロプロセッサ１は、命令デコードユニット２、メモリアクセスユニット３、整数演算ユニット４、汎用レジスタ５、命令ＲＡＭ６、データＲＡＭ７から構成されている。
【００６６】
メモリアクセスユニット３は、図１に示したマイクロプロセッサ内のＡＬＵ１５、シフタ１６を備えている。２２０は、Ｄ２同期バス群の値を取り込むレジスタであり、格納した値をシフタ１６へ出力する。２２１は、Ｄ２同期バス群の値を取り込むレジスタであり、格納した値をＡＬＵ１５へ出力する。また、その他メモリ制御、ＰＣ制御、演算制御等を行うための各種演算器やレジスタ等がメモリアクセスユニット３内に含まれている。２９は、命令フェッチ処理の際に、命令ＲＡＭ６へ送信するアドレスを保持するための命令アドレスレジスタである。３０は、メモリへのストア処理を行う際に、ストアデータの整値を行うための制御部である。３３は、メモリからのロードデータの符号拡張を行うための制御部である。３１は、ロードとストア命令実行時のポストインクリメント／デクリメントアドレッシングを行うためのインクリメンタである。３２は、ロード／ストア命令及び分岐命令等を実行する際にアドレス計算を行うための加算器である。５０は、ＡＬＵ、シフタの結果を保持するレジスタである。
【００６７】
またＣＲ０〜ＣＲ１１は、図６で示した制御レジスタ１５０に相当する。３４は、プログラムカウンタＣＲ０をインクリメントするためのインクリメンタである。３５は、リピート命令やディレイド分岐命令を実行する際に、リピートカウントレジスタＣＲ６の値やリピートエンドアドレスレジスタＣＲ８の値を計算するための加算器である。３６は、リピートカウントレジスタの値をデクリメントするためのデクリメンタである。３７は、命令アドレスレジスタの値をインクリメントするためのインクリメンタである。４０は、命令ブレークアドレスレジスタＣＲ１１の値とプログラムカウンタＣＲ０の値とを比較し、両者が同じ値であれば一致信号を出力する３２ビット比較器である。
【００６８】
４１は、リピートカウントレジスタＣＲ６の値が０以上であれば有効となる信号を出力する３２ビット比較器である。４２は、リピートエンドアドレスレジスタＣＲ８の値と命令アドレスレジスタ２９の値を比較し、同じ値であれば一致信号を出力する３２ビットの比較器である。４３は、モジュロエンドアドレスレジスタＣＲ１０の値とインクリメンタ３１の値が同じであれば一致信号を出力する３２ビット比較器である。４４は、Ｄ１Ｓ６ＢＵＳバスの値が０であれば有効となる信号を出力するための３２ビット比較器である。
【００６９】
また整数演算ユニット４内には、図１に示すマイクロプロセッサ１内の乗算器１７（図１３では、１７ａ〜１７ｄに相当する）、ＡＬＵ１９、シフタ２０がある。その他の演算器として、飽和演算をするための演算器２１がある。２２２は、Ｄ２同期バス群の値を取り込むレジスタであり、格納した値はＡＬＵ２０へ出力される。２２３は、Ｄ２同期バス群の値を取り込むレジスタであり、格納した値をシフタ１９及び飽和演算器２１へ出力する。２２４は、Ｄ２同期バス群の値を取り込むレジスタであり、格納した値を乗算器１７へ出力する。
【００７０】
また、Ａ０、Ａ１は、積和演算等を行う際の累積加算等を行うためのアキュムレータである。５５は、ＡＬＵ，シフタ，飽和演算器の結果を保持するレジスタである。
【００７１】
また、図１に示したＳ１、Ｓ２、Ｓ３、Ｓ４、Ｓ５、Ｓ６バスは、図１０〜図１３ではＤ１Ｓ１ＢＵＳ、Ｄ１Ｓ２ＢＵＳ、Ｄ１Ｓ３ＢＵＳ、Ｄ１Ｓ４ＢＵＳ、Ｄ１Ｓ５ＢＵＳ、Ｄ１Ｓ６ＢＵＳに相当する。参照記号Ｄ１Ｓ１ＢＵＳ内のＤ１とは、図９に示すＤ１期間中にバスがドライブされることを意味する。これら先頭にＤ１の付いているバスをＤ１同期バス群と呼ぶ。
【００７２】
また、図１に示したＷ１、Ｗ２、Ｗ３Ｅ、Ｗ３Ｏバスは、図１０〜図１３ではＷ１Ｗ１ＢＵＳ、Ｗ１Ｗ２ＢＵＳ、Ｗ１Ｗ３ＥＢＵＳ、Ｗ１Ｗ３ＯＢＵＳに相当する。参照記号Ｗ１Ｗ１ＢＵＳ内のＷ１とは、図９に示すＷ１期間中にバスがドライブされることを示している。これら先頭にＷ１の付いているバスは同様にＷ１同期バス群と呼ぶ。
【００７３】
またＤ２Ｓ１ＢＵＳ、Ｄ２Ｓ２ＢＵＳ、Ｄ２Ｓ３ＢＵＳ、Ｄ２Ｓ４ＢＵＳ、Ｄ２Ｓ５ＭＢＵＳ、Ｄ２Ｓ５ＩＢＵＳ、Ｄ２Ｓ６ＢＵＳは、Ｄ１同期バス群のデータをラッチを介して半クロック遅延させ、Ｄ２の期間中にこれらのデータをドライブする。そのタイミングを変更するラッチは、４０ａ、４０ｂである。
【００７４】
また４１ａ、４１ｂ、４１ｃは、命令デコーダ部より出力された即値データである。これらは、バスドライバ４２ａ、４２ｂ、４２ｃ、４２ｄを介して、Ｄ１、Ｄ２同期バス群に出力される。また、Ｅ２Ｄ１ＢＵＳ、Ｅ２Ｄ３ＢＵＳ、Ｅ２Ｄ４ＢＵＳは、制御レジスタの値や演算器の値を保持するレジスタの値をＥ２期間中に出力するバスである。
【００７５】
また５１は、Ｅ２Ｄ１ＢＵＳ上のデータをＷ１Ｗ１ＢＵＳに出力するためのライトバックレジスタである。５３は、ロードデータの値をＷ１Ｗ３ＥＢＵＳ、Ｗ１Ｗ３ＯＢＵＳへ出力するためのレジスタである。５４は、演算結果保持レジスタ５５の値をＷ１Ｗ２ＢＵＳへ出力するためのライトバックレジスタである。また６０は、命令デコードユニット２内のＰＳＷレジスタの値をＥ２Ｄ１ＢＵＳに読み出すための経路である。６１は、Ｅ１ＣＲＢＵＳの値を命令デコードユニット２内のＰＳＷレジスタに書き込むための経路である。６２は、ＡＬＵ１５でキャリーフラグを用いる演算を実行する時にキャリーフラグの伝播する経路である。
【００７６】
６３は、ＡＬＵ１５から命令デコードユニット２へ出力されるフラグの伝搬経路である。６４は、ＡＬＵ２０から命令デコードユニットに出力されるフラグの伝搬経路である。６５は、ＡＬＵ２０でキャリーフラグを用いる演算を実行する時にキャリーフラグの伝播する経路である。６６は、飽和演算器２１から命令デコードユニットに出力されるフラグの伝搬経路である。
【００７７】
２００〜２１１は、バイパス処理を行うための回路及び経路である。即ち、２００は、ロードデータバスＭ２ＯＤＢＵＳの値を符号拡張するための制御部である。２０１は、ライトバックレジスタ５６の値が出力されたバスＷ１Ｗ３ＥＢＵＳ、Ｗ１Ｗ３ＯＢＵＳの値を取り込むレジスタである。２０２は、レジスタ５０の値をメモリアクセス部のＤ２同期バス群へ出力するための経路である。２０３、はライトバックレジスタ５１の値をＤ１同期バス群へ出力するための経路である。２０４は、レジスタ５７の値をＤ１同期バス群へ出力するための経路である。２０５は、レジスタ２０１の値をメモリアクセス部のＤ２同期バス群へ出力するための経路である。２０６は、符号拡張部３３の値をメモリアクセス部のＤ２同期バス群へ出力するための経路である。２０７は、レジスタ５３の値をメモリアクセス部のＤ２同期バス群へ出力するための経路である。２０８は、符号拡張部２００の値を整数演算部のＤ２同期バス群へ出力するための経路である。２０９は、ライトバックレジスタ５４の値をＤ１同期バス群へ出力するための経路である。
【００７８】
２１０は、レジスタ５５の値を整数演算部のＤ２同期バス群に出力するための経路である。２１１は、ライトバックレジスタ５６の値をＤ１同期バス群に出力するための経路である。
【００７９】
データ干渉発生時にデータの整合性を保証する処理
図９に示したパイプライン図で説明したように、汎用レジスタ５からのデータの読み出しはＤ１期間中に実行される。そして、汎用レジスタ５へのデータの書き込みはＷ２期間中に実行される。このことから、先行する命令の書き込み先（ディスティネーション）レジスタから、直後の命令がデータの読み出しを行いたい場合、バイパス処理やパイプラインインターロック処理等でデータの整合性を保証してやる必要がある。このような処理が必要なデータの関係をデータ干渉と呼んでいる。
【００８０】
図１４は、命令コード間のパイプラインでのデータの干渉を示す説明図であり、図において、６００ａ、６００ｂ、６００ｃはそれぞれメモリアクセスユニット３で実行されるＷステージ、ＥｏｒＭステージ、Ｄステージで実行されるサブ命令コードを示す。また、６０１ａ、６０１ｂ、６０１ｃは、それぞれ整数演算ユニット４で実行されるＷステージ、ＥｏｒＭステージ、Ｄステージのサブ命令コードを示している。
【００８１】
各サブ命令コードの５つのフィールドは、先頭からオペコードと、条件実行フィールドと、ディスティネーションレジスタ指定フィールドと、２つのソースレジスタ指定フィールドを示している。各フィールドに書いている記号の先頭の２文字は、それぞれのステージとそれぞれの演算ユニットでの実行を示している。すなわち、参照記号ＷＭは、Ｗステージのメモリアクセスユニットでの実行であることを示している。
【００８２】
図１４に示す各パイプライン内の点線の矢印６１０，６１１は、バイパス処理によりデータの整合性を保証するデータ干渉の例を示している。矢印６１０のように同一メモリアクセスユニット３内でのデータ干渉は比較的バイパス経路を設け易い。そのためデータ干渉発生時のデータの整合性の保証は、ほとんどがバイパス処理により実行されている。また矢印６１１のように、異なるメモリアクセスユニット３，４間のデータ干渉でも、性能に影響が出る場合は、専用のバイパス経路を設けてデータの整合性を保証している。
【００８３】
バイパス経路でデータの整合性を保証する場合は、パイプラインを停止する必要がなくペナルティなしで処理を実行することができる。それに対して、実線の矢印６１２，６１３，６１４，６１５は、パイプラインインターロック処理によりデータの整合性を保証するデータ干渉の例を示している。矢印６１２では、同一メモリアクセスユニット内でもタイミング的に間に合わない処理の場合に、必要なデータが生成されるまでパイプラインのインターロック処理が必要となる。矢印また６１３のように、異なるメモリアクセスユニット３，４間では、ほとんどがバイパス処理不可能であるため、干渉しているデータが汎用レジスタ５内に書き込まれる迄、パイプラインのインターロック処理が必要となる。
【００８４】
また矢印６１４，６１５のように、Ｅステージのサブ命令コード６００ｂ、６０１ｂが、条件実行フラグを更新する命令である場合で、かつ、その直後のＤステージのサブ命令コードの条件実行フィールドが、条件実行判定が必要である場合に、そのフラグの値が更新されるまでパイプラインをインターロックさせる必要がある。このように、パイプラインインターロック処理では、干渉しているデータの整合性を保証するためにパイプラインを停止する必要があり、そのためペナルティが発生する。
【００８５】
この発明のマイクロプロセッサ１では、このパイプラインインターロックにより発生するペナルティを特定条件下で削除する機能を有するものであり、以降では、上記処理をパイプラインインターロックキャンセル処理と呼ぶ。
【００８６】
図１５は、命令デコードユニット２内に組み込まれているパイプラインインターロックキャンセル処理を制御する制御回路（図１，図１０〜図１３では煩雑さを避けるため図示せず）を示すブロック図であり、図において、７００は命令ＲＡＭ６から命令データバスＩ２ＩＤＢＵＳを介して送信される命令コードとフィードバック経路から送信される命令コードのいずれかを選択するセレクタである。セレクタ７００の動作は、セレクタ制御回路７２１により制御される。このセレクタ７００の出力は、パイプラインのＩステージ内のＩ２期間のタイミングであり、プリデコード用の命令コードとしてプリデコード回路７１０へ出力される。
【００８７】
また、７０１〜７０６は、命令コードを保持するレジスタである。７０１，７０２は、Ｄステージの命令コードを保持するレジスタである。７０３，７０４は、Ｅステージの命令コードを保持するレジスタである。７０５は、Ｗステージの命令コードを保持するレジスタである。また７０６は、フィードバック経路用のレジスタであり、レジスタ７０１の値を取り込んでセレクタ７００へ出力する。これらのレジスタ７０１〜７０６は、命令コードライト信号生成回路（実行停止回路）７２０より出力されるライトイネーブル信号により制御される。またレジスタ７０１〜７０５の出力は、各種デコーダ７１０，７１２，７１４〜７１９へ出力される。
【００８８】
７１０は、プリデコード用の命令コードをデコードし汎用レジスタ（ＧＰＲ）リード信号を生成するデコーダ回路である。７１１は、デコーダ７１０の結果を保持するＤ１同期のラッチである。すなわち汎用レジスタ（ＧＰＲ）５からの読み出しは、Ｄ１期間より開始する。７１２は、レジスタ７０２の出力をデコードし、データＲＡＭアクセスの制御信号を生成するデコーダ回路である。７１３は、デコーダ７１２の結果を保持するＭ１同期のラッチ（Ｍ１Ｌ）である。すなわちデータＲＡＭ７に対するアクセスは、Ｍ１より開始される。
【００８９】
７１７は、レジスタ７０１の出力をデコードし、Ｄ１同期のデータバス制御信号を生成するデコーダ回路である。７１４は、レジスタ７０２の出力をデコードし、Ｄ２同期のデータバス制御信号を生成するデコーダ回路である。７１５はレジスタ７０３の出力をデコードし、Ｅ１同期のデータバス制御信号を生成するデコーダ回路である。７１６は、レジスタ７０５の出力をデコードし、汎用レジスタ（ＧＰＲ）５のライト信号を生成するデコーダ回路である。汎用レジスタ（ＧＰＲ）５へのライトは、Ｗ１同期のライト信号によりＷ２期間中に実行される。
【００９０】
７１８は、バイパス処理を実行するためのデコーダ回路（衝突回避回路）である。７１９は、パイプラインインターロック処理を実行するためのデコーダ回路（データ干渉判定回路）である。また７２２は、ＰＳＷからの条件実行フラグとレジスタ７０２内の条件実行フィールドから条件実行を制御する条件実行制御回路である。条件実行制御回路７２２からキャンセル信号が各種デコーダ回路に出力されて条件実行の可否を制御している。
【００９１】
図１６は、パイプラインインターロック制御回路図を示すブロック図であり、図１５に示すデコーダ回路７１９に相当するものである。図において、８００〜８０３は、パイプラインインターロックが必要か否か検知する制御ブロックである。この制御ブロック８００は、メモリアクセスユニット３のパイプラインのＥステージでのデスティネーションレジスタ指定フィールド８１０とＤステージのソースレジスタ指定フィールド８１１とを比較器８１４で比較し、その比較結果とオペコード８１２，８１３との値からパイプラインインターロックを判定する回路８１５より構成されている。
【００９２】
８０２は、メモリアクセスユニット３のパイプラインのＤステージでの条件実行フィールド８１６が、０以上であることを比較器８１９で比較し、その比較結果とオペコード８１７，８１８との値からパイプラインインターロックを判定する回路８２０より構成されている。
【００９３】
８０３は、メモリアクセスユニット３のパイプラインのＤステージでのオペコード８２１とデスティネーションレジスタ指定フィールド８２２との値から、パイプラインフラッシュを判定する判定回路８２３より構成されている。
【００９４】
８０１は、異なる命令コードが入力する８００，８０２，８０３と同様な回路構成を有する制御ブロックであり、このような制御ブロックがパイプラインインターロック制御回路部には多数存在する。各制御ブロック８００〜８０３からの出力信号は、ＡＮＤ回路８３０〜８３３へ出力され、制御信号８５０がＨｉｇｈレベルである時にキャンセルされる。ＡＮＤ回路８３０〜８３３からの出力は、タイミング調整回路８３５〜８３８へ出力され、これによりパイプラインインターロック制御用の必要なタイミングの信号８５１〜８５４が生成される。パイプラインインターロック制御信号８５１〜８５４は、ＯＲ回路８３９へ入力され、ラッチを介して信号８５５として出力される。
【００９５】
図１７は、図１５に示す条件実行制御回路７２２を示すブロック図であり、図において、８６０，８６１は、メモリアクセス部及び整数演算部それぞれの３ビットの条件実行フィールドをデコードするデコード回路である。８６２，８６３は、プロセッサ状態ワード（ＰＳＷ）から得られる条件実行フラグ８８０とデコーダ８６０，８６１のデコード結果とから条件実行命令を実行するか否かを判定する条件実行判定回路である。
【００９６】
条件実行判定回路８６２，８６３の出力は、ＯＲ回路８６４，８６５に出力され、パイプラインインターロック信号８８１とＯＲ処理された後に出力される。さらにそれらの信号は、８６６〜８７１のＥ１，Ｅ２，Ｗ１同期のラッチで必要なタイミングに加工され、キャンセル信号として出力される。８８４ａ，８８４ｂ，８８４ｃ，８８５ａ，８８５ｂ，８８５ｃは、ラッチ８８６〜８７１の更新処理を制御するライトイネーブル信号である。
【００９７】
図１８は、パイパス制御回路図を示すブロック図であり、図１５に示すデコーダ回路７１８に相当するものである。図において、８９０，８９１はバイパス処理が必要か否か検知する制御ブロックである。制御ブロック８９０では、メモリアクセスユニット３のＤステージのソースレジスタ指定フィールド８９２と整数演算ユニット４のＷステージのデスティネーションレジスタ指定フィールド８９３とを比較器８９６で比較し、その結果とオペコード８９４，８９５との値からバイパス処理が必要か否かを判定する回路８９７より構成されている。８９１は、異なる命令コードを入力するバイパス制御回路８９０と同様な回路構成を有する制御ブロックであり、このような制御ブロックがバイパス制御回路部には複数個存在する。各制御ブロック８９０，８９１からの出力は、ＯＲ回路８９８，８９９へ出力され、そこで制御信号９００とＯＲ処理されてバイパス経路選択信号として出力される。
【００９８】
パイプラインインターロックキャンセル処理
次に、この発明のマイクロプロセッサ１でのパイプラインインターロックキャンセル処理に係わる各実施の形態について説明する。この発明のマイクロプロセッサ１におけるパイプラインインターロックキャンセル処理では、パイプラインインターロックを発生させる命令コードが、条件実行判定により不実行となった場合に、そのパイプラインインターロック処理をキャンセルし、パイプラインのペナルティを削減するものである。
【００９９】
実施の形態１．
図１９は、この発明の実施の形態１によるマイクロプロセッサ１のメモリアクセス時のパイプラインインターロックキャンセル処理を示すタイミング図であり、図において、白の部分はメモリアクセスユニット３で実行されているパイプライン、斜線部分は、整数演算ユニット４で実行されているパイプラインを示す。
【０１００】
９０１は、メモリアクセスユニット３で実行されるロード命令のパイプラインである。９０２はパイプライン９０１の後続のパイプラインである。９０３は条件実行判定で不実行となるロード命令のパイプラインである。９０４はパイプライン９０３の後続のパイプラインである。
【０１０１】
実施の形態１のマイクロプロセッサ１では、ロード命令のパイプライン９０１では、Ｄ１で汎用レジスタ（ＧＰＲ）５からデータの読み出しを開始し、読み出したデータを用いてＤ２でデータＲＡＭ７に対するアドレス計算を行う。そしてＭステージからデータＲＡＭリクエスト信号を出力する。そのリクエストに対するデータの読み出しが２クロック後である場合、そのデータが到達する２クロックの間、パイプライン９０１のＭステージはインターロックされる。そして後続のパイプライン９０２のＤステージもパイプラインが停止されてペナルティが発生する。
【０１０２】
不実行となるロード命令のパイプライン９０３では、Ｄステージで条件実行判定を行い、Ｄ２から条件実行キャンセル信号を出力する。そしてそのキャンセル信号によりデータＲＡＭリクエスト信号をキャンセルし、Ｍステージ以降のパイプラインをキャンセルする。これにより実施の形態１のマイクロプロセッサでは、Ｍステージでのパイプラインインターロックが発生しないため、後続パイプライン９０４もペナルティなしに実行することが可能となる。
【０１０３】
次に動作について説明する。
以下では、図１０〜図１３に示すこの発明のマイクロプロセッサ１のブロック図および図１５に示す命令デコードユニット２内に組み込まれている制御回路のブロック図、および図１９に示すメモリアクセス時のパイプラインインターロックキャンセル処理を示すタイミング図を用いて、メモリアクセス時のパイプラインインターロックキャンセル処理について説明する。
【０１０４】
図１９に示すパイプラインのロード命令が、図１０〜図１３に示す命令ＲＡＭ６からＩ２ＩＤＢＵＳを介して読み出され、図１５に示すセレクタ７００を介して各制御回路に転送され読み出された命令が転送される。デコーダ回路７１０では、アドレス計算用のソースデータの読み出しを行うための汎用レジスタ（ＧＰＲ）５への読み出し信号の生成を行う。そして図１２に示す加算器３２では、Ｄ１Ｓ１ＢＵＳ、Ｄ１Ｓ２ＢＵＳへ読み出されたソースデータを加算し、アドレスの計算を行う。そして生成されたアドレスは、オペランドアドレスバスＭ１ＯＡＢＵＳへ出力される。
【０１０５】
データＲＡＭリクエスト信号は、図１５のレジスタ７０２の命令コードをデコード回路７１２でデコードし、ラッチ７１３を介してＭステージより出力される。そしてデータＲＡＭより読み出されたデータは、図１０〜図１３に示すオペランドデータバスＭ２ＯＤＢＵＳ経由で符号拡張部３３を介してロードデータレジスタ５３に取り込まれる。そしてレジスタ５３の値は、ライトバックバスＷ１Ｗ３ＥＢＵＳ，Ｗ１Ｗ３ＯＢＵＳを介して汎用レジスタ（ＧＰＲ）５に書き込まれる。
【０１０６】
汎用レジスタ（ＧＰＲ）５への書き込み信号であるＧＰＲライト信号は、図１５に示すレジスタ７０５の値をデコーダ回路７１６でデコードして生成する。データＲＡＭアクセスでパイプラインインターロックが発生した場合は、図１５に示す命令コードライト信号生成回路（実行停止回路）７２０で命令コードの更新を制御するように信号を生成し、レジスタ７０１〜７０５の更新をインターロック期間中停止する。このロード命令が条件実行判定で不実行である場合は、図１５に示す条件実行制御回路７２２から条件実行キャンセル信号７２３がデコーダ回路７１２，７１６に出力されて、データＲＡＭリクエスト信号及び汎用レジスタライト信号がキャンセルされる。
【０１０７】
以上のように、この実施の形態１によれば、ロード命令が条件実行判定で不実行となった場合に、ロードしたデータを汎用レジスタ（ＧＰＲ）５へ書き込む処理のみをキャンセルするのではなく、データＲＡＭアクセス処理の動作からキャンセルするので、先行命令と現在実行する命令のパイプライン間にデータ干渉が発生した場合におけるパイプラインの停止動作をキャンセルするのでパイプラインのペナルティを削減することができる。
【０１０８】
実施の形態２．
図２０は、この発明の実施の形態２によるマイクロプロセッサ１のアドレス計算データのパイプラインインターロックキャンセル処理を示すタイミング図であり、図において、白の部分はメモリアクセスユニット３で実行されているパイプライン、斜線部分は、整数演算ユニット４で実行されているパイプラインを示す。
【０１０９】
９０５は、メモリアクセスユニット３で実行される加算命令のパイプラインである。９０６は、パイプライン９０５の後続のロード命令のパイプラインである。９０７は、条件実行判定で不実行となる加算命令のパイプラインである。９０８は、パイプライン９０７の後続のロード命令のパイプラインである。
【０１１０】
この実施の形態２のマイクロプロセッサ１では、パイプライン９０５の加算命令の書き込みレジスタｒ１０から、パイプライン９０６のロード命令のアドレス計算用のデータ読み出しが発生した場合、そのデータ干渉をパイプライン９０６のＤステージで検知し、パイプラインインターロック信号を生成する。パイプラインインターロック信号が生成されると、パイプライン９０６のＤ／Ａステージを１クロック停止するためのセレクタ信号を生成する。そしてパイプライン９０５のＥステージで加算されたデータを、パイプライン９０６にバイパスするための制御信号を生成し、バイパス処理を実行する。このようなアドレス計算用データのデータ干渉が発生した場合、パイプラインインターロックのためのペナルティが１クロック発生する。
【０１１１】
不実行となる加算命令のパイプライン９０７では、Ｄステージで条件実行判定を行い、Ｄ２から条件実行キャンセル信号を出力する。そのキャンセル信号により、パイプライン９０８のＤステージで検知するパイプラインインターロック信号をキャンセルする。これにより、実施の形態２のマイクロプロセッサ１では、パイプライン９０８のアドレス計算用データのためのパイプラインインターロックが発生しないため、後続パイプライン９０８をペナルティなしに実行することができる。
【０１１２】
次に動作について説明する。
以下では、図１０〜図１３に示すこの発明のマイクロプロセッサ１のブロック図および図１５に示す命令デコードユニット２内に組み込まれている制御回路のブロック図、および図２０に示すアドレス計算データのパイプラインインターロックキャンセル処理を示すタイミング図を用いて、アドレス計算データのパイプラインインターロックキャンセル処理について説明する。
【０１１３】
図２０に示すパイプライン９０６のロード命令が、図１０〜図１３に示す命令ＲＡＭ６からＩ２ＩＤＢＵＳを介して読み出されると、図１５に示すセレクタ７００を介して各制御回路に転送される。デコーダ回路（データ干渉判定回路）７１９では、セレクタ７００からのロード命令の命令コードと、Ｄステージの命令コードを保持するレジスタ７０１の出力とを比較し、パイプラインインターロックが発生していることを検知する。パイプラインインターロック信号７３１，７３５を生成し、セレクタ制御回路７２１と命令コードライト信号生成回路７２０とデコーダ回路７１８へ出力する。
【０１１４】
命令コードライト信号生成回路７２０からはライト信号が出力され、レジスタ７０１の値をフィードバックレジスタ７０６に取り込む。そしてセレクタ制御回路７２１では、フィードバックレジスタ７０６の値を選択するようにセレクタ７００を制御して、そのロード命令のコードを各制御回路に出力する。この処理により、図２０に示すパイプライン９０６のＤ／Ａステージが１クロックインターロックされることになる。デコーダ回路７１８では、デコーダ回路７１９からのパイプラインインターロック信号７３５を受けてバイパス経路選択信号を生成し、図１０〜図１３に示すバイパス経路２０３を経由してＡＬＵ１５で加算した結果データを取り込んだライトバックレジスタ５１の値を、Ｄ１同期バス群に出力する。
【０１１５】
次に、そのバイパスされたデータを用いて、図２０に示すパイプライン９０６のロード命令は、図１０〜図１３に示すアドレス計算用の加算器３２でデータＲＡＭアクセス用のアドレスを計算し、以降のステージの処理を実行する。図２０に示すパイプライン９０７の加算命令のように、条件実行判定で不実行となった場合、図１５に示す条件実行制御回路７２２から条件実行キャンセル信号７２３がデコーダ回路７１９へ出力され、パイプラインインターロック信号をキャンセルする。
【０１１６】
以上のように、この実施の形態２によれば、ロード命令のアドレス計算用データが同じ整数演算ユニット４で実行される先行命令の結果データと干渉を起こしており、かつその先行命令が条件実行判定で不実行となった場合に、その条件実行キャンセル信号でパイプラインインターロック信号とバイパス経路選択信号をキャンセルするので、パイプラインのペナルティを削除することができる。
【０１１７】
実施の形態３．
図２１および図２２は、この発明の実施の形態３によるマイクロプロセッサ１の異なる実行ユニット間でのパイプラインインターロックキャンセル処理を示すタイミング図であり、図において、白の部分はメモリアクセスユニット３で実行されているパイプライン、斜線部分は、整数演算ユニット４で実行されているパイプラインを示す。この実施の形態３の説明では、先ず図２１に示す異なる実行ユニット間のパイプラインインターロックキャンセル処理の例を説明し、次に図２２に示す異なる実行ユニット間でのパイプラインインターロックキャンセル処理の例を説明する。
【０１１８】
図２１において、９１１は、整数演算ユニット４で実行される加算命令のパイプラインである。９１２は、パイプライン９１１の後続のメモリアクセスユニット３で実行されるロード命令のパイプラインである。９１３は、条件実行判定で不実行となる整数演算ユニット４で実行される加算命令のパイプラインである。９１４は、パイプライン９１３の後続のメモリアクセスユニット３で実行されるロード命令のパイプラインである。
【０１１９】
実施の形態３のマイクロプロセッサ１では、パイプライン９１１の加算命令の書き込みレジスタｒ１０からパイプライン９１２のロード命令のアドレス計算用のデータ読み出しが発生した場合、そのデータ干渉をパイプライン９１２のＤステージで検知し、パイプラインインターロック信号を生成する。パイプラインインターロック信号は、パイプライン９１１のＷステージが完了しデータｒ１０が汎用レジスタ（ＧＰＲ）５内に書き込まれてから、パイプライン９１２のＤ／Ａステージでの汎用レジスタ（ＧＰＲ）５からの読み出しが実行できるまでの２クロック分生成される。そして、パイプラインインターロック信号は、パイプライン９１２のＤ／Ａステージを２クロック停止するためのセレクタ信号を生成する。このようなアドレス計算用データのデータ干渉が発生した場合、パイプラインインターロックのためのペナルティが２クロック発生する。
【０１２０】
不実行となる加算命令のパイプライン９１３では、Ｄステージで条件実行判定を行い、Ｄ２から条件実行キャンセル信号を出力する。そしてそのキャンセル信号により、パイプライン９１４のＤステージで検知するパイプラインインターロック信号をキャンセルする。これにより、実施の形態３のマイクロプロセッサ１では、パイプライン９１４のアドレス計算用データのためのパイプラインインターロックが発生しないために、後続パイプライン９１４をペナルティなしに実行することが可能となる。
【０１２１】
次に動作について説明する。
以下では、図１０〜図１３に示すこの発明のマイクロプロセッサ１のブロック図および図１５に示す命令デコードユニット２内に組み込まれている制御回路のブロック図、および図２１に示す異なる実行ユニット間でのパイプラインインターロックキャンセル処理を示すタイミング図を用いて、異なる実行ユニット間でのパイプラインインターロックキャンセル処理について説明する。
【０１２２】
図２１に示すパイプライン９１２のロード命令が、図１０〜図１３に示す命令ＲＡＭ６からＩ２ＩＤＢＵＳを介して読み出されると、読み出されたロード命令は、図１５に示すセレクタ７００を介して各制御回路に転送される。デコーダ回路（データ干渉判定回路）７１９では、セレクタ７００からのロード命令の命令コードと、Ｄステージの命令コードとを保持するレジスタ７０２の出力とを比較し、パイプラインインターロックが発生していることを検知する。そして、パイプラインインターロック信号７３１を生成し、セレクタ制御回路７２１と命令コードライト信号生成回路７２０に出力する。命令コードライト信号生成回路７２０からはライト信号が出力され、レジスタ７０１の値をフィードバックレジスタ７０６に取り込む。
【０１２３】
そしてセレクタ制御回路７２１は、フィードバックレジスタ７０６の値を選択するようにセレクタ７００を制御して、そのロード命令のコードを各制御回路に出力する。この処理により、図２１に示すのパイプライン９１２のＤ／Ａステージが２クロックインターロックされることになる。
【０１２４】
図１０〜図１３に示す整数演算ユニット４内の加算器２０で実行された図２１に示すパイプライン９１１の加算処理結果が、レジスタ５５及びライトバックレジスタ５４を介して汎用レジスタ（ＧＰＲ）５内にＷ２期間中に書き込まれてから、図２１に示すパイプライン９１２のロード命令では汎用レジスタ（ＧＰＲ）５からのデータのリード動作を開始し、アドレス加算器３２でデータＲＡＭアクセス用のアドレスを生成する。
【０１２５】
以上のように、図２１に示す異なる実行ユニット間のパイプラインインターロックキャンセル処理を実行するマイクロプロセッサ１によれば、パイプライン９１３の加算命令のように、条件実行判定で不実行となった場合、図１５に示す条件実行制御回路７２２から条件実行キャンセル信号７２３がデコーダ回路７１９に出力され、パイプラインインターロック信号をキャンセルする。
【０１２６】
次に、図２２に示す異なる実行ユニット間のパイプラインインターロックキャンセル処理のタイミング図、図１０〜図１３に示すこの発明のマイクロプロセッサ１のブロック図、および図１５に示す命令デコードユニット２内に組み込まれている制御回路のブロック図を用いて、図２１に示す異なる実行ユニット間でのパイプラインインターロックキャンセル処理の他の例に関して説明する。
【０１２７】
図２２において、９１５は整数演算ユニット４で実行される加算命令のパイプライン、９１６はパイプライン９１５の１クロック後のメモリアクセス部で実行されるロード命令のパイプラインである。９１７は、条件実行判定で不実行となる整数演算ユニット４で実行される加算命令のパイプラインである。９１８は、パイプライン９１７の１クロック後のメモリアクセス部で実行されるロード命令のパイプラインである。
【０１２８】
この実施の形態３のマイクロプロセッサ１では前記した機能に加え、さらに以下の機能を備える。即ち、実施の形態３のマイクロプロセッサ１では、パイプライン９１５の加算命令の書き込みレジスタｒ１０からパイプライン９１６のロード命令のアドレス計算用のデータ読み出しが発生した場合、そのデータ干渉をパイプライン９１６のＤステージで検知し、パイプラインインターロック信号を生成する。パイプラインインターロック信号は、パイプライン９１５のＷステージが完了しデータｒ１０がＧＰＲに書き込まれてから、パイプライン９１６のＤ／Ａステージでの汎用レジスタ（ＧＰＲ）５からのデータの読み出しが実行できるまでの１クロック分生成される。そしてパイプラインインターロック信号は、パイプライン９１６のＤ／Ａステージを１クロック停止するためのセレクタ信号を生成する。このようなアドレス計算用データのデータ干渉が発生した場合、パイプラインインターロックのためのペナルティが１クロック発生する。
【０１２９】
不実行となる加算命令のパイプライン９１７では、Ｄステージで条件実行判定を行い、Ｄ２から条件実行キャンセル信号を出力する。そしてそのキャンセル信号により、パイプライン９１８のＤステージで検知するパイプラインインターロック信号をキャンセルする。これにより、実施の形態３のマイクロプロセッサ１は、パイプライン９１８のアドレス計算用データのためのパイプラインインターロックが発生しないため、後続パイプライン９１８をペナルティなしに実行することができるものである。
【０１３０】
次に動作について説明する。
以下では、異なる実行ユニット間のパイプラインインターロックキャンセル処理の他の例について説明する。図２２に示すパイプライン９１６のロード命令が、図１０〜図１３に示す命令ＲＡＭ６からＩ２ＩＤＢＵＳを介して読み出されると、図１５に示すセレクタ７００を介して各制御回路に転送される。
【０１３１】
図１５に示すデコーダ回路７１９では、セレクタ７００から送信されたロード命令の命令コードと、Ｅステージの命令コードを保持するレジスタ７０４の出力とを比較し、パイプラインインターロックが発生していることを検知する。そしてパイプラインインターロック信号７３１を生成し、セレクタ制御回路７２１と命令コードライト信号生成回路７２０に出力する。
【０１３２】
命令コードライト信号生成回路７２０はライト信号を出力し、レジスタ７０１の値をフィードバックレジスタ７０６内に取り込む。そしてセレクタ制御回路７２１では、フィードバックレジスタ７０６の値を選択するようにセレクタ７００を制御して、そのロード命令のコードを各制御回路に出力する。この処理により、図２２に示すパイプライン９１６のＤ／Ａステージが１クロックインターロックされることになる。
【０１３３】
図１０〜図１３に示す整数演算ユニット４内の加算器２０で実行された図２２に示すパイプライン９１５の加算処理結果が、レジスタ５５及びライトバックレジスタ５４を介して汎用レジスタ（ＧＰＲ）５内へＷ２期間中に書き込まれた後、図２２に示すパイプライン９１６のロード命令では、汎用レジスタ（ＧＰＲ）５に対するデータのリード動作を開始し、アドレス加算器３２でデータＲＡＭアクセス用のアドレスを生成する。
【０１３４】
図２２に示すパイプライン９１７の加算命令のように、条件実行判定で不実行となった場合、図１５に示す条件実行制御回路７２２から条件実行キャンセル信号７２３がデコーダ回路（データ干渉判定回路）７１９へ出力され、パイプラインインターロック信号をキャンセルする。
【０１３５】
以上のように、この実施の形態３によれば、異なる命令実行ユニット間でデータ干渉を起こしており、かつその先行命令が条件実行判定で不実行となった場合に、その条件実行キャンセル信号でパイプラインインターロック信号をキャンセルするので、パイプラインのペナルティを削除することができる。
【０１３６】
実施の形態４．
図２３は、この発明の実施の形態４によるマイクロプロセッサ１の乗算データのパイプラインインターロックキャンセル処理を示すタイミング図であり、図において、白の部分はメモリアクセスユニット３で実行されているパイプライン、斜線部分は、整数演算ユニット４で実行されているパイプラインを示す。
【０１３７】
９２１は、メモリアクセスユニット３で実行されるロード命令のパイプラインである。９２２は、パイプライン９２１の後続の整数演算ユニット４で実行される乗算命令のパイプラインである。９２３は、条件実行判定で不実行となるメモリアクセスユニット３で実行されるロード命令のパイプラインである。９２４は、パイプライン９２３の後続の整数演算ユニット４で実行される乗算命令のパイプラインである。
【０１３８】
実施の形態４のマイクロプロセッサ１では、図２３に示すパイプライン９２１のロード命令の書き込みレジスタｒ２０からパイプライン９２２の乗算命令のソースデータ読み出しが発生した場合、そのデータ干渉をパイプライン９２２のＤステージで検知し、パイプラインインターロック信号を生成する。パイプラインインターロック信号が生成されると、パイプライン９２２のＤステージを１クロック停止するためのセレクタ信号を生成する。そして、パイプライン９２１のＭステージでロードしたデータをパイプライン９２２にバイパスするための制御信号を生成しバイパス処理を実行する。
【０１３９】
上記のように、乗算データのデータ干渉が発生した場合、パイプラインインターロックのためのペナルティが１クロック発生する。不実行となる加算命令のパイプライン９２３では、Ｄステージで条件実行判定を行い、Ｄ２から条件実行キャンセル信号を出力する。そしてそのキャンセル信号により、パイプライン９２４のＤステージで検知するパイプラインインターロック信号をキャンセルする。これにより、実施の形態４のマイクロプロセッサ１では、パイプライン９２４の乗算データのためのパイプラインインターロックが発生しないので、後続パイプライン９２４をペナルティなしに実行することができるものである。
【０１４０】
次に動作について説明する。
以下では、図１０〜図１３に示すこの発明のマイクロプロセッサ１のブロック図および図１５に示す命令デコードユニット２内に組み込まれている制御回路のブロック図、および図２３に示す乗算データのパイプラインインターロックキャンセル処理を示すタイミング図を用いて、乗算データのパイプラインインターロックキャンセル処理について説明する。
【０１４１】
図２３に示すパイプライン９２２の乗算命令が、図１０〜図１３に示す命令ＲＡＭ６からＩ２ＩＤＢＵＳを介して読み出されると、読み出された命令は、図１５に示すセレクタ７００を介して各制御回路に転送される。図１５に示すデコーダ回路（データ干渉判定回路）７１９では、セレクタ７００からの乗算命令の命令コードと、Ｄステージの命令コードを保持するレジスタ７０２の出力とを比較し、パイプラインインターロックが発生していることを検知する。そして、パイプラインインターロック信号７３１，７３５を生成し、セレクタ制御回路７２１と命令コードライト信号生成回路７２０とデコーダ回路７１８へ出力する。
【０１４２】
命令コードライト信号生成回路７２０からはライト信号が出力され、レジスタ７０１の値をフィードバックレジスタ７０６に取り込む。そしてセレクタ制御回路７２１では、フィードバックレジスタ７０６の値を選択するようにセレクタ７００を制御して、その乗算命令のコードを各制御回路に出力する。この処理により、図２３に示すのパイプライン９２２のＤステージが１クロックインターロックされることになる。
【０１４３】
図１５に示すデコーダ回路７１８では、デコーダ回路７１９からのパイプラインインターロック信号７３５を受け、バイパス経路選択信号をさらに１クロック余分に生成し、図１０〜図１３に示すバイパス経路２０８を経由して、オペランドデータバスＭ２ＯＤＢＵＳの値を符号拡張部２００で処理した値を整数演算ユニット４のＤ２同期バス群へ出力する。そして、図２３に示すパイプライン９２２の乗算命令は、そのバイパスされたデータを、図１０〜図１３に示す乗算器１７の入力ラッチ２２内４に取り込み、乗算処理を実行し、それ以降のステージを継続する。
【０１４４】
図２３に示すのパイプライン９２３のロード命令のように条件実行判定で不実行となった場合、図１５に示す条件実行制御回路７２２から条件実行キャンセル信号７２３がデ、コーダ回路７１９に出力され、パイプラインインターロック信号をキャンセルする。
【０１４５】
以上のように、この実施の形態４によれば、メモリアクセスユニット３で実行されるロード命令のロードデータが、整数演算ユニット４で実行される乗算命令のソースデータとデータ干渉を起こしており、かつその先行ロード命令が条件実行判定で不実行となった場合に、その条件実行キャンセル信号でパイプラインインターロック信号とバイパス経路選択信号をキャンセルするので、パイプラインのペナルティを削除することができる。
【０１４６】
実施の形態５．
図２４は、この発明の実施の形態５によるマイクロプロセッサ１のキャリーフラグのパイプラインインターロックキャンセル処理を示すタイミング図であり、図において、白の部分はメモリアクセスユニット３で実行されているパイプライン、斜線部分は、整数演算ユニット４で実行されているパイプラインを示す。
【０１４７】
９２５は、メモリアクセスユニット３で実行される加算命令のパイプラインである。９２６は、パイプライン９２５の後続のキャリーフラグを用いる加算命令のパイプラインである。９２７は、条件実行判定で不実行となるメモリアクセスユニット３で実行される加算命令のパイプラインである。９２８は、パイプライン９２７の後続のキャリーフラグを用いる加算命令のパイプラインである。
【０１４８】
実施の形態５のマイクロプロセッサ１では、パイプライン９２５の加算命令がキャリーフラグを更新し、パイプライン９２６の命令がその更新されたキャリーフラグを用いて加算処理を行う場合、そのキャリーフラグの干渉をパイプライン９２６のＤステージで検知し、パイプラインインターロック信号を生成する。パイプラインインターロック信号が生成されると、パイプライン９２６のＤステージを１クロック停止するためのセレクタ信号を生成する。そして、キャリーセレクト信号を生成して、パイプライン９２５のＷ１で更新されたキャリーフラグをパイプライン９２６に転送する。
【０１４９】
このようなキャリーフラグの干渉が発生した場合、パイプラインインターロックのためのペナルティが１クロック発生する。不実行となる加算命令のパイプライン９２７では、Ｄステージで条件実行判定を行い、Ｄ２から条件実行キャンセル信号を出力する。そしてそのキャンセル信号により、パイプライン９２８のＤステージで検知するパイプラインインターロック信号をキャンセルする。これにより、実施の形態５のマイクロプロセッサ１は、パイプライン９２８のキャリーフラグのためのパイプラインインターロックが発生しないために、後続パイプライン９２８をペナルティなしに実行することができるものである。
【０１５０】
次に動作について説明する。
以下では、図１０〜図１３に示すこの発明のマイクロプロセッサ１のブロック図および図１５に示す命令デコードユニット２内に組み込まれている制御回路のブロック図、および図２４に示すキャリーフラグのパイプラインインターロックキャンセル処理を示すタイミング図を用いて、キャリーフラグのパイプラインインターロックキャンセル処理について説明する。
【０１５１】
図２４に示すパイプライン９２６のキャリーフラグを用いる加算命令が、図１０〜図１３に示す命令ＲＡＭ６からＩ２ＩＤＢＵＳを介して読み出されると、図１５に示すセレクタ７００を介して各制御回路に転送される。図１５に示すデコーダ回路（フラグ干渉判定回路）７１９では、セレクタ７００からのその加算命令の命令コードと、Ｄステージの命令コードを保持するレジスタ７０２の出力を比較し、パイプラインインターロックが発生していることを検知する。そしてパイプラインインターロック信号７３１を生成し、セレクタ制御回路７２１と命令コードライト信号生成回路７２０に出力する。
【０１５２】
命令コードライト信号生成回路７２０からはライト信号が出力され、レジスタ７０１の値をフィードバックレジスタ７０６内に取り込む。そしてセレクタ制御回路７２１は、フィードバックレジスタ７０６の値を選択するようにセレクタ７００を制御して、その乗算命令のコードを各制御回路に出力する。この処理により、図２４に示すパイプライン９２６のＤステージが１クロックインターロックされることになる。
【０１５３】
図１５に示すデコーダ７１４では、２クロック間キャリーフラグを用いる加算命令のコードを保持しているレジスタ７０２の値をデコードし、キャリーセレクト信号を２クロック間生成する。その信号により、図１０〜図１３に示すフラグ経路６２から更新されたキャリーフラグの値がＡＬＵ１５内へ入力され、そのフラグ値を用いた加算命令を実行する。
【０１５４】
図２４に示すパイプライン９２７の加算命令のように、条件実行判定で不実行となった場合、図１５に示す条件実行制御回路７２２から条件実行キャンセル信号７２３がデコーダ回路７１９へ出力され、パイプラインインターロック信号をキャンセルする。
【０１５５】
以上のように、この実施の形態５によれば、あるフラグを用いる命令の先行命令がそのフラグを更新し、かつその先行命令が条件実行判定で不実行となった場合に、その条件実行キャンセル信号でパイプラインインターロック信号をキャンセルするので、パイプラインのペナルティを削除することができる。
【０１５６】
実施の形態６．
図２５は、この発明の実施の形態６によるマイクロプロセッサ１の条件実行フラグのパイプラインインターロックキャンセル処理を示すタイミング図であり、図において、白の部分はメモリアクセスユニット３で実行されているパイプライン、斜線部分は、整数演算ユニット４で実行されているパイプラインを示す。
【０１５７】
９３１は、メモリアクセスユニット３で実行される比較命令のパイプラインである。９３２は、パイプライン９３１の後続の条件実行判定を伴う加算命令のパイプラインである。９３３は、条件実行判定で不実行となるメモリアクセスユニット３で実行される比較命令のパイプラインである。９３４は、パイプライン９３３の後続の条件実行判定を伴う加算命令のパイプラインである。
【０１５８】
実施の形態６のマイクロプロセッサ１では、パイプライン９３１の比較命令が条件実行フラグを更新し、パイプライン９３２の命令がその更新された条件実行フラグを用いて条件実行判定を伴う場合、その条件実行フラグの干渉をパイプライン９３２のＤステージで検知し、パイプラインインターロック信号を生成する。パイプラインインターロック信号が生成されると、パイプライン９３２のＤステージを１クロック停止するためのセレクタ信号を生成する。そして条件実行判定期間中信号を生成して、パイプライン９３１のＷ１で更新された条件実行フラグをパイプライン９３２で条件実行の判定に用いる。このような条件実行フラグの干渉が発生した場合、パイプラインインターロックのためのペナルティが１クロック発生する。
【０１５９】
不実行となる比較命令のパイプライン９３３では、Ｄステージで条件実行判定を行い、Ｄ２から条件実行キャンセル信号を出力する。そして、そのキャンセル信号により、パイプライン９３４のＤステージで検知するパイプラインインターロック信号をキャンセルする。これにより、実施の形態６のマイクロプロセッサ１では、パイプライン９３４の条件実行フラグのためのパイプラインインターロックが発生しないために、後続パイプライン９３４をペナルティなしに実行することができるものである。
【０１６０】
次に動作について説明する。
以下では、図１０〜図１３に示すこの発明のマイクロプロセッサ１のブロック図および図１５に示す命令デコードユニット２内に組み込まれている制御回路のブロック図、および図２５に示す条件実行フラグのパイプラインインターロックキャンセル処理を示すタイミング図を用いて、条件実行フラグのパイプラインインターロックキャンセル処理について説明する。
【０１６１】
図２５に示すパイプライン９３２の条件実行判定を伴う加算命令が、図１０〜図１３に示す命令ＲＡＭ６からＩ２ＩＤＢＵＳを介して読み出されると、図１５に示すセレクタ７００を介して各制御回路に転送される。デコーダ回路（フラグ干渉判定回路）７１９は、セレクタ７００からその加算命令の命令コードと、Ｄステージの命令コードを保持するレジスタ７０２の出力とを比較し、パイプラインインターロックが発生していることを検知する。そして、パイプラインインターロック信号７３１を生成し、セレクタ制御回路７２１と命令コードライト信号生成回路７２０へ出力する。命令コードライト信号生成回路７２０からレジスタ７０１へライト信号が出力され、レジスタ７０１の値をフィードバックレジスタ７０６内へ取り込む。そして、セレクタ制御回路７２１は、フィードバックレジスタ７０６の値を選択するようにセレクタ７００を制御して、その乗算命令のコードを各制御回路に出力する。この処理により、図２５に示すパイプライン９３２のＤステージが１クロックインターロックされることになる。
【０１６２】
図２５に示すパイプライン９３３の比較命令のように、条件実行判定で不実行となった場合、図１５に示す条件実行制御回路７２２から条件実行キャンセル信号７２３がデコーダ回路７１９へ出力され、パイプラインインターロック信号をキャンセルする。
【０１６３】
以上のように、この実施の形態６によれば、条件実行判定を伴う命令の先行命令が条件実行フラグを更新し、かつその先行命令が条件実行判定で不実行となった場合に、その条件実行キャンセル信号によりパイプラインインターロック信号をキャンセルするので、パイプラインのペナルティを削除することができる。
【０１６４】
実施の形態７．
図２６は、この発明の実施の形態７によるマイクロプロセッサ１のモードフラグ更新時のパイプラインインターロックキャンセル処理を示すタイミング図であり、図において、白の部分はメモリアクセスユニット３で実行されているパイプライン、斜線部分は、整数演算ユニット４で実行されているパイプラインを示す。
【０１６５】
９３５は、メモリアクセスユニット３で実行される制御レジスタデータ転送命令のパイプラインである。９３６は、パイプライン９３５の後続命令のパイプラインである。９３７は、条件実行判定で不実行となるメモリアクセスユニット３で実行される制御レジスタデータ転送命令のパイプラインである。９３８は、パイプライン９３７の後続命令のパイプラインである。
【０１６６】
実施の形態７のマイクロプロセッサ１では、パイプライン９３５の制御レジスタデータ転送命令がモードフラグを更新した場合、そのモードフラグの更新をパイプライン９２５のＤステージで検知し、パイプラインインターロック信号を生成する。パイプラインインターロック信号が生成されると、パイプライン９３５のＥ２で更新されたモードフラグの値で後続命令を実行できるまで、後続命令が２クロック間インターロックされる。このようなモードフラグの更新が発生した場合、パイプラインインターロックのためのペナルティが２クロック発生する。
【０１６７】
不実行となる制御レジスタデータ転送命令のパイプライン９３７では、Ｄステージで条件実行判定を行い、Ｄ２から条件実行キャンセル信号を出力する。そして、そのキャンセル信号によりパイプラインインターロック信号をキャンセルする。これにより、実施の形態７のマイクロプロセッサ１は、後続パイプライン９３８をペナルティなしに実行することができるものである。
【０１６８】
次に動作について説明する。
以下では、図１０〜図１３に示すこの発明のマイクロプロセッサ１のブロック図および図１５に示す命令デコードユニット２内に組み込まれている制御回路のブロック図、および図２６に示すモードフラグ更新時のパイプラインインターロックキャンセル処理を示すタイミング図を用いて、モードフラグ更新時のパイプラインインターロックキャンセル処理について説明する。
【０１６９】
図２６に示すパイプライン９３５のモードフラグを更新する制御レジスタデータ転送命令が、図１０〜図１３に示す命令ＲＡＭ６からＩ２ＩＤＢＵＳを介して読み出されると、読み出された命令は、図１５に示すセレクタ７００を介して各制御回路に転送される。デコーダ回路（モードフラグ判定回路）７１９では、セレクタ７００からのその制御レジスタデータ転送命令の命令コードからパイプラインインターロック信号を生成する。そしてそのパイプラインインターロック信号７３４を生成し、デコーダ回路７１７に出力する。デコーダ回路７１７では、図１０〜図１３に示す命令アドレスレジスタ２９を更新する制御信号が生成されている。その更新制御信号をパイプラインインターロック信号でキャンセルすることにより、命令アドレスレジスタの更新を停止する。これにより、図２６に示す後続のパイプライン９３６のＩＦステージを停止することが可能である。
【０１７０】
図２６に示すパイプライン９３７の制御レジスタデータ転送命令のように条件実行判定で不実行となった場合、図１５に示す条件実行制御回路７２２から条件実行キャンセル信号７２３がデコーダ回路７１９へ出力され、パイプラインインターロック信号をキャンセルする。
【０１７１】
以上のように、この実施の形態７によれば、モードフラグを更新する命令が条件実行判定で不実行となった場合に、その条件実行キャンセル信号で後続命令のパイプラインインターロック信号をキャンセルするので、パイプラインのペナルティを削除することができる。
【０１７２】
実施の形態８．
図２７は、この発明の実施の形態８によるマイクロプロセッサ１のリソースコンフリクト発生時のパイプラインインターロックキャンセル処理を示すタイミング図であり、図において、白の部分はメモリアクセスユニット３で実行されているパイプライン、斜線部分は、整数演算ユニット４で実行されているパイプラインを示す。
【０１７３】
９４１は、メモリアクセスユニット３で実行されるロード命令のパイプラインである。９４２は、パイプライン９４１と同時に整数演算ユニット４で実行される乗算命令のパイプラインである。９４３は、パイプライン９４１，９４２の後続命令のパイプラインである。９４４は、条件実行判定で不実行となるメモリアクセスユニット３で実行されるロード命令のパイプラインである。９４５は、パイプライン９４４と同時に整数演算ユニット４で実行される乗算命令のパイプラインである。９４６は、パイプライン９４４，９４５の後続命令のパイプラインである。９４８は、条件実行判定で不実行となる整数演算ユニット４で実行される乗算命令のパイプラインである。９４７は、パイプライン９４８と同時に実行されるメモリアクセスユニット３で実行されるロード命令のパイプラインである。９４９は、パイプライン９４７，９４８の後続命令のパイプラインである。
【０１７４】
実施の形態８のマイクロプロセッサ１では、図２７に示すパイプライン９４１，９４２のように、メモリアクセスユニット３でのロード命令と整数演算ユニット４での乗算命令が同時に実行される場合、Ｗステージでの汎用レジスタ（ＧＰＲ）５へのデータの書き込み時に、同じライトバックバスを用いるためにリソースコンフリクト（リソース衝突）が発生する。
【０１７５】
このリソースコンフリクトを回避するため、パイプライン９４２のＷステージを１クロックストールし、パイプライン９４１の結果を汎用レジスタ（ＧＰＲ）５へ書き込んだ１クロック後に、パイプライン９４２の結果を汎用レジスタ（ＧＰＲ）５へ書き込む。このパイプラインストール信号は、パイプライン９４１，９４２のＤステージで生成し、後続命令のパイプライン９４３のＩＦステージをストールする。そしてＧＲＰライト信号を２クロック間生成し、パイプライン９４１の結果を書き込むアドレスＡとパイプライン９４２の結果を書き込むアドレスＢを連続して出力する。このように、リソースコンフリクトが発生した場合、パイプラインストールのためのペナルティが１クロック発生する。
【０１７６】
不実行となるロード命令のパイプライン９４４では、Ｄステージで条件実行判定を行い、Ｄ２から条件実行キャンセル信号を出力する。そしてこの条件実行キャンセル信号により、パイプラインストール信号をキャンセルする。そしてパイプライン９４５の結果をＧＰＲに書き込むためのアドレスＢをＧＰＲライト信号と共に出力する。これによりパイプライン９４５の後続パイプライン９４６をペナルティなしに実行することが可能である。
【０１７７】
不実行となる乗算命令のパイプライン９４８では、Ｄステージで条件実行判定を行い、Ｄ２から条件実行キャンセル信号を出力する。そしてこの条件実行キャンセル信号により、パイプラインストール信号をキャンセルする。そしてパイプライン９４７の結果を汎用レジスタ（ＧＰＲ）５へ書き込むためのアドレスＡをＧＰＲライト信号と共に出力する。これにより、実施の形態８のマイクロプロセッサ１は、パイプライン９４７の後続パイプライン９４９をペナルティなしに実行することができるものである。
【０１７８】
次に動作について説明する。
以下では、図１０〜図１３に示すこの発明のマイクロプロセッサ１のブロック図および図１５に示す命令デコードユニット２内に組み込まれている制御回路のブロック図、および図２７に示すリソースコンフリクト発生時のパイプラインインターロックキャンセル処理を示すタイミング図を用いて、リソースコンフリクト発生時のパイプラインインターロックキャンセル処理について説明する。
【０１７９】
図２４に示すパイプライン９４１，９４２のロード命令と乗算命令が、図１０〜図１３に示す命令ＲＡＭ６からＩ２ＩＤＢＵＳを介して読み出されると、読み出された命令は、図１５に示すセレクタ７００を介して各制御回路に転送される。
【０１８０】
図１５に示すデコーダ回路（同時使用判定回路）７１９は、セレクタ７００からのその命令コードからリソースコンフリクトによるパイプラインインターロックが発生していることを検知する。そして、パイプラインインターロック信号７３０，７３２，７３５を生成し、命令コードライト信号生成回路７２０とデコーダ回路（衝突回避回路）７１８とデコーダ回路（衝突回避回路）７１６へ出力する。
【０１８１】
命令コードライト信号生成回路７２０からレジスタ７０５へ送信されるライト信号によりレジスタ７０５の更新動作を制御し、Ｗステージの命令コードを２クロック間保持する。そしてデコーダ回路７１６では、そのＷステージの命令コードをデコードして、最初にメモリアクセスユニット３へのＧＰＲライト信号を出力し、次に整数演算ユニット４へのＧＰＲライト信号を出力する。
【０１８２】
また、デコーダ回路７１７は、図１０〜図１３に示す命令アドレスレジスタ２９の更新制御信号を加工し、命令アドレスレジスタ２９の値を更新しないように処理する。これにより、パイプライン９４３のＩＦステージをストールし、それ以降のステージを継続する。
【０１８３】
図２７に示すパイプライン９４４のロード命令のように、条件実行判定で不実行となった場合、図１５に示す条件実行制御回路７２２から条件実行キャンセル信号７２３がデコーダ回路７１９に出力され、パイプラインストール信号をキャンセルする。そして、図１５に示すデコーダ回路（衝突回避回路）７１６では、整数演算ユニット４の結果を書き込むためのＧＰＲライト信号を出力する。また図２７に示すパイプライン９４８の乗算命令のように、条件実行判定で不実行となった場合、図１５に示す条件実行制御回路７２２から条件実行キャンセル信号７２３が、デコーダ回路７１９へ出力され、パイプラインストール信号をキャンセルする。そしてデコーダ回路７１６では、メモリアクセスユニット３での実行結果を書き込むためのＧＰＲライト信号を出力する。
【０１８４】
以上のように、実施の形態８によれば、あるリソースコンフリクトによりパイプラインインターロックが発生し、かつそのリソースコンフリクトを発生させるサブ命令のいずれかが条件実行判定で不実行となった場合に、その条件実行キャンセル信号でパイプラインストール信号をキャンセルするので、パイプラインのペナルティを削除することができる。
【０１８５】
【発明の効果】
以上のように、請求項１記載の発明によれば、実行停止回路がプログラム内の先行命令の動作に基づいて現命令の実行を一時的に停止し、条件実行判定回路が先行命令の実行を行うか否かの判定を行い、条件実行判定回路が先行命令を実行しないと判定した時に条件実行制御回路が先行命令の動作を開始する信号を無効とする処理を行い、パイプラインの停止を誘因した原因となる命令が条件実行判定で不実行となった場合、そのパイプラインの停止動作をキャンセルするように構成したので、パイプラインのペナルティを削減できる効果がある。
【０１８６】
請求項２記載の発明によれば、条件実行判定回路の判定によりロード命令が条件実行判定で不実行となった場合に、ロードしたデータをＧＰＲに書き込む処理のみをキャンセルするのではなく、条件実行制御回路がデータＲＡＭアクセス処理からキャンセルするように構成したので、パイプラインのペナルティを削除できる効果がある。
【０１８７】
請求項３記載の発明によれば、ロード命令のアドレス計算用データが同じ命令実行ユニットで実行される先行命令の結果データと干渉を起こし、かつ先行命令が条件実行判定回路の条件実行判定で不実行となった場合に、条件実行制御回路がその条件実行キャンセル信号でパイプラインインターロック信号とバイパス経路選択信号をキャンセルするように構成したので、パイプラインのペナルティを削除できる効果がある。
【０１８８】
請求項４記載の発明によれば、異なる命令実行ユニット間でデータ干渉が発生し、かつその先行命令が条件実行判定回路の条件実行判定で不実行となった場合に、条件実行制御回路がその条件実行キャンセル信号でパイプラインインターロック信号をキャンセルするように構成したので、パイプラインのペナルティを削除できる効果がある。
【０１８９】
請求項５記載の発明によれば、メモリアクセス部で実行されるロード命令のロードデータが、整数演算部で実行される乗算命令のソースデータと干渉を起こし、かつその先行ロード命令が条件実行判定回路の条件実行判定で不実行となった場合に、条件実行制御回路がその条件実行キャンセル信号でパイプラインインターロック信号とバイパス経路選択信号をキャンセルするように構成したので、パイプラインのペナルティを削除できる効果がある。
【０１９０】
請求項６記載の発明によれば、あるフラグを用いる命令の先行命令がそのフラグを更新し、かつその先行命令が条件実行判定回路の条件実行判定で不実行となった場合に、条件実行制御回路が条件実行キャンセル信号でパイプラインインターロック信号をキャンセルするように構成したので、パイプラインのペナルティを削除できる効果がある。
【０１９１】
請求項７記載の発明によれば、条件実行判定を伴う命令の先行命令が条件実行フラグを更新し、かつその先行命令が条件実行判定回路の条件実行判定で不実行となった場合に、条件実行制御回路がその条件実行キャンセル信号でパイプラインインターロック信号をキャンセルするように構成したので、パイプラインのペナルティを削除できる効果がある。
【０１９２】
請求項８記載の発明によれば、モードフラグを更新する命令が条件実行判定回路の条件実行判定で不実行となった場合に、条件実行制御回路がその条件実行キャンセル信号で後続命令のパイプラインインターロック信号をキャンセルするように構成したので、パイプラインのペナルティを削除できる効果がある。
【０１９３】
請求項９記載の発明によれば、あるリソースコンフリクトによりパイプラインインターロックが発生し、かつそのリソースコンフリクトを発生させるサブ命令のいずれかが条件実行判定回路の条件実行判定で不実行となった場合に、条件実行制御回路が条件実行キャンセル信号でパイプラインストール信号をキャンセルするように構成したので、パイプラインのペナルティを削除できる効果がある。
【図面の簡単な説明】
【図１】この発明における条件実行命令を備えるマイクロプロセッサの基本構成を示すブロック図である。
【図２】図１に示したこの発明における条件実行命令を備えるマイクロプロセッサで用いられる命令フォーマットを示す説明図である。
【図３】図１に示したこの発明における条件実行命令を備えるマイクロプロセッサで用いられる命令フォーマットを示す説明図である。
【図４】図１に示したこの発明における条件実行命令を備えるマイクロプロセッサで用いられる命令フォーマットを示す説明図である。
【図５】図１に示したこの発明における条件実行命令を備えるマイクロプロセッサで用いられる命令フォーマットを示す説明図である。
【図６】図１に示したこの発明における条件実行命令を備えるマイクロプロセッサのレジスタの構成を示す説明図である。
【図７】図１に示したこの発明における条件実行命令を備えるマイクロプロセッサのレジスタの構成を示す説明図である。
【図８】図１に示したこの発明における条件実行命令を備えるマイクロプロセッサのパイプライン動作を示す説明図である。
【図９】図１に示したこの発明における条件実行命令を備えるマイクロプロセッサのパイプライン動作を示す説明図である。
【図１０】図１に示したこの発明における条件実行命令を備えるマイクロプロセッサの実行ユニットを中心とした詳細な構成を示すブロック図であり、図１０〜図１３で一つのブロック図を示す。
【図１１】図１０の右側に連続した部分のブロック図である。
【図１２】図１１の右側に連続した部分のブロック図である。
【図１３】図１２の右側に連続した部分のブロック図である。
【図１４】命令コード間のパイプラインでのデータの干渉を示す説明図である。
【図１５】命令デコードユニット内に組み込まれているパイプラインインターロックキャンセル処理を制御する制御回路を示すブロック図である。
【図１６】パイプラインインターロック制御回路図を示すブロック図である。
【図１７】図１５に示す条件実行制御回路を示すブロック図である。
【図１８】パイパス制御回路を示すブロック図である。
【図１９】この発明の実施の形態１による条件実行命令を備えるマイクロプロセッサのメモリアクセス時のパイプラインインターロックキャンセル処理を示すタイミング図である。
【図２０】この発明の実施の形態２による条件実行命令を備えるマイクロプロセッサのアドレス計算データのパイプラインインターロックキャンセル処理を示すタイミング図である。
【図２１】この発明の実施の形態３による条件実行命令を備えるマイクロプロセッサの異なる実行ユニット間でのパイプラインインターロックキャンセル処理を示すタイミング図である。
【図２２】この発明の実施の形態３による条件実行命令を備えるマイクロプロセッサの異なる実行ユニット間でのパイプラインインターロックキャンセル処理を示すタイミング図である。
【図２３】この発明の実施の形態４による条件実行命令を備えるマイクロプロセッサの乗算データのパイプラインインターロックキャンセル処理を示すタイミング図である。
【図２４】この発明の実施の形態５による条件実行命令を備えるマイクロプロセッサのキャリーフラグのパイプラインインターロックキャンセル処理を示すタイミング図である。
【図２５】この発明の実施の形態６による条件実行命令を備えるマイクロプロセッサの条件実行フラグのパイプラインインターロックキャンセル処理を示すタイミング図である。
【図２６】この発明の実施の形態７による条件実行命令を備えるマイクロプロセッサのモードフラグ更新時のパイプラインインターロックキャンセル処理を示すタイミング図である。
【図２７】この発明の実施の形態８による条件実行命令を備えるマイクロプロセッサのリソースコンフリクト発生時のパイプラインインターロックキャンセル処理を示すタイミング図である。
【図２８】従来のＭＭＡマイクロプロセッサのプロセッサコアの構成を示すブロック図である。
【図２９】図２８に示した従来のＭＭＡマイクロプロセッサ内に組み込まれている実行ユニットの一部の回路をパイプライン的に配置したブロック図である。
【図３０】図２８に示す従来のＭＭＡマイクロプロセッサで実行される命令のパイプライン図である。
【符号の説明】
２  命令デコードユニット（命令デコーダ）、３  メモリアクセスユニット（命令実行ユニット）、４  整数演算ユニット（命令実行ユニット）、５  汎用レジスタ、６  命令ＲＡＭ（メモリ）、７  データＲＡＭ（メモリ）、７１６，７１８  デコーダ回路（衝突回避回路）、７１９  デコーダ回路（データ干渉判定回路、フラグ干渉判定回路、モードフラグ判定回路、同時使用判定回路）、７２０  命令コードライト信号生成回路（実行停止回路）、７２２  条件実行制御回路、８６２，８６３  条件実行判定回路。
【図１】
0003568737.tif 000014
【図２】
0003568737.tif 000015
【図３】
0003568737.tif 000016
【図４】
0003568737.tif 000017
【図５】
0003568737.tif 000018
【図６】
0003568737.tif 000019
【図７】
0003568737.tif 000020
【図８】
0003568737.tif 000021
【図９】
0003568737.tif 000022
【図１０】
0003568737.tif 000023
【図１１】
0003568737.tif 000024
【図１２】
0003568737.tif 000025
【図１３】
0003568737.tif 000026
【図１４】
0003568737.tif 000027
【図１５】
0003568737.tif 000028
【図１６】
0003568737.tif 000029
【図１７】
0003568737.tif 000030
【図１８】
0003568737.tif 000031
【図１９】
0003568737.tif 000032
【図２０】
0003568737.tif 000033
【図２１】
0003568737.tif 000034
【図２２】
0003568737.tif 000035
【図２３】
0003568737.tif 000036
【図２４】
0003568737.tif 000037
【図２５】
0003568737.tif 000038
【図２６】
0003568737.tif 000039
【図２７】
0003568737.tif 000040
【図２８】
0003568737.tif 000041
【図２９】
0003568737.tif 000042
【図３０】
0003568737.tif 000043