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