FPGAベースのパイプライン処理のためのファームウェアソケットモジュール
ファームウェアソケットモジュールが、再構成可能なロジックデバイス上に配備され、ファームウェアソケットモジュールは、ファームウェアソケットモジュールと、データ処理パイプラインへの入口点との間の通信パスを有し、ファームウェアソケットモジュールは、データ処理パイプラインの入口点に、同一の通信パスを介してコマンドとターゲットデータの両方を供給するように構成され、各コマンドは、データ処理パイプラインによって実行されるべきデータ処理動作を規定し、ターゲットデータは、データ処理パイプラインが、命令されたデータ処理動作を実行する対象となるデータに対応する。好ましくは、ファームウェアソケットモジュールは、データ処理パイプライン全体を通して保たれる所定の順序で、コマンドおよびターゲットデータを供給するように構成される。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ハードウェアにおける高速データ処理動作をサポートするソフトウェアを有するインタフェースハードウェアの分野に向けられる。
【背景技術】
【0002】
大量のデータを処理する際に、コンピューティングシステムのデータスループット能力を向上させる能力は、常に存在する課題である。多くの場合、汎用プロセッサによって実行されるソフトウェアを使用して大量のデータ量を処理することは、ユーザのニーズを満たすのに遅すぎる。したがって、データ処理機能を、コンピュータの汎用プロセッサによって実行されるソフトウェアを離れて、ハードウェア上に配備されたファームウェアの中に再配置すること、またはそのようなファームウェアとソフトウェアとの間でデータ処理機能を分割することが望ましい。しかし、そのようにする際、ハードウェアデバイス(再構成可能なロジックデバイスなどの)が、ハードウェアとソフトウェアの間でデータおよびコマンドフローが行き来する際に、ネックを生じないような仕方で、データストレージやコンピュータの汎用プロセッサによって実行されるソフトウェアなどの外部リソースと互いに接続される必要がある。
【0003】
本明細書で使用される、「汎用プロセッサ」という用語は、命令をフェッチして、それらの命令を実行するハードウェアデバイス(例えば、Intel Xeon(登録商標)プロセッサまたはAMD Opteron(登録商標)プロセッサ)を指す。「再構成可能なロジック」という用語は、形態および機能が、製造後にフィールドにおいて大幅に変更される(すなわち、再構成される)ことが可能な任意のロジック技術を指す。このことは、機能が、製造後に変更されることが可能であるが、形態は、製造時に固定される汎用プロセッサと対比されるべきである。「ソフトウェア」という用語は、汎用プロセッサ上に配備されたデータ処理機能を指す。「ファームウェア」という用語は、再構成可能なロジック上に配備されたデータ処理機能を指す。
【発明の開示】
【課題を解決するための手段】
【0004】
当技術分野におけるニーズに対処しようとして、本発明人らは、本明細書において、外部メモリおよびソフトウェアを有する再構成可能なロジックデバイス上に配備された少なくとも1つのファームウェアアプリケーションモジュールとインタフェースをとるファームウェアソケットモジュールのための新たな設計を開示する。また、このファームウェアソケットモジュールは、好ましくは、再構成可能なロジックデバイス上にも配備される。この少なくとも1つのファームウェアアプリケーションモジュールは、このモジュールが受け取る任意のターゲットデータに対してデータ処理動作を実行するように構成され、この少なくとも1つのファームウェアアプリケーションモジュールが実行するデータ処理動作は、ソフトウェアベースのコマンドによって制御される。好ましくは、この少なくとも1つのファームウェアアプリケーションモジュールは、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含む。パイプラインにおける各ファームウェアアプリケーションモジュールは、好ましくは、コマンド情報に関して個々にアドレス指定可能である。このため、コマンドは、パイプラインにおける特定のファームウェアアプリケーションモジュールに発行されて、それらの特定のファームウェアアプリケーションモジュールのデータ処理動作が制御されることが可能である。
【0005】
ファームウェアソケットモジュールは、外部メモリおよびソフトウェアにアクセスして、ファームウェアアプリケーションモジュールパイプラインを通して処理されるべきコマンドおよびターゲットデータを受け取るように構成される。好ましくは、ファームウェアソケットモジュールは、コンピュータシステムのメモリからファームウェアソケットモジュールへのコマンドおよびターゲットデータのDMA(ダイレクトメモリアクセス)転送を実行するようにシステムバスへトランザクションを発行する。ファームウェアソケットモジュールは、これらのコマンドおよびターゲットデータを、ソフトウェアによって規定される所定の順序でパイプラインにおけるファームウェアアプリケーションモジュールの第1のモジュールに供給するように構成される。
【0006】
ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールパイプラインは、好ましくは、システムを通してコマンドおよびターゲットデータを伝搬する際に、インバウンドのコマンドおよびターゲットデータの、この所定の順序を厳密に保つように構成される。ターゲットデータが、パイプラインにおける或るファームウェアアプリケーションモジュールに到達すると、そのファームウェアアプリケーションモジュールは、このターゲットデータに対して、指定されたデータ処理動作を実行し、その後、そのように処理されたターゲットデータを、パイプラインにおける次のファームウェアアプリケーションモジュールに供給する。コマンドデータが、パイプラインにおける或るファームウェアアプリケーションモジュールに到達すると、そのファームウェアアプリケーションモジュールは、このコマンドが、そのモジュールに向けられているかどうかを確かめ、向けられている場合、そのコマンドを解釈して、適宜、そのモジュールのデータ処理動作を再構成する。このコマンドが、パイプラインをさらに下って伝搬されるべきである場合、そのファームウェアアプリケーションモジュールは、このコマンドを、パイプラインにおける次のファームウェアアプリケーションモジュールに送る。
【0007】
ファームウェアソケットモジュールに入る、またはファームウェアアプリケーションモジュールパイプラインの入口点に入るコマンドおよびターゲットデータの流れは、コマンドとターゲットデータがともに、規定された順序に従ってインタリーブされた単一のストリームと考えられることが可能である。コマンドとデータがインタリーブされるという言い方がされる場合、このことは、コマンド/データ/コマンド/データ/コマンド/データ...というストリームを要求しない(排除しないものの)。代わりに、本明細書で説明されるコマンドとデータのインタリーブされたストリームは、コマンド/コマンド/コマンド/データ/データ/データ/データ/データ/コマンド...などのストリームを包含し、ストリームにおけるコマンドとデータの順序は、ソフトウェアによって規定され、ファームウェアソケットモジュールが、このストリームをファームウェアアプリケーションモジュールパイプラインに伝搬する際に、ファームウェアソケットモジュールによって保存される。
【0008】
ファームウェアアプリケーションモジュールのデータ処理動作を制御する適切なコマンドが、ファームウェアアプリケーションパイプラインに入るコマンドとターゲットデータのストリームの中の、そのターゲットデータに先行して、ファームウェアアプリケーションモジュールのデータ処理動作が、ターゲットデータを処理することに先立って適切に制御されることを可能にしなければならない。コマンドとターゲットデータの、この厳密な順序付けが容易に保たれることを促すのに、ファームウェアソケットモジュールは、コマンドとターゲットデータをともに、パイプラインにおける第1のファームウェアアプリケーションモジュールに、パイプラインの第1のファームウェアアプリケーションモジュールにファームウェアソケットモジュールをリンクするのと同一の通信パスを介して、供給するように構成される。
【0009】
このファームウェアソケットモジュール−ファームウェアアプリケーションモジュールパイプライン間の接続によってもたらされるコマンドとターゲットデータの間の自然な同期により、システムの複雑さが回避されるとともに、データスループットが増大する。本発明人らに知られている従来技術のソケットインタフェースにおいて、コマンドは、ターゲットデータをデータ処理モジュールに通信するのに使用される通信パスとは異なる通信パスを介して、データ処理モジュールに通信される。そのようなデータ処理モジュールが、パイプライン化されると、そのようなデュアル通信パスにより、コマンドをデータと同期しようと試みる際、管理の困難が生じる。そのような場合において、パイプラインにおけるデータ処理モジュールに新たなコマンドが発行されると、そのコマンド、およびさらなるターゲットデータが、そのパイプラインを通して処理され、それによってパイプラインのスループット能力を大きく損なう前に、パイプライン全体から、通常、以前のコマンド、および以前のデータがフラッシュされる必要がある。しかし、対照的に、本発明では、パイプラインの1つのファームウェアアプリケーションモジュールが、パイプラインにおける他のファームウェアアプリケーションモジュールが、それらのモジュールの規定されたデータ処理動作に従ってデータを同時に処理している間に、コマンドに対処することができる。このため、パイプライン全体がフラッシュされることを要求することなしに、ファームウェアアプリケーションモジュールのデータ処理動作を調整するコマンドが、ファームウェアアプリケーションモジュールに発行されることが可能である。
【0010】
コンピュータシステムの汎用プロセッサによって実行される高レベルソフトウェアが、好ましくは、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールパイプラインを通して最終的に伝搬されるコマンドとデータの順序を規定する。次に、やはりコンピュータシステムの汎用プロセッサによって実行される、より低いレベルのデバイスドライバソフトウェアが、好ましくは、コマンドとデータの、この規定された順序を保ち、そのような順序付けられたコマンドとデータをファームウェアソケットモジュールに提供する。このデバイスドライバソフトウェアは、好ましくは、コマンドおよびターゲットデータに対するポインタが格納される入力記述子プールバッファを管理することによって、この順序を保つ。ファームウェアソケットモジュールは、入力記述子プールバッファにアクセスして、ファームウェアアプリケーションモジュールパイプラインに送られるべきコマンドおよびターゲットデータについて知る。
【0011】
ファームウェアソケットモジュールのアウトバウンド側(ソフトウェアに対してアウトバウンド)で、デバイスドライバソフトウェアは、好ましくは、出力コマンドおよびアウトバウンドデータに関して別々のバッファを保持して、ファームウェアアプリケーションモジュールによって処理されたコマンドおよびデータが、コンピュータシステムソフトウェアによる後のアクセスのために、メモリの中でどこに格納されるべきかについて、ファームウェアソケットモジュールに通知する。
【0012】
本発明の好ましい実施形態が提供する利点の中には、ソフトウェアから再構成可能なロジックデバイスに、さらに再構成可能なロジックデバイスからソフトウェアに、フロー制御されたデータを確実に送る能力、およびファームウェアアプリケーションモジュールが配備されるコンピュータシステムとは独立した(ファームウェアアプリケーションモジュールが、ファームウェアソケットモジュールの通知要件を遵守する限り)ファームウェアアプリケーションモジュールを開発する能力がある。本発明のこれら、およびその他の特徴は、以下の説明および図を検討すると、一部は指摘され、一部は、当業者には明白となろう。
【発明を実施するための最良の形態】
【0013】
図1は、本発明による好ましいシステム100を示す。このシステムにおいて、再構成可能なロジックデバイス102が、ディスクコントローラ106およびデータストア104によって規定されるディスクサブシステムを離れて流れる(直接に、またはRAM110などのシステムメモリを介して間接的に)データを受け取るように位置付けられる。好ましくは、このデータは、システムバス112を介して再構成可能なロジックデバイスに流れ込むが、他の設計アーキテクチャも可能である(図3b参照)。好ましくは、再構成可能なロジックデバイスは、FPGA(フィールドプログラマブルゲートアレイ)であるが、そうでなくてもよい。また、システムバス112は、再構成可能なロジックデバイス102を、コンピュータシステムのメインプロセッサ108、ならびにコンピュータシステムのRAM110と互いに接続する。本明細書で使用される「バス」という用語は、デバイスおよびロケーションがアドレスによってアクセスされる任意の物理的相互接続を包含する論理バスを指す。本発明の実施の際に使用されることが可能なバスの例には、PCIファミリのバス(例えば、PCI−XおよびPCI−Express)、およびHyperTransportバスが含まれるが、以上には限定されない。好ましい実施形態において、システムバス112は、PCI−Xバスであることが可能であるが、そうでなくてもよい。
【0014】
データストアは、任意のデータ記憶デバイス/システムであることが可能であるが、好ましくは、何らかの形態の大容量記憶媒体である。例えば、データストア104は、Seagate(登録商標)ディスクのアレイなどの磁気記憶デバイスであることが可能である。しかし、他のタイプの記憶媒体も、本発明の実施の際に使用するのに適していることに留意されたい。例えば、データストアは、インターネットまたは何らかのLAN(ローカルエリアネットワーク)などのネットワークを介してアクセスされる1つまたは複数の遠隔データ記憶デバイスであることも可能である。
【0015】
メインプロセッサ108およびRAM110によって規定されるコンピュータシステムは、好ましくは、当業者によって理解される通り、任意の商品コンピュータシステムである。例えば、コンピュータシステムは、Intel Xeon(登録商標)システムまたはAMD Opteron(登録商標)システムであることが可能である。
【0016】
再構成可能なロジックデバイス102は、デバイス102の機能を規定するデバイス102上に配備されたファームウェアモジュールを有する。ファームウェアソケットモジュール120が、再構成可能なロジックデバイスを出入りするデータ移動要件(コマンドデータとターゲットデータの両方)を扱い、やはり再構成可能なロジックデバイス上に配備されるFAM(ファームウェアアプリケーションモジュール)チェーン130に対する一貫したインタフェースを提供する。FAMチェーン130のFAM130iが、ファームウェアソケットモジュール120からチェーン130を通して流れるターゲットデータに対して、指定されたデータ処理動作を実行するように構成される。再構成可能なロジック上に配備されることが可能なFAMの好ましい実施例が、米国特許第6,711,558号(「Associative Database Scanning and Information Retrieval」という名称の)、係属中の米国特許出願第10/153,151号(「Associative Database Scanning and Information Retrieval using FPGA Devices」という題名で2002年5月21日に出願され、2003/0018630として公開された)、公開PCT出願、WO 05/048134およびWO 05/026925(ともに、2004年5月21日に出願され、「Intelligent Data Storage and Processing Using FPGA Devices」という題名を有する)、米国特許仮出願第60/658,418号(2005年3月3日に出願され、「Biosequence Similarity Searching Using FPGA Devices」という題名を有する)、米国特許仮出願第60/736,081号(2005年11月11日に出願され、「Method and Apparatus for Performing Biosequence Similarity Searching」という題名を有する)および米国特許出願第11/293,619号(2005年12月2日に出願され、「Method and Device for High Performance Regular Expression Pattern Matching」という題名を有する)において説明されており、これらの特許文献の各文献の開示全体が、参照により本明細書に組み込まれている。例えば、FAMによって実行されることが可能である例示的なデータ処理動作の網羅的ではないリストには、データ検索動作(様々なタイプの)、データ暗号化動作(いくつかの暗号化技術および/または暗号化キーのいずれかを使用する)、データ解読動作(いくつかの解読技術および/または解読キーのいずれかを使用する)、データ圧縮動作(いくつかのデータ圧縮技術のいずれかを使用する)、データ伸張動作(いくつかのデータ伸張技術のいずれかを使用する)、およびデータ縮約動作が含まれる。
【0017】
FAMによって実行される特定のデータ処理動作は、FAMが、ファームウェアソケットモジュール120から受け取るコマンドデータによって制御/パラメータ化される。このコマンドデータは、FAM固有であることが可能であり、このコマンドが受け取られると、FAMは、受け取られたコマンドによって制御されるデータ処理動作を実行するようにFAMを構成する。
【0018】
FAMが、受け取られたコマンドによって指定されるデータ処理動作を実行するように構成されると、そのFAMは、ファームウェアソケットモジュールからそのFAMが受け取るターゲットデータに対して、そのFAMの指定されたデータ処理動作を実行する準備ができている。このため、FAMは、ターゲットデータの指定されたストリームの中で、「Smith」という語の存在を検索するように、適切なコマンドを介して構成されることが可能である。FAMが、「Smith」という語に関して、ターゲットデータストリームに対して検索動作を実行すると、FAMに、「Jones」という語を検索するようにFAMを再構成させる別のコマンドが、そのFAMに送られることが可能である。FAMは、ハードウェア速度で動作する(その結果、FAMを通るターゲットデータの高いスループットをもたらす)だけでなく、FAMは、FAMのデータ処理動作のパラメータを変更するように柔軟に再プログラミングされることも可能である。
【0019】
FAMチェーン130は、好ましくは、パイプライン化されたシーケンスに構成される、複数のFAM(ファームウェアアプリケーションモジュール)130a、130b...を含む。本明細書で使用される「パイプライン」、「パイプライン化されたシーケンス」、または「チェーン」とは、FAMの構成を指し、1つのFAMの出力が、シーケンスにおける次のFAMの入力に接続される。このパイプライン構成は、各FAMが、所与のクロックサイクル中にそのFAMが受け取るデータに対して独立に動作し、次に、そのFAMの出力を、別のクロックサイクル中に、シーケンスにおける次の下流のFAMに送ることを可能にする。
【0020】
通信パス132が、ファームウェアソケットモジュール120を、パイプライン化されたFAMの第1のFAM130aの入力に接続する。第1のFAM130aの入力は、FAMチェーン130への入口点の役割をする。通信パス134が、パイプライン化されたFAMの最後のFAM130mの出力をファームウェアソケットモジュール120に接続する。最後のFAM130mの出力は、FAMチェーン130の出口点の役割をする。通信パス132と通信パス134はともに、好ましくは、マルチビットパスである。
【0021】
図2は、図1のシステム100上のアプリケーションの配備に関する例示的なフレームワークを示す。図2の上位の3つの層は、コンピュータシステムの汎用プロセッサ108上のソフトウェアにおいて実行される機能を表す。下位の2つの層は、再構成可能なロジックデバイス102上のファームウェアにおいて実行される機能を表す。
【0022】
アプリケーションソフトウェア層200は、1名または複数名のユーザが、アプリケーションと対話して、いずれのデータ処理動作が、FAMによって実行されるべきであるかを規定し、さらに、それらのデータ処理動作が、どのようなターゲットデータに対して実行されるべきであるかを規定するタイプの機能などの、高レベル機能に対応する。
【0023】
次の層は、高レベルモジュールAPI202aと、低レベルモジュールAPI202bとを含むモジュールAPI(アプリケーションプログラミングインタフェース)層202である。高レベルモジュールAPI202aは、アプリケーションレベルソフトウェアに一般的なサービス(例えば、呼び戻しを管理すること)を提供することができる。低レベルモジュールAPI202bは、OS(オペレーティングシステム)レベル/デバイスドライバソフトウェア204の動作を管理する。ソフトウェアライブラリインタフェース210が、高レベルモジュールAPI202aを低レベルモジュールAPI202bに結び付ける。このソフトウェアライブラリインタフェースについての詳細は、後段で提供される。
【0024】
デバイスドライバソフトウェア204とファームウェアソケットモジュール120との間のインタフェースは、システム100に関するハードウェア/ソフトウェアインタフェース212の役割をする。このインタフェース212の詳細は、図5に関連して、より詳細に説明される。
【0025】
ファームウェアソケットモジュール120と、FAMチェーン130との間のインタフェースは、ファームウェアモジュールインタフェース214である。このインタフェースの詳細は、図4に関連して、より詳細に説明される。
【0026】
図3aは、商品コンピュータシステムのPCI−Xバス112に接続されることが可能なプリント回路基板またはプリント回路カード300を示す。図3aの例において、プリント回路基板は、メモリデバイス304およびPCI−Xバスコネクタ306と通信するFPGA302(Xilinx Virtex(登録商標) II FPGAなどの)を含む。好ましいメモリデバイス304は、SRAMメモリとDRAMメモリとを含む。好ましいPCI−Xバスコネクタ306は、標準のカードエッジコネクタである。
【0027】
図3bは、プリント回路基板/カード300に関する代替の構成を示す。図3bの例において、プライベートバス308(PCI−Xバスなどの)、ディスクコントローラ310、およびディスクコネクタ312も、プリント回路基板300上に実装される。SCSI、SATA、FC(Fibre Channel)などを含むが、以上には限定されない、任意の商品ディスク技術が、サポートされることが可能である。この構成において、ファームウェアソケット120は、PCI−X−PCI−X間ブリッジの役割もして、プライベートPCI−Xバス308を介して接続されたディスクへの通常のアクセスをプロセッサ108に与える。
【0028】
図3aまたは図3bの構成において、ファームウェアソケット120は、PCI−Xバスにメモリ304をアクセス可能にすることができ、その結果、メモリ304が、ディスクコントローラからFAMへの転送のためのバッファとしてOSカーネル204によって使用されることが可能になることは、注目に値する。また、単一のFPGA302が、図3aおよび図3bのプリント回路基板上に示されているが、複数のFPGAが、プリント回路基板300上の複数のFPGAを含めること、またはコンピュータシステムに複数のプリント回路基板300を実装することによって、サポートされることが可能であるものと理解されるべきことも注目に値する。図8は、単一のパイプラインにおける多数のFAMが、複数のFPGAにまたがって配備される例を示す。
【0029】
図1−図3に示される通り、インバウンドデータ(カーネル204からカード300への)が、コンピュータシステム内のバス112をわたってファームウェアソケットモジュール120まで移動され、次に、ファームウェアソケットモジュール120によってFAMチェーン130に送られる。アウトバウンドデータ(カード300からカーネル204への)が、FAMチェーン130からファームウェアソケットモジュール120に送られ、次に、ファームウェアソケットモジュール120によって、PCI−Xバスをわたって、コンピュータシステム上で実行されるソフトウェアアプリケーションに送られる。図2に示される通り、使用される3つの対話するインタフェースは、ファームウェアモジュールインタフェース214、ハードウェア/ソフトウェアインタフェース212、およびソフトウェアライブラリインタフェース210である。
【0030】
ファームウェアモジュールインタフェース214−信号層
図4に示されるファームウェアモジュールインタフェース214は、ファームウェアソケットモジュール120間で交換される信号、およびFAMチェーン130内のFAM間で交換される信号を含む。表1、および後段の説明が、これらの信号をさらに説明する。
【表1】
この表における信号方向エントリは、ファームウェアモジュールの見地からリストアップされる。このため、信号(4)から(8)まで(「data_in」、「data_cnt_in」、[data_vld_in]、「ctrl_vld_in」、および「wait_upstrm」)は、上流のファームウェアモジュール(例えば、通信パス132)に対するインタフェース信号を含む。信号(9)から(13)まで(「data_out」、「data_cnt_out」、「data_vld_out」、「ctrl_vld_out」、および「wait_dnstrm」)は、下流のファームウェアモジュール(例えば、通信パス134)に対するインタフェース信号を含む。
【0031】
信号「clk」は、ファームウェアソケットモジュールおよびFAMチェーンをクロック制御するのに使用される1ビットの入力信号である。
【0032】
信号「reset」は、ファームウェアソケットモジュールおよびFAMチェーンを起動時の状態にリセットするのに使用される1ビットの入力信号である。
【0033】
信号「module_ID」は、各ファームウェアモジュールに、FAMチェーンにおけるそのモジュールの位置を知らせる6ビットの入力バスである。
【0034】
信号「data_in」は、ターゲットデータおよびコマンドデータをFAMチェーンに転送するのに使用される64ビットのバスである。注目すべきこととして、データとコマンドの両方を転送するのに同一のバスを使用することにより、コマンドとターゲットデータの間の同期が、ほとんど複雑さなしに保たれることが可能である。
【0035】
信号「data_cnt_in」は、入力バス「data_in」上の8バイトのうちどれだけが、意味のあるデータを表すかを決定するのに使用される3ビットのバスである。好ましくは、1−7という値は、文字どおり解釈され、0という値は、8バイトすべてが有効であることを意味する。
【0036】
信号「data_vld_in」は、「data_in」バス上、および「data_cnt_in」バス上のデータが、所与のクロックサイクル上で有効であることを示すのに使用される1ビットの入力信号である。
【0037】
信号「ctrl_vld_in」は、「data_in」バス上のデータが、所与のクロックサイクル上で有効なコマンド(制御)情報であることを示すのに使用される1ビットの入力信号である。同一のFAMに入る「ctrl_vld_in」信号と「data_vld_in」信号は、同時にアサートされてはならないことは注目に値する。
【0038】
信号「wait_upstrm」は、現在のファームウェアモジュールにデータをプッシュすることを停止するように上流のファームウェアモジュールに告げるのに使用される1ビットの出力信号である。好ましくは、ファームウェアモジュールは、待機がアサートされた後、2つのデータ値を吸収するように構成される。
【0039】
信号「data_out」は、所与のFAMからデータとコマンドの両方を転送するのに使用される64ビットの出力バスである。この場合も、データとコマンドの両方を転送するのに同一のバスが使用されるため、コマンドとターゲットデータの間の同期は、各FAMが、受け取られたコマンドおよびターゲットデータに対して動作するので、FAMチェーンを通して保たれることが可能である。
【0040】
信号「data_cnt_out」は、出力バス「data_out」上の8バイトのうちどれだけが、意味のあるデータを表すかを決定するのに使用される3ビットバスである。好ましくは、1−7という値は、文字どおり解釈され、0という値は、8バイトすべてが有効であることを意味する。
【0041】
信号「data_vld_out」は、「data_out」バス上、および「data_cnt_out」バス上のデータが、所与のクロックサイクル上で有効であることを示すのに使用される1ビットの出力信号である。
【0042】
信号「ctrl_vld_out」は、「data_out」バス上のデータが、所与のクロックサイクル上で有効なコマンド(制御)情報であることを示すのに使用される1ビットの出力信号である。同一のFAMから出る「ctrl_vld_out」信号と「data_vld_out」信号は、同時にアサートされてはならないことは注目に値する。
【0043】
信号「wait_dnstrm」は、ファームウェアソケットモジュールまたは下流のモジュールが、その時点でデータを吸収することができないことをFAMに示すのに使用される1ビットの入力信号である。好ましくは、「wait_dnstrm」がディアサートされるまで、そのFAMからそれ以上データが送り出されてはならない。
【0044】
FAMチェーンにおけるいくつかの隣接するFAMは、FAMサブセットを形成することが可能であり、このFAMサブセットは、独自の入口点と出口点とを有することは注目に値する。そのような事例において、前掲の表において説明される信号インタフェースは、このFAMサブセットの入口点および出口点に関して保持されるが、異なる通知インタフェースが、オプションとして、FAMサブセットのFAM間において内部で使用されることも可能である。また、FAM自体、ファームウェアアプリケーションサブモジュールのチェーンから成ることが可能であり、これらのサブモジュール間の通信は、オプションとして、前掲の表において説明されるのとは異なる通知インタフェースに従うことも可能であることも注目に値する。
【0045】
ファームウェアモジュールインタフェース214−論理層
前述した通り、64ビットの「data_in」バス上、および64ビットの「data_out」バス上のファームウェアモジュールインタフェースを介して伝送される情報は、アプリケーションデータまたはコマンド(制御)情報であることが可能である。ファームウェアソケットモジュール120と個々のFAM130iはともに、コマンドとデータの順序付けを保ち、したがって、この順序は、FAMチェーン全体にわたって保たれる。データである、「data_in」バスおよび「data_out」バスに沿ってチェーンを下って流れる情報(ファームウェアソケットモジュールからチェーンにおける第1のFAMに、1つのFAMから次の下流のFAMに、チェーンにおける最終のFAMからファームウェアソケットモジュールに)は、データチャネルと呼ばれる。コマンド(制御)情報である、「data_in」バスおよび「data_out」バスに沿ってチェーンを下って流れる情報は、コマンドチャネルと呼ばれる。コマンドチャネルを介して伝送されるコマンドは、通常、消費されないが、解釈されて(適宜)、下流のモジュールに送られる。この結果、コマンドチャネルに入る多くのコマンドは、ソフトウェアに送り返されもする。
【0046】
コマンドチャネル上で、個々のコマンドに関する好ましいフォーマットは、コマンドが、以下のフィールドを有する64ビット長を有することである。すなわち、コマンド(16ビット)、誤り(1ビット)、同期(1ビット)、予約済み(8ビット)、モジュールID(6ビット)、およびパラメータ(32ビット)である。
【0047】
コマンドフィールドは、好ましくは、2つのASCII文字(例えば、「QY」が、クエリコマンドであることが可能である)として符号化されるが、そうである必要はなく、任意の16ビットの値が、有効である。コマンドチャネルに入ると、誤りビットは、クリアである。任意のモジュールが、その後、適宜、誤りビットを設定することができ、次に、誤りビットは、コマンドが、FAMチェーンおよびファームウェアソケットモジュールを抜けると、ソフトウェアに戻るように通信される。同期ビットは、好ましくは、アウトバウンドのコマンドおよびデータの同期を、コマンドおよびデータがソフトウェアに戻る途中に制御するように設定される。
【0048】
モジュールIDフィールドは、そのコマンドに応答すべき特定のファームウェアモジュールを特定する。好ましくは、モジュールIDに関する0という値は、すべてのモジュールが、そのコマンドに応答すべきことを意味する(FAMのすべてだけでなく、ファームウェアソケットモジュールも含む)。また、モジュールIDに関する1という値は、ファームウェアソケットモジュールを除くすべてのモジュールが、そのコマンドに応答すべきことを意味することが好ましい。好ましくは、2というモジュールID値は、ファームウェアソケットモジュールだけのために取っておかれ、3以上のモジュールID値は、特定のFAMに向けられる。各FAMは、ファームウェアモジュールインタフェースの信号層に関連して説明される入力信号module_IDのお陰で、そのFAM自らのモジュールID値を知る。
【0049】
ファームウェアモジュールインタフェースに関する好ましいグローバルコマンドには、リセットコマンド、クエリコマンド、クエリ応答コマンド、パススルーコマンド、データ開始コマンド、およびデータ終了コマンドが含まれる。
【0050】
リセットコマンド(RS)は、コマンドのモジュールIDフィールドによって示される通り、FAMチェーン全体、または個々のFAMをリセットするように動作する。好ましくは、このパラメータフィールドは、このコマンドに関して使用されない。
【0051】
クエリコマンド(QY)は、モジュールにクエリを行って、モジュールの現在の状態を評価するように動作する。モジュールは、1つまたは複数のクエリ応答(QR)コマンドで応答しなければならない。モジュールが、そのモジュールのクエリ応答で応答した後、そのモジュールは、元のQYコマンドを、チェーンにおける次のモジュールに送る。好ましくは、パラメータフィールドは、このコマンドに関して使用されていない。
【0052】
モジュールが、QYコマンドを受け取ると、1つまたは複数のクエリ応答コマンド(QR)が、モジュールによって生成される。クエリ応答を受け取ると、FAMは、その応答を単に下流に転送する。好ましくは、QRコマンドに関するパラメータフィールドは、モジュール固有であり、この32ビットのフィールドは、2つのサブフィールド、すなわち、どのようなタイプの情報が送られているかを示すタグである最上位の8ビット、および所与のタグに関連するデータである最下位の24ビットに分割される。
【0053】
パススルーコマンド(PS)は、モジュールが、データを、変更なしにパススルーすべきか、または通常のデータ処理動作を実行すべきかをモジュールに知らせる。パススルーモードは、コマンド処理またはコマンド転送に影響を与えず、このモードの影響は、データチャネルに対してだけに限られる。好ましくは、パラメータフィールドの最下位ビット(ビット0)が、パススルーモードをイネーブル/ディセーブルにし、1というパススルービット値が、パススルーモードをイネーブルにし、0というパススルービット値が、パススルーモードをディセーブルにする。
【0054】
データ開始コマンド(SD)は、データストリームの開始に(通常、フィールド境界上に)マークを付けるのに使用される。データ終了コマンド(ED)は、データストリームの終了に(この場合も、通常、フィールド境界上に)マークを付けるのに使用される。SDコマンドおよびEDコマンドに関するパラメータフィールドは、好ましくは、使用されないが、一部の事例において、パラメータフィールドは、ファイルIDまたはフレームIDを指定するのに使用されることが可能である。
【0055】
FAMチェーンを通るコマンド伝搬は、好ましくは、以下の通り進む。すなわち、(1)グローバルコマンド(モジュールID値が0または1であるコマンド)が、FAMチェーンにおける各FAMによって順方向に伝搬され、(2)FAMは、モジュールID値が、異なるFAMのために設定されているコマンドを順方向に伝搬し、(3)FAMは、同期ビットが設定されているコマンドを順方向で伝播する。
【0056】
ファームウェアソケットモジュールに固有である、またはそうである可能性がある好ましいコマンドには、データカウントコマンド、リセットコマンド、およびクエリ応答コマンドが含まれる。
【0057】
データカウントコマンド(DC)は、ファームウェアソケットモジュールが前回にリセットされて以来、どれだけのデータが、FAMチェーンを通過したかをファームウェアソケットモジュールに尋ねるのに使用されることが可能である。ファームウェアソケットモジュールに1つのDCコマンドが送信されることは、3つのDCコマンドが戻されることをもたらす。最初の応答のDCコマンドは、FAMチェーンに入ったバイト数を特定する。第2番の応答のDCコマンドは、FAMチェーンを出たデータのバイト数を特定する。第3番の応答のDCコマンドは、戻される元の送られたDCコマンドである。好ましくは、SDコマンドまたはRSコマンドは、データカウントをリセットするように動作する。パラメータフィールドに関して、送られるDCコマンドのパラメータフィールドは、好ましくは、無視されるのに対して、応答のDCコマンドのパラメータフィールドは、好ましくは、前述した通り、関係のあるバイト数を特定する。
【0058】
RS(リセットコマンド)フォーマットについては、グローバルコマンドに関連して前段で説明した。ファームウェアソケットモジュールは、RSコマンドを受信すると、好ましくは、FAMチェーン全体をリセットし、さらに、あらゆる入力キューおよび出力キューをクリアする。ファームウェアソケットモジュールによってカードから戻されていない可能性があるデータは、RSコマンドによってクリアされ、このため、アプリケーションは、ファームウェアソケットモジュールにリセットコマンドを送信する前に、予期されるすべてのデータを受信していることを確実にしなければならない。このことは、同期ビットセットを有するコマンドを送ること、またはファームウェアソケットモジュールのドアベルレジスタの中のフラッシュビットのストロービングを行うことによって達せられることが可能である。
【0059】
また、クエリ応答コマンド(QR)フォーマットについても、グローバルコマンドに関連して前段で説明した。好ましくは、ファームウェアソケットモジュールが、QRコマンドを発行すると、ファームウェアソケットモジュールのパラメータフィールドは、以下の表2の中で以下の通り設定される。すなわち、
【表2】
【0060】
FAMに固有であるコマンドは、各FAMのデータ処理動作に応じて変化する。例えば、ターゲットデータのストリームとパターンがマッチングされる検索動作を実行するように構成されたFAMに適用可能なコマンドのセットには、好ましくはデータストリームの検索が照らし合わせて行われるパターンを定義するコマンド、パターンとの一致が、データストリームの中で見つかった場合に、データストリームからどれだけのコンテキストが戻されるべきか(例えば、データストリーム内の一致の前と後のXバイトを戻す)を特定するコマンド、所与のパターンに関して許されるミスマッチの数を定義するコマンド(例えば、パターンが、長さ10である場合、Kというミスマッチ値は、10のパターン文字のいずれか(10−K)が、データストリーム内で一致した場合に、一致が生じることを許す)、マッチが宣言されるのに、パターンの中のいずれのビットが、データストリームの中で一致を見出さなければならないかを定義するコマンド、検索されるべきデータ内のファイルを定義するコマンド、および検索されなければならないファイル内のデータのサブセットを定義するコマンドが含まれる。そのようなコマンドのパラメータフィールド、またはオプションとして、他のフィールドが、FAMによって実行されるパターンマッチング動作の、これらの態様を定義するのに使用されることが可能である。また、パターンマッチング動作を実行するように構成されたFAMからのQRコマンドは、好ましくは、値が、FAMタイプの識別、FAMタイプのバージョンの識別、FAMタイプのビルドの識別、およびFAMによってサポートされるパターンの数の識別に対応するタグで応答する。
【0061】
別の例として、暗号化動作または解読動作を実行するように構成されたFAMに適用可能なコマンドのセットには、好ましくは、暗号化/解読動作において使用されるべきキーを特定するコマンドが含まれる。
【0062】
FAMによって実行されることが可能な前段でリストアップされる他のデータ処理動作に加え、可能なデータ処理動作には、固定長のレコードを取り込み、選択されているレコードのバイトだけを送るフィールド選択動作(そのようなFAMへのコマンドは、いずれのバイトが選択されるべきかを示す)、サイズが、FAMを通して処理されるデータサイズ(本明細書で説明される好ましい実施例において8バイト)の倍数ではないレコードにパディングを追加するレコードゲート動作(そのようなFAMへのコマンドは、所望されるレコードサイズを示す)、レコードからパディングバイトを除去する逆レコードゲート動作(そのようなFAMへのコマンドは、除去されるべきレコードのバイト数を示す)、および1つまたは複数のパターンに対する一致を、固定長のレコードの指定された列境界内で検索するレコード選択動作(コマンドが、前述したパターンマッチングコマンドと同様であるが、指定された列境界内で行われる検索を制限するのに、レコードがどのようにマスクされるかを特定するコマンドも含む動作)も含まれる。
【0063】
好ましくは、FPGA上に配備されるFAMは、1つのタイプのデータ処理動作を実行することに専用であり、コマンド信号は、そのタイプのデータ処理動作の特定の態様を定義するように作用する。例えば、図7に示される通り、FAMチェーンにおける各FAMは、或るタイプのデータ処理動作に専用であり、例えば、第1のFAMは、伸張動作を実行するように構成され、第4番のFAMは、1つのタイプの検索動作を実行するように構成され、第5番のFAMは、別のタイプの検索動作を実行するように構成され、最後から2番目のFAMは、暗号化動作を実行するように構成される。適切なコマンドを通して、各FAMのデータ処理動作の詳細が、制御されることが可能である(例えば、「Smith」という語を検索するように第4番のFAMを構成する、またはキーAを使用して暗号化動作を実行するよう最後から2番目のFAMを構成する)。FAMが、異なるタイプのデータ処理動作を実行するように完全に再プログラミングされるべき場合、FPGAが、この目的を達するように再構成されることが好ましいが、そのように行われる必要はない。
【0064】
さらに、FAMチェーンにおける各FAMを適切にオンまたはオフにすることにより、特化された処理動作が、FAMチェーンによって達せられることが可能である。例えば、データが、暗号化されたフォーマットで格納される所与のパターンに関してデータストリーム内で検索を実行するのに、(1)検索FAMの1つをオンにし、そのFAMを、その所与のパターンを使用して構成し、(2)解読FAMをオンにし、そのFAMを、データストリームを解読する適切なキーを使用して構成し、(3)チェーンにおける他のすべてのFAMをオフにするコマンドが、FAMチェーンに送られることが可能である。そのような事例において、暗号化されたデータストリームは、第2番のFAMによって解読され、解読されたデータストリームは、その所与のパターンに関して検索FAMの1つによって検索される。
【0065】
ハードウェア/ソフトウェアインタフェース212
好ましくは、ファームウェアソケットモジュールは、ドライバレベルシステムソフトウェア204と連携して使用される場合、システムのメモリ空間に/からデータを転送するバックエンドを有するXilinx(登録商標) PCI−Xを使用する。このバックエンドインタフェースの性質について、本明細書でより詳細に説明する。
【0066】
Xilinx(登録商標) PCI−X Core Version 5.0は、PCI−X規格によって説明されているインタフェースから、Xilinx(登録商標) LogiCore PCI−X Design Guide Version 5.0およびXilinx(登録商標) LogiCore PCI−X Implementation Guide Version 5.0によって説明されているXilinx(登録商標)によって設計されたインタフェースへの変換を扱う。好ましくは、構成パラメータは、PCI−X接続プリント回路基板300が、64ビットおよび133MHz対応であることを示すように設定される。システムBIOSが、デバイスの速度を100MHzに設定するか、または133MHzに設定するかは、133MHz能力ビット、ならびにPCIXCAPピン上の物理的電圧および時間遅延に依存する。FPGA302上に配備されたモジュールが、100MHzだけで実行される場合、PCIXCAPピンは、このことを示すように設定されなければならない。また、PCI−X構成は、3つまでの64ビットBAR(ベースアドレスレジスタ)、または6つまでの32ビットBARを使用するように設定されることが可能である。好ましくは、ファームウェアソケットモジュール120は、64ビットBARとして構成された第1のBARを使用して、デバイスドライバソフトウェア204との通信のためにモジュール120のデバイスレジスタをマップする。
【0067】
ファームウェアソケットモジュール120とデバイスドライバソフトウェア204の間の通信の大部分は、好ましくは、3つの記述子プールセットを介して行われる。図5に示される通り、これらの記述子プールに関するバッファは、カーネル−カード入力記述子プールバッファ500、データに関するカード−カーネル出力記述子プールバッファ504と、コマンドに関するカード−カーネル出力記述子プールバッファ506とを含む。これらの記述子プールバッファは、好ましくは、OSカーネル/デバイスドライバソフトウェア204によって管理されるメモリ空間の中(例えば、RAM110内)に存在する。バッファ500、504、および506の中の各エントリは、記述子を含み、各記述子は、そのバッファ内の複数のアドレスにわたることが可能である。
【0068】
後段で説明されるバイトカウントフィールドおよび他のフラグに加え、記述子はそれぞれ、好ましくは、ソフトウェアからハードウェアへの(入力記述子に関する)、またはハードウェアからソフトウェアへの(出力記述子に関する)データ移動に関するメモリロケーションの物理アドレスおよび仮想アドレスを含む。このため、記述子プールバッファの中のエントリは、ファームウェアソケットモジュールが、データを読み取る、またはデータを書き込む位置へのポインタの役割をする。
【0069】
ファームウェアソケットモジュールが、データ(コマンドとターゲットデータの両方)を読み取る/書き込むメモリ空間502は、コンピュータシステム、およびコンピュータシステムに接続された物理的にアドレス指定可能な任意のデータ記憶デバイスの物理的アドレス空間内の任意のメモリであることが可能である。このため、メモリ空間502は、コンピュータシステムのマザーボード(例えば、RAM110)に限定される必要がない。例えば、カードのメモリ304が、ドライバレベルソフトウェア204に利用可能にされた場合、コマンドおよびターゲットデータを格納するためのメモリ空間502は、メモリ304を含むことが可能である。また、メモリ空間502は、データストア104内、または他の何らかのシステム接続された記憶デバイス内のアドレスを、データストア104、またはそのような記憶デバイスのアドレス空間が、ドライバレベルソフトウェアに利用可能にされた場合(例えば、データストア104に関するディスクコントローラ106を介して)、含むことが可能である。
【0070】
ハードウェア/ソフトウェアインタフェース212に関する好ましい通常の動作は、以下の通りである。すなわち、
1)ソフトウェアデバイスドライバ204が、FAMに送られるべきコマンドおよびデータを、メモリ空間502の中のバッファのセットの中に入れる。好ましくは、ドライバレベルソフトウェア204は、再構成可能なロジックデバイスを介してストリーミングされるべきターゲットデータを、メモリ空間502の隣接するアドレスの中に単一のセットとして格納し、これにより、ターゲットデータがFPGAに読み込まれることが可能な速度が向上するだけでなく、そのような隣接して格納されたターゲットデータをポイントする連続する記述子が、場合により、記述子のバイトカウントフィールドを適切に更新することによって、より少ない記述子に集約されることが可能であるという点で、柔軟性をもたらしもする。
2)デバイスドライバ204が、次に、メモリ空間502内のバッファの内容についてファームウェアソケットモジュールに知らせる入力記述子を構築する。好ましくは、1つの記述子は、ターゲットデータのMバイトの各コマンドまたは各セグメントに関して使用され、Mのサイズは、様々な要因に応じて可変である。Mのサイズは、デフォルトで32キロバイトにされることが可能である。しかし、前述した通り、この値は、依然として、各記述子に関するカードを介して大量のデータを移動しながら、バッファセットアップ、記述子管理などに関連するプロセッサオーバヘッドを最小限に抑える要望を考慮して、ソフトウェアによって可変であることが可能である。また、デバイスドライバ204は、好ましくは、FAMから戻ってくるデータおよびコマンドをどこに置くかをファームウェアソケットモジュールに告げる出力記述子を構築する。入力記述子は、デバイスドライバ204によって、入力記述子プールバッファ500の中に格納される。データに対応する出力記述子は、デバイスドライバ204によって、出力記述子プールバッファ504の中に格納され、コマンドに対応する出力記述子は、デバイスドライバ204によって、出力記述子プールバッファ506の中に格納される。
3)デバイスドライバ204は、次に、新たな入力記述子、および新たな出力記述子が、通信パス510上でドアベル信号を介して利用可能であることをファームウェアソケットモジュールに知らせる。
4)ファームウェアソケットが、次に、バッファ500の中の第1の入力記述子を読み取り、FAMチェーンに送られるべきデータ(コマンドまたはターゲットデータ)が格納されるロケーションを特定し、そのロケーションからFAMチェーンへのデータ(コマンドまたはターゲットデータ)のDMA転送を実行し、バッファ500の中の次の入力記述子に進む。このため、コマンドおよびターゲットデータは、入力記述子プールバッファ500内で設定されているのと同じ順序でFAMチェーンに供給される。
5)ファームウェアソケットモジュールが、次に、FAMチェーンを出るコマンドを、バッファ506の中のコマンド出力記述子によって指定されたメモリ空間502c内のバッファに送る。また、ファームウェアソケットモジュールは、FAMチェーンから出るデータを、バッファ504の中のデータ出力記述子によって指定されたメモリ空間502b内のバッファに送る。
6)ファームウェアソケットモジュールは、次に、コマンドおよび/またはデータが利用可能であることをデバイスドライバに通知する(割り込みを介して)。
7)ソフトウェアが、次に、適宜、戻されたデータおよび/またはコマンドに対処する適切なデータハンドラまたはコマンドハンドラを呼び出す(このハンドラは、ソフトウェアライブラリインタフェース210を介して制御される)。
【0071】
ソフトウェアから再構成可能なロジックデバイスに情報を送る際、すべての転送(コマンドとデータの両方)は、好ましくは、バッファ500の中に格納された共通の入力記述子によって管理される。FAMチェーンの中の個々のFAMが、データおよびコマンドを並べ替えない限り、バッファ500の中の入力記述子の順序によって定義されるデータおよびコマンドの順序は、再構成可能なロジックデバイス内の処理全体にわたって保たれる。
【0072】
再構成可能なロジックデバイスからソフトウェアに戻るように送られるデータおよびコマンドに関して、厳密な順序付けは、必ずしも要求されない。厳密な同期が、プロセス全体(ソフトウェアへのコマンドおよびデータの戻しを含む)にわたって所望される場合、デバイスドライバソフトウェアは、個別のコマンドの中で同期ビットを設定することができる。同期ビットセットを有するコマンドが、FAMチェーンの出口点からファームウェアソケットモジュールに到着すると、ファームウェアソケットモジュールは、好ましくは、以下の機能を実行する。すなわち、(1)データチャネルバッファをメモリにフラッシュし、(2)データ出力記述子の中で設定された同期フラグを有するデータチャネルにおけるNull(空の)バッファを作成し、(3)このデータ出力記述子が、メモリにフラッシュされることを確実にし、(4)コマンドチャネルバッファ(コマンド自体の中で同期ビットが設定されている)をフラッシュする。
【0073】
ファームウェアソケットモジュール120は、好ましくは、前段で特定された(さらに、64ビットBARとして構成されている)第1のBARのメモリ領域の中にマップされた16個のデバイスレジスタを有する。各デバイスレジスタの物理的アドレスは、ベースアドレスに或るオフセットを足したアドレスである。これらのレジスタ、およびBARからの、これらのレジスタのオフセットが、以下の表3にリストアップされる。すなわち、
【表3】
【0074】
ファームウェアIDは、2つの値から成る64ビットの読み取り専用レジスタである。最下位の32ビットは、ファームウェアID番号であり、最上位の32ビットは、そのIDによって示される特定のファームウェアの改訂番号である。
【0075】
FPGA情報レジスタは、2つの情報、すなわち、FPGAタイプおよびFPGAサイズを含む64ビットの読み取り専用レジスタである。FPGAタイプは、FPGAのタイプを示す4つのASCII文字(32ビット)である。例えば、FPAGデバイスが、Xilinx Virtex(登録商標)−IIデバイスである場合、FPGAタイプは、「xc2v」である。FPGAサイズは、どのようなサイズのFPGAが使用されているかを示す32ビットの整数である。例えば、FPGAデバイスが、Xilinx Virtex(登録商標)−II 4000である場合、FPGAサイズは、4000である。FPGAタイプは、FPGA情報レジスタの最下位の32ビットであるのに対して、FPGAサイズは、レジスタの最上位の32ビットである。
【0076】
デバイスステータスレジスタは、ハードウェアデバイスに接続されたハードウェアシステムについての2つの情報を含む64ビットの読み取り専用レジスタである。最下位の32ビットは、ハードウェアデバイスに接続されたハードウェアシステムのタイプを示す。以下の表4は、デバイスタイプ番号付けの例を示す。
【表4】
デバイスステータスレジスタの最上位の32ビットは、ハードウェアシステムに接続されたデバイスの数を示す整数である。
【0077】
実装されたRAMサイズは、FPGAデバイスに接続されたメモリ304の量を(キロバイト単位で)示す64ビットのレジスタである。
【0078】
ドアベルレジスタは、ドライバレベルソフトウェア204とファームウェアソケットモジュール120の間の通信のために使用されるフラグを含む64ビットの読み取り/書き込みレジスタである。ドアベルフラグ、およびこれらのフラグの機能は、以下の表5にリストアップされる。
【表5】
【0079】
実行ビットは、ドライバレベルソフトウェア204によって、実行を開始する、または再開するようファームウェアソケットモジュールに告げるのに設定される。このビットは、ハードウェアによって確認されると、ファームウェアソケットモジュールによってクリアされる。停止ビットは、ドライバレベルソフトウェア204によって、実行を停止する、または一時停止するようファームウェアソケットモジュールに告げるのに設定される。このビットは、ハードウェアによって確認されると、ファームウェアソケットモジュールによってクリアされる。リセットビットは、ドライバレベルソフトウェア204によって、ファームウェアソケットモジュール、およびFAMチェーンにおけるFAMのすべてをリセットするのに設定される。このビットは、ハードウェアによって確認されると、ファームウェアソケットモジュールによってクリアされる。フラッシュビットは、ドライバレベルソフトウェア204によって、ソフトウェアを宛先とするコマンドおよびデータを保持するファームウェアソケットモジュール上のアウトバウンドバッファをフラッシュするのに設定される。このビットは、ハードウェアによって確認されると、ファームウェアソケットモジュールによってクリアされる。ストローブデバッグビットは、デバッグ目的で使用されることが可能なビットである。クロックカウンタリセットビットは、PCI−Xバスのクロック速度を決定するために使用されるファームウェアソケットモジュールの中のカウンタをリセットする。PCI−Xバスのクロック速度は、ファームウェアソケットモジュールパラメータレジスタの上位の9ビットを読み取ることによって決定されることが可能である。
【0080】
割り込みステータスレジスタは、以下の表6にリストアップされる割り込み条件についてドライバレベルソフトウェア204に通知するのに使用される64ビットの読み込み/書き込みレジスタである。割り込み条件が設定されるといつでも、オペレーティングシステムに割り込みを行う割り込みが、PCI−Xバス上でトリガされ、ドライバレベルソフトウェア204によって応答が行われなければならない。ドライバレベルソフトウェア204が、割り込みステータスレジスタを読み取る前に、複数の割り込み条件が生じると、ソフトウェアが、割り込みステータスレジスタを読み取った際に、複数のビットが、設定される。割り込みステータスレジスタは、読み取られると、クリアされる。
【表6】
【0081】
ファームウェアソケットモジュールは、データの入力記述子バッファを読み取ろうと試みて、次の入力記述子バッファが、読み取られる準備ができていない(バッファ500の中でキュー状態にある次の入力記述子のレディビットを調べることにより)場合、割り込みビット0を設定する。割り込みビット0が、書き込まれた場合、ドライブレベルソフトウェア204は、ファームウェアソケットモジュールが、入力記述子プールバッファを再び読み取ろうと試みる前に、ドアベルレジスタの実行ビットに書き込まなければならない。
【0082】
割り込みビット1は、ファームウェアソケットモジュールへの入力として定められているデータの入力記述子を読み取る際、誤りが生じたことを知らせる。
【0083】
入力記述子プールバッファ500の割り込みフラグが、設定された場合、ファームウェアソケットモジュールは、入力データの入力記述子バッファを読み取ることを終えた後、割り込みビット2を設定する。
【0084】
ファームウェアソケットモジュールは、カーネルに出力すべきデータを有するが、次のData−to−Kernel出力記述子バッファが、利用できない(バッファ504の中でキュー状態にある次のデータ出力記述子のレディビットを調べることにより)場合、割り込みビット3を設定する。ファームウェアソケットモジュールが、この割り込みを設定すると、ドライバレベルソフトウェア204は、ファームウェアソケットモジュールが、データを再び出力しようと試みる前に、Data−to−Kernel出力記述子バッファを利用可能にした後、ドアベルレジスタの実行ビットに書き込まなければならない。
【0085】
割り込みビット4は、ファームウェアソケットモジュールが、出力記述子バッファにデータを書き込もうと試みた際に、誤りが生じたことを知らせる。
【0086】
ファームウェアソケットモジュールは、Data−to−Kernel出力記述子バッファにデータを書き込み、記述子を閉じるといつでも(すなわち、ファームウェアソケットモジュールは、データを書き込むために次のData−to−Kernel出力記述子バッファに進んでいる)、割り込みビット5を設定する。
【0087】
割り込みビット6は、ドアベルレジスタの中でフラッシュビットが設定されている場合、戻されるべき出力データが全く存在しないことを示すように定義される。
【0088】
ファームウェアソケットモジュールは、カーネルに出力すべきコマンドデータを有するが、次のCommand−to−Kernel出力記述子バッファが、利用できない(バッファ506の中でキュー状態にある次のコマンド出力記述子のレディビットを調べることにより)場合、割り込みビット7を設定する。ファームウェアソケットモジュールが、この割り込みを設定すると、ドライバレベルソフトウェア204は、ファームウェアソケットモジュールが、コマンドデータを再び出力しようと試みる前に、Command−to−Kernel出力記述子バッファを利用可能にした後、ドアベルレジスタの実行ビットに書き込まなければならない。
【0089】
割り込みビット8は、ファームウェアソケットモジュールが、コマンド出力記述子バッファにコマンドデータを書き込もうと試みた際に、誤りが生じたことを知らせる。
【0090】
ファームウェアソケットモジュールは、Command−to−Kernel出力記述子バッファにデータを書き込み、記述子を閉じるといつでも(すなわち、ファームウェアソケットモジュールは、コマンドデータを書き込むために次のCommand−to−Kernel記述子バッファに進んでいる)、割り込みビット9を設定する。
【0091】
Data−to−Cardアドレスレジスタは、Data−to−Card入力記述子プールバッファ500の先頭の物理的アドレスを示すのに使用される64ビットの読み取り/書き込みレジスタである。ドライバレベルソフトウェア204は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。
【0092】
Data−to−Cardカウントレジスタは、データを読み取るために利用可能なData−to−Card入力記述子バッファの数を示すのに使用される32ビットの読み取り/書き込みレジスタである。ドライバレベルソフトウェア204は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の32ビットが0で埋められた64ビットの値が、戻される。
【0093】
Data−to−Cardネクストレジスタは、読み取りが行われるべき次のData−to−Card入力記述子バッファに対する32ビットの読み取り/書き込みポインタである。このポインタは、ファームウェアソケットモジュールとドライバレベルソフトウェアが同期していることを確実にするのに使用される。このアドレスから読み取りが行われると、上位の32ビットが0で埋められた64ビットの値が、戻される。
【0094】
Data−to−Kernelアドレスレジスタは、Data−to−Kernel出力記述子プールバッファ504の先頭の物理的アドレスを示すのに使用される48ビットの読み取り/書き込みレジスタである。ドライバレベルソフトウェア204は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の16ビットが0で埋められた64ビットの値が、戻される。
【0095】
Data−to−Kernelカウントレジスタは、データを書き込むために利用可能なData−to−Kernel出力記述子バッファの数を示すのに使用される32ビットの読み取り/書き込みレジスタである。ドライバレベルソフトウェア204は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の32ビットが0で埋められた64ビットの値が、戻される。
【0096】
Data−to−Kernelネクストレジスタは、書き込みが行われるべき次のData−to−Kernel出力記述子バッファに対する32ビットの読み取り/書き込みポインタである。このポインタは、ファームウェアソケットモジュールとドライバレベルソフトウェアが同期していることを確実にするのに使用される。このアドレスから読み取りが行われると、上位の32ビットが0で埋められた64ビットの値が、戻される。
【0097】
Command−to−Kernelアドレスレジスタは、Command−to−Kernel出力記述子プールバッファ506の先頭の物理的アドレスを示すのに使用される48ビットの読み取り/書き込みレジスタである。ドライバレベルソフトウェア204は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の16ビットが0で埋められた64ビットの値が、戻される。
【0098】
Command−to−Kernelカウントレジスタは、コマンドデータを書き込むために利用可能なCommand−to−Kernel出力記述子バッファの数を示すのに使用される32ビットの読み取り/書き込みレジスタである。ドライバレベルソフトウェア204は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の32ビットが0で埋められた64ビットの値が、戻される。
【0099】
Command−to−Kernelネクストレジスタは、書き込みが行われるべき次のCommand−to−Kernel出力記述子バッファに対する32ビットの読み取り/書き込みポインタである。このポインタは、ファームウェアソケットモジュールとドライバレベルソフトウェアが同期していることを確実にするのに使用される。このアドレスから読み取りが行われると、上位の32ビットが0で埋められた64ビットの値が、戻される。
【0100】
パラメータレジスタは、ファームウェアソケットモジュールの中のプログラミング可能なパラメータを設定するのに使用される64ビットのレジスタである。以下の表7に示される通り、これらのパラメータのいくつかは、読み取り/書き込みであるのに対して、他のパラメータは、読み取り専用である。
【表7】
【0101】
最大PCI−Xバーストサイズパラメータは、ファームウェアソケットモジュールが、PCI−Xバス112上で実行しようと試みる最大サイズトランザクションを設定するのに使用される。この最大トランザクションサイズは、パラメータレジスタの中の6ビットの値掛ける128であるが、このフィールドを0に設定することにより、最大トランザクションサイズが4096(PCI−X規格によって許される最大トランザクションサイズ)に設定される。
【0102】
パラメータレジスタのビット55は、このレジスタの上位の8ビットにおけるPCI−Xバス速度が有効であるかどうかを示すのに使用される(「1」は、有効を示し、「0」は、無効を示す)。
【0103】
パラメータレジスタの最上位の8ビットは、PCI−Xバスの計算速度をMHz単位で示す。バス速度有効ビット(ビット55)も、この値が有効であるか否かを確認するのに読み取られなければならない。PCI−Xバス速度値が、有効ではない場合、ドライバレベルソフトウェアは、短い時間、待ち、この値を再び読み取らなければならない。
【0104】
前述した通り、ファームウェアソケットモジュールとドライバレベルソフトウェア204の間の通信は、3つの記述子セット、すなわち、1つの入力記述子プールと、2つの出力記述子プール(1つは、コマンドに関し、他方は、データに関する)とを使用して行われる。各プールは、記述子バッファ(カーネルバッファ)についての情報を有するフラグおよびフィールドを含む独自の記述子セットを有する。
【0105】
各記述子は、好ましくは、以下の表8に示される通り、それぞれの8バイトの4つの部分に分割される32バイト長である。すなわち、
【表8】
【0106】
フラグフィールドは、以下の表9に示される通り、記述子バッファについての情報を含む64ビットのフィールドである。
【表9】
【0107】
ビジービットは、ドライバレベルソフトウェア204によって、記述子バッファが使用中であることを示すのに設定される。
【0108】
コマンド/データビットは、バッファが、コマンド情報またはデータを含むかどうかをファームウェアソケットモジュールに告げるのに使用される。バッファが、コマンド情報を含む場合、このビットは、設定されなければならず、含まない場合、このビットは、クリアされなければならない。ファームウェアソケットモジュールは、Data−to−Card入力記述子バッファ上で、このビットを読み取り、そのバッファの中のすべてのデータに適切にマークを付ける(コマンドまたはデータとして)。
【0109】
Data−to−Kernelビットは、バッファの中のデータが、ドライバレベルソフトウェア204(カーネル)を宛先としているか否かを示す。このビットが設定されている場合、データは、カーネルを宛先として、ファームウェアソケットモジュールから出力される。ファームウェアソケットモジュールが、このビットを設定することを担う。このビット、またはData−to−Cardビットが常に設定されなければならないが、両方が設定されることは決してない。
【0110】
Data−to−Cardビットは、バッファの中のデータが、ファームウェアソケットモジュール(カード上に配備された)を宛先としているかどうかを示す。このビットが設定されている場合、データは、ドライバレベルソフトウェア204からファームウェアソケットモジュールに入力される。ドライバレベルソフトウェア204は、このビットを設定することを担う。このビット、またはData−to−Kernelビットが常に設定されなければならないが、両方が設定されることは決してない。
【0111】
レディビットは、ドライバレベルソフトウェア204によって、バッファが、ファームウェアソケットモジュールによって使用される準備ができていることを示すのに設定される。ファームウェアソケットモジュールは、そのバッファを処理する際、このビットをクリアしなければならない。
【0112】
完了ビットは、ファームウェアソケットモジュールによって、ファームウェアソケットモジュールが、そのバッファを処理することを完了したことをドライバレベルソフトウェア204に示すのに設定される。ドライバレベルソフトウェア204は、そのバッファをクリーンアップすることを終えると、このビットをクリアしなければならない。
【0113】
割り込みビットは、ドライバレベルソフトウェアによって、ファームウェアソケットモジュールが、このバッファを処理した後、Data−to−Card記述子バッファ完了割り込みを使用して割り込みを行うよう、ファームウェアソケットモジュールに命令するのに設定される。
【0114】
バイトカウントフィールドは、バッファに関するバイトカウントを含む64ビットのフィールドである。このバイトカウントの意味は、入力記述子バッファに関するのと、出力記述子バッファに関するのとで異なる。Data−to−Card入力記述子バッファの場合、このバイトカウントフィールドは、バッファの中に含まれるデータのバイト数である。ファームウェアソケットモジュールは、入ってくるバイトカウントに関して20ビットだけしか使用せず、このため、ファームウェアソケットモジュールが扱うことができる最大のData−to−Cardバッファは、(1MB−1)バイトである。このバイトカウント値は、ドライバレベルソフトウェア204によって設定されなければならない。Data−to−Kernel出力記述子バッファ、およびCommand−to−Kernel出力記述子バッファの場合、このバイトカウントは、ドライバレベルソフトウェア204によって、バッファの中でどれだけのバイトが、書き込みのために利用可能であるかを示すように最初に設定される。ファームウェアソケットモジュールが、バッファ上で完了ビットを設定する際、ファームウェアソケットモジュールは、バッファに書き込まれる実際のバイト数で、このバイトカウントの更新も行わなければならない。このバイトカウントも、最大で(1MB−1)バイトである。
【0115】
物理的アドレスフィールドは、メインメモリの中のカーネルバッファの物理的アドレスを含む64ビットのフィールドである。このフィールドは、ドライバレベルソフトウェア204によって設定される。好ましくは、ファームウェアソケットモジュールは、48ビットで表されることが可能な物理的アドレスだけを扱う。
【0116】
仮想アドレスフィールドは、カーネルバッファの仮想アドレスを含む64ビットのフィールドであり、ドライバレベルソフトウェア204だけによって使用される。
【0117】
動作の際、ファームウェアソケットモジュールは、ファームウェアソケットモジュールのドアベルレジスタ上で実行信号を受け取ると、バッファ500の中のData−to−Card入力記述子を読み取り、準備ができていないバッファから読み取ろうと試みるまで、またはファームウェアソケットモジュールによって保持される出力FIFOの中にコマンド情報またはデータが存在するまで、読み取り続ける。
【0118】
ファームウェアソケットモジュールは、好ましくは、出力のためのコマンド情報に最高の優先順位を与える。出力のためのコマンド情報が存在する場合、ファームウェアソケットモジュールは、その情報を、利用可能なCommand−to−Kernel出力記述子バッファ506に出力する。そのようなバッファ506が、利用できない場合、ファームウェアソケットモジュールは、Command−to−Kernel出力記述子バッファ満杯割り込みを発行する。すると、ファームウェアソケットは、ドアベルレジスタの中の実行ビットに、ドライバレベルソフトウェア204によって、バッファ506が利用可能にされたことを示すように書き込みが行われるまで、バッファ506にコマンド情報を再び出力しようとしない。
【0119】
ファームウェアソケットモジュールは、好ましくは、出力のためのデータに、2番目に高い優先順位を与える。ファームウェアソケットモジュールの出力FIFOの中のデータの量が、最大PCI−Xバーストサイズ以上である場合、ファームウェアソケットモジュールは、利用可能なData−to−Kernel出力記述子バッファ504にデータを出力する。次のData−to−Kernelバッファ504が、利用できない場合、ファームウェアソケットモジュールは、Data−to−Kernel出力記述子バッファ満杯割り込みを通知する。すると、ファームウェアソケットモジュールは、ドアベルレジスタの中の実行ビットに、ドライバレベルソフトウェア204によって、バッファ504が利用可能にされたことを示すように書き込みが行われるまで、バッファ504にデータを再び出力しようとしない。
【0120】
ファームウェアソケットモジュールは、好ましくは、入ってくるデータまたはコマンドに最低の優先順位を与える。次のData−to−Card入力記述子バッファ500が、利用できない場合、ファームウェアソケットモジュールは、Data−to−Card入力記述子バッファ空割り込みを通知する。ファームウェアソケットモジュールは、ドアベルレジスタの中の実行ビットに、ドライバレベルソフトウェア204によって書き込みが行われて、バッファ500が満たされたことを示すまで、次のバッファ500を読み取ろうとしない。
【0121】
また、ファームウェアソケットモジュールは、好ましくは、ネクストポインタが、カウントに到達するまで、バッファ500、504、および506を順に処理することを続け、到達した時点で、ネクストポインタは、第1のバッファにリセットされる。
【0122】
図6aは、インバウンドのデータおよびコマンドが、システム100によってどのように処理されることが可能であるかの例を示す。図6aの入力記述子プールバッファ500は、複数の記述子を格納し、これらの記述子は、コマンドおよびターゲットデータが格納されたメモリ空間502内のアドレスに対するポインタを含む。この例において、ポインタ1は、データストリームの中で「Smith」という語に関する検索を実行するよう、FAMチェーン130におけるFAM#3を構成するコマンドをポイントする。他のコマンドに対するポインタは、図6aにおいて特定される。また、バッファ500は、システム100を通して処理されるべきターゲットデータをポイントする記述子も格納する(例えば、ポインタ4参照)。前述した通り、ドライバレベルソフトウェア204は、これらの記述子でバッファ500をポピュレートして、ファームウェアソケットモジュールに送られ、FAMチェーンを通して伝搬されるべきコマンドおよびデータの順序を定義する。
【0123】
図6b−図6oは、図6aの例によって定義される順序を使用する、そのような伝搬を示す。図示を簡単にするため、SDコマンドおよびEDコマンドは、バッファ500の中のターゲットデータの境界において省略されている。見て取ることができる通り、コマンドとターゲットデータの間の定義された順序は、これらのコマンドおよびデータが、FPGAを通して処理される中で、ファームウェアソケットモジュールおよびFAMチェーンによって保たれる。入力記述子バッファの中でコマンドおよびターゲットデータを適切に順序付けることにより、ソフトウェアは、強力な高速データ処理動作を実現することができる。例えば、ポインタ1−5に対応するバッファ500の中の記述子は、アドレスA+1からCまでメモリの中に格納された暗号化されたターゲットデータに対して解読動作を実行し、その後、その解読されたデータの中で、「Smith」という語の存在の検索を実行するよう効果がある。また、アドレスP+1からWまでメモリの中に格納されたデータが、暗号化された後に圧縮されているものと想定すると、ポインタ6以下に対応するバッファ500の中の記述子は、そのターゲットデータに対して伸張動作を実行し、その後、その伸張されたターゲットデータに対して解読動作を実行し、その後、解読され、伸張されたターゲットデータの中で、「Jones」という語の検索を実行するよう効果がある。また、実際には、コマンドセットに従って処理されるターゲットデータの長さは、図6a−図6oに示される例よりも相当に大きい可能性が高く、例えば、ターゲットデータの長さは、所望されるデータ処理動作の範囲に応じて、メガバイト単位、ギガバイト単位、さらにテラバイト単位(またはそれより大きい単位)のオーダでさえある可能性があることも注目に値する。
【0124】
ソフトウェアライブラリインタフェース210
FAMのアプリケーション使用をサポートするソフトウェアAPIは、好ましくは、ExegyFpgaというラベルが付けられることが可能なクラスなどの、クラスで実現される。このクラスは、好ましくは、以下の公開メソッドを含む。
【数1】
【0125】
SendCommandメソッドは、コマンドチャネルを介してファームウェアソケットモジュールおよびFAMに所与のコマンドを送る。引数「TwoChars」は、コマンドフィールド(16ビット)に入るバイトのペア(通常、ASCII文字であるが、そうである必要はない)である。誤りフィールドが、クリアされる(0に設定される)。引数「Sync」は、同期フィールド(1ビット)に入る。引数「ModuleId」は、モジュールIDフィールド(6ビット)に入る。引数「Parameter」は、パラメータフィールド(32ビット)に入る。引数「WaitForIt」は、コマンドがファームウェアから戻るまで、メソッド呼び出しがブロックすべき(WaitForItが、1である場合)か、またはブロックすべきでないか(WaitForItが、0である場合)を示すフラグである。メソッドは、誤りが生じると、間違いを戻す。
【数2】
【0126】
Writeメソッドは、所与のバッファからデータチャネルにデータを送る。メソッドは、転送されたバイト数、または「errno」の中で誤りを戻す。
【数3】
【0127】
ReadCmdメソッドは、Command−to−Kernel出力記述子バッファからコマンドを読み取り、これらのコマンドをユーザバッファに送る。このメソッドは、バッファの中に入れられたバイトを戻す。
【数4】
【0128】
Readメソッドは、Data−to−Kernel出力記述子バッファからデータを読み取り、これらのデータをユーザバッファに送る。このメソッドは、バッファに入れられたバイト、または「errno」を戻す。同期マーク(すなわち、コマンド同期ビットの結果であるNullバッファ)に遭遇すると、ENODATAが、戻される。
【0129】
ソフトウェアライブラリインタフェースの例示的な用法が、以下に示される
【数5】
【0130】
本発明を、本発明の好ましい実施形態に関連して以上に説明してきたが、本発明の範囲にやはり含まれる様々な変形が、好ましい実施形態に行われることが可能である。本発明のそのような変形は、本明細書の教示を検討することで、認識可能となろう。このため、本発明の完全な範囲は、特許請求の範囲、および特許請求の範囲の法的均等物によってだけ規定されるべきである。
【図面の簡単な説明】
【0131】
【図1】本発明を実施する好ましいシステムを示すブロック図である。
【図2】好ましいシステムのためのソフトウェアおよびファームウェアの配備に関する例示的なフレームワークを示す図である。
【図3a】本発明によるデータ処理タスクを実行するようにコンピュータシステムに実装するための好ましいプリント回路基板を示すブロック図である。
【図3b】本発明によるデータ処理タスクを実行するようにコンピュータシステムに実装するための代替のプリント回路基板を示すブロック図である。
【図4】ファームウェアソケットモジュールとファームウェアアプリケーションモジュールとの間の好ましい信号層インタフェースを示す図である。
【図5】ファームウェアソケットモジュールと、デバイスドライバによって管理されるメモリ空間との間の好ましいハードウェア/ソフトウェアインタフェースを示す図である。
【図6a】デバイスドライバによって管理される入力記述子プールバッファ−およびカーネルメモリ空間の実施例を示す図である。
【図6b】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6c】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6d】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6e】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6f】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6g】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6h】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6i】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6j】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6k】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6l】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6m】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6n】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6o】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図7】ファームウェアソケットモジュールと、異なるデータ処理動作を実行するようにそれぞれが構成された、複数のパイプライン化されたファームウェアアプリケーションモジュールとを有して構成された例示的なFPGAを示す図である。
【図8】パイプラインのファームウェアアプリケーションモジュールが、どのように複数のFPGAにまたがって配備されることが可能であるかの例を示す図である。
【技術分野】
【0001】
本発明は、ハードウェアにおける高速データ処理動作をサポートするソフトウェアを有するインタフェースハードウェアの分野に向けられる。
【背景技術】
【0002】
大量のデータを処理する際に、コンピューティングシステムのデータスループット能力を向上させる能力は、常に存在する課題である。多くの場合、汎用プロセッサによって実行されるソフトウェアを使用して大量のデータ量を処理することは、ユーザのニーズを満たすのに遅すぎる。したがって、データ処理機能を、コンピュータの汎用プロセッサによって実行されるソフトウェアを離れて、ハードウェア上に配備されたファームウェアの中に再配置すること、またはそのようなファームウェアとソフトウェアとの間でデータ処理機能を分割することが望ましい。しかし、そのようにする際、ハードウェアデバイス(再構成可能なロジックデバイスなどの)が、ハードウェアとソフトウェアの間でデータおよびコマンドフローが行き来する際に、ネックを生じないような仕方で、データストレージやコンピュータの汎用プロセッサによって実行されるソフトウェアなどの外部リソースと互いに接続される必要がある。
【0003】
本明細書で使用される、「汎用プロセッサ」という用語は、命令をフェッチして、それらの命令を実行するハードウェアデバイス(例えば、Intel Xeon(登録商標)プロセッサまたはAMD Opteron(登録商標)プロセッサ)を指す。「再構成可能なロジック」という用語は、形態および機能が、製造後にフィールドにおいて大幅に変更される(すなわち、再構成される)ことが可能な任意のロジック技術を指す。このことは、機能が、製造後に変更されることが可能であるが、形態は、製造時に固定される汎用プロセッサと対比されるべきである。「ソフトウェア」という用語は、汎用プロセッサ上に配備されたデータ処理機能を指す。「ファームウェア」という用語は、再構成可能なロジック上に配備されたデータ処理機能を指す。
【発明の開示】
【課題を解決するための手段】
【0004】
当技術分野におけるニーズに対処しようとして、本発明人らは、本明細書において、外部メモリおよびソフトウェアを有する再構成可能なロジックデバイス上に配備された少なくとも1つのファームウェアアプリケーションモジュールとインタフェースをとるファームウェアソケットモジュールのための新たな設計を開示する。また、このファームウェアソケットモジュールは、好ましくは、再構成可能なロジックデバイス上にも配備される。この少なくとも1つのファームウェアアプリケーションモジュールは、このモジュールが受け取る任意のターゲットデータに対してデータ処理動作を実行するように構成され、この少なくとも1つのファームウェアアプリケーションモジュールが実行するデータ処理動作は、ソフトウェアベースのコマンドによって制御される。好ましくは、この少なくとも1つのファームウェアアプリケーションモジュールは、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含む。パイプラインにおける各ファームウェアアプリケーションモジュールは、好ましくは、コマンド情報に関して個々にアドレス指定可能である。このため、コマンドは、パイプラインにおける特定のファームウェアアプリケーションモジュールに発行されて、それらの特定のファームウェアアプリケーションモジュールのデータ処理動作が制御されることが可能である。
【0005】
ファームウェアソケットモジュールは、外部メモリおよびソフトウェアにアクセスして、ファームウェアアプリケーションモジュールパイプラインを通して処理されるべきコマンドおよびターゲットデータを受け取るように構成される。好ましくは、ファームウェアソケットモジュールは、コンピュータシステムのメモリからファームウェアソケットモジュールへのコマンドおよびターゲットデータのDMA(ダイレクトメモリアクセス)転送を実行するようにシステムバスへトランザクションを発行する。ファームウェアソケットモジュールは、これらのコマンドおよびターゲットデータを、ソフトウェアによって規定される所定の順序でパイプラインにおけるファームウェアアプリケーションモジュールの第1のモジュールに供給するように構成される。
【0006】
ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールパイプラインは、好ましくは、システムを通してコマンドおよびターゲットデータを伝搬する際に、インバウンドのコマンドおよびターゲットデータの、この所定の順序を厳密に保つように構成される。ターゲットデータが、パイプラインにおける或るファームウェアアプリケーションモジュールに到達すると、そのファームウェアアプリケーションモジュールは、このターゲットデータに対して、指定されたデータ処理動作を実行し、その後、そのように処理されたターゲットデータを、パイプラインにおける次のファームウェアアプリケーションモジュールに供給する。コマンドデータが、パイプラインにおける或るファームウェアアプリケーションモジュールに到達すると、そのファームウェアアプリケーションモジュールは、このコマンドが、そのモジュールに向けられているかどうかを確かめ、向けられている場合、そのコマンドを解釈して、適宜、そのモジュールのデータ処理動作を再構成する。このコマンドが、パイプラインをさらに下って伝搬されるべきである場合、そのファームウェアアプリケーションモジュールは、このコマンドを、パイプラインにおける次のファームウェアアプリケーションモジュールに送る。
【0007】
ファームウェアソケットモジュールに入る、またはファームウェアアプリケーションモジュールパイプラインの入口点に入るコマンドおよびターゲットデータの流れは、コマンドとターゲットデータがともに、規定された順序に従ってインタリーブされた単一のストリームと考えられることが可能である。コマンドとデータがインタリーブされるという言い方がされる場合、このことは、コマンド/データ/コマンド/データ/コマンド/データ...というストリームを要求しない(排除しないものの)。代わりに、本明細書で説明されるコマンドとデータのインタリーブされたストリームは、コマンド/コマンド/コマンド/データ/データ/データ/データ/データ/コマンド...などのストリームを包含し、ストリームにおけるコマンドとデータの順序は、ソフトウェアによって規定され、ファームウェアソケットモジュールが、このストリームをファームウェアアプリケーションモジュールパイプラインに伝搬する際に、ファームウェアソケットモジュールによって保存される。
【0008】
ファームウェアアプリケーションモジュールのデータ処理動作を制御する適切なコマンドが、ファームウェアアプリケーションパイプラインに入るコマンドとターゲットデータのストリームの中の、そのターゲットデータに先行して、ファームウェアアプリケーションモジュールのデータ処理動作が、ターゲットデータを処理することに先立って適切に制御されることを可能にしなければならない。コマンドとターゲットデータの、この厳密な順序付けが容易に保たれることを促すのに、ファームウェアソケットモジュールは、コマンドとターゲットデータをともに、パイプラインにおける第1のファームウェアアプリケーションモジュールに、パイプラインの第1のファームウェアアプリケーションモジュールにファームウェアソケットモジュールをリンクするのと同一の通信パスを介して、供給するように構成される。
【0009】
このファームウェアソケットモジュール−ファームウェアアプリケーションモジュールパイプライン間の接続によってもたらされるコマンドとターゲットデータの間の自然な同期により、システムの複雑さが回避されるとともに、データスループットが増大する。本発明人らに知られている従来技術のソケットインタフェースにおいて、コマンドは、ターゲットデータをデータ処理モジュールに通信するのに使用される通信パスとは異なる通信パスを介して、データ処理モジュールに通信される。そのようなデータ処理モジュールが、パイプライン化されると、そのようなデュアル通信パスにより、コマンドをデータと同期しようと試みる際、管理の困難が生じる。そのような場合において、パイプラインにおけるデータ処理モジュールに新たなコマンドが発行されると、そのコマンド、およびさらなるターゲットデータが、そのパイプラインを通して処理され、それによってパイプラインのスループット能力を大きく損なう前に、パイプライン全体から、通常、以前のコマンド、および以前のデータがフラッシュされる必要がある。しかし、対照的に、本発明では、パイプラインの1つのファームウェアアプリケーションモジュールが、パイプラインにおける他のファームウェアアプリケーションモジュールが、それらのモジュールの規定されたデータ処理動作に従ってデータを同時に処理している間に、コマンドに対処することができる。このため、パイプライン全体がフラッシュされることを要求することなしに、ファームウェアアプリケーションモジュールのデータ処理動作を調整するコマンドが、ファームウェアアプリケーションモジュールに発行されることが可能である。
【0010】
コンピュータシステムの汎用プロセッサによって実行される高レベルソフトウェアが、好ましくは、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールパイプラインを通して最終的に伝搬されるコマンドとデータの順序を規定する。次に、やはりコンピュータシステムの汎用プロセッサによって実行される、より低いレベルのデバイスドライバソフトウェアが、好ましくは、コマンドとデータの、この規定された順序を保ち、そのような順序付けられたコマンドとデータをファームウェアソケットモジュールに提供する。このデバイスドライバソフトウェアは、好ましくは、コマンドおよびターゲットデータに対するポインタが格納される入力記述子プールバッファを管理することによって、この順序を保つ。ファームウェアソケットモジュールは、入力記述子プールバッファにアクセスして、ファームウェアアプリケーションモジュールパイプラインに送られるべきコマンドおよびターゲットデータについて知る。
【0011】
ファームウェアソケットモジュールのアウトバウンド側(ソフトウェアに対してアウトバウンド)で、デバイスドライバソフトウェアは、好ましくは、出力コマンドおよびアウトバウンドデータに関して別々のバッファを保持して、ファームウェアアプリケーションモジュールによって処理されたコマンドおよびデータが、コンピュータシステムソフトウェアによる後のアクセスのために、メモリの中でどこに格納されるべきかについて、ファームウェアソケットモジュールに通知する。
【0012】
本発明の好ましい実施形態が提供する利点の中には、ソフトウェアから再構成可能なロジックデバイスに、さらに再構成可能なロジックデバイスからソフトウェアに、フロー制御されたデータを確実に送る能力、およびファームウェアアプリケーションモジュールが配備されるコンピュータシステムとは独立した(ファームウェアアプリケーションモジュールが、ファームウェアソケットモジュールの通知要件を遵守する限り)ファームウェアアプリケーションモジュールを開発する能力がある。本発明のこれら、およびその他の特徴は、以下の説明および図を検討すると、一部は指摘され、一部は、当業者には明白となろう。
【発明を実施するための最良の形態】
【0013】
図1は、本発明による好ましいシステム100を示す。このシステムにおいて、再構成可能なロジックデバイス102が、ディスクコントローラ106およびデータストア104によって規定されるディスクサブシステムを離れて流れる(直接に、またはRAM110などのシステムメモリを介して間接的に)データを受け取るように位置付けられる。好ましくは、このデータは、システムバス112を介して再構成可能なロジックデバイスに流れ込むが、他の設計アーキテクチャも可能である(図3b参照)。好ましくは、再構成可能なロジックデバイスは、FPGA(フィールドプログラマブルゲートアレイ)であるが、そうでなくてもよい。また、システムバス112は、再構成可能なロジックデバイス102を、コンピュータシステムのメインプロセッサ108、ならびにコンピュータシステムのRAM110と互いに接続する。本明細書で使用される「バス」という用語は、デバイスおよびロケーションがアドレスによってアクセスされる任意の物理的相互接続を包含する論理バスを指す。本発明の実施の際に使用されることが可能なバスの例には、PCIファミリのバス(例えば、PCI−XおよびPCI−Express)、およびHyperTransportバスが含まれるが、以上には限定されない。好ましい実施形態において、システムバス112は、PCI−Xバスであることが可能であるが、そうでなくてもよい。
【0014】
データストアは、任意のデータ記憶デバイス/システムであることが可能であるが、好ましくは、何らかの形態の大容量記憶媒体である。例えば、データストア104は、Seagate(登録商標)ディスクのアレイなどの磁気記憶デバイスであることが可能である。しかし、他のタイプの記憶媒体も、本発明の実施の際に使用するのに適していることに留意されたい。例えば、データストアは、インターネットまたは何らかのLAN(ローカルエリアネットワーク)などのネットワークを介してアクセスされる1つまたは複数の遠隔データ記憶デバイスであることも可能である。
【0015】
メインプロセッサ108およびRAM110によって規定されるコンピュータシステムは、好ましくは、当業者によって理解される通り、任意の商品コンピュータシステムである。例えば、コンピュータシステムは、Intel Xeon(登録商標)システムまたはAMD Opteron(登録商標)システムであることが可能である。
【0016】
再構成可能なロジックデバイス102は、デバイス102の機能を規定するデバイス102上に配備されたファームウェアモジュールを有する。ファームウェアソケットモジュール120が、再構成可能なロジックデバイスを出入りするデータ移動要件(コマンドデータとターゲットデータの両方)を扱い、やはり再構成可能なロジックデバイス上に配備されるFAM(ファームウェアアプリケーションモジュール)チェーン130に対する一貫したインタフェースを提供する。FAMチェーン130のFAM130iが、ファームウェアソケットモジュール120からチェーン130を通して流れるターゲットデータに対して、指定されたデータ処理動作を実行するように構成される。再構成可能なロジック上に配備されることが可能なFAMの好ましい実施例が、米国特許第6,711,558号(「Associative Database Scanning and Information Retrieval」という名称の)、係属中の米国特許出願第10/153,151号(「Associative Database Scanning and Information Retrieval using FPGA Devices」という題名で2002年5月21日に出願され、2003/0018630として公開された)、公開PCT出願、WO 05/048134およびWO 05/026925(ともに、2004年5月21日に出願され、「Intelligent Data Storage and Processing Using FPGA Devices」という題名を有する)、米国特許仮出願第60/658,418号(2005年3月3日に出願され、「Biosequence Similarity Searching Using FPGA Devices」という題名を有する)、米国特許仮出願第60/736,081号(2005年11月11日に出願され、「Method and Apparatus for Performing Biosequence Similarity Searching」という題名を有する)および米国特許出願第11/293,619号(2005年12月2日に出願され、「Method and Device for High Performance Regular Expression Pattern Matching」という題名を有する)において説明されており、これらの特許文献の各文献の開示全体が、参照により本明細書に組み込まれている。例えば、FAMによって実行されることが可能である例示的なデータ処理動作の網羅的ではないリストには、データ検索動作(様々なタイプの)、データ暗号化動作(いくつかの暗号化技術および/または暗号化キーのいずれかを使用する)、データ解読動作(いくつかの解読技術および/または解読キーのいずれかを使用する)、データ圧縮動作(いくつかのデータ圧縮技術のいずれかを使用する)、データ伸張動作(いくつかのデータ伸張技術のいずれかを使用する)、およびデータ縮約動作が含まれる。
【0017】
FAMによって実行される特定のデータ処理動作は、FAMが、ファームウェアソケットモジュール120から受け取るコマンドデータによって制御/パラメータ化される。このコマンドデータは、FAM固有であることが可能であり、このコマンドが受け取られると、FAMは、受け取られたコマンドによって制御されるデータ処理動作を実行するようにFAMを構成する。
【0018】
FAMが、受け取られたコマンドによって指定されるデータ処理動作を実行するように構成されると、そのFAMは、ファームウェアソケットモジュールからそのFAMが受け取るターゲットデータに対して、そのFAMの指定されたデータ処理動作を実行する準備ができている。このため、FAMは、ターゲットデータの指定されたストリームの中で、「Smith」という語の存在を検索するように、適切なコマンドを介して構成されることが可能である。FAMが、「Smith」という語に関して、ターゲットデータストリームに対して検索動作を実行すると、FAMに、「Jones」という語を検索するようにFAMを再構成させる別のコマンドが、そのFAMに送られることが可能である。FAMは、ハードウェア速度で動作する(その結果、FAMを通るターゲットデータの高いスループットをもたらす)だけでなく、FAMは、FAMのデータ処理動作のパラメータを変更するように柔軟に再プログラミングされることも可能である。
【0019】
FAMチェーン130は、好ましくは、パイプライン化されたシーケンスに構成される、複数のFAM(ファームウェアアプリケーションモジュール)130a、130b...を含む。本明細書で使用される「パイプライン」、「パイプライン化されたシーケンス」、または「チェーン」とは、FAMの構成を指し、1つのFAMの出力が、シーケンスにおける次のFAMの入力に接続される。このパイプライン構成は、各FAMが、所与のクロックサイクル中にそのFAMが受け取るデータに対して独立に動作し、次に、そのFAMの出力を、別のクロックサイクル中に、シーケンスにおける次の下流のFAMに送ることを可能にする。
【0020】
通信パス132が、ファームウェアソケットモジュール120を、パイプライン化されたFAMの第1のFAM130aの入力に接続する。第1のFAM130aの入力は、FAMチェーン130への入口点の役割をする。通信パス134が、パイプライン化されたFAMの最後のFAM130mの出力をファームウェアソケットモジュール120に接続する。最後のFAM130mの出力は、FAMチェーン130の出口点の役割をする。通信パス132と通信パス134はともに、好ましくは、マルチビットパスである。
【0021】
図2は、図1のシステム100上のアプリケーションの配備に関する例示的なフレームワークを示す。図2の上位の3つの層は、コンピュータシステムの汎用プロセッサ108上のソフトウェアにおいて実行される機能を表す。下位の2つの層は、再構成可能なロジックデバイス102上のファームウェアにおいて実行される機能を表す。
【0022】
アプリケーションソフトウェア層200は、1名または複数名のユーザが、アプリケーションと対話して、いずれのデータ処理動作が、FAMによって実行されるべきであるかを規定し、さらに、それらのデータ処理動作が、どのようなターゲットデータに対して実行されるべきであるかを規定するタイプの機能などの、高レベル機能に対応する。
【0023】
次の層は、高レベルモジュールAPI202aと、低レベルモジュールAPI202bとを含むモジュールAPI(アプリケーションプログラミングインタフェース)層202である。高レベルモジュールAPI202aは、アプリケーションレベルソフトウェアに一般的なサービス(例えば、呼び戻しを管理すること)を提供することができる。低レベルモジュールAPI202bは、OS(オペレーティングシステム)レベル/デバイスドライバソフトウェア204の動作を管理する。ソフトウェアライブラリインタフェース210が、高レベルモジュールAPI202aを低レベルモジュールAPI202bに結び付ける。このソフトウェアライブラリインタフェースについての詳細は、後段で提供される。
【0024】
デバイスドライバソフトウェア204とファームウェアソケットモジュール120との間のインタフェースは、システム100に関するハードウェア/ソフトウェアインタフェース212の役割をする。このインタフェース212の詳細は、図5に関連して、より詳細に説明される。
【0025】
ファームウェアソケットモジュール120と、FAMチェーン130との間のインタフェースは、ファームウェアモジュールインタフェース214である。このインタフェースの詳細は、図4に関連して、より詳細に説明される。
【0026】
図3aは、商品コンピュータシステムのPCI−Xバス112に接続されることが可能なプリント回路基板またはプリント回路カード300を示す。図3aの例において、プリント回路基板は、メモリデバイス304およびPCI−Xバスコネクタ306と通信するFPGA302(Xilinx Virtex(登録商標) II FPGAなどの)を含む。好ましいメモリデバイス304は、SRAMメモリとDRAMメモリとを含む。好ましいPCI−Xバスコネクタ306は、標準のカードエッジコネクタである。
【0027】
図3bは、プリント回路基板/カード300に関する代替の構成を示す。図3bの例において、プライベートバス308(PCI−Xバスなどの)、ディスクコントローラ310、およびディスクコネクタ312も、プリント回路基板300上に実装される。SCSI、SATA、FC(Fibre Channel)などを含むが、以上には限定されない、任意の商品ディスク技術が、サポートされることが可能である。この構成において、ファームウェアソケット120は、PCI−X−PCI−X間ブリッジの役割もして、プライベートPCI−Xバス308を介して接続されたディスクへの通常のアクセスをプロセッサ108に与える。
【0028】
図3aまたは図3bの構成において、ファームウェアソケット120は、PCI−Xバスにメモリ304をアクセス可能にすることができ、その結果、メモリ304が、ディスクコントローラからFAMへの転送のためのバッファとしてOSカーネル204によって使用されることが可能になることは、注目に値する。また、単一のFPGA302が、図3aおよび図3bのプリント回路基板上に示されているが、複数のFPGAが、プリント回路基板300上の複数のFPGAを含めること、またはコンピュータシステムに複数のプリント回路基板300を実装することによって、サポートされることが可能であるものと理解されるべきことも注目に値する。図8は、単一のパイプラインにおける多数のFAMが、複数のFPGAにまたがって配備される例を示す。
【0029】
図1−図3に示される通り、インバウンドデータ(カーネル204からカード300への)が、コンピュータシステム内のバス112をわたってファームウェアソケットモジュール120まで移動され、次に、ファームウェアソケットモジュール120によってFAMチェーン130に送られる。アウトバウンドデータ(カード300からカーネル204への)が、FAMチェーン130からファームウェアソケットモジュール120に送られ、次に、ファームウェアソケットモジュール120によって、PCI−Xバスをわたって、コンピュータシステム上で実行されるソフトウェアアプリケーションに送られる。図2に示される通り、使用される3つの対話するインタフェースは、ファームウェアモジュールインタフェース214、ハードウェア/ソフトウェアインタフェース212、およびソフトウェアライブラリインタフェース210である。
【0030】
ファームウェアモジュールインタフェース214−信号層
図4に示されるファームウェアモジュールインタフェース214は、ファームウェアソケットモジュール120間で交換される信号、およびFAMチェーン130内のFAM間で交換される信号を含む。表1、および後段の説明が、これらの信号をさらに説明する。
【表1】
この表における信号方向エントリは、ファームウェアモジュールの見地からリストアップされる。このため、信号(4)から(8)まで(「data_in」、「data_cnt_in」、[data_vld_in]、「ctrl_vld_in」、および「wait_upstrm」)は、上流のファームウェアモジュール(例えば、通信パス132)に対するインタフェース信号を含む。信号(9)から(13)まで(「data_out」、「data_cnt_out」、「data_vld_out」、「ctrl_vld_out」、および「wait_dnstrm」)は、下流のファームウェアモジュール(例えば、通信パス134)に対するインタフェース信号を含む。
【0031】
信号「clk」は、ファームウェアソケットモジュールおよびFAMチェーンをクロック制御するのに使用される1ビットの入力信号である。
【0032】
信号「reset」は、ファームウェアソケットモジュールおよびFAMチェーンを起動時の状態にリセットするのに使用される1ビットの入力信号である。
【0033】
信号「module_ID」は、各ファームウェアモジュールに、FAMチェーンにおけるそのモジュールの位置を知らせる6ビットの入力バスである。
【0034】
信号「data_in」は、ターゲットデータおよびコマンドデータをFAMチェーンに転送するのに使用される64ビットのバスである。注目すべきこととして、データとコマンドの両方を転送するのに同一のバスを使用することにより、コマンドとターゲットデータの間の同期が、ほとんど複雑さなしに保たれることが可能である。
【0035】
信号「data_cnt_in」は、入力バス「data_in」上の8バイトのうちどれだけが、意味のあるデータを表すかを決定するのに使用される3ビットのバスである。好ましくは、1−7という値は、文字どおり解釈され、0という値は、8バイトすべてが有効であることを意味する。
【0036】
信号「data_vld_in」は、「data_in」バス上、および「data_cnt_in」バス上のデータが、所与のクロックサイクル上で有効であることを示すのに使用される1ビットの入力信号である。
【0037】
信号「ctrl_vld_in」は、「data_in」バス上のデータが、所与のクロックサイクル上で有効なコマンド(制御)情報であることを示すのに使用される1ビットの入力信号である。同一のFAMに入る「ctrl_vld_in」信号と「data_vld_in」信号は、同時にアサートされてはならないことは注目に値する。
【0038】
信号「wait_upstrm」は、現在のファームウェアモジュールにデータをプッシュすることを停止するように上流のファームウェアモジュールに告げるのに使用される1ビットの出力信号である。好ましくは、ファームウェアモジュールは、待機がアサートされた後、2つのデータ値を吸収するように構成される。
【0039】
信号「data_out」は、所与のFAMからデータとコマンドの両方を転送するのに使用される64ビットの出力バスである。この場合も、データとコマンドの両方を転送するのに同一のバスが使用されるため、コマンドとターゲットデータの間の同期は、各FAMが、受け取られたコマンドおよびターゲットデータに対して動作するので、FAMチェーンを通して保たれることが可能である。
【0040】
信号「data_cnt_out」は、出力バス「data_out」上の8バイトのうちどれだけが、意味のあるデータを表すかを決定するのに使用される3ビットバスである。好ましくは、1−7という値は、文字どおり解釈され、0という値は、8バイトすべてが有効であることを意味する。
【0041】
信号「data_vld_out」は、「data_out」バス上、および「data_cnt_out」バス上のデータが、所与のクロックサイクル上で有効であることを示すのに使用される1ビットの出力信号である。
【0042】
信号「ctrl_vld_out」は、「data_out」バス上のデータが、所与のクロックサイクル上で有効なコマンド(制御)情報であることを示すのに使用される1ビットの出力信号である。同一のFAMから出る「ctrl_vld_out」信号と「data_vld_out」信号は、同時にアサートされてはならないことは注目に値する。
【0043】
信号「wait_dnstrm」は、ファームウェアソケットモジュールまたは下流のモジュールが、その時点でデータを吸収することができないことをFAMに示すのに使用される1ビットの入力信号である。好ましくは、「wait_dnstrm」がディアサートされるまで、そのFAMからそれ以上データが送り出されてはならない。
【0044】
FAMチェーンにおけるいくつかの隣接するFAMは、FAMサブセットを形成することが可能であり、このFAMサブセットは、独自の入口点と出口点とを有することは注目に値する。そのような事例において、前掲の表において説明される信号インタフェースは、このFAMサブセットの入口点および出口点に関して保持されるが、異なる通知インタフェースが、オプションとして、FAMサブセットのFAM間において内部で使用されることも可能である。また、FAM自体、ファームウェアアプリケーションサブモジュールのチェーンから成ることが可能であり、これらのサブモジュール間の通信は、オプションとして、前掲の表において説明されるのとは異なる通知インタフェースに従うことも可能であることも注目に値する。
【0045】
ファームウェアモジュールインタフェース214−論理層
前述した通り、64ビットの「data_in」バス上、および64ビットの「data_out」バス上のファームウェアモジュールインタフェースを介して伝送される情報は、アプリケーションデータまたはコマンド(制御)情報であることが可能である。ファームウェアソケットモジュール120と個々のFAM130iはともに、コマンドとデータの順序付けを保ち、したがって、この順序は、FAMチェーン全体にわたって保たれる。データである、「data_in」バスおよび「data_out」バスに沿ってチェーンを下って流れる情報(ファームウェアソケットモジュールからチェーンにおける第1のFAMに、1つのFAMから次の下流のFAMに、チェーンにおける最終のFAMからファームウェアソケットモジュールに)は、データチャネルと呼ばれる。コマンド(制御)情報である、「data_in」バスおよび「data_out」バスに沿ってチェーンを下って流れる情報は、コマンドチャネルと呼ばれる。コマンドチャネルを介して伝送されるコマンドは、通常、消費されないが、解釈されて(適宜)、下流のモジュールに送られる。この結果、コマンドチャネルに入る多くのコマンドは、ソフトウェアに送り返されもする。
【0046】
コマンドチャネル上で、個々のコマンドに関する好ましいフォーマットは、コマンドが、以下のフィールドを有する64ビット長を有することである。すなわち、コマンド(16ビット)、誤り(1ビット)、同期(1ビット)、予約済み(8ビット)、モジュールID(6ビット)、およびパラメータ(32ビット)である。
【0047】
コマンドフィールドは、好ましくは、2つのASCII文字(例えば、「QY」が、クエリコマンドであることが可能である)として符号化されるが、そうである必要はなく、任意の16ビットの値が、有効である。コマンドチャネルに入ると、誤りビットは、クリアである。任意のモジュールが、その後、適宜、誤りビットを設定することができ、次に、誤りビットは、コマンドが、FAMチェーンおよびファームウェアソケットモジュールを抜けると、ソフトウェアに戻るように通信される。同期ビットは、好ましくは、アウトバウンドのコマンドおよびデータの同期を、コマンドおよびデータがソフトウェアに戻る途中に制御するように設定される。
【0048】
モジュールIDフィールドは、そのコマンドに応答すべき特定のファームウェアモジュールを特定する。好ましくは、モジュールIDに関する0という値は、すべてのモジュールが、そのコマンドに応答すべきことを意味する(FAMのすべてだけでなく、ファームウェアソケットモジュールも含む)。また、モジュールIDに関する1という値は、ファームウェアソケットモジュールを除くすべてのモジュールが、そのコマンドに応答すべきことを意味することが好ましい。好ましくは、2というモジュールID値は、ファームウェアソケットモジュールだけのために取っておかれ、3以上のモジュールID値は、特定のFAMに向けられる。各FAMは、ファームウェアモジュールインタフェースの信号層に関連して説明される入力信号module_IDのお陰で、そのFAM自らのモジュールID値を知る。
【0049】
ファームウェアモジュールインタフェースに関する好ましいグローバルコマンドには、リセットコマンド、クエリコマンド、クエリ応答コマンド、パススルーコマンド、データ開始コマンド、およびデータ終了コマンドが含まれる。
【0050】
リセットコマンド(RS)は、コマンドのモジュールIDフィールドによって示される通り、FAMチェーン全体、または個々のFAMをリセットするように動作する。好ましくは、このパラメータフィールドは、このコマンドに関して使用されない。
【0051】
クエリコマンド(QY)は、モジュールにクエリを行って、モジュールの現在の状態を評価するように動作する。モジュールは、1つまたは複数のクエリ応答(QR)コマンドで応答しなければならない。モジュールが、そのモジュールのクエリ応答で応答した後、そのモジュールは、元のQYコマンドを、チェーンにおける次のモジュールに送る。好ましくは、パラメータフィールドは、このコマンドに関して使用されていない。
【0052】
モジュールが、QYコマンドを受け取ると、1つまたは複数のクエリ応答コマンド(QR)が、モジュールによって生成される。クエリ応答を受け取ると、FAMは、その応答を単に下流に転送する。好ましくは、QRコマンドに関するパラメータフィールドは、モジュール固有であり、この32ビットのフィールドは、2つのサブフィールド、すなわち、どのようなタイプの情報が送られているかを示すタグである最上位の8ビット、および所与のタグに関連するデータである最下位の24ビットに分割される。
【0053】
パススルーコマンド(PS)は、モジュールが、データを、変更なしにパススルーすべきか、または通常のデータ処理動作を実行すべきかをモジュールに知らせる。パススルーモードは、コマンド処理またはコマンド転送に影響を与えず、このモードの影響は、データチャネルに対してだけに限られる。好ましくは、パラメータフィールドの最下位ビット(ビット0)が、パススルーモードをイネーブル/ディセーブルにし、1というパススルービット値が、パススルーモードをイネーブルにし、0というパススルービット値が、パススルーモードをディセーブルにする。
【0054】
データ開始コマンド(SD)は、データストリームの開始に(通常、フィールド境界上に)マークを付けるのに使用される。データ終了コマンド(ED)は、データストリームの終了に(この場合も、通常、フィールド境界上に)マークを付けるのに使用される。SDコマンドおよびEDコマンドに関するパラメータフィールドは、好ましくは、使用されないが、一部の事例において、パラメータフィールドは、ファイルIDまたはフレームIDを指定するのに使用されることが可能である。
【0055】
FAMチェーンを通るコマンド伝搬は、好ましくは、以下の通り進む。すなわち、(1)グローバルコマンド(モジュールID値が0または1であるコマンド)が、FAMチェーンにおける各FAMによって順方向に伝搬され、(2)FAMは、モジュールID値が、異なるFAMのために設定されているコマンドを順方向に伝搬し、(3)FAMは、同期ビットが設定されているコマンドを順方向で伝播する。
【0056】
ファームウェアソケットモジュールに固有である、またはそうである可能性がある好ましいコマンドには、データカウントコマンド、リセットコマンド、およびクエリ応答コマンドが含まれる。
【0057】
データカウントコマンド(DC)は、ファームウェアソケットモジュールが前回にリセットされて以来、どれだけのデータが、FAMチェーンを通過したかをファームウェアソケットモジュールに尋ねるのに使用されることが可能である。ファームウェアソケットモジュールに1つのDCコマンドが送信されることは、3つのDCコマンドが戻されることをもたらす。最初の応答のDCコマンドは、FAMチェーンに入ったバイト数を特定する。第2番の応答のDCコマンドは、FAMチェーンを出たデータのバイト数を特定する。第3番の応答のDCコマンドは、戻される元の送られたDCコマンドである。好ましくは、SDコマンドまたはRSコマンドは、データカウントをリセットするように動作する。パラメータフィールドに関して、送られるDCコマンドのパラメータフィールドは、好ましくは、無視されるのに対して、応答のDCコマンドのパラメータフィールドは、好ましくは、前述した通り、関係のあるバイト数を特定する。
【0058】
RS(リセットコマンド)フォーマットについては、グローバルコマンドに関連して前段で説明した。ファームウェアソケットモジュールは、RSコマンドを受信すると、好ましくは、FAMチェーン全体をリセットし、さらに、あらゆる入力キューおよび出力キューをクリアする。ファームウェアソケットモジュールによってカードから戻されていない可能性があるデータは、RSコマンドによってクリアされ、このため、アプリケーションは、ファームウェアソケットモジュールにリセットコマンドを送信する前に、予期されるすべてのデータを受信していることを確実にしなければならない。このことは、同期ビットセットを有するコマンドを送ること、またはファームウェアソケットモジュールのドアベルレジスタの中のフラッシュビットのストロービングを行うことによって達せられることが可能である。
【0059】
また、クエリ応答コマンド(QR)フォーマットについても、グローバルコマンドに関連して前段で説明した。好ましくは、ファームウェアソケットモジュールが、QRコマンドを発行すると、ファームウェアソケットモジュールのパラメータフィールドは、以下の表2の中で以下の通り設定される。すなわち、
【表2】
【0060】
FAMに固有であるコマンドは、各FAMのデータ処理動作に応じて変化する。例えば、ターゲットデータのストリームとパターンがマッチングされる検索動作を実行するように構成されたFAMに適用可能なコマンドのセットには、好ましくはデータストリームの検索が照らし合わせて行われるパターンを定義するコマンド、パターンとの一致が、データストリームの中で見つかった場合に、データストリームからどれだけのコンテキストが戻されるべきか(例えば、データストリーム内の一致の前と後のXバイトを戻す)を特定するコマンド、所与のパターンに関して許されるミスマッチの数を定義するコマンド(例えば、パターンが、長さ10である場合、Kというミスマッチ値は、10のパターン文字のいずれか(10−K)が、データストリーム内で一致した場合に、一致が生じることを許す)、マッチが宣言されるのに、パターンの中のいずれのビットが、データストリームの中で一致を見出さなければならないかを定義するコマンド、検索されるべきデータ内のファイルを定義するコマンド、および検索されなければならないファイル内のデータのサブセットを定義するコマンドが含まれる。そのようなコマンドのパラメータフィールド、またはオプションとして、他のフィールドが、FAMによって実行されるパターンマッチング動作の、これらの態様を定義するのに使用されることが可能である。また、パターンマッチング動作を実行するように構成されたFAMからのQRコマンドは、好ましくは、値が、FAMタイプの識別、FAMタイプのバージョンの識別、FAMタイプのビルドの識別、およびFAMによってサポートされるパターンの数の識別に対応するタグで応答する。
【0061】
別の例として、暗号化動作または解読動作を実行するように構成されたFAMに適用可能なコマンドのセットには、好ましくは、暗号化/解読動作において使用されるべきキーを特定するコマンドが含まれる。
【0062】
FAMによって実行されることが可能な前段でリストアップされる他のデータ処理動作に加え、可能なデータ処理動作には、固定長のレコードを取り込み、選択されているレコードのバイトだけを送るフィールド選択動作(そのようなFAMへのコマンドは、いずれのバイトが選択されるべきかを示す)、サイズが、FAMを通して処理されるデータサイズ(本明細書で説明される好ましい実施例において8バイト)の倍数ではないレコードにパディングを追加するレコードゲート動作(そのようなFAMへのコマンドは、所望されるレコードサイズを示す)、レコードからパディングバイトを除去する逆レコードゲート動作(そのようなFAMへのコマンドは、除去されるべきレコードのバイト数を示す)、および1つまたは複数のパターンに対する一致を、固定長のレコードの指定された列境界内で検索するレコード選択動作(コマンドが、前述したパターンマッチングコマンドと同様であるが、指定された列境界内で行われる検索を制限するのに、レコードがどのようにマスクされるかを特定するコマンドも含む動作)も含まれる。
【0063】
好ましくは、FPGA上に配備されるFAMは、1つのタイプのデータ処理動作を実行することに専用であり、コマンド信号は、そのタイプのデータ処理動作の特定の態様を定義するように作用する。例えば、図7に示される通り、FAMチェーンにおける各FAMは、或るタイプのデータ処理動作に専用であり、例えば、第1のFAMは、伸張動作を実行するように構成され、第4番のFAMは、1つのタイプの検索動作を実行するように構成され、第5番のFAMは、別のタイプの検索動作を実行するように構成され、最後から2番目のFAMは、暗号化動作を実行するように構成される。適切なコマンドを通して、各FAMのデータ処理動作の詳細が、制御されることが可能である(例えば、「Smith」という語を検索するように第4番のFAMを構成する、またはキーAを使用して暗号化動作を実行するよう最後から2番目のFAMを構成する)。FAMが、異なるタイプのデータ処理動作を実行するように完全に再プログラミングされるべき場合、FPGAが、この目的を達するように再構成されることが好ましいが、そのように行われる必要はない。
【0064】
さらに、FAMチェーンにおける各FAMを適切にオンまたはオフにすることにより、特化された処理動作が、FAMチェーンによって達せられることが可能である。例えば、データが、暗号化されたフォーマットで格納される所与のパターンに関してデータストリーム内で検索を実行するのに、(1)検索FAMの1つをオンにし、そのFAMを、その所与のパターンを使用して構成し、(2)解読FAMをオンにし、そのFAMを、データストリームを解読する適切なキーを使用して構成し、(3)チェーンにおける他のすべてのFAMをオフにするコマンドが、FAMチェーンに送られることが可能である。そのような事例において、暗号化されたデータストリームは、第2番のFAMによって解読され、解読されたデータストリームは、その所与のパターンに関して検索FAMの1つによって検索される。
【0065】
ハードウェア/ソフトウェアインタフェース212
好ましくは、ファームウェアソケットモジュールは、ドライバレベルシステムソフトウェア204と連携して使用される場合、システムのメモリ空間に/からデータを転送するバックエンドを有するXilinx(登録商標) PCI−Xを使用する。このバックエンドインタフェースの性質について、本明細書でより詳細に説明する。
【0066】
Xilinx(登録商標) PCI−X Core Version 5.0は、PCI−X規格によって説明されているインタフェースから、Xilinx(登録商標) LogiCore PCI−X Design Guide Version 5.0およびXilinx(登録商標) LogiCore PCI−X Implementation Guide Version 5.0によって説明されているXilinx(登録商標)によって設計されたインタフェースへの変換を扱う。好ましくは、構成パラメータは、PCI−X接続プリント回路基板300が、64ビットおよび133MHz対応であることを示すように設定される。システムBIOSが、デバイスの速度を100MHzに設定するか、または133MHzに設定するかは、133MHz能力ビット、ならびにPCIXCAPピン上の物理的電圧および時間遅延に依存する。FPGA302上に配備されたモジュールが、100MHzだけで実行される場合、PCIXCAPピンは、このことを示すように設定されなければならない。また、PCI−X構成は、3つまでの64ビットBAR(ベースアドレスレジスタ)、または6つまでの32ビットBARを使用するように設定されることが可能である。好ましくは、ファームウェアソケットモジュール120は、64ビットBARとして構成された第1のBARを使用して、デバイスドライバソフトウェア204との通信のためにモジュール120のデバイスレジスタをマップする。
【0067】
ファームウェアソケットモジュール120とデバイスドライバソフトウェア204の間の通信の大部分は、好ましくは、3つの記述子プールセットを介して行われる。図5に示される通り、これらの記述子プールに関するバッファは、カーネル−カード入力記述子プールバッファ500、データに関するカード−カーネル出力記述子プールバッファ504と、コマンドに関するカード−カーネル出力記述子プールバッファ506とを含む。これらの記述子プールバッファは、好ましくは、OSカーネル/デバイスドライバソフトウェア204によって管理されるメモリ空間の中(例えば、RAM110内)に存在する。バッファ500、504、および506の中の各エントリは、記述子を含み、各記述子は、そのバッファ内の複数のアドレスにわたることが可能である。
【0068】
後段で説明されるバイトカウントフィールドおよび他のフラグに加え、記述子はそれぞれ、好ましくは、ソフトウェアからハードウェアへの(入力記述子に関する)、またはハードウェアからソフトウェアへの(出力記述子に関する)データ移動に関するメモリロケーションの物理アドレスおよび仮想アドレスを含む。このため、記述子プールバッファの中のエントリは、ファームウェアソケットモジュールが、データを読み取る、またはデータを書き込む位置へのポインタの役割をする。
【0069】
ファームウェアソケットモジュールが、データ(コマンドとターゲットデータの両方)を読み取る/書き込むメモリ空間502は、コンピュータシステム、およびコンピュータシステムに接続された物理的にアドレス指定可能な任意のデータ記憶デバイスの物理的アドレス空間内の任意のメモリであることが可能である。このため、メモリ空間502は、コンピュータシステムのマザーボード(例えば、RAM110)に限定される必要がない。例えば、カードのメモリ304が、ドライバレベルソフトウェア204に利用可能にされた場合、コマンドおよびターゲットデータを格納するためのメモリ空間502は、メモリ304を含むことが可能である。また、メモリ空間502は、データストア104内、または他の何らかのシステム接続された記憶デバイス内のアドレスを、データストア104、またはそのような記憶デバイスのアドレス空間が、ドライバレベルソフトウェアに利用可能にされた場合(例えば、データストア104に関するディスクコントローラ106を介して)、含むことが可能である。
【0070】
ハードウェア/ソフトウェアインタフェース212に関する好ましい通常の動作は、以下の通りである。すなわち、
1)ソフトウェアデバイスドライバ204が、FAMに送られるべきコマンドおよびデータを、メモリ空間502の中のバッファのセットの中に入れる。好ましくは、ドライバレベルソフトウェア204は、再構成可能なロジックデバイスを介してストリーミングされるべきターゲットデータを、メモリ空間502の隣接するアドレスの中に単一のセットとして格納し、これにより、ターゲットデータがFPGAに読み込まれることが可能な速度が向上するだけでなく、そのような隣接して格納されたターゲットデータをポイントする連続する記述子が、場合により、記述子のバイトカウントフィールドを適切に更新することによって、より少ない記述子に集約されることが可能であるという点で、柔軟性をもたらしもする。
2)デバイスドライバ204が、次に、メモリ空間502内のバッファの内容についてファームウェアソケットモジュールに知らせる入力記述子を構築する。好ましくは、1つの記述子は、ターゲットデータのMバイトの各コマンドまたは各セグメントに関して使用され、Mのサイズは、様々な要因に応じて可変である。Mのサイズは、デフォルトで32キロバイトにされることが可能である。しかし、前述した通り、この値は、依然として、各記述子に関するカードを介して大量のデータを移動しながら、バッファセットアップ、記述子管理などに関連するプロセッサオーバヘッドを最小限に抑える要望を考慮して、ソフトウェアによって可変であることが可能である。また、デバイスドライバ204は、好ましくは、FAMから戻ってくるデータおよびコマンドをどこに置くかをファームウェアソケットモジュールに告げる出力記述子を構築する。入力記述子は、デバイスドライバ204によって、入力記述子プールバッファ500の中に格納される。データに対応する出力記述子は、デバイスドライバ204によって、出力記述子プールバッファ504の中に格納され、コマンドに対応する出力記述子は、デバイスドライバ204によって、出力記述子プールバッファ506の中に格納される。
3)デバイスドライバ204は、次に、新たな入力記述子、および新たな出力記述子が、通信パス510上でドアベル信号を介して利用可能であることをファームウェアソケットモジュールに知らせる。
4)ファームウェアソケットが、次に、バッファ500の中の第1の入力記述子を読み取り、FAMチェーンに送られるべきデータ(コマンドまたはターゲットデータ)が格納されるロケーションを特定し、そのロケーションからFAMチェーンへのデータ(コマンドまたはターゲットデータ)のDMA転送を実行し、バッファ500の中の次の入力記述子に進む。このため、コマンドおよびターゲットデータは、入力記述子プールバッファ500内で設定されているのと同じ順序でFAMチェーンに供給される。
5)ファームウェアソケットモジュールが、次に、FAMチェーンを出るコマンドを、バッファ506の中のコマンド出力記述子によって指定されたメモリ空間502c内のバッファに送る。また、ファームウェアソケットモジュールは、FAMチェーンから出るデータを、バッファ504の中のデータ出力記述子によって指定されたメモリ空間502b内のバッファに送る。
6)ファームウェアソケットモジュールは、次に、コマンドおよび/またはデータが利用可能であることをデバイスドライバに通知する(割り込みを介して)。
7)ソフトウェアが、次に、適宜、戻されたデータおよび/またはコマンドに対処する適切なデータハンドラまたはコマンドハンドラを呼び出す(このハンドラは、ソフトウェアライブラリインタフェース210を介して制御される)。
【0071】
ソフトウェアから再構成可能なロジックデバイスに情報を送る際、すべての転送(コマンドとデータの両方)は、好ましくは、バッファ500の中に格納された共通の入力記述子によって管理される。FAMチェーンの中の個々のFAMが、データおよびコマンドを並べ替えない限り、バッファ500の中の入力記述子の順序によって定義されるデータおよびコマンドの順序は、再構成可能なロジックデバイス内の処理全体にわたって保たれる。
【0072】
再構成可能なロジックデバイスからソフトウェアに戻るように送られるデータおよびコマンドに関して、厳密な順序付けは、必ずしも要求されない。厳密な同期が、プロセス全体(ソフトウェアへのコマンドおよびデータの戻しを含む)にわたって所望される場合、デバイスドライバソフトウェアは、個別のコマンドの中で同期ビットを設定することができる。同期ビットセットを有するコマンドが、FAMチェーンの出口点からファームウェアソケットモジュールに到着すると、ファームウェアソケットモジュールは、好ましくは、以下の機能を実行する。すなわち、(1)データチャネルバッファをメモリにフラッシュし、(2)データ出力記述子の中で設定された同期フラグを有するデータチャネルにおけるNull(空の)バッファを作成し、(3)このデータ出力記述子が、メモリにフラッシュされることを確実にし、(4)コマンドチャネルバッファ(コマンド自体の中で同期ビットが設定されている)をフラッシュする。
【0073】
ファームウェアソケットモジュール120は、好ましくは、前段で特定された(さらに、64ビットBARとして構成されている)第1のBARのメモリ領域の中にマップされた16個のデバイスレジスタを有する。各デバイスレジスタの物理的アドレスは、ベースアドレスに或るオフセットを足したアドレスである。これらのレジスタ、およびBARからの、これらのレジスタのオフセットが、以下の表3にリストアップされる。すなわち、
【表3】
【0074】
ファームウェアIDは、2つの値から成る64ビットの読み取り専用レジスタである。最下位の32ビットは、ファームウェアID番号であり、最上位の32ビットは、そのIDによって示される特定のファームウェアの改訂番号である。
【0075】
FPGA情報レジスタは、2つの情報、すなわち、FPGAタイプおよびFPGAサイズを含む64ビットの読み取り専用レジスタである。FPGAタイプは、FPGAのタイプを示す4つのASCII文字(32ビット)である。例えば、FPAGデバイスが、Xilinx Virtex(登録商標)−IIデバイスである場合、FPGAタイプは、「xc2v」である。FPGAサイズは、どのようなサイズのFPGAが使用されているかを示す32ビットの整数である。例えば、FPGAデバイスが、Xilinx Virtex(登録商標)−II 4000である場合、FPGAサイズは、4000である。FPGAタイプは、FPGA情報レジスタの最下位の32ビットであるのに対して、FPGAサイズは、レジスタの最上位の32ビットである。
【0076】
デバイスステータスレジスタは、ハードウェアデバイスに接続されたハードウェアシステムについての2つの情報を含む64ビットの読み取り専用レジスタである。最下位の32ビットは、ハードウェアデバイスに接続されたハードウェアシステムのタイプを示す。以下の表4は、デバイスタイプ番号付けの例を示す。
【表4】
デバイスステータスレジスタの最上位の32ビットは、ハードウェアシステムに接続されたデバイスの数を示す整数である。
【0077】
実装されたRAMサイズは、FPGAデバイスに接続されたメモリ304の量を(キロバイト単位で)示す64ビットのレジスタである。
【0078】
ドアベルレジスタは、ドライバレベルソフトウェア204とファームウェアソケットモジュール120の間の通信のために使用されるフラグを含む64ビットの読み取り/書き込みレジスタである。ドアベルフラグ、およびこれらのフラグの機能は、以下の表5にリストアップされる。
【表5】
【0079】
実行ビットは、ドライバレベルソフトウェア204によって、実行を開始する、または再開するようファームウェアソケットモジュールに告げるのに設定される。このビットは、ハードウェアによって確認されると、ファームウェアソケットモジュールによってクリアされる。停止ビットは、ドライバレベルソフトウェア204によって、実行を停止する、または一時停止するようファームウェアソケットモジュールに告げるのに設定される。このビットは、ハードウェアによって確認されると、ファームウェアソケットモジュールによってクリアされる。リセットビットは、ドライバレベルソフトウェア204によって、ファームウェアソケットモジュール、およびFAMチェーンにおけるFAMのすべてをリセットするのに設定される。このビットは、ハードウェアによって確認されると、ファームウェアソケットモジュールによってクリアされる。フラッシュビットは、ドライバレベルソフトウェア204によって、ソフトウェアを宛先とするコマンドおよびデータを保持するファームウェアソケットモジュール上のアウトバウンドバッファをフラッシュするのに設定される。このビットは、ハードウェアによって確認されると、ファームウェアソケットモジュールによってクリアされる。ストローブデバッグビットは、デバッグ目的で使用されることが可能なビットである。クロックカウンタリセットビットは、PCI−Xバスのクロック速度を決定するために使用されるファームウェアソケットモジュールの中のカウンタをリセットする。PCI−Xバスのクロック速度は、ファームウェアソケットモジュールパラメータレジスタの上位の9ビットを読み取ることによって決定されることが可能である。
【0080】
割り込みステータスレジスタは、以下の表6にリストアップされる割り込み条件についてドライバレベルソフトウェア204に通知するのに使用される64ビットの読み込み/書き込みレジスタである。割り込み条件が設定されるといつでも、オペレーティングシステムに割り込みを行う割り込みが、PCI−Xバス上でトリガされ、ドライバレベルソフトウェア204によって応答が行われなければならない。ドライバレベルソフトウェア204が、割り込みステータスレジスタを読み取る前に、複数の割り込み条件が生じると、ソフトウェアが、割り込みステータスレジスタを読み取った際に、複数のビットが、設定される。割り込みステータスレジスタは、読み取られると、クリアされる。
【表6】
【0081】
ファームウェアソケットモジュールは、データの入力記述子バッファを読み取ろうと試みて、次の入力記述子バッファが、読み取られる準備ができていない(バッファ500の中でキュー状態にある次の入力記述子のレディビットを調べることにより)場合、割り込みビット0を設定する。割り込みビット0が、書き込まれた場合、ドライブレベルソフトウェア204は、ファームウェアソケットモジュールが、入力記述子プールバッファを再び読み取ろうと試みる前に、ドアベルレジスタの実行ビットに書き込まなければならない。
【0082】
割り込みビット1は、ファームウェアソケットモジュールへの入力として定められているデータの入力記述子を読み取る際、誤りが生じたことを知らせる。
【0083】
入力記述子プールバッファ500の割り込みフラグが、設定された場合、ファームウェアソケットモジュールは、入力データの入力記述子バッファを読み取ることを終えた後、割り込みビット2を設定する。
【0084】
ファームウェアソケットモジュールは、カーネルに出力すべきデータを有するが、次のData−to−Kernel出力記述子バッファが、利用できない(バッファ504の中でキュー状態にある次のデータ出力記述子のレディビットを調べることにより)場合、割り込みビット3を設定する。ファームウェアソケットモジュールが、この割り込みを設定すると、ドライバレベルソフトウェア204は、ファームウェアソケットモジュールが、データを再び出力しようと試みる前に、Data−to−Kernel出力記述子バッファを利用可能にした後、ドアベルレジスタの実行ビットに書き込まなければならない。
【0085】
割り込みビット4は、ファームウェアソケットモジュールが、出力記述子バッファにデータを書き込もうと試みた際に、誤りが生じたことを知らせる。
【0086】
ファームウェアソケットモジュールは、Data−to−Kernel出力記述子バッファにデータを書き込み、記述子を閉じるといつでも(すなわち、ファームウェアソケットモジュールは、データを書き込むために次のData−to−Kernel出力記述子バッファに進んでいる)、割り込みビット5を設定する。
【0087】
割り込みビット6は、ドアベルレジスタの中でフラッシュビットが設定されている場合、戻されるべき出力データが全く存在しないことを示すように定義される。
【0088】
ファームウェアソケットモジュールは、カーネルに出力すべきコマンドデータを有するが、次のCommand−to−Kernel出力記述子バッファが、利用できない(バッファ506の中でキュー状態にある次のコマンド出力記述子のレディビットを調べることにより)場合、割り込みビット7を設定する。ファームウェアソケットモジュールが、この割り込みを設定すると、ドライバレベルソフトウェア204は、ファームウェアソケットモジュールが、コマンドデータを再び出力しようと試みる前に、Command−to−Kernel出力記述子バッファを利用可能にした後、ドアベルレジスタの実行ビットに書き込まなければならない。
【0089】
割り込みビット8は、ファームウェアソケットモジュールが、コマンド出力記述子バッファにコマンドデータを書き込もうと試みた際に、誤りが生じたことを知らせる。
【0090】
ファームウェアソケットモジュールは、Command−to−Kernel出力記述子バッファにデータを書き込み、記述子を閉じるといつでも(すなわち、ファームウェアソケットモジュールは、コマンドデータを書き込むために次のCommand−to−Kernel記述子バッファに進んでいる)、割り込みビット9を設定する。
【0091】
Data−to−Cardアドレスレジスタは、Data−to−Card入力記述子プールバッファ500の先頭の物理的アドレスを示すのに使用される64ビットの読み取り/書き込みレジスタである。ドライバレベルソフトウェア204は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。
【0092】
Data−to−Cardカウントレジスタは、データを読み取るために利用可能なData−to−Card入力記述子バッファの数を示すのに使用される32ビットの読み取り/書き込みレジスタである。ドライバレベルソフトウェア204は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の32ビットが0で埋められた64ビットの値が、戻される。
【0093】
Data−to−Cardネクストレジスタは、読み取りが行われるべき次のData−to−Card入力記述子バッファに対する32ビットの読み取り/書き込みポインタである。このポインタは、ファームウェアソケットモジュールとドライバレベルソフトウェアが同期していることを確実にするのに使用される。このアドレスから読み取りが行われると、上位の32ビットが0で埋められた64ビットの値が、戻される。
【0094】
Data−to−Kernelアドレスレジスタは、Data−to−Kernel出力記述子プールバッファ504の先頭の物理的アドレスを示すのに使用される48ビットの読み取り/書き込みレジスタである。ドライバレベルソフトウェア204は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の16ビットが0で埋められた64ビットの値が、戻される。
【0095】
Data−to−Kernelカウントレジスタは、データを書き込むために利用可能なData−to−Kernel出力記述子バッファの数を示すのに使用される32ビットの読み取り/書き込みレジスタである。ドライバレベルソフトウェア204は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の32ビットが0で埋められた64ビットの値が、戻される。
【0096】
Data−to−Kernelネクストレジスタは、書き込みが行われるべき次のData−to−Kernel出力記述子バッファに対する32ビットの読み取り/書き込みポインタである。このポインタは、ファームウェアソケットモジュールとドライバレベルソフトウェアが同期していることを確実にするのに使用される。このアドレスから読み取りが行われると、上位の32ビットが0で埋められた64ビットの値が、戻される。
【0097】
Command−to−Kernelアドレスレジスタは、Command−to−Kernel出力記述子プールバッファ506の先頭の物理的アドレスを示すのに使用される48ビットの読み取り/書き込みレジスタである。ドライバレベルソフトウェア204は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の16ビットが0で埋められた64ビットの値が、戻される。
【0098】
Command−to−Kernelカウントレジスタは、コマンドデータを書き込むために利用可能なCommand−to−Kernel出力記述子バッファの数を示すのに使用される32ビットの読み取り/書き込みレジスタである。ドライバレベルソフトウェア204は、ドアベルレジスタの実行ビットに初めて書き込みが行われる前に、このレジスタに書き込まなければならない。このアドレスから読み取りが行われると、上位の32ビットが0で埋められた64ビットの値が、戻される。
【0099】
Command−to−Kernelネクストレジスタは、書き込みが行われるべき次のCommand−to−Kernel出力記述子バッファに対する32ビットの読み取り/書き込みポインタである。このポインタは、ファームウェアソケットモジュールとドライバレベルソフトウェアが同期していることを確実にするのに使用される。このアドレスから読み取りが行われると、上位の32ビットが0で埋められた64ビットの値が、戻される。
【0100】
パラメータレジスタは、ファームウェアソケットモジュールの中のプログラミング可能なパラメータを設定するのに使用される64ビットのレジスタである。以下の表7に示される通り、これらのパラメータのいくつかは、読み取り/書き込みであるのに対して、他のパラメータは、読み取り専用である。
【表7】
【0101】
最大PCI−Xバーストサイズパラメータは、ファームウェアソケットモジュールが、PCI−Xバス112上で実行しようと試みる最大サイズトランザクションを設定するのに使用される。この最大トランザクションサイズは、パラメータレジスタの中の6ビットの値掛ける128であるが、このフィールドを0に設定することにより、最大トランザクションサイズが4096(PCI−X規格によって許される最大トランザクションサイズ)に設定される。
【0102】
パラメータレジスタのビット55は、このレジスタの上位の8ビットにおけるPCI−Xバス速度が有効であるかどうかを示すのに使用される(「1」は、有効を示し、「0」は、無効を示す)。
【0103】
パラメータレジスタの最上位の8ビットは、PCI−Xバスの計算速度をMHz単位で示す。バス速度有効ビット(ビット55)も、この値が有効であるか否かを確認するのに読み取られなければならない。PCI−Xバス速度値が、有効ではない場合、ドライバレベルソフトウェアは、短い時間、待ち、この値を再び読み取らなければならない。
【0104】
前述した通り、ファームウェアソケットモジュールとドライバレベルソフトウェア204の間の通信は、3つの記述子セット、すなわち、1つの入力記述子プールと、2つの出力記述子プール(1つは、コマンドに関し、他方は、データに関する)とを使用して行われる。各プールは、記述子バッファ(カーネルバッファ)についての情報を有するフラグおよびフィールドを含む独自の記述子セットを有する。
【0105】
各記述子は、好ましくは、以下の表8に示される通り、それぞれの8バイトの4つの部分に分割される32バイト長である。すなわち、
【表8】
【0106】
フラグフィールドは、以下の表9に示される通り、記述子バッファについての情報を含む64ビットのフィールドである。
【表9】
【0107】
ビジービットは、ドライバレベルソフトウェア204によって、記述子バッファが使用中であることを示すのに設定される。
【0108】
コマンド/データビットは、バッファが、コマンド情報またはデータを含むかどうかをファームウェアソケットモジュールに告げるのに使用される。バッファが、コマンド情報を含む場合、このビットは、設定されなければならず、含まない場合、このビットは、クリアされなければならない。ファームウェアソケットモジュールは、Data−to−Card入力記述子バッファ上で、このビットを読み取り、そのバッファの中のすべてのデータに適切にマークを付ける(コマンドまたはデータとして)。
【0109】
Data−to−Kernelビットは、バッファの中のデータが、ドライバレベルソフトウェア204(カーネル)を宛先としているか否かを示す。このビットが設定されている場合、データは、カーネルを宛先として、ファームウェアソケットモジュールから出力される。ファームウェアソケットモジュールが、このビットを設定することを担う。このビット、またはData−to−Cardビットが常に設定されなければならないが、両方が設定されることは決してない。
【0110】
Data−to−Cardビットは、バッファの中のデータが、ファームウェアソケットモジュール(カード上に配備された)を宛先としているかどうかを示す。このビットが設定されている場合、データは、ドライバレベルソフトウェア204からファームウェアソケットモジュールに入力される。ドライバレベルソフトウェア204は、このビットを設定することを担う。このビット、またはData−to−Kernelビットが常に設定されなければならないが、両方が設定されることは決してない。
【0111】
レディビットは、ドライバレベルソフトウェア204によって、バッファが、ファームウェアソケットモジュールによって使用される準備ができていることを示すのに設定される。ファームウェアソケットモジュールは、そのバッファを処理する際、このビットをクリアしなければならない。
【0112】
完了ビットは、ファームウェアソケットモジュールによって、ファームウェアソケットモジュールが、そのバッファを処理することを完了したことをドライバレベルソフトウェア204に示すのに設定される。ドライバレベルソフトウェア204は、そのバッファをクリーンアップすることを終えると、このビットをクリアしなければならない。
【0113】
割り込みビットは、ドライバレベルソフトウェアによって、ファームウェアソケットモジュールが、このバッファを処理した後、Data−to−Card記述子バッファ完了割り込みを使用して割り込みを行うよう、ファームウェアソケットモジュールに命令するのに設定される。
【0114】
バイトカウントフィールドは、バッファに関するバイトカウントを含む64ビットのフィールドである。このバイトカウントの意味は、入力記述子バッファに関するのと、出力記述子バッファに関するのとで異なる。Data−to−Card入力記述子バッファの場合、このバイトカウントフィールドは、バッファの中に含まれるデータのバイト数である。ファームウェアソケットモジュールは、入ってくるバイトカウントに関して20ビットだけしか使用せず、このため、ファームウェアソケットモジュールが扱うことができる最大のData−to−Cardバッファは、(1MB−1)バイトである。このバイトカウント値は、ドライバレベルソフトウェア204によって設定されなければならない。Data−to−Kernel出力記述子バッファ、およびCommand−to−Kernel出力記述子バッファの場合、このバイトカウントは、ドライバレベルソフトウェア204によって、バッファの中でどれだけのバイトが、書き込みのために利用可能であるかを示すように最初に設定される。ファームウェアソケットモジュールが、バッファ上で完了ビットを設定する際、ファームウェアソケットモジュールは、バッファに書き込まれる実際のバイト数で、このバイトカウントの更新も行わなければならない。このバイトカウントも、最大で(1MB−1)バイトである。
【0115】
物理的アドレスフィールドは、メインメモリの中のカーネルバッファの物理的アドレスを含む64ビットのフィールドである。このフィールドは、ドライバレベルソフトウェア204によって設定される。好ましくは、ファームウェアソケットモジュールは、48ビットで表されることが可能な物理的アドレスだけを扱う。
【0116】
仮想アドレスフィールドは、カーネルバッファの仮想アドレスを含む64ビットのフィールドであり、ドライバレベルソフトウェア204だけによって使用される。
【0117】
動作の際、ファームウェアソケットモジュールは、ファームウェアソケットモジュールのドアベルレジスタ上で実行信号を受け取ると、バッファ500の中のData−to−Card入力記述子を読み取り、準備ができていないバッファから読み取ろうと試みるまで、またはファームウェアソケットモジュールによって保持される出力FIFOの中にコマンド情報またはデータが存在するまで、読み取り続ける。
【0118】
ファームウェアソケットモジュールは、好ましくは、出力のためのコマンド情報に最高の優先順位を与える。出力のためのコマンド情報が存在する場合、ファームウェアソケットモジュールは、その情報を、利用可能なCommand−to−Kernel出力記述子バッファ506に出力する。そのようなバッファ506が、利用できない場合、ファームウェアソケットモジュールは、Command−to−Kernel出力記述子バッファ満杯割り込みを発行する。すると、ファームウェアソケットは、ドアベルレジスタの中の実行ビットに、ドライバレベルソフトウェア204によって、バッファ506が利用可能にされたことを示すように書き込みが行われるまで、バッファ506にコマンド情報を再び出力しようとしない。
【0119】
ファームウェアソケットモジュールは、好ましくは、出力のためのデータに、2番目に高い優先順位を与える。ファームウェアソケットモジュールの出力FIFOの中のデータの量が、最大PCI−Xバーストサイズ以上である場合、ファームウェアソケットモジュールは、利用可能なData−to−Kernel出力記述子バッファ504にデータを出力する。次のData−to−Kernelバッファ504が、利用できない場合、ファームウェアソケットモジュールは、Data−to−Kernel出力記述子バッファ満杯割り込みを通知する。すると、ファームウェアソケットモジュールは、ドアベルレジスタの中の実行ビットに、ドライバレベルソフトウェア204によって、バッファ504が利用可能にされたことを示すように書き込みが行われるまで、バッファ504にデータを再び出力しようとしない。
【0120】
ファームウェアソケットモジュールは、好ましくは、入ってくるデータまたはコマンドに最低の優先順位を与える。次のData−to−Card入力記述子バッファ500が、利用できない場合、ファームウェアソケットモジュールは、Data−to−Card入力記述子バッファ空割り込みを通知する。ファームウェアソケットモジュールは、ドアベルレジスタの中の実行ビットに、ドライバレベルソフトウェア204によって書き込みが行われて、バッファ500が満たされたことを示すまで、次のバッファ500を読み取ろうとしない。
【0121】
また、ファームウェアソケットモジュールは、好ましくは、ネクストポインタが、カウントに到達するまで、バッファ500、504、および506を順に処理することを続け、到達した時点で、ネクストポインタは、第1のバッファにリセットされる。
【0122】
図6aは、インバウンドのデータおよびコマンドが、システム100によってどのように処理されることが可能であるかの例を示す。図6aの入力記述子プールバッファ500は、複数の記述子を格納し、これらの記述子は、コマンドおよびターゲットデータが格納されたメモリ空間502内のアドレスに対するポインタを含む。この例において、ポインタ1は、データストリームの中で「Smith」という語に関する検索を実行するよう、FAMチェーン130におけるFAM#3を構成するコマンドをポイントする。他のコマンドに対するポインタは、図6aにおいて特定される。また、バッファ500は、システム100を通して処理されるべきターゲットデータをポイントする記述子も格納する(例えば、ポインタ4参照)。前述した通り、ドライバレベルソフトウェア204は、これらの記述子でバッファ500をポピュレートして、ファームウェアソケットモジュールに送られ、FAMチェーンを通して伝搬されるべきコマンドおよびデータの順序を定義する。
【0123】
図6b−図6oは、図6aの例によって定義される順序を使用する、そのような伝搬を示す。図示を簡単にするため、SDコマンドおよびEDコマンドは、バッファ500の中のターゲットデータの境界において省略されている。見て取ることができる通り、コマンドとターゲットデータの間の定義された順序は、これらのコマンドおよびデータが、FPGAを通して処理される中で、ファームウェアソケットモジュールおよびFAMチェーンによって保たれる。入力記述子バッファの中でコマンドおよびターゲットデータを適切に順序付けることにより、ソフトウェアは、強力な高速データ処理動作を実現することができる。例えば、ポインタ1−5に対応するバッファ500の中の記述子は、アドレスA+1からCまでメモリの中に格納された暗号化されたターゲットデータに対して解読動作を実行し、その後、その解読されたデータの中で、「Smith」という語の存在の検索を実行するよう効果がある。また、アドレスP+1からWまでメモリの中に格納されたデータが、暗号化された後に圧縮されているものと想定すると、ポインタ6以下に対応するバッファ500の中の記述子は、そのターゲットデータに対して伸張動作を実行し、その後、その伸張されたターゲットデータに対して解読動作を実行し、その後、解読され、伸張されたターゲットデータの中で、「Jones」という語の検索を実行するよう効果がある。また、実際には、コマンドセットに従って処理されるターゲットデータの長さは、図6a−図6oに示される例よりも相当に大きい可能性が高く、例えば、ターゲットデータの長さは、所望されるデータ処理動作の範囲に応じて、メガバイト単位、ギガバイト単位、さらにテラバイト単位(またはそれより大きい単位)のオーダでさえある可能性があることも注目に値する。
【0124】
ソフトウェアライブラリインタフェース210
FAMのアプリケーション使用をサポートするソフトウェアAPIは、好ましくは、ExegyFpgaというラベルが付けられることが可能なクラスなどの、クラスで実現される。このクラスは、好ましくは、以下の公開メソッドを含む。
【数1】
【0125】
SendCommandメソッドは、コマンドチャネルを介してファームウェアソケットモジュールおよびFAMに所与のコマンドを送る。引数「TwoChars」は、コマンドフィールド(16ビット)に入るバイトのペア(通常、ASCII文字であるが、そうである必要はない)である。誤りフィールドが、クリアされる(0に設定される)。引数「Sync」は、同期フィールド(1ビット)に入る。引数「ModuleId」は、モジュールIDフィールド(6ビット)に入る。引数「Parameter」は、パラメータフィールド(32ビット)に入る。引数「WaitForIt」は、コマンドがファームウェアから戻るまで、メソッド呼び出しがブロックすべき(WaitForItが、1である場合)か、またはブロックすべきでないか(WaitForItが、0である場合)を示すフラグである。メソッドは、誤りが生じると、間違いを戻す。
【数2】
【0126】
Writeメソッドは、所与のバッファからデータチャネルにデータを送る。メソッドは、転送されたバイト数、または「errno」の中で誤りを戻す。
【数3】
【0127】
ReadCmdメソッドは、Command−to−Kernel出力記述子バッファからコマンドを読み取り、これらのコマンドをユーザバッファに送る。このメソッドは、バッファの中に入れられたバイトを戻す。
【数4】
【0128】
Readメソッドは、Data−to−Kernel出力記述子バッファからデータを読み取り、これらのデータをユーザバッファに送る。このメソッドは、バッファに入れられたバイト、または「errno」を戻す。同期マーク(すなわち、コマンド同期ビットの結果であるNullバッファ)に遭遇すると、ENODATAが、戻される。
【0129】
ソフトウェアライブラリインタフェースの例示的な用法が、以下に示される
【数5】
【0130】
本発明を、本発明の好ましい実施形態に関連して以上に説明してきたが、本発明の範囲にやはり含まれる様々な変形が、好ましい実施形態に行われることが可能である。本発明のそのような変形は、本明細書の教示を検討することで、認識可能となろう。このため、本発明の完全な範囲は、特許請求の範囲、および特許請求の範囲の法的均等物によってだけ規定されるべきである。
【図面の簡単な説明】
【0131】
【図1】本発明を実施する好ましいシステムを示すブロック図である。
【図2】好ましいシステムのためのソフトウェアおよびファームウェアの配備に関する例示的なフレームワークを示す図である。
【図3a】本発明によるデータ処理タスクを実行するようにコンピュータシステムに実装するための好ましいプリント回路基板を示すブロック図である。
【図3b】本発明によるデータ処理タスクを実行するようにコンピュータシステムに実装するための代替のプリント回路基板を示すブロック図である。
【図4】ファームウェアソケットモジュールとファームウェアアプリケーションモジュールとの間の好ましい信号層インタフェースを示す図である。
【図5】ファームウェアソケットモジュールと、デバイスドライバによって管理されるメモリ空間との間の好ましいハードウェア/ソフトウェアインタフェースを示す図である。
【図6a】デバイスドライバによって管理される入力記述子プールバッファ−およびカーネルメモリ空間の実施例を示す図である。
【図6b】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6c】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6d】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6e】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6f】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6g】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6h】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6i】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6j】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6k】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6l】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6m】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6n】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図6o】図6aの入力記述子プールバッファ実施例によって規定されるコマンドとターゲットデータの順序に従って、コマンドおよびターゲットデータが、ファームウェアソケットモジュールおよびファームウェアアプリケーションモジュールをどのように順に通されるかを示す図である。
【図7】ファームウェアソケットモジュールと、異なるデータ処理動作を実行するようにそれぞれが構成された、複数のパイプライン化されたファームウェアアプリケーションモジュールとを有して構成された例示的なFPGAを示す図である。
【図8】パイプラインのファームウェアアプリケーションモジュールが、どのように複数のFPGAにまたがって配備されることが可能であるかの例を示す図である。
【特許請求の範囲】
【請求項1】
再構成可能なロジックデバイス上に配備された少なくとも1つのファームウェアアプリケーションモジュールをコンピュータシステムと結び付ける方法であって、
コンピュータシステムが、互いに通信するプロセッサと、メモリ空間とを含み、少なくとも1つのファームウェアアプリケーションモジュールが、該モジュールが受け取るターゲットデータに対してデータ処理動作を実行するように構成され、
再構成可能なロジックデバイス上に配備され、少なくとも1つのファームウェアアプリケーションモジュールをコンピュータシステムメモリ空間に結び付けるファームウェアモジュール内で、(1)メモリ空間内のバッファから読み取りを行って、少なくとも1つファームウェアアプリケーションモジュールに供給されるべき複数のコマンドおよびターゲットデータを特定し、バッファが、コマンドおよびターゲットデータが、少なくとも1つのファームウェアアプリケーションモジュールに供給されるべき順序を規定し、各コマンドが、少なくとも1つのファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対して実行すべきデータ処理動作を制御すること、および(2)規定された順序に従って、コンピュータシステムメモリから少なくとも1つのファームウェアアプリケーションモジュールにコマンドおよびターゲットデータを転送することを含む、方法。
【請求項2】
転送されたコマンドおよびターゲットデータを、インタリーブされたコマンドとターゲットデータのストリームとして、少なくとも1つのファームウェアアプリケーションモジュールを通して処理することをさらに含む、請求項1に記載の方法。
【請求項3】
通信パスが、ファームウェアモジュールを少なくとも1つのファームウェアアプリケーションモジュールにリンクし、転送するステップが、少なくとも1つのファームウェアアプリケーションモジュールにコマンドとターゲットデータを、同一の通信パスを介して供給することを含む、請求項2に記載の方法。
【請求項4】
少なくとも1つのファームウェアアプリケーションモジュールが、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含み、パイプラインが、第1のファームウェアアプリケーションモジュールと、最終のファームウェアアプリケーションモジュールとを有し、転送するステップが、決定された順序に従って、コンピュータシステムメモリから、パイプラインの第1のファームウェアアプリケーションモジュールにコマンドとターゲットデータを、同一の通信パスを介して転送することをさらに含む、請求項3に記載の方法。
【請求項5】
処理するステップが、転送されたコマンドおよびターゲットデータを、パイプラインのそれぞれのさらなるファームウェアアプリケーションモジュールを通して順次に処理し、パイプラインの最終のファームウェアアプリケーションモジュールに終わることをさらに含む、請求項4に記載の方法。
【請求項6】
複数のコマンドが、ファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項5に記載の方法。
【請求項7】
コマンドの少なくとも1つが、ファームウェアアプリケーションモジュールの1つへのパススルーコマンドを含む、請求項6に記載の方法。
【請求項8】
コマンドによって定義されるデータ処理動作が、検索動作、データ縮約動作、暗号化動作、解読動作、圧縮動作、伸張動作、およびパススルー動作から成るグループの少なくとも2つの動作を含む、請求項6に記載の方法。
【請求項9】
コンピュータシステムメモリ空間が、RAM(ランダムアクセスメモリ)を含み、外部バッファが、RAMの中に格納される、請求項5に記載の方法。
【請求項10】
プロセッサの制御下で動作するデバイスドライバを使用して外部バッファを管理することをさらに含む、請求項9に記載の方法。
【請求項11】
バッファが、第1のバッファを含み、パイプラインの最後のファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対してファームウェアアプリケーションモジュールが実行するデータ処理動作の結果として、出力を生成するように構成され、
最後のファームウェアアプリケーションモジュールをファームウェアモジュールにリンクするさらなる通信パスを介して、最後のファームウェアアプリケーションモジュールの出力をファームウェアモジュールに転送すること、および
ファームウェアモジュール内で、(1)デバイスドライバによって管理されるさらなるバッファを読み取って、最後のファームウェアアプリケーションモジュールの出力が格納されるべきコンピュータシステムメモリ空間内のロケーションを決定すること、および(2)最後のファームウェアアプリケーションモジュールの出力を、コンピュータシステムメモリ内の決定されたロケーションに転送することをさらに含む、請求項10に記載の方法。
【請求項12】
ファームウェアアプリケーションモジュールパイプラインにターゲットデータが供給されるべき順序と同一の順序で、隣接するメモリアドレスでコンピュータシステムメモリ空間内にターゲットデータを格納することをさらに含む、請求項10に記載の方法。
【請求項13】
管理するステップが、コンピュータシステムメモリ空間内でコマンドおよびターゲットデータが格納されたメモリ空間アドレスに対するポインタで第1のバッファをポピュレートすることを含む、請求項12に記載の方法。
【請求項14】
ポピュレートするステップが、ポインタに対応するコマンドおよびターゲットデータが、ファームウェアアプリケーションモジュールパイプラインに供給されるべき順序と同一の順序で、第1のバッファの中にポインタを格納することを含む、請求項13に記載の方法。
【請求項15】
再構成可能なロジックデバイスが、FPGA(フィールドプログラマブルゲートアレイ)を含む、請求項4に記載の方法。
【請求項16】
再構成可能なロジックデバイス上に配備された少なくとも1つのファームウェアアプリケーションモジュールへのデータおよびコマンドのフローを制御するための方法であって、
コマンドが、少なくとも1つのファームウェアアプリケーションモジュールによるデータの処理を制御するための命令を含み、
前記少なくとも1つのファームウェアアプリケーションモジュールに至る共通の通信パスを提供すること、および
コマンドとデータの両方を、共通の通信パスを介して前記少なくとも1つのファームウェアアプリケーションモジュールに送ることを含む、方法。
【請求項17】
少なくとも1つのファームウェアアプリケーションモジュールが、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含み、送るステップが、インタリーブされたコマンドとデータのストリームを、パイプラインにおけるファームウェアアプリケーションモジュールの第1のモジュールに送ることを含む、請求項16に記載の方法。
【請求項18】
少なくとも複数のコマンドが、パイプラインにおけるファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項17に記載の方法。
【請求項19】
データ処理パイプラインと通信するファームウェアソケットモジュールを含み、前記データ処理パイプラインが、少なくとも1つの再構成可能なロジックデバイス上に配備され、ファームウェアソケットモジュールが、コマンドとターゲットデータの両方に共通の通信パスを介して、データ処理パイプラインへのコマンドとターゲットデータの両方の伝搬を制御するように構成され、各コマンドが、データ処理パイプラインによって実行されるべきデータ処理動作を制御し、ターゲットデータが、データ処理パイプラインが、命令されたデータ処理動作を実行する対象となるデータに対応する、データ処理デバイス。
【請求項20】
ファームウェアソケットモジュールも、少なくとも1つの再構成可能なロジックデバイス上に配備される、請求項19に記載のデータ処理デバイス。
【請求項21】
データ処理パイプラインが、直列に接続された複数のファームウェアアプリケーションモジュールを含み、ファームウェアソケットモジュールが、データ処理パイプラインに入る入口点に、所定の順序でコマンドおよびターゲットデータを供給するように構成され、所定の順序が、データ処理パイプライン全体にわたって保たれる、請求項20に記載のデータ処理デバイス。
【請求項22】
ファームウェアソケットモジュールが、(1)外部入力記述子プールバッファにアクセスして、外部メモリ空間内のどこに、データ処理パイプラインに送られるべきコマンドおよびターゲットデータが格納されているかを特定するように構成され、入力記述子プールバッファが、コマンドおよびターゲットデータがデータ処理パイプラインに送られるべき順序を定義し、さらに、ファームウェアソケットモジュールが、(2)定義された順序に従って、外部メモリ空間からデータ処理パイプラインに、特定されたコマンドおよびターゲットデータを転送するように構成される、請求項21に記載のデータ処理デバイス。
【請求項23】
再構成可能なロジックデバイスが、FPGA(フィールドプログラマブルゲートアレイ)を含み、ファームウェアソケットモジュールが、ファームウェアソケットモジュールと、データ処理パイプラインからの出口点との間の別の通信パスを有し、ファームウェアソケットモジュールが、さらなる通信パスを介してデータ処理パイプラインからの出力を受け取るようにさらに構成される、請求項22に記載のデータ処理デバイス。
【請求項24】
ファームウェアソケットモジュールが、(1)第1の外部出力記述子プールバッファにアクセスして、データ処理パイプラインからのコマンド出力が格納されるべきメモリ空間内のロケーションを特定し、(2)第2の外部出力記述子プールバッファにアクセスして、データ処理パイプラインからのターゲットデータ出力が格納されるべきメモリ空間内のロケーションを特定し、(3)データ処理パイプラインからのコマンド出力およびターゲットデータ出力を、メモリ空間内のそれぞれの特定されたロケーションに書き込むようにさらに構成される、請求項23に記載のデータ処理デバイス。
【請求項25】
プロセッサと、
プロセッサによって管理されるメモリ空間と、
配備された少なくとも1つのファームウェアアプリケーションモジュールと、少なくとも1つのファームウェアアプリケーションモジュールをプロセッサおよびメモリに結び付けるファームウェアソケットモジュールとを含み、ファームウェアソケットモジュールと少なくとも1つのファームウェアアプリケーションモジュールが、通信パスを介して互いに通信する再構成可能なロジックデバイスと、
再構成可能なロジックデバイスが、プロセッサおよびメモリ空間と通信するバスとを含むデータ処理システムであって、
ファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るデータストリームに対してデータ処理動作を実行するように構成され、
ファームウェアソケットモジュールが、メモリ空間から複数のコマンドとターゲットデータとの両方を受け取るように構成され、
ファームウェアソケットモジュールが、コマンドとターゲットデータの両方を、ファームウェアソケットモジュールと、少なくとも1つのファームウェアアプリケーションモジュールとの間の同一の通信パスを介して少なくとも1つのファームウェアアプリケーションモジュールに供給するように構成され、各コマンドが、少なくとも1つのファームウェアアプリケーションモジュールによって実行されるデータ処理動作を制御し、ターゲットデータが、少なくとも1つのファームウェアアプリケーションモジュールのデータ処理動作が実行される対象であるデータを含む、システム。
【請求項26】
ファームウェアソケットモジュールが、(1)コマンドおよびターゲットデータを、インタリーブされ、順序付けられたコマンドとターゲットデータのストリームとして受け取り、(2)ファームウェアソケットモジュールが、同一の通信パスを介してストリームを少なくとも1つのファームウェアアプリケーションモジュールに供給する際に、順序、または順序付けられたコマンドとターゲットデータを保つようにさらに構成される、請求項25に記載のシステム。
【請求項27】
再構成可能なロジックデバイスが、FPGA(フィールドプログラマブルゲートアレイ)を含む、請求項26に記載のシステム。
【請求項28】
少なくとも1つのファームウェアアプリケーションモジュールが、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含み、パイプラインにおけるファームウェアアプリケーションモジュールのそれぞれが、ストリームのコマンドおよびターゲットデータを、ファームウェアソケットモジュールが、コマンドおよびターゲットデータを供給したのと同一の順序で、順次に処理するように構成される、請求項27に記載のシステム。
【請求項29】
複数のコマンドが、パイプラインにおけるファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項28に記載のシステム。
【請求項30】
ファームウェアアプリケーションモジュールとファームウェアソケットモジュールが、チェーンに構成され、ファームウェアソケットモジュールが、インタリーブされ、順序付けられたコマンドとターゲットデータのストリームを、パイプラインにおけるファームウェアアプリケーションモジュールの第1のモジュールに供給する、請求項28に記載のシステム。
【請求項31】
プロセッサが、複数のコマンドに対応するデータ、および複数のデータストリームに対応するデータが、前記順序で格納されるバッファを保持するデバイスドライバを有してさらに構成され、ファームウェアソケットモジュールが、バッファにアクセスして、ファームウェアアプリケーションモジュールを介して処理されるべきコマンドおよびデータストリームを特定するように構成される、請求項28に記載のシステム。
【請求項32】
コマンドおよびターゲットデータが、複数のメモリアドレスでメモリ空間内に格納され、バッファの中に格納された複数のコマンドに対応するデータ、およびターゲットデータに対応するデータが、対応するコマンドおよびターゲットデータが格納されているメモリアドレスに対する複数のポインタを含む、請求項31に記載のシステム。
【請求項33】
チェーンを通してグループとして処理されるべきターゲットデータが、メモリアドレスに対するポインタが、バッファの中に格納されるのと同一の順序で、隣接するメモリアドレスに格納される、請求項32に記載のシステム。
【請求項34】
データ処理動作が、検索動作、暗号化動作、解読動作、圧縮動作、伸張動作、およびデータ縮約動作から成るグループの少なくとも2つの動作を含む、請求項27に記載のシステム。
【請求項35】
コンピュータシステムのバスに接続するためのデータ処理カードであって、
ファームウェアアプリケーションモジュールパイプラインおよびファームウェアモジュールが配備された再構成可能なロジックデバイスを含み、
ファームウェアモジュールが、ファームウェアアプリケーションモジュールパイプラインを、ターゲットデータおよびコマンドの少なくとも1つの外部源に結び付けるように構成され、コマンドが、ファームウェアアプリケーションモジュールパイプラインが、ターゲットデータをどのように処理するかを制御し、
ファームウェアアプリケーションモジュールパイプラインが、シーケンスで配置された複数のファームウェアアプリケーションモジュールを含み、各ファームウェアアプリケーションモジュールが、ターゲットデータに対してデータ処理動作を実行するように構成され、ファームウェアアプリケーションモジュールパイプラインが、ファームウェアモジュールから、シーケンスのファームウェアアプリケーションモジュールの第1のモジュールに至るエントリ通信パスを有し、
ファームウェアモジュールが、エントリ通信パスを介して、インタリーブされたコマンドとターゲットデータのストリームを、シーケンスにおけるファームウェアアプリケーションモジュールの第1のモジュールに供給することによって、ファームウェアアプリケーションモジュールパイプラインがターゲットデータをどのように処理するかを制御するようにさらに構成され、コマンドとターゲットデータが、ストリーム内で定義された順序を有し、
ファームウェアモジュールが、外部バッファの中に格納されたエントリを読み取って、ファームウェアアプリケーションモジュールパイプラインに供給されるべきコマンドおよびターゲットデータを決定するように構成され、外部バッファの中のエントリの順序が、ストリーム内のコマンドとターゲットデータの順序を定義し、
ファームウェアアプリケーションモジュールパイプラインが、ファームウェアアプリケーションモジュールのシーケンスを通るストリームのコマンドおよびターゲットデータを、それらのコマンドおよびターゲットデータが、ストリーム内で順序付けられていたのと同一の順序で順に処理するように構成される、カード。
【請求項36】
外部バッファエントリが、コマンドおよびターゲットデータが格納されている少なくとも1つの外部源内のアドレスに対するポインタを含み、ファームウェアモジュールが、少なくとも1つの外部源にアクセスして、アドレスから、定義された順序に従ってコマンドおよびターゲットデータを取り出すようにさらに構成される、請求項35に記載のデータ処理カード。
【請求項37】
複数のコマンドが、シーケンスにおけるファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項36に記載のデータ処理カード。
【請求項38】
コマンドの少なくとも1つが、シーケンスにおけるファームウェアアプリケーションモジュールの1つへのパススルーコマンドを含む、請求項37に記載のデータ処理カード。
【請求項39】
コマンドによって定義されるデータ処理動作が、検索動作、データ縮約動作、暗号化動作、解読動作、圧縮動作、伸張動作、およびパススルー動作から成るグループの少なくとも2つの動作を含む、請求項37に記載のデータ処理カード。
【請求項40】
ファームウェアアプリケーションモジュールパイプラインが、シーケンスにおけるファームウェアアプリケーションモジュールの最後のモジュールからファームウェアモジュールに至るエグジット通信パスをさらに有し、シーケンスにおけるファームウェアアプリケーションモジュールの最後のモジュールによって実行される各データ処理動作が、出力を生成し、ファームウェアモジュールが、(1)シーケンスにおけるファームウェアアプリケーションモジュールの最後のモジュールからの出力を、エグジット通信パスを介して受け取り、(2)外部バッファの中に格納されたエントリを読み取って、出力が格納されるべき少なくとも1つの外部源内の複数のロケーションを決定し、(3)決定されたロケーションで少なくとも1つの外部源に出力を書き込むようにさらに構成される、請求項39に記載のデータ処理カード。
【請求項41】
再構成可能なロジックデバイスが、FPGA(フィールドプログラマブルゲートアレイ)を含む、請求項35に記載のデータ処理カード。
【請求項42】
ソフトウェアを介して再構成可能なロジックデバイスを通るデータの処理を制御するシステムであって、
複数のメモリアドレスにデータが格納されるメモリ空間を管理するように構成された、プロセッサによって実行されるためのデバイスドライバソフトウェアと、
バスを介してデバイスドライバソフトウェアおよびメモリ空間と通信するための再構成可能なロジックデバイスとを含み、
少なくとも1つのファームウェアアプリケーションモジュール、およびファームウェアソケットモジュールが、再構成可能なロジックデバイス上に配備され、
少なくとも1つのファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対してデータ処理動作を実行するように構成され、
デバイスドライバソフトウェアが、複数のコマンドをメモリ空間内に格納するように構成され、各コマンドが、少なくとも1つのファームウェアアプリケーションモジュールによって実行されるべきデータ処理動作を制御することに向けられ、
デバイスドライバソフトウェアが、コマンドおよびデータが、少なくとも1つのファームウェアアプリケーションモジュールを通して処理されるべき順序を定義する入力記述子プールバッファをメモリ空間内に保持するようにさらに構成され、
ファームウェアソケットモジュールが、(1)入力記述子プールバッファにアクセスして、少なくとも1つのファームウェアアプリケーションモジュールを通して処理されるべき順序付けられたコマンドおよびデータを特定し、(2)メモリ空間にアクセスして、定義された順序に従って、コマンドおよびデータを少なくとも1つのファームウェアアプリケーションモジュールに転送するように構成される、システム。
【請求項43】
少なくとも1つのファームウェアアプリケーションモジュールが、第1のファームウェアアプリケーションモジュールを含むパイプライン化されたシーケンスに配置された複数のファームウェアアプリケーションモジュールを含み、ファームウェアソケットモジュールが、通信パスを介して、パイプライン化されたシーケンスの第1のファームウェアアプリケーションモジュールと通信しており、ファームウェアソケットモジュールが、コマンドとデータを、同一の通信パスを介して、パイプライン化されたシーケンスにおける第1のファームウェアアプリケーションモジュールに転送するようにさらに構成される、請求項42に記載のシステム。
【請求項44】
各コマンドが、そのコマンドが適用可能であるパイプライン化されたシーケンスにおけるファームウェアアプリケーションモジュールを特定するファームウェアアプリケーションモジュール識別子を含む、請求項43に記載のシステム。
【請求項45】
デバイスドライバソフトウェアが、ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスを通して処理されるべきコマンドおよびデータが格納されているメモリ空間内のメモリアドレスに対する複数のポインタをデバイスドライバソフトウェアの中に格納することによって、入力記述子プールバッファを保持するようにさらに構成され、入力記述子プールバッファの中のポインタの順序が、ファームウェアソケットモジュールによってファームウェアアプリケーションモジュールのパイプライン化されたシーケンスにコマンドおよびデータが供給される順序を定義する、請求項44に記載のシステム。
【請求項46】
再構成可能なロジックデバイスが、FPGA(フィールドプログラマブルゲートアレイ)を含み、システムが、プロセッサによって実行されるためのアプリケーションソフトウェアと、プロセッサによって実行されるためのモジュールアプリケーションプログラミングインタフェースソフトウェアとをさらに含み、アプリケーションソフトウェアが、(1)ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスによって実行されるべき少なくとも1つのデータ処理動作と、(2)ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスが、少なくとも指定されたデータ処理動作を実行する対象となるデータとを指定する入力をユーザから受け取るように構成され、モジュールアプリケーションプログラミングインタフェースソフトウェアが、アプリケーションソフトウェアをデバイスドライバソフトウェアに結び付けるように構成されて、デバイスドライバソフトウェアが、入力記述子プールバッファおよびメモリ空間をユーザ入力に従って適切に管理するようにする、請求項45に記載のシステム。
【請求項47】
前記デバイスドライバソフトウェアが、ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスにデータが供給されるべき順序と同一の順序で、メモリ空間の隣接するメモリアドレスに、パイプライン化されたシーケンスを通して処理されるべきデータを格納するようにさらに構成される、請求項45に記載のシステム。
【請求項48】
少なくとも1つの再構成可能なロジックデバイス上に配備されたファームウェアアプリケーションモジュールのパイプラインを、再構成可能なロジックデバイスの外部にあるメモリ空間に結び付けるためのデバイスであって、
少なくとも1つの再構成可能なロジックデバイス上に配備されたファームウェアモジュールを含み、ファームウェアモジュールが、(1)外部メモリ空間にシリアルアクセスして、複数のコマンド、および複数のターゲットデータグループを或る順序で取り出し、(2)取り出されたコマンドとターゲットデータグループの両方を、ファームウェアモジュールをパイプラインの入口点に接続する共通の通信パスを介して、同一の順序で単一のインタリーブされたストリームとして、パイプラインの入口点に送るように構成され、パイプラインにおける各ファームウェアアプリケーションモジュールが、そのファームウェアアプリケーションモジュールが受け取るターゲットデータに対してデータ処理動作を実行するように構成され、各コマンドが、パイプラインにおける少なくとも1つのファームウェアアプリケーションモジュールのデータ処理動作を制御するように構成される、デバイス。
【請求項49】
ファームウェアモジュールが、外部プロセッサによって実行されるソフトウェアプログラムによって、外部メモリ空間内に格納された順序付けられた記述子セットを読み取ることにより、いずれのコマンド、およびいずれのターゲットデータグループが、外部メモリ空間から取り出されるべきかを決定するようにさらに構成され、順序付けられた記述子セットが、コマンドとターゲットデータグループが、ストリームの中でインタリーブされるべき順序を定義する、請求項48に記載のデバイス。
【請求項1】
再構成可能なロジックデバイス上に配備された少なくとも1つのファームウェアアプリケーションモジュールをコンピュータシステムと結び付ける方法であって、
コンピュータシステムが、互いに通信するプロセッサと、メモリ空間とを含み、少なくとも1つのファームウェアアプリケーションモジュールが、該モジュールが受け取るターゲットデータに対してデータ処理動作を実行するように構成され、
再構成可能なロジックデバイス上に配備され、少なくとも1つのファームウェアアプリケーションモジュールをコンピュータシステムメモリ空間に結び付けるファームウェアモジュール内で、(1)メモリ空間内のバッファから読み取りを行って、少なくとも1つファームウェアアプリケーションモジュールに供給されるべき複数のコマンドおよびターゲットデータを特定し、バッファが、コマンドおよびターゲットデータが、少なくとも1つのファームウェアアプリケーションモジュールに供給されるべき順序を規定し、各コマンドが、少なくとも1つのファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対して実行すべきデータ処理動作を制御すること、および(2)規定された順序に従って、コンピュータシステムメモリから少なくとも1つのファームウェアアプリケーションモジュールにコマンドおよびターゲットデータを転送することを含む、方法。
【請求項2】
転送されたコマンドおよびターゲットデータを、インタリーブされたコマンドとターゲットデータのストリームとして、少なくとも1つのファームウェアアプリケーションモジュールを通して処理することをさらに含む、請求項1に記載の方法。
【請求項3】
通信パスが、ファームウェアモジュールを少なくとも1つのファームウェアアプリケーションモジュールにリンクし、転送するステップが、少なくとも1つのファームウェアアプリケーションモジュールにコマンドとターゲットデータを、同一の通信パスを介して供給することを含む、請求項2に記載の方法。
【請求項4】
少なくとも1つのファームウェアアプリケーションモジュールが、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含み、パイプラインが、第1のファームウェアアプリケーションモジュールと、最終のファームウェアアプリケーションモジュールとを有し、転送するステップが、決定された順序に従って、コンピュータシステムメモリから、パイプラインの第1のファームウェアアプリケーションモジュールにコマンドとターゲットデータを、同一の通信パスを介して転送することをさらに含む、請求項3に記載の方法。
【請求項5】
処理するステップが、転送されたコマンドおよびターゲットデータを、パイプラインのそれぞれのさらなるファームウェアアプリケーションモジュールを通して順次に処理し、パイプラインの最終のファームウェアアプリケーションモジュールに終わることをさらに含む、請求項4に記載の方法。
【請求項6】
複数のコマンドが、ファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項5に記載の方法。
【請求項7】
コマンドの少なくとも1つが、ファームウェアアプリケーションモジュールの1つへのパススルーコマンドを含む、請求項6に記載の方法。
【請求項8】
コマンドによって定義されるデータ処理動作が、検索動作、データ縮約動作、暗号化動作、解読動作、圧縮動作、伸張動作、およびパススルー動作から成るグループの少なくとも2つの動作を含む、請求項6に記載の方法。
【請求項9】
コンピュータシステムメモリ空間が、RAM(ランダムアクセスメモリ)を含み、外部バッファが、RAMの中に格納される、請求項5に記載の方法。
【請求項10】
プロセッサの制御下で動作するデバイスドライバを使用して外部バッファを管理することをさらに含む、請求項9に記載の方法。
【請求項11】
バッファが、第1のバッファを含み、パイプラインの最後のファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対してファームウェアアプリケーションモジュールが実行するデータ処理動作の結果として、出力を生成するように構成され、
最後のファームウェアアプリケーションモジュールをファームウェアモジュールにリンクするさらなる通信パスを介して、最後のファームウェアアプリケーションモジュールの出力をファームウェアモジュールに転送すること、および
ファームウェアモジュール内で、(1)デバイスドライバによって管理されるさらなるバッファを読み取って、最後のファームウェアアプリケーションモジュールの出力が格納されるべきコンピュータシステムメモリ空間内のロケーションを決定すること、および(2)最後のファームウェアアプリケーションモジュールの出力を、コンピュータシステムメモリ内の決定されたロケーションに転送することをさらに含む、請求項10に記載の方法。
【請求項12】
ファームウェアアプリケーションモジュールパイプラインにターゲットデータが供給されるべき順序と同一の順序で、隣接するメモリアドレスでコンピュータシステムメモリ空間内にターゲットデータを格納することをさらに含む、請求項10に記載の方法。
【請求項13】
管理するステップが、コンピュータシステムメモリ空間内でコマンドおよびターゲットデータが格納されたメモリ空間アドレスに対するポインタで第1のバッファをポピュレートすることを含む、請求項12に記載の方法。
【請求項14】
ポピュレートするステップが、ポインタに対応するコマンドおよびターゲットデータが、ファームウェアアプリケーションモジュールパイプラインに供給されるべき順序と同一の順序で、第1のバッファの中にポインタを格納することを含む、請求項13に記載の方法。
【請求項15】
再構成可能なロジックデバイスが、FPGA(フィールドプログラマブルゲートアレイ)を含む、請求項4に記載の方法。
【請求項16】
再構成可能なロジックデバイス上に配備された少なくとも1つのファームウェアアプリケーションモジュールへのデータおよびコマンドのフローを制御するための方法であって、
コマンドが、少なくとも1つのファームウェアアプリケーションモジュールによるデータの処理を制御するための命令を含み、
前記少なくとも1つのファームウェアアプリケーションモジュールに至る共通の通信パスを提供すること、および
コマンドとデータの両方を、共通の通信パスを介して前記少なくとも1つのファームウェアアプリケーションモジュールに送ることを含む、方法。
【請求項17】
少なくとも1つのファームウェアアプリケーションモジュールが、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含み、送るステップが、インタリーブされたコマンドとデータのストリームを、パイプラインにおけるファームウェアアプリケーションモジュールの第1のモジュールに送ることを含む、請求項16に記載の方法。
【請求項18】
少なくとも複数のコマンドが、パイプラインにおけるファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項17に記載の方法。
【請求項19】
データ処理パイプラインと通信するファームウェアソケットモジュールを含み、前記データ処理パイプラインが、少なくとも1つの再構成可能なロジックデバイス上に配備され、ファームウェアソケットモジュールが、コマンドとターゲットデータの両方に共通の通信パスを介して、データ処理パイプラインへのコマンドとターゲットデータの両方の伝搬を制御するように構成され、各コマンドが、データ処理パイプラインによって実行されるべきデータ処理動作を制御し、ターゲットデータが、データ処理パイプラインが、命令されたデータ処理動作を実行する対象となるデータに対応する、データ処理デバイス。
【請求項20】
ファームウェアソケットモジュールも、少なくとも1つの再構成可能なロジックデバイス上に配備される、請求項19に記載のデータ処理デバイス。
【請求項21】
データ処理パイプラインが、直列に接続された複数のファームウェアアプリケーションモジュールを含み、ファームウェアソケットモジュールが、データ処理パイプラインに入る入口点に、所定の順序でコマンドおよびターゲットデータを供給するように構成され、所定の順序が、データ処理パイプライン全体にわたって保たれる、請求項20に記載のデータ処理デバイス。
【請求項22】
ファームウェアソケットモジュールが、(1)外部入力記述子プールバッファにアクセスして、外部メモリ空間内のどこに、データ処理パイプラインに送られるべきコマンドおよびターゲットデータが格納されているかを特定するように構成され、入力記述子プールバッファが、コマンドおよびターゲットデータがデータ処理パイプラインに送られるべき順序を定義し、さらに、ファームウェアソケットモジュールが、(2)定義された順序に従って、外部メモリ空間からデータ処理パイプラインに、特定されたコマンドおよびターゲットデータを転送するように構成される、請求項21に記載のデータ処理デバイス。
【請求項23】
再構成可能なロジックデバイスが、FPGA(フィールドプログラマブルゲートアレイ)を含み、ファームウェアソケットモジュールが、ファームウェアソケットモジュールと、データ処理パイプラインからの出口点との間の別の通信パスを有し、ファームウェアソケットモジュールが、さらなる通信パスを介してデータ処理パイプラインからの出力を受け取るようにさらに構成される、請求項22に記載のデータ処理デバイス。
【請求項24】
ファームウェアソケットモジュールが、(1)第1の外部出力記述子プールバッファにアクセスして、データ処理パイプラインからのコマンド出力が格納されるべきメモリ空間内のロケーションを特定し、(2)第2の外部出力記述子プールバッファにアクセスして、データ処理パイプラインからのターゲットデータ出力が格納されるべきメモリ空間内のロケーションを特定し、(3)データ処理パイプラインからのコマンド出力およびターゲットデータ出力を、メモリ空間内のそれぞれの特定されたロケーションに書き込むようにさらに構成される、請求項23に記載のデータ処理デバイス。
【請求項25】
プロセッサと、
プロセッサによって管理されるメモリ空間と、
配備された少なくとも1つのファームウェアアプリケーションモジュールと、少なくとも1つのファームウェアアプリケーションモジュールをプロセッサおよびメモリに結び付けるファームウェアソケットモジュールとを含み、ファームウェアソケットモジュールと少なくとも1つのファームウェアアプリケーションモジュールが、通信パスを介して互いに通信する再構成可能なロジックデバイスと、
再構成可能なロジックデバイスが、プロセッサおよびメモリ空間と通信するバスとを含むデータ処理システムであって、
ファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るデータストリームに対してデータ処理動作を実行するように構成され、
ファームウェアソケットモジュールが、メモリ空間から複数のコマンドとターゲットデータとの両方を受け取るように構成され、
ファームウェアソケットモジュールが、コマンドとターゲットデータの両方を、ファームウェアソケットモジュールと、少なくとも1つのファームウェアアプリケーションモジュールとの間の同一の通信パスを介して少なくとも1つのファームウェアアプリケーションモジュールに供給するように構成され、各コマンドが、少なくとも1つのファームウェアアプリケーションモジュールによって実行されるデータ処理動作を制御し、ターゲットデータが、少なくとも1つのファームウェアアプリケーションモジュールのデータ処理動作が実行される対象であるデータを含む、システム。
【請求項26】
ファームウェアソケットモジュールが、(1)コマンドおよびターゲットデータを、インタリーブされ、順序付けられたコマンドとターゲットデータのストリームとして受け取り、(2)ファームウェアソケットモジュールが、同一の通信パスを介してストリームを少なくとも1つのファームウェアアプリケーションモジュールに供給する際に、順序、または順序付けられたコマンドとターゲットデータを保つようにさらに構成される、請求項25に記載のシステム。
【請求項27】
再構成可能なロジックデバイスが、FPGA(フィールドプログラマブルゲートアレイ)を含む、請求項26に記載のシステム。
【請求項28】
少なくとも1つのファームウェアアプリケーションモジュールが、パイプラインに構成された複数のファームウェアアプリケーションモジュールを含み、パイプラインにおけるファームウェアアプリケーションモジュールのそれぞれが、ストリームのコマンドおよびターゲットデータを、ファームウェアソケットモジュールが、コマンドおよびターゲットデータを供給したのと同一の順序で、順次に処理するように構成される、請求項27に記載のシステム。
【請求項29】
複数のコマンドが、パイプラインにおけるファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項28に記載のシステム。
【請求項30】
ファームウェアアプリケーションモジュールとファームウェアソケットモジュールが、チェーンに構成され、ファームウェアソケットモジュールが、インタリーブされ、順序付けられたコマンドとターゲットデータのストリームを、パイプラインにおけるファームウェアアプリケーションモジュールの第1のモジュールに供給する、請求項28に記載のシステム。
【請求項31】
プロセッサが、複数のコマンドに対応するデータ、および複数のデータストリームに対応するデータが、前記順序で格納されるバッファを保持するデバイスドライバを有してさらに構成され、ファームウェアソケットモジュールが、バッファにアクセスして、ファームウェアアプリケーションモジュールを介して処理されるべきコマンドおよびデータストリームを特定するように構成される、請求項28に記載のシステム。
【請求項32】
コマンドおよびターゲットデータが、複数のメモリアドレスでメモリ空間内に格納され、バッファの中に格納された複数のコマンドに対応するデータ、およびターゲットデータに対応するデータが、対応するコマンドおよびターゲットデータが格納されているメモリアドレスに対する複数のポインタを含む、請求項31に記載のシステム。
【請求項33】
チェーンを通してグループとして処理されるべきターゲットデータが、メモリアドレスに対するポインタが、バッファの中に格納されるのと同一の順序で、隣接するメモリアドレスに格納される、請求項32に記載のシステム。
【請求項34】
データ処理動作が、検索動作、暗号化動作、解読動作、圧縮動作、伸張動作、およびデータ縮約動作から成るグループの少なくとも2つの動作を含む、請求項27に記載のシステム。
【請求項35】
コンピュータシステムのバスに接続するためのデータ処理カードであって、
ファームウェアアプリケーションモジュールパイプラインおよびファームウェアモジュールが配備された再構成可能なロジックデバイスを含み、
ファームウェアモジュールが、ファームウェアアプリケーションモジュールパイプラインを、ターゲットデータおよびコマンドの少なくとも1つの外部源に結び付けるように構成され、コマンドが、ファームウェアアプリケーションモジュールパイプラインが、ターゲットデータをどのように処理するかを制御し、
ファームウェアアプリケーションモジュールパイプラインが、シーケンスで配置された複数のファームウェアアプリケーションモジュールを含み、各ファームウェアアプリケーションモジュールが、ターゲットデータに対してデータ処理動作を実行するように構成され、ファームウェアアプリケーションモジュールパイプラインが、ファームウェアモジュールから、シーケンスのファームウェアアプリケーションモジュールの第1のモジュールに至るエントリ通信パスを有し、
ファームウェアモジュールが、エントリ通信パスを介して、インタリーブされたコマンドとターゲットデータのストリームを、シーケンスにおけるファームウェアアプリケーションモジュールの第1のモジュールに供給することによって、ファームウェアアプリケーションモジュールパイプラインがターゲットデータをどのように処理するかを制御するようにさらに構成され、コマンドとターゲットデータが、ストリーム内で定義された順序を有し、
ファームウェアモジュールが、外部バッファの中に格納されたエントリを読み取って、ファームウェアアプリケーションモジュールパイプラインに供給されるべきコマンドおよびターゲットデータを決定するように構成され、外部バッファの中のエントリの順序が、ストリーム内のコマンドとターゲットデータの順序を定義し、
ファームウェアアプリケーションモジュールパイプラインが、ファームウェアアプリケーションモジュールのシーケンスを通るストリームのコマンドおよびターゲットデータを、それらのコマンドおよびターゲットデータが、ストリーム内で順序付けられていたのと同一の順序で順に処理するように構成される、カード。
【請求項36】
外部バッファエントリが、コマンドおよびターゲットデータが格納されている少なくとも1つの外部源内のアドレスに対するポインタを含み、ファームウェアモジュールが、少なくとも1つの外部源にアクセスして、アドレスから、定義された順序に従ってコマンドおよびターゲットデータを取り出すようにさらに構成される、請求項35に記載のデータ処理カード。
【請求項37】
複数のコマンドが、シーケンスにおけるファームウェアアプリケーションモジュールの個々のモジュールに固有である、請求項36に記載のデータ処理カード。
【請求項38】
コマンドの少なくとも1つが、シーケンスにおけるファームウェアアプリケーションモジュールの1つへのパススルーコマンドを含む、請求項37に記載のデータ処理カード。
【請求項39】
コマンドによって定義されるデータ処理動作が、検索動作、データ縮約動作、暗号化動作、解読動作、圧縮動作、伸張動作、およびパススルー動作から成るグループの少なくとも2つの動作を含む、請求項37に記載のデータ処理カード。
【請求項40】
ファームウェアアプリケーションモジュールパイプラインが、シーケンスにおけるファームウェアアプリケーションモジュールの最後のモジュールからファームウェアモジュールに至るエグジット通信パスをさらに有し、シーケンスにおけるファームウェアアプリケーションモジュールの最後のモジュールによって実行される各データ処理動作が、出力を生成し、ファームウェアモジュールが、(1)シーケンスにおけるファームウェアアプリケーションモジュールの最後のモジュールからの出力を、エグジット通信パスを介して受け取り、(2)外部バッファの中に格納されたエントリを読み取って、出力が格納されるべき少なくとも1つの外部源内の複数のロケーションを決定し、(3)決定されたロケーションで少なくとも1つの外部源に出力を書き込むようにさらに構成される、請求項39に記載のデータ処理カード。
【請求項41】
再構成可能なロジックデバイスが、FPGA(フィールドプログラマブルゲートアレイ)を含む、請求項35に記載のデータ処理カード。
【請求項42】
ソフトウェアを介して再構成可能なロジックデバイスを通るデータの処理を制御するシステムであって、
複数のメモリアドレスにデータが格納されるメモリ空間を管理するように構成された、プロセッサによって実行されるためのデバイスドライバソフトウェアと、
バスを介してデバイスドライバソフトウェアおよびメモリ空間と通信するための再構成可能なロジックデバイスとを含み、
少なくとも1つのファームウェアアプリケーションモジュール、およびファームウェアソケットモジュールが、再構成可能なロジックデバイス上に配備され、
少なくとも1つのファームウェアアプリケーションモジュールが、ファームウェアアプリケーションモジュールが受け取るターゲットデータに対してデータ処理動作を実行するように構成され、
デバイスドライバソフトウェアが、複数のコマンドをメモリ空間内に格納するように構成され、各コマンドが、少なくとも1つのファームウェアアプリケーションモジュールによって実行されるべきデータ処理動作を制御することに向けられ、
デバイスドライバソフトウェアが、コマンドおよびデータが、少なくとも1つのファームウェアアプリケーションモジュールを通して処理されるべき順序を定義する入力記述子プールバッファをメモリ空間内に保持するようにさらに構成され、
ファームウェアソケットモジュールが、(1)入力記述子プールバッファにアクセスして、少なくとも1つのファームウェアアプリケーションモジュールを通して処理されるべき順序付けられたコマンドおよびデータを特定し、(2)メモリ空間にアクセスして、定義された順序に従って、コマンドおよびデータを少なくとも1つのファームウェアアプリケーションモジュールに転送するように構成される、システム。
【請求項43】
少なくとも1つのファームウェアアプリケーションモジュールが、第1のファームウェアアプリケーションモジュールを含むパイプライン化されたシーケンスに配置された複数のファームウェアアプリケーションモジュールを含み、ファームウェアソケットモジュールが、通信パスを介して、パイプライン化されたシーケンスの第1のファームウェアアプリケーションモジュールと通信しており、ファームウェアソケットモジュールが、コマンドとデータを、同一の通信パスを介して、パイプライン化されたシーケンスにおける第1のファームウェアアプリケーションモジュールに転送するようにさらに構成される、請求項42に記載のシステム。
【請求項44】
各コマンドが、そのコマンドが適用可能であるパイプライン化されたシーケンスにおけるファームウェアアプリケーションモジュールを特定するファームウェアアプリケーションモジュール識別子を含む、請求項43に記載のシステム。
【請求項45】
デバイスドライバソフトウェアが、ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスを通して処理されるべきコマンドおよびデータが格納されているメモリ空間内のメモリアドレスに対する複数のポインタをデバイスドライバソフトウェアの中に格納することによって、入力記述子プールバッファを保持するようにさらに構成され、入力記述子プールバッファの中のポインタの順序が、ファームウェアソケットモジュールによってファームウェアアプリケーションモジュールのパイプライン化されたシーケンスにコマンドおよびデータが供給される順序を定義する、請求項44に記載のシステム。
【請求項46】
再構成可能なロジックデバイスが、FPGA(フィールドプログラマブルゲートアレイ)を含み、システムが、プロセッサによって実行されるためのアプリケーションソフトウェアと、プロセッサによって実行されるためのモジュールアプリケーションプログラミングインタフェースソフトウェアとをさらに含み、アプリケーションソフトウェアが、(1)ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスによって実行されるべき少なくとも1つのデータ処理動作と、(2)ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスが、少なくとも指定されたデータ処理動作を実行する対象となるデータとを指定する入力をユーザから受け取るように構成され、モジュールアプリケーションプログラミングインタフェースソフトウェアが、アプリケーションソフトウェアをデバイスドライバソフトウェアに結び付けるように構成されて、デバイスドライバソフトウェアが、入力記述子プールバッファおよびメモリ空間をユーザ入力に従って適切に管理するようにする、請求項45に記載のシステム。
【請求項47】
前記デバイスドライバソフトウェアが、ファームウェアアプリケーションモジュールのパイプライン化されたシーケンスにデータが供給されるべき順序と同一の順序で、メモリ空間の隣接するメモリアドレスに、パイプライン化されたシーケンスを通して処理されるべきデータを格納するようにさらに構成される、請求項45に記載のシステム。
【請求項48】
少なくとも1つの再構成可能なロジックデバイス上に配備されたファームウェアアプリケーションモジュールのパイプラインを、再構成可能なロジックデバイスの外部にあるメモリ空間に結び付けるためのデバイスであって、
少なくとも1つの再構成可能なロジックデバイス上に配備されたファームウェアモジュールを含み、ファームウェアモジュールが、(1)外部メモリ空間にシリアルアクセスして、複数のコマンド、および複数のターゲットデータグループを或る順序で取り出し、(2)取り出されたコマンドとターゲットデータグループの両方を、ファームウェアモジュールをパイプラインの入口点に接続する共通の通信パスを介して、同一の順序で単一のインタリーブされたストリームとして、パイプラインの入口点に送るように構成され、パイプラインにおける各ファームウェアアプリケーションモジュールが、そのファームウェアアプリケーションモジュールが受け取るターゲットデータに対してデータ処理動作を実行するように構成され、各コマンドが、パイプラインにおける少なくとも1つのファームウェアアプリケーションモジュールのデータ処理動作を制御するように構成される、デバイス。
【請求項49】
ファームウェアモジュールが、外部プロセッサによって実行されるソフトウェアプログラムによって、外部メモリ空間内に格納された順序付けられた記述子セットを読み取ることにより、いずれのコマンド、およびいずれのターゲットデータグループが、外部メモリ空間から取り出されるべきかを決定するようにさらに構成され、順序付けられた記述子セットが、コマンドとターゲットデータグループが、ストリームの中でインタリーブされるべき順序を定義する、請求項48に記載のデバイス。
【図1】
【図2】
【図3a】
【図3b】
【図4】
【図5】
【図6a】
【図6b】
【図6c】
【図6d】
【図6e】
【図6f】
【図6g】
【図6h】
【図6i】
【図6j】
【図6k】
【図6l】
【図6m】
【図6n】
【図6o】
【図7】
【図8】
【図2】
【図3a】
【図3b】
【図4】
【図5】
【図6a】
【図6b】
【図6c】
【図6d】
【図6e】
【図6f】
【図6g】
【図6h】
【図6i】
【図6j】
【図6k】
【図6l】
【図6m】
【図6n】
【図6o】
【図7】
【図8】
【公表番号】特表2009−528584(P2009−528584A)
【公表日】平成21年8月6日(2009.8.6)
【国際特許分類】
【出願番号】特願2008−552538(P2008−552538)
【出願日】平成19年1月22日(2007.1.22)
【国際出願番号】PCT/US2007/060835
【国際公開番号】WO2007/087507
【国際公開日】平成19年8月2日(2007.8.2)
【出願人】(508137947)エクセジー・インコーポレイテツド (5)
【出願人】(500204278)ワシントン ユニヴァーシティー (14)
【Fターム(参考)】
【公表日】平成21年8月6日(2009.8.6)
【国際特許分類】
【出願日】平成19年1月22日(2007.1.22)
【国際出願番号】PCT/US2007/060835
【国際公開番号】WO2007/087507
【国際公開日】平成19年8月2日(2007.8.2)
【出願人】(508137947)エクセジー・インコーポレイテツド (5)
【出願人】(500204278)ワシントン ユニヴァーシティー (14)
【Fターム(参考)】
[ Back to top ]