特許第6220045号(P6220045)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ザイリンクス インコーポレイテッドの特許一覧

特許6220045モジュール式および拡張可能な巡回冗長検査計算回路
<>
  • 特許6220045-モジュール式および拡張可能な巡回冗長検査計算回路 図000005
  • 特許6220045-モジュール式および拡張可能な巡回冗長検査計算回路 図000006
  • 特許6220045-モジュール式および拡張可能な巡回冗長検査計算回路 図000007
  • 特許6220045-モジュール式および拡張可能な巡回冗長検査計算回路 図000008
  • 特許6220045-モジュール式および拡張可能な巡回冗長検査計算回路 図000009
  • 特許6220045-モジュール式および拡張可能な巡回冗長検査計算回路 図000010
  • 特許6220045-モジュール式および拡張可能な巡回冗長検査計算回路 図000011
  • 特許6220045-モジュール式および拡張可能な巡回冗長検査計算回路 図000012
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6220045
(24)【登録日】2017年10月6日
(45)【発行日】2017年10月25日
(54)【発明の名称】モジュール式および拡張可能な巡回冗長検査計算回路
(51)【国際特許分類】
   H04L 1/00 20060101AFI20171016BHJP
   H03M 13/09 20060101ALI20171016BHJP
   G06F 13/00 20060101ALI20171016BHJP
【FI】
   H04L1/00 A
   H03M13/09
   G06F13/00 301F
