(57)【要約】  ファームウェアソケットモジュールが、再構成可能なロジックデバイス上に配備され、ファームウェアソケットモジュールは、ファームウェアソケットモジュールと、データ処理パイプラインへの入口点との間の通信パスを有し、ファームウェアソケットモジュールは、データ処理パイプラインの入口点に、同一の通信パスを介してコマンドとターゲットデータの両方を供給するように構成され、各コマンドは、データ処理パイプラインによって実行されるべきデータ処理動作を規定し、ターゲットデータは、データ処理パイプラインが、命令されたデータ処理動作を実行する対象となるデータに対応する。好ましくは、ファームウェアソケットモジュールは、データ処理パイプライン全体を通して保たれる所定の順序で、コマンドおよびターゲットデータを供給するように構成される。
2009528584.tif 000002
【特許請求の範囲】
【請求項１】
再構成可能なロジックデバイス上に配備された少なくとも１つのファームウェアアプリケーションモジュールをコンピュータシステムと結び付ける方法であって、
コンピュータシステムが、互いに通信するプロセッサと、メモリ空間とを含み、少なくとも１つのファームウェアアプリケーションモジュールが、該モジュールが受け取るターゲットデータに対してデータ処理動作を実行するように構成され、
再構成可能なロジックデバイス上に配備され、少なくとも１つのファームウェアアプリケーションモジュールをコンピュータシステムメモリ空間に結び付けるファームウェアモジュール内で、（１）メモリ空間内のバッファから読み取りを行って、少なくとも１つファームウェアアプリケーションモジュールに供給されるべき複数のコマンドおよびターゲットデータを特定し、バッファが、コマンドおよびターゲットデータが、少なくとも１つのファームウェアアプリケーションモジュールに供給されるべき順序を規定し、各コマンドが、少なくとも１つのファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対して実行すべきデータ処理動作を制御すること、および（２）規定された順序に従って、コンピュータシステムメモリから少なくとも１つのファームウェアアプリケーションモジュールにコマンドおよびターゲットデータを転送することを含む、方法。
【請求項２】
転送されたコマンドおよびターゲットデータを、インタリーブされたコマンドとターゲットデータのストリームとして、少なくとも１つのファームウェアアプリケーションモジュールを通して処理することをさらに含む、請求項１に記載の方法。
【請求項３】
通信パスが、ファームウェアモジュールを少なくとも１つのファームウェアアプリケーションモジュールにリンクし、転送するステップが、少なくとも１つのファームウェアアプリケーションモジュールにコマンドとターゲットデータを、同一の通信パスを介して供給することを含む、請求項２に記載の方法。
【請求項４】
少なくとも１つのファームウェアアプリケーションモジュールが、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含み、パイプラインが、第１のファームウェアアプリケーションモジュールと、最終のファームウェアアプリケーションモジュールとを有し、転送するステップが、決定された順序に従って、コンピュータシステムメモリから、パイプラインの第１のファームウェアアプリケーションモジュールにコマンドとターゲットデータを、同一の通信パスを介して転送することをさらに含む、請求項３に記載の方法。
【請求項５】
処理するステップが、転送されたコマンドおよびターゲットデータを、パイプラインのそれぞれのさらなるファームウェアアプリケーションモジュールを通して順次に処理し、パイプラインの最終のファームウェアアプリケーションモジュールに終わることをさらに含む、請求項４に記載の方法。
【請求項６】
複数のコマンドが、ファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項５に記載の方法。
【請求項７】
コマンドの少なくとも１つが、ファームウェアアプリケーションモジュールの１つへのパススルーコマンドを含む、請求項６に記載の方法。
【請求項８】
コマンドによって定義されるデータ処理動作が、検索動作、データ縮約動作、暗号化動作、解読動作、圧縮動作、伸張動作、およびパススルー動作から成るグループの少なくとも２つの動作を含む、請求項６に記載の方法。
【請求項９】
コンピュータシステムメモリ空間が、ＲＡＭ（ランダムアクセスメモリ）を含み、外部バッファが、ＲＡＭの中に格納される、請求項５に記載の方法。
【請求項１０】
プロセッサの制御下で動作するデバイスドライバを使用して外部バッファを管理することをさらに含む、請求項９に記載の方法。
【請求項１１】
バッファが、第１のバッファを含み、パイプラインの最後のファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対してファームウェアアプリケーションモジュールが実行するデータ処理動作の結果として、出力を生成するように構成され、
最後のファームウェアアプリケーションモジュールをファームウェアモジュールにリンクするさらなる通信パスを介して、最後のファームウェアアプリケーションモジュールの出力をファームウェアモジュールに転送すること、および
ファームウェアモジュール内で、（１）デバイスドライバによって管理されるさらなるバッファを読み取って、最後のファームウェアアプリケーションモジュールの出力が格納されるべきコンピュータシステムメモリ空間内のロケーションを決定すること、および（２）最後のファームウェアアプリケーションモジュールの出力を、コンピュータシステムメモリ内の決定されたロケーションに転送することをさらに含む、請求項１０に記載の方法。
【請求項１２】
ファームウェアアプリケーションモジュールパイプラインにターゲットデータが供給されるべき順序と同一の順序で、隣接するメモリアドレスでコンピュータシステムメモリ空間内にターゲットデータを格納することをさらに含む、請求項１０に記載の方法。
【請求項１３】
管理するステップが、コンピュータシステムメモリ空間内でコマンドおよびターゲットデータが格納されたメモリ空間アドレスに対するポインタで第１のバッファをポピュレートすることを含む、請求項１２に記載の方法。
【請求項１４】
ポピュレートするステップが、ポインタに対応するコマンドおよびターゲットデータが、ファームウェアアプリケーションモジュールパイプラインに供給されるべき順序と同一の順序で、第１のバッファの中にポインタを格納することを含む、請求項１３に記載の方法。
【請求項１５】
再構成可能なロジックデバイスが、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）を含む、請求項４に記載の方法。
【請求項１６】
再構成可能なロジックデバイス上に配備された少なくとも１つのファームウェアアプリケーションモジュールへのデータおよびコマンドのフローを制御するための方法であって、
コマンドが、少なくとも１つのファームウェアアプリケーションモジュールによるデータの処理を制御するための命令を含み、
前記少なくとも１つのファームウェアアプリケーションモジュールに至る共通の通信パスを提供すること、および
コマンドとデータの両方を、共通の通信パスを介して前記少なくとも１つのファームウェアアプリケーションモジュールに送ることを含む、方法。
【請求項１７】
少なくとも１つのファームウェアアプリケーションモジュールが、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含み、送るステップが、インタリーブされたコマンドとデータのストリームを、パイプラインにおけるファームウェアアプリケーションモジュールの第１のモジュールに送ることを含む、請求項１６に記載の方法。
【請求項１８】
少なくとも複数のコマンドが、パイプラインにおけるファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項１７に記載の方法。
【請求項１９】
データ処理パイプラインと通信するファームウェアソケットモジュールを含み、前記データ処理パイプラインが、少なくとも１つの再構成可能なロジックデバイス上に配備され、ファームウェアソケットモジュールが、コマンドとターゲットデータの両方に共通の通信パスを介して、データ処理パイプラインへのコマンドとターゲットデータの両方の伝搬を制御するように構成され、各コマンドが、データ処理パイプラインによって実行されるべきデータ処理動作を制御し、ターゲットデータが、データ処理パイプラインが、命令されたデータ処理動作を実行する対象となるデータに対応する、データ処理デバイス。
【請求項２０】
ファームウェアソケットモジュールも、少なくとも１つの再構成可能なロジックデバイス上に配備される、請求項１９に記載のデータ処理デバイス。
【請求項２１】
データ処理パイプラインが、直列に接続された複数のファームウェアアプリケーションモジュールを含み、ファームウェアソケットモジュールが、データ処理パイプラインに入る入口点に、所定の順序でコマンドおよびターゲットデータを供給するように構成され、所定の順序が、データ処理パイプライン全体にわたって保たれる、請求項２０に記載のデータ処理デバイス。
【請求項２２】
ファームウェアソケットモジュールが、（１）外部入力記述子プールバッファにアクセスして、外部メモリ空間内のどこに、データ処理パイプラインに送られるべきコマンドおよびターゲットデータが格納されているかを特定するように構成され、入力記述子プールバッファが、コマンドおよびターゲットデータがデータ処理パイプラインに送られるべき順序を定義し、さらに、ファームウェアソケットモジュールが、（２）定義された順序に従って、外部メモリ空間からデータ処理パイプラインに、特定されたコマンドおよびターゲットデータを転送するように構成される、請求項２１に記載のデータ処理デバイス。
【請求項２３】
再構成可能なロジックデバイスが、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）を含み、ファームウェアソケットモジュールが、ファームウェアソケットモジュールと、データ処理パイプラインからの出口点との間の別の通信パスを有し、ファームウェアソケットモジュールが、さらなる通信パスを介してデータ処理パイプラインからの出力を受け取るようにさらに構成される、請求項２２に記載のデータ処理デバイス。
【請求項２４】
ファームウェアソケットモジュールが、（１）第１の外部出力記述子プールバッファにアクセスして、データ処理パイプラインからのコマンド出力が格納されるべきメモリ空間内のロケーションを特定し、（２）第２の外部出力記述子プールバッファにアクセスして、データ処理パイプラインからのターゲットデータ出力が格納されるべきメモリ空間内のロケーションを特定し、（３）データ処理パイプラインからのコマンド出力およびターゲットデータ出力を、メモリ空間内のそれぞれの特定されたロケーションに書き込むようにさらに構成される、請求項２３に記載のデータ処理デバイス。
【請求項２５】
プロセッサと、
プロセッサによって管理されるメモリ空間と、
配備された少なくとも１つのファームウェアアプリケーションモジュールと、少なくとも１つのファームウェアアプリケーションモジュールをプロセッサおよびメモリに結び付けるファームウェアソケットモジュールとを含み、ファームウェアソケットモジュールと少なくとも１つのファームウェアアプリケーションモジュールが、通信パスを介して互いに通信する再構成可能なロジックデバイスと、
再構成可能なロジックデバイスが、プロセッサおよびメモリ空間と通信するバスとを含むデータ処理システムであって、
ファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るデータストリームに対してデータ処理動作を実行するように構成され、
ファームウェアソケットモジュールが、メモリ空間から複数のコマンドとターゲットデータとの両方を受け取るように構成され、
ファームウェアソケットモジュールが、コマンドとターゲットデータの両方を、ファームウェアソケットモジュールと、少なくとも１つのファームウェアアプリケーションモジュールとの間の同一の通信パスを介して少なくとも１つのファームウェアアプリケーションモジュールに供給するように構成され、各コマンドが、少なくとも１つのファームウェアアプリケーションモジュールによって実行されるデータ処理動作を制御し、ターゲットデータが、少なくとも１つのファームウェアアプリケーションモジュールのデータ処理動作が実行される対象であるデータを含む、システム。
【請求項２６】
ファームウェアソケットモジュールが、（１）コマンドおよびターゲットデータを、インタリーブされ、順序付けられたコマンドとターゲットデータのストリームとして受け取り、（２）ファームウェアソケットモジュールが、同一の通信パスを介してストリームを少なくとも１つのファームウェアアプリケーションモジュールに供給する際に、順序、または順序付けられたコマンドとターゲットデータを保つようにさらに構成される、請求項２５に記載のシステム。
【請求項２７】
再構成可能なロジックデバイスが、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）を含む、請求項２６に記載のシステム。
【請求項２８】
少なくとも１つのファームウェアアプリケーションモジュールが、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含み、パイプラインにおけるファームウェアアプリケーションモジュールのそれぞれが、ストリームのコマンドおよびターゲットデータを、ファームウェアソケットモジュールが、コマンドおよびターゲットデータを供給したのと同一の順序で、順次に処理するように構成される、請求項２７に記載のシステム。
【請求項２９】
複数のコマンドが、パイプラインにおけるファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項２８に記載のシステム。
【請求項３０】
ファームウェアアプリケーションモジュールとファームウェアソケットモジュールが、チェーンに構成され、ファームウェアソケットモジュールが、インタリーブされ、順序付けられたコマンドとターゲットデータのストリームを、パイプラインにおけるファームウェアアプリケーションモジュールの第１のモジュールに供給する、請求項２８に記載のシステム。
【請求項３１】
プロセッサが、複数のコマンドに対応するデータ、および複数のデータストリームに対応するデータが、前記順序で格納されるバッファを保持するデバイスドライバを有してさらに構成され、ファームウェアソケットモジュールが、バッファにアクセスして、ファームウェアアプリケーションモジュールを介して処理されるべきコマンドおよびデータストリームを特定するように構成される、請求項２８に記載のシステム。
【請求項３２】
コマンドおよびターゲットデータが、複数のメモリアドレスでメモリ空間内に格納され、バッファの中に格納された複数のコマンドに対応するデータ、およびターゲットデータに対応するデータが、対応するコマンドおよびターゲットデータが格納されているメモリアドレスに対する複数のポインタを含む、請求項３１に記載のシステム。
【請求項３３】
チェーンを通してグループとして処理されるべきターゲットデータが、メモリアドレスに対するポインタが、バッファの中に格納されるのと同一の順序で、隣接するメモリアドレスに格納される、請求項３２に記載のシステム。
【請求項３４】
データ処理動作が、検索動作、暗号化動作、解読動作、圧縮動作、伸張動作、およびデータ縮約動作から成るグループの少なくとも２つの動作を含む、請求項２７に記載のシステム。
【請求項３５】
コンピュータシステムのバスに接続するためのデータ処理カードであって、
ファームウェアアプリケーションモジュールパイプラインおよびファームウェアモジュールが配備された再構成可能なロジックデバイスを含み、
ファームウェアモジュールが、ファームウェアアプリケーションモジュールパイプラインを、ターゲットデータおよびコマンドの少なくとも１つの外部源に結び付けるように構成され、コマンドが、ファームウェアアプリケーションモジュールパイプラインが、ターゲットデータをどのように処理するかを制御し、
ファームウェアアプリケーションモジュールパイプラインが、シーケンスで配置された複数のファームウェアアプリケーションモジュールを含み、各ファームウェアアプリケーションモジュールが、ターゲットデータに対してデータ処理動作を実行するように構成され、ファームウェアアプリケーションモジュールパイプラインが、ファームウェアモジュールから、シーケンスのファームウェアアプリケーションモジュールの第１のモジュールに至るエントリ通信パスを有し、
ファームウェアモジュールが、エントリ通信パスを介して、インタリーブされたコマンドとターゲットデータのストリームを、シーケンスにおけるファームウェアアプリケーションモジュールの第１のモジュールに供給することによって、ファームウェアアプリケーションモジュールパイプラインがターゲットデータをどのように処理するかを制御するようにさらに構成され、コマンドとターゲットデータが、ストリーム内で定義された順序を有し、
ファームウェアモジュールが、外部バッファの中に格納されたエントリを読み取って、ファームウェアアプリケーションモジュールパイプラインに供給されるべきコマンドおよびターゲットデータを決定するように構成され、外部バッファの中のエントリの順序が、ストリーム内のコマンドとターゲットデータの順序を定義し、
ファームウェアアプリケーションモジュールパイプラインが、ファームウェアアプリケーションモジュールのシーケンスを通るストリームのコマンドおよびターゲットデータを、それらのコマンドおよびターゲットデータが、ストリーム内で順序付けられていたのと同一の順序で順に処理するように構成される、カード。
【請求項３６】
外部バッファエントリが、コマンドおよびターゲットデータが格納されている少なくとも１つの外部源内のアドレスに対するポインタを含み、ファームウェアモジュールが、少なくとも１つの外部源にアクセスして、アドレスから、定義された順序に従ってコマンドおよびターゲットデータを取り出すようにさらに構成される、請求項３５に記載のデータ処理カード。
【請求項３７】
複数のコマンドが、シーケンスにおけるファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項３６に記載のデータ処理カード。
【請求項３８】
コマンドの少なくとも１つが、シーケンスにおけるファームウェアアプリケーションモジュールの１つへのパススルーコマンドを含む、請求項３７に記載のデータ処理カード。
【請求項３９】
コマンドによって定義されるデータ処理動作が、検索動作、データ縮約動作、暗号化動作、解読動作、圧縮動作、伸張動作、およびパススルー動作から成るグループの少なくとも２つの動作を含む、請求項３７に記載のデータ処理カード。
【請求項４０】
ファームウェアアプリケーションモジュールパイプラインが、シーケンスにおけるファームウェアアプリケーションモジュールの最後のモジュールからファームウェアモジュールに至るエグジット通信パスをさらに有し、シーケンスにおけるファームウェアアプリケーションモジュールの最後のモジュールによって実行される各データ処理動作が、出力を生成し、ファームウェアモジュールが、（１）シーケンスにおけるファームウェアアプリケーションモジュールの最後のモジュールからの出力を、エグジット通信パスを介して受け取り、（２）外部バッファの中に格納されたエントリを読み取って、出力が格納されるべき少なくとも１つの外部源内の複数のロケーションを決定し、（３）決定されたロケーションで少なくとも１つの外部源に出力を書き込むようにさらに構成される、請求項３９に記載のデータ処理カード。
【請求項４１】
再構成可能なロジックデバイスが、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）を含む、請求項３５に記載のデータ処理カード。
【請求項４２】
ソフトウェアを介して再構成可能なロジックデバイスを通るデータの処理を制御するシステムであって、
複数のメモリアドレスにデータが格納されるメモリ空間を管理するように構成された、プロセッサによって実行されるためのデバイスドライバソフトウェアと、
バスを介してデバイスドライバソフトウェアおよびメモリ空間と通信するための再構成可能なロジックデバイスとを含み、
少なくとも１つのファームウェアアプリケーションモジュール、およびファームウェアソケットモジュールが、再構成可能なロジックデバイス上に配備され、
少なくとも１つのファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対してデータ処理動作を実行するように構成され、
デバイスドライバソフトウェアが、複数のコマンドをメモリ空間内に格納するように構成され、各コマンドが、少なくとも１つのファームウェアアプリケーションモジュールによって実行されるべきデータ処理動作を制御することに向けられ、
デバイスドライバソフトウェアが、コマンドおよびデータが、少なくとも１つのファームウェアアプリケーションモジュールを通して処理されるべき順序を定義する入力記述子プールバッファをメモリ空間内に保持するようにさらに構成され、
ファームウェアソケットモジュールが、（１）入力記述子プールバッファにアクセスして、少なくとも１つのファームウェアアプリケーションモジュールを通して処理されるべき順序付けられたコマンドおよびデータを特定し、（２）メモリ空間にアクセスして、定義された順序に従って、コマンドおよびデータを少なくとも１つのファームウェアアプリケーションモジュールに転送するように構成される、システム。
【請求項４３】
少なくとも１つのファームウェアアプリケーションモジュールが、第１のファームウェアアプリケーションモジュールを含むパイプライン化されたシーケンスに配置された複数のファームウェアアプリケーションモジュールを含み、ファームウェアソケットモジュールが、通信パスを介して、パイプライン化されたシーケンスの第１のファームウェアアプリケーションモジュールと通信しており、ファームウェアソケットモジュールが、コマンドとデータを、同一の通信パスを介して、パイプライン化されたシーケンスにおける第１のファームウェアアプリケーションモジュールに転送するようにさらに構成される、請求項４２に記載のシステム。
【請求項４４】
各コマンドが、そのコマンドが適用可能であるパイプライン化されたシーケンスにおけるファームウェアアプリケーションモジュールを特定するファームウェアアプリケーションモジュール識別子を含む、請求項４３に記載のシステム。
【請求項４５】
デバイスドライバソフトウェアが、ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスを通して処理されるべきコマンドおよびデータが格納されているメモリ空間内のメモリアドレスに対する複数のポインタをデバイスドライバソフトウェアの中に格納することによって、入力記述子プールバッファを保持するようにさらに構成され、入力記述子プールバッファの中のポインタの順序が、ファームウェアソケットモジュールによってファームウェアアプリケーションモジュールのパイプライン化されたシーケンスにコマンドおよびデータが供給される順序を定義する、請求項４４に記載のシステム。
【請求項４６】
再構成可能なロジックデバイスが、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）を含み、システムが、プロセッサによって実行されるためのアプリケーションソフトウェアと、プロセッサによって実行されるためのモジュールアプリケーションプログラミングインタフェースソフトウェアとをさらに含み、アプリケーションソフトウェアが、（１）ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスによって実行されるべき少なくとも１つのデータ処理動作と、（２）ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスが、少なくとも指定されたデータ処理動作を実行する対象となるデータとを指定する入力をユーザから受け取るように構成され、モジュールアプリケーションプログラミングインタフェースソフトウェアが、アプリケーションソフトウェアをデバイスドライバソフトウェアに結び付けるように構成されて、デバイスドライバソフトウェアが、入力記述子プールバッファおよびメモリ空間をユーザ入力に従って適切に管理するようにする、請求項４５に記載のシステム。
【請求項４７】
前記デバイスドライバソフトウェアが、ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスにデータが供給されるべき順序と同一の順序で、メモリ空間の隣接するメモリアドレスに、パイプライン化されたシーケンスを通して処理されるべきデータを格納するようにさらに構成される、請求項４５に記載のシステム。
【請求項４８】
少なくとも１つの再構成可能なロジックデバイス上に配備されたファームウェアアプリケーションモジュールのパイプラインを、再構成可能なロジックデバイスの外部にあるメモリ空間に結び付けるためのデバイスであって、
少なくとも１つの再構成可能なロジックデバイス上に配備されたファームウェアモジュールを含み、ファームウェアモジュールが、（１）外部メモリ空間にシリアルアクセスして、複数のコマンド、および複数のターゲットデータグループを或る順序で取り出し、（２）取り出されたコマンドとターゲットデータグループの両方を、ファームウェアモジュールをパイプラインの入口点に接続する共通の通信パスを介して、同一の順序で単一のインタリーブされたストリームとして、パイプラインの入口点に送るように構成され、パイプラインにおける各ファームウェアアプリケーションモジュールが、そのファームウェアアプリケーションモジュールが受け取るターゲットデータに対してデータ処理動作を実行するように構成され、各コマンドが、パイプラインにおける少なくとも１つのファームウェアアプリケーションモジュールのデータ処理動作を制御するように構成される、デバイス。
【請求項４９】
ファームウェアモジュールが、外部プロセッサによって実行されるソフトウェアプログラムによって、外部メモリ空間内に格納された順序付けられた記述子セットを読み取ることにより、いずれのコマンド、およびいずれのターゲットデータグループが、外部メモリ空間から取り出されるべきかを決定するようにさらに構成され、順序付けられた記述子セットが、コマンドとターゲットデータグループが、ストリームの中でインタリーブされるべき順序を定義する、請求項４８に記載のデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェアにおける高速データ処理動作をサポートするソフトウェアを有するインタフェースハードウェアの分野に向けられる。
【背景技術】
【０００２】
大量のデータを処理する際に、コンピューティングシステムのデータスループット能力を向上させる能力は、常に存在する課題である。多くの場合、汎用プロセッサによって実行されるソフトウェアを使用して大量のデータ量を処理することは、ユーザのニーズを満たすのに遅すぎる。したがって、データ処理機能を、コンピュータの汎用プロセッサによって実行されるソフトウェアを離れて、ハードウェア上に配備されたファームウェアの中に再配置すること、またはそのようなファームウェアとソフトウェアとの間でデータ処理機能を分割することが望ましい。しかし、そのようにする際、ハードウェアデバイス（再構成可能なロジックデバイスなどの）が、ハードウェアとソフトウェアの間でデータおよびコマンドフローが行き来する際に、ネックを生じないような仕方で、データストレージやコンピュータの汎用プロセッサによって実行されるソフトウェアなどの外部リソースと互いに接続される必要がある。
【０００３】
本明細書で使用される、「汎用プロセッサ」という用語は、命令をフェッチして、それらの命令を実行するハードウェアデバイス（例えば、Ｉｎｔｅｌ  Ｘｅｏｎ（登録商標）プロセッサまたはＡＭＤ  Ｏｐｔｅｒｏｎ（登録商標）プロセッサ）を指す。「再構成可能なロジック」という用語は、形態および機能が、製造後にフィールドにおいて大幅に変更される（すなわち、再構成される）ことが可能な任意のロジック技術を指す。このことは、機能が、製造後に変更されることが可能であるが、形態は、製造時に固定される汎用プロセッサと対比されるべきである。「ソフトウェア」という用語は、汎用プロセッサ上に配備されたデータ処理機能を指す。「ファームウェア」という用語は、再構成可能なロジック上に配備されたデータ処理機能を指す。
【発明の開示】
【課題を解決するための手段】
【０００４】
当技術分野におけるニーズに対処しようとして、本発明人らは、本明細書において、外部メモリおよびソフトウェアを有する再構成可能なロジックデバイス上に配備された少なくとも１つのファームウェアアプリケーションモジュールとインタフェースをとるファームウェアソケットモジュールのための新たな設計を開示する。また、このファームウェアソケットモジュールは、好ましくは、再構成可能なロジックデバイス上にも配備される。この少なくとも１つのファームウェアアプリケーションモジュールは、このモジュールが受け取る任意のターゲットデータに対してデータ処理動作を実行するように構成され、この少なくとも１つのファームウェアアプリケーションモジュールが実行するデータ処理動作は、ソフトウェアベースのコマンドによって制御される。好ましくは、この少なくとも１つのファームウェアアプリケーションモジュールは、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含む。パイプラインにおける各ファームウェアアプリケーションモジュールは、好ましくは、コマンド情報に関して個々にアドレス指定可能である。このため、コマンドは、パイプラインにおける特定のファームウェアアプリケーションモジュールに発行されて、それらの特定のファームウェアアプリケーションモジュールのデータ処理動作が制御されることが可能である。
【０００５】
ファームウェアソケットモジュールは、外部メモリおよびソフトウェアにアクセスして、ファームウェアアプリケーションモジュールパイプラインを通して処理されるべきコマンドおよびターゲットデータを受け取るように構成される。好ましくは、ファームウェアソケットモジュールは、コンピュータシステムのメモリからファームウェアソケットモジュールへのコマンドおよびターゲットデータのＤＭＡ（ダイレクトメモリアクセス）転送を実行するようにシステムバスへトランザクションを発行する。ファームウェアソケットモジュールは、これらのコマンドおよびターゲットデータを、ソフトウェアによって規定される所定の順序でパイプラインにおけるファームウェアアプリケーションモジュールの第１のモジュールに供給するように構成される。
【０００６】
ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールパイプラインは、好ましくは、システムを通してコマンドおよびターゲットデータを伝搬する際に、インバウンドのコマンドおよびターゲットデータの、この所定の順序を厳密に保つように構成される。ターゲットデータが、パイプラインにおける或るファームウェアアプリケーションモジュールに到達すると、そのファームウェアアプリケーションモジュールは、このターゲットデータに対して、指定されたデータ処理動作を実行し、その後、そのように処理されたターゲットデータを、パイプラインにおける次のファームウェアアプリケーションモジュールに供給する。コマンドデータが、パイプラインにおける或るファームウェアアプリケーションモジュールに到達すると、そのファームウェアアプリケーションモジュールは、このコマンドが、そのモジュールに向けられているかどうかを確かめ、向けられている場合、そのコマンドを解釈して、適宜、そのモジュールのデータ処理動作を再構成する。このコマンドが、パイプラインをさらに下って伝搬されるべきである場合、そのファームウェアアプリケーションモジュールは、このコマンドを、パイプラインにおける次のファームウェアアプリケーションモジュールに送る。
【０００７】
ファームウェアソケットモジュールに入る、またはファームウェアアプリケーションモジュールパイプラインの入口点に入るコマンドおよびターゲットデータの流れは、コマンドとターゲットデータがともに、規定された順序に従ってインタリーブされた単一のストリームと考えられることが可能である。コマンドとデータがインタリーブされるという言い方がされる場合、このことは、コマンド／データ／コマンド／データ／コマンド／データ．．．というストリームを要求しない（排除しないものの）。代わりに、本明細書で説明されるコマンドとデータのインタリーブされたストリームは、コマンド／コマンド／コマンド／データ／データ／データ／データ／データ／コマンド．．．などのストリームを包含し、ストリームにおけるコマンドとデータの順序は、ソフトウェアによって規定され、ファームウェアソケットモジュールが、このストリームをファームウェアアプリケーションモジュールパイプラインに伝搬する際に、ファームウェアソケットモジュールによって保存される。
【０００８】
ファームウェアアプリケーションモジュールのデータ処理動作を制御する適切なコマンドが、ファームウェアアプリケーションパイプラインに入るコマンドとターゲットデータのストリームの中の、そのターゲットデータに先行して、ファームウェアアプリケーションモジュールのデータ処理動作が、ターゲットデータを処理することに先立って適切に制御されることを可能にしなければならない。コマンドとターゲットデータの、この厳密な順序付けが容易に保たれることを促すのに、ファームウェアソケットモジュールは、コマンドとターゲットデータをともに、パイプラインにおける第１のファームウェアアプリケーションモジュールに、パイプラインの第１のファームウェアアプリケーションモジュールにファームウェアソケットモジュールをリンクするのと同一の通信パスを介して、供給するように構成される。
【０００９】
このファームウェアソケットモジュール−ファームウェアアプリケーションモジュールパイプライン間の接続によってもたらされるコマンドとターゲットデータの間の自然な同期により、システムの複雑さが回避されるとともに、データスループットが増大する。本発明人らに知られている従来技術のソケットインタフェースにおいて、コマンドは、ターゲットデータをデータ処理モジュールに通信するのに使用される通信パスとは異なる通信パスを介して、データ処理モジュールに通信される。そのようなデータ処理モジュールが、パイプライン化されると、そのようなデュアル通信パスにより、コマンドをデータと同期しようと試みる際、管理の困難が生じる。そのような場合において、パイプラインにおけるデータ処理モジュールに新たなコマンドが発行されると、そのコマンド、およびさらなるターゲットデータが、そのパイプラインを通して処理され、それによってパイプラインのスループット能力を大きく損なう前に、パイプライン全体から、通常、以前のコマンド、および以前のデータがフラッシュされる必要がある。しかし、対照的に、本発明では、パイプラインの１つのファームウェアアプリケーションモジュールが、パイプラインにおける他のファームウェアアプリケーションモジュールが、それらのモジュールの規定されたデータ処理動作に従ってデータを同時に処理している間に、コマンドに対処することができる。このため、パイプライン全体がフラッシュされることを要求することなしに、ファームウェアアプリケーションモジュールのデータ処理動作を調整するコマンドが、ファームウェアアプリケーションモジュールに発行されることが可能である。
【００１０】
コンピュータシステムの汎用プロセッサによって実行される高レベルソフトウェアが、好ましくは、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールパイプラインを通して最終的に伝搬されるコマンドとデータの順序を規定する。次に、やはりコンピュータシステムの汎用プロセッサによって実行される、より低いレベルのデバイスドライバソフトウェアが、好ましくは、コマンドとデータの、この規定された順序を保ち、そのような順序付けられたコマンドとデータをファームウェアソケットモジュールに提供する。このデバイスドライバソフトウェアは、好ましくは、コマンドおよびターゲットデータに対するポインタが格納される入力記述子プールバッファを管理することによって、この順序を保つ。ファームウェアソケットモジュールは、入力記述子プールバッファにアクセスして、ファームウェアアプリケーションモジュールパイプラインに送られるべきコマンドおよびターゲットデータについて知る。
【００１１】
ファームウェアソケットモジュールのアウトバウンド側（ソフトウェアに対してアウトバウンド）で、デバイスドライバソフトウェアは、好ましくは、出力コマンドおよびアウトバウンドデータに関して別々のバッファを保持して、ファームウェアアプリケーションモジュールによって処理されたコマンドおよびデータが、コンピュータシステムソフトウェアによる後のアクセスのために、メモリの中でどこに格納されるべきかについて、ファームウェアソケットモジュールに通知する。
【００１２】
本発明の好ましい実施形態が提供する利点の中には、ソフトウェアから再構成可能なロジックデバイスに、さらに再構成可能なロジックデバイスからソフトウェアに、フロー制御されたデータを確実に送る能力、およびファームウェアアプリケーションモジュールが配備されるコンピュータシステムとは独立した（ファームウェアアプリケーションモジュールが、ファームウェアソケットモジュールの通知要件を遵守する限り）ファームウェアアプリケーションモジュールを開発する能力がある。本発明のこれら、およびその他の特徴は、以下の説明および図を検討すると、一部は指摘され、一部は、当業者には明白となろう。
【発明を実施するための最良の形態】
【００１３】
図１は、本発明による好ましいシステム１００を示す。このシステムにおいて、再構成可能なロジックデバイス１０２が、ディスクコントローラ１０６およびデータストア１０４によって規定されるディスクサブシステムを離れて流れる（直接に、またはＲＡＭ１１０などのシステムメモリを介して間接的に）データを受け取るように位置付けられる。好ましくは、このデータは、システムバス１１２を介して再構成可能なロジックデバイスに流れ込むが、他の設計アーキテクチャも可能である（図３ｂ参照）。好ましくは、再構成可能なロジックデバイスは、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）であるが、そうでなくてもよい。また、システムバス１１２は、再構成可能なロジックデバイス１０２を、コンピュータシステムのメインプロセッサ１０８、ならびにコンピュータシステムのＲＡＭ１１０と互いに接続する。本明細書で使用される「バス」という用語は、デバイスおよびロケーションがアドレスによってアクセスされる任意の物理的相互接続を包含する論理バスを指す。本発明の実施の際に使用されることが可能なバスの例には、ＰＣＩファミリのバス（例えば、ＰＣＩ−ＸおよびＰＣＩ−Ｅｘｐｒｅｓｓ）、およびＨｙｐｅｒＴｒａｎｓｐｏｒｔバスが含まれるが、以上には限定されない。好ましい実施形態において、システムバス１１２は、ＰＣＩ−Ｘバスであることが可能であるが、そうでなくてもよい。
【００１４】
データストアは、任意のデータ記憶デバイス／システムであることが可能であるが、好ましくは、何らかの形態の大容量記憶媒体である。例えば、データストア１０４は、Ｓｅａｇａｔｅ（登録商標）ディスクのアレイなどの磁気記憶デバイスであることが可能である。しかし、他のタイプの記憶媒体も、本発明の実施の際に使用するのに適していることに留意されたい。例えば、データストアは、インターネットまたは何らかのＬＡＮ（ローカルエリアネットワーク）などのネットワークを介してアクセスされる１つまたは複数の遠隔データ記憶デバイスであることも可能である。
【００１５】
メインプロセッサ１０８およびＲＡＭ１１０によって規定されるコンピュータシステムは、好ましくは、当業者によって理解される通り、任意の商品コンピュータシステムである。例えば、コンピュータシステムは、Ｉｎｔｅｌ  Ｘｅｏｎ（登録商標）システムまたはＡＭＤ  Ｏｐｔｅｒｏｎ（登録商標）システムであることが可能である。
【００１６】
再構成可能なロジックデバイス１０２は、デバイス１０２の機能を規定するデバイス１０２上に配備されたファームウェアモジュールを有する。ファームウェアソケットモジュール１２０が、再構成可能なロジックデバイスを出入りするデータ移動要件（コマンドデータとターゲットデータの両方）を扱い、やはり再構成可能なロジックデバイス上に配備されるＦＡＭ（ファームウェアアプリケーションモジュール）チェーン１３０に対する一貫したインタフェースを提供する。ＦＡＭチェーン１３０のＦＡＭ１３０ｉが、ファームウェアソケットモジュール１２０からチェーン１３０を通して流れるターゲットデータに対して、指定されたデータ処理動作を実行するように構成される。再構成可能なロジック上に配備されることが可能なＦＡＭの好ましい実施例が、米国特許第６，７１１，５５８号（「Ａｓｓｏｃｉａｔｉｖｅ  Ｄａｔａｂａｓｅ  Ｓｃａｎｎｉｎｇ  ａｎｄ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｒｅｔｒｉｅｖａｌ」という名称の）、係属中の米国特許出願第１０／１５３，１５１号（「Ａｓｓｏｃｉａｔｉｖｅ  Ｄａｔａｂａｓｅ  Ｓｃａｎｎｉｎｇ  ａｎｄ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｒｅｔｒｉｅｖａｌ  ｕｓｉｎｇ  ＦＰＧＡ  Ｄｅｖｉｃｅｓ」という題名で２００２年５月２１日に出願され、２００３／００１８６３０として公開された）、公開ＰＣＴ出願、ＷＯ  ０５／０４８１３４およびＷＯ  ０５／０２６９２５（ともに、２００４年５月２１日に出願され、「Ｉｎｔｅｌｌｉｇｅｎｔ  Ｄａｔａ  Ｓｔｏｒａｇｅ  ａｎｄ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｓｉｎｇ  ＦＰＧＡ  Ｄｅｖｉｃｅｓ」という題名を有する）、米国特許仮出願第６０／６５８，４１８号（２００５年３月３日に出願され、「Ｂｉｏｓｅｑｕｅｎｃｅ  Ｓｉｍｉｌａｒｉｔｙ  Ｓｅａｒｃｈｉｎｇ  Ｕｓｉｎｇ  ＦＰＧＡ  Ｄｅｖｉｃｅｓ」という題名を有する）、米国特許仮出願第６０／７３６，０８１号（２００５年１１月１１日に出願され、「Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｐｅｒｆｏｒｍｉｎｇ  Ｂｉｏｓｅｑｕｅｎｃｅ  Ｓｉｍｉｌａｒｉｔｙ  Ｓｅａｒｃｈｉｎｇ」という題名を有する）および米国特許出願第１１／２９３，６１９号（２００５年１２月２日に出願され、「Ｍｅｔｈｏｄ  ａｎｄ  Ｄｅｖｉｃｅ  ｆｏｒ  Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｒｅｇｕｌａｒ  Ｅｘｐｒｅｓｓｉｏｎ  Ｐａｔｔｅｒｎ  Ｍａｔｃｈｉｎｇ」という題名を有する）において説明されており、これらの特許文献の各文献の開示全体が、参照により本明細書に組み込まれている。例えば、ＦＡＭによって実行されることが可能である例示的なデータ処理動作の網羅的ではないリストには、データ検索動作（様々なタイプの）、データ暗号化動作（いくつかの暗号化技術および／または暗号化キーのいずれかを使用する）、データ解読動作（いくつかの解読技術および／または解読キーのいずれかを使用する）、データ圧縮動作（いくつかのデータ圧縮技術のいずれかを使用する）、データ伸張動作（いくつかのデータ伸張技術のいずれかを使用する）、およびデータ縮約動作が含まれる。
【００１７】
ＦＡＭによって実行される特定のデータ処理動作は、ＦＡＭが、ファームウェアソケットモジュール１２０から受け取るコマンドデータによって制御／パラメータ化される。このコマンドデータは、ＦＡＭ固有であることが可能であり、このコマンドが受け取られると、ＦＡＭは、受け取られたコマンドによって制御されるデータ処理動作を実行するようにＦＡＭを構成する。
【００１８】
ＦＡＭが、受け取られたコマンドによって指定されるデータ処理動作を実行するように構成されると、そのＦＡＭは、ファームウェアソケットモジュールからそのＦＡＭが受け取るターゲットデータに対して、そのＦＡＭの指定されたデータ処理動作を実行する準備ができている。このため、ＦＡＭは、ターゲットデータの指定されたストリームの中で、「Ｓｍｉｔｈ」という語の存在を検索するように、適切なコマンドを介して構成されることが可能である。ＦＡＭが、「Ｓｍｉｔｈ」という語に関して、ターゲットデータストリームに対して検索動作を実行すると、ＦＡＭに、「Ｊｏｎｅｓ」という語を検索するようにＦＡＭを再構成させる別のコマンドが、そのＦＡＭに送られることが可能である。ＦＡＭは、ハードウェア速度で動作する（その結果、ＦＡＭを通るターゲットデータの高いスループットをもたらす）だけでなく、ＦＡＭは、ＦＡＭのデータ処理動作のパラメータを変更するように柔軟に再プログラミングされることも可能である。
【００１９】
ＦＡＭチェーン１３０は、好ましくは、パイプライン化されたシーケンスに構成される、複数のＦＡＭ（ファームウェアアプリケーションモジュール）１３０ａ、１３０ｂ．．．を含む。本明細書で使用される「パイプライン」、「パイプライン化されたシーケンス」、または「チェーン」とは、ＦＡＭの構成を指し、１つのＦＡＭの出力が、シーケンスにおける次のＦＡＭの入力に接続される。このパイプライン構成は、各ＦＡＭが、所与のクロックサイクル中にそのＦＡＭが受け取るデータに対して独立に動作し、次に、そのＦＡＭの出力を、別のクロックサイクル中に、シーケンスにおける次の下流のＦＡＭに送ることを可能にする。
【００２０】
通信パス１３２が、ファームウェアソケットモジュール１２０を、パイプライン化されたＦＡＭの第１のＦＡＭ１３０ａの入力に接続する。第１のＦＡＭ１３０ａの入力は、ＦＡＭチェーン１３０への入口点の役割をする。通信パス１３４が、パイプライン化されたＦＡＭの最後のＦＡＭ１３０ｍの出力をファームウェアソケットモジュール１２０に接続する。最後のＦＡＭ１３０ｍの出力は、ＦＡＭチェーン１３０の出口点の役割をする。通信パス１３２と通信パス１３４はともに、好ましくは、マルチビットパスである。
【００２１】
図２は、図１のシステム１００上のアプリケーションの配備に関する例示的なフレームワークを示す。図２の上位の３つの層は、コンピュータシステムの汎用プロセッサ１０８上のソフトウェアにおいて実行される機能を表す。下位の２つの層は、再構成可能なロジックデバイス１０２上のファームウェアにおいて実行される機能を表す。
【００２２】
アプリケーションソフトウェア層２００は、１名または複数名のユーザが、アプリケーションと対話して、いずれのデータ処理動作が、ＦＡＭによって実行されるべきであるかを規定し、さらに、それらのデータ処理動作が、どのようなターゲットデータに対して実行されるべきであるかを規定するタイプの機能などの、高レベル機能に対応する。
【００２３】
次の層は、高レベルモジュールＡＰＩ２０２ａと、低レベルモジュールＡＰＩ２０２ｂとを含むモジュールＡＰＩ（アプリケーションプログラミングインタフェース）層２０２である。高レベルモジュールＡＰＩ２０２ａは、アプリケーションレベルソフトウェアに一般的なサービス（例えば、呼び戻しを管理すること）を提供することができる。低レベルモジュールＡＰＩ２０２ｂは、ＯＳ（オペレーティングシステム）レベル／デバイスドライバソフトウェア２０４の動作を管理する。ソフトウェアライブラリインタフェース２１０が、高レベルモジュールＡＰＩ２０２ａを低レベルモジュールＡＰＩ２０２ｂに結び付ける。このソフトウェアライブラリインタフェースについての詳細は、後段で提供される。
【００２４】
デバイスドライバソフトウェア２０４とファームウェアソケットモジュール１２０との間のインタフェースは、システム１００に関するハードウェア／ソフトウェアインタフェース２１２の役割をする。このインタフェース２１２の詳細は、図５に関連して、より詳細に説明される。
【００２５】
ファームウェアソケットモジュール１２０と、ＦＡＭチェーン１３０との間のインタフェースは、ファームウェアモジュールインタフェース２１４である。このインタフェースの詳細は、図４に関連して、より詳細に説明される。
【００２６】
図３ａは、商品コンピュータシステムのＰＣＩ−Ｘバス１１２に接続されることが可能なプリント回路基板またはプリント回路カード３００を示す。図３ａの例において、プリント回路基板は、メモリデバイス３０４およびＰＣＩ−Ｘバスコネクタ３０６と通信するＦＰＧＡ３０２（Ｘｉｌｉｎｘ  Ｖｉｒｔｅｘ（登録商標）  ＩＩ  ＦＰＧＡなどの）を含む。好ましいメモリデバイス３０４は、ＳＲＡＭメモリとＤＲＡＭメモリとを含む。好ましいＰＣＩ−Ｘバスコネクタ３０６は、標準のカードエッジコネクタである。
【００２７】
図３ｂは、プリント回路基板／カード３００に関する代替の構成を示す。図３ｂの例において、プライベートバス３０８（ＰＣＩ−Ｘバスなどの）、ディスクコントローラ３１０、およびディスクコネクタ３１２も、プリント回路基板３００上に実装される。ＳＣＳＩ、ＳＡＴＡ、ＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）などを含むが、以上には限定されない、任意の商品ディスク技術が、サポートされることが可能である。この構成において、ファームウェアソケット１２０は、ＰＣＩ−Ｘ−ＰＣＩ−Ｘ間ブリッジの役割もして、プライベートＰＣＩ−Ｘバス３０８を介して接続されたディスクへの通常のアクセスをプロセッサ１０８に与える。
【００２８】
図３ａまたは図３ｂの構成において、ファームウェアソケット１２０は、ＰＣＩ−Ｘバスにメモリ３０４をアクセス可能にすることができ、その結果、メモリ３０４が、ディスクコントローラからＦＡＭへの転送のためのバッファとしてＯＳカーネル２０４によって使用されることが可能になることは、注目に値する。また、単一のＦＰＧＡ３０２が、図３ａおよび図３ｂのプリント回路基板上に示されているが、複数のＦＰＧＡが、プリント回路基板３００上の複数のＦＰＧＡを含めること、またはコンピュータシステムに複数のプリント回路基板３００を実装することによって、サポートされることが可能であるものと理解されるべきことも注目に値する。図８は、単一のパイプラインにおける多数のＦＡＭが、複数のＦＰＧＡにまたがって配備される例を示す。
【００２９】
図１−図３に示される通り、インバウンドデータ（カーネル２０４からカード３００への）が、コンピュータシステム内のバス１１２をわたってファームウェアソケットモジュール１２０まで移動され、次に、ファームウェアソケットモジュール１２０によってＦＡＭチェーン１３０に送られる。アウトバウンドデータ（カード３００からカーネル２０４への）が、ＦＡＭチェーン１３０からファームウェアソケットモジュール１２０に送られ、次に、ファームウェアソケットモジュール１２０によって、ＰＣＩ−Ｘバスをわたって、コンピュータシステム上で実行されるソフトウェアアプリケーションに送られる。図２に示される通り、使用される３つの対話するインタフェースは、ファームウェアモジュールインタフェース２１４、ハードウェア／ソフトウェアインタフェース２１２、およびソフトウェアライブラリインタフェース２１０である。
【００３０】
ファームウェアモジュールインタフェース２１４−信号層
図４に示されるファームウェアモジュールインタフェース２１４は、ファームウェアソケットモジュール１２０間で交換される信号、およびＦＡＭチェーン１３０内のＦＡＭ間で交換される信号を含む。表１、および後段の説明が、これらの信号をさらに説明する。
【表１】
2009528584.tif 000003
この表における信号方向エントリは、ファームウェアモジュールの見地からリストアップされる。このため、信号（４）から（８）まで（「ｄａｔａ＿ｉｎ」、「ｄａｔａ＿ｃｎｔ＿ｉｎ」、［ｄａｔａ＿ｖｌｄ＿ｉｎ］、「ｃｔｒｌ＿ｖｌｄ＿ｉｎ」、および「ｗａｉｔ＿ｕｐｓｔｒｍ」）は、上流のファームウェアモジュール（例えば、通信パス１３２）に対するインタフェース信号を含む。信号（９）から（１３）まで（「ｄａｔａ＿ｏｕｔ」、「ｄａｔａ＿ｃｎｔ＿ｏｕｔ」、「ｄａｔａ＿ｖｌｄ＿ｏｕｔ」、「ｃｔｒｌ＿ｖｌｄ＿ｏｕｔ」、および「ｗａｉｔ＿ｄｎｓｔｒｍ」）は、下流のファームウェアモジュール（例えば、通信パス１３４）に対するインタフェース信号を含む。
【００３１】
信号「ｃｌｋ」は、ファームウェアソケットモジュールおよびＦＡＭチェーンをクロック制御するのに使用される１ビットの入力信号である。
【００３２】
信号「ｒｅｓｅｔ」は、ファームウェアソケットモジュールおよびＦＡＭチェーンを起動時の状態にリセットするのに使用される１ビットの入力信号である。
【００３３】
信号「ｍｏｄｕｌｅ＿ＩＤ」は、各ファームウェアモジュールに、ＦＡＭチェーンにおけるそのモジュールの位置を知らせる６ビットの入力バスである。
【００３４】
信号「ｄａｔａ＿ｉｎ」は、ターゲットデータおよびコマンドデータをＦＡＭチェーンに転送するのに使用される６４ビットのバスである。注目すべきこととして、データとコマンドの両方を転送するのに同一のバスを使用することにより、コマンドとターゲットデータの間の同期が、ほとんど複雑さなしに保たれることが可能である。
【００３５】
信号「ｄａｔａ＿ｃｎｔ＿ｉｎ」は、入力バス「ｄａｔａ＿ｉｎ」上の８バイトのうちどれだけが、意味のあるデータを表すかを決定するのに使用される３ビットのバスである。好ましくは、１−７という値は、文字どおり解釈され、０という値は、８バイトすべてが有効であることを意味する。
【００３６】
信号「ｄａｔａ＿ｖｌｄ＿ｉｎ」は、「ｄａｔａ＿ｉｎ」バス上、および「ｄａｔａ＿ｃｎｔ＿ｉｎ」バス上のデータが、所与のクロックサイクル上で有効であることを示すのに使用される１ビットの入力信号である。
【００３７】
信号「ｃｔｒｌ＿ｖｌｄ＿ｉｎ」は、「ｄａｔａ＿ｉｎ」バス上のデータが、所与のクロックサイクル上で有効なコマンド（制御）情報であることを示すのに使用される１ビットの入力信号である。同一のＦＡＭに入る「ｃｔｒｌ＿ｖｌｄ＿ｉｎ」信号と「ｄａｔａ＿ｖｌｄ＿ｉｎ」信号は、同時にアサートされてはならないことは注目に値する。
【００３８】
信号「ｗａｉｔ＿ｕｐｓｔｒｍ」は、現在のファームウェアモジュールにデータをプッシュすることを停止するように上流のファームウェアモジュールに告げるのに使用される１ビットの出力信号である。好ましくは、ファームウェアモジュールは、待機がアサートされた後、２つのデータ値を吸収するように構成される。
【００３９】
信号「ｄａｔａ＿ｏｕｔ」は、所与のＦＡＭからデータとコマンドの両方を転送するのに使用される６４ビットの出力バスである。この場合も、データとコマンドの両方を転送するのに同一のバスが使用されるため、コマンドとターゲットデータの間の同期は、各ＦＡＭが、受け取られたコマンドおよびターゲットデータに対して動作するので、ＦＡＭチェーンを通して保たれることが可能である。
【００４０】
信号「ｄａｔａ＿ｃｎｔ＿ｏｕｔ」は、出力バス「ｄａｔａ＿ｏｕｔ」上の８バイトのうちどれだけが、意味のあるデータを表すかを決定するのに使用される３ビットバスである。好ましくは、１−７という値は、文字どおり解釈され、０という値は、８バイトすべてが有効であることを意味する。
【００４１】
信号「ｄａｔａ＿ｖｌｄ＿ｏｕｔ」は、「ｄａｔａ＿ｏｕｔ」バス上、および「ｄａｔａ＿ｃｎｔ＿ｏｕｔ」バス上のデータが、所与のクロックサイクル上で有効であることを示すのに使用される１ビットの出力信号である。
【００４２】
信号「ｃｔｒｌ＿ｖｌｄ＿ｏｕｔ」は、「ｄａｔａ＿ｏｕｔ」バス上のデータが、所与のクロックサイクル上で有効なコマンド（制御）情報であることを示すのに使用される１ビットの出力信号である。同一のＦＡＭから出る「ｃｔｒｌ＿ｖｌｄ＿ｏｕｔ」信号と「ｄａｔａ＿ｖｌｄ＿ｏｕｔ」信号は、同時にアサートされてはならないことは注目に値する。
【００４３】
信号「ｗａｉｔ＿ｄｎｓｔｒｍ」は、ファームウェアソケットモジュールまたは下流のモジュールが、その時点でデータを吸収することができないことをＦＡＭに示すのに使用される１ビットの入力信号である。好ましくは、「ｗａｉｔ＿ｄｎｓｔｒｍ」がディアサートされるまで、そのＦＡＭからそれ以上データが送り出されてはならない。
【００４４】
ＦＡＭチェーンにおけるいくつかの隣接するＦＡＭは、ＦＡＭサブセットを形成することが可能であり、このＦＡＭサブセットは、独自の入口点と出口点とを有することは注目に値する。そのような事例において、前掲の表において説明される信号インタフェースは、このＦＡＭサブセットの入口点および出口点に関して保持されるが、異なる通知インタフェースが、オプションとして、ＦＡＭサブセットのＦＡＭ間において内部で使用されることも可能である。また、ＦＡＭ自体、ファームウェアアプリケーションサブモジュールのチェーンから成ることが可能であり、これらのサブモジュール間の通信は、オプションとして、前掲の表において説明されるのとは異なる通知インタフェースに従うことも可能であることも注目に値する。
【００４５】
ファームウェアモジュールインタフェース２１４−論理層
前述した通り、６４ビットの「ｄａｔａ＿ｉｎ」バス上、および６４ビットの「ｄａｔａ＿ｏｕｔ」バス上のファームウェアモジュールインタフェースを介して伝送される情報は、アプリケーションデータまたはコマンド（制御）情報であることが可能である。ファームウェアソケットモジュール１２０と個々のＦＡＭ１３０ｉはともに、コマンドとデータの順序付けを保ち、したがって、この順序は、ＦＡＭチェーン全体にわたって保たれる。データである、「ｄａｔａ＿ｉｎ」バスおよび「ｄａｔａ＿ｏｕｔ」バスに沿ってチェーンを下って流れる情報（ファームウェアソケットモジュールからチェーンにおける第１のＦＡＭに、１つのＦＡＭから次の下流のＦＡＭに、チェーンにおける最終のＦＡＭからファームウェアソケットモジュールに）は、データチャネルと呼ばれる。コマンド（制御）情報である、「ｄａｔａ＿ｉｎ」バスおよび「ｄａｔａ＿ｏｕｔ」バスに沿ってチェーンを下って流れる情報は、コマンドチャネルと呼ばれる。コマンドチャネルを介して伝送されるコマンドは、通常、消費されないが、解釈されて（適宜）、下流のモジュールに送られる。この結果、コマンドチャネルに入る多くのコマンドは、ソフトウェアに送り返されもする。
【００４６】
コマンドチャネル上で、個々のコマンドに関する好ましいフォーマットは、コマンドが、以下のフィールドを有する６４ビット長を有することである。すなわち、コマンド（１６ビット）、誤り（１ビット）、同期（１ビット）、予約済み（８ビット）、モジュールＩＤ（６ビット）、およびパラメータ（３２ビット）である。
【００４７】
コマンドフィールドは、好ましくは、２つのＡＳＣＩＩ文字（例えば、「ＱＹ」が、クエリコマンドであることが可能である）として符号化されるが、そうである必要はなく、任意の１６ビットの値が、有効である。コマンドチャネルに入ると、誤りビットは、クリアである。任意のモジュールが、その後、適宜、誤りビットを設定することができ、次に、誤りビットは、コマンドが、ＦＡＭチェーンおよびファームウェアソケットモジュールを抜けると、ソフトウェアに戻るように通信される。同期ビットは、好ましくは、アウトバウンドのコマンドおよびデータの同期を、コマンドおよびデータがソフトウェアに戻る途中に制御するように設定される。
【００４８】
モジュールＩＤフィールドは、そのコマンドに応答すべき特定のファームウェアモジュールを特定する。好ましくは、モジュールＩＤに関する０という値は、すべてのモジュールが、そのコマンドに応答すべきことを意味する（ＦＡＭのすべてだけでなく、ファームウェアソケットモジュールも含む）。また、モジュールＩＤに関する１という値は、ファームウェアソケットモジュールを除くすべてのモジュールが、そのコマンドに応答すべきことを意味することが好ましい。好ましくは、２というモジュールＩＤ値は、ファームウェアソケットモジュールだけのために取っておかれ、３以上のモジュールＩＤ値は、特定のＦＡＭに向けられる。各ＦＡＭは、ファームウェアモジュールインタフェースの信号層に関連して説明される入力信号ｍｏｄｕｌｅ＿ＩＤのお陰で、そのＦＡＭ自らのモジュールＩＤ値を知る。
【００４９】
ファームウェアモジュールインタフェースに関する好ましいグローバルコマンドには、リセットコマンド、クエリコマンド、クエリ応答コマンド、パススルーコマンド、データ開始コマンド、およびデータ終了コマンドが含まれる。
【００５０】
リセットコマンド（ＲＳ）は、コマンドのモジュールＩＤフィールドによって示される通り、ＦＡＭチェーン全体、または個々のＦＡＭをリセットするように動作する。好ましくは、このパラメータフィールドは、このコマンドに関して使用されない。
【００５１】
クエリコマンド（ＱＹ）は、モジュールにクエリを行って、モジュールの現在の状態を評価するように動作する。モジュールは、１つまたは複数のクエリ応答（ＱＲ）コマンドで応答しなければならない。モジュールが、そのモジュールのクエリ応答で応答した後、そのモジュールは、元のＱＹコマンドを、チェーンにおける次のモジュールに送る。好ましくは、パラメータフィールドは、このコマンドに関して使用されていない。
【００５２】
モジュールが、ＱＹコマンドを受け取ると、１つまたは複数のクエリ応答コマンド（ＱＲ）が、モジュールによって生成される。クエリ応答を受け取ると、ＦＡＭは、その応答を単に下流に転送する。好ましくは、ＱＲコマンドに関するパラメータフィールドは、モジュール固有であり、この３２ビットのフィールドは、２つのサブフィールド、すなわち、どのようなタイプの情報が送られているかを示すタグである最上位の８ビット、および所与のタグに関連するデータである最下位の２４ビットに分割される。
【００５３】
パススルーコマンド（ＰＳ）は、モジュールが、データを、変更なしにパススルーすべきか、または通常のデータ処理動作を実行すべきかをモジュールに知らせる。パススルーモードは、コマンド処理またはコマンド転送に影響を与えず、このモードの影響は、データチャネルに対してだけに限られる。好ましくは、パラメータフィールドの最下位ビット（ビット０）が、パススルーモードをイネーブル／ディセーブルにし、１というパススルービット値が、パススルーモードをイネーブルにし、０というパススルービット値が、パススルーモードをディセーブルにする。
【００５４】
データ開始コマンド（ＳＤ）は、データストリームの開始に（通常、フィールド境界上に）マークを付けるのに使用される。データ終了コマンド（ＥＤ）は、データストリームの終了に（この場合も、通常、フィールド境界上に）マークを付けるのに使用される。ＳＤコマンドおよびＥＤコマンドに関するパラメータフィールドは、好ましくは、使用されないが、一部の事例において、パラメータフィールドは、ファイルＩＤまたはフレームＩＤを指定するのに使用されることが可能である。
【００５５】
ＦＡＭチェーンを通るコマンド伝搬は、好ましくは、以下の通り進む。すなわち、（１）グローバルコマンド（モジュールＩＤ値が０または１であるコマンド）が、ＦＡＭチェーンにおける各ＦＡＭによって順方向に伝搬され、（２）ＦＡＭは、モジュールＩＤ値が、異なるＦＡＭのために設定されているコマンドを順方向に伝搬し、（３）ＦＡＭは、同期ビットが設定されているコマンドを順方向で伝播する。
【００５６】
ファームウェアソケットモジュールに固有である、またはそうである可能性がある好ましいコマンドには、データカウントコマンド、リセットコマンド、およびクエリ応答コマンドが含まれる。
【００５７】
データカウントコマンド（ＤＣ）は、ファームウェアソケットモジュールが前回にリセットされて以来、どれだけのデータが、ＦＡＭチェーンを通過したかをファームウェアソケットモジュールに尋ねるのに使用されることが可能である。ファームウェアソケットモジュールに１つのＤＣコマンドが送信されることは、３つのＤＣコマンドが戻されることをもたらす。最初の応答のＤＣコマンドは、ＦＡＭチェーンに入ったバイト数を特定する。第２番の応答のＤＣコマンドは、ＦＡＭチェーンを出たデータのバイト数を特定する。第３番の応答のＤＣコマンドは、戻される元の送られたＤＣコマンドである。好ましくは、ＳＤコマンドまたはＲＳコマンドは、データカウントをリセットするように動作する。パラメータフィールドに関して、送られるＤＣコマンドのパラメータフィールドは、好ましくは、無視されるのに対して、応答のＤＣコマンドのパラメータフィールドは、好ましくは、前述した通り、関係のあるバイト数を特定する。
【００５８】
ＲＳ（リセットコマンド）フォーマットについては、グローバルコマンドに関連して前段で説明した。ファームウェアソケットモジュールは、ＲＳコマンドを受信すると、好ましくは、ＦＡＭチェーン全体をリセットし、さらに、あらゆる入力キューおよび出力キューをクリアする。ファームウェアソケットモジュールによってカードから戻されていない可能性があるデータは、ＲＳコマンドによってクリアされ、このため、アプリケーションは、ファームウェアソケットモジュールにリセットコマンドを送信する前に、予期されるすべてのデータを受信していることを確実にしなければならない。このことは、同期ビットセットを有するコマンドを送ること、またはファームウェアソケットモジュールのドアベルレジスタの中のフラッシュビットのストロービングを行うことによって達せられることが可能である。
【００５９】
また、クエリ応答コマンド（ＱＲ）フォーマットについても、グローバルコマンドに関連して前段で説明した。好ましくは、ファームウェアソケットモジュールが、ＱＲコマンドを発行すると、ファームウェアソケットモジュールのパラメータフィールドは、以下の表２の中で以下の通り設定される。すなわち、
【表２】
2009528584.tif 000004
【００６０】
ＦＡＭに固有であるコマンドは、各ＦＡＭのデータ処理動作に応じて変化する。例えば、ターゲットデータのストリームとパターンがマッチングされる検索動作を実行するように構成されたＦＡＭに適用可能なコマンドのセットには、好ましくはデータストリームの検索が照らし合わせて行われるパターンを定義するコマンド、パターンとの一致が、データストリームの中で見つかった場合に、データストリームからどれだけのコンテキストが戻されるべきか（例えば、データストリーム内の一致の前と後のＸバイトを戻す）を特定するコマンド、所与のパターンに関して許されるミスマッチの数を定義するコマンド（例えば、パターンが、長さ１０である場合、Ｋというミスマッチ値は、１０のパターン文字のいずれか（１０−Ｋ）が、データストリーム内で一致した場合に、一致が生じることを許す）、マッチが宣言されるのに、パターンの中のいずれのビットが、データストリームの中で一致を見出さなければならないかを定義するコマンド、検索されるべきデータ内のファイルを定義するコマンド、および検索されなければならないファイル内のデータのサブセットを定義するコマンドが含まれる。そのようなコマンドのパラメータフィールド、またはオプションとして、他のフィールドが、ＦＡＭによって実行されるパターンマッチング動作の、これらの態様を定義するのに使用されることが可能である。また、パターンマッチング動作を実行するように構成されたＦＡＭからのＱＲコマンドは、好ましくは、値が、ＦＡＭタイプの識別、ＦＡＭタイプのバージョンの識別、ＦＡＭタイプのビルドの識別、およびＦＡＭによってサポートされるパターンの数の識別に対応するタグで応答する。
【００６１】
別の例として、暗号化動作または解読動作を実行するように構成されたＦＡＭに適用可能なコマンドのセットには、好ましくは、暗号化／解読動作において使用されるべきキーを特定するコマンドが含まれる。
【００６２】
ＦＡＭによって実行されることが可能な前段でリストアップされる他のデータ処理動作に加え、可能なデータ処理動作には、固定長のレコードを取り込み、選択されているレコードのバイトだけを送るフィールド選択動作（そのようなＦＡＭへのコマンドは、いずれのバイトが選択されるべきかを示す）、サイズが、ＦＡＭを通して処理されるデータサイズ（本明細書で説明される好ましい実施例において８バイト）の倍数ではないレコードにパディングを追加するレコードゲート動作（そのようなＦＡＭへのコマンドは、所望されるレコードサイズを示す）、レコードからパディングバイトを除去する逆レコードゲート動作（そのようなＦＡＭへのコマンドは、除去されるべきレコードのバイト数を示す）、および１つまたは複数のパターンに対する一致を、固定長のレコードの指定された列境界内で検索するレコード選択動作（コマンドが、前述したパターンマッチングコマンドと同様であるが、指定された列境界内で行われる検索を制限するのに、レコードがどのようにマスクされるかを特定するコマンドも含む動作）も含まれる。
【００６３】
好ましくは、ＦＰＧＡ上に配備されるＦＡＭは、１つのタイプのデータ処理動作を実行することに専用であり、コマンド信号は、そのタイプのデータ処理動作の特定の態様を定義するように作用する。例えば、図７に示される通り、ＦＡＭチェーンにおける各ＦＡＭは、或るタイプのデータ処理動作に専用であり、例えば、第１のＦＡＭは、伸張動作を実行するように構成され、第４番のＦＡＭは、１つのタイプの検索動作を実行するように構成され、第５番のＦＡＭは、別のタイプの検索動作を実行するように構成され、最後から２番目のＦＡＭは、暗号化動作を実行するように構成される。適切なコマンドを通して、各ＦＡＭのデータ処理動作の詳細が、制御されることが可能である（例えば、「Ｓｍｉｔｈ」という語を検索するように第４番のＦＡＭを構成する、またはキーＡを使用して暗号化動作を実行するよう最後から２番目のＦＡＭを構成する）。ＦＡＭが、異なるタイプのデータ処理動作を実行するように完全に再プログラミングされるべき場合、ＦＰＧＡが、この目的を達するように再構成されることが好ましいが、そのように行われる必要はない。
【００６４】
さらに、ＦＡＭチェーンにおける各ＦＡＭを適切にオンまたはオフにすることにより、特化された処理動作が、ＦＡＭチェーンによって達せられることが可能である。例えば、データが、暗号化されたフォーマットで格納される所与のパターンに関してデータストリーム内で検索を実行するのに、（１）検索ＦＡＭの１つをオンにし、そのＦＡＭを、その所与のパターンを使用して構成し、（２）解読ＦＡＭをオンにし、そのＦＡＭを、データストリームを解読する適切なキーを使用して構成し、（３）チェーンにおける他のすべてのＦＡＭをオフにするコマンドが、ＦＡＭチェーンに送られることが可能である。そのような事例において、暗号化されたデータストリームは、第２番のＦＡＭによって解読され、解読されたデータストリームは、その所与のパターンに関して検索ＦＡＭの１つによって検索される。
【００６５】
ハードウェア／ソフトウェアインタフェース２１２
好ましくは、ファームウェアソケットモジュールは、ドライバレベルシステムソフトウェア２０４と連携して使用される場合、システムのメモリ空間に／からデータを転送するバックエンドを有するＸｉｌｉｎｘ（登録商標）  ＰＣＩ−Ｘを使用する。このバックエンドインタフェースの性質について、本明細書でより詳細に説明する。
【００６６】
Ｘｉｌｉｎｘ（登録商標）  ＰＣＩ−Ｘ  Ｃｏｒｅ  Ｖｅｒｓｉｏｎ  ５．０は、ＰＣＩ−Ｘ規格によって説明されているインタフェースから、Ｘｉｌｉｎｘ（登録商標）  ＬｏｇｉＣｏｒｅ  ＰＣＩ−Ｘ  Ｄｅｓｉｇｎ  Ｇｕｉｄｅ  Ｖｅｒｓｉｏｎ  ５．０およびＸｉｌｉｎｘ（登録商標）  ＬｏｇｉＣｏｒｅ  ＰＣＩ−Ｘ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  Ｇｕｉｄｅ  Ｖｅｒｓｉｏｎ  ５．０によって説明されているＸｉｌｉｎｘ（登録商標）によって設計されたインタフェースへの変換を扱う。好ましくは、構成パラメータは、ＰＣＩ−Ｘ接続プリント回路基板３００が、６４ビットおよび１３３ＭＨｚ対応であることを示すように設定される。システムＢＩＯＳが、デバイスの速度を１００ＭＨｚに設定するか、または１３３ＭＨｚに設定するかは、１３３ＭＨｚ能力ビット、ならびにＰＣＩＸＣＡＰピン上の物理的電圧および時間遅延に依存する。ＦＰＧＡ３０２上に配備されたモジュールが、１００ＭＨｚだけで実行される場合、ＰＣＩＸＣＡＰピンは、このことを示すように設定されなければならない。また、ＰＣＩ−Ｘ構成は、３つまでの６４ビットＢＡＲ（ベースアドレスレジスタ）、または６つまでの３２ビットＢＡＲを使用するように設定されることが可能である。好ましくは、ファームウェアソケットモジュール１２０は、６４ビットＢＡＲとして構成された第１のＢＡＲを使用して、デバイスドライバソフトウェア２０４との通信のためにモジュール１２０のデバイスレジスタをマップする。
【００６７】
ファームウェアソケットモジュール１２０とデバイスドライバソフトウェア２０４の間の通信の大部分は、好ましくは、３つの記述子プールセットを介して行われる。図５に示される通り、これらの記述子プールに関するバッファは、カーネル−カード入力記述子プールバッファ５００、データに関するカード−カーネル出力記述子プールバッファ５０４と、コマンドに関するカード−カーネル出力記述子プールバッファ５０６とを含む。これらの記述子プールバッファは、好ましくは、ＯＳカーネル／デバイスドライバソフトウェア２０４によって管理されるメモリ空間の中（例えば、ＲＡＭ１１０内）に存在する。バッファ５００、５０４、および５０６の中の各エントリは、記述子を含み、各記述子は、そのバッファ内の複数のアドレスにわたることが可能である。
【００６８】
後段で説明されるバイトカウントフィールドおよび他のフラグに加え、記述子はそれぞれ、好ましくは、ソフトウェアからハードウェアへの（入力記述子に関する）、またはハードウェアからソフトウェアへの（出力記述子に関する）データ移動に関するメモリロケーションの物理アドレスおよび仮想アドレスを含む。このため、記述子プールバッファの中のエントリは、ファームウェアソケットモジュールが、データを読み取る、またはデータを書き込む位置へのポインタの役割をする。
【００６９】
ファームウェアソケットモジュールが、データ（コマンドとターゲットデータの両方）を読み取る／書き込むメモリ空間５０２は、コンピュータシステム、およびコンピュータシステムに接続された物理的にアドレス指定可能な任意のデータ記憶デバイスの物理的アドレス空間内の任意のメモリであることが可能である。このため、メモリ空間５０２は、コンピュータシステムのマザーボード（例えば、ＲＡＭ１１０）に限定される必要がない。例えば、カードのメモリ３０４が、ドライバレベルソフトウェア２０４に利用可能にされた場合、コマンドおよびターゲットデータを格納するためのメモリ空間５０２は、メモリ３０４を含むことが可能である。また、メモリ空間５０２は、データストア１０４内、または他の何らかのシステム接続された記憶デバイス内のアドレスを、データストア１０４、またはそのような記憶デバイスのアドレス空間が、ドライバレベルソフトウェアに利用可能にされた場合（例えば、データストア１０４に関するディスクコントローラ１０６を介して）、含むことが可能である。
【００７０】
ハードウェア／ソフトウェアインタフェース２１２に関する好ましい通常の動作は、以下の通りである。すなわち、
１）ソフトウェアデバイスドライバ２０４が、ＦＡＭに送られるべきコマンドおよびデータを、メモリ空間５０２の中のバッファのセットの中に入れる。好ましくは、ドライバレベルソフトウェア２０４は、再構成可能なロジックデバイスを介してストリーミングされるべきターゲットデータを、メモリ空間５０２の隣接するアドレスの中に単一のセットとして格納し、これにより、ターゲットデータがＦＰＧＡに読み込まれることが可能な速度が向上するだけでなく、そのような隣接して格納されたターゲットデータをポイントする連続する記述子が、場合により、記述子のバイトカウントフィールドを適切に更新することによって、より少ない記述子に集約されることが可能であるという点で、柔軟性をもたらしもする。
２）デバイスドライバ２０４が、次に、メモリ空間５０２内のバッファの内容についてファームウェアソケットモジュールに知らせる入力記述子を構築する。好ましくは、１つの記述子は、ターゲットデータのＭバイトの各コマンドまたは各セグメントに関して使用され、Ｍのサイズは、様々な要因に応じて可変である。Ｍのサイズは、デフォルトで３２キロバイトにされることが可能である。しかし、前述した通り、この値は、依然として、各記述子に関するカードを介して大量のデータを移動しながら、バッファセットアップ、記述子管理などに関連するプロセッサオーバヘッドを最小限に抑える要望を考慮して、ソフトウェアによって可変であることが可能である。また、デバイスドライバ２０４は、好ましくは、ＦＡＭから戻ってくるデータおよびコマンドをどこに置くかをファームウェアソケットモジュールに告げる出力記述子を構築する。入力記述子は、デバイスドライバ２０４によって、入力記述子プールバッファ５００の中に格納される。データに対応する出力記述子は、デバイスドライバ２０４によって、出力記述子プールバッファ５０４の中に格納され、コマンドに対応する出力記述子は、デバイスドライバ２０４によって、出力記述子プールバッファ５０６の中に格納される。
３）デバイスドライバ２０４は、次に、新たな入力記述子、および新たな出力記述子が、通信パス５１０上でドアベル信号を介して利用可能であることをファームウェアソケットモジュールに知らせる。
４）ファームウェアソケットが、次に、バッファ５００の中の第１の入力記述子を読み取り、ＦＡＭチェーンに送られるべきデータ（コマンドまたはターゲットデータ）が格納されるロケーションを特定し、そのロケーションからＦＡＭチェーンへのデータ（コマンドまたはターゲットデータ）のＤＭＡ転送を実行し、バッファ５００の中の次の入力記述子に進む。このため、コマンドおよびターゲットデータは、入力記述子プールバッファ５００内で設定されているのと同じ順序でＦＡＭチェーンに供給される。
５）ファームウェアソケットモジュールが、次に、ＦＡＭチェーンを出るコマンドを、バッファ５０６の中のコマンド出力記述子によって指定されたメモリ空間５０２ｃ内のバッファに送る。また、ファームウェアソケットモジュールは、ＦＡＭチェーンから出るデータを、バッファ５０４の中のデータ出力記述子によって指定されたメモリ空間５０２ｂ内のバッファに送る。
６）ファームウェアソケットモジュールは、次に、コマンドおよび／またはデータが利用可能であることをデバイスドライバに通知する（割り込みを介して）。
７）ソフトウェアが、次に、適宜、戻されたデータおよび／またはコマンドに対処する適切なデータハンドラまたはコマンドハンドラを呼び出す（このハンドラは、ソフトウェアライブラリインタフェース２１０を介して制御される）。
【００７１】
ソフトウェアから再構成可能なロジックデバイスに情報を送る際、すべての転送（コマンドとデータの両方）は、好ましくは、バッファ５００の中に格納された共通の入力記述子によって管理される。ＦＡＭチェーンの中の個々のＦＡＭが、データおよびコマンドを並べ替えない限り、バッファ５００の中の入力記述子の順序によって定義されるデータおよびコマンドの順序は、再構成可能なロジックデバイス内の処理全体にわたって保たれる。
【００７２】
再構成可能なロジックデバイスからソフトウェアに戻るように送られるデータおよびコマンドに関して、厳密な順序付けは、必ずしも要求されない。厳密な同期が、プロセス全体（ソフトウェアへのコマンドおよびデータの戻しを含む）にわたって所望される場合、デバイスドライバソフトウェアは、個別のコマンドの中で同期ビットを設定することができる。同期ビットセットを有するコマンドが、ＦＡＭチェーンの出口点からファームウェアソケットモジュールに到着すると、ファームウェアソケットモジュールは、好ましくは、以下の機能を実行する。すなわち、（１）データチャネルバッファをメモリにフラッシュし、（２）データ出力記述子の中で設定された同期フラグを有するデータチャネルにおけるＮｕｌｌ（空の）バッファを作成し、（３）このデータ出力記述子が、メモリにフラッシュされることを確実にし、（４）コマンドチャネルバッファ（コマンド自体の中で同期ビットが設定されている）をフラッシュする。
【００７３】
ファームウェアソケットモジュール１２０は、好ましくは、前段で特定された（さらに、６４ビットＢＡＲとして構成されている）第１のＢＡＲのメモリ領域の中にマップされた１６個のデバイスレジスタを有する。各デバイスレジスタの物理的アドレスは、ベースアドレスに或るオフセットを足したアドレスである。これらのレジスタ、およびＢＡＲからの、これらのレジスタのオフセットが、以下の表３にリストアップされる。すなわち、
【表３】
2009528584.tif 000005
【００７４】
ファームウェアＩＤは、２つの値から成る６４ビットの読み取り専用レジスタである。最下位の３２ビットは、ファームウェアＩＤ番号であり、最上位の３２ビットは、そのＩＤによって示される特定のファームウェアの改訂番号である。
【００７５】
ＦＰＧＡ情報レジスタは、２つの情報、すなわち、ＦＰＧＡタイプおよびＦＰＧＡサイズを含む６４ビットの読み取り専用レジスタである。ＦＰＧＡタイプは、ＦＰＧＡのタイプを示す４つのＡＳＣＩＩ文字（３２ビット）である。例えば、ＦＰＡＧデバイスが、Ｘｉｌｉｎｘ  Ｖｉｒｔｅｘ（登録商標）−ＩＩデバイスである場合、ＦＰＧＡタイプは、「ｘｃ２ｖ」である。ＦＰＧＡサイズは、どのようなサイズのＦＰＧＡが使用されているかを示す３２ビットの整数である。例えば、ＦＰＧＡデバイスが、Ｘｉｌｉｎｘ  Ｖｉｒｔｅｘ（登録商標）−ＩＩ  ４０００である場合、ＦＰＧＡサイズは、４０００である。ＦＰＧＡタイプは、ＦＰＧＡ情報レジスタの最下位の３２ビットであるのに対して、ＦＰＧＡサイズは、レジスタの最上位の３２ビットである。
【００７６】
デバイスステータスレジスタは、ハードウェアデバイスに接続されたハードウェアシステムについての２つの情報を含む６４ビットの読み取り専用レジスタである。最下位の３２ビットは、ハードウェアデバイスに接続されたハードウェアシステムのタイプを示す。以下の表４は、デバイスタイプ番号付けの例を示す。
【表４】
2009528584.tif 000006
デバイスステータスレジスタの最上位の３２ビットは、ハードウェアシステムに接続されたデバイスの数を示す整数である。
【００７７】
実装されたＲＡＭサイズは、ＦＰＧＡデバイスに接続されたメモリ３０４の量を（キロバイト単位で）示す６４ビットのレジスタである。
【００７８】
ドアベルレジスタは、ドライバレベルソフトウェア２０４とファームウェアソケットモジュール１２０の間の通信のために使用されるフラグを含む６４ビットの読み取り／書き込みレジスタである。ドアベルフラグ、およびこれらのフラグの機能は、以下の表５にリストアップされる。
【表５】
2009528584.tif 000007
【００７９】
実行ビットは、ドライバレベルソフトウェア２０４によって、実行を開始する、または再開するようファームウェアソケットモジュールに告げるのに設定される。このビットは、ハードウェアによって確認されると、ファームウェアソケットモジュールによってクリアされる。停止ビットは、ドライバレベルソフトウェア２０４によって、実行を停止する、または一時停止するようファームウェアソケットモジュールに告げるのに設定される。このビットは、ハードウェアによって確認されると、ファームウェアソケットモジュールによってクリアされる。リセットビットは、ドライバレベルソフトウェア２０４によって、ファームウェアソケットモジュール、およびＦＡＭチェーンにおけるＦＡＭのすべてをリセットするのに設定される。このビットは、ハードウェアによって確認されると、ファームウェアソケットモジュールによってクリアされる。フラッシュビットは、ドライバレベルソフトウェア２０４によって、ソフトウェアを宛先とするコマンドおよびデータを保持するファームウェアソケットモジュール上のアウトバウンドバッファをフラッシュするのに設定される。このビットは、ハードウェアによって確認されると、ファームウェアソケットモジュールによってクリアされる。ストローブデバッグビットは、デバッグ目的で使用されることが可能なビットである。クロックカウンタリセットビットは、ＰＣＩ−Ｘバスのクロック速度を決定するために使用されるファームウェアソケットモジュールの中のカウンタをリセットする。ＰＣＩ−Ｘバスのクロック速度は、ファームウェアソケットモジュールパラメータレジスタの上位の９ビットを読み取ることによって決定されることが可能である。
【００８０】
割り込みステータスレジスタは、以下の表６にリストアップされる割り込み条件についてドライバレベルソフトウェア２０４に通知するのに使用される６４ビットの読み込み／書き込みレジスタである。割り込み条件が設定されるといつでも、オペレーティングシステムに割り込みを行う割り込みが、ＰＣＩ−Ｘバス上でトリガされ、ドライバレベルソフトウェア２０４によって応答が行われなければならない。ドライバレベルソフトウェア２０４が、割り込みステータスレジスタを読み取る前に、複数の割り込み条件が生じると、ソフトウェアが、割り込みステータスレジスタを読み取った際に、複数のビットが、設定される。割り込みステータスレジスタは、読み取られると、クリアされる。
【表６】
2009528584.tif 000008
【００８１】
ファームウェアソケットモジュールは、データの入力記述子バッファを読み取ろうと試みて、次の入力記述子バッファが、読み取られる準備ができていない（バッファ５００の中でキュー状態にある次の入力記述子のレディビットを調べることにより）場合、割り込みビット０を設定する。割り込みビット０が、書き込まれた場合、ドライブレベルソフトウェア２０４は、ファームウェアソケットモジュールが、入力記述子プールバッファを再び読み取ろうと試みる前に、ドアベルレジスタの実行ビットに書き込まなければならない。
【００８２】
割り込みビット１は、ファームウェアソケットモジュールへの入力として定められているデータの入力記述子を読み取る際、誤りが生じたことを知らせる。
【００８３】
入力記述子プールバッファ５００の割り込みフラグが、設定された場合、ファームウェアソケットモジュールは、入力データの入力記述子バッファを読み取ることを終えた後、割り込みビット２を設定する。
【００８４】
ファームウェアソケットモジュールは、カーネルに出力すべきデータを有するが、次のＤａｔａ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファが、利用できない（バッファ５０４の中でキュー状態にある次のデータ出力記述子のレディビットを調べることにより）場合、割り込みビット３を設定する。ファームウェアソケットモジュールが、この割り込みを設定すると、ドライバレベルソフトウェア２０４は、ファームウェアソケットモジュールが、データを再び出力しようと試みる前に、Ｄａｔａ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファを利用可能にした後、ドアベルレジスタの実行ビットに書き込まなければならない。
【００８５】
割り込みビット４は、ファームウェアソケットモジュールが、出力記述子バッファにデータを書き込もうと試みた際に、誤りが生じたことを知らせる。
【００８６】
ファームウェアソケットモジュールは、Ｄａｔａ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファにデータを書き込み、記述子を閉じるといつでも（すなわち、ファームウェアソケットモジュールは、データを書き込むために次のＤａｔａ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファに進んでいる）、割り込みビット５を設定する。
【００８７】
割り込みビット６は、ドアベルレジスタの中でフラッシュビットが設定されている場合、戻されるべき出力データが全く存在しないことを示すように定義される。
【００８８】
ファームウェアソケットモジュールは、カーネルに出力すべきコマンドデータを有するが、次のＣｏｍｍａｎｄ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファが、利用できない（バッファ５０６の中でキュー状態にある次のコマンド出力記述子のレディビットを調べることにより）場合、割り込みビット７を設定する。ファームウェアソケットモジュールが、この割り込みを設定すると、ドライバレベルソフトウェア２０４は、ファームウェアソケットモジュールが、コマンドデータを再び出力しようと試みる前に、Ｃｏｍｍａｎｄ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファを利用可能にした後、ドアベルレジスタの実行ビットに書き込まなければならない。
【００８９】
割り込みビット８は、ファームウェアソケットモジュールが、コマンド出力記述子バッファにコマンドデータを書き込もうと試みた際に、誤りが生じたことを知らせる。
【００９０】
ファームウェアソケットモジュールは、Ｃｏｍｍａｎｄ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファにデータを書き込み、記述子を閉じるといつでも（すなわち、ファームウェアソケットモジュールは、コマンドデータを書き込むために次のＣｏｍｍａｎｄ−ｔｏ−Ｋｅｒｎｅｌ記述子バッファに進んでいる）、割り込みビット９を設定する。
【００９１】
Ｄａｔａ−ｔｏ−Ｃａｒｄアドレスレジスタは、Ｄａｔａ−ｔｏ−Ｃａｒｄ入力記述子プールバッファ５００の先頭の物理的アドレスを示すのに使用される６４ビットの読み取り／書き込みレジスタである。ドライバレベルソフトウェア２０４は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。
【００９２】
Ｄａｔａ−ｔｏ−Ｃａｒｄカウントレジスタは、データを読み取るために利用可能なＤａｔａ−ｔｏ−Ｃａｒｄ入力記述子バッファの数を示すのに使用される３２ビットの読み取り／書き込みレジスタである。ドライバレベルソフトウェア２０４は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の３２ビットが０で埋められた６４ビットの値が、戻される。
【００９３】
Ｄａｔａ−ｔｏ−Ｃａｒｄネクストレジスタは、読み取りが行われるべき次のＤａｔａ−ｔｏ−Ｃａｒｄ入力記述子バッファに対する３２ビットの読み取り／書き込みポインタである。このポインタは、ファームウェアソケットモジュールとドライバレベルソフトウェアが同期していることを確実にするのに使用される。このアドレスから読み取りが行われると、上位の３２ビットが０で埋められた６４ビットの値が、戻される。
【００９４】
Ｄａｔａ−ｔｏ−Ｋｅｒｎｅｌアドレスレジスタは、Ｄａｔａ−ｔｏ−Ｋｅｒｎｅｌ出力記述子プールバッファ５０４の先頭の物理的アドレスを示すのに使用される４８ビットの読み取り／書き込みレジスタである。ドライバレベルソフトウェア２０４は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の１６ビットが０で埋められた６４ビットの値が、戻される。
【００９５】
Ｄａｔａ−ｔｏ−Ｋｅｒｎｅｌカウントレジスタは、データを書き込むために利用可能なＤａｔａ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファの数を示すのに使用される３２ビットの読み取り／書き込みレジスタである。ドライバレベルソフトウェア２０４は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の３２ビットが０で埋められた６４ビットの値が、戻される。
【００９６】
Ｄａｔａ−ｔｏ−Ｋｅｒｎｅｌネクストレジスタは、書き込みが行われるべき次のＤａｔａ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファに対する３２ビットの読み取り／書き込みポインタである。このポインタは、ファームウェアソケットモジュールとドライバレベルソフトウェアが同期していることを確実にするのに使用される。このアドレスから読み取りが行われると、上位の３２ビットが０で埋められた６４ビットの値が、戻される。
【００９７】
Ｃｏｍｍａｎｄ−ｔｏ−Ｋｅｒｎｅｌアドレスレジスタは、Ｃｏｍｍａｎｄ−ｔｏ−Ｋｅｒｎｅｌ出力記述子プールバッファ５０６の先頭の物理的アドレスを示すのに使用される４８ビットの読み取り／書き込みレジスタである。ドライバレベルソフトウェア２０４は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の１６ビットが０で埋められた６４ビットの値が、戻される。
【００９８】
Ｃｏｍｍａｎｄ−ｔｏ−Ｋｅｒｎｅｌカウントレジスタは、コマンドデータを書き込むために利用可能なＣｏｍｍａｎｄ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファの数を示すのに使用される３２ビットの読み取り／書き込みレジスタである。ドライバレベルソフトウェア２０４は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の３２ビットが０で埋められた６４ビットの値が、戻される。
【００９９】
Ｃｏｍｍａｎｄ−ｔｏ−Ｋｅｒｎｅｌネクストレジスタは、書き込みが行われるべき次のＣｏｍｍａｎｄ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファに対する３２ビットの読み取り／書き込みポインタである。このポインタは、ファームウェアソケットモジュールとドライバレベルソフトウェアが同期していることを確実にするのに使用される。このアドレスから読み取りが行われると、上位の３２ビットが０で埋められた６４ビットの値が、戻される。
【０１００】
パラメータレジスタは、ファームウェアソケットモジュールの中のプログラミング可能なパラメータを設定するのに使用される６４ビットのレジスタである。以下の表７に示される通り、これらのパラメータのいくつかは、読み取り／書き込みであるのに対して、他のパラメータは、読み取り専用である。
【表７】
2009528584.tif 000009
【０１０１】
最大ＰＣＩ−Ｘバーストサイズパラメータは、ファームウェアソケットモジュールが、ＰＣＩ−Ｘバス１１２上で実行しようと試みる最大サイズトランザクションを設定するのに使用される。この最大トランザクションサイズは、パラメータレジスタの中の６ビットの値掛ける１２８であるが、このフィールドを０に設定することにより、最大トランザクションサイズが４０９６（ＰＣＩ−Ｘ規格によって許される最大トランザクションサイズ）に設定される。
【０１０２】
パラメータレジスタのビット５５は、このレジスタの上位の８ビットにおけるＰＣＩ−Ｘバス速度が有効であるかどうかを示すのに使用される（「１」は、有効を示し、「０」は、無効を示す）。
【０１０３】
パラメータレジスタの最上位の８ビットは、ＰＣＩ−Ｘバスの計算速度をＭＨｚ単位で示す。バス速度有効ビット（ビット５５）も、この値が有効であるか否かを確認するのに読み取られなければならない。ＰＣＩ−Ｘバス速度値が、有効ではない場合、ドライバレベルソフトウェアは、短い時間、待ち、この値を再び読み取らなければならない。
【０１０４】
前述した通り、ファームウェアソケットモジュールとドライバレベルソフトウェア２０４の間の通信は、３つの記述子セット、すなわち、１つの入力記述子プールと、２つの出力記述子プール（１つは、コマンドに関し、他方は、データに関する）とを使用して行われる。各プールは、記述子バッファ（カーネルバッファ）についての情報を有するフラグおよびフィールドを含む独自の記述子セットを有する。
【０１０５】
各記述子は、好ましくは、以下の表８に示される通り、それぞれの８バイトの４つの部分に分割される３２バイト長である。すなわち、
【表８】
2009528584.tif 000010
【０１０６】
フラグフィールドは、以下の表９に示される通り、記述子バッファについての情報を含む６４ビットのフィールドである。
【表９】
2009528584.tif 000011
【０１０７】
ビジービットは、ドライバレベルソフトウェア２０４によって、記述子バッファが使用中であることを示すのに設定される。
【０１０８】
コマンド／データビットは、バッファが、コマンド情報またはデータを含むかどうかをファームウェアソケットモジュールに告げるのに使用される。バッファが、コマンド情報を含む場合、このビットは、設定されなければならず、含まない場合、このビットは、クリアされなければならない。ファームウェアソケットモジュールは、Ｄａｔａ−ｔｏ−Ｃａｒｄ入力記述子バッファ上で、このビットを読み取り、そのバッファの中のすべてのデータに適切にマークを付ける（コマンドまたはデータとして）。
【０１０９】
Ｄａｔａ−ｔｏ−Ｋｅｒｎｅｌビットは、バッファの中のデータが、ドライバレベルソフトウェア２０４（カーネル）を宛先としているか否かを示す。このビットが設定されている場合、データは、カーネルを宛先として、ファームウェアソケットモジュールから出力される。ファームウェアソケットモジュールが、このビットを設定することを担う。このビット、またはＤａｔａ−ｔｏ−Ｃａｒｄビットが常に設定されなければならないが、両方が設定されることは決してない。
【０１１０】
Ｄａｔａ−ｔｏ−Ｃａｒｄビットは、バッファの中のデータが、ファームウェアソケットモジュール（カード上に配備された）を宛先としているかどうかを示す。このビットが設定されている場合、データは、ドライバレベルソフトウェア２０４からファームウェアソケットモジュールに入力される。ドライバレベルソフトウェア２０４は、このビットを設定することを担う。このビット、またはＤａｔａ−ｔｏ−Ｋｅｒｎｅｌビットが常に設定されなければならないが、両方が設定されることは決してない。
【０１１１】
レディビットは、ドライバレベルソフトウェア２０４によって、バッファが、ファームウェアソケットモジュールによって使用される準備ができていることを示すのに設定される。ファームウェアソケットモジュールは、そのバッファを処理する際、このビットをクリアしなければならない。
【０１１２】
完了ビットは、ファームウェアソケットモジュールによって、ファームウェアソケットモジュールが、そのバッファを処理することを完了したことをドライバレベルソフトウェア２０４に示すのに設定される。ドライバレベルソフトウェア２０４は、そのバッファをクリーンアップすることを終えると、このビットをクリアしなければならない。
【０１１３】
割り込みビットは、ドライバレベルソフトウェアによって、ファームウェアソケットモジュールが、このバッファを処理した後、Ｄａｔａ−ｔｏ−Ｃａｒｄ記述子バッファ完了割り込みを使用して割り込みを行うよう、ファームウェアソケットモジュールに命令するのに設定される。
【０１１４】
バイトカウントフィールドは、バッファに関するバイトカウントを含む６４ビットのフィールドである。このバイトカウントの意味は、入力記述子バッファに関するのと、出力記述子バッファに関するのとで異なる。Ｄａｔａ−ｔｏ−Ｃａｒｄ入力記述子バッファの場合、このバイトカウントフィールドは、バッファの中に含まれるデータのバイト数である。ファームウェアソケットモジュールは、入ってくるバイトカウントに関して２０ビットだけしか使用せず、このため、ファームウェアソケットモジュールが扱うことができる最大のＤａｔａ−ｔｏ−Ｃａｒｄバッファは、（１ＭＢ−１）バイトである。このバイトカウント値は、ドライバレベルソフトウェア２０４によって設定されなければならない。Ｄａｔａ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファ、およびＣｏｍｍａｎｄ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファの場合、このバイトカウントは、ドライバレベルソフトウェア２０４によって、バッファの中でどれだけのバイトが、書き込みのために利用可能であるかを示すように最初に設定される。ファームウェアソケットモジュールが、バッファ上で完了ビットを設定する際、ファームウェアソケットモジュールは、バッファに書き込まれる実際のバイト数で、このバイトカウントの更新も行わなければならない。このバイトカウントも、最大で（１ＭＢ−１）バイトである。
【０１１５】
物理的アドレスフィールドは、メインメモリの中のカーネルバッファの物理的アドレスを含む６４ビットのフィールドである。このフィールドは、ドライバレベルソフトウェア２０４によって設定される。好ましくは、ファームウェアソケットモジュールは、４８ビットで表されることが可能な物理的アドレスだけを扱う。
【０１１６】
仮想アドレスフィールドは、カーネルバッファの仮想アドレスを含む６４ビットのフィールドであり、ドライバレベルソフトウェア２０４だけによって使用される。
【０１１７】
動作の際、ファームウェアソケットモジュールは、ファームウェアソケットモジュールのドアベルレジスタ上で実行信号を受け取ると、バッファ５００の中のＤａｔａ−ｔｏ−Ｃａｒｄ入力記述子を読み取り、準備ができていないバッファから読み取ろうと試みるまで、またはファームウェアソケットモジュールによって保持される出力ＦＩＦＯの中にコマンド情報またはデータが存在するまで、読み取り続ける。
【０１１８】
ファームウェアソケットモジュールは、好ましくは、出力のためのコマンド情報に最高の優先順位を与える。出力のためのコマンド情報が存在する場合、ファームウェアソケットモジュールは、その情報を、利用可能なＣｏｍｍａｎｄ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファ５０６に出力する。そのようなバッファ５０６が、利用できない場合、ファームウェアソケットモジュールは、Ｃｏｍｍａｎｄ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファ満杯割り込みを発行する。すると、ファームウェアソケットは、ドアベルレジスタの中の実行ビットに、ドライバレベルソフトウェア２０４によって、バッファ５０６が利用可能にされたことを示すように書き込みが行われるまで、バッファ５０６にコマンド情報を再び出力しようとしない。
【０１１９】
ファームウェアソケットモジュールは、好ましくは、出力のためのデータに、２番目に高い優先順位を与える。ファームウェアソケットモジュールの出力ＦＩＦＯの中のデータの量が、最大ＰＣＩ−Ｘバーストサイズ以上である場合、ファームウェアソケットモジュールは、利用可能なＤａｔａ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファ５０４にデータを出力する。次のＤａｔａ−ｔｏ−Ｋｅｒｎｅｌバッファ５０４が、利用できない場合、ファームウェアソケットモジュールは、Ｄａｔａ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファ満杯割り込みを通知する。すると、ファームウェアソケットモジュールは、ドアベルレジスタの中の実行ビットに、ドライバレベルソフトウェア２０４によって、バッファ５０４が利用可能にされたことを示すように書き込みが行われるまで、バッファ５０４にデータを再び出力しようとしない。
【０１２０】
ファームウェアソケットモジュールは、好ましくは、入ってくるデータまたはコマンドに最低の優先順位を与える。次のＤａｔａ−ｔｏ−Ｃａｒｄ入力記述子バッファ５００が、利用できない場合、ファームウェアソケットモジュールは、Ｄａｔａ−ｔｏ−Ｃａｒｄ入力記述子バッファ空割り込みを通知する。ファームウェアソケットモジュールは、ドアベルレジスタの中の実行ビットに、ドライバレベルソフトウェア２０４によって書き込みが行われて、バッファ５００が満たされたことを示すまで、次のバッファ５００を読み取ろうとしない。
【０１２１】
また、ファームウェアソケットモジュールは、好ましくは、ネクストポインタが、カウントに到達するまで、バッファ５００、５０４、および５０６を順に処理することを続け、到達した時点で、ネクストポインタは、第１のバッファにリセットされる。
【０１２２】
図６ａは、インバウンドのデータおよびコマンドが、システム１００によってどのように処理されることが可能であるかの例を示す。図６ａの入力記述子プールバッファ５００は、複数の記述子を格納し、これらの記述子は、コマンドおよびターゲットデータが格納されたメモリ空間５０２内のアドレスに対するポインタを含む。この例において、ポインタ１は、データストリームの中で「Ｓｍｉｔｈ」という語に関する検索を実行するよう、ＦＡＭチェーン１３０におけるＦＡＭ＃３を構成するコマンドをポイントする。他のコマンドに対するポインタは、図６ａにおいて特定される。また、バッファ５００は、システム１００を通して処理されるべきターゲットデータをポイントする記述子も格納する（例えば、ポインタ４参照）。前述した通り、ドライバレベルソフトウェア２０４は、これらの記述子でバッファ５００をポピュレートして、ファームウェアソケットモジュールに送られ、ＦＡＭチェーンを通して伝搬されるべきコマンドおよびデータの順序を定義する。
【０１２３】
図６ｂ−図６ｏは、図６ａの例によって定義される順序を使用する、そのような伝搬を示す。図示を簡単にするため、ＳＤコマンドおよびＥＤコマンドは、バッファ５００の中のターゲットデータの境界において省略されている。見て取ることができる通り、コマンドとターゲットデータの間の定義された順序は、これらのコマンドおよびデータが、ＦＰＧＡを通して処理される中で、ファームウェアソケットモジュールおよびＦＡＭチェーンによって保たれる。入力記述子バッファの中でコマンドおよびターゲットデータを適切に順序付けることにより、ソフトウェアは、強力な高速データ処理動作を実現することができる。例えば、ポインタ１−５に対応するバッファ５００の中の記述子は、アドレスＡ＋１からＣまでメモリの中に格納された暗号化されたターゲットデータに対して解読動作を実行し、その後、その解読されたデータの中で、「Ｓｍｉｔｈ」という語の存在の検索を実行するよう効果がある。また、アドレスＰ＋１からＷまでメモリの中に格納されたデータが、暗号化された後に圧縮されているものと想定すると、ポインタ６以下に対応するバッファ５００の中の記述子は、そのターゲットデータに対して伸張動作を実行し、その後、その伸張されたターゲットデータに対して解読動作を実行し、その後、解読され、伸張されたターゲットデータの中で、「Ｊｏｎｅｓ」という語の検索を実行するよう効果がある。また、実際には、コマンドセットに従って処理されるターゲットデータの長さは、図６ａ−図６ｏに示される例よりも相当に大きい可能性が高く、例えば、ターゲットデータの長さは、所望されるデータ処理動作の範囲に応じて、メガバイト単位、ギガバイト単位、さらにテラバイト単位（またはそれより大きい単位）のオーダでさえある可能性があることも注目に値する。
【０１２４】
ソフトウェアライブラリインタフェース２１０
ＦＡＭのアプリケーション使用をサポートするソフトウェアＡＰＩは、好ましくは、ＥｘｅｇｙＦｐｇａというラベルが付けられることが可能なクラスなどの、クラスで実現される。このクラスは、好ましくは、以下の公開メソッドを含む。
【数１】
2009528584.tif 000012
【０１２５】
ＳｅｎｄＣｏｍｍａｎｄメソッドは、コマンドチャネルを介してファームウェアソケットモジュールおよびＦＡＭに所与のコマンドを送る。引数「ＴｗｏＣｈａｒｓ」は、コマンドフィールド（１６ビット）に入るバイトのペア（通常、ＡＳＣＩＩ文字であるが、そうである必要はない）である。誤りフィールドが、クリアされる（０に設定される）。引数「Ｓｙｎｃ」は、同期フィールド（１ビット）に入る。引数「ＭｏｄｕｌｅＩｄ」は、モジュールＩＤフィールド（６ビット）に入る。引数「Ｐａｒａｍｅｔｅｒ」は、パラメータフィールド（３２ビット）に入る。引数「ＷａｉｔＦｏｒＩｔ」は、コマンドがファームウェアから戻るまで、メソッド呼び出しがブロックすべき（ＷａｉｔＦｏｒＩｔが、１である場合）か、またはブロックすべきでないか（ＷａｉｔＦｏｒＩｔが、０である場合）を示すフラグである。メソッドは、誤りが生じると、間違いを戻す。
【数２】
2009528584.tif 000013
【０１２６】
Ｗｒｉｔｅメソッドは、所与のバッファからデータチャネルにデータを送る。メソッドは、転送されたバイト数、または「ｅｒｒｎｏ」の中で誤りを戻す。
【数３】
2009528584.tif 000014
【０１２７】
ＲｅａｄＣｍｄメソッドは、Ｃｏｍｍａｎｄ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファからコマンドを読み取り、これらのコマンドをユーザバッファに送る。このメソッドは、バッファの中に入れられたバイトを戻す。
【数４】
2009528584.tif 000015
【０１２８】
Ｒｅａｄメソッドは、Ｄａｔａ−ｔｏ−Ｋｅｒｎｅｌ出力記述子バッファからデータを読み取り、これらのデータをユーザバッファに送る。このメソッドは、バッファに入れられたバイト、または「ｅｒｒｎｏ」を戻す。同期マーク（すなわち、コマンド同期ビットの結果であるＮｕｌｌバッファ）に遭遇すると、ＥＮＯＤＡＴＡが、戻される。
【０１２９】
ソフトウェアライブラリインタフェースの例示的な用法が、以下に示される
【数５】
2009528584.tif 000016
【０１３０】
本発明を、本発明の好ましい実施形態に関連して以上に説明してきたが、本発明の範囲にやはり含まれる様々な変形が、好ましい実施形態に行われることが可能である。本発明のそのような変形は、本明細書の教示を検討することで、認識可能となろう。このため、本発明の完全な範囲は、特許請求の範囲、および特許請求の範囲の法的均等物によってだけ規定されるべきである。
【図面の簡単な説明】
【０１３１】
【図１】本発明を実施する好ましいシステムを示すブロック図である。
【図２】好ましいシステムのためのソフトウェアおよびファームウェアの配備に関する例示的なフレームワークを示す図である。
【図３ａ】本発明によるデータ処理タスクを実行するようにコンピュータシステムに実装するための好ましいプリント回路基板を示すブロック図である。
【図３ｂ】本発明によるデータ処理タスクを実行するようにコンピュータシステムに実装するための代替のプリント回路基板を示すブロック図である。
【図４】ファームウェアソケットモジュールとファームウェアアプリケーションモジュールとの間の好ましい信号層インタフェースを示す図である。
【図５】ファームウェアソケットモジュールと、デバイスドライバによって管理されるメモリ空間との間の好ましいハードウェア／ソフトウェアインタフェースを示す図である。
【図６ａ】デバイスドライバによって管理される入力記述子プールバッファ−およびカーネルメモリ空間の実施例を示す図である。
【図６ｂ】図６ａの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図６ｃ】図６ａの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図６ｄ】図６ａの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図６ｅ】図６ａの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図６ｆ】図６ａの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図６ｇ】図６ａの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図６ｈ】図６ａの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図６ｉ】図６ａの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図６ｊ】図６ａの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図６ｋ】図６ａの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図６ｌ】図６ａの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図６ｍ】図６ａの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図６ｎ】図６ａの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図６ｏ】図６ａの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図７】ファームウェアソケットモジュールと、異なるデータ処理動作を実行するようにそれぞれが構成された、複数のパイプライン化されたファームウェアアプリケーションモジュールとを有して構成された例示的なＦＰＧＡを示す図である。
【図８】パイプラインのファームウェアアプリケーションモジュールが、どのように複数のＦＰＧＡにまたがって配備されることが可能であるかの例を示す図である。
【図１】
2009528584.tif 000017
【図２】
2009528584.tif 000018
【図３ａ】
2009528584.tif 000019
【図３ｂ】
2009528584.tif 000020
【図４】
2009528584.tif 000021
【図５】
2009528584.tif 000022
【図６ａ】
2009528584.tif 000023
【図６ｂ】
2009528584.tif 000024
【図６ｃ】
2009528584.tif 000025
【図６ｄ】
2009528584.tif 000026
【図６ｅ】
2009528584.tif 000027
【図６ｆ】
2009528584.tif 000028
【図６ｇ】
2009528584.tif 000029
【図６ｈ】
2009528584.tif 000030
【図６ｉ】
2009528584.tif 000031
【図６ｊ】
2009528584.tif 000032
【図６ｋ】
2009528584.tif 000033
【図６ｌ】
2009528584.tif 000034
【図６ｍ】
2009528584.tif 000035
【図６ｎ】
2009528584.tif 000036
【図６ｏ】
2009528584.tif 000037
【図７】
2009528584.tif 000038
【図８】
2009528584.tif 000039
【手続補正書】
【提出日】平成19年11月26日(2007.11.26)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
再構成可能なロジックデバイス上に配備された少なくとも１つのファームウェアアプリケーションモジュールをコンピュータシステムに結び付ける方法であって、
コンピュータシステムが、互いに通信するプロセッサと、メモリ空間とを含み、少なくとも１つのファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対してデータ処理動作を実行するように構成され、
再構成可能なロジックデバイス上に配備され、少なくとも１つのファームウェアアプリケーションモジュールをコンピュータシステムメモリ空間に結び付けるファームウェアモジュール内で、（１）バッファ内のアドレスを決定し、バッファが、コンピュータシステムメモリ空間内に位置し、複数の入力記述子が格納される複数の順次アドレスを含み、各入力記述子が、コンピュータシステムメモリ空間内のデータをポイントし、入力記述子がポイントするデータが、少なくとも１つのファームウェアアプリケーションモジュールのための複数のコマンドおよびターゲットデータを含むこと、（２）決定されたアドレスにおいてコンピュータシステムメモリ空間内のバッファから読み取りを行って、少なくとも１つのファームウェアアプリケーションモジュールに供給されるべきデータに関する入力記述子を特定すること、（３）特定された入力記述子がポイントするデータを、コンピュータシステムメモリ空間から少なくとも１つのファームウェアアプリケーションモジュールに転送すること、および（４）読み取られていない入力記述子が、バッファの中に格納されている限り、決定されたアドレスをインクリメントし、インクリメントされたアドレスを使用してステップ（２）〜（３）を繰り返して、順次のバッファアドレスの範囲内の入力記述子の順序が、コマンドおよびターゲットデータが、少なくとも１つのファームウェアアプリケーションモジュール内で処理される順序を規定するようにすることを含む、方法。
【請求項２】
転送されたコマンドおよびターゲットデータを、インタリーブされたコマンドとターゲットデータのストリームとして、少なくとも１つのファームウェアアプリケーションモジュールを通して処理することをさらに含む、請求項１に記載の方法。
【請求項３】
通信パスが、ファームウェアモジュールを少なくとも１つのファームウェアアプリケーションモジュールにリンクし、転送するステップが、少なくとも１つのファームウェアアプリケーションモジュールにコマンドとターゲットデータを、同一の通信パスを介して供給することを含む、請求項２に記載の方法。
【請求項４】
少なくとも１つのファームウェアアプリケーションモジュールが、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含み、パイプラインが、第１のファームウェアアプリケーションモジュールと、最終のファームウェアアプリケーションモジュールとを有し、転送するステップが、定義された順序に従って、コンピュータシステムメモリから、パイプラインの第１のファームウェアアプリケーションモジュールにコマンドとターゲットデータを、同一の通信パスを介して転送することをさらに含む、請求項３に記載の方法。
【請求項５】
処理するステップが、転送されたコマンドおよびターゲットデータを、パイプラインのそれぞれのさらなるファームウェアアプリケーションモジュールを通して順次に処理し、パイプラインの最終のファームウェアアプリケーションモジュールに終わることをさらに含む、請求項４に記載の方法。
【請求項６】
複数のコマンドが、ファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項５に記載の方法。
【請求項７】
再構成可能なロジックデバイス上に配備された複数のファームウェアアプリケーションモジュールを含むパイプラインをコンピュータシステムに結び付ける方法であって、
コンピュータシステムが、互いに通信するプロセッサと、メモリ空間とを含み、ファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対して複数のコマンド固有のデータ処理動作を実行するように構成され、
再構成可能なロジックデバイス上に配備され、パイプラインをコンピュータシステムメモリ空間に結び付けるファームウェアモジュール内で、（１）メモリ空間内のバッファから読み取りを行って、パイプラインに供給されるべき複数のコマンドおよびターゲットデータを特定し、バッファが、コマンドおよびターゲットデータが、パイプラインに供給されるべき順序を規定し、各コマンドが、ファームウェアアプリケーションモジュールの少なくとも１つが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対して実行すべきデータ処理動作を制御すること、（２）コマンドおよびターゲットデータを、規定された順序に従ってコンピュータシステムメモリ空間からパイプラインに転送すること、および（３）転送されたコマンドおよびターゲットデータを、インタリーブされたコマンドとターゲットデータのストリームとして、少なくとも１つのファームウェアアプリケーションモジュールを通して処理することを含み、
コマンドの少なくとも１つが、ファームウェアアプリケーションモジュールの少なくとも１つへのパススルーコマンドを含む、方法。
【請求項８】
コマンドによって定義されるデータ処理動作が、検索動作、データ縮約動作、暗号化動作、解読動作、圧縮動作、伸張動作、およびパススルー動作から成るグループの少なくとも２つの動作を含む、請求項６に記載の方法。
【請求項９】
コンピュータシステムメモリ空間が、ＲＡＭ（ランダムアクセスメモリ）を含み、バッファが、ＲＡＭの中に格納される、請求項５に記載の方法。
【請求項１０】
プロセッサの制御下で動作するデバイスドライバを使用してバッファを管理することをさらに含む、請求項９に記載の方法。
【請求項１１】
再構成可能なロジックデバイス上に配備された少なくとも１つのファームウェアアプリケーションモジュールをコンピュータシステムに結び付ける方法であって、
コンピュータシステムが、互いに通信するプロセッサと、メモリ空間とを含み、少なくとも１つのファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対してデータ処理動作を実行するように構成され、
再構成可能なロジックデバイス上に配備され、少なくとも１つのファームウェアアプリケーションモジュールをコンピュータシステムメモリ空間に結び付けるファームウェアモジュール内で、（１）メモリ空間内のバッファから読み取りを行って、少なくとも１つのファームウェアアプリケーションモジュールに供給されるべき複数のコマンドおよびターゲットデータを特定し、バッファが、コマンドおよびターゲットデータが、少なくとも１つのファームウェアアプリケーションモジュールに供給されるべき順序を規定し、各コマンドが、少なくとも１つのファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対して実行すべきデータ処理動作を制御すること、（２）コマンドおよびターゲットデータを、規定された順序に従ってコンピュータシステムメモリ空間から少なくとも１つのファームウェアアプリケーションモジュールに転送すること、および（３）転送されたコマンドおよびターゲットデータを、インタリーブされたコマンドとターゲットデータのストリームとして、少なくとも１つのファームウェアアプリケーションモジュールを通して処理することを含み、
通信パスが、ファームウェアモジュールを少なくとも１つのファームウェアアプリケーションモジュールにリンクし、
転送するステップが、コマンドとターゲットデータを、同一の通信パスを介して少なくとも１つのファームウェアアプリケーションモジュールに供給することを含み、
少なくとも１つのファームウェアアプリケーションモジュールが、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含み、パイプラインが、第１のファームウェアアプリケーションモジュールと、最後のファームウェアアプリケーションモジュールとを有し、
転送するステップが、コマンドとターゲットデータを、規定された順序に従ってコンピュータシステムメモリ空間からパイプラインの第１のファームウェアアプリケーションモジュールに、同一の通信パスを介して転送することをさらに含み、
処理するステップが、転送されたコマンドおよびターゲットデータを、パイプラインのそれぞれのさらなるファームウェアアプリケーションモジュールを通して順次に処理し、パイプラインの最後のファームウェアアプリケーションモジュールに終わることをさらに含み、
コンピュータシステムメモリ空間が、ＲＡＭ（ランダムアクセスメモリを含み、
バッファが、ＲＡＭの中に格納され、
方法が、プロセッサの制御下で動作するデバイスドライバを使用してバッファを管理することをさらに含み、
バッファが、第１のバッファを含み、
パイプラインの最後のファームウェアアプリケーションモジュールが、最後のファームウェアアプリケーションモジュールが受け取るターゲットデータに対して最後のファームウェアアプリケーションモジュールが実行するデータ処理動作の結果として、出力を生成するようにさらに構成され、
方法が、
最後のファームウェアアプリケーションモジュールをファームウェアモジュールにリンクするさらなる通信パスを介して、最後のファームウェアアプリケーションモジュールの出力をファームウェアモジュールに転送すること、および
ファームウェアモジュール内で、（１）デバイスドライバによって管理されるさらなるバッファを読み取って、最後のファームウェアアプリケーションモジュールの出力が格納されるべきコンピュータシステムメモリ空間内のロケーションを決定すること、および（２）最後のファームウェアアプリケーションモジュールの出力を、コンピュータシステムメモリ内の決定されたロケーションに転送することをさらに含む、方法。
【請求項１２】
ファームウェアアプリケーションモジュールパイプラインにターゲットデータが供給されるべき順序と同一の順序で、隣接するメモリアドレスでコンピュータシステムメモリ空間内にターゲットデータを格納することをさらに含む、請求項１０に記載の方法。
【請求項１３】
管理するステップが、コンピュータシステムメモリ空間内でコマンドおよびターゲットデータが格納されたコンピュータシステムメモリ空間アドレスに対するポインタを含む入力記述子でバッファをポピュレートすることを含む、請求項１２に記載の方法。
【請求項１４】
再構成可能なロジックデバイスが、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）を含む、請求項４に記載の方法。
【請求項１５】
プロセッサと、再構成可能なロジックデバイス上に配備された少なくとも１つのファームウェアアプリケーションモジュールとを含むシステムにおいて、少なくとも１つのファームウェアアプリケーションモジュールへのデータおよびコマンドのフローを制御するための方法であって、
コマンドが、少なくとも１つのファームウェアアプリケーションモジュールによるデータの処理を制御するための命令を含み、
前記少なくとも１つのファームウェアアプリケーションモジュールに共通の通信パスを提供すること、
複数の入力記述子に関して１つの入力記述子から次の入力記述子へと進みながら、プロセッサによる介入なしに、バッファから複数のコマンドおよびターゲットデータに関する複数の入力記述子を読み取ること、
読み取るステップに応答して、少なくとも１つのファームウェアアプリケーションモジュールに送られるべきコマンドおよびデータを決定すること、および
決定されたコマンドとデータの両方を、共通の通信パスを介して前記少なくとも１つのファームウェアアプリケーションモジュールに送ることを含む、方法。
【請求項１６】
少なくとも１つのファームウェアアプリケーションモジュールが、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含み、送るステップが、インタリーブされたコマンドとデータのストリームを、パイプラインにおけるファームウェアアプリケーションモジュールの第１のモジュールに送ることを含む、請求項１５に記載の方法。
【請求項１７】
少なくとも複数のコマンドが、パイプラインにおけるファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項１６に記載の方法。
【請求項１８】
データ処理パイプラインと通信するファームウェアソケットモジュールを含むデータ処理デバイスであって、
ファームウェアソケットモジュールおよびデータ処理パイプラインが、少なくとも１つの再構成可能なロジックデバイス上に配備され、ファームウェアソケットモジュールが、コマンドとターゲットデータの両方に共通の通信パスを介して、データ処理パイプラインへのコマンドとターゲットデータの両方の伝搬を制御するように構成され、各コマンドが、データ処理パイプラインによって実行されるべきデータ処理動作を制御し、ターゲットデータが、データ処理パイプラインが、命令されたデータ処理動作を実行する対象となるデータに対応し、
データ処理パイプラインが、直列に接続された複数のファームウェアアプリケーションモジュールを含み、
ファームウェアソケットモジュールが、データ処理パイプラインの入口点に所定の順序でコマンドおよびターゲットデータを供給するようにさらに構成され、
所定の順序が、データ処理パイプライン全体にわたって保たれ、
ファームウェアソケットモジュールが、（１）プロセッサによって管理される外部入力記述子プールバッファにアクセスして、データ処理パイプラインに送られるべきコマンドおよびターゲットデータが、外部メモリ空間内のどこに格納されているかを特定して、ファームウェアソケットモジュールが、プロセッサによる干渉なしに、入力記述子プールバッファ内で１つの入力記述子から次の入力記述子に進むようにするようにさらに構成され、入力記述子プールバッファが、コマンドおよびターゲットデータが、データ処理パイプラインに送られるべき順序を規定し、さらに（２）特定されたコマンドおよびターゲットデータを、規定された順序に従って外部メモリ空間からデータ処理パイプラインに転送するようにさらに構成される、データ処理デバイス。
【請求項１９】
再構成可能なロジックデバイスが、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）を含み、ファームウェアソケットモジュールが、ファームウェアソケットモジュールと、データ処理パイプラインからの出口点との間の別の通信パスを有し、ファームウェアソケットモジュールが、さらなる通信パスを介してデータ処理パイプラインからの出力を受け取るようにさらに構成される、請求項１８に記載のデータ処理デバイス。
【請求項２０】
データ処理パイプラインと通信するファームウェアソケットモジュールを含むデータ処理デバイスであって、
ファームウェアソケットモジュールおよびデータ処理パイプラインが、少なくとも１つの再構成可能なロジックデバイス上に配備され、ファームウェアソケットモジュールが、コマンドとターゲットデータの両方に共通の通信パスを介するデータ処理パイプラインへのコマンドとターゲットデータの両方の伝搬を制御するように構成され、各コマンドが、データ処理パイプラインによって実行されるべきデータ処理動作を制御し、ターゲットデータが、データ処理パイプラインが、命令されたデータ処理動作を実行する対象となるデータに対応し、
データ処理パイプラインが、直列に接続された複数のファームウェアアプリケーションモジュールを含み、
ファームウェアソケットモジュールが、コマンドおよびターゲットデータを、データ処理パイプラインの入口点に所定の順序で供給するようにさらに構成され、
所定の順序が、データ処理パイプライン全体にわたって保たれ、
ファームウェアソケットモジュールが、（１）外部入力記述子プールバッファにアクセスして、データ処理パイプラインに送られるべきコマンドおよびターゲットデータが、外部メモリ空間内のどこに格納されているかを特定するようにさらに構成され、入力記述子プールバッファが、コマンドおよびターゲットデータが、データ処理パイプラインに送られるべき順序を規定し、さらに（２）特定されたコマンドおよびターゲットデータを、外部メモリ空間からデータ処理パイプラインに、規定された順序に従って転送するようにさらに構成され、
再構成可能なロジックデバイスが、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）を含み、
ファームウェアソケットモジュールが、ファームウェアソケットモジュールと、データ処理パイプラインの出口点との間の別の通信パスを有し、
前記ファームウェアソケットモジュールが、前記さらなる通信パスを介して前記データ処理パイプラインからの出力を受け取るようにさらに構成され、
ファームウェアソケットモジュールが、（１）第１の外部出力記述子プールバッファにアクセスして、データ処理パイプラインからのコマンド出力が格納されるべきメモリ空間内のロケーションを識別し、（２）第２の外部出力記述子プールバッファにアクセスして、データ処理パイプラインからのターゲットデータ出力が格納されるべきメモリ空間内のロケーションを識別し、（３）データ処理パイプラインからのコマンド出力およびターゲットデータ出力を、メモリ空間内のそれぞれの特定されたロケーションに書き込むようにさらに構成される、データ処理デバイス。
【請求項２１】
プロセッサと、
プロセッサによって管理されるメモリ空間と、
配備された少なくとも１つのファームウェアアプリケーションモジュールと、少なくとも１つのファームウェアアプリケーションモジュールをプロセッサおよびメモリと結び付けるファームウェアソケットモジュールとを含み、ファームウェアソケットモジュールと少なくとも１つのファームウェアアプリケーションモジュールが、通信パスを介して互いに通信する再構成可能なロジックデバイスと、
再構成可能なロジックデバイスが、プロセッサおよびメモリ空間と通信するバスとを含むデータ処理システムであって、
ファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るデータストリームに対してデータ処理動作を実行するように構成され、
ファームウェアソケットモジュールが、（１）プロセッサによって管理される外部バッファから複数のポインタを読み取って、少なくとも１つのファームウェアアプリケーションモジュールに送られるべき複数のコマンドおよびターゲットデータが位置するメモリ空間内のロケーションを特定し、（２）読み取られたポインタから特定された複数のコマンドとターゲットデータの両方をメモリ空間から受け取るように構成され、
ファームウェアソケットモジュールが、受け取られたコマンドおよびターゲットデータを、ファームウェアソケットモジュールと、少なくとも１つのファームウェアアプリケーションモジュールとの間の同一の通信パスを介して、少なくとも１つのファームウェアアプリケーションモジュールに供給するようにさらに構成され、各コマンドが、少なくとも１つのファームウェアアプリケーションモジュールによって実行されるデータ処理動作を制御し、ターゲットデータが、少なくとも１つのファームウェアアプリケーションモジュールのデータ処理動作が実行される対象となるデータを含み、
ファームウェアソケットモジュールが、複数のポインタに関して１つのポインタから次のポインタに進みながら、プロセッサによる介入なしに、複数のポインタを読み取るようにさらに構成される、システム。
【請求項２２】
ファームウェアソケットモジュールが、（１）コマンドおよびターゲットデータを、インタリーブされ、順序付けられたコマンドとターゲットデータのストリームとして受け取り、（２）ファームウェアソケットモジュールが、同一の通信パスを介してストリームを少なくとも１つのファームウェアアプリケーションモジュールに供給する際に、順序、または順序付けられたコマンドとターゲットデータを保つようにさらに構成される、請求項２１に記載のシステム。
【請求項２３】
再構成可能なロジックデバイスが、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）を含む、請求項２２に記載のシステム。
【請求項２４】
少なくとも１つのファームウェアアプリケーションモジュールが、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含み、パイプラインにおけるファームウェアアプリケーションモジュールのそれぞれが、ストリームのコマンドおよびターゲットデータを、ファームウェアソケットモジュールが、コマンドおよびターゲットデータを供給したのと同一の順序で、順次に処理するように構成される、請求項２３に記載のシステム。
【請求項２５】
複数のコマンドが、パイプラインにおけるファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項２４に記載のシステム。
【請求項２６】
ファームウェアアプリケーションモジュールとファームウェアソケットモジュールが、チェーンに構成され、ファームウェアソケットモジュールが、インタリーブされ、順序付けられたコマンドとターゲットデータのストリームを、パイプラインにおけるファームウェアアプリケーションモジュールの第１のモジュールに供給する、請求項２４に記載のシステム。
【請求項２７】
プロセッサが、外部バッファの中にポインタを保持して、パイプラインによって処理されるコマンドおよびターゲットデータの順序を規定する順序で、ポインタが、外部バッファ内に格納されるようにデバイスドライバを有してさらに構成される、請求項２４に記載のシステム。
【請求項２８】
コマンドおよびターゲットデータが、複数のメモリアドレスでメモリ空間内に格納され、ポインタが、対応するコマンドおよびターゲットデータが格納されているメモリアドレスをポイントする、請求項２７に記載のシステム。
【請求項２９】
チェーンを通してグループとして処理されるべきターゲットデータが、メモリアドレスに対するポインタが、外部バッファの中に格納されるのと同一の順序で、隣接するメモリアドレスに格納される、請求項２８に記載のシステム。
【請求項３０】
データ処理動作が、検索動作、暗号化動作、解読動作、圧縮動作、伸張動作、およびデータ縮約動作から成るグループの少なくとも２つの動作を含む、請求項２３に記載のシステム。
【請求項３１】
プロセッサを含むコンピュータシステムのバスに接続するためのデータ処理カードであって、
再構成可能なロジックデバイスを含み、再構成可能なロジックデバイス上には、ファームウェアアプリケーションモジュールパイプラインと、ファームウェアモジュールとが配備されており、
ファームウェアモジュールが、ファームウェアアプリケーションモジュールパイプラインを、ターゲットデータおよびコマンドの少なくとも１つの外部源に結び付けるように構成され、コマンドが、ファームウェアアプリケーションモジュールパイプラインが、どのようにターゲットデータを処理するかを制御し、
ファームウェアアプリケーションモジュールパイプラインが、シーケンスに配置された複数のファームウェアアプリケーションモジュールを含み、各ファームウェアアプリケーションモジュールが、ターゲットデータに対してデータ処理を実行するように構成され、ファームウェアアプリケーションモジュールパイプラインが、ファームウェアモジュールから、シーケンスにおけるファームウェアアプリケーションモジュールの第１のモジュールに至るエントリ通信パスを有し、
ファームウェアモジュールが、エントリ通信パスを介して、シーケンスにおけるファームウェアアプリケーションモジュールの第１のモジュールに、インタリーブされたコマンドとターゲットデータのストリームを供給することによって、ファームウェアアプリケーションモジュールパイプラインが、ターゲットデータをどのように処理するかを制御するようにさらに構成され、コマンドおよびターゲットデータが、ストリーム内で規定された順序を有し、
ファームウェアモジュールが、プロセッサによって管理される外部バッファの中に格納されたエントリを読み取って、ファームウェアアプリケーションモジュールパイプラインに供給されるべきコマンドおよびターゲットデータを決定するように構成され、外部バッファ内のエントリの順序が、ストリーム内のコマンドおよびターゲットデータの順序を規定し、ファームウェアモジュールが、外部バッファ内の複数のエントリを読み取って、ファームウェアモジュールが、プロセッサによる干渉なしに、複数のエントリの１つのエントリから次のエントリに進むようにするように構成され、
ファームウェアアプリケーションモジュールパイプラインが、ストリームのコマンドおよびターゲットデータを、それらのコマンドおよびターゲットデータが、ストリーム内で順序付けられていたのと同一の順序でファームウェアアプリケーションモジュールのシーケンスを通して順次に処理するように構成される、カード。
【請求項３２】
外部バッファエントリが、コマンドおよびターゲットデータが格納されている少なくとも１つの外部源内のアドレスに対するポインタを含み、ファームウェアモジュールが、少なくとも１つの外部源にアクセスして、アドレスから、定義された順序に従ってコマンドおよびターゲットデータを取り出すようにさらに構成される、請求項３１に記載のデータ処理カード。
【請求項３３】
複数のコマンドが、シーケンスにおけるファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項３２に記載のデータ処理カード。
【請求項３４】
コンピュータシステムのバスに接続するためのデータ処理カードであって、
再構成可能なロジックデバイスを含み、再構成可能なロジックデバイスには、ファームウェアアプリケーションモジュールパイプラインおよびファームウェアモジュールが配備されており、
ファームウェアモジュールが、ファームウェアアプリケーションモジュールパイプラインを、ターゲットデータおよびコマンドの少なくとも１つの外部源に結び付けるように構成され、コマンドが、ファームウェアアプリケーションモジュールパイプラインが、どのようにターゲットデータを処理するかを制御し、
ファームウェアアプリケーションモジュールパイプラインが、シーケンスに配置された複数のファームウェアアプリケーションモジュールを含み、各ファームウェアアプリケーションモジュールが、ターゲットデータに対してデータ処理動作を実行するように構成され、ファームウェアアプリケーションモジュールパイプラインが、ファームウェアモジュールから、シーケンスにおけるファームウェアアプリケーションモジュールの第１のモジュールに至るエントリ通信パスを有し、
ファームウェアモジュールが、エントリ通信パスを介して、シーケンスにおけるファームウェアアプリケーションモジュールの第１のモジュールに、インタリーブされたコマンドとターゲットデータのストリームを供給することによって、ファームウェアアプリケーションモジュールパイプラインが、ターゲットデータをどのように処理するかを制御するようにさらに構成され、コマンドとターゲットデータが、ストリーム内で規定された順序を有し、
ファームウェアモジュールが、外部バッファの中に格納されたエントリを読み取って、ファームウェアアプリケーションモジュールパイプラインに供給されるべきコマンドおよびターゲットデータを決定するように構成され、外部バッファの中のエントリの順序が、ストリーム内のコマンドおよびターゲットデータの順序を規定し、
ファームウェアアプリケーションモジュールパイプラインが、ストリームのコマンドおよびターゲットデータを、それらのコマンドおよびターゲットデータが、ストリーム内で順序付けられていたのと同一の順序でファームウェアアプリケーションモジュールのシーケンスを通して順次に処理するように構成され、
外部バッファエントリが、コマンドおよびターゲットデータが格納されている少なくとも１つの外部源内のアドレスに対するポインタを含み、
ファームウェアモジュールが、少なくとも１つの外部源にアクセスして、アドレスから、規定された順序に従ってコマンドおよびターゲットデータを取り出すようにさらに構成され、
複数のコマンドが、シーケンスにおけるファームウェアアプリケーションモジュールの個々のモジュールに固有であり、
コマンドの少なくとも１つが、シーケンスにおけるファームウェアアプリケーションモジュールの１つへのパススルーコマンドを含む、カード。
【請求項３５】
コマンドによって定義されるデータ処理動作が、検索動作、データ縮約動作、暗号化動作、解読動作、圧縮動作、伸張動作、およびパススルー動作から成るグループの少なくとも２つの動作を含む、請求項３３に記載のデータ処理カード。
【請求項３６】
コンピュータシステムのバスに接続するためのデータ処理カードであって、
再構成可能なロジックデバイスを含み、再構成可能なロジックデバイスには、ファームウェアアプリケーションモジュールパイプラインおよびファームウェアモジュールが配備されており、
ファームウェアモジュールが、ファームウェアアプリケーションモジュールパイプラインを、ターゲットデータおよびコマンドの少なくとも１つの外部源に結び付けるように構成され、コマンドが、ファームウェアアプリケーションモジュールパイプラインが、どのようにターゲットデータを処理するかを制御し、
ファームウェアアプリケーションモジュールパイプラインが、シーケンスに配置された複数のファームウェアアプリケーションモジュールを含み、各ファームウェアアプリケーションモジュールが、ターゲットデータに対してデータ処理動作を実行するように構成され、ファームウェアアプリケーションモジュールパイプラインが、ファームウェアモジュールから、シーケンスにおけるファームウェアアプリケーションモジュールの第１のモジュールに至るエントリ通信パスを有し、
ファームウェアモジュールが、エントリ通信パスを介して、シーケンスにおけるファームウェアアプリケーションモジュールの第１のモジュールに、インタリーブされたコマンドとターゲットデータのストリームを供給することによって、ファームウェアアプリケーションモジュールパイプラインが、ターゲットデータをどのように処理するかを制御するようにさらに構成され、コマンドとターゲットデータが、ストリーム内で規定された順序を有し、
ファームウェアモジュールが、外部バッファの中に格納されたエントリを読み取って、ファームウェアアプリケーションモジュールパイプラインに供給されるべきコマンドおよびターゲットデータを決定するように構成され、外部バッファの中のエントリの順序が、ストリーム内のコマンドおよびターゲットデータの順序を規定し、
ファームウェアアプリケーションモジュールパイプラインが、ストリームのコマンドおよびターゲットデータを、それらのコマンドおよびターゲットデータが、ストリーム内で順序付けられていたのと同一の順序でファームウェアアプリケーションモジュールのシーケンスを通して順次に処理するように構成され、
外部バッファエントリが、コマンドおよびターゲットデータが格納されている少なくとも１つの外部源内のアドレスに対するポインタを含み、
ファームウェアモジュールが、少なくとも１つの外部源にアクセスして、アドレスから、規定された順序に従ってコマンドおよびターゲットデータを取り出すようにさらに構成され、
複数のコマンドが、シーケンスにおけるファームウェアアプリケーションモジュールの個々のモジュールに固有であり、
コマンドによって規定されるデータ処理動作が、検索動作、データ縮約動作、暗号化動作、解読動作、圧縮動作、伸張動作、およびパススルー動作から成るグループの少なくとも２つの動作を含み、
ファームウェアアプリケーションモジュールパイプラインが、シーケンスにおけるファームウェアアプリケーションモジュールの最後のモジュールからファームウェアモジュールに至るエグジット通信パスをさらに有し、
シーケンスにおけるファームウェアアプリケーションモジュールの最後のモジュールによって実行される各データ処理動作が、出力を生成し、
ファームウェアモジュールが、（１）エグジット通信パスを介してシーケンスにおけるファームウェアアプリケーションモジュールの最後のモジュールから出力を受け取り、（２）外部バッファの中に格納されたエントリを読み取って、出力が格納されるべき少なくとも１つの外部源内の複数のロケーションを決定し、（３）決定されたロケーションにおいて少なくとも１つの外部源に出力を書き込むようにさらに構成される、カード。
【請求項３７】
再構成可能なロジックデバイスが、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）を含む、請求項３７に記載のデータ処理カード。
【請求項３８】
ソフトウェアを介して再構成可能なロジックデバイスを通るデータの処理を制御するシステムであって、
プロセッサによって実行されるための、複数のメモリアドレスにおいてデータが格納されたメモリ空間を管理するように構成されたデバイスドライバソフトウェアと、
バスを介してデバイスドライバソフトウェアおよびメモリ空間と通信するための再構成可能なロジックデバイスとを含み、
少なくとも１つのファームウェアアプリケーションモジュール、およびファームウェアソケットモジュールが、再構成可能なロジックデバイス上に配備され、
少なくとも１つのファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対してデータ処理動作を実行するように構成され、
デバイスドライバソフトウェアが、複数のコマンドをメモリ空間内に格納するように構成され、各コマンドが、少なくとも１つのファームウェアアプリケーションモジュールによって実行されるべきデータ処理動作を制御することに向けられ、
デバイスドライバソフトウェアが、コマンドおよびデータが、少なくとも１つのファームウェアアプリケーションモジュールを通して処理されるべき順序を規定する入力記述子プールバッファをメモリ空間内に保持するようにさらに構成され、
ファームウェアソケットモジュールが、（１）入力記述子プールバッファにアクセスして、少なくとも１つのファームウェアアプリケーションモジュールを通して処理されるべき順序付けられたコマンドおよびデータに関する複数の順序付けられた入力記述子を特定して、ファームウェアソケットモジュールが、プロセッサによる介入なしに、順序付けられた１つの順序付けられた入力記述子から次の入力記述子に進むようにし、（２）メモリ空間にアクセスして、規定された順序に従って、コマンドおよびデータを少なくとも１つのファームウェアアプリケーションモジュールに転送するように構成される、システム。
【請求項３９】
少なくとも１つのファームウェアアプリケーションモジュールが、第１のファームウェアアプリケーションモジュールを含むパイプライン化されたシーケンスに配置された複数のファームウェアアプリケーションモジュールを含み、ファームウェアソケットモジュールが、通信パスを介して、パイプライン化されたシーケンスの第１のファームウェアアプリケーションモジュールと通信しており、ファームウェアソケットモジュールが、コマンドとデータを、同一の通信パスを介して、パイプライン化されたシーケンスにおける第１のファームウェアアプリケーションモジュールに転送するようにさらに構成される、請求項３８に記載のシステム。
【請求項４０】
各コマンドが、そのコマンドが適用可能であるパイプライン化されたシーケンスにおけるファームウェアアプリケーションモジュールを特定するファームウェアアプリケーションモジュール識別子を含む、請求項３９に記載のシステム。
【請求項４１】
デバイスドライバソフトウェアが、ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスを通して処理されるべきコマンドおよびデータが格納されているメモリ空間内のメモリアドレスに対する複数のポインタをデバイスドライバソフトウェアの中に格納することによって、入力記述子プールバッファを保持するようにさらに構成され、入力記述子プールバッファの中のポインタの順序が、ファームウェアソケットモジュールによってファームウェアアプリケーションモジュールのパイプライン化されたシーケンスにコマンドおよびデータが供給される順序を定義する、請求項４０に記載のシステム。
【請求項４２】
再構成可能なロジックデバイスが、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）を含み、システムが、プロセッサによって実行されるためのアプリケーションソフトウェアと、プロセッサによって実行されるためのモジュールアプリケーションプログラミングインタフェースソフトウェアとをさらに含み、アプリケーションソフトウェアが、（１）ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスによって実行されるべき少なくとも１つのデータ処理動作と、（２）ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスが、少なくとも指定されたデータ処理動作を実行する対象となるデータとを指定する入力をユーザから受け取るように構成され、モジュールアプリケーションプログラミングインタフェースソフトウェアが、アプリケーションソフトウェアをデバイスドライバソフトウェアに結び付けるように構成されて、デバイスドライバソフトウェアが、入力記述子プールバッファおよびメモリ空間をユーザ入力に従って適切に管理するようにする、請求項４１に記載のシステム。
【請求項４３】
前記デバイスドライバソフトウェアが、ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスにデータが供給されるべき順序と同一の順序で、メモリ空間の隣接するメモリアドレスに、パイプライン化されたシーケンスを通して処理されるべきデータを格納するようにさらに構成される、請求項４１に記載のシステム。
【請求項４４】
少なくとも１つの再構成可能なロジックデバイス上に配備されたファームウェアアプリケーションモジュールのパイプラインを、再構成可能なロジックデバイスの外部にあり、プロセッサによって管理されるメモリ空間に結び付けるためのデバイスであって、
少なくとも１つの再構成可能なロジックデバイス上に配備されたファームウェアモジュールを含み、ファームウェアモジュールが、（１）外部メモリ空間にアクセスして、複数のコマンド、および複数のターゲットデータグループに関する入力記述子を特定して、ファームウェアモジュールが、プロセッサによる介入なしに、複数の入力記述子に関して１つの入力記述子から次の入力記述子に進むようにし、（２）外部メモリ空間にシリアルアクセスして、アクセスされた入力記述子に対応する複数のコマンド、および複数のターゲットデータグループを或る順序で取り出し、（３）取り出されたコマンドとターゲットデータグループの両方を、ファームウェアモジュールをパイプラインの入口点に接続する共通の通信パスを介して、同一の順序で単一のインタリーブされたストリームとして、パイプラインの入口点に送るように構成され、パイプラインにおける各ファームウェアアプリケーションモジュールが、そのファームウェアアプリケーションモジュールが受け取るターゲットデータに対してデータ処理動作を実行するように構成され、各コマンドが、パイプラインにおける少なくとも１つのファームウェアアプリケーションモジュールのデータ処理動作を制御するように構成される、デバイス。
【請求項４５】
外部メモリ空間内の入力記述子の順序が、コマンドとターゲットデータグループが、ストリームの中でインタリーブされるべき順序を定義する、請求項４４に記載のデバイス。
【国際調査報告】
2009528584.tif 000040
2009528584.tif 000041
2009528584.tif 000042
2009528584.tif 000043