(57)【特許請求の範囲】
【請求項１】
プログラマブル集積回路、すなわちプログラマブルＩＣにおいてメモリを管理する方法であって、
前記プログラマブルＩＣは、プロセッササブシステムおよびプログラマブル論理サブシステムを有し、前記方法は、
前記プログラマブルＩＣのメモリのアドレス空間の第１のサブセットのアドレスを前記プログラマブルＩＣの物理メモリに関連付けて、前記プログラマブルＩＣのメモリマップを構成するステップと、
前記アドレス空間の第２のサブセットのアドレスを仮想メモリブロックに関連付けて、前記メモリマップを構成するステップとを含み、前記第２のサブセットのアドレスは、前記プログラマブル論理サブシステムに割当てられた前記プログラマブルＩＣのアドレス空間の部分内にあり、前記方法はさらに、
前記プログラマブル論理サブシステムのプログラマブル論理回路内の回路として前記仮想メモリブロックを実装するステップを含み、前記仮想メモリブロックを実装する前記回路は、前記第２のサブセットのアドレスのうちの任意の入力アドレスに応答して定値を返し、前記方法はさらに、
前記プログラマブルＩＣの前記プロセッササブシステム内の２次キャッシュの少なくとも一部を、前記第２のサブセットのアドレスにロックするステップと、
前記プロセッササブシステムのプロセッサコアからの、前記第２のサブセットのアドレスのうちのアドレスを参照するメモリアクセス要求に応答して、前記２次キャッシュのロックされた部分にアクセスするステップと、
前記２次キャッシュのロックされた部分が更新された場合に前記物理メモリの更新をバイパスするステップとを含む、方法。
【請求項２】
前記ロックするステップは、前記２次キャッシュの複数のウェイのうちの１つ以上のウェイをロックするステップを含む、請求項１に記載の方法。
【請求項３】
前記第１のサブセットのアドレスに関連付けられた記憶要素内に第１の値を記憶するステップと、
前記第２のサブセットのアドレスに関連付けられた記憶要素内に第２の値を記憶するステップとをさらに含み、
前記第１の値は、前記第１のサブセットのアドレスがキャッシュ不能であることを表わし、
前記第２の値は、前記第２のサブセットのアドレスがキャッシュ可能であることを表わす、請求項１〜２のいずれか１項に記載の方法。
【請求項４】
前記ロックするステップは、
前記２次キャッシュの１つ以上のウェイに関連付けられた１つ以上の第１の記憶要素内に、前記第２のサブセットの１つ以上のアドレスを記憶するステップと、
前記２次キャッシュの前記１つ以上のウェイに関連付けられた１つ以上の第２の記憶要素内に第１の値を記憶するステップとを含み、前記１つ以上の第２の記憶要素内の前記第１の値は、関連付けられた前記１つ以上のウェイが前記第２のサブセットの前記１つ以上のアドレスにロックされていることを表わす、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
前記２次キャッシュはマルチウェイセットアソシアティブキャッシュであり、前記方法はさらに、
１次キャッシュを無効にするステップと、
前記２次キャッシュの１つのウェイを選択するステップと、
前記２次キャッシュのすべてのウェイをロックするステップと、
前記２次キャッシュの前記１つのウェイをロック解除するステップと、
前記第２のサブセットのアドレスのうちのアドレスにおける、前記１つのウェイに対応する前記仮想メモリブロックに読出し要求を発行するステップと、
前記仮想メモリブロックを実装する前記回路から返された前記定値を、前記２次キャッシュの前記選択された１つのウェイのメモリ内に記憶するステップと、
前記読出し要求のアドレスを、前記１つのロック解除されたウェイに関連付けられたタグメモリ記憶要素内に記憶するステップと、
前記２次キャッシュの１つ以上の他のウェイについて、前記選択するステップ、前記ロックするステップ、前記ロック解除するステップ、前記発行するステップ、前記定値を記憶するステップ、および前記アドレスを記憶するステップを繰返すステップと、
前記仮想メモリブロックに使用されていない前記２次キャッシュの任意のウェイをロック解除するステップとを含む、請求項１に記載の方法。
【請求項６】
プログラマブル集積回路、すなわちプログラマブルＩＣであって、
１つ以上のプロセッサコアと、前記プログラマブルＩＣのメモリアドレス空間の第１の部分を実装するメモリ回路とを含むプロセッササブシステムと、
プログラマブル論理回路と、プログラマブルインターコネクト回路と、前記メモリアドレス空間の第２の部分を実装するメモリ回路とを含むプログラマブル論理サブシステムと、
前記プロセッササブシステムの前記メモリ回路と、前記プログラマブル論理サブシステムの前記メモリ回路とに結合されたキャッシュ回路と、
前記プログラマブル論理回路内に実装された仮想メモリブロック回路とを備え、前記仮想メモリブロック回路は、前記メモリアドレス空間のサブセットのアドレスに応答する定値を返し、
前記キャッシュ回路は、２次キャッシュと、前記２次キャッシュの記憶ブロックに関連付けられたロック記憶要素およびタグ記憶要素とを含み、
複数の前記タグ記憶要素は、前記メモリアドレス空間のサブセットのアドレスで構成されており、
前記ロック記憶要素のうちの１つ以上は、１つ以上の関連付けられた記憶ブロックが前記複数のタグ記憶要素内の前記メモリアドレス空間のサブセットのアドレスにロックされていることを表わす第１の値で構成されており、
前記キャッシュ回路は、
前記メモリアドレス空間のサブセットのアドレスを参照するメモリアクセス要求に応答して、前記メモリアドレス空間のサブセットのアドレスにロックされた記憶ブロックにアクセスするように構成および配置され、かつ、
前記メモリアドレス空間のサブセットのアドレスにロックされた前記記憶ブロックが更新された場合に、前記メモリ回路の更新をバイパスするように構成および配置されている、プログラマブルＩＣ。
【請求項７】
前記プロセッササブシステムは、前記メモリアドレス空間のアドレスに関連付けられた複数のフラグ記憶要素を含み、
前記複数のフラグ記憶要素のうちの第１のサブセットのフラグ記憶要素は、前記メモリアドレス空間の前記第１の部分からのデータのキャッシングが不能であることを表わす第１の値で構成され、
前記複数のフラグ記憶要素のうちの第２のサブセットのフラグ記憶要素は、前記メモリアドレス空間のサブセットからのデータのキャッシングが可能であることを表わす第２の値で構成されている、請求項６に記載のプログラマブルＩＣ。
【請求項８】
前記仮想メモリブロック回路は、前記メモリアドレス空間のサブセットのうちの任意の入力アドレスに応答して定値を返すように構成されている、請求項６または７に記載のプログラマブルＩＣ。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本開示は、概して、プログラマブル集積回路（ＩＣ）においてメモリリソースを管理することに関する。
【背景技術】
【０００２】
背景
さまざまな機能を有するプログラマブル集積回路（ＩＣ）が広く利用可能である。一般的に、プログラマブルＩＣは、特定の論理機能を果たすようにプログラム可能な素子である。プログラマブルＩＣは、プログラマブル論理、または、プログラマブル論理とハードワイヤード論理との組合せ（たとえば、１つ以上のマイクロプロセッサ）を含み得る。一種のプログラマブルＩＣであるフィールドプログラマブルゲートアレイ（ＦＰＧＡ）は、典型的にはプログラマブルタイルのアレイを含む。これらのプログラマブルタイルは、たとえば、入出力ブロック（ＩＯＢ）、構成可能論理ブロック（ＣＬＢ）、専用ランダムアクセスメモリブロック（ＢＲＡＭ）、乗算器、デジタル信号処理ブロック（ＤＳＰ）、プロセッサ、クロックマネージャ、遅延ロックループ（ＤＬＬ）、バスまたはネットワークインターフェイス（たとえば、周辺機器相互接続エクスプレス（ＰＣＩｅ）およびイーサネット（登録商標））などを含み得るさまざまな種類の論理ブロックを含む。
【０００３】
各プログラマブルタイルは、プログラマブルインターコネクトおよびプログラマブル論理の両方を含み得る。プログラマブルインターコネクトは、典型的には、プログラマブルインターコネクトポイント（ＰＩＰ）により相互接続された異なる長さの多数のインターコネクト線を含む。プログラマブル論理は、たとえば関数発生器、レジスタ、算術論理などを含み得るプログラマブル要素を用いて、ユーザ設計の論理を実装する。
【０００４】
プログラマブルインターコネクトおよびプログラマブル論理は、典型的には、プログラマブル要素の構成の仕方を規定する内部構成メモリセルの中に構成データストリームをロードすることによってプログラムされる。構成データは、メモリから（たとえば外部ＰＲＯＭから）読出されるか、または外部デバイスによりＦＰＧＡに書込まれ得る。個別のメモリセルの集合的な状態がＦＰＧＡの機能を決定する。
【０００５】
いくつかのプログラマブルＩＣは、プログラムコードを実行することができる１つ以上のマイクロプロセッサを含む。マイクロプロセッサは、プログラマブル論理回路およびプログラマブルインターコネクト回路（まとめてＩＣの「プログラマブル回路」とも称する）を含む同じダイの一部として作製され得る。マイクロプロセッサ内でプログラムコードを実行することは、ＩＣ上で利用され得るプログラマブル回路を「プログラムすること」または「構成すること」と区別可能であると理解すべきである。ＩＣのプログラマブル回路をプログラムまたは構成するという行為の結果、プログラマブル回路内の構成データによって特定されるさまざまな物理回路が実現される。
【０００６】
システムオンチップ（ＳＯＣ）は、プログラマブルＩＣの例である。ＳＯＣは、マイクロプロセッサ、プログラマブル論理、オンチップメモリ、さまざまな入力／出力（Ｉ／Ｏ）回路、および、マイクロプロセッサとプログラマブル論理とＩ／Ｏ回路との間の通信を行なうためのインターコネクト回路を含み得る。
【０００７】
多数の機能を１つのＳＯＣ上に集積することは、幅広い用途を支え、高い自由度を与え得るが、特定の機能回路をＳＯＣ上に設けた場合のリソースの量は、当該特定の機能回路を別個のＩＣダイ上に実装した場合に利用可能となるリソースの量よりも少ない場合がある。たとえば、ＳＯＣのプログラマブル論理リソースは、専用のＦＰＧＡのＩＣダイよりも少ない場合がある。同様に、１つ以上のマイクロプロセッサ、オンチップメモリ、およびプログラマブル論理を有するＳＯＣのオンチップメモリリソースは、マイクロプロセッサおよびオンチップメモリを有しかつプログラマブル論理を有さない別のＳＯＣよりも少ない場合がある。いくつかの用途では、特定のＳＯＣが利用可能なオンチップメモリよりも多くの量のオンチップメモリによって利益がもたらされる場合がある。より多くのオンチップメモリの必要性に対応するために、設計者は、より多くのオンチップメモリリソースを有するＳＯＣを求めるかもしれない。しかしながら、オンチップメモリが多いＳＯＣは、オンチップメモリが少ない別のＳＯＣよりも高価になり得るため、設計者は、低コストで低性能であることか、高コストで高性能であることの選択を迫られる。
【発明の概要】
【課題を解決するための手段】
【０００８】
概要
プログラマブル集積回路（ＩＣ）においてメモリを管理する方法が開示される。当該方法は、プログラマブルＩＣのメモリアドレス空間の第１のサブセットのアドレスをプログラマブルＩＣの物理メモリに関連付けて、プログラマブルＩＣのメモリマップを構成するステップを含む。メモリマップは、メモリアドレス空間の第２のサブセットのアドレスを仮想メモリブロックに関連付けて構成される。プログラマブルＩＣのキャッシュメモリの少なくとも一部が、第２のサブセットのアドレスにロックされる。
【０００９】
また、プログラマブルＩＣが開示される。プログラマブルＩＣはプロセッササブシステムを含み、プロセッササブシステムは、プログラマブルＩＣのメモリアドレス空間の第１の部分を実装するメモリ回路を含む。プログラマブルＩＣはさらにプログラマブル論理サブシステムを含み、プログラマブル論理サブシステムは、プログラマブル論理回路と、メモリアドレス空間の第２の部分を実装するメモリ回路とを含む。キャッシュ回路が、プロセッササブシステムのメモリ回路と、プログラマブル論理サブシステムのメモリ回路とに結合されている。仮想メモリブロック回路がプログラマブル論理回路内に実装されている。仮想メモリブロック回路は、メモリアドレス空間の第２の部分のサブセットのアドレスに応答する。キャッシュ回路は、キャッシュ回路の記憶ブロックに関連付けられたロック記憶要素およびタグ記憶要素を含む。複数のタグ記憶要素は、メモリアドレス空間の第２の部分のサブセットのアドレスで構成されている。ロック記憶要素のうちの１つ以上は、関連付けられた記憶ブロックのうちの１つ以上が複数のタグ記憶要素内のメモリアドレス空間の第２の部分のサブセットのアドレスにロックされていることを表わす第１の値で構成されている。
【００１０】
他の特徴は、以下の詳細な説明および特許請求の範囲を考慮することにより理解されるであろう。
【００１１】
以下の詳細な説明を検討し、かつ図面を参照すれば、開示の方法および回路のさまざまな局面および特徴が明らかになるであろう。
【図面の簡単な説明】
【００１２】
【図１】システムオンチップ（ＳＯＣ）の例であるプログラマブルＩＣを示す図である。
【図２】プログラマブル論理サブシステム内の仮想メモリブロックの実現例を示す図である。
【図３】図１のシステムに適用可能なシステムメモリマップを示す図である。
【図４】物理アドレスを、それらの物理アドレスの属性にマップする変換テーブルを示す図である。
【図５】メモリの多数のブロックと、仮想メモリブロックに対応のロックされたアドレスを有するキャッシュメモリとを示す図である。
【図６】仮想メモリブロックを実装するようにプログラマブルＩＣを構成し、仮想メモリブロックのアドレスをキャッシュにおいてロックする処理を示す図である。
【発明を実施するための形態】
【００１３】
図面の詳細な説明
以下の説明では、本明細書で提示する具体例を説明するために、多くの具体的詳細を示す。しかしながら、下記の具体的詳細のうちの必ずしもすべてがなくても、１つ以上の他の例および／またはこれらの例の変形例を実践し得ることが、当業者に明らかになるはずである。他の例では、本明細書中の例の説明が不鮮明にならないように、周知の特徴については詳述していない。説明を容易にするために、異なる図中で同じ参照番号を用いて同じ要素または同じ要素の他の例を指すことがある。
【００１４】
開示の方法およびシステムでは、仮想メモリブロックを実装することによって、かつ、プログラマブルＩＣのキャッシュストレージを、仮想メモリブロックに割当てられたプログラマブルＩＣのアドレス空間の部分に専用にすることによって、プログラマブルＩＣ（たとえばＳＯＣ）のオンチップメモリの量を増加させる。
【００１５】
プログラマブルＩＣは、プログラマブルＩＣのアドレス空間を記述するメモリマップを含む。メモリマップは、アドレス空間の一部が、プログラマブルＩＣ上にデータストレージを提供する物理メモリリソースに関連付けられるように構成される。仮想メモリブロックは、アドレス空間の別の部分に関連付けられる。仮想メモリブロックにはアドレス空間のアドレスのサブセットが割当てられ、それらのアドレスにおけるデータを記憶するためのメインメモリ回路はない。仮想メモリブロックがメインメモリ回路を有する代わりに、キャッシュは、仮想メモリブロックに関連付けられたアドレスでロックされる。キャッシュ全体が仮想ブロックに使用されている場合には、仮想メモリブロックアドレス以外のアドレスにおけるデータをキャッシングすることは不能となり得る。仮想メモリブロックのアドレスがキャッシュにおいてロックされた場合には、仮想メモリブロックのアドレスの参照はキャッシュに還元される。仮想メモリブロックのアドレスにおけるデータの如何なる更新もキャッシュ内に留まり、メインメモリストレージにさらに書込まれることはない。なぜなら、仮想メモリブロックのアドレスについてのストレージはキャッシュのみによって提供されるからである。
【００１６】
図１は、ＳＯＣの例であるプログラマブルＩＣ１００を示す。プログラマブルＩＣは、チップ上のオンチップメモリの量を効果的に増加させるように構成され得る。プログラマブルＩＣは、プロセッササブシステム１０２とプログラマブル論理サブシステム１０４とを含む。プロセッササブシステムは、一般的に、１つ以上のプロセッサコア１０６と、メモリリソースと、プログラマブル論理サブシステムに接続するための回路とを含む。プログラマブル論理サブシステムは、プログラマブル論理（図示せず）と、プログラマブルインターコネクト（図示せず）と、ＦＰＧＡに関して上述したような他のさまざまな回路とを含み得る。
【００１７】
プログラマブルＩＣは、プロセッサコア１０６上で実行されるプログラムコードにアクセス可能な、または、プログラマブル論理サブシステム内に実装された回路にアクセス可能な、多数のメモリリソースを含む。メモリリソースは、オンチップメモリ１０８と、プログラマブル論理サブシステム内で構成され得るメモリブロック１２２とを含む。ダブルデータレート（ＤＤＲ）メモリリソース１１０をオフチップに配置することによって、プロセッサコア上で実行されるプログラムコードのための、または、プログラマブル論理サブシステム内に実装された回路のための、追加のストレージを提供してもよい。オンチップメモリ１０８およびＤＤＲメモリ１１０は、ある実現例ではＤＲＡＭで実現されてもよい。
【００１８】
プログラマブルＩＣの物理アドレス空間は、メモリマップ１１８にマップされる。物理アドレス空間は、オンチップメモリ１０８とＤＤＲメモリ１１０とを含み、さらに、Ｉ／Ｏ周辺装置１２０、メモリブロック１２２、および仮想メモリブロック１１２などに関する、プログラマブル論理サブシステム内の利用可能なアドレス空間も含む。メモリマップは、アドレス範囲が、当該アドレス範囲に割当てられたコンポーネントにマップされているルックアップテーブルメモリであってもよい。たとえば、あるアドレス範囲はオンチップメモリ１０８にマップされ、別のアドレス範囲はＤＤＲメモリ１１０にマップされ、別のアドレス範囲はＩ／Ｏ周辺装置１２０にマップされ、別のアドレス範囲は、メモリブロック１２２および仮想メモリブロック１１２が実装され得るプログラマブル論理にマップされる。インターコネクト回路１２４は、メモリマップを用いてメモリアクセス要求を適切なコンポーネントに向ける。
【００１９】
いくつかの用途では、ＤＤＲメモリの何らかの使用を排除するセキュリティ要件、プロセッササブシステム内の追加メモリの必要、または、メモリアクセス回数に関するより良い決定があってもよい。プログラマブルＩＣは、追加のメモリリソースをプロセッササブシステムに提供するために、プログラマブル論理サブシステム内に仮想メモリブロック１１２を実装し、仮想メモリブロックのアドレスをプロセッササブシステム１０２内の２次キャッシュ１１４にロックするように構成されてもよい。キャッシュ全体が仮想メモリブロックに専用である場合には、仮想メモリブロック以外のアドレスに関してキャッシングを不能にしてもよい。プロセッサコア１０６上で実行されるプログラムコードは、プログラマブル論理サブシステムまたはＤＤＲメモリ１１０内に実装されたメモリへのアクセスよりも高速に、オンチップメモリ１０８および２次キャッシュ１１４にアクセス可能である。プログラマブル論理サブシステムは、プロセッササブシステム内で実行されるコードのメモリリソースを実装するように構成され得るが、プロセッサコアから、プログラマブル論理サブシステム内に実装されたメモリへのアクセス要求が、線１１６によって例示されるようなスイッチングネットワークを通って送られ、実質的な遅延を招く場合がある。
【００２０】
一実現例では、仮想メモリブロック１１２は、プログラマブル論理サブシステム１０４のプログラマブル論理内に実装されている。仮想メモリブロック１１２がプログラマブル論理サブシステム内にデータストレージを提供しない点において、仮想メモリブロック１１２はメモリブロック１２２とは異なる。すなわち、プロセッサコア１０６上で実行されるプログラムコードは、メモリブロック１２２を実装するプログラマブル論理サブシステム内のメモリ回路にデータを書込み得るが、仮想メモリブロック１１２のアドレスに書込まれたデータは、プログラマブル論理サブシステムの如何なるメモリ回路にも記憶されない。むしろ、仮想メモリブロックのアドレスに書込まれたデータは、２次キャッシュ１１４内に記憶される。
【００２１】
仮想メモリブロックのアドレスのデータを記憶するために、プログラマブル論理サブシステム内にメモリ回路を設ける代わりに、仮想メモリブロックのアドレスは２次キャッシュ１１４においてロックされる。仮想メモリブロックにマップされたアドレスへの、プロセッサコア１０６上で実行されるコードによるアクセスは、２次キャッシュに向けられるであろう。したがって、プロセッサコア上で実行されるコードは、オンチップメモリ１０８および２次キャッシュの両方を、プロセッササブシステム内のアクセス可能なメモリリソースとして利用可能である。仮想メモリブロックのアドレスにおけるデータのすべての更新は２次キャッシュ内に留まり、メインメモリの更新はバイパスされる。なぜなら、仮想メモリブロックのアドレスについてのストレージはキャッシュのみによって提供されるからである。また、プログラマブル論理サブシステムのプログラマブル論理内に実装されたプロセッサである「ソフトプロセッサ」（図示せず）上で実行されるコードによる仮想メモリブロックのアドレスへのアクセスは、２次キャッシュに向けられるであろう。
【００２２】
プロセッササブシステムは、さらに、メモリ管理ユニット（ＭＭＵ）、１次キャッシュ回路１２６、変換テーブル１２８、およびスヌープ制御ユニット１３０を含む。ＭＭＵは、プロセッサコア１０６からメモリアクセス要求を受信し、変換テーブルを用いて仮想アドレスを物理アドレスに変換する。変換テーブルは、仮想アドレス空間を、ＳＯＣの物理メモリリソースの物理アドレスにマップする。
【００２３】
ある実現例では、変換テーブルは、物理アドレスに関連付けられたフラグ記憶要素を含む。各フラグ記憶要素の状態は、関連付けられたアドレス範囲がキャッシュ可能であるかキャッシュ不能であるかを表わす。仮想メモリブロックのアドレスについては、変換テーブルにおける関連付けられたフラグ記憶要素は、それらのアドレスにおけるデータのキャッシングが可能であることを表わす値に設定され得る。仮想メモリブロック以外のアドレスについては、関連付けられたフラグ記憶要素は、キャッシュ全体が仮想メモリブロックに専用である場合にそれらのアドレスにおけるデータのキャッシングが不能であることを表わす値に設定され得る。
【００２４】
ＭＭＵ１２６は、プロセッサコアからのメモリ要求のアドレスが１次キャッシュ内に存在するか否かを判断する。１次キャッシュ内にアドレスが存在する場合には、ＭＭＵは１次キャッシュにアクセスする。１次キャッシュ内にアドレスが存在しない場合には、ＭＭＵは要求をスヌープ制御ユニット１３０に送る。
【００２５】
スヌープ制御ユニット１３０は、ＭＭＵから転送されたメモリアクセス要求と、プログラマブル論理サブシステム１０４内に実装されたプロセッサ回路（図示せず）によってインターフェイス１３２を介して伝送されたメモリアクセス要求とを処理する。２次キャッシュ１１４と、プログラマブル論理サブシステム内の他のキャッシュ（図示せず）との間の整合性を維持することに加えて、スヌープ制御ユニットは、要求されたアドレスが２次キャッシュ内にキャッシュされているか否かを判断する。仮想メモリブロック１１２のアドレスが２次キャッシュにおいてロックされているとき、仮想メモリブロックを参照する要求に対して、２次キャッシュがアクセスされる。２次キャッシュには存在しないアドレスを参照する要求の場合は、スヌープ制御ユニットは、当該要求をインターコネクト回路１２４に転送する。その結果、メモリマップ１１８からコンポーネントアドレスが決定され、それに従って当該要求が転送される。
【００２６】
仮想メモリブロックを使用すること、および仮想メモリブロックのアドレスをロックすることは、さまざまな異なるプログラマブルＩＣアーキテクチャに適合され得る。たとえば一実現例では、２次キャッシュは８ウェイのセットアソシアティブキャッシュである。代替的な実現例では、キャッシュは、より少ないまたはより多いウェイを有してもよく、ダイレクトマップされてもよく、または、フルアソシアティブ方式であってもよいことが理解されるであろう。プロセッササブシステム１０２は、１次キャッシュおよび２次キャッシュを有する。代替的な実現例は、仮想メモリブロックのアドレスが単一のレベルのキャッシュにおいてロックされる、単一レベルキャッシュを有してもよい。
【００２７】
図２は、プログラマブル論理サブシステム１０４内の仮想メモリブロック１１２の実現例を示す。仮想メモリブロックは、回路への各アドレス入力に対してビット値０を出力する回路として実装され得る。仮想メモリブロックは、仮想メモリブロックに割当てられたアドレス空間のアドレスに関連付けられたデータを記憶するために如何なるメモリ回路も有する必要がない。なぜなら、線２０４で示されているように、割当てられた各アドレスについて同じ定値が出力されるからである。プログラマブル論理サブシステムは、さらに、仮想メモリブロックと、プログラマブル論理サブシステムをプロセッササブシステムに接続するマイクロコントローラバスとの間のインターフェイスを提供するために、メモリブロックコントローラ２０２を含んでもよい。
【００２８】
図３は、図１のシステムに適用可能なシステムメモリマップ３００を示す。メモリマップは、システムの物理アドレス空間内でアドレスまたはアドレスの一部によってアドレス指定可能なルックアップテーブルメモリであってもよい。アドレス空間は、アドレス範囲に分割され、各アドレス範囲が、関連付けられたアドレス範囲内のアドレスによってアドレス指定されたコンポーネントまたはコンポーネントのセットにマップされてもよい。
【００２９】
システムメモリマップの例は、オンチップメモリ、ＣＰＵプライベートレジスタ、プロセッサシステムレジスタ、Ｉ／Ｏ周辺装置、プログラマブル論理、およびＤＤＲメモリにマップされたアドレス範囲を含む。プログラマブル論理にマップされたアドレス空間の部分は、アドレス範囲３０４の一部であるブロック３０２で示された仮想メモリブロックに割当てられる。破線は、仮想メモリブロックのアドレスにおけるデータを記憶するための物理メモリ回路がプログラマブル論理内にないことを意味する。アドレス範囲３０４の他の部分は、メモリブロックに割当てられたアドレスにおけるデータを記憶するための物理メモリ回路を有するメモリブロックに割当てられてもよい。
【００３０】
図４は、メモリアドレス空間の物理アドレスを、それらの物理アドレスの属性にマップする変換テーブル４００を示す。変換テーブルはメモリマップであり、たとえば、図１のプロセッサコア１０６上で実行されるオペレーティングシステムによって用いられ得る。変換テーブルは、物理アドレス、またはアドレスの一部によってアドレス指定可能なルックアップテーブルメモリであってもよい。
【００３１】
ある実現例では、キャッシュ全体が仮想メモリブロックに専用である場合があり、仮想メモリブロックのアドレスは、キャッシュ可能な唯一のアドレスである。変換テーブルは、物理アドレスについて記憶を提供するだけでなく、関連付けられたアドレスがキャッシュ可能であるかキャッシュ不能であるかを表わすフラグ記憶要素をも含む。たとえば、記憶要素４０２は、仮想メモリブロックのアドレスがキャッシュ可能であることを表わす値に設定され、記憶要素４０４などの他のすべての記憶要素は、他のアドレスがキャッシュ不能であることを表わす値に設定される。
【００３２】
関連付けられたアドレスがキャッシュ可能であるか否かを表わす記憶要素に加えて、変換テーブルは、たとえば、バッファーリング可能性、セキュアメモリ／非セキュアメモリ、共用可能性、強く順序付けられた（strongly-ordered）メモリ／通常メモリ、キャッシュ戦略（キャッシュ可能ビットが設定された場合）、および／または、読取り専用／書込み専用などを含む他の属性を含んでもよい。
【００３３】
図５は、メモリの多数のブロック５０２と、仮想メモリブロックに対応のロックされたアドレスを有するキャッシュメモリ５０４とを示す。参照しやすいように、図５ではメモリアドレスの代わりにブロックインデックスを用いる。各インデックスの値は、ブロックのうちの１つのベースアドレスに対応する。仮想メモリブロックに関連付けられたインデックスに隣接のブロックは、仮想メモリブロックが物理メモリ回路によって支持されていないことを表わすために破線で示す。具体的には、仮想メモリブロックのインデックスは０〜７であり、インデックス０〜７に隣接のブロックが破線で示される。
【００３４】
仮想メモリブロックに関連付けられたブロック以外の各ブロックは、アドレス指定可能なメモリの多数のワードを表わす。たとえば、各ブロックは、８、１６、３２、６４またはそれ以上の記憶ワードを表わし得る。例示のキャッシュは４ウェイセットアソシアティブキャッシュであるが、本明細書の例および教示はＮウェイアソシアティブキャッシュに適合され得ることが理解されるであろう。仮想メモリブロックを表わすブロックを、ウェイ５０６とキャッシュ５０４の関連付けられた記憶ブロックとに接続する線で示されているように、各インデックスは、キャッシュの４つの異なるウェイのうちの１つにキャッシュされ得る。たとえば、仮想メモリブロックのインデックス０および４は、ウェイの第１のセット５０８のウェイ０、１、２、３にキャッシュ可能である。
【００３５】
実現例の必要条件に応じて、キャッシュの一部は、キャッシュ記憶ブロックによって、またはキャッシュウェイによって、ロックされ得る。この例では、ロックされたウェイに関連付けられたロック記憶要素（「ロックビット」）５０７内に記憶された値で示されているように、ウェイ０および１がロックされる。仮想メモリブロックのインデックスは、キャッシュにおけるロックされたウェイのタグ記憶要素５０９内に記憶される。セット５０８では、関連付けられたロックビットで示されているように、ウェイ０および１がロックされ、仮想メモリブロックインデックス０および４がウェイ０および１のタグ記憶要素内に記憶される。セット５１０では、関連付けられたロックビットで示されているように、ウェイ０および１がロックされ、仮想メモリブロックインデックス１および５がウェイ０および１のタグ記憶要素内に記憶される。セット５１２では、関連付けられたロックビットで示されているように、ウェイ０および１がロックされ、仮想メモリブロックインデックス２および６がウェイ０および１のタグ記憶要素内に記憶される。セット５１４では、関連付けられたロックビットで示されているように、ウェイ０および１がロックされ、仮想メモリブロックインデックス３および７がウェイ０および１のタグ記憶要素内に記憶される。
【００３６】
関連付けられたロックビットの値で示されているように、キャッシュのウェイ２および３はロック解除され得る。仮想メモリブロックのブロック以外のブロックは、キャッシュ５０４のロック解除されたウェイ２および３にキャッシュされ得る。
【００３７】
図６は、仮想メモリブロックを実装するようにプログラマブルＩＣを構成し、仮想メモリブロックのアドレスをキャッシュにおいてロックする処理を示す。ブロック６０２では、プログラマブルＩＣのプログラマブル論理サブシステムのプログラマブル論理リソース内に仮想メモリブロックを実装する。仮想メモリブロックは、予め定められた論理モジュールとして設計者に提供され得る。設計者はそれを回路設計でグラフィカルユーザインターフェイスまたはハードウェア記述言語（ＨＤＬ）などによって具体化し得る。設計者は、仮想メモリブロックの深さまたはサイズを指定し得る。仮想メモリブロックを定義する論理モジュールは、設計の他の部分と共にコンパイルされて、プログラマブルＩＣのプログラマブル論理サブシステムのための構成データとなり得る。仮想メモリブロックは、設計ツールによってプログラマブル論理サブシステムの物理リソースに割当てられ、仮想メモリブロックの位置を示すハードウェア定義ファイルが、プロセッササブシステム内で実行されるオペレーティングシステムに出力される。オペレーティングシステムまたはユーザアプリケーションソフトウェアは、キャッシュ可能なメモリアドレス空間の部分およびキャッシュ不能なメモリアドレス空間の部分を表わすように変換テーブルを構成し得る。たとえば、仮想メモリブロックに割当てられたアドレス空間のサブセットはキャッシュ可能であると指定され、アドレス空間の他の部分はキャッシュ不能であると指定され得る。仮想メモリブロックを実現する構成データは、仮想メモリブロックを含む設計を実現するためにプログラマブル論理サブシステム内にロードされ得る。上述のように、仮想メモリブロックは、読出し要求における任意の入力アドレスに応答して、たとえば０などの定値を出力する。仮想メモリブロックは、書込み要求に応答する必要はない。なぜなら、キャッシュが初期化されると、仮想メモリブロックのアドレスへの書込みはキャッシュにおいて解消されるからである。
【００３８】
ブロック６０４〜６２２の処理は、たとえば、図１のプロセッサコア１０６上で実行されるプログラムコード（たとえば、ユーザまたはオペレーティングシステムのアプリケーションコード）によって行なわれ得る。ブロック６０４では、変換テーブルで仮想メモリブロックのアドレスに関連付けられた記憶要素を、アドレスがキャッシュ可能であることを表わす値に設定する。キャッシュ全体が仮想メモリブロックに専用である場合には、仮想メモリブロック以外のアドレスに関連付けられた記憶要素を、アドレスがキャッシュ不能であることを表わす値に設定する。フルキャッシュ未満が仮想メモリブロックのアドレスにロックされた場合には、仮想メモリブロック以外のアドレスに関連付けられた記憶要素を、アドレスがキャッシュ可能であることを表わす値に設定し得る。
【００３９】
ブロック６０６および６０８では、キャッシュは初期化および仮想メモリブロックのロックに備える。例示の処理は、仮想メモリブロックを２次キャッシュにロックするためのものである。ブロック６０６では、１次キャッシュを動作不能および無効にする。１次キャッシュを動作不能にすることによって、１次キャッシュが有し得る予測キャッシング機能が不能になる。１次キャッシュを無効にすることによって、１次キャッシュ内に存在したかもしれない仮想メモリブロックの如何なるアドレスも無効になることが保証され、仮想メモリブロックのアドレスへの読出し要求が仮想メモリブロックに向けられる。
【００４０】
ブロック６０８では２次キャッシュのすべてのウェイをロックし、ブロック６１０では２次キャッシュのウェイのうちの１つをロック解除する。キャッシュのウェイをロックおよびロック解除する際に、図５に示すようにウェイに関連付けられたロックビットの値は、相応に調整される。一度に１つのウェイを処理することにより、キャッシュ可能となるように意図されたかもしれないウェイをロックする可能性がなくなる。また、一度に１つのウェイを処理することにより、プロセッサおよびコンパイラの最適化（たとえば、推測フェッチおよびアウト・オブ・オーダー実行）によるキャッシュへのアクセスが防止される。キャッシュのロック解除されたウェイにマップされた仮想メモリブロックのアドレスは、ブロック６１２で読出し要求を発行する際に用いられる。１次キャッシュが無効にされたため、読出し要求は仮想メモリブロックに送られる。各読出し要求に応答して、仮想メモリブロックは０値ビットのワードなどの定値で応答し、ブロック６１４では、定値を２次キャッシュ内に記憶する。さらに、仮想メモリブロックへの読出し要求のアドレスを、キャッシュのロック解除されたウェイに関連付けられたタグメモリ記憶要素内に記憶する。定値のブロックは、仮想メモリブロックによって出力され、仮想メモリブロックのアドレスのブロックに対応するように２次キャッシュ内に記憶されてもよいことが理解されるであろう。
【００４１】
ブロック６１６では、２次キャッシュのすべてのウェイを再びロックし、判断ブロック６１８は、キャッシュの他のいずれかのウェイを処理すべきか否かを判断する。２次キャッシュ全体が仮想メモリブロックにロックされている場合には、キャッシュのすべてのウェイが処理されるまで処理が続けられる。キャッシュの一部のみが仮想メモリブロックのために必要である場合には、仮想メモリブロックのすべてのアドレスをロックするのに十分な数のウェイが処理されるまで処理が続けられる。処理はブロック６１０に戻り、キャッシュの別のウェイを処理する。そうでない場合には、処理はブロック６２０に続く。
【００４２】
ブロック６２０では、仮想メモリブロックに使用されていない任意の２次キャッシュのウェイをロック解除する。ブロック６２２では、２次キャッシュは、全部または一部が仮想メモリブロックのアドレスにロックされ、使用可能となる。ブロック６２４では、仮想メモリブロックを参照するメモリアクセス要求に応答して、仮想メモリブロックにロックされたキャッシュの部分にアクセスする。仮想メモリブロックにロックされたキャッシュの部分が更新された場合には、キャッシュ以外の物理メモリの更新はバイパスされる。なぜなら、仮想メモリブロックについてのストレージはキャッシュのみによって提供されるからである。
【００４３】
次に、いくつかの追加の例を示す。
一例では、プログラマブル集積回路（ＩＣ）においてメモリを管理する方法が開示される。当該方法は、プログラマブルＩＣのメモリアドレス空間の第１のサブセットのアドレスをプログラマブルＩＣの物理メモリに関連付けて、プログラマブルＩＣのメモリマップを構成するステップと、メモリアドレス空間の第２のサブセットのアドレスを仮想メモリブロックに関連付けて、メモリマップを構成するステップと、プログラマブルＩＣのキャッシュメモリの少なくとも一部を第２のサブセットのアドレスにロックするステップとを含んでもよい。
【００４４】
上記方法は、プログラマブルＩＣ上の回路として仮想メモリブロックを実装するステップをさらに含んでもよい。仮想メモリブロックを実装する回路は、第２のサブセットのアドレスのうちの任意の入力アドレスに応答して定値を返す。
【００４５】
上記方法は、第２のサブセットのアドレスのうちのアドレスを参照するメモリアクセス要求に応答して、キャッシュメモリのロックされた部分にアクセスするステップと、キャッシュメモリのロックされた部分が更新された場合に物理メモリの更新をバイパスするステップとをさらに含んでもよい。
【００４６】
上記のような方法において、ロックするステップは、キャッシュメモリの複数のウェイのうちの１つ以上のウェイをロックするステップを含んでもよい。
【００４７】
上記のような方法において、キャッシュメモリは２次キャッシュであってもよい。
上記のような方法において、プログラマブルＩＣは、プロセッササブシステムおよびプログラマブル論理サブシステムと、プロセッササブシステム内の２次キャッシュと、プログラマブル論理サブシステム内の物理メモリに割当てられたアドレス空間の部分と、プログラマブル論理サブシステム内の物理メモリに割当てられたアドレス空間の部分のサブセットに関連付けられた第２のサブセットのアドレスとを有する。
【００４８】
上記のような方法は、プログラマブル論理サブシステム内の回路として仮想メモリブロックを実装するステップをさらに含んでもよい。仮想メモリブロックを実装する回路は、第２のサブセットのアドレスのうちの任意の入力アドレスに応答して定値を返す。
【００４９】
上記のような方法は、第１のサブセットのアドレスに関連付けられた記憶要素内に第１の値を記憶するステップと、第２のサブセットのアドレスに関連付けられた記憶要素内に第２の値を記憶するステップとをさらに含んでもよい。第１の値は、第１のサブセットのアドレスがキャッシュ不能であることを表わし、第２の値は、第２のサブセットのアドレスがキャッシュ可能であることを表わす。
【００５０】
上記のような方法において、ロックするステップは、キャッシュメモリの１つ以上のウェイに関連付けられた記憶要素内に、第２のサブセットの１つ以上のアドレスを記憶するステップと、キャッシュメモリの１つ以上のウェイに関連付けられた１つ以上の記憶要素内に第１の値を記憶するステップとを含んでもよい。１つ以上の記憶要素内の第１の値は、関連付けられた１つ以上のウェイが第２のサブセットの上記１つ以上のアドレスにロックされていることを表わす。
【００５１】
上記のような方法において、キャッシュメモリはマルチウェイセットアソシアティブキャッシュであってもよい。上記方法はさらに、プログラマブルＩＣ上の回路として仮想メモリブロックを実装するステップを含んでもよい。仮想メモリブロックを実装する回路は、第２のサブセットのアドレスのうちの任意の入力アドレスに応答して定値を返す。上記方法はさらに、キャッシュメモリの１つのウェイを選択するステップと、第２のサブセットのアドレスのうちのアドレスにおける、上記１つのウェイに対応する仮想メモリブロックに読出し要求を発行するステップと、仮想メモリブロックを実装する回路から返された定値を、キャッシュメモリの選択された上記１つのウェイのメモリ内に記憶するステップと、キャッシュメモリの１つ以上の他のウェイについて、選択するステップ、発行するステップ、および記憶するステップを繰返すステップとを含んでもよい。
【００５２】
上記のような方法において、キャッシュメモリの１つ以上の他のウェイについての選択するステップ、発行するステップ、および記憶するステップは、キャッシュメモリのすべてのウェイが処理されるまで繰返されてもよい。
【００５３】
上記のような方法において、キャッシュメモリの１つ以上の他のウェイについての選択するステップ、発行するステップ、および記憶するステップは、キャッシュメモリのすべてのウェイよりも少ないウェイについて繰返されてもよい。
【００５４】
上記のような方法は、プログラマブルＩＣ上の回路として仮想メモリブロックを実装するステップをさらに含んでもよい。仮想メモリブロックを実装する回路は、第２のサブセットのアドレスのうちの任意の入力アドレスに応答して定値を返す。
【００５５】
上記のような方法は、第２のサブセットのうちのアドレスを参照するメモリアクセス要求に応答して、キャッシュメモリのロックされた部分にアクセスするステップと、キャッシュメモリのロックされた部分が更新された場合に物理メモリの更新をバイパスするステップとをさらに含んでもよい。
【００５６】
上記のような方法は、第１のサブセットのアドレスに関連付けられた記憶要素内に第１の値を記憶するステップと、第２のサブセットのアドレスに関連付けられた記憶要素内に第２の値を記憶するステップとをさらに含んでもよい。第１の値は、第１のサブセットのアドレスがキャッシュ不能であることを表わし、第２の値は、第２のサブセットのアドレスがキャッシュ可能であることを表わす。
【００５７】
別の例では、プログラマブルＩＣが開示される。当該ＩＣは、プログラマブルＩＣのメモリアドレス空間の第１の部分を実装するメモリ回路を含むプロセッササブシステムと、プログラマブル論理回路とメモリアドレス空間の第２の部分を実装するメモリ回路とを含むプログラマブル論理サブシステムと、プロセッササブシステムのメモリ回路とプログラマブル論理サブシステムのメモリ回路とに結合されたキャッシュ回路と、プログラマブル論理回路内に実装された仮想メモリブロック回路とを備えてもよい。仮想メモリブロック回路は、メモリアドレス空間の第２の部分のサブセットのアドレスに応答してもよい。キャッシュ回路は、キャッシュ回路の記憶ブロックに関連付けられたロック記憶要素およびタグ記憶要素を含む。複数のタグ記憶要素は、メモリアドレス空間の第２の部分のサブセットのアドレスで構成されている。ロック記憶要素のうちの１つ以上は、１つ以上の関連付けられた記憶ブロックが複数のタグ記憶要素内のメモリアドレス空間の第２の部分のサブセットのアドレスにロックされていることを表わす第１の値で構成されている。
【００５８】
上記プログラマブルＩＣにおいて、プロセッササブシステムは、メモリアドレス空間のアドレスに関連付けられたフラグ記憶要素を含んでもよい。第１のサブセットのフラグ記憶要素は、メモリアドレス空間の第１の部分からのデータのキャッシングが不能であり得ることを表わす第１の値で構成されている。第２のサブセットのフラグ記憶要素は、メモリアドレス空間の第２の部分からのデータのキャッシングが可能であり得ることを表わす第２の値で構成されている。
【００５９】
上記プログラマブルＩＣにおいて、仮想メモリブロック回路は、メモリアドレス空間の第２の部分のサブセットのうちの任意の入力アドレスに応答して定値を返すように構成されてもよい。
【００６０】
上記プログラマブルＩＣにおいて、キャッシュ回路は、メモリアドレス空間の第２の部分のサブセットのアドレスを参照するメモリアクセス要求に応答して、メモリアドレス空間の第２の部分のサブセットのアドレスにロックされた記憶ブロックにアクセスするように構成および配置され、かつ、メモリアドレス空間の第２の部分のサブセットのアドレスにロックされた記憶ブロックが更新された場合に、物理メモリの更新をバイパスするように構成および配置されてもよい。
【００６１】
上記プログラマブルＩＣにおいて、プロセッササブシステムは、キャッシュ回路に結合された１次キャッシュを含んでもよく、キャッシュ回路は２次キャッシュであってもよい。
【００６２】
上記の方法および回路は、さまざまなシステムおよび用途に適用可能であると考えられる。他の局面および特徴は、明細書を考慮することにより、他の局面および特徴が当業者に明らかになるであろう。たとえば、ある局面および特徴が別個の図で説明される場合もあるが、たとえ組合せが明示的に組合せとして図示または説明されていない場合であっても、ある図中の特徴は別の図中の特徴と組合せられ得ることが理解されるであろう。明細書および図面は例として考慮されるにすぎず、本発明の真の範囲は以下の特許請求の範囲で示されることが意図される。
【図１】
0006793131.tif 000002
【図２】
0006793131.tif 000003
【図３】
0006793131.tif 000004
【図４】
0006793131.tif 000005
【図５】
0006793131.tif 000006
【図６】
0006793131.tif 000007