JP6181074B2 - ステートマシンにおける検出方法とシステム - Google Patents

ステートマシンにおける検出方法とシステム Download PDF

Info

Publication number
JP6181074B2
JP6181074B2 JP2014547289A JP2014547289A JP6181074B2 JP 6181074 B2 JP6181074 B2 JP 6181074B2 JP 2014547289 A JP2014547289 A JP 2014547289A JP 2014547289 A JP2014547289 A JP 2014547289A JP 6181074 B2 JP6181074 B2 JP 6181074B2
Authority
JP
Japan
Prior art keywords
output
data
input
gate
flip
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2014547289A
Other languages
English (en)
Other versions
JP2015509228A (ja
Inventor
アール. ブラウン,デイビッド
アール. ブラウン,デイビッド
ビー. ノイズ,ハロルド
ビー. ノイズ,ハロルド
Original Assignee
マイクロン テクノロジー, インク.
マイクロン テクノロジー, インク.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by マイクロン テクノロジー, インク., マイクロン テクノロジー, インク. filed Critical マイクロン テクノロジー, インク.
Publication of JP2015509228A publication Critical patent/JP2015509228A/ja
Application granted granted Critical
Publication of JP6181074B2 publication Critical patent/JP6181074B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4498Finite state machines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/94Hardware or software architectures specially adapted for image or video understanding
    • G06V10/955Hardware or software architectures specially adapted for image or video understanding using specific electronic processors

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Logic Circuits (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Advance Control (AREA)

Description

本発明の実施形態は、一般に、電子デバイスに関し、より詳細には、いくつかの実施形態において、パターン認識のためのパラレルな有限ステートマシン (parallel finite state machine)を有する電子デバイスに関する。
従来のフォンノイマン型コンピュータで複雑なパターン認識を行うことは、非効率なことがある。しかしながら、生命体の脳、特に人間の脳は、パターン認識を行うことが得意である。最近の研究は、人間の脳が、新皮質内にある階層的に系統だった一連のニューロン層を用いてパターン認識を行うことを示唆している。この階層の下位層におけるニューロンは、例えば、感覚器官からの「未加工の信号(raw signal)」を分析し、一方、上位層におけるニューロンは、より低いレベルにあるニューロンからの信号出力を分析する。この新皮質内にある階層システムは、おそらくは、脳のその他の領域と相まって、人間が、空間認識や、意識的思考、複雑な言語等の高いレベルの機能を発揮できる複雑なパターン認識を実現していると考えられる。
コンピューティングの分野において、パターン認識という課題は、ますます挑戦しがいのある問題となっている。従来よりも膨大なデータ量がコンピュータ間で伝送され、ユーザが識別を希望するパターンの数が増加している。例えば、スパムやマルウェアは、例えば、特定のフレーズまたはコードの一部等のデータストリーム内のパターンを検索することによって、頻繁に検出される。新しいパターンが、新しい変種(variant)を検索するために実装されるため、パターンの数は、スパム及びマルウェアの多様性とともに増加する。データストリームでこれらの各パターンを検索することは、コンピューティングのボトルネックを形成する場合がある。多くの場合において、データストリームが受信されると、各パターンが1度に1つずつ検索される。システムがデータストリームの次の部分を検索できるようになるまでに起きる遅延は、パターンの数とともに増加する。従って、パターン認識は、データの受信を遅らせる場合がある。
データストリームでパターンを検索するためのハードウェアが設計されているが、このようなハードウェアは、一定の時間内に適切なデータ量を処理することができない場合が多い。データストリームで検索するように構成されたデバイスでは、複数の回路間にデータストリームを分散させることによって、かかるデータストリームで検索を行うものもある。回路は、データストリームがパターンの一部と一致するか否かをそれぞれ判定する。多くの場合、大量の回路が、そのそれぞれがほぼ同時にデータストリームで検索を行い、並行して動作する。しかしながら、生命体の脳以上に効率的にパターン認識を行うことができるシステムはこれまでなかった。そこで、このようなシステムの開発が望まれている。
図1は、本発明の様々な実施形態による、ステートマシンエンジンを有するシステムの1つの実施例を示す。 図2は、本発明の様々な実施形態による、図1のステートマシンエンジンの有限ステートマシン(FSM)ラティス(lattice)の1つの実施例を示す。 図3は、本発明の様々な実施形態による、図2のFSMラティスのブロックの1つの実施例を示す。 図4は、本発明の様々な実施形態による、図3のブロック 行の1つの実施例を示す。 図5は、本発明の様々な実施形態による、図4の行のグループオブツー(group of two)の1つの実施例を示す。 図6は、本発明の様々な実施形態による、有限ステートマシングラフの1つの実施例を示す。 図7は、本発明の様々な実施形態による、FSMラティスによって実装される2段階の階層の1つの実施例を示す。 図8は、本発明の様々な実施形態による、コンパイラがソースコードを図2のFSMラティスのプログラミング用のバイナリファイルに変換する方法の1つの実施例を示す。 図9は、本発明の様々な実施形態による、ステートマシンエンジンを示す。 図10は、本発明の様々な実施形態による、図4の検出セルの1つの実施例を示す。 図11は、本発明の様々な実施形態による、図10の検出セルに結合したルーティングの1つの実施例を示す。 図12は、本発明の様々な実施形態による、図11のイントラグループ(グループ内)回路を示す。 図13は、本発明の様々な実施形態による、図12のマルチプレクサの真偽表を示す。
図面に戻ると、図1は、参照符号10によって一般に示される、プロセッサベースのシステムの実施形態を示す。システム10は、デスクトップコンピュータ、ラップトップコンピュータ、ページャ、携帯電話機、電子手帳、携帯オーディオプレーヤー、制御回路、カメラ等の様々な種類のうちの任意のものであってよい。また、システム10は、ルータ、サーバ、またはクライアント(例えば、先に記載した種類のコンピュータの1つ)等のネットワークノードであってもよい。システム10は、コピー機、スキャナ、プリンタ、ゲーム機、テレビ、セットトップビデオ配信または記録システム、ケーブルボックス、パーソナルデジタルメディアプレーヤ、工場オートメーションシステム、自動車用コンピュータシステム、医療デバイス等のその他の種類の電子デバイスであってもよい(これらのシステムの実施例について記載するために使用した用語は、本明細書において使用するその他の多くの用語と同様に、単なる例示としているものであり、それゆえに、列挙されたその他の項目があるからという理由で狭い意味に解釈されてはならない)。
システム10のような典型的なプロセッサベースのデバイスにおいて、マイクロプロセッサ等のプロセッサ12は、システム10におけるシステム機能やリクエストの処理を制御する。プロセッサ12は、システム制御を共有する複数のプロセッサを更に備えることができる。プロセッサ12は、プロセッサ12が、システム10の内部またはシステム10の外部に保存された命令を実行することによってシステム10を制御するように、システム10における各素子と直接的又は間接的に結合することができる。
本明細書に記載する実施形態によれば、システム10は、プロセッサ12の制御下で動作することができるステートマシンエンジン14を含む。ステートマシンエンジン14は、ミーリ・アーキテクチャ、ムーア・アーキテクチャ、フィニットステートマシン(FSM)、ディターミニスティックFSM、ビットパラレルステートマシン(BPSM)等を含むがこれらに限定されない複数のステートマシンアーキテクチャの任意の1つを採用することができる。様々な種類のアーキテクチャが使用できるが、議論の目的上、ここでの応用として、FSMを指す。しかしながら、当業者は、本明細書に記載する技術が、種々のステートマシンアーキテクチャのうちの任意の1つを使用することによってなされる旨を理解するであろう。
更に以下で論じるように、ステートマシンエンジン14は、いくつかの(例えば1つ以上の)有限ステートマシン(FSM)ラティスを備えることができる。FSMラティスのそれぞれは、その各々が同じデータを並行して受信し分析する複数のFSMを備えていてもよい。更に、FSMラティスは、FSMラティスのクラスターが同じ入力データを並行して分析できるように、グループ(例えばクラスター)で配置することができる。更に、ステートマシンエンジン14のFSMラティスのクラスターは、階層構造の下位レベルのステートマシンラティスからの出力が、上位レベルのステートマシンラティスへの入力として使用できる階層構造に配置することができる。この階層構造を通ってステートマシンエンジン14のパラレルFSMラティスを連続してカスケード接続することにより、複雑さの増したパターンを分析(例えば評価、検索等)することができる。
更に、ステートマシンエンジン14の階層的並行構造に基づいて、高い処理速度を利用するシステムにおいて、パターン認識のためのステートマシンエンジン14を採用することができる。例えば、本明細書に記載する実施形態は、1ギガバイト/秒の処理速度を有するシステムに組み入れることができる。従って、このステートマシンエンジン14を利用して、様々なパターンに対する高速メモリデバイスまたはその他の外部デバイスからのデータが迅速に分析できる。ステートマシンエンジン14は、いくつかの基準とそれぞれの検索語に基づいて、ほぼ同時に、例えばシングルデバイスサイクルの間に、データストリームを分析することができる。ステートマシンエンジン14のレベルのFSMクラスター内にあるFSMラティスのそれぞれが、データストリームからほぼ同時にそれぞれ同じ検索語を受信することができ、パラレルFSMラティスの各々が、処理基準においてその用語によってステートマシンエンジン14が次の状態に進むか否かを判定することができる。ステートマシンエンジン14は、例えば、100を超える、110を超える、或いは10,000を超える相対的に多くの基準に基づいて検索語を分析することができる。並行に動作するため、データストリームの速度を落とすことなく、例えば、ほぼ1ギガバイト/秒以上の相対的に高い帯域幅を有するデータストリームにその基準を適用することができる。
1つの実施形態において、ステートマシンエンジン14は、データストリームにおける多数のパターンを認識(例えば、検出)するように構成することができる。例えば、ステートマシンエンジン14は、ユーザまたはその他のエンティティが分析を希望する1つまたは複数の各種データストリームにおけるパターンを検出するために利用することができる。例えば、ステートマシンエンジン14は、インターネットで受信されるパケットや、携帯電話ネットワークで受信される、音声やデータ等のネットワークで受信されるデータのストリームを分析するように構成することができる。1つの実施例において、ステートマシンエンジン14は、スパムやマルウェアに対するデータストリームを分析するように構成することができる。データストリームは、データが、時間的、語彙的、または意味的に重要な順番等、なんらかの意義を有する順に受信される連続した(シリアル)データストリームとして受信することができる。或いは、データストリームは、並行して、または順不同に受信の後、例えばインターネットで受信したパケットの順番を変えることによって連続したデータストリームに変換することもできる。いくつかの実施形態において、データストリームは、用語を連続して提供できるが、各用語を示すビットを並行に受信することができる。データストリームは、システム10の外部にあるソースから受信したり、メモリ16等のメモリデバイスに問い合わせたり、メモリ16に保存したデータからデータストリームを形成することによって形成することもできる。その他の実施例において、ステートマシンエンジン14は、特定の語を綴る一連の文字、遺伝子を特定する一連の遺伝子塩基対、画像の一部を形成する画像ファイルや映像ファイル内の一連のビット、プログラムの一部を形成する実行ファイル内の一連のビット、歌や話し言葉の一部を形成する音声ファイル内の一連のビットを認識するよう構成することができる。分析されるデータのストリームは、バイナリフォーマットまたは、例えば、ベーステン、ASCII等の複数ビットのデータを含んでもよい。ストリームは、1つのデジットまたは、例えば、いくつかのバイナリデジット等の複数のデジットのデータをコード化することができる。
当業者が理解するように、システム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)、セキュア・デジタル(SD)カード、コンパクト・フラッシュ(CF)カード、またはその他任意の適切なデバイスで称され、またはこれらを含むことができる。更に、これらのデバイスは、ユニバーサル・シリアル・バス(USB)、ペリフェラル・コンポーネント・インターコネクト(PCI)、PCI−エキスプレス(PCI−E)、スモール・コンピュータ・システム・インターフェース(SCSI)、IEEE1394(ファイヤーワイヤー)またはその他の任意の適切なインターフェースを介してシステム10に結合できることが理解されるべきである。フラッシュ・メモリ・デバイス等のメモリ16の動作を容易にするために、システム10は、メモリ・コントローラ(図示しない)を備えることができる。当業者が理解するように、メモリ・コントローラは、独立したデバイスであっても、プロセッサ12と一体化したものであってもよい。また、システム10は、磁気記憶装置等の外部記憶装置18を含むことができる。外部記憶装置は、入力されたデータをステートマシンエンジン14に提供することもできる。
システム10は、複数の追加的素子を含むことができる。例えば、図8に関してより詳細に記載するように、ステートマシンエンジン14をプログラミングするために、コンパイラ20を使用することができる。ユーザがシステム10にデータを入力できるように、入力デバイス22がプロセッサ12に結合していてもよい。例えば、入力デバイス22は、ステートマシンエンジン14が後に分析するために、データをメモリ16に入力するために使用することができる。入力デバイス22は、例えば、ボタン、スイッチング素子、キーボード、ライトペン、タッチペン、マウス及び/または音声認識システムを備えることができる。ディスプレイ等の出力デバイス24も、プロセッサ12に結合することができる。ディスプレイ24は、例えば、LCD、CRT、LED及び/または聴覚ディスプレイを備えることができる。また、このシステムは、インターネット等のネットワークとインターフェースで接続するために、ネットワークインターフェースカード(NIC)等のネットワークインターフェースデバイス26を備えることもできる。当業者が理解するように、システム10は、システム10の用途に応じてその他の多くの構成要素を含むことができる。
図2〜図5は、FSMラティス30の1つの実施例を示す。1つの実施例において、FSMラティス30は、ブロック32のアレイ(array)を備える。後に記載するが、各ブロック32は、FSMの複数の状態に対応する選択的に結合可能な複数のハードウェア素子(例えば、プログラマブル素子及び/または専用素子)を含むことができる。FSM内の状態と同様に、ハードウェア素子は、入力ストリームを分析することができ、この入力ストリームに基づいてダウンストリーム・ハードウェア素子をアクティブ化することができる。
プログラマブル素子は、多くの異なる機能を実装するためにプログラミングすることができる。例えば、プログラマブル素子は、階層的に系統立てられて、行38(図3及び図4に示す)及びブロック32(図2及び図3に示す)を有するステートマシンエンジン(SME)34、36(図5に示す)を含むことができる。階層的に系統立ったSME34とSME36との間の信号をルーティングするために、インターブロックスイッチング素子40(図2及び図3に示す)、イントラブロックスイッチング素子42(図3及び図4に示す)、イントラロースイッチング素子44(図4に示す)等のプログラマブルスイッチング素子の階層を使用することができる。
以下に記載するように、スイッチング素子は、ルーティング構造とバッファとを備えることができる。SME34とSME36は、FSMラティス30によって実装されるFSMの状態に対応することができる。SME34とSME36は、以下に記載するプログラマブルスイッチング素子を使用することによって結合できる。従って、FSMは、状態の機能に対応するようにSME34とSME36とをプログラミングし、FSM内の状態間の遷移に対応するように選択的にSME34とSME36とを結合することによって、FSMラティス30に実装することができる。
図2は、FSMラティス30の1つの例の全体図を示す。FSMラティス30は、プログラマブルインターブロックスイッチング素子40と選択的に結合することができる複数のブロック32を備える。インターブロックスイッチング素子40は、導体46(例えば、電線、配線)や、バッファ48、50を備えてもよい。1つの実施例において、バッファ48、50は、インターブロックスイッチング素子40への信号とインターブロックスイッチング素子40からの信号の接続とタイミングを制御するために備えられる。以下で更に記載するが、バッファ48がブロック32間で送信されるデータをバッファリングするために提供され、バッファ50がインターブロックスイッチング素子40間で送信されるデータをバッファリングするために提供されてもよい。また、ブロック32は、信号(例えばデータ)を受信し、そのデータをブロック32に提供するために、入力ブロック52(例えばデータ入力ポート)と選択的に結合することができる。ブロック32は、信号をブロック32から外部デバイス(例えば、別のFSMラティス30)に提供するために、出力ブロック54(例えばデータ出力ポート)と選択的に結合することもできる。FSMラティス30は、FSMラティス30にプログラム(例えば、画像)をロードするためのプログラミングインターフェース56を備えることもできる。画像は、SME34とSME36の状態をプログラミング(設定)することができる。即ち、画像は、入力ブロック52での所定の入力に対して何らかの形で反応するようにSME34、36を構成することができる。例えば、入力ブロック52で「a」という文字が受信されるとハイ信号を出力するようにSME34、36を設定することができる。
1つの実施例において、入力ブロック52、出力ブロック54及び/またはプログラミングインターフェース56は、レジスタへの書き込みまたはレジスタからの読み出しがそれぞれの素子へ、またはそれぞれの素子からデータを提供するようなレジスタとして実装することができる。従って、プログラミングインターフェース56に対応するレジスタに保存した画像からのビットを、SME34、36にロードすることができる。図2は、ブロック32、入力ブロック52、出力ブロック54、インターブロックスイッチング素子40間の所定数の導体(例えば電線、配線)を示しているが、他の実施例において、より少ない数の、またはより多い数の導体が使用できことを理解すべきである。
図3は、ブロック32の1つの実施例を示す。ブロック32は、プログラマブルイントラブロックスイッチング素子42とともに選択的に結合できる複数の行38を含むことができる。また、行38は、別のブロック32内で別の行38とプログラマブルインターブロックスイッチング素子40とともに選択的に結合することができる。行38は、本明細書でグループオブツー(GOT)60と呼ばれる素子の対に編成される複数のSME34、36を備える。1つの実施例において、ブロック32は、16の行38を備える。
図4は、行38の1つの実施例を示す。GOT60は、プログラマブルイントラロースイッチング素子44によって、その他のGOT60と行38内のその他任意の素子(例えば専用素子58)と選択的に結合することができる。GOT60は、別の行38内で、イントラブロックスイッチング素子42とともにその他のGOT60と結合することができ、または、別のブロック32内で、インターブロックスイッチング素子40とともにその他のGOT60と結合することができる。1つの実施例において、GOT60は、第一及び第二入力62、64と、出力66を有する。後に図5を参照して更に示すが、第一入力62は、GOT60の第一SME34と結合し、第二入力64は、GOT60の第二SME34と結合する。
1つの実施例において、行38は、複数の第一及び第二行相互接続導体68、70を備える。1つの実施例において、GOT60の入力62、64は、1つまたは複数の行相互接続導体68、70に結合することができ、出力66は、1つの行相互接続導体68、70に結合することができる。1つの実施例において、複数の第一行相互接続導体68は、行38の中で、各GOT60のそれぞれのSME34、36に結合することができる。複数の第二行相互接続導体70は、行38の中で、各GOT60のSME34、36の1つとのみ結合することができるが、GOT60の別のSME34、36とは結合することができない。後に図5に関してより詳しく示すが、1つの実施例において、複数の第二行相互接続導体70の前半(first half)は、行38の中で、SME34、36の前半と結合することができ(各GOT60からの1つのSME34)、複数の第二行相互接続導体70の後半は、行38の中で、SME34、36の後半(second half)と結合することができる(各GOT60からの別のSME34、36)。複数の第二行相互接続導体70とSME34、36との間の限定された接続は、本明細書において「パリティ」と呼ばれる。1つの実施例において、行38は、カウンタ、プログラマブルブーリアンロジック素子、ルックアップテーブル、RAM、フィールドプログラマブルゲートアレイ(FPGA)、アプリケーションスペシフィックインテグレーテッドサーキット(ASIC)、プログラマブルプロセッサ(例えば、マイクロプロセッサ)または専用機能を実行するその他の素子等の専用素子58を備えることもできる。
1つの実施例において、専用素子58は、カウンタ(本明細書では、カウンタ58とも呼ぶ)を備える。1つの実施例において、カウンタ58は、12ビットのプログラマブル減算カウンタを備える。12ビットのプログラマブルカウンタ58は、カウント入力、リセット入力、ゼロカウント出力を有する。カウント入力は、アサートされると、カウンタ58の値を1つデクリメントする。リセット入力は、アサートされると、カウンタ58に関連したレジスタから初期値をロードさせる。12ビットのカウンタ58に対して、初期値として12ビット数までロードできる。カウンタ58の値がゼロ(0)までデクリメントされると、ゼロカウント出力がアサートされる。また、カウンタ58は、パルスとホールドという少なくとも2つのモードを有する。カウンタ58がパルスモードに設定されると、カウンタ58がゼロまでデクリメントされるクロックサイクルの間は、ゼロカウント出力がアサートされ、次のクロックサイクルでは、ゼロカウント出力はもはやアサートされなくなる。カウンタ58がホールドモードに設定されると、カウンタ58がゼロまでデクリメントされるクロックサイクルの間は、ゼロカウント出力がアサートされ、カウンタ58がアサートされるリセット入力によってリセットされるまでアサートされたままでいる。
別の実施例において、専用素子58は、ブーリアンロジックを備える。いくつかの実施例において、このブーリアンロジックは、FSMラティス30内の終端状態SME(本明細書で後に論じるようにFSMの終端ノードに対応)からの情報を抽出するために使用することができる。抽出した情報は、状態情報をその他のFSMラティス30に伝送するため、及び/またはFSMラティス30を再度プログラミングするために使用されるプログラミング情報を伝送するため、またはその他のFSMラティス30を再度プログラミングするために使用することができる。
図5は、GOT60の1つの実施例を示す。GOT60は、ORゲート76と3−1マルチプレクサ78とに結合する入力62、64、出力72、74とを有する第一SME34と第二SME36とを備える。3−1マルチプレクサ78は、GOT60の出力66が第一SME34と第二SME36、またはORゲート76のいずれかと結合するよう設定することができる。ORゲート76は、出力72、74の両方と結合してGOT60の共通出力66を形成するために使用することができる。1つの実施例において、第一SME34と第二SME36は、第一SME34の入力62が行相互接続導体68のいくつかと結合し、第二SME34の入力64が別の行相互接続導体70と結合できる、上記のようなパリティを示す。1つの実施例において、GOT60内の2つのSME34、36は、スイッチング素子79のいずれかまたは両方を設定することによってカスケード接続し、及び/または自身にループバックすることができる。SME34、36は、SME34、36の出力72、74をその他のSME34、36の入力62、64と結合することによってカスケード接続することができる。SME34、36は、出力72、74を自身の入力62、64と結合することによって自身にループバックすることができる。従って、SME34の出力72は、第一SME34の入力62と第二SME36の入力64のいずれとも結合できないか、第一SME34の入力62と第二SME36の入力64の一つと結合できるか、または、第一SME34の入力62と第二SME36の入力64双方と結合できる。
1つの実施例において、ステートマシン素子34、36は、検出ライン82と並行に結合した、ダイナミックランダムアクセスメモリ(DRAM)で頻繁に使用される複数のメモリセル80を備える。このようなメモリセル80の1つは、ハイ値またはロウ値(例えば1または0)のいずれかに対応するようなデータ状態に設定できるメモリセルを備える。メモリセル80の出力は検出ライン82と結合し、メモリセル80への入力は、データストリームライン84のデータに基づいて信号を受信する。1つの実施例において、データストリームライン84の入力は復号され、メモリセル80のうちの1つを選択する。選択されたメモリセル80は、出力として保存したデータ状態を検出ライン82に提供する。例えば、入力ブロック52で受信したデータは、デコーダ(図示しない)に提供され、デコーダは、データストリームライン84の1つを選択することができる。1つの実施例において、デコーダは、8ビットのASCII文字を256のデータストリームライン84のうち対応する1つに変換することができる。
従って、メモリセル80は、メモリセル80がハイ値に設定され、データストリームライン84のデータがメモリセル80に対応すると、ハイ信号を検出ライン82へ出力する。データストリームライン84のデータがメモリセル80に対応し、メモリセル80がロウ値に設定されると、メモリセル80は、ロウ信号を検出ライン82へ出力する。検出ライン82のメモリセル80からの出力は、検出セル86によって検知される。
1つの実施例において、入力ライン62、64の信号は、それぞれの検出セル86をアクティブまたは非アクティブのいずれかの状態に設定する。非アクティブな状態に設定されている場合、検出セル86は、ハイ信号が各SME34、36のメモリセル82の1つから検出されると、各出力ライン72、74にハイ信号を出力する。アクティブな状態にある場合、検出セル86は、各SME34、36の全てのメモリセル82からの信号がロウであるとき、各出力ライン72、74にロウ信号を出力する。
1つの実施例において、SME34、36は、256のメモリセル80を備え、各メモリセル80は、異なるデータストリームライン84に結合される。こうして、SME34、36は、選択された1つまたは複数のデータストリームライン84がハイ信号を有している場合、ハイ信号を出力するようプログラミングすることができる。例えば、SME34は、ハイに設定された第一メモリセル80(例えばビット0)及びロウに設定されたその他全てのメモリセル80(例えばビット1〜255)を有することができる。各検出セル86がアクティブな状態にある場合、ビット0に対応するデータストリームライン84がハイ信号を有すると、SME34は、ハイ信号を出力72に出力する。他の実施例において、SME34は、複数のデータストリームライン84の1つが、適切なメモリセル80をハイ値に設定することによってハイ信号を有する場合にハイ信号を出力するよう設定することができる。
1つの実施例において、メモリセル80は、関連するレジスタからビットを読み出すことによってハイ値またはロウ値に設定することができる。従って、SME34は、コンパイラ20によって作成された画像をレジスタに保存し、関連するメモリセル80にレジスタ内のビットをロードすることによってプログラミングすることができる。1つの実施例において、コンパイラ20によって作成された画像は、ハイおよびロウビット(例えば1と0)のバイナリ画像を含む。画像は、SME34、36をカスケード接続することによって、FSMとして作動させるために、FSMラティス30をプログラミングすることができる。例えば、第一SME34は、検出セル86をアクティブな状態に設定することによって設定することができる。ビット0に対応するデータストリームライン84がハイ信号を有する場合、第一SME34は、ハイ信号を出力するよう設定することができる。第二SME36は、最初は非アクティブな状態に設定することができるが、アクティブになると、ビット1に対応するデータストリームライン84がハイ信号を有する場合、ハイ信号を出力するよう設定することができる。第一SME34と第二SME36とは、第一SME34の出力72を第二SME36の入力64と結合するよう設定することによって、カスケード接続することができる。こうして、ハイ信号がビット0に対応するデータストリームライン84上で検知されると、第一SME34は、出力72でハイ信号を出力し、第二SME36の検出セル86をアクティブな状態に設定する。ビット1に対応するデータストリームライン84でハイ信号が検知されると、第二SME36は、別の第二SME36をアクティブ化するため、またはFSMラティス30から出力するために、出力74でハイ信号を出力する。
1つの実施例において、単一のFSMラティス30は、単一の物理デバイスに実装されるが、別の実施例においては、2つ以上のFSMラティス30を単一の物理デバイスに(例えば物理チップ)に実装することができる。1つの実施例において、FSMラティス30の各々は、別個のデータ入力ブロック52、別個のデータ出力ブロック54、別個のプログラミングインターフェース56、別個のプログラマブル素子の1セットを備えることができる。更にプログラマブル素子の各セットは、その対応するデータ入力ブロック52にて、データに反応する(例えばハイ信号やロウ信号を出力する)ことができる。例えば、第一FSMラティス30に対応するプログラマブル素子の第一セットは、第一FSMラティス30に対応する第一データ入力ブロック52で、データに反応することができる。第二FSMラティス30に対応するプログラマブル素子の第二セットは、第二FSMラティス30に対応する第二データ入力ブロック52で、第二データに反応することができる。従って、各FSMラティス30は、異なるセットのプログラマブル素子が異なる入力データに反応することができるプログラマブル素子の1セットを備える。同様に、各FSMラティス30と対応するプログラマブル素子の各セットは、別個の出力を提供することができる。いくつかの実施形態において、第一FSMラティス30からの出力ブロック54は、第二FSMラティス30の入力データが、一連のFSMラティス30の階層的な配置において第一FSMラティス30からの出力データを含むことができるように第二FSMラティス30の入力ブロック52と結合することができる。
1つの実施例において、FSMラティス30にロードするための画像は、FSMラティス内のプログラマブル素子、プログラマブルスイッチング素子、及び専用素子を構成するための複数ビットの情報を含んでいる。1つの実施例において、画像は、特定の入力に基づいて望ましい出力を提供するため、FSMラティス30をプログラミングするために、FSMラティス30にロードすることができる。出力ブロック54は、プログラマブル素子の反応に基づいて、FSMラティス30から、データ入力ブロック52におけるデータへと出力を提供することができる。出力ブロック54からの出力は、所定パターンとの一致を示す単一ビット、複数のパターンとの一致、不一致を示す複数ビットを含むワード、及び、所定の時間における全てまたは特定のプログラマブル素子の状態に対応する状態ベクトルを含むことができる。既に記載したように、パターン認識(例えば、音声認識、画像認識等)、信号処理、画像化、コンピュータビジョン、暗号文等のデータ分析を行うため、複数のFSMラティス30がステートマシンエンジン14等のステートマシンエンジンに備えられていてもよい。
図6は、FSMラティス30によって実装できる有限ステートマシン(FSM)の実施例モデルを示す。FSMラティス30は、FSMの物理的実装として構成する(例えばプログラミングする)ことができる。FSMは、1つ以上のルートノード92を含む図形90(例えば、有向グラフ、無向グラフ、シュードグラフ(pseudograph))として表すこともできる。ルートノード92に加えて、FSMは、1つまたは複数のエッジ98を介してルートノード92と別の標準ノード94に結合したいくつかの標準ノード94、終端ノード96から構成することができる。ノード92、94、96は、FSMにおける状態に対応する。エッジ98は、状態間の遷移に対応する。
ノード92、94、96のそれぞれは、アクティブまたは非アクティブのいずれかの状態とすることができる。非アクティブな状態の場合、ノード92、94、96は、入力データに対して反応(例えば応答)しない。アクティブな状態の場合、ノード92、94、96は、入力データに対して反応することができる。入力データが、アップストリームノード92、94と、ダウンストリームノード94、96との間のエッジ98によって特定される基準に一致すると、アップストリームノード92、94は、ノードからダウンストリームにあるノード94、96をアクティブ化することによって入力データに反応することができる。例えば、文字「b」を特定する第一ノード94は、第一ノード94がアクティブで、文字「b」が入力データとして受信されると、エッジ98によって第一ノード94と結合した第二ノード94をアクティブ化する。本明細書に記載するように、「アップストリーム」とは、1つまたは複数の別のノードのアップストリーム(または、ループ構成やフィードバック構成の場合はそれ自体のアップストリーム)にある第一ノードが、第一ノードが1つまたは複数の別のノードをアクティブ化することができる(または、ループの場合は、それ自体をアクティブ化することができる)状況を指すときの1つまたは複数のノード間の関係を指す。同様に、「ダウンストリーム」とは、1つまたは複数の別のノードのダウンストリーム(または、ループの場合はそれ自体のダウンストリーム)にある第一ノードが、第一ノードが1つまたは複数の別のノードによってアクティブ化される(または、ループの場合は、それ自体によってアクティブ化される)状況を指すときの関係を指す。従って、本明細書では、「アップストリーム」と「ダウンストリーム」という用語は、1つまたは複数のノード間の関係を指すが、これらの用語は、ノード間のループまたは他の非線形パスの使用を排除するものではない。
図形90において、ルートノード92は、最初にアクティブ化され、入力データがルートノード92からのエッジ98と一致すると、ダウンストリームノード94をアクティブ化することができる。ノード94は、入力データがノード94からのエッジ98と一致すると、ノード96をアクティブ化することができる。入力データが受信されると、図形90にある全てのノード94、96は、このようにしてアクティブ化される。終端ノード96は、入力データによって対象となるシーケンスの一致に対応する。従って、終端ノード96のアクティブ化は、対象となるシーケンスが入力データとして受信されたことを示す。パターン認識機能を実装するFSMラティス30の意味合いにおいて、終端ノード96に到達することは、入力データの中で対象となる特定のパターンが検出された旨、示すことができる。
1つの実施例において、ルートノード92、標準ノード94、終端ノード96のそれぞれは、FSMラティス30におけるプログラマブル素子に対応することができる。エッジ98のそれぞれは、プログラマブル素子間の接続に対応することができる。こうして、別の標準ノード94または終端ノード96に遷移する(例えば、別の標準ノード94または終端ノード96に接続するエッジ98を有する)標準ノード94は、別のプログラマブル素子に遷移する(例えば、別のプログラマブル素子に出力を提供する)プログラマブル素子に対応する。いくつかの実施例において、ルートノード92は、対応するプログラマブル素子を有していない。
FSMラティス30がプログラミングされると、各プログラマブル素子は、アクティブか非アクティブのいずれかの状態となることもできる。非アクティブなとき、所定のプログラマブル素子は、対応するデータ入力ブロック52で、入力データに対して反応しない。アクティブなプログラマブル素子は、データ入力ブロック52で、入力データに対して反応することができ、入力データがプログラマブル素子の設定と一致すると、ダウンストリームプログラマブル素子をアクティブ化することができる。プログラマブル素子が、終端ノード96に対応すると、プログラマブル素子は出力54と結合し、外部装置に対して一致している旨を表示することができる。
プログラミングインターフェース56を介してFSMラティス30にロードされた画像は、データブロック入力52で、データに対する反応に基づきノードの連続したアクティブ化を介して望ましいFSMが実装されるように、プログラマブル素子及び専用素子のみならず、プログラマブル素子と専用素子との間の接続をも構成することができる。1つの実施例において、プログラマブル素子は、単一データサイクル(例えば、単一文字、文字一式、単一クロックサイクル)の間、アクティブなままであり、その後、アップストリームプログラマブル素子によって再度アクティブ化されない限りは非アクティブとなる。
終端ノード96は、過去のイベントの圧縮履歴を保存するものと考えることができる。例えば、終端ノード96に到達するために必要な入力データの1つまたは複数のパターンは、その終端ノード96のアクティブ化によって表すことができる。1つの実施例において、終端ノード96によって提供される出力はバイナリであり、即ち、出力は、対象となるパターンが一致したか否かを示す。図形90における終端ノード96の標準ノード94に対する比率はかなり小さくすることができる。言い換えれば、FSMの複雑さが高くても、FSMの出力は比較的小さくすることができる。
1つの実施例において、FSMラティス30の出力は、状態ベクトルを含むことができる。状態ベクトルは、FSMラティス30のプログラマブル素子の状態(例えば、アクティブ化されているか否か)を含む。1つの実施例において、状態ベクトルは、終端ノード96に対応するプログラマブル素子の状態を含む。従って、出力は、図形90の終端ノード96全てによって提供される指示の集合体を含むことができる。状態ベクトルは、ワードとして表され、各終端ノード96によって提供されるバイナリ表示は、1ビットのワードを含む。この終端ノード96のコード化は、FSMラティス30の検出状態(例えば、対象とするシーケンスが検出されたか否か、また、どのような対象シーケンスが検出されたか)の効果的な表示を提供することができる。別の実施例において、状態ベクトルは、プログラマブル素子が終端ノード96に対応するか否かに関わらず、プログラマブル素子全ての、またはサブセットの状態を含むことができる。
上記の通り、FSMラティス30は、パターン認識機能を実装するためにプログラミングすることができる。例えば、FSMラティス30は、入力データにおける1つまたは複数のデータシーケンス(例えば、シグナチャ、パターン)を認識するよう、構成することができる。対象となるデータシーケンスがFSMラティス30によって認識されると、その認識の表示が出力ブロック54においてなされる。1つの実施例において、パターン認識は、例えば、ネットワークデータにおけるマルウェアやその他の情報を識別するために、記号の文字列(例えば、ASCII文字)を認識することができる。
図7は、階層構造100の1つの実施例を示し、この中で2つの段階のFSMラティス30が直列に結合され、データ分析のために使用される。具体的には、図示した実施形態において、階層構造100は、直列に配置された第一FSMラティス30Aと第二FSMラティス30Bとを含む。各FSMラティス30は、それぞれ、データ入力を受信するデータ入力ブロック52とプログラミング信号を受信するプログラミングインターフェースブロック56と、出力ブロック54とを含む。
第一FSMラティス30Aは、データ入力ブロックにおいて、例えば、未加工データ等の入力データを受信するよう構成される。第一FSMラティス30Aは、入力データに対して上記のように反応し、出力ブロックにおいて、出力を提供する。第一FSMラティス30Aからの出力は、第二FSMラティス30Bのデータ入力ブロックに送信される。その後、第二FSMラティス30Bは、第一FSMラティス30Aによって提供される出力に基づいて反応し、階層構造100の対応する出力信号102を提供する。この直列の2つのFSMラティス30A、30Bの階層的結合は、第一FSMラティス30Aから第二FSMラティス30Bへの圧縮ワードにおける過去のイベントに関する情報を伝送する手段を提供する。伝送された情報は、効率的に、第一FSMラティス30Aによって記録された複雑なイベント(例えば、対象となるシーケンス)のサマリとなることができる。
図7に示すFSMラティス30A、30Bの二段階の階層100により、2つの独立したプログラムが同じデータストリームに基づいて動作できる。二段階の階層は、異なる領域としてモデル化されている生命体の脳と視認上類似とすることができる。このようなモデルにおいて、領域は、その各々が類似したコンピュータ機能(パターン一致)を実行するが、異なるプログラム(シグナチャ)を使用する、効率的に異なるパターン認識エンジンである。複数のFSMラティス30A、30Bを接続することにより、データストリーム入力についてのより多くの知識を得ることができる。
(第一FSMラティス30Aによって実装された)階層の第一段階は、例えば、未加工データストリームに対して直接的に処理を行うことができる。即ち、未加工データストリームは、第一FSMラティス30Aの入力ブロック52において受信され、第一FSMラティス30Aのプログラマブル素子は、未加工データストリームに対して反応することができる。(第二FSMラティス30Bによって実装された)階層の第二段階は、第一段階からの出力を処理することができる。即ち、第二FSMラティス30Bは、第二FSMラティス30Bの入力ブロック52において、第一FSMラティス30Aの出力ブロック54からの出力を受信し、第二FSMラティス30Bのプログラマブル素子は、第一FSMラティス30Aの出力に対して反応することができる。従って、この実施例において、第二FSMラティス30Bは入力として、未加工データストリームを受信せず、第一FSMラティス30Aによって決定されたように未加工データストリームによって一致した対象となるパターンの表示を受信する。第二FSMラティス30Bは、第一FSMラティス30Aから出力データストリームにおけるパターンを認識するFSMを実装することができる。
図8は、コンパイラ20が、FSMを実装するために、ラティス30等のFSMラティスをプログラミングするよう構成された画像にソースコードを変換する方法110の1つの実施例を示す。方法110は、ソースコードをシンタックスツリーに解析する(parse)こと(ブロック112)、シンタックスツリーを自動化装置に変換すること(ブロック114)、自動化装置を最適化すること(ブロック116)、自動化装置をネットリストに変換すること(ブロック118)、ネットリストをハードウェア上に設置すること(ブロック120)、ネットリストをルーティングすること(ブロック122)、及び結果生じた画像を掲載(publish)すること(ブロック124)を含む。
1つの実施例において、コンパイラ20は、ソフト開発者がFSMラティス30でFSMを実装するための画像を作成できるapplication programming interface(API)を含む。コンパイラ20は、ソースコード内の正規表現の入力一式を、FSMラティス30をプログラミングするよう構成される画像へ変換する方法を提供する。コンパイラ20は、フォンノイマン型アーキテクチャを有するコンピュータに対する命令によって実装することができる。これらの命令は、コンピュータのプロセッサ12に対してコンパイラ20の機能を実装させることができる。例えば、プロセッサ12による実行が行われると、命令は、プロセッサ12にアクセス可能なソースコード上のブロック112、114、116、118、120、122、124に記載される動作をプロセッサ12に実行させることができる。
1つの実施例において、ソースコードは、一群の記号の中で記号のパターンを識別するためのサーチ文字列を記載する。サーチ文字列を記載するために、ソースコードは複数の正規表現(regex)を含むことができる。正規表現は、記号サーチパターンを記載するための文字列とすることができる。正規表現は、プログラミング言語、テキストエディタ、ネットワークセキュリティ等、様々なコンピュータ領域で広範囲に使用されている。1つの実施例において、コンパイラによってサポートされる正規表現は、非構造化データを分析するための基準を含む。非構造化データは、自由な形式であり、そのデータ内でワードに適用する指標が無いデータを含むことができる。ワードは、データ内で、バイト、印刷可能、印刷不可能の任意の組み合わせを含むことができる。1つの実施例において、コンパイラは、Perl(例えばPerl Compatible regular expressions(PCRE))、PHP、Java(登録商標)及び.NET言語等のregexを実装するため、複数の異なるソースコード言語をサポートすることができる。
ブロック112において、コンパイラ20は、関連接続した演算子の配置を構成すべくソースコードを解析することができ、ここでは、異なる種類の演算子が、ソースコードによって実装された異なる機能(例えば、ソースコードにおいて正規表現によって実装された異なる機能)に対応する。ソースコードを解析することにより、ソースコードの一般的表現を作り出すことができる。1つの実施例において、一般的表現は、シンタックスツリーとして知られるツリーグラフ形態におけるソースコードにおける正規表現のコード化表現を含む。本明細書に記載されている実施例は、シンタックスツリー(「抽象シンタックスツリー」としても知られる)としての配置を指すが、別の実施例においては、具象シンタックスツリーやその他の配置も使用できる。
上記のように、コンパイラ20は、多言語のソースコードをサポートすることができるため、解析は、ソースコードを、その言語に関わらず、例えばシンタックスツリー等の非言語固有の表現へ変換する。従って、コンパイラ20による更なる処理(ブロック114、116、118、120)は、ソースコードの言語に関わらず、共通の入力構造から行うことができる。
上記のように、シンタックスツリーは、関連接続した複数の演算子を含む。シンタックスツリーは、複数の異なる種類の演算子を含むことができる。即ち、異なる演算子は、ソースコードにおける正規表現によって実装される異なる機能に対応することができる。
ブロック114において、シンタックスツリーは、自動装置へ変換される。自動装置は、FSMのソフトウェアモデルを備え、これによって決定性と非決定性とに分類することができる。決定性の自動装置は、所定の時間において単一実行経路を有するのに対し、非決定性の自動装置は、所定の時間において複数の同時実行経路を有する。自動装置は、複数の状態を含む。シンタックスツリーを自動装置に変換するために、シンタックスツリー内の演算子と演算子間の関係は、状態間の遷移を伴う状態に変換される。1つの実施例において、自動装置は、FSMラティス30のハードウェアに部分的に基づいて変換される。
1つの実施例において、自動装置の入力記号は、アルファベット、数字0〜9、及びその他の印刷可能な文字の記号を含む。1つの実施例において、入力記号は、0〜255で表されるバイト値によって示される。1つの実施例において、自動装置は、グラフのノードが状態一式に対応する有向グラフとして表すことができる。1つの実施例において、入力記号αにおける状態pから状態qへの遷移即ちδ(p,α)は、ノードpからノードqへの有向接続によって示される。1つの実施例において、自動装置の反転により、幾つかの記号αにおける遷移p→qのそれぞれが同じ記号においてq→pと反転する新たな自動装置が作り出される。反転において、開始状態は最終状態となり、最終状態は開始状態となる。1つの実施例において、自動装置によって認識される(一致する)言語は、自動装置に連続して入力されると最終状態に到達する可能性のある全ての文字列一式である。自動装置によって認識される各文字列は、開始状態から1つまたは複数の最終状態へのパスをトレースする。
ブロック116において、自動装置が構築された後、特に、自動装置がその複雑さと大きさを減じるように最適化される。自動装置は、重複した状態を組み合わせることによって最適化することができる。
ブロック118において、最適化された自動装置がネットリストに変換される。自動装置のネットリストへの変換は、FSMラティス30のハードウェア素子(例えば、SME34、36、その他の素子)に自動装置の各状態をマッピングし、ハードウェア素子間の接続を決定する。
ブロック120において、ネットリストは、ネットリストの各ノードに対応したターゲットデバイスの特定のハードウェア素子(例えば、SME34、36、専用素子)を選択するために設置される。1つの実施例において、設置は、FSMラティス30に対する一般的な入出力の制限に基づいて各特定のハードウェア素子を選択する。
ブロック122において、設置されたネットリストは、ネットリストに記載された接続を実現するために、選択したハードウェア素子を結合するため、プログラマブルスイッチング素子(例えば、インターブロックスイッチング素子40、イントラブロックスイッチング素子42、イントラロースイッチング素子44)の設定を決定すべくルーティングされる。1つの実施例において、プログラマブルスイッチング素子の設定は、選択したハードウェア素子を接続するために使用されるFSMラティス30の特定の導体を決定することによって、また、プログラマブルスイッチング素子の設定によって決定される。ルーティングは、ブロック120におけるハードウェア素子間の接続のより具体的な限定を考慮することができる。従って、ルーティングは、FSMラティス30の導体に実際に限界がある場合でも、適切な接続を行うために、グローバルな設置によって決定されるいくつかのハードウェア素子の位置を調節することができる。
ひとたびネットリストが設置され、ルーティングされると、設置され、ルーティングされたネットリストは、FSMラティス30のプログラミングのための複数ビットに変換される。本明細書において、この複数ビットは画像と呼ばれる。
ブロック124において、画像はコンパイラ20によって掲載される。画像は、FSMラティス30の特定のハードウェア素子をプログラミングするための複数ビットを含む。画像が複数のビット(例えば0及び1)を含む実施形態において、その画像をバイナリ画像と呼ぶことができる。プログラミングしたFSMラティス30がソースコードによって記載された機能を有するFSMを実装するよう、SME34、36、専用素子58及びプログラマブルスイッチング素子の状態をプログラミングするために、FSMラティス30にビットをロードすることができる。設置(ブロック120)とルーティング(ブロック122)は、FSMラティス30内の特定位置にある特定のハードウェア素子を自動装置内の特定の状態にマッピングすることができる。従って、画像におけるビットは、(複数の)望ましい機能を実装するために、特定のハードウェア素子をプログラミングすることができる。1つの実施例において、マシンコードをコンピュータ可読媒体に保存することによって、画像を掲載することができる。別の実施例において、表示デバイスに画像を表示することによって、画像を掲載することができる。更に別の実施例において、画像をFSMラティス30にロードするプログラミングデバイス等、別のデバイスに画像を送信することによって、画像を掲載することができる。更に別の実施例において、FSMラティス(例えばFSMラティス30)に画像をロードすることによって、画像を掲載することができる。
1つの実施例において、画像からSME34、36及びその他のハードウェア素子に対してビット値を直接ロードするか、画像を1つまたは複数のレジスタにロードし、その後SME34、36及びその他のハードウェア素子に対してビット値を書き込むことによって、FSMラティス30に画像をロードすることができる。1つの実施例において、FSMラティス30のハードウェア素子(例えば、SME34、36、専用素子58、プログラマブルスイッチング素子40、42、44)は、プログラミングデバイス及び/またはコンピュータが画像を1つまたは複数のメモリアドレスに書き込むことによって、FSMラティス30に画像をロードできるようにメモリマッピングされている。
本明細書に記載する方法は、少なくとも部分的に機械またはコンピュータにより実装されるものとすることができる。いくつかの実施例は、上記の実施例に記載された方法を実行するための電子デバイスを構成するように動作可能な命令によってコード化されたコンピュータ可読媒体または機械可読媒体を含むことができる。このような方法の実装は、マイクロコード、アセンブリ言語コード、高水準言語コード等のコードを含むことができる。このようなコードは、様々な方法を実行するためのコンピュータ可読命令を含むことができる。コードは、コンピュータプログラム製品の一部分を形成することができる。更に、コードは、実行中またはその他のときに1つまたは複数の揮発性または不揮発性コンピュータ可読媒体に有体物として保存することができる。これらのコンピュータ可読媒体は、ハードディスク、リムーバブル磁気ディスク、リムーバブル光ディスク(例えば、コンパクトディスクやデジタルビデオディスク)、磁気カセット、メモリカードまたはスティック、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)等を含むことができるが、これらに限定されない。
ここで図9を参照すると、ステートマシンエンジン14の実施形態が示されている。既に記載したように、ステートマシンエンジン14は、データバスを介してメモリ16等のソースからデータを受信するよう構成される。図示した実施形態において、データはDDR3バスインターフェース130等のバスインターフェースを介してステートマシンエンジン14に送信することができる。DDR3バスインターフェース130は、1ギガバイト/秒以上の速度でデータを送受信することができる。当業者が理解するように、分析されるデータのソースによって、バスインターフェース130は、NANDフラッシュインターフェース、PCIインターフェース等、データソースとステートマシンエンジン14との間でデータを送受信するのに適した任意のバスインターフェースとなることができる。既に記載したように、ステートマシンエンジン14は、データを分析するよう構成される1つ以上のFSMラティス30を備える。FSMラティス30のそれぞれは、2つの半分のラティスに分割することができる。図示した実施形態において、半分のラティスのそれぞれは、ラティス30が48KのSMEを含むように、24KのSME(例えば、SME34、36)を備えていてもよい。ラティス30は、図2〜5に関して既に記載したように配置された望ましい数のSMEを備えることができる。更に、FSMラティス30を1つだけ示しているが、既に記載したように、ステートマシンエンジン14は、複数のFSMラティス30を備えることもできる。
分析対象のデータは、バスインターフェース130で受信され、複数のバッファとバッファインターフェースを介してFSMラティス30に送信される。図示した実施形態において、データパスは、データバッファ132、プロセスバッファ134、インターランク(IR)バス、及びプロセスバッファインターフェース136を備える。データバッファ132は、分析対象のデータを受信し、一時的に保存するように構成される。1つの実施形態において、データバッファ132は2つある(データバッファAとデータバッファB)。データは、2つあるデータバッファ132のうち1つに保存され、一方で、FSMラティス30による分析に供するため、残りの1つのデータバッファ132から削除されてもよい。図示した実施形態において、データバッファ132はそれぞれ32キロバイトとすることができる。IRバスとプロセスバッファインターフェース136は、プロセスバッファ134へのデータ送信を容易にする。IRバスとプロセスバッファ134は、データが順番にFSMラティス30によって処理されることを確実にする。IRバスとプロセスバッファ134、データが正しい順番で受信され分析されるように、データ送受信、時間情報、パッキング指示等を調整することができる。一般的にIRバスとプロセスバッファ134、FSMラティス30の論理ランクによって複数のデータセットを並行して分析することができる。
図示した実施形態において、ステートマシンエンジン14は、ステートマシンエンジン14による膨大な量のデータの伝送を補助するために、解凍装置138と圧縮装置140とを備えることができる。圧縮装置140と解凍装置138は協働して、データ伝送時間を最小限にするため、データを圧縮できるようにする。分析対象のデータを圧縮することにより、バス利用時間を最小化することができる。コンパイラ20によって提供される情報に基づいて、ステートマシンエンジンが使用される可能性が低い情報を提供するため、ステートマシンエンジン14に対してマスクが提供されてもよい。圧縮装置140と解凍装置138は、様々なバースト長のデータを取り扱うように構成することもできる。圧縮データを膨らませて、それぞれの圧縮領域が終端する時期についてのインジケータを備えることによって、圧縮装置140は、ステートマシンエンジン14による全体的な処理速度を改善することができる。圧縮装置140と解凍装置138は、FSMラティス30による分析の後、一致結果データを圧縮したり解凍したりするために使用することもできる。
既に記載したように、FSMラティス30の出力は、状態ベクトルを含むことができる。状態ベクトルは、FSMラティス30のプログラマブル素子の状態(例えば、アクティブ化されているか否か)を含む。状態ベクトルの各々は、更なる階層的処理と分析に供するため、状態ベクトルキャッシュメモリ142に一時的に保存することができる。即ち、新たなデータセットに再度プログラミングし、及び/または更なる分析に供するためにステートマシンを解放しつつ、更なる分析に供するために最終の状態が使用可能となるよう、ステートマシンそれぞれの状態を保存することができる。典型的なキャッシュと同様に、例えば、ここではFSMラティス30による迅速な取り出しと使用のために、状態ベクトルキャッシュメモリによって、ここでは状態ベクトルである情報の保存が可能になる。状態ベクトルメモリバッファ、状態ベクトル中間入力バッファ146、及び状態ベクトル中間出力バッファ148等の追加的なバッファを状態ベクトルキャッシュメモリ142とともに利用して、ステートマシンエンジン14のパケット送信プロトコルを順守しつつ、状態ベクトルの迅速な分析と保存を行うことができる。
ひとたび、対象となる結果がFSMラティス30によって作成されると、一致結果は、一致結果メモリ150に保存することができる。即ち、一致(例えば、対象となっているパターンの検出)を示す「一致ベクトル」を一致結果メモリ150に保存することができる。一致結果は、その後、例えば、バスインターフェース130を通ってプロセッサ12へ送信するため、一致バッファ152に送信することができる。既に記載したように、一致結果は圧縮することができる。
ステートマシンエンジン14において、追加的なレジスタとバッファを備えることもできる。例えば、ステートマシンエンジン14は、コントロールステータスレジスタ(control and status register)154を備えることができる。また、当初のFSMラティス30のプログラミングに使用し、分析期間中のFSMラティス30におけるマシンの状態を回復するためのリストアプログラムバッファ(restore and program buffer)156を備えることができる。同様に、設定と使用のために、マップを保存し回復するためのセーブリペアマップバッファ(save and repair map buffer)158も備えることができる。
図10は、図5の検出セル86をより詳細に示している。既に記載したように、この検出セル86は、第一入力62と第二入力82とを受信することができる。1つの実施形態において、第一入力62は、検出セル86のイネーブル信号として動作するための統合イネーブル入力(unified enable input)とすることができる。既に論じたように、この入力62は、行38におけるGOT60のSME34のそれぞれに結合した、ルーティングから受信した信号を含むことができる。また、行38におけるGOT60のSME36における同一の検出セル86は、検出セル86のイネーブル信号として動作するために、統合イネーブル入力として入力62をミラーリングする入力64を受信することもできることに留意すべきである。そのため、入力64は、行38におけるGOT60のSME36のそれぞれに結合したルーティングから受信される信号を含むことができる。従って、SME34の検出セル86については以下により詳細に論じるが、SME36の検出セル86も実質的に同様に動作することに留意すべきである。
図10に示すように、検出セルは、D‐フリップフロップ160を備えることができる。このD‐フリップフロップは、入力162のクロック信号とともに、統合イネーブル入力62を受信するように作動することができる。従って、D‐フリップフロップ160は、入力162(クロック入力)におけるポジティブエッジ(positive edge)が受信されると、結果を統合イネーブル入力62(D入力)の状態であり得るQ出力164に駆動する。このようにして、D‐フリップフロップ160によって、以下に記載するように、検出セル86が所定時間SMEのメモリセル80を使用して行われる分析の結果のみを出力するクロックイネーブル回路となることができる。検出セル86は、統合イネーブル入力62の数値や入力162のクロック信号の数値とは無関係に、Q出力164をアクティブなハイ信号に設定するために使用できるセット入力166と、Q出力164をアクティブなロウ信号に設定するために使用できるリセット入力168とを含むことができることにも留意すべきである。
図10の検出セル86は、第二入力82を受信することもできる。既に論じたように、この入力82は、検出ライン82と対応するものであってよい。この検出ライン82は、検出セル86に対応するSME34の1つまたは複数のメモリセル80から分析結果(例えば一致結果)を運ぶことができる。従って、選択したメモリセル80は、その保存したデータ状態を出力として検出ライン82に提供し、これがその後、検出セル86に分析結果として送信される。検出ライン82のこの結果は、検出セル86内のANDゲート170に送信することができる。また、Q出力164は、ANDゲート107に送信することができる。例えば、検出ライン82の正しい一致(qualified match)が起き、かつ検出セル86が統合イネーブル入力62を介してアクティブ化される(例えば、アクティブな状態になる)と、一致結果出力が、検出セル86から出力72(SME36の検出セル86については出力74)に対して出力される。この正しい一致とは、例えば、単一のSME34からの分析されたデータストリームにおける一致を示し、これは、例えば、データストリーム内のパターンを検索するために、その他のSME34、36におけるその他の一致とともに利用することができる。検出セル86におけるD‐フリップフロップ160を使用することによって、ここから生成した検索や結果をクロック信号に基づいて所定期間実行することができる。また、(例えば、統合イネーブル入力62を選択的に使用することによって、)SME34、36から(例えば出力72、74について)いつ、どの結果を出力するかについての制御も実現することができる。更に、統合イネーブル入力62(及び統合イネーブル入力64)を介したSME34、36のこの選択的アクティブ化によって、データストリームの全体的なより広い分析の一部として、SME34、36のそれぞれにおいて見出される結果を実現することができる。
図11は、行38のGOT60に結合することができるローカルルーティングマトリックス172の1つの例を示す。図に示すように、SME34は、データ分析素子171とともにSME34のメモリセル80を備えることができる検出セル86も備えている。データ分析素子171は、SME34の検出ライン82と結合することができる。同様に、SME36は、データ分析素子173とともにメモリセル80を備えることができる検出セル86も備えている。また、データ分析素子173は、SME36の検出ライン82と結合することができる。更に、図11に示すSME34、36と結合することに加えて、ローカルルーティングマトリックス172は、特定の行38のGOT60のSME34、36の全ての対と結合することができる。従って、ローカルルーティングマトリックス172は、プログラマブルイントラロースイッチング素子44と、行相互接続導体68、70(以下で記載するように「ロー(行)ルーティングライン」とも呼ばれる)を備えることができる。
1つの実施形態において、ローカルルーティングマトリックス172は、複数のロールーティングライン174、176、178、180、182、184、186、188、190、192、194、196、198、200、202、204(以後、まとめて「ロールーティングライン174〜204」と呼ぶ)を備えることができる。このようにして、ロールーティングライン174‐204の数は、所定の行におけるGOTの数に対応することができる。このように、示した実施形態において、174〜204の16本のロールーティングラインが存在する。しかしながら、ローカルルーティングマトリックス172において、より数の少ないまたは数の多いロールーティングラインが利用できる点について理解されるべきである。
ロールーティングライン174〜204のそれぞれは、1つまたは複数のGOT60の任意のSME34、36に対するイネーブル信号を提供するために利用することができる。従って、これらのロールーティングライン174〜204を使用することにより、特定のSME(例えばSME34)に対する特定の検出セル86をアクティブ化することができる。これは、(例えばプログラミングを介して)選択的にロールーティングライン174〜204をSME34、36の統合イネーブル入力62、64と結合することによって実現することができる。また、イネーブル信号をSME34、36に提供する上で更なる柔軟性を提供するために、ロールーティングライン174〜204は、2つのSME34、36の間で分割することができる。例えば、行38におけるSME34、36のそれぞれをアクティブ化するためにロールーティングライン174、176、178、180、182、184、186及び188を利用することができる。また、行38におけるSME34に統合イネーブル入力62を送信するためにロールーティングライン190、194、198及び202を利用することができる一方、行38におけるSME36に統合イネーブル入力64を送信するためにロールーティングライン192、196、200及び204を利用することができる。このように、例えば行におけるSME34の合計16の検出セル86のうちSME34の最大12の検出セル86が直接アドレス指定され、一方、残りの検出セル86は、例えば図5に関して既に記載したスイッチング素子79の使用を介してアドレス指定される。このようにして、全体的な柔軟性と、行38における任意のSME34、36の任意の検出セル86をアクティブ化する能力を維持しつつ、ロールーティングライン174〜204の全体数を減少させることができる。
また、図11はイントラグループ回路206を備える点に留意すべきである。このイントラグループ回路206の出力は、出力66とすることができ、これは、それぞれのGOT60に対する出力を送信することができる。1つの実施形態において、この出力66は、アクティブなSME34、36において発生した結果を反映して、GOT60の出力66を送信するために、ロールーティングライン174、176、178、180、182、184、186、及び188のいずれかに結合することができる。GOTの出力66を送信するためにロールーティングライン174、176、178、180、182、184、186、及び188を使用することにより(SME34、36の統合イネーブル入力62、64を有するローカルルーティングマトリックス172に共通している)、システム全体の柔軟性を維持しつつ、ロールーティングライン174‐204の全体数を減少させることができる。
図11のイントラグループ回路206は、図5に関して既に論じたGOT60の素子を備えていてもよい点に留意すべきである。イントラグループ回路206におけるこれらの素子の特別な機能と相互接続については、図12との関連で、後ほど、より詳細に論じる。
図12のイントラグループ回路206は、SME34、36に結合することを示した入力62、64、出力72、74を備える。入力62、64、出力72、74は、SME34、36に対するそれぞれの関係性に関して言及されているのであり、必ずしもイントラグループ回路206におけるそれらの機能について言及したものではないことに留意すべきである。また、イントラグループ回路206は、それぞれ出力72、74と結合するORゲート76、3−1マルチプレクサ78、及びスイッチング素子79を備える。図に示したように、出力72と結合するスイッチング素子79は、例えば、カスケード検索ができるように、SME34の出力72が、SME36の統合イネーブル入力64に送信されるようにすることができる。これとともに、またはこれに替えて、出力72と結合するスイッチング素子79は、SME34の統合イネーブル入力62が、SME36の統合イネーブル入力64に送信され、及び/またはSME34の出力72が、ORゲート76に送信されるようにすることができる。既に論じたように、SME34の統合イネーブル入力62がSME36の統合イネーブル入力64に送信されるようにできれば、ロールーティングライン174〜204の共有を介して所定の行38のSME36における全ての検出セル素子86の全面的なアドレス指定が可能になる。
同様に、出力74と結合するスイッチング素子79は、例えば、カスケード検索ができるように、SME36の出力74が、SME34の統合イネーブル入力62に送信されるようにすることができる。これとともに、またはこれに替えて、出力74と結合するスイッチング素子79は、SME36の統合イネーブル入力64が、SME34の統合イネーブル入力62に送信され、及び/またはSME36の出力74が、ORゲート76に送信されるようにすることができる。再び、SME36の統合イネーブル入力64がSME34の統合イネーブル入力62に送信されるようにできれば、ロールーティングライン174〜204の共有を介して所定の行38のSME34における全ての検出セル素子86の全面的なアドレス指定が可能になる。なお、図示していないが、出力72、74は、1つのスイッチング素子79を介して出力72を入力62と結合することによって、また、別のスイッチング素子79を介して出力77を入力64と結合することによって、出力72、74を生成したSME34、36にループバックできることに留意すべきである。
イントラグループ回路206の3−1マルチプレクサ78は、GOT60の共通の出力66を形成するためにSME34、36の両方の出力72、74とともに結合するために使用することができる第一SME34、第二SME36、またはORゲート76のいずれかとGOT60の出力66を結合するように設定することができる。従って、3−1マルチプレクサ78は、第一出力選択入力208と第二出力選択入力210とを備えることができる。これにより、これらの出力選択入力208、210は、出力66に送信された出力をプログラム可能に選択することができる。このプログラミングは、例えば、FSMラティス30の初期プログラミング段階で行われるロードされた画像に基づいて達成することができる。図13は、どのようにして出力選択入力208、210がGOT60の出力66をプログラム可能に選択するかについてその1つの例を記載した真偽表212を示す。
図13に示すように、出力選択入力208、210の両方がロウ(即ち0)である場合、GOT60の出力66は、高インピーダンス信号となり、その結果、値が出力66に送信されるのを効果的に防ぐことになる。出力選択入力208がハイ(即ち1)であり、出力選択入力210がロウである場合は、GOT60の出力66は、第一SME34の出力、即ち出力72となる。出力選択入力208がロウであり、出力選択入力210がハイである場合は、GOT60の出力66は、第二SME36の出力、即ち出力74となる。最後に、出力選択入力208、210の両方がハイである場合は、GOT60の出力66は、ORゲート76の出力、即ち出力74との論理和をとった出力72となる。このようにして、3−1マルチプレクサ78は、GOT60の出力66として、プログラム可能に出力無し、出力72、出力74、または出力74との論理和をとった出力72を選択する。また、3−1マルチプレクサは、図12に示した具体的な実施形態に限らず、その他のプログラム可能な構成において動作できることに留意すべきである。
本発明に対して、様々な変形や代替的な形態を加えてもよいが、具体的な実施形態として、図面による例示によって、また本明細書の記載において詳細に示した。しかしながら、本発明は、ここで開示した特定の内容に限定することを意図していない旨を理解すべきである。そうではなく、本発明は、以下に示す添付の請求項によって定義される発明の趣旨と範囲内にある全ての変形、均等物、代替物を網羅するものである。

