以下、図面を用いて実施形態を説明する。
図1は、演算処理装置および演算処理装置の制御方法の一実施形態を示す。図1に示す演算処理装置OPD1は、デコーダ部1、実行制御部2、演算実行部3、メモリ制御部4、メモリ5、バイパス制御部6、複数の第1レジスタ7、複数の第2レジスタ8およびレジスタ管理部9を有する。
デコーダ部1は、命令バッファ等から受ける命令を解読し、解読した命令を実行制御部2に出力する。実行制御部2は、デコーダ部1により解読された命令を保持し、実行可能な命令を演算実行部3またはメモリ制御部4に順次に出力する。すなわち、実行制御部2は、命令の実行順序を変更するアウトオブオーダ実行を制御する。実行制御部2は、命令が演算の実行を示す演算命令の場合、演算命令を演算実行部3に出力し、命令がメモリ5からデータを読み出すメモリアクセス命令の場合、メモリアクセス命令をメモリ制御部4に出力する。
演算実行部3は、実行制御部2から受ける演算命令に基づいて、第1レジスタ7に格納されたデータを用いて演算を実行する。なお、演算に使用するデータが第2レジスタ8に格納されている場合、演算実行部3は、第1レジスタ7を介することなく、図1に太い破線の矢印で示すバイパス経路を介して第2レジスタ8からデータを受け、演算を実行することが可能である。第2レジスタ8からのデータのバイパスの可否は、バイパス制御部6により判断される。実行制御部2は、バイパス制御部6がバイパスの可能を判断した場合、演算命令をバイパスが可能なタイミングで演算実行部3に投入する。演算実行部3は、演算の実行より得られるデータを第2レジスタ8に出力する。
メモリ制御部4は、実行制御部2から受けるメモリアクセス命令(例えば、ロード命令)に基づいてメモリ5にアクセス要求を出力する。例えば、メモリアクセス命令で読み出すデータが、メモリ5における1つのアドレスが割り当てられた領域に記憶されている場合、メモリ制御部4は、メモリアクセス命令に基づいて1つのアクセス要求を生成する。そして、アクセス要求によりメモリ5から読み出されたデータは、第2レジスタ8に一度で格納される。
一方、メモリアクセス命令で読み出すデータが、メモリ5における複数のアドレスが割り当てられた領域に記憶されている場合、メモリ制御部4は、メモリアクセス命令に基づいて複数のアクセス要求を順次に生成する。そして、複数のアクセス要求によりメモリ5から読み出されるデータは、第2レジスタ8に順次に格納される。すなわち、メモリアクセス命令で読み出すデータが、メモリ5における複数のアドレスが割り当てられた領域に記憶されている場合、ロードデータのタイミングずれが発生する。
メモリアクセス命令に基づいて複数回に分けて読み出されるデータは、最後のアクセス要求に対応してメモリ5から読み出されたデータが第2レジスタ8に格納されたときに、第2レジスタ8内に揃う。換言すれば、メモリアクセス命令で読み出すデータが、複数のアクセス要求によりメモリ5から読み出される場合、第2レジスタ8を利用してデータを待ち合わせることができる。この結果、演算処理装置OPD1は、メモリアクセス命令に基づいてデータをメモリ5から複数回に分けて読み出す場合にも、新たな回路を設けることなくデータを待ち合わせることができ、回路規模の増加を抑制することができる。
メモリ5は、演算実行部3で使用するデータを記憶し、アクセス要求に基づいて記憶しているデータを出力する。メモリ5から読み出されるデータは、第2レジスタ8を経由して第1レジスタ7に転送される。
第1レジスタ7の各々は、演算実行部3が実行する演算に使用するデータを保持する。第2レジスタ8の各々は、演算に使用する第1レジスタ7に対応して割り当てられる。第1レジスタ7に対応して割り当てられた第2レジスタ8は、演算命令またはメモリアクセス命令の実行により得られるデータを第1レジスタ7に転送する前に一時的に保持する。
レジスタ管理部9は、第1レジスタ7と第2レジスタ8との割り当ての関係を保持する。実行制御部2は、レジスタ管理部9を参照することで、例えば、命令のオペランドにより指示される第1レジスタ7を割り当てた第2レジスタ8を認識する。例えば、デコーダ部1は、命令を解読した際に、第1レジスタ7を割り当てる第2レジスタ8を決定し、決定した割り当てを示す情報をレジスタ管理部9が有するテーブルに格納する。デコーダ部1が、演算に使用する第1レジスタ7に対応して第2レジスタ8を割り当てることで、第1レジスタ7が命令のオペランドで重複して指示され、依存関係が生じる場合にも、依存関係がないもとのとして演算を実行することができる。この結果、第2レジスタ8を使用しない場合に比べて、演算実行部3による演算の効率を向上することができる。
例えば、バイパス制御部6は、メモリ制御部4から受けるメモリ5のアクセスの状況を示す情報に基づいて、メモリ5から読み出され第2レジスタ8に格納されたデータを演算実行部3にバイパス可能か否かを判定する。また、バイパス制御部6は、実行制御部2から受ける演算実行部3による演算の実行状況を示す情報に基づいて、演算実行部3の演算により得られ第2レジスタ8に格納されたデータを演算実行部3にバイパス可能か否かを判定する。
バイパス制御部6は、メモリ制御部4がメモリアクセス命令に基づいてデータを1回でメモリ5から読み出す場合、データのバイパスが、メモリ5から第2レジスタ8に転送された後に可能になると判断する。この場合、メモリ5から読み出されるデータは、最初のデータでもあり、最後のデータでもある。そして、バイパス制御部6は、第2レジスタ8から演算実行部3へのデータを、最後のデータがメモリ5から第2レジスタ8に転送された後にバイパスするタイミングで、実行制御部2に演算命令を出力させる。
一方、バイパス制御部6は、メモリ制御部4がメモリアクセス命令に基づいてデータをメモリ5から複数回に分けて読み出す場合、データのバイパスが、メモリ5から第2レジスタ8に最後のデータが転送された後に可能になると判断する。そして、バイパス制御部6は、第2レジスタ8から演算実行部3へのデータのバイパスを、最後のデータがメモリ5から第2レジスタ8に転送された後に実行させるタイミングで、実行制御部2に演算命令を出力させる。
以上、図1に示す実施形態では、バイパス制御部6は、メモリ5から読み出されるデータが第2レジスタ8に全て揃った後に、データのバイパスが可能になったことを実行制御部2に通知する。これにより、メモリ5から第2レジスタ8へロードされるデータのタイミングずれが発生する場合にも、既存の第2レジスタ8を利用してデータを待ち合わせることができる。すなわち、新たな回路を設けることなくデータを待ち合わせることができ、演算処理装置OPD1の回路規模の増加を抑制することができる。
また、メモリアクセス命令に基づいてデータがメモリ5から1回で読み出されるか複数回に分けて読み出されるかに依存せず、バイパス制御部6は、メモリ5から第2レジスタ8に最後のデータが転送された後にバイパスが可能になると判断する。これにより、バイパス制御部6によるバイパスタイミングの制御を従来と同様に簡易にすることができる。この結果、メモリアクセス命令に基づいてデータがメモリ5から1回で読み出される場合と、複数回に分けて読み出される場合とでバイパスタイミングを変更する場合にも、演算処理装置OPD1の回路規模の増加を抑制することができる。さらに、回路規模の増加を抑制することで、演算処理装置OPD1の消費電力の増加を抑制することができ、演算処理装置OPD1の動作周波数を向上させることができる。
図2は、演算処理装置および演算処理装置の制御方法の別の実施形態を示す。図2の太い実線の矢印は、ロード命令の実行時における浮動小数点データの転送経路を示す。図2の太い破線の矢印は、ロード命令の実行時における浮動小数点データのバイパス経路を示す。なお、固定小数点データのバイパス経路の図示は省略する。
図2に示す演算処理装置OPD2は、命令キャッシュ10、命令バッファ12、デコーダ部14、レジスタ管理テーブル16、リザベーションステーション18、アドレス生成部20、データキャッシュ22およびバイパス制御部24を有する。また、演算処理装置OPD2は、浮動小数点演算器26、固定小数点演算器28、ロードレジスタ30、リザルトレジスタ32、34、リネーミングレジスタ部36、38、浮動小数点レジスタ部40、固定小数点レジスタ部42およびコミット制御部44を有する。
例えば、命令キャッシュ10は、二次命令キャッシュまたはメインメモリ等から転送される命令を格納する一次命令キャッシュである。命令バッファ12は、命令キャッシュ10から順次に転送される命令を保持し、保持した命令をデコーダ部14に順次に転送する。
デコーダ部14は、命令バッファ12から転送される命令を順次に解読し、解読した命令に含まれる情報INS(以下、命令情報INSと称される)を、リザベーションステーション18に格納する。例えば、命令情報INSは、命令の種別に応じて、リザベーションステーション18が有するリザベーションステーションRSFLT、RSFIX、RSMAのいずれかに格納される。
デコーダ部14は、解読した命令が浮動小数点レジスタ部40内の浮動小数点レジスタをデータの格納先に使用することを示す場合、使用する浮動小数点レジスタを、リネーミングレジスタ部36内のリネーミングレジスタのいずれかに割り当てる。例えば、デコーダ部14は、データの格納先に使用する浮動小数点レジスタのレジスタ番号RNと、割り当てるリネーミングレジスタを示すアドレスUBAとを、書き込み要求WEとともにレジスタ管理テーブル16およびコミット制御部44に出力する。例えば、アドレスUBAは、”Update Buffer Address”の略称である。リネーミングレジスタ部36が32個のリネーミングレジスタを有する場合、アドレスUBAは5ビットである。なお、アドレスUBAは、リザベーションステーション18にも出力される。浮動小数点レジスタ部40の例は、図3に示し、リネーミングレジスタ部36の例は、図4に示す。
同様に、デコーダ部14は、解読した命令が固定小数点レジスタ部42内の固定小数点レジスタをデータの格納先に使用することを示す場合、使用する固定小数点レジスタを、リネーミングレジスタ部38内のリネーミングレジスタのいずれかに割り当てる。例えば、デコーダ部14は、データの格納先に使用する固定小数点レジスタを示すレジスタ番号RNと、割り当てたリネーミングレジスタを示すアドレスUBAとを、書き込み要求WEとともにレジスタ管理テーブル16およびコミット制御部44に出力する。なお、デコーダ部14は、浮動小数点レジスタ部40と固定小数点レジスタとを識別可能なレジスタ番号RNおよびアドレスUBAを出力する。固定小数点レジスタ部42の例は、図3に示し、リネーミングレジスタ部38の例は、図4に示す。
レジスタ管理テーブル16は、浮動小数点レジスタ用のテーブルRMTBL1と固定小数点レジスタ用のテーブルRMTBL2とを有する。レジスタ管理テーブル16は、デコーダ部14から受けるレジスタ番号RN、アドレスUBAおよび書き込み要求WEに応じて、テーブルRMTBL1、RMTBL2のいずれかに格納された情報を更新する。レジスタ管理テーブル16は、リザベーションステーション18からの読み出し要求に応じて、テーブルRMTBL1、RMTBL2に記憶しているアドレスUBAおよびビット値Pをリザベーションステーション18に出力する。レジスタ管理テーブル16は、コミット制御部44からのリセット要求RST1に基づいて、テーブルRMTBL1、RMTBL2のいずれかに登録したアドレスUBAを無効化する。レジスタ管理テーブル16は、浮動小数点レジスタFRとリネーミングレジスタRNFRとの割り当ての関係を保持し、リザベーションステーションRSFLTにより参照されるレジスタ管理部の一例である。レジスタ管理テーブル16の例は、図5に示す。
リザベーションステーション18は、3つのリザベーションステーションRSFLT、RSFIX、RSMAを含む。リザベーションステーション18は、デコーダ部14が解読した命令(命令情報INS)を保持し、実行可能な命令を順次に出力する実行制御部の一例である。リザベーションステーションRSFLTは、浮動小数点データの演算用の命令に含まれる命令情報INSを保持する。リザベーションステーションRSFIXは、固定小数点データの演算用の命令に含まれる命令情報INSを保持する。また、リザベーションステーションRSMAは、メモリアクセス用の命令に含まれる命令情報INSを保持する。
リザベーションステーション18は、命令情報INSに基づいて、レジスタ管理テーブル16を参照して得られる浮動小数点レジスタ(または固定小数点レジスタ)を割り当てたリネーミングレジスタを示すアドレスUBAおよびビット値Pを保持する。保持したビット値Pは、命令の実行の完了時にコミット制御部44から受けるリセット要求RST2に基づいて無効化され、実行が完了した命令のアドレスUBAは、ビット値Pの無効化により破棄される。
なお、リザベーションステーション18は、データを格納する浮動小数点レジスタ(または固定小数点レジスタ)を割り当てたリネーミングレジスタのアドレスUBAを、命令情報INSとともにデコーダ部14から受ける。また、リザベーションステーション18は、データを読み出す浮動小数点レジスタ(または固定小数点レジスタ)を割り当てたリネーミングレジスタのアドレスUBAを、レジスタ管理テーブル16から読み出す。以下では、データを格納する浮動小数点レジスタ(または固定小数点レジスタ)は、ディスティネーションレジスタとも称され、データを読み出す浮動小数点レジスタ(または固定小数点レジスタ)は、ソースレジスタとも称される。
リザベーションステーション18は、レジスタ管理テーブル16から読み出したアドレスUBAおよびバイパス制御部24から出力されるバイパス可能信号BPEN(BPEN0−BPEN31)に基づいて、保持した命令の依存関係を判定する。そして、リザベーションステーション18は、保持した命令の中から実行可能な演算命令を浮動小数点演算器26または固定小数点演算器28に順次に投入する。あるいは、リザベーションステーション18は、保持した命令の中から実行可能なロード命令またはストア命令をアクセス要求MREQとしてアドレス生成部20に順次に投入する。ロード命令を示すアクセス要求MREQは、データキャッシュ22からデータを読み出すメモリアクセス命令の一例である。リザベーションステーション18は、命令の実行順序を変更するアウトオブオーダ実行を制御する実行制御部の一例である。
リザベーションステーション18は、浮動小数点演算器26の演算により得られるデータがリザルトレジスタ32またはリネーミングレジスタ部36からバイパス可能な場合、制御信号B1FPおよびアドレスB1FPUBAをバイパス制御部24に出力する。制御信号B1FPは、浮動小数点演算器26が演算を開始するタイミングを示す開始信号である。制御信号B1FPの出力タイミングは、バイパス制御部24のバイパス管理テーブルのフラグ領域FLG(図8)をセットするタイミングを示す。制御信号B1FPおよびアドレスB1FPUBAの先頭の”B1”は、制御信号B1FPおよびアドレスB1FPUBAが後述するB1サイクルで生成されることを示す。制御信号B1FPおよびアドレスB1FPUBAを受けた場合のバイパス制御部24の動作は、図11で説明される。
アドレス生成部20は、リザベーションステーション18から出力されるアクセス要求MREQに基づいて、データキャッシュ22に出力するアクセス要求MREQCを生成する。アドレス生成部20は、データキャッシュ22から浮動小数点データを読み出すアクセス要求MREQCとともに、制御信号ALDL、ALDHおよびアドレスALDUBAをバイパス制御部24に出力する。制御信号ALDL、ALDHは、データキャッシュ22からデータのロードを開始するタイミングを示す開始信号の一例であり、例えば、アクセス要求MREQCに同期して生成される。制御信号ALDLは下位4バイトのデータをロードする場合に生成され、制御信号ALDHは上位4バイトのデータをロードする場合に生成される。下位4バイトのデータおよび上位4バイトのデータは、データ群の一例である。
制御信号ALDL、ALDHおよびアドレスALDUBAの先頭の”A”は、制御信号ALDL、ALDHおよびアドレスALDUBAが後述するAサイクルで生成されることを示す。アドレスALDUBAの値は、バイパス可能なデータが転送されるリネーミングレジスタRNFR(図4)を示す。アドレスALDUBAのビット数は、64個のリネーミングレジスタRNFRを識別可能な6ビットである。
アクセス要求MREQに基づいて、データキャッシュ22内の1つのキャッシュラインからデータが読み出し可能な場合、アドレス生成部20は、1つのアクセス要求MREQCを生成する。一方、アクセス要求MREQに基づいて、データキャッシュ22内の2つのキャッシュラインに保持される場合、あるいは、データの一部がデータキャッシュ22に保持されていない場合(キャッシュミス)がある。この場合、アドレス生成部20は、1つのキャッシュラインからデータを読み出すアクセス要求MREQCを生成した後、時間間隔を置いて、他の1つのキャッシュラインからデータを読み出すアクセス要求MREQCを生成する。すなわち、データキャッシュ22から読み出すロードデータのタイミングずれが発生する。
例えば、アドレス生成部20は、1つのアクセス要求MREQCにより、リネーミングレジスタ部36へ転送する8バイトのデータをデータキャッシュ22から一度で読み出す場合、制御信号ALDL、ALDHの両方を生成する。アドレス生成部20は、2つのアクセス要求MREQCにより、リネーミングレジスタ部36へ転送する8バイトのデータを2つの4バイトのデータ毎にデータキャッシュ22から読み出す場合、制御信号ALDL、ALDHを互いに異なるタイミングで生成する。
例えば、アドレス生成部20は、8バイトのデータを4バイトずつデータキャッシュ22から読み出す場合、上位4バイトのデータを読み出した後、下位4バイトのデータを読み出す。このため、制御信号ALDLが出力されるタイミングで、上位4バイトのデータは、データキャッシュ22から出力されており、ロードレジスタ30およびリネーミングレジスタ部36に順次に転送される。制御信号ALDL、ALDHおよびアドレスALDUBAを受けた場合のバイパス制御部24の動作は、図9で説明する。アドレス生成部20は、リザベーションステーションRSFLTから受けるアクセス要求MREQ(メモリアクセス命令)に基づいてデータキャッシュ22にアクセス要求MREQCを出力するメモリ制御部の一例である。
例えば、データキャッシュ22は、二次データキャッシュまたはメインメモリ等から転送されるデータを格納する一次データキャッシュである。データキャッシュ22は、アドレス生成部20からのアクセス要求MREQCによりアクセスされる。データキャッシュ22は、アクセス要求MREQCに対応するデータを保持している場合(キャッシュヒット)、保持しているデータをロードレジスタ30に出力する。データキャッシュ22は、アクセス要求MREQCに対応するデータを保持していない場合(キャッシュミス)、二次データキャッシュまたはメインメモリ等からデータを読み出し、読み出したデータをデータキャッシュ22の記憶領域に格納する。
また、データキャッシュ22は、キャッシュヒット時に、データをロードレジスタ30に出力するサイクルで完了信号CEをバイパス制御部24に出力する。データキャッシュ22は、キャッシュミス時に、完了信号CEの出力を禁止する。
バイパス制御部24は、リネーミングレジスタ部36が有するリネーミングレジスタ毎に、浮動小数点データのバイパスが可能か否かを示す情報を保持するバイパス管理テーブルBPTBLを有する。バイパス制御部24は、バイパス管理テーブルBPTBLが保持する情報に基づいて、バイパス可能信号BPEN(BPEN0−BPEN31)を出力する。また、バイパス制御部24は、リネーミングレジスタ部38のリネーミングレジスタ毎に、固定小数点データのバイパスが可能か否かを示す情報を保持する図示しないバイパス管理テーブルを有する。
バイパス制御部24は、制御信号B1FP、ALDL、ALDHに基づいて、アドレスB1FPUBA、ALDUBAに対応するバイパス可能信号BPEN(BPEN0−BPEN31のいずれか)を有効レベルに設定する。バイパス制御部24は、制御信号WCMTに基づいて、アドレスWCMTUBAに対応するバイパス可能信号BPENを無効レベルに設定する。バイパス制御部24は、完了信号CEに基づいて、キャッシュミスしたアクセス命令MREQCに対応するアドレスALDUBAが示すバイパス可能信号BPENを無効レベルに設定する。バイパス制御部24の例は、図7および図8に示される。
浮動小数点演算器26は、リザベーションステーションRSFLTから転送される命令に基づいて演算を実行し、実行結果をリザルトレジスタ32に格納する。浮動小数点演算器26は、リザベーションステーションRSFLTから受ける演算の実行を示す演算命令に基づいて演算を実行する演算実行部の一例である。浮動小数点演算器26による演算は、浮動小数点レジスタ部40、リネーミングレジスタ部36、リザルトレジスタ32およびロードレジスタ30の少なくともいずれかに格納されたデータを用いて実行される。
固定小数点演算器28は、リザベーションステーションRSFIXから転送される命令に基づいて演算を実行し、実行結果をリザルトレジスタ34に格納する。固定小数点演算器28による演算は、固定小数点レジスタ部42、リネーミングレジスタ部38、リザルトレジスタ34およびロードレジスタ30の少なくともいずれかに格納されたデータを用いて実行される。
ロードレジスタ30は、ロード命令の実行に基づいてデータキャッシュ22から読み出されるデータを一時的に保持し、保持したデータをリネーミングレジスタ部36またはリネーミングレジスタ部38にデータ線LDDを介して転送する。ロードレジスタ30は、データキャッシュ22とリネーミングレジスタRNFR(図4)との間に配置され、データキャッシュ22から読み出されるデータをリネーミングレジスタRNFRに転送する前に一時的に保持する第3レジスタの一例である。
リザルトレジスタ32は、浮動小数点演算器26による演算結果を一時的に保持し、保持したデータをリネーミングレジスタ部36にデータ線EXD1を介して転送する。リザルトレジスタ34は、固定小数点演算器28による演算結果を一時的に保持し、保持したデータをリネーミングレジスタ部38にデータ線EXD2を介して転送する。
例えば、リネーミングレジスタ部36は、浮動小数点演算器26が実行した演算により得られた浮動小数点データまたはデータキャッシュから転送される浮動小数点データを一次的に保持する32個のリネーミングレジスタRNFR(図4)を有する。各リネーミングレジスタRNFRに保持されたデータは、命令の完了に基づいてコミット制御部44が出力する読み出し要求RCMT1に応答して、浮動小数点レジスタ部40に転送される。リネーミングレジスタRNFRは、浮動小数点レジスタFR(図3)に対応して割り当てられ、演算命令またはメモリアクセス命令の実行により得られるデータを浮動小数点レジスタFRに転送する前に一時的に保持する第2レジスタの一例である。
例えば、リネーミングレジスタ部38は、固定小数点演算器28が実行した演算により得られた固定小数点データまたはデータキャッシュから転送される固定小数点データを一次的に保持する32個のリネーミングレジスタRNR(図4)を有する。各リネーミングレジスタRNRに保持されたデータは、命令の完了に基づいてコミット制御部44が出力する読み出し要求RCMT2に応答して、固定小数点レジスタ部42に転送される。リネーミングレジスタ部36、38の例は、図4に示す。
例えば、浮動小数点レジスタ部40は、浮動小数点演算器26が実行する演算により得られた浮動小数点データまたはデータキャッシュ22から転送される浮動小数点データを保持する64個の浮動小数点レジスタFR(図3)を有する。浮動小数点レジスタFRは、浮動小数点演算器26が実行する演算に使用するデータを保持する第1レジスタの一例である。浮動小数点レジスタ部40は、命令の完了に基づいてコミット制御部44が出力する書き込み要求WCMT1に応答して、リネーミングレジスタ部36から転送されるデータを記憶する。
例えば、固定小数点レジスタ部42は、固定小数点演算器28が実行する演算により得られた固定小数点データまたはデータキャッシュ22から転送される固定小数点データを保持する32個の固定小数点レジスタR(図3)を有する。固定小数点レジスタ部42は、命令の完了に基づいてコミット制御部44が出力する書き込み要求WCMT2に応答して、リネーミングレジスタ部38から転送されるデータを記憶する。浮動小数点レジスタ部40および固定小数点レジスタ部42の例は、図3に示す。
コミット制御部44は、命令の実行の完了に基づいて、レジスタ管理テーブル16にリセット要求RST1を出力し、リザベーションステーション18にリセット要求RST2を出力する。また、コミット制御部44は、命令の実行の完了に基づいて、バイパス制御部24に制御信号WCMTおよびアドレスWCMTUBAを出力する。コミット制御部44は、デコーダ部14が命令の解読に基づいて出力するレジスタ番号RNおよびアドレスUBAを命令毎に保持する。コミット制御部44は、保持したアドレスUBAのうち、実行が完了した命令に対応するアドレスUBAが示すリネーミングレジスタRNFRからデータを読み出す読み出し要求RCMT1(またはRCMT2)を出力する。コミット制御部44は、保持したレジスタ番号RNのうち、実行が完了した命令に対応するレジスタ番号RNが示すディスティネーションレジスタにデータを書き込む書き込み要求WCMT1(またはWCMT2)を出力する。
図3は、図2に示す浮動小数点レジスタ部40および固定小数点レジスタ部42の例を示す。浮動小数点レジスタ部40は、倍精度(8バイト)の浮動小数点データを格納する64個の浮動小数点レジスタFR(FR0−FR63)を有する。また、浮動小数点レジスタ部40は、浮動小数点レジスタFRへのデータの書き込みを制御する書き込み制御部WCNT1および浮動小数点レジスタFRからのデータの読み出しを制御する読み出し制御部RCNT1を有する。
各浮動小数点レジスタFRは、8バイトのダブルデータDD(倍精度の浮動小数点データ)または4バイトの2つのシングルデータSD(単精度の浮動小数点データ)を記憶する8バイトの記憶領域を有している。すなわち、各浮動小数点レジスタFRは、2つの単精度(4バイト)の浮動小数点データを格納可能である。図3は、浮動小数点レジスタFR0にダブルデータDDが格納され、浮動小数点レジスタFR1に2つのシングルデータSDが格納された状態を示す。
1つの浮動小数点レジスタFRに2つのシングルデータSDを格納することで、1つの浮動小数点レジスタFRの番号により2つのシングルデータSDを使用することができる。これにより、2つの浮動小数点レジスタFRのそれぞれにシングルデータSDを格納する場合に比べて、単精度浮動小数点データの演算性能は向上する。以降、2つのシングルデータSDを格納する浮動小数点レジスタFRは、倍幅単精度浮動小数点レジスタとも称され、倍幅単精度浮動小数点レジスタに格納されるデータは、倍幅単精度浮動小数点データとも称される。
固定小数点レジスタ部42は、8バイトの固定小数点データを格納する32個の固定小数点レジスタR(R0−R31)を有する。また、固定小数点レジスタ部42は、固定小数点レジスタRへのデータの書き込みを制御する書き込み制御部WCNT2および固定小数点レジスタRからのデータの読み出しを制御する読み出し制御部RCNT2を有する。各固定小数点レジスタRは、8バイトのダブルデータDDを記憶する8バイトの記憶領域を有している。図3は、固定小数点レジスタR1にダブルデータDDが格納された状態を示す。
図4は、図2に示すリネーミングレジスタ部36、38の例を示す。リネーミングレジスタ部36は、図3に示す浮動小数点レジスタFRのいずれかが割り当てられる32個のリネーミングレジスタRNFR(RNFR0−RNFR31)、書き込み制御部WCNT3および読み出し制御部RCNT3を有する。各リネーミングレジスタRNFRは、2つの4バイトの記憶領域を含む8バイトの記憶領域を有する。書き込み制御部WCNT3は、演算命令の実行時にリザルトレジスタ32から転送されるデータEXD1またはロード命令の実行時にロードレジスタ30から転送されるデータLDDのいずれかを選択するセレクタSEL3を有する。例えば、書き込み制御部WCNT3によりデータが書き込まれるリネーミングレジスタRNFRは、レジスタ管理テーブル16に格納された情報に基づいてリザベーションステーション18が指定する。
セレクタSEL3は、各リネーミングレジスタRNFRの上位4バイトにデータを格納する場合、書き込み制御信号WE1Hおよび4バイト(すなわち、32ビット)のデータEXD1HをリネーミングレジスタRNFRに出力する。セレクタSEL3は、リネーミングレジスタRNFRの下位4バイトにデータを格納する場合、書き込み制御信号WE1Lおよび4バイト(すなわち、32ビット)のデータEXD1LをリネーミングレジスタRNFRに出力する。例えば、書き込み制御信号WE1H、WE1Lは、書き込み制御部WCNT3がデータEXD1、LDD(各々64ビット)の受信に基づいて生成する。
浮動小数点演算器26からリザルトレジスタ32に転送されるデータおよびリザルトレジスタ32からリネーミングレジスタ部36に転送されるデータEXD1は、8バイトである。このため、書き込み制御部WCNT3は、データEXD1を受けた場合、書き込み制御信号WE1H、WE1Lを生成し、8バイトのデータEXD1H、EXD1LをリネーミングレジスタRNFRに格納する。
ロード命令に基づいてロードレジスタ30から転送されるデータLDDが倍精度浮動小数点データ(8バイト)の場合、書き込み制御部WCNT3は、書き込み制御信号WE1H、WE1Lを生成する。これにより、8バイトのデータEXD1H、EXD1L(すなわち、倍精度浮動小数点データ)がリネーミングレジスタRNFRに格納される。ロード命令に基づいてロードレジスタ30から転送されるデータLDDが倍幅単精度浮動小数点データ(8バイト)の場合も、書き込み制御部WCNT3は、書き込み制御信号WE1H、WE1Lを生成する。
一方、ロード命令に基づいてロードレジスタ30から転送されるデータLDDが倍幅単精度浮動小数点データの上位4バイトの場合、書き込み制御部WCNT3は、書き込み制御信号WE1Hを生成する。これにより、4バイトのデータEXD1H(すなわち、倍幅単精度浮動小数点データの上位4バイト)がリネーミングレジスタRNFRの上位4バイトの領域に格納される。同様に、ロード命令に基づいてロードレジスタ30から転送されるデータLDDが倍幅単精度浮動小数点データの下位4バイトの場合、書き込み制御部WCNT3は、書き込み制御信号WE1Lを生成する。これにより、4バイトのデータEXD1L(すなわち、倍幅単精度浮動小数点データの下位4バイト)がリネーミングレジスタRNFRの下位4バイトの領域に格納される。
ここで、倍幅単精度浮動小数点データは、データキャッシュ22の1つのキャッシュラインに含まれる場合、一度で転送され、2つのキャッシュラインに跨って含まれる場合、上位4バイトと下位4バイトに分けて順次に転送される。
読み出し制御部RCNT3は、コミット制御部44から出力される読み出し要求RCMT1に基づいて、リネーミングレジスタRNFR0−RNFR31のいずれかからデータを読み出し、読み出したデータを浮動小数点レジスタ部40に出力する。例えば、読み出し制御部RCNT3によりデータが読み出されるリネーミングレジスタRNFRは、レジスタ管理テーブル16に格納された情報に基づいてリザベーションステーション18が指定する。
リネーミングレジスタ部38は、図3に示す固定小数点レジスタRのいずれかが割り当てられる32個のリネーミングレジスタRNR(RNR0−RNR31)、書き込み制御部WCNT4および読み出し制御部RCNT4を有する。各リネーミングレジスタRNRは、8バイトの記憶領域を有する。書き込み制御部WCNT4は、演算命令の実行時にリザルトレジスタ34から出力されるデータEXD2またはロード命令の実行時にロードレジスタ30から出力されるデータLDDのいずれかを選択するセレクタSEL4を有する。例えば、書き込み制御部WCNT4によりデータが書き込まれるリネーミングレジスタRNRは、リザベーションステーション18により指定される。
セレクタSEL4は、リネーミングレジスタRNRにデータを格納する場合、書き込み制御信号WE2および8バイト(64ビット)のデータEXD2をリネーミングレジスタRNRに出力する。例えば、書き込み制御信号WE2は、書き込み制御部WCNT4がデータEXD2、LDD(各々64ビット)の受信に基づいて生成する。読み出し制御部RCNT3は、コミット制御部44から出力される読み出し要求RCMT2に基づいて、リネーミングレジスタRNR0−RNR31のいずれかからデータを読み出し、読み出したデータを固定小数点レジスタ部42に出力する。例えば、読み出し制御部RCNT4によりデータが読み出されるリネーミングレジスタRNRは、レジスタ管理テーブル16に格納された情報に基づいてリザベーションステーション18が指定する。
図4では、セレクタSEL3の回路規模が、セレクタSEL4の回路規模より大きく見える。しかしながら、セレクタSEL3が出力するデータEXD1H、EXD1Lの幅の合計は64ビットであり、セレクタSEL4が出力するデータEXD2の幅と同じである。このため、上位4バイトのデータと下位4バイトのデータとがリネーミングレジスタRNFRにそれぞれ格納される場合の書き込み制御部WCNT3の回路規模を、書き込み制御部WCNT4の回路規模と同等にすることができる。例えば、書き込み制御部WCNT4に対して追加される書き込み制御部WCNT3の要素は、書き込み制御信号WE1H、WE1Lを生成する論理回路と、書き込み制御信号WE1Hの配線領域である。したがって、リネーミングレジスタ部36の回路規模は、既存のリネーミングレジスタ部およびリネーミングレジスタ部38の回路規模と同等である。
倍幅単精度浮動小数点データが上位4バイトと下位4バイトに分けてデータキャッシュ22から読み出される場合、下位4バイトのデータがリネーミングレジスタRNFRに格納された時点で、8バイトのデータがリネーミングレジスタRNFR内に揃う。すなわち、上位4バイトと下位4バイトに分けて転送される倍幅単精度浮動小数点データは、リネーミングレジスタ部36で待ち合わされ、結合される。図4に示すリネーミングレジスタ部36を用いない場合、上位4バイトと下位4バイトに分けて転送される倍幅単精度浮動小数点データを結合する新たなバッファ回路等が、例えば、データキャッシュ22の出力に接続される。上述したように、リネーミングレジスタ部36の回路規模は、既存のリネーミングレジスタ部の回路規模と同等である。このため、リネーミングレジスタ部36を有する演算処理装置OPD2は、上位4バイトと下位4バイトとのデータ群に分けて転送される倍幅単精度浮動小数点データを結合する新たなバッファ回路を有する演算処理装置に比べて、回路規模を削減することができる。
図5は、図2に示すレジスタ管理テーブル16の例を示す。レジスタ管理テーブル16のテーブルRMTBL1は、浮動小数点レジスタ部40の64個の浮動小数点レジスタFR0−FR63のそれぞれに対応してビット値PとアドレスUBAとを格納する64個の領域を有する。図5において、テーブルRMTBL1の左端に示す数字は、浮動小数点レジスタFRの番号(すなわち、レジスタ番号RN)を示す。
レジスタ管理テーブル16は、デコーダ部14からライト要求WEとともに浮動小数点レジスタFRを示すレジスタ番号RNおよびアドレスUBAを受けた場合、テーブルRMTBL1におけるレジスタ番号RNに対応する領域にアドレスUBAを格納する。アドレスUBAは、浮動小数点レジスタFRを割り当てるリネーミングレジスタRNFRを示す。そして、レジスタ管理テーブル16は、アドレスUBAを格納した領域のビット値Pをセットする。ビット値Pは、アドレスUBAが有効か無効かを示す。これにより、デコーダ部14が決定した浮動小数点レジスタFRとリネーミングレジスタRNFRとの対応付けが、テーブルRMTBL1に保持される。
レジスタ管理テーブル16は、デコーダ部14からテーブルRMTBL1を参照する読み出し要求を受けた場合、読み出し要求に含まれるレジスタ番号RNに対応する領域からビット値PとアドレスUBAとを読み出す。そして、レジスタ管理テーブル16は、読み出したビット値PとアドレスUBAとをリザベーションステーション18に出力する。
レジスタ管理テーブル16のテーブルRMTBL2は、固定小数点レジスタ部42の32個の固定小数点レジスタR0−R31のそれぞれに対応してビット値PとアドレスUBAとを格納する32個の領域を有する。図5において、テーブルRMTBL2の左端に示す数字は、固定小数点レジスタRの番号(すなわち、レジスタ番号RN)を示す。
レジスタ管理テーブル16は、テーブルRMTBL1と同様に、テーブルRMTBL2におけるレジスタ番号Rに対応する領域にアドレスUBAを格納し、ビット値Pをセットする。アドレスUBAは、固定小数点レジスタRを割り当てるリネーミングレジスタRNRを示す。これにより、デコーダ部14が決定した固定小数点レジスタRとリネーミングレジスタRNRとの対応付けが、テーブルRMTBL2に保持される。また、レジスタ管理テーブル16は、テーブルRMTBL1と同様に、リザベーションステーション18からの読み出し要求に含まれるレジスタ番号Rに対応する領域からビット値PとアドレスUBAとを読み出し、リザベーションステーション18に出力する。
図6は、図2に示すデータキャッシュ22からデータをロードする例を示す。例えば、データキャッシュ22は、128バイトの幅を有する64個のキャッシュラインを有する。図6に示す”70”および”80”等は、16進数であり、連続する2つのキャッシュラインの先頭アドレスの下位8ビットを示す。16進数のアドレスの右側に示す括弧内の数値は、アドレスを2進数で表した値である。以下では、図6に示す連続する2つのキャッシュラインにデータが続けて格納されているとする。
例えば、倍精度浮動小数点データ(8バイト)をロードするロード命令では、アドレスの下位3ビットが”000”に設定され、倍幅単精度浮動小数点データをロードするロード命令では、アドレスの下位2ビットが”00”に設定される。このため、データキャッシュ22からロードされる倍精度浮動小数点データは、キャッシュラインの境界を跨がない(図6(a))。データキャッシュ22からロードされる倍幅単精度浮動小数点データも、先頭アドレスの下位3ビットが”000”の場合、キャッシュラインの境界を跨がない(図6(b))。しかしながら、先頭アドレスの下位3ビットが”100”の場合、データキャッシュ22からロードされる倍幅単精度浮動小数点データは、キャッシュラインの境界を跨ぐ場合がある(図6(c))。なお、図6(d)は、先頭アドレスの下位3ビットが”100”の場合で、キャッシュラインの境界を跨がない例を示す。
倍幅単精度浮動小数点データをロードするロード命令において、キャッシュラインの境界を跨ぐ先頭アドレスが指定された場合、図2に示すアドレス生成部20は、キャッシュライン毎にアクセス要求MREQCを生成する。すなわち、倍幅単精度浮動小数点データがキャッシュラインの境界を跨いで、データキャッシュ22に格納されている場合、アドレス生成部20は、倍幅単精度浮動小数点データを2回に分けてデータキャッシュ22から読み出す。この実施形態では、図12で説明するように、ロード命令によりデータが2回に分けてデータキャッシュ22から読み出される場合にも、回路規模の増加を抑制して、正しいタイミングでデータを浮動小数点演算器26へバイパスさせることができる。
なお、倍幅単精度浮動小数点データの上位4バイトまたは下位4バイトがデータキャッシュ22に格納されていない場合(キャッシュミス)、データキャッシュ22は、二次データキャッシュ22またはメインメモリ等から128バイトのデータを読み出す。そして、データキャッシュ22は、読み出した128バイトのデータをキャッシュラインのいずれかに格納する。そして、アドレス生成部20は、データキャッシュ22にデータが格納された後に、倍幅単精度浮動小数点データの上位4バイトまたは下位4バイトを読み出すアクセス要求MREQCをデータキャッシュ22に発行する。
図7は、図2に示すバイパス制御部24に設けられるセット信号生成回路SSGENの例を示す。セット信号生成回路SSGENは、直列に接続された2つのラッチ回路FF1、FF2およびサイクル信号生成部ASGEN、MSGENを有する。ラッチ回路FF1、FF2は、クロック信号CLKに同期して動作し、アドレス生成部20からの制御信号ALDL、ALDH、ALDBUAをラッチする。
サイクル信号生成部ASGENは、制御信号ALDL、ALDHを受けるアンド回路AND1を有する。サイクル信号生成部ASGENは、制御信号ALDL、ALDHがともに有効レベル(例えば、ハイレベル)のときにセット信号ALDSETを有効レベルに設定する。有効レベルのセット信号ALDSETにより、図8に示すバイパステーブルBPTBLのフラグ領域FLGのいずれかがセットされる。セットされるフラグ領域FLGは、アドレスALDUBAで示される。セット信号ALDSETによるフラグ領域FLGのセットタイミングは、後述するAサイクルである。サイクル信号生成部ASGENは、制御信号ALDL、ALDHの少なくともいずれかが無効レベル(例えば、ロウレベル)のときにセット信号ALDSETを無効レベルに設定する。サイクル信号生成部ASGENは、複数の制御信号ALDL、ALDHの共通なタイミングでの受信に基づいてセット信号ALDSETを生成する第1生成回路の一例である。
サイクル信号生成部MSGENは、ラッチ回路FF2の出力Q1に接続されたインバータIV1と、ラッチ回路FF2の出力Q0およびインバータIV1の出力に接続されたアンド回路AND2とを有する。ラッチ回路FF2は、制御信号ALDLを2クロックサイクル遅らせた信号を出力Q0から出力し、制御信号ALDHを2クロックサイクル遅らせた信号を出力Q2から出力する。サイクル信号生成部MSGENは、2クロックサイクル遅らせた制御信号ALDL、ALDHのそれぞれが有効レベルと無効レベルのとき、セット信号MLDSETを有効レベルに設定する。有効レベルのセット信号MLDSETにより、図8に示すバイパステーブルBPTBLのフラグ領域FLGのいずれかがセットされる。セットされるフラグ領域FLGは、アドレスMLDUBAで示される。セット信号MLDSETによるフラグ領域FLGのセットタイミングは、後述するMサイクルである。
サイクル信号生成部MSGENは、2クロックサイクル遅らせた制御信号ALDLが無効レベルのとき、または2クロックサイクル遅らせた制御信号ALDHが有効レベルのとき、セット信号MLDSETを無効レベルに設定する。サイクル信号生成部MSGENは、最後の制御信号ALDLの受信から所定のサイクル後にセット信号MLDSETを生成する第2生成回路の一例である。
制御信号ALDL、ALDHがどちらも無効レベルの場合、アドレス生成部20はデータキャッシュ22にアクセス要求MREQCを出力していないため、セット信号ALDSET、MLDSETはどちらも有効レベルにならない。このため、フラグ領域FLGはセットされない。
制御信号ALDL、ALDHがどちらも有効レベルの場合、アドレス生成部20は、8バイトのデータをデータキャッシュ22から読み出すアクセス要求MREQCを出力している。この場合、セット信号ALDSETは有効レベルになり、セット信号MLDSETは無効レベルになり、フラグ領域FLGは、Aサイクルでセットされる。
制御信号ALDLが無効レベルで、制御信号ALDHが有効レベルの場合、アドレス生成部20は、倍幅単精度浮動小数点データの上位4バイトのデータをデータキャッシュ22から読み出すアクセス要求MREQCを出力している。この場合、セット信号ALDSET、MLDSETはどちらも有効レベルにならず、フラグ領域FLGはセットされない。
制御信号ALDLが有効レベルで、制御信号ALDHが無効レベルの場合、アドレス生成部20は、倍幅単精度浮動小数点データの下位4バイトのデータをデータキャッシュ22から読み出すアクセス要求MREQCを出力している。この時点で、倍幅単精度浮動小数点データの上位4バイトは、データキャッシュ22から既にロードされており、下位4バイトのデータがデータキャッシュ22から読み出されることで、8バイトの倍幅単精度浮動小数点データが揃う。この場合、セット信号ALDSETは無効レベルになり、セット信号MLDSETは有効レベルになり、フラグ領域FLGは、Mサイクルでセットされる。
この実施形態では、数ゲート規模のサイクル信号生成部ASGEN、MSGENにより、8バイトのデータがデータキャッシュ22から読み出されるか否かを判定し、セット信号ALDSETまたはセット信号MLDSETを生成することができる。
図8は、バイパス制御部24に設けられるバイパス管理テーブルBPTBLおよびテーブル制御回路TSCNTの例を示す。
バイパス管理テーブルBPTBLは、1ビットのラッチ回路を有する32個のフラグ領域FLG(FLG0−FLG31)を有する。バイパス管理テーブルBPTBLは、クロック信号CLKに同期して入力端子の論理をラッチして各フラグ領域FLGに保持し、保持した論理をバイパス可能信号BPEN(BPEN0−BPEN31)として出力する。
有効レベル(例えば、ハイレベル)のバイパス可能信号BPENは、図2に太い破線で示したバイパス経路を用いたデータのバイパスが可能であることを示す。すなわち、セット状態のフラグ領域FLGは、リネーミングレジスタRNFR、リザルトレジスタ32またはロードレジスタ30に格納されたデータを、浮動小数点レジスタ部40を介さずに浮動小数点演算器26にバイパス可能であることを示す。なお、バイパス制御部24は、固定小数点レジスタ部42に対応するリネーミングレジスタ部38に対応するバイパス管理テーブルを有するが、図示は省略する。
図2に示す演算処理装置OPD2では、8バイトの倍幅単精度浮動小数点データが4バイトずつデータキャッシュ22から読み出される場合、アドレス生成部20は、上位4バイトと下位4バイトのデータを読み出すアクセス要求MREQCを順次に生成する。これにより、下位4バイトのデータがデータキャッシュ22からの出力されたことに基づいて、8バイト全ての倍幅単精度浮動小数点データがデータキャッシュ22から読み出されたと判定することができる。したがって、バイパスが可能なことを示すフラグ領域FLGを、下位4バイトのデータの読み出しを示す制御信号ALDLに基づいてセットさせることが可能になる。この結果、4バイトのデータが互いに異なるタイミングで2回に分けて読み出される場合にも、1ビットのフラグ領域FLGによりバイパス動作を許可させることができ、バイパス管理テーブルBPTBLの回路規模の増加を抑制することができる。
テーブル制御回路TSCNTは、セット信号生成部ASSET、MSSET、B1SET、リセット信号生成部WRSTおよびテーブル制御部TBLCNTを有する。
セット信号生成部ASSETは、アドレスALDUBAを受けるデコーダADECと、デコーダADECの出力に接続され、制御信号ALDSETを受ける32個のアンド回路とを有する。デコーダADECは、アドレスALDUBAの値を解読し、アドレスALDUBAの値が示すフラグ領域FLGに対応する32個の出力端子のいずれかを有効レベルに設定する。そして、デコーダADECからの有効レベルと制御信号ALDSETとを受けるアンド回路が出力するハイレベルにより、対応するフラグ領域FLGがセットされる。セット信号生成部ASSETは、倍精度浮動小数点データまたは倍幅単精度浮動小数点データ(何れも8バイト)をロードする場合、フラグ領域FLGをセットする。
セット信号生成部MSSETは、デコーダADECの代わりにデコーダMDECを有し、アドレスALDUBAと制御信号ALDSETの代わりにアドレスMLDUBAと制御信号MLDSETを受けることを除き、セット信号生成部ASSETと同様である。セット信号生成部MSSETは、デコーダMDECからの有効レベルと制御信号MLDSETとを受けるアンド回路が出力するハイレベルにより、対応するフラグ領域FLGをセットする。セット信号生成部MSSETは、倍幅単精度浮動小数点データを4バイトずつ互いに異なるタイミングでロードする場合、フラグ領域FLGをセットする。
セット信号生成部B1SETは、デコーダADECの代わりにデコーダBDECを有し、アドレスALDUBAと制御信号ALDSETの代わりにアドレスB1FPUBAと制御信号B1FPを受けることを除き、セット信号生成部ASSETと同様である。セット信号生成部B1SETは、デコーダBDECからの有効レベルと制御信号B1FPとを受けるアンド回路が出力するハイレベルにより、対応するフラグ領域FLGをセットする。セット信号生成部B1SETは、浮動小数点データの演算命令による演算の開始を示す信号を後述するB1サイクルまで保持した制御信号B1FPに応答して、アドレスB1FPUBAが示すフラグ領域FLGをセットする。
リセット信号生成部WRSTは、アドレスWCMTUBAを受けるデコーダWDECと、デコーダWDECの出力に接続され、制御信号WCMTを受ける32個のナンド回路と、ナンド回路の出力に接続された32個のアンド回路とを有する。デコーダWDECは、デコーダADECと同様に、アドレスWCMTUBAの値を解読し、アドレスWCMTUBAの値が示すフラグ領域FLGに対応する32個の出力端子のいずれかを有効レベルに設定する。デコーダWDECからの有効レベルと制御信号WCMTとを受けるナンド回路は、ロウレベルを出力し、ナンド回路の出力に接続されたアンド回路の出力をロウレベルに設定する。これにより、対応するフラグ領域FLGがリセットされる。
なお、制御信号ALDSET、MLDSET、B1FPの出力期間は、1クロックサイクルである。このため、各セット信号生成部ASSET、MSSET、B1SETは、制御信号ALDSET、MLDSET、B1FPを受けるクロックサイクルを除き、アンド回路からロウレベルを出力する。一方、リセット信号生成部WRSTにおいてナンド回路の出力に接続されたアンド回路は、ハイレベルのバイパス可能信号BPENを受け、ナンド回路がロウレベルを出力するまでハイレベルを出力する。これにより、セット信号生成部ASSET、MSSET、B1SETによりセットされたフラグ領域FLGのセット状態は、ナンド回路がロウレベルを出力するまで維持される。
テーブル制御部TBLCNTは、セット信号生成部ASSET、MSSET、B1SETの出力およびリセット信号生成部WRSTの出力のオア論理を演算し、演算した論理をバイパステーブルBPTBLの入力端子に出力する複数のオア回路を有する。
図7および図8に示す回路に基づいて、バイパス制御部24は、アドレス生成部20からの制御信号ALDL、ALDHの論理に応じたタイミングで、制御信号ALDBUAの論理が示すバイパス管理テーブルBPTBLのフラグ領域FLG(図8)をセットする。また、バイパス制御部24は、リザベーションステーション18からの制御信号B1FPのタイミングで、アドレスB1FPUBAの論理が示すバイパス管理テーブルBPTBLのフラグ領域FLGをセットする。
バイパス制御部24は、セットしたフラグ領域FLGに対応するバイパス可能信号BPEN(BPEN0−BPEN31のいずれか)を有効レベルに設定する。バイパス制御部24は、コミット制御部44からの制御信号WCMTのタイミングで、アドレスWCMTUBAの論理が示すバイパス管理テーブルBPTBLのフラグ領域FLGをリセットする。バイパス制御部24は、リセットしたフラグ領域FLGに対応するバイパス可能信号BPEN(BPEN0−BPEN31のいずれか)を無効レベルに設定する。テーブル制御部TBLCNTおよびバイパス管理テーブルBPTBLは、セット信号ALDSETまたはセット信号MLDSETに基づいて、バイパス可能信号BPENを出力する出力回路の一例である。
なお、バイパス制御部24は、バイパス管理テーブルBPTBLのフラグ領域FLGをセットした後、データキャッシュ22から完了信号CEを受けない場合、セットしたフラグ領域FLGをリセットする。データキャッシュ22によるキャッシュミス時、データキャッシュ22からのデータは、ロードレジスタ30およびリネーミングレジスタ部36に所望のサイクルで転送されない。この場合、ロードレジスタ30およびリネーミングレジスタ部36は、浮動小数点演算器26へバイパスするデータを保持しないため、バイパスを禁止するために、フラグ領域FLGがリセットされる。完了信号CEに基づいてフラグ領域FLGをリセットする論理は、例えば、リセット信号生成部WRST内に設けられる。例えば、リセット信号生成部WRSTは、完了信号CEに対応してリセットするフラグ領域FLGを示すアドレスとアドレスWCMTUBAとのオア論理をデコーダWDECに供給するオア回路を有する。また、リセット信号生成部WRSTは、制御信号WCMTと完了信号CEとのオア論理を各ナンド回路に供給するオア回路を有する。
図9は、図7および図8に示すバイパス制御部24の動作の例を示す。図2に示すアドレス生成部20は、8バイトの倍精度浮動小数点データまたは8バイトの倍幅単精度浮動小数点データを1回のアクセス要求MREQCでデータキャッシュ22から読み出す場合、制御信号ALDL、ALDHを同時に生成する。また、アドレス生成部20は、倍幅単精度浮動小数点データを2回のアクセス要求MREQCでデータキャッシュ22から4バイトずつ読み出す場合、制御信号ALDH、ALDLを順次に生成する。この場合、8バイトの倍幅単精度浮動小数点データのうち、上位4バイトがデータキャッシュ22から読み出された後、下位4バイトがデータキャッシュ22から読み出される。
例えば、動作OP10において、バイパス制御部24は、制御信号ALDLの生成の有無を判定する。制御信号ALDLが生成されない場合、8バイトの倍精度浮動小数点データまたは8バイトの倍幅単精度浮動小数点データは、データキャッシュ22から読み出されていない。バイパス制御部24は、動作OP12において、リネーミングレジスタRNFRの下位4バイトに対応する制御信号ALDLが生成されない場合、バイパステーブルBPTBLを更新しない。
制御信号ALDLが生成された場合、8バイトの倍精度浮動小数点データまたは8バイトの倍幅単精度浮動小数点データが一度にデータキャッシュ22から読み出される。バイパス制御部24は、動作OP14において、制御信号ALDLとともに制御信号ALDHが生成されたか否かを判定する。
制御信号ALDLとともに制御信号ALDHが生成された場合、8バイトの倍精度浮動小数点データまたは8バイトの倍幅単精度浮動小数点データがデータキャッシュ22から1回のアクセス要求MREQCで読み出される。すなわち、8バイトのデータの上位4バイトと下位4バイトとがデータキャッシュ22からロードされるタイミングのずれは発生しない。この場合、バイパス制御部24は、動作OP16において、制御信号ALDL、ALDHとともに受けるアドレスMALDUBAにより示されるバイパステーブルBPTBLのフラグ領域FLGをセットする。
制御信号ALDLとともに制御信号ALDHが生成されない場合、8バイトの倍幅単精度浮動小数点データは、2回に分けてデータキャッシュ22から読み出される。すなわち、8バイトのデータの上位4バイトと下位4バイトとがデータキャッシュ22からロードされるタイミングのずれが発生する。この場合、バイパス制御部24は、動作OP18において、制御信号ALDLの受信から2クロックサイクル後にセット信号MLDSETとアドレスMLDUBAを生成する。この後、バイパス制御部24は、動作OP16において、セット信号MLDSETに同期してアドレスMLDUBAにより示されるバイパステーブルBPTBLのフラグ領域FLGをセットする。セット信号MLDSETに同期するフラグ領域FLGのセットにより、2回に分けてデータキャッシュ22から読み出された倍幅単精度浮動小数点データは、図12に示すように、リネーミングレジスタRNFRを介してバイパス可能になる。図12で説明するように、リネーミングレジスタRNFRからのデータの読み出しは、2クロックサイクル掛かる。このため、バイパス制御部24は、セット信号MLDSETを制御信号ALDLから2クロックサイクル後に生成することで、リネーミングレジスタRNFRからバイパスされたデータを用いた演算の開始を遅らせる。
図10は、図2に示す演算処理装置OPD2の動作の例を示す。図10では、先行する浮動小数点データのロード命令の実行後に複数の浮動小数点データの演算命令A、B、C、Dが実行される。図10のロード命令は、倍精度浮動小数点データまたは倍幅単精度浮動小数点データがデータキャッシュ22の1つのキャッシュラインから読み出される例を示す。また、演算命令A、B、C、Dは、ロード命令によりロードされたデータが浮動小数点レジスタFRに格納される前に、ロードレジスタ30またはリネーミングレジスタRNFRからバイパスさせるデータを使用して実行される。
図10において、ロード命令のD、DT、P、PT、B1、B2、A、T、M、B、R、RTサイクルは、以下に示すように、ロード命令の実行時のパイプラインのステージを示す。
(a)D(Decode):デコーダ部14が命令を解読し、解読した命令情報INSをメモリアクセス命令用のリザベーションステーションRSMAへ転送する。
(b)DT(Decode Transfer):リザベーションステーションRSMAが、Dサイクルで出力された命令情報INSを保持する。
(c)P(Priority):リザベーションステーションRSMAが、アドレス生成部20に出力する命令を決定する。
(d)PT(Priority Transfer):リザベーションステーションRSMAが、Pサイクルで決定した命令をアドレス生成部20に出力する。
(e)B1、B2(Buffer):アドレス生成部20が、データキャッシュ22等にアクセスするアドレスを生成するためのデータ(ソースレジスタ)を決定する。
(f)A(Address):アドレス生成部20が、データキャッシュ22等にアクセスするアドレスを計算する。
(g)T(Tag):データキャッシュ22がタグ領域にアクセスする。
(h)M(Match):データキャッシュ22がタグ領域から読み出したアドレスをアドレス生成部20から受けたアドレスと比較し、キャッシュヒット、キャッシュミスを判定する。
(i)B(Buffer):データキャッシュ22内で読み出したデータをバッファする。
(j)R(Result):データキャッシュ22へのアクセスを完了し、読み出したデータをロードレジスタ30に転送する。
(k)RT(Result):Rサイクルでロードレジスタ30に転送されたデータをリネーミングレジスタ部36に転送する。
図10において、演算命令のD、DT、P、PT、B1、B2、X1、X2、X3、X4サイクルは、以下に示すように、演算命令の実行時のパイプラインのステージを示す。
(l)D(Decode):デコーダ部14が命令を解読し、解読した命令情報INSを浮動小数点データの演算用のリザベーションステーションRSFLTへ転送する。
(m)DT(Decode Transfer):リザベーションステーションRSFLTが、Dサイクルで出力された命令情報INSを保持する。
(n)P(Priority):リザベーションステーションRSFLTが、浮動小数点演算器26に投入する命令を決定する。
(o)PT(Priority Transfer):リザベーションステーションRSFLTが、Pサイクルで決定した命令を浮動小数点演算器26に投入する。
(p)B1、B2(Buffer):浮動小数点演算器26が、演算に必要なデータ(ソースレジスタ)を決定する。
(q)X1、X2、X3、X4(Execute 1-4):浮動小数点演算器26が、命令を実行する。浮動小数点データの演算は、X1−X4の4サイクルで実行される。X4サイクルの次のサイクルで、演算により得られたデータがリネーミングレジスタ部36へ格納される。
図10のロード命令は、キャッシュヒット時の動作を示す。キャッシュミス時には、D、DT、P、PT、B1、B2、A、T、Mサイクルが、1番目のクロックサイクルより手前のクロックサイクルで実行される。そして、アドレス生成部20およびデータキャッシュ22は、7番目のクロックサイクルからA、T、Mサイクルを再度実行し、キャッシュヒット時に、Mサイクルに続けてB、R、RTサイクルを再度実行する。すなわち、ロード命令におけるキャッシュミス時の動作は、図10からD、DT、P、PT、B1、B2サイクルが削除される。
また、図2に示す演算処理装置OPD2は、デコーダ部14が解読した命令の順に限定せず、実行可能な命令を実行するアウトオブオーダ実行を行う。このため、演算命令A、B、C、Dにおいて、DTサイクルの実行からPサイクルの実行までのクロックサイクル数は、リザベーションステーションRSFLTによる実行順の判定結果に依存して変化する。例えば、演算命令AのD、DTサイクルは、1番目のクロックサイクルより手前のクロックサイクルで実行される。
ロード命令において、アドレス生成部20は、Aサイクルでデータキャッシュへの1回のアクセスでデータを読み出せると判断し、データキャッシュ22に図2に示すアクセス要求MREQCを発行する。また、アドレス生成部20は、アクセス要求MREQCとともに、バイパス制御部24に制御信号ALDL、ALDHおよびアドレスALDUBAを出力する(図10(a))。
バイパス制御部24は、制御信号ALDL、ALDHに応答してセット信号ALDSETを生成し、アドレスALDUBAが示すフラグ領域FLGをセットすることでバイパス可能信号BPENを有効レベルに設定する(図10(b))。
データキャッシュ22は、ロード命令のRサイクルにおいて読み出しサイクルを完了し、読み出した8バイトのデータをロードレジスタ30に転送する(図10(c))。ロードレジスタ30に転送されたデータは、RTサイクルでリネーミングレジスタ部36に転送される。リネーミングレジスタ部36の書き込み制御部WCNT3(図4)は、ロードレジスタ30から転送される8バイトのデータに基づいて、共通なタイミングで書き込み制御信号WE1H、WE1Lを生成する(図10(d))。そして、書き込み制御部WCNT3は、リネーミングレジスタRNFRのいずれかに8バイトのデータを格納する(図10(e))。例えば、書き込み制御部WCNT3は、リザベーションステーション18から受ける有効レベルに設定されたバイパス可能信号BPENを示す情報に基づいてデータを格納するリネーミングレジスタRNFRを決定する。なお、例えば、リネーミングレジスタRNFRからのデータの読み出しは、2クロックサイクル掛かるため、リネーミングレジスタRNFRからのデータのバイパスは、14番目のクロックサイクルから可能になる。
リザベーションステーションRSFLTは、リザベーションステーションRSMAがB1、B2サイクルでソースレジスタを決定した後、8番目のクロックサイクルで、バイパスが可能なことを判断する。そして、リザベーションステーションRSFLTは、9番目のクロックサイクルで演算命令AのPサイクルを実行し、演算命令Aを浮動小数点演算器26に投入する(図10(f))。
浮動小数点演算器26は、演算命令AのB2サイクルでロードレジスタ30からバイパスされるデータを選択し、選択したデータをX1サイクルで使用する(図10(g))。図10において、太い破線で示す矢印は、データがロードレジスタ30またはリネーミングレジスタRNFRから浮動小数点演算器26にバイパスされることを示す。浮動小数点演算器26は、演算命令BのB1サイクルでロードレジスタ30からバイパスされるデータを選択し、選択したデータをX1サイクルで使用する(図10(h))。
また、浮動小数点演算器26は、演算命令CのB2サイクルでリネーミングレジスタRNFRからバイパスされるデータを選択し、選択したデータをX1サイクルで使用する(図10(i))。浮動小数点演算器26は、演算命令DのB2サイクルでリネーミングレジスタRNFRからバイパスされるデータを選択し、選択したデータをX1サイクルで使用する(図10(j))。
図11は、図2に示す演算処理装置OPD2の動作の別の例を示す。図10と同一または同様の動作については、詳細な説明は省略する。図11では、先行する浮動小数点データの演算命令の実行後に複数の浮動小数点データの演算命令A、B、C、Dが実行される。図11において先行する演算命令では、倍精度浮動小数点データ、倍幅単精度浮動小数点データまたは単精度浮動小数点データが使用される。また、演算命令A、B、C、Dは、先行する演算命令により得られたデータが浮動小数点レジスタFRに格納される前に、リザルトレジスタ32またはリネーミングレジスタRNFRからバイパスさせるデータを使用して実行される。
リザベーションステーションRSFLTは、先行する演算命令のB1サイクルで、演算命令A、B、C、Dで使用するデータをリザルトレジスタ32またはリネーミングレジスタRNFRからバイパス可能と判断する。そして、リザベーションステーションRSFLTは、制御信号B1FPおよびアドレスB1FPUBAを出力する(図11(a))。
バイパス制御部24は、制御信号B1FPに応答してアドレスB1FPUBAが示すフラグ領域FLGをセットすることでバイパス可能信号BPENを有効レベルに設定する(図11(b))。
浮動小数点演算器26は、先行する演算命令をX1からX4サイクルで実行し、演算結果をX4サイクルでリザルトレジスタ32に転送する(図11(c))。リザルトレジスタ32に転送されたデータは、次のクロックサイクルでリネーミングレジスタRNFRに転送される(図11(d))。
リザベーションステーションRSFLTは、7番目のクロックサイクルで演算命令AのPサイクルを実行し、演算命令Aを浮動小数点演算器26に投入する(図11(e))。浮動小数点演算器26は、演算命令AのX1サイクルでリザルトレジスタ32からバイパスされるデータを選択し、選択したデータを用いてX1サイクルから演算を開始する(図11(f))。浮動小数点演算器26は、演算命令BのB2サイクルでリザルトレジスタ32からバイパスされるデータを選択し、選択したデータをX1サイクルで使用する(図11(g))。浮動小数点演算器26は、演算命令CのB1サイクルでリザルトレジスタ32からバイパスされるデータを選択し、選択したデータをX1サイクルで使用する(図11(h))。浮動小数点演算器26は、演算命令DのB2サイクルでリネーミングレジスタRNFRからバイパスされるデータを選択し、選択したデータをX1サイクルで使用する(図11(i))。なお、図10で説明したように、リネーミングレジスタRNFRからのデータの読み出しは、2クロックサイクル掛かるため、リネーミングレジスタRNFRからのデータのバイパスは、13番目のクロックサイクルから可能になる。
図12は、図2に示す演算処理装置OPD2の動作のさらなる別の例を示す。図10と同一または同様の動作については、詳細な説明は省略する。図12では、先行する倍幅単精度浮動小数点データのロード命令において、8バイトのデータがデータキャッシュ22の2つのキャッシュラインを跨いで保持されている。また、演算命令A、B、C、Dは、倍幅単精度浮動小数点データの演算を実行する命令であり、先行するロード命令により得られたデータが浮動小数点レジスタFRに格納される前にリネーミングレジスタRNFRからバイパスさせるデータを使用して実行される。
ロード命令で読み出される倍幅単精度浮動小数点データが2つのキャッシュラインから読み出される場合、A、T、M、B、R、RTサイクルが間隔を置いて2回実行される(図12(a)、(b))。図2に示すアドレス生成部20は、最初の読み出しサイクルで倍幅単精度浮動小数点データのうち上位4バイトを読み出し、2番目の読み出しサイクルで倍幅単精度浮動小数点データのうち下位4バイトを読み出す。
アドレス生成部20は、上位4バイトのデータをデータキャッシュ22から読み出すための最初のAサイクルにおいて、バイパス制御部24に制御信号ALDHおよびアドレスALDUBAを出力する(図12(c))。1番目のクロックサイクルにおいて、バイパス制御部24のセット信号生成回路SSGEN(図7)は、無効レベルの制御信号ALDLと有効レベルの制御信号ALDHとを受け、セット信号ASDSETを無効レベルに維持する(図12(d))。このため、バイパス管理テーブルBPTBLにおいて、アドレスALDUBAが示すフラグ領域FLGはセットされず、バイパス可能信号BPENは出力されない(図12(e))。
セット信号生成回路SSGENは、アドレスALDUBAを2クロックサイクル遅らせてアドレスMLDUBAを出力する(図12(f))。しかし、セット信号MLDSETが無効レベルに維持されるため、アドレスALDUBAが示すフラグ領域FLGはセットされず、バイパス可能信号BPENは出力されない(図12(g))。
データキャッシュ22は、最初のアクセスサイクルのRサイクルにおいて読み出した上位4バイトのデータをロードレジスタ30に転送する(図12(h))。リネーミングレジスタ部36の書き込み制御部WCNT3(図4)は、ロードレジスタ30から転送される上位4バイトのデータに基づいて、書き込み制御信号WE1Hを生成する(図12(i))。そして、書き込み制御部WCNT3は、リネーミングレジスタRNFRのいずれかに上位4バイトのデータを格納する(図12(j))。例えば、書き込み制御部WCNT3は、リザベーションステーション18から受ける有効レベルに設定されたバイパス可能信号BPENを示す情報に基づいてデータを格納するリネーミングレジスタRNFRを決定する。
アドレス生成部20は、下位4バイトのデータをデータキャッシュ22から読み出すための最初のAサイクルにおいて、バイパス制御部24に制御信号ALDLおよびアドレスALDUBAを出力する(図12(k))。9番目のクロックサイクルにおいて、バイパス制御部24のセット信号生成回路SSGENは、有効レベルの制御信号ALDLと無効レベルの制御信号ALDHとを受け、セット信号ASDSETを無効レベルに維持する(図12(l))。このため、バイパス管理テーブルBPTBLにおいて、アドレスALDUBAが示すフラグ領域FLGはセットされず、バイパス可能信号BPENは出力されない(図12(m))。
一方、セット信号生成回路SSGEN(図7)におけるサイクル信号生成部MSGENは、有効レベルの制御信号ALDLと無効レベルの制御信号ALDHと2クロックサイクル遅らせた信号を11番目のクロックサイクルに受ける。そして、サイクル信号生成部MSGENは、セット信号MLDSETを有効レベルに設定する(図12(n))。また、セット信号生成回路SSGENは、アドレスALDUBAを2クロックサイクル遅らせたアドレスMLDUBAを出力する(図12(o))。これにより、バイパス管理テーブルBPTBLにおいて、アドレスALDUBAが示すフラグ領域FLGがセットされ、バイパス可能信号BPENが出力される(図12(p))。
データキャッシュ22は、2番目のアクセスサイクルのRサイクルにおいて読み出した下位4バイトのデータをロードレジスタ30に転送する(図12(q))。リネーミングレジスタ部36の書き込み制御部WCNT3(図4)は、ロードレジスタ30から転送される下位4バイトのデータに基づいて、書き込み制御信号WE1Lを生成する(図12(r))。そして、書き込み制御部WCNT3は、リネーミングレジスタRNFRのいずれかに下位4バイトのデータを格納する(図12(s))。例えば、書き込み制御部WCNT3は、リザベーションステーション18から受ける有効レベルに設定されたバイパス可能信号BPENを示す情報に基づいてデータを格納するリネーミングレジスタRNFRを決定する。
これにより、8バイトの倍幅単精度浮動小数点データがリネーミングレジスタRNFR内に揃い、リネーミングレジスタRNFRからの倍幅単精度浮動小数点データのバイパスが可能になる。なお、8バイトの倍幅単精度浮動小数点データが2つのキャッシュラインから読み出される場合、ロードレジスタ30は、上位4バイトのデータまたは下位4バイトのデータを互いに異なるタイミングで保持する。このため、ロードレジスタ30は、倍幅単精度浮動小数点データのバイパスには使用されない。換言すれば、バイパス制御部24は、バイパス可能信号BPENの出力サイクルを図10および図11に比べて遅らせ、ロードレジスタ30から浮動小数点演算器26へのデータのバイパスを禁止する。データが揃っていないロードレジスタ30からのバイパスを禁止することで、演算処理装置OPD2の誤動作を抑制することができる。
浮動小数点演算器26は、演算命令A、B、C、Dのそれぞれにおいて、B2サイクルでリネーミングレジスタRNFRからバイパスされるデータを選択し、選択したデータをX1サイクルで使用する(図12(t)、(u)、(v)、(w))。
図12に示すように、倍幅単精度浮動小数点データが2つのキャッシュラインから読み出される場合、バイパス制御部24は、上位4バイトのデータより後に読み出される下位4バイトのデータの読み出しを待つ。さらに、バイパス制御部24は、下位4バイトのデータの読み出しの開始に対応する制御信号ALDLの生成から2クロックサイクル後に、フラグ領域FLGをセットし、バイパス可能信号BPENを出力する。
これにより、リザベーションステーションRSFLTは、図10に比べて2クロックサイクル遅くイネーブル信号BPENを受ける。データキャッシュ22からロードレジスタ30へのデータの転送は、演算命令AのPサイクルと同じサイクルで実行される。このため、演算命令AのPサイクルにおいて、リザベーションステーションRSFLTは、ロードレジスタ30からのデータのバイパスをあきらめ、リネーミングレジスタRNFRからデータをバイパスさせることを決定する。この結果、倍幅単精度浮動小数点データがリネーミングレジスタRNFRに揃う前に、ロードレジスタ30からデータがバイパスされることを抑止することができる。換言すれば、リザベーションステーションRSFLTは、演算命令AのPサイクルを、リネーミングレジスタRNFRからデータをバイパス可能な最も早いクロックサイクルに割り当てる。例えば、リネーミングレジスタRNFRからのデータの読み出しは2クロックサイクル掛かるため、演算命令AのPサイクルは、13番目のクロックサイクルに設定される。
図13は、図2に示す演算処理装置OPD2の動作のさらなる別の例を示す。図10と同一または同様の動作については、詳細な説明は省略する。図13は、先行する浮動小数点データのロード命令または先行する浮動小数点データの演算命令の実行完了時の動作を示す。
図13において、7番目と8番目のクロックサイクルのCサイクルとWサイクルは、以下に示すように、命令の実行が完了したときのコミット制御部44によるパイプラインのステージを示す。
(a)C(Commit):コミット制御部44が、命令の実行が完了したか否かを判定する。
(b)W(Write):コミット制御部44が、実行が完了した命令で使用したリネーミングレジスタRNFR、RNR、浮動小数点レジスタFR、固定小数点レジスタR等を更新する。また、コミット制御部44が、レジスタ管理テーブル16、リザベーションステーション18、バイパス制御部24等における命令で使用したリソースの解放を行う。
例えば、先行するロード命令のRTサイクルまたは先行する演算命令のX4サイクルは、3番目のクロックサイクルで完了している。コミット制御部44は、命令の完了処理を、デコーダ部14が命令を解読した順(プログラムの記述順)に実行するため、Cサイクルは、先行して解読した命令の完了を待って実行される。この例では、X4サイクルまたはRTサイクルの4クロックサイクル後にCサイクルが実行される。なお、Cサイクルは、最短で、RTサイクルまたはX4サイクルの次のクロックサイクルで実行される。
コミット制御部44は、Wサイクルにおいて、制御信号WCMTおよびアドレスWCMTUBAをバイパス制御部24に出力する(図13(a))。アドレスWCMTUBAは、ロード命令または演算命令で使用されたリネーミングレジスタRNFRを示す。
また、コミット制御部44は、Wサイクルにおいて、レジスタ管理テーブル16にリセット信号RST1を出力し、リザベーションステーション18にリセット信号RST2を出力する(図13(b))。さらに、コミット制御部44は、Wサイクルにおいて、リネーミングレジスタ部36に読み出し要求RCMT1を出力する(図13(c))。コミット制御部44は、読み出し要求RCMT1から2クロックサイクル後に、浮動小数点レジスタ部40に書き込み要求WCMT1を出力する(図13(d))。図10で説明したように、2クロックサイクルは、リネーミングレジスタRNFRからの読み出しに掛かる時間である。
なお、図13では、リセット信号RST1、RST2は、単一の信号で示されるが、リセット信号RST1、RST2のそれぞれは、複数ビットの信号である。例えば、リセット信号RST1、RST2は、アドレスWCMTUBAと同じ情報を含む。同様に、読み出し要求RCMT1および書き込み要求WCMT1のそれぞれは、単一の信号で示されるが、読み出し要求RCMT1および書き込み要求WCMT1のそれぞれは、複数ビットの信号である。例えば、読み出し要求RCMT1および書き込み要求WCMT1は、リネーミングレジスタRNFRおよび浮動小数点レジスタFRの番号を示す情報を含む。
バイパス制御部24は、制御信号WCMTに応答してアドレスWCMTUBAが示すフラグ領域FLGをリセットすることでバイパス可能信号BPENを無効レベルに設定する(図13(e))。
レジスタ管理テーブル16は、リセット信号RST1に基づいて、リセット信号RST1で指示されるリネーミングレジスタRNFRに対応する領域のビット値Pをリセットする(図13(f))。リザベーションステーション18は、リセット信号RST2に基づいて、リセット信号RST2で指示されるリネーミングレジスタRNFRに対応して保持しているビット値Pをリセットする。
リネーミングレジスタ部36は、読み出し要求RCMT1に基づいて、読み出し要求RCMT1で指示されるリネーミングレジスタRNFRからデータを出力する。浮動小数点レジスタ部40は、書き込み要求WCMT1に基づいて、リネーミングレジスタRNFRから出力されるデータを、書き込み要求WCMT1で指示される浮動小数点レジスタFRに格納する(図13(g))。すなわち、リネーミングレジスタRNFRから浮動小数点レジスタFRにデータが転送される。
リザベーションステーションRSFLTは、ビット値Pがリセットされる前の7番目のクロックサイクルで、リネーミングレジスタRNFRからデータをバイパス可能と判断する。そして、リザベーションステーションRSFLTは、8番目のクロックサイクルにおいて、演算命令AのPサイクルを実行し、演算命令Aを浮動小数点演算器26に投入する(図13(h))。
同様に、リザベーションステーションRSFLTは、ビット値Pがリセットされる前の8番目のクロックサイクルで、リネーミングレジスタRNFRからデータをバイパス可能と判断する。そして、リザベーションステーションRSFLTは、9番目のクロックサイクルにおいて、演算命令BのPサイクルを実行し、演算命令Bを浮動小数点演算器26に投入する(図13(i))。
浮動小数点演算器26は、演算命令AのB2サイクルでリネーミングレジスタRNFRからバイパスされるデータを選択し、選択したデータをX1サイクルで使用する(図13(j))。浮動小数点演算器26は、演算命令BのB2サイクルでリネーミングレジスタRNFRからバイパスされるデータを選択し、選択したデータをX1サイクルで使用する(図13(k))。
一方、リザベーションステーションRSFLTは、ビット値Pがリセットされた後の9番目のクロックサイクルで、リネーミングレジスタRNFRからのデータのバイパスは無理であると判断する。そして、リザベーションステーションRSFLTは、10番目のクロックサイクルにおいて、演算命令CのPサイクルを実行し、演算命令Cを浮動小数点演算器26に投入する(図13(l))。浮動小数点演算器26は、演算命令CのB2サイクルで浮動小数点レジスタFRからデータを読み出し、読み出したデータをX1サイクルで使用する(図13(m))。
以上、図2から図13に示す実施形態においても、図1に示す実施形態と同様の効果を得ることができる。すなわち、データキャッシュ22からリネーミングレジスタRNFRへロードされるデータのタイミングずれが発生する場合にも、既存のリネーミングレジスタRNFRを利用してデータを待ち合わせることができる。また、バイパス制御部24は、図7で説明した簡易な回路により、データがデータキャッシュ22から1回で読み出されるか複数回に分けて読み出されるかを判定することができる。この結果、演算処理装置OPD2の回路規模の増加を抑制することができ、演算処理装置OPD2の消費電力の増加を抑えることができ、演算処理装置OPD2の動作周波数を向上させることができる。
例えば、データがデータキャッシュ22から複数回に分けて読み出される場合にも、図4で説明したように、リネーミングレジスタ部36の回路規模を従来と同等にすることができる。また、データキャッシュ22から異なるタイミングで読み出されるデータをリネーミングレジスタRNFRで結合することできるため、データの結合用の回路は演算処理装置OPD2に設けられない。
さらに、データがデータキャッシュ22から複数回に分けて読み出される場合、バイパス制御部24は、データが揃っていないロードレジスタ30からのバイパスを禁止することで、演算処理装置OPD2の誤動作を抑制することができる。
一方、例えば、上位4バイトと下位4バイトとのデータに対応して、2ビットを記憶可能なフラグ領域FLGをバイパス管理テーブルBPTBLに設け、2ビットが両方セットされたときにデータが揃ったと判断して2つの4バイトデータを結合してもよい。しかしながら、この場合、バイパス管理テーブルBPTBLの規模が大きくなり、また、フラグ領域FLGの各ビットをセットする制御回路が追加される。さらに、データキャッシュ22の出力で上位4バイトと下位4バイトとのデータを結合する場合、下位4バイトのデータがデータキャッシュ22から出力されるまで、先に出力された上位4バイトのデータを保持するバッファ回路が設けられる。このため、回路規模は増加する。
なお、図2から図13に示す実施形態は、ロード命令に基づいて、データキャッシュ22から複数回に分けて出力される固定小数点データを固定小数点レジスタRに転送する場合のバイパス制御に適用されてもよい。
また、上述した実施形態は、SIMD(single instruction multiple data)方式の演算処理装置に適用されてもよい。この場合、図3に示す各浮動小数点レジスタFRは、並列処理される複数のデータ群を格納する複数の領域を有し、図4に示す各リネーミングレジスタRNFRは、並列処理される複数のデータ群を格納する複数の領域を有する。また、浮動小数点演算器26は、複数のデータ群を並列に演算する複数の演算器を有する。なお、ロード命令に基づいて、データキャッシュ22から3回以上に分けてデータが読み出される場合、バイパス制御部は、最後に読み出すデータの開始信号(ALDL等)に基づいて、バイパス可能信号BPENを生成する。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。