【請求項の数】15
【全頁数】21
(21)【出願番号】特願2016-503136(P2016-503136)
(86)(22)【出願日】2014年3月14日
(65)【公表番号】特表2016-518750(P2016-518750A)
(43)【公表日】2016年6月23日
(86)【国際出願番号】US2014029554
(87)【国際公開番号】WO2014144941
(87)【国際公開日】20140918
【審査請求日】2017年3月9日
(31)【優先権主張番号】13/841,574
(32)【優先日】2013年3月15日
(33)【優先権主張国】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】ジアン,ウェイロン
(72)【発明者】
【氏名】ブレブナー,ゴードン・ジェイ
(72)【発明者】
【氏名】カーソン,マーク・ビィ
【審査官】 岡 裕之
(56)【参考文献】
【文献】 米国特許出願公開第2009/0282322(US,A1)
【文献】 特開平10−209880(JP,A)
【文献】 特開2002−359561(JP,A)
【文献】 特許第3554715(JP,B2)
【文献】 特開2011−211353(JP,A)
【文献】 鴫原 正博 他,100Gbps級MAC用並列CRC演算処理の検討,2007年電子情報通信学会通信ソサイエティ大会講演論文集2,2007年 8月29日,p.140,B-7-80
(58)【調査した分野】(Int.Cl.,DB名)
H04L 1/00
G06F 13/00
H03M 13/09
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
データパケットにCRCを追加するための装置であって、
データワードを複数の経路に分割するためのスプリッタと、
複数の巡回冗長検査ユニットとを備え、前記巡回冗長検査ユニットの各々は前記経路のそれぞれ1つを処理するためのものであり、前記巡回冗長検査ユニットの各々は、
前記巡回冗長検査ユニットに供給されるデータ内で終了するパケットの巡回冗長検査値を出力するための第1の出力ポートと、
前記巡回冗長検査ユニットに供給される前記データ内で開始するまたは進行中のパケットの巡回冗長検査値を出力するための第2の出力ポートとを備える、装置。
【請求項2】
前記複数の巡回冗長検査ユニットのうち第1の巡回冗長検査ユニットに供給される第1の分割データ内で開始するまたは進行中のパケットの第1の巡回冗長検査値を前記複数の巡回冗長検査ユニットのうち第2の巡回冗長検査ユニットに供給される第2の分割データ内で終了するパケットの第2の巡回冗長検査値と組合せるための少なくとも1つの結合器をさらに備える、請求項1に記載の装置。
【請求項3】
前記複数の巡回冗長検査ユニットのうち前記第1の巡回冗長検査ユニットに供給される前記第1の分割データ内で開始するまたは進行中の前記パケットと、前記複数の巡回冗長検査ユニットのうち前記第2の巡回冗長検査ユニットに供給される前記第2の分割データ内で終了する前記パケットとは同じパケットである、請求項2に記載の装置。
【請求項4】
前記複数の巡回冗長検査ユニットのうち少なくとも2つによって処理される少なくとも1つのパケットが前記複数の巡回冗長検査ユニットのうち前記少なくとも2つの間で連続的か否かを検査するための少なくとも1つの検査回路をさらに備える、請求項2または3に記載の装置。
【請求項5】
前記検査回路は、パケット開始信号が前記2つの巡回冗長検査ユニットのうちの第1の巡回冗長検査ユニットに関連付けられる第1の経路中に見出されるかまたは前記パケットが第1の経路中で進行中である場合、かつパケット終了信号が前記2つの巡回冗長検査ユニットのうちの前記第2の巡回冗長検査ユニットに関連付けられる第2の経路中に見出される場合、前記2つの巡回冗長検査ユニットの間で前記パケットが連続していると判断する、請求項4に記載の装置。
【請求項6】
前記巡回冗長検査ユニットの各々はさらに、
前記経路の1つを複数のレーンに分割するためのスプリッタと、
前記複数のレーンのうちそれぞれ1つのビットの部分的巡回冗長検査値を算出するための複数の巡回冗長検査モジュールとを備える、請求項1から5のいずれかに記載の装置。
【請求項7】
前記巡回冗長検査ユニットの各々はさらに、前記巡回冗長検査ユニットに供給される前記データ内で終了する前記パケットの前記巡回冗長検査値としての出力のための巡回冗長検査値を選択するための選択モジュールを備える、請求項1から6のいずれかに記載の装置。
【請求項8】
前記巡回冗長検査ユニットの各々はさらに、前記巡回冗長検査ユニットに供給される前記データ内で開始するまたは進行中の前記パケットの前記巡回冗長検査値としての出力のための巡回冗長検査値を選択するための選択モジュールを備え、前記選択モジュールは、前記レーンのいずれにもパケット開始信号が存在しなければ、前記レーンのうち1つの中のパケット開始信号に基づいてまたはデフォルト条件に基づいて、前記巡回冗長検査ユニットに供給される前記データ内で開始するまたは進行中の前記パケットの前記巡回冗長検査値としての出力のための前記巡回冗長検査値を選択するためのものである、請求項1から6のいずれかに記載の装置。
【請求項9】
前記巡回冗長検査ユニットの各々はさらに、少なくとも第1の巡回冗長検査モジュールからの部分的巡回冗長検査値と少なくとも第2の巡回冗長検査モジュールからの部分的巡回冗長検査値とを組合せて、前記第2の巡回冗長検査モジュールに関連付けられる前記レーンのうちそれぞれ1つの巡回冗長検査値を出力するための少なくとも1つの結合器を備える、請求項3から6のいずれかに記載の装置。
【請求項10】
前記巡回冗長検査ユニットの各々はさらに、少なくとも1つのフォワーディングモジュールのレーンと宛先レーンとの間の多数のビットに基づいて少なくとも1つの部分的巡回冗長検査値をビットフォワーディングするための少なくとも1つのフォワーディングモジュールを備える、請求項1から9のいずれかに記載の装置。
【請求項11】
以前のデータワードからの積算巡回冗長検査値を受信するための入力ポート、または次のデータワードの積算巡回冗長検査値を出力するための出力ポートをさらに備える、請求項1から10のいずれかに記載の装置。
【請求項12】
積算巡回冗長検査値を、前記巡回冗長検査ユニットの少なくとも1つに供給されるデータ内で終了するパケットの少なくとも1つの巡回冗長検査値と組合せるための少なくとも1つの結合器をさらに備え、
前記複数の巡回冗長検査ユニットによって処理されるパケットのサイズは前記経路の各々の少なくとも経路サイズである、請求項3から6のいずれかに記載の装置。
【請求項13】
少なくとも1つのフォワーディングユニットのそれぞれの経路と宛先経路との間の多数のビットに基づいて少なくとも1つの巡回冗長検査値をビットフォワーディングするための少なくとも1つのフォワーディングユニットをさらに備える、請求項1から12のいずれかに記載の装置。
【請求項14】
パケットの終わりとレーンの終わりとの間または前記パケットの前記終わりと経路の終わりとの間の多数の空ビットに基づいて少なくとも1つの巡回冗長検査値の行列変換を行なうための少なくとも1つのアンロールユニットをさらに備える、請求項1から13のいずれかに記載の装置。
【請求項15】
データパケットにCRCを追加するための方法であって、
データワードを複数の経路に分割することと、
前記経路の各々を並列に処理することとを備え、各経路毎に、前記処理することは、
前記経路に供給されるデータ内で終了するパケットの巡回冗長検査値を算出することと、
前記経路に供給される前記データ内で開始するまたは進行中のパケットの巡回冗長検査値を算出することとを備える、方法。
【発明の詳細な説明】
【技術分野】
【0001】
発明の分野
この発明は一般的に、たとえばフィールドプログラマブルゲートアレイなどの集積回路などの装置、および高いデータレートでパケットの巡回冗長検査計算を行なうための方法に関する。
【背景技術】
【0002】
発明の背景
巡回冗長コード(CRC)は、データの完全性を確実にするために電気通信およびネットワーク化において広く用いられる。たとえば、あらゆるイーサネット(登録商標)パケットは、追加CRC32コード(32ビットCRCコード)とともに伝送される。巡回冗長検査を行なうための回路は、シフトレジスタを用いてシリアルに実現されている。しかしながら、この方策は、現在のデータレートに追従するには不十分である。さらに、100Gb/sまでのデータレートのためのいくつかのCRC回路設計が存在するが、これらは一般的に、入力幅が52ビット以下の比較的狭いデータバスを用いることに係る。
【発明の概要】
【課題を解決するための手段】
【0003】
発明の要約
1つの実施形態では、巡回冗長検査を行なうための装置が開示される。たとえば、装置は、データワードを複数の経路に分割するためのスプリッタを備える。装置は、複数の巡回冗長検査ユニットも備える。ユニットの各々は経路のそれぞれ1つを処理するためのものである。さらに、ユニットの各々は、ユニット内で終了するパケットの巡回冗長検査値を出力するための第1の出力ポートと、ユニット内で開始するまたは進行中のパケットの巡回冗長検査値を出力するための第2の出力ポートとを備える。
【0004】
さまざまな実施形態では、複数の巡回冗長検査ユニットによって処理されるパケットのサイズは、経路のうちの各々の少なくとも経路サイズであり、装置はさらに、複数の巡回冗長検査ユニットの第1のもの内で開始するまたは進行中のパケットの第1の巡回冗長検査値を複数の巡回冗長検査ユニットの第2のもの内で終了するパケットの第2の巡回冗長検査値と組合せるための少なくとも1つの結合器を備え、少なくとも1つの結合器は、第1の巡回冗長検査値および第2の巡回冗長検査値に対する排他的or演算を行なうためのものであり、複数の巡回冗長検査ユニットのうち第1のもの内で開始するまたは進行中のパケットと複数の巡回冗長検査ユニットのうち第2のもの内で終了するパケットとは同じパケットであり、装置はさらに、複数の巡回冗長検査ユニットのうち少なくとも2つの間に、複数の巡回冗長検査ユニットのうち少なくとも2つによって処理される少なくとも1つのパケットが連続的であるか否かを検査するための少なくとも1つの検査回路を備え、検査回路は、パケット開始信号が2つのユニットのうち第1のユニットに関連付けられる第1の経路の中に見出されれれば、またはパケットが第1の経路中で進行中であれば、かつパケット終了信号が2つのユニットのうち第2のユニットに関連付けられる第2の経路中に見出される場合は、パケットが2つのユニット間で連続していると判断し、巡回冗長検査ユニットの各々はさらに、経路のうち1つを複数のレーンに分割するためのスプリッタと、レーンのうちそれぞれ1つのビットの部分的巡回冗長検査値を算出するための複数の巡回冗長検査モジュールとを備え、M個の巡回冗長検査ユニットの各々はさらに、巡回冗長検査ユニット内で終了するパケットの巡回冗長検査値としての出力の巡回冗長検査値を選択するための選択モジュールを備え、選択ユニットは、レーンのうち1つの中のパケット終了信号に基づいて、またはレーンのいずれにもパケット終了信号が存在しなければデフォルト条件に基づいて、巡回冗長検査ユニット内で終了するパケットの巡回冗長検査値としての出力のための中間巡回冗長検査値を選択するためのものであり、巡回冗長検査ユニットの各々はさらに、巡回冗長検査ユニット内で開始するまたは進行中のパケットの巡回冗長検査値としての出力の巡回冗長検査値を選択するための選択モジュールを備え、選択モジュールは、レーンのうち1つの中のパケット開始信号に基づいて、またはレーンのいずれにもパケット開始信号が存在しなければデフォルト条件に基づいて、巡回冗長検査ユニット内で開始するまたは進行中のパケットの巡回冗長検査値としての出力の巡回冗長検査値を選択するためのものであり、巡回冗長検査ユニットの各々は、少なくとも第1の巡回冗長検査モジュールからの部分的巡回冗長検査値を少なくとも第2の巡回冗長検査モジュールからの部分的巡回冗長検査値と組合せて、第2の巡回冗長検査モジュールに関連付けられるレーンのそれぞれ1つの巡回冗長検査値を出力するための少なくとも1つの結合器をさらに備え、巡回冗長検査ユニットの各々はさらに、少なくとも1つのフォワーディングモジュールのレーンと宛先レーンとの間の多数のビットに基づいて少なくとも1つの部分的巡回冗長検査値をビットフォワーディングするための少なくとも1つのフォワーディングモジュールを備え、装置はさらに、以前のデータワードからの積算巡回冗長検査値を受信するための入力ポートおよび/または次のデータワードの積算巡回冗長検査値を出力するための出力ポートを備え、装置はさらに、積算巡回冗長検査値を、巡回冗長検査ユニットのうち少なくとも1つ内で終了するパケットの少なくとも1つの巡回冗長検査値と組合せるための少なくとも1つの結合器を備え、装置はさらに、少なくとも1つのフォワーディングユニットの経路と宛先経路との間の多数のビットに基づいて少なくとも1つの巡回冗長検査値をビットフォワーディングするための少なくとも1つのフォワーディングユニットを備え、装置はさらに、パケットの終わりとレーンの終わりとの間またはパケットの終わりと経路の終わりとの間の多数の空ビットに基づいて少なくとも1つの巡回冗長検査値をアンロールするための少なくとも1つのアンロールユニットを備える。
【0005】
別の実施形態では、巡回冗長検査を行なうための別の装置が開示される。たとえば、装置は、データワードを処理するための複数の巡回冗長検査ユニットを備える。1つの実施形態では、巡回冗長検査ユニットの各々は、データワードの一部を処理するためおよびそれぞれの巡回冗長検査値を出力するためのものである。装置は、それぞれ複数のパケットの最終的な巡回冗長検査値としての出力の複数のそれぞれの巡回冗長検査値を選択するための選択ユニットも含む。データワードは最小パケットサイズよりも大きい。
【0006】
さらなる実施形態では、巡回冗長検査を行なうための方法が開示される。たとえば、方法は、データワードを複数の経路に分割することと、経路の各々を処理することとを備える。1つの実施形態では、経路の各々毎に、処理することは、経路内で終了するパケットの巡回冗長検査値を算出することと、経路内で開始するまたは進行中のパケットの巡回冗長検査値を算出することとを備える。
【0007】
添付の図面は開示の1つ以上の局面に従う例示的な実施形態を示す。しかしながら、添付の図面は、開示を示される実施形態に限定するように扱われるべきではなく、図面は、説明および理解のためのみのものである。
【図面の簡単な説明】
【0008】
図1】CRC回路/装置実現例のブロック図である。
図2】CRCユニットのブロック図である。
図3】CRCユニットの代替的な実施形態のブロック図である。
図4】経路上でおよび/またはCRCユニットを通して処理されるビットの例示的なシナリオのタイミング図である。
図5】パケットが2つのCRCユニットの間で連続しているか否かを検査するための検査回路のブロック図である。
図6】経路上でおよび/またはCRCユニットを通して処理されるビットのさらなる例示的なシナリオのタイミング図である。
図7】巡回冗長検査を行なうための方法のブロック図である。
図8】本明細書中に記載の機能を実行するのに用いるのに好適な汎用コンピュータまたは計算装置の高レベルブロック図である。
【発明を実施するための形態】
【0009】
図面の詳細な説明
本開示は一般的に、巡回冗長検査を行なうための装置および方法に関する。たとえば、本開示は、たとえば、プログラマブル論理装置(PLD)、専用IC、フィールドプログラマブルゲートアレイ(FPGA)などの集積回路(IC)内で実現されて、高いビットレートでかつ広いデータバス上で受信されるパケットに対して巡回冗長検査動作を行なうことができる。本開示の実施形態は、1024ビット以上を含む入力幅を有する広いデータバスを用いて、たとえば400Gb/s以上など、100Gb/sを上回るデータ伝送速度をサポートし得る。回路のアーキテクチャは、モジュール式および拡張可能であり、リソース−性能のトレードオフを提供することができる。
【0010】
巡回冗長コード(CRC)は、データの完全性を確実にするのに電気通信およびネットワーク化および多数の他の適用例で広く用いられる。たとえば、イーサネット(登録商標)パケットは、フレーム検査シーケンス(FCS)とも称される、追加CRC32コード(32ビットCRCコード)とともに伝送される。巡回冗長検査を行なうための回路は、シフトレジスタを用いてシリアルに実現されている。しかしながら、この方策は現在のデータレートに追従するには不十分である。さらに、100Gb/sまでのデータレートのためのいくつかのCRC回路設計が存在するが、これらは一般的に、512ビット以下の入力幅/ワードサイズを有する比較的狭いデータバスを用いることに係る。これは、将来的なスループットの拡張を限定してしまう。というのも、クロック周波数の大きな上昇を得ることがより難しくなるからである。400Gb/sなどのより高いスループットを達成するため、CRC回路はより広いデータバスを用いてもよい。たとえばこれによって、クロックサイクル当たり1024ビットよりも多くを処理することができるようになる。しかしながら、ネットワークパケット/イーサネット(登録商標)フレームの最小サイズは512ビットであるので、複数のパケットが同時にこの広いデータバス上に現われることがある。パケットはデータバス内の任意の位置で開始および終了する可能性がある。このように、ワード当たりのパケット数が増大するにつれて、したがって、異なるパケット位置に対処することがより複雑になってしまう。
【0011】
応じて、本開示の実施形態は、たとえば512ビット入力データ幅に最適化される、たとえば512ビットCRCユニット上に構築される拡張可能CRCアーキテクチャを記載する。本実施形態は、スループットが増大するのに応じたリソースの使用の線形拡張を提供する一方で、伝統的な方策は超線形拡張に係る。本開示の実施形態は512ビットの倍数および分数に関連して説明されるが、本開示はそのように限定されるものではないことに留意すべきである。すなわち、例示的なアーキテクチャは、512ビット経路サイズ/CRCユニットサイズを特徴とし、これは、現在の最小のイーサネット(登録商標)フレームサイズに対応し、したがって、示される目的によく適合している。しかしながら、当業者は、本開示に従って他のデータバス幅、フレームサイズ、経路サイズ、および線のサイズを用いてもよいことを認めるであろう。このように、本開示の他の実施形態は、異なる通信技術に対応してもよく、異なるネットワーク層について最適化されてもよく、かつたとえば、フレーム、パケット、セグメント、データグラム、プロトコルデータユニット(PDU)、運搬データユニット(TDU)、セッションデータユニット(SDU)などの異なるパケット/ユニットサイズに合わせられてもよい。
【0012】
巡回冗長検査は、データ伝送適用例で広く用いられるパリティビットベースの誤り検出方式であり、多項式算数に基づいている。伝送すべきデータのビットは多項式係数である。一例として、ビットストリーム1101011011は10項多項式を表わす10ビットを有する。
【0013】
【数1】
【0014】
メッセージのCRCを計算するため、生成多項式G(x)と呼ばれる別の多項式が選ばれる。G(x)は、ゼロよりも大きな次を有し、かつx0項において非ゼロ係数を有するべきである。この結果、生成多項式について、いくつかの可能な選択肢、したがって標準化の必要性が生じる。CRC16は、生成多項式を用いる1つのそのような標準である。
【0015】
【数2】
【0016】
CRC16は、すべての単一および二重の誤り、奇数ビットについてのすべての誤り、長さ16以下のすべてのバースト誤り、ならびにより長いバーストの大部分の誤りを検出する。別の標準的なCRCは、生成多項式を用いるCRC32である。
【0017】
【数3】
【0018】
一般的に、nビットのCRCは、データストリームを多項式M(x)として表わし、M(x)をxnで乗算し(nは多項式G(x)の次である)、かつ結果を生成多項式G(x)で除算することによって算出される。結果的に得られる余りがデータストリームに追加されて伝送される。次に、完全な伝送された多項式が受信器端において同じ生成多項式で除算される。この除算の結果が余りを有しなければ、伝送誤りは存在しない。数学的には、これを以下のように表わすことができる。
【0019】
CRC=[(M(x)・xn)/G(x)]の余り
IEEE802.3は、最初の32ビットを補って、多項式M(x)を、宛先アドレス、発信元アドレス、長さ/種類、およびフレームのデータとして定義する。以上のCRCの算出からの余りが補われ、結果は、IEEE802.3 32ビットフレーム検査シーケンス(FCS)フィールドである。FCSは、イーサネット(登録商標)フレームの端に追加され、まず最上位ビット(x31, x30, …,x1, x0)が伝送される。
【0020】
1つの実施形態では、本開示は、生成多項式に従って入来データのさまざまな部分に対して行列演算を用いて、部分的な、中間の、および最終的なCRCを生成する。巡回冗長コード(CRC)のいくつかの有用なプロパティを本実施形態で用いる。たとえば以下のとおりである。
【0021】
プロパティ1:CRC(A xor B)=CRC(A) xor CRC(B)
プロパティ2:CRC({X,0P})=HP・CRC(X)
PはPビットのゼロであり、{X,0P}はP個のゼロが追加されたXであり、HPは生成多項式から導出される行列である。
プロパティ3:CRC({0P,Y})=CRC(Y)
【0022】
一例として、入来データワードDは1024ビットを備えてもよい。Dについて巡回冗長コード(CRC)を算出するために、データをD=[ビット1023…ビット0]=E[D1|0512]xor F[0512|D2]として記述することができ、式中、D1=[ビット1023…ビット512]、かつD2=[ビット511…ビット0]である。このように、プロパティ1に従うと、CRC(D)=CRC(E) xor CRC(F)である。プロパティ3に従って単にD2についてCRCを算出することによって、CRC(F)を算出することができる。換言すると、Fのすべての1024ビットに対してよりもむしろ、D2の512ビットのみについてCRC(F)算出を行なうことができる。プロパティ2に従うと、CRC(E)を以下のように算出することができる。まず、D1についてCRCを算出する。第2に、生成関数HPから導出される行列でCRC(D1)を乗算し、結果、CRC(E)が得られる。CRC(E)およびCRC(F)が一旦わかると、CRC(D)は、CRC(D)=CRC(E) xor CRC(F)として計算される。
【0023】
これらのさまざまなプロパティおよび変換の有用性をさまざまな構成要素および特徴と関連して以下に論じる。特に、本開示の実施形態は、並列CRCユニットおよび並列経路を用いるCRC回路を特徴とする。各々の経路はCRCユニットを含み、これを用いて、各々は、入来データワードの一部を処理して2つのCRC出力を生成し、次にこれを他のユニットのうち1つ以上からのCRC出力と組合せて、データワード内で終了する1つ以上のパケットの最終CRC値を生じてもよい。
【0024】
図1は、本開示の実施形態に従う装置またはCRC回路100のブロック図を示す。図1に示されるように、CRC回路100はN個の経路に分割され、各々の経路は、512ビット幅の計算ブロック(概して、nビット幅の計算ブロック)を含み、たとえば各々は、それぞれ512ビットCRCユニット110A,110B…110Nを有する。さまざまな実施形態では、各々の512ビットCRCユニットは4本のレーンを備え、各々のレーンは128ビットCRC計算モジュールを有し、これは図2および図3により詳細にそれぞれ示される。4本の128ビットレーンは例示の目的のためにのみ示されることに留意すべきである。このように、本開示は、任意の数のレーンまたは任意の特定のレーンのサイズに限定されるものではない。さらに、1つの実施形態では、たとえば、幅広い(549ビットまでの)排他的ORゲートに基づいて、よりモノリシックなブロックである異なる種類のCRCユニットアーキテクチャを用いてもよい。このように、CRCユニット110A−110Nのうち任意の1つ以上のためのそのような代替的なアーキテクチャを、その基本的な機能を変更せずに、CRC回路100中に組入れてもよい。
【0025】
1つの実施形態では、CRC回路100は、N個の512ビット経路A,BおよびNを備える(図1には3本の経路のみが示される)。したがって、入力ポート101への入来データは、1536ビット幅のデータバスを備え得る。スプリッタ105は、データバス上の信号を、それぞれの512ビット経路A,B,およびNに分割する。1つの実施形態では、シリアルデータは、CRC回路100に入る前に並列データワードに変換される。このように、1つの実施形態では、「より早い」ビットを、回路のいちばん上から「後の」ビットが処理される回路のいちばん下に向けてバス上に置いてもよい。
【0026】
本開示の実施形態に従うと、データワードの幅はNビットである。最小サイズのイーサネット(登録商標)パケットは64バイト(すなわち512ビット)であるので、同じワード内で終了する(N/512)個までのパケットが存在する。このように、各々のワード毎に(N/512)個までのCRC出力が存在する。応じて、図1では、たとえば出力ポート180A、180B、および180N上に潜在的に3つのCRC出力が存在する。というのも、同じ1536ビットデータワード内で3つまでの512ビットイーサネット(登録商標)フレームが終了し得るからである。たとえば、n番目のCRC出力180Nは、同じNビット入力データワード(n=N/512)上のn番目の完了パケットについてのものである。
【0027】
各々の512ビットCRCユニット110A−110Nは、2つの巡回冗長コードを生成する。一方は、ユニット/経路内で終了するパケット(たとえば、CRC出力ポート113A−113N上のCRC_A)であり、他方は、ユニット/経路内で開始するまたは進行中のパケット(たとえば、CRC出力ポート112A−112N上のCRC_B)である。レジスタ160は、複数のワードに跨るパケットの積算CRC値(CRC_accum_new170)を記憶する。
【0028】
並列CRC計算では、部分的CRCを計算するためのデータにゼロが追加されてもよい。これらの追加されるゼロは「空ビット」と呼ばれる。このように、さまざまな実施形態は、パケットの終わりにある付加的に積算されるゼロを(たとえば、図2に示されるようなCRC回路を用いて)128ビット境界に、または(たとえば、図3に示されるようなCRC回路を用いて)512ビット境界にも、訂正する。これらの方策の各々は、終了調節が必要ない場合、たとえば、元のパケットが冒頭でゼロ詰めされれば、これを128ビットまたは512ビット境界に末揃えさせるようにも適用可能である。1つの実施形態では、CRCユニット110A−110Nの各々における処理に従って空ビットおよび/またはゼロ詰めに対処するさらなる演算を実現することもできる。たとえば、「Fwd」ブロック、フォワーディングユニット120B、120N、および120Xは、異なる数の空ビットだけCRC値をフォワードする。レーンアンロールユニット130A−130Nおよびバイトアンロールユニット150A−150Nは、異なる数の空バイトだけCRCをアンロールする(戻す)。「フォワーディング」および「アンロール」機能は、図2および図3の例示的なCRCユニット200および300の検討に従って以下により詳細に記載される。
【0029】
1つの実施形態では、Nビットデータバス上の入来データ(たとえば、本明細書中ではパケットとも称されることがあるイーサネット(登録商標)フレーム)は、(N/L)個のビットパケット開始(SoP)およびパケット終了(EoP)信号を含む。1つの実施形態では、SoPおよびEoP信号のサイズはN/Lビットである。CRC回路100全体内でN/L本のレーンが存在する。応じて、1つの実施形態では、SoP信号またはEoP信号は、パケット(またはフレーム、PDUなど)が対応のレーンにおいて開始するまたは終了するかどうか、およびレーン内のどこでフレームが終了するかを示す。SoP信号またはEoP信号がレーンについて検出されれば、レーンに対応するSoPまたはEoPフラグが設定される。たとえば、単一のビットは一「1」に設定されて、特定のレーンについてSoP信号が検出されたことを示し、かつSoP信号がレーン中のデータ上で検出されなければ、SoPフラグはゼロ「0」のままであり得る。1つの実施形態では、パケットの始めがレーンの始めに整列されなければならないと仮定する。1つの実施形態では、パケットの終わりはレーンの終わりに整列されないことがある。しかしながら、1つの実施形態では、パケットの終わりがバイトの終わりに整列されると仮定される。このように、レーンはL/8バイトを含有し、パケットは、終了レーン内の任意のバイトで終了し得る。1つの実施形態では、Mty(「空」)値が算出されて、レーン内の空バイトの数を示す。1つの実施形態では、Mty値は、特定のバイト内のEoP信号の検出と、EoP信号が検出されるバイトの位置よりも下のレーン内の付加的なバイトの数の判定とに基づいて算出される。Mty値を記憶するのに必要なビットの数は、size_Mty=(N/512)*Log2(L/8)ビットによって与えられる。最小サイズのイーサネット(登録商標)パケットは512ビットであるので、(n=N/512)個までのパケットが同じワード内に含有され得る。このように、n番目のMtyはn番目の完了パケットについてのものである。
【0030】
図2は、L=128である(すなわち、レーンの幅が128ビットである)512ビットCRCユニット200の例示的な実施形態を示す。たとえば、CRCユニット200は、図1のCRCユニット110A−110Nの各々として実現されてもよい。図2に示されるように、CRCユニット200は4つのCRCモジュール210A−210Dを含む。モジュールの各々は、各々のLビットレーンA−D上のデータ上のCRC値を計算する。各々のLビットレーン上のCRC値は、本明細書中で部分的CRC値と称される。フォワーディングユニット220B、220C、および220Dは、「i」本のレーンだけ部分的CRC値をフォワーディングするための「Fxi」モジュールを含む。たとえば、図2に示されるように、フォワーディングユニット220CはFx2モジュールを含み、これは、レーンCの部分的CRC値を2レーンだけ、すなわちレーンAにフォワーディングする。図2に示されるように、フォワーディングされた部分的CRC値の各々は、宛先レーンの部分的CRC値に組合される。たとえば、図2にいくつかの結合器290が示されるが、その各々は、たとえば、これが入力として取る部分的CRC値に対して排他的or演算を行なうためのものである。
【0031】
部分的CRC値をフォワーディングすることに加えて、フォワーディングユニット220B−220Dの各々は、部分的CRC値を特定の宛先レーンにフォワーディングする/送る前に、宛先レーンに対応する多数のビットに基づいて部分的CRC値を「フォワーディングする」。ビットフォワーディングの動作は、他のレーンならびに/または、たとえばマルチプレクサ230および240などの選択モジュールに、結果的に得られるCRC値を「フォワーディングする」(たとえば、送出するおよび/または出力する)こととは対照的なCRC値に対するデータ操作/演算である。たとえば、レーンD中のフォワーディングユニット220DのFx2モジュールは、256ビット(2つのレーンに対応するビットの数)に基づいて部分的CRC値をフォワーディングし、結果的に得られる部分的CRC値をレーンBに送出し、これは、排他的or演算を介して結合器290でレーンBの部分的CRC値に組合される。1つの実施形態では、フォワーディングすることは、生成関数および宛先レーンへの距離(ビットの数)に基づく入力CRC値の行列変換を備える。特定のレーンの最後の結合器に従って出力されるCRC値は、マルチプレクサ230への入力の1つを備える。フォワーディングユニット220B−220Dのうち各々の中のフォワーディングモジュールの各々は、同様の態様で動作する。さまざまなレーンからの部分的CRC値の組合せを備えるCRC値は、マルチプレクサ230および240へのそれぞれの入力を備える。
【0032】
「EoP_index」信号270は、パケットが終了しているレーン(たとえば、対応のEoPビット/フラグが、パケットがそのレーンで終了していることを示す一「1」に設定されているレーン)の指標を特定する。EoP_index信号270は、マルチプレクサ230への入力のうちどれが、CRC_A(CRCモジュール200によって処理される512ビット内で終了するパケットのCRC値)として出力ポート260上に出力されるかを制御する。換言すると、マルチプレクサ230は、EoP_indexの値に基づいて、CRC_Aとしてどの入力CRC値を出力すべきかを選択する。同様に、「SoP_index」信号280は、パケットが開始しているレーンの指標を特定する(すなわち、レーンについての対応のSoPビット/フラグが一「1」に設定される)。EoP_indexおよびSoP_indexのデフォルト値は、それぞれ0および(512/L−1)である。SoP_index信号280は、マルチプレクサ240への入力CRC値のうちどれがCRC_B(CRCユニット200内で開始するまたは進行中のパケットのCRC値)として出力ポート250上に出力されるかを制御する。換言すると、マルチプレクサ240は、SoP_indexの値に基づいて、CRC_Bとしてどの入力CRC値を出力すべきかを選択する。
【0033】
図1の検討に戻って、CRC回路100のさらなる構成要素および特徴をここで説明する。以上で言及したように、パケットはレーンの始まりで始まると仮定される。しかしながら、1つの実施形態では、パケットは、経路内の任意のレーンで、および(バイトの終わりで終了と仮定される)レーン内の任意の位置で、終了してもよい。応じて、1つの実施形態では、バイトアンロールユニット150A−150NがCRC回路100に含まれて、レーンの終わりで終了しないパケットに対処する。以上で言及したように、1つの実施形態では、Mty(「空」)値が算出されて、レーン内の空バイトの数を示す。Mty値は、特定のバイト内のEoP信号の検出と、EoP信号が検出されるバイトの位置よりも下のレーン内の付加的なバイトの数の判定とに基づいて算出されてもよい。Mty値を記憶するのに必要なビットの数は、size_Mty=(N/512)*Log2(L/8)ビットによって与えられる。最小サイズのイーサネット(登録商標)パケットは512ビットであるので、(n=N/512)個までのパケットが同じワード内に含有され得る。このように、n番目のMtyは、n番目の完了パケットについてのものである。図1に示されるように、Mty_1st、Mty_2nd…Mty_(n/512)thはそれぞれ、バイトアンロールユニット150A−150Nへの入力である。一例として、Mty_1stは値7を有し得る。これは、パケットがレーンのバイト9で終了し、レーンの最後の7バイトがゼロ/空バイトとして扱われるべきであることを示す。
【0034】
1つの実施形態では、Mty値に応じてCRCを「アンロールする(戻す)」または「解く」ために、生成関数に基づくおよびMtyの値(ビットの数)に基づく入力CRC値の行列変換が行なわれる。別の実施形態では、バイトアンロールユニット150A−150Nのうち任意の1つ以上においてパイプライン化アンロール演算を実現してもよい。1つの実施形態では、パイプラインは、i個の段を備え、i番目の段が2iバイトをアンロールするためのものである。このように、1つの実施形態では、16バイトまでをアンロールするのに4つのパイプライン段が必要である。別の実施形態では、反復関数が行なわれる。たとえば、1つの実施形態では、CRC値の最下位ビットが除去される。ビットが一「1」であれば、結果的に生じるCRC値に除数(すなわち、生成多項式/生成関数)が加算される。しかしながら、除去されるビットがゼロ「0」であれば、結果的に生じるCRC値にゼロが加算される。この演算は、Mty値によって示されるように、ビットの数について反復される。たとえば、Mty_1stの値が2であれば(2バイトまたは16ビット)、アンロール演算を16回行なって最終CRC値を計算する。また別の実施形態では、異なるアンロールアルゴリズムを利用してもよい。換言すると、本開示は、任意の1つの特定のアンロールアルゴリズムに限定されるものではない。
【0035】
CRC回路100のCRCユニット110A−110Nの各々が図2のユニット200などのCRCユニットを備える場合、レーンアンロールユニット130A−130Nを回路100から省略してもよい。しかしながら、1つの実施形態では、これらのレーンアンロールユニットは、CRCユニットが512ビット経路の終わりへのパケット整列を維持する回路100中に含まれる。経路の終わりに整列する例示的なCRCユニットを図3に示す。
【0036】
図3は、1つの実施形態に従うCRCユニット300を示す。たとえば、図1のCRCユニット110A−110Nのうち任意の1つ以上がCRCユニット300を備えてもよい。図3に示されるように、CRCユニット300は、図2のCRCユニット200との多数の類似点を共有する。たとえば、CRCユニット300は、512ビット入力ポート/バスと、512ビットを4本の128ビットレーンA−Dに分割するスプリッタ305とを有する。レーンA−Dの各々は、それぞれCRCモジュール310A−310Dを含む。しかしながら、図2に対して、図3のフォワーディングユニット320B−320Dは、CRC値を出力する/フォワーディングする前に単一のビットフォワーディング動作のみを行なう。たとえば、フォワーディングユニット320Dは、レーンAの宛先レーンを仮定する384ビット(3レーンフォワーディング)に基づいてCRC値中のビットを経路の最後のレーンにフォワーディングしてもよい。パケットは実際にレーンA上で終了し得るが、そうである必要がないことに留意されたい。たとえば、パケットは依然としてレーンB上で終了してもよい。同様に、フォワーディングユニット320Cは、経路の最後のレーンであるレーンAの宛先も仮定して、256ビットに基づいて、CRCユニット310Cによって出力される部分的CRCのビットを「フォワーディング」してもよい。この態様のビットフォワーディングは本質的に、パケットをCRCユニット300の経路/終わりに整列させる。しかしながら、この仮定は誤っているかもしれないので、図1のCRC回路100のレーンアンロールユニット130A−130Nで経路の終わりに対するパケットの整列を訂正してもよい。CRCユニット300の付加的な構成要素は、図2のCRCユニット200の構成要素と同様の態様で機能する。たとえば、選択モジュール/マルチプレクサ330は、パケット終了EoP_index値370に基づいて出力ポート360上にCRC_Aとして出力すべき、入力部分的CRC値を選択する。同様に、選択モジュール/マルチプレクサ340は、パケット開始SoP_index値380に基づいて出力ポート350上にCRC_Bとして出力すべき入力CRC値を選択する。さらに、結合器390の各々は図2の結合器290と同じ機能を有する。
【0037】
図1のCRC回路100に戻って、512ビット経路の終わりに整列するCRCユニットを用いる場合には、レーンアンロールユニット130A−130Nを含んでもよい。たとえば、図1のCRCユニット110Bが図3のCRCユニット300を備えると仮定する。パケットがCRCユニット300のレーンC(第2のレーン)上で終了すれば、マルチプレクサ330は、出力CRC_Aとして(レーンCからの)入力2を選択する。しかしながら、フォワーディングユニット320Dおよび320Cは、本質的に2つ(2)多過ぎるレーンだけ、それらのそれぞれのCRC値を「過剰フォワーディング」したであろう。このように、レーンアンロールユニット130Bは、入力としてそれが受ける中間CRC値を2つのレーン(256ビット)だけアンロールしてもよい。レーンアンロールユニットは、先に記載したバイトアンロールユニット150A−150Nと同じまたは同様の設計に基づいていてもよい。たとえば、アンロール演算は、生成関数および空レーンの数に対応する空ビットの数に基づく入力CRC値のマトリックス操作を備えてもよい。1つの実施形態では、レーンアンロールユニットは、対応のレーンのEoP_index値に基づいてアンロールすべきレーンの数を決める。たとえば、以上の同じ例に従うと、パケットがレーンB上で終了すれば、EoP_index=2である。このように、レーンアンロールユニットは、2本の(2)レーン(256ビット)に対応するビットの数に基づいてアンロールする。パケットは依然としてレーンBの真ん中内で終了したかもしれないので、CRC値は、依然としてバイトアンロールユニット150A−150Nのうち1つの中の終了レーン内の空バイトの数だけアンロールされるべきである。
【0038】
CRC回路100のさらなる機能、特にフォワーディングユニット120B,120Nおよび選択ユニット140の機能を図4の例を用いて示し得る。特に、図4は、本開示の実施形態に従うCRCモジュールによって処理され得る512ビット入力のためのさまざまなシナリオのタイミング図400を示す。たとえば、5つの例A−Eの各々は、任意の1クロックサイクルで受信/処理され得る512ビットを表わす。これらの例では、ビット511は「より早い」ビットであり、ビット0がデータストリーム中の「後の」ビットであることに留意すべきである。たとえば、図1の回路100などのCRC回路は、ただ1つの構成要素であるトランシーバを備えてもよい。1つの実施形態では、トランシーバは、CRC回路およびトランシーバの他の構成要素によるより高速の処理のために並列データに変換されるシリアルデータを伝送するおよび/または受信する。このように、データがシリアルに受信されると、これをデータワードの順次の並列ビット位置に置いてもよい(これは次に、上述のようにいくつかの512ビットCRCユニットによる処理のために、CRC回路によっていくつかの経路に分割されてもよい)。例Aでは、経路中で(すなわち、512ビットCRCユニットによって処理される512ビット内で)受信されるSoPまたはEoP信号が存在しない。これは2つの理由によることがある。すなわち、経路上にパケット/データが存在しないか、またはパケットが経路を通って進行中である場合である(たとえば、パケットが512ビットよりも大きい場合、パケットは他の512ビットCRCユニットによって処理される異なる経路上で始まりかつ終了することがある)。いずれの場合も、経路内で終了するパケットが存在しないので、Valid_Aはゼロ「0」に設定されて、経路内で終了するパケットのCRC_A出力が有効な出力ではないことを示す。一方で、Valid_Bは一「1」に設定されて、経路内で開始するまたは進行中のパケットについてのCRC_B出力が有効な出力であることを示す。
【0039】
例Bでは、512ビット内にSoP信号が見出されるが、依然としてEoP信号は見出されない。このように、経路内で始まるパケットが存在するが、パケットは経路内で終了しない。このように、Valid_Aはゼロ「0」に設定され、Valid_Bは一「1」に設定される。例Cでは、512ビット内にEoP信号が見出されるが、SoP信号は存在しない。応じて、Valid_Aが一「1」に設定されて、経路内で終了するパケットについてのCRC_A出力が有効であることを示す(というのも、パケットは、EoP信号が示すように経路内で終了するからである)。しかしながら、Valid_Bはゼロ「0」に設定されて、経路内で開始するまたは進行中のパケットについてCRC_B出力が無効な出力であることを示す。
【0040】
例Dでは、SoPおよびEoP信号の両方が512ビット内に見出される。SoPおよびEoP信号の両者ともが512ビット内に見出されるが、Valid_Aのみが一「1」に設定される。これは、EoPがSoPの後に見出されて、EoPがSoP信号で始まる同じパケット中で終了していることを明確に示すからである。このため、出力CRC_Bは無効であり、したがってパケットは経路内で終了したので、いずれの他のCRCユニットからのいずれの他のCRC値とも組合せてはならない。例Eでは、ここでも、SoPおよびEoP信号が両者とも512ビット中に見出される。しかしながら、EoP信号はSoP信号よりも早く、このことは、EoP信号が別のCRCユニット/経路から継続しているが現在の経路内で終了するパケットについてのものである一方で、SoP信号が新しいパケットの開始についてのものであることを示す。このように、Valid_Aは一「1」に設定されて、経路内で終了するパケットのCRC値であるCRC_Aが有効であることを示す。同様に、Valid_Bは一「1」に設定されて、ユニットを通って開始するまたは連続的であるパケットのCRC値であるCRC_Bも有効であることを示す。
【0041】
図4と関連してここで図1を参照すると、回路100のデータバスは、3つの512ビット経路に分割される1536ビットワードを備えてもよい。一例として、最も早い経路(経路N)は、図4の例Bに示されるように、512ビットを備え、真ん中の経路(経路B)は、例Eの512ビットを備え、かつ最後の経路(経路A)は、例Cの512ビットを備える。このように、経路NのCRCユニット110Nは、データ経路上のビットを処理して、CRC_AおよびCRC_Bを生成する。さらに、Valid_Aはゼロ「0」に設定され、Valid_Bは「1」に設定される。応じて、CRCユニット110Nによって出力されるCRC_Aを用いるべきではない。選択ユニット140の目的は、出力ポート180A−180N上の1つ以上の最終CRC値として出力すべき有効なCRC値を選ぶことである。このように、経路NについてのValid_A信号/フラグがゼロ「0」、すなわち無効であることに基づいて、選択ユニット140は、最終CRC値として出力すべきCRCユニットの110NのCRC_Aとして出力されるCRC値を無視してもよい、または選択しないようにしてもよい。フォワーディングユニット120Bおよび120Nの目的は、パケットが終了する別の経路/CRCユニットからの中間のCRC値と組合せるべき、現在の経路内で終了しないパケットの中間CRC値をフォワーディングすることである。このように、Valid_Bが「1」に設定されている、すなわち有効であるので、フォワーディングユニット120Nは、他のCRCユニットの出力と組合せるべきCRC_Bを出力/送出してもよい。
【0042】
フォワーディングユニット120Nならびにフォワーディングユニット120Bおよび120Xは、図2および図3に示されるフォワーディングユニットと同様の態様で機能することに留意すべきである。このように、たとえば、フォワーディングユニット120Nが、1レーンだけ(たとえば、レーンBに)CRC_Bをフォワーディングしている場合、これは、512ビット(宛先レーンへのビットでの距離)に基づいてフォワーディングし、2レーン(たとえば、レーンAに)フォワーディングする場合は、これは1024ビットに基づいてフォワーディングする。
【0043】
経路N上で処理が発生するのと同時に、経路B中のCRCユニット110Bは、図4の例E中に示されるように512ビットを処理する。CRCユニット110Bは、中間のCRC値CRC_AおよびCRC_Bとしての出力のためのCRC値を生成する。さらに、SoP信号の前にEoP信号が見出される。そのため、Valid_AおよびValid_Bは両者とも一「1」に設定される。注目すべきことに、フォワーディングユニット120Nは、経路Nから経路BにCRC_Bを出力する/送る(上述のように、CRCユニット110N/経路NについてのValid_B=1)。このように、CRCユニット110NからのCRC_Bは、たとえば排他的or演算を実行する結合器190において、CRCユニット110BからのCRC_Aと組合される。組合されたCRC値は次に、アンロールユニット130Bおよび選択ユニット140によって受信される。さらに、選択ユニット140は、最終CRC値として出力すべき、経路B上の組合されたCRC値を選ぶ。たとえば、選択ユニット140は、経路BについてのValid_A信号を調べてもよく、これは「1」に設定されているので、パケットが現在のCRCユニット110B内でまたは経路Bに沿って終了したことを示す。
【0044】
さらに、新しいパケットが経路B上のデータ内で始まりもする。Valid_Bも一「1」に設定されるため、フォワーディングユニット120Bは、図1に示される接続に沿ってCRC_Bをフォワーディングする。
【0045】
CRCユニット110Aにおいて、図4の例Cの512ビットが処理され、CRC_AおよびCRC_Bが出力される。EoP信号は経路A上のデータ内に見出される。このように、Valid_A=1である一方で、Valid_B=0である。CRCユニット110AのCRC_Aの値は、たとえば排他的or演算を実行する結合器190においてCRCユニット110BからのCRC_B値と組合される。組合されたCRC値は次に、アンロールユニット130Aおよび選択ユニット140によって受信される。Valid_A=1であるので、選択ユニット140は、経路Aに沿う組合されたCRC値が最終的なCRC値として出力されるのを許容する。注目すべきことに、この例では、単一の1536ビットワードについて、選択ユニット140によって2つのCRC値が最終的なCRC値として並列に出力される。
【0046】
以上の例は本実施形態のいくつかの特徴および利点を示すが、いくつかの事例ではパケットは複数のワードに跨ってもよいことにも留意すべきである。この状況も説明するため、CRC回路中の最後の経路(たとえば、図1のCRC回路100中の経路A)の出力を、後のサイクルで処理すべき次のデータワードのシードCRC値として用いる。図1に示されるように、値CRC_accum_new170は、CRC_accumレジスタ160への入力を備える。このように、たとえば、CRC回路100の経路B中で開始し次のデータワード内で終了するパケットについては、フォワーディングユニット120Bは、CRCユニット110AのCRC_AおよびCRC_Bの両者と組合せるべきCRCユニット110BからのCRC_B値をフォワーディングする。上の経路BからのCRC_Bは、ユニット110AのCRC_Aと組合される。しかしながら、パケットは経路A上で終了しないので、CRCユニット110AのCRC_Aは無効であり(Valid_A=0)、選択ユニット140は、単にこの組合されたCRC値を無視する。一方で、ユニット110BからのCRC_Bは、(たとえば、排他的orを介して)ユニット110AからのCRC_Bと組合され、この組合されたCRC値は有効であり、次のデータワードのためのシードCRC値、すなわちCRC_accum_new170である。
【0047】
特定のCRCユニット/経路についてValid_B=1である場合、経路のフォワーディングユニットは、1つよりも多くの他の経路にCRC_B値をフォワーディングしてもよいことにも留意すべきである。たとえば、フォワーディングユニット120Nは、経路BおよびAの両方にCRCユニット110NのCRC_B値をフォワーディングしてもよい。しかしながら、経路N上で開始するまたは進行中のパケットは、経路A上ではなく、経路B上で終了してもよい。その結果、経路NのCRC_B値は、経路Bのユニット110Bの出力CRC_A値とのみ組合されるべきであり、経路A上では無視されるべきである。この目的を達成するため、1つの実施形態では、CRC回路100は連続した検査回路をさらに含んでもよい。
【0048】
図5は、隣接する経路/CRCユニット間でパケットが連続しているか否かを検査するための検査回路500の例を示す。図5に示されるように、経路AおよびB中にそれぞれ2つの隣接するCRCユニット510Aおよび510Bが存在する。検査ユニット530は、フォワーディングユニット520Bの出力と宛先レーンAとの間に位置する。1つの実施形態では、検査ユニットはマルチプレクサを備える。1つの実施形態では、検査ユニット530への入力のうち1つはフォワーディングユニット520Bの出力を備え、他方の入力は接地(たとえば、ゼロ「0」)を備える。さらに、1つの実施形態では、検査ユニット530は、「パケット連続」制御信号Pkt_cont(j-1, i+1)によって制御される。
【0049】
進められたCRC_accumまたはCRC_Bは、パケットがユニットiよりも上で終了すれば、ユニットiのCRC_Aとは組合されないことがある。たとえば、ユニットjからの進められたCRC_Bは、パケットがユニット(j−1)とユニット(i+1)との間で連続していれば、ユニットiのCRC_Aと組合される。さらに、進められたCRC_accumは、パケットがいちばん上のユニットとユニット(i+1)との間で連続していれば、ユニットiのCRC_Aと組合される。同様に、進められたCRC_accumまたはCRC_Bは、パケットが現在のデータワード内で終了すれば、新しいCRC_accumを生成するのには用いられないことがある。たとえば、ユニットjからの進められたCRC_Bは、パケットがユニット(j−1)とユニット0との間で連続していれば、積算には用いられない。パケットがいちばん上のユニットとユニット0との間で連続していれば、(最後のデータワードからの)進められたCRC_accumも積算に用いられる。1つの実施形態では、ユニット同士の間のSoPおよびEoPビットを見ることによって、パケットがユニット同士の間で連続しているか否かが判断される。応じて、図5に示されるように、検査ユニット530は、Pkt_cont(j-1, i+1)がSoPおよびEoP信号に基づいて生成される信号であり、かつパケットがユニット(j−1)と(i+1)との間で(たとえば、それぞれユニット510Aとユニット510Bとの間で)連続しているか否かを示す場合に、進められたCRC(CRC_B)を転送すべきかどうかを判断する。同様の態様で異なる連続性検査を行なうように、多数の同様の検査ユニットが異なる経路の間に位置してもよいことに留意すべきである。
【0050】
進められたCRCがユニットに転送されるべきか否かを決めるとともに、1つの実施形態では、ユニットが進められるCRCを受付けることを望むか否かを決めることも必要である。パケットが同じユニット内で開始しかつ終了する場合、このユニットのCRC_Aは、いずれの進められるCRCとも組合される必要がない。図6は、経路上でおよび/またはCRCユニットを通して処理されるビットについてのいくつかの例示的なシナリオと、進められたCRC値を受付けるべきか否かについての判断とを有するタイミング図600を示す。1つの実施形態では、経路内に存在し得るSoPおよびEoP信号は、より高いユニットからおよびCRC_accumレジスタから、進められたCRCをユニット/経路が受付けるべきか否かを判断することができる。ここで、「*」は「無関係」を意味する。なぜなら、これらの場合、ユニットのCRC_A出力は無効だからである。1つの実施形態では、「フォワーディング受付」Accept_Fwd信号は単一のビットを備え、これを、図5中の検査ユニット530への付加的な制御信号として用いてもよい。別の実施形態では、別個の制御論理が同じ経路内に位置して、Accept_Fwd信号に従うフォワーディングまたは阻止を達成してもよい。
【0051】
図7は、巡回冗長検査を行なうための方法700のブロック図を示す。たとえば、上述の実施形態のうち任意の1つ以上に従う回路/装置によって方法700を行なうことができる。1つの実施形態では、本開示に従うコンピュータ読出可能媒体は、方法700のステップ、機能、または動作を行なうようにプログラマブル装置がプログラミングされるようにする一連の命令を記憶する。方法はステップ702で開始し、ステップ710に進む。
【0052】
ステップ710で、方法700は入力データワードを受信する。たとえば、方法は、1024ビット幅以上のデータバスを介して並列データを受信し得る。
【0053】
ステップ720で、方法700は、入力データワードを複数の経路に分割する。たとえば、方法は、データワードを並列処理のためのいくつかの等しいサイズの経路に分割してもよい。1つの実施形態では、経路の各々は512ビット幅である。
【0054】
ステップ730で、方法700は、経路の各々をたとえば並列に処理する。1つの実施形態では、経路の各々を処理することは、経路内で終了するパケットの巡回冗長検査(CRC)値を算出することと、経路内で開始するまたは進行中のパケットの巡回冗長検査値を算出することとを含む。
【0055】
1つの実施形態では、各経路毎に、処理することは、経路を複数のレーンに分割することを備える。たとえば、レーンの各々は、経路からの等しい数の一連のバイトを備えてもよい。1つの実施形態では、各レーン毎に、方法は部分的CRC値を計算し、部分的CRC値を「より下の」レーン(概して他のレーン)にフォワーディングする。1つの実施形態では、フォワーディングすることは、現在のレーンから宛先レーンへの距離に応じた部分的CRC値の行列変換を備える。1つの実施形態では、各レーン毎に、方法はさらに、たとえば排他的or演算を用いて、そのレーンについて算出されるCRC値を、任意の「より上の」レーン(概して他のレーン)からレーンに進められる任意のCRC値と組合せる。最終的に、方法は、レーンの1つから組合されたCRC値を選択して、特定のレーン中で検出され得るパケット信号の終了に基づいて経路内で終了するパケットのCRC値として出力してもよい。同様に、方法は、デフォルト条件(たとえば、レーンのうちいずれにも、検出されるパケット信号の開始が存在しない場合、パケットが経路の中で始まっておらず、上方のいずれかの経路の中でまたは先のデータワードの中で開始したと仮定される場合)に基づいて、またはレーンのうち1つ内でのパケット信号の開始の検出に基づいて、経路を通して開始するまたは連続的なパケットの組合されたCRC値を選択して出力してもよい。
【0056】
ステップ740で、方法は、少なくとも第1の経路から少なくとも第2の経路にCRC値をフォワーディングする。たとえば、パケットは、第1の経路中で開始してもよく、または連続的であってもよい。このように、経路内で開始するまたは連続的であるパケットの部分的CRC値は、「より下の」1つ以上の経路(たとえば、パケットが終了する経路)の他の部分的CRC値と組合される。1つの実施形態では、フォワーディングすることは、宛先経路に従う部分的CRC値の行列変換を備える。たとえば、宛先経路が現在の経路より2つ前の経路であれば、行列変換は、経路当たりのビットの数の2倍に基づいていてもよい。1つの実施形態では、ステップ740は、複数の経路から複数の異なる宛先経路にCRC値をフォワーディングすることを備えることに留意すべきである。さらに、1つの実施形態では、ステップ740で、以前のデータワードからの積算CRC値も経路のうち1つ以上に進められてもよい。
【0057】
ステップ750で、方法700は、少なくとも第1の経路内で開始するまたは進行中のパケットの少なくとも第1のCRC値を、少なくとも第2の経路内で終了するパケットの少なくとも第2のCRC値と組合せる。1つの実施形態では、組合せることは、2つのCRC値に対して排他的or演算を行なうことを備える。1つの実施形態では、ステップ750は、2つの経路の間でパケットが連続的であるか否かをまず検査することを含む。たとえば、同じパケットは、第1の経路上で開始し、第2の経路上で終了してもよい。このように、2つの経路からのCRC値が組合される。しかしながら、2つの経路にわたって同じパケットの連続性が存在しなければ、CRC値を組合せるべきではない。これに代えてまたはこれに加えて、1つの実施形態では、ステップ750は、以前のデータワードからの積算CRC値を現在のデータワードの1つ以上の経路からの1つ以上のCRC値と組合せることを備えてもよい。
【0058】
オプションのステップ760で、方法700は積算CRC値を出力する。たとえば、パケットがデータワードの最後の経路中で進行中であるまたは連続的であり、かつパケットが現在のデータワード内で終了していなければ、積算CRC値を出力し、かつ(パケットデータが終了し得る)次のデータワードに対する方法700のその後の反復のために記憶すべきである。
【0059】
ステップ770で、方法700は少なくとも1つのCRC値をアンロールする。たとえば、パケットはレーン内の任意の位置で終了してもよい。このように、CRC値は、パケットの終わりとレーンの終わりおよび/または経路の終わりとの間の任意の空ビットに対処するように調節される必要があり得る。たとえば、1つの実施形態では、アンロールすることは、生成関数/多項式および多数の空ビットに従うCRC値の行列変換を備える。1つの実施形態では、方法700は、2つ以上のCRC値をアンロールすることを備える。たとえば、2つ以上のパケットは、本実施形態では、同じデータワード内で終了し得る。このように、ステップ770で、空ビットのそれぞれの数に基づいて、CRC値の各々に対して別個のアンロール動作を行なってもよい。
【0060】
ステップ780で、方法は、1つ以上のCRC値を選択し、最終的なCRC値としてCRC値を出力する。たとえば、1つ、2つ、またはいくつかのパケットは、すべて同じデータワード内で終了してもよい。たとえば、ワードサイズがNであれば、経路サイズは512であり、最小パケットサイズも512であり、同じワード内で潜在的に終了するパケットの数はn=N/512である。N=1536であれば、3つの経路が存在し、ワード内で終了するパケットが潜在的に3つある。しかしながら、経路の各々はCRC出力を有し得るが、出力のすべてが必ずしも有効な最終CRC値であるわけではない。たとえば、パケットは、真ん中の経路ではなく、第1の経路内および最後の経路内で終了することがある。このように、ステップ780で、方法700は、有効なCRC値のみを選択して、最終的なCRC値として出力してもよい。
【0061】
ステップ780の後に、方法700はステップ795に進み、ここで方法が終了する。
具体的に特定されていないが、方法700の1つ以上のステップまたは動作は、特定の適用例にとって要件とされるように、記憶する、表示する、および/または出力するステップを含んでもよいことに留意すべきである。換言すると、方法において論じられる任意のデータ、記録、フィールド、表、および/または中間の結果を、特定の適用例の必要に応じて、別の装置に記憶する、表示する、および/または出力することができる。さらに、判断動作を記載するまたは決定に係る、図7中のステップ、動作、またはブロックは、必ずしも、判断動作の両方の分岐を実施することを要件とするとは限らない。換言すると、判断動作の分岐のうち1つをオプションのステップとみなすことができる。
【0062】
図8は、本明細書中に記載の機能のうちいくつかまたはすべてを行なうのに用いるのに好適な汎用コンピュータ、計算装置、または計算システム800の高レベルブロック図を描く。図8に描かれるように、システム800は、プロセッサ素子802(たとえば、CPU)、たとえばランダムアクセスメモリ(RAM)および/または読出専用メモリ(ROM)などのメモリ804、冗長巡回検査を行なうためのモジュール805、ならびにさまざまな入力/出力装置806(たとえば、メモリ装置、テープドライブ、フロッピー(登録商標)ドライブ、ハードディスクドライブもしくはコンパクトディスクドライブ、受信機、送信機、スピーカ、ディスプレイ、音声合成器、出力ポート、およびユーザ入力装置(キーボード、キーパッド、マウスなど)を含むがこれらに限定されない記憶装置)を備える。
【0063】
たとえば、特定用途向け集積回路(ASIC)、FPGAなどのPLD、汎用コンピュータ、またはマイクロプロセッサなどの任意の他のハードウェア均等物を用いて、ソフトウェアとハードウェアとの組合せで本開示の実施形態を実現することができる。1つの実施形態では、冗長巡回検査を行なうための本モジュールまたはプロセスをメモリ804にロードし、プロセッサ802によって実行して、以上で論じたような機能を実現することができる。このため、本開示の実施形態の(関連のデータ構造を含む)冗長巡回検査を行なうための本モジュールまたはプロセス805を、たとえば、RAMメモリ、磁気もしくは光学ドライブ、またはディスケットなどの非一時的コンピュータ読出可能記憶媒体上に記憶することができる。
【0064】
本開示の実施形態は、たとえば、PLDおよび/またはFPGAなどの、同調可能ICによって全体がまたは部分的に実現されてもよい。より具体的には、プログラマブル論理装置(PLD)は、さまざまな選択された機能を実現するようにユーザがプログラミング可能な汎用装置である。1つの種類のPLDは、典型的には、コンフィギュラブル論理ブロック(CLB)のアレイおよび複数の入力/出力ブロック(IOB)を含むフィールドプログラマブルゲートアレイ(FPGA)である。CLBは個別にプログラミング可能であり、二、三の入力信号に対してさまざまな論理機能を行なうように構成可能である。IOBは、CLBからFPGAの外部ピンへ出力信号を駆動する、および/または外部のFPGAピンから入力信号を受信するように構成可能である。FPGAは、さまざまなCLBおよびIOBの間で選択的に信号を経路決めして多数の入力信号のより複雑な機能を生じるようにプログラミング可能なプログラマブル相互接続構造も含む。CLB、IOB、およびプログラマブル相互接続構造は、(たとえば、汎用コンピュータ800からの)コンフィギュレーションデータを、CLB、IOB内のさまざまなスイッチおよびマルチプレクサならびに相互接続構造を制御する関連のメモリセル中にロードすることによってプログラミングされて、コンフィギュレーションデータによって特定される論理および経路決め機能を実現してFPGAにおいてユーザ設計を実現する。FPGAは、他のプログラミング可能なおよびプログラミング不可能なリソースも含んでもよい。そのため、図1図3と関連して以上で示される回路は、図1図3の回路のうち任意の1つ以上の任意の1つ以上の構成要素の均等の論理演算を行なう複数のCLBにおいて実現されてもよい。たとえば、1536ビット幅のデータバス上で受信されるパケットに対してCRCを行なうための本開示の実施形態は、約15,000個のルックアップテーブル(LUT)、3,000個のレジスタ、および4,500個のスライスを用いてFPGA上で実現された。
【0065】
以上は本開示の1つ以上の局面に従う例示的な実施形態を説明するが、以下の請求項およびその均等物によって定められるその範囲から逸脱することなく、本開示の1つ以上の局面に従う他のおよびさらなる実施形態を考案してもよい。ステップを列挙する請求項はステップの任意の順序を暗示するものではない。商標は、それらのそれぞれの所有者の財産である。
図1
図2
図3
図4
図5
図6
図7
図8