【手続補正書】
【提出日】平成15年10月22日(2003.10.22)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の名称】プロセッサ装置
【特許請求の範囲】
【請求項１】パケットに対して、プログラムによる処理を実行するプロセッサ装置において、
固定レジスタ長を持つ複数のデータレジスタに、前記パケットを格納するパケット格納部と、
前記パケットの先頭からプロトコルスタックの開始位置を示すプロトコルスタック位置情報を取得し保持するアドレスレジスタと、
前記プロトコルスタック内のフィールドの位置及び対象フィールドを処理するためのパラメータを示すフィールド位置情報を管理するアドレスレジスタテーブルと、
前記プロトコルスタックの違いにより、フィールド位置が異なる前記パケットに対して、前記プロトコルスタックの違いに依存せずに同一のプログラムにより、前記プロトコルスタック位置情報及び前記フィールド位置情報にもとづいて、レジスタアライメントの整形処理をして、前記対象フィールドのパケット処理を行う演算部と、
を有することを特徴とするプロセッサ装置。
【請求項２】前記アドレスレジスタは、前記プロトコルスタック位置情報として、前記プロトコルスタックの開始位置が存在するデータレジスタを示すレジスタオフセットと、前記データレジスタ内で、前記開始位置のビット位置を示すビットオフセットと、から構成され、前記アドレスレジスタテーブルは、前記フィールド位置情報として、前記プロトコルスタック内のフィールドを示すエントリ番号と、前記プロトコルスタックの先頭がデータレジスタのアライメントと一致した場合の対象フィールドのＭＳＢが存在するデータレジスタを示すフィールドレジスタオフセットと、前記対象フィールドのＭＳＢがあるデータレジスタ内での開始位置のビット位置を示すフィールドＭＳＢ位置と、指定回転量を示す回転量と、前記対象フィールドの存在箇所を示すビットマスクと、から構成されることを特徴とする請求項１記載のプロセッサ装置。
【請求項３】受信したパケットのプロトコルスタックの先頭が、データレジスタのアライメントと一致するように、パディングを付加して前記パケットを加工するパケット前処理部をさらに有することを特徴とする請求項１記載のプロセッサ装置。
【請求項４】前記対象フィールドが存在するデータレジスタを示すレジスタビットマップを作成するレジスタビットマップ作成部をさらに有し、前記演算部は、前記レジスタビットマップにもとづきデータレジスタを選択することを特徴とする請求項１記載のプロセッサ装置。
【請求項５】前記パケットの受信毎に、または別プロトコルスタックへアクセスを行う毎に、前記アドレスレジスタテーブルの書き換え計算を行い、プロトコルスタックの先頭が、データレジスタのアライメントに一致していない場合のフィールド位置情報を含む書き換え後のアドレスレジスタテーブルを作成する書き換え計算部をさらに有することを特徴とする請求項１記載のプロセッサ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプロセッサ装置に関し、特にパケットに対して、プログラムによる処理を実行するプロセッサ装置に関する。
【０００２】
【従来の技術】
コンピュータや各種の情報処理機器を接続してシステムの利用を拡大するために、例えば、ＬＡＮ(Local Area Network)とＬＡＮ、ＬＡＮと専用線等を相互接続するといったネットワークが増加している。
【０００３】
こうして構築されるネットワークで現在主流なのはＩＰ(Internet Protocol)によるネットワークである。ＩＰはＩＳＯ(International Organization for Standardization)のＯＳＩ(Open Systems Interconnection)モデルにおけるネットワーク層に相当するコネクションレス型のプロトコルである。
【０００４】
コネクションレス型のＩＰ通信は、あらかじめ端末間で通信路を確保するコネクション型のプロトコルとは異なり、ＬＡＮ間を相互接続するパケット中継装置が、通信データが格納されているパケットを、ヘッダ情報にもとづいて中継処理することにより端末間の通信を実現する。
【０００５】
パケット中継装置では、受信パケットのパケットフォーマットをヘッダ情報から判別し、各パケットフォーマットに応じて、パケットヘッダのチェックサムの計算、宛先テーブルの検索、パケットヘッダの書き換え等を行ってパケット中継を実現する。
【０００６】
さらに、パケット中継装置では、上述のパケット中継処理に加え、ネットワーク上のある特定の通信を制限するパケットフィルタリングの実装が求められている。パケットフィルタリング処理では、特定の宛先アドレスを有するパケットを判別して、パケット中継を制限する処理を行う。
【０００７】
パケット処理システムを構築する場合、装置完成後のプロトコル自体の改訂に伴う処理手順の変更に耐えうるためには、上述のパケット中継処理やフィルタリング処理を含め、プロセッサによってソフトウェア処理するのが一般的である。
【０００８】
また近年では、装置開発者が記述したマイクロコード（命令列）のプログラムに従って、パケット処理を行うパケット処理プロセッサが開発されている。マイクロコードとは、パケット処理プロセッサが具備する機械語レベルの言語である。
【０００９】
【発明が解決しようとする課題】
しかし、従来のパケット処理プロセッサでパケットへアクセスする場合、あるヘッダ(例えば、ＩＰヘッダ)に対して、同一内容のパケット処理を行うプログラムであったとしても、そのヘッダよりも下位層のプロトコルスタックが互いに違う場合には、プログラム内の命令中で指定するオペランド（データの所在を示すもの）が異なることになる。
【００１０】
このため、装置開発者は、パケットのプロトコルスタックの違いに応じて、個別のプログラムを作成しなければならず、プログラム作成工数の増大及びプログラム格納用メモリの容量増大を招くといった問題があった。
【００１１】
本発明はこのような点に鑑みてなされたものであり、プロトコルスタックの違いを意識せずに、同一プログラムでのアクセスを可能とすることで、設計効率を向上させ、高品質なパケット処理を行うプロセッサ装置を提供することを目的とする。
【００１２】
【課題を解決するための手段】
本発明では上記課題を解決するために、図１に示すような、パケットに対して、プログラムによる処理を実行するプロセッサ装置１において、固定レジスタ長を持つ複数のデータレジスタに、パケットを格納するパケット格納部１０と、パケットの先頭からプロトコルスタックの開始位置を示すプロトコルスタック位置情報を取得し保持するアドレスレジスタ２０と、プロトコルスタック内のフィールドの位置及び対象フィールドを処理するためのパラメータを示すフィールド位置情報を管理するアドレスレジスタテーブル３０と、プロトコルスタックの違いにより、フィールド位置が異なるパケットに対して、プロトコルスタックの違いに依存せずに同一のプログラムにより、プロトコルスタック位置情報及びフィールド位置情報にもとづいて、レジスタアライメントの整形処理をして、対象フィールドのパケット処理を行う演算部４０と、を有することを特徴とするプロセッサ装置１が提供される。
【００１３】
ここで、パケット格納部１０は、固定レジスタ長を持つ複数のデータレジスタに、パケットを格納する。アドレスレジスタ２０は、パケットの先頭からプロトコルスタックの開始位置を示すプロトコルスタック位置情報を取得し保持する。アドレスレジスタテーブル３０は、プロトコルスタック内のフィールドの位置及び対象フィールドを処理するためのパラメータを示すフィールド位置情報を管理する。演算部４０は、プロトコルスタックの違いにより、フィールド位置が異なるパケットに対して、プロトコルスタックの違いに依存せずに同一のプログラムにより、プロトコルスタック位置情報及びフィールド位置情報にもとづいて、レジスタアライメントの整形処理をして、対象フィールドのパケット処理を行う。
【００１４】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。図１は本発明のプロセッサ装置の原理図である。プロセッサ装置１は、プログラム（マイクロコード）によりパケット処理を実行する装置であり、パケット中継装置などに適用される。パケット中継装置（ＩＰルータ等）は、宛先テーブルの検索やヘッダ書き換え処理等のパケット処理を行って、通信網上でパケットの中継を行うものである。
【００１５】
パケット格納部１０は、複数のデータレジスタ（１つのデータレジスタは固定のレジスタ長を持つ）から構成され、受信したパケットを格納する。アドレスレジスタ２０は、パケットの先頭からプロトコルスタックの開始位置を示すプロトコルスタック位置情報を、受信パケット毎に取得し保持する。
【００１６】
アドレスレジスタテーブル３０は、プロトコルスタック内のフィールドの位置及び対象フィールドを処理するためのパラメータを示すフィールド位置情報を管理する。
【００１７】
なお、アドレスレジスタ２０で保持されるプロトコルスタック位置情報は、受信したパケット毎に応じて取得される情報であり、アドレスレジスタテーブル３０で管理するフィールド位置情報は、プログラム共通のライブラリとしてあらかじめ設定しておく情報である。
【００１８】
演算部４０は、プロトコルスタックの違いに依存せずに同一のプログラムにより、プロトコルスタック位置情報及びフィールド位置情報にもとづいて、レジスタアライメントの整形処理をしつつ、対象フィールドに対してのパケット処理（ここでは対象フィールドの抽出・更新）を行う。
【００１９】
なお、レジスタアライメントの整形処理とは、抽出・更新すべき対象フィールドのデータのＭＳＢ(Most Significant Bit)またはＬＳＢ(Least Significant Bit)を、データレジスタのアライメント（境界線）に一致させる処理のことである。
【００２０】
ここで、パケットＡ、Ｂに対し、プロトコルスタックが双方ちがうと、対象フィールドの位置がパケットＡ、Ｂで異なる。このような場合、従来では、対象フィールドにアクセスするために、プロトコルスタック毎にプログラムＡ、Ｂを作成する必要があったが（すなわち、パケットＡ、Ｂそれぞれに対応するプログラムを作成する必要があった）、本発明では、プロトコルスタックが異なっていても、１つのプログラムＣでパケットＡ、Ｂのそれぞれの対象フィールドに、アクセスの実行を可能とするものである。なお、本発明の詳細な構成及び動作については図４以降で説明する。
【００２１】
次に本発明が解決したい問題点について詳しく説明する。図２、図３はパケット構成を示す図である。図２はデータリンク層がEthernet(登録商標)（DIX）形式の場合のパケット１０１を示し、図３はデータリンク層がEthernet（SNAP）形式の場合のパケット１０２を示している。
【００２２】
図中、“任意の名前＿ＤＡ”は、任意の名前のデスティネーションアドレス（Destination Address：宛先アドレス）を示し、“任意の名前＿ＳＡ”は、任意の名前のソースアドレス（Source Address：発信元アドレス）を示す。そして、“任意のフィールド名[数値１：数値２]”は、任意のフィールドの数値１と数値２を含む数値１から数値２までの範囲を示す。
【００２３】
また、ＤＩＸはDigital,Intel,Xeroxの略であり、ＳＮＡＰはSubNetwork Access Protocolの略である。ＭＡＣはMedia Access Controlの略でデータリンク層を示し、ＳＳＡＰはSource Service Access Pointの略である。ＤＳＡＰは、Destination Service Access Pointの略であり、ＬＬＣはLogical Link Controlの略であり、ＯＵＩはOrganizationally Unique Identifierの略である。
【００２４】
通常、パケットは、先頭から複数のパケットヘッダが積み重なるように格納され、(図では、Ethernetヘッダの次にＩＰヘッダが積まれている)、後続してパケットデータ(図中のData)が格納される。そして、各パケットヘッダには、複数のフィールド（例えば、ＭＡＣ＿ＤＡ等）が格納される。
【００２５】
また、パケットヘッダの位置は、パケットが包含するプロトコルスタックに応じて異なる。例えば、ネットワーク層のプロトコルがＩＰのパケット同士であったとしても、下位層のデータリンク層のプロトコルが互いに異なれば、パケットヘッダの位置も異なってくる。
【００２６】
すなわち、図２、図３に示すように、データリンク層のフォーマット形式がEthernet(DIX)形式とEthernet(SNAP)形式というように異なれば、ＩＰヘッダの位置は異なることになる。データリンク層がEthernet(DIX)形式のパケット１０１では、データレジスタｄ３からＩＰヘッダの先頭が始まるのに対して、Ethernet(SNAP)形式のパケット１０２では、データレジスタｄ５からＩＰヘッダの先頭が始まっている。
【００２７】
ただし、パケットヘッダ内の各フィールド位置は、固定的であり、パケットヘッダの種類が同一種ならば、各フィールドの位置は、パケットヘッダの先頭から互いに同一位置になる。例えば、ＩＰ＿ＳＡフィールドは、いずれのパケット１０１、１０２に対しても、ＩＰヘッダの先頭から同一位置（ＩＰヘッダ中のビット位置３２、ビット位置６３）にある。
【００２８】
このような特性を持つパケットに対して、装置開発者が記述したマイクロコードの命令によって、パケット処理が行われる。命令列のフォーマットは、「修飾子  オペコード  デスティネーションレジスタ  ソースレジスタ」といった形をとる。
【００２９】
オペコードとは、加算や減算等の処理動作を規定し、デスティネーションレジスタは、処理動作結果の格納先を示し、ソースレジスタは、処理動作の対象となるデータの読み出し元を示す。
【００３０】
ここで、命令列の一例として、パケット１０１に対して、“ソースレジスタとしてＩＰ＿ＳＡを指定する命令列”について示すと、この命令列は、Cond Opecode Operand0 d6、Cond Opecode Operand1 d7となる。
【００３１】
「Cond」は、任意の命令に対する任意の修飾子を示し、「Opecode」は、任意のオペコード(例えば、加算、減算等)を示し、「Operand0」「Operand１」は、任意のデスティネーションレジスタを示す。そして、ＩＰ＿ＳＡは、パケット１０１の場合、データレジスタｄ６とデータレジスタｄ７にまたがっているため、ソースレジスタ部分は「ｄ６」、「ｄ７」となる。
【００３２】
同様にパケット１０２に対して、“ソースレジスタとしてＩＰ＿ＳＡを指定する命令列”を示すと、この命令列はCond Opecode Operand0 d8、Cond Opecode Operand1 d9となる。パケット１０２では、ＩＰ＿ＳＡは、データレジスタｄ８とデータレジスタｄ９にまたがっているため、ソースレジスタ部分は「ｄ８」、「ｄ９」となる。
【００３３】
このように、同一内容である「ＩＰ＿ＳＡを参照する」というパケット処理を実行する場合、データリンク層がEthernet(DIX)形式のパケット１０１では、ソースレジスタとしてデータレジスタｄ６、ｄ７を指定するプログラムを実行するのに対して、データリンク層がEthernet(SNAP)形式のパケット１０２では、ソースレジスタとしてデータレジスタｄ８、ｄ９を指定するプログラムを実行することになる。
【００３４】
このため、従来では、装置開発者は、データリンク層がEthernet(DIX)形式のときのプログラムと、データリンク層がEthernet(SNAP)形式のときのプログラムとの両方を作成する必要があり、利便性及び設計効率が悪いといった問題があった。本発明では、プロトコルスタックの違いに依存せず、同一プログラムで互いのフィールドへアクセス可能となるように制御して、設計効率の向上及びパケット処理の高品質化を図るものである。
【００３５】
次に本発明のプロセッサ装置１の構成及び動作（第１の実施の形態とする）について具体例を用いて詳しく説明する。図４はプロセッサ装置１によるパケット格納部１０へのアクセスアーキテクチャを示す図である。
【００３６】
パケット格納部１０は、一定のビット長(レジスタ長を３２ビットとする)を有するデータレジスタで構成され（図中のｄ０〜ｄ１５はデータレジスタ名）、パケットデータは、基本的にビット長単位に入出力が実行される。
【００３７】
したがって、１つの命令によってプロセッサ装置１がアクセス可能な最大フィールド長は、３２ビットのレジスタ長であり、このレジスタ長より長いフィールドをアクセスする際には、複数命令に分けて対象フィールドをアクセスすることになる（本発明が解決したい課題やその解決といったことに関係なく上述のことがいえる）。
【００３８】
本発明のプロセッサ装置１では、最大フィールド長（３２ビット）から、最小フィールド長（０ビット）までの範囲内のアクセス処理において、プロトコルスタックの違いに関係なく、同一の対象フィールドに対し、同一のオペランドでアクセスを可能とする。
【００３９】
このため、本発明では、プロセッサ装置１が、対象フィールドを複数命令に分けてアクセスする際にも、対象フィールドを各命令がアクセスするフィールド長に分配して、分割後の対象フィールドを、あらたな対象フィールドとしてアドレスレジスタテーブル上定義しなおすことによって、これら複数の各命令に対して、同一の対象フィールドに対し、同一のオペランドでアクセス可能である。
【００４０】
次に図中の各構成要素について説明する。アドレスレジスタ２０は、複数のアドレスレジスタAddReg0、 AddReg1、 AddReg2、…によって構成し、プロトコルスタック０がアドレスレジスタAddReg0、プロトコルスタック１がアドレスレジスタAddReg1というように対応する。
【００４１】
なお、アドレスレジスタの番号(例えば、AddReg0)と、そのアドレスレジスタ番号が示すプロトコルスタック(例えば、ＩＰヘッダ)との対応関係は、固定的ではなく、装置開発者がプログラムに応じて関連付けを定義して設定するものである。また、各アドレスレジスタは、プロトコルスタック位置情報として、レジスタオフセット（RegOffset）とビットオフセット（BitOffset）から構成される。
【００４２】
１つのアドレスレジスタは、１つのプロトコルスタック(例えば、EthernetヘッダとかＩＰヘッダ等)のパケット先頭からの開始位置を示している。例えば、アドレスレジスタAddReg0に対しては、レジスタオフセットが４であり、ビットオフセットが２４であるので(以降、{AddReg0, RegOffset}＝４、{AddReg0, BitOffset}＝２４というように表記する)、プロトコルスタック０の開始位置は、データレジスタｄ４のビット位置７となる。
【００４３】
なお、３２ビット長のレジスタのビット位置は、ＬＳＢ側から、ビット位置０、１、２、…、３１である（１つのデータレジスタの右アライメント側がＬＳＢ、左アライメント側がＭＳＢである）。
【００４４】
一方、アドレスレジスタテーブル３０は、複数のアドレスレジスタテーブルAddRegTbl0、AddRegTbl1、AddRegTbl2、…によって構成される。なお、アドレスレジスタテーブルAddRegTbl0はアドレスレジスタAddReg0に、アドレスレジスタテーブルAddRegTbl1はアドレスレジスタAddReg1に、というように１：１に対応している。
【００４５】
また、各アドレスレジスタテーブルは、フィールド位置情報として、エントリ番号(entry)、フィールドレジスタオフセット(RegOffset)、フィールドＭＳＢ位置、回転量、ビットマスク（６４ビット）（BitMask(64bit)）の各項目から構成される。
【００４６】
図５はアドレスレジスタテーブル３０上のフィールド位置情報の内容を説明するための図である。エントリ番号(entry)は、プロトコルスタック内のフィールドを示す。例えば、アドレスレジスタテーブルAddRegTbl0のプロトコルスタックがＩＰヘッダのテーブルであるとき、Ｅ０はＩＰヘッダ内のＩＰ＿ＳＡに該当する、というようにエントリ番号はフィールドを表すものである。図では、エントリ番号Ｅ０は、図中の対象フィールド０に該当し、エントリ番号Ｅ１は、対象フィールド１に該当するものとする。
【００４７】
フィールドレジスタオフセット(RegOffset)は、プロトコルスタックの先頭がデータレジスタのアライメントと一致した場合の対象フィールドのＭＳＢが存在するデータレジスタを示す。図の場合、パケット格納部１０に対してプロトコルスタックの開始位置を、その開始位置が存在する行の左端に移動させた場合に、左端のデータレジスタから数えて、対象フィールドのＭＳＢが存在するデータレジスタまでの数を示す。
【００４８】
ここで、プロトコルスタック０の実際の開始位置は、図４で上述したように、データレジスタｄ４のビット位置７（図５の位置Ｐ）であるが、この開始位置Ｐを、その開始位置が存在するデータレジスタ左端（位置Ｐｔ）に移動させる。そして、この状態（位置Ｐｔからプロトコルスタック０が開始すると設定した状態）のときに、開始位置が存在するデータレジスタから数えて、対象フィールドのＭＳＢが存在するデータレジスタまでの数がフィールドレジスタオフセットである。
【００４９】
例えば、エントリ番号Ｅ０の対象フィールド０のフィールドレジスタオフセット(RegOffset)について見ると、このフィールドレジスタオフセット(RegOffset)は、開始位置が存在するデータレジスタ（データレジスタｄ４）から数えて、対象フィールド０のＭＳＢが存在するデータレジスタ（データレジスタｄ７）までの数を示している。
【００５０】
すなわち、データレジスタｄ４から０から数えて３番目のデータレジスタに対象フィールド０のＭＳＢがあるので（データレジスタｄ４から０から数えた数字を図中の括弧内に示す）、対象フィールド０のフィールドレジスタオフセット(RegOffset)は３となる。
【００５１】
同様に、位置Ｐｔからプロトコルスタック０が開始するとみなした状態で、エントリ番号Ｅ１の対象フィールド１のフィールドレジスタオフセット(RegOffset)について見ると、対象フィールド１のＭＳＢは、データレジスタｄ１２に存在することになるので、データレジスタｄ４から０から数えて８番目のデータレジスタとなり、対象フィールド１のフィールドレジスタオフセット(RegOffset)は８となる。
【００５２】
一方、フィールドＭＳＢ位置は、位置Ｐｔからプロトコルスタック０が開始するとみなした状態で、対象フィールドのＭＳＢがあるデータレジスタ内での対象フィールドの開始位置（すなわち、対象フィールドのＭＳＢの位置）を示す。
【００５３】
例えば、対象フィールド０のＭＳＢは、データレジスタｄ７のビット位置７から始まるので、対象フィールド０のフィールドＭＳＢ位置は７であり、対象フィールド１のＭＳＢは、データレジスタｄ１２のビット位置１５から始まるので、対象フィールド１のフィールドＭＳＢ位置は１５である。
【００５４】
また、指定回転量を示す回転量及び対象フィールドの存在箇所を示すビットマスク（BitMask(64bit)）は、レジスタアライメントの整形処理時に用いるパラメータである。これらのパラメータを使用してのレジスタアライメントの整形処理については後述する。
【００５５】
なお、ビットマスクのビット長は、レジスタ長の２倍を持ち、ここではレジスタ長は３２ビットなので、この２倍の６４ビットとなっている。レジスタ長が３２ビット以外のときは、ビットマスクのビット長は、そのレジスタ長の２倍のビット長を有することになる。
【００５６】
以上説明したような、アドレスレジスタ２０のプロトコルスタック位置情報及びアドレスレジスタテーブル３０のフィールド位置情報にもとづき、装置開発者が記述したプログラムにより、プロセッサ装置１は、データレジスタ上の対象フィールドに対してアクセスを行うことになる。
【００５７】
ここで、本発明のプロセッサ装置１を動作させる際の、プロトコルスタックの違いに依存しないプログラムについて説明する。例えば、ＩＰヘッダ内のＩＰ＿ＳＡフィールドにアクセスする命令列を、装置開発者が記述する場合、装置開発者は、ＩＰヘッダを示す“AddReg0”とＩＰ＿ＳＡフィールドを示すAddRegTbl0のエントリ番号“Ｅ０”を組で、ソースレジスタ／デスティネーションレジスタとして指定することにより、パケットのプロトコルスタックの違いに関係なく、同一処理を同一プログラムで記述できる。
【００５８】
命令列の具体例を示すと、ソースレジスタとして対象フィールド０を指定する命令列はCond Opecode Operand0 AddReg0 E0となり、ソースレジスタとして対象フィールド１を指定する命令列はCond Opecode Operand1 AddReg0 E1となる。
【００５９】
また、デスティネーションレジスタとして対象フィールド０を指定する命令列はCond Opecode AddReg0 E0 Operand0となり、デスティネーションレジスタとして対象フィールド１を指定する命令列はCond Opecode AddReg0 E1 Operand1となる。
【００６０】
次に演算部４０について説明する。上述したようなプログラムにもとづいて、プロセッサ装置１内の演算部４０は、対象フィールドを特定して、抽出／更新（Read／Write）の処理を行うことになる。まず最初に、ソースレジスタ内の対象フィールド０を抽出（リード）してデスティネーションレジスタへ格納する処理について図６〜図１１を用いて説明する。
【００６１】
図６は演算部の全体構成を示す図である。演算部４０Ｒは、ソースレジスタ選択器４１Ｒ−１、４１Ｒ−２、フィールド抽出器４２Ｒ−１、４２Ｒ−２から構成される。ソースレジスタ選択器４１Ｒ−１、４１Ｒ−２は、対象フィールドが存在するデータレジスタ（ソースレジスタ）を選択する。フィールド抽出器４２Ｒ−１、４２Ｒ−２は、レジスタアライメントの整形処理を行い、対象フィールドを抽出し、抽出した対象フィールドを、指定されたデスティネーションレジスタへ格納する。
【００６２】
図７はソースレジスタ選択器４１Ｒ−１の構成を示す図である。ソースレジスタ選択器４１Ｒ−１（第１のソースレジスタ選択器）は、減算部４１Ｒ−１ａ、加算部４１Ｒ−１ｂから構成される。ソースレジスタ選択器４１Ｒ−１は、データレジスタｄ８とデータレジスタｄ９にまたがって格納されている対象フィールド０の第１ソースレジスタとして、データレジスタｄ８を選択するものである。
【００６３】
また、ソースレジスタ選択器４１Ｒ−１は、基本的には、{AddReg0, RegOffset}と{AddRegTbl0, E0, RegOffset}をもとにデータレジスタを選択するが、{AddRegTbl0, E0, フィールドＭＳＢ位置}が{AddReg0, BitOffset}よりも小さいときには、{AddReg0, RegOffset}と{AddRegTbl0, E0, RegOffset}をもとに選択したデータレジスタ値から次のデータレジスタを選択する。
【００６４】
ここで、減算部４１Ｒ−１ａは、{AddRegTbl0,E0,フィールドＭＳＢ位置}＝７と{AddReg0, BitOffset}＝２４を入力値として、７−２４の減算を行う。減算結果が負の数のとき（{AddRegTbl0, E0, フィールドＭＳＢ位置}が{AddReg0, BitOffset}よりも小さいとき）は“１”を出力する。
【００６５】
加算部４１Ｒ−１ｂは、{AddReg0,RegOffset}＝４、{AddRegTbl0,E0,RegOffset}＝３を加算し、さらに減算部４１Ｒ−１ａの出力値＝１を加えて加算値８として、データレジスタ選択番号ｄ８を選択する。
【００６６】
図８はソースレジスタ選択器４１Ｒ−２の構成を示す図である。ソースレジスタ選択器４１Ｒ−２（第２のソースレジスタ選択器）は、減算部４１Ｒ−２ａ、加算部４１Ｒ−２ｂから構成される。ソースレジスタ選択器４１Ｒ−２は、データレジスタｄ８とデータレジスタｄ９にまたがって格納されている対象フィールド０の第２ソースレジスタとして、データレジスタｄ９を選択するものである。
【００６７】
ソースレジスタ選択器４１Ｒ−２は、ソースレジスタ選択器４１Ｒ−１と同様の動作を行う。ただし、ソースレジスタ選択器４１Ｒ−１が選択した次のデータレジスタを選択するため、加算部４１Ｒ−２ｂでは、{AddReg0,RegOffset}＝４、{AddRegTbl0,E0,RegOffset}＝３、減算部４１Ｒ−２ａの出力値＝１の他に、さらに１を加算して加算値９として、データレジスタ選択番号ｄ９を選択する。
【００６８】
図９はフィールド抽出器（置き換え）４２Ｒ−１の構成を示す図である。第１のフィールド抽出器であるフィールド抽出器（置き換え）４２Ｒ−１は、論理積器４２Ｒ−１ａ、右回転器４２Ｒ−１ｂ（第２の右回転器）、右回転器４２Ｒ−１ｃ（第１の右回転器）、左回転器４２Ｒ−１ｄ、上位３２ｂｉｔ／下位３２ｂｉｔ出力器４２Ｒ−１ｅ（ビット分割部）、セレクタ４２Ｒ−１ｆ、減算部４２Ｒ−１ｇから構成される。
【００６９】
フィールド抽出器(置き換え)４２Ｒ−１は、対象フィールドがレジスタアライメントと一致していない場合に、対象フィールドを抽出して整形処理をして置き換えを行う。ここでは、データレジスタｄ８の下位１６ビットの位置にある対象フィールド０を抽出し、デスティネーションレジスタOperand0の上位１６ビットに置き換えて格納する。
【００７０】
減算部４２Ｒ−１ｇは、{AddReg0, BitOffset}＝２４と{AddRegTbl0、E0、フィールドＭＳＢ位置}＝７とを減算して大小関係を求め“１”を出力する。右回転器４２Ｒ−１ｃは、{AddReg0, BitOffset}＝２４を指定回転量として、{AddRegTbl0, E0, BitMask}＝0x000000FFFFFFFF00（０ｘは１６進数を示す）に、後述の右回転処理を施し、0xFFFF00000000FFFFを出力する。
【００７１】
上位３２ｂｉｔ／下位３２ｂｉｔ出力器４２Ｒ−１ｅは、右回転器４２Ｒ−１ｃの６４ビットの出力値を上位３２ビット、下位の３２ビットに分割して、上位３２ビット0xFFFF0000、下位３２ビット0x0000FFFFを出力する。
【００７２】
セレクタ４２Ｒ−１ｆは、減算部４２Ｒ−１ｇの出力値をセレクト信号として用いて、端子（０）に入力する上位３２ビットデータと、端子（１）に入力する下位３２ビットデータのいずれかを選択して出力する。ここでは、減算部４２Ｒ−１ｇの出力値は“１”なので、端子（１）に入力する下位３２ビットデータ0x0000FFFFが選択されて出力される。
【００７３】
論理積器４２Ｒ−１ａは、データレジスタｄ８内のデータ値（0x12345678とする）とセレクタ４２Ｒ−１ｆの選択出力0x0000FFFFとを受信し、ＡＮＤ論理をとって、0x00005678を出力する。
【００７４】
右回転器４２Ｒ−１ｂは、{AddRegTbl0, E0, 回転量}＝８を指定回転量として、論理積器４２Ｒ−１ａからの出力値0x00005678に、後述の右回転処理を施し、0x78000056を出力する。
【００７５】
左回転器４２Ｒ−１ｄは、{AddReg0, BitOffset}＝２４を指定回転量として、右回転器４２Ｒ−１ｂからの出力値0x78000056に、後述の左回転処理を施し、0x56780000を出力する。
【００７６】
このような演算制御を行って、対象フィールド０のデータを下位１６ビットに保持したデータレジスタｄ８のデータ0x12345678を0x56780000と変換している。これにより、第１ソースレジスタ（データレジスタｄ８）から対象フィールド０の下位１６ビットを抽出した結果を、デスティネーションレジスタOperand０の上位１６ビット側へ置き換えて格納できる。
【００７７】
ここで右回転処理、左回転処理について説明する。右回転処理は、指定回転量の分だけ、下位ビット値を上位ビットの位置へ移動させて全体を右へシフトする。左回転処理は、上位ビット値を下位ビットの位置へ移動させて全体を左へシフトする。例えば、２進数１０１１を１ビット右回転すると２進数１１０１になる。また、２進数１０１１を１ビット左回転すると２進数０１１１になる。
【００７８】
図１０は右回転、左回転を示す図である。右回転器４２Ｒ−１ｃと左回転器４２Ｒ−１ｄの動作について示す。右回転器４２Ｒ−１ｃでは、0x000000FFFFFFFF00に対し、指定回転量の{AddReg0, BitOffset}＝２４ビット分を右回転する場合、下位ビット値FFFF00を上位ビットの位置へ移動させて全体を右へシフトする。右回転後の値は、0xFFFF00000000FFFFとなる。
【００７９】
また、左回転器４２Ｒ−１ｄでは、0x78000056に対し、指定回転量の{AddReg0, BitOffset}＝２４ビット分を左回転する場合、上位ビット値780000を下位ビットの位置へ移動させて全体を左へシフトする。左回転後の値は、0x56780000となる。
【００８０】
図１１はフィールド抽出器（追加）４２Ｒ−２の構成を示す図である。第２のフィールド抽出器であるフィールド抽出器（追加）４２Ｒ−２は、論理積器４２Ｒ−２ａ、右回転器４２Ｒ−２ｂ（第２の右回転器）、右回転器４２Ｒ−２ｃ（第１の右回転器）、左回転器４２Ｒ−２ｄ、上位３２ｂｉｔ／下位３２ｂｉｔ出力器４２Ｒ−２ｅ（ビット分割部）、セレクタ４２Ｒ−２ｆ、減算部４２Ｒ−２ｇ、論理和器４２Ｒ−２ｈから構成される。
【００８１】
フィールド抽出器（追加）４２Ｒ−２は、図９で上述したフィールド抽出器（置き換え）４２Ｒ−１により格納された残りのデータレジスタの空き部分に、データレジスタｄ９から抽出した対象フィールドを追加して格納する。
【００８２】
ここでは、データレジスタｄ９の上位１６ビットの位置にある対象フィールド０を抽出し、レジスタアライメントの整形処理を行って、デスティネーションレジスタOperand0の下位１６ビット（上位１６ビットは、すでにデータレジスタｄ８の対象フィールド０が格納済み）に追加して格納できる。
【００８３】
減算部４２Ｒ−２ｇは、{AddReg0, BitOffset}＝２４と{AddRegTbl0、E0、フィールドＭＳＢ位置}＝７とを減算して大小関係を求め“１”を出力する。右回転器４２Ｒ−２ｃは、{AddReg0, BitOffset}＝２４を指定回転量として、{AddRegTbl0, E0, BitMask}＝0x000000FFFFFFFF00に、右回転処理を施し、0xFFFF00000000FFFFを出力する。
【００８４】
上位３２ｂｉｔ／下位３２ｂｉｔ出力器４２Ｒ−２ｅは、0xFFFF00000000FFFFを、上位３２ビット0xFFFF0000、下位３２ビット0x0000FFFFに分割して出力する。
【００８５】
セレクタ４２Ｒ−２ｆは、減算部４２Ｒ−２ｇの出力値をセレクト信号として用いて、端子（１）に入力する上位３２ビットデータと、端子（０）に入力する下位３２ビットデータのいずれかを選択して出力する。ここでは、端子（１）に入力する上位３２ビットデータ0xFFFF0000が選択されて出力される。
【００８６】
論理積器４２Ｒ−２ａは、データレジスタｄ９のデータ値（0x9ABCDEF0とする）とセレクタ４２Ｒ−２ｆの選択出力0xFFFF0000とを受信し、ＡＮＤ論理をとって、0x9ABC0000を出力する。
【００８７】
右回転器４２Ｒ−２ｂは、{AddRegTbl0, E0, 回転量}＝８を指定回転量として、論理積器４２Ｒ−２ａからの出力値0x9ABC0000に、右回転処理を施し、0x009ABC00を出力する。
【００８８】
左回転器４２Ｒ−２ｄは、{AddReg0, BitOffset}＝２４を指定回転量として、右回転器４２Ｒ−２ｂからの出力値0x009ABC00に、左回転処理を施し、0x00009ABCを出力する。
【００８９】
論理和器４２Ｒ−２ｈは、左回転器４２Ｒ−２ｄからの出力値0x00009ABCと、図９で上述したフィールド抽出器（置き換え）４２Ｒ−１による演算結果0x56780000とのＯＲ論理をとって、0x56789ABCを出力する。
【００９０】
このような演算制御を行って、対象フィールド０のデータを上位１６ビットに保持したデータレジスタｄ９のデータ0x9ABCDEF0を0x56789ABCと変換している。これにより、第２ソースレジスタ（データレジスタｄ９）から対象フィールド０の上位１６ビットを抽出した結果を、デスティネーションレジスタOperand０の下位１６ビット側へ追加して格納する。
【００９１】
以上説明したような制御を行うことで、プロトコルスタックの違いに依存しないプログラムにより、対象フィールドを特定して、抽出処理を行うことが可能になる。
【００９２】
次にデスティネーションレジスタに格納されている対象フィールドをソースレジスタのデータで更新（ライト）する処理について図１２〜図１６を用いて説明する。図１２は演算部の全体構成を示す図である。演算部４０Ｗは、デスティネーションレジスタ選択器４１Ｗ−１、４１Ｗ−２、フィールド書き込み器４２Ｗ−１、４２Ｗ−２から構成される。デスティネーションレジスタ選択器４１Ｗ−１、４１Ｗ−２は、対象フィールドが存在するデータレジスタを選択する。
【００９３】
ここでは、デスティネーションレジスタ選択器４１Ｗ−１（第１のデスティネーションレジスタ選択器）とデスティネーションレジスタ選択器（第２のデスティネーションレジスタ選択器）４１Ｗ−２は、デスティネーションレジスタとして、データレジスタｄ８、ｄ９を選択する。
【００９４】
なお、デスティネーションレジスタ選択器４１Ｗ−１、４１Ｗ−２の内部構成及び動作は、図７、図８で上述したソースレジスタ選択器４１Ｒ−１、４１Ｒ−２と同様であるので説明は省略する。一方、フィールド書き込み器４２Ｗ−１、４２Ｗ−２は、レジスタアライメントの整形処理を行い、フィールド書き込み処理を実行する。
【００９５】
図１３、図１４はフィールド書き込み器４２Ｗ−１の構成を示す図である。フィールド書き込み器４２Ｗ−１（第１のフィールド書き込み器）は、論理積器４２Ｗ−１ａ（第２の論理積器）、論理積器４２Ｗ−１ｂ（第１の論理積器）、右回転器４２Ｗ−１ｃ（第２の右回転器）、右回転器４２Ｗ−１ｄ（第１の右回転器）、上位３２ｂｉｔ／下位３２ｂｉｔ出力器４２Ｗ−１ｅ（ビット分割部）、セレクタ４２Ｗ−１ｆ、減算部４２Ｗ−１ｇ、論理和器４２Ｗ−１ｈ、左回転器４２Ｗ−１ｉ、論理否定器４２Ｗ−１ｊから構成される。
【００９６】
フィールド書き込み器４２Ｗ−１は、デスティネーションレジスタｄ８の対象フィールド０の下位１６ビットのみを書き換えて（他の領域は書き換えない）更新する。
【００９７】
減算部４２Ｗ−１ｇは、{AddReg0, BitOffset}＝２４と{AddRegTbl0、E0、フィールドＭＳＢ位置}＝７とを減算して大小関係を求め“１”を出力する。右回転器４２Ｗ−１ｄは、{AddReg0, BitOffset}＝２４を指定回転量として、{AddRegTbl0, E0, BitMask}＝0x000000FFFFFFFF00に、右回転処理を施し、0xFFFF00000000FFFFを出力する。
【００９８】
上位３２ｂｉｔ／下位３２ｂｉｔ出力器４２Ｗ−１ｅは、0xFFFF00000000FFFFを、上位３２ビット0xFFFF0000、下位３２ビット0x0000FFFFに分割して出力する。
【００９９】
セレクタ４２Ｗ−１ｆは、減算部４２Ｗ−１ｇの出力値をセレクト信号として用いて、端子（０）に入力する上位３２ビットデータと、端子（１）に入力する下位３２ビットデータのいずれかを選択して出力する。ここでは、端子（１）に入力する下位３２ビットデータ0x0000FFFFが選択されて出力される。
【０１００】
右回転器４２Ｗ−１ｃは、{AddReg0, BitOffset}＝２４を指定回転量として、ソースレジスタOperand0のデータ値（0x6789ABCDとする）に、右回転処理を施し、0x89ABCD67を出力する。
【０１０１】
左回転器４２Ｗ−１ｉは、{AddRegTbl0, E0, 回転量}＝８を指定回転量として、右回転器４２Ｗ−１ｃからの出力値0x89ABCD67に、左回転処理を施し、0xABCD6789を出力する。
【０１０２】
論理積器４２Ｗ−１ａは、左回転器４２Ｗ−１ｉからの出力値0xABCD6789と、セレクタ４２Ｗ−１ｆからの選択出力0x0000FFFFとを受信し、ＡＮＤ論理をとって、0x00006789を出力する。
【０１０３】
論理否定器４２Ｗ−１ｊは、セレクタ４２Ｗ−１ｆからの選択出力0x0000FFFFのＮＯＴ論理をとって、0xFFFF0000とする。論理積器４２Ｗ−１ｂは、デスティネーションレジスタｄ８のデータ値（0x12345678とする）と、論理否定器４２Ｗ−１ｊからの出力値0xFFFF0000とのＡＮＤ論理をとって、0x12340000を出力する。論理和器４２Ｗ−１ｈは、論理積器４２Ｗ−１ａからの出力値0x00006789と、論理積器４２Ｗ−１ｂからの出力値0x12340000とのＯＲ論理をとって、0x12346789を出力する。
【０１０４】
このような演算制御を行って、対象フィールド０のデータを下位１６ビットに保持したデータレジスタｄ８のデータ0x12345678を0x12346789と変換している。すなわち、第１デスティネーションレジスタ（データレジスタｄ８）の対象フィールド０の下位１６ビットのみを、ソースレジスタOperand0の上位１６ビットの書き換えデータ元で書き換えている。
【０１０５】
図１５、図１６はフィールド書き込み器４２Ｗ−２の構成を示す図である。フィールド書き込み器４２Ｗ−２（第２のフィールド書き込み器）は、論理積器４２Ｗ−２ａ（第２の論理積器）、論理積器４２Ｗ−２ｂ（第１の論理積器）、右回転器４２Ｗ−２ｃ（第１の右回転器）、右回転器４２Ｗ−２ｄ（第１の右回転器）、上位３２ｂｉｔ／下位３２ｂｉｔ出力器４２Ｗ−２ｅ（ビット分割部）、セレクタ４２Ｗ−２ｆ、減算部４２Ｗ−２ｇ、論理和器４２Ｗ−２ｈ、左回転器４２Ｗ−２ｉ、論理否定器４２Ｗ−２ｊから構成される。
【０１０６】
フィールド書き込み器４２Ｗ−２は、デスティネーションレジスタｄ９の対象フィールド０の上位１６ビットのみを書き換えて（他の領域は書き換えない）更新する。
【０１０７】
減算部４２Ｗ−２ｇは、{AddReg0, BitOffset}＝２４と{AddRegTbl0、E0、フィールドＭＳＢ位置}＝７とを減算して大小関係を求め“１”を出力する。右回転器４２Ｗ−１ｄは、{AddReg0, BitOffset}＝２４を指定回転量とし、{AddRegTbl0, E0, BitMask}＝0x000000FFFFFFFF00に、右回転処理を施し、0xFFFF00000000FFFFを出力する。
【０１０８】
上位３２ｂｉｔ／下位３２ｂｉｔ出力器４２Ｗ−２ｅは、0xFFFF00000000FFFFを、上位３２ビット0xFFFF0000、下位３２ビット0x0000FFFFに分割して出力する。
【０１０９】
セレクタ４２Ｗ−２ｆは、減算部４２Ｗ−２ｇの出力値をセレクト信号として用いて、端子（０）に入力する下位３２ビットデータと、端子（１）に入力する上位３２ビットデータのいずれかを選択して出力する。ここでは、端子（１）に入力する上位３２ビットデータ0xFFFF0000が選択されて出力される。
【０１１０】
右回転器４２Ｗ−２ｃは、{AddReg0, BitOffset}＝２４を指定回転量として、ソースレジスタOperand0のデータ値（0x6789ABCDとする）に、右回転処理を施し、0x89ABCD67を出力する。
【０１１１】
左回転器４２Ｗ−２ｉは、{AddRegTbl0, E0, 回転量}＝８を指定回転量として、右回転器４２Ｗ−２ｃからの出力値0x89ABCD67に、左回転処理を施し、0xABCD6789を出力する。
【０１１２】
論理積器４２Ｗ−２ａは、左回転器４２Ｗ−２ｉからの出力値0xABCD6789と、セレクタ４２Ｗ−２ｆからの選択出力0xFFFF0000とを受信し、ＡＮＤ論理をとって、0xABCD0000を出力する。
【０１１３】
論理否定器４２Ｗ−２ｊは、セレクタ４２Ｗ−２ｆからの選択出力0xFFFF0000のＮＯＴ論理をとって、0x0000FFFFとする。論理積器４２Ｗ−２ｂは、デスティネーションレジスタｄ９のデータ値（0x9ABCDEF0とする）と、論理否定器４２Ｗ−２ｊからの出力値0x0000FFFFとのＡＮＤ論理をとって、0x0000DEF0を出力する。
【０１１４】
論理和器４２Ｗ−２ｈは、論理積器４２Ｗ−２ａからの出力値0x0000DEF0と、論理積器４２Ｗ−２ｂのから出力値0xABCD0000とのＯＲ論理をとって、0xABCDDEF0を出力する。
【０１１５】
このような演算制御を行って、対象フィールド０のデータを上位１６ビットに保持したデータレジスタｄ９のデータ0x9ABCDEF0を0xABCDDEF0と変換している。すなわち、第２デスティネーションレジスタ（データレジスタｄ９）の対象フィールド０の上位１６ビットのみを、ソースレジスタOperand0の下位１６ビットの書き換えデータ元で書き換えている。
【０１１６】
以上説明したような制御を行うことで、プロトコルスタックの違いに依存しないプログラムにより、対象フィールドを特定して、更新処理を行うことが可能になる。
【０１１７】
次に第２の実施の形態について図１７〜図２４を用いて説明する。第２の実施の形態のプロセッサ装置は、パケット前処理部を有する。パケット前処理部では、受信したパケットのプロトコルスタックの先頭が、データレジスタのアライメントと一致するように、パディングを付加してパケットを加工する。その後にパケット処理が行われる。
【０１１８】
図１７は第２の実施の形態によるパケット格納部１０へのアクセスアーキテクチャを示す図である。第１の実施の形態と異なる点を中心に説明する。アドレスレジスタ２０−２は、複数のアドレスレジスタAddReg0、 AddReg1、 AddReg2、…によって構成する。また、各アドレスレジスタは、プロトコルスタック位置情報として、レジスタオフセット（RegOffset）のみから構成される。
【０１１９】
図では、パケット前処理部によって、プロトコルスタック０はデータレジスタｄ５のアライメントに一致するように加工されているため、{AddReg0, RegOffset}＝５である。
【０１２０】
一方、アドレスレジスタテーブル３０−２は、複数のアドレスレジスタテーブルAddRegTbl0、AddRegTbl1、AddRegTbl2、…によって構成される。また、各アドレスレジスタテーブルは、フィールド位置情報として、エントリ番号(entry)、フィールドレジスタオフセット(RegOffset)、回転量、ビットマスク（６４ビット）（BitMask(64bit)）の各項目から構成される。なお、パケット格納部１０内の括弧内の数字は、データレジスタｄ５から０から数えた数字を示す。
【０１２１】
このような、アドレスレジスタ２０−２のプロトコルスタック位置情報及びアドレスレジスタテーブル３０−２のフィールド位置情報にもとづき、装置開発者が記述したプログラムにより、第２の実施の形態のプロセッサ装置は、データレジスタ上の対象フィールドに対してアクセスを行うことになる。なお、プログラム例は、第１の実施の形態で上述した命令列と同じフォーマットである。
【０１２２】
図１８、図１９は第２の実施の形態によるパケット格納部１０への入力例を示す図である。図１８はデータリンク層がEthernet（DIX）形式のパケットの格納例１１１を示し、図１９はデータリンク層がEthernet（SNAP）形式のパケットの格納例１１２を示している。
【０１２３】
図１８に対し、パケット前処理部は、Ethernet(DIX)形式のヘッダの末尾へ１６ビット長のパディング（以下、ＰＡＤ）を付加し、ＩＰヘッダの先頭をデータレジスタｄ４の先頭から開始するようにパケットデータを加工している。
【０１２４】
図１９に対し、パケット前処理部は、Ethernet(SNAP)形式のヘッダの末尾へ１６ビット長のＰＡＤを付加し、ＩＰヘッダの先頭をデータレジスタｄ６の先頭から開始するようにパケットデータを加工している。
【０１２５】
次に図７、図８のソースレジスタ選択器に対応する、第２の実施の形態のソースレジスタ選択器について説明する。図２０はソースレジスタ選択器を示す図である。ソースレジスタ選択器４３−１（第１のソースレジスタ選択器）は、加算部４３−１ｂを含む。加算部４３−１ｂは、{AddReg0,RegOffset}＝５、{AddRegTbl0,E0,RegOffset}＝３を加算して加算値８として、データレジスタ選択番号ｄ８を選択する。
【０１２６】
図２１はソースレジスタ選択器を示す図である。ソースレジスタ選択器４３−２（第２のソースレジスタ選択器）は、加算部４３−２ｂを含み、ソースレジスタ選択器４３−１が選択した次のデータレジスタを選択する、加算部４３−２ｂでは、{AddReg0,RegOffset}＝５、{AddRegTbl0,E0,RegOffset}＝３の他に、さらに１を加算して加算値９とし、データレジスタ選択番号ｄ９を選択する。
【０１２７】
このように、第２の実施の形態でのソースレジスタ選択器は、第１の実施の形態と比べて、論理段数が少なくてすむため、より高速の選択動作を行うことが可能になる。
【０１２８】
次に図９、図１１のフィールド抽出器に対応する、第２の実施の形態のフィールド抽出器について説明する。図２２はフィールド抽出器（置き換え）の構成を示す図である。第１のフィールド抽出器であるフィールド抽出器（置き換え）４４−１は、論理積器４４−１ａ、右回転器４４−１ｂ、上位３２ｂｉｔ出力器４４−１ｅ（上位ビット出力部）から構成される。
【０１２９】
フィールド抽出器(置き換え)４４−１のここでの動作は、データレジスタｄ８の下位８ビットの位置にある対象フィールド０を抽出し、デスティネーションレジスタOperand0の上位８ビットに置き換えて格納する。
【０１３０】
上位３２ｂｉｔ出力器４２Ｒ−１ｅは、{AddRegTbl0, E0, BitMask}＝0x000000FFFFFFFF00の上位３２ビット0x000000FFを出力する。論理積器４４−１ａは、データレジスタｄ８の値（0xF0123456とする）と、0x000000FFとを受信し、ＡＮＤ論理をとって、0x00000056を出力する。
【０１３１】
右回転器４４−１ｂは、{AddRegTbl0, E0, 回転量}＝８を指定回転量として、論理積器４４−１ａからの出力値0x00000056に、右回転処理を施し、0x56000000を出力する。
【０１３２】
このような演算制御を行って、対象フィールド０のデータを下位８ビットに保持したデータレジスタｄ８のデータ0xF0123456を0x56000000と変換している。これにより、第１ソースレジスタ（データレジスタｄ８）から対象フィールド０の下位８ビットを抽出した結果を、デスティネーションレジスタOperand０の上位８ビット側へ置き換えて格納できる。
【０１３３】
図２３はフィールド抽出器（追加）の構成を示す図である。第２のフィールド抽出器であるフィールド抽出器（追加）４４−２は、論理積器４４−２ａ、右回転器４４−２ｂ、下位３２ｂｉｔ出力器４４−２ｅ（下位ビット出力部）、論理和器４４−２ｈから構成される。
【０１３４】
フィールド抽出器(追加)４４−２のここでの動作は、データレジスタｄ９の上位２４ビットの位置にある対象フィールド０を抽出し、デスティネーションレジスタOperand0の下位２４ビットに追加して格納する（上位８ビットは、すでにデータレジスタｄ８の対象フィールド０が格納済み）。
【０１３５】
下位３２ｂｉｔ出力器４４−２ｅは、{AddRegTbl0, E0, BitMask}＝0x000000FFFFFFFF00の下位３２ビット0xFFFFFF00を出力する。論理積器４４−2ａは、データレジスタｄ9の値（0x789ABCDEとする）と、0xFFFFFF00とを受信し、ＡＮＤ論理をとって、0x789ABC00を出力する。
【０１３６】
右回転器４４−２ｂは、{AddRegTbl0, E0, 回転量}＝８を指定回転量として、論理積器４４−１ａからの出力値0x789ABC00に、右回転処理を施し、0x00789ABCを出力する。論理和器４４−２ｈは、右回転器４４−２ｂからの出力値0x00789ABCと、図２２で上述したフィールド抽出器（置き換え）４４−１による演算結果0x56000000とのＯＲ論理をとって、0x56789ABCを出力する。
【０１３７】
このような演算制御を行って、対象フィールド０のデータを上位２４ビットに保持したデータレジスタｄ９のデータ0x789ABCDEを0x56789ABCと変換している。これにより、第２ソースレジスタ（データレジスタｄ９）から対象フィールド０の上位２４ビットを抽出した結果を、デスティネーションレジスタOperand０の下位２４ビット側へ追加して格納できる。
【０１３８】
以上説明したように、第２の実施の形態でのフィールド抽出器は、第１の実施の形態と比べて、論理段数が少なくてすむため、より高速のフィールド抽出動作を行うことが可能になる。
【０１３９】
次に図１３、図１４のフィールド書き込み器に対応する第２の実施の形態のフィールド書き込み器について説明する。図２４はフィールド書き込み器の構成を示す図である。第１のフィールド書き込み器であるフィールド書き込み器４５は、論理積器４５ａ（第２の論理積器）、論理積器４５ｂ（第１の論理積器）、上位３２ｂｉｔ出力器４５ｅ（上位ビット出力部）、論理和器４５ｈ、左回転器４５ｉ、論理否定器４５ｊから構成される。
【０１４０】
フィールド書き込み器４５は、デスティネーションレジスタｄ８の対象フィールド０の書き換え対象領域を、この書き換え対象領域以外の領域は書き換えずに更新する。
【０１４１】
上位３２ｂｉｔ出力器４５ｅは、0x000000FFFFFFFF00の上位３２ビット0x000000FFを出力する。左回転器４５ｉは、{AddRegTbl0, E0, 回転量}＝８を指定回転量として、ソースレジスタOperand0のデータ値（0x6789ABCDとする）に、左回転処理を施し、0x89ABCD67を出力する。
【０１４２】
論理積器４５ａは、左回転器４５ｉからの出力値0x89ABCD67と、上位３２ｂｉｔ出力器４５ｅの出力値0x000000FFとを受信し、ＡＮＤ論理をとって、0x00000067を出力する。
【０１４３】
論理否定器４５ｊは、上位３２ｂｉｔ出力器４５ｅの出力値0x000000FFのＮＯＴ論理をとって、0xFFFFFF00とする。論理積器４５ｂは、デスティネーションレジスタｄ８のデータ値（0xF0123456とする）と、論理否定器４５ｊからの出力値0xFFFFFF00とのＡＮＤ論理をとって、0xF0123400を出力する。論理和器４５ｈは、論理積器４５ａからの出力値0x00000067と論理積器４５ｂからの出力値0xF0123400とのＯＲ論理をとって、0xF0123467を出力する。
【０１４４】
このような演算制御を行って、対象フィールド０のデータを下位８ビットに保持したデータレジスタｄ８のデータ0xF0123456を0xF0123467と変換している。すなわち、第１デスティネーションレジスタ（データレジスタｄ８）の対象フィールド０の下位８ビットのみを、ソースレジスタOperand0の上位８ビットの書き換えデータ元で書き換えている。
【０１４５】
なお、デスティネーションレジスタｄ９の上位２４ビットの対象フィールド０を対象領域とした書き換えを行う第２のフィールド書き込み器に対しては、図２４の構成に対し、上位３２ビット出力器を下位３２ビット出力器（下位ビット出力部）に変更するだけでよい。
【０１４６】
このように、第２の実施の形態でのフィールド書き込み器は、第１の実施の形態と比べて、論理段数が少なくてすむため、より高速のフィールド書き込み動作を行うことが可能になる。
【０１４７】
以上説明したように、第２の実施の形態では、パケット前処理部が、プロトコルスタックの先頭をデータレジスタアライメントに一致するように加工する。これにより、その後のパケット処理として、演算部４０における論理段数が全体的に少なくなるので、装置開発者が記述したプログラムにしたがって、より高速に抽出・更新の処理を行うことが可能になる。
【０１４８】
次に第３の実施の形態について説明する。第３の実施の形態では、第１の実施の形態で上述したような数値にエンコードしたレジスタオフセットを取得するのではなく、レジスタビットマップ作成部がレジスタビットマップを作成し、このレジスタビットマップによりデータレジスタの選択動作が実行されるものである。
【０１４９】
図２５はレジスタビットマップの構成を示す図である。レジスタビットマップ作成部はレジスタビットマップＭを作成する。また、レジスタビットマップＭ上の対応データレジスタのビット位置が“１”ならば、そこのデータレジスタを選択することを意味する。例えば、図の場合、データレジスタｄ８が選択されることになる。
【０１５０】
図２６はソースレジスタ選択器とデスティネーションレジスタ選択器の動作を示す図である。第１のソースレジスタを選択するソースレジスタ選択器または第１のデスティネーションレジスタを選択するデスティネーションレジスタ選択器（以下、両方を含めてレジスタ選択器４１−１と呼ぶ）は、{AddReg0, RegBitMap}としてデータレジスタｄ５に“１”が立っているレジスタビットマップＭ１を受信する。
【０１５１】
そして、{AddRegTbl0, E0, RegOffset}＝３であるため、レジスタビットマップＭ１に対して、３ビット分左シフトする。これにより、レジスタ選択器４１−１は、データレジスタｄ８に“１”が立つレジスタビットマップＭ１ａを出力することで、データレジスタｄ８を選択する。
【０１５２】
図２７はソースレジスタ選択器とデスティネーションレジスタ選択器の動作を示す図である。第２のソースレジスタを選択するソースレジスタ選択器または第２のデスティネーションレジスタを選択するデスティネーションレジスタ選択器（以下、両方を含めてレジスタ選択器４１−２と呼ぶ）は、{AddReg0, RegBitMap}としてデータレジスタｄ５に“１”が立っているレジスタビットマップＭ１を受信する。
【０１５３】
そして、{AddRegTbl0, E0, RegOffset}＝３であるため、レジスタビットマップＭ１に対して、３ビット分左シフトし、さらにここでは左へ１ビットシフトする。これにより、レジスタ選択器４１−２は、データレジスタｄ９に“１”が立つレジスタビットマップＭ１ｂを出力することで、データレジスタｄ９を選択する。
【０１５４】
このように、第３の実施の形態では、データレジスタの選択動作から加減算処理を排すことができるので、より高速に選択動作が可能となり、パケット処理の高速化を図ることが可能になる。
【０１５５】
次に第４の実施の形態について説明する。図２８は第４の実施の形態の構成を示す図である。第４の実施の形態のプロセッサ装置１−４は、パケット格納部１０、アドレスレジスタ２０、アドレスレジスタテーブル３０、書き換え計算部６０、アドレスレジスタテーブル（書き換え後）３０ａから構成される。
【０１５６】
動作として、書き換え計算部６０は、プロトコルスタック位置情報にもとづき、アドレスレジスタテーブル３０のフィールド位置情報の書き換え計算をパケットの受信毎に行い、あらたにアドレスレジスタテーブル（書き換え後）３０ａを作成する。
【０１５７】
演算部４０では、アドレスレジスタ２０とアドレスレジスタテーブル（書き換え後）３０ａの内容にもとづいてパケット処理を行う。なお、元のアドレスレジスタテーブル３０は、他の次パケット処理を実行するときに必要となるので、別記憶領域にマスターテーブルとして格納しておく。
【０１５８】
図２９は第４の実施の形態の概要を説明するための図である。書き換え計算部６０により、元のアドレスレジスタテーブル３０のAddRegTbl0の内容は、アドレスレジスタテーブル（書き換え後）３０ａのAddRegTbl0aに示す値に書き換えられる。
【０１５９】
ここで、アドレスレジスタテーブル３０は、プロトコルスタックの先頭がデータレジスタのアライメントに一致させた場合における値を格納しているが、アドレスレジスタテーブル（書き換え後）３０ａは、書き換え計算部６０により計算された、パケット格納部１０に対するそのままの位置（データレジスタのアライメントに一致していない位置）のフィールド位置情報が格納される。
【０１６０】
図では、アドレスレジスタテーブル（書き換え後）３０ａのAddRegTbl0aに対し、エントリ番号Ｅ０の対象フィールド０は、{AddRegTbl0a, E0, RegOffset}＝８、{AddRegTbl0a, E0, 回転量}＝１６、{AddRegTbl0a, E0, BitMask}＝0x0000FFFFFFFF0000となる。
【０１６１】
なお、フィールドＭＳＢ位置は、アドレスレジスタテーブル３０からアドレスレジスタテーブル（書き換え後）３０ａを作成するときには必要だが、その後のパケット処理には不要であるので、アドレスレジスタテーブル３０ａではフィールドＭＳＢ位置は書き換えない（この項目は必要ないということ）。
【０１６２】
一方、演算部４０では、AddRegTbl0aにもとづきパケット処理を行う。この場合、ソース／デスティネーションレジスタの選択処理、フィールド抽出及びフィールド書き込み処理内のアドレスレジスタのビットオフセットまたはフィールドＭＳＢ位置を入力とする処理ブロックは、実行する必要がなく、高速に処理することができる。
【０１６３】
例えば、演算部４０は対象フィールド０に対し、{AddRegTbl0a, E0, RegOffset}＝８から直ちに、第１のデータレジスタはデータレジスタｄ８、したがって第２のデータレジスタはデータレジスタｄ９と認識できるし、{AddRegTbl0a, E0, BitMask}＝0x0000FFFFFFFF0000から、データレジスタｄ８の下位１６ビットが対象フィールド０の有効ビット、データレジスタｄ９の上位１６ビットが対象フィールド０の有効ビットであり、{AddRegTbl0a, E0, 回転量}＝１６の指定回転量を回転して、レジスタアライメントの整形が行える。このように、第４の実施の形態により、演算部４０での処理を高速化できる。
【０１６４】
次に第４の実施の形態の変形例について説明する。図２９ではパケット受信毎に、書き換え計算を行ってアドレスレジスタテーブル３０ａを作成したが、変形例の場合では、プログラム中で別のプロトコルスタックをアクセスする際に、該当のプロトコルスタックに対応するアドレスレジスタテーブルの値を書き換えるものである。
【０１６５】
図３０は第４の実施の形態の変形例の概要を説明するための図である。変形例では、別プロトコルスタックへアクセスを行う毎に、アドレスレジスタテーブルの書き換え計算を行う。図に示すように、命令列がプロトコルスタック０に関する命令列Ｃ０からプロトコルスタック１に関する命令列Ｃ１に切り替わったときに、書き換え計算部６０は、プロトコルスタック１に関する書き換え計算を行って、アドレスレジスタテーブル（書き換え後）３０ａとしてAddRegTbl1aを作成する。
【０１６６】
ここで、一般的にパケット処理を実行するプログラムは、対象フィールドアクセスに関して、プロトコルスタック毎の局在性が存在する。変形例ではこの点に注目したものである。したがって、パケット受信時に全アドレスレジスタテーブルを書きかえるよりも、別プロトコルスタックのアクセス時に書き換え計算を行った方が、パケット処理全体での高速化を図ることができる。
【０１６７】
次に第５の実施の形態について説明する。図３１は第５の実施の形態を示す図である。第５の実施の形態では、アドレスレジスタテーブルの構成要素（フィールド位置情報）を命令列中に即値として記述して、演算部４０がこれを処理するものである。
【０１６８】
すなわち、マイクロコードが格納されるメモリから命令列をリードした後、命令中のエントリ番号をもとに、アドレスレジスタテーブルからアドレスレジスタテーブルの構成要素をリードして、命令を実行するのではなく、マイクロコード格納メモリから命令列をリードした後に、即時に命令を実行するものである。これにより、より高速に命令を実行することが可能になる。
【０１６９】
以上説明したように本発明によれば、装置開発者は、対象フィールドを演算処理する命令列中に対して、ソースレジスタまたはデスティネーションレジスタとして、対象フィールドと一意に対応する、アドレスレジスタのレジスタネームとアドレスレジスタテーブルのエントリ番号を組で指定するだけで、パケットのプロトコルスタックの違いに関係なく、同一処理を同一プログラムで実行することが可能になる。
【０１７０】
また、パケット前処理部により、パケットのプロトコルスタックの先頭をレジスタアライメントと一致するように整形することで、演算部内の論理段数を少なくすることができるので、パケット処理を高速に行うことが可能になる。
【０１７１】
さらに、アドレスレジスタのプロトコルスタック位置情報を、数値としてではなくレジスタビットマップの形で受信することによって、データレジスタの選択動作から加減算処理を排することができ、より高速にデータレジスタ選択動作を実行することが可能になる。
【０１７２】
また、書き換え計算部により、パケット受信時または別プロトコルスタックのアクセス時に、アドレスレジスタテーブル値を書きかえることによって、以降の受信パケットに対する処理を高速に行うことが可能になる。
【０１７３】
さらに、アドレスレジスタテーブルの構成要素を命令列中に即値として記述して、演算部がこれを処理することにより、高速に命令を実行し、パケット処理の高速化を図ることが可能になる。
【０１７４】
なお、上記の説明では、パケット処理を中心に説明したが、パケット処理以外にも、手順を記述したプログラムにより処理を実行するさまざまなプロセッサに対して、本発明の機能を適用することが可能である。
【０１７５】
（付記１）  パケットに対して、プログラムによる処理を実行するプロセッサ装置において、
固定レジスタ長を持つ複数のデータレジスタに、前記パケットを格納するパケット格納部と、
前記パケットの先頭からプロトコルスタックの開始位置を示すプロトコルスタック位置情報を取得し保持するアドレスレジスタと、
前記プロトコルスタック内のフィールドの位置及び対象フィールドを処理するためのパラメータを示すフィールド位置情報を管理するアドレスレジスタテーブルと、
前記プロトコルスタックの違いにより、フィールド位置が異なる前記パケットに対して、前記プロトコルスタックの違いに依存せずに同一のプログラムにより、前記プロトコルスタック位置情報及び前記フィールド位置情報にもとづいて、レジスタアライメントの整形処理をして、前記対象フィールドのパケット処理を行う演算部と、
を有することを特徴とするプロセッサ装置。
【０１７６】
（付記２）  前記アドレスレジスタは、前記プロトコルスタック位置情報として、前記プロトコルスタックの開始位置が存在するデータレジスタを示すレジスタオフセットと、前記データレジスタ内で、前記開始位置のビット位置を示すビットオフセットと、から構成され、前記アドレスレジスタテーブルは、前記フィールド位置情報として、前記プロトコルスタック内のフィールドを示すエントリ番号と、前記プロトコルスタックの先頭がデータレジスタのアライメントと一致した場合の対象フィールドのＭＳＢが存在するデータレジスタを示すフィールドレジスタオフセットと、前記対象フィールドのＭＳＢがあるデータレジスタ内での開始位置のビット位置を示すフィールドＭＳＢ位置と、指定回転量を示す回転量と、前記対象フィールドの存在箇所を示すビットマスクと、から構成されることを特徴とする付記１記載のプロセッサ装置。
【０１７７】
（付記３）  前記演算部は、ソースレジスタ内の対象フィールドを抽出してデスティネーションレジスタへ格納する場合、前記プロトコルスタック位置情報及び前記フィールド位置情報にもとづいて、前記対象フィールドが存在するソースレジスタを選択するソースレジスタ選択器と、前記プロトコルスタック位置情報及び前記フィールド位置情報にもとづいて、選択されたソースレジスタから前記対象フィールドを抽出するフィールド抽出器と、から構成されることを特徴とする付記２記載のプロセッサ装置。
【０１７８】
（付記４）  前記対象フィールドが２つのデータレジスタにまたがっている場合、前記ソースレジスタ選択器は、前記フィールドＭＳＢ位置と前記ビットオフセットとの大小関係を求める減算部と、前記レジスタオフセットと前記フィールドレジスタオフセットと前記減算部からの出力値とを加算して１つ目のデータレジスタである第１のソースレジスタを求める加算部と、を含む第１のソースレジスタ選択器と、前記第１のソースレジスタ選択器の結果に１を加算して２つ目のデータレジスタである第２のソースレジスタを求める第２のソースレジスタ選択器と、から構成されることを特徴とする付記３記載のプロセッサ装置。
【０１７９】
（付記５）  前記フィールド抽出器は、前記第１のソースレジスタから抽出した該当ビットをデスティネーションレジスタの対応する該当ビット位置に置き換える第１のフィールド抽出器と、前記第２のソースレジスタから抽出した該当ビットをデスティネーションレジスタの対応する該当ビット位置に追加する第２のフィールド抽出器と、から構成されることを特徴とする付記４記載のプロセッサ装置。
【０１８０】
（付記６）  前記第１のフィールド抽出器は、前記フィールドＭＳＢ位置と前記ビットオフセットとの大小関係を求める減算部と、前記ビットオフセットの値を指定回転量として前記ビットマスクを右回転する第１の右回転器と、前記第１の右回転器からの出力値を上位ビットと下位ビットに分割するビット分割部と、前記減算部の出力値にもとづき、前記上位ビットまたは前記下位ビットを選択するセレクタと、前記対象フィールドが存在するデータレジスタのデータ値と、選択された前記上位または下位ビットの論理積をとる論理積器と、前記回転量により前記論理積器からの出力値を右回転する第２の右回転器と、前記ビットオフセットの値を指定回転量として、前記第２の右回転器からの出力値を左回転する左回転器と、から構成されることを特徴とする付記５記載のプロセッサ装置。
【０１８１】
（付記７）  前記第２のフィールド抽出器は、前記フィールドＭＳＢ位置と前記ビットオフセットとの大小関係を求める減算部と、前記ビットオフセットの値を指定回転量として前記ビットマスクを右回転する第１の右回転器と、前記第１の右回転器からの出力値を上位ビットと下位ビットに分割するビット分割部と、前記減算部の出力値にもとづき、前記上位ビットまたは前記下位ビットを選択するセレクタと、前記対象フィールドが存在するデータレジスタのデータ値と、選択された前記上位または下位ビットの論理積をとる論理積器と、前記回転量により前記論理積器からの出力値を右回転する第２の右回転器と、前記ビットオフセットの値を指定回転量として、前記第２の右回転器からの出力値を左回転する左回転器と、前記左回転器からの出力値と前記第１のフィールド抽出器の処理結果との論理和をとる論理和器と、から構成されることを特徴とする付記５記載のプロセッサ装置。
【０１８２】
（付記８）  前記演算部は、デスティネーションレジスタに格納されている対象フィールドをソースレジスタのデータで更新する場合、前記プロトコルスタック位置情報及び前記フィールド位置情報にもとづいて、前記対象フィールドが存在するデスティネーションレジスタを選択するデスティネーションレジスタ選択器と、前記プロトコルスタック位置情報及び前記フィールド位置情報にもとづいて、選択されたデスティネーションレジスタ内の前記対象フィールドを更新するフィールド書き込み器と、から構成されることを特徴とする付記２記載のプロセッサ装置。
【０１８３】
（付記９）  前記対象フィールドが２つのデータレジスタにまたがっている場合、前記デスティネーションレジスタ選択器は、前記フィールドＭＳＢ位置と前記ビットオフセットとの大小関係を求める減算部と、前記レジスタオフセットと前記フィールドレジスタオフセットと前記減算部からの出力値とを加算して１つ目のデータレジスタである第１のデスティネーションレジスタを求める加算部と、を含む第１のデスティネーションレジスタ選択器と、前記第１のデスティネーションレジスタ選択器の結果に１を加算して２つ目のデータレジスタである第２のデスティネーションレジスタを求める第２のデスティネーションレジスタ選択器と、から構成されることを特徴とする付記８記載のプロセッサ装置。
【０１８４】
（付記１０）  前記フィールド書き込み器は、ソースレジスタの該当ビットのデータを元にして、前記第１のデスティネーションレジスタの対応する該当ビットのデータを更新する第１のフィールド書き込み器と、ソースレジスタの前記該当ビット以外のビットのデータを元にして、前記第２のデスティネーションレジスタの対応する該当ビットのデータを更新する第２のフィールド書き込み器と、から構成されることを特徴とする付記９記載のプロセッサ装置。
【０１８５】
（付記１１）  前記第１のフィールド書き込み器は、前記フィールドＭＳＢ位置と前記ビットオフセットとの大小関係を求める減算部と、前記ビットオフセットの値を指定回転量として前記ビットマスクを右回転する第１の右回転器と、前記第１の右回転器からの出力値を上位ビットと下位ビットに分割するビット分割部と、前記減算部の出力値にもとづき、前記上位ビットまたは前記下位ビットを選択するセレクタと、
前記セレクタからの出力値の論理否定をとる論理否定器と、前記第１のデスティネーションレジスタ内のデータ値と前記論理否定器からの出力値との論理積をとる第１の論理積器と、前記ビットオフセットの値を指定回転量として、ソースレジスタ内のデータ値を右回転する第２の右回転器と、前記回転量により前記第２の右回転器からの出力値を左回転する左回転器と、前記左回転器からの出力値と前記セレクタからの出力値との論理積をとる第２の論理積器と、前記第１の論理積器と前記第２の論理積器からの出力値との論理和をとる論理和器と、から構成されることを特徴とする付記１０記載のプロセッサ装置。
【０１８６】
（付記１２）  前記第２のフィールド書き込み器は、前記フィールドＭＳＢ位置と前記ビットオフセットとの大小関係を求める減算部と、前記ビットオフセットの値を指定回転量として前記ビットマスクを右回転する第１の右回転器と、前記第１の右回転器からの出力値を上位ビットと下位ビットに分割するビット分割部と、前記減算部の出力値にもとづき、前記上位ビットまたは前記下位ビットを選択するセレクタと、
前記セレクタからの出力値の論理否定をとる論理否定器と、第２のデスティネーションレジスタ内のデータ値と前記論理否定器からの出力値との論理積をとる第１の論理積器と、前記ビットオフセットの値を指定回転量として、ソースレジスタ内のデータ値を右回転する第２の右回転器と、前記回転量により前記第２の右回転器からの出力値を左回転する左回転器と、前記左回転器の出力値と前記セレクタからの出力値との論理積をとる第２の論理積器と、前記第１の論理積器と前記第２の論理積器からの出力値との論理和をとる論理和器と、から構成されることを特徴とする付記１０記載のプロセッサ装置。
【０１８７】
（付記１３）  受信したパケットのプロトコルスタックの先頭が、データレジスタのアライメントと一致するように、パディングを付加して前記パケットを加工するパケット前処理部をさらに有することを特徴とする付記１記載のプロセッサ装置。
【０１８８】
（付記１４）  前記アドレスレジスタは、前記プロトコルスタックの開始位置が存在するデータレジスタを示すレジスタオフセットを含み、前記アドレスレジスタテーブルは、前記フィールド位置情報として、前記プロトコルスタック内のフィールドを示すエントリ番号と、対象フィールドのＭＳＢが存在するデータレジスタを示すフィールドレジスタオフセットと、指定回転量を示す回転量と、前記対象フィールドの存在箇所を示すビットマスクと、から構成されることを特徴とする付記１３記載のプロセッサ装置。
【０１８９】
（付記１５）  前記演算部は、ソースレジスタ内の対象フィールドを抽出してデスティネーションレジスタへ格納する場合、前記プロトコルスタック位置情報及び前記フィールド位置情報にもとづいて、前記対象フィールドが存在するソースレジスタを選択するソースレジスタ選択器と、前記プロトコルスタック位置情報及び前記フィールド位置情報にもとづいて、選択されたソースレジスタから前記対象フィールドを抽出するフィールド抽出器と、から構成されることを特徴とする付記１４記載のプロセッサ装置。
【０１９０】
（付記１６）  前記対象フィールドが２つのデータレジスタにまたがっている場合、前記ソースレジスタ選択器は、前記レジスタオフセットと前記フィールドレジスタオフセットとを加算して１つ目のデータレジスタである第１のソースレジスタを求める加算部を含む第１のソースレジスタ選択器と、前記第１のソースレジスタ選択器の結果に１を加算して２つ目のデータレジスタである第２のソースレジスタを求める第２のソースレジスタ選択器と、から構成されることを特徴とする付記１５記載のプロセッサ装置。
【０１９１】
（付記１７）  前記フィールド抽出器は、前記第１のソースレジスタから抽出した該当ビットをデスティネーションレジスタの対応する該当ビット位置に置き換える第１のフィールド抽出器と、前記第２のソースレジスタから抽出した該当ビットをデスティネーションレジスタの対応する該当ビット位置に追加する第２のフィールド抽出器と、から構成されることを特徴とする付記１６記載のプロセッサ装置。
【０１９２】
（付記１８）  前記第１のフィールド抽出器は、前記ビットマスクの上位ビットを出力する上位ビット出力部と、前記対象フィールドが存在するデータレジスタのデータ値と前記上位ビットとの論理積をとる論理積器と、前記回転量により前記論理積器からの出力値を右回転する右回転器と、から構成されることを特徴とする付記１７記載のプロセッサ装置。
【０１９３】
（付記１９）  前記第２のフィールド抽出器は、前記ビットマスクの下位ビットを出力する下位ビット出力部と、前記対象フィールドが存在するデータレジスタのデータ値と前記下位ビットの論理積をとる論理積器と、前記回転量により前記論理積器からの出力値を右回転する右回転器と、前記右回転器からの出力値と前記第１のフィールド抽出器の処理結果との論理和をとる論理和器と、から構成されることを特徴とする付記１７記載のプロセッサ装置。
【０１９４】
（付記２０）  前記演算部は、デスティネーションレジスタに格納されている対象フィールドをソースレジスタのデータで更新する場合、前記プロトコルスタック位置情報及び前記フィールド位置情報にもとづいて、前記対象フィールドが存在するデスティネーションレジスタを選択するデスティネーションレジスタ選択器と、前記プロトコルスタック位置情報及び前記フィールド位置情報にもとづいて、選択されたデスティネーションレジスタ内の前記対象フィールドを更新するフィールド書き込み器と、から構成されることを特徴とする付記１４記載のプロセッサ装置。
【０１９５】
（付記２１）  前記対象フィールドが２つのデータレジスタにまたがっている場合、前記デスティネーションレジスタ選択器は、前記レジスタオフセットと前記フィールドレジスタオフセットとを加算して１つ目のデータレジスタである第１のデスティネーションレジスタを求める加算部を含む第１のデスティネーションレジスタ選択器と、前記第１のデスティネーションレジスタ選択器の結果に１を加算して２つ目のデータレジスタである第２のデスティネーションレジスタを求める第２のデスティネーションレジスタ選択器と、から構成されることを特徴とする付記２０記載のプロセッサ装置。
【０１９６】
（付記２２）  前記フィールド書き込み器は、ソースレジスタの該当ビットのデータを元にして、前記第１のデスティネーションレジスタの対応する該当ビットのデータを更新する第１のフィールド書き込み器と、ソースレジスタの前記該当ビット以外のビットのデータを元にして、前記第２のデスティネーションレジスタの対応する該当ビットのデータを更新する第２のフィールド書き込み器と、から構成されることを特徴とする付記２１記載のプロセッサ装置。
【０１９７】
（付記２３）  前記第１のフィールド書き込み器は、前記ビットマスクの上位ビットを出力する上位ビット出力器と、前記上位ビットの論理否定をとる論理否定器と、第１のデスティネーションレジスタ内のデータ値と前記論理否定器からの出力値との論理積をとる第１の論理積器と、前記回転量によりソースレジスタ内のデータ値を左回転する左回転器と、前記左回転器からの出力値と前記上位ビットとの論理積をとる第２の論理積器と、前記第１の論理積器と前記第２の論理積器からの出力値との論理和をとる論理和器と、から構成されることを特徴とする付記２２記載のプロセッサ装置。
【０１９８】
（付記２４）  前記第２のフィールド書き込み器は、前記ビットマスクの下位ビットを出力する下位ビット出力器と、前記下位ビットの論理否定をとる論理否定器と、第１のデスティネーションレジスタ内のデータと前記論理否定器からの出力値との論理積をとる第１の論理積器と、前記回転量により前記ソースレジスタ内のデータ値を左回転する左回転器と、前記左回転器の出力値と前記下位ビットの論理積をとる第２の論理積器と、前記第１の論理積器と前記第２の論理積器からの出力値との論理和をとる論理和器と、から構成されることを特徴とする付記２２記載のプロセッサ装置。
【０１９９】
（付記２５）  前記対象フィールドが存在するデータレジスタを示すレジスタビットマップを作成するレジスタビットマップ作成部をさらに有し、前記演算部は、前記レジスタビットマップにもとづきデータレジスタを選択することを特徴とする付記１記載のプロセッサ装置。
【０２００】
（付記２６）  前記パケットの受信毎に、または別プロトコルスタックへアクセスを行う毎に、前記アドレスレジスタテーブルの書き換え計算を行い、プロトコルスタックの先頭が、データレジスタのアライメントに一致していない場合のフィールド位置情報を含む書き換え後のアドレスレジスタテーブルを作成する書き換え計算部をさらに有することを特徴とする付記１記載のプロセッサ装置。
【０２０１】
（付記２７）  パケットに対して、プログラムによる処理を実行するプロセッサ装置において、
固定レジスタ長を持つ複数のデータレジスタに、前記パケットを格納するパケット格納部と、
前記パケットの先頭からプロトコルスタックの開始位置を示すプロトコルスタック位置情報を取得し保持するアドレスレジスタと、
前記プロトコルスタックの違いにより、フィールド位置が異なる前記パケットに対して、前記プロトコルスタックの違いに依存せずに同一のプログラムにより、前記プロトコルスタック位置情報と、前記プロトコルスタック内のフィールドの位置及び対象フィールドを処理するためのパラメータを示すフィールド位置情報が記述された命令列とにもとづいて、レジスタアライメントの整形処理をして、前記対象フィールドのパケット処理を行う演算部と、
を有することを特徴とするプロセッサ装置。
【０２０２】
（付記２８)  パケットに対して、プログラムによる処理を実行するパケット処理方法において、
固定レジスタ長を持つ複数のデータレジスタに、前記パケットを格納し、
前記パケットの先頭からプロトコルスタックの開始位置を示すプロトコルスタック位置情報を取得して保持し、
前記プロトコルスタック内のフィールドの位置及び対象フィールドを処理するためのパラメータを示すフィールド位置情報を管理し、
前記プロトコルスタックの違いにより、フィールド位置が異なる前記パケットに対して、前記プロトコルスタックの違いに依存せずに同一のプログラムにより、前記プロトコルスタック位置情報及び前記フィールド位置情報にもとづいて、レジスタアライメントの整形処理を含み、前記対象フィールドのパケット処理を行うことを特徴とするパケット処理方法。
【０２０３】
（付記２９）  パケットの中継制御を行うパケット中継装置において、
固定レジスタ長を持つ複数のデータレジスタに、前記パケットを格納するパケット格納部と、前記パケットの先頭からプロトコルスタックの開始位置を示すプロトコルスタック位置情報を取得し保持するアドレスレジスタと、前記プロトコルスタック内のフィールドの位置及び対象フィールドを処理するためのパラメータを示すフィールド位置情報を管理するアドレスレジスタテーブルと、前記プロトコルスタックの違いにより、フィールド位置が異なる前記パケットに対して、前記プロトコルスタックの違いに依存せずに同一のプログラムにより、前記プロトコルスタック位置情報及び前記フィールド位置情報にもとづいて、レジスタアライメントの整形処理を含み、前記対象フィールドのパケット処理を行う演算部と、から構成されるプロセッサ部と、
前記プロセッサ部で演算された結果にもとづいて、パケットの中継制御を行うパケット中継制御部と、
を有することを特徴とするパケット中継装置。
【０２０４】
【発明の効果】
以上説明したように、本発明のプロセッサ装置は、パケットの先頭からプロトコルスタックの開始位置を示すプロトコルスタック位置情報と、プロトコルスタック内のフィールドの位置及び対象フィールドを処理するためのパラメータを示すフィールド位置情報とから、プロトコルスタックの違いに依存せずに同一プログラムにより、レジスタアライメントの整形処理をしつつ、対象フィールドのパケット処理を行う構成とした。これにより、異なるプロトコルスタック毎に個別のプログラムを作成する必要がなくなり、同一プログラムで互いのフィールドへアクセスが可能となるので、設計効率が向上し、高品質なパケット処理を行うことが可能になる。
【図面の簡単な説明】
【図１】本発明のプロセッサ装置の原理図である。
【図２】パケット構成を示す図である。
【図３】パケット構成を示す図である。
【図４】プロセッサ装置によるパケット格納部へのアクセスアーキテクチャを示す図である。
【図５】アドレスレジスタテーブル上のフィールド位置情報の内容を説明するための図である。
【図６】演算部の構成を示す図である。
【図７】ソースレジスタ選択器の構成を示す図である。
【図８】ソースレジスタ選択器の構成を示す図である。
【図９】フィールド抽出器（置き換え）の構成を示す図である。
【図１０】右回転、左回転を示す図である。
【図１１】フィールド抽出器（追加）の構成を示す図である。
【図１２】演算部の全体構成を示す図である。
【図１３】フィールド書き込み器の構成を示す図である。
【図１４】フィールド書き込み器の構成を示す図である。
【図１５】フィールド書き込み器の構成を示す図である。
【図１６】フィールド書き込み器の構成を示す図である。
【図１７】第２の実施の形態によるパケット格納部へのアクセスアーキテクチャを示す図である。
【図１８】第２の実施の形態によるパケット格納部への入力例を示す図である。
【図１９】第２の実施の形態によるパケット格納部への入力例を示す図である。
【図２０】ソースレジスタ選択器を示す図である。
【図２１】ソースレジスタ選択器を示す図である。
【図２２】フィールド抽出器（置き換え）の構成を示す図である。
【図２３】フィールド抽出器（追加）の構成を示す図である。
【図２４】フィールド書き込み器の構成を示す図である。
【図２５】レジスタビットマップの構成を示す図である。
【図２６】ソースレジスタ選択器とデスティネーションレジスタ選択器の動作を示す図である。
【図２７】ソースレジスタ選択器とデスティネーションレジスタ選択器の動作を示す図である。
【図２８】第４の実施の形態の構成を示す図である。
【図２９】第４の実施の形態の概要を説明するための図である。
【図３０】第４の実施の形態の変形例の概要を説明するための図である。
【図３１】第５の実施の形態を示す図である。
【符号の説明】
１  プロセッサ装置
１０  パケット格納部
２０  アドレスレジスタ
３０  アドレスレジスタテーブル
４０  演算部