(57)【要約】【課題】効率的なデータ通信を可能とする。【解決手段】Ｎ個のポートを有するインターフェース装置は、Ｎ個のポートにより共有されかつ各々が前記Ｎ個のポートの何れかに割り当てられた複数のキャッシュタグを有するキャッシュメモリと、Ｎ個のポートに対応するＮ個のキャッシュ判定器と、を有する。Ｎ個のキャッシュ判定器の各々は、複数のキャッシュタグの全ての値に基づいて、キャッシュメモリにおいてキャッシュミスが発生したか否かを判定する判定手段と、判定手段によりキャッシュミスが発生したと判定された場合に、自ポートに割り当てられたキャッシュタグの値を更新する更新手段と、を有する。【選択図】図１
2018160055.tif 000002
【特許請求の範囲】
【請求項１】
Ｎ個のポートを有するインターフェース装置であって、
前記Ｎ個のポートにより共有されかつ各々が前記Ｎ個のポートの何れかに割り当てられた複数のキャッシュタグを有するキャッシュメモリと、
前記Ｎ個のポートに対応するＮ個のキャッシュ判定器と、
を有し、
前記Ｎ個のキャッシュ判定器の各々は、
前記複数のキャッシュタグの全ての値に基づいて、前記キャッシュメモリにおいてキャッシュミスが発生したか否かを判定する判定手段と、
前記判定手段によりキャッシュミスが発生したと判定された場合に、自ポートに割り当てられたキャッシュタグの値を更新する更新手段と、
を有する
ことを特徴とするインターフェース装置。
【請求項２】
前記Ｎ個のキャッシュ判定器の各々における前記判定手段は、
自ポートにおけるデータ要求のアドレス値と自ポートに対して割り当てられたキャッシュタグの値との比較を行いキャッシュミスの判定を行う第１の判定手段と、
自ポート以外の（Ｎ−１）個のポートにおけるデータ要求のアドレス値と自ポートに対して割り当てられたキャッシュタグの値との比較を行いキャッシュミスの判定を行う（Ｎ−１）個の第２の判定手段と、
自ポートにおける前記第１の判定手段と自ポート以外の（Ｎ−１）個のポートにおける前記第２の判定手段とによる判定結果を集計し最終判定を行う第３の判定手段と、
を有する
ことを特徴とする請求項１に記載のインターフェース装置。
【請求項３】
前記Ｎ個のキャッシュ判定器の各々における前記判定手段において、
自ポートにおけるデータ要求のアドレス値の列は、第１のパイプラインとして構成され、
自ポートにおけるキャッシュタグの列は、カウンターフローパイプラインである第２のパイプラインとして構成され、
自ポート以外の（Ｎ−１）個のポートにおけるデータ要求のアドレス値の列は、（Ｎ−１）個の第３のパイプラインとして構成され、
前記第１の判定手段は、前記第１のパイプラインのノードと前記第２のパイプラインのノードとを比較するよう構成され、
前記（Ｎ−１）個の第２の判定手段は、前記第１のパイプラインのノードと前記（Ｎ−１）個の第３のパイプラインのノードとを比較するよう構成される
ことを特徴とする請求項２に記載のインターフェース装置。
【請求項４】
前記キャッシュメモリは、フルアソシアティブ方式で構成されることを特徴とする請求項１乃至３の何れか１項に記載のインターフェース装置。
【請求項５】
前記判定手段によりキャッシュミスが発生したと判定された場合に、前記Ｎ個のポートとは異なるポートで接続するバスを介して、該バスに接続する外部メモリからデータを取得し前記キャッシュメモリに格納する取得手段を更に有する
ことを特徴とする請求項１乃至４の何れか１項に記載のインターフェース装置。
【請求項６】
前記Ｎ個のポートにはＮ個のデバイスが接続されており、少なくとも１個のデバイスにおけるデータの転送長は、他のデバイスにおけるデータの転送長と異なる
ことを特徴とする請求項５に記載のインターフェース装置。
【請求項７】
前記キャッシュメモリには、キャッシュミスが発生した際のリード要求のための受信領域及びライト要求のための送信領域の少なくとも一方が割り当てられる
ことを特徴とする請求項５又は６に記載のインターフェース装置。
【請求項８】
前記Ｎ個のポートの同期を管理する同期ポインタを更に有し、
前記更新手段は、キャッシュミス、キャッシュ共有、キャッシュメモリへの書き込み、のいずれかのときに前記同期ポインタを更新する
ことを特徴とする請求項１に記載のインターフェース装置。
【請求項９】
ＴＳＶ（Through Silicon Via）で接続された積層メモリの層数と同数のポートを有する
ことを特徴とする請求項１に記載のインターフェース装置。
【請求項１０】
前記キャッシュメモリを混載ＤＲＡＭで構成する
ことを特徴とする請求項１に記載のインターフェース装置。
【請求項１１】
各ポートのデータ要求のアドレス値を転送先に合わせて変更するメモリ管理手段を更に有する
ことを特徴とする請求項１に記載のインターフェース装置。
【請求項１２】
Ｎ個のポートを有するインターフェース装置の制御方法であって、
前記インターフェース装置は、前記Ｎ個のポートにより共有されかつ各々が前記Ｎ個のポートの何れかに割り当てられた複数のキャッシュタグを有するキャッシュメモリと、前記Ｎ個のポートに対応するＮ個のキャッシュ判定器と、を有しており、
前記制御方法は、
前記Ｎ個のキャッシュ判定器の各々が、前記複数のキャッシュタグの全ての値に基づいて、前記キャッシュメモリにおいてキャッシュミスが発生したか否かを判定する判定工程と、
前記Ｎ個のキャッシュ判定器の各々が、前記判定工程によりキャッシュミスが発生したと判定された場合に、自ポートに割り当てられたキャッシュタグの値を更新する更新工程と、
を含むことを特徴とする制御方法。
【請求項１３】
コンピュータを請求項１乃至１１の何れか１項に記載のインターフェース装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ通信技術に関するものである。
【背景技術】
【０００２】
近年、半導体プロセス微細化により、組込み機器向けの半導体チップであっても大規模化しており、チップ内には非常に多くのマスターが存在する。そして、多くのマスターが外部メモリ（ＤＲＡＭ等）にデータを読み書きするため、外部メモリにアクセスが集中する。その結果、外部メモリへの連続するアクセスは異なるＤＲＡＭページやバンクにアクセスすることになり、ランダムアクセス性が高くなる。そして、その結果、ＤＲＡＭのページミスやバンク競合、リードとライト切り替わりが多発し、メモリアクセスのレイテンシは非常に長くなる。その結果、組込み機器の性能は低下してしまう。
【０００３】
一方、外部メモリとして一般的な記憶装置であるＤＲＡＭの規格策定では、メモリ帯域を向上する必要性から、ＤＲＡＭ規格の動作周波数を倍々で高周波数化している。例えばＤＤＲ３−ＤＲＡＭからＤＤＲ４−ＤＲＡＭ、ＤＤＲ５−ＤＲＡＭと動作周波数は高速化している。その結果、ＤＲＡＭの高周波数化に合わせて、組込み機器のメモリアクセス制御も高周波数化する必要がある。
【０００４】
また次世代の高性能ＤＲＡＭではＨＢＭ（High Bandwidth Memory）、ＨＭＣ（Hybrid Memory Cube）、ＷｉｄｅＩ／Ｏ等の規格がある。これらの高性能ＤＲＡＭでは、積層したＤＲＡＭをＴＳＶ（Through Silicon Via）技術で接続する。これらの規格は、非常に動作周波数が高速で、接続するバス幅も非常に広いため、豊富なメモリ帯域を供給することができる。またＴＳＶ技術によりチップ外のＤＲＡＭと端子接続するわけではないため消費電力も低く、高速化と省電力化の両方を同時に実現することができる。次世代の高性能ＤＲＡＭの広いバス幅と高周波数化によるメモリ帯域を十分に活かす必要がある。
【０００５】
また、大規模な組込み半導体チップ開発の開発期間を延ばすことなく開発できるように、従来からある画像処理モジュール（データ処理回路）を再利用して搭載する開発手法が一般的となっている。このとき、再利用した画像処理モジュール（データ処理回路）は、前世代の外部メモリ（ＤＲＡＭ）規格に合わせて設計されている。そのため、これらのモジュールはメモリアクセスの１回のメモリアクセス単位（転送長）が小さいため、最新の外部メモリ（ＤＲＡＭ）規格の性能を十分に引き出すことができない。また再利用した画像処理モジュールは、メモリアクセスのレイテンシが長くなることには未対応であり、かえって性能が低下してしまう。また、構築するシステムの大規模化により、複数の半導体チップを互いに接続したり、様々なセンサーを半導体チップに接続したりすることが必要な場合がある。
【０００６】
特許文献１では、ＤＲＡＭアクセスのレイテンシが長くなった場合においても必要な画像を先読みしてキャッシュメモリに蓄え、ＤＲＡＭアクセスのレイテンシを隠蔽して性能を維持する方法を開示している。また、特許文献２では、キャッシュ効率の良いフルアソシアティブ方式のキャッシュタグ判定方法を開示している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１２−２４３０２６号公報
【特許文献２】特開２０１１−８７７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、近年、半導体プロセス微細化による大規模チップ開発においては、組込み用途の半導体チップであっても、チップ内に非常に多くのデータ処理回路（マスター）が存在する。そして、各データ処理回路（マスター）は個別にメモリアクセスするため、各データ処理回路（マスター）が同一のデータをＤＲＡＭに要求することもあり、重複して余分なメモリアクセスを行うことがある。また、多数のデータ処理回路（マスター）が統制されずにメモリアクセスを多発し、ＤＲＡＭへのアクセス競合が多発し、ＤＲＡＭのページミス、リード／ライトの切り替えやバンク競合が起き、１回のメモリアクセスのレイテンシは非常に長くなる。上述の従来技術は、非常に多くのデータ処理回路（マスター）が統制されずにＤＲＡＭに対してメモリアクセスすることを考慮したものではなく、性能低下が発生してしまうことになる。
【０００９】
また次世代ＤＲＡＭを用いた形態、複数の半導体チップを互いに接続した形態や、多数のセンサーを半導体チップに接続する形態への対応については何ら開示していない。また再利用した画像処理モジュール（データ処理回路）への対応、仕様の異なる新旧センサーの混在やセンサー仕様が変更になったときの対応については何ら開示していない。
【００１０】
本発明はこのような問題を鑑みてなされたものであり、複数のデータ処理回路（マスター）によるメモリアクセスを統制し、効率的なデータ通信を可能とするインターフェース技術を提供することを目的としている。
【課題を解決するための手段】
【００１１】
上述の問題点を解決するため、本発明に係るインターフェース装置は以下の構成を備える。すなわち、Ｎ個のポートを有するインターフェース装置において、前記Ｎ個のポートにより共有されかつ各々が前記Ｎ個のポートの何れかに割り当てられた複数のキャッシュタグを有するキャッシュメモリと、前記Ｎ個のポートに対応するＮ個のキャッシュ判定器と、を有し、前記Ｎ個のキャッシュ判定器の各々は、前記複数のキャッシュタグの全ての値に基づいて、前記キャッシュメモリにおいてキャッシュミスが発生したか否かを判定する判定手段と、前記判定手段によりキャッシュミスが発生したと判定された場合に、自ポートに割り当てられたキャッシュタグの値を更新する更新手段と、を有する。
【発明の効果】
【００１２】
本発明によれば、複数のデータ処理回路（マスター）によるメモリアクセスを統制し、効率的なデータ通信を可能とするインターフェース技術を提供することができる。
【図面の簡単な説明】
【００１３】
【図１】第１実施形態に係る情報処理装置の構成を示すブロック図である。
【図２】従来のマルチポート共有キャッシュの構成の一例を示す図である。
【図３】従来のマルチポート共有キャッシュの構成の他の一例を示す図である。
【図４】キャッシュ判定部における動作の一例を示すフローチャートである。
【図５】キャッシュ判定部の詳細構成の一例を示すブロック図である。
【図６】マルチポート共有キャッシュの詳細構成の一例を示すブロック図である。
【図７】第１及び第３各パイプラインの比較動作の一例を示すフローチャートである。
【図８】最終判定動作の一例を示すフローチャートである。
【図９】フェッチ動作の一例を示すフローチャートである。
【図１０】アクセス調停部及びデータ取得部の詳細構成の一例を示すブロック図である。
【図１１】リードキャッシュ動作及びリフィル動作の一例を示すフローチャートである。
【図１２】ライトバックキャッシュ動作及びライト応答動作の一例を示すフローチャートである。
【図１３】第２実施形態に係る情報処理装置の構成を示すブロック図である。
【図１４】第３実施形態に係る情報処理装置の構成を示すブロック図である。
【図１５】第４実施形態に係る情報処理装置の構成を示すブロック図である。
【発明を実施するための形態】
【００１４】
以下に、図面を参照して、この発明の好適な実施の形態を詳しく説明する。なお、以下の実施の形態はあくまで例示であり、本発明の範囲を限定する趣旨のものではない。
【００１５】
（第１実施形態）
本発明に係るインターフェース装置の第１実施形態として、情報処理装置に搭載されるマルチポート共有キャッシュを例に挙げて以下に説明する。
【００１６】
＜１．装置構成＞
図１（ａ）は、第１実施形態に係る情報処理装置の構成を示すブロック図である。具体的には、Ｎ個のポートを介してデータ要求を受付可能に構成されたマルチポート共有キャッシュを挿入した情報処理装置を示している。
【００１７】
情報処理装置は、ＣＰＵ回路部１００、外部メモリ、画像処理部１５０、マルチポート共有キャッシュ１６０を有している。ＤＲＡＭ１１０、ｅＤＲＡＭ（エンベデットＤＲＡＭ，混載ＤＲＡＭ）１２０、Ｓｔａｃｋｅｄメモリ（３Ｄメモリ）１３０は、外部メモリの一例である。また、システムバス（Network On Chip，共有バス）１４０、画像処理バス（Network On Chip，共有バス）１４５等を備える。
【００１８】
ＣＰＵ回路部１００は、マルチコアのＣＰＵ［０］〜［３］、プロセッサバス（Network On Chip，プロセッサ共有バス）１０２を備える。また、ＣＰＵ回路部１００は、固定データやプログラムを格納するＲＯＭ（不図示）、データの一時保存やプログラムのロードに使用されるＤＲＡＭ１１０、及びＨＤＤなどの外部記憶装置（不図示）にアクセス可能に構成されている。ＣＰＵ回路部１００は、画像処理部１５０等を制御し、情報処理装置のシーケンスを統括的に制御する。
【００１９】
外部記憶装置は、ＣＰＵ回路部１００や画像処理部１５０で使用されるパラメータやプログラム、補正データを格納している。ＤＲＡＭ１１０のデータやプログラム等は、外部記憶装置からロードされる構成としてもよい。また本実施形態では、画像処理部１５０の複数のデータ処理回路［０］〜［１１］はＤＭＡＣ（Direct Memory Access Controller）（不図示）を備え、ＤＭＡＣを介してとのデータ転送を行う。このとき、この転送データの格納先はＤＲＡＭ１１０、ｅＤＲＡＭ１２０、Ｓｔａｃｋｅｄメモリ１３０に限らず外部記憶装置であってもよい。
【００２０】
図１（ｂ）は、ＤＲＡＭ１１０のメモリ領域の構成を示す図である。特に、複数のマルチポート共有キャッシュの割り当て例を示している。本実施形態では、前述の課題に対応するため、画像処理部１５０と外部メモリである、ＤＲＡＭ１１０、ｅＤＲＡＭ１２０、Ｓｔａｃｋｅｄメモリ１３０との間にマルチポート共有キャッシュ１６０を挿入する。各マルチポート共有キャッシュ［Ａ］〜［Ｄ］は、図１（ｂ）のように、各々別のメモリ領域に割り当てられている。例えば、マルチポート共有キャッシュ［Ａ］は、図１（ｂ）の領域［Ａ］に割り当てられている。またマルチポート共有キャッシュ［Ｂ］〜［Ｄ］の各々は、領域［Ｂ］〜［Ｄ］に割り当てられている。
【００２１】
＜２．装置の動作＞
データ処理回路［０］が、アドレス（アドレス値）０ｘ０Ａ００＿００００〜０ｘ０Ａ８Ｆ＿００００の領域［Ａ］のデータをＤＲＡＭ１１０から読み出すときを考える。このとき、データ処理回路［０］のデータ要求が、画像処理バス（Network On Chip，共有バス）１４５に発行され、このデータ要求は、マルチポート共有キャッシュ［Ａ］〜［Ｄ］にブロードキャストされる。マルチポート共有キャッシュ［Ａ］は、データ要求のアドレスが担当するメモリ領域［Ａ］であるため、このデータ要求を受信する。マルチポート共有キャッシュ［Ａ］はキャッシュ判定を行い、キャッシュヒットであれば、キャッシュデータをデータ処理回路［０］に返す。キャッシュ判定がキャッシュミスなら、マルチポート共有キャッシュ［Ａ］は、ＤＲＡＭ１１０にデータ要求を行い、キャッシュデータをリフィルして、読み出したキャッシュデータをデータ処理回路［０］に返す。キャッシュミスのとき、マルチポート共有キャッシュ［Ａ］は、システムバス（Network On Chip，共有バス）１４０に対してデータ要求を行い、必要なデータを読み出す。
【００２２】
画像処理バス（Network On Chip，共有バス）１４５は十分な転送帯域を有しており、データ処理回路［０］〜［１１］のすべてが並列にデータ要求を行っても、マルチポート共有キャッシュ［Ａ］〜［Ｄ］には並列にデータ要求が届く。
【００２３】
マルチポート共有キャッシュ［Ａ］〜［Ｄ］がない場合には、データ処理回路［０］〜［１１］のすべてのデータ要求はＤＲＡＭ１１０に集中してしまう。本実施形態では、マルチポート共有キャッシュ［Ａ］〜［Ｄ］があるので、データ処理回路［０］〜［１１］のデータ要求は、まずマルチポート共有キャッシュ［Ａ］〜［Ｄ］により並列にキャッシュ判定がなされる。そして、マルチポート共有キャッシュ［Ａ］〜［Ｄ］により、キャッシュミスのデータ要求だけがＤＲＡＭ１１０にアクセスする。そのため、ＤＲＡＭ１１０へのデータ要求は離散的となり、本実施形態では、ＤＲＡＭ１１０へのアクセス集中は緩和される。またマルチポート共有キャッシュのため、複数のデータ処理回路は互いにキャッシュ共有されている。その結果、あるポートに接続されたデータ処理回路のキャッシュデータを、別のポートに接続されたデータ処理回路が参照できるため、外部メモリへのデータ要求は重複することはない。
【００２４】
また、マルチポート共有キャッシュ［Ａ］〜［Ｄ］の転送長は、メモリの種類（ＤＲＡＭ１１０、ｅＤＲＡＭ１２０、Ｓｔａｃｋｅｄメモリ１３０）により、最適な転送長を選ぶことができる。例えば、図１（ｂ）の領域［Ａ］はＤＲＡＭ１１０の領域とし、領域［Ｃ］はｅＤＲＡＭ１２０の領域とし、領域［Ｄ］はＳｔａｃｋｅｄメモリ１３０の領域とする。領域［Ａ］に対応するマルチポート共有キャッシュ［Ａ］の転送長は、ＤＲＡＭ１１０の仕様にあわせて１２８Ｂｙｔｅ転送に設定する。また領域［Ｃ］に対応するマルチポート共有キャッシュ［Ｃ］の転送長は、ｅＤＲＡＭ１２０の仕様に合わせて２５６Ｂｙｔｅ転送に設定できる。また領域［Ｄ］に対応するマルチポート共有キャッシュ［Ｄ］の転送長は、Ｓｔａｃｋｅｄメモリ１３０の仕様に合わせて２ＫＢｙｔｅ転送に設定できる。そのため外部メモリの仕様に合わせて適切な転送長を選択できる。
【００２５】
このようにＤＲＡＭ規格の世代や次世代ＤＲＡＭ規格に対して、ＤＲＡＭ性能を維持するためにはメモリアクセス１回あたりの転送長を適切に大きくして、ＤＲＡＭのリード／ライトの切り替えやバンク競合の際のレイテンシを隠蔽する。特に次世代の高性能ＤＲＡＭの広いバス幅と高周波数化によるメモリ帯域を十分に活かすために、その領域の転送長は非常に大きな転送長を選択する。
【００２６】
また、データ処理回路［０］〜［１１］は、新旧のＤＲＡＭ世代の仕様（転送長）に合わせて設計されている。その結果、データ処理回路［０］〜［１１］のデータ要求は、各々異なる転送長であり、そのまま外部メモリ（ＤＲＡＭ１１０、ｅＤＲＡＭ１２０、Ｓｔａｃｋｅｄメモリ１３０）にデータ要求すると、ＤＲＡＭに合わせた適切な転送長のデータ要求にならない。そして、外部メモリ（ＤＲＡＭ１１０、ｅＤＲＡＭ１２０、Ｓｔａｃｋｅｄメモリ１３０）にとって不適切な転送長のデータ要求が混在するため、外部メモリは所望の性能が得られなくなる。
【００２７】
しかしながら、本実施形態では、データ処理回路［０］〜［１１］の各々は、必ずマルチポート共有キャッシュ［Ａ］〜［Ｄ］を介して、外部メモリ（ＤＲＡＭ１１０、ｅＤＲＡＭ１２０、Ｓｔａｃｋｅｄメモリ１３０）にアクセスする。そして、マルチポート共有キャッシュ［Ａ］〜［Ｄ］の各々は、データ要求する外部メモリに合わせて転送長を設定できる。そのため、データ処理回路［０］〜［１１］のデータ要求の転送長が外部メモリに対し適切な転送長でなかったとしても、マルチポート共有キャッシュ［Ａ］〜［Ｄ］が外部メモリの仕様に合わせて適切な転送長に変換する。その結果、古いＤＲＡＭ世代の仕様に合わせて設計したデータ処理回路であっても、最新のＤＲＡＭの性能を落とすことなく、再利用することができる。
【００２８】
なお、後述の本実施形態のキャッシュメモリを構成するキャッシュライン長（リフィル長）の変更により、メモリアクセス１回あたりの転送長を制御できる。また後述のデータ取得部の受信バッファと送信バッファの容量の変更によりノンブロッキング転送量を調整できる。
【００２９】
組込み半導体チップでは、コスト制約のため、上記のマルチポート共有キャッシュのキャッシュメモリを大きな容量にできない。しかしながら、依存関係のない多数のデータ処理回路［０］〜［１１］が個別にデータ要求するため、キャッシュ競合が起きやすい。そこで本実施形態では、後述するようにフルアソシアティブ方式のマルチポート共有キャッシュを挿入する。
【００３０】
以上のように、本実施形態の手法では、マルチポート共有キャッシュの各々は、キャッシュミスしたときだけ、間欠的に大きなメモリアクセス単位（転送長）で外部メモリ（ＤＲＡＭ１１０、ｅＤＲＡＭ１２０、Ｓｔａｃｋｅｄメモリ１３０）にアクセスする。
【００３１】
この制御により、外部メモリは、小さなメモリアクセス単位でのデータ要求を受けないので性能は維持される。またキャッシュヒットしたときは、マルチポート共有キャッシュからデータを返すため、チップ全体でのメモリ帯域は見かけ上、ポートの数だけ増加する。また複数のマルチポート共有メモリのポートの数だけアクセスが分散するため、ＤＲＡＭへのアクセス競合が少なくなる。更に、競合時の調停待ちによるメモリアクセスレイテンシの増加が少なくなり、半導体チップ全体の平均的なレイテンシは短くなる。したがって、画像処理の性能は維持でき、（前）半導体プロセス／ＤＲＡＭ世代で開発した画像処理を再利用しやすくなる。
【００３２】
前述の通り、外部メモリとして一般的な記憶装置であるＤＲＡＭの規格策定では、メモリ帯域を向上するため、非常に高周波数化している。一方、組込み機器で用いられるＡＳＩＣ等の論理回路は、最先端プロセッサのように数ＧＨｚの高動作周波数で動作するわけではないので、上述の高周波数化したＤＲＡＭと、そのまま接続することはできない。
【００３３】
本実施形態では、マルチポート共有キャッシュは、インターフェースとして高周波数化したＤＲＡＭと画像処理モジュール(論理回路)とを仲介する。次に、マルチポート共有キャッシュの構成について説明する。
【００３４】
＜３．回路規模の小さなキャッシュ判定＞
図２は、従来のマルチポート共有キャッシュにおけるキャッシュ判定部の構成の一例を示す図である。ここでは、ポート［０］〜ポート［Ｎ−１］のＮ個のポートからデータ要求が入力される。一般的には、選択回路１８１８により、複数のデータ要求の競合に対して、順番にキャッシュ判定部に要求を割り振る。つまり、共有された複数のキャッシュタグはＮ個のポートから複数のデータ要求を同時に処理する必要がないため、回路規模も小さく、後述するキャッシュミス時のキャッシュタグのリプレイス（更新）も特別な工夫は不要である。以下、図２を参照して、連想（ライン選択）方式がフルアソシアティブ方式のキャッシュ判定部１８００の基本動作について説明する。
【００３５】
キャッシュ判定部１８００は、ラウンドロビンで選択する選択回路１８１８により選択されたデータ要求が入力されると、アドレス（アドレス値）をアドレスレジスタ１８２１で保持する。キャッシュ判定部１８００には、８個のキャッシュタグ１８２２が記憶されており、８ノードのフルアソシアティブ方式のキャッシュ装置となる。また８個のキャッシュタグ１８２２には、［０］〜［７］の番号が予め定められており、対応するキャッシュメモリの「相対」キャッシュライン番号を示している。「相対」番号である理由は後述する。アドレスレジスタ１８２１の入力アドレスと８個のキャッシュタグ１８２２は、８個の比較器１８２３で、「一致」が判定される。そして比較器１８２３から８個の比較結果１８２４が判定器１８２５に出力される。
【００３６】
８個の比較結果１８２４のうち、１つでも「一致」であれば、キャッシュヒットと評価される。８個の比較結果１８２４のうち、いずれも「一致」でなければ、キャッシュミスと評価される。評価結果はキャッシュミスフラグ１８２８として、キャッシュ判定部１８００から出力される。
【００３７】
評価結果がキャッシュヒットの場合、「一致」したキャッシュタグの「相対」ライン番号が、ライン番号１８２７としてキャッシュ判定部１８００から出力される。
【００３８】
また評価結果が、キャッシュミスの場合（分岐１８２６のＹＥＳ）、入力アドレスがキャッシュタグ１８２２へ書き込まれ、キャッシュタグが更新される。キャッシュタグ１８２２は、シフトレジスタで構造された記憶領域である。評価結果がキャッシュミスの場合、シフト動作によりキャッシュタグの値が下流のキャッシュタグに移動する。つまり、キャッシュタグ［０］にはキャッシュタグ［１］の値が、キャッシュタグ［１］にはキャッシュタグ［２］の値が各々書き込まれる。同様の書き込みが繰り返され、キャッシュタグ［６］にはキャッシュタグ［７］の値が書き込まれる。そして最後にキャッシュタグ［７］に入力アドレスの値が書き込まれる。評価結果がキャッシュミスの場合、上記のようなキャッシュタグの更新が行われ、ライン番号１８２７としてライン［７］の値がキャッシュ判定部１８００から出力される。
【００３９】
このように必ず古いキャッシュタグ［０］のタグ情報が破棄される、キャッシュタグのリプレイス手法を、「ＦＩＦＯ方式（ラウンドロビン方式）」という。フルアソシアティブ方式のキャッシュ装置では、装置を簡単に実現できるので、リプレイス手法として「ＦＩＦＯ方式（ラウンドロビン方式）」を採用することが多い。
【００４０】
インターフェース装置としての形態を考えた場合、データ読み書きの要求順に対して古い要求から破棄していくことになるため、「ＦＩＦＯ方式（ラウンドロビン方式）」は望ましい手法であると言える。
【００４１】
最後にキャッシュ判定部１８００は、上記のように求めたキャッシュミスフラグ１８２８とライン番号１８２７に、入力アドレスを合わせてキャッシュ判定結果として出力する。
【００４２】
以上のように複数のポートからのデータ要求を選択してキャッシュ判定部に入力すれば、容易にマルチポート共有キャッシュのキャッシュ判定部を構成することができる。しかしながら、この方法では複数のデータ要求のうち１サイクルに１つの要求しかキャッシュ判定することができず、高速な処理には向いていない。しかしながら、回路構成が単純であり、回路規模は小さいキャッシュ判定となっている。
【００４３】
＜４．ポート数に応じて並列化したキャッシュ判定＞
図３は、マルチポート共有キャッシュにおけるキャッシュ判定部の構成の他の一例を示す図である。キャッシュ判定部のアドレスレジスタ１８２１、判定器１８２５、比較器１８２３を、ポート数に応じて並列化する構成について説明する。
【００４４】
共有キャッシュ共有を目的とする場合、８個のキャッシュタグ１８２２の［０］〜［７］は、Ｎ個のポートから共有されている必要がある。そのため、並列化されたすべての比較器には、キャッシュタグの値１８３２が各々接続されている。図３の構成では、比較器や判定器の回路規模は増加するが、Ｎ個のポートのデータ要求に対し、キャッシュ判定は並列に動作するため、図２の構成よりは高速である。
【００４５】
一方、キャッシュ判定の結果、キャッシュミスのとき、上述のようにキャッシュタグをリプレイスする必要がある。図３の構成では、Ｎ個のポートのデータ要求を同時に処理しているため、Ｎ個のポートのデータ要求に対して複数（最大Ｎ個）のキャッシュミスが同時に起きることとなる。そのため、複数のキャッシュミスのリプレイスが完了するまでＮ個のポートからの入力を停止する必要があり、キャッシュミスの数だけ処理速度は低下する。しかしながら、回路構成が単純ながら、図２の構成よりは高速化したキャッシュ判定となっている。
【００４６】
＜５．カウンターフローパイプラインを用いたキャッシュ判定＞
このとき図２の構成では、Ｎ個のポートからのデータ要求を順番に選択して判定するため処理速度が低下する。また図３の構成では、Ｎ個のポートのキャッシュミスによるリプレイスを順番に選択してキャッシュタグを書き換える必要があるため処理速度が低下する。
【００４７】
また、図２、図３のキャッシュ判定部をパイプライン化して動作周波数を向上する技術することが考えられる。ただし、パイプライン化により非常に高い動作周波数での動作を実現できる半面、キャッシュミス時のリプレイス動作と、各パイプラインの比較器が適切に連動しなければ、正しいキャッシュ判定結果を得ることはできない。そのため、マルチポート共有キャッシュを実現するためには、図３と同様に、単に比較器や判定器をポート数に応じて並列化するだけでは対応は難しい。またパイプライン動作しているため、図３のようにＮ個のポートのキャッシュミスによるリプレイスを順番に選択してキャッシュタグを書き換え、その間、入力を停止する対応では、各パイプラインの比較器との連動ができない。そのため、正しいキャッシュ判定結果を得ることはできない。
【００４８】
更に、上記に加え、キャッシュタグはＮ個のポートから共有されているため、あるポートのキャッシュミスによるリプレイスが、別のポートの後続するキャッシュヒットのキャッシュタグを破棄してしまう。その結果、複数のポート間で、スラッシングと呼ばれるキャッシュ競合が発生し、システム全体の性能を大きく低下させる場合がある。
【００４９】
以下では、前述のマルチポート共有キャッシュＩ／Ｆの高速化について説明する。具体的には、カウンターフローパイプラインを用いてキャッシュ判定を行う構成について説明する。
【００５０】
図４は、キャッシュ判定部における動作の一例を示すフローチャートである。図４のフローチャートに従い、キャッシュ判定部はキャッシュ判定を行うが、まずキャッシュ判定部はキャッシュタグの構成を以下のように確定させる。
【００５１】
まず、Ｎ個のポートから共有する複数のキャッシュタグをＮ個のグループに分割して、必要なキャッシュタグとして各ポートに割り当てる（Ｓ２１０）。このとき、割り当てるキャッシュタグの数が多いほど、後述するキャッシュタグのリプレイスに有利になる。そのため、優先順位の高いポート、キャッシュヒット率が低い（キャッシュミスが多い）ポートなど、ユースケースに応じて、重要なポート程、割り当てるキャッシュタグの数を多くする。各ポートにおいて、当該ポート自身（自ポート）割り当てられたキャッシュタグを以降では、ホームタグと呼称する。また、あるポートのホームタグ以外のキャッシュタグ（すなわち自ポート以外に割り当てられたキャッシュタグ）を、当該ポートのアウェイタグと呼称する。各ポートのホームタグは排他であり、すべてのホームタグを集合すると、キャッシュタグの総数となる。また各ポートのアウェイタグは、各々のホームタグが互いに異なるので、部分的に同一のキャッシュタグを含むが、同一集合にはならない。
【００５２】
次に、各ポートのデータ要求の有無を確認し、データ要求がなければ、キャッシュ判定をスキップする（Ｓ２１５のＮＯ）。キャッシュ判定を行うポートにデータ要求があれば（Ｓ２１５のＹＥＳ）、以降のキャッシュ判定を実行する。
【００５３】
まず、あるポートのキャッシュ判定部は、ホームタグについて、データ要求のアドレス値と比較する（Ｓ２２０）。もしホームタグに一致するキャッシュタグが見つかったとき（Ｓ２３０のＮＯ）、キャッシュ判定部は、判定結果をキャッシュヒットとし、一致したホームタグのライン番号を出力する（Ｓ２３２）。一方、ホームタグに一致するキャッシュタグが見つからなかったとき（Ｓ２３０のＹＥＳ）、あるポートのキャッシュ判定部は、アウェイタグについて、データ要求のアドレス値と比較する（Ｓ２３４）。
【００５４】
もしアウェイタグに一致するキャッシュタグが見つかったとき（Ｓ２４０のＮＯ）、キャッシュ判定部は、判定結果をキャッシュヒットとし、一致したアウェイタグのライン番号を出力する（Ｓ２４２）。一方、アウェイタグにも一致するキャッシュタグが見つからなかったとき（Ｓ２４０のＹＥＳ）、あるポートのキャッシュ判定部は、判定結果をキャッシュミスとする。そしてホームタグからリプレイス先を選択し、ホームタグをリプレイスし、ホームタグのリプレイス先をライン番号とし出力する（Ｓ２４４）。
【００５５】
Ｎ個のポートについてそれぞれ上記の判定を行い、すべてのポートの判定が完了するまで繰り返す（Ｓ２５０のＮＯ）。すべてのポートが完了したら（Ｓ２５０のＹＥＳ）、キャッシュ判定部のキャッシュ判定が完了する。
【００５６】
高性能を維持するためには、上記のキャッシュ判定を短いサイクル（好適には１サイクル）で行う必要があり、ポート毎にキャッシュ比較器と最終判定器を備え、ポート毎のキャッシュ判定を並列化する。またキャッシュタグが多くなると比較器と最終判定器の組み合わせ回路の遅延量が大きくなり、動作周波数を向上することが難しくなる。そのため、図５のようにパイプライン回路で構成するとよい。
【００５７】
図５は、キャッシュ判定部の詳細構成の一例を示すブロック図である。図５は構成を単純にするため、２ポートのマルチポート共有キャッシュのキャッシュ判定部とし、キャッシュタグは１２個で、ポート［０］とポート［１］のホームタグは６個ずつとし、そしてキャッシュ判定部は３段のパイプラインステージの構成とする。
【００５８】
ポート［０］に対してキャッシュタグ［０］，［１］，［４］，［５］，［８］，［９］をホームタグと呼ぶ。また、キャッシュタグ［２］，［３］，［６］，［７］，［１０］，［１１］をアウェイタグと呼ぶ。
【００５９】
そして、ポート［１］に対してキャッシュタグ［２］，［３］，［６］，［７］，［１０］，［１１］をホームタグと呼び、キャッシュタグ［０］，［１］，［４］，［５］，［８］，［９］をアウェイタグと呼ぶ。
【００６０】
各ポートは比較するためのアドレス列をパイプラインレジスタで伝達する（第１パイプライン）。ポート［０］はアドレス列｛Ａ，Ｂ，Ｃ，Ｄ，・・・｝を第１パイプライン［０］に入力し、ポート［１］はアドレス列｛Ｐ，Ｑ，Ｒ，Ｓ，・・・｝を第１パイプライン［２］に入力する。
【００６１】
キャッシュ判定部は、判定結果がキャッシュミスのときキャッシュタグをリプレイスする必要がある。ポート［０］のホームタグは、キャッシュタグ［９］，［８］，［５］，［４］，［１］，［０］のパイプラインレジスタで構成される。そしてリプレイスのときに、キャッシュミスしたアドレスを入力し、キャッシュタグに格納されている値を１ステージだけ移動する（ポート［０］の第２パイプライン）。同様にポート［１］のホームタグは、キャッシュタグ［１１］，［１０］，［７］，［６］，［３］，［２］のパイプラインレジスタで構成され、リプレイスによりキャッシュタグに格納されている値を移動する（ポート［１］の第２パイプライン）。
【００６２】
本実施形態では、さらにアウェイタグに格納されているキャッシュタグともアドレスを比較する必要がある。そこで、各ポートはアウェイタグとの比較のためのアドレス列をパイプラインレジスタで伝達する（第３パイプライン）。例えば、ポート［１］の第３パイプライン［１］に、ポート［０］のアドレス列｛Ａ，Ｂ，Ｃ，Ｄ，・・・｝を入力し、ポート［０］の第３パイプライン［０］に、ポート［１］のアドレス列｛Ｐ，Ｑ，Ｒ，Ｓ，・・・｝を入力する。その結果、ポート［０］から入力されるアドレス列｛Ａ，Ｂ，Ｃ，Ｄ，・・・｝は、ポート［０］のアウェイタグであるポート［１］のキャッシュタグ［１１］，［１０］，［７］，［６］，［３］，［２］と比較できる。また逆に、ポート［１］から入力されるアドレス列｛Ｐ，Ｑ，Ｒ，Ｓ，・・・｝は、ポート［１］のアウェイタグであるポート［０］のキャッシュタグ［９］，［８］，［５］，［４］，［１］，［０］と比較できる。
【００６３】
各ポートのキャッシュ判定器の各パイプラインステージの比較をもとに、ミス判定（キャッシュヒットでない）を行い、パイプラインステージの比較がすべてキャッシュミスなら、そのパイプラインはキャッシュミスと判定する。そして最終段の最終判定器は、あるポートは、第１パイプラインのホームタグの判定結果と、別ポートの第３パイプラインのアウェイタグの判定結果の両方を合わせてキャッシュミスを判定し、判定結果を確定させる。
【００６４】
以上の構成にした場合、キャッシュ判定をパイプライン化して動作周波数を向上できる。また各ポートのホームタグは、複数のキャッシュタグを排他で割り当てている。そして、キャッシュミス時のリプレイスはホームタグにしか起きない仕組みである。その結果、複数のポートでキャッシュミスが同時に起きても、リプレイスするキャッシュタグ（第２パイプライン）は異なり、必ず並列にリプレイスを実行することができる。リプレイスが競合したとき、キャッシュ判定部を停止する必要はない。また、あるポートのキャッシュミスが別のポートのホームタグをリプレイスすることも起きない。
【００６５】
そのため、予め優先順位等のユースケースにより複数のキャッシュタグを必要な数だけホームタグとして各ポートに割り当てておけば、スラッシングなどのキャッシュ競合により、別ポートにキャッシュタグを占有されることは起きない。その結果、本実施形態の手法では所望のシステム性能を維持できる。そして各ポートは、別ポートにあるアウェイタグとの比較により、アドレスと一致するキャッシュタグがあれば、キャッシュヒットとなり、キャッシュ内に記憶されたキャッシュデータを利用できる。キャッシュヒットするキャッシュデータは共有し、キャッシュミスするキャッシュデータは排他で管理することにより、前述の課題を解決している。
【００６６】
上記の図５を用いた一例では、単純な構成で説明をしたが、図６を用いてマルチポート共有キャッシュのキャッシュ判定部をさらに説明する。
【００６７】
図６は、マルチポート共有キャッシュの詳細構成の一例を示すブロック図である。図６のようにＮ個のポートに対応して、Ｎグループに分割したキャッシュタグを含む、Ｎ個のキャッシュ判定器［０］，［１］，・・・［Ｎ−１］と、Ｎ個の最終判定器［０］，［１］，・・・［Ｎ−１］とを備える。このとき各キャッシュ判定器は、１本の第１パイプラインと、１本の第２パイプラインと、Ｎ−１本の第３パイプラインを備える。また各最終判定器は、１本のホームタグの判定結果と、Ｎ−１本のアウェイタグの判定結果の入力を備える。
【００６８】
あるポート［ｐ］のアドレス入力は、対応するキャッシュ判定器［ｐ］の第１パイプラインに接続する。そして、ポート［ｐ］のアドレス入力を、対応するキャッシュ判定器［ｐ］以外の残りのキャッシュ判定器の第３パイプラインに入力する。これらのアドレス入力は、アドレス入力の接続器を用いて、Ｎ個のポートと、Ｎ個のキャッシュ判定器［０］，［１］，・・・［Ｎ−１］の第１パイプラインと、第３パイプラインをすべて接続すればよい。
【００６９】
また、あるキャッシュ判定器［ｐ］の第１パイプラインの判定結果を、対応する最終判定器［ｐ］のホームタグ結果に入力する。そして、最終判定器［ｐ］のアウェイタグ結果には、対応するキャッシュ判定器［ｐ］以外の残りのキャッシュ判定器の第３パイプラインからの判定結果を入力する。これらの判定結果の入力は、判定結果の接続器を用いて接続する。つまり、Ｎ個のキャッシュ判定器［０］，［１］，・・・［Ｎ−１］の第１パイプラインと、第３パイプラインを、Ｎ個の最終判定器［０］，［１］，・・・［Ｎ−１］のホームタグ結果とアウェイタグ結果をすべて接続すればよい。
【００７０】
以上のように、アドレス入力の接続器と、判定結果の接続器を用いて、Ｎ個のポートと、Ｎ個のキャッシュ判定器と、Ｎ個の最終判定器を所定の方法で接続する。それにより、本実施形態ではＮ個のポートからのデータ要求を、キャッシュタグを共有しながら、高速にキャッシュ判定することができる。
【００７１】
なお、上記のアドレス入力の接続器と、判定結果の接続器の接続を切り替えることでマルチポートのキャッシュ共有のし方を変更できることは言うまでもない。例えば、ポートの個数Ｎを容易に変更できる。また、１つのポートに対応するキャッシュ判定器を１つから複数個に増やすことで、そのポートのホームタグを増やすことが可能である。
【００７２】
また、図５を参照して説明した回路構成では、すべてのポートに同一アドレスが同時に入力された場合、並列化してキャッシュ判定可能であるが、すべてのポートでキャッシュミスと判定してしまう。その結果、すべてのポートのホームタグに同一のキャッシュタグ（ｔａｇ＿ａｄｄｒｅｓｓ）が格納され、同じデータ要求が外部メモリに発行されてしまう。
【００７３】
その問題を解消するため、図６のキャッシュ判定部の入力に、同一アドレス検出器４１２を挿入する。この回路は、同一アドレスが同時に入力されたことを検出し、予め定められたポート毎の優先順位に従い、優先順位の高いポートに、そのアドレスを入力する。そして、この回路は、それ以外のポートには、１サイクル遅延させて、そのアドレスを入力する。その結果、他のポートには、アドレスが１サイクル後にキャッシュ判定部に入力されて、優先順位の高いポートの格納済みのキャッシュタグ（アウェイタグ）を参照してキャッシュヒットと判定できる。
【００７４】
同一アドレス検出器４１２により、複数のポートに同一アドレスが同時入力されたときのキャッシュ共有を実現して、外部メモリへの不要なデータ要求を削減することができる。
【００７５】
以上のように、本実施形態のマルチポート共有キャッシュにおいては、複数のポートに対するキャッシュミスが同時に起きた時のキャッシュタグのリプレイスの競合を回避することができる。そのため、簡易な制御回路で処理速度の低下が少ないキャッシュ判定を実現することができる。
【００７６】
また、カウンターフローパイプラインを用いたキャッシュ判定は、非常に単純なシフトレジスタでデータを更新するパイプライン構成となっており、非常にＧＨｚオーダーの高動作周波数で動作させることができる。そのため、次世代ＤＲＡＭの非常に大きなメモリ帯域に対応しやすい。
【００７７】
＜６．キャッシュ判定部の詳細動作＞
次に図５と図６記載のキャッシュ判定のし方について詳細説明する。前述のマルチポート共有キャッシュに対応するために、キャッシュ判定部は、第１パイプラインおよび第３パイプラインと、第２パイプラインとのキャッシュタグ比較を行うキャッシュ判定器と、その比較結果を集計する最終判定器で構成されている。
【００７８】
あるポートの第１パイプラインには、比較対象のアドレスとして以下の信号が入力される。
・第１パイプラインの有効信号である「ｖａｌｉｄ」
・第１パイプラインのアドレス信号である「ａｄｄｒｅｓｓ」
・第１パイプラインのライト信号である「ｗｒｉｔｅ＿ｅｎａｂｌｅ」
・第１パイプラインのライトデータ信号である「ｗｒｉｔｅ＿ｄａｔａ」
・第１パイプラインのキャッシュミスを示す信号である「ｃａｃｈｅ＿ｍｉｓｓ」
【００７９】
このとき、キャッシュミスを示す信号である「ｃａｃｈｅ＿ｍｉｓｓ」は初期値を"１"とする。また、上記ポート以外のＮ−１個のポートに対応する第３パイプラインにも、比較対象のアドレスとして同様の信号が入力される。例えば、図５の一例では、３ステージのパイプラインで構成されており、ポート［０］に対して、第１パイプラインとしてアドレス列｛Ｐ，Ｑ，Ｒ，Ｓ，・・・｝、第３パイプラインとしてアドレス列｛Ａ，Ｂ，Ｃ，Ｄ，・・・｝が入力されている。そしてＡ，Ｂ，Ｃ，Ｄ，Ｐ，Ｑ，Ｒ，Ｓの各々は、上記のアドレスの信号で構成されている。
【００８０】
一方、あるポートの第２パイプラインには、被比較対象のキャッシュタグとして以下の信号が入力される。
・第２パイプラインの有効信号である「ｔａｇ＿ｖａｌｉｄ」
・第２パイプラインのキャッシュされたデータの格納アドレスを示す信号である「ｔａｇ＿ａｄｄｒｅｓｓ」
・第２パイプラインのライトによりキャッシュデータが更新されたことを示す信号である「ｍｏｄｉｆｉｅｄ」
・第３パイプラインのアドレスと一致して別ポートから共有されたことを示す第２パイプラインの信号である「ｓｈａｒｅｄ」
【００８１】
このとき、キャッシュタグの状態を示す「ｍｏｄｉｆｉｅｄ」と「ｓｈａｒｅｄ」は初期値を"０"とする。例えば、図５の一例では、３ステージのパイプラインで構成されており、ポート［０］に対して、第２パイプラインとしてキャッシュタグ列｛［９］，［８］，［５］，［４］，［１］，［０］｝が入力されている。この［９］，［８］，［５］，［４］，［１］，［０］の各々は、上記のキャッシュタグの信号で構成されている。
【００８２】
図７（ａ）は、キャッシュ判定に係る第１パイプラインの比較動作の一例を示すフローチャートである。具体的には、ホームウェイのアドレス列（第１パイプライン）と、キャッシュタグ列（第２パイプライン）のキャッシュ判定器の動作を示している。
【００８３】
アドレス列（第１パイプライン）の、あるアドレスの有効信号「ｖａｌｉｄ」が無効の場合（Ｓ５１０のＮＯ）、判定を行う必要はない。あるアドレスの有効信号「ｖａｌｉｄ」が有効の場合（Ｓ５１０のＹＥＳ）、キャッシュタグ列（第２パイプライン）のすべてのキャッシュタグと比較を行う。
【００８４】
キャッシュタグ列（第２パイプライン）のうち、あるキャッシュタグの有効信号「ｔａｇ＿ｖａｌｉｄ」が無効のとき（Ｓ５１４のＮＯ）、そのキャッシュタグはキャッシュミスしたと判定する。そして、第１パイプラインの「ｃａｃｈｅ＿ｍｉｓｓ」を保持する（Ｓ５２４）。
【００８５】
また、あるキャッシュタグの有効信号「ｔａｇ＿ｖａｌｉｄ」が有効のとき（Ｓ５１４のＹＥＳ）、アドレス信号「ａｄｄｒｅｓｓ」と、キャッシュタグのアドレス信号「ｔａｇ＿ａｄｄｒｅｓｓ」とを比較する。そして、比較結果が不一致のとき（Ｓ５１８のＮＯ）、そのキャッシュタグはキャッシュミスしたと判定し、第１パイプラインの「ｃａｃｈｅ＿ｍｉｓｓ」を保持する（Ｓ５２４）。逆に比較結果が一致のとき（Ｓ５１８のＹＥＳ）、あるアドレスと、あるキャッシュタグは、キャッシュヒットしたと判定し、第１パイプラインの「ｃａｃｈｅ＿ｍｉｓｓ」を"０"に値を変更する（Ｓ５２０）。
【００８６】
そして、あるアドレスの「ｗｒｉｔｅ＿ｅｎａｂｌｅ」が有効のとき（Ｓ５２８のＹＥＳ）、キャッシュメモリのキャッシュデータを、第１パイプラインの「ｗｒｉｔｅ＿ｄａｔａ」で書き換える。そのとき、第２パイプラインの比較しているキャッシュタグの「ｍｏｄｉｆｉｅｄ」を"１"にする（Ｓ５３０）。逆にあるアドレスの「ｗｒｉｔｅ＿ｅｎａｂｌｅ」が無効のとき（Ｓ５２８のＮＯ）、キャッシュメモリのキャッシュデータは変化しないので、「ｍｏｄｉｆｉｅｄ」の値を保持する（Ｓ５３４）。また、あるアドレスと、あるキャッシュタグがキャッシュミスと判定されたとき、「ｍｏｄｉｆｉｅｄ」の値を保持する（Ｓ５３８）。
【００８７】
以上の図７（ａ）記載のフローチャートを、第１パイプラインのアドレス列のすべてと、第２パイプラインのキャッシュタグ列のすべてについて総当たりで比較すればよい。
【００８８】
図７（ｂ）は、キャッシュ判定に係る第３パイプラインの比較動作の一例を示すフローチャートである。具体的には、Ｎ−１個のアウェイのアドレス列（第３パイプライン）と、キャッシュタグ列（第２パイプライン）のキャッシュ判定器の動作を示している。図７（ｂ）のＳ５１０からＳ５３８までの動作は、ホームのアドレス列（第１パイプライン）と同様であるため、説明を割愛する。
【００８９】
Ｎ−１個のアウェイのアドレス列（第３パイプライン）の、あるアドレスと、あるキャッシュタグがキャッシュヒットと判定されたとき、第２パイプラインの比較しているキャッシュタグの「ｓｈａｒｅｄ」を"１"にする（Ｓ５４０）。また、第３パイプラインの「ｓｈａｒｅｄ」を"１"にする（Ｓ５４０）。また、あるアドレスと、あるキャッシュタグがキャッシュミスと判定されたとき、第２パイプラインの比較しているキャッシュタグの「ｓｈａｒｅｄ」の値を保持する（Ｓ５４４）。また第３パイプラインの「ｓｈａｒｅｄ」の値を保持する（Ｓ５４４）。
【００９０】
以上の図７（ｂ）記載のフローチャートを、Ｎ−１個のポートの第３パイプラインのアドレス列のすべてと、第２パイプラインのキャッシュタグ列のすべてについて総当たりで比較すればよい。
【００９１】
以上の方法により、すべてのキャッシュ判定器においてアドレスとキャッシュタグの比較をした後、各ポートの最終判定器は、そのポートのすべての比較結果を受信する。その後、最終的なキャッシュ判定結果を算出する。
【００９２】
図８は、キャッシュ判定に係る最終判定動作の一例を示すフローチャートである。
【００９３】
まず、あるポート［ｉ］のホームタグとの比較結果である第１パイプラインの判定結果を確認する（Ｓ５５０）。ホームタグとの比較結果がキャッシュミスでない（「ｃａｃｈｅ＿ｍｉｓｓ」＝０）とき（Ｓ５５０のＮＯ）、最終判定器は、最終的に、あるポート［ｉ］はキャッシュヒットしたと判定し、キャッシュミスフラグの値を"０"として出力する。また、ホームタグとの比較結果がキャッシュミス（「ｃａｃｈｅ＿ｍｉｓｓ」＝１）のとき（Ｓ５５０のＹＥＳ）、最終判定器は、ポート［ｉ］を除く、Ｎ−１個の他ポートのアウェイタグとの比較結果を確認する。最終判定器は、Ｎ−１個の他ポートから一つを選択し、アウェイタグとの比較結果である第３パイプラインの判定結果を確認する（Ｓ５５４）。
【００９４】
アウェイタグとの比較結果がキャッシュミスでない（「ｃａｃｈｅ＿ｍｉｓｓ」＝０）とき（Ｓ５５４のＮＯ）、最終判定器は、最終的に、あるポート［ｉ］はキャッシュヒットしたと判定し、キャッシュミスフラグの値を"０"として出力する。アウェイタグとの比較結果がキャッシュミス（「ｃａｃｈｅ＿ｍｉｓｓ」＝１）のとき（Ｓ５５４のＹＥＳ）、Ｎ−１個の他ポートすべてを確認していないなら（Ｓ５５８のＮＯ）、Ｎ−１個の他ポートから次のポートを選択する。Ｎ−１個の他ポートすべてを確認して（Ｓ５５８のＹＥＳ）、すべての比較結果がキャッシュミス（「ｃａｃｈｅ＿ｍｉｓｓ」＝１）であったとき、最終判定器は、最終的に、あるポート［ｉ］はキャッシュミスしたと判定する。そして最終判定器は、キャッシュミスフラグの値を"１"として出力する。
【００９５】
キャッシュミスが起きると、やがて第２パイプラインのキャッシュタグは掃き捨てられる。もし掃き捨てられるキャッシュタグのキャッシュデータがライト動作により書き換えられていた場合には、外部メモリのデータと異なるため、キャッシュデータをライトバックする必要がある。第２パイプラインの「ｍｏｄｉｆｉｅｄ」信号が"１"のとき書き換えが起きたと判断し、ライトバックの実行を意味するライトバックフラグを"１"とする。そして掃き捨てられたキャッシュタグに格納されているｔａｇ＿ａｄｄｒｅｓｓを、外部メモリの格納先であるライトバックアドレスとする。キャッシュ判定部は、第１パイプラインの判定結果と同期して、第２パイプラインのライトバックに関係する信号を出力する。
【００９６】
以上の処理により、最終判定器から、入力されたアドレスをもとに判定結果である以下の信号が出力される。
・第１パイプラインの有効信号である「有効データ（ｖａｌｉｄ）」
・第１パイプラインのアドレス信号である「アドレス（ａｄｄｒｅｓｓ）」
・第１パイプラインのライト信号である「ライト動作（ｗｒｉｔｅ＿ｅｎａｂｌｅ）」
・第１パイプラインのライトデータ信号である「ライトデータ（ｗｒｉｔｅ＿ｄａｔａ）」
・第１パイプラインのキャッシュミスを示す信号である「キャッシュミスフラグ（ｃａｃｈｅ＿ｍｉｓｓ＿ｆｌａｇ）」
・第１パイプラインのキャッシュデータの格納先を示す信号である「ライン番号（ｔａｇ＿ｉｄ）」
・第３パイプラインのキャッシュデータが共有されていることを示す信号である「同期点（ｓｈａｒｅｄ）」
・第２パイプラインのキャッシュタグの掃き捨てを示す信号である「有効キャッシュタグ（ｔａｇ＿ｖａｌｉｄ）」
・第２パイプラインのキャッシュタグの掃き捨てにより、ライトバグ先を示す信号である「ライトバックアドレス（ｔａｇ＿ａｄｄｒｅｓｓ）」
・第２パイプラインのキャッシュタグの掃き捨てにより、ライトバックすることを示す信号である「ライトバックフラグ（ｍｏｄｉｆｉｅｄ）」
【００９７】
なお、キャッシュ判定器４１６と最終判定器部４２０を含むキャッシュ判定部は、後述するデータ取得部に対応したプリフェッチ部（装置／回路／論理）となっている。そして、キャッシュ判定部は、データを必要とする所定のパイプラインステージに対し、先行するパイプラインステージと繋がり、所定のパイプラインステージに対する前処理にあたる。
【００９８】
以上のように、マルチポート共有キャッシュにおいて、複数のポートに対するキャッシュミスの判定をパイプライン動作で高速に判定できる。そしてＮ個のマルチポートから共有されたキャッシュタグ列（第２パイプライン）が共有された状態なのか、書き換えられた状態なのかを、キャッシュ判定に合わせて検出することができる。
【００９９】
＜７．キャッシュメモリ＞
＜７．１．コンシステンシーの維持とコヒーレンシーの維持＞
一般的に、複数のマスターからのキャッシュ共有において、あるポートのキャッシュミスによるキャッシュメモリの書き換え先を、他のポートがキャッシュヒットして読み出すことがある。このとき何れのキャッシュメモリへのアクセスが先に起きたかを正しく考慮し、キャッシュ共有の動作を正しく実行することが必要になる。ライトバック動作のようなキャッシュメモリへのデータの書き込み動作についての正しい動作の維持を「コンシステンシーの維持」と呼ぶ。一方、キャッシュミスの際のキャッシュメモリの更新についての正しい動作の維持を「コヒーレンシーの維持」と呼ぶ。本実施形態のマルチポートの共有キャッシュにおいても、マルチポートから同時に起きる複数のデータ要求に対して「コンシステンシーの維持」と「コヒーレンシーの維持」を実現する必要がある。
【０１００】
以降では、これらの課題に対して図６を用いて詳細動作を説明する。なお、キャッシュ判定器と最終判定器によるキャッシュ判定は、上述したものと同様である。入力ポートから最終判定器までは、同じ速度で並列動作しているため、基本的にＮ個のポートからのデータ要求は、時間的に、おおよそ正しい時刻で順番に処理されている。そこで本実施形態では、Ｎ個のポートの最終判定器からのキャッシュ判定結果をもとに、すべてのポートからのデータ要求について同期する。
【０１０１】
具体的には、図６のプリフェッチ部４１０のキャッシュ同期（プリフェッチキャッシュ同期４２２）で同期を管理するための情報（同期ポインタ、タイムスタンプ）を付加する。本実施形態では、すべてのポートのキャッシュ判定結果を参照し、１ポートでもキャッシュミスもしくはライト動作が起きていたら、同期ポインタの値を１だけ増加する。またすべてのポートのキャッシュ判定結果が、キャッシュヒットで、キャッシュメモリへのリードのみであったとき、Ｎ個のポートのすべてのキャッシュメモリの状態は変化しないので、同期ポインタは数値を変更する必要はない。そして、プリフェッチキャッシュ同期４２２は、算出した同期ポインタの値を、各ポートのキャッシュ判定結果に付加する。
【０１０２】
このとき、同期ポインタの値が変化する時刻を同期点として定め、この同期点の前後でＮ個のポートのデータ要求を同期し、同期点の前後で、データ要求の順番が守られるようにする。同期ポインタを用いた、キャッシュメモリの制御の同期動作については、キャッシュのフェッチ部４３０の詳細説明で後述する。
【０１０３】
できるだけ同期点の数が少なく、時系列上の同期点と、次の同期点の間隔が長い方が、同期による待ち合わせが少なくなり、性能向上がしやすい。そのため、プリフェッチキャッシュ同期４２２の同期ポインタの算出を、さらに厳密にした方が望ましい。あるポートのキャッシュミスしたアドレスを、残りのポートのデータ要求のアドレスが異なる場合は無関係のため、同期動作を行う必要はない。たとえば、キャッシュ判定結果の「ｓｈａｒｅｄ」が有効の場合、それまでの別のポートのデータ要求のキャッシュミスやライト動作によるキャッシュメモリの更新を参照しているため、「ｓｈａｒｅｄ」が有効の場合に同期ポインタの値を１だけ増加する。
【０１０４】
プリフェッチ部４１０は、プリフェッチキャッシュ同期４２２から出力された各ポートのキャッシュ判定結果と同期ポインタを各ポートの１つのコマンドとし、Ｎ個のポートのコマンド中間ＦＩＦＯ［０］〜［Ｎ−１］に各々送出する。
【０１０５】
次に、キャッシュメモリを制御しながら、キャッシュデータを管理するフェッチ部４３０について詳細説明する。フェッチ部４３０は、Ｎ個のポートの各々に、コマンド処理［０］〜［Ｎ−１］を備え、すべてのコマンド処理は、フェッチキャッシュ同期４３４と接続されている。フェッチキャッシュ同期４３４から、各コマンド処理には、同一のシステム同期ポインタが入力されている。
【０１０６】
図９は、マルチポート共有キャッシュのフェッチ動作の一例を示すフローチャートである。図９を参照して上述のコマンド処理４３２の動作について、詳細説明する。
【０１０７】
あるポート［ｉ］は、他ポートからのアウェイタグの要求の有無を調べる。他ポートからの要求がある場合（Ｓ６０２のＹＥＳ）は、自ポート（ポート［ｉ］）のコマンド処理は行わず、他ポートのキャッシュメモリの制御を優先的に処理する。そして、他ポートからの要求に対し、キャッシュメモリの制御を実施（Ｓ６２０）し、他ポートからのアウェイタグの要求のため（Ｓ６２２のＹＥＳ）、要求のあった他ポートのコマンド処理の結果を応答する（Ｓ６２６）。
【０１０８】
他ポートからの要求がない場合（Ｓ６０２のＮＯ）のとき、自ポート［ｉ］のコマンド処理を行う。具体的には、前述のフェッチキャッシュ同期４３４からのシステム同期ポインタと中間ＦＩＦＯに保持されているコマンドの同期ポインタを比較する。システム同期ポインタとあるポート［ｉ］の同期ポインタが同一でなければ（Ｓ６０６のＮＯ）、キャッシュ同期のため待ち合せが必要のため待機する（Ｓ６０４）。
【０１０９】
システム同期ポインタとあるポート［ｉ］の同期ポインタが同一のとき（Ｓ６０６のＹＥＳ）、コマンド処理４３２は、中間ＦＩＦＯからコマンドを取得する（Ｓ６０８）。
【０１１０】
次に自ポート［ｉ］のキャッシュヒットが他ポートのアウェイタグに対するキャッシュヒットであり、他ポートのキャッシュメモリからキャッシュデータ読み出すとき（Ｓ６１０）、他ポートにコマンド処理を要求する。そして、他ポートからコマンド処理の結果を取得する（Ｓ６１２）。その後、自ポート［ｉ］のコマンド処理は、取得したコマンド処理の結果を出力する（Ｓ６２４）。
【０１１１】
自ポート［ｉ］のキャッシュヒットが他ポートのアウェイタグに対するキャッシュヒットでないとき（Ｓ６１０のＮＯ）、自ポート［ｉ］にあるホームタグについてのキャッシュヒットかキャッシュミスとなる。そのため、ポート［ｉ］のコマンド処理は、キャッシュヒットのとき（Ｓ６１４のＹＥＳ）、キャッシュメモリの制御を行い（Ｓ６２０）、その結果をコマンド処理の結果を出力する（Ｓ６２４）。
【０１１２】
またポート［ｉ］のコマンド処理がキャッシュミスのとき（Ｓ６１４のＮＯ）、後述するリフィル済みかどうかを判定する（Ｓ６１６）。そして、リフィル済みでないなら（Ｓ６１６のＮＯ）、待機し（Ａ６１８）、リフィル済みなら（Ｓ６１６のＹＥＳ）、キャッシュメモリの制御を行う（Ｓ６２０）。そして、ポート［ｉ］のコマンド処理は、その結果をコマンド処理の結果を出力する（Ｓ６２４）。
【０１１３】
上記のキャッシュメモリの制御（Ｓ６２０）は、図６のキャッシュメモリ制御［０］〜［Ｎ−１］で行う。また上記の各ポートから他ポートへのコマンド処理の要求は、図６のコマンド入力の接続器４３６で行う。また、他ポートから各ポートへのコマンド処理の結果の取得は、図６の処理結果の接続器４４４で行う。
【０１１４】
＜７．２．アクセス調停部＞
前述のプリフェッチ部４１０とフェッチ部４３０からのデータ要求を調停して、システムバス（共有バス，Network On Chip）へのデータ要求を発行する、アクセス調停部について、図１０（ａ）を用いて説明する。
【０１１５】
図１０（ａ）は、マルチポート共有キャッシュのアクセス調停部の詳細構成の一例を示すブロック図である。プリフェッチ部４１０は、各ポートの何れかにキャッシュミスがあった場合は、システムバスにデータ要求する。このとき、プリフェッチ部４１０は、キャッシュミスしたポートのリードアドレスをリードアドレスレジスタＲＡ［０］〜ＲＡ［Ｎ−１］に書き込む。
【０１１６】
アクセス調停部は、後述するデータ取得器４３８からのプリフェッチ許可信号４７２の状態を評価する。シリアライザ４６１は、各ポートのリードアドレスについて、対応するプリフェッチ許可信号４７２を確認し、プリフェッチ許可信号４７２の状態が「許可」である場合、リード要求Ｉ／Ｆ４６０にリードアドレスを書き込み、システムバスにデータ要求を行う。そして、システムバスから、リード要求に対応したリード応答が、リード応答Ｉ／Ｆ４６３に戻るまで、リード要求したポート番号などの情報をリード要求中間ＦＩＦＯ４６２に保持する。分配器４６４はリード応答が戻ると、リード応答Ｉ／Ｆ４６３からリードデータを読み出す。そして、分配器４６４は、リード要求中間ＦＩＦＯ４６２からリード要求したポート番号を読み出す。そして分配器４６４は、フェッチ部４３０にあるリードデータレジスタＲＤ［０］〜ＲＤ［Ｎ−１］の何れかに書き込む。このような動作でフェッチ部４３０は、送信したリード要求対する、リード応答を受信する。
【０１１７】
アクセス調停部は、リード要求中間ＦＩＦＯ４６２に複数のポート番号などの情報を保持できるため、１つのリード応答が戻るまでに、複数のリード要求をシステムバスにノンブロッキング動作で先行発行できる。
【０１１８】
また、あるポートのプリフェッチ許可信号４７２の状態が「許可」でない場合は、シリアライザ４６１はプリフェッチ許可信号４７２の状態が「許可」である別ポートを検索して、リード要求を発行する。そして、シリアライザ４６１はプリフェッチ許可信号４７２の状態が「許可」でないポートは、「許可」になるまで待機する。
【０１１９】
リードデータレジスタＲＤ［０］〜ＲＤ［Ｎ−１］のリード要求がすべて発行し終わるまで、プリフェッチ部４１０を停止（ストール）する。なおリードデータレジスタＲＤ［０］〜ＲＤ［Ｎ−１］をＦＩＦＯで実現した場合には、このＦＩＦＯが一杯になるまで、プリフェッチ部４１０を停止する必要はないので性能を向上できる。
【０１２０】
本実施形態のマルチポート共有キャッシュはライトバック動作に対応するため、フェッチ部４３０はライトバック動作時にシステムバスにキャッシュメモリのデータを外部メモリにライトするためのライト要求を行う。フェッチ部４３０は、ライト要求が必要なポートに関して、ライトアドレスとライトデータを、対応するライトアドレスレジスタＷＡ［０］〜［Ｎ−１］の何れかに書き込む。アクセス調停部は、リード要求のとき、プリフェッチ許可信号４７２の状態を確認してリード要求していたが、ライト要求のときは、フェッチ許可信号４７４の状態を確認してライト要求を行う。アクセス調停部のライト要求の動作は、上述したリード要求の動作と基本的に同様である。アクセス調停部は、ライトアドレスレジスタ４４６、シリアライザ４６６、ライト要求Ｉ／Ｆ４６５、ライト要求中間ＦＩＦＯ４６７、ライト応答Ｉ／Ｆ４６９、ライト応答レジスタ４４７を用いて、リード要求の動作と同様にライト要求の動作を実現する。
【０１２１】
＜７．３．データ取得部＞
図１０（ｂ）は、マルチポート共有キャッシュのデータ取得部の詳細構成の一例を示すブロック図である。図６と図１０（ｂ）と、図１１（ａ）〜図１１（ｂ）を用いて、キャッシュメモリ制御４４０とキャッシュメモリ４４２を含む、各ポートのデータ取得器４３８の動作について詳細説明する。図６のようにフェッチ部４３０には、Ｎ個のポートに対応して、Ｎ個のデータ取得器ｆｅｔｃｈ［０］〜［Ｎ−１］を備える。
【０１２２】
本実施形態のキャッシュメモリ４４２は、図１０（ｂ）に示すように、論理的には「キャッシュ領域」、「受信領域」と「送信領域」を含んで構成されている。そして、受信領域を管理する情報（受信ポインタ）と、送信領域を管理する情報（送信ポインタ）と、キャッシュ領域を管理する情報（下限データポインタと上限データポインタ）とをキャッシュメモリ制御４４０に備える。
【０１２３】
図１１（ａ）は、キャッシュメモリ制御のリードキャッシュ動作の一例を示すフローチャートである。図１１（ｂ）は、キャッシュメモリ制御のリフィル動作の一例を示すフローチャートである。まずリードキャッシュとリフィル動作について詳細説明する。
【０１２４】
キャッシュメモリ制御４４０は、キャッシュ判定の結果「ライン番号、キャッシュミスフラグ」を取り出す（Ｓ６４０）。そして評価結果であるキャッシュミスフラグの値に応じて次のキャッシュデータの取得動作を行う。図１１（ａ）にキャッシュデータの取得動作の一例を示す。
【０１２５】
キャッシュミスフラグが無効（キャッシュヒット）のとき（Ｓ６４２のＮＯ）は、キャッシュメモリ制御４４０は、ライン番号とキャッシュメモリ４４２の受信ポインタ、上限データポインタからキャッシュメモリ４４２上の格納アドレスを算出する。そして、その格納アドレスをもとに記憶済みのデータをキャッシュメモリ４４２からリードデータとして読み出す（Ｓ６５０）。そして、要求されたキャッシュデータを出力する（Ｓ６５２）。
【０１２６】
キャッシュミスフラグが有効（キャッシュミス）のとき（Ｓ６４２のＹＥＳ）、キャッシュメモリ制御４４０は、受信ポインタと上限データポインタの差を確認する（Ｓ６４４）。両ポインタに差がない（０の値）のとき（Ｓ６４４のＮＯ）、外部メモリからの要求されているリフィルデータがキャッシュメモリ４４２に届いていないと評価し、リフィルデータが届くまで待機する（Ｓ６４６）。両ポインタに差がある（０ではない値）のとき（Ｓ６４４のＹＥＳ）、外部メモリからの要求されているリフィルデータがキャッシュメモリ４４２に格納済みのため上限データポインタを更新する（Ｓ６４８）。ここからキャッシュデータの出力までの手順は、上述したキャッシュミスフラグが無効（キャッシュヒット）の手順と同様となる。
【０１２７】
データ取得部では、前述のキャッシュデータの取得動作とは並行して、要求されたリフィルデータの受信動作を行っている。図１１（ｂ）にデータ取得部のリフィルデータの受信動作の一例を示す。外部メモリからの要求されているリフィルデータがデータ取得部に届いた場合（Ｓ６６０のＹＥＳ）、受信ポインタを更新する（Ｓ６６２）。次にデータ取得部は受信ポインタとデータポインタの差を確認する（Ｓ６６４）。両ポインタに差が予め定められた受信の閾値と同数であるとき（Ｓ６６４のＹＥＳ）、これ以上、リフィルデータを受信することができないので、プリフェッチ許可信号４７２を「禁止」にする（Ｓ６６８）。両ポインタに差が予め定められた受信の閾値より小さいとき（Ｓ６６４のＮＯ）、外部メモリからリフィルデータを受け取ることができるので、プリフェッチ許可信号４７２は「許可」のままでよい（Ｓ６６６）。
【０１２８】
回路実装では、プリフェッチ部４１０の方がフェッチ部４３０より前段にある。それ故、フェッチ部４３０からのプリフェッチ許可信号を受け取ってから、アクセス調停部でＤＲＡＭへのデータ要求を止めても遅いケースがある。このような回路の位置関係からくるレイテンシの違いを考慮して、上述の受信の閾値を、予め記憶できる受信段数より少なく設定してもよい。また、より厳密な手法としては、リフィル待ち数を新たに定義し、このリフィル待ち数を用いてプリフェッチ許可信号４７２を生成してもよい。新たに定義するリフィル待ち数とは、０から開始し、アクセス調停部でキャッシュミスの度に１を加算し、データ取得部にリフィルデータが到着する度に１を減算した数とする。つまり、リフィル待ち数とは、データ要求を行ったが、まだフェッチ部に到達していないリフィルデータの数を表している。そして、受信済みのリフィルデータ数（受信ポインタと上限データポインタの差）とリフィル待ち数の合計値が将来受信するリフィルデータ数となる。この将来受信する数が受信の閾値より小さい場合、プリフェッチ許可信号４７２は「許可」とし、将来に受信する数が受信の閾値と同じ数であればプリフェッチ許可信号４７２は「禁止」とするのである。このとき、受信数と受信の閾値は同じ値であるので、これ以上、リフィルデータを受け取ることはできない。もしこれ以上、リフィルデータを受け取るとキャッシュ領域を上書きすることになる。そのため、データ取得器４３８は、プリフェッチ許可信号４７２を「禁止」にしてアクセス調停部に通知し、ノンブロッキングアクセスを一旦、停止する。プリフェッチ部は、外部メモリへのデータ要求を停止する。
【０１２９】
図１２（ａ）は、キャッシュメモリ制御のライトバックキャッシュ動作の一例を示すフローチャートである。図１２（ａ）を参照してライトバックキャッシュのライトバック動作について詳細説明する。
【０１３０】
キャッシュメモリ制御４４０は、キャッシュ判定の結果の「ライトバックアドレス、ライトバックフラグ（ｍｏｄｉｆｉｅｄ）」を取り出す（Ｓ６７０）。そして評価結果であるライトバックフラグの値に応じて次のキャッシュデータの書き出し動作を行う。図１２（ａ）にキャッシュデータの書き出し動作の一例を示す。
【０１３１】
ライトバックフラグが無効のとき（Ｓ６７２のＮＯ）は、キャッシュメモリ制御４４０はライトバック動作を行わない。一方、ライトバックフラグが有効（ライトバック）のとき（Ｓ６７２のＹＥＳ）、キャッシュメモリ制御４４０は、送信ポインタと下限データポインタの差を確認する（Ｓ６７４）。両ポインタの差が送信の閾値と同じ値のとき（Ｓ６７４のＹＥＳ）、これまでに発行したライト要求に対するライト応答が戻ってこないため、送信領域が一杯である。そのとき、キャッシュメモリ制御４４０は、これ以上、ライト要求の送信領域にキャッシュデータを保持できないため、ライト要求の発行を停止する。そして、キャッシュメモリ制御４４０は、送信領域が解放されて、両ポインタの差が送信の閾値より小さくなるまで待機する（Ｓ６７６）。
【０１３２】
逆に両ポインタの差が送信の閾値より小さいとき（Ｓ６７４のＮＯ）、外部メモリにライト要求が可能であり、下限データポインタを更新する（Ｓ６７８）。そして、キャッシュメモリ制御４４０は、キャッシュメモリ４４２の送信ポインタ、下限データポインタからキャッシュメモリ４４２上の格納アドレスを算出する。具体的には、下限ポインタの更新により、キャッシュ領域から送信領域に切り替わった領域が格納アドレスとなる。そして、キャッシュメモリ制御４４０は、その格納アドレスをもとに記憶済みのデータをキャッシュメモリ４４２からキャッシュデータとして読み出す（Ｓ６８０）。
【０１３３】
処理しているコマンドがライト動作でないとき（Ｓ６８２のＮＯ）、キャッシュメモリ制御４４０は、読み出したキャッシュデータをキャッシュバックデータとする。一方、処理しているコマンドがライト動作でないとき（Ｓ６８２のＹＥＳ）、キャッシュメモリ制御４４０は、コマンドのライトデータを読み出したキャッシュデータに対して書き込み、ライトバックデータとする（Ｓ６８４）。なお、キャッシュデータのデータ量とライトデータのデータ長が同じ場合、ライトデータがそのままライトバックデータになるため、キャッシュメモリ制御４４０はキャッシュデータの読み出し（Ｓ６８０）を省くことができる。一方、ライトデータがキャッシュデータより小さい場合、キャッシュメモリ制御４４０は、キャッシュデータの一部だけをライトデータで上書きすることになる。そして、キャッシュメモリ制御４４０は、算出したライトバックデータを外部メモリの「ライトバックアドレスに書き出す（Ｓ６８６）。
【０１３４】
図１２（ｂ）は、キャッシュメモリ制御のライト応答動作の一例を示すフローチャートである。データ取得部では、前述のライトバックデータの書き出し動作とは並行して、ライト要求に対するライト応答の受信動作を行っている。
【０１３５】
外部メモリからの要求されているライト応答がデータ取得器に届いた場合（Ｓ６９０のＹＥＳ）、送信ポインタを更新する（Ｓ６９２）。次にデータ取得器は送信ポインタと下限データポインタの差を確認する（Ｓ６９４）。両ポインタに差が予め定められた送信の閾値と同数であるとき（Ｓ６９４のＹＥＳ）、これ以上、送信中のキャッシュデータを保持できないので、フェッチ許可信号４７４を「禁止」にする（Ｓ６９８）。両ポインタに差が予め定められた受信の閾値より小さいとき（Ｓ６９４のＮＯ）、外部メモリに送信中のキャッシュデータを保持することができるので、フェッチ許可信号４７４は「許可」のままでよい（Ｓ６９６）。
【０１３６】
ライトバック動作時のフェッチ許可信号４７４の考え方は、リフィル動作時のプリフェッチ許可信号４７２と基本的に同様でよい。より厳密な手法としては、例えば、送信数を新たに定義し、この送信数を用いてフェッチ許可信号４７４を生成してもよい。新たに定義する送信数とは"０"から開始し、アクセス調停部でライトバックの度に１を加算し、データ取得器にライト応答が到着する度に１を減算した数とする。つまり、送信数とは、ライト要求を行ったが、まだフェッチ部に戻ってこないライト応答の数を表している。そして、受信済みのライト応答の数（送信ポインタと下限データポインタの差）と、送信数の合計値が将来に受信するライト応答の数となる。
【０１３７】
この将来に受信する数が送信の閾値より小さい場合、フェッチ許可信号４７４は「許可」とし、将来に受信する数が送信の閾値と同じ数であればフェッチ許可信号４７４は「禁止」とするのである。このとき、将来に受信する数と送信の閾値は同じ値であるので、これ以上、ライトバック動作を実行することはできない。もし、これ以上、ライトバック動作を実行すると送信領域が受信と送信の境界を越えて、受信領域を上書きすることになる。そのため、データ取得器４３８は、フェッチ許可信号４７４を「禁止」にしてアクセス調停部に通知し、ノンブロッキングアクセスを一旦、停止する。フェッチ部は、外部メモリへのデータ要求を停止する。
【０１３８】
以上説明したように、データ取得部は、要求されたデータを取得するフェッチ部（装置／回路／論理）となっており、取得したデータを所定のパイプラインステージにデータ供給する。
【０１３９】
なお、上述の説明では、キャッシュメモリ制御４４０は、受信の閾値と送信の閾値を予め定め、受信領域と送信領域を一定の容量としていた。これに対し、受信領域と送信領域の総量は一定の容量とし、キャッシュメモリ制御４４０は、図１０（ｂ）の「受信と送信の境界」を動的に変える構成にしてもよい。これにより、キャッシュメモリ制御４４０は、前述の受信領域や送信領域が不足することによるパイプラインの停止を緩和することができる。
【０１４０】
例えば、キャッシュメモリ制御４４０の受信ポインタが「受信と送信の境界」まで到達しており、送信ポインタが「受信と送信の境界」まで到達していないときを考える。このときリード要求があった場合は、前述の方法ではパイプラインを停止するが、キャッシュメモリ制御４４０は、「受信と送信の境界」を送信ポインタの位置まで緩和する。そして、キャッシュメモリ制御４４０は、受信の閾値を一時的に大きくし、プリフェッチ許可信号４７２を「禁止」から「許可」に変更して、リード要求を停止せずに発行すればよい。送信領域が不足する場合は、キャッシュメモリ制御４４０は、逆に「受信と送信の境界」を受信ポインタの位置まで緩和すればよい。
【０１４１】
以上のように、本実施形態では、キャッシュメモリに送信領域を設け、ライト要求に対して、ライト応答がシステムから戻ってくるまで、送信（書き出し）中のライトバックデータ（キャッシュデータ）を保持している。そのため、本実施形態は、システム側のエラーによりデータの書き出しに失敗した場合に対処できる。具体的には、システムから、エラー状態を意味するライト応答が戻ってきたときに、キャッシュメモリ制御４４０は、システムが書き出しに失敗したと判断する。そしてキャッシュメモリ制御４４０は、送信ポインタを更新せず、送信ポインタが指すライトバックデータを再度、送信（書き出し）すればよい。
【０１４２】
＜効果＞
以上説明したとおり第１実施形態のキャッシュ部は、前述のように非常に簡単な機構において、ノンブロッキング動作のフルアソシアティブ方式のキャッシュ装置を実現している。また、本実施形態のキャッシュメモリの領域の一部を受信領域と送信領域に割り当てることが特徴としており、データ受信とデータ送信とデータ保持が一つの記憶領域に統合されている。キャッシュメモリ上にデータ受信の領域とデータ送信の領域とデータ保持の領域を一体化することにより、柔軟な容量変更が可能であり、画像処理の様々な動作に応じた適切な構成変更を実現できる。
【０１４３】
またフルアソシアティブ方式のキャッシュ装置で一般に採用されるＦＩＦＯ方式（ラウンドロビン方式）のリプレイス手法と、本実施形態のキャッシュメモリの用法は合致している。そのため、好適にフルアソシアティブ方式のキャッシュ装置を実現することが可能となる。
【０１４４】
また、本実施形態の手法では、同期ポインタの機能により、マルチポート共有キャッシュにおいて、複数のポートに対する「コンシステンシーの維持」と「コヒーレンシーの維持」を実現することができる。またキャッシュメモリ制御とキャッシュメモリの工夫により、リードキャッシュ、ライトバックキャッシュ共にノンブロッキング動作でＤＲＡＭアクセス・レイテンシを隠蔽して、データ処理のスループットを向上することができる。
【０１４５】
また、キャッシュメモリを構成するキャッシュライン長（リフィル長）の変更により、メモリアクセス１回あたりの転送長を制御でき、ＤＲＡＭ規格に応じた適切なデータ転送を実現するこができる。
【０１４６】
（第２実施形態）
前述の第１実施形態では、ＤＲＡＭ１１０、ｅＤＲＡＭ１２０、Ｓｔａｃｋｅｄメモリ１３０等を外部メモリとして、マルチポート共有キャッシュからメモリアクセスする方法を説明した。
【０１４７】
第２実施形態では、ＤＲＡＭ１１０とＳｔａｃｋｅｄメモリ１３０を外部メモリとする。ｅＤＲＡＭ１２０をキャッシュメモリ［０］〜［Ｎ−１］とし、そのｅＤＲＡＭコントローラ１２２の入出力にキャッシュメモリ制御［０］〜［Ｎ−１］を接続する。また本実施形態では、Ｓｔａｃｋｅｄメモリ１３０の内部に、キャッシュメモリ［０］〜［４Ｎ−１］とキャッシュメモリ制御［０］〜［４Ｎ−１］を備えたデータ取得器ｆｅｔｃｈ［０］〜［Ｎ−１］を内蔵する。
【０１４８】
前述の図６のように、本実施形態のマルチポート共有キャッシュは、コマンド中間ＦＩＦＯにより、プリフェッチ部４１０とフェッチ部４３０が疎結合化されている。そのため、本実施形態のように、図１（ａ）の第１実施形態のマルチポート共有キャッシュの挿入位置に、プリフェッチ部４１０を挿入し、対応するフェッチ部４３０はｅＤＲＡＭ１２０の入出力やＳｔａｃｋｅｄメモリ１３０に内蔵する。
【０１４９】
＜装置構成＞
図１３は、第２実施形態に係る情報処理装置の構成を示すブロック図である。Ｓｔａｃｋｅｄメモリ１３０では、複数のバンクに分かれ、１つのバンクに対して積層された複数のＤＲＡＭでＴＳＶを共有する。そのため、あるバンクに対してあるサイクルで読み書きできるＤＲＡＭは１層のＤＲＡＭのみとなる。そのため、あるバンクに対して、異なる層のＤＲＡＭの値を同時に読み書きすることはできない。そこで、本実施形態の構成においては、積層されたＤＲＡＭが例えば４層であるので、バンク［０］〜［Ｎ−１］と、そのバンクに接続されたＴＳＶ毎に本実施形態のデータ取得器４３８を４個ずつ接続する。
【０１５０】
その結果、バンク単位に４ポート、すなわち、積層メモリの層数と同数のポートの共有キャッシュとすることになる。この構成により、キャッシュヒットする際には、１バンクあたり競合する４層のＤＲＡＭのデータ要求に対して同時にデータ取得できるようになる。そのため、マルチポート共有キャッシュの複数のプリフェッチ部４１０からのデータ要求が同一バンクに集中して、同一バンクの異なる層のＤＲＡＭに対して同時にデータ要求がきても、キャッシュヒットしていれば速度を低下することはない。すなわち本実施形態の構成においては、Ｓｔａｃｋｅｄメモリの性能低下を抑えることができる。
【０１５１】
＜効果＞
本実施形態の手法では、ｅＤＲＡＭをキャッシュメモリに割り当てられるので、キャッシュ容量を非常に大きくすることができる。前述のように、本実施形態のキャッシュ判定は、ポート数、パイプライン段数、パイプライン１段あたりのキャッシュタグ数をスケーラブルに増加することができる。そのため、４０９６ノードのフルアソシアティブ方式のキャッシュ判定を、非常に高い動作周波数で動かすことが可能である。従って、ｅＤＲＡＭをキャッシュメモリとして利用して、キャッシュメモリの大容量化を実現することができる。
【０１５２】
ｅＤＲＡＭでは、チップのダイやパッケージにＤＲＡＭを統合して非常に広いバス幅で論理回路と接続できる。そのため、ｅＤＲＡＭをキャッシュメモリとして利用することにより、キャッシュメモリから１回のアクセスで読み書きできるデータ長が大きくできる。その結果、本実施形態の手法では、キャッシュヒットのときに、大きなキャッシュデータを取得でき、キャッシュミス時のリフィル動作やライトバック動作のキャッシュメモリの更新のレイテンシは小さくてよい。そのため、システム全体の性能向上が見込める。
【０１５３】
以上説明したとおり第２実施形態では、Ｓｔａｃｋｅｄメモリ１３０にキャッシュメモリとキャッシュメモリ制御を内蔵する。この構成により、Ｓｔａｃｋｅｄメモリ１３０の性能をさらに向上することができる。
【０１５４】
（第３実施形態）
第３実施形態では、マルチポート共有キャッシュを備えた、チップ間のインターフェースの形態について説明する。
【０１５５】
従来、チップＡの画像処理部７２０の処理した画像データを、チップＢの画像処理部７３０で処理する場合、ＣＰＵ（不図示）が、転送用のＤＭＡＣ（不図示）を制御してＤＲＡＭ７１０からＤＲＡＭ７１２に転送していた。そのため、ＣＰＵは、画像処理（データ処理回路）［０］〜［７］の処理完了の合間に、上述のＤＭＡＣを制御して、大きな単位で画像データを転送することになる。そのため、画像処理部（データ処理回路）の数が多くなるとＤＭＡＣの個数も増え、ＣＰＵによるＤＭＡＣの制御は非常に複雑なものとなり画像処理のスループットに悪影響を及ぼす可能性がある。
【０１５６】
＜装置構成＞
図１４は、第３実施形態に係る情報処理装置の構成を示すブロック図である。ここでは、マルチポート共有キャッシュを用いてチップ間のデータ転送を実現している。画像処理の入出力部にメモリ管理ユニットＭＭＵ７２５、７３５を配置し、データの転送先のアドレスを切り替える。
【０１５７】
例えば、チップＡでは、画像処理［０］は、ＤＲＡＭ７１０からマルチポート共有キャッシュ［Ａ］を介して画像データを読み出す。そのときのデータ要求のアドレスはＭＭＵ［０］でＤＲＡＭ７１０を指すアドレスとする。そして画像処理［０］は処理後の画像データをマルチポート共有キャッシュ［Ａ］に書き出す。ＭＭＵ［０］は書き出しの際のデータ要求のアドレスをＤＲＡＭ７１２のメモリ空間に変換する。処理後の画像データは、マルチポート共有キャッシュ［Ａ］に書き込まれ、キャッシュから掃き捨てられるときに、ライトバック動作で、ＤＲＡＭ７１２に出力される。
【０１５８】
このとき、前述までの実施形態で説明したように画像処理［０］〜［３］のＤＲＡＭ７１０に対するメモリアクセスは統制されており、ＤＲＡＭ７１０に対して効率的なデータ通信を行うことは言うまでもない。そして、さらに本実施形態では、画像処理［０］〜［３］の別チップのＤＲＡＭ７１２に対するメモリアクセスも統制できることになり、別チップのＤＲＡＭ７１２に対して効率的なデータ通信を行うことができる。
【０１５９】
チップＢでは、画像処理［４］は、マルチポート共有キャッシュ［Ｂ］を介して、ＤＲＡＭ７１２から画像データを読み出し、処理後の画像データをマルチポート共有キャッシュ［Ｂ］に書き出す。チップＢは、チップＡと同様の手法で、チップＢからチップＡにデータ転送ができる。
【０１６０】
チップＡとチップＢの間の通信は、実際にはＰＣＩｅ７６０が行う。システム全体でチップＡとチップＢのメモリマップを取り決める。そして画像処理［０］〜［７］とメモリ管理ユニットＭＭＵ［０］〜［７］は、このメモリマップの所定のアドレスを読み書きすれば、チップ間インターフェースのマルチポート共有キャッシュが自律的に適切なデータ転送を実行する。
【０１６１】
以上説明したとおり第３実施形態では、ＣＰＵはＤＭＡＣを制御する必要が無くなる。すなわち、マルチポート共有キャッシュを通して必要なデータが"Ｓｔｏｒｅ  ａｎｄ  Ｆｏｒｗａｒｄ（蓄積交換）"の手法により、あるチップから別のチップに自動的に転送される。
【０１６２】
本実施形態では、前述の通りフルアソシアティブ方式のキャッシュを備えたマルチポート共有キャッシュとして動作する。そのため、キャッシュ競合やスラッシングなどの性能低下が起きにくく、多数のマスターのメモリアクセスに対して適切な統制ができ、効率的なデータ転送ができる。またアクセス先の変更の際には、キャッシュのリフィル長を変更すればデータ転送長を柔軟に変更できる。また画像処理［０］〜［７］のデータ転送の仕様が変わっても、キャッシュの設定を変更するだけでよい。そのため、マスターごとに個別にＣＰＵのＤＭＡＣ制御プログラムを変更する必要がない。またマルチポート共有キャッシュを介してマスター間のメモリアクセスは柔軟に最適化されるため、ＤＭＡＣ制御プログラムを微調整して多数のマスター間の調整をする必要がない。
【０１６３】
（第４実施形態）
第４実施形態では、マルチポート共有キャッシュを、センサー群とのインターフェースとして利用する形態について説明する。
【０１６４】
従来、センサー群から入力される複数のデータ（画像データや測定データなど）を、チップＣの画像処理部８３０で処理する場合、ＣＰＵ（不図示）が、転送用のＤＭＡＣ（不図示）を制御してセンサー群８２０からＤＲＡＭ８１２に転送していた。そして、次にＣＰＵ（不図示）は、転送用のＤＭＡＣ（不図示）を制御して、ＤＲＡＭ８１２の複数のデータを画像処理（データ処理回路）［４］〜［７］に転送してデータ処理を施していた。そのため、ＣＰＵは、画像処理（データ処理回路）［４］〜［７］の処理完了の合間に、上述のＤＭＡＣを制御して、大きな単位で画像データを転送することになる。そのため、センサーの数が多くなるとＤＭＡＣの個数も増え、ＣＰＵによるＤＭＡＣの制御は非常に複雑なものとなりデータ処理のスループットに悪影響を及ぼす可能性がある。
【０１６５】
またセンサー群はチップ外に接続されるが、個々のセンサーは、用途にあわせて仕様の異なるセンサーが接続される。つまり、センサーにより転送長は異なることが多く、ＣＰＵのＤＭＡＣ制御プログラムは、センサー毎にカスタマイズすることが必要になる。また、あるセンサーが故障により別のセンサーに置き換える際、同一の転送仕様のセンサーが入手困難で新しいタイプのセンサーに置き換わる場合がある。このような場合は、従来のセンサーと異なる転送長にＣＰＵのＤＭＡＣ制御仕様を変更することになる。ＣＰＵ上で動作するＤＭＡＣ制御プログラムの一つが変わると、他のセンサーのＤＭＡＣ制御も影響を受けてしまう可能性がある。そのためセンサーの変更には多大な開発工数が必要になる場合がある。
【０１６６】
＜装置構成＞
図１５は、第４実施形態に係る情報処理装置の構成を示すブロック図である。ここでは、マルチポート共有キャッシュを用いてセンサー群のデータ転送を実現している。図１５（ａ）は、センサー群の入出力部にメモリ管理ユニットＭＭＵ８２５を、画像処理の入出力部にメモリ管理ユニットＭＭＵ８３５を配置し、データの転送先のアドレスを切り替える構成である。なお、図１５（ｂ）のように、センサー群の入出力部にのみメモリ管理ユニットＭＭＵ８２５を配置する構成でもよい。図において点線で囲んだ部分は、デバイス（ここでは、センサー群、画像処理群）とのインターフェースとして機能している。
【０１６７】
例えば、センサー［０］は、センシングしたデータをマルチポート共有キャッシュ［Ａ］に書き込む。そのときのＭＭＵ［０］は書き出しの際のデータ要求のアドレスをＤＲＡＭ８１２のメモリ空間に変換する。マルチポート共有キャッシュ［Ａ］はセンシングしたデータの蓄積し、キャッシュから掃き捨てられるときに、ライトバック動作でＤＲＡＭ８１２に出力する。
【０１６８】
一方、画像処理［５］は、マルチポート共有キャッシュ［Ｂ］を介して、ＤＲＡＭ８１２からセンシングしたデータを読み出せばよい。また、ＤＲＡＭ８１２を介さずにセンサーから直接、画像処理８３０に転送してもよい。
【０１６９】
例えば、センサー［３］は、センシングしたデータをマルチポート共有キャッシュ［Ａ］に書き込む。そのときのＭＭＵ［３］は書き出しの際のデータ要求のアドレスを画像処理［６］のメモリ空間に変換する。マルチポート共有キャッシュ［Ａ］はセンシングしたデータの蓄積し、キャッシュから掃き捨てられるときに、ライトバック動作で画像処理［６］に出力する。センサー群８２０のセンサーの各々の転送長は異なっていてもマルチポート共有キャッシュ８４０を介してライトバックするため、ライトバック時のリフィル長を画像処理［６］の受信バッファの大きさに設定すればよい。
【０１７０】
つまり、センサーの転送長の変更や、転送先の画像処理(データ処理回路)の変更に対しても、要求アドレスやキャッシュのリフィル長のレジスタ設定を再設定するだけでよい。
【０１７１】
以上説明したとおり第４実施形態では、ＣＰＵはＤＭＡＣを制御する必要が無くなる。そのためセンサーの変更によりＤＭＡＣ制御プログラムを変更する必要がなくなる。すなわち、マルチポート共有キャッシュを通して必要なデータが"Ｓｔｏｒｅ  ａｎｄ  Ｆｏｒｗａｒｄ（蓄積交換）"の手法により、センサーから自動的に画像処理やＤＲＡＭに転送される。
【０１７２】
本実施形態のマルチポート共有キャッシュはフルアソシアティブ方式を採用しているため効率がよい。
【０１７３】
本実施形態では、前述の通りフルアソシアティブ方式カウンターパイプライン構成のキャッシュを用いれば、複数のセンサーに対して並列に非常に高速な判定処理ができる。そのため、リアルタイム性が重要なセンサー群との接続と、センシングされたデータの画像処理への転送に効果を発揮する。
【０１７４】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０１７５】
１００  ＣＰＵ回路部；  １１０  ＤＲＡＭ；  １２０  ｅＤＲＡＭ；  １３０  Ｓｔａｃｋｅｄメモリ；  １５０  画像処理部；  １６０  マルチポート共有キャッシュ；  ４１０  プリフェッチ部；  ４３０  フェッチ部
【図１】
2018160055.tif 000003
【図２】
2018160055.tif 000004
【図３】
2018160055.tif 000005
【図４】
2018160055.tif 000006
【図５】
2018160055.tif 000007
【図６】
2018160055.tif 000008
【図７】
2018160055.tif 000009
【図８】
2018160055.tif 000010
【図９】
2018160055.tif 000011
【図１０】
2018160055.tif 000012
【図１１】
2018160055.tif 000013
【図１２】
2018160055.tif 000014
【図１３】
2018160055.tif 000015
【図１４】
2018160055.tif 000016
【図１５】
2018160055.tif 000017