(57)【要約】【課題】性能低下を招くことなく回路面積を削減出来る半導体集積回路を提供すること。【解決手段】データを保持する第１メモリ３０と、前記第１メモリ３０に対するキャッシュメモリとして働く第２メモリ１０とを備え、前記データに対する読み出し処理と書き込み処理とを複数の処理ステージによりパイプライン実行する半導体集積回路１であって、前記読み出し処理の対象となるデータを前記第１メモリ３０から読み出すと決定された場合に、該データの前記第１メモリ３０からの読み出しを前記処理ステージのいずれかＲＲ、ＲＲ／ＣＲにおいて行う。【選択図】図１
2010113470.tif 000002
【特許請求の範囲】
【請求項１】
データを保持する第１メモリと、前記第１メモリに対するキャッシュメモリとして働く第２メモリとを備え、
前記データに対する読み出し処理と書き込み処理とを複数の処理ステージによりパイプライン実行する半導体集積回路であって、
前記読み出し処理の対象となるデータを前記第１メモリから読み出すと決定された場合に、該データの前記第１メモリからの読み出しを前記処理ステージのいずれかにおいて行う
ことを特徴とする半導体集積回路。
【請求項２】
前記読み出し処理の対象となるデータの前記第２メモリからの読み出しを前記処理ステージのいずれかにおいて行い、
前記データを前記第２メモリから読み出す前記処理ステージは、該データの前記第２メモリからの読み出しが開始可能となるステージより下流に存在する
ことを特徴とする請求項１記載の半導体集積回路。
【請求項３】
前記第１メモリに対するライトバッファとして働く第３メモリを更に備え、
前記書き込み処理の対象となるデータは、まず前記第３メモリに一時的に保持され、
前記第１メモリのポートが空いている期間に前記第１メモリに書き移される
ことを特徴とする請求項１記載の半導体集積回路。
【請求項４】
前記読み出し処理の対象となるデータが前記第３メモリに保持されている場合、
前記パイプラインをストールさせ、該ストール期間に、該データを前記第３メモリから前記第１メモリに書き移し、
更に該データを前記第１メモリから読み出す
ことを特徴とする請求項３記載の半導体集積回路。
【請求項５】
前記処理ステージには、前記読み出し処理の対象となるデータの前記第１メモリからの読み出しを行うステージが、一つのデータの読み出しに必要とされるステージ数より多く含まれ、
前記第１メモリからのデータの読み出しは、同時にパイプライン実行さている処理のために前記第１メモリのポートのすべてが使用されてはいない処理ステージにおいて実行される
ことを特徴とする請求項１記載の半導体集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は半導体集積回路に関する。例えば、レジスタファイル（register file）を備えたプロセッサに関する。
【背景技術】
【０００２】
レジスタファイルは、最近のスーパスカラプロセッサ（super scalar processor）の構成要素のうち、最も高コストなものの一つとなっている。
【０００３】
Out-of-orderスーパスカラプロセッサでは、レジスタファイルの容量は、命令ウィンドウサイズの１．５〜２倍程度必要である。またＳＭＴ（simultaneous multi-threading）等のマルチスレッディングを行うプロセッサでは、同時に実行されるスレッドのコンテキストを保持するため、スレッド数に応じた容量が必要となる。これらの理由のため、レジスタファイルは巨大化する傾向にある。
【０００４】
またレジスタファイルは、多ポートのＲＡＭで構成される。通常、１命令あたり、２つのリードポート（read port）と１つのライトポート（write port）が必要である。従って、例えば４つの整数系命令を実行するスーパスカラプロセッサの整数レジスタファイルのポート数は、合計１２個になる。そしてＲＡＭの回路面積は、ポート数の２乗に比例する。その結果、レジスタファイルは、その容量の割には非常に大きいサイズになる（例えば、非特許文献１、２参照）。
【０００５】
そこで、キャッシュメモリを用いることでレジスタファイルのポート数を減らす構成が、種々、提案されている（例えば非特許文献３〜６参照）。しかしながら、これらの手法であると、キャッシュミスが発生した場合にバックエンドをストールさせなければならず、その結果、プロセッサの動作性能が低下する、という問題があった。
【非特許文献１】K.J.Kim, J.M.Youn, S.B.Kim, J.H.Kim, S.H.Hwang, K.T.Kim, Y.S Shin著、“A novel 6.4μm2 full-cmos sram cell with aspect ratio of 0.63 in a high-performance 0.25μm-generation cmos technology”、VLSI Technology, 1998、Digest of Technical Papers. 1998 Symposium、pp.68-69, 1998年
【非特許文献２】Y.Tatsumi, H.J.Mattausch著、“Fast quadratic increase of multiport-storage-cell area with port number”、Electronics Letters, Vol.35, No. 25, pp.2185-2187, 1999年
【非特許文献３】J.L.Crutz, A.Gonzalez, M.Valero著、“Multiple-Banked Register File Architecture”、Proceedings of the 27th International Symposium on Computer Architecture (ISCA), pp.316-325, 2000年
【非特許文献４】N.C.Yung, R.; Wilhelm著、“Caching processor general registers”、Proceedings of the International Conference on Computer Design (ICCD), pp.307-312, 1995年
【非特許文献５】小林良太郎、梶山太郎、島田俊夫著、「クリティカル・パスに着目した階層型レジスタ・ファイル」、先進的計算基盤システムシンポジウムSACSIS、pp.33-40, 2006年
【非特許文献６】小林良太郎、堀部大介、島田俊夫著、「物理レジスタ番号の割り当て順に着目したレジスタ・キャッシュの高精度化手法」、先進的計算基盤システムシンポジウムSACSIS、pp.13-22, 2006年
【発明の開示】
【発明が解決しようとする課題】
【０００６】
この発明は、性能低下を招くことなく回路面積を削減出来る半導体集積回路を提供する。
【課題を解決するための手段】
【０００７】
この発明の一態様に係る半導体集積回路は、データを保持する第１メモリと、前記第１メモリに対するキャッシュメモリとして働く第２メモリとを備え、前記データに対する読み出し処理と書き込み処理とを複数の処理ステージによりパイプライン実行する半導体集積回路であって、前記読み出し処理の対象となるデータを前記第１メモリから読み出すと決定された場合に、該データの前記第１メモリからの読み出しを前記処理ステージのいずれかにおいて行う。
【発明の効果】
【０００８】
この発明によれば、性能低下を招くことなく回路面積を削減出来る半導体集積回路を提供出来る。
【発明を実施するための最良の形態】
【０００９】
以下、この発明の実施形態を、図面を参照して説明する。この説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
【００１０】
［第１の実施形態］
この発明の第１の実施形態に係る半導体集積回路について、図１を用いて説明する。図１は、本実施形態に係るスーパスカラプロセッサのブロック図である。
【００１１】
＜プロセッサの構成について＞  
本実施形態に係るプロセッサ１は、パイプライン動作を行う。すなわちプロセッサ１は、発行された命令を複数のステージに分割して処理する。各ステージは、それぞれが独立して処理可能なユニットによって処理される。そしてプロセッサ１は、複数のパイプラインにより、複数の命令を同時並行して実行可能である。
【００１２】
図示するようにプロセッサ１は、レジスタキャッシュ（register cache）１０、アービタ（arbiter）２０、レジスタファイル３０、選択回路４０、演算器５０、及び制御部６０を備えている。以下、それぞれについて説明する。
【００１３】
＜レジスタキャッシュ１０について＞  
レジスタキャッシュ１０は、プロセッサ１におけるキャッシュメモリとして機能し、例えばＳＲＡＭ等の半導体メモリである。そしてレジスタキャッシュ１０は、レジスタファイル３０に保持されるデータや、演算器５０の演算結果等を、一時的に保持可能である。レジスタキャッシュ１０は、例えばｒ個（ｒは１以上の自然数）のリードポートと、ｗ個（ｗは１以上の自然数）のライトポートを有している。すなわち、１ステージにおいて、最大でｒ個のデータを同時に読み出すことが可能であり、また最大でｗ個のデータを同時に書き込むことが出来る。
【００１４】
レジスタキャッシュ１０からデータを読み出す際には、読み出しアドレス信号ＲＡ０〜ＲＡｒ−１が、それぞれパイプラインラッチ７０を介してリードポートに入力される。そしてレジスタキャッシュ１０は、必要なデータを保持している場合（キャッシュヒット）には、ヒット（hit）信号を出力すると共に、当該データを読み出しデータＣＲＤ０〜ＣＲＤｒ−１として、選択回路４０へ出力する。他方、必要なデータを保持していない場合（キャッシュミス）には、ミス（miss）信号を、アービタ２０へ出力する。
【００１５】
レジスタキャッシュ１０にデータを書き込む際には、書き込みアドレス信号ＷＡ０〜ＷＡｗ−１及び書き込みデータＷＤ０〜ＷＤｗ−１が、それぞれパイプラインラッチ７１、７２を介して、ライトポートに入力される。そしてレジスタキャッシュ１０は、書き込みアドレス信号ＷＡ０〜ＷＡｗ−１に相当する領域に、書き込みデータＷＤ０〜ＷＤｗ−１を書き込む。
【００１６】
なお、パイプラインラッチ７０は例えばフリップフロップ等であり、以下、同様である。
【００１７】
＜アービタ２０について＞  
アービタ２０は、レジスタファイル３０に対するデータアクセスを制御する。すなわちアービタ２０は、データの読み出し時において、パイプラインラッチ７０を経た読み出しアドレス信号ＲＡ０〜ＲＡｒ−１を、それぞれパイプラインラッチ７３を介してリードポートにおいて受信する。また、レジスタキャッシュ１０から出力されるヒット信号またはミス信号を、パイプラインラッチ７５を介して受信する。そしてアービタ２０は、レジスタキャッシュ１０からミス信号を受信した場合には、アドレス信号ＲＡ０〜ＲＡｒ−１に応じて、アドレス信号ＭＡ０〜ＭＡｍ−１（ｍは１以上の自然数）を発生し、レジスタファイル３０へ出力する。アドレス信号ＭＡ０〜ＭＡｍ−１は、レジスタファイル３０において、アドレス信号ＲＡ０〜ＲＡｒ−１によって選択されるデータが保持されるアドレスを示す信号である。
【００１８】
他方、レジスタファイル３０にデータを書き込む際には、アービタ２０は、パイプラインラッチ７４を介して入力される書き込みアドレスＷＡ０〜ＷＡｗ−１及び書き込みデータＷＤ０〜ＷＤｗ−１を、ライトポートにおいて受信する。そして、アドレス信号ＷＡ０〜ＷＡｗ−１に応じてアドレス信号ＭＡ０〜ＭＡｍ−１を発生し、レジスタファイル３０へ出力する。また書き込みデータＷＤ０〜ＷＤｍ−１を、書き込みデータＭＷＤ０〜ＭＷＤｍ−１としてレジスタファイル３０に出力する。
【００１９】
＜レジスタファイル３０について＞  
レジスタファイル３０は、プロセッサ１における主たるメモリとして機能する半導体メモリであり、例えばＳＲＡＭである。レジスタファイル３０は、大まかにはデコーダ３１、データアレイ３２、及びパイプラインラッチ７６を備えている。
【００２０】
デコーダ３１は、アービタ２０からアドレス信号ＭＡ０〜ＭＡｍ−１及び書き込みデータＷＤ０〜ＷＤｗ−１を受信することにより、データアレイ３２からデータを読み出し、またはデータを書き込む。
【００２１】
データアレイ３２は、レジスタファイル３０において実際にデータを保持するユニットであり、ＳＲＡＭ型のメモリセルの集合である。そして、デコーダ３１からのアクセスに応じてデータを保持し、またはデータを出力する。
【００２２】
レジスタファイル３０からデータが読み出される場合、デコーダ３１は、アービタ２０から受信したアドレス信号ＭＡ０〜ＭＡｍ−１をデコードし、パイプラインラッチ７６を介してデータアレイ３２にアクセスする。その結果、データアレイ３２において、アドレス信号ＭＡ０〜ＭＡｍ−１に相当するメモリセルから読み出されたデータが、読み出しデータＭＲＤ０〜ＭＲＤｍ−１として出力される。
【００２３】
従って、レジスタファイル３０からデータを読み出すには、２サイクル（２ステージ）かかることになる。しかしながらこのサイクル数は１サイクルでも良いし３サイクル以上であっても良い。以下では２サイクルかかる場合を例に説明する。
【００２４】
他方、レジスタファイル３０にデータが書き込まれる場合、デコーダ３１は、アービタ２０からアドレス信号ＭＡ０〜ＭＡｍ−１及び書き込みデータＷＤ０〜ＷＤｗ−１を受信する。そして、デコーダ３１はアドレス信号ＭＡ０〜ＭＡｍ−１をデコードし、パイプラインラッチ７６を介してデータアレイ３２にアクセスする。その結果、データアレイ３２においてアドレス信号ＭＡ０〜ＭＡｍ−１に相当するメモリセルには、書き込みデータＷＤ０〜ＷＤｗ−１が書き込まれる。
【００２５】
＜選択回路４０について＞  
プロセッサ１は、ｒ個の選択回路４０を備えている。選択回路４０の各々は、レジスタキャッシュ１０及びレジスタファイル３０から読み出される読み出しデータＣＲＤ０〜ＣＲＤｒ−１、ＭＲＤ０〜ＭＲＤｍ−１のいずれか１つを選択し、これを読み出し信号ＲＤ０〜ＲＤｒ−１として出力する。
【００２６】
この選択動作は、例えば制御部６０またはアービタ２０等によって制御される。例えばアービタ２０が制御する場合、次のような制御が行われる。仮にｒ＝３であり、レジスタキャッシュ１０においてアドレス信号ＲＡ０、ＲＡ１についてはヒットし、アドレス信号ＲＡ２についてはミスしたと仮定する。従って、アドレス信号ＲＡ０、ＲＡ１に相当するデータはレジスタキャッシュ１０から読み出され、アドレス信号ＲＡ２に相当するデータはレジスタファイル３０から読み出される。なお、アドレス信号ＲＡ０、ＲＡ１に対応する読み出しデータをＣＲＤ０、ＣＲＤ１とし、アドレス信号ＲＡ２に対応する読み出しデータをＭＲＤ２とする。
【００２７】
するとアービタ２０は、上記ヒット／ミスに関する情報を有しているので、３つの選択回路４０のいずれか２つに対しては、読み出し信号ＣＲＤ０、ＣＲＤ１を選択するよう命令する。またいずれか１つに対しては、読み出し信号ＭＲＤ２を選択するよう命令する。その結果、読み出しデータＣＲＤ０、ＣＲＤ１、ＭＲＤ２が選択回路４０から出力される。制御部６０も、ヒット信号及びミス信号を受信することで上記処理が可能である。
【００２８】
なお読み出しデータＣＲＤ０〜ＣＲＤｒ−１は、レジスタキャッシュ１０から読み出された後、２段のパイプラインラッチ７７、７８を介して選択回路４０に入力される。また、書き込みデータＷＤ０〜ＷＤｗ−１が、レジスタキャッシュ１０及びパイプラインラッチ７２、７７、７８を介することなく選択回路４０に入力されるパスも設けられている。これは、例えば演算器５０における演算結果を、次のサイクルで演算器５０に入力するためのバイパスネットワークである。バイパスネットワークの詳細については、第２の実施形態で説明する。
【００２９】
＜演算器５０について＞  
演算器５０は、選択回路４０で選択された読み出しデータＲＤ０〜ＲＤｒ−１を、パイプラインラッチ７９を介して受信する。そして読み出しデータＲＤ０〜ＲＤｒ−１を用いて演算を行う。
【００３０】
＜制御回路６０について＞  
制御回路６０は、上記説明した各ユニットの動作を制御する。すなわち、上記ユニットで処理が実行される命令を発行して、パイプラインを制御する。そして、当該命令を実行するために必要なデータに応じて、アドレス信号ＲＡ０〜ＲＡｒ−１を発行する。
【００３１】
発行する命令内容は特に限定されないが、その一例は加算命令、減算命令、論理演算命令、積和命令、シフト（shift）命令、ローテート（rotate）命令、シャッフル（shuffle）命令等である。
【００３２】
＜プロセッサの動作について＞  
次に、本実施形態に係る上記プロセッサ１の動作について、図１及び図２を用いて説明する。図２は、プロセッサ１が行う動作のフローチャートである。なお以下の説明では、ＲＡ０〜ＲＡｒ−１、ＷＡ０〜ＷＡｗ−１、ＷＤ０〜ＷＤｗ−１、ＭＡ０〜ＭＡｍ−１、ＭＷＤ０〜ＭＷＤｍ−１、ＭＲＤ０〜ＭＲＤｍ−１、及びＲＤ０〜ＲＤｒ−１の各々をそれぞれ区別しない場合には、それぞれＲＡ、ＷＡ、ＷＤ、ＭＡ、ＭＷＤ、ＭＲＤ、及びＲＤと呼ぶことにする。
【００３３】
図示するように、まずパイプラインの第１ステージＳＴ１において、制御部６０が命令を発行する（ステップＳ１０）。この際、アドレス信号ＲＡも発行される。命令を実行するにあたって必要なデータ（オペランド）が複数ある場合、それぞれに応じたアドレス信号ＲＡが発行される。
【００３４】
次に、ステップＳ１０で発行されたアドレス信号ＲＡがパイプラインラッチ７０を介してレジスタキャッシュ１０に与えられる。これにより、第１ステージＳＴ１に後続する第２ステージＳＴ２において、レジスタキャッシュ１０へのデータアクセスがなされる（ステップＳ１１）。第２ステージＳＴ２では、レジスタキャッシュ１０において、オペランドに対応するデータの有無が判定され（これをヒットミス判定と呼ぶ）、その情報がヒット信号及びミス信号として出力される。オペランドが複数ある場合、ヒットミス判定は各オペランドについて行われる。そして、ヒットしたオペランドについては、レジスタキャッシュ１０からデータが読み出される。
【００３５】
第２ステージＳＴ２に後続する第３、第４ステージＳＴ３、ＳＴ４では、ミスしたオペランドについてのレジスタファイル３０へのデータアクセスがなされる。すなわち、アドレス信号ＲＡ、並びにヒット信号及びミス信号が、パイプラインラッチ７３、７５を介してアービタ２０へ出力される。そしてキャッシュミスしたオペランドについては（ステップＳ１２、ＹＥＳ）、アービタ２０はアドレス信号ＭＡ０を発行して、レジスタファイル３０へアクセスする（ステップＳ１３）。そして、第３、第４ステージＳＴ３、ＳＴ４の２つのステージを用いて、レジスタファイル３０からデータが読み出される。
【００３６】
他方、キャッシュヒットしたオペランドについては（ステップＳ１２、ＮＯ）、第３、第４ステージＳＴ３、ＳＴ４において何らの処理も行わない。すなわち、レジスタキャッシュ１０から読み出されたデータＣＲＤは、パイプラインラッチ７７、７８を介して、選択回路４０へ出力される。
【００３７】
そして第４ステージＳＴ４において、選択回路４０が各オペランドに対応するデータを選択し、読み出しデータＲＤとして出力する。
【００３８】
次に、選択回路４０から出力された読み出しデータＲＤがパイプラインラッチ７９を介して演算器５０に与えられる。これにより、第４ステージＳＴ４に後続する第５ステージＳＴ５において、演算器５０が読み出しデータＲＤを用いた演算を行う（ステップＳ１５）。
【００３９】
その後、第５ステージＳＴ５に後続する第６ステージＳＴ６において、演算器５０の演算結果がパイプラインラッチ７２を介してレジスタキャッシュ１０へ書き込みデータＷＤとして転送され、レジスタキャッシュ１０に書き込まれる（ステップＳ１６）。演算結果は、同時にパイプラインラッチ７４を介して書き込みデータＷＤとしてアービタ２０へも転送され、レジスタファイル３０に書き込まれる。
【００４０】
＜パイプラインについて＞  
図３は、上記動作の流れを時間軸に沿って示した概念図である。図中の第１ステージに記した“ＩＳ”は、制御部６０による命令発行を行う（図２におけるステップＳ１０）ステージであることを示す。第２ステージに記した“ＣＲ”は、レジスタキャッシュ１０に対するデータアクセスを行う（ステップＳ１１）ステージであることを示す。第３、第４ステージに記した“ＲＲ”は、レジスタファイル３０に対するデータアクセス（ステップＳ１３）が可能なステージであることを示す。第５ステージに記した“ＥＸ”は、演算器５０において演算を行う（ステップＳ１５）ステージであることを示す。第６ステージに記した“ＣＷ”は、演算器５０における演算結果をレジスタキャッシュ１０及びレジスタファイル３０に書き込む（ステップＳ１６）ステージであることを示す。また、Ｉａ、Ｉｂ、Ｉｃはそれぞれ、各パイプラインの実行命令である。
【００４１】
図示するように、第１ステージで制御部６０により命令発行された後（“ＩＳ”）、まず第２ステージでレジスタキャッシュ１０へのデータアクセスが行われる（“ＣＲ”）。その後、第３、第４ステージでレジスタファイル３０へのデータアクセスが可能とされる（“ＲＲ”）。そして複数の、上記パイプラインが同時並行して実行される。
【００４２】
図４は、ある１つのあるパイプラインに着目し、キャッシュミスが発生した場合としない場合とにつき示している。図示するように、第２ステージでキャッシュミスが発生した場合には、第３、第４ステージでレジスタファイル３０へのアクセスが行われ、これらのステージでデータがレジスタファイル３０から読み出される。
【００４３】
これに対してキャッシュミスが発生しない場合には、第２ステージにおいてデータがレジスタキャッシュ１０から読み出され、第３、第４ステージにおいては特に処理は行われない。第３、第４ステージでは、レジスタキャッシュ１０から読み出されたデータが選択回路４０へ転送されるのみである。但し、キャッシュミスが発生しない場合であっても、第３、第４ステージが省略されるわけではない。キャッシュミスの発生にかかわらず、パイプラインのステージ数は６段である。つまり第３、第４ステージは、必要に応じてレジスタファイル３０へのアクセスを行うための専用のステージである。
【００４４】
なお、図３及び図４ではオペランドが１つの場合について示しているが、複数の場合も同様である。図５は、オペランドが２つであり、一方につきキャッシュミスが発生し、他方については発生しない場合について示している。図５において第２〜第４ステージが２段になっているが、この２段のうちのそれぞれが各オペランドに対応する。
【００４５】
図示するように、上段に示すオペランドについてはキャッシュミスが発生していないので、第３、第４ステージでは何らの処理も行われない。これに対して下段に示すオペランドについてはキャッシュミスが発生しているので、第３、第４ステージにおいてレジスタファイル３０からのデータ読み出しが実行される。
【００４６】
＜効果＞
以上のように、この発明の第１の実施形態に係る半導体集積回路であると、下記（１）の効果が得られる。
【００４７】
（１）プロセッサの性能低下を招くことなく、レジスタファイルの回路面積を削減出来る。  
本効果につき、以下、詳細に説明する。背景技術で説明した通り、近年のOut-of-Orderスーパスカラプロセッサのレジスタファイルは非常に巨大化する傾向にある。この要因として、レジスタファイルのエントリ数の増大と、ポート数の増大とが挙げられる。
【００４８】
巨大化したレジスタファイルは、様々な問題を引き起こす。すなわち、回路面積が増大すれば、回路を構成するためのコストが増大する。従って、面積の増大そのものが大きな問題となる。また、レジスタファイルはその性質上、実行コアの中心部に位置する．そのような位置に巨大な回路が存在することは、周辺部の遅延やそれを考慮するためのフロアプランにまで大きな影響を与える。更に、ＲＡＭが消費する電力は面積に比例する。従って、面積が増大するに従ってレジスタファイルの電力消費も多くなる。そして電力消費の増大は、プロセッサの動作周波数の向上を制限する。更には、巨大な面積を持つレジスタファイルのレイテンシは、当然大きなものとなる。
【００４９】
これらのうち、レイテンシの増大については、近年のプロセスの微細化による配線遅延の影響もあり、深刻である。レジスタファイルのレイテンシは配線遅延に支配されるため、ＬＳＩが微細化してもほとんど短縮されない。このため、微細化が進むとレジスタファイルのレイテンシは相対的には増大することになる。
【００５０】
このようにレジスタファイルのレイテンシが増大した結果、近年では、レジスタファイルを１サイクル程度でアクセスすることはもはや不可能となっている。そのため、レジスタファイルのアクセスには通常２〜３程度のパイプラインステージが充てられている。
【００５１】
しかし、レジスタファイルのパイプラインが深くなると（ステージ数が多くなると）、予測ミス・ペナルティを増大させ、また資源不足によるストールを増大させる、という問題が発生する。
【００５２】
そこで、背景技術で説明した非特許文献３〜６記載の手法では、キャッシュメモリを用いることで、上記の問題を解決しようとする。キャッシュメモリは、レジスタファイルに保持されるデータの一部を保持し、１サイクルでアクセス可能な小型のバッファである。このようなプロセッサのパイプラインチャートを図６に示す。図６では、２つの命令Ｉａ、Ｉｂがパイプライン上においてが並行して実行されている様子を示している。
【００５３】
図示するように、命令は“ＩＳ”ステージ、“ＣＲ”ステージ、“ＥＸ”ステージ、及び“ＣＷ”ステージの順で処理される。これらが示す意味は、図３で説明したとおりである。本構成は、キャッシュヒットを仮定したパイプラインとなっている。すなわち全ての命令は、そのオペランドがキャッシュメモリにヒットするものとしてスケジューリングされる。従って、図６に示すように、命令Ｉａにおいてキャッシュミスが発生した場合、命令Ｉａはバックエンドをストールさせ、その間にレジスタファイルからデータの読み込みを行う。
【００５４】
本構成のプロセッサは、理想的に動作した場合、すなわち、キャッシュヒットした場合には、１サイクルでアクセス可能なレジスタファイルを持つプロセッサと機能的に等価となる。従って、上述したパイプライン化によって生じるレイテンシの問題を解消することができる。また、キャッシュミスしたオペランドのみがレジスタファイルに対してアクセスを行う。このため、レジスタファイルはアクセス数に見合った少数のポートを持つだけでよい。よって、レジスタファイルの回路面積を縮小出来る。
【００５５】
しかし上記プロセッサは、実際にはミス・ペナルティによって性能を落としてしまうという問題がある。キャッシュメモリのミス率は、最大で１３％程度であり、Ｌ１データキャッシュなどと比べると著しく高い。これに加え、ペナルティの発生率は個々のオペランドにおけるミス率よりもさらに高くなる。これは、同時発行された命令が持つソースオペランドのうち、一つ以上がミスした場合にペナルティが発生するためである。
【００５６】
たとえば、ヒット率が９０％で４命令が同時に発行された場合のことを考える。この場合、ソースオペランドは最大で８個になり、これらが全てヒットする確率は０．９８≒０．４３となる。すると、オペランドが１つでもミスした場合にペナルティが発生するのであるから、ペナルティの発生率は１−０．９８≒０．５７となり、大幅な性能低下となる。
【００５７】
キャッシュミスが発生した場合の対策は、基本的には図６に示したように、バックエンドをストールさせるしかない。例えば、ペナルティを軽減するために、ミスを起こした命令を選択的に遅延させることや、ヒットミス予測を行うことが考え得るが、これらはいずれも構造上実現が困難である等、大きな副作用を持ち、現実的でない。
【００５８】
この点、本実施形態に係るプロセッサであると、上記従来のプロセッサがキャッシュヒットを前提としたパイプライン構成であったのに対し、キャッシュミスを前提としたパイプライン構成を有している。従って、上記問題を解決し、性能低下を招くことなく、レジスタファイルの回路面積を縮小出来る。
【００５９】
すなわち、図３乃至図５を用いて説明したように、パイプラインはキャッシュミスを仮定しているので、レジスタファイル３０にアクセス可能なステージ（第３、第４ステージ）が設けられている。そして、レジスタキャッシュ１０のヒット／ミスに関わらず、命令は常に第３、第４ステージを通過する。
【００６０】
従って、レジスタファイル３０からデータを取得するためにバックエンドをストールさせる必要は無い。そのため、ＩＰＣ（instruction per cycle）の低下を防止し、プロセッサの性能低下の発生を抑制出来る。
【００６１】
更に、レジスタファイル３０に対しては、ミスを起こしたオペランドのみがアクセスを行う。そのため、レジスタファイル３０はこのアクセス数に見合った少数のポートだけを持てば良い。すなわち、レジスタファイル３０には、ミス率に応じた数のポートを設ければ、ほぼペナルティは発生しなくなる。例えば図５の例であると、各サイクルにおいてレジスタファイル３０にアクセスするオペランドは最大で２つである。例えばミス率が５０％であったとすれば、レジスタファイル３０のポート数を１ポートにしたとしても、ストールは発生しない。このように、レジスタファイル３０のポート数を削減出来る結果、レジスタファイル３０の回路面積を縮小出来る。
【００６２】
また、レジスタファイル３０の小型化は、レジスタファイルのレイテンシの短縮にもつながる。場合によっては、レジスタファイル３０とレジスタキャッシュ１０の回路規模は同程度となり、その場合にはレジスタファイル３０は１サイクルでアクセス可能となる。よって、プロセッサの高速動作に寄与出来る。
【００６３】
［第２の実施形態］  
次に、この発明の第２の実施形態に係る半導体集積回路について説明する。本実施形態は、上記第１の実施形態において、レジスタキャッシュ１０からのデータの読み出しタイミングとヒットミス判定タイミングとを分離し、パイプラインの構成を変形したものである。以下では、第１の実施形態と異なる点についてのみ説明する。
【００６４】
＜レジスタキャッシュ１０の概念について＞  
図７は、本実施形態に係るレジスタキャッシュ１０の概念図である。図示するようにレジスタキャッシュ１０は、（Ｎ＋１）個（Ｎは１以上の自然数）のエントリ０〜Ｎを備えている。そして各エントリにデータが保持される。また、各エントリにはタグ（tag）が設けられている。タグは、対応する各エントリの管理情報等を保持し、各エントリのステータスフラグとして機能するものである。従って、このタグをチェックすることにより、現在、レジスタキャッシュ１０には如何なるデータが保持されているのか、等の情報を得ることが出来る。
【００６５】
＜プロセッサの構成について＞  
図８は、本実施形態に係るプロセッサ１のブロック図である。図示するように本実施形態に係るプロセッサ１は、第１の実施形態で説明した図１の構成において、レジスタキャッシュ１０を変形すると共に、制御部６０にデータアクセスのスケジューリング機能を持たせたものである。
【００６６】
＜レジスタキャッシュ１０について＞  
本実施形態に係るレジスタキャッシュ１０は、タグアレイ１１、データアレイ１２、及びパイプラインラッチ８１〜８３を備えている。
【００６７】
タグアレイ１１は、図７で説明したタグを保持するための、例えばＳＲＡＭ等の半導体メモリである。タグアレイ１１は、パイプラインラッチ７０、７１を介してアドレス信号ＲＡ、ＷＡを受信する。そしてアドレス信号ＲＡ、ＷＡをデコードしてアドレス信号ＤＡ０〜ＤＡｒ−１を得、これによりデータアレイ１２に対してデータアクセスを行う。アドレス信号ＤＡ０〜ＤＡｒ−１についても、これらを区別しない場合には単にアドレス信号ＤＡと呼ぶ。
【００６８】
データアレイ１２は、図７で説明したデータを保持するための、例えばＳＲＡＭ等の半導体メモリである。データアレイ１２は、パイプラインラッチ８１、８２を介してアドレス信号ＤＡを受信する。また、パイプラインラッチ８３を介して書き込みデータＷＤを受信する。そして、タグアレイ１１からのアクセスに応じてデータを保持し、またはデータを出力する。
【００６９】
レジスタキャッシュ１０からデータが読み出される場合、タグアレイ１１はアドレス信号ＲＡを受信する。タグアレイ１１はアドレス信号ＲＡに基づきヒットミス判定を行い、ヒット信号またはミス信号をアービタ２０及び制御部６０へ出力する。更にタグアレイ１１は、アドレス信号ＲＡに基づいてアドレス信号ＤＡを生成して、パイプラインラッチ８１、８２を介してデータアレイ１２へ出力する。その結果、データアレイ１２において、アドレス信号ＤＡに相当するメモリセルから読み出されたデータが、読み出しデータＣＲＤとして出力される。従って、レジスタキャッシュ１０からデータを読み出すには、レジスタキャッシュ１０にアドレス信号ＲＡを入力してから３サイクル（３ステージ）かかることになる。
【００７０】
他方、レジスタキャッシュ１０にデータが書き込まれる場合、タグアレイ１１はアドレス信号ＷＡ０〜ＷＡｗ−１を受信する。そしてアドレス信号ＷＡ０〜ＷＡｗ−１に基づいてアドレス信号ＷＤＡ０〜ＷＤＡｗ−１を生成して、パイプラインラッチ８１、８２を介してデータアレイ１２へ出力する。また、書き込みデータＷＤが、パイプラインラッチ８３を介してデータアレイ１２へ入力される。その結果、書き込みデータＷＤ０〜ＷＤｗ−１が、アドレス信号ＷＤＡ０〜ＷＤＡｗ−１に相当するメモリセルに書き込まれる。従って、レジスタキャッシュ１０にデータを書き込む場合、書き込みデータＷＤをレジスタキャッシュ（データアレイ１２）に入力する２サイクル前に、アドレス信号ＷＡがレジスタキャッシュ（タグアレイ１１）に入力される必要がある。なお、以下でもアドレス信号ＷＤＡ０〜ＷＤＡｗ−１を区別しない場合には、一括してアドレス信号ＷＤＡと呼ぶことにする。また、書き込みデータＷＤがパイプラインラッチ８３及びデータアレイ１２を介することなく選択回路４０に達するパスは、前述のバイパスネットワークである。
【００７１】
＜制御部６０について＞  
制御部６０は、タグアレイ１１から与えられるヒット／ミス判定結果に基づいて、データアクセスのスケジューリングを行う。データアクセスのスケジューリングの具体的な内容は、命令を実行するにあたって、各オペランドのデータをレジスタファイルとレジスタキャッシュ１０のいずれから読み出すかを決定すること、である。
【００７２】
なお以下では、パイプラインの第４ステージにおいて、レジスタキャッシュ１０のデータアレイ１２からデータが出力される場合を例に説明する。
【００７３】
＜プロセッサの動作について＞  
次に、本実施形態に係る上記プロセッサ１の動作について、図８及び図９を用いて説明する。図９は、プロセッサ１が行う動作のフローチャートである。
【００７４】
図示するように、まずパイプラインの第１ステージＳＴ１において、制御部６０が命令を発行する（ステップＳ１０）。これは第１の実施形態と同様である。
【００７５】
次に、第２ステージにおいて制御部６０は、データアクセスのスケジューリングを行う（ステップＳ２０）。すなわち、ステップＳ１０で発行されたアドレス信号ＲＡがパイプラインラッチ７０を介してタグアレイ１１に与えられる。これにより、タグアレイ１１においてヒットミス判定が行われ、この結果が制御部６０に与えられる。この結果に基づき、制御部６０は各オペランドにつき、データをレジスタファイル３０から読み出すべきなのか、またはレジスタファイル３０から読み出すべきなのかを決定する。
【００７６】
第２ステージＳＴ２に後続する第３、第４ステージＳＴ３、ＳＴ４では、キャッシュミスしたオペランド（ステップＳ２１、ＹＥＳ）についてのレジスタファイル３０へのデータアクセスがなされる（ステップＳ１３−１、Ｓ１３−２）。これは、第１の実施形態で説明したステップＳ１３と同じである。他方、キャッシュヒットしたオペランドについては（ステップＳ２１、ＮＯ）、第３ステージＳＴ３では何らの処理も行われず、第４ステージＳＴ４において、データアレイ１２からデータが読み出される（ステップＳ２２）。
【００７７】
そして第４ステージＳＴ４において、選択回路４０が各オペランドに対応するデータを選択し、読み出しデータＲＤとして出力する。その後は第１の実施形態と同様に、ステップＳ１５、Ｓ１６の処理が行われる。
【００７８】
＜パイプラインについて＞  
図１０は、本実施形態に係る上記動作の流れを時間軸に沿って示した概念図である。図中の第２ステージに記した“ＲＳ”は、制御部６０によりスケジューリングを行う（図９におけるステップＳ２０）ステージであることを示す。“ＲＲ／ＣＲ”は、レジスタファイル３０またはレジスタキャッシュ１０に対するデータアクセスを行う（ステップＳ１３−２、Ｓ２２）ステージであることを示す。その他は図３と同様である。
【００７９】
図示するように、第１ステージで制御部６０により命令発行された後（“ＩＳ”）、まず第２ステージでデータアクセスのスケジューリングが行われる（“ＲＳ”）。その後、第３ステージでレジスタファイル３０へのデータアクセスが可能とされる（“ＲＲ”）。引き続き、第４ステージでレジスタファイル３０またはレジスタキャッシュ１０に対するデータアクセスが可能とされる（“ＲＲ／ＣＲ”）。そして、複数の上記パイプラインが同時並行して実行される。以上のうち、第３ステージ以降の処理の流れは、第２ステージにおいて制御部６０によってスケジューリングされたものである。
【００８０】
図１１は、ある１つのあるパイプラインに着目し、キャッシュミスが発生した場合としない場合とにつき示している。図示するように、第２ステージでキャッシュミスが発生した場合には、第３、第４ステージでレジスタファイル３０へのデータアクセスが行われ、データはレジスタファイル３０から読み出される。レジスタキャッシュ１０に対しては、タグアレイ１１に対するアクセスは為されるが、データアレイ１２に対する読み出しアクセスは為されない。
【００８１】
これに対してキャッシュミスが発生しない場合には、第３ステージにおいては特に処理は行われず、次の第４ステージにおいて、レジスタキャッシュ１０のタグアレイ１２からデータが読み出される。但し、キャッシュミスが発生しない場合であっても、第３ステージが省略されるわけではない。キャッシュミスの発生の有無にかかわらず、パイプラインのステージ数は６段である。つまり第３ステージは、必要に応じてレジスタファイル３０へのアクセスを行うための専用のステージである。
【００８２】
なお、図１０及び図１１ではオペランドが１つの場合について示しているが、複数の場合も同様である。図１２は、オペランドが２つであり、一方につきキャッシュミスが発生し、他方については発生しない場合について示している。図１２において第３、第４ステージが２段になっているが、この２段のうちのそれぞれが各オペランドに対応する。
【００８３】
図示するように、上段に示すオペランドについてはキャッシュミスが発生していないので、第３ステージでは何らの処理も行われず、第４ステージでレジスタキャッシュ１０からデータが読み出される。これに対して下段に示すオペランドについてはキャッシュミスが発生しているので、第３、第４ステージにおいてレジスタファイル３０からのデータ読み出しが実行される。
【００８４】
＜効果＞
以上のように、この発明の第２の実施形態に係る半導体集積回路であると、第１の実施形態で説明した（１）の効果に加えて、下記（２）の効果が得られる。
【００８５】
（２）プロセッサの回路構成を簡略化出来る。  
第１の実施形態で説明したように、レジスタファイルのパイプライン化は、新たな問題を引き起こす。パイプライン化に固有の問題として、バイパスネットワーク（bypass network）の複雑化が挙げられる。これは、バイパスそのものがクリティカルであるため、非常に大きな問題となる。
【００８６】
バイパスネットワークの概念について、図６のパイプラインチャートを用いて説明する。命令Ｉｂが命令Ｉａに依存しており、命令Ｉａでの演算結果をオペランドに用いて命令Ｉｂが実行されると仮定する。すると、命令Ｉｂのレジスタキャッシュへのアクセスタイミング（“ＣＲ”）は、命令Ｉａの演算タイミング（“ＥＸ”）と同時であり、演算結果は未だレジスタキャッシュに書き込まれていない。よってこのような場合、バイパスネットワークを用いて、命令Ｉａに関する演算結果を直接演算器へ入力する（これをオペランドバイパスと呼ぶ）。
【００８７】
すなわち、パイプラインラッチを用意し、このパイプラインラッチに１サイクル前の演算器の演算結果をラッチさせる。そしてこれを命令Ｉｂの演算タイミングで演算器に入力する。バイパスネットワークは、上記パイプラインラッチ、信号線、及びデータを選択する選択回路などを含む。そしてパイプラインが深くなるほど、演算器の下流には、１、２、３、…サイクル前の実行結果を保持するパイプラインラッチが必要となり、それに伴い選択回路の規模も増加し、バイパスネットワークが複雑化する。そのため、場合によっては、バイパスネットワークは演算器本体に匹敵する規模の回路となる。
【００８８】
この点、本実施形態に係る構成であると、ヒット／ミス判定のタイミング（“ＲＳ”）と、データアレイ１２へのアクセスのタイミング（“ＲＲ／ＣＲ”）とを分離している。そのため、オペランドバイパスが必要な期間を短縮し、バイパスネットワークの規模を最小限に抑え、プロセッサの回路構成を簡略化出来る。この点につき、図１３を用いて説明する。図１３は、本実施形態に係るパイプラインチャートである。図中の命令Ｉｂ〜Ｉｄは命令Ｉａに依存するものとする。
【００８９】
図示するように、命令Ｉｂ、Ｉｃがデータアレイ１２へアクセスするタイミング（“ＲＲ／ＣＲ”）では、命令Ｉａの演算結果のレジスタキャッシュ１０への書き込み（“ＣＷ”）が完了していない。従って、命令Ｉｂ、Ｉｃは、オペランドバイパスによってデータを得る必要がある。
【００９０】
これに対して命令Ｉｄがデータアレイ１２へアクセスするタイミングでは、命令Ｉａの演算結果のレジスタキャッシュ１０への書き込みは、すでに完了している。従って、オペランドバイパスは不要である。
【００９１】
すなわち、図１３の場合にバイパスが必要なるのは、命令Ｉａの発行後の２サイクルだけで良い。これは、第２ステージにおけるレジスタキャッシュ１０へのアクセスではヒットミス判定のみが行われ、実際のデータアレイ１２へのアクセスはそれより後段の第４ステージで行われるからである。例えば、第２ステージでデータアレイ１２へのアクセスがなされる構成を仮定すれば、図１３の場合には命令Ｉａの発行後、４サイクル分のバイパスが必要となる。
【００９２】
このように、データアレイ１２へのアクセスタイミングを遅延させることで、オペランドバイパスが必要な期間を短縮し、バイパスネットワークの規模を最小限に抑え、プロセッサの回路構成を簡略化出来る。なお、上記実施形態では“ＲＲ／ＣＲ”のステージは“ＥＸ”ステージの直前であるが、必ずしも直前である必要は無い。しかし、オペランドバイパスを簡略化するという観点では、“ＲＲ／ＣＲ”のステージは後段であるほど良い。
【００９３】
なお，通常のセット・アソシアティブ構成をとるキャッシュではタグとデータアレイのアクセスはそれぞれ並列に行われるが、本実施形態のように逐次で行うことにより、アレイアクセス後のセレクタを省略出来る効果もある。
【００９４】
［第３の実施形態］  
次に、この発明の第３の実施形態に係る半導体集積回路について説明する。本実施形態は、上記第２の実施形態において、レジスタファイル３０に書き込むべきデータを一時的に保持可能なバッファを設けたものである。以下では、第２の実施形態と異なる点についてのみ説明する。
【００９５】
＜プロセッサの構成について＞  
図１４は、本実施形態に係るプロセッサ１のブロック図である。図示するように本実施形態に係るプロセッサ１は、第２の実施形態で説明した図８の構成において、更にライトバッファ（write buffer）９０を備えている。
【００９６】
ライトバッファ９０は、例えばＳＲＡＭ等の半導体メモリであり、演算器５０の演算結果を保持可能である。すなわち、書き込みデータＷＤ及び書き込みアドレスＷＡが、パイプラインラッチ８４を介して入力されることで、ライトバッファ９０に対して演算器５０の演算結果が書き込まれる。ライトバッファ９０への演算結果の書き込みは、第６ステージにおいて、レジスタキャッシュ１０への書き込みと同時に行われる。
【００９７】
＜プロセッサの動作について＞  
次に、本実施形態に係る上記プロセッサ１の大まかな動作は、第２の実施形態で説明した図９と同様であり、第２の実施形態と異なる点は、図９におけるステップＳ１６の処理内容のみである。従って、以下ではステップＳ１６についてのみ説明する。図１５は、本実施形態におけるステップＳ１６の詳細を示すフローチャートである。
【００９８】
ステップＳ１６で演算が終了した後、演算結果が書き込みデータＷＤとして、パイプラインラッチ８３、８４を介して、それぞれデータアレイ１２及びライトバッファ９０に与えられる。そして、演算結果がデータアレイ１２及びライトバッファ９０に書き込まれる（ステップＳ３０）。
【００９９】
その後、ステップＳ３０を実行したサイクルに後続するサイクルにおいて、レジスタファイル３０のポートが空いていれば（ステップＳ３１、ＹＥＳ）、ライトバッファ９０内の演算結果が、パイプラインラッチ７４及びアービタ２０を介してレジスタファイル３０に書き込まれる（ステップＳ３２）。ポートが空いていなければ（ステップＳ３１、ＮＯ）、ポートが空くまで待機し（ステップＳ３３）、ポートが空いた時点でレジスタファイル３０へ書き込む（ステップＳ３２）。
【０１００】
＜効果＞  
以上のように、この発明の第３の実施形態に係る半導体集積回路であると、第１、第２の実施形態でそれぞれ説明した（１）及び（２）の効果に加えて、下記（３）の効果が得られる。
【０１０１】
（３）レジスタファイルのポートを有効利用出来る。  
第１の実施形態において説明したように、レジスタファイルの回路面積縮小のためには、ポート数を削減することが有効である。しかし、ポート数を削減すれば、当然ながら個々のポートの使用率は高くなり、パイプラインをストールさせる必要性も高まる。
【０１０２】
この点、本実施形態に係る構成であると、演算結果を一旦ライトバッファ９０に格納し、レジスタファイル３０のポートが空いている期間にレジスタファイル３０への書き込みを行っている。
【０１０３】
レジスタファイル３０において、データの読み出しアクセスは、パイプラインのストールを回避する観点から優先されなければならない。しかし、レジスタファイル３０への書き込みが遅れても、パイプラインに与える悪影響は少ない。従って、パイプラインのストールを回避しつつ、レジスタファイル３０のポートを有効に利用出来る。
【０１０４】
［第４の実施形態］  
次に、この発明の第４の実施形態に係る半導体集積回路について説明する。本実施形態は、上記第３の実施形態において、ライトバッファ９０に必要なデータが保持されている際における、データアクセスのスケジューリングに関するものである。特に、データをいずれのメモリから読み出すかを決定する方法に関する。
【０１０５】
本実施形態に係るプロセッサ１の大まかな動作は、第２の実施形態で説明した図９及び第３の実施形態で説明した図１５と同様であり、第２、第３の実施形態と異なる点は、図９におけるステップＳ２０の処理内容のみである。従って、以下ではステップＳ２０についてのみ説明する。図１６は、本実施形態におけるステップＳ２０の詳細を示すフローチャートである。
【０１０６】
図示するように制御部６０は、必要なデータがレジスタキャッシュ１０にある場合には（ステップＳ４０、ＹＥＳ）、データの読み出し元をレジスタキャッシュ１０に決定する（ステップＳ４１）。データがレジスタキャッシュ１０に無く（ステップＳ４０、ＮＯ）、且つライトバッファ９０にも無い場合には（ステップＳ４２、ＮＯ）、データの読み出し元をレジスタファイル３０に決定する（ステップＳ４３）。データがレジスタキャッシュ１０に無く（ステップＳ４０、ＮＯ）、且つライトバッファ９０にある場合には（ステップＳ４２、ＹＥＳ）、制御部６０はパイプラインをストールさせる（ステップＳ４４）。そして、ストールさせている期間にライトバッファ９０内のデータをレジスタファイル３０に書き込み、改めてレジスタファイル３０からデータを読み出す（ステップＳ４５）。
【０１０７】
＜効果＞  
本実施形態に係る構成であると、上記第１乃至第３の実施形態で説明した（１）乃至（３）の効果に加えて、下記（４）の効果が得られる。
【０１０８】
（４）ライトバッファを小サイズ且つ低コストで実現出来る。  
第３の実施形態で説明したように、レジスタファイル３０への演算結果の書き込みは、一旦ライトバッファ９０上へバッファリングされた後、サイクル・スチールによって行われる。
【０１０９】
この際、レジスタキャッシュ１０においてキャッシュミスが発生し、且つアクセス先がライトバッファ９０上のあるデータであるような場合がある。この場合、本実施形態ではバックエンドをストールさせて、ライトバッファ９０のデータをレジスタファイル３０に書き込んだ後、改めてレジスタファイル３０からデータを読み出す。従ってライトバッファ９０には、自身へのライトポートと、レジスタファイル３０への書き込み時データを出力するためのポートとがあれば足り、ライトバッファ９０からデータを直接読み出すための専用のポートを設ける必要が無い。ポートの削減は、レジスタファイルと同様に回路面積・コストの削減につながるため、ライトバッファ９０を小サイズ且つ低コストで実現出来る。そしてこのことも、プロセッサ１の回路面積の削減に寄与する。
【０１１０】
ライトバッファ９０にデータが保持されているケースでは、同じデータがレジスタキャッシュ１０にも保持されていることが通常である。なぜなら、レジスタキャッシュ１０への書き込みとライトバッファ９０への書き込みとは、同時に行われるからである。従って、例えライトバッファ９０上のデータにアクセスがなされたとしても、その場合にはレジスタキャッシュ１０から当該データを読み出せることが通常であり、バックエンドをストールさせなければならない事態が発生することは極めて稀である。よって、本実施形態のように、場合によってはストールさせるようにしたとしても、実使用上、問題となることは殆ど無い。
【０１１１】
なお、上記の通りライトバッファ９０の回路規模を相当に縮小出来るため、ライトバッファ９０への書き込みの際のタイミングマージンが増加する。従って、プロセッサ１の動作信頼性が向上される。更に、ライトバッファ９０からデータを取り出し、レジスタファイル３０へデータを書き込む際、通常よりも時間（サイクル数）をかけて行うことで、レジスタファイル３０への書き込みの際のタイミングマージンも増加させることが出来る。このことも、プロセッサ１の動作信頼性向上に寄与する。本方法であると、ライトバッファ９０からレジスタファイル３０にデータを書き移すための時間が長くなるが、上記理由により、実際上、性能に影響を与えるものでは無い。
【０１１２】
［第５の実施形態］  
次に、この発明の第５の実施形態に係る半導体集積回路について説明する。本実施形態は、上記第２乃至第４の実施形態のいずれかにおけるデータアクセスのスケジューリングに関するものである。特に、データの読み出しをいずれのステージで行うかを決定する方法に関する。
【０１１３】
図１７は、本実施形態に係るパイプラインチャートである。本実施形態に係るレジスタファイル３０は、１サイクルでデータを読み出し可能とされている。上記第１乃至第４の実施形態に係る構成であると、ポート数を削減することでレジスタファイル３０の回路面積を削減出来る。その結果、レジスタファイル３０をパイプライン化すること無く、１サイクルでデータアクセス出来るようにすることが可能となる。
【０１１４】
図示するように、本実施形態に係るパイプラインチャートは、第２の実施形態で説明した図１０のパイプラインチャートにおいて、第３ステージをレジスタファイル３０に対するデータアクセス用のステージとし、第４ステージを、レジスタファイル３０及びレジスタキャッシュ１０に対するデータアクセス用のステージとしたものである。つまり、１つの命令につき、レジスタファイル３０へのデータアクセス可能なステージが２つ設けられている。言い換えれば、レジスタファイル３０からデータを読み出す機会が２回設けられている。そして、いずれのステージでレジスタファイル３０へのデータアクセスを行うかについて、第２ステージのスケジューリングで制御部６０が決定する。この際制御部６０は、ある命令に着目した場合に、他の命令によってレジスタファイル３０の全てのポートが使用されているステージ以外のステージを選んで、データアクセスのタイミングを決定する。以下、具体的に説明する。
【０１１５】
図１８は本実施形態に係るパイプラインチャートであり、２つの命令Ｉａ、Ｉｂが並行して実行されている様子を示す。図示するように、命令Ｉａが第４ステージでレジスタファイル３０を使用中であり、レジスタファイル３０の全てのポートが使用中であったとする。すると、命令Ｉｂの第３ステージは命令Ｉａの第４ステージと同時に実行されるので、命令Ｉｂは第３ステージではレジスタファイル３０にアクセス出来ない。従って制御部６０は、命令Ｉｂのレジスタファイル３０へのアクセスを第４ステージで行うようにスケジューリングする。
【０１１６】
＜効果＞  
本実施形態に係る構成であると、上記第１乃至第４の実施形態で説明した（１）乃至（４）の効果に加えて、下記（５）の効果が得られる。
【０１１７】
（５）レジスタファイルの空きポートを有効に活用出来る。  
上記第１乃至第３の実施形態に係る構成によれば、レジスタファイル３０のレイテンシを短縮化出来る。すると、レジスタファイル３０へのアクセス機会を複数設けることが出来るようになる。
【０１１８】
本実施形態に係る方法であると、レジスタファイル３０への複数のアクセス機会のうち、レジスタファイル３０の全てのポートが他の命令によって使用されていないタイミングでレジスタファイル３０にアクセスするよう、スケジューリングが行われる。従って、レジスタファイル３０へのアクセスが一度に集中した場合であっても、レジスタファイル３０へのアクセスを複数の機会において分散して行うことが可能となり、レジスタファイル３０の空きポートを有効に活用出来る。この結果，レジスタファイル３０のポート数を更に削減することができ、レジスタファイル３０の回路規模を更に縮小出来る。
【０１１９】
なお、上記実施形態では１サイクルでデータアクセス可能なレジスタファイルの場合を例に挙げて説明したが、２サイクル以上必要とする場合であっても適用出来る。このような場合のパイプラインチャートを図１９に示す。
【０１２０】
図示するように、第３−１ステージ及び第４−１ステージにおいて最初のレジスタファイルアクセスの機会が与えられ、引き続き第３−２ステージ及び第４−２ステージにおいて２回目のレジスタファイルアクセスの機会が与えられる。このような場合には、図２０に示すパイプラインチャートのようにスケジューリングが行われる。例えば、命令Ｉａが第３−１ステージ及び第４−１ステージでレジスタファイル３０にアクセスするとする。すると、命令Ｉｂについては、第３−２ステージ及び第４−２ステージにおいてレジスタファイル３０にアクセスするように、スケジューリングが行われる。
【０１２１】
以上のように、この発明の第１乃至第５の実施形態によれば、プロセッサ１は、データを保持する第１メモリ（レジスタファイル３０）と、前記第１メモリに対するキャッシュメモリとして機能する第２メモリ（レジスタキャッシュ１０）とを備え、データに対する読み出し処理と書き込み処理とを複数の処理ステージによりパイプライン実行する半導体集積回路である。そして、読み出し処理の対象となるデータを第１メモリ３０から読み出すと決定された場合に、該データの第１メモリ３０からの読み出しを処理ステージのいずれか（ステージ“ＲＲ”、“ＲＲ／ＣＲ”）において行う。
【０１２２】
上記構成により、レジスタファイル３０のポート数を削減し、その回路面積を削減出来る。また、ステージ“ＲＲ”、“ＲＲ／ＣＲ”を設けることで、キャッシュミスが発生した場合であってもパイプラインの乱れを回避出来る。すなわち、性能低下を招くことなく回路面積を削減出来る半導体集積回路を提供出来る。
【０１２３】
なお、上記第３乃至第５の実施形態は、第２の実施形態で説明したように第２ステージでスケジューリングが行われる場合を前提に説明したが、第１の実施形態に適用することも可能である。すなわち、図３に示すパイプライン動作を行うプロセッサにおいて、ライトバッファ９０を設けたり、または第４、第５の実施形態で説明したスケジューリングを行ったりしても良い。
【０１２４】
また、リフィルを行うか否かは適宜選択出来る。リフィルとは、キャッシュミスが発生して、必要なデータをレジスタファイル３０から読み出した際に、このデータをレジスタキャッシュ１０に書き込むことである。通常、１度アクセスされたデータは近い時間に再度アクセスされる可能性が高いため、リフィルを行うことでヒット率を向上出来る。リフィルを行う場合には、レジスタキャッシュ１０にリフィル用のポートを設けなければならず、レジスタキャッシュ１０の回路面積は増大する。しかし、レジスタキャッシュ１０のヒット率は高まるため、ストールが発生する可能性は低下する。他方、リフィルしなければキャッシュミス率は高まるが、レジスタキャッシュ１０の回路面積は小さく出来る。また、例えキャッシュミス率が高まっても、レジスタファイル３０へのアクセスは大きくは増加しないため、実使用上問題とはならない。更には、リフィルのための制御が不要となる。よって、リフィルを行うか否かは、プロセッサの仕様によって適宜選択すれば良い。
【０１２５】
また、上記実施形態では、レジスタファイル３０及びレジスタキャッシュ１０を備えたプロセッサ１を例に挙げて説明した。しかし、レジスタファイル３０及びレジスタキャッシュ１０に限らず、これらは一般的な半導体メモリであって良い。すなわち、レジスタファイル３０がデータを保持する主たるメモリであり、且つレジスタキャッシュ１０がレジスタファイル３０のキャッシュメモリである場合に限られるものでは無い。レジスタファイル３０及びレジスタキャッシュ１０は、データを保持するメモリでありさえすれば、上記実施形態が適用出来る。
【０１２６】
なお、本願発明は上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出されうる。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出されうる。
【図面の簡単な説明】
【０１２７】
【図１】この発明の第１の実施形態に係るプロセッサのブロック図。
【図２】この発明の第１の実施形態に係るプロセッサの動作の流れを示すフローチャート。
【図３】この発明の第１の実施形態に係るプロセッサのパイプラインチャート。
【図４】この発明の第１の実施形態に係るプロセッサのパイプラインチャート。
【図５】この発明の第１の実施形態に係るプロセッサのパイプラインチャート。
【図６】従来のプロセッサのパイプラインチャート。
【図７】この発明の第２の実施形態に係るレジスタキャッシュの概念図。
【図８】この発明の第２の実施形態に係るプロセッサのブロック図。
【図９】この発明の第２の実施形態に係るプロセッサの動作の流れを示すフローチャート。
【図１０】この発明の第２の実施形態に係るプロセッサのパイプラインチャート。
【図１１】この発明の第２の実施形態に係るプロセッサのパイプラインチャート。
【図１２】この発明の第２の実施形態に係るプロセッサのパイプラインチャート。
【図１３】この発明の第２の実施形態に係るプロセッサのパイプラインチャート。
【図１４】この発明の第３の実施形態に係るプロセッサのブロック図。
【図１５】この発明の第３の実施形態に係るプロセッサの動作の流れを示すフローチャート。
【図１６】この発明の第４の実施形態に係るプロセッサの動作の流れを示すフローチャート。
【図１７】この発明の第５の実施形態に係るプロセッサのパイプラインチャート。
【図１８】この発明の第５の実施形態に係るプロセッサのパイプラインチャート。
【図１９】この発明の第５の実施形態の変形例に係るプロセッサのパイプラインチャート。
【図２０】この発明の第５の実施形態の変形例に係るプロセッサのパイプラインチャート。
【符号の説明】
【０１２８】
１…プロセッサ、１０…レジスタキャッシュ、１１…タグアレイ、１２、３２…データアレイ、２０…アービタ、３０…レジスタファイル、３１…デコーダ、４０…選択回路、５０…演算器、６０…制御部、７０〜８４…パイプラインラッチ、９０…ライトバッファ
【図１】
2010113470.tif 000003
【図２】
2010113470.tif 000004
【図３】
2010113470.tif 000005
【図４】
2010113470.tif 000006
【図５】
2010113470.tif 000007
【図６】
2010113470.tif 000008
【図７】
2010113470.tif 000009
【図８】
2010113470.tif 000010
【図９】
2010113470.tif 000011
【図１０】
2010113470.tif 000012
【図１１】
2010113470.tif 000013
【図１２】
2010113470.tif 000014
【図１３】
2010113470.tif 000015
【図１４】
2010113470.tif 000016
【図１５】
2010113470.tif 000017
【図１６】
2010113470.tif 000018
【図１７】
2010113470.tif 000019
【図１８】
2010113470.tif 000020
【図１９】
2010113470.tif 000021
【図２０】
2010113470.tif 000022