【文献】
阿部 茂樹,故障の検出および回復が可能なFPGAアーキテクチャ,電子情報通信学会技術研究報告,日本,社団法人電子情報通信学会,2000年 4月28日,第100巻,第30号,pp.1-8
(58)【調査した分野】(Int.Cl.,DB名)
前記状態機械ラティスの外部にあり、前記バスインターフェースを介して追加の解析データを受信するように構成される追加のデータバッファを更に備え、前記解析データは前記追加のデータバッファには受信されず、前記追加の解析データは前記データバッファには受信されないように構成させる、請求項1に記載の状態機械エンジン。
前記外部デバイスが、前記修復マップバッファから提供される修復マップデータを受信し、前記修復マップデータを解析し、設定データの修正版を構築し、前記設定データの修正版を前記プログラムバッファに提供するように構成される、請求項1に記載の状態機械エンジン。
【発明を実施するための形態】
【0006】
ここで図面を参照すると、
図1は、参照数字10で概して示される、プロセッサベースのシステムの実施形態を示している。システム10(例えば、データ解析システム)は、デスクトップコンピュータ、ノートパソコン、ポケットベル、携帯電話、個人用端末(personal organizer)、携帯音楽プレーヤ、制御回路、カメラなどの様々なタイプのいずれであってもよい。システム10はまた、ルータ、サーバ、またはクライアント(例えば、先述のタイプのコンピュータのうちの1つ)などのネットワークノードであってもよい。システム10は、コピー機、スキャナ、プリンタ、ゲーム機、テレビ、セットトップビデオ分配または録画システム、ケーブルテレビ用チューナ、パーソナルデジタルメディアプレーヤ、工場自動化システム、自動車用コンピュータシステムまたは医療機器などの何らかのその他の種類の電子デバイスであってもよい。(これらの種々のシステムの例を記述するために使用される用語は、本明細書で使用されるその他の多くの用語と同様に、いくつかの指示対象を共有する場合があり、そのため、列挙されたその他の項目によって、狭く解釈されるべきではない。)
【0007】
システム10などの典型的なプロセッサベースのデバイスでは、マイクロプロセッサなどのプロセッサ12が、システム10におけるシステム機能および要求の処理を制御する。さらに、プロセッサ12は、システム制御を分担する複数のプロセッサを備え得る。プロセッサ12は、システム10における要素のそれぞれに、直接的または間接的に接続されて、プロセッサ12が、システム10内またはシステム10の外部に記憶され得る命令を実行することによってシステム10を制御するようにし得る。
【0008】
本明細書に説明される実施形態によれば、システム10は、状態機械エンジン14を含み、これは、プロセッサ12の制御下で動作し得る。本明細書で用いる場合、状態機械エンジン14は、単一のデバイス(例えば、シングルチップ)を指す。状態機械エンジン14は、任意のオートマトン理論を用い得る。例えば、状態機械エンジン14は、限定されるものではないが、ミーリ型アーキテクチャ、ムーア型アーキテクチャ、有限状態機械(FSM)、決定性FSM(DFSM)、ビットパラレル状態機械(BPSM)などを含む、いくつかの状態機械アーキテクチャのうちの1つを用い得る。様々なアーキテクチャが用いられ得るが、説明の目的のために、本出願はFSMについて言及する。しかしながら、当業者であれば、説明される技法は、様々な状態機械アーキテクチャのうちのどれを用いても利用され得ることを理解するであろう。
【0009】
以下に詳述するように、状態機械エンジン14は、いくつかの(例えば、1つまたは2つ以上の)有限状態機械(FSM)ラティス(例えば、チップのコア)を含み得る。本出願の目的上、「ラティス」の語は、要素(例えば、ブールセル、カウンタセル、状態機械要素、状態遷移要素)の組織化されたフレームワーク(例えば、ルーティングマトリクス、ルーティングネットワーク、フレーム)を指す。さらに、「ラティス」は、任意の好適な形、構造、または階層構成(例えば、グリッド、キューブ、球、カスケード接続)を有し得る。各FSMラティスは、複数のFSMを実装し得、複数のFSMのそれぞれは、同じデータを並行して受信し、解析する。さらに、FSMラティスは、グループ(例えば、クラスタ)として構成され得て、FSMラティスのクラスタは、同じ入力データを並行して解析し得る。さらに、状態機械エンジン14のFSMラティスのクラスタは、階層構造として構成され得、階層構造の下位レベルにある状態機械ラティスからの出力が、上位レベルにある状態機械ラティスへの入力として用いられ得る。状態機械エンジン14のFSMラティスのクラスタを、階層構造にわたって直列にカスケード接続することによって、益々複雑なパターンを解析(例えば、評価、検索など)し得る。
【0010】
さらに、状態機械エンジン14の階層的並列構成に基づいて、状態機械エンジン14は、高い処理速度を利用するシステムにおける複雑なデータ解析(例えば、パターン認識)のために使用され得る。例えば、本明細書に説明される実施形態は、処理速度が1Gバイト/秒であるシステムに組み込まれ得る。したがって、状態機械エンジン14を利用して、高速メモリデバイスまたはその他の外部デバイスからのデータを迅速に解析し得る。状態機械エンジン14は、いくつかの基準(例えば、検索ターム)にしたがって、ほぼ同時、例えば、単一デバイスサイクルの間、データストリームを解析し得る。状態機械エンジン14のあるレベルにあるFSMのクラスタ内のFSMラティスのそれぞれは、ほぼ同時にデータストリームから検索タームをそれぞれ受信し得、並列FSMラティスのそれぞれは、そのタームが、状態機械エンジン14を処理基準における次の状態に進めるかどうかを判定し得る。状態機械エンジン14は、例えば、100を越える、110を越える、または10000を越える比較的多数の基準にしたがってタームを解析し得る。それらが並列に動作することから、それらは、データストリームを遅延させることなく、比較的高帯域幅を有するデータストリーム、例えば、1Gバイト/秒より大きいかほぼ等しいデータストリームに対して基準を適用し得る。
【0011】
一実施形態では、状態機械エンジン14は、データストリームにおいて多数のパターンを認識(例えば、検出)するように構成され得る。例えば、状態機械エンジン14は、ユーザまたはその他のエンティティが解析を望む様々なタイプのデータストリームのうちの1つまたは2つ以上においてパターンを検出するために利用され得る。例えば、状態機械エンジン14は、インターネットを介して受信されるパケット、またはセルラーネットワークを介して受信される音声もしくはデータなどのネットワークを介して受信されるデータのストリームを解析するように構成され得る。一例では、状態機械エンジン14は、データストリームにおいてスパムまたはマルウェアを解析するように構成され得る。データストリームは、シリアルデータストリームとして受信され、ここでデータは、時間的、語彙的、または意味的に重要視される順序などの、意味のある順序で受信される。あるいは、データストリームは、並列もしくはバラバラの順序で受信され得、その後、例えば、インターネットを介して受信されるパケットを順序づけることによって、シリアルデータストリームへと変換される。一部の実施形態では、データストリームは、タームをシリアルに提示し得るが、タームのそれぞれを表すビットはパラレルに受信され得る。データストリームは、システム10の外部にあるソースから受信され得る、またはメモリ16などのメモリデバイスに問い合わせし、かつメモリ16に記憶されているデータからデータストリームを形成することによって、形成され得る。その他の例では、状態機械エンジン14は、特定の単語を綴る文字シーケンス、遺伝子を特定する遺伝子塩基対配列、画像の一部を形成する画像ファイルもしくはビデオファイルにおけるビットのシーケンス、プログラムの一部を形成する実行可能ファイルにおけるビットのシーケンス、または歌もしくは話された言葉の一部を形成するオーディオファイルにおけるビットのシーケンスを認識するように構成され得る。データのストリームは、バイナリフォーマットまたは例えば、10進数、ASCIIなどのその他のフォーマットの複数ビットのデータを含み得る。ストリームは、一桁または複数桁で、例えば、いくつかの2進数でデータを符号化し得る。
【0012】
理解されるように、システム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つまたは2つ以上のメモリデバイスを含み得、これは、状態機械エンジン14によって解析されるデータを提供し得る。本明細書で用いる場合、「提供する」の語は、一般的に、向ける、入力する、挿入する、送る、転送する、送信する、生成する、与える、出力する、配置する、書き込むなどを指し得る。このようなデバイスは、ソリッドステートドライブ(SSD)、マルチメディアメディアカード(MMC)、セキュアデジタル(SD)カード、コンパクトフラッシュ(CF)カード、または任意のその他の好適なデバイスと呼ばれ得る、あるいはこれを含み得る。さらに、このようなデバイスは、ユニバーサルシリアルバス(USB)、ペリフェラルコンポーネントインターコネクト(PCI)、PCIエクスプレス(PCI−E)、スモールコンピュータシステムインターフェース(SCSI)、IEEE1394(ファイアーワイヤ)、または任意のその他の好適なインターフェースなどの任意の好適なインターフェースを介してシステム10に接続され得ることを理解されたい。フラッシュメモリデバイスなどのメモリ16の動作を助けるために、システム10は、メモリコントローラ(図示せず)を含み得る。理解されるように、メモリコントローラは、独立のデバイスであり得る、またはプロセッサ12と一体であり得る。加えて、システム10は、磁気記憶装置などの外部記憶装置18を含み得る。外部記憶装置は、入力データを状態機械エンジン14に提供し得る。
【0013】
システム10は、いくつかの追加的な要素を含み得る。例えば、コンパイラ20は、
図8に関連して詳述するように、状態機械エンジン14を設定(例えば、プログラム)するために用いられ得る。入力デバイス22もまたプロセッサ12に接続されて、ユーザがデータをシステム10内に入力できるようにし得る。例えば、入力デバイス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】
設定可能な要素は、多くの異なる機能を実装するように設定(例えば、プログラム)され得る。例えば、設定可能な要素は、状態機械要素(SME)34、36(
図5に示す)を含み得、これは、階層性を持って行38(
図3および
図4に示す)およびブロック32(
図2および
図3に示す)に組織化されている。SMEはまた、状態遷移要素(STE)とみなされ得る。階層性を持って組織化されたSME34、36の間において信号をルーティングするために、ブロック間スイッチング要素40(
図2および
図3に示す)、ブロック内スイッチング要素42(
図3および
図4に示す)、および行内スイッチング要素44(
図4に示す)を含む、設定可能なスイッチング要素の階層構造が用いられ得る。
【0016】
後述するように、スイッチング要素は、ルーティング構造と、バッファとを含み得る。SME34、36は、FSMラティス30によって実装されたFSMの状態に対応し得る。SME34、36は、後述のように、設定可能なスイッチング要素を用いて互いに接続され得る。したがって、状態の関数に対応するようにSME34、36を設定することによって、またFSMにおける状態間の遷移に対応するようにSME34、36を互いに選択的に接続することによって、FSMは、FSMラティス30に実装され得る。
【0017】
図2は、FSMラティス30の例の全体図を示している。FSMラティス30は、複数のブロック32を含み、これは、設定可能なブロック間スイッチング要素40と、互いに選択的に接続され得る。ブロック間スイッチング要素40は、導体46(例えば、ワイヤ、線など)と、バッファ48および50とを含み得る。一例では、バッファ48および50が含まれているのは、接続と、ブロック間スイッチング要素40との間における信号のタイミングとを制御するためである。以下に詳述するように、バッファ48は、ブロック32間で送信されるデータをバッファリングするために提供され得、他方、バッファ50は、ブロック間スイッチング要素40間で送信されるデータをバッファリングするために提供され得る。加えて、ブロック32は、信号(例えば、データ)を受信し、データをブロック32に提供するための入力ブロック52(例えば、データ入力ポート)に選択的に接続され得る。ブロック32はまた、信号をブロック32から外部デバイス(例えば、別のFSMラティス30)に提供するための出力ブロック54(例えば、出力ポート)に選択的に接続され得る。FSMラティス30はまた、プログラミングインターフェース56を含んで、FSMラティス30を(例えば、画像、プログラムを介して)設定し得る。画像は、SME34、36の状態を設定(例えば、セット)し得る。つまり、画像は、SME34、36を設定して、入力ブロック52における所与の入力に対して特定の方法で反応し得る。例えば、SME34、36は、入力ブロック52で文字「a」を受信した場合、ハイ(high)信号を出力するようにセットされ得る。
【0018】
一例では、入力ブロック52、出力ブロック54、および/またはプログラミングインターフェース56は、レジスタとして実装されて、レジスタへの書き込みまたはレジスタからの読み出しが、それぞれの要素にデータを提供する、またはそれぞれの要素からデータを提供するようにし得る。このようにして、プログラミングインターフェース56に対応するレジスタに記憶された画像からのビットは、SME34、36にロードされ得る。
図2では、ブロック32、入力ブロック52、出力ブロック54、およびブロック間スイッチング要素40の間において特定数の導体(例えば、ワイヤ、線)が示されているが、その他の例では、より少数、またはより多数の導体が用いられ得ることを理解されたい。
【0019】
図3は、ブロック32の例を示している。ブロック32は、複数の行38を含み、これは、設定可能なブロック内スイッチング要素42と、互いに選択的に接続され得る。加えて、行38は、ブロック間スイッチング要素40により、別のブロック32内の別の行38と選択的に接続され得る。行38は、要素の対として組織された複数のSME34、36を含み、要素の対は、本明細書において、2つの要素からなる組(groups of two),(GOT)60と呼ぶ。一例では、ブロック32は、16の行38を備える。
【0020】
図4は、行38の例を示している。GOT60は、設定可能な行内スイッチング要素44によって、その他のGOT60および行38内の任意のその他の要素(例えば、特定目的要素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つまたは2つ以上の行相互接続導体68、70に接続され得、出力66は、1つまたは2つ以上の行相互接続導体68、70に接続され得る。一例では、第1の複数の行相互接続導体68は、行38内の各GOT60の各SME34、36に接続され得る。第2の複数の行相互接続導体70は、行38内の各GOT60の1つのSME34、36のみに接続され得るが、GOT60のその他のSME34、36には接続されない。一例では、
図5に関連して詳述されるように、第2の複数の行相互接続導体70の最初の半分は、行38内のSME34、36の最初の半分(各GOT60から一方のSME34)に接続し得、第2の複数の行相互接続導体70の残りの半分は、行38内のSME34、36の残りの半分(各GOT60から他方のSME34、36)に接続し得る。第2の複数の行相互接続導体70と、SME34、36との間における制限された接続性は、本明細書において、「パリティ」と呼ばれる。一例では、行38はまた、カウンタ、設定可能なブール論理要素、ルックアップテーブル、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は、第1のSME34と、第2のSME36とを含み、これらは、入力62、64を有し、それらの出力72、74をORゲート76および3入力マルチプレクサ78に接続されている。3入力マルチプレクサ78は、GOT60の出力66を、第1のSME34、第2のSME36、またはORゲート76のいずれかに接続するように設定され得る。ORゲート76は、両方の出力72、74を一緒に接続して、GOT60の共通出力66を形成するために用いられ得る。一例では、第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に並列に接続される複数のメモリセル80、例えば、ダイナミックランダムアクセスメモリ(DRAM)でしばしば用いられるものなどを備える。1つのこのようなメモリセル80は、ハイ(high)値またはロー(low)値(例えば、1または0)のいずれかに対応するものなどのデータ状態に設定され得るメモリセルを備える。メモリセル80の出力は、検出線82に接続され、メモリセル80への入力は、データストリーム線84上のデータに基づく信号を受信する。一例では、入力ブロック52における入力が復号されて、メモリセル80のうちの1つまたは2つ以上を選択する。選択されたメモリセル80は、その記憶されたデータ状態を出力として検出線82上に提供する。例えば、入力ブロック52で受信されたデータは、デコーダ(図示せず)に提供され得て、デコーダは、データストリーム線84のうちの1つまたは2つ以上を選択し得る。一例では、デコーダは、8ビットのACSII文字を256本のデータストリーム線84のうちの対応する1つに変換し得る。
【0026】
したがって、あるメモリセル80は、そのメモリセル80がハイ値に設定され、かつデータストリーム線84上のデータがそのメモリセル80を選択している場合、ハイ信号を検出線82に出力する。データストリーム線84上のデータがそのメモリセル80を選択し、かつそのメモリセル80がロー値に設定されている場合、そのメモリセル80は、ロー信号を検出線82に出力する。メモリセル80からの検出線82への出力は、検出セル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つまたは2つ以上が、そこにハイ信号を有する場合、ハイ信号を出力するようにプログラムされ得る。例えば、SME34は、第1のメモリセル80(例えば、ビット0)をハイに設定させ、すべてのその他のメモリセル80(例えば、ビット1〜255)をローに設定させ得る。それぞれの検出セル86がアクティブ状態にある場合、ビット0に対応するデータストリーム線84がそこにハイ信号を有するならば、SME34は、ハイ信号を出力72上に出力する。その他の例では、SME34は、複数のデータストリーム線84のうちの1つがそこにハイ信号を有するならば、適切なメモリセル80をハイ値に設定することにより、ハイ信号を出力するように設定され得る。
【0029】
一例では、メモリセル80は、関連するレジスタからビットを読み取ることによって、ハイ値またはロー値に設定され得る。このように、SME34は、コンパイラ20により形成された画像をレジスタ内に記憶して、レジスタ内のビットを関連するメモリセル80内にロードすることによって設定され得る。一例では、コンパイラ20により形成された画像は、ハイおよびロー(例えば、1および0)のビットからなる二値画像を含む。画像が、FSMラティス30を設定して、SME34、36をカスケード接続することによって、FSMを実装し得る。例えば、第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つまたは3つ以上の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のための入力データが、第1のFSMラティス30からの出力データを、一連の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は、ダイアグラム90(例えば、有向グラフ、無向グラフ、擬グラフ)として表され得、これは、1つまたは2つ以上のルートノード92を含む。ルートノード92に加えて、FSMは、いくつかの標準的なノード94および終端ノード96から構成され得、これらは、ルートノード92およびその他の標準的なノード94に1つまたは2つ以上の枝98を介して連結される。ノード92、94、96は、FSMにおける状態に対応する。枝98は、状態間における遷移に対応する。
【0033】
ノード92、94、96のそれぞれは、アクティブ状態または非アクティブ状態のいずれかであり得る。非アクティブ状態にある場合、ノード92、94、96は、入力データに対して反応(例えば、応答)しない。アクティブ状態にある場合、ノード92、94、96は、入力データに対して反応し得る。入力データが上流のノード92、94と、下流のノード94、96との間における枝98により指定される基準に一致する場合、上流のノード92、94は、そのノードに対して下流にあるノード94、96をアクティブにすることによって、入力データに対して反応し得る。例えば、文字「b」を指定する第1のノード94は、第1のノード94がアクティブであり、文字「b」が入力データとして受信される場合、第1のノード94に枝98により連結される第2のノード94をアクティブにする。本明細書で用いる場合、「上流」は、1つまたは2つ以上のノード間における関係を指し、そこでは、1つまたは2つ以上のその他のノードの上流(または、ループまたはフィードバック構成の場合、それ自身の上流)にある第1のノードとは、第1のノードが、1つまたは2つ以上のその他のノードをアクティブにし得る(または、ループの場合、自らをアクティブにし得る)状況を指す。同様に、「下流」とは、1つまたは2つ以上のその他のノードの下流(または、ループの場合、それ自身の下流)にある第1のノードが、1つまたは2つ以上のその他のノードによってアクティブにされ得る(または、ループの場合、自らによってアクティブにされ得る)関係を指す。このように、本明細書において「上流」および「下流」の語は、1つまたは2つ以上のノード間における関係を指すために用いられるが、これらの語は、ループまたはその他の非線形のノード間経路の使用を排除するものではない。
【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セット、単一のクロックサイクル)の間、アクティブに保たれ、次いで、上流の設定可能な要素によって再度アクティブにされない限り、非アクティブになる。
【0039】
終端ノード96は、圧縮された過去のイベントの履歴を記憶するとみなすことができる。例えば、終端ノード96に達するのに必要とされる1つまたは2つ以上の入力データのパターンは、その終端ノード96のアクティブ化により表され得る。一例では、終端ノード96が提供する出力は2進数であり、つまり、出力は、着目するパターンが一致したか否かを示す。ダイアグラム90における終端ノード96の標準的なノード94に対する比は、非常に小さいものであり得る。換言すると、FSMは非常に複雑であり得るが、FSMの出力は、比べれば小さい。
【0040】
一例では、FSMラティス30の出力は、状態ベクトルを備え得る。状態ベクトルは、FSMラティス30の設定可能な要素の状態(例えば、アクティブ化された、またはされていない)を備える。別の例では、状態ベクトルは、設定可能な要素が終端ノード96に対応するかを問わず、設定可能な要素のすべてまたはサブセットの状態を含み得る。一例では、状態ベクトルは、終端ノード96に対応する設定可能な要素のための状態を含む。このように、出力は、ダイアグラム90のすべての終端ノード96によって提供される指標の集まりを含み得る。状態ベクトルは、ワードで表現され得、ただし、各終端ノード96により提供される2進表示は、そのワードのうちの1ビットを備える。この終端ノード96の符号化は、FSMラティス30のための検出状態の有効な指標を提供し得る(例えば、着目するシーケンスが検出されたかどうか、また、どの着目するシーケンスが検出されたのか)。
【0041】
上述のように、FSMラティス30は、パターン認識機能を実装するようにプログラムされ得る。例えば、FSMラティス30は、入力データにおける1つまたは2つ以上のデータシーケンス(例えば、シグネチャ、パターン)を認識するように構成され得る。着目するデータシーケンスがFSMラティス30により認識されると、その認識の指標が出力ブロック54で提供され得る。一例では、パターン認識は、記号列(例えば、ASCII文字)を認識して、例えば、ネットワークデータ内のマルウェアまたはその他のデータを識別し得る。
【0042】
図7は、階層構造100の例を示しており、ここで、2つのレベルのFSMラティス30が直列に接続され、データを解析するために用いられている。具体的には、図示の実施形態では、階層構造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のレベル(第1のFSMラティス30Aにより実装される)は、例えば、生のデータストリームに対して直接、処理を実行し得る。つまり、生のデータストリームは、第1のFSMラティス30Aの入力ブロック52で受信され得、第1のFSMラティス30Aの設定可能な要素が、生のデータストリームに対して反応し得る。階層構造の第2のレベル(第2のFSMラティス30Bにより実装される)は、第1のレベルからの出力を処理し得る。つまり、第2のFSMラティス30Bは、第1のFSMラティス30Aの出力ブロック54からの出力を第2のFSMラティス30Bの入力ブロック52で受信し、第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は、コンパイラが、ソースコードをラティス30などのFSMラティスを設定するように構成された画像に変換して、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)を含み得る。正規表現は、記号検索パターンを記述するための文字列であり得る。正規表現は、プログラミング言語、テキストエディタ、ネットワークセキュリティなどの様々なコンピュータドメイン内で広く使用されている。一例では、コンパイラでサポートされる正規表現は、非構造化データの解析のための基準を含む。非構造化データは、自由な形式のデータであって、データ内のワードに適用されたインデックスのないデータを含み得る。ワードは、データ内に、印字可能および印字不能の双方であるバイトの任意の組み合わせを含み得る。一例では、コンパイラは、Perl、(例えば、Perl互換の正規表現(PCRE))、PHP、Java、およびNET言語を含む、正規表現を実装するための複数の異なるソースコード言語に対応し得る。
【0049】
ブロック112で、コンパイラ20は、ソースコードを構文解析して、関連付けられて接続された演算子の配置を形成し、ここで、演算子のタイプが異なれば、ソースコードで実装される対応する関数も異なる(例えば、ソースコードの正規表現で実装される関数が異なる)。ソースコードを構文解析すると、ソースコードの一般的表現を作成することができる。一例では、一般的表現は、構文木として知られるツリーグラフの形で、ソースコードにおける正規表現の符号化表現を備える。本明細書で説明される例は、その配置を構文木(「抽象構文木」としても知られる)と呼ぶが、その他の例では、具象構文木またはその他の配置も用いられ得る。
【0050】
上述のように、コンパイラ20は、複数の言語のソースコードに対応し得るため、構文解析するステップは、言語にかかわらず、ソースコードを構文木などの非言語固有表現に変換する。こうして、コンパイラ20によるさらなる処理(ブロック114、116、118、120)は、ソースコードの言語にかかわらず、共通の入力構造から機能し得る。
【0051】
上述のように、構文木は、関連付けられて連結された複数の演算子を含む。構文木は、複数の異なるタイプの演算子を含み得る。つまり、演算子が異なれば、ソースコードにおける正規表現によって実装された対応する関数も異なり得る。
【0052】
ブロック114では、構文木は、オートマトンに変換される。オートマトンは、FSMのソフトウェアモデルを備え、それに応じて、決定性または非決定性として分類され得る。決定性オートマトンは、所与の時間に、単一の実行パスを有するが、非決定性オートマトンは、複数の並列実行パスを有する。オートマトンは、複数の状態を備える。構文木をオートマトンに変換するためには、演算子および構文木内での演算子間の関係が、状態間での遷移を伴って状態に変換される。一例では、オートマトンは、FSMラティス30のハードウェアに部分的に基づいて、変換され得る。
【0053】
一例では、オートマトンの入力記号は、アルファベット、数字0〜9、およびその他の印字可能文字からなる記号を含む。一例では、入力記号は、0と255を含めて0から255までのバイト値によって表される。一例では、オートマトンは、グラフのノードが一式の状態に対応する有向グラフとして表され得る。一例では、入力記号αに関して、状態pから状態qへの遷移、すなわちδ(p,α)が、ノードpからノードqへの有向連結によって示される。一例では、オートマトンを反転すると、何らかの記号αに関する各遷移p→qが、同じ記号に関してq→pと反転される、新しいオートマトンが生成される。反転では、開始状態が最終状態になり、最終状態が開始状態になる。一例では、オートマトンによって認識された(例えば、一致した)言語は、オートマトンに順次して入力する場合に、最終状態に達する、一式のすべての可能な文字列である。オートマトンによって認識された言語における各文字列は、開始状態から1つまたは2つ以上の最終状態へのパスを辿る。
【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の特定のハードウェア要素を設定するための複数のビットを備える。画像が複数のビット(例えば、0および1)を備える実施形態では、画像は、二値画像と呼ばれ得る。ビットは、SME34、36、特定目的要素58、および設定可能なスイッチング要素の状態を設定するために、FSMラティス30上にロードされて、プログラムされたFSMラティス30が、ソースコードによって記述された機能性を有するFSMを実装するようにし得る。配置(ブロック120)およびルーティング(ブロック122)は、FSMラティス30内の特定の位置における特定のハードウェア要素をオートマトンにおける特定の状態にマッピングし得る。したがって、画像内のビットは、特定のハードウェア要素を設定して、所望の機能(複数可)を実装し得る。一例では、画像は、機械コードをコンピュータ可読媒体に記憶することによって発行され得る。別の例では、画像は、画像をディスプレイ装置上に表示することによって発行され得る。さらに別の例では、画像は、その画像をFSMラティス30上にロードするための設定デバイスなどの別のデバイスにその画像を送ることにより発行され得る。さらにまた別の例では、画像は、その画像をFSMラティス(例えば、FSMラティス30)上にロードすることによって発行され得る。
【0060】
一例では、画像は、ビット値を画像からSME34、36およびその他のハードウェア要素に直接ロードするか、あるいは画像を1つまたは2つ以上のレジスタにロードしてから、ビット値をレジスタからSME34、36およびその他のハードウェア要素に書き込むかのいずれかによって、FSMラティス30上にロードされ得る。一例では、FSMラティス30のハードウェア要素(例えば、SME34、36、特定目的要素58、設定可能なスイッチング要素40、42、44)は、設定デバイスおよび/またはコンピュータが、画像を1つまたは2つ以上のメモリアドレスに書き込むことにより、画像をFSMラティス30上にロードし得るようにメモリマップされる。
【0061】
本明細書に説明される方法例は、少なくとも部分的に機械またはコンピュータで実装され得る。一部の例は、上述の例で説明したような方法を実行するように電子デバイスを設定するように操作可能な命令で符号化されたコンピュータ可読媒体または機械可読媒体を含み得る。このような方法の実装には、マイクロコード、アセンブリ言語コード、高水準言語コードなどのコードが含まれ得る。このようなコードは、様々な方法を実行するためのコンピュータ可読命令を含み得る。コードは、コンピュータプログラム製品の一部を形成し得る。さらに、コードは、実行中またはその他の時に、1つまたは2つ以上の揮発性もしくは不揮発性のコンピュータ可読媒体上に有形的に記憶され得る。これらのコンピュータ可読媒体は、限定されるものではないが、ハードディスク、取り外し可能磁気ディスク、取り外し可能光ディスク(例えば、コンパクトディスクおよびデジタルビデオディスク)、磁気カセット、メモリカードまたはスティック、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)などを含み得る。
【0062】
ここで
図9を参照すると、状態機械エンジン14の実施形態(例えば、シングルチップ上の単一のデバイス)が示されている。先に説明したように、状態機械エンジン14は、データをメモリ16などのソースからデータバスを介して受信するように構成され得る。図示の実施形態では、データは、ダブルデータレートスリー(DDR3)バスインターフェース130などのバスインターフェースを介して状態機械エンジン14に送信され得る。DDR3バスインターフェース130は、1Gバイト/秒を上回る、またはこれに等しい速度で、データを交換(例えば、提供および受信)可能であり得る。このようなデータ交換速度は、データが状態機械エンジン14によって解析される速度よりも速い場合もある。理解されるように、解析するデータのソースに応じて、バスインターフェース130は、状態機械エンジン14に対するデータソースへのデータ、およびデータソースからのデータを交換するための任意の好適なバスインターフェース、例えば、NANDフラッシュインターフェース、ペリフェラルコンポーネントインターコネクト(PCI)インターフェース、ギガビットメディア非依存インターフェース(GMMI)などであり得る。先述のように、状態機械エンジン14は、データを解析するように構成される1つまたは2つ以上の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は、解析されるデータを受信し、一時的に記憶するように構成される。一実施形態では、2つのデータバッファ132(データバッファAおよびデータバッファB)が存在する。データは、FSMラティス30による解析のために、2つのデータバッファ132のうちの1つに記憶され得るが、データは、他方のデータバッファ132から除去される。バスインターフェース130は、解析されるデータをデータバッファ132に、データバッファ132がフルになるまで提供するように構成され得る。データバッファ132がフルになった後、バスインターフェース130は、その他の目的のために用いることができるように、解放されるように構成され得る(例えば、データバッファ132がさらなる解析されるデータを受信するために利用できるようになるまで、データストリームからその他のデータを提供する)。図示の実施形態では、データバッファ132は、それぞれ32Kバイトであり得る。命令バッファ133は、解析されるデータに対応する命令および状態機械エンジン14の設定に対応する命令などの命令を、プロセッサ12からバスインターフェース130を介して受信するように構成される。IRバスおよびプロセスバッファインターフェース136は、データをプロセスバッファ134に提供するのを助け得る。IRバスおよびプロセスバッファインターフェース136は、確実にデータがFSMラティス30によって順番に処理されるようにするのに用いられ得る。IRバスおよびプロセスバッファインターフェース136は、データ、タイミングデータ、パッキング命令などの交換を調整して、データが受信され、正確に解析されるようにし得る。概して、IRバスおよびプロセスバッファインターフェース136は、FSMラティス30の論理ランクにわたる複数のデータセットの並列解析を可能にする。例えば、複数の物理デバイス(例えば、状態機械エンジン14、チップ、別個のデバイス)は、ランクに構成され得、また互いにIRバスおよびプロセスバッファインターフェース136を介してデータを提供し得る。本出願の目的上、「ランク」の語は、同じチップセレクトに接続された一式の状態機械エンジン14を指す。図示の実施形態では、IRバスおよびプロセスバッファインターフェース136は、32ビットデータバスを含み得る。その他の実施形態では、IRバスおよびプロセスバッファインターフェース136は、128ビットデータバスなどの任意の好適なデータバスを含み得る。
【0064】
図示の実施形態では、状態機械エンジン14はまた、デコンプレッサ138と、コンプレッサ140とを含んで、状態機械エンジン14中に状態ベクトルデータを提供するのに役立つ。コンプレッサ140およびデコンプレッサ138は、連動して働いて、状態ベクトルデータが圧縮されて、データ提供時間を最小化し得るようにする。状態ベクトルデータを圧縮することにより、バス利用時間が最小限に抑えられ得る。コンプレッサ140およびデコンプレッサ138はまた、様々なバースト長の状態ベクトルデータを扱うように構成され得る。圧縮した状態ベクトルデータをパディングし、各圧縮領域の終点に関する指標を含めることにより、コンプレッサ140は、状態機械エンジン14にわたる処理スピード全体を改善し得る。コンプレッサ140は、FSMラティス30による解析後のマッチ結果データを圧縮するために用いられ得る。コンプレッサ140およびデコンプレッサ138はまた、設定データを圧縮および復元するのに用いられ得る。一実施形態では、コンプレッサ140およびデコンプレッサ138は、機能を無効にされて(例えば、オフにされる)、コンプレッサ140およびデコンプレッサ138との間で行き交うデータが修正されないようにし得る。
【0065】
上述のように、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の状態ベクトルまで記憶し得る。
【0066】
理解されるように、状態ベクトルデータは、ランク内の異なる状態機械エンジン14(例えば、チップ)の間で交換され得る。状態ベクトルデータは、様々な目的のために異なる状態機械エンジン14の間で交換され得る。様々な目的とは、状態機械エンジン14のFSMラティス30のSME34、36の状態を同期させるため、複数の状態機械エンジン14にわたって同じ機能を実行するため、複数の状態機械エンジン14にわたって結果を再現するため、複数の状態機械エンジン14にわたって結果をカスケード式に送るため、複数の状態機械エンジン14にわたってカスケード式に送られたデータの解析に用いられるSME34、36の状態の履歴を記憶するためなどである。さらに、状態機械エンジン14内では、状態ベクトルデータが、FSMラティス30のSME34、36を迅速に設定するために用いられ得ることに留意されたい。例えば、状態ベクトルデータが用いられて、SME34、36の状態を初期化された状態(例えば、新しい検索タームを検索するため)に復元したり、SME34、36の状態を先の状態(例えば、先に検索した検索タームを検索するため)に復元したり、SME34、36の状態をカスケード接続する構成に設定されるように変更したりし得る(例えば、カスケード型検索における検索タームを検索するため)。ある実施形態では、状態ベクトルデータは、バスインターフェース130に提供されて、状態ベクトルデータがプロセッサ12に提供され得るようにし得る(例えば、状態ベクトルデータの解析のため、状態ベクトルデータを再設定して、修正を加えるため、状態ベクトルデータを再設定して、SME34、36の効率を高めるためなど)。
【0067】
例えば、ある実施形態では、状態機械エンジン14は、キャッシュされた状態ベクトルデータ(例えば、状態ベクトルシステム141により記憶されたデータ)をFSMラティス30から外部デバイスに提供し得る。外部デバイスは、状態ベクトルデータを受信し、状態ベクトルデータを修正し、FSMラティス30を設定するために修正した状態ベクトルデータを状態機械エンジン14に提供し得る。このように、外部デバイスは、状態ベクトルデータを修正して、状態機械エンジン14が所望どおりに状態をスキップ(例えば、方々に飛び越し)できるようにし得る。
【0068】
状態ベクトルキャッシュメモリ142は、状態ベクトルデータを任意の好適なデバイスから受信し得る。例えば、状態ベクトルキャッシュメモリ142は、FSMラティス30、別のFSMラティス30(例えば、IRバスおよびプロセスバッファインターフェース136を介して)、デコンプレッサ138などから状態ベクトルを受信し得る。図示の実施形態では、状態ベクトルキャッシュメモリ142は、状態ベクトルメモリバッファ144を介して、その他のデバイスから状態ベクトルを受信し得る。さらに、状態ベクトルキャッシュメモリ142は、状態ベクトルデータを任意の好適なデバイスに提供し得る。例えば、状態ベクトルキャッシュメモリ142は、状態ベクトルメモリバッファ144と、状態ベクトル中間入力バッファ146と、状態ベクトル中間出力バッファ148とに、状態ベクトルデータを提供し得る。
【0069】
状態ベクトルメモリバッファ144、状態ベクトル中間入力バッファ146、および状態ベクトル中間出力バッファ148などの追加的なバッファは、状態ベクトルキャッシュメモリ142と共に利用されて、状態機械エンジン14中でパケットを割り込ませた別個のデータセットを処理しながら、状態ベクトルの迅速な検索および記憶を提供し得る。図示の実施形態では、状態ベクトルメモリバッファ144、状態ベクトル中間入力バッファ146、および状態ベクトル中間出力バッファ148のそれぞれは、1つの状態ベクトルを一時的に記憶するように構成され得る。状態ベクトルメモリバッファ144は、状態ベクトルデータを任意の好適なデバイスから受信するために、また状態ベクトルデータを任意の好適なデバイスに提供するために用いられ得る。例えば、状態ベクトルメモリバッファ144は、FSMラティス30、別のFSMラティス30(例えば、IRバスおよびプロセスバッファインターフェース136を介して)、デコンプレッサ138、および状態ベクトルキャッシュメモリ142から状態ベクトルを受信するために用いられ得る。別の例として、状態ベクトルメモリバッファ144は、IRバスおよびプロセスバッファインターフェース136(例えば、その他のFSMラティス30のため)、コンプレッサ140、および状態ベクトルキャッシュメモリ142に状態ベクトルデータを提供するために用いられ得る。
【0070】
同様に、状態ベクトル中間入力バッファ146は、状態ベクトルデータを任意の好適なデバイスから受信するために、また状態ベクトルデータを任意の好適なデバイスに提供するために用いられ得る。例えば、状態ベクトル中間入力バッファ146は、FSMラティス30(例えば、IRバスおよびプロセスバッファインターフェース136を介して)、デコンプレッサ138、および状態ベクトルキャッシュメモリ142から状態ベクトルを受信するために用いられ得る。別の例として、状態ベクトル中間入力バッファ146は、FSMラティス30に状態ベクトルを提供するために用いられ得る。さらに、状態ベクトル中間出力バッファ148は、状態ベクトルを任意の好適なデバイスから受信するために、また状態ベクトルを任意の好適なデバイスに提供するために用いられ得る。例えば、状態ベクトル中間出力バッファ148は、FSMラティス30および状態ベクトルキャッシュメモリ142から状態ベクトルを受信するために用いられ得る。別の例として、状態ベクトル中間出力バッファ148は、FSMラティス30(例えば、IRバスおよびプロセスバッファインターフェース136を介して)およびコンプレッサ140に状態ベクトルを提供するために用いられ得る。
【0071】
着目する結果がFSMラティス30によって生成されると、マッチ結果がマッチ結果メモリ150に記憶され得る。つまり、一致(例えば、着目するパターンの検出)を示す「マッチベクトル」が、マッチ結果メモリ150に記憶され得る。次いで、マッチング結果は、バスインターフェース130を介して、例えばプロセッサ12に送信するために、マッチバッファ152に送信され得る。先述したように、マッチ結果は、圧縮され得る。
【0072】
さらなるレジスタおよびバッファも同様に、状態機械エンジン14に提供され得る。例えば、状態機械エンジン14は、制御およびステータスレジスタ154を含み得る。加えて、プログラムバッファシステム(例えば、修復マップおよびプログラムバッファ156)が、最初にFSMラティス30をプログラミングするために提供され得る。例えば、初期(例えば、開始)状態ベクトルデータは、プログラムバッファシステムから(例えば、デコンプレッサ138を介して)FSMラティス30に提供され得る。デコンプレッサ138は、FSMラティス30をプログラムするために提供される設定データ(例えば、状態ベクトルデータ、ルーティングスイッチデータ、SME34、36の状態、ブール関数データ、カウンタデータ、マッチMUXデータ)を復元するために用いられ得る。
【0073】
同様に、修復マップバッファシステム(例えば、保存および修復マップバッファ158)はまた、セットアップおよび使用のためのデータ(例えば、保存および修復マップ)の記憶のために提供され得る。修復マップバッファシステムによって記憶されるデータは、どのSME34、36が修復されたかを識別するデータなどの修復されたハードウェア要素に対応するデータを含み得る。修復マップバッファシステムは、任意の好適な方法でデータを受信し得る。例えば、データは、最終製造試験中にデバイス上でなされた修復のマッピングを提供する「ヒューズマップ」メモリから、修復マップバッファ158に提供され得る。別の例として、修復マップバッファシステムは、標準的なプログラミングファイルを修正(例えば、カスタマイズ)するために用いられるデータを含んで、標準的なプログラミングファイルが、修復されたアーキテクチャを有するFSMラティス30で動作し得るようにし得る(例えば、FSMラティス30における不良のSME34、36は、使用されないようにバイパスされる)。コンプレッサ140は、ヒューズマップメモリから修復マップバッファ158に提供されたデータを圧縮するために用いられ得る。図示のように、バスインターフェース130は、データをプログラムバッファ156に提供し、修復マップバッファ158からのデータを提供するために用いられ得る。理解されるように、プログラムバッファ156に提供されるデータおよび/または修復マップバッファ158から提供されるデータは、圧縮され得る。一部の実施形態では、データは、状態機械エンジン14の外部にあるデバイスを(例えば、プロセッサ12、メモリ16、コンパイラ20など)介して、バスインターフェース130に提供される、および/またはバスインターフェース130から受信される。状態機械エンジン14の外部にあるデバイスは、修復マップバッファ158から提供されるデータを受信し、データを記憶し、データを解析し、データを修正し、および/または新しいもしくは修正したデータをプログラムバッファ156に提供するように構成され得る。
【0074】
状態機械エンジン14は、FSMラティス30をプログラムするのに用いられるラティスプログラミングシステム159を含む。図示のように、ラティスプログラミングシステム159は、命令キュー133からデータ(例えば、設定命令)を受信し得る。さらに、ラティスプログラミングシステム159は、プログラムバッファ156からデータ(例えば、設定データ)を受信し得る。ラティスプログラミングシステム159は、設定命令および設定データを用いて、FSMラティス30を設定し得る(例えば、ルーティングスイッチ、SME34、36、ブールセル、カウンタ、マッチMUXを設定し得る)。ラティスプログラミングシステム159は、デコンプレッサ138を用いて、データを圧縮し、コンプレッサ140を用いて、データを圧縮し得る(例えば、プログラムバッファ156および修復マップバッファ158と交換されたデータのため)。
【0075】
ここで
図10を参照すると、状態機械エンジン14におけるFSMラティス30をプログラミングする方法160を示す流れ図が示されている。本方法160は、設定データをプログラムバッファ156に提供するステップ(ブロック162)と、設定命令を命令バッファ133に提供するステップ(ブロック164)と、設定の更新を開始するステップ(ブロック166)と、命令を命令バッファ133から読み出すステップ(ブロック168)と、命令が設定命令であるかどうかを判定するステップ(ブロック170)と、設定データをプログラムバッファ156から読み出し、圧縮されている場合には、設定データを復元するステップ(ブロック172)と、設定データをFSMラティス30に提供するステップ(ブロック174)とを含み得る。
【0076】
一実施形態では、ブロック162において、プロセッサ12は、設定データをプログラムバッファシステム(例えば、復元マップおよびプログラムバッファ156)にバスインターフェース130を介して提供し得る。さらに、プロセッサ12は、設定命令を命令バッファ133にバスインターフェース130を介して提供し得る(ブロック164)。ブロック166では、設定の更新が開始され得る(例えば、プロセッサ12、ラティスプログラミングシステム159、または状態機械エンジン14を介して)。次いで、ブロック168では、ラティスプログラミングシステム159は、命令バッファ133に記憶された命令を読み出し得る。次に、ブロック170では、ラティスプログラミングシステム159は、命令バッファ133から読み出された命令が設定命令かどうかを判定し得る。命令が設定命令ではない場合、ラティスプログラミングシステム159は、ブロック168で、命令バッファ133に記憶されたさらなる命令を読み出す。しかしながら、命令が設定命令である場合、ラティスプログラミングシステム159は、プログラムバッファシステムに記憶された設定データを読み出す(ブロック172)。一部の実施形態では、設定データは、圧縮され得る。したがって、さらにブロック172では、ラティスプログラミングシステム159は、設定データを復元し得る(例えば、デコンプレッサ138を介して)。次いで、ラティスプログラミングシステム159は、設定データをFSMラティス30に提供する(ブロック174)。
【0077】
本開示は、様々な修正および代替形態に利用可能であるが、具体的な実施形態が例として図面に示され、本明細書に詳述されてきた。しかしながら、本発明が、開示された特定の形態に限定されることを意図するものではないことを理解されたい。むしろ、本発明は、以下の添付の特許請求の範囲によって定義される、本開示の精神および範囲内に含まれるすべての修正、均等物、および代替策を包含するものである。