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