(57)【要約】  巡回冗長検査を行なうための装置および方法が開示される。たとえば、装置（１００）は、データワードを複数の経路に分割するためのスプリッタ（１０５）を有する。装置は、複数の巡回冗長検査ユニット（１１０Ａ−１１０Ｎ）も有する。ユニットの各々は、径路のそれぞれ１つを処理するためのものである。さらに、ユニット（１１０Ａ−１１０Ｎ）の各々は、ユニット内で終了するパケットの巡回冗長検査値を出力するための第１の出力ポート（１１３Ａ−１１３Ｎ）と、ユニット内で開始するまたは進行中のパケットの巡回冗長検査値を出力するための第２の出力ポート（１１２Ａ−１１２Ｎ）とを含む。
2016518750.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、
データワードを複数の経路に分割するためのスプリッタと、
複数の巡回冗長検査ユニットとを備え、前記巡回冗長検査ユニットの各々は前記経路のそれぞれ１つを処理するためのものであり、前記巡回冗長検査ユニットの各々は、
前記巡回冗長検査ユニット内で終了するパケットの巡回冗長検査値を出力するための第１の出力ポートと、
前記巡回冗長検査ユニット内で開始するまたは進行中のパケットの巡回冗長検査値を出力するための第２の出力ポートとを備える、装置。
【請求項２】
前記複数の巡回冗長検査ユニットの第１のもの内で開始するまたは進行中のパケットの第１の巡回冗長検査値を前記複数の巡回冗長検査ユニットの第２のもの内で終了するパケットの第２の巡回冗長検査値と組合せるための少なくとも１つの結合器をさらに備える、請求項１に記載の装置。
【請求項３】
前記複数の巡回冗長検査ユニットの前記第１のもの内で開始するまたは進行中の前記パケットと、前記複数の巡回冗長検査ユニットの前記第２のもの内で終了する前記パケットとは同じパケットである、請求項２に記載の装置。
【請求項４】
前記複数の巡回冗長検査ユニットのうち少なくとも２つによって処理される少なくとも１つのパケットが前記複数の巡回冗長検査ユニットのうち前記少なくとも２つの間で連続的か否かを検査するための少なくとも１つの検査回路をさらに備える、請求項２または３に記載の装置。
【請求項５】
前記検査回路は、パケット開始信号が前記２つの巡回冗長検査ユニットのうちの第１の巡回冗長検査ユニットに関連付けられる第１の経路中に見出されるかまたは前記パケットが第１の経路中で進行中である場合、かつパケット終了信号が前記２つの巡回冗長検査ユニットのうちの前記第２の巡回冗長検査ユニットに関連付けられる第２の経路中に見出される場合、前記２つの巡回冗長検査ユニットの間で前記パケットが連続していると判断する、請求項４に記載の装置。
【請求項６】
前記巡回冗長検査ユニットの各々はさらに、
前記経路の１つを複数のレーンに分割するためのスプリッタと、
前記複数のレーンのうちそれぞれ１つのビットの部分的巡回冗長検査値を算出するための複数の巡回冗長検査モジュールとを備える、請求項１から５のいずれかに記載の装置。
【請求項７】
前記巡回冗長検査ユニットの各々はさらに、前記巡回冗長検査ユニット内で終了する前記パケットの前記巡回冗長検査値としての出力のための巡回冗長検査値を選択するための選択モジュールを備える、請求項１から６のいずれかに記載の装置。
【請求項８】
前記巡回冗長検査ユニットの各々はさらに、前記巡回冗長検査ユニット内で開始するまたは進行中の前記パケットの前記巡回冗長検査値としての出力のための巡回冗長検査値を選択するための選択モジュールを備え、前記選択モジュールは、前記レーンのいずれにもパケット開始信号が存在しなければ、前記レーンのうち１つの中のパケット開始信号に基づいてまたはデフォルト条件に基づいて、前記巡回冗長検査ユニット内で開始するまたは進行中の前記パケットの前記巡回冗長検査値としての出力のための前記巡回冗長検査値を選択するためのものである、請求項１から６のいずれかに記載の装置。
【請求項９】
前記巡回冗長検査ユニットの各々はさらに、少なくとも第１の巡回冗長検査モジュールからの部分的巡回冗長検査値と少なくとも第２の巡回冗長検査モジュールからの部分的巡回冗長検査値とを組合せて、前記第２の巡回冗長検査モジュールに関連付けられる前記レーンのうちそれぞれ１つの巡回冗長検査値を出力するための少なくとも１つの結合器を備える、請求項３から６のいずれかに記載の装置。
【請求項１０】
前記巡回冗長検査ユニットの各々はさらに、少なくとも１つのフォワーディングモジュールのレーンと宛先レーンとの間の多数のビットに基づいて少なくとも１つの部分的巡回冗長検査値をビットフォワーディングするための少なくとも１つのフォワーディングモジュールを備える、請求項１から９のいずれかに記載の装置。
【請求項１１】
以前のデータワードからの積算巡回冗長検査値を受信するための入力ポート、または
次のデータワードの積算巡回冗長検査値を出力するための出力ポートをさらに備える、請求項１から１１のいずれかに記載の装置。
【請求項１２】
積算巡回冗長検査値を、前記巡回冗長検査ユニットの少なくとも１つ内で終了するパケットの少なくとも１つの巡回冗長検査値と組合せるための少なくとも１つの結合器をさらに備え、
前記複数の巡回冗長検査ユニットによって処理されるパケットのサイズは前記経路の各々の少なくとも経路サイズである、請求項３から６のいずれかに記載の装置。
【請求項１３】
少なくとも１つのフォワーディングユニットのそれぞれの経路と宛先経路との間の多数のビットに基づいて少なくとも１つの巡回冗長検査値をビットフォワーディングするための少なくとも１つのフォワーディングユニットをさらに備える、請求項１から１２のいずれかに記載の装置。
【請求項１４】
パケットの終わりとレーンの終わりとの間または前記パケットの前記終わりと経路の終わりとの間の多数の空ビットに基づいて少なくとも１つの巡回冗長検査値をアンロールするための少なくとも１つのアンロールユニットをさらに備える、請求項１から１３のいずれかに記載の装置。
【請求項１５】
方法であって、
データワードを複数の経路に分割することと、
前記経路の各々を処理することとを備え、各経路毎に、前記処理することは、
前記経路内で終了するパケットの巡回冗長検査値を算出することと、
前記経路内で開始するまたは進行中のパケットの巡回冗長検査値を算出することとを備える、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
この発明は一般的に、たとえばフィールドプログラマブルゲートアレイなどの集積回路などの装置、および高いデータレートでパケットの巡回冗長検査計算を行なうための方法に関する。
【背景技術】
【０００２】
発明の背景
巡回冗長コード（ＣＲＣ）は、データの完全性を確実にするために電気通信およびネットワーク化において広く用いられる。たとえば、あらゆるイーサネット（登録商標）パケットは、追加ＣＲＣ３２コード（３２ビットＣＲＣコード）とともに伝送される。巡回冗長検査を行なうための回路は、シフトレジスタを用いてシリアルに実現されている。しかしながら、この方策は、現在のデータレートに追従するには不十分である。さらに、１００Ｇｂ／ｓまでのデータレートのためのいくつかのＣＲＣ回路設計が存在するが、これらは一般的に、入力幅が５２ビット以下の比較的狭いデータバスを用いることに係る。
【発明の概要】
【課題を解決するための手段】
【０００３】
発明の要約
１つの実施形態では、巡回冗長検査を行なうための装置が開示される。たとえば、装置は、データワードを複数の経路に分割するためのスプリッタを備える。装置は、複数の巡回冗長検査ユニットも備える。ユニットの各々は経路のそれぞれ１つを処理するためのものである。さらに、ユニットの各々は、ユニット内で終了するパケットの巡回冗長検査値を出力するための第１の出力ポートと、ユニット内で開始するまたは進行中のパケットの巡回冗長検査値を出力するための第２の出力ポートとを備える。
【０００４】
さまざまな実施形態では、複数の巡回冗長検査ユニットによって処理されるパケットのサイズは、経路のうちの各々の少なくとも経路サイズであり、装置はさらに、複数の巡回冗長検査ユニットの第１のもの内で開始するまたは進行中のパケットの第１の巡回冗長検査値を複数の巡回冗長検査ユニットの第２のもの内で終了するパケットの第２の巡回冗長検査値と組合せるための少なくとも１つの結合器を備え、少なくとも１つの結合器は、第１の巡回冗長検査値および第２の巡回冗長検査値に対する排他的ｏｒ演算を行なうためのものであり、複数の巡回冗長検査ユニットのうち第１のもの内で開始するまたは進行中のパケットと複数の巡回冗長検査ユニットのうち第２のもの内で終了するパケットとは同じパケットであり、装置はさらに、複数の巡回冗長検査ユニットのうち少なくとも２つの間に、複数の巡回冗長検査ユニットのうち少なくとも２つによって処理される少なくとも１つのパケットが連続的であるか否かを検査するための少なくとも１つの検査回路を備え、検査回路は、パケット開始信号が２つのユニットのうち第１のユニットに関連付けられる第１の経路の中に見出されれれば、またはパケットが第１の経路中で進行中であれば、かつパケット終了信号が２つのユニットのうち第２のユニットに関連付けられる第２の経路中に見出される場合は、パケットが２つのユニット間で連続していると判断し、巡回冗長検査ユニットの各々はさらに、経路のうち１つを複数のレーンに分割するためのスプリッタと、レーンのうちそれぞれ１つのビットの部分的巡回冗長検査値を算出するための複数の巡回冗長検査モジュールとを備え、Ｍ個の巡回冗長検査ユニットの各々はさらに、巡回冗長検査ユニット内で終了するパケットの巡回冗長検査値としての出力の巡回冗長検査値を選択するための選択モジュールを備え、選択ユニットは、レーンのうち１つの中のパケット終了信号に基づいて、またはレーンのいずれにもパケット終了信号が存在しなければデフォルト条件に基づいて、巡回冗長検査ユニット内で終了するパケットの巡回冗長検査値としての出力のための中間巡回冗長検査値を選択するためのものであり、巡回冗長検査ユニットの各々はさらに、巡回冗長検査ユニット内で開始するまたは進行中のパケットの巡回冗長検査値としての出力の巡回冗長検査値を選択するための選択モジュールを備え、選択モジュールは、レーンのうち１つの中のパケット開始信号に基づいて、またはレーンのいずれにもパケット開始信号が存在しなければデフォルト条件に基づいて、巡回冗長検査ユニット内で開始するまたは進行中のパケットの巡回冗長検査値としての出力の巡回冗長検査値を選択するためのものであり、巡回冗長検査ユニットの各々は、少なくとも第１の巡回冗長検査モジュールからの部分的巡回冗長検査値を少なくとも第２の巡回冗長検査モジュールからの部分的巡回冗長検査値と組合せて、第２の巡回冗長検査モジュールに関連付けられるレーンのそれぞれ１つの巡回冗長検査値を出力するための少なくとも１つの結合器をさらに備え、巡回冗長検査ユニットの各々はさらに、少なくとも１つのフォワーディングモジュールのレーンと宛先レーンとの間の多数のビットに基づいて少なくとも１つの部分的巡回冗長検査値をビットフォワーディングするための少なくとも１つのフォワーディングモジュールを備え、装置はさらに、以前のデータワードからの積算巡回冗長検査値を受信するための入力ポートおよび／または次のデータワードの積算巡回冗長検査値を出力するための出力ポートを備え、装置はさらに、積算巡回冗長検査値を、巡回冗長検査ユニットのうち少なくとも１つ内で終了するパケットの少なくとも１つの巡回冗長検査値と組合せるための少なくとも１つの結合器を備え、装置はさらに、少なくとも１つのフォワーディングユニットの経路と宛先経路との間の多数のビットに基づいて少なくとも１つの巡回冗長検査値をビットフォワーディングするための少なくとも１つのフォワーディングユニットを備え、装置はさらに、パケットの終わりとレーンの終わりとの間またはパケットの終わりと経路の終わりとの間の多数の空ビットに基づいて少なくとも１つの巡回冗長検査値をアンロールするための少なくとも１つのアンロールユニットを備える。
【０００５】
別の実施形態では、巡回冗長検査を行なうための別の装置が開示される。たとえば、装置は、データワードを処理するための複数の巡回冗長検査ユニットを備える。１つの実施形態では、巡回冗長検査ユニットの各々は、データワードの一部を処理するためおよびそれぞれの巡回冗長検査値を出力するためのものである。装置は、それぞれ複数のパケットの最終的な巡回冗長検査値としての出力の複数のそれぞれの巡回冗長検査値を選択するための選択ユニットも含む。データワードは最小パケットサイズよりも大きい。
【０００６】
さらなる実施形態では、巡回冗長検査を行なうための方法が開示される。たとえば、方法は、データワードを複数の経路に分割することと、経路の各々を処理することとを備える。１つの実施形態では、経路の各々毎に、処理することは、経路内で終了するパケットの巡回冗長検査値を算出することと、経路内で開始するまたは進行中のパケットの巡回冗長検査値を算出することとを備える。
【０００７】
添付の図面は開示の１つ以上の局面に従う例示的な実施形態を示す。しかしながら、添付の図面は、開示を示される実施形態に限定するように扱われるべきではなく、図面は、説明および理解のためのみのものである。
【図面の簡単な説明】
【０００８】
【図１】ＣＲＣ回路／装置実現例のブロック図である。
【図２】ＣＲＣユニットのブロック図である。
【図３】ＣＲＣユニットの代替的な実施形態のブロック図である。
【図４】経路上でおよび／またはＣＲＣユニットを通して処理されるビットの例示的なシナリオのタイミング図である。
【図５】パケットが２つのＣＲＣユニットの間で連続しているか否かを検査するための検査回路のブロック図である。
【図６】経路上でおよび／またはＣＲＣユニットを通して処理されるビットのさらなる例示的なシナリオのタイミング図である。
【図７】巡回冗長検査を行なうための方法のブロック図である。
【図８】本明細書中に記載の機能を実行するのに用いるのに好適な汎用コンピュータまたは計算装置の高レベルブロック図である。
【発明を実施するための形態】
【０００９】
図面の詳細な説明
本開示は一般的に、巡回冗長検査を行なうための装置および方法に関する。たとえば、本開示は、たとえば、プログラマブル論理装置（ＰＬＤ）、専用ＩＣ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）などの集積回路（ＩＣ）内で実現されて、高いビットレートでかつ広いデータバス上で受信されるパケットに対して巡回冗長検査動作を行なうことができる。本開示の実施形態は、１０２４ビット以上を含む入力幅を有する広いデータバスを用いて、たとえば４００Ｇｂ／ｓ以上など、１００Ｇｂ／ｓを上回るデータ伝送速度をサポートし得る。回路のアーキテクチャは、モジュール式および拡張可能であり、リソース−性能のトレードオフを提供することができる。
【００１０】
巡回冗長コード（ＣＲＣ）は、データの完全性を確実にするのに電気通信およびネットワーク化および多数の他の適用例で広く用いられる。たとえば、イーサネット（登録商標）パケットは、フレーム検査シーケンス（ＦＣＳ）とも称される、追加ＣＲＣ３２コード（３２ビットＣＲＣコード）とともに伝送される。巡回冗長検査を行なうための回路は、シフトレジスタを用いてシリアルに実現されている。しかしながら、この方策は現在のデータレートに追従するには不十分である。さらに、１００Ｇｂ／ｓまでのデータレートのためのいくつかのＣＲＣ回路設計が存在するが、これらは一般的に、５１２ビット以下の入力幅／ワードサイズを有する比較的狭いデータバスを用いることに係る。これは、将来的なスループットの拡張を限定してしまう。というのも、クロック周波数の大きな上昇を得ることがより難しくなるからである。４００Ｇｂ／ｓなどのより高いスループットを達成するため、ＣＲＣ回路はより広いデータバスを用いてもよい。たとえばこれによって、クロックサイクル当たり１０２４ビットよりも多くを処理することができるようになる。しかしながら、ネットワークパケット／イーサネット（登録商標）フレームの最小サイズは５１２ビットであるので、複数のパケットが同時にこの広いデータバス上に現われることがある。パケットはデータバス内の任意の位置で開始および終了する可能性がある。このように、ワード当たりのパケット数が増大するにつれて、したがって、異なるパケット位置に対処することがより複雑になってしまう。
【００１１】
応じて、本開示の実施形態は、たとえば５１２ビット入力データ幅に最適化される、たとえば５１２ビットＣＲＣユニット上に構築される拡張可能ＣＲＣアーキテクチャを記載する。本実施形態は、スループットが増大するのに応じたリソースの使用の線形拡張を提供する一方で、伝統的な方策は超線形拡張に係る。本開示の実施形態は５１２ビットの倍数および分数に関連して説明されるが、本開示はそのように限定されるものではないことに留意すべきである。すなわち、例示的なアーキテクチャは、５１２ビット経路サイズ／ＣＲＣユニットサイズを特徴とし、これは、現在の最小のイーサネット（登録商標）フレームサイズに対応し、したがって、示される目的によく適合している。しかしながら、当業者は、本開示に従って他のデータバス幅、フレームサイズ、経路サイズ、および線のサイズを用いてもよいことを認めるであろう。このように、本開示の他の実施形態は、異なる通信技術に対応してもよく、異なるネットワーク層について最適化されてもよく、かつたとえば、フレーム、パケット、セグメント、データグラム、プロトコルデータユニット（ＰＤＵ）、運搬データユニット（ＴＤＵ）、セッションデータユニット（ＳＤＵ）などの異なるパケット／ユニットサイズに合わせられてもよい。
【００１２】
巡回冗長検査は、データ伝送適用例で広く用いられるパリティビットベースの誤り検出方式であり、多項式算数に基づいている。伝送すべきデータのビットは多項式係数である。一例として、ビットストリーム１１０１０１１０１１は１０項多項式を表わす１０ビットを有する。
【００１３】
【数１】
2016518750.tif 000003
【００１４】
メッセージのＣＲＣを計算するため、生成多項式Ｇ（ｘ）と呼ばれる別の多項式が選ばれる。Ｇ（ｘ）は、ゼロよりも大きな次を有し、かつｘ0項において非ゼロ係数を有するべきである。この結果、生成多項式について、いくつかの可能な選択肢、したがって標準化の必要性が生じる。ＣＲＣ１６は、生成多項式を用いる１つのそのような標準である。
【００１５】
【数２】
2016518750.tif 000004
【００１６】
ＣＲＣ１６は、すべての単一および二重の誤り、奇数ビットについてのすべての誤り、長さ１６以下のすべてのバースト誤り、ならびにより長いバーストの大部分の誤りを検出する。別の標準的なＣＲＣは、生成多項式を用いるＣＲＣ３２である。
【００１７】
【数３】
2016518750.tif 000005
【００１８】
一般的に、ｎビットのＣＲＣは、データストリームを多項式Ｍ（ｘ）として表わし、Ｍ（ｘ）をｘnで乗算し（ｎは多項式Ｇ（ｘ）の次である）、かつ結果を生成多項式Ｇ（ｘ）で除算することによって算出される。結果的に得られる余りがデータストリームに追加されて伝送される。次に、完全な伝送された多項式が受信器端において同じ生成多項式で除算される。この除算の結果が余りを有しなければ、伝送誤りは存在しない。数学的には、これを以下のように表わすことができる。
【００１９】
ＣＲＣ＝［（Ｍ（ｘ）・ｘn）／Ｇ（ｘ）］の余り
ＩＥＥＥ８０２．３は、最初の３２ビットを補って、多項式Ｍ（ｘ）を、宛先アドレス、発信元アドレス、長さ／種類、およびフレームのデータとして定義する。以上のＣＲＣの算出からの余りが補われ、結果は、ＩＥＥＥ８０２．３  ３２ビットフレーム検査シーケンス（ＦＣＳ）フィールドである。ＦＣＳは、イーサネット（登録商標）フレームの端に追加され、まず最上位ビット（x31, x30, …,x1, x0）が伝送される。
【００２０】
１つの実施形態では、本開示は、生成多項式に従って入来データのさまざまな部分に対して行列演算を用いて、部分的な、中間の、および最終的なＣＲＣを生成する。巡回冗長コード（ＣＲＣ）のいくつかの有用なプロパティを本実施形態で用いる。たとえば以下のとおりである。
【００２１】
プロパティ１：ＣＲＣ（Ａ  ｘｏｒ  Ｂ）＝ＣＲＣ（Ａ）  ｘｏｒ  ＣＲＣ（Ｂ）
プロパティ２：ＣＲＣ（｛Ｘ，０P｝）＝ＨP・ＣＲＣ（Ｘ）
０PはＰビットのゼロであり、｛Ｘ，０P｝はＰ個のゼロが追加されたＸであり、ＨPは生成多項式から導出される行列である。
プロパティ３：ＣＲＣ（｛０P，Ｙ｝）＝ＣＲＣ（Ｙ）
【００２２】
一例として、入来データワードＤは１０２４ビットを備えてもよい。Ｄについて巡回冗長コード（ＣＲＣ）を算出するために、データをＤ＝［ビット１０２３…ビット０］＝Ｅ［Ｄ１｜０512］ｘｏｒ  Ｆ［０512｜Ｄ２］として記述することができ、式中、Ｄ１＝［ビット１０２３…ビット５１２］、かつＤ２＝［ビット５１１…ビット０］である。このように、プロパティ１に従うと、ＣＲＣ（Ｄ）＝ＣＲＣ（Ｅ）  ｘｏｒ  ＣＲＣ（Ｆ）である。プロパティ３に従って単にＤ２についてＣＲＣを算出することによって、ＣＲＣ（Ｆ）を算出することができる。換言すると、Ｆのすべての１０２４ビットに対してよりもむしろ、Ｄ２の５１２ビットのみについてＣＲＣ（Ｆ）算出を行なうことができる。プロパティ２に従うと、ＣＲＣ（Ｅ）を以下のように算出することができる。まず、Ｄ１についてＣＲＣを算出する。第２に、生成関数ＨPから導出される行列でＣＲＣ（Ｄ１）を乗算し、結果、ＣＲＣ（Ｅ）が得られる。ＣＲＣ（Ｅ）およびＣＲＣ（Ｆ）が一旦わかると、ＣＲＣ（Ｄ）は、ＣＲＣ（Ｄ）＝ＣＲＣ（Ｅ）  ｘｏｒ  ＣＲＣ（Ｆ）として計算される。
【００２３】
これらのさまざまなプロパティおよび変換の有用性をさまざまな構成要素および特徴と関連して以下に論じる。特に、本開示の実施形態は、並列ＣＲＣユニットおよび並列経路を用いるＣＲＣ回路を特徴とする。各々の経路はＣＲＣユニットを含み、これを用いて、各々は、入来データワードの一部を処理して２つのＣＲＣ出力を生成し、次にこれを他のユニットのうち１つ以上からのＣＲＣ出力と組合せて、データワード内で終了する１つ以上のパケットの最終ＣＲＣ値を生じてもよい。
【００２４】
図１は、本開示の実施形態に従う装置またはＣＲＣ回路１００のブロック図を示す。図１に示されるように、ＣＲＣ回路１００はＮ個の経路に分割され、各々の経路は、５１２ビット幅の計算ブロック（概して、ｎビット幅の計算ブロック）を含み、たとえば各々は、それぞれ５１２ビットＣＲＣユニット１１０Ａ，１１０Ｂ…１１０Ｎを有する。さまざまな実施形態では、各々の５１２ビットＣＲＣユニットは４本のレーンを備え、各々のレーンは１２８ビットＣＲＣ計算モジュールを有し、これは図２および図３により詳細にそれぞれ示される。４本の１２８ビットレーンは例示の目的のためにのみ示されることに留意すべきである。このように、本開示は、任意の数のレーンまたは任意の特定のレーンのサイズに限定されるものではない。さらに、１つの実施形態では、たとえば、幅広い（５４９ビットまでの）排他的ＯＲゲートに基づいて、よりモノリシックなブロックである異なる種類のＣＲＣユニットアーキテクチャを用いてもよい。このように、ＣＲＣユニット１１０Ａ−１１０Ｎのうち任意の１つ以上のためのそのような代替的なアーキテクチャを、その基本的な機能を変更せずに、ＣＲＣ回路１００中に組入れてもよい。
【００２５】
１つの実施形態では、ＣＲＣ回路１００は、Ｎ個の５１２ビット経路Ａ，ＢおよびＮを備える（図１には３本の経路のみが示される）。したがって、入力ポート１０１への入来データは、１５３６ビット幅のデータバスを備え得る。スプリッタ１０５は、データバス上の信号を、それぞれの５１２ビット経路Ａ，Ｂ，およびＮに分割する。１つの実施形態では、シリアルデータは、ＣＲＣ回路１００に入る前に並列データワードに変換される。このように、１つの実施形態では、「より早い」ビットを、回路のいちばん上から「後の」ビットが処理される回路のいちばん下に向けてバス上に置いてもよい。
【００２６】
本開示の実施形態に従うと、データワードの幅はＮビットである。最小サイズのイーサネット（登録商標）パケットは６４バイト（すなわち５１２ビット）であるので、同じワード内で終了する（Ｎ／５１２）個までのパケットが存在する。このように、各々のワード毎に（Ｎ／５１２）個までのＣＲＣ出力が存在する。応じて、図１では、たとえば出力ポート１８０Ａ、１８０Ｂ、および１８０Ｎ上に潜在的に３つのＣＲＣ出力が存在する。というのも、同じ１５３６ビットデータワード内で３つまでの５１２ビットイーサネット（登録商標）フレームが終了し得るからである。たとえば、ｎ番目のＣＲＣ出力１８０Ｎは、同じＮビット入力データワード（ｎ＝Ｎ／５１２）上のｎ番目の完了パケットについてのものである。
【００２７】
各々の５１２ビットＣＲＣユニット１１０Ａ−１１０Ｎは、２つの巡回冗長コードを生成する。一方は、ユニット／経路内で終了するパケット（たとえば、ＣＲＣ出力ポート１１３Ａ−１１３Ｎ上のＣＲＣ＿Ａ）であり、他方は、ユニット／経路内で開始するまたは進行中のパケット（たとえば、ＣＲＣ出力ポート１１２Ａ−１１２Ｎ上のＣＲＣ＿Ｂ）である。レジスタ１６０は、複数のワードに跨るパケットの積算ＣＲＣ値（CRC_accum_new１７０）を記憶する。
【００２８】
並列ＣＲＣ計算では、部分的ＣＲＣを計算するためのデータにゼロが追加されてもよい。これらの追加されるゼロは「空ビット」と呼ばれる。このように、さまざまな実施形態は、パケットの終わりにある付加的に積算されるゼロを（たとえば、図２に示されるようなＣＲＣ回路を用いて）１２８ビット境界に、または（たとえば、図３に示されるようなＣＲＣ回路を用いて）５１２ビット境界にも、訂正する。これらの方策の各々は、終了調節が必要ない場合、たとえば、元のパケットが冒頭でゼロ詰めされれば、これを１２８ビットまたは５１２ビット境界に末揃えさせるようにも適用可能である。１つの実施形態では、ＣＲＣユニット１１０Ａ−１１０Ｎの各々における処理に従って空ビットおよび／またはゼロ詰めに対処するさらなる演算を実現することもできる。たとえば、「Ｆｗｄ」ブロック、フォワーディングユニット１２０Ｂ、１２０Ｎ、および１２０Ｘは、異なる数の空ビットだけＣＲＣ値をフォワードする。レーンアンロールユニット１３０Ａ−１３０Ｎおよびバイトアンロールユニット１５０Ａ−１５０Ｎは、異なる数の空バイトだけＣＲＣをアンロールする（戻す）。「フォワーディング」および「アンロール」機能は、図２および図３の例示的なＣＲＣユニット２００および３００の検討に従って以下により詳細に記載される。
【００２９】
１つの実施形態では、Ｎビットデータバス上の入来データ（たとえば、本明細書中ではパケットとも称されることがあるイーサネット（登録商標）フレーム）は、（Ｎ／Ｌ）個のビットパケット開始（ＳｏＰ）およびパケット終了（ＥｏＰ）信号を含む。１つの実施形態では、ＳｏＰおよびＥｏＰ信号のサイズはＮ／Ｌビットである。ＣＲＣ回路１００全体内でＮ／Ｌ本のレーンが存在する。応じて、１つの実施形態では、ＳｏＰ信号またはＥｏＰ信号は、パケット（またはフレーム、ＰＤＵなど）が対応のレーンにおいて開始するまたは終了するかどうか、およびレーン内のどこでフレームが終了するかを示す。ＳｏＰ信号またはＥｏＰ信号がレーンについて検出されれば、レーンに対応するＳｏＰまたはＥｏＰフラグが設定される。たとえば、単一のビットは一「１」に設定されて、特定のレーンについてＳｏＰ信号が検出されたことを示し、かつＳｏＰ信号がレーン中のデータ上で検出されなければ、ＳｏＰフラグはゼロ「０」のままであり得る。１つの実施形態では、パケットの始めがレーンの始めに整列されなければならないと仮定する。１つの実施形態では、パケットの終わりはレーンの終わりに整列されないことがある。しかしながら、１つの実施形態では、パケットの終わりがバイトの終わりに整列されると仮定される。このように、レーンはＬ／８バイトを含有し、パケットは、終了レーン内の任意のバイトで終了し得る。１つの実施形態では、Ｍｔｙ（「空」）値が算出されて、レーン内の空バイトの数を示す。１つの実施形態では、Ｍｔｙ値は、特定のバイト内のＥｏＰ信号の検出と、ＥｏＰ信号が検出されるバイトの位置よりも下のレーン内の付加的なバイトの数の判定とに基づいて算出される。Ｍｔｙ値を記憶するのに必要なビットの数は、size_Mty＝(N/512)*Log2(L/8)ビットによって与えられる。最小サイズのイーサネット（登録商標）パケットは５１２ビットであるので、（ｎ＝Ｎ／５１２）個までのパケットが同じワード内に含有され得る。このように、ｎ番目のＭｔｙはｎ番目の完了パケットについてのものである。
【００３０】
図２は、Ｌ＝１２８である（すなわち、レーンの幅が１２８ビットである）５１２ビットＣＲＣユニット２００の例示的な実施形態を示す。たとえば、ＣＲＣユニット２００は、図１のＣＲＣユニット１１０Ａ−１１０Ｎの各々として実現されてもよい。図２に示されるように、ＣＲＣユニット２００は４つのＣＲＣモジュール２１０Ａ−２１０Ｄを含む。モジュールの各々は、各々のＬビットレーンＡ−Ｄ上のデータ上のＣＲＣ値を計算する。各々のＬビットレーン上のＣＲＣ値は、本明細書中で部分的ＣＲＣ値と称される。フォワーディングユニット２２０Ｂ、２２０Ｃ、および２２０Ｄは、「ｉ」本のレーンだけ部分的ＣＲＣ値をフォワーディングするための「Ｆｘｉ」モジュールを含む。たとえば、図２に示されるように、フォワーディングユニット２２０ＣはＦｘ２モジュールを含み、これは、レーンＣの部分的ＣＲＣ値を２レーンだけ、すなわちレーンＡにフォワーディングする。図２に示されるように、フォワーディングされた部分的ＣＲＣ値の各々は、宛先レーンの部分的ＣＲＣ値に組合される。たとえば、図２にいくつかの結合器２９０が示されるが、その各々は、たとえば、これが入力として取る部分的ＣＲＣ値に対して排他的ｏｒ演算を行なうためのものである。
【００３１】
部分的ＣＲＣ値をフォワーディングすることに加えて、フォワーディングユニット２２０Ｂ−２２０Ｄの各々は、部分的ＣＲＣ値を特定の宛先レーンにフォワーディングする／送る前に、宛先レーンに対応する多数のビットに基づいて部分的ＣＲＣ値を「フォワーディングする」。ビットフォワーディングの動作は、他のレーンならびに／または、たとえばマルチプレクサ２３０および２４０などの選択モジュールに、結果的に得られるＣＲＣ値を「フォワーディングする」（たとえば、送出するおよび／または出力する）こととは対照的なＣＲＣ値に対するデータ操作／演算である。たとえば、レーンＤ中のフォワーディングユニット２２０ＤのＦｘ２モジュールは、２５６ビット（２つのレーンに対応するビットの数）に基づいて部分的ＣＲＣ値をフォワーディングし、結果的に得られる部分的ＣＲＣ値をレーンＢに送出し、これは、排他的ｏｒ演算を介して結合器２９０でレーンＢの部分的ＣＲＣ値に組合される。１つの実施形態では、フォワーディングすることは、生成関数および宛先レーンへの距離（ビットの数）に基づく入力ＣＲＣ値の行列変換を備える。特定のレーンの最後の結合器に従って出力されるＣＲＣ値は、マルチプレクサ２３０への入力の１つを備える。フォワーディングユニット２２０Ｂ−２２０Ｄのうち各々の中のフォワーディングモジュールの各々は、同様の態様で動作する。さまざまなレーンからの部分的ＣＲＣ値の組合せを備えるＣＲＣ値は、マルチプレクサ２３０および２４０へのそれぞれの入力を備える。
【００３２】
「EoP_index」信号２７０は、パケットが終了しているレーン（たとえば、対応のＥｏＰビット／フラグが、パケットがそのレーンで終了していることを示す一「１」に設定されているレーン）の指標を特定する。EoP_index信号２７０は、マルチプレクサ２３０への入力のうちどれが、ＣＲＣ＿Ａ（ＣＲＣモジュール２００によって処理される５１２ビット内で終了するパケットのＣＲＣ値）として出力ポート２６０上に出力されるかを制御する。換言すると、マルチプレクサ２３０は、EoP_indexの値に基づいて、ＣＲＣ＿Ａとしてどの入力ＣＲＣ値を出力すべきかを選択する。同様に、「SoP_index」信号２８０は、パケットが開始しているレーンの指標を特定する（すなわち、レーンについての対応のＳｏＰビット／フラグが一「１」に設定される）。EoP_indexおよびSoP_indexのデフォルト値は、それぞれ０および（５１２／Ｌ−１）である。SoP_index信号２８０は、マルチプレクサ２４０への入力ＣＲＣ値のうちどれがＣＲＣ＿Ｂ（ＣＲＣユニット２００内で開始するまたは進行中のパケットのＣＲＣ値）として出力ポート２５０上に出力されるかを制御する。換言すると、マルチプレクサ２４０は、SoP_indexの値に基づいて、ＣＲＣ＿Ｂとしてどの入力ＣＲＣ値を出力すべきかを選択する。
【００３３】
図１の検討に戻って、ＣＲＣ回路１００のさらなる構成要素および特徴をここで説明する。以上で言及したように、パケットはレーンの始まりで始まると仮定される。しかしながら、１つの実施形態では、パケットは、経路内の任意のレーンで、および（バイトの終わりで終了と仮定される）レーン内の任意の位置で、終了してもよい。応じて、１つの実施形態では、バイトアンロールユニット１５０Ａ−１５０ＮがＣＲＣ回路１００に含まれて、レーンの終わりで終了しないパケットに対処する。以上で言及したように、１つの実施形態では、Ｍｔｙ（「空」）値が算出されて、レーン内の空バイトの数を示す。Ｍｔｙ値は、特定のバイト内のＥｏＰ信号の検出と、ＥｏＰ信号が検出されるバイトの位置よりも下のレーン内の付加的なバイトの数の判定とに基づいて算出されてもよい。Ｍｔｙ値を記憶するのに必要なビットの数は、size_Mty＝(N/512)*Log2(L/8)ビットによって与えられる。最小サイズのイーサネット（登録商標）パケットは５１２ビットであるので、（ｎ＝Ｎ／５１２）個までのパケットが同じワード内に含有され得る。このように、ｎ番目のＭｔｙは、ｎ番目の完了パケットについてのものである。図１に示されるように、Mty_1st、Mty_2nd…Mty_(n/512)thはそれぞれ、バイトアンロールユニット１５０Ａ−１５０Ｎへの入力である。一例として、Mty_1stは値７を有し得る。これは、パケットがレーンのバイト９で終了し、レーンの最後の７バイトがゼロ／空バイトとして扱われるべきであることを示す。
【００３４】
１つの実施形態では、Ｍｔｙ値に応じてＣＲＣを「アンロールする（戻す）」または「解く」ために、生成関数に基づくおよびＭｔｙの値（ビットの数）に基づく入力ＣＲＣ値の行列変換が行なわれる。別の実施形態では、バイトアンロールユニット１５０Ａ−１５０Ｎのうち任意の１つ以上においてパイプライン化アンロール演算を実現してもよい。１つの実施形態では、パイプラインは、ｉ個の段を備え、ｉ番目の段が２iバイトをアンロールするためのものである。このように、１つの実施形態では、１６バイトまでをアンロールするのに４つのパイプライン段が必要である。別の実施形態では、反復関数が行なわれる。たとえば、１つの実施形態では、ＣＲＣ値の最下位ビットが除去される。ビットが一「１」であれば、結果的に生じるＣＲＣ値に除数（すなわち、生成多項式／生成関数）が加算される。しかしながら、除去されるビットがゼロ「０」であれば、結果的に生じるＣＲＣ値にゼロが加算される。この演算は、Ｍｔｙ値によって示されるように、ビットの数について反復される。たとえば、Mty_1stの値が２であれば（２バイトまたは１６ビット）、アンロール演算を１６回行なって最終ＣＲＣ値を計算する。また別の実施形態では、異なるアンロールアルゴリズムを利用してもよい。換言すると、本開示は、任意の１つの特定のアンロールアルゴリズムに限定されるものではない。
【００３５】
ＣＲＣ回路１００のＣＲＣユニット１１０Ａ−１１０Ｎの各々が図２のユニット２００などのＣＲＣユニットを備える場合、レーンアンロールユニット１３０Ａ−１３０Ｎを回路１００から省略してもよい。しかしながら、１つの実施形態では、これらのレーンアンロールユニットは、ＣＲＣユニットが５１２ビット経路の終わりへのパケット整列を維持する回路１００中に含まれる。経路の終わりに整列する例示的なＣＲＣユニットを図３に示す。
【００３６】
図３は、１つの実施形態に従うＣＲＣユニット３００を示す。たとえば、図１のＣＲＣユニット１１０Ａ−１１０Ｎのうち任意の１つ以上がＣＲＣユニット３００を備えてもよい。図３に示されるように、ＣＲＣユニット３００は、図２のＣＲＣユニット２００との多数の類似点を共有する。たとえば、ＣＲＣユニット３００は、５１２ビット入力ポート／バスと、５１２ビットを４本の１２８ビットレーンＡ−Ｄに分割するスプリッタ３０５とを有する。レーンＡ−Ｄの各々は、それぞれＣＲＣモジュール３１０Ａ−３１０Ｄを含む。しかしながら、図２に対して、図３のフォワーディングユニット３２０Ｂ−３２０Ｄは、ＣＲＣ値を出力する／フォワーディングする前に単一のビットフォワーディング動作のみを行なう。たとえば、フォワーディングユニット３２０Ｄは、レーンＡの宛先レーンを仮定する３８４ビット（３レーンフォワーディング）に基づいてＣＲＣ値中のビットを経路の最後のレーンにフォワーディングしてもよい。パケットは実際にレーンＡ上で終了し得るが、そうである必要がないことに留意されたい。たとえば、パケットは依然としてレーンＢ上で終了してもよい。同様に、フォワーディングユニット３２０Ｃは、経路の最後のレーンであるレーンＡの宛先も仮定して、２５６ビットに基づいて、ＣＲＣユニット３１０Ｃによって出力される部分的ＣＲＣのビットを「フォワーディング」してもよい。この態様のビットフォワーディングは本質的に、パケットをＣＲＣユニット３００の経路／終わりに整列させる。しかしながら、この仮定は誤っているかもしれないので、図１のＣＲＣ回路１００のレーンアンロールユニット１３０Ａ−１３０Ｎで経路の終わりに対するパケットの整列を訂正してもよい。ＣＲＣユニット３００の付加的な構成要素は、図２のＣＲＣユニット２００の構成要素と同様の態様で機能する。たとえば、選択モジュール／マルチプレクサ３３０は、パケット終了EoP_index値３７０に基づいて出力ポート３６０上にＣＲＣ＿Ａとして出力すべき、入力部分的ＣＲＣ値を選択する。同様に、選択モジュール／マルチプレクサ３４０は、パケット開始SoP_index値３８０に基づいて出力ポート３５０上にＣＲＣ＿Ｂとして出力すべき入力ＣＲＣ値を選択する。さらに、結合器３９０の各々は図２の結合器２９０と同じ機能を有する。
【００３７】
図１のＣＲＣ回路１００に戻って、５１２ビット経路の終わりに整列するＣＲＣユニットを用いる場合には、レーンアンロールユニット１３０Ａ−１３０Ｎを含んでもよい。たとえば、図１のＣＲＣユニット１１０Ｂが図３のＣＲＣユニット３００を備えると仮定する。パケットがＣＲＣユニット３００のレーンＣ（第２のレーン）上で終了すれば、マルチプレクサ３３０は、出力ＣＲＣ＿Ａとして（レーンＣからの）入力２を選択する。しかしながら、フォワーディングユニット３２０Ｄおよび３２０Ｃは、本質的に２つ（２）多過ぎるレーンだけ、それらのそれぞれのＣＲＣ値を「過剰フォワーディング」したであろう。このように、レーンアンロールユニット１３０Ｂは、入力としてそれが受ける中間ＣＲＣ値を２つのレーン（２５６ビット）だけアンロールしてもよい。レーンアンロールユニットは、先に記載したバイトアンロールユニット１５０Ａ−１５０Ｎと同じまたは同様の設計に基づいていてもよい。たとえば、アンロール演算は、生成関数および空レーンの数に対応する空ビットの数に基づく入力ＣＲＣ値のマトリックス操作を備えてもよい。１つの実施形態では、レーンアンロールユニットは、対応のレーンのEoP_index値に基づいてアンロールすべきレーンの数を決める。たとえば、以上の同じ例に従うと、パケットがレーンＢ上で終了すれば、EoP_index＝２である。このように、レーンアンロールユニットは、２本の（２）レーン（２５６ビット）に対応するビットの数に基づいてアンロールする。パケットは依然としてレーンＢの真ん中内で終了したかもしれないので、ＣＲＣ値は、依然としてバイトアンロールユニット１５０Ａ−１５０Ｎのうち１つの中の終了レーン内の空バイトの数だけアンロールされるべきである。
【００３８】
ＣＲＣ回路１００のさらなる機能、特にフォワーディングユニット１２０Ｂ，１２０Ｎおよび選択ユニット１４０の機能を図４の例を用いて示し得る。特に、図４は、本開示の実施形態に従うＣＲＣモジュールによって処理され得る５１２ビット入力のためのさまざまなシナリオのタイミング図４００を示す。たとえば、５つの例Ａ−Ｅの各々は、任意の１クロックサイクルで受信／処理され得る５１２ビットを表わす。これらの例では、ビット５１１は「より早い」ビットであり、ビット０がデータストリーム中の「後の」ビットであることに留意すべきである。たとえば、図１の回路１００などのＣＲＣ回路は、ただ１つの構成要素であるトランシーバを備えてもよい。１つの実施形態では、トランシーバは、ＣＲＣ回路およびトランシーバの他の構成要素によるより高速の処理のために並列データに変換されるシリアルデータを伝送するおよび／または受信する。このように、データがシリアルに受信されると、これをデータワードの順次の並列ビット位置に置いてもよい（これは次に、上述のようにいくつかの５１２ビットＣＲＣユニットによる処理のために、ＣＲＣ回路によっていくつかの経路に分割されてもよい）。例Ａでは、経路中で（すなわち、５１２ビットＣＲＣユニットによって処理される５１２ビット内で）受信されるＳｏＰまたはＥｏＰ信号が存在しない。これは２つの理由によることがある。すなわち、経路上にパケット／データが存在しないか、またはパケットが経路を通って進行中である場合である（たとえば、パケットが５１２ビットよりも大きい場合、パケットは他の５１２ビットＣＲＣユニットによって処理される異なる経路上で始まりかつ終了することがある）。いずれの場合も、経路内で終了するパケットが存在しないので、Valid_Aはゼロ「０」に設定されて、経路内で終了するパケットのＣＲＣ＿Ａ出力が有効な出力ではないことを示す。一方で、Valid_Bは一「１」に設定されて、経路内で開始するまたは進行中のパケットについてのＣＲＣ＿Ｂ出力が有効な出力であることを示す。
【００３９】
例Ｂでは、５１２ビット内にＳｏＰ信号が見出されるが、依然としてＥｏＰ信号は見出されない。このように、経路内で始まるパケットが存在するが、パケットは経路内で終了しない。このように、Valid_Aはゼロ「０」に設定され、Valid_Bは一「１」に設定される。例Ｃでは、５１２ビット内にＥｏＰ信号が見出されるが、ＳｏＰ信号は存在しない。応じて、Valid_Aが一「１」に設定されて、経路内で終了するパケットについてのＣＲＣ＿Ａ出力が有効であることを示す（というのも、パケットは、ＥｏＰ信号が示すように経路内で終了するからである）。しかしながら、Valid_Bはゼロ「０」に設定されて、経路内で開始するまたは進行中のパケットについてＣＲＣ＿Ｂ出力が無効な出力であることを示す。
【００４０】
例Ｄでは、ＳｏＰおよびＥｏＰ信号の両方が５１２ビット内に見出される。ＳｏＰおよびＥｏＰ信号の両者ともが５１２ビット内に見出されるが、Valid_Aのみが一「１」に設定される。これは、ＥｏＰがＳｏＰの後に見出されて、ＥｏＰがＳｏＰ信号で始まる同じパケット中で終了していることを明確に示すからである。このため、出力ＣＲＣ＿Ｂは無効であり、したがってパケットは経路内で終了したので、いずれの他のＣＲＣユニットからのいずれの他のＣＲＣ値とも組合せてはならない。例Ｅでは、ここでも、ＳｏＰおよびＥｏＰ信号が両者とも５１２ビット中に見出される。しかしながら、ＥｏＰ信号はＳｏＰ信号よりも早く、このことは、ＥｏＰ信号が別のＣＲＣユニット／経路から継続しているが現在の経路内で終了するパケットについてのものである一方で、ＳｏＰ信号が新しいパケットの開始についてのものであることを示す。このように、Valid_Aは一「１」に設定されて、経路内で終了するパケットのＣＲＣ値であるＣＲＣ＿Ａが有効であることを示す。同様に、Valid_Bは一「１」に設定されて、ユニットを通って開始するまたは連続的であるパケットのＣＲＣ値であるＣＲＣ＿Ｂも有効であることを示す。
【００４１】
図４と関連してここで図１を参照すると、回路１００のデータバスは、３つの５１２ビット経路に分割される１５３６ビットワードを備えてもよい。一例として、最も早い経路（経路Ｎ）は、図４の例Ｂに示されるように、５１２ビットを備え、真ん中の経路（経路Ｂ）は、例Ｅの５１２ビットを備え、かつ最後の経路（経路Ａ）は、例Ｃの５１２ビットを備える。このように、経路ＮのＣＲＣユニット１１０Ｎは、データ経路上のビットを処理して、ＣＲＣ＿ＡおよびＣＲＣ＿Ｂを生成する。さらに、Valid_Aはゼロ「０」に設定され、Valid_Bは「１」に設定される。応じて、ＣＲＣユニット１１０Ｎによって出力されるＣＲＣ＿Ａを用いるべきではない。選択ユニット１４０の目的は、出力ポート１８０Ａ−１８０Ｎ上の１つ以上の最終ＣＲＣ値として出力すべき有効なＣＲＣ値を選ぶことである。このように、経路ＮについてのValid_A信号／フラグがゼロ「０」、すなわち無効であることに基づいて、選択ユニット１４０は、最終ＣＲＣ値として出力すべきＣＲＣユニットの１１０ＮのＣＲＣ＿Ａとして出力されるＣＲＣ値を無視してもよい、または選択しないようにしてもよい。フォワーディングユニット１２０Ｂおよび１２０Ｎの目的は、パケットが終了する別の経路／ＣＲＣユニットからの中間のＣＲＣ値と組合せるべき、現在の経路内で終了しないパケットの中間ＣＲＣ値をフォワーディングすることである。このように、Valid_Bが「１」に設定されている、すなわち有効であるので、フォワーディングユニット１２０Ｎは、他のＣＲＣユニットの出力と組合せるべきＣＲＣ＿Ｂを出力／送出してもよい。
【００４２】
フォワーディングユニット１２０Ｎならびにフォワーディングユニット１２０Ｂおよび１２０Ｘは、図２および図３に示されるフォワーディングユニットと同様の態様で機能することに留意すべきである。このように、たとえば、フォワーディングユニット１２０Ｎが、１レーンだけ（たとえば、レーンＢに）ＣＲＣ＿Ｂをフォワーディングしている場合、これは、５１２ビット（宛先レーンへのビットでの距離）に基づいてフォワーディングし、２レーン（たとえば、レーンＡに）フォワーディングする場合は、これは１０２４ビットに基づいてフォワーディングする。
【００４３】
経路Ｎ上で処理が発生するのと同時に、経路Ｂ中のＣＲＣユニット１１０Ｂは、図４の例Ｅ中に示されるように５１２ビットを処理する。ＣＲＣユニット１１０Ｂは、中間のＣＲＣ値ＣＲＣ＿ＡおよびＣＲＣ＿Ｂとしての出力のためのＣＲＣ値を生成する。さらに、ＳｏＰ信号の前にＥｏＰ信号が見出される。そのため、Valid_AおよびValid_Bは両者とも一「１」に設定される。注目すべきことに、フォワーディングユニット１２０Ｎは、経路Ｎから経路ＢにＣＲＣ＿Ｂを出力する／送る（上述のように、ＣＲＣユニット１１０Ｎ／経路ＮについてのValid_B＝１）。このように、ＣＲＣユニット１１０ＮからのＣＲＣ＿Ｂは、たとえば排他的ｏｒ演算を実行する結合器１９０において、ＣＲＣユニット１１０ＢからのＣＲＣ＿Ａと組合される。組合されたＣＲＣ値は次に、アンロールユニット１３０Ｂおよび選択ユニット１４０によって受信される。さらに、選択ユニット１４０は、最終ＣＲＣ値として出力すべき、経路Ｂ上の組合されたＣＲＣ値を選ぶ。たとえば、選択ユニット１４０は、経路ＢについてのValid_A信号を調べてもよく、これは「１」に設定されているので、パケットが現在のＣＲＣユニット１１０Ｂ内でまたは経路Ｂに沿って終了したことを示す。
【００４４】
さらに、新しいパケットが経路Ｂ上のデータ内で始まりもする。Valid_Bも一「１」に設定されるため、フォワーディングユニット１２０Ｂは、図１に示される接続に沿ってＣＲＣ＿Ｂをフォワーディングする。
【００４５】
ＣＲＣユニット１１０Ａにおいて、図４の例Ｃの５１２ビットが処理され、ＣＲＣ＿ＡおよびＣＲＣ＿Ｂが出力される。ＥｏＰ信号は経路Ａ上のデータ内に見出される。このように、Valid_A＝１である一方で、Valid_B＝０である。ＣＲＣユニット１１０ＡのＣＲＣ＿Ａの値は、たとえば排他的ｏｒ演算を実行する結合器１９０においてＣＲＣユニット１１０ＢからのＣＲＣ＿Ｂ値と組合される。組合されたＣＲＣ値は次に、アンロールユニット１３０Ａおよび選択ユニット１４０によって受信される。Valid_A＝１であるので、選択ユニット１４０は、経路Ａに沿う組合されたＣＲＣ値が最終的なＣＲＣ値として出力されるのを許容する。注目すべきことに、この例では、単一の１５３６ビットワードについて、選択ユニット１４０によって２つのＣＲＣ値が最終的なＣＲＣ値として並列に出力される。
【００４６】
以上の例は本実施形態のいくつかの特徴および利点を示すが、いくつかの事例ではパケットは複数のワードに跨ってもよいことにも留意すべきである。この状況も説明するため、ＣＲＣ回路中の最後の経路（たとえば、図１のＣＲＣ回路１００中の経路Ａ）の出力を、後のサイクルで処理すべき次のデータワードのシードＣＲＣ値として用いる。図１に示されるように、値CRC_accum_new１７０は、CRC_accumレジスタ１６０への入力を備える。このように、たとえば、ＣＲＣ回路１００の経路Ｂ中で開始し次のデータワード内で終了するパケットについては、フォワーディングユニット１２０Ｂは、ＣＲＣユニット１１０ＡのＣＲＣ＿ＡおよびＣＲＣ＿Ｂの両者と組合せるべきＣＲＣユニット１１０ＢからのＣＲＣ＿Ｂ値をフォワーディングする。上の経路ＢからのＣＲＣ＿Ｂは、ユニット１１０ＡのＣＲＣ＿Ａと組合される。しかしながら、パケットは経路Ａ上で終了しないので、ＣＲＣユニット１１０ＡのＣＲＣ＿Ａは無効であり（Valid_A＝０）、選択ユニット１４０は、単にこの組合されたＣＲＣ値を無視する。一方で、ユニット１１０ＢからのＣＲＣ＿Ｂは、（たとえば、排他的ｏｒを介して）ユニット１１０ＡからのＣＲＣ＿Ｂと組合され、この組合されたＣＲＣ値は有効であり、次のデータワードのためのシードＣＲＣ値、すなわちCRC_accum_new１７０である。
【００４７】
特定のＣＲＣユニット／経路についてValid_B＝１である場合、経路のフォワーディングユニットは、１つよりも多くの他の経路にＣＲＣ＿Ｂ値をフォワーディングしてもよいことにも留意すべきである。たとえば、フォワーディングユニット１２０Ｎは、経路ＢおよびＡの両方にＣＲＣユニット１１０ＮのＣＲＣ＿Ｂ値をフォワーディングしてもよい。しかしながら、経路Ｎ上で開始するまたは進行中のパケットは、経路Ａ上ではなく、経路Ｂ上で終了してもよい。その結果、経路ＮのＣＲＣ＿Ｂ値は、経路Ｂのユニット１１０Ｂの出力ＣＲＣ＿Ａ値とのみ組合されるべきであり、経路Ａ上では無視されるべきである。この目的を達成するため、１つの実施形態では、ＣＲＣ回路１００は連続した検査回路をさらに含んでもよい。
【００４８】
図５は、隣接する経路／ＣＲＣユニット間でパケットが連続しているか否かを検査するための検査回路５００の例を示す。図５に示されるように、経路ＡおよびＢ中にそれぞれ２つの隣接するＣＲＣユニット５１０Ａおよび５１０Ｂが存在する。検査ユニット５３０は、フォワーディングユニット５２０Ｂの出力と宛先レーンＡとの間に位置する。１つの実施形態では、検査ユニットはマルチプレクサを備える。１つの実施形態では、検査ユニット５３０への入力のうち１つはフォワーディングユニット５２０Ｂの出力を備え、他方の入力は接地（たとえば、ゼロ「０」）を備える。さらに、１つの実施形態では、検査ユニット５３０は、「パケット連続」制御信号Pkt_cont(j-1, i+1)によって制御される。
【００４９】
進められたCRC_accumまたはＣＲＣ＿Ｂは、パケットがユニットｉよりも上で終了すれば、ユニットｉのＣＲＣ＿Ａとは組合されないことがある。たとえば、ユニットｊからの進められたＣＲＣ＿Ｂは、パケットがユニット（ｊ−１）とユニット（ｉ＋１）との間で連続していれば、ユニットｉのＣＲＣ＿Ａと組合される。さらに、進められたCRC_accumは、パケットがいちばん上のユニットとユニット（ｉ＋１）との間で連続していれば、ユニットｉのＣＲＣ＿Ａと組合される。同様に、進められたCRC_accumまたはＣＲＣ＿Ｂは、パケットが現在のデータワード内で終了すれば、新しいCRC_accumを生成するのには用いられないことがある。たとえば、ユニットｊからの進められたＣＲＣ＿Ｂは、パケットがユニット（ｊ−１）とユニット０との間で連続していれば、積算には用いられない。パケットがいちばん上のユニットとユニット０との間で連続していれば、（最後のデータワードからの）進められたCRC_accumも積算に用いられる。１つの実施形態では、ユニット同士の間のＳｏＰおよびＥｏＰビットを見ることによって、パケットがユニット同士の間で連続しているか否かが判断される。応じて、図５に示されるように、検査ユニット５３０は、Pkt_cont(j-1, i+1)がＳｏＰおよびＥｏＰ信号に基づいて生成される信号であり、かつパケットがユニット（ｊ−１）と（ｉ＋１）との間で（たとえば、それぞれユニット５１０Ａとユニット５１０Ｂとの間で）連続しているか否かを示す場合に、進められたＣＲＣ（ＣＲＣ＿Ｂ）を転送すべきかどうかを判断する。同様の態様で異なる連続性検査を行なうように、多数の同様の検査ユニットが異なる経路の間に位置してもよいことに留意すべきである。
【００５０】
進められたＣＲＣがユニットに転送されるべきか否かを決めるとともに、１つの実施形態では、ユニットが進められるＣＲＣを受付けることを望むか否かを決めることも必要である。パケットが同じユニット内で開始しかつ終了する場合、このユニットのＣＲＣ＿Ａは、いずれの進められるＣＲＣとも組合される必要がない。図６は、経路上でおよび／またはＣＲＣユニットを通して処理されるビットについてのいくつかの例示的なシナリオと、進められたＣＲＣ値を受付けるべきか否かについての判断とを有するタイミング図６００を示す。１つの実施形態では、経路内に存在し得るＳｏＰおよびＥｏＰ信号は、より高いユニットからおよびCRC_accumレジスタから、進められたＣＲＣをユニット／経路が受付けるべきか否かを判断することができる。ここで、「＊」は「無関係」を意味する。なぜなら、これらの場合、ユニットのＣＲＣ＿Ａ出力は無効だからである。１つの実施形態では、「フォワーディング受付」Accept_Fwd信号は単一のビットを備え、これを、図５中の検査ユニット５３０への付加的な制御信号として用いてもよい。別の実施形態では、別個の制御論理が同じ経路内に位置して、Accept_Fwd信号に従うフォワーディングまたは阻止を達成してもよい。
【００５１】
図７は、巡回冗長検査を行なうための方法７００のブロック図を示す。たとえば、上述の実施形態のうち任意の１つ以上に従う回路／装置によって方法７００を行なうことができる。１つの実施形態では、本開示に従うコンピュータ読出可能媒体は、方法７００のステップ、機能、または動作を行なうようにプログラマブル装置がプログラミングされるようにする一連の命令を記憶する。方法はステップ７０２で開始し、ステップ７１０に進む。
【００５２】
ステップ７１０で、方法７００は入力データワードを受信する。たとえば、方法は、１０２４ビット幅以上のデータバスを介して並列データを受信し得る。
【００５３】
ステップ７２０で、方法７００は、入力データワードを複数の経路に分割する。たとえば、方法は、データワードを並列処理のためのいくつかの等しいサイズの経路に分割してもよい。１つの実施形態では、経路の各々は５１２ビット幅である。
【００５４】
ステップ７３０で、方法７００は、経路の各々をたとえば並列に処理する。１つの実施形態では、経路の各々を処理することは、経路内で終了するパケットの巡回冗長検査（ＣＲＣ）値を算出することと、経路内で開始するまたは進行中のパケットの巡回冗長検査値を算出することとを含む。
【００５５】
１つの実施形態では、各経路毎に、処理することは、経路を複数のレーンに分割することを備える。たとえば、レーンの各々は、経路からの等しい数の一連のバイトを備えてもよい。１つの実施形態では、各レーン毎に、方法は部分的ＣＲＣ値を計算し、部分的ＣＲＣ値を「より下の」レーン（概して他のレーン）にフォワーディングする。１つの実施形態では、フォワーディングすることは、現在のレーンから宛先レーンへの距離に応じた部分的ＣＲＣ値の行列変換を備える。１つの実施形態では、各レーン毎に、方法はさらに、たとえば排他的ｏｒ演算を用いて、そのレーンについて算出されるＣＲＣ値を、任意の「より上の」レーン（概して他のレーン）からレーンに進められる任意のＣＲＣ値と組合せる。最終的に、方法は、レーンの１つから組合されたＣＲＣ値を選択して、特定のレーン中で検出され得るパケット信号の終了に基づいて経路内で終了するパケットのＣＲＣ値として出力してもよい。同様に、方法は、デフォルト条件（たとえば、レーンのうちいずれにも、検出されるパケット信号の開始が存在しない場合、パケットが経路の中で始まっておらず、上方のいずれかの経路の中でまたは先のデータワードの中で開始したと仮定される場合）に基づいて、またはレーンのうち１つ内でのパケット信号の開始の検出に基づいて、経路を通して開始するまたは連続的なパケットの組合されたＣＲＣ値を選択して出力してもよい。
【００５６】
ステップ７４０で、方法は、少なくとも第１の経路から少なくとも第２の経路にＣＲＣ値をフォワーディングする。たとえば、パケットは、第１の経路中で開始してもよく、または連続的であってもよい。このように、経路内で開始するまたは連続的であるパケットの部分的ＣＲＣ値は、「より下の」１つ以上の経路（たとえば、パケットが終了する経路）の他の部分的ＣＲＣ値と組合される。１つの実施形態では、フォワーディングすることは、宛先経路に従う部分的ＣＲＣ値の行列変換を備える。たとえば、宛先経路が現在の経路より２つ前の経路であれば、行列変換は、経路当たりのビットの数の２倍に基づいていてもよい。１つの実施形態では、ステップ７４０は、複数の経路から複数の異なる宛先経路にＣＲＣ値をフォワーディングすることを備えることに留意すべきである。さらに、１つの実施形態では、ステップ７４０で、以前のデータワードからの積算ＣＲＣ値も経路のうち１つ以上に進められてもよい。
【００５７】
ステップ７５０で、方法７００は、少なくとも第１の経路内で開始するまたは進行中のパケットの少なくとも第１のＣＲＣ値を、少なくとも第２の経路内で終了するパケットの少なくとも第２のＣＲＣ値と組合せる。１つの実施形態では、組合せることは、２つのＣＲＣ値に対して排他的ｏｒ演算を行なうことを備える。１つの実施形態では、ステップ７５０は、２つの経路の間でパケットが連続的であるか否かをまず検査することを含む。たとえば、同じパケットは、第１の経路上で開始し、第２の経路上で終了してもよい。このように、２つの経路からのＣＲＣ値が組合される。しかしながら、２つの経路にわたって同じパケットの連続性が存在しなければ、ＣＲＣ値を組合せるべきではない。これに代えてまたはこれに加えて、１つの実施形態では、ステップ７５０は、以前のデータワードからの積算ＣＲＣ値を現在のデータワードの１つ以上の経路からの１つ以上のＣＲＣ値と組合せることを備えてもよい。
【００５８】
オプションのステップ７６０で、方法７００は積算ＣＲＣ値を出力する。たとえば、パケットがデータワードの最後の経路中で進行中であるまたは連続的であり、かつパケットが現在のデータワード内で終了していなければ、積算ＣＲＣ値を出力し、かつ（パケットデータが終了し得る）次のデータワードに対する方法７００のその後の反復のために記憶すべきである。
【００５９】
ステップ７７０で、方法７００は少なくとも１つのＣＲＣ値をアンロールする。たとえば、パケットはレーン内の任意の位置で終了してもよい。このように、ＣＲＣ値は、パケットの終わりとレーンの終わりおよび／または経路の終わりとの間の任意の空ビットに対処するように調節される必要があり得る。たとえば、１つの実施形態では、アンロールすることは、生成関数／多項式および多数の空ビットに従うＣＲＣ値の行列変換を備える。１つの実施形態では、方法７００は、２つ以上のＣＲＣ値をアンロールすることを備える。たとえば、２つ以上のパケットは、本実施形態では、同じデータワード内で終了し得る。このように、ステップ７７０で、空ビットのそれぞれの数に基づいて、ＣＲＣ値の各々に対して別個のアンロール動作を行なってもよい。
【００６０】
ステップ７８０で、方法は、１つ以上のＣＲＣ値を選択し、最終的なＣＲＣ値としてＣＲＣ値を出力する。たとえば、１つ、２つ、またはいくつかのパケットは、すべて同じデータワード内で終了してもよい。たとえば、ワードサイズがＮであれば、経路サイズは５１２であり、最小パケットサイズも５１２であり、同じワード内で潜在的に終了するパケットの数はｎ＝Ｎ／５１２である。Ｎ＝１５３６であれば、３つの経路が存在し、ワード内で終了するパケットが潜在的に３つある。しかしながら、経路の各々はＣＲＣ出力を有し得るが、出力のすべてが必ずしも有効な最終ＣＲＣ値であるわけではない。たとえば、パケットは、真ん中の経路ではなく、第１の経路内および最後の経路内で終了することがある。このように、ステップ７８０で、方法７００は、有効なＣＲＣ値のみを選択して、最終的なＣＲＣ値として出力してもよい。
【００６１】
ステップ７８０の後に、方法７００はステップ７９５に進み、ここで方法が終了する。
具体的に特定されていないが、方法７００の１つ以上のステップまたは動作は、特定の適用例にとって要件とされるように、記憶する、表示する、および／または出力するステップを含んでもよいことに留意すべきである。換言すると、方法において論じられる任意のデータ、記録、フィールド、表、および／または中間の結果を、特定の適用例の必要に応じて、別の装置に記憶する、表示する、および／または出力することができる。さらに、判断動作を記載するまたは決定に係る、図７中のステップ、動作、またはブロックは、必ずしも、判断動作の両方の分岐を実施することを要件とするとは限らない。換言すると、判断動作の分岐のうち１つをオプションのステップとみなすことができる。
【００６２】
図８は、本明細書中に記載の機能のうちいくつかまたはすべてを行なうのに用いるのに好適な汎用コンピュータ、計算装置、または計算システム８００の高レベルブロック図を描く。図８に描かれるように、システム８００は、プロセッサ素子８０２（たとえば、ＣＰＵ）、たとえばランダムアクセスメモリ（ＲＡＭ）および／または読出専用メモリ（ＲＯＭ）などのメモリ８０４、冗長巡回検査を行なうためのモジュール８０５、ならびにさまざまな入力／出力装置８０６（たとえば、メモリ装置、テープドライブ、フロッピー（登録商標）ドライブ、ハードディスクドライブもしくはコンパクトディスクドライブ、受信機、送信機、スピーカ、ディスプレイ、音声合成器、出力ポート、およびユーザ入力装置（キーボード、キーパッド、マウスなど）を含むがこれらに限定されない記憶装置）を備える。
【００６３】
たとえば、特定用途向け集積回路（ＡＳＩＣ）、ＦＰＧＡなどのＰＬＤ、汎用コンピュータ、またはマイクロプロセッサなどの任意の他のハードウェア均等物を用いて、ソフトウェアとハードウェアとの組合せで本開示の実施形態を実現することができる。１つの実施形態では、冗長巡回検査を行なうための本モジュールまたはプロセスをメモリ８０４にロードし、プロセッサ８０２によって実行して、以上で論じたような機能を実現することができる。このため、本開示の実施形態の（関連のデータ構造を含む）冗長巡回検査を行なうための本モジュールまたはプロセス８０５を、たとえば、ＲＡＭメモリ、磁気もしくは光学ドライブ、またはディスケットなどの非一時的コンピュータ読出可能記憶媒体上に記憶することができる。
【００６４】
本開示の実施形態は、たとえば、ＰＬＤおよび／またはＦＰＧＡなどの、同調可能ＩＣによって全体がまたは部分的に実現されてもよい。より具体的には、プログラマブル論理装置（ＰＬＤ）は、さまざまな選択された機能を実現するようにユーザがプログラミング可能な汎用装置である。１つの種類のＰＬＤは、典型的には、コンフィギュラブル論理ブロック（ＣＬＢ）のアレイおよび複数の入力／出力ブロック（ＩＯＢ）を含むフィールドプログラマブルゲートアレイ（ＦＰＧＡ）である。ＣＬＢは個別にプログラミング可能であり、二、三の入力信号に対してさまざまな論理機能を行なうように構成可能である。ＩＯＢは、ＣＬＢからＦＰＧＡの外部ピンへ出力信号を駆動する、および／または外部のＦＰＧＡピンから入力信号を受信するように構成可能である。ＦＰＧＡは、さまざまなＣＬＢおよびＩＯＢの間で選択的に信号を経路決めして多数の入力信号のより複雑な機能を生じるようにプログラミング可能なプログラマブル相互接続構造も含む。ＣＬＢ、ＩＯＢ、およびプログラマブル相互接続構造は、（たとえば、汎用コンピュータ８００からの）コンフィギュレーションデータを、ＣＬＢ、ＩＯＢ内のさまざまなスイッチおよびマルチプレクサならびに相互接続構造を制御する関連のメモリセル中にロードすることによってプログラミングされて、コンフィギュレーションデータによって特定される論理および経路決め機能を実現してＦＰＧＡにおいてユーザ設計を実現する。ＦＰＧＡは、他のプログラミング可能なおよびプログラミング不可能なリソースも含んでもよい。そのため、図１−図３と関連して以上で示される回路は、図１−図３の回路のうち任意の１つ以上の任意の１つ以上の構成要素の均等の論理演算を行なう複数のＣＬＢにおいて実現されてもよい。たとえば、１５３６ビット幅のデータバス上で受信されるパケットに対してＣＲＣを行なうための本開示の実施形態は、約１５，０００個のルックアップテーブル（ＬＵＴ）、３，０００個のレジスタ、および４，５００個のスライスを用いてＦＰＧＡ上で実現された。
【００６５】
以上は本開示の１つ以上の局面に従う例示的な実施形態を説明するが、以下の請求項およびその均等物によって定められるその範囲から逸脱することなく、本開示の１つ以上の局面に従う他のおよびさらなる実施形態を考案してもよい。ステップを列挙する請求項はステップの任意の順序を暗示するものではない。商標は、それらのそれぞれの所有者の財産である。
【図１】
2016518750.tif 000006
【図２】
2016518750.tif 000007
【図３】
2016518750.tif 000008
【図４】
2016518750.tif 000009
【図５】
2016518750.tif 000010
【図６】
2016518750.tif 000011
【図７】
2016518750.tif 000012
【図８】
2016518750.tif 000013
【手続補正書】
【提出日】平成27年4月3日(2015.4.3)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データパケットにＣＲＣを追加するための装置であって、
データワードを複数の経路に分割するためのスプリッタと、
複数の巡回冗長検査ユニットとを備え、前記巡回冗長検査ユニットの各々は前記経路のそれぞれ１つを処理するためのものであり、前記巡回冗長検査ユニットの各々は、
前記巡回冗長検査ユニット内で終了するパケットの巡回冗長検査値を出力するための第１の出力ポートと、
前記巡回冗長検査ユニット内で開始するまたは進行中のパケットの巡回冗長検査値を出力するための第２の出力ポートとを備える、装置。
【請求項２】
前記複数の巡回冗長検査ユニットの第１のもの内で開始するまたは進行中のパケットの第１の巡回冗長検査値を前記複数の巡回冗長検査ユニットの第２のもの内で終了するパケットの第２の巡回冗長検査値と組合せるための少なくとも１つの結合器をさらに備える、請求項１に記載の装置。
【請求項３】
前記複数の巡回冗長検査ユニットの前記第１のもの内で開始するまたは進行中の前記パケットと、前記複数の巡回冗長検査ユニットの前記第２のもの内で終了する前記パケットとは同じパケットである、請求項２に記載の装置。
【請求項４】
前記複数の巡回冗長検査ユニットのうち少なくとも２つによって処理される少なくとも１つのパケットが前記複数の巡回冗長検査ユニットのうち前記少なくとも２つの間で連続的か否かを検査するための少なくとも１つの検査回路をさらに備える、請求項２または３に記載の装置。
【請求項５】
前記検査回路は、パケット開始信号が前記２つの巡回冗長検査ユニットのうちの第１の巡回冗長検査ユニットに関連付けられる第１の経路中に見出されるかまたは前記パケットが第１の経路中で進行中である場合、かつパケット終了信号が前記２つの巡回冗長検査ユニットのうちの前記第２の巡回冗長検査ユニットに関連付けられる第２の経路中に見出される場合、前記２つの巡回冗長検査ユニットの間で前記パケットが連続していると判断する、請求項４に記載の装置。
【請求項６】
前記巡回冗長検査ユニットの各々はさらに、
前記経路の１つを複数のレーンに分割するためのスプリッタと、
前記複数のレーンのうちそれぞれ１つのビットの部分的巡回冗長検査値を算出するための複数の巡回冗長検査モジュールとを備える、請求項１から５のいずれかに記載の装置。
【請求項７】
前記巡回冗長検査ユニットの各々はさらに、前記巡回冗長検査ユニット内で終了する前記パケットの前記巡回冗長検査値としての出力のための巡回冗長検査値を選択するための選択モジュールを備える、請求項１から６のいずれかに記載の装置。
【請求項８】
前記巡回冗長検査ユニットの各々はさらに、前記巡回冗長検査ユニット内で開始するまたは進行中の前記パケットの前記巡回冗長検査値としての出力のための巡回冗長検査値を選択するための選択モジュールを備え、前記選択モジュールは、前記レーンのいずれにもパケット開始信号が存在しなければ、前記レーンのうち１つの中のパケット開始信号に基づいてまたはデフォルト条件に基づいて、前記巡回冗長検査ユニット内で開始するまたは進行中の前記パケットの前記巡回冗長検査値としての出力のための前記巡回冗長検査値を選択するためのものである、請求項１から６のいずれかに記載の装置。
【請求項９】
前記巡回冗長検査ユニットの各々はさらに、少なくとも第１の巡回冗長検査モジュールからの部分的巡回冗長検査値と少なくとも第２の巡回冗長検査モジュールからの部分的巡回冗長検査値とを組合せて、前記第２の巡回冗長検査モジュールに関連付けられる前記レーンのうちそれぞれ１つの巡回冗長検査値を出力するための少なくとも１つの結合器を備える、請求項３から６のいずれかに記載の装置。
【請求項１０】
前記巡回冗長検査ユニットの各々はさらに、少なくとも１つのフォワーディングモジュールのレーンと宛先レーンとの間の多数のビットに基づいて少なくとも１つの部分的巡回冗長検査値をビットフォワーディングするための少なくとも１つのフォワーディングモジュールを備える、請求項１から９のいずれかに記載の装置。
【請求項１１】
以前のデータワードからの積算巡回冗長検査値を受信するための入力ポート、または
次のデータワードの積算巡回冗長検査値を出力するための出力ポートをさらに備える、請求項１から１１のいずれかに記載の装置。
【請求項１２】
積算巡回冗長検査値を、前記巡回冗長検査ユニットの少なくとも１つ内で終了するパケットの少なくとも１つの巡回冗長検査値と組合せるための少なくとも１つの結合器をさらに備え、
前記複数の巡回冗長検査ユニットによって処理されるパケットのサイズは前記経路の各々の少なくとも経路サイズである、請求項３から６のいずれかに記載の装置。
【請求項１３】
少なくとも１つのフォワーディングユニットのそれぞれの経路と宛先経路との間の多数のビットに基づいて少なくとも１つの巡回冗長検査値をビットフォワーディングするための少なくとも１つのフォワーディングユニットをさらに備える、請求項１から１２のいずれかに記載の装置。
【請求項１４】
パケットの終わりとレーンの終わりとの間または前記パケットの前記終わりと経路の終わりとの間の多数の空ビットに基づいて少なくとも１つの巡回冗長検査値の行列変換を行なうための少なくとも１つのアンロールユニットをさらに備える、請求項１から１３のいずれかに記載の装置。
【請求項１５】
データパケットにＣＲＣを追加するための方法であって、
データワードを複数の経路に分割することと、
前記経路の各々を並列に処理することとを備え、各経路毎に、前記処理することは、
前記経路内で終了するパケットの巡回冗長検査値を算出することと、
前記経路内で開始するまたは進行中のパケットの巡回冗長検査値を算出することとを備える、方法。
【国際調査報告】
2016518750.tif 000014
2016518750.tif 000015