Claims (11)

  1. 複数の第一メモリセルを備える第一データ分析素子であって、前記第一データ分析素子がデータストリームの少なくとも一部分を分析した第一分析結果を出力するように構成された第一データ分析素子と、
    第一入力として前記第一分析結果を受信するように構成された第一ANDゲートと、前記第一ANDゲートの第二入力と結合する出力を備える第一Dフリップフロップと、を備える第一検出セルと、
    複数の第二メモリセルを備える第二データ分析素子であって、前記第二データ分析素子が前記データストリームの少なくとも一部分を分析した第二分析結果を出力するように構成された第二データ分析素子と、
    第一入力として前記第二分析結果を受信するように構成された第二ANDゲートと、前記第二ANDゲートの第二入力と結合する出力を備える第二Dフリップフロップと、を備える第二検出セルと、
    前記第一ANDゲート及び前記第二ANDゲートからの出力をそれぞれ第1入力及び第2入力として受けるORゲートと、
    前記第一ANDゲート、前記第二ANDゲート及び前記ORゲートからの出力のうち、いずれか一つを出力するマルチプレクサと、
    を備えることを特徴とするデバイス。
  2. 前記第一Dフリップフロップは、第一イネーブル信号を受信するように構成されたデータ入力を備え、
    前記第二Dフリップフロップは、第二イネーブル信号を受信するように構成されたデータ入力を備えることを特徴とする、請求項1に記載のデバイス。
  3. 前記第一Dフリップフロップ及び前記第二Dフリップフロップはクロック信号に応じて前記第一イネーブル信号及び前記第二イネーブル信号をそれぞれの前記出力から出力する請求項2に記載のデバイス。
  4. 複数のプログラマブル素子と、
    前記複数のプログラマブル素子に対して共通に設けられるイントラブロックスイッチング素子と、を備え、前記複数のプログラマブル素子は、各々が、
    複数の第一メモリセルを備える第一データ分析素子であって、前記第一データ分析素子がデータストリームの少なくとも一部分を分析した第一分析結果を出力するように構成された第一データ分析素子と、
    第一Dフリップフロップと、前記第一Dフリップフロップの出力及び前記第一データ分析素子の出力を受ける第一ANDゲートを備える第一検出セルと、
    複数の第二メモリセルを備える第二データ分析素子であって、前記第二データ分析素子が前記データストリームの少なくとも一部分を分析した第二分析結果を出力するように構成された第二データ分析素子と、
    第二Dフリップフロップと、前記第二Dフリップフロップの出力及び前記第二データ分析素子の出力を受ける第二ANDゲートを備える第二検出セルと、
    前記第一ANDゲートの出力及び前記第二ANDゲートの出力を受けるORゲートと、
    前記第一ANDゲートの出力、前記第二ANDゲートの出力及び前記ORゲートの出力のうち、いずれか一つを出力するマルチプレクサと、
    を含むデバイス。
  5. 前記第一Dフリップフロップは、第一イネーブル信号を受信するように構成されたデータ入力を備え、
    前記第二Dフリップフロップは、第二イネーブル信号を受信するように構成されたデータ入力を備えることを特徴とする、請求項4に記載のデバイス。
  6. 前記第一Dフリップフロップ及び前記第二Dフリップフロップはクロック信号に応じて前記第一イネーブル信号及び前記第二イネーブル信号をそれぞれの前記出力から出力する請求項5に記載のデバイス。
  7. 前記複数のプログラマブル素子において受信される前記第一イネーブル信号及び前記第二イネーブル信号を共通の信号として前記イントラブロックスイッチング素子から伝送する第一相互接続導体と、
    前記複数のプログラマブル素子において受信される前記第一イネーブル信号のみを前記イントラブロックスイッチング素子から伝送する第二相互接続導体と、
    前記複数のプログラマブル素子において受信される前記第二イネーブル信号のみを前記イントラブロックスイッチング素子から伝送する第三相互接続導体と、
    を更に備える請求項5または6に記載のデバイス。
  8. 入力ブロックと、
    出力ブロックと、
    複数のブロックと、
    前記入力ブロック、前記出力ブロック及び複数のブロック間にそれぞれ設けられ、前記入力ブロック、前記出力ブロック及び前記複数のブロック相互間の信号の送受信を制御する複数のインターブロックスイッチング素子と、を備え、前記複数のブロックは各々が、
    複数のプログラマブル素子と、
    前記複数のプログラマブル素子に対して共通に設けられ、前記複数のインターブロックスイッチング素子のうち少なくとも一つの対応するインターブロックスイッチング素子と信号の送受信を行うイントラブロックスイッチング素子と、を備え、前記複数のプログラマブル素子は各々が、
    複数の第一メモリセルを備える第一データ分析素子であって、前記第一データ分析素子がデータストリームの少なくとも一部分を分析した第一分析結果を出力するように構成された第一データ分析素子と、
    第一Dフリップフロップと、前記第一Dフリップフロップの出力及び前記第一データ分析素子の出力を受ける第一ANDゲートを備える第一検出セルと、
    複数の第二メモリセルを備える第二データ分析素子であって、前記第二データ分析素子が前記データストリームの少なくとも一部分を分析した第二分析結果を出力するように構成された第二データ分析素子と、
    第二Dフリップフロップと、前記第二Dフリップフロップの出力及び前記第二データ分析素子の出力を受ける第二ANDゲートを備える第二検出セルと、
    前記第一ANDゲートの出力及び前記第二ANDゲートの出力を受けるORゲートと、
    前記第一ANDゲートの出力、前記第二ANDゲートの出力及び前記ORゲートの出力のうち、いずれか一つを出力するマルチプレクサと、
    を含むデバイス。
  9. 前記第一Dフリップフロップは、第一イネーブル信号を受信するように構成されたデータ入力を備え、
    前記第二Dフリップフロップは、第二イネーブル信号を受信するように構成されたデータ入力を備えることを特徴とする、請求項8に記載のデバイス。
  10. 前記第一Dフリップフロップ及び前記第二Dフリップフロップはクロック信号に応じて前記第一イネーブル信号及び前記第二イネーブル信号をそれぞれの前記出力から出力する請求項9に記載のデバイス。
  11. 前記複数のプログラマブル素子において受信される前記第一イネーブル信号及び前記第二イネーブル信号を共通の信号として前記イントラブロックスイッチング素子から伝送する第一相互接続導体と、
    前記複数のプログラマブル素子において受信される前記第一イネーブル信号のみを前記イントラブロックスイッチング素子から伝送する第二相互接続導体と、
    前記複数のプログラマブル素子において受信される前記第二イネーブル信号のみを前記イントラブロックスイッチング素子から伝送する第三相互接続導体と、
    を更に備える請求項9または10に記載のデバイス。
