(57)【要約】状態情報を提供するためのプログラム可能装置、階層型並列マシン、および方法を説明する。１つのかかるプログラム可能装置では、プログラム可能要素が提供される。プログラム可能要素は、１つまたは複数の有限状態機械を実装するように構成される。プログラム可能要素は、Ｎ桁の入力を受信し、そのＮ桁の入力に応じてＭ桁の出力を提供するように構成される。Ｍ桁の出力は、全部より少ないプログラム可能要素からの状態情報を含む。他のプログラム可能装置、階層型並列マシンおよび方法も開示する。【選択図】図１３
2013534660.tif 000002
【特許請求の範囲】
【請求項１】
複数のプログラム可能要素を含むプログラム可能装置であって、
前記プログラム可能要素が１つまたは複数の有限状態機械を実装するように構成され、前記複数のプログラム可能要素が、Ｎ桁の入力を受信し、かつ前記Ｎ桁の入力に応じてＭ桁の出力を提供するように構成され、前記Ｍ桁の出力が全部より少ないプログラム可能要素からの状態情報を含む、
プログラム可能装置。
【請求項２】
前記複数のプログラム可能要素がプログラム可能要素の２つ以上のグループのうちの１つを含む、請求項１に記載のプログラム可能装置。
【請求項３】
プログラム可能要素の前記１つのグループに結合され、かつ前記Ｎ桁の入力を受信するように構成されたＮ桁の入力インタフェースと、
プログラム可能要素の前記１つのグループに結合され、かつ前記Ｍ桁の出力を提供するように構成されたＭ桁の出力インタフェースとを
さらに含む、請求項２に記載のプログラム可能装置。
【請求項４】
プログラム可能要素の前記１つのグループが、プログラム可能要素のブロックを含む、請求項２に記載のプログラム可能装置。
【請求項５】
プログラム可能要素の前記ブロックが、プログラム可能要素の複数の行を含み、前記行の各々が複数のブロック内スイッチのそれぞれ１つと結合されている、請求項４に記載のプログラム可能装置。
【請求項６】
前記行の各々内の前記プログラム可能要素が、
２つの状態機械要素の複数のグループと
別のプログラム可能要素を含む、
請求項５に記載のプログラム可能装置。
【請求項７】
プログラム可能要素の前記１つのグループを、プログラム可能要素の別の１つのグループ、入力ポート、および／または出力ポートと選択的に結合するように構成されたプログラム可能スイッチを
さらに含む、請求項２に記載のプログラム可能装置。
【請求項８】
前記複数のプログラム可能要素および前記複数のプログラム可能スイッチをプログラムするように構成されたプログラムを格納するように構成されたレジスタを
さらに含む、請求項７に記載のプログラム可能装置。
【請求項９】
ＮがＭと等しい、請求項１に記載のプログラム可能装置。
【請求項１０】
ＭがＮの整数倍である、請求項１に記載のプログラム可能装置。
【請求項１１】
前記有限状態機械の同じ１つを実装するために使用された２つ以上の前記プログラム可能要素からの出力を統合するように構成されたＯＲ論理を
さらに含む、請求項１に記載のプログラム可能装置。
【請求項１２】
前記プログラム可能要素がＮ個の状態機械の論理グループを実装するように構成され、前記Ｎ個の状態機械の前記出力が前記Ｍ桁の出力を提供するように統合される、請求項１１に記載のプログラム可能装置。
【請求項１３】
前記論理がＯＲゲートを含む、請求項１１に記載のプログラム可能装置。
【請求項１４】
前記Ｍ桁の出力に含まれる前記状態情報が圧縮された状態情報を含む、請求項１に記載のプログラム可能装置。
【請求項１５】
前記複数のプログラム可能要素が状態機械要素を含む、請求項１に記載のプログラム可能装置。
【請求項１６】
前記Ｍ桁の出力が差分ベクトルを含む、請求項１に記載のプログラム可能装置。
【請求項１７】
前記実装された１つまたは複数の有限状態機械内の各状態が、状態ベクトル内のそれぞれの桁に対応し、かつ、前記差分ベクトルが、前記プログラム可能装置に提供された入力シンボルに応じて変化する前記状態ベクトル内の桁のみを含む、請求項１６に記載のプログラム可能装置。
【請求項１８】
前記実装された１つまたは複数の有限状態機械内の各状態が、状態ベクトル内のそれぞれの桁に対応し、かつ、前記Ｍ桁の出力が前記状態ベクトル内の前記桁のサブセットのみを含む、請求項１に記載のプログラム可能装置。
【請求項１９】
前記桁の前記サブセットが前記１つまたは複数の有限状態機械内の最終状態に対応する桁を含む、請求項１に記載のプログラム可能装置。
【請求項２０】
前記装置で実装された全ての状態機械が前記Ｎ桁の入力を受信する、請求項１に記載のプログラム可能装置。
【請求項２１】
前記複数のプログラム可能要素がプログラム可能要素の２つ以上のグループのうちの１つを含み、前記グループの各々がそれ自身の専用入力を有する、請求項１に記載のプログラム可能装置。
【請求項２２】
前記Ｎ桁の入力が半導体ダイの底面上にあり、かつ、前記Ｍ桁の出力が半導体ダイの上にある、請求項１に記載のプログラム可能装置。
【請求項２３】
前記複数のプログラム可能要素がプログラム可能要素の２つ以上のグループのうちの１つを含み、かつ、前記プログラム可能装置が状態情報を、前記プログラム可能装置内の前記グループの１つから前記グループの別の１つに提供するように構成されている、請求項１に記載のプログラム可能装置。
【請求項２４】
複数のプログラム可能要素を含む第１の並列マシンであって、前記プログラム可能要素が１つまたは複数の有限状態機械を実装するように構成され、前記複数のプログラム可能要素がＮ桁の入力を受信し、前記Ｎ桁の入力に応じてＭ桁の出力を提供するように構成され、前記Ｍ桁の出力が全部より少ない前記プログラム可能要素からの状態情報を含む、第１の並列マシンと、
前記Ｍ桁の出力の少なくとも一部を受信および処理するように構成された第２の並列マシンと
を備える階層型並列マシン。
【請求項２５】
前記第２の並列マシンが、前記Ｍ桁の出力全体を受信および処理するように構成されている、請求項２４に記載の階層型並列マシン。
【請求項２６】
前記第１の並列マシンに結合され、前記Ｎ桁の入力を提供するように構成された、入力バスと、
前記第１の並列マシンと前記第２の並列マシンとの間に結合され、前記Ｍ桁の出力の少なくとも一部を前記第２の並列マシンに提供するように構成された、出力バスと
をさらに含む、請求項２４に記載の階層型並列マシン。
【請求項２７】
前記入力バスおよび出力バスが同じサイズである、請求項２６に記載の階層型並列マシン。
【請求項２８】
前記第１および第２の並列マシン内の前記対応するグループが相互接続のそれぞれのグループによって結合されている、請求項２７に記載の階層型並列マシン。
【請求項２９】
前記Ｍ桁の出力が、前記第２の並列マシン内で実装された各状態機械に提供される、請求項２４に記載の階層型並列マシン。
【請求項３０】
前記第２の並列マシンが複数のグループに分類された複数のプログラム可能要素を含み、前記Ｍ桁の出力が事前定義した方法に従って前記グループのそれぞれ１つに提供される、請求項２４に記載の階層型並列マシン。
【請求項３１】
前記第２の並列マシンが、アドレス情報を前記第２の並列マシンに送信するように構成された複数のプログラム可能要素を含み、前記アドレス情報が、前記第２の並列マシン内の前記グループのいずれに前記Ｍ桁の出力が提供されているかを示す、
請求項２４に記載の階層型並列マシン。
【請求項３２】
前記並列マシンが積み重ねられている、請求項２４に記載の階層型並列マシン。
【請求項３３】
前記複数のプログラム可能要素がプログラム可能要素の２つ以上のグループのうちの１つを含み、さらに、各グループに対応する論理を含み、前記グループのそれぞれ１つに対応する前記論理がそのグループ内の２つ以上のプログラム可能要素からの状態情報を統合し、かつ、そのグループからの前記Ｍ桁の出力の１つまたは複数の桁がかかる論理の関数である、請求項２４に記載の階層型並列マシン。
【請求項３４】
前記Ｍ桁の出力が前記プログラム可能要素からの状態情報を圧縮することによって形成される、請求項２４に記載の階層型並列マシン。
【請求項３５】
複数のプログラム可能要素であって、前記プログラム可能要素が１つまたは複数の有限状態機械を実装するように構成され、前記複数のプログラム可能要素がＮ桁の入力を受信し、前記Ｎ桁の入力に応じてＭ桁の出力を提供するように構成され、前記Ｍ桁の出力が前記プログラム可能要素の各々からの状態情報を圧縮することによって形成される、複数のプログラム可能要素を備える、
プログラム可能装置。
【請求項３６】
ＮがＭと等しい、請求項３５に記載のプログラム可能装置。
【請求項３７】
ＭがＮの整数倍である、請求項３５に記載のプログラム可能装置。
【請求項３８】
前記有限状態機械の同じ１つを実装するために使用された２つ以上の前記プログラム可能要素からの出力を統合するように構成された論理をさらに含む、
請求項３５に記載のプログラム可能装置。
【請求項３９】
前記プログラム可能要素がＮ個の状態機械の論理グループを実装するように構成され、前記Ｎ個の状態機械の前記出力が前記Ｍ桁の出力を提供するように統合される、請求項３８に記載のプログラム可能装置。
【請求項４０】
複数のプログラム可能要素を含む第１の並列マシンであって、前記プログラム可能要素が１つまたは複数の有限状態機械を実装するように構成され、前記複数のプログラム可能要素がＮ桁の入力を受信し、前記Ｎ桁の入力に応じてＭ桁の出力を提供するように構成され、前記Ｍ桁の出力が前記プログラム可能要素の各々からの状態情報を圧縮することによって形成される、第１の並列マシンを備える
階層型並列マシン。
【請求項４１】
ＮがＭと等しい、請求項４０に記載の階層型並列マシン。
【請求項４２】
ＭがＮの整数倍である、請求項４０に記載の階層型並列マシン。
【請求項４３】
並列マシンからの状態情報を別の装置に提供する方法であり、前記並列マシンが複数のプログラム可能要素を含み、前記プログラム可能要素の各々が対応する状態を有するように構成された方法であって、
前記並列マシン内の前記プログラム可能要素の各々の前記状態を含む、状態情報を決定することと、
前記状態情報を圧縮することと、
前記圧縮された状態情報を前記他の装置に提供することと
を含む方法。
【請求項４４】
前記状態情報を圧縮することが無損失圧縮アルゴリズムを前記状態情報に適用することを含む、請求項４３に記載の方法。
【請求項４５】
前記圧縮された状態情報を前記他の装置に提供することが、前記圧縮された状態情報を別の並列マシンに提供することを含む、請求項４３に記載の方法。
【請求項４６】
前記圧縮された状態情報を前記他の装置に提供することが、前記圧縮された状態情報をシステムメモリに提供することを含む、請求項４３に記載の方法。
【請求項４７】
前記状態情報を圧縮することが前記並列マシン上で実装された有限状態機械内の最終状態を統合することを含む、請求項４３に記載の方法。
【請求項４８】
少なくとも１つのＮ桁の入力および複数のＮ桁の出力を有する第１のレベルの並列マシンであって、前記Ｎ桁の出力の各々が、前記第１のレベルの並列マシン上で実装されているＮ個の状態機械のそれぞれのグループに対応する、第１のレベルの並列マシンを備える、階層型並列マシン。
【請求項４９】
前記第１のレベルの並列マシン上で実装された少なくとも１つの前記状態機械が、前記少なくとも１つの状態機械の複数の最終状態に対応する複数のプログラム可能要素を含み、前記複数の最終状態に対応する前記複数のプログラム可能要素の前記出力が、前記Ｎ桁の出力のうちの１つの１桁を提供するために共に統合される、請求項４８に記載の階層型並列マシン。
【請求項５０】
前記Ｎ桁の出力の１つに提供されたデータが、前記第１のレベルの並列マシン上で実装されたＮ個の状態機械のそれぞれのグループに対する前記最終状態の前記状態をコード化する、請求項４８に記載の階層型並列マシン。
【請求項５１】
前記第１のレベルの並列マシンが有限状態機械エンジンを含む、請求項４８に記載の階層型並列マシン。
【請求項５２】
前記有限状態機械エンジンがプログラム可能要素のグループの配列を含み、かつ、プログラム可能要素の前記グループの各々が前記Ｎ桁の出力のそれぞれ１つに結合されている、請求項５１に記載の階層型並列マシン。
【請求項５３】
前記第１のレベルの並列マシンが複数のＮ桁の入力を有し、かつ、プログラム可能要素の前記グループの各々が前記第１のレベルの並列マシンの前記Ｎ桁の入力のそれぞれ１つに結合されている、請求項５２に記載の階層型並列マシン。
【請求項５４】
前記第２のレベルの並列マシンが有限状態機械エンジンを含む、請求項４８に記載の階層型並列マシン。
【請求項５５】
前記有限状態機械エンジンがプログラム可能要素のグループの配列を含み、かつ、プログラム可能要素の前記グループの各々が前記Ｎ桁の入力のそれぞれ１つに結合されている、請求項５４に記載の階層型並列マシン。
【請求項５６】
前記第２のレベルの並列マシンが複数のＮ桁の出力を有し、かつ、プログラム可能要素の前記グループの各々が、前記第２のレベルの並列マシンの前記Ｎ桁の出力のそれぞれ１つに結合されている、請求項５５に記載の階層型並列マシン。
【請求項５７】
前記第１の並列マシンが第１のダイを含み、かつ前記第２の並列マシンが前記第１のダイで積み重ねられた第２のダイを含む、請求項４８に記載の階層型並列マシン。
【請求項５８】
第３の並列マシンおよびバスをさらに含み、前記第３の並列マシンが、前記第１のダイおよび前記第２のダイで積み重ねられた第３のダイを含み、前記第２のダイが前記スタック内の前記第１のダイと前記第３のダイとの間にあり、かつ、前記バスが前記第１の並列マシンと前記第３の並列マシンとの間で状態情報を転送するように構成されている、請求項５７に記載の階層型並列マシン。
【請求項５９】
前記バスが複数の相互接続を含む、請求項５８に記載の階層型並列マシン。
【請求項６０】
前記相互接続が貫通ビア相互接続を含む、請求項５９に記載の階層型並列マシン。
【請求項６１】
前記並列マシンが有限状態機械エンジンを含む、請求項４８に記載の階層型並列マシン。
【請求項６２】
前記有限状態機械エンジンがパターン認識プロセッサを含む、請求項６１に記載の階層型並列マシン。
【請求項６３】
前記並列マシンがフィールドプログラマブルゲートアレイを含む、請求項４８に記載の階層型並列マシン。
【請求項６４】
前記第１のレベルの並列マシンの前記少なくとも１つのＮ桁の入力が、生データを受信するように構成された、請求項４８に記載の階層型並列マシン。
【請求項６５】
前記第２のレベルの並列マシンの前記Ｎ桁の入力の各々が、前記第２のレベルの並列マシン上で実装されたＮ個の状態機械のそれぞれのグループに対応し、前記第２のレベルの並列マシン上で実装されたＮ個の状態機械の各グループが、前記第１のレベルの並列マシン上で実装された最大Ｎ個の状態機械により駆動される、請求項４８に記載の階層型並列マシン。
【請求項６６】
少なくとも１つの有限状態機械を実装するように構成された複数のプログラム可能要素を含む並列マシンであって、
前記プログラム可能要素の各々の前記状態を含む、状態情報を決定し、
前記状態情報を圧縮し、
前記圧縮された状態情報を別の装置に提供するように構成された、並列マシン。
【請求項６７】
前記他の装置が第２の並列マシンを含み、前記第２の並列マシンが、前記圧縮された状態情報を受信および処理するように構成された、請求項６６に記載の並列マシン。
【請求項６８】
前記状態情報を圧縮するように構成されている前記並列マシンが、前記並列マシン上で実装された有限状態機械の最終状態を統合するように構成されている前記並列マシンを含む、請求項６６に記載の並列マシン。
【請求項６９】
前記最終状態を統合するように構成されたブール論理をさらに含む、請求項６８に記載の並列マシン。
【請求項７０】
前記状態情報を圧縮するように構成されている前記並列マシンが、差分ベクトルを出力するように構成されている前記並列マシンを含み、前記差分ベクトルが、入力シンボルに応じて変化している状態のみを識別する、請求項６６に記載の並列マシン。
【請求項７１】
前記状態情報を圧縮するように構成されている前記並列マシンが、出力ベクトルを出力するように構成されている前記並列マシンを含み、前記出力ベクトルが、前記並列マシン上で実装された有限状態機械内の最終状態に対する状態情報のみを提供する、請求項６６に記載の並列マシン。
【発明の詳細な説明】
【技術分野】
【０００１】
〔優先出願〕
本特許出願は、Ｕ．Ｓ．Ｃ．セクション１１９（ｅ）に基づき、２０１０年６月10日に出願された「Ｓｙｓｔｅｍ  ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｔｒａｎｓｆｅｒｒｉｎｇ  Ｓｔａｔｅ  Ｂｅｔｗｅｅｎ  Ｆｉｎｉｔｅ  Ｓｔａｔｅ  Ｍａｃｈｉｎｅ」というタイトルの米国仮特許出願番号第６１／３５３，５５１号に対する優先権の利益を主張する、２０１１年３月１日に出願された「Ｐｒｏｇｒａｍｍａｂｌｅ  Ｄｅｖｉｃｅ，Ｈｉｅｒａｒｃｈｉｃａｌ  Ｐａｒａｌｌｅｌ  Ｍａｃｈｉｎｅｓ，Ｍｅｔｈｏｄｓ  ｆｏｒ  Ｐｒｏｖｉｄｉｎｇ  Ｓｔａｔｅ  Ｉｎｆｏｒｍａｔｉｏｎ」というタイトルの米国出願第１３／０３７，７０６号からの優先権利益を主張し、その両方の内容全体が本明細書によって、参照により本明細書に組み込まれる。
【背景技術】
【０００２】
プログラム可能装置の一例は、並列マシンである。並列マシンは、例えば、有限状態機械（ＦＳＭ）エンジンおよびフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を含む。ＦＳＭは、状態、状態間の遷移および動作の表現である。有限状態機械は、有向フローグラフの形式で表現できる。それらは、例えば、エンジニアリング、パターン認識、生物学、および人工知能における問題を解決するために使用できる。
【図面の簡単な説明】
【０００３】
【図１】本発明の様々な実施形態による、階層型並列マシンの一例を示す。
【図２】本発明の様々な実施形態による、パターン認識用に構成された階層型並列マシンの一例を示す。
【図３】本発明の様々な実施形態による、並列マシンの一例を示す。
【図４】本発明の様々な実施形態による、有限状態機械図の一例を示す。
【図５】本発明の様々な実施形態による、有限状態機械図の別の例を示す。
【図６】本発明の様々な実施形態による、並列マシンで実装された２レベル階層の別の例を示す。
【図７】本発明の様々な実施形態による、並列マシンで実装された４レベル階層の一例を示す。
【図８】本発明の様々な実施形態による、有限状態機械図のグループの一例を示す。
【図９】本発明の様々な実施形態による、図式的に示された状態機械の最終状態が統合されている、有限状態機械図の別の例を示す。
【図１０】本発明の様々な実施形態による、図式的に示された有限状態機械の各々の最終状態が統合されている、有限状態機械図のグループの別の例を示す。
【図１１】本発明の様々な実施形態による、プログラム可能要素の配列の一例を示す。
【図１２】本発明の様々な実施形態による、パターン認識プロセッサのスタックの一例を示す。
【図１３】本発明の様々な実施形態による、並列マシンで実装されたフィードバックを有する４レベル階層の一例を示す。
【図１４】本発明の様々な実施形態による、並列マシンで実装されたフィードバックを有する４レベル階層の別の例を示す。
【図１５】本発明の様々な実施形態による、有限状態機械エンジンを示す。
【図１６】本発明の様々な実施形態による、図１５の有限状態機械エンジンのブロックの一例を示す。
【図１７】本発明の様々な実施形態による、図１６のブロックの行の一例を示す。
【図１８】本発明の様々な実施形態による、図１０の行のうちの２つのグループの一例を示す。
【図１９】本発明の様々な実施形態による、コンパイラがソースコードを、図８の有限状態機械をプログラミングするためのイメージに変換するための方法の一例を示す。
【図２０】本発明の様々な実施形態による、フォンノイマンベースのアーキテクチャを有するコンピュータの一例を示す。
【発明を実施するための形態】
【０００４】
以下の説明および図は、当業者が特定の実施形態を実施できるように十分に説明する。他の実施形態は、構造的、論理的、電気的、プロセス、および他の変更を組み込み得る。いくつかの実施形態の部分および特徴は、他の実施形態のそれらに含まれ得るか、またはそれらと置き換えられ得る。
【０００５】
本明細書では、とりわけ、階層型有限状態機械（ＨＦＳＭ）エンジンなどの階層型並列マシン、および関連する方法を説明する。１つのかかる階層型並列マシン１０を図１に示す。各階層型並列マシン１０は、２つ以上の有限状態機械（ＦＳＭ）エンジン１２などの、２つ以上の並列マシンを含む。各有限状態機械エンジン１２は、入力バス１６上のデータ（例えば、データストリーム）を受信して反応し、受信したデータに応じて出力を提供（例えば、生成）する装置である。
【０００６】
各有限状態機械エンジン１２は、任意に複雑であり得る。図１に示すような、一実施形態では、有限状態機械エンジン１２は、カスケード接続されて、少なくとも１つの有限状態機械エンジン１２の出力（例えば、状態）が、全体または部分的に、カスケード接続の下流で１つまたは複数の有限状態機械エンジン１２に提供される（例えば、渡される）。一例では、カスケード接続内の最後の有限状態機械エンジンが結果を生成し、それを、結果バス２０などの、出力バス上に提供できる。一実施形態では、有限状態機械エンジン１２の各々は、例えば、プログラム（例えば、イメージ）を有限状態機械エンジン１２上にプログラムバス１４を用いてロード（例えば、格納）するなどにより、それぞれのプログラムバス１４を介してプログラムできる。
【０００７】
いくつかの実施形態では、ＨＰＲＰ  １０でデータを処理するのに必要な時間を削減することが重要であり得る。ＨＰＲＰ  １０でデータを処理する時間は、少なくとも一部は、有限状態機械エンジン１２の間に渡されるデータ（例えば、状態ベクトルなどの状態情報）の量によって制限され得る。いくつかのかかる実施形態では、有限状態機械エンジン１２は、階層構成で接続され、有限状態機械エンジン１２の間のインタフェースがリアルタイム操作に近づくように設計できる。とりわけ、本明細書では、かかる検討事項について説明し、ＦＳＭエンジン１２の階層セットなど、並列マシンの階層セットを物理的に実装するための一般的な方法を提言する。
【０００８】
一実施形態では、図２に示すように、階層型パターン認識プロセッサ（ＨＰＲＰ）３０が実装される。パターン認識プロセッサは、データ（例えば、シンボルのシーケンス）を受信し、対象のシーケンスが認識（例えば、検出）されると、ある種の通知を提供する出力を生成する装置である。単純な場合には、入力シンボルの単一ストリームが、入力バス３６上のＨＰＲＰ  ３０に提供される。ＨＰＲＰ  ３０は、プログラムバス３４を介して入力シンボルの特定のシーケンス（または複数）を検出するようにプログラムされる。結果（検出されたシーケンス）が生成され、結果バス４０上に提供できる。ＨＰＲＰ  ３０の論理インタフェース（プログラムインタフェース３４およびデータ入力３６）を図２に示す。
【０００９】
図示の実施形態では、ＨＰＲＰ  ３０は、パターン認識プロセッサ（ＰＲＰ）３２としてプログラムされた、２つ以上の有限状態機械エンジンを含み得る。各ＰＲＰ  ３２は、それぞれのデータストリーム（入力バス３６または入力バス４２のいずれかの上のデータストリームなど）内のシンボルのシーケンスを検出できる装置である。例えば、各ＰＲＰ  ３２は、それぞれのデータストリーム内のそれぞれのパターンを照合することができる。図示した実施形態では、第２のＰＲＰ  ３２は、その入力として、第１のＰＲＰ  ３２の出力を受信し（出力バス３８上に提供されるように）、結果バス４０上に結果を生成する。一実施形態では、ＰＲＰ  ３２の各々は、それぞれのプログラムバス３４を介してプログラムできる。ＰＲＰ  ３２の例を、図１５〜図１８（「内容検査プロセッサ」とも呼ばれる）に関連して、以下で説明する。ある例では、ＨＰＲＰ  ３０は、有限状態機械（ＦＳＭ）エンジンあるいはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）、あるいはそれらの変形、または並列マシンの別の実施形態を用いて実装される。
【００１０】
階層型並列マシン１０および３０の２レベル（例えば、段階）階層は、２つの独立したプログラムが同じデータストリームに基づいて動作できるようにする。２レベル階層は、異なる領域としてモデル化される人間の脳内の視覚認識と類似し得る。このモデルでは、領域は、有効に異なるパターン認識プロセッサであり、各々が、異なるプログラム（例えば、シグネチャ）を使用しているが、類似のコンピュータ機能（データストリーム内のシンボルのシーケンスの検出）を実行している。複数の並列マシンを連結することにより、データストリームに関するより深い知識が取得され得る。
【００１１】
階層の第１のレベル（第１のＦＳＭエンジン１２または第１のＰＲＰ  ３２によって実装されたものなど）は、例えば、生データストリームの処理を直接実行できる。すなわち、第１のＦＳＭ  １２または第１のＰＲＰ  ３２は、出力データストリーム（例えば、生データストリーム内の一致の表示）を入力バス１６または入力バス３６上の生データストリームに応じて、それぞれ生成できる。図１に示すように、第２のレベル（第２のＦＳＭエンジン１２または第２のＰＲＰ  ３２によって実装されたものなど）は、第１のレベルからの出力データストリームを処理する。例えば、第２のＦＳＭエンジン１２は、第１のＦＳＭエンジン１２からの（出力バス１８上に提供された）出力データストリームを受信し、第２のＦＳＭエンジン１２は、第１のＦＳＭエンジン１２の出力データストリームを処理する。その結果、第２のＦＳＭエンジン１２は、入力として生データストリームを受信するのではなく、第１のＦＳＭエンジン１２によって生成された出力データストリームを受信する。第２のＦＳＭエンジン１２は、第１のＦＳＭエンジン１２によって生成された出力データストリーム内のシーケンスを検出するために、第１のイメージでプログラムできる。第２のＦＳＭエンジン１２は、第２のイメージを受信するために、別個のプログラミングインタフェース（例えば、プログラムバス１４によって）に結合され得る。
【００１２】
一例では、ＨＰＲＰ  ３０は、パターン認識機能を実装するようにプログラムできる。例えば、ＨＰＲＰ  ３０によって実装されたＦＳＭは、ＨＰＲＰ  ３０に入力されるデータストリーム内で１つまたは複数のデータシーケンス（例えば、シグネチャ）を認識するように構成できる。データストリーム内で対象のシーケンスが第１のＰＲＰ  ３２によって認識（例えば、合致）される場合、その認識を示す出力データストリームが出力バス３８上に提供できる。一例では、パターン認識は、例えば、ネットワークデータ内のマルウェアまたは他の情報を識別するために、一連のシンボル（例えば、ＡＳＣＩＩ文字）を認識することができる。
【００１３】
この出力データストリーム（例えば、出力ワード、検出状態など）は、図２に示すように、第１のＰＲＰ  ３２の出力バス３８から別のＰＲＰ  ３２の入力バス４２に供給できる。２つのＰＲＰ  ３２の連続したこの接続は、過去のイベントに関する情報を圧縮したワードで第１のＰＲＰ  ３２から第２のＰＲＰ  ３２に提供する手段を提供する。情報のこの提供は、有効に、第１のＰＲＰ  ３２によって認識された複雑なイベント（例えば、データストリームのシーケンス）の要約であり得る。
【００１４】
前述のとおり、いくつかの実施形態では、ＰＲＰのレベル間で出力を渡すために必要な時間を削減することが重要であり得る。いくつかのかかる実施形態では、ＰＲＰ  ３２の間のインタフェースが、ＨＰＲＰ  ３０の各レベルのリアルタイム操作をサポートするように設計できる。本明細書では、かかる検討事項について説明し、例えば、ＨＰＲＰ  ３０を物理的に実装するための一般的な方法を提言する。
【００１５】
本明細書では、とりわけ、階層構造を用いてデータを処理するための方法および装置について説明する。階層構造は、複数のレベル（例えば、層）を含むことができ、各レベルはデータを処理（例えば、分析）して、（例えば、分析に基づいて）出力を提供する。階層構造内の低いレベルからの出力が、高いレベルへの入力として提供できる。このようにして、より低いレベルがより基本的／根本的な分析を実行でき、他方、より高いレベルが１つまたは複数の低いレベルからの出力を用いて、より複雑な分析を実行できる。一例では、階層構造はパターン認識を実行する。
【００１６】
一例では、階層構造は、カスケード方式で連結された複数の有限状態機械エンジンで実装される。例えば、第１および第２の有限状態機械エンジンは、第２の有限状態機械エンジンが、入力として、第１の有限状態機械エンジンからの出力を受信するように、連続して結合できる。この階層構造では、任意の数の有限状態機械エンジンが連結できる。
【００１７】
階層構造を用いたデータ処理に加えて、本明細書では、別の有限状態機械エンジンによって実行される処理を変更するために、１つの有限状態機械エンジンからの出力を使用するための方法および装置についても説明する。前述した有限状態機械エンジンの例を用いると、より高いレベルの処理を実装する第２の有限状態機械エンジンが、より低いレベルの処理を実装する第１の有限状態機械エンジンにフィードバック情報を提供できる。フィードバック情報は、生物学的な脳における学習と似た方法で処理を変更（例えば、更新）するために、第１の有限状態機械エンジンによって使用できる。
【００１８】
図３は、有限状態機械エンジンまたはパターン認識プロセッサの実装に使用できる並列マシン１００の例を示す。並列マシン１００は、入力データを受信し、入力データに基づいて出力を提供できる。並列マシン１００は、入力データを受信するためのデータ入力ポート１１０および出力を別の装置に提供するための出力ポート１１４を含むことができる。データ入力ポート１１０は、データを並列マシン１００に入力するためのインタフェースを提供する。
【００１９】
並列マシン１００は、汎用要素１０２および専用（ｓｐｅｃｉａｌ  ｐｕｒｐｏｓｅ）要素１１２を含む複数のプログラム可能要素を含む。汎用要素１０２は、１つまたは複数の入力１０４および１つまたは複数の出力１０６を含むことができる。汎用要素１０２は、複数の状態のうちの１つにプログラムできる。汎用要素１０２の状態は、汎用要素１０２が所与の入力に基づいてどの出力を提供するかを決定する。すなわち、汎用要素１０２の状態は、プログラム可能要素が所与の入力に対してどのように反応（例えば、応答）するかを決定する。データ入力ポート１１０に対するデータ入力は、複数の汎用要素１０２に提供でき、汎用要素１０２にそれに対して処置を講じさせる。汎用要素１０２の例には、例えば、以下で詳述する、状態機械要素（ＳＭＥ）、カウンタ、および／または、他のプログラム可能要素の中で特に、構成可能論理ブロックを含むことができる。一例では、ＳＭＥは、所与の入力がデータ入力ポート１１０で受信されると、ある出力（例えば、高または「１」信号）を提供するようにプログラム（例えば、設定）できる。所与の入力以外の入力がデータ入力ポート１１０で受信されると、ＳＭＥは、異なる出力（例えば、低または「０」信号）を提供できる。一例では、構成可能論理ブロックは、データ入力ポート１１０で受信した入力に基づいて、ブール論理関数（例えば、ＡＮＤ、ＯＲ、ＮＯＲなど）を実行するように設定できる。カウンタの一例については、本明細書で後述する。専用要素１１２には、メモリ（例えば、ＲＡＭ）、論理ゲート、カウンタ、ルックアップテーブル、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、および他のハードウェア要素を含むことができる。専用要素１１２は、汎用要素１０２と情報をやりとりして、特殊目的機能を実行できる。
【００２０】
並列マシン１００は、プログラム（例えば、イメージ）を並列マシン１００上にロードするためのプログラミングインタフェース１１１も含むことができる。イメージは、汎用要素１０２の状態をプログラム（例えば、設定）できる。すなわち、イメージは、汎用要素１０２を、所与の入力に対してある方法で反応するように構成できる。例えば、汎用要素１０２は、データ入力ポート１１０で文字「ａ」が受信されると、高信号を出力するように設定できる。いくつかの例では、並列マシン１００は、汎用要素１０２の動作のタイミングを制御するためにクロック信号を使用できる。いくつかの実施形態では、データ入力ポート１１０で受信したデータは、長い期間にわたって、もしくは一度に受信したデータの固定セット、または長い期間をかけて受信したデータのストリームを含むことができる。データは、並列マシン１００に結合された、データベース、センサー、ネットワークなど、任意の供給源から受信され得るか、またはそれによって生成され得る。
【００２１】
並列マシン１００は、並列マシン１００の異なる要素（例えば、汎用要素１０２、データ入力ポート１１０、出力ポート１１４、プログラミングインタフェース１１１、および専用要素１１２）を選択的に結合するための、複数のプログラム可能スイッチ１０８も含む。その結果、並列マシン１００は、要素間で形成されたプログラム可能マトリックスを含む。一例では、プログラム可能スイッチ１０８は、汎用要素１０２、データ入力ポート１１０、プログラミングインタフェース１１１、または専用要素１１２の入力１０４が、１つまたは複数のプログラム可能スイッチ１０８を介して、汎用要素１０２、出力ポート１１４、プログラミングインタフェース１１１、または専用要素１１２の出力１０６に結合できるように、２つ以上の要素を選択的に相互に結合できる。従って、要素間の信号のルーティングが、プログラム可能スイッチ１０８を設定することによって制御できる。図３では、所与の要素とプログラム可能スイッチ１０８との間に、ある数の導体（例えば、ワイヤー）が示されているが、他の例では、異なる数の導体が使用できることが理解されるべきである。また、図３では、個々にプログラム可能スイッチ１０８に結合された各汎用要素１０２が示されているが、他の例では、複数の汎用要素１０２がグループ（例えば、図１５に示すような、ブロック８０２）としてプログラム可能スイッチ１０８に結合できる。一例では、データ入力ポート１１０、データ出力ポート１１４、および／または、プログラミングインタフェース１１１は、レジスタへの書き込みがそれぞれの要素に対して、またはそれぞれの要素から、データを提供できるように、レジスタとして実装できる。
【００２２】
一例では、単一の並列マシン１００が物理装置上に実装されるが、他の例では、２つ以上の並列マシン１００が単一の物理装置（例えば、物理チップ）上に実装できる。一例では、複数の並列マシン１００の各々が、別個のデータ入力ポート１１０、別個の出力ポート１１４、別個のプログラミングインタフェース１１１、および別個の汎用要素１０２のセットを含むことができる。さらに、汎用要素１０２の各セットは、それらの対応する入力ポート１１０で、データに反応（例えば、高または低信号を出力）できる。例えば、第１の並列マシン１００に対応する汎用要素１０２の第１のセットは、第１の並列マシン１００に対応する第１のデータ入力ポート１１０でデータに反応できる。第２の並列マシン１００に対応する汎用要素１０２の第２のセットは、第２の並列マシン１００に対応する第２のデータ入力ポート１１０に反応できる。その結果、各並列マシン１００は、汎用要素１０２のセットを含み、汎用要素１０２の異なるセットは異なる入力データに反応できる。同様に、各並列マシン１００、および汎用要素１０２の各対応するセットは、別個の出力を提供できる。いくつかの例では、第１の並列マシン１００からの出力ポート１１４は、第２の並列マシン１００の入力ポート１１０に結合でき、第２の並列マシン１００に対する入力データが、第１の並列マシン１００からの出力データを含むことができるようになる。
【００２３】
一例では、並列マシン１００上にロードするためのイメージには、汎用要素１０２の状態の設定、プログラム可能スイッチ１０８のプログラミング、および並列マシン１００内の専用要素１１２の構成を行うための複数のビット情報を含む。一例では、イメージは、ある入力に基づき所望の出力を提供するように並列マシン１００をプログラムするために、並列マシン１００上にロードできる。出力ポート１１４は、入力ポート１１０で受信したデータに対する汎用要素１０２の反応に基づき、並列マシン１００からの出力を提供できる。出力ポート１１４からの出力は、所与のパターンの一致を示す単一ビット、複数のパターンとの一致および不一致を示す複数のビットを含むワード、および全てまたは一部の汎用要素１０２および専用要素１１２の状態に対応する出力ベクトルを含むことができる。
【００２４】
並列マシン１００の使用例には、パターン認識（例えば、音声認識、画像認識など）、信号処理、画像処理、コンピュータビジョン、暗号化などを含む。ある例では、並列マシン１００は、有限状態機械（ＦＳＭ）エンジン、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、およびそれらの変形を含むことができる。さらに、並列マシン１００は、コンピュータ、ポケットベル、携帯電話、電子手帳、携帯音楽プレーヤ、ネットワーク装置（例えば、ルーター、ファイアウォール、スイッチ、またはそれらの任意の組合わせ）、制御回路、カメラなどの、もっと大きな装置内のコンポーネントであり得る。
【００２５】
並列マシン（例えば、ＦＳＭエンジン、ＰＲＰ、または同類のもの）は、状態機械を実装できる。状態機械は、有向グラフとして表すことができる。図４は、ワード「ＤＯＧ」内で見つかる文字のシーケンスを表す単純な状態機械図１５０を示す。状態１５２は、状態機械図１５０に対する入力状態である。状態１５４は、中間状態である。図４では、最終状態１５６（時々、終端状態とも呼ばれる）は、「Ｇ」状態の周囲の点線の境界によって識別される。一般的な場合には、最終状態に達すると、何らかのメカニズムを通して一致条件が示される。この一致条件は、並列マシン１００（例えば、ＦＳＭエンジン１２、ＰＲＰ  ３２）からの明示的な信号によって表され得るか、または２進ワードとしてコード化され、メモリレジスタに格納され得る。
【００２６】
状態機械のサイズには理論的限界がない。一般的な場合、ＰＲＰまたはＦＳＭエンジンは、ＰＲＰまたはＦＳＭエンジンによって検出できる各特定シーケンスのシンボルに対して別個の状態機械を実装し得る。所望であれば、重複（共通パス）を除外するために、例えば、状態機械を組み合わせてもっと大きな実装にするか、または特定の状態機械実装のサイズを最小化するなど、状態機械に対して最適化を実行することができる。かかる最適化は、状態機械実装の統合サイズを削減し、従って、例えば、状態機械エンジンが状態機械を実装する。この最適化が完了すると、単一の大規模な状態機械が実装され得る。
【００２７】
図５は、大規模な状態機械図２００を示す。一般的な場合、状態機械の実装は、前方および後方の両方で、複雑な結合を有し得る。図５に示す例では、１つの入力状態２０２が、２つの中間状態２０４を供給する。かかる状態機械では、多数の最終状態２０８および多数の他の中間状態２０４があり得る。
【００２８】
状態機械内の各状態は、その状態がアクティブか否かを示す瞬間状態を有する。アクティブな状態のみが入力シンボルに反応することができる。一実施形態では、入力シンボルが入力バス３６上で受信されると、状態機械内の各アクティブな状態は、アクティブ化信号を生成すべきかを決定するためにそのシンボルを分析する。このアクティブ化信号は、シーケンス内の次の状態をアクティブにするために使用される。例えば、文字「ｂ」を指定する第１の状態２０４は、第１のノード２０４がアクティブであり、文字「ｂ」が入力データとして受信される場合、入力文字「ｂ」上で、遷移２０６によって第１の状態２０４に結合された、第２の状態２０４をアクティブにする。
【００２９】
略図２００では、入力状態２０２が最初にアクティブにでき、入力データが入力ノード２０２からの遷移２０６に一致する場合、下流の状態２０４をアクティブにできる。略図２００全体に渡って、状態２０４、２０８は、入力データが受信されると、このようにアクティブにできる。アクティブにされた最終状態２０８は、入力データによる対象のシーケンスの一致に対応する。その結果、最終状態２０８のアクティブ化は、対象のシーケンスが入力データで受信されていることを示す。パターン認識機能を実装する有限状態機械エンジン１００のコンテキストでは、最終状態２０８のアクティブ化は、対象の特定パターンが入力データ上で検出されていることを示すことができる。
【００３０】
一例では、各中間状態２０４および最終状態２０８は、有限状態機械エンジン１００内の汎用要素１０２に対応できる。各遷移２０６は、汎用要素１０２間の接続に対応できる。従って、別の中間状態２０４または最終状態２０８に遷移する（例えば、それらに接続している遷移２０６を有する）中間状態２０４は、別の汎用要素１０２に結合できる汎用要素１０２に対応する。いくつかの特別な場合には、開始状態２０２は、必ずしも対応する汎用要素１０２を有し得ない。
【００３１】
有限状態機械エンジン１００がＦＳＭを実装するようにプログラムされている場合、汎用要素１０２の各々は、アクティブまたは非アクティブ状態のいずれかであり得る。非アクティブな汎用要素１０２は、入力インタフェース１１０においてデータストリームに反応しない。アクティブな汎用要素１０２は、入力インタフェース１１０においてデータストリームに反応することができ、入力データストリームが汎用要素１０２の設定と一致する場合、下流の汎用要素１０２をアクティブ化できる。汎用要素１０２が最終状態２０８に対応する場合、汎用要素１０２は、外部装置に対して一致の表示を提供するために、出力ポート１１４に結合でき、その外部装置は、いくつかの場合には、別の有限状態機械エンジン１００であり得る。
【００３２】
プログラミングインタフェース１１１を介して有限状態機械エンジン１００上にロードされたイメージが、所望のＦＳＭが入力インタフェース１１０でのデータストリームに対する応答に基づき、下流の状態のアクティブ化を通して実装できるように、汎用要素１０２および汎用要素１０２間の接続を構成できる。一例では、汎用要素１０２は、単一のデータサイクル（例えば、単一の文字、文字セット、単一のクロックサイクル）の間アクティブのままであり、次いで、上流の汎用要素１０２によって再アクティブ化されない限り非アクティブへ切り替えられる。
【００３３】
最終状態２０８は、過去のイベントの圧縮した履歴を格納すると考えることができる。例えば、最終状態２０８をアクティブ化するために必要な入力データの１つまたは複数のシーケンスは、その最終状態２０８のアクティブ化によって表すことができる。一例では、最終状態２０８によって提供された出力は２進であり、すなわち、出力は、対応する対象のシーケンスが一致しているか否かを示す。ＦＳＭ内にける最終状態２０８の中間状態２０４に対する比は、極めて小さい可能性がある。言い換えれば、ＦＳＭ内には高い複雑性があり得るが、ＦＳＭの出力は、比較すると小さい可能性がある。
【００３４】
ＦＳＭエンジンが単一の結合（最適化）した状態機械を実装するか、または多数の独立した状態機械を実装するかにかかわらず、状態ベクトルの概念が存在する。状態ベクトルは、実装した状態機械内の個々の状態と、ベクトル内の個々の桁（例えば、ビット）位置との間に１対１対応を有する一次元ベクトルである。すなわち、状態機械内の各状態は、状態ベクトル内の桁に対応する。図４の場合、状態ベクトルは３ビット幅（１ビットが、状態１５２、１５４、および１５６の各々の状態を示す）である。図５の場合、状態ベクトルは７４ビット幅である。状態機械は、任意に複雑であり得、それ故、理論上は、機械の全体サイズに関する制限がない。その結果として、状態ベクトルは無限に長い可能性がある。
【００３５】
しかし、並列マシンで実際の状態機械を実装するためには、通常、状態機械のサイズに何らかの有限制限が設けられる。この制限は厳密には定義されず、状態機械の実装に使用される並列マシンの特性に基づいて決定できる。
【００３６】
別のＨＦＳＭ  ４００を図６に示す。図６に示すＨＦＳＭ  ４００では、３つの有限状態機械エンジン４０２がそれらそれぞれの状態に関連する情報を、それらそれぞれ全ての状態ベクトル桁の全部または一部を使用して、１つの有限状態機械エンジン４０４に提供する。示す例では、各状態機械エンジン（４０２、４０４）は、そのそれぞれのプログラミングインタフェース（ＰＲＯＧ）を介してプログラムされる。他の実施形態では、ＦＳＭエンジンの各々からのデータがＦＳＭエンジン４０４をプログラムするために使用される。いくつかのかかる実施形態では、ＦＳＭエンジン４０４は、ＦＳＭエンジン４０２から受信した状態情報に適合するように設計される。
【００３７】
もっと複雑なＨＦＳＭ  ５００を図７に示す。図７のＨＦＳＭ  ５００では、複数のＦＳＭエンジン５０２、５０４、５０６、５０８が一緒に接続されて、ＦＳＭエンジン５０２がバス５１０を介してＦＳＭエンジン５０４に状態情報を提供（例えば、供給）し、ＦＳＭエンジン５０４がバス５１２を介してＦＳＭエンジン５０６に状態情報を供給し、そして、ＦＳＭエンジン５０６がバス５１４を介してＦＳＭエンジン５０８に状態情報を供給する。複数のＦＳＭレベル５０２〜５０８のこの接続では、階層の各レベルが異なる状態機械の実装を可能にする。いくつかのＨＦＳＭ例では、階層の各レベルは、異なるタイプのパターンを感知できる。これらのＨＦＳＭ例では、ＨＦＳＭ  ５００にあるように、階層レベルのこの分離により、ＨＦＳＭが、より高レベルの認識を達成するために、階層の様々なレベルを通過する低レベル認識を実装できるようにする。一例では、結果が、例えば、特定パターン（例えば、フレーズ）の識別など、ＨＦＳＭ  ５００の結果バス５１６上に提供される。他の例では、結果はＦＳＭエンジン５０２、５０４、５０６、および５０８の１つまたは複数からの状態ビットの組合わせである。
【００３８】
図７に示すように、個々のＦＳＭエンジンを階層的な方法で接続するための１つのアプローチは、１つのＦＳＭエンジンの出力を階層内で次に高いレベルのＦＳＭエンジンの入力に接続することである。ＨＦＳＭ  ５００は、１つのレベルからの状態情報が階層内の任意の他のレベルに提供（例えば、前方または後方へ供給）されるように実装され得ることを理解すべきである。例えば、ＦＳＭエンジン５０２からの状態情報は、ＦＳＭエンジン５０６に送信され得、他方、ＦＳＭエンジン５０８からの状態情報は、ＦＳＭエンジン５０２にフィードバックされ得る。大まかに言えば、１つまたは複数のＦＳＭエンジンからの状態情報が、必要であると考えられるどんな構成であっても、１つまたは複数（例えば、全部）の他のＦＳＭエンジンに提供できる。
【００３９】
図７に示す例は、書かれた言語の視覚的識別に対応する。処理が階層の高いレベルに進むにつれて、データストリームの蓄積された知識がそれに応じて増大する。例示した実施形態では、各レベルのＦＳＭエンジン（ＦＳＭエンジン５０２、５０４、５０６および５０８）が、階層的認識機能を達成するために、カスケード接続されている。階層の各連続したレベルは、前のレベルの出力に適用される新しい規則（パターンシグネチャ）を実装できる。このようにして、非常に詳細なオブジェクトが、ごく根本的な基本情報の検出に基づいて識別できる。
【００４０】
例えば、レベル１（例えば、第１のＦＳＭエンジン５０２）への生データ入力ストリームは、イメージに対するピクセル情報（例えば、所与のビットが黒／白またはオン／オフ）を含むことができる。ＦＳＭエンジン５０２は、ビットで形成された基本パターンを認識（例えば、識別）するようにプログラムできる。一例では、ＦＳＭエンジン５０２は、隣接したビットのグループが、縦線、横線、円弧などを形成する場合を識別するように構成される。これらのパターンの各々は、ＦＳＭエンジン５０２からの別個の出力ビット（または信号）によって識別できる。例えば、ＦＳＭエンジン５０２が、少なくとも３ビットの縦線を認識すると、高信号（例えば、論理的１）が、ＦＳＭエンジン５０４への出力ワードの第１ビット上に送信できる。ＦＳＭエンジン５０２が、少なくとも３ビットの横線を認識すると、高信号が、ＦＳＭエンジン５０４への出力ワードの第２ビット上に送信できる。
【００４１】
ＦＳＭエンジン５０４は、その一方で、ＦＳＭエンジン５０２からの出力５１０によって形成されたパターンを識別するようにプログラムできる。例えば、ＦＳＭエンジン５０４は、ＦＳＭエンジン５０２によって識別された基本パターン（例えば、線、円弧など）の組合わせによって形成されたパターンを識別するようにプログラムできる。ＦＳＭエンジン５０４は、例えば、横線と縦線が交差して文字「ｔ」を形成している場合を識別するようにプログラムできる。前述したように、ＦＳＭエンジン５０４を用いて実装されたＨＦＳＭ  ５００は、ＦＳＭエンジン５０２からの出力に反応する。従って、基本パターンの組合わせは、ＦＳＭエンジン５０２からの出力ビット内のパターンを識別することによって識別される。
【００４２】
ＦＳＭエンジン５０４からの出力５１２は、次いで、ＦＳＭエンジン５０６への入力であり、それは、ＦＳＭエンジン５０４によって識別された文字の組合わせからワードを識別できる。第４のレベル（ＦＳＭエンジン５０８）は、次いで、ＦＳＭエンジン５０６によって識別されたワードによって形成されたフレーズを識別できる。それに応じて、より低レベルの出力内のパターンを識別するように高レベルがプログラムできる。その結果、より高レベル内で識別されたパターンを構成するコンポーネントを識別するように低レベルがプログラムできる（低レベルへのフィードバック）。
【００４３】
文字の視覚的識別が一例として使用される。しかし、本明細書で説明する階層的方法およびシステムは、他のデータに適用できる。例えば、音声に対応するデータの階層的処理は、レベル１において音素の組合わせから音節を、およびレベル２において音節の組合わせからワードを識別できる。他の例では、階層的処理は、自身を階層的方法で構築する機械データに適用できる。
【００４４】
ＨＰＲＰまたは、ＨＦＳＭ  ５００などのＨＦＳＭを実装する際に、遭遇する可能性のある１つの問題は、入力データと出力データとの間の非対称関係である。この非対称は、実装されている状態機械が十分に大規模になると、悪化する。処理される各入力シンボルに対して、ＦＳＭエンジンの状態ベクトルが、入力シンボルに応答して変わり得る。一実施形態では、各ＦＳＭは、例えば、最大で２の１６乗（６４Ｋ）の状態を含む。各状態が状態ベクトル内の対応する桁を有する場合、状態ベクトルは６４Ｋビット長である。その長さのベクトルをＦＳＭエンジン間で渡すのは困難であり得る。入力データのサイズと出力データのサイズとの間でこの非対称を削減する方法について、次で説明する。
【００４５】
一実施形態では、データは、バス上のＦＳＭエンジン間で送信される。Ｎビット幅のバスは、６４Ｋｂ状態ベクトルを６４Ｋｂ／Ｎサイクルで渡すことができる。他の実施形態では、状態ベクトルは、入力シンボルに応答して変わるベクトル内の数字のみが他のＦＳＭエンジンに伝搬するように、圧縮される。例えば、各バスサイクルは、以前のシンボルサイクルで変わった状態ベクトル内の数字の位置を含み得る。この場合、出力は差分ベクトルと呼ぶことができる。
【００４６】
さらに別の実施形態では、各ＦＳＭエンジンが状態ベクトルから数字のサブセットのみを他のＦＳＭエンジンに送信するように設計される。かかる一実施形態では、各ＦＳＭエンジンは、他のＦＳＭエンジンに渡された状態情報のみが最終状態の情報であるようにプログラムされる。一般的な場合、最終状態の数は、状態の総数よりも少ない。ＰＲＰ  ３２における最終状態の全体の状態に対する比は、例えば、ＰＲＰで実装される状態機械によって決まる。比率は、例えば、高い（１：５）か、またはかなり低い（１：１０，０００）可能性がある。
【００４７】
最終状態の全体の状態に対する比が１：１０であり、かつ状態ベクトルが６４Ｋｂである実施例では、これは、出力ベクトルが６４Ｋｂ／１０つまり６，５５４ビットであることを意味する。この例では、ＰＲＰ（８ビットシンボル）のすべての入力サイクルが、対応する６，５４４ビットの出力ベクトルを生成するであろう。
【００４８】
例を進めるため、ＡＳＣＩＩ文字セットが入力（シンボル）言語である例を使用する。この場合、各入力シンボルは、８ビットの２進ワードによって表される。代替実施形態では、各入力シンボルがＮビットの２進ワードであるなど、他のシンボルが使用できる。
【００４９】
例えば、一実施形態では、図２に示すような、ＨＰＲＰ  ３０内の第２のレベルのＰＲＰ  ３２に送信された出力ベクトルは、第１のレベルのＰＲＰ  ３２の最終状態のみを表し得る。別の例では、図７に示すような、ＨＦＳＭ  ５００では、ＦＳＭエンジン５０４は、その最終状態を表す出力ベクトルを生成し、その出力ベクトルを出力バス５１４上のＦＳＭエンジン５０６に送信できる。かかる一例では、出力バス５１４は、８ビット幅のバスである。前の例から引用した８：６，５５４の比を使用すると、６，５５４ビットの出力ベクトルを提供する（転送する）ために必要なサイクル数は、６，５５４／８つまり８２０サイクルであろう。すなわち、階層の各連続したレベルは、前のレベルからの出力ワードを処理するために、８２０入力サイクルを必要とするであろう。この効果は、階層に直線的に波及し、そのため、各連続した状態は、その入力ワードを解決するために８２０入力サイクルを必要とする。この場合、所与の比率では、ＰＲＰの６レベル階層は、入力シンボルが、最高レベルで結果が生成されるまで、波及できるようにするため、４，１００（５×８２０）入力サイクルを必要とするであろう。これらの数は、例として役立つだけである。最終状態の全体の状態に対する比が増加すると、波及時間が増加する。同様に、階層のレベル数が増加すると、波及時間が、各連続したレベルに対して直線的に増加する。
【００５０】
上で使用した例に基づき、ＨＦＳＭまたはＨＰＲＰが結果を生じるために、数桁分の（入力サイクルに対して）遅延があり得る。このタイプの遅延は、リアルタイムアプリケーションにおいて許容できない。前述したように、例えば、バスのサイズを増やすことにより、状態情報の転送に必要なサイクル数を削減できる。状態情報の転送に必要な時間を削減するために、バスサイクル時間も削減できる。さらに、前述したように、最後のシンボルの結果として変わった状態ベクトルの数字のみを識別する差分ベクトルを送信できる。他の無損失圧縮メカニズムも同様に使用できる。
【００５１】
入力と出力との間に１：１関係を実装するなど、この遅延を減らすための他の方法について、次で説明する。
【００５２】
ＨＦＳＭ  ５００などのＨＦＳＭにおいて、入力と出力との間に１：１関係を得るための１つの方法は、サイズ（幅）の等しい入力バス５１８および出力バス５１０を作成することである。出力バス５1０の幅は、ＨＦＳＭ  ５００自体によって決定できる。例えば、出力バス５１０のサイズは、状態機械エンジン５０２内の最終状態の数によって決定され得る。一般的に言えば、ＦＳＭエンジンは、多数の異なるパターンを一度に認識するようにプログラムされる。これらパターンの各々は、個々の状態機械として実装され得る。このようにして、ＦＳＭエンジンは、全て並行して実行する、状態機械のセットを実装し得る。
【００５３】
図８は、単一のＦＳＭエンジン内で全て並行して実行する、状態機械５３２のグループ５３０の例を示す。図８では、８つの状態機械５３２が示されている。実際には、ＦＳＭエンジンは、何千もの別個の状態機械を実装し得る。
【００５４】
〔ステップ１：状態機械出力（最終状態）の統合〕
図９に示すように、各個々の状態機械５３２は、１つまたは複数の最終状態２０８を有し得る。いくつかの最終状態２０８があり得るが、特定の状態機械５３２のいずれの最終状態も同じか、または関連した意味を有する。これを言うもう１つの方法は、状態機械のいずれかの最終状態２０８に達する場合、状態機械５３２は一致を有すると考えられる。有効に、これは、単一の状態機械５３２の最終状態２０８が、図９に示すような単一の出力５４２を提供するために、最終状態に対応するプログラム可能要素の出力を連結するためにＯＲゲート５４０を使用することなどにより、統合され得る（例えば、共にＯＲされる）ことを意味する。図９に示す例では、状態機械５３２は、３つの最終状態２０８を共にＯＲする。理解され得るように、最終状態２０８を統合するために、他の論理が使用できる。
【００５５】
一例では、各状態機械５３２の最終状態２０８が統合され（例えば、ＯＲされ）て、結果がＮ個の状態機械５３２の論理グループに分類（例えば、収集）され、ここで、Ｎは、それぞれの入力シンボル言語内の桁数に等しい。第１レベルの入力シンボル言語が８ビット入力ワードを含む例では、８つの個々の状態機械出力５４２が、階層の次のレベルに提供される入力シンボル５４６の１つを提供するために、統合され得る。図７では、例えば、階層の第１レベルのみが、標準語（ＡＳＣＩＩまたはその他）と相関する入力シンボルを受信する。その例では、次いで、ＦＳＭエンジン５０２が出力バス５１０上のＦＳＭエンジン５０４に提供される８ビットの出力ベクトルを生成し得る。階層の次のレベルが、前のレベルによって決定される意味を有する入力シンボルを受信する。
【００５６】
８のセットにおけるように、状態機械がグループ化されると、入力および出力ベクトルを正規化する第１レベルが完了している。本開示で使用する例からの数を使用すると、８２０の最終状態が１０３の８ビットワードで表すことができる。これらの８ビットワードの各々が、８つの個々の状態機械５３２に対して最終状態の状況をコード化する。この８ビットの出力ベクトルでコード化された最終状態の総数は、８よりもはるかに多いことを心に留めておかれたい。これは、同じ状態機械５３２内で最終状態２０８に関して実行されたＯＲする関数が、９以上の状態を一緒にＯＲし得るからである。
【００５７】
一実施形態では、各ＦＳＭエンジンは、Ｎビット幅の入力ポートおよびＮビット幅の出力ポートを含む。一実施形態では、各レベルからの状態情報（例えば、状態ベクトルの全部もしくは一部、または異なるベクトルなど、出力ベクトルの形式で）は、Ｎビットバスを経由して次のＦＳＭエンジンに配信される。例えば、ＦＳＭエンジン５０２は、状態情報を、Ｎビットの出力バス５１０を用いて、ＦＳＭエンジン５０４に配信する。一実施形態では、同じＮビットの出力ベクトルが、ＦＳＭエンジン５０４内の各状態機械に提供（例えば、配信）される。別の実施形態では、ＦＳＭエンジン５０４内のプログラム可能要素がグループ（例えば、ブロック）に分類され、ＦＳＭエンジン５０２の出力ポートがＮビットワードのシーケンスをＦＳＭエンジン５０４に書き込み、そのワードのシーケンスがＦＳＭエンジン５０４内の状態機械要素のブロックに事前定義した方法（連続してなど）で配信される。かかるアプローチは、追加の状態情報をＦＳＭエンジン５０４に配信できるようにするが、完全な状態情報を転送するための追加のバスサイクルを必要とする。
【００５８】
一実施形態では、プログラム可能要素の１つのグループに対する状態情報が、ＦＳＭエンジンの表示およびＦＳＭエンジン内のグループのアドレスを含むアドレス情報を送信することにより、別のＦＳＭエンジン内のプログラム可能要素のグループに送信される。その情報は、例えば、図７のバス５１０上に配信され得る。
【００５９】
〔ステップ２：ＰＲＰ上の入力バスの数の拡大〕
ＦＳＭ  １２またはＰＲＰ  ３２の一実施態様は、入力シンボルを、ＰＲＰ内で実装された全ての状態機械５３２に一斉送信する単一のストリーム入力を有する。しかし、ＦＳＭ  １２およびＰＲＰ  ３２の定義は、２つ以上のストリーム入力（それぞれ、１６および３６）を実装するように拡張され得る。前述の例では、独立したストリーム入力の総数は１０３に等しい。完全に実装するため、例えば、ＨＰＲＰは、次いで、各ＰＲＰ  ３２に対して、１０３の８ビット入力または８２０ビットの入力バスを必要とする。
【００６０】
一実施形態では、ＦＳＭ  １２またはＰＲＰ  ３２は、状態機械要素（ＳＭＥ）など、プログラム可能要素の配列５６０上で実装される。一例では、各ＳＭＥは、同種の二次元配列５６０内にある。この配列５６０は、各領域がそれ自身の専用ストリーム入力（それぞれ、１６および３６）を有する、個々の領域に細分され得る。図１１は、ＳＭＥ要素のかかる二次元配列５６０を示す。図１１は、ＳＭＥグループ５６２の配列５６０に細分され、ＳＭＥの各グループ５６２は、例えば、有限状態機械エンジン８００内のブロック８０２に対応し得る。全体の配列５６０は、例えば、１６×１６のＳＭＥグループ（全部で２５６グループ）を含み、各グループ５６２は２つのＳＭＥ（ＧＯＴ）の１２８グループを含む（例えば、各グループ５６２は、図１６に示す行８０６など、１６行のＧＯＴを含む）。
【００６１】
いくつかの実施形態では、ＧＯＴの各行は８つのＧＯＴ、追加のプログラム可能要素（例えば、ブール論理またはカウンタ）を含み、２つの出力を出力バス１８、３８に提供できる。利用可能な全ての出力がＦＳＭ  １２およびＰＲＰ  ３２にわたって使用される場合、かかる配列は、例えば、次のレベルＰＲＰ  ３２まで進めるために、最大で８１９２ビットを有し得る。
【００６２】
ＨＦＳＭ  ５００が図７に示すように構築される場合、ＦＳＭエンジン５０２および５０４などの、２つの異なる半導体素子内のＳＭＥグループ５６２の二次元配列は、一緒に接続され得る。２つの半導体素子を一緒に接続する様々な手段がある。入出力カウントが十分に高くなる場合、例えば、ダイ間相互接続が利用され得る。図１２に示すような、一実施態様例では、ＨＰＲＰ  ５７０内の２５６個のＳＭＥグループ５６２のうちの各１つが、ダイの底面上の８ビットインタフェース（例えば、入力バス３６、４２）およびダイの上の８ビットインタフェース（例えば、出力バス３８、４０）を持ち得る。これらのインタフェースが事前定義した位置に配置されると、ＰＲＰ５８２の１レベル（ＰＲＰ１）を、低いレベルのＰＲＰ（ＰＲＰ０）の上に直接、積み重ねることができ、入力および出力インタフェースが自然に位置合わせされ、相互接続５７４などの相互接続（例えば、貫通シリコンビア）を使用して接続される。
【００６３】
この位置合わせは、列の各レベルが同じダイ上に含まれるＳＭＥのグループを表す、
ＳＭＥ列（入力パス５７２、出力パス５７８、ならびに相互接続５７４および５７６によって定義される）の概念を有効に作成する。前述した数の例を継続して使用すると、各ＰＲＰレベル（５８０、５８２および５８４）上で、ＳＭＥグループ５６２は、前のレベル上で実装された最大８つの状態機械によって進められ得る。前のレベルからの８つの状態機械は、ＳＭＥグループ５６２によって課される制限まで任意に複雑であり得る。図１２は、ＳＭＥ列のうちの１つを強調表示した、３レベルのＨＰＲＰ（側面図）の例を示す。各レベルでは、ＳＭＥのグループ化により、そのレベル（例えば、コード化した８ビットワード）から次に高いレベルへ状態情報を提供する。
【００６４】
全体としては、このように構成された場合、ＨＰＲＰは、ＰＲＰ階層の各レベルに対して、１つの入力クロックサイクルのみの遅延で、実質的に瞬間的な結果を提供できる。入力および出力ワードの非対称性によってもたらされる問題が解決され、全体の階層は、ストリーム入力５７２と同期して動作し得る。
【００６５】
ある実施形態では、１つのＦＳＭエンジン１２からの状態情報が、２つ以上の他のＦＳＭエンジン１２に送信される。かかる実施形態を図６に示す。かかる実施形態を、例えば、図１２に示すＨＰＲＰ  ５７０を参照して説明すると、ＰＲＰ  ５８０からの状態情報は、ＰＲＰ  ５８４に送信できる。かかる一実施形態では、相互接続５７６および５７４は、状態情報を列内の任意のブロックに伝送するバスを形成する。例えば、相互接続５７４および５７６は、１つまたは複数の貫通ビア相互接続を含み得、状態情報を非隣接のＰＲＰに渡すために、各列内に提供できる。かかる一実施形態では、スタック内の各ＰＲＰが貫通ビアに接続され、そこから情報を受信する。別の実施形態では、ＰＲＰの入力が、製造プロセス中に随時、貫通ビアに選択的に接続される。
【００６６】
他の実施形態では、ＳＭＥの１つのグループからの状態情報が、同じＰＲＰ  ３２内の隣接するブロックに、そして、それらのブロックを通して他のＰＲＰ  ３２（例えば、同じブロック列内の）に配信される。
【００６７】
一実施形態では、１つもしくは複数のＰＲＰ  ３２からの状態情報、またはその状態情報から引き出された情報が、階層内の他のＰＲＰ  ３２を再プログラムするために使用される。図１３は、階層の部分を再プログラムするためにフィードバックを使用する４レベル階層の例を示す。一般に、所与のＰＲＰ  ３２（例えば、第１の有限状態機械エンジン６０２）は、高いか、もしくは低いレベルの有限状態機械エンジンからの出力に基づいて、またはそれ自身の出力に基づいて、再プログラムできる。従って、第１の有限状態機械エンジン６０２は、ランタイム中に変化する状態に適合するように変えることができる。一例では、フィードバックは、より高いレベルに基づいて学習（再プログラム）するために、低いレベルに対して使用できる。例として有限状態機械エンジン６０２を用いると、フィードバックは、プログラミングインタフェース６０２Ｂで受信でき、有限状態機械エンジン６０２に対して、新規または更新されたプログラムの形式であり得る。一例では、更新されたプログラムは、有限状態機械エンジン６０２の一部または全てを再プログラムできる。
【００６８】
図１３に示す４レベル階層６００は、４つの有限状態機械エンジン６０２、６０４、６０６、６０８で実装され、その各々が入力ポート６０２Ａ、６０４Ａ、６０６Ａ、６０８Ａ、プログラミングインタフェース６０２Ｂ、６０４Ｂ、６０６Ｃ、６０８Ｂ、および出力ポート６０２Ｃ、６０４Ｃ、６０６Ｃ、６０８Ｃを有する。第１の有限状態機械エンジン６０２は、階層６００の第１のレベルを実装し、階層６００の第２のレベルを実装する第２の有限状態機械エンジン６０４に出力を提供する。第３および第４の有限状態機械エンジン６０６、６０８は同様に、階層６００の第３および第４のレベルを実装する。一例では、第４の有限状態機械エンジン６０８からの出力が、第１の有限状態機械エンジン６０２によって受信された入力データに関する階層６００の分析に基づき、階層６００の出力として外部装置に送信される。その結果、第４の有限状態機械エンジン６０８からの出力が、階層６００に対する集合的な出力に対応する。他の例では、有限状態機械エンジン６０２、６０４、または６０６のうちの他のものからの出力が、階層６００に対する集合的な出力に対応し得る。
【００６９】
第２、第３および第４の有限状態機械エンジン６０４、６０６、６０８からの出力は各々、下のレベルで、有限状態機械エンジン６０２、６０４、６０６のプログラミングインタフェース６０２Ｂ、６０４Ｂ、６０６Ｂに対してフィードバックできる。例えば、第４の有限状態機械エンジン６０８からの出力が、第３の有限状態機械エンジン６０６のプログラミングインタフェース６０６Ｂに対してフィードバックされる。第３の有限状態機械エンジン６０６は、それ故、第４の有限状態機械エンジン６０８からの出力に基づいて再プログラムできる。その結果、第３の有限状態機械エンジン６０６は、ランタイム中にそのプログラムを修正できる。第１および第２の有限状態機械エンジン６０２、６０４は、同様に、それぞれ第２および第３の有限状態機械エンジン６０４、６０６からの出力に基づいて、ランタイム中に再プログラムできる。
【００７０】
一例では、有限状態機械エンジン６０４、６０６、６０８からの出力からのフィードバックが、有限状態機械エンジン６０２、６０４、６０６を再プログラムするためのプログラムを形成するために処理（例えば、分析およびコンパイル）される。例えば、有限状態機械エンジン６０８からの出力が、プログラミングインタフェース６０６Ｂに送信される前に、処理装置６１４によって分析およびコンパイルされ得る。処理装置６１４は、有限状態機械エンジン６０８からの出力に基づき、有限状態機械エンジン６０６に対して更新されたプログラムを生成できる。処理装置６１４は、出力を分析し、更新されたプログラムを第３の有限状態機械エンジン６０６用にコンパイルできる。更新されたプログラムは、次いで、第３の有限状態機械エンジン６０６を再プログラムするために、プログラミングインタフェース６０６Ｂを介して、第３の有限状態機械エンジン６０６上にロードできる。一例では、更新されたプログラムは、現在のプログラムからの部分的変更のみを含み得る。従って、一例では、更新されたプログラムは、有限状態機械エンジン６０２、６０４、６０６、６０８上で現在のプログラムの一部のみを置き換える。別の例では、更新されたプログラムは、現在のプログラムの全てまたは大部分を置き換える。同様に、処理装置６１０、６１２は、第２および第３の有限状態機械エンジン６０４、６０６からの出力に基づき、同様な方法で、フィードバックを分析およびコンパイルすることができる。処理装置６１０、６１２、６１４は、１つもしくは複数の追加の有限状態機械エンジンで実装できるか、または、異なるタイプの機械（例えば、フォンノイマンアーキテクチャを有するコンピュータ）で実装できる。
【００７１】
いくつかの例では、処理装置６１０、６１２、６１４は、新しいプログラムをコンパイルする前に、高いレベルからの出力を分析する。一例では、処理装置６１０、６１２、６１４は、出力を分析して低いレベルのプログラムをどのように更新するかを決定し、次いで、新規または分析に基づいて更新した低いレベルのプログラムをコンパイルする。階層６００では、所与の有限状態機械エンジンでのフィードバックが、所与の有限状態機械エンジンの真上にあるレベルから受信されるが、フィードバックは、任意のレベルの有限状態機械エンジンから、高いか、低いか、または同じレベルの別の有限状態機械エンジンへのものであり得る。例えば、フィードバックは、有限状態機械エンジンのプログラミング入力において、その同じ有限状態機械エンジンの出力から、または、同じか、高いか、もしくは低いレベルの別の有限状態機械エンジンの出力から受信され得る。さらに、有限状態機械エンジンは、複数の異なる有限状態機械エンジンからフィードバックを受信できる。フィードバックに基づく有限状態機械エンジンの再プログラミングは、入力データ内のパターンの識別からやがて切り離され得る（例えば、生データの処理と一緒のリアルタイムでなく）。
【００７２】
低いレベルの再プログラミングに影響を及ぼすために情報を階層の下に送り返す目的は、低いレベルが、対象のパターンをもっと効率良く識別でき得るようにすることであり得る。いくつかの例では、情報を高いレベルへ送信するプロセスは、情報を階層の高いレベルへ転送するには時間がかかることを認識して、可能であれば回避される。いくつかの例では、高いレベルは、本質的に、システムにとって新しいパターンの識別を解決するために使用できる。これは、生物学的な脳の新皮質で起こるプロセスで使用されるものと類似し得る。一例では、パターンが低いレベルで完全に解決できる場合は、そうすべきである。フィードバックのメカニズムは、「学習」を階層の低いレベルに転送する１つの方法である。情報を階層の下に押し戻すこのプロセスは、新しいか、または良く知らないパターンを処理するために、階層の上位を保持するのに役に立つ。その上、認識プロセス全体は、階層の様々なレベルを通るデータ転送量を削減することによって、加速できる。
【００７３】
フィードバックは、階層の低いレベルが、入力におけるデータストリームをもっと敏感に検知できるようにし得る。情報のこの「押し戻し」の結果は、判断が階層の低いレベルで行われ得、かつ、非常に迅速に行われ得ることである。その結果、一例では、低いレベルの有限状態機械エンジン（例えば、第１の有限状態機械エンジン６０２）からの出力が、第４の有限状態機械エンジン６０８からの出力と共に、階層６００から別の装置への集合的な出力に対応できる。外部装置は、例えば、パターンが階層６００によっていつ識別されたかを判断するために、これらの有限状態機械エンジン６０２、６０８の各々からの出力をモニタリングできる。
【００７４】
一例では、フィードバック情報は、分析したデータストリームに対応する識別情報を含むことができる。例えば、識別情報は、データの識別特性、データのフォーマット、データのプロトコル、および／または他のタイプの識別情報を含むことができる。識別情報は、例えば、処理装置６１０により、入力データに対する分析方法を適合させるために、収集、分析、および使用され得る。有限状態機械エンジンは、次いで、その適合した分析方法でプログラムされ得る。識別情報は、例えば、入力データの言語を含むことができる。有限状態機械エンジンは、入力データの言語を決定するために最初にプログラムでき、そして、言語が入力に対応して識別されると、ランタイム中に適合（例えば、再プログラム）され得る。有限状態機械エンジンに対する適合した分析方法は、識別した言語に対する分析方法にもっと明確に対応できる。最後に、有限状態機械エンジンは、適合した分析方法を用いて、将来の入力データを分析し得る。フィードバックプロセスは、分析方法の将来の適合を可能にするため、追加の識別情報が入力データ内で見つかり得るように、反復的であり得る。
【００７５】
有限状態機械エンジン上にロードするためのプログラム（本明細書では「イメージ」とも呼ぶ）は、図１９に関して以下で説明するように、コンパイラによって生成できる。一般に、コンパイルは、計算的に集中的なプロセスであり、パターンシグネチャの大規模なデータベースを初めてコンパイルする際に最も顕著であり得る。ランタイム操作では、高いレベルの有限状態機械エンジンは、低いレベルの有限状態機械エンジンに対する増分プログラム更新の形で、フィードバックを低いレベルに提供することができる。従って、低いレベルの有限状態機械エンジンに対するフィードバック情報は、コンパイルするのに計算的にそれほど集中的でない、元のプログラムに対するかなり小さい増分更新であり得る。
【００７６】
図１４は、４つの有限状態機械エンジン７０２、７０４、７０６、７０８で実装された４レベル階層７００の別の例を示す。ここでは、第２、第３、および第４のレベルの有限状態機械エンジン７０４、７０６、７０８が、生データストリームのみならず、低いレベルからの入力を受信する。それに応じて、レベル２、３、および４は、低いレベルからのパターンと生データとの組合わせからのパターンを識別できる。
【００７７】
図１３および図１４から分かるように、有限状態機械エンジンは、階層に対する生データ入力が、有限状態機械エンジンからの出力と同様に、自身を含めて、任意の他の有限状態機械エンジンに送信できる、ほぼいかなる方法でも、カスケード接続できる。さらに、所与の有限状態機械エンジンからの出力が、入力データとして、および／または有限状態機械エンジンに対するプログラムを更新するためのフィードバックとして、別の有限状態機械エンジンに送信できる。
【００７８】
上で述べたように、有限状態機械エンジンが入力データストリームの１ビット（またはワード）を処理する時間に起因して、有限状態機械エンジンを順番にカスケード接続すると、全ての有限状態機械エンジンを通って、入力データストリームを完全に処理する時間が増加し得る。階層の最も低いレベルは、しばしば、最も低い（最も粒度の大きい）レベルの入力を受信する。その結果、低いレベルは、高いレベルの出力よりもアクティブであると期待されるはずである。すなわち、階層内の各連続するレベルは、より高いレベルのオブジェクトを組み立てることができる。一例では、有限状態機械エンジンは、入力データがその有限状態機械エンジンに対してどれくらい速く供給できるかを制限する最大入力レートを有する。この入力レートは、単一のデータサイクルと考えることができる。各連続するデータサイクルにおいて、有限状態機械エンジンは、多数の最終状態をアクティブ化する潜在能力を有する。これは、（特に、階層の最も低いレベルで）有限状態機械エンジンに相当量の出力（一致）データを生成させ得る。例えば、入力がバイトのストリームとして最も低いレベルの有限状態機械エンジンに提供される場合、任意の所与のデータサイクルについて、有限状態機械エンジンが複数バイトの状態情報を生成することが可能になり得る。１バイトの情報が複数バイトの状態情報を生成できる場合、有限状態機械エンジンの階層全体は、情報が階層の上に渡されるように、同期されるべきである。しかし、フィードバックは、同期される必要はなく、フィードバックが低いレベルで迅速に受信されれば、低いレベルはそれだけ迅速に適合でき、かつ、分析がより効果的になる。
【００７９】
一例として、（単一の有限状態機械エンジンで実装された）階層の各レベルに対する最大サイズの出力は、１０２４バイトに等しい可能性があり、階層の深さは、４レベルに等しい可能性がある。有限状態機械エンジンに対する入力データストリームのデータレートは、１２８ＭＢ／秒に等しい可能性がある。これらの条件で、階層の各レベルは、７．６３マイクロ秒で横断され得る。４レベル階層では、有限状態機械エンジンのスタック全体の総解決時間は、４×７．６３マイクロ秒、つまり３０．５マイクロ秒である。３０．５マイクロ秒の解決時間では、どうやら入力データ周波数は３２ＫＢ／ｓに制限されるべきのようである。
【００８０】
特に、これは、有限状態機械エンジンの構成に高度に依存する。有限状態機械エンジンは、入力データレートと状態機械サイズを対比してトレードオフするように構成可能であり得る。さらに、有限状態機械エンジンに対する入力ワードのサイズは、対応する修正が、その有限状態機械エンジン上にロードされた個々のイメージを作成したコンパイラに対して行われる場合、調整できる。
【００８１】
一例では、図１〜図１４に関連して説明したように、１つまたは複数のＦＳＭを実装するための方法は、フォンノイマンアーキテクチャを有するマシン上のソフトウェアで実装できる。その結果、ソフトウェア命令は、プロセッサに、生データストリームに関する第１のレベルの分析ＦＳＭを実装させ得る。第１のレベルのＦＳＭからの出力は、次いで、第２のレベルのＦＳＭに従ってプロセッサにより処理され、同様に続く。さらに、前述したフィードバックループが、ＦＳＭのレベルからの出力を分析し、それを使用して１つまたは複数のレベルに対して新しいＦＳＭを生成するプロセッサによって実装され得る。
【００８２】
図１５〜図１８は、本明細書で「ＦＳＭエンジン８００」と呼ぶ並列マシンの例を示す。一例では、ＦＳＭエンジン８００は、有限状態機械のハードウェア実装を含む。その結果、ＦＳＭエンジン８００は、ＦＳＭ内の複数の状態に対応する、複数の選択的に接続可能なハードウェア要素（例えば、プログラム可能要素）を実装する。ＦＳＭ内の状態と同様に、ハードウェア要素は、入力ストリームを分析し、その入力ストリームに基づいて下流のハードウェア要素をアクティブ化できる。
【００８３】
ＦＳＭエンジン８００は、汎用要素および専用要素を含む複数のプログラム可能要素を含む。汎用要素は、多数の異なる機能を実装するようにプログラムできる。これらの汎用要素は、行８０６（図１６および図１７に示す）およびブロック８０２（図１５および図１６に示す）に階層的に構成されたＳＭＥ  ８０４、８０５（図１８に示す）を含む。階層的に構成されたＳＭＥ  ８０４、８０５の間で信号をルーティングするために、ブロック間スイッチ８０３（図１５および図１６に示す）、ブロック内スイッチ８０８（図９および図１０に示す）および行内スイッチ８１２（図１７に示す）を含めて、プログラム可能スイッチの階層が使用される。ＳＭＥ  ８０４、８０５は、ＦＳＭエンジン８００によって実装されたＦＳＭの状態に対応できる。ＳＭＥ  ８０４、８０５は、以下で説明するように、プログラム可能スイッチを用いて連結できる。その結果、ＦＳＭは、ＳＭＥ８０４、８０５を状態関数に対応するようにプログラムすることにより、かつ、ＦＳＭ内の状態間の遷移に対応するようにＳＭＥ  ８０４、８０５を選択的に連結することにより、ＦＳＭエンジン８００上で実装できる。
【００８４】
図１５は、ＦＳＭエンジン８００の例の全体図を示す。ＦＳＭエンジン８００は、プログラム可能ブロック間スイッチ８０３と選択的に連結できる複数のブロック８０２を含む。さらに、ブロック８０２は、信号（例えば、データ）を受信し、そのデータをブロック８０２に提供するために、入力ブロック８０９（例えば、データ入力ポート）に選択的に結合できる。また、ブロック８０２は、ブロック８０２から外部装置（例えば、別のＦＳＭエンジン８００）に信号を提供するために、出力ブロック８１３（例えば、出力ポート）にも選択的に結合できる。ＦＳＭエンジン８００は、プログラム（例えば、イメージ）をＦＳＭエンジン８００にロードするために、プログラミングインタフェース８１１も含むことができる。イメージは、ＳＭＥ  ８０４、８０５の状態をプログラム（例えば、設定）できる。すなわち、イメージは、ＳＭＥ  ８０４、８０５を、入力ブロック８０９で所与の入力に対してある方法で反応するように構成できる。例えば、ＳＭＥ  ８０４は、入力ブロック８０９で文字「ａ」が受信されると、高信号を出力するように設定できる。
【００８５】
一例では、入力ブロック８０９、出力ブロック８１３、および／またはプログラミングインタフェース８１１は、レジスタとして実装でき、それらのレジスタへの書込みは、それぞれの要素に対して、またはそれらの要素から、データを提供できるようになる。その結果、プログラミングインタフェース８１１に対応するレジスタ内に格納されているイメージからのビットが、ＳＭＥ  ８０４、８０５上にロードできる。図１５では、ブロック８０２、入力ブロック８０９、出力ブロック８１３、およびブロック間スイッチ８０３の間に、ある数の導体（例えば、ワイヤー、配線）が示されているが、他の例では、もっと少ないか、またはもっと多くの導体が使用できることが理解されるべきである。
【００８６】
図１６は、ブロック８０２の例を示す。ブロック８０２は、プログラム可能ブロック内スイッチ８０８と選択的に連結できる複数の行８０６を含むことができる。さらに、行８０６は、ブロック間スイッチ８０３を備えた別のブロック８０２内の別の行８０６に選択的に結合できる。一例では、バッファー８０１が、ブロック間スイッチ８０３へ／からの信号のタイミングを制御するために含まれる。行８０６は、本明細書で２のグループ（ＧＯＴ：ｇｒｏｕｐ  ｏｆ  ｔｗｏ）８１０と呼ぶ要素のペアに編成された複数のＳＭＥ  ８０４、８０５を含む。一例では、ブロック８０２に、１６の行８０６が含まれる。
【００８７】
図１７は、行８０６の例を示す。ＧＯＴ  ８１０は、プログラム可能行内スイッチ８１２により、他のＧＯＴ  ８１０および行８０６内の任意の他の要素８２４と選択的に結合できる。ＧＯＴ  ８１０は、ブロック内スイッチ８０８を備えた他の行８０６内の他のＧＯＴ  ８１０、またはブロック間スイッチ８０３を備えた他のブロック８０２内の他のＧＯＴ  ８１０とも結合できる。一例では、ＧＯＴ  ８１０は、第１および第２の入力８１４、８１６、および出力８１８を有する。第１の入力８１４は、ＧＯＴ  ８１０の第１のＳＭＥ  ８０４に結合され、第２の入力８１６は、ＧＯＴ  ８１０の第２のＳＭＥ  ８０５に結合される。
【００８８】
一例では、行８０６は、第１および第２の複数の行相互接続導体８２０、８２２を含む。一例では、ＧＯＴ  ８１０の入力８１４、８１６が、１つまたは複数の行相互接続導体８２０、８２２に結合でき、出力は、１つの行相互接続導体８２０、８２２に結合できる。一例では、第１の複数の行相互接続導体８２０は、行８０６内の各ＧＯＴ  ８１０の各ＳＭＥ  ８０４に結合できる。第２の複数の行相互接続導体８２２は、行８０６内の各ＧＯＴ  ８１０の１つのＳＭＥ  ８０４に結合できるが、ＧＯＴ  ８１０の他のＳＭＥ  ８０５に結合できない。一例では、第２の複数の行相互接続導体８２２の前半は、行８０６内のＳＭＥ  ８０４の前半（各ＧＯＴ８１０から１つのＳＭＥ  ８０４）に結合でき、第２の複数の行相互接続導体８２２の後半は、行８０６内のＳＭＥ  ８０５の後半（各ＧＯＴ８１０から他のＳＭＥ  ８０４）に結合できる。第２の複数の行相互接続導体８２２とＳＭＥ  ８０４、８０５との間の制限された接続性は、本明細書では、「パリティ」と呼ぶ。一例では、行８０６は、カウンタ、プログラム可能ブール論理要素、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、プログラマブルプロセッサ（例えば、マイクロプロセッサ）、および他の要素などの、専用要素８２４も含むことができる。
【００８９】
一例では、専用要素８２４は、カウンタ（本明細書ではカウンタ８２４とも呼ぶ）を含む。一例では、カウンタ８２４は、１２ビットのプログラマブル減算カウンタを含む。１２ビットのプログラマブルカウンタ８２４は、計数入力、リセット入力、およびゼロカウント出力を有する。計数入力は、アサートされると、カウンタ８２４の値を１だけ減少させる。リセット入力は、アサートされると、カウンタ８２４に、関連するレジスタから初期値をロードさせる。１２ビットのカウンタ８２４に対して、初期値として１２ビットの数までをロードできる。カウンタ８２４の値がゼロ（０）まで減少されると、ゼロカウント出力がアサートされる。カウンタ８２４は、少なくとも２つのモード、パルス（ｐｕｌｓｅ）およびホールド（ｈｏｌｄ）も有する。カウンタ８２４が、パルスモードに設定されると、カウンタ８２４がゼロまで減少されるとき、クロックサイクル中にゼロカウント出力がアサートされ、次のクロックサイクルではゼロカウント出力はもはやアサートされていない。カウンタ８２４が、ホールドモードに設定されると、カウンタ８２４がゼロまで減少されるとき、クロックサイクル中にゼロカウント出力がアサートされ、アサートされているリセット入力によってカウンタ８２４がリセットされるまで、アサートされたままである。一例では、専用要素８２４は、ブール論理を含む。いくつかの例では、このブール論理は、ＦＳＭエンジン８００内の終端状態ＳＭＥから情報を抽出するために使用できる。抽出された情報は、状態情報を他のＦＳＭエンジン８００に転送するため、および／またはＦＳＭエンジン８００の再プログラムもしくは別のＦＳＭエンジン８００の再プログラムに使用したプログラミング情報を転送するために、使用できる。
【００９０】
図１８は、ＧＯＴ  ８１０の例を示す。ＧＯＴ  ８１０は、第１のＳＭＥ  ８０４および第２のＳＭＥ  ８０５を含み、それらは、入力８１４、８１６を有し、ＯＲゲート８３０および３入力（３−ｔｏ−１）マルチプレクサ８４２に結合された出力８２６、８２８を有する。３入力マルチプレクサ８４２は、ＧＯＴ  ８１０の出力８０８を、第１のＳＭＥ  ８０４、第２のＳＭＥ  ８０５、またはＯＲゲート８３０のいずれかに結合するように設定できる。ＯＲゲート８３０は、ＧＯＴ  ８１０の共通の出力８１８を形成するために、出力８２６、８２８の両方を連結するために使用できる。一例では、第１および第２のＳＭＥ  ８０４、８０５は、前述のように、第１のＳＭＥ  ８０４の入力８１４が行相互接続導体８２２のいくつかに結合でき、かつ、第２のＳＭＥ  ８０５の入力８１６が他の行相互接続導体８２２に結合できるところに、パリティを示す。一例では、ＧＯＴ  ８１０内の２つのＳＭＥ  ８０４、８０５が、スイッチ８４０のいずれかまたは両方を設定することにより、カスケード接続できるか、かつ／または自身へループバックできる。ＳＭＥ  ８０４、８０５は、ＳＭＥ  ８０４、８０５の出力８２６、８２８を他のＳＭＥ  ８０４、８０５の入力８１４、８１６に結合することにより、カスケード接続できる。ＳＭＥ  ８０４、８０５は、出力８２６、８２８を自分自身の入力８１４、８１６に結合することにより、自身にループバックできる。その結果、第１のＳＭＥ  ８０４の出力８２６は、第１のＳＭＥ  ８０４の入力８１４および第２のＳＭＥ  ８０５の入力８１６のどちらにも結合しないか、その１つ、または両方に結合できる。
【００９１】
一例では、状態機械要素８０４、８０５は、検出線８３４と並列に結合された、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）でしばしば使用されるような、複数のメモリセル８３２を含む。１つのかかるメモリセル８３２は、高値または低値（例えば、１または０）のいずれかに対応するような、データ状態に設定できるメモリセルを含む。メモリセル８３２の出力は、検出線８３４に結合され、メモリセル８３２への入力は、データストリーム線８３６上のデータに基づいて信号を受信する。一例では、データストリーム線８３６上の入力は、メモリセル８３２の１つを選択するように復号される。選択されたメモリセル８３２は、その格納されたデータ状態を検出線８３４への出力として提供する。例えば、データ入力ポート８０９で受信されるデータは、デコーダ（図示せず）に提供でき、デコーダは、データストリーム線８３６の１つを選択できる。一例では、デコーダは、ＡＳＣＩＩ文字を２５６ビットの１つに変換できる。
【００９２】
メモリセル８３２は、従って、メモリセル８３２が高値に設定され、かつ、データストリーム線８３６上のデータがメモリセル８３２に対応する場合、高信号を検出線８３４に出力する。データストリーム線８３６上のデータがメモリセル８３２に対応し、かつ、メモリセル８３２が低値に設定される場合、メモリセル８３２は、低信号を検出線８３４に出力する。メモリセル８３２から検出線８３４上への出力は、検出回路８３８によって検知される。一例では、入力線８１４、８１６上の信号は、それぞれの検出回路８３８をアクティブまたは非アクティブ状態のいずれかに設定する。非アクティブ状態に設定されると、検出回路８３８は、それぞれの検出線８３４上の信号にかかわらず、低信号をそれぞれの出力８２６、８２８上に出力する。アクティブ状態に設定されると、検出回路８３８は、高信号が、それぞれのＳＭＥ  ８０４、８０５のメモリセル８３４の１つから検出されると、高信号をそれぞれの出力線８２６、８２８上に出力する。アクティブ状態では、検出回路８３８は、それぞれのＳＭＥ  ８０４、８０５のメモリセル８３４の全てからの信号が低い場合、低信号をそれぞれの出力線８２６、８２８上に出力する。
【００９３】
一例では、ＳＭＥ  ８０４、８０５は、２５６メモリセル８３２を含み、各メモリセル８３２は、異なるデータストリーム線８３６に結合されている。従って、ＳＭＥ  ８０４、８０５は、選択された１つまたは複数のデータストリーム線８３６が、その上に高信号を有する場合、高信号を出力するようにプログラムできる。例えば、ＳＭＥ  ８０４は、第１のメモリセル８３２（例えば、ビット０）を高く設定し、他の全てのメモリセル８３２（例えば、ビット１〜２５５）を低く設定できる。それぞれの検出回路８３８がアクティブ状態のとき、ＳＭＥ  ８０４は、ビット０に対応するデータストリーム線８３６がその上に高信号を有する場合、出力８２６上に高信号を出力する。他の例では、ＳＭＥ  ８０４は、複数のデータストリーム線８３６のうちの１本が、適切なメモリセル８３２を高値に設定することにより、その上に高信号を有する場合、高信号を出力するように設定できる。
【００９４】
一例では、メモリセル８３２は、関連するレジスタからビットを読み取ることによって、高値または低値に設定できる。その結果、ＳＭＥ  ８０４は、コンパイラによって作成されたイメージをレジスタ内に格納し、レジスタ内のビットを関連するメモリセル８３２にロードすることにより、プログラムできる。一例では、コンパイラによって作成されたイメージは、高および低（例えば、１および０）ビットのバイナリイメージを含む。イメージは、ＦＳＭエンジン８００を、ＳＭＥ  ８０４、８０５をカスケード接続することによりＦＳＭとして動作するようにプログラムできる。例えば、第１のＳＭＥ  ８０４は、検出回路８３８をアクティブ状態に設定することにより、アクティブ状態に設定できる。第１のＳＭＥ  ８０４は、ビット０に対応するデータストリーム線８３６がその上に高信号を有する場合、高信号を出力するように設定できる。第２のＳＭＥ  ８０５は、最初は非アクティブ状態に設定され得るが、アクティブな場合は、ビット１に対応するデータストリーム線８３６がその上に高信号を有する場合、高信号を出力するように設定できる。第１のＳＭＥ  ８０４および第２のＳＭＥ  ８０５は、第１のＳＭＥ  ８０４の出力８２６を第２のＳＭＥ  ８０５の入力８１６に結合するように設定することによりカスケード接続できる。従って、高信号が、ビット０に対応するデータストリーム線８３６上で検知される場合、第１のＳＭＥ  ８０４は、高信号を出力８２６上に出力し、第２のＳＭＥ  ８０５の検出回路８３８をアクティブ状態に設定する。高信号が、ビット１に対応するデータストリーム線８３６上で検知される場合、第２のＳＭＥ  ８０５は、別のＳＭＥ  ５０４、ＳＭＥ  ８０５をアクティブ化するため、またはＦＳＭエンジン８００からの出力に対して、高信号を出力８２６上に出力する。
【００９５】
図１９は、コンパイラが、ソースコードを、並列マシンをプログラムするように構成されたイメージに変換するための方法１０００の例を示す。方法１０００は、ソースコードを構文木に解析すること（ブロック１００２）、構文木をオートマトンに変換すること（ブロック１００４）、オートマトンを最適化すること（ブロック１００６）、オートマトンをネットリストに変換すること（ブロック１００８）、ネットリストをハードウェア上に配置すること（ブロック１０１０）、ネットリストをルーティングすること（ブロック１０１２）、および結果として生じるイメージを公開すること（ブロック１０１４）を含む。
【００９６】
一例では、コンパイラは、ソフトウェア開発者がＦＳＭエンジン８００上でＦＳＭを実装するためのイメージを作成できるようにするアプリケーションプログラミングインタフェース（ＡＰＩ）を含む。コンパイラは、ソースコード内の正規表現の入力セットを、ＦＳＭエンジン８００をプログラムするように構成されたイメージに変換するための方法を提供する。コンパイラは、フォンノイマンアーキテクチャを有するコンピュータに対する命令によって実装できる。これらの命令は、コンピュータ上のプロセッサに、コンパイラの機能を実装させることができる。例えば、命令は、プロセッサによって実行される場合、プロセッサに、プロセッサがアクセス可能なソースコード上のブロック１００２、１００４、１００６、１００８、１０１０、１０１２、および１０１４で説明した動作を実行させることができる。フォンノイマンアーキテクチャを有するコンピュータの例を図２０に示し、以下で説明する。
【００９７】
一例では、ソースコードは、シンボルのグループ内でシンボルのパターンを識別するための検索文字列を記述する。検索文字列を記述するために、ソースコードは、複数の正規表現（ｒｅｇｅｘ）を含むことができる。正規表現は、シンボル検索パターンを記述するための文字列であり得る。正規表現は、例えば、プログラミング言語、テキストエディタ、ネットワークセキュリティなど、様々なコンピュータドメイン内で広く使用される。一例では、コンパイラでサポートされる正規表現は、非構造化データの検索に対する検索基準を含む。非構造化データは、データ内のワードに適用されたインデックスがなく、かつ自由な形式のデータを含むことができる。ワードは、データ内に、印字可能および印字不能な、バイトの任意の組合わせを含むことができる。一例では、コンパイラは、Ｐｅｒｌ、（例えば、Ｐｅｒｌ互換の正規表現（ＰＣＲＥ））、ＰＨＰ、Ｊａｖａ（登録商標）、および．ＮＥＴ言語を含む、正規表現を実装するための複数の異なるソースコード言語をサポートできる。
【００９８】
ブロック１００２で、コンパイラは、関係的に接続された演算子の配置を形成するためにソースコードを解析でき、異なるタイプの演算子は、ソースコードで実装された異なる関数（例えば、ソースコード内の正規表現によって実装された異なる関数）に対応する。ソースコードを解析すると、ソースコードの一般的表現を作成することができる。一例では、一般的表現は、構文木として知られる木グラフの形で、ソースコード内の正規表現のコード化表現を含む。本明細書で説明する例は、その配置を構文木（「抽象構文木」としても知られる）と呼ぶが、他の例では、具体的な構文木または他の配置も使用できる。
【００９９】
前述のとおり、コンパイラは、複数の言語のソースコードをサポートできるので、解析は、言語にかかわらず、ソースコードを、例えば、構文木などの、非言語固有表現に変換する。従って、コンパイラによるさらなる処理（ブロック１００４、１００６、１００８、１０１０）は、ソースコードの言語にかかわらず、共通の入力構造から作業することができる。
【０１００】
前述したように、構文木は、関係的に接続された複数の演算子を含む。構文木は、複数の異なるタイプの演算子を含むことができる。すなわち、異なる演算子は、ソースコード内の正規表現によって実装された異なる関数に対応できる。
【０１０１】
ブロック１００４では、構文木は、オートマトンに変換される。オートマトンは、ＦＳＭのソフトウェアモデルを含み、それに応じて、決定性または非決定性として分類できる。決定性オートマトンは、所与の時間に、実行の単一パスを有するが、非決定性オートマトンは、実行の複数の並列パスを有する。オートマトンは、複数の状態を含む。構文木をオートマトンに変換するため、演算子および構文木内での演算子間の関係が、状態間での遷移を有する状態に変換される。一例では、オートマトンは、ＦＳＭエンジン８００のハードウェアに部分的に基づいて、変換できる。
【０１０２】
一例では、オートマトンの入力シンボルは、アルファベット、数字０〜９、および他の印字可能文字を含む。一例では、入力シンボルは、０〜２５５まで（０と２５５を含めて）のバイト値によって表される。一例では、オートマトンは、グラフのノードが状態のセットに対応する有向グラフとして表すことができる。一例では、入力シンボルαに関して、状態ｐから状態ｑへの遷移、すなわちδ（ｐ，α）が、ノードｐからノードｑへの有向接続（ｄｉｒｅｃｔｅｄ  ｃｏｎｎｅｃｔｉｏｎ）によって示される。一例では、オートマトンを反転すると、何らかのシンボルαに関する各遷移ｐ→ｑが、同じシンボルに関してｑ→ｐと反転されている、新しいオートマトンが生成される。反転では、開始状態が最終状態になり、最終状態が開始状態になる。一例では、オートマトンによって受け入れられた（例えば、一致した）言語は、オートマトンに連続して入力する場合に、最終状態に達する、全ての可能な文字列のセットである。オートマトンによって受け入れられた言語内の各文字列は、開始状態から１つまたは複数の最終状態へのパスを追跡する。
【０１０３】
ブロック１００６では、オートマトンが構築された後、オートマトンは、とりわけ、その複雑性およびサイズを削減するように最適化される。オートマトンは、重複する状態を組み合わせることにより最適化できる。
【０１０４】
ブロック１００８では、最適化されたオートマトンは、ネットリストに変換される。オートマトンのネットリストへの変換は、オートマトンの各状態をＦＳＭエンジン８００上のハードウェア要素（例えば、ＳＭＥ  ８０４、８０５、他の要素８２４）へマッピングし、ハードウェア要素間の接続を決定する。
【０１０５】
ブロック１０１０では、ネットリストの各ノードに対応する対象装置の特定のハードウェア要素（例えば、ＳＭＥ  ８０４、８０５、専用要素８２４）を選択するために、ネットリストが配置される。一例では、配置により、ＦＳＭエンジン８００に対する一般的な入力および出力制約に基づいて各特定のハードウェア要素が選択される。
【０１０６】
ブロック１０１２では、配置されたネットリストが、選択されたハードウェア要素を、ネットリストによって記述される接続を達成するように連結するために、プログラム可能スイッチ（例えば、ブロック間スイッチ８０３、ブロック内スイッチ８０８、および行内スイッチ８１２）に対する設定を決定するようにルーティングされる。一例では、プログラム可能スイッチに対する設定が、選択されたハードウェア要素を接続するために使用されるＦＳＭエンジン８００の特定の導体の決定、およびプログラム可能スイッチに対する設定によって決定される。ルーティングすると、ブロック１０１０での配置よりも、ハードウェア要素間の接続のもっと明確な制限を考慮に入れることができる。その結果、ルーティングは、ＦＳＭエンジン８００上の導体の実際の制限を前提として、適切な接続を行うために、全体配置によって決定されたように、いくつかのハードウェア要素の位置を調整し得る。
【０１０７】
ネットリストが配置され、ルーティングされると、配置され、ルーティングされたネットリストは、ＦＳＭエンジン８００のプログラミングのために、複数のビットに変換できる。複数のビットは、本明細書ではイメージと呼ばれる。
【０１０８】
ブロック１０１４では、イメージがコンパイラによって公開される。イメージは、ＦＳＭエンジン８００の特定のハードウェア要素および／またはプログラム可能スイッチをプログラムするための複数のビットを含む。イメージが複数のビット（例えば、０および１）を含む実施形態では、イメージはバイナリイメージと呼ぶことができる。そのビットは、ＳＭＥ  ８０４、８０５、専用要素８２４、およびプログラム可能スイッチをプログラムするために、ＦＳＭエンジン８００上にロードでき、プログラムされたＦＳＭエンジン８００は、ソースコードによって記述された機能性を有するＦＳＭを実装できるようになる。配置（ブロック１０１０）およびルーティング（ブロック１０１２）により、ＦＳＭエンジン８００内の特定の位置における特定のハードウェア要素をオートマトン内の特定の状態にマッピングできる。その結果、イメージ内のビットは、所望の機能（または複数）を実装するために、特定のハードウェア要素および／またはプログラム可能スイッチをプログラムできる。一例では、イメージは、機械コードをコンピュータ可読媒体に格納することによって公開できる。別の例では、イメージは、イメージをディスプレイ装置上に表示することによって公開できる。さらに別の例では、イメージは、そのイメージをＦＳＭエンジン８００上にロードするためのプログラミング装置などの別の装置に、そのイメージを送信することにより公開できる。さらにまた別の例では、イメージは、そのイメージを並列マシン（例えば、ＦＳＭエンジン８００）上にロードすることによって公開できる。
【０１０９】
一例では、イメージは、ビット値をイメージからＳＭＥ  ８０４、８０５および他のハードウェア要素８２４へ直接ロードするか、または、イメージを１つまたは複数のレジスタにロードし、次いで、ビット値をレジスタからＳＭＥ  ８０４、８０５および他のハードウェア要素８２４に書き込むかのいずれかによって、ＦＳＭエンジン８００上にロードできる。一例では、プログラム可能スイッチ（例えば、ブロック間スイッチ８０３、ブロック内スイッチ８０８、および行内スイッチ８１２）の状態。一例では、ＦＳＭエンジン８００のハードウェア要素（例えば、ＳＭＥ  ８０４、８０５、他の要素８２４、プログラム可能スイッチ８０３、８０８、８１２）は、プログラミング装置および／またはコンピュータが、イメージを１つまたは複数のメモリアドレスに書き込むことにより、イメージをＦＳＭエンジン８００上にロードできるように、メモリマッピングされる。
【０１１０】
本明細書に記載する方法例は、少なくとも部分的に機械またはコンピュータで実装できる。いくつかの例は、前述の例で説明した通りに方法を実行するように電子装置を構成するように操作可能な命令でコード化されたコンピュータ可読媒体または機械可読媒体を含むことができる。かかる方法の実装は、マイクロコード、アセンブリ言語コード、高水準言語コード、または同類のものなどのコードを含むことができる。かかるコードは、様々な方法を実行するためのコンピュータ可読命令を含むことができる。コードは、コンピュータプログラム製品の一部を形成し得る。さらに、コードは、実行中または他の時に、１つまたは複数の揮発性もしくは不揮発性のコンピュータ可読媒体上に有形的に格納され得る。これらのコンピュータ可読媒体には、ハードディスク、取り外し可能磁気ディスク、取り外し可能光ディスク（例えば、コンパクトディスクおよびデジタルビデオディスク）、磁気カセット、メモリカードまたはスティック、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、および同類のものを含み得るが、それらに限定されない。
【０１１１】
図２０は、フォンノイマンアーキテクチャを有するコンピュータ１５００の一例を大まかに示す。本開示の内容を読み、理解すると、当業者は、ソフトウェアプログラム内に定義されている機能を実行するために、コンピュータベースのシステム内のコンピュータ可読媒体からソフトウェアプログラムを起動できる方法を理解するであろう。当業者は、本明細書で開示する方法を実装および実行するために設計された１つまたは複数のソフトウェアプログラムを作成するために採用できる様々なプログラム言語をさらに理解するであろう。プログラムは、Ｊａｖａ、Ｃ＋＋、または１つもしくは複数の他の言語などの、オブジェクト指向言語を使用するオブジェクト指向形式で構築できる。あるいは、プログラムは、アセンブリ、Ｃなどの手続き型言語を使用する手続き指向形式で構築できる。ソフトウェアコンポーネントは、遠隔手続呼び出しなどを含む、アプリケーションプログラムインタフェースまたはプロセス間通信技術などの、当業者に周知の任意のいくつかのメカニズムを用いて通信できる。様々な実施形態の教示は、任意の特定のプログラム言語または環境に限定されない。
【０１１２】
従って、他の実施形態が実現できる。例えば、コンピュータ、メモリシステム、磁気もしくは光ディスク、いくつかの他の記憶装置、または任意のタイプの電子装置もしくはシステムなどの製品は、命令１５２４（例えば、コンピュータプログラム命令）を格納しているメモリ（例えば、取り外し可能記憶媒体、ならびに電子、光、または電磁導体を含む任意のメモリ）など、コンピュータ可読媒体１５２２に結合されている１つまたは複数のプロセッサ１５０２を含み、それらの命令は、１つまたは複数のプロセッサ１５０２によって実行されると、前述した方法に関して説明したいずれかの動作を実行する結果になる。
【０１１３】
コンピュータ１５００は、いくつかのコンポーネントに直接結合されたか、かつ／またはバス１５０８を利用するプロセッサ１５０２を有するコンピュータシステムの形態をとることができる。かかるコンポーネントには、メインメモリ１５０４、スタティックまたは不揮発性メモリ１５０６、および大容量記憶１５１６を含むことができる。プロセッサ１５０２に結合された他のコンポーネントには、ビデオディスプレイなどの出力装置１５１０、キーボードなどの入力装置１５１２、マウスなどのカーソル制御装置１５１４を含むことができる。プロセッサ１５０２および他のコンポーネントをネットワーク１５２６に結合するためのネットワークインタフェース装置１５２０は、バス１５０８にも結合できる。命令１５２４はさらに、いくつかの周知の転送プロトコル（例えば、ＨＴＴＰ）のうちの任意の１つを利用して、ネットワークインタフェース装置１５２０を介し、ネットワーク１５２６を通じて送信または受信できる。バス１５０８に結合されたこれらの要素のいずれかは、実現する特定の実施形態によって、欠けているか、単独で存在するか、または複数存在し得る。
【０１１４】
一例では、１つまたは複数のプロセッサ１５０２、メモリ１５０４、１５０６、または記憶装置１５１６は各々、実行される際に、コンピュータに、本明細書で説明する方法の任意の１つまたは複数を実行させることができる命令１５２４を含むことができる。代替実施形態では、コンピュータ１５００は、スタンドアロン装置として動作するか、または他の装置に結合（例えば、ネットワーク接続）できる。ネットワーク環境では、コンピュータ１５００は、サーバークライアント環境でサーバーまたはクライアントの資格で、またはピアツーピア（分散）ネットワーク環境でピア装置として動作できる。コンピュータ１５００には、パーソナルコンピュータ（ＰＣ）、タブレットＰＣ、セットトップボックス（ＳＴＢ）、携帯情報端末（ＰＤＡ）、携帯電話、ウェブアプライアンス、ネットワークルーター、スイッチもしくはブリッジ、またはその装置によって行われる動作を指定する命令のセットを実行できる任意の装置を含むことができる。さらに、単一のコンピュータ１５００のみが示されているが、「コンピュータ」という用語は、本明細書で説明する方法論の任意の１つまたは複数を実行する命令のセット（または複数のセット）を個々にまたは一緒に実行する装置の任意の集合を含むとも解釈されるべきである。
【０１１５】
コンピュータ１５００は、１つまたは複数の通信プロトコル（例えば、ユニバーサルシリアルバス（ＵＳＢ）、ＩＥＥＥ  １３９４など）を使用して、周辺装置と通信するための出力コントローラ１５２８も含むことができる。出力コントローラ１５２８は、例えば、イメージを、コンピュータ１５００と通信的に結合されたプログラミング装置１５３０に提供できる。プログラミング装置１５３０は、並列マシン（例えば、並列マシン１００、ＦＳＭエンジン８００）をプログラムするように構成できる。他の例では、プログラミング装置１５３０は、コンピュータ１５００と統合し、かつ、バス１５０８と結合できるか、またはネットワークインタフェース装置１５２０もしくは別の装置を介してコンピュータ１５００と通信できる。
【０１１６】
コンピュータ可読媒体１５２４は単一媒体として示されているが、「コンピュータ可読媒体」という用語は、命令１５２４の１つまたは複数のセットを格納する単一または複数の媒体（例えば、集中型もしくは分散データベース、または関連するキャッシュおよびサーバー、ならびに／またはプロセッサ１５０２レジスタ、メモリ１５０４、１５０６、および記憶装置１５１６など、様々な記憶媒体）を含むと解釈すべきである。「コンピュータ可読媒体」という用語は、コンピュータによる実行のための命令のセットを格納、コード化もしくは保持でき、かつ、コンピュータに本発明の方法論の任意の１つもしくは複数を実行させるか、または命令のかかるセットで利用されるか、もしくはそれらに関連するデータ構造を格納、コード化もしくは保持できる、任意の媒体を含むとも解釈すべきである。「コンピュータ可読媒体」という用語は、その結果、ソリッドステートメモリ、光、および磁気媒体など、有形的媒体を含むが、それらに限定されないと解釈すべきである。
【０１１７】
読み手が技術的開示の本質および要点を確認できるようにする要約を要求する３７  Ｃ．Ｆ．Ｒ．セクション１．７２（ｂ）に従うために、要約が提供されている。それは、特許請求の範囲または意味を制限または解釈するために使用されないという理解で提出されている。以下の特許請求の範囲は、本明細書によって詳細な説明に組み込まれ、各請求項は、そのままで別個の実施形態として存在する。
【０１１８】
〔実施形態例〕
例１は、複数のプログラム可能要素を有するプログラム可能装置を含み、そのプログラム可能要素は、１つまたは複数の有限状態機械を実装するように構成され、その複数のプログラム可能要素は、Ｎ桁の入力を受信し、そのＮ桁の入力に応じてＭ桁の出力を提供するように構成され、そのＭ桁の出力は全部より少ないプログラム可能要素からの状態情報を含む。
【０１１９】
例２は、複数のプログラム可能要素を含む第１の並列マシンであって、そのプログラム可能要素が１つまたは複数の有限状態機械を実装するように構成され、その複数のプログラム可能要素がＮ桁の入力を受信し、そのＮ桁の入力に応じてＭ桁の出力を提供するように構成され、そのＭ桁の出力が全部より少ないプログラム可能要素からの状態情報を含む、第１の並列マシンと、そのＭ桁の出力の少なくとも一部を受信し、処理するように構成されている第２の並列マシンとを有する階層型並列マシンを含む。
【０１２０】
例３は、複数のプログラム可能要素を有するプログラム可能装置を含み、そのプログラム可能要素が、１つまたは複数の有限状態機械を実装するように構成され、その複数のプログラム可能要素が、Ｎ桁の入力を受信し、そのＮ桁の入力に応じてＭ桁の出力を提供するように構成され、そのＭ桁の出力が、プログラム可能要素の各々からの状態情報を圧縮することによって形成される。
【０１２１】
例４は、複数のプログラム可能要素を含む第１の並列マシンを有する階層型並列マシンを含み、そのプログラム可能要素が、１つまたは複数の有限状態機械を実装するように構成され、その複数のプログラム可能要素が、Ｎ桁の入力を受信し、そのＮ桁の入力に応じてＭ桁の出力を提供するように構成され、そのＭ桁の出力が、プログラム可能要素の各々からの状態情報を圧縮することによって形成される。
【０１２２】
例５は、並列マシンから別の装置へ状態情報を提供する方法を含み、その並列マシンが、複数のプログラム可能要素を含み、そのプログラム可能要素の各々が、対応する状態を有するように構成されている。本方法は、並列マシン内のプログラム可能要素の各々の状態を含む、状態情報を決定することと、その状態情報を圧縮することと、その圧縮した状態情報を別の装置に提供することとを含む。
【０１２３】
例６は、少なくとも１つのＮ桁の入力および複数のＮ桁の出力を有する第１のレベルの並列マシンを有する階層型並列マシンを含み、そのＮ桁の出力の各々が、第１レベルの並列マシン上で実装されたＮ個の状態機械のそれぞれのグループに対応する。
【０１２４】
例７は、少なくとも１つの有限状態機械を実装するように構成された複数のプログラム可能要素を含む並列マシンを含む。その並列マシンは、プログラム可能要素の各々の状態を含む状態情報を決定し、その状態情報を圧縮し、そして、その圧縮した状態情報を別の装置に提供するように構成される。
【０１２５】
例８では、例１〜例７の任意の主題が、随意に、複数のプログラム可能要素がプログラム可能要素の２つ以上のグループのうちの１つを含むことを含むことができる。
【０１２６】
例９では、例１〜例８の任意の主題が、随意に、プログラム可能要素の１つのグループに結合され、かつ、Ｎ桁の入力を受信するように構成された、Ｎ桁の入力インタフェース、およびプログラム可能要素の１つのグループに結合され、かつ、Ｍ桁の出力を提供するように構成された、Ｍ桁の出力インタフェースを含むことができる。
【０１２７】
例１０では、例１〜例９の任意の主題が、随意に、プログラム可能要素の１つのグループがプログラム可能要素のブロックを含むことができる。
【０１２８】
例１１では、例１〜例１０の任意の主題が、随意に、プログラム可能要素のブロックがプログラム可能要素の複数の行を含むことができ、その行の各々は複数のブロック内スイッチのうちのそれぞれ１つに結合されている。
【０１２９】
例１２では、例１〜例１１の任意の主題が、随意に、各行内のプログラム可能要素が、２つの状態機械要素の複数のグループ、および別のプログラム可能要素を含むことを含むことができる。
【０１３０】
例１３では、例１〜例１２の任意の主題が、随意に、プログラム可能要素の１つのグループをプログラム可能要素の別の１つのグループ、入力ポート、および／または出力ポートに選択的に結合するように構成されたプログラム可能スイッチを含む。
【０１３１】
例１４では、例１〜例１３の任意の主題が、随意に、複数のプログラム可能要素および複数のプログラム可能スイッチをプログラムするように構成されたプログラムを格納するように構成されたレジスタを含むことができる。
【０１３２】
例１５では、例１〜例１４の任意の主題が、随意に、ＮがＭに等しいことを含むことができる。
【０１３３】
例１６では、例１〜例１５の任意の主題が、随意に、ＭがＮの整数倍であることを含むことができる。
【０１３４】
例１７では、例１〜例１６の任意の主題が、随意に、有限状態機械のうちの同じ１つを実装するために使用されたプログラム可能要素の２つ以上からの出力を統合するように構成されたＯＲ論理を含むことができる。
【０１３５】
例１８では、例１〜例１７の任意の主題が、随意に、プログラム可能要素がＮ個の状態機械の論理グループを実装するように構成され、Ｎ個の状態機械の出力は、Ｍ桁の出力を提供するために統合されることを含むことができる。
【０１３６】
例１９では、例１〜例１８の任意の主題が、随意に、論理がＯＲゲートを含むことを含むことができる。
【０１３７】
例２０では、例１〜例１９の任意の主題が、随意に、Ｍ桁の出力内に含まれている状態情報が圧縮された状態情報をどのように含むことを含むことができる。
【０１３８】
例２１では、例１〜例２０の任意の主題が、随意に、複数のプログラム可能要素が状態機械要素を含むことを含むことができる。
【０１３９】
例２２では、例１〜例２１の任意の主題が、随意に、Ｍ桁の出力が異なるベクトルをどのように含むことを含むことができる。
【０１４０】
例２３では、例１〜例２２の任意の主題が、随意に、実装された１つまたは複数の有限状態機械内の各状態が、状態ベクトル内のそれぞれの桁に対応するか、かつ、異なるベクトルが、プログラム可能装置に提供された入力シンボルに応じて変わる状態ベクトル内の桁のみを含むことを含むことができる。
【０１４１】
例２４では、例１〜例２３の任意の主題が、随意に、実装された１つまたは複数の有限状態機械内の各状態が、状態ベクトル内のそれぞれの桁に対応するか、かつ、Ｍ桁の出力が状態ベクトル内の桁のサブセットのみを含むことを含むことができる。
【０１４２】
例２５では、例１〜例２４の任意の主題が、随意に、桁のサブセットが、１つまたは複数の有限状態機械内の最終状態に対応するそれらの桁を含むことを含むことができる。
【０１４３】
例２６では、例１〜例２５の任意の主題が、随意に、装置内で実装された全ての状態機械がＮ桁の入力を受信することを含むことができる。
【０１４４】
例２７では、例１〜例２６の任意の主題が、随意に、複数のプログラム可能要素がプログラム可能要素２つ以上のグループの１つを含むか、そのグループの各々がそれ自身の専用入力を有することを含むことができる。
【０１４５】
例２８では、例１〜例２７の任意の主題が、随意に、Ｎ桁の入力が半導体ダイの底面上にあるか、かつＭ桁の出力が半導体ダイの上にあることを含むことができる。
【０１４６】
例２９では、例１〜例２８の任意の主題が、随意に、複数のプログラム可能要素が、プログラム可能要素の２つ以上のグループの１つを含むか、かつ、プログラム可能装置が、プログラム可能装置内のグループの１つからグループの別の１つに状態情報を提供することを含むことができる。
【０１４７】
例３０では、例１〜例２９の任意の主題が、随意に、第２の並列マシンが、Ｍ桁の出力全体を受信し、処理するように構成されていることを含むことができる。
【０１４８】
例３１では、例１〜例３０の任意の主題が、随意に、第１の並列マシンに結合され、Ｎ桁の入力を提供するように構成された入力バス、および第１の並列マシンと第２の並列マシンとの間に結合され、Ｍ桁の出力の少なくとも一部を第２の並列マシンに提供するように構成されている出力バスを含むことができる。
【０１４９】
例３２では、例１〜例３１の任意の主題が、随意に、入力バスおよび出力バスのサイズが等しいことを含むことができる。
【０１５０】
例３３では、例１〜例３２の任意の主題が、随意に、第１および第２の並列マシン内の対応するグループが、相互接続のそれぞれのグループによって結合されていることを含むことができる。
【０１５１】
例３４では、例１〜例３３の任意の主題が、随意に、Ｍ桁の出力が、第２の並列マシン内で実装されている各状態機械に提供されることを含むことができる。
【０１５２】
例３５では、例１〜例３４の任意の主題が、随意に、第２の並列マシンが、複数のグループに分類された複数のプログラム可能要素を含むか、Ｍ桁の出力が事前定義された方法でグループのそれぞれ１つに提供されることを含むことができる。
【０１５３】
例３６では、例１〜例３５の任意の主題が、随意に、第２の並列マシンが、アドレス情報を第２の並列マシンに送信するように構成された複数のプログラム可能要素を含むか、アドレス情報が、第２の並列マシン内のどのグループにＭ桁の出力が提供されているかを示すことを含むことができる。
【０１５４】
例３７では、例１〜例３６の任意の主題が、随意に、並列マシンがスタックされることを含むことができる。
【０１５５】
例３８では、例１〜例３７の任意の主題が、随意に、複数のプログラム可能要素がプログラム可能要素の２つ以上のグループのうちの１つを含み、さらに各グループに対応する論理を含むか、グループのそれぞれ１つに対応する論理がそのグループ内の２つ以上のプログラム可能要素からの状態情報を統合するか、かつ、そのグループからのＭ桁の出力の１つまたは複数の桁がかかる論理の関数であることを含むことができる。
【０１５６】
例３９では、例１〜例３８の任意の主題が、随意に、Ｍ桁の出力が、プログラム可能要素からの状態情報を圧縮することにより形成されることを含むことができる。
【０１５７】
例４０では、例１〜例３９の任意の主題が、随意に、有限状態機械のうちの同じ１つを実装するために使用されたプログラム可能要素の２つ以上からの出力を統合するように構成された論理を含むことができる。
【０１５８】
例４１では、例１〜例４０の任意の主題が、随意に、プログラム可能要素が、Ｎ個の状態機械の論理グループを実装するように構成されているか、Ｎ個の状態機械の出力がＭ桁の出力を提供するために統合されることを含むことができる。
【０１５９】
例４２では、例１〜例４１の任意の主題が、随意に、状態情報を圧縮することが状態情報に対して無損失圧縮アルゴリズムを適用することを含むことを含むことができる。
【０１６０】
例４３では、例１〜例４２の任意の主題が、随意に、圧縮された状態情報を他の装置に提供することが、圧縮された状態情報を別の並列マシンに提供することを含むことを含むことができる。
【０１６１】
例４４では、例１〜例４３の任意の主題が、随意に、圧縮された状態情報を他の装置に提供することが、圧縮された状態情報をシステムメモリに提供することを含むことを含むことができる。
【０１６２】
例４５では、例１〜例４４の任意の主題が、随意に、状態情報を圧縮することが、並列マシン上で実装された有限状態機械内の最終状態を統合することを含むことを含むことができる。
【０１６３】
例４６では、例１〜例４５の任意の主題が、随意に、少なくとも１つのＮ桁の入力および複数のＮ桁の出力を有する第１のレベルの並列マシンを含むことができ、Ｎ桁の出力の各々が、第１のレベルの並列マシン上で実装されているＮ個の状態機械のそれぞれのグループに対応する。
【０１６４】
例４７では、例１〜例４６の任意の主題が、随意に、第１のレベルの並列マシン上で実装された少なくとも１つの状態機械が、少なくとも１つの状態機械の複数の最終状態に対応する複数のプログラム可能要素を含み、複数の最終状態に対応する複数のプログラム可能要素の出力が、Ｎ桁の出力のうちの１つの１桁を提供するために共に統合されることを含むことができる。
【０１６５】
例４８では、例１〜例４７の任意の主題が、随意に、Ｎ桁の出力の１つに提供されたデータが、第１のレベルの並列マシン上で実装されたＮ個の状態機械のそれぞれのグループに対する最終状態の状態をコード化することを含むことができる。
【０１６６】
例４９では、例１〜例４８の任意の主題が、随意に、第１のレベルの並列マシンが有限状態機械エンジンを含むことを含むことができる。
【０１６７】
例５０では、例１〜例４９の任意の主題が、随意に、有限状態機械エンジンがプログラム可能要素のグループの配列を含み、かつ、プログラム可能要素のグループの各々がＮ桁の出力のそれぞれ１つに結合されていることを含むことができる。
【０１６８】
例５１では、例１〜例５０の任意の主題が、随意に、第１のレベルの並列マシンが複数のＮ桁の出力を有し、かつ、プログラム可能要素のグループの各々が第１のレベルの並列マシンのＮ桁の入力のそれぞれ１つに結合されていることを含むことができる。
【０１６９】
例５２では、例１〜例５１の任意の主題が、随意に、第２のレベルの並列マシンが有限状態機械エンジンを含むことを含むことができる。
【０１７０】
例５３では、例１〜例５２の任意の主題が、随意に、有限状態機械エンジンがプログラム可能要素のグループの配列を含み、かつ、プログラム可能要素のグループの各々がＮ桁の入力のそれぞれ１つに結合されていることを含むことができる。
【０１７１】
例５４では、例１〜例５３の任意の主題が、随意に、第２のレベルの並列マシンが複数のＮ桁の出力を有し、かつ、プログラム可能要素のグループの各々が第２のレベルの並列マシンのＮ桁の出力のそれぞれ１つに結合されていることを含むことができる。
【０１７２】
例５５では、例１〜例５４の任意の主題が、随意に、第１の並列マシンが第１のダイを含み、かつ第２の並列マシンが第１のダイで積み重ねられた第２のダイを含むことを含むことができる。
【０１７３】
例５６では、例１〜例５５の任意の主題が、随意に、第３の並列マシンおよびバスをさらに含むことができ、その第３の並列マシンは、第１のダイおよび第２のダイで積み重ねられた第３のダイを含み、その第２のダイがスタック内の第１のダイと第３のダイとの間にあり、そのバスは第１の並列マシンと第３の並列マシンとの間で状態情報を転送するように構成される。
【０１７４】
例５７では、例１〜例５６の任意の主題が、随意に、バスが複数の相互接続を含むことを含むことができる。
【０１７５】
例５８では、例１〜例５７の任意の主題が、随意に、相互接続が貫通ビア相互接続を含むことを含むことができる。
【０１７６】
例５９では、例１〜例５８の任意の主題が、随意に、並列マシンが有限状態機械エンジンを含むことを含むことができる。
【０１７７】
例６０では、例１〜例５９の任意の主題が、随意に、どのように有限状態機械エンジンがパターン認識プロセッサを含むことを含むことができる。
【０１７８】
例６１では、例１〜例６０の任意の主題が、随意に、並列マシンがフィールドプログラマブルゲートアレイを含むことを含むことができる。
【０１７９】
例６２では、例１〜例６１の任意の主題が、随意に、第１のレベルの並列マシンの少なくとも１つのＮ桁の入力が生データを受信するように構成されることを含むことができる。
【０１８０】
例６３では、例１〜例６２の任意の主題が、随意に、第２のレベルの並列マシンのＮ桁の入力の各々が、第２のレベルの並列マシン上で実装されたＮ個の状態機械のそれぞれのグループに対応し、第２のレベルの並列マシン上で実装されたＮ個の状態機械のそれぞれのグループが、第１のレベルの並列マシン上で実装された最大Ｎ個の状態機械により駆動されることを含むことができる。
【０１８１】
例６４では、例１〜例６３の任意の主題が、随意に、他の装置が、圧縮された状態情報を受信および処理するように構成された、第２の並列マシンを含むことを含むことができる。
【０１８２】
例６５では、例１〜例６４の任意の主題が、随意に、状態情報を圧縮するように構成されている並列マシンが、その並列マシン上で実装された有限状態機械の最終状態を統合するように構成されている並列マシンを含むことを含むことができる。
【０１８３】
例６６では、例１〜例６５の任意の主題が、随意に、最終状態を統合するように構成されたブール論理を含むことができる。
【０１８４】
例６７では、例１〜例６６の任意の主題が、随意に、状態情報を圧縮するように構成されている並列マシンが、入力シンボルに応じて変化している状態のみを識別する差分ベクトルを出力するように構成されている並列マシンを含むことを含むことができる。
【０１８５】
例６８では、例１〜例６７の任意の主題が、随意に、状態情報を圧縮するように構成されている並列マシンが、出力ベクトルを出力するように構成されている並列マシンを含むことを含むことができ、その出力ベクトルは、並列マシン上で実装された有限状態機械内の最終状態に対する状態情報のみを提供する。
【図１】
2013534660.tif 000003
【図２】
2013534660.tif 000004
【図３】
2013534660.tif 000005
【図４】
2013534660.tif 000006
【図５】
2013534660.tif 000007
【図６】
2013534660.tif 000008
【図７】
2013534660.tif 000009
【図８】
2013534660.tif 000010
【図９】
2013534660.tif 000011
【図１０】
2013534660.tif 000012
【図１１】
2013534660.tif 000013
【図１２】
2013534660.tif 000014
【図１３】
2013534660.tif 000015
【図１４】
2013534660.tif 000016
【図１５】
2013534660.tif 000017
【図１６】
2013534660.tif 000018
【図１７】
2013534660.tif 000019
【図１８】
2013534660.tif 000020
【図１９】
2013534660.tif 000021
【図２０】
2013534660.tif 000022
【国際調査報告】
2013534660.tif 000023
2013534660.tif 000024