(57)【要約】  一実施形態において、装置は、第１のインターフェース回路と、第１のインターフェース回路に結合されたダイレクト・メモリ・アクセス（ＤＭＡ）コントローラと、ＤＭＡコントローラに結合されたホストとを備えている。第１のインターフェース回路はプロトコルに従ってインターフェース上で通信するように構成されている。ホストは、ホストのメモリ・システム内の複数の記憶領域に、少なくとも部分的にマッピングされた少なくとも１つのアドレス空間を備えている。ＤＭＡコントローラは、第１のインターフェース回路と、アドレス空間との間でＤＭＡ転送を実行するように構成され、ＤＭＡコントローラはさらに、複数の記憶領域のうちの第１の複数の記憶領域と、複数の記憶領域のうちの第２の複数の記憶領域との間でＤＭＡ転送を実行するように構成されている。
2009510630.tif 000002
【特許請求の範囲】
【請求項１】
プロトコルに従ってインターフェースで通信するように構成された第１のインターフェース回路と、
前記第１のインターフェース回路に結合されたダイレクト・メモリ・アクセス（ＤＭＡ）コントローラと、
ホストのメモリ・システム内の複数の記憶領域に少なくとも一部がマッピングされる少なくとも１つのアドレス空間を含む、前記ＤＭＡコントローラに結合された前記ホストと、を備えた装置であって、
前記ＤＭＡコントローラが、前記第１のインターフェース回路と前記アドレス空間との間でＤＭＡ転送を行うように構成され、前記ＤＭＡコントローラがさらに、前記複数の記憶領域のうちの第１の複数の記憶領域と、前記複数の記憶領域のうちの第２の複数の記憶領域との間でＤＭＡ転送を行うように構成された装置。
【請求項２】
前記ＤＭＡコントローラが、送信制御回路と、受信制御回路と、前記送信制御回路及び前記受信制御回路に結合されたループバック回路とを備え、前記送信制御回路が、前記第１の複数の記憶領域からデータを読み出し、前記データを前記ループバック回路に供給するように構成され、前記ループバック回路が前記データを前記受信制御回路に供給するように構成され、前記ループバック回路が前記データを前記受信制御回路に供給するように構成され、前記受信制御回路が、前記データを前記第２の複数の記憶領域に書き込むように構成された請求項１に記載の装置。
【請求項３】
前記受信制御回路がさらに、前記第１のインターフェース回路から前記アドレス空間にデータを書き込むように構成され、前記ＤＭＡコントローラが、データを前記受信制御回路に供給するため、前記ループバック回路と前記第１のインターフェース回路との間を調停するように構成されたアービタを備えた請求項２に記載の装置。
【請求項４】
前記第１のインターフェース回路がメディア・アクセス・コントローラ（ＭＡＣ）を備えた請求項１から３のいずれかに記載の装置。
【請求項５】
前記第１のインターフェース回路を含む複数のインターフェース回路をさらに備え、前記複数のインターフェース回路が前記ＤＭＡコントローラに結合された請求項４に記載の装置。
【請求項６】
前記第１のインターフェース回路が周辺インターフェース・コントロール回路を備えた請求項１から３のいずれかに記載の装置。
【請求項７】
前記第１のインターフェース回路を含む複数のインターフェース回路をさらに備え、前記複数のインターフェース回路が前記ＤＭＡコントローラに結合された請求項６に記載の装置。
【請求項８】
前記複数のインターフェース回路のうちの第２のインターフェース回路がメディア・アクセス・コントローラ（ＭＡＣ）を備えた請求項６又は７に記載の装置。
【請求項９】
前記ダイレクト・メモリ・アクセス（ＤＭＡ）コントローラが、前記アドレス空間からターゲットにＤＭＡ転送を行うように構成され、前記ターゲットは、前記ＤＭＡ転送が割り当てられるチャネルに応じて前記インターフェース回路又は前記ホストのいずれかであり、前記ＤＭＡコントローラが、前記ＤＭＡ転送のために前記アドレス空間から読み出された第１のＤＭＡデータに対して少なくとも第１のオペレーションを実行し、前記第１のオペレーションが結果を生成するように構成された請求項１から８のいずれかに記載の装置。
【請求項１０】
前記第１のオペレーションが、前記第１のＤＭＡデータを第２のＤＭＡデータに変換し、前記ＤＭＡコントローラが、前記第２のＤＭＡデータを前記ターゲットに転送するように構成された請求項９に記載の装置。
【請求項１１】
前記第１のオペレーションが暗号化を含む請求項９又は１０に記載の装置。
【請求項１２】
前記ＤＭＡコントローラがさらに、前記第１のＤＭＡデータにハッシュ関数を適用するように構成され、前記結果が前記ハッシュ関数の出力を含む請求項１１に記載の装置。
【請求項１３】
前記結果が、前記第１のＤＭＡデータに対応するＤＭＡ記述子データ構造内に格納される請求項９又は１０に記載の装置。
【請求項１４】
前記第１のオペレーションがハッシュ関数オペレーションである請求項１３に記載の装置。
【請求項１５】
前記第１のオペレーションが巡回冗長検査の生成である請求項１３に記載の装置。
【請求項１６】
前記第１のオペレーションがチェックサムの生成である請求項１３に記載の装置。
【請求項１７】
前記ＤＭＡコントローラが、複数のチャネルからデータを読み出し、前記データを排他的論理和して前記結果を生成するように構成された請求項９に記載の装置。
【請求項１８】
ダイレクト・メモリ・アクセス（ＤＭＡ）コントローラが、第１のインターフェース回路とホスト内のアドレス空間との間で第１のＤＭＡ転送を行うステップであって、前記アドレス空間が前記ホスト内の複数の記憶領域に少なくとも一部がマッピングされ、前記インターフェース回路がプロトコルに従ってインターフェースで通信するように構成された、ステップと、
前記ＤＭＡコントローラが、前記複数の記憶領域のうちの第１の複数の記憶領域と、前記複数の記憶領域のうちの第２の複数の記憶領域との間で第２のＤＭＡ転送を行うステップと、を含む方法。
【請求項１９】
前記第１のインターフェース回路がメディア・アクセス・コントローラ（ＭＡＣ）を備える請求項１８に記載の方法。
【請求項２０】
前記ＤＭＡコントローラが、第１のインターフェース回路を含む複数のインターフェース回路に結合され、前記複数のインターフェース回路が前記ＤＭＡコントローラに結合された請求項１８又は１９に記載の方法。
【請求項２１】
前記複数のインターフェース回路のうちの第２のインターフェース回路が、周辺インターフェース・コントローラ回路を備えた請求項１８から２０のいずれかに記載の方法。
【請求項２２】
ダイレクト・メモリ・アクセス（ＤＭＡ）コントローラであって、
第１のＤＭＡデータをホスト内のアドレス空間から読み出し、ＤＭＡ転送が割り当てられるチャネルに応じて前記第１のＤＭＡデータを前記ＤＭＡコントローラ内のオフロード・エンジン又はインターフェース回路に供給するように構成された送信制御回路と、
前記第１のＤＭＡデータを前記送信制御回路から受信するために結合されたオフロード・エンジンであって、前記第１のＤＭＡデータに少なくとも第１のオペレーションを実行して結果を生成するように構成され、前記第１のＤＭＡデータを前記オフロード・エンジンに供給するＤＭＡ転送中に前記第１のオペレーションの実行を少なくとも開始するように構成された、オフロード・エンジンと、
前記結果を受信するために前記オフロード・エンジンに結合された受信制御回路であって、前記ＤＭＡ転送を記述するＤＭＡ記述子データ構造に従って、前記ホスト内の前記アドレス空間に前記結果を書き込むように構成され、さらに、前記インターフェース回路から受信されたデータを前記アドレス空間に書き込むように構成された、受信制御回路とを備えるＤＭＡコントローラ。
【請求項２３】
前記第１のオペレーションが前記第１のＤＭＡデータを前記第２のＤＭＡデータへと変換し、前記オフロード・エンジンが前記受信制御回路に結合され、前記第２のＤＭＡデータを前記受信制御回路に供給するように構成された請求項２２に記載のＤＭＡコントローラ。
【請求項２４】
前記第１のオペレーションが暗号化を含む請求項２２又は２３に記載のＤＭＡコントローラ。
【請求項２５】
前記オフロード・エンジンがさらに、ハッシュ関数を前記第１のＤＭＡデータに適用するように構成され、前記結果が前記ハッシュ関数の出力である請求項２２から２４のいずれかに記載のＤＭＡコントローラ。
【請求項２６】
前記結果が、前記第１のＤＭＡデータに対応するＤＭＡ記述子データ構造に格納される請求項２２から２５のいずれかに記載のＤＭＡコントローラ。
【請求項２７】
前記第１のオペレーションがハッシュ関数である請求項２６に記載のＤＭＡコントローラ。
【請求項２８】
前記第１のオペレーションが巡回冗長検査の生成である請求項２６に記載のＤＭＡコントローラ。
【請求項２９】
前記第１のオペレーションがチェックサムの生成である請求項２６に記載のＤＭＡコントローラ。
【請求項３０】
排他的ＯＲ（ＸＯＲ）回路をさらに備え、前記送信制御回路が、複数のチャネルからデータを読み出し、前記データを前記ＸＯＲ回路に供給するように構成され、前記ＸＯＲ回路が前記データを排他的論理和して前記結果を生成するように構成された請求項２２から２９のいずれかに記載のＤＭＡコントローラ。
【請求項３１】
ホスト内のアドレス空間から第１のＤＭＡデータを読み出し、ＤＭＡ転送が割り当てられるチャネルに応じて前記第１のＤＭＡデータをＤＭＡコントローラ内のオフロード・エンジン又はインターフェース回路のいずれかに供給するように構成されたダイレクト・メモリ・アクセス（ＤＭＡ）コントローラであって、
前記オフロード・エンジンが、前記第１のＤＭＡデータに少なくとも第１のオペレーションを実行して結果を生成するように構成され、前記オフロード・エンジンが、前記第１のＤＭＡデータを前記オフロード・エンジンに供給するＤＭＡ転送中に前記第１のオペレーションの実行を少なくとも開始するように構成され、前記ＤＭＡコントローラが、前記ＤＭＡ転送を記述するＤＭＡ記述子データ構造に従って前記ホスト内の前記アドレス空間に前記結果を書き込むように構成され、前記ＤＭＡコントローラがさらに、前記インターフェース回路から受信されたデータを前記アドレス空間に書き込むように構成されたＤＭＡコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集積回路の分野に関し、より具体的には、１つ又は複数の集積回路を備えるシステム内のダイレクト・メモリ・アクセス（ＤＭＡ）に関する。
【背景技術】
【０００２】
１つ又は複数のプロセッサ、メモリ、入力／出力（Ｉ／Ｏ）デバイス、又はインターフェースを含む一般的なシステムでは、Ｉ／Ｏとメモリとの間でデータを転送するためダイレクト・メモリ・アクセス（ＤＭＡ）転送が利用されることが多い。あるシステムでは、ＤＭＡを使用する各Ｉ／Ｏデバイス又はインターフェース内に個々のＤＭＡ回路が含まれている。別のシステムでは、１つ又は複数のＩ／ＯデバイスがＤＭＡ回路を共用している。
【０００３】
あるシステムはさらに、１つの記憶領域から別の記憶領域へとデータをコピーするために使用可能な「データ・ムーバ」をも含んでいる。データ・ムーバは、プロセッサをオフロードできるがそうでない場合は、プロセッサはデータ移動（例えば、一般的には一度に３２ビット又は６４ビットであるプロセッサが使用するビット幅でのデータの読み出しと書き込み）を行う命令を実行しなければならない。データ・ムーバ用のプログラミング・モデルは一般的には、Ｉ／Ｏデバイスとメモリとの間の通信に対応するＤＭＡプログラミング・モデルとは異なっている。
【発明の開示】
【課題を解決するための手段】
【０００４】
一実施態様において、装置は第１のインターフェース回路と、第１のインターフェース回路に結合されたダイレクト・メモリ・アクセス（ＤＭＡ）コントローラと、ＤＭＡコントローラに結合されたホストとを備えている。第１のインターフェース回路はプロトコルに従ってインターフェースで通信するように構成されている。ホストは、ホストのメモリ・システム内の複数の記憶領域に少なくとも一部がマッピングされる少なくとも１つのアドレス空間を備えている。ＤＭＡコントローラは、第１のインターフェース回路とアドレス空間との間でＤＭＡ転送を行うように構成され、ＤＭＡコントローラはさらに、複数の記憶領域のうちの第１の複数の記憶領域と、複数の記憶領域のうちの第２の複数の記憶領域との間でＤＭＡ転送を行うように構成されている。方法も企図される。
【発明を実施するための最良の形態】
【０００５】
以下の詳細な説明は、簡単に説明される添付図面を参照する。
【０００６】
本発明には様々な修正及び代替形態が可能であるが、その特定の実施形態を図面で例示的に示し、本明細書で詳細に説明する。しかし、図面及び、その詳細な説明は本発明を開示された特定の形態に限定することを意図するものではなく、逆に本発明は添付の請求項に定義された本発明の趣旨と範囲に含まれる全ての修正形態、同等物及び代替形態を包含するものであると理解されたい。
【０００７】
ここで図１を参照すると、システム１０の一実施形態のブロック図が示されている。図示した実施形態において、システム１０はホスト１２と、ＤＭＡコントローラ１４と、インターフェース回路１６と、物理的インターフェース層（ＰＨＹ）３６とを含んでいる。ＤＭＡコントローラ１４はホスト１２とインターフェース回路１６とに結合される。インターフェース回路１６はさらに物理的インターフェース層３６に結合されている。図示した実施形態において、ホスト１２は、プロセッサ１８Ａ、１８Ｂなどの１つ又は複数のプロセッサと、メモリ・コントローラ２０Ａ、２０Ｂなどの１つ又は複数のメモリ・コントローラと、Ｉ／Ｏブリッジ（ＩＯＢ）２２と、Ｉ／Ｏメモリ（ＩＯＭ）２４と、Ｉ／Ｏキャッシュ（ＩＯＣ）２６と、レベル２（Ｌ２）キャッシュ２８と、インターコネクト３０とを含んでいる。プロセッサ１８Ａ、１８Ｂ、メモリ・コントローラ２０Ａ、２０Ｂ、ＩＯＢ２２、Ｌ２キャッシュ２８はインターコネクト３０に結合されている。ＩＯＢ２２はさらにＩＯＣ２６とＩＯＭ２４とに結合されている。ＤＭＡコントローラ１４もＩＯＢ２２とＩＯＭ２４とに結合されている。図示した実施形態において、インターフェース回路１６は周辺インターフェース・コントローラ３２と、ＭＡＣ３４Ａ、３４Ｂなどの１つ又は複数のメディア・アクセス制御回路（ＭＡＣ）とを含んでいる。ＭＡＣ３４Ａ、３４ＢはＤＭＡコントローラ１４と物理的インターフェース層３６とに結合されている。周辺インターフェース・コントローラ３２もＩ／Ｏブリッジ２２とＩ／Ｏメモリ３４とに結合され、（かつ、ひいては間接的にＤＭＡコントローラ１４に結合され）、かつ周辺インターフェース層３６に結合されている。周辺インターフェース・コントローラ３２及びＭＡＣ３４Ａ〜３４Ｃは各々、構成レジスタ３８Ａ〜３８Ｃを含んでいる。ある実施形態において、システム１０のコンポーネントをチップ上のシステムとして単一の集積回路上に集積している。別の実施形態において、システム１０を２つ以上の集積回路として実装している。
【０００８】
ホスト１２は１つ又は複数のアドレス空間を備えている。ホスト１２内のアドレス空間の少なくとも一部はホスト１２内の記憶領域にマッピングされている。すなわち、ホスト１２はホストのアドレス空間内のアドレスにマッピングされたメモリ・システムを備えている。例えば、メモリ・コントローラ２０Ａ、２０Ｂは各々、アドレス空間内にマッピングされた記憶領域を備えるメモリ（図示せず）に結合されている。ある場合は、アドレス空間全体が記憶領域にマッピングされている。別の場合は、アドレス空間の一部がメモリ・マップドＩ／Ｏでよい（例えば、周辺インターフェース・コントローラ３２によって制御される周辺インターフェースが幾つかのメモリ・マップドＩ／Ｏを含んでいてもよい）。
【０００９】
ＤＭＡコントローラ１４は、インターフェース回路１６とホストのアドレス空間との間でＤＭＡ転送を行うように構成されている。特に、ＤＭＡ転送は、アドレス空間がマッピングされた記憶領域とインターフェース回路１６との間で行われる。加えて、ある実施形態において、ＤＭＡコントローラ１４を、アドレス空間内の記憶領域のセット間でＤＭＡ転送を行うように構成している。すなわち、このようなＤＭＡ転送の転送元と転送先が記憶領域である。データ・ムーバの機能はこのようにＤＭＡコントローラ１４に組み込まれており、ある実施形態において、別のデータ・ムーバは必要がないこともある。メモリ間のＤＭＡ転送のためのプログラミング・モデルは、他のＤＭＡ転送（例えば以下に、より詳細に記載するＤＭＡ記述子）用のプログラミング・モデルと同様のものでもよい。メモリ間のＤＭＡ転送をコピーＤＭＡ転送と呼ぶこともある。
【００１０】
ある実施形態において、ＤＭＡコントローラ１４を、ＤＭＡデータが転送される際にＤＭＡデータに１つ又は複数のオペレーション（又は「関数」）を実行するように構成している。オペレーションはアドレス空間とインターフェース回路との間の転送に対して実行してもよく、ある実施形態において、コピーＤＭＡ転送に対して実行する。ある実施形態において、ＤＭＡコントローラ１４が実行するオペレーションをプロセッサが実行する必要がないので、ＤＭＡコントローラ１４によって実行されるオペレーションがプロセッサ１８Ａ、１８Ｂにかかる処理負荷を軽減することがある。一実施形態において、ＤＭＡコントローラ１４が実行するオペレーションの一部はパケット・データに対してなされるオペレーションである（例えば、暗号化／復号化、巡回冗長検査（ＣＲＣ）の生成又はチェック、チェックサムの生成又はチェックなど）。オペレーションは、例えば安価ディスク冗長アレイ（ＲＡＩＤ）処理に使用してもよい排他的ＯＲ（ＸＯＲ）オペレーションをも含んでいる。
【００１１】
一般に、ＤＭＡ転送は、少なくとも１つの転送先がホストのアドレス空間内の記憶領域又はその他のアドレス（１つ又は複数）である、転送元から転送先へのデータ転送である。ＤＭＡ転送は、転送されるデータがシステム内の１つ又は複数のプロセッサ（例えばプロセッサ１８Ａ、１８Ｂ）を通過せずに達成される。ＤＭＡコントローラ１４は転送元を読み出し、転送先を書き込むことによってＤＭＡ転送を達成できる。例えば、ＤＭＡコントローラ１４が（図示した実施形態において、データを読み出すためにインターコネクト３０上でコヒーレント読み出しトランザクションを実行するＩＯＢ２２への）メモリ読み出し要求を生成し、読み出されたデータをＤＭＡデータとしてインターフェース回路１６に送信することによって、メモリからインターフェース回路１６へのＤＭＡ転送を達成する。一実施形態において、ＤＭＡコントローラ１４は、周辺インターフェース・コントローラ３２を経たＤＭＡ転送のために、データをＩＯＭ２４へ読み込む、読み込み要求を生成し、周辺インターフェース・コントローラ３２は、ＩＯＭ２４からデータを読み出し、データを送信する。ＤＭＡコントローラ１４がインターフェース回路１６からデータを受け取り、ＤＭＡデータをメモリに転送する（図示した実施形態において、ＩＯＢ２２への）メモリ書き込み要求を生成することによって、インターフェース回路１６からメモリへのＤＭＡ転送を達成する。一実施形態において、周辺インターフェース・コントローラ３２がデータをＩＯＭ２４に書き込み、ＤＭＡコントローラ１４がデータをメモリに書き込ませる。したがって、ＤＭＡコントローラ１４が周辺インターフェース・コントローラ３２のためのＤＭＡアシストを提供する。転送元の記憶領域へのメモリ読み出し要求、及び（メモリ読み出し要求によるＤＭＡデータを含む）転送先の記憶領域へのメモリ書き込み要求を生成することによって、コピーＤＭＡ転送を達成することができる。
【００１２】
ホスト１２は一般に、ホスト１２のアドレス空間へとマッピングされたメモリとインターフェースするように構成された１つ又は複数のプロセッサとメモリ・コントローラを含んでいる。ホスト１２は、ホスト１２内でのプロセッサの性能を増強するためにＬ２キャッシュ２８などの他の回路を場合により含んでいる。さらに、ホスト１２は様々なＩ／Ｏ回路やＤＭＡコントローラ１４にインターフェースするための回路を含んでいる。ホスト１２の１つの実装が図１に示されているが、他の実施形態は任意の構造を含み、かつＤＭＡコントローラ１４とインターフェース回路１６へのインターフェースを含んでいる。
【００１３】
プロセッサ１８Ａ、１８Ｂは、プロセッサ１８Ａ、１８Ｂによって実装される命令セット・アーキテクチャ内で定義される命令を実行するための回路を備えている。様々な実施形態で任意の命令セット・アーキテクチャを実装している。例えば、ＰｏｗｅｒＰＣ（商標）命令セット・アーキテクチャを実装している。他の例示的な命令セット・アーキテクチャはＡＲＭ（商標）命令セット、ＭＩＰＳ（商標）命令セット、ＳＰＡＲＣ（商標）命令セット、（ＩＡ−３２とも呼ばれる）ｘ８６命令セット、ＩＡ−６４命令セットなどを含んでいる。
【００１４】
メモリ・コントローラ２０Ａ、２０Ｂはメモリとインターフェースするように構成された回路を備えている。例えば、メモリ・コントローラ２０Ａ、２０Ｂを、同期ＤＲＡＭ（ＳＤＲＡＭ）、ダブル・データ・レート（ＤＤＲ）ＳＤＲＡＭ、ＤＤＲ２  ＳＤＲＡＭ、ラムバスＤＲＡＭ（ＲＤＲＡＭ）などのようなダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）とインターフェースするように構成されている。メモリ・コントローラ２０Ａ、２０Ｂは、これらがインターコネクト３０から結合されるメモリ用の読み出しと書き込みトランザクションを受け取り、メモリに読み出し／書き込みオペレーションを実行する。読み出し、及び書き込みトランザクションは、ＤＭＡコントローラ１４及び／又は周辺インターフェース・コントローラ３２に代わってＩＯＢ２２によって開始される読み出し及び書き込みトランザクションを含んでいる。加えて、読み出し及び書き込みトランザクションはプロセッサ１８Ａ、１８Ｂ及び／又はＬ２キャッシュ２８によって生成されるトランザクションを含んでいる。
【００１５】
Ｌ２キャッシュ２８は、プロセッサ１８Ａ、１８Ｂによる低潜在アクセス及び／又はインターコネクト３０上の他のエージェントのために、メモリ・コントローラ２０Ａ、２０Ｂが結合されているメモリ内の様々な記憶領域に対応するデータのコピーをキャッシュするように構成されたキャッシュ・メモリを備えている。Ｌ２キャッシュ２８は任意の容量と構成（例えばダイレクト・マップ方式、群連想方式など）を備えている。
【００１６】
ＩＯＢ２２は、ＤＭＡコントローラ１４と周辺インターフェース・コントローラ３２の代わりにインターコネクト３０上のトランザクションを通信するように構成された回路を備えている。インターコネクト３０がキャッシュ・コヒーレンシをサポートしてもよく、ＩＯＢ２２がコヒーレンシに関与し、ＩＯＢ２２によって開始されるトランザクションのコヒーレンシを保証している。図示した実施形態において、ＩＯＢ２２は、ＩＯＢ２２によって開始された最近のトランザクションをキャッシュするためのＩＯＣ２６を使用する。ＩＯＣ２６は様々な実施形態で任意の容量及び構成を有していてもよく、コヒーレントであっる。例えば、ＤＭＡコントローラ１４と周辺インターフェース・コントローラ３２によって生成される読み出し／書き込みに起因して部分的にしか更新されないデータ・ブロックをキャッシュするためにＩＯＣ２６を使用することができる。場合によっては、ＩＯＣ２６を使用してインターコネクト３０上の読み出し−修正−書き込みシーケンスを回避する。加えて、ＩＯＣ２６が読み出し／書き込みを完了するためにキャッシュ・ブロックの十分なオーナーシップを有している場合は、ＤＭＡコントローラ１４又は周辺インターフェース・コントローラ３２によって生成される読み出し／書き込み用のＩＯＣ２６内のキャッシュ・ヒットのためのインターコネクト３０上でのトランザクションを回避する。他の実施形態はＩＯＣ２６を含んでいない。
【００１７】
ＩＯＭ２４を、周辺インターフェース・コントローラ３２又はＤＭＡコントローラ１４とＩＯＢ２２との間で転送されるデータ用のステージング・バッファとして使用している。したがって、ＩＯＢ２２とＤＭＡコントローラ１４／周辺インターフェース・コントローラ３２との間のデータ・パスがＩＯＭ２４を通っている。（読み出し／書き込み要求、要求と関連するホストのアドレス空間内のアドレスを含む）制御パスが直接、ＩＯＢ２２とＤＭＡコントローラ１４／周辺インターフェース・コントローラ３２の間にある。他の実施形態において、ＩＯＭ２４が含まれない。
【００１８】
インターコネクト３０は、プロセッサ１８Ａ、１８Ｂ、メモリ・コントローラ２０Ａ、２０Ｂ、Ｌ２キャッシュ２８、ＩＯＢ２２の間で通信するための任意の通信媒体を含んでいる。例えば、インターコネクト３０はコヒーレンシ・サポートを備えたバスである。あるいは、インターコネクト３０は上記のエージェント間のポイント・ツー・ポイントインターコネクト、パケットベースのインターコネクト、又はその他のいずれかのインターコネクトでもよい。
【００１９】
インターフェース回路１６は一般に、任意のインターフェース・プロトコルに従ってシステム１０へのインターフェースで通信し、インターフェースで送信される通信を受信するためにシステム１０内の他のコンポーネントと通信するか、又はインターフェースから受信された通信を供給するように構成された回路を備えている。インターフェース回路を、システム１０内を転送元とする通信をインターフェース・プロトコルに変換し、システム１０内で転送するためにインターフェースから受信された通信を変換するように構成している。例えば、インターフェース回路１６は、周辺インターフェース・プロトコル（例えば周辺インターフェース・コントローラ３２）に従って通信するように構成された回路を備えている。別の例として、インターフェース回路１６は、ネットワーク・インターフェース・プロトコル（例えばＭＡＣ３４Ａ、３４Ｂ）に従って通信するように構成された回路を備えている。
【００２０】
ＭＡＣ３４Ａ、３４Ｂは、ネットワーク・インターフェース用に定義されたメディア・アクセス・コントローラの機能を実装する回路を備えている。例えば、１つ又は複数のＭＡＣ３４Ａ、３４Ｂがギガビット・イーサーネット標準を実装している。１つ又は複数のＭＡＣ３４Ａ、３４Ｂが１０ギガビット・イーサーネット・アタッチメント・ユニット・インターフェース（ＸＡＵＩ）標準を実装している。別の実施形態は、１０メガビット又は１００メガビット標準などの他のイーサーネット標準、又は他のいずれかのネットワーク標準を実装している。一実施形態において、６つのＭＡＣがあり、そのうちの４つがギガビット・イーサーネットＭＡＣであり、２つがＸＡＵＩ  ＭＡＣである。他の実施形態は、それよりも多い、又はそれよりも少ないＭＡＣ、及び任意に組み合わせたタイプのＭＡＣを有している。
【００２１】
特に、イーサーネット標準を実装するＭＡＣ３４Ａ、３４Ｂは、受信されたパケットからインターフレーム・ギャップ（ＩＦＧ）、プリアンブル、フレーム開始デリミタ（ＳＦＤ）を取り除いてもよく、ＤＭＡが記憶するよう残りのパケット・データをＤＭＡコントローラ１４に提供している。ＭＡＣ３４Ａ〜３４Ｄは、ＤＭＡから受信されたパケット用のＩＦＧ、プリアンブル、ＳＦＤを送信ＤＭＡ転送として挿入し、パケットを送信用のＰＨＹ３６に送信する。
【００２２】
周辺インターフェース・コントローラ３２は、周辺インターフェースを制御するように構成された回路を備えている。一実施形態において、周辺インターフェース・コントローラ３２が周辺コンポーネント・インターコネクト（ＰＣＩ）エクスプレス・インターフェースを制御している。別の実施形態は、ＰＣＩエクスプレス・インターフェースに加えて、又はその代替として他の周辺インターフェース（例えばＰＣＩ、ＰＣＩ−Ｘ、ユニバーサル・シリアル・バス（ＵＳＢ）など）を実装している。
【００２３】
ＰＨＹ３６は一般に、インターフェース回路１６に制御されてシステム１０への外部インターフェースで物理的に通信するように構成された回路を備えている。特定の一実施形態において、ＰＨＹ３６はＰＣＩエクスプレス・レーンとして、又はイーサーネット接続として使用するように構成されたシリアライザ／デシリアライザ（ＳＥＲＤＥＳ）回路のセットを備えている。ＰＨＹ３６はＳＥＲＤＥＳ、及び同期先入れ先出し型（ＦＩＦＯ）バッファを経た送信用の８ｂ／１０ｂエンコード／デコードを実行する回路、及びさらにＰＩＣエクスプレス又はイーサーネット通信リンクとして使用するためにＳＥＲＤＥＳリンクを論理的に構成する回路を含んでいる。一実装形態では、ＰＨＹは、ＰＣＩエクスプレス・レーン又はイーサーネット接続として構成可能な２４のＳＥＲＤＥＳを備えている。所望の任意の数のＳＥＲＤＥＳをＰＣＩエクスプレスとして構成してもよく、所望の任意の数のＳＥＲＤＥＳをイーサーネット接続として構成している。
【００２４】
図示した実施形態において、周辺インターフェース・コントローラ３２及びＭＡＣ３４Ａ、３４Ｂ内の構成レジスタ３８Ａ〜３８Ｃが示されている。各々の周辺インターフェース・コントローラ３２及びＭＡＣ３４Ａ、３４Ｂ内には１つ又は複数の構成レジスタがある。図１には示されていないが、システム１０内には別の構成レジスタが存在している。構成レジスタを、周辺インターフェース・コントローラ３２及びＭＡＣ３４Ａ、３４Ｂの様々なプログラマブルに選択できるフィーチャを構成し、様々なフィーチャを有効化、無効化し、周辺インターフェース・コントローラ３２及びＭＡＣ３４Ａ、３４Ｂをオペレーション用に構成するなどに使用している。以下に記載の一実施形態において、構成レジスタを周辺インターフェース・コントローラ３２及びＭＡＣ３４Ａ、３４Ｂの実行時再構成のための制御記述子内で指定している。
【００２５】
様々な実施形態で、システム１０が図１に示されたいずれかの要素（例えばプロセッサ、メモリ・コントローラ、キャッシュ、Ｉ／Ｏブリッジ、ＤＭＡコントローラ、及び／又はインターフェース回路など）のうちの１つ又は任意の数の要素を含んでいてもよいことに留意されたい。
【００２６】
次に図２を参照すると、ＤＭＡコントローラ１４の一実施形態のブロック図が示されている。図２の実施形態については、ＤＭＡ転送を行わせる記述子ソフトウェア・モデルを記載する。ある実施形態において、記述子モデルに加えて、又はその代替として、レジスタを基本としたソフトウェア・モデルがサポートされている。レジスタを基本としたモデルでは、各々のＤＭＡ転送がＤＭＡコントローラ１４内にプログラムされ、ＤＭＡコントローラ１４がＤＭＡ転送を行う。転送の完了時には、ＤＭＡコントローラ１４はプロセッサ１８Ａ、１８Ｂの１つに割り込むか、ＤＭＡ転送の完了を判定するためにソフトウェアがポールできる（例えばＤＭＡコントローラ１４内部のレジスタ内の）ステータスを提供している。
【００２７】
記述子モデル内では、ソフトウェアがメモリ内の記述子データ構造を使用して多重ＤＭＡ転送の実行を設定している。一般に、ＤＭＡ記述子は、ＤＭＡ転送を記述するデータ構造をメモリ内に備えている。例えば、ＤＭＡ記述子内の情報は、ＤＭＡ転送の転送元とターゲット、転送のサイズ、転送の様々な属性を特定する。場合によっては、ＤＭＡ転送の転送元とターゲットは暗黙的でもよい。メモリ内の記述子データ構造内に（例えば「記述子リング」内に）複数の記述子が格納されてもよく、ＤＭＡコントローラ１４にはデータ構造内の第１の記述子のアドレスがプログラムされている。ＤＭＡコントローラ１４は記述子を読み出し、表示されたＤＭＡ転送を行う。ソフトウェアとハードウエアとの間の記述子のオーナーシップを制御するため、多様な制御機構を使用している。例えば、記述子は、記述子内に記述されたＤＭＡ転送の実行準備ができることをＤＭＡコントローラ１４に示す有効ビット、すなわちイネーブル・ビットを含んでいる。所与のＤＭＡ転送の終了時にＤＭＡコントローラ１４がプロセッサ１８Ａ、１８Ｂに割り込むべきことを指示するために、記述子内の割り込みビットを使用してもよく、又は記述子が最後のＤＭＡ転送を記述しており、ＤＭＡコントローラ１４が休止すべきであることを指示するために、転送終了ビットを使用することもできる。あるいは、ＤＭＡコントローラ１４が処理のために幾つの記述子内を利用可能であるかを示すために、ＤＭＡコントローラ１４が、ソフトウェアで増分できる記述子カウント・レジスタを実装している。ＤＭＡコントローラ１４は記述子のプリフェッチが生成されたことを示すために、記述子カウント・レジスタを減分する。別の実施形態において、ＤＭＡコントローラ１４は、記述子の消費（すなわち指定されたＤＭＡ転送の実行）を示すために記述子カウント・レジスタを減分する。さらに別の実施形態において、幾つの記述子が処理され、又はプリフェッチされたかを示すために、ＤＭＡコントローラ１４は別個の記述子処理済みカウント・レジスタを使用する。
【００２８】
ＤＭＡコントローラ１４は送信（Ｔｘ）ＤＭＡ転送と受信（Ｒｘ）ＤＭＡ転送とを実行できる。Ｔｘ  ＤＭＡ転送は転送元としてホスト１２内にアドレス空間（例えばメモリ・コントローラ２０Ａ、２０Ｂに結合されたメモリ内の記憶領域）を有している。Ｒｘ  ＤＭＡ転送はターゲットとしてホスト１２内にアドレス空間を有している。Ｔｘ  ＤＭＡ転送はターゲットとしてインターフェース回路１６を有し、又は（例えばコピーＤＭＡ転送用の）ターゲットとしてホスト１２のアドレス空間内に別のアドレスを有している。ホスト・アドレス空間のターゲットを有するＴｘ  ＤＭＡ転送は、転送元アドレスから読み出されたＤＭＡデータをターゲット・アドレスに書き込むためにＲｘ  ＤＭＡデータ・パスを使用する。ループバック回路４０がＴｘ  ＤＭＡデータ・パスとＲｘ  ＤＭＡデータ・パスとの間のリンクを提供している。すなわち、「ループバック回路」は、送信ＤＭＡデータ・パスからＴｘ  ＤＭＡデータを受信するために、かつ受信ＤＭＡデータ・パス上のＲｘ  ＤＭＡデータを供給するために結合されたＤＭＡコントローラにローカルな回路を備えている。ループバック回路４０によって受信ＤＭＡデータ・パス上に供給されるデータは、（例えばコピーＤＭＡ機能用の）送信ＤＭＡデータ・パスから受信されたデータである。ある実施形態において、ループバック回路４０によって供給されるデータは、受信されたデータからループバック回路４０によって変換されたデータである。ある実施形態において、ループバック回路４０によって供給されるデータは、ループバック回路４０によって受信され、ループバック回路４０によってデータ（例えば、チェックサム、ＣＲＣデータなど）上で計算された結果によって増大されたデータである。あるいは、ループバック回路４０によって供給されるデータは、ループバック回路４０によって受信されたデータでもよく（又はデータが供給されなくてもよく）、その結果がＤＭＡ転送用の記述子内に格納されている。変換されたデータ、又は計算され、データと共に含まれ、又はＤＭＡ記述子に書き込まれる結果を、本明細書では総称して「結果」と呼んでもよい。
【００２９】
したがって、ある実施形態において、結果（例えば変換されたＤＭＡデータ、又はデータから生成された結果）を生成するために、Ｔｘ  ＤＭＡデータに１つ又は複数のオペレーション（又は「関数」）を実行するように、ループバック回路４０を構成している。図２の実施形態において、ループバック回路４０は、コピーＦＩＦＯ４２、オフロード・エンジン４４、送信データ・パスに結合された排他的ＯＲ（ＸＯＲ）回路４６を含んでいる。コピーＦＩＦＯ４２は、Ｒｘ  ＤＭＡデータ・パスでの送信用のＴｘ  ＤＭＡデータ・パスからの送信データを格納する。したがって、コピーＦＩＦＯ４２はコピーＤＭＡオペレーションを実行する。オフロード・エンジン４４を、ＤＭＡデータに様々なオペレーションを実行し、変換されたデータ、又はデータから分離された結果を生成するように構成している。様々な実施形態で、オフロード・エンジン４４を、所望の任意のオペレーションセットを実行するように構成している。一実施形態において、オフロード・エンジン４４を、パケット処理を支援するオペレーションを実行するように構成している。例えば、パケットの暗号化及び／又は認証を行う様々なネットワーク・セキュリティ・プロトコルが開発されている。認証は一般的には、パケットの一部又は全部にわたるハッシュの生成を含んでいる。したがって、オフロード・エンジン４４を、ＤＭＡ転送でパケット・データに暗号化／復号化、及び／又はハッシュ関数を実行するように構成する。加えて、オフロード・エンジン４４を、チェックサムの生成／チェック、及び／又はＣＲＣの生成／チェックを実行するように構成する。チェックサム及び／又はＣＲＣ保護は様々なパケット・プロトコルで使用されている。ＸＯＲ回路４６はビット単位のＸＯＲ  ＤＭＡデータ（例えば複数の転送元からのＤＭＡデータ）でよい。ＸＯＲ回路４６を、例えば安価ディスク冗長アレイ（ＲＡＩＤ）の処理及び他のタイプの処理、又はＸＯＲ関数を使用する処理をサポートするために使用することができる。
【００３０】
ループバック回路４０（及びより具体的には、ループバック・コンポーネント４２、４４及び４６）は、ＤＭＡデータをループバック回路４０に供給するＤＭＡ転送中にＤＭＡデータ上で動作している。すなわち、ループバック回路４０は、Ｔｘ  ＤＭＡ転送が残りのＤＭＡデータを供給する間に、ＤＭＡデータへのオペレーションの実行を少なくとも開始している。一般に、結果をメモリに、より一般的にはホストのアドレス空間に（例えばＤＭＡデータに添付された変換済みＤＭＡデータとして、又はＴｘ  ＤＭＡ転送用のＤＭＡ記述子内のフィールドなどの別個の結果記憶域に）書き込んでもよい。
【００３１】
ループバック回路４０はさらに、オフロード・エンジン４４とＸＯＲ回路４６（オフロード・エンジン４４に結合されたオフロードＦＩＦＯ４８、及びＸＯＲ回路４６に結合されたＸＯＲ  ＦＩＦＯ  ５０）を含んでいる。ＦＩＦＯ４８、５０は、ＤＭＡデータが受信ＤＭＡデータ・パスで送信されるまで、オフロード・エンジン４４とＸＯＲ回路４６のそれぞれからのデータを一時的に格納する。図示した実施形態において、ＦＩＦＯ間を調停するためのアービタ５２が備えられ、ＦＩＦＯ４２、４８、５０に結合されている。アービタ５２はループバックＦＩＦＯ５４にも結合され、これがターゲットに書き込まれるべきループバック回路４０からのデータを一時的に格納する。
【００３２】
図示した実施形態において、ＤＭＡコントローラ１４はＴｘ  ＤＭＡデータ・パス上のＴｘ制御回路５６と、Ｒｘ  ＤＭＡデータ・パス上のＲｘ制御回路５８とを備えている。Ｔｘ制御回路５６は送信ＤＭＡ転送のためのホスト１２からのデータをプリフェッチする。特に、Ｔｘ制御回路５６はＤＭＡ記述子をプリフェッチしてもよく、ＤＭＡデータ用の転送元アドレスを決定するためにＤＭＡ記述子を処理する。Ｔｘ制御回路５６は次いでＤＭＡデータをプリフェッチする。Ｔｘ制御回路５６のオペレーションを指すためにプリフェッチという用語を用いるが、プリフェッチは一般に、記述子やＤＭＡデータをホストのアドレス空間から読み出すために生成されるオペレーションである。
【００３３】
Ｔｘ制御回路５６はＤＭＡデータをターゲットに送信する。この実施形態において、ターゲットはインターフェース回路１６又はループバック回路４０のいずれか１つ（より具体的には、図示した実施形態において、コピーＦＩＦＯ４２、オフロード・エンジン４４、ＸＯＲ回路４６の１つ）である。Ｔｘ制御回路５６は（例えばターゲット識別子を送信することにより）送信済みデータのターゲットを特定する。あるいは、Ｔｘ制御回路５６とインターフェース回路１６との間、及びＴｘ制御回路５６とループバック・コンポーネント４２、４４、４６との間に物理的に分離されたパスを設けている。Ｔｘ制御回路５６は送信されるデータを一時的に格納するためバッファ６２のセットを含んでいる。Ｔｘ制御回路５６はさらに、様々な制御情報にデータを供給する。制御情報はＤＭＡ記述子からの情報を含んでいる。制御情報は、ループバック回路４０用に、データをターゲット・アドレス空間に格納するためのバッファ・ポインタ（１つ又は複数）を含んでいる。制御情報はさらに、ＤＭＡ記述子内に含まれ、かつインターフェース回路１６又はループバック回路４０によって使用される他のいずれかの制御情報を含んでいる。それらの例は、ＤＭＡ記述子の説明に関連して以下に、より詳細に記載する。
【００３４】
Ｒｘ制御回路５８はホスト１２のアドレス空間に書き込まれるＤＭＡデータを受信し、かつデータをメモリに格納する書き込みを行う。一実施形態において、ソフトウェアは、受信されたＤＭＡデータを格納するためメモリ内にバッファを割り当てる。Ｒｘ制御回路５８は、バッファ・ポインタ（バッファを識別するホストのアドレス空間のアドレス）を備えている。Ｒｘ制御回路５８は、データを格納するための書き込み用のアドレスを生成するためにバッファ・ポインタを使用する。Ｒｘ制御回路５８用のバッファ・ポインタをプリフェッチするため、Ｒｘプリフェッチ・エンジン６０を備えている。Ｒｘプリフェッチ・エンジン６０は、バッファ・ポインタをＲｘ制御回路５８に提供するために結合される。Ｒｘプリフェッチ・エンジン６０は、Ｒｘプリフェッチ・エンジン６０によって使用されるために、プリフェッチされたバッファ・ポインタを一時的に格納するためのバッファ６４のセットを含んでいる。同様に、Ｒｘ制御回路５８は、メモリに書き込まれる受信済みのＤＭＡデータを一時的に格納するためのバッファ６８のセットを含んでいる。
【００３５】
一実施形態において、Ｒｘ制御回路５８を、受信されたＤＭＡデータ用の記述子を生成するように構成する。すなわち、受信されたＤＭＡデータ用のＤＭＡ記述子をソフトウェアに作成させるのではなく、ソフトウェアがＤＭＡデータを格納するためのバッファを割り当て、バッファ・ポインタを提供している。Ｒｘ制御回路５８は、割り当てられたバッファに受信されたＤＭＡデータを格納し、ＤＭＡ転送用の記述子を作成している。Ｒｘ制御回路５８によって作成された記述子は、受信されたＤＭＡデータを格納する１つ又は複数のバッファへの１つ又は複数のバッファ・ポインタ、及びＤＭＡ転送を記述する別の情報を含んでいる。受信ＤＭＡ記述子の例示的実施形態が図１２に示されており、以下に、より詳細に説明する。Ｒｘ制御回路５８が、受信されたＤＭＡデータ用の記述子を作成するので、記述子はソフトウェアによって作成された記述子よりも効果的である。例えば、ソフトウェアは最大の可能性があるＤＭＡ転送を受信することができるＤＭＡ記述子を作成する必要がある場合があり（又は、より大容量の転送用の複数の記述子が必要であり）、最大の可能性があるＤＭＡ転送を格納するための十分なバッファを割り当てる必要がある場合がある。一方、Ｒｘ制御回路５８によって作成された記述子は、受信された実際の転送にとって十分大きい場合があり（かつ、受信されたデータを格納するのに十分なバッファを消費することがあるが）、必ずしもそれ以上大きい必要はない。
【００３６】
図示した実施形態において、Ｒｘ制御回路５８は、ループバックＦＩＦＯ５４に結合され、インターフェース回路１６からのＤＭＡデータをも受信するためのアービタ６６からＤＭＡデータを受信する。アービタ６６は、データをＲｘ制御回路５８に転送するため、ループバックＦＩＦＯ５４と、インターフェース回路１６から受信されたＤＭＡデータとを調停する。
【００３７】
アービタ５２、６６は所望のいずれかの調停方式を実装している。例えば、優先度に基づく方式、ラウンドロビン方式、重み付きラウンドロビン方式、又はこれらの方式の組み合わせを用いる。ある実施形態において、調停方式がプログラマブルである。アービタ５２によって実装される調停方式（１つ又は複数）は、アービタ６６によって実装される方式（１つ又は複数）とは異なっている。
【００３８】
Ｔｘ制御回路５６、Ｒｘプリフェッチ・エンジン６０、Ｒｘ制御回路５８は、図示した実施形態において、ＩＯＭ／ＩＯＢインターフェース・ユニット７０に結合される。ＩＯＭ／ＩＯＢインターフェース・ユニット５６は、Ｔｘ制御回路５６、Ｒｘプリフェッチ・エンジン６０、Ｒｘ制御回路５８の代わりに、ＩＯＢ２２及びＩＯＭ２４と通信する。ＩＯＭ／ＩＯＢインターフェース・ユニット７０は、Ｔｘ制御回路５６、Ｒｘプリフェッチ・エンジン６０、Ｒｘ制御回路５８からの読み出しと書き込みの要求を受け取り、これらの要求を満たすためにＩＯＢ２２及びＩＯＭ２４と通信する。
【００３９】
特に、ＩＯＭ／ＩＯＢインターフェース・ユニット７０は、記述子、及びＴｘ制御回路５６からのＤＭＡデータの読み出し要求、及びＲｘプリフェッチ・エンジン６０からのバッファ・ポインタを格納するメモリへの読み出し要求を受け取り、かつこの要求をＩＯＢ２２に伝達する。ＩＯＢ２２はＩＯＭ２４のどのエントリが要求されたデータ（例えば、ホストのアドレス空間又はＩＯＣ２６からのデータの読み出し後、又は以前の要求からデータがＩＯＢ２４内に既に存在することもある）を含むデータのキャッシュ・ラインを格納するか否かを示し、またＩＯＭ／ＩＯＢインターフェース・ユニット７０はＩＯＭ２４からデータを読み込み、そのデータをＴｘ制御回路５６又はＲｘプリフェッチ・エンジン６０に供給する。ＩＯＭ／ＩＯＢインターフェース・ユニット７０はＲｘ制御回路５８からの書き込み要求も受け取ってもよく、ＩＯＭ２４に（ＩＯＢ２２によって書き込みデータ用に割り当てられたエントリで）書き込みデータを格納する。ＩＯＭ２４内にデータのキャッシュ・ラインが蓄積された後（又は、ＤＭＡ転送の完了のいずれか先の方）、ＩＯＭ／ＩＯＢインターフェース・ユニット７０はその旨をＩＯＢ２２に通知し、（バッファ・ポインタから書き込まれるバッファへと導き出された）キャッシュ・ラインが書き込まれるアドレスを提供する。
【００４０】
一実施形態において、ＤＭＡコントローラ１４はＤＭＡ転送を送信し、ＤＭＡ転送を受信するための様々なチャネルをサポートしている。様々な実施形態で、任意の数のチャネルがサポートされている。例えば、一実装形態では、２０の送信ＤＭＡチャネルを備え、６４の受信ＤＭＡチャネルを備えている。各チャネルは転送元から転送先までの独立した論理データ・パスでよい。チャネルは、ソフトウェアにより所望通りに割り当てられる。
【００４１】
より具体的には、各送信チャネルをインターフェース回路１６の１つ、又はループバック・コンポーネント回路４２、４４、又は４６の１つに割り当てる。全ての送信チャネルが使用される必要はない（すなわち、送信チャネルの一部は無効化されてもよい）。Ｔｘ制御回路５６は、チャネルごとにＤＭＡ記述子とＤＭＡデータをプリフェッチする。すなわち、Ｔｘ制御回路５６は、処理に利用できるＤＭＡ記述子を有する各チャネルごとに独立してプリフェッチを生成している。Ｔｘ制御回路５６は、生成されたプリフェッチからＩＯＭ／ＩＯＢインターフェース・ユニット７０への読み出し要求を送信するためのプリフェッチを選択している。
【００４２】
インターフェース回路１６の１つに各受信チャネルを割り当てる。必ずしも全ての受信チャネルが使用される必要はない（すなわち、受信チャネルの一部は無効化されてもよい）。Ｒｘ制御回路５８は、受信されたデータと共にチャネル番号を受信する。ループバック回路４０はＤＭＡ記述子からＤＭＡ用のバッファ・ポインタを供給してもよく、Ｒｘ制御回路５８は、ＤＭＡデータをホストのアドレス空間に書き込むためにバッファ・ポインタを使用する。割り当てられたチャネルでインターフェース回路１６がプログラム可能であってもよく、チャネルを決定するためにパケット・フィルタリングを使用してもよい。インターフェース回路１６はチャネル番号にＤＭＡデータを供給してもよく、Ｒｘ制御回路５８は、ＤＭＡデータをホストのアドレス空間に書き込むためのチャネル用にＲｘプリフェッチ・エンジン６０から提供されたバッファ・ポインタを使用してもよい。
【００４３】
ＤＭＡコントローラ１４は、図２に示されているような様々な構成レジスタ３８Ｄ〜３８Ｈを含んでいる。構成レジスタ３８Ａ〜３８Ｈは、ＤＭＡコントローラ１４の様々なプログラム可能なフィーチャを有効化／無効化するために、かつ／又は前述のように、プログラム可能フィーチャを構成するためにプログラム可能である。例えば、Ｔｘ制御回路５６内の構成レジスタ３８Ｄは、各チャネルごとの記述子リングのアドレス、及び利用可能な記述子の数を示す記述子カウントを含んでいる。構成レジスタ３８Ｄはさらに、インターフェース回路１６への送信チャネルの割り当て、及びコンポーネント・ループバック機能を含んでいる。チャネルごとの様々な他の構成、及びチャネルに関連しない構成が構成レジスタ３８Ｄに格納されている。同様に、構成レジスタ３８Ｅは、各インターフェース回路１６、バッファ・リング・カウントなどのためのバッファ・ポインタ・リングのアドレス、及びチャネルに関連しない様々な構成を格納する。構成レジスタ３８Ｆは様々な受信ＤＭＡ構成を格納する。構成レジスタ３８Ｇは、ループバック回路４０用の構成全体、及び所望の各コンポーネント回路用の構成を格納する。構成レジスタ３８Ｇはアービタ５２用の構成（例えば、調停方式の選択、選択された調停方式の構成のプログラミング）をも格納する。構成レジスタ３８Ｈはアービタ６６用の調停の構成を格納する。
【００４４】
Ｔｘ制御回路５６は記述子とＤＭＡデータを取得するためにプリフェッチを実装するが、他の実施形態はプリフェッチを実装しない場合もあることに留意されたい。したがって、一般に、送信ＤＭＡ転送（及びループバック回路４０へのＤＭＡ転送）を行うように構成されたＴｘエンジン５６、又はＴｘ制御回路５６がある。
【００４５】
この説明はＤＭＡ転送のためのバッファとバッファ・ポインタに言及したものであることに留意されたい。（６２、６４、６８などのハードウエア記憶バッファではなく）バッファ・ポインタによって指されるバッファは連続記憶領域を備えている。（送信のために、又はＤＭＡデータを受信するための領域として）ＤＭＡデータを格納するためにソフトウェアが記憶領域を割り当てる。バッファ・ポインタは、ホストのアドレス空間内の記憶領域のアドレスを備えている。例えば、バッファ・ポインタは記憶領域のベース、又は記憶領域の境界を指している。
【００４６】
次に図３を参照すると、オフロード・エンジン４４の一実施形態のブロック図が示されている。図示した実施形態において、オフロード・エンジン４４は入力バッファ８０と、出力バッファ８２と、セキュリティ回路のセット８４Ａ〜８４Ｄと、ＣＲＣ生成器８６と、チェックサム生成器８８とを含んでいる。入力バッファ８０はＴｘ制御回路５６と、セキュリティ回路８４Ａ〜８４Ｄと、ＣＲＣ生成器８６と、チェックサム生成器８８とに結合される。出力バッファ８２はセキュリティ回路８４Ａ〜８４Ｄと、ＣＲＣ生成器８６と、チェックサム生成器８８とに結合される。出力バッファ８２はオフロードＦＩＦＯ４８にも結合される。一実施形態のセキュリティ回路８４Ａが図３に、より詳細に示されており、セキュリティ回路８４Ｂ〜８４Ｄは同様のものでよい。セキュリティ回路８４Ａはハッシュ回路９０と暗号回路９２とを含んでいる。ハッシュ回路９０及び暗号回路９２は双方とも入力バッファ８０と出力バッファ８２とに結合される。加えて、ハッシュ回路９０の出力は、入力として暗号回路９２に結合されており、暗号回路９２の出力は、入力として「バタフライ」構造でハッシュ回路９０に結合される。
【００４７】
セキュリティ回路８４Ａ〜８４Ｄは、パケット処理のセキュリティ機能をオフロードするために様々なオペレーションを行うように構成される。特に、セキュリティ回路８４Ａ〜８４Ｄは、暗号化／復号化（集合的に暗号化、又は暗号機能と呼ばれる）、及び様々なセキュア・パケット仕様（例えばセキュア・インターネット・プロトコル（ＩＰＳｅｃ）、又はセキュア・ソケット・レイヤー（ＳＳＬ））に含まれるハッシュ関数を実行するように構成される。
【００４８】
一般的には、セキュア・パケット・プロトコルを使用する通信には、エンドポイントがそれが使用することができるプロトコルと通信する交渉セッション、エンドポイントがサポートするセキュリティ方式、暗号化とハッシュのタイプ、キーの交換又は認証などが含まれる。その場合、合意に基づくプロトコル、暗号化などを使用したバルク転送段階がある。バルク転送中、（例えばインターフェース回路１６の１つから受信ＤＭＡパスを経て）パケットがホスト１２内に受信される。ソフトウェアは、キー、暗号化アルゴリズムなどを得るためにメモリ内のデータ構造を調査し、パケットを復号化、及び／又は認証するためにオフロード・エンジン４４を介してＤＭＡ転送を準備する。同様に、ソフトウェアはセキュア送信のためのパケットを準備し、パケットを暗号化及び／又は認証するためにオフロード・エンジン４４を介してＤＭＡ転送を使用する。
【００４９】
ハッシュ回路９０は、パケットの認証に使用できる様々なハッシュ関数を実装している。一般的には、ハッシュはパケットの少なくとも一部にわたって計算され、ハッシュ結果がパケット内に含められる。パケットが転送先で受信されると、パケット内のいずれかのフィールドが変更されたか否かを検知するために（ひいてはパケットがその転送元からの転送で修正されたか否かを検知するために）、ハッシュがチェックされる。一実施形態において、ハッシュ回路９０内で以下のハッシュ関数がサポートされている：メッセージ・ダイジェスト５（ＭＤ−５）／セキュア・ハッシュ・アルゴリズム−１（ＳＨＡ−１）、及びハッシュ・メッセージ認証コード（ＨＭＡＣ）。他の実施形態はＳＨＡ−２を実装している。他の実施形態は、上記の関数、及び他の関数のサブセット又はスーパーセットを含む他のいずれかのハッシュ関数のセットを実装している。
【００５０】
暗号回路９２を、暗号化関数を実行するように構成する。セキュア・パケット仕様に応じて、場合によってはハッシュ・データを含むパケットの少なくとも一部に暗号化関数が適用される。暗号化関数のいずれものセットは、様々な実施形態でサポートされている。例えば、一実施形態において、以下の暗号化／復号化アルゴリズムが暗号回路９２に実装さる。すなわち、データ暗号化標準（ＤＥＳ）、トリプル・データ暗号化標準（３ＤＥＳ）、先進データ暗号化標準（ＡＥＳ）、Ｋａｓｕｍｉ、主張されているロンのコード４（ＡＲＣ４）、及び／又はロンのコード４（ＲＣ４）である。
【００５１】
ある場合には、認証及び暗号化の双方の関数が使用される場合は、送信用にパケットが準備されるときに最初に暗号化が行われ、次いで暗号化されたデータ（例えばＩＰＳｅｃ）に認証ハッシュが実行される。別の場合は、認証ハッシュが最初に実行され、二番目に（ハッシュ・データを含む）パケットの暗号化が実行される（例えばＳＳＬ）。いずれの場合も、認証ハッシュと復号化は受信されたパケットでは逆の順序で行われる。
【００５２】
セキュリティ回路８４Ａ〜８４Ｄは、回路９０と９２との間のバタフライ接続を介して、単一のＤＭＡ転送でのどの順序でのデータの暗号化及びハッシュもサポートできる。すなわち、暗号化が最初に実行される場合は、暗号化（又は復号化される）データでハッシュ関数を計算するために、セキュリティ回路８４Ａに供給されるデータが暗号回路９２に送られ、暗号回路９２の出力がハッシュ回路９０の入力に送られる。最初にハッシュが実行される場合は、セキュリティ回路８４Ａに供給されるデータがハッシュ回路９０に送られ、ハッシュ回路９０の出力が暗号回路９２の入力に送られる。セキュリティ回路８４Ａ〜８４Ｄは、所定のＤＭＡ転送でハッシュ関数のみ又は暗号化関数のみの実行をもサポートする。セキュリティ回路８４Ａ〜８４Ｄに向けられるＤＭＡ転送用のＤＭＡ記述子からの制御情報が、セキュリティ回路８４Ａ〜８４Ｄを経たデータの伝送を制御する。
【００５３】
図示した実施形態は、４つのセキュリティ回路８４Ａ〜８４Ｄを示している。他の実施形態は、１つのセキュリティ回路を含む任意の数のセキュリティ回路を含んでもよい。一実施形態において、セキュリティ回路８４Ａ〜８４Ｄは、システム１０で使用されるシステム・クロックの周波数の２倍の周波数でクロックされ、システムのクロック周期ごとに、（１つはシステム周期クロックの最初の半期で実行され、もう１つはシステムのクロック周期の第２の半期で実行される）２つのオペレーションを受け取る。したがって、セキュリティ機能を実行するために、ソフトウェアによって選択される８つのセキュリティ論理回路がある。
【００５４】
ＣＲＣ生成器８６を、ＣＲＣ生成を指定するＤＭＡ転送で供給されるデータ上にＣＲＣデータを生成するように構成する。ＣＲＣ生成を、受信されたパケットからのＣＲＣデータをチェックするために使用する。例えば、ＣＲＣ生成器８６内で生成されたデータが、受信されたパケット内の対応するＣＲＣデータと比較される。あるいは、受信されたパケット内のＣＲＣデータを、ＣＲＣ生成器８６を経たＤＭＡ転送に含めてもよく、受信されたパケット内のエラーを検知するために、その結果を所定値と比較してチェックする。ある実施形態において、２つ以上のＣＲＣ生成器８６がある。さらに、オフロード・エンジン４４内に物理的に備えられるものよりも多くの論理的ＣＲＣ生成器を備えるため、セキュリティ回路８４Ａ〜８４Ｄと同様に、ＣＲＣ生成器８６（１つ又は複数）がシステムのクロック周期数の２倍の周波数でクロックされる。特定の一実施形態において、等しい数の論理ユニット（８）をセキュリティ回路８４Ａ〜８４Ｄに備えるため、システムのクロック周波数の２倍の周波数でクロックされる４つのＣＲＣ生成器８６がある。
【００５５】
チェックサム生成器８８を、チェックサム生成を指定するＤＭＡ転送で供給されるデータ上にチェックサムを生成するように構成する。チェックサム生成を、受信されたパケットからのチェックサム・データをチェックするために使用する。例えば、チェックサム生成器８８内で生成されたデータが、受信されたパケット内の対応するチェックサムと比較される。あるいは、受信されたパケット内のチェックサム・データを、チェックサム生成器８８を経たＤＭＡ転送に含めてもよく、受信されたパケット内のエラーを検知するために、その結果を所定値と比較してチェックする。ある実施形態において、２つ以上のチェックサム生成器８８がある。
【００５６】
入力バッファ８０は、ターゲット回路８４Ａ〜８４Ｄ、８６、又は８８がデータに対してオペレーションを行うまで、Ｔｘ制御回路５６によって供給されるデータを一時的に格納する。ターゲット回路８４Ａ〜８４Ｄ、８６、８８は、オフロードＦＩＦＯ４８に書き込まれる出力データを出力バッファ８２に出力する。別の実施形態において、入力バッファ８０、及び／又は出力バッファ８２を含めなくてもよい。
【００５７】
図４は、システム１０の一実施形態で実装されてもよいＤＭＡのモデルの一実施形態を示すブロック図である。前述のように、ＤＭＡ転送は、転送元のアドレス空間又はインターフェース（ブロック１００）から転送先のアドレス空間又はインターフェース（ブロック１０２）へと行われる。ＤＭＡ転送は図４のブロック１０４で表わされる。場合によって、ＤＭＡ転送は、結果を生成するためにＤＭＡデータに対する１つ又は複数のオペレーション、又は関数の実行（ブロック１０６）を含む。結果はＤＭＡブロック１０４に戻され、ターゲットのアドレス空間に供給される。ある場合は、結果を、ターゲットのアドレス空間に書き込むことができるＤＭＡデータに変換する。別の場合は、結果をＤＭＡデータから分離し、ＤＭＡデータを増大して（例えばＤＭＡデータの終端に添付）、又は別個の位置内に（例えば、ＤＭＡ転送用のＤＭＡ記述子内に）格納する。
【００５８】
図４は、ある場合は単一のＤＭＡ転送を示す。別の場合は、図４のモデルを完成させるために複数のＤＭＡ転送を使用する。例えば、関数１０６をループバック回路４０（又は、図２の実施形態の場合はそのコンポーネント）によって実行する。したがって、図示した実施形態において、インターフェース回路１６をターゲットとするＤＭＡ転送で関数を実行したい場合は、２つのＤＭＡ転送を行う。第１のＤＭＡ転送は、転送元のアドレス空間からターゲットのアドレス空間に対して行われ、実行される所望の関数を指定する。引き続いて、転送元として第１のＤＭＡ転送のターゲットのアドレス空間、及びターゲットとして所望のインターフェース回路を使用して第２のＤＭＡ転送を行う。
【００５９】
例えば、ＭＡＣ３４Ａ、３４Ｂを介して転送用のソフトウェアを使用してパケットを準備してもよく、パケットをホスト１２内のメモリに格納する。暗号化及び／又はハッシュを使用したセキュア転送が望ましいことがあり、したがって、ソフトウェアがホスト１２内の第１の記憶領域から第２の記憶領域への第１のＤＭＡ転送を構築してもよく、第１のＤＭＡ転送がオフロード・エンジン４４内で暗号化及び／又はハッシュを指定している。ソフトウェアはさらに、第２の記憶領域からターゲットＭＡＣ３４Ａ、３４Ｂへの第２のＤＭＡ転送を準備する。同様に、パケットは、ＤＭＡとしてホスト１２内のメモリ内に受信されて、パケットのハッシュ及び／又は復号化をチェックするため、ソフトウェアがオフロード・エンジン４４を介したＤＭＡ転送を行う。
【００６０】
別の実施形態は、データがインターフェース回路１６に送信される際に、関数の適用を許容している。例えば一実施形態において、ＴＣＰパケットのＴＣＰヘッダ内に含まれるチェックサムを生成するため、ＩＯＢ２２内で部分的チェックサムの生成がサポートされる。このようなパケット向けにＤＭＡ転送が指定されると、ＩＯＢ２２がこのパケット・データをＩＯＭ２４に累積し、各キャッシュ・ラインごとに部分的チェックサムを生成す。ＩＯＢ２２からの各キャッシュ・ライン及び、部分的チェックサムが計算されなかったデータに、部分的チェックサムを使用してＤＭＡコントローラ１４内で最終チェックサムが生成されてもよく、ＤＭＡコントローラ１４が、計算されたチェックサムをＴＣＰヘッダに挿入する。別の実施形態は、関数が実行され、データが送信される単一のＤＭＡ転送の一部として、ループバック回路４０の出力が直接インターフェース回路１６に送られることを許容している。さらに、別の実施形態は、受信ＤＭＡ転送中に受信されたＤＭＡデータ上で関数を実行するため、Ｒｘ  ＤＭＡデータ・パスからのデータがループバック回路４０に入力されることを許容している。
【００６１】
次に図５を参照すると、記述子のデータ構造とバッファ・ポインタのデータ構造を格納する記憶領域１１０のブロック図が示されている。図５の実施形態において、記述子のデータ構造は記述子リングのセット１１２Ａ〜１１２Ｎを含んでいる。ＤＭＡコントローラ１４によってサポートされる各ＤＭＡチャネル（例えば図５のチャネル０からチャネルＮ）ごとに１つの記述子がある。すなわち、ＤＭＡチャネルと記述子リングとの間には１対１の対応関係があり、所定のＤＭＡチャネル用のＤＭＡ転送は、チャネルに割り当てられた記述子リング１１２Ａ〜１１２Ｎ内に対応する記述子を有している。加えて、図５に示された実施形態において、バッファ・ポインタのデータ構造はバッファ・ポインタ・リングのセット１１４Ａ〜１１４Ｍを含んでいる。インターフェース回路１６ごとに（例えば図５では、インターフェース回路０からＭ、ただしＭ＋１はインターフェース回路１６の数でよい）、バッファ・ポインタ・リングがある。すなわち、インターフェース回路と記述子リングとの間には１対１の対応関係があり、そのインターフェースで受信されるＤＭＡ用に使用されるバッファ・ポインタが、そのインターフェース回路に割り当てられたバッファ・ポインタ・リング１１４Ａから１１４Ｍから取り出される。
【００６２】
各記述子リング１１２Ａ〜１１２Ｎは対応するＤＭＡチャネル用の記述子のセットを備えている。送信ＤＭＡチャネル用には、記述子はリング内の最初の記述子から最後の記述子までリング内に含まれる順序で処理され、次いで最後の記述子が処理された後、リング内の最初の記述子に折り返される。したがって、任意の時点で、リング内のどのリングも、次に処理されるべき「現在の記述子」であると見られる。前述のように、ソフトウェアが、多様な方式でのＤＭＡチャネルでの処理に利用できる記述子の数を制御している。したがって、（対応する記述子リング内に）所定の送信ＤＭＡチャネルで利用できる記述子があれば、ＤＭＡコントローラ１４は（他のＤＭＡチャネルを有するリソースと調停して）指定のＤＭＡ転送を実行する。本実施形態の受信ＤＭＡ転送の場合は、ＤＭＡ転送がそのチャネルで受信されると、対応する記述子リング内の記述子が消費される。ＤＭＡコントローラ１４は、受信されたＤＭＡデータを格納するために使用されるバッファ・ポインタ（１つ又は複数）で現在の記述子、及び転送ステータス情報などのＤＭＡ転送に関連する他の情報を書き込んでもよい。
【００６３】
別の実施形態は他のデータ構造（例えば記述子のリンクされたリスト）を使用する。各記述子リング１１２Ａ〜１１２Ｎのベース・アドレスが（例えば、チャネルが送信チャネルであるか受信チャネルであるかに応じて、構成レジスタ３８Ｄ又は３８Ｆ内にプログラムされて）ＤＭＡコントローラ１４に提供される。記述子リング１１２Ａ〜１１２Ｎの他の属性（例えば範囲）もプログラムされる。ある実施形態において、所定のリング内の記述子は固定サイズのものでよいので、所定の記述子はリングのベース・アドレスから固定的にオフセットされる。別の実施形態において、記述子は可変サイズのものでよい。さらに別の実施形態において、記述子は、構成レジスタ３８Ｄ又は３８Ｆ内のプログラム可能な属性に応じて、固定サイズのものでも可変サイズのものでもよい。属性はチャネルごとにプログラム可能なものでもよく、又はチャネル全体としてプログラムされる。
【００６４】
各バッファ・ポインタ・リング１１４Ａ〜１１４Ｍは、対応するインターフェースからのＲｘ  ＤＭＡ転送からのＤＭＡデータを格納するために使用されるソフトウェアによって割り当てられたメモリ内のバッファを指すバッファ・ポインタを備えている。記述子リング１１２Ａ〜１１２Ｎと同様に、ソフトウェアは、バッファ・ポインタ・リング１１４Ａ〜１１４Ｍ内のバッファ・ポインタを任意の所望の方式でＤＭＡコントローラ１４に利用できるようにしている。各インターフェース用のバッファ・ポインタ・リングのベース・アドレスが、（例えば、図２の実施形態のＲｘプリフェッチ・エンジン６０内の構成レジスタ３８Ｅ内で）ＤＭＡコントローラ１４内にプログラムされてもよく、所定の任意の時点でバッファ・ポインタ・リング内のバッファ・ポインタの１つが、対応するインターフェース用に次に消費されるバッファ・ポインタである。
【００６５】
ＤＭＡチャネルではなく、インターフェース回路に関連するバッファ・ポインタ・リング１１４Ａ〜１１４Ｍを備えることによって、ある実施形態において、ソフトウェアはより多数のＤＭＡチャネルではなくより少数のインターフェース回路にバッファを割り当てられる。ある場合は、このメモリの割り当ての方が効率的である。そのトラヒックがどのチャネルで受信されるかをソフトウェアが前もって知る必要なく、より多くのトラヒックを扱うインターフェース回路により多くのバッファを割り当てる。ＤＭＡデータが所定のインターフェースから受信されると、そのインターフェースに割り当てられたバッファ内にデータが格納され、ＤＭＡデータが受信されるチャネル用の記述子にバッファ・ポインタが書き込まれる。どの受信ＤＭＡチャネルがＤＭＡ転送に関連しているかに応じて、記述子は記述子リング１１２Ａ〜１１２Ｎの１つにある。
【００６６】
バッファ・ポインタ・リング１１４Ａ〜１１４Ｍは、バッファ・ポインタごとのサイズ・フィールド（図５のＳｚ）をも含んでいる。サイズ・フィールドが、対応するバッファ・ポインタによって指されるバッファのサイズを示している。したがって、例えば利用可能なメモリ量、所定のインターフェース上の予測されるＤＭＡ転送のサイズなどに基づいて、ソフトウェアが異なるサイズのバッファを割り当てる。
【００６７】
次に図６を参照すると、所定のインターフェース回路についてＲｘプリフェッチ・エンジン６０の一実施形態のオペレーションを示すフローチャートが示されている。Ｒｘプリフェッチ・エンジン６０は、並行して、かつ独立して動作する各インターフェース回路ごとに図６に示されたオペレーションを実行する回路を含んでいる。容易に理解できるように、図６には特定の順序でブロックが示されているが、ブロックは図６に示されたオペレーションを実行する組み合わせの論理回路で並行して実行されてもよい。ある実施形態において、１つ又は複数のブロック又はフローチャート全体が複数のクロック周期にわたってパイプライン接続される。
【００６８】
Ｒｘプリフェッチ・エンジン６０は、（インターフェース回路に対応するバッファ・ポインタ・リング１１４Ａ〜１１４Ｍ内の）インターフェース回路用のバッファ・ポインタを利用可能であるか否か（決定ブロック１２０）、かつ、インターフェース回路にバッファ・ポインタが必要であるか否か（決定ブロック１２２）を判定する。少なくとも１つのバッファ・ポインタが利用可能であり、必要である場合は（決定ブロック１２０、１２２の「ｙｅｓ」区間）、Ｒｘプリフェッチ・エンジン６０はホスト１２内のメモリ内のバッファ・ポインタ・リング１１４Ａ〜１１４Ｍからバッファ・ポインタ（１つ又は複数）を読み出すプリフェッチ要求を生成する（ブロック１２４）。
【００６９】
バッファ・ポインタは一般に、Ｒｘプリフェッチ・エンジン６０によって未だプリフェッチされていない対応するバッファ・ポインタ・リング１１４Ａ〜１１４Ｍ内にバッファ・ポインタがあれば「利用可能」である。ソフトウェアによってバッファ・ポインタがバッファ・ポインタ・リング１１４Ａ〜１１４Ｍ内に挿入されてもよく、ソフトウェアは、前述の方式のいずれかで（例えばバッファ・ポインタ・リングのエントリ内の有効ビットを使用し、前述のＤＭＡ記述子カウントと同様のバッファ・ポインタ・リングのカウントを増分して）バッファ・ポインタが利用可能であることを指示している。同様に、バッファ・ポインタは多様な方式で「必要である」と見られる。例えば、受信ＤＭＡチャネルが有効化され、そのチャネル用にプリフェッチされたバッファ・ポインタがない場合は、バッファ・ポインタは「必要である」可能性がある。ある実施形態において、プリフェッチされるべきいくつかのバッファ・ポインタを示し、又はプリフェッチされるべき最小数と最大数のバッファ・ポインタを示すようにＲｘプリフェッチ・エンジン６０がプログラムされる。Ｒｘプリフェッチ・エンジン６０は、プログラムされた数のバッファ・ポインタのプリフェッチを試みるために、バッファ・ポインタのためのプリフェッチ要求を生成する。
【００７０】
前述のように、図６のオペレーションが、有効化された各々のインターフェース回路ごとに並行して行われる。２つ以上のプリフェッチ要求が同時に生成される場合は、Ｒｘプリフェッチ・エンジン６０はプリフェッチ要求の中から選択するための回路も含む。例えば、一実施形態において、Ｒｘプリフェッチ・エンジン６０はプリフェッチ要求の中から固定優先度方式を実装する。別の実施形態において、Ｒｘプリフェッチ・エンジン６０は、最少数のバッファ・ポインタが現在選択され、準備ができるインターフェース回路に対応するプリフェッチ要求を選択する。別の実施例として、Ｒｘプリフェッチ・エンジン６０は、現在プリフェッチされるバッファ・ポインタと、そのインターフェース回路用の所望のバッファ・ポインタ数との最大の差をどのインターフェース回路が有しているか否かに基づいて要求に重み付けする。さらにラウンドロビン又は優先度に基づく選択機構も利用してもよく、必要ならば、これらの機構はインターフェース回路間のプログラム可能な重みを含む。ポインタが各インターフェース回路ごとにプリフェッチされることを保証するため、インターフェースごとのタイムアウトなどの飢餓状態防止機構をも使用できる。
【００７１】
プリフェッチされたバッファ・ポインタが読み出されるべきＩＯＭ２４内で利用可能である場合は、ＩＯＭ／ＩＯＢインターフェース回路７０によってその旨がＲｘプリフェッチ・エンジン６０に通知される。ある実施形態において、Ｒｘプリフェッチ・エンジン６０はＩＯＭ２４からポインタの一部又は全部を読み出し、プリフェッチされたバッファ・ポインタを必要に応じてＲｘ制御回路５８に供給する。
【００７２】
次に図７を参照すると、Ｒｘ制御回路５８の一実施形態の、データの受信に応答したオペレーションを示したフローチャートが示されている。データはループバック回路４０、又はインターフェース回路１６のどちらから受信される。図７では理解し易いように、ブロックが特定の順序で示されているが、ブロックは図７に示されたオペレーションを実行する組み合わせの論理回路で並行して実行される。ある実施形態において、１つ又は複数のブロック又はフローチャート全体が複数のクロック周期にわたってパイプライン接続される。
【００７３】
Ｒｘ制御回路５８は、ＤＭＡデータを受信するためにバッファが既に使用中であるか否かを判定する（決定ブロック１３０）。バッファがＤＭＡデータを格納するために既に選択されており、未だフル状態になっていない場合は、バッファは使用中である。Ｒｘ制御回路５８を、ループバック回路４０用の各Ｒｘチャネル及び１つ又は複数のバッファ・ポインタ用の能動バッファを保持するように構成する。あるいは、ループバック回路４０はバッファ・ポインタに各データ転送を供給してもよく、Ｒｘ制御回路５８がループバック回路４０用にポインタを保持しない。バッファが使用中ではない場合は（決定ブロック１３０、「ｎｏ」区間）、Ｒｘ制御回路４８は、読み出されるバッファを識別するために次のバッファ・ポインタを選択する。ループバック回路４０からのＤＭＡ転送用には、ループバック回路４０によって次のバッファ・ポインタが提供される。インターフェース回路１６からのＤＭＡ転送用には、Ｒｘプリフェッチ・エンジン６０から次のバッファ・ポインタが提供され、Ｒｘ制御回路５８はＲｘプリフェッチ・エンジン６０にポインタの消費を指示している。
【００７４】
いずれの場合も、Ｒｘ制御回路５８は受信されたデータをバッファに書き込んでもよい（ブロック１３４）。すなわち、Ｒｘ制御回路５８はＩＯＭ／ＩＯＢインターフェース回路７０に対してＤＭＡデータをメモリに書き込むための書き込み要求を生成している。Ｒｘ制御回路５８は、少なくともインターフェース回路１６から受信されたデータについて、バッファがフル状態である場合にその旨を判定するため、バッファに書き込まれたバイト数を監視している。ある実施形態において、ループバック回路４０によってバッファのサイズが提供され、Ｒｘ制御回路５８がループバック転送についてもバッファのフル状態を監視している。バッファがフル状態である場合、又は転送元（ループバック回路４０、又はインターフェース回路１６）によってデータ転送がＤＭＡ転送の終了であるものと示された場合は（決定ブロック１３６、「ｙｅｓ」区間）、Ｒｘ制御回路５８はＤＭＡ転送用の記述子にバッファ・ポインタを書き込む（ブロック１３８）。ループバック転送の場合は、バッファ・ポインタが転送元のＤＭＡ記述子からの転送先バッファ・ポインタであるので、受信されたデータ用のＤＭＡ記述子はなくてもよく、このような転送にはブロック１３８は実行されない。データ転送がＤＭＡ転送の終了であることが示された場合は（決定ブロック１４０、「ｙｅｓ」区間）、Ｒｘ制御回路５８は、転送処理の様々な終了を実行する（ブロック１４２）。例えば、インターフェース回路１６からのＤＭＡ転送の場合、Ｒｘ制御回路５８はＤＭＡ転送用の様々なステータスを生成し、転送用のＤＭＡ記述子のヘッダを生成し、かつデータが受信されたＲｘ  ＤＭＡチャネルに対応する記述子リング１１２Ａ〜１１２ＮにＤＭＡ記述子を書き込む。加えて、Ｒｘ制御回路５８は、ＩＯＭ／ＩＯＢ回路７０に転送終了を信号通知する。転送終了の信号通知はＩＯＭ／ＩＯＢ回路７０に対して、そのチャネルにはそれ以上のデータは供給されないことを通知する。未完了のキャッシュ・ラインがＤＭＡによって更新されると、ＩＯＭ／ＩＯＢ回路７０は更新されたデータがメモリに（例えば、ある実施形態において、インターコネクト３０での読み出し−修正−書き込みを避けるため、ＩＯＣ２６内に）格納される。
【００７５】
次に図８を参照すると、所定のＴｘ  ＤＭＡチャネル用のＴｘ制御回路５６の一実施形態のオペレーションを示すフローチャートが示されている。Ｔｘ制御回路５６は、並行して、かつ独立して動作する各Ｔｘ  ＤＭＡチャネルごとに図８に示されたオペレーションを実行する回路を含んでいる。容易に理解できるように、図８には特定の順序でブロックが示されているが、ブロックは図８に示されたオペレーションを実行する組み合わせの論理回路で並行して実行されてもよい。ある実施形態において、１つ又は複数のブロック又はフローチャート全体が複数のクロック周期にわたってパイプライン接続される。
【００７６】
Ｔｘ制御回路５６は、（チャネルに対応する記述子リング１１２Ａ〜１１２Ｎ内の）プリフェッチ用のチャネルを利用可能であるか否か（決定ブロック１５０）、かつ、チャネルに記述子が必要であるか否か（決定ブロック１５２）を判定する。少なくとも１つの記述子が利用可能であり、必要である場合は（決定ブロック１５０、１５２の「ｙｅｓ」区間）、Ｔｘ制御回路５６はホスト１２内のメモリ内の記述子リングリング１１２Ａ〜１１２Ｎから記述子を読み出す要求を生成する（ブロック１５４）。
【００７７】
図６に関して上述したバッファ・ポインタが「利用可能」であるのと同様に、記述子は一般に、Ｔｘ制御回路５６によって未だプリフェッチされていない対応する記述子リング１１２Ａ〜１１２Ｎ内に記述子があれば「利用可能」である。ソフトウェアによってＴｘ  ＤＭＡチャネル用の記述子が記述子リング１１２Ａ〜１１２Ｎ内に挿入され、ソフトウェアは、前述の方式のいずれかで（例えば記述子リングのエントリ内の有効ビットを使用し、記述子リングのカウントを増分するなどして）記述子が利用可能であることを指示する。同様に、記述子は多様な方式で「必要である」と見られる。例えば、Ｔｘ  ＤＭＡチャネルが有効化され、そのチャネル用にプリフェッチされた記述子がない場合は、記述子は「必要である」可能性がある。ある実施形態において、記述子を格納するスペースがＩＯＭ２４及び／又はバッファ６２内にある限りは、Ｔｘ制御回路５６は記述子をプリフェッチする。別の実施形態において、プリフェッチされるべきいくつかの記述子を示し、又はプリフェッチされるべき最小数と最大数の記述子を示すようにＴｘ制御回路５６がプログラムされる。Ｔｘ制御回路５６は、プログラムされた数の記述子のプリフェッチを試みるために、記述子のためのプリフェッチ要求を生成する。
【００７８】
プリフェッチされた記述子が、読み出されるＩＯＭ２４内で利用可能である場合は、Ｔｘ制御回路５６にＩＯＭ／ＩＯＢインターフェース回路７０によってその旨が通知される。Ｔｘ制御回路５６は、ある実施形態において、記述子の一部又は全部をＩＯＭ２４からバッファ６２へと読み込む。
【００７９】
Ｔｘ制御回路５６は、ＤＭＡデータが（チャネル上で送信されるべき）プリフェッチ用に利用可能であるか否か（決定ブロック１５６）、かつ、チャネル用にＤＭＡデータが必要であるか否か（決定ブロック１５８）を判定する。ＤＭＡデータが利用可能であり、必要である場合は（決定ブロック１５６及び１５８の「ｙｅｓ」区間）、Ｔｘ制御回路５６はホスト１２内のアドレス空間から（例えばホスト１２内の記憶領域から）ＤＭＡデータを読み出す要求を生成する（ブロック１６０）。
【００８０】
Ｔｘ制御回路５６が、処理されるべき記述子を有しており（例えば、記述子がチャネル用の記述子リングから次に処理される予定の記述子である場合）、記述子データがバッファ６２又はＩＯＭ２４内にあり、かつ記述子データが実行される有効ＤＭＡ転送を記述する場合は、ＤＭＡデータをプリフェッチ用に利用可能であるとする。チャネル上の以前のＤＭＡデータが既に送信される場合（又は間もなく送信される場合）は、ＤＭＡデータが必要である。ある実施形態において、Ｔｘ制御回路５６は、所定の任意の時点で幾つのＤＭＡデータがプリフェッチされるべきかをプログラム可能であり、所望の量よりも少ないＤＭＡデータがプリフェッチされ、未だ送信されていない場合は、ＤＭＡデータが必要である。ある実施形態において、ＤＭＡデータが必要な場合は、送信チャネル間の調停方式も影響を及ぼす。（例えば、チャネルが比較的長時間にわたって調停に勝たない場合は、それが調停に勝つまでＤＭＡデータは送信できないので、ＤＭＡデータは未だ必要ない。）
【００８１】
ブロック１５６、１５８、１６０により図示されるオペレーションは、ブロック１５０、１５２、１５４のオペレーションから（プリフェッチされた記述子がＤＭＡデータが利用可能であるかどうかを決定するために使用されること以外では）独立していてもよいことに留意されたい。したがって、ブロック１５６、１５８、１６０を実行する回路は、ブロック１５０、１５２、１５４を実行する回路から独立していてもよく、それらの回路と並行して評価することができる。
【００８２】
前述のように、図８のオペレーションは、有効化されたＴｘ  ＤＭＡチャネルごとに並行して行われもよい。２つ以上のプリフェッチ要求が同時に生成される場合は、Ｔｘ制御回路５６はプリフェッチ要求の中から選択するための回路も含んでいる。例えば、Ｔｘ制御回路５６は、最少数の記述子又は最少量のＤＭＡデータが現在プリフェッチされ、準備ができるＴｘ  ＤＭＡチャネルに対応するプリフェッチ要求を選択する。別の例として、Ｔｘ制御回路５６は、現在プリフェッチされる記述子／ＤＭＡデータと、そのチャネル用の所望の記述子数／ＤＭＡデータ量との最大の差をどのＴｘ  ＤＭＡチャネルが有しているかに基づいて要求に重み付けする。さらにラウンドロビン又は優先度に基づく選択機構も利用してもよく、必要ならば、これらの機構はチャネル間のプログラム可能な重みを含む。記述子とＤＭＡデータとが、有効化されたチャネルごとにプリフェッチされることを保証するため、チャネルごとのタイムアウトなどの飢餓状態防止機構をも使用する。
【００８３】
プリフェッチされたＤＭＡデータを読み出されるべきＩＯＭ２４内で利用可能である場合は、ＩＯＭ／ＩＯＢインターフェース回路７０によってその旨がＴｘ制御回路５６に通知される。ある実施形態において、Ｔｘ制御回路５６は、ＩＯＭ２４からのＤＭＡデータの一部又は全部を読み出バッファ６２へと読み込む。加えて、Ｔｘ制御回路５６は、図９の一実施形態について図示されているように、プリフェッチされたＤＭＡデータをターゲットに送信する。図９では理解し易いように、ブロックが特定の順序で示されているが、ブロックは図９に示されたオペレーションを実行する組み合わせの論理回路で並行して実行される。ある実施形態において、１つ又は複数のブロック又はフローチャート全体が複数のクロック周期にわたってパイプライン接続される。
【００８４】
Ｔｘ  ＤＭＡチャネルがループバック回路４０（すなわち、より具体的には、ループバック回路４０内のループバック・コンポーネント）に割り当てられると（決定ブロック１６２、「ｙｅｓ」区間）、Ｔｘ制御回路５６は転送用に、かつＤＭＡデータと共に送信されるようにＤＭＡ記述子から転送先バッファ・ポインタ（１つ又は複数）を抽出する（ブロック１６４）。Ｒｘ制御回路５８にバッファのサイズが通知されるように、各転送先バッファ・ポインタのサイズ情報も提供される。ループバック回路４０は転送先バッファ・ポインタ（１つ又は複数）を受け取り、メモリに書き込まれるべきデータ（例えばコピーＤＭＡ転送の場合はオリジナルのＤＭＡデータ、又は、例えば暗号化が行われる場合は、変換されたＤＭＡデータ）をバッファ・ポインタに提供している。あるいは、ループバックの結果がＤＭＡ記述子に書き込まれる場合（例えばハッシュ結果、ＣＲＣ結果、又はチェックサム結果）は、ＤＭＡ記述子へのポインタが提供される。Ｔｘ制御回路５６は、チャネル番号、（それがある場合は）ポインタ、及び（それがある場合は）制御情報と共にデータをターゲット・インターフェース回路１６又はループバック・コンポーネント（ブロック１６６）に送信する。制御情報はＤＭＡ記述子からも抽出されてもよい（例えば、所望のループバック・オペレーション（１つ又は複数）を選択する情報、インターフェース回路用の制御情報など）。
【００８５】
図９のオペレーションはＴｘ  ＤＭＡチャネルごとに並行して実行される。すなわち、Ｔｘ制御回路５６はＴｘ  ＤＭＡチャネルごとに並行して図９のオペレーションを実行する独立した回路を含んでいる。送信データ・パス上でインターフェース回路１６とループバック回路４０とに送信するチャネルを選択するため、ＤＭＡデータを送信する必要があるチャネル間で調停するための調停機構を使用する。
【００８６】
記述子リング１１２Ａ〜１１２Ｎは、様々な記述子を格納することが前述されている。一実施形態において、記述子リング１１２Ａ〜１１２Ｎは、（転送元から転送先へのＤＭＡ転送を記述する）転送記述子と、制御記述子の双方を格納する。制御記述子はＤＭＡ転送を指定できないが、その代わりにチャネルからの制御情報をエンコードできる。例えば、構造（例えば１つ又は複数の構造レジスタ３８Ａ〜３８Ｇのコンテンツ）を指定するために制御記述子を使用する。したがって、ＤＭＡコントローラ１４、そのコンポーネント、又は実行中のシステム０の他のコンポーネントをＤＭＡ転送間で再構成するために制御記述子を使用する。したがって、ソフトウェアは例えば、第１の構成でＤＭＡ転送を実行するために１つ又は複数の転送記述子を構築し、構成を変更するために１つ又は複数の制御記述子を構築し、第２の構成でのＤＭＡ転送を実行するために１つ又は複数の追加の転送記述子を構築し、引き続いてＤＭＡチャネル上で記述子をユニットとして利用できるようにしている。ＤＭＡ転送、再構成、追加のＤＭＡ転送は全てプロセッサの介在なく実行できる。
【００８７】
明確にＤＭＡ転送を行わずにＤＭＡコントローラ１４を制御する、他のタイプの制御記述子も考えられる。例えば、タイム・トリガ記述子が処理される場合にＤＭＡチャネル上で時間遅延を生じさせるタイム・トリガ記述子が考えられる。例えば、システム１０は、遅延値がプログラムされるタイマを含み、タイマが満了するまで記述子リングの次の記述子の処理を遅延させる。タイマの遅延が、ＤＭＡコントローラ１４を「ウェイクアップ」させるためＤＭＡコントローラ１４に対するトリガ事象を生成する。様々な実施形態で、ユーザーはタイマに遅延値をプログラムしてもよく、又はタイム・トリガ記述子に遅延値を含める。別の実施形態において、ＤＭＡコントローラ１４がタイマを実装する。タイム・トリガ記述子は多様な用途を有している。例えば、タイム・トリガ記述子に転送元のアドレス空間から転送先のアドレス空間へとコピーするコピーＤＭＡ記述子をインターリーブしている。転送元のアドレス空間は１つ又は複数のメモリ・マップドＩ／Ｏレジスタ、又は他のシステム・ステータス・レジスタを備えている。したがって、タイム・トリガ記述子によって遅延されて、レジスタを読み出し、結果を転送先に書き込むために反復コピーＤＭＡ転送を使用する。コピーＤＭＡ転送はプロセッサ１８Ａ、１８Ｂ上のソフトウェア・ポーリング・ループに代わって、プロセッサを他のオペレーション用に解放する。
【００８８】
図１０はチャネル１０に対応する記述子リング１１２Ａの一実施形態のブロック図であり、記述子リング内の転送記述子内の制御記述子の埋め込みの例を示している。必要ならば図１０の方式で、（連続的に、又はリング内の異なるポイントで）２つ以上の制御記述子を埋め込んでもよい。
【００８９】
図１０では、転送記述子１７０Ａ、１７０Ｂが示され、続いて制御記述子１７２が、続いてさらに２つの転送記述子１７０Ｃ、１７０Ｄが示されている。したがって、例えば記述子１７０Ａ、１７０Ｂによって指定される２つのＤＭＡ転送は、Ｔｘ制御回路５６によって実行され、続いて制御記述子１７２の処理が行われよう。制御記述子１７２の処理に続いて、記述子１７０Ｃ、１７０Ｄによって指定される２つのＤＭＡ転送が実行される。
【００９０】
図１１は、Ｔｘ  ＤＭＡチャネルに対応する記述子リング内に転送記述子が埋め込まれる制御記述子用にＴｘ制御回路５６の一実施形態を使用する、追加処理を示すフローチャートである。Ｔｘ制御回路５６は、並行してかつ独立して動作するＴｘ  ＤＭＡチャネルごとに図１１に示されたオペレーションを実行する回路を含んでいる。容易に理解できるように、図１１には特定の順序でブロックが示されているが、ブロックは図１１に示されたオペレーションを実行する組み合わせの論理回路で並行して実行されてもよい。ある実施形態において、１つ又は複数のブロック又はフローチャート全体が複数のクロック周期にわたってパイプライン接続される。
【００９１】
Ｔｘ制御回路５６は、（例えば図８に関して記載したように）記述子がチャネル用に利用可能であり、必要であると想定して、記述子リングから記述子をプリフェッチする（ブロック１７４）。Ｔｘ制御回路５６は、記述子がＴｘ制御回路５６に戻るとこれを処理して、記述子が制御記述子であるか否かを判定する（決定ブロック１７６）。例えば、記述子ヘッダは、記述子が転送記述子であるか、制御記述子であるかを特定するタイプ・フィールドを含んでいる。記述子が転送記述子である場合は（決定ブロック１７６、「ｎｏ」区間）、Ｔｘ制御回路５６は転送記述子を処理する（ブロック１７７）。例えば、転送記述子の処理は、図８及び９に関する上記の記述子と同様でよい。
【００９２】
記述子が制御記述子である場合は（決定ブロック１７６、「ｙｅｓ」区間）、Ｔｘ制御回路は、制御記述子がタイム・トリガ記述子であるか否かを判定する（決定ブロック１７８）。制御記述子のヘッダ内でのエンコードを介して、タイム・トリガ記述子が表示される。あるいは、別の構造記述子と同様に、タイム・トリガ記述子が構造レジスタ３８Ａ〜３８Ｇにロードされる値を指定する。ロードされる値は所望の遅延を指定する。Ｔｘ制御回路５６は、ロードされる構成レジスタのレジスタ・アドレスをデコードすることによってタイム・トリガを検知する。制御記述子がタイム・トリガ記述子である場合は（決定ブロック１７８、「ｙｅｓ」区間）、Ｔｘ制御回路５６は、タイム・トリガ記述子によって指定された遅延が満了するまで、記述子リングからの次の記述子の処理を遅延させる（ブロック１８０）。制御記述子がタイム・トリガ記述子ではない場合は（決定ブロック１７８、「ｎｏ」区間）、Ｔｘ制御回路５６は制御記述子の値を使用して再構成する（ブロック１８２）。例えば、制御記述子は、構成レジスタ３８Ａ〜３８Ｇを特定するレジスタ・アドレスと、構成レジスタに書き込む値とを備えている。Ｔｘ制御回路５６が書き込みを行わせる。あるいは、制御記述子は、レジスタ・アドレスのリストを格納するメモリ・バッファへのバッファ・ポインタ、及びこれらのレジスタに書き込まれる値を含んでいる。したがって、制御記述子を使用して比較的大量の構成が実行される。ある実施形態において、制御記述子を使用することによって、プロセッサ１８Ａ、１８Ｂで実行される、各構成レジスタへの書き込み命令を無くす。
【００９３】
図１２から１６は、ＤＭＡコントローラ１４の一実施形態による様々なタイプの記述子の例を示す。一般に、記述子はヘッダ、場合によって、結果（例えばループバック回路４０によって生成される結果）を格納するデータ・フィールド、及びＤＭＡデータを格納するバッファを指す１つ又は複数のバッファ・ポインタ（転送元バッファ・ポインタ）又はＤＭＡデータを格納するために使用されてもよいバッファを指す１つ又は複数のバッファ・ポインタ（転送先バッファ・ポインタ）を備えている。
【００９４】
本実施形態において、記述子は、それらがＤＭＡを受信するのか送信するのかに基づいて、又は、選択された場合にループバック回路４０によって実行される関数に基づいて変化する。受信記述子はＲｘ  ＤＭＡ転送用に使用され、他のタイプの記述子はＴｘ    ＤＭＡ転送及びループバック機能によって使用される。ＤＭＡコントローラ１４（及び、より具体的には、一実施形態ではＴｘ制御回路５６）は、所定のＴｘ  ＤＭＡチャネルのインターフェース回路１６への、又はループバック回路４０内の機能への割り当てに基づいて、そのチャネル用の記述子リング内の記述子のフォーマットを決定する。
【００９５】
図１２から１６には様々なフィールド（例えば、特にヘッダ・フィールド）が詳細に示されている。図１２から１６にはある一定の情報が示されているが、図示された情報に加えた、又は図示された情報のサブセットに加えた、又は図示された情報の代替としての他の情報を除外することを意図するものではない。様々な実施形態で、所望に応じて様々な追加の情報が含まれる。
【００９６】
図１２は、受信記述子１９０の一実施形態のブロック図である。受信記述子１９０は、Ｒｘ制御回路５８によって生成され、Ｒｘ  ＤＭＡチャネルに対応する記述子リング１１２Ａ〜１１２Ｎに書き込まれる記述子のフォーマットである。図１２の実施形態において、受信記述子１９０は、（一実施形態について図１２に分解図で示されている）ヘッダ・フィールド１９２と、場合によるハッシュ結果フィールド１９４と、１つ又は複数のバッファ・ポインタ・フィールド１９６Ａ〜１９６Ｎとを含んでいる。各バッファ・ポインタ・フィールド１９６Ａ〜１９６Ｎは、バッファのサイズによってエンコードされるサイズ・フィールドと、バッファへのポインタでエンコードされるポインタ・フィールドとを含む。Ｒｘ制御回路５８は、受信されたＤＭＡデータを格納するためにバッファ・ポインタ・リング１１４Ａ〜１１４Ｍから使用されるバッファ・ポインタでバッファ・ポインタ・フィールド１９６Ａ〜１９６Ｎを書き込むように構成される。
【００９７】
受信ヘッダ・フィールド１９２の分解図は、タイプ・フィールド１９２Ａ、スタイル・フィールド１９２Ｂ、ハッシュ受信フィールド１９２Ｃ、バッファ・カウント・フィールド１９２Ｄ、パケット長フィールド１９２Ｅ、ステータス・フィールド１９２Ｆを含んでいる。タイプ・フィールド１９２Ａは、例えば制御記述子又は転送記述子のような記述子のタイプをエンコードする。タイプ・フィールド１９２Ａ（及び他の記述子の場合の、下記の他の同様のタイプ・フィールド）は、図１６に示された制御記述子を除く記述子を転送記述子として特定する。スタイル・フィールド１９２Ｂは、バッファ・ポインタ・フィールド１９６Ａ〜１９６Ｎ内のバッファ・ポインタが転送先と転送先の双方のポインタを含むのか、又は（転送元がＲｘ  ＤＭＡ転送用のインターフェース回路であるため）転送先のポインタだけを含むのかを意味する記述子のスタイルをエンコードする。ハッシュ受信フィールド１９２Ｃは、場合によるハッシュ結果フィールド１９４が記述子内に含まれるか否かを示すために使用される。バッファ・カウント・フィールド１９２Ｄは、受信されたＤＭＡデータを格納するために使用されるバッファ数のカウントを、ひいてはバッファ・ポインタ・フィールド１９６Ａ〜１９６Ｎの数でエンコードされる。パケット長フィールド１９２Ｅは、バッファ内に（例えばバイトで）格納されるパケットの長さでエンコードされる。ステータス・フィールド１２２Ｆは、Ｒｘ制御回路５８によって生成されるステータス（例えばエラー表示）、及び／又は転送元インターフェース回路１６によって提供されるステータスを含む、転送の様々なステータスを含んでいる。Ｒｘ制御回路５８は、ＤＭＡ転送の終了時に受信ヘッダ１９２を書き込む。
【００９８】
図１３は、送信記述子２００の一実施形態のブロック図である。送信記述子２００は、インターフェース回路１６への、特にＭＡＣ３４Ａ、３４ＢへのＴｘ  ＤＭＡ転送用にＴｘ制御回路５６によって使用される記述子フォーマットであり、インターフェース回路１６に割り当てられるＴｘ  ＤＭＡチャネルに対応する記述子リング１１２Ａ〜１１２Ｎにソフトウェアによって書き込まれる。図１３の実施形態において、送信記述子２００は、（一実施形態について図１３に分解図で示されている）ヘッダ・フィールド２０２、及び１つ又は複数のバッファ・ポインタ・フィールド２０４Ａ〜２０４Ｎを含んでいる。各バッファ・ポインタ・フィールド２０４Ａ〜２０４Ｎは、バッファのサイズでエンコードされるサイズ・フィールドと、バッファへのポインタでエンコードされるポインタ・フィールドとを含む。Ｔｘ制御回路５６を、ＤＭＡデータを送信用にバッファからプリフェッチするためにバッファ・ポインタ・フィールド２０４Ａ〜２０４Ｎを読み出すように構成する。
【００９９】
送信ヘッダ・フィールド２０２の分解図は、タイプ・フィールド２０２Ａ、スタイル・フィールド２０２Ｂ、ＭＡＣ構成フィールド２０２Ｃ、パケット長フィールド２０２Ｄ、パケット情報フィールド２０２Ｅを含む。タイプ・フィールド２０２Ａとスタイル・フィールド２０２Ｂは上記のタイプ・フィールド１９２Ａとスタイル・フィールド１９２Ｂと同様のものでよい。ＭＡＣ構成フィールド２０２Ｃは、ＤＭＡ転送によってターゲットにされるＭＡＣ３４Ａ、３４Ｂ用の様々なパケット特有のＭＡＣ構成情報でエンコードされる。例えば、ＭＡＣ構成フィールド２０２Ｃは、仮想ローカル・エリア・ネットワーク（ＶＬＡＮ）構成（例えば、無し、挿入、除去、又は修正）、ＣＲＣ構成（例えば、無し、挿入ＣＲＣ、パッドＣＲＣ、修正ＣＲＣ）、及びＭＡＣ転送元アドレスを修正するか否かを含む。パケット長フィールド２０２Ｄは、（例えばバイトで）バッファ内に格納されるパケットの長さでエンコードされる。パケット情報フィールド２０２Ｅは、パケットを記述する様々な情報（例えばＩＰヘッダ長、イーサーネットのヘッダ長、パケットのタイプ（ＴＣＰ／ＵＤＰ）、チェックサム有効化など）でエンコードされる。
【０１００】
図１４はコピー記述子２１０の一実施形態のブロック図である。コピー記述子２１０は、コピーＦＩＦＯ４２を使用する（ホスト１２内の１つの記憶領域からホスト１２内の別の記憶領域への）コピーＤＭＡ転送用のＴｘ制御回路５６によって使用される記述子のフォーマットである。したがって、コピー記述子２１０は、コピーＦＩＦＯ４２に割り当てられるＴｘ  ＤＭＡチャネルに対応する記述子リング１１２Ａ〜１１２Ｎで使用される。図１４の実施形態において、コピー記述子２１０は、（一実施形態について図１４に分解図で示されている）ヘッダ・フィールド２１２、及び１つ又は複数のバッファ・ポインタ・フィールド２１４Ａ〜２１４Ｎを含んでいる。各バッファ・ポインタ・フィールド２１４Ａ〜２１４Ｎは、バッファのサイズでエンコードされるサイズ・フィールドと、バッファへのポインタでエンコードされるポインタ・フィールドとを含んでいる。加えて、この実施形態において、各バッファ・ポインタ・フィールド２１４Ａ〜２１４Ｎは、（転送元ＤＭＡデータを格納するバッファの位置を特定する）転送元ポインタ、又は（ＤＭＡデータが格納されるべきバッファの位置を特定する）転送先ポインタのいずれかとしてポインタを特定する転送元／転送先（Ｓ／Ｄ）フィールドを含んでいる。送信用の転送元バッファからＤＭＡデータをプリフェッチし、Ｒｘ制御回路５８への送信用にコピー記述子ＦＩＦＯ４２に転送先ポインタを提供するために、バッファ・ポインタ・フィールド２１４Ａ〜２１４Ｎを読み出すように、Ｔｘ制御回路５６を構成する。
【０１０１】
一実施形態において、コピー記述子２１０内の所定の転送先ポインタに２つ以上の転送元ポインタがある。ＤＭＡコントローラ１４は、転送元バッファからのデータをコピー記述子２１０内にリストされた順序で転送先バッファにコピーする。したがって、ＤＭＡコントローラ１４は複数の記憶領域から拡散したデータをコピー・オペレーションで転送先の記憶領域へと収集することをサポートしている。同様に、一実施形態において、コピー記述子２１０内の所定の転送元ポインタに２つ以上の転送先ポインタがある。このような実施形態において、転送元バッファからのデータの拡散がサポートされる。
【０１０２】
送信ヘッダ・フィールド２１２の分解図は、タイプ・フィールド２１２Ａ、スタイル・フィールド２１２Ｂ、転送元タイプ・フィールド２１２Ｃ、転送先タイプ・フィールド２１２Ｄ、論理ブロック長フィールド２１２Ｅを含んでいる。タイプ・フィールド２１２Ａとスタイル・フィールド２１２Ｂは、上記のタイプ・フィールド１９２Ａとスタイル・フィールド１９２Ｂと同様のものでよい。転送元タイプ・フィールド２１２Ｃと転送先タイプ・フィールド２１２Ｄは、ＤＭＡ転送の進展と共に転送元バッファ・ポインタ（１つ又は複数）と転送先バッファ・ポインタ（１つ又は複数）をいかにして修正するべきかを指示するためにエンコードされる。例えば、各バッファ・ポインタは、一実施形態では以下のタイプのうちの１つである。すなわち、逐次増分、逐次減分、又は（例えば１、２、４、８、又は１６バイトなどの様々な固定幅を有する）固定タイプである。逐次増分は、各データ送信後に、送信されたデータ量だけ増分されることを示している。逐次減分は同様であるが、アドレスが減分される。逐次増分又は逐次減分は、データが逐次記憶領域に書き込まれる記憶領域用に使用される。固定タイプのオプションは、アドレスがレジスタ又はデバイスのポートにマッピングされるメモリである場合に使用され、幅はレジスタ／デバイスへの各送信幅である。転送元タイプ・フィールド２１２Ｃもゼロ用のエンコーデイングを有し、ゼロ・ブロックを転送先に書き込むために使用される。転送先タイプ・フィールド２１２Ｄも、転送元ＤＭＡデータはプリフェッチされるが、転送先には書き込まれない、プリフェッチ用のみのエンコーデイングを有している。ある実施形態において、論理ブロック長フィールドが複数のＤＭＡ記述子に亘る論理ＤＭＡブロックの長さを示すために使用される。すなわち、論理ＤＭＡオペレーションは実際に複数の記述子を使用して指定され、論理ＤＭＡブロックの長さは、論理ＤＭＡオペレーションの長さ（例えば複数の記述子に亘るデータ転送の総計）である。
【０１０３】
ＸＯＲ回路４６は、送信ＤＭＡ記述子２００と同様の記述子を使用する。複数のチャネルがＸＯＲ回路４６に割り当てられ、各チャネル内の記述子がＸＯＲ転送元の１つを指定する。第１のチャネルが、ＸＯＲ結果の転送先（１つ又は複数の転送先バッファ）をも指定する。
【０１０４】
図１５はオフロード記述子２２０の一実施形態のブロック図である。オフロード記述子２２０は、オフロード・エンジン４４を指定するＤＭＡ転送用にＴｘ制御回路５６によって使用される記述子のフォーマットである。したがって、オフロード記述子２２０は、オフロード・エンジン４４に割り当てられるＴｘ  ＤＭＡチャネルに対応する記述子リング１１２Ａ〜１１２Ｎ内で使用される。図１５の実施形態において、オフロード記述子２２０は、（一実施形態について図１５に分解図で示されている）ヘッダ・フィールド２２２、オプションとしての結果保存フィールド２２４、及び１つ又は複数のバッファ・ポインタ・フィールド２２６Ａ〜２２６Ｎを含む。各バッファ・ポインタ・フィールド２２６Ａ〜２２６Ｎは、バッファのサイズによってエンコードされるサイズ・フィールドと、バッファへのポインタでエンコードされるポインタ・フィールドとを含んでいる。加えて、この実施形態において、各バッファ・ポインタ・フィールド２２６Ａ〜２２６Ｎは、（転送元ＤＭＡデータを格納するバッファの位置を特定する）転送元ポインタ、又は（ＤＭＡデータが格納されるべきバッファの位置を特定する）転送先ポインタのいずれかとしてポインタを特定する転送元／転送先（Ｓ／Ｄ）フィールドを含んでいる。Ｔｘ制御回路５６を、転送元バッファからＤＭＡデータをプリフェッチし、それがある場合は転送先バッファを特定するために、バッファ・ポインタ・フィールド２２６Ａ〜２２６Ｎを読み出すように構成する。変換されたＤＭＡデータがオフロード・エンジン４４の結果である場合は、変換されたＤＭＡデータ用の転送先ポインタがある。（例えば結果保存フィールド２２４に格納するために）結果がＤＭＡデータとは別個に生成される場合は、場合によっては転送先ポインタがなくてもよく、ＤＭＡデータが転送先に書き込まれない。
【０１０５】
オフロード・ヘッダ・フィールド２２２の分解図は、タイプ・フィールド２２２Ａ、スタイル・フィールド２２２Ｂ、結果保存フィールド２２２Ｃ、暗号化モード・フィールド２２２Ｄ、機能数フィールド２２２Ｅ、論理ブロック長フィールド２２２Ｆ、オフロード制御フィールド２２２Ｇを含んでいる。タイプ・フィールド２２２Ａとスタイル・フィールド２２２Ｂは、上記のタイプ・フィールド１９２Ａとスタイル・フィールド１９２Ｂと同様のものでよく、論理ブロック長フィールド２２２Ｆは上記の論理ブロック長フィールド２１２Ｅと同様のものでよい。結果保存フィールド２２２Ｃは、結果保存フィールド２２４がオフロード・ヘッダ記述子２２０内に含まれているか否かを示すためにエンコードしてもよく、さらに結果保存フィールド２２４のサイズ（例えば一実施形態において、６４ビット、１９２ビット、又は３２０ビット）をも表示している。結果保存フィールド２２４は、結果が変換されたＤＭＡデータではない場合、又は変換されたＤＭＡデータに加えて結果が生成された場合は、オフロード・エンジン４４によって生成された結果を格納するために使用されている。暗号化モード・フィールド２２２Ｄは、データがある場合はそれを処理するため、オフロード・エンジン４４用に必要なモードでエンコードされる。暗号化モードは、無し、シグニチャのみ（例えば生成器８６又は８８内のＣＲＣ又はチェックサム）、暗号化のみ、復号化のみ、（ハッシュが先、又は暗号化が先のオプションを伴う）暗号化とハッシュ、又は（ハッシュが先、又は復号化が先のオプションを伴う）復号化とハッシュを含んでいる。機能数フィールド２２２Ｅは、セキュリティ回路８４Ａ〜８４Ｄを使用するそれらのモードの機能数（例えば、前述のようにセキュリティ回路８４Ａ〜８４Ｄから形成された８つの論理機能の１つ）でエンコードされる。オフロード制御フィールド２２２Ｇは、ＤＭＡ転送用の追加の制御情報を含んでいる。例えば、各々のシグニチャ・ヘッダ、暗号化ヘッダ、暗号化トレーラ、ハッシュ・サイズの長さがオフロード制御フィールド２２２Ｇに含まれている。同様に、選択された暗号化／復号化（暗号）アルゴリズム、ハッシュ・アルゴリズム、ブロック暗号モードがオフロード制御フィールド２２２Ｇ内でエンコードされる。オフロード制御フィールド２２２Ｇ内に様々な他の制御ビットも含まれる。
【０１０６】
図１６は制御記述子２３０の一実施形態のブロック図である。制御記述子２３０は、いずれかのＤＭＡチャネル内にＴｘ制御回路５６によって使用される制御記述子のフォーマットでよい。図１６の実施形態において、制御記述子２３０は（一実施形態について図１６に分解図で示されている）ヘッダ・フィールド２３２と、データ又はサイズ／ポインタ・フィールド２３４とを含んでいる。データ又はサイズ／ポインタ・フィールド２３４は、構成レジスタ３８Ａ〜３８Ｇに書き込まれるインライン・データを格納してもよく、又はレジスタ・アドレスのリスト、及びレジスタに書き込まれる構成データを格納するバッファを指すバッファ・ポインタ（及びバッファ・サイズ）を格納する。
【０１０７】
制御ヘッダ・フィールド２３２の分解図は、タイプ・フィールド２３２Ａ、インライン／ポインタ・フィールド２３２Ｂ、インターフェース／機能特定（ＩＤ）フィールド２３２Ｃ、レジスタ・アドレス・フィールド２３２Ｄを含んでいる。タイプ・フィールド２３２Ａは、上記のタイプ・フィールド１９２Ａと同様のものでよく、記述子２３０を制御記述子として特定する。インライン／ポインタ・フィールド２３２Ｂは、データ又はサイズ／ポインタ・フィールド２３４が構成レジスタに書き込まれるインライン・データ、及びレジスタ・アドレスと構成データのバッファへのポインタ、又は事象を格納するか否かを表示するためにエンコードされる。インターフェース／機能ＩＤフィールド２３２Ｃは、構成データ（例えばインターフェース回路、オフロード・エンジン４４内の機能など）のターゲットを特定するためにエンコードされる。この実施形態において、レジスタ・アドレスはインターフェース／機能ＩＤにローカルであってよい。レジスタ・アドレス・フィールド２３２Ｄは、制御記述子２３０がインライン・データを有している場合はレジスタ・アドレスでエンコードされる。
【０１０８】
次に図１７を参照すると、チェックサム生成器８８の一実施形態のブロック図が示されている。図１７の実施形態において、チェックサム生成器８８は、複数の１６ビットの３：２桁上げ保存加算器（ＣＳＡ）２４０Ａ〜２４０Ｇ、全加算器２４２、１６ビットのアキュムレータ（ＡＣＣ）２４４を含んでいる。チェックサム生成器８８は、（例えばＴｘ制御回路５６からの）１２８ビット（１６バイト）入力を受けるように結合されている。１２８ビット入力は、ＣＳＡ２４０Ａ〜２４０Ｃへの入力として供給される１６ビット部分に分割される。加えて、アキュムレータ２４４の出力はＣＳＡ２４０Ｃへの入力として結合されている。各ＣＳＡ２４０Ａ〜２４０Ｃは、図１７では「Ｓ」と「Ｃ」の記号が付された和と桁上げ項を出力する。ＣＳＡ２４０Ａ〜２４０Ｃの和と桁上げ出力はＣＳＡ２４０Ｄと２４０Ｅに入力される。ＣＳＡ２４０Ｄの和と桁上げ出力、及びＣＳＡ２４０Ｅの桁上げ出力はＣＳＡ２４０Ｆに入力される。ＣＳＡ２４０Ｅの和出力、及びＣＳＡ２４０Ｆの和と桁上げ出力はＣＳＡ２４０Ｇに入力される。ＣＳＡ２４０Ｇの和と桁上げ出力は全加算器２４２に入力され、これがアキュムレータ２４４に格納される総和を生成する。
【０１０９】
ＣＳＡはＮビット入力を受け取り、桁上げを位置から位置に波及させない和と桁上げ出力項を生成する。すなわち、総和出力ビットは、他のビット位置のビットに依存しない、そのビット位置での入力の総和である。各総和ビットはそのビット位置での入力ビットの排他的論理和（ＸＯＲ）である。桁上げ出力ビットは、別のビット位置の桁上げに依存しない所定のビット位置の総和からの桁上げである。オペレーション上は、桁上げ項は次の最上位ビット位置への桁上げ（キャリー・イン）であるとされる。したがって、最下位ビット位置での桁上げビットはゼロであり、ＮビットのＣＳＡからの論理的Ｎ＋１の桁上げビットがある。
【０１１０】
矢印２４６で示されるように、ＣＳＡからの桁上げ項出力が別のＣＳＡ又は全加算器２４２への入力として供給される各ポイントで、最上位桁上げビットは、桁上げ項の最下位ビットへと折り返される。すなわち、桁上げ項の最上位桁上げビットは最上位ビット位置から削除され、常にゼロである最下位ビットの代わりに最下位ビット位置に挿入される。このようにして、各ＣＳＡと全加算器２４２への入力は常に１６ビットであり、全ての桁上げビットが入力に表わされる。図１７に示された１６ビットＣＳＡの場合は、桁上げ項出力の値は論理的に、最下位ビットが０である１７ビットである。桁上げ項出力は以下のように次のＣＳＡ（又は全加算器２４２）に入力される。
In[15:0]=桁上げ[15:1]||桁上げ[16]（及び桁上げ[0]=0は切り捨て）
【０１１１】
最上位桁上げビットの最下位桁上げビットへの折り返しは、１つのＣＳＡの桁上げ項出力と次のＣＳＡへの入力との間での線配線を介して達成される。
【０１１２】
ある実施形態において、図１７に示されているようなチェックサム生成器８８は、１回のパスで１６ビットのチェックサムを生成でき、チェックサムをアキュムレータ２４４内に格納する。この実施形態において、桁上げが折り返され、各々１２８ビットの入力がチェックサム内に累積されるとＣＳＡ２４０Ａ〜２４０Ｇ、及び全加算器２４２によって加算されるので、アキュムレータ２４４も１６ビットである。
【０１１３】
チェックサムの生成のため、１の補数和が生成される。ＣＳＡによる最上位ビットから最下位ビットへの桁上げビット出力の折り返しが、正しい１の補数和を生成するためであることが示される。
【０１１４】
ＣＳＡ２４０Ａ〜２４０Ｇは各レベルのＣＳＡのセットであるとしている。第１のレベルのＣＳＡ（ＣＳＡ２４０Ａ〜２４０Ｃ）は、チェックサム生成器への入力に結合された入力と、アキュムレータの出力に結合された入力とを有している。別のレベルでは、入力は先行するレベル（又はＣＳＡ２４０Ｇの場合は複数のレベル）でＣＳＡの出力に結合される。各レベルで、先行レベルからの桁上げ出力は、そのレベルに入力されるべき最下位ビットに折り返される最上位ビットを有している。
【０１１５】
この実施形態は、ＴＣＰ、ＩＰ、及びＩＣＭＰで使用される１６ビットのチェックサムを生成するための１６ビットＣＳＡを使用する。別の実施形態は、容量がより大きい、又はより小さいチェックサムを使用し、このような実施形態でより大型の、又は小型のＣＳＡを使用する。したがって、一般にＮビット３：２ＣＳＡが使用されている。同様に、図示した実施形態では１２８ビットの入力が使用されているが、別の実施形態は任意のビット数の入力を使用する。ＣＳＡのレベルの数はそれに従って変更されている。
【０１１６】
図１７の実施形態はチェックサム生成器８８で実装されるものとして示されているが、部分的チェックサムを完全なものにするため、（前述のように）部分的チェックサムの生成用のＩＯＢ２２で、またインターフェース回路１６で同様の回路を使用できる。
【０１１７】
次に図１８を参照すると、全加算器２４２の一実施形態のブロック図が示されている。図示された実施形態において、全加算器２４２はＸＯＲ回路２５０と、一対の桁上げ生成回路２５２Ａ、２５２Ｂとを含んでいる。ＸＯＲ回路２５０と桁上げ生成回路２５２Ａ、２５２Ｂは、（図１７のＣＳＡ２４０Ｇの和と桁上げ出力であり、桁上げ出力の最上位ビットが除去され、最下位ビットの位置に挿入される）全加算器への「ａ」及び「ｂ」入力を受け取るように結合されている。桁上げ生成器２５２Ａは、ゼロである桁上げ（キャリー・イン）（Ｃin）入力を受け取るように結合され、桁上げ生成器２５２Ｂは、１の桁上げ入力を受け取るように結合されている。桁上げ生成器２５２Ａの桁上げ（キャリー・アウト）（Ｃout）出力は、入力として桁上げ生成器２５２Ａ、２５２Ｂの桁上げ出力を有するマルチプレクサ（ｍｕｘ）２５４の選択制御として提供される。ｍｕｘ２５４の出力は、これも入力としてＸＯＲ回路２５０の出力を有する第２のＸＯＲ回路２５６への入力として結合されている。ＸＯＲ回路２５６の出力は全加算器２４２の出力である。
【０１１８】
ＸＯＲ回路２５０は、ａ及びｂ入力をビットごとに排他的論理和し、ＣＳＡ加算器２４０と同様の別の総和項の生成を効率的に行う。桁上げ生成器２５２Ａ、２５２Ｂはａ及びｂ入力上で真の桁上げ生成を実行し、桁上げ生成器２５２Ａの桁上げ（キャリー・アウト）がゼロである場合は、桁上げ生成器２５２Ａの出力はＸＯＲ回路２５０からの総和項と排他的論理和するためのｍｕｘ２５４を介して選択されることによって、最終的な１の補数和を生成する。これに対して、桁上げ生成器２５２Ａの桁上げ（キャリー・アウト）が１である場合は、桁上げ生成器２５２Ｂの出力はｍｕｘ２５４を介して選択される。桁上げ生成器２５２Ｂへの桁上げ（キャリー・イン）は１であるので、桁上げ生成器２５２Ｂは、最上位ビットからの桁上げ（キャリー・アウト）を効果的に再び折り返す。別の観点から見ると、桁上げ生成器２５２Ａ、２５２Ｂは、桁上げが生成されるか否かに基づいてもう１つの桁上げビットを選択的に折り返している。
【０１１９】
上述の開示が完全に理解されれば、当業者には多くの変化形態及び修正形態が明らかである。以下の請求項はこのような変化形態及び修正形態を全て包含することを意図するものである。
【図面の簡単な説明】
【０１２０】
【図１】システムの一実施形態のブロック図である。
【図２】図１に示されたＤＭＡコントローラの一実施形態のブロック図である。
【図３】図２に示されたオフロード・エンジンの一実施形態のブロック図である。
【図４】図１のシステムにおけるＤＭＡの一実施形態のブロック図である。
【図５】記述子リングとバッファ・ポインタ・リングの一実施形態のオペレーションを示すブロック図である。
【図６】図２に示された受信プリフェッチ・エンジンの一実施形態のオペレーションを示すフローチャートである。
【図７】図２に示された受信制御回路の一実施形態のオペレーションを示すフローチャートである。
【図８】図２に示された送信制御回路の一実施形態のプリフェッチ・オペレーションを示すフローチャートである。
【図９】図２に示された送信制御回路の一実施形態の送信オペレーションを示すフローチャートである。
【図１０】送信記述子に含まれる制御記述子を有する記述子リングを示すブロック図である。
【図１１】制御記述子の処理の一実施形態を示すフローチャートである。
【図１２】受信ＤＭＡ記述子の一実施形態を示すブロック図である。
【図１３】送信ＤＭＡ記述子の一実施形態を示すブロック図である。
【図１４】コピーＤＭＡ記述子の一実施形態を示すブロック図である。
【図１５】オフロードＤＭＡ記述子の一実施形態を示すブロック図である。
【図１６】制御記述子の一実施形態を示すブロック図である。
【図１７】図３に示されたチェックサム生成器の一実施形態を示すブロック図である。
【図１８】図１７に示された全加算器の一実施形態を示すブロック図である。
【図１】
2009510630.tif 000003
【図２】
2009510630.tif 000004
【図３】
2009510630.tif 000005
【図４】
2009510630.tif 000006
【図５】
2009510630.tif 000007
【図６】
2009510630.tif 000008
【図７】
2009510630.tif 000009
【図８】
2009510630.tif 000010
【図９】
2009510630.tif 000011
【図１０】
2009510630.tif 000012
【図１１】
2009510630.tif 000013
【図１２】
2009510630.tif 000014
【図１３】
2009510630.tif 000015
【図１４】
2009510630.tif 000016
【図１５】
2009510630.tif 000017
【図１６】
2009510630.tif 000018
【図１７】
2009510630.tif 000019
【図１８】
2009510630.tif 000020
【国際調査報告】
2009510630.tif 000021
2009510630.tif 000022
2009510630.tif 000023