(57)【特許請求の範囲】
【請求項１】
パケットをその先頭から順次受信するパケットレジスタと、
該パケットの処理手順を記述したプログラムを保持する実行プログラム保持部と、
与えられたパケットの長さ及び該プログラムに基づいて実行するプログラムの命令数を決定し、該プログラムの実行を制御するプログラム実行制御部と、
を備えたことを特徴とするパケット処理プロセッサ。
【請求項２】
パケットをその先頭から順次受信するパケットレジスタと、
該パケットの処理手順を記述したプログラムを保持する実行プログラム保持部と、
与えられたパケットの長さ及び該プログラムに基づいて実行する命令数を決定し、該プログラムの実行を制御するプログラム実行制御部と、
内部状態を保持する内部状態保持部と、
を備えたパケット処理プロセッサを少なくとも２つ縦続接続し、現段のパケット処理プロセッサの該内部状態及び出力パケットを前段のパケット処理プロセッサに与えることを特徴としたパケット処理プロセッサシステム。
【請求項３】
現在、パケットの先頭について駆動しているパケット処理プロセッサを指称する現段のパケット処理プロセッサと、時間軸上の未来に駆動するパケット処理プロセッサを指称する前段のパケット処理プロセッサ又は時間軸上の過去に起動されたパケット処理プロセッサを指称する後段のパケット処理プロセッサと、を有するパケット処理プロセッサシステムにおいて、
該パケット処理プロセッサは、パケットをその先頭から順次受信するパケットレジスタと、該パケットの処理手順を記述したプログラムを保持する実行プログラム保持部と、該プログラムの実行を制御するプログラム実行制御部と、を備え、
該現段のパケット処理プロセッサの出力パケットが、該前段のパケット処理プロセッサに与えられるように、該パケット処理プロセッサを少なくとも２つ縦続接続し、
該現段のパケット処理プロセッサのプログラム実行制御部が、該前段のパケット処理プロセッサ又は該後段のパケット処理プロセッサのプログラム実行制御部に対して、命令獲得タイミング及び命令獲得位置を指示することを特徴としたパケット処理プロセッサシステム。
【請求項４】
請求項３において、
該プログラム実行制御部が、与えられたパケットの長さ及び該プログラムに基づいて実行するプログラムの命令数を決定することを特徴としたパケット処理プロセッサシステム。
【請求項５】
請求項２又は３において、
該プログラム実行制御部は、命令獲得を所定の命令実行クロック分だけ行わないことを特徴としたパケット処理プロセッサシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はパケット処理プロセッサ及びパケット処理プロセッサシステムに関し、特に、パケット中継装置等において、入力されたパケットに対して所定のパケット処理を行うパケット処理プロセッサ及びパケット処理プロセッサシステムに関するものである。
【０００２】
近年、通信技術の進歩に伴い、コンピュータやさまざまな情報処理機器（端末）間でデータを交換するLAN(Local Area Network)等のプライベートなネットワークを相互接続したグローバルなネットワークシステムが構築されている。
このグローバルネットワークシステムにおける通信は、例えば、OSI(Open Systems Interconnection)モデルにおける各層（レイヤ）毎に種々の通信プロトコルに従って行われる。現在、主流の通信プロトコルは、OSIモデルのトランスポート層/ネットワーク層に相当する層においては、それぞれ、TCP/IP(Transport Control Protocol/Internet Protocol)プロトコルである。
【０００３】
TCP/IPプロトコルによる端末間の通信は、データ及びヘッダ情報で構成されたパケットで行われる。IPプロトコルはコネクションレス型のプロトコルであり、LAN間を相互接続するパケット中継装置（例えば、ルータ）は、パケットを宛先端末にルーティングするため、パケットのヘッダ情報に基づき、宛先テーブルの検索やヘッダ書換処理等のパケット処理を行う必要がある。
【０００４】
【従来の技術】
IPプロトコルにおけるパケット処理には、上記の宛先テーブル検索処理及びヘッダ書換処理の他に、入力されたパケットのヘッダのチェックサム計算等のパケットを中継するために必要な処理、さらに、ネットワークにおける通信を制限するためのパケットフィルタリング処理等がある。また、このパケット処理は、レイヤ毎の種々のプロトコルによって異なる。
【０００５】
レイヤ毎の種々のプロトコルに対応したパケット処理を行う専用の回路をハードウェアのみで構成した場合、回路構成は煩雑であり、さらに、プロトコル自体の改訂に伴う処理手順の変更に対応することは極めて困難である。
そこで、種々のプロトコルに対応するため、また、プロトコル自体の改訂に対応するため、従来、パケット処理は、汎用プロセッサによってソフトウェア処理されるのが一般的である。
【０００６】
［１］パケット処理プロセッサ
図12は、従来の汎用プロセッサ102の構成例を示している。このプロセッサ102は、演算部10、内部汎用レジスタ11、内部状態保持部12、制御部13、及び外部バスバッファ14で構成されている。また、プロセッサ102には、外部のメモリ120がバス110によって接続されている。
【０００７】
入力パケット201は、メモリ120に一時的に格納される。プロセッサ102は、パケット201又はその一部をメモリ120から内部汎用レジスタ11に読み込み、所定のパケット処理をソフトウェアで実行した後、処理後のデータを内部汎用レジスタ11から外部メモリに書き込み、パケット201からパケット202を再構成する。このパケット202は、例えば、パケット中継装置に含まれる次段のスイッチファブリック（図示せず）にバス110を経由して出力される。
【０００８】
このような、汎用プロセッサ102、外部メモリ120、及びバス110で構成されたパケット処理には、バス110を経由した入力パケット201/出力パケット202のメモリ120に対する書込/読出と、同じバス110を経由したプロセッサ102からメモリ120に格納された入力パケット201/出力パケット202のアクセス（読出/書込）とに起因するオーバヘッド(overhead)が発生する。
【０００９】
このオーバヘッドに加えて、メモリ120自身のアクセス帯域幅の制限により、パケット処理の高速化が難しいという問題点があった。
この問題を解決するため、図13に示した特開2000-349816号におけるパケット処理プロセッサ101は、上記のメモリ120の代わりに入力パケット201を直接取り込むパケットデータアクセスレジスタ（パケットデータ保持部70に含まれているものであり、図示せず。）を備えている。
【００１０】
すなわち、プロセッサ101は、演算部10、内部汎用レジスタ11、実行プログラム保持部20、プログラム起動部30a、制御部40a、内部状態保持部50、パケットデータ入力部60、パケットデータ保持部70、パケットデータ出力部80、及び中間データ保持部90で構成されている。
【００１１】
以下に各構成要素の動作を説明する。
パケットデータ入力部60は、受信パケット201が到着したことを外部からのパケット到着信号221によって検知し、パケット201をパケットの先頭から、転送クロックに同期して、順次、パケットデータ保持部70内のパケットデータアクセスレジスタ群（図示せず）へ直接格納する。
【００１２】
プログラム起動部30aは、パケットデータ入力部60からの受信パケット転送タイミング信号222に同期してプログラムの起動を行う。
パケットデータ保持部70は、パケットデータ入力部60から入力したパケットデータの一部或いは全てをレジスタに格納する。中間データ保持部90は、該パケットデータに対する処理結果を格納するレジスタ群（図示せず）を備えている。
【００１３】
保持部70，90が備えているこれらのレジスタは、いずれもプログラムからアクセス可能なレジスタである。パケットデータ保持部70と中間データ保持部90の各レジスタに保持されたデータは、レジスタ群内の隣のレジスタへ、転送クロックに同期して順次、移動して行きパケットデータ出力部80へ出力される。
【００１４】
パケットデータ出力部80は、入力パケット201に対する処理結果であるパケット202をプロセッサ101外へ逐次送出する。
演算部10は、四則演算などの各種オペレーションを行い、内部汎用レジスタ11はプログラムで使用する汎用のレジスタである。演算部10は、内部汎用レジスタ11、保持部70のレジスタ、及び保持部90のレジスタが使用できる。これらオペレーションの結果（キャリーフラグ等）は、内部状態として内部状態保持部に逐次保持される。
【００１５】
実行プログラム保持部20は、実行する命令（例えば、マイクロコード等）で構成されたプログラムを保持している。
制御部40aは、プログラム起動部30aからの起動指示信号233によって、実行プログラム保持部20から命令の獲得を開始し、獲得した命令をデコードして処理を決定し、例えば、プログラムバンク値の切り替え、所定のレジスタに対する演算、データ転送の処理を実行するとともに、各部の内部状態に応じて次状態を決定する。これらの内部状態は、内部状態保持部50に保持される。
【００１６】
そして、制御部40aは、プログラムカウンタを１つインクリメントして次の命令を獲得し、この命令に対応する処理を実行することを繰り返し、予め定まっている命令数を実行すると動作を終了し、次パケットに対する起動指示信号233を待つ。
【００１７】
図14は、命令を獲得するプログラム実行制御例をより詳細に示している。このプログラム実行制御は、制御部40aに含まれる+1加算器35及びプログラムカウンタ33が行う。実行プログラム保持部20に含まれるメモリ21は、L個のバンク0，バンク1，…，バンクL-1で構成され、このバンクの切替は、制御部40aからのバンク切替信号224で行われる。
【００１８】
各バンク0〜(L-1)には、プロセッサ101において１パケットに対して実行可能な最大命令数Nのマイクロコードを格納することができる。このマイクロコードは、条件及び命令で構成されている。マイクロコードは、メモリ21にメモリアドレス225及びバンク切替信号224を与えることにより獲得することができる。
【００１９】
メモリアドレス225を出力するプログラムカウンタ33は、初期状態でアドレス0に設定され、命令実行開始後、+1加算器35で命令実行クロック毎に“１”だけ加算され、順次アドレス1，アドレス2，…，アドレスN-1を指定する。
また、バンク切替信号224は、初期状態でバンク0を出力し、命令実行開始後、例えば、プログラムカウンタ33が、アドレス4，アドレス6，…を示した時点でそれぞれ、バンク1、バンクL-1，…を指定する信号に切り替わる。この結果、命令は、マイクロコードMC0，MC1，…，MC4，…，MC6，MC7，…の順で選択され、実行されることになる。
【００２０】
入力パケット201は、入力部60を経由して、パケットデータ保持部70のレジスタに格納され、このパケットのデータ及びヘッダ情報は、マイクロコードMC0，MC1，…に基づきパケット処理される。
このとき、パケット201のヘッダ情報及びデータは、演算部10及び内部汎用レジスタ11に高速でアクセスされ、図12に示したプロセッサ102とメモリ120と間のパケットデータに関する読出/書込処理のオーバヘッドを解消している。
【００２１】
このパケット処理プロセッサ101は、高速なパケット処理を実現するばかりでなく、実行プログラム保持部に保持されたマイクロコードによるパケット処理手順記述が可能になるという柔軟性を備えている。
［２］パケット処理プロセッサシステム
図15に示した特願2000-373732号のパケット処理プロセッサシステムは、図13に示したパケット処理プロセッサ101_1，101_2，…（以後、符号101で総称することがある。）を直列接続し、現段のパケット処理プロセッサ101のパケット処理結果出力（パケット202、中間データ、内部状態234等）を前段のパケット処理プロセッサ101のデータ入力としている。
【００２２】
ここで、パケット処理プロセッサシステムにおけるパケット処理プロセッサの「前段」および「後段」について図８に基づき、次のように定義しておく。すなわち、パケットデータ保持部（パケットレジスタ）70内を移動するパケット201に対して順に起動されて行く複数のパケット処理プロセッサ100の群において、あるパケット201に着目する時、現在このパケットの先頭について駆動されているパケット処理プロセッサ100を基準（現段）として、その後段のパケット処理プロセッサは時間軸上の過去に起動されたパケット処理プロセッサ100を指し、前段のパケット処理プロセッサは時間軸上の未来に駆動されるパケット処理プロセッサ100を指すものとする。
【００２３】
このパケット処理プロセッサシステムは、例えば、所定のパケット処理が複雑であるため、プログラムの命令ステップ数が大きい場合、パケット処理を分割し、分割した処理の命令ステップを各パケット処理プロセッサ101に割り当てるパイプライン処理(pipelining)が可能である。
【００２４】
これにより、パケット処理プロセッサ101一個当たりの命令ステップ数を一定値以下にすることで、高い所要処理性能（スループット）を維持したまま、高速かつプログラマブルなパケット処理が可能となる。
【００２５】
【発明が解決しようとする課題】
［１］パケット処理プロセッサ
従来のパケット処理プロセッサ101が１つのパケットに対して実行可能な命令数Nは、要求スループット、命令実行クロック速度、パケットデータ保持部70のデータ転送幅、及びその転送クロック速度で決定される有限の値である。
【００２６】
この値は、例えば、要求スループットが速くなればなるほど小さくなり、プロセッサ101が実行するパケット処理内容が限定されてしまう。
また、パケット処理プロセッサ101は、パケット201が到着したことを示すパケット到着信号221に同期してプログラムの起動を行うため、アクセス可能なパケットデータの範囲も、命令実行クロック速度とパケットデータ保持部70のデータ転送幅および転送クロック速度によって制限される。
【００２７】
すなわち、実行可能なステップ数の命令を実行する間に、パケットデータの先頭からパケットデータ保持部70に格納可能な位置までがアクセス可能な範囲となる。従って、パケットデータ保持機構のデータ転送幅／転送クロック速度／レジスタ（パケットデータ保持部70に含まれる）段数が大きければ大きいほどアクセス可能なパケット範囲は広がるが、このレジスタ幅／段数は最終的にハード規模などを考慮して決定される有限の値である。
【００２８】
従って、例えば、階層構造を持つネットワークのモデルにおいて、より上位のプロトコル或いはデータの中身にアクセスする必要がある場合、実行可能命令数及びアクセス可能なパケット範囲が制限されると言う問題がある。
［２］パケット処理プロセッサシステム
そこで、パケット処理に必要な命令数が実行可能命令数を超える場合、図15に示したパケット処理プロセッサシステムを構成し、パイプライン処理方式で１つのパケットに対する実行可能な命令数を大きくした。
【００２９】
しかしながら、図15に示したパケット処理プロセッサシステムにおいて一つのパケット処理プロセッサ101当りの実行可能命令数（命令ステップ数）は有限値であり、実行可能命令数及びアクセス可能なパケット範囲が制限されるという問題はある。
【００３０】
従って、パケット処理プロセッサ101を直列に接続したパケット処理プロセッサシステム全体の処理量も物理的なデバイスレベルでは有限の命令ステップ数であり、ハードウェア製造後、或いは製品出荷後の機能追加などに対応するには余剰ステップ内で実現可能な処理にのみ対応可能である。
【００３１】
将来の機能追加を考慮する時、実装済みのハードウェアにおいて実現可能な命令ステップ数を越える処理を必要とする可能性がある場合には、充分な命令ステップ数を確保するために、デバイスレベルでさらに多段に接続しておく必要がある。
【００３２】
しかしながら、パケット処理の多くは基本的な処理で十分であり、オプション処理や将来の機能追加のためにハードウェア（デバイス）を追加配備することはハードウェア規模並びにコスト面からみても得策ではない。
上述したように、ネットワークの各プロトコルは階層構造を持っている。これに伴い、データを伝送するパケットも、階層構造を持っている。さらに、特定のプロトコルのパケットは、可変長のヘッダ構造を有するものがある。
【００３３】
現在主流であるIPv4(Internet Protocol version4)プロトコル以外にも、IPv6(Internet Protocol version6)プロトコルやMPLS(Multi-Protocol Label Switching)プロトコルといったプロトコルがある。
図16(1)は、IPv4プロトコルのヘッダを示している。このヘッダは、バージョン、ヘッダ長、サービスタイプ、トータル長、識別子、フラグ、フラグメントオフセット、生存時間、プロトコル、ヘッダチェックサム、送信元アドレス、宛先アドレス、オプション（可変長）、及びパディングの各フィールドで構成されている。
【００３４】
ヘッダ長(IHI:Internet Header Length)フィールドには、IPヘッダ自身の長さを示す情報が設定されている。この情報によって、IPv4のヘッダ長を知ることができる。
同図(2)は、IPv6プロトコルのヘッダを示している。このヘッダは、バージョン、優先度、フローラベル、ペイロード長、次ヘッダ、ホップリミット、送信元アドレス、及び宛先アドレスの各フィールドで構成され、その長さは固定長の40バイトである。
【００３５】
次ヘッダフィールドには、拡張ヘッダを利用する場合、IPv6ヘッダに続く拡張ヘッダのタイプを示す情報が設定される。
同図(3)は、IPv6プロトコルの拡張ヘッダ例を示している。この拡張ヘッダは、次ヘッダ及びヘッダ拡張長等のフィールドで構成され、拡張ヘッダ長は、８バイト×ｎに任意バイト長であり、その長さは、ヘッダ拡張長フィールドに設定される。
【００３６】
次ヘッダフィールドには、さらに、拡張ヘッダを利用する場合、自ヘッダに続く拡張ヘッダのタイプを示す情報が設定され、拡張ヘッダを利用しない場合、上位のプロトコル番号が設定される。
IPv6拡張ヘッダを含めたIPv6ヘッダの長さを知るためには、同図(2)に示したIPv6ヘッダ中の「次ヘッダフィールド」を参照して、IPv6ヘッダ以後にIPv6拡張ヘッダが続くか否か、続く場合にはどのようなタイプのIPv6拡張ヘッダであるかを識別すると共に、「ヘッダ拡張長さフィールド」の値で現在の拡張ヘッダの長さを知る。
【００３７】
さらに、同図(3)に示した拡張ヘッダの次ヘッダフィールドを参照し、IPv6拡張ヘッダが、さらに続くか否か、続く場合にはどのようなタイプのIPv6拡張ヘッダかを識別する。拡張ヘッダが続かない場合まで、この識別を繰り返すことにより、拡張ヘッダを含めたIPヘッダの長さを知ることができる。
【００３８】
同様にして、固定長又は可変長のヘッダを有するパケットの所定のフィールドのデータにアクセスするが可能になる。
図17(1)は、MPLSのシム(Shim)ヘッダを示している。このシムヘッダは、ラベル、実験用予備、Sビット、及び生存時間の各フィールドで構成されている。このシムヘッダでは、Sビットを参照して、さらにシムヘッダが続くか、或いはペイロードが続くかを識別して、連続したシムヘッダの全体の長さを知ることができる。
【００３９】
図17(2)は、TCPプロトコルのヘッダを示している。このヘッダは、送信元ポート番号、宛先ポート番号、シーケンス番号、受信確認番号、データオフセット、予約、コントロールフラグ、ウインドウ、チェックサム、緊急ポインタ、オプション、及びパディングの各フィールドで構成されている。
【００４０】
図18は、階層化されたパケット例を示している。この例では、上位相のTCPパケットが、IPv6パケットのデータ（ペイロード）フィールドに収容されている。また、IPv6ヘッダは、IPv6基本ヘッダ（固定長、図16(2)参照）と任意段数のIPv6拡張ヘッダ（任意長、図16(3)参照）で構成されている。
【００４１】
このように階層化されたIPv6パケットの先頭位置から、上位レイヤのパケットの開始位置やその種類（同図ではTCPパケットであるが、UDP(User Datagram Protocol)パケット等の場合もある。）を知るためには、上述した手順でヘッダの長さを知る必要がある。
【００４２】
このためパケット処理プロセッサ101は、一般的に、各プロトコルにおいて定まるパケットのフォーマットに応じた処理を行う必要があると共に、例えば、上述した拡張ヘッダが繰り返されるような場合、定型化した処理の繰り返しを行う必要がある。
【００４３】
図19は、パケット処理プロセッサ101の制御部40aに含まれるプログラムカウンタ33及びプログラム加算器34、並びに実行プログラム保持部20に含まれるメモリ21を示している。
パケット処理プロセッサ101の命令（マイクロコード）セットは、ハードウェアの構成によって、パケット処理を高速に行うようために必要な機能セットにすることが可能である。例えば、ジャンプを指定するマイクロコードを、“con（ジャンプ命令の実行条件）”+“jmp（ジャンプ命令を示すニモニック）”+“r(i)（ジャンプ先位置指定するオペランド）”とすることが可能である。ここで、ジャンプ先位置は、相対位置又は絶対位置で指定ようにすることが可能である。
【００４４】
このマイクロコードのオペランドr(i)＝“正のインクリメント値（相対位置）”である場合、加算器34は、現在のプログラムカウンタ33の値にインクリメント値を加算した値をプログラムカウンタ33に設定する。すなわち、プログラムは、現在の実行位置からインクリメント値だけ前の命令位置にジャンプする。
【００４５】
これは現在の実行位置から、ジャンプ実行後の命令位置までの間の命令を実行しないことを意味する。
逆に、該マイクロコードのオペランドr(i)＝“負のインクリメント値（相対位置）”である場合、このジャンプ命令の実行後の位置から実行前の位置の間までの命令を繰り返すことを意味する。
【００４６】
図20は、同じ命令が繰り返される場合のフロー例を示しており、同図(1)は、ステップT13のジャンプ命令が、con＝“No”、且つ相対位置＝“負”である場合のフローを示している。同図(2)は、ステップT23のジャンプ命令が、con＝“無条件”、且つ相対位置＝“負”である場合のフローを示している。
【００４７】
一般のプロセッサでは、これらを組み合わせてプログラミングすることで繰り返し処理を実現している。
しかし、従来のパケット処理プロセッサシステムでは、所定の命令数を実行した後のパケット処理プロセッサ101は、次パケットの到着によってのみ処理を開始する。これは、現在1つのパケットの処理を行っているパケット処理プロセッサ101の「前段」及び「後段」のパケット処理プロセッサ101は、そのパケットに対する処理に関しては停止した状態にあることになる。
【００４８】
従って、複数のパケット処理プロセッサ101の間にまたがるプログラムの分岐命令を記述し実行することができないと言う問題がある。
従って本発明は、入力されたパケットに対して所定のパケット処理を行うパケット処理プロセッサ及びパケット処理プロセッサシステムにおいて、実行可能命令数を増やすこと、アクセス可能なパケット範囲を広げること、分岐処理を容易にすることにより、パケット処理のプログラミングを柔軟に記述することを課題とする。
【００４９】
【課題を解決するための手段】
上記の課題を解決するため、本発明のパケット処理プロセッサは、パケットをその先頭から順次受信するパケットレジスタと、該パケットの処理手順を記述したプログラムを保持する実行プログラム保持部と、与えられたパケットの長さ及び該プログラムに基づいて実行するプログラムの命令数を決定し、該プログラムの実行を制御するプログラム実行制御部と、を備えたことを特徴としている（請求項１／付記１）。
【００５０】
まず、本発明の原理を説明する。パケットの長さに比例して、パケットがパケットレジスタの一点を通過する時間は長くなる。すなわち、パケット処理プロセッサがパケットにアクセスできる時間が長くなる。
従って、プログラムの処理内容及びこの処理でアクセスするパケット内の位置に依存して、実行可能な命令数を増やすことが可能になると共に、アクセス可能なパケットの範囲を拡大することが可能になる。
【００５１】
そこで、本発明のパケット処理プロセッサは、一般的なプロセッサが備えている演算部、内部汎用レジスタ、及び命令実行部の他に、直接アクセス可能なパケットレジスタ、実行プログラム保持部、及びプログラム実行制御部を備えると共に実行プログラム保持部は、パケットの処理手順を記述したプログラムを保持し、パケットレジスタは、パケットをその先頭から順次受信し、プログラム実行制御部は、内部又は外部から与えられたパケットの長さ及び該プログラムに基づいて実行する命令数を決定し、該プログラムの実行を制御する。
【００５２】
これにより、実行可能な命令数を増やすこと及びアクセス可能なパケット範囲を広くすることが可能になる。
また、本発明のパケット処理プロセッサシステムは、パケットをその先頭から順次受信するパケットレジスタと、該パケットの処理手順を記述したプログラムを保持する実行プログラム保持部と、与えられたパケットの長さ及び該プログラムに基づいて実行する命令数を決定し、該プログラムの実行を制御するプログラム実行制御部と、内部状態を保持する内部状態保持部とを備えたパケット処理プロセッサを少なくとも２つ縦続接続し、現段のパケット処理プロセッサの該内部状態及び出力パケットを前段のパケット処理プロセッサに与えることを特徴としている（請求項２／付記２）。
【００５３】
すなわち、パケット処理プロセッサは、一般的なプロセッサが備えている演算部、内部汎用レジスタ、及び命令実行部の他に、パケットレジスタ、実行プログラム保持部、及びプログラム実行制御部を備えると共に、さらに、内部状態を保持する内部状態保持部を備えている。
【００５４】
このパケット処理プロセッサを少なくとも２つ縦続接続してパケット処理プロセッサシステムを構成し、現段のパケット処理プロセッサの内部状態及び出力パケットを前段のパケット処理プロセッサに与える。前段のパケット処理プロセッサは、内部状態に基づき入力した該出力パケットのパケット処理を実行する。
【００５５】
これにより、パケット処理プロセッサシステム全体として１つのパケットに対する実行可能な命令数及びアクセス可能範囲を増やすことができる。
また、本発明のパケット処理プロセッサシステムは、現在、パケットの先頭について駆動しているパケット処理プロセッサを指称する現段のパケット処理プロセッサと、時間軸上の未来に駆動するパケット処理プロセッサを指称する前段のパケット処理プロセッサ又は時間軸上の過去に起動されたパケット処理プロセッサを指称する後段のパケット処理プロセッサと、を有するパケット処理プロセッサシステムにおいて、該パケット処理プロセッサは、パケットをその先頭から順次受信するパケットレジスタと、該パケットの処理手順を記述したプログラムを保持する実行プログラム保持部と、該プログラムの実行を制御するプログラム実行制御部と、を備え、該現段のパケット処理プロセッサの出力パケットが、該前段のパケット処理プロセッサに与えられるように、該パケット処理プロセッサを少なくとも２つ縦続接続し、該現段のパケット処理プロセッサのプログラム実行制御部が、該前段のパケット処理プロセッサ又は該後段のパケット処理プロセッサのプログラム実行制御部に対して、命令獲得タイミング及び命令獲得位置を指示することを特徴としている（請求項３／付記３）。
【００５６】
すなわち、パケット処理プロセッサは、一般的なプロセッサが備えている演算部、内部汎用レジスタ、及び命令実行部の他に、パケットレジスタ、実行プログラム保持部、及びプログラム実行制御部を備えている。
このパケット処理プロセッサを少なくとも２つ縦続接続してパケット処理プロセッサシステムを構成する。このシステムにおいては、現段のパケット処理プロセッサには、前段のパケット処理プロセッサのみが接続されている場合、前段及び後段のパケット処理プロセッサが共に接続されている場合、及び後段のパケット処理プロセッサのみが接続されている場合がある。
【００５７】
現段のパケット処理プロセッサのプログラム実行制御部は、接続されたパケット処理プロセッサのプログラム実行制御部に対して、命令獲得タイミング及び命令獲得位置を指示する。
これにより、パケット処理プロセッサ間にまたがるプログラムの分岐命令を記述し実行することが可能になり、パケット処理のプログラミングを柔軟に行うことが可能になる。
【００５８】
また、本発明のパケット処理プロセッサシステムは、上記の発明において、プログラム実行制御部が、与えられたパケットの長さ及び該プログラムに基づいて実行するプログラムの命令数を決定することができる（請求項４／付記４）。
これにより、パケットの長さ及びプログラム内容に基づき、実行可能な命令数を増やすこと及びアクセス可能なパケット範囲を広くすることが可能になると共に、例えば、パケット処理プロセッサの段数を少なくすることが可能になる。
【００５９】
また、本発明のパケット処理プロセッサシステムは、上記の発明において、該パケット処理プロセッサが、さらに、内部状態を保持する内部状態保持部を備え、現段のパケット処理プロセッサの該内部状態を前段のパケット処理プロセッサに与えることができる。（付記５）。
【００６０】
これにより、パケット処理プロセッサ間接続が容易になる。
また、本発明のパケット処理プロセッサシステムは、上記の発明において、該実行プログラム保持部はバンク切替が可能であり、該内部状態がバンク値とすることができる（付記６）。
【００６１】
すなわち、実行プログラム保持部は、バンク切替が可能である。例えば、現段の実行プログラム保持部と前段の実行プログラム保持部の同じバンクに渡って一連のプログラムを保持させる。現段のパケット処理プロセッサは、現在実行しているプログラムを格納しているバンク値を、前段のパケット処理プロセッサに通知する。
【００６２】
これにより、現段/前段のパケット処理プロセッサは、バンク値に基き該一連のプログラムを選択して実行することが可能になる。
また、本発明は、上記の発明において、該プログラム実行制御部は、処理中のパケットが終了したことにより又は新規パケットが入力されたことにより、該パケットに対する次の命令の獲得を停止することができる（付記７、付記８）。
【００６３】
すなわち、パケットレジスタで処理中のパケットが終了したとき、そのパケットに対するの処理は、実行できない、また、新規のパケットが入力した場合、その新規のパケットに対する処理を開始しなければならないので、プログラム実行制御部は、現在処理中のパケットに対する命令の獲得を停止する。
【００６４】
これにより、無意味なパケット処理動作を無くすこと、次の新規のパケットに対するパケット処理を確実に開始することができる。
また、本発明は、上記の発明において、該プログラム実行制御部は、命令獲得を所定の命令実行クロック分だけ行わないことことが可能である（請求項５／付記９、付記１０）。
【００６５】
すなわち、プログラム実行制御部は、現在の命令獲得と次の命令獲得の間に所定の命令実行クロック分だけの命令獲得を行わない。この所定の命令実行クロック分だけの期間、パケットはパケットレジスタを移動する。
これにより、プログラム実行制御部は、次の命令の処理対象であるパケットのフィールドがパケットレジスタの内の処理対象パケットレジスタ位置に来たとき、次の命令が実行されるように命令獲得を行うようにすることが可能になる。
【００６６】
この結果、プログラムは、パケットをパケットレジスタ内を移動させるための何もしない命令が必要でなくなり命令数が少なくなる。パケット処理のプログラミングを柔軟に行うことが可能になる。
また、本発明は、上記の発明において、該プログラム実行制御部は、該パケットが入力されたタイミングを示す転送タイミング信号を受信したときから、所定の命令実行クロック分だけ命令獲得を行わないようにすることが可能である（付記１１〜付記１３）。
【００６７】
これにより、プログラム開始位置をプログラムの先頭にする必要がなくなり、パケット処理プログラムを柔軟に記述することが可能になる。
なお、該所定の命令実行クロックを該命令獲得位置としてもよい（付記１４）。これにより、パケット処理プロセッサ間に渡る分岐のプログラム記述が容易になる。
【００６８】
また、本発明は、上記の発明において、該プログラム実行制御部は、パケット処理プロセッサ自身の内部状態及び該プログラムに基づき命令獲得位置を決定することができる（付記１５、付記１６）。
さらに、本発明は上記の発明において、該内部状態を許容命令数又は実行可能命令数とすることが可能である。（付記１７、付記１８）。
【００６９】
これらの発明によっても、パケット処理プログラムを柔軟に記述することが可能になる。
【００７０】
【発明の実施の形態】
［１］パケット処理プロセッサの実施例
図１は、本発明に係るパケット処理プロセッサ100の実施例を示している。このプロセッサ100が図13に示した従来のプロセッサ101と異なる点は、従来のプログラム起動部30a及び制御部40aの代わりにプログラム実行制御部30及び命令実行部40を備えていることである。
【００７１】
さらに、プログラム実行制御部30は、パケットデータ入力部60から受信パケット長信号223を受信していることが異なっている。
これらのプログラム実行制御部30及び命令実行部40を合わせた基本的な動作は、プログラム起動部30a及び制御部40aを合わせた動作と同じであるが、プログラム実行制御部30が、受信パケット長信号223、パケットの受信パケット転送タイミング信号222等に基づき実行プログラムの命令数を変更することが可能であることが従来と異なっている。
【００７２】
図２は、上記の実行プログラム保持部20、プログラム実行制御部30、及びパケットデータ保持部70の構成例を示している。実行プログラム保持部20のマイクロコード用メモリ21は、図14に示した従来のメモリのメモリ21に対応する基本命令格納領域21_1の他に拡張命令格納領域21_2〜21_4を含んでいる。
【００７３】
基本命令格納領域21_1には、従来のメモリ21と同様に所定のスループットを維持したまま実行可能な数N＝“10”の命令（マイクロコード）を格納しておき、拡張命令格納領域21_2〜21_4には拡張命令（マイクロコード）を格納しておく。この格納領域21_2〜21_4の拡張命令を実行するか否かはプログラム実行制御部30からの指示による。
【００７４】
プログラム実行制御部30はデコーダ312を備え、パケットデータ保持部70はパケットデータアクセスレジスタp0〜p9を備えている。
パケットデータ入力部60は、従来の入力部60と同様に、外部からのパケット到着信号221によって受信パケット201が到着したことを検知し、受信パケット201をパケットの先頭から、クロックに同期して順次、レジスタp9〜p0へ直接格納する。
【００７５】
さらに、入力部60は、従来の入力部60とは異なり、受信パケット転送タイミング信号222の他に受信パケット長信号223をプログラム実行制御部30へ出力する。この受信パケット長信号223は、新たなパケットデータがパケットデータ保持部70に出力するまで保持される。
【００７６】
なお、受信パケット長信号223は、パケットデータ入力部60において計測して得てもよいし、パケットの入力に同期して外部からプログラム実行制御部30に直接与えてもよい。
図３は、図２に示した実行プログラム保持部20に格納されたプログラムを実行するための制御例を示している。この保持部20においては、図２に示した拡張命令格納領域21_3，21_4は、図を簡略化するため省略されている。
【００７７】
図３においては、基本命令格納領域21_1の命令数N＝“10”、拡張命令格納領域21_2の命令数M＝“30”である。
プログラム実行制御部30は、後述する図７に示すように、図14に示したプログラムカウンタ33及び+1加算器35と同様のプログラムカウンタ33及び+1加算器35を含んでいる。
【００７８】
制御部30は、受信パケット転送タイミング信号222を受信したことを契機として、バンク切替信号224＝“バンク0”及びメモリアドレス225＝“アドレス0”を実行プログラム保持部20に与え、命令データ226によって、基本命令格納領域21_1の先頭の命令＝“マイクロコードMC0”を獲得する。
【００７９】
その後、制御部30は、プログラムカウンタ33（図示せず）を１つインクリメントして次命令を獲得する動作を基本命令格納領域21_1に格納された最終の命令まで繰り返す。制御部30は、バンク切替等のプログラム制御命令のみを実行する。命令実行部40がこれ以外の命令を実行する。
【００８０】
プログラム実行制御部30は、獲得した命令がバンク切替命令であるとき、バンク切替命令のオペランドで指定されたバンク値を、バンク切替信号224で保持部20に与えバンク切替を実行する。このバンク値は、次のバンク切替命令によって変更されるか又は新しい受信パケット転送タイミング信号222が入力されるまで保持される。
【００８１】
基本命令格納領域21_1に格納された命令の処理が終了した後、プログラム実行制御部30は、拡張命令格納領域21_2を実行するか否かを、要求スループット、命令実行クロック速度、パケットデータ保持部70のデータ転送幅、転送クロック速度、及びターゲットパケット長（最小値）から得られる許容命令数とパケットデータ入力部60からの受信パケット長信号223から得られる実行可能命令数とに応じて決定する。
【００８２】
例えば、要求スループットが2.5Gbps、パケットデータ保持部70のデータ転送幅及び転送クロック速度が、それぞれ32ビット及び100MHz、命令実行速度が同じ100MHzである場合、40バイトのパケットに対する許容命令数は“12”となる。
また、基本命令格納領域21_1のN＝“12”、拡張命令格納領域21_2のM＝“36”とすれば、パケットデータ入力部60からの受信パケット長信号223で示されたパケット長＝80バイトのとき、実行可能命令数は“24”であり、拡張命令格納領域21_2の“12”命令分が実行可能になる。
【００８３】
さらに、パケット長が160バイトの場合、実行可能命令数＝“48”となるので、拡張命令格納領域21_2の“36”命令分が実行可能になる。
図4(1)は、プログラム実行制御部30に含まれる命令獲得許可信号生成部311を示している。この生成部311は、受信パケット転送タイミング信号222、許容命令数227、受信したパケット長から得られる実行可能命令数228に基づき、命令獲得許可信号229を発生する。
【００８４】
許容命令数227＝“12”が設定されており、命令獲得許可信号生成部311は、実行可能命令数228に応じたクロック数の命令獲得許可信号229を出力し、拡張命令格納領域21_2を実行するか否かが決定される。
図4(2)は、プログラム実行制御部30及び命令実行部40が、命令獲得許可信号229に基づき実行する命令数を変更するタイミング例及びバンク切替例を示している。
【００８５】
クロック220は、命令実行クロック及び転送クロックを兼ねており、このクロック220に同期してプログラム実行制御部30及び命令実行部40は動作する。レジスタp9〜p0（図２参照）は、受信パケット転送タイミング信号222の立上りを契機として、パケット201のデータD0〜D9をクロック220に同期して順次転送（シフト）する。
【００８６】
制御部30は、メモリアドレス225＝“メモリアドレス0”及びメモリバンク切替信号224＝“バンク0”を出力する。
プログラム実行制御部30又は命令実行部40は、“メモリアドレスAdr0”及び“バンク0”に格納されたマイクロコードMC0を実行する。以下同様にして、マイクロコードMC1，MC2が実行される。
【００８７】
制御部30は、マイクロコードMC2が条件付き分岐命令（バンク切替命令）である場合、その条件に従って、メモリアドレス225＝“アドレスAdr4”及びメモリバンク切替信号224＝“バンク1”を出力し、コマンドコードMC4を獲得する。
なお、制御部30は、その条件がバンク切替を必要としない場合、メモリバンク切替信号224＝“バンク0”を変更せず、メモリアドレス225＝“アドレスAdr4”を出力し、“バンク0”の“アドレスAdr4”以下のコマンドコードを獲得する（図３参照）。
【００８８】
以後、命令実行部40は、分岐したコマンドMC4，コマンドMC5、…を順次実行する。以下同様に、制御部30はバンク切替命令がある度に指定されたバンク切替を実行し、命令実行部40は、バンク切替で選択されたコマンドを実行する。
基本命令格納領域21_1に設定された全てのマイクロコードMC0〜MC9が実行される。例えば、破線で示すように命令獲得許可信号229が、さらに、「命令獲得許可」を示している場合、マイクロコードMC10から、命令獲得許可信号229の立下りから１クロック分後のマイクロコードMC11までの処理が、順次実行される。
【００８９】
すなわち、プログラム実行制御部30は、実行可能命令数が許容命令数以下であれば、基本命令格納領域21_1のみを実行して終了するが、そうでなければ（実行可能命令数−許容命令数）分だけ更に拡張命令格納領域21_2の命令を実行する。このようにして、本発明におけるプロセッサ101は、プログラム実行制御部30が受信パケット長信号223及びプログラムの処理内容に応じて実行する命令数を変えることによって、実行可能な命令数を増やすことができる。また、これにより、パケット中のより後方のデータに対するアクセスが可能になる。
【００９０】
図４においては、命令獲得許可信号229で実行可能命令数を変えたが、例えば、基本命令格納領域21_1中のプログラムに許容命令数227を書き換える命令を記述することによっても、実行可能命令数228を変えることができる。
これについて以下に、IPv6ヘッダを含むパケット201を処理する場合について説明する。
【００９１】
図12において、パケット201のIPv6基本ヘッダの長さは固定長の40バイトである。従って、各レジスタp0〜p9の幅＝“32ビット”、τ＝“転送クロック幅”＝“命令実行クロック幅”とすれば、IPv6基本ヘッダには、10τ分の命令（すなわち、10個の命令、この数は基本命令格納領域21_1に格納された命令で実行可能な命令数に等しい。）によるパケット処理が可能である。
【００９２】
IPv6基本ヘッダのパケット処理が終わった後、基本命令格納領域21_1に格納された命令が全て実行された時点の後、基本ヘッダの後には、IPv6拡張ヘッダ又は上位レイヤ（TCP/UDPなど）のヘッダが続くことになる。
これらのヘッダの内のどのヘッダが続きかを判定するため、基本命令格納領域21_1中に、IPv6基本ヘッダについての処理を記述するとともに「次ヘッダフィールド」の値を抽出して、例えば、汎用レジスタ11（図１参照）へ格納する命令も記述しておく。
【００９３】
この方法によれば、基本命令格納領域21_1中のプログラム（命令）によって拡張ヘッダに対する処理を実行するか否かを判別する必要はなく、拡張命令格納領域21_1においても前述の汎用レジスタ11には次ヘッダフィールドの値がセットされていることを前提にプログラミングを行えばよい。
【００９４】
プログラミング例として、拡張命令格納領域21_2のバンク0〜バンク2に、それぞれ、IPv6拡張ヘッダ、TCPヘッダ、及びUDPヘッダに対応するパケット処理プログラムを格納しておく。
プログラム実行制御部30は、汎用レジスタ11に格納された「次ヘッダフィールド」の値に基づき、IPv6拡張ヘッダ、TCPヘッダ、又はUDPヘッダが続くかを判定し、判定したヘッダに対応したパケット処理プログラムをバンク切替で選択して獲得すればよい。
【００９５】
以上のように、プログラミングにおける処理のオーバーヘッドを抑え、所定のスループットを維持したまま、オプション的な処理の実装が可能になる。
［２−１］パケット処理プロセッサシステムの実施例(1)
図５は、本発明に係るパケット処理プロセッサシステムの実施例(1)を示している。この実施例(1)では、図１に示したパケット処理プロセッサ100_1，100_2…（以下、符号100で総称することがある。）を直列接続し、パケット処理プロセッサシステムを構成している。
【００９６】
各パケット処理プロセッサ100のプログラム実行制御部30の内部状態234は、内部状態保持部50に保持され、前段のパケット処理プロセッサ100に引き継ぐように構成されている。
内部状態234として、許容命令数、実行可能命令数、及びバンク値がある。なお、許容命令数及び実行可能命令数は、内部状態で引き継ぐ代わりに、実施の形態[１]で示したアルゴリズムに従って判定した結果が、次命令を獲得するか否かを表しているので、パケット処理プロセッサ100からその前段のパケット処理プロセッサ100へパケット201(202)に同期して中間データ235として渡してもよい。
【００９７】
また、現段のパケット処理プロセッサから前段のパケット処理プロセッサ100へ渡す許容命令数、実行可能命令数を前段のパケット処理プロセッサ100内のプログラムで設定可能にしてもよい。
本発明のパケット処理プロセッサシステムによれば、各パケット処理プロセッサ100において、各パケット201に対する実行可能命令数及びアクセス可能な範囲を大きくすることが可能になると共に、システム全体として実行可能な命令数及びアクセス可能なパケット範囲を大きくすることが可能になる。
【００９８】
これにより、パケット処理プロセッサシステムの段数を減らすことも可能になる。
［２−２］パケット処理プロセッサシステムの実施例(2)
図６は、本発明のパケット処理プロセッサシステムの実施例(2)を示している。このシステムは、図５に示した実施例(1)のシステムと同様に複数のパケット処理プロセッサ100_1，100_2，…（符号100で総称することがある。）が直列接続されている。
【００９９】
この実施例(2)のシステムが、実施例(1)のシステムと異なる点は、各パケット処理プロセッサ100は、後段のプロセッサ100に「起動指示信号230_1」及び「プログラムカウンタ値231_1」を与えると共に、前段のプロセッサ100に「起動指示信号230_2」及び「プログラムカウンタ値231_2」を与えていることである。
【０１００】
なお、最後段のパケット処理プロセッサ100_1は、後段のプロセッサ100が無いため、「起動指示信号230_2」及び「プログラムカウンタ値231_2」を前段のプロセッサ100に与えるのみである。同様に、最前段のパケット処理プロセッサ100は、起動指示信号230_1及びプログラムカウンタ値231_1を後段のパケット処理プロセッサ100に与えるのみである。
【０１０１】
図７は、実施例(2)のシステムにおける各パケット処理プロセッサ100の実行プログラム保持部20及びプログラム実行制御部30の構成例を示している。保持部20の構成は、図２に示した保持部20と同様であり、マイクロコードを格納するメモリ21を備えている。
【０１０２】
プログラム実行制御部30は、制御部31、メモリ制御部32、プログラムカウンタ33、加算器34、+1加算器35、セレクタ36、セレクタ37、及びレジスタ38で構成されている。
制御部31は、命令獲得許可信号生成部311及びデコーダ312を備えており、タイミング信号222、前段からの起動指示信号230_1及び後段からの起動指示信号230_2、遅延クロック数232、及び命令データ226を入力し、後段への起動指示信号230_1、後段へのプログラムカウンタ値231_1、前段への起動指示信号230_2、前段へのプログラムカウンタ値231_2、及び命令獲得許可信号229を出力している。
【０１０３】
メモリ制御部32は、命令獲得許可信号229を入力し、バンク切替信号224及びプログラムカウンタ33を制御する信号を出力する。プログラムカウンタ33は、メモリアドレス225を出力する。
制御部31は、起動指示信号230_1、起動指示信号230_2、又はタイミング信号222が入力された場合、それぞれ、プログラムカウンタ33の次の値として、“所定の初期値”、“カウンタ値231_1”、又は“カウンタ値231_2”を選択するように指示する信号をセレクタ36に与える。
【０１０４】
起動指示信号230_1、起動指示信号230_2、及びタイミング信号222のいずれも入力されていない場合、制御部31は、デコーダ312において、メモリアドレス225及びバンク切替信号224で指定されるメモリ21内の命令データ226をデコードし、プログラムカウンタ33の次の値として、「プログラムカウンタ33の値を+1加算器35で１だけインクリメントした値」、「命令データ226のオペランドで指定される絶対位置」、及び「命令データ226のオペランドで指定される相対位置」のいずれにするかを決定する。
【０１０５】
図15に示した従来のパケット処理プロセッサシステムにおいて、所定の命令数を実行した後のパケット処理プロセッサ101は、次パケット到着信号221によってのみ処理を開始する。
この結果、パケットデータ保持部70内を移動するパケット201に対して順に起動されて行く複数のパケット処理プロセッサ101において、或る１つのパケット201に着目した場合、現在駆動されているパケット処理プロセッサ101に対して、その前段及び後段のパケット処理プロセッサ101は停止した状態にある。
【０１０６】
従って、パケット処理プロセッサ101間にまたがる処理を記述して繰り返し処理を継続することができない。
これを解決するために、本実施例(2)のパケット処理プロセッサシステムにおけるパケット処理プロセッサ100のプログラム実行制御部30は、システムの実施例(1)に示した、直ちに実行プログラム保持部20から命令獲得を開始する通常の受信パケット転送タイミング信号222による起動指示の他に、前段及び後段のパケット処理プロセッサ100からの起動指示を可能にしている。
【０１０７】
すなわち、制御部30は、受信パケット転送タイミング信号222による場合には基本命令格納領域21_1の先頭位置から命令獲得を開始し、前段又は後段パケット処理プロセッサ100から起動指示信号230_1，230_2を受けた場合には、これとともに与えられたプログラムカウンタ値231_1，231_2の位置から命令獲得を開始する。
【０１０８】
制御部30は、獲得した命令データ226をデコーダ312でデコードするがバンク切替等のプログラム制御命令に関してのみ処理を決定し、これ以外の命令データ226については命令実行部40（図６参照）で行う。
すなわち、制御部30は、命令データ226がプログラム制御命令でなければ獲得した命令データ226を命令実行部40に出力し、プログラムカウンタ33を１つインクリメントして次命令データ226を獲得する。
【０１０９】
また、制御部30は、獲得した命令データ226がバンク切替命令であれば命令で指定されたオペランド（バンク値）に従って、そのバンクから次の命令データを獲得する。このバンク値は、命令によって変更されるか新しいパケットが入力されるまで保持される。
【０１１０】
命令データ226は、プログラムカウンタ33のインクリメント値(j)を指定することが可能である。制御部30は、獲得した命令データ226が正又は負のインクリメント値jが指定された命令データ226を獲得した場合、このインクリメント値(j)、この命令の配置位置(i)、及びパケット処理プロセッサの格納命令数(N)からパケット処理プロセッサ100間にまたがる分岐か否かを判定する。
【０１１１】
パケット処理プロセッサ100間にまたがらない場合、制御部30は、指定された正負符号を含めたインクリメント値(j)とプログラムカウンタ33の現在のカウント値と加算した値でプログラムカウンタ33の更新を行い、次の命令データ226を獲得する。
【０１１２】
図８は、分岐命令に基づく命令の実行順の一例を示している。同図(1)は、逆方向の分岐例を示しており、現段のプロセッサにおいて、配置位置iにある命令データは、負のインクリメント値jを示している。同図(2)は、順方向の分岐例を示しており、現段のプロセッサにおいて、配置位置iにある命令データは、正のインクリメント値jを示している。
【０１１３】
制御部30は、パケット処理プロセッサ100間にまたがる場合で負のインクリメント値jが指定された場合、後段のパケット処理プロセッサ100に対して、起動指示信号230_1及びプログラムカウンタ値231_1を出力する。
後段のパケット処理プロセッサ100に送信するプログラムカウンタ値231_1（＝“x”）は、指定されたインクリメント値j、この命令の配置位置i、及びパケット処理プロセッサ100の実行可能な命令数Nから求める（図8(1)参照）。
【０１１４】
制御部30は、パケット処理プロセッサ100間にまたがる場合で正のインクリメント値jが指定された場合、前段のパケット処理プロセッサ100に対して、起動指示信号230_2及びプログラムカウンタ値231_2を出力する。
前段のパケット処理プロセッサに送信するプログラムカウンタ値231_2（＝“x”）は、指定されたインクリメント値j、この命令の配置位置i、及びパケット処理プロセッサの実行可能な命令数Nから求める（図8(2)参照）。
【０１１５】
なお、前段のパケット処理プロセッサ100は、プログラムカウンタ値231_2をプログラム獲得開始までの遅延時間としても用いる。
図８を参照して、制御部30がプログラムカウンタ値231_1，231_2を求める手順を説明する。
【０１１６】
(1)制御部30は、命令で指定されたインクリメント値jが負の値であれば、iとj（絶対値）の大小比較を行う（同図(1)参照）。
(1-1) i＜jのとき、制御部30は、パケット処理プロセッサ100間にまたがる分岐と判定し、後段のパケット処理プロセッサ100へ起動指示信号230_1、及びプログラムカウンタ値231_1＝“x”＝“N−(ｊ−i)”を出力する。
【０１１７】
(1-2) i＞jのとき、制御部30は、パケット処理プロセッサ100間にまたがらない分岐と判定し、現在のプログラムカウンタ値iからｊを減算して、新しいプログラムカウンタ値＝“i-j”とする。
(2)制御部30は、命令で指定されたインクリメント値jが正の値であれば、i＋jとNの大小比較を行う（同図(2)参照）。
【０１１８】
(2-1) i＋j＞Nのとき、制御部30は、パケット処理プロセッサ100間にまたがる分岐である判定し、前段のパケット処理プロセッサ100へ起動指示信号230_2及びプログラムカウンタ値231_2＝“x”＝“i＋j−N”を出力する。
(2-2) i＋j＜Nのとき、制御部30は、パケット処理プロセッサ100間にはまたがらない分岐と判定し、現在のプログラムカウンタ値iにjを加えて、新しいプログラムカウンタ値＝“i+j”とする。
【０１１９】
制御部30は、以上の分岐手順を命令格納領域のプログラムの最終アドレスの命令を獲得するまで繰り返す。
制御部30は、前述したように、図１の実施例と同様に、受信パケット転送タイミング信号222を認識すると基本命令格納領域21_1の先頭から実行を開始することを基本とするが、前段のパケット処理プロセッサ100からの起動指示信号230_1を受信した場合、この起動指示信号230_1と同時に与えられるプログラムカウンタ値231_1のアドレスの命令を獲得する。
【０１２０】
逆に、制御部30は、後段のパケット処理プロセッサ100からの起動指示信号230_2を受信した場合、受信パケット転送タイミング信号222の入力を認識後、起動指示信号230_2と同時に与えられるプログラムカウンタ値231_2と同じ命令実行クロック数分だけ遅延した後、プログラムカウンタ値231_2のアドレスの命令を獲得する。
【０１２１】
これにより、本は発明のパケット処理プロセッサシステムは、パケット処理プロセッサ100の間にまたがる分岐命令を実行することが可能になる。
図９は、プログラム実行制御部30が、後段のパケット処理プロセッサ100からの起動指示信号230_2を受信した場合の命令実行タイミング例を示している。制御部30は、図７に示したように制御部31を備え、この制御部31は命令獲得許可信号生成部311を含んでいる。
【０１２２】
同図(1)は、この生成部311を示しており、受信パケット転送タイミング信号222、及びレジスタ38（図７参照）からの遅延クロック数232を入力し、命令獲得許可信号229を出力している。
制御部30は、後段のパケット処理プロセッサ100からのプログラムカウンタ値231_2を遅延クロック数（命令実行クロック数）232としてレジスタ38に設定することが可能なように構成されている。すなわち、図７に示したように、プログラムカウンタ値231_2がセレクタ37を経由してレジスタ38に格納されるように構成されている。
【０１２３】
同図(2)において、タイミング▲１▼は、遅延クロック数＝“0”の場合を示し、タイミング▲２▼は、遅延クロック数＝“3”の場合を示している。
なお、生成部311は、クロック220に同期して動作している。
タイミング▲１▼においては、生成部311は、受信パケット転送タイミング信号222の立上りから１クロック分だけ遅れて、命令獲得許可信号229を「アクティブ」にする。この結果、メモリアドレス225＝“Adr0”が出力され、１クロック分だけ遅れて命令データ226＝“マイクロコードMC0”が出力される。
【０１２４】
以下、同様に、メモリアドレス225＝“Adr1”，…，“Adr4”が順次が出力され、１クロック分だけ遅れて、対応する命令データ226＝“MC1”，…，“MC4”が出力される。
タイミング▲２▼においては、生成部311は、受信パケット転送タイミング信号222の立上りから１クロック分だけ遅れたクロック220の立上りから、さらに、レジスタ38に格納された“遅延クロック数”＝“３”クロック分だけ遅れたクロック220の立上りに同期して命令獲得許可信号229を「アクティブ」にしている。
【０１２５】
この結果、メモリアドレス225＝“Adr0”，“Adr1”，…が順次が出力され、１クロック分だけ遅れて、対応する命令データ226＝“MC0”，“MC1”，…が出力される。
これにより、受信パケット転送タイミング信号222の後に所定の命令実行クロック分だけの期間、命令を実行しない区間を設けることが可能になる。
【０１２６】
なお、制御部30は、パケットの先頭が入力されてから、パケットデータ保持部70のデータ転送幅、転送クロック速度、及び受信パケット長から得られる所要転送クロック数を経過した場合には、次命令の獲得を終了し、受信パケット転送タイミング信号222（すなわち、次パケットの入力）又は起動指示信号230_1又は起動指示信号230_2を待つ。
【０１２７】
これにより、処理中のパケットが１つのプロセッサ100のパケットデータ保持部70に存在しないにも関わらず、無駄なパケット処理を行うと言う誤動作を回避できる。
図10(1)は、同一パケット処理プロセッサ100内で繰り返し処理を行うアルゴリズム例を示している。このアルゴリズム例は、IPv6パケットにおいて任意長の拡張ヘッダが付与された場合を考慮して、その上位のプロトコルであるTCPの送信元/宛先ポート番号を獲得するものである。
【０１２８】
ここでは簡略化のため、命令実行クロック速度は、パケットデータ保持部70におけるパケット201の転送クロック速度の２倍であり、パケットデータ保持部70内のレジスタp0〜p9幅は32ビットとする。
図18に示したように、IPv6のヘッダは、固定長(40バイト)の基本ヘッダに８バイトの整数倍の長さを持つ各種拡張ヘッダがチェーンされた構成になっている。
【０１２９】
従って、IPv6パケットから上位のプロトコルであるUDP/TCPの送信元/宛先ポート番号を獲得するためには、制御部30は、基本ヘッダ中の「次ヘッダフィールド」を基点として、基本ヘッダ又は拡張ヘッダ中の「次ヘッダフィールド」に設定された“タイプ値”によって次に拡張ヘッダが続くか上位のプロトコルが続くかを判別すると共に、「ヘッダ拡張長フィールド」の値によって次ヘッダフィールドを獲得するといった処理を逐次繰り返す必要がある。
【０１３０】
なお、「次ヘッダフィールド」に挿入される“ヘッダタイプ値”はRFC1700で定められており、例えばTCPならば“６(Decimal)”、UDPならば“17(Decimal)”である。従って、制御部30は、「次ヘッダフィールド」の値＝“６”又は“17”である場合、次に上位のTCP又はUDPパケットの次ヘッダが来ると判別できる。
【０１３１】
ここで、各パケット処理プロセッサ100においては、命令実行クロックによって逐次命令が実行される一方、制御部30は、対象パケット201のデータがパケットデータ保持部70内のパケットデータアクセスレジスタp0〜p9中を転送クロックによって逐次転送されて行くことを考慮して、IPv6拡張ヘッダの次ヘッダ及び次ヘッダ拡張長フィールドの抽出を行う必要がある。
【０１３２】
この抽出は、「パケットデータアクセスレジスタp0〜p9の参照位置（例えば、レジスタp9）」をオペランドとする演算命令で行われる。
同様に、TCPヘッダの「送信元/宛先ポート番号フィールド」は、「レジスタp0〜p9の参照位置」及び「転送先のレジスタ名」をオペランドとするデータ転送命令で「転送先レジスタ」に転送される。
【０１３３】
これらの演算命令及びデータ転送命令をアルゴリズムで繰り返し実行するためには、オペランドとして記述した参照位置（レジスタp9）は固定されることになる。
従って、プログラムは、演算命令及びデータ転送命令を実行するタイミングに、レジスタp0〜p9の内の参照位置に目的のフィールド（ここでは拡張ヘッダ内の「次ヘッダフィールド」及び「ヘッダ拡張長フィールド」、又はTCPヘッダの「送信元/宛先ポート番号フィールド」）が存在するよう演算命令又はデータ転送命令を実行前にタイミングを調整するように構成されている必要がある。
【０１３４】
また、パケット処理プロセッサ100は、「レジスタ38」及び「任意の遅延クロック数」をオペランドとするレジスタ更新命令を実行することで、「任意の遅延クロック数」でレジスタ38を更新することが可能である。すなわち、図７に示すように、命令データ226（＝レジスタ更新命令）のオペランド（遅延クロック数）は、セレクタ37を経由してレジスタ38に格納される。
【０１３５】
オペランドに「レジスタ38」及び「遅延クロック数」設定したレジスタ更新命令が実行された場合、「遅延クロック数」だけ命令の実行が停止された後、このレジスタ更新命令の次の命令が実行される。
制御部30は、このレジスタ更新命令を実行した後、プログラムカウンタ33（図７参照）を１つインクリメントして次命令獲得開始を待てばよい。
【０１３６】
これにより、任意の命令実行クロック分だけの期間、命令の実行を停止することが可能になる。
図10(2)は、プログラムメモリ21上の命令配置例を示している。以下に、同図(1)及び(2)を参照してアルゴリズム及び命令を説明する。なお、上記の参照位置はレジスタp9とする。
【０１３７】
ステップS1：命令実行部40は、演算命令によってパケットデータアクセスレジスタ内の基本ヘッダ中の次ヘッダフィールドの値とTCPの値を示す“6(Decimal)”を比較し、その結果を内部状態（フラグ）に設定する。
ステップS2：レジスタ更新命令が、「遅延クロック数」でレジスタ38を更新し、レジスタp0〜p9内のパケット201のデータを「遅延クロック数」分だけ先送りし、ステップS4でアクセスするレジスタp9にIPv6ヘッダの「次ヘッダフィールド」が来るように調整する。ここで用いる「遅延クロック数」はIPv6基本ヘッダのサイズから固定的に求まる値＝“16”である。
【０１３８】
ステップS3：ステップS1又はステップS4の演算結果のフラグの状態によって分岐する。フラグが一致を示している場合、ステップS7へ進み。そうでない場合、次ステップS4に進む。
ステップS4：演算命令が、レジスタp9内の拡張ヘッダの「次ヘッダフィールド」の値とTCPを示す“6(Decimal)”とを比較し、その結果をフラグに設定する。
【０１３９】
>ステップS5：レジスタ更新命令が、「遅延クロック数」でレジスタ38を更新し、パケットデータアクセスレジスタp0〜p9内のパケット201のデータを「遅延クロック数」分だけ先送りする。
ここで用いる「遅延クロック数」は拡張ヘッダ中の「ヘッダ長フィールド」から求まる可変の値である。例えば、ヘッダ長＝“8”ならば“0”、ヘッダ長＝“16”ならば“4”というような値になる。この結果、拡張ヘッダサイズ分だけの待ちが行われる。
【０１４０】
ステップS6：無条件分岐命令によって、ステップS3へジャンプする。
>ステップS7：データ転送命令によってTCPヘッダの「送信元/宛先ポート番号」が指定したレジスタに転送される。
これにより、「送信元/宛先ポート番号」が獲得された。
【０１４１】
図11は、IPv6パケットに含まれるTCPパケットの送信先/宛先ポート番号を図10(1)に示したアルゴリズムに従って求める動作ステップ例を示している。
同図(1)〜(4)は、IPv6ヘッダが、それぞれ、基本ヘッダのみ、基本ヘッダ＋８バイトの拡張ヘッダ、基本ヘッダ＋16バイトの拡張ヘッダ、及び基本ヘッダ＋16バイトの拡張ヘッダ＋８バイトの拡張ヘッダである場合を示している。
【０１４２】
同図中の符号S0〜S7、及び符号w1〜w16は、それぞれ、パケットの各フィールドが、パケットデータアクセスレジスタの最初のレジスタp9（図２参照）に保持された時に実行されるプログラムのステップ番号（図10のステップ番号S0〜S9）、及び待ち状態を示している。
【０１４３】
以下に、同図(4)の動作例について説明する。
＜基本ヘッダ＞：
ステップS1：演算命令によって、基本ヘッダの「次ヘッダフィールド」の値が所定の値と比較されて、拡張ヘッダが続くことが確認される。
【０１４４】
ステップS2：レジスタ更新命令によって、基本ヘッダの固定長分だけの待ち状態w1〜w16が挿入される。
ステップS3：ステップS1で次ヘッダがTCPヘッダでないことが確認されているため、分岐命令によって、ステップS4に進む。
【０１４５】
＜第１の拡張ヘッダ＞：
ステップS4，ステップS5：演算命令によって、次ヘッダが拡張ヘッダであることが確認され、レジスタ更新命令によって、ヘッダ長フィールドの値に基づき待ち状態w1〜W4が挿入される
ステップS6：無条件分岐命令によって、ステップS3に戻る。
【０１４６】
ステップS3：ステップS4で次ヘッダがTCPヘッダでないことが確認されているため、分岐命令によって、次のステップS4に進む。
＜ 第２の拡張ヘッダ＞：
ステップS4，ステップS5：演算命令によって、次のヘッダがTCPヘッダであることが確認され、レジスタ更新命令によって、ヘッダ長フィールドの値に基づき待ち状態の挿入を行われずにステップS6に進む。
【０１４７】
ステップS6：無条件分岐命令によって、ステップS3に戻る。
ステップS3：ステップS4で次ヘッダがTCPヘッダであることが確認されているので、分岐命令でステップS7に進む。
＜ TCPヘッダ＞：
ステップS7：データ転送命令で「送信元/宛先ポート番号」が所定のレジスタに格納される。
【０１４８】
同様に、同図(1)〜(3)の動作例においても、各動作例に示されたステップ番号の命令の実行、及びこの命令に基づく待ち状態の挿入によって、TCPヘッダの送信元/宛先ポート番号を知ることができる。
すなわち、図10(2)に示したプログラムは、様々なタイプのヘッダを有するIPv6パケットに含まれる上位のTCPヘッダの送信先/宛先ポート番号を抽出することが可能であることを示している。
【０１４９】
図10及び図11に示した分岐命令を含むアルゴリズム例は、同一のパケット処理プロセッサ100内の分岐のみについて説明した。すなわち、同一のパケット処理プロセッサ100内の分岐が可能であることを示した。
例えば、要求スループットが高速であるため、１つのパケット処理プロセッサ100の実行可能命令数＝“５”である場合、図10(2)に示したステップS0〜S7のマイクロコードは、複数のパケット処理プロセッサ100のメモリ21に分散して配置しなければならない。
【０１５０】
そこで、ステップS0〜S4のマイクロコードを、図8(1)に示した後段のパケット処理プロセッサ100のメモリ21に配置し、ステップS5〜S7のマイクロコードを現段のメモリ21に配置する。これを同図(2)で示せば、ステップS0〜S4のマイクロコードが現段のメモリ21に配置され、ステップS5〜S7のマイクロコードが前段のメモリ21に配置されることになる。
【０１５１】
ステップS6の無条件分岐命令（図10(1)参照）によるステップS3への分岐は、図8(1)に示した逆方向への分岐に相当し、ステップS3の条件付き分岐命令によるステップS7への分岐は、図8(2)に示した順方向への分岐に相当する。
各段のパケット処理プロセッサ100のプログラム実行制御部30（図７参照）は、分岐命令に獲得した場合、図８に示した手順で分岐命令を実行して、対応するパケット処理プロセッサ100のプログラム実行制御部30に起動指示信号及びプログラムカウンタ値を送ればよい。
【０１５２】
以上のように、従来のパケット処理プロセッサシステムがパケットの先頭から一定範囲、すなわち、許容命令数分の命令実行時間中にパケットデータ保持部内を転送されるパケットのデータのみについての処理を記述することが可能であったのに対し、本発明のパケット処理プロセッサシステムは、対象パケットがパケットデータ保持部70内を転送中である限り、分岐処理及び繰返処理を記述することが可能となっている。
【０１５３】
なお、上記の本発明の実施例では、TCP/IPプロトコルのパケットに対するパケット処理について述べたが、本発明のパケット処理プロセッサ及びパケット処理プロセッサシステムは、他のプロトコル及び他の階層のパケット（セル、データグラム、フレーム）等の処理に適用することが可能である。
【０１５４】
例えば、図11に示した動作例と同様の動作で、本発明のパケット処理プロセッサシステムは、パケットの最後尾にあるFCS（Frame Check Sequence）及びチェックサム等のデータの抽出処理の記述、また、パケット全体にわたる処理の記述が可能になる。
【０１５５】
なお、上記のプロセッサ及びプロセッサシステムの実施例では、パケットデータの実体が、パケットアクセスレジスタ内を移動するように構成しているが、実際にパケットデータアクセスレジスタに格納するものは、パケットデータの実体に限定されず、パケットデータから抽出し、再構成したデータでもよい。
【０１５６】
さらに、出願番号：特平12-240829号「パケットデータ処理装置」で示したようにパケット処理プロセッサシステム内の各パケット処理プロセッサ100のパケットデータ保持部70の合計段数が処理対象とするパケットの最大長よりも十分に大きければ、FIFO（First-In-First-Out）型のパケット処理プロセッサ100間情報伝達機構を組み合わせることで、前段のパケット処理プロセッサで前述の処理結果を利用することも可能である。
【０１５７】
（付記１）
パケットをその先頭から順次受信するパケットレジスタと、
該パケットの処理手順を記述したプログラムを保持する実行プログラム保持部と、
与えられたパケットの長さ及び該プログラムに基づいて実行するプログラムの命令数を決定し、該プログラムの実行を制御するプログラム実行制御部と、
を備えたことを特徴とするパケット処理プロセッサ。
【０１５８】
（付記２）
パケットをその先頭から順次受信するパケットレジスタと、
該パケットの処理手順を記述したプログラムを保持する実行プログラム保持部と、
与えられたパケットの長さ及び該プログラムに基づいて実行する命令数を決定し該プログラムの実行を制御するプログラム実行制御部と、
内部状態を保持する内部状態保持部と、
を備えたパケット処理プロセッサを少なくとも２つ縦続接続し、現段のパケット処理プロセッサの該内部状態及び出力パケットを前段のパケット処理プロセッサに与えることを特徴としたパケット処理プロセッサシステム。
【０１５９】
（付記３）
現在、パケットの先頭について駆動しているパケット処理プロセッサを指称する現段のパケット処理プロセッサと、時間軸上の未来に駆動するパケット処理プロセッサを指称する前段のパケット処理プロセッサ又は時間軸上の過去に起動されたパケット処理プロセッサを指称する後段のパケット処理プロセッサと、を有するパケット処理プロセッサシステムにおいて、
該パケット処理プロセッサは、パケットをその先頭から順次受信するパケットレジスタと、該パケットの処理手順を記述したプログラムを保持する実行プログラム保持部と、該プログラムの実行を制御するプログラム実行制御部と、を備え、
該現段のパケット処理プロセッサの出力パケットが、該前段のパケット処理プロセッサに与えられるように、該パケット処理プロセッサを少なくとも２つ縦続接続し、
該現段のパケット処理プロセッサのプログラム実行制御部が、該前段のパケット処理プロセッサ又は該後段のパケット処理プロセッサのプログラム実行制御部に対して、命令獲得タイミング及び命令獲得位置を指示することを特徴としたパケット処理プロセッサシステム。
【０１６０】
（付記４）上記の付記３において、
プログラム実行制御部が、与えられたパケットの長さ及び該プログラムに基づいて実行するプログラムの命令数を決定することを特徴としたパケット処理プロセッサシステム。
【０１６１】
（付記５）上記の付記３において、
該パケット処理プロセッサが、さらに、内部状態を保持する内部状態保持部を備え、
現段のパケット処理プロセッサの該内部状態を前段のパケット処理プロセッサに与えることを特徴としたパケット処理プロセッサシステム。
【０１６２】
（付記６）上記の付記２又は５において、
該実行プログラム保持部はバンク切替が可能であり、該内部状態がバンク値であることを特徴としたパケット処理プロセッサシステム。
（付記７）上記の付記１において、
該プログラム実行制御部は、処理中のパケットが終了したことにより又は新規パケットが入力されたことにより、該パケットに対する次の命令の獲得を停止することを特徴としたパケット処理プロセッサ。
【０１６３】
（付記８）上記の付記２又は３において、
該プログラム実行制御部は、処理中のパケットが終了したことにより又は新規パケットが入力されたことにより、該パケットに対する次の命令の獲得を停止することを特徴としたパケット処理プロセッサシステム。
【０１６４】
（付記９）上記の付記１において、
該プログラム実行制御部は、命令獲得を所定の命令実行クロック分だけ行わないことを特徴としたパケット処理プロセッサ。
（付記１０）上記の付記２又は３において、
該プログラム実行制御部は、命令獲得を所定の命令実行クロック分だけ行わないことを特徴としたパケット処理プロセッサシステム。
【０１６５】
（付記１１）上記の付記１において、
該プログラム実行制御部は、該パケットが入力されたタイミングを示す転送タイミング信号を受信したときから、所定の命令実行クロック分だけ命令獲得を行わないことを特徴としたパケット処理プロセッサ。
【０１６６】
（付記１２）上記の付記２において、
該プログラム実行制御部は、該パケットが入力されたタイミングを示す転送タイミング信号を受信したときから、所定の命令実行クロック分だけ命令獲得を行わないことを特徴としたパケット処理プロセッサシステム。
【０１６７】
（付記１３）上記の付記３において、
該プログラム実行制御部は、該パケットが入力されたタイミングを示す転送タイミング信号を受信したときから、所定の命令実行クロック分だけ命令獲得を行わないことを特徴としたパケット処理プロセッサシステム。
【０１６８】
（付記１４）上記の付記１３において、
該所定の命令実行クロックが、該命令獲得位置であることを特徴としたパケット処理プロセッサシステム。
（付記１５）上記の付記１において、
該プログラム実行制御部は、パケット処理プロセッサ自身の内部状態及び該プログラムに基づき命令獲得位置を決定することを特徴としたパケット処理プロセッサ。
【０１６９】
（付記１６）上記の付記２又は５において、
該プログラム実行制御部は、パケット処理プロセッサ自身の内部状態及び該プログラムに基づき命令獲得位置を決定することを特徴としたパケット処理プロセッサシステム。
【０１７０】
（付記１７）上記の付記１５において、
該内部状態が、許容命令数又は実行可能命令数であることを特徴としたパケット処理プロセッサ。
（付記１８）上記の付記１６において、
該内部状態が、許容命令数又は実行可能命令数であることを特徴としたパケット処理プロセッサシステム。
【０１７１】
【発明の効果】
以上説明したように、本発明に係るパケット処理プロセッサ又はパケット処理プロセッサシステムによれば、パケットレジスタがパケットをその先頭から順次受信し、実行プログラム保持部が該パケットの処理手順を記述したプログラムを保持し、プログラム実行制御部が与えられたパケットの長さ及び該プログラムに基づいて実行するプログラムの命令数を決定して該プログラムの実行を制御するように構成したので、実行可能な命令数を増やすこと及びアクセス可能なパケット範囲を広くすることが可能になる。
【０１７２】
特に、パケット処理プロセッサシステムおいては、システム全体として１つのパケットに対する実行可能な命令数及びアクセス可能範囲を増やすことができるため、システムの段数を少なくすることが可能になる。この結果、ハードウェア資源を有効に活用することが可能になる。
【０１７３】
また、該プログラム実行制御部が、少なくとも前段及び後段の内の一方のパケット処理プロセッサのプログラム実行制御部に対して、命令獲得タイミング及び命令獲得位置を指示することによって、パケット処理プロセッサ間にまたがるプログラムの分岐命令を記述し実行することが可能になり、パケット処理のプログラミングを柔軟性に行うことが可能になる。
【０１７４】
また、該プログラム実行制御部が、命令獲得を所定の命令実行クロック分だけ行わないこと、転送タイミング信号を受信したときから所定の命令実行クロック分だけ命令獲得を行わないこと、パケット処理プログラムを柔軟に記述することが可能になる。
【０１７５】
このように本発明においては、各パケット処理プロセッサ内の命令実行遅延機構、及び同一バンク内での分岐命令、パケット処理プロセッサ間相互の起動制御を可能にすることで、パケット処理のプログラミングを柔軟に行うことが可能になる。
【図面の簡単な説明】
【図１】本発明に係るパケット処理プロセッサの実施例を示したブロック図である。
【図２】本発明に係るパケット処理プロセッサにおける実行プログラム保持部、パケットデータ保持部、及びプログラム実行制御部をより詳細に示したブロック図である。
【図３】本発明に係るパケット処理プロセッサにおけるプログラム実行制御例を示した図である。
【図４】本発明に係るパケット処理プロセッサの命令実行タイミング（バンク切替及び命令獲得(1)例を示した図である。
【図５】本発明に係るパケット処理プロセッサシステムの実施例(1)を示したブロック図である。
【図６】本発明に係るパケット処理プロセッサシステムの実施例(2)を示したブロック図である。
【図７】本発明に係るパケット処理プロセッサシステムにおけるプログラム実行制御部の構成例を示したブロック図である。
【図８】本発明に係るパケット処理プロセッサシステムにおける分岐命令に基づく命令実行順例を示した図である。
【図９】本発明に係るパケット処理プロセッサシステムの命令実行タイミング（命令獲得(2)）例を示した図である。
【図１０】本発明に係るパケット処理プロセッサにおけるIPv6パケットに含まれるTCPポート番号獲得アルゴリズム例を示した図である。
【図１１】本発明に係るパケット処理プロセッサにおけるIPv6パケットに含まれるTCPポート番号獲得例を示した図である。
【図１２】従来のパケット処理プロセッサの構成(1)を示したブロック図である。
【図１３】従来のパケット処理プロセッサの構成(2)を示したブロック図である。
【図１４】従来のパケット処理プロセッサのプログラム実行制御を示した図である。
【図１５】従来のパケット処理プロセッサシステムの構成を示したブロック図である。
【図１６】一般的なIPヘッダのフォーマット図である。
【図１７】一般的なシムヘッダ及びTCPヘッダのフォーマット図である。
【図１８】一般的なTCPパケットを含むIPv６パケットのヘッダ構成例を示した図である。
【図１９】一般的なパケット処理プロセッサの分岐命令の概要を示した図である。
【図２０】一般的な繰り返し処理のフローを示したフローチャート図である。
【符号の説明】
100，100_1，100_2，101，101_1，101_2，102  パケット処理プロセッサ
10  演算部                        11  内部汎用レジスタ
12  内部状態保持部                13  制御部
14  外部バスバッファ              20  実行プログラム保持部
21，21_1〜21_3  プログラムメモリ（マイクロコード用メモリ）
21_1  基本命令格納領域            21_2〜21_4  拡張命令格納領域
30  プログラム実行制御部          30a  プログラム起動部
31  制御部                        311  命令獲得許可信号生成部
312  デコーダ                     32  メモリ制御部
33  プログラムカウンタ            34  加算器
35  +1加算器                      36，37  セレクタ
38  レジスタ                      40  命令実行部
40a  制御部                       50  内部状態保持部
60  パケットデータ入力部          70  パケットデータ保持部
p0〜p9  パケットデータアクセスレジスタ
80  パケットデータ出力部          90  中間データ保持部
110  バス                         120  メモリ
201，202  パケット                220  クロック
221  パケット到着信号             222  受信パケット転送タイミング信号
223  受信パケット長信号           224  バンク切替信号（バンク値）
225  メモリアドレス               226  命令データ
227  許容命令数                   228  実行可能命令数
229  命令獲得許可信号             230，230_1，230_2  起動指示信号
231，231_1，231_2  プログラムカウンタ値
232  遅延クロック数               233  起動指示信号
234  内部状態                     235  中間データ
図中、同一符号は同一又は相当部分を示す。
【図１】
0004342128.tif 000002
【図２】
0004342128.tif 000003
【図３】
0004342128.tif 000004
【図４】
0004342128.tif 000005
【図５】
0004342128.tif 000006
【図６】
0004342128.tif 000007
【図７】
0004342128.tif 000008
【図８】
0004342128.tif 000009
【図９】
0004342128.tif 000010
【図１０】
0004342128.tif 000011
【図１１】
0004342128.tif 000012
【図１２】
0004342128.tif 000013
【図１３】
0004342128.tif 000014
【図１４】
0004342128.tif 000015
【図１５】
0004342128.tif 000016
【図１６】
0004342128.tif 000017
【図１７】
0004342128.tif 000018
【図１８】
0004342128.tif 000019
【図１９】
0004342128.tif 000020
【図２０】
0004342128.tif 000021