(57)【要約】【課題】高スループットで複雑なネットワークプロトコルを実行するのに適切なソフトウェア・デファインド・ネットワーク処理エンジンを提供する。【解決手段】プログラム可能な命令の条件付き生成用のコントロールパス１０５と、コントロールパス１０５によって生成される命令の実行用のデータパス１１０とを備え、処理エンジン１００は、並行に、Ｎ個の入力を受信してＭ個の出力を生成する。Ｍ個の出力の各コンテンツは、修正された入力コンテンツの１つまたは新たに生成されたコンテンツであってもよい。【選択図】図１
2015165649.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア・デファインド・ネットワーク（ＳＤＮ）処理エンジンを含む装置であって、
前記ＳＤＮ処理エンジンは、
プログラム可能な命令の条件付き生成用のコントロールパスと、
前記コントロールパスによって生成される前記命令の実行用のデータパスとを備え、
前記処理エンジンは、並行に、Ｎ個の入力を受信してＭ個の出力を生成する、装置。
【請求項２】
請求項１に記載の装置において、前記Ｍ個の出力の各コンテンツは、修正された入力コンテンツの１つまたは新たに生成されたコンテンツである、装置。
【請求項３】
請求項１に記載の装置において、
前記コントロールパスは、
前記Ｎ個の入力から制御ビットを抽出する制御ビット抽出器と、
前記Ｎ個の入力のワードを比較するワード比較コーンと、
前記制御ビットおよび前記ワード比較コーンの結果ビットに、複合された、式および条件を実行する多段ＭＵＸ／ＬＵＴ論理コーンと、
データ操作のための命令を含む複数の命令テーブルとを備えた、装置。
【請求項４】
請求項３に記載の装置において、前記制御ビット抽出器、前記ワード比較コーン、前記多段ＭＵＸ／ＬＵＴ論理コーン、および前記複数の命令テーブルのうちの少なくとも１つが、ユーザが前記処理エンジンに実行させたいネットワーク機能およびプロトコルに基づいて、再構成およびプログラム可能である
装置。
【請求項５】
請求項３に記載の装置において、前記制御ビット抽出器が、予め定められた入力フォーマットに基づいて前記Ｎ個の入力から前記制御ビットを抽出する、装置。
【請求項６】
請求項３に記載の装置において、前記ワード比較コーンが、Ｋ個の構成変更可能なＭＵＸ／ＣＭＰ論理セルを含む、装置。
【請求項７】
請求項６に記載の装置において、前記ＭＵＸ／ＣＭＰ論理セルが、それぞれ、前記Ｎ個の入力からのＷバイトの２つのワードを比較するためのものである、装置。
【請求項８】
請求項７に記載の装置において、前記ＷバイトのワードそれぞれにおけるＷバイトのうちの特定のビットのみが比較される、装置。
【請求項９】
請求項６に記載の装置において、前記ＭＵＸ／ＣＭＰ論理セルが、それぞれ、前記入力のうちの１つからの１つのＷバイトのワードを、一定値と比較する、装置。
【請求項１０】
請求項６に記載の装置において、前記ＭＵＸ／ＣＭＰ論理セルが、それぞれ、少なくとも３つの演算をサポートし、当該３つの演算が、等しい（＝＝）、より大きい（＞）、およびより小さい（＜）である、装置。
【請求項１１】
請求項３に記載の装置において、
前記ＭＵＸ／ＬＵＴ論理コーンはＳ個のステージを含み、
前記Ｓ個のステージの最初のステージは、前記処理エンジンへの前記Ｎ個の入力の前記制御ビットと、前記ワード比較コーンの出力ビットとを含む入力ビットを有し、
ステージｉの出力ビットは全て、ステージｉ＋１への入力ビットであり、
前記Ｓ個のステージの最後のステージの出力ビットは、前記複数の命令テーブルを読み取るためのインデックスを形成する、装置。
【請求項１２】
請求項１１に記載の装置において、前記ステージｉはが、Ｐｉ個の構成変更可能なＭＵＸ／ＬＵＴセルを含む、装置。
【請求項１３】
請求項１２に記載の装置において、前記ＭＵＸ／ＬＵＴセルが、それぞれ、そのＭＵＸ／ＬＵＴセルへの入力ビットからＬ個の任意のビットを選択するＬ個のマルチプレクサを備えた、装置。
【請求項１４】
請求項１３に記載の装置において、前記Ｌ個の選択されたビットが、２Ｌビットのルックアップテーブルcfg_LUTに対するポインタとして構成され、前記cfg_LUTの出力が１ビットである、装置。
【請求項１５】
請求項１４に記載の装置において、前記cfg_LUTがフロップから構成される、装置。
【請求項１６】
請求項３に記載の装置において、合成ツールを使用して、複合された、論理式および条件を前記ＭＵＸ／ＬＵＴ論理コーンにマッピングする、装置。
【請求項１７】
請求項３に記載の装置において、
前記複数の命令テーブルが、Ｔ個のプログラム可能な命令テーブルを含み、
前記ＭＵＸ／ＬＵＴ論理コーンの出力が、前記Ｔ個のプログラム可能な命令テーブルの読み出しアドレスであるインデックスを構成し、
前記Ｍ個の出力それぞれが前記Ｔ個のプログラム可能な命令テーブルの少なくとも１つと関連づけられるように、前記Ｔが、前記処理エンジンの前記Ｍ個の出力と少なくとも等しい、装置。
【請求項１８】
請求項１７に記載の装置において、前記Ｔ個のプログラム可能な命令テーブルのテーブルｉが、Ａｉビットのアドレスを有し、前記テーブルｉが、最大で２Ａｉのエントリを有する、装置。
【請求項１９】
請求項１８に記載の装置において、テーブルｉの各エントリが、Ｑｉ個の命令を含む、装置。
【請求項２０】
請求項１７に記載の装置において、前記Ｔ個のプログラム可能な命令テーブルのそれぞれが、ＳＲＡＭまたはフロップのアレイから構成される、装置。
【請求項２１】
請求項１に記載の装置において、前記処理エンジンが、コピー命令およびＡＬＵ命令を含む少なくとも２種類の命令をサポートする、装置。
【請求項２２】
請求項２１に記載の装置において、前記コピー命令が、１つの入力からの最大Ｃバイトを１つの出力にコピーする、装置。
【請求項２３】
請求項２１に記載の装置において、前記コピー命令が、一定値を１つの出力にコピーする、装置。
【請求項２４】
請求項２１に記載の装置において、前記ＡＬＵ命令は、入力からの各Ｗバイトの２つのワードのＡＬＵ演算の結果を、１つの出力にコピーする、装置。
【請求項２５】
請求項２４に記載の装置において、前記ＡＬＵ演算への入力が一定値である、装置。
【請求項２６】
請求項２５に記載の装置において、前記ＡＬＵ演算が、加算（＋）、減算（−）、ビット単位のＡＮＤ（＆）、ビット単位のＯＲ（｜）、ビット単位のＸＯＲ（＾）、ビット単位の左シフト（＜＜）、およびビット単位の右シフト（＞＞）のうちの１つである、装置。
【請求項２７】
請求項２１に記載の装置において、前記コピー命令または前記ＡＬＵ命令それぞれが、その命令のビットマスクフィールドを用いることでビットまたはバイト操作をサポートする、装置。
【請求項２８】
請求項１に記載の装置において、
前記データパスが、
データが適切な時間に処理されるように、前記データパスの遅延を前記コントロールパスの遅延に整合させる遅延整合キューと、
特定の入力を修正するか、または新しい出力を生成するために、前記コントロールパスが生成する命令の全てを実行する命令実行ブロックとを備えた、装置。
【請求項２９】
請求項２８に記載の装置において、前記遅延整合キューが、前記処理エンジンがバックツーバックのデータ処理で最大限のスループットを達成するように、前記コントロールパスの遅延に等しい深さを有する、ＦＩＦＯおよびシフトレジスタのうちの１つである、装置。
【請求項３０】
請求項２８に記載の装置において、前記命令実行ブロックが、並行に、前記コントロールパスが生成する命令の全てを実行するハードウェアモジュールを備え、当該ハードウェアモジュールそれぞれが、前記命令のうちの１つを実行する、装置。
【請求項３１】
請求項２８に記載の装置において、全ての命令が実行される前において出力の最初のコンテンツが特定の入力のコンテンツである場合、前記出力は前記特定の入力を修正したものであり、全ての命令が実行される前において出力の最初のコンテンツが全てゼロである場合、前記出力は新たに生成される、装置。
【請求項３２】
ソフトウェア・デファインド・ネットワーク（ＳＤＮ）処理エンジンにおける並行かつ条件付きのデータ操作方法であって、
Ｎ個の入力を受信することと、
前記Ｎ個の入力を、コントロールパスおよびデータパスを通して前記処理エンジンで処理させることと、
前記Ｎ個の入力から制御ビットを抽出すること、前記Ｎ個の入力のワードを比較すること、および遅延キューを介して前記Ｎ個の入力を送信することを同時に行うことと、
前記制御ビットおよび前記比較からの結果ビットに、複合された、式および条件を実行することで、インデックスを返すことと、
前記インデックスに基づいて、前記Ｎ個の入力をどのように修正するか、かつ、Ｍ個の出力をどのように生成するかを導く命令を検索することと、
並行に前記Ｎ個の入力についての前記命令を実行することで、前記Ｍ個の出力を生成することとを備えた、方法。
【請求項３３】
請求項３２に記載の方法において、前記抽出、前記比較、前記複合された、式および条件、ならびに命令テーブルが、前記処理エンジンの前記コントロールパスにおいて実現され、前記遅延キューおよび命令の前記実行が、前記処理エンジンの前記データパスにおいて実施される、方法。
【請求項３４】
請求項３２に記載の方法において、前記Ｍ個の出力それぞれのコンテンツが、新たに生成されたコンテンツと、前記Ｎ個の入力のうちの１つの修正されたコンテンツのいずれか一方または両方である、方法。
【請求項３５】
請求項３２に記載の方法において、
前記処理エンジンの前記Ｎ個の入力および前記Ｍ個の出力のそれぞれのデータフォーマットが、
データサイズを特定する「Length」フィールドと、
ペイロードの最初のバイトの位置を特定する「Offset」フィールドと、
データの種類を特定する「Control」フィールドと
前記ペイロードを含む「Body」フィールドとを含む、方法。
【請求項３６】
請求項３２に記載の方法において、前記処理エンジンがプログラム可能である、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア・デファインド・ネットワーク処理エンジンにおける多数のデータフローの操作に関し、より詳細には、ソフトウェア・デファインド・ネットワーク処理エンジンにおける並行かつ条件付きのデータ操作の方法および装置に関する。
【背景技術】
【０００２】
ソフトウェア・デファインド・ネットワーキング（ＳＤＮ）技術は、ネットワークを新たな規格、プロトコル、およびサービスに迅速かつ容易に適応させることを可能にする。ＳＤＮは、ネットワーク抽象を２つの分離したプレーン、すなわち、コントロールプレーンとデータ転送プレーンとに分離する。この分離によって、ネットワークの操作者は、高価な既存のデータ転送プレーンを再利用しながらコントロールプレーンを構成変更／プログラムすることで、迅速にネットワークの機能を変更し、かつ／または、ネットワークに新しい機能を付加することができる。ＳＤＮは、新しいネットワークの機能とサービスを導入するコストおよび時間を低減することができる。プレーンを分離したネットワーキングインフラストラクチャは、ネットワークの操作者の管理タスクを簡略化することもできる。
【０００３】
各ＳＤＮ装置は、多数の高スループットのデータフローを並行（パラレル）に処理することを要求されることが多い。このようなＳＤＮ装置には、データの操作を担う１つ以上の処理エンジンが存在する。これら処理エンジンのデータ操作は、データのコンテンツ自体と、ＳＤＮ装置のために構成されたネットワーク機能とに依存する。これら処理エンジンが処理するデータは、何百バイトにまでなり得る大きいサイズになる可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来技術のＡＳＩＣに基づいた設計は、ＳＤＮ処理エンジンに期待される別のネットワーク機能を実行することに対して、再プログラムおよび／または再構成に十分な柔軟性を提供しない。また、これらのエンジンを実現するために最新の６４ビット汎用ＣＰＵを用いることで、周期毎に何百ものデータのバイトを処理するように要求されるＳＤＮ装置のネットワーク帯域幅および遅延の要件を満たすことはできない。ＦＰＧＡを用いる他の従来技術のインプリメンテーションも、高遅延でＦＰＧＡチップを低い周波数で走らせる内部相互接続配線における論理セル容量の制限および高度の複雑さのために、高スループットで複雑なネットワークプロトコルを実行するのに適切でない。
【課題を解決するための手段】
【０００５】
並行かつ条件付きのデータ操作のためのソフトウェア・デファインド・ネットワーキング（ＳＤＮ）処理エンジンを提案する。ユーザは、ユーザがＳＤＮ処理エンジンにサポートさせたい機能およびプロトコルに応じて、データ処理のための条件およびルールをプログラムできる。ＳＤＮ処理エンジンは、最大限のスループットで多数の入力および出力を並行に処理できる。ＳＤＮ処理エンジンは、２つのパス、すなわち、コントロールパスおよびデータパスを含む。コントロールパスは、制御ビット抽出器と、ワード比較コーンと、多段ＭＵＸ／ＬＵＴ論理コーンと、命令テーブルとを含む。コントロールパスは、構成されたネットワーク機能のある特定の条件を入力が満たすか否かを検査する。検査結果に基づいて、コントロールパスは、入力を修正し、かつ／または、新しい出力を生成する命令を生成する。データパスは、遅延整合キューおよび命令実行ブロックを含む。データパスは、コントロールパスが生成する命令を実行する。多数のデータフローを同時に操作するために、全ての命令が並行に実行される。提案される処理エンジンは、プログラム可能であるため、ハードウェアのみによるＡＳＩＣ設計に比べて柔軟性が極めて高く、そのためＳＤＮ装置で採用できる。
【０００６】
一構成において、ソフトウェア・デファインド・ネットワーク（ＳＤＮ）処理エンジンが提供される。前記ＳＤＮ処理エンジンは、プログラム可能な命令の条件付き生成用のコントロールパスと、前記コントロールパスによって生成される前記命令の実行用のデータパスとを備える。前記処理エンジンは、典型的には、並行に、Ｎ個の入力を受信してＭ個の出力を生成する。いくつかの実施形態では、前記Ｍ個の出力の各コンテンツは、修正された入力コンテンツまたは新たに生成されたコンテンツである。
【０００７】
いくつかの実施形態では、前記コントロールパスは、前記Ｎ個の入力から制御ビットを抽出する制御ビット抽出器と、前記Ｎ個の入力のワードを比較するワード比較コーンと、前記制御ビットおよび前記ワード比較コーンの結果ビットに、複合された、式および条件（複数の式および複数の条件の複合）を実行する多段ＭＵＸ／ＬＵＴ論理コーンと、データ操作のための命令を含む複数の命令テーブルとを備える。前記制御ビット抽出器、前記ワード比較コーン、前記多段ＭＵＸ／ＬＵＴ論理コーンおよび／または前記複数の命令テーブルは、ユーザが前記処理エンジンに実行させたいネットワーク機能およびプロトコルに基づいて、再構成およびプログラム可能である。
【０００８】
いくつかの実施形態では、前記制御ビット抽出器は、予め定められた入力フォーマットに基づいて前記Ｎ個の入力から前記制御ビットを抽出する。
【０００９】
いくつかの実施形態では、前記ワード比較コーンはＫ個の構成変更可能なＭＵＸ／ＣＭＰ論理セルを含む。前記ＭＵＸ／ＣＭＰ論理セルは、それぞれ、前記Ｎ個の入力からのＷバイトの２つのワードを比較できる。前記ＭＵＸ／ＣＭＰ論理セルは、それぞれ、前記ＷバイトのワードそれぞれにおけるＷバイトのうちの特定のビットのみを比較でき、かつ／または、前記入力のうちの１つからのＷバイトのワードを、一定値と比較できるものであってもよい。いくつかの実施形態では、前記ＭＵＸ／ＣＭＰ論理セルは、それぞれ、等しい（＝＝）、より大きい（＞）、およびより小さい（＜）を含む少なくとも３つの演算をサポートする。
【００１０】
いくつかの実施形態では、前記ＭＵＸ／ＬＵＴ論理コーンはＳ個のステージを含む。前記Ｓ個のステージの最初のステージは入力ビットを有し、この入力ビットは、前記処理エンジンへの前記Ｎ個の入力の前記制御ビットと、前記ワード比較コーンの出力ビットとを含む。ステージｉの出力ビットは全て、ステージｉ＋１への入力ビットである。前記ＭＵＸ／ＬＵＴ論理コーンの最後のステージの出力ビットは、前記複数の命令テーブルを読み取るためのインデックスを形成する。
【００１１】
いくつかの実施形態では、前記ステージｉは、Ｐｉ個の構成変更可能なＭＵＸ／ＬＵＴセルを含む。前記ＭＵＸ／ＬＵＴセルは、それぞれ、そのＭＵＸ／ＬＵＴセルへの入力ビットからＬ個の任意のビットを選択するＬ個のマルチプレクサを備える。前記Ｌ個の選択されたビットは、２Ｌビットのルックアップテーブルcfg_LUTに対するポインタとして構成される。前記cfg_LUTの出力は１ビットである。いくつかの実施形態では、前記cfg_LUTはフロップから構成される。
【００１２】
いくつかの実施形態では、合成ツールを使用して、複合された、論理式および条件を前記ＭＵＸ／ＬＵＴ論理コーンにマッピングする。合成ツールの一例は、カリフォルニア大学バークレー校のＡＢＣツールである。
【００１３】
いくつかの実施形態では、前記複数の命令テーブルは、Ｔ個のプログラム可能な命令テーブルを含む。前記ＭＵＸ／ＬＵＴ論理コーンの出力は、前記Ｔ個のプログラム可能な命令テーブルの読み出しアドレスであるインデックスを構成する。前記Ｍ個の出力それぞれが前記Ｔ個のプログラム可能な命令テーブルの少なくとも１つと関連づけられるように、前記Ｔは、前記処理エンジンの前記Ｍ個の出力と少なくとも等しい。いくつかの実施形態では、前記Ｔ個のプログラム可能な命令テーブルのテーブルｉは、Ａｉビットのアドレスを有し、前記テーブルｉは、最大で２Ａｉのエントリを有する。テーブルｉの各エントリは、Ｑｉ個の命令を含む。いくつかの実施形態では、前記Ｔ個のプログラム可能な命令テーブルそれぞれが、ＳＲＡＭまたはフロップのアレイから構成される。
【００１４】
いくつかの実施形態では、前記処理エンジンは、コピー命令およびＡＬＵ命令を含む少なくとも２種類の命令をサポートする。前記コピー命令それぞれは、１つの入力からの最大Ｃバイトを１つの出力にコピーする。あるいは、前記コピー命令それぞれは、一定値を１つの出力にコピーする。前記ＡＬＵ命令は、それぞれ、入力からの各Ｗバイトの２つのワードのＡＬＵ演算の結果を、１つの出力にコピーする。前記ＡＬＵ演算への入力が一定値であってもよい。前記ＡＬＵ演算は、加算（＋）、減算（−）、ビット単位のＡＮＤ（＆）、ビット単位のＯＲ（｜）、ビット単位のＸＯＲ（＾）、ビット単位の左シフト（＜＜）、またはビット単位の右シフト（＞＞）であってもよい。いくつかの実施形態では、前記コピー命令またはＡＬＵ命令それぞれは、その命令のビットマスクフィールドを用いることでビットまたはバイト操作をサポートする。
【００１５】
いくつかの実施形態では、前記データパスは、データが適切な時間に処理されるように、前記データパスの遅延を前記コントロールパスの遅延に整合させる遅延整合キューと、特定の入力を修正し、かつ／または、新しい出力を生成するために、前記コントロールパスが生成する命令の全てを実行する命令実行ブロックとを備える。
【００１６】
前記遅延整合キューは、前記処理エンジンがバックツーバックのデータ処理で最大限のスループットを達成するように、前記コントロールパスの遅延に等しい深さを有する、ＦＩＦＯまたはシフトレジスタであってもよい。
【００１７】
いくつかの実施形態では、前記命令実行ブロックは、並行に、前記コントロールパスが生成する命令の全てを実行するハードウェアモジュールを備える。前記ハードウェアモジュールそれぞれは、前記命令のうちの１つを実行する
【００１８】
いくつかの実施形態では、全ての命令が実行される前において出力の最初のコンテンツが特定の入力のコンテンツである場合、前記処理エンジンの出力は前記特定の入力を修正したものである。あるいは、全ての命令が実行される前において出力の最初のコンテンツが全てゼロである場合、前記処理エンジンの出力は新たに生成される
【００１９】
別の構成において、ソフトウェア・デファインド・ネットワーク（ＳＤＮ）処理エンジンにおける並行かつ条件付きのデータ操作方法が提供される。いくつかの実施形態では、前記処理エンジンはプログラム可能である。
【００２０】
前記方法は、Ｎ個の入力を受信することと、前記Ｎ個の入力を、コントロールパスおよびデータパスを通して前記処理エンジンで処理させる（前記処理エンジン中でフローさせる）こととを含む。前記方法はまた、前記Ｎ個の入力から制御ビットを抽出することと、前記Ｎ個の入力のワードを比較することと、前記Ｎ個の入力を遅延キューを介して送信することとを同時に行うことを含む。前記方法はまた、前記制御ビットおよび前記比較からの結果ビットに、複合された、式および条件を実行することで、インデックスを返すことを含む。前記方法はまた、前記インデックスに基づいて、前記Ｎ個の入力をどのように修正するかおよびＭ個の出力をどのように生成するかを導くように構成された命令を検索することを含む。前記方法はまた、並行に前記Ｎ個の入力についての前記命令を実行することで、前記Ｍ個の出力を生成することを含む。
【００２１】
いくつかの実施形態では、前記Ｍ個の出力それぞれのコンテンツが、新たに生成されたコンテンツおよび／または前記Ｎ個の入力のうちの１つの修正されたコンテンツである。
【００２２】
いくつかの実施形態では、前記抽出、前記比較、前記複合された、式および条件、ならびに命令テーブルは、前記処理エンジンの前記コントロールパスにおいて実現され、前記遅延キューおよび前記命令の実行は、前記処理エンジンの前記データパスにおいて実施される。
【００２３】
いくつかの実施形態では、前記処理エンジンの前記Ｎ個の入力および前記Ｍ個の出力それぞれのデータフォーマットは、データサイズを特定するための「長さ」フィールドと、ペイロードの最初のバイトの位置を特定する「オフセット」フィールドと、データの種類を特定する「制御」フィールドと、前記ペイロードを含む「ボディ（本体）」フィールドとを含む。
【図面の簡単な説明】
【００２４】
【図１】本発明の一実施形態によるＳＤＮシステムの並行かつ条件付きのデータ操作のためのＳＤＮ処理エンジンのブロック図である。
【図２】本発明の実施形態による図１のＳＤＮ処理エンジンの各データ入力および出力のフォーマットである。
【図３】本発明の一実施形態によるワード比較コーンのブロック図である。
【図４】本発明の一実施形態によるＭＵＸ／ＣＭＰ論理セルの概要を示す図である。
【図５】本発明の一実施形態によるＭＵＸ／ＬＵＴ論理コーンのブロック図である。
【図６】本発明の一実施形態によるＭＵＸ／ＬＵＴセルの概要を示す図である。
【図７】本発明の一実施形態による命令テーブルのブロック図である。
【図８Ａ】本発明の一実施形態によるコピー命令のフォーマットである。
【図８Ｂ】本発明の一実施形態による図８Ａのコピー命令を実施する概要を示す図である。
【図９Ａ】本発明の一実施形態によるＡＬＵ命令のフォーマットである。
【図９Ｂ】本発明の一実施形態による図９ＡのＡＬＵ命令を実施する概要を示す図である。
【発明を実施するための形態】
【００２５】
上記は、以下の本発明の例示的な実施形態のさらに具体的な説明から明らかになるであろう。添付図面において、異なる図全体にわたり、同様の部分は同様の参照符号で示す。図面は必ずしも原寸に比例しておらず、本発明の実施形態の説明に重点が置かれている。
【００２６】
以下の記載において、多くの詳細が説明を目的として述べられる。しかし、当業者ならば、本発明はこれらの特定の詳細を用いることなく実行可能であることを理解するであろう。このため、本発明は、図示された実施形態に限定されることを意図するものではなく、本明細書で説明される原理および特徴に合致する最大限の範囲に従う。
【００２７】
並行かつ条件付きのデータ操作のためのソフトウェア・デファインド・ネットワーキング（ＳＤＮ）処理エンジンを提案する。ＳＤＮ処理エンジンは装置に含まれる。ユーザは、ユーザがＳＤＮ処理エンジンにサポートさせたい機能およびプロトコルに応じて、データ処理のための条件およびルールをプログラムできる。ＳＤＮ処理エンジンは、最大限のスループットで多数の入力および出力を並行に処理できる。ＳＤＮ処理エンジンは、２つのパス、すなわち、コントロールパスおよびデータパスを含む。コントロールパスは、制御ビット抽出器と、ワード比較コーンと、多段ＭＵＸ／ＬＵＴ論理コーンと、命令テーブルとを含む。コントロールパスは、構成されたネットワーク機能のある特定の条件を入力が満たすか否かを検査する。検査結果に基づいて、コントロールパスは、入力を修正し、かつ／または、新しい出力を生成する命令を生成する。データパスは、遅延整合キューおよび命令実行ブロックを含む。データパスは、コントロールパスが生成する命令を実行する。多数のデータフローを同時に操作するために、全ての命令が並行に実行される。提案される処理エンジンは、プログラム可能であるので、ハードウェアのみによるＡＳＩＣ設計に比べて適用性がかなり高く、そのためＳＤＮ装置で採用できる。
【００２８】
図１は、本発明の実施形態によるＳＤＮシステムの並行かつ条件付きのデータ操作のためのＳＤＮ処理エンジン１００のブロック図を示す。データは、典型的には、２つのパス、すなわち、コントロールパス１０５とデータパス１１０とを通って、ＳＤＮ処理エンジン１００をフローする（流れる）。
【００２９】
コントロールパス１０５は、制御ビット抽出器（ＣＢＥ）１１５と、ワード比較コーン（ＷＣＣ）１２０と、ＭＵＸ／ＬＵＴ論理コーン（ＭＬＬＣ）１２５と、命令テーブル１３０とを含む。コントロールパス１０５は、コーンにおいてプログラムされる条件に応じて命令を生成することを担っている。「コーン」という用語は、本明細書では、種々の複合された、論理式および条件チェックを行うように再構成可能なステージにおける一群の論理要素のことを指す。ある構成では、「コーン」という用語は、論理「クラウド」と呼ばれてもよい。コントロールパス１０５内の全てのブロック１１５〜１３０は、プログラム可能であることが好ましい。
【００３０】
データパス１１０は、遅延整合キュー１３５および命令実行ブロック１４０を含む。データパス１１０は、入力データを修正し、かつ／または、新しい出力データを生成するコントロールパス１０５が生成する命令を実行することを担う。
【００３１】
ＳＤＮ処理エンジン１００は、Ｎ個の入力を受信し、Ｍ個の出力を生成する。ＳＤＮ処理エンジン１００のＭ個の出力それぞれは、新しく生成されたデータでもよく、ＳＤＮ処理エンジン１００へのＮ個の入力のうちの１つを修正したものでもよい。これらのＭ個の出力のコンテンツは、ユーザがどのようにＳＤＮ処理エンジン１００のコントロールパス１０５のブロック１１５〜１３０を構成しプログラムするかに全面的に依存する。
【００３２】
Ｎ個の入力およびＭ個の出力は、それぞれ異なるサイズであってもよいため、Ｎ個の入力およびＭ個の出力がＳＤＮ処理エンジン１００によって適切に処理され得るように、そのサイズはデータフォーマットで特定される。図２は、本発明の実施形態によるＳＤＮ処理エンジン１００の各入力および出力データ２００のデータフォーマットを示す。各入力および出力データ２００は、典型的には４つのフィールド、すなわち、「長さ」フィールド２０５と、「オフセット」フィールド２１０と、「制御」フィールド２１５と、「ボディ」フィールド２２０とを含む。 
【００３３】
「長さ」フィールド２０５は、各データの長さまたはサイズを特定する。サイズは典型的にはバイト数である。「オフセット」フィールド２１０は、データ中の「ボディ」フィールド２２０の最初のバイトの位置を特定する。換言すると、「オフセット」フィールド２１０は、「制御」フィールド２１５のサイズを特定する。「制御」フィールド２１５は、データに含まれる主な機能を特定する最も重要なビットを含む。例えば、「制御」フィールド２１５は、イーサネット（登録商標）フレーム、ＩＰパケット、ＴＣＰアプリケーションデータ、またはルックアップデータ結果などのデータの種類を特定するか、またはデータの優先度を特定する。「ボディ」フィールド２２０はデータの本体すなわちペイロードを含む。
【００３４】
図１に戻って、ＳＤＮ処理エンジン１００は典型的には、処理の前にＮ個の入力全てが利用可能になり、ＳＤＮ処理エンジン１００がＮ個の入力間の相互情報を全て得るまで待機する。Ｎ個の入力全てが、ＳＤＮ処理エンジン１００による処理の前に結合されて、大きなひとかたまりのデータになる。
【００３５】
入力の「制御」フィールドは典型的には入力の最も重要なビットを含む。したがって、これらの制御ビットはＣＢＥ１１５によって抽出される。抽出された制御ビットは全てコントロールパス１０５のＭＬＬＣ１２５でさらに処理されて、ＳＤＮ処理エンジン１００は、入力をどのよう扱い、出力をどのように生成するかを決定できることになる。
【００３６】
一方、Ｎ個の入力は全てＷＣＣ１２０にも送信される。ＳＤＮ処理エンジン１００は、ＷＣＣ１２０において、入力内の特定のワードが入力内の他の特定のワードと等しい（一致する）か、それよりも大きいか、またはそれよりも小さいかをチェックする。ワードのチェック結果は、これらの入力のさらなる処理のための判定を行うのにＳＤＮ処理エンジン１００にとって有用である、入力の関係および特性を示す。
【００３７】
図３は、本発明の実施形態によるワード比較コーン（ＷＣＣ）３００のブロック図を示す。いくつかの実施形態では、図１のＷＣＣ１２０は、ＷＣＣ３００と同様に構成される。ＷＣＣ３００は、Ｋ個の再構成可能な多重化／比較（ＭＵＸ／ＣＭＰ）論理セル３０５を含み、Ｎ個の入力の全てがＭＵＸ／ＣＭＰ論理セル３０５に送信される。ＭＵＸ／ＣＭＰ論理セル３０５は、それぞれ、ワードの比較を行う。ＷＣＣ３００は、ＳＤＮ処理エンジン１００が、Ｎ個の入力についてＫ個のワード比較を並行に行えるようにし、Ｋ個のワード比較結果ビットを返す。
【００３８】
図４は、本発明の実施形態によるＭＵＸ／ＣＭＰ論理セル４００の概要を示す。いくつかの実施形態では、図３のＭＵＸ／ＣＭＰ論理セル３０５は、ＭＵＸ／ＣＭＰ論理セル４００と同様に構成される。ＭＵＸ／ＣＭＰ論理セル４００は、Ｎ個の入力間で２つの特定のＷバイトのワードの比較を行う。ＭＵＸ／ＣＭＰ論理セル４００の構成は、ソフトウェアによるレジスタを介することが好ましい。いくつかの実施形態では、ＭＵＸ／ＣＭＰ論理セル４００の設計で、複数のレジスタおよび複数のマルチプレクサを用いる。「cfg_muxA_SrcID」レジスタは、Ｎ個の入力のうちのどの入力がＭｕｘＡ４０５によって選択されるかを示す。「cfg_muxA_ByteOffset」レジスタは、バイトが取得されることになる選択された入力の開始バイトを示す。この開始バイトの位置から、Ｗ個の連続したバイトが、ＭｕｘＡ４０５によって選択された入力から取得される。同様に、「cfg_muxB_SrcID」レジスタおよび「cfg_muxB_ByteOffset」レジスタを用いて、Ｗバイトが、ＭｕｘＢ４１０によって選択された入力から取得される。Ｗは、典型的には２バイト（１６ビット）または４バイト（３２ビット）である。しかし、Ｗは、他の値であってもよい。いくつかの実施形態では、Ｗは、１つの入力から取得される最大数のバイトを表し、エンジンの設計者によって選ばれる。
【００３９】
典型的には、ＭｕｘＡ４０５およびＭｕｘＢ４１０の２つの選択されたＷバイトのワードが互いに比較されるが、ＭｕｘＡ４０５およびＭｕｘＢ４１０のこれら２つの選択されたワード内の特定のビットのみの比較が必要な場合がある。ユーザが２つの選択されたワード内の特定のビットのみを比較したい場合は、２つのビットマスクレジスタ、すなわち、「cfg_muxA_BitMask」と「cfg_muxB_BitMask」が、選択されたワードとともに使用されてもよい。これらの２つのビットマスクレジスタは、Ｗバイトよりも小さい２つのワードを比較する場合にも用いることができる。例えば、Ｗが４の場合、ビットマスクレジスタは、Ｎ個の入力からの、２つの４バイトのワード、２つの３バイトのワード、２つの２バイトのワード、または２つの１バイトのワードを比較するよう設定され得る。
【００４０】
しかし、Ｎ個の入力からの選択されたワードを、一定値と比較することが必要な場合がある。ユーザが２つの選択されたワードのうちの１つを一定値と比較することを望む場合は、２つのレジスタ、すなわち、「cfg_muxA_IsConst」および「cfg_muxB_IsConst」をビットマスクレジスタとともに使用し得る。特に、「cfg_muxA_IsConst」が１である場合、「cfg_muxA_BitMask」レジスタは、ＭｕｘＡ４０５の一定値となる。同様に、「cfg_muxB_IsConst」が１である場合、「cfg_muxB_BitMask」レジスタはＭｕｘＢ４１０の一定値となる。ビットマスクレジスタを一定値のために再利用することで、有利なことに、ＭＵＸ／ＣＭＰ論理セルのハードウェアのコストが削減される。
【００４１】
ＭＵＸ／ＣＭＰ論理セル４００の望ましい比較動作は、「cfg_CompareCode」レジスタを用いることで選択される。いくつかの実施形態では、３つの比較動作、すなわち、等しい（＝＝）、より大きい（＞）、およびより小さい（＜）、がサポートされる。ＭＵＸ／ＣＭＰ論理セル４００は、比較結果が真か偽かを示す１ビットの出力を返す。
【００４２】
より多いまたはより少ない比較動作をサポートできるが、異なる動作を、２つのＭＵＸ／ＣＭＰ論理セルを用いるだけで行うことができる。例えば、以上（＞＝）の動作が必要である場合、第１のＭＵＸ／ＣＭＰ論理セルを用いて、「より大きい」の動作を行うことができ、第２のＭＵＸ／ＣＭＰ論理セルを用いて「等しい」の動作を行うことができる。これら２つのＭＵＸ／ＣＭＰ論理セルからの結果である２ビットは、比較が真か偽かを示す（すなわち、１１は真を示し、１０と０１は共に偽を示す）。
【００４３】
図３に戻って、ＷＣＣ３００内のＫ個のＭＵＸ／ＣＭＰ論理セル３０５は、Ｋ個のワード比較結果ビットを返る。これら結果ビットは、それぞれ、Ｋ個のＭＵＸ／ＣＭＰ論理セル３０５のうちの１つからのものである。１つのワード比較コーン内にあるＭＵＸ／ＣＭＰ論理セルが多いほど、より多くのワード比較動作が並行に行われ得るが、その分ハードウェアを要することを理解されたい。Ｋは、典型的には８から３２である。しかし、ＫがＳＤＮ処理エンジンの入力数（例えば、Ｎ）未満でない限りにおいて、Ｋは他の値であってもよい。
【００４４】
図１に戻って、ＣＢＥ１１５からの抽出された制御ビットおよびＷＣＣ１２０からのＫ個の結果ビットは全て結合されて、ＭＬＬＣ１２５に送信される。ＭＬＬＣ１２５は、好ましくは構成変更可能である。ＭＬＬＣ１２５は、制御ビットおよびＫ個の結果ビットの中の特定のビットが、ユーザがＳＤＮ処理エンジン１００のために構成したネットワーク機能のある条件を満たすか否かをチェックする。チェック結果に基づいて、ＭＬＬＣ１２５は、入力を修正し、かつ／または、新しい出力を生成する命令を生成する、命令テーブル１３０を読み取るためのインデックスを駆動する。
【００４５】
図５は、本発明の実施形態によるＭＵＸ／ＬＵＴ論理コーン（ＭＬＬＣ）５００のブロック図を示す。いくつかの実施形態では、図１のＭＬＬＣ１２５は、ＭＬＬＣ５００と同様に構成される。ＭＬＬＣ５００はＳ個のステージを含み、ステージｉはＰｉ個の多重化／ルックアップ（ＭＵＸ／ＬＵＴ）セル５０５を含む。ステージ０に対する入力ビットはＣＢＥ１１５のような制御ビット抽出器からの制御ビットとＷＣＣ１２０のようなワード比較コーン１２０からのＫ個の結果ビットの全てである。ステージ０の出力ビットは、ステージ１の入力ビットである。一般に、ステージｉのＭＵＸ／ＬＵＴセル全ての出力ビットは、ステージｉ＋１のＭＵＸ／ＬＵＴセルの入力ビットである。最後のステージの出力ビットは、図１の命令テーブル１３０を読み取るためのアドレスであるインデックスを形成する。
【００４６】
図６は、本発明の実施形態によるＭＵＸ／ＬＵＴセル６００の概要を示す。いくつかの実施形態では、図５のＭＵＸ／ＬＵＴセル５０５は、ＭＵＸ／ＬＵＴセル６００と同様に構成される。ＭＵＸ／ＬＵＴセル６００は、入力ビットからのＬ個の特定ビットの選択を可能にするＬ個のマルチプレクサ（ＭＵＸ）６０５を含む。これらのＬ個のＭＵＸ６０５は、好ましくは、Ｌ個のレジスタを介して再構成される。これらＬ個のＭＵＸ６０５からのＬ個の選択されたビットは、再構成可能なルックアップテーブル（cfg_LUT）６１０を指し示すインデックスを形成する。cfg_LUT６１０は、Ｌビットのインデックスに対応する２Ｌ個のビットを有する。ＭＵＸ／ＬＵＴセル６００への入力それぞれに対して、１つの結果ビットのみが、cfg_LUT６１０によって返される。いくつかの実施形態では、cfg_LUT６１０は典型的にはエントリ数が少なく各エントリは１ビットのみであるので、cfg_LUT６１０はフロップから構成される。
【００４７】
ＭＵＸ／ＬＵＴセル６００は、入力ビットから選択されたＬ個のビットの任意のブール式を実行するように構成される。例えば、（１）Ｌは３であり、（２）３つの選択されたビットはａ、ｂ、およびｃであり、（３）ブール式Ｘ＝（ａ＆ｂ｜ｃ）がチェックされる、と仮定する。ａおよびｂの両方が１であるまたはｃが１である場合、Ｘは１である。ａ、ｂおよびｃがインデックスＩの３つのビットである場合、Ｉが１１０（２）＝６、１１１（２）＝７、００１（２）＝１、０１１（２）＝３、または１０１（２）＝５であれば、Ｘは１である。そのため、８ビットのcfg_LUTは１１１０１０１０（２）としてプログラムされる。
【００４８】
図５に戻って、ＭＬＬＣ５００の各ステージは、複数のＭＵＸ／ＬＵＴセル５０５を含むので、各ステージは、入力ビットの数個のブール式をチェックすることを並行に行うことができる。そして、ＭＬＬＣ５００は複数のステージを含むので、ＭＬＬＣ５００は復号の式を並行にチェックできる。ＭＬＬＣ５００の各ステージは、同じまたは異なる数のＭＵＸ／ＬＵＴセル５０５を含んでもよい。
【００４９】
１つのＭＵＸ／ＬＵＴセル内のＭＵＸが多いほど、１つのステージ内のＭＵＸ／ＬＵＴセルが多いほど、および／またはＭＬＬＣ内のステージが多いほど、ＳＤＮ処理エンジンのチェック能力がより強力になるが、その分ハードウェアを要することを理解されたい。１つのＭＵＸ／ＬＵＴセルは、典型的には、４つから６つのＭＵＸを有し、１つのステージは、典型的には３２から１２８のＭＵＸ／ＬＵＴセルを有し、ＭＬＬＣ５００は、典型的には、３つから６つのステージを有する。しかし、１つのＭＵＸ／ＬＵＴセル内のＭＵＸは、より多くてもまたはより少なくてもよい。１つのステージ内のＭＵＸ／ＬＵＴセルも、より多くてもまたはより少なくてもよい。同様に、ＭＬＬＣ内のステージは、より多くてもまたはより少なくてもよい。
【００５０】
特定の式および条件を実行するように図１のＭＬＬＣ１２５をプログラムするために、合成ツールを用いてこれらの式を論理コーン構造にマッピングしてもよい。例えば、カリフォルニア大学バークレー校で科学者たちによって開発されたＡＢＣと名付けられたオープンソースを用いて、（イーサネット（登録商標）、ＶＬＡＮ、ルーティング、ブリッジング、ｉＶＩＦ、ＡＣＬルックアップなどの）数個のネットワークプロファイルおよびプロトコルを表す式および条件をＭＬＬＣ１２５にマッピングできる。
【００５１】
ＭＬＬＣ１２５は、命令テーブル１３０を読み取るための命令テーブルインデックスを返す。これらのテーブルインデックスは、入力群毎に論理コーンでプログラムされる条件と式の結果である。異なる入力に対して、ＭＬＬＣ１２５が出力するテーブルインデックスは異なり得る。その結果、異なる命令を命令テーブル１３０が返すことになるであろう。これらの命令は、ＳＤＮ処理エンジン１００のデータパス１１０において、ＳＤＮ処理エンジン１００への入力をどのように修正するべきか、かつ出力をどのように生成するべきかを導く。
【００５２】
ＳＤＮ処理エンジン１００には、Ｔ個の命令テーブルが備えられる。ＳＤＮ処理エンジン１００はＭ個の出力を有するので、Ｍ個の出力それぞれが少なくとも１つのテーブルに関連づけられるように、Ｔは少なくともＭに等しいことが必要である。ＳＤＮ処理エンジン１００の１つの出力は、複数の命令テーブルに関連づけられてもよいが、１つのテーブルが２つ以上の出力に属すことはできない。複数の命令テーブルをＳＤＮ処理エンジンの各出力ポートに割り当てることは、ＳＤＮ処理エンジンの設計者によって選択される設計選択事項である。
【００５３】
図７は、本発明の実施形態による命令テーブル７００のブロック図を示す。いくつかの実施形態では、図１の命令テーブル１３０は命令テーブル７００と同様に構成される。各テーブル７０５の読み出しアドレスは、ＭＬＬＣ１２５などのＭＬＬＣの出力ビットから取得される。テーブルｉはＡｉビットのアドレスを有し、これは、テーブルｉは最大２Ａｉのエントリを有することを意味する。テーブル７０５のエントリが多いほど、対応する出力データを操作するエンジン柔軟性はより高くなるが、その分ハードウェアを要することを理解されたい。テーブル７０５のエントリの数は、典型的には、１６から２５６であり、これはテーブル７０５のアドレス幅が４ビットから８ビットであることを意味する。しかし、テーブル７０５のエントリはより多くてもまたはより少なくてもよい。いくつかの実施形態では、テーブル７０５は、ＳＲＡＭメモリからまたはフロップのアレイから構成される。
【００５４】
テーブルｉの各エントリは、Ｑｉ個の命令を含む。そのため、テーブルｉは、入力データが入手可能な周期毎にＱｉ個の命令を返すことになる。これらＱｉ個の命令は全てＳＤＮ処理エンジンのデータパスにおいて並行に実行されて、テーブルｉと関連づけられた出力ｊを生成する。
【００５５】
命令は全てデータパスにおいて並行に実行される。テーブルにおけるエントリ毎の命令が多いほど、並行に実行できる各出力のデータ操作動作は多くなるが、その分ハードウェアを要することを理解されたい。入力から修正される出力については、対応するテーブルのエントリ毎の命令の数は、典型的には４から８である。新たに生成される出力については、対応するテーブルのエントリ毎の命令の数は、典型的には８から１６である。
【００５６】
図１に戻って、命令テーブル１３０が返す命令は全て、データパス１１０内の命令実行ブロック１４０に送信されて、命令実行ブロック１４０がこれら全ての命令を並行に実行する。データパス１１０において命令が実行される前に、ＳＤＮ処理エンジン１００へのＮ個の入力の全てが、コントロールパス１０５の遅延との整合のために遅延整合キュー１３５を通る。遅延整合キュー１１０は、コントロールパス１０５からの命令が、対応する遅延された入力に適合する時間に受信されるように、コントロールパス１０５の遅延に等しい深さを有するＦＩＦＯまたはシフトレジスタであってもよい。さらに、遅延整合キュー１３５は、ＳＤＮ処理エンジン１００が、入力ポートで、バックツーバックデータで最大限のスループットを達成することを保証する。
【００５７】
いくつかの実施形態では、２種類の命令がＳＤＮ処理エンジン１００によってサポートされる。それらはコピー命令とＡＬＵ命令である。コピー命令は、１つの入力から特定のバイトをコピーすることとそれらを１つの出力の特定の位置に貼り付ける（ペーストする）こととを行う。ＡＬＵ命令は、複数の入力から２つの特定のワードを取得し、次いでＡＬＵ動作を行い、最終的にＡＬＵ結果を１つの出力の特定の位置に貼り付ける。２種類の命令がＳＤＮ処理エンジン１００によってサポートされるが、より多くまたはより少ない命令がＳＤＮ処理エンジン１００によってサポートされてもよい。
【００５８】
図８Ａは、本発明の実施形態によるコピー命令８００のフォーマットを示す。図８Ｂは、本発明の実施形態によるコピー命令８００を実施する概要を示す。典型的には、ハードウェア設計８５０が、ＳＤＮ処理エンジンのデータパス１１０においてコピー命令８００を実行する。
【００５９】
「En」フィールド８０５は、この命令が実行されるか否かを示す。この命令が有効な場合（ビット「En」が１）、次いで「Src_ID」フィールド８１０を用いて複数の入力のうちの１つの入力を選択する。「Src_ByteOffset」フィールド８１５は、最大Ｃバイトがコピーされる選択された入力の開始バイト位置を指し示す。いくつかの実施形態では、Ｃは、４バイトと８バイトの間である。「BitMask」フィールド８２０を用いて、コピーされたバイト内の特定のビットをマスクする。これにより、ユーザは、Ｃバイト全体のコピーに加えてＣバイト未満または数ビットのコピーを行うことができる。コピー命令８００はまた、「IsConst」フィールド８０５を１に設定することで一定値をコピーすることを可能にする。この場合、一定値は、「BitMask」フィールド８２０によって与えられる。最後に、コピーおよびマスクされたバイトまたは一定のバイトが、宛先出力に貼り付けられる。それらは、「Dst_ByteOffset」フィールド８３０によって与えられる開始位置で、対応する出力のバイトに上書きされる。
【００６０】
図９Ａは、本発明の実施形態によるＡＬＵ命令９００のフォーマットを示す。図９Ｂは、本発明の実施形態によるＡＬＵ命令９００を実施する概要を示す。典型的には、ハードウェア設計９６０が、ＳＤＮ処理エンジンのデータパス１１０においてＡＬＵ命令９００を実行する。
【００６１】
「En」フィールド９０５は、この命令が実行されるか否かを示す。コピー命令８００と同様に、「SrcA_ID」フィールド９１５、「SrcA_ByteOffset」フィールド９２０、および「SrcA_BitMask」フィールド９２５を用いて、ｓｒｃＡのための入力から最大Ｗバイトをコピーしマスクする。「SrcB_ID」フィールド９３５、「SrcB_ByteOffset」フィールド９４０、および「SrcB_BitMask」フィールド９４５を用いて、ｓｒｃＢのための入力から最大Ｗバイトをコピーしマスクする。ユーザは、ｓｒｃＡまたはｓｒｃＢのために一定値を割り当てることもできる。「SrcA_IsConst」フィールド９３０が１に設定される場合、ｓｒｃＡは、「SrcA_BitMask」フィールド９２５に設定された値に等しい一定値を有する。「SrcB_IsConst」フィールド９５０が１に設定される場合、ｓｒｃＢは「SrcB_BitMask」９４５に設定された値に等しい一定値を有する。コピーされるバイト数Ｗは、ＡＬＵのサポートされるビット幅に応じて予め定められる。Ｗは、典型的には、２バイト（１６ビット）または４バイト（３２ビット）である。しかし、Ｗは他の値であってもよい。
【００６２】
ｓｒｃＡおよびｓｒｃＢのためのコピーされたバイトまたは一定値は、ＡＬＵの２つの入力オペランドになる。ＡＬＵの演算は、「OpCode」フィールド９１０によって選択される。ＳＤＮ処理エンジンにとって最も有用な演算は、加算（＋）、減算（−）、ビット単位のＡＮＤ（＆）、ビット単位のＯＲ（｜）、ビット単位のＸＯＲ（＾）、ビット単位の左シフト（＜＜）、およびビット単位の右シフト（＞＞）である。ＡＬＵ命令は、ゼロのソースのバイト単位のＯＲまたは加算として演算を構成することでコピー命令としても用いられる。ＡＬＵの結果は、次いで「Dst_ByteOffset」フィールド９５５によって与えられる開始バイト位置で宛先出力に貼り付けられる。
【００６３】
出力は、全ての命令が実行される前においてその最初のコンテンツが特定の入力のコンテンツである場合、その特定の入力を修正したものである。出力は、全ての命令が実行される前においてその最初のコンテンツが全てゼロである場合、新たに生成される。
【００６４】
各出力は、それ自身の命令テーブルを有し、各命令テーブルは多数の命令を返す。これらの命令の全てが並行に実行されて対応する出力を構築する。ＳＤＮシステムでは、ＡＬＵ動作よりも、コピー動作を使用することが多い。さらに、ＡＬＵ命令はより複雑であり、そのため、コピー命令の場合よりもハードウェアコストが大きくなる。したがって、費用効率が最も高い設計を達成するため、各テーブルのエントリは、典型的には１つから２つのＡＬＵ命令を有するのみであり、残りはコピー命令である。
【００６５】
本発明の実施形態は、ソフトウェア・デファインド・ネットワーク（ＳＤＮ）処理エンジンにおける迅速な条件付きのデータの修正および生成に関する。多数の入力の修正および多数の出力の生成を、並行に行うことができる。各入力または出力データのサイズは、何百バイトのように大きくてもよい。処理エンジンは、コントロールパスおよびデータパスを含む。コントロールパスは、入力の修正および新しい出力の生成のための命令を生成する。データパスは、コントロールパスが生成する全ての命令を実行する。処理エンジンは、典型的には、処理エンジンがサポートするネットワーク機能およびプロトコルに応じて、データ修正および生成のための条件およびルールを再構成できるように、プログラム可能である。ＳＤＮ処理エンジンは、多数の大きいサイズのデータフローを処理することを可能とし、このようなデータを操作することにおいて効率的である。ＳＤＮ処理エンジンは、多数のバックツーバックの入力および出力データフローを用いて最大限のスループットを達成する。
【００６６】
当業者ならば、他の使用法や利点もまた存在することを理解するであろう。本発明を様々な特定の詳細を参照に説明したが、当業者ならば、本発明の精神から逸脱することなく本発明が他の特定の形式で実施され得ることを理解するであろう。したがって、当業者ならば、本発明が上述の例示の詳細によって限定されず、添付の請求項によって定義されることを理解するであろう。
【図１】
2015165649.tif 000003
【図２】
2015165649.tif 000004
【図３】
2015165649.tif 000005
【図４】
2015165649.tif 000006
【図５】
2015165649.tif 000007
【図６】
2015165649.tif 000008
【図７】
2015165649.tif 000009
【図８Ａ】
2015165649.tif 000010
【図８Ｂ】
2015165649.tif 000011
【図９Ａ】
2015165649.tif 000012
【図９Ｂ】
2015165649.tif 000013
【外国語明細書】
2015165649000001.pdf
2015165649000002.pdf
2015165649000003.pdf
2015165649000004.pdf