(57)【特許請求の範囲】
【請求項１】
異なるタイプのメモリを有するメモリシステムの動作を制御する回路であって、
第１のタイプのメモリエレメント及び第１のアクセス時間を有する第１のメモリと
前記第１のタイプのメモリエレメントとは異なる第２のタイプのメモリエレメント及び第２のアクセス時間を有する第２のメモリと、
前記第１のメモリ及び前記第２のメモリへのアクセスを可能にするメモリ制御回路であって、前記メモリ制御回路が、前記第１のメモリ及び前記第２のメモリに格納されるデータのサイズの閾値を決定するプロファイラを備え、前記第１のメモリに対応するアクセス頻度が所定のアクセス頻度と異なると判定された場合、前記閾値が調整される、メモリ制御回路と、
前記第２のメモリに結合され、前記第１のアクセス時間と前記第２のアクセス時間との差を補償する遅延バッファと、
前記第１のメモリの出力データ及び前記第２のメモリの遅延された出力データをマージして、順序付けられた出力データを生成する回路と
を備える回路。
【請求項２】
前記メモリ制御回路が、前記第１のメモリに対応付けられた第１のメモリコントローラと、前記第２のメモリに対応付けられた第２のメモリコントローラと、前記第１のメモリコントローラ及び前記第２のメモリコントローラに結合され、前記第１のメモリ及び前記第２のメモリのうちの所望のメモリへのアクセスを可能にするメモリ選択回路とを備える、請求項１に記載の回路。
【請求項３】
前記第１のメモリが、ＳＳＤメモリを含み、前記第２のメモリが、ＤＲＡＭを含む、請求項１又は２に記載の回路。
【請求項４】
前記遅延バッファが、所定の遅延の間、前記データをバッファリングすることによって、前記第１のアクセス時間と前記第２のアクセス時間との前記差を補償する、ＰＬＤ上のＲＡＭのブロックを含む、請求項１から３のいずれか一項に記載の回路。
【請求項５】
データが、前記所定の遅延後に前記ＲＡＭのブロックから読み出される、請求項４に記載の回路。
【請求項６】
前記ＰＬＤが、コンフィギュレーションビットを受け取るように結合され、前記ＲＡＭのブロックが、前記コンフィギュレーションビットを使用してプログラムされるプログラマブルインターコネクトエレメントを使用して前記第２のメモリに結合される、請求項４又は５に記載の回路。
【請求項７】
前記第１のメモリが、不揮発性メモリを含み、前記第２のメモリが、揮発性メモリを含む、請求項１から６のいずれか一項に記載の回路。
【請求項８】
前記第１のメモリ及び前記第２のメモリとのメモリアクセスを制御するメモリトランスレータを更に含み、前記メモリトランスレータが、前記第１のメモリにアクセスするか又は前記第２のメモリにアクセスするかを決定する、請求項１から７のいずれか一項に記載の回路。
【請求項９】
前記メモリトランスレータが、前記第１のメモリ及び前記第２のメモリに対応するアクセス時間に関する情報を格納するための前記プロファイラを備え、前記メモリトランスレータが、前記プロファイラに格納された前記情報に基づいて、前記第１のメモリにアクセスするか又は前記第２のメモリにアクセスするかを決定する、請求項８に記載の回路。
【請求項１０】
異なるタイプのメモリを有するメモリシステムの動作を制御する方法であって、
第１のタイプのメモリエレメント及び第１のアクセス時間を有する第１のメモリにアクセスすることと、
前記第１のタイプのメモリエレメントとは異なる第２のタイプのメモリエレメント及び第２のアクセス時間を有する第２のメモリにアクセスすることと、
前記第１のメモリ及び前記第２のメモリに格納されるデータのサイズの閾値を決定することと、
前記第１のメモリに対応するアクセス頻度が所定のアクセス頻度と異なると判定された場合、前記閾値を調整することと、
前記第２のメモリによって出力されたデータを、前記第１のアクセス時間と前記第２のアクセス時間との差を補償するために、遅延バッファに結合することと、
前記第１のメモリの出力データ及び前記第２のメモリの遅延された出力データをマージして、順序付けられた出力データを生成することと
を含む方法。
【請求項１１】
前記第１のメモリにアクセスすることは、前記第１のメモリに対応付けられた第１のメモリコントローラを介して前記第１のメモリにアクセスすることを含み、前記第２のメモリにアクセスすることは、前記第２のメモリに対応付けられた第２のメモリコントローラを介して前記第２のメモリにアクセスすることを含む、請求項１０に記載の方法。
【請求項１２】
前記第１のメモリコントローラ及び前記第２のメモリコントローラに結合され、前記第１のメモリ及び前記第２のメモリのうちの選択されたメモリへのアクセスを可能にするメモリ選択回路を実装することを更に含む、請求項１１に記載の方法。
【請求項１３】
第１のメモリにアクセスすることは、ＳＳＤメモリを実装することを含む、請求項１０から１２のいずれか一項に記載の方法。
【請求項１４】
第２のメモリにアクセスすることは、ＤＲＡＭを実装することを含む、請求項１０から１３のいずれか一項に記載の方法。
【請求項１５】
前記第２のメモリによって出力されたデータを遅延バッファに結合することが、データをＰＬＤ上のＲＡＭのブロックに結合することを含む、請求項１４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、集積回路デバイスに関し、特に、異なるタイプのメモリを有するメモリシステムの動作を制御するための回路および方法に関する。
【背景技術】
【０００２】
データセンターは、世界各地のさまざまなコンピューティングデバイス間でストレージ、ソーシャルネットワーキング、ゲーム、ウェブ検索及び他の多くのサービスをコヒーレントに提供し、サイズ及び提供されるサービスの多様性の両方において日々成長している。現在キャプチャされ交換されているアモルファスなデータの量の爆発的増加を含む、いくつかの重要な要因が、この成長に寄与している。データセンターを実施する際に直面する基本的な課題の１つは、ますます増え続けるデータの処理と保存である。
【０００３】
様々な目的で大量のデータを格納するために使用されるデータセンターは、多くの産業で重要になってきており、そこでは、データセンターは、ますます増加する量のデータを格納および処理する際の動作の改善に重点を置いている。ソリッド・ステート・ドライブ（ＳＳＤ）は、ハード・ディスク・ドライブよりも高い性能（例えば、１秒あたりの入出力動作（ＩＯＰＳ））及び低いアクセス・レイテンシ、並びに標準ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）よりも高い記憶密度、低コスト、及び低消費電力の両方を備えた追加の層を、ストレージ階層内に提供するので、急速に普及している。しかし、ＳＳＤのアクセス・レイテンシが大きいため、マルチコア・プロセッサは性能を犠牲にすることなく大きなアクセス・レイテンシを処理できないので、ＳＳＤを標準ＤＲＡＭと組み合わせることはできない。
【０００４】
したがって、メモリシステムの動作を制御するための改善された回路が有益であろう。
【発明の概要】
【０００５】
異なるタイプのメモリを有するメモリシステムの動作を制御する回路が説明される。本回路は、第１のタイプのメモリエレメントを有し、第１のアクセス時間を有する第１のメモリと、第１のタイプのメモリエレメントとは異なる第２のタイプのメモリエレメントを有し、第２のアクセス時間を有する第２のメモリと、第１のメモリ及び第２のメモリへのアクセスを可能にするメモリ制御回路と、第２のメモリに結合され、第１のアクセス時間と第２のアクセス時間との差を補償する遅延バッファと、第１のメモリの出力データと第２のメモリの遅延された出力データとをマージして、順序付けられた出力データを生成する回路とを備える。
【０００６】
任意選択で、メモリ制御回路は、第１のメモリに対応付けられた第１のメモリコントローラと、第２のメモリに対応付けられた第２のメモリコントローラとを含む。
【０００７】
任意選択で、メモリ制御回路は、第１のメモリコントローラおよび第２のメモリコントローラに結合され、第１のメモリおよび第２のメモリのうちの所望のメモリへのアクセスを可能にするメモリ選択回路を含む。
【０００８】
任意選択で、第１のメモリは、ＳＳＤメモリを含む。
【０００９】
任意選択で、第２のメモリは、ＤＲＡＭを含む。
【００１０】
任意選択で、遅延バッファは、ＰＬＤ上のＲＡＭのブロックを含む。
【００１１】
任意選択で、ＰＬＤ上のＲＡＭのブロックは、所定の遅延の間、データをバッファリングすることによって、第１のアクセス時間と第２のアクセス時間の差を補償する。
【００１２】
任意選択で、データは、所定の遅延後にＲＡＭのブロックから読み出される。
【００１３】
任意選択で、ＰＬＤは、コンフィギュレーションビットを受信するように結合される。
【００１４】
任意選択で、ＲＡＭのブロックは、コンフィギュレーションビットを使用してプログラムされるプログラマブルインターコネクトエレメントを使用して第２のメモリに結合される。
【００１５】
任意選択で、第１のメモリは不揮発性メモリを含み、第２のメモリは揮発性メモリを含む。
【００１６】
任意選択で、本回路は、第１のメモリおよび第２のメモリとのメモリアクセスを制御するメモリトランスレータをさらに含み、メモリトランスレータは、第１のメモリにアクセスするかまたは第２のメモリにアクセスするかを決定する。
【００１７】
任意選択で、メモリトランスレータは、第１のメモリおよび第２のメモリに対応するアクセス時間に関する情報を格納するためのプロファイラを含む。
【００１８】
任意選択で、メモリトランスレータは、プロファイラに格納された情報に基づいて、第１のメモリにアクセスするかまたは第２のメモリにアクセスするかを決定する。
【００１９】
異なるタイプのメモリを有するメモリシステムの動作を制御する方法もまた説明される。本方法は、第１のタイプのメモリエレメントを有し、第１のアクセス時間を有する第１のメモリを実装することと、第１のタイプのメモリエレメントとは異なる第２のタイプのメモリエレメントを有し、第２のアクセス時間を有する第２のメモリを実装することと、第１のメモリおよび第２のメモリへのアクセスを可能にすることと、第１のアクセス時間と第２のアクセス時間との差を補償するために、遅延バッファを第２のメモリに結合することと、第１のメモリの出力データと第２のメモリの遅延された出力データとをマージして、順序付けられた出力データを生成することとを含む。
【００２０】
任意選択で、第１のメモリにアクセスすることは、第１のメモリに対応付けられた第１のメモリコントローラを介して第１のメモリにアクセスすることを含み、第２のメモリにアクセスすることは、第２のメモリに対応付けられた第２のメモリコントローラを介して第２のメモリにアクセスすることを含む。
【００２１】
任意選択で、本方法は、第１のメモリコントローラおよび第２のメモリコントローラに結合され、第１のメモリおよび第２のメモリのうちの選択されたメモリへのアクセスを可能にするメモリ選択回路を実装することをさらに含む。
【００２２】
任意選択で、第１のメモリにアクセスすることは、ＳＳＤメモリを実装することを含む。
【００２３】
任意選択で、第２のメモリにアクセスすることは、ＤＲＡＭを実装することを含む。
【００２４】
任意選択で、第２のメモリによって出力されたデータを遅延バッファに結合することは、データをＰＬＤ上のＲＡＭのブロックに結合することを含む。
【図面の簡単な説明】
【００２５】
【図１】複数のメモリへのアクセスを可能にする回路のブロック図である。
【図２】異なるタイプのメモリを有するメモリシステムの動作を制御し、インオーダー処理を可能にする回路のブロック図である。
【図３】異なるタイプのメモリを有するメモリシステムの動作を制御し、アウトオブオーダー処理を可能にする回路のブロック図である。
【図４】異なるタイプのメモリにアクセスするための回路を有するメモリシステムの動作を制御する回路のブロック図である。
【図５】異なるタイプのメモリにアクセスするための回路を有するメモリシステムの動作を制御する回路の別のブロック図である。
【図６】異なるタイプのメモリを有するメモリシステムを実装する方法を示すフローチャートである。
【図７】異なるタイプのメモリを有するメモリシステムの動作を制御する方法を示すフローチャートである。
【図８】リングノードの実装でメモリを割り当てるための回路を示すブロック図である。
【図９】メモリトランスレータのアーキテクチャを示すブロック図である。
【図１０】図９のメモリトランスレータのプロファイラの動作を示すフローチャートである。
【図１１】複数のメモリのうちの、データが格納されるメモリを決定する方法を示すフローチャートである。
【図１２】ダイナミックランダムアクセスメモリ（ＤＲＡＭ）のブロック図である。
【図１３】図１２のＤＲＡＭのメモリエレメントのブロック図である。
【図１４】ソリッドステートドライブ（ＳＳＤ）メモリのブロック図である。
【図１５】図１４のソリッドステートドライブのメモリエレメントのブロック図である。
【図１６】複数のメモリタイプを実装するキーバリューストアを可能にする回路のブロック図である。
【図１７】プログラマブルリソースを有するデバイスをプログラムするためのシステムのブロック図である。
【図１８】プログラマブルリソースを有するデバイスのブロック図である。
【図１９】図１８のデバイスのコンフィギュラブルロジックエレメントのブロック図である。
【発明を実施するための形態】
【００２６】
データセンターで使用されるような大規模なメモリネットワークがますます重要になり、大量のデータを格納するために依拠されているため、メモリネットワークの性能がますます重要になっている。以下に説明される様々な回路および方法によるデータフローアーキテクチャが、異なるタイプのメモリを有するメモリネットワークの動作を可能にする。例えば、メモリシステムの動作を制御する回路は、大きなアクセスレイテンシなどのメモリの相違を補償する。以下に示す回路および方法は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）などのプログラマブルロジックデバイス（ＰＬＤ）において特定の用途を見出し、従来のプロセッサを実装するシステムよりも、はるかに低コスト、低電力、増加した計算記憶密度で、テラバイトのデータを処理および格納できるＰＬＤに基づくストレージシステムを作製することを可能にする。
【００２７】
例えば、回路は、異なるアクセス時間などの異なる特性を有する異なるタイプのメモリを有するメモリシステムの動作を制御することを可能にし、異なるメモリへのアクセスを可能にするメモリ制御回路を含む。以下でより詳細に説明するように、揮発性または不揮発性メモリを含む様々なタイプのメモリを実装することができる。遅延バッファが、例えばアクセス時間の差を補償するためにメモリの１つに結合されてもよい。１つのメモリの出力と別のメモリの遅延された出力とをマージして順序付けられた出力データを生成する回路を実装することができる。従来のマルチコアプロセッサデバイスとは異なり、データフローアーキテクチャを実装するＦＰＧＡは、これらの大きなアクセスレイテンシをうまく補償することができ、ＤＲＡＭを有効に置き換える望ましいメモリ階層として、ＳＳＤメモリをＤＲＡＭと組み合わせて使用することを可能にする。これにより、テラバイトのデータを、はるかに低コスト、低電力、増加した計算記憶密度で、レイテンシを短くして、処理し保存できるＦＰＧＡベースのストレージ装置を作製することができる。
【００２８】
本明細書は、新規であると見なされる１つ以上の実施態様の特徴を定める請求項を含むが、回路および方法は、図面と併せて説明を検討することにより、よりよく理解されると考えられる。様々な回路および方法が開示されているが、回路および方法は、発明の構成の単なる例示であり、様々な形態で実施することができることを理解されたい。したがって、本明細書に開示された特定の構造的および機能的詳細は、限定として解釈されるのではなく、単に請求項の基礎として、また、発明の構成を事実上任意の適切に詳細な構造で様々に使用することを当業者に教示するための代表的な基礎として、解釈されるべきである。さらに、本明細書で使用する用語および語句は、限定することを意図するものではなく、回路および方法の理解可能な説明を提供することを意図している。
【００２９】
まず、図１を参照すると、複数のメモリを有する集積回路デバイスのブロック図が示されている。詳細には、入出力ポート１０２が、コンフィギュレーションメモリ１０８を有するプログラマブルリソース１０６を制御する制御回路１０４に結合される。図１６〜図１８を参照して以下でより詳細に説明するコンフィギュレーションデータが、コンフィギュレーションコントローラ１１０によってコンフィギュレーションメモリ１０８に提供され得る。コンフィギュレーションデータは、コンフィギュラブルエレメント１０９の動作を可能にする。ここでメモリ１１２およびメモリ１１３として示されている複数のメモリエレメントが、制御回路１０４およびプログラマブルリソース１０６に結合されていてもよい。メモリコントローラ１１４が、制御回路１０４、プログラマブルリソース１０６並びにメモリ１１２および１１３に結合され、集積回路デバイスの外部の信号を受信するか、またはＩ／Ｏポート１１６を介して信号を送信することができる。メモリコントローラ１１４は、以下でより詳細に説明するように、メモリ１１２および１１３を制御することができる。代替的に、制御回路１０４またはプログラマブルリソースの回路が、以下に説明するようにメモリ１１２および１１３を制御することができる。図示のように制御回路１０４に結合されたＩ／Ｏポート１１８などの他のＩ／Ｏポートが、集積回路デバイスの回路に結合されてもよい。以下でより詳細に説明する回路および方法は、単一の集積回路ダイ内で実施することができ、またはマルチチップモジュール若しくはメモリネットワーク内の異なるタイプのメモリを制御する他のシステムで実施することができる。
【００３０】
次に図２を参照すると、異なるタイプのメモリを有するメモリシステムの動作を制御し、インオーダー処理を可能にする回路のブロック図が示されている。データフローバッファを有するデータフローアーキテクチャを有するアプリケーション２０１が、メモリ制御回路２０３との通信を可能にする。図２および図３において、アプリケーションのメタデータが破線で示されており、メモリの要求と応答が実線で示されている。図２の回路においてデータが「インオーダー」でルーティングされるとき、図２のメモリへのデータ要求に応答して生成されたデータは、データ要求と同じ順序で提供される。対照的に、データが「アウトオブオーダー」でルーティングされるとき、１つのメモリの第２のメモリに対するレイテンシに関係なく、異なるメモリによって出力される順序で、データが提供される。すなわち、第１のデータ要求で生成されたデータは、後のデータ要求でデータが提供されるまで、提供されないことがある。図２の回路によってルーティングされるデータが、「インオーダー」でルーティングされるとき、所与のデータ要求に関連付けられたメタデータが、データ要求に対する出力データとマッチされることを保証するように、メタデータ遅延バッファ２０２が提供される。すなわち、メタデータは、データ要求に関連付けられたデータに関する情報を提供するので、メタデータが、データ要求に関連付けられたデータとマッチされることが必要である。したがって、メタデータ遅延バッファは、図２のメモリによって生成された任意のデータが、そのデータに関連付けられたメタデータとマッチされることを保証する。
【００３１】
以下でより詳細に説明するように、アプリケーション２０１は、集積回路によって実装される任意のアプリケーション、または集積回路を有するコンピュータなどのより大きなシステムに実装される集積回路であり得る。一例として、アプリケーション２０１は、図１のプログラマブルリソース１０６に実装されたプロセッシングエレメントを有するデータ処理回路であり、メモリコントローラ２０３は、メモリコントローラ１１４に実装することができる。メモリ選択回路２０４は、データの読み出しまたは書き込みのための、複数の利用可能なメモリ２０７のうちのメモリの選択を可能にする。メモリ選択回路２０４は、同じタイプの複数のメモリを有する複数のメモリサブシステムとインターフェースすることができ、第１のタイプのメモリ２０８にアクセスするための第１のメモリコントローラ２０６（第１のタイプのメモリ２０８の出力データ２０９を生成する）と、第２のタイプのメモリ２１２にアクセスするための第２のメモリコントローラ２１０（第２のタイプのメモリ２１２の出力データ２１３を生成する）とを含むことができる。第２のタイプのメモリ２１２の出力に結合された遅延バッファ２１４は、マージ回路２１６が第１のタイプのメモリ２０８の出力データ２０９と第２のタイプのメモリ２１２の遅延された出力データ２１５に基づいて順序付けられた出力データを生成することを可能にする。すなわち、順序付けられた出力データは、データ要求の順序に対応する所望の順序でデータを含み、マージ回路２１６が、データを正しい順序に配置して、順序付けられた出力データとして生成できるように、遅延バッファ２１４は、データの一部を遅延させて、順序付けられた出力データに含まれるようにする。
【００３２】
図２の要素のすべてが、単一の集積回路（ＩＣ）に実装されることもでき、システムの複数のＩＣに分散されることもできる。メモリコントローラ２０６およびメモリコントローラ２１０は、同じＩＣ上にあり、メモリ制御回路２０３に関連付けられてもよく、または第１のタイプのメモリ２０８および第２のメモリタイプ２１２を有する別個のメモリサブシステムとともに配置されてもよい。図２には例として２つのタイプのメモリしか示されていないが、様々な回路および方法を２つより多いタイプのメモリで実施できることを理解されたい。
【００３３】
メモリ制御回路２０３は、異なる帯域幅およびレイテンシ特性を有する２つのデータストリームをマージすることを可能にする。以下に説明する回路および方法は、インオーダー処理およびアウトオブオーダー処理の両方を可能にする。インオーダー処理は、すべてのメモリサブシステムのレイテンシをバランスさせるために、データストリームに人為的遅延を挿入することによって維持することができる。この遅延要件は、ＳＳＤを有するメモリサブシステムなどの第１のメモリサブシステムのレイテンシに依存して、かなりの中間バッファ空間を必要とすることがある。アウトオブオーダー処理が受け入れ可能である場合、メモリ要求に関連するすべての対応する情報は、メモリシステムを介してストリーミングされ、メモリサブシステムからの応答は、利用可能になるとすぐに出力データストリームにマージされる。さらに、オーバープロビジョニングを、例えば、ＤＲＡＭよりも一般にスループットが低いＳＳＤインターフェース上で使用することができ、複数のＳＳＤインターフェースを組み合わせて、ＳＳＤの帯域幅要件を増加させることができる。
【００３４】
図２の構成の一例は、第１のタイプのメモリとしてＳＳＤを、第２のタイプのメモリとしてＤＲＡＭを含む。ＮＡＮＤベースのフラッシュデバイスなどのＳＳＤは、ハードディスクドライブよりも１秒あたりの入出力動作（ＩＯＰＳ）の点でより高い性能と、低いアクセスレイテンシの両方を提供するので、メモリネットワークで急速に普及している。それらはまた、標準ＤＲＡＭよりも高い記憶密度、低コスト、低消費電力を提供する。しかしながら、両方のタイプのメモリを有するメモリネットワークを実現する際の１つの重要な課題は、メモリに対する異なるアクセスレイテンシに対応することであり、ＳＳＤのアクセス時間は、ＤＲＡＭの数１０ナノ秒（ｎｓ）に比べて数１０マイクロ秒（ｕｓ）であり得る。一例として、メモリチップのレイテンシを明示することができる。いくつかのＤＲＡＭとＳＳＤのレイテンシを測定することも可能である。このデータを使用して、遅延バッファのサイズを決定できる。例えば、いくつかのＤＲＡＭは約６００ナノ秒のレイテンシを持ち、いくつかのＳＳＤは約１００マイクロ秒のレイテンシを持つかもしれない。したがって、第１のデータ要求がＳＳＤに行き、その後の要求がＤＲＡＭに行く場合、ＤＲＡＭデータは、６００ｎｓ後に（すなわち、ＳＳＤへの第１のデータ要求よりも早く）利用可能となる。出力データの順序を維持するために、ＤＲＡＭコントローラに結合された遅延バッファは、１００ｕｓ−６００ｎｓ（すなわち、９９．４ｕｓ）の期間中にＤＲＡＭによって生成されたデータをバッファリングする。ＤＲＡＭが２４０ｎｓごとに５１２ビット（６４バイト）のデータを出力する帯域幅を有すると仮定すると、遅延バッファのサイズは、６４×（９９４００／２４０）＝２６５０７バイトでなければならない。１０２４×４＝４０９６バイトのサイズのＢＲＡＭを有するＦＰＧＡ上では、ＤＲＡＭによって生成されたデータをバッファリングし、ＳＳＤのレイテンシに対応するのに必要な遅延を与えるには、（２６５０７／４０９６）＝７個のＢＲＡＭしか必要としない。従って、この遅延エレメントは、ＳＳＤとＤＲＡＭとを一緒に使用することを可能にし、ＦＰＧＡ（図１６に示すＦＰＧＡなど）のＢＲＡＭを使用して、正しいデータが順序付けられた出力データとして生成されることを保証するのに必要な遅延を提供することができる。以下でより詳細に説明するように、ＢＲＡＭからのデータが、ＳＳＤからのデータに対して正しい時間だけ遅延されるように、データは、適切な時間までＢＲＡＭから読み取られない。従来のマルチコアプロセッサは、マルチスレッドによってこれらの過度のアクセスレイテンシを補償することができないが、図１７で説明したＦＰＧＡなどのプログラマブルリソースを有するデバイスは、異なるレイテンシを有する異なるタイプのメモリを一緒に実行できる。
【００３５】
図３に示すように、異なるタイプのメモリを有し、アウトオブオーダー処理を可能にするメモリシステムでは、メタデータ遅延バッファは不要である。データはアウトオブオーダーで処理され、メモリによって出力されたデータには遅延が与えられないので、メタデータは、破線で示すように、メモリコントローラ内でデータと共に移動する。すなわち、メタデータは、データ要求に応答して生成されたデータとマッチされ、アプリケーション２０１に提供される。
【００３６】
以下でより詳細に説明する回路および方法は、これらの大きなアクセスレイテンシを補償し、ＳＳＤをメモリ階層内でＤＲＡＭと組み合わせて使用することを可能にする。テラバイトのデータを、はるかに低コスト、低電力、増加した計算記憶密度で処理して格納できる、ＰＬＤに基づいたストレージ装置を作製することが可能である。さらに、本回路および方法は、このデータを従来の構成よりもはるかに低いアクセスレイテンシでネットワークに提供することができる。
【００３７】
メモリネットワークが、所与のタイプのメモリの大きなアクセスレイテンシ、およびメモリ制御回路２０３を使用して遅延を導入することによって性能を低下させることなくアクセスレイテンシの大きな変動を効果的に補償するデータフローアーキテクチャとして実施され得る。例えば、ＦＩＦＯの形態の遅延エレメントを使用することによって、データフローアーキテクチャに遅延を導入することができる。このような構成は、ＢＲＡＭがＦＩＦＯとして実施され得るＦＰＧＡなどの集積回路内で効率的に実施することができる。ＢＲＡＭは他の機能を有していないので、遅延を提供するために専用のＦＩＦＯを設ける必要はなく、ＢＲＡＭ（その他では使用されない）をＦＩＦＯとして実装して、任意の必要な遅延を提供することができる。さらに、メモリ制御回路は、あるアイテムが特定のタイプのメモリに格納されるかどうかを決定し、その後、その要求を対応するメモリコントローラに転送することができる。以下でより詳細に説明するように、この決定は、ＤＲＡＭとＳＳＤとの間のアクセス帯域幅をバランスさせること、実際の記憶容量を特定の使用事例に合わせること、または現在の負荷状態をバランスさせることなどの多くの異なる基準に基づいて行うことができる。
【００３８】
ここで図４を参照すると、異なるタイプのメモリサブシステムにアクセスするための回路を有するメモリシステムの動作を制御する回路のブロック図が示されている。図４に示すように、メモリ制御回路２０３は、アプリケーション２０１に関連付けられた複数のプロセッシングエレメント（ＰＥ）４０６〜４１２に結合される。ＰＥは、以下の図１８及び図１９を参照してより詳細に説明されるように、例えば、ＦＰＧＡのＣＬＥに実装することができる。メモリ制御回路２０３は、メモリトランスレータ４１８を有するメモリネットワーク回路４１６を備える。メモリトランスレータ４１８は、プロセッシングエレメントの対応する出力４２３からの入力４２２でプロセッシングエレメント４０８からのデータ要求を受信するように結合された第１のバッファ回路４２０を含む。第２のバッファ回路４２４に記憶され、出力４２６で生成されたデータは、図示のように、プロセッシングエレメント４０８の対応する入力４２７に結合される。メモリトランスレータ４１８のバッファ回路４２０および４２４ならびに後述のメモリコントローラのバッファは、ＦＰＧＡのＢＲＡＭに実装することができる。遅延の量は変動してもよく、選択された遅延を提供するためのＦＩＦＯとして実装されたＢＲＡＭの数に基づいて選択することができる。すなわち、メモリコントローラ２０３は、ある遅延を有するＦＩＦＯとして実装されたＢＲＡＭを含むようにメモリの出力からのパスを選択することにより、メモリの出力においてある既知の遅延を与えるパスの選択を可能にする。遅延が必要でない場合（すなわち、アウトオブオーダー処理の場合）、遅延エレメントは、例えば、遅延エレメントの周りをルーティングすることを可能にするインターコネクトエレメントを使用してバイパスされる。異なるメモリによって出力されたデータは、その後、メモリトランスレータ４１８によって結合されて、順序付けられたデータ出力がバッファ４２４に格納されるインオーダー処理を可能にする。
【００３９】
メモリトランスレータ４１８は、メモリネットワーク４１９に結合され、メモリトランスレータによって制御されるメモリへ及びメモリからルーティングされる信号の制御を可能にする。詳細には、ここではマルチプレクサとして例示されている第１の選択回路４２８が、メモリトランスレータ４１８に結合され、メモリトランスレータ４１８によって制御され、より詳細には、第１の入力４２９でメモリアクセス要求を受信するように結合される。メモリアクセス要求が、選択回路４２８の複数の対応する出力４３０〜４３４で、複数のメモリコントローラ（ＭＣ）回路のうちの１つにルーティングされ得る。出力４３０は、入力４３８でメモリコントローラ４３６に結合される。バッファ回路４４１の出力４３７は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）としてここに示す複数のメモリ４４０に結合され、メモリコントローラが複数のメモリ４４０を制御する。ＤＲＡＭは揮発性メモリであることに留意すべきである。バッファ回路４４２は、入力４３９で複数のメモリ４４０の出力を受信し、メモリトランスレータ４１８に対する出力４４３でデータを生成するように結合される。バッファ回路４４１および４４２は、メモリにルーティングされた要求を、またはメモリエレメントから受信されたデータをデータがメモリトランスレータに戻される前に、格納するように実装することができる。ＤＲＡＭがＳＳＤよりも速いアクセス速度を有するので、バッファ４４２は、メモリトランスレータがインオーダー処理のために正しい順序で正しいデータを提供できるように、遅延を提供することを可能にする。
【００４０】
第２のメモリコントローラ４４４は、メモリネットワーク４１９および第２の複数のメモリ４４５に入力４４６で結合されており、複数のメモリはＳＳＤとして例示されており、ＳＳＤは、電力がメモリから除去された後も、記憶されたデータを保持する不揮発性メモリである。バッファ４４７および４４８は、メモリコントローラ４３６に関して上述したように、メモリトランスレータ４１８から受信したデータ要求またはメモリ４４５から受信したデータを格納することを可能にする。詳細には、メモリトランスレータからのデータ要求は、バッファ４４７の入力４４６に提供され、出力４４９で生成され、他方、複数のメモリ４４５の出力で生成されたデータは、バッファ４４８の入力４５０に結合され、データは出力４５１で生成され得る。最後に、第３のメモリコントローラ４５２が、入力４５４でメモリネットワーク４１９に結合され、ホストメモリ４５６に結合される。メモリコントローラ４５２から受信されたデータ要求は、バッファ回路４５７に格納され、バッファ４５７の入力４５９に提供されたデータ要求が出力４６０で生成され、ホストメモリ４５６に結合される。同様に、入力４６１でホストメモリから受信されたデータは、バッファ回路４５８の出力４６２で生成され、メモリトランスレータ４１８にルーティングされる。
【００４１】
ここでマルチプレクサとして示される第２の選択回路４７０がメモリトランスレータに結合され、より詳細には入力４７２〜４７６でメモリ４４０，４４５、および４５６の出力を受信するように結合され、選択された出力が出力４７８で生成される。選択されたメモリの出力は、メモリトランスレータ４１８の入力に供給される。メモリアロケータは、選択回路４７０を制御して、正しいデータが特定のメモリからアクセスされ、データがインオーダー処理のために正しい順序で供給されることを保証する。特定のメモリエレメントが例として示されているが、メモリ制御回路２０３によって他のタイプのメモリエレメントを制御できることを理解されたい。
【００４２】
ここで図５を参照すると、異なるタイプのメモリにアクセスするための回路を有するメモリシステムの動作を制御する回路の別のブロック図が示されている。第２のメモリトランスレータ５０２は、ここでプロセッシングエレメント４０６として示されている別のプロセッシングエレメントに関連付けられている。メモリトランスレータは、第１のバッファ５０４および第２のバッファ５０６を備える。第１のバッファは、プロセッシングエレメント４０６の出力５０９から第１の入力５０８でデータ要求を受信するように結合される。第２のバッファ５０６は、第２のプロセッシングエレメント４０６の入力５１２に結合された第１の出力５１０でデータを生成するように結合される。メモリトランスレータ５０２はまた、メモリネットワーク４１９に結合され、メモリトランスレータ５０２によって制御されるメモリへ及びメモリからルーティングされる信号の制御を可能にする。すなわち、第２の選択回路４７０の出力５１４が、メモリトランスレータ５０２に結合され、メモリトランスレータ５０２の出力が、選択回路４２８の入力５１６に結合される。２つより多いメモリトランスレータを実装することができ、メモリトランスレータの出力を異なるプロセッシングエレメントに結合することができることを理解されたい。
【００４３】
ここで図６を参照すると、フローチャートは、メモリシステムの動作を制御する方法を示す。ブロック６０２において、第１のタイプのメモリエレメントを有し第１のアクセス時間を有する第１のメモリへのアクセスが、可能になる。ブロック６０４において、第２のタイプのメモリエレメントを有し第２のアクセス時間を有する第２のメモリへのアクセスが、可能になり、第２のタイプのメモリエレメントは第１のタイプのメモリエレメントとは異なる。第１および第２のメモリへのアクセスは、例えば図１８の集積回路のＩＯＢなどの入力／出力回路によって提供することができる。第１のメモリコントローラおよび第２のメモリコントローラに結合されたメモリ選択回路が、ブロック６０６で提供され、選択回路は、例えば、マルチプレクサであってもよい。ブロック６０８で、メモリ選択回路並びに第１および第２のメモリコントローラを使用して、第１のメモリおよび第２のメモリのうちの適切なメモリへのアクセスが可能になる。ブロック６１０において、第１のアクセス時間と第２のアクセス時間の差を補償するために、遅延バッファとして構成可能なプログラマブルリソースが提供される。ブロック６１２において、第１のメモリの出力と第２のメモリの遅延された出力をマージして、順序付けられた出力データを生成することを可能にするために、プログラマブルインターコネクトが提供される。遅延バッファとして実装することができるプログラマブルリソースの例には、図１８のＰＬＤのＢＲＡＭが含まれ、プログラマブルインターコネクトの例には、図１８のＰＬＤのプログラマブルインターコネクトを含むことができる。
【００４４】
図７は、異なるタイプのメモリを有するメモリシステムの動作を制御する方法を示すフローチャートである。第１のメモリコントローラおよび第２のメモリコントローラに結合されたメモリ選択回路が、ブロック７０２で実装される。ブロック７０４で、メモリ選択回路並びに第１および第２のメモリコントローラを使用して、第１のメモリおよび第２のメモリのうちの適切なメモリへのアクセスが可能になる。例えば、制御信号がメモリ選択回路に供給され、データが正しいメモリにルーティングされる、または正しいメモリから受信されることを保証する。ブロック７０６において、第１のタイプのメモリエレメントを有し第１のアクセス時間を有する第１のメモリが、アクセスされる。ブロック７０８において、第２のタイプのメモリエレメントを有し第２のアクセス時間を有する第２のメモリが、アクセスされ、第２のタイプのメモリエレメントは第１のタイプのメモリエレメントとは異なる。ブロック７１０で、第２のメモリによって出力されたデータが、第１のアクセス時間と第２のアクセス時間の差を補償するために、遅延バッファに結合される。例えば、遅延バッファは、図１８の集積回路のＢＲＡＭなどの、集積回路のＢＲＡＭとして実施することができ、正しい時間にＢＲＡＭの読み出しをイネーブルするによって、効果的に適切な遅延を提供する。すなわち、ＤＲＡＭからのデータがＢＲＡＭにバッファリングされているが、（最初に読み出されなければならない）ＳＳＤからのデータが準備されていない場合、ＢＲＡＭの読み出しイネーブル回路はアサートされず、データは、所定の遅延の間保持される。したがって、データは、ＢＲＡＭにデータをバッファリングすることによってＢＲＡＭによって遅延され、データは、所定の遅延後にＢＲＡＭから読み出される。ブロック７１２で、第１のメモリの出力と第２のメモリの遅延された出力とをマージして、順序付けられた出力データを生成する。
【００４５】
図６および図７の方法の様々な要素は、説明されているような図１〜図５の回路を用いて、またはいくつかの他の適切な回路を使用して、実施され得る。方法の特定の要素が記載されているが、本方法の追加の要素または要素に関する追加の詳細が、図１〜図５の開示に従って実施できることを理解されたい。
【００４６】
ここで図８を参照すると、リングノードの実装でメモリを割り当てる回路のブロック図が示されている。図８の回路は、要素の配置を示し、リングノードの実装のノード８０２が、より詳細に示される。詳細には、各ノード８０２は、入力バッファ８０６および出力バッファ８０８に結合されたアービトレータ８０４を備える。アービトレータ８０４は、リング上の別のノード（メモリコントローラまたはメモリトランスレータなど）にデータをルーティングする、または別のノードからデータを受信するためのバッファ８０６とバッファ８０８の間のインターフェースを提供する。図８の回路は、基本的なトークンリングを実装し、アービトレータは、ある特定のデータ（すなわちトークン）を受信すると、送信バッファからリングにデータを送信し、宛先アドレスがそのノードのアドレスであることを決定すると、リングから入力バッファにデータを送信する。図８のトークンリング構成は、インオーダー処理またはアウトオブオーダー処理の両方に適用することができる。図６の方法は、リング、メッシュまたはトーラストポロジーなどの異なるトポロジーで実施することができるが、図７のリングインターコネクトトポロジーは、一般に、より少ないルーティングリソースを使用し、予測可能なレイテンシを有する。さらに、リングトポロジーは、システム内にかなりの数のメモリノードがある場合に有益である。
【００４７】
ここで図９を参照すると、ブロック図は、メモリトランスレータ４１８のアーキテクチャを示す。詳細には、入力バッファ４２０が、アドレスデコーダ９０４に結合され、メモリにデータを格納する要求を提供する。アドレスデコーダ９０４の出力は、プロファイラ９０６およびアドレス変換割り当てブロック９０８に結合される。図１０を参照してより詳細に説明されるように、プロファイラ９０６は、任意選択で、メモリネットワークの動作を最適化するために、どのメモリがデータを格納するために使用されるかを決定することを可能にする。アドレスデコーダ９０４およびプロファイラ９１０に応答して、アドレス変換割り当てブロック９０８からアドレスが出力される。すなわち、アドレス変換割り当てブロック９０８は、メモリ４４０，４４５、および４５６のうちのどれがアクセスされるかを決定する。出力バッファ４２４は、メモリの出力を受け取るように結合されている。
【００４８】
プロファイラ９０６は、高速アクセスメモリ（例えばＤＲＡＭ）および低速アクセスメモリ（例えばＳＳＤ）などのどのメモリにアクセスするかを決定するための、メモリサブシステムの分析を可能にする。メモリ性能の観察に基づいて、メモリサブシステムは、所定量のデータをサポートするように実装されることができる。たとえば、メモリネットワークにＤＲＡＭとＳＳＤを実装する場合、ｍｅｍｃａｃｈｅｄ実装では、幾つかのＳＳＤが、データにアクセスするための１０ギガビット／秒（Ｇｂｐｓ）データインターフェースのデータ要求の１％をサポートできる。つまり、１０Ｇｂｐｓのｍｅｍｃａｃｈｅｄ要求の１％がＳＳＤから値を取り出す場合、ｍｅｍｃａｃｈｅｄ要求は、なお１０Ｇｂｐｓの応答を生成することができる。例として、メモリアクセスを分割するための閾値として、２キロバイト（Ｋバイト）の値サイズを使用することができる。つまり、要求は、２ＫＢより大きい値を取り出す場合、ＳＳＤにアクセスし、そうでなければ、ＤＲＡＭにアクセスする。しかし、実際に実装されたときに、より大きな値（すなわち、この場合は２ＫＢより大きい）を取り出す要求が、データ要求の１％を超える場合には、ある値だけ閾値を増加させる必要がある。例えば、ＳＳＤに記憶されたデータに対してアクセスの１％のみが行われることを保証するために、閾値を１０２４バイト（すなわち１ＫＢ）だけ増加させることができる。図１０のフロー図は、最適性能を可能にするための閾値の変更を示す。これは、あるアクセス頻度（例えば、ＳＳＤは１％、ＤＲＡＭは９９％）を想定し、アクセス頻度とデータサイズとの間のマップを構築する。そして、データアクセスサイズが閾値よりも小さい場合には、ＤＲＡＭに対するアクセスとなる。しかしながら、データアクセスサイズが閾値より大きい場合、そのデータサイズのアクセス頻度がチェックされ、閾値を調整する必要があるかどうかが判断される。頻度が高すぎる場合、閾値が低くされる。頻度が低すぎる場合、閾値が高くされる。
【００４９】
具体的には、ブロック１００２でアドレスデコードが実行され、アクセスされるバイト数が決定される。データサイズおよびアクセス頻度の組のテーブルが、ブロック１００４で更新され、データサイズおよびアクセス頻度データが生成される。サイズ（すなわち、バイト数）は、ＤＲＡＭまたはＳＳＤなどの異なるメモリタイプにメモリアクセスを転換するために使用される。さらに、異なるメモリ（例えば、ＤＲＡＭまたはＳＳＤ）は、アクセスされるバイト数であるアクセス細分性が異なる。例えば、ＳＳＤは、ページ単位（例えば、４Ｋバイト）のアクセス細分性を示す。したがって、１バイトがＳＳＤ（１アクセスで４Ｋバイトのデータを生成できる）から取り出される場合、１バイトにアクセスするためには、１ページにアクセスするのに必要な時間と本質的に同じ時間が必要であり、メモリアクセス帯域幅の大部分が無駄になるので、メモリ性能が非常に低くなる。次に、ブロック１００６において、データサイズが閾値より大きいかどうかが判定される。そうである場合、ブロック１００８で、頻度が高すぎるかどうかが判定される。頻度が高すぎる場合、ブロック１０１０で、閾値レジスタマイナス１０２４バイトが記録される。頻度が高すぎない場合、ブロック１０１２で、頻度が低すぎるかどうかが判定される。頻度が低すぎる場合、ブロック１０１４で、閾値レジスタプラス１０２４ビットが記録される。次いで、ブロック１０１６でアドレス変換が実行され、データのサイズおよび閾値に応じて適切なタイプのメモリにデータが格納される。
【００５０】
異なるタイプのメモリを有するシステムを実装する場合、どのタイプのメモリに特定のデータを格納すべきかを決定しなければならない。図１１のフローチャートは、複数のメモリのうちの、データが格納されるメモリを決定する方法を示している。ブロック１１０２において、第１のタイプのメモリエレメントを有し第１のアクセス時間を有する第１のメモリが、実装される。ブロック１１０４において、第２のタイプのメモリエレメントを有し第２のアクセス時間を有する第２のメモリが、実装され、第２のタイプのメモリエレメントは第１のタイプのメモリエレメントとは異なる。ブロック１１０６において、第１のメモリおよび第２のメモリへのアクセスが可能にされる。第１および第２のタイプのメモリは、例えば、図４および図５を参照して説明したＮＡＮＤおよびＳＳＤメモリであってもよい。ブロック１１０８において、第１のメモリおよび第２のメモリに対応するアクセス時間が決定される。異なるタイプのメモリに対応するアクセス時間は、例えば、メモリデバイスの製造業者によって提供されてもよいし、メモリデバイスの動作中に決定されてもよい。第１のメモリコントローラおよび第２のメモリコントローラに結合されたメモリ選択回路が、ブロック１１１０で実装される。ブロック１１１２で、メモリ選択回路を使用して、第１のメモリおよび第２のメモリのうちの適切なメモリへのアクセスが可能になる。適切なメモリは、第１のメモリおよび第２のメモリに対応する決定されたアクセス時間、および格納されるデータのサイズなどの特定の基準に基づいてアクセスされる。したがって、以下でより詳細に説明するように、データは、メモリのアクセス時間およびデータのサイズに基づいて、ＤＲＡＭまたはＳＳＤメモリなどの特定のメモリに格納することができる。例えば、複数のページサイズからなるデータをＳＳＤに格納し、より小さいデータをＤＲＡＭに格納することができる。さらに、メモリトランスレータが、図１０で上述したように、ＤＲＡＭに格納されるべき小さいデータのサイズの閾値を決定することができる。
【００５１】
次に図１２を参照すると、ＤＲＡＭのブロック図が示されている。ＤＲＡＭブロック１２００は複数のメモリセル１２０２を含み、各メモリセル１２０２はアドレスデコーダ１２０４に結合されている。アドレスデコーダ１１０４は、アドレス線１２０６を受け取り、図示のように複数のメモリセル１２０２に結合されるアドレスを生成する。アドレスデコーダ１２０４は、チップイネーブル信号を受信し、メモリセル１１０２の各々は、基準電圧Ｖｒｅｆを受信する。書き込みブロック１２１０は、メモリセル１２０２からのデータの読み出しまたはメモリセル１２０２へのデータの書き込みを可能にする。詳細には、書き込みブロック１２１０に供給された書き込みイネーブル信号が、ゲート１２１４を介したメモリセル１２０２への書き込みを可能にする場合に、データ線１２１２を介して供給されたデータは、アドレスデコーダに供給されたアドレスに書き込まれる。書き込みイネーブル信号がメモリセル１２０２への書き込みを可能にしていない場合、インバータ１２１６に結合されたデータがデータ線１２１８上に生成される。以下でより詳細に説明するように、ＤＲＡＭブロックのセルに記憶されたデータは、データを保持するために周期的にリフレッシュされなければならない。
【００５２】
次に図１３を参照すると、図１２のＤＲＡＭのメモリエレメントのブロック図が示されている。詳細には、第１のトランジスタ１３０２は、基準ビット線に結合されたドレイン１３０４と、キャパシタ１３０８に結合されたソース１３０６とを有する。トランジスタ１３０２は、基準ワード線によってゲート１３１０で制御される。第２のトランジスタ１３１４が、ビット線に結合されたドレイン１３１６と、キャパシタ１３２０に結合されたソース１３１８とを有する。トランジスタ１３１４は、ワード線によってゲート１３２２で制御される。ワード線をハイに引き、記憶させる所望の値をビット線に印加してキャパシタ１３２０を充電することによって、データが書き込まれる。メモリからデータを読み出すために、センスアンプ１３２６は、基準ビット線におけるキャパシタ１３１２に記憶された電圧と、ビット線におけるキャパシタ１３２４に記憶された電圧との差を検出して出力値を生成する。ビット線の値が決定された後、適切な電荷をキャパシタ１３２４に蓄積させることによって、その値がビット線に再書き込みされる。すなわち、キャパシタ１３２４は、セルによって記憶されたデータの正しい値を維持するために周期的に再充電される。ＤＲＡＭメモリセルは、記憶されたデータを表すキャパシタの電荷を維持するために周期的にリフレッシュされなければならないが、ＳＳＤメモリセルよりも短いアクセス時間を有し得る。
【００５３】
次に図１４を参照すると、ＳＳＤメモリのブロック図が示されている。ＳＳＤは、プロセッサ１４０４およびバッファ回路１４０６を有するＳＳＤコントローラ１４０２を備え、その各々が、マルチプレクサ／デマルチプレクサ１４０８とインターフェースする。マルチプレクサ／デマルチプレクサ回路１４０８は、複数のＳＳＤ１４１０〜１４１６のうちの１つからデータを受け取り、複数のＳＳＤ１４１０〜１４１６のうちの１つにデータを供給する。インターフェース回路１４１８は、ＳＳＤと、メモリ制御回路２０３のメモリコントローラなどのデバイスのメモリインターフェースとの間でのデータ転送を可能にする。
【００５４】
次に図１５を参照すると、図１４のＳＳＤのメモリエレメントのブロック図が示されている。図１５のメモリエレメントは、ソース１５０４およびビット線によって制御されるドレイン１５０６を有する基板１５０２を含む。ワード線は、酸化物層１５１４上のフローティングゲート１５１２から酸化物層１５１０によって分離された制御ゲート１５０８を有するゲートエレメントを制御する。ＤＲＡＭおよびＳＳＤメモリデバイスに関連する回路の例が示されているが、他の回路を実装することもできることを理解されたい。
【００５５】
図１６は、複数のメモリタイプを実装するキーバリューストアを可能にする回路のブロック図である。キーバリューストアは、通信またはネットワーク・インターフェースを介して（アドレスでインデックス付けされるのではなく）関連するキーを持つ値を保管および検索することを可能にする。集積回路１６０２は、データを受信するために１つ以上のネットワークインターフェース１６０８に結合されたＩ／Ｏブロック１６０６およびデータを出力するために１つ以上のネットワークインターフェース１６１２に結合されたＩ／Ｏブロック１６１０とインターフェースするキーバリューストア制御回路１６０４で実施することができる。キーバリューストア制御回路１６０４は、上述したような、メモリ制御回路２０３に従って実現することができる。図１６の実装形態によれば、メモリインターフェース１６１４は、ここではＤＲＡＭとして示される第１の複数のメモリデバイス１６１６のうちの１つ以上のメモリデバイスと通信することを可能にし、第２のメモリインターフェース１６１８は、ここではＳＳＤとして示される第２の複数のメモリデバイス１６２０のうちの１つ以上のメモリデバイスと通信することを可能にする。
【００５６】
ＳＳＤは、低コストと低消費電力を含む多くの利点を提供する。しかし、より重要なのは、ＳＳＤは、キーバリューストアによって、より少ないピン（たとえば４ピン）で、著しく大きな記憶密度（５００ＧＢメモリなど）を提供できることである。つまり、ＳＳＤは、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）、又はＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）などの高速シリアルインターフェースを使用するため、入力／出力（Ｉ／Ｏ）ピンはほとんど必要ない。対照的に、ＤＲＡＭスモールアウトラインデュアルインラインメモリモジュール（ＳＯＤＩＭＭ）インターフェースでは、８ＧＢのストレージを接続するために約１４０本のＩ／Ｏピンが必要である。ＳＳＤは一般的にＤＲＡＭに比べてアクセス速度が遅いが、大きなデータブロックがＳＳＤに格納される場合など、データが適切なメモリデバイスに格納される場合には、回路の動作を改善させることができる。
【００５７】
メモリインターフェース１６１４及び１６１８は、例えば、図２を参照して上述したように実施することができる。ＤＲＡＭおよびＳＳＤが例として示されているが、他のタイプのメモリエレメントを実装することができ、特定のタイプのメモリデバイスの選択は、メモリデバイスの動作パラメータに基づくことを理解されたい。
【００５８】
キーバリューストアのデータにアクセスするための１つ以上のメモリエレメントを選択することにより、異なるメモリデバイスのアクセス特性を考慮して、キーバリューストアの様々なデータに使用するメモリデバイスのタイプを決定することによって、キーバリューストアの効率的な動作が可能になる。一実施形態によれば、メモリ管理回路が、データブロックを第１のデータ部分と第２のデータ部分とに分割し、第１のデータ部分と第２のデータ部分が、異なるメモリタイプに供給される。別の実施形態によれば、データ（フルデータブロックまたはデータブロックの一部として）は、例えばアクセスの速度または頻度などのアクセス基準に基づいて選択されたメモリタイプにルーティングされる。
【００５９】
ＳＳＤの１つの重要な側面は、ブロック単位のアクセス特性と、低いＩ／Ｏピン要件に関連している。このアクセス特性は、キーバリューストアを実施するためのいくつかのアプリケーションにおいて有害であり得るが、このアクセス特性は、他のアプリケーションにおいて有利に使用され得る。例えば、ページサイズ（例えば、４キロバイトのページサイズ）より小さいＳＳＤ上のアクセスは、非常に非効率的になる可能性がある。したがって、アクセス性能を最大にするために、ＤＲＡＭとＳＳＤとの間でデータを分配するためＳＳＤに加えてＤＲＡＭが設けられる。しかし、ＤＲＡＭは、データを転送するためのＩ／Ｏピンの要件がより大きい。したがって、ハイブリッド実装におけるメモリエレメントの選択は、いくつかの要因を考慮に入れることができる。
【００６０】
一実施形態によれば、キーバリューストアにアクセスまたは格納されるデータは、２つの部分に分割される。複数のページサイズで構成される値の部分はＳＳＤに格納され、残りはＤＲＡＭに格納される。したがって、ＳＳＤは、フルページサイズでのみアクセスされ、アクセス性能を最大化する。ＤＲＡＭとＳＳＤの間でリストを維持し、値を移動する必要があるかもしれないが、ハイブリッドアーキテクチャは、大幅に改善された性能を提供する。
【００６１】
次に図１７を参照すると、ある構成に従って、プログラマブルリソースを有するデバイスをプログラミングするためのシステムのブロック図が、示されている。詳細には、コンピュータ１７０２は、メモリ１７０６から回路設計１７０４を受信するように結合され、不揮発性メモリ１７０６に格納されるコンフィギュレーションビットストリームを生成する。以下でより詳細に説明するように、回路設計は、ハードウェア記述言語（ＨＤＬ）で定義された回路設計などの高レベル設計であってもよい。また、コンピュータは、不揮発性メモリ１７０８に格納され、図１８で後述する集積回路などのプログラマブル集積回路であってもよい集積回路１７１０に提供されるコンフィギュレーションビットストリームを生成するソフトウェアを実行するように構成されてもよい。以下でより詳細に説明するように、コンフィギュレーションビットストリームのビットは、集積回路のプログラマブルリソースを構成するために使用される。
【００６２】
次に図１８を参照すると、図１〜図５の回路を含むプログラマブルリソースを有するデバイスのブロック図が示されている。プログラマブルリソースを有するデバイスは、プログラマブルリソースを有する特定用途向け集積回路（ＡＳＩＣ）などの任意のタイプの集積回路デバイスで実施されてもよいが、他のデバイスは、専用プログラマブルロジックデバイス（ＰＬＤ）を含む。ＰＬＤの１つのタイプは、コンプレックスプログラマブルロジックデバイス（ＣＰＬＤ）である。ＣＰＬＤは、インターコネクトスイッチマトリクスによって互いに接続され、入出力（Ｉ／Ｏ）リソースに接続された２つ以上の「機能ブロック」を含む。ＣＰＬＤの各機能ブロックは、プログラマブルロジックアレイ（ＰＬＡ）又はプログラマブルアレイロジック（ＰＡＬ）デバイスで使用されるものと同様の２レベルＡＮＤ／ＯＲ構造を含む。別のタイプのＰＬＤは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）である。典型的なＦＰＧＡでは、コンフィギュラブルロジックブロック（ＣＬＢ）のアレイが、プログラマブル入出力ブロック（ＩＯＢ）に結合されている。ＣＬＢとＩＯＢは、プログラマブルルーティングリソースの階層によって相互接続されている。これらのＣＬＢ、ＩＯＢ、およびプログラマブルルーティングリソースは、通常はオフチップメモリからコンフィギュレーションビットストリームをＦＰＧＡのコンフィギュレーションメモリセルにロードすることによってカスタマイズされる。これらのタイプのプログラマブルロジックデバイスの両方について、デバイスの機能は、その目的のためにデバイスに提供されるコンフィギュレーションビットストリームのコンフィギュレーションデータビットによって制御される。コンフィギュレーションデータビットは、揮発性メモリ（例えば、ＦＰＧＡおよびいくつかのＣＰＬＤにおけるようなスタティックメモリセル）、不揮発性メモリ（例えば、いくつかのＣＰＬＤにおけるようなフラッシュメモリ）、または任意の他のタイプのメモリセルに保存することができる。
【００６３】
図１８のデバイスは、マルチギガビットトランシーバ（ＭＧＴ）１８０１、ＣＬＢ１８０２、ランダムアクセスメモリブロック（ＢＲＡＭ）１８０３、入出力ブロック（ＩＯＢ）１８０４、コンフィギュレーションおよびクロッキングロジック（ＣＯＮＦＩＧ／ＣＬＯＣＫＳ）１８０５、デジタル信号処理ブロック（ＤＳＰ）１８０６、特殊化された入出力ブロック（Ｉ／Ｏ）１８０７（例えば、コンフィギュレーションポートおよびクロックポート）、ならびにデジタルクロックマネージャ、アナログ−デジタルコンバータ、システム監視ロジックなどの他のプログラマブルロジック１８０８を含む多数の異なるプログラマブルタイルを有するＦＰＧＡアーキテクチャ１８００を含む。いくつかのＦＰＧＡはまた、例えば、ソフトウェアアプリケーションを実行するために使用され得る専用プロセッサブロック（ＰＲＯＣ）１８１０を含む。
【００６４】
いくつかのＦＰＧＡでは、各プログラマブルタイルは、各隣接するタイル内の対応するインターコネクトエレメントとの標準化された接続部を有するプログラマブルインターコネクトエレメント（ＩＮＴ）１８１１を含む。したがって、プログラマブルインターコネクトエレメントが一緒になって、図示されたＦＰＧＡのためのプログラマブルインターコネクト構造を実現する。プログラマブルインターコネクトエレメント１８１１はまた、図１８の上部に含まれる例によって示されるように、同じタイル内のプログラマブルロジックエレメントとの接続部を含む。
【００６５】
例えば、ＣＬＢ１８０２は、ユーザロジックを実装するようにプログラムすることができるコンフィギュラブルロジックエレメント（ＣＬＥ）１８１２及び単一のプログラマブルインターコネクトエレメント１８１１を含むことができる。ＢＲＡＭ１８０３は、１つ以上のプログラマブルインターコネクトエレメントに加えて、ＢＲＡＭロジックエレメント（ＢＲＬ）１８１３を含むことができる。ＢＲＡＭは、コンフィギュレーションロジックブロックの分散ＲＡＭとは別個の専用メモリを含む。通常、タイルに含まれるインターコネクトエレメントの数は、タイルの高さに依存する。図示の構成では、ＢＲＡＭタイルは、５つのＣＬＢと同じ高さを有するが、他の数を使用することもできる。ＤＳＰタイル１８０６は、適切な数のプログラマブルインターコネクトエレメントに加えて、ＤＳＰロジックエレメント（ＤＳＰＬ）１８１４を含むことができる。ＩＯＢ１８０４は、例えば、プログラマブルインターコネクトエレメント１８１１の１つのインスタンスに加えて、入出力ロジックエレメント（ＩＯＬ）１８１５の２つのインスタンスを含むことができる。デバイスの接続部の位置は、その目的のためにデバイスに提供されたコンフィギュレーションビットストリームのコンフィギュレーションデータビットによって制御される。プログラマブルインターコネクトは、コンフィギュレーションビットストリームのビットに応答して、インターコネクトラインを含む接続部が、プログラマブルロジックに実装された回路、またはＢＲＡＭもしくはプロセッサなどの他の回路に様々な信号を結合するために使用されることを可能にする。
【００６６】
図示された構成では、ダイの中心付近のカラム領域が、コンフィギュレーション、クロック、および他の制御ロジックのために使用される。このカラムから伸びるコンフィギュレーション／クロック分配領域１８０９は、ＦＰＧＡの幅全体にわたってクロックおよびコンフィギュレーション信号を分配するために使用される。図１８に示すアーキテクチャを利用するいくつかのＦＰＧＡは、ＦＰＧＡの大部分を構成する規則的なカラム構造を中断させる追加のロジックブロックを含む。追加のロジックブロックは、プログラマブルブロックおよび／または専用ロジックとすることができる。例えば、図１８に示すプロセッサブロックＰＲＯＣ１８１０は、ＣＬＢおよびＢＲＡＭのいくつかのカラムにまたがる。
【００６７】
図１８は、例示的なＦＰＧＡアーキテクチャのみを示すことが意図されている。カラム内のロジックブロックの数、カラムの相対的な幅、カラムの数と順序、カラムに含まれるロジックブロックのタイプ、ロジックブロックの相対的なサイズ、および図１８の上部に含まれているインターコネクト／ロジックの実装は、単に例示的なものである。例えば、実際のＦＰＧＡでは、ユーザーロジックの効率的な実装を容易にするために、ＣＬＢが現れる場所には、１つより多いＣＬＢの隣接するカラムが通常含まれている。図１８の構成は、プログラマブルリソースを有する集積回路に関するものであるが、以下でより詳細に説明する回路および方法は、任意のタイプのＡＳＩＣで実施できることを理解されたい。
【００６８】
次に図１９を参照すると、図１８のデバイスのコンフィギュラブルロジックエレメントのブロック図が示されている。具体的には、図１９は、図１８のコンフィギュレーションロジックブロック１８０２のコンフィギュラブルロジックエレメントを、簡略化した形で示す。図１９の構成では、スライスＭ１９０１は、６つのＬＵＴデータ入力端子Ａ１〜Ａ６、Ｂ１〜Ｂ６、Ｃ１〜Ｃ６、およびＤ１〜Ｄ６によってそれぞれ駆動され、それぞれが２つのＬＵＴ出力信号Ｏ５およびＯ６を出力する４つのルックアップテーブル（ＬＵＴＭ）１９０１Ａ〜１９０１Ｄを含む。ＬＵＴ１９０１Ａ〜１９０１ＤからのＯ６出力端子は、それぞれスライス出力端子Ａ〜Ｄを駆動する。ＬＵＴデータ入力信号は、プログラマブルインターコネクトエレメント１９１１によって実装され得る入力マルチプレクサを介してＦＰＧＡインターコネクト構造によって供給され、ＬＵＴ出力信号もインターコネクト構造に供給される。スライスＭはまた、出力端子ＡＭＵＸ〜ＤＭＵＸを駆動する出力選択マルチプレクサ１９１１Ａ〜１９１１Ｄと、メモリエレメント１９０２Ａ〜１９０２Ｄのデータ入力端子を駆動するマルチプレクサ１９１２Ａ〜１９１２Ｄと、組合せマルチプレクサ１９１６，１９１８，および１９１９と、バウンスマルチプレクサ回路１９２２〜１９２３と、インバータ１９０５およびマルチプレクサ１９０６（共同して、入力クロックパス上に任意選択の反転を提供する）によって表される回路と、マルチプレクサ１９１４Ａ〜１９１４Ｄ、１９１５Ａ〜１９１５Ｄ、１９２０〜１９２１および排他的ＯＲゲート１９１３Ａ〜１９１３Ｄを有するキャリーロジックとを含む。これらの要素のすべてが、図１９に示すように結合されている。図１９に示すマルチプレクサのセレクト入力が示されていない場合、セレクト入力はコンフィギュレーションメモリセルによって制御される。すなわち、コンフィギュレーションメモリセルに記憶されたコンフィギュレーションビットストリームのコンフィギュレーションビットが、マルチプレクサへの正しい入力を選択するためにマルチプレクサのセレクト入力に結合される。よく知られているこれらのコンフィギュレーションメモリセルは、図を分かりやすくするために、図１９から、ならびに本明細書の他の選択された図から省略されている。
【００６９】
図示された構成では、各メモリエレメント１９０２Ａ〜１９０２Ｄは、同期または非同期のフリップフロップまたはラッチとして機能するようにプログラムされてもよい。同期と非同期の機能間の選択が、Ｓｙｎｃ／Ａｓｙｎｃｈ選択回路１９０３をプログラムすることによって、スライス内の４つのメモリエレメントのすべてに対して行われる。Ｓ／Ｒ（セット／リセット）入力信号がセット機能を提供するように、メモリエレメントがプログラムされる場合、ＲＥＶ入力端子は、リセット機能を提供する。Ｓ／Ｒ入力信号がリセット機能を提供するように、メモリエレメントがプログラムされる場合、ＲＥＶ入力端子は、セット機能を提供する。メモリエレメント１９０２Ａ〜１９０２Ｄは、例えばグローバルクロックネットワークまたはインターコネクト構造によって供給されるクロック信号ＣＫによってクロックされる。このようなプログラマブルメモリエレメントは、ＦＰＧＡ設計の分野において周知である。各メモリエレメント１９０２Ａ〜１９０２Ｄは、レジスタード出力信号ＡＱ〜ＤＱをインターコネクト構造に供給する。各ＬＵＴ１９０１Ａ〜１９０１Ｄは、２つの出力信号Ｏ５とＯ６を供給するので、ＬＵＴは、５つの共有入力信号（ＩＮ１〜ＩＮ５）を有する２つの５入力ＬＵＴとして、または入力信号ＩＮ１〜ＩＮ６を有する１つの６入力ＬＵＴとして機能するように構成され得る。
【００７０】
図１９の構成では、各ＬＵＴＭ１９０１Ａ〜１９０１Ｄは、いくつかのモードのいずれかで機能することができる。ルックアップテーブルモードでは、各ＬＵＴは、入力マルチプレクサを介してＦＰＧＡインターコネクト構造によって供給される６つのデータ入力信号ＩＮ１〜ＩＮ６を有する。６４個のデータ値の１つが、信号ＩＮ１〜ＩＮ６の値に基づいてコンフィギュレーションメモリセルからプログラム可能に選択される。ＲＡＭモードの場合、各ＬＵＴは、１つの６４ビットＲＡＭまたはシェアードアドレッシングを備えた２つの３２ビットＲＡＭとして機能する。ＲＡＭの書き込みデータは、（ＬＵＴ１９０１Ａ〜１９０１Ｃに対してマルチプレクサ１９１７Ａ〜１９１７Ｃを介して）入力端子ＤＩ１を介して６４ビットＲＡＭに、または入力端子ＤＩ１およびＤＩ２を介して２つの３２ビットＲＡＭに供給される。ＬＵＴ  ＲＡＭにおけるＲＡＭ書き込み動作は、マルチプレクサ１９０６からのクロック信号ＣＫによって、並びにクロックイネーブル信号ＣＥまたは書き込みイネーブル信号ＷＥのいずれかを選択的に通過させることができるマルチプレクサ１９０７からの書き込みイネーブル信号ＷＥＮによって制御される。シフトレジスタモードでは、各ＬＵＴは、２つの１６ビットシフトレジスタとして、または２つの１６ビットシフトレジスタを直列に結合して１つの３２ビットシフトレジスタを作成するようにして、機能する。シフトイン信号が、入力端子ＤＩ１およびＤＩ２の一方または両方を介して供給される。１６ビットおよび３２ビットのシフトアウト信号が、ＬＵＴ出力端子を介して供給され、３２ビットのシフトアウト信号は、ＬＵＴ出力端子ＭＣ３１を介して、より直接的に供給されてもよい。ＬＵＴ１９０１Ａの３２ビットシフトアウト信号ＭＣ３１が、出力選択マルチプレクサ１９１１ＤおよびＣＬＥ出力端子ＤＭＵＸを介して、シフトレジスタチェーニングのために一般的なインターコネクト構造に供給されてもよい。したがって、上述の回路および方法は、図１８および図１９のデバイスなどのデバイス、または任意の他の適切なデバイスで実施することができる。
【００７１】
したがって、メモリシステムの動作を制御するための新しい回路および方法が説明されたことが理解できる。当業者であれば、開示された発明を組み込んだ多くの代替物および同等物が存在することが分かるであろう。その結果として、本発明は、上記によって限定されるものではなく、以下の特許請求の範囲によってのみ限定される。
【図１】
0006530815.tif 000002
【図２】
0006530815.tif 000003
【図３】
0006530815.tif 000004
【図４】
0006530815.tif 000005
【図５】
0006530815.tif 000006
【図６】
0006530815.tif 000007
【図７】
0006530815.tif 000008
【図８】
0006530815.tif 000009
【図９】
0006530815.tif 000010
【図１０】
0006530815.tif 000011
【図１１】
0006530815.tif 000012
【図１２】
0006530815.tif 000013
【図１３】
0006530815.tif 000014
【図１４】
0006530815.tif 000015
【図１５】
0006530815.tif 000016
【図１６】
0006530815.tif 000017
【図１７】
0006530815.tif 000018
【図１８】
0006530815.tif 000019
【図１９】
0006530815.tif 000020