JP2015531935A - 状態機械エンジンのための結果生成 - Google Patents

状態機械エンジンのための結果生成 Download PDF

Info

Publication number
JP2015531935A
JP2015531935A JP2015529852A JP2015529852A JP2015531935A JP 2015531935 A JP2015531935 A JP 2015531935A JP 2015529852 A JP2015529852 A JP 2015529852A JP 2015529852 A JP2015529852 A JP 2015529852A JP 2015531935 A JP2015531935 A JP 2015531935A
Authority
JP
Japan
Prior art keywords
result
storage element
data
state machine
machine engine
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.)
Granted
Application number
JP2015529852A
Other languages
English (en)
Other versions
JP6106752B2 (ja
JP2015531935A5 (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 JP2015531935A publication Critical patent/JP2015531935A/ja
Publication of JP2015531935A5 publication Critical patent/JP2015531935A5/ja
Application granted granted Critical
Publication of JP6106752B2 publication Critical patent/JP6106752B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B19/00Programme-control systems
    • G05B19/02Programme-control systems electric
    • G05B19/04Programme control other than numerical control, i.e. in sequence controllers or logic controllers
    • G05B19/045Programme control other than numerical control, i.e. in sequence controllers or logic controllers using logic state machines, consisting only of a memory or a programmable logic device containing the logic for the controlled machine and in which the state of its outputs is dependent on the state of its inputs or part of its own output states, e.g. binary decision controllers, finite state controllers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0653Monitoring storage devices or systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Automation & Control Theory (AREA)
  • Logic Circuits (AREA)
  • Image Processing (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

状態機械エンジン(14)は、(例えば、適合)結果メモリなどの記憶素子(150)を含む。記憶素子(150)は、データの分析の結果を受信するように構成される。記憶素子(150)はまた、結果の特徴に基づいて、記憶素子(150)の特定の部分の中にその結果を記憶するように構成される。加えて、記憶素子(150)は、その結果に対応する結果指示子を記憶するように構成される。他の状態機械エンジン(14)および方法も開示される。【選択図】図9

Description

本発明の実施形態は、概して、電子デバイスに関し、より具体的には、特定の実施形態において、データ分析のための並列デバイスを有する電子デバイスに関する。
複雑なパターン認識は、従来のフォンノイマン式コンピュータ上で実施するには非効率的であり得る。しかしながら、生物の脳、特に人間の脳は、パターン認識が得意である。現在の研究は、人間の脳が、新皮質中の一連の階層的に組織化されたニューロン層を用いてパターン認識を実施することを示唆している。階層のより低い層中のニューロンは、例えば、感覚器官からの「生の信号」を分析し、一方でより高い層中のニューロンは、より低いレベルのニューロンからの信号出力を分析する。新皮質におけるこの階層的システムは、おそらくは脳の他の領域と組み合わされて、複雑なパターン認識を遂行し、それにより、人間が、空間的推論、意識的思考、および複雑な言語といった高レベルの機能を実施することを可能にする。
コンピューティングの分野では、パターン認識タスクは、ますます困難なものになっている。さらにより多量のデータがコンピュータ間で送信され、ユーザが特定することを希望するパターンの数は増している。例えば、スパムまたはマルウエアが、データストリーム中のパターン、例えば、特定のフレーズまたはコードの一部を検索することによって、しばしば検出される。パターンの数は、スパムおよびマルウエアの多様性と共に増加するが、それは、新しい変形を検索するために、新しいパターンが実装され得るためである。これらのパターンの各々についてデータストリームを検索することにより、コンピューティング上のボトルネックが形成されかねない。しばしば、データストリームが受信されると、それは、一つずつ、各々のパターンについて検索される。システムがデータストリームの次の部分を検索する状態となるまでの遅延は、パターンの数と共に増加する。したがって、パターン認識は、データの受信を遅延させる。
ハードウエアは、パターンについてデータストリームを検索するように設計されてきたが、このハードウエアは、しばしば、所与の時間内に適切な量のデータを処理することが不可能である。データストリームを検索するように構成される一部のデバイスは、データストリームを複数の回路間に分散させることによってこれを実行する。これらの回路は、各々が、データストリームがパターンの一部分に適合するかどうかを判定する。しばしば、多数の回路が並列に動作して、各々が、ほぼ同時にデータストリームを検索する。しかしながら、生物の脳により匹敵する様式でパターン認識を実施することを効果的に可能にするシステムは存在しなかった。このようなシステムの開発が望ましい。
本発明の様々な実施形態による、状態機械エンジンを有するシステムの例を図示する。 本発明の様々な実施形態による、図1の状態機械エンジンのFSM格子の例を図示する。 本発明の様々な実施形態による、図2のFSM格子のブロックの例を図示する。 本発明の様々な実施形態による、図3のブロックの行の例を図示する。 本発明の様々な実施形態による、図4の行のうちの2つずつの群の例を図示する。 本発明の様々な実施形態による、有限状態機械グラフの例を図示する。 本発明の様々な実施形態による、FSM格子で実装される2レベルの階層の例を図示する。 本発明の様々な実施形態による、コンパイラがソースコードを図2のFSM格子のプログラミング用のバイナリファイルに変換するための方法の例を図示する。 本発明の様々な実施形態による、状態機械エンジンを図示する。 本発明の様々な実施形態による、図3のブロックの行の第2の例を図示する。 本発明の様々な実施形態による、図10の適合素子の例を図示する。 本発明の様々な実施形態による、図11のマルチプレクサに対応する真理値表を図示する。 本発明の様々な実施形態による、図11の適合結果メモリ150を図示する。
ここで図面を参照すると、図1は、一般に参照番号10で示されるプロセッサベースのシステムの実施形態を図示する。システム10(例えば、データ分析システム)は、デスクトップコンピュータ、ラップトップコンピュータ、無線呼び出し、携帯電話、自己管理手帳、携帯式オーディオプレイヤー、制御回路、カメラ等の様々なタイプのうちの任意のものであり得る。システム10はまた、ルーター、サーバ、またはクライアント(例えば、前述のタイプのコンピュータのうちの1つ)等のネットワークノードであってもよい。システム10は、コピー機、スキャナ、プリンタ、ゲーム機、テレビ、セットトップビデオ分配もしくは記録システム、ケーブルボックス、パーソナルデジタルメディアプレイヤー、工場自動化システム、自動車コンピュータシステム、または医療デバイスといった、なんらかの他の種類の電子デバイスであってもよい。(システムのこれらの様々な例を説明するために用いられる用語は、本明細書で用いられる他の用語の多くと同様に、一部の参照符号を共有し得るため、列挙された他の項目により狭義に解釈されるべきではない。)
システム10等の一般的なプロセッサベースのデバイスでは、マイクロプロセッサ等のプロセッサ12は、システム10におけるシステム機能および要求の処理を制御する。さらに、プロセッサ12は、システム制御を共有する複数のプロセッサを備え得る。プロセッサ12は、プロセッサ12が、システム10の内部またはシステム10の外部に記憶され得る命令を実行することによって、システム10を制御するように、システム10の素子の各々に直接または間接的に連結され得る。
本明細書に記載の実施形態によると、システム10は、プロセッサ12の制御下で動作し得る状態機械エンジン14を含む。状態機械エンジン14は、自動理論を用い得る。例えば、状態機械エンジン14は、これらに限定されないが、ミーリーアーキテクチャ、ムーアアーキテクチャ、有限状態機械(FSM)、決定性FSM(DFSM)、ビットパラレル状態機械(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ギガバイト/秒を超えるかまたはほぼ等しいデータストリームに、そのデータストリームを遅延させることなく、適用し得る。
一実施形態では、状態機械エンジン14は、データストリーム中の多数のパターンを認識する(例えば、検出する)ように構成され得る。例えば、状態機械エンジン14は、ユーザまたは他のエンティティが分析することを希望し得る様々なタイプのデータストリームのうちの1つ以上におけるパターンを検出するために利用され得る。例えば、状態機械エンジン14は、インターネットを介して受信されたパケットまたはセルラーネットワークを介して受信された音声もしくはデータといった、ネットワークを介して受信されたデータのストリームを分析するように構成され得る。一例では、状態機械エンジン14は、スパムまたはマルウエアについてデータストリームを分析するように構成され得る。データストリームは、直列のデータストリームとして受信され得、その場合、データは、時間的、語彙的、または意味論的に意義のある順序といった、意味を有する順序で受信される。代替的には、データストリームは、並列または不特定の順序で受信され、次に、例えば、インターネットを介して受信されたパケットを再順序付けすることによって、直列のデータストリームに変換され得る。一部の実施形態では、データストリームは、用語を直列に表し得るが、用語の各々を表すビットは、並列に受信され得る。データストリームは、システム10の外部のソースから受信され得るか、または、メモリ16等のメモリデバイスに問い合わせを行い、メモリ16に記憶されたデータからデータストリームを形成することによって形成され得る。他の例では、状態機械エンジン14は、ある特定の語を綴る一連の文字、遺伝子を指定する一連の遺伝子塩基対、画像の一部分を形成する写真もしくは動画ファイル内の一連のビット、プログラムの一部を形成する実行可能ファイル内の一連のビット、または歌もしくは話されたフレーズの一部を形成する音声ファイル内の一連のビットを認識するように構成され得る。分析されるデータのストリームは、複数のデータビットを、バイナリ形式または他の形式、例えば、ベーステン、ASCII等で、含み得る。このストリームは、一桁または複数桁、例えば、いくつかの2進数でデータを符号化し得る。
理解されるように、システム10は、メモリ16を含み得る。メモリ16は、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、同期式DRAM(SDRAM)、ダブルデータレートDRAM(DDR SDRAM)、DDR2 SDRAM、DDR3 SDRAM等といった、揮発性メモリを含み得る。メモリ16はまた、リードオンリーメモリ(ROM)、PC−RAM、シリコン−酸化物−窒化物−酸化物−シリコン(SONOS)メモリ、金属−酸化物−窒化物−酸化物−シリコン(MONOS)メモリ、ポリシリコンフローティングゲートベースメモリ、および/または揮発性メモリと共に用いられる様々なアーキテクチャ(例えば、NANDメモリ、NORメモリ等)の他のタイプのフラッシュメモリといった、不揮発性メモリを含み得る。メモリ16は、DRAMデバイス等の1つ以上のメモリデバイスを含み得、これが、状態機械エンジン14よって分析されるデータを提供し得る。本明細書に使用される際、「提供する」という用語は、一般的に、方向付ける、入力する、挿入する、発行する、ルーティングする、送出する、転送する、送信する、生成する、与える、出力する、置く、記述する等を指し得る。このようなデバイスは、ソリッドステートドライブ(SSD)、MultimediaMediaCards(MMC)、SecureDigital(SD)カード、CompactFlash(CF)カード、または任意の他の好適なデバイスと称され得るか、またはそれらを含み得る。さらに、このようなデバイスは、ユニバーサルシリアルバス(USB)、周辺構成要素相互接続(PCI)、PCI Express(PCI−E)、小型コンピュータシステムインターフェース(SCSI)、IEEE1394(Firewire)、または任意の他の好適なインターフェース等、任意の好適なインターフェースを介してシステム10に連結され得ることを理解されたい。フラッシュメモリデバイス等、メモリ16の動作を容易にするために、システム10は、メモリコントローラ(図示されない)を含んでもよい。理解されるように、メモリコントローラは、独立したデバイスであってもよく、または、それはプロセッサ12と統合されてもよい。加えて、システム10は、磁気記憶デバイス等の外部記憶装置18を含んでもよい。外部記憶装置もまた、状態機械エンジン14に入力データを提供し得る。
システム10は、いくつかのさらなる素子を含み得る。例えば、コンパイラ20は、図8に関連してより詳細に説明されるように、状態機械エンジン14を構成する(例えば、プログラムする)ために用いられ得る。入力デバイス22もまた、ユーザがシステム10にデータを入力することを可能にするために、プロセッサ12に連結され得る。例えば、入力デバイス22は、状態機械エンジン14によって後で分析するために、メモリ16にデータを入力するために用いられ得る。入力デバイス22は、例えば、ボタン、切り替え素子、キーボード、ライトペン、スタイラスペン、マウス、および/または音声認識システムを含み得る。ディスプレイ等の出力デバイス24もまた、プロセッサ12に連結され得る。ディスプレイ24には、例えば、LCD、CRT、LED、および/またはオーディオディスプレイが含まれ得る。システムはまた、インターネット等のネットワークと相互作用するために、ネットワークインターフェースカード(NIC)等のネットワークインターフェースデバイス26を含み得る。理解されるように、システム10は、システム10の用途に応じて、多数の他の構成要素を含み得る。
図2〜5は、FSM格子30の例を図示する。ある例では、FSM格子30は、ブロック32のアレイを備える。記載されるように、各々のブロック32は、FSMにおける複数の状態に対応する複数の選択的に連結可能なハードウエア素子(例えば、構成可能素子および/または特殊目的素子)を含み得る。FSMにおける状態に類似して、ハードウエア素子は、入力ストリームを分析し、入力ストリームに基づいて下流のハードウエア素子を起動することができる。
構成可能素子は、多数の異なる機能を実装するように構成(例えば、プログラム)され得る。例えば、構成可能素子は、行38(図3および4に示される)ならびにブロック32(図2および3に示される)に階層的に組織化される、状態機械素子(SME)34、36(図5に示される)を含み得る。SMEはまた、状態遷移素子(STE)と考えられ得る。階層的に組織化されたSME34、36の間で信号をルーティングするために、ブロック間切り替え素子40(図2および3に示される)、ブロック内切り替え素子42(図3および4に示される)、ならびに行内切り替え素子44(図4に示される)を含む、構成可能な切り替え素子の階層が使用され得る。
以下に記載されるように、切り替え素子は、ルーティング構造およびバッファを含み得る。SME34、36は、FSM格子30によって実装されるFSMの状態に対応し得る。SME34、36は、以下に説明されるように、構成可能な切り替え素子を用いることによって一緒に連結され得る。したがって、FSMは、状態の機能に対応するようにSME34、36を構成し、FSMにおける状態の間の遷移に対応するようにSME34、36を選択的に連結することによって、FSM格子30上に実装され得る。
図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の状態を構成(例えば、設定)し得る。例えば、イメージは、SME34、36が入力ブロック52における所与の入力に対してある特定の方式で反応するように構成し得る。例えば、SME34、36は、文字「a」が入力ブロック52で受信されたときに高信号を出力するように設定され得る。
ある例では、入力ブロック52、出力ブロック54、および/またはプログラミングインターフェース56は、レジスタへの書き込みまたはそこからの読み出しが、データをそれぞれの素子へまたはそこから提供するように、レジスタとして実装され得る。したがって、プログラミングインターフェース56に対応するレジスタに記憶されたイメージからのビットを、SME34、36上にロードすることができる。図2は、ブロック32、入力ブロック52、出力ブロック54、およびブロック間切り替え素子40の間のある特定の数の導線(例えば、ワイヤ、トレース)を図示するが、他の例では、より少ないか、またはより多い導線が用いられ得ることを理解されたい。
図3は、ブロック32の例を図示する。ブロック32は、構成可能なブロック内切り替え素子42と選択的に一緒に連結され得る複数の行38を含み得る。加えて、行38は、ブロック間切り替え素子40により、別のブロック32内の別の行38に選択的に連結され得る。行38は、本明細書では2つずつの群(GOT)60と称される素子の対に組織化される、複数のSME34、36を含む。ある例では、ブロック32は、十六(16)個の行38を備える。
図4は、行38の例を図示する。GOT60は、構成可能な行内切り替え素子44によって、行38内の他のGOT60および任意の他の素子(例えば、特殊目的素子58)に選択的に連結され得る。GOT60はまた、ブロック内切り替え素子42によって他の行38内の他のGOT60に、または、ブロック間切り替え素子40によって他のブロック32内の他のGOT60に、連結され得る。ある例では、GOT60は、第1および第2の入力62、64、ならびに出力66を有する。第1の入力62は、図5を参照してさらに例示されるように、GOT60の第1のSME34に連結され、第2の入力64は、GOT60の第2のSME36に連結される。
ある例では、行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の各々の一方のSME34、36のみに連結され得るが、GOT60の他方のSME34、36には連結され得ない。ある例では、図5に関してより良好に例示されるように、第2の複数の行相互接続導線70のうちの第1の半分は、行38内のSME34、36のうちの第1の半分(各々のGOT60から一方のSME34)に連結され得、第2の複数の行相互接続導線70のうちの第2の半分は、行38内のSME34、36のうちの第2の半分(各々のGOT60から他方のSME34、36)に連結され得る。第2の複数の行相互接続導線70とSME34、36との間の制限された接続性は、本明細書では「パリティ」と称される。ある例では、行38はまた、カウンタ等の特殊目的素子58、構成可能なブール論理素子、ルックアップテーブル、RAM、フィールド構成可能ゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、構成可能プロセッサ(例えば、マイクロプロセッサ)、または特殊目的機能を実施するための他の素子といった、特殊目的素子58を含み得る。
ある例では、特殊目的素子58は、カウンタ(本明細書ではカウンタ58とも称される)を備える。ある例では、カウンタ58は、12ビットの構成可能ダウンカウンタを備える。12ビット構成可能カウンタ58は、カウント入力、リセット入力、およびゼロカウント出力を有する。カウント入力は、アサートされると、カウンタ58の値を1だけデクリメントする。リセット入力は、アサートされると、カウンタ58に、関連付けられたレジスタから初期値をロードさせる。12ビットカウンタ58の場合、最大で12ビットの数を、初期値としてロードすることができる。カウンタ58の値がゼロ(0)にデクリメントされると、ゼロカウント出力がアサートされる。カウンタ58はまた、パルスモードとホールドモードとの少なくとも2つのモードを有する。カウンタ58がパルスモードに設定される場合、ゼロカウント出力は、カウンタ58がゼロに到達するとアサートされる。例えば、ゼロカウント出力は、カウンタ58になる直後に次のデータバイトの処理中にアサートされるが、これによりカウンタ58が入力文字サイクルに対して時間的にオフセットされている。次の文字サイクルの後、ゼロカウント出力は、もはやアサートされることはない。このようにして、例えば、パルスモードで、ゼロカウント出力は、1つの入力文字処理サイクルの間アサートされる。カウンタ58がホールドモードに設定される場合、ゼロカウント出力は、カウンタ58がゼロにデクリメントするとクロックサイクルの間にアサートされ、リセット入力がアサートされていることによってカウンタ58がリセットされるまで、アサートされたままである。
別の例では、特殊目的素子58はブール論理を備える。例えば、ブール論理は、AND、OR、NAND、NOR、積和(SoP)、積和のネゲート出力(NSoP)、和積のネゲート出力(NPoS)、および和積(PoS)の関数等の論理関数を実施するために用いられ得る。このブール論理は、FSM格子30中の(本明細書で後述されるように、FSMのターミナルノードに対応する)ターミナル状態のSMEからデータを抽出するために用いられ得る。抽出されたデータは、状態データを他のFSM格子30に提供するおよび/またはFSM格子30を再構成するために用いられる構成用データを提供する、または別のFSM格子30を再構成するために用いられ得る。
図5はGOT60の例を示す。GOT60は、入力62、64を有し、それらの出力72、74がORゲート76および3対1マルチプレクサ78に連結される、第1のSME34および第2のSME36を含む。3対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に連結され得、パリティ問題を克服し得る共通の出力66が、生成され得る。ある例では、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の、いずれにも連結されないか、一方または双方に連結され得る。加えて、入力62、64の各々が、複数の行ルーティングラインに連結され得るとき、ORゲートを利用して、入力62、64ならびに出力72、74に沿ったこれらの行ルーティングラインからの入力のうちのいずれかを選択し得る。
ある例では、状態機械素子34、36は、検出ライン82に並列に連結された、ダイナミックランダムアクセスメモリ(DRAM)でしばしば用いられるもの等の複数のメモリセル80を備える。1つのこのようなメモリセル80は、高いかまたは低い値(例えば、1または0)に対応するものといった、データ状態に設定することが可能なメモリセルを備える。メモリセル80の出力は、検出ライン82に連結され、メモリセル80への入力は、データストリームライン84上のデータに基づく信号を受信する。ある例では、入力ブロック52における入力は、メモリセル80のうちの1つ以上を選択するために復号化される。選択されたメモリセル80は、その記憶されたデータ状態を、検出ライン82上に出力として提供する。例えば、入力ブロック52で受信されたデータは、デコーダ(図示せず)に提供され得、デコーダは、データストリームライン84のうちの1つ以上を選択し得る。ある例では、デコーダは、8ビットのACSII文字を256個のデータストリームライン84のうちの対応する1つに変換することが可能である。
メモリセル80は、したがって、メモリセル80が高い値に設定され、データストリームライン84上のデータがメモリセル80を選択する場合、高信号を検出ライン82に出力する。データストリームライン84上のデータがメモリセル80を選択し、メモリセル80が低い値に設定される場合、メモリセル80は、低信号を検出ライン82に出力する。検出ライン82上のメモリセル80からの出力は、検出セル86によって感知される。
ある例では、入力ライン62、64上の信号は、それぞれの検出セル86をアクティブ状態または非アクティブ状態に設定する。非アクティブ状態に設定されたとき、検出セル86は、それぞれの検出ライン82上の信号とは無関係に、それぞれの出力72、74上に低信号を出力する。アクティブ状態に設定されたとき、検出セル86は、それぞれのSME34、36のメモリセル82のうちの1つから高信号が検出される場合に、高信号をそれぞれの出力ライン72、74上に出力する。アクティブ状態にあるとき、検出セル86は、それぞれのSME34、36のメモリセル82の全てからの信号が低いときには、それぞれの出力ライン72、74上に低信号を出力する。
ある例では、SME34、36は256個のメモリセル80を含み、各々のメモリセル80は異なるデータストリームライン84に連結される。したがって、SME34、36は、データストリームライン84のうちの選択された1つ以上が高信号をその上に有するときに高信号を出力するようにプログラムすることが可能である。例えば、SME34は、第1のメモリセル80(例えば、ビット0)が高く設定され、全ての他のメモリセル80(例えば、ビット1〜255)が低く設定され得る。それぞれの検出セル86がアクティブ状態にあるとき、SME34は、ビット0に対応するデータストリームライン84がその上に高信号を有する場合に、出力72に高信号を出力する。他の例では、SME34は、適切なメモリセル80を高い値に設定することによって、複数のデータストリームライン84のうちの1つがその上に高信号を有するときに、高信号を出力するように設定することができる。
ある例では、メモリセル80は、関連付けられたレジスタからビットを読み出すことによって高いまたは低い値に設定することができる。したがって、SME34は、コンパイラ20によって作成されたイメージをレジスタに記憶して、レジスタのビットを関連付けられたメモリセル80にロードすることによって構成され得る。ある例では、コンパイラ20によって作成されたイメージは、高いまたは低い(例えば、1または0の)ビットの二値イメージを含む。このイメージは、SME34、36をカスケードすることによりFSMを実装するようにFSM格子30を構成することが可能である。例えば、第1のSME34は、検出セル86をアクティブ状態に設定することによりアクティブ状態に設定され得る。第1のSME34は、ビット0に対応するデータストリームライン84が高信号をその上に有するときに高信号を出力するように設定され得る。第2のSME36は非アクティブ状態に初期設定され得るが、アクティブであるとき、ビット1に対応するデータストリームライン84が高信号をその上に有するときに高信号を出力するように設定することができる。第1のSME34および第2のSME36は、第1のSME34の出力72を第2のSME36の入力64に連結させるように設定することによって、カスケードすることができる。したがって、ビット0に対応するデータストリームライン84上で高信号が感知された場合、第1のSME34は出力72に高信号を出力し、第2のSME36の検出セル86をアクティブ状態に設定する。ビット1に対応するデータストリームライン84上で高信号が感知された場合、第2のSME36は、別のSME36を起動するためまたはFSM格子30から出力のために、出力74に高信号を出力する。
ある例では、単一の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は構成可能素子の集合を含み、ここで、異なる集合の構成可能素子は、異なる入力データに反応し得る。同様に、各々のFSM格子30と、構成可能素子の各々の対応する集合とは、区別可能な出力を提供することができる。一部の例では、第1のFSM格子30からの出力ブロック54を第2のFSM格子30の入力ブロック52に連結させることが可能であり、それによって、第2のFSM格子30に対する入力データが、一連のFSM格子30の階層的配列中の第1のFSM格子30からの出力データを含むことが可能となる。
ある例では、FSM格子30上にロードされるイメージは、構成可能素子、構成可能切り替え素子、およびFSM格子30内の特殊目的素子を構成するための複数ビットのデータを含む。ある例では、イメージは、ある特定の入力に基づいて所望の出力を提供するようにFSM格子30を構成するために、FSM格子30上にロードされ得る。出力ブロック54は、データ入力ブロック52でのデータに対する構成可能素子の反応に基づいて、FSM格子30からの出力を提供し得る。出力ブロック54からの出力は、所与のパターンの適合を示す単一ビット、複数のパターンに対する適合および不適合を示す複数ビットを含む語、ならびに所与の瞬間での全てのもしくはある特定の構成可能素子の状態に対応する状態ベクトルを含み得る。説明したように、いくつかのFSM格子30は、パターン認識(例えば、音声認識、画像認識等)、信号処理、撮像、コンピュータビジョン、暗号法等のデータ分析を実施するために、状態機械エンジン14等の状態機械エンジンに含まれ得る。
図6は、FSM格子30によって実装することが可能な有限状態機械(FSM)の例となるモデルを図示する。FSM格子30は、FSMの物理的実装物として構成(例えば、プログラム)され得る。FSMは、1つ以上のルートノード92を含むダイアグラム90(例えば、有向グラフ、無向グラフ、擬グラフ)として表すことができる。ルートノード92に加えて、FSMは、1つ以上のエッジ98を介してルートノード92および他の標準ノード94に接続されたいくつかの標準ノード94およびターミナルノード96から作成することが可能である。ノード92、94、96はFSM中の状態に対応する。エッジ98は、状態の間の遷移に対応する。
ノード92、94、96の各々は、アクティブ状態または非アクティブ状態にあり得る。非アクティブ状態にあるとき、ノード92、94、96は入力データに反応する(例えば、応答する)ことはない。アクティブ状態にあるとき、ノード92、94、96は入力データに反応し得る。上流のノード92、94は、入力データが上流のノード92、94と下流のノード94、96との間のエッジ98によって指定された基準に適合するときに、ノードの下流にあるノード94、96を起動することによって、入力データに反応し得る。例えば、文字「b」を指定する第1のノード94は、第1のノード94がアクティブであり、文字「b」が入力データとして受信されたときに、エッジ98によって、第1のノード94に接続されている第2のノード94を起動する。本明細書で用いられる際、「上流」とは、1つ以上のノードの間の関係を指し、ここで、1つ以上の他のノードの上流にある(または、ループもしくはフィードバックの構成の場合にはそれ自体の上流にある)第1のノードは、第1のノードが1つ以上の他のノードを起動することができる(またはループの場合にはそれ自体を起動することができる)状況を指す。同様に、「下流」とは、1つ以上の他のノードの下流にある(または、ループの場合にはそれ自体の下流にある)第1のノードが、1つ以上の他のノードによって起動され得る(または、ループの場合にはそれ自体によって起動され得る)関係を指す。したがって、「上流」および「下流」という用語は、本明細書では、1つ以上のノードの間の関係を指すが、これらの用語は、ノード間でのループまたは他の非線形経路の使用を排除しない。
ダイアグラム90では、ルートノード92は、最初に起動され得、入力データがルートノード92からのエッジ98に適合する場合、下流のノード94を起動し得る。ノード94は、入力データがノード94からのエッジ98に適合する場合、ノード96を起動し得る。ダイアグラム90全体を通じて、ノード94、96は、入力データが受信されると、この様式で起動され得る。ターミナルノード96は、入力データ内の目的とするシーケンスの適合に対応する。したがって、ターミナルノード96の起動は、目的とするシーケンスが入力データとして受信されたことを示す。パターン認識機能を実装しているFSM格子30の文脈では、ターミナルノード96への到達は、目的とする特定のパターンが入力データ中に検出されたことを示し得る。
ある例では、各々のルートノード92、標準ノード94、およびターミナルノード96は、FSM格子30中の構成可能素子に対応し得る。各々のエッジ98は、構成可能素子の間の接続に対応し得る。したがって、別の標準ノード94またはターミナルノード96に遷移する(例えば、これに接続するエッジ98を有する)標準ノード94は、別の構成可能素子に遷移する(例えば、これに対して出力を提供する)構成可能素子に対応する。一部の例では、ルートノード92は、対応する構成可能素子を有しない。
理解されるように、ノード92をルートノードとして説明し、ノード96をターミナルノードとして説明したが、必ずしも特定の「開始」またはルートノードが存在する必要はなく、また必ずしも特定の「終了」または出力ノードが存在する必要はない。言い換えれば、いずれのノードも開始点であり得、またいずれのノードも出力を提供し得る。
FSM格子30がプログラムされたとき、構成可能素子の各々もまた、アクティブ状態または非アクティブ状態にあり得る。所与の構成可能素子は、非アクティブであるとき、対応するデータ入力ブロック52で、入力データに反応しない。アクティブな構成可能素子はデータ入力ブロック52で入力データに反応し得、その入力データが構成可能素子の設定と適合すると、下流の構成可能素子を起動し得る。ある構成可能素子がターミナルノード96に対応するとき、その構成可能素子は、外部デバイスとの適合の指示を提供するために、出力ブロック54に連結され得る。
プログラミングインターフェース56を介してFSM格子30上にロードされたイメージは、構成可能素子および特殊目的素子、ならびに構成可能素子と特殊目的素子との間の接続を構成し得、それにより、データ入力ブロック52でのデータに対する反応に基づいたノードの一連の起動により所望のFSMが実装される。ある例では、構成可能素子は、単一のデータサイクル(例えば、単一の文字、文字の集合、単一のクロックサイクル)にわたってアクティブのまま留まり、次に、上流の構成可能素子によって再起動されない限り、非アクティブになる。
ターミナルノード96は、過去の事象の圧縮された履歴を記憶するものと考えることが可能である。例えば、ターミナルノード96に到達するために必要とされる入力データの1つ以上のパターンは、そのターミナルノード96の起動によって表すことが可能である。ある例では、ターミナルノード96によって提供される出力はバイナリである、例えば、その出力は、目的とするパターンが適合したかどうかを示す。ダイアグラム90中の標準ノード94に対するターミナルノード96の比は非常に小さい場合がある。言い換えれば、FSM中には高度の複雑性があり得るとはいえ、FSMの出力は、比較すると小さい可能性がある。
ある例では、FSM格子30の出力は状態ベクトルを含み得る。状態ベクトルは、FSM格子30の構成可能素子の状態(例えば、起動されているか起動されていないか)を含む。別の例では、状態ベクトルは、構成可能素子がターミナルノード96に対応するかしないかとは無関係に、構成可能素子の全てまたは部分集合の状態を含み得る。ある例では、状態ベクトルは、ターミナルノード96に対応する構成可能素子に対する状態を含む。したがって、出力は、ダイアグラム90の全てのターミナルノード96によって提供される指示の収集物を含み得る。状態ベクトルは語として表すことが可能であるが、その場合、各々のターミナルノード96によって提供されるバイナリの指示は1ビットの語を含む。ターミナルノード96のこの符号化は、FSM格子30に対する検出状態(例えば、目的とするシーケンスが、および、どのシーケンスが検出されたか)の効果的な指示を提供し得る。
上述したように、FSM格子30は、パターン認識機能を実装するようにプログラムすることができる。例えば、FSM格子30は、入力データ中の1つ以上のデータシーケンス(例えば、署名、パターン)を認識するように構成され得る。目的とするデータシーケンスがFSM格子30によって認識されたとき、その認識の指示は、出力ブロック54で提供され得る。ある例では、パターン認識は、例えば、ネットワークデータ中のマルウエアまたは他のデータを特定するために、記号(例えば、ASCII文字)のストリングを認識することが可能である。
図7は、2つのレベルのFSM格子30が直列に連結されて、データを分析するために用いられる階層構造100の例を図示する。具体的には、図示される実施形態では、階層構造100は、直列に配列された第1のFSM格子30Aと第2のFSM格子30Bとを含む。各々のFSM格子30は、データ入力を受信するそれぞれのデータ入力ブロック52、構成用信号を受信するプログラミングインターフェースブロック56、および出力ブロック54を含む。
第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によって記録された複雑な事象(例えば、目的とするシーケンス)の要約となり得る。
図7に示されるFSM格子30A、30Bの2レベルの階層100は、2つの独立したプログラムが、同じデータストリームに基づいて動作することを可能にする。この2段階階層は、異なる領域としてモデリングされた生物の脳における視覚認識に類似し得る。このモデルでは、これらの領域は、各々が類似の計算機能を実施する(パターンマッチング)が、異なるプログラム(署名)を用いる、効果的に異なるパターン認識エンジンである。複数のFSM格子30A、30Bを一緒に接続することによって、データストリーム入力に関する増加した知識が獲得され得る。
(第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を実装することが可能である。第2のFSM格子30Bは、FSM格子30Aからの出力を受信することに加えて、複数の他のFSM格子からの入力を受信し得ることを理解すべきである。同様に、第2のFSM格子30Bは他のデバイスからの入力を受信し得る。第2のFSM格子30Bは、これらの複数の入力を組み合わせて、出力を生成し得る。
図8は、コンパイラが、ソースコードを、FSMを実装するように、格子30等のFSM格子を構成するために用いられるイメージに変換するための方法110の例を図示する。方法110は、ソースコードをシンタクスツリーに解析すること(ブロック112)、シンタクスツリーをオートマトンに変換すること(ブロック114)、オートマトンを最適化すること(ブロック116)、オートマトンをネットリストに変換すること(ブロック118)、ネットリストをハードウエア上に置くこと(ブロック120)、ネットリストをルーティングすること(ブロック122)、および結果として得られるイメージを公開すること(ブロック124)を含む。
ある例では、コンパイラ20は、ソフトウエア開発者がFSM格子30上にFSMを実装するためにイメージを作成することを可能にするアプリケーションプログラミングインターフェース(API)を含む。コンパイラ20は、ソースコード中の正規表現の入力集合を、FSM格子30を構成するように構成されるイメージに変換する方法を提供する。コンパイラ20は、フォンノイマンアーキテクチャをもつコンピュータ用の命令によって実装することが可能である。これらの命令は、コンピュータ上のプロセッサ12にコンパイラ20の機能を実装させることができる。例えば、これらの命令は、プロセッサ12によって実行されると、プロセッサ12に、プロセッサ12からアクセス可能なソースコードに対して、ブロック112、114、116、118、120、122、および124で説明したような動作を実施させることができる。
ある例では、ソースコードは、記号の群内の記号のパターンを特定するための検索ストリングを記述する。検索ストリングを記述するために、ソースコードは、複数の正規表現(regex)を含み得る。regexは、記号検索パターンを記述するためのストリングであり得る。regexは、プログラミング言語、テキストエディタ、ネットワークセキュリティ等の様々なコンピュータドメインで広く用いられる。ある例では、コンパイラにサポートされる正規表現は、非構造化データの分析のための基準を含む。非構造化データは、自由形態であり、データ内の語に適用される索引付けを有しないデータを含み得る。語は、データ内での、印刷可能であるか印刷不可能であるかは問わず、バイトの任意の組み合わせを含み得る。ある例では、コンパイラは、Perl、(例えば、Perlと互換性のある正規表現(PCRE))、PHP、Java、および.NET言語を含むregexを実装するための複数の異なるソースコード言語をサポートし得る。
ブロック112で、コンパイラ20は、ソースコードを解析して、異なるタイプの演算子がソースコードによって実装された異なる機能(例えば、ソースコード中のregexによって実装された異なる機能)に対応する、関係的に接続された演算子の配列を形成することが可能である。ソースコードを解析することで、ソースコードの一般的表現を作成することが可能である。ある例では、この一般的な表現は、シンタクスツリーとして知られているツリーグラフの形態で、ソースコード中のregexの符号化された表現を含む。本明細書に説明する例は、他の例でのシンタクスツリー(「抽象シンタクスツリー」としても知られている)としての配列に言及しているが、しかしながら、具象シンタクスツリーまたは他の配列を用いてもよい。
上述したように、コンパイラ20は複数のソースコード言語をサポートし得るため、解析することで、ソースコードは、言語に関係なく、言語に固有ではない表現、例えばシンタクスツリーに変換される。したがって、コンパイラ20によるさらなる処理(ブロック114、116、118、120)は、ソースコードの言語とは無関係に、共通の入力構造から作動し得る。
上記のように、シンタクスツリーは、関係的に接続された複数の演算子を含む。シンタクスツリーは、複数の異なるタイプの演算子を含み得る。例えば、異なる演算子は、ソースコード中のregexによって実装される異なる機能に対応し得る。
ブロック114で、シンタクスツリーはオートマトンに変換される。オートマトンは、FSMのソフトウエアモデルを含み、したがって、決定性または非決定性であると分類することができる。決定性オートマトンは、所与の時点において単一の実行経路を有し、非決定性オートマトンは、複数の同時実行経路を有する。オートマトンは、複数の状態を含む。シンタクスツリーをオートマトンに変換するために、シンタクスツリー中の演算子と、演算子間の関係とを、状態と状態間の遷移とに変換する。ある例では、オートマトンは、FSM格子30のハードウエアに部分的に基づいて変換することが可能である。
ある例では、オートマトンに対する入力記号は、アルファベット記号、数値0〜9、および他の印刷可能文字を含む。ある例では、入力記号は、バイト値0〜255(255を含む)によって表される。ある例では、オートマトンは、グラフのノードが状態の集合に対応する有向グラフとして表すことができる。ある例では、入力記号αに関する状態pから状態qへの遷移、すなわち、δ(p、α)は、ノードpからノードqへの有向接続によって示される。ある例では、オートマトンの逆転は、ある記号αに関する各々の遷移p→qが、その記号に関する逆転されたq→pになる新しいオートマトンを生成する。逆にすると、開始状態は最終状態になり、最終状態は開始状態になる。ある例では、オートマトンによって認識された(例えば、適合した)言語は、オートマトンに連続的に入力されたときに最終状態に到達する全ての可能な文字ストリングの集合である。オートマトンによって認識された言語の各々のストリングは、開始状態から1つ以上の最終状態に至る経路をたどる。
ブロック116で、オートマトンが構築された後に、オートマトンは、とりわけ、その複雑さおよびサイズを減少させるように最適化される。オートマトンは、冗長状態を組み合わせることによって最適化することが可能である。
ブロック118で、最適化されたオートマトンはネットリストに変換される。オートマトンをネットリストに変換することで、オートマトンの各々の状態が、FSM格子30上のハードウエア素子(例えば、SME34、36、他の素子)にマッピングされ、ハードウエア素子間の接続を決定する。
ブロック120で、ネットリストは、ネットリストの各々のノードに対応する目標デバイス(例えば、SME34、36、特殊目的素子58)の特定のハードウエア素子を選択するように位置付けされる。ある例では、位置付けは、FSM格子30用の一般的な入力および出力の制約に基づいて各々の特定のハードウエア素子を選択する。
ブロック122で、位置付けされたネットリストは、選択されたハードウエア素子を一緒に連結して、ネットリストによって記述される接続を達成するために、構成可能切り替え素子(例えば、ブロック間切り替え素子40、ブロック内切り替え素子42、および行内切り替え素子44)の設定を決定するようにルーティングされる。ある例では、構成可能切り替え素子に対する設定は、選択されたハードウエア素子を接続するために用いられるFSM格子30の特定の導線と、構成可能切り替え素子に対する設定とを決定することによって決定される。ルーティングは、ブロック120のその位置付けでのハードウエア素子間の接続のより具体的な制約を考慮することが可能である。したがって、ルーティングは、FSM格子30上の導線の実際の制約を考えて適切な接続を作成するためにグローバルな位置付けによって決定されたハードウエア素子の一部の位置を調整し得る。
一旦ネットリストが位置付けされてルーティングされると、この位置付けされ、ルーティングされたネットリストは、FSM格子30を構成するための複数のビットに変換される。複数ビットは、イメージ(例えば、二値イメージ)と呼ばれる。
ブロック124で、イメージはコンパイラ20によって公開される。イメージは、FSM格子30の特定のハードウエア素子を構成するための複数のビットを含む。これらのビットは、プログラムされたFSM格子30が、ソースコードによって記述された機能性を有するFSMを実装するように、SME34、36、特殊目的素子58、および構成可能切り替え素子の状態を構成するために、FSM格子30上にロードされ得る。位置付け(ブロック120)およびルーティング(ブロック122)は、FSM格子30中の特定の位置にある特定のハードウエア素子をオートマトン中の特定の状態にマッピングすることが可能である。したがって、イメージ中のビットは、所望の機能(複数可)を実装するために、特定のハードウエア素子を構成し得る。ある例では、イメージは、機械コードをコンピュータ可読媒体に保存することによって公開され得る。別の例では、イメージは、イメージを表示デバイス上に表示することによって公開され得る。さらに別の例では、イメージは、イメージをFSM格子30中にロードするための構成用デバイス等の別のデバイスにイメージを送出することによって公開され得る。さらに別の例では、イメージは、イメージをFSM格子(例えば、FSM格子30)上にロードすることによって公開され得る。
ある例では、イメージは、イメージのビット値をSME34、36および他のハードウエア素子に直接的にロードするか、またはイメージを1つ以上のレジスタにロードし、次に、ビット値をレジスタからSME34、36および他のハードウエア素子に書き込むことによって、FSM格子30上にロードすることが可能である。ある例では、FSM格子30のハードウエア素子(例えば、SME34、36、特殊目的素子58、構成可能切り替え素子40、42、44)は、構成用デバイスおよび/またはコンピュータが、イメージを1つ以上のメモリアドレスに書き込むことによって、イメージをFSM格子30上にロードすることができるように、マッピングされたメモリである。
本明細書に説明する方法の例は、少なくとも部分的に機械またはコンピュータに実装することが可能である。一部の例は、上記の例に説明したように方法を実施するために電子デバイスを構成するように動作可能な命令で符号化されたコンピュータ可読媒体または機械可読媒体を含み得る。このような方法の実装例は、マイクロコード、アセンブリ言語コード、高水準言語コード等のコードを含み得る。このようなコードは、様々な方法を実施するためのコンピュータ可読命令を含み得る。コードは、コンピュータプログラムプロダクトの部分を形成し得る。さらに、コードは、実行中または他の時間に、1つ以上の揮発性または不揮発性のコンピュータ可読媒体上に有形に記憶され得る。このようなコンピュータ可読媒体は、これには限定されないが、ハードディスク、取り外し可能磁気ディスク、取り外し可能光ディスク(例えば、コンパクトディスクおよびデジタルビデオディスク)、磁気カセット、メモリカードもしくはスティック、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)等を含み得る。
ここで図9を参照すると、状態機械エンジン14(例えば、単一チップ上の単一デバイス)の実施形態が示されている。以前に説明したように、状態機械エンジン14は、データバスを介してメモリ16等のソースからデータを受信するように構成される。図示される実施形態では、データは、ダブルデータレート3(DDR3)バスインターフェース130等のバスインターフェースを介して状態機械エンジン14に送出され得る。DDR3バスインターフェース130は、1ギガバイト/秒以上の速度でデータを交換すること(例えば、提供することおよび受信すること)が可能であり得る。このようなデータ交換速度は、データが状態機械エンジン14によって分析される速度を上回り得る。理解されるように、分析されるデータのソースに応じて、バスインターフェース130は、NANDフラッシュインターフェース、周辺構成要素相互接続(PCI)インターフェース、ギガビット媒体独立インターフェース(GMMI)等の、状態機械エンジン14に対する、データソースへのおよびからのデータを交換するための任意の好適なバスインターフェースであり得る。以前に説明したように、状態機械エンジン14は、データを分析するように構成される1つ以上のFSM格子30を含む。各々のFSM格子30は、2つの半格子に分割され得る。図示される実施形態では、各々の半格子は、24KのSME(例えば、SME34、36)を含み得るため、格子30には48KのSMEが含まれる。格子30は、図2〜5に関連して以前に説明したように配列される、任意の望ましい数のSMEを備え得る。さらに、たった1つのFSM格子30を図示しているが、状態機械エンジン14は、以前に説明したように複数のFSM格子30を含んでもよい。
分析されるデータは、バスインターフェース130で受信され、いくつかのバッファおよびバッファインターフェースを介してFSM格子30に提供され得る。図示される実施形態では、データ経路は、データバッファ132、命令バッファ133、処理バッファ134、ならびにランク内(IR)バスおよび処理バッファインターフェース136を含む。データバッファ132は、分析されるデータを受信し、一時的に記憶するように構成される。一実施形態では、2つのデータバッファ132(データバッファAおよびデータバッファB)が存在する。データは、FSM格子30による分析のため、2つのデータバッファ132のうちの一方から排出されている間、他方のデータバッファ132に記憶され得る。バスインターフェース130は、分析されるデータを、データバッファ132が一杯になるまでデータバッファ132に提供するように構成され得る。データバッファ132が一杯になった後、バスインターフェース130は、他の目的のために自由に用いられるように(例えば、データバッファ132が分析されるさらなるデータを受信するように利用可能となるまで、データストリームからの他のデータを提供するように)構成され得る。図示される実施形態では、データバッファ132は、各々が32Kバイトであり得る。命令バッファ133は、分析されるデータに対応する命令および状態機械エンジン14を構成することに対応する命令等の命令を、バスインターフェース130を介してプロセッサ12から受信するように構成される。IRバスおよび処理バッファインターフェース136は、データを処理バッファ134に提供することを容易にし得る。IRバスおよび処理バッファインターフェース136は、データが順番にFSM格子30によって処理されることを保証するために用いることができる。IRバスおよび処理バッファインターフェース136は、データ、タイミングデータ、パッキング命令等の交換を、そのデータが受信されて正確に分析されるように調整し得る。一般に、IRバスおよび処理バッファインターフェース136は、FSM格子30の論理ランクを通じて、並行して複数のデータ集合を分析することを可能にする。例えば、複数の物理的デバイス(例えば、状態機械エンジン14、チップ、個別のデバイス)は、ランクで配列され得、データをIRバスおよび処理バッファインターフェース136を介して互いに提供し得る。本出願の目的で、「ランク」という用語は、同じチップ選択物に接続された状態機械エンジン14の集合を指す。図示される実施形態において、IRバスおよび処理バッファインターフェース136は、32ビットのデータバスを含み得る。他の実施形態において、IRバスおよび処理バッファインターフェース136は、128ビットのデータバス等、任意の好適なデータバスを含み得る。
図示される実施形態において、状態機械エンジン14はまた、状態機械エンジン14を通じて状態ベクトルデータを提供することを補助するために、デコンプレッサ138およびコンプレッサ140を含む。コンプレッサ140およびデコンプレッサ138は、状態ベクトルデータを圧縮してデータ提供時間を最小化することができるように、一緒に作動する。状態ベクトルデータを圧縮することにより、バス利用時間が最小化され得る。コンプレッサ140およびデコンプレッサ138はまた、多様なバースト長の状態ベクトルデータを取り扱うように構成され得る。圧縮された状態ベクトルデータにパディングを行うこと、および各圧縮された領域がいつ終了するかに関する指示子を含むことによって、コンプレッサ140は、状態機械エンジン14を通じた全体的な処理速度を改善することができる。コンプレッサ140を使用して、FSM格子30による分析後の適合結果データを圧縮することができる。一実施形態において、コンプレッサ140およびデコンプレッサ138は、コンプレッサ140およびデコンプレッサ138へ、ならびに/またはそこから流れるデータが修正されないように、無効にする(例えば、停止する)ことができる。
前述のように、FSM格子30の出力は、状態ベクトルを含み得る。状態ベクトルは、FSM格子30のSME34、36の状態(例えば、起動されているか起動されていないか)、ならびにカウンタ58の動的(例えば、現在の)カウントを含む。状態機械エンジン14は、状態ベクトルキャッシュメモリ142、状態ベクトルメモリバッファ144、状態ベクトル中間入力バッファ146、および状態ベクトル中間出力バッファ148を有する状態ベクトルシステム141を含む。状態ベクトルシステム141は、FSM格子30の複数の状態ベクトルを記憶し、FSM格子30に状態ベクトルを提供して、FSM格子30を提供された状態ベクトルに対応する状態に復元させるために用いられ得る。各々の状態ベクトルは、状態ベクトルキャッシュメモリ142に一時的に記憶され得る。例えば、各々のSME34、36の各々の状態が記憶され得、それにより、新しいデータ集合(例えば、検索用語)のさらなる分析のためにSME34、36を解放すると同時に、状態が復元され、後でさらなる分析で用いられ得るようになる。一般的なキャッシュのように、状態ベクトルキャッシュメモリ142は、例えば、ここではFSM格子30による迅速な取り出しおよび使用のための状態ベクトルの記憶を可能にする。図示される実施形態では、状態ベクトルキャッシュメモリ142は、最大で512個の状態ベクトルを記憶し得る。
理解されるように、状態ベクトルデータは、あるランクの異なる状態機械エンジン14(例えば、チップ)間で交換され得る。状態ベクトルデータは、状態機械エンジン14のFSM格子30のSME34、36の状態を同期化すること、複数の状態機械エンジン14全体にわたって同じ機能を実施すること、複数の状態機械エンジン14全体にわたって同じ結果を再現すること、複数の状態機械エンジン14全体にわたって結果をカスケードすること、複数の状態機械エンジン14を介してカスケードされたデータを分析するために用いられるSME34、36の状態の履歴を記憶することといった、様々な目的のために、異なる状態機械エンジン14の間で交換され得る。さらにそのうえ、状態機械エンジン14内で、状態ベクトルデータは、FSM格子30のSME34、36を迅速に構成するために用いられ得ることに留意されたい。例えば、状態ベクトルデータは、SME34、36の状態を(例えば、新しい検索用語を検索するために)初期状態に復元させること、SME34、36の状態を(例えば、以前に検索された検索用語を検索するために)以前の状態に復元させること、およびSME34、36の状態を(例えば、カスケード検索で検索用語を検索するために)カスケード構成用に構成されるように変更すること、を行うために用いられ得る。ある特定の実施形態では、状態ベクトルデータは、(例えば、状態ベクトルデータの分析、修正を適用するための状態ベクトルデータの再構成、SME34、36の効率を改善するための状態ベクトルデータの再構成等のために)状態ベクトルデータがプロセッサ12に提供され得るように、バスインターフェース130に提供されてもよい。
例えば、ある実施形態では、状態機械エンジン14は、キャッシュされた状態ベクトルデータ(例えば、状態ベクトルシステム141によって記憶されたデータ)をFSM格子30から外部デバイスに提供し得る。外部デバイスは、状態ベクトルデータを受信し、状態ベクトルデータを修正し、FSM格子30を構成するために、修正された状態ベクトルデータを状態機械エンジン14に提供し得る。したがって、外部デバイスは、状態機械エンジン14が、所望される通りに状態をスキップする(例えば、跳び回る)ように、状態ベクトルデータを修正し得る。
状態ベクトルキャッシュメモリ142は、任意の好適なデバイスから状態ベクトルデータを受信し得る。例えば、状態ベクトルキャッシュメモリ142は、状態ベクトルを、FSM格子30、別のFSM格子30(例えば、IRバスおよび処理バッファインターフェース136を介して)、デコンプレッサ138等から受信し得る。図示される実施形態では、状態ベクトルキャッシュメモリ142は、状態ベクトルメモリバッファ144を介して他のデバイスから状態ベクトルを、受信し得る。さらにそのうえ、状態ベクトルキャッシュメモリ142は、任意の好適なデバイスに状態ベクトルデータを提供し得る。例えば、状態ベクトルキャッシュメモリ142は、状態ベクトルデータを、状態ベクトルメモリバッファ144、状態ベクトル中間入力バッファ146、および状態ベクトル中間出力バッファ148に提供し得る。
状態ベクトルメモリバッファ144、状態ベクトル中間入力バッファ146、および状態ベクトル中間出力バッファ148等の追加のバッファを、状態ベクトルキャッシュメモリ142と一緒に用いて、インターリーブされたパケットを有する別個のデータ集合を状態機械エンジン14によって処理しながら、状態ベクトルの取り出しおよび記憶に対応することができる。図示される実施形態では、状態ベクトルメモリバッファ144、状態ベクトル中間入力バッファ146、および状態ベクトル中間出力バッファ148の各々は、1つの状態ベクトルを一時的に記憶するように構成され得る。状態ベクトルメモリバッファ144は、任意の好適なデバイスから状態ベクトルデータを受信し、任意の好適なデバイスに状態ベクトルデータを提供するために用いられ得る。例えば、状態ベクトルメモリバッファ144は、FSM格子30、別のFSM格子30(例えば、IRバスおよび処理バッファインターフェース136を介して)、デコンプレッサ138、および状態ベクトルキャッシュメモリ142から状態ベクトルを受信するために用いられ得る。別の例として、状態ベクトルメモリバッファ144は、(例えば、他のFSM格子30用の)IRバスおよび処理バッファインターフェース136、コンプレッサ140、および状態ベクトルキャッシュメモリ142に、状態ベクトルデータを提供するために用いられ得る。
同様に、状態ベクトル中間入力バッファ146は、任意の好適なデバイスから状態ベクトルデータを受信し、任意の好適なデバイスに状態ベクトルデータを提供するために用いられ得る。例えば、状態ベクトル中間入力バッファ146は、FSM格子30(例えば、IRバスおよび処理バッファインターフェース136を介して)、デコンプレッサ138、および状態ベクトルキャッシュメモリ142から状態ベクトルを受信するために用いられ得る。別の例として、状態ベクトル中間入力バッファ146は、状態ベクトルをFSM格子30に提供するために用いられ得る。さらにそのうえ、状態ベクトル中間出力バッファ148は、任意の好適なデバイスから状態ベクトルを受信し、任意の好適なデバイスに状態ベクトルを提供するために用いられ得る。例えば、状態ベクトル中間出力バッファ148は、FSM格子30および状態ベクトルキャッシュメモリ142から状態ベクトルを受信するために用いられ得る。別の例として、状態ベクトル中間出力バッファ148は、FSM格子30(例えば、IRバスおよび処理バッファインターフェース136を介して)、およびコンプレッサ140に状態ベクトルを提供するために用いられ得る。
一旦関心の結果がFSM格子30によって提供されると、結果(例えば、適合結果)は、結果メモリ150として、記憶素子に記憶されてもよい。例えば、適合(例えば、目的とするパターンの検出)を示す「適合ベクトル」は、結果メモリ150に記憶され得る。適合結果は、次に、例えば、バスインターフェース130を介してプロセッサ12に提供されるように、適合バッファ152に提供され得る。以前に説明したように、適合結果は圧縮され得る。
追加のレジスタおよびバッファが、同様に、状態機械エンジン14に提供されてもよい。例えば、状態機械エンジン14は、制御およびステータスレジスタ154を含み得る。加えて、復元バッファシステム(例えば、復元およびプログラムバッファ156)が、最初にFSM格子30のSME34、36を構成するか、または分析中にFSM格子30におけるSME34、36の状態を復元するために提供されてもよい。例えば、状態ベクトルデータは、復元バッファ156から状態ベクトルシステム141の状態ベクトル中間入力バッファ146に(例えば、デコンプレッサ138を介して)提供され得る。デコンプレッサ138は、状態ベクトルメモリバッファ144および/または状態ベクトル中間入力バッファ146に提供される状態ベクトルデータを解凍するために使用され得る。状態ベクトルシステム141は、FSM格子30のSME34、36を構成するために、FSM格子30に状態ベクトルデータを提供し得る。同様に、保存バッファシステム(例えば、保存および修復マップバッファ158)もまた、設定および使用のための保存および修復マップの記憶用に提供され得る。例えば、状態ベクトルデータは、状態ベクトルシステム141の状態ベクトル中間出力バッファ148から保存バッファ158に(例えば、コンプレッサ140を介して)提供され得る。コンプレッサ140は、状態ベクトルメモリバッファ144および/または状態ベクトル中間出力バッファ148から保存バッファ158に提供される状態ベクトルデータを圧縮するために使用され得る。
図10は、図4に関して上述したものに類似する行38の第2の例を図示する。行38は、プログラム可能な行内切り替え素子44、ならびに行相互接続導線162、164、166、168、170、172、174、176、178、180、182、184、186、188、190、および192を含み得る(これらはまた、以下で説明されるように「行ルーティングライン162〜192」と呼ぶことができ、図4の相互接続導体68および70に加えられ得るか、またはそれらの代わりに使用され得る)。
10図の行38は、8個のGOT60、特殊目的素子58、入力62、入力64、出力66、適合素子160、および特殊目的素子ルーティングライン194を含むことができる。図10に示されるGOT60および特殊目的素子58は、図4に関して先に論じられたGOT60および特殊目的素子58と実質的に類似するものであり得る。したがって、各GOT60は、分析が、各GOTのそれぞれのSME34、36(例えば、分析されたデータストリームにおける適合)によって実施されることを可能にするように、その中にSME34、36の起動のための入力62および64を有し、これは、他のGOT60からの結果と共に利用され得る。
GOT60により提供される結果は、出力66上のGOT60から選択的に提供され得る。一実施形態では、GOT60の可能な出力は、出力を何ら含まないか、GOT60のSME34からの出力、GOT60のSME36からの出力、または第1のSME34の出力および第2のSME36の出力の論理的組み合わせ(例えば、OR)を含み得る。したがって、GOT60は、GOT60からの選択された結果を提供するように構成され得る。この構成は、例えば、FSM格子30の初期構成時に実施される最初のプログラミングに基づいて、達成され得る。GOT60からの結果は、所与のデータストリーム分析またはデータストリーム分析の一部について行38からの選択された結果を提供するように動作し得る適合素子160に提供され得る。
加えて、行38、行ルーティングライン162〜192を含み得る。本実施形態では、8個のGOT60および特殊目的素子58に選択的に連結することが可能な16個の行ライン162〜192が存在する。しかし、より少ないまたはより多い行ルーティングラインが、行38と共に利用され得ることが理解されるべきである。
行ルーティングライン162〜176の各々を利用して、起動信号を行38内のGOT60のSME34、36のいずれかに提供し得る一方で、行ルーティングライン178、182、186、および190の各々を利用して、起動信号をGOT60のSME34のいずれかに提供し得、行ルーティングライン180、184、188、および192の各々を利用して、起動信号をGOT60のSME36のいずれかに提供し得る。したがって、これらの行ルーティングライン162〜192の使用を通して、任意の特定のSME(例えば、SME34)のための任意の特定の検出セル86が起動されてもよい。これは、(例えば、ロードされたイメージに従って)それぞれの行ルーティングライン(複数可)162〜192を、特定のSME34、36の統一された起動入力62、64に選択的に連結することによって達成され得る。例えば、GOT60は、出力66をそれらに連結された行ルーティングライン(例えば、行ルーティングライン162)に送信し得る。次いで、それは、SME34、36、特殊目的素子58、および(行ルーティングライン166、174、176については、)同じ行38上の適合素子160の全てに利用可能である。この出力66信号はまた、ブロック内切り替え42内に送信され得る。次いで、この信号は、例えば、最大3本のブロックルーティングライン上に出力することができる。そこから、それは、追加のブロック内切り替え42を介して、同じブロック32内の異なる行38にルーティングされ得る。それはまた、ブロック間切り替え40を介して、異なるブロック32にルーティングされ得る。
図10に示されるように、行ルーティングライン162〜192の各々は、図3の複数の行内切り替え素子44を含み、これを利用して、任意のGOT60を任意の他のGOT60に、または任意のGOT60を行38内(または、さらに言うと、別の行および/または別のブロック内)の任意の他の素子(例えば、特殊目的素子58)に選択的に連結し得る。しかしながら、これらの接続は、利用可能な切り替え素子196によって制限され得る。例えば、行ルーティングライン162、164、166、168、170、172、174、および176の各々は、行38のSME34、36のいずれかを起動するために利用することができる。しかし、行ルーティングライン162、164、166、168、170、172、174、および176の各々はまた、GOT60のそれぞれ異なるものの出力に選択的に連結可能である。例えば、GOT60のうちのいずれかからの出力は、それらに連結可能な行ルーティングライン162、164、166、168、170、172、174、および176のうちのそれぞれ1つにあるGOT60から供給され得るに過ぎない。したがって、一実施形態では、行ルーティングライン162、164、166、168、170、172、174、および176が、GOT60の出力66に連結可能であるため、行ルーティングライン162、164、166、168、170、172、174、および176は、ブロック内切り替え42に信号を提供(例えば、ドライブアウト)し得る。対照的に、一実施形態では、行ルーティングライン178、180、182、184、186、188、190、および192は、例えば、他の行38またはブロック32から受信され得るブロック内切り替え42からの信号を受信し(例えば、それによって駆動され)得る。
行ルーティングライン162〜192に加えて、行38は、特殊目的素子58に連結された特殊目的素子ルーティングライン194を含み得る。行ルーティングライン162、164、166、168、170、172、174、および176と同様に、特殊目的ルーティングライン194は、信号をブロック内切り替え42に提供(例えば、ドライブアウト)し得、一実施形態では、特殊目的素子ルーティングライン194はまた、適合素子160に連結可能であり得る。例えば、特殊目的素子58がカウンタを含む場合、カウンタの出力が、特殊目的ルーティングライン194に提供され得る。同様に、特殊目的素子58が、ブールセルなどのブール論理素子を含む場合、ブール論理素子の出力が、特殊目的ルーティングライン194に提供され得る。これらは特殊目的素子の使用を通じて、繰り返し検索(例えば、素子を10回見つける)またはカスケード検索(例えば、素子x、y、およびzを見つける)は、ブロック内切り替え42および適合素子160のいずれかまたはそれらの両方に対して、特殊目的ルーティングライン194によって提供することができる単一出力に単純化され得る。
適合素子160のより詳細な説明が、図11で与えられる。図示されるように、適合素子160は、4つのデータ入力198、200、202、および204、2つの出力、ならびに6つの制御入力210、212、214、216、218、および220を含み得る。さらに、適合素子は、2つの2対1マルチプレクサ222、224を含み得る。2対1マルチプレクサ222、224が図示されているが、例えば、ルーティング/出力構成における柔軟性を可能にするために、またはシリコン空間が許容する場合、3対1マルチプレクサ、4対1マルチプレクサ、または他の素子などの他の構成が、所望に応じて、2対1マルチプレクサ224、224の代わりに利用され得ることに留意されたい。
一実施形態において、適合素子160のデータ入力198は、行ルーティングライン176に連結され、データ入力200は、行ルーティングライン174に連結され、データ入力202は、特殊目的ルーティングライン194に連結され、かつデータ入力204は、行ルーティングライン168に連結される。これらの特定のラインの選択は単なる例示であり、行38から信号を受信する際の柔軟性を実証するために選択されている。適合素子160に接続する行ルーティングライン168および行ルーティングライン176を選ぶことによって、GOT60の間のパリティが、確立され得る。例えば、全てのGOT60の第1の半分(0〜3のGOT60)内の1つのGOT60によってデータストリームの少なくとも一部分において実施される第1の分析の結果は、ルーティングライン168上で適合素子160に提供され得るが、一方、全てのGOT60の第2の半分(4〜7のGOT60)内の別のGOT60によってデータストリームの少なくとも一部分によって実施される第2の分析の結果は、ルーティングライン176によって適合素子160に提供され得る。入力200、204を分割して、この方法は、減少した経路が、結果を適合素子160に提供することを可能にし得る。加えて、適合素子160で特殊目的ルーティングライン194に沿った特殊目的素子58から結果を受信することによって、カスケード検索の結果は、一度適合素子160に提供され得る。最終的に、行ルーティングライン174の選択は、行38の全体的なシステムに柔軟性を加える。しかしながら、述べたように、これらの選択は単なる例示である。
図示されるように、適合素子160のデータ入力198、200は、2対1マルチプレクサ222と連結され得る一方、適合素子160のデータ入力202、204は、2対1マルチプレクサ224と連結され得る。2対1マルチプレクサ222、224はまた、各々、例えば、FSM格子30の初期設定中に実施される、ロードされるイメージに基づいて構成され得る制御入力210、212、214、216、218、および220から制御信号を受信し得る。一実施形態において、2対1マルチプレクサ222は、選択信号S0を制御入力210から、選択信号S1を制御入力212から、出力イネーブル信号を制御入力214から受信し得る。同様に、2対1マルチプレクサ224は、選択信号S0を制御入力216から、選択信号S1を制御入力218から、出力イネーブル信号を制御入力220から受信し得る。選択信号S0、S1を利用して、例えば、出力ブロック54にデータ検索の分析結果を提供するために、どのデータ入力が出力206および208にそれぞれ連結されるべきかを選択し得る。さらに、選択信号S0、S1を提供する複数の選択ラインの使用は、2対1マルチプレクサ222、224の各々が、変換装置なしで構築されることを可能にし得る。したがって、2対1マルチプレクサ222、224を実装する必要のある領域を減少させる。しかしながら、一実施形態において、単一の選択信号(例えば、S0)を伝達する単一の選択ラインが利用され得る。加えて、一実施形態において、出力イネーブル信号が削除され得る。
加えて、制御入力214および220からの出力イネーブル信号は、クロッキング信号、または出力206および208における信号がデータ入力198、200、202、および204における信号が安定しているはずのときにのみ提供されることを可能にする他のイネーブル信号であり得る。加えて、制御入力214および220からの出力イネーブル信号は、クロッキング信号、または出力206および208がデータ入力198、200、202、および204における信号が安定しているときにのみ提供されることを可能にする他のイネーブル信号であり得る。他の実施例において、出力イネーブル信号は、除去され得る。
図12は、制御入力210および216からの選択信号S0ならびに制御入力212および218からの選択信号S1が、どのように2対1マルチプレクサ222および224の出力206および208をプログラム可能に選択し得るかの例を記載する真理値表226を示す。図12に示されるように、適合素子160の出力206および208に対応する真理値表226が図示されている。真理値表226に表される出力206および208が、制御入力214および220からの出力イネーブル信号が、2対1マルチプレクサ222および224を起動したことを前提とすることに留意されたい。真理値表226に示されるように、制御入力210および216からの選択信号S0ならびに制御入力212および218からの選択信号S1の両方が、非アクティブ(即ち、「0」)であるとき、2対1マルチプレクサ222および224の出力206および208によって提供される信号は、非アクティブになる。例えば、行38からの結果は、適合素子160から提供される。制御入力210および216からの選択信号S0はアクティブ(例えば、「1」)であり、制御入力212および218からの選択信号S1は非アクティブであるとき、2対1マルチプレクサ222および224の出力206および208によって提供されるこの信号は、行ルーティングライン174および168によって提供される結果になる。反対に、制御入力210および216からの選択信号S0が非アクティブであり、制御入力212および218からの選択信号S1がアクティブであるとき、2対1マルチプレクサ222および224の出力206および208によって提供されるこの信号は、行ルーティングライン176および特殊目的ルーティングライン194によって提供される結果になる。最後に、それによって制御入力210および216からの選択信号S0ならびに制御入力212および218からの選択信号S1の両方がアクティブであるという条件は、禁止される。したがって、このような状態は、適合素子160の構成中、回避される。このようにして、適合素子160は、出力206、208において、信号を提供しないか、第1のデータ入力200、204から受信される信号(行ルーティングライン174、168によって提供される結果)を提供するか、または第2のデータ入力198、202から受信される信号(行ルーティングライン176、特殊目的ルーティングライン194によって提供される結果)を提供するように、選択的に構成され得る。さらに、適合素子160は、図12に示される特定の実施形態に限定されない他の構成において動作し得ることに留意されたい。
上記のように、適合素子160の出力206または208のいずれかによって提供される信号は、いかなる結果によっても、FSM格子30初期構成に基づき得る。これらの結果は、記憶素子、例えば、結果メモリ150に提供され得る。このような結果メモリの一実施形態が図13に示される。
結果メモリ150は、4つのうち2つが各々、FSM格子30の半格子のうちのそれぞれ1つに対応する、4つのメモリ素子228、229、230、および231に分割され得る。例えば、メモリ素子228および230は、半格子0に対応し得る一方で、メモリ素子229および231は、半格子1に対応し得る。この設定は、同時読み取りおよび書き込み動作が、それぞれの半格子30に対応するメモリのために実行されることを可能にし得る。例えば、メモリ素子228は、それらに書き込まれたデータを有し得る一方で、メモリ素子230は、それらから読み込まれたデータを同時に有する。一実施形態において、メモリ素子228、229、230、および232の各々は、DRAMメモリ素子または任意の他の好適な記憶装置であり得る。一実施形態において、メモリ素子228および229は、例えば、シングルメモリチップ(素子)の部分であり、メモリ素子230および231は、別個のメモリチップ(素子)の部分である。いくつかの実施形態において、メモリ素子228、229、230、および232は、結果バス232によって提供されるFSM格子30から受信された結果をバッファするために、初期バッファとして動作し得る。結果メモリ150は、前記結果が提供された格子FSM格子30内の位置の指示などの、結果の特徴に基づいて結果メモリ150の特定の部分の中に受信された結果を記憶するように構成され得る。例えば、メモリ素子228および230内の記憶位置は、FSM格子30の半格子0から結果バス232によって提供される適合を記憶し得る。同様に、メモリ素子230および232内の記憶位置は、FSM格子30の半格子1からの結果バス232によって提供される適合を記憶し得る。この記憶は、例えば、プログラミングインターフェース56からの結果メモリ150に提供される信号と共に達成され得る。
一実施形態において、結果メモリ150に提供される結果は、最終結果がFSM格子30によって見出されたことを示し得る。例えば、この結果は、全パターンが検出されたことを示し得る。代替的に、結果メモリ150に提供される結果は、例えば、FSM格子30の特定の状態に到達したことを示し得る。例えば、結果メモリ150に提供される結果は、次の状態が始められ得るように、1つの状態(即ち、パターン検索の1つの部分)に到達したことを示し得る。この方法において、結果メモリ150は、様々なタイプの結果を記憶し得る。
いくつかの実施形態において、IRバスおよび処理バッファインターフェース136は、分析のために複数のFSM格子30にデータを提供し得る。このデータは、時間多重化され得る。例えば、8つのFSM格子30がある場合、8つのFSM格子30の各々についてのデータは、8つのIRバスの全てと、8つのFSM格子30に対応する処理バッファインターフェース136とに提供され得る。8つのIRバスおよび処理バッファインターフェース136の各々は、分析されるべき全データ集合を受信し得る。8つのIRバスおよび処理バッファインターフェース136の各々は、次いで、それぞれのIRバスおよび処理バッファインターフェース136と関連付けられたFSM格子30に適切な全データ集合の部分を選択し得る。8つのFSM格子30の各々についてのこの適切なデータは、次いで、それぞれのIRバスおよび処理バッファインターフェース136からそれらの内に関連付けられるそれぞれのFSM格子30に提供され得る。このようにして、状態機械エンジン14の任意のFSM格子30によって受信されるデータは、時間多重化され得る。したがって、上記のように、このデータの分析によって提供される結果もまた、時間多重化され得る。
したがって、結果メモリ150は、各受信された結果と結果を生成したデータ入力を相関させるように動作し得る。これを達成するために、それぞれの結果指示子234は、結果バス232から受信された各結果236に対応して、いくつかの実施形態においては、それと共に記憶され得る。一実施形態において、結果指示子234は、単一ビットフラグであり得る。別の実施形態において、結果指示子234は、複数ビットフラグであり得る。結果指示子234が複数ビットフラグを含み得る場合、フラグのビット位置は、例えば、入力データストリームにおける結果の位置の数、結果が対応する格子、結果集合における位置、または他の特定情報を示し得る。これらの結果指示子234は、正しいグループ化、および出力バス238、例えば、コンプレッサ140への結果の提供を可能にし得る。さらに、それらのそれぞれの結果指示子234によって特定の結果236を特定する能力は、結果メモリ150から所望の結果236の選択的出力を可能にする。したがって、FSM格子30によって提供される特定の結果236のみが、それぞれ、出力バス238に選択的に提供され得る。結果が記憶素子の特定の部分の中に記憶されるべきであることを判定すると共に(例えば、その前、その後、またはそれと同時に)、結果メモリ150は、記憶位置がその部分(例えば、メモリ素子228)の中で利用可能であるかを判定し得る。記憶位置が、判定された部分の中で利用可能である場合、結果は、その部分の中に記憶され得る。
しかしながら、メモリ素子228、229、230、または232の1つが一杯になる状況が発生し得る(例えば、記憶位置が結果メモリ150のその部分の中で利用可能でない)。この状況において、結果メモリ150は、オーバーフロー処理を実装し得る。このオーバーフロー処理は、受信される結果236の記憶位置を切り替えることを含み得る。例えば、メモリ素子228は、典型的には、FSM格子30の半格子0からの結果236と関連付けられる(それを記憶する)一方で、例えば、メモリ素子228が一杯になる場合、メモリ素子228内の1つ以上の現在記憶されている結果236は、メモリ素子230内の位置に複写され、メモリ228内に記憶されるように新しい結果236のための場所を作り得る。代替的にまたは加えて、メモリ229のために元来意図された結果236は、その代わりに、メモリ素子229が一杯であるとき、メモリ素子231内に記憶され得る。どちらの状況においても、近接のメモリ内に記憶された任意の結果236に関連付けられた結果指示子234は、それぞれの結果236の正しい出力を可能にするであろう。したがって、このオーバーフロー処理が開始されるとき、結果メモリ150は、結果236の特定の集合を出力するために探すと、メモリ素子228および230(または229および231)の両方を検索するように構成され得る。これは、例えば、プログラミングインターフェース56によって提供される命令に基づいて達成され得る。
上述したオーバーフロー処理が、結果メモリ150のオーバーフローを克服するには不十分である追加的状況が発生し得る。例えば、メモリ素子228および230の両方が、一杯であり得る。この状況において、結果メモリ150は、FSM格子30によってデータの分析を停止するように動作し得る。例えば、結果メモリ150は、例えば、FSM格子30、IRバス、および処理バッファインターフェース136、および/またはDDR3バスインターフェース130に指示を提供し、FSM格子30内におけるデータの処理が停止すべきであることを示し得る。一旦十分なメモリが結果メモリ150内で利用可能になる(即ち、1つ以上の結果236が結果メモリ150から読み取られる)と、第2の指示は、結果メモリ150から、例えば、FSM格子30、IRバスおよび処理バッファインターフェース136、および/またはDDR3バスインターフェース130に提供され、FSM格子30内におけるデータの分析が再開し得ることを示し得る。このようにして、結果メモリ150は、状態機械エンジン14についての分析のオーバーライドを含み得る。
本発明は、様々な修正および代替の形態の影響を受け得るとはいえ、特定の実施形態を、例として図面に示し、本明細書に詳細に記載してきた。しかしながら、本発明は、開示される特定の形態に限定されることを意図するものではないことを理解されたい。むしろ、本発明は、以下に添付される特許請求の範囲によって定義される本発明の趣旨および範囲内に含まれる全ての修正、均等物、および代替物を包含するものである。

Claims (27)

  1. 状態機械エンジンであって、
    記憶素子を備え、前記記憶素子が、
    データの分析の結果を受信し、
    前記結果の特徴に基づいて前記記憶素子の特定の部分の中に前記結果を記憶し、かつ
    前記結果に対応する結果指示子を記憶するように構成される、状態機械エンジン。
  2. 前記特定の部分が、区別可能なメモリ素子を備える、請求項1に記載の状態機械エンジン。
  3. 前記区別可能なメモリ素子が、DRAMメモリを含む、請求項2に記載の状態機械エンジン。
  4. 前記結果の前記特徴が、前記結果が提供された格子内の位置の指示を含む、請求項1に記載の状態機械エンジン。
  5. 前記結果指示子が、前記結果を、前記結果を生成したデータ入力と相関させる、請求項1に記載の状態機械エンジン。
  6. 前記記憶素子が、前記特定の部分が一杯であるとき、指示を提供するように構成される、請求項1に記載の状態機械エンジン。
  7. 前記状態機械エンジンが、前記指示に応じて前記データの前記分析を停止するように構成される、請求項6に記載の状態機械エンジン。
  8. 方法であって、
    記憶素子においてデータの分析の結果を受信することと、
    前記結果の特徴に基づいて、前記記憶素子の複数の部分のうちのどの部分に、前記結果を記憶するかを判定することと、
    前記記憶素子の前記判定された部分の中の記憶位置に前記結果を記憶することと、を含む、方法
  9. 前記結果に対応する結果指示子を記憶することを含む、請求項8に記載の方法。
  10. 前記結果に対応する結果指示子を記憶することが、前記結果と共に前記結果指示子を記憶することを含む、請求項9に記載の方法。
  11. 前記結果指示子が、前記結果を、前記結果を生成したデータ入力と相関させる、請求項9方法。
  12. 前記結果が第1の結果を含み、前記記憶位置が第1の記憶位置を含み、
    前記記憶素子においてデータの分析の第2の結果を受信することと、
    前記第2の結果が、前記記憶素子の前記判定された部分の中に記憶されるべきかを判定することと、
    第2の記憶位置が、前記記憶素子の前記判定された部分の中で利用可能である場合、前記記憶素子の前記判定された部分の中に前記第2の結果を記憶することと、をさらに含む、請求項8に記載の方法。
  13. 前記判定された部分が、前記記憶素子の第1の部分を含み、前記第2の記憶位置が前記記憶素子の前記判定された部分の中で利用可能でない場合、前記第2の結果を前記記憶素子の第2の部分の中に記憶することをさらに含む、請求項12に記載の方法。
  14. 前記第2の結果が、前記記憶素子の前記第2の部分の中に記憶されるとき、前記記憶素子の前記第1および第2の部分の両方からの前記結果を提供するように前記記憶素子を構成することを含む、請求項13に記載の方法。
  15. 前記記憶素子の前記複数の部分が一杯であるとき、指示を提供することを含む、請求項8に記載の方法。
  16. 前記指示に応じて前記データの前記分析を停止することを含む、請求項15に記載の方法。
  17. 前記記憶素子の前記複数の部分がもはや一杯でないとき、別の指示を提供することと、前記別の指示に応じて前記データの前記分析を再開することと、を含む、請求項16に記載の方法。
  18. 状態機械エンジンであって、
    データ分析の結果を提供するように構成されたプログラム可能な素子のブロックと、
    記憶素子と、を備え、前記記憶素子が、
    前記結果を受信し、
    前記記憶素子の複数の部分のうちのどの部分に、前記結果を記憶するかを判定し、かつ
    前記結果を、前記記憶素子の前記判定された部分の中の記憶位置に、前記結果に対応する結果指示子と共に記憶するように構成される、状態機械エンジン。
  19. 前記記憶素子が、前記結果の特徴に基づいて、前記記憶素子の前記複数の部分のうちのどの部分に、前記結果を記憶するかを判定するように構成される、請求項18に記載の状態機械エンジン。
  20. 前記結果の前記特徴が、前記結果が提供された前記ブロックを含む格子内の位置の指示を含む、請求項19に記載の状態機械エンジン。
  21. 前記結果が、第1の結果を含み、前記プログラム可能な素子のブロックが、前記分析の第2の結果を提供するようにさらに構成される、請求項18に記載の状態機械エンジン。
  22. 前記記憶位置が、第1の記憶位置を含み、前記記憶素子が、
    前記第2の結果を受信し、
    前記第2の結果が、前記記憶素子の前記判定された部分の中に記憶されるべきかを判定し、かつ
    第2の記憶位置が、前記記憶素子の前記判定された部分の中で利用可能である場合、前記第2の結果を前記記憶素子の前記判定された部分の中に記憶するように構成される、請求項21に記載の状態機械エンジン。
  23. 前記判定された部分が前記記憶素子の第1の部分を含み、さらに、前記第2の記憶位置が前記記憶素子の前記判定された部分の中で利用可能でない場合、前記記憶素子が、前記第2の結果を前記記憶素子の第2の部分の中に記憶するように構成される、請求項22に記載の状態機械エンジン。
  24. 前記第2の結果が、前記記憶素子の前記第2の部分の中に記憶されるとき、前記記憶素子が、結果について前記記憶素子の前記第1および第2の部分を検索するように構成される、請求項23に記載の状態機械エンジン。
  25. 前記記憶素子の前記複数の部分が一杯であるとき、前記記憶素子が指示を提供するように構成される、請求項18に記載の状態機械エンジン。
  26. 前記状態機械エンジンが、前記指示に応じて前記データの分析を停止するように構成される、請求項25に記載の状態機械エンジン。
  27. 前記記憶素子の前記複数の部分がもはや一杯でないとき、前記記憶素子が、別の指示を提供するように構成され、前記状態機械エンジンが、前記別の指示に応じてデータの前記分析を再開するように構成される、請求項26に記載の状態機械エンジン。
JP2015529852A 2012-08-31 2013-08-16 状態機械エンジンのための結果生成 Active JP6106752B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/601,642 US9075428B2 (en) 2012-08-31 2012-08-31 Results generation for state machine engines
US13/601,642 2012-08-31
PCT/US2013/055436 WO2014035699A1 (en) 2012-08-31 2013-08-16 Results generation for state machine engines

Publications (3)

Publication Number Publication Date
JP2015531935A true JP2015531935A (ja) 2015-11-05
JP2015531935A5 JP2015531935A5 (ja) 2016-08-18
JP6106752B2 JP6106752B2 (ja) 2017-04-05

Family

ID=50184155

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015529852A Active JP6106752B2 (ja) 2012-08-31 2013-08-16 状態機械エンジンのための結果生成

Country Status (7)

Country Link
US (2) US9075428B2 (ja)
EP (1) EP2891053B1 (ja)
JP (1) JP6106752B2 (ja)
KR (1) KR101921373B1 (ja)
CN (1) CN104603742B (ja)
TW (1) TWI569206B (ja)
WO (1) WO2014035699A1 (ja)

Families Citing this family (24)

* 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
US9323994B2 (en) 2009-12-15 2016-04-26 Micron Technology, Inc. Multi-level hierarchical routing matrices for pattern-recognition processors
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
US9524248B2 (en) 2012-07-18 2016-12-20 Micron Technology, Inc. Memory management for a hierarchical memory system
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
KR20160046613A (ko) * 2014-10-21 2016-04-29 삼성전자주식회사 카운터 데이터 처리 방법 및 디바이스
US10430210B2 (en) 2014-12-30 2019-10-01 Micron Technology, Inc. Systems and devices for accessing a state machine
US10769099B2 (en) * 2014-12-30 2020-09-08 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
US10977309B2 (en) 2015-10-06 2021-04-13 Micron Technology, Inc. Methods and systems for creating networks
US10691964B2 (en) 2015-10-06 2020-06-23 Micron Technology, Inc. Methods and systems for event reporting
US10846103B2 (en) 2015-10-06 2020-11-24 Micron Technology, Inc. Methods and systems for representing processing resources
US10146555B2 (en) 2016-07-21 2018-12-04 Micron Technology, Inc. Adaptive routing to avoid non-repairable memory and logic defects on automata processor
US10268602B2 (en) 2016-09-29 2019-04-23 Micron Technology, Inc. System and method for individual addressing
US10019311B2 (en) 2016-09-29 2018-07-10 Micron Technology, Inc. Validation of a symbol response memory
US10592450B2 (en) 2016-10-20 2020-03-17 Micron Technology, Inc. Custom compute cores in integrated circuit devices
US20180113951A1 (en) * 2016-10-20 2018-04-26 Micron Technology, Inc. Graph traversal using automata processor
US10929764B2 (en) 2016-10-20 2021-02-23 Micron Technology, Inc. Boolean satisfiability
US10481881B2 (en) * 2017-06-22 2019-11-19 Archeo Futurus, Inc. Mapping a computer code to wires and gates
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
CN113710558A (zh) * 2019-04-23 2021-11-26 日立安斯泰莫株式会社 车辆控制装置以及计算机程序

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009026292A (ja) * 2007-06-21 2009-02-05 Hitachi Ltd データ分配方法、データ分配プログラム、及び並列データベースシステム
JP2012515378A (ja) * 2009-01-12 2012-07-05 マイクロン テクノロジー, インク. 並列パターン検索エンジンのパターンマッチング結果を通信するための装置、システム、および方法

Family Cites Families (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7487542B2 (en) 2004-01-14 2009-02-03 International Business Machines Corporation Intrusion detection using a network processor and a parallel pattern detection engine
US7716455B2 (en) 2004-12-03 2010-05-11 Stmicroelectronics, Inc. Processor with automatic scheduling of operations
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
US20080320053A1 (en) 2007-06-21 2008-12-25 Michio Iijima Data management method for accessing data storage area based on characteristic of stored data
US20110004578A1 (en) 2008-02-22 2011-01-06 Michinari Momma Active metric learning device, active metric learning method, and program
US7816943B2 (en) * 2008-06-16 2010-10-19 Microchip Technology Incorporated Programmable cycle state machine interface
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
US8938590B2 (en) 2008-10-18 2015-01-20 Micron Technology, Inc. Indirect register access method and system
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
US7970964B2 (en) 2008-11-05 2011-06-28 Micron Technology, Inc. Methods and systems to accomplish variable width data input
US20100118425A1 (en) 2008-11-11 2010-05-13 Menachem Rafaelof Disturbance rejection in a servo control loop using pressure-based disc mode sensor
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
US9164945B2 (en) 2008-12-01 2015-10-20 Micron Technology, Inc. Devices, systems, and methods to synchronize parallel processing of a single data stream
US10007486B2 (en) 2008-12-01 2018-06-26 Micron Technology, Inc. Systems and methods to enable identification of different data sets
US9348784B2 (en) 2008-12-01 2016-05-24 Micron Technology, Inc. Systems and methods for managing endian mode of a device
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
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
US8489534B2 (en) 2009-12-15 2013-07-16 Paul D. Dlugosch Adaptive content inspection
US9501705B2 (en) 2009-12-15 2016-11-22 Micron Technology, Inc. Methods and apparatuses for reducing power consumption in a pattern recognition processor
US8380575B2 (en) * 2009-12-15 2013-02-19 Trading Technologies International, Inc. System and methods for risk-based prioritized transaction message flow
US9323994B2 (en) 2009-12-15 2016-04-26 Micron Technology, Inc. Multi-level hierarchical routing matrices for pattern-recognition processors
US8601013B2 (en) 2010-06-10 2013-12-03 Micron Technology, Inc. Analyzing data using a hierarchical structure
US8766666B2 (en) 2010-06-10 2014-07-01 Micron Technology, Inc. Programmable device, hierarchical parallel machines, and methods for providing state information
JP5763784B2 (ja) 2011-01-25 2015-08-12 マイクロン テクノロジー, インク. 要素利用のための状態のグループ化
KR101606622B1 (ko) 2011-01-25 2016-03-25 마이크론 테크놀로지, 인크. Fsm을 구현하기 위한 특수 목적 요소의 이용
KR101607736B1 (ko) 2011-01-25 2016-03-30 마이크론 테크놀로지, 인크. 오토마톤의 진입 차수 및/또는 진출 차수를 제어하기 위한 양화 언롤링
KR101640295B1 (ko) 2011-01-25 2016-07-15 마이크론 테크놀로지, 인크. 정규 표현을 컴파일하기 위한 방법 및 장치
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
US9235798B2 (en) 2012-07-18 2016-01-12 Micron Technology, Inc. Methods and systems for handling data received by a state machine engine
US9304968B2 (en) 2012-07-18 2016-04-05 Micron Technology, Inc. Methods and devices for programming 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
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

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009026292A (ja) * 2007-06-21 2009-02-05 Hitachi Ltd データ分配方法、データ分配プログラム、及び並列データベースシステム
JP2012515378A (ja) * 2009-01-12 2012-07-05 マイクロン テクノロジー, インク. 並列パターン検索エンジンのパターンマッチング結果を通信するための装置、システム、および方法

Also Published As

Publication number Publication date
KR20150052110A (ko) 2015-05-13
WO2014035699A1 (en) 2014-03-06
US9454322B2 (en) 2016-09-27
EP2891053A4 (en) 2016-05-11
KR101921373B1 (ko) 2018-11-22
JP6106752B2 (ja) 2017-04-05
TWI569206B (zh) 2017-02-01
US20140068167A1 (en) 2014-03-06
US20150324129A1 (en) 2015-11-12
CN104603742B (zh) 2017-06-23
EP2891053B1 (en) 2021-07-28
EP2891053A1 (en) 2015-07-08
US9075428B2 (en) 2015-07-07
TW201423581A (zh) 2014-06-16
CN104603742A (zh) 2015-05-06

Similar Documents

Publication Publication Date Title
US11599770B2 (en) Methods and devices for programming a state machine engine
JP6106752B2 (ja) 状態機械エンジンのための結果生成
US11741014B2 (en) Methods and systems for handling data received by a state machine engine
JP6280121B2 (ja) 状態機械エンジンにおける命令挿入
JP6122121B2 (ja) パターン認識処理における電力管理のための方法およびシステム
US10671295B2 (en) Methods and systems for using state vector data in a state machine engine

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160630

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160630

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20160630

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20160728

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20161019

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161122

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170216

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: 20170228

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170306

R150 Certificate of patent or registration of utility model

Ref document number: 6106752

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250