(57)【要約】【課題】  複雑度を増大させることなく、信頼性を向上可能なパイプラインプロセッサを提供する。【解決手段】  フェッチされた命令をデコードして、命令実行サイクル数が固定であるコア命令及びユーザにより定義された拡張命令のいずれかを選択的に発行する命令デコードユニット４０１ａと、発行されたコア命令を実行するコア命令実行ユニット４０と、発行された拡張命令を実行する拡張命令実行ユニット４０２ａと、コア命令実行ユニット４０及び拡張命令実行ユニット４０２ａのそれぞれの命令実行結果を一時的に記憶して、コア命令及び拡張命令の発行された順に命令実行結果を並べ替えて出力するリオーダバッファ４０６ａとを備える。【選択図】    図１
2007034731.tif 000002
【特許請求の範囲】
【請求項１】
フェッチされた命令をデコードして、コア命令及びユーザにより定義された拡張命令のいずれかを選択的に発行する命令デコードユニットと、
発行された前記コア命令を実行するコア命令実行ユニットと、
発行された前記拡張命令を実行する拡張命令実行ユニットと、
前記コア命令実行ユニット及び前記拡張命令実行ユニットのそれぞれの命令実行結果を一時的に記憶して、前記コア命令及び前記拡張命令の発行された順に前記命令実行結果を並べ替えて出力するリオーダバッファ
とを備えることを特徴とするパイプラインプロセッサ。
【請求項２】
前記命令デコードユニットは、前記フェッチされた命令が前記コア命令である場合に前記コア命令をデコードし、前記フェッチされた命令が前記拡張命令である場合に前記拡張命令の一部をデコードすることを特徴とする請求項１に記載のパイプラインプロセッサ。
【請求項３】
前記リオーダバッファは、前記命令実行結果に例外の発生を通知する信号が含まれる場合、前記例外の発生した命令の実行結果及び前記例外の発生した命令以後に発行された命令の実行結果を出力せずに破棄することを特徴とする請求項１又は２に記載のパイプラインプロセッサ。
【請求項４】
フェッチされた命令をデコードして、命令を発行する命令デコードユニットと、
発行された前記命令を実行する命令実行ユニットと、
前記命令実行ユニットの命令実行結果を一時的に記憶して、前記命令の発行された順に前記命令実行結果を並べ替えて出力するリオーダバッファと、
前記命令実行ユニットによる前記命令の実行に要するクロックサイクルをカウントして、カウント結果が一定値を超えた場合にタイムアウト処理を発生させるタイムアウト処理装置
とを備えることを特徴とするパイプラインプロセッサ。
【請求項５】
前記リオーダバッファは、前記タイムアウト処理が発生した場合、前記タイムアウト処理の対象となった命令の実行が完了したと判定し、
前記命令デコードユニットは、前記タイムアウト処理の対象となった命令に対し、前記タイムアウト処理の対象となった命令と異なる命令に割込みを行うことを特徴とする請求項４に記載のパイプラインプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はパイプラインプロセッサに関し、特に命令拡張可能なパイプラインプロセッサに関する。
【背景技術】
【０００２】
プロセッサのアーキテクチャとして、縮小命令セットコンピュータ（ＲＩＳＣ）及び複合命令セットコンピュータ（ＣＩＳＣ）が知られている。ＲＩＳＣプロセッサは、命令の単純化により、１つの命令に対する処理が完了する前に、次の命令の処理を開始する「パイプライン処理」を実現する。一般的なパイプライン処理においては、命令フェッチステージ（以下において「Ｆステージ」という。）、命令デコードステージ（以下において「Ｄステージ」という。）、命令実行ステージ（以下において「Ｅステージ」という。）、メモリステージ（以下において「Ｍステージ」という。）、及びライトバックステージ（以下において「Ｗステージ」という。）の各ステージが独立して動作する。
【０００３】
パイプラインプロセッサが命令を実行する際、命令とプロセッサのアーキテクチャとに起因するハザードを解決する必要がある。典型的なパイプラインプロセッサにおけるハザードとしては、データハザードと構造ハザードの２がある。制御ハザードという用語も存在するが、広義にはデータハザードに含まれる。「データハザード」とは、命令の実行に必要な情報をレジスタから読み出すサイクルと、実行結果のデータをレジスタに書き込むサイクルが異なることで発生するハザードである。「構造ハザード」には、パイプラインプロセッサの構造によって様々な種類が存在するが、基本的には回路リソースの不足に起因したハザードである。
【０００４】
パイプラインプロセッサは、レジスタ情報の読み出しをＤステージで行い、レジスタへの書き込みをＷステージで行う。ここで、レジスタ０番に処理結果を格納する命令Ａ及びレジスタ０番を使用する命令Ｂを仮定する。命令ＡがＥステージに存在するとき、次の命令ＢはＤステージに存在する。命令ＡがＷステージに到達していない場合、命令Ｂはレジスタ０番を読み出しても、命令Ａの結果を得ることができない。このようなハザードを、リード・アフター・ライト・ハザード（以下において「ＲＡＷハザード」という。）という。これに対して、あるレジスタに対して最初の命令が書き込みを行った後に、次の命令が更に上書きするようなハザードをライト・アフター・ライト・ハザード（以下において「ＷＡＷハザード」という。）という。
【０００５】
構造ハザードは、読み出しポートが１つしか存在しないメモリ装置に対して、２つの読み出し要求が同時に行われた場合等に発生する。この場合、メモリが同時に１つの要求しか処理できないために、いずれか片方を待たせる必要がある。同時に２つの読み出し要求を処理可能なメモリを使用することで解決可能であるが、回路規模の増大を招き、動作速度の低下を生じさせる要因となる。
【０００６】
データハザードを解決するために、後続の命令実行を停止させる「ストール」又は「インターロック」が知られている。他の解決方法としては、先行する命令がＷステージに到達する前に、後続の命令にデータを送出するための回路を設ける方法がある。この送出のことをデータの「バイパス」又は「フォワーディング」という。パイプラインプロセッサのデータハザードは、一般的には、ストール及びデータのバイパスを組み合わせることで解決される。
【０００７】
効率の良い命令実行のためには、パイプライン構造に最適なストール及びバイパスの制御が必要となるが、こうした制御はパイプライン構造に大きく依存する。例えば、（１）命令実行のための複数のパイプラインが存在し、（２）各パイプラインが異なる実行ステージ数をもっていて、（３）ある命令では実行ステージ数が演算データに依存して変化する複雑なプロセッサにおいて、命令を効率よく実行するためのストール及びバイパス制御は非常に複雑になる。
【０００８】
一方、ユーザが任意の命令を拡張する方法として、プロセッサコアに対し、ユーザが定義した命令（以下において「拡張命令」という。）を実行する装置（以下において「拡張命令実行ユニット」という。）を接続する手法が知られている。
【０００９】
古典的パイプラインプロセッサにおいて、拡張命令の実行ステージ数がプロセッサコアの実行パイプラインよりも長い場合において、例外がパイプラインの後方のステージで発生する場合には、例外が発生するか否かが確定するまで、拡張命令の後続の命令は、プロセッサの状態を変更しないように命令の発行を停止する。したがって、命令の実行効率が落ちる問題がある。
【００１０】
拡張命令実行ユニットを備えるパイプラインプロセッサにおけるハザード検出手法としては、「スコアボーディング」を使用したストール制御が利用される。スコアボーディング装置は、各パイプラインの各ステージに存在する命令についての情報を記憶する装置と、命令セットやパイプライン構造に依存したハザード検出装置から構成される。スコアボーディング装置は、回路規模は小さいが複雑度が高い傾向がある。また、拡張命令実行ユニットを備えないパイプラインプロセッサにおいて、リオーダバッファを用いる手法が知られている（例えば、特許文献１参照。）。
【００１１】
しかしながら、命令拡張可能なプロセッサにおいて、プロセッサ自体の複雑度と、定義した命令の複雑度が増大すると、スコアボーディング装置が複雑化する。また、スコアボーディング装置を備えるパイプラインプロセッサに、拡張命令を追加する場合、追加した拡張命令を実行するパイプラインの構造は、ユーザの定義によって変化する。したがって、命令を効率よく実行するためには、スコアボーディング装置の設計変更が必要となり、開発期間が増大する。命令を効率よく実行する必要がない場合には、スコアボーディング装置の設計変更を不要とすることもできるが、命令の実行効率が悪くなる。近年、拡張命令実行ユニットを備えるパイプラインプロセッサの高速化が進んでおり、複雑度の高いスコアボーディング装置を実装することなく、信頼性を向上可能な手法の確立が望まれている。
【００１２】
従来、拡張命令実行ユニットを備えないパイプラインプロセッサにおいて、命令の実行効率を良くする手法として、リオーダバッファを使用する手法が知られている（例えば、特許文献１参照。）。
【００１３】
しかしながら、従来のリオーダバッファの使用目的は、スーパスカラプロセッサにおける命令の同時発行やアウト・オブ・オーダの命令発行や完了を目的としたものであった。
【特許文献１】特開平１０−１４３３６５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
本発明は、複雑度を増大させることなく、信頼性を向上可能なパイプラインプロセッサを提供する。
【課題を解決するための手段】
【００１５】
本発明の一態様によれば、フェッチされた命令をデコードして、コア命令及びユーザにより定義された拡張命令のいずれかを選択的に発行する命令デコードユニットと、発行されたコア命令を実行するコア命令実行ユニットと、発行された拡張命令を実行する拡張命令実行ユニットと、コア命令実行ユニット及び拡張命令実行ユニットのそれぞれの命令実行結果を一時的に記憶して、コア命令及び拡張命令の発行された順に命令実行結果を並べ替えて出力するリオーダバッファとを備えるパイプラインプロセッサが提供される。
【００１６】
本発明の他の態様によれば、フェッチされた命令をデコードして、命令を発行する命令デコードユニットと、発行された命令を実行する命令実行ユニットと、命令実行ユニットの命令実行結果を一時的に記憶して、命令の発行された順に命令実行結果を並べ替えて出力するリオーダバッファと、命令実行ユニットによる命令の実行に要するクロックサイクルをカウントして、カウント結果が一定値を超えた場合にタイムアウト処理を発生させるタイムアウト処理装置とを備えるパイプラインプロセッサが提供される。
【発明の効果】
【００１７】
本発明によれば、複雑度を増大させることなく、信頼性を向上可能なパイプラインプロセッサを提供できる。
【発明を実施するための最良の形態】
【００１８】
次に、図面を参照して、本発明の第１及び第２実施形態を説明する。以下の第１及び第２実施形態における図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。
【００１９】
（第１実施形態）
本発明の第１実施形態に係るパイプラインプロセッサは、図１に示すように、プロセッサコア４ａ及び拡張命令実行ユニット４０２ａを備える。プロセッサコア４ａは外部バス４５０に接続され、外部バス４５０には外部メモリ４１が接続されている。プロセッサコア４ａは、命令フェッチユニット４００、命令デコードユニット４０１ａ、コア命令実行ユニット４０、レジスタファイル４０８ａ、リオーダバッファ４０６ａ、リオーダバッファコントローラ４０７ａ、命令キャッシュ４１０、データキャッシュ４１２、バスインタフェース（以下において「バスＩ／Ｆ」と略記する。）４１１、及びバイパスネットワーク４０９ａを備える。命令デコードユニット４０１ａは、命令フェッチユニット４００によりフェッチされた命令をデコードして、コア命令及びユーザにより定義された拡張命令のいずれかを選択的に発行する。コア命令実行ユニット４０は発行されたコア命令を実行する。拡張命令実行ユニット４０２ａは発行された拡張命令を実行する。リオーダバッファ４０６ａは、コア命令実行ユニット４０及び拡張命令実行ユニット４０２ａのそれぞれの命令実行結果を一時的に記憶して、コア命令及び拡張命令の発行された順に命令実行結果を並べ替えて出力する。尚、コア命令実行ユニット４０及び拡張命令実行ユニット４０２ａは、命令実行ユニット１ａを構成する。
【００２０】
「コア命令」とは、プロセッサコア４ａに予め用意されている各種の命令を意味し、例えば浮動小数点演算命令、整数演算命令、分岐命令、及びロード・ストア命令等を意味する。コア命令の命令実行サイクル数は基本的には固定値である。拡張命令実行ユニット４０２ａとしては、例えばデジタル・シグナル・プロセッサ（ＤＳＰ）又はコプロセッサ等、或いはこれらの組み合わせが使用できる。以下においては、拡張命令実行ユニット４０２ａとしてＤＳＰを使用する一例を説明する。この場合、演算データに応じて実行サイクルが変化するＤＳＰ命令が拡張命令として使用される。ＤＳＰ命令の命令実行サイクル数は可変値である。
【００２１】
外部メモリ４１は、ランダム・アクセス・メモリ（ＲＡＭ）４１３及びリード・オンリー・メモリ（ＲＯＭ）４１４を備える。ＲＯＭは、パイプラインプロセッサにおいて実行される各命令を格納するプログラム記憶装置等として機能する。これに対してＲＡＭは、パイプラインプロセッサにおいて実行される各命令を格納するプログラム記憶装置として機能すると共に、パイプラインプロセッサにおける命令実行処理中に利用されるデータ等を一時的に格納し、或いは作業領域として利用される一時的なデータメモリ等として機能する。
【００２２】
バスＩ／Ｆ４１１は、コア命令実行ユニット４０からデータキャッシュ４１２を介して送信されるデータ転送要求と、命令フェッチユニット４００から命令キャッシュ４１０を介して送信される命令転送要求とを調停する。この結果、バスＩ／Ｆ４１１は、外部バス４５０に要求を送信し、外部メモリ４１とデータの送受信を行う。
【００２３】
また、バスＩ／Ｆ４１１は、外部メモリ４１から読み出されたデータ又は命令を受信して、受信したデータをデータキャッシュ４１２に送信する。バスＩ／Ｆ４１１は、外部メモリ４１から読み出された命令を受信して、受信した命令を命令キャッシュ４１０に送信する。
【００２４】
命令キャッシュ４１０は、バスＩ／Ｆ４１１に命令転送要求を送り、バスＩ／Ｆ４１１から転送された命令を受け取る。データキャッシュ４１２は、バスＩ／Ｆ４１１にデータ転送要求を送り、バスＩ／Ｆ４１１から転送されたデータを受け取る。
【００２５】
命令フェッチユニット４００は、コア命令実行ユニット４０及び拡張命令実行ユニット４０２ａの実行対象となる命令を取得するためのバス要求を、命令キャッシュ４１０を介してバスＩ／Ｆ４１１に送信する。また、命令フェッチユニット４００は、バスＩ／Ｆ４１１からデータを受け取ると、受け取ったデータを実行すべき命令として命令デコードユニット４０１ａに送信する。
【００２６】
命令デコードユニット４０１ａは、命令フェッチユニット４００からの命令がコア命令である場合、コア命令をデコードして、コア命令実行ユニット４０を制御する制御信号を出力する。命令フェッチユニット４００からの命令が拡張命令（ＤＳＰ命令）である場合には、拡張命令（ＤＳＰ命令）のデコードは、拡張命令実行ユニット（ＤＳＰ）４０２ａの内部に設けられたデコーダ（図示省略）により行われる。
【００２７】
レジスタファイル４０８ａは、複数のレジスタから構成され、パイプラインプロセッサの状態及び演算結果等を記憶する。レジスタファイル４０８ａを構成する複数のレジスタにおいて、プログラムの実行のために使用されるレジスタを汎用レジスタという。レジスタファイル４０８ａは、第１読み出し制御ポートＲ０及び第２読み出し制御ポートＲ１と、読み出し結果を出力する第１読み出しポートＲＤ０及び第２読み出しポートＲＤ１と、ライトバックされた命令実行結果が入力されるライトバック用ポートＷとを有する。  レジスタファイル４０８ａの第１読み出し制御ポートＲ０及び第２読み出し制御ポートＲ１には、命令デコードユニット４０１ａから、命令の実行に必要な汎用レジスタの番号を読み出す要求が入力される。
【００２８】
バイパスネットワーク４０９ａには、レジスタファイル４０８ａの第１読み出しポートＲＤ０と第２読み出しポートＲＤ１からの読み出しデータと、リオーダバッファ４０６ａの第１読み出しポートＲＤ０及び第２読み出しポートＲＤ１からの読み出しデータと、命令デコードユニット４０１ａからデータ配線４６４ａを介して伝達される命令の即値データと、拡張命令実行ユニット４０２ａからデータ配線４６３を介して伝達される拡張命令のデコード結果とが入力される。この結果、命令の実行に必要なデータがバイパス又は選択されて拡張命令実行ユニット（ＤＳＰ）４０２ａ及びコア命令実行ユニット４０に出力される。
【００２９】
リオーダバッファコントローラ４０７ａは、リオーダバッファ４０６ａの制御を行う。リオーダバッファ４０６ａは、命令実行結果が格納される複数の記憶装置（以下においてリオーダバッファ４０６ａ内の各記憶装置を「エントリ」という。）を備える。複数のエントリには、４つの書き込みポート（第１書き込みポートＷ０〜第４書き込みポートＷ３）を介して、拡張命令（ＤＳＰ命令）又はコア命令の実行結果が書き込まれる。尚、同時にｙ個の書き込みが可能なリオーダバッファを、ｙ個の書き込みポートを有するリオーダバッファという（ｙ；２以上の整数）。リオーダバッファ４０６ａに対する命令実行結果の書き込みを「コンプリーション」という。
【００３０】
更に、リオーダバッファ４０６ａは、２つの読み出し制御ポート（第１読み出し制御ポートＲ０及び第２読み出し制御ポートＲ１）と、２つの読み出しポート（第１読み出しポートＲＤ０及び第２読み出しポートＲＤ１）とを具備する。
【００３１】
命令デコードユニット４０１ａは、命令を発行する際、リオーダバッファコントローラ４０７ａに対してリオーダバッファ４０６ａのエントリ確保要求を送信する。この結果、リオーダバッファ４０６ａの空きエントリが確保される。リオーダバッファコントローラ４０７ａは、確保されたエントリの番号をタグ番号として、リオーダバッファ４０６ａに通知する。この結果、発行された各命令には１つのタグ番号が割り当てられた状態となり、命令実行結果は、対応するタグ番号のエントリに書き込まれる。
【００３２】
リオーダバッファコントローラ４０７ａは、コンプリーションされた命令実行結果の先入れ先出し（ＦＩＦＯ）制御を行うことで、発行された命令の順番に従って命令実行結果を出力する。したがって、リオーダバッファ４０６ａは、命令デコードユニット４０１ａからの要求でエントリを確保した順番に基づき、命令実行結果をレジスタファイル４０８ａにデータ配線４６０を介して出力する。この動作を「コミット操作」と呼ぶ。
【００３３】
リオーダバッファ４０６ａに空きエントリがない場合は、命令を発行することができないので、リオーダバッファコントローラ４０７ａは、命令デコードユニット４０１ａに対し、データ配線４５６を介してストール要求を出力する。命令デコードユニット４０１ａは、リオーダバッファコントローラ４０７ａからストール要求を受け取ると、パイプラインのＤステージをストールさせて、命令の発行を停止する。
【００３４】
リオーダバッファ４０６ａは、エントリの命令実行結果の書き込みがまだ行われていない場合には、書き込みが完了するまでコミット操作を行わない。また、リオーダバッファ４０６ａは、コミット操作が行われたエントリを空きエントリとすることで、次のエントリ確保に使用可能な状態とする。
【００３５】
更に、コア命令実行ユニット４０は、浮動小数点数演算装置（以下において「ＦＰＵ」と略記する。）４０３、整数演算命令・分岐命令実行ユニット（以下において「ＩＢＵ」と略記する。）４０４、及びロード命令・ストア命令実行ユニット（以下において「ＬＳＵ」と略記する。）４０５を備える。
【００３６】
ＩＢＵ４０４は、図２（ｃ）及び（ｄ）に示すように、整数演算命令及び分岐命令を実行する。ＦＰＵ４０３は、図２（ｅ）及び（ｆ）に示すように、浮動小数点演算命令を実行する。ＬＳＵ４０５は、図２（ｇ）及び（ｈ）に示すように、ロード命令及びストア命令を実行する。
【００３７】
コア命令及び拡張命令（ＤＳＰ命令）に対する処理は、図２（ａ）に示すＦステージ、図２（ｂ）に示すＤステージ、及び図２（ｊ）に示すＷステージの３つのステージを有する点で共通する。
【００３８】
コア命令に対するＤステージは、図２（ｂ）に示すように、命令デコードユニット４０１ａにより実行される。拡張命令（ＤＳＰ命令）に対するＤステージは、主に、拡張命令実行ユニット（ＤＳＰ）４０２ａにより実行される。
【００３９】
詳細には、命令デコードユニット４０１ａは、コア命令をデコードして、コア命令がタイムアウト処理の対象となる命令であるか否か、レジスタファイル４０８ａに対するライトバックを必要とする命令であるか否か、及び例外を発生する可能性があるか否かの情報を生成する。生成された情報は、データ配線４６１ａを介してリオーダバッファ４０６ａに伝達される。
【００４０】
これに対して、拡張命令実行ユニット（ＤＳＰ）４０２ａは、拡張命令（ＤＳＰ命令）をデコードして、拡張命令（ＤＳＰ命令）がレジスタファイル４０８ａに対するライトバックを必要とする命令であるか否か、及び例外を発生する可能性があるか否かの情報を生成する。生成された情報は、データ配線４６２を介してリオーダバッファ４０６ａに伝達される。
【００４１】
また、拡張命令実行ユニット（ＤＳＰ）４０２ａ、ＦＰＵ４０３、ＩＢＵ４０４、及びＬＳＵ４０５のそれぞれは、命令の実行が終わると、実行結果をリオーダバッファ４０６ａに書き込む。
【００４２】
具体的には、ＬＳＵ４０５の命令実行結果は、図１に示すように、データ配線４５９を介してリオーダバッファ４０６ａの第１書き込みポートＷ０に伝達される。ＬＳＵ４０５の命令実行結果には、実行結果のデータ、実行結果のデータが有効であることを意味する信号、例外の発生を意味する信号、及び命令のタグ番号が含まれる。
【００４３】
また、ＩＢＵ４０４の命令実行結果は、データ配線４５８を介してリオーダバッファ４０６ａの第２書き込みポートＷ１に伝達される。ＩＢＵ４０４の命令実行結果には、実行結果のデータ、実行結果のデータが有効であることを意味する信号、例外の発生を意味する信号、及び命令のタグ番号が含まれる。
【００４４】
ＦＰＵ４０３の命令実行結果は、データ配線４５７を介してリオーダバッファ４０６ａの第３書き込みポートＷ２に伝達される。ＦＰＵ４０３の命令実行結果には、実行結果のデータ、実行結果のデータが有効であることを意味する信号、例外の発生を意味する信号、及び命令のタグ番号が含まれる。
【００４５】
ここで「例外」は、例えば除算演算において、ゼロによって除算を行う場合等に発生する。この場合、除算命令の実行が中止され、例外処理のプログラムが実行される。ゼロ除算の問題を解決して、本来のプログラムの処理を再開するために、除算命令を再開する場合、除算命令の後続の命令が既に実行されていると、後続の命令を２回実行することになり、本来のプログラムの実行を正確に再開できなくなる。
【００４６】
したがって、リオーダバッファ４０６ａは、コンプリーション時において、例外の発生を意味する信号がアクティブであった場合、例外の発生した命令の実行結果が格納されるエントリを破棄する。即ち、破棄されたエントリに格納されている実行結果は、コミット操作が行われない。
【００４７】
また、命令実行結果が破棄されると、破棄された命令実行結果より後に保持された命令実行結果も破棄される。これによって、例外が発生した命令の後続の命令をすべて破棄し、プロセッサの状態が、例外が発生した命令の後続の命令により変化しない「正確な例外」の処理が可能となる。
【００４８】
更に、リオーダバッファ４０６ａは、図２（ｊ）に示すように、Ｗステージにおいて、命令実行結果をレジスタファイル４０８ａに転送する。Ｅステージに要するクロックサイクルは、コア命令においては例えば２サイクル固定であるが、拡張命令（ＤＳＰ命令）においてはｎサイクルである（ｎ；２以上の整数）。即ち、拡張命令（ＤＳＰ命令）の種類に応じてＸ１ステージからＸｎステージの範囲で実行ステージ数が変化する。
【００４９】
次に、図３に示すタイムチャートを参照して、図１に示すパイプラインプロセッサにおける整数演算命令処理時の動作の概要について説明する。図３に示すタイムチャートは、図３（ｂ）〜（ｆ）の各整数演算命令を実行した場合に、図３（ａ）に示すクロックの各サイクルＣｋ（ｋ；０以上の整数）における各ステージのタイミングを示している。但し、各整数演算命令の実行時においてハザードが発生していないものとする。尚、各整数演算命令は、Ｆステージ、Ｄステージ、第１整数演算命令実行ステージ（以下において「Ｅ１ステージ」という。）、第２整数演算命令実行ステージ（以下において「Ｅ２ステージ」という。）、及びＷステージにより処理される。
【００５０】
図３（ｂ）のサイクルＣ０において、整数演算命令１に対するＦステージが実行される。Ｆステージにおいて、図１に示す命令フェッチユニット４００は、命令キャッシュ４１０から整数演算命令１をフェッチする。フェッチされた整数演算命令１は、命令デコードユニット４０１ａに転送される。
【００５１】
図３（ｂ）のサイクルＣ１において、整数演算命令１に対するＤステージが実行される。同時に、図３（ｃ）に示す整数演算命令２に対するＦステージが実行される。
【００５２】
Ｄステージにおいて、命令デコードユニット４０１ａは、フェッチされた整数演算命令１の解釈を行い、ＩＢＵ４０４を制御するための制御信号を生成し、必要に応じてレジスタファイル４０８ａの内部の汎用レジスタからデータを読み出す。命令デコードユニット４０１ａが生成する制御信号と、レジスタファイル４０８ａから読み出されたデータは、ＩＢＵ４０４に転送される。尚、命令デコードユニット４０１ａは、図３のサイクルＣ１〜サイクルＣ５に示すように、１サイクルに１つの命令を発行する。
【００５３】
図３（ｂ）のサイクルＣ２において、整数演算命令１に対するＥ１ステージが実行される。更に、整数演算命令２に対するＤステージが実行され、整数演算命令３に対するＦステージが実行される。
【００５４】
図３（ｂ）のサイクルＣ３において、整数演算命令１に対するＥ２ステージが実行される。同時に、整数演算命令２に対するＥ１ステージが実行され、整数演算命令３に対するＤステージが実行され、整数演算命令４に対するＦステージが実行される。整数演算命令１に対するＥ２ステージにより得られた実行結果は、リオーダバッファ４０６ａに一時的に保持される。
【００５５】
図３（ｂ）のサイクルＣ４において、整数演算命令１に対するＷステージが実行される。更に、整数演算命令２に対するＥ２ステージが実行され、整数演算命令３に対するＥ１ステージが実行され、整数演算命令４に対するＤステージが実行され、整数演算命令５に対するＦステージが実行される。整数演算命令１に対するＷステージにおいて、リオーダバッファ４０６ａは、整数演算命令１の実行結果を、レジスタファイル４０８ａに書き込む。
【００５６】
このように、Ｆステージ、Ｄステージ、Ｅ１ステージ、Ｅ２ステージ、及びＷステージの各ステージを独立して行うことにより、１つの整数演算命令に対する各ステージが完了する前に、次の整数演算命令の処理が並行して行われる。したがって、図１に示すパイプラインプロセッサは、ハザードが発生しない限り、１サイクルに１命令のスループットで整数演算命令を実行可能である。尚、ＦＰＵ４０３を使用した浮動小数点数演算命令処理も整数演算命令処理と同様にして動作する。
【００５７】
次に、図４に示すタイムチャートを参照して、図１に示すパイプラインプロセッサにおけるロード命令処理時の動作の概要について説明する。但し、上述した整数演算命令処理時と同様の動作については重複する説明を省略する。各ロード命令は、Ｆステージ、Ｄステージ、第１ロード命令実行ステージ（以下において「Ｍ１ステージ」という。）、第２ロード命令実行ステージ（以下において「Ｍ２ステージ」という。）、及びＷステージにより処理される。
【００５８】
図４（ｂ）のサイクルＣ０において、ロード命令１に対するＦステージが実行される。
【００５９】
図４（ｂ）のサイクルＣ１において、ロード命令１に対するＤステージが実行される。Ｄステージにおいて、命令デコードユニット４０１ａは、フェッチされたロード命令１の解釈を行い、ＬＳＵ４０５を制御するための制御信号を生成する。命令デコードユニット４０１ａが生成する制御信号はＬＳＵ４０５に供給される。
【００６０】
図４（ｂ）のサイクルＣ２及びＣ３において、ロード命令１に対するＭ１及びＭ２ステージが実行される。Ｍ１及びＭ２ステージにおいて、ＬＳＵ４０５は、制御信号に応じて、外部メモリ４１から読み出されたデータを受け取る。
【００６１】
図４（ｂ）のサイクルＣ４において、ロード命令１に対するＷステージが実行される。Ｗステージにおいて、リオーダバッファ４０６ａは、Ｅ１及びＥ２ステージで得られたデータを、レジスタファイル４０８ａに書き込む。
【００６２】
図４（ｃ）〜（ｆ）に示すロード命令２〜５についてもロード命令１と同様に処理される。このように、Ｆステージ、Ｄステージ、Ｍ１ステージ、Ｍ２ステージ、及びＷステージの各ステージを独立して行うことにより、１つのロード命令に対する各ステージが完了する前に、次のロード命令の処理が並行して行われる。
【００６３】
上述したように、図１に示すパイプラインプロセッサは、演算に必要なデータのレジスタファイル４０８ａからの読み出しをＤステージで行い、レジスタファイル４０８ａへの実行結果の書き込みをＷステージで行う。ここで比較例として、図１に示すリオーダバッファ４０６ａを備えない場合の動作例を説明する。
【００６４】
図５（ｂ）及び（ｄ）に示すように、Ｆステージ、Ｄステージ、Ｅステージ、Ｍステージ、及びＷステージの各ステージにより処理される（コア）命令１及び２を仮定する。更に図５（ｃ）に示すように、Ｆステージ、Ｄステージ、Ｘ１ステージ、Ｘ２ステージ、Ｘ３ステージ、Ｘ４ステージ、及びＷステージの各ステージにより処理される拡張命令（ＤＳＰ命令）を仮定する。
【００６５】
図５（ｃ）に示す拡張命令（ＤＳＰ命令）の実行サイクルが４サイクルであるため、命令発行の順番と、命令実行が終了する順番が入れ替わっている。命令発行の順番と、命令実行が終了する順番が入れ替わる状態を「アウト・オブ・オーダー」という。アウト・オブ・オーダーにより、ＷＡＷハザードが発生する。よって、図５（ｃ）に示す拡張命令（ＤＳＰ命令）の実行サイクル数が可変であるために、図５（ｄ）に示す命令２との間にＷＡＷハザードが発生する。
【００６６】
図１に示すリオーダバッファ４０６ａを備えない場合、ＷＡＷハザードを解決するため、図５（ｄ）においてはパイプラインのストールが行われている。尚、図５（ｄ）における記号“ｄｓ”は、Ｄステージがストールしている状態を示している。
【００６７】
一方、図１に示すリオーダバッファ４０６ａを備えることにより、アウト・オブ・オーダーとなった実行結果をイン・オーダーに入れ替えることができる。即ち、リオーダバッファ４０６ａを使用することで、実行サイクル数が異なる命令を複数実行しても、データのＷＡＷハザードを解決可能となる。
【００６８】
次に、図６に示すタイムチャートを参照して、図１に示すパイプラインプロセッサにおける整数演算命令、ロード命令、及び拡張命令（ＤＳＰ命令）処理時の動作の概要について説明する。但し、上述した整数演算命令処理時及びロード命令処理時と同様の動作については、重複する説明を省略する。また、ＷＡＷハザード以外は発生していないものとする。図６に示すタイムチャートにおいて、記号“ＲＢ”は、命令実行結果がリオーダバッファ４０６ａに格納されている状態を示している。
【００６９】
図６（ｃ）に示す拡張命令（ＤＳＰ命令）は、Ｘ１ステージ〜Ｘ５ステージの実行ステージにより処理される。図６（ｃ）に示す拡張命令（ＤＳＰ命令）の実行ステージがサイクルＣ８で完了する前に、図６（ｅ）に示すロード命令の実行ステージがサイクルＣ７で完了している。
【００７０】
図６（ｃ）に示す拡張命令（ＤＳＰ命令）及び図６（ｅ）に示すロード命令の実行結果はリオーダバッファ４０６ａに書き込まれる。リオーダバッファコントローラ４０７ａは、図６（ｃ）に示す拡張命令（ＤＳＰ命令）に対するＷステージが完了するまで、図６（ｅ）に示すロード命令の実行結果をリオーダバッファ４０６ａに保持させる。この結果、図６（ｅ）に示すロード命令に対するＷステージは、サイクルＣ１０で実行される。このように、図６においては、図５と比較して、図６（ｅ）に示すロード命令がストールしていない。したがって、拡張命令（ＤＳＰ命令）の実行結果を参照しない後続の命令をストールさせずに実行可能となる。
【００７１】
また、図６（ｅ）に示すロード命令がリオーダバッファ４０６ａに保持されているサイクルＣ７において、図６（ｆ）に示す整数演算命令３の実行ステージが完了している。図６（ｆ）に示す整数演算命令３の実行結果はリオーダバッファ４０６ａに書き込まれる。リオーダバッファコントローラ４０７ａは、図６（ｅ）に示すロード命令に対するＷステージが完了するまで、図６（ｆ）に示す整数演算命令３の実行結果をリオーダバッファ４０６ａに保持させる。この結果、図６（ｆ）に示す整数演算命令３に対するＷステージは、サイクルＣ１１で実行される。
【００７２】
次に、図７を用いて、拡張命令（ＤＳＰ命令）の命令フォーマット例について説明する。図７に示す例においては、５つのビットフィールドが定義されている。拡張命令（ＤＳＰ命令）は、４ビットのメジャー・オペコード、４ビットのレジスタ番号Ｒｍ、４ビットのレジスタ番号Ｒｎ、４ビットのマイナー・オペコード、及び１６ビットの即値の合計３２ビットを有する。
【００７３】
即値には、ビット番号０〜１５が割り当てられている。ユーザが拡張命令（ＤＳＰ命令）を使用して任意の拡張命令（ＤＳＰ命令）を定義する場合、即値が使用される。例えば即値の上位４ビット（ビット番号１２〜１５）を拡張命令（ＤＳＰ命令）の識別に使用することで１６個の拡張命令（ＤＳＰ命令）を定義可能である。
【００７４】
マイナー・オペコードには、ビット番号１６〜１９が割り当てられている。拡張命令（ＤＳＰ命令）のマイナー・オペコードは“００１１”である。各レジスタ番号Ｒｍ及びＲｎは、演算に使用するレジスタの番号であり、図１に示すレジスタファイル４０８ａ内の６つの汎用レジスタのうちの１つを示す。
【００７５】
レジスタ番号Ｒｎ及びレジスタ番号Ｒｍには、ビット番号２０〜２３及びビット番号２４〜２７がそれぞれ割り当てられている。メジャー・オペコードには、ビット番号２８〜３１が割り当てられている。拡張命令（ＤＳＰ命令）のメジャー・オペコードは“１１１１”である。
【００７６】
また、図１に示す命令デコードユニット４０１ａ及び拡張命令実行ユニット４０２ａ間を接続するデータ配線４５２は、表１に示すように、拡張命令の即値を示す信号“medpDCode”等を伝達する。
【表１】
2007034731.tif 000003
【００７７】
尚、表１においてビット幅の表記［Ａ：Ｂ］は、ビットＢからビットＡまでのビット幅を有することを意味し、例えば信号“medpDRobIndex”のビット幅［２：０］は、ビット０からビット２までの３ビット幅を有していることを示している。表１において「方向」（Ｉ／Ｏ）とは、記号“Ｉ”が拡張命令実行ユニット４０２ａからプロセッサコア４ａに対して伝達されるデータ（信号）を意味し、記号“Ｏ”がプロセッサコア４ａから拡張命令実行ユニット４０２ａに対して伝達されるデータ（信号）を意味している。
【００７８】
例えば、ユーザが図７に示す即値の上位４ビットを使用して１６個の命令を定義した場合、拡張命令実行ユニット（ＤＳＰ）４０２ａにおいて即値の上位４ビットをデコードすることで、拡張命令の識別が行われる。
【００７９】
拡張命令実行ユニット（ＤＳＰ）４０２ａは、拡張命令の識別結果に応じて、表１に示す信号“dpmeDOpUse”を生成する。信号“dpmeDOpUse”は、レジスタ番号Ｒｍ及びＲｎを、拡張命令が使用するか否かを示す２ビットの信号である。レジスタ番号Ｒｍ又はＲｎを使用する場合には、該当するビットが１になり、使用しない場合は該当するビットが０になる。例えば、信号“dpmeDOpUse”が２進数表記で“１１”の場合はレジスタ番号Ｒｍ及びＲｎを両方使用する命令であることを意味する。信号“dpmeDOpUse”が２進数表記で“００”の場合は、レジスタ番号Ｒｍ及びＲｎのいずれも使用しないことを意味する。
【００８０】
拡張命令実行ユニット（ＤＳＰ）４０２ａの命令実行結果は、データ配線４５５を介してリオーダバッファ４０６ａの第４書き込みポートＷ３に伝達される。拡張命令実行ユニット（ＤＳＰ）４０２ａの命令実行結果には、表１に示すように、実行結果のデータである“dpmePResultData”、データが有効であることを意味する信号である“dpmePValid”、例外の発生を意味する信号である“dpmePExcept”、及び命令のタグ番号である“dpmePRobIndex”が含まれる。
【００８１】
更に、リオーダバッファ４０６ａは図８に示すように、例えば８つのエントリ（第１エントリＥ１〜第８エントリＥ８）を備える。但し、エントリ数は８つに限定されず、パイプラインの段数等に応じて適宜エントリ数を変更しても良い。
【００８２】
各エントリは、１ビットのＲフラグ、１ビットのＣフラグ、１ビットのＴフラグ、１ビットのＷフラグ、１ビットのＥフラグ、５ビットのＲＦＮフィールド、３２ビットのＷＤＡＴＡフィールド、及び３２ビットのＰＣフィールドを含む。
【００８３】
一例として、第１エントリＥ１の「Ｒフラグ」は、第１エントリＥ１が使用中であるか否かを示すフラグである。よって、Ｒフラグが論理値“１”の場合、第１エントリＥ１は使用中であり、論理値“０”の場合、第１エントリＥ１は使用中でないこととなる。
【００８４】
また、第１エントリＥ１の「Ｖフラグ」は、第１エントリＥ１に割り当てられた命令の実行結果が書き込まれたか否かを意味する。Ｖフラグが論理値“１”の場合は第１エントリＥ１に割り当てられた命令の実行結果が書き込まれたことを示し、論理値“０”の場合は第１エントリＥ１に割り当てられた命令の実行結果が書き込まれていないことを示す。
【００８５】
第１エントリＥ１の「Ｔフラグ」は、第１エントリＥ１に割り当てられた命令がタイムアウト処理の対象であるかを意味する。Ｔフラグが論理値“１”の場合は第１エントリＥ１に割り当てられた命令がタイムアウトの対象であることを示し、論理値“０”の場合は第１エントリＥ１に割り当てられた命令がタイムアウトの対象でないことを示す。尚、タイムアウト処理の詳細については後述する。
【００８６】
第１エントリＥ１の「Ｗフラグ」は、第１エントリＥ１に割り当てられた命令が、レジスタファイル４０８ａに対するライトバックを必要とするか否かを意味する。Ｗフラグが論理値“１”の場合は第１エントリＥ１に割り当てられた命令がライトバックを必要とすることを示し、論理値“０”の場合は第１エントリＥ１に割り当てられた命令がライトバックを必要としないことを示す。
【００８７】
第１エントリＥ１の「Ｅフラグ」は、第１エントリＥ１に割り当てられた命令が例外を発生する可能性があるか否かを意味する。Ｅフラグが論理値“１”の場合は第１エントリＥ１に割り当てられた命令が例外を発生する可能性があることを示し、論理値“０”の場合は第１エントリＥ１に割り当てられた命令が例外を発生する可能性がないことを示す。
【００８８】
第１エントリＥ１の「ＲＦＮフィールド」は、第１エントリＥ１に割り当てられた命令によって更新されるレジスタファイル４０８ａのレジスタ番号を示すフィールドである。第１エントリＥ１の「ＷＤＡＴＡフィールド」は、第１エントリＥ１に割り当てられた命令の実行結果が格納されるフィールドである。第１エントリＥ１の「ＰＣフィールド」は、第１エントリＥ１に割り当てられた命令のプログラムカウンタ値が格納されるフィールドである。第２エントリＥ２〜第８エントリＥ８は、第１エントリＥ１と同様に構成される。
【００８９】
更に、リオーダバッファコントローラ４０７ａは、主にコミット操作に使用される第１カウンタ６０２、及びタグ番号を生成する第２カウンタ６０３を備える。第１カウンタ６０２及び第２カウンタ６０３のそれぞれは、例えば３ビットのビット長を有する。即ち、第１カウンタ６０２及び第２カウンタ６０３は８パターンの値を表現可能であり、１０進数表記で値“７”に値“１”を加算すると値“０”になる。
【００９０】
命令デコードユニット４０１ａは、命令発行を行うと、その次のサイクルで第２カウンタ６０３の値を１つ増加させる。第２カウンタ６０３のカウント値がタグ番号として使用され、タグ番号は、図１に示すデータ配線４５１を介してリオーダバッファ４０６ａに伝達される。第１カウンタ６０２のカウント値により、第１エントリＥ１〜第８エントリＥ８のいずれかが指定される。同様に、第２カウンタ６０３のカウント値により、第１エントリＥ１〜第８エントリＥ８のいずれかが指定される。
【００９１】
命令デコードユニット４０１ａによって命令が発行されると、第２カウンタ６０３で指定されるエントリのＲフラグが論理値“１”に設定される。また、発行された命令により更新されるレジスタファイル４０８ａのレジスタ番号が、第２カウンタ６０３で指定されるエントリのＲＦＮフィールドに設定される。
【００９２】
更に、発行された命令がライトバックを必要とする命令である場合、第２カウンタ６０３で指定されるエントリのＷフラグに論理値“１”が設定される。これに対して、発行された命令がライトバックを必要とする命令でない場合、第２カウンタ６０３で指定されるエントリのＷフラグに論理値“０”が設定される。
【００９３】
発行された命令が例外を発生する可能性を有する命令である場合には、第２カウンタ６０３で指定されるエントリのＥフラグに論理値“１”が設定される。発行された命令が例外を発生する可能性を有する命令でない場合には、第２カウンタ６０３で指定されるエントリのＥフラグに論理値“０”が設定される。
【００９４】
一例として、発行された命令が拡張命令（ＤＳＰ命令）である場合には、第２カウンタ６０３で指定されるエントリのＴフラグに論理値“１”が設定される。発行された命令がコア命令である場合には、コア命令の種類に応じて、Ｔフラグに設定される値は異なる。
【００９５】
また、リオーダバッファ４０６ａは、例外の発生を伴わないコンプリーションが発生すると、第２カウンタ６０３で指定されるエントリのＷＤＡＴＡフィールドに実行結果を書き込む。また、Ｖフラグに論理値“１”が設定される。
【００９６】
リオーダバッファ４０６ａは、第１カウンタ６０２で指定されるエントリのＲフラグが論理値“１”、且つＶフラグが論理値“１”のとき、ＷＤＡＴＡフィールドのデータをＲＦＮフィールドで示されるレジスタ番号に書き込む要求を、レジスタファイル４０８ａに対して出力する。この操作が、上述したコミット操作である。
【００９７】
リオーダバッファ４０６ａはコミット操作を行った次のサイクルで、そのエントリのＲフラグ、Ｖフラグ、及びＴフラグに論理値“０”を設定する。例外が発生した場合は、第１カウンタ６０２の値から降順に、第２カウンタ６０３のカウント値で終わるエントリを走査し、そのＲフラグを論理値“０”に設定する。この後、第２カウンタ６０３の値を第１カウンタ６０２に設定する。この結果、例外が発生した命令以降の命令の実行結果を破棄し、正確な例外処理を行うことが可能となる。
【００９８】
次に、図８に示すタイムアウト処理装置６０４について説明する。拡張命令（ＤＳＰ命令）については、機能の定義と実装はユーザに任せられている。拡張命令（ＤＳＰ命令）を実行しても、プロセッサコア４ａに実行結果が送信されなかった場合、後続の命令がその実行結果を参照する命令であった場合には、プロセッサは実行結果が伝達されるまで停止する。このような状況を「ハングアップ」という。
【００９９】
プログラムや回路のバグに起因してハングアップが生じるシステムは、信頼性が低い。特に、拡張命令の機能定義とそれを実行する拡張命令実行ユニット４０２ａにプロセッサの信頼性が依存することになり、システム全体の保証が難しくなる。
【０１００】
また、プログラムの開発や回路の開発段階において、バグによってハングアップが生じると、リセット以外にプロセッサの命令実行を再開させる手段がないために、デバッグに要する時間が増大する。更に、ハングアップ時の状況を、デバッガを用いて調べることができなくなるために、バグの解析に時間がかかる。
【０１０１】
そこで、図８に示すタイムアウト処理装置６０４は、一定の時間、命令の実行が停止した場合に、命令の実行結果を破棄することで、プロセッサの命令実行を再開する。即ち、タイムアウト処理装置６０４は、命令の実行サイクル数をカウントして、設定したサイクル数以内で命令が完了しない場合は、タイムアウト処理を発生させる。タイムアウト処理としては、例えば例外処理又は割込み処理が使用できる。タイムアウト処理として割込みを使用する例については後述する。
【０１０２】
拡張命令実行ユニット（ＤＳＰ）４０２ａで実行される拡張命令（ＤＳＰ命令）は、 拡張命令実行ユニット（ＤＳＰ）４０２ａからコンプリーション要求が送られてこないと、その命令の実行は完了しない。したがって、コンプリーション要求が送られてこないと、リオーダバッファ４０６ａのエントリが一杯になった時点で、命令の発行ができなくなる。これはプロセッサの停止を意味する。
【０１０３】
そこで、タイムアウト処理装置６０４は、第１カウンタ６０２で指定されるエントリを監視し、一定のサイクル期間、コンプリーションが発生しないと、例外を発生させる。例外を発生させる処理について以下に説明する。
【０１０４】
タイムアウト処理装置６０４は、第１カウンタ６０２のカウント値で指定されるエントリのＴフラグ及びＲフラグが論理値“１”、且つＶフラグが論理値“０”の場合に、クロックサイクル数のカウントを開始する。Ｖフラグの値が１になると、カウントを停止する。
【０１０５】
一例として、クロックサイクル数のカウント結果が４０９６サイクルを超えると、タイムアウト処理装置６０４は、第１カウンタ６０２が指定するエントリの命令を例外が発生したものとして処理する。
【０１０６】
尚、タイムアウト処理を発生させる基準となるクロックサイクル数は、前述の４０９６サイクルに限定されない。例えば、８１９２クロックサイクルや１６３８４サイクル等を取りえる。クロックサイクル数の変更は、後述するメタ回路記述を使用することで実現可能である。また、タイムアウト処理を発生させる基準となるクロックサイクル数として、レジスタファイル４０８ａの特定のレジスタに設定した値を使用することで、ユーザがプログラムで設定した値を使用することも実現可能である。
【０１０７】
このように、本発明の第１実施形態によれば、リオーダバッファ４０６ａを使用することにより、スコアボーディング手法を用いることなく、実行サイクル数や例外発生に関して自由度の高い命令拡張を可能とし、任意の実行サイクルを有する拡張命令（ＤＳＰ命令）を含む命令群を効率よく実行可能なパイプラインプロセッサを提供できる。よって、パイプラインプロセッサの複雑度が緩和されるため、高速動作に対応可能となり、信頼性の高いパイプラインプロセッサを構成できる。また、タイムアウト処理装置６０４がタイムアウト処理を発生可能であるので、パイプラインプロセッサの信頼性を更に高めることが可能となる。
【０１０８】
（第１実施形態の変形例）
本発明の第１実施形態の変形例として、図９に示すように、図１に示すパイプラインプロセッサを設計するプロセッサ設計方法を説明する。図９に示す各処理は、図１０に示すようなプロセッサ設計装置により実現される。図１０に示すプロセッサ設計装置は、処理装置１０１、記憶装置１０２、入力装置１０３、及び出力装置１０４等を備える。
【０１０９】
記憶装置１０２には、設計対象となるプロセッサの構成条件及び機能条件等を記述した回路記述である「コンフィギュレーション情報」と、コンフィギュレーション情報に応じて回路記述が追加又は削除される「メタ回路記述」とが格納されている。
【０１１０】
コンフィギュレーション情報及びメタ回路記述に基づいて、設計対象プロセッサの回路記述が生成される。このような手法で設計されたプロセッサを「コンフィギュラブル・プロセッサ」という。コンフィギュラブル・プロセッサは、コンフィギュレーション情報に従って、回路記述を自動的に追加又は削除するプロセッサ設計装置によって設計される。
【０１１１】
メタ回路記述を使用することで、ユーザの要望に従って回路記述を追加又は削除することが可能であるが、機能検証のコストが増加する。例えば、コンフィギュレーション情報として８つのパラメータが存在し、その個々のパラメータが１又は０の値をとる場合、２の８乗、即ち２５６パターンの異なる回路を設計可能である。このとき、機能検証が自動化されていたと仮定しても、２５６倍の計算時間を要する。
【０１１２】
計算時間を削減するには、パラメータ数の削減及びパラメータ間の依存関係の限定による、検証空間の削減が必要となる。回路構成及び動作が簡潔であるほど、検証空間の削減が可能となる。上述したスコアボーディング装置においては、回路構成及び動作が複雑であるため、機能検証に要する時間を削減するために、スコアボーディング装置の機能を限定するなどの限定が行われることが多い。
【０１１３】
これに対して、図１に示すパイプラインプロセッサは、スコアボーディング装置よりも回路構成及び動作が簡潔なリオーダバッファ４０６ａを使用しているため、機能検証に要する時間を十分に確保可能である。
【０１１４】
メタ回路記述は、図１１に示すように、ハードウエア記述言語（ＨＤＬ）、例えばＶｅｒｉｌｏｇ−ＨＤＬ等を基盤として、他の言語が埋め込まれている。埋め込まれている他の言語を「メタ制御言語」という。メタ制御言語は、行頭が記号“%”で始まる。図１１に示す例においては、記述“%if OP_USE_DSP”及び記述“%endif”がメタ制御言語に相当する。コンフィギュレーション情報は、図１２に示すように、メタ制御言語で記述されている。
【０１１５】
図１０に示す処理装置１０１は、前処理部１０１１及び論理合成部１０１２の各機能を実行する。前処理部１０１１は、記憶装置１０２からメタ回路記述及びコンフィギュレーション情報を読み出し、メタ制御言語を実行して、設計対象プロセッサの回路記述を作成する。論理合成部１０１２は、設計対象プロセッサの回路記述を論理合成して、設計対象プロセッサのネットリストを作成する。
【０１１６】
次に、図９に示すフローチャートを参照して、第１実施形態の変形例に係るプロセッサ設計方法を説明する。一例として、メタ回路記述とコンフィギュレーション情報から、拡張命令（ＤＳＰ命令）を使用しない場合に、図１に示す命令デコードユニット４０１ａの拡張命令（ＤＳＰ命令）に対する一部のデコード機能を自動的に追加又は削除する手順を説明する。この場合、図１１に示すようなメタ回路記述が用意される。
【０１１７】
尚、図１１に示す記述Ｄ１はＨＤＬにおける関数定義である。記述Ｄ２は、１６進数表記で“００１０”が入力された場合に２進数表記で“０００１”にデコードすることを示している。記述Ｄ２に続く２つの行も記述Ｄ２と同様の記述である。記述Ｄ３は、コンフィギュレーション情報により追加又は削除される記述である。
【０１１８】
記述Ｄ４は、default 項と呼ばれる記述である。default項は、case文においてdefault項以外に列挙された入力信号のいずれにも一致しない場合に、選択される。例えば図１１において、入力が“４３２１”であった場合に、default 項が選択され、デコード結果として“００００”が得られる。
【０１１９】
また、コンフィギュレーション情報における変数“%if OP_USE_DSP”が“true”に設定されている場合、拡張命令（ＤＳＰ命令）を使用することを意味している。コンフィギュレーション情報における変数“%if OP_USE_DSP”が“false”に設定されている場合、拡張命令（ＤＳＰ命令）を使用しないことを意味している。
【０１２０】
ステップＳ０１において、図１０に示す前処理部１０１１は、メタ回路記述格納領域１０２１に格納されたメタ回路記述と、コンフィギュレーション情報格納領域に格納されたコンフィギュレーション情報とを取得する。
【０１２１】
ステップＳ０２において、前処理部１０１１は、メタ制御言語を実行して、設計対象プロセッサの回路記述を作成する。具体的には、ステップＳ０１で取得されたコンフィギュレーション情報における変数“%if OP_USE_DSP”が、図１２に示すように“true”の場合には、図１１に示すメタ回路記述中のｉｆ構文の条件節“%if OP_USE_DSP”から“%endif”までの記述、即ち記述Ｄ３を含めた回路記述を作成する。この結果、図１３に示す回路記述が作成され、プロセッサ記述格納領域１０２３に格納される。
【０１２２】
一方、ステップＳ０１で取得されたコンフィギュレーション情報における変数“%if OP_USE_DSP”が、図１４に示すように“false”の場合には、図１１に示すメタ回路記述中のｉｆ構文の条件節“%if OP_USE_DSP”から“%endif”までの記述、即ち記述Ｄ３を除去した回路記述を作成する。この結果、図１５に示す回路記述が作成され、プロセッサ記述格納領域１０２３に格納される。
【０１２３】
ステップＳ０３において、図１０に示す論理合成部１０１２は、プロセッサ記述格納領域１０２３に格納された回路記述を論理合成して、設計対象プロセッサのネットリストを作成する。作成されたネットリストは、ネットリスト格納領域１０２４に格納される。
【０１２４】
更に、図１１に示すメタ回路記述に代えて図１６に示すメタ回路記述を使用すれば、図１に示す拡張命令実行ユニット（ＤＳＰ）４０２ａを使用しない場合に、リオーダバッファ４０６ａの書き込みポートＷ３等を自動的に追加又は削除できる。
【０１２５】
図１６に示す記述Ｄ５は、リオーダバッファ４０６ａの入出力信号を列挙したものであり、記述Ｄ５中の記述Ｄ５１は、リオーダバッファ４０６ａのポートＷ３に対応する回路記述である。
【０１２６】
図１６に示す記述Ｄ６は、図１に示す拡張命令実行ユニット（ＤＳＰ）４０２ａ、ＦＰＵ４０３、ＩＢＵ４０４、及びＬＳＵ４０５の各実行結果からいずれかを選択するセレクタを定義している。記述Ｄ６中の記述Ｄ６１は、拡張命令実行ユニット（ＤＳＰ）４０２ａの実行結果に対応する回路記述である。
【０１２７】
このように、第１実施形態の変形例に係るプロセッサ設計方法によれば、コンフィギュレーション情報に従って回路記述を自動的に作成することで、最適な回路記述を容易に得ることができる。したがって、スコアボーディング手法を用いることなく、実行サイクル数や例外発生に関して自由度の高い命令拡張を可能とし、任意の実行サイクルを有する拡張命令（ＤＳＰ命令）を含む命令群を効率よく実行可能なパイプラインプロセッサを、容易に設計可能となる。
【０１２８】
（第２実施形態）
本発明の第２実施形態に係るパイプラインプロセッサは、図１７に示すように、命令デコードユニット４０１ｂが、コア命令をデコードするコア命令デコーダ４０１１及び拡張命令の一部をデコードする拡張命令デコーダ４０１１の各機能を実行する点が図１と異なる。即ち、命令デコードユニット４０１ｂは、図１に示した命令デコードユニット４０１ａに、リオーダバッファ４０６ａ及びバイパスネットワーク４０９ａの制御に必要な拡張命令（ＤＳＰ命令）のデコード機能の一部を追加したものである。
【０１２９】
一般的に、命令デコーダはプロセッサの最高動作周波数を決定するクリティカルパスになりやすい。図１に示した拡張命令実行ユニット４０２ａが拡張命令（ＤＳＰ命令）のデコードを行う構成の場合、配線遅延に起因して最高動作周波数が低下（悪化）する。
【０１３０】
図１においては、拡張命令実行ユニット４０２ａが拡張命令（ＤＳＰ命令）のデコードを行っていた。このため、拡張命令実行ユニット４０２ａとプロセッサコア４ａとの間に、拡張命令がオペランドを使用するか否かを示す信号“dpmeDOpUse”を伝達するためのデータ配線４６３が設けられていた。
【０１３１】
また、図１においては、拡張命令実行ユニット４０２ａとプロセッサコア４ａとの間に、拡張命令（ＤＳＰ命令）に戻り値が存在するか否か、即ち（ＤＳＰ命令）がライトバックを必要とするか否かを示す信号“dpmeDReExPossibility”を伝達するためのデータ配線４６２が設けられていた。
【０１３２】
図１及び表１に示したように、拡張命令実行ユニット４０２ａが信号“dpmeDOpUse”及び信号“dpmeDReExPossibility”を１サイクル以内に生成する場合、チップ上において、拡張命令実行ユニット４０２ａ、命令デコードユニット４０１ａ、及びリオーダバッファ４０６ａが離間して配置されると、データ配線４６２及びデータ配線４６３がクリティカルパスになる可能性が高くなる。
【０１３３】
一方、図１７においては、命令デコードユニット４０１ｂが拡張命令（ＤＳＰ命令）の一部をデコードして信号“dpmeDOpUse”及び信号“dpmeDReExPossibility”を生成する。したがって、図１７及び表２に示すように、図１及び表１に示したデータ配線４６３及びデータ配線４６２を不要としている。
【表２】
2007034731.tif 000004
【０１３４】
命令デコードユニット４０１ｂが生成した信号“dpmeDOpUse”は、図１７に示すデータ配線４６４ｂを介してバイパスネットワーク４０９ｂに伝達される。命令デコードユニット４０１ｂが生成した信号“dpmeDReExPossibility”は、図１７に示すデータ配線４６１ｂを介してリオーダバッファ４０６ｂに伝達される。
【０１３５】
また、第１実施形態では、タイムアウト処理として例外を発生させる方法を採用しているが、第２実施形態では、タイムアウト処理として割込みを使用する。このため、図１７に示すレジスタファイル４０８ｂは、タイムアウト処理が発生したことを示すタイムアウト用レジスタ４０８１を備える。
【０１３６】
第１実施形態同様に図８に示すタイムアウト処理装置６０４及びリオーダバッファ４０６ｂは、タイムアウト検出後、すべてのエントリのＲフラグが０になると、タイムアウト用レジスタ４０８１に論理値“１”を書き込む。更に、データ配線４７０を介して、命令デコードユニット４０１ｂに対して割込み要求を行う。
【０１３７】
次に、リオーダバッファ４０６ｂの割込み処理の手順を説明する。リオーダバッファ４０６ｂはタイムアウトが発生すると、その命令のエントリのＶフラグに論理値“１”を設定して、その命令を完了させる。タイムアウトした命令の実行結果は、不正な値となる。したがって、そのエントリのＷＤＡＴＡフィールドは不正な値となるが、そのエントリのＷフラグが論理値“１”ならば、レジスタファイル４０８ｂへのライトバック処理を行う。また、命令デコードユニット４０１ｂは、リオーダバッファ４０６ｂからの割込み要求に応じて、タイムアウトが発生した命令と異なる命令に対して割込みを行う。
【０１３８】
このように、本発明の第２実施形態によれば、命令デコードユニット４０１ｂが拡張命令（ＤＳＰ命令）の一部をデコードすることにより、クリティカルパスの問題を解決できる。したがって、図１に示すパイプラインプロセッサと比較して、より高速な動作に対応可能となる。また、タイムアウト処理として割込みを発生させることにより、パイプラインプロセッサの信頼性を更に高めることが可能となる。
【０１３９】
（第２実施形態の変形例）
本発明の第２実施形態の変形例として、図１７に示すパイプラインプロセッサを設計するプロセッサ設計方法を説明する。プロセッサ設計方法の処理手順は図９と同様であるが、図１８に示すようなコンフィギュレーション情報及び図１９に示すようなメタ回路記述が使用される。
【０１４０】
図１８に示すコンフィギュレーション情報及び図１９に示すメタ回路記述を使用することにより、ユーザの命令定義から、適切な回路記述を生成することができる。図１８に示すコンフィギュレーション情報は、拡張命令の仕様に従って次の（１）〜（５）の情報を記述したものである。（１）拡張命令の命令コード。（２）オペランドＲｍを使用する命令であるか否か。（３）オペランドＲｎを使用する命令であるか否か。（４）ライトバックを行う命令であるか否か。（５）例外を発生する可能性があるか否か。
【０１４１】
図１８に示す例においては、拡張命令である“ADD”命令、“SDIV”命令、及び“SYNC”命令を定義した場合の例である。“ADD”命令は加算命令を意味し、“SDIV”命令はシフト除算命令を意味し、“SYNC”命令は同期命令を意味している。図１８に示すコンフィギュレーション情報及び図１９に示すメタ回路記述により、図２０に示す回路記述が生成される。
【０１４２】
（その他の実施形態）
上記のように、本発明は第１及び第２実施形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施形態、実施例及び運用技術が明らかとなろう。
【０１４３】
上述した実施形態においては、拡張命令実行ユニット４０２ａ及び４０２ｂとしてＤＳＰを使用し、拡張命令としてＤＳＰ命令を使用する一例を説明した。しかしながら、拡張命令実行ユニット４０２ａ及び４０２ｂとして例えばコプロセッサを使用し、拡張命令としてコプロセッサ命令を使用しても良い。
【０１４４】
上述した実施形態に係るパイプラインプロセッサをリコンフィギュラブル・プロセッサとして構成しても良い。「リコンフィギュラブル・プロセッサ」とは、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）に代表されるような手法を用いることで、プロセッサの機能を動的に変更可能なプロセッサを意味する。リコンフィギュラブル・プロセッサを設計するためには、上述した実施形態に係るプロセッサ設計方法と同様の手順が採用できる。
【０１４５】
このように本発明は、ここでは記載していない様々な実施形態等を包含するということを理解すべきである。したがって、本発明はこの開示から妥当な特許請求の範囲の発明特定事項によってのみ限定されるものである。
【図面の簡単な説明】
【０１４６】
【図１】本発明の第１実施形態に係るパイプラインプロセッサの構成例を示すブロック図である。
【図２】本発明の第１実施形態に係るパイプラインプロセッサにおける各ステージ、各処理内容、各実行対象命令、及び使用ユニットの関係を示す表である。
【図３】本発明の第１実施形態に係るパイプラインプロセッサにおける整数演算命令処理時の動作を示すタイムチャートである。
【図４】本発明の第１実施形態に係るパイプラインプロセッサにおけるロード命令処理時の動作を示すタイムチャートである。
【図５】本発明の第１実施形態に係るパイプラインプロセッサの比較例を示すタイムチャートである。
【図６】本発明の第１実施形態に係るパイプラインプロセッサにおける整数演算命令、拡張命令、及びロード命令処理時の動作を示すタイムチャートである。
【図７】本発明の第１実施形態に係る拡張命令実行ユニットが実行する拡張命令としてのＤＳＰ命令の命令フォーマットを示す模式図である。
【図８】本発明の第１実施形態に係るリオーダバッファ及びリオーダバッファコントローラの構成例を示すブロック図である。
【図９】本発明の第１実施形態の変形例に係るプロセッサ設計方法の一例を示すフローチャートである。
【図１０】本発明の第１実施形態の変形例に係るプロセッサ設計方法を実現するプロセッサ設計装置の一例を示すブロック図である。
【図１１】本発明の第１実施形態の変形例に係るプロセッサ設計方法に使用されるメタ回路記述の一例を示す模式図である。
【図１２】本発明の第１実施形態の変形例に係るプロセッサ設計方法に使用されるコンフィギュレーション情報の一例を示す模式図である。
【図１３】図１１に示すメタ回路記述及び図１２に示すコンフィギュレーション情報から生成される回路記述を示す模式図である。
【図１４】本発明の第１実施形態の変形例に係るプロセッサ設計方法に使用されるコンフィギュレーション情報の一例を示す模式図である。
【図１５】図１１に示すメタ回路記述及び図１４に示すコンフィギュレーション情報から生成される回路記述を示す模式図である。
【図１６】本発明の第１実施形態に係るリオーダバッファの設計に使用されるメタ回路記述の一例を示す模式図である。
【図１７】本発明の第２実施形態に係るパイプラインプロセッサの構成例を示すブロック図である。
【図１８】本発明の第２実施形態の変形例に係るプロセッサ設計方法に使用されるコンフィギュレーション情報の一例を示す模式図である。
【図１９】本発明の第２実施形態の変形例に係るプロセッサ設計方法に使用されるメタ回路記述の一例を示す模式図である。
【図２０】図１８に示すコンフィギュレーション情報及び図１９に示すメタ回路記述から生成される回路記述を示す模式図である。
【符号の説明】
【０１４７】
１ａ，１ｂ…命令実行ユニット
４ａ，４ｂ…プロセッサコア
４０…コア命令実行ユニット
４０１ａ，４０１ｂ…命令デコードユニット
４０２ａ，４０２ｂ…拡張命令実行ユニット
４０６ａ，４０６ｂ…リオーダバッファ
４０７ａ，４０７ｂ…リオーダバッファコントローラ
【図１】
2007034731.tif 000005
【図２】
2007034731.tif 000006
【図３】
2007034731.tif 000007
【図４】
2007034731.tif 000008
【図５】
2007034731.tif 000009
【図６】
2007034731.tif 000010
【図７】
2007034731.tif 000011
【図８】
2007034731.tif 000012
【図９】
2007034731.tif 000013
【図１０】
2007034731.tif 000014
【図１１】
2007034731.tif 000015
【図１２】
2007034731.tif 000016
【図１３】
2007034731.tif 000017
【図１４】
2007034731.tif 000018
【図１５】
2007034731.tif 000019
【図１６】
2007034731.tif 000020
【図１７】
2007034731.tif 000021
【図１８】
2007034731.tif 000022
【図１９】
2007034731.tif 000023
【図２０】
2007034731.tif 000024