(57)【要約】【課題】  演算処理装置の消費電力を削減する。【解決手段】  演算処理装置は、演算部と第１レジスタ部と第１選択部と第２選択部と第２レジスタ部とタイミング調整部とバイパス制御部とを有する。第１レジスタ部は、演算に使用するデータを保持する複数の第１レジスタを含む。第１選択部は、複数の第１レジスタのうち、読み出しアドレス信号が示す第１レジスタが保持するデータを選択する。第２選択部は、第１選択部が選択したデータと演算の結果を示すデータとを含むデータ群のうちのいずれかをバイパス選択信号に基づいて選択する。第２レジスタ部は、第２選択部が選択したデータを保持し、保持したデータを演算部に出力する。タイミング調整部は、読み出しアドレス信号を第１選択部に出力する。バイパス制御部は、第１選択部が選択したデータを除くデータの選択を示すバイパス選択信号を生成する場合、タイミング調整部の動作を停止させる。【選択図】  図１
2019008746.tif 000002
【特許請求の範囲】
【請求項１】
演算を実行する演算部を有する演算処理装置において、
前記演算部での演算に使用するデータを保持する複数の第１レジスタを含む第１レジスタ部と、
読み出しアドレス信号を受け、前記複数の第１レジスタのうち、読み出しアドレス信号が示す第１レジスタが保持するデータを選択する第１選択部と、
前記第１選択部が選択したデータと前記演算部が実行した演算の結果を示すデータとを含むデータ群のうちのいずれかのデータをバイパス選択信号に基づいて選択する第２選択部と、
前記第２選択部が選択したデータを保持し、保持したデータを前記演算部に出力する第２レジスタ部と、
読み出しアドレス信号を前記第１選択部に出力するタイミング調整部と、
バイパス選択信号を読み出しアドレス信号に基づいて生成し、データ群のうちの前記第１選択部が選択したデータを除くデータの選択を示すバイパス選択信号を生成する場合、前記タイミング調整部の動作を停止させるバイパス制御部と
を有することを特徴とする演算処理装置。
【請求項２】
請求項１に記載の演算処理装置において、
前記タイミング調整部は、読み出しアドレス信号を前記第１選択部にクロックに同期して出力し、
前記バイパス制御部は、データ群のうちの前記第１選択部が選択したデータを除くデータの選択を示すバイパス選択信号を生成する場合、前記タイミング調整部のクロックを停止して、前記タイミング調整部の動作を停止させる
ことを特徴とする演算処理装置。
【請求項３】
請求項１または請求項２に記載の演算処理装置において、
前記バイパス制御部は、データ群のうちの前記第１選択部が選択したデータを除くデータの選択を示すバイパス選択信号を生成する場合、前記タイミング調整部の動作を停止させて、前記タイミング調整部から前記第１選択部に出力される読み出しアドレス信号の遷移を停止させる
ことを特徴とする演算処理装置。
【請求項４】
請求項１ないし請求項３のいずれか１項に記載の演算処理装置において、
前記第２レジスタ部から前記演算部に出力されるデータを保持し、保持したデータを前記第２選択部に出力する第３レジスタ部をさらに有し、
前記第２選択部は、前記第１選択部が選択したデータと前記演算部が実行した演算の結果を示すデータと前記第２レジスタ部から出力されるデータと前記第３レジスタ部から出力されるデータとを含むデータ群のうちのいずれかのデータをバイパス選択信号に基づいて選択し、選択したデータを前記第２レジスタ部に出力する
ことを特徴とする演算処理装置。
【請求項５】
請求項１ないし請求項３のいずれか１項に記載の演算処理装置において、
前記第２選択部は、前記第１選択部が選択したデータと前記演算部が実行した演算の結果を示すデータと前記第２レジスタ部から出力されるデータとを含むデータ群のうちのいずれかのデータをバイパス選択信号に基づいて選択し、選択したデータを前記第２レジスタ部に出力する
ことを特徴とする演算処理装置。
【請求項６】
請求項４または請求項５に記載の演算処理装置において、
読み出しアドレス信号を前記タイミング調整部に出力するとともに、読み出しアドレス信号と、前記複数の第１レジスタのうち、前記演算部での演算の結果を示すデータを格納する第１レジスタを示す書き込みアドレス信号とを、前記バイパス制御部に出力する投入部をさらに有し、
前記バイパス制御部は、
前記投入部から受ける書き込みアドレス信号を順次保持する複数のステージを含む第１シフトレジスタと、
前記投入部から受ける読み出しアドレス信号を順次保持する複数のステージを含む第２シフトレジスタと、
前記投入部から受ける読み出しアドレス信号と前記第１シフトレジスタの複数のステージにそれぞれ保持された書き込みアドレス信号とを比較する第１比較部と、
前記投入部から受ける読み出しアドレス信号と前記第２シフトレジスタの複数のステージにそれぞれ保持された読み出しアドレス信号とを比較する第２比較部と、
前記タイミング調整部の動作を停止する停止信号を、前記第１比較部の比較結果および前記第２比較部の比較結果に基づいて生成する停止信号生成部と、
前記第２選択部に出力するバイパス選択信号を、前記第１比較部の比較結果および前記第２比較部の比較結果に基づいて生成するバイパス選択信号生成部とを有する
ことを特徴とする演算処理装置。
【請求項７】
請求項１ないし請求項３のいずれか１項に記載の演算処理装置において、
読み出しアドレス信号を前記タイミング調整部に出力するとともに、読み出しアドレス信号と、前記複数の第１レジスタのうち、前記演算部での演算の結果を示すデータを格納する第１レジスタを示す書き込みアドレス信号とを、前記バイパス制御部に出力する投入部をさらに有し、
前記バイパス制御部は、
前記投入部から受ける書き込みアドレス信号を順次保持する複数のステージを含む第１シフトレジスタと、
前記投入部から受ける読み出しアドレス信号と前記第１シフトレジスタの複数のステージにそれぞれ保持された書き込みアドレス信号とを比較する第１比較部と、
前記タイミング調整部の動作を停止する停止信号を、前記第１比較部の比較結果に基づいて生成する停止信号生成部と、
前記第２選択部に出力するバイパス選択信号を、前記第１比較部の比較結果に基づいて生成するバイパス選択信号生成部とを有する
ことを特徴とする演算処理装置。
【請求項８】
請求項１ないし請求項７のいずれか１項に記載の演算処理装置において、
前記演算部から出力されるデータを前記演算部が実行した演算の結果を示すデータとして保持し、保持したデータを前記第１レジスタ部および前記第２選択部に出力する第４レジスタ部をさらに有し、
前記第２選択部は、前記演算部から出力されるデータおよび前記第４レジスタ部から出力されるデータの各々を、前記演算部が実行した演算の結果を示すデータとして、データ群に含める
ことを特徴とする演算処理装置。
【請求項９】
演算を実行する演算部を有する演算処理装置の制御方法において、
前記演算処理装置が有する第１レジスタ部に含まれる複数の第１レジスタのいずれかが、前記演算部での演算に使用するデータを保持し、
前記演算処理装置が有する第１選択部が、読み出しアドレス信号を受け、前記複数の第１レジスタのうち、読み出しアドレス信号が示す第１レジスタが保持するデータを選択し、
前記演算処理装置が有する第２選択部が、前記第１選択部が選択したデータと前記演算部が実行した演算の結果を示すデータとを含むデータ群のうちのいずれかのデータをバイパス選択信号に基づいて選択し、
前記演算処理装置が有する第２レジスタ部が、前記第２選択部が選択したデータを保持し、保持したデータを前記演算部に出力し、
前記演算処理装置が有するタイミング調整部が、読み出しアドレス信号を前記第１選択部に出力し、
前記演算処理装置が有するバイパス制御部が、バイパス選択信号を読み出しアドレス信号に基づいて生成し、データ群のうちの前記第１選択部が選択したデータを除くデータの選択を示すバイパス選択信号を生成する場合、前記タイミング調整部の動作を停止させる
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）等の演算処理装置は、演算を実行する演算部、演算部での演算に使用するデータを保持するレジスタファイル、レジスタファイルから転送されるデータを保持するオペランドレジスタ等を有する。この種の演算処理装置は、複数の実行ステージを含むパイプラインを用いて命令を実行することにより、複数の命令を実行する。複数のステージは、例えば、命令を取り込むステージ、命令を解読するステージ、レジスタファイルからオペランドレジスタに転送したデータを用いて演算を実行するステージ、演算結果をレジスタファイルに書き込むステージ等である。
【０００３】
連続する２つの命令のうちの先行の命令の演算結果を後続の命令が使用する場合、先行の命令の演算結果を、レジスタファイルを介さずにオペランドレジスタに転送するバイパス転送を実行する演算処理装置が知られている（例えば、特許文献１、２参照）。この種の演算処理装置は、バイパス転送を実行することにより、先行の命令の演算結果がレジスタファイルに書き込まれるのを待つことなく、先行の命令の演算結果を用いて、後続の命令の演算を実行する。この場合、バイパス転送を実行しない場合に比べて、演算処理装置の性能は向上する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−１４３３２８号公報
【特許文献２】特開平５−１６５６３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、演算処理装置が、ＮＯＴゲート（インバータ）、ＮＡＮＤゲート、ＮＯＲゲート等のＣＭＯＳ（Complementary Metal Oxide Semiconductor）回路を有する場合、ＣＭＯＳ回路では、入力信号のレベルが切り替わる遷移期間に貫通電流が電源線と接地線との間に流れる。例えば、レジスタファイルでのデータの格納先を示すアドレス信号に基づいて、レジスタファイルからオペランドレジスタに転送するデータを選択する場合、アドレス信号が変化する度に、アドレス信号が伝達されるＣＭＯＳ回路に貫通電流が流れる。貫通電流が増加することにより、演算処理装置の消費電力が増加する。例えば、レジスタファイルからオペランドレジスタに転送するデータを選択する回路等の貫通電流を削減することで、演算処理装置の消費電力を削減することができる。
【０００６】
１つの側面では、本発明は、演算処理装置の消費電力を削減することを目的とする。
【課題を解決するための手段】
【０００７】
１つの実施態様では、演算処理装置は、演算を実行する演算部と第１レジスタ部と第１選択部と第２選択部と第２レジスタ部とタイミング調整部とバイパス制御部とを有する。第１レジスタ部は、演算部での演算に使用するデータを保持する複数の第１レジスタを含む。第１選択部は、読み出しアドレス信号を受け、複数の第１レジスタのうち、読み出しアドレス信号が示す第１レジスタが保持するデータを選択する。第２選択部は、第１選択部が選択したデータと演算部が実行した演算の結果を示すデータとを含むデータ群のうちのいずれかのデータをバイパス選択信号に基づいて選択する。第２レジスタ部は、第２選択部が選択したデータを保持し、保持したデータを演算部に出力する。タイミング調整部は、読み出しアドレス信号を第１選択部に出力する。バイパス制御部は、バイパス選択信号を読み出しアドレス信号に基づいて生成し、データ群のうちの第１選択部が選択したデータを除くデータの選択を示すバイパス選択信号を生成する場合、タイミング調整部の動作を停止させる。
【発明の効果】
【０００８】
１つの側面では、本発明は、演算処理装置の消費電力を削減することができる。
【図面の簡単な説明】
【０００９】
【図１】演算処理装置および演算処理装置の制御方法の一実施形態を示す図である。
【図２】図１に示した演算処理装置の動作の一例を示す図である。
【図３】演算処理装置および演算処理装置の制御方法の別の実施形態を示す図である。
【図４】図３に示した演算実行部の一例を示す図である。
【図５】図４に示したバイパス制御部の一例を示す図である。
【図６】図５に示した選択信号生成部の動作の一例を示す図である。
【図７】図５に示したバイパス制御部の動作の一例を示す図である。
【図８】図３に示した演算処理装置の動作の一例を示す図である。
【図９】図３に示した演算処理装置の動作の別の例を示す図である。
【図１０】図３に示した演算処理装置の動作の別の例を示す図である。
【図１１】図５に示したバイパス制御部の内部信号の状態の一例を示す図である。
【図１２】図５に示したバイパス制御部の内部信号の状態の別の例を示す図である。
【図１３】図５に示したバイパス制御部の内部信号の状態の別の例を示す図である。
【発明を実施するための形態】
【００１０】
以下、実施形態について、図面を用いて説明する。
【００１１】
図１は、演算処理装置および演算処理装置の制御方法の一実施形態を示す。図１に示す演算処理装置１０は、ＣＰＵ等のプロセッサであり、サーバ等の情報処理装置に搭載される。例えば、演算処理装置１０は、複数のステージを含むパイプラインによるパイプライン処理で命令を実行することにより、複数の命令を並列に実行する。演算処理装置１０は、第１レジスタ部２０、第１選択部２２、第２選択部２４、第２レジスタ部２６、演算部２８、タイミング調整部４０およびバイパス制御部５０を有する。
【００１２】
第１レジスタ部２０は、複数のデータの各々を記憶する複数のレジスタを有するレジスタファイル等であり、演算部２８での演算に使用するデータＤＴを保持する複数の第１レジスタ２１を有する。例えば、第１レジスタ部２０は、演算部２８での演算に使用するデータＤＴを図示しないデータキャッシュ等のキャッシュメモリから受け、受けたデータＤＴを複数の第１レジスタ２１のいずれかに格納する。また、第１レジスタ部２０は、演算部２８が演算した結果を示すデータＤＴを、複数の第１レジスタ２１のいずれかに格納する。
【００１３】
第１選択部２２は、第１レジスタ部２０から読み出すデータＤＴが格納されている第１レジスタ２１を示す読み出しアドレス信号ＲＡｂをタイミング調整部４０から受ける。そして、第１選択部２２は、複数の第１レジスタ２１のうち、読み出しアドレス信号ＲＡｂが示す第１レジスタ２１が保持するデータＤＴを選択し、選択したデータＤＴを第２選択部２４に転送する。
【００１４】
第２選択部２４は、第１選択部２２が選択したデータＤＴと演算部２８が実行した演算の結果を示すデータＤＴとを受ける。さらに、第２選択部２４は、バイパス選択信号ＳＥＬｂをバイパス制御部５０から受ける。なお、バイパス選択信号ＳＥＬｂは、第１選択部２２が選択したデータＤＴと演算部２８が実行した演算の結果を示すデータＤＴとを含むデータ群から、演算部２８での演算に使用するデータＤＴを選択するための選択信号である。第２選択部２４は、第１選択部２２が選択したデータＤＴと演算部２８が実行した演算の結果を示すデータＤＴとのうちのいずれかをバイパス選択信号ＳＥＬｂに基づいて選択し、選択したデータＤＴを第２レジスタ部２６に転送する。
【００１５】
例えば、第２選択部２４は、連続する２つの命令のうちの先行の命令の演算結果を後続の命令が使用する場合、演算部２８が実行した演算の結果を示すデータＤＴを、バイパス選択信号ＳＥＬｂに基づいて選択する。そして、第２選択部２４は、バイパス選択信号ＳＥＬｂに基づいて選択したデータＤＴ（演算部２８の演算結果）を第２レジスタ部２６に転送する。この場合、後続の命令の演算に使用するデータＤＴは、第１レジスタ部２０を介さずに第２レジスタ部２６に転送される。以下、演算に使用するデータＤＴが第１レジスタ部２０を介さずに第２レジスタ部２６に転送される処理は、バイパス転送とも称される。
【００１６】
このように、第２選択部２４は、第１選択部２２が選択したデータＤＴと演算部２８が実行した演算の結果を示すデータＤＴとを含むデータ群のうちのいずれかのデータＤＴをバイパス選択信号ＳＥＬｂに基づいて選択する。
【００１７】
第２レジスタ部２６は、演算部２８が実行する演算のオペランドを保持するオペランドレジスタ等である。第２レジスタ部２６は、第２選択部２４が選択したデータＤＴを保持し、保持したデータＤＴを演算部２８に出力する。
【００１８】
演算部２８は、命令のオペランド等のデータＤＴを第２レジスタ部２６から受けるとともに、命令の内容を示すオペコードＯＰＣをリザベーションステーション等の投入部から受ける。そして、演算部２８は、オペコードＯＰＣが示す演算を第２レジスタ部２６から受けたデータＤＴを用いて実行し、演算結果を示すデータＤＴを第２選択部２４および第１レジスタ部２０に出力する。
【００１９】
タイミング調整部４０は、読み出しアドレス信号ＲＡｂを第１選択部２２に出力する。例えば、タイミング調整部４０は、演算に使用するデータＤＴの第１レジスタ部２０での格納先（複数の第１レジスタ２１のいずれか）を示す読み出しアドレス信号ＲＡｐとクロックＣＫとを受ける。そして、タイミング調整部４０は、読み出しアドレス信号ＲＡｐを読み出しアドレス信号ＲＡｂとして、第１選択部２２にクロックＣＫに同期して出力する。なお、図１では、図を見やすくするために、タイミング調整部４０以外に転送されるクロックＣＫの記載を省略している。
【００２０】
バイパス制御部５０は、演算部２８での演算の結果を示すデータＤＴを格納する第１レジスタ２１を示す書き込みアドレス信号ＷＡｐと、読み出しアドレス信号ＲＡｐとを受ける。そして、バイパス制御部５０は、バイパス選択信号ＳＥＬｂを読み出しアドレス信号ＲＡｐおよび書き込みアドレス信号ＷＡｐに基づいて生成し、生成したバイパス選択信号ＳＥＬｂを第２選択部２４に出力する。
【００２１】
例えば、バイパス制御部５０は、連続する２つの命令のうちの後続の命令の読み出しアドレス信号ＲＡｐが先行の命令の書き込みアドレス信号ＷＡｐに一致する場合、演算部２８から出力されるデータＤＴを選択するバイパス選択信号ＳＥＬｂを生成する。これにより、バイパス転送が実行される。
【００２２】
また、バイパス制御部５０は、バイパス転送を実行する場合、タイミング調整部４０の動作を停止させる。例えば、バイパス制御部５０は、バイパス転送を実行する場合、タイミング調整部４０のクロックＣＫを停止することを示すクロックイネーブルＣＥＮをタイミング調整部４０に出力することにより、タイミング調整部４０のクロックＣＫを停止する。タイミング調整部４０のクロックＣＫが停止することにより、タイミング調整部４０の動作が停止する。クロックイネーブルＣＥＮは、タイミング調整部４０の動作を停止する停止信号の一例である。
【００２３】
このように、バイパス制御部５０は、データ群のうちの第１選択部２２が選択したデータＤＴを除くデータＤＴの選択を示すバイパス選択信号ＳＥＬｂを生成する場合、タイミング調整部４０の動作を停止させる。
【００２４】
タイミング調整部４０の動作を停止させることより、タイミング調整部４０から第１選択部２２に供給される読み出しアドレス信号ＲＡｂは、読み出しアドレス信号ＲＡｐが変化した場合でも、変化せずに値を維持する。すなわち、第１選択部２２に供給するアドレス信号ＲＡｂの遷移を停止することができる。これにより、アドレス信号ＲＡｂの値が切り替わる度に動作する第１選択部２２等において、貫通電流がＣＭＯＳインバータ等のＣＭＯＳ回路に流れることを抑止することができる。この結果、第１選択部２２等の消費電力を削減することができ、演算処理装置１０の消費電力を削減することができる。
【００２５】
なお、演算処理装置１０の構成は、図１に示す例に限定されない。例えば、第２選択部２４は、第１選択部２２が選択したデータＤＴと演算部２８の演算結果を示すデータＤＴとの２つのデータＤＴの他に、第２レジスタ部２６から演算部２８に出力されるデータＤＴを受けてもよい。この場合、第２選択部２４は、第１選択部２２が選択したデータＤＴと演算部２８の演算結果を示すデータＤＴと第２レジスタ部２６から受けたデータＤＴとを含むデータ群のうちのいずれかのデータＤＴをバイパス選択信号ＳＥＬｂに基づいて選択する。
【００２６】
図２は、図１に示した演算処理装置１０の動作の一例を示す。図２に示す動作は、演算処理装置の制御方法の一態様である。
【００２７】
ステップＳ１０では、演算処理装置１０は、演算に使用するデータＤＴを第１レジスタ部２０に含まれる複数の第１レジスタ２１のいずれかに格納する。これにより、第１レジスタ部２０に含まれる複数の第１レジスタ２１のいずれかは、演算に使用するデータを保持する。
【００２８】
次に、ステップＳ１２では、バイパス制御部５０は、データ群のいずれかのデータＤＴを選択するバイパス選択信号ＳＥＬｂを読み出しアドレス信号ＲＡｐおよび書き込みアドレス信号ＷＡｐに基づいて生成する。データ群は、図１で説明したように、第１選択部２２が選択したデータＤＴと演算部２８が実行した演算の結果を示すデータＤＴとを含む。
【００２９】
次に、ステップＳ１４では、バイパス制御部５０は、第１選択部２２が選択したデータＤＴを除くデータＤＴがバイパス選択信号ＳＥＬｂに基づいて選択されるか否かを判定する。すなわち、バイパス制御部５０は、バイパス転送が実行されるか否かを判定する。第１選択部２２が選択したデータＤＴを除くデータＤＴがバイパス選択信号ＳＥＬｂに基づいて選択される場合、すなわち、バイパス転送が実行される場合、演算処理装置１０の動作は、ステップＳ１６に移る。一方、第１選択部２２が選択したデータＤＴがバイパス選択信号ＳＥＬｂに基づいて選択される場合、すなわち、バイパス転送が実行されない場合、演算処理装置１０の動作は、ステップＳ１８に移る。
【００３０】
ステップＳ１６では、バイパス制御部５０は、タイミング調整部４０の動作を停止させる。例えば、バイパス制御部５０は、タイミング調整部４０のクロックＣＫを停止する。これにより、図１で説明したように、タイミング調整部４０から第１選択部２２に供給される読み出しアドレス信号ＲＡｂの遷移を停止することができ、第１選択部２２等の消費電力を削減することができる。この結果、演算処理装置１０の消費電力を削減することができる。
【００３１】
ステップＳ１８では、第１選択部２２は、第１レジスタ部２０に含まれる複数の第１レジスタ２１のうち、読み出しアドレス信号ＲＡｂが示す第１レジスタ２１が保持するデータＤＴを選択する。なお、読み出しアドレス信号ＲＡｂは、図１で説明したように、タイミング調整部４０から第１選択部２２に出力される。したがって、タイミング調整部４０の動作が停止している場合（ステップＳ１６の処理が実行された場合）、読み出しアドレス信号ＲＡｂが示す第１レジスタ２１が保持するデータＤＴ１と、演算に使用するデータＤＴとが一致しない場合がある。
【００３２】
次に、ステップＳ２０では、第２選択部２４は、データ群のいずれかのデータＤＴをバイパス選択信号ＳＥＬｂに基づいて選択し、バイパス選択信号ＳＥＬｂに基づいて選択したデータＤＴを第２レジスタ部２６に転送する。これにより、第２レジスタ部２６は、第２選択部２４が選択したデータＤＴを保持する。第２レジスタ部２６が保持したデータＤＴは、演算部２８に出力される。
【００３３】
なお、タイミング調整部４０の動作が停止している場合（ステップＳ１６の処理が実行された場合）、データ群のうち、第１選択部２２がステップＳ１８で選択したデータＤＴ１を除くデータＤＴがバイパス選択信号ＳＥＬｂに基づいて選択される。
【００３４】
次に、ステップＳ２２では、演算部２８は、第２レジスタ部２６から受けるデータＤＴを用いて演算を実行する。なお、演算処理装置１０の動作は、図２に示す例に限定されない。
【００３５】
以上、図１および図２に示す実施形態では、バイパス制御部５０は、演算に使用するデータＤＴを第１レジスタ部２０を介さずに第２レジスタ部２６に転送する場合、タイミング調整部４０の動作を停止させる。これにより、タイミング調整部４０から第１選択部２２に供給される読み出しアドレス信号ＲＡｂの遷移を停止することができ、第１選択部２２等が有するＣＭＯＳ回路に貫通電流が流れることを抑止することができる。この結果、第１選択部２２等の消費電力を削減することができ、演算処理装置１０の消費電力を削減することができる。
【００３６】
図３は、演算処理装置および演算処理装置の制御方法の別の実施形態を示す。図１で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図３に示す演算処理装置１２は、ＣＰＵ等のプロセッサであり、サーバ等の情報処理装置に搭載される。例えば、演算処理装置１２は、複数のステージを含むパイプラインによるパイプライン処理で命令を実行することにより、複数の命令を並列に実行する。演算処理装置１２は、ＣＰＵコア等の複数のプロセッサコア１００と、キャッシュメモリ２００と、メモリアクセス制御部３００と、入出力インタフェース４００、５００とを有する。
【００３７】
各プロセッサコア１００は、命令キャッシュ１１０、命令バッファ１１１、デコード部１１２、データキャッシュ１１３、リザベーションステーション１１４および演算実行部１１５を有する。
【００３８】
命令キャッシュ１１０は、キャッシュメモリ２００に比べて高速にアクセス可能な１次キャッシュメモリであり、演算実行部１１５が実行する命令を保持する。命令バッファ１１１は、命令キャッシュ１１０から命令を順次受け、命令キャッシュ１１０から受ける命令をデコード部１１２に順次転送する。デコード部１１２は、命令バッファ１１１から受ける命令を解読し、解読した命令をリザベーションステーション１１４に出力する。データキャッシュ１１３は、キャッシュメモリ２００に比べて高速にアクセス可能な１次キャッシュメモリであり、演算実行部１１５が実行する命令で使用するデータＤＴを保持する。
【００３９】
リザベーションステーション１１４は、演算実行部１１５への命令の投入をアウトオブオーダーで実行する。例えば、リザベーションステーション１１４は、デコード部１１２が解読した命令を蓄積し、蓄積した命令の依存関係を判定する。そして、リザベーションステーション１１４は、蓄積した命令を実行可能な命令から順に、依存関係の判定結果に基づいて演算実行部１１５に投入する。例えば、リザベーションステーション１１４は、命令の内容を示すオペコードＯＰＣ（ＯＰＣａ、ＯＰＣｅ）、アドレス信号ＡＤＲａ、ＲＡｐ、ＷＡｐ等を演算実行部１１５に出力する。
【００４０】
オペコードＯＰＣａは、メモリにアクセスする命令を示し、オペコードＯＰＣｅは、浮動小数点演算や固定小数点演算等を実行する演算命令を示す。アドレス信号ＡＤＲａは、オペコードＯＰＣａによりアクセスされるデータの格納先を示すアドレス信号である。アドレス信号ＲＡｐは、演算実行部１１５が実行する演算のオペランド等のデータＤＴの格納先を示す読み出しアドレス信号である。アドレス信号ＷＡｐは、演算実行部１１５での演算の結果を示すデータＤＴの格納先を示す書き込みアドレス信号である。リザベーションステーション１１４は、読み出しアドレス信号ＲＡｐと書き込みアドレス信号ＷＡｐとをバイパス制御部（例えば、図４に示すバイパス制御部１５０）に出力する投入部の一例である。
【００４１】
演算実行部１１５は、リザベーションステーション１１４から受けるオペコードＯＰＣに基づいて、演算等をパイプライン処理で実行する。なお、演算実行部１１５の詳細は、図４で説明する。
【００４２】
キャッシュメモリ２００は、データキャッシュ１１３等の１次キャッシュメモリに比べて大容量の２次キャッシュメモリである。例えば、キャッシュメモリ２００は、演算処理装置１２の図示しない外部のメモリ（例えば、主記憶装置等）に比べて高速にアクセス可能であり、外部のメモリに記憶されたデータの一部を保持する。なお、図３に示す例では、キャッシュメモリ２００は、複数のプロセッサコア１００に共有される。
【００４３】
メモリアクセス制御部３００は、演算処理装置１２の図示しない外部のメモリとの通信を制御するインタフェースである。例えば、メモリアクセス制御部３００は、ＤＩＭＭ（Dual Inline Memory Module）等のメモリとの通信を制御する。
【００４４】
入出力インタフェース４００は、例えば、ＰＣＩ（Peripheral Component Interconnect）  Ｅｘｐｒｅｓｓ規格（以下、ＰＣＩｅとも称する）に準拠したインタフェースである。例えば、入出力インタフェース４００は、図示しないストレージやホストコンピュータ内のＰＣＩｅに準拠したインタフェースに接続される。入出力インタフェース５００は、図示しない他の演算処理装置とのインタフェースであり、他の演算処理装置内の入出力インタフェースに接続される。
【００４５】
なお、演算処理装置１２の構成は、図３に示す例に限定されない。例えば、演算処理装置１２は、複数のプロセッサコア１００の各々に対応する複数のキャッシュメモリ２００を有してもよい。また、演算処理装置１２は、演算実行部１１５への命令の投入をインオーダーで実行する投入部を、リザベーションステーション１１４の代わりに有してもよい。
【００４６】
図４は、図３に示した演算実行部１１５の一例を示す。演算実行部１１５は、レジスタファイル１２０、第１選択部１２２、第２選択部１２４、オペランドレジスタ１２６、オペランドラッチ１２７、演算部１２８、アドレス計算部１２９およびリザルトレジスタ１３０を有する。さらに、演算実行部１１５は、タイミング調整部１４０およびバイパス制御部１５０を有する。
【００４７】
なお、第１選択部１２２と第２選択部１２４とオペランドレジスタ１２６とオペランドラッチ１２７とタイミング調整部１４０とバイパス制御部１５０内の一部の回路とを含む回路群は、演算部１２８が実行可能な命令のオペランド毎に設けられる。図４では、図を見やすくするために、第１選択部１２２、第２選択部１２４、オペランドレジスタ１２６、オペランドラッチ１２７およびタイミング調整部１４０等を含む他のオペランドに対応する回路群の記載を省略している。また、図４では、図１と同様に、図を見やすくするために、タイミング調整部１４０以外に転送されるクロックＣＫの記載を省略している。
【００４８】
また、図４では、説明を分かり易くするために、第１選択部１２２、演算部１２８、リザルトレジスタ１３０、オペランドレジスタ１２６およびオペランドラッチ１２７の各々から出力されるデータＤＴの符号の末尾に数字を付している。例えば、第１選択部１２２が選択したデータＤＴの符号の末尾には、数字の“０”を付し、演算部１２８から出力されるデータＤＴの符号の末尾には、数字の“１”を付している。
【００４９】
演算実行部１１５は、例えば、複数のステージを含むパイプラインによるパイプライン処理で演算を実行することにより、複数の演算を並列に実行する。図４に示す一点鎖線は、演算実行部１１５の各パイプラインステージの境界を示し、符号Ｐ、Ｂ、Ｘ（Ｘ１、Ｘ２、Ｘ３、Ｘ４）、Ｕは、各パイプラインステージのサイクルを示す。サイクルＰでは、命令が演算実行部１１５に投入される。サイクルＢでは、演算で使用されるデータＤＴがレジスタファイル１２０等からオペランドレジスタ１２６に転送される。サイクルＸ（Ｘ１、Ｘ２、Ｘ３、Ｘ４）では、演算部１２８が命令に基づく演算を実行する。サイクルＵでは、演算部１２８の演算結果を示すデータＤＴがレジスタファイル１２０に書き込まれる。以下、サイクルＰは、Ｐサイクルとも称され、サイクルＢは、Ｂサイクルとも称され、サイクルＸ（Ｘ１、Ｘ２、Ｘ３、Ｘ４）は、Ｘ（Ｘ１、Ｘ２、Ｘ３、Ｘ４）サイクルとも称され、サイクルＵは、Ｕサイクルとも称される。なお、パイプラインステージの境界およびパイプラインステージの数は、図４に示す例に限定されない。また、図４では、図を見やすくするために、命令の内容を示すオペコードＯＰＣ等が演算部１２８等に到達するまでに通過するパイプラインレジスタ等の記載を省略している。
【００５０】
レジスタファイル１２０は、演算部１２８およびアドレス計算部１２９等で使用されるデータＤＴを保持する複数のレジスタ１２１を有する。例えば、レジスタファイル１２０は、Ｐサイクルにおいて、演算等に使用するデータＤＴをデータキャッシュ１１３から受け、受けたデータＤＴを複数のレジスタ１２１のいずれかに格納する。複数のレジスタ１２１は、演算部１２８での演算に使用するデータＤＴを保持する複数の第１レジスタの一例であり、レジスタファイル１２０は、複数の第１レジスタを含む第１レジスタ部の一例である。
【００５１】
第１選択部１２２は、Ｂサイクルにおいて、レジスタファイル１２０から読み出すデータＤＴが格納されているレジスタ１２１を示す読み出しアドレス信号ＲＡｂを、タイミング調整部１４０から受ける。そして、第１選択部１２２は、複数のレジスタ１２１のうち、読み出しアドレス信号ＲＡｂが示すレジスタ１２１が保持するデータＤＴ０を選択し、選択したデータＤＴ０を第２選択部１２４に転送する。
【００５２】
第２選択部１２４は、Ｂサイクルにおいて、データＤＴ０を第１選択部１２２から受け、演算部１２８が実行した演算の結果を示すデータＤＴ１を演算部１２８から受ける。さらに、第２選択部１２４は、データＤＴ２をリザルトレジスタ１３０から受け、データＤＴ３をオペランドレジスタ１２６から受け、データＤＴ４をオペランドラッチ１２７から受ける。また、第２選択部１２４は、バイパス選択信号ＳＥＬｂをバイパス制御部１５０から受ける。そして、第２選択部１２４は、データＤＴ０、ＤＴ１、ＤＴ２、ＤＴ３、ＤＴ４を含むデータ群のうちのいずれかのデータＤＴをバイパス選択信号ＳＥＬｂに基づいて選択し、選択したデータＤＴをオペランドレジスタ１２６に転送する。
【００５３】
オペランドレジスタ１２６は、演算部１２８が実行する演算のオペランド等のデータＤＴを保持する。例えば、オペランドレジスタ１２６は、Ｂサイクルにおいて、第２選択部１２４から受けるデータＤＴを保持する。すなわち、オペランドレジスタ１２６は、第２選択部１２４が選択したデータＤＴを保持する。そして、オペランドレジスタ１２６は、Ｂサイクルで保持したデータＤＴを、Ｘ１サイクルにおいて、第２選択部１２４、オペランドラッチ１２７および演算部１２８に出力する。オペランドレジスタ１２６は、第２選択部１２４が選択したデータＤＴを保持し、保持したデータＤＴを演算部１２８に出力する第２レジスタ部の一例である。
【００５４】
なお、例えば、オペランドレジスタ１２６から第２選択部１２４およびオペランドラッチ１２７に出力されたデータＤＴ３は、２つの命令のうちの後続の命令の演算で使用される場合、第２選択部１２４により選択される。これにより、後続の命令において、データＤＴ３等のバイパス転送が実行される。
【００５５】
オペランドラッチ１２７は、オペランドレジスタ１２６から受けるデータＤＴ３を保持する。そして、オペランドラッチ１２７は、オペランドレジスタ１２６から受けたデータＤＴ３を、オペランドレジスタ１２６からデータＤＴ３を受けたサイクルの次のサイクルにおいて、データＤＴ４として第２選択部１２４に出力する。なお、オペランドラッチ１２７は、第２レジスタ部（オペランドレジスタ１２６）から演算部１２８に出力されるデータＤＴを保持し、保持したデータＤＴを第２選択部１２４に出力する第３レジスタ部の一例である。
【００５６】
演算部１２８は、Ｘサイクルにおいて、命令の内容を示すオペコードＯＰＣｅをリザベーションステーション１１４から図示しないパイプラインレジスタ等を介して受けるとともに、命令のオペランド等のデータＤＴをオペランドレジスタ１２６から受ける。そして、演算部１２８は、例えば、オペコードＯＰＣｅが示す演算をオペランドレジスタ１２６から受けたデータＤＴを用いて実行し、演算結果を示すデータＤＴ１をリザルトレジスタ１３０および第２選択部１２４に出力する。なお、例えば、演算部１２８から第２選択部１２４に出力されたデータＤＴ１は、２つの命令のうちの後続の命令の演算で使用される場合、第２選択部１２４により選択される。
【００５７】
アドレス計算部１２９は、メモリにアクセスする命令を示すオペコードＯＰＣａ等を受け、アクセス対象のデータＤＴのデータキャッシュ１１３での格納先を示すアドレスを計算する。そして、アドレス計算部１２９は、レジスタファイル１２０から受けるデータＤＴを、データキャッシュ１１３に格納する。なお、図４では、図を見やすくするために、アドレス信号ＡＤＲａが伝達される信号線の記載を省略している。
【００５８】
リザルトレジスタ１３０は、演算部１２８から出力されるデータＤＴ１を、演算部１２８が実行した演算の結果を示すデータＤＴとして保持する。例えば、リザルトレジスタ１３０は、Ｘ４サイクルにおいて、演算部１２８から受けるデータＤＴ１を保持する。そして、リザルトレジスタ１３０は、Ｘ４サイクルで保持したデータＤＴ１を、Ｕサイクルにおいて、データＤＴ２としてレジスタファイル１２０および第２選択部１２４に出力する。
【００５９】
これにより、演算部１２８が実行した演算の結果を示すデータＤＴ２は、Ｕサイクルにおいて、レジスタファイル１２０に含まれる複数のレジスタ１２１のいずれかに書き込まれる。また、例えば、リザルトレジスタ１３０から第２選択部１２４に出力されたデータＤＴ２は、２つの命令のうちの後続の命令の演算で使用される場合、第２選択部１２４により選択される。リザルトレジスタ１３０は、演算部１２８から受けるデータＤＴを第１レジスタ部（レジスタファイル１２０）および第２選択部１２４に出力する第４レジスタ部の一例である。
【００６０】
タイミング調整部１４０は、例えば、クロックＣＫに同期して動作するフリップフロップ回路等である。タイミング調整部１４０は、パイプライン処理を実行する際の動作クロックであるクロックＣＫを受け、クロックＣＫに同期して動作する。例えば、タイミング調整部１４０は、Ｐサイクルにおいて、演算に使用するデータＤＴのレジスタファイル１２０での格納先（複数のレジスタ１２１のいずれか）を示す読み出しアドレス信号ＲＡｐを、リザベーションステーション１１４から受ける。そして、タイミング調整部１４０は、Ｂサイクルにおいて、読み出しアドレス信号ＲＡｐを読み出しアドレス信号ＲＡｂとして、第１選択部１２２にクロックＣＫに同期して出力する。
【００６１】
バイパス制御部１５０は、Ｐサイクルにおいて、読み出しアドレス信号ＲＡｐおよび書き込みアドレス信号ＷＡｐをリザベーションステーション１１４から受ける。そして、バイパス制御部１５０は、バイパス選択信号ＳＥＬｂを読み出しアドレス信号ＲＡｐおよび書き込みアドレス信号ＷＡｐに基づいて生成し、生成したバイパス選択信号ＳＥＬｂを、Ｂサイクルにおいて、第２選択部１２４に出力する。なお、書き込みアドレス信号ＷＡｐは、レジスタファイル１２０が有する複数のレジスタ１２１のうち、演算部１２８の演算結果を示すデータＤＴを格納するレジスタ１２１を示す。
【００６２】
また、バイパス制御部１５０は、データＤＴ０、ＤＴ１、ＤＴ２、ＤＴ３、ＤＴ４を含むデータ群のうちのデータＤＴ０以外のデータＤＴの選択を示すバイパス選択信号ＳＥＬｂを生成する場合、タイミング調整部１４０のクロックＣＫを停止する。すなわち、バイパス制御部１５０は、演算に使用するデータＤＴをレジスタファイル１２０を介さずにオペランドレジスタ１２６に転送するバイパス転送を実行する場合、タイミング調整部１４０の動作を停止させる。例えば、バイパス制御部１５０は、バイパス転送を実行する場合、Ｐサイクルにおいて、タイミング調整部１４０のクロックＣＫを停止することを示すクロックイネーブルＣＥＮをタイミング調整部１４０に出力する。これにより、タイミング調整部１４０のクロックＣＫが停止し、タイミング調整部１４０の動作が停止する。これにより、読み出しアドレス信号ＲＡｂの遷移を停止させることができる。
【００６３】
ここで、読み出しアドレス信号ＲＡｐの遷移は停止していないが、読み出しアドレス信号ＲＡｐの遷移を停止しないことによる影響は、読み出しアドレス信号ＲＡｂの遷移を停止することにより得られる消費電力削減の効果に比べて小さい。例えば、読み出しアドレス信号ＲＡｐをリザベーションステーション１１４からタイミング調整部１４０まで伝達する配線は、レジスタファイル１２０内のレジスタ１２１を示す１つのアドレスの配線である。これに対し、読み出しアドレス信号ＲＡｂをタイミング調整部１４０から第１選択部１２２まで伝達する配線は、読み出しアドレス信号ＲＡｂをレジスタファイル１２０の規模に応じて分配する配線である。したがって、タイミング調整部１４０から第１選択部１２２までの配線の量は、リザベーションステーション１１４からタイミング調整部１４０までの配線に比べて、増加する。
【００６４】
このため、タイミング調整部１４０から第１選択部１２２までの配線を駆動することにより消費される電力は、リザベーションステーション１１４からタイミング調整部１４０までの配線を駆動することにより消費される電力に比べて大きい。したがって、タイミング調整部１４０から第１選択部１２２までの膨大な配線の駆動を停止することにより、消費電力を効率よく削減することができる。
【００６５】
なお、演算実行部１１５の構成および動作は、図４に示す例に限定されない。例えば、オペランドラッチ１２７は、オペランドレジスタ１２６から受けるデータＤＴ３を順次保持する複数のステージを含むシフトレジスタでもよい。あるいは、オペランドラッチ１２７は、省かれてもよい。また、例えば、リザルトレジスタ１３０は、省かれてもよい。
【００６６】
また、例えば、演算実行部１１５は、演算結果を示すデータＤＴ１のレジスタファイル１２０への書き込みを２サイクル以上かけて実行してもよい。あるいは、Ｘサイクルは、１サイクル以上で３サイクル以下でもよいし、５サイクル以上でもよい。また、例えば、演算実行部１１５は、オペランドレジスタ１２６等に保持されたデータＤＴが図示しない他のオペランドレジスタで使用される場合、オペランドレジスタ１２６等から他のオペランドレジスタにデータＤＴをバイパスしてもよい。
【００６７】
図５は、図４に示したバイパス制御部１５０の一例を示す。図４で説明したように、図５に示す一点鎖線は、演算実行部１１５の各パイプラインステージの境界を示し、符号Ｐ、Ｂ、Ｘ１、Ｘ２、Ｘ３、Ｘ４、Ｕは、各パイプラインステージのサイクルを示す。
【００６８】
バイパス制御部１５０は、シフトレジスタ１６０、１７０、比較部１８１、１８２、１８３、１８４、選択信号生成部１９０、フリップフロップ回路１９２、否定論理和回路１９４および論理積回路１９６を有する。
【００６９】
なお、シフトレジスタ１７０と比較部１８１、１８２、１８３、１８４と選択信号生成部１９０とフリップフロップ回路１９２と否定論理和回路１９４と論理積回路１９６とを含む回路群は、演算部１２８が実行可能な命令のオペランド毎に設けられる。すなわち、図５に示すバイパス制御部１５０内のシフトレジスタ１６０を除く回路群は、第１選択部１２２と第２選択部１２４とオペランドレジスタ１２６とオペランドラッチ１２７とタイミング調整部１４０とを含む回路群毎に設けられる。図５では、図を見やすくするために、シフトレジスタ１７０と比較部１８１、１８２、１８３、１８４と選択信号生成部１９０とフリップフロップ回路１９２と否定論理和回路１９４と論理積回路１９６とを含む他のオペランドに対応する回路群の記載を省略している。
【００７０】
シフトレジスタ１６０は、投入部（リザベーションステーション１１４）から受ける書き込みアドレス信号ＷＡｐを順次保持する複数のステージを含む第１シフトレジスタの一例である。例えば、シフトレジスタ１６０は、クロックＣＫに同期して動作するフリップフロップ回路１６１、１６２、１６３、１６４、１６５を有する。
【００７１】
フリップフロップ回路１６１は、Ｐサイクルにおいて、書き込みアドレス信号ＷＡｐをリザベーションステーション１１４から受け、受けた書き込みアドレス信号ＷＡｐを保持する。そして、フリップフロップ回路１６１は、リザベーションステーション１１４から受けた書き込みアドレス信号ＷＡｐを、Ｂサイクルにおいて、書き込みアドレス信号ＷＡｓｂとしてフリップフロップ回路１６２に出力する。
【００７２】
フリップフロップ回路１６２は、Ｂサイクルにおいて、フリップフロップ回路１６１から受けた書き込みアドレス信号ＷＡｓｂを保持する。そして、フリップフロップ回路１６２は、フリップフロップ回路１６１から受けた書き込みアドレス信号ＷＡｓｂを、Ｘ１サイクルにおいて、書き込みアドレス信号ＷＡｓｘ１としてフリップフロップ回路１６３に出力する。
【００７３】
フリップフロップ回路１６３は、Ｘ１サイクルにおいて、フリップフロップ回路１６２から受けた書き込みアドレス信号ＷＡｓｘ１を保持する。そして、フリップフロップ回路１６３は、フリップフロップ回路１６２から受けた書き込みアドレス信号ＷＡｓｘ１を、Ｘ２サイクルにおいて、書き込みアドレス信号ＷＡｓｘ２としてフリップフロップ回路１６４に出力する。
【００７４】
フリップフロップ回路１６４は、Ｘ２サイクルにおいて、フリップフロップ回路１６３から受けた書き込みアドレス信号ＷＡｓｘ２を保持する。そして、フリップフロップ回路１６４は、フリップフロップ回路１６３から受けた書き込みアドレス信号ＷＡｓｘ２を、Ｘ３サイクルにおいて、書き込みアドレス信号ＷＡｓｘ３としてフリップフロップ回路１６５および比較部１８１に出力する。
【００７５】
フリップフロップ回路１６５は、Ｘ３サイクルにおいて、フリップフロップ回路１６４から受けた書き込みアドレス信号ＷＡｓｘ３を保持する。そして、フリップフロップ回路１６５は、フリップフロップ回路１６４から受けた書き込みアドレス信号ＷＡｓｘ３を、Ｘ４サイクルにおいて、書き込みアドレス信号ＷＡｓｘ４として比較部１８２に出力する。このように、シフトレジスタ１６０は、リザベーションステーション１１４から受ける書き込みアドレス信号ＷＡｐを順次保持する複数のフリップフロップ回路１６１、１６２、１６３、１６４、１６５を有する。
【００７６】
シフトレジスタ１７０は、投入部（リザベーションステーション１１４）から受ける読み出しアドレス信号ＲＡｐを順次保持する複数のステージを含む第２シフトレジスタの一例である。例えば、シフトレジスタ１７０は、クロックＣＫに同期して動作するフリップフロップ回路１７１、１７２を有する。
【００７７】
フリップフロップ回路１７１は、Ｐサイクルにおいて、読み出しアドレス信号ＲＡｐをリザベーションステーション１１４から受け、受けた読み出しアドレス信号ＲＡｐを保持する。そして、フリップフロップ回路１６１は、リザベーションステーション１１４から受けた読み出しアドレス信号ＲＡｐを、Ｂサイクルにおいて、読み出しアドレス信号ＲＡｓｂとしてフリップフロップ回路１７２および比較部１８３に出力する。
【００７８】
フリップフロップ回路１７２は、Ｂサイクルにおいて、フリップフロップ回路１７１から受けた読み出しアドレス信号ＲＡｓｂを保持する。そして、フリップフロップ回路１７２は、フリップフロップ回路１７１から受けた読み出しアドレス信号ＲＡｓｂを、Ｘ１サイクルにおいて、読み出しアドレス信号ＲＡｓｘ１として比較部１８４に出力する。このように、シフトレジスタ１７０は、リザベーションステーション１１４から受ける読み出しアドレス信号ＲＡｐを順次保持する複数のフリップフロップ回路１７１、１７２を有する。
【００７９】
比較部１８１は、Ｐサイクルにおいて、読み出しアドレス信号ＲＡｐをリザベーションステーション１１４から受ける。また、比較部１８１は、書き込みアドレス信号ＷＡｓｘ３をフリップフロップ回路１６４から受ける。そして、比較部１８１は、読み出しアドレス信号ＲＡｐと書き込みアドレス信号ＷＡｓｘ３とを比較し、比較結果を示す信号ＣＭＰ１を選択信号生成部１９０および否定論理和回路１９４に出力する。例えば、比較部１８１は、読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ３の値とが一致する場合、論理１の信号ＣＭＰ１を選択信号生成部１９０および否定論理和回路１９４に出力する。また、比較部１８１は、読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ３の値とが一致しない場合、論理０の信号ＣＭＰ１を選択信号生成部１９０および否定論理和回路１９４に出力する。
【００８０】
比較部１８２、１８３、１８４は、読み出しアドレス信号ＲＡｐと比較される信号を除いて、比較部１８１と同一または同様である。例えば、比較部１８２は、読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ４の値とが一致する場合、論理１の信号ＣＭＰ２を選択信号生成部１９０および否定論理和回路１９４に出力する。
【００８１】
比較部１８３は、読み出しアドレス信号ＲＡｐの値と読み出しアドレス信号ＲＡｓｂの値とが一致する場合、論理１の信号ＣＭＰ３を選択信号生成部１９０および否定論理和回路１９４に出力する。比較部１８４は、読み出しアドレス信号ＲＡｐの値と読み出しアドレス信号ＲＡｓｘ１の値とが一致する場合、論理１の信号ＣＭＰ４を選択信号生成部１９０および否定論理和回路１９４に出力する。
【００８２】
比較部１８１、１８２は、読み出しアドレス信号ＲＡｐと第１シフトレジスタ（シフトレジスタ１６０）の複数のステージにそれぞれ保持された書き込みアドレス信号（ＷＡｓｘ３、ＷＡｓｘ４）とを比較する第１比較部の一例である。比較部１８３、１８４は、読み出しアドレス信号ＲＡｐと第２シフトレジスタ（シフトレジスタ１７０）の複数のステージにそれぞれ保持された読み出しアドレス信号（ＲＡｓｂ、ＲＡｓｘ１）とを比較する第２比較部の一例である。
【００８３】
選択信号生成部１９０は、第２選択部１２４に出力するバイパス選択信号ＳＥＬｂを、第１比較部（比較部１８１、１８２）の比較結果および第２比較部（比較部１８３、１８４）の比較結果に基づいて生成するバイパス選択信号生成部の一例である。選択信号生成部１９０は、比較部１８１、１８２、１８３、１８４の各々から受ける信号ＣＭＰ１、ＣＭＰ２、ＣＭＰ３、ＣＭＰ４に基づいて、バイパス選択信号ＳＥＬｐを生成する。そして、選択信号生成部１９０は、信号ＣＭＰ１、ＣＭＰ２、ＣＭＰ３、ＣＭＰ４に基づいて生成したバイパス選択信号ＳＥＬｐを、フリップフロップ回路１９２に出力する。比較部１８１、１８２、１８３、１８４の比較結果とバイパス選択信号ＳＥＬｐとの対応は、図６で説明する。
【００８４】
フリップフロップ回路１９２は、クロックＣＫに同期して動作する。例えば、フリップフロップ回路１９２は、選択信号生成部１９０から受けたバイパス選択信号ＳＥＬｐを保持する。そして、フリップフロップ回路１９２は、選択信号生成部１９０からバイパス選択信号ＳＥＬｐを受けたサイクルの次のサイクルにおいて、バイパス選択信号ＳＥＬｐをバイパス選択信号ＳＥＬｂとして、第２選択部１２４にクロックＣＫに同期して出力する。
【００８５】
否定論理和回路１９４および論理積回路１９６を含む回路群は、タイミング調整部１４０の動作を停止する停止信号（クロックイネーブルＣＥＮ）を、第１比較部の比較結果および第２比較部の比較結果に基づいて生成する停止信号生成部の一例である。
【００８６】
否定論理和回路１９４は、比較部１８１、１８２、１８３、１８４の各々から受ける４つの信号ＣＭＰ１、ＣＭＰ２、ＣＭＰ３、ＣＭＰ４の否定論理和を演算し、演算結果を示す信号ＣＭＰ０を論理積回路１９６に出力する。例えば、否定論理和回路１９４は、信号ＣＭＰ１、ＣＭＰ２、ＣＭＰ３、ＣＭＰ４の全てが論理０の場合、論理１の信号ＣＭＰ０を論理積回路１９６に出力する。また、否定論理和回路１９４は、信号ＣＭＰ１、ＣＭＰ２、ＣＭＰ３、ＣＭＰ４の少なくとも１つが論理１の場合、論理０の信号ＣＭＰ０を論理積回路１９６に出力する。
【００８７】
論理積回路１９６は、レジスタファイル１２０からオペランドレジスタ１２６にデータＤＴをセットさせる信号ＳＥＴＲを、リザベーションステーション１１４から受け、信号ＣＭＰ０を否定論理和回路１９４から受ける。そして、論理積回路１９６は、信号ＳＥＴＲと信号ＣＭＰ０との論理積を演算し、演算結果をクロックイネーブルＣＥＮとしてタイミング調整部１４０に出力する。
【００８８】
例えば、信号ＣＭＰ０および信号ＳＥＴＲの両方が論理１の場合、すなわち、２つの命令のうちの後続の命令でバイパス転送が実行されない場合、クロックイネーブルＣＥＮは、論理１になる。この場合、タイミング調整部１４０から出力される読み出しアドレス信号ＲＡｂの遷移は、停止しない。
【００８９】
また、例えば、信号ＣＭＰ０が論理０の場合、すなわち、２つの命令のうちの後続の命令でバイパス転送が実行される場合、クロックイネーブルＣＥＮは、論理０になる。クロックイネーブルＣＥＮを論理０にすることにより、タイミング調整部１４０内のクロックＣＫを停止することができ、タイミング調整部１４０から出力される読み出しアドレス信号ＲＡｂの遷移を停止させることができる。この結果、読み出しアドレス信号ＲＡｂが伝達されるＣＭＯＳ回路（例えば、第１選択部１２２等が有するＣＭＯＳ回路）に貫通電流が流れることを抑止することができ、第１選択部１２２等の消費電力を削減することができる。また、タイミング調整部１４０の動作が停止するため、タイミング調整部１４０の消費電力を削減することができる。この結果、演算処理装置１２の消費電力を削減することができる。
【００９０】
なお、バイパス制御部１５０の構成は、図５に示す例に限定されない。例えば、バイパス制御部１５０は、選択信号生成部１９０から出力されるバイパス選択信号ＳＥＬｐからクロックイネーブルＣＥＮを生成する停止信号生成部を、否定論理和回路１９４および論理積回路１９６の代わりに有してもよい。また、例えば、オペランドラッチ１２７がデータＤＴ３を順次保持する複数のステージを含む場合、シフトレジスタ１６０が有するフリップフロップ回路１７２、比較部１８４等は、オペランドラッチ１２７のステージ数に応じて追加されてもよい。また、例えば、オペランドラッチ１２７からのバイパス経路が省かれた場合、フリップフロップ回路１７２および比較部１８４は、省かれてもよい。また、例えば、オペランドレジスタ１２６からのバイパス経路およびオペランドラッチ１２７からのバイパス経路が省かれた場合、シフトレジスタ１７０および比較部１８３、１８４は、省かれてもよい。
【００９１】
図６は、図５に示した選択信号生成部１９０の動作の一例を示す。図６に示す読み出しアドレス信号ＲＡｐは、２つの命令のうちの後続の命令でバイパス制御部１５０に投入されたアドレス信号を示す。また、図６に示す書き込みアドレス信号ＷＡｓｘ３、ＷＡｓｘ４、読み出しアドレス信号ＲＡｓｂ、ＲＡｓｘ１は、２つの命令のうちの先行の命令でバイパス制御部１５０に投入されたアドレス信号に対応する。図６に示す“０ｘ１”、“０ｘ２”、“０ｘ３”、“０ｘ４”、“０ｘ０”は、１６進数の値を示す。
【００９２】
読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ３の値とが一致する場合、選択信号生成部１９０は、論理１の信号ＣＭＰ１と論理０の信号ＣＭＰ２、ＣＭＰ３、ＣＭＰ４とを受ける。この場合、選択信号生成部１９０は、“０ｘ１”のバイパス選択信号ＳＥＬｐをフリップフロップ回路１９２に出力する。“０ｘ１”のバイパス選択信号ＳＥＬｐは、演算部１２８からのバイパスを示す。なお、読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ３の値とが一致する場合、２つの命令は、先行の命令の演算結果が書き込まれた後に後続の命令がアドレスを読み込むＲＡＷ（Read After Write）依存を有する。演算部１２８からのバイパスは、ＲＡＷ依存を有する２つの命令でのバイパスのうち、最短のバイパスである。
【００９３】
読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ４の値とが一致する場合、選択信号生成部１９０は、論理１の信号ＣＭＰ２と論理０の信号ＣＭＰ１、ＣＭＰ３、ＣＭＰ４とを受ける。この場合、選択信号生成部１９０は、“０ｘ２”のバイパス選択信号ＳＥＬｐをフリップフロップ回路１９２に出力する。“０ｘ２”のバイパス選択信号ＳＥＬｐは、リザルトレジスタ１３０からのバイパスを示す。なお、読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ４の値とが一致する場合、２つの命令は、ＲＡＷ依存を有する。リザルトレジスタ１３０からのバイパスは、ＲＡＷ依存を有する２つの命令でのバイパスのうち、最短のバイパスから１命令後のバイパスである。
【００９４】
読み出しアドレス信号ＲＡｐの値と読み出しアドレス信号ＲＡｓｂの値とが一致する場合、選択信号生成部１９０は、論理１の信号ＣＭＰ３と論理０の信号ＣＭＰ１、ＣＭＰ２、ＣＭＰ４とを受ける。この場合、選択信号生成部１９０は、“０ｘ３”のバイパス選択信号ＳＥＬｐをフリップフロップ回路１９２に出力する。“０ｘ３”のバイパス選択信号ＳＥＬｐは、オペランドレジスタ１２６からのバイパスを示す。なお、読み出しアドレス信号ＲＡｐの値と読み出しアドレス信号ＲＡｓｂの値とが一致する場合、２つの命令は、先行の命令が読み込んだアドレスを後続の命令が読み込むＲＡＲ（Read After Read）依存を有する。オペランドレジスタ１２６からのバイパスは、ＲＡＲ依存を有する２つの命令でのバイパスのうち、最短のバイパスである。
【００９５】
読み出しアドレス信号ＲＡｐの値と読み出しアドレス信号ＲＡｓｘ１の値とが一致する場合、選択信号生成部１９０は、論理１の信号ＣＭＰ４と論理０の信号ＣＭＰ１、ＣＭＰ２、ＣＭＰ３とを受ける。この場合、選択信号生成部１９０は、“０ｘ４”のバイパス選択信号ＳＥＬｐをフリップフロップ回路１９２に出力する。“０ｘ４”のバイパス選択信号ＳＥＬｐは、オペランドラッチ１２７からのバイパスを示す。なお、読み出しアドレス信号ＲＡｐの値と読み出しアドレス信号ＲＡｓｘ１の値とが一致する場合、２つの命令は、ＲＡＲ依存を有する。オペランドラッチ１２７からのバイパスは、ＲＡＲ依存を有する２つの命令でのバイパスのうち、最短のバイパスから１命令後のバイパスである。
【００９６】
読み出しアドレス信号ＲＡｐの値が、書き込みアドレス信号ＷＡｓｘ３、ＷＡｓｘ４、読み出しアドレス信号ＲＡｓｂ、ＲＡｓｘ１のいずれの値にも一致しない場合、選択信号生成部１９０は、論理０の信号ＣＭＰ１、ＣＭＰ２、ＣＭＰ３、ＣＭＰ４を受ける。この場合、選択信号生成部１９０は、“０ｘ０”のバイパス選択信号ＳＥＬｐをフリップフロップ回路１９２に出力する。“０ｘ０”のバイパス選択信号ＳＥＬｐは、バイパスせずにレジスタファイル１２０からデータＤＴを読み出すことを示す。読み出しアドレス信号ＲＡｐの値が、書き込みアドレス信号ＷＡｓｘ３、ＷＡｓｘ４、読み出しアドレス信号ＲＡｓｂ、ＲＡｓｘ１のいずれの値にも一致しない場合、２つの命令に依存関係はない。
【００９７】
なお、選択信号生成部１９０の動作は、図６に示す例に限定されない。例えば、選択信号生成部１９０は、信号ＣＭＰ１、ＣＭＰ２、ＣＭＰ３、ＣＭＰ４を、４ビットのバイパス選択信号ＳＥＬｐとしてフリップフロップ回路１９２に転送してもよい。
【００９８】
図７は、図５に示したバイパス制御部１５０の動作の一例を示す。なお、図７に示す動作は、演算処理装置の制御方法の一態様である。図７に示す読み出しアドレス信号ＲＡｐ、ＲＡｓｂ、ＲＡｓｘ１、書き込みアドレス信号ＷＡｓｘ３、ＷＡｓｘ４の意味は、図６と同様である。
【００９９】
ステップＳ１００では、比較部１８１は、読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ３の値とが一致するか否かを判定する。読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ３の値とが一致する場合、バイパス制御部１５０の動作は、ステップＳ１１０に移る。一方、読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ３の値とが一致しない場合、バイパス制御部１５０の動作は、ステップＳ１０２に移る。
【０１００】
ステップＳ１０２では、比較部１８２は、読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ４の値とが一致するか否かを判定する。読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ４の値とが一致する場合、バイパス制御部１５０の動作は、ステップＳ１１２に移る。一方、読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ４の値とが一致しない場合、バイパス制御部１５０の動作は、ステップＳ１０４に移る。
【０１０１】
ステップＳ１０４では、比較部１８３は、読み出しアドレス信号ＲＡｐの値と読み出しアドレス信号ＲＡｓｂの値とが一致するか否かを判定する。読み出しアドレス信号ＲＡｐの値と読み出しアドレス信号ＲＡｓｂの値とが一致する場合、バイパス制御部１５０の動作は、ステップＳ１１４に移る。一方、読み出しアドレス信号ＲＡｐの値と読み出しアドレス信号ＲＡｓｂの値とが一致しない場合、バイパス制御部１５０の動作は、ステップＳ１０６に移る。
【０１０２】
ステップＳ１０６では、比較部１８４は、読み出しアドレス信号ＲＡｐの値と読み出しアドレス信号ＲＡｓｘ１の値とが一致するか否かを判定する。読み出しアドレス信号ＲＡｐの値と読み出しアドレス信号ＲＡｓｘ１の値とが一致する場合、バイパス制御部１５０の動作は、ステップＳ１１６に移る。一方、読み出しアドレス信号ＲＡｐの値と読み出しアドレス信号ＲＡｓｘ１の値とが一致しない場合、バイパス制御部１５０の動作は、ステップＳ１２０に移る。
【０１０３】
ステップＳ１１０では、選択信号生成部１９０は、“０ｘ１”のバイパス選択信号ＳＥＬｐをフリップフロップ回路１９２に出力する。すなわち、選択信号生成部１９０は、読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ３の値とが一致する場合、“０ｘ１”のバイパス選択信号ＳＥＬｐをフリップフロップ回路１９２に出力する。これにより、第２選択部１２４は、“０ｘ１”のバイパス選択信号ＳＥＬｂをフリップフロップ回路１９２から受け、演算部１２８からバイパスされるデータＤＴ１を選択する。第２選択部１２４が選択したデータＤＴ１は、オペランドレジスタ１２６を介して演算部１２８に転送される。
【０１０４】
ステップＳ１１２では、選択信号生成部１９０は、“０ｘ２”のバイパス選択信号ＳＥＬｐをフリップフロップ回路１９２に出力する。すなわち、選択信号生成部１９０は、読み出しアドレス信号ＲＡｐの値と書き込みアドレス信号ＷＡｓｘ４の値とが一致する場合、“０ｘ２”のバイパス選択信号ＳＥＬｐをフリップフロップ回路１９２に出力する。これにより、第２選択部１２４は、“０ｘ２”のバイパス選択信号ＳＥＬｂをフリップフロップ回路１９２から受け、リザルトレジスタ１３０からバイパスされるデータＤＴ２を選択する。第２選択部１２４が選択したデータＤＴ２は、オペランドレジスタ１２６を介して演算部１２８に転送される。
【０１０５】
ステップＳ１１４では、選択信号生成部１９０は、“０ｘ３”のバイパス選択信号ＳＥＬｐをフリップフロップ回路１９２に出力する。すなわち、選択信号生成部１９０は、読み出しアドレス信号ＲＡｐの値と読み出しアドレス信号ＲＡｓｂの値とが一致する場合、“０ｘ３”のバイパス選択信号ＳＥＬｐをフリップフロップ回路１９２に出力する。これにより、第２選択部１２４は、“０ｘ３”のバイパス選択信号ＳＥＬｂをフリップフロップ回路１９２から受け、オペランドレジスタ１２６からバイパスされるデータＤＴ３を選択する。第２選択部１２４が選択したデータＤＴ３は、オペランドレジスタ１２６を介して演算部１２８に転送される。
【０１０６】
ステップＳ１１６では、選択信号生成部１９０は、“０ｘ４”のバイパス選択信号ＳＥＬｐをフリップフロップ回路１９２に出力する。すなわち、選択信号生成部１９０は、読み出しアドレス信号ＲＡｐの値と読み出しアドレス信号ＲＡｓｘ１の値とが一致する場合、“０ｘ４”のバイパス選択信号ＳＥＬｐをフリップフロップ回路１９２に出力する。これにより、第２選択部１２４は、“０ｘ４”のバイパス選択信号ＳＥＬｂをフリップフロップ回路１９２から受け、オペランドラッチ１２７からバイパスされるデータＤＴ４を選択する。第２選択部１２４が選択したデータＤＴ４は、オペランドレジスタ１２６を介して演算部１２８に転送される。
【０１０７】
このように、ステップＳ１１０、Ｓ１１２、Ｓ１１４、Ｓ１１６のいずれかの処理が実行されることにより、バイパス転送が実行される。バイパス制御部１５０は、ステップＳ１１０、Ｓ１１２、Ｓ１１４、Ｓ１１６のいずれかの処理を実行した後、動作をステップＳ１１８に移す。
【０１０８】
ステップＳ１１８では、論理積回路１９６は、論理０のクロックイネーブルＣＥＮをタイミング調整部１４０に出力する。これにより、タイミング調整部１４０内のクロックＣＫが停止し、タイミング調整部１４０の動作が停止する。これにより、タイミング調整部１４０から出力される読み出しアドレス信号ＲＡｂの遷移を停止させることができる。このように、バイパス制御部１５０は、バイパス転送が実行される場合、タイミング調整部１４０から出力される読み出しアドレス信号ＲＡｂの遷移を停止させることができる。この結果、読み出しアドレス信号ＲＡｂが伝達されるＣＭＯＳ回路（例えば、第１選択部１２２等が有するＣＭＯＳ回路）に貫通電流が流れることを抑止することができ、演算処理装置１２の消費電力を削減することができる。
【０１０９】
一方、バイパス転送が実行されない場合（ステップＳ１００、Ｓ１０２、Ｓ１０４、Ｓ１０６の判定結果がいずれも“Ｎｏ”の場合）、バイパス制御部１５０は、ステップＳ１２０の処理を実行する。
【０１１０】
ステップＳ１２０では、選択信号生成部１９０は、“０ｘ０”のバイパス選択信号ＳＥＬｐをフリップフロップ回路１９２に出力する。これにより、第２選択部１２４は、“０ｘ０”のバイパス選択信号ＳＥＬｂをフリップフロップ回路１９２から受け、レジスタファイル１２０から読み出されるデータＤＴ０を選択する。第２選択部１２４が選択したデータＤＴ０は、オペランドレジスタ１２６を介して演算部１２８に転送される。バイパス制御部１５０は、ステップＳ１２０の処理を実行した後、動作をステップＳ１２２に移す。
【０１１１】
ステップＳ１２２では、論理積回路１９６は、論理１のクロックイネーブルＣＥＮをタイミング調整部１４０に出力する。この場合、タイミング調整部１４０内のクロックＣＫは、停止しない。したがって、タイミング調整部１４０から出力される読み出しアドレス信号ＲＡｂの遷移は、停止しない。
【０１１２】
なお、演算処理装置１２の動作は、図７に示す例に限定されない。例えば、ステップＳ１００、Ｓ１０２、Ｓ１０４、Ｓ１０６の各々の処理の実行順は、図７に示した順番と異なる順番でもよい。また、例えば、ステップＳ１００、Ｓ１０２、Ｓ１０４、Ｓ１０６の各々の処理は、並列に実行されてもよい。
【０１１３】
図８は、図３に示した演算処理装置１２の動作の一例を示す。図８に示す動作では、演算処理装置１２は、命令ｆａｄｄ、ｆｓｕｂ１、ｆｓｕｂ２、ｆｓｕｂ３を、命令ｆａｄｄ、ｆｓｕｂ１、ｆｓｕｂ２、ｆｓｕｂ３の順に実行する。命令ｆａｄｄは、浮動小数点演算の加算命令を示し、命令ｆｓｕｂ（ｆｓｕｂ１、ｆｓｕｂ２、ｆｕｓｂ３）は、浮動小数点演算の減算命令を示す。
【０１１４】
また、各命令ｆａｄｄ、ｆｓｕｂ（ｆｓｕｂ１、ｆｓｕｂ２、ｆｕｓｂ３）の符号の後に続く３つの符号ｚのうち、一番左側の符号ｚは、出力データが格納されるレジスタ１２１を示し、他の符号ｚは、入力データが格納されるレジスタ１２１を示す。例えば、命令ｆａｄｄのレジスタｚ２は、命令ｆａｄｄの書き込みアドレス信号ＷＡｐの値を示し、命令ｆａｄｄのレジスタｚ０は、命令ｆａｄｄの読み出しアドレス信号ＲＡｐの値を示す。図８に示す例では、レジスタｚ０のアドレスは、“０ｘ２２”であり、レジスタｚ２のアドレスは、“０ｘ３２”である。
【０１１５】
また、図８に示す斜線の矩形は、リザルトレジスタ１３０を示し、白抜きの矩形は、オペランドレジスタ１２６を示し、横線の矩形は、レジスタファイル１２０を示す。図８に示す括弧内には、演算処理装置１２の動作の比較例を示す。比較例の動作では、各命令を消費電力の削減を考慮せずに最短のパイプラインで実行させる従来のパイプライン制御に加えて、バイパス転送を実行する場合にタイミング調整部１４０の動作を停止させる制御が実行される。
【０１１６】
命令ｆｓｕｂ１、ｆｓｕｂ２、ｆｓｕｂ３は、命令ｆａｄｄの演算結果、すなわち、レジスタｚ２に格納されるデータＤＴを使用する。すなわち、命令ｆａｄｄと命令ｆｓｕｂ１、ｆｓｕｂ２、ｆｓｕｂ３との間にはＲＡＷ依存の関係がある。図８では、命令ｆａｄｄ、ｆｓｕｂ１、ｆｓｕｂ２、ｆｓｕｂ３で使用されるレジスタｚ２に格納されるデータＤＴの流れを中心に説明する。
【０１１７】
命令ｆａｄｄの演算結果を示すデータＤＴは、リザルトレジスタ１３０に保持される（図８（ａ））。リザルトレジスタ１３０に保持されたデータＤＴは、レジスタファイル１２０に書き込まれる。
【０１１８】
命令ｆｓｕｂ１の演算は、命令ｆａｄｄの演算結果を示すデータＤＴをそのままオペランドレジスタ１２６にバイパスして、実行される（図８（ｂ））。すなわち、命令ｆｓｕｂ１は、命令ｆａｄｄの演算結果をそのまま使用する最短のバイパスで実行される。このように、演算処理装置１２は、命令ｆａｄｄの演算結果を示すデータＤＴがレジスタファイル１２０に書き込まれるのを待つことなく、演算部１２８からバイパスしたデータＤＴを用いて、命令ｆｓｕｂ１の演算を実行する。これにより、バイパス転送を実行しない場合に比べて、演算処理装置１２の性能を向上させることができる。
【０１１９】
命令ｆｓｕｂ２の演算は、命令ｆａｄｄの演算結果を示すデータＤＴをリザルトレジスタ１３０からオペランドレジスタ１２６にバイパスして、実行される（図８（ｃ））。この場合も、演算処理装置１２は、命令ｆａｄｄの演算結果を示すデータＤＴがレジスタファイル１２０に書き込まれるのを待つことなく、命令ｆｓｕｂ２の演算を実行できる。
【０１２０】
命令ｆｓｕｂ２、ｆｓｕｂ３は、命令ｆｓｕｂ２が読み込んだレジスタｚ２のアドレスを命令ｆｓｕｂ３が読み込むＲＡＲ依存を有する。このため、命令ｆｓｕｂ３の演算は、命令ｆａｄｄの演算結果を示すデータＤＴをオペランドレジスタ１２６の出力からオペランドレジスタ１２６の入力にバイパスして、実行される（図８（ｄ））。
【０１２１】
なお、命令ｆａｄｄの演算結果を示すデータＤＴは、命令ｆｓｕｂ３の演算を開始する前に、レジスタファイル１２０に書き込まれる。このため、比較例では、命令ｆｓｕｂ３の演算は、命令ｆａｄｄの演算結果を示すデータＤＴをレジスタファイル１２０から読み出して、実行される（図８（ｅ））。この場合、レジスタファイル１２０からデータＤＴを読み出すため、読み出しアドレスＲＡＤｂの値は、命令ｆｓｕｂ３のＢサイクルの開始時に“０ｘ２２”から“０ｘ３２”に遷移する（図８（ｆ））。このため、比較例では、命令ｆｓｕｂ３のＢサイクルの開始時（読み出しアドレスＲＡＤｂの値が“０ｘ１３”から“０ｘ３２”に遷移する期間）に、貫通電流が流れる。
【０１２２】
これに対し、演算処理装置１２は、上述したように、命令ｆａｄｄの演算結果を示すデータＤＴをレジスタファイル１２０から読み出すことなく、命令ｆｓｕｂ３の演算を実行する。したがって、演算処理装置１２は、読み出しアドレスＲＡＤｂの遷移を停止することができ、貫通電流が流れることを抑止できる。この結果、演算処理装置１２の消費電力を比較例の動作に比べて削減することができる。
【０１２３】
図９は、図３に示した演算処理装置１２の動作の別の例を示す。図９に示す動作では、演算処理装置１２は、命令ｆａｄｄ、ｆｓｕｂ１、ｆｓｕｂ２、ｆｓｕｂ３を、命令ｆａｄｄ、ｆｓｕｂ１、ｆｓｕｂ２、ｆｓｕｂ３の順に実行する。図９では、演算処理装置１２は、図８に示した命令“ｆｓｕｂ２  ｚ６、ｚ２、ｚ５”の代わりに、命令“ｆｓｕｂ２  ｚ６、ｚ１０、ｚ５”を実行する。したがって、命令ｆａｄｄと命令ｆｓｕｂ１、ｆｓｕｂ３との間には、図８と同様に、ＲＡＷ依存の関係があり、命令ｆｓｕｂ２と命令ｆａｄｄ、ｆｓｕｂ１、ｆｓｕｂ３との間には依存関係はない。図９に示す例では、レジスタｚ０のアドレスは、“０ｘ２２”であり、レジスタｚ２のアドレスは、“０ｘ３２”であり、レジスタｚ１０のアドレスは、“０ｘ１３”である。
【０１２４】
図９に示す斜線の矩形、白抜きの矩形および横線の矩形の意味は図８と同じであり、図９に示す網掛けの矩形は、オペランドラッチ１２７を示す。図９に示す括弧内には、演算処理装置１２の動作の比較例を示す。図９においても、命令ｆａｄｄ、ｆｓｕｂ１、ｆｓｕｂ３で使用されるレジスタｚ２に格納されるデータＤＴの流れを中心に説明する。
【０１２５】
命令ｆａｄｄの演算および命令ｆｓｕｂ１の演算は、図８で説明した動作と同一または同様の動作により実行される。なお、命令ｆａｄｄの演算結果を示すデータＤＴは、命令ｆｓｕｂ１の演算を実行するために、オペランドレジスタ１２６に保持された後、オペランドレジスタ１２６から演算部１２８に転送されるとともに、オペランドラッチ１２７にも転送される。これにより、オペランドラッチ１２７は、命令ｆａｄｄの演算結果を示すデータＤＴを保持する（図９（ａ））。
【０１２６】
命令ｆｓｕｂ２の演算は、レジスタｚ１０等に格納されたデータＤＴをレジスタファイル１２０から読み出して、実行される。このため、読み出しアドレスＲＡＤｂの値は、命令ｆｓｕｂ２のＢサイクルの開始時に“０ｘ２２”から“０ｘ１３”に遷移する（図９（ｂ））。
【０１２７】
命令ｆｓｕｂ３の演算は、命令ｆａｄｄの演算結果を示すデータＤＴをオペランドラッチ１２７からオペランドレジスタ１２６にバイパスして、実行される（図９（ｃ））。なお、図９に示す命令ｆｓｕｂ３の演算では、レジスタｚ１０から読み出されたデータＤＴがオペランドレジスタ１２６に保持されているため、図８に示したバイパス経路と異なるバイパス経路（オペランドラッチ１２７からのバイパス）が選択される。
【０１２８】
なお、比較例の命令ｆｓｕｂ３の演算は、図８に示した比較例と同様に、命令ｆａｄｄの演算結果を示すデータＤＴをレジスタファイル１２０から読み出して、実行される（図９（ｄ））。このため、読み出しアドレスＲＡＤｂの値は、命令ｆｓｕｂ３のＢサイクルの開始時に“０ｘ１３”から“０ｘ３２”に遷移する（図９（ｅ））。したがって、比較例では、命令ｆｓｕｂ３のＢサイクルの開始時（読み出しアドレスＲＡＤｂの値が“０ｘ１３”から“０ｘ３２”に遷移する期間）に、貫通電流が流れる。
【０１２９】
これに対し、演算処理装置１２は、上述したように、命令ｆａｄｄの演算結果を示すデータＤＴをレジスタファイル１２０から読み出すことなく、命令ｆｓｕｂ３の演算を実行する。したがって、演算処理装置１２は、読み出しアドレスＲＡＤｂの遷移を停止することができ、貫通電流が流れることを抑止できる。この結果、演算処理装置１２の消費電力を比較例の動作に比べて削減することができる。
【０１３０】
このように、オペランドレジスタ１２６と第２選択部１２４との間にオペランドラッチ１２７を配置することにより、オペランドレジスタ１２６からそのままデータＤＴをバイパスするバイパス経路とは別のバイパス経路を追加することができる。これにより、オペランドラッチ１２７を配置しない場合に比べて、演算処理装置１２の性能の向上と消費電力の削減とを実現することができる。
【０１３１】
図１０は、図３に示した演算処理装置１２の動作の別の例を示す。図１０に示す動作では、演算処理装置１２は、命令ｆａｄｄ、ｆｓｕｂ１、ｆｓｕｂ２を、命令ｆａｄｄ、ｆｓｕｂ１、ｆｓｕｂ２の順に実行する。図１０では、演算処理装置１２は、図９に示した命令“ｆｓｕｂ１  ｚ４、ｚ２、ｚ３”および命令“ｆｓｕｂ２  ｚ６、ｚ１０、ｚ５”の代わりに、命令“ｆａｄｄ  ｚ３、ｚ２、ｚ１”および命令“ｆｓｕｂ１  ｚ６、ｚ５、ｚ４”を実行する。そして、演算処理装置１２は、図９に示した命令“ｆｓｕｂ３  ｚ８、ｚ２、ｚ７”の代わりに、命令“ｆｓｕｂ２  ｚ８、ｚ２、ｚ７”を実行する。したがって、命令ｆａｄｄと命令ｆｓｕｂ２との間には、ＲＡＲ依存の関係があり、命令ｆｓｕｂ１と命令ｆａｄｄ、ｆｓｕｂ２との間には依存関係はない。図１０に示す例では、レジスタｚ２のアドレスは、“０ｘ３２”であり、レジスタｚ５のアドレスは、“０ｘ１３”である。
【０１３２】
図１０に示す斜線の矩形、白抜きの矩形、横線の矩形および網掛けの矩形の意味は図９と同じである。図１０に示す括弧内には、演算処理装置１２の動作の比較例を示す。図１０においても、命令ｆａｄｄ、ｆｓｕｂ２で使用されるレジスタｚ２に格納されるデータＤＴの流れを中心に説明する。
【０１３３】
命令ｆａｄｄの演算は、レジスタｚ２等に格納されたデータＤＴをレジスタファイル１２０から読み出して、実行される。このため、読み出しアドレスＲＡＤｂの値は、命令ｆａｄｄのＢサイクルの開始時に“０ｘ３２”に遷移する（図１０（ａ））。なお、レジスタｚ２から読み出されたデータＤＴは、オペランドレジスタ１２６に保持された後、オペランドレジスタ１２６から演算部１２８に転送されるとともに、オペランドラッチ１２７にも転送される。これにより、オペランドラッチ１２７は、レジスタｚ２から読み出されたデータＤＴを保持する（図１０（ｂ））。
【０１３４】
命令ｆｓｕｂ１の演算は、レジスタｚ５等に格納されたデータＤＴをレジスタファイル１２０から読み出して、実行される。このため、読み出しアドレスＲＡＤｂの値は、命令ｆｓｕｂ１のＢサイクルの開始時に“０ｘ３２”から“０ｘ１３”に遷移する（図１０（ｃ））。
【０１３５】
命令ｆｓｕｂ２の演算は、命令ｆａｄｄでレジスタｚ２から読み出されたデータＤＴをオペランドラッチ１２７からオペランドレジスタ１２６にバイパスして、実行される（図１０（ｄ））。
【０１３６】
なお、比較例の命令ｆｓｕｂ２の演算は、レジスタｚ２に格納されたデータＤＴをレジスタファイル１２０から読み出して、実行される（図１０（ｅ））。このため、読み出しアドレスＲＡＤｂの値は、命令ｆｓｕｂ２のＢサイクルの開始時に“０ｘ１３”から“０ｘ３２”に遷移する（図１０（ｆ））。したがって、比較例では、命令ｆｓｕｂ２のＢサイクルの開始時（読み出しアドレスＲＡＤｂの値が“０ｘ１３”から“０ｘ３２”に遷移する期間）に、貫通電流が流れる。
【０１３７】
これに対し、演算処理装置１２は、上述したように、命令ｆａｄｄでレジスタｚ２から読み出されたデータＤＴをレジスタファイル１２０から再度読み出すことなく、命令ｆｓｕｂ２の演算を実行する。したがって、演算処理装置１２は、読み出しアドレスＲＡＤｂの遷移を停止することができ、貫通電流が流れることを抑止できる。この結果、演算処理装置１２の消費電力を比較例の動作に比べて削減することができる。なお、演算処理装置１２の動作は、図８から図１０に示す例に限定されない。
【０１３８】
図１１は、図５に示したバイパス制御部１５０の内部信号の状態の一例を示す。なお、図１１は、図８に示した動作が実行された場合のバイパス制御部１５０の内部信号の状態の一例である。
【０１３９】
先ず、最初のＰサイクル（命令ｆａｄｄのＰサイクル）では、命令ｆａｄｄの読み出しアドレス信号ＲＡｐ（“０ｘ２２”）がリザベーションステーション１１４から比較部１８１、１８２、１８３、１８４およびシフトレジスタ１７０に転送される。また、命令ｆａｄｄの書き込みアドレス信号ＷＡｐ（“０ｘ３２”）がリザベーションステーション１１４からシフトレジスタ１６０（より詳細には、フリップフロップ回路１６１）に投入される（図１１（ａ））。これにより、書き込みアドレス信号ＷＡｐ（“０ｘ３２”）は、フリップフロップ回路１６１に保持される。
【０１４０】
命令ｆａｄｄの後続の命令ｆｓｕｂ１が命令ｆａｄｄの演算結果を最短のバイパスで使用する場合、命令ｆｓｕｂ１のＰサイクルは、命令ｆａｄｄのＸ３サイクルの開始に合わせて開始される。このため、書き込みアドレス信号ＷＡｐ（“０ｘ３２”）は、シフトレジスタ１６０により、命令ｆａｄｄのＸ３サイクルまで保持される。命令ｆａｄｄのＸ３サイクルでは、書き込みアドレス信号ＷＡｐ（“０ｘ３２”）は、フリップフロップ回路１６４から書き込みアドレス信号ＷＡｓｘ３（“０ｘ３２”）として比較部１８１に出力される。
【０１４１】
命令ｆｓｕｂ１のＰサイクルでは、命令ｆｓｕｂ１の読み出しアドレス信号ＲＡｐ（“０ｘ３２”）と、フリップフロップ回路１６４から出力される書き込みアドレス信号ＷＡｓｘ３（“０ｘ３２”）とが一致する（図１１（ｂ））。このため、比較部１８１は、論理１の信号ＣＭＰ１を選択信号生成部１９０および否定論理和回路１９４に出力する。論理１の信号ＣＭＰ１を受けた選択信号生成部１９０は、最短のバイパス経路を選択するバイパス選択信号ＳＥＬｐ（“０ｘ１”）を、フリップフロップ回路１９２に出力する。これにより、命令ｆｓｕｂ１のＢサイクルにおいて、“０ｘ１”のバイパス選択信号ＳＥＬｂがフリップフロップ回路１９２から第２選択部１２４に転送される。したがって、第２選択部１２４は、“０ｘ１”のバイパス選択信号ＳＥＬｂに基づいて、演算部１２８からバイパスされたデータＤＴ１を命令ｆａｄｄの演算結果としてオペランドレジスタ１２６に格納する。
【０１４２】
なお、命令ｆｓｕｂ１のＰサイクルでは、信号ＣＭＰ１が論理１であるため、信号ＣＭＰ０およびクロックイネーブルＣＥＮは、論理０である。このため、タイミング調整部１４０のクロックＣＫは停止する。この結果、タイミング調整部１４０から出力される読み出しアドレス信号ＲＡｂは、命令ｆｓｕｂ１のＢサイクルが開始されても、命令ｆａｄｄの読み出しアドレス信号ＲＡｐ（“０ｘ２２”）から変化しない。
【０１４３】
命令ｆｓｕｂ２は、命令ｆａｄｄから１命令分（命令ｆｓｕｂ１）の間隔が空いているため、命令ｆａｄｄの演算結果を命令ｆａｄｄのＸ４サイクルの２サイクル後に使用する。この場合、命令ｆａｄｄの演算結果は、リザルトレジスタ１３０からオペランドレジスタ１２６にバイパスされる。命令ｆａｄｄの演算結果をリザルトレジスタ１３０からバイパスする場合、書き込みアドレス信号ＷＡｐ（“０ｘ３２”）は、命令ｆｕｓｂ１の場合より１サイクル長いＸ４サイクル（命令ｆａｄｄのＸ４サイクル）まで、シフトレジスタ１６０により保持される。命令ｆａｄｄのＸ４サイクルでは、書き込みアドレス信号ＷＡｐ（“０ｘ３２”）は、フリップフロップ回路１６５から書き込みアドレス信号ＷＡｓｘ４（“０ｘ３２”）として比較部１８２に出力される。
【０１４４】
命令ｆｓｕｂ２のＰサイクルでは、命令ｆｓｕｂ２の読み出しアドレス信号ＲＡｐ（“０ｘ３２”）と、フリップフロップ回路１６５から出力される書き込みアドレス信号ＷＡｓｘ４（“０ｘ３２”）とが一致する（図１１（ｃ））。このため、比較部１８２は、論理１の信号ＣＭＰ２を選択信号生成部１９０および否定論理和回路１９４に出力する。論理１の信号ＣＭＰ２を受けた選択信号生成部１９０は、リザルトレジスタ１３０からのバイパス経路を選択するバイパス選択信号ＳＥＬｐ（“０ｘ２”）を、フリップフロップ回路１９２に出力する。これにより、命令ｆｓｕｂ２のＢサイクルにおいて、“０ｘ２”のバイパス選択信号ＳＥＬｂがフリップフロップ回路１９２から第２選択部１２４に転送される。したがって、第２選択部１２４は、“０ｘ２”のバイパス選択信号ＳＥＬｂに基づいて、リザルトレジスタ１３０からバイパスされたデータＤＴ２を命令ｆａｄｄの演算結果としてオペランドレジスタ１２６に格納する。
【０１４５】
なお、命令ｆｓｕｂ２のＰサイクルでは、信号ＣＭＰ２が論理１であるため、信号ＣＭＰ０およびクロックイネーブルＣＥＮは、論理０である。このため、タイミング調整部１４０から出力される読み出しアドレス信号ＲＡｂは、命令ｆｓｕｂ２のＢサイクルが開始されても、命令ｆａｄｄの読み出しアドレス信号ＲＡｐ（“０ｘ２２”）から変化しない。
【０１４６】
命令ｆｓｕｂ２の後に実行される命令ｆｓｕｂ３では、命令ｆａｄｄの演算結果がレジスタファイル１２０に既に書き込まれている。このため、命令ｆｓｕｂ３では、命令ｆｓｕｂ２のＢサイクルに命令ｆａｄｄの演算結果としてオペランドレジスタ１２６に格納されたデータＤＴが、オペランドレジスタ１２６の出力からオペランドレジスタ１２６の入力にバイパスされる。このように、命令ｆｓｕｂ２で使用したデータＤＴをオペランドレジスタ１２６の出力からオペランドレジスタ１２６の入力にバイパスすることにより、図８等で説明したように、読み出しアドレス信号ＲＡｐの遷移を停止することができる。この結果、命令ｆｓｕｂ２で使用したデータＤＴをレジスタファイル１２０から読み出す場合に比べて、消費電力を削減することができる。
【０１４７】
オペランドレジスタ１２６の出力からオペランドレジスタ１２６の入力にデータＤＴをバイパスする場合、命令ｆｓｕｂ２の読み出しアドレス信号ＲＡｐ（“０ｘ３２”）は、命令ｆｕｓｂ２のＢサイクルまで、シフトレジスタ１７０により保持される。命令ｆｕｓｂ２のＢサイクルでは、読み出しアドレス信号ＲＡｐ（“０ｘ３２”）は、フリップフロップ回路１７１から読み出しアドレス信号ＲＡｓｂ（“０ｘ３２”）として比較部１８３に出力される。
【０１４８】
命令ｆｓｕｂ３のＰサイクルでは、命令ｆｓｕｂ３の読み出しアドレス信号ＲＡｐ（“０ｘ３２”）と、フリップフロップ回路１７１から出力される読み出しアドレス信号ＲＡｓｂ（“０ｘ３２”）とが一致する（図１１（ｄ））。このため、比較部１８３は、論理１の信号ＣＭＰ３を選択信号生成部１９０および否定論理和回路１９４に出力する。論理１の信号ＣＭＰ３を受けた選択信号生成部１９０は、オペランドレジスタ１２６からのバイパス経路を選択するバイパス選択信号ＳＥＬｐ（“０ｘ３”）を、フリップフロップ回路１９２に出力する。これにより、命令ｆｓｕｂ３のＢサイクルにおいて、“０ｘ３”のバイパス選択信号ＳＥＬｂがフリップフロップ回路１９２から第２選択部１２４に転送される。したがって、第２選択部１２４は、“０ｘ３”のバイパス選択信号ＳＥＬｂに基づいて、オペランドレジスタ１２６からバイパスされたデータＤＴ３を命令ｆａｄｄの演算結果としてオペランドレジスタ１２６に格納する。
【０１４９】
なお、命令ｆｓｕｂ３のＰサイクルでは、信号ＣＭＰ３が論理１であるため、信号ＣＭＰ０およびクロックイネーブルＣＥＮは、論理０である。このため、タイミング調整部１４０から出力される読み出しアドレス信号ＲＡｂは、命令ｆｓｕｂ３のＢサイクルが開始されても、命令ｆａｄｄの読み出しアドレス信号ＲＡｐ（“０ｘ２２”）から変化しない。
【０１５０】
このように、バイパス制御部１５０は、レジスタファイル１２０からデータＤＴを読み出すことができるタイミングでも、オペランドレジスタ１２６からデータＤＴをバイパスさせることにより、読み出しアドレス信号ＲＡｐの遷移を停止することができる。この結果、レジスタファイル１２０からデータＤＴを読み出す場合に比べて、消費電力を削減することができる。
【０１５１】
なお、オペランドレジスタ１２６からデータＤＴをバイパスする制御は、命令ｆａｄｄの演算結果がレジスタｚ２に格納されない場合でも、ＲＡＲ依存のある命令ｆｕｓｂ１、ｆｕｓｂ２間、または、命令ｆｕｓｂ２、ｆｕｓｂ３間で適用可能である。すなわち、ＲＡＷ依存のない２つの命令に対しても、ＲＡＲ依存がある場合、オペランドレジスタ１２６からデータＤＴをバイパスする制御を適用することができる。
【０１５２】
図１２は、図５に示したバイパス制御部１５０の内部信号の状態の別の例を示す。なお、図１２は、図９に示した動作が実行された場合のバイパス制御部１５０の内部信号の状態の一例である。図１１で説明した動作と同一または同様な動作については、詳細な説明を省略する。図１２では、図１１に示した命令“ｆｓｕｂ２  ｚ６、ｚ２、ｚ５”の代わりに、命令“ｆｓｕｂ２  ｚ６、ｚ１０、ｚ５”が実行される。
【０１５３】
命令ｆｓｕｂ１のＰサイクルまでは、バイパス制御部１５０の内部信号の動作は、図１１に示した動作と同一または同様である。
【０１５４】
命令ｆｕｓｂ２は、図９で説明したように、命令ｆａｄｄ、ｆｓｕｂ１、ｆｓｕｂ３との間に依存関係はない。したがって、命令ｆｓｕｂ２のＰサイクルでは、命令ｆｓｕｂ２の読み出しアドレス信号ＲＡｐ（“０ｘ１３”）は、読み出しアドレス信号ＲＡｓｂ、ＲＡｓｘ１、書き込みアドレス信号ＷＡｓｘ３、ＷＡｓｘ４のいずれとも一致しない（図１２（ａ））。このため、信号ＣＭＰ１、ＣＭＰ２、ＣＭＰ３、ＣＭＰ４は、論理０になり、信号ＣＭＰ０およびクロックイネーブルＣＥＮは、論理１になる。クロックイネーブルＣＥＮが論理１に遷移したことにより、読み出しアドレス信号ＲＡｂは、命令ｆｓｕｂ２のＢサイクルにおいて、“０ｘ２２”から“０ｘ１３”に遷移する。
【０１５５】
また、論理０の信号ＣＭＰ１、ＣＭＰ２、ＣＭＰ３、ＣＭＰ４を受けた選択信号生成部１９０は、レジスタファイル１２０から読み出したデータＤＴ０を選択するバイパス選択信号ＳＥＬｐ（“０ｘ０”）を、フリップフロップ回路１９２に出力する。これにより、命令ｆｓｕｂ２のＢサイクルにおいて、“０ｘ０”のバイパス選択信号ＳＥＬｂがフリップフロップ回路１９２から第２選択部１２４に転送される。したがって、第２選択部１２４は、“０ｘ０”のバイパス選択信号ＳＥＬｂに基づいて、レジスタファイル１２０（レジスタｚ１０のアドレスが示すレジスタ１２１）から読み出されたデータＤＴ０をオペランドレジスタ１２６に格納する。
【０１５６】
命令ｆｓｕｂ３は、ＲＡＲ依存がある命令ｆｓｕｂ１から１命令分（命令ｆｓｕｂ２）の間隔が空いているため、命令ｆｓｕｂ１で使用したデータＤＴを命令ｆｓｕｂ１のＸ１サイクルの２サイクル後に使用する。この場合、命令ｆｓｕｂ１で使用したデータＤＴは、オペランドラッチ１２７からオペランドレジスタ１２６にバイパスされる。命令ｆｓｕｂ１で使用したデータＤＴをオペランドラッチ１２７からバイパスする場合、命令ｆｕｓｂ１の読み出しアドレス信号ＲＡｐ（“０ｘ３２”）は、命令ｆｕｓｂ１のＸ１サイクルまで、シフトレジスタ１６０により保持される。命令ｆｕｓｂ１のＸ１サイクルでは、読み出しアドレス信号ＲＡｐ（“０ｘ３２”）は、フリップフロップ回路１７２から読み出しアドレス信号ＲＡｓｘ１（“０ｘ３２”）として比較部１８４に出力される。
【０１５７】
命令ｆｓｕｂ３のＰサイクルでは、命令ｆｓｕｂ３の読み出しアドレス信号ＲＡｐ（“０ｘ３２”）と、フリップフロップ回路１７２から出力される読み出しアドレス信号ＲＡｓｘ１（“０ｘ３２”）とが一致する（図１２（ｂ））。このため、比較部１８４は、論理１の信号ＣＭＰ４を選択信号生成部１９０および否定論理和回路１９４に出力する。論理１の信号ＣＭＰ４を受けた選択信号生成部１９０は、オペランドラッチ１２７からのバイパス経路を選択するバイパス選択信号ＳＥＬｐ（“０ｘ４”）を、フリップフロップ回路１９２に出力する。これにより、命令ｆｓｕｂ３のＢサイクルにおいて、“０ｘ４”のバイパス選択信号ＳＥＬｂがフリップフロップ回路１９２から第２選択部１２４に転送される。したがって、第２選択部１２４は、“０ｘ４”のバイパス選択信号ＳＥＬｂに基づいて、オペランドラッチ１２７からバイパスされたデータＤＴ４をオペランドレジスタ１２６に格納する。
【０１５８】
なお、命令ｆｓｕｂ３のＰサイクルでは、信号ＣＭＰ４が論理１であるため、信号ＣＭＰ０およびクロックイネーブルＣＥＮは、論理１から論理０に遷移する。このため、タイミング調整部１４０から出力される読み出しアドレス信号ＲＡｂは、命令ｆｓｕｂ３のＢサイクルが開始されても、命令ｆｓｕｂ２の読み出しアドレス信号ＲＡｐ（“０ｘ１３”）から変化しない。この結果、レジスタファイル１２０からデータＤＴを読み出す場合に比べて、消費電力を削減することができる。
【０１５９】
図１３は、図５に示したバイパス制御部１５０の内部信号の状態の別の例を示す。なお、図１３は、図１０に示した動作が実行された場合のバイパス制御部１５０の内部信号の状態の一例である。図１１および図１２で説明した動作と同一または同様な動作については、詳細な説明を省略する。命令ｆａｄｄと命令ｆｓｕｂ２との間には、ＲＡＲ依存があり、命令ｆｓｕｂ１と命令ｆａｄｄ、ｆｓｕｂ２との間には、依存関係がない。したがって、図１３に示す命令ｆａｄｄ、ｆｓｕｂ１、ｆｓｕｂ２を実行する場合のデータＤＴの流れ等は、図１２に示した命令ｆｓｕｂ１、ｆｓｕｂ２、ｆｓｕｂ３を実行する場合のデータＤＴと同様である。
【０１６０】
例えば、命令ｆａｄｄのＰサイクルにシフトレジスタ１７０に投入された命令ｆａｄｄの読み出しアドレス信号ＲＡｐ（“０ｘ３２”）は、命令ｆａｄｄのＸ１サイクルまで保持される。そして、命令ｆａｄｄのＸ１サイクルにおいて、読み出しアドレス信号ＲＡｐ（“０ｘ３２”）は、フリップフロップ回路１７２から読み出しアドレス信号ＲＡｓｘ１（“０ｘ３２”）として比較部１８４に出力される。
【０１６１】
命令ｆｓｕｂ１のＰサイクルでは、ＲＡＲ依存等のない命令ｆｓｕｂ１の読み出しアドレス信号ＲＡｐ（“０ｘ１３”）は、読み出しアドレス信号ＲＡｓｂ、ＲＡｓｘ１、書き込みアドレス信号ＷＡｓｘ３、ＷＡｓｘ４のいずれとも一致しない（図１２（ａ））。このため、信号ＣＭＰ１、ＣＭＰ２、ＣＭＰ３、ＣＭＰ４は、論理０に維持され、信号ＣＭＰ０およびクロックイネーブルＣＥＮは、論理１に維持される。クロックイネーブルＣＥＮが論理１に維持されるため、読み出しアドレス信号ＲＡｂは、命令ｆｓｕｂ１のＢサイクルにおいて、“０ｘ３２”から“０ｘ１３”に遷移する。
【０１６２】
また、論理０の信号ＣＭＰ１、ＣＭＰ２、ＣＭＰ３、ＣＭＰ４を受けた選択信号生成部１９０は、レジスタファイル１２０から読み出したデータＤＴ０を選択するバイパス選択信号ＳＥＬｐ（“０ｘ０”）を、フリップフロップ回路１９２に出力する。これにより、命令ｆｓｕｂ１のＢサイクルにおいて、“０ｘ０”のバイパス選択信号ＳＥＬｂがフリップフロップ回路１９２から第２選択部１２４に転送される。したがって、第２選択部１２４は、“０ｘ０”のバイパス選択信号ＳＥＬｂに基づいて、レジスタファイル１２０（レジスタｚ５のアドレスが示すレジスタ１２１）から読み出されたデータＤＴ０をオペランドレジスタ１２６に格納する。
【０１６３】
命令ｆｓｕｂ２は、ＲＡＲ依存がある命令ｆａｄｄから１命令分（命令ｆｓｕｂ１）の間隔が空いているため、命令ｆａｄｄで使用するデータＤＴを命令ｆａｄｄのＸ１サイクルの２サイクル後に使用する。この場合、命令ｆａｄｄで使用するデータＤＴは、オペランドラッチ１２７からオペランドレジスタ１２６にバイパスされる。
【０１６４】
命令ｆｓｕｂ２のＰサイクルでは、命令ｆｓｕｂ２の読み出しアドレス信号ＲＡｐ（“０ｘ３２”）と、フリップフロップ回路１７２から出力される読み出しアドレス信号ＲＡｓｘ１（“０ｘ３２”）とが一致する（図１３（ｂ））。このため、比較部１８４は、論理１の信号ＣＭＰ４を選択信号生成部１９０および否定論理和回路１９４に出力する。論理１の信号ＣＭＰ４を受けた選択信号生成部１９０は、オペランドラッチ１２７からのバイパス経路を選択するバイパス選択信号ＳＥＬｐ（“０ｘ４”）を、フリップフロップ回路１９２に出力する。これにより、命令ｆｓｕｂ２のＢサイクルにおいて、“０ｘ４”のバイパス選択信号ＳＥＬｂがフリップフロップ回路１９２から第２選択部１２４に転送される。したがって、第２選択部１２４は、“０ｘ４”のバイパス選択信号ＳＥＬｂに基づいて、オペランドラッチ１２７からバイパスされたデータＤＴ４をオペランドレジスタ１２６に格納する。
【０１６５】
なお、命令ｆｓｕｂ２のＰサイクルでは、信号ＣＭＰ４が論理１であるため、信号ＣＭＰ０およびクロックイネーブルＣＥＮは、論理１から論理０に遷移する。このため、タイミング調整部１４０から出力される読み出しアドレス信号ＲＡｂは、命令ｆｓｕｂ２のＢサイクルが開始されても、命令ｆｓｕｂ１の読み出しアドレス信号ＲＡｐ（“０ｘ１３”）から変化しない。この結果、レジスタファイル１２０からデータＤＴを読み出す場合に比べて、消費電力を削減することができる。
【０１６６】
以上、図３から図１３に示す実施形態においても、図１および図２に示した実施形態と同様の効果を得ることができる。例えば、バイパス制御部１５０は、データＤＴをレジスタファイル１２０を介さずにオペランドレジスタ１２６に転送する場合、タイミング調整部１４０の動作を停止させる。これにより、タイミング調整部１４０から第１選択部１２２に供給される読み出しアドレス信号ＲＡｂの遷移を停止することができ、第１選択部１２２等が有するＣＭＯＳ回路に貫通電流が流れることを抑止することができる。この結果、第１選択部１２２等の消費電力を削減することができ、演算処理装置１２の消費電力を削減することができる。
【０１６７】
また、演算処理装置１２では、バイパス経路の数が、図１に示した演算処理装置１０に比べて、増加する。これにより、レジスタファイル１２０からのデータＤＴの読み出しを抑止することができる。例えば、ＲＡＷ依存のない２つの命令に対しても、ＲＡＲ依存がある場合、オペランドレジスタ１２６またはオペランドラッチ１２７からのバイパスを選択することができる。これにより、図１に示した演算処理装置１０に比べて、レジスタファイル１２０からのデータＤＴの読み出しを抑止することができ、読み出しアドレス信号ＲＡｂの遷移を抑止することができる。この結果、演算処理装置１２の消費電力を削減することができる。
【０１６８】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１６９】
１０、１２‥演算処理装置；２０‥第１レジスタ部；２１‥第１レジスタ；２２、１２２‥第１選択部；２４、１２４‥第２選択部；２６‥第２レジスタ部；２８、１２８‥演算部；４０、１４０‥タイミング調整部；５０、１５０‥バイパス制御部；１００‥プロセッサコア；１１０‥命令キャッシュ；１１１‥命令バッファ；１１２‥デコード部；１１３‥データキャッシュ；１１４‥リザベーションステーション；１１５‥演算実行部；１２０‥レジスタファイル；１２１‥レジスタ；１２６‥オペランドレジスタ；１２７‥オペランドラッチ；１２９‥アドレス計算部；１３０‥リザルトレジスタ；１６０、１７０‥シフトレジスタ；１６１、１６２、１６３、１６４、１６５、１７１、１７２、１９２‥フリップフロップ回路；１８１、１８２、１８３、１８４‥比較部；１９０‥選択信号生成部；１９４‥否定論理和回路；１９６‥論理積回路；２００‥キャッシュメモリ；３００‥メモリアクセス制御部；４００、５００‥入出力インタフェース
【図１】
2019008746.tif 000003
【図２】
2019008746.tif 000004
【図３】
2019008746.tif 000005
【図４】
2019008746.tif 000006
【図５】
2019008746.tif 000007
【図６】
2019008746.tif 000008
【図７】
2019008746.tif 000009
【図８】
2019008746.tif 000010
【図９】
2019008746.tif 000011
【図１０】
2019008746.tif 000012
【図１１】
2019008746.tif 000013
【図１２】
2019008746.tif 000014
【図１３】
2019008746.tif 000015