(57)【特許請求の範囲】
【請求項１】
パケット処理回路であって、
複数のヘッダ抽出回路を備え、各ヘッダ抽出回路はデータバスの複数のデータレーンの対応するサブセットを受けるように接続され、データレーンのサブセット同士は重複しており、
前記複数のヘッダ抽出回路に接続されたスケジューリング回路を備え、
前記スケジューリング回路は、
前記複数のデータレーンからそれぞれのパケットのヘッダデータを抽出することを要求するヘッダデータ抽出要求を複数受けるように構成および配置されるとともに、
前記複数の要求の各要求に応じて、
前記要求によって指定されたそれぞれのヘッダを含む複数のデータレーンの第１のサブセットを決定するように、かつ、
前記複数のデータレーンの第１のサブセットからそれぞれのヘッダデータを抽出するために、前記複数のヘッダ抽出回路のうち対応する１つのヘッダ抽出回路を割当てるように、構成および配置され、
前記ヘッダ抽出回路はさらに、それぞれのヘッダデータを並列に抽出するように構成される、パケット処理回路。
【請求項２】
前記データバスはＮビットのデータバスであり、
前記複数のヘッダ抽出回路は、前記データバス上で並列に受けることが可能なパケットの最大数以上の数であるＫ個のヘッダ抽出回路を含む、請求項１に記載のパケット処理回路。
【請求項３】
各データレーンはＱビットであり、
前記Ｎビットのデータで受けたデータパケットの、最大ヘッダサイズのヘッダは、Ｓ個のデータレーンを占め、
前記データレーンの第１のサブセットは、Ｌ個のデータレーンを含み、Ｌ＊Ｑは、前記データバス上で受信し得る最小サイズのデータパケットに等しい、請求項２に記載のパケット処理回路。
【請求項４】
Ｌ＝２であり、ヘッダ抽出回路ｉ（１≦ｉ≦Ｋ）について、
ｉ＝１の場合、ヘッダ抽出回路ｉは、データレーン１〜２＋（Ｓ−１）からデータを排他的に受けかつＳ個のデータレーン上で受けた前のワードからデータを受けるように構成され、
１＜ｉ＜Ｋの場合、ヘッダ抽出回路ｉは、データレーン２＊ｉ−２〜２＊ｉ＋（Ｓ−１）からデータを排他的に受けるように構成され、
ｉ＝Ｋの場合、ヘッダ抽出回路ｉは、データレーン２＊Ｋ、２＊Ｋ−１、および２＊Ｋ−２からデータを排他的に受けるように構成される、請求項３に記載のパケット処理回路。
【請求項５】
前記スケジューリング回路は、データレーンＪ（Ｊ＜Ｋ）で受信された要求を受けたことに応じて、
パケットの終端を含まない、Ｊが偶数であるデータレーンＪの場合は、前記要求をヘッダ抽出回路Ｊ／２＋１に割当て、
それ以外の場合は、前記要求をヘッダ抽出回路（Ｊ＋１）／２に割当てるように、構成される、請求項４に記載のパケット処理回路。
【請求項６】
前記スケジューリング回路はさらに、必要なすべてのヘッダデータが現在のデータワードに存在するとは限らない場合の要求を受けたことに応じて、前記要求を、次のデータワードで処理するためにバッファリングするように構成される、請求項５に記載のパケット処理回路。
【請求項７】
Ｌ＞２であり、ヘッダ抽出回路ｉ（１≦ｉ≦Ｋ）について、
ｉ＝１の場合、ヘッダ抽出回路ｉは、データレーン１〜３＋Ｓからデータを排他的に受けかつＳ個のデータレーン上で受けた前のワードからデータを受けるように構成され、
１＜ｉ＜Ｋの場合、ヘッダ抽出回路ｉは、データレーンＬ＊（ｉ−２）＋２〜Ｌ＊（ｉ−１）＋（Ｓ＋３）からのデータしか受けないように構成され、
ｉ＝Ｋの場合、ヘッダ抽出回路ｉは、データレーンＬ＊（Ｋ−２）＋２〜Ｎ／Ｑからのデータしか受けないように構成される、請求項３に記載のパケット処理回路。
【請求項８】
前記スケジューリング回路はさらに、データレーンＪ上で受信された要求を受けたことに応じて、
Ｊ  ｍｏｄ  Ｌ＝２であり、Ｊ＜（Ｎ／Ｑ）であり、かつデータレーンＪがパケットの始点を含む場合、前記要求をヘッダ抽出回路（Ｊ＋３Ｌ−３）／Ｌに割当てるように構成され、
Ｊ  ｍｏｄ  Ｌ＝３であり、かつデータレーンＪがパケットの終端を含む場合、前記要求をヘッダ抽出回路（Ｊ＋Ｌ−３）／Ｌに割当てるように構成される、請求項７に記載のパケット処理回路。
【請求項９】
前記複数のデータレーンの第１のサブセットから前記ヘッダデータを抽出するために、前記スケジューリング回路が前記複数のヘッダ抽出回路のうちの１つのヘッダ抽出回路を割当てたことに応じて、データを、前記データバスのレーンの第１のサブセットから、前記複数のヘッダ抽出回路のうちの１つである前記割当てられたヘッダ抽出回路までルーティングするように構成された、ルーティング回路をさらに備える、請求項１に記載のパケット処理回路。
【請求項１０】
前記要求は各々、パケットヘッダタイプ、パケット識別子、およびヘッダアドレスを指定する、請求項１に記載のパケット処理回路。
【請求項１１】
前記パケットヘッダ抽出回路は各々、前記データレーンの第１のサブセットからヘッダデータを抽出するように割当てられたことに応じて、前記要求によって示される前記パケットヘッダタイプから、前記データレーンの第１のサブセット内におけるヘッダデータのオフセットを求め、ヘッダデータの長さを求めるように構成される、請求項１０に記載のパケット処理回路。
【請求項１２】
前記ヘッダデータは１つ以上のヘッダフィールドのデータを含む、請求項１に記載のパケット処理回路。
【請求項１３】
前記ヘッダデータはそれぞれのヘッダフィールドに対する１つ以上のポインタを含む、請求項１に記載のパケット処理回路。
【請求項１４】
前記スケジューリング回路は、前記データバス上で受けた各ワードについて、前記データバスからそれぞれのパケットのヘッダデータを抽出ことを要求する、１組の前記要求を受けるように構成され配置される、請求項１に記載のパケット処理回路。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本発明の１つ以上の実施の形態は、概して通信プロトコルに関し、より具体的にはデータパケットを操作するためのパケットプロセッサに関する。
【背景技術】
【０００２】
背景
電気通信回線速度の増大に伴い、スループットを維持するためにはより広いハードウェアデータバスの使用が必要である。たとえば、ＦＰＧＡの実装の場合、一般的に、１００Ｇｂ／ｓのパケット処理には５１２ビットのデータバスが使用され、４００Ｇｂ／ｓのパケット処理には２０４８ビットのデータバスが使用される。その１つの結果として、２つ以上のパケットが、データバスにおいて並列に伝送される１組のビットに含まれる可能性がより高くなることが挙げられる。本明細書では、データバスの全幅において並列に送信されるビットの各組をワードと呼ぶ。
【０００３】
一例として、最小パケットサイズを６４バイトとすると、５１２ビットワードの中に全体が収まらないパケットがあるかもしれない。第１のデータパケットが前のワードで始まり現在のワードで終わり第２のデータパケットが現在のワードで始まり次のワードで終わる場合がある。別の例として、１つの２０４８ビットワードの中には、１つのパケットの末尾部分と、３つの完全なパケットと、もう１つのパケットの冒頭部分とが含まれる場合がある。所望のレベルのスループットを保つためには、並列ハードウェアが１サイクル内で複数のパケットを扱う必要があるかもしれない。しかしながら、並列ハードウェアは、必要な論理リソースおよび消費電力という点において高額である。
【０００４】
パケット処理ハードウェアはパイプラインとして組織化されることが多い。簡単な解決策は、パケット処理ハードウェアの同一のインスタンスを複数採用する。１度に最大Ｋ個のパケットが存在し得るとすると、ヘッダ情報およびデータを抽出するためのパケット処理ハードウェアはＫ回繰返される。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
過去の解決策の中には、データバス上で受けた１つのワードの任意のオフセットからデータを受けて抽出するように各々が構成された複数のパイプラインを実現するものがある。たとえば、ある並列化の手法では、データ経路全体を扇形に広げてＫ個の独立したハードウェアパイプラインにする。別の手法は、各段にＫ個の並列ユニットがある１つのパイプラインを採用する。それでもなお潜在的にはすべてのデータをすべてのユニットが利用できるようにしているが、データ経路は１つしかなく並列ユニットをこのデータ経路に接続するために選択可能としてもよい。いずれの手法でも、各パイプラインは受けたワードの任意のオフセットからパケットのヘッダおよびデータフィールドを抽出するように構成されている。このような解決策は、並列回路のうちいずれか１つを、受けた１組のパケットのうちいずれか１つを処理するようにスケジュールできるという柔軟性を提供する。しかしながら、これらの解決策は、ハードウェア要件という点で費用がかかる可能性がある。
【０００６】
パケットのデータおよび／またはヘッダフィールドは、抽出と呼ばれるプロセスを通して、受けたワードから分離される。抽出には、関連するデータフィールドを、受けたワードからシフトすることが含まれる。あるパケットフィールドが受けたワードの中の任意のオフセットで始まり得るならば、受けたワード全体を通してシフト可能な汎用シフタが必要である。上記手法は、パケットのヘッダおよびデータフィールドの抽出に大量の回路を必要とする。なぜなら、各パイプラインが、関連ビットを、ワード全体における任意のオフセットから抽出可能でなければならないからである。これらの手法も、ルーティングリソースおよび消費電力という点で費用がかかる。その理由は、多くの冗長データが並列パイプラインに送られているからである。
【課題を解決するための手段】
【０００７】
１つ以上の実施の形態が上記問題のうち１つ以上に対応し得る。
概要
ある実施の形態において、パケット処理回路が提供される。このパケット処理回路は、複数のヘッダ抽出回路と、複数のヘッダ抽出回路に接続されたスケジューリング回路とを備える。スケジューリング回路は、複数のデータレーンを有するデータバスからそれぞれのパケットのヘッダデータを抽出することを要求するヘッダデータ抽出要求を１つ以上受けるように構成される。スケジューリング回路は、各要求に応じて、この要求によって指定されたそれぞれのヘッダを含む複数のデータレーンの第１のサブセットを決定し、複数のデータレーンの第１のサブセットからそれぞれのヘッダデータを抽出するために、複数のヘッダ抽出回路のうち対応する１つのヘッダ抽出回路を割当てる。
【０００８】
実施の形態によっては、複数のヘッダ抽出回路は各々、データバスの複数のデータレーンの対応する第２のサブセットから、データを受けるように接続され、それぞれのヘッダデータを抽出するために割当てられた、複数のヘッダ抽出回路のうちの対応するヘッダ抽出回路が受ける複数のデータレーンの各第１のサブセットについて、複数のデータレーンの第１のサブセットは、対応するヘッダ抽出回路が接続されて受ける複数のデータレーンの第２のサブセットに含まれる。
【０００９】
実施の形態によっては、データバスはＮビットのデータバスであり、複数のヘッダ抽出回路は、データバス上で並列に受けることが可能なパケットの最大数以上の数であるＫ個のヘッダ抽出回路を含む。各データレーンはＱビットでもよい。Ｎビットのデータで受けたデータパケットの、最大ヘッダサイズのヘッダは、Ｓ個のデータレーンを占めてもよい。データレーンの第１のサブセットは、Ｌ個のデータレーンを含んでもよく、Ｌ＊Ｑは、データバス上で受信し得る最小サイズのデータパケットに等しい。
【００１０】
実施の形態によっては、Ｌ＝２でもよく、ヘッダ抽出回路ｉ（１≦ｉ≦Ｋ）について、
ｉ＝１の場合、ヘッダ抽出回路ｉは、データレーン１〜２＋（Ｓ−１）からデータを排他的に受けかつＳ個のデータレーン上で受けた前のワードからデータを受けるように構成され、
１＜ｉ＜Ｋの場合、ヘッダ抽出回路ｉは、データレーン２＊ｉ−２〜２＊ｉ＋（Ｓ−１）からデータを排他的に受けるように構成され、
ｉ＝Ｋの場合、ヘッダ抽出回路ｉは、データレーン２＊Ｋ、２＊Ｋ−１、および２＊Ｋ−２からデータを排他的に受けるように構成される。スケジューリング回路は、データレーンＪ（Ｊ＜Ｋ）で受信された要求を受けたことに応じて、
パケットの終端を含まない、Ｊが偶数であるデータレーンＪの場合は、要求をヘッダ抽出回路Ｊ／２＋１に割当て、
それ以外の場合は、要求をヘッダ抽出回路（Ｊ＋１）／２に割当てるように、構成されてもよい。スケジューリング回路はさらに、必要なすべてのヘッダデータが現在のデータワードに存在するとは限らない場合の要求を受けたことに応じて、要求を、次のデータワードで処理するためにバッファリングするように構成してもよい。
【００１１】
実施の形態によっては、Ｌは２よりも大きくてもよく、ヘッダ抽出回路ｉ（１≦ｉ≦Ｋ）について、
ｉ＝１の場合、ヘッダ抽出回路ｉは、データレーン１〜３＋Ｓからデータを排他的に受けかつＳ個のデータレーン上で受けた前のワードからデータを受けるように構成され、
１＜ｉ＜Ｋの場合、ヘッダ抽出回路ｉは、データレーンＬ＊（ｉ−２）＋２〜Ｌ＊（ｉ−１）＋（Ｓ＋３）からのデータしか受けないように構成され、
ｉ＝Ｋの場合、ヘッダ抽出回路ｉは、データレーンＬ＊（Ｋ−２）＋２〜Ｎ／Ｑからのデータしか受けないように構成される。スケジューリング回路はさらに、データレーンＪ上で受信された要求を受けたことに応じて、
Ｊ  ｍｏｄ  Ｌ＝２であり、Ｊ＜（Ｎ／Ｑ）であり、かつデータレーンＪがパケットの始点を含む場合、要求をヘッダ抽出回路（Ｊ＋３Ｌ−３）／Ｌに割当てるように構成されてもよく、
Ｊ  ｍｏｄ  Ｌ＝３であり、かつデータレーンＪがパケットの終端を含む場合、要求をヘッダ抽出回路（Ｊ＋Ｌ−３）／Ｌに割当てるように構成されてもよい。
【００１２】
実施の形態によっては、パケット処理回路はさらに、複数のデータレーンの第１のサブセットからヘッダデータを抽出するために、スケジューリング回路が複数のヘッダ抽出回路のうちの１つのヘッダ抽出回路を割当てたことに応じて、データを、データバスのレーンの第１のサブセットから、複数のヘッダ抽出回路のうちの１つである割当てられたヘッダ抽出回路までルーティングするように構成された、ルーティング回路をさらに備える。
【００１３】
実施の形態によっては、１つ以上の要求は各々、パケットヘッダタイプ、パケット識別子、およびヘッダアドレスを指定する。パケットヘッダ抽出回路は各々、データレーンの第１のサブセットからヘッダデータを抽出するように割当てられたことに応じて、要求によって示されるパケットヘッダタイプから、データレーンの第１のサブセット内におけるヘッダデータのオフセットを求め、ヘッダデータの長さを求めるように構成されてもよい。
【００１４】
実施の形態によっては、ヘッダデータは１つ以上のヘッダフィールドのデータを含む。実施の形態によっては、ヘッダデータはそれぞれのヘッダフィールドに対する１つ以上のポインタを含む。実施の形態によっては、スケジューリング回路は、データバス上で受けた各ワードについて、データバスからそれぞれのパケットのヘッダデータを抽出することを要求する、１組の、１つ以上の要求を受けるように構成され配置される。
【００１５】
別の実施の形態において、パイプラインパケット処理回路が提供される。パイプラインパケット処理回路は、パイプライン方式で構成および配置されてデータバスから受けたワードをバッファリングする複数のメモリバッファを含む。各メモリバッファは複数のデータレーンを有する。複数の抽出段が、パイプライン方式で配置され、複数のメモリバッファにそれぞれ接続される。各抽出段は、メモリバッファのパイプライン上でバッファリングされたワードの異なるレベルのデータパケットのヘッダを抽出するように構成される。各抽出段は、複数のパケットヘッダ抽出回路とスケジューリング回路とを含む。スケジューリング回路は、メモリバッファのパイプラインの対応する１つのメモリバッファに格納されたワードから対応するレベルのパケットヘッダをそれぞれ抽出することを要求する１つ以上の抽出要求を受けるように構成される。各要求に対し、スケジューリング回路は、この要求よって指定された各ヘッダを含む、対応するメモリバッファのデータレーンの第１のサブセットを決定する。スケジューリング回路は、決定された、対応するメモリバッファのレーンの第１のサブセットからヘッダを抽出するために、ヘッダ抽出回路のうちの対応する１つのヘッダ抽出回路を割当てる。
【００１６】
実施の形態によっては、パイプライン方式のパケットプロセッサはさらに、メモリバッファのうちの１つに接続されたパケット検出回路を含む。パケット検出回路は、各データパケットの始点を検出するように構成および配置してもよい。パケットの始点を検出すると、パケット検出回路は、複数のメモリバッファのうちの第１の１つのメモリバッファに格納されたワードから対応するパケットヘッダを抽出することを要求する抽出要求を生成してもよく、かつ、生成した要求を複数の抽出段のうちの第１の１つの抽出段に送ってもよい。
【００１７】
実施の形態によっては、パイプライン方式のパケットプロセッサはさらに、抽出段のうちの対応する１つの抽出段に接続された少なくとも１つの要求構成回路を含む。各要求構成回路は、第２のレベルのヘッダを含むパケットを示す各抽出段によって抽出された情報に応じてパケットの第２のレベルのヘッダを抽出することを要求する抽出要求を生成するように、かつ、生成された要求を複数の抽出段のうちの別の１つの抽出段に送るように構成および配置してもよい。
【００１８】
もう１つの実施の形態において、ネットワークパケット処理回路を生成する方法が提供される。パケットパラメータが記載された仕様書が入力される。パケットパラメータは、データバス幅（Ｎ）、データバスのデータレーンのレーン幅（Ｑ）、データバスを介して受けるパケットの最小パケットサイズ、および、データバスを介して受けるパケットの最大ヘッダサイズを含む。パケットパラメータに基づいて、ヘッダ抽出回路の数（Ｋ）が決定される。パケットパラメータに基づいて、Ｋ個のヘッダ抽出回路各々について、データレーンの第１のサブセットが決定される。Ｋ個のヘッダ抽出回路と、ルーティング回路と、Ｋ個のヘッダ抽出回路に接続されたスケジューリング回路とを有するパケットプロセッサが記載された回路仕様書が生成される。ルーティング回路は、データを、データレーンの各サブセットからＫ個のヘッダ抽出回路のうちの対応する１つのヘッダ抽出回路にルーティングするように構成される。スケジューリング回路は、複数のデータレーンを有するデータバスから各パケットのヘッダデータを抽出することを要求する１つ以上の抽出要求を受けるように構成される。各要求に応じて、スケジューリング回路は、この要求によって指定されたそれぞれのヘッダを含む複数のデータレーンの第２のサブセットを決定し、複数のデータレーンの第２のサブセットから対応するヘッダデータを抽出するために、複数のヘッダ抽出回路のうちの対応する１つのヘッダ抽出回路を割当てる。第２のサブセットは、複数のヘッダ抽出回路のうちの割当てられた１つのヘッダ抽出回路の、それぞれの第１のサブセットに含まれている。
【００１９】
実施の形態によっては、パケットパラメータは、最大ヘッダ深さ（Ｍ）を含み、回路仕様書にはパケット処理パイプラインが記載される。パケット処理パイプラインはＭ個のバッファを含み、このバッファは、パイプライン方式で配置され、データバス上で受けたＭ個のワードについてデータバスの複数のデータレーンをバッファリングするように構成される。パケット処理パイプラインはまた、各々が、Ｍ個のバッファのうちの１つから各ヘッダデータを抽出するように構成された、Ｍ個のパケットプロセッサと、Ｍ個のパケットプロセッサにそれぞれ接続されたＭ個の要求生成回路とを含む。各要求生成回路は、Ｍ個のパケットプロセッサ回路のうちの対応する１つのパケットプロセッサ回路に対し１つ以上の要求を生成するように構成してもよい。
【００２０】
その他さまざまな実施の形態が以下の詳細な説明および特許請求の範囲に記載されていることがわかるであろう。
【００２１】
本発明のさまざまな側面および利点は以下の詳細な説明を検討し図面を参照することによって明らかになるであろう。
【図面の簡単な説明】
【００２２】
【図１】１つ以上の実施の形態に従うパケット処理パイプラインの一例を示す。
【図２】図１に示されるパケット処理パイプラインの抽出段を実現するために使用し得るパケット処理回路の一例を示す。
【図３】１つ以上の実施の形態に従うデータパケットのヘッダを抽出するためのプロセスの一例のフローチャートを示す。
【図４】１つ以上の実施の形態に従うヘッダ抽出回路それぞれに対するデータレーンサブセットのルーティングの一例を示す。
【図５】１つ以上の実施の形態に従うヘッダ抽出要求のスケジューリングを実現するために使用し得る要求スケジューリング回路の一例を示す。
【図６】１つ以上の実施の形態に従うヘッダ抽出回路の実現例を示す。
【図７】図６に示されるデータ抽出回路を実現するために使用し得る回路の一例を示す。
【図８】１つ以上の実施の形態に従い構成されたデータパケット処理回路を生成するためのプロセスのフローチャートを示す。
【図９】１つ以上の実施の形態に従うデータパケット処理回路を実現するために構成し得るプログラマブル集積回路を示す。
【図１０】本明細書に記載のプロセスおよび機能を実現するために構成し得るコンピュータアーキテクチャを示す。
【発明を実施するための形態】
【００２３】
詳細な説明
１つ以上の実施の形態は、パケット処理回路のためのハードウェア効率の良い並列アーキテクチャを提供する。パケット処理回路は、データバス上で受けた複数のパケットのヘッダ情報を処理するための複数のヘッダ抽出回路を含む。データバスは複数のデータレーンに分割される。各ヘッダ抽出回路は、ヘッダ情報を、データレーンのそれぞれのサブセットから受けて抽出するように構成される。各抽出回路が受けるのはデータレーンの１つのサブセットのみであるので、必要なルーティング回路はより少なく各抽出回路が行なう抽出はより小さなシフト回路を用いて実現し得る。
【００２４】
図１は、１つ以上の実施の形態に従い構成された一例としてのパケット処理パイプライン１００を示す。インターフェイス回路１２４は、ワードをＮバイトのデータバス１０２から受けてＮバイトのメモリバッファのパイプラインにバッファリングする。受けた各ワードについては、このワードは第１のメモリバッファに格納されそれよりも前に受けたワードは、異なる抽出段１０８、１１４、および１２０によるアクセスのために、メモリバッファのパイプラインに沿って送られる。
【００２５】
各パケットは、最大ヘッダレベル深さＭまでの、ヘッダのスタックを含み得る。この例において、パイプラインは、ヘッダ情報をヘッダスタックの複数のレベルから抽出するためにＭ個の抽出段（１０８、１１４、および１２０）を含む。各段は、ヘッダスタックにおける１つのヘッダを扱う。パイプラインの段は、各々が連続する１つ以上のヘッダを扱うＭよりも少ない段であってもよい。
【００２６】
データバス１０２を介して受けた各ワードについて、パケット始点（ＳＯＰ（start of packet））検出回路１０４は、ワード内で検出された各パケットのヘッダ情報の抽出要求を生成する。パケットは、ワードと関連付けられたＳＯＰデータに基づいて検出される。抽出要求は第１の抽出段１０８に送られる。この抽出段は、インターフェイス回路１２４においてバッファリングされたワードから、抽出要求各々に対応するヘッダ情報を抽出するように構成されている。
【００２７】
ＳＯＰ検出回路１０４によって生成された抽出要求は、受けたデータワードの中のどこに抽出すべき所望のヘッダ情報が位置するかを示す。ヘッダ抽出要求は、いくつかの代替フォーマットで実現し得る。これらフォーマットは、あるパケットについて抽出すべきヘッダ情報を示す異なるデータ値を含み得る。この例において、各抽出要求は、受けたワードの中で要求されたヘッダが始まるオフセットと、ヘッダ内のさまざまなフィールドの位置を決定するために使用できるヘッダフォーマットインジケータとを含む。この要求はまた、連続する少なくとも２つのワードサイクルにわたって固有のものとなるように選択されたパケット識別子を含み得る。複数の抽出段各々において、パケット識別子を用いて、パケットに対応するヘッダ情報を識別できる。
【００２８】
各抽出段は、複数のヘッダ抽出回路（図示せず）を含む。受けたワードに含まれ得る最大数のパケット各々に対して１つのヘッダ抽出回路が設けられる。受けた各抽出要求に対し、抽出段は、複数のヘッダ抽出回路のうちの１つを割当てて要求されたヘッダ情報を抽出するように構成されている。抽出されたヘッダ情報データは、たとえば、さまざまなヘッダフィールドのデータ、または、要求されたヘッダのさまざまなヘッダフィールドを参照するポインタデータを含み得る。
【００２９】
各抽出段からの抽出ヘッダ情報は、たとえばデータ処理回路１２２によってさらに処理されるために出力される。データ処理回路１２２は、抽出されたヘッダフィールド値およびポインタをさらなるパケット処理に使用する。パケットのヘッダレベル深さによっては、パケットを、パイプライン内の１つ以上の追加の抽出段１１４および１２０によって処理する必要がある場合がある。この追加の抽出段は、パケットの、入れ子にされたレベル（nested levels）のヘッダスタックのヘッダ情報を抽出する。この例において、パイプラインは、パケットがヘッダスタックの別のレベルに追加のヘッダを含むか否か判断するために、抽出段同士の間に要求構成回路１１０および１１６を含む。パケットが追加のヘッダを含む場合、要求が生成され次の抽出段１１４または１２０に送信される。抽出段１１４および１２０は、インターフェイス回路１２４のパイプラインのメモリバッファのうちの対応するメモリバッファに格納されているデータワードを用いて抽出段１０８の動作と同様のやり方で動作する。
【００３０】
上記例および実施の形態は、主として、各抽出段において１つのパケットの１つのヘッダレベルを抽出することに関連して記載されているが、外部論理が１つのヘッダと次のヘッダとの間の作用について判断する必要がなければ、１つの段において１つのヘッダスタックの複数のヘッダを抽出してもよいことがわかる。
【００３１】
図２は、図１に示されるパケット処理パイプラインの抽出段を実現するために使用し得るパケット処理回路の一例を示す。パケット処理回路２００は、複数のＱバイトデータレーンを有するＮバイトデータバスからデータワードを受けるためのデータバスインターフェイス回路２０４を含む。この回路は、Ｋ個のヘッダ抽出回路２０８、２１０、２１２、および２１４を含む。これらヘッダ抽出回路は各々、データレーンの各サブセットを受けるように、かつ、ヘッダ情報をこのデータレーンのサブセットのうちの１つ以上のデータレーンから抽出するように構成されている。言い換えると、各抽出回路は、ヘッダ情報を、Ｎバイトのバスのデータレーンの各範囲から抽出するように構成されている。ヘッダ抽出回路の数Ｋは、Ｎバイトの１ワード内の受信し得る最小サイズのパケットおよびパケットフラグメントの最大数に等しい。各抽出回路が受けるのはデータレーンの１つのサブセットのみであるので、必要なルーティング回路はより少なく、抽出はより小さなシフト回路を用いて実現し得る。
【００３２】
データバス２０２上で受けた各ワードについて、スケジューラ回路２０６は、受けたデータワードに含まれる各パケットからヘッダ情報を抽出することを要求する、１組の抽出要求を受ける。各抽出要求に対し、スケジューラ回路は、示されたヘッダが、ワードのどのデータレーンを占めているか判断し、抽出要求を、そのレーンのサブセットが、抽出要求に対応する決定したデータレーンを含む、ヘッダ抽出回路に割当てる。この例において、ヘッダ抽出回路に対する抽出要求の割当ては、要求を、割当てられたヘッダ抽出回路に転送することによって行なわれる。しかしながら、実施の形態によっては、転送前に抽出要求のフォーマットを調整してもよく、そうでなければ、割当てられたヘッダ抽出回路に、要求されたヘッダ情報を抽出するよう指示してもよいことが理解される。
【００３３】
図３は、データバス上で受けたデータパケットのヘッダを抽出するためのプロセスの一例のフローチャートを示す。このプロセスは、図２に示されるパケット処理回路を用いて実現してもよい。ブロック３０２で、ヘッダ抽出要求（ＥＲｓ（extraction requests））が、データバスから受けたワードに基づいて入力される。ブロック３０４で、各抽出要求に対し、抽出要求によって示されるヘッダを含む、ワードのデータレーンのサブセットが決定される。ブロック３０６で、各抽出要求が、複数のヘッダ抽出回路のうちの１つに割当てられる。ブロック３０８で、データレーンの各サブセットのデータが、ヘッダ抽出回路のうちの対応する１つの抽出回路に送信される。ブロック３１０で、ヘッダデータが、割当てられたヘッダ抽出回路を用いて、データレーンのサブセットから抽出される。
【００３４】
ヘッダ抽出回路にそれぞれルーティングされたデータレーンのサブセットは、互いに排他的ではないことが理解されるはずである。なぜなら、ヘッダはデータレーン同士の境界にまたがっているかもしれないからである。データレーンが相互排他的なサブセットに均等に分割されている場合、同じサブセットを参照する複数のヘッダ抽出要求を、異なるヘッダ抽出回路が並列処理することはできない。抽出要求を確実に並列処理できるようにするために、隣合うヘッダ抽出回路にそれぞれルーティングされた、データレーンのサブセットを重複させることによって、受けたヘッダ抽出要求のスケジューリングにある程度の柔軟性を持たせる。この重複によって、データバス２０２上で受けたワード１つ当たり最大１つの抽出要求が各ヘッダ抽出回路に割当てられるように、スケジューリングを行なうことができる。
【００３５】
図４は、１つ以上の実施の形態に従うヘッダ抽出回路それぞれに対するデータレーンサブセットのルーティングの一例を示す。ヘッダ抽出回路４０４がすべてのヘッダ抽出要求を並列に処理できることを保証することが可能な、ヘッダ抽出回路の数およびデータレーン４０２のルーティングは、最小サイズのパケットが占めるレーンの数（Ｌ）および最大サイズのヘッダ（Ｈ）が占めるデータレーンの数（Ｓ）を含むアーキテクチャパラメータの数によって決まる。
【００３６】
本明細書では、説明し易くするために、例および実施の形態が、主として、Ｎバイトのデータバスから複数のヘッダ抽出回路４０４にルーティングされるＮ／Ｑのデータレーンとの関連で記載されている。このデータレーンはＱバイト、Ｓ＝２レーン、Ｌ＝２レーンである。
【００３７】
一般的に、Ｎ／Ｑのデータレーンは、実線の矢印で示されるようにヘッダ抽出回路に割当てられルーティングされている相互排他的なグループに分けられてもよい。ヘッダ抽出回路１はデータレーン１および２を受けるように構成され、中間のヘッダ抽出回路２〜Ｋ−１は各々Ｌのデータレーンを受けるように構成され、ヘッダ抽出回路Ｋは残りのデータレーンを受けるように構成されている。この例において、Ｌ＝２であり、Ｎ／Ｑのデータレーンは、各々２つのデータレーンを有する相互排他的なグループに均等に分割されている。
【００３８】
データレーンのサブセットの重複は、点線の矢印で示されるように追加のデータレーンをルーティングすることによって実現される。説明を容易にするために、実線の矢印で示すようにヘッダ抽出回路にルーティングされたデータレーンを、ヘッダ抽出回路のデフォルトデータレーンと呼んでもよく、点線の矢印で示すようにこのヘッダ抽出回路にルーティングされた追加のデータレーンを、ヘッダ抽出回路の非デフォルトデータレーンと呼んでもよい。重複の量は、パラメータＳおよびＬによって決まる。Ｌ＝２の場合、各ヘッダ抽出回路は、（利用できるのであれば）上側に隣接するヘッダ抽出回路にルーティングされているデフォルトレーンである、Ｓ−１の非デフォルトデータレーンと、（利用できるのであれば）下側に隣接するヘッダ抽出回路にルーティングされている１つのデフォルトレーンである、１つの非デフォルトデータレーンとを受ける。
【００３９】
上記ルーティングの結果、ヘッダ抽出回路１は、データレーン１〜２＋（Ｓ−１）からデータを受ける。中間にある各ヘッダ抽出回路ｉは、データレーン２＊ｉ−２〜２＊ｉ＋（Ｓ−１）からデータを受ける。ヘッダ抽出回路Ｋは、データレーン２＊Ｋ、２＊Ｋ−１、および２＊Ｋ−２からデータを受ける。
【００４０】
１つのヘッダが、連続する２つ以上のワードにまたがることがあることが理解される。このような場合、データは、次のワード（複数のワード）でさらにデータを受けるまで、ヘッダから抽出することができない。バッファレーン４１０および４１２は、前のワード（複数のワード）の最後のＳのデータレーンをバッファリングするために設けられる。不完全なヘッダを受けた場合、前のレーンを、ヘッダ抽出回路１によって、後続のワードでヘッダの最後の部分を受けたときに処理してもよい。
【００４１】
Ｌ＝２である例において、抽出要求を、デフォルトデータレーンの上記割当ておよび対応するパケットの終端の位置に従って、ヘッダ抽出回路が処理するように、スケジュールしてもよい。（実線の矢印で示されるように）１つのヘッダ抽出回路に割当てられた最も高いデフォルトレーンにパケットの終端が含まれていない場合、このデータレーンで受けた要求を、上側に隣接するヘッダ抽出回路によって処理されるよう、スケジュールする。そうでなければ、この要求を、デフォルトデータレーンとしての要求を含むデータレーンに割当てられたヘッダ抽出回路によって処理されるように、スケジュールする。
【００４２】
数値で説明すると、データレーンＪ（Ｊ＜Ｋ）で受けた要求については、Ｊが偶数でありデータレーンにパケットの終端が含まれていなければ、この要求をヘッダ抽出回路Ｊ／２＋１に処理のために割当てる。そうでなければ、この要求をヘッダ抽出回路（Ｊ＋１）／２に割当てる。
【００４３】
Ｌ＞２を実現するアーキテクチャの場合、ヘッダ抽出回路１は、上記デフォルトデータレーンに加えて、ヘッダ抽出回路２も受ける１つの追加の非デフォルトデータレーンを受け、中間のヘッダ抽出回路は各々、（利用できるのであれば）上側に隣接するヘッダ抽出回路からＳ＋１の追加の非デフォルトデータレーンを受ける。ヘッダ抽出回路２〜Ｋは各々、下側に隣接するヘッダ抽出回路から１つの追加の非デフォルトデータレーンを受ける。
【００４４】
データレーンのデフォルトおよび非デフォルトルーティングの結果、ヘッダ抽出回路１は、データレーン１〜Ｓ＋３からデータを受ける。中間の各ヘッダ抽出回路ｉは、データレーンＬ＊（ｉ−２）＋２〜Ｌ＊（ｉ−１）＋（Ｓ＋３）からデータを受ける。ヘッダ抽出回路Ｋは、データレーンＬ＊（Ｋ−２）＋２〜Ｎ／Ｑからデータを受ける。
【００４５】
Ｌ＞２の実現例の場合、抽出要求は、この要求のデータレーンと、対応するパケットの先頭／末尾とに基づいて、ヘッダ抽出回路４０４が処理するように、スケジュールされてもよい。たとえば、最も下にあるまたは中央のヘッダ抽出回路の最も高いデフォルトデータレーンがパケットの始点を含んでいる場合、このレーンで受けたいかなる要求も、処理のために上側に隣接するヘッダ抽出回路に割当てられる。中央のまたは最も上にあるヘッダ抽出回路の最も低いデフォルトデータレーンがパケットの末尾を含んでいる場合、このレーンで受けたいかなる要求も、下側に隣接するヘッダ抽出回路に割当てられる。
【００４６】
数値で説明すると、データレーン（Ｊ）で受けた要求については、Ｊ  ｍｏｄ  Ｌ＝２であり、Ｊ＜（Ｎ／Ｑ）であり、かつデータレーンＪがパケットの始点を含むのであれば、この要求はヘッダ抽出回路（Ｊ＋３Ｌ−３）／Ｌに割当てられる。Ｊ  ｍｏｄ  Ｌ＝３でありかつデータレーンＪがパケットの終端を含むのであれば、この要求はヘッダ抽出回路（Ｊ＋Ｌ−３）／Ｌに割当てられる。
【００４７】
図５は、１つ以上の実施の形態に従う、ヘッダ抽出要求のスケジューリングを実現するために使用し得る要求スケジューリング回路の一例を示す。図２を参照して述べたように、要求スケジューリング回路は、データバス上で受けた各ワードについて１組の抽出要求を受ける。要求スケジューリング回路５００は、複数のレーン割当回路５０２、５０４、５０６、および５０８を含む。これらレーン割当回路は各々、ヘッダ抽出要求を受けるように、かつ、データバスのどのレーン（複数のレーン）が、要求によって示されるヘッダを含むのか判断するように、構成される。
【００４８】
要求スケジューリング回路５００は、複数のスケジューラ回路５２０〜５２８を含み、これらの中には、データバスの各データレーンに対応する１つのスケジューラ回路が含まれる。各抽出要求は、要求交換スイッチ５１０を介して、レーン割当回路５０２〜５０８のうちの１つから、要求によって示されるヘッダが始まるデータレーンに対応するスケジューラ回路まで、ルーティングされる。
【００４９】
スケジューラ回路５２０〜５２８は、図４を参照して先に述べたように、抽出要求をヘッダ抽出回路に割当てる。抽出要求は、データバス上で受けたすべてのワードについて、スケジューラ回路５２０〜５２８によってスケジュールされる。しかしながら、図４を参照して述べたように、１つのワードの中に、必要なすべてのヘッダ情報がない場合がある。たとえば、パケットヘッダは、現在のワードにおいて始まっているものの後続のワードまで続いていることがある。このような場合、スケジューリング回路は、後続のワードを受けるまで、対応するヘッダ抽出要求を要求バッファ５１２にバッファリングするように、構成される。スケジューリングの完了後、抽出要求は、要求交換スイッチ５３０を介して、スケジューラ回路から、割当てられたヘッダ抽出回路まで、ルーティングされる。
【００５０】
図６は、図４に示されるヘッダ抽出回路のうち１つの抽出回路のインスタンスの実現化の一例を示す。ヘッダ抽出回路６０２は、受けたヘッダ抽出要求に従い、データレーンのサブセットから、ヘッダ情報を受けて抽出するように構成される。この実現例において、要求は、ワードの中でヘッダが始まる位置を示すベースアドレス（ａ）と、このヘッダに含まれるフィールドの配置およびフォーマットを示すフォーマット番号（ｒ）と、対応するデータパケットのパケットＩＤ（ｐ）とを含む。
【００５１】
ヘッダ抽出回路６０２は、いくつかのフィールドデータ抽出回路６０６〜６０８と、いくつかのフィールドポインタ計算回路６１０〜６１２とを含む。フィールドデータ抽出回路は、ヘッダフィールドそれぞれのデータを抽出するように構成され、フィールドポインタ計算回路は、ヘッダフィールドそれぞれに対するポインタを決定するように構成される。実現例によっては、ヘッダフィールドそれぞれに対するポインタを、ヘッダ内におけるオフセットを基準として、またはワード内におけるオフセットを基準として、決定してもよい。
【００５２】
フィールドデータ抽出回路およびフィールドポインタ計算回路は各々、ヘッダ抽出要求内で示されるフォーマット番号ｒによって決まる異なるフィールドに対して機能する。
【００５３】
この例において、データ抽出回路６０６〜６０８は、３２ビットのフィールドデータを出力するものとして示され、ポインタ計算回路６１０〜６１２は、ｔビットのポインタを出力するものとして示されている。これらデータ値は、例示のために与えられているにすぎない。データ抽出回路６０６〜６０８の数およびポインタ計算回路６１０〜６１２の数、ならびに出力ヘッダフィールドの長さおよびポインタの長さは、ヘッダ抽出回路が処理するように構成されているヘッダフォーマットに従い調整し得る、アーキテクチャパラメータである。
【００５４】
ある実施の形態において、ヘッダ抽出回路６０２は、抽出要求によって示されるヘッダベースアドレスａに従い、入力されたデータレーンサブセットから、要求されたヘッダ情報を有する、受けているデータレーンの一部（ｗビット）を選択する、前処理回路６０４を含む。その他いくつかの実施の形態では、前処理回路が実現されずヘッダ抽出回路６０２の外部のルーティング回路（図示せず）が、要求されたヘッダ情報を有するデータレーンのみを、ヘッダ抽出回路６０２に動的にルーティングするように構成されてもよい。さらに別の実施の形態では、データ抽出回路６０６〜６０８およびフィールドポインタ計算回路６１０〜６１２が、受けているデータレーンサブセット６２０から、対応するヘッダフィールドを抽出するように構成されてもよい。図４に関して先に述べたように、サブセット６２０に含まれるデータレーンは、アーキテクチャパラメータＬおよびＳ、ならびに、パケット処理回路内における抽出回路の位置によって、決まる。
【００５５】
図７は、図６に示されるデータ抽出回路を実現するために使用し得る回路の一例を示す。上記のように、パケットヘッダは、パケットヘッダのフォーマット次第で、異なるオフセットにある、異なる数のフィールドを含み得る。フォーマット番号ｒは、データ抽出回路およびフィールドポインタ計算回路に入力される。データ抽出回路は、プロトコルと、抽出すべきヘッダフィールドとを示すフォーマット番号ｒを受ける。制御指示回路は、各ヘッダフォーマットｒについて、パケット処理回路が処理し得るフィールドデータを抽出する方法を回路７０２に指示するマイクロコードを用いて構成されたメモリを含む。入力されたフォーマット番号ｒに応じて、制御指示回路７０４は、ヘッダの始点からの、要求されたフィールドのビットオフセット、および、要求されたフィールドのビット長を決定する。ビットオフセットおよびビット長として、例示のためにそれぞれ６ビットおよび８ビットが示されている。制御指示回路７０４によって出力されるビットオフセットおよびビット長は、回路７０２が処理するように構成された取り得るヘッダフォーマットに応じて決まることが、さらに理解されるであろう。この情報は、ヘッダベースオフセットａと組合されて、要求されたフィールド情報が、受けたデータから抽出される。図６に示されるポインタ計算回路６１０〜６１２は、同様の配置で実現されて、所望のフィールドのビットオフセットを決定しかつヘッダオフセットおよびフィールドオフセットからフィールドへのポインタを計算してもよい。
【００５６】
図２を参照して、すべてのパケットが同じ扱いを受けるよう、ヘッダ抽出回路をフィールドデータ抽出回路７０２内の同じマイクロコードを用いて実現してもよいことが、理解される。これに代えて、ヘッダ抽出回路が、マイクロコードの異なる組を用いて構成されてもよい。たとえば、ネットワークアプリケーションは、ワードサイズに等しい固定パケットサイズを有するＡＴＭデータパケットと、可変サイズのＴＣＰ／ＩＰパケットとを送信するように構成されてもよい。ネットワークが１ワード内のＡＴＭパケットを常に送信するように構成されている場合、ヘッダは常に第１のヘッダ抽出回路によって処理されるであろう。したがって、第１のヘッダ抽出回路のみをマイクロコードを用いて構成してＡＴＭパケットを処理する必要がある。同様に、図１に示されるように複数の抽出段が実現されるとき、マイクロコードの異なる組を異なる抽出段で用いて異なるヘッダレベルを処理してもよい。マイクロコードは、書込み可能な制御記憶装置に格納されてもよく、これにより、ヘッダ抽出回路を実行時に更新できる。よって、特定のヘッダフォーマットのルールの追加、修正、および削除が可能である。
【００５７】
１つ以上の実施の形態において、ソフトウェア設計ツールが、上記のようなネットワークデータパケット処理回路を生成し構成するように構成されてもよい。図８は、ネットワークデータパケット処理回路設計を生成するためのプロセスのフローチャートを示す。ブロック８０２で、取り得るパケットパラメータが記載された仕様書が入力される。この実現例において、パケットパラメータは、データバスの幅Ｎと、データレーンの幅Ｑと、最小パケットサイズＭと、最大パケットヘッダサイズＨとを含む。ブロック８０４で、パケットパラメータに基づき、データバス上で並列に受信し得る最大数のデータパケットについてヘッダ情報を抽出するのに必要なヘッダ抽出回路の数Ｋを決定する。ブロック８０６で、図４を参照して述べたように、パケットパラメータに基づき、Ｋ個のヘッダ抽出回路各々に対して、データバスのデータレーンの対応するサブセットが選択される。
【００５８】
ブロック８０８で、ＶｅｒｉｌｏｇまたはＶＨＤＬ等のハードウェア記述言語（ＨＤＬ）回路設計仕様書が生成される。回路設計仕様書には、Ｋ個のヘッダ抽出回路と、データレーンの選択された各サブセットを対応するヘッダ抽出回路にルーティングするルーティング回路と、パケットスケジューリング回路とを有するパケットプロセッサが記載されている。上記のように、スケジューリング回路は、ある要求によって指定された各ヘッダを含むデータレーンの第２のサブセットを決定し、対応するヘッダデータを複数のデータレーンの第２のサブセットから抽出するために、複数のヘッダ抽出回路のうちの対応する１つのヘッダ抽出回路を割当てる。ヘッダ抽出回路の割当ては、第２のサブセットが、割当てられたヘッダ抽出回路に対応する第１のサブセットに含まれるよう、かつ、各ヘッダ抽出回路に、データバス上で受けたワード１つ当たり最大１つの抽出要求が割当てられるように、行なわれる。ヘッダ抽出回路および／またはスケジューリング回路は、予め規定された回路設計仕様書に記載されてもよく、または、この仕様書から構成されてもよい。たとえば、各ヘッダ抽出回路を、パケットパラメータおよび１組の取り得るヘッダフォーマットに従い、フィールドデータ抽出回路７０２等の、いくつかの予め規定されたモジュールをインスタンス化することによって、生成してもよい。
【００５９】
図９は、さまざまな実施の形態に従うパケットプロセッサを実現するように構成し得るプログラマブル集積回路の一例のブロック図である。図９に示されるプログラマブル集積回路は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ（field programmable gate array））として知られている。先に説明したパケット処理回路は、ＦＰＧＡのプログラマブル論理および配線リソース上で実現されてもよい。
【００６０】
ＦＰＧＡは、このアレイ内に、種類が異なるプログラマブル論理ブロックをいくつか含むことができる。たとえば、図９は、多数の異なるプログラマブルタイルを含むＦＰＧＡアーキテクチャ（９００）を示している。これらプログラマブルタイルは、マルチギガビットトランシーバ（ＭＧＴｓ（multi-gigabit transceivers）９０１）と、構成可能論理ブロック（ＣＬＢｓ（configurable logic blocks）９０２）と、ランダムアクセスメモリブロック（ＢＲＡＭｓ（random access memory blocks）９０３）と、入出力ブロック（ｌＯＢｓ（input/output blocks）９０４）と、構成およびクロッキング論理（ＣＯＮＦＩＧ／ＣＬＯＣＫＳ（configuration and clocking logic）９０５）と、デジタル信号処理ブロック（ＤＳＰｓ（digital signal processing blocks）９０６）と、特化された入出力ブロック（Ｉ／Ｏ９０７）、たとえばクロックポートと、デジタルクロックマネージャ、アナログデジタル変換器、システムモニタリング論理等の、その他のプログラマブル論理９０８とを含む。ＦＰＧＡの中には、専用プロセッサブロック（ＰＲＯＣ９１０）および内外再構成ポート（図示せず）も含むものがある。
【００６１】
ＦＰＧＡの中には、各プログラマブルタイルが、隣接する各タイルにおける対応する配線素子へのおよびこの素子からの標準化された接続を有するプログラマブル配線素子（ＩＮＴ９１１）を含むものがある。よって、これらプログラマブル配線素子が一体となって、示されているＦＰＧＡのプログラマブル配線構造を実現する。プログラマブル配線素子ＩＮＴ９１１はまた、図９において最も上に含まれている例によって示されるように、同じタイルの中のプログラマブル論理素子へのおよびこの素子からの接続を含む。
【００６２】
たとえば、ＣＬＢ９０２は、ユーザ論理プラス単一のプログラマブル配線素子ＩＮＴ９１１を実現するようにプログラムできる、構成可能な論理素子ＣＬＥ９１２を含むことができる。ＢＲＡＭ９０３は、１つ以上のプログラマブル配線素子に加えて、ＢＲＡＭ論理素子（ＢＲＬ９１３）を含むことができる。一般的に、１つのタイルに含まれる配線素子の数は、このタイルの高さに応じて決まる。示されている実施の形態において、１つのＢＲＡＭタイルは、５つのＣＬＢと同じ高さを有するが、その他の数（たとえば４つ）を用いることもできる。ＤＳＰタイル９０６は、適切な数のプログラマブル配線素子に加えて、ＤＳＰ論理素子（ＤＳＰＬ９１４）を含むことができる。ＩＯＢ９０４は、たとえば、プログラマブル配線素子ＩＮＴ９１１の１つのインスタンスに加えて、入出力論理素子（ＩＯＬ９１５）の２つのインスタンスを含むことができる。たとえば、Ｉ／Ｏ論理素子９１５に接続された実際のＩ／Ｏパッドは、示されているさまざまな論理ブロックよりも上に積層された金属を用いて製造され、一般的には、入出力論理素子９１５の領域に制限されないことが、当業者には明らかであろう。
【００６３】
示されている実施の形態において、（図９において斜線で示される）チップの中心近くの列領域は、構成、クロック、およびその他の制御論理のために使用される。この列から延びている水平領域９０９は、ＦＰＧＡの幅に沿ってクロックおよび構成信号を分配するために使用される。
【００６４】
図９に示されるアーキテクチャを利用するＦＰＧＡが、ＦＰＧＡの大部分を構成する規則的な列構造を乱す追加の論理ブロックを含むことがある。この追加の論理ブロックは、プログラマブルブロックおよび／または専用論理であってもよい。たとえば、図９に示されるプロセッサブロックＰＲＯＣ９１０は、ＣＬＢｓおよびＢＲＡＭｓのいくつかの列にまたがっている。
【００６５】
なお、図９は、代表的なＦＰＧＡアーキテクチャのみを示すことを意図している。１つの列の中の論理ブロックの数、列の相対的な幅、列の数および順序、列に含まれる論理ブロックの種類、論理ブロックの相対的な大きさ、および図９の最も上の部分に含まれる配線／論理実現例は、例示にすぎない。たとえば、実際のＦＰＧＡでは、ユーザ論理の効率的な実現を容易にするために、ＣＬＢｓが存在する場合は必ず、一般的には隣接するＣＬＢｓ列が２つ以上含まれている。
【００６６】
図１０は、本明細書に記載のプロセスおよび機能を実現するように構成し得る計算機構の一例のブロック図を示す。１つ以上のプロセッサと、プログラムコードを用いて構成されたメモリ機構とを含む、代替のさまざまな計算機構は、プロセスおよびデータ構造をホストし異なる実施の形態のアルゴリズムを実現するのに適しているであろうことが、理解されるであろう。プロセッサが実行可能なフォーマットで符号化された１つ以上の実施の形態のプロセスを含むコンピュータコードを、磁気または光ディスクまたはテープ、電子記憶装置等の、または、ネットワーク上のアプリケーションサービス等の、さまざまなコンピュータ読取可能な記憶媒体または配信チャネルを介して、格納し提供してもよい。
【００６７】
プロセッサ計算機構１０００は、ホストバス１０１２に接続された、１つ以上のプロセッサ１００２と、クロック信号生成器１００４と、メモリユニット１００６と、記憶ユニット１００８と、入出力制御ユニット１０１０とを含む。機構１０００を、回路基板上の別々の構成要素によって実現してもよく、または、集積回路の内部で実現してもよい。集積回路の内部で実現された場合、このプロセッサ計算機構はマイクロコントローラとしても知られるものである。
【００６８】
当業者が理解するように、計算機構のアーキテクチャは、実現化要件に応じて決まる。プロセッサ１００２は、１つ以上の汎用プロセッサであってもよく、または、１つ以上の汎用プロセッサと適切なコプロセッサとの組合せであってもよく、または、特化された１つ以上のプロセッサ（たとえばＲＩＳＣ、ＣＩＳＣ、パイプライン方式等）であってもよい。
【００６９】
メモリ機構１００６は一般的に、複数レベルのキャッシュメモリと、メインメモリとを含む。記憶機構１００８は、磁気ディスク（図示せず）、フラッシュ、ＥＰＲＯＭ、またはその他の不揮発性データ記憶装置によって提供されるもののような、ローカルおよび／またはリモート持続記憶装置を含み得る。記憶ユニットは、読取可能であっても読書き可能であってもよい。さらに、メモリ１００６および記憶装置１００８を１つの機構の中で組合わせてもよい。
【００７０】
プロセッサ機構１００２は、記憶装置１００８および／またはメモリ１００６機構内でソフトウェアを実行し、データを記憶装置１００８および／またはメモリ１００６機構内から読取り、データを記憶装置１００８および／またはメモリ１００６機構に格納し、入出力制御機構１０１０を通して外部装置と通信する。これらの機能は、クロック信号生成器１００４によって同期が取られる。計算機構のリソースを、オペ―レーティングシステム（図示せず）またはハードウェア制御ユニット（図示せず）によって管理してもよい。
【００７１】
本発明の実施の形態はさまざまなパケットプロセッサに応用可能であると考えられる。その他の側面および実施の形態は、当業者には、本明細書およびそこに開示されている発明の実施を考慮することによって明らかになるであろう。実施の形態は、ソフトウェアを実行するように構成された１つ以上のプロセッサとして、特定用途向け集積回路（ＡＳＩＣ）として、またはプログラマブル論理装置上の論理として実現してもよい。本明細書および示された実施の形態が専ら例示であるとみなされ実施の形態の真の範囲は以下の請求項によって示されることが、意図されている。
【図１】
0005834145.tif 000002
【図２】
0005834145.tif 000003
【図３】
0005834145.tif 000004
【図４】
0005834145.tif 000005
【図５】
0005834145.tif 000006
【図６】
0005834145.tif 000007
【図７】
0005834145.tif 000008
【図８】
0005834145.tif 000009
【図９】
0005834145.tif 000010
【図１０】
0005834145.tif 000011