(57)【要約】ＦＩＦＯメモリ100はデータがＦＩＦＯメモリに記憶される前に、データ転送リクエストを受信する。インターリーブされた多数の同時のトランザクションとしてＦＩＦＯメモリに転送される多数の同時的なデータ転送はＦＩＦＯメモリにより行われることができる（即ち分配されたバーストで送信する異なるソース間での多重化）。進行中のデータ転送に関連される転送の長さ130、132、134の要求はＦＩＦＯメモリ中の全ての利用可能なスペースと共に追跡される。プログラム可能なバッファゾーンも付加的なオーバーフロー保護および／またはＦＩＦＯの深さのダイナミックな寸法付けを可能にするためにＦＩＦＯメモリに含まれることができる。
2005512227.tif 000002
【特許請求の範囲】
【請求項１】
先入れ先出し（ＦＩＦＯ）メモリにデータを記憶するために現在の転送リクエストを受信し、データはバスを使用して検索され、現在の転送リクエストは、ＦＩＦＯメモリに記憶されるデータの転送量を特定し、
先に確保されたデータ量と結合する転送データ量が利用可能なＦＩＦＯスペースと予め定められた関係を有する場合のみ、データの検索およびＦＩＦＯメモリへの記憶を開始するステップを含んでいる方法。
【請求項２】
先に確保された量は、先の転送リクエストに対応する確保されたＦＩＦＯスペースを含み、さらに方法は、
先の転送リクエストに対応するデータが受信され、ＦＩＦＯメモリに記憶されるとき、確保されたＦＩＦＯスペースをデクリメントし、
データがＦＩＦＯメモリに書込まれるとき、利用可能なＦＩＦＯスペースをデクリメントし、
データがＦＩＦＯメモリから読み出されるとき、利用可能なＦＩＦＯスペースをインクリメントするステップを含んでいる請求項１記載の方法。
【請求項３】
ＦＩＦＯメモリは先の転送リクエストに対応する記憶されたデータを現在の転送リクエストに対応する記憶されたデータから弁別するためにタグを記憶する請求項２記載の方法。
【請求項４】
先に確保された量はさらにプログラム可能なＦＩＦＯバッファゾーンを含んでいる請求項３記載の方法。
【請求項５】
プログラム可能なＦＩＦＯバッファゾーンはＦＩＦＯメモリの共有のために負の値にプログラムされ、予め定められた関係は転送データ量＋先に確保されたデータ量が利用可能なＦＩＦＯスペース以下である関係である請求項４記載の方法。
【請求項６】
バスはシステム相互接続バスを含んでいる請求項４記載の方法。
【請求項７】
システム相互接続バスは周辺コンポーネント相互接続拡張バスを含んでいる請求項６記載の方法。
【請求項８】
インターリーブされた多数の同時的なトランザクションから受信され、プログラム可能なバッファゾーンを有するＦＩＦＯメモリ中へ書込まれるデータの１以上の書込み速度を識別し、
ＦＩＦＯメモリから読取られるデータに対する１以上のデータ読取速度を識別し、
識別された１以上のデータ書込み速度と１以上のデータ読取速度とに基づいて、ＦＩＦＯメモリのプログラム可能なバッファゾーンのバッファゾーンサイズを設定するステップを含んでいる方法。
【請求項９】
１以上のデータ書込み速度の識別は、システム相互接続バスで受信されるデータの１以上のデータ書込み速度を識別することを含んでいる請求項８記載の方法。
【請求項１０】
バッファゾーンサイズの設定はバッファゾーンサイズを負の数に設定することを含んでいる請求項９記載の方法。
【請求項１１】
１以上のデータ読取速度の識別は、２以上のデータ読取速度の識別を含んでいる請求項１０記載の方法。
【請求項１２】
システム相互接続バスは周辺コンポーネント相互接続拡張バスを含んでいる請求項１１記載の方法。
【請求項１３】
１以上のデータ書込み速度の識別と、１以上のデータ読取速度の識別とはデフォルト速度の識別を含んでいる請求項１２記載の方法。
【請求項１４】
先入れ先出しメモリにおいて、
メモリ回路と、
このメモリ回路に結合され、メモリ回路の利用可能なスペースを追跡するための差回路と、多数のデータ転送のためのメモリスペースリクエストを受信する転送長入力ラインと、メモリスペースリクエストの合計が利用可能なスペースを超えるか否かを示すための準備出力ラインとを含んでいる制御回路とを具備している先入れ先出しメモリ。
【請求項１５】
メモリ回路は制御ビットおよびデータビットを含んでいる請求項１４記載のメモリ。
【請求項１６】
制御回路はさらに、バッファゾーンサイズを受信するため１以上のバッファ入力ラインを含み、準備出力ラインはメモリスペースリクエストとバッファゾーンサイズの合計が利用可能なスペースを超えるか否かを指示する請求項１５記載のメモリ。
【請求項１７】
さらに、データ圧縮回路とデータ圧縮解除回路とを具備している請求項１６記載のメモリ。
【請求項１８】
制御回路はさらに、受信されたバッファゾーンサイズを保持するためのレジスタセットを含んでおり、このレジスタセットはバッファゾーンサイズの大きな変更を指定するためプログラム可能なビットパターンを含んでいる請求項１６記載のメモリ。
【請求項１９】
メモリ回路はデュアルポートランダムアクセスメモリを具備している請求項１６記載のメモリ。
【請求項２０】
ＦＩＦＯメモリにデータを記憶するために現在の転送リクエストを受信し、データはバスを使用して検索され、現在の転送リクエストは、ＦＩＦＯメモリに記憶されるデータの転送量を特定するように構成されている手段と、
転送データ量＋先に確保されたデータ量が利用可能なＦＩＦＯスペース以下である場合のみ、ＦＩＦＯメモリのデータの検索および記憶を開始する手段を具備している回路。
【請求項２１】
さらに、先の転送リクエストに対応する記憶されたデータを現在の転送リクエストに対応する記憶されたデータから弁別するためにタグを記憶する手段を具備している請求項２０記載の回路。
【請求項２２】
さらに、ＦＩＦＯバッファゾーンをプログラミングする手段を具備している請求項２１記載の回路。
【請求項２３】
さらに、データ圧縮回路とデータ圧縮解除回路とを具備している請求項２２記載のメモリ。
【請求項２４】
プロセッサと、
プロセッサに結合されているアダプタメモリと、
先入れ先出しメモリを通ってアダプタメモリと結合され、多数の同時的なデータ転送をサポートするバスインターフェースと、
アダプタメモリに結合されている記憶接続と、
バスインターフェースおよびアダプタメモリと結合され、メモリ回路の利用可能なスペースを追跡するための差回路と、多数のデータ転送のためのメモリスペースリクエストを受信する転送長入力ラインと、バッファゾーンサイズを受信するための１以上のバッファ入力ラインと、メモリスペースリクエストとバッファゾーンサイズとの合計が利用可能なスペースを超えるか否かを指示するための準備出力ラインとを含んでいる制御回路とを具備する先入れ先出しメモリと、
先入れ先出しメモリと結合され、メモリスペースリクエストを転送長入力ラインに提供し、多数のデータ転送の開始を調節する管理回路とを具備しているバスアダプタ。
【請求項２５】
メモリ回路はメモリ回路中に記憶されたデータトランザクションを識別するタグを記憶するため制御ビットおよびデータビットを含んでいる請求項２４記載のバスアダプタ。
【請求項２６】
バスインターフェースは周辺コンポーネント相互接続拡張バス標準方式に適合している請求項２５記載のバスアダプタ。
【請求項２７】
記憶接続はファイバチャンネル標準方式に適合しているネットワークインターフェースを備えている請求項２６記載のバスアダプタ。
【請求項２８】
管理回路は先入れ先出しメモリによりスキップされているメモリスペースリクエストを記憶するためレジスタブロックを具備している請求項２７記載のバスアダプタ。
【請求項２９】
先入れ先出しメモリはさらにデータ圧縮回路およびデータ圧縮解除回路を具備している請求項２８記載のバスアダプタ。
【請求項３０】
インターリーブされる多数の同時的なトランザクションをサポートするシステム相互接続バスを含んでいるプログラム可能なマシンと、
記憶エリアネットワークと、
システム相互接続バスおよび記憶エリアネットワークと結合されているバスアダプタとを具備し、
前記バスアダプタは、プロセッサと、プロセッサに結合されたアダプタメモリと、バスインターフェースと、制御回路とを具備し、
前記バスインターフェースはシステム相互接続バスに結合され、メモリ回路を含む先入れ先出しメモリを介してアダプタメモリと結合されており、
前記制御回路はメモリ回路の利用可能なスペースを追跡するための差回路と、多数のデータ転送のためのメモリスペースリクエストを受信する転送長入力ラインと、メモリスペースリクエストの合計が利用可能なスペースを超えるか否かを指示するための準備出力ラインとを具備しているシステム。
【請求項３１】
メモリ回路はメモリ回路に記憶されたデータトランザクションを識別するタグを記憶するため制御ビットおよびデータビットを含んでいる請求項３０記載のシステム。
【請求項３２】
制御回路はさらに、バッファゾーンサイズを受信するための１以上のバッファ入力ラインを含んでおり、準備出力ラインはメモリスペースリクエストとバッファゾーンサイズの合計が利用可能なスペースを超えるか否かを指示する請求項３１記載のシステム。
【請求項３３】
制御回路はさらに、受信されたバッファゾーンサイズを保持するためのレジスタセットを含んでおり、そのレジスタセットはバッファゾーンサイズの大きな変更を指示するためのプログラム可能なビットパターンを含んでいる請求項３２記載のシステム。
【請求項３４】
システム相互接続バスは周辺コンポーネント相互接続拡張バスを具備している請求項３２記載のシステム。
【請求項３５】
記憶エリアネットワークはファイバチャンネルネットワークおよび複数の大容量装置を具備している請求項３２記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、先入れ先出し（ＦＩＦＯ）メモリの設計、例えばインターリーブされた多数の同時のトランザクションからバスによってデータを受信するように設計されたＦＩＦＯに関するシステムおよび技術に関する。
【背景技術】
【０００２】
本出願は2001年12月11日出願の米国特許出願第60/339,643号明細書（発明の名称“PCI/X TRANSMIT FIFO”）の優先順位の利点を主張している。
【０００３】
ＦＩＦＯメモリの設計の分野では、ＦＩＦＯのオーバーフローとデータの結果的な損失の潜在性は重要な設計における考察事項である。１つの伝統的な方法はデータがＦＩＦＯメモリに書込まれるよりも高速度でデータが常にＦＩＦＯメモリから読み出されるようにＦＩＦＯメモリが配置されるシステムおよび／または装置を設計する方法である。
【０００４】
他の通常の方法とは、ＦＩＦＯメモリの現在の状態に関する情報を出力するためＦＩＦＯメモリへ回路を付加することが含まれている。この情報はデータのＦＩＦＯメモリへの書込みおよびそこからの読取りを組織化する外部コンポーネントによって使用されることができる。このようなＦＩＦＯ状態出力の典型的な例はフルフラグ、エンプティフラグ、ほぼフルフラグ、ほぼエンプティフラグを含んでいる。さらに幾つかのＦＩＦＯメモリはほぼフルフラグおよび／またはほぼエンプティフラグをプログラム可能にする回路を含んでいる。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明はオーバーフローの保護を有するＦＩＦＯメモリを提供する。
【課題を解決するための手段】
【０００６】
本発明の１特徴によれば、ＦＩＦＯメモリはデータがＦＩＦＯメモリに記憶される前に、データ転送リクエストを受信する。データ転送リクエストは、ＦＩＦＯメモリがデータに適合するのに十分なスペースを有するか否かの決定を可能にするため、開始されるデータ転送のサイズを特定する。データ転送が一度開始されると、その転送のためのＦＩＦＯメモリ中のスペースは既に転送リクエストにより確保されることができる。データは非同期的にＦＩＦＯメモリへ書込まれ、そこから読み出されることができる。
【０００７】
インターリーブされた多数の同時トランザクションとしてＦＩＦＯメモリに転送される多数の同時的なデータ転送はＦＩＦＯメモリにより行われることができる（即ち分配されたバーストで送信する異なるソース間での多重化）。進行中のデータ転送に関連される転送の長さの要求はＦＩＦＯメモリの全体的な利用可能なスペースと共に追跡される。プログラム可能なバッファゾーンも付加的なオーバーフロー保護および／またはＦＩＦＯの深さのダイナミックな寸法付けを可能にするためにＦＩＦＯメモリに含まれることができる。
【０００８】
１以上の以下の利点も与えられる。ここに記載されたシステムおよび技術は多数のデータ転送のインターリーブされた多数の同時トランザクションからデータを受信するために単一のＦＩＦＯメモリの使用を可能にし、ＦＩＦＯのオーバーフローを阻止しながら別々のＦＩＦＯメモリで可能であるよりも効率的に大きなメモリの深さを提供する。さらに、説明したシステムおよび技術はＦＩＦＯの深さをダイナミックに寸法付けする能力と、ＦＩＦＯメモリを共有可能にし、種々の書込みおよび読取速度の組合わせに同調されることができるＦＩＦＯを提供する。
【０００９】
１以上の構成の詳細を添付図面を参照にして以下説明する。その他の特性および利点は明細書の説明および図面と、特許請求の範囲から明白であろう。
【発明を実施するための最良の形態】
【００１０】
これらおよび他の特徴を添付図面を参照して詳細に説明する。  
種々の図面において同一の参照符号は同一の素子を示している。
【００１１】
ここで説明したシステムおよび技術はインターリーブされた多数の同時的なトランザクションからデータを受信するＦＩＦＯメモリに関する。以下の説明はしばしばＰＣＩ−Ｘ（周辺コンポーネント相互接続拡張）バスでデータを受信するコンテキストでＦＩＦＯメモリを説明するが、他のコンテキストにも適用されることができる。
【００１２】
図１は多数のデータ転送の転送長リクエストを受信し、データ転送を許可するＦＩＦＯメモリ100を示すブロック図である。ＦＩＦＯメモリ100はＦＩＦＯ制御回路110とＦＩＦＯメモリ回路150を含んでいる。ＦＩＦＯ制御回路110はＦＩＦＯメモリ回路150における非同期的な読取および書込み動作を可能にするアドレス論理装置を含んでいる。
【００１３】
アドレス論理装置は書込みアドレス112と読取アドレス114をＦＩＦＯメモリ回路150に供給する。さらに、ＦＩＦＯ制御回路110はメモリ回路150の利用可能なスペースを追跡するための差回路を含んでいる。この差回路はＦＩＦＯメモリ回路150の利用可能なスペースまたは使用されたスペースを示す値を保持するレジスタのような記憶位置を含むことができる。差回路はまた出力ライン120にＦＵＬＬフラグを、出力ライン122にＮＯＴ＿ＥＭＰＴＹフラグを発生して出力する論理装置を含むことができる。
【００１４】
ＦＩＦＯメモリ100はインターリーブされた多数の同時的なトランザクションからデータを受取ることができる。これらのトランザクションは多数の特別なデータ転送に対応し、これは異なるデータ速度で行われてもよい。トランザクションはデータ転送Ａに対応する第１のトランザクション、第２のデータ転送に対応する第２のトランザクション、第１のデータ転送に対応する第３のトランザクション、第２のデータ転送に対応する第４のトランザクションを送信することによるような、それらのデータ転送への対応に関してインターリーブされることができる。例えば、ＰＣＩ−Ｘでは、シーケンスとして知られている多数のデータ転送は同時的にバスで開始され、受信される。ＰＣＩ−Ｘのシーケンスはリクエスタによる単一の論理転送の実行に関連する１以上のデータトランザクションであり、これらのトランザクションは33、66、100、133Ｍｈｚ（メガヘルツ）で動作するようにプログラムされることができる。したがって１０００バイトのデータのリクエストは全て一度に、または可変の時間に可変サイズの小さいバーストとして転送されることができる。
【００１５】
ＦＩＦＯメモリ100はＦＩＦＯのオーバーフローを阻止しながら、これらのタイプのインターリーブされた多数の同時的なトランザクションからデータを受取ることができる。ＦＩＦＯ制御回路110は２以上の転送長入力ライン130、132、134を含んでいる。これらの転送長入力ラインはデータ転送が開始される前にデータ転送全体に対するＦＩＦＯスペースの確保を可能にする。準備出力ライン136はメモリスペースリクエストの合計がＦＩＦＯメモリ100の利用可能なスペースを超えないときに断定（assert）されることができる。
【００１６】
例えばリクエストラインＡ130は１０００バイトのデータ転送のリクエストを受信できる。このリクエストＡはＦＩＦＯ制御回路110に記憶されることができ、差回路はこのリクエストを現在の利用可能なスペースおよび任意の先に確保されたスペースと比較する。転送データ量（１０００バイト）＋任意の先に確保されたデータ量が利用可能なＦＩＦＯスペース以下であるならば、リクエストは許可され、準備出力ラインが断定され、それによってデータ転送の開始を可能にする。
【００１７】
リクエストＡに対応するデータがＦＩＦＯメモリ回路150に書込まれるとき、リクエストＡに対して記憶された転送データ量はデクリメントされ、ＦＩＦＯメモリ100中に確保されたスペース量の減少を示す。第２の転送リクエストがリクエストラインＢ132で受信されるとき、差回路は同じ論理動作を行い、ここでリクエストＡに対して記憶された転送データ量は比較で使用される先に確保されたデータ量の一部分である。
【００１８】
したがって、読取および書込みサイクルでは、ＦＩＦＯ制御回路110はＦＩＦＯメモリ回路150の利用可能なスペースと、進行中のデータ転送に関連する転送長の要求との追跡を続ける。さらに、２よりも多数のリクエストラインが構成されることができ、対応する多数の同時的なトランザクションにより２よりも多数の進行中のデータ転送を可能にする。
【００１９】
ＦＩＦＯ制御回路110はプログラム可能である。１構成では、ＦＩＦＯ制御回路110は厳密な先着順サービスルールに基づいてリクエスタに応答するようにプログラム可能であるか、あるいはＦＩＦＯ制御回路110は現在の利用可能なスペースを超過しない第１のリクエストが最初にサービスされる変更された先着順ルールを使用するようにプログラムされることができる。スキップされるリクエスタはレジスタブロック中で追跡を維持されることができ、これはＦＩＦＯメモリ100の内部または外部のいずれであってもよい。
【００２０】
ＦＩＦＯメモリ100はビッグエンディアン／リトルエンディアンおよびバイトレーンスワッピングの制御を含んでもよい。ＦＩＦＯメモリ100はパリティエラーを注入し、強制的にＦＩＦＯオーバーフロー状態にする試験特性を含んでいる。ＦＩＦＯメモリ100は付加的なオーバーフロー保護を与えるために、その入力および出力でそれぞれ圧縮／圧縮解除論理装置を含んでいてもよい。
【００２１】
ＦＩＦＯメモリ100はＦＩＦＯリソースに対するデータ転送リクエストを受取り、その後データ転送が開始されるべきであるか否かを示すため準備フラグを出力することによりオーバーフロー防止を可能にする。これはデータがインターリーブされた多数の同時的なトランザクションで伝送されるバスによってデータを受信するときに有効である。例えば、ＰＣＩ―Ｘでは、多数の同時的なトランザクションからのデータはバーストモードでＦＩＦＯメモリに書込まれることができ、ここでは待機状態の挿入は可能にされず、任意の１つの転送の正確な長さは知られていない。このタイプの状態では、多量のデータを有する多数のトランザクションは迅速に連続して到着できる。これはこれらの多数のトランザクションのバーストサイクルが適応されなければＦＩＦＯオーバーフローを生じさせる。準備出力ライン136はＦＩＦＯメモリ100の非同期的な読取および書込み期間中にデータ転送リクエストで単に十分に長いホールドオフを可能にする。
【００２２】
ＦＩＦＯ制御回路110はまたプログラム可能なバッファゾーンサイズを受信するために使用されるバッファ入力ライン138を含むことができる。プログラム可能なバッファゾーンサイズは保留されているＦＩＦＯメモリ100の量を特定する。バッファゾーンサイズはＦＩＦＯメモリ100のレジスタセットに記憶されることができる。バッファゾーンサイズは準備出力を発生するために差回路により実行される論理動作に含まれることができ、バッファゾーンがＦＵＬＬ  およびＮＯＴ＿ＥＭＰＴＹ出力で示されるべきであるか否かに基づいて、先に確保された量の一部としてまたは利用可能ではないスペースとして含まれることができる。
【００２３】
バッファゾーンサイズは正または負の値にプログラムされることができる。正のバッファゾーンサイズは付加的なオーバーフロー防止を与えるために使用されることができる。これはリクエストラインで受信された転送データ量がＦＩＦＯメモリに記憶されるデータ量に正確に対応しないときに有効である。例えば、特定のデータが属すトランザクションを識別するタグはさらに以下説明するように、ＦＩＦＯメモリのデータ位置に記憶されることができる。
【００２４】
バッファゾーンサイズはより大きいデータ量がＦＩＦＯメモリ100に書込まれることを可能にするために負の値にプログラムされることができる。負のバッファゾーンはＦＩＦＯメモリ100に実際に利用可能であるよりも有効なＦＩＦＯメモリ回路のスペースを報告させる。したがってＦＩＦＯメモリ100は実際にＦＩＦＯメモリの容量を拡張せずにより大きくより多くのデータ転送に適合するようにプログラムされることができる。
【００２５】
バッファゾーンサイズは外部ファームウェアにアクセス可能なレジスタセットに記憶されることができる。このレジスタセットのビットパターンはバッファゾーンサイズの大きな変化を可能にするためにプログラムされることができる（即ち８ビットレジスタは２５６（２8）の値の固定したセットを表すように限定されていない）。ＦＩＦＯメモリ100からの読取は種々のクロック周波数で行うようにされることができる。したがって幾つかの構成では、読取と書込み速度の差はＦＩＦＯのオーバーフローに対する保護に使用されることができる。このような場合、負のバッファゾーンは上限を強化しながら論理的にＦＩＦＯの深さを増加するようにプログラムされることができ、したがってＦＩＦＯメモリがオーバーフロー保護において同時的な制御を共有することを可能にする。
【００２６】
ＦＩＦＯメモリ回路150はデュアルポートランダムアクセスメモリ（ＲＡＭ）またはレジスタファイルを使用して構成されることができる。ＦＩＦＯメモリ回路150はデータ入力ライン152、書込みエネーブル入力ライン154、書込みクロック入力156を含んでいる。ＦＩＦＯメモリ回路150はまた読取クロック入力160とデータ出力ライン162を含んでいる。ＦＩＦＯメモリ回路150は制御ビットとデータビットの記憶位置を含むことができる。
【００２７】
さらに、ＦＩＦＯメモリ100の入力および出力は直列および／または並列の入力／出力である。例えばバッファ入力ライン138は８ビットの並列入力であり、各転送長入力ライン130、132、134は直列の入力ラインである。
【００２８】
図２は、図１のＦＩＦＯメモリで使用されることができるメモリ回路構造を示すブロック図である。デュアルポートＲＡＭ200は制御ビット210とデータビット250とを含んでいる、制御ビット210はデータビット250中に記憶されたデータが対応するデータ転送を識別するタグ（例えば５ビットＰＣＩ−Ｘタグ）を記憶するために使用されることができる。
【００２９】
代わりに、制御ビット210はタグの記憶に使用されるデータビット250を識別するために使用されることができる。例えば、制御ビット212はデータビット252がデータタグを含んでいることを示している。この方法では、異なる転送のためのデータはそれらが受信されるときにメモリに記憶されることができ、大きいタグ値（例えば２４ビットのタグ）は多数の制御ビットを必要とせずに記憶されることができる。例えば制御ビット212はトランザクションのデータの開始を識別し、データビット252はデータ転送Ａに属するとしてこのトランザクションを識別する。制御ビット214はこのトランザクションのデータの終了を識別する。制御ビット216は別のトランザクションのデータの開始を識別し、データビット256はデータ転送Ｂに属するとしてこのトランザクションを識別する。制御ビット218はさらに別のトランザクションのデータの開始を識別し、データビット258はデータ転送Ａに属するとしてこのトランザクションを識別する。
【００３０】
データタグがこの方法でＦＩＦＯメモリに記憶されるとき、正のバッファゾーンサイズはＦＩＦＯのオーバーフローを防止するために使用されることができる。例えばＰＣＩ−Ｘでは各トランザクションはそれが属すシーケンスを識別するタグを含んでいる。単一のシーケンスは１または多数のトランザクションからなる。正のバッファゾーンは各シーケンスに関連する可変数のタグの記憶を考える余地を生成する。
【００３１】
デュアルポートＲＡＭ200は１２８０×８０であってもよい。制御ビット210は１６ビット幅であり、データビット250は６４ビット幅である。制御ビットはパリティビット（例えばデータの各バイトに対して１つの８パリティビット）、有効なビット（例えば有効なデータバイトを特定する３つの有効なビット）、デリミッタビット（例えばデータビットがタグ、データ、またはブロックのデータの最後のワードおよび恐らく他の情報を含むか否かを特定する４つのデリミッタビット）を含むことができる。制御ビットはまたオーバーフロー状態ビットを含むことができ、これはフルフラグセットでデータを書込むときに設定される。この状態では、エラー回復はトリガーされることができ、オーバーフロー状態ビットはエラー回復中に使用されることができる。
【００３２】
図３Ａは、多数のデータ転送の転送長リクエストを受信し、データ転送を許可するＦＩＦＯメモリで行われる動作を示しているフローチャートおよび状態図を組合わせた図である。ＦＩＦＯメモリはアイドル状態300を有する。この状態300からリクエストが転送長入力ラインで断定されるとき、現在の転送リクエストは305で受信される。現在の転送リクエストはデータ転送長リクエストを示している。例えば、リクエストされた転送長を示す値はＦＩＦＯメモリ中にラッチされることができる。
【００３３】
その後、リクエストの現在の転送量は310でＦＩＦＯスペースの先に確保された量と比較される。前述したように、先に確保された量は、１以上の既存のデータ転送のための確保量と、バッファゾーンで規定された量との両者を含むことができる。次に、転送量＋確保された量（承認された転送リクエスト＋任意のバッファスペース（正または負））がＦＩＦＯメモリで利用可能なスペース以下である場合のみ、準備フラグの表明により現在のリクエストのデータ検索が開始される。
【００３４】
データがＦＩＦＯメモリに書込まれるとき、受信されたデータに対応する確保されたＦＩＦＯスペースは320でデクリメントされる。例えばＦＩＦＯメモリに書込まれるデータに対応するラッチイン転送長値はＦＩＦＯメモリでその記憶位置でデクリメントされる。またデータがＦＩＦＯメモリに書込まれるとき、利用可能なＦＩＦＯスペースは325でデクリメントされる。データがＦＩＦＯメモリスペースから読取られるとき、利用可能なＦＩＦＯスペースは330でインクリメントされる。
【００３５】
図３Ｂは、プログラム可能なバッファゾーンを有するＦＩＦＯメモリを構成するステップを示すフローチャートである。インターリーブされた多数の同時的なトランザクションの１以上のデータ書込み速度は350で識別される。これはこのようなデータが記憶される規定された位置をアクセスし、このようなデータをリクエストし、および／またはこのようなデータを別のソースから受信することを含むことができる。例えば、ＰＣＩ−Ｘでは、可能なデータ書込み速度はＰＣＩ−Ｘ標準により規定される。これらの書込み速度またはこれらの速度のサブセットはファームウェアおよび／またはソフトウェアに記憶されることができる。
【００３６】
次に、１以上のデータ読取速度は355でプログラム可能なバッファゾーンを有するＦＩＦＯメモリから読取られるデータに対して識別される。ＦＩＦＯメモリは種々のクロック周波数で動作するようにされることのできるクロックドメインを含んだシステムの一部である。さらに、ＦＩＦＯメモリは多数のプロセッサにより読取られることができる。
【００３７】
最後に、識別された１以上のデータ書込み速度と１以上のデータ読取速度に基づいて、バッファゾーンサイズは360で設定される。このプロセスはＦＩＦＯの深さのダイナミックな寸法付けを可能にし、ＦＩＦＯメモリを共有可能にする。ＦＩＦＯメモリのプログラム可能なバッファゾーンは正または負の値として特定されることができるので、ＦＩＦＯメモリは異なる読取および書込み速度の種々の組み合わせで動作するように効率的に同調されることができる。
【００３８】
図４のＡは、バスアダプタ400を示すブロック図である。バスアダプタはシステム相互接続バスインターフェース407と記憶接続417を使用してシステム相互接続バスと記憶装置の間にインターフェースを与える。バスアダプタ400は以下さらに説明するように、ネットワークサーバのようなコンピュータシステムを記憶エリアネットワークに接続するために使用されることができる。バスアダプタ400は前述の機能を含んでいるバスデータ送信ＦＩＦＯ405を含んでいる。したがって、システム相互接続バスはインターリーブされた多数の同時的なトランザクションを使用してデータ転送を行うＰＣＩ−Ｘバスである。
【００３９】
バスアダプタ400はバスデータ送信ＦＩＦＯ405と結合される送信プロセッサを含んでいる管理回路（図示せず）を含むことができる。この管理回路はバスデータ送信ＦＩＦＯ405のアクティビティを調節し、バスデータ送信ＦＩＦＯ405と残りのバスアダプタ400との間にインターフェースを設け、システム相互接続バスインターフェース407からデータに作用する他の論理ブロックへのデータの転送を可能にする。例えば、送信プロセッサは命令をバスデータ送信ＦＩＦＯ405へラッチインするために使用されることができ、データの長さをバスデータ送信ＦＩＦＯ405へ識別し、それによってシステム相互接続バスを使用してローカルメモリ410のソースメモリアドレスと目的地アドレスを得る。この管理回路の機能もＦＩＦＯ405へ一体化されることができる。
【００４０】
バスデータ送信ＦＩＦＯ405がデータ転送リクエストを処理するのに十分なスペースを有することを決定したとき、バスデータ送信ＦＩＦＯ405はＤＭＡ（直接メモリアクセス）アービトレータ440からのデータ転送をリクエストし、これはシステム相互接続バスインターフェース407へのアクセスを制御する。ＤＭＡアービトレータ440がシステム相互接続バスインターフェース407をＦＩＦＯ405へ提供するとき、データはＦＩＦＯ405へ書込まれる。
【００４１】
データはＦＩＦＯ405からメモリ410へ読出される。メモリ410から、データはペイロード送信ＦＩＦＯ415へ書込まれ、（例えばネットワークインターフェースを使用して送信されたデータパケットとして）ＦＩＦＯ415から記憶接続417へ読出される。記憶接続417はファイバチャンネル記憶エリアネットワークのような記憶エリアネットワークへ接続されるネットワークインターフェースの一部である。
【００４２】
データは次に、記憶接続417にわたってペイロード受信ＦＩＦＯ430へ受信され、メモリ410へ転送される。このデータはその後、バスデータ受信ＦＩＦＯ432へ書込まれ、ＦＩＦＯ432からシステム相互接続バスインターフェース407へ読出される。
【００４３】
バスアダプタ400は集積回路として半導体基板に形成されることができ、バスアダプタ400とレジスタバス422のアクティビティを調節し、組織化するための制御装置420のような種々の他のコンポーネントを含むことができる。さらに、バスアダプタ400は大きいシステムの一部である。
【００４４】
図４のＢは１構成にしたがったホストバスアダプタカード450を示しているブロック図である。ホストバスアダプタカード450はインターフェースを記憶エリアネットワークへ与えるために既存のコンピュータシステムへ挿入されるように構成され、ブロックレベルの入力／出力（Ｉ／Ｏ）サービスを提供する。ホストバスアダプタ450は2200 Mission College Boulevard Santa Clara California 95052-8119に存在するインテル社により提供されるSA-110 StrongARMプロセッサであるプロセッサ455を含んでいる。
【００４５】
ホストバスアダプタ450はまた不揮発性メモリ460と揮発性メモリ465を含んでいる。これらのメモリは前述の方法を実行するための命令を記憶するために使用されることができる。不揮発性メモリ460はフラッシュメモリでよい。揮発性メモリ465は専用の読取ポートと専用の書込みポートを有するＱＤＲ（カッドデータ速度）ＳＲＡＭのような高速度ＳＲＡＭ（スタチックランダムアクセスメモリ）−ベースのメモリ装置である。揮発性メモリ465は送信および受信ペイロードデータと、記憶ネットワークおよびバスコンテキスト情報とプロセッサデータ（例えばコード、スタック、スクラッチデータ）を記憶するために使用されることができる。
【００４６】
ホストバスアダプタ450はまたバスアダプタの用途特定集積回路（ＡＳＩＣ）470も含んでいる。このバスアダプタＡＳＩＣ470はプロセッサ455、不揮発性メモリ460、揮発性メモリ465をバスインターフェース475およびネットワークインターフェース480に接続する。バスアダプタＡＳＩＣ470は前述の図４のＡを参照して示し説明した回路コンポーネントを含んでいる種々の回路コンポーネントを使用して構成されることができ、ホストバスアダプタ450へ接続される種々のコンポーネントとの相互動作能力を改良するために多数の製造業者の設計をエミュレートするように作られることができる。
【００４７】
バスインターフェース475はＰＣＩ−Ｘバスと接続するように構成されることができる。ネットワークインターフェース480はファイバチャンネルネットワークと接続するように構成されることができる。
【００４８】
図４のＡとＢを参照にして先に示し説明したバスアダプタは実施形態として与えられている。他のバスアダプタおよび全体的に異なる装置はここで説明されているシステムおよび技術を使用できる。通常、バスアダプタはＩ／Ｏ処理およびサーバのようなデータ処理システムと記憶装置との間の物理的な接続性を提供する。記憶装置は種々の直接取付けられたまたはファイバチャンネル、ｉＳＣＳＩ（インターネットプロトコルによる小型コンピュータシステムインターフェース）、ＶＩ／ＩＰ（インターネットプロトコルによる仮想インターフェース）ＦＩＣＯＮ（ファイバ接続）またはＳＣＳＩ（小型コンピュータシステムインターフェース）を含んでいる記憶ネットワーク化技術を使用して取付けられることができる。バスアダプタはＩ／Ｏ処理能力を提供し、これはバスアダプタが取付けられるデータ処理システムの中央プロセッサの処理ロードを減少する。
【００４９】
対照的に、ネットワークインターフェースカードは典型的にパケットシーケンス順序の維持、セグメント化およびリアセンブリ、エラー検出および補正、およびフロー制御のような機能を含んでいるプロトコル処理においてシステムの中央プロセッサに大きく依存している。バスアダプタはシステムの中央プロセッサにほとんどまたは全く関与せずにＩ／Ｏトランザクション全体を管理する。前述の図４のＢで示し説明したホストバスアダプタの例では、ホストバスアダプタはデータフローを維持するためにプロセッサ、プロトコル制御装置ＡＳＩＣ、バッファメモリを含んでいる。このホストバスアダプタはブロックレベルのデータを並列のＩ／Ｏチャンネル（例えばＰＣＩ−Ｘ）から取り、それをルート可能なプロトコル（例えばファイバチャンネル）へマップする。
【００５０】
図５はデータ処理システムの１例500を示すブロック図である。データ処理システム500は中央プロセッサ510を含んでおり、この中央プロセッサ510はプログラムを実行し、データ操作を行い、システム500のタスクを制御する。中央プロセッサ510は多数のプロセッサまたは処理装置を含むことができ、単一のチップ（例えばマイクロプロセッサまたはマイクロ制御装置）、または１以上の印刷回路板および／または他のプロセッサ間通信リンク（即ち多数のプロセッサシステムを作る２以上のディスクリートなプロセッサ）を使用して多数のチップに収納されることができる。
【００５１】
中央プロセッサ510はシステム相互接続バス515と結合されている。システム相互接続バス515はシステム500の部分間をデータが送信される１以上の通路を提供する。システム相互接続バス515は多数の別々のバスを含むことができ、これは並列および／または直列バス、バスインターフェースおよび／またはバスブリッジであることができる。各バスはアドレスバスおよびデータバスを有することができる。システム相互接続バス515は内部コンポーネントを中央プロセッサ510およびメモリに接続するための内部バス、拡張ボードおよび／または周辺装置を中央プロセッサ510へ接続するための拡張バスを含むことができる。システム相互接続バス515はＰＣＩ−Ｘのようなインターリーブされた多数の同時的なトランザクションを使用してデータの転送を可能にする少なくとも１つのバスアーキテクチャを含んでおり、さらに任意の他の既知のバスアーキテクチャ（例えばＰＣＩ、産業標準アーキテクチャ（ＩＳＡ）、拡張されたＩＳＡ（ＥＩＳＡ）、加速されたグラフィックポート（ＡＧＰ）、ユニバーサルシリアルバス（ＵＳＢ）、ＳＣＳＩ、将来のバスアーキテクチャ）を含んでいてもよい。
【００５２】
データ処理システム500は、システム相互接続バス515と結合されているメモリ520を含んでいる。システム500はまた１以上のキャッシュメモリを含むことができる。これらのメモリ装置は検索および実行のため中央プロセッサ510の近くに命令およびデータを記憶することを可能にする。
【００５３】
メモリ520は不揮発性メモリおよび揮発性メモリを含むことができる。例えば不揮発性メモリはシステムファームウェアの記憶に使用されることができ、これはデータ処理システム500の初期化と、One Microsoft Way Redmond Washington 98052-6399に位置するマイクロソフト社により提供されるウィンドウズ（Ｒ）ＮＴ  ４．０エンタプライズエディションのようなオペレーティングシステム（ＯＳ）のロードを処理するために使用されることができる。記憶されたデータを維持するために定常状態の電流を必要とする揮発性メモリはシステム500が一度スタートアップすると命令およびデータを記憶するために使用されることができる。
【００５４】
データ処理システム500はシステム500またはシステム500のコンポーネントに動作を実行させるための命令のようなマシン命令を含んでいるマシンの読取可能な媒体である媒体535をアクセスするための記憶装置530を含むことができる。媒体535は取外し可能であり、システム500がブートアップするとき揮発性メモリにロードされるＯＳ命令およびデータを有するブート媒体を含むことができる。媒体535は読取専用または読取／書込み媒体であることができ、磁気ベース、光ベース、半導体ベースの媒体、またはこれらの組合わせである。記憶装置530と媒体535の例には取外し可能であるハードディスクドライブおよびハードディスクプラッタ、フロッピー（Ｒ）ディスクドライブおよびフロッピー（Ｒ）ディスク、テープドライブおよびテープ、光ディスクドライブおよび光ディスク（例えばレーザディスク、コンパクトディスク、デジタル汎用ディスク）が含まれている。
【００５５】
データ処理システム500はまた１以上の周辺装置540(1)-540(n)（集合的に装置540）と、インターフェース機能を行う１以上の制御装置および／またはアダプタを含むことができる。装置540は前述したような付加的な記憶装置および媒体、他の記憶インターフェースおよび記憶装置、アダプタ、入力装置および／または出力装置である。例えば、システム500はディスプレイ装置を有するディスプレイシステム（例えば、ビデオランダムアクセスメモリ（ＶＲＡＭ）、バッファ、グラフィックエンジンを含んでいるディスプレイを駆動するためのコンポーネントを有するビデオディスプレイアダプタ）を含むことができる。
【００５６】
システム500はまた通信インターフェース550を含んでおり、信号554の形態で、システム500と外部装置、ネットワークまたは情報ソース間でソフトウェアおよびデータが転送されることを可能にする。信号554はチャンネル552（例えばワイヤ、ケーブル、光ファイバ、電話線、赤外線（ＩＲ）チャンネル、無線周波数（ＲＦ）チャンネル等）で受信されることのできる任意の信号（例えば電子、電磁、光）である。信号554はシステム500またはシステム500のコンポーネントに動作を実行させる命令を具体化できる。
【００５７】
通信インターフェース550は通信ポート、電話機モデムまたは無線モデムである。通信インターフェース550はネットワークインターフェースカード（例えばイーサネット（Ｒ）ハブと接続されるイーサネット（Ｒ）カード）であり、特定のタイプのネットワーク、プロトコル、チャンネル媒体用に設計され、または多数のネットワーク、プロトコルおよび／またはチャンネル媒体の機能を行うように設計されることができる。
【００５８】
さらに、システム500は記憶ネットワークインターフェース560を含んでおり、信号564の形態で、ソフトウェアおよびデータがシステム500と記憶エリアネットワーク間で転送されることを可能にする。信号564はチャンネル562で送信され受信されることのできる信号554のような任意の信号である。信号564はシステム500または、記憶ネットワークインターフェース560のようなシステム500のコンポーネントに動作を実行させる命令を実施できる。記憶ネットワークインターフェース560は前述の図４のＢと共に示され説明されているようなホストバスアダプタであることができる。
【００５９】
全体として観察するとき、システム500はプログラム可能なマシンである。システム500により表される例示的なマシンはサーバ（例えばネットワークホスト）、パーソナルコンピュータ、メインフレーム、スーパーコンピュータを含んでいる。マシン500は埋設された制御装置、プログラム可能な論理装置（ＰＬＤ）（例えばＰＲＯＭ（プログラム可能な読取専用メモリ）、ＰＬＡ（プログラム可能な論理アレイ）、ＧＡＬ／ＰＡＬ（一般的なアレイ論理／プログラム可能なアレイ論理））、フィールドプログラム可能なゲートアレイ（ＦＰＧＡ）、ＡＳＩＣ、単一チップのコンピュータ、スマートカード等を含むことができる。
【００６０】
（プログラム、ソフトウェア、ソフトウェアアプリケーションまたはコードとしても知られている）マシン命令はマシン500、記憶ネットワークインターフェース560に記憶され、および／または通信インターフェースによってマシン500に転送される。これらの命令は実行されるとき、マシン500が前述の特徴および機能を実行することを可能にする。これらの命令はマシン500の制御装置を表し、高レベルの手順および／またはオブジェクト指向プログラミング言語および／またはアセンブリ／マシン言語で実行されることができる。このような言語はコンパイルおよび／または解釈された言語である。
【００６１】
ここで使用されるとき、用語“マシンの読取可能な媒体”は任意のコンピュータプログラムプロダクト、マシン命令および／またはデータをマシン500に提供するために使用される装置および／またはデバイスを指しており、マシンの読取可能な信号としてマシン命令を受信するマシンの読取可能な媒体を含んでいる。マシンの読取可能な媒体の例は媒体535等、メモリ520、および／またはＰＬＤ、ＦＰＧＡ、ＡＳＩＣ等を含んでいる。用語“マシンの読取可能な信号”はマシン命令および／またはデータをマシン500に提供することに使用される信号554のような任意の信号を指している。
【００６２】
図６は、１構成にしたがったＦＩＦＯメモリの動作環境を示すブロック図である。多数のサーバ600は記憶エリアネットワークと接続される。各サーバ600は先に示され説明された方法で構成されることができる。例えばサーバ600は４つの５５０ＭＨｚのPentium（R）III Xeon（商標名）プロセッサと１ＧＢ（ギガバイト）ＲＡＭを有するインテル（Ｒ）AC450NXシステムであるか、またはサーバ600は８つの５５０ＭＨｚのPentium（R）III Xeon（商標名）プロセッサと１ＧＢのＲＡＭを有するインテル（Ｒ）OCPRF100システムである。
【００６３】
記憶エリアネットワークは多数の記憶装置610と記憶ネットワーク620を含んでいる。記憶ネットワーク620はデータ記憶に専用の高速度ネットワークである。例えば記憶ネットワーク620はファイバチャンネル仲裁ループまたはファイバチャンネル交換ファブリックのようなファイバチャンネルネットワークである。各記憶装置610はＳＣＳＩ、ＰＣＩ−Ｘまたは他のバスアーキテクチャ、ＪＢＯＤ（単なるディスクの束）、ＲＡＩＤ（廉価なディスクの冗長アレイ）格納装置、また他の大容量記憶装置を使用する記憶アレイである。一般に、記憶装置610は前述したように少なくとも１つのマシンの読取可能な媒体を含んでおり、記憶エリアネットワークはサーバ600の共有された記憶装置610に対するブロックレベルのＩ／Ｏアクセスを提供する。
【００６４】
サーバ600はネットワーク630と接続され、これはイーサネット（Ｒ）ネットワーク、ＩＰ（インターネットプロトコル）ネットワーク、ＡＴＭ（非同期転送モード）ネットワークのような多数のマシンネットワークを含むことができる。ネットワーク630は私設ネットワーク、仮想私設ネットワーク、企業ネットワーク、公共ネットワークおよび／またはインターネットである。ネットワーク630は多数のクライアント640とサーバ600の間に通信ネットワークを提供する。
【００６５】
ここで説明したシステムおよび技術の種々の構成は、デジタル電子回路、集積回路、特別に設計されたＡＳＩＣ（用途特定集積回路）、コンピュータハードウェア、ファームウェア、ソフトウェア、および／またはその組合わせで実現されることができる。前述の種々の構成は例示として与えられているだけで、技術的範囲を限定するものではない。他のシステム、アーキテクチャ、示されている装置、マシン、システムの変更および／または再構成も可能である。
【００６６】
他の実施形態は特許請求の範囲内に含まれる。
【図面の簡単な説明】
【００６７】
【図１】多数のデータ転送の転送長リクエストを受信し、データ転送を許可するＦＩＦＯメモリを示すブロック図。
【図２】図１のＦＩＦＯメモリ中で使用されることができるメモリ回路構造を示すブロック図。
【図３Ａ】多数のデータ転送の転送長リクエストを受信し、データ転送を許可するＦＩＦＯメモリで行われる動作を示すフローチャートおよび状態図を組合わせた図。
【図３Ｂ】プログラム可能なバッファゾーンを有するＦＩＦＯメモリを構成するステップを示すフローチャート。
【図４】バスアダプタを示すブロック図および１構成にしたがったホストバスアダプタカードを示すブロック図。
【図５】１実施例のデータ処理システムを示すブロック図。
【図６】１構成にしたがったＦＩＦＯメモリの動作環境を示すブロック図。
【図１】
2005512227.tif 000003
【図２】
2005512227.tif 000004
【図３Ａ】
2005512227.tif 000005
【図３Ｂ】
2005512227.tif 000006
【図４】
2005512227.tif 000007
【図５】
2005512227.tif 000008
【図６】
2005512227.tif 000009
【国際調査報告】
2005512227.tif 000010