(57)【特許請求の範囲】
【請求項１】
データを処理するための回路であって、前記回路は、
キーに関連付けられたストアへのアクセスを可能にするキーバリューストアデータトランザクションを実現するための要求を受信するための入力部と、
キーバリューストアに関連付けられた複数のメモリ装置へのアクセスを可能にする異なるメモリタイプに関連付けられた複数のメモリインターフェイスと、
前記キーバリューストアデータトランザクションに関連付けられたストアの値の第１の部分を格納する第１のタイプの第１のメモリ装置と、
前記キーバリューストアデータトランザクションに関連付けられた前記ストアの前記値の第２の部分を格納する第２のタイプの第２のメモリ装置と、
データ転送基準に基づいて、前記複数のメモリインターフェイスを介したデータのルーティングを制御するメモリ管理回路とを含み、
前記メモリ管理回路は、前記キーバリューストアデータトランザクションに関連付けられた前記ストアの前記値の前記第１の部分、および前記キーバリューストアデータトランザクションに関連付けられた前記ストアの前記値の前記第２の部分にアクセスすることを可能にする、回路。
【請求項２】
前記メモリ管理回路は、データブロックの、第１のデータ部分および第２のデータ部分へのルーティングを制御する、請求項１に記載の回路。
【請求項３】
前記メモリ管理回路は、第１のメモリインターフェイスを介してデータブロックの第１のデータ部分をルーティングすること、および第２のメモリインターフェイスを介して前記データブロックの第２のデータ部分をルーティングすることを可能にする、請求項１または請求項２に記載の回路。
【請求項４】
前記メモリ管理回路は、アクセス基準に基づいて、前記データブロックの前記第１のデータ部分および前記第２のデータ部分の各々を選択されたメモリタイプにルーティングする、請求項３に記載の回路。
【請求項５】
前記アクセス基準は、データブロックのデータのサイズに基づく、請求項４に記載の回路。
【請求項６】
前記アクセス基準は、データブロックのデータのアクセス頻度に基づく、請求項４に記載の回路。
【請求項７】
前記複数のメモリインターフェイスのうちのあるメモリインターフェイスは、データをＤＲＡＭメモリにルーティングすることを可能にし、第２のメモリインターフェイスは、データをＳＳＤメモリにルーティングすることを可能にする、請求項１〜６のいずれか１項に記載の回路。
【請求項８】
第２のメモリインターフェイスを介してルーティングされたデータは、複数のメモリ装置に格納される、請求項１〜７のいずれか１項に記載の回路。
【請求項９】
データを処理する方法であって、前記方法は、
キーに関連付けられたストアへのアクセスを可能にするキーバリューストアに関連付けられたデータトランザクションを実現するための要求を受信するステップと、
データ転送基準に基づいて、複数のメモリインターフェイスを介したデータのルーティングを制御するステップとを含み、第１のタイプのメモリの第１のメモリ装置が、前記データトランザクションに関連付けられたストアの値の第１の部分を格納し、第２のタイプのメモリの第２のメモリ装置が、前記データトランザクションに関連付けられた前記ストアの前記値の第２の部分を格納し、前記方法はさらに、
第１のメモリインターフェイスを介して前記キーバリューストアに関連付けられた前記第１のメモリ装置のメモリ位置にアクセスすることを可能にするステップと、
第２のメモリインターフェイスを介して前記キーバリューストアに関連付けられた前記第２のメモリ装置のメモリ位置にアクセスすることを可能にするステップとを含み、
メモリ管理回路が、前記データトランザクションに関連付けられた前記ストアの前記値の前記第１の部分、および前記データトランザクションに関連付けられた前記ストアの前記値の前記第２の部分にアクセスすることを可能にする、方法。
【請求項１０】
データ転送基準に基づいて、前記複数のメモリインターフェイスを介したデータのルーティングを制御するステップは、前記第１のメモリインターフェイスを介してデータブロックの第１の部分をルーティングし、前記第２のメモリインターフェイスを介して前記データブロックの第２の部分をルーティングするステップを含む、請求項９に記載の方法。
【請求項１１】
データ転送基準に基づいて、前記複数のメモリインターフェイスを介したデータのルーティングを制御するステップは、データブロックのサイズに基づいて、前記第１のメモリインターフェイスまたは前記第２のメモリインターフェイスのいずれかを介してデータをルーティングするステップを含む、請求項９または請求項１０に記載の方法。
【請求項１２】
データ転送基準に基づいて、前記複数のメモリインターフェイスを介したデータのルーティングを制御するステップは、データブロックのアクセス頻度に基づいて、前記第１のメモリインターフェイスまたは前記第２のメモリインターフェイスのいずれかを介してデータをルーティングするステップを含む、請求項９〜１１のいずれか１項に記載の方法。
【請求項１３】
第１のメモリインターフェイスを介して前記キーバリューストアに関連付けられた前記第１のメモリ装置のメモリ位置にアクセスすることを可能にするステップは、データをＳＳＤメモリにルーティングするステップを含む、請求項９〜１２のいずれか１項に記載の方法。
【請求項１４】
第２のメモリインターフェイスを介して前記キーバリューストアに関連付けられた前記第２のメモリ装置のメモリ位置にアクセスすることを可能にするステップは、データをＤＲＡＭにルーティングするステップを含む、請求項１３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
１つ以上の実現化例は一般に集積回路に関し、より特定的にはデータを処理するための回路およびデータを処理する方法に関する。
【背景技術】
【０００２】
背景
集積回路は、データを処理するための装置において実現されてもよい。また、データは、データ伝送規格に準拠する公的プロトコルまたは専用プロトコルであり得る異なるプロトコルに従って処理されてもよい。しかしながら、所与のプロトコルに依存して、異なるハードウェア要素が必要とされる場合がある。さまざまなハードウェア要素の実現は、たとえばスループット、待ち時間および消費電力といった装置の性能に影響を与える場合がある。これらの性能基準の各々は、装置の評価において引き続き有意である。すなわち、回路開発者らは、装置によって消費される電力を減少させつつ、装置の速度を改良し続けている。
【０００３】
また、集積回路を実現するコストを下げるには相当な努力がいる。集積回路を実現するコストを下げる１つのやり方は、所与の回路がさまざまな異なる用途において使用されることを可能にすることである。すなわち、回路が、異なる構成で動作し、異なる回路を実現するようにプログラミング可能であれば、集積回路を有する、よりコスト効率の高い装置が達成され得る。回路改良から利益を得るかもしれないデータ処理の１つのエリアは、キーバリューストア（key-value store：ＫＶＳ）の実現である。従来のサーバは、そのメインメモリをキーバリューストアのために使用する場合があり、クライアント装置とインターフェイス接続するためのネットワークアダプタを有する。データを格納するために異なるタイプのメモリが使用可能であるが、異なるタイプのメモリは異なる動作パラメータを有しており、ＫＶＳの動作に影響を与えるおそれがある。したがって、フレキシビリティを提供し、ひいてはデータ処理の性能を改良する装置に対するニーズが存在する。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
データを処理するための回路が説明される。回路は、キーバリューストアデータトランザクションを実現するための要求を受信するための入力部と、キーバリューストアに関連付けられた複数のメモリ装置へのアクセスを可能にする異なるメモリタイプに関連付けられた複数のメモリインターフェイスと、データ転送基準に基づいて、複数のメモリインターフェイスを介したデータのルーティングを制御するメモリ管理回路とを含む。
【０００５】
データを処理するための回路は代替的には、キーバリューストアデータトランザクションを実現するための要求を受信するための入力部と、キーバリューストアに関連付けられた第１のタイプのメモリのメモリ位置へのアクセスを可能にする第１のメモリインターフェイスと、キーバリューストアに関連付けられた第２のタイプのメモリのメモリ位置へのアクセスを可能にする第２のメモリインターフェイスと、入力部と第１および第２のメモリインターフェイスとの間に結合されたメモリ管理回路とを含んでいてもよく、メモリ管理回路は、データ転送基準に基づいて、第１および第２のメモリインターフェイスを介したデータのルーティングを制御する。
【０００６】
データを処理する方法も説明される。方法は、キーバリューストアに関連付けられたデータトランザクションを実現するための要求を受信するステップと、データ転送基準に基づいて、複数のメモリインターフェイスを介したデータのルーティングを制御するステップと、第１のメモリインターフェイスを介してキーバリューストアに関連付けられた第１のタイプのメモリのメモリ位置にアクセスすることを可能にするステップと、第２のメモリインターフェイスを介してキーバリューストアに関連付けられた第２のタイプのメモリのメモリ位置にアクセスすることを可能にするステップとを含む。
【図面の簡単な説明】
【０００７】
【図１】データを処理するための回路のブロック図である。
【図２】図１の回路のメモリインターフェイスのブロック図である。
【図３】複数のメモリタイプを実現するキーバリューストアを可能にするための回路のブロック図である。
【図４】複数のメモリタイプを実現し、アクセス帯域幅を改良するために複数のインターフェイスを並行して使用するキーバリューストアを可能にするための回路のブロック図である。
【図５】第１のタイプのメモリ用のメモリコントローラのブロック図である。
【図６】第２のタイプのメモリ用のメモリコントローラのブロック図である。
【図７】キーバリューストアの実現における異なるタイプのメモリへのデータのブロックのデータの割当てを示す図である。
【図８】ダイナミックランダムアクセスメモリ（dynamic random access memory：ＤＲＡＭ）のブロック図である。
【図９】図８のＤＲＡＭのメモリ素子のブロック図である。
【図１０】ソリッドステートドライブ（solid-state drive：ＳＳＤ）メモリのブロック図である。
【図１１】図１０のソリッドステートドライブのメモリ素子のブロック図である。
【図１２】キーバリューストアに関連付けられたデータの処理を示すフロー図である。
【図１３】キーバリューストアの動作を示すテーブルを含む図である。
【図１４】キーバリューストアを実現するためのデータパケットのフィールドを示す図である。
【図１５】キーバリューストアに関連付けられたデータを処理する方法を示すフローチャートである。
【図１６】プログラマブルリソースを有する装置をプログラミングするためのシステムのブロック図である。
【図１７】プログラマブルリソースを有する集積回路のブロック図である。
【図１８】図１７の集積回路の構成可能論理素子のブロック図である。
【発明を実施するための形態】
【０００８】
図面の詳細な説明
キーバリューストア（ＫＶＳ）は、大抵のデータセンターにおいて根本的に重要なミドルウェア層である。キーバリューストアの機能は、通信インターフェイスまたはネットワークインターフェイスを通して（アドレスでインデックス化されるのではなく）キーに関連付けられた値を格納し、検索することである。近年、キーバリューストアは、最も頻繁にアクセスされたオブジェクトをキャッシュすることを介して、それらのウェブでの存在感の性能を加速するために、データセンターにおいて広範に導入されている。ＫＶＳサーバは典型的には大規模データベースの内容をキャッシュするために使用されるため、そのようなＫＶＳサーバの重要な局面はその記憶密度であり、キャッシュが大きいほど、ＫＶＳはより効果的になる。さらに、ＫＶＳサーバのスループットおよび待ち時間は、ウェブサイトが組立てられ得る速度を本質的に決定するため、重要な特性である。最後に、サーバの（そのエネルギー消費によって支配される）運営経費がその資本化経費よりも高くなり始めるにつれて、消費電力はますます重要になる。
【０００９】
以下に述べられるさまざまな回路および方法は、プログラマブル論理またはカスタムＩＣにおけるキーバリューストアの実現のためのソリッドステートドライブ（ＳＳＤ）支援データフローアーキテクチャを説明する。さまざまな実現化例の１つの局面は、異なるタイプのメモリの組合せを通して、極めて高いスループット（たとえば８０Ｇｂｐｓ）が、非常に高い記憶密度（たとえば数テラバイト）ならびに非常に少ない待ち時間および消費電力とともに達成可能である、ということである。以下に述べられる回路および方法は、非常に少ない待ち時間および高い電力効率とともに高いデータスループットを依然として提供しつつ、たとえばＳＳＤおよびＤＲＡＭを有するハイブリッドメモリアーキテクチャの使用を通して、ユーザが必要な記憶密度を多数テラバイトまでスケール変更することを可能にする。より特定的には、この性能は、ＤＲＡＭとＳＳＤとの間でのデータのスマートな分散を通して、およびデータを多くのＳＳＤに並行して格納することを通して達成可能であり、それにより、過剰プロビジョニングを通してアクセス帯域幅を増加させる。そのアーキテクチャは、以下により詳細に説明されるフィールドプログラマブルゲートアレイ（field programmable gate array：ＦＰＧＡ）などのプログラマブル論理装置か、または特定用途向け集積回路（application specific integrated circuit：ＡＳＩＣ）のいずれかにおいて実現されてもよいが、向上したＫＶＳアーキテクチャの必要とされるフレキシビリティにより、それは、ＦＰＧＡまたは他のプログラマブル論理装置により適するようになる。
【００１０】
まず図１を参照して、データを処理するための回路のブロック図が示される。特に、ネットワークＬ２−Ｌ４処理ブロック１０２は、ＫＶＳに関連付けられたデータをＫＶＳプロトコル処理ブロック１０４に提供する。ネットワーク層処理ブロックは、データが開放型システム間相互接続（Open Systems Interconnection：ＯＳＩ）参照モデルに従って処理されることを可能にする。ここで、Ｌ２層は、通信リンクを動作させるための手順を規定し、パケットエラーを検出して訂正するデータリンク層に関する。Ｌ３層は、データがネットワーク装置間をどのように転送されるかを判断し、パケットをユニークなネットワーク装置アドレスにルーティングすること可能にする。Ｌ４層は、ネットワークにおけるエンドツーエンドメッセージ配信を管理するトランスポート層に関する。図１の回路はＯＳＩ参照モデルに関し、ネットワーク層Ｌ２〜Ｌ４に言及しているが、ネットワーク層への言及は一例として提供され、回路および方法は任意のタイプのデータネットワーク、特にキーバリューストアを実現する任意のタイプのデータネットワークにおいて実現されてもよい、ということが理解されるべきである。
【００１１】
ＫＶＳプロトコル処理ブロック１０４によって生成されたデータは、メモリ管理回路１０８によって支援されるハッシュテーブルコントローラ１０６に提供される。メモリ管理回路１０８は、バリューストアコントローラ１１０に関連付けられた動作メモリを制御する。メモリ管理回路１０８は、バリューストアにおいてアドレスページを割当て、１つ以上のアドレスをハッシュテーブルに提供し、どのタイプのメモリがデータを受信するかを判断する。ハッシュテーブルメモリインターフェイス１１１はハッシュメモリにアクセスすることを可能にし、それはたとえばＤＲＡＭまたはＳＲＡＭであってもよく、もしくはそれに代わって、図１７を参照して以下により詳細に説明されるプログラマブル論理装置のＢＲＡＭ、または任意の他のメモリタイプであってもよい。ハッシュテーブルの実現およびＫＶＳの動作は、図１２〜１４を参照して以下により詳細に説明される。バリューストアコントローラ１１０によって生成されたデータは、ＫＶＳプロトコルフォーマット化回路１１２に提供され、その出力は、ネットワークＬ２−Ｌ４処理ブロック１１４によって処理される。
【００１２】
バリューストアコントローラ１１０はまた、データをそのアドレスに従って複数のメモリインターフェイスにルーティングするメモリ管理回路１０８を介して、複数のメモリインターフェイスと通信するであろう。より特定的には、メモリインターフェイスタイプＡ１２０、メモリインターフェイスタイプＢ１２２、およびメモリインターフェイスタイプｎ１２４の各々は、ｎ個の異なるタイプのメモリ素子へのアクセスを可能にする。以下により詳細に説明されるように、メモリインターフェイスタイプＡ１２０は、ＤＲＡＭなどの第１のタイプのメモリとインターフェイス接続してもよい。メモリインターフェイスタイプＢ１２２は、第１のタイプのメモリとは異なる、ＳＳＤなどの第２のタイプのメモリとインターフェイス接続してもよい。メモリインターフェイスタイプｎは、最初の２タイプのメモリとは異なる、従来の磁気ディスクドライブなどの他のタイプのメモリへのインターフェイスであってもよい。図２を参照して以下により詳細に説明されるように、各メモリインターフェイスは、複数のメモリ装置と通信してもよい。したがって、図１の回路は、メモリ装置の異なる特性を利用するために異なるメモリ装置を選択的に実現することにより、キーバリューストアの最も効率的な実現を可能にする。
【００１３】
より特定的には、図１の回路は、著しくより大きい記憶密度を可能にする（ＤＲＡＭと組合せてＳＳＤを使用することなどによる）ハイブリッドメモリアーキテクチャを使用するアーキテクチャを提供する。このハイブリッドメモリアーキテクチャは、極めて高いスループットおよび高密度のＫＶＳの実現を可能にしつつ、はるかにより少ない消費電力を依然として可能にする。さらに、ＳＳＤを用いたカスタムハードウェアデータフローアーキテクチャのユニークな実現は、従来の装置と比べ、向上した応答時間を提供する。
【００１４】
ＫＶＳに関連付けられたパケットは、１つまたは複数のネットワークインターフェイスを通して受信されてもよい。ネットワークＬ２−Ｌ４処理回路１０２は層１〜４の処理を実現して、動作がストア動作か検索動作か、ならびにどのサイズのキーおよび値がキーバリューストア動作のためのものであるかを判断するためにＫＶＳプロトコル層が処理されることを可能にする。典型的にはＤＲＡＭに格納されたハッシュテーブルに関連付けられたハッシュテーブルコントローラ１０６は、メモリのどこにキーバリューペアが位置すべきかを判断するためにアクセスされる。メモリ管理回路１０８は、異なるタイプのメモリ装置（たとえば、ＤＲＡＭ装置およびＳＳＤ装置）間でのデータの分散を決定して、パケットがＫＶＳプロトコルに従ってＫＶＳプロトコルフォーマット化回路１１２によって再フォーマット化され、ネットワークＬ２−Ｌ４処理回路１１４によって出力される前に、バリューストアコントローラ１１０が適切なメモリ（たとえば、適切なＤＲＡＭまたはＳＳＤまたは双方）にアクセスすることを可能にする。
【００１５】
ここで図２を参照して、図１の回路のメモリインターフェイスのブロック図が示される。特に、メモリインターフェイス１２０〜１２４の各々は、複数のメモリコントローラおよび対応するメモリ装置に結合されたアービタ２０２を含んでいてもよい。たとえば、第１のメモリコントローラ２０４は第１のメモリ装置２０６に結合され、第２のメモリコントローラ２０８は第２のメモリ装置２１０に結合され、ｎ番目のメモリコントローラ２１２はｎ番目の装置２１４に結合される。図５および図６を参照してより詳細に説明されるように、各メモリコントローラは、ＤＲＡＭまたはＳＳＤなどの選択されたタイプのメモリとのやりとりを可能にし、また、あるタイプのメモリに特有のものであってもよい。さらに説明されるように、メモリのタイプは、キーバリューストアにおいてデータの最も効率的な処理を可能にするための１つ以上の基準に基づいて選択されるであろう。
【００１６】
ここで図３を参照して、複数のメモリタイプを実現するキーバリューストアを可能にするための回路のブロック図が示される。集積回路３０２はキーバリューストア制御回路３０４を有して実現されてもよく、キーバリューストア制御回路３０４は、データを受信するために１つ以上のネットワークインターフェイス３０８に結合されたＩ／Ｏブロック３０６、およびデータを出力するために１つ以上のネットワークインターフェイス３１２に結合されたＩ／Ｏブロック３１０とインターフェイス接続している。図３の実現化例によれば、メモリインターフェイス３１４は、ここにＤＲＡＭとして図示された第１の複数のメモリ装置３１６のうちの１つ以上のメモリ装置と通信することを可能にし、第２のメモリインターフェイス３１８は、ここにＳＳＤとして図示された第２の複数のメモリ装置３２０のうちの１つ以上のメモリ装置と通信することを可能にする。
【００１７】
ＳＳＤは、より低いコストおよび消費電力を含む多くの利点を提供する。しかしながら、より重要なことには、ＳＳＤは、キーバリューストアが、著しくより大きい記憶密度（５００ＧＢのメモリなど）をより少数のピン（たとえば、４つのピン）を通して接続することを可能にする。すなわち、ＳＳＤは、シリアル・アドバンスト・テクノロジー・アタッチメント（serial advanced technology attachment：ＳＡＴＡ）、シリアル・アタッチドＳＣＳＩ（ＳＡＳ）、または周辺機器コンポーネント・インターコネクト・エクスプレス（peripheral component interconnect express：ＰＣＩｅ）といった高速シリアルインターフェイスを利用するため、必要とされる入力／出力（Ｉ／Ｏ）ピンがより少ない。対照的に、ＤＲＡＭ  ＳＯＤＩＭＭは、８ＧＢのストレージを接続するために約１４０本のＩ／Ｏピンを必要とする。ＳＳＤは一般的に、アクセス速度がＤＲＡＭと比べて遅いものの、より大きいデータブロックがＳＳＤに格納される場合など、データがそれに適したメモリ装置に格納される場合には、回路の動作は改良され得る。ＳＳＤはＮＡＮＤベースのフラッシュメモリであってもよく、または、高速シリアルインターフェイスと少ないＩ／Ｏピン要件とを有する他のタイプのフラッシュメモリであってもよい。
【００１８】
メモリインターフェイス３１４および３１８は、たとえば図２のメモリインターフェイスに従って実現されてもよい。ＤＲＡＭおよびＳＳＤが一例として図示されているが、他のタイプのメモリ素子が実現されてもよく、ここで、ある特定のタイプのメモリ装置の選択は、以下により詳細に説明されるようにメモリ装置の動作パラメータに基づく、ということが理解されるべきである。第１の複数のメモリ装置３１６および第２の複数のメモリ装置３２０のメモリ装置は集積回路３０２から離れて図示されているが、メモリ装置は集積回路３０２上で実現されてもよいこと、ならびに、キーバリューストアに関連付けられた異なるタイプの複数のメモリ装置を実現するための回路および方法は単一の集積回路において実現されてもよいことが理解されるべきである。
【００１９】
キーバリューストアのデータにアクセスするための１つ以上のメモリ素子の選択は、キーバリューストアのさまざまなデータのためにどのタイプのメモリ装置を使用すべきかを判断するために異なるメモリ装置のアクセス特性を検討することによって、キーバリューストアの効率的な動作を可能にする。一実現化例によれば、メモリ管理回路はデータブロックを第１のデータ部分および第２のデータ部分に分割し、ここで、第１のデータ部分および第２のデータ部分は別々のメモリタイプに提供される。別の実現化例によれば、メモリ管理回路は、たとえばアクセスの速度または頻度といったアクセス基準に基づいて、（データブロック全体またはデータブロックの一部としての）データを選択されたメモリタイプにルーティングする。
【００２０】
ＳＳＤの重要な一局面は、そのブロック的アクセス特性と少ないＩ／Ｏピン要件とに関する。このアクセス特性は、キーバリューストアを実現するためのいくつかの用途では有害となり得るものの、このアクセス特性は、キーバリューストアを実現するための他の用途では有利に使用可能である。たとえば、ページサイズ（たとえば、４キロバイトのページサイズ）よりも小さい、ＳＳＤに対するアクセスは、非常に非効率的になるおそれがある。したがって、アクセス性能を最大化するために、ＳＳＤに加えてＤＲＡＭが提供され、ＤＲＡＭとＳＳＤとの間でデータを分散する。しかしながら、ＤＲＡＭは、データを転送するためにより多いＩ／Ｏピン要件を有する。したがって、ハイブリッド実現化例におけるメモリ素子の選択は、多くの要因を考慮に入れる場合がある。
【００２１】
一実現化例によれば、ＫＶＳにおいてアクセスされた、または格納されたデータは、２つの部分に分割される。複数のページサイズからなる値の部分はＳＳＤに格納され、一方、残りはＤＲＡＭに格納される。したがって、ＳＳＤは全ページサイズでのみアクセスされ、アクセス性能を最大化する。リストを維持し、ＤＲＡＭとＳＳＤとの間で値を移動させるために追加のオーバーヘッドが必要とされ得るものの、ハイブリッドアーキテクチャは、著しく向上した性能を提供する。データの分割の一例は、図７を参照してより詳細に説明されるであろう。
【００２２】
これに代えて、しきい値よりも小さいサイズの値はＤＲＡＭに格納され、一方、より大きいサイズの値はＳＳＤに格納される。すなわち、データのブロックを分割するのではなく、キーバリューストアに関連付けられたデータのブロックが、データブロックのサイズに基づいてＤＲＡＭまたはＳＳＤのいずれかに格納されてもよい。この代替的な実現化例は、ＤＲＡＭの密度および値の密度に整合する値サイズ分散を有する用途にとって有用である。
【００２３】
さらに別の実現化例によれば、異なるメモリタイプ間でのデータの分散は、アクセス頻度に基づいていてもよい。所与のメモリタイプへのアクセス時間は別のメモリタイプのものとは異なる場合があるため、頻繁にアクセスされるデータを高速アクセス時間を有するタイプのメモリに格納することが有益である場合がある。すなわち、頻繁にアクセスされるデータ値はＤＲＡＭに格納される。データブロックのそのような分割は、ＤＲＡＭが本質的にＳＳＤへのキャッシュである実現化例を示しており、それは、より小さい値がより頻繁にアクセスされる場合での使用にとって最も効果的である。
【００２４】
ここで図４を参照して、複数のメモリタイプを実現し、並行ストア動作を有するキーバリューストアを可能にするための回路のブロック図が示される。ページサイズを効果的に減少させるために、ＳＳＤは過剰プロビジョニングされ得る。図４の実現化例によれば、複数のメモリ３２０に加えて、同様にＳＳＤとして図示された複数のメモリ４０２が提供される。メモリ４０２は、メモリ３２０と同じ内容を格納し、メモリ３２０と並行してアクセスされる。説明されたやり方で多くのＳＳＤを並行して提供することはバリューストアサイズ自体を増加させないが、ここでは同じ内容が複数のリンクを通してアクセス可能であるため、ＳＳＤのアクセス帯域幅は増加するであろう。
【００２５】
異なるメモリタイプが使用されるため、異なるメモリインターフェイスも必要とされる。図５に示すように、第１のタイプのメモリ用のメモリインターフェイスのブロック図が示される。一例として、図５のメモリコントローラは、ＳＳＤ用に使用されてもよい。図５のメモリコントローラは、ユーザインターフェイス５０２と、物理インターフェイス５０４とを含む。ユーザインターフェイス５０２は、コマンド（ｃｍｄ）およびアドレス（ａｄｄｒ）情報を受信し、それは物理インターフェイス５０４と通信される。データも、送信（ｔｘ）または受信（ｒｘ）データとして、物理インターフェイスを介して通信される。ＳＳＤ用のコントローラとして実現される場合、送信および受信データはシリアルデータを表わす。したがって、図５の回路は、複数のメモリ３２０および４０２の各ＳＳＤのために実現されるであろう。別のタイプのメモリ用のユーザインターフェイス６０２も、コマンド（ｃｍｄ）およびアドレス（ａｄｄｒ）情報を受信し、それは物理インターフェイス６０４と通信される。物理インターフェイス６０４を介して通信されるデータに加えて、制御（ｃｔｒｌ）信号、クロック（ｃｌｋ）信号、およびアドレス（ａｄｄｒ）信号も送信される。ＤＲＡＭで実現される場合、図６の物理インターフェイスはパラレルデータを通信する。
【００２６】
ここで図７を参照して、図は、異なるタイプのメモリへのデータのブロックのデータの割当てを示す。上に述べたように、キーバリューストアのより効率的な動作は、ＳＳＤのＳＳＤアクセスブロックサイズに対応するデータブロックの部分を１つ以上のＳＳＤに格納し、残りをＤＲＡＭに格納することによって達成可能である。すなわち、ＤＲＡＭに格納されたであろう（ＳＳＤアクセスブロックサイズよりも小さい）残りの値を求めるために、モジュロ関数が実現されてもよい。図７に示すように、ｍ＋１バイトを有するデータのブロックは、ＳＳＤブロックサイズを有する２つのブロックと、残りとを含む。したがって、２つのブロックの各々はＳＳＤに格納され、一方、残りはＤＲＡＭに格納される。一例として、データブロックが８〜１２キロバイト（たとえば、８キロバイトと１０バイト）を有する場合、４キロバイトのブロックが２つ、ＳＳＤに格納され、１０バイトはＤＲＡＭに格納されるであろう。
【００２７】
ここで図８を参照して、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）のブロック図が示される。ＤＲＡＭブロック８００は複数のセル８０２を含み、それらは各々、アドレスデコーダ８０４に結合される。アドレスデコーダ８０４はアドレス線８０６を受けて、図示されるように複数のメモリセル８０２に結合されるアドレスを生成する。アドレスデコーダ８０４はチップイネーブル信号を受信し、メモリセル８０２の各々は基準電圧Ｖｒｅｆを受信する。書込みブロック８１０は、メモリセル８０２からのデータの読出しまたはメモリセル８０２へのデータの書込みを可能にする。特に、書込みブロック８１０に提供された書込みイネーブル信号がゲート８１４を介してメモリセル８０２に書込むことを可能にする場合、データライン８１２を介して提供されたデータが、アドレスデコーダに提供されたアドレスに書込まれる。書込みイネーブル信号がメモリセル８０２に書込むことを可能にしていない場合、インバータ８１６に結合されたデータがデータ線８１８上で生成される。以下により詳細に説明されるように、ＤＲＡＭブロックのセルに格納されたデータは、そのデータを保持するために周期的にリフレッシュされなければならない。
【００２８】
ここで図９を参照して、図８のＤＲＡＭのメモリ素子のブロック図が示される。特に、第１のトランジスタ９０２は、基準ビット線に結合されたドレイン９０４と、キャパシタ９０８に結合されたソース９０６とを有する。トランジスタ９０２は、基準ワード線によってゲートで制御される。第２のトランジスタ９１４は、ビット線に結合されたドレイン９１６と、キャパシタ９２０に結合されたソース９１８とを有する。トランジスタ９１４は、ワード線によってゲートで制御される。データは、ワード線をハイに引き上げ、格納すべき所望の値をビット線に印加してキャパシタ９２０を充電することによって書込まれる。メモリからデータを読出すために、センスアンプ９２６が、基準ビット線でキャパシタ９１２上に格納された電圧と、ビット線でキャパシタ９２４上に格納された電圧との差を検出して、出力値を生成するであろう。ビット線の値が求められた後で、その値は、キャパシタ９２４上に適切な電荷を格納することによってビット線に再度書込まれる。すなわち、キャパシタ９２４は、セルによって格納されたデータの正しい値を維持するために周期的に再充電される。個々のＤＲＡＭメモリセルは、ＳＲＡＭセルよりも小さいため有益であるが、ＤＲＡＭメモリセルは、格納されたデータを表わすキャパシタ上の電荷を維持するために周期的にリフレッシュされなければならず、また、アクセス時間がＳＲＡＭセルよりも長い場合がある。
【００２９】
ここで図１０を参照して、ソリッドステートドライブ（ＳＳＤ）メモリのブロック図が示される。ＳＳＤは、プロセッサ１００４とバッファ回路１００６とを有するＳＳＤコントローラ１００２を含み、プロセッサ１００４とバッファ回路１００６とは各々、マルチプレクサ／デマルチプレクサ１００８とインターフェイス接続している。マルチプレクサ／デマルチプレクサ回路１００８は、複数のフラッシュ装置１０１０〜１０１６のうちの１つからデータを受信し、それにデータを提供する。インターフェイス回路１０１８は、ＳＳＤと、ＦＰＧＡ３０２のメモリインターフェイス３１８といった装置のメモリインターフェイスとの間のデータの転送を可能にする。
【００３０】
ここで図１１を参照して、図１０のソリッドステートドライブのメモリ素子のブロック図が示される。図１１のメモリ素子は、ソース１１０４と、ビット線によって制御されるドレイン１１０６とを有する基板１１０２を含む。酸化物層１１１４上のフローティングゲート１１１２から酸化物層１１１０によって分離された制御ゲート１１０８を有するゲート素子を、ワード線が制御する。ＤＲＡＭおよびＳＳＤメモリ装置に関連付けられた回路の例が提供されたが、他の回路が実現されてもよいということが理解されるべきである。
【００３１】
ここで図１２を参照して、フロー図は、キーバリューストアに関連付けられたデータの処理を示す。一実現化例によれば、回路ブロック１２０２のパイプラインは、キーバリューストアを実現するためのブロックを含む。図１２に従った回路ブロック１２０２のパイプラインは、ハッシュ計算回路１２０４、読出しハッシュテーブル回路１２０６、書込みハッシュテーブル回路１２０８、および読出しキーバリュー（ＫＶ）テーブル１２１０、更新値回路１２１２、キャッシュ管理回路１２１４、書込みＫＶテーブル１２１６、およびフォーマット応答パケットブロック１２１８を含む。回路ブロック１２０２のパイプライン外部の、メモリまたは制御回路などのさまざまな回路、たとえばメモリ管理回路１０８またはハッシュテーブルメモリインターフェイス１１１なども採用されてもよい。
【００３２】
回路ブロック１２０２のパイプラインにおける回路ブロックの特定の順序が図１２に示されているが、回路ブロックは異なる順序で配置されてもよく、図１２の特定の順序は一例として示されている、ということが理解されるべきである。また、回路ブロックのパイプラインはキーバリューストアの実現を可能にするが、回路ブロックのパイプラインは、異なる機能を実現する他の回路ブロックを含んでいてもよい。トランザクション状態情報が、図１４に示すようなフィールドのうちの１つにおいて、または状態情報用の別個のヘッダフィールドにおいて、パケットのヘッダの一部として通信可能である。一例として、トランザクション状態は、（ハッシュを実行する、読出しハッシュを実行する、書込みハッシュを実行する、読出しキーを実行する・・・）といった、パイプラインの回路ブロック用の機能のリスティングを提供してもよい。これに代えて、状態情報は、共有されるフロー制御でサブチャネルとして送信されてもよい。
【００３３】
メモリ管理回路１０８は、キーから容易に計算される「ハッシュ」値を、図１３に２つのメモリ素子、より特定的には複数のメモリ装置３１６のキーバリューストアメモリＡおよび複数のメモリ装置３２０のキーバリューストアメモリＢとして示すキーバリューストア内のユニークメモリアドレスにマッピングする。図１３に示すように、ハッシュ関数は、あらゆる可能なキー１３０２を、関連付けられたハッシュテーブル１３０４におけるアドレスにマッピングする。ハッシュテーブルは次に、実際のキーバリューストアにおけるアドレスにマッピングする。キーバリューストアの各値はキーと対応する値とを含み、ストアの値は複数のメモリ装置に分割されてもよい。これに代えて、キーは、キーバリューストアに存在する値へのアドレスとともにハッシュテーブルに格納されてもよく、それは単なるバリューストアとして機能するであろう。したがって、キーバリューストアは、キーを格納するハッシュテーブルと、キーに関連付けられた値を格納するメモリとを使用して実現されてもよい。ハッシュテーブルは、複数のメモリ装置に格納されているデータにアクセスするために、必要なアドレスを生成する。図１３に示すように、キーバリューストアメモリＡに関連付けられた値Ａ−１およびキーバリューストアメモリＢに関連付けられた値Ａ−２は双方とも、キーＡに関連付けられたアドレスに基づいてアクセスされる。図１３に示すように、他のキー（たとえばキーＣ）に関連付けられた値も、キーバリューストアメモリＡおよびキーバリューストアメモリＢの双方に格納され、一方、別のキー（たとえばキーＩ）に関連付けられた値は、単一のメモリのみに格納される。
【００３４】
動作時、図１の回路は、ネットワークインターフェイスを通して着信要求を受信する。次に、基本ネットワークプロトコルがネットワークＬ２−Ｌ４処理ブロック１０２で処理される。典型的には、これは媒体アクセス制御（media access control：ＭＡＣ）ブロックを含み、その後にＵＤＰおよびＴＣＰ処理が続くであろう。次に、ネットワーク処理ブロック１０２によって生成されたパケットが、処理パイプラインを通るパケットフローを判断するＫＶＳプロトコル処理ブロック１０４に渡される。次に、処理トランザクション状態と考えられ得る、起動される必要がある処理ブロックが、パイプラインを通してパケットとともに渡される。次に、処理パイプラインにおける各段は、パケットを次の段に渡す前にパケットに対してどの処理（ある場合）を行なうべきか決定するために、関連する状態ビットを調べる。
【００３５】
したがって、処理パイプラインは、ハッシュ関数を計算するためのブロック、ハッシュテーブルから読出し、またはハッシュテーブルに書込むためのブロック、キーバリューストアから読出し、またはキーバリューストアに書込むためのブロック、値を修正するためのブロック、応答パケットおよび他の必要な原子動作をフォーマット化するためのブロックを含む。したがって、処理パイプラインは、キーバリューストアトランザクションプロトコルの一部であるすべての原子動作の上位集合を効果的に実現する。なお、これらの原子動作は、プログラマブルリソース、専用ハードウェアブロック、または従来のマイクロプロセッサを通すことを含む多くの異なるやり方で実現可能である。
【００３６】
ここで図１４を参照して、図は、キーバリューストアを実現するためのデータパケットのフィールドを示す。特に、データパケットは、プロトコルヘッダ区分と、パケット本体とを含む。プロトコルヘッダ区分は、マジックナンバーフィールド、オペコードフィールド、キー長フィールド、余分長フィールド、データタイプフィールド、ステータスフィールド、本体長フィールド、ユニークトランザクションＩＤ、およびユニーク項目ＩＤを含む、さまざまなフィールドを有する。パケット本体は、余分フィールドと、キーと、値とを含んでいてもよい。
【００３７】
ここで図１５を参照して、フローチャートは、キーバリューストアに関連付けられたデータを処理する方法を示す。ステップ１５０２で、キーバリューストアに関連付けられたデータトランザクションを実現するための要求が受信される。ステップ１５０４で、データ転送基準に基づいて、複数のメモリインターフェイスを介したデータのルーティングが制御される。ステップ１５０６で、第１のメモリインターフェイスを介してキーバリューストアに関連付けられた第１のタイプのメモリのメモリ位置がアクセスされることが可能になる。ステップ１５０８で、第２のメモリインターフェイスを介してキーバリューストアに関連付けられた第２のタイプのメモリのメモリ位置がアクセスされることが可能になる。図１５の方法は、上述のような図１〜４の回路を使用して、および図１６〜１８を参照して以下に説明されるようなプログラマブルリソースを有する集積回路において実施されてもよい。
【００３８】
ここで図１６を参照して、一実現化例に従った、プログラマブルリソースを有する装置をプログラミングするためのシステムのブロック図が示される。特に、コンピュータ１６０２は、メモリ１６０６からアプリケーション設計１６０４を受信し、不揮発性メモリ１６０８に格納される構成ビットストリームを生成するために結合される。以下により詳細に説明されるように、回路設計は、ハードウェア記述言語（hardware description language：ＨＤＬ）で規定された回路設計などの高レベル設計であってもよい。また、コンピュータは、構成ビットストリームを生成するソフトウェアを実行するように構成されてもよく、構成ビットストリームは、不揮発性メモリ１６０８に格納されて集積回路１６１０に提供され、集積回路１６１０は、以下に図１７で説明される集積回路などのプログラマブル集積回路であってもよい。
【００３９】
回路設計がプログラマブル集積回路において実現されるためのソフトウェアフローは、当技術分野において周知であるように、合成、パッキング、配置およびルーティングを含む。合成は、高レベル設計における回路設計を、プログラマブル集積回路に見られる素子の構成に変換するステップを含む。たとえば、コンピュータによって動作される合成ツールは、たとえば構成可能論理ブロック（configurable logic block：ＣＬＢ）またはデジタル信号処理（digital signal processing：ＤＳＰ）ブロックにおいてある機能を実現する回路設計の部分を実現してもよい。合成ツールの一例は、カリフォルニア州サンノゼ（San Jose）のザイリンクス  インコーポレイテッド（Xilinx, Inc.）から入手可能なＩＳＥツールである。パッキングは、回路設計の部分をＣＬＢなどの装置の規定されたブロックにグループ化するステップを含む。配置は、パッキングするステップ中に規定された装置のブロックの位置を判断するステップを含む。最後に、ルーティングは、プログラマブル集積回路において、プログラマブル相互接続部などの相互接続素子の経路を選択することを含む。配置およびルーティングの終わりでは、あらゆる機能、位置および接続部が知られており、次に構成ビットストリームが作成される。ビットストリームは、カリフォルニア州サンノゼのザイリンクス  インコーポレイテッドから入手可能な、ビットゲン（BitGen）と呼ばれるソフトウェアモジュールによって作成されてもよい。ビットストリームは、プログラマブル集積回路への引渡しのために、ケーブルを介してダウンロードされ、またはＥＰＲＯＭにプログラミングされる。
【００４０】
ここで図１７を参照して、プログラマブルリソースを有する集積回路のブロック図が示される。プログラマブルリソースを有する装置は、プログラマブルリソースを有する特定用途向け集積回路（ＡＳＩＣ）といった任意のタイプの集積回路装置で実現されてもよいが、他の装置は、専用プログラマブル論理装置（programmable logic device：ＰＬＤ）を含む。１つのタイプのＰＬＤは、複合プログラマブル論理装置（Complex Programmable Logic Device：ＣＰＬＤ）である。ＣＰＬＤは２つ以上の「機能ブロック」を含み、それらはともに接続され、かつ相互接続スイッチマトリックスによって入力／出力（Ｉ／Ｏ）リソースに接続される。ＣＰＬＤの各機能ブロックは、プログラマブル論理アレイ（Programmable Logic Array：ＰＬＡ）およびプログラマブルアレイ論理（Programmable Array Logic：ＰＡＬ）装置で使用されるものと同様の２レベルＡＮＤ／ＯＲ構造を含む。別のタイプのＰＬＤは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）である。典型的なＦＰＧＡでは、構成可能論理ブロック（ＣＬＢ）のアレイがプログラマブル入力／出力ブロック（input/output block：ＩＯＢ）に結合される。ＣＬＢおよびＩＯＢは、プログラマブルルーティングリソースの階層によって相互接続される。これらのＣＬＢ、ＩＯＢ、およびプログラマブルルーティングリソースは、典型的には外部メモリから構成ビットストリームをＦＰＧＡの構成メモリセルにロードすることによってカスタマイズされる。これらのタイプのプログラマブル論理装置の双方のために、装置の機能性は、その目的のために装置に提供された構成ビットストリームの構成データビットによって制御される。構成データビットは、揮発性メモリ（たとえば、ＦＰＧＡおよびいくつかのＣＰＬＤでのようなスタティックメモリセル）、不揮発性メモリ（たとえば、いくつかのＣＰＬＤでのようなフラッシュメモリ）、または任意の他のタイプのメモリセルに格納されてもよい。
【００４１】
図１７の装置は、マルチギガビットトランシーバ（multi-gigabit transceiver：ＭＧＴ）１７０１と、ＣＬＢ１７０２と、ランダムアクセスメモリブロック（random access memory block：ＢＲＡＭ）１７０３と、入力／出力ブロック（ＩＯＢ）１７０４と、構成およびクロッキング論理（ＣＯＮＦＩＧ／ＣＬＯＣＫ）１７０５と、デジタル信号処理ブロック（ＤＳＰ）１７０６と、特殊入力／出力ブロック（Ｉ／Ｏ）１７０７（たとえば、構成ポートおよびクロックポート）と、デジタルクロックマネージャ、アナログ−デジタル変換器、システムモニタリング論理などといった他のプログラマブル論理１７０８とを含む多数の異なるプログラマブルタイルを有する、ＦＰＧＡアーキテクチャ１７００を含む。いくつかのＦＰＧＡは専用プロセッサブロック（processor block：ＰＲＯＣ）１７１０も含み、それは、たとえばソフトウェアアプリケーションを実現するために使用されてもよい。
【００４２】
いくつかのＦＰＧＡでは、各プログラマブルタイルはプログラマブル相互接続素子（interconnect element：ＩＮＴ）１７１１を含み、それは、隣接する各タイルにおける対応する相互接続素子への、およびそれからの標準化された接続部を有する。したがって、ともにまとめられたプログラマブル相互接続素子は、図示されたＦＰＧＡのためのプログラマブル相互接続構造を実現する。プログラマブル相互接続素子１７１１はまた、図１７の上部に含まれる例によって示されるように、同じタイル内のプログラマブル論理素子への、およびそれからの接続部も含む。
【００４３】
たとえば、ＣＬＢ１７０２は、ユーザ論理を実現するようにプログラミングされ得る構成可能論理素子（configurable logic element：ＣＬＥ）１７１２と、単一のプログラマブル相互接続素子１７１１とを含んでいてもよい。ＢＲＡＭ１７０３は、１つ以上のプログラマブル相互接続素子に加えて、ＢＲＡＭ論理素子（BRAM logic element：ＢＲＬ）１７１３を含んでいてもよい。ＢＲＡＭは、構成論理ブロックの分散ＲＡＭとは別の専用メモリを含む。典型的には、１つのタイルに含まれる相互接続素子の数は、タイルの高さに依存する。図示された実現化例では、ＢＲＡＭタイルは５つのＣＬＢと同じ高さを有するが、他の数も使用されてもよい。ＤＳＰタイル１７０６は、適切な数のプログラマブル相互接続素子に加えて、ＤＳＰ論理素子（DSP logic element：ＤＳＰＬ）１７１４を含んでいてもよい。ＩＯＢ１７０４は、たとえば、プログラマブル相互接続素子１７１１の１つのインスタンスに加えて、入力／出力論理素子（input/output logic element：ＩＯＬ）１７１５の２つのインスタンスを含んでいてもよい。装置の接続部の位置は、その目的のために装置に提供された構成ビットストリームの構成データビットによって制御される。プログラマブル相互接続部は構成ビットストリームのビットに応答して、相互接続線を含む接続部が、さまざまな信号をプログラマブル論理で実現された回路またはＢＲＡＭなどの他の回路もしくはプロセッサに結合するために使用されることを可能にする。
【００４４】
図示された実現化例では、ダイの中心近くの列状区域は、構成、クロックおよび他の制御論理のために使用される。この列から延在する構成／クロック分散領域１７０９は、ＦＰＧＡの幅にわたってクロックおよび構成信号を分散させるために使用される。図１７に示すアーキテクチャを利用するいくつかのＦＰＧＡは、ＦＰＧＡの大部分を構築する通常の列状構造を分断する追加論理ブロックを含む。追加論理ブロックは、プログラマブルブロックおよび／または専用論理であってもよい。たとえば、図１７に示すプロセッサブロックＰＲＯＣ１７１０は、ＣＬＢおよびＢＲＡＭのいくつかの列にまたがっている。
【００４５】
なお、図１７は、単に例示的なＦＰＧＡアーキテクチャを例示するよう意図されている。１列における論理ブロックの数、列の相対的な幅、列の数および順序、列に含まれる論理ブロックのタイプ、論理ブロックの相対的なサイズ、ならびに、図１７の上部に含まれる相互接続／論理実現化例は、単に例示的なものである。たとえば、実際のＦＰＧＡでは、ＣＬＢが現われる場所であればどこでも、ＣＬＢの２つ以上の隣接する列が典型的には含まれて、ユーザ論理の効率的な実現を容易にする。図１７の実現化例はプログラマブルリソースを有する集積回路に関するものの、以下により詳細に述べられる回路および方法は任意のタイプのＡＳＩＣで実現されてもよい、ということが理解されるべきである。
【００４６】
一実現化例では、ＭＧＴ１７０１は特徴付けられたレシーバを含み、あるＣＬＢ１７０２は、ＢＲＡＭ１７０３に格納されたエラー表示を使用してアイスキャンコントローラおよびＰＲＢＳデータチェッカーを実現するように構成される。
【００４７】
ここで図１８を参照して、図１７の集積回路の構成可能論理素子のブロック図が示される。特に、図１８は、図１７の構成論理ブロック１７０２の構成可能論理素子を簡略化された形で示す。図１８の実現化例では、スライスＭ１８０１は４つのルックアップテーブル（lookup table：ＬＵＴＭ）１８０１Ａ〜１８０１Ｄを含み、それらは各々、６つのＬＵＴデータ入力端子Ａ１〜Ａ６、Ｂ１〜Ｂ６、Ｃ１〜Ｃ６およびＤ１〜Ｄ６によって駆動され、２つのＬＵＴ出力信号Ｏ５およびＯ６を提供する。ＬＵＴ１８０１Ａ〜１８０１ＤからのＯ６入出力端子は、スライス出力端子Ａ〜Ｄをそれぞれ駆動する。ＬＵＴデータ入力信号は、プログラマブル相互接続素子１８１１によって実現され得る入力マルチプレクサを介してＦＰＧＡ相互接続構造によって供給され、ＬＵＴ出力信号も相互接続構造に供給される。スライスＭはまた、出力端子ＡＭＵＸ〜ＤＭＵＸを駆動する出力選択マルチプレクサ１８１１Ａ〜１８１１Ｄ；メモリ素子１８０２Ａ〜１８０２Ｄのデータ入力端子を駆動するマルチプレクサ１８１２Ａ〜１８１２Ｄ；組合せマルチプレクサ１８１６、１８１８および１８１９；バウンスマルチプレクサ回路１８２２〜１８２３；（入力クロック経路上のオプションの反転をともに提供する）インバータ１８０５およびマルチプレクサ１８０６によって表わされる回路；および、マルチプレクサ１８１４Ａ〜１８１４Ｄ、１８１５Ａ〜１８１５Ｄ、１８２０〜１８２１と排他的ＯＲゲート１８１３Ａ〜１８１３Ｄとを有する桁上げ論理を含む。これらの素子はすべて、図１８に示すようにともに結合される。図１８に示すマルチプレクサについて選択入力部が図示されていない場合、選択入力部は構成メモリセルによって制御される。すなわち、構成メモリセルに格納された構成ビットストリームの構成ビットは、マルチプレクサの選択入力部に結合されて、マルチプレクサへの正しい入力部を選択する。これらの構成メモリセルは周知であり、ここでは明確にするために図１８から、および他の選択図面から省略される。
【００４８】
図示された実現化例では、各メモリ素子１８０２Ａ〜１８０２Ｄは、同期または非同期フリップフロップまたはラッチとして機能するようにプログラミングされてもよい。同期機能性と非同期機能性との間の選択は、同期（Ｓｙｎｃ）／非同期（Ａｓｙｎｃｈ）選択回路１８０３をプログラミングすることによって、スライス内の４つのメモリ素子すべてに対して行なわれる。メモリ素子が、Ｓ／Ｒ（セット／リセット）入力信号がセット機能を提供するようにプログラミングされる場合、ＲＥＶ入力端子はリセット機能を提供する。メモリ素子が、Ｓ／Ｒ入力信号がリセット機能を提供するようにプログラミングされる場合、ＲＥＶ入力端子はセット機能を提供する。メモリ素子１８０２Ａ〜１８０２Ｄは、たとえばグローバルクロックネットワークによって、または相互接続構造によって提供され得るクロック信号ＣＫによってクロックされる。そのようなプログラマブルメモリ素子は、ＦＰＧＡ設計の技術分野では周知である。各メモリ素子１８０２Ａ〜１８０２Ｄは、登録された出力信号ＡＱ〜ＤＱを相互接続構造に提供する。各ＬＵＴ１８０１Ａ〜１８０１Ｄは２つの出力信号Ｏ５およびＯ６を提供するため、ＬＵＴは、５つの共有入力信号（ＩＮ１〜ＩＮ５）を有する２つの５入力ＬＵＴとして、または入力信号ＩＮ１〜ＩＮ６を有する１つの６入力ＬＵＴとして機能するように構成されてもよい。
【００４９】
図１３の実現化例では、各ＬＵＴＭ１８０１Ａ〜１８０１Ｄは、いくつかのモードのうちどのモードで機能してもよい。ルックアップテーブルモードにある場合、各ＬＵＴは、入力マルチプレクサを介してＦＰＧＡ相互接続構造によって供給される６つのデータ入力信号ＩＮ１〜ＩＮ６を有する。信号ＩＮ１〜ＩＮ６の値に基づいて、構成メモリセルから、６４個のデータ値のうちの１つがプログラム可能に選択される。ＲＡＭモードにある場合、各ＬＵＴは、単一の６４ビットＲＡＭとして、または共有アドレシングを有する２つの３２ビットＲＡＭとして機能する。ＲＡＭ書込みデータが、入力端子ＤＩ１を介して（ＬＵＴ１８０１Ａ〜１８０１Ｃについてはマルチプレクサ１８１７Ａ〜１８１７Ｃを介して）６４ビットＲＡＭに供給され、または入力端子ＤＩ１およびＤＩ２を介して２つの３２ビットＲＡＭに供給される。ＬＵＴ  ＲＡＭにおけるＲＡＭ書込み動作は、マルチプレクサ１８０６からのクロック信号ＣＫによって、およびマルチプレクサ１８０７からの書込みイネーブル信号ＷＥＮによって制御され、マルチプレクサ１８０７はクロックイネーブル信号ＣＥまたは書込イネーブル信号ＷＥを選択的に渡してもよい。シフトレジスタモードでは、各ＬＵＴは、２つの１６ビットシフトレジスタとして機能するか、または単一の３２ビットシフトレジスタを作るために２つの１６ビットシフトレジスタが直列に結合された状態で機能する。シフトイン信号は、入力端子ＤＩ１およびＤＩ２のうちの一方または双方を介して提供される。１６ビットおよび３２ビットシフトアウト信号は、ＬＵＴ出力端子を通して提供されてもよく、３２ビットシフトアウト信号はまた、ＬＵＴ出力端子ＭＣ３１を介してより直接的に提供されてもよい。ＬＵＴ１８０１Ａの３２ビットシフトアウト信号ＭＣ３１はまた、出力選択マルチプレクサ１８１１ＤおよびＣＬＥ出力端子ＤＭＵＸを介して、シフトレジスタ連鎖のために一般相互接続構造に提供されてもよい。したがって、上に述べられた回路および方法は、図１７および図１８の装置などの装置、または任意の他の好適な装置において実現されてもよい。
【００５０】
ここに説明された例示的な機器は一般に、データを処理するための回路に関する。回路は、キーバリューストアデータトランザクションを実現するための要求を受信するための入力部と、キーバリューストアに関連付けられた複数のメモリ装置へのアクセスを可能にする異なるメモリタイプに関連付けられた複数のメモリインターフェイスと、データ転送基準に基づいて、複数のメモリインターフェイスを介したデータのルーティングを制御するメモリ管理回路とを含む。
【００５１】
そのような機器では、メモリ管理回路は、データブロックの、第１のデータ部分および第２のデータ部分へのルーティングを制御してもよい。
【００５２】
そのような機器では、メモリ管理回路は、第１のメモリインターフェイスを介してデータブロックの第１の部分をルーティングすること、および第２のメモリインターフェイスを介してデータブロックの第２の部分をルーティングすることを可能にしてもよい。
【００５３】
そのような機器では、メモリ管理回路は、アクセス基準に基づいて、データのブロックの一部を選択されたメモリタイプにルーティングしてもよい。
【００５４】
そのような機器では、アクセス基準は、データブロックのデータのサイズに基づいていてもよい。
【００５５】
そのような機器では、アクセス基準は、データブロックのデータのアクセス頻度に基づいていてもよい。
【００５６】
そのような機器では、複数のメモリインターフェイスは、データをＤＲＡＭにルーティングすることを可能にし得る第１のメモリインターフェイスと、データをＳＳＤメモリにルーティングすることを可能にし得る第２のメモリインターフェイスとを含んでいてもよい。
【００５７】
ここに説明された別の例示的な機器は一般に、データを処理するための回路に関する。回路は代替的には、キーバリューストアデータトランザクションを実現するための要求を受信するための入力部と、キーバリューストアに関連付けられた第１のタイプのメモリのメモリ位置へのアクセスを可能にする第１のメモリインターフェイスと、キーバリューストアに関連付けられた第２のタイプのメモリのメモリ位置へのアクセスを可能にする第２のメモリインターフェイスと、入力部と第１および第２のメモリインターフェイスとの間に結合されたメモリ管理回路とを含んでいてもよく、メモリ管理回路は、データ転送基準に基づいて、第１および第２のメモリインターフェイスを介したデータのルーティングを制御する。
【００５８】
そのような機器では、メモリ管理回路は、第１のメモリインターフェイスを介してデータブロックの第１の部分をルーティングし、第２のメモリインターフェイスを介してデータブロックの第２の部分をルーティングしてもよい。
【００５９】
そのような機器では、メモリ管理回路は、データのサイズに基づいて、第１のメモリインターフェイスまたは第２のメモリインターフェイスのいずれかを介してデータをルーティングしてもよい。
【００６０】
そのような機器では、メモリ管理回路は、データのアクセス頻度に基づいて、第１のメモリインターフェイスまたは第２のメモリインターフェイスのいずれかを介してデータをルーティングしてもよい。
【００６１】
そのような機器では、第１のメモリインターフェイスは、データをＤＲＡＭメモリにルーティングすることを可能にしてもよく、第２のメモリインターフェイスは、データをＳＳＤメモリにルーティングすることを可能にしてもよい。
【００６２】
そのような機器では、第２のメモリインターフェイスを介してルーティングされたデータは、複数のメモリ装置に格納される。
【００６３】
そのような機器では、メモリ管理回路は、複数のメモリ装置におけるデータの異なるブロックに同時にアクセスすることを可能にしてもよい。
【００６４】
ここに説明された例示的な方法は一般に、データを処理することに関する。方法は、キーバリューストアに関連付けられたデータトランザクションを実現するための要求を受信するステップと、データ転送基準に基づいて、複数のメモリインターフェイスを介したデータのルーティングを制御するステップと、第１のメモリインターフェイスを介してキーバリューストアに関連付けられた第１のタイプのメモリのメモリ位置にアクセスすることを可能にするステップと、第２のメモリインターフェイスを介してキーバリューストアに関連付けられた第２のタイプのメモリのメモリ位置にアクセスすることを可能にするステップとを含んでいてもよい。
【００６５】
そのような方法では、データ転送基準に基づいて、複数のメモリインターフェイスを介したデータのルーティングを制御するステップは、第１のメモリインターフェイスを介してデータブロックの第１の部分をルーティングし、第２のメモリインターフェイスを介してデータブロックの第２の部分をルーティングするステップを含んでいてもよい。
【００６６】
そのような方法では、データ転送基準に基づいて、複数のメモリインターフェイスを介したデータのルーティングを制御するステップは、データのサイズに基づいて、第１のメモリインターフェイスまたは第２のメモリインターフェイスのいずれかを介してデータをルーティングするステップを含んでいてもよい。
【００６７】
そのような方法では、データ転送基準に基づいて、複数のメモリインターフェイスを介したデータのルーティングを制御するステップは、データのアクセス頻度に基づいて、第１のメモリインターフェイスまたは第２のメモリインターフェイスのいずれかを介してデータをルーティングするステップを含んでいてもよい。
【００６８】
そのような方法では、第１のメモリインターフェイスを介してキーバリューストアに関連付けられた第１のタイプのメモリのメモリ位置にアクセスすることを可能にするステップは、データをＳＳＤメモリにルーティングするステップを含んでいてもよい。
【００６９】
そのような方法では、第２のメモリインターフェイスを介してキーバリューストアに関連付けられた第２のタイプのメモリのメモリ位置にアクセスすることを可能にするステップは、データをＤＲＡＭにルーティングするステップを含んでいてもよい。
【産業上の利用可能性】
【００７０】
したがって、上に述べられた回路および方法は、データを処理するための新しい回路および方法に関する。キーバリューストアについて具体的に言及されているものの、図１〜３への回路構成は、クエリプロセッサ、データスキャンといった他の関連する「ビッグデータ」アプリケーションのために拡張可能である。明細書および例示された実現化例は単なる例として考えられるべきであり、実現化例の真の範囲および精神は請求項によって示される、ということが意図されている。
【図１】
0006564375.tif 000002
【図２】
0006564375.tif 000003
【図３】
0006564375.tif 000004
【図４】
0006564375.tif 000005
【図５】
0006564375.tif 000006
【図６】
0006564375.tif 000007
【図７】
0006564375.tif 000008
【図８】
0006564375.tif 000009
【図９】
0006564375.tif 000010
【図１０】
0006564375.tif 000011
【図１１】
0006564375.tif 000012
【図１２】
0006564375.tif 000013
【図１３】
0006564375.tif 000014
【図１４】
0006564375.tif 000015
【図１５】
0006564375.tif 000016
【図１６】
0006564375.tif 000017
【図１７】
0006564375.tif 000018
【図１８】
0006564375.tif 000019