JP2014547289A 2011-12-15 2012-12-05 ステートマシンにおける検出方法とシステム Active JP6181074B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/327,580 2011-12-15
US13/327,580 US8782624B2 (en) 2011-12-15 2011-12-15 Methods and systems for detection in a state machine
PCT/US2012/067995 WO2013090093A1 (en) 2011-12-15 2012-12-05 Methods and systems for detection in a state machine

Publications (2)

Publication Number Publication Date
JP2015509228A JP2015509228A (ja) 2015-03-26
JP6181074B2 true JP6181074B2 (ja) 2017-08-16

Family

ID=47557465

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014547289A Active JP6181074B2 (ja) 2011-12-15 2012-12-05 ステートマシンにおける検出方法とシステム

Country Status (7)

Country Link
US (3) US8782624B2 (ja)
EP (1) EP2791862B1 (ja)
JP (1) JP6181074B2 (ja)
KR (1) KR101920956B1 (ja)
CN (2) CN104011736B (ja)
TW (1) TWI515668B (ja)
WO (1) WO2013090093A1 (ja)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100138575A1 (en) 2008-12-01 2010-06-03 Micron Technology, Inc. Devices, systems, and methods to synchronize simultaneous dma parallel processing of a single data stream by multiple devices
US20100174887A1 (en) 2009-01-07 2010-07-08 Micron Technology Inc. Buses for Pattern-Recognition Processors
US8489534B2 (en) * 2009-12-15 2013-07-16 Paul D. Dlugosch Adaptive content inspection
US9323994B2 (en) 2009-12-15 2016-04-26 Micron Technology, Inc. Multi-level hierarchical routing matrices for pattern-recognition processors
US8648621B2 (en) 2011-12-15 2014-02-11 Micron Technology, Inc. Counter operation in a state machine lattice
US8680888B2 (en) 2011-12-15 2014-03-25 Micron Technologies, Inc. Methods and systems for routing in a state machine
US9443156B2 (en) 2011-12-15 2016-09-13 Micron Technology, Inc. Methods and systems for data analysis in a state machine
US8593175B2 (en) 2011-12-15 2013-11-26 Micron Technology, Inc. Boolean logic in a state machine lattice
US8782624B2 (en) * 2011-12-15 2014-07-15 Micron Technology, Inc. Methods and systems for detection in a state machine
US20130275709A1 (en) 2012-04-12 2013-10-17 Micron Technology, Inc. Methods for reading data from a storage buffer including delaying activation of a column select
US9235798B2 (en) 2012-07-18 2016-01-12 Micron Technology, Inc. Methods and systems for handling data received by a state machine engine
US9389841B2 (en) * 2012-07-18 2016-07-12 Micron Technology, Inc. Methods and systems for using state vector data in a state machine engine
US9524248B2 (en) 2012-07-18 2016-12-20 Micron Technology, Inc. Memory management for a hierarchical memory system
US9075428B2 (en) 2012-08-31 2015-07-07 Micron Technology, Inc. Results generation for state machine engines
US9063532B2 (en) * 2012-08-31 2015-06-23 Micron Technology, Inc. Instruction insertion in state machine engines
US9501131B2 (en) 2012-08-31 2016-11-22 Micron Technology, Inc. Methods and systems for power management in a pattern recognition processing system
US9703574B2 (en) 2013-03-15 2017-07-11 Micron Technology, Inc. Overflow detection and correction in state machine engines
US9448965B2 (en) 2013-03-15 2016-09-20 Micron Technology, Inc. Receiving data streams in parallel and providing a first portion of data to a first state machine engine and a second portion to a second state machine
US9158720B2 (en) * 2013-08-11 2015-10-13 Qualcomm Incorporated System and method for scalable trace unit timestamping
US10430210B2 (en) 2014-12-30 2019-10-01 Micron Technology, Inc. Systems and devices for accessing a state machine
WO2016109571A1 (en) 2014-12-30 2016-07-07 Micron Technology, Inc Devices for time division multiplexing of state machine engine signals
US11366675B2 (en) 2014-12-30 2022-06-21 Micron Technology, Inc. Systems and devices for accessing a state machine
CN106547274B (zh) * 2015-09-16 2019-11-15 中国航空工业第六一八研究所 一种基于场景矩阵的状态机测试方法
US10846103B2 (en) 2015-10-06 2020-11-24 Micron Technology, Inc. Methods and systems for representing processing resources
US10691964B2 (en) 2015-10-06 2020-06-23 Micron Technology, Inc. Methods and systems for event reporting
US10977309B2 (en) 2015-10-06 2021-04-13 Micron Technology, Inc. Methods and systems for creating networks
US10146555B2 (en) 2016-07-21 2018-12-04 Micron Technology, Inc. Adaptive routing to avoid non-repairable memory and logic defects on automata processor
US10019311B2 (en) 2016-09-29 2018-07-10 Micron Technology, Inc. Validation of a symbol response memory
US10268602B2 (en) 2016-09-29 2019-04-23 Micron Technology, Inc. System and method for individual addressing
US10592450B2 (en) 2016-10-20 2020-03-17 Micron Technology, Inc. Custom compute cores in integrated circuit devices
US10929764B2 (en) 2016-10-20 2021-02-23 Micron Technology, Inc. Boolean satisfiability
US9996328B1 (en) * 2017-06-22 2018-06-12 Archeo Futurus, Inc. Compiling and optimizing a computer code by minimizing a number of states in a finite machine corresponding to the computer code
US10481881B2 (en) * 2017-06-22 2019-11-19 Archeo Futurus, Inc. Mapping a computer code to wires and gates
CN109471637B (zh) * 2018-11-08 2021-07-06 西安电子科技大学 电路图的审查脚本调试方法
DE102020103941A1 (de) * 2020-02-14 2021-08-19 Grimme Landmaschinenfabrik Gmbh & Co. Kg Verfahren zum Betrieb einer Maschine zum Ernten und/oder Trennen von Hackfrüchten, zugehörige Maschine und zugehöriges Computerprogrammprodukt

