(57)【要約】デバイスおよび方法が開示され、その中で、有限状態機械格子（３０）を含むのはデバイスである。格子（３０）は、格子（３０）におけるプログラム可能な要素（３４、３６）が条件を検出する回数をカウントするのに適したカウンタ（５８）を含み得る。カウンタ（５８）は、条件が一定回数検出されたカウンティングに応答して出力するように構成され得る。例えば、カウンタ（５８）は、条件が少なくとも一定回数（または一定回数を超えずに）検出された決定、条件が正確に一定回数検出された決定、あるいは条件が一定範囲の回数内で検出された決定に応答して出力するように構成され得る。カウンタ（５８）は、高カウント動作および／または一定数量詞を決定するためにデバイスにおける他のカウンタ（５８）に結合され得る。【選択図】図１０
2015505399.tif 000002
【特許請求の範囲】
【請求項１】
デバイスであって、
ブロックのそれぞれが複数の列を備える複数の前記ブロックを備える、有限状態機械（ＦＳＭ）格子を備え、
前記列のそれぞれが、複数のプログラム可能な要素を備え、前記プログラム可能な要素の特定の１つは、条件の検出に基づいて信号を出力するように構成され、
前記ブロックの特定の１つの前記列の少なくとも１つが、前記ブロックの前記特定の１つの前記複数の列のいずれかにおいて前記複数のプログラム可能な要素のいずれかに選択的に結合可能であるように構成されたカウンタを更に備え、前記カウンタは、前記条件が一定回数検出されたカウンティングに応答して出力するように構成される、デバイス。
【請求項２】
前記ブロックの前記特定の１つの前記複数の列のそれぞれは、前記カウンタとその列の前記複数のプログラム可能な要素のいずれかを選択的に結合するように構成された列内回路を備える、請求項１に記載のデバイス。
【請求項３】
前記複数のブロックのそれぞれは、そのブロックの前記複数の列のいずれかを選択的に結合するように構成されたブロック内回路を備え、そのブロックの前記複数の列の１つにおける１つのカウンタは、そのブロックの前記複数の列の別の１つにおける別のカウンタに結合され得る、請求項２に記載のデバイス。
【請求項４】
前記格子は、前記複数のブロックのいずれかを選択的に結合するように構成されたブロック間回路を備え、前記複数のブロックの前記特定の１つにおける前記カウンタは、前記列内回路、前記ブロック内回路、およびブロック間回路経由で前記複数のブロックの別の１つにおけるプログラム可能な要素に選択的に結合され得る、請求項３に記載のデバイス。
【請求項５】
各カウンタは、デクリメントカウンタを備える、請求項１に記載のデバイス。
【請求項６】
前記複数の列における任意の他のカウンタに選択的に結合可能であるように構成された前記カウンタは、段階的に接続されたカウンタを形成するために前記複数の列における任意の他のカウンタに選択的に結合可能であるように構成された前記カウンタを備える、請求項１に記載のデバイス。
【請求項７】
各カウンタは、
ゼロにデクリメントする前記カウンタに応答して前記カウンタがリセットされるまで、前記カウンタをゼロに保持するためにアサートされるように構成された保持入力と、
前記保持入力がアサートされないときに前記カウンタの初期値をロードするためにアサートされるように構成されたロール入力と、を備える、請求項１に記載のデバイス。
【請求項８】
各カウンタは、
前記カウンタに、段階的に接続されたカウンタの一部であることを可能にするためにアサートされるように構成されたイネーブル連鎖入力と、
ゼロにデクリメントする前記カウンタに応答して前記カウンタの初期値を繰越すためにアサートされるように構成されたロール入力と、を備える、請求項１に記載のデバイス。
【請求項９】
各カウンタは、低位カウンタから繰越された値を受信するように構成された繰上げ入力を備える、請求項８に記載のデバイス。
【請求項１０】
各カウンタは、ゼロにデクリメントする高位カウンタに応答して指示を受信するように構成された結果入力を備える、請求項９に記載のデバイス。
【請求項１１】
前記各カウンタは、前記カウンタをリセットするために別のカウンタによってアサートされるように構成されたイネーブルリセット入力を備える、請求項８に記載のデバイス。
【請求項１２】
前記イネーブルリセット入力は、前記カウンタが複数の他のカウンタのいずれかによってリセットされることを可能にするように構成された複数のイネーブルリセット入力を備える、請求項１１に記載のデバイス。
【請求項１３】
カウンタを備えない前記ブロックの前記特定の１つの前記複数の列の特定の１つは、ブール論理セルを備え、前記ブール論理セルは、列内回路およびブロック内回路経由で前記カウンタに選択的に結合可能である、請求項１に記載のデバイス。
【請求項１４】
前記条件が一定回数検出されたカウンティングに応答して出力するように構成された前記カウンタは、前記条件が少なくとも前記一定回数検出されたカウンティングに応答して出力するように構成された前記カウンタを備える、請求項１に記載のデバイス。
【請求項１５】
前記条件が一定回数検出されたカウンティングに応答して出力するように構成された前記カウンタは、前記条件が正確に前記一定回数検出されたカウンティングに応答して出力するように構成された前記カウンタを備える、請求項１に記載のデバイス。
【請求項１６】
前記条件が一定回数検出されたカウンティングに応答して出力するように構成された前記カウンタは、前記条件が一定範囲の回数内で検出されたカウンティングに応答して出力するように構成された前記カウンタを備える、請求項１に記載のデバイス。
【請求項１７】
前記カウンタは、前記ブロックの前記特定の１つの前記複数の列における任意の他のカウンタに選択的に結合可能であるように構成される、請求項１に記載のデバイス。
【請求項１８】
前記ＦＳＭ格子を備えるサーバ、パーソナルコンピュータ、ワークステーション、ルータ、ネットワークスイッチ、チップテスト装置、ラップトップ、携帯電話、メディアプレーヤー、ゲームコンソール、またはメインフレームコンピュータを備える、請求項１に記載のデバイス。
【請求項１９】
カウンタでカウント動作を実行する方法であって、
条件を検出するために状態機械格子においてデータストリームを解析することと、
前記条件が検出されるたびに前記カウンタでカウントすることと、
前記条件が一定回数検出されたことをカウントする前記カウンタに応答して前記カウンタから出力することと、
前記条件が一定回数検出されたことをカウントする前記カウンタ、アサートされた前記カウンタのロール入力、およびアサートされていない前記カウンタの保持入力に応答して、初期値を前記カウンタにロードすることと、
アサートされた前記カウンタの前記保持入力に応答して前記カウンタのリセットまで前記カウンタの前記出力を保持することであって、前記カウント動作の数量詞に基づいて、前記カウンタの前記ロール入力または前記カウンタの前記保持入力がアサートされ、あるいは前記カウンタの前記ロール入力または前記保持入力がアサートされない、当該保持することと、を含む、方法。
【請求項２０】
前記初期値を前記カウンタの中にロードすることと、前記カウンタに前記初期値をラッチすることと、を含む、請求項１９に記載の方法。
【請求項２１】
前記カウンタでカウントすることは、前記条件が検出されるたびに前記初期値からカウントをデクリメントすることを含む、請求項１９に記載の方法。
【請求項２２】
前記カウンタから出力することは、ゼロカウントを出力することを含む、請求項２１に記載の方法。
【請求項２３】
前記カウンタの前記出力を保持することは、前記カウントをゼロに保持することを含む、請求項２２に記載の方法。
【請求項２４】
前記カウンタでカウントすることは、段階的に接続されたカウンタでカウントすることを含む、請求項１９に記載の方法。
【請求項２５】
前記数量詞は、前記条件が少なくとも一定回数検出されるかどうかの決定、前記条件が一定回数を超えずに検出されるかどうかの決定、前記条件が正確に一定回数検出されるかどうかの決定、および前記条件が一定範囲の回数内で検出されるかどうかの決定の１つを含む、請求項１９に記載の方法。
【請求項２６】
デバイスであって、
カウンタであり、
カウントイネーブル信号を受信し、条件の検出に応答してカウントをデクリメントし、
ゼロにデクリメントする当該カウンタに応答してゼロカウントを出力し、
保持入力が当該カウンタ上にアサートされる場合、当該カウンタがリセットされるまで前記ゼロカウントを保持し、
低レベルカウンタが当該カウンタと段階的に接続される場合、前記低レベルカウンタから繰上げ入力を受信し、
ゼロにデクリメントする当該カウンタに応答して前記低レベルカウンタに指示し、
リセット信号をアサートする別のカウンタに応答してリセットするように、構成された、カウンタを備える、デバイス。
【請求項２７】
前記カウンタは、ゼロへのデクリメント後、前記カウンタがリセットされるまで、前記ゼロカウントを出力するように構成される、請求項２６に記載のデバイス、
【請求項２８】
ブール論理セルを備え、前記カウンタが、前記ブール論理セルに選択的に結合されるように構成される、請求項２６に記載のデバイス。
【請求項２９】
条件の検出に応答して前記カウントイネーブル信号を提供するように構成されたプログラム可能な要素を備え、条件の検出に応答してカウントをデクリメントするように構成された前記カウンタは、前記条件が前記プログラム可能な要素によって検出された回数をカウントするように構成された前記カウンタを備える、請求項２６に記載のデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の実施形態は、一般に、電子デバイス、より詳細には、一定の実施形態では、パターン認識のための並列有限状態機械に関するものである。
【背景技術】
【０００２】
コンピューティング分野において、パターン認識タスクは、ますます困難化している。今までよりも大量のデータがコンピュータ間で伝送され、ユーザが検出することを望むパターンの数は増加している。例えば、スパムおよびマルウェアは、データストリームにおけるパターン、例えば、コードの特定のフレーズまたはピースを検索することによって検出されることが多い。パターンの数は、新たなパターンが新たな変形を検索するために実装され得るので、スパムおよびマルウェアの多様性と共に増加する。
【０００３】
パターンを認識することは、パターンを示している種々の条件の検出を含むことが多い可能性がある。また、（複数の）条件が検出される回数をカウントすることは有用であり得る。カウンタは、条件が検出される回数をカウントするために実装され得る。しかしながら、パターンを認識することは、時として、基本カウンタによって容易にカウントされ得ない検出された条件の一定の数量詞（ｑｕａｎｔｉｆｉｅｒ）を含み得る。
【図面の簡単な説明】
【０００４】
【図１】発明の種々の実施形態に係る、状態機械エンジンを有するシステムの例を例示する。
【図２】発明の種々の実施形態に係る、図１の状態機械エンジンのＦＳＭ格子の例を例示する。
【図３】発明の種々の実施形態に係る、図２のＦＳＭ格子のブロックの例を例示する。
【図４】発明の種々の実施形態に係る、図３のブロックの列の例を例示する。
【図５】発明の種々の実施形態に係る、図４の列の２つのグループ（Ｇｒｏｕｐ  ｏｆ  Ｔｗｏ）の例を例示する。
【図６】発明の種々の実施形態に係る、有限状態機械グラフの例を例示する。
【図７】発明の種々の実施形態に係る、ＦＳＭ格子を用いて実装される２つのレベル階層の例を例示する。
【図８】発明の種々の実施形態に係る、図２のＦＳＭ格子のプログラミングのためにソースコードをバイナリファイルに変換するコンパイラのための方法の例を例示する。
【図９】発明の種々の実施形態に係る、状態機械エンジンを例示する。
【図１０】発明の種々の実施形態に係る、ブロックの列内にカウンタを有する図３にあるようなブロックを例示する。
【図１１】発明の種々の実施形態に係る、図１０のカウンタを例示する。
【発明を実施するための形態】
【０００５】
ここで図面を参照すると、図１は、参照数字１０によって一般に示され、プロセッサをベースとしたシステムの実施形態を例示する。システム１０は、デスクトップコンピュータ、ラップトップコンピュータ、ページャ、携帯電話、パーソナルオーガナイザー、ポータブルオーディオプレーヤー、制御回路、カメラ等のようなさまざまな種類のいずれかであり得る。システム１０はまた、ルータ、サーバ、またはクライアント（例えば、前に記載した種類のコンピュータの１つ）のようなネットワークノードであり得る。システム１０は、コピー機、スキャナ、プリンタ、ゲームコンソール、テレビ、セットトップ型ビデオ分配もしくは記録システム、ケーブルボックス、パーソナルデジタルメディアプレーヤー、工場自動化システム、自動車コンピュータシステム、または医療デバイスのような、いくつかの他の部類の電子デバイスであり得る。（本明細書に使用される他の用語の多くのように、システムのこれらの種々の例を記載するために仕様される用語は、いくつかの指示対象を共有し得、従って、リスト化された他の項目によって狭く解釈されるべきではない。）
【０００６】
典型的なプロセッサをベースとしたデバイス、例えばシステム１０では、マイクロプロセッサのようなプロセッサ１２が、システム１０におけるシステム機能および要求の処理を制御する。更に、プロセッサ１２は、システム制御を共有する複数のプロセッサを備え得る。プロセッサ１２は、プロセッサ１２が、システム１０内もしくはシステム１０の外部に記憶され得る命令を実行することによってシステム１０を制御するように、システム１０における要素のそれぞれに直接的または間接的に結合され得る。
【０００７】
本明細書に記載された実施形態に従って、システム１０は、プロセッサ１２の制御下で動作し得る状態機械エンジン１４を含む。状態機械エンジン１４は、限定されるものではないが、ミーリー型アーキテクチャ、ムーア型アーキテクチャ、有限状態機械（ＦＳＭ）、決定論的ＦＳＭ（ＤＦＳＭ）、ビット並列状態機械（ＢＰＳＭ）等を含む、多数の状態機械アーキテクチャのいずれか１つを用い得る。さまざまなアーキテクチャが記述目的のために使用され得るが、適用はＦＳＭに言及する。しかしながら、当業者は、記載された技法が、さまざまな状態機械アーキテクチャのいずれか１つを使用して用いられ得ることを理解するであろう。
【０００８】
以下に更に記述されるように、状態機械エンジン１４は、多数の（例えば、１つ以上の）有限状態機械（ＦＳＭ）格子を含み得る。各ＦＳＭ格子は、同じデータを並列にそれぞれ受信し解析する複数のＦＳＭを含み得る。更に、ＦＳＭ格子は、ＦＳＭ格子のクラスターが同じ入力データを並列に解析し得るように、グループ（例えば、クラスター）に配列され得る。更に、状態機械エンジン１４のＦＳＭ格子のクラスターは、階層型構造に配列され得、階層型構造の低いレベル上の状態機械格子からの出力は、高いレベル上の状態機械格子への入力として使用され得る。階層型構造を通して直列に状態機械エンジン１４の並列ＦＳＭ格子のクラスターを段階的に接続する（ｃａｓｃａｄｉｎｇ）ことによって、ますます複雑なパターンが、解析され得る（例えば、評価され得る、検索され得る、など）。
【０００９】
更に、状態機械エンジン１４の階層型並列構成に基づいて、状態機械エンジン１４は、速い処理速度を利用するシステムにおけるパターン認識のために用いられ得る。例えば、本明細書に記載された実施形態は、１Ｇバイト／秒の処理速度でシステムに組み込まれ得る。従って、状態機械エンジン１４を利用して、高速メモリデバイスまたは他の外部デバイスからのデータは、種々のパターンについて迅速に解析され得る。状態機械エンジン１４は、ほぼ同時に、例えば、単一のデバイスサイクルの間に、いくつかの基準に従うデータストリーム、および、それらのそれぞれの検索用語を解析し得る。状態機械エンジン１４のあるレベル上のＦＳＭのクラスター内のＦＳＭ格子のそれぞれは、ほぼ同時にデータストリームから同じ検索用語をそれぞれ受信し得、並列ＦＳＭ格子のそれぞれは、その用語が、処理基準における次の状態に状態機械エンジン１４を進めるかどうかを決定し得る。状態機械エンジン１４は、比較的多数の基準、例えば、１００を超える、１１０を超える、あるいは１０，０００を超える基準に従って、用語を解析し得る。それらは並列に動作するので、それらは、データストリームを遅くすること無く、比較的高い帯域幅を有するデータストリーム、例えば、１Ｇバイト／秒より大きいまたは１Ｇバイト／秒に概ね等しいデータストリームに基準を適用し得る。
【００１０】
一実施形態では、状態機械エンジン１４は、データストリームにおける非常に多くのパターンを認識（例えば、検出）するように構成され得る。例えば、状態機械エンジン１４は、ユーザまたは他の実在者が解析することを望み得るさまざまな種類のデータストリームの１つ以上におけるパターンを検出するために利用され得る。例えば、状態機械エンジン１４は、インターネット上で受信されたパケットまたはセルラー式ネットワーク上で受信された音声もしくはデータなどの、ネットワーク上で受信されたデータのストリームを解析するように構成され得る。一例では、状態機械エンジン１４は、スパムまたはマルウェアについてのデータストリームを解析するように構成され得る。データストリームは、シリアルデータストリームとして受信され得、そのシリアルデータストリームでは、データが、意味を持つ順番で、例えば、時間的に、語彙的に、または意味論的に意味のある順番で、受信される。あるいは、データストリームは、並列にまたは順番がバラバラに受信され得、次いで、例えば、インターネット上で受信されたパケットを並べ換えることによって、シリアルデータストリームに変換され得る。いくつかの実施形態では、データストリームは、用語を順次に提示し得るが、用語のそれぞれを表現するビットは、並列に受信され得る。データストリームは、システム１０の外部のソースから受信され得、あるいは、メモリ１６のようなメモリデバイスに問い合わせることによって、および、メモリ１６内に記憶されたデータからデータストリームを形成することによって、形成され得る。他の例では、状態機械エンジン１４は、一定の語を綴る文字の順序、遺伝子を指定する遺伝ベースのペアの順序、画像の一部を形成するピクチャもしくはビデオファイルにおけるビットの順序、プログラムの一部を形成する実行可能ファイルにおけるビットの順序、または歌のもしくは話されるフレーズの一部を形成する音声ファイルにおけるビットの順序を認識するように構成され得る。解析されることになるデータのストリームは、バイナリフォーマットまたは他のフォーマット、例えば、十進法、ＡＳＣＩＩ等におけるデータの複数のビットを含み得る。ストリームは、データを単一数字または複数数字、例えば、いくつかの２進数字で符号化し得る。
【００１１】
理解されることになるように、システム１０はメモリ１６を含み得る。メモリ１６は、動的ランダムアクセスメモリ（ＤＲＡＭ）、静的ランダムアクセスメモリ（ＳＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレートＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、ＤＤＲ２  ＳＤＲＡＭ、ＤＤＲ３  ＳＤＲＡＭ等のような揮発性メモリを含み得る。メモリ１６はまた、揮発性メモリと併せて使用されることになる、読み取り専用メモリ（ＲＯＭ）、ＰＣ‐ＲＡＭ、シリコン‐酸化物‐窒化物‐酸化物‐シリコン（ＳＯＮＯＳ）メモリ、金属‐酸化物‐窒化物‐酸化物‐シリコン（ＭＯＮＯＳ）メモリ、ポリシリコン浮遊ゲートをベースとしたメモリ、および／または種々のアーキテクチャの他の種類のフラッシュメモリ（例えば、ＮＡＮＤメモリ、ＮＯＲメモリ等）のような不揮発性メモリも含み得る。メモリ１６は、状態機械エンジン１４によって解析されることになるデータを提供し得るＤＲＡＭデバイスなどの１つ以上のメモリデバイスを含み得る。そのようなデバイスは、ソリッドステートドライブ（ＳＳＤ）、マルチメディアメディアカード（ＭＭＣ）、Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ（ＳＤ）カード、コンパクトフラッシュ（登録商標）（ＣＦ）カード、または任意の他の適切なデバイスとして呼ばれ得るか、それらを含み得る。更に、そのようなデバイスは、ユニバーサルシリアルバス（ＵＳＢ）、周辺部品相互接続（ＰＣＩ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩ‐Ｅ）、小型コンピュータシステムインターフェース（ＳＣＳＩ）、ＩＥＥＥ１３９４（Ｆｉｒｅｗｉｒｅ）のような任意の適切なインターフェース、または任意の他の適切なインターフェース経由でシステム１０に結合され得ることが理解されるべきである。フラッシュメモリデバイスなどのメモリ１６の動作を容易にするために、システム１０は、メモリコントローラ（例示されない）を含み得る。理解されることになるように、メモリコントローラは、独立のデバイスであってもよいし、あるいは、それは、プロセッサ１２と一体化されてもよい。加えて、システム１０は、磁気記憶デバイスなどの外部記憶装置１８を含み得る。外部記憶装置はまた、入力データを状態機械エンジン１４に提供し得る。
【００１２】
システム１０は、多数の追加要素を含み得る。例えば、コンパイラ２０は、図８に関してより詳細に記載されるように、状態機械エンジン１４をプログラムするために使用され得る。入力デバイス２２はまた、ユーザがデータをシステム１０に入力することを可能にするためにプロセッサ１２に結合され得る。例えば、入力デバイス２２は、状態機械エンジン１４による後の解析のためにデータをメモリ１６の中に入力するために使用され得る。入力デバイス２２は、例えば、ボタン、スイッチング要素、キーボード、ライトペン、スタイラス、マウス、および／または音声認識システムを含み得る。ディスプレイなどの出力デバイス２４がまた、プロセッサ１２に結合され得る。ディスプレイ２４は、例えば、ＬＣＤ、ＣＲＴ、ＬＥＤ、および／またはオーディオディスプレイを含み得る。それらシステムはまた、インターネットなどのネットワークとインターフェースをとるために、ネットワークインターフェースカード（ＮＩＣ）などのネットワークインターフェースデバイス２６を含み得る。理解されることになるように、システム１０は、システム１０の用途に応じて、多くの他の構成要素を含み得る。
【００１３】
図２〜図５は、ＦＳＭ格子３０の例を例示する。ある例では、ＦＳＭ格子３０はブロック３２のアレイを備える。記載されることになるように、各ブロック３２は、ＦＳＭにおける複数の状態に対応する複数の選択的に結合可能なハードウェア要素（例えば、プログラム可能な要素および／または特殊目的の要素）を含み得る。ＦＳＭにおける状態に類似して、ハードウェア要素は、入力ストリームを解析することができ、入力ストリームに基づいて、ダウンストリームのハードウェア要素を作動することができる。
【００１４】
プログラム可能な要素は、多くの異なる機能を実装するようにプログラムされ得る。例えば、プログラム可能な要素は、（図３および図４に示される）列３８ならびに（図２および図３に示される）ブロック３２の中に階層的に編成された（図５に示される）状態機械要素（ＳＭＥ）３４、３６を含み得る。階層的に編成されたＳＭＥ３４、３６間で信号を経路設定するために、（図２および図３に示される）ブロック間スイッチング要素４０、（図３および図４に示される）ブロック内スイッチング要素４２、ならびに（図４に示される）列内スイッチング要素４４を含む、プログラム可能なスイッチング要素の階層が使用され得る。
【００１５】
以下に記載されるように、スイッチング要素は、経路設定構造およびバッファを含み得る。ＳＭＥ３４、３６は、ＦＳＭ格子３０によって実装されたＦＳＭの状態に対応することができる。ＳＭＥ３４、３６は、以下に記載されるようにプログラム可能なスイッチング要素を使用することによって共に結合され得る。従って、ＦＳＭは、状態の関数に対応するようにＳＭＥ３４、３６をプログラミングすることによって、また、ＦＳＭにおける状態間の遷移に対応するようにＳＭＥ３４、３６を選択的に共に結合することによって、ＦＳＭ格子３０上に実装され得る。
【００１６】
図２は、ＦＳＭ格子３０の例の全体図を例示する。ＦＳＭ格子３０は、プログラム可能なブロック間スイッチング要素４０で選択的に共に結合され得る複数のブロック３２を含む。ブロック間スイッチング要素４０は、導体４６（例えば、ワイヤ、トレース等）と、バッファ４８および５０とを含み得る。ある例では、バッファ４８および５０は、ブロック間スイッチング要素４０への／からの信号の接続とタイミングを制御するために含まれる。以下に更に記載されるように、バッファ４８は、ブロック３２間に送信されるデータをバッファリングするために提供され得る一方で、バッファ５０は、ブロック間スイッチング要素４０間に送信されるデータをバッファリングするために提供され得る。加えて、ブロック３２は、信号（例えば、データ）を受信するためにおよびデータをブロック３２に提供するために入力ブロック５２（例えば、データ入力ポート）に選択的に結合され得る。ブロック３２はまた、信号をブロック３２から外部デバイス（例えば、別のＦＳＭ格子３０）に提供するために、出力ブロック５４（例えば、出力ポート）に選択的に結合され得る。ＦＳＭ格子３０はまた、ＦＳＭ格子３０の上にプログラム（例えば、画像）をロードするためにプログラミングインターフェース５６を含むことができる。画像は、ＳＭＥ３４、３６の状態をプログラム（例えば、設定）することができる。すなわち、画像は、入力ブロック５２における所与の入力に一定の方式で反応するようにＳＭＥ３４、３６を構成することができる。例えば、ＳＭＥ３４、３６は、文字「ａ」が入力ブロック５２で受信されると、高信号を出力するように設定され得る。
【００１７】
ある例では、レジスタへの書き込みかレジスタからの読み取りがそれぞれの要素にもしくはそれぞれの要素からデータを提供するように、入力ブロック５２、出力ブロック５４、および／またはプログラミングインターフェース５６は、レジスタとして実装され得る。従って、プログラミングインターフェース５６に対応するレジスタ内に記憶された画像からのビットは、ＳＭＥ３４、３６上にロードされ得る。図２は、ブロック３２、入力ブロック５２、出力ブロック５４、およびブロック間スイッチング要素４０間の一定数の導体（例えば、ワイヤ、トレース）を例示するが、他の例では、より少ないかより多くの導体が使用されてもよいことが理解されるべきである。
【００１８】
図３は、ブロック３２の例を例示する。ブロック３２は、プログラム可能なブロック内スイッチング要素４２で共に選択的に結合され得る複数の列３８を含むことができる。加えて、列３８は、ブロック間スイッチング要素４０で別のブロック３２内の別の列３８に選択的に結合され得る。列３８は、本明細書において２つのグループ（ＧＯＴ：ｇｒｏｕｐｓ  ｏｆ  ｔｗｏ）６０として呼ばれる要素の組に編成された複数のＳＭＥ３４、３６を含む。ある例では、ブロック３２は、１６個の列３８を備える。
【００１９】
図４は、列３８の例を例示する。ＧＯＴ６０は、プログラム可能な列内スイッチング要素４４によって列３８内で他のＧＯＴ６０および任意の他の要素（例えば、特殊目的の要素５８）に選択的に結合され得る。ＧＯＴ６０はまた、ブロック内スイッチング要素４２で他の列３８における他のＧＯＴ６０に、あるいは、ブロック間スイッチング要素４０で他のブロック３２における他のＧＯＴ６０に結合され得る。ある例では、ＧＯＴ６０は、第１の入力６２および第２の入力６４、ならびに出力６６を有する。図５を参照にして更に例示されることになるように、第１の入力６２は、ＧＯＴ６０の第１のＳＭＥ３４に結合され、第２の入力６２は、ＧＯＴ６０の第２のＳＭＥ３４に結合される。
【００２０】
ある例では、列３８は、第１のおよび第２の複数の列相互接続導体６８、７０を含む。ある例では、ＧＯＴ６０の入力６２、６４は、１つ以上の列相互接続導体６８、７０に結合され得、出力６６は、１つの列相互接続導体６８、７０に結合され得る。ある例では、第１の複数の列相互接続導体６８は、列３８内の各ＧＯＴ６０の各ＳＭＥ３４、３６に結合され得る。第２の複数の列相互接続導体７０は、列３８内の各ＧＯＴ６０の１つのＳＭＥ３４、３６だけに結合され得るが、ＧＯＴ６０の他のＳＭＥ３４、３６に結合され得ない。ある例では、図５に関してより良く例示されることになるように、第２の複数の列相互接続導体７０の第１の半分は、列３８内のＳＭＥ３４、３６の第１の半分（各ＧＯＴ６０からの１つのＳＭＥ３４）に結合することができ、第２の複数の列相互接続導体７０の第２の半分は、列３８内のＳＭＥ３４、３６の第２の半分（各ＧＯＴ６０からの他のＳＭＥ３４、３６）に結合することができる。第２の複数の列相互接続導体７０とＳＭＥ３４、３６との間の限定された接続性は、本明細書において「パリティ」として呼ばれる。ある例では、列３８はまた、カウンタ、プログラム可能なブール論理セル、ルックアップテーブル、ＲＡＭ、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、プログラム可能なプロセッサ（例えば、マイクロプロセッサ）、あるいは特殊目的機能を果たすための他の要素のような、特殊目的の要素５８を含むことができる
【００２１】
ある例では、特殊目的の要素５８は、（本明細書においてカウンタ５８としても呼ばれる）カウンタを備える。ある例では、カウンタ５８は、１２‐ビットプログラム可能減算カウンタを備える。１２‐ビットプログラム可能カウンタ５８は、カウンティング入力、リセット入力、およびゼロカウント出力を有する。カウンティング入力は、アサートされると、カウンタ５８の値を１だけデクリメントする。リセット入力は、アサートされると、カウンタ５８に、関連付けられたレジスタから初期値をロードさせる。１２‐ビットカウンタ５８の場合、１２ビット数までが、初期値としてロードされ得る。カウンタ５８の値がゼロ（０）にデクリメントされると、ゼロカウント出力がアサートされる。カウンタ５８はまた、少なくとも２つの、パルスモードおよび保持モードを有する。カウンタ５８がパルスモードに設定されると、カウンタ５８がゼロにデクリメントするクロックサイクルの間にゼロカウント出力がアサートされ、次のクロックサイクルではゼロカウント出力は、もはやアサートされない。カウンタ５８が保持モードに設定されると、カウンタ５８がゼロにデクリメントするクロックサイクルの間にゼロカウント出力は、アサートされ、カウンタ５８がアサートされるリセット入力によってリセットされるまで、アサートされたままにある。
【００２２】
別の例では、特殊目的の要素５８は、ブール論理を備える。いくつかの例では、このブール論理は、ＦＳＭ格子３０における（本明細書に後で記述されるように、ＦＳＭの終端ノードに対応する）終端状態ＳＭＥから情報を抽出するために使用され得る。抽出された情報は、状態情報を他のＦＳＭ格子３０に転送するために、ならびに／あるいはＦＳＭ格子３０を再プログラムするために使用される、または別のＦＳＭ格子３０を再プログラムするために使用されるプログラミング情報を転送するために、使用され得る。
【００２３】
図５は、ＧＯＴ６０の例を例示する。ＧＯＴ６０は、入力６２、６４を有するとともに、ＯＲゲート７６と３‐ｔｏ‐１マルチプレクサ７８に結合されたそれらの出力７２、７４を有する、第１のＳＭＥ３４および第２のＳＭＥ３６を含む。３‐ｔｏ‐１マルチプレクサ７８は、ＧＯＴ６０の出力６６を第１のＳＭＥ３４、第２のＳＭＥ３６、またはＯＲゲート７６に結合するように設定され得る。ＯＲゲート７６は、ＧＯＴ６０の共通出力６６を形成するように出力７２、７４の両方を共に結合するために使用され得る。ある例では、第１のおよび第２のＳＭＥ３４、３６は、第１のＳＭＥ３４の入力６２が列相互接続導体６８のいくつかに結合され得、第２のＳＭＥ３６の入力６４が他の列相互接続導体７０に結合され得る、上記のようなパリティを呈する。ある例では、ＧＯＴ６０内の２つのＳＭＥ３４、３６が、スイッチング要素７９の一方もしくは両方を設定することによって、段階的に接続され得および／またはそれら自体にループを戻され得る。ＳＭＥ３４、３６は、ＳＭＥ３４、３６の出力７２、７４を他のＳＭＥ３４、３６の入力６２、６４に結合することによって、段階的に接続され得る。ＳＭＥ３４、３６は、出力７２、７４をそれら自体の入力６２、６４に結合することによって、ループを戻され得る。従って、第１のＳＭＥ３４の出力７２は、第１のＳＭＥ３４の入力６２と第２のＳＭＥ３６の入力６４の一方にも、または両方にも結合され得ない。
【００２４】
ある例では、状態機械要素３４、３６は、検出線８２に並列に結合された、動的ランダムアクセスメモリ（ＤＲＡＭ）に使用されることが多いものなどの、複数のメモリセル８０を備える。１つのそのようなメモリセル８０は、高いまたは低い値（例えば、１または０）に対応するものなどの、データ状態に設定され得るメモリセルを備える。メモリセル８０の出力は、検出線８２に結合され、メモリセル８０への入力は、データストリーム線８４上のデータに基づいて信号を受信する。ある例では、データストリーム線８４上の入力は、メモリセル８０の１つを選択するために復号化される。選択されたメモリセル８０は、それの記憶されたデータ状態を検出線８２の上に出力として提供する。例えば、入力ブロック５２で受信されたデータは、デコーダ（図示しない）に提供され得、デコーダは、データストリーム線８４の１つを選択することができる。ある例では、デコーダは、２５６本のデータストリーム線８４の対応する１つに８‐ビットＡＣＳＩＩ文字を変換することができる。
【００２５】
従って、メモリセル８０は、メモリセル８０が高い値に設定され、データストリーム線８４上のデータがメモリセル８０に対応するときに、高信号を検出線８２に出力する。データストリーム線８４上のデータがメモリセル８０に対応するとき、メモリセル８０は低い値に設定され、メモリセル８０は低信号を検出線８２に出力する。検出線８２上のメモリセル８０からの出力は、検出セル８６によって検知される。
【００２６】
ある例では、入力線６２、６４上の信号は、それぞれの検出セル８６を活動または非活動状態に設定する。非活動状態に設定される場合、検出セル８６は、それぞれの検出線８２上の信号に関わらず、それぞれの出力７２、７４上に低信号を出力する。活動状態に設定される場合、検出セル８６は、高信号がそれぞれのＳＭＥ３４、３６のメモリセル８２の１つから検出されると、それぞれの出力線７２、７４上に高信号を出力する。活動状態にある場合、検出セル８６は、それぞれのＳＭＥ３４、３６のメモリセル８２のすべてからの信号が低いときに、それぞれの出力線７２、７４上に低信号を出力する。
【００２７】
ある例では、ＳＭＥ３４、３６は、２５６個のメモリセル８０を含み、各メモリセル８０は、異なるデータストリーム線８４に結合される。それ故、ＳＭＥ３４、３６は、データストリーム線８４の選択された１つ以上がその上で高信号を有するときに、高信号を出力するようにプログラムされ得る。例えば、ＳＭＥ３４は、高く設定された第１のメモリセル８０（例えば、ビット０）と、低く設定された全ての他のメモリセル８０（例えば、ビット１〜２２５）を有することができる。それぞれの検出セル８６が活動状態にある場合、ＳＭＥ３４は、ビット０に対応するデータストリーム線８４がその上で高信号を有するときに、出力７２上に高信号を出力する。他の例では、ＳＭＥ３４は、適切なメモリセル８０を高い値に設定することによって、複数のデータストリーム線８４の１つがその上で高信号を有するときに、高信号を出力するように設定され得る。
【００２８】
ある例では、メモリセル８０は、関連付けられたレジスタからビットを読み取ることによって、高いまたは低い値に設定され得る。従って、ＳＭＥ３４は、コンパイラ２０によって生成された画像をレジスタの中に記憶することによって、また、レジスタ内のビットを関連付けられたメモリセル８０の中にロードすることによって、プログラムされ得る。ある例では、コンパイラ２０によって生成された画像は、高いおよび低い（例えば、１および０）ビットの２値画像を含む。画像は、ＳＭＥ３４、３６を段階的に接続することによって、ＦＳＭとして動作するようにＦＳＭ格子３０をプログラムすることができる。例えば、第１のＳＭＥ３４は、検出セル８６を活動状態に設定することによって、活動状態に設定され得る。第１のＳＭＥ３４は、ビット０に対応するデータストリーム線８４がその上で高信号を有するときに、高信号を出力するように設定され得る。第２のＳＭＥ３６は、非活動状態に最初に設定され得るが、活動中の場合、ビット１に対応するデータストリーム線８４がその上で高信号を有するときに、高信号を出力するように設定され得る。第１のＳＭＥ３４および第２のＳＭＥ３６は、第２のＳＭＥ３６の入力６４に結合するように第１のＳＭＥ３４の出力７２を設定することによって段階的に接続され得る。それ故、高信号が、ビット０に対応するデータストリーム線８４上で検知されるとき、第１のＳＭＥ３４は、出力７２上で高信号を出力し、第２のＳＭＥ３６の検出セル８６を活動状態に設定する。高信号が、ビット１に対応するデータストリーム線８４上で検知されるとき、第２のＳＭＥ３６は、別のＳＭＥ３６を作動するためにまたはＦＳＭ格子３０からの出力のために、出力７４上で高信号を出力する。
【００２９】
ある例では、単一のＦＳＭ格子３０が単一の物理デバイス上に実装されるが、他の例では、２つ以上のＦＳＭ格子３０が、単一の物理デバイス（例えば、物理チップ）上に実装され得る。ある例では、各ＦＳＭ格子３０が、個別データ入力ブロック５２、個別出力ブロック５４、個別プログラミングインターフェース５６、および個別の組のプログラム可能な要素を含むことができる。その上、各組のプログラム可能な要素は、それらの対応するデータ入力ブロック５２でデータに反応する（例えば、高または低信号を出力する）ことができる。例えば、第１のＦＳＭ格子３０に対応する第１の組のプログラム可能な要素は、第１のＦＳＭ格子３０に対応する第１のデータ入力ブロック５２でデータに反応することができる。第２のＦＳＭ格子３０に対応する第２の組のプログラム可能な要素は、第２のＦＳＭ格子３０に対応する第２のデータ入力ブロック５２に反応することができる。従って、各ＦＳＭ格子３０は、１組のプログラム可能な要素を含み、異なる組のプログラム可能な要素は異なる入力データに反応することができる。同様に、各ＦＳＭ格子３０、およびプログラム可能な要素の対応する組のそれぞれは、個別出力を提供することができる。いくつかの例では、第１のＦＳＭ格子３０からの出力ブロック５４は、第２のＦＳＭ格子３０についての入力データが、一連のＦＳＭ格子３０の階層型配列で第１のＦＳＭ格子３０からの出力データを含むことができるように、第２のＦＳＭ格子３０の入力ブロック５２に結合され得る。
【００３０】
ある例では、ＦＳＭ格子３０の上にロードするための画像は、ＦＳＭ格子３０内にプログラム可能な要素、プログラム可能なスイッチング要素、および特殊目的の要素を構成するために複数のビットの情報を備える。ある例では、画像は、一定の入力に基づいて所望の出力を提供するようにＦＳＭ格子３０をプログラムするためにＦＳＭ格子３０の上にロードされ得る。出力ブロック５４は、データ入力ブロック５２におけるデータに対するプログラム可能な要素の反応に基づいてＦＳＭ格子３０から出力を提供することができる。出力ブロック５４からの出力は、所与のパターンの一致を示す単一のビット、複数のパターンへの一致および非一致を示す複数のビットを含む語、ならびに所与の瞬間における全てのまたは一定のプログラム可能な要素の状態に対応する状態ベクトルを含むことができる。記載されるように、多数のＦＳＭ格子３０は、パターン認識（例えば、会話認識、画像認識等）信号処理、画像化、コンピュータビジョン、暗号法、および他のものなどのデータ解析を実行するように、状態機械エンジン１４などの状態機械エンジンに含まれ得る。
【００３１】
図６は、ＦＳＭ格子３０によって実装され得る有限状態機械（ＦＳＭ）のモデル例を例示する。ＦＳＭ格子３０は、ＦＳＭの物理的実装として構成され（例えば、プログラムされ）得る。ＦＳＭは、１つ以上の根ノード９２を含有する、図形９０（例えば、有向グラフ、無向グラフ、擬グラフ）として表現され得る。根ノード９２に加えて、ＦＳＭは、１つ以上の端部９８を通して根ノード９２や他の標準ノード９４に接続されるいくつかの標準ノード９４および終端ノード９６ででき得る。ノード９２、９４、９６は、ＦＳＭにおける状態に対応する。端部９８は、状態間の遷移に対応する。
【００３２】
ノード９２、９４、９６のそれぞれは、活動または非活動状態にあり得る。非活動状態にある場合、ノード９２、９４、９６は、入力データに反応（例えば、応答）しない。活動状態にある場合、ノード９２、９４、９６は、入力データに反応することができる。アップストリームノード９２、９４は、入力データが、アップストリームノード９２、９４とダウンストリームノード９４、９６との間の端部９８によって指定された基準に一致するときに、ノードからダウンストリームのノード９４、９６を作動することによって入力データに反応することができる。例えば、文字「ｂ」を指定する第１のノード９４は、第１のノード９４が活動中であるときに端部９８によって第１のノード９４に接続された第２のノード９４を作動することになり、文字「ｂ」が入力データとして受信される。本明細書に使用される際、「アップストリーム」は、１つ以上のノード間の関係のことを言い、ここで、１つ以上の他のノードのアップストリーム（あるいはループまたはフィードバック構成の場合におけるそれ自体のアップストリーム）の第１のノードは、第１のノードが１つ以上の他のノードを作動することができる（あるいはループの場合にそれ自体を作動することができる）状況のことを言う。同様に、「ダウンストリーム」は、１つ以上の他のノードのダウンストリーム（あるいはループの場合におけるそれ自体のダウンストリーム）の第１のノードが１つ以上の他のノードによって作動され得る（あるいはループの場合にそれ自体によって作動され得る）関係のことを言う。従って、用語「アップストリーム」および「ダウンストリーム」は、１つ以上のノード間の関係を言うために本明細書において使用されるが、これらの用語は、ノード間のループまたは他の非線形パスの使用を妨げるものではない。
【００３３】
図形９０では、根ノード９２は、最初に作動され得、入力データが根ノード９２からの端部９８に一致するときにダウンストリームノード９４を作動することができる。ノード９４は、入力データがノード９４からの端部９８に一致するときにノード９６を作動することができる。図形９０全体を通してノード９４、９６は、入力データが受信される際にこの方式で作動され得る。終端ノード９６は、入力データによる興味対象の順序の一致に対応する。従って、終端ノード９６の作動は、興味対象の順序が入力データとして受信されていることを示す。パターン認識機能を実装するＦＳＭ格子３０との関連において、終端ノード９６に到着することは、興味対象の特定のパターンが入力データにおいて検出されていることを示すことができる。
【００３４】
ある例では、各根ノード９２、標準ノード９４、および終端ノード９６は、ＦＳＭ格子３０におけるプログラム可能な要素に対応することができる。各端部９８は、プログラム可能な要素間の接続に対応することができる。それ故、別の標準ノード９４または終端ノード９６に遷移する（例えば、別の標準ノード９４または終端ノード９６に接続する端部９８を有する）標準ノード９４は、別のプログラム可能な要素に遷移する（例えば、別のプログラム可能な要素に出力を提供する）プログラム可能な要素に対応する。いくつかの例では、根ノード９２は、対応するプログラム可能な要素を有さない。
【００３５】
ＦＳＭ格子３０がプログラムされると、プログラム可能な要素のそれぞれはまた、活動または非活動状態にあり得る。所与のプログラム可能な要素は、非活動中のとき、対応するデータ入力ブロック５２で入力データに反応しない。活動中のプログラム可能な要素は、データ入力ブロック５２で入力データに反応することができ、入力データがプログラム可能な要素の設定に一致するときにダウンストリームのプログラム可能な要素を作動することができる。プログラム可能な要素が終端ノード９６に対応する場合、プログラム可能な要素は、一致の指示を外部デバイスに提供するために出力ブロック５４に結合され得る。
【００３６】
プログラミングインターフェース５６経由でＦＳＭ格子３０の上にロードされた画像は、所望のＦＳＭがデータ入力ブロック５２におけるデータへの反応に基づいてノードの連続した作動を通して実装されるように、プログラム可能な要素および特殊目的の要素、ならびにプログラム可能な要素と特殊目的の要素との間の接続を構成することができる。ある例では、プログラム可能な要素は、単一のデータサイクル（例えば、単一の文字、１組の文字、単一のクロックサイクル）について活動中のままであり、次いで、アップストリームのプログラム可能な要素によって再び作動されない限り非活動中になる。
【００３７】
終端ノード９６は、過去のイベントの圧縮された履歴を記憶するように考慮され得る。例えば、終端ノード９６に到達することを必要とされた入力データの１つ以上のパターンは、その終端ノード９６の作動によって表現され得る。ある例では、終端ノード９６によって提供された出力は２値であり、すなわち、出力は、興味対象のパターンが一致しているか否かを示す。図形９０における標準ノード９４に対する終端ノード９６の割合は、かなり小さい可能性がある。換言すれば、高い複雑性がＦＳＭにあり得るが、ＦＳＭの出力は、比較すると小さい可能性がある。
【００３８】
ある例では、ＦＳＭ格子３０の出力は、状態ベクトルを備えることができる。状態ベクトルは、ＦＳＭ格子３０のプログラム可能な要素の（例えば、作動されたまたは作動されていない）状態を備える。ある例では、状態ベクトルは、終端ノード９６に対応するプログラム可能な要素についての状態を含む。それ故、出力は、図形９０の全ての終端ノード９６によって提供された指示を収集したものを含むことができる。状態ベクトルは、各終端ノード９６によって提供された２進法指示が１ビットの語を含む語として表現され得る。終端ノード９６のこの符号化は、ＦＳＭ格子３０について検出状態（例えば、興味対象の順序が検出されているかどうか、また、興味対象のどの順序が検出されているか）の効率的な指示を提供することができる。別の例では、状態ベクトルは、プログラム可能な要素が終端ノード９６に対応していようとしていなかろうと、全てのまたはサブの組のプログラム可能な要素の状態を含むことができる。
【００３９】
上述のように、ＦＳＭ格子３０は、パターン認識機能を実装するようにプログラムされ得る。例えば、ＦＳＭ格子３０は、入力データにおける１つ以上のデータ順序（例えば、署名、パターン）を認識するように構成され得る。興味対象のデータ順序がＦＳＭ格子３０によって認識される場合、その認識の指示は、出力ブロック５４に提供され得る。ある例では、パターン認識は、例えば、マルウェアまたはネットワークデータにおける他の情報を識別するために、一列の記号（例えば、ＡＳＣＩＩ文字）を認識することができる。
【００４０】
図７は、階層型構造１００の例を例示し、ここで、ＦＳＭ格子３０の２つのレベルが直列に結合され、データを解析するために使用される。特に、例示された実施形態では、階層型構造１００は、直列に配列された第１のＦＳＭ格子３０Ａおよび第２のＦＳＭ格子３０Ｂを含む。各ＦＳＭ格子３０は、データ入力を受信するためのそれぞれのデータ入力ブロック５２、プログラミング信号を受信するためのプログラミングインターフェースブロック５６および出力ブロック５４を含む。
【００４１】
第１のＦＳＭ格子３０Ａは、入力データ、例えば、データ入力ブロックにおける生データを受信するように構成される。第１のＦＳＭ格子３０Ａは、上記したように入力データに反応し、出力ブロックに出力を提供する。第１のＦＳＭ格子３０Ａからの出力は、第２のＦＳＭ格子３０Ｂのデータ入力ブロックに送信される。次いで、第２のＦＳＭ格子３０Ｂは、第１のＦＳＭ格子３０Ａによって提供された出力に基づいて反応することができ、階層型構造１００の対応する出力信号１０２を提供することができる。直列の２つのＦＳＭ格子３０Ａおよび３０Ｂのこの階層型結合は、圧縮された語で過去のイベントに関する情報を第１のＦＳＭ格子３０Ａから第２のＦＳＭ格子３０Ｂに転送する手段を提供する。転送される情報は、効率的に、第１のＦＳＭ格子３０Ａによって記録された複雑なイベントの要約（例えば、興味対象の順序）とすることができる。
【００４２】
図７に示されるＦＳＭ格子３０Ａ、３０Ｂの２つのレベル階層１００は、２つの独立プログラムが同じデータストリームに基づいて動作することを可能にする。２段式階層は、異なる領域としてモデル化された生物学的脳における視覚認識に類似することができる。このモデル下では、領域は、それぞれ、類似の計算機能（パターン一致）を実行するが異なるプログラム（署名）を使用する、効率的に異なるパターン認識エンジンである。複数のＦＳＭ格子３０Ａ、３０Ｂを共に接続することによって、データストリーム入力についての増加された知識が取得され得る。
【００４３】
（第１のＦＳＭ格子３０Ａによって実装された）第１のレベルの階層は、例えば、生データストリーム上で直接的に処理を実行することができる。すなわち、生データストリームは、第１のＦＳＭ格子３０Ａの入力ブロック５２で受信され得、第１のＦＳＭ格子３０Ａのプログラム可能な要素は、生データストリームに反応することができる。（第２のＦＳＭ格子３０Ｂによって実装された）第２のレベルの階層は、第１のレベルからの出力を処理することができる。すなわち、第２のＦＳＭ格子３０Ｂは、第２のＦＳＭ格子３０Ｂの入力ブロック５２で第１のＦＳＭ格子３０Ａの出力ブロック５４からの出力を受信し、第２のＦＳＭ格子３０Ｂのプログラム可能な要素は、第１のＦＳＭ格子３０Ａの出力に反応することができる。従って、この例では、第２のＦＳＭ格子３０Ｂは、入力として生データストリームを受信するのではなくて、むしろ、第１のＦＳＭ格子３０Ａによって決定されるような生データストリームによって一致された様に興味対象のパターンの指示を受信する。第２のＦＳＭ格子３０Ｂは、第１のＦＳＭ格子３０Ａからの出力データストリームにおけるパターンを認識するＦＳＭを実装することができる。
【００４４】
図８は、ＦＳＭを実装するために、格子３０のようなＦＳＭ格子をプログラムするように構成された画像にソースコードを変換するコンパイラのための方法１１０の例を例示する。方法１１０は、ソースコードを構文ツリーに構文解析すること（ブロック１１２）、構文ツリーをオートマトンに変換すること（ブロック１１４）、オートマトンを最適化すること（ブロック１１６）、オートマトンをネットリストに変換すること（ブロック１１８）、ネットリストをハードウェア上に配置すること（ブロック１２０）、ネットリストを経路設定すること（ブロック１２２）、および結果として生じる画像を発行すること（ブロック１２４）を含む。
【００４５】
ある例では、コンパイラ２０は、ソフトウェア開発者が、ＦＳＭ格子３０上にＦＳＭを実装するために画像を生成することを可能にするアプリケーションプログラミングインターフェース（ＡＰＩ）を含む。コンパイラ２０は、ＦＳＭ格子３０をプログラムするように構成される画像に、ソースコードにおける正規表現の入力設定を変換するための方法を提供する。コンパイラ２０は、フォンノイマンアーキテクチャを有するコンピュータについての命令によって実装され得る。これらの命令は、コンピュータ上のプロセッサ１２にコンパイラ２０の機能を実装させることができる。例えば、命令は、プロセッサ１２によって実行されると、プロセッサ１２に、プロセッサ１２にアクセス可能なソースコード上でブロック１１２、１１４、１１６、１１８、１２０、１２２、および１２４に記載されるような動作を実行させることができる。
【００４６】
ある例では、ソースコードは、記号のグループ内の記号のパターンを識別するための検索文字列を記述する。検索文字列を記述するために、ソースコードは、複数の正規表現（ｒｅｇｅｘ）を含むことができる。正規表現は、記号検索パターンを記述するための文字列であり得る。正規表現は、プログラミング言語、テキストエディタ、ネットワークセキュリティ、および他のものなどの種々のコンピュータドメインにおいて広く使用される。ある例では、コンパイラによってサポートされる正規表現は、非構造化データの解析のための基準を含む。非構造化データは、自由形式であるデータであって、データ内の語に適用される索引付けが無いデータを含むことができる。語は、データ内に、印刷可能および印刷不可能の、任意の組み合わせのバイトを含むことができる。ある例では、コンパイラは、Ｐｅｒｌ（例えば、Ｐｅｒｌ互換の正規表現（ＰＣＲＥ））、ＰＨＰ、Ｊａｖａ（登録商標）、および．ＮＥＴ言語を含む正規表現を実装するための複数の異なるソースコード言語をサポートすることができる。
【００４７】
ブロック１１２では、コンパイラ２０は、異なる種類の演算子がソースコードによって実装された異なる機能（例えば、ソースコードにおいて正規表現によって実装された異なる機能）に対応する、関係的に接続された演算子の配列を形成するためにソースコードを構文解析することができる。ソースコードを構文解析することは、ソースコードの一般的表現を生成することができる。ある例では、一般的表現は、構文ツリーとして知られるツリーグラフの形態でソースコードにおける正規表現の符号化された表現を含む。本明細書に記載された例は、（「抽象構文ツリー」としても知られる）構文ツリーのような配列を参照するが、他の例では、具象構文ツリーまたは他の配列が使用され得る。
【００４８】
上述のように、コンパイラ２０は、ソースコードの複数の言語をサポートすることができるので、構文解析は、言語に関わらず、非言語特定表現、例えば構文ツリーに、ソースコードを変換する。それ故、コンパイラ２０による更なる処理（ブロック１１４、１１６、１１８、１２０）は、ソースコードの言語に関わらず、共通入力構造から動くことができる。
【００４９】
上記のように、構文ツリーは、関係的に接続された複数の演算子を含む。構文ツリーは、複数の異なる種類の演算子を含むことができる。すなわち、異なる演算子は、ソースコードにおいて正規表現によって実装された異なる機能に対応することができる。
【００５０】
ブロック１１４では、構文ツリーは、オートマトンに変換される。オートマトンは、ＦＳＭのソフトウェアモデルを備え、従って、決定論的または非決定論的として分類され得る。決定論的オートマトンは、所与の時間に実行の単一のパスを有する一方で、非決定論的オートマトンは、実行の複数の同時発生パスを有する。オートマトンは、複数の状態を備える。構文ツリーをオートマトンに変換するために、演算子と構文ツリーにおける演算子間の関係とは、状態間の遷移を伴う状態に変換される。ある例では、オートマトンは、ＦＳＭ格子３０のハードウェアに部分的に基づいて変換され得る。
【００５１】
ある例では、オートマトンについての入力記号は、アルファベットの記号、０〜９までの数字、および他の印刷可能文字を含む。ある例では、入力記号は、０から２５５までを含んだバイト値によって表現される。ある例では、オートマトンは、グラフのノードが状態の組に対応する有向グラフとして表現され得る。ある例では、入力記号α上の状態ｐから状態ｑへの遷移、すなわち、δ（ｐ，α）は、ノードｐからノードｑへの有向接続によって示される。ある例では、オートマトンの逆転は、いくつかの記号α上の各遷移ｐ→ｑが同じ記号α上でｑ→ｐに逆転される、新たなオートマトンを作り出す。逆転において、開始状態は最終状態になり、最終状態は開始状態になる。ある例では、オートマトンによって認識された（例えば、一致した）言語は、オートマトンに連続して入力されると最終状態に到達することになる全ての可能な文字列の組である。オートマトンによって認識された言語における各文字列は、開始状態から１つ以上の最終状態までパスをトレースする。
【００５２】
ブロック１１６では、オートマトンが構築された後、オートマトンは、特に、それの複雑さおよびサイズを削減するために、最適化される。オートマトンは、余剰状態を組み合わせることによって最適化され得る。
【００５３】
ブロック１１８では、最適化されたオートマトンがネットリストに変換される。オートマトンをネットリストに変換することは、ＦＳＭ格子３０上のハードウェア要素（例えば、ＳＭＥ３４、３６、他の要素）にオートマトンの各状態をマップし、ハードウェア要素間の接続を決定する。
【００５４】
ブロック１２０では、ネットリストは、ネットリストの各ノードに対応する対象デバイス（例えば、ＳＭＥ３４、３６、特殊目的の要素５８）の特定のハードウェア要素を選択するために配置される。ある例では、配置は、ＦＳＭ格子３０の一般入力および出力制約に基づいて、各特定のハードウェア要素を選択する。
【００５５】
ブロック１２２では、配置されたネットリストは、ネットリストによって記述された接続を実現するように選択されたハードウェア要素を共に結合するために、プログラム可能なスイッチング要素（例えば、ブロック間スイッチング要素４０、ブロック内スイッチング要素４２、および列内スイッチング要素４４）についての設定を決定するように経路設定される。ある例では、プログラム可能なスイッチング要素のための設定は、選択されたハードウェア要素を接続するために使用されることになるＦＳＭ格子３０の特定の導体、および、プログラム可能なスイッチング要素のための設定を決定することによって決定される。経路設定は、ブロック１２０におけるその配置のハードウェア要素間の接続のより多くの特定の制限を考慮に入れることができる。従って、経路設定は、ＦＳＭ格子３０上の導体の実際の制限を与えられた適切な接続をするために、大域的配置によって決定されるようにハードウェア要素のいくつかの位置を調整し得る。
【００５６】
ネットリストが一旦配置され経路設定されると、配置され経路設定されたネットリストは、ＦＳＭ格子３０のプログラミングのために複数のビットに変換され得る。複数のビットは、画像として本明細書において呼ばれる。
【００５７】
ブロック１２４では、画像が、コンパイラ２０によって発行される。画像は、ＦＳＭ格子３０の特定のハードウェア要素をプログラミングするための複数のビットを備える。画像が複数のビット（例えば、０および１）を備える実施形態では、画像は２値画像として呼ばれ得る。ビットは、プログラムされたＦＳＭ格子３０が、ソースコードによって記述された機能性を有するＦＳＭを実装するように、ＳＭＥ３４、３６、特殊目的の要素５８、およびプログラム可能なスイッチング要素の状態をプログラムするためにＦＳＭ格子３０の上にロードされ得る。配置（ブロック１２０）および経路設定（ブロック１２２）は、オートマトンにおける特定の状態にＦＳＭ格子３０における特定の位置で特定のハードウェア要素をマップすることができる。従って、画像におけるビットは、（複数の）所望の機能を実装するために特定のハードウェア要素をプログラムすることができる。ある例では、画像は、機械コードをコンピュータで読み取り可能な媒体に保存することによって発行され得る。別の例では、画像は、ディスプレイデバイス上に画像を表示することによって発行され得る。更に別の例では、画像は、画像を別のデバイス、例えばＦＳＭ格子３０の上に画像をロードするためのプログラミングデバイスなどに、送信することによって発行され得る。なお別の例では、画像は、ＦＳＭ格子（例えば、ＦＳＭ格子３０）の上に画像をロードすることによって発行され得る。
【００５８】
ある例では、画像は、ＳＭＥ３４、３６および他のハードウェア要素に画像からビット値を直接的にロードすることによって、あるいは、画像を１つ以上のレジスタの中にロードし、次いで、ビット値をレジスタからＳＭＥ３４、３６および他のハードウェア要素に書き込むことによって、ＦＳＭ格子３０の上にロードされ得る。ある例では、ＦＳＭ格子３０のハードウェア要素（例えば、ＳＭＥ３４、３６、特殊目的の要素５８、プログラム可能なスイッチング要素４０、４２、４４）は、プログラミングデバイスおよび／またはコンピュータが、１つ以上のメモリアドレスに画像を書き込むことによってＦＳＭ格子３０の上に画像をロードすることができるように、メモリマップされる。
【００５９】
本明細書に記載された方法例は、機械またはコンピュータに少なくとも一部実装され得る。いくつかの例は、上記例に記載されるような方法を実行するために電子デバイスを構成するように動作可能な命令で符号化されたコンピュータで読み取り可能な媒体または機械で読み取り可能な媒体を含むことができる。そのような方法の実装は、コード、例えばマイクロコード、アセンブリ言語コード、高水準言語コード、または同様のものなどを含むことができる。そのようなコードは、種々の方法を実行するためのコンピュータで読み取り可能な命令を含むことができる。コードは、コンピュータプログラム製品の一部を形成し得る。更に、コードは、実行の間または他の時間に、１つ以上の揮発性もしくは不揮発性のコンピュータで読み取り可能な媒体上に有形に記憶され得る。これらのコンピュータで読み取り可能な媒体は、限定されるものではないが、ハードディスク、取り外し可能な磁気ディスク、取り外し可能な光ディスク（例えば、コンパクトディスクやデジタルビデオディスク）、磁気カセット、メモリカードまたはスティック、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、および同様のものを含み得る。
【００６０】
ここで図９を参照にすると、状態機械エンジン１４の実施形態が例示される。前に記載したように、状態機械エンジン１４は、データバス上のメモリ１６などのソースからデータを受信するように構成される。例示された実施形態では、データは、ＤＤＲ３バスインターフェース１３０などの、バスインターフェースを通して状態機械エンジン１４に送信され得る。ＤＤＲ３バスインターフェース１３０は、１Ｇバイト／秒を超えるか１Ｇバイト／秒に等しい速度でデータを交換することが可能であり得る。理解されることになるように、解析されることになるデータのソースに応じて、バスインターフェース１３０は、データソースにおよびデータソースから状態機械エンジン１４にデータを交換するための任意の適切なバスインターフェース、例えばＮＡＮＤフラッシュインターフェース、ＰＣＩインターフェース等であり得る。前に記載したように、状態機械エンジン１４は、データを解析するように構成された１つ以上のＦＳＭ格子３０を含む。各ＦＳＭ格子３０は、２つの半分の格子に分割され得る。例示された実施形態では、格子３０が４８ＫのＳＭＥを含むように、半分の格子のそれぞれは２４ＫのＳＭＥ（例えば、ＳＭＥ３４、３６）を含み得る。格子３０は、図２〜５に関して前に記載したように配列された、任意の所望の数のＳＭＥを備え得る。更に、１つのＦＳＭ格子３０だけが例示されるが、状態機械エンジン１４は、前に記載したように、複数のＦＳＭ格子３０を含み得る。
【００６１】
解析されることになるデータは、バスインターフェース１３０で受信され得、多数のバッファおよびバッファインターフェースを通してＦＳＭ格子３０に伝送され得る。例示された実施形態では、データパスは、データバッファ１３２、プロセスバッファ１３４およびランク間（ＩＲ：ｉｎｔｅｒ‐ｒａｎｋ）バスならびにプロセスバッファインターフェース１３６を含む。データバッファ１３２は、解析されることになるデータを受信し一時的に記憶するように構成される。一実施形態では、２つのデータバッファ１３２（データバッファＡおよびデータバッファＢ）がある。データは、２つのデータバッファ１３２の一方内に記憶され得る一方で、データは、ＦＳＭ格子３０による解析のために、他のデータバッファ１３２から空にされる。例示された実施形態では、データバッファ１３２は、それぞれ３２Ｋバイトであり得る。ＩＲバスおよびプロセスバッファインターフェース１３６は、プロセスバッファ１３４へのデータの転送を容易にし得る。ＩＲバスおよびプロセスバッファ１３６は、データが順番にＦＳＭ格子３０によって処理されることを確実にする。ＩＲバスおよびプロセスバッファ１３６は、データが、正しい順番で受信され解析されるように、データの交換、タイミング情報、パッキング命令等を調整し得る。一般に、ＩＲバスおよびプロセスバッファ１３６は、ＦＳＭ格子３０の論理ランクを通して並列に複数のデータ組を解析することを可能にする。
【００６２】
例示された実施形態では、状態機械エンジン１４はまた、状態機械エンジン１４を通した大量のデータの転送を支援するために非圧縮器１３８および圧縮器１４０を含む。圧縮器１４０および非圧縮器１３８は、データが、データ転送時間を最小限にするために圧縮されるように、連動して働く。解析されることになるデータを圧縮することによって、バス利用時間が最小限にされ得る。コンパイラ２０によって提供された情報に基づいて、マスクが、情報を提供するために状態機械エンジン１４に提供され得、どの状態機械は使用されない可能性があるかの情報を提供する。圧縮器１４０および非圧縮器１３８はまた、バースト長が変動するデータを取り扱うように構成され得る。圧縮されたデータをパディングすることおよびそれぞれ圧縮された領域が終わるときに関してインジケータを含むことによって、圧縮器１４０は、状態機械エンジン１４を通した全体の処理速度を向上し得る。圧縮器１４０および非圧縮器１３８はまた、ＦＳＭ格子３０による解析後に、一致結果データを圧縮したり非圧縮したりするために使用され得る。
【００６３】
前に記載したように、ＦＳＭ格子３０の出力は、状態ベクトルを備えることができる。状態ベクトルは、ＦＳＭ格子３０のプログラム可能な要素の（例えば、作動されたまたは作動されていない）状態を備える。各状態ベクトルは、更なる階層型処理や解析のために状態ベクトルキャッシュメモリ１４２内に一時的に記憶され得る。すなわち、各状態機械の状態は、最終状態が更なる解析において使用され得るように、記憶され得る一方で、新たなデータ組の再プログラミングおよび／または更なる解析のために状態機械を解放する。典型的なキャッシュのように、状態ベクトルキャッシュメモリは、例えば、ここではＦＳＭ格子３０による、迅速な検索および使用のために、情報、ここでは状態ベクトルの記憶を可能にする。状態ベクトルメモリバッファ、状態ベクトル中間入力バッファ１４６および状態ベクトル中間出力バッファ１４８などの、追加のバッファは、状態ベクトルの高速解析や記憶に適応させるために、状態ベクトルキャッシュメモリ１４２と併せて利用され得る一方で、状態機械エンジン１４を通したパケット伝送プロトコルに順守する。
【００６４】
興味対象の結果がＦＳＭ格子３０によって一旦作り出されると、一致結果が、一致結果メモリ１５０内に記憶され得る。すなわち、一致（例えば、興味対象のパターンの検出）を示す「一致ベクトル」が、一致結果メモリ１５０内に記憶され得る。次いで、一致結果は、例えば、プロセッサ１２へのバスインターフェース１３０上の伝送のために一致バッファ１５２に送信され得る。前に記載したように、一致結果は圧縮され得る。
【００６５】
追加のレジスタおよびバッファは、状態機械エンジン１４内にもまた提供され得る。例えば、状態機械エンジン１４は、コントローラおよび状況レジスタ１５４を含み得る。加えて、復元およびプログラムバッファ１５６は、最初にＦＳＭ格子３０をプログラミングする際に使用するために、あるいは、解析の間にＦＳＭ格子３０内に機械の状態を復元するために、提供され得る。同様に、保存および修復マップバッファ１５８がまた、セットアップや使用についての保存および修復マップの記憶のために提供され得る。
【００６６】
記述したように、いくつかの実施形態では、ブロック３２における列３８のそれぞれは、カウンタ、プログラム可能なブール論理セル、ルックアップテーブルＲＡＭ、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、プログラム可能なプロセッサ（例えば、マイクロプロセッサ）、あるいは特殊目的の機能を果たすための他の要素のような、１つ以上の特殊目的の要素５８を含み得る。特殊目的の要素５８は、各列３８における１つ以上のＧＯＴ６０で列内スイッチング要素に接続され得る。その上、各列３８からの出力は、ブロック内スイッチング要素４２に接続され得、その要素４２は、ブロック間スイッチング要素４０によって接続され得る。
【００６７】
図１０は、それぞれが特殊目的の要素５８を含む列３８を有するブロック３２の例の例示である。例えば、ブロック３２における特殊目的の要素５８は、カウンタセル５８Ａおよびブール論理セル５８Ｂを含み得る。０から４までの列位置における列３８だけが図１０に例示される（例えば、３８Ａから３８Ｅまでラベル付けされる）が、各ブロック３２は、任意の数の列３８（例えば、１６個の列３８）を有し得、１つ以上の特殊目的の要素５８は、列３８のそれぞれにおいて構成され得る。例えば、一実施形態では、カウンタセル５８Ａは、一定の列３８に（例えば、列位置０、４、８、および１２に）構成され得る一方で、ブール論理セル５８Ｂは、１６個の列３８の残りに（例えば、列位置１、２、３、５、６、７、９、１０、１１、１３、１４、１５、および１６に）構成され得る。ＧＯＴ６０および特殊目的の要素５８は、列内スイッチング要素４４を通して各列３８に選択的に結合され（例えば、選択的に接続され）得、ここで、ブロック３２の各列３８は、ブロック内スイッチング要素４２を通してブロック３２の他の列３８のいずれかと選択的に結合され得る。
【００６８】
いくつかの実施形態では、各列３８における活動中のＧＯＴ６０のそれぞれは、１つ以上の条件が検出され（例えば、一致が検出される）かどうかを示す信号を出力し得、列３８における特殊目的の要素５８は、１つ以上の条件の一定の数量詞が合うかどうかを決定するためにおよび／または条件が検出される回数をカウントするために、ＧＯＴ６０出力を受信し得る。例えば、カウント動作の数量詞は、条件が少なくとも一定回数検出されたかどうかの決定、条件が一定回数を超えずに検出されたかどうかの決定、条件が正確に一定回数検出されたかどうかの決定、および条件が一定範囲の回数内で検出されたかどうかの決定を含み得る。
【００６９】
カウンタ５８Ａおよび／またはブール論理セル５８Ｂからの出力は、より大きな複雑さを有するカウンティングまたは論理を実行するために列内スイッチング要素４４およびブロック内スイッチング要素４２を通して通信され得る。例えば、カウンタ５８Ａは、条件が正確な回数検出されたときにだけ出力をアサートするなどのように、数量詞を実装するように構成され得る。ブロック３２におけるカウンタ５８Ａはまた、同時に使用され得、それによって、より多い数の検出された条件をカウントするために組み合わされたカウンタの総ビットカウントを増す。その上、いくつかの実施形態では、カウンタ５８Ａおよびブール論理セル５８Ｂなどの異なる特殊目的の要素５８が、共に使用され得る。例えば、１つ以上のブール論理セル５８Ｂの出力は、ブロック３２における１つ以上のカウンタ５８Ａによってカウントされ得る。
【００７０】
カウンタ５８Ａとブロック３２の他の要素との間の接続は、図１０において簡易化されるが、カウンタ５８Ａは、種々のカウンタ機能を果たすためにアサートされ得る複数の入力を有し得る。図１１に例示されるように、カウンタ５８Ａは、１２‐ビットプログラム可能デクリメントカウンタを備える。本技法に従って、カウント動作は、各カウンタ５８Ａで実行され得、カウント動作はまた、列３８における１つ以上のカウンタ５８Ａを共に「連鎖させること」によって実行され得る。その上、いくつかの実施形態では、異なる列３８におけるカウンタ５８Ａはまた、共に連鎖され得る。
【００７１】
いくつかの実施形態では、カウンタ５８Ａは、カウントイネーブル入力１７８、リセット入力１８０、およびゼロカウント出力１７６を含み得る。カウンタ５８Ａは、カウントの初期値がカウンタ５８Ａ内にロードされ得る初期値入力１６０を有し得る。例えば、１２‐ビットカウンタ５８Ａの場合、１２‐ビット数までが、関連付けられたレジスタからロードされ得るか、あるいはそうではない場合、初期値としてロードされ得る。いくつかの実施形態では、カウンタ５８Ａは、カウンタ５８Ａの初期プログラミングの間、初期値にラッチするために使用され得るロード初期入力１６２を含み得る。ロード初期入力１６２が初期値にラッチするために一旦アサートされると、カウンタ５８Ａのリセットが、ラッチされた初期値をロードすることになる。初期値は、（例えば、プロセッサ１２からの）適切なプログラミング信号によって変更され得る。
【００７２】
カウントイネーブル入力１７８は、アサートされると、カウンタ５８Ａのカウントを１だけデクリメントする。例えば、条件が、列３８ＡにおけるＧＯＴ６０の１つで検出される場合、ＧＯＴ６０は、関連付けられたカウンタ５８Ａのカウントイネーブル入力１７８に高信号を出力し得る。カウントイネーブル入力１７８をアサートすることによって、カウンタ５８Ａは、カウントをデクリメントし得る。カウンタ５８Ａがゼロカウントに一旦デクリメントすると、カウンタ５８Ａは、一定数の検出された条件がカウントされていることを示すために、列内スイッチ４４、ブロック内スイッチ４２、および／またはブロック間スイッチ４０を通して伝送され得る、ゼロカウント出力１７６をアサートし得る。
【００７３】
カウンタ５８Ａは、カウンタ５８Ａによって実行されることになる動作に応じて、カウンタが特定のカウント動作を実行する前にカウンタ５８Ａにプログラムされ得るロール入力１６４および保持入力１６６を含み得る。ロール入力１６４がアサートされ、保持入力１６６がアサートされない場合、カウンタ５８Ａは、ゼロにデクリメントするカウンタ５８Ａに応答して（例えば、そのデクリメント後に）１２‐ビット初期値入力１６０にラッチされた初期値をロードする。従って、アサートされたロール入力１６４および非アサートされた保持入力１６６を有するカウンタ５８Ａは、追加的なリセット入力無しで初期値にリセットされ得る。ロール入力１６４は、一定のカウント動作を実行するためにアサートされ得る。例えば、データストリームが第１の数量詞に合うかどうかを決定する（例えば、条件が少なくとも一定回数検出されたかどうかを決定する）ようにカウント動作を実行するために、カウントが一旦ゼロにデクリメントされると、条件の更なる検出は第１の数量詞に合うことに関連していないので、カウント動作は終えられる様に、ロール入力１６４はアサートされ得る。
【００７４】
保持入力１６６は、アサートされると、（例えば、一旦）ゼロにデクリメントするカウンタ５８Ａに応答して、ゼロにカウントを保持する。保持入力１６６がアサートされ、ロール入力１６４が非アサートされる場合、カウンタ５８Ａは、カウンタ５８Ａがリセット入力１８０でリセットされるまで、ゼロへのデクリメント後にゼロカウント出力１７６をアサートし得る。保持入力１６６は、一定の動作を実行するためにアサートされ得る。例えば、データストリームが第２の数量詞に合うかどうかを決定する（例えば、条件が正確に一定回数検出されるかどうかを決定する）ためのカウント動作を実行するために、カウンタ５８Ａが初期値からゼロに一旦デクリメントされると、保持入力１６６は、ゼロにカウンタを保持するようにアサートされ得る。カウンタ５８Ａはゼロカウントを保持するが、ブロック３２におけるカウンタ５８Ａに結合された他のカウンタ５８Ａは、第２の数量詞に合わないことを示す、条件が任意の更なる回数検出されるかどうかを決定し得る。
【００７５】
いくつかの実施形態では、１つ以上のカウンタ５８Ａは、１つ以上のカウント動作を実行するために共に使用されるように構成され得る。連鎖されたカウンタとして呼ばれる、カウント動作のための１つ以上のカウンタ５８Ａを使用することは、連鎖されたカウンタのビットサイズを増加し得る。例えば、列位置０、４、８、および１２からのブロック３２における４つのカウンタ５８Ａは、４８‐ビットカウンタとして連鎖され得る。各カウンタ５８Ａは、アサートされると、カウンタ５８Ａが他の連鎖イネーブルド（ｃｈａｉｎ‐ｅｎａｂｌｅｄ）カウンタ５８Ａの段階的接続の一部であることを可能にする連鎖イネーブル入力１６８を含み得る。段階的に接続されたカウンタは、低位カウンタがゼロカウントをカウントし高位カウンタに出力し得る順番で構成され得る。高位カウンタは、それがゼロカウントに到達したときに、ゼロカウントを別の高位カウンタ（例えば、マスタカウンタ）に出力し得る。
【００７６】
連鎖されたカウンタ動作の例として、（カウンタ（０）、カウンタ（４）、およびカウンタ（８）としてそれぞれ呼ばれる列位置０、４、および８におけるカウンタ５８Ａは、それらがカウンタの段階的接続において動作するように、アサートされた連鎖イネーブル入力１６８を有し得る。カウンタ（０）は、最低位カウンタであり得、段階的接続におけるマスタカウンタとして呼ばれ得る。カウンタ（４）は、次の位のものであり得、カウンタ（８）は、段階的接続の最高位カウンタ５８Ａであり得る。カウンタ５８Ａは、カウンタ５８Ａがゼロに到達したときに、カウンタ５８Ａがそれの初期値をロードする（「繰越す（ｒｏｌｌ  ｏｖｅｒ）」）ことを可能にするアサートされたロール入力１６４を有し得る。一実施形態では、カウンタ（０）は初期値入力を有し得、カウントイネーブル入力１７８がアサートされるときにカウントをデクリメントし得る。カウンタ（０）がゼロに一旦デクリメントされていると、カウンタ（０）は、それがゼロにデクリメントされていることを示し得、次の高位カウンタ（４）は、受信繰上げ入力１８２でこの指示を受信し得る。カウンタ（４）はカウントをデクリメントし得、カウンタ（０）は、それの元の入力値にリセットされ得、ゼロにデクリメントし続けリロードし得、カウンタ（４）は、カウンタ（０）のそれぞれのリロードでカウントをデクリメントする。カウンタ（４）がゼロにデクリメントする場合、カウンタ（４）は、それがゼロにデクリメントされていることを示し得、次の高位カウンタ（８）は、それの繰上げ入力１８２でこの指示を受信し得る。カウンタ（８）はカウントをデクリメントし得、カウンタ（４）は、それの元の入力値にリセットされ得、ゼロにデクリメントし続けリロードし得、カウンタ（８）は、カウンタ（４）のそれぞれのリロードでカウントをデクリメントする。
【００７７】
カウンタ（８）がゼロに一旦デクリメントすると、カウンタ（８）は、それがゼロにデクリメントされていることをカウンタ（４）に示し得、そのカウンタ（４）は、受信結果入力１８４でこの入力を受信し得る。カウンタ（４）は、最高位カウンタ（８）が十分に一旦デクリメントされると、もはやリセットし得ない。カウンタ（４）が十分に一旦デクリメントされると、カウンタ（４）は、これをマスタカウンタ（０）に示し得、そのマスタカウンタは、結果入力１８４で入力を受信する。マスタカウンタ（０）は、全ての高位カウンタが十分に一旦デクリメントされると、もはやリセットし得ず、マスタカウンタ（０）は、段階的に接続されたカウント動作の完了を示すために、それのゼロカウント出力１７６をアサートし得る。
【００７８】
その上、いくつかの実施形態では、段階的に接続されたカウンタは、ゼロにデクリメントする低位カウンタが高位カウンタをリセットし得るように、構成され得る。各カウンタは、イネーブルリセット０（ＥＲ（０）入力１７４、ＥＲ（１）入力１７２、およびＥＲ（２）入力１７０を有し得る。ＥＲ（０）１７４、ＥＲ（１）１７２、およびＥＲ（２）１７０入力のそれぞれは、カウンタ５８Ａが、イネーブルリセット入力位置に対応するカウンタからリセット入力１８６、１８８、または１９０においてリセット信号を受信することによってリセットされ得るように、アサートされ得る。例えば、いくつかの実施形態では、列位置０、４、８、および１２におけるカウンタ５８Ａが段階的に接続される場合、ＥＲ０  １７４、ＥＲ１  １７２、およびＥＲ２  １７０入力は、カウンタ（１２）上にアサートされ得る。ＥＲ０  １７４、ＥＲ１  １７２、およびＥＲ２  １７０入力がアサートされる場合、カウンタ（１２）は、列位置０におけるカウンタ５８Ａによってリセット入力０（Ｒ（０）入力）１９０でリセットされ得、列位置４におけるカウンタ５８ＡによってＲ（１）入力１８８でリセットされ得、列位置８におけるカウンタ５８ＡによってＲ（２）入力１８６でリセットされ得る。従って、いくつかの実施形態では、段階的に接続されたカウンタ動作において、低位カウンタは、低位カウンタがゼロにデクリメントされているたびに高位カウンタをリセットし得る。
【００７９】
図１０は、１つのカウンタ５８Ａまたは１つのブールセル５８Ｂを有するように各列３８を描写するが、列３８は、１つの特殊目的の要素５８だけを有することに限定されないことが留意されるべきである。例えば、いくつかの実施形態では、１つ以上の列３８は、１つ以上のカウンタ５８Ａ、ならびに追加の特殊目的の要素５８を有し得る。カウンタ５８Ａを含む特殊目的の要素５８は、列３８内の列内スイッチング要素４４経由で他の特殊目的の要素５８と通信することが可能であり得る。その上、カウンタ５８Ａは、１２‐ビットデクリメントカウンタに限定されない。いくつかの実施形態では、異なるビットサイズの適切なカウンタおよび／または異なる機能を実装するカウンタがまた、使用され得る。
【００８０】
発明は、種々の修正および代替の形態が可能であり得るが、特定の実施形態が、図面中に例として示されており、本明細書に詳細に記載されている。しかしながら、発明は、開示された特定の形態に限定されることを意図しないことが理解されるべきである。むしろ、発明は、以下の添付の特許請求の範囲によって定義されるような発明の趣旨や範囲内にある全ての修正、等価物、および代替物を包含するためのものである。
【図１】
2015505399.tif 000003
【図２】
2015505399.tif 000004
【図３】
2015505399.tif 000005
【図４】
2015505399.tif 000006
【図５】
2015505399.tif 000007
【図６】
2015505399.tif 000008
【図７】
2015505399.tif 000009
【図８】
2015505399.tif 000010
【図９】
2015505399.tif 000011
【図１０】
2015505399.tif 000012
【図１１】
2015505399.tif 000013
【国際調査報告】
2015505399.tif 000014
2015505399.tif 000015
2015505399.tif 000016
2015505399.tif 000017
2015505399.tif 000018