(57)【要約】【課題】キャッシュを有し、且つｏｕｔ−ｏｆ−ｏｒｄｅｒを行うＣＰＵにおいて、キャッシュミスした先行命令と同一ライン上のデータをアクセスする後続命令を効率的に実行できるようにする。【解決手段】先行命令のキャッシュミスを契機として先行命令がアクセスするデータを含む１ライン分のデータを複数のブロックに分割して順次メインメモリ２からデータアレイ１１２に書き込む。キャッシュフィルが行われている間に、上記先行命令と同一のライン上のデータをアクセスする後続命令がキャッシュミスとなった時、後続命令は命令制御部１０内の命令バッファに戻される。命令バッファは、後続命令がアクセスするデータを含むブロックがデータアレイ１１２に書き込まれた段階で上記後続命令を再発行する。【選択図】　　　図１
2004021896.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュミスした先行命令と同一ライン上のデータをアクセスする後続命令がキャッシュミスとなった場合、前記後続命令を命令バッファに戻し再発行するキャッシュフィル制御方法であって、
前記先行命令のキャッシュミスを契機に実行されるキャッシュフィルにおいて前記後続命令がアクセスするデータがデータアレイに書き込まれた段階で前記後続命令を再発行することを特徴とするキャッシュフィル制御方法。
【請求項２】
先行命令のキャッシュミスを契機として前記先行命令がアクセスするデータを含む１ライン分のデータを複数のブロックに分割して順次データアレイに書き込み、
前記先行命令と同一ライン上のデータをアクセスする後続命令がキャッシュミスとなった時、前記後続命令を命令バッファに戻し、
前記後続命令がアクセスするデータを含むブロックが前記データアレイに書き込まれた段階で前記後続命令を再発行することを特徴とするキャッシュフィル制御方法。
【請求項３】
請求項２記載のキャッシュフィル制御方法において、
キャッシュフィル開始時に、カウント動作を開始し、１ブロックの転送が行われる毎にカウントアップされるフィルカウンタのカウント値に基づいて、前記後続命令がアクセスするデータを含むブロックが、前記データアレイに書き込まれたか否かを判定することを特徴とするキャッシュフィル制御方法。
【請求項４】
先行命令のキャッシュミスを契機として前記先行命令がアクセスするデータを含む１ライン分のデータを複数のデータに分割して任意の順番でデータアレイに書き込み、
前記先行命令と同一ライン上のデータをアクセスする後続命令がキャッシュミスとなった時、前記後続命令を命令バッファに戻し、
前記後続命令がアクセスするデータを含むブロックが前記データアレイに書き込まれていることをデータ書き込みＴＡＧに基づいて検出した場合、前記後続命令を再発行することを特徴とするキャッシュフィル制御方法。
【請求項５】
請求項１乃至４記載の何れか１つのキャッシュフィル制御方法において、
前記先行命令及び前記後続命令は、ロード命令であることを特徴とするキャッシュフィル制御方法。
【請求項６】
キャッシュミスした先行命令と同一ライン上のデータをアクセスする後続命令がキャッシュミスとなった場合、前記後続命令を命令バッファに戻し再発行するＣＰＵであって、
前記先行命令のキャッシュミスを契機に実行されるキャッシュフィルにおいて前記後続命令がアクセスするデータがデータアレイに書き込まれた段階で前記後続命令を再発行する手段を備えたことを特徴とするＣＰＵ。
【請求項７】
先行命令のキャッシュミスを契機として前記先行命令がアクセスするデータを含む１ライン分のデータを複数のブロックに分割して順次データアレイに書き込む手段と、
前記先行命令と同一ライン上のデータをアクセスする後続命令がキャッシュミスとなった時、前記後続命令を命令バッファに戻す手段と、
前記後続命令がアクセスするデータを含むブロックが前記データアレイに書き込まれた段階で前記後続命令を再発行する手段とを備えたことを特徴とするＣＰＵ。
【請求項８】
請求項７記載のＣＰＵにおいて、
キャッシュフィル開始時に、カウント動作を開始し、１ブロックの転送が行われる毎にカウントアップされるフィルカウンタを備え、且つ、
前記後続命令を再発行する手段が、前記フィルカウンタのカウント値に基づいて前記後続命令がアクセスするデータを含むブロックが、前記データアレイに書き込まれたか否かを判定する構成を有することを特徴とするＣＰＵ。
【請求項９】
先行命令のキャッシュミスを契機として前記先行命令がアクセスするデータを含む１ライン分のデータを複数のデータに分割して任意の順番でデータアレイに書き込む手段と、
前記先行命令と同一ライン上のデータをアクセスする後続命令がキャッシュミスとなった時、前記後続命令を命令バッファに戻す手段、
前記後続命令がアクセスするデータを含むブロックが前記データアレイに書き込まれていることをデータ書き込みＴＡＧに基づいて検出した場合、前記後続命令を再発行する手段とを備えたことを特徴とするＣＰＵ。
【請求項１０】
請求項６乃至９記載の何れか１つのＣＰＵにおいて、
前記先行命令及び前記後続命令がロード命令であることを特徴とするＣＰＵ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パイプライン制御を行うＣＰＵにおけるキャッシュフィル制御技術に関し、特に、キャッシュミスした先行命令と同一ライン上のデータをアクセスする後続命令を効率的に実行できるようにするキャッシュフィル制御技術に関する。
【０００２】
【従来の技術】
キャッシュの制御においてラインサイズはヒット率と関係がある。一般にラインサイズが長くなるほどヒット率は上昇する。これはプログラムの空間的局所性に関係があり、ある項目が参照された場合、その項目の近くが参照される確率が高いからである。このためラインサイズを長くとる傾向がある。
【０００３】
【発明が解決しようとする課題】
しかしながらラインサイズが長くなるにつれキャッシュフィル時間が長くなる問題が発生する。ラインサイズが短い場合はメインメモリからキャッシュに書くキャッシュフィル時間が短いため、キャッシュフィルが完了したのちに同一ラインの後続命令を実行しても性能にそれほど影響がない。ラインサイズが長い場合、キャッシュフィルが完了したのちに同一ラインの後続命令を実行することになるので命令バッファ内に待機する時間が長くなり性能が低下する。
【０００４】
そこで、本発明の目的は、データアレイのラインサイズを長くした場合でも、キャッシュミスした先行命令と同一ライン上のデータをアクセスする後続命令を効率的に実行できるようにすることにある。
【０００５】
【課題を解決するための手段】
本発明のキャッシュフィル制御方法は、上記目的を達成するため、
キャッシュミスした先行命令と同一ライン上のデータをアクセスする後続命令がキャッシュミスとなった場合、前記後続命令を命令バッファに戻し再発行するキャッシュフィル制御方法であって、
前記先行命令のキャッシュミスを契機に実行されるキャッシュフィルにおいて前記後続命令がアクセスするデータがデータアレイに書き込まれた段階で前記後続命令を再発行することを特徴とするキャッシュフィル制御方法。
【０００６】
より具体的には、本発明のキャッシュフィル制御方法は、
先行命令のキャッシュミスを契機として前記先行命令がアクセスするデータを含む１ライン分のデータを複数のブロックに分割して順次データアレイに書き込み、
前記先行命令と同一ライン上のデータをアクセスする後続命令がキャッシュミスとなった時、前記後続命令を命令バッファに戻し、
前記後続命令がアクセスするデータを含むブロックが前記データアレイに書き込まれた段階で前記後続命令を再発行する。
【０００７】
また、本発明においては、キャッシュフィル開始時に、カウント動作を開始し、１ブロックの転送が行われる毎にカウントアップされるフィルカウンタのカウント値に基づいて、前記後続命令がアクセスするデータを含むブロックが、前記データアレイに書き込まれたか否かを判定するようにすることができる。
【０００８】
また、本発明は、１ラインを複数のデータに分割してデータアレイに書き込む際の書き込み順が一定でない場合であっても対応できるようにするため、
先行命令のキャッシュミスを契機として前記先行命令がアクセスするデータを含む１ライン分のデータを複数のデータに分割して任意の順番でデータアレイに書き込み、
前記先行命令と同一ライン上のデータをアクセスする後続命令がキャッシュミスとなった時、前記後続命令を命令バッファに戻し、
前記後続命令がアクセスするデータを含むブロックが前記データアレイに書き込まれていることをデータ登録ＴＡＧに基づいて検出した場合、前記後続命令を再発行する。
【０００９】
【作用】
上述した構成によれば、先行命令と同一ライン上でデータをアクセスする後続命令がキャッシュミスとなると、上記後続命令は命令バッファに戻されるが、先行命令のキャッシュミスを契機に実行されるキャッシュフィルにおいて後続命令がアクセスするデータがデータアレイに書き込まれた段階で、後続命令の再発行が行われることになるので、１ライン分のデータが全てデータアレイに書き込まれた後、後続命令を再発行していた従来の技術に比較して、後続命令を効率的に実行することが可能になる。従って、ラインサイズを大きくし、ヒット率を向上させるようにしても、命令を効率的に実行することが可能になる。
【００１０】
【発明の実施の形態】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００１１】
図１は本発明の実施例の全体の構成例を示すブロック図であり、ＣＰＵ１とメインメモリ２とから構成されている。
【００１２】
ＣＰＵ１は、ｏｕｔ−ｏｆ−ｏｒｄｅｒ実行を行うものであり、命令制御部１０とキャッシュユニット１１とを含んでいる。キャッシュユニット１１は、キャッシュ制御部１１０、アドレスアレイ１１１、データアレイ１１２及びミスレジスタバッファ１１３から構成されている。メインメモリ２は、キャッシュユニット１１とデータのやりとりを行う。
【００１３】
図２は図１の命令制御部１０の詳細とその周辺部分とを示したブロック図である。命令制御部１０は、大きく以下の６つのステージに分かれている。
【００１４】
命令登録ステージ（以下Ｒステージ）１０１は、命令を蓄える命令バッファ１０１０とリオーダバッファ（以下ＲＯＢ）１０１１とから構成され、命令バッファ１０１０に蓄えた命令を、条件がそろった時点において発行する。また、ＲＯＢ１０１１に蓄えられた命令は、上記命令の実行が終了し、且つ、それに先行する命令も全て完了してはじめてＲＯＢ１０１１から削除される。
【００１５】
命令発行ステージ（以下ＥＩステージ）１０２は、ＥＩステージレジスタ１０２０と、アドレス計算機１０２１と、スカラレジスタ１０２２（以下ＳＲ）と、ＳＲ１０２２にアクセスするリードアドレス、ライトアドレスを保持するリードアドレスレジスタ１０２３、ライトアドレスレジスタ１０２４とから構成されている。ＥＩステージ１０２では、命令の発行を行うと共に、ＳＲ１０２２からデータを読み出しアドレス計算を行う。
【００１６】
命令実行ステージ（以下ＥＥステージ）１０３は、ＥＥステージレジスタ１０３０と、アドレス結果レジスタ１０３１とを備えている。ＥＥステージ１０３では、ＥＥステージレジスタ１０３０が有効になり、アドレス計算機１０２１の計算結果がアドレス結果レジスタ１０３１に格納される。
【００１７】
キャッシュアクセスステージ（以下ＥＣステージ）１０４は、ＥＣステージレジスタ１０４０を備えており、キャッシュヒットの判定を行う。
【００１８】
ライトバックステージ（以下ＥＷステージ）１０５は、ＥＷステージレジスタ１０５０と、ライトデータレジスタ１０５１と、同一ラインアドレス判定結果レジスタ１０５２とから構成される。ＥＷステージ１０５では、キャッシュユニット１１からライトデータレジスタ１０５１に書くデータを決定する。
【００１９】
命令終了ステージ（以下ＥＹステージ）１０６は、ＥＹステージレジスタ１０６０と、同一ラインアドレスチェック報告１０６１と、命令終了報告１０６２を出力するインヒビットゲート１０６３とから構成される。ＥＹステージ１０６では命令が終了したかどうかを判定する。
【００２０】
図３は命令バッファ１０１０および各ステージバッファの構成例を示すブロック図である。命令バッファ１０１０は、複数のエントリ１０１００〜１０１０５から構成されている。各エントリ１０１００〜１０１０５には、エントリ内の命令が有効であることを示す有効ビットＶと、エントリ内の命令が命令バッファ１０１０から発行されたか否かを示す命令未発行Ｎと、命令が解放可能であるか否かを示す解放報告Ｆと、先行する命令と同一ラインをアクセスする命令であるか否かを示す同一ラインチェックＤと、ミスレジスタバッファ１１３のどのエントリに登録されている命令と同一ラインのデータをアクセスする命令であるのかを示すエントリ番号Ｍと、ライン内のチェックポイントを示すフィル番号Ｒと、ＲＯＢ１０１１内のエントリ番号を示すＷＲＢ番号ＷＲＢと、命令コードＯＰと、ＸオペランドＸと、ＹオペランドＹ、ＺオペランドＺとが設定される。
【００２１】
また各ステージ（ＥＩ、ＥＥ、ＥＣ、ＥＷ、ＥＹ）のステージレジスタには、各ステージにおける有効ビットＶ、ＷＲＢ番号ＷＲＢ、命令コードＯＰが設定される。
【００２２】
図４はキャッシュユニット１１の詳細とその周辺部分のブロック図である。
【００２３】
アドレス結果レジスタ１０３１は、サイズが４０ｂｉｔで、タグアドレス１０３１０　、インデックスアドレス１０３１１及びブロック内アドレス１０３１２を格納する。本実施例では、タグアドレス１０３１０　、インデックスアドレス１０３１１及びブロック内アドレス１０３１２のサイズは、それぞれ２５ｂｉｔ、５ｂｉｔ、１０ｂｉｔであるとする。
【００２４】
キャッシュ制御部１１０は、ＨＩＴ／ＭＩＳＳ判定結果レジスタ１１００と、エントリ登録制御用のゲート回路１１０１と、フィル開始報告１１０２に従ってカウント値「１」からカウント動作を開始し、カウント値が１ラインのブロック数と同一値（本実施例の場合は「４」）となった場合、カウント動作を停止するフィルカウンタ１１０３と、タグアドレス比較用の比較器１１０４と、ＨＩＴ／ＭＩＳＳ判定器１１０５と、ブロック内アドレス１０３１２に対応するフィル番号を出力するデコーダ１１０６と、同一ラインアドレス比較器１１０７と、インヒビットゲート１１０８と、ゲート回路１１０９と、比較器１１１０と、フィル終了検出器１１１１と、フィル実行中であるか否かを表示するレジスタ１１１２と、１１１３とから構成されている。尚、フィルカウンタ１１０３のカウント値を更新させる周期は、１ブロック分のデータをフィルする時間と同一値とする。
【００２５】
アドレスアレイ１１１は、有効ビットＶ０〜Ｖ３１とタグアドレス０〜タグアドレス３１とから構成される。
【００２６】
データアレイ１１２は、アドレスアレイ１１１に対応するデータが格納され、インデックスアドレス１０３１１とブロック内アドレス１０３１２により指摘されたデータを出力する。また、データアレイ１１２は、ライン中のどこにデータを書き込むのかを示すデータ書き込みＴＡＧ１１７に基づいて、キャッシュフィル時にメインメモリ２から送られてくるデータの書き込みを行う。
【００２７】
ミスレジスタバッファ１１３は、４個のエントリ＃１〜＃４から構成され、各エントリ＃１〜＃４には、エントリ内の命令が有効であるか否かを示す有効ビットＶと、ＲＯＢ１０１１内の番号を示すＷＲＢ番号ＷＲＢと、命令コードＯＰと、ターゲットアドレスと、４個のフィルチェックビット１，２，３，４とが格納される。フィルチェックビット１，２，３，４は、１ラインを４つのブロックに分割して行われるキャッシュフィルにおいて、どのブロックまでキャッシュフィルが完了したかを表示する。
【００２８】
【実施例の動作の説明】
次に本実施例の動作を図２〜図６を参照して詳細に説明する。
【００２９】
Ｒステージ１０１では命令が命令バッファ１０１０及びＲＯＢ１０１１に登録される。その際、命令バッファ１０１０には、有効ビットＶなども登録される。
【００３０】
ＥＩステージ１０２では、命令バッファ１０１０からの命令（ロード命令とする）がＥＩステージレジスタ１０２０に保持され、ＥＩステージレジスタ１０２０が有効になる。また、リードアドレスレジスタ１０２３中のリードアドレスＹ，Ｚ（上記命令中のＹ，ＺオペランドＹ，Ｚ）によって読み出されたＳＲ１０２２のデータ（例えば、ベースアドレスと変位）がアドレス計算機１０２１に入力され、アドレス計算機１０２１においてアドレス計算（例えば、ベースアドレスと変位との加算）が行われる。また、命令バッファ１０１０内の上記命令の命令未発行Ｎが”０”になり、上記命令が発行されたことを示す。
【００３１】
ＥＥステージ１０３では、ＥＥステージレジスタ１０３０が有効になり、アドレス計算機１０２１の演算結果がアドレス結果レジスタ１０３１に格納される。
【００３２】
ＥＣステージ１０４では、ＥＣステージレジスタ１０４０が有効になり、アドレス結果レジスタ１０３１中のアドレスによって示されるデータ（ターゲットデータ）がキャッシュユニット１１中に存在するか否かの判定（キャッシュヒットの判定）が行われる。このキャッシュヒットの判定は、キャッシュユニット１１内のＨＩＴ／ＭＩＳＳ判定器１１０５により行われる。以下に、キャッシュヒットの判定動作について、詳細に説明する。尚、キャッシュヒットの判定動作は、キャッシュフィルが行われている場合と、行われていない場合とで異なるので、以下では場合分けして説明する。
【００３３】
Ａ．キャッシュフィルが行われていない場合のキャッシュヒットの判定動作
キャッシュフィルが行われていない場合は、フィル終了検出器１１１１の出力が”１”になっており、セレクタ１１１３がキャッシュフィル中でないことを示す”０”を選択している。この結果、キャッシュフィルが行われていない場合には、キャッシュフィル中であるか否かを示すレジスタ１１１２の値が、キャッシュフィル中でないことを示す”０”になっている。尚、フィル終了検出器１１１１は、フィルカウンタ１１０３のカウント値が「４」になってから、１ブロック分のデータのフィル時間が経過した時、その出力を”１”とする。
【００３４】
従って、キャッシュフィルが行われていない期間においては、インヒビットゲートＩの出力が常時”１”になるので、ＨＩＴ／ＭＩＳＳ判定器１１０５は、比較器１１０４によってアドレス結果レジスタ１０３１中のタグアドレス１０３１０と、アドレス結果レジスタ１０３１中のインデックスアドレス１０３１１によって示されるアドレスアレイ１１１中のタグアドレスとが一致すると判定され、且つアンドゲートＡ１によって上記インデックスアドレス１０３１１によって示されるアドレスアレイ１１１中の有効ビットＶｉ（図４の例の場合、０≦ｉ≦３１）の値が有効を示す”１”であると判定された場合のみ、アンドゲートＡ２を介してＨＩＴ／ＭＩＳＳ判定結果レジスタ１１００にキャッシュヒットを示す”１”を格納し、それ以外の場合は、キャッシュミスを示す”０”を格納することになる。
【００３５】
Ｂ．キャッシュフィルが行われている場合のキャッシュヒットの判定動作
キャッシュフィルの開始時には、フィル開始報告１１０２が”１”となるので、セレクタ１１１３を介してレジスタ１１１２にキャッシュフィル中であることを示す値”１”が格納される。
【００３６】
従って、キャッシュフィルが行われている期間においては、ＨＩＴ／ＭＩＳＳ判定器１１０５は、比較器１１１０によってデコーダ１１０６から出力されるフィル番号がフィルカウンタ１１０３の値によって示されるフィル番号よりも小さいと判定され、且つ、比較器１１０４によってアドレス結果レジスタ１０３１中のタグアドレス１０３１０と、アドレス結果レジスタ１０３１中のインデックスアドレス１０３１１によって示されるアドレスアレイ１１１中のタグアドレスとが一致すると判定され、且つアンドゲートＡ１によって上記インデックスアドレス１０３１１によって示されるアドレスアレイ１１１中の有効ビットＶｉ（図４の例の場合、０≦ｉ≦３１）の値が有効を示す”１”であると判定された場合のみ、アンドゲートＡ２を介してＨＩＴ／ＭＩＳＳ判定結果レジスタ１１００にキャッシュヒットを示す”１”を格納し、それ以外の場合は、キャッシュミスを示す”０”を格納することになる。
【００３７】
ＥＷステージ１０５では、ＨＩＴ／ＭＩＳＳ判定結果レジスタ１１００に格納されている値が”１”（キャッシュヒット）であるか、”０”（キャッシュミス）であるかによって、異なる動作を行う。先ず、キャッシュヒットした場合の動作について説明する。
【００３８】
１．キャッシュヒットした場合の動作
キャッシュヒットした場合、ＨＩＴ／ＭＩＳＳ判定結果レジスタ１１００の値が”１”であるので、データアレイ１１２から読み出されたデータ（アドレス結果レジスタ１０３１中のインデックスアドレス１０３１１およびブロック内アドレス１０３１２によって特定されるデータ）がセレクタ１１６によって選択され、ライトデータレジスタ１０５１に書き込まれる。また、命令は、そのまま、ＥＷステージ１０５からＥＹステージ１０６に進む。
【００３９】
ＥＹステージ１０６では、ＥＹステージレジスタ１０６０の内容および命令終了報告１０６２を命令バッファ１０１０およびＲＯＢ１０１１に送る。命令終了報告１０６２を出力するインヒビットゲート１０６３は、同一ラインアドレス判定結果レジスタ１０５２の出力値を反転したものと、ＥＹステージレジスタ１０６０中の有効ビットＶとの論理積を出力するものである。この時点では、同一ラインアドレス判定結果レジスタ１０５２の出力は、”０”となっているので、有効ビットＶの値が命令終了報告１０６２として出力される。従って、有効な命令の実行が終了した場合は、命令終了報告１０６２として”１”が命令バッファ１０１０およびＲＯＢ１０１１に送られる。命令バッファ１０１０は、命令終了報告１０６２が”１”となると、保持している命令の内、ＥＹステージレジスタ１０６０から送られてきているＷＲＢ番号ＷＲＢと同一のＷＲＢ番号ＷＲＢを含んでいる命令を解放する。また、ＲＯＢ１０１１は、上記ＷＲＢ番号ＷＲＢで示される命令を、それに先行する全ての命令が完了していることを条件にして解放する。
【００４０】
２．キャッシュミスした場合の動作
キャッシュミスした場合は、同一ラインアドレス比較器１１０７でタグアドレス１０３１０とミスレジスタバッファ１１３に登録されているターゲットアドレスとを比較することにより、ＥＣステージレジスタ１０４０に登録されている命令と同一ラインのデータをアクセスする命令がミスレジスタバッファ１１３に登録されているかをチェックする。即ち、同一ラインアドレス比較器１１０７は、ミスレジスタバッファ１１３中の何れかのエントリにタグアドレス１０３１０と同一のターゲットアドレスが登録されているかを調べ、登録されている場合はその出力信号を”１”にし、登録されていない場合はその出力信号を”０”とする。
【００４１】
その後、ＥＣステージレジスタ１０４０に登録されている命令と同一ラインのデータをアクセスする命令がミスレジスタバッファ１１３に登録されているか否かによって、次のような動作が行われる。先ず、同一ラインの命令が登録されていない場合の動作を説明する。
【００４２】
２−１．同一ラインのデータをアクセスする命令が登録されていない場合の動作登録されていない場合は、同一ラインアドレス比較器１１０７の出力信号が”０”となるので（このとき、ＨＩＴ／ＭＩＳＳ判定結果レジスタ１１００は”０”）、エントリ登録制御用のゲート回路１１０１の制御により、ミスレジスタバッファ１１３の空きエントリ（空きエントリが無い場合は最もデータの格納時期が古いエントリ）に、ＥＣステージレジスタ１０４０に格納されている有効ビットＶ、ＷＲＢ番号ＷＲＢ、命令コードＯＰが登録されると共に、インヒビットゲート１１０８を介して上記エントリにタグアドレス１０３１０が登録される。また、これと同時に、同一ラインアドレス判定結果レジスタ１０５２にゲート回路１１０９を介して比較器１１０７の出力である”０”を書き込み、命令終了報告１０６２を”１”とすると共に、今回書き込んだ命令中のＷＲＢ番号ＷＲＢを含むミスレジスタ登録報告１０５５を命令バッファ１０１０へ送信する。これにより、命令バッファ１０１０は、保持している命令の内、ミスレジスタ登録報告１０５５に含まれているＷＲＢ番頭ＷＲＢと同一のＷＲＢ番号ＷＲＢを含む命令を解放する。
【００４３】
メインメモリ２に対してメモリアクセス指示を出し、メモリアクセスを行い、データをデータアレイ１１２に書き込む。また、データの書き込み開始時、該当する有効ビットＶｉを”１”とする。データアレイ１１２に書き込む時に、メインメモリ２からのフィル開始報告１１０２によりフィルカウンタ１１０３が動作を開始し、データがどこまでフィルされたかを示すフィルチェックビットをミスレジスタバッファ１１３の該当するエントリ（命令を登録したエントリと同一エントリ）に書き込む。即ち、１ライン分のデータをデータアレイ１１２に書き込む際、１ライン分のデータをＮ個（図４の例ではＮ＝４）のブロックに分割してフィルするが、何番目のブロックまでフィルしたかを示す情報をフィルチェックビットとして書き込む。ターゲットデータがターゲットデータレジスタ１１４に書き込まれたら、ＥＣステージ１０４から命令を再開し、ＥＷステージ１０５、ＥＹステージ１０６に進み、命令バッファ１０１０、ＲＯＢ１０１１に命令終了報告１０６２を行う。
【００４４】
次に、同一ラインのデータをアクセスする命令が登録されている場合の動作について説明する。
【００４５】
２−２．同一ラインのデータをアクセスする命令が登録されている場合の動作
同一ラインのデータをアクセスする命令が登録されている場合は、ゲート回路１１０９によって、同一ラインアドレス比較器１１０７の出力である”１”が同一ラインアドレス判定結果レジスタ１０５２に書き込まれる。これと同時に、デコーダ１１０６から出力されるフィル番号１０５４と、同一ラインをアクセスする先行命令が登録されているミスレジスタバッファ１１３のエントリのエントリ番号および上記エントリ中にＷＲＢとを含むエントリ番号報告１０５３とが命令バッファ１０１０に送られる。デコーダ１１０６は、ブロック内アドレス１０３１２に基づいて、現在処理対象にしている後続の命令がアクセスするデータが、どのブロック中のデータであるのかを示すフィル番号１０５４を出力するものである。例えば、本実施例のように、４つのブロックに分けてフィルする場合は、ブロック内アドレス１０３１２の上位２ビットをフィル番号１０５４として出力する。
【００４６】
命令バッファ１０１０は、保持している命令の内の、エントリ番号報告１０５３中のＷＲＢ番号ＷＲＢによって示される命令の命令未発行Ｎを再点灯し（Ｎ＝”１”）、上記命令を待機させる。また、命令バッファ１０１０は、上記命令中のフィル番号Ｒにフィル番号１０５４を設定すると共に、上記命令のエントリ番号Ｍに、エントリ番号報告１０５３に含まれているエントリ番号を設定する。
【００４７】
また、キャッシュユニット１１から命令バッファ１０１０へは、フィル完了報告１０５６として、ミスレジスタバッファ１１３の各エントリのフィルチェックビットが送られている。
【００４８】
命令バッファ１０１０は、保持している命令の内、エントリ番号Ｍおよびフィル番号Ｒが設定されている命令については、エントリ番号Ｍ、フィル番号Ｒおよびフィル完了報告１０５６に基づいて命令の再発行が可能になったか否かを判断し、再発行可能と判断したら、上記命令を再発行する。再発行後はキャッシュヒットした場合と同じ動きをする。尚、上記命令の再発行時、この命令と同一ラインのデータをアクセスする先行命令の情報は、ミスレジスタバッファ１１３から削除される。
【００４９】
ここで、命令再発行が可能になったか否かをどのようにして判断するのかを具体例を挙げて説明する。今、エントリ番号Ｍが＃３、フィル番号Ｒが「２」の命令が命令バッファ１０１０に登録されていたとする。この場合、命令バッファ１０１０は、上記した命令については、フィル完了報告１０５６に含まれている各エントリ＃１〜＃４のフィルチェックビットの内、エントリ番号Ｍによって示されるエントリ＃３に対するフィルチェックビットの値が、フィル番号Ｒによって示される値「２」以上の値になっているか否かをチェックし、「２」以上になっている場合は、命令の再発行が可能であると判断する。
【００５０】
次に、図６及び図７のタイムチャートを参照して本実施例の効果について説明する。
【００５１】
図６は、フィルチェックを行わない従来の技術のタイムチャートである。先行のロード命令（ＬＤＳ）は、キャッシュミスとなり、ミスレジスタバッファ１１３に登録される。先行するＬＤＳと同一ラインのデータをアクセスする後続のＬＤＳは、キャッシュミスとなった後、先行するＬＤＳがミスレジスタバッファ１１３に登録されているので、命令バッファ１０１０に再登録される。後続のＬＤＳは、キャッシュミスとなった先行するＬＤＳがアクセスするラインのキャッシュフィルが終了した段階で再発行される。キャッシュフィルはラインが長くなれば長くなり、また後続命令の必要なデータはキャッシュフィルが終了する前に既にキャッシュに登録されている可能性もある。このためラインの始めの方のデータがほしい場合、データがデータアレイ１１２に登録されているにもかかわらず再発行ができないままである。
【００５２】
図７はキャッシュフィルチェックを行う本実施例のタイムチャートである。先行のＬＤＳがキャッシュミスすると、ミスレジスタバッファ１１３に登録される。先行するＬＤＳと同一ラインのデータをアクセスする後続のＬＤＳは、ミスレジスタバッファ１１３に先行するＬＤＳ命令が登録されているので、命令バッファ１０１０に再登録される。図６に示した従来の技術では、１ライン分のキャッシュフィルが完了した後、後続のＬＤＳが再発行されるが、本実施例では、キャッシュフィルチェックがあるので、１ライン分のキャッシュフィルの完了を待つことなく、後続のＬＤＳを再発行することができる。例えば、先行する命令が第１番目にフィルされるブロック中のデータ（フィルチェックの値が「１」の時にフィルされるブロック中のデータ）をアクセスし、後続のＬＤＳが第２番目にフィルされるブロック中のデータ（フィルチェックの値が「２」の時にフィルされるブロック中のデータ）をアクセスするものである場合は、第２番目のキャッシュフィルが行われた時点で後続するＬＤＳを再発行することが可能になる。図６と図７を比べた場合、フィルチェックがついた本実施例の方が４Ｔ早く命令を再発行できることになる。尚、図７では、１ブロックのフィルに要する時間を２Ｔとしている。
【００５３】
図８はキャッシュユニットの他の構成例を示すブロック図である。図８に示したキャッシュユニット１１ａは、ミスレジスタバッファ１１３の代わりにミスレジスタバッファ１１３ａを備えている点、ゲート回路Ｇ１〜Ｇ４を備えている点、フィル終了検出器１１１１の代わりにゲート回路１１１４を備えている点、比較器１１１０の代わりに比較器１１１０ａを備えている点及びフィルカウンタ１１０３を備えていない点が図４に示したキャッシュユニット１１と相違している。
【００５４】
ミスレジスタバッファ１１３ａは、フィルチェックビット１，２，３，４の代わりにデータ対応Ｖビットが格納される点がミスレジスタバッファ１１３と相違している。尚、データ対応Ｖ情報の第１ビット〜第３ビット、第４ビット〜第６ビット、第７ビット〜第９ビット、第１０ビット〜第１２ビットは、それぞれ前述したフィルチェックビット１、２、３、４に対応するものである。データ対応Ｖ情報は、１ラインを１２個のデータに分割して行われるキャッシュフィルにおいて、どのデータのキャッシュフィルが完了したかを表示するものであり、１２ビットから構成される。例えば、１２個のデータの内、第１番目及び第１２番目のデータのキャッシュフィルが完了した場合には、データ対応Ｖ情報は、”１００００００００００１”となり、また、例えば、第１番目及び第３番目のデータのキャッシュフィルが完了した場合には、データ対応Ｖ情報は、”１０１０００００００００”となる。
【００５５】
ゲート回路Ｇ１は、４ビット構成のフィル完了情報を出力するものであり、ミスレジスタバッファ１１３ａのエントリ＃１に格納されているデータ対応Ｖ情報の第１ビット〜第３ビットが全て”１”の場合、フィル完了情報の第１ビットを”１”とし、エントリ＃２に格納されているデータ対応Ｖ情報の第１ビット〜第３ビットが全て”１”の場合、フィル完了情報の第２ビットを”１”とし、エントリ＃３に格納されているデータ対応Ｖ情報の第１ビット〜第３ビットが全て”１”の場合、フィル完了情報の第３ビットを”１”とし、エントリ＃４に格納されているデータ対応Ｖ情報の第１ビット〜第３ビットが全て”１”の場合、フィル完了情報の第４ビットを”１”とする。また、ゲート回路Ｇ２、Ｇ３、Ｇ４は、それぞれエントリ＃１〜＃４に格納されているデータ対応Ｖ情報の第４ビット〜第６ビット、第７ビット〜第９ビット、第１０ビット〜第１２ビットを対象にして上述したフィル完了情報を出力する。
【００５６】
比較器１１１０ａは、デコーダ１１０６から出力されるフィル番号が「１」の場合は、ゲート回路Ｇ１から出力される４ビット構成のフィル完了情報の内の、先行する命令が格納されているエントリに対応するビットが”１”の場合、その出力信号を”１”とする。また、フィル番号が「２」、「３」、「４」の場合は、それぞれゲート回路Ｇ２、Ｇ３、Ｇ４から出力される４ビット構成のフィル完了情報の内の、先行する命令が格納されているエントリに対応するビットが”１”の場合、その出力信号を”１”とする。
【００５７】
キャッシュユニット１１ａは、キャッシュミスが発生し、且つキャッシュミスの発生した命令がミスレジスタバッファ１１３ａに登録されていない場合、前述した実施例と同様に、ミスレジスタバッファ１１３ａの空きエントリに上記命令を登録すると共に、メインメモリ２に対してメモリアクセス指示を出す。これにより、メインメモリ２は、１ラインを１２個のブロックに分割し、各ブロックのデータを順次出力すると共に、データを１ラインのどこに書き込むのか、言い換えれば、どのブロックのデータを出力しているのかを示すデータ書き込みＴＡＧ１１７を出力する。
【００５８】
キャッシュユニット１１ａは、メインメモリ２からデータ書き込みＴＡＧ１１７が出力されると、ミスレジスタバッファ１１３ａの上記命令を登録したエントリの、データ対応Ｖ情報の該当するビットに”１”を立てる。例えば、命令を登録したエントリが＃１で、データ書き込みＴＡＧ１１７が、第５番目のブロックのデータの書き込みを示している場合は、エントリ＃１のデータ対応Ｖ情報の第５ビットに”１”を立てる。
【００５９】
ゲート回路Ｇ１〜Ｇ４から出力されるフィル完了情報が、フィル完了報告１０５６として命令バッファ１０１０に送られる。命令バッファ１０１０は、フィル番号Ｒ、エントリ番号Ｍが設定されている命令については、エントリ番号Ｍ、フィル番号Ｒによって示されるフィル完了報告１０５６中のビット（例えば、エントリ番号Ｍ＝２で、フィル番号Ｒ＝３である場合は、ゲート回路Ｇ３から出力されるフィル完了情報の第２ビット目）が”１”であれば、キャッシュフィルが完了したと判断し、命令を再発行する。
【００６０】
【発明の効果】
以上説明したように、本発明は、先行命令のキャッシュミスを契機に実行されるキャッシュフィルにおいて後続命令がアクセスするデータがデータアレイに書き込まれた段階で、後続命令の再発行が行われることになるので、１ライン分のデータが全てデータアレイに書き込まれた後、後続命令を再発行していた従来の技術に比較して、後続命令を効率的に実行することが可能になる。従って、ラインサイズを大きくし、ヒット率を向上させるようにしても、命令を効率的に実行することが可能になる。
【００６１】
また、本発明は、後続命令がアクセスするデータを含むブロックがデータアレイに書き込まれていることをデータ登録ＴＡＧに基づいて検出した場合、前記後続命令を再発行するので、１ラインを複数のデータに分割してデータアレイに書き込む際の書き込み順が一定でない場合であっても対応できる。
【図面の簡単な説明】
【図１】本発明の実施例の全体の構成例を示すブロック図である。
【図２】命令制御部１０の詳細とその周辺部分とを示したブロック図である。
【図３】命令バッファ１０１０及び各ステージレジスタの構成例を示すブロック図である。
【図４】キャッシュユニット１１の詳細とその周辺部分のブロック図である。
【図５】実施例の動作を説明するためのタイムチャートである。
【図６】従来の技術の問題点を説明するためのタイムチャートである。
【図７】本発明の効果を説明するためのタイムチャートである。
【図８】キャッシュユニット１１ａの詳細とその周辺部分のブロック図である。
【符号の説明】
１…ＣＰＵ
１０…命令制御部
１０１…命令登録ステージ
１０１０…命令バッファ
１０１１…ＲＯＢ
１０２…命令発行ステージ
１０２０…命令発行ステージレジスタ
１０２１…アドレス計算機
１０２２…ＳＲ
１０２３…リードアドレスレジスタ
１０２４…ライトアドレスレジスタ
１０３…命令実行ステージ
１０３０…命令実行レジスタ
１０３１…アドレス結果レジスタ
１０４…キャッシュアクセスステージ
１０４０…キャッシュアクセスステージレジスタ
１０５…ライトバックステージ
１０５０…ライトバックステージレジスタ
１０５１…ライトデータレジスタ
１０５２…同一ラインアドレス判定結果レジスタ
１０６…命令終了ステージ
１０６０…命令終了ステージレジスタ
１０６１…同一ラインアドレスチェック報告
１０６２…命令終了報告
１０６３…インヒビットゲート
１１…キャッシュユニット
１１０…キャッシュ制御部
１１１…アドレスアレイ
１１２…データアレイ
１１３…ミスレジスタバッファ
２…メインメモリ
【図１】
2004021896.tif 000003
【図２】
2004021896.tif 000004
【図３】
2004021896.tif 000005
【図４】
2004021896.tif 000006
【図５】
2004021896.tif 000007
【図６】
2004021896.tif 000008
【図７】
2004021896.tif 000009
【図８】
2004021896.tif 000010