(58)【調査した分野】(Int.Cl.,DB名)
カウンタを備えない前記ブロックの前記特定の1つの前記複数の列の特定の1つは、ブール論理セルを備え、前記ブール論理セルは、列内回路およびブロック内回路経由で前記カウンタに選択的に結合する、請求項1に記載のデバイス。
前記FSM格子を備えるサーバ、パーソナルコンピュータ、ワークステーション、ルータ、ネットワークスイッチ、チップテスト装置、ラップトップ、携帯電話、メディアプレーヤー、ゲームコンソール、またはメインフレームコンピュータを備える、請求項1に記載のデバイス。
【発明を実施するための形態】
【0005】
ここで図面を参照すると、
図1は、参照数字10によって一般に示され、プロセッサをベースとしたシステムの実施形態を例示する。システム10は、デスクトップコンピュータ、ラップトップコンピュータ、ページャ、携帯電話、パーソナルオーガナイザー、ポータブルオーディオプレーヤー、制御回路、カメラ等のようなさまざまな種類のいずれかであり得る。システム10はまた、ルータ、サーバ、またはクライアント(例えば、前に記載した種類のコンピュータの1つ)のようなネットワークノードであり得る。システム10は、コピー機、スキャナ、プリンタ、ゲームコンソール、テレビ、セットトップ型ビデオ分配もしくは記録システム、ケーブルボックス、パーソナルデジタルメディアプレーヤー、工場自動化システム、自動車コンピュータシステム、または医療デバイスのような、いくつかの他の部類の電子デバイスであり得る。(本明細書に使用される他の用語の多くのように、システムのこれらの種々の例を記載するために仕様される用語は、いくつかの指示対象を共有し得、従って、リスト化された他の項目によって狭く解釈されるべきではない。)
【0006】
典型的なプロセッサをベースとしたデバイス、例えばシステム10では、マイクロプロセッサのようなプロセッサ12が、システム10におけるシステム機能および要求の処理を制御する。更に、プロセッサ12は、システム制御を共有する複数のプロセッサを備え得る。プロセッサ12は、プロセッサ12が、システム10内もしくはシステム10の外部に記憶され得る命令を実行することによってシステム10を制御するように、システム10における要素のそれぞれに直接的または間接的に結合され得る。
【0007】
本明細書に記載された実施形態に従って、システム10は、プロセッサ12の制御下で動作し得る状態機械エンジン14を含む。状態機械エンジン14は、限定されるものではないが、ミーリー型アーキテクチャ、ムーア型アーキテクチャ、有限状態機械(FSM)、決定論的FSM(DFSM)、ビット並列状態機械(BPSM)等を含む、多数の状態機械アーキテクチャのいずれか1つを用い得る。さまざまなアーキテクチャが記述目的のために使用され得るが、適用はFSMに言及する。しかしながら、当業者は、記載された技法が、さまざまな状態機械アーキテクチャのいずれか1つを使用して用いられ得ることを理解するであろう。
【0008】
以下に更に記述されるように、状態機械エンジン14は、多数の(例えば、1つ以上の)有限状態機械(FSM)格子を含み得る。各FSM格子は、同じデータを並列にそれぞれ受信し解析する複数のFSMを含み得る。更に、FSM格子は、FSM格子のクラスターが同じ入力データを並列に解析し得るように、グループ(例えば、クラスター)に配列され得る。更に、状態機械エンジン14のFSM格子のクラスターは、階層型構造に配列され得、階層型構造の低いレベル上の状態機械格子からの出力は、高いレベル上の状態機械格子への入力として使用され得る。階層型構造を通して直列に状態機械エンジン14の並列FSM格子のクラスターを段階的に接続する(cascading)ことによって、ますます複雑なパターンが、解析され得る(例えば、評価され得る、検索され得る、など)。
【0009】
更に、状態機械エンジン14の階層型並列構成に基づいて、状態機械エンジン14は、速い処理速度を利用するシステムにおけるパターン認識のために用いられ得る。例えば、本明細書に記載された実施形態は、1Gバイト/秒の処理速度でシステムに組み込まれ得る。従って、状態機械エンジン14を利用して、高速メモリデバイスまたは他の外部デバイスからのデータは、種々のパターンについて迅速に解析され得る。状態機械エンジン14は、ほぼ同時に、例えば、単一のデバイスサイクルの間に、いくつかの基準に従うデータストリーム、および、それらのそれぞれの検索用語を解析し得る。状態機械エンジン14のあるレベル上のFSMのクラスター内のFSM格子のそれぞれは、ほぼ同時にデータストリームから同じ検索用語をそれぞれ受信し得、並列FSM格子のそれぞれは、その用語が、処理基準における次の状態に状態機械エンジン14を進めるかどうかを決定し得る。状態機械エンジン14は、比較的多数の基準、例えば、100を超える、110を超える、あるいは10,000を超える基準に従って、用語を解析し得る。それらは並列に動作するので、それらは、データストリームを遅くすること無く、比較的高い帯域幅を有するデータストリーム、例えば、1Gバイト/秒より大きいまたは1Gバイト/秒に概ね等しいデータストリームに基準を適用し得る。
【0010】
一実施形態では、状態機械エンジン14は、データストリームにおける非常に多くのパターンを認識(例えば、検出)するように構成され得る。例えば、状態機械エンジン14は、ユーザまたは他の実在者が解析することを望み得るさまざまな種類のデータストリームの1つ以上におけるパターンを検出するために利用され得る。例えば、状態機械エンジン14は、インターネット上で受信されたパケットまたはセルラー式ネットワーク上で受信された音声もしくはデータなどの、ネットワーク上で受信されたデータのストリームを解析するように構成され得る。一例では、状態機械エンジン14は、スパムまたはマルウェアについてのデータストリームを解析するように構成され得る。データストリームは、シリアルデータストリームとして受信され得、そのシリアルデータストリームでは、データが、意味を持つ順番で、例えば、時間的に、語彙的に、または意味論的に意味のある順番で、受信される。あるいは、データストリームは、並列にまたは順番がバラバラに受信され得、次いで、例えば、インターネット上で受信されたパケットを並べ換えることによって、シリアルデータストリームに変換され得る。いくつかの実施形態では、データストリームは、用語を順次に提示し得るが、用語のそれぞれを表現するビットは、並列に受信され得る。データストリームは、システム10の外部のソースから受信され得、あるいは、メモリ16のようなメモリデバイスに問い合わせることによって、および、メモリ16内に記憶されたデータからデータストリームを形成することによって、形成され得る。他の例では、状態機械エンジン14は、一定の語を綴る文字の順序、遺伝子を指定する遺伝ベースのペアの順序、画像の一部を形成するピクチャもしくはビデオファイルにおけるビットの順序、プログラムの一部を形成する実行可能ファイルにおけるビットの順序、または歌のもしくは話されるフレーズの一部を形成する音声ファイルにおけるビットの順序を認識するように構成され得る。解析されることになるデータのストリームは、バイナリフォーマットまたは他のフォーマット、例えば、十進法、ASCII等におけるデータの複数のビットを含み得る。ストリームは、データを単一数字または複数数字、例えば、いくつかの2進数字で符号化し得る。
【0011】
理解されることになるように、システム10はメモリ16を含み得る。メモリ16は、動的ランダムアクセスメモリ(DRAM)、静的ランダムアクセスメモリ(SRAM)、シンクロナスDRAM(SDRAM)、ダブルデータレートDRAM(DDR SDRAM)、DDR2 SDRAM、DDR3 SDRAM等のような揮発性メモリを含み得る。メモリ16はまた、揮発性メモリと併せて使用されることになる、読み取り専用メモリ(ROM)、PC‐RAM、シリコン‐酸化物‐窒化物‐酸化物‐シリコン(SONOS)メモリ、金属‐酸化物‐窒化物‐酸化物‐シリコン(MONOS)メモリ、ポリシリコン浮遊ゲートをベースとしたメモリ、および/または種々のアーキテクチャの他の種類のフラッシュメモリ(例えば、NANDメモリ、NORメモリ等)のような不揮発性メモリも含み得る。メモリ16は、状態機械エンジン14によって解析されることになるデータを提供し得るDRAMデバイスなどの1つ以上のメモリデバイスを含み得る。そのようなデバイスは、ソリッドステートドライブ(SSD)、マルチメディアメディアカード(MMC)、Secure Digital(SD)カード、コンパクトフラッシュ(登録商標)(CF)カード、または任意の他の適切なデバイスとして呼ばれ得るか、それらを含み得る。更に、そのようなデバイスは、ユニバーサルシリアルバス(USB)、周辺部品相互接続(PCI:Peripheral Component Interconnect)、PCI Express(PCI‐E)、小型コンピュータシステムインターフェース(SCSI)、IEEE1394(Firewire)のような任意の適切なインターフェース、または任意の他の適切なインターフェース経由でシステム10に結合され得ることが理解されるべきである。フラッシュメモリデバイスなどのメモリ16の動作を容易にするために、システム10は、メモリコントローラ(例示されない)を含み得る。理解されることになるように、メモリコントローラは、独立のデバイスであってもよいし、あるいは、それは、プロセッサ12と一体化されてもよい。加えて、システム10は、磁気記憶デバイスなどの外部記憶装置18を含み得る。外部記憶装置はまた、入力データを状態機械エンジン14に提供し得る。
【0012】
システム10は、多数の追加要素を含み得る。例えば、コンパイラ20は、
図8に関してより詳細に記載されるように、状態機械エンジン14をプログラムするために使用され得る。入力デバイス22はまた、ユーザがデータをシステム10に入力することを可能にするためにプロセッサ12に結合され得る。例えば、入力デバイス22は、状態機械エンジン14による後の解析のためにデータをメモリ16の中に入力するために使用され得る。入力デバイス22は、例えば、ボタン、スイッチング要素、キーボード、ライトペン、スタイラス、マウス、および/または音声認識システムを含み得る。ディスプレイなどの出力デバイス24がまた、プロセッサ12に結合され得る。ディスプレイ24は、例えば、LCD、CRT、LED、および/またはオーディオディスプレイを含み得る。それらシステムはまた、インターネットなどのネットワークとインターフェースをとるために、ネットワークインターフェースカード(NIC)などのネットワークインターフェースデバイス26を含み得る。理解されることになるように、システム10は、システム10の用途に応じて、多くの他の構成要素を含み得る。
【0013】
図2〜
図5は、FSM格子30の例を例示する。ある例では、FSM格子30はブロック32のアレイを備える。記載されることになるように、各ブロック32は、FSMにおける複数の状態に対応する複数の選択的に結合可能なハードウェア要素(例えば、プログラム可能な要素および/または特殊目的の要素)を含み得る。FSMにおける状態に類似して、ハードウェア要素は、入力ストリームを解析することができ、入力ストリームに基づいて、ダウンストリームのハードウェア要素を作動することができる。
【0014】
プログラム可能な要素は、多くの異なる機能を実装するようにプログラムされ得る。例えば、プログラム可能な要素は、(
図3および
図4に示される)列38ならびに(
図2および
図3に示される)ブロック32の中に階層的に編成された(
図5に示される)状態機械要素(SME)34、36を含み得る。階層的に編成されたSME34、36間で信号を経路設定するために、(
図2および
図3に示される)ブロック間スイッチング要素40、(
図3および
図4に示される)ブロック内スイッチング要素42、ならびに(
図4に示される)列内スイッチング要素44を含む、プログラム可能なスイッチング要素の階層が使用され得る。
【0015】
以下に記載されるように、スイッチング要素は、経路設定構造およびバッファを含み得る。SME34、36は、FSM格子30によって実装されたFSMの状態に対応することができる。SME34、36は、以下に記載されるようにプログラム可能なスイッチング要素を使用することによって共に結合され得る。従って、FSMは、状態の関数に対応するようにSME34、36をプログラミングすることによって、また、FSMにおける状態間の遷移に対応するようにSME34、36を選択的に共に結合することによって、FSM格子30上に実装され得る。
【0016】
図2は、FSM格子30の例の全体図を例示する。FSM格子30は、プログラム可能なブロック間スイッチング要素40で選択的に共に結合され得る複数のブロック32を含む。ブロック間スイッチング要素40は、導体46(例えば、ワイヤ、トレース等)と、バッファ48および50とを含み得る。ある例では、バッファ48および50は、ブロック間スイッチング要素40への/からの信号の接続とタイミングを制御するために含まれる。以下に更に記載されるように、バッファ48は、ブロック32間に送信されるデータをバッファリングするために提供され得る一方で、バッファ50は、ブロック間スイッチング要素40間に送信されるデータをバッファリングするために提供され得る。加えて、ブロック32は、信号(例えば、データ)を受信するためにおよびデータをブロック32に提供するために入力ブロック52(例えば、データ入力ポート)に選択的に結合され得る。ブロック32はまた、信号をブロック32から外部デバイス(例えば、別のFSM格子30)に提供するために、出力ブロック54(例えば、出力ポート)に選択的に結合され得る。FSM格子30はまた、FSM格子30の上にプログラム(例えば、画像)をロードするためにプログラミングインターフェース56を含むことができる。画像は、SME34、36の状態をプログラム(例えば、設定)することができる。すなわち、画像は、入力ブロック52における所与の入力に一定の方式で反応するようにSME34、36を構成することができる。例えば、SME34、36は、文字「a」が入力ブロック52で受信されると、高信号を出力するように設定され得る。
【0017】
ある例では、レジスタへの書き込みかレジスタからの読み取りがそれぞれの要素にもしくはそれぞれの要素からデータを提供するように、入力ブロック52、出力ブロック54、および/またはプログラミングインターフェース56は、レジスタとして実装され得る。従って、プログラミングインターフェース56に対応するレジスタ内に記憶された画像からのビットは、SME34、36上にロードされ得る。
図2は、ブロック32、入力ブロック52、出力ブロック54、およびブロック間スイッチング要素40間の一定数の導体(例えば、ワイヤ、トレース)を例示するが、他の例では、より少ないかより多くの導体が使用されてもよいことが理解されるべきである。
【0018】
図3は、ブロック32の例を例示する。ブロック32は、プログラム可能なブロック内スイッチング要素42で共に選択的に結合され得る複数の列38を含むことができる。加えて、列38は、ブロック間スイッチング要素40で別のブロック32内の別の列38に選択的に結合され得る。列38は、本明細書において2つのグループ(GOT:groups of two)60として呼ばれる要素の組に編成された複数のSME34、36を含む。ある例では、ブロック32は、16個の列38を備える。
【0019】
図4は、列38の例を例示する。GOT60は、プログラム可能な列内スイッチング要素44によって列38内で他のGOT60および任意の他の要素(例えば、特殊目的の要素58)に選択的に結合され得る。GOT60はまた、ブロック内スイッチング要素42で他の列38における他のGOT60に、あるいは、ブロック間スイッチング要素40で他のブロック32における他のGOT60に結合され得る。ある例では、GOT60は、第1の入力62および第2の入力64、ならびに出力66を有する。
図5を参照にして更に例示されることになるように、第1の入力62は、GOT60の第1のSME34に結合され、第2の入力62は、GOT60の第2のSME34に結合される。
【0020】
ある例では、列38は、第1のおよび第2の複数の列相互接続導体68、70を含む。ある例では、GOT60の入力62、64は、1つ以上の列相互接続導体68、70に結合され得、出力66は、1つの列相互接続導体68、70に結合され得る。ある例では、第1の複数の列相互接続導体68は、列38内の各GOT60の各SME34、36に結合され得る。第2の複数の列相互接続導体70は、列38内の各GOT60の1つのSME34、36だけに結合され得るが、GOT60の他のSME34、36に結合され得ない。ある例では、
図5に関してより良く例示されることになるように、第2の複数の列相互接続導体70の第1の半分は、列38内のSME34、36の第1の半分(各GOT60からの1つのSME34)に結合することができ、第2の複数の列相互接続導体70の第2の半分は、列38内のSME34、36の第2の半分(各GOT60からの他のSME34、36)に結合することができる。第2の複数の列相互接続導体70とSME34、36との間の限定された接続性は、本明細書において「パリティ」として呼ばれる。ある例では、列38はまた、カウンタ、プログラム可能なブール論理セル、ルックアップテーブル、RAM、フィールド・プログラマブル・ゲート・アレイ(FPGA)、特定用途向け集積回路(ASIC)、プログラム可能なプロセッサ(例えば、マイクロプロセッサ)、あるいは特殊目的機能を果たすための他の要素のような、特殊目的の要素58を含むことができる
【0021】
ある例では、特殊目的の要素58は、(本明細書においてカウンタ58としても呼ばれる)カウンタを備える。ある例では、カウンタ58は、12‐ビットプログラム可能減算カウンタを備える。12‐ビットプログラム可能カウンタ58は、カウンティング入力、リセット入力、およびゼロカウント出力を有する。カウンティング入力は、アサートされると、カウンタ58の値を1だけデクリメントする。リセット入力は、アサートされると、カウンタ58に、関連付けられたレジスタから初期値をロードさせる。12‐ビットカウンタ58の場合、12ビット数までが、初期値としてロードされ得る。カウンタ58の値がゼロ(0)にデクリメントされると、ゼロカウント出力がアサートされる。カウンタ58はまた、少なくとも2つの、パルスモードおよび保持モードを有する。カウンタ58がパルスモードに設定されると、カウンタ58がゼロにデクリメントするクロックサイクルの間にゼロカウント出力がアサートされ、次のクロックサイクルではゼロカウント出力は、もはやアサートされない。カウンタ58が保持モードに設定されると、カウンタ58がゼロにデクリメントするクロックサイクルの間にゼロカウント出力は、アサートされ、カウンタ58がアサートされるリセット入力によってリセットされるまで、アサートされたままにある。
【0022】
別の例では、特殊目的の要素58は、ブール論理を備える。いくつかの例では、このブール論理は、FSM格子30における(本明細書に後で記述されるように、FSMの終端ノードに対応する)終端状態SMEから情報を抽出するために使用され得る。抽出された情報は、状態情報を他のFSM格子30に転送するために、ならびに/あるいはFSM格子30を再プログラムするために使用される、または別のFSM格子30を再プログラムするために使用されるプログラミング情報を転送するために、使用され得る。
【0023】
図5は、GOT60の例を例示する。GOT60は、入力62、64を有するとともに、ORゲート76と3‐to‐1マルチプレクサ78に結合されたそれらの出力72、74を有する、第1のSME34および第2のSME36を含む。3‐to‐1マルチプレクサ78は、GOT60の出力66を第1のSME34、第2のSME36、またはORゲート76に結合するように設定され得る。ORゲート76は、GOT60の共通出力66を形成するように出力72、74の両方を共に結合するために使用され得る。ある例では、第1のおよび第2のSME34、36は、第1のSME34の入力62が列相互接続導体68のいくつかに結合され得、第2のSME36の入力64が他の列相互接続導体70に結合され得る、上記のようなパリティを呈する。ある例では、GOT60内の2つのSME34、36が、スイッチング要素79の一方もしくは両方を設定することによって、段階的に接続され得および/またはそれら自体にループを戻され得る。SME34、36は、SME34、36の出力72、74を他のSME34、36の入力62、64に結合することによって、段階的に接続され得る。SME34、36は、出力72、74をそれら自体の入力62、64に結合することによって、ループを戻され得る。従って、第1のSME34の出力72は、第1のSME34の入力62と第2のSME36の入力64の一方にも、または両方にも結合され得ない。
【0024】
ある例では、状態機械要素34、36は、検出線82に並列に結合された、動的ランダムアクセスメモリ(DRAM)に使用されることが多いものなどの、複数のメモリセル80を備える。1つのそのようなメモリセル80は、高いまたは低い値(例えば、1または0)に対応するものなどの、データ状態に設定され得るメモリセルを備える。メモリセル80の出力は、検出線82に結合され、メモリセル80への入力は、データストリーム線84上のデータに基づいて信号を受信する。ある例では、データストリーム線84上の入力は、メモリセル80の1つを選択するために復号化される。選択されたメモリセル80は、それの記憶されたデータ状態を検出線82の上に出力として提供する。例えば、入力ブロック52で受信されたデータは、デコーダ(図示しない)に提供され得、デコーダは、データストリーム線84の1つを選択することができる。ある例では、デコーダは、256本のデータストリーム線84の対応する1つに8‐ビットACSII文字を変換することができる。
【0025】
従って、メモリセル80は、メモリセル80が高い値に設定され、データストリーム線84上のデータがメモリセル80に対応するときに、高信号を検出線82に出力する。データストリーム線84上のデータがメモリセル80に対応するとき、メモリセル80は低い値に設定され、メモリセル80は低信号を検出線82に出力する。検出線82上のメモリセル80からの出力は、検出セル86によって検知される。
【0026】
ある例では、入力線62、64上の信号は、それぞれの検出セル86を活動または非活動状態に設定する。非活動状態に設定される場合、検出セル86は、それぞれの検出線82上の信号に関わらず、それぞれの出力72、74上に低信号を出力する。活動状態に設定される場合、検出セル86は、高信号がそれぞれのSME34、36のメモリセル82の1つから検出されると、それぞれの出力線72、74上に高信号を出力する。活動状態にある場合、検出セル86は、それぞれのSME34、36のメモリセル82のすべてからの信号が低いときに、それぞれの出力線72、74上に低信号を出力する。
【0027】
ある例では、SME34、36は、256個のメモリセル80を含み、各メモリセル80は、異なるデータストリーム線84に結合される。それ故、SME34、36は、データストリーム線84の選択された1つ以上がその上で高信号を有するときに、高信号を出力するようにプログラムされ得る。例えば、SME34は、高く設定された第1のメモリセル80(例えば、ビット0)と、低く設定された全ての他のメモリセル80(例えば、ビット1〜225)を有することができる。それぞれの検出セル86が活動状態にある場合、SME34は、ビット0に対応するデータストリーム線84がその上で高信号を有するときに、出力72上に高信号を出力する。他の例では、SME34は、適切なメモリセル80を高い値に設定することによって、複数のデータストリーム線84の1つがその上で高信号を有するときに、高信号を出力するように設定され得る。
【0028】
ある例では、メモリセル80は、関連付けられたレジスタからビットを読み取ることによって、高いまたは低い値に設定され得る。従って、SME34は、コンパイラ20によって生成された画像をレジスタの中に記憶することによって、また、レジスタ内のビットを関連付けられたメモリセル80の中にロードすることによって、プログラムされ得る。ある例では、コンパイラ20によって生成された画像は、高いおよび低い(例えば、1および0)ビットの2値画像を含む。画像は、SME34、36を段階的に接続することによって、FSMとして動作するようにFSM格子30をプログラムすることができる。例えば、第1のSME34は、検出セル86を活動状態に設定することによって、活動状態に設定され得る。第1のSME34は、ビット0に対応するデータストリーム線84がその上で高信号を有するときに、高信号を出力するように設定され得る。第2のSME36は、非活動状態に最初に設定され得るが、活動中の場合、ビット1に対応するデータストリーム線84がその上で高信号を有するときに、高信号を出力するように設定され得る。第1のSME34および第2のSME36は、第2のSME36の入力64に結合するように第1のSME34の出力72を設定することによって段階的に接続され得る。それ故、高信号が、ビット0に対応するデータストリーム線84上で検知されるとき、第1のSME34は、出力72上で高信号を出力し、第2のSME36の検出セル86を活動状態に設定する。高信号が、ビット1に対応するデータストリーム線84上で検知されるとき、第2のSME36は、別のSME36を作動するためにまたはFSM格子30からの出力のために、出力74上で高信号を出力する。
【0029】
ある例では、単一のFSM格子30が単一の物理デバイス上に実装されるが、他の例では、2つ以上のFSM格子30が、単一の物理デバイス(例えば、物理チップ)上に実装され得る。ある例では、各FSM格子30が、個別データ入力ブロック52、個別出力ブロック54、個別プログラミングインターフェース56、および個別の組のプログラム可能な要素を含むことができる。その上、各組のプログラム可能な要素は、それらの対応するデータ入力ブロック52でデータに反応する(例えば、高または低信号を出力する)ことができる。例えば、第1のFSM格子30に対応する第1の組のプログラム可能な要素は、第1のFSM格子30に対応する第1のデータ入力ブロック52でデータに反応することができる。第2のFSM格子30に対応する第2の組のプログラム可能な要素は、第2のFSM格子30に対応する第2のデータ入力ブロック52に反応することができる。従って、各FSM格子30は、1組のプログラム可能な要素を含み、異なる組のプログラム可能な要素は異なる入力データに反応することができる。同様に、各FSM格子30、およびプログラム可能な要素の対応する組のそれぞれは、個別出力を提供することができる。いくつかの例では、第1のFSM格子30からの出力ブロック54は、第2のFSM格子30についての入力データが、一連のFSM格子30の階層型配列で第1のFSM格子30からの出力データを含むことができるように、第2のFSM格子30の入力ブロック52に結合され得る。
【0030】
ある例では、FSM格子30の上にロードするための画像は、FSM格子30内にプログラム可能な要素、プログラム可能なスイッチング要素、および特殊目的の要素を構成するために複数のビットの情報を備える。ある例では、画像は、一定の入力に基づいて所望の出力を提供するようにFSM格子30をプログラムするためにFSM格子30の上にロードされ得る。出力ブロック54は、データ入力ブロック52におけるデータに対するプログラム可能な要素の反応に基づいてFSM格子30から出力を提供することができる。出力ブロック54からの出力は、所与のパターンの一致を示す単一のビット、複数のパターンへの一致および非一致を示す複数のビットを含む語、ならびに所与の瞬間における全てのまたは一定のプログラム可能な要素の状態に対応する状態ベクトルを含むことができる。記載されるように、多数のFSM格子30は、パターン認識(例えば、会話認識、画像認識等)信号処理、画像化、コンピュータビジョン、暗号法、および他のものなどのデータ解析を実行するように、状態機械エンジン14などの状態機械エンジンに含まれ得る。
【0031】
図6は、FSM格子30によって実装され得る有限状態機械(FSM)のモデル例を例示する。FSM格子30は、FSMの物理的実装として構成され(例えば、プログラムされ)得る。FSMは、1つ以上の根ノード92を含有する、図形90(例えば、有向グラフ、無向グラフ、擬グラフ)として表現され得る。根ノード92に加えて、FSMは、1つ以上の端部98を通して根ノード92や他の標準ノード94に接続されるいくつかの標準ノード94および終端ノード96ででき得る。ノード92、94、96は、FSMにおける状態に対応する。端部98は、状態間の遷移に対応する。
【0032】
ノード92、94、96のそれぞれは、活動または非活動状態にあり得る。非活動状態にある場合、ノード92、94、96は、入力データに反応(例えば、応答)しない。活動状態にある場合、ノード92、94、96は、入力データに反応することができる。アップストリームノード92、94は、入力データが、アップストリームノード92、94とダウンストリームノード94、96との間の端部98によって指定された基準に一致するときに、ノードからダウンストリームのノード94、96を作動することによって入力データに反応することができる。例えば、文字「b」を指定する第1のノード94は、第1のノード94が活動中であるときに端部98によって第1のノード94に接続された第2のノード94を作動することになり、文字「b」が入力データとして受信される。本明細書に使用される際、「アップストリーム」は、1つ以上のノード間の関係のことを言い、ここで、1つ以上の他のノードのアップストリーム(あるいはループまたはフィードバック構成の場合におけるそれ自体のアップストリーム)の第1のノードは、第1のノードが1つ以上の他のノードを作動することができる(あるいはループの場合にそれ自体を作動することができる)状況のことを言う。同様に、「ダウンストリーム」は、1つ以上の他のノードのダウンストリーム(あるいはループの場合におけるそれ自体のダウンストリーム)の第1のノードが1つ以上の他のノードによって作動され得る(あるいはループの場合にそれ自体によって作動され得る)関係のことを言う。従って、用語「アップストリーム」および「ダウンストリーム」は、1つ以上のノード間の関係を言うために本明細書において使用されるが、これらの用語は、ノード間のループまたは他の非線形パスの使用を妨げるものではない。
【0033】
図形90では、根ノード92は、最初に作動され得、入力データが根ノード92からの端部98に一致するときにダウンストリームノード94を作動することができる。ノード94は、入力データがノード94からの端部98に一致するときにノード96を作動することができる。図形90全体を通してノード94、96は、入力データが受信される際にこの方式で作動され得る。終端ノード96は、入力データによる興味対象の順序の一致に対応する。従って、終端ノード96の作動は、興味対象の順序が入力データとして受信されていることを示す。パターン認識機能を実装するFSM格子30との関連において、終端ノード96に到着することは、興味対象の特定のパターンが入力データにおいて検出されていることを示すことができる。
【0034】
ある例では、各根ノード92、標準ノード94、および終端ノード96は、FSM格子30におけるプログラム可能な要素に対応することができる。各端部98は、プログラム可能な要素間の接続に対応することができる。それ故、別の標準ノード94または終端ノード96に遷移する(例えば、別の標準ノード94または終端ノード96に接続する端部98を有する)標準ノード94は、別のプログラム可能な要素に遷移する(例えば、別のプログラム可能な要素に出力を提供する)プログラム可能な要素に対応する。いくつかの例では、根ノード92は、対応するプログラム可能な要素を有さない。
【0035】
FSM格子30がプログラムされると、プログラム可能な要素のそれぞれはまた、活動または非活動状態にあり得る。所与のプログラム可能な要素は、非活動中のとき、対応するデータ入力ブロック52で入力データに反応しない。活動中のプログラム可能な要素は、データ入力ブロック52で入力データに反応することができ、入力データがプログラム可能な要素の設定に一致するときにダウンストリームのプログラム可能な要素を作動することができる。プログラム可能な要素が終端ノード96に対応する場合、プログラム可能な要素は、一致の指示を外部デバイスに提供するために出力ブロック54に結合され得る。
【0036】
プログラミングインターフェース56経由でFSM格子30の上にロードされた画像は、所望のFSMがデータ入力ブロック52におけるデータへの反応に基づいてノードの連続した作動を通して実装されるように、プログラム可能な要素および特殊目的の要素、ならびにプログラム可能な要素と特殊目的の要素との間の接続を構成することができる。ある例では、プログラム可能な要素は、単一のデータサイクル(例えば、単一の文字、1組の文字、単一のクロックサイクル)について活動中のままであり、次いで、アップストリームのプログラム可能な要素によって再び作動されない限り非活動中になる。
【0037】
終端ノード96は、過去のイベントの圧縮された履歴を記憶するように考慮され得る。例えば、終端ノード96に到達することを必要とされた入力データの1つ以上のパターンは、その終端ノード96の作動によって表現され得る。ある例では、終端ノード96によって提供された出力は2値であり、すなわち、出力は、興味対象のパターンが一致しているか否かを示す。図形90における標準ノード94に対する終端ノード96の割合は、かなり小さい可能性がある。換言すれば、高い複雑性がFSMにあり得るが、FSMの出力は、比較すると小さい可能性がある。
【0038】
ある例では、FSM格子30の出力は、状態ベクトルを備えることができる。状態ベクトルは、FSM格子30のプログラム可能な要素の(例えば、作動されたまたは作動されていない)状態を備える。ある例では、状態ベクトルは、終端ノード96に対応するプログラム可能な要素についての状態を含む。それ故、出力は、図形90の全ての終端ノード96によって提供された指示を収集したものを含むことができる。状態ベクトルは、各終端ノード96によって提供された2進法指示が1ビットの語を含む語として表現され得る。終端ノード96のこの符号化は、FSM格子30について検出状態(例えば、興味対象の順序が検出されているかどうか、また、興味対象のどの順序が検出されているか)の効率的な指示を提供することができる。別の例では、状態ベクトルは、プログラム可能な要素が終端ノード96に対応していようとしていなかろうと、全てのまたはサブの組のプログラム可能な要素の状態を含むことができる。
【0039】
上述のように、FSM格子30は、パターン認識機能を実装するようにプログラムされ得る。例えば、FSM格子30は、入力データにおける1つ以上のデータ順序(例えば、署名、パターン)を認識するように構成され得る。興味対象のデータ順序がFSM格子30によって認識される場合、その認識の指示は、出力ブロック54に提供され得る。ある例では、パターン認識は、例えば、マルウェアまたはネットワークデータにおける他の情報を識別するために、一列の記号(例えば、ASCII文字)を認識することができる。
【0040】
図7は、階層型構造100の例を例示し、ここで、FSM格子30の2つのレベルが直列に結合され、データを解析するために使用される。特に、例示された実施形態では、階層型構造100は、直列に配列された第1のFSM格子30Aおよび第2のFSM格子30Bを含む。各FSM格子30は、データ入力を受信するためのそれぞれのデータ入力ブロック52、プログラミング信号を受信するためのプログラミングインターフェースブロック56および出力ブロック54を含む。
【0041】
第1のFSM格子30Aは、入力データ、例えば、データ入力ブロックにおける生データを受信するように構成される。第1のFSM格子30Aは、上記したように入力データに反応し、出力ブロックに出力を提供する。第1のFSM格子30Aからの出力は、第2のFSM格子30Bのデータ入力ブロックに送信される。次いで、第2のFSM格子30Bは、第1のFSM格子30Aによって提供された出力に基づいて反応することができ、階層型構造100の対応する出力信号102を提供することができる。直列の2つのFSM格子30Aおよび30Bのこの階層型結合は、圧縮された語で過去のイベントに関する情報を第1のFSM格子30Aから第2のFSM格子30Bに転送する手段を提供する。転送される情報は、効率的に、第1のFSM格子30Aによって記録された複雑なイベントの要約(例えば、興味対象の順序)とすることができる。
【0042】
図7に示されるFSM格子30A、30Bの2つのレベル階層100は、2つの独立プログラムが同じデータストリームに基づいて動作することを可能にする。2段式階層は、異なる領域としてモデル化された生物学的脳における視覚認識に類似することができる。このモデル下では、領域は、それぞれ、類似の計算機能(パターン一致)を実行するが異なるプログラム(署名)を使用する、効率的に異なるパターン認識エンジンである。複数のFSM格子30A、30Bを共に接続することによって、データストリーム入力についての増加された知識が取得され得る。
【0043】
(第1のFSM格子30Aによって実装された)第1のレベルの階層は、例えば、生データストリーム上で直接的に処理を実行することができる。すなわち、生データストリームは、第1のFSM格子30Aの入力ブロック52で受信され得、第1のFSM格子30Aのプログラム可能な要素は、生データストリームに反応することができる。(第2のFSM格子30Bによって実装された)第2のレベルの階層は、第1のレベルからの出力を処理することができる。すなわち、第2のFSM格子30Bは、第2のFSM格子30Bの入力ブロック52で第1のFSM格子30Aの出力ブロック54からの出力を受信し、第2のFSM格子30Bのプログラム可能な要素は、第1のFSM格子30Aの出力に反応することができる。従って、この例では、第2のFSM格子30Bは、入力として生データストリームを受信するのではなくて、むしろ、第1のFSM格子30Aによって決定されるような生データストリームによって一致された様に興味対象のパターンの指示を受信する。第2のFSM格子30Bは、第1のFSM格子30Aからの出力データストリームにおけるパターンを認識するFSMを実装することができる。
【0044】
図8は、FSMを実装するために、格子30のようなFSM格子をプログラムするように構成された画像にソースコードを変換するコンパイラのための方法110の例を例示する。方法110は、ソースコードを構文ツリーに構文解析すること(ブロック112)、構文ツリーをオートマトンに変換すること(ブロック114)、オートマトンを最適化すること(ブロック116)、オートマトンをネットリストに変換すること(ブロック118)、ネットリストをハードウェア上に配置すること(ブロック120)、ネットリストを経路設定すること(ブロック122)、および結果として生じる画像を発行すること(ブロック124)を含む。
【0045】
ある例では、コンパイラ20は、ソフトウェア開発者が、FSM格子30上にFSMを実装するために画像を生成することを可能にするアプリケーションプログラミングインターフェース(API)を含む。コンパイラ20は、FSM格子30をプログラムするように構成される画像に、ソースコードにおける正規表現の入力設定を変換するための方法を提供する。コンパイラ20は、フォンノイマンアーキテクチャを有するコンピュータについての命令によって実装され得る。これらの命令は、コンピュータ上のプロセッサ12にコンパイラ20の機能を実装させることができる。例えば、命令は、プロセッサ12によって実行されると、プロセッサ12に、プロセッサ12にアクセス可能なソースコード上でブロック112、114、116、118、120、122、および124に記載されるような動作を実行させることができる。
【0046】
ある例では、ソースコードは、記号のグループ内の記号のパターンを識別するための検索文字列を記述する。検索文字列を記述するために、ソースコードは、複数の正規表現(regex)を含むことができる。正規表現は、記号検索パターンを記述するための文字列であり得る。正規表現は、プログラミング言語、テキストエディタ、ネットワークセキュリティ、および他のものなどの種々のコンピュータドメインにおいて広く使用される。ある例では、コンパイラによってサポートされる正規表現は、非構造化データの解析のための基準を含む。非構造化データは、自由形式であるデータであって、データ内の語に適用される索引付けが無いデータを含むことができる。語は、データ内に、印刷可能および印刷不可能の、任意の組み合わせのバイトを含むことができる。ある例では、コンパイラは、Perl(例えば、Perl互換の正規表現(PCRE))、PHP、Java(登録商標)、および.NET言語を含む正規表現を実装するための複数の異なるソースコード言語をサポートすることができる。
【0047】
ブロック112では、コンパイラ20は、異なる種類の演算子がソースコードによって実装された異なる機能(例えば、ソースコードにおいて正規表現によって実装された異なる機能)に対応する、関係的に接続された演算子の配列を形成するためにソースコードを構文解析することができる。ソースコードを構文解析することは、ソースコードの一般的表現を生成することができる。ある例では、一般的表現は、構文ツリーとして知られるツリーグラフの形態でソースコードにおける正規表現の符号化された表現を含む。本明細書に記載された例は、(「抽象構文ツリー」としても知られる)構文ツリーのような配列を参照するが、他の例では、具象構文ツリーまたは他の配列が使用され得る。
【0048】
上述のように、コンパイラ20は、ソースコードの複数の言語をサポートすることができるので、構文解析は、言語に関わらず、非言語特定表現、例えば構文ツリーに、ソースコードを変換する。それ故、コンパイラ20による更なる処理(ブロック114、116、118、120)は、ソースコードの言語に関わらず、共通入力構造から動くことができる。
【0049】
上記のように、構文ツリーは、関係的に接続された複数の演算子を含む。構文ツリーは、複数の異なる種類の演算子を含むことができる。すなわち、異なる演算子は、ソースコードにおいて正規表現によって実装された異なる機能に対応することができる。
【0050】
ブロック114では、構文ツリーは、オートマトンに変換される。オートマトンは、FSMのソフトウェアモデルを備え、従って、決定論的または非決定論的として分類され得る。決定論的オートマトンは、所与の時間に実行の単一のパスを有する一方で、非決定論的オートマトンは、実行の複数の同時発生パスを有する。オートマトンは、複数の状態を備える。構文ツリーをオートマトンに変換するために、演算子と構文ツリーにおける演算子間の関係とは、状態間の遷移を伴う状態に変換される。ある例では、オートマトンは、FSM格子30のハードウェアに部分的に基づいて変換され得る。
【0051】
ある例では、オートマトンについての入力記号は、アルファベットの記号、0〜9までの数字、および他の印刷可能文字を含む。ある例では、入力記号は、0から255までを含んだバイト値によって表現される。ある例では、オートマトンは、グラフのノードが状態の組に対応する有向グラフとして表現され得る。ある例では、入力記号α上の状態pから状態qへの遷移、すなわち、δ(p,α)は、ノードpからノードqへの有向接続によって示される。ある例では、オートマトンの逆転は、いくつかの記号α上の各遷移p→qが同じ記号α上でq→pに逆転される、新たなオートマトンを作り出す。逆転において、開始状態は最終状態になり、最終状態は開始状態になる。ある例では、オートマトンによって認識された(例えば、一致した)言語は、オートマトンに連続して入力されると最終状態に到達することになる全ての可能な文字列の組である。オートマトンによって認識された言語における各文字列は、開始状態から1つ以上の最終状態までパスをトレースする。
【0052】
ブロック116では、オートマトンが構築された後、オートマトンは、特に、それの複雑さおよびサイズを削減するために、最適化される。オートマトンは、余剰状態を組み合わせることによって最適化され得る。
【0053】
ブロック118では、最適化されたオートマトンがネットリストに変換される。オートマトンをネットリストに変換することは、FSM格子30上のハードウェア要素(例えば、SME34、36、他の要素)にオートマトンの各状態をマップし、ハードウェア要素間の接続を決定する。
【0054】
ブロック120では、ネットリストは、ネットリストの各ノードに対応する対象デバイス(例えば、SME34、36、特殊目的の要素58)の特定のハードウェア要素を選択するために配置される。ある例では、配置は、FSM格子30の一般入力および出力制約に基づいて、各特定のハードウェア要素を選択する。
【0055】
ブロック122では、配置されたネットリストは、ネットリストによって記述された接続を実現するように選択されたハードウェア要素を共に結合するために、プログラム可能なスイッチング要素(例えば、ブロック間スイッチング要素40、ブロック内スイッチング要素42、および列内スイッチング要素44)についての設定を決定するように経路設定される。ある例では、プログラム可能なスイッチング要素のための設定は、選択されたハードウェア要素を接続するために使用されることになるFSM格子30の特定の導体、および、プログラム可能なスイッチング要素のための設定を決定することによって決定される。経路設定は、ブロック120におけるその配置のハードウェア要素間の接続のより多くの特定の制限を考慮に入れることができる。従って、経路設定は、FSM格子30上の導体の実際の制限を与えられた適切な接続をするために、大域的配置によって決定されるようにハードウェア要素のいくつかの位置を調整し得る。
【0056】
ネットリストが一旦配置され経路設定されると、配置され経路設定されたネットリストは、FSM格子30のプログラミングのために複数のビットに変換され得る。複数のビットは、画像として本明細書において呼ばれる。
【0057】
ブロック124では、画像が、コンパイラ20によって発行される。画像は、FSM格子30の特定のハードウェア要素をプログラミングするための複数のビットを備える。画像が複数のビット(例えば、0および1)を備える実施形態では、画像は2値画像として呼ばれ得る。ビットは、プログラムされたFSM格子30が、ソースコードによって記述された機能性を有するFSMを実装するように、SME34、36、特殊目的の要素58、およびプログラム可能なスイッチング要素の状態をプログラムするためにFSM格子30の上にロードされ得る。配置(ブロック120)および経路設定(ブロック122)は、オートマトンにおける特定の状態にFSM格子30における特定の位置で特定のハードウェア要素をマップすることができる。従って、画像におけるビットは、(複数の)所望の機能を実装するために特定のハードウェア要素をプログラムすることができる。ある例では、画像は、機械コードをコンピュータで読み取り可能な媒体に保存することによって発行され得る。別の例では、画像は、ディスプレイデバイス上に画像を表示することによって発行され得る。更に別の例では、画像は、画像を別のデバイス、例えばFSM格子30の上に画像をロードするためのプログラミングデバイスなどに、送信することによって発行され得る。なお別の例では、画像は、FSM格子(例えば、FSM格子30)の上に画像をロードすることによって発行され得る。
【0058】
ある例では、画像は、SME34、36および他のハードウェア要素に画像からビット値を直接的にロードすることによって、あるいは、画像を1つ以上のレジスタの中にロードし、次いで、ビット値をレジスタからSME34、36および他のハードウェア要素に書き込むことによって、FSM格子30の上にロードされ得る。ある例では、FSM格子30のハードウェア要素(例えば、SME34、36、特殊目的の要素58、プログラム可能なスイッチング要素40、42、44)は、プログラミングデバイスおよび/またはコンピュータが、1つ以上のメモリアドレスに画像を書き込むことによってFSM格子30の上に画像をロードすることができるように、メモリマップされる。
【0059】
本明細書に記載された方法例は、機械またはコンピュータに少なくとも一部実装され得る。いくつかの例は、上記例に記載されるような方法を実行するために電子デバイスを構成するように動作可能な命令で符号化されたコンピュータで読み取り可能な媒体または機械で読み取り可能な媒体を含むことができる。そのような方法の実装は、コード、例えばマイクロコード、アセンブリ言語コード、高水準言語コード、または同様のものなどを含むことができる。そのようなコードは、種々の方法を実行するためのコンピュータで読み取り可能な命令を含むことができる。コードは、コンピュータプログラム製品の一部を形成し得る。更に、コードは、実行の間または他の時間に、1つ以上の揮発性もしくは不揮発性のコンピュータで読み取り可能な媒体上に有形に記憶され得る。これらのコンピュータで読み取り可能な媒体は、限定されるものではないが、ハードディスク、取り外し可能な磁気ディスク、取り外し可能な光ディスク(例えば、コンパクトディスクやデジタルビデオディスク)、磁気カセット、メモリカードまたはスティック、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、および同様のものを含み得る。
【0060】
ここで
図9を参照にすると、状態機械エンジン14の実施形態が例示される。前に記載したように、状態機械エンジン14は、データバス上のメモリ16などのソースからデータを受信するように構成される。例示された実施形態では、データは、DDR3バスインターフェース130などの、バスインターフェースを通して状態機械エンジン14に送信され得る。DDR3バスインターフェース130は、1Gバイト/秒を超えるか1Gバイト/秒に等しい速度でデータを交換することが可能であり得る。理解されることになるように、解析されることになるデータのソースに応じて、バスインターフェース130は、データソースにおよびデータソースから状態機械エンジン14にデータを交換するための任意の適切なバスインターフェース、例えばNANDフラッシュインターフェース、PCIインターフェース等であり得る。前に記載したように、状態機械エンジン14は、データを解析するように構成された1つ以上のFSM格子30を含む。各FSM格子30は、2つの半分の格子に分割され得る。例示された実施形態では、格子30が48KのSMEを含むように、半分の格子のそれぞれは24KのSME(例えば、SME34、36)を含み得る。格子30は、
図2〜5に関して前に記載したように配列された、任意の所望の数のSMEを備え得る。更に、1つのFSM格子30だけが例示されるが、状態機械エンジン14は、前に記載したように、複数のFSM格子30を含み得る。
【0061】
解析されることになるデータは、バスインターフェース130で受信され得、多数のバッファおよびバッファインターフェースを通してFSM格子30に伝送され得る。例示された実施形態では、データパスは、データバッファ132、プロセスバッファ134およびランク間(IR:inter‐rank)バスならびにプロセスバッファインターフェース136を含む。データバッファ132は、解析されることになるデータを受信し一時的に記憶するように構成される。一実施形態では、2つのデータバッファ132(データバッファAおよびデータバッファB)がある。データは、2つのデータバッファ132の一方内に記憶され得る一方で、データは、FSM格子30による解析のために、他のデータバッファ132から空にされる。例示された実施形態では、データバッファ132は、それぞれ32Kバイトであり得る。IRバスおよびプロセスバッファインターフェース136は、プロセスバッファ134へのデータの転送を容易にし得る。IRバスおよびプロセスバッファ136は、データが順番にFSM格子30によって処理されることを確実にする。IRバスおよびプロセスバッファ136は、データが、正しい順番で受信され解析されるように、データの交換、タイミング情報、パッキング命令等を調整し得る。一般に、IRバスおよびプロセスバッファ136は、FSM格子30の論理ランクを通して並列に複数のデータ組を解析することを可能にする。
【0062】
例示された実施形態では、状態機械エンジン14はまた、状態機械エンジン14を通した大量のデータの転送を支援するために非圧縮器138および圧縮器140を含む。圧縮器140および非圧縮器138は、データが、データ転送時間を最小限にするために圧縮されるように、連動して働く。解析されることになるデータを圧縮することによって、バス利用時間が最小限にされ得る。コンパイラ20によって提供された情報に基づいて、マスクが、情報を提供するために状態機械エンジン14に提供され得、どの状態機械は使用されない可能性があるかの情報を提供する。圧縮器140および非圧縮器138はまた、バースト長が変動するデータを取り扱うように構成され得る。圧縮されたデータをパディングすることおよびそれぞれ圧縮された領域が終わるときに関してインジケータを含むことによって、圧縮器140は、状態機械エンジン14を通した全体の処理速度を向上し得る。圧縮器140および非圧縮器138はまた、FSM格子30による解析後に、一致結果データを圧縮したり非圧縮したりするために使用され得る。
【0063】
前に記載したように、FSM格子30の出力は、状態ベクトルを備えることができる。状態ベクトルは、FSM格子30のプログラム可能な要素の(例えば、作動されたまたは作動されていない)状態を備える。各状態ベクトルは、更なる階層型処理や解析のために状態ベクトルキャッシュメモリ142内に一時的に記憶され得る。すなわち、各状態機械の状態は、最終状態が更なる解析において使用され得るように、記憶され得る一方で、新たなデータ組の再プログラミングおよび/または更なる解析のために状態機械を解放する。典型的なキャッシュのように、状態ベクトルキャッシュメモリは、例えば、ここではFSM格子30による、迅速な検索および使用のために、情報、ここでは状態ベクトルの記憶を可能にする。状態ベクトルメモリバッファ、状態ベクトル中間入力バッファ146および状態ベクトル中間出力バッファ148などの、追加のバッファは、状態ベクトルの高速解析や記憶に適応させるために、状態ベクトルキャッシュメモリ142と併せて利用され得る一方で、状態機械エンジン14を通したパケット伝送プロトコルに順守する。
【0064】
興味対象の結果がFSM格子30によって一旦作り出されると、一致結果が、一致結果メモリ150内に記憶され得る。すなわち、一致(例えば、興味対象のパターンの検出)を示す「一致ベクトル」が、一致結果メモリ150内に記憶され得る。次いで、一致結果は、例えば、プロセッサ12へのバスインターフェース130上の伝送のために一致バッファ152に送信され得る。前に記載したように、一致結果は圧縮され得る。
【0065】
追加のレジスタおよびバッファは、状態機械エンジン14内にもまた提供され得る。例えば、状態機械エンジン14は、コントローラおよび状況レジスタ154を含み得る。加えて、復元およびプログラムバッファ156は、最初にFSM格子30をプログラミングする際に使用するために、あるいは、解析の間にFSM格子30内に機械の状態を復元するために、提供され得る。同様に、保存および修復マップバッファ158がまた、セットアップや使用についての保存および修復マップの記憶のために提供され得る。
【0066】
記述したように、いくつかの実施形態では、ブロック32における列38のそれぞれは、カウンタ、プログラム可能なブール論理セル、ルックアップテーブルRAM、フィールド・プログラマブル・ゲート・アレイ(FPGA)、特定用途向け集積回路(ASIC)、プログラム可能なプロセッサ(例えば、マイクロプロセッサ)、あるいは特殊目的の機能を果たすための他の要素のような、1つ以上の特殊目的の要素58を含み得る。特殊目的の要素58は、各列38における1つ以上のGOT60で列内スイッチング要素に接続され得る。その上、各列38からの出力は、ブロック内スイッチング要素42に接続され得、その要素42は、ブロック間スイッチング要素40によって接続され得る。
【0067】
図10は、それぞれが特殊目的の要素58を含む列38を有するブロック32の例の例示である。例えば、ブロック32における特殊目的の要素58は、カウンタセル58Aおよびブール論理セル58Bを含み得る。0から4までの列位置における列38だけが
図10に例示される(例えば、38Aから38Eまでラベル付けされる)が、各ブロック32は、任意の数の列38(例えば、16個の列38)を有し得、1つ以上の特殊目的の要素58は、列38のそれぞれにおいて構成され得る。例えば、一実施形態では、カウンタセル58Aは、一定の列38に(例えば、列位置0、4、8、および12に)構成され得る一方で、ブール論理セル58Bは、16個の列38の残りに(例えば、列位置1、2、3、5、6、7、9、10、11、13、14、15、および16に)構成され得る。GOT60および特殊目的の要素58は、列内スイッチング要素44を通して各列38に選択的に結合され(例えば、選択的に接続され)得、ここで、ブロック32の各列38は、ブロック内スイッチング要素42を通してブロック32の他の列38のいずれかと選択的に結合され得る。
【0068】
いくつかの実施形態では、各列38における活動中のGOT60のそれぞれは、1つ以上の条件が検出され(例えば、一致が検出される)かどうかを示す信号を出力し得、列38における特殊目的の要素58は、1つ以上の条件の一定の数量詞が合うかどうかを決定するためにおよび/または条件が検出される回数をカウントするために、GOT60出力を受信し得る。例えば、カウント動作の数量詞は、条件が少なくとも一定回数検出されたかどうかの決定、条件が一定回数を超えずに検出されたかどうかの決定、条件が正確に一定回数検出されたかどうかの決定、および条件が一定範囲の回数内で検出されたかどうかの決定を含み得る。
【0069】
カウンタ58Aおよび/またはブール論理セル58Bからの出力は、より大きな複雑さを有するカウンティングまたは論理を実行するために列内スイッチング要素44およびブロック内スイッチング要素42を通して通信され得る。例えば、カウンタ58Aは、条件が正確な回数検出されたときにだけ出力をアサートするなどのように、数量詞を実装するように構成され得る。ブロック32におけるカウンタ58Aはまた、同時に使用され得、それによって、より多い数の検出された条件をカウントするために組み合わされたカウンタの総ビットカウントを増す。その上、いくつかの実施形態では、カウンタ58Aおよびブール論理セル58Bなどの異なる特殊目的の要素58が、共に使用され得る。例えば、1つ以上のブール論理セル58Bの出力は、ブロック32における1つ以上のカウンタ58Aによってカウントされ得る。
【0070】
カウンタ58Aとブロック32の他の要素との間の接続は、
図10において簡易化されるが、カウンタ58Aは、種々のカウンタ機能を果たすためにアサートされ得る複数の入力を有し得る。
図11に例示されるように、カウンタ58Aは、12‐ビットプログラム可能デクリメントカウンタを備える。本技法に従って、カウント動作は、各カウンタ58Aで実行され得、カウント動作はまた、列38における1つ以上のカウンタ58Aを共に「連鎖させること」によって実行され得る。その上、いくつかの実施形態では、異なる列38におけるカウンタ58Aはまた、共に連鎖され得る。
【0071】
いくつかの実施形態では、カウンタ58Aは、カウントイネーブル入力178、リセット入力180、およびゼロカウント出力176を含み得る。カウンタ58Aは、カウントの初期値がカウンタ58A内にロードされ得る初期値入力160を有し得る。例えば、12‐ビットカウンタ58Aの場合、12‐ビット数までが、関連付けられたレジスタからロードされ得るか、あるいはそうではない場合、初期値としてロードされ得る。いくつかの実施形態では、カウンタ58Aは、カウンタ58Aの初期プログラミングの間、初期値にラッチするために使用され得るロード初期入力162を含み得る。ロード初期入力162が初期値にラッチするために一旦アサートされると、カウンタ58Aのリセットが、ラッチされた初期値をロードすることになる。初期値は、(例えば、プロセッサ12からの)適切なプログラミング信号によって変更され得る。
【0072】
カウントイネーブル入力178は、アサートされると、カウンタ58Aのカウントを1だけデクリメントする。例えば、条件が、列38AにおけるGOT60の1つで検出される場合、GOT60は、関連付けられたカウンタ58Aのカウントイネーブル入力178に高信号を出力し得る。カウントイネーブル入力178をアサートすることによって、カウンタ58Aは、カウントをデクリメントし得る。カウンタ58Aがゼロカウントに一旦デクリメントすると、カウンタ58Aは、一定数の検出された条件がカウントされていることを示すために、列内スイッチ44、ブロック内スイッチ42、および/またはブロック間スイッチ40を通して伝送され得る、ゼロカウント出力176をアサートし得る。
【0073】
カウンタ58Aは、カウンタ58Aによって実行されることになる動作に応じて、カウンタが特定のカウント動作を実行する前にカウンタ58Aにプログラムされ得るロール入力164および保持入力166を含み得る。ロール入力164がアサートされ、保持入力166がアサートされない場合、カウンタ58Aは、ゼロにデクリメントするカウンタ58Aに応答して(例えば、そのデクリメント後に)12‐ビット初期値入力160にラッチされた初期値をロードする。従って、アサートされたロール入力164および非アサートされた保持入力166を有するカウンタ58Aは、追加的なリセット入力無しで初期値にリセットされ得る。ロール入力164は、一定のカウント動作を実行するためにアサートされ得る。例えば、データストリームが第1の数量詞に合うかどうかを決定する(例えば、条件が少なくとも一定回数検出されたかどうかを決定する)ようにカウント動作を実行するために、カウントが一旦ゼロにデクリメントされると、条件の更なる検出は第1の数量詞に合うことに関連していないので、カウント動作は終えられる様に、ロール入力164はアサートされ得る。
【0074】
保持入力166は、アサートされると、(例えば、一旦)ゼロにデクリメントするカウンタ58Aに応答して、ゼロにカウントを保持する。保持入力166がアサートされ、ロール入力164が非アサートされる場合、カウンタ58Aは、カウンタ58Aがリセット入力180でリセットされるまで、ゼロへのデクリメント後にゼロカウント出力176をアサートし得る。保持入力166は、一定の動作を実行するためにアサートされ得る。例えば、データストリームが第2の数量詞に合うかどうかを決定する(例えば、条件が正確に一定回数検出されるかどうかを決定する)ためのカウント動作を実行するために、カウンタ58Aが初期値からゼロに一旦デクリメントされると、保持入力166は、ゼロにカウンタを保持するようにアサートされ得る。カウンタ58Aはゼロカウントを保持するが、ブロック32におけるカウンタ58Aに結合された他のカウンタ58Aは、第2の数量詞に合わないことを示す、条件が任意の更なる回数検出されるかどうかを決定し得る。
【0075】
いくつかの実施形態では、1つ以上のカウンタ58Aは、1つ以上のカウント動作を実行するために共に使用されるように構成され得る。連鎖されたカウンタとして呼ばれる、カウント動作のための1つ以上のカウンタ58Aを使用することは、連鎖されたカウンタのビットサイズを増加し得る。例えば、列位置0、4、8、および12からのブロック32における4つのカウンタ58Aは、48‐ビットカウンタとして連鎖され得る。各カウンタ58Aは、アサートされると、カウンタ58Aが他の連鎖イネーブルド(chain‐enabled)カウンタ58Aの段階的接続の一部であることを可能にする連鎖イネーブル入力168を含み得る。段階的に接続されたカウンタは、低位カウンタがゼロカウントをカウントし高位カウンタに出力し得る順番で構成され得る。高位カウンタは、それがゼロカウントに到達したときに、ゼロカウントを別の高位カウンタ(例えば、マスタカウンタ)に出力し得る。
【0076】
連鎖されたカウンタ動作の例として、(カウンタ(0)、カウンタ(4)、およびカウンタ(8)としてそれぞれ呼ばれる列位置0、4、および8におけるカウンタ58Aは、それらがカウンタの段階的接続において動作するように、アサートされた連鎖イネーブル入力168を有し得る。カウンタ(0)は、最低位カウンタであり得、段階的接続におけるマスタカウンタとして呼ばれ得る。カウンタ(4)は、次の位のものであり得、カウンタ(8)は、段階的接続の最高位カウンタ58Aであり得る。カウンタ58Aは、カウンタ58Aがゼロに到達したときに、カウンタ58Aがそれの初期値をロードする(「繰越す(roll over)」)ことを可能にするアサートされたロール入力164を有し得る。一実施形態では、カウンタ(0)は初期値入力を有し得、カウントイネーブル入力178がアサートされるときにカウントをデクリメントし得る。カウンタ(0)がゼロに一旦デクリメントされていると、カウンタ(0)は、それがゼロにデクリメントされていることを示し得、次の高位カウンタ(4)は、受信繰上げ入力182でこの指示を受信し得る。カウンタ(4)はカウントをデクリメントし得、カウンタ(0)は、それの元の入力値にリセットされ得、ゼロにデクリメントし続けリロードし得、カウンタ(4)は、カウンタ(0)のそれぞれのリロードでカウントをデクリメントする。カウンタ(4)がゼロにデクリメントする場合、カウンタ(4)は、それがゼロにデクリメントされていることを示し得、次の高位カウンタ(8)は、それの繰上げ入力182でこの指示を受信し得る。カウンタ(8)はカウントをデクリメントし得、カウンタ(4)は、それの元の入力値にリセットされ得、ゼロにデクリメントし続けリロードし得、カウンタ(8)は、カウンタ(4)のそれぞれのリロードでカウントをデクリメントする。
【0077】
カウンタ(8)がゼロに一旦デクリメントすると、カウンタ(8)は、それがゼロにデクリメントされていることをカウンタ(4)に示し得、そのカウンタ(4)は、受信結果入力184でこの入力を受信し得る。カウンタ(4)は、最高位カウンタ(8)が十分に一旦デクリメントされると、もはやリセットし得ない。カウンタ(4)が十分に一旦デクリメントされると、カウンタ(4)は、これをマスタカウンタ(0)に示し得、そのマスタカウンタは、結果入力184で入力を受信する。マスタカウンタ(0)は、全ての高位カウンタが十分に一旦デクリメントされると、もはやリセットし得ず、マスタカウンタ(0)は、段階的に接続されたカウント動作の完了を示すために、それのゼロカウント出力176をアサートし得る。
【0078】
その上、いくつかの実施形態では、段階的に接続されたカウンタは、ゼロにデクリメントする低位カウンタが高位カウンタをリセットし得るように、構成され得る。各カウンタは、イネーブルリセット0(ER(0)入力174、ER(1)入力172、およびER(2)入力170を有し得る。ER(0)174、ER(1)172、およびER(2)170入力のそれぞれは、カウンタ58Aが、イネーブルリセット入力位置に対応するカウンタからリセット入力186、188、または190においてリセット信号を受信することによってリセットされ得るように、アサートされ得る。例えば、いくつかの実施形態では、列位置0、4、8、および12におけるカウンタ58Aが段階的に接続される場合、ER0 174、ER1 172、およびER2 170入力は、カウンタ(12)上にアサートされ得る。ER0 174、ER1 172、およびER2 170入力がアサートされる場合、カウンタ(12)は、列位置0におけるカウンタ58Aによってリセット入力0(R(0)入力)190でリセットされ得、列位置4におけるカウンタ58AによってR(1)入力188でリセットされ得、列位置8におけるカウンタ58AによってR(2)入力186でリセットされ得る。従って、いくつかの実施形態では、段階的に接続されたカウンタ動作において、低位カウンタは、低位カウンタがゼロにデクリメントされているたびに高位カウンタをリセットし得る。
【0079】
図10は、1つのカウンタ58Aまたは1つのブールセル58Bを有するように各列38を描写するが、列38は、1つの特殊目的の要素58だけを有することに限定されないことが留意されるべきである。例えば、いくつかの実施形態では、1つ以上の列38は、1つ以上のカウンタ58A、ならびに追加の特殊目的の要素58を有し得る。カウンタ58Aを含む特殊目的の要素58は、列38内の列内スイッチング要素44経由で他の特殊目的の要素58と通信することが可能であり得る。その上、カウンタ58Aは、12‐ビットデクリメントカウンタに限定されない。いくつかの実施形態では、異なるビットサイズの適切なカウンタおよび/または異なる機能を実装するカウンタがまた、使用され得る。
【0080】
発明は、種々の修正および代替の形態が可能であり得るが、特定の実施形態が、図面中に例として示されており、本明細書に詳細に記載されている。しかしながら、発明は、開示された特定の形態に限定されることを意図しないことが理解されるべきである。むしろ、発明は、以下の添付の特許請求の範囲によって定義されるような発明の趣旨や範囲内にある全ての修正、等価物、および代替物を包含するためのものである。