(57)【要約】【課題】コプロセッサの命令実行サイクル数に合わせて主プロセッサの命令実行サイクル数を増加することに起因する分岐ペナルティの悪化を抑制する。【解決手段】プロセッサシステム１は、コプロセッサ２０で実行される拡張命令の命令実行サイクル数が主プロセッサ１０で実行される基本命令の命令実行サイクル数より大きい場合、コプロセッサ２０による拡張命令の実行時に、少なくとも拡張命令の命令実行サイクル数と基本命令の命令実行サイクル数の差に相当する期間だけ、拡張命令より後に取得する後続命令に対するパイプライン処理を停止する。【選択図】図１
2007200180.tif 000002
【特許請求の範囲】
【請求項１】
主プロセッサと、前記主プロセッサに接続されるコプロセッサとを備えるプロセッサシステムであって、
前記コプロセッサで実行される拡張命令の命令実行サイクル数が前記主プロセッサで実行される基本命令の命令実行サイクル数より大きい場合、前記コプロセッサによる拡張命令の実行時に、少なくとも前記拡張命令の命令実行サイクル数と前記基本命令の命令実行サイクル数の差に相当する期間だけ、前記拡張命令より後に取得する後続命令に対するパイプライン処理を停止するプロセッサシステム。
【請求項２】
前記後続命令に対するパイプライン処理の停止を指示する制御信号を前記コプロセッサから前記主プロセッサに対して出力し、
前記制御信号に応じて、前記主プロセッサが前記後続命令に対するパイプライン処理を停止する請求項１に記載のプロセッサシステム。
【請求項３】
前記コプロセッサは、前記拡張命令の種別に基づいて、前記制御信号を有効とするか否かを決定する請求項２に記載のプロセッサシステム。
【請求項４】
前記コプロセッサは、前記拡張命令の種別に基づいて、前記制御信号を有効とする期間を決定する請求項２に記載のプロセッサシステム。
【請求項５】
前記主プロセッサは、デコードした命令が前記拡張命令であることに応じて、所定の期間だけ前記後続命令に対するパイプライン処理を停止する請求項１に記載のプロセッサシステム。
【請求項６】
前記主プロセッサは、前記拡張命令の種別に基づいて、前記後続命令に対するパイプライン処理を停止する期間を決定する請求項５に記載のプロセッサシステム。
【請求項７】
前記コプロセッサにおける前記拡張命令の命令実行サイクル数が可変である請求項１に記載のプロセッサシステム。
【請求項８】
前記コプロセッサにおける前記拡張命令の命令実行サイクル数を、前記基本プロセッサにおける前記基本命令の命令実行サイクル数と同一の第１のサイクル数と、前記第１のサイクル数より大きい第２のサイクル数との間で変更可能であり、
前記コプロセッサが前記第２のサイクル数で前記拡張命令を実行する場合に、後続の命令に対するパイプライン処理を停止する請求項１に記載のプロセッサシステム。
【請求項９】
前記後続命令に対するパイプライン処理の停止を指示する制御信号を前記コプロセッサから前記主プロセッサに対して出力し、
前記制御信号に応じて、前記主プロセッサが前記後続命令に対するパイプライン処理を停止する請求項８に記載のプロセッサシステム。
【請求項１０】
前記拡張命令の命令実行サイクル数が第２のサイクル数である場合に、前記主プロセッサは、前記拡張命令をデコードしたことに応じて、少なくとも前記第２のサイクル数と前記第１のサイクル数の差に相当する期間だけ、後続の命令に対するパイプライン処理を停止する請求項８に記載のプロセッサシステム。
【請求項１１】
前記拡張命令の命令実行サイクル数の変更は、前記プロセッサシステムに供給される動作クロックの周波数の変更に応じて行われる請求項８に記載のプロセッサシステム。
【請求項１２】
前記主プロセッサは、
命令メモリから命令を取得する命令フェッチ部と、
前記命令フェッチ部によって取得された命令をデコードする命令デコード部と、
前記基本命令によって規定される処理を実行する演算器とを備えており、
前記パイプライン処理の停止は、前記命令フェッチ部による後続命令の取得、及び前記命令デコード部による命令のデコードを停止することによって行われる請求項１に記載のプロセッサシステム。
【請求項１３】
主プロセッサと、前記主プロセッサに接続されるコプロセッサとを備えるプロセッサシステムであって、
前記コプロセッサで実行される拡張命令の命令実行サイクル数が前記基本プロセッサで実行される基本命令の命令実行サイクル数より大きい状態に設定されても、前記主プロセッサで実行される基本プロセッサの命令実行サイクル数を変更しないプロセッサシステム。
【請求項１４】
前記コプロセッサにおける前記拡張命令の命令実行サイクル数が可変である請求項１３に記載のプロセッサシステム。
【請求項１５】
前記コプロセッサにおける前記拡張命令の命令実行サイクル数を、前記基本プロセッサにおける前記基本命令の命令実行サイクル数と同一の第１のサイクル数と、前記第１のサイクル数より大きい第２のサイクル数との間で変更可能であり、
前記コプロセッサが前記第２のサイクル数で前記拡張命令を実行する場合に、前記拡張命令より後に取得する後続命令に対するパイプライン処理を停止する請求項１３に記載のプロセッサシステム。
【請求項１６】
前記コプロセッサによる前記拡張命令の実行時に、前記主プロセッサは、少なくとも前記拡張命令の命令実行サイクル数と前記基本命令の命令実行サイクル数の差に相当する期間だけ、後続の命令に対するパイプライン処理を停止する請求項１３に記載のプロセッサシステム。
【請求項１７】
前記後続命令に対するパイプライン処理の停止を指示する制御信号を前記コプロセッサから前記主プロセッサに対して出力し、
前記制御信号に応じて、前記主プロセッサが前記後続命令に対するパイプライン処理を停止する請求項１６に記載のプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、主プロセッサにコプロセッサが接続されたプロセッサシステムに関する。
【背景技術】
【０００２】
マイクロプロセッサの性能を強化するために、特定の処理に特化したコプロセッサを利用する技術が知られている。コプロセッサを用いたプロセッサシステムにおける主プロセッサとコプロセッサの間でのデータの受け渡しは、主プロセッサとコプロセッサが共にアクセス可能な記憶領域を介して行われるのが一般的である。例えば、主プロセッサが備える汎用レジスタが、主プロセッサとコプロセッサの間でのデータの授受を行うための記憶領域として使用される。
【０００３】
また、コプロセッサを用いたプロセッサシステムでは、コプロセッサにおいて実行される命令（以下、拡張命令と呼ぶ）は、主プロセッサからコプロセッサに対して発行されるのが一般的である。コプロセッサは、主プロセッサが備える汎用レジスタからデータを取得して拡張命令を実行し、拡張命令の実行結果を汎用レジスタに格納する。
【０００４】
主プロセッサがコプロセッサによる拡張命令の実行結果を利用するためには、主プロセッサは、コプロセッサによる実行結果の書き出しが終了した後に、実行結果が格納された記憶領域にアクセスする必要がある。このため、コプロセッサを備えるプロセッサシステムでは、汎用レジスタ等の記憶領域にコプロセッサによる実行結果の書き出しが行われるタイミングと、コプロセッサの実行結果が格納された記憶領域に主プロセッサがアクセスするタイミングとを調整する機構が必要となる。
【０００５】
このような調整機構の１つに、主プロセッサとコプロセッサのパイプラインステージ数を揃える構成がある（例えば特許文献１を参照）。具体的には、フェッチした命令が主プロセッサで実行される命令（以下、基本命令と呼ぶ）であるかコプロセッサで実行される拡張命令であるかに依らず、命令をフェッチしてから命令が完了するまでの過程に必要なクロックサイクル数を一定とすることが行われている。このような構成であれば、フェッチした命令が基本命令であるか拡張命令であるかに依らずにインターロック制御等のパイプライン制御を行えば良いため、パイプライン制御が容易となる。
【０００６】
主プロセッサとコプロセッサのパイプラインステージ数を揃えることによって、主プロセッサとコプロセッサの同期を確保したプロセッサシステムの一例を図７に示す。図７のプロセッサシステム７は、主プロセッサ７０にコプロセッサ８０が接続されている。以下、プロセッサシステム７の構成要素について説明する。
【０００７】
命令フェッチ部７２は、プログラムカウンタ７２１に格納されたアドレス情報を用いて、命令メモリ７１から命令を順次取り出す。ＰＣ更新部７２２は、命令の取得後、次の命令取得のためにプログラムカウンタ７２１の値を更新する。
【０００８】
命令デコード部７３は、命令フェッチ部７２が取得した命令のデコードを行う。命令デコード部７３は、デコードした命令が基本命令である場合は、主プロセッサ７０が有する演算器に対して命令を発行する。他方、デコードした命令が拡張命令である場合は、コプロセッサＩ／Ｆ７８を介してコプロセッサ８０に命令を転送する。コプロセッサＩ／Ｆ７８からは、拡張命令の実行を要求する要求信号（ＣＰＲＱ）、命令コード（ＣＰＯＰ）、及び即値（ＣＰＩＭＭ）がコプロセッサ８０に対して転送される。
【０００９】
命令デコード部７３が有するパイプライン制御部７３１は、主プロセッサ７０のパイプライン処理のインターロック制御を行う。
【００１０】
主プロセッサ７０は、乗算・積和演算器（ＭＡＣ）７４１、算術・論理演算器（ＡＬＵ）７４２、及びバレルシフタ（ＢＳＦＴ）７４３を備えている。基本命令によって規定される処理の種別に応じて、ＭＡＣ７４１、ＡＬＵ７４２、及びＢＳＦＴ７４３の中から演算器が選択され、汎用レジスタ７４から入力値のフェッチが行われて命令が実行される。基本命令の実行結果は、デスティネーションバスを介して汎用レジスタ７４に格納される。なお、ＭＵＸ７５１は、ＡＬＵ７４２のオペランドを即値（ＩＭＭ）と汎用レジスタ７４の間で選択する回路である。また、セレクタ７７は、ＭＡＣ７４１、ＡＬＵ７４２、及びＢＳＦＴ７４３の出力を選択してデスティネーションバスに出力する回路である。
【００１１】
コプロセッサ８０が有する制御部８１は、コプロＩ／Ｆ７８を介して入力されるＣＰＲＱ、ＣＰＯＰ、ＣＰＩＭＭを受信する。命令デコード部８１１は、拡張命令をデコードし、コプロセッサ８０が備える演算器において拡張命令を実行するために必要となる制御信号を出力する。この制御信号には、演算器に対する処理要求、オペランドレジスタの指定、即値が含まれる。
【００１２】
コプロセッサ８０は、乗算器（ＭＵＬ）８２１並びに８２２、及びユーザ定義演算器８２３を有している。拡張命令によって規定される処理の種別に応じて、ＭＵＬ８２１及び８２２、又はユーザ定義演算器８２３が選択され、汎用レジスタ７４から入力値のフェッチが行われて命令が実行される。拡張命令の実行結果は、デスティネーションバスを介して汎用レジスタ７４に格納される。なお、ＭＵＬ８２１は、３２ビット×１６ビットの乗算器の前半部であり、Boothアルゴリズムによる部分積生成等を行う。ＭＵＬ８２２は３２ビット×１６ビットの後半部であり、部分積の加算を行う。ＭＵＬ８２１及び８２２の２段によって３２ビット×１６ビット乗算命令が実行される。
【００１３】
周波数フラグ７９は、プロセッサシステム７のクロック周波数が高速であるか低速であるかを示すフラグであり、主プロセッサ７０及びコプロセッサ８０のＥＸステージを分割すべきクロック周波数の境界を定めるものである。例えば、クロック周波数が２００ＭＨｚを超えるとＥＸステージの分割が必要となる場合は、クロック周波数が２００ＭＨｚより高い場合にフラグがセットされ、２００ＭＨｚ以下の場合にフラグが解除される。
【００１４】
主プロセッサ７０においては、周波数フラグ７９がセットされている場合、つまりクロック周波数が高速である場合は、マルチプレクサ７５２乃至７５４がフリップフロップ（ＦＦ）７６１乃至７６３からの入力信号を出力する。他方、周波数フラグ７９が解除され、クロック周波数が低速である場合は、マルチプレクサ７５２乃至７５４がＭＡＣ７４１、ＡＬＵ７４２、又はＢＳＦＴ７４３からの入力信号を出力する。
【００１５】
同様に、コプロセッサ８０においては、周波数フラグ７９がセットされている場合、つまりクロック周波数が高速である場合は、マルチプレクサ８４１乃至８４３が、フリップフロップ（ＦＦ）８３１乃至８３３からの入力信号を出力する。他方、周波数フラグ７９が解除され、クロック周波数が低速である場合は、マルチプレクサ８４１乃至８４３が、ＭＵＬ８２１又はユーザ定義演算器８２３からの入力信号を出力する。
【００１６】
また、主プロセッサ７０が有するパイプライン制御部７３１は、周波数フラグ７９をモニタして主プロセッサ７０のＥＸステージに要するクロックサイクル数を把握し、周波数フラグ７９がセットされている場合は、ＥＸステージをＥＸ１ステージ及びＥＸ２ステージの２ステージに分割して２クロックサイクルで動作させる。
【００１７】
同様に、コプロセッサ８０が有する制御部８１は、周波数フラグ７９をモニタしてコプロセッサ８０のＥＸステージに要するクロックサイクル数を把握し、周波数フラグ７９がセットされている場合は、ＥＸステージをＥＸ１ステージ及びＥＸ２ステージの２ステージに分割して２クロックサイクルで動作させる。
【００１８】
プロセッサシステム７のパイプライン処理の概念を図８のタイムチャートを用いて説明する。図８（ａ）は、クロック周波数が低速であり、ＩＦステージ、ＤＥＣステージ、ＥＸステージの各ステージがそれぞれ１クロックサイクルで実行される場合を示している。ＩＦステージでは命令フェッチ部７２の処理が行われ、ＤＥＣステージでは命令デコード部７３の処理が行われる。ＥＸステージでは、基本命令の場合は、主プロセッサ７０の演算器（ＭＡＣ７４１、ＡＬＵ７４２、又はＢＳＦＴ７４３）による演算、及び汎用レジスタ７４への実行結果の書き出しが行われる。また、拡張命令の場合は、ＥＸステージでは、命令デコード部８１１での拡張命令のデコード、コプロセッサ８０の演算器（ＭＵＬ８２１、８２２、又はユーザ定義演算器８２３）による演算、及び汎用レジスタ７４への実行結果の書き出しが行われる。
【００１９】
他方、図８（ｂ）は、クロック周波数が高速であり、ＥＸステージがＥＸ１ステージ及びＥＸ２ステージに分割され、２クロックサイクルで実行される場合を示している。基本命令の場合は、主プロセッサ７０の演算器（ＭＡＣ７４１、ＡＬＵ７４２、又はＢＳＦＴ７４３）による演算がＥＸ１ステージにおいて行われ、汎用レジスタ７４への実行結果の書き出しがＥＸ２ステージで行われる。拡張命令の場合は、ＭＵＬ８２１又はユーザ定義演算器８２３による演算がＥＸ１ステージにおいて行われ、ＭＵＬ８２２による演算、及び汎用レジスタ７４への実行結果の書き出しがＥＸ２ステージで行われる。
【００２０】
このように、プロセッサシステム７は、クロック周波数が高速である場合にコプロセッサ８０のＥＸステージを２ステージに分割し、これに合わせて主プロセッサ７０のＥＸステージも２ステージに分割するものである。これによって、主プロセッサ７０で実行される基本命令のデコードから実行完了までに要するクロックサイクル数を、コプロセッサ８０で実行される拡張命令のデコードから実行完了までに要するクロックサイクル数に合わせて変更することができる。なお、本明細書では、命令のデコードから実行完了までに要するクロックサイクル数のことを命令実行サイクル数と呼ぶこととする。
【００２１】
このため、プロセッサシステム７は、主プロセッサ７０とコプロセッサ８０のパイプラインステージ数及び命令実行サイクル数を揃えることができ、主プロセッサとコプロセッサの同期確保が可能となる。
【特許文献１】特開平９−３１９５７８号公報
【発明の開示】
【発明が解決しようとする課題】
【００２２】
上述したプロセッサシステム７のように、主プロセッサとコプロセッサの命令実行サイクル数を揃えることによって主プロセッサとコプロセッサの同期を確保するプロセッサシステムにおいては、コプロセッサの命令実行に要するクロックサイクル数が増加する場合には、主プロセッサの処理能力に関わらず、主プロセッサの命令実行サイクル数をコプロセッサの命令実行サイクル数に合わせて増加する必要がある。
【００２３】
命令実行サイクル数の増加、つまりパイプラインステージ数の増加は、分岐ペナルティの悪化の原因となる。このため、上述した従来のプロセッサシステムでは、高速動作時などのようにコプロセッサの命令実行サイクル数が増加すると、コプロセッサだけでなく主プロセッサでも分岐ペナルティが悪化するという課題がある。
【課題を解決するための手段】
【００２４】
本発明にかかるプロセッサシステムは、主プロセッサと、前記主プロセッサに接続されるコプロセッサとを備えるプロセッサシステムであって、前記コプロセッサで実行される拡張命令の命令実行サイクル数が前記主プロセッサで実行される基本命令の命令実行サイクル数より大きい場合、前記コプロセッサによる拡張命令の実行時に、少なくとも前記拡張命令の命令実行サイクル数と前記基本命令の命令実行サイクル数の差に相当する期間だけ、前記拡張命令より後に取得する後続命令に対するパイプライン処理を停止するものである。
【発明の効果】
【００２５】
このような構成により、基本命令の命令実行サイクル数と拡張命令の命令実行サイクル数とが異なる場合に、主プロセッサがコプロセッサによる拡張命令の実行完了を待ち合わせることができる。したがって、コプロセッサの命令実行サイクル数に合わせて、主プロセッサの命令実行サイクル数を変更する必要がなくなる。このため、本発明にかかるプロセッサシステムは、コプロセッサの命令実行サイクル数に合わせて主プロセッサの命令実行サイクル数を増加することに起因する分岐ペナルティの悪化を抑制することができる。
【発明を実施するための最良の形態】
【００２６】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【００２７】
発明の実施の形態１．
本実施の形態にかかるプロセッサシステム１の構成を図１に示す。プロセッサシステム１は、主プロセッサ１０にコプロセッサ２０が接続された構成を有する。以下では、プロセッサシステム１が有する各構成要素について説明する。
【００２８】
命令フェッチ部１２は、プログラムカウンタ１２１に格納されたアドレス情報を用いて、命令メモリ７１から命令を順次取り出す。ＰＣ更新部１２２は、命令の取得後に、次の命令取得のためにプログラムカウンタ７２１の値を更新する。
【００２９】
命令デコード部１３は、命令フェッチ部１２が取得した命令のデコードを行う。命令デコード部１３は、デコードした命令が基本命令である場合は、主プロセッサ１０が有する演算器に対して命令を発行する。他方、デコードした命令が拡張命令である場合は、コプロセッサＩ／Ｆ７８を介してコプロセッサ２０に命令を転送する。コプロセッサＩ／Ｆ７８からは、拡張命令の実行を要求する要求信号（ＣＰＲＱ）、命令コード（ＣＰＯＰ）、及び即値（ＣＰＩＭＭ）がコプロセッサ２０に対して転送される。
【００３０】
パイプライン制御部１３１は、パイプライン処理のインターロック制御を行う。なお、パイプライン制御部１３１は、コプロセッサ２０から入力されるＣＰＷＡＩＴ信号に基づいて、パイプラインのインターロック制御を行う点が特徴である。ＣＰＷＡＩＴ信号を用いたインターロック制御の詳細については後述する。
【００３１】
汎用レジスタ７４、演算器（ＭＡＣ７４1、ＡＬＵ７４２、ＢＳＦＴ７４３）、ＭＵＸ７５１、セレクタ７７は、上述した従来のプロセッサシステム７が有するものと同一である。
【００３２】
ただし、主プロセッサ１０では、コプロセッサ２０の命令実行サイクル数の変更に応じて、主プロセッサの命令実行サイクル数の変更を行う必要はない。このため、ＥＸステージの分割によって命令実行サイクル数を変更するために従来のプロセッサシステム７が有していたＦＦ７６１乃至７６３、ＭＵＸ７５２乃至７５４は、本実施の形態の主プロセッサ１では省略されている。
【００３３】
次にコプロセッサ２０の構成要素について説明する。制御部２１は、コプロＩ／Ｆ７８を介して入力されるＣＰＲＱ、ＣＰＯＰ、ＣＰＩＭＭを受信する。命令デコード部８１１は、拡張命令をデコードし、コプロセッサ８０が備える演算器における拡張命令の実行に必要な制御信号を出力する。この制御信号には、演算器に対する処理要求、オペランドレジスタの指定、及び即値が含まれる。また、制御部２１は、周波数フラグ７９をモニタしてコプロセッサ２０のＥＸステージに要するクロックサイクル数を把握し、周波数フラグ７９がセットされている場合は、ＥＸステージをＥＸ１ステージ及びＥＸ２ステージの２ステージに分割して２クロックサイクルで動作させる。
【００３４】
さらに、ＥＸステージを分割して２クロックサイクルで動作させる場合には、制御部２１から主プロセッサ１０に対して出力されるＣＰＷＡＩＴ信号が有効に設定される。ここで、ＣＰＷＡＩＴ信号は、主プロセッサ１０に対してパイプラインをインターロックすべき期間を指示するための信号である。
【００３５】
コプロセッサ２０のＥＸステージに相当するＭＵＬ８２１、８２２、ユーザ定義演算器８２３等の構成は、従来のコプロセッサ８０と同一である。
【００３６】
上述したように、図１に示したプロセッサシステム１において、主プロセッサ１が基本命令を実行する場合のＥＸステージ数は一定である。ＩＦステージ、ＤＥＣステージ、ＥＸステージが全て１クロックサイクルで行われると仮定すると、基本命令を実行する際のＩＦステージからＥＸステージまでを合計したパイプラインステージ数は３である。なお、基本命令実行時の命令実行サイクル数に相当するＤＥＣステージからＥＸステージまでの所要クロックサイクル数は２である。
【００３７】
他方、コプロセッサ２０のパイプラインステージ数及び命令実行サイクル数は、クロック周波数に応じて変更される。クロック周波数が低速である場合は、図８（ａ）に示した従来のプロセッサシステム７のパイプラインと同様に、拡張命令を実行する際のＩＦステージからＥＸステージまでを合計したパイプラインステージ数は３であり、命令実行サイクル数は２である。また、クロック周波数が高速である場合は、図８（ｂ）に示した従来のプロセッサシステム７のパイプラインと同様に、拡張命令を実行する際のＩＦステージからＥＸ２ステージまでを合計したパイプラインステージ数は４であり、命令実行サイクル数は３である。
【００３８】
次に、コプロセッサ２０におけるＣＰＷＡＩＴ信号の出力タイミング、及び拡張命令の実行結果が汎用レジスタ７４に書き出されるタイミングについて図２を用いて説明する。図２（ａ）は、プロセッサシステム１のクロック周波数が低速であって、拡張命令実行時と基本命令実行時とでパイプラインステージ数及び命令実行サイクル数が同一である場合を示している。この場合は、ＣＰＷＡＩＴ信号が有効な状態に設定されることはない。演算器（ＭＵＬ８２２）の出力は、１クロックサイクルのＥＸステージの終了時刻Ｔ１までに有効となる。
【００３９】
図２（ｂ）は、プロセッサシステム１のクロック周波数が高速であって、拡張命令実行時のパイプラインステージ数及び命令実行サイクル数が基本命令実行時より１クロックサイクルだけ長い場合を示している。この場合は、制御部２１によって、ＥＸ１ステージに相当する１クロックサイクルの間、ＣＰＷＡＩＴ信号が有効な状態に設定される。図２（ｂ）では、ＣＰＷＡＩＴ信号を示す矩形波のｈｉｇｈレベルが、ＣＰＷＡＩＴ信号が有効な状態に対応する。演算器（ＭＵＬ８２２）の出力は、ＥＸ２ステージの終了時刻Ｔ２までに有効となる。
【００４０】
次に、パイプライン制御部１３１によるＣＰＷＡＩＴ信号を利用したインターロック制御について説明する。図３（ａ）は、クロック周波数が高速であって、コプロセッサ２０において拡張命令１を実行した後に、後続の基本命令１によって拡張命令１の実行結果が利用される場合を示している。なお、本実施の形態では、ＥＸステージの最初に汎用レジスタ７４からレジスタオペランドのフェッチを行うものとする。
【００４１】
拡張命令１を実行する際は、ＥＸ１ステージの最初に制御部２１によってＣＰＷＡＩＴ信号がセットされる。本実施の形態では、拡張命令の命令実行サイクル数が３であり、基本命令の命令実行サイクル数が２であるため、少なくとも１クロックサイクルの間だけＣＰＷＡＩＴ信号を有効とする。ＣＰＷＡＩＴ信号を受けた主プロセッサ１０は、インターロック制御を行って、後続の命令に対する命令フェッチ部１２による命令フェッチ、及び命令デコード部１３による命令デコードを停止する。このようなインターロック制御によって、基本命令１を実行する主プロセッサのパイプラインは１クロック分だけストールすることになる。これにより、ストール後に実行される基本命令１のＥＸステージおいて、拡張命令１のＥＸ２ステージでの実行結果を参照することができる。
【００４２】
つまり、本実施の形態にかかるプロセッサシステム１は、コプロセッサ２０の命令実行サイクル数が主プロセッサ１０の命令実行サイクル数より大きい場合は、コプロセッサ２０から出力するＣＰＷＡＩＴ信号によって、少なくともその差分に対応する期間だけ主プロセッサ１０のパイプラインをストールさせることができる。これにより、コプロセッサの命令実行サイクル数に合わせて、主プロセッサの命令実行サイクル数を変更することなく、拡張命令と基本命令との間のデータ依存関係に対処することができる。
【００４３】
続いて以下では、主プロセッサ１０にける分岐ペナルティが改善されることについて図４を用いて説明する。図４（ａ）は、本実施の形態のプロセッサシステム１において分岐命令を実行する場合のタイムチャートを示している。上述したようにプロセッサシステム１は、コプロセッサ２０の命令実行サイクル数に合わせて主プロセッサ１０の命令実行サイクル数を変更する必要がない。このため、クロック周波数が高速である場合にも、分岐命令のフェッチからＥＸステージにおいて分岐条件が確定するまでに要するクロックサイクル数は３クロックサイクルである。したがって、分岐命令に起因するパイプラインストール期間、つまり分岐ペナルティは２クロックサイクルである。
【００４４】
他方、図４（ｂ）は、従来のプロセッサシステム７の高速動作時において、分岐命令を実行する場合のタイムチャートを示している。プロセッサシステム７では、コプロセッサ８０のＥＸステージの分割に合わせて、主プロセッサ７０のＥＸステージを分割する。このため、分岐命令のフェッチからＥＸ２ステージにおいて分岐条件が確定するまでは４クロックサイクルを要する。したがって、分岐ペナルティは３クロックサイクルである。
【００４５】
このように本実施の形態のプロセッサシステム１は、高速動作時のようにコプロセッサ２０における拡張命令の命令実行サイクル数が増加する場合であっても、主プロセッサ１０における基本命令の命令実行サイクル数を増加する必要がない。このため、分岐ペナルティの悪化を抑制することができる。また、主プロセッサ１０の命令実行サイクル数を変更するための冗長な回路を必要としないため、主プロセッサ１０の構成を簡素化できる。またさらに、主プロセッサ１０に接続するコプロセッサの命令実行サイクル数に合わせて主プロセッサ１０のハードウェア構成を変更する必要がないため、主プロセッサ１０の汎用性を向上することができる。
【００４６】
なお、本実施の形態では、クロック周波数が高速である場合に、コプロセッサ２０で実行される拡張命令の命令実行サイクル数を主プロセッサ１０で実行される基本命令の命令実行サイクル数と比較して１クロックサイクルだけ増加させる場合を説明した。しかしこのような構成は一例である。本発明は、コプロセッサで実行される拡張命令の命令実行サイクル数が、主プロセッサで実行される基本命令の命令実行サイクル数と比較して長いプロセッサシステムに対して広く適用可能である。
【００４７】
また、本実施の形態では、コプロセッサ２０が主プロセッサ１０に設けられた周波数フラグ７９を参照することによってＥＸステージの分割を行うものとして説明した。しかしながら、周波数フラグ７９はコプロセッサ２０に設けることとしてもよい。また、制御部２１が、コプロセッサ２０に入力されるクロック周波数を閾値と比較して、ＥＸステージの分割を行うか否かを判定することとしてもよい。
【００４８】
発明の実施の形態２．
上述した発明の実施の形態１にかかるプロセッサシステム１は、コプロセッサ２０が主プロセッサ１０のパイプラインをインターロックすべきか否かを判定し、コプロセッサ２０が出力するＣＰＷＡＩＴ信号に応じて主プロセッサ１０がインターロック制御を行うものであった。これに対して、本実施形態にかかるプロセッサシステム３は、主プロセッサ３０が、拡張命令を識別することによってパイプラインをインターロックすべきか否かを判定し、コプロセッサ２０の出力するＣＰＷＡＩＴ信号に依拠することなくインターロック制御を行う点が特徴である。
【００４９】
本実施の形態にかかるプロセッサシステム３の構成を図５に示す。プロセッサシステム３は、主プロセッサ３０にコプロセッサ８０が接続された構成を有する。なお、コプロセッサ８０は上述した従来のプロセッサシステム７が備えるものと同一であるため、詳細な説明を省略する。
【００５０】
主プロセッサ３０が備える命令デコード部３３は、命令フェッチ部１２が取得した命令のデコードを行う。命令デコード部３３は、デコードした命令が基本命令である場合は、主プロセッサ３０が有する演算器に対して命令を発行する。他方、デコードした命令が拡張命令である場合は、コプロセッサＩ／Ｆ７８を介してコプロセッサ８０に命令を転送する。コプロセッサＩ／Ｆ７８からは、拡張命令の実行を要求する要求信号（ＣＰＲＱ）、命令コード（ＣＰＯＰ）、及び即値（ＣＰＩＭＭ）がコプロセッサ２０に対して転送される。また、パイプライン制御部３３１は、主プロセッサ１０のパイプライン処理のインターロック制御を行う。
【００５１】
命令デコード部３３は周波数フラグ７９を参照し、周波数フラグ７９がセットさせている状態において拡張命令をデコードした場合には、後続の命令に対する命令フェッチ部１２による命令フェッチ、及び命令デコード部３３による命令デコードを停止するインターロック制御を実行する。つまり、主プロセッサ３０は、コプロセッサ８０における拡張命令の命令実行サイクル数が主プロセッサ３０における基本命令の命令実行サイクル数より大きいことを、周波数フラグ７９の状態を参照することによって判定し、命令デコード部３３において拡張命令をデコードしたことに応じてインターロック制御を行うものである。
【００５２】
なお、拡張命令をデコードした場合にインターロックする期間は、コプロセッサ８０における拡張命令の命令実行サイクル数に基づいて予め定めておけばよい。
【００５３】
主プロセッサ３０が有する命令デコード部３３以外の構成要素は、発明の実施の形態１の主プロセッサ１０が有するものと同一であるため、同一の符号を付して詳細な説明を省略する。
【００５４】
このような構成により、プロセッサシステム３においては、命令デコード部３３が拡張命令をデコードした時点でインターロック制御の実行判定が可能となる。このため、発明の実施の形態１にかかるプロセッサシステム１に比べてより早い時点において、インターロック制御の実行判定を行うことができる。また、主プロセッサ３０とコプロセッサ８０の間でＣＰＷＡＩＴ信号の転送が不要であるため、主プロセッサ３０とコプロセッサ８０の間のインタフェースを簡素化することができる。
【００５５】
発明の実施の形態３．
本実施の形態にかかるプロセッサシステム５の構成を図６に示す。プロセッサシステム５は、主プロセッサ５０にコプロセッサ６０が接続された構成を有する。主プロセッサ５０は、周波数フラグ７９を有していない点が発明の実施の形態１の主プロセッサ１０と異なる。主プロセッサ５０が有するその他の構成要素は、主プロセッサ１０が有するものと同一である。
【００５６】
コプロセッサ６０は、実行する拡張命令の種類によって命令実行サイクル数が異なるものである。ＭＵＬ８２１及び８２２によって実行される３２ビット×１６ビット乗算命令は、ＥＸ１ステージ及びＥＸ２ステージの２ステージにおいて、２クロックサイクルで実行される。一方、ユーザ定義演算器８２３によって実行されるユーザ定義命令に対してＥＸステージが分割されることはなく、ユーザ定義命令は１クロックサイクルで実行される。
【００５７】
つまり、コプロセッサ６０で実行される３２ビット×１６ビット乗算命令の命令実行サイクル数は３であり、ユーザ定義命令の命令実行サイクル数は２である。なお、主プロセッサ５０で実行される基本命令の命令実行サイクル数は２である。
【００５８】
制御部６１は、コプロＩ／Ｆ７８を介して入力されるＣＰＲＱ、ＣＰＯＰ、ＣＰＩＭＭを受信する。命令デコード部６１１は、拡張命令をデコードし、コプロセッサ６０が備える演算器において拡張命令を実行するために必要となる制御信号を出力する。この制御信号には、演算器に対する処理要求、オペランドレジスタの指定、即値が含まれる。また、制御部６１は、命令デコード部６１１がデコードした拡張命令の種別によってＥＸステージに要するクロックサイクル数を判定する。
【００５９】
具体的には、デコードした命令が３２ビット×１６ビット乗算命令である場合、制御部６１は、ＥＸステージを分割して２クロックサイクルで動作させるとともに、主プロセッサ５０に対して出力するＣＰＷＡＩＴ信号を有効に設定する。他方、デコードした命令がユーザ定義命令である場合、ユーザ定義命令の命令実行サイクル数が主プロセッサ５０で実行される基本命令の命令実行サイクル数と同じであるから、ＣＰＷＡＩＴ信号は出力されない。
【００６０】
上述したように、本実施形態にかかるプロセッサシステム５は、コプロセッサ６０が拡張命令の種別を識別し、基本命令の命令実行サイクル数より拡張命令の命令実行サイクル数が大きい場合に、ＣＰＷＡＩＴ信号を有効に設定するものである。また、主プロセッサ５０は、発明の実施の形態１の主プロセッサ１０と同様に、ＣＰＷＡＩＴ信号に応じてインターロック制御を行うものである。
【００６１】
このような構成によって、コプロセッサ６０における拡張命令の命令実行サイクル数が拡張命令の種別によって変わる場合でも、主プロセッサ５０における基本命令の命令実行サイクル数を変更する必要がない。このため、分岐ペナルティの悪化を抑制することができる。また、主プロセッサ５０の命令実行サイクル数を変更するための冗長な回路を必要としないため、主プロセッサ５０の構成を簡素化できる。
【００６２】
その他の実施の形態．
発明の実施の形態３では、コプロセッサ６０が備える制御部６１において拡張命令の種別を判定することとした。しかしながら、主プロセッサ５０が備える命令デコード部１３において拡張命令の種別を判定し、その種別が命令実行サイクル数の長い拡張命令を示す場合に、インターロック制御を行うこととしてもよい。
【００６３】
このような構成により、命令デコード部１３が拡張命令をデコードした時点でインターロック制御の実行判定が可能となる。このため、発明の実施の形態３にかかるプロセッサシステム５に比べてより早い時点において、インターロック制御の実行判定を行うことができる。また、主プロセッサ５０とコプロセッサ６０の間でＣＰＷＡＩＴ信号の転送が不要であるため、主プロセッサ５０とコプロセッサ６０の間のインタフェースを簡素化することができる。
【００６４】
発明の実施の形態１乃至３の主プロセッサ及びコプロセッサが有する演算器の構成は一例であり、プロセッサシステムの処理内容に応じて適宜選択されるものである。
【００６５】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【図面の簡単な説明】
【００６６】
【図１】発明の実施の形態１にかかるプロセッサシステムの構成を示すブロック図である。
【図２】発明の実施の形態１にかかるプロセッサシステムが備えるコプロセッサの動作を説明するためのタイミング図である。
【図３】ＣＰＷＡＩＴ信号の出力タイミングを説明するためのタイミング図である。
【図４】本発明の効果を説明するためのタイミング図である。
【図５】発明の実施の形態２にかかるプロセッサシステムの構成を示すブロック図である。
【図６】発明の実施の形態３にかかるプロセッサシステムの構成を示すブロック図である。
【図７】従来のプロセッサシステムの構成を示すブロック図である。
【図８】従来のプロセッサシステムのパイプラインを示す図である。
【符号の説明】
【００６７】
１、３、５  プロセッサシステム
１０、３０、５０  主プロセッサ
２０、６０、８０  コプロセッサ
１２  命令フェッチ部
１３、３３  命令デコード部
２１、６１、８１  制御部
７１  命令メモリ
７４  汎用レジスタ
７７  セレクタ
７８  コプロセッサインタフェース（コプロセッサＩ／Ｆ）
７９  周波数フラグ
８５  セレクタ
１２１  プログラムカウンタ
１２２  ＰＣ更新部
１３１  パイプライン制御回路
３３１  パイプライン制御回路
６１１  命令デコード部
７４１  乗算・積和演算器（ＭＡＣ）
７４２  算術・論理演算器（ＡＬＵ）
７４３  バレルシフタ（ＢＳＦＴ）
７５１  マルチプレクサ（ＭＵＸ）
８１１  命令デコード部
８２１、８２２  乗算器（ＭＵＬ）
８２３  ユーザ定義演算器
８３１〜８３３  フリップフロップ（ＦＦ）
８４１〜８４３  マルチプレクサ（ＭＵＸ）
【図１】
2007200180.tif 000003
【図２】
2007200180.tif 000004
【図３】
2007200180.tif 000005
【図４】
2007200180.tif 000006
【図５】
2007200180.tif 000007
【図６】
2007200180.tif 000008
【図７】
2007200180.tif 000009
【図８】
2007200180.tif 000010