(57)【要約】ＤＭＡ（直接メモリアクセス）交換ブロック（ＤＸＢ）プロセッサは、例えば周辺コンポーネント相互接続拡張（ＰＣＩ−Ｘ）バスのようなバスによって、ローカルメモリからホストメモリへデータを書込むための受信プロセッサと、バスによってホストメモリから検索されるデータをローカルメモリへ書込むための送信プロセッサとを含んでいる。各プロセッサは高い優先順位の待ち行列と通常の優先順位の待ち行列を含んでいる。制御プログラムはＤＸＢを発生し、これらはそれぞれ制御プログラムにより割当てられるタグと、直接メモリアクセス動作に対応するメモリ記述子を含んでいる。メモリ記述子はホストメモリ記述子（アドレス／長さ）と１以上のローカルメモリ記述子とを含んでいる。制御プログラムはＤＸＢをキャッシュラインスピル動作の待ち行列の１つに書込む。転送プロセッサは２つのチャンネルレジスタを含み、プロセッサが２つのＰＣＩ／Ｘデータ転送を同時に行うことを可能にしている。
2005513594.tif 000002
【特許請求の範囲】
【請求項１】
単一の直接メモリアクセス動作のための記述子を発生し、前記記述子はメモリ記述子と前記直接メモリアクセス動作を識別するタグとを含んでおり、
前記記述子を待ち行列に書込み、
記述子の優先順位に基づいて待ち行列から前記記述子をフェッチし、
直接メモリアクセス動作を実行するステップを含んでいる方法。
【請求項２】
さらに、直接メモリアクセス動作の実行に応答して、直接メモリアクセス動作に対する状態方法と共にタグを記憶するステップを含んでいる請求項１記載の方法。
【請求項３】
状態情報は直接メモリアクセス動作が適切に完了したことを示す請求項２記載の方法。
【請求項４】
状態情報はエラー情報を含んでいる請求項２記載の方法。
【請求項５】
記述子はキャッシュラインに対応するサイズを有している請求項１記載の方法。
【請求項６】
前記記述子の書込みはキャッシュラインスピル動作を含んでいる請求項５記載の方法。
【請求項７】
待ち行列は複数の待ち行列の１つであり、前記優先順位は前記複数の待ち行列の他の待ち行列に関する前記待ち行列の優先順位を有している請求項１記載の方法。
【請求項８】
待ち行列は先入れ先出し（ＦＩＦＯ）バッファであり、前記優先順位はバッファ中の記述子の位置を含んでいる請求項１記載の方法。
【請求項９】
メモリ記述子はメモリのブロックのアドレスと長さ情報とを含んでいる請求項１記載の方法。
【請求項１０】
メモリ記述子は直接メモリアクセス動作でアクセスされるホストメモリ位置に対するホストメモリアドレスを含んでいる請求項１記載の方法。
【請求項１１】
メモリ記述子は直接メモリアクセス動作でアクセスされるローカルメモリ位置の対応する数の複数のローカルメモリアドレスを含んでいる請求項１記載の方法。
【請求項１２】
前記複数のローカルメモリ位置はローカルメモリの隣接しないメモリ位置である請求項１１記載の方法。
【請求項１３】
さらに、直接メモリアクセス動作でメモリに書込まれるデータと共にタグおよびアドレスおよび長さ情報をバッファに記憶するステップを含んでいる請求項９記載の方法。
【請求項１４】
直接メモリアクセス動作はＰＣＩ／Ｘ（周辺コンポーネントインターフェース拡張）バスで行われる請求項１記載の方法。
【請求項１５】
直接メモリアクセス動作はバスで行われ、さらに、
直接メモリアクセス動作でバスから受信されたリトルエンディアンフォーマットのデータをビッグエンディアンフォーマットに変換し、
そのデータをビッグエンディアンフォーマットでローカルメモリに記憶するステップを含んでいる請求項１記載の方法。
【請求項１６】
それぞれタグとメモリ記述子を含んでいる複数の記述子を記憶するように動作する第１の待ち行列を有し、ここで異なる記述子は異なる直接メモリアクセス動作を特定し、さらに、
前記複数の記述子のうちの１つを前記待ち行列から検索し、前記記述子に対応して直接メモリアクセス動作を実行するように動作するプロセッサと、
完了メモリと、
前記直接メモリアクセス動作のために前記記述子と状態情報に対するタグを完了メモリに書込むように動作する事後プロセッサとを具備しているプロセッサ。
【請求項１７】
プロセッサは受信プロセッサを具備し、それは、
前記記述子を第１の待ち行列から検索するように動作する事前プロセッサと、
バッファと、
タグおよびメモリ記述子をバッファへ書込むように動作する実行プロセッサと、
ローカルメモリからメモリ記述子により識別されるデータを検索し、前記データをバッファへ書込むように動作するローカルメモリアプリケーションユニットと、
メモリ記述子と前記データの受信に応答して、バスでホストメモリ書込み動作を特定するように動作するバスインターフェースとを含んでいる請求項１６記載の装置。
【請求項１８】
プロセッサは送信プロセッサを具備し、それは、
前記記述子を第１の待ち行列から検索するように動作する事前プロセッサと、
バッファと、
タグおよびメモリ記述子をバッファへ書込むように動作する実行プロセッサと、
バスから受信されたデータをバッファへ書込むように動作するバスインターフェースと、
バッファのデータをローカルメモリのメモリ記述子により識別された１以上のローカルメモリ位置へ書込むように動作するローカルメモリアプリケーションユニットとを含んでいる請求項１６記載の装置。
【請求項１９】
メモリ記述子は、ホストアドレス、ホスト長、複数のローカルメモリアドレス、および関連する複数のローカルメモリ長を含んでいる請求項１６記載の装置。
【請求項２０】
バスインターフェースはＰＣＩ／Ｘバスインターフェースを具備している請求項１６記載の装置。
【請求項２１】
さらに、第１のチャンネルレジスタと第２のチャンネルレジスタとを具備し、
メモリ記述子はＰＣＩ／Ｘ転送データを含み、
事前プロセッサはタグおよびＰＣＩ／Ｘ転送データを含む第１の記述子の部分を第１のチャンネルレジスタへ書込むように動作し、タグおよびＰＣＩ／Ｘ転送データを含む第２の記述子の部分を第１のチャンネルレジスタへ書込むように動作し、
バスインターフェースは第１のチャンネルレジスタのＰＣＩ／Ｘ転送データとおよびタグと、第２のチャンネルレジスタのＰＣＩ／Ｘ転送データとおよびタグとを交互にアクセスすることによって、２つのＰＣＩ／Ｘ転送動作を行うように動作する請求項２０記載の装置。
【請求項２２】
バッファは先入れ先出しバッファ（ＦＩＦＯ）である請求項１８記載の装置。
【請求項２３】
さらに、第２の複数の記述子を記憶するように動作する第２の待ち行列を具備している請求項１６記載の装置。
【請求項２４】
事前プロセッサは処理のために第２の待ち行列中の記述子を検索する前に、第１の待ち行列中の記述子を検索するように動作する請求項２３記載の装置。
【請求項２５】
各記述子はキャッシュラインのサイズに対応する長さを有する請求項１６記載の装置。
【請求項２６】
ホストメモリと、
キャッシュライン長を有するキャッシュラインを含んだキャッシュを含んでいるホストプロセッサと、
ローカルメモリと、
バスと、
バスとローカルメモリおよび待ち行列との間に接続されており、前記待ち行列の１つに書込まれるデータ送信記述子に応答してバスで直接メモリアクセス動作を行うように動作するデータ送信プロセッサとを具備し、前記データ送信ブロックはタグ、ホストメモリ記述子、およびローカルメモリ記述子を含み、キャッシュライン長に等しい長さを有し、
さらに、直接メモリアクセスのためのデータ転送記述子を発生し、キャッシュラインスピル動作において待ち行列に記述子を書込むように動作する制御装置と、
前記データ転送動作を行うデータ送信プロセッサに応答して、直接メモリアクセス動作のために前記タグと状態情報を完了メモリに書込むように動作する事後プロセッサとを具備しているシステム。
【請求項２７】
バスはＰＣＩ／Ｘバスを具備している請求項２６記載のシステム。
【請求項２８】
データ送信プロセッサは、
ローカルメモリからのデータをバスによってホストメモリに書込むように動作する受信プロセッサと、
バスからのデータをローカルメモリに書込むように動作する送信プロセッサとを具備している請求項２６記載のシステム。
【請求項２９】
データ転送記述子は複数のローカルメモリ記述子を含んでいる請求項２６記載のシステム。
【請求項３０】
データ送信プロセッサは第１の待ち行列と第２の待ち行列とを含み、データ転送プロセッサは第２の待ち行列中の第２のデータ転送記述子で動作する前に、第１の待ち行列中の第１のデータ転送記述子で動作するように動作される請求項２６記載のシステム。
【請求項３１】
マシン実効可能な命令を含んでいるマシン読取り可能な媒体を具備するアーティクルにおいて、命令はマシンに、
メモリ記述子と前記直接メモリアクセス動作を識別するタグとを含んでいる記述子を単一の直接メモリアクセス動作に対して発生させ、
前記記述子を待ち行列に書込み、
記述子の優先順位に基づいて待ち行列から前記記述子をフェッチし、
直接メモリアクセス動作を実行させるアーティクル。
【請求項３２】
さらに、直接メモリアクセス動作の実行に応答して、直接メモリアクセス動作のためにマシンに状態情報と共にタグを記憶させるように動作する命令を含んでいる請求項３１記載のアーティクル。
【請求項３３】
状態情報は直接メモリアクセス動作が適切に完了したことを示す請求項３２記載のアーティクル。
【請求項３４】
状態情報はエラー情報を含んでいる請求項３２記載のアーティクル。
【請求項３５】
記述子はキャッシュラインに対応するサイズを有している請求項３１記載の方法。
【請求項３６】
マシンに記述子を書込ませるように動作する命令は、マシンにキャッシュラインスピル動作を実行させるように動作させる命令を含んでいる請求項３５記載の方法。
【請求項３７】
待ち行列は複数の待ち行列の１つであり、前記優先順位は前記複数の待ち行列の他の待ち行列に関する前記待ち行列の優先順位を含んでいる請求項１１記載のアーティクル。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、直接メモリアクセス（ＤＭＡ）転送バッファプロセッサに関する。
【背景技術】
【０００２】
本出願は、2001年12月10日出願の米国特許暫定出願第60/339,187号明細書の優先権を主張している。
【０００３】
直接メモリアクセス（ＤＭＡ）はＣＰＵ（中央処理装置）の補助なくシステムメモリと装置間でデータを転送する技術である。その代わりに、典型的にＤＭＡ制御装置と呼ばれる特定化されたプロセッサがこれらの転送を管理する。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ＤＭＡ動作はアクセスされるデータブロックのサイズおよび、転送当りバスで送信されるデータ量に基づいて、バスでの多数の転送を必要とする。ＤＭＡ動作をセットアップするために、ＤＭＡ制御装置はデータ転送に使用される物理的なアドレスを獲得し、それらを装置のレジスタへマップする。ＤＭＡ動作が実行された後、ＤＭＡ制御装置は個々の転送を事後処理する。これらの事前処理および事後処理は、ＤＭＡ動作に待ち時間を導入し、全てのデータ転送の動作の効率を著しく減少させる。
【課題を解決するための手段】
【０００５】
ＤＭＡ（直接メモリアクセス）交換ブロック（ＤＸＢ）プロセッサは、例えば周辺コンポーネント相互接続拡張（ＰＣＩ−Ｘ）バスのようなバスによって、ローカルメモリからホストメモリへデータを書込むための受信プロセッサと、バスによってホストメモリから検索されるデータをローカルメモリへ書込むための送信プロセッサとを含んでいる。各プロセッサは高い優先順位の待ち行列と通常の優先順位の待ち行列を含んでいる。制御プログラムはＤＸＢを発生し、これらはそれぞれ制御プログラムにより割当てられるタグと、直接メモリアクセス動作に対応するメモリ記述子を含んでいる。このメモリ記述子はホストメモリ記述子（アドレス／長さ）および１以上のローカルメモリ記述子を含んでいる。制御プログラムはＤＸＢをキャッシュラインスピル動作の待ち行列の１つに書込む。転送プロセッサは２つのチャンネルレジスタを含み、プロセッサが２つのＰＣＩ／Ｘデータ転送を同時に行うことを可能にしている。
【発明を実施するための最良の形態】
【０００６】
図１は、バス115で通信するホスト105と装置110を含むシステム100を示している。バスは例えばＰＣＩ（周辺コンポーネント相互接続）またはＰＣＩ／Ｘ（ＰＣＩ拡張）バスインターフェースを使用する。装置はシステム、またはホスト、メモリ120、装置のローカルメモリ125間のＤＭＡ動作を制御するためのＤＭＡ（直接メモリアクセス）交換ブロック（ＤＸＢ）プロセッサ500および700を含んでいる。受信ＤＸＢプロセッサ500はローカルメモリ125からデータを読取り、バス115によってそのデータをホストメモリ120へ転送するために使用される。送信ＤＸＢプロセッサ700はホストメモリ120からローカルメモリ125へデータを書込むために使用される。
【０００７】
ＤＸＢプロセッサは単一のＤＭＡ動作を説明するためＤＸＢを使用する。制御プログラム130は転送のための適切なアドレスおよび長さを決定し、データを受信（ホストメモリ書込み）またはデータを送信（ホストメモリ読取り）のいずれかのための転送動作を規定するために単一のＤＸＢイメージを生成する。制御プログラム130は各ＤＸＢのセットアップ、実行、完了を管理する。制御プログラムは制御プロセッサ135により実行されるファームウェアである。
【０００８】
制御プログラム130は１、２、または３の論理メモリアドレスを１つのホストメモリアドレスにマップし、それによってＤＭＡ動作でバスを横切って転送されるデータ量を増加させる。３つのローカルメモリアドレスはローカルメモリ範囲を横切って分散される。ＤＸＢは例えば４Ｋバイトの最大のＤＭＡ転送サイズを記述している。
【０００９】
ＤＸＢはＣＰＵ（中央処理装置）中の内部キャッシュ137のキャッシュラインのサイズに対応する固定したサイズ、例えば例示的なＣＰＵ135で３２バイトを有する。これは制御プログラム130が装置中の独立したレジスタを設定する代わりに、キャッシュからキャッシュラインスピル動作を使用してＤＭＡ動作をセットアップすることを可能にする。
【００１０】
ＤＸＢは特有のＤＸＢタグと多数の制御フラグを含んでいる。制御プログラム130はＤＸＢタグを特定し、これは事前処理、実行、事後処理中にＤＭＡ動作を識別するのに使用されることができる。制御プログラム130は優先順位に基づいて動作される多数のＤＭＡ動作をサポートするためにこれらのタグを使用する。
【００１１】
各受信ＤＸＢプロセッサ500と送信ＤＸＢプロセッサ700は、高い優先順位（ＨＰ）ＤＸＢ待ち行列505、705と通常の優先順位（ＮＰ）ＤＸＢ待ち行列510、710を含んでいる。待ち行列は円形の待ち行列でよい。高い優先順位のＤＸＢ待ち行列505は制御プログラム130がＮＰ  ＤＸＢ待ち行列の前に臨界的なＤＭＡ動作を位置させることを可能にする。ＤＸＢプロセッサはＮＰ  ＤＸＢ待ち行列でＤＸＢを処理する前に、ＨＰ  ＤＸＢ待ち行列における全てのＤＸＢを実行する。ＤＸＢはキャッシュラインスピル動作で待ち行列のうちの一つに書込まれ、そのＤＸＢタグにより待ち行列中で識別される。
【００１２】
ＤＸＢプロセッサは図２に示されているように、プットポインタ205とゲットポインタ210を使用してそれらのＨＰおよびＮＰ  ＤＸＢ待ち行列を管理する。プットポインタ205は制御プログラム130を、ＤＸＢがロードされる次の利用可能な待ち行列リング位置へ誘導する。プットポインタ205は制御プログラム130により書込まれ読取られることができ、装置110により読取られることができる。ゲットポインタ210は実行されている現在のＤＸＢまたは実行されるべき次のＤＸＢの位置を示す。ゲットポインタは装置110により書込まれ読取られ、制御プログラム130により読取られることができる。プットおよびゲットポインタはポストインクリメントされる。制御プログラム130は制御プログラムがゲットポインタ値をオーバーランしないような任意の値によりプットポインタをインクリメントする。装置は１だけゲットポインタをインクリメントする。プットおよびゲットポインタは単一のレジスタ中に存在してもよい。
【００１３】
待ち行列が一杯である場合、プットポインタはゲットポインタマイナス１に等しい。この状態は１つの利用可能な待ち行列のエントリが存在することを示しているが、この位置は装置がゲットポインタ210をインクリメントするまで、制御プログラム130により使用されることができない。待ち行列が空である場合には、プットポインタ205はゲットポインタ210に等しい。装置がリセットされた後には、プットおよびゲットポインタはゼロに等しい。
【００１４】
システムは２つのＤＸＢプロセッサ、即ち受信動作のための受信ＤＸＢプロセッサと、送信動作のための送信ＤＸＢプロセッサとを含んでもよい。ＤＸＢプロセッサ500、700は、図３に示されているように、ＤＭＡ動作が完了するときに、即ち目的地バッファが全てのデータを受信したときに制御プログラム130に通知し、エラーに遭遇したか否かを示すため、完了ＲＡＭ（ランダムアクセスメモリ）300への書込みポートを備えている。完了ＲＡＭに記憶されたＤＸＢは制御プログラム130がＤＭＡ動作が何故完了しなかったかを決定するために使用されるエラーインジケータを含んでいる。エラー完了は任意の時間に記入されることができる。ＤＸＢプロセッサは動作全体が適切に完了したときのみ通常の完了を記入する。制御プログラム130はＨＰとＮＰ  ＤＸＢ待ち行列505、510と、完了ＲＡＭ300を通ってＤＸＢプロセッサにのみアクセスする。
【００１５】
制御プログラム130はＤＸＢに制御フラグを設定することにより、中断が各完了通知で発生されるか否かを選択する能力を有する。これは不必要な中断処理を除去する。しかしながら、ＤＭＡエラーが中断がディスエーブルされているＤＸＢ動作で生じるならば、ＤＸＢプロセッサはＩ／Ｏタグ識別と遭遇したエラーのタイプを示す完了ＲＡＭ300へ完了を通知する。例えばＤＭＡ動作全体が制御プログラム130によりセットアップされる４つのＤＸＢを必要とするならば、制御プログラム130は第１の３つのＤＸＢで中断をディスエーブルすることができ、最後のＤＸＢの中断だけをエネーブルする。このシナリオでは、制御プログラム130はエラーが生じないならば、ＤＭＡ動作全体の完了で１つの中断を処理しさえすればよい。
【００１６】
図４は図５で示されている受信ＤＸＢプロセッサ500により実行されるＤＭＡ動作400を説明しているフローチャートである。ＤＭＡ動作を開始するため、制御プログラム130はＤＸＢがＨＰ  ＤＸＢ待ち行列またはＮＰ  ＤＸＢ待ち行列に書込まれるべきであるか否かを決定しなければならない（ブロック405）。次に、制御プログラム130は利用可能なスロットが存在するか否かを決定するために待ち行列のゲットおよびプットポインタを読取る（ブロック410）。制御プログラム130が利用可能なスペースが存在することを決定したならば、制御プログラム130は例えばキャッシュライン書込み動作の使用によってＤＸＢを待ち行列中に記入する（ブロック415）。制御プログラム130は待ち行列に書込まれた有効なＤＸＢの数を示すためにプットポインタをインクリメントする（ブロック420）。
【００１７】
インクリメントされたプットポインタは待ち行列が空でないことをＤＸＢ事前プロセッサ515へ示す。ＤＸＢ事前プロセッサ515は最初にＨＰ  ＤＸＢ待ち行列をチェックし、それが制御プログラム130が使用した待ち行列であるならば、ＤＸＢはその待ち行列から読取られる（ブロック430）。そうではないならば、ＮＰ  ＤＸＢ待ち行列がＤＸＢに対してチェックされる。ＤＸＢ事前プロセッサは適切な待ち行列からＤＸＢをフェッチし、そのＤＸＢを次のＤＸＢレジスタ520へロードするために３２バイトメモリの読取り動作を開始する（ブロック440）。この例では、ＤＸＢタグ＃５を割当てられたＤＸＢと、ＤＸＢタグ＃９を割当てられたＤＸＢはＨＰ  ＤＸＢ待ち行列へ書込まれ、ＤＸＢ事前プロセッサによりフェッチされる。制御プログラム130はまた直接的に次のＤＸＢレジスタを読取り書込むことにより待ち行列を使用せずにＤＸＢプロセッサを制御する。これはエラー回復動作のような非常に高い優先順位の事象に対して望ましい。これらのレジスタはキャッシュ可能／バッファ可能なアドレススペースに存在し、それ故バースト書込みが実行されることができる。
【００１８】
ＤＸＢ実行プロセッサ525はＤＸＢタグとホストアドレスおよび長さとをＰＣＩ受信ＦＩＦＯ（ＰＲＦ）530へロードする（ブロック445）。ＤＸＢ実行プロセッサはＤＸＢタグとホストアドレスおよび長さとをＰＲＦ530へ書込むために動作レジスタ527を使用することができる。動作レジスタはＤＭＡ動作の最も最近の情報を含んでいる。エラーの場合には、制御プログラム130はデバッグ動作のためにこの情報を検索する。
【００１９】
ＤＸＢ実行プロセッサ525はデータを読取り、そのデータをＰＲＦ530へ書込む動作を開始するためにローカルメモリアドレス／長さフィールド（ローカルメモリ記述子とも呼ばれる）を使用する（ブロック450）。データが入来するとき、これはＬＭＡＵ（ローカルメモリアプリケーションユニット）540によりＰＲＦに書込まれる。前述したように、ＤＸＢは３つのローカルメモリ記述子を含んでいてもよく、その場合、そのＤＸＢのデータは３つの異なるローカルメモリ位置からコンパイルされる。
【００２０】
状態情報と共にＤＸＢタグ＃は、ホストメモリ書込み動作が完了するかまたは決定的なエラーで終了するときに完了ＲＡＭ300を通して制御プログラム130に戻される。
【００２１】
ＰＲＦ530は実際のデータからＰＣＩアドレス、長さ、ＤＸＢタグ情報の境界を定めるために内部の区切りビットを使用する。ＰＲＦはデータのサイジング論理を助けるためにＰＲＦに記憶された複数のＤＸＢタグを捕捉することができる。
【００２２】
ＰＣＩ／ＰＣＩ−Ｘ論理モジュール550はホストメモリ書込み動作を特定するためにＰＣＩアドレスおよび長さ情報を使用する（ブロック455）。ＰＲＦ530は現在の動作に対してＰＲＦに存在するデータ量を示すためにフィルカウントを通過する。タグカウントがゼロに等しいならば、ＰＲＦはフィルカウントを決定するために読取りおよび書込みポインタを使用する。タグカウントがゼロに等しくないならば、ＰＲＦ530はデータの末尾がどこにあるかを予測するために調節されたＰＣＩの長さフィールドを有する読取りポインタを使用する。動作が完了されるとき、ＰＣＩ／ＸモジュールはＤＸＢタグ＃をＤＸＢプロセッサに戻す。ＤＸＢ事後プロセッサはＰＣＩ状態と共にＤＸＢタグ情報を完了ＲＡＭに書込む（ブロック460）。
【００２３】
ＰＲＦ530は２つのインジケータを使用して利用可能なデータが存在するときＰＣＩ／ＰＣＩ−Ｘ論理モジュール550に通知する。ワードカウントフィールドはホストメモリ120へ書込まれる準備がされているＰＲＦ530の６４ビットデータワードの総数を表している。ＰＣＩアドレス、長さ、ＤＸＢタグはデータバイトとしてカウントされない。第２のインジケータはタグカウントである。このカウントは現在ＰＲＦ530にある完全なＰＣＩデータパケット数（即ちＤＸＢプロセッサがＰＲＦに書込んだＤＸＢタグ数）を表している。
【００２４】
以下の疑似コードはワードカウントおよびタグカウントフィールドを使用するための例示的なルールを記載している。  
タグ＝０であり、バンクカウント＜開始しきい値であるならば、ＰＣＩ  ＤＭＡ動作は開始しない。  
タグカウント＝０であり、ワードカウント＜開始しきい値であるならば、ＰＣＩ  ＤＭＡ動作を開始しない。  
タグカウント＞０であるならば、ＰＣＩ  ＤＭＡ動作を開始する。  
タグカウント＝０であり、ワードカウント＞開始しきい値であるならば、ＰＣＩ  ＤＭＡ動作を開始し、タグカウント＝０であり、ワードカウント＜停止しきい値であるならば、ＰＣＩ  ＤＭＡ動作を停止し、また、タグカウント＝１であるならば、ＰＣＩ  ＤＭＡ動作を継続する。
【００２５】
ＰＣＩ／ＰＣＩ−Ｘ論理モジュール550は最後のＡＤＢ（許容可能な遮断境界）シーケンスを断定するときの決定を行うためＰＣＩアドレスを有するワードカウントを使用する。
【００２６】
ワードカウントはデータのオーバーランとアンダーランのシナリオを阻止するためにＰＣIクロックドメイン560に位置されることができる。ＦＩＦＯ読取りポインタがＰＣＩクロックドメイン560で動作するので、書込みポインタはＰＣＩクロックドメインに同期されなければならない。このクロッキング方法により、同期遅延のために複数の６４ビットワードは常に実際の書込みポインタを遅延する。フルＦＩＦＯの場合に対しては、読取りポインタはシステムクロックドメインに同期されなければならないので、空のバンクのインジケータは常に実際の読取りポインタを遅延させる。
【００２７】
図６は、図７で示されている送信ＤＸＢプロセッサ700により実行されるＤＭＡ動作600を記述するフローチャートである。ＰＣＩ／Ｘは３２までの未処理の送信動作を同時にサポートできる。このスプリット動作をサポートするため、送信ＤＸＢプロセッサは２つのチャンネル、即ちチャンネルＡとチャンネルＢとで同時に２つのＤＭＡ動作で動作することができる。
【００２８】
ＤＭＡ動作を設定するために、制御プログラム130は所望の待ち行列に対するプット／ゲットポインタを読取る（ブロック605）。利用可能なスペースが存在するならば、ＤＸＢ事前プロセッサ715はＮＰ  ＤＸＢ待ち行列またはＨＰ  ＤＸＢ待ち行列のいずれかで３２バイト書込み動作を行う（ブロック610）。動作を完了するため、制御プログラム130は書込まれた有効なＤＸＢの数を示すためにプットポインタをインクリメントしなければならない（ブロック615）。
【００２９】
制御プログラム130がプットポインタを更新後、ＤＸＢ事前プロセッサの状態マシンはそのプット＞ゲットを決定し、その待ち行列の次のＤＸＢをフェッチする（ブロック620）。以下の条件は次のＤＸＢがフェッチされる前に満たされる必要がある。即ちその条件は有効な信号が断言されず、この断言のないことは次のＤＸＢレジスタ720が利用可能であることを示し、ローカルメモリ記述子（ＬＭＤ）ＦＩＦＯ722はフルではなく、ＤＸＢ実行プロセッサはそのエラー状態にはなく、チャンネル制御レジスタの休止ビットは設定されない状態であることである。
【００３０】
ＤＸＢ事前プロセッサ715が３２バイトのＤＸＢを読んでいる一方で、制御データは２つの目的地、即ちＰＣＩ動作を制御する目的地と、ＤＭＡ動作を制御する目的地に分割される。ホストアドレス、長さ、タグは次のＤＸＢレジスタへ書込まれ、それはＰＣＩ／Ｘチャンネルレジスタ702、704に結果として書込まれる（ブロック625）。残りのＤＸＢ制御データワードは最初に次のＤＸＢレジスタ720へ書込まれ、再度組織され、ローカルメモリ記述子（ＬＭＤ）ＦＩＦＯ722に書込まれる（ブロック630）。
【００３１】
ＤＸＢ読み取りが完了するとき、ＤＸＢ実行プロセッサ725はゲットポインタをインクリメントし、ＰＣＩ／Ｘチャンネルレジスタに通過される有効信号を発生する（ブロック630）。有効信号がＰＣＩクロックドメイン760に同期された後、チャンネルが空でありスプリットが許容されるならば、ホストアドレス、長さ、タグはチャンネルＡまたはＢレジスタに書込まれる（ブロック635）。
【００３２】
ＤＸＢ事前プロセッサ715はチャンネルＡおよびＢ制御レジスタの両者が満たされるまで、この動作を継続する（ブロック640）。その後、ＤＸＢ事前プロセッサ715は第３のＤＸＢを次のＤＸＢレジスタ720とＬＭＤ  ＦＩＦＯ722へロードする。
【００３３】
ＤＸＢ実行プロセッサ725はＬＭＤ  ＦＩＦＯ読取り動作を制御し、動作レジスタ765がローカルメモリ記述子の別のセットに対して準備されるときを監視する。これらの記述子は＃０、＃１、＃２ワードに対するＤＸＢタグとローカルメモリアドレス／バイト長を含んでいてもよい。ＤＸＢはそれが含んでいる余分のローカルメモリアドレスの数、即ちワード＃１と＃２を示す制御フラグを含んでいる。ＤＸＢ動作レジスタ765はＤＸＢタグを含んでいる２つのレジスタセットと、ローカルメモリアドレス＃０−＃２を含んでいる。
【００３４】
ＰＣＩ送信ＦＩＦＯ（ＰＦＴ）730が少なくとも３２バイトのデータを累積し、またはＤＸＢタグがＰＴＦ中に書込まれるとき（ブロック645）、ＰＴＦはタグレディ信号と共にタグをＤＸＢ実行プロセッサ725へ転送する。ＤＸＢ実行プロセッサはＰＴＦ供給タグを読取り、２つの動作レジスタセット765に記憶されているタグと比較する（ブロック650）。一致が発見されるとき、ローカルメモリアドレスと所望のバイト長はｌｍａｕ＿開始信号を使用してＤＸＢ実行プロセッサにロードされる（ブロック655）。ローカルメモリアクセスストローブを受信するとき、ＤＸＢ実行プロセッサはデータＦＩＦＯからデータを読取り、ローカルメモリアドレスを使用して、そのデータを図８に示されているサイジングＦＩＦＯ800とへ書込み、それによってデータおよびバイトカウントをバイトオフセットし、所望の数のバイトを書込む（ブロック660）。データシフト論理が使用されて、サイジングＦＩＦＯ800で適切にデータを整列するため４つの幅６４ビットワードであるシフトレジスタ805が使用される。ポインタはこのレジスタのどのバイトがサイジングＦＩＦＯに書込まれる次の４つのバイトであるかを規定する。データがＰＴＦ  ＦＩＦＯ730から読取られるとき、このデータはシフトインされ、最も古い６４ビットワードがシフトアウトされる。ポインタはＰＦＴ  ＦＩＦＯ730が読取るか、サイジングＦＩＦＯ800が書込むか、またはその両者か、または他の状態かが任意の所定のクロックサイクルで生じているかにしたがって調節されることができる。３２バイトのデータがサイジングＦＩＦＯ800中に書込まれるとき、（またはスプリット応答またはその他の理由のためにＦＩＦＯバイトカウントが最初に特定されたバイトカウントよりも少ないならば、さらに少ない）ＤＸＢ実行プロセッサ725はＬＭＡＵ制御状態マシン775へｒｄ＿ｄａｔａ＿ｐｋｔ＿ｒｄｙ信号を断言する（ブロック665）。
【００３５】
データがサイジングＦＩＦＯに書込まれた後、（通常は３２バイトの）しきい値を横切って、ＤＸＢ実行プロセッサはこの事象をＬＭＡＵ状態マシン775に通知し、その結果、ＬＭＡＵ740に対して適切な書込みリクエストを行う。この事象をトリガーする他の状態は、ＤＸＢ実行プロセッサ725がデータの代わりにタグ区切りを検出し、最後のワード区切りが検出され、または初期バイトカウントがゼロになる状態を含んでいる。
【００３６】
非常に多くのデータをローカルメモリ125へ書込むことに対する保護は、ＤＸＢ実行プロセッサ中へ組込まれる。ＬＭＡＵ740に対するＤＸＢ実行プロセッサの初期リクエストが（ＰＣＩ―Ｘバス状態のために）実際に所定のローカルメモリリクエストで書込まれるよりも大きいバイトカウントを表したときのような場合である。これはバイトカウントをサイジングＦＩＦＯ800に残されたバイトの正確な数を表しているＩＭＡＵ740へ与える第２のローカルメモリリクエストを行うことにより実行される。
【００３７】
ＬＭＡＵ制御状態マシン775は状態マシンがｌｍａｕ＿開始信号を受信するときにオリジナルローカルメモリアドレスとバイトカウントをローカルＬＭＡＵ740に転送する（ブロック670）。ＬＭＡＵ制御状態マシンはＤＸＢ実行プロセッサ725がデータパスを管理するあいだ、ＬＭＡＵへの制御信号を管理する（ブロック675）。
【００３８】
ＤＸＢ実行プロセッサがＰＴＦデータを読取るとき、現在のローカルメモリバッファとバイトカウントは先の読取り動作を示すように調節され、状態マシンは次のデータの処理の準備がされる。ＰＴＦデータワードがタグではないならば、ＤＸＢ実行プロセッサはＰＴＦデータワードが現在のタグのローカルメモリ記述子を使用して書込まれると仮定する。ＰＦＴデータワードがタグであるならば、ＤＸＢ実行プロセッサはタグを読取り、それを管理する方法を決定する。
【００３９】
各ＤＸＢが完了するとき、即ち全てのデータがローカルメモリ125へ転送されたとき、送信ＤＸＢプロセッサ700はＰＣＩ転送状態と共にＤＸＢタグ情報を完了ＲＡＭ中へ書込む（ブロック680）。
【００４０】
ＤＸＢ事前プロセッサ715はまたＰＣＩ―Ｘタグも発生する。ＰＣＩ―Ｘタグは５ビットのフィールドを有する２つの部分からなる。それが発生する態様についてのこの記述は制御プログラム130が直接的にＤＸＢレジスタをプログラムしない場合にのみ有効である。その場合、ＰＣＩ―Ｘタグはチャンネル制御レジスタから直接採取される。両チャンネルでは、上位の２つのビット（４：３）はＤＸＢ  Ｔｘ制御レジスタ（ＤＴＣＴＬ）のＰＴＢフィールドから取られる。チャンネルＡでは、ビット２は０に固定され、ハードウェアはＰＣＩ―Ｘタグが使用される毎に、カウンタを１だけインクリメントすることにより下位のビット（１乃至０）を発生する。
【００４１】
ＤＸＢプロセッサは異なるデータフォーマットを考慮するためにデータモードで動作する。データモードはＤＸＢ中の制御フラグによりトリガーされる。データモードはＰＣＩバスとローカルメモリとの間でバイトレーンスワップを行う。ＰＣＩバスはリトルエンディアンでのみ動作し、ビッグエンディアンのホストの場合には、ビッグエンディアンホストメモリとＰＣＩバスとの間にバイトレーンスワップが存在する。これはＰＣＩバス115とローカルメモリ125との間に２次スワップが存在しなければならないことを意味している。リトルエンディアンホストでは、ビッグエンディアンローカルメモリとリトルエンディアンＰＣＩバスとの間にバイトレーンスワップもまた存在しなければならない。
【００４２】
図９で示されているように、リトルエンディアン制御モードはＰＣＩバス900とローカルメモリ905との間でバイトレーンスワップは行われない。また６４ビットワードホストメモリワードで動作するとき、ローカルメモリはローカルメモリワード０としてホストメモリビット３１：０を解釈する。このモードの目的はローカルメモリ905とリトルエンディアンホスト910との間で制御情報を転送することである。
【００４３】
図１０に示されているように、ビッグエンディアン制御モードはＰＣＩバス1000とローカルメモリ1005との間でバイトレーンスワップを実行する。ＰＣＩバスはリトルエンディアンでのみ動作し、ビッグエンディアンホストメモリ1000とＰＣＩバス115との間にバイトレーンスワップが存在する。このことはＰＣＩバス1000とローカルメモリ1005との間に２次スワップが存在しなければならないことを意味している。また６４ビットホストメモリワードで動作するとき、ローカルメモリはローカルメモリワード０としてホストメモリビット３１：０を解釈する。このモードの目的はローカルメモリとビッグエンディアンホスト1010との間で制御情報を転送することである。
【００４４】
ＤＸＢプロセッサの使用によりＤＭＡ動作を規定するために必要なＣＰＵサイクルは少なくなり、ＤＭＡ動作を行うためにハードウェアをプログラムするためのＣＰＵ  Ｉ／Ｏ動作は少なくなり、個々のＤＭＡ動作の完了を事後処理するためのＣＰＵサイクルは少数になる。ＤＸＢプロセッサはまたホスト転送サイズがフレームビット長に一致する伝統的なシナリオではなく、より大きい転送が行われることを可能にすることによってより効率的なＰＣＩバスの使用を実現する。
【００４５】
多数の実施形態を説明した。それにもかかわらず、種々の変形が本発明の技術的範囲を逸脱せずに行われることが理解されるであろう。例えばＤＸＢのサイズおよびアドレスにしたがって、３よりも多数のローカルメモリアドレスがホストアドレスにマップされてもよい。また、送信ＤＸＰプロセッサは２よりも多い送信ＤＭＡチャンネルを含んでいてもよい。フローチャート中のブロックはスキップされてもよく、順序を違えて行われてもよく、所望の結果をもたらす。したがって、その他の実施形態も特許請求の範囲に記載された技術的範囲に含まれる。
【図面の簡単な説明】
【００４６】
【図１】１実施形態にしたがったシステムのブロック図。
【図２】データ転送ブロック（ＤＸＢ）待ち行列のブロック図。
【図３】ＤＸＢ完了ＲＡＭ（ランダムアクセスメモリ）のブロック図。
【図４Ａ】受信ＤＸＢプロセッサにより実行されるＤＭＡ動作を記述しているフローチャート。
【図４Ｂ】受信ＤＸＢプロセッサにより実行されるＤＭＡ動作を記述しているフローチャート。
【図５】受信ＤＸＢプロセッサのブロック図。
【図６Ａ】送信ＤＸＢプロセッサにより実行されるＤＭＡ動作を記述しているフローチャート。
【図６Ｂ】送信ＤＸＢプロセッサにより実行されるＤＭＡ動作を記述しているフローチャート。
【図６Ｃ】送信ＤＸＢプロセッサにより実行されるＤＭＡ動作を記述しているフローチャート。
【図７】送信ＤＸＢプロセッサのブロック図。
【図８】送信ＤＸＢプロセッサのサイジングＦＩＦＯのブロック図。
【図９】リトルエンディアンデータモード動作のフローを示すブロック図。
【図１０】ビッグエンディアンデータモード動作のフローを示すブロック図。
【図１】
2005513594.tif 000003
【図２】
2005513594.tif 000004
【図３】
2005513594.tif 000005
【図４Ａ】
2005513594.tif 000006
【図４Ｂ】
2005513594.tif 000007
【図５】
2005513594.tif 000008
【図６Ａ】
2005513594.tif 000009
【図６Ｂ】
2005513594.tif 000010
【図６Ｃ】
2005513594.tif 000011
【図７】
2005513594.tif 000012
【図８】
2005513594.tif 000013
【図９】
2005513594.tif 000014
【図１０】
2005513594.tif 000015
【国際調査報告】
2005513594.tif 000016
2005513594.tif 000017
2005513594.tif 000018