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