特許第6017034号(P6017034)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ マイクロン テクノロジー, インク.の特許一覧

特許6017034状態機械エンジンが受信したデータを取り扱うための方法およびシステム
<>
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000002
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000003
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000004
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000005
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000006
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000007
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000008
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000009
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000010
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000011
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000012
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000013
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000014
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000015
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000016
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000017
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000018
  • 特許6017034-状態機械エンジンが受信したデータを取り扱うための方法およびシステム 図000019
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6017034
(24)【登録日】2016年10月7日
(45)【発行日】2016年10月26日
(54)【発明の名称】状態機械エンジンが受信したデータを取り扱うための方法およびシステム
(51)【国際特許分類】
   G06F 17/30 20060101AFI20161013BHJP
   G06F 7/00 20060101ALI20161013BHJP
   G06F 9/50 20060101ALI20161013BHJP
【FI】
   G06F17/30 415
   G06F7/00
   G06F9/46 465E
【請求項の数】25
【全頁数】33
(21)【出願番号】特願2015-523124(P2015-523124)
(86)(22)【出願日】2013年7月9日
(65)【公表番号】特表2015-531111(P2015-531111A)
(43)【公表日】2015年10月29日
(86)【国際出願番号】US2013049744
(87)【国際公開番号】WO2014014709
(87)【国際公開日】20140123
【審査請求日】2016年6月20日
(31)【優先権主張番号】13/552,479
(32)【優先日】2012年7月18日
(33)【優先権主張国】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】595168543
【氏名又は名称】マイクロン テクノロジー, インク.
(74)【代理人】
【識別番号】100074099
【弁理士】
【氏名又は名称】大菅 義之
(74)【代理人】
【識別番号】100106851
【弁理士】
【氏名又は名称】野村 泰久
(72)【発明者】
【氏名】ブラウン,デイビッド アール.
(72)【発明者】
【氏名】ノイズ,ハロルド ビー.
(72)【発明者】
【氏名】ベインズ,インダージット エス.
【審査官】 樋口 龍弥
(56)【参考文献】
【文献】 特表2005−524142(JP,A)
【文献】 特開2009−301137(JP,A)
【文献】 特表2001−503577(JP,A)
【文献】 特開平10−69459(JP,A)
【文献】 特開平8−87462(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/30
G06F 7/00
G06F 9/50
(57)【特許請求の範囲】
【請求項1】
データ分析システムであって、
分析されるデータを受信するように構成されるデータバッファと、
複数の構成可能素子を備え、各々の構成可能素子が、前記データの少なくとも一部分を分析し、前記分析の結果を出力するように構成される複数のメモリセルを備える、状態機械格子と、
前記データを前記データバッファから受信し、前記データを前記状態機械格子に提供するように構成される、前記データバッファが、データバーストを介してバッファインターフェースにデータを提供するように構成され、各データバーストは、複数の状態機械格子のそれぞれ用にデータの所定の一部を含むバッファインターフェースと、
を備える、データ分析システム。
【請求項2】
前記データバッファは、第1のデータバッファおよび第2のデータバッファを含み、前記第1および第2のデータバッファの各々が、データを受信し、データを前記バッファインターフェースに提供するように構成される、請求項1に記載のシステム。
【請求項3】
前記第1のデータバッファは、前記第2のデータバッファがデータを前記バッファインターフェースに提供している間にデータを受信するように構成され、前記第2のデータバッファは、前記第1のデータバッファがデータを前記バッファインターフェースに提供している間にデータを受信するように構成される、請求項2に記載のシステム。
【請求項4】
前記データバッファは、前記データをデータブロックとして受信するように構成され、各々のデータブロックは、複数の状態機械格子のうちの1つに対応する、請求項1に記載のシステム。
【請求項5】
前記データバッファは、1つ、2つ、4つ、または8つのデータブロックを受信するように構成される、請求項4に記載のシステム。
【請求項6】
前記データバッファは、前記データをデータブロック群として受信するように構成され、各々のデータブロック群は、前記複数の状態機械格子のうちの各々に対するデータブロックを含む、請求項1に記載のシステム。
【請求項7】
前記データバッファは、交互発生するパターンで、データブロック群の各々のデータブロックの所定の部分を、前記データブロック群の各々のデータブロックが記憶されるまで記憶するように構成され、前記交互発生するパターンは、各々のデータブロック間で交互に発生する、請求項6に記載のシステム。
【請求項8】
各々のデータブロックの前記所定の部分は、8バイト、16バイト、32バイト、または64バイトのデータを含む、請求項7に記載のシステム。
【請求項9】
データの前記所定の部分は、1バイト、2バイト、4バイト、または8バイトのデータを含む、請求項1に記載のシステム。
【請求項10】
前記複数の状態機械格子の各々に結合される1つ以上の処理バッファを備え、各々の処理バッファは、そのそれぞれの状態機械格子に対応する各々のデータバーストからデータの前記所定の部分を判定するように構成される、請求項1に記載のシステム。
【請求項11】
前記データバッファは、前記分析されるデータに対応する命令を受信するように構成される命令バッファを含む、請求項1に記載のシステム。
【請求項12】
データ分析システムであって、
複数の状態機械エンジンであって、各々が複数のデータ分析素子を有する状態機械格子を備え、各々のデータ分析素子が、データの少なくとも一部分を分析し、前記分析の結果を出力するように構成される複数のメモリセルを備える、複数の状態機械エンジンと、
前記複数の状態機械エンジンの各々に結合され、前記データを受信し、前記データを前記複数の状態機械エンジンに提供するように構成される、バッファインターフェースと、
分析されるべき前記データを受信し、前記データを前記バッファインターフェースに提供するように構成され、データバッファは、データブロック群として前記データを受信するように構成され、データブロックの各群は、前記複数の状態機械エンジンのそれぞれ用のデータブロックを含み、前記データブロックの少なくとも1つは、バイトパッディングと組み合わされる有効データを含む、データバッファと、
を備える、データ分析システム。
【請求項13】
前記データバッファは、命令バッファを含み、前記命令バッファが、バイトパディングを含むデータブロックの部分を特定する命令を受信するように構成される、請求項12に記載のシステム。
【請求項14】
前記データバッファは、複数の命令群を受信するように構成され、各々の命令群が、データブロック群に関連するデータを含む、請求項12に記載のシステム。
【請求項15】
各々のデータブロック群は、複数の領域を含み、各々の命令群が、前記複数の領域の各々に関連するデータを含む、請求項14に記載のシステム。
【請求項16】
前記複数の領域の各々に関連する前記データは、前記それぞれの領域中の総バイト数と、前記それぞれの領域中の前記データブロックの各々に対する総有効データバイト数とを含む、請求項15に記載のシステム。
【請求項17】
前記複数の状態機械エンジンの各々は、前記総バイト数と前記総有効データバイト数との間の差に対応するデータを無視するように構成される、請求項16に記載のシステム。
【請求項18】
前記複数の状態機械エンジンは、1つ、2つ、4つ、または8つの状態機械エンジンを含む、請求項12に記載のシステム。
【請求項19】
前記データを解析するように構成され、前記複数の状態機械エンジンを含む、単一の論理群を含む、請求項12に記載のシステム。
【請求項20】
前記データを分析するように構成された複数の論理群を含み、前記複数の論理群の各論理群は、前記複数の状態機械エンジンの少なくとも1つを含む、請求項12に記載のシステム。
【請求項21】
前記複数の論理群の各論理群は、前記データを受信し、前記データの所定の一部を分析するように構成されている、請求項20に記載のシステム。
【請求項22】
前記複数の論理群の各論理群は、前記データを受信し、前記複数の論理群の他の論理群と並列して前記データを分析するように構成され、各論理群によって分析される前記データは同一である、請求項20に記載のシステム。
【請求項23】
前記複数の状態機械エンジンの各状態機械エンジンは、各状態機械エンジンに割り当てられたデータを分析するように構成される、請求項12に記載のシステム。
【請求項24】
前記複数の状態機械エンジンの各状態機械エンジンは、前記バッファインターフェースに提供されるデータバーストの所定の一部をラッチするように構成される、請求項12に記載のシステム。
【請求項25】
前記データバッファは、オフセットして前記データを格納し、オフセットなしで、前記バッファインターフェースに前記データを提供するように構成される、請求項12に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、一般的には、電子デバイスに関し、より具体的には、ある実施形態では、データ分析のための並列デバイスを持つ電子デバイスに関する。
【背景技術】
【0002】
[関連技術の説明]
複雑なデータ分析(例えば、パターン認識)は、従来のフォンノイマン式コンピュータ上で実施するには非効率的でありうる。生物の頭脳、特に人間の頭脳は、しかしながら、複雑なデータ分析は得意である。現在の研究は、人間の頭脳は、新皮質中の一連の階層的に組織化されたニューロン層を用いてデータ分析を実施することを示唆している。階層のより低い層中のニューロンは、例えば感覚器官からの「生の信号」を分析し、より高い層中のニューロンは、より低い水準のニューロンからの信号を分析する。新皮質中のこの階層的システムは、おそらくは頭脳の他のエリアと組み合わされて複雑なデータ分析を遂行し、この分析が、人間が、空間的推論、意識的思考、および複雑な言語などの高い水準の機能を実施することを可能とする。
【0003】
コンピューティングの分野では、パターン認識タスクは、例えば、ますます意欲をそそるようになっている。さらにより多量のデータがコンピュータ間で伝達され、ユーザが検出することを希望するパターンの数は増している。例えば、スパムまたはマルウエアが、データストリーム、例えば特定のフレーズまたはコードの一部の中のパターンを検索することによって、しばしば検出される。パターンの数は、スパムおよびマルウエアの多様性と共に増加するが、それは、新しい変形を検索するために、新しいパターンが実装され得るからである。これらのパターンの各々を求めてデータストリームを検索することによって、コンピューティング上のボトルネックが形成されかねない。しばしば、データストリームが受信されると、それが、一つずつ、各々のパターンを求めて検索される。システムがデータストリームの次の部分を検索する準備がなるまでの遅延は、パターンの数と共に増加する。したがって、パターン認識は、データの受信を遅速化する。
【0004】
ハードウエアは、パターンを求めてデータストリームを検索するように設計されてきたが、このハードウエアは、しばしば、所与の時間内で適切な量のデータを処理することが不可能である。データストリームを検索するように構成される一部のデバイスは、データストリームを複数の回路間に分散させることによってそのように実行する。これらの回路は各々が、データストリームがパターンの一部分に適合するかどうかを判定する。しばしば、多数の回路が並列に動作して、各々が、ほぼ同時にデータストリームを検索する。しかしながら、生物の頭脳により匹敵する様式で複雑なデータ分析を実施することを効果的に可能とするシステムは存在しなかった。このようなシステムの開発が望ましい。
【図面の簡単な説明】
【0005】
図1】本発明の様々な実施形態に関わる、状態機械エンジンを有するシステムの例を示す。
図2】本発明の様々な実施形態に関わる、図1の状態機械エンジンの有限状態機械(FSM)格子の例を示す。
図3】本発明の様々な実施形態に関わる、図2のFSM格子のブロックの例を示す。
図4】本発明の様々な実施形態に関わる、図3のブロックの行の例を示す。
図5】本発明の様々な実施形態に関わる、図4の行のうちの2つずつの群の例を示す。
図6】本発明の様々な実施形態に関わる、有限状態機械グラフの例を示す。
図7】本発明の様々な実施形態に関わる、FSM格子で実装される2水準階層の例を示す。
図8】本発明の様々な実施形態に関わる、コンパイラがソースコードを図2のFSM格子のプログラミング用の二進法ファイルに変換するための方法の例を示す。
図9】本発明の様々な実施形態に関わる、状態機械エンジンを示す。
図10】本発明の様々な実施形態に関わる、デバイスのランクに配列された複数の物理的状態機械エンジンの例を示す。
図11】本発明の様々な実施形態に関わる、状態機械エンジンに提供されるようにデータブロックに群分けされたデータセグメントの例を示す。
図12】本発明の様々な実施形態に関わる、図11のデータブロックのデータセグメント間に挿入されるデータパディングの例を示す。
図13】本発明の様々な実施形態に関わる、図12のデータブロックのデータセグメントの後に挿入されるデータパディングの例を示す。
図14】本発明の様々な実施形態に関わる、状態機械エンジンのデータバッファシステムに伝達されるように組織化された図13のデータブロックの例を示す。
図15】本発明の様々な実施形態に関わる、状態機械エンジンによって受信されるデータブロックの例を示す。
図16】本発明の様々な実施形態に関わる、状態機械エンジンのデータバッファシステムに記憶される図15のデータブロックの例を示す。
図17】本発明の様々な実施形態に関わる、複数のFSM格子にデータバッファシステムから提供されているデータの例を示す。
図18】本発明の様々な実施形態に関わる、複数の論理群中に提供されているデータの例を示す。
【発明を実施するための形態】
【0006】
ここで図面に目を転じると、図1は、一般に参照番号10で示されるプロセッサベースのシステムの実施形態を示す。システム10(例えば、データ分析システム)は、デスクトップコンピュータ、ラップトップコンピュータ、ポケベル、携帯電話、自己管理手帳、携帯式オーディオプレイヤー、制御回路、カメラなどの様々なタイプのうちの任意のものであり得る。システム10はまた、ルーター、サーバ、またはクライアント(例えば、既に述べたタイプのコンピュータのうちの1つ)などのネットワークノードであり得る。システム10は、コピー機、スキャナ、プリンタ、ゲーム機、テレビ、セットトップビデオ分配もしくは記録システム、ケーブルボックス、パーソナルデジタルメディアプレイヤー、ファクトリーオートメーションシステム、自動車コンピュータシステム、または医療デバイスなどのなんらかの他の種類の電子デバイスであり得る。(これらの様々なシステムの例を説明するために用いられる用語は、本明細書で用いられる他の用語と同様に、他の参照符号を共有し得るため、列挙された他の項目のゆえに狭義に解釈されるべきではない。)
【0007】
システム10などの一般的なプロセッサベースのデバイスにおいては、マイクロプロセッサなどのプロセッサ12は、システム10中でのシステム機能および要求の処理を制御する。さらに、プロセッサ12は、システム制御を共有する複数のプロセッサを備え得る。プロセッサ12は、システム10中の素子の各々に直接にまたは間接に結合され得るため、プロセッサ12は、システム10の内部またはシステム10の外部に記憶され得る命令を実行することによって、システム10を制御する。
【0008】
本明細書に説明する実施形態によれば、システム10は、プロセッサ12の制御下で動作し得る状態機械エンジン14を含む。本明細書で用いられる状態機械エンジン14は、単一のデバイス(例えば、単一のチップ)のことである。状態機械エンジン14は、オートマトン理論を用い得る。例えば、状態機械エンジン14は、これらに限られないが、ミーリーアーキテクチャ、ムーアアーキテクチャ、有限状態機械(FSM)、決定性FSM(DFSM)、ビットパラレル状態機械(BPSM)などを含むいくつかの状態機械アーキテクチャのうちの1つを用い得る。様々なアーキテクチャが用いられ得るとはいえ、説明目的のため、応用分野はFSMのことである。しかしながら、当業者は、説明する技法は、様々な状態機械アーキテクチャのうちの任意の1つを用いて採用され得ることを理解するであろう。
【0009】
以下にさらに説明するように、状態機械エンジン14は、いくつかの(例えば、1以上の)有限状態機械(FSM)格子(例えば、チップのコア)を含み得る。この応用分野の目的上、「格子」という用語は、素子(例えば、ブールセル、カウンタセル、状態機械素子、状態遷移素子)の組織化されたフレームワーク(例えば、ルーティングマトリックス、ルーティングネットワーク、フレーム)のことである。さらに、「格子」は、任意の適切な形状、構造、または階層的組織(例えば、グリッド、キューブ、球、カスケード)を有し得る。各々のFSM格子は、各々が同じデータを並列に受信して分析する複数のFSMを実装し得る。さらに、FSM格子は、群(例えば、クラスタ)に配列され得て、それにより、FSM格子のクラスタは、同じ入力データを並列に分析し得る。さらに、状態機械エンジン14のFSM格子のクラスタは、階層構造のより低い水準の状態機械格子からの出力はより高い水準の状態機械格子に対する入力として用いられ得る階層構造に配列され得る。状態機械エンジン14の並列FSM格子のクラスタを、階層構造を介して直列にカスケーディングすることによって、ますます複雑なパターンが分析され得る(例えば、評価され得る、探索され得るなど)。
【0010】
さらに、状態機械エンジン14の階層的並列構成に基づいて、状態機械エンジン14は、高処理速度を利用するシステムにおいて複雑なデータ分析(例えば、パターン認識)のために用いられ得る。例えば、本明細書に説明する実施形態は、1ギガバイト/秒の処理速度を持つシステムに組み込まれ得る。したがって、状態機械エンジン14を利用して、高速メモリデバイスまたは他の外部デバイスからのデータは迅速に分析され得る。状態機械エンジン14は、ほぼ同時に、例えば、単一のデバイスサイクル中で、データストリームをいくつかの基準(例えば、検索項目)に従って分析し得る。状態機械エンジン14のある水準上のFSMのクラスタ内のFSM格子の各々は、各々、ほぼ同時にデータストリームから同じ検索項目を受信し、並列FSM格子の各々は、その項目が状態機械エンジン14を処理基準中の次の状態に前進させるかどうかを判定し得る。状態機械エンジン14は、比較的多数の基準、例えば、100を超える、110を超える、または10,000を超える基準に従って項目を分析し得る。それらは並列に動作するため、それらは、基準を比較的高い帯域幅を有するデータストリーム、例えば、1ギガバイト/秒を超えるまたはほぼ等しいデータストリームに、そのデータストリームを遅速化することなく、適用し得る。
【0011】
1つの実施形態では、状態機械エンジン14は、データストリーム中の多数のパターンを認識する(例えば、検出する)ように構成され得る。例えば、状態機械エンジン14は、ユーザまたは他のエンティティが分析することを希望する様々なタイプのデータストリームのうちの1つ以上の中のパターンを検出するために利用され得る。例えば、状態機械エンジン14は、インターネットを介して受信されたパケットまたはセルラーネットワークを介して受信された音声もしくはデータなどのネットワークを介して受信されたデータのストリームを分析するように構成され得る。1つの実施形態では、状態機械エンジン14は、スパムまたはマルウエアに対しデータストリームを分析するように構成され得る。データストリームは、データが、時間的、語彙的、または意味論的に意味のある順序などの意味を有する順序で受信される、直列のデータストリームとして受信され得る。代替的には、データストリームは、並列にまたはバラバラの順序で受信され、次に、例えば、インターネットを介して受信されたパケットを再順序付けすることによって、直列のデータストリームに変換され得る。一部の実施形態では、データストリームは、項目を直列に表すが、項目の各々を表現するビットは並列に受信され得る。データストリームは、システム10の外部のソースから受信される、または、メモリ16などのメモリデバイスに質問して、メモリ16に記憶されているデータからデータストリームを形成することによって形成され得る。他の例では、状態機械エンジン14は、ある語を綴る一連の文字、遺伝子を指定する一連の遺伝子塩基対、イメージの一部分を形成する写真もしくは動画ファイル内の一連のビット、プログラムの一部を形成する実行可能ファイル中の一連のビット、または歌もしくは話されたフレーズの一部を形成するオーディオファイル中の一連のビットを認識するように構成され得る。分析されるデータのストリームは、二進法形式または他の形式、例えば、十進法、ASCIIなどの複数のデータビットを含み得る。このストリームは、一桁または複数桁、例えば、いくつかの二進法桁のデータを符号化し得る。
【0012】
理解されるように、システム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)、MultimediaMediaCards(MMC)、SecureDigital(SD)カード、CompactFlash(CF)カード、または任意の他の適切なデバイスと呼ばれ得るまたはこれらを含み得る。さらに、このようなデバイスは、ユニバーサルシリアルバス(USB)、周辺構成要素相互接続(PCI)、PCI Express(PCI−E)、小型コンピュータシステムインターフェース(SCSI)、IEEE1394(Firewire)、または任意の他の適切なインターフェースなどの任意の適切なインターフェースを介してシステム10に結合し得ることを理解すべきである。フラッシュメモリデバイスなどのメモリ16の動作を容易化するために、システム10は、メモリコントローラ(図示せず)を含み得る。理解されるように、メモリコントローラは独立したデバイスであり得るか、または、それはプロセッサ12と統合され得る。加えて、システム10は、磁気記憶デバイスなどの外部記憶装置18を含み得る。外部記憶装置もまた、入力データを状態機械エンジン14に提供し得る。
【0013】
システム10は、いくつかのさらなる素子を含み得る。例えば、コンパイラ20は、図8に関連してより詳細に説明するように、状態機械エンジン14を構成する(例えば、プログラムする)ために用いられ得る。入力デバイス22もまた、ユーザがデータをシステム10に入力することを可能とするために、プロセッサ12に結合され得る。例えば、入力デバイス22は、状態機械エンジン14によって後で分析されるように、データをメモリ16に入力するために用いられ得る。入力デバイス22は、例えば、ボタン、切り替え素子、キーボード、ライトペン、スタイラスペン、マウス、および/または音声認識システムを含み得る。ディスプレイなどの出力デバイス24もまた、プロセッサ12に結合され得る。ディスプレイ24は、例えば、LCD、CRT、LED、および/またはオーディオディスプレイを含み得る。システムはまた、インターネットなどのネットワークとインターフェースをとるために、ネットワークインターフェースカード(NIC)などのネットワークインターフェースデバイス26を含み得る。理解されるように、システム10は、システム10の用途に応じて、多くの他の構成要素を含み得る。
【0014】
図2〜5は、FSM格子30の例を示す。ある例では、FSM格子30は、ブロック32のアレイを備える。説明されるように、各々のブロック32は、FSM中の複数の状態に対応する複数の選択的に結合可能なハードウエア素子(例えば、構成可能な素子および/または特殊目的の素子)を含み得る。FSM中での状態に類似して、ハードウエア素子は、入力ストリームを分析して、この入力ストリームに基づいて下流のハードウエア素子を起動することが可能である。
【0015】
構成可能素子は、多くの異なる機能を実装するように構成する(例えば、プログラムする)ことが可能である。例えば、構成可能素子は、行38(図3および4に示す)およびブロック32(図2および3に示す)に階層的に組織化される状態機械素子(SME)34、36(図5に示す)を含み得る。SMEはまた、状態遷移素子(STE)と考えられ得る。階層的に組織化されたSME34、36の間で信号をルーティングするには、ブロック間切り替え素子40(図2および3に示す)、ブロック内切り替え素子42(図3および4に示す)、行内切り替え素子44(図4に示す)を含む構成可能切り替え素子の階層を用いればよい。
【0016】
以下に説明するように、切り替え素子は、ルーティング用の構造およびバッファを含み得る。SME34、36は、FSM格子30によって実装されたFSMの状態に対応する。SME34、36は、以下に説明するように、構成可能な切り替え素子を用いることによって一緒に結合することが可能である。したがって、FSMは、SME34、36を状態の機能に対応するように構成し、SME34、36をFSM中の状態の間での遷移に対応するように選択的に結合することによって、FSM格子30上に実装することが可能である。
【0017】
図2は、FSM格子30の例の全体図を示す。FSM格子30は、構成可能なブロック間切り替え素子40と選択的に一緒に結合することが可能な複数のブロック32を含む。ブロック間切り替え素子40は、導線46(例えば、ワイヤ、トレースなど)と、バッファ48および50とを含み得る。ある例では、バッファ48および50は、ブロック間切り替え素子40への/からの信号の接続およびタイミングを制御するために含まれる。以下にさらに説明するように、バッファ48はブロック32間で送出されているデータをバッファリングするために提供され得るが、バッファ50はブロック間切り替え素子40間で送出されているデータをバッファリングするために提供され得る。加えて、ブロック32は、信号(例えば、データ)を受信して、そのデータをブロック32に提供するための入力ブロック52(例えば、データ入力ポート)に選択的に結合することが可能である。ブロック32はまた、ブロック32からの信号を外部デバイス(例えば、別のFSM格子30)に提供するための出力ブロック54(例えば、出力ポート)に選択的に結合することが可能である。FSM格子30はまた、(例えば、イメージ、プログラムを介して)FSM格子30を構成するために、プログラミングインターフェース56を含むことが可能である。イメージは、SME34、36の状態を構成する(例えば、設定する)ことが可能である。すなわち、イメージは、入力ブロック52での所与の入力に対してある仕方で反応するようにSME34、36を構成することが可能である。例えば、SME34、36は、文字「a」が入力ブロック52で受信されたときに高信号を出力するように設定することが可能である。
【0018】
ある例では、入力ブロック52、出力ブロック54、および/またはプログラミングインターフェース56は、レジスタに対する書き込みまたはそこからの読み出しがそれぞれの素子へのまたはそこからのデータを提供するように、レジスタとして実装され得る。したがって、プログラミングインターフェース56に対応するレジスタに記憶されているイメージからのビットを、SME34、36上にロードすることが可能である。図2はブロック32、入力ブロック52、出力ブロック54、およびブロック間切り替え素子40の間のある数の導線(例えば、ワイヤ、トレース)を示しているが、他の例では、より少ないまたはより多い導線が用いられ得ることを理解すべきである。
【0019】
図3は、ブロック32の例を示す。ブロック32は、構成可能なブロック内切り替え素子42と選択的に一緒に結合することが可能な複数の行38を含むことが可能である。加えて、行38は、ブロック間切り替え素子40で、別のブロック32内の別の行38に選択的に結合することが可能である。行38は、本明細書では2つずつの群(GOT)60と呼ばれる素子の対に組織化される複数のSME34、36を含む。ある例では、ブロック32は、16(16)の行38を備える。
【0020】
図4は、行38の例を示す。GOT60は、構成可能な行内切り替え素子44によって、行38内の他のGOT60および任意の他の素子(例えば、特殊目的素子58)に選択的に結合することが可能である。GOT60はまた、ブロック内切り替え素子42によって他の行38中の他のGOT60に対して、または、ブロック間切り替え素子40によって他のブロック32中の他のGOT60に対して結合することが可能である。ある例では、GOT60は、第1および第2の入力部62、64ならびに出力部66を有する。図5を参照してさらに例示されるように、第1の入力部62はGOT60の第1のSME34に結合され、第2の入力部64はGOT60の第2のSME36に結合される。
【0021】
ある例では、行38は、第1および第2の複数の行相互接続導線68、70を含む。ある例では、GOT60の入力部62、64は1つ以上の行相互接続導線68、70に結合することが可能であり、出力部66は1つ以上の行相互接続導線68、70に結合することが可能である。ある例では、第1の複数の行相互接続導線68は、行38内の各々のGOT60の各々のSME34、36に結合することが可能である。第2の複数の行相互接続導線70は、行38内の各々のGOT60の各々のたった1つのSME34、36に結合することが可能であるが、GOT60のその他のSME34、36には結合することは不可能である。ある例では、図5に関連してより良好に示されるように、第2の複数の行相互接続導線70のうちの第1の半分は、行38内のSME34、36のうちの第1の半分(各々のGOT60から1つのSME34)に結合することが可能であり、第2の複数の行相互接続導線70のうちの第2の半分は、行38内のSME34、36のうちの第2の半分(各々のGOT60からその他のSME34、36)に結合することが可能である。第2の複数の行相互接続導線70とSME34、36との間の制限された接続は、本明細書では「パリティ」と呼ばれる。ある例では、行38はまた、カウンタなどの特殊目的素子58、構成可能ブール論理素子、ルックアップテーブル、RAM、フィールド構成可能ゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、構成可能プロセッサ(例えば、マイクロプロセッサ)、または、特殊目的機能を実施するための他の素子などの特殊目的素子58を含むことが可能である。
【0022】
ある例では、特殊目的素子58は、カウンタ(本明細書ではカウンタ58とも呼ばれる)を備える。ある例では、カウンタ58は、12ビットの構成可能ダウンカウンタを備える。12ビット構成可能カウンタ58は、カウント入力部、リセット入力部、およびゼロカウント出力部を有する。カウント入力部は、アサートされるとき、カウンタ58の値を1だけデクレメントする。リセット入力部は、アサートされるとき、カウンタ58に、関連付けられたレジスタから初期値をロードさせる。12ビットカウンタ58の場合、最大で12ビットの数を、初期値としてロードすることが可能である。カウンタ58の値がゼロ(0)にデクレメントされるとき、ゼロカウント出力がアサートされる。カウンタ58はまた、パルスモードとホールドモードとの少なくとも2つのモードを有する。カウンタ58がパルスモードに設定されるとき、ゼロカウント出力は、カウンタ58がゼロに到達して、クロックが循環するときにアサートされる。このゼロカウント出力は、カウンタ58の次のクロックサイクルの間にアサートされる。その結果、カウンタ58は、クロックサイクルから時間的に間に合ってオフセットされる。次のクロックサイクルで、ゼロカウント出力はもはやアサートされない。カウンタ58がホールドモードに設定されるとき、ゼロカウント出力は、カウンタ58がゼロにデクレメントするときにクロックサイクル間にアサートされ、カウンタ58がアサートされているリセット入力によってリセットされるまでアサートされたまま留まる。
【0023】
別の例では、特殊目的素子58はブール論理を備える。例えば、ブール論理は、AND、OR、NAND、NOR、積和(SoP)、積和のネゲート出力(NSoP)、和積のネゲート出力(NPoS)、および和積(PoS)の関数などの論理関数を実施するために用いられ得る。このブール論理は、FSM格子30中の(以下に後述するように、FSMのターミナルノードに対応する)ターミナル状態のSMEからデータを抽出するために用いることが可能である。抽出されたデータは、状態データを他のFSM格子30に提供するおよび/またはFSM格子30を再構成するために用いられる構成用データを提供する、または別のFSM格子30を再構成するために用いることが可能である。
【0024】
図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の、どちらにも結合することが不可能であるか、一方または双方に結合することが可能であるかである。
【0025】
ある例では、状態機械素子34、36は、検出ライン82に並列に結合された、ダイナミックランダムアクセスメモリ(DRAM)でしばしば用いられるものなどの複数のメモリセル80を備える。このような1つのメモリセル80は、高いまたは低い値(例えば、1または0)に対応するものなどのデータ状態に設定することが可能なメモリセルを備える。メモリセル80の出力部は、検出ライン82に結合され、メモリセル80への入力部は、データストリームライン84上のデータに基づく信号を受信する。ある例では、入力ブロック52での入力は、メモリセル80の内の1つ以上を選択するために復号化される。選択されたメモリセル80は、その記憶されたデータ状態を、検出ライン82上に出力として提供する。例えば、入力ブロック52で受信されたデータは、デコーダ(図示せず)に提供することが可能であり、デコーダはデータストリームライン84のうちの1つ以上を選択することが可能である。ある例では、デコーダは、8ビットのASCII文字を256のデータストリームライン84のうちの対応する1つに変換することが可能である。
【0026】
メモリセル80は、したがって、メモリセル80が高い値に設定され、データストリームライン84上のデータがメモリセル80を選択するときに、高信号を検出ライン82に出力する。データストリームライン84上のデータがメモリセル80を選択し、メモリセル80が低い値に設定されるときに、メモリセル80は、低い信号を検出ライン82に出力する。検出ライン82上のメモリセル80からの出力は、検出セル86によって感知される。
【0027】
ある例では、入力ライン62、64上の信号は、それぞれの検出セル86をアクティブ状態または非アクティブ状態に設定する。非アクティブ状態に設定されたとき、検出セル86は、それぞれの検出ライン82上の信号とは無関係に、それぞれの出力部72、74上に低い信号を出力する。アクティブ状態に設定されたとき、検出セル86は、それぞれのSME34、36のメモリセル82のうちの1つから高い信号が検出されるときに、高い信号をそれぞれの出力ライン72、74上に出力する。アクティブ状態にあるとき、検出セル86は、それぞれのSME34、36のメモリセル82の全てからの信号が低いときには、それぞれの出力ライン72、74上に低い信号を出力する。
【0028】
ある例では、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つがその上に高い信号を有するときに、高い信号を出力するように設定することが可能である。
【0029】
ある例では、メモリセル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に高い信号を出力する。
【0030】
ある例では、単一の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からの出力データを含むことが可能となる。
【0031】
ある例では、FSM格子30上にロードされるイメージは、構成可能素子、構成可能切り替え素子、およびFSM格子30内の特殊目的素子を構成するための複数ビットのデータを含む。ある例では、イメージは、ある入力に基づいて所望の出力を提供するようにFSM格子30を構成するために、FSM格子30上にロードすることが可能である。出力ブロック54は、データ入力ブロック52でのデータに対する構成可能素子の反応に基づいて、FSM格子30からの出力を提供することが可能である。出力ブロック54からの出力は、所与のパターンの適合を示す単一ビット、複数のパターンに対する適合および不適合を示す複数ビットを含む語、ならびに所与の瞬間での全てのもしくはある構成可能素子の状態に対応する状態ベクトルを含むことが可能である。説明したように、いくつかのFSM格子30は、パターン認識(例えば、音声認識、イメージ認識など)、信号処理、撮像、コンピュータビジョン、暗号法などのデータ分析を実施するために、状態機械エンジン14などの状態機械エンジン中に含まれ得る。
【0032】
図6は、FSM格子30によって実装することが可能な有限状態機械(FSM)の例としてのモデルを示す。FSM格子30は、FSMの物理的実装物として構成する(例えば、プログラムする)ことが可能である。FSMは、1つ以上のルートノード92を含むダイアグラム90(例えば、有向グラフ、無向グラフ、擬グラフ)として表されうる。ルートノード92に加えて、FSMは、1つ以上のエッジ98を介してルートノード92および他の標準ノード94に接続されたいくつかの標準ノード94およびターミナルノード96から作成することが可能である。ノード92、94、96はFSM中の状態に対応する。エッジ98は、状態の間の遷移に対応する。
【0033】
ノード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つ以上のノードの間の関係のことであるが、これらの用語は、ノード間でのループまたは他の非線形経路の使用を排除しない。
【0034】
ダイアグラム90では、ルートノード92は、最初に起動され得、入力データがルートノード92からのエッジ98と適合するときに、下流のノード94を起動することが可能である。ノード94は、入力データがルートノード94からのエッジ98と適合するときに、ノード96を起動することが可能である。ダイアグラム90全体にわたって、ノード94、96は、入力データが受信されると、この様式で起動することが可能である。ターミナルノード96は、入力データ中の目的とするシーケンスの適合に対応する。したがって、ターミナルノード96の起動は、目的とするシーケンスが入力データとして受信されたことを示す。パターン認識機能を実装しているFSM格子30の文脈では、ターミナルノード96への到達は、目的とする特定のパターンが入力データ中で検出されたことを示しうる。
【0035】
ある例では、各々のルートノード92、標準ノード94、およびターミナルノード96は、FSM格子30中の構成可能素子に対応しうる。各々のエッジ98は、構成可能素子の間の接続部に対応しうる。したがって、別の標準ノード94またはターミナルノード96に遷移する(例えば、これに接続するエッジ98を有する)標準ノード94は、別の構成可能素子に遷移する(例えば、これに対して出力を提供する)構成可能素子に対応する。一部の例では、ルートノード92は、対応する構成可能素子を有しない。
【0036】
理解されるように、ノード92をルートノードとして説明し、ノード96をターミナルノードとして説明したが、必ずしも特定の「出発点」またはルートノードがなくてもよく、必ずしも特定の「終了点」または出力ノードがなくてもよい。言い換えれば、どのノードでも開始点であり得るし、またどのノードでも出力を提供し得る。
【0037】
FSM格子30がプログラムされたとき、構成可能素子の各々もまた、アクティブ状態または非アクティブ状態にありうる。所与の構成可能素子は、非アクティブであるとき、対応するデータ入力ブロック52での、入力データに反応しない。アクティブな構成可能素子はデータ入力ブロック52での入力データに反応することが可能であり、その入力データが構成可能素子の設定と適合するときに、下流の構成可能素子を起動することが可能である。ある構成可能素子がターミナルノード96に対応するとき、その構成可能素子は、外部デバイスとの適合の指示を提供するために、出力ブロック54に結合することが可能である。
【0038】
プログラミングインターフェース56を介してFSM格子30上にロードされたイメージは、構成可能素子および特殊目的素子ならびに構成可能素子と特殊目的素子との間の接続部を構成することが可能であり、それにより、データ入力ブロック52でのデータに対する反応に基づいたノードの一連の起動によって、所望のFSMが実装される。ある例では、構成可能素子は、1つのデータサイクル(例えば、1つの文字、文字の集合、1つのクロックサイクル)にわたってアクティブのまま留まり、次に、上流の構成可能素子によって再起動されない限り、非アクティブになる。
【0039】
ターミナルノード96は、過去の事象の圧縮された履歴を記憶するものと考えることが可能である。例えば、ターミナルノード96に達するために必要とされる入力データの1つ以上のパターンは、そのターミナルノード96の起動によって表すことが可能である。ある例では、ターミナルノード96によって提供される出力は二進法である、すなわち、その出力は、目的とするパターンが適合したかどうかを示す。ダイアグラム90中の標準ノード94に対するターミナルノード96の比はかなり小さい。言い換えれば、FSM中には高度の複雑性があり得るとはいえ、FSMの出力は、比較すると小さくあり得る。
【0040】
ある例では、FSM格子30の出力は状態ベクトルを含みうる。状態ベクトルは、FSM格子30の構成可能素子の状態(例えば、起動されているか起動されていないか)を含む。別の例では、状態ベクトルは、構成可能素子がターミナルノード96に対応するかしないかとは無関係に、構成可能素子の全てまたは部分集合の状態を含むことが可能である。ある例では、状態ベクトルは、ターミナルノード96に対応する構成可能素子に対する状態を含む。したがって、出力は、ダイアグラム90の全てのターミナルノード96によって提供される指示の収集物を含むことが可能である。状態ベクトルは語として表すことが可能であるが、その場合、各々のターミナルノード96によって提供される二進法の指示は1ビットの語を含む。ターミナルノード96のこの符号化は、FSM格子30に対する検出状態(例えば、目的とするシーケンスが、およびどのシーケンスが、検出されたか)の効果的な指示を提供することが可能である。
【0041】
上述したように、FSM格子30は、パターン認識機能を実装するようにプログラムすることが可能である。例えば、FSM格子30は、入力データ中の1つ以上のデータシーケンス(例えば、署名、パターン)を認識するように構成すことが可能である。目的とするデータシーケンスがFSM格子30によって認識されたとき、その認識の指示を、出力ブロック54に提供することが可能である。ある例では、パターン認識は、例えば、ネットワークデータ中のマルウエアまたは他のデータを特定するために、記号(例えば、ASCII文字)のストリングを認識することが可能である。
【0042】
図7は、2つの水準のFSM格子30が直列に結合されて、データを分析するために用いられる階層構造100の例を示す。具体的には、図示する実施形態では、階層構造100は、直列に配列された第1のFSM格子30Aと第2のFSM格子30Bとを含む。各々のFSM格子30は、データ入力を受信するそれぞれのデータ入力ブロック52、構成用信号を受信するプログラミングインターフェースブロック56、および出力ブロック54を含む。
【0043】
第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によって記録された複雑な事象(例えば、目的とするシーケンス)の要約と効果的になりうる。
【0044】
図7に示すFSM格子30A、30Bの2水準階層100は、2つの独立したプログラムを、同じデータストリームに基づいて動作することを可能とする。この2段階階層は、異なる領域としてモデリングされた生物学的頭脳中での視認に類似しうる。このモデルでは、これらの領域は、各々が類似の計算機能(パターンマッチング)を実施するが、異なるプログラム(署名)を用いる効果的に異なるパターン認識エンジンである。複数のFSM格子30A、30Bを一緒に接続することによって、データストリーム入力に関する増加した知識が獲得され得る。
【0045】
(第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は、出力を生成するために、これらの複数の入力を組み合わせ得る。
【0046】
図8は、コンパイラが、FSMを実装するために、格子30などのFSM格子を構成するために用いられるイメージにソースコードを変換するための方法110の例を示す。方法110は、ソースコードをシンタクスツリーに解析すること(ブロック112)と、シンタクスツリーをオートマトンに変換すること(ブロック114)と、オートマトンを最適化すること(ブロック116)と、オートマトンをネットリストに変換すること(ブロック118)と、ネットリストをハードウエア上に置くこと(ブロック120)と、ネットリストをルーティングすること(ブロック122)と、結果として得られるイメージを公開すること(ブロック124)とを含む。
【0047】
ある例では、コンパイラ20は、ソフトウエア開発者がFSM格子30上にFSMを実装するためにイメージを作成することを可能とするアプリケーションプログラミングインターフェース(API)を含む。コンパイラ20は、ソースコード中の正規表現の入力集合を、FSM格子30を構成するために構成されたイメージに変換する方法を提供する。コンパイラ20は、フォンノイマンアーキテクチャを有するコンピュータ用の命令によって実装することが可能である。これらの命令は、コンピュータ上のプロセッサ12にコンパイラ20の機能を実装させることが可能である。例えば、これら命令は、プロセッサ12によって実行されるとき、プロセッサ12に、プロセッサ12からアクセス可能なソースコードに対して、ブロック112、114、116、118、120、122、および124中で説明したような動作を実施させることが可能である。
【0048】
ある例では、ソースコードは、記号の群内の記号のパターンを特定するための検索ストリングを記述する。検索ストリングを記述するには、ソースコードは、複数の正規表現(regex)を含めばよい。regexは、起動検索パターンを記述するためのストリングでありうる。regexは、プログラミング言語、テキストエディタ、ネットワークセキュリティなどの様々なコンピュータドメインで広く用いられる。ある例では、コンパイラにサポートされる正規表現は、非構造化データの分析のために基準を含む。非構造化データは、自由形態で、データ内の語に適用される索引付けを有しないデータを含みうる。語は、データ内での、印刷可能でありか印刷不可能であるかは問わず、バイトの任意の組み合わせを含みうる。ある例では、コンパイラは、Perl、(例えば、Perlとコンパティブルな正規表現(PCRE))、PHP、Java、および.NET言語を含むregexを実装するための複数の異なるソースコード言語をサポートすることが可能である。
【0049】
ブロック112で、コンパイラ20は、ソースコードを解析して、異なるタイプの演算子がソースコードによって実装された異なる機能(例えば、ソースコード中のregexによって実装された異なる機能)に対応する、関係的に接続された演算子の配列を形成することが可能である。ソースコードを解析することで、ソースコードの一般的表現を作成することが可能である。ある例では、この一般的な表現は、シンタクスツリーとして知られているツリーグラフという形態でソースコード中のregexの符号化された表現を含む。本明細書に説明する例は、他の例でのシンタクスツリー(「抽象シンタクスツリー」としても知られている)としての配列のことであるが、しかしながら、具象シンタクスツリーまたは他の配列を用いることが可能である。
【0050】
上述したように、コンパイラ20は複数のソースコード言語をサポートすることが可能であるため、解析することで、ソースコードは、言語とは無関係に、言語に固有ではない表現、例えばシンタクスツリーに変換される。したがって、コンパイラ20によるさらなる処理(ブロック114、116、118、120)は、ソースコードの言語とは無関係に、共通の入力構造から作動することが可能である。
【0051】
上記のように、シンタクスツリーは、関係的に接続された複数の演算子を含む。シンタクスツリーは、複数の異なるタイプの演算子を含みうる。すなわち、異なる演算子は、ソースコード中のregexによって実装される異なる機能に対応しうる。
【0052】
ブロック114で、シンタクスツリーはオートマトンに変換される。オートマトンは、FSMのソフトウエアモデルであり、したがって、決定性または非決定性であると分類することが可能である。決定性オートマトンは、所与の時点において単一の実行経路を有し、非決定性オートマトンは、複数の同時実行経路を有する。オートマトンは、複数の状態を含む。シンタクスツリーをオートマトンに変換するために、シンタクスツリー中の演算子と、演算子間の関係とを、状態間の遷移を伴う状態に変換する。ある例では、オートマトンは、FSM格子30のハードウエアに部分的に基づいて変換することが可能である。
【0053】
ある例では、オートマトンに対する入力記号は、アルファベット記号、数値0〜9、および他の印刷可能文字を含む。ある例では、入力記号は、バイト値0〜255(255を含む)によって表される。ある例では、オートマトンは、グラフのノードが状態の集合に対応する有向グラフとして表すことが可能である。ある例では、入力記号αに関する状態pから状態qへの遷移、すなわち、δ(p、α)は、ノードpからノードqへの有向接続によって示される。ある例では、オートマトンの逆は、ある記号αに関する各々の遷移p→qが、その記号に関する逆転されたq→pになる新しいオートマトンを生成する。逆にすると、開始状態は最終状態になり、最終状態は開始状態になる。ある例では、オートマトンによって認識された(例えば、適合した)言葉は、オートマトンに連続的に入力されたときに最終状態に到達する全ての可能な文字ストリングの集合である。オートマトンによって認識された言葉の中の各々のストリングは、開始状態から1つ以上の最終状態に至る経路をたどる。
【0054】
ブロック116で、オートマトンは、構築された後に、とりわけ、その複雑さおよびサイズを減少させるように最適化される。オートマトンは、冗長状態を組み合わせることによって最適化することが可能である。
【0055】
ブロック118で、最適化されたオートマトンはネットリストに変換される。オートマトンはネットリストに変換することで、オートマトンの各々の状態が、FSM格子30上のハードウエア素子(例えば、SME34、36、他の素子)にマッピングされ、ハードウエア素子間の接続が決定される。
【0056】
ブロック120で、ネットリストは、ネットリストの各々のノードに対応する目標デバイス(例えば、SME34、36、特殊目的素子58)の特定のハードウエア素子を選択するように位置付けされる。ある例では、位置付けは、FSM格子30用の一般的な入力および出力の制約に基づいて各々の特定のハードウエア素子を選択する。
【0057】
ブロック122で、位置付けされたネットリストは、選択されたハードウエア素子を一緒に結合して、ネットリストによって記述される接続を達成するために、構成可能切り替え素子(例えば、ブロック間切り替え素子40、ブロック内切り替え素子42、および行内切り替え素子44)に対する設定を決定するようにルーティングされる。ある例では、構成可能切り替え素子に対する設定は、選択されたハードウエア素子を接続するために用いられるFSM格子30の特定の導線と、構成可能切り替え素子に対する設定とを決定することによって決定される。ルーティングは、ブロック120のその位置付けでのハードウエア素子間の接続のより具体的な制約を考慮することが可能である。したがって、ルーティングは、FSM格子30上の導線の実際の制約を考えて適切な接続を作成するためにグローバルな位置付けによって決定されたハードウエア素子の一部の位置を調整し得る。
【0058】
いったんネットリストが位置付けされてルーティングされると、この位置付けされ、ルーティングされたネットリストは、FSM格子30を構成するための複数のビットに変換される。これら複数のビットは、本明細書ではイメージ(例えば、二値イメージ)と呼ばれる。
【0059】
ブロック124で、イメージはコンパイラ20によって公開される。イメージは、FSM格子30の特定のハードウエア素子を構成するための複数のビットを含む。これらのビットは、ソースコードによって記述された機能性を有するFSMをプログラムされたFSM格子30が実装するように、SME34、36、特殊目的素子58、および構成可能切り替え素子の状態を構成するために、FSM格子30上にロードすることが可能である。位置付け(ブロック120)およびルーティング(ブロック122)は、FSM格子30中の特定の位置にある特定のハードウエア素子をオートマトン中の特定の状態にマッピングすることが可能である。したがって、イメージ中のビットは、所望の機能(複数可)を実装するために、特定のハードウエア素子を構成することが可能である。ある例では、イメージは、機械コードをコンピュータ読み取り可能媒体に保存することによって公開することが可能である。別の例では、イメージは、イメージを表示デバイス上に表示することによって公開することが可能である。さらに別の例では、イメージは、イメージをFSM格子30中にロードするための構成用デバイスなどの別のデバイスに送出することによって公開することが可能である。さらに別の例では、イメージは、イメージをFSM格子(例えば、FSM格子30)上にロードすることによって公開することが可能である。
【0060】
ある例では、イメージは、イメージのビット値をSME34、36および他のハードウエア素子に直接的にロードしてまたはイメージを1つ以上のレジスタ中にロードし、次に、ビット値をレジスタからSME34、36および他のハードウエア素子に書き込むことによって、FSM格子30上にロードすることが可能である。ある例では、FSM格子30のハードウエア素子(例えば、SME34、36、特殊目的素子58、構成可能切り替え素子40、42、44)は、構成用デバイスおよび/またはコンピュータがイメージを、このイメージを1つ以上のメモリアドレスに書き込むことによって、FSM格子30上にロードすることが可能となるようにマッピングされたメモリである。
【0061】
本明細書に説明する方法の例は、少なくとも部分的に機械またはコンピュータに実装することが可能である。一部の例は、上記の例に説明したように方法を実施するために電子デバイスを構成するように動作可能な命令で符号化されたコンピュータ読み取り可能媒体または機械読み取り可能媒体を含みうる。このような方法の実装例は、マイクロコードなどのコード、アセンブリ言語コード、最高水準言語コードなどを含みうる。このようなコードは、様々な方法を実施するためのコンピュータ読み取り可能命令を含みうる。コードは、コンピュータプログラムプロダクトの部分を形成し得る。さらに、コードは、実行中または他の時間で、1つ以上の揮発性または不揮発性のコンピュータ読み取り可能媒体上に有形に記憶され得る。コンピュータ読み取り可能媒体は、これには限られないが、ハードディスク、取り外し可能磁気ディスク、取り外し可能光ディスク(例えば、コンパクトディスクおよびデジタルビデオディスク)、磁気カセット、メモリカードもしくはスティック、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)などを含み得る。
【0062】
ここで図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を含み得る。
【0063】
分析されるデータは、バスインターフェース130で受信されて、いくつかのバッファおよびバッファインターフェースを介してFSM格子30に提供され得る。図示する実施形態では、データ経路は、データバッファ132、命令バッファ133、処理バッファ134、ならびにランク間(IR)バスおよび処理バッファインターフェース136を含む。データバッファ132は、分析されるデータを受信して、一時的に記憶するように構成される。1つの実施形態では、2つのデータバッファ132(データバッファAおよびデータバッファB)が存在する。データは2つのデータバッファ132のうちの一方から排出されている間に、他方のデータバッファ132に記憶されて、FSM格子30によって分析される。バスインターフェース130は、分析されるデータを、データバッファ132が一杯になるまでデータバッファ132に提供するように構成され得る。データバッファ132が一杯になった後、バスインターフェース130は、他の目的のために自由に用いられるように(例えば、データバッファ132が分析されるさらなるデータを受信するように利用可能となるまで、データストリームからの他のデータを提供するように)構成され得る。図示する実施形態では、データバッファ132は、各々が32Kバイトであり得る。命令バッファ133は、分析されるデータに対応する命令および状態機械エンジン14を構成することに対応する命令などの命令を、バスインターフェース130を介してプロセッサ12から受信するように構成される。IRバスおよび処理バッファインターフェース136は、データを処理バッファ134に提供することを容易化し得る。IRバスおよび処理バッファインターフェース136は、データが順番にFSM格子30によって処理されることを保証するために用いることが可能である。IRバスおよび処理バッファインターフェース136は、データ、タイミングデータ、パッキング命令などの交換を、そのデータが受信されて正確に分析されるように調整し得る。一般的に、IRバスおよび処理バッファインターフェース136は、あるデバイスランクの複数のデバイスの使用を許容する。これらのデバイスランクの複数のデバイスは、これら複数のデバイスの全てが共有されるデータの全てを正しい順序で受信するようにデータを共有する。例えば、複数の物理的デバイス(例えば、状態機械エンジン14、チップ、個別のデバイス)は、ランクに分けて配列し得るし、また、データをIRバスおよび処理バッファインターフェース136を介して互いに対して提供し得る。この応用の目的のため、「ランク」という用語は、同じチップ選択物に接続された状態機械エンジン14の集合のことである。図示する実施形態では、IRバスおよび処理バッファインターフェース136は、8ビットのデータバスを含み得る。
【0064】
図示する実施形態では、状態機械エンジン14はまた、状態機械エンジン14におよびこれからデータを提供する際の支援として、デコンプレッサ138およびコンプレッサ140を含む。理解され得るように、コンプレッサ140およびデコンプレッサ138は、ソフトウエアおよび/またはハードウエアの設計を簡略化するために同じ圧縮アルゴリズムを用い得るが、しかしながら、コンプレッサ140およびデコンプレッサ138は、異なるアルゴリズムも用い得る。データを圧縮することによって、バスインターフェース130(例えば、DDR3バスインターフェース)を利用する時間が最小化され得る。本実施形態では、コンプレッサ140は、状態ベクトルデータ、構成データ(例えば、プログラミングデータ)、およびFSM格子30による分析後に得られた適合結果データを圧縮するために用いられ得る。1つの実施形態では、コンプレッサ140およびデコンプレッサ138は、コンプレッサ140およびデコンプレッサ138へおよび/から流れるデータが修正されない(例えば、圧縮も解凍もされない)ように、無効化され得る(例えば、オフされ得る)。
【0065】
コンプレッサ140およびデコンプレッサ138はまた、複数集合のデータを取り扱うように構成することが可能であり、各々の集合のデータは可変長であり得る。圧縮されたデータを「パディングする」して、各々の圧縮された領域がいつ終了するかに関するインジケータを含むことによって、コンプレッサ140は、状態機械エンジン14を介して全体的な処理速度を改善し得る。
【0066】
状態機械エンジン14は、状態ベクトルキャッシュメモリ142、状態ベクトルメモリバッファ144、状態ベクトル中間入力バッファ146、および状態ベクトル中間出力バッファ148を有する状態ベクトルシステム141を含む。状態ベクトルシステム141は、FSM格子30の複数の状態ベクトルを記憶し、状態ベクトルを状態機械エンジン14上にもしくはこれから離れるように移動させ、状態ベクトルをFSM格子30に提供してFSM格子30を、提供された状態ベクトルに対応する状態に復元させるために用いられ得る。例えば、各々の状態ベクトルは状態ベクトルキャッシュメモリ142中に一時的に記憶され得る。すなわち、各々のSME34、36の各々の状態が記憶され得るが、それにより、新しいデータ集合(例えば、検索項目)の分析のためにSME34、36を開放しながら、状態が復元され、後でさらなる分析で用いられ得る。一般的なキャッシュのように、状態ベクトルキャッシュメモリ142は、状態ベクトルを、例えば、ここではFSM格子30によって迅速に検索されて用いられるように記憶することを許容する。図示する実施形態では、状態ベクトルキャッシュメモリ142は、最大で512の状態ベクトルを記憶し得る。各々の状態ベクトルは、FSM格子30のSME34、36の状態(例えば、起動された状態または起動されていない状態)およびカウンタ58の動的な(例えば、現在の)カウント値を含み得る。
【0067】
理解されるように、状態ベクトルデータは、あるランクの異なる状態機械エンジン14(例えば、チップ)間で交換され得る。状態ベクトルデータは、FSM格子30のSME34、36の状態とカウンタ58の動的カウント値を同期化すること、複数の状態機械エンジン14全体にわたって同じ機能を実施すること、複数の状態機械エンジン14全体にわたって同じ結果を再現すること、複数の状態機械エンジン14全体にわたって結果をカスケードすること、複数の状態機械エンジン14を介してカスケードされたデータを分析するために用いられるSME34、36の状態およびカウンタ58の動的カウント値の履歴を記憶すること、などの様々な目的のために、異なる状態機械エンジン14の間で交換され得る。さらにそのうえ、状態機械エンジン14内で、状態ベクトルデータは状態ベクトルを迅速に復元するために用いられ得ることに留意すべきである。例えば、状態ベクトルデータは、SME34、36の状態およびカウンタ58の動的カウント値を(例えば、新しい検索項目を検索するために)初期状態に復元させること、SME34、36の状態およびカウンタ58の動的カウント値を(例えば、以前に検索された検索項目を検索するために)先行する状態に復元させること、およびSME34、36の状態およびカウンタ58の動的カウント値を(例えば、カスケード検索で検索項目を検索するために)カスケード構成用に構成されるように変更すること、のために用いられ得る。ある実施形態では、状態ベクトルデータは、(例えば、状態ベクトルデータの分析、修正を適用するための状態ベクトルデータの再構成、効率を改善するための状態ベクトルデータの再構成などのために)状態ベクトルデータがプロセッサ12に提供され得るように、バスインターフェース130に提供され得る。
【0068】
例えば、ある実施形態では、状態機械エンジン14は、キャッシュされた状態ベクトルデータ(例えば、状態ベクトルシステム141によって記憶されたデータ)をFSM格子30から外部デバイスに提供し得る。外部デバイスは、状態ベクトルデータを受信し、状態ベクトルデータを修正し、FSM格子30を復元させる(例えば、リセットする、初期化する)ために、修正された状態ベクトルデータを状態機械エンジン14に提供し得る。したがって、外部デバイスは、状態機械エンジン14が所望次第で状態をスキップする(例えば、ジャンプして回る)ように、状態ベクトルデータを修正し得る。
【0069】
状態ベクトルキャッシュメモリ142は、状態ベクトルデータを任意の適切なデバイスから受信し得る。例えば、状態ベクトルキャッシュメモリ142は、状態ベクトルを、FSM格子30、別のFSM格子30(例えば、IRバスおよび処理バッファインターフェース136を介して)、デコンプレッサ138などから受信し得る。図示する実施形態では、状態ベクトルキャッシュメモリ142は、状態ベクトルを、他のデバイスから状態ベクトルメモリバッファ144を介して受信し得る。さらにそのうえ、状態ベクトルキャッシュメモリ142は、状態ベクトルデータを任意の適切なデバイスに提供し得る。例えば、状態ベクトルキャッシュメモリ142は、状態ベクトルデータを、状態ベクトルメモリバッファ144、状態ベクトル中間入力バッファ146、および状態ベクトル中間出力バッファ148に提供し得る。
【0070】
状態ベクトルメモリバッファ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に、状態ベクトルデータを提供するために用いられ得る。
【0071】
同様に、状態ベクトル中間入力バッファ146は、状態ベクトルデータを任意の適切なデバイスから受信すること、および状態ベクトルデータを任意の適切なデバイスに提供することのために用いられ得る。例えば、状態ベクトル中間入力バッファ146は、FSM格子30(例えば、IRバスおよび処理バッファインターフェース136を介して)、デコンプレッサ138、および状態ベクトルキャッシュメモリ142から状態ベクトルを受信するために用いられ得る。別の例として、状態ベクトル中間入力バッファ146は、状態ベクトルをFSM格子30に提供するために用いられ得る。さらにそのうえ、状態ベクトル中間出力バッファ148は、状態ベクトルを任意の適切なデバイスから受信することおよび状態ベクトルを任意の適切なデバイスに提供することのために用いられ得る。例えば、状態ベクトル中間出力バッファ148は、FSM格子30および状態ベクトルキャッシュメモリ142から状態ベクトルを受信するために用いられ得る。別の例として、状態ベクトル中間出力バッファ148は、FSM格子30(例えば、IRバスおよび処理バッファインターフェース136を介して)、およびコンプレッサ140に状態ベクトルを提供するために用いられ得る。
【0072】
いったん目的とする結果がFSM格子30によって生成されると、適合結果は、適合結果メモリ150に記憶され得る。すなわち、適合(例えば、目的とするパターンの検出)を示す「適合ベクトル」は、適合結果メモリ150に記憶され得る。適合結果は、次に、例えば、バスインターフェース130を介してプロセッサ12に伝達されるように、適合バッファ152に送出することが可能である。以前に説明したように、適合結果は圧縮され得る。
【0073】
さらなるレジスタおよびバッファは、状態機械エンジン14でも提供され得る。例えば、状態機械エンジン14は、制御およびステータスレジスタ154を含み得る。加えて、復元およびプログラムバッファ156は、初期にFSM格子30のSME34、36を構成し、分析中にFSM格子30中のSME34、36の状態を復元させる際に用いられるように提供され得る。同様に、保存および修復マップバッファ158もまた、セットアップおよび使用目的の保存および修復マップを記憶するために提供され得る。
【0074】
図10は、デバイスのランクに配列された例としての複数の物理的状態機械エンジン14を示す。以前に説明したように、分析されるデータは、バスインターフェース130で受信される。バスインターフェース130は、各々の状態機械エンジン14(例えば、F0、F1、F2、F3、F4、F5、F6、F7)のデータバッファ132および命令バッファ133を含むデータバッファシステム159にデータを方向付ける。データバッファ132は、分析されるデータを受信して一時的に記憶するように構成される。図示する実施形態では、各々の状態機械エンジン14中に2つのデータバッファ132(例えば、データバッファAおよびデータバッファB)が存在する。データは2つのデータバッファ132のうちの一方から排出されている間に、他方のデータバッファ132に記憶されて、FSM格子30によって分析され得る。以前に説明したように、命令バッファ133は、分析されるデータに対応する命令などの命令を、バスインターフェース130を介してプロセッサ12から受信するように構成される。データバッファシステム159から、分析されるデータと、このデータに対応する命令とは、IRバスおよび処理バッファインターフェース136を介して、FSM格子30(例えば、Fa、Fb、Fc、Fd、Fe、Ff、Fg、Fh)のうちの1つ以上に対して提供される。本実施形態では、物理的FSM格子30は、論理群に配列される。具体的には、FgおよびFhは論理群A162に配列され、FeおよびFfは論理群B164に配列され、FcおよびFdは論理群C166に配列され、FaおよびFbは論理群D168に配列される。さらにそのうえ、理解されるように、データは、FSM格子30と別のデバイス(例えば、FSM格子30)との間で、IRバスおよび処理バッファインターフェース136を介して交換され得る。例えば、IRバスおよび処理バッファインターフェース136は、FSM格子30の任意のものの間でデータを交換するために用いられ得る。8個の状態機械エンジン14が図示されているが、デバイスのランクは、任意の適切な数(例えば、1、2、4、8など)の状態機械エンジン14を有し得る。理解されるように、IRバスおよび処理バッファインターフェース136は、(例えば、データバッファシステム159およびFSM格子30から)データを受信するための入力部を含み得る。同様に、IRバスおよび処理バッファインターフェース136は、(例えば、FSM格子30に)データを送出するための出力部を含み得る。
【0075】
バスインターフェース130は、分析されるデータを、そのデータが効率的に使用されるように調整された形式で受信し得る。具体的には、図11〜14は、どのようにしてデータがプロセッサ12によって、バスインターフェース130を介して状態機械エンジン14に提供されるデータブロック中に割り当てられる(例えば、グループ分けされる)かの例を示す。さらにそのうえ、図15〜17は、どのようにしてデータブロックが、状態機械エンジン14のデータバッファシステム159を介して受信され、記憶され、提供され得るかの例を示す。図18は、どのようにしてデータブロックが論理群162、164、166、および168によって受信され得るかを示す。
【0076】
ここで、図11を参照すると、状態機械エンジン14に提供されるデータブロック中にプロセッサ12によって割り当てられたデータセグメント(例えば、データ集合、検索項目)の例が図示されている。本実施形態では、複数のデータセグメントが単一のデータブロック中に割り当てられる。各々のデータブロックは、FSM格子30(例えば、状態機械エンジン14のランクの1つ以上の状態機械エンジン14)の単一の論理群によって分析されるように割り当てられる。例えば、データストリーム170(例えば、プロセッサ12によって状態機械エンジン14に送出される多量のデータ)は、論理群A162向けと意図されるデータに対応する第1のデータブロック172と、論理群B164向けと意図されるデータに対応する第2のデータブロック174と、論理群C166向けと意図されるデータに対応する第3のデータブロック176と、論理群D168向けと意図されるデータに対応する第4のデータブロック178と、の中にプロセッサ12によって割り当てられる。具体的には、データストリーム170は、プロセッサ12によって、データセグメント180、182、184、186、188、190、192、194、196、198、および200に分割される。理解されるように、データセグメント180、182、184、186、188、190、192、194、196、198、および200の各々は、FSM格子30によって分析されるように設定されたデータ集合を表し得る。理解されるように、プロセッサ12は、データセグメント180、182、184、186、188、190、192、194、196、198、および200を、何らかの適切な理由によって、データブロック172、174、176、および178に割り当て得る。例えば、プロセッサ12は、データ集合を効率的に処理するために、各々のデータ集合の長さおよび/またはデータ集合が分析される順序に基づいて、データセグメントをあるデータブロックに割り当て得る。
【0077】
データセグメント180、182、184、186、188、190、192、194、196、198、および200は、なんらかの適切な仕方を用いて、データブロック172、174、176、および178に割り当てられ得る。例えば、データセグメント180、182、184、186、188、190、192、194、196、198、および200は、データブロック172、174、176、および178中のバイト数が最小化されるように、データブロック172、174、176、および178中に割り当てられ得る。別の例として、データセグメント180、182、184、186、188、190、192、194、196、198、および200は、あるデータセグメントが一緒にグループ化されるように、データブロック172、174、176、および178中に割り当てられ得る。
【0078】
図示するように、第1のデータブロック172は、データセグメントA180、データセグメントF190、およびデータセグメントI196を含む。第2のデータブロック174は、データセグメントB182およびデータセグメントK200を含む。さらにそのうえ、第3のデータブロック176は、データセグメントC184、データセグメントE188、およびデータセグメントG192を含む。第4のデータブロック178は、データセグメントD186、データセグメントH194、およびデータセグメントJ198を含む。
【0079】
理解されるように、データブロックを効率的に処理するために、データブロックは全て、等しい量のデータを有し得る。さらにそのうえ、データブロック内のデータセグメントは、処理するデバイスが、データセグメントがいつ開始して停止するかを判定することが可能であるように、データブロック内の所定の間隔(例えば、バイト、語)で開始および/または停止し得る。しかしながら、データセグメントは、所定の間隔で開始および/または停止するための正確な量のデータを有していなくてもよい。したがって、データパディングが、データが所定の間隔で、データブロック内で開始および/または停止するように、あるデータセグメントの間に挿入され得る。加えて、データパディングは、全てのデータブロックが等しい量のデータを有するように、データブロックの最後に追加され得る。
【0080】
ここで図12を参照すると、図11のデータブロック172、174、176、および178のデータセグメントの間に挿入されるデータパディングの例が図示されている。例えば、第1のデータブロック172中で、データパディング202は、データセグメントA180とデータセグメントF190との間に挿入され得る。さらに、データパディング204は、データセグメントF190とデータセグメントI196との間に挿入され得る。別の例として、第2のデータブロック174中で、データパディング206は、データセグメントB182とデータセグメントK200との間に挿入され得る。第3のデータブロック176中で、データパディング208は、データセグメントC184とデータセグメントE188との間に挿入され得る。同様に、データパディング210は、データセグメントE188とデータセグメントG192との間に挿入され得る。別の例として、第4のデータブロック178中で、データパディング212は、データセグメントD186とデータセグメントH194との間に挿入され得る。加えて、データパディング214は、データセグメントH194とデータセグメントJ198との間に挿入され得る。
【0081】
データパディング202、204、206、208、210、212、および214は、分析されないずれかの適切なバイト数のデータ(例えば、無効データ、ジャンクデータ、フィラーデータ、ゴミデータなど)を含み得る。1つの実施形態では、データパディングとして用いられるバイト数は、先行するデータセグメントのバイト数に加算されたときに、全体の語境界に到達するバイト数(すなわち、先行するデータセグメントのバイト数にデータパディングとして用いられるバイト数を加算した数が全体の語境界によって等分されるバイト数)であり得る。例えば、データパディング202のバイト数は、データパディング202とデータセグメントA180(すなわち、先行するデータセグメント)との合計バイト数が全体の語境界によって等分されるような(例えば、剰余のない)数であり得る。図示する実施形態では、全体語境界は8バイトであり得る。他の実施形態では、全体語境界は、いずれかの適切なバイト数またはビット数であり得る。したがって、図示する実施形態では、データセグメントA180が63バイトのデータを含むことになっている場合、データパディング202は、(例えば64は8バイトによって等分されるので、データセグメントA180とデータパディング202との間に計で64バイトのデータを作成するために)1バイトのデータを含む。別の例として、データセグメントA180が60バイト(例えば、8で等分されない)のデータを含んだ場合、データパディング202は、4バイトのデータを含む。さらなる例として、データセグメントA180が64バイトのデータを含んだ場合、データパディング202は、ゼロバイトのデータを含む、すなわち、言い換えれば、データパディング202は、データセグメントA180とデータセグメントF190との間では必要とされない。理解されるように、各々のデータパディング202、204、206、208、210、212、および214は、類似の仕方で動作し得る。
【0082】
ここで図13を参照すると、図12のデータブロック172、174、176、および178のデータセグメントの後に挿入されたデータパディングの例が図示されている。具体的には、データパディングは、各々のデータブロック172、174、176、および178中のバイトの数を等しくするために、必要に応じて各々のデータブロック172、174、176、および178の最後に挿入され得る。さらにそのうえ、各々のデータブロック172、174、176、および178の最後のところのデータパディングは、各々のデータブロック172、174、176、および178が以前に説明したように全体語境界に到達するように用いられ得る。図示する実施形態では、データパディング216はデータセグメントI196の後に挿入され、データパディング218はデータセグメントG192の後に挿入され、データパディング220はデータセグメントJ198の後に挿入される。したがって、データブロック172、174、176、および178の各々は、等しい数のバイトを含み、データブロック172、174、176、および178の各々は、全体語境界に到達する。
【0083】
FSM格子30がデータパディングを有効なデータから区別することは困難であり得る。したがって、有効なデータの分析中に、データパディングがFSM格子30によって特定されて無視されるように、命令はデータブロック172、174、176、および178に付随し得る。このような命令は、バスインターフェース130を介してプロセッサ12によって状態機械エンジン14に送出され得るし、状態機械エンジン14の命令バッファ160によって受信、記憶、および提供され得る。命令を生成するために、プロセッサ12は、データストリーム170を領域222、224、226、228、230、232、234、および236に論理的に分割し得る。領域222、224、226、228、230、232、234、および236の末端境界は、いずれかのデータパディングが終了するときに各々の領域が終了するように形成され得る。例えば、第1の領域222は、データパディング208が終了するときに終了する。別の例として、第5の領域230は、データパディング204が終了するときに終了する。
【0084】
データブロック172、174、176、および178に付随する命令は、各々の領域222、224、226、228、230、232、234、および236のバイト数と、各々の領域内の各々のデータブロック172、174、176、および178の有効なバイト数(例えば、バイトパディングを除いたバイト数)とを含み得る。例えば、命令は、第1の領域222に対応するバイト数238と、第1の領域222内の第1のデータブロック172の有効なバイトに対応するバイト数240と、第1の領域222内の第2のデータブロック174の有効なバイトに対応するバイト数242と、第1の領域222内の第3のデータブロック176の有効なバイトに対応するバイト数244と、第1の領域222内の第4のデータブロック178の有効なバイトに対応するバイト数246と、を含み得る。
【0085】
同様に、命令は、第2の領域224に対応するバイト数248、250、252、254、および256と、第3の領域226に対応するバイト数258、260、262、264、および266と、第4の領域228に対応するバイト数268、270、272、274、および276と、第5の領域230に対応するバイト数278、280、282、284、および286と、第6の領域232に対応するバイト数288、290、292、294、および296と、第7の領域234に対応するバイト数298、302、304、および306と、第8の領域236に対応するバイト数308、312、314、および316と、を含み得る。したがって、命令を用いて、FSM格子30は、データセグメントと共に挿入されたデータパディングを特定し得る。1つの具体的なタイプの命令を本明細書に提示したが、データブロック172、174、176、および178の群と共に含まれる命令は、FSM格子30が、有効なデータをデータパディング(すなわち、無効なデータ)から区別することを可能とするいずれかの適切な命令の群であり得ることに留意すべきである。
【0086】
ここで図14を参照すると、状態機械エンジン14のデータバッファシステム159に伝達するようにプロセッサ12によって組織化された図13のデータブロック172、174、176、および178の例が図示されている。データブロック172、174、176、および178の各々は、データの行が全体語長に等しいバイト数318を有するように配列される。図示する実施形態では、全体語長は、状態機械エンジン14(例えば、F0、F1、F2、F3、F4、F5、F6、およびF7)の各々に対して、バイトで表わして8バイトである。データセグメントの各々からの最初のバイトは、各々のデータブロック172、174、176、および178の右側から始まり、各々のデータブロックの左側に向かって増加し、それにより、データセグメントA180の第1のバイトが列F0中にあり、データセグメントA180の第8のバイトが列F7中にあるようにする。理解されるように、列F0は、F0という状態機械エンジン14のデータバッファ132中に最初に記憶されるデータを表し、列F1は、F1という状態機械エンジン14のデータバッファ132中に最初に記憶されるデータを表し、となる。さらにそのうえ、データセグメントは、上から下に向かって行中に置かれる。図示するように、データセグメントとデータパディングとの各々の組み合わせは、列F7で終了する(すなわち、それらは各々が、全体語長にまで延在する)。さらにそのうえ、各々のデータブロック172、174、176、および178は、サイズが等しい。理解されるように、動作中は、データブロック172、174、176、および178は、プロセッサ12から状態機械エンジン14に連続的に提供され得る。
【0087】
データブロック172、174、176、および178からのデータは、論理群162、164、166、および168向けに意図されるデータがデータバッファシステム159中で混ざり合い、それにより各々の論理群162、164、166、および168向けに意図されるデータの一部分が各々の状態機械エンジン14(例えば、F0、F1、F2、F3、F4、F5、F6、およびF7)内で混ざり合うように、配列される。データは、この様式で受信および記憶され、データがバスインターフェース130を介してデータバッファシステム159に迅速に提供されることを可能にし得る。ある実施形態では、データバッファシステム159のデータバッファ132は、バスインターフェース130からのデータを(例えば、所定の間隔で)ラッチするように構成され得る。他の実施形態では、データバッファシステム159のデータバッファ132は、データバッファ132とバスインターフェース130との間の接続に基づいてデータの限られた部分を受信し得る。以下に詳述するように、混ざり合わされたデータは、データがIRバスおよび処理バッファインターフェース136を介してデータバッファシステム159から処理バッファ134に提供されたときに分類される。
【0088】
ここで図15に目を転じると、状態機械エンジン14によって受信されているデータブロック172、174、176、および178の例が図示されている。具体的には、データバッファシステム159は第1のデータブロック172を受信して、その後に第2のデータブロック174、第3のデータブロック176、および第4のデータブロック178を受信する。上述したように、データブロック172、174、176、および178の各々は、特定の論理群162、164、166、および168によって分析されるように、プロセッサ12によって割り当てられ得る。データバッファシステム159がデータブロック172、174、176、および178を受信するとき、データバッファシステム159は、データブロック172、174、176、および178からのデータを体系的な様式でバッファ中に記憶し、それにより、データがデータバッファシステム159からFSM格子162、164、166、および168に正確に提供されるようにする。
【0089】
したがって、図16は、図15のデータブロック172、174、176、および178がどのようにして状態機械エンジン14のデータバッファシステム159中に記憶されるかの例を示す。特に、第1のデータブロック172からのデータは、第1のバッファ行と、その後の4つ目毎の行(例えば、行5、9、13、17など)とに記憶される。同様に、第2のデータブロック174からのデータは、第2のバッファ行と、その後の4つ目毎の行(例えば、行6、10、14、18など)とに記憶される。さらに、第3のデータブロック176からのデータは、第3のバッファ行と、その後の4つ目毎の行(例えば、行7、11、15、19など)とに記憶される。加えて、第4のデータブロック178からのデータは、第4のバッファ行と、その後の4つ目毎の行(例えば、行8、12、16、20など)とに記憶される。一部の状態機械エンジン14は、4つのFSM格子162、164、166、および168よりも少ないまたは多い格子を含み得ることに留意すべきである。したがって、他の実施形態では、データバッファシステム159は、データブロックからのデータを別の様式で記憶するように構成され得る。例えば、8個のFSM格子を持つ状態機械エンジン14では、各々のFSM格子用のデータブロックは、バッファの1つの行と、その後の8つ目毎の行とに記憶されたデータを有し得る。
【0090】
ここで図17を参照すると、データバッファシステム159から複数のFSM格子に提供されるデータの例が図示されている。具体的には、データはデータバッファシステム159から取り出されて、IRバスおよび処理バッファインターフェース136にデータバーストで提供される。(全体の語中のバイト数318が8バイトである)1つの実施形態では、1つのIRバスサイクルを完了させるのに、8つのデータバーストを用いる。具体的には、第1のデータバースト320において、列F0からの4バイト(例えば、各々のデータブロック172、174、176、および178からの1バイトずつ)を、IRバスおよび処理バッファインターフェース136に提供する。同様に、第2のデータバースト322では、列F1からの4バイト(例えば、各々のデータブロック172、174、176、および178からの1バイトずつ)を、IRバスおよび処理バッファインターフェース136に提供する。第3のデータバースト324では、列F2からの4バイト(例えば、各々のデータブロック172、174、176、および178からの1バイトずつ)を、IRバスおよび処理バッファインターフェース136に提供する。さらに、第4のデータバースト326では、列F3からの4バイト(例えば、各々のデータブロック172、174、176、および178からの1バイトずつ)を、IRバスおよび処理バッファインターフェース136に提供する。第5のデータバースト328では、列F4からの4バイト(例えば、各々のデータブロック172、174、176、および178からの1バイトずつ)を、IRバスおよび処理バッファインターフェース136に提供する。同様に、第6のデータバースト330では、列F5からの4バイト(例えば、各々のデータブロック172、174、176、および178からの1バイトずつ)を、IRバスおよび処理バッファインターフェース136に提供する。第7のデータバースト332では、列F6からの4バイト(例えば、各々のデータブロック172、174、176、および178からの1バイトずつ)を、IRバスおよび処理バッファインターフェース136に提供する。さらに、第8のデータバースト334では、列F7からの4バイト(例えば、各々のデータブロック172、174、176、および178からの1バイトずつ)を、IRバスおよび処理バッファインターフェース136に提供する。したがって、データは、データバッファシステム159から取り出されてIRバスおよび処理バッファインターフェース136に、データバーストを用いて体系的な内容で提供される。
【0091】
図18に目を転じると、データバースト320、322、324、326、328、330、332、および334の複数の論理群162、164、166、および168中へのデータ提供の例が図示されている。具体的には、図示する実施形態では、論理群A162(例えば、Fg、Fh)の処理バッファ134は、IRバスおよび処理バッファインターフェース136上に提供された各々のデータバースト320、322、324、326、328、330、332、および334の第1のバイトをラッチするように構成され得る。同様に、論理群B164(例えば、Fe、Ff)の処理バッファ134は、IRバスおよび処理バッファインターフェース136上に提供された各々のデータバースト320、322、324、326、328、330、332、および334の第2のバイトをラッチするように構成され得る。加えて、論理群C166(例えば、Fc、Fd)の処理バッファ134は、IRバスおよび処理バッファインターフェース136上に提供された各々のデータバースト320、322、324、326、328、330、332、および334の第3のバイトをラッチするように構成され得る。論理群D168(例えば、Fa、Fb)の処理バッファ134は、IRバスおよび処理バッファインターフェース136上に提供された各々のデータバースト320、322、324、326、328、330、332、および334の第4のバイトをラッチするように構成され得る。
【0092】
理解されるように、論理群162、164、166、および168の処理バッファ134は、IRバスおよび処理バッファインターフェース136上に提供された任意のバイトまたはバイトの組み合わせをラッチするように構成され得る。さらに、処理バッファAおよび処理バッファBは、同じまたは異なるバイトをラッチするように構成され得る。1つの実施形態では、状態機械エンジン14は、2つよりも少ないまたは多い処理バッファ134を含み得る。このような実施形態では、各々の処理バッファ134は、IRバスおよび処理バッファインターフェース136上に提供された特定のバイト(例えば、バースト)をラッチするように構成され得る。論理群162、164、166、および168の処理バッファ134はまた、データバーストに付随する命令をデータバッファシステム159から受信するように構成され得る。命令を用いて、論理群162、164、166、および168の処理バッファ134は、データ領域中のバイトの総数とそのデータ領域中の有効なバイトの総数との間の差に対応するデータを無視し得る。
【0093】
本発明は様々な修正および代替の形態の影響を受け得るとはいえ、特定の実施形態を図面中で例として示し、本明細書中で詳細に説明した。しかしながら、本発明は開示する特定の形態に制限されることを意図するものではないことを理解すべきである。むしろ、本発明は、次の添付クレームによって定義される本発明の精神および範囲内の全ての修正例、等価例、および代替例を範囲に収めるものである。
図6
図15
図16
図1
図2
図3
図4
図5
図7
図8
図9
図10
図11
図12
図13
図14
図17
図18