(57)【特許請求の範囲】
【請求項１】
データ分析システムであって、
分析されるデータを受信するように構成されるデータバッファと、
複数の構成可能素子を備え、各々の構成可能素子が、前記データの少なくとも一部分を分析し、前記分析の結果を出力するように構成される複数のメモリセルを備える、状態機械格子と、
前記データを前記データバッファから受信し、前記データを前記状態機械格子に提供するように構成される、前記データバッファが、データバーストを介してバッファインターフェースにデータを提供するように構成され、各データバーストは、複数の状態機械格子のそれぞれ用にデータの所定の一部を含むバッファインターフェースと、
を備える、データ分析システム。
【請求項２】
前記データバッファは、第１のデータバッファおよび第２のデータバッファを含み、前記第１および第２のデータバッファの各々が、データを受信し、データを前記バッファインターフェースに提供するように構成される、請求項１に記載のシステム。
【請求項３】
前記第１のデータバッファは、前記第２のデータバッファがデータを前記バッファインターフェースに提供している間にデータを受信するように構成され、前記第２のデータバッファは、前記第１のデータバッファがデータを前記バッファインターフェースに提供している間にデータを受信するように構成される、請求項２に記載のシステム。
【請求項４】
前記データバッファは、前記データをデータブロックとして受信するように構成され、各々のデータブロックは、複数の状態機械格子のうちの１つに対応する、請求項１に記載のシステム。
【請求項５】
前記データバッファは、１つ、２つ、４つ、または８つのデータブロックを受信するように構成される、請求項４に記載のシステム。
【請求項６】
前記データバッファは、前記データをデータブロック群として受信するように構成され、各々のデータブロック群は、前記複数の状態機械格子のうちの各々に対するデータブロックを含む、請求項１に記載のシステム。
【請求項７】
前記データバッファは、交互発生するパターンで、データブロック群の各々のデータブロックの所定の部分を、前記データブロック群の各々のデータブロックが記憶されるまで記憶するように構成され、前記交互発生するパターンは、各々のデータブロック間で交互に発生する、請求項６に記載のシステム。
【請求項８】
各々のデータブロックの前記所定の部分は、８バイト、１６バイト、３２バイト、または６４バイトのデータを含む、請求項７に記載のシステム。
【請求項９】
データの前記所定の部分は、１バイト、２バイト、４バイト、または８バイトのデータを含む、請求項１に記載のシステム。
【請求項１０】
前記複数の状態機械格子の各々に結合される１つ以上の処理バッファを備え、各々の処理バッファは、そのそれぞれの状態機械格子に対応する各々のデータバーストからデータの前記所定の部分を判定するように構成される、請求項１に記載のシステム。
【請求項１１】
前記データバッファは、前記分析されるデータに対応する命令を受信するように構成される命令バッファを含む、請求項１に記載のシステム。
【請求項１２】
データ分析システムであって、
複数の状態機械エンジンであって、各々が複数のデータ分析素子を有する状態機械格子を備え、各々のデータ分析素子が、データの少なくとも一部分を分析し、前記分析の結果を出力するように構成される複数のメモリセルを備える、複数の状態機械エンジンと、
前記複数の状態機械エンジンの各々に結合され、前記データを受信し、前記データを前記複数の状態機械エンジンに提供するように構成される、バッファインターフェースと、
分析されるべき前記データを受信し、前記データを前記バッファインターフェースに提供するように構成され、データバッファは、データブロック群として前記データを受信するように構成され、データブロックの各群は、前記複数の状態機械エンジンのそれぞれ用のデータブロックを含み、前記データブロックの少なくとも１つは、バイトパッディングと組み合わされる有効データを含む、データバッファと、
を備える、データ分析システム。
【請求項１３】
前記データバッファは、命令バッファを含み、前記命令バッファが、バイトパディングを含むデータブロックの部分を特定する命令を受信するように構成される、請求項１２に記載のシステム。
【請求項１４】
前記データバッファは、複数の命令群を受信するように構成され、各々の命令群が、データブロック群に関連するデータを含む、請求項１２に記載のシステム。
【請求項１５】
各々のデータブロック群は、複数の領域を含み、各々の命令群が、前記複数の領域の各々に関連するデータを含む、請求項１４に記載のシステム。
【請求項１６】
前記複数の領域の各々に関連する前記データは、前記それぞれの領域中の総バイト数と、前記それぞれの領域中の前記データブロックの各々に対する総有効データバイト数とを含む、請求項１５に記載のシステム。
【請求項１７】
前記複数の状態機械エンジンの各々は、前記総バイト数と前記総有効データバイト数との間の差に対応するデータを無視するように構成される、請求項１６に記載のシステム。
【請求項１８】
前記複数の状態機械エンジンは、１つ、２つ、４つ、または８つの状態機械エンジンを含む、請求項１２に記載のシステム。
【請求項１９】
前記データを解析するように構成され、前記複数の状態機械エンジンを含む、単一の論理群を含む、請求項１２に記載のシステム。
【請求項２０】
前記データを分析するように構成された複数の論理群を含み、前記複数の論理群の各論理群は、前記複数の状態機械エンジンの少なくとも１つを含む、請求項１２に記載のシステム。
【請求項２１】
前記複数の論理群の各論理群は、前記データを受信し、前記データの所定の一部を分析するように構成されている、請求項２０に記載のシステム。
【請求項２２】
前記複数の論理群の各論理群は、前記データを受信し、前記複数の論理群の他の論理群と並列して前記データを分析するように構成され、各論理群によって分析される前記データは同一である、請求項２０に記載のシステム。
【請求項２３】
前記複数の状態機械エンジンの各状態機械エンジンは、各状態機械エンジンに割り当てられたデータを分析するように構成される、請求項１２に記載のシステム。
【請求項２４】
前記複数の状態機械エンジンの各状態機械エンジンは、前記バッファインターフェースに提供されるデータバーストの所定の一部をラッチするように構成される、請求項１２に記載のシステム。
【請求項２５】
前記データバッファは、オフセットして前記データを格納し、オフセットなしで、前記バッファインターフェースに前記データを提供するように構成される、請求項１２に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、一般的には、電子デバイスに関し、より具体的には、ある実施形態では、データ分析のための並列デバイスを持つ電子デバイスに関する。
【背景技術】
【０００２】
［関連技術の説明］
複雑なデータ分析（例えば、パターン認識）は、従来のフォンノイマン式コンピュータ上で実施するには非効率的でありうる。生物の頭脳、特に人間の頭脳は、しかしながら、複雑なデータ分析は得意である。現在の研究は、人間の頭脳は、新皮質中の一連の階層的に組織化されたニューロン層を用いてデータ分析を実施することを示唆している。階層のより低い層中のニューロンは、例えば感覚器官からの「生の信号」を分析し、より高い層中のニューロンは、より低い水準のニューロンからの信号を分析する。新皮質中のこの階層的システムは、おそらくは頭脳の他のエリアと組み合わされて複雑なデータ分析を遂行し、この分析が、人間が、空間的推論、意識的思考、および複雑な言語などの高い水準の機能を実施することを可能とする。
【０００３】
コンピューティングの分野では、パターン認識タスクは、例えば、ますます意欲をそそるようになっている。さらにより多量のデータがコンピュータ間で伝達され、ユーザが検出することを希望するパターンの数は増している。例えば、スパムまたはマルウエアが、データストリーム、例えば特定のフレーズまたはコードの一部の中のパターンを検索することによって、しばしば検出される。パターンの数は、スパムおよびマルウエアの多様性と共に増加するが、それは、新しい変形を検索するために、新しいパターンが実装され得るからである。これらのパターンの各々を求めてデータストリームを検索することによって、コンピューティング上のボトルネックが形成されかねない。しばしば、データストリームが受信されると、それが、一つずつ、各々のパターンを求めて検索される。システムがデータストリームの次の部分を検索する準備がなるまでの遅延は、パターンの数と共に増加する。したがって、パターン認識は、データの受信を遅速化する。
【０００４】
ハードウエアは、パターンを求めてデータストリームを検索するように設計されてきたが、このハードウエアは、しばしば、所与の時間内で適切な量のデータを処理することが不可能である。データストリームを検索するように構成される一部のデバイスは、データストリームを複数の回路間に分散させることによってそのように実行する。これらの回路は各々が、データストリームがパターンの一部分に適合するかどうかを判定する。しばしば、多数の回路が並列に動作して、各々が、ほぼ同時にデータストリームを検索する。しかしながら、生物の頭脳により匹敵する様式で複雑なデータ分析を実施することを効果的に可能とするシステムは存在しなかった。このようなシステムの開発が望ましい。
【図面の簡単な説明】
【０００５】
【図１】本発明の様々な実施形態に関わる、状態機械エンジンを有するシステムの例を示す。
【図２】本発明の様々な実施形態に関わる、図１の状態機械エンジンの有限状態機械（ＦＳＭ）格子の例を示す。
【図３】本発明の様々な実施形態に関わる、図２のＦＳＭ格子のブロックの例を示す。
【図４】本発明の様々な実施形態に関わる、図３のブロックの行の例を示す。
【図５】本発明の様々な実施形態に関わる、図４の行のうちの２つずつの群の例を示す。
【図６】本発明の様々な実施形態に関わる、有限状態機械グラフの例を示す。
【図７】本発明の様々な実施形態に関わる、ＦＳＭ格子で実装される２水準階層の例を示す。
【図８】本発明の様々な実施形態に関わる、コンパイラがソースコードを図２のＦＳＭ格子のプログラミング用の二進法ファイルに変換するための方法の例を示す。
【図９】本発明の様々な実施形態に関わる、状態機械エンジンを示す。
【図１０】本発明の様々な実施形態に関わる、デバイスのランクに配列された複数の物理的状態機械エンジンの例を示す。
【図１１】本発明の様々な実施形態に関わる、状態機械エンジンに提供されるようにデータブロックに群分けされたデータセグメントの例を示す。
【図１２】本発明の様々な実施形態に関わる、図１１のデータブロックのデータセグメント間に挿入されるデータパディングの例を示す。
【図１３】本発明の様々な実施形態に関わる、図１２のデータブロックのデータセグメントの後に挿入されるデータパディングの例を示す。
【図１４】本発明の様々な実施形態に関わる、状態機械エンジンのデータバッファシステムに伝達されるように組織化された図１３のデータブロックの例を示す。
【図１５】本発明の様々な実施形態に関わる、状態機械エンジンによって受信されるデータブロックの例を示す。
【図１６】本発明の様々な実施形態に関わる、状態機械エンジンのデータバッファシステムに記憶される図１５のデータブロックの例を示す。
【図１７】本発明の様々な実施形態に関わる、複数のＦＳＭ格子にデータバッファシステムから提供されているデータの例を示す。
【図１８】本発明の様々な実施形態に関わる、複数の論理群中に提供されているデータの例を示す。
【発明を実施するための形態】
【０００６】
ここで図面に目を転じると、図１は、一般に参照番号１０で示されるプロセッサベースのシステムの実施形態を示す。システム１０（例えば、データ分析システム）は、デスクトップコンピュータ、ラップトップコンピュータ、ポケベル、携帯電話、自己管理手帳、携帯式オーディオプレイヤー、制御回路、カメラなどの様々なタイプのうちの任意のものであり得る。システム１０はまた、ルーター、サーバ、またはクライアント（例えば、既に述べたタイプのコンピュータのうちの１つ）などのネットワークノードであり得る。システム１０は、コピー機、スキャナ、プリンタ、ゲーム機、テレビ、セットトップビデオ分配もしくは記録システム、ケーブルボックス、パーソナルデジタルメディアプレイヤー、ファクトリーオートメーションシステム、自動車コンピュータシステム、または医療デバイスなどのなんらかの他の種類の電子デバイスであり得る。（これらの様々なシステムの例を説明するために用いられる用語は、本明細書で用いられる他の用語と同様に、他の参照符号を共有し得るため、列挙された他の項目のゆえに狭義に解釈されるべきではない。）
【０００７】
システム１０などの一般的なプロセッサベースのデバイスにおいては、マイクロプロセッサなどのプロセッサ１２は、システム１０中でのシステム機能および要求の処理を制御する。さらに、プロセッサ１２は、システム制御を共有する複数のプロセッサを備え得る。プロセッサ１２は、システム１０中の素子の各々に直接にまたは間接に結合され得るため、プロセッサ１２は、システム１０の内部またはシステム１０の外部に記憶され得る命令を実行することによって、システム１０を制御する。
【０００８】
本明細書に説明する実施形態によれば、システム１０は、プロセッサ１２の制御下で動作し得る状態機械エンジン１４を含む。本明細書で用いられる状態機械エンジン１４は、単一のデバイス（例えば、単一のチップ）のことである。状態機械エンジン１４は、オートマトン理論を用い得る。例えば、状態機械エンジン１４は、これらに限られないが、ミーリーアーキテクチャ、ムーアアーキテクチャ、有限状態機械（ＦＳＭ）、決定性ＦＳＭ（ＤＦＳＭ）、ビットパラレル状態機械（ＢＰＳＭ）などを含むいくつかの状態機械アーキテクチャのうちの１つを用い得る。様々なアーキテクチャが用いられ得るとはいえ、説明目的のため、応用分野はＦＳＭのことである。しかしながら、当業者は、説明する技法は、様々な状態機械アーキテクチャのうちの任意の１つを用いて採用され得ることを理解するであろう。
【０００９】
以下にさらに説明するように、状態機械エンジン１４は、いくつかの（例えば、１以上の）有限状態機械（ＦＳＭ）格子（例えば、チップのコア）を含み得る。この応用分野の目的上、「格子」という用語は、素子（例えば、ブールセル、カウンタセル、状態機械素子、状態遷移素子）の組織化されたフレームワーク（例えば、ルーティングマトリックス、ルーティングネットワーク、フレーム）のことである。さらに、「格子」は、任意の適切な形状、構造、または階層的組織（例えば、グリッド、キューブ、球、カスケード）を有し得る。各々のＦＳＭ格子は、各々が同じデータを並列に受信して分析する複数のＦＳＭを実装し得る。さらに、ＦＳＭ格子は、群（例えば、クラスタ）に配列され得て、それにより、ＦＳＭ格子のクラスタは、同じ入力データを並列に分析し得る。さらに、状態機械エンジン１４のＦＳＭ格子のクラスタは、階層構造のより低い水準の状態機械格子からの出力はより高い水準の状態機械格子に対する入力として用いられ得る階層構造に配列され得る。状態機械エンジン１４の並列ＦＳＭ格子のクラスタを、階層構造を介して直列にカスケーディングすることによって、ますます複雑なパターンが分析され得る（例えば、評価され得る、探索され得るなど）。
【００１０】
さらに、状態機械エンジン１４の階層的並列構成に基づいて、状態機械エンジン１４は、高処理速度を利用するシステムにおいて複雑なデータ分析（例えば、パターン認識）のために用いられ得る。例えば、本明細書に説明する実施形態は、１ギガバイト／秒の処理速度を持つシステムに組み込まれ得る。したがって、状態機械エンジン１４を利用して、高速メモリデバイスまたは他の外部デバイスからのデータは迅速に分析され得る。状態機械エンジン１４は、ほぼ同時に、例えば、単一のデバイスサイクル中で、データストリームをいくつかの基準（例えば、検索項目）に従って分析し得る。状態機械エンジン１４のある水準上のＦＳＭのクラスタ内のＦＳＭ格子の各々は、各々、ほぼ同時にデータストリームから同じ検索項目を受信し、並列ＦＳＭ格子の各々は、その項目が状態機械エンジン１４を処理基準中の次の状態に前進させるかどうかを判定し得る。状態機械エンジン１４は、比較的多数の基準、例えば、１００を超える、１１０を超える、または１０，０００を超える基準に従って項目を分析し得る。それらは並列に動作するため、それらは、基準を比較的高い帯域幅を有するデータストリーム、例えば、１ギガバイト／秒を超えるまたはほぼ等しいデータストリームに、そのデータストリームを遅速化することなく、適用し得る。
【００１１】
１つの実施形態では、状態機械エンジン１４は、データストリーム中の多数のパターンを認識する（例えば、検出する）ように構成され得る。例えば、状態機械エンジン１４は、ユーザまたは他のエンティティが分析することを希望する様々なタイプのデータストリームのうちの１つ以上の中のパターンを検出するために利用され得る。例えば、状態機械エンジン１４は、インターネットを介して受信されたパケットまたはセルラーネットワークを介して受信された音声もしくはデータなどのネットワークを介して受信されたデータのストリームを分析するように構成され得る。１つの実施形態では、状態機械エンジン１４は、スパムまたはマルウエアに対しデータストリームを分析するように構成され得る。データストリームは、データが、時間的、語彙的、または意味論的に意味のある順序などの意味を有する順序で受信される、直列のデータストリームとして受信され得る。代替的には、データストリームは、並列にまたはバラバラの順序で受信され、次に、例えば、インターネットを介して受信されたパケットを再順序付けすることによって、直列のデータストリームに変換され得る。一部の実施形態では、データストリームは、項目を直列に表すが、項目の各々を表現するビットは並列に受信され得る。データストリームは、システム１０の外部のソースから受信される、または、メモリ１６などのメモリデバイスに質問して、メモリ１６に記憶されているデータからデータストリームを形成することによって形成され得る。他の例では、状態機械エンジン１４は、ある語を綴る一連の文字、遺伝子を指定する一連の遺伝子塩基対、イメージの一部分を形成する写真もしくは動画ファイル内の一連のビット、プログラムの一部を形成する実行可能ファイル中の一連のビット、または歌もしくは話されたフレーズの一部を形成するオーディオファイル中の一連のビットを認識するように構成され得る。分析されるデータのストリームは、二進法形式または他の形式、例えば、十進法、ＡＳＣＩＩなどの複数のデータビットを含み得る。このストリームは、一桁または複数桁、例えば、いくつかの二進法桁のデータを符号化し得る。
【００１２】
理解されるように、システム１０は、メモリ１６を含み得る。メモリ１６は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、同期式ＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレートＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、ＤＤＲ２  ＳＤＲＡＭ、ＤＤＲ３  ＳＤＲＡＭなどの揮発性メモリを含み得る。メモリ１６はまた、リードオンリーメモリ（ＲＯＭ）、ＰＣ−ＲＡＭ、シリコン・酸化物・窒化物・酸化物・シリコン（ＳＯＮＯＳ）メモリ、金属・酸化物・窒化物・酸化物・シリコン（ＭＯＮＯＳ）メモリ、多結晶浮遊ゲートベースメモリ、および／または揮発性メモリと共に用いられる様々なアーキテクチャ（例えば、ＮＡＮＤメモリ、ＮＯＲメモリなど）の他のタイプのフラッシュメモリなどの不揮発性メモリを含み得る。メモリ１６は、状態機械エンジン１４によって分析されるデータを提供し得る、ＤＲＡＭデバイスなどの１つ以上のメモリデバイスを含み得る。本明細書では、「提供する」という用語は、一般的に、方向付ける、入力する、挿入する、送出する、転送する、送信する、生成する、与える、出力する、置く、記述するなどのことであり得る。このようなデバイスは、ソリッドステートドライバ（ＳＳＤ）、ＭｕｌｔｉｍｅｄｉａＭｅｄｉａＣａｒｄｓ（ＭＭＣ）、ＳｅｃｕｒｅＤｉｇｉｔａｌ（ＳＤ）カード、ＣｏｍｐａｃｔＦｌａｓｈ（ＣＦ）カード、または任意の他の適切なデバイスと呼ばれ得るまたはこれらを含み得る。さらに、このようなデバイスは、ユニバーサルシリアルバス（ＵＳＢ）、周辺構成要素相互接続（ＰＣＩ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩ−Ｅ）、小型コンピュータシステムインターフェース（ＳＣＳＩ）、ＩＥＥＥ１３９４（Ｆｉｒｅｗｉｒｅ）、または任意の他の適切なインターフェースなどの任意の適切なインターフェースを介してシステム１０に結合し得ることを理解すべきである。フラッシュメモリデバイスなどのメモリ１６の動作を容易化するために、システム１０は、メモリコントローラ（図示せず）を含み得る。理解されるように、メモリコントローラは独立したデバイスであり得るか、または、それはプロセッサ１２と統合され得る。加えて、システム１０は、磁気記憶デバイスなどの外部記憶装置１８を含み得る。外部記憶装置もまた、入力データを状態機械エンジン１４に提供し得る。
【００１３】
システム１０は、いくつかのさらなる素子を含み得る。例えば、コンパイラ２０は、図８に関連してより詳細に説明するように、状態機械エンジン１４を構成する（例えば、プログラムする）ために用いられ得る。入力デバイス２２もまた、ユーザがデータをシステム１０に入力することを可能とするために、プロセッサ１２に結合され得る。例えば、入力デバイス２２は、状態機械エンジン１４によって後で分析されるように、データをメモリ１６に入力するために用いられ得る。入力デバイス２２は、例えば、ボタン、切り替え素子、キーボード、ライトペン、スタイラスペン、マウス、および／または音声認識システムを含み得る。ディスプレイなどの出力デバイス２４もまた、プロセッサ１２に結合され得る。ディスプレイ２４は、例えば、ＬＣＤ、ＣＲＴ、ＬＥＤ、および／またはオーディオディスプレイを含み得る。システムはまた、インターネットなどのネットワークとインターフェースをとるために、ネットワークインターフェースカード（ＮＩＣ）などのネットワークインターフェースデバイス２６を含み得る。理解されるように、システム１０は、システム１０の用途に応じて、多くの他の構成要素を含み得る。
【００１４】
図２〜５は、ＦＳＭ格子３０の例を示す。ある例では、ＦＳＭ格子３０は、ブロック３２のアレイを備える。説明されるように、各々のブロック３２は、ＦＳＭ中の複数の状態に対応する複数の選択的に結合可能なハードウエア素子（例えば、構成可能な素子および／または特殊目的の素子）を含み得る。ＦＳＭ中での状態に類似して、ハードウエア素子は、入力ストリームを分析して、この入力ストリームに基づいて下流のハードウエア素子を起動することが可能である。
【００１５】
構成可能素子は、多くの異なる機能を実装するように構成する（例えば、プログラムする）ことが可能である。例えば、構成可能素子は、行３８（図３および４に示す）およびブロック３２（図２および３に示す）に階層的に組織化される状態機械素子（ＳＭＥ）３４、３６（図５に示す）を含み得る。ＳＭＥはまた、状態遷移素子（ＳＴＥ）と考えられ得る。階層的に組織化されたＳＭＥ３４、３６の間で信号をルーティングするには、ブロック間切り替え素子４０（図２および３に示す）、ブロック内切り替え素子４２（図３および４に示す）、行内切り替え素子４４（図４に示す）を含む構成可能切り替え素子の階層を用いればよい。
【００１６】
以下に説明するように、切り替え素子は、ルーティング用の構造およびバッファを含み得る。ＳＭＥ３４、３６は、ＦＳＭ格子３０によって実装されたＦＳＭの状態に対応する。ＳＭＥ３４、３６は、以下に説明するように、構成可能な切り替え素子を用いることによって一緒に結合することが可能である。したがって、ＦＳＭは、ＳＭＥ３４、３６を状態の機能に対応するように構成し、ＳＭＥ３４、３６をＦＳＭ中の状態の間での遷移に対応するように選択的に結合することによって、ＦＳＭ格子３０上に実装することが可能である。
【００１７】
図２は、ＦＳＭ格子３０の例の全体図を示す。ＦＳＭ格子３０は、構成可能なブロック間切り替え素子４０と選択的に一緒に結合することが可能な複数のブロック３２を含む。ブロック間切り替え素子４０は、導線４６（例えば、ワイヤ、トレースなど）と、バッファ４８および５０とを含み得る。ある例では、バッファ４８および５０は、ブロック間切り替え素子４０への／からの信号の接続およびタイミングを制御するために含まれる。以下にさらに説明するように、バッファ４８はブロック３２間で送出されているデータをバッファリングするために提供され得るが、バッファ５０はブロック間切り替え素子４０間で送出されているデータをバッファリングするために提供され得る。加えて、ブロック３２は、信号（例えば、データ）を受信して、そのデータをブロック３２に提供するための入力ブロック５２（例えば、データ入力ポート）に選択的に結合することが可能である。ブロック３２はまた、ブロック３２からの信号を外部デバイス（例えば、別のＦＳＭ格子３０）に提供するための出力ブロック５４（例えば、出力ポート）に選択的に結合することが可能である。ＦＳＭ格子３０はまた、（例えば、イメージ、プログラムを介して）ＦＳＭ格子３０を構成するために、プログラミングインターフェース５６を含むことが可能である。イメージは、ＳＭＥ３４、３６の状態を構成する（例えば、設定する）ことが可能である。すなわち、イメージは、入力ブロック５２での所与の入力に対してある仕方で反応するようにＳＭＥ３４、３６を構成することが可能である。例えば、ＳＭＥ３４、３６は、文字「ａ」が入力ブロック５２で受信されたときに高信号を出力するように設定することが可能である。
【００１８】
ある例では、入力ブロック５２、出力ブロック５４、および／またはプログラミングインターフェース５６は、レジスタに対する書き込みまたはそこからの読み出しがそれぞれの素子へのまたはそこからのデータを提供するように、レジスタとして実装され得る。したがって、プログラミングインターフェース５６に対応するレジスタに記憶されているイメージからのビットを、ＳＭＥ３４、３６上にロードすることが可能である。図２はブロック３２、入力ブロック５２、出力ブロック５４、およびブロック間切り替え素子４０の間のある数の導線（例えば、ワイヤ、トレース）を示しているが、他の例では、より少ないまたはより多い導線が用いられ得ることを理解すべきである。
【００１９】
図３は、ブロック３２の例を示す。ブロック３２は、構成可能なブロック内切り替え素子４２と選択的に一緒に結合することが可能な複数の行３８を含むことが可能である。加えて、行３８は、ブロック間切り替え素子４０で、別のブロック３２内の別の行３８に選択的に結合することが可能である。行３８は、本明細書では２つずつの群（ＧＯＴ）６０と呼ばれる素子の対に組織化される複数のＳＭＥ３４、３６を含む。ある例では、ブロック３２は、１６（１６）の行３８を備える。
【００２０】
図４は、行３８の例を示す。ＧＯＴ６０は、構成可能な行内切り替え素子４４によって、行３８内の他のＧＯＴ６０および任意の他の素子（例えば、特殊目的素子５８）に選択的に結合することが可能である。ＧＯＴ６０はまた、ブロック内切り替え素子４２によって他の行３８中の他のＧＯＴ６０に対して、または、ブロック間切り替え素子４０によって他のブロック３２中の他のＧＯＴ６０に対して結合することが可能である。ある例では、ＧＯＴ６０は、第１および第２の入力部６２、６４ならびに出力部６６を有する。図５を参照してさらに例示されるように、第１の入力部６２はＧＯＴ６０の第１のＳＭＥ３４に結合され、第２の入力部６４はＧＯＴ６０の第２のＳＭＥ３６に結合される。
【００２１】
ある例では、行３８は、第１および第２の複数の行相互接続導線６８、７０を含む。ある例では、ＧＯＴ６０の入力部６２、６４は１つ以上の行相互接続導線６８、７０に結合することが可能であり、出力部６６は１つ以上の行相互接続導線６８、７０に結合することが可能である。ある例では、第１の複数の行相互接続導線６８は、行３８内の各々のＧＯＴ６０の各々のＳＭＥ３４、３６に結合することが可能である。第２の複数の行相互接続導線７０は、行３８内の各々のＧＯＴ６０の各々のたった１つのＳＭＥ３４、３６に結合することが可能であるが、ＧＯＴ６０のその他のＳＭＥ３４、３６には結合することは不可能である。ある例では、図５に関連してより良好に示されるように、第２の複数の行相互接続導線７０のうちの第１の半分は、行３８内のＳＭＥ３４、３６のうちの第１の半分（各々のＧＯＴ６０から１つのＳＭＥ３４）に結合することが可能であり、第２の複数の行相互接続導線７０のうちの第２の半分は、行３８内のＳＭＥ３４、３６のうちの第２の半分（各々のＧＯＴ６０からその他のＳＭＥ３４、３６）に結合することが可能である。第２の複数の行相互接続導線７０とＳＭＥ３４、３６との間の制限された接続は、本明細書では「パリティ」と呼ばれる。ある例では、行３８はまた、カウンタなどの特殊目的素子５８、構成可能ブール論理素子、ルックアップテーブル、ＲＡＭ、フィールド構成可能ゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、構成可能プロセッサ（例えば、マイクロプロセッサ）、または、特殊目的機能を実施するための他の素子などの特殊目的素子５８を含むことが可能である。
【００２２】
ある例では、特殊目的素子５８は、カウンタ（本明細書ではカウンタ５８とも呼ばれる）を備える。ある例では、カウンタ５８は、１２ビットの構成可能ダウンカウンタを備える。１２ビット構成可能カウンタ５８は、カウント入力部、リセット入力部、およびゼロカウント出力部を有する。カウント入力部は、アサートされるとき、カウンタ５８の値を１だけデクレメントする。リセット入力部は、アサートされるとき、カウンタ５８に、関連付けられたレジスタから初期値をロードさせる。１２ビットカウンタ５８の場合、最大で１２ビットの数を、初期値としてロードすることが可能である。カウンタ５８の値がゼロ（０）にデクレメントされるとき、ゼロカウント出力がアサートされる。カウンタ５８はまた、パルスモードとホールドモードとの少なくとも２つのモードを有する。カウンタ５８がパルスモードに設定されるとき、ゼロカウント出力は、カウンタ５８がゼロに到達して、クロックが循環するときにアサートされる。このゼロカウント出力は、カウンタ５８の次のクロックサイクルの間にアサートされる。その結果、カウンタ５８は、クロックサイクルから時間的に間に合ってオフセットされる。次のクロックサイクルで、ゼロカウント出力はもはやアサートされない。カウンタ５８がホールドモードに設定されるとき、ゼロカウント出力は、カウンタ５８がゼロにデクレメントするときにクロックサイクル間にアサートされ、カウンタ５８がアサートされているリセット入力によってリセットされるまでアサートされたまま留まる。
【００２３】
別の例では、特殊目的素子５８はブール論理を備える。例えば、ブール論理は、ＡＮＤ、ＯＲ、ＮＡＮＤ、ＮＯＲ、積和（ＳｏＰ）、積和のネゲート出力（ＮＳｏＰ）、和積のネゲート出力（ＮＰｏＳ）、および和積（ＰｏＳ）の関数などの論理関数を実施するために用いられ得る。このブール論理は、ＦＳＭ格子３０中の（以下に後述するように、ＦＳＭのターミナルノードに対応する）ターミナル状態のＳＭＥからデータを抽出するために用いることが可能である。抽出されたデータは、状態データを他のＦＳＭ格子３０に提供するおよび／またはＦＳＭ格子３０を再構成するために用いられる構成用データを提供する、または別のＦＳＭ格子３０を再構成するために用いることが可能である。
【００２４】
図５はＧＯＴ６０の例を示す。ＧＯＴ６０は、入力部６２、６４を有し、かつそれらの出力部７２、７４がＯＲゲート７６および３対１マルチプレクサ７８に結合される第１のＳＭＥ３４および第２のＳＭＥ３６を含む。３対１マルチプレクサ７８は、ＧＯＴ６０の出力６６を、第１のＳＭＥ３４、第２のＳＭＥ３６、またはＯＲゲート７６に結合させるように設定することが可能である。ＯＲゲート７６は、ＧＯＴ６０の共有出力６６を形成するように双方の出力部７２、７４を一緒に結合するために用いることが可能である。ある例では、第１および第２のＳＭＥ３４、３６は、上述したようにパリティを示すが、この場合、第１のＳＭＥ３４の入力部６２は行相互接続導線６８のうちの一部に結合することが可能であり、第２のＳＭＥ３６の入力部６４は他の行相互接続導線７０に結合することが可能であり、パリティ問題を克服し得る共通の出力６６が、生成され得る。ある例では、ＧＯＴ６０内の２つのＳＭＥ３４、３６は、切り替え素子７９のどちらかまたは双方を設定することによって、カスケードするおよび／またはそれら自身に対してループバックすることが可能である。ＳＭＥ３４、３６は、ＳＭＥ３４、３６の出力部７２、７４を他方のＳＭＥ３４、３６の入力部６２、６４に結合することによってカスケードすることが可能である。ＳＭＥ３４、３６は、出力部７２、７４をそれら自身の入力部６２、６４に結合することによって、それら自身に対してループバックすることが可能である。したがって、第１のＳＭＥ３４の出力部７２は、第１のＳＭＥ３４の入力部６２と第２のＳＭＥ３６の入力部６４の、どちらにも結合することが不可能であるか、一方または双方に結合することが可能であるかである。
【００２５】
ある例では、状態機械素子３４、３６は、検出ライン８２に並列に結合された、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）でしばしば用いられるものなどの複数のメモリセル８０を備える。このような１つのメモリセル８０は、高いまたは低い値（例えば、１または０）に対応するものなどのデータ状態に設定することが可能なメモリセルを備える。メモリセル８０の出力部は、検出ライン８２に結合され、メモリセル８０への入力部は、データストリームライン８４上のデータに基づく信号を受信する。ある例では、入力ブロック５２での入力は、メモリセル８０の内の１つ以上を選択するために復号化される。選択されたメモリセル８０は、その記憶されたデータ状態を、検出ライン８２上に出力として提供する。例えば、入力ブロック５２で受信されたデータは、デコーダ（図示せず）に提供することが可能であり、デコーダはデータストリームライン８４のうちの１つ以上を選択することが可能である。ある例では、デコーダは、８ビットのＡＳＣＩＩ文字を２５６のデータストリームライン８４のうちの対応する１つに変換することが可能である。
【００２６】
メモリセル８０は、したがって、メモリセル８０が高い値に設定され、データストリームライン８４上のデータがメモリセル８０を選択するときに、高信号を検出ライン８２に出力する。データストリームライン８４上のデータがメモリセル８０を選択し、メモリセル８０が低い値に設定されるときに、メモリセル８０は、低い信号を検出ライン８２に出力する。検出ライン８２上のメモリセル８０からの出力は、検出セル８６によって感知される。
【００２７】
ある例では、入力ライン６２、６４上の信号は、それぞれの検出セル８６をアクティブ状態または非アクティブ状態に設定する。非アクティブ状態に設定されたとき、検出セル８６は、それぞれの検出ライン８２上の信号とは無関係に、それぞれの出力部７２、７４上に低い信号を出力する。アクティブ状態に設定されたとき、検出セル８６は、それぞれのＳＭＥ３４、３６のメモリセル８２のうちの１つから高い信号が検出されるときに、高い信号をそれぞれの出力ライン７２、７４上に出力する。アクティブ状態にあるとき、検出セル８６は、それぞれのＳＭＥ３４、３６のメモリセル８２の全てからの信号が低いときには、それぞれの出力ライン７２、７４上に低い信号を出力する。
【００２８】
ある例では、ＳＭＥ３４、３６は２５６のメモリセル８０を含み、各々のメモリセル８０は異なるデータストリームライン８４に結合される。したがって、ＳＭＥ３４、３６は、データストリームライン８４のうちの選択された１つ以上が高い信号をその上に有するときに高い信号を出力するようにプログラムすることが可能である。例えば、ＳＭＥ３４は、第１のメモリセル８０（例えば、ビット０）を高く設定され、全ての他のメモリセル８０（例えば、ビット１〜２５５）を低く設定されることが可能である。それぞれの検出セル８６がアクティブ状態にあるとき、ＳＭＥ３４は、ビット０に対応するデータストリームライン８４がその上に高い信号を有するときに、出力部７２に高い信号を出力する。他の例では、ＳＭＥ３４は、適切なメモリセル８０を高い値に設定することによって、複数のデータストリームライン８４のうちの１つがその上に高い信号を有するときに、高い信号を出力するように設定することが可能である。
【００２９】
ある例では、メモリセル８０は、関連付けられたレジスタからビットを読み出すことによって高いまたは低い値に設定することが可能である。したがって、ＳＭＥ３４は、コンパイラ２０によって作成されたイメージをレジスタに記憶して、レジスタ中のビットを関連付けられたメモリセル８０中にロードすることによって構成することが可能である。ある例では、コンパイラ２０によって作成されたイメージは、高いまたは低い（例えば、１または０の）ビットの二値イメージを含む。このイメージは、ＳＭＥ３４、３６をカスケードすることによって、ＦＳＭを実装するようにＦＳＭ格子３０を構成することが可能である。例えば、第１のＳＭＥ３４は、検出セル８６をアクティブ状態に設定することによってアクティブ状態に設定することが可能である。第１のＳＭＥ３４は、ビット０に対応するデータストリームライン８４が高い信号をその上に有するときに高い信号を出力するように設定することが可能である。第２のＳＭＥ３６は非アクティブ状態に初期設定することが可能であるが、アクティブであるとき、ビット１に対応するデータストリームライン８４が高い信号をその上に有するときに高い信号を出力するように設定することが可能である。第１のＳＭＥ３４および第２のＳＭＥ３６は、第１のＳＭＥ３４の出力部７２を第２のＳＭＥ３６の入力部６４に結合するように設定することによって、カスケードすることが可能である。したがって、ビット０に対応するデータストリームライン８４上で高い信号が感知されたとき、第１のＳＭＥ３４は出力部７２に高い信号を出力して、第２のＳＭＥ３６の検出セル８６をアクティブ状態に設定する。ビット１に対応するデータストリームライン８４上で高い信号が感知されたとき、第２のＳＭＥ３６は、別のＳＭＥ３６を起動するためにまたはＦＳＭ格子３０から出力されるように、出力部７４に高い信号を出力する。
【００３０】
ある例では、単一のＦＳＭ格子３０が単一の物理的デバイス上に実装されるが、しかしながら、他の例では、２つ以上のＦＳＭ格子３０を、単一の物理的デバイス（例えば、物理的なチップ）上に実装することが可能である。ある例では、各々のＦＳＭ格子３０は、区別可能なデータ入力ブロック５２、区別可能な出力ブロック５４、区別可能なプログラミングインターフェース５６、および構成可能素子の区別可能な集合を含むことが可能である。そのうえ、構成可能素子の各々の集合は、それらの対応するデータ入力ブロック５２でデータに反応する（例えば、高いまたは低い信号を出力する）ことが可能である。例えば、第１のＦＳＭ格子３０に対応する構成可能素子の第１の集合は、第１のＦＳＭ格子３０に対応する第１のデータ入力ブロック５２でデータに反応することが可能である。第２のＦＳＭ格子３０に対応する構成可能素子の第２の集合は、第２のＦＳＭ格子３０に対応する第２のデータ入力ブロック５２に反応することが可能である。したがって、各々のＦＳＭ格子３０は構成可能素子の集合を含むが、その場合、異なる集合の構成可能素子は異なる入力データに反応することが可能である。同様に、各々のＦＳＭ格子３０と、構成可能素子の各々の対応する集合とは、区別可能な出力を提供することが可能である。一部の例では、第１のＦＳＭ格子３０からの出力ブロック５４を第２のＦＳＭ格子３０の入力ブロック５２に結合することが可能であり、それにより、第２のＦＳＭ格子３０に対する入力データが、一連のＦＳＭ格子３０の階層的配列中の第１のＦＳＭ格子３０からの出力データを含むことが可能となる。
【００３１】
ある例では、ＦＳＭ格子３０上にロードされるイメージは、構成可能素子、構成可能切り替え素子、およびＦＳＭ格子３０内の特殊目的素子を構成するための複数ビットのデータを含む。ある例では、イメージは、ある入力に基づいて所望の出力を提供するようにＦＳＭ格子３０を構成するために、ＦＳＭ格子３０上にロードすることが可能である。出力ブロック５４は、データ入力ブロック５２でのデータに対する構成可能素子の反応に基づいて、ＦＳＭ格子３０からの出力を提供することが可能である。出力ブロック５４からの出力は、所与のパターンの適合を示す単一ビット、複数のパターンに対する適合および不適合を示す複数ビットを含む語、ならびに所与の瞬間での全てのもしくはある構成可能素子の状態に対応する状態ベクトルを含むことが可能である。説明したように、いくつかのＦＳＭ格子３０は、パターン認識（例えば、音声認識、イメージ認識など）、信号処理、撮像、コンピュータビジョン、暗号法などのデータ分析を実施するために、状態機械エンジン１４などの状態機械エンジン中に含まれ得る。
【００３２】
図６は、ＦＳＭ格子３０によって実装することが可能な有限状態機械（ＦＳＭ）の例としてのモデルを示す。ＦＳＭ格子３０は、ＦＳＭの物理的実装物として構成する（例えば、プログラムする）ことが可能である。ＦＳＭは、１つ以上のルートノード９２を含むダイアグラム９０（例えば、有向グラフ、無向グラフ、擬グラフ）として表されうる。ルートノード９２に加えて、ＦＳＭは、１つ以上のエッジ９８を介してルートノード９２および他の標準ノード９４に接続されたいくつかの標準ノード９４およびターミナルノード９６から作成することが可能である。ノード９２、９４、９６はＦＳＭ中の状態に対応する。エッジ９８は、状態の間の遷移に対応する。
【００３３】
ノード９２、９４、９６の各々は、アクティブ状態または非アクティブ状態にありうる。非アクティブ状態にあるとき、ノード９２、９４、９６は入力データに反応する（例えば、応答する）ことはない。アクティブ状態にあるとき、ノード９２、９４、９６は入力データに反応することが可能である。上流のノード９２、９４は、入力データが上流のノード９２、９４と下流のノード９４、９６との間のエッジ９８によって指定された基準に適合するときに、ノードの下流にあるノード９４、９６を起動することによって、入力データに反応することが可能である。例えば、文字「ｂ」を指定する第１のノード９４は、第１のノード９４がアクティブであり、文字「ｂ」が入力データとして受信されたときに、エッジ９８によって第１のノード９４に接続されている第２のノード９４を起動する。本明細書で用いられる「上流」とは１つ以上のノードの間の関係のことであり、この場合、１つ以上の他のノードの上流にある（または、ループもしくは帰還の構成の場合にはそれ自身の上流にある）第１のノードは、第１のノードがその１つ以上の他のノードを起動することが可能である（またはループの場合にはそれ自身を起動することが可能である）状況のことである。同様に、「下流」とは１つ以上の他のノードの下流にある（または、ループの場合にはそれ自身の下流にある）第１のノードが、その１つ以上の他のノードによって起動することが可能である（または、ループの場合にはそれ自身によって起動することが可能である）関係のことである。したがって、「上流」および「下流」という用語は、本明細書では、１つ以上のノードの間の関係のことであるが、これらの用語は、ノード間でのループまたは他の非線形経路の使用を排除しない。
【００３４】
ダイアグラム９０では、ルートノード９２は、最初に起動され得、入力データがルートノード９２からのエッジ９８と適合するときに、下流のノード９４を起動することが可能である。ノード９４は、入力データがルートノード９４からのエッジ９８と適合するときに、ノード９６を起動することが可能である。ダイアグラム９０全体にわたって、ノード９４、９６は、入力データが受信されると、この様式で起動することが可能である。ターミナルノード９６は、入力データ中の目的とするシーケンスの適合に対応する。したがって、ターミナルノード９６の起動は、目的とするシーケンスが入力データとして受信されたことを示す。パターン認識機能を実装しているＦＳＭ格子３０の文脈では、ターミナルノード９６への到達は、目的とする特定のパターンが入力データ中で検出されたことを示しうる。
す
【００３５】
ある例では、各々のルートノード９２、標準ノード９４、およびターミナルノード９６は、ＦＳＭ格子３０中の構成可能素子に対応しうる。各々のエッジ９８は、構成可能素子の間の接続部に対応しうる。したがって、別の標準ノード９４またはターミナルノード９６に遷移する（例えば、これに接続するエッジ９８を有する）標準ノード９４は、別の構成可能素子に遷移する（例えば、これに対して出力を提供する）構成可能素子に対応する。一部の例では、ルートノード９２は、対応する構成可能素子を有しない。
【００３６】
理解されるように、ノード９２をルートノードとして説明し、ノード９６をターミナルノードとして説明したが、必ずしも特定の「出発点」またはルートノードがなくてもよく、必ずしも特定の「終了点」または出力ノードがなくてもよい。言い換えれば、どのノードでも開始点であり得るし、またどのノードでも出力を提供し得る。
【００３７】
ＦＳＭ格子３０がプログラムされたとき、構成可能素子の各々もまた、アクティブ状態または非アクティブ状態にありうる。所与の構成可能素子は、非アクティブであるとき、対応するデータ入力ブロック５２での、入力データに反応しない。アクティブな構成可能素子はデータ入力ブロック５２での入力データに反応することが可能であり、その入力データが構成可能素子の設定と適合するときに、下流の構成可能素子を起動することが可能である。ある構成可能素子がターミナルノード９６に対応するとき、その構成可能素子は、外部デバイスとの適合の指示を提供するために、出力ブロック５４に結合することが可能である。
【００３８】
プログラミングインターフェース５６を介してＦＳＭ格子３０上にロードされたイメージは、構成可能素子および特殊目的素子ならびに構成可能素子と特殊目的素子との間の接続部を構成することが可能であり、それにより、データ入力ブロック５２でのデータに対する反応に基づいたノードの一連の起動によって、所望のＦＳＭが実装される。ある例では、構成可能素子は、１つのデータサイクル（例えば、１つの文字、文字の集合、１つのクロックサイクル）にわたってアクティブのまま留まり、次に、上流の構成可能素子によって再起動されない限り、非アクティブになる。
【００３９】
ターミナルノード９６は、過去の事象の圧縮された履歴を記憶するものと考えることが可能である。例えば、ターミナルノード９６に達するために必要とされる入力データの１つ以上のパターンは、そのターミナルノード９６の起動によって表すことが可能である。ある例では、ターミナルノード９６によって提供される出力は二進法である、すなわち、その出力は、目的とするパターンが適合したかどうかを示す。ダイアグラム９０中の標準ノード９４に対するターミナルノード９６の比はかなり小さい。言い換えれば、ＦＳＭ中には高度の複雑性があり得るとはいえ、ＦＳＭの出力は、比較すると小さくあり得る。
【００４０】
ある例では、ＦＳＭ格子３０の出力は状態ベクトルを含みうる。状態ベクトルは、ＦＳＭ格子３０の構成可能素子の状態（例えば、起動されているか起動されていないか）を含む。別の例では、状態ベクトルは、構成可能素子がターミナルノード９６に対応するかしないかとは無関係に、構成可能素子の全てまたは部分集合の状態を含むことが可能である。ある例では、状態ベクトルは、ターミナルノード９６に対応する構成可能素子に対する状態を含む。したがって、出力は、ダイアグラム９０の全てのターミナルノード９６によって提供される指示の収集物を含むことが可能である。状態ベクトルは語として表すことが可能であるが、その場合、各々のターミナルノード９６によって提供される二進法の指示は１ビットの語を含む。ターミナルノード９６のこの符号化は、ＦＳＭ格子３０に対する検出状態（例えば、目的とするシーケンスが、およびどのシーケンスが、検出されたか）の効果的な指示を提供することが可能である。
【００４１】
上述したように、ＦＳＭ格子３０は、パターン認識機能を実装するようにプログラムすることが可能である。例えば、ＦＳＭ格子３０は、入力データ中の１つ以上のデータシーケンス（例えば、署名、パターン）を認識するように構成すことが可能である。目的とするデータシーケンスがＦＳＭ格子３０によって認識されたとき、その認識の指示を、出力ブロック５４に提供することが可能である。ある例では、パターン認識は、例えば、ネットワークデータ中のマルウエアまたは他のデータを特定するために、記号（例えば、ＡＳＣＩＩ文字）のストリングを認識することが可能である。
【００４２】
図７は、２つの水準のＦＳＭ格子３０が直列に結合されて、データを分析するために用いられる階層構造１００の例を示す。具体的には、図示する実施形態では、階層構造１００は、直列に配列された第１のＦＳＭ格子３０Ａと第２のＦＳＭ格子３０Ｂとを含む。各々のＦＳＭ格子３０は、データ入力を受信するそれぞれのデータ入力ブロック５２、構成用信号を受信するプログラミングインターフェースブロック５６、および出力ブロック５４を含む。
【００４３】
第１のＦＳＭ格子３０Ａは、入力データ、例えば生データをデータ入力ブロックで受信するように構成される。第１のＦＳＭ格子３０Ａは、上述したように入力データに反応して、出力データを出力ブロックのところで提供する。第１のＦＳＭ格子３０Ａからの出力は、第２のＦＳＭ格子３０Ｂのデータ入力ブロックに送出される。第２のＦＳＭ格子３０Ｂは、次に、第１のＦＳＭ格子３０Ａによって提供された出力に基づいて反応して、階層構造１００の対応する出力信号１０２を提供することが可能である。２つのＦＳＭ格子３０Ａおよび３０Ｂをこのように直列に階層的に結合することによって、過去の事象に関するデータを、第１のＦＳＭ格子３０Ａから第２のＦＳＭ格子３０Ｂに対して圧縮した語で提供する手段が提供される。提供されたデータは、第１のＦＳＭ格子３０Ａによって記録された複雑な事象（例えば、目的とするシーケンス）の要約と効果的になりうる。
【００４４】
図７に示すＦＳＭ格子３０Ａ、３０Ｂの２水準階層１００は、２つの独立したプログラムを、同じデータストリームに基づいて動作することを可能とする。この２段階階層は、異なる領域としてモデリングされた生物学的頭脳中での視認に類似しうる。このモデルでは、これらの領域は、各々が類似の計算機能（パターンマッチング）を実施するが、異なるプログラム（署名）を用いる効果的に異なるパターン認識エンジンである。複数のＦＳＭ格子３０Ａ、３０Ｂを一緒に接続することによって、データストリーム入力に関する増加した知識が獲得され得る。
【００４５】
（第１のＦＳＭ格子３０Ａによって実装される）階層の第１の水準は、例えば、生データストリームに対して直接的に処理を実施することが可能である。すなわち、生データストリームは、第１のＦＳＭ格子３０Ａの入力ブロック５２で受信することが可能であり、第１のＦＳＭ格子３０Ａの構成可能素子は、この生データストリームに反応することが可能である。階層の（第２のＦＳＭ格子３０Ｂによって実装される）第２の水準は、第１の水準からの出力を処理することが可能である。すなわち、第２のＦＳＭ格子３０Ｂは、第２のＦＳＭ格子３０Ｂの入力ブロック５２で第１のＦＳＭ格子３０Ａの出力ブロック５４からの出力を受信し、第２のＦＳＭ格子３０Ｂの構成可能素子は、第１のＦＳＭ格子３０Ａの出力に反応することが可能である。したがって、この例では、第２のＦＳＭ格子３０Ｂは、生データストリームを入力として受信せず、むしろ、第１のＦＳＭ格子３０Ａによって判定された生データストリームと適合する目的とするパターンの指示を受信する。第２のＦＳＭ格子３０Ｂは、第１のＦＳＭ格子３０Ａからの出力データストリーム中のパターンを認識するＦＳＭを実装することが可能である。第２のＦＳＭ格子３０Ｂは、ＦＳＭ格子３０Ａからの出力を受信することに加えて、複数の他のＦＳＭ格子からの入力を受信し得ることを理解すべきである。同様に、第２のＦＳＭ格子３０Ｂは他のデバイスからの入力を受信し得る。第２のＦＳＭ格子３０Ｂは、出力を生成するために、これらの複数の入力を組み合わせ得る。
【００４６】
図８は、コンパイラが、ＦＳＭを実装するために、格子３０などのＦＳＭ格子を構成するために用いられるイメージにソースコードを変換するための方法１１０の例を示す。方法１１０は、ソースコードをシンタクスツリーに解析すること（ブロック１１２）と、シンタクスツリーをオートマトンに変換すること（ブロック１１４）と、オートマトンを最適化すること（ブロック１１６）と、オートマトンをネットリストに変換すること（ブロック１１８）と、ネットリストをハードウエア上に置くこと（ブロック１２０）と、ネットリストをルーティングすること（ブロック１２２）と、結果として得られるイメージを公開すること（ブロック１２４）とを含む。
【００４７】
ある例では、コンパイラ２０は、ソフトウエア開発者がＦＳＭ格子３０上にＦＳＭを実装するためにイメージを作成することを可能とするアプリケーションプログラミングインターフェース（ＡＰＩ）を含む。コンパイラ２０は、ソースコード中の正規表現の入力集合を、ＦＳＭ格子３０を構成するために構成されたイメージに変換する方法を提供する。コンパイラ２０は、フォンノイマンアーキテクチャを有するコンピュータ用の命令によって実装することが可能である。これらの命令は、コンピュータ上のプロセッサ１２にコンパイラ２０の機能を実装させることが可能である。例えば、これら命令は、プロセッサ１２によって実行されるとき、プロセッサ１２に、プロセッサ１２からアクセス可能なソースコードに対して、ブロック１１２、１１４、１１６、１１８、１２０、１２２、および１２４中で説明したような動作を実施させることが可能である。
【００４８】
ある例では、ソースコードは、記号の群内の記号のパターンを特定するための検索ストリングを記述する。検索ストリングを記述するには、ソースコードは、複数の正規表現（ｒｅｇｅｘ）を含めばよい。ｒｅｇｅｘは、起動検索パターンを記述するためのストリングでありうる。ｒｅｇｅｘは、プログラミング言語、テキストエディタ、ネットワークセキュリティなどの様々なコンピュータドメインで広く用いられる。ある例では、コンパイラにサポートされる正規表現は、非構造化データの分析のために基準を含む。非構造化データは、自由形態で、データ内の語に適用される索引付けを有しないデータを含みうる。語は、データ内での、印刷可能でありか印刷不可能であるかは問わず、バイトの任意の組み合わせを含みうる。ある例では、コンパイラは、Ｐｅｒｌ、（例えば、Ｐｅｒｌとコンパティブルな正規表現（ＰＣＲＥ））、ＰＨＰ、Ｊａｖａ、および．ＮＥＴ言語を含むｒｅｇｅｘを実装するための複数の異なるソースコード言語をサポートすることが可能である。
【００４９】
ブロック１１２で、コンパイラ２０は、ソースコードを解析して、異なるタイプの演算子がソースコードによって実装された異なる機能（例えば、ソースコード中のｒｅｇｅｘによって実装された異なる機能）に対応する、関係的に接続された演算子の配列を形成することが可能である。ソースコードを解析することで、ソースコードの一般的表現を作成することが可能である。ある例では、この一般的な表現は、シンタクスツリーとして知られているツリーグラフという形態でソースコード中のｒｅｇｅｘの符号化された表現を含む。本明細書に説明する例は、他の例でのシンタクスツリー（「抽象シンタクスツリー」としても知られている）としての配列のことであるが、しかしながら、具象シンタクスツリーまたは他の配列を用いることが可能である。
【００５０】
上述したように、コンパイラ２０は複数のソースコード言語をサポートすることが可能であるため、解析することで、ソースコードは、言語とは無関係に、言語に固有ではない表現、例えばシンタクスツリーに変換される。したがって、コンパイラ２０によるさらなる処理（ブロック１１４、１１６、１１８、１２０）は、ソースコードの言語とは無関係に、共通の入力構造から作動することが可能である。
【００５１】
上記のように、シンタクスツリーは、関係的に接続された複数の演算子を含む。シンタクスツリーは、複数の異なるタイプの演算子を含みうる。すなわち、異なる演算子は、ソースコード中のｒｅｇｅｘによって実装される異なる機能に対応しうる。
【００５２】
ブロック１１４で、シンタクスツリーはオートマトンに変換される。オートマトンは、ＦＳＭのソフトウエアモデルであり、したがって、決定性または非決定性であると分類することが可能である。決定性オートマトンは、所与の時点において単一の実行経路を有し、非決定性オートマトンは、複数の同時実行経路を有する。オートマトンは、複数の状態を含む。シンタクスツリーをオートマトンに変換するために、シンタクスツリー中の演算子と、演算子間の関係とを、状態間の遷移を伴う状態に変換する。ある例では、オートマトンは、ＦＳＭ格子３０のハードウエアに部分的に基づいて変換することが可能である。
【００５３】
ある例では、オートマトンに対する入力記号は、アルファベット記号、数値０〜９、および他の印刷可能文字を含む。ある例では、入力記号は、バイト値０〜２５５（２５５を含む）によって表される。ある例では、オートマトンは、グラフのノードが状態の集合に対応する有向グラフとして表すことが可能である。ある例では、入力記号αに関する状態ｐから状態ｑへの遷移、すなわち、δ（ｐ、α）は、ノードｐからノードｑへの有向接続によって示される。ある例では、オートマトンの逆は、ある記号αに関する各々の遷移ｐ→ｑが、その記号に関する逆転されたｑ→ｐになる新しいオートマトンを生成する。逆にすると、開始状態は最終状態になり、最終状態は開始状態になる。ある例では、オートマトンによって認識された（例えば、適合した）言葉は、オートマトンに連続的に入力されたときに最終状態に到達する全ての可能な文字ストリングの集合である。オートマトンによって認識された言葉の中の各々のストリングは、開始状態から１つ以上の最終状態に至る経路をたどる。
【００５４】
ブロック１１６で、オートマトンは、構築された後に、とりわけ、その複雑さおよびサイズを減少させるように最適化される。オートマトンは、冗長状態を組み合わせることによって最適化することが可能である。
【００５５】
ブロック１１８で、最適化されたオートマトンはネットリストに変換される。オートマトンはネットリストに変換することで、オートマトンの各々の状態が、ＦＳＭ格子３０上のハードウエア素子（例えば、ＳＭＥ３４、３６、他の素子）にマッピングされ、ハードウエア素子間の接続が決定される。
【００５６】
ブロック１２０で、ネットリストは、ネットリストの各々のノードに対応する目標デバイス（例えば、ＳＭＥ３４、３６、特殊目的素子５８）の特定のハードウエア素子を選択するように位置付けされる。ある例では、位置付けは、ＦＳＭ格子３０用の一般的な入力および出力の制約に基づいて各々の特定のハードウエア素子を選択する。
【００５７】
ブロック１２２で、位置付けされたネットリストは、選択されたハードウエア素子を一緒に結合して、ネットリストによって記述される接続を達成するために、構成可能切り替え素子（例えば、ブロック間切り替え素子４０、ブロック内切り替え素子４２、および行内切り替え素子４４）に対する設定を決定するようにルーティングされる。ある例では、構成可能切り替え素子に対する設定は、選択されたハードウエア素子を接続するために用いられるＦＳＭ格子３０の特定の導線と、構成可能切り替え素子に対する設定とを決定することによって決定される。ルーティングは、ブロック１２０のその位置付けでのハードウエア素子間の接続のより具体的な制約を考慮することが可能である。したがって、ルーティングは、ＦＳＭ格子３０上の導線の実際の制約を考えて適切な接続を作成するためにグローバルな位置付けによって決定されたハードウエア素子の一部の位置を調整し得る。
【００５８】
いったんネットリストが位置付けされてルーティングされると、この位置付けされ、ルーティングされたネットリストは、ＦＳＭ格子３０を構成するための複数のビットに変換される。これら複数のビットは、本明細書ではイメージ（例えば、二値イメージ）と呼ばれる。
【００５９】
ブロック１２４で、イメージはコンパイラ２０によって公開される。イメージは、ＦＳＭ格子３０の特定のハードウエア素子を構成するための複数のビットを含む。これらのビットは、ソースコードによって記述された機能性を有するＦＳＭをプログラムされたＦＳＭ格子３０が実装するように、ＳＭＥ３４、３６、特殊目的素子５８、および構成可能切り替え素子の状態を構成するために、ＦＳＭ格子３０上にロードすることが可能である。位置付け（ブロック１２０）およびルーティング（ブロック１２２）は、ＦＳＭ格子３０中の特定の位置にある特定のハードウエア素子をオートマトン中の特定の状態にマッピングすることが可能である。したがって、イメージ中のビットは、所望の機能（複数可）を実装するために、特定のハードウエア素子を構成することが可能である。ある例では、イメージは、機械コードをコンピュータ読み取り可能媒体に保存することによって公開することが可能である。別の例では、イメージは、イメージを表示デバイス上に表示することによって公開することが可能である。さらに別の例では、イメージは、イメージをＦＳＭ格子３０中にロードするための構成用デバイスなどの別のデバイスに送出することによって公開することが可能である。さらに別の例では、イメージは、イメージをＦＳＭ格子（例えば、ＦＳＭ格子３０）上にロードすることによって公開することが可能である。
【００６０】
ある例では、イメージは、イメージのビット値をＳＭＥ３４、３６および他のハードウエア素子に直接的にロードしてまたはイメージを１つ以上のレジスタ中にロードし、次に、ビット値をレジスタからＳＭＥ３４、３６および他のハードウエア素子に書き込むことによって、ＦＳＭ格子３０上にロードすることが可能である。ある例では、ＦＳＭ格子３０のハードウエア素子（例えば、ＳＭＥ３４、３６、特殊目的素子５８、構成可能切り替え素子４０、４２、４４）は、構成用デバイスおよび／またはコンピュータがイメージを、このイメージを１つ以上のメモリアドレスに書き込むことによって、ＦＳＭ格子３０上にロードすることが可能となるようにマッピングされたメモリである。
【００６１】
本明細書に説明する方法の例は、少なくとも部分的に機械またはコンピュータに実装することが可能である。一部の例は、上記の例に説明したように方法を実施するために電子デバイスを構成するように動作可能な命令で符号化されたコンピュータ読み取り可能媒体または機械読み取り可能媒体を含みうる。このような方法の実装例は、マイクロコードなどのコード、アセンブリ言語コード、最高水準言語コードなどを含みうる。このようなコードは、様々な方法を実施するためのコンピュータ読み取り可能命令を含みうる。コードは、コンピュータプログラムプロダクトの部分を形成し得る。さらに、コードは、実行中または他の時間で、１つ以上の揮発性または不揮発性のコンピュータ読み取り可能媒体上に有形に記憶され得る。コンピュータ読み取り可能媒体は、これには限られないが、ハードディスク、取り外し可能磁気ディスク、取り外し可能光ディスク（例えば、コンパクトディスクおよびデジタルビデオディスク）、磁気カセット、メモリカードもしくはスティック、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）などを含み得る。
【００６２】
ここで図９を参照すると、状態機械エンジン１４（例えば、単一チップ上の単一デバイス）の実施形態が示されている。以前に説明したように、状態機械エンジン１４は、データバスを介してメモリ１６などのソースからデータを受信するように構成される。図示する実施形態では、データは、ダブルデータレート３（ＤＤＲ３）バスインターフェース１３０などのバスインターフェースを介して状態機械エンジン１４に送出され得る。ＤＤＲ３バスインターフェース１３０は、１ギガバイト／秒以上の速度でデータを交換すること（例えば、提供することおよび受信すること）が可能であり得る。このようなデータ交換速度は、データが状態機械エンジン１４によって分析される速度を超え得る。理解されるように、分析されるデータのソース次第では、バスインターフェース１３０は、ＮＡＮＤフラッシュインターフェース、周辺構成要素相互接続（ＰＣＩ）インターフェース、ギガビット媒体独立インターフェース（ＧＭＭＩ）などの、状態機械エンジン１４に対する、データソースへのおよびからのデータを交換するための任意の適切なバスインターフェースであり得る。以前に説明したように、状態機械エンジン１４は、データを分析するように構成された１つ以上のＦＳＭ格子３０を含む。各々のＦＳＭ格子３０は、２つの半格子に分割され得る。図示する実施形態では、各々の半格子は、２４ＫのＳＭＥ（例えば、ＳＭＥ３４、３６）を含み得るため、格子３０は４８ＫのＳＭＥを含む。格子３０は、図２〜５に関連して以前に説明したように配列された任意の所望の数のＳＭＥを備え得る。さらに、たった１つのＦＳＭ格子３０を図示しているが、状態機械エンジン１４は、以前に説明したように複数のＦＳＭ格子３０を含み得る。
【００６３】
分析されるデータは、バスインターフェース１３０で受信されて、いくつかのバッファおよびバッファインターフェースを介してＦＳＭ格子３０に提供され得る。図示する実施形態では、データ経路は、データバッファ１３２、命令バッファ１３３、処理バッファ１３４、ならびにランク間（ＩＲ）バスおよび処理バッファインターフェース１３６を含む。データバッファ１３２は、分析されるデータを受信して、一時的に記憶するように構成される。１つの実施形態では、２つのデータバッファ１３２（データバッファＡおよびデータバッファＢ）が存在する。データは２つのデータバッファ１３２のうちの一方から排出されている間に、他方のデータバッファ１３２に記憶されて、ＦＳＭ格子３０によって分析される。バスインターフェース１３０は、分析されるデータを、データバッファ１３２が一杯になるまでデータバッファ１３２に提供するように構成され得る。データバッファ１３２が一杯になった後、バスインターフェース１３０は、他の目的のために自由に用いられるように（例えば、データバッファ１３２が分析されるさらなるデータを受信するように利用可能となるまで、データストリームからの他のデータを提供するように）構成され得る。図示する実施形態では、データバッファ１３２は、各々が３２Ｋバイトであり得る。命令バッファ１３３は、分析されるデータに対応する命令および状態機械エンジン１４を構成することに対応する命令などの命令を、バスインターフェース１３０を介してプロセッサ１２から受信するように構成される。ＩＲバスおよび処理バッファインターフェース１３６は、データを処理バッファ１３４に提供することを容易化し得る。ＩＲバスおよび処理バッファインターフェース１３６は、データが順番にＦＳＭ格子３０によって処理されることを保証するために用いることが可能である。ＩＲバスおよび処理バッファインターフェース１３６は、データ、タイミングデータ、パッキング命令などの交換を、そのデータが受信されて正確に分析されるように調整し得る。一般的に、ＩＲバスおよび処理バッファインターフェース１３６は、あるデバイスランクの複数のデバイスの使用を許容する。これらのデバイスランクの複数のデバイスは、これら複数のデバイスの全てが共有されるデータの全てを正しい順序で受信するようにデータを共有する。例えば、複数の物理的デバイス（例えば、状態機械エンジン１４、チップ、個別のデバイス）は、ランクに分けて配列し得るし、また、データをＩＲバスおよび処理バッファインターフェース１３６を介して互いに対して提供し得る。この応用の目的のため、「ランク」という用語は、同じチップ選択物に接続された状態機械エンジン１４の集合のことである。図示する実施形態では、ＩＲバスおよび処理バッファインターフェース１３６は、８ビットのデータバスを含み得る。
【００６４】
図示する実施形態では、状態機械エンジン１４はまた、状態機械エンジン１４におよびこれからデータを提供する際の支援として、デコンプレッサ１３８およびコンプレッサ１４０を含む。理解され得るように、コンプレッサ１４０およびデコンプレッサ１３８は、ソフトウエアおよび／またはハードウエアの設計を簡略化するために同じ圧縮アルゴリズムを用い得るが、しかしながら、コンプレッサ１４０およびデコンプレッサ１３８は、異なるアルゴリズムも用い得る。データを圧縮することによって、バスインターフェース１３０（例えば、ＤＤＲ３バスインターフェース）を利用する時間が最小化され得る。本実施形態では、コンプレッサ１４０は、状態ベクトルデータ、構成データ（例えば、プログラミングデータ）、およびＦＳＭ格子３０による分析後に得られた適合結果データを圧縮するために用いられ得る。１つの実施形態では、コンプレッサ１４０およびデコンプレッサ１３８は、コンプレッサ１４０およびデコンプレッサ１３８へおよび／から流れるデータが修正されない（例えば、圧縮も解凍もされない）ように、無効化され得る（例えば、オフされ得る）。
【００６５】
コンプレッサ１４０およびデコンプレッサ１３８はまた、複数集合のデータを取り扱うように構成することが可能であり、各々の集合のデータは可変長であり得る。圧縮されたデータを「パディングする」して、各々の圧縮された領域がいつ終了するかに関するインジケータを含むことによって、コンプレッサ１４０は、状態機械エンジン１４を介して全体的な処理速度を改善し得る。
【００６６】
状態機械エンジン１４は、状態ベクトルキャッシュメモリ１４２、状態ベクトルメモリバッファ１４４、状態ベクトル中間入力バッファ１４６、および状態ベクトル中間出力バッファ１４８を有する状態ベクトルシステム１４１を含む。状態ベクトルシステム１４１は、ＦＳＭ格子３０の複数の状態ベクトルを記憶し、状態ベクトルを状態機械エンジン１４上にもしくはこれから離れるように移動させ、状態ベクトルをＦＳＭ格子３０に提供してＦＳＭ格子３０を、提供された状態ベクトルに対応する状態に復元させるために用いられ得る。例えば、各々の状態ベクトルは状態ベクトルキャッシュメモリ１４２中に一時的に記憶され得る。すなわち、各々のＳＭＥ３４、３６の各々の状態が記憶され得るが、それにより、新しいデータ集合（例えば、検索項目）の分析のためにＳＭＥ３４、３６を開放しながら、状態が復元され、後でさらなる分析で用いられ得る。一般的なキャッシュのように、状態ベクトルキャッシュメモリ１４２は、状態ベクトルを、例えば、ここではＦＳＭ格子３０によって迅速に検索されて用いられるように記憶することを許容する。図示する実施形態では、状態ベクトルキャッシュメモリ１４２は、最大で５１２の状態ベクトルを記憶し得る。各々の状態ベクトルは、ＦＳＭ格子３０のＳＭＥ３４、３６の状態（例えば、起動された状態または起動されていない状態）およびカウンタ５８の動的な（例えば、現在の）カウント値を含み得る。
【００６７】
理解されるように、状態ベクトルデータは、あるランクの異なる状態機械エンジン１４（例えば、チップ）間で交換され得る。状態ベクトルデータは、ＦＳＭ格子３０のＳＭＥ３４、３６の状態とカウンタ５８の動的カウント値を同期化すること、複数の状態機械エンジン１４全体にわたって同じ機能を実施すること、複数の状態機械エンジン１４全体にわたって同じ結果を再現すること、複数の状態機械エンジン１４全体にわたって結果をカスケードすること、複数の状態機械エンジン１４を介してカスケードされたデータを分析するために用いられるＳＭＥ３４、３６の状態およびカウンタ５８の動的カウント値の履歴を記憶すること、などの様々な目的のために、異なる状態機械エンジン１４の間で交換され得る。さらにそのうえ、状態機械エンジン１４内で、状態ベクトルデータは状態ベクトルを迅速に復元するために用いられ得ることに留意すべきである。例えば、状態ベクトルデータは、ＳＭＥ３４、３６の状態およびカウンタ５８の動的カウント値を（例えば、新しい検索項目を検索するために）初期状態に復元させること、ＳＭＥ３４、３６の状態およびカウンタ５８の動的カウント値を（例えば、以前に検索された検索項目を検索するために）先行する状態に復元させること、およびＳＭＥ３４、３６の状態およびカウンタ５８の動的カウント値を（例えば、カスケード検索で検索項目を検索するために）カスケード構成用に構成されるように変更すること、のために用いられ得る。ある実施形態では、状態ベクトルデータは、（例えば、状態ベクトルデータの分析、修正を適用するための状態ベクトルデータの再構成、効率を改善するための状態ベクトルデータの再構成などのために）状態ベクトルデータがプロセッサ１２に提供され得るように、バスインターフェース１３０に提供され得る。
【００６８】
例えば、ある実施形態では、状態機械エンジン１４は、キャッシュされた状態ベクトルデータ（例えば、状態ベクトルシステム１４１によって記憶されたデータ）をＦＳＭ格子３０から外部デバイスに提供し得る。外部デバイスは、状態ベクトルデータを受信し、状態ベクトルデータを修正し、ＦＳＭ格子３０を復元させる（例えば、リセットする、初期化する）ために、修正された状態ベクトルデータを状態機械エンジン１４に提供し得る。したがって、外部デバイスは、状態機械エンジン１４が所望次第で状態をスキップする（例えば、ジャンプして回る）ように、状態ベクトルデータを修正し得る。
【００６９】
状態ベクトルキャッシュメモリ１４２は、状態ベクトルデータを任意の適切なデバイスから受信し得る。例えば、状態ベクトルキャッシュメモリ１４２は、状態ベクトルを、ＦＳＭ格子３０、別のＦＳＭ格子３０（例えば、ＩＲバスおよび処理バッファインターフェース１３６を介して）、デコンプレッサ１３８などから受信し得る。図示する実施形態では、状態ベクトルキャッシュメモリ１４２は、状態ベクトルを、他のデバイスから状態ベクトルメモリバッファ１４４を介して受信し得る。さらにそのうえ、状態ベクトルキャッシュメモリ１４２は、状態ベクトルデータを任意の適切なデバイスに提供し得る。例えば、状態ベクトルキャッシュメモリ１４２は、状態ベクトルデータを、状態ベクトルメモリバッファ１４４、状態ベクトル中間入力バッファ１４６、および状態ベクトル中間出力バッファ１４８に提供し得る。
【００７０】
状態ベクトルメモリバッファ１４４、状態ベクトル中間入力バッファ１４６、および状態ベクトル中間出力バッファ１４８などのさらなるバッファを、状態ベクトルキャッシュメモリ１４２と一緒に用いて、インターリーブされたパケットを持つ別個のデータ集合を状態機械エンジン１４によって処理しながら、状態ベクトルの迅速な取り出しおよび記憶に対応することができる。図示する実施形態では、状態ベクトルメモリバッファ１４４、状態ベクトル中間入力バッファ１４６、および状態ベクトル中間出力バッファ１４８の各々は、１つの状態ベクトルを一時的に記憶するように構成され得る。状態ベクトルメモリバッファ１４４は、任意の適切なデバイスから状態ベクトルデータを受信することおよび状態ベクトルデータを任意の適切なデバイスに提供することのために用いられ得る。例えば、状態ベクトルメモリバッファ１４４は、ＦＳＭ格子３０、別のＦＳＭ格子３０（例えば、ＩＲバスおよび処理バッファインターフェース１３６を介して）、デコンプレッサ１３８、および状態ベクトルキャッシュメモリ１４２から状態ベクトルを受信するために用いられ得る。別の例として、状態ベクトルメモリバッファ１４４は、（例えば、他のＦＳＭ格子３０用の）ＩＲバスおよび処理バッファインターフェース１３６、コンプレッサ１４０、および状態ベクトルキャッシュメモリ１４２に、状態ベクトルデータを提供するために用いられ得る。
【００７１】
同様に、状態ベクトル中間入力バッファ１４６は、状態ベクトルデータを任意の適切なデバイスから受信すること、および状態ベクトルデータを任意の適切なデバイスに提供することのために用いられ得る。例えば、状態ベクトル中間入力バッファ１４６は、ＦＳＭ格子３０（例えば、ＩＲバスおよび処理バッファインターフェース１３６を介して）、デコンプレッサ１３８、および状態ベクトルキャッシュメモリ１４２から状態ベクトルを受信するために用いられ得る。別の例として、状態ベクトル中間入力バッファ１４６は、状態ベクトルをＦＳＭ格子３０に提供するために用いられ得る。さらにそのうえ、状態ベクトル中間出力バッファ１４８は、状態ベクトルを任意の適切なデバイスから受信することおよび状態ベクトルを任意の適切なデバイスに提供することのために用いられ得る。例えば、状態ベクトル中間出力バッファ１４８は、ＦＳＭ格子３０および状態ベクトルキャッシュメモリ１４２から状態ベクトルを受信するために用いられ得る。別の例として、状態ベクトル中間出力バッファ１４８は、ＦＳＭ格子３０（例えば、ＩＲバスおよび処理バッファインターフェース１３６を介して）、およびコンプレッサ１４０に状態ベクトルを提供するために用いられ得る。
【００７２】
いったん目的とする結果がＦＳＭ格子３０によって生成されると、適合結果は、適合結果メモリ１５０に記憶され得る。すなわち、適合（例えば、目的とするパターンの検出）を示す「適合ベクトル」は、適合結果メモリ１５０に記憶され得る。適合結果は、次に、例えば、バスインターフェース１３０を介してプロセッサ１２に伝達されるように、適合バッファ１５２に送出することが可能である。以前に説明したように、適合結果は圧縮され得る。
【００７３】
さらなるレジスタおよびバッファは、状態機械エンジン１４でも提供され得る。例えば、状態機械エンジン１４は、制御およびステータスレジスタ１５４を含み得る。加えて、復元およびプログラムバッファ１５６は、初期にＦＳＭ格子３０のＳＭＥ３４、３６を構成し、分析中にＦＳＭ格子３０中のＳＭＥ３４、３６の状態を復元させる際に用いられるように提供され得る。同様に、保存および修復マップバッファ１５８もまた、セットアップおよび使用目的の保存および修復マップを記憶するために提供され得る。
【００７４】
図１０は、デバイスのランクに配列された例としての複数の物理的状態機械エンジン１４を示す。以前に説明したように、分析されるデータは、バスインターフェース１３０で受信される。バスインターフェース１３０は、各々の状態機械エンジン１４（例えば、Ｆ０、Ｆ１、Ｆ２、Ｆ３、Ｆ４、Ｆ５、Ｆ６、Ｆ７）のデータバッファ１３２および命令バッファ１３３を含むデータバッファシステム１５９にデータを方向付ける。データバッファ１３２は、分析されるデータを受信して一時的に記憶するように構成される。図示する実施形態では、各々の状態機械エンジン１４中に２つのデータバッファ１３２（例えば、データバッファＡおよびデータバッファＢ）が存在する。データは２つのデータバッファ１３２のうちの一方から排出されている間に、他方のデータバッファ１３２に記憶されて、ＦＳＭ格子３０によって分析され得る。以前に説明したように、命令バッファ１３３は、分析されるデータに対応する命令などの命令を、バスインターフェース１３０を介してプロセッサ１２から受信するように構成される。データバッファシステム１５９から、分析されるデータと、このデータに対応する命令とは、ＩＲバスおよび処理バッファインターフェース１３６を介して、ＦＳＭ格子３０（例えば、Ｆａ、Ｆｂ、Ｆｃ、Ｆｄ、Ｆｅ、Ｆｆ、Ｆｇ、Ｆｈ）のうちの１つ以上に対して提供される。本実施形態では、物理的ＦＳＭ格子３０は、論理群に配列される。具体的には、ＦｇおよびＦｈは論理群Ａ１６２に配列され、ＦｅおよびＦｆは論理群Ｂ１６４に配列され、ＦｃおよびＦｄは論理群Ｃ１６６に配列され、ＦａおよびＦｂは論理群Ｄ１６８に配列される。さらにそのうえ、理解されるように、データは、ＦＳＭ格子３０と別のデバイス（例えば、ＦＳＭ格子３０）との間で、ＩＲバスおよび処理バッファインターフェース１３６を介して交換され得る。例えば、ＩＲバスおよび処理バッファインターフェース１３６は、ＦＳＭ格子３０の任意のものの間でデータを交換するために用いられ得る。８個の状態機械エンジン１４が図示されているが、デバイスのランクは、任意の適切な数（例えば、１、２、４、８など）の状態機械エンジン１４を有し得る。理解されるように、ＩＲバスおよび処理バッファインターフェース１３６は、（例えば、データバッファシステム１５９およびＦＳＭ格子３０から）データを受信するための入力部を含み得る。同様に、ＩＲバスおよび処理バッファインターフェース１３６は、（例えば、ＦＳＭ格子３０に）データを送出するための出力部を含み得る。
【００７５】
バスインターフェース１３０は、分析されるデータを、そのデータが効率的に使用されるように調整された形式で受信し得る。具体的には、図１１〜１４は、どのようにしてデータがプロセッサ１２によって、バスインターフェース１３０を介して状態機械エンジン１４に提供されるデータブロック中に割り当てられる（例えば、グループ分けされる）かの例を示す。さらにそのうえ、図１５〜１７は、どのようにしてデータブロックが、状態機械エンジン１４のデータバッファシステム１５９を介して受信され、記憶され、提供され得るかの例を示す。図１８は、どのようにしてデータブロックが論理群１６２、１６４、１６６、および１６８によって受信され得るかを示す。
【００７６】
ここで、図１１を参照すると、状態機械エンジン１４に提供されるデータブロック中にプロセッサ１２によって割り当てられたデータセグメント（例えば、データ集合、検索項目）の例が図示されている。本実施形態では、複数のデータセグメントが単一のデータブロック中に割り当てられる。各々のデータブロックは、ＦＳＭ格子３０（例えば、状態機械エンジン１４のランクの１つ以上の状態機械エンジン１４）の単一の論理群によって分析されるように割り当てられる。例えば、データストリーム１７０（例えば、プロセッサ１２によって状態機械エンジン１４に送出される多量のデータ）は、論理群Ａ１６２向けと意図されるデータに対応する第１のデータブロック１７２と、論理群Ｂ１６４向けと意図されるデータに対応する第２のデータブロック１７４と、論理群Ｃ１６６向けと意図されるデータに対応する第３のデータブロック１７６と、論理群Ｄ１６８向けと意図されるデータに対応する第４のデータブロック１７８と、の中にプロセッサ１２によって割り当てられる。具体的には、データストリーム１７０は、プロセッサ１２によって、データセグメント１８０、１８２、１８４、１８６、１８８、１９０、１９２、１９４、１９６、１９８、および２００に分割される。理解されるように、データセグメント１８０、１８２、１８４、１８６、１８８、１９０、１９２、１９４、１９６、１９８、および２００の各々は、ＦＳＭ格子３０によって分析されるように設定されたデータ集合を表し得る。理解されるように、プロセッサ１２は、データセグメント１８０、１８２、１８４、１８６、１８８、１９０、１９２、１９４、１９６、１９８、および２００を、何らかの適切な理由によって、データブロック１７２、１７４、１７６、および１７８に割り当て得る。例えば、プロセッサ１２は、データ集合を効率的に処理するために、各々のデータ集合の長さおよび／またはデータ集合が分析される順序に基づいて、データセグメントをあるデータブロックに割り当て得る。
【００７７】
データセグメント１８０、１８２、１８４、１８６、１８８、１９０、１９２、１９４、１９６、１９８、および２００は、なんらかの適切な仕方を用いて、データブロック１７２、１７４、１７６、および１７８に割り当てられ得る。例えば、データセグメント１８０、１８２、１８４、１８６、１８８、１９０、１９２、１９４、１９６、１９８、および２００は、データブロック１７２、１７４、１７６、および１７８中のバイト数が最小化されるように、データブロック１７２、１７４、１７６、および１７８中に割り当てられ得る。別の例として、データセグメント１８０、１８２、１８４、１８６、１８８、１９０、１９２、１９４、１９６、１９８、および２００は、あるデータセグメントが一緒にグループ化されるように、データブロック１７２、１７４、１７６、および１７８中に割り当てられ得る。
【００７８】
図示するように、第１のデータブロック１７２は、データセグメントＡ１８０、データセグメントＦ１９０、およびデータセグメントＩ１９６を含む。第２のデータブロック１７４は、データセグメントＢ１８２およびデータセグメントＫ２００を含む。さらにそのうえ、第３のデータブロック１７６は、データセグメントＣ１８４、データセグメントＥ１８８、およびデータセグメントＧ１９２を含む。第４のデータブロック１７８は、データセグメントＤ１８６、データセグメントＨ１９４、およびデータセグメントＪ１９８を含む。
【００７９】
理解されるように、データブロックを効率的に処理するために、データブロックは全て、等しい量のデータを有し得る。さらにそのうえ、データブロック内のデータセグメントは、処理するデバイスが、データセグメントがいつ開始して停止するかを判定することが可能であるように、データブロック内の所定の間隔（例えば、バイト、語）で開始および／または停止し得る。しかしながら、データセグメントは、所定の間隔で開始および／または停止するための正確な量のデータを有していなくてもよい。したがって、データパディングが、データが所定の間隔で、データブロック内で開始および／または停止するように、あるデータセグメントの間に挿入され得る。加えて、データパディングは、全てのデータブロックが等しい量のデータを有するように、データブロックの最後に追加され得る。
【００８０】
ここで図１２を参照すると、図１１のデータブロック１７２、１７４、１７６、および１７８のデータセグメントの間に挿入されるデータパディングの例が図示されている。例えば、第１のデータブロック１７２中で、データパディング２０２は、データセグメントＡ１８０とデータセグメントＦ１９０との間に挿入され得る。さらに、データパディング２０４は、データセグメントＦ１９０とデータセグメントＩ１９６との間に挿入され得る。別の例として、第２のデータブロック１７４中で、データパディング２０６は、データセグメントＢ１８２とデータセグメントＫ２００との間に挿入され得る。第３のデータブロック１７６中で、データパディング２０８は、データセグメントＣ１８４とデータセグメントＥ１８８との間に挿入され得る。同様に、データパディング２１０は、データセグメントＥ１８８とデータセグメントＧ１９２との間に挿入され得る。別の例として、第４のデータブロック１７８中で、データパディング２１２は、データセグメントＤ１８６とデータセグメントＨ１９４との間に挿入され得る。加えて、データパディング２１４は、データセグメントＨ１９４とデータセグメントＪ１９８との間に挿入され得る。
【００８１】
データパディング２０２、２０４、２０６、２０８、２１０、２１２、および２１４は、分析されないずれかの適切なバイト数のデータ（例えば、無効データ、ジャンクデータ、フィラーデータ、ゴミデータなど）を含み得る。１つの実施形態では、データパディングとして用いられるバイト数は、先行するデータセグメントのバイト数に加算されたときに、全体の語境界に到達するバイト数（すなわち、先行するデータセグメントのバイト数にデータパディングとして用いられるバイト数を加算した数が全体の語境界によって等分されるバイト数）であり得る。例えば、データパディング２０２のバイト数は、データパディング２０２とデータセグメントＡ１８０（すなわち、先行するデータセグメント）との合計バイト数が全体の語境界によって等分されるような（例えば、剰余のない）数であり得る。図示する実施形態では、全体語境界は８バイトであり得る。他の実施形態では、全体語境界は、いずれかの適切なバイト数またはビット数であり得る。したがって、図示する実施形態では、データセグメントＡ１８０が６３バイトのデータを含むことになっている場合、データパディング２０２は、（例えば６４は８バイトによって等分されるので、データセグメントＡ１８０とデータパディング２０２との間に計で６４バイトのデータを作成するために）１バイトのデータを含む。別の例として、データセグメントＡ１８０が６０バイト（例えば、８で等分されない）のデータを含んだ場合、データパディング２０２は、４バイトのデータを含む。さらなる例として、データセグメントＡ１８０が６４バイトのデータを含んだ場合、データパディング２０２は、ゼロバイトのデータを含む、すなわち、言い換えれば、データパディング２０２は、データセグメントＡ１８０とデータセグメントＦ１９０との間では必要とされない。理解されるように、各々のデータパディング２０２、２０４、２０６、２０８、２１０、２１２、および２１４は、類似の仕方で動作し得る。
【００８２】
ここで図１３を参照すると、図１２のデータブロック１７２、１７４、１７６、および１７８のデータセグメントの後に挿入されたデータパディングの例が図示されている。具体的には、データパディングは、各々のデータブロック１７２、１７４、１７６、および１７８中のバイトの数を等しくするために、必要に応じて各々のデータブロック１７２、１７４、１７６、および１７８の最後に挿入され得る。さらにそのうえ、各々のデータブロック１７２、１７４、１７６、および１７８の最後のところのデータパディングは、各々のデータブロック１７２、１７４、１７６、および１７８が以前に説明したように全体語境界に到達するように用いられ得る。図示する実施形態では、データパディング２１６はデータセグメントＩ１９６の後に挿入され、データパディング２１８はデータセグメントＧ１９２の後に挿入され、データパディング２２０はデータセグメントＪ１９８の後に挿入される。したがって、データブロック１７２、１７４、１７６、および１７８の各々は、等しい数のバイトを含み、データブロック１７２、１７４、１７６、および１７８の各々は、全体語境界に到達する。
【００８３】
ＦＳＭ格子３０がデータパディングを有効なデータから区別することは困難であり得る。したがって、有効なデータの分析中に、データパディングがＦＳＭ格子３０によって特定されて無視されるように、命令はデータブロック１７２、１７４、１７６、および１７８に付随し得る。このような命令は、バスインターフェース１３０を介してプロセッサ１２によって状態機械エンジン１４に送出され得るし、状態機械エンジン１４の命令バッファ１６０によって受信、記憶、および提供され得る。命令を生成するために、プロセッサ１２は、データストリーム１７０を領域２２２、２２４、２２６、２２８、２３０、２３２、２３４、および２３６に論理的に分割し得る。領域２２２、２２４、２２６、２２８、２３０、２３２、２３４、および２３６の末端境界は、いずれかのデータパディングが終了するときに各々の領域が終了するように形成され得る。例えば、第１の領域２２２は、データパディング２０８が終了するときに終了する。別の例として、第５の領域２３０は、データパディング２０４が終了するときに終了する。
【００８４】
データブロック１７２、１７４、１７６、および１７８に付随する命令は、各々の領域２２２、２２４、２２６、２２８、２３０、２３２、２３４、および２３６のバイト数と、各々の領域内の各々のデータブロック１７２、１７４、１７６、および１７８の有効なバイト数（例えば、バイトパディングを除いたバイト数）とを含み得る。例えば、命令は、第１の領域２２２に対応するバイト数２３８と、第１の領域２２２内の第１のデータブロック１７２の有効なバイトに対応するバイト数２４０と、第１の領域２２２内の第２のデータブロック１７４の有効なバイトに対応するバイト数２４２と、第１の領域２２２内の第３のデータブロック１７６の有効なバイトに対応するバイト数２４４と、第１の領域２２２内の第４のデータブロック１７８の有効なバイトに対応するバイト数２４６と、を含み得る。
【００８５】
同様に、命令は、第２の領域２２４に対応するバイト数２４８、２５０、２５２、２５４、および２５６と、第３の領域２２６に対応するバイト数２５８、２６０、２６２、２６４、および２６６と、第４の領域２２８に対応するバイト数２６８、２７０、２７２、２７４、および２７６と、第５の領域２３０に対応するバイト数２７８、２８０、２８２、２８４、および２８６と、第６の領域２３２に対応するバイト数２８８、２９０、２９２、２９４、および２９６と、第７の領域２３４に対応するバイト数２９８、３０２、３０４、および３０６と、第８の領域２３６に対応するバイト数３０８、３１２、３１４、および３１６と、を含み得る。したがって、命令を用いて、ＦＳＭ格子３０は、データセグメントと共に挿入されたデータパディングを特定し得る。１つの具体的なタイプの命令を本明細書に提示したが、データブロック１７２、１７４、１７６、および１７８の群と共に含まれる命令は、ＦＳＭ格子３０が、有効なデータをデータパディング（すなわち、無効なデータ）から区別することを可能とするいずれかの適切な命令の群であり得ることに留意すべきである。
【００８６】
ここで図１４を参照すると、状態機械エンジン１４のデータバッファシステム１５９に伝達するようにプロセッサ１２によって組織化された図１３のデータブロック１７２、１７４、１７６、および１７８の例が図示されている。データブロック１７２、１７４、１７６、および１７８の各々は、データの行が全体語長に等しいバイト数３１８を有するように配列される。図示する実施形態では、全体語長は、状態機械エンジン１４（例えば、Ｆ０、Ｆ１、Ｆ２、Ｆ３、Ｆ４、Ｆ５、Ｆ６、およびＦ７）の各々に対して、バイトで表わして８バイトである。データセグメントの各々からの最初のバイトは、各々のデータブロック１７２、１７４、１７６、および１７８の右側から始まり、各々のデータブロックの左側に向かって増加し、それにより、データセグメントＡ１８０の第１のバイトが列Ｆ０中にあり、データセグメントＡ１８０の第８のバイトが列Ｆ７中にあるようにする。理解されるように、列Ｆ０は、Ｆ０という状態機械エンジン１４のデータバッファ１３２中に最初に記憶されるデータを表し、列Ｆ１は、Ｆ１という状態機械エンジン１４のデータバッファ１３２中に最初に記憶されるデータを表し、となる。さらにそのうえ、データセグメントは、上から下に向かって行中に置かれる。図示するように、データセグメントとデータパディングとの各々の組み合わせは、列Ｆ７で終了する（すなわち、それらは各々が、全体語長にまで延在する）。さらにそのうえ、各々のデータブロック１７２、１７４、１７６、および１７８は、サイズが等しい。理解されるように、動作中は、データブロック１７２、１７４、１７６、および１７８は、プロセッサ１２から状態機械エンジン１４に連続的に提供され得る。
【００８７】
データブロック１７２、１７４、１７６、および１７８からのデータは、論理群１６２、１６４、１６６、および１６８向けに意図されるデータがデータバッファシステム１５９中で混ざり合い、それにより各々の論理群１６２、１６４、１６６、および１６８向けに意図されるデータの一部分が各々の状態機械エンジン１４（例えば、Ｆ０、Ｆ１、Ｆ２、Ｆ３、Ｆ４、Ｆ５、Ｆ６、およびＦ７）内で混ざり合うように、配列される。データは、この様式で受信および記憶され、データがバスインターフェース１３０を介してデータバッファシステム１５９に迅速に提供されることを可能にし得る。ある実施形態では、データバッファシステム１５９のデータバッファ１３２は、バスインターフェース１３０からのデータを（例えば、所定の間隔で）ラッチするように構成され得る。他の実施形態では、データバッファシステム１５９のデータバッファ１３２は、データバッファ１３２とバスインターフェース１３０との間の接続に基づいてデータの限られた部分を受信し得る。以下に詳述するように、混ざり合わされたデータは、データがＩＲバスおよび処理バッファインターフェース１３６を介してデータバッファシステム１５９から処理バッファ１３４に提供されたときに分類される。
【００８８】
ここで図１５に目を転じると、状態機械エンジン１４によって受信されているデータブロック１７２、１７４、１７６、および１７８の例が図示されている。具体的には、データバッファシステム１５９は第１のデータブロック１７２を受信して、その後に第２のデータブロック１７４、第３のデータブロック１７６、および第４のデータブロック１７８を受信する。上述したように、データブロック１７２、１７４、１７６、および１７８の各々は、特定の論理群１６２、１６４、１６６、および１６８によって分析されるように、プロセッサ１２によって割り当てられ得る。データバッファシステム１５９がデータブロック１７２、１７４、１７６、および１７８を受信するとき、データバッファシステム１５９は、データブロック１７２、１７４、１７６、および１７８からのデータを体系的な様式でバッファ中に記憶し、それにより、データがデータバッファシステム１５９からＦＳＭ格子１６２、１６４、１６６、および１６８に正確に提供されるようにする。
【００８９】
したがって、図１６は、図１５のデータブロック１７２、１７４、１７６、および１７８がどのようにして状態機械エンジン１４のデータバッファシステム１５９中に記憶されるかの例を示す。特に、第１のデータブロック１７２からのデータは、第１のバッファ行と、その後の４つ目毎の行（例えば、行５、９、１３、１７など）とに記憶される。同様に、第２のデータブロック１７４からのデータは、第２のバッファ行と、その後の４つ目毎の行（例えば、行６、１０、１４、１８など）とに記憶される。さらに、第３のデータブロック１７６からのデータは、第３のバッファ行と、その後の４つ目毎の行（例えば、行７、１１、１５、１９など）とに記憶される。加えて、第４のデータブロック１７８からのデータは、第４のバッファ行と、その後の４つ目毎の行（例えば、行８、１２、１６、２０など）とに記憶される。一部の状態機械エンジン１４は、４つのＦＳＭ格子１６２、１６４、１６６、および１６８よりも少ないまたは多い格子を含み得ることに留意すべきである。したがって、他の実施形態では、データバッファシステム１５９は、データブロックからのデータを別の様式で記憶するように構成され得る。例えば、８個のＦＳＭ格子を持つ状態機械エンジン１４では、各々のＦＳＭ格子用のデータブロックは、バッファの１つの行と、その後の８つ目毎の行とに記憶されたデータを有し得る。
【００９０】
ここで図１７を参照すると、データバッファシステム１５９から複数のＦＳＭ格子に提供されるデータの例が図示されている。具体的には、データはデータバッファシステム１５９から取り出されて、ＩＲバスおよび処理バッファインターフェース１３６にデータバーストで提供される。（全体の語中のバイト数３１８が８バイトである）１つの実施形態では、１つのＩＲバスサイクルを完了させるのに、８つのデータバーストを用いる。具体的には、第１のデータバースト３２０において、列Ｆ０からの４バイト（例えば、各々のデータブロック１７２、１７４、１７６、および１７８からの１バイトずつ）を、ＩＲバスおよび処理バッファインターフェース１３６に提供する。同様に、第２のデータバースト３２２では、列Ｆ１からの４バイト（例えば、各々のデータブロック１７２、１７４、１７６、および１７８からの１バイトずつ）を、ＩＲバスおよび処理バッファインターフェース１３６に提供する。第３のデータバースト３２４では、列Ｆ２からの４バイト（例えば、各々のデータブロック１７２、１７４、１７６、および１７８からの１バイトずつ）を、ＩＲバスおよび処理バッファインターフェース１３６に提供する。さらに、第４のデータバースト３２６では、列Ｆ３からの４バイト（例えば、各々のデータブロック１７２、１７４、１７６、および１７８からの１バイトずつ）を、ＩＲバスおよび処理バッファインターフェース１３６に提供する。第５のデータバースト３２８では、列Ｆ４からの４バイト（例えば、各々のデータブロック１７２、１７４、１７６、および１７８からの１バイトずつ）を、ＩＲバスおよび処理バッファインターフェース１３６に提供する。同様に、第６のデータバースト３３０では、列Ｆ５からの４バイト（例えば、各々のデータブロック１７２、１７４、１７６、および１７８からの１バイトずつ）を、ＩＲバスおよび処理バッファインターフェース１３６に提供する。第７のデータバースト３３２では、列Ｆ６からの４バイト（例えば、各々のデータブロック１７２、１７４、１７６、および１７８からの１バイトずつ）を、ＩＲバスおよび処理バッファインターフェース１３６に提供する。さらに、第８のデータバースト３３４では、列Ｆ７からの４バイト（例えば、各々のデータブロック１７２、１７４、１７６、および１７８からの１バイトずつ）を、ＩＲバスおよび処理バッファインターフェース１３６に提供する。したがって、データは、データバッファシステム１５９から取り出されてＩＲバスおよび処理バッファインターフェース１３６に、データバーストを用いて体系的な内容で提供される。
【００９１】
図１８に目を転じると、データバースト３２０、３２２、３２４、３２６、３２８、３３０、３３２、および３３４の複数の論理群１６２、１６４、１６６、および１６８中へのデータ提供の例が図示されている。具体的には、図示する実施形態では、論理群Ａ１６２（例えば、Ｆｇ、Ｆｈ）の処理バッファ１３４は、ＩＲバスおよび処理バッファインターフェース１３６上に提供された各々のデータバースト３２０、３２２、３２４、３２６、３２８、３３０、３３２、および３３４の第１のバイトをラッチするように構成され得る。同様に、論理群Ｂ１６４（例えば、Ｆｅ、Ｆｆ）の処理バッファ１３４は、ＩＲバスおよび処理バッファインターフェース１３６上に提供された各々のデータバースト３２０、３２２、３２４、３２６、３２８、３３０、３３２、および３３４の第２のバイトをラッチするように構成され得る。加えて、論理群Ｃ１６６（例えば、Ｆｃ、Ｆｄ）の処理バッファ１３４は、ＩＲバスおよび処理バッファインターフェース１３６上に提供された各々のデータバースト３２０、３２２、３２４、３２６、３２８、３３０、３３２、および３３４の第３のバイトをラッチするように構成され得る。論理群Ｄ１６８（例えば、Ｆａ、Ｆｂ）の処理バッファ１３４は、ＩＲバスおよび処理バッファインターフェース１３６上に提供された各々のデータバースト３２０、３２２、３２４、３２６、３２８、３３０、３３２、および３３４の第４のバイトをラッチするように構成され得る。
【００９２】
理解されるように、論理群１６２、１６４、１６６、および１６８の処理バッファ１３４は、ＩＲバスおよび処理バッファインターフェース１３６上に提供された任意のバイトまたはバイトの組み合わせをラッチするように構成され得る。さらに、処理バッファＡおよび処理バッファＢは、同じまたは異なるバイトをラッチするように構成され得る。１つの実施形態では、状態機械エンジン１４は、２つよりも少ないまたは多い処理バッファ１３４を含み得る。このような実施形態では、各々の処理バッファ１３４は、ＩＲバスおよび処理バッファインターフェース１３６上に提供された特定のバイト（例えば、バースト）をラッチするように構成され得る。論理群１６２、１６４、１６６、および１６８の処理バッファ１３４はまた、データバーストに付随する命令をデータバッファシステム１５９から受信するように構成され得る。命令を用いて、論理群１６２、１６４、１６６、および１６８の処理バッファ１３４は、データ領域中のバイトの総数とそのデータ領域中の有効なバイトの総数との間の差に対応するデータを無視し得る。
【００９３】
本発明は様々な修正および代替の形態の影響を受け得るとはいえ、特定の実施形態を図面中で例として示し、本明細書中で詳細に説明した。しかしながら、本発明は開示する特定の形態に制限されることを意図するものではないことを理解すべきである。むしろ、本発明は、次の添付クレームによって定義される本発明の精神および範囲内の全ての修正例、等価例、および代替例を範囲に収めるものである。
【図６】
0006017034.tif 000002
【図１５】
0006017034.tif 000003
【図１６】
0006017034.tif 000004
【図１】
0006017034.tif 000005
【図２】
0006017034.tif 000006
【図３】
0006017034.tif 000007
【図４】
0006017034.tif 000008
【図５】
0006017034.tif 000009
【図７】
0006017034.tif 000010
【図８】
0006017034.tif 000011
【図９】
0006017034.tif 000012
【図１０】
0006017034.tif 000013
【図１１】
0006017034.tif 000014
【図１２】
0006017034.tif 000015
【図１３】
0006017034.tif 000016
【図１４】
0006017034.tif 000017
【図１７】
0006017034.tif 000018
【図１８】
0006017034.tif 000019