(57)【特許請求の範囲】
【請求項１】
演算ユニットと、前記演算ユニットとの間でデータの入出力をする一次キャッシュメモリと、前記一次キャッシュメモリとの間でデータを入出力する二次キャッシュメモリとを含むキャッシュシステムにおいて、
前記一次キャッシュメモリは、第１データサイズの単位データごとに与えられるアクセスアドレスに従って記憶をする記憶手段と、二つの単位データをそれぞれ第１および第２の入力ポートレジスタにより入力し、前記第１および第２の入力ポートレジスタを介してそれぞれ入力した前記二つの単位データを前記アクセスアドレスに従って前記記憶手段における連続領域に同時に書き込む書込手段と、前記書込手段により前記記憶手段の連続領域に同時に書き込まれた前記二つの単位データをそれぞれ第１および第２の出力ポートレジスタに読み出して出力する出力手段とを有する多ポート記憶部を複数有し、
前記一次キャッシュメモリは、さらに、前記第１データサイズに対して任意倍数の第２データサイズを有する対象データを前記複数の多ポート記憶部の記憶手段に書き込みかつ読み込むための前記アクセスアドレスを生成するアドレス生成手段と、当該アドレス生成手段により生成されたアドレスを変換するアドレス変換手段とを有し、
前記第１データサイズに対して任意倍数の第２データサイズを有する対象データを前記単位データの列に分割して前記一次キャッシュメモリに書き込み動作するときに、前記対象データを前記単位データの列に連続的に分割して対象単位データ列とし、前記アドレス生成手段および前記アドレス変換手段により与えられた前記アクセスアドレスに従って、前記複数の多ポート記憶部のうちの第１の多ポート記憶部の前記第１および第２の入力ポートレジスタに、前記対象単位データ列に含まれる第１および第２の単位データをそれぞれ時間連続的に書き込む第１書き込み動作と、前記アドレス生成手段および前記アドレス変換手段により与えられた前記アクセスアドレスに従って、前記複数の多ポート記憶部のうちの第２の多ポート記憶部の前記第１および第２の入力ポートレジスタに、前記対象単位データ列の中で前記第１または第２の単位データに連続する第３および第４の単位データをそれぞれ時間連続的に書き込む第２書き込み動作とを並行して行うことにより、前記対象単位データ列に含まれる第１ないし第４の単位データを前記第１及び第２の多ポート記憶部に分散して同時に記憶し、
前記対象単位データ列を前記一次キャッシュメモリから読み出し動作するときに、前記アドレス生成手段および前記アドレス変換手段により与えられた前記アクセスアドレスに従って、前記第１の多ポート記憶部の前記第１および第２の出力ポートレジスタに前記第１および第２の単位データを読み出す第１読み出し動作と、前記アドレス生成手段および前記アドレス変換手段により与えられた前記アクセスアドレスに従って、前記第２の多ポート記憶部の前記第１および第２の出力ポートレジスタに前記第３および第４の単位データを読み出す第２読み出し動作とを並行して行うことにより、前記対象単位データ列に含まれる第１ないし第４の単位データを前記第１および第２の多ポート記憶部から同時に読み出す
ことを特徴とするキャッシュシステム。
【請求項２】
前記アドレス生成手段は、前記第１の多ポート記憶部に記憶された前記第１または第２の単位データを読み出す第１アドレスを生成し、
前記アドレス変換手段は、前記アドレス生成手段により生成された前記第１アドレスを変換して、前記第１の多ポート記憶部に記憶された前記第１または第２の単位データと前記対象単位データ列の中で連続した前記第３または第４の単位データを前記第２の多ポート記憶部から読み出す第２アドレスにする
ことを特徴とする請求項１に記載のキャッシュシステム。
【請求項３】
前記各多ポート記憶部における出力ポートから出力された単位データを入力し、前記アドレス生成手段又は前記アドレス変換手段から供給されたアドレスに基づいて、何れかの単位データを選択するセレクタを複数有し、
当該セレクタにより選択された多ポート記憶部に記憶された単位データを、前記第２データサイズ分に亘り連続的に前記演算ユニットに出力する
ことを特徴とする請求項２に記載のキャッシュシステム。
【請求項４】
各多ポート記憶部における出力ポートから出力された単位データを入力し、前記アドレス生成手段又は前記アドレス変換手段から供給されたアドレスに基づいて、何れかの単位データを選択する第１セレクタと、
前記第１セレクタにより選択されたウエイ数分の単位データを入力し、ウエイを選択する命令に従って、何れかの単位データを選択する第２セレクタとを有し、
前記第２セレクタにより選択された多ポート記憶部に記憶された単位データを、前記第２データサイズ分に亘り連続的に前記演算ユニットに出力する
ことを特徴とする請求項２に記載のキャッシュシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算に用いられるデータを記憶するキャッシュシステムに関する。
【背景技術】
【０００２】
コンピュータシステムにおいては、一般に、主記憶とは別に小容量で高速なキャッシュメモリが設けられる。キャッシュメモリでは、キャッシュミスが発生した場合に主記憶にアクセスすることを抑制するために、キャッシュメモリを多階層化している。例えば、１次キャッシュと主記憶メモリとの間に、主記憶よりは高速にアクセスできる２次キャッシュを設けている。
【０００３】
従来より、主記憶メモリは、ＣＰＵとのデータ転送の高速化技術として、ＤＤＲ２（Double Data Rate ２）と称される規格に従って動作していた。ＤＤＲ２は、コンピュータ内の各回路間で同期を取る際に、クロック信号の立上がりと立下がりとの両方を利用する方式である。ＤＤＲ２によれば、クロックの立ち上がりあるいは立下りの片方のみで各回路間の同期をとる場合と比べて、単位時間あたりの処理効率を２倍に高めることができる。ＤＤＲ２規格におけるメモリアクセスの最小単位は６４バイトである。これに応じて、キャッシュメモリに格納するデータサイズ（ラインサイズ）は、主記憶メモリに対するメモリアクセスの最小単位に合せて６４バイトとしていた。
【０００４】
キャッシュメモリに関する技術は、例えば特許文献１に開示される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−２７８８３６公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、近年、第３世代のＤＤＲとして、ＤＤＲ３と称される規格が用いられるようになった。ＤＤＲ３は、ＤＤＲ２と比較すると、主記憶メモリ外部と主記憶メモリ内部の周波数比が同じであっても、１サイクルに読み出す主記憶メモリ内部のデータ幅が２倍の１２８バイトになっている。このようなＤＤＲ３の性能を最大限に引き出すためには、ＤＤＲ２の２倍のデータ幅で主記憶メモリにアクセスする必要がある。
【０００７】
上述したように、主記憶メモリへ１２８バイトでアクセスする場合、キャッシュメモリのラインサイズがＤＤＲ２と同様の６４バイトのままであると、キャッシュコヒーレンシ制御が複雑化する。キャッシュコヒーレンシ制御とは、主記憶メモリの記録情報とキャッシュメモリの記録情報との同期を取るための処理である。このため、キャッシュシステムのラインサイズを、主記憶メモリへアクセスするバイト数と同じ１２８バイトに拡張することが考えらる。
【０００８】
しかし、キャッシュシステムのラインサイズを２倍に拡張にすると、キャッシュメモリへのデータの登録処理や、リプレースラインの書き戻し処理（ムーブアウト）に必要なサイクル数も２倍になってしまう。キャッシュへの登録やムーブアウトの処理回数が増加してしまうと、パイプライン処理に対するキャッシュメモリでの登録処理、ムーブアウト処理の支配率が増加してしまう。その結果、キャッシュメモリに対するデータの読み出し、書き込みをするためのパイプライン処理の頻度が低下してしまう。
【０００９】
本発明は、上述した実情に鑑みて提案されたものであり、キャッシュメモリのラインサイズが拡張された場合であっても、キャッシュメモリ内におけるデータの登録、書き戻しに要する処理時間を拡張前と同じとすることを目的とする。
【課題を解決するための手段】
【００１０】
キャッシュシステムは、演算ユニットと、当該演算ユニットとの間でデータの入出力をする一次キャッシュメモリと、当該一次キャッシュメモリとの間でデータを入出力する二次キャッシュメモリとを含む。
【００１１】
一次キャッシュメモリは、第１データサイズの単位データごとに与えられるアクセスアドレスに従って記憶をする記憶手段と、二つの単位データをそれぞれ第１および第２の入力ポートレジスタにより入力し、第１および第２の入力ポートレジスタを介してそれぞれ入力した二つの単位データをアクセスアドレスに従って記憶手段における連続領域に同時に書き込む書込手段と、書込手段により記憶手段の連続領域に同時に書き込まれた二つの単位データをそれぞれ第１および第２の出力ポートレジスタに読み出して出力する出力手段とを有する多ポート記憶部を複数有する。一次キャッシュメモリは、さらに、第１データサイズに対して任意倍数の第２データサイズを有する対象データを複数の多ポート記憶部の記憶手段に書き込みかつ読み込むためのアクセスアドレスを生成するアドレス生成手段と、アドレス生成手段により生成されたアドレスを変換するアドレス変換手段とを有する。
【００１２】
上述の課題を解決するために、キャッシュシステムは、第１データサイズに対して任意倍数の第２データサイズを有する対象データを単位データの列に分割して一次キャッシュメモリに書き込み動作するときに、対象データを単位データの列に連続的に分割して対象単位データ列とし、アドレス生成手段およびアドレス変換手段により与えられたアクセスアドレスに従って、複数の多ポート記憶部のうちの第１の多ポート記憶部の第１および第２の入力ポートレジスタに、対象単位データ列に含まれる第１および第２の単位データをそれぞれ時間連続的に書き込む第１書き込み動作と、アドレス生成手段およびアドレス変換手段により与えられたアクセスアドレスに従って、複数の多ポート記憶部のうちの第２の多ポート記憶部の第１および第２の入力ポートレジスタに、対象単位データ列の中で第１または第２の単位データに連続する第３および第４の単位データをそれぞれ時間連続的に書き込む第２書き込み動作とを並行して行うことにより、対象単位データ列に含まれる第１ないし第４の単位データを第１及び第２の多ポート記憶部に分散して同時に記憶する。
また、対象単位データ列を一次キャッシュメモリから読み出し動作するときに、アドレス生成手段およびアドレス変換手段により与えられたアクセスアドレスに従って、第１の多ポート記憶部の第１および第２の出力ポートレジスタに第１および第２の単位データを読み出す第１読み出し動作と、第２の多ポート記憶部の第１および第２の出力ポートレジスタに第３および第４の単位データを読み出す第２読み出し動作とを並行して行うことにより、対象単位データ列に含まれる第１ないし第４の単位データを第１および第２の多ポート記憶部から同時に読み出す。
【発明の効果】
【００１３】
上記の手段を含むキャッシュシステムによれば、複数の多ポート記憶部により、複数のレジスタによって第１データサイズのデータを同時に入力することにより記憶手段における連続領域に書き込む。これにより、上記手段を含むキャッシュシステムによれば、２次キャッシュと１次キャッシュの間のデータバス幅は変えないで、１次キャッシュのラインサイズが６４バイトから１２８バイトに拡張された場合においても１次キャッシュの登録（および掃きだし）に要する処理時間、言い換えるとキャッシュ占有率を同じにすることができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施形態によるＣＰＵの概略構成を示すブロック図である。
【図２】本発明の実施形態によるＣＰＵの機能的な構成を示すブロック図である。
【図３】本発明の実施形態による一次データキャッシュメモリのブロック配置を示す図であり、（Ａ）はウエイ（０）のデータ配置、（Ｂ）はウエイ（１）のデータ配置、（Ｃ）はブロックに対するアドレス、を示す。
【図４】本発明の実施形態による一次データキャッシュメモリにおけるウエイ構成を示す図である。
【図５】本発明の実施形態による一次データキャッシュメモリに含まれる２ポートＲＡＭの構成を示す回路図である。
【図６】本発明の実施形態による一次データキャッシュメモリに対して１２８バイトデータを書き込むときのタイミングチャートを示すであり、上段は比較例の動作、下段は本実施形態の動作を示す。
【図７】本発明の実施形態による一次データキャッシュメモリに対するデータの書込動作を示すブロック図である。
【図８】本発明の実施形態による一次データキャッシュメモリからデータを読み出す動作を示すブロック図である。
【図９】比較例として示す一次データキャッシュメモリに対するデータの書込動作を示すブロック図である。
【図１０】本発明の実施形態による一次データキャッシュメモリからデータを読み出す時に当該一次データキャッシュメモリにアドレスを与える様子を示すブロック図である。
【図１１】生成されたアドレスの変換を説明する図である。
【図１２】２ポートＲＡＭごとに、供給されるアドレスとブロックとの関係を示す図である。
【図１３】生成されたアドレス及び変換されたアドレスによって各２ポートＲＡＭに対する読み出し動作を示す図である。
【図１４】生成されたアドレス及び変換されたアドレスによって各２ポートＲＡＭに対する読み出し動作を示す他の図である。
【図１５】生成されたアドレス及び変換されたアドレスによって各２ポートＲＡＭに対する読み出し動作を示す他の図である。
【図１６】複数の２ポートＲＡＭから演算・命令ユニットに１６バイトデータを供給する構成を示す回路図である。
【図１７】複数の２ポートＲＡＭから演算・命令ユニットに１６バイトデータを供給する他の構成を示す回路図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について図面を参照して説明する。
【００１６】
本発明の実施形態として示すキャッシュシステムは、例えば図１に示すような計算機の中央処理装置（ＣＰＵ（Central Processing Unit））１（以下、「ＣＰＵ」と呼ぶ。）に含まれる。ＣＰＵ１は、命令ユニット（ＩＵ）２と、演算ユニット（ＥＵ）３と、一次データキャッシュメモリ（Ｌ１Ｄ＄）４と、一次命令キャ  ッシュメモリ（Ｌ１Ｉ＄）５と、二次キャッシュメモリ（Ｌ２＄）６とを含む。
【００１７】
図１に示す構成のうち、キャッシュシステムは、一次データキャッシュメモリ４と、一次命令キャッシュメモリ５と、二次キャッシュメモリ６とを含む。キャッシュシステムは、図１には図示しない主記憶メモリが記憶するデータの一部を、一次データキャッシュメモリ４及び二次キャッシュメモリ６にコピーする。このようなデータコピーにより、いずれかのキャッシュメモリにデータが記憶されている場合、キャッシュシステムは、データをアクセスする場合には、主記憶メモリからではなくキャッシュメモリからデータを読み出すことで、高速な情報の読み出しを可能とする。
【００１８】
なお、図１には、１つの１次キャッシュと１つの２次キャッシュとがＣＰＵに設けられた構成を例として示すが、キャッシュの階層の数及び各階層でのキャッシュの数は図１に示す例に限定されるものではない。
【００１９】
一次データキャッシュメモリ４及び二次キャッシュメモリ６は、主記憶メモリのコピーを持つ機能を有する。ＣＰＵ１内では、演算ユニット３と一次データキャッシュメモリ４との間でデータを入出力する。
【００２０】
二次キャッシュメモリ６は、一次データキャッシュメモリ４との間でデータの入出力を行うと共に、主記憶メモリとの間でデータの入出力を行う。二次キャッシュメモリ６は、一次データキャッシュメモリ４に書き込むべきデータを主記憶から読み出して、一次データキャッシュメモリ４に格納させる。
【００２１】
このような一次データキャッシュメモリ４及び二次キャッシュメモリ６は、基本的に主記憶メモリと同じデータを持ち、演算によりデータが書きかえられる場合(ストア)には主記憶メモリへのデータの書き戻しを行う。命令・データは、主記憶メモリ、二次キャッシュメモリ６、一次データキャッシュメモリ４、命令ユニット２及び演算ユニット３の順で流れ、ストアによりデータが書き換えられた場合にライトバックと呼ばれる主記憶への書き戻しが行なわれる。
【００２２】
以下、簡単な１次キャッシュの役割を説明する。一次データキャッシュメモリ４は、主記憶メモリから読み出した処理すべき命令を一時的に格納するものである。主記憶メモリから一次命令キャッシュメモリ５に格納された命令は命令ユニット２に送られてデコードされ、演算ユニット１にて処理される。
【００２３】
一次データキャッシュメモリ４は、主記憶メモリから演算処理データの読み書きを実行するために読み出したデータを一時的に格納するものである。一次データキャッシュメモリ４に格納されたデータは演算ユニット１にロードされる。演算ユニット１は、ロードされたデータを用いて演算処理を行ない、演算結果となるデータを主記憶メモリに反映させる（ライトバック）。
【００２４】
図１のＣＰＵ１は、主記憶メモリとの間で決まったデータサイズ単位でデータを入出力する。例えば、主記憶メモリ内部の１サイクルに読み出すデータ幅は、１２８バイトになっている。このデータサイズは、１サイクルで読み出されるデータ幅に対応した大きさである。１サイクルに読み出すデータ幅は、本実施形態ではいわゆるＤＤＲ３規格に準拠したものである。なお、以下の説明では、ＣＰＵ１が主記憶メモリとの間で１２８バイト単位でデータを入れ替える例について説明する。しかし、これ以外のデータ幅であっても、以下に説明するキャッシュシステムの動作は適用可能である。
【００２５】
図１のＰＵ１は、例えば図２に示すように、各部間で転送されるデータ幅が設定されている。命令ユニット２と演算ユニット３とを含む演算・命令ユニット（ＥＵ／ＩＵ）１１は、一次データキャッシュメモリ４との間で、１６バイトのデータ幅でデータのストア、ロードを行なう。
【００２６】
また、二次キャッシュメモリ６から一次データキャッシュメモリ４にデータを転送する転送バス幅は３２バイトである。そのため、二次キャッシュメモリ６から一次データキャッシュメモリ４にデータが書き込まれる場合（ムーブイン）には、書き込みデータ（ムーブインデータ）は、３２バイト単位で二次キャッシュメモリ６から読み出される。
【００２７】
二次キャッシュメモリ６から読み出されたムーブインデータは、ＥＣＣチェック／訂正／パリティ生成部１２に供給される。ＥＣＣチェック／訂正／パリティ生成部１２は、二次キャッシュメモリ６から供給されたムーブインデータに対するエラー訂正コード（ＥＣＣ：（Error Correction Codes））の検査を行い、ムーブインデータに対するパリティを生成する。ＥＣＣチェック／訂正／パリティ生成部１２によりパリティが生成されたムーブインデータは、一時的にムーブインデータレジスタ（ＭＩＤＲ(Move In Data Register)）１３に格納される。
【００２８】
ムーブインデータレジスタ１３に格納されたムーブインデータは、一次データキャッシュメモリ４に格納される。図２では、ムーブインデータレジスタ１３に格納されたムーブインデータは、３２バイトの転送バス幅で一次データキャッシュメモリ４に転送され、一次データキャッシュメモリ４に書き込まれる。
【００２９】
同様に、一次データキャッシュメモリ４に格納されたデータを二次キャッシュメモリ６に退避させる場合、言い換えれば一次データキャッシュメモリ４から二次キャッシュメモリ６にデータが書き込まれる）場合（ムーブアウトには、書き込みデータであるムーブアウトデータは、３２バイトの転送バス幅で一次データキャッシュメモリ４から読み出される。
【００３０】
一次データキャッシュメモリ４から読み出されたムーブアウトデータは、ＥＣＣチェック／訂正部１４に供給される。ＥＣＣチェック／訂正部１４は、一次データキャッシュメモリ４から二次キャッシュメモリ６へ送られるムーブアウトデータに対するＥＣＣのチェックを行う。ムーブアウトデータは、エラーチェック及び訂正の処理が施された後、ムーブアウトデータレジスタ（ＭＯＤＲ(Move Out Data Register)）１５に一時的に格納される。
【００３１】
ムーブアウトデータレジスタ１５に格納されたムーブアウトデータは、二次キャッシュメモリ６により読み込まれ、二次キャッシュメモリ６に格納される。ムーブアウトデータレジスタ１５と二次キャッシュメモリ６との間の転送バス幅は１６バイトなので、ムーブアウトデータレジスタ１５からのムーブアウトデータは、１６バイト単位で二次キャッシュメモリ６に転送され書き込まれる。
【００３２】
このように、二次キャッシュメモリ６と一次データキャッシュメモリ４の間で転送されるデータはＥＣＣで保護されており、また一次データキャッシュメモリ４に格納されているデータはパリティによって保護されている。
【００３３】
このような動作をするＣＰＵ１において、一次データキャッシュメモリ４は、例えば、ラインサイズが１２８バイトであり、２ウエイのセットアソシアティブ方式を採用したものである。セットアソシアティブ方式は、複数のワード（データ）を１ブロックとして管理するものである。また、一次データキャッシュメモリ４のラインサイズは、１２８バイトである。
【００３４】
一次データキャッシュメモリ４におけるラインサイズは、上述したように、ＣＰＵ１が主記憶メモリへ１２８バイトでアクセスすることに合わせて、１２８バイトに設定されている。すなわち、ＣＰＵ１と主記憶メモリとの間におけるキャッシュコヒーレンシ制御が複雑化することを回避するために、一次データキャッシュメモリ４のラインサイズは、ＣＰＵ１と主記憶メモリとの間のデータ幅と同じ１２８バイトとされている。そして、一次データキャッシュメモリ４は、後述する多ポートＲＡＭ（Random Access Memory）により１２８バイトのデータを入力し、多ポートＲＡＭのポートから入力した１２８バイトのデータを所定の単位データ（例えば８バイトデータ）ごとに、一次データキャッシュメモリ４の連続領域に書き込む。
【００３５】
なお、以下の説明では、一次データキャッシュメモリ４が複数の２ポートＲＡＭを有する場合について説明する。２ポートＲＡＭは、データ書込みを１つのポートで行い、データ読み出すを２個のポートで同時に行なうことを可能とする１Ｗ２Ｒ−ＲＡＭである。
【００３６】
本実施形態の一次データキャッシュメモリ４を図３に示す。図３（Ａ）はウエイ（０）のデータ配置、図３（Ｂ）はウエイ（１）のデータ配置、図３（Ｃ）はアドレス構成を示す。
【００３７】
図３において、ＲＡＭ（０）、ＲＡＭ（１）、ＲＡＭ（２）、ＲＡＭ（３）はそれぞれ２ポートＲＡＭである。図３のデータ配置では、４個のブロックごとに、ウエイをＲＡＭ（０）とＲＡＭ（１）の組とＲＡＭ（２）とＲＡＭ（３）との組との間で交互に配置する構成とする。
【００３８】
図３（Ａ）は、ウェイ（０）のデータ配置を示す。ウェイ（０）のブロック００〜ブロック０３は、ＲＡＭ（０）とＲＡＭ（１）とに割り付けられる。一方、ウェイ（０）のブロック０４〜ブロック０７は、ＲＡＭ（２）とＲＡＭ（３）とに割り付けられる。
【００３９】
図３（Ｂ）は、ウェイ（１）のデータは位置を示す。ウェイ（０）の場合とは異なり、ウェイ（１）のブロック００〜ブロック０３はＲＡＭ（２）とＲＡＭ（３）とに割り付けられ、ウェイ（１）のブロック０４〜ブロック０７はＲＡＭ（０）とＲＡＭ（１）とに割り付けられる。
【００４０】
そして、このような一次データキャッシュメモリ４におけるウエイ構成は、図４に示すように、各ウエイ（０）、ウェイ（１）における偶数番号（evn）又は奇数番号（odd）のブロックごとにインデックスアドレス（０〜ｎ）が付加される。図４は、図３に示した２ポートＲＡＭ（０）、２ポートＲＡＭ（１）、２ポートＲＡＭ（２）、２ポートＲＡＭ（３）のそれぞれに対応するインデックスアドレスを示している。図４において、「Ｗ０／Ｗ１」はウェイ番号を示す。また「ｅｖｎ／ｏｄｄ」はブロック番号の偶数／奇数を示している。
【００４１】
このように構成された一次データキャッシュメモリ４は、隣接する２ポートＲＡＭ間、つまりＲＡＭ（０）とＲＡＭ（１）との間、およびＲＡＭ（２）とＲＡＭ（３）との間において連続したブロック番号となっている。これにより、例えば、図３に示すブロック配置において、ある２ポートＲＡＭからあるウェイのブロック００，０２を読み出し、同時に他の２ポートＲＡＭから当該ウェイのブロック０１，０３を読み出すことができる。
【００４２】
上述した一次データキャッシュメモリ４に含まれる２ポートＲＡＭは、例えば図５に示すような構成である。図５の２ポートＲＡＭ２０は、一次データキャッシュメモリ４への書込データ（ムーブインデータ）が入力ポートから供給される第１入力ポートレジスタ２１ａ及び第２入力ポートレジスタ２１ｂと、記憶部２２と、第１出力ポートレジスタ２３ａ及び第２出力ポートレジスタ２３ｂとを有する。キャッシュの登録処理を従来と同じ回数にするために、図５に示す２ポートＲＡＭ２０は16バイト-write機能を持ったRAMとなっている。
【００４３】
図５の２ポートＲＡＭ２０では、第１入力ポートレジスタ２１ａ及び第２入力ポートレジスタ２１ｂは、８バイトの単位データごとにデータを入力して保持する。そして、２つの入力ポートレジスタ２１ａ、２１ｂが保持する計１６バイトデータを同時に入力ポートレジスタ２１ａ、２１ｂから出力して、記憶部２２にライトする。一方、図５の２ポートＲＡＭ２０は、キャッシュのムーブアウト時に記憶部２２が保持する１６バイトデータを読み出して、２つの出力ポート２３ａ、２３ｂを利用して出力データとして出力する。これにより、例えば、１６バイトのロード命令(SIMD)を２命令同時に効率よく処理できる。
【００４４】
これら複数の入力ポートレジスタ２１ａ，２１ｂには、他の２ポートＲＡＭ２０の入力ポートレジスタと共に、ＣＰＵ１と主記憶メモリとの間で入出力されるデータサイズのデータ（１２８バイトデータ）が入力する。そして、入力ポートレジスタ２１ａ，２１ｂは、図４における各ブロックに対応した単位データを、複数個、同時に記憶部２２の連続領域に書き込む。このような２ポートＲＡＭ２０は、一次データキャッシュメモリ４に４個含まれている。各２ポートＲＡＭ２０は、記憶部２２、複数の入力ポートレジスタ２１ａ，２１ｂ、複数の出力ポートを含む多ポート記憶部として機能する。
【００４５】
図５の２ポートＲＡＭ２０は、８バイトのムーブインデータが連続して供給されると、最初の８バイトのムーブインデータを入力ポートレジスタ２１ａに格納し、次の８バイトのムーブインデータを入力ポートレジスタ２１ｂに格納する。そして、第１入力ポートレジスタ２１ａ及び第２入力ポートレジスタ２１ｂに合計１６バイトのムーブインデータが書き込まれると、第１入力ポートレジスタ２１ａ及び第２入力ポートレジスタ２１ｂは、書き込まれた計１６バイトのムーブインデータを同時に、記憶部２２の連続領域２２ａ、２２ｂに書き込む。このとき、記憶部２２には、ムーブインデータを書き込む記憶部２２の連続領域２２ａ、２２ｂを示すアドレス情報が供給される。
【００４６】
すなわち、２ポートＲＡＭ２０は、２つの入力ポートレジスタ２１ａ，２１ｂに対応してアドレスを２つ入れると、入力ポートレジスタ２１ａ，２１ｂのデータを同時に読むことができる。なお、書き込み動作と読み出し動作の同時実行は不可である。入力ポートレジスタ２１ａ，２１ｂから記憶部２２への書き込みは、通常8バイト単位で同時にライトできるが、RAM内蔵ラッチに書き込み用のレジスタをさらに８バイト拡張レジスタとしての入力ポートレジスタ２１ａ，２１ｂを用意して、記憶部２２における連続領域の１６バイト領域に対して書き込み動作可能である。このような入力ポートレジスタ２１ａ，２１ｂからなる拡張レジスタの登録時においては、通常のRAM−RD動作が可能である。
【００４７】
記憶部２２に格納されたデータを読み出す場合、２ポートＲＡＭ２０には、読み出しアドレスが供給される。２ポートＲＡＭ２０は、先行して供給されたアドレス情報に基づいて、８バイトのムーブアウトデータを記憶部２２から第１出力ポートレジスタ２３ａに読み出し、次に供給されたアドレス情報に基づいて、先行して読み出されたムーブアウトデータに連続する８バイトのムーブインデータを、記憶部２２から第２出力ポートレジスタ２３ｂに読み出す。第１出力ポートレジスタ２３ａ及び第２出力ポートレジスタ２３ｂのそれぞれに８バイト、合計１６バイトのムーブアウトデータが書き込まれると、第１出力ポートレジスタ２３ａ及び第２出力ポートレジスタ２３ｂは８バイトづつ、協働して１６バイトのムーブアウトデータを出力する。
【００４８】
図５に示す２ポートＲＡＭ２０は、一次データキャッシュメモリ４に４個含まれる。ＣＰＵ１と主記憶メモリとの間で送受信される１２８バイトのムーブインデータを一次データキャッシュメモリ４に登録する場合、一次データキャッシュメモリ４は図６の下段に示す動作をする。
【００４９】
図６の３サイクル目において、４個の２ポートＲＡＭ２０のそれぞれの入力ポートに、先ず最初のムーブインデータＭＩＲＤ（合計３２バイト）が供給される。、当該ムーブインデータは、図６の４サイクル目で各２ポートＲＡＭ２０の入力ポートレジスタ２１ａに書き込まれる。この状態において、各２ポートＲＡＭ２０は、ムーブインデータがリード可能（ＲＤ可能）な状態にある。
【００５０】
次に、図６の４サイクル目で次のムーブインデータＭＩＤＲ（合計３２バイト）が４個の２ポートＲＡＭ２０のそれぞれの入力ポートに供給されると、図６の５サイクル目で各入力ポートレジスタ２１ｂに当該ムーブインデータを書き込む。この状態となると、各２ポートＲＡＭ２０は、入力ポートレジスタ２１ａ，２１ｂに格納された合計６４バイトのムーブインデータを記憶部２２にライト可能（ｗｔ）な状態となる。
【００５１】
このようなムーブインデータの書き込み動作を２回行うと（３サイクル目〜５サイクル目と、６サイクル目〜８サイクル目）、一次データキャッシュメモリ４は、合計で１２８バイトのムーブインデータを書き込むことができる。本実施形態では、ムーブインデータの書き込みは計６サイクルで完了する。
【００５２】
一方、比較例では、３２バイトのムーブインデータの入力から書き込みまでは２サイクル要する。後続する３２バイトのムーブインデータ入力は、先行する３２バイトムーブインデータの書き込みが完了してから行われるため、比較例では１２８バイトのムーブインデータ書込みまで計８サイクルを要する。
【００５３】
一次データキャッシュメモリ４に１２８バイトのムーブインデータを書き込む場合、二次キャッシュメモリ６との間の転送バス幅が３２バイトとなっているので、ムーブインデータレジスタ１３には、１回の書き込み動作によって、３２バイト×２のムーブインデータが２回に亘って書き込まれる。このとき、１回目の書き込み動作では、先行する６４バイトのムーブインデータを書き込み、２回目の書き込み動作では、後続の６４バイトのムーブインデータを書き込む。
【００５４】
ここで、ムーブインデータレジスタ１３から一次データキャッシュメモリ４にムーブインデータを書き込む転送バス幅も、３２バイトとなっている。そして、４個の２ポートＲＡＭ２０に対してムーブインデータを格納する命令を与えると、４個の２ポートＲＡＭ２０は、第１入力ポートレジスタ２１ａ及び第２入力ポートレジスタ２１ｂにそれぞれ８バイトデータの計１６バイトデータを格納する。これにより、４個の２ポートＲＡＭ２０の入力ポートレジスタには、合計で６４バイトのムーブインデータが格納される。
【００５５】
４個の２ポートＲＡＭ２０は、書込命令に従って、各々１６バイト、同時に６４バイトのムーブインデータを、それぞれの記憶部２２に書き込む。このような同時に６４バイトのムーブインデータを書き込む動作は、後続する６４バイトのムーブインデータに対してもう１回行われる。これにより、一次データキャッシュメモリ４には、１２８バイトのデータが書き込まれる。
【００５６】
図７は、本実施形態による一次キャッシュへのデータ登録を示す。図７において、ブロック００〜ブロック０７の各ブロックのサイズは８バイトであり、８個のブロックの合計は６４バイトとなる。１２８バイトのデータを一次キャッシュに登録する場合には、６４バイトデータの登録動作を合計２回実行する。
【００５７】
図７の一次データキャッシュメモリ４が４個の２ポートＲＡＭ（０）〜（３）を含む場合、図７に示すように、１回目の書込動作、によって、２ポートＲＡＭ（０）のブロック００，０２に計１６バイトのムーブインデータを書き込む。これと同時に、２ポートＲＡＭ（２）のブロック０４，０６に計１６バイトのムーブインデータを書き込む。また、２ポートＲＡＭ（１）のブロック０１，０３に計１６バイトのムーブインデータを書き込むと同時に、２ポートＲＡＭ（３）のブロック０５，０７に計１６バイトのムーブインデータを書き込む。これにより、合計で６４バイトのムーブインデータを一次キャッシュに書き込む。
【００５８】
同様に、図示は省略されているが、後続する６４バイトのムーブインデータに対応する２回目の書込動作によって、２ポートＲＡＭ（０）―（３）にそれぞれ計１６バイト（合計６４バイト）のムーブインデータを書き込む。このような２回の書込動作により、合計で１２８バイトのムーブインデータを１次キャッシュに書き込む。
【００５９】
このように、一次データキャッシュメモリ４は、２回の書込動作だけで、１２８バイトデータを書き込むことができる。すなわち、２次キャッシュと１次キャッシュの間のデータバス幅は変えないで、１次キャッシュのラインサイズが６４バイトから１２８バイトに拡張された場合においても１次キャッシュの登録（および掃きだし）に要する処理回数（キャッシュ占有率）を同じにすることができる。
【００６０】
一次データキャッシュメモリ４に書き込まれたデータを読み出して二次キャッシュメモリ６にムーブアウトする時には、２ポートＲＡＭ２０の第１出力ポートレジスタ２３ａ及び第２出力ポートレジスタ２３ｂを用いる。
【００６１】
図８は一次キャッシュからのデータ書き戻し、つまりムーブアウトの動作を説明する図面である。図８に示すように、１回目のムーブアウトデータの読み出し動作によって、２ポートＲＡＭ（０）のブロック００，０２から計１６バイトのムーブアウトデータを読み出すと同時に、２ポートＲＡＭ（２）のブロック０４，０６から計１６バイトのムーブアウトデータを読み出す。これによって、計３２バイトのムーブアウトデータが２ポートＲＡＭから読み出される。そして、次の読み出し動作によって、２ポートＲＡＭ（１）のブロック０１，０３から計１６バイトのムーブアウトデータを読み出すと同時に、２ポートＲＡＭ（３）のブロック０７，０５から計１６バイトムーブアウトデータを読み出す。この２回の読み出し動作により、合計で６４バイトのムーブアウトデータを読み出す。
【００６２】
同様に、２回目の読み出し動作によって、２ポートＲＡＭ（０）のブロック００，０２から計１６バイトのムーブアウトデータを読み出すと同時に２ポートＲＡＭ（２）のブロック０４，０６から計１６バイトのムーブアウトデータを読み出す。そして、次の２回目の読み出し動作によって、２ポートＲＡＭ（１）のブロック０１，０３から１６バイトのムーブアウトデータを読み出すと同時に２ポートＲＡＭ（３）のブロック０７，０５から１６バイトのムーブアウトデータを読み出す。このような２回の読みだし動作により、合計で１２８バイトのムーブアウトデータを読み出す。
【００６３】
ここで、４個の２ポートＲＡＭ２０ら読み出された合計３２バイトの４個のデータは、一旦、それぞれの２ポートＲＡＭ２０の第１出力ポートレジスタ２３ａに格納され、次の３２バイト分の４個のデータは、それぞれの２ポートＲＡＭ２０の第２出力ポートレジスタ２３ｂに格納される。これらの出力ポートレジスタに格納された３２バイトづつのデータは、ムーブアウトデータとして２回に亘りムーブアウトデータレジスタ１５に読みだされる。このムーブアウトデータの読み出し動作は２回に亘り行われることで、合計で１２８バイトのムーブインデータをムーブアウトデータレジスタ１５に供給する。
【００６４】
一方、比較例として、ラインサイズが６４バイト、３２バイトづつデータの書込動作を行う一次データキャッシュメモリの動作を図６の上段と図９に示す。比較例の一次データキャッシュメモリは、１２８バイトのデータを書き込む場合、ムーブインデータレジスタに３２バイトのムーブインデータを書き込む。そして、３２バイトのムーブインデータを合計４回に亘って一次データキャッシュメモリに書き込む。
【００６５】
図６上段の比較例では、１２８バイトのキャッシュラインを一次キャッシュに登録するには、ムーブインリクエストを４回発行して、キャッシュにムーブインデータを登録することになり、ムーブインリクエストのパイプ占有率が実施形態の場合と比較して２倍になってしまう。そこで、２ポートＲＡＭ２０に対して、連続領域(2 index)への同時書き込み機能(１６バイトのライト機能)を設けて、図６下段の本実施形態のように、１回のムーブインリクエストで２ポートＲＡＭ２０を４個使用して、６４バイトのデータが書き込めるようにする。これにより、比較例では、ムーブインリクエストを４回発行しなければならず、一方、本実施形態では計２回のムーブインリクエスト発行のみによって、１２８バイトのキャッシュラインを登録することが可能となる。
【００６６】
また、本実施形態では、ムーブアウトリクエスト時、図８に示すように、二次キャッシュメモリ６から６４バイトのデータ(つまりラインサイズの半分)を読み出す。読み出されたデータは一度出力ポートレジスタに登録しておき、32バイトづつ４回でムーブアウトレジスタ１５に送られる。キャッシュのアクセスは、６４バイトの２回アクセスであり、パイプラインに占めるムーブアウトリクエストは図９の比較例と変わらない。
【００６７】
以上のキャッシュシステムによれば、２次キャッシュと１次キャッシュの間のデータバス幅は変えないで、１次キャッシュのラインサイズが６４バイト１２８バイトに拡張された場合においても１次キャッシュの登録および掃きだしに要する処理回数（キャッシュ占有率）を同じにすることができる。すなわち、転送バス幅を変えずに１次キャッシュの登録・掃きだしの処理（キャッシュ占有率）を維持し、一次データキャッシュメモリ４に１２８バイトのデータを書き込むことができる。したがって、本実施形態のキャッシュシステムによれば、ＣＰＵ１と主記憶メモリとの間のデータ幅を大きくしても、当該データ幅にラインサイズを合わせ、複数の２ポートＲＡＭ２０によってデータの書込、読み出しを行うことができる。
【００６８】
つぎに、ＣＰＵ１において、一次データキャッシュメモリ４に対して、データサイズを一単位としてデータの書込及び読み出しを行うものについて説明する。なお、以下の説明においては、演算・命令ユニット１１にロードされる命令としてＳＩＭＤ（Single Instruction／Multiple Data）命令に従って、データサイズを一単位としたデータを書込及び読み出しする例について説明する。
【００６９】
ＳＩＭＤ命令を用いると、ＣＰＵ１により、１回のＳＩＭＤ命令によって複数データに対する処理を同時に行う。例えば、１つのＳＩＭＤ命令が発生すると、一次データキャッシュメモリ４には、連続した１６バイトデータの書込、読み出しが行われる。ここで、１６バイトを「データサイズ」と考える。
【００７０】
ＳＩＭＤ命令に従って行われる１６バイトデータの一次データキャッシュメモリ４に対する書込は、２ポートＲＡＭ２０の連続領域に対して行われる。このとき、一次データキャッシュメモリ４に含まれる各２ポートＲＡＭ２０は、第１入力ポートレジスタ２１ａ及び第２入力ポートレジスタ２１ｂに対して８バイトデータが格納され、記憶部２２の連続領域に対して同時に８バイトデータずつを書き込む。これにより、ＳＩＭＤ命令に従って１６バイトデータを各２ポートＲＡＭ２０に書き込む。
【００７１】
ＳＩＭＤ命令に従って２ポートＲＡＭ２０の記憶部２２に書き込まれた１６バイトデータを読み出す場合には、一次データキャッシュメモリ４に対して、８バイトごとに区分されたブロック間の境界に当たるアドレスが指定される。例えば図４に示すウエイ構成において、２ポートＲＡＭ（０）に格納されたデータと２ポートＲＡＭ（１）に格納されたデータとが連続した１６バイトデータとなる。そして、２ポートＲＡＭ（０）のウエイ番号（０）、インデックスアドレス（０）として格納されたデータと、ＲＡＭ（１）のウエイ番号（０）、インデックスアドレス（０）として格納されたデータとの連続した１６バイトデータを読み出す。
【００７２】
このように、２つのブロックに跨る１６バイトデータを読み出す場合、２ポートＲＡＭ（０）のデータの読み出しアドレスは、２ポートＲＡＭ（１）のブロックのアクセス対象となるアドレスよりも、１つのブロック分だけずれたアドレスとなる。また、各２ポートＲＡＭ２０において２個のブロックを跨いだ１６バイトデータを読み出す必要もある（ラインクロス）。
【００７３】
このような連続した１６バイトデータを読み出すために、キャッシュシステムは、図１０に示す構成を有する。図１０によれば、キャッシュシステムは、第１アドレス生成器３０ａ及び第１アドレス変換器３１ａと、第２アドレス生成器３０ｂ及び第２アドレス変換器３１ｂとを有する。第１アドレス生成器３０ａは、２ポートＲＡＭ（１）と２ポートＲＡＭ（３）との第１入力ポートレジスタ２１ａ及び第１出力ポートレジスタ２３ａに読み出すデータのアドレス情報を生成する。第２アドレス生成器３０ｂは、２ポートＲＡＭ（１）と２ポートＲＡＭ（３）との第２入力ポートレジスタ２１ｂ及び第２出力ポートレジスタ２３ｂに読み出すデータのアドレス情報を生成する。
【００７４】
第１アドレス変換器３１ａは、２ポートＲＡＭ（０）と２ポートＲＡＭ（２）との第１入力ポートレジスタ２１ｂ及び第１出力ポートレジスタ２３ａに読み出すデータのアドレス情報を生成する。第２アドレス変換器３１ｂは、２ポートＲＡＭ（０）と２ポートＲＡＭ（２）との第２入力ポートレジスタ２１ｂ及び第２出力ポートレジスタ２３ｂに読み出すデータのアドレス情報を生成する。
【００７５】
第１アドレス生成器３０ａ及び第２アドレス生成器３０ｂは、演算・命令ユニット１１からの命令に従って、一次データキャッシュメモリ４から読み出すデータのアドレスを生成する。第１アドレス変換器３１ａ及び第２アドレス変換器３１ｂは、第１アドレス生成器３０ａ及び第２アドレス生成器３０ｂにより生成されたアドレスを、以下のように変換する。
【００７６】
第１アドレス生成器３０ａ及び第２アドレス生成器３０ｂが生成した仮想アドレスＶＡ（Ｎ［ｋバイト］）は、例えば、図１１に示すように変換される。図１１は、生成アドレスと変換アドレスとの関係を示す。なお、ここでは、生成アドレス、変換アドレスともに「仮想アドレス」を用いているものとする。また、図１１では各アドレスは１６進数で表記されている。さらに、生成アドレスのＶＡ（１）は上位アドレス、ＶＡ（２）は下位アドレスである。同様に、変換アドレスのＶＡ（３）は上位アドレス、ＶＡ（４）は下位アドレスである。
【００７７】
第１アドレス生成器３０ａ及び第２アドレス生成器３０ｂによりアドレス[1000]が生成された場合、第１アドレス変換器３１ａ及び第２アドレス変換器３１ｂはアドレスをアドレス［1008］に変換する。また、第１アドレス生成器３０ａ及び第２アドレス生成器３０ｂによりアドレス[1008]が生成された場合、第１アドレス変換器３１ａ及び第２アドレス変換器３１ｂはアドレスをアドレス［1010］に変換する。これは、図１０に示した奇数（ｅｖｅｎ）側のアクセス対象位置が、奇数（ｏｄｄ）側のアクセス対象位置よりもインデックスアドレスを＋１したアドレス位置にあるためである。
【００７８】
図１０の例では、第１アドレス変換器３１ａ及び第２アドレス変換器３１ｂは、第１アドレス生成器３０ａ及び第２アドレス生成器３０ｂが生成されたアドレスに「８」、つまり１インデックスアドレスに相当する値を加えることでアドレスを変換している。
【００７９】
図１０のように、一次データキャッシュメモリ４に４個の２ポートＲＡＭを含めた場合、各２ポートＲＡＭの第１出力ポートレジスタ２３ａ及び第２出力ポートレジスタ２３ｂに対して、データ読み出しのためのアドレスが供給される。
【００８０】
そして、図１２に示すように、第１アドレス生成器３０ａ及び第２アドレス生成器３０ｂにより生成されたアドレスは、２ポートＲＡＭ（１）と２ポートＲＡＭ（３）に供給される。また、第１アドレス変換器３１ａ及び第２アドレス変換器３１ｂにより変換されたアドレスは、第１アドレス生成器３０ａ及び第２アドレス生成器３０ｂにより生成されたアドレスが供給される２ポートＲＡＭ（１）、２ポートＲＡＭ（３）と連続したデータが格納された２ポートＲＡＭ（０）、２ポートＲＡＭ（２）にそれぞれ供給される。図１０
図１０にて、第１アドレス生成器３０ａは、２ポートＲＡＭ（１）に含まれる任意のブロックを指定するアドレスを生成する。そして、この第１アドレス生成器３０ａにより生成されたアドレスは、２ポートＲＡＭ（１）の第１ポートレジスタ２１ａ、２３ａに供給される。また、第１アドレス変換器３１ａは、第１アドレス生成器３０ａが指定した２ポートＲＡＭ（１）のブロックと連続するデータが格納されたブロックのアドレスに変換する。変換されたアドレスは、２ポートＲＡＭ（０）の第１ポートレジスタ２１ａ、２３ａに供給される。
【００８１】
同様に、第１アドレス生成器３０ａにより生成されたアドレスは、２ポートＲＡＭ（３）における任意のブロックを指定するアドレスとなり、２ポートＲＡＭ（３）の第１ポートレジスタ２１ａ、２３ａに供給される。また、第１アドレス変換器３１ａにより変換されたアドレスは、第１アドレス生成器３０ａが指定した２ポートＲＡＭ（３）のブロックと連続するデータが格納されたブロックのアドレスとなる。変換されたアドレスは、２ポートＲＡＭ（２）の第１ポートレジスタ２１ａ、２３ａに供給される。
【００８２】
また、第２アドレス生成器３０ｂは、２ポートＲＡＭ（１）に含まれる任意のブロックを指定するアドレスを生成する。そして、この第２アドレス生成器３０ｂにより生成されたアドレスは、２ポートＲＡＭ（１）に供給される。また、第２アドレス変換器３１ｂは、第２アドレス生成器３０ｂが指定した２ポートＲＡＭ（１）のブロックと連続するデータが格納されたブロックのアドレスに変換する。このアドレスは、２ポートＲＡＭ（０）の第２ポートレジスタ２１ｂ、２３ｂに供給される。
【００８３】
同様に、第２アドレス生成器３０ｂにより生成されたアドレスは、２ポートＲＡＭ（３）における任意のブロックを指定するアドレスとなり、２ポートＲＡＭ（３）の第２ポートレジスタ２１ｂ、２３ｂに供給される。また、第２アドレス変換器３１ｂにより変換されたアドレスは、第２アドレス生成器３０ｂが指定した２ポートＲＡＭ（３）のブロックと連続するデータが格納された２ポートＲＡＭ（２）のブロックのアドレスとなる。この変換されたアドレスは、２ポートＲＡＭ（２）の第２ポートレジスタ２１ｂ、２３ｂに供給される。
【００８４】
この結果、ＳＩＭＤ命令に従って、１６バイトデータを格納したブロックにアクセスすることができる。以下に具体例を示す。
【００８５】
第１アドレス生成器３０ａ及び第２アドレス生成器３０ｂにより、仮想アドレスＶＡを生成するとする。
【００８６】
まず、ＶＡ＝０ｘ０００とした例を示す。第１出力ポートレジスタ２３ａの１６バイトデータをロードする場合、図１１に示すように、第１アドレス生成器３０ａにより生成されたアドレスはＶＡ（２）＝０である。これに対し、第１アドレス変換器３１ａにより変換すると、変換されたアドレスはＶＡ（４）＝８である。
【００８７】
すると、図１３に太線で示すデータを読み出すことができる。すなわち、２ポートＲＡＭ（０）のブロック００，２ポートＲＡＭ（１）のブロック０１の連続した１６バイトデータと、２ポートＲＡＭ（２）のブロック００，２ポートＲＡＭ（３）のブロック０１の連続した１６バイトデータとを読み出す。
【００８８】
このとき、第１アドレス生成器３０ａは、２ポートＲＡＭ（１）のブロック０１を指定するアドレスを生成すると、第１アドレス変換器３１ａによってアドレスに変換して２ポートＲＡＭ（０）のブロック００を指定するアドレスを得る。例えば、生成アドレスが[0]である場合、変換アドレスは [8]となる。また、第２アドレス生成器３０ｂは、２ポートＲＡＭ（３）のブロック０１を指定するアドレスを生成すると、第２アドレス変換器３１ｂによってアドレスに変換して２ポートＲＡＭ（２）のブロック００を指定するアドレスを得る。これにより、一次データキャッシュメモリ４からは、ウエイ（０）とウエイ（１）とのブロック００，０１を読み出すことができる。
【００８９】
なお、図１３の「アドレス＝０００」は、図１１のＶＡ（１）、ＶＡ（３）に相当する。以下の図面も同様である。
【００９０】
また、ＶＡ＝０ｘ００８とし、第１出力ポートレジスタ２３ａの１６バイトデータをロードする場合を考える。この場合、図１１第１アドレス生成器３０ａにより生成されたアドレスはＶＡ（１）＝０００であり、第１アドレス変換器３１ａにより変換されたアドレスはＶＡ（３）＝００１である。
【００９１】
すると、図１４に太線で示すようなデータを読み出すことができる。すなわち、２ポートＲＡＭ（１）のブロック０１と２ポートＲＡＭ（０）のブロック０２との連続した１６バイトデータと、２ポートＲＡＭ（３）のブロック０１と２ポートＲＡＭ（２）のブロック０２との連続した１６バイトデータとを読み出す。
【００９２】
このとき、第１アドレス生成器３０ａが２ポートＲＡＭ（１）のブロック０１を指定するアドレスを生成すると、第１アドレス変換器３１ａによってアドレスを変換することで２ポートＲＡＭ（０）のブロック０２を指定するアドレスが得られる。また、第２アドレス生成器３０ｂが２ポートＲＡＭ（３）のブロック０１を指定するアドレスを生成すると、第２アドレス変換器３１ｂによってアドレスを変換することで２ポートＲＡＭ（２）のブロック０２を指定するアドレスが得られる。これにより、一次データキャッシュメモリ４からは、ウエイ（０）、ウェイ（１）のブロック０１，０２を読み出すことができる。
【００９３】
更に、ＶＡ＝０ｘ０１８とし、第１出力ポートレジスタ２３ａの１６バイトデータをロードする場合を考える。この場合、図１１第１アドレス生成器３０ａにより生成されたアドレスはＶＡ（１）＝００１であり、第１アドレス変換器３１ａにより変換されたアドレスはＶＡ（３）＝００２である。
【００９４】
すると、図１５に太線で示すデータを読み出すことができる。すなわち、２ポートＲＡＭ（１）のブロック０３と２ポートＲＡＭ（０）のブロック０４の連続した１６バイトデータと、２ポートＲＡＭ（３）のブロック０３と２ポートＲＡＭ（２）のブロック０４の連続した１６バイトデータとを読み出す。
【００９５】
このとき、第１アドレス生成器３０ａが２ポートＲＡＭ（１）のウェイ（０）に対応するブロック０３を指定するアドレスを生成すると、第１アドレス変換器３１ａによってアドレスを変換して２ポートＲＡＭ（０）のウェイ（１）に対応するブロック０４を指定するアドレスを得る。また、第２アドレス生成器３０ｂが２ポートＲＡＭ（３）のウェイ（１）に対応するブロック０３を指定するアドレスを生成すると、第２アドレス変換器３１ｂによってアドレスを変換して２ポートＲＡＭ（２）のウェイ（０）に対応するブロック０４を指定するアドレスを得る。これにより、一次データキャッシュメモリ４からは、ウエイ（０）とウェイ（１）とのブロック０３，０４を読み出すことができる。
【００９６】
このように、所定データサイズ（１６バイトデータ）のデータは、異なる２ポートＲＡＭの連続したブロック番号に分割して書き込まれる。そして、アドレス生成器３０ａ，３０ｂにより生成したアドレスによって所定データサイズデータのうちの一部を読み出すと共に、アドレス変換器３１ａ，３１ｂにより変換されたアドレスによって残りの一部のデータを読み出すことができる。したがって、２ポートＲＡＭの記憶部２２が８バイトのブロック構成であって、ＳＩＭＤ命令に従って連続した１６バイトデータをロードする場合であっても、２つの２ポートＲＡＭによって連続した１６バイトデータを読み出すことができる。
【００９７】
つぎに、一次データキャッシュメモリ４から、ＳＩＭＤ命令に従って１６バイトデータを読み出してデータを演算・命令ユニット１１に出力するための構成について説明する。
【００９８】
図１６には、ブロック番号で区分された８バイトデータ（単位データ）を選択して、２つの８バイトデータを連続的に演算・命令ユニット１１に出力する構成を示している。キャッシュシステムは、各２ポートＲＡＭ（０）〜２ポートＲＡＭ（３）の第１出力ポートレジスタ２３ａ、第２出力ポートレジスタ２３ｂから出力された８バイトデータを入力するセレクタ４１ａ〜４１ｈを備える。セレクタ４１ａ〜４１ｈは、第１アドレス生成器３０ａ、第２アドレス生成器３０ｂ、第１アドレス変換器３１ａ、第２アドレス変換器３１ｂから供給されたアドレスに基づいて、接続された２ポートＲＡＭから出力される何れかの８バイトデータを選択する。そして、セレクタ４３ａ〜４３ｄにより選択された２ポートＲＡＭの記憶部２２に記憶された８バイトデータを、１６バイトデータ分に亘り連続的に演算・命令ユニット１１に出力する。
【００９９】
具体的には、２ポートＲＡＭ（０），２ポートＲＡＭ（１）の各第１出力ポートレジスタ２３ａが、それぞれ２個のセレクタ４１ａ，４１ｂに接続される。同様に、２ポートＲＡＭ（２），（３）の各第１出力ポートレジスタ２３ａが、それぞれ２個のセレクタ４１ｃ，４１ｄに接続されている。また、２ポートＲＡＭ（０），（１）の各第２出力ポートレジスタ２３ｂが、それぞれ２個のセレクタ４１ｅ，４１ｆに接続され、２ポートＲＡＭ（２），（３）の各第２出力ポートレジスタ２３ｂが、それぞれ２個のセレクタ４１ｅ，４１ｇに接続されている。
【０１００】
セレクタ４１ａにはバッファ４２ａ、セレクタ４１ｂにはバッファ４２ｃ、セレクタ４１ｃにはバッファ４２ｂ、セレクタ４１ｄにはバッファ４２ｄがそれぞれ接続されている。また、セレクタ４１ｅにはバッファ４２ｅ、セレクタ４１ｆにはバッファ４２ｇ、セレクタ４１ｇにはバッファ４２ｆ、セレクタ４１ｈにはバッファ４２ｈが接続されている。
【０１０１】
バッファ４２ａ，バッファ４２ｂに格納されたそれぞれの８バイトデータは、セレクタ４３ａによってその順番が選択され、データ出力部４４ａを介して１６バイトデータとして演算・命令ユニット１１に供給される。同様に、バッファ４２ｃ，バッファ４２ｄに格納された８バイトデータは、セレクタ４３ｂによって選択され、データ出力部４４ａに供給される。
【０１０２】
データ出力部４４ｂは、セレクタ４３ａから出力されたデータを順序通り並べ替え、１６バイトデータとして演算・命令ユニット１１に供給される。以下同様に、バッファ４２ｅ，バッファ４２ｆに格納された８バイトデータは、セレクタ４３ｃ及びデータ出力部４４ｃを介して１６バイトデータとして演算・命令ユニット１１に供給される。バッファ４２ｇ，バッファ４２ｈに格納された８バイトデータは、セレクタ４３ｄ及びデータ出力部４４ｄを介して１６バイトデータとして演算・命令ユニット１１に供給される。
【０１０３】
このようにキャッシュシステムを構成することにより、各２ポートＲＡＭ（０）〜（３）の第１出力ポートレジスタ２３ａ、第２出力ポートレジスタ２３ｂの何れから出力された８バイトデータは、セレクタ４１ａ〜４１ｈにより選択される。また、異なる２ポートＲＡＭから出力された同じウエイのデータは、セレクタ４３ａ〜４３ｄにより選択される。
【０１０４】
これにより、セレクタ４２ａ、４２ｂは、２ポートＲＡＭ（０）と２ポートＲＡＭ（１）の第１出力ポートレジスタ２３ａの何れかから出力された８バイトデータを選択する。同様に、セレクタ４１ｃ、４１ｄは、２ポートＲＡＭ（２）と２ポートＲＡＭ（３）の第１出力ポートレジスタ２３ａの何れかから出力された８バイトデータを選択できる。
【０１０５】
バッファ４２ａには２ポートＲＡＭ（０）か２ポートＲＡＭ（１）の何れかからのデータが格納され、バッファ４２ｂには２ポートＲＡＭ（２）か２ポートＲＡＭ（３）の何れかからのデータが格納される。
【０１０６】
セレクタ４３ａは、セレクタ４１ａから出力される２ポートＲＡＭ（０）あるいは２ポートＲＡＭ（１）からの８バイトデータか、セレクタ４１ｃから出力される２ポートＲＡＭ（２）あるいは２ポートＲＡＭ（３）からの８バイトデータかを選択する。バッファ４２ｃとバッファ４２ｄとに接続されたセレクタ４３ｂも、セレクタ４３ａと同様に動作する。また、セレクタ４１ｅ〜４１ｈは、それぞれ各２ポートＲＡＭの第２の出力ポートレジスタに接続される他は基本的にセレクタ４１ａ〜４１ｄと同様に動作する。セレクタ４３ｃとセレクタ４３ｄとはセレクタ４３ａ、４３ｂと同様に動作する。
【０１０７】
このように、実施形態のキャッシュシステムは、異なる２ポートＲＡＭ２０から８バイトデータを読み出すことによって、ＳＩＭＤ命令に従って読み出す１６バイトデータを生成して、演算・命令ユニット１１に出力することができる。また、このキャッシュシステムは、異なるウエイに跨って１６バイトデータが格納されていても、全２ポートＲＡＭの出力ポートから８バイトデータを読み出して、指定されたアドレスに従って８バイトデータを選択できる。これにより、このキャッシュシステムは、読み出すデータのウエイを判定した後にウエイごとにデータを選択する場合と比較して、簡単な配線構成によって１６バイトデータを出力することができる。
【０１０８】
また、一次データキャッシュメモリ４に書き込まれたデータを演算・命令ユニット１１に出力する構成としては、図１７に示すものであっても良い。
【０１０９】
図１７に示す構成を含むキャッシュシステムは、２ポートＲＡＭの記憶部２２に記憶された単位データがブロック単位で区分され、各ブロックがウエイによって区別される。このために、図１７に示すキャッシュシステムは、演算・命令ユニット１１にＳＩＭＤ命令に従って１６バイトデータを出力するために、セレクタ４１ａ〜４１ｈ、４３ａ〜４３ｄを備える。
【０１１０】
セレクタ４１ａ〜４１ｈは、第１アドレス生成器３０ａ、第２アドレス生成器３０ｂ、第１アドレス変換器３１ａ、第２アドレス変換器３１ｂから供給されたアドレスに基づいて、２ポートＲＡＭ（０）〜２ポートＲＡＭ（３）の第１の出力ポートレジスタ（図示「１」）から出力される何れかの８バイトデータを選択する。そして、セレクタ４３ａ〜４３ｄは、セレクタ４１ａ〜４１ｈにより選択されたウエイ数分の８バイトデータを入力し、ウエイを選択する命令に従って、何れかの８バイトデータを選択する。そして、セレクタ４３ａ〜４３ｄにより選択された２ポートＲＡＭの記憶部２２に記憶された８バイトデータは、１６バイトデータ分に亘り連続的に演算・命令ユニット１１に出力される。
【０１１１】
図１７に示すように、各２ポートＲＡＭ（０）〜（３）の第１出力ポートレジスタには、セレクタ４１ａ〜４１ｄが接続されている。４個の第１出力ポートレジスタ２３ａから出力された４個のデータは、データ選択用の４個のセレクタ４１ａ〜４１ｄに供給される。各セレクタ４１ａ〜４１ｄには、ウエイ選択用の８バイトのバッファ４２ａ〜４２ｄが接続されている。各セレクタ４１ａ〜４１ｄは、演算・命令ユニット１１から供給されたコマンドに従って、接続された何れかの２ポートＲＡＭ（０）〜（３）の第１出力ポートレジスタから出力されたデータを取り出す。そして、取り出されたデータは、各セレクタ４１ａ〜４１ｄから、当該セレクタ４１ａ〜４１ｄに接続されたバッファ４２ａ〜４２ｄに格納される。
【０１１２】
また、各２ポートＲＡＭ（０）〜（３）の第２出力ポートレジスタ（図示「２」）には、セレクタ４１ｅ〜４１ｈが接続されている。４個の第２出力ポートレジスタから出力された４個のデータは、データ選択用の４個のセレクタ４１ｅ〜４１ｈに供給される。各セレクタ４１ｅ〜４１ｈには、ウエイ選択用の８バイトのバッファ４２ｅ〜４２ｈが接続されている。各セレクタ４１ｅ〜４１ｈは、演算・命令ユニット１１から供給されたコマンドに従って、接続された何れかの２ポートＲＡＭ（０）〜（３）の第２出力ポートレジスタから出力されたデータを取り出す。そして、取り出されたデータは、各セレクタ４１ｅ〜４１ｈから、当該セレクタ４１ｅ〜４１ｈに接続されたバッファ４２ｅ〜４２ｈに格納される。
【０１１３】
バッファ４２ａ〜４２ｄには、ウエイをウェイ（０）とウェイ（１）とで選択するためのセレクタ４３ａ，４３ｂが接続されている。セレクタ４３ａは、演算・命令ユニット１１から供給されたウエイを選択するコマンドに従って、バッファ４２ａ，４２ｂの何れかのデータを取り出す。セレクタ４３ｂは、演算・命令ユニット１１から供給されたウエイを選択するコマンドに従って、バッファ４２ｃ，４２ｄの何れかのデータを取り出す。セレクタ４３ａ，４３ｂにより取り出されたデータは、データ出力部４４ａ，４４ｂを介して、フェッチデータとして演算・命令ユニット１１に供給される。
【０１１４】
また、バッファ４２ｅ〜４２ｈには、ウエイをウエイ（０）とウエイ（１）とで選択するためのセレクタ４３ｃ，４３ｄが接続されている。セレクタ４３ｃは、演算・命令ユニット１１から供給されたコマンドに従って、バッファ４２ｅ，４２ｆの何れかのデータを取り出す。セレクタ４３ｄは、演算・命令ユニット１１から供給されたコマンドに従って、バッファ４２ｇ，４２ｈの何れかのデータを取り出す。セレクタ４３ｃ，４３ｄにより取り出されたデータは、データ出力部４４ｃ，４４ｄを介して、フェッチデータとして演算・命令ユニット１１に供給される。
【０１１５】
このように、キャッシュシステムは、異なる２ポートＲＡＭ２０から８バイトデータを読み出すことによって、ＳＩＭＤ命令に従って読み出す１６バイトデータを生成して、演算・命令ユニット１１に出力することができる。また、このキャッシュシステムは、異なるウエイに跨って１６バイトデータが格納されていても、全２ポートＲＡＭの出力ポートから８バイトデータを読み出して、指定されたアドレスに従って８バイトデータを選択できる。これにより、このキャッシュシステムは、読み出すデータのウエイを判定した後にウエイごとにデータを選択する場合と比較して、簡単な配線構成によって１６バイトデータを出力することができる。
【０１１６】
なお、上述の実施の形態は一例である。このため、上述の実施形態に限定されることはなく、この実施の形態以外であっても、技術的思想を逸脱しない範囲であれば、設計等に応じて種々の変更が可能であることは勿論である。
【符号の説明】
【０１１７】
１  ＣＰＵ
２  命令ユニット
３  演算ユニット
４  一次データキャッシュメモリ
５  一次命令キャッシュメモリ
６  二次キャッシュメモリ
１１  演算・命令ユニット
１２  ＥＣＣチェック／訂正／パリティ生成部
１３  ムーブインデータレジスタ
１４  ＥＣＣチェック／訂正部
１５  ムーブアウトデータレジスタ
２０  ２ポートＲＡＭ
２１ａ  第１入力ポートレジスタ
２１ｂ  第２入力ポートレジスタ
２２  記憶部
２３ａ  第１出力ポートレジスタ
２３ｂ  第２出力ポートレジスタ
３０ａ  第１アドレス生成器
３０ｂ  第２アドレス生成器
３１ａ  第１アドレス変換器
３１ｂ  第２アドレス変換器
４１ａ〜４１ｈ  セレクタ
４２ａ〜４２ｈ  バッファ
４３ａ〜４３ｄ  セレクタ
４４ａ〜４４ｄ  データ出力部
【図１】
0005493954.tif 000002
【図２】
0005493954.tif 000003
【図３】
0005493954.tif 000004
【図４】
0005493954.tif 000005
【図５】
0005493954.tif 000006
【図６】
0005493954.tif 000007
【図７】
0005493954.tif 000008
【図８】
0005493954.tif 000009
【図９】
0005493954.tif 000010
【図１０】
0005493954.tif 000011
【図１１】
0005493954.tif 000012
【図１２】
0005493954.tif 000013
【図１３】
0005493954.tif 000014
【図１４】
0005493954.tif 000015
【図１５】
0005493954.tif 000016
【図１６】
0005493954.tif 000017
【図１７】
0005493954.tif 000018