(57)【要約】  一実施形態では、ノードは、前記リンクで送信すべきパケットをスケジュールするように構成されたパケットスケジューラと、前記パケットスケジューラに結合され、前記リンクで前記パケットを送信するように構成されたインタフェース回路とを備える。前記インタフェース回路は、前記パケットをカバーするエラー検出データを生成するように構成され、前記エラー検出データは、前記リンクにおいてパケットの間に送信される。前記インタフェース回路は、エラー検出データの１つの送信で最大Ｎ個のパケットをカバーするように構成され、Ｎは２以上の整数である。エラー検出データの１つの送信によってカバーされる前記パケットの数は、送信するパケットが使用可能かどうかに応じて、前記インタフェース回路によって決定される。別の実施形態では、前記インタフェース回路は、前記リンクで消費されている帯域幅の量に基づいて、前記リンクでのエラー検出データの送信の頻度を動的に変更するように構成されている。
2010514264.tif 000002
【特許請求の範囲】
【請求項１】
リンクに結合するように構成されたノードであって、
前記リンクで、それぞれ１つ以上のセルを含むパケットを送信するように構成された送信回路と、
前記送信回路に結合され、前記送信回路によって送信すべきセルをスケジュールするように構成されたセルスケジューラとを備え、前記セルスケジューラは、送信すべき少なくとも１つのエラー検出セルをスケジュールするように構成され、前記エラー検出セルは、先行パケットをカバーし、前記セルスケジューラは、第２のパケットがスケジュールに使用可能である場合に、前記エラー検出セルの代わりに前記第２のパケットのセルをスケジュールするように構成され、前記エラー検出セルは、その後スケジュールされる際に、前記先行パケットと前記第２のパケットとをカバーするノード。
【請求項２】
前記セルスケジューラは１つ以上の追加のパケットがスケジュールに使用可能である場合に、前記１つ以上の追加のパケットのセルをスケジュールするように構成され、前記エラー検出セルは、その後スケジュールされる際に、前記１つ以上の追加のパケットもカバーする請求項１に記載のノード。
【請求項３】
前記リンクは、前記パケットデータを伝達するためのラインと１本以上の制御ラインとを有し、前記送信回路は、所定のセルを識別するために前記制御ラインにおいてデータを符号化するように構成され、エラー検出セルに対する前記符号化は、前記第２のパケットの先頭セルに対する前記符号化とは異なる請求項１に記載のノード。
【請求項４】
コマンドセルに対する前記符号化は、前記第２のパケットの前記先頭セルに対する前記符号化および前記エラー検出セルに対する前記符号化とは異なる請求項３に記載のノード。
【請求項５】
前記エラー検出セルは、巡回冗長検査（ＣＲＣ）データを含む請求項１に記載のノード。
【請求項６】
前記セルケジューラは、前記リンクで消費されている帯域幅の量に応じて、前記第２のパケットまたは前記エラー検出セルのいずれをスケジュールするかを動的に決定するように構成されている請求項１に記載のノード。
【請求項７】
前記消費されている帯域幅の量が閾値レベルを越えている場合には、前記第２のパケットがスケジュールされ、前記消費されている帯域幅の量が閾値を下回っている場合には、前記エラー検出セルがスケジュールされる請求項６に記載のノード。
【請求項８】
前記先行パケットおよび前記第２のパケットは、それぞれ、コマンドを含むがデータは含まない請求項１に記載のノード。
【請求項９】
前記エラー検出セルは、複数のエラー検出セルの１つであり、前記先行パケット、およびスケジュールされている場合には前記第２のパケットをカバーしている請求項１に記載のノード。
【請求項１０】
リンクに結合するように構成されたノードであって、
前記リンクで送信すべきパケットをスケジュールするように構成されたパケットスケジューラと、
前記パケットスケジューラに結合され、前記リンクで前記パケットを送信するように構成されたインタフェース回路とを備え、前記インタフェース回路は、前記パケットをカバーするエラー検出データを生成するように構成され、前記エラー検出データは、前記リンクにおいてパケットの間に送信され、前記インタフェース回路は、エラー検出データの１つの送信で最大Ｎ個のパケットをカバーするように構成され、Ｎは２以上の整数であり、エラー検出データの１つの送信によってカバーされる前記パケットの数は、送信するパケットが使用可能かどうかに応じて、前記インタフェース回路によって決定されるノード。
【請求項１１】
前記インタフェース回路は、前記リンクで消費されている帯域幅の量に応じて、エラー検出データの１つの送信によってカバーされる前記パケットの数を動的に変更するように構成されている請求項１０に記載のノード。
【請求項１２】
前記消費されている帯域幅の量が閾値未満の場合には前記パケットの数が少なく、前記消費されている帯域幅の量が閾値を越える場合には前記パケットの数が多い請求項１１に記載のノード。
【請求項１３】
パックされた前記パケットは、コマンドを含むが、データを含まない請求項１０に記載のノード。
【請求項１４】
リンクで送信すべきパケットをスケジュールするステップと、
前記パケットをカバーするエラー検出データを生成するステップと、
前記リンクで、前記パケットを送信し、パケットの間に前記エラー検出データを送信するステップとを含み、前記リンクでの前記エラー検出データの１つの送信は最大Ｎ個の先行パケットをカバーし、Ｎは２以上の整数であり、エラー検出データの１つの送信によってカバーされる前記パケットの数は、送信するパケットが使用可能かどうかに応じて決定される方法。
【請求項１５】
前記リンクで消費されている帯域幅の量に応じて、エラー検出データの１つの送信によってカバーされる前記パケットの数を動的に変更するステップを更に含む、請求項１４に記載の方法。
【請求項１６】
前記消費されている帯域幅の量が閾値未満の場合にはエラー検出データの１つの送信によってカバーされる前記パケットの数が少なく、前記消費されている帯域幅の量が閾値を越える場合にはエラー検出データの１つの送信によってカバーされる前記パケットの数が多い、請求項１７に記載の方法。
【請求項１７】
パックされた前記パケットは、コマンドを含むが、データを含まない、請求項１４に記載の方法。
【請求項１８】
前記エラー検出データは巡回冗長検査（ＣＲＣ）データを含む、請求項１４に記載の方法。
【請求項１９】
リンクに結合するように構成されたノードであって、
前記リンクで送信すべきパケットをスケジュールするように構成されたパケットスケジューラと、
前記パケットスケジューラに結合され、前記リンクで前記パケットを送信するように構成されたインタフェース回路とを備え、前記インタフェース回路は、前記パケットをカバーするエラー検出データを生成するように構成され、前記インタフェース回路は、前記リンクで消費されている帯域幅の量を監視して、前記帯域幅の量に基づいて、前記リンクでのエラー検出データの送信の頻度を動的に変更するように構成されているノード。
【請求項２０】
前記消費されている帯域幅の量が閾値未満の場合には前記送信の頻度が高く、前記消費されている帯域幅の量が閾値を越える場合には前記送信の頻度が低い、請求項１９に記載のノード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステムなどの電子システムのための相互接続の分野に関する。
【背景技術】
【０００２】
システム（集積回路やその他の電気デバイスなど）内の電子部品は、このような部品間のリンクなどの規定されたインタフェースを介して互いに通信する。データは、一般に、リンクを、クロック信号を基準として伝達される。すなわち、データは、クロック信号に応じて、リンクに出力され、リンクでサンプリングされる。近年では、データが、クロック信号の立ち上がりエッジ／立ち下がりエッジの両方に従って出力／サンプリングされるダブルデータレートリンクが規定されている。
【０００３】
リンクに関連するクロックの周波数は、リンクの幅（転送されるデータのビットの単位で表す）と共に、リンクの帯域幅（単位時間当たりに転送されるデータ量）を規定する。帯域幅を上げる（かつ多量の転送を行うためにレーテンシを低減させる）１つの方法として、クロック周波数を上げる方法がある。しかし、周波数を上げると、短いクロックサイクルにおいて、ノイズ、クロックの不安定性、スキュー、立ち上がりおよび立ち下がり時間などの要因が大きな要因になるのに伴い、エラーレートも上昇してしまう。見方を変えると、データがリンクに存在している時間が短くなるほど、エラーの許容範囲が小さくなってしまう。ある点で、エラーレートが、信頼性に影響するレベルにまで上昇してしまう。
【０００４】
エラーレートの上昇を緩和するために、エラー検出（場合によっては訂正）をリンクに実装させることができる。例えば、リンクに巡回冗長検査（cyclical redundancy check：ＣＲＣ）が実装されることが多い。ＣＲＣでは、リンクでデータが転送されるたび、データに続いて、データから生成されたＣＲＣ符号が送信される。受信側が、同じＣＲＣ符号を生成して、生成したＣＲＣ符号を受信した符号と比較し、エラーを検出しうる。受信側はエラーを送信側に報告し、送信側がデータを再送したり、ほかの訂正動作を行いうる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
比較的多量のデータ転送の場合には、転送の終わりにＣＲＣ符号を追加しても、（追加される符号が転送されるデータと比べて小さいため）帯域幅にさほど影響しない。しかし、受信側が、通常は、ＣＲＣを受信するまで、ＣＲＣがカバーするデータの全体を記憶しなければならないため、ＣＲＣ符号はレーテンシに影響する。ＣＲＣによりデータが正しいことが検証されると、データを転送することができる。多くの場合、転送の先頭のデータが最も重要である（例えば、キャッシュシステムでは、現在要求されているデータが最初に転送され、その後、記憶するためにキャッシュブロックの残りが転送される）。このような場合、レーテンシの増大により性能が低下する。
【０００６】
更に、コヒーレントなシステムでは、部品間でやり取りされる転送の多くは比較的短いメッセージ（例えばデータの最新のコピーのプローブ検索、応答のプローブ、転送元と転送先に対する完了通知など）である。ＣＲＣがこのような短いメッセージに与える影響は大きく、メッセージのサイズを最大で１００％増加させる（メッセージのサイズがＣＲＣ符号と同じサイズの場合）。また、サイズの増加が５０％または３３％となることは普通である。コヒーレントなシステムでは、リンクでの転送の多くがこのような短いメッセージであるため、ＣＲＣを追加するために消費される帯域幅の増加が極めて大きくなる。
【課題を解決するための手段】
【０００７】
一実施形態では、ノードは、リンクに結合するように構成されている。前記ノードは、前記リンクで、それぞれ１つ以上のセルを含むパケットを送信するように構成された送信回路を有する。前記ノードは、前記送信回路に結合され、前記送信回路によって送信すべきセルをスケジュールするように構成されたセルスケジューラを更に有する。前記セルスケジューラは、送信すべき少なくとも１つのエラー検出セルをスケジュールするように構成され、前記エラー検出セルは、先行パケットをカバーし、前記セルスケジューラは、第２のパケットがスケジュールに使用可能である場合に、前記エラー検出セルの代わりに前記第２のパケットのセルをスケジュールするように構成されている。前記エラー検出セルは、その後スケジュールされる際に、前記先行パケットと前記第２のパケットとをカバーする。
【０００８】
別の実施形態では、ノードは、リンクに結合するように構成され、前記リンクで送信すべきパケットをスケジュールするように構成されたパケットスケジューラと、前記パケットスケジューラに結合されたインタフェース回路とを備える。前記インタフェース回路は、前記リンクで前記パケットを送信するように構成され、前記パケットをカバーするエラー検出データを生成するように構成されている。前記エラー検出データは、前記リンクをパケットの間に送信され、前記インタフェース回路は、エラー検出データの１つの送信で最大Ｎ個のパケットをカバーするように構成されている（Ｎは２以上の整数である）。エラー検出データの１つの送信によってカバーされる前記パケットの数は、送信するパケットが使用可能かどうかに応じて、前記インタフェース回路によって決定される。
【０００９】
別の実施形態では、ノードは、リンクに結合するように構成され、前記リンクで送信すべきパケットをスケジュールするように構成されたパケットスケジューラを有する。インタフェース回路が、前記パケットスケジューラに結合され、前記リンクで前記パケットを送信するように構成され、前記パケットをカバーするエラー検出データを生成するように構成されている。前記インタフェース回路は、前記リンクで消費されている帯域幅の量を監視して、前記帯域幅の量に基づいて、前記リンクでのエラー検出データの送信の頻度を動的に変更するように構成されている。
【００１０】
以下の詳細な説明は添付の図面を参照している。図面の説明は「図面の簡単な説明」に記載されている。
【図面の簡単な説明】
【００１１】
【図１】コンピュータシステムの一実施形態を示すブロック図。
【図２】図１に示した２つのノードの一実施形態をより詳細に示すブロック図。
【図３】制御レジスタ用の制御フィールドの一実施形態を示すブロック図。
【図４】コマンドセルをスケジュールするための、図２に示したセルスケジューラの一実施形態の動作を示すフローチャート。
【図５】データセルをスケジュールするための、図２に示したセルスケジューラの一実施形態の動作を示すフローチャート。
【図６】ＣＲＣ動作を動的に変更するための、図２に示したセルスケジューラの一実施形態の動作を示すフローチャート。
【図７】受信器の一実施形態の動作を示すフローチャート。
【図８】相互接続上の制御符号の一実施形態を示す表。
【図９】図８に示した符号の例を示すブロック図。
【図１０】相互接続上の制御符号の別の実施形態を示す表。
【発明を実施するための形態】
【００１２】
本発明は、さまざまに変形されたり、代替形態を取りうるが、その特定の実施形態が、例として図面に図示され、かつ本明細書に詳細に記載される。しかし、図面および詳細な説明は、本発明を開示の実施形態に限定することを意図するものではなく、添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれるすべての変形例、均等物および代替例を含むことを意図したものであることが理解されるべきである。
【００１３】
以下の説明は、リンクにおいてエラー検出データを実装するコンピュータシステムに関するものである。しかし、リンクを介して部品間でデータを通信するどのような電子システムも、本明細書の説明を実施することができる。一般に、リンクは、ある部品から別の部品への通信経路を有する。実施形態によって、リンクは双方向リンクでも、一方向リンクでもよい。リンクは、どのような幅を有してもよく、リンクでデータをクロック制御する１つ以上のクロックサイクルと関連付けられうる。また、エラー検出データの例としてＣＲＣを用いる。一般に、ＣＲＣは、送信器と受信器が使用する予め定義された方式に従って、ＣＲＣがカバーするデータビットの組み合わせとして生成される。しかし、どのようなエラー検出データでも使用することもできる。一般に、エラー検出データには、送信データ中のエラーの検出（任意選択で訂正）を可能にする冗長なデータが含まれる。例えば、エラー検出データは、パリティをベースとするものであっても、シングルビットエラーを訂正し、ダブルビットエラーを検出するものなど、メモリシステムで使用される各種のエラー検出／訂正符号（error  detection/correction code：ＥＣＣ）のようなものであってもよい。これよりも多くのエラーを訂正および検出するＥＣＣが使用されてもよい。例えば、エラー検出データは、ハミング符号またはリード−ソロモン符号をベースとしたものであっても、エラーを検出および／または訂正するために定義された他のどのような符号であってもよい。１つの（an instance）エラー検出データが、データの組を「カバーする」ということができる。エラー検出データによりデータ中のエラーを検出できる場合、このエラー検出データは当該データを「カバーする」という（しかし、エラー検出データには限界があり、このため、大きすぎるデータ中のエラーは、エラー検出データがエラーのあるデータをカバーしている場合であっても検出されないこともある）。
【００１４】
図１を参照すると、コンピュータシステム３００の一実施形態が示される。図１の実施形態では、コンピュータシステム３００は、複数の処理ノード３１２Ａ，３１２Ｂ，３１２Ｃ，３１２Ｄを備える。各処理ノードは、処理ノード３１２Ａ〜３１２Ｄにそれぞれ設けられているメモリコントローラ３１６Ａ〜３１６Ｄを介して各々のメモリ３１４Ａ〜３１４Ｄに結合されている。また、処理ノード３１２Ａ〜３１２Ｄは、処理ノード３１２Ａ〜３１２Ｄ同士が通信するためのインタフェース回路を備える。例えば、処理ノード３１２Ａは、処理ノード３１２Ｂと通信するためのインタフェース回路３１８Ａと、処理ノード３１２Ｃと通信するためのインタフェース回路３１８Ｂと、更に別の処理ノード（図示せず）と通信するためのインタフェース回路３１８Ｃとを備える。同様に、処理ノード３１２Ｂは、インタフェース回路３１８Ｄ，３１８Ｅ，３１８Ｆを備え、処理ノード３１２Ｃは、インタフェース回路３１８Ｇ，３１８Ｈ，３１８Ｉを備え、処理ノード３１２Ｄは、インタフェース回路３１８Ｊ，３１８Ｋ，３１８Ｌを備える。処理ノード３１２Ｄは、インタフェース回路３１８Ｌを介して複数の入出力デバイス（例えばデイジーチェーン構成のデバイス３２０Ａ〜３２０Ｂ）と通信するように結合される。その他の処理ノードも、同様にほかのＩ／Ｏデバイスと通信してもよい。
【００１５】
処理ノード３１２Ａ〜３１２Ｄは、処理ノード間で通信を行うためにパケットベースのインタフェースを実装している。本実施形態では、このインタフェースは、一方向リンクの組として実施されてもよい（例えば、リンク３２４Ａは、処理ノード３１２Ａから処理ノード３１２Ｂにパケットを送信するために使用され、リンク３２４Ｂは、処理ノード３１２Ｂから処理ノード３１２Ａにパケットを送信するために使用される）。リンクのその他の組３２４Ｃ〜３２４Ｈは、図１に示すように、その他の処理ノード間でパケットを送信するために使用される。一般に、リンクの各組３２４は、１本以上のデータラインと、このデータラインに対応する１本以上のクロックラインと、伝達するパケットの種類を示す１本以上の制御ラインとを含みうる。このリンクは、処理ノード間の通信ではキャッシュコヒーレントな方法で動作するか、処理ノードとＩ／Ｏデバイス間の通信（あるいは、バスブリッジから、ＰＣＩ（Peripheral Component Interconnect）バスまたはＩＳＡバス（Industry Standard Architecture）バスなどの従来の構成のＩ／Ｏバスへの通信）では非コヒーレントな方法で動作しうる。また、図に示すように、このリンクは、Ｉ／Ｏデバイス間のデイジーチェーン構成を使用して、非コヒーレントな方法で動作することもできる。１つの処理ノードから別の処理ノードに送信されるパケットが、１つ以上の中間ノードを通過しうる点に留意されたい。例えば、図１に示すように、処理ノード３１２Ａによって処理ノード３１２Ｄに送信されるパケットは、処理ノード３１２Ｂか処理ノード３１２Ｃのいずれかを通過しうる。適したルーティングアルゴリズムであれば、どのようなものでも使用することができる。コンピュータシステム３００の別の実施形態では、処理ノードの数が、図１に示した実施形態よりも増減してもよい。
【００１６】
一般に、パケットは、ノード間のリンク３２４上で１つ以上のビットタイミング（bit time）として送信されうる。所定のビットタイミングは、対応するクロックライン上でのクロック信号の立ち上がりまたは立ち下がりによって参照される。すなわち、立ち上がりエッジと立ち下がりエッジの両方がデータの転送に使用され、この結果、データレートがクロック周波数の２倍になる（ダブルデータレートまたはＤＤＲ）。パケットには、トランザクションを開始するための要求パケット、キャッシュのコヒーレンシを維持するためのプローブパケット、プローブおよび要求に応答する（およびトランザクションの転送元／転送先による完了を示す）ための応答パケットなどがある。一部のパケットは、データの移動を示し、移動対象のデータがデータ移動パケットに含まれうる。例えば、ライト要求にはデータが含まれる。ダーティデータを有するプローブ応答およびリード応答は、いずれにもデータが含まれる。このため、一般に、パケットには、パケットと、その転送元および転送先などを定義するコマンド部分が含まれうる。パケットは、任意選択でコマンド部分の後にデータ部分を有しうる。データは、コヒーレントなキャッシュ可能動作を実現するために、キャッシュブロックのサイズであっても、これより小さくてもよい（例えばキャッシュ不可能なリード／ライトなど）。
【００１７】
処理ノード３１２Ａ〜３１２Ｄは、メモリコントローラおよびインタフェース論理に加えて、１つ以上のプロセッサを有していてもよい。概して、処理ノードは、少なくとも１つのプロセッサを備えており、必要に応じてメモリおよびその他の論理回路と通信するためのメモリコントローラを任意選択で備えていてもよい。１つ以上のプロセッサが、処理ノード内にまたは処理ノードを形成するチップマルチプロセッシング（ＣＭＰ）またはチップマルチスレッド（ＣＭＴ）対応の集積回路を備えても、あるいは、処理ノードが、ほかの任意の望ましい内部構造を備えてもよい。任意のレベルの集積化、または任意の数の別個の部品によって、ノードを形成することができる。別のタイプのノードが、任意の望ましい回路およびリンクにおいて通信するための回路を備えていてもよい。例えば、一実施形態では、Ｉ／Ｏデバイス３２０Ａ〜３２０ＢがＩ／Ｏノードであってもよい。
【００１８】
メモリ３１４Ａ〜３１４Ｄは任意の適したメモリデバイスを備えうる。例えば、メモリ３１４Ａ〜３１４Ｄは、１つ以上のラムバスＤＲＡＭ（ＲＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、ＤＤＲ  ＳＤＲＡＭ、スタティックＲＡＭなどを備えてもよい。コンピュータシステム３００のアドレス空間は、メモリ３１４Ａ〜３１４Ｄに分割されている。各処理ノード３１２Ａ〜３１２Ｄは、アドレスとメモリ３１４Ａ〜３１４Ｄとの対応関係、すなわち、特定のアドレスについてメモリ要求を転送すべき処理ノード３１４Ａ〜３１４Ｄの決定に用いるメモリマップを備えていてもよい。一実施形態では、コンピュータシステム３００内のアドレスのコヒーレンシポイント（coherency point）は、そのアドレスに対応しているバイトを記憶しているメモリに結合されたメモリコントローラ３１６Ａ〜３１６Ｄである。換言すれば、メモリコントローラ３１６Ａ〜３１６Ｄは、対応するメモリ３１４Ａ〜３１４Ｄへのあらゆるメモリアクセスが、キャッシュコヒーレントな方法で行われることを保証する責任を負っている。メモリコントローラ３１６Ａ〜３１６Ｄは、メモリ３１４Ａ〜３１４Ｄとインタフェースするための制御回路を備えうる。更に、メモリコントローラ３１６Ａ〜３１６Ｄは、メモリ要求をキューに記憶するための要求キューを備えていてもよい。
【００１９】
一般に、インタフェース回路３１８Ａ〜３１８Ｌは、リンクからパケットを受信すると共に、リンクに送信するパケットをバッファするための各種バッファを備えうる。コンピュータシステム３００は、パケットを送信するための任意の適切なフロー制御メカニズムを使用することができる。例えば、一実施形態では、各インタフェース回路３１８は、そのインタフェース論理に接続されているリンクの反対側にある受信器内の各タイプのバッファの数のカウントを記憶している。インタフェース論理は、パケットを記憶するための空きバッファが受信側のインタフェース論理になければ、パケットを送信しない。パケットを前方にルーティングしたことで受信側のバッファに空きが生ずると、受信側のインタフェース論理は、バッファに空きが生じたことを知らせるメッセージを、送信側のインタフェース論理に送信する。このようなメカニズムは、「クーポンベースの」システムと呼ぶことができる。
【００２０】
Ｉ／Ｏデバイス３２０Ａ〜３２０Ｂは、適したＩ／Ｏデバイスであれば、どのようなものであってもよい。例えば、Ｉ／Ｏデバイス３２０Ａ〜３２０Ｂは、別のコンピュータシステムに結合され、そのコンピュータシステムと通信するためのデバイス（ネットワークインタフェースカードやモデムなど）を含んでいてもよい。更に、Ｉ／Ｏデバイス３２０Ａ〜３２０Ｂは、ビデオアクセラレータ、オーディオカード、ハードディスクドライブもしくはフロッピーディスクドライブまたはドライブコントローラ、ＳＣＳＩ（Small Computer Systems Interface）アダプタ、テレフォニーカード、サウンドカード、およびＧＰＩＢインタフェースカードまたはフィールドバスインタフェースカードなどの各種のデータ収集カードを含んでいてもよい。更に、カードとして実装される任意のＩ／Ｏデバイスが、システム３００のメイン回路基板上の回路および／または処理ノードで実行されるソフトウェアとして実装されうる。本明細書において、「Ｉ／Ｏデバイス」との用語と「周辺機器」との用語は同義であるとされる点に留意されたい。
【００２１】
更に、１つ以上のプロセッサが、１つ以上のＩ／Ｏ相互接続および／またはメモリに対するブリッジへのプロセッサの１つ以上のインタフェースを有する、従来のパーソナルコンピュータ（ＰＣ）構成で実装されてもよい。
【００２２】
一実施形態では、リンク３２４Ａ〜３２４Ｈは、ＨｙｐｅｒＴｒａｎｓｐｏｒｔ（登録商標）（ＨＴ）コンソーシアムにより策定されたＨＴ規格（特にバージョン３）と互換であってもよい。リンクにおけるプロトコルが、上で説明したようにリンクでのコヒーレンシに対応するために、ＨＴ規格から変更されてもよい。しかし、別の実施形態では、任意のリンクが実装され、そのリンクに任意のプロトコルが実装されてもよい。更に、本明細書に記載したＣＲＣ技術が、非コヒーレントなリンクにも使用されてもよい。
【００２３】
次に図２を参照すると、ノードの一実施形態の更に詳しい詳細を示す、処理ノード３１２Ａ〜３１２Ｂの一実施形態のブロック図が示される。図に示した実施形態では、処理ノード３１２Ａは、図１に示したインタフェース回路３１８Ａのほかに、パケットスケジューラ２４、履歴バッファ２６およびプロセッサコア２８を備える。詳細には、インタフェース回路３１８Ａは、受信器回路１０、送信回路１２、セルスケジューラ１４（ＣＲＣ生成器１６を含む）、セルキュー１８、ビジーカウンタ２０、および１つ以上の制御レジスタ２２を備える。受信器１０は、処理ノード３１２Ｂからパケットを受信するためにリンク３２４Ｂに結合され、パケットスケジューラ２４に結合されている。制御レジスタ２２およびビジーカウンタ２０はセルスケジューラ１４に結合され、セルスケジューラ１４は送信回路１２およびセルキュー１８に結合されている。セルキュー１８は、送信回路１２およびパケットスケジューラ２４に結合されている。送信回路１２は、処理ノード３１２Ｂにパケットを送信するために、リンク３２４Ａに結合されている。パケットスケジューラ２４は、履歴バッファ２６、プロセッサコア２８のほか、ほかのさまざまなパケットの転送元に更に結合されている。
【００２４】
処理ノード３１２Ｂは、図１に示したインタフェース回路３１８Ｄのほかに、パケットスケジューラ４０、データバッファ４２、およびコマンドバッファ４４を備える。インタフェース回路３１８Ｄは、肯定応答（Ａｃｋ）カウンタ３０、ＣＲＣチェック回路３２、セルキュー３４、受信回路３６、および送信回路３８を備える。受信回路３６は、リンク３２４Ａ、セルキュー３４、およびＣＲＣチェック回路３２に結合されている。ＣＲＣチェック回路３２は、Ａｃｋカウンタ３０およびセルキュー３４に結合され、Ａｃｋカウンタ３０は送信器３８に更に結合され、セルキュー３４は、パケットスケジューラ４０、データバッファ４２、およびコマンドバッファ４４に更に結合されている。送信回路３８は、リンク３２４Ｂに結合されている。
【００２５】
リンク３２４Ａは、図２に更に詳細に示されており、ＣＡＤ［ｎ：０］、ＣＴＬ［ｍ：０］、およびＣＬＫ［ｍ：０］を有する。ＣＡＤラインはパケットのビットタイミングを伝達し、ＣＬＫラインは、ビットタイミングの基準となる１本以上のクロックラインを有しうる。下記に更に詳細に記載するように、ＣＴＬラインは、所定のビットタイミングに伝達されるデータのタイプを示しうる。ＣＡＤラインはｎ本存在する（ｎは、整数の二乗×８−１）。すなわち、ｎは、７、１５、３１などである。このため、各ビットタイミングにつき、２バイトのべき乗がＣＡＤラインに伝達されうる。ＣＬＫラインとＣＴＬラインはｍ本存在する（ｍ＝（ｎ＋１）÷８）。すなわち、ＣＡＤ１バイトにつき、ＣＬＫラインが１本とＣＴＬラインが１本存在する。ＣＬＫラインは、対応する８本のＣＡＤライン用のクロック基準となる。
【００２６】
リンクで転送される最小の単位を「セル」として定義するが、この幅は実施形態によって異なる。すなわち、リンクにおけるパケットのサイズが、１つのセルを越えることはなく、パケットは、セル長の整数倍である。セルは、実施形態によってどのようなサイズでもよいが、一実施形態では３２ビット（４バイト）である。リンクの幅がセルより狭い場合には、セルの送信が開始されると、そのセルの残りが連続して送信される。このため、例えば、３２ビットのセルと１６ビットのリンクが実装されており、各セルはＣＡＤラインで２つの連続するビットタイミングとして送信される。
【００２７】
パケットスケジューラ２４は、リンク３２４Ａに送信するためにパケットをスケジュールし、パケットのセルをセルキュー１８に転送しうる（または、パケットのセルがパケットスケジューラ２４に記憶されていない場合には、パケットのセルをセルキュー１８に転送させうる）。セルスケジューラ１４は、送信回路１２を介して送信するために、セルキュー１８にあるセルをスケジュールしうる。一般に、パケットのセルは、連続するビットタイミングの間にスケジュールされるが、一実施形態では、一部の非データ移動パケットが、前のデータ移動パケットのデータ内にスケジュールされてもよい。セルがスケジュールされると、セルスケジューラ１４は、セルキュー１８に、セルを送信回路１２に出力させ、送信回路１２は、リンク３２４Ａにセルを（適切なＣＴＬラインの符号を付けて）送信する。セルがスケジュールされていない場合には、セルスケジューラ１４は、ノーオペレーション（ｎｏｏｐ）コマンドの送信をスケジュールしうる。一実施形態では、ｎｏｏｐコマンドは、ノード３１２Ａにおいて、ノード３１２Ｂからパケットを受信するためにバッファが使用可能であることを示すためのバッファ解放フィールドを有しうる。実施形態によって、バッファ解放カウントが、インタフェース回路３１８Ａによって保持されても、パケットスケジューラ２４によって提供されてもよい。
【００２８】
セルスケジューラ１４は、（ＣＲＣ生成器１４を使用して）各パケットに対してＣＲＣを生成するように構成されている。デフォルトでは、セルスケジューラ１４は、パケットの終端でそのパケットにＣＲＣを付加して、リンクにおいてパケットごとのエラー検出を提供する。一実施形態では、ＣＲＣには１つのデータのセルが含まれうるが、別の実施形態では複数セルのＣＲＣを実装してもよい。セルスケジューラ１４は、パケットの最終セルをスケジュールした後に、ＣＲＣセルをスケジュールしうる。
【００２９】
一実施形態では、インタフェース回路３１８Ａ（より詳細にはセルスケジューラ１４）は、２つ以上のパケットをパックして、これらを１つのＣＲＣでカバーするように構成されうる。すなわち、セルスケジューラ１４は、第１のパケットとそのＣＲＣを送信してから、第２のパケットとそのＣＲＣを別々に送信するのではなく、第１のパケット、第２のパケットを送信したのちに、この２つのパケットをカバーする１つのＣＲＣを送信しうる。一部の実施形態では、３つ以上（more than two）のパケットをパックするように構成されてもよい（例えば、最大Ｎパケットであり、Ｎは２以上の整数）。１つのＣＲＣの送信に対してパケットをパックすることによって、パケットごとにＣＲＣを送信する場合と比べて、相互接続でのＣＲＣ送信のオーバーヘッドを低減させることができる。特に小さなパケットでは、ＣＲＣのオーバーヘッドを低減させることで、リンクでの帯域幅の消費を大幅に低減させることができる。一実施形態では、パケットが送信に使用可能である場合、パケットが、前のパケットの最終セルの送信の終了時点で、あるいはその頃に、（例えばセルキュー１８で）パックされうる。詳細には、一実施形態では、セルスケジューラ１４は、パケットの最終セルをスケジュールし、セルキュー１８内に別のパケットの１つ以上のセルが存在するかどうかに基づいて、ＣＲＣと別のパケットのいずれをスケジュールすべきかどうかを決定しうる。
【００３０】
特定の一実施形態では、セルスケジューラ１４は、それぞれ、コマンドは含むがデータは含まないパケット（例えばデータレスパケットまたはコマンドのみのパケット）をパックするように構成されうる。コヒーレントなリンクでは、コヒーレンシを維持するために、データを含まない通信が頻繁に行われるため、コヒーレントなリンクではこのようなパケットの割合が高いことがある（しかし、非コヒーレントなリンクでパッキングが実装されてもよい）。コヒーレントなリンクでは、例えば、コマンドのみのパケットには、プローブ要求、一部のプローブ応答、リード要求、および完了応答などがある。一実施形態では、コマンドのみのパケットには、１〜３のセルが含まれ、この数はシステムでのコマンドおよびアドレスのサイズに応じて決まる。１セルのＣＲＣと２つの１セルコマンドを送信する場合、ＣＲＣ送信に対して２つのパケットをパックした結果、帯域幅の消費が２５％（４セルから３セルに）低減されることもある。
【００３１】
一実施形態では、セルスケジューラ１４は、パケット内に１つ以上の部分ＣＲＣ送信を挿入するように構成されうる。各部分ＣＲＣは、挿入箇所の前のパケット部分をカバーしうる（ほかの部分ＣＲＣが作成されている場合であっても、パケットの先頭から累積的にカバーしうる）。例えば、コマンドおよびデータのパケットが長く、性能上、送信される先頭データの転送が重要なことがある。転送される先頭データの後に部分ＣＲＣを挿入することによって、受信器で、先頭データが部分ＣＲＣによって検証され、転送されうる。後のＣＲＣでエラーが検出された場合であっても、転送済みのデータは正しいことがわかっており、使用することができる。このため、一部の実施形態では、データの早期な転送を可能にすることにより、性能を向上させることができる。
【００３２】
実施形態によって、ＣＲＣパッキングと部分ＣＲＣ挿入の両方が実装されても、一方のみが実装されてもよい。
【００３３】
ＣＲＣパッキングと部分ＣＲＣ挿入は、制御レジスタ２２においてプログラム可能であってもよい。詳細には、パッキングまたは挿入が有効にされうる。複数のパケットをパックできる場合、パックされる最大のパケット数もプログラム可能であってもよい。パケット内で複数の部分ＣＲＣ挿入位置に対応している場合、使用する挿入位置がプログラム可能であってもよい。
【００３４】
一実施形態では、パッキングと部分ＣＲＣ挿入は、動的に制御されうる。一般に、セルスケジューラ１４は、リンク３２４Ａで消費されている帯域幅の量を監視し、帯域幅に応じてＣＲＣの送信を調整しうる。一実施形態では、セルは、各ビットタイミングでリンクを送信される。送信するセルが存在しない場合、ｎｏｏｐコマンドが送信されうる。このため、セルスケジューラ１４は、消費されていない帯域幅としてｎｏｏｐコマンドを監視し、消費されている帯域幅として、これ以外のセル（パケットセル、ＣＲＣセルなど）を監視しうる。帯域幅の消費が高い場合（例えば、しきい値を超えているなど）、ＣＲＣ帯域幅の消費を減らすために、（有効となっている場合には）ＣＲＣパッキングが実施されうる。また、部分ＣＲＣ挿入が一時的に停止されうる（あるいは、複数のＣＲＣ挿入が実行される場合、その数が減らされうる）。必要に応じて、ＣＲＣパックの制御と、部分ＣＲＣ挿入の制御のために、帯域幅が別個に測定されてもよい。
【００３５】
図に示した実施形態では、帯域幅をトラッキングするためにビジーカウンタ２０が使用されうる。このカウンタは、例えば、非ｎｏｏｐセルごとにインクリメントされ、ｎｏｏｐセルごとにデクリメントされる飽和カウンタなどである。このため、ビジーカウンタは、現在の帯域幅の消費を概略的に示す指標となる。ビジーカウンタの値に基づいて、ＣＲＣパッキングと部分ＣＲＣ挿入が動的に変更されうる。
【００３６】
受信回路３６は、リンク３２４Ａからセルを受信しうる。受信回路３６は、ＣＴＬラインの符号に基づき、場合によってはセル内で復号を行ない、パケット内のセルがコマンド、データ（または挿入されたコマンド、パックされたコマンドまたは部分ＣＲＣ）のいずれであるかを判定しうる。受信回路３６は、セルキュー３４内に受信したセル（および任意の復号／制御データ）を記憶すると共に、セルをＣＲＣチェック回路３２に渡しうる。最終的に、ＣＲＣセルが受信され、ＣＲＣチェック回路３２によって生成されたＣＲＣと比較され、エラーが検出されるか、受信セルが正しいことが検証される。エラーがない場合、ＣＲＣチェック回路３２は、セルキュー３４に対して、検証されたセルを転送するように指示しうる。また、完全なパケットをエラーなしで受信した場合、ＣＲＣチェック回路３２はＡｃｋカウンタ３０をインクリメントしうる。Ａｃｋカウンタ３０の値が、（送信回路３８によって、リンク３２４Ｂ上でＡｃｋパケットとして）処理ノード３１２Ａに送信され、パケットの正常受信が通知されうる。処理ノード３１２Ａは、送信されたパケットが処理ノード３１２Ｂで正常に受信されたことが判明するまで、これらのパケットを（例えば履歴バッファ２６によって）保持しうる。Ａｃｋパケットが受信され（受信器１０によってパケットスケジューラ２４に提供される）と、対応するパケットが削除されうる。
【００３７】
一般に、インタフェース回路３１８Ｄは、検証されたパケットデータを転送先に転送しうる。転送先は、内部の転送先でも（例えばノード３１２Ｂ内のプロセッサまたはほかの回路）、外部の転送先でもよい。転送先への転送の最初の段階では、（セルが、コマンドセル、データセルのいずれかに応じて）セルがコマンドバッファ４４またはデータバッファ４２に書き込まれうる。また、インタフェース回路３１８Ｄは、パケットに関する情報もパケットスケジューラ４０に提供し、パケットスケジューラ４０は、内部の転送先に送信するか、別のインタフェース回路（図２に図示なし）を介して転送するために、パケットをスケジュールしうる。
【００３８】
ＣＲＣチェック回路３２がエラーを検出した場合、エラーについて通知し、既知の最後の正常なパケットを示すＡｃｋカウントを提供するＡｃｋパケットが、送信回路３８によって送信されうる。パケットスケジューラ２４は、正常に受信されたパケットを履歴バッファ２６から削除し、再送信のために、残りのパケットをパケットスケジューラ２４に読み戻しうる。詳細には、パケットスケジューラ２４が空にされ（drain）、インタフェース回路３１８Ａがリンクをリセットし、パケットスケジューラ２４が、履歴バッファ２８に記録されているパケットの送信を開始しうる。別の実施形態では、誤って受信されたパケットが自動的に再送されずに、別の方法でエラー処理が実施されてもよい。
【００３９】
また、送信回路３８は、バッファ解放コマンドを送信するように構成されており、このバッファ解放コマンドを受信回路１０がパケットスケジューラ２４に転送しうる。送信回路３８は、パケットスケジューラ２４およびインタフェース回路３１８Ａについて記載した動作と同様に、パケットスケジューラ４０によってスケジュールされたパケット（内部の転送先の１つまたはノード３１２Ｂ内の別のインタフェース回路などの異なる転送元から受信されたパケット）を更に送信しうる。事実、ノード３１２Ａ〜３１２Ｂは対称的であり、各ノードについて記載した動作および回路がもう一方のノードに含まれてもよい。簡潔を期するために、２つのノードに関する詳細の全てについて記載したわけではない。また、ほかのインタフェース回路３１８Ｂ〜３１８Ｃおよび３１８Ｅ〜３１８Ｌが、インタフェース回路３１８Ａおよび３１８Ｄと対称的であってもよい。
【００４０】
一般に、パケットスケジューラ２４は、さまざまな内部の転送元（例えば、図２に示したプロセッサコア２８、図１に示したメモリコントローラ３１６Ａなど）のほか、各種インタフェース回路３１８Ａ〜３１８Ｃを介して、外部の転送元からもパケットを受信しうる。パケットスケジューラ２４は、パケットを直接記憶しても、あるいはパケットの指標（indocator）を記憶してもよい。実際のパケットは、（例えば、処理ノード３１２Ｂ内のコマンドバッファ４２とデータバッファ４４と同様に）ノード３１２Ａ内の分散されたコマンドバッファとデータバッファに記憶されており、パケットがスケジュールされると、パケットデータが、そのパケットが記憶されているコマンドバッファおよびデータバッファから提供されうる。
【００４１】
次に図３を参照すると、制御レジスタ２２内のフィールドの一実施形態を示すブロック図が示される。別の実施形態では、図３に示したデータの追加のデータやこれに代わるデータ、あるいはこの両方が含まれてもよい。一部のフィールドは、ビットとして記載しているが、別の実施形態ではマルチビットフィールドでもよい。
【００４２】
図３のフィールドは、可能ビット５０、パック有効ビット５２、挿入有効ビット５４、挿入制御フィールド５６、動的パック有効ビット５８、および動的挿入有効ビット６０を有する。任意選択で、しきい値フィールド（例えばしきい値フィールド６２，６４）が１つ以上含まれてもよい。
【００４３】
可能ビット５０は、ノードがＣＲＣパッキングまたは部分ＣＲＣ挿入を実装可能であるかどうかを示す読取り専用ビットであってもよい。ソフトウェアは、可能ビット５０をチェックして、（パック有効ビット５２および挿入有効ビット５４をそれぞれ使用して）機能を有効にする前に、ノードがその動作を実行することができることを確認する。別の実施形態では、動作の種類ごとに別々の可能ビットが提供されてもよい。
【００４４】
挿入制御フィールド５６は、部分ＣＲＣ挿入が含まれるパケット内の挿入点を制御するために符号化されうる。一実施形態では、パケットのデータ部分が、Ｎ個の等しいサイズの部分（すなわちビート）に分割されうる（Ｎは２以上の整数）。例えば、一実施形態では、Ｎが４であってもよい。部分ＣＲＣ挿入は、ビートの各組の間のほか、コマンド部分と第１のビートの間で可能である。詳細には、一実施形態では、符号（encoding）が対応している挿入としては、（１）第１のビートと第２のビートの間、（２）第１のビートと第２のビートの間、およびコマンドと第１のビートの間、（３）第１のビートと第２のビートの間、コマンドと第１のビートの間、および第２のビートと第３のビートの間、あるいは、（４）第１のビートと第２のビートの間、コマンドと第１のビートの間、第２のビートと第３のビートの間、および第３のビートと第４のビートの間などがある。挿入を示さない挿入制御フィールド５６用の別の符号が提供されても、挿入有効ビット５４が省略されてもよい。別の実施形態では、どのような挿入の組み合わせも使用できるように、それぞれの可能な挿入位置にワンホットエンコーディング（one-hot encoding）が使用されても、ほかの挿入の組み合わせに対応していてもよい。更に別の実施形態では、第１のビートと第２のビートの間の挿入しか対応しておらず、追加の制御フィールドのない挿入有効ビット５４が提供されてもよい。
【００４５】
１つのＣＲＣ送信に対して３つ以上のパケットをパックできる場合、パックされる最大パケット数を制御するためにパック制御フィールドが設けられてもよい。
【００４６】
動的パック有効ビット５８と動的挿入有効ビット６０により、帯域幅の消費に応じて、ＣＲＣパッキングと部分ＣＲＣ挿入の動的変更がそれぞれ有効にされうる。一部の実施形態では、変更を引き起こすしきい値が、１つ以上のしきい値フィールド６２，６４を使用してプログラム可能であってもよい。例えば、ＣＲＣパッキングと部分ＣＲＣ挿入のために、別個のしきい値が設定されてもよい。ＣＲＣパッキングおよび／または部分ＣＲＣ挿入の量を変えて制御するために、しきい値が使用されてもよい。例えば、しきい値を越えると、パケットの後ろから前にかけて、パケット内に作成される部分ＣＲＣ挿入の数が減らされ、コマンド部分と第１のビート間の挿入が省略されたのちに、最後に、第１のビートと第２のビートの間の挿入が省略される。別の実施形態では、しきい値が固定されていてもよい。
【００４７】
次に図４を参照すると、コマンドセル（すなわち、パケットのコマンド部分の一部であるセル）がスケジュールされたときの、セルスケジューラ１４の一実施形態の動作を示すフローチャートが示される。詳細には、この実施形態では、コマンドセルはデータレスパケットの一部であるが、別の実施形態では、コマンド部分のほか、データを含むパケットのＣＲＣパッキングに対応してもよい。理解しやすいように、ブロックを特定の順序で示すが、順序が変更されてもよい。更に、複数のブロックが、セルスケジューラ１４内の組み合わせ論理回路によって並列に実行されてもよい。ブロック、ブロックの組み合わせまたはフローチャートの全体を、複数のクロックサイクルにわたってパイプライン化してもよい。
【００４８】
スケジュールされたコマンドセルが、パケット内の最終コマンドセルでない場合（判定ブロック７０の「いいえ」の分岐）、セルスケジューラ１４は、コマンド内の次のセルをスケジュールしうる（ブロック７２）。スケジュールされたコマンドセルがパケット内の最終コマンドセルであり（判定ブロック７０の「はい」の分岐）、かつ有効ビット５２によりＣＲＣパッキングが有効になっていない場合（判定ブロック７４の「いいえ」の分岐）、最大数のパケットが既にパックされている場合（判定ブロック７６の「はい」の分岐）、または、動的制御が有効になっており、別のコマンドをパックすべきではないことが示される場合（判定ブロック７８の「いいえ」の分岐）、セルスケジューラ１４は、ＣＲＣセルをスケジュールしうる（ブロック８０）。また、スケジュールすべき別のコマンド（Ｃｍｄ２）が利用可能ではない場合（判定ブロック８２の「いいえ」の分岐）にも、セルスケジューラ１４はＣＲＣセルをスケジュールしうる（ブロック８０）。ＣＲＣセルがスケジュールされ送信されると、ＣＲＣ生成器１６が保持している蓄積されたＣＲＣが再初期化され、次のパケットのためにＣＲＣの蓄積が開始されうる。
【００４９】
別のコマンドが使用可能である場合（判定ブロック８２の「はい」の分岐）、次のコマンド（Ｃｍｄ２）の先頭セルがスケジュールされうる（ブロック８４）。すなわち、この実施形態では、コマンドをパックすべきかどうかの判断が、現在のコマンドの最終セルがスケジュールされる際に行われる。パックすべき第２のコマンドが使用可能ではない場合には、セルスケジューラ１４は、別のコマンドを待機せず、パッキングせずにＣＲＣを付加しうる。別の実施形態では、現在のパケットの最終セルをスケジュールする時点で、あるいはその時点のあたりで、パックすべきかどうかの判断が行われても、適宜、ほかの任意の時点で行われてもよい。
【００５０】
一実施形態では、ｎｏｏｐコマンドが（前のコマンドとパックされておらず）送信中であり、パケットスケジューラ２４によってコマンドがスケジュールされる場合、パッキングが有効ではない（または、現時点で動的に無効にされている）場合であっても、セルスケジューラ１４は、そのコマンドをｎｏｏｐコマンドとパックしうる。この場合、新しいコマンドがスケジュールされる前に、ｎｏｏｐコマンドに対して別個にＣＲＣを送信する代わりに、コマンドをｎｏｏｐコマンドとパックすることによって、コマンドのレーテンシの低減を実現することができる。
【００５１】
上記の説明は、セルスケジューラ１４の動作に関するものであるが、インタフェース回路３１８Ａの内部構造が、図２の実施形態と異なる場合であっても、インタフェース回路３１８Ａの全体の動作が上の説明と似ていてもよい。例えば、パケットが、送信のために受信され、送信すべき別のパケットが使用可能であるかどうかに基づいてパッキングが決定され、帯域幅の消費に基づいて制御が動的に行われるなどである。
【００５２】
次に図５を参照すると、データセル（すなわち、パケットのデータ部分の一部であるセル）がスケジュールされたときの、セルスケジューラ１４の一実施形態の動作を示すフローチャートが示される。理解しやすいように、ブロックを特定の順序で示す。順序が変更されてもよい。更に、複数のブロックが、セルスケジューラ１４内の組み合わせ論理回路によって並列に実行されてもよい。ブロック、ブロックの組み合わせまたはフローチャートの全体を、複数のクロックサイクルにわたってパイプライン化してもよい。
【００５３】
スケジュールされたデータセルが、パケット内の最終データセルである場合（判定ブロック９０の「はい」の分岐）、セルスケジューラ１４は、ＣＲＣセルの送信をスケジュールしうる（ブロック９２）。この場合、このＣＲＣセルは、（前のサイクルでパケットのセルが蓄積されている）パケット全体をカバーするＣＲＣである。また、この場合、次のパケットの準備のために、ＣＲＣが再初期化されうる。スケジュールされたデータセルがパケットの最終データセルでなく（判定ブロック９０の「いいえ」の分岐）、かつ、有効ビット５４により部分ＣＲＣ挿入が有効になっていない場合（判定ブロック９４の「いいえ」の分岐）、パケットが挿入点にない場合（判定ブロック９６「いいえ」の分岐）、または、動的制御が有効になっており、この時点では部分ＣＲＣ挿入を実行すべきではないことが示されている場合（判定ブロック９８の「いいえ」の分岐）、セルスケジューラ１４は、次のデータセルをスケジュールしうる（ブロック１００）。そうでない場合には、セルスケジューラ１４は、ＣＲＣセルをスケジュールしうる（ブロック９２）。この場合、ＣＲＣセルは、現在の点までのパケットをカバーしている部分ＣＲＣ挿入である。この場合、ＣＲＣは再初期化されない。判定ブロック９６によって示されるように、データパケットが挿入点にないのは、各ビートが複数のセルを含み、現在のセルがビートの終わりでない場合、あるいは挿入制御フィールド５６により現在の挿入点が有効になっていない場合である。
【００５４】
上記の説明は、セルスケジューラ１４の動作に関するものであるが、インタフェース回路３１８Ａの内部構造が、図２の実施形態と異なる場合であっても、インタフェース回路３１８Ａの全体の動作が上の説明と似ていてもよい。例えば、パケットが、送信のために受信され、部分ＣＲＣ挿入が実行され（有効になっている場合）、帯域幅の消費に基づいて制御が動的に行われるなどである。
【００５５】
次に図６を参照すると、帯域幅を監視し、ＣＲＣパッキングおよび／または部分ＣＲＣ挿入を動的に変更するためのセルスケジューラ１４の一実施形態の動作を示すフローチャートが示される。理解しやすいように、ブロックを特定の順序で示す。順序が変更されてもよい。更に、複数のブロックが、セルスケジューラ１４内の組み合わせ論理回路によって並列に実行されてもよい。ブロック、ブロックの組み合わせまたはフローチャートの全体を、複数のクロックサイクルにわたってパイプライン化してもよい。
【００５６】
セルスケジューラ１４が、新しいパケットの送信をスケジュールした場合（判定ブロック１１０の「はい」の分岐）、セルスケジューラ１４は、ビジーカウンタ２０をインクリメントしうる（ブロック１１２）。セルスケジューラ１４が、ｎｏｏｐパケットをスケジュールした場合（ＮＯＰパケット、判定ブロック１１４の「はい」の分岐）、セルスケジューラ１４は、ビジーカウンタ２０をデクリメントしうる（ブロック１１６）。上で説明したように、ビジーカウンタ２０は飽和カウンタであってもよい。すなわち、カウンタのインクリメントを繰り返すと、カウンタ２０内が全て２進数の１で飽和し（その後インクリメントが行われても、デクリメントが行われて値が減少するまで、飽和した値は変わらない）、カウンタのデクリメントを繰り返すと、カウンタ２０内が全て２進数の０で飽和する（その後デクリメントが行われても、インクリメントが行われて値が上昇するまで、飽和した値は変わらない）。この値は符号なし整数として扱われうる。一実施形態では、ｎｏｏｐパケットが、バッファ解放カウントを含まないｎｏｏｐパケットとして定義されてもよいが、それは、このようなｎｏｏｐパケットは、カウントを送信するための単なる機構に過ぎないからである。ブロック１１０〜１１６は、フローチャートの残りの部分から独立しており、この実施形態では帯域幅の消費の監視を行っている点に留意されたい。
【００５７】
ビジーカウンタがしきい値を超えている場合（判定ブロック１１８の「はい」の分岐）、帯域幅の消費が高いと考えられる。このため、帯域幅を節約するために、部分ＣＲＣ挿入が無効にされ、ＣＲＣパッキングが有効にされうる（ブロック１２０）。一方、ビジーカウンタがしきい値を超えていない場合（判定ブロック１１８の「いいえ」の分岐）、帯域幅の消費が低いと考えられる。このような場合、帯域幅が使用可能であり、このため、性能に影響を与えずに、追加のＣＲＣの送信に帯域幅を使用することができるため、データの早期の転送を許可するために、部分ＣＲＣ挿入が有効にされ、パケット転送のレーテンシを向上させるために、ＣＲＣパッキングが無効にされうる（ブロック１２２）。
【００５８】
ブロック１１８〜１２２は、図４の判定ブロック７８と図５の判定ブロック９０の一部を示しうる。すなわち、動的制御が有効となっている場合、ブロック１１８〜１２２により、動的制御が、ＣＲＣパッキングまたは部分ＣＲＣ挿入が許容されていることを示しているかどうかが判定されうる。ブロック１２０は、判定ブロック７８の「はい」の分岐と判定ブロック９０の「いいえ」の分岐に対応しうる。ブロック１２２は、判定ブロック７８の「いいえ」の分岐と判定ブロック９０の「はい」の分岐に対応しうる。
【００５９】
上で説明したように、一部の実施形態では、複数のしきい値に対応してもよい。例えば、部分ＣＲＣ挿入の可能な組み合わせのそれぞれに対応するしきい値が使用されうる。帯域幅の消費が増えると、最小の全体の値（the least overall value）を追加するものから先に、部分ＣＲＣ挿入の数が減らされる（例えばデータパケットの終端に最も近いものから削除され、コマンド部分とデータ部分の間の挿入が続き、最後に、第１のデータビートとおよび第２のデータビート間の挿入が省略される）。同様に、ＣＲＣに対して３つ以上のパケットがパックされうる場合、（しきい値を超えたために）ＣＲＣに対するパケットの数を増やすために、さまざまなしきい値が使用されてもよい。
【００６０】
上記の説明は、セルスケジューラ１４の動作に関するものであるが、インタフェース回路３１８Ａの内部構造が、図２の実施形態と異なる場合であっても、インタフェース回路３１８Ａの全体の動作が上の説明と似ていてもよい。例えば、帯域幅の消費が監視され、帯域幅の消費に基づいて制御が動的に行われるなどである。
【００６１】
図６の実施形態は、消費されている帯域幅の量に応じて、ＣＲＣ送信の頻度を変更するための一般的な機構も示す。帯域幅の消費量が増えたときは、（例えば、ＣＲＣパッキングを増やすか、部分ＣＲＣ挿入を減らすか、この両方を行うことで）ＣＲＣ送信の頻度が下げられる。帯域幅の消費量が低下したときは、（例えば、ＣＲＣパッキングを禁止するか、部分ＣＲＣ挿入を増やすか、この両方を行うことで）ＣＲＣ送信の頻度が上げられる。
【００６２】
次に図７を参照すると、パックされたＣＲＣおよび部分ＣＲＣ挿入を処理するための、インタフェース回路３１８Ｄ（より詳細には、図中の実施形態では、受信器回路３６とＣＲＣチェック回路３２であるが、別の実施形態では異なる構造が使用されてもよい）の一実施形態の動作を示すフローチャートが示される。理解しやすいように、ブロックを特定の順序で示す。順序が変更されてもよい。更に、ブロックが、インタフェース回路３１８Ｄおよび／または受信器回路３６／ＣＲＣチェック回路３２内の組み合わせの論理回路によって、並列で実行されてもよい。ブロック、ブロックの組み合わせまたはフローチャートの全体を、複数のクロックサイクルにわたってパイプライン化してもよい。
【００６３】
受信器回路３６は、制御ラインＣＴＬ［ｎ：０］からの制御データを、（場合によっては、セルが複数のビットタイミングにわたって受信される場合には数ビットタイミングの間）復号化して、受信されたセルの種類を決定しうる（ブロック１３０）。セルがパケットのコマンドセルまたはデータセルである場合（判定ブロック１３２の「はい」の分岐）、セルが、ＣＲＣの検証のためにセルキュー３４に配置されうる。コマンドセルは、例えばパケットに関連する仮想チャネルを特定するために、部分的に復号化されてもよい。ＣＲＣチェック回路３２が、受信したセルに含まれるＣＲＣを蓄積しうる（ブロック１３６）。別の実施形態では、セルがセルキュー３４に配置され、キューに入れられた後にＣＴＬデータが復号化されてもよい。
【００６４】
セルがコマンドセルでもデータセルでもない場合、セルはＣＲＣセルである（判定ブロック１３２の「いいえ」の分岐）。ＣＲＣチェック回路３２は、このＣＲＣセルを、蓄積したＣＲＣと比較して、エラーが検出されたかどうかを判定する（ブロック１３８）。ＣＲＣは、部分ＣＲＣでも完全なＣＲＣでもよい。エラーが検出されなかった場合（判定ブロック１４０の「いいえ」の分岐）、ＣＲＣがカバーするコマンド／データセルが、セルキュー３４から転送されうる（ブロック１４２）。部分ＣＲＣでエラーが検出されなかったため、転送が部分転送である場合には、インタフェース回路３１８Ｄは、どのデータが転送されたかを記録しうる（ブロック１４４）。この情報は、後からパケット内でエラーが検出された場合に、パケットの再送時に、既に転送されているデータを再転送しないように使用されうる。転送がパケットの終端である場合には、Ａｃｋカウンタ３０が更新され（ブロック１４６）、次のパケットのために、ＣＲＣチェック回路３２によって蓄積されたＣＲＣが再初期化されうる。
【００６５】
エラーが検出された場合には（判定ブロック１４０の「はい」の分岐）、ＣＲＣチェック回路３２は、最後に正常に受信したパケットを示すために、Ａｃｋカウンタ３０を更新し（ブロック１４８）、送信回路３８は、エラー処理のために、Ａｃｋカウントと共にエラーをノード３１２Ａに通知する（ブロック１５０）。
【００６６】
実施形態によって、セルに対するＣＴＬラインの符号化をさまざまな方法で行うことができる。例えば、図８は、３２ビットセルに対するＣＴＬラインの符号化の一実施形態である（このため、この実施形態では、セル当たり４つのＣＴＬラインを有する）。また、この実施形態は、ＣＲＣにより多くをカバーするために（CRC coverage）、最大２つのデータレスパケットをパックする。
【００６７】
ＣＴＬラインは、表中に特に記載のない限り、コマンドセルに対してｂ’１１１１’、データセルに対してｂ’００００’と符号化される。データレスパケット（コマンドのみのパケット）のＣＲＣは、ｂ’００１１’である。ｂ’１１００’というＣＴＬライン符号は、２つの意味を有し、提供中のデータＣＲＣ（部分ＣＲＣ挿入でないが、パケットの終端に付加された最終ＣＲＣ）か、パックされたコマンドの第１のコマンドの最終セルのいずれかを示す。このため、このＣＴＬ符号の前にコマンドセルが存在する場合には、セルは、第１のコマンドの最終セルであり、このＣＴＬ符号の前にデータセルが存在する場合には、このセルは、データＣＲＣである。更に、データＣＲＣとコマンドＣＲＣの符号は異なる。
【００６８】
ｂ’０１１１’のＣＴＬライン符号も、２つの意味を有し、別のパケットのデータ部分に挿入されたコマンドパケットの先頭セル、またはパックされたコマンド対の第２のコマンドの先頭セルのいずれかを示す。このため、この符号の意味は、前の符号がｂ’１１００'であったかどうかに基づいて判別されうる。また、パックされたコマンドの先頭セルに対する符号は他のコマンドセルとは異なり、先頭セルが容易に識別できるようになっている。また、第１のコマンドの最終セルに対する符号は、他のコマンドの符号とは異なる。
【００６９】
ｂ’１００１’のＣＴＬ符号は、パケットのコマンド部分の後に、部分ＣＲＣ挿入の前に置かれるコマンドセルに対して使用されうる。別の実施形態では、符号ｂ’１０１０’は、パケットのデータビート間に部分ＣＲＣを挿入するために使用されうる。このため、次のセルがＣＲＣであることを示す符号は、コマンドとデータ部分の間に挿入する場合と、データビート間の挿入とでは異なりうる。最後に、ｂ’１０１１’のＣＴＬ符号は、部分ＣＲＣセルを示しうる。このため、部分ＣＲＣセルに対する符号は、コマンドＣＲＣ、およびデータＣＲＣのほか、他のデータセルに対する符号とは異なりうる。
【００７０】
図８の表に示したＣＴＬ符号は、パケット受信において誤りを生じさせうるＣＴＬラインでのエラーの発生率を低減させるように選択されている。すなわち、ＣＴＬラインでエラーが発生した場合に、受信回路３６は、ＣＴＬ符号の順序が正しくないことを検出し、このため、パケット送信のエラーを検出できる可能性が高くなる。
【００７１】
図９は、図８に示した符号について、パケットと、各セルに対する対応するＣＴＬ符号との組の例である。各セルには記号が付されており、この例ではＣＴＬ符号がセルの前に記載されている。一般に、コマンドのセルには、「Ｃｍｄ」の記号と、番号（コマンドの全セルについて同一な番号）と、同じコマンドの異なるセルを識別する小文字が、この順で続いている。データのセルは、「Ｄａｔａ」の記号と、番号（対応するコマンドと同様に、同じデータの全セルについて同一な番号）と、同じデータの異なるセルを識別する小文字が、この順で続いている。
【００７２】
参照符号１６０は、２つのセル（Ｃｍｄ０ａ，Ｃｍｄ０ｂ）と対応するＣＲＣ（ＣＲＣ０）とを有する１つのデータレス（パックなし）のコマンドパケットを示す。参照符号１６２は、２つのコマンドセル（Ｃｍｄ０ａ，Ｃｍｄ０ｂ）と２つのデータセル（Ｄａｔａ０ａ，Ｄａｔａ０ｂ）とを有するパケットの例を示す。データセルの後に対応するＣＲＣ（ＣＲＣ０）が続いている。
【００７３】
参照符号１６４は、パックされたコマンドパケットの対を示し、各コマンドパケットは２つのセルを有する。第１のパケットに対するコマンドセル（Ｃｍｄ０ａ，Ｃｍｄ０ｂ）、第２のパケットに対するコマンドセル（Ｃｍｄ１ａ，Ｃｍｄ１ｂ）、２つのパケットをカバーするＣＲＣ（ＣＲＣ０＋１）の順に続いている。このため、Ｃｍｄ０ｂに対するＣＴＬ符号は、第１のコマンドの最終セルを示すｂ’１１００’であり、Ｃｍｄ１ａに対するＣＴＬ符号は、第２のコマンドの先頭セルを示すｂ’０１１１’である。ほかのコマンドセルは、通常のコマンドセルを示すｂ’１１１１’の符号を有する。また、ＣＲＣセルは、コマンドＣＲＣを示すｂ’００１１’で符号化されている。参照符号１６６は、パックされたシングルセルコマンドの対の例を示し、このため、通常のコマンドセルの符号を有するセルは存在しない。
【００７４】
参照符号１６８は、コマンドパケットとデータパケット（Ｃｍｄ０，Ｄａｔａ０）を有し、２つのコマンドのみのパケットが、パケットのデータ部分に挿入されている（Ｃｍｄ１とそのＣＲＣセルＣＲＣ１、およびＣｍｄ２とそのＣＲＣセルＣＲＣ２）場合を示す。図に示すように、データ中の挿入を示すために、コマンドＣｍｄ１，Ｃｍｄ２のそれぞれの先頭セルに対して、ｂ’０１１１’のＣＴＬ符号が使用されている。いずれの場合も、ｂ’０１１１’の符号の前に、ｂ’１１００’の符号がくることはなく、このため、コマンドは、パックされたコマンドではなく、パケットのデータ部分中の挿入として検出されうる。
【００７５】
最後に、参照符号１７０は、部分ＣＲＣ挿入（ＣＲＣ０ａ，ＣＲＣ０ｂ，ＣＲＣ０ｃ）を含むパケットの例を示し、これらは、最終ＣＲＣ（ＣＲＣ０）を除き、次のセルが部分ＣＲＣであることを示している。
【００７６】
図１０は、３２ビットセルに対するＣＴＬラインと、セルごとの４つのＣＴＬラインの符号化の別の実施形態である。この実施形態では、セルに対応するＣＴＬラインの各ビット位置（ビット０〜３）に、異なる意味が割り当てられている。ビット位置０と位置２に対するＬＣＴＬおよびＨＣＴＬの符号は、ＨＴ規格で定義されたものと同じであってもよい。これらのビットは、セルがコマンドセル、データセルのいずれであるかを示す。ビット位置１は、コマンドセルに対して定義され、〜Ｐａｃｋビットを示す。すなわち、このビットが０の場合、送信される次のセルは別のコマンドセルである。このビットが１の場合、送信される次のセルはコマンドに対するＣＲＣである。ビット位置１は、データセルに対して定義され、Ｉｎｓｅｒｔビットを示す。このビットが０の場合、次のセルは別のデータセル（または挿入されたコマンドセル）である。このビットが１の場合、次のセルは部分ＣＲＣ挿入セルである。ビット位置３は予約されている。
【００７７】
上記の開示を完全に理解できれば、当業者にとって数多くの変形例および変更例が明らかとなるであろう。下記の特許請求の範囲は、このような変形例および変更例を全て包含するものと解釈されることが意図される。
【産業上の利用可能性】
【００７８】
本発明は、一般にマイクロプロセッサに利用可能である。
【図１】
2010514264.tif 000003
2010514264.tif 000004
【図２】
2010514264.tif 000005
【図３】
2010514264.tif 000006
【図４】
2010514264.tif 000007
【図５】
2010514264.tif 000008
【図６】
2010514264.tif 000009
【図７】
2010514264.tif 000010
【図８】
2010514264.tif 000011
【図９】
2010514264.tif 000012
【図１０】
2010514264.tif 000013
【国際調査報告】
2010514264.tif 000014
2010514264.tif 000015