Family Cites Families (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5295229A (en) * 1992-06-17 1994-03-15 Motorola, Inc. Circuit and method for determining membership in a set during a fuzzy logic operation
US9195784B2 (en) * 1998-08-31 2015-11-24 Cadence Design Systems, Inc. Common shared memory in a verification system
US20060117274A1 (en) * 1998-08-31 2006-06-01 Tseng Ping-Sheng Behavior processor system and method
US6691207B2 (en) * 2001-12-28 2004-02-10 Hewlett-Packard Development Company, L.P. Method and apparatus for implementing loop compression in a program counter trace
CA2526467C (en) * 2003-05-20 2015-03-03 Kagutech Ltd. Digital backplane recursive feedback control
US7487542B2 (en) 2004-01-14 2009-02-03 International Business Machines Corporation Intrusion detection using a network processor and a parallel pattern detection engine
CN100347992C (zh) * 2004-07-09 2007-11-07 清华大学 实现线速对数据流按规则库近似匹配的可配置的硬件结构
US7392229B2 (en) 2005-02-12 2008-06-24 Curtis L. Harris General purpose set theoretic processor
US8065249B1 (en) 2006-10-13 2011-11-22 Harris Curtis L GPSTP with enhanced aggregation functionality
US7774286B1 (en) 2006-10-24 2010-08-10 Harris Curtis L GPSTP with multiple thread functionality
FR2924873B1 (fr) * 2007-12-07 2011-11-25 Valeo Sys Controle Moteur Sas Circuit de controle du courant dans un organe electrique de commande ou de la tension aux bornes dudit organe electrique de commande
US7881100B2 (en) * 2008-04-08 2011-02-01 Micron Technology, Inc. State machine sensing of memory cells
US8938590B2 (en) 2008-10-18 2015-01-20 Micron Technology, Inc. Indirect register access method and system
US8209521B2 (en) 2008-10-18 2012-06-26 Micron Technology, Inc. Methods of indirect register access including automatic modification of a directly accessible address register
US7970964B2 (en) * 2008-11-05 2011-06-28 Micron Technology, Inc. Methods and systems to accomplish variable width data input
US7917684B2 (en) 2008-11-05 2011-03-29 Micron Technology, Inc. Bus translator
US9639493B2 (en) 2008-11-05 2017-05-02 Micron Technology, Inc. Pattern-recognition processor with results buffer
US20100118425A1 (en) 2008-11-11 2010-05-13 Menachem Rafaelof Disturbance rejection in a servo control loop using pressure-based disc mode sensor
US9164945B2 (en) 2008-12-01 2015-10-20 Micron Technology, Inc. Devices, systems, and methods to synchronize parallel processing of a single data stream
US9348784B2 (en) 2008-12-01 2016-05-24 Micron Technology, Inc. Systems and methods for managing endian mode of a device
US10007486B2 (en) 2008-12-01 2018-06-26 Micron Technology, Inc. Systems and methods to enable identification of different data sets
US20100138575A1 (en) 2008-12-01 2010-06-03 Micron Technology, Inc. Devices, systems, and methods to synchronize simultaneous dma parallel processing of a single data stream by multiple devices
US8140780B2 (en) 2008-12-31 2012-03-20 Micron Technology, Inc. Systems, methods, and devices for configuring a device
US8281395B2 (en) 2009-01-07 2012-10-02 Micron Technology, Inc. Pattern-recognition processor with matching-data reporting module
US8214672B2 (en) * 2009-01-07 2012-07-03 Micron Technology, Inc. Method and systems for power consumption management of a pattern-recognition processor
US20100174887A1 (en) 2009-01-07 2010-07-08 Micron Technology Inc. Buses for Pattern-Recognition Processors
US8843523B2 (en) 2009-01-12 2014-09-23 Micron Technology, Inc. Devices, systems, and methods for communicating pattern matching results of a parallel pattern search engine
US9836555B2 (en) 2009-06-26 2017-12-05 Micron Technology, Inc. Methods and devices for saving and/or restoring a state of a pattern-recognition processor
US9501705B2 (en) 2009-12-15 2016-11-22 Micron Technology, Inc. Methods and apparatuses for reducing power consumption in a pattern recognition processor
US9323994B2 (en) 2009-12-15 2016-04-26 Micron Technology, Inc. Multi-level hierarchical routing matrices for pattern-recognition processors
US8489534B2 (en) 2009-12-15 2013-07-16 Paul D. Dlugosch Adaptive content inspection
US8766666B2 (en) 2010-06-10 2014-07-01 Micron Technology, Inc. Programmable device, hierarchical parallel machines, and methods for providing state information
US8601013B2 (en) * 2010-06-10 2013-12-03 Micron Technology, Inc. Analyzing data using a hierarchical structure
WO2012103146A2 (en) 2011-01-25 2012-08-02 Micron Technology, Inc. Utilizing special purpose elements to implement a fsm
JP5763783B2 (ja) 2011-01-25 2015-08-12 マイクロン テクノロジー, インク. 正規表現をコンパイルするための方法および装置
US8726256B2 (en) * 2011-01-25 2014-05-13 Micron Technology, Inc. Unrolling quantifications to control in-degree and/or out-degree of automaton
EP2668576B1 (en) * 2011-01-25 2024-04-24 Micron Technology, INC. State grouping for element utilization
US8593175B2 (en) 2011-12-15 2013-11-26 Micron Technology, Inc. Boolean logic in a state machine lattice
US8782624B2 (en) * 2011-12-15 2014-07-15 Micron Technology, Inc. Methods and systems for detection in a state machine
US8648621B2 (en) 2011-12-15 2014-02-11 Micron Technology, Inc. Counter operation in a state machine lattice
US9443156B2 (en) 2011-12-15 2016-09-13 Micron Technology, Inc. Methods and systems for data analysis in a state machine
US8680888B2 (en) 2011-12-15 2014-03-25 Micron Technologies, Inc. Methods and systems for routing in a state machine

Also Published As

Publication number Publication date
US9280329B2 (en) 2016-03-08
US20130159671A1 (en) 2013-06-20
TWI515668B (zh) 2016-01-01
US20140325494A1 (en) 2014-10-30
US20160188346A1 (en) 2016-06-30
CN104011736B (zh) 2017-06-20
WO2013090093A1 (en) 2013-06-20
CN107256156B (zh) 2020-11-03
TW201331856A (zh) 2013-08-01
EP2791862A1 (en) 2014-10-22
EP2791862B1 (en) 2022-10-19
CN104011736A (zh) 2014-08-27
KR20140102290A (ko) 2014-08-21
US8782624B2 (en) 2014-07-15
KR101920956B1 (ko) 2018-11-21
JP2015509228A (ja) 2015-03-26
US9817678B2 (en) 2017-11-14
CN107256156A (zh) 2017-10-17

Similar Documents

Publication Publication Date Title
JP6181074B2 (ja) ステートマシンにおける検出方法とシステム
US11599770B2 (en) Methods and devices for programming a state machine engine
US20240104020A1 (en) Methods and systems for handling data received by a state machine engine
JP6082753B2 (ja) ステートマシンにおけるデータ解析用の方法およびシステム
JP6126127B2 (ja) ステートマシンにおけるルーティング用の方法およびシステム
JP6154824B2 (ja) ステートマシンラチスにおけるブール型論理
JP6109186B2 (ja) 状態機械格子におけるカウンタ動作
JP6106752B2 (ja) 状態機械エンジンのための結果生成
JP6041987B2 (ja) 状態機械エンジンにおいて状態ベクトルデータを使用するための方法およびシステム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150903

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160831

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160920

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170516

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170623

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170711

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170719

R150 Certificate of patent or registration of utility model

Ref document number: 6181074

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250