(57)【要約】【課題】  メモリ・コントローラにおける改善されたコマンド・スケジューリングを提供すること。【解決手段】  メモリ・コントローラにおいてコマンドをスケジューリングするために応答するシステム及び方法が開示される。第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間の伝送エラーを検出することができる。伝送エラーの検出に応答して、第１のメモリ・コントローラ・ポートにおいて第１の修正動作を開始することができる。特定の方法は、第２のメモリ・コントローラ・ポートが第２の修正動作を開始していたことを判定することを含むことができる。第１の修正動作と第２の修正動作との比較に基づき、着信読み出しコマンドを割り当てることができる。【選択図】      図１
2013502019.tif 000002
【特許請求の範囲】
【請求項１】
メモリ・コントローラにおいてコマンドをスケジューリングするための方法であって、
第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間の伝送エラーを検出することと、
前記伝送エラーの前記検出に応答して、前記第１のメモリ・コントローラ・ポートにおいて第１の修正動作を開始することと、
第２のメモリ・コントローラ・ポートが第２の修正動作を開始していたことを判定することと、
前記第１の修正動作と前記第２の修正動作との比較に基づき、複数の着信読み出しコマンドを割り当てることと、
を含む、方法。
【請求項２】
前記第１の修正動作が開始される前に前記第２の修正動作が開始されたことを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第２のメモリ・コントローラ・ポートに割り当てられる、請求項１に記載の方法。
【請求項３】
前記第１の修正動作が第１のリプレイ・アクションを開始する前に前記第２の修正動作が第２のリプレイ・アクションを開始したことを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第２のメモリ・コントローラ・ポートに割り当てられる、請求項１に記載の方法。
【請求項４】
前記第１の修正動作がリンク・リトレーン・アクションであり、かつ前記第２の修正動作がリプレイ・アクションであることを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第２のメモリ・コントローラ・ポートに割り当てられる、請求項１に記載の方法。
【請求項５】
前記リプレイ・アクションが、第２のリドライブ・デバイスにコマンド・ストリームを再発行することを含み、前記コマンド・ストリームが、前記伝送エラーに応答して前記第２のリドライブ・デバイスが前記コマンド・ストリームを停止させたポイントから再発行される、請求項４に記載の方法。
【請求項６】
前記リンク・リトレーン・アクションが、前記第１のメモリ・コントローラ・ポートと前記第１のリドライブ・デバイスとの間のリンクをリトレーンすることを含む、請求項４に記載の方法。
【請求項７】
前記伝送エラーを検出することが、前記第１のメモリ・コントローラ・ポートにおいて、前記第１のリドライブ・デバイスから警告状態フレームを受信することを含む、請求項１に記載の方法。
【請求項８】
前記伝送エラーが、前記リドライブ・デバイスからの伝送において、前記第１のポートにより検出される、請求項１に記載の方法。
【請求項９】
メモリ・コントローラとリドライブ・デバイスとの間のリンクが前記メモリ・コントローラから前記リドライブ・デバイスへの同期コマンドの伝送を必要としていることを判定することと、
信号のラウンドトリップ時間に基づき、コア・クロック・サイクルの望ましくない半期を判定することと、
前記コア・クロック・サイクルの前記望ましくない半期の前記判定に基づき、前記同期コマンドの伝送をスケジューリングすることと
をさらに含む、請求項１に記載の方法。
【請求項１０】
前記信号のラウンドトリップ時間が、前記メモリ・コントローラからのコマンドの発行と、前記コマンドに応答して前記メモリ・コントローラにおいて受信されるデータとの間で経過するメモリ・クロック・サイクルの数に基づいて計算される、請求項９に記載の方法。
【請求項１１】
前記コア・クロック・サイクルの前記望ましくない半期の前記判定が、前記信号のラウンドトリップ時間が奇数個のメモリ・クロック・サイクルと等しいと判定することを含む、請求項１０に記載の方法。
【請求項１２】
前記コア・クロック・サイクルの前記望ましくない半期の前記判定が、前記信号のラウンドトリップ時間が偶数個のメモリ・クロック・サイクルに等しいと判定することを含む、請求項１０に記載の方法。
【請求項１３】
前記望ましくない半期の前記判定に基づき、前記同期コマンドの伝送をスケジューリングすることが、前記望ましくない半期において第１のコマンドを、前記コア・クロック・サイクルの望ましい半期において第２のコマンドを、前記望ましくない半期において前記同期コマンドを、前記望ましい半期において第３のコマンドを、そして前記望ましくない半期において第４のコマンドを伝送することを含む、請求項９に記載の方法。
【請求項１４】
前記メモリ・コントローラの物理層において、前記第１のコマンド及び前記第２のコマンドに応答して第１のデータを受信し、前記同期コマンドに応答して同期状態を受信し、前記第３のコマンド及び前記第４のコマンドに応答して第３のデータを受信することと、
前記第１のデータが前記コア・クロック・サイクルにアラインメントするように、該１のデータを半コア・クロック・サイクルだけ遅延させることと、
前記同期状態を前記メモリ・コントローラのデータリンク層において抽出することと、
前記第１のデータ及び前記第２のデータを２コア・クロック・サイクル以内で収集することと
をさらに含む、請求項１３に記載の方法。
【請求項１５】
前記メモリ・コントローラから前記リドライブ・デバイスへの前記同期コマンドの伝送を必要としていることの前記判定が、前回の同期コマンドの伝送の後に前記リドライブ・デバイスに送信されたフレームの数に基づく、請求項９に記載の方法。
【請求項１６】
メモリ・コントローラ・ポートから、１サイクル中に前記メモリ・コントローラ・ポートの読み出しキューの待ち行列に並んだコマンドの数の指標を受信することと、
前記メモリ・コントローラ・ポートに伝送された送信済みコマンドの数を追跡することと、
前記待ち行列に並んだコマンドの数及び前記送信済みコマンドの数に基づき、後続のサイクル中に前記読み出しキューの待ち行列に並ぶコマンドの予測数を判定することと
をさらに含む、請求項１に記載の方法。
【請求項１７】
後続のサイクル中に前記読み出しキューの待ち行列に並ぶコマンドの前記予測数を判定することが、前記後続サイクル中に待ち行列に並ぶ前記コマンドの数に予め設定された数を加算することを含む、請求項１６に記載の方法。
【請求項１８】
着信コマンドの数を判定することをさらに含む、請求項１６に記載の方法。
【請求項１９】
前記後続のサイクルにおいて前記読み出しキューの待ち行列に並ぶコマンドの前記予測数と、最大読み出しキュー容量とに基づき、後続のコマンドが前記メモリ・コントローラ・ポートに振り向けられることを防止するか否かを判定することをさらに含む、請求項１８に記載の方法。
【請求項２０】
前記後続のサイクル中に前記読み出しキューの待ち行列に並ぶコマンドの前記予測数と、前記着信コマンドの数とに基づき、ソーシング・エージェントにバックプレッシャをかけることをさらに含む、請求項１９に記載の方法。
【請求項２１】
メモリ・コントローラにおいてコマンドをスケジューリングするための装置であって、
第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間の伝送エラーを検出するための手段と、
前記伝送エラーの前記検出に応答して、前記第１のメモリ・コントローラ・ポートにおいて第１の修正動作を開始するための手段と、
第２のメモリ・コントローラ・ポートが第２の修正動作を開始していたことを判定するための手段と、
前記第１の修正動作と前記第２の修正動作との比較に基づき、複数の着信読み出しコマンドを割り当てるための手段と
を含む、装置。
【請求項２２】
コンピュータ・システム内にロードされ、かつその上で実行されたときに、請求項１乃至請求項２０のいずれか一項に記載の方法の全てのステップを前記コンピュータ・システムに行わせる、コンピュータ可読媒体上に格納されたコンピュータ・プログラム・コードを含むコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にデータ通信に関し、より具体的にはデータ伝送エラーを低減することに関する。
【背景技術】
【０００２】
データ伝送は、伝送におけるエラーにより著しく影響を受けることがある。例えば、伝送エラーは、メモリ・コントローラからメモリ・リドライブ・デバイスに送信される読み出しコマンドに影響を与えることがある。検出されたエラーに応答して、メモリ・リドライブ・デバイスは、特別なエラー指標コマンド警告状態フレームを伝送することができる。警告状態フレームは、読み出しコマンドが破損されていたことを示す。メモリ・コントローラは、それに続いて、失敗したコマンドの再送信といった修正動作を実施することができる。例えば、メモリ・コントローラは、読み出しコマンドをリプレイすることができ、又は読み出しコマンドをリプレイする前にメモリ・コントローラとメモリ・リドライブ・デバイスとの間のリンクをリトレーンすることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
メモリ・コントローラが修正動作に従事しているとき、新たなコマンド及びデータを処理するメモリの能力は減少する。例えば、メモリ・コントローラは、要求側エージェントからのコマンドを伝送すること又はコマンドに関連したデータを受信することに利用できなくなることがある。メモリ・コントローラに割り振られたコマンドは、メモリ・コントローラの中でバックログとなってしまうことがある。このようなバックログは、メモリの待ち時間を増大させることがある。多くの場合、メモリの待ち時間は、システム全体の性能を低下させるという望ましくない結果を生じさせ得る。したがって、メモリ・コントローラにおける改善されたコマンド・スケジューリングが必要とされている。
【課題を解決するための手段】
【０００４】
特定の一実施形態において、メモリ・コントローラにおいてコマンドをスケジューリングする改善された方法が開示される。本方法は、第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間の伝送エラーを検出することを含む。伝送エラーの検出に応答して、第１のメモリ・コントローラ・ポートにおいて第１の修正動作が開始される。本方法は、第２のメモリ・コントローラ・ポートが第２の修正動作を開始していたことを判定することをさらに含む。第１の修正動作と第２の修正動作との比較に基づき、着信読み出しコマンド（ｉｎｃｏｍｉｎｇ  ｒｅａｄ  ｃｏｍｍａｎｄ）が割り当てられる。
【０００５】
別の特定の実施形態において、メモリ・コントローラにおいてコマンドをスケジューリングする改善された方法が開示される。本方法は、メモリ・コントローラとリドライブ・デバイスとの間のリンクがメモリ・コントローラからリドライブ・デバイスへの同期コマンドの伝送を必要としていることを判定することを含む。信号のラウンドトリップ時間に基づき、コア・クロック・サイクルの望ましくない半期を判定することができる。本方法は、コア・クロック・サイクルの望ましくない半期の判定に基づき、同期コマンドの伝送をスケジューリングすることをさらに含む。
【０００６】
別の特定の実施形態において、メモリ・コントローラにおいてコマンドをスケジューリングするための改善された方法が開示される。本方法は、メモリ・コントローラ・ポートから、１サイクル中にメモリ・コントローラ・ポートの読み出しキューの待ち行列に並んだコマンドの数の指標を受信することを含む。メモリ・コントローラ・ポートに伝送された送信済みコマンドの数を追跡することができる。本方法は、待ち行列に並んだコマンドの数及び送信済みコマンドの数に基づき、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンドの予測数を判定することをさらに含む。
【０００７】
本発明を特徴付けるこれらの及び他の利点及び特徴は、本明細書に添付され、その更なる部分を構成する、添付の特許請求の範囲の中で示される。しかしながら、本発明、及びその使用を通じて達成される利点をより良く理解するために、本発明の例示的な実施形態がその中で説明されている図面とそれに付随する説明事項を参照されたい。
【図面の簡単な説明】
【０００８】
【図１】メモリ・コントローラにおいてコマンドをスケジューリングするためのシステムの第１の実施形態のブロック図である。
【図２】メモリ・コントローラにおいてコマンドをスケジューリングするためのシステムの第２の実施形態のブロック図である。
【図３】メモリ・コントローラにおいてコマンドをスケジューリングするためのシステムの第３の実施形態のブロック図である。
【図４】メモリ・コントローラにおいてコマンドをスケジューリングするための方法の第１の実施形態の流れ図である。
【図５】メモリ・コントローラにおいてコマンドをスケジューリングするための方法の第２の実施形態の流れ図である。
【図６】メモリ・コントローラにおいてコマンドをスケジューリングするためのシステムの第４の実施形態のブロック図である。
【図７】メモリ・コントローラにおいてコマンドをスケジューリングするためのシステムの第５の実施形態のブロック図である。
【図８】メモリ・コントローラにおいてコマンドをスケジューリングするためのシステムの第６の実施形態のブロック図である。
【図９】メモリ・コントローラにおいてコマンドをスケジューリングするためのシステムの第７の実施形態のブロック図である。
【図１０】メモリ・コントローラにおいてコマンドをスケジューリングするための方法の第３の実施形態の流れ図である。
【図１１】メモリ・コントローラにおいてコマンドをスケジューリングするためのシステムの第８の実施形態のブロック図である。
【図１２】メモリ・コントローラにおいてコマンドをスケジューリングするための方法の第４の実施形態の流れ図である。
【発明を実施するための形態】
【０００９】
図１は、メモリ・コントローラにおいてコマンドをスケジューリングするように構成された、全体が１００で示されるシステムの第１の実施形態の図である。システム１００は、第１のリドライブ・デバイス１０８と、第２のリドライブ・デバイス１１０と、メモリ・コントローラ１０２とを含む。メモリ・コントローラ１０２は、アドレス変換ユニット１１２と、第１のメモリ・コントローラ・ポート１０４と、第２のメモリ・コントローラ・ポート１０６とを含む。特定の実施形態において、第１のメモリ・コントローラ・ポート１０４と第１のリドライブ・デバイス１０８とは、第１の高速リンクを経由して接続される。第２のメモリ・コントローラ・ポート１０６と第２のリドライブ・デバイス１１０とは、第２の高速リンクを経由して接続することができる。各高速リンクは、２つの単方向高速リンクを指すことができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのサウスバウンド・リンクを経由して第１のリドライブ・デバイス１０８に伝送することができる。第１のリドライブ・デバイス１０８は、第１の高速リンクのノースバウンド・リンクを経由して第１のメモリ・コントローラ・ポート１０４に伝送することができる。
【００１０】
特定の実施形態において、第１のメモリ・コントローラ・ポート１０４及び第２のメモリ・コントローラ・ポート１０６は、同一のメモリ内容を収容した異なるリドライブ・デバイスにアクセスする。例えば、第１のメモリ・コントローラ・ポート１０４及び第２のメモリ・コントローラ・ポート１０６は、ミラーリングすることができる。第１のメモリ・コントローラ・ポート１０４及び第２のメモリ・コントローラ・ポート１０６によりアクセスされるデータは、同一のものとすることができる。
【００１１】
メモリ・コントローラ１０２は、第１のメモリ・コントローラ・ポート１０４において開始された第１の修正動作１２２と第１のメモリ・コントローラ・ポート１０６において開始された第２の修正動作１２４を比較することができる。修正動作を比較することは、修正動作の重大度（ｓｅｖｅｒｉｔｙ）と、その修正動作が開始された順番とを判定することを含むことができる。この比較に基づき、メモリ・コントローラ１０２は、どちらのメモリ・コントローラ・ポートが着信読み出しコマンド１２６を処理するために最初に使用可能となるかを判定することができる。最初に使用可能となるメモリ・コントローラ１０２のポートによって着信読み出しコマンド１２６が実行されるようにスケジューリングすることで、着信読み出しコマンド１２６により生じる遅延を減らすことができる。このような着信読み出しコマンド１２６は、修正動作に従事しているメモリ・コントローラ・ポートにおいてはバックログとなることがある。メモリ・コントローラ・ポートにおける遅延を最小化することで、メモリの待ち時間が改善され、システム１００の全効率が向上する。
【００１２】
メモリ・コントローラ１０２は、第１のメモリ・コントローラ・ポート１０４と第１のリドライブ・デバイス１０８との間の伝送エラーを検出するように構成することができる。メモリ・コントローラ１０２は、伝送エラー１２０の検出に応答して、第１のメモリ・コントローラ・ポート１０４において第１の修正動作１２２を開始するようにさらに構成することができる。メモリ・コントローラ１０２は、第２のメモリ・コントローラ・ポート１０６が第２の修正動作１２４を開始していたことを判定することができる。メモリ・コントローラ１０２は、第１の修正動作１２２と第２の修正動作１２４との比較に基づき、着信読み出しコマンド１２６を割り当てることができる。
【００１３】
第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのサウスバウンド・リンクを経由して、第１のリドライブ・デバイス１０８にコマンドのストリームを伝送することができる。第１のリドライブ・デバイス１０８は、コマンドのストリームをデコード及び再フォーマットして、第１のリドライブ・デバイス１０８に接続されたメモリ構造体（図示せず）に送ることができる。メモリ構造体は、コマンド・ストリームに応答して、データを取り出すことができ、そのデータを第１のリドライブ・デバイス１０８に伝送することができる。第１のリドライブ・デバイス１０８は、メモリ構造体から受信したデータを再フォーマットし、再フォーマット済みデータを高速リンクのノースバウンド・リンクを経由して第１のメモリ・コントローラ・ポート１０４に伝送することができる。
【００１４】
第１のリドライブ・デバイス１０８は、第１の高速リンクのサウスバウンド・リンクを経由して受信したコマンド・ストリーム内の伝送エラーを検出することができる。例えば、第１のリドライブ・デバイス１０８は、コマンド・ストリーム内の第１のコマンドが訂正不可能な誤り訂正符号（ＥＣＣ）又は巡回冗長検査（ＣＲＣ）エラーを含んでいると判定し得る。伝送エラー１２０を検出した後、第１のリドライブ・デバイス１０８は、コマンド・ストリームの中の後続のコマンドを全てドロップし、第１のメモリ・コントローラ・ポート１０４に警告状態フレームを戻すことができる。第１のリドライブ・デバイス１０８は、伝送エラー１２０に応答して、第１の高速リンクのノースバウンド・リンクを経由して第１のメモリ・コントローラ・ポート１０４に警告状態フレームのストリームを戻すことができる。第１のメモリ・コントローラ・ポート１０４は、受信した警告状態フレームを用いて、第１のメモリ・コントローラ・ポート１０４と第１のリドライブ・デバイス１０８との間の伝送エラー１２０を検出することができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのノースバウンド・リンクを経由して警告状態フレームを受信したことに基づき、第１の高速リンクのサウスバウンド・リンクにおいて伝送エラー１２０が生じたと判定することができる。
【００１５】
第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのノースバウンド・リンクを経由して受信した第１のリドライブ・デバイス１０８からのデータ内の伝送エラー１２０を検出することができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第１のリドライブ・デバイス１０８から受信したデータをＣＲＣエラーについてチェックする論理を含むことができる。例えば、ＣＲＣをチェックすることで、第１のリドライブ・デバイス１０８から受信したデータが伝送エラー（例えば、伝送エラー１２０）を含んでいることを示し得る。
【００１６】
伝送エラー１２０の検出に応答して、メモリ・コントローラ１０２は、第１のメモリ・コントローラ・ポート１０４において第１の修正動作１２２を開始することができる。第１の修正動作１２２は、リプレイ・アクションとすることができる。第１の高速リンクがコマンド・ストリームを再発行する準備ができている場合には、リプレイ・アクションを第１の修正動作１２２として選択することができる。例えば、警告状態フレームを受信した後、第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのリンク・エラー状態リセットを発行することができる。代替的に、リンク・エラー状態リセットは、ソフト・リセットと呼ばれることがある。ソフト・リセットが第１の高速リンクの警告状態フレームをクリアすることに成功した場合に、第１の高速リンクはコマンド・ストリームを再発行する準備ができているとすることができる。第１のメモリ・コントローラ・ポート１０４は、リプレイ・アクションを第１の修正動作１２２として開始することができる。例えば、第１のリドライブ・デバイス１０８は、第１の高速リンクのサウスバウンド・リンクを経由して受信したコマンド・ストリームの第１のコマンド内の伝送エラー１２０を検出し得る。
【００１７】
伝送エラー１２０の検出に応答して、第１のリドライブ・デバイス１０８は、第１のコマンドの後に受信したコマンド・ストリームの中の後続のコマンドを全てドロップすることができる。第１のリドライブ・デバイス１０８は、第１のコマンド又は後続のコマンドをメモリ構造体にリドライブしないものとすることができる。第１のリドライブ・デバイス１０８がコマンド・ストリームをメモリ構造体にリドライブできるようにするために、リプレイ・アクションを用いて、第１のリドライブに対してコマンド・ストリームを再発行することができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第１のリドライブ・デバイス１０８が伝送エラー１２０の検出に応答してコマンド・ストリームを停止させたポイントから、コマンド・ストリームを再発行することができる。この場合、第１のメモリ・コントローラ・ポート１０４は、第１のリドライブ・デバイス１０８に対して、第１のコマンドから始まるコマンド・ストリームを再発行することができる。
【００１８】
しかしながら、ソフト・リセットが第１の高速リンクの警告状態フレームをクリアすることに成功しない場合には、第１の高速リンクは、リプレイ・アクション中に再発行されたコマンドを受信する準備ができていないものとすることができる。例えば、第１のメモリ・コントローラ・ポート１０４は、ソフト・リセットを実行した後も、第１の高速リンクのノースバウンド・リンク上で警告状態フレームを受信し続けることがある。第１のメモリ・コントローラ・ポート１０４は、第１の修正動作１２２としてリンク・リトレーン・アクションを開始することができる。リンク・リトレーン・アクションは、第１のメモリ・コントローラ・ポート１０４と第１のリドライブ・デバイス１０８との間の第１の高速リンクをリトレーンすることを含むことができる。第１のメモリ・コントローラ・ポート１０４は、リンク・リトレーン・アクションによって、第１の高速リンクが再発行されたコマンドを受信する準備ができた後で、リプレイ・アクションを実行することができる。例えば、第１の高速リンクがリトレーンされた後で、第１のメモリ・コントローラ・ポート１０４は、第１のリドライブ・デバイス１０８が伝送エラー１２０の検出に応答してコマンド・ストリームを停止させたポイントからコマンド・ストリームを再発行することができる。
【００１９】
代替的に、第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのノースバウンド・リンクにおける伝送エラー１２０の検出に応答して、第１の修正動作１２２を開始することができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのノースバウンド・リンクを経由して受信したデータ内のＣＲＣエラーを検出することができる。第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのサウスバウンド・リンクを経由して発行されたコマンド・ストリームの中の第２のコマンドがノースバウンド・リンクにおける破損データをもたらしたと判定することができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第２のコマンドから始まるコマンド・ストリームを第１の高速リンクのサウスバウンド・リンクを経由して第１のリドライブ・デバイス１０８に対して再発行することにより、リプレイ・アクションを開始することができる。
【００２０】
サウスバウント・リンク又はノースバウンド・リンクを経由した第１の高速リンクにおける伝送エラー１２０の検出に応答して、メモリ・コントローラ１０２は、第２のメモリ・コントローラ・ポート１０６が修正動作（例えば、第２の修正動作１２４）を開始していたかどうか判定することができる。第２の修正動作１２４の検出に応答して、メモリ・コントローラ１０２は、第１の修正動作１２２と第２の修正動作１２４とを比較することができる。修正動作を比較することは、各々の修正動作の重大度を判定することと、どちらの修正動作が最初に開始されたかを判定することとを含むことができる。修正動作の重大度は、その修正動作を実行するのに必要なクロック・サイクルの数に基づくものとすることができる。リンク・リトレーン・アクションは、実行するのにリプレイ・アクションより多くのクロック・サイクルを要し得るので、従って、より重大である。この比較に基づき、メモリ・コントローラ１０２は、どちらの修正動作が最初に完了するかを示すことができる。メモリ・コントローラはまた、メモリ・コントローラ・ポートが通常のトラフィック（例えば、着信読み出しコマンド１２６）を処理するために使用可能となる順序を示すことができる。ミラー・モードにおいては、着信読み出しコマンドを、どちらのメモリ・コントローラ・ポートに割り当てることもできる。
【００２１】
メモリ・コントローラ１０２は、第１の修正動作１２２と第２の修正動作１２４との比較に基づき、着信読み出しコマンド１２６を割り当てることができる。アドレス変換ユニット１１２が、着信読み出しコマンド１２６を割り当てることができる。例えば、アドレス変換ユニット１１２は、比較に基づき、第１のメモリ・コントローラ・ポート１０４が第１の修正動作１２２を完了する前に第２のメモリ・コントローラ・ポート１０６が第２の修正動作１２４を完了するであろうと判定し得る。アドレス変換ユニット１１２は、着信読み出しコマンド１２６を第２のメモリ・コントローラ・ポート１０６に振り向けることができる。着信読み出しコマンド１２６を第２のメモリ・コントローラ・ポート１０６に振り向けることで、第１のメモリ・コントローラ・ポート１０４が第１の修正動作１２２を完了している間に着信読み出しコマンド１２６が第１のメモリ・コントローラ・ポート１０４でストールすることを防止することができる。着信読み出しコマンド１２６が遅延することを防止することで、メモリの待ち時間を改善することができる。システム１００が音声又は映像をストリーミングする用途においては、読み出しコマンドがメモリ・コントローラ・ポートにおいてバックログとなることを防止することで、音飛び又は映像の欠落といった気付くほどになり得る影響を防止することができる。
【００２２】
図２は、メモリ・コントローラにおいてコマンドをスケジューリングするための、全体が２００で示されるシステムの第２の実施形態の図である。システム２００は、図１において参照されるシステム１００でも見られる多くの要素を含み、同様の要素は同じ参照符号を有する。
【００２３】
第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのサウスバウンド・リンクを経由して、第１のリドライブ・デバイス１０８にコマンドのストリームを伝送することができる。第１のリドライブ・デバイス１０８は、コマンドのストリームをデコード及び再フォーマットして、第１のリドライブ・デバイス１０８に接続されたメモリ構造体（図示せず）に送ることができる。メモリ構造体は、コマンド・ストリームに応答して、データを取り出すことができ、そのデータを第１のリドライブ・デバイス１０８に伝送することができる。第１のリドライブ・デバイス１０８は、メモリ構造体から受信したデータを再フォーマットし、再フォーマット済みデータを高速リンクのノースバウンド・リンクを経由して第１のメモリ・コントローラ・ポート１０４に伝送することができる。
【００２４】
第１のリドライブ・デバイス１０８は、第１の高速リンクのサウスバウンド・リンクを経由して受信したコマンド・ストリーム内の伝送エラーを検出することができる。例えば、第１のリドライブ・デバイス１０８は、コマンド・ストリーム内の第１のコマンドがＥＣＣ又はＣＲＣシングル・ビット・エラーを含んでいると判定し得る。伝送エラー１２０を検出した後、第１のリドライブ・デバイス１０８は、コマンド・ストリームの中の後続のコマンドを全てドロップし、第１のメモリ・コントローラ・ポート１０４に警告状態フレームを戻すことができる。
【００２５】
第１のリドライブ・デバイス１０８は、伝送エラー１２０に応答して、第１の高速リンクのノースバウンド・リンクを経由して第１のメモリ・コントローラ・ポート１０４に警告状態フレームのストリームを戻すことができる。第１のメモリ・コントローラ・ポート１０４は、受信した警告状態フレームを用いて、第１のメモリ・コントローラ・ポート１０４と第１のリドライブ・デバイス１０８との間の伝送エラー１２０を検出することができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのノースバウンド・リンクを経由して警告状態フレームを受信したことに基づき、第１の高速リンクのサウスバウンド・リンクにおいて伝送エラー１２０が生じたと判定することができる。
【００２６】
第１のメモリ・コントローラ・ポート１０４は、ノースバウンド・リンクを経由して受信した第１のリドライブ・デバイス１０８からのデータ内の伝送エラー１２０を検出することができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第１のリドライブ・デバイス１０８から受信したデータをＣＲＣエラーについてチェックする論理を含むことができる。例えば、ＣＲＣをチェックすることで、第１のリドライブ・デバイス１０８から受信したデータが伝送エラー（例えば、伝送エラー１２０）を含んでいることを示し得る。
【００２７】
伝送エラー１２０の検出に応答して、メモリ・コントローラ１０２は、第１のメモリ・コントローラ・ポート１０４において第１の修正動作２２２を開始することができる。第１の修正動作２２２は、リプレイ・アクションとすることができる。第１の高速リンクがコマンド・ストリームを再発行する準備ができている場合には、リプレイ・アクションを第１の修正動作２２２として選択することができる。例えば、警告状態フレームを受信した後、第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのソフト・リセットを発行することができる。
【００２８】
ソフト・リセットが第１の高速リンクの警告状態フレームをクリアすることに成功した場合に、第１の高速リンクはコマンド・ストリームを再発行する準備ができているとすることができる。第１のメモリ・コントローラ・ポート１０４は、リプレイ・アクションを第１の修正動作２２２として開始することができる。例えば、第１のリドライブ・デバイス１０８は、第１の高速リンクのサウスバウンド・リンクを経由して受信したコマンド・ストリームの第１のコマンド内の伝送エラー１２０を検出し得る。
【００２９】
伝送エラー１２０の検出に応答して、第１のリドライブ・デバイス１０８は、第１のコマンドの後に受信したコマンド・ストリームの中の後続のコマンドを全てドロップすることができる。第１のリドライブ・デバイス１０８は、第１のコマンド又は後続のコマンドをメモリ構造体にリドライブしないものとすることができる。第１のリドライブ・デバイス１０８がコマンド・ストリームをメモリ構造体にリドライブできるようにするために、リプレイ・アクションを用いて、第１のリドライブに対してコマンド・ストリームを再発行することができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第１のリドライブ・デバイス１０８が伝送エラー１２０の検出に応答してコマンド・ストリームを停止させたポイントから、コマンド・ストリームを再発行することができる。第１のメモリ・コントローラ・ポート１０４は、第１のリドライブ・デバイス１０８に対して、第１のコマンドから始まるコマンド・ストリームを再発行することができる。
【００３０】
しかしながら、ソフト・リセットが第１の高速リンクの警告状態フレームをクリアすることに成功しない場合には、第１の高速リンクは、リプレイ・アクションによって再発行されたコマンドを受信する準備ができていないものとすることができる。例えば、第１のメモリ・コントローラ・ポート１０４は、ソフト・リセットを実行した後も、第１の高速リンクのノースバウンド・リンク上で警告状態フレームを受信し続けることがある。第１のメモリ・コントローラ・ポート１０４は、第１の修正動作２２２としてリンク・リトレーン・アクションを開始することができる。リンク・リトレーン・アクションは、第１のメモリ・コントローラ・ポート１０４と第１のリドライブ・デバイス１０８との間の第１の高速リンクをリトレーンすることを含むことができる。
【００３１】
第１のメモリ・コントローラ・ポート１０４は、リンク・リトレーン・アクションによって、第１の高速リンクが再発行されたコマンドを受信する準備ができた後で、リプレイ・アクションを実行することができる。例えば、第１の高速リンクがリトレーンされた後で、第１のメモリ・コントローラ・ポート１０４は、第１のリドライブ・デバイス１０８が伝送エラー１２０の検出に応答してコマンド・ストリームを停止させたポイントからコマンド・ストリームを再発行することができる。
【００３２】
代替的に、第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのノースバウンド・リンクにおける伝送エラー１２０の検出に応答して、第１の修正動作２２２を開始することができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのノースバウンド・リンクを経由して受信したデータ内のＣＲＣエラーを検出することができる。第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのサウスバウンド・リンクを経由して発行されたコマンド・ストリームの中の第２のコマンドが第１の高速リンクのノースバウンド・リンクにおける破損データをもたらしたと判定することができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第２のコマンドから始まるコマンド・ストリームを第１の高速リンクのサウスバウンド・リンクを経由して第１のリドライブ・デバイス１０８に対して再発行することにより、リプレイ・アクションを開始することができる。
【００３３】
サウスバウント・リンク又はノースバウンド・リンクを経由した第１の高速リンクにおける伝送エラー１２０の検出に応答して、メモリ・コントローラ１０２は、第２のメモリ・コントローラ・ポート１０６が修正動作（例えば、第２の修正動作２２４）を開始していたかどうか判定することができる。第２の修正動作２２４の検出に応答して、メモリ・コントローラ１０２は、第１の修正動作２２２と第２の修正動作２２４とを比較することができる。修正動作を比較することは、各々の修正動作の重大度を判定することと、どちらの修正動作が最初に開始されたかを判定することとを含むことができる。
【００３４】
修正動作の重大度は、その修正動作を実行するのに必要なクロック・サイクルの数に基づくものとすることができる。リンク・リトレーン・アクションは、実行するのにリプレイ・アクションより多くのクロック・サイクルを要し、従って、より重大である。この比較に基づき、メモリ・コントローラ１０２は、どちらの修正動作が最初に完了するかということと、メモリ・コントローラ・ポートが通常のトラフィック（例えば、着信読み出しコマンド２２６）を処理するために使用可能となる順序とを示すことができる。
【００３５】
メモリ・コントローラ１０２は、第１の修正動作２２２と第２の修正動作２２４との比較に基づき、着信読み出しコマンド２２６を割り当てることができる。例えば、メモリ・コントローラ１０２は、比較に基づき、第１のメモリ・コントローラ・ポート１０４が第１の修正動作２２２を完了する前に第２のメモリ・コントローラ・ポート１０６が第２の修正動作２２４を完了するであろうと判定し得る。メモリ・コントローラ１０２は、着信読み出しコマンド２２６を第２のメモリ・コントローラ・ポート１０６に振り向けることができる。
【００３６】
別の例として、メモリ・コントローラ１０２は、比較に応答して、着信読み出しコマンド２２６を第２のメモリ・コントローラ・ポート１０６に割り当てることができる。この比較は、第１の修正動作２２２が第１のリプレイ・アクションを開始する前に、第２の修正動作２２４が第２のリプレイ・アクションを開始したことを示し得る。着信読み出しコマンド２２６を第２のメモリ・コントローラ・ポート１０６に振り向けることで、第１のメモリ・コントローラ・ポート１０４が第１の修正動作２２２を完了している間に着信読み出しコマンド２２６が第１のメモリ・コントローラ・ポート１０４でストールすることを防止することができる。着信読み出しコマンド２２６が遅延することを防止することで、メモリの待ち時間を改善することができる。例えば、システム２００が音声又は映像をストリーミングする用途においては、読み出しコマンドがメモリ・コントローラ・ポートにおいてバックログとなることを防止することで、音飛び又は映像の欠落といった気付くほどになり得る影響を防止することができる。
【００３７】
図３は、メモリ・コントローラにおいてコマンドをスケジューリングするための、全体が３００で示されるシステムの第３の実施形態の図である。システム３００は、図１において参照されるシステム１００でも見られる多くの要素を含み、同様の要素は同じ参照符号を有する。
【００３８】
動作中に、第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのサウスバウンド・リンクを経由して、第１のリドライブ・デバイス１０８にコマンドのストリームを伝送することができる。第１のリドライブ・デバイス１０８は、コマンドのストリームをデコード及び再フォーマットして、第１のリドライブ・デバイス１０８に接続されたメモリ構造体（図示せず）に送ることができる。メモリ構造体は、コマンド・ストリームに応答して、データを取り出すことができ、そのデータを第１のリドライブ・デバイス１０８に伝送することができる。第１のリドライブ・デバイス１０８は、メモリ構造体から受信したデータを再フォーマットし、再フォーマット済みデータを高速リンクのノースバウンド・リンクを経由して第１のメモリ・コントローラ・ポート１０４に伝送することができる。
【００３９】
第１のリドライブ・デバイス１０８は、サウスバウンド・リンクを経由して受信したコマンド・ストリーム内の伝送エラーを検出することができる。例えば、第１のリドライブ・デバイス１０８は、コマンド・ストリーム内の第１のコマンドがシングル・ビット・エラーを含んでいると判定し得る。伝送エラー１２０を検出した後、第１のリドライブ・デバイス１０８は、コマンド・ストリームの中の後続のコマンドを全てドロップし、第１のメモリ・コントローラ・ポート１０４に警告状態フレームを戻すことができる。
【００４０】
第１のリドライブ・デバイス１０８は、伝送エラー１２０に応答して、第１の高速リンクのノースバウンド・リンクを経由して第１のメモリ・コントローラ・ポート１０４に警告状態フレームのストリームを戻すことができる。第１のメモリ・コントローラ・ポート１０４は、受信した警告状態フレームを用いて、第１のメモリ・コントローラ・ポート１０４と第１のリドライブ・デバイス１０８との間の伝送エラー１２０を検出することができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのサウスバウンド・リンクにおいて伝送エラー１２０が生じたと判定することができる。この判定は、第１の高速リンクのノースバウンド・リンクを経由した警告状態フレームの受信に基づくことができる。
【００４１】
第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのノースバウンド・リンクを経由して受信した第１のリドライブ・デバイス１０８からのデータ内の伝送エラー１２０を検出することができる。例えば、第１のメモリ・コントローラは、第１のリドライブ・デバイス１０８から受信したデータをＣＲＣエラーについてチェックする論理を含むことができる。例えば、ＣＲＣをチェックすることで、第１のリドライブ・デバイス１０８から受信したデータが伝送エラー（例えば、伝送エラー１２０）を含み得ることを示すことができる。
【００４２】
伝送エラー１２０の検出に応答して、メモリ・コントローラ１０２は、第１のメモリ・コントローラ・ポート１０４において第１の修正動作３２２を開始することができる。第１の修正動作３２２は、リプレイ・アクションである。第１の高速リンクがコマンド・ストリームを再発行する準備ができている場合には、リプレイ・アクションを第１の修正動作３２２として選択することができる。例えば、警告状態フレームを受信した後、第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのソフト・リセットを発行することができる。ソフト・リセットが第１の高速リンクの警告状態フレームをクリアすることに成功した場合に、第１の高速リンクはコマンド・ストリームを再発行する準備ができているとすることができる。第１のメモリ・コントローラ・ポート１０４は、リプレイ・アクションを第１の修正動作３２２として開始することができる。例えば、第１のリドライブ・デバイス１０８は、第１の高速リンクのサウスバウンド・リンクを経由して受信したコマンド・ストリームの第１のコマンド内の伝送エラー１２０を検出し得る。
【００４３】
伝送エラー１２０の検出に応答して、第１のリドライブ・デバイス１０８は、第１のコマンドの後に受信したコマンド・ストリームの中の後続のコマンドを全てドロップすることができる。第１のリドライブ・デバイス１０８は、第１のコマンド又は後続のコマンドをメモリ構造体にリドライブしないものとすることができる。第１のリドライブ・デバイス１０８がコマンド・ストリームをメモリ構造体にリドライブできるようにするために、リプレイ・アクションを用いて、第１のリドライブに対してコマンド・ストリームを再発行することができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第１のリドライブ・デバイス１０８が伝送エラー１２０の検出に応答してコマンド・ストリームを停止させたポイントから、コマンド・ストリームを再発行することができる。第１のメモリ・コントローラ・ポート１０４は、第１のリドライブ・デバイス１０８に対して、第１のコマンドから始まるコマンド・ストリームを再発行することができる。
【００４４】
ソフト・リセットが第１の高速リンクの警告状態フレームをクリアすることに成功しない場合には、第１の高速リンクは、リプレイ・アクションによって再発行されたコマンドを受信する準備ができていないものとすることができる。例えば、第１のメモリ・コントローラ・ポート１０４は、ソフト・リセットを実行した後も、第１の高速リンクのノースバウンド・リンク上で警告状態フレームを受信し続けることがある。第１のメモリ・コントローラ・ポート１０４は、第１の修正動作３２２としてリンク・リトレーン・アクションを開始することができる。リンク・リトレーン・アクションは、第１のメモリ・コントローラ・ポート１０４と第１のリドライブ・デバイス１０８との間の第１の高速リンクをリトレーンすることを含むことができる。
【００４５】
第１のメモリ・コントローラ・ポート１０４は、リンク・リトレーン・アクションによって、第１の高速リンクが再発行されたコマンドを受信する準備ができた後で、リプレイ・アクションを実行することができる。例えば、第１の高速リンクがリトレーンされた後で、第１のメモリ・コントローラ・ポート１０４は、第１のリドライブ・デバイス１０８が伝送エラー１２０の検出に応答してコマンド・ストリームを停止させたポイントからコマンド・ストリームを再発行することができる。
【００４６】
代替的に、第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのノースバウンド・リンクにおける伝送エラー１２０の検出に応答して、第１の修正動作３２２を開始することができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのノースバウンド・リンクを経由して受信したデータ内のＣＲＣエラーを検出することができる。第１のメモリ・コントローラ・ポート１０４は、第１の高速リンクのサウスバウンド・リンクを経由して発行されたコマンド・ストリームの中の第２のコマンドが第１の高速リンクのノースバウンド・リンクにおける破損データをもたらしたと判定することができる。例えば、第１のメモリ・コントローラ・ポート１０４は、第２のコマンドから始まるコマンド・ストリームを第１の高速リンクのサウスバウンド・リンクを経由して第１のリドライブ・デバイス１０８に対して再発行することにより、リプレイ・アクションを開始することができる。
【００４７】
サウスバウント・リンク又はノースバウンド・リンクを経由した第１の高速リンクにおける伝送エラー１２０の検出に応答して、メモリ・コントローラ１０２は、第２のメモリ・コントローラ・ポート１０６が修正動作（例えば、第２の修正動作３２４）を開始していたかどうかを判定することができる。第２の修正動作３２４の検出に応答して、メモリ・コントローラ１０２は、第１の修正動作３２２と第２の修正動作３２４とを比較することができる。修正動作を比較することは、各々の修正動作の重大度を判定することと、どちらの修正動作が最初に開始されたかを判定することとを含むことができる。
【００４８】
修正動作の重大度は、メモリ・コントローラがその修正動作を実行するのに幾つのクロック・サイクルを要するかを示す指標とすることができる。リンク・リトレーン・アクションは、実行するのにリプレイ・アクションより多くのクロック・サイクルを要し得るので、従って、より重大である。この比較に基づき、メモリ・コントローラ１０２は、どちらの修正動作が最初に完了するかということと、メモリ・コントローラ・ポートが通常のトラフィック（例えば、着信読み出しコマンド３２６）を処理するために使用可能となる順序とを示すことができる。
【００４９】
メモリ・コントローラ１０２は、第１の修正動作３２２と第２の修正動作３２４との比較に基づき、着信読み出しコマンド３２６を割り当てることができる。例えば、メモリ・コントローラ１０２は、比較に基づき、第１の修正動作３２２はリンク・リトレーン・アクションであり、第２の修正動作３２４はリプレイ・アクションであると判定することができる。リンク・リトレーン・アクションは実行するのにリプレイ・アクションより時間がかかるので、リンク・リトレーン・アクションはリプレイ・アクションより重大であり得る。
【００５０】
この比較に基づき、メモリ・コントローラ１０２は、第１のメモリ・コントローラ・ポート１０４が第１の修正動作３２２（すなわち、リンク・リトレーン・アクション）を完了する前に、第２のメモリ・コントローラ・ポート１０６が第２の修正動作３２４（すなわち、リプレイ・アクション）を完了すると判定することができる。メモリ・コントローラ１０２は、着信読み出しコマンド３２６を第２のメモリ・コントローラ・ポート１０６に振り向けることができる。着信読み出しコマンド３２６を第２のメモリ・コントローラ・ポート１０６に振り向けることで、第１のメモリ・コントローラ・ポート１０４が第１の修正動作３２２を完了している間に着信読み出しコマンド３２６が第１のメモリ・コントローラ・ポート１０４でストールすることを防止することができる。着信読み出しコマンド３２６が遅延することを防止することで、メモリの待ち時間を改善することができる。例えば、システム３００が音声又は映像をストリーミングする用途においては、読み出しコマンドがメモリ・コントローラ・ポートにおいてバックログとなることを防止することで、音飛び又は映像の欠落といった気付くほどになり得る影響を防止することができる。
【００５１】
図４を参照すると、メモリ・コントローラにおいてコマンドをスケジューリングするための、全体が４００で示される方法の第１の実施形態の図が示される。方法４００は、開始状態４０１で開始する。ブロック４０２において、第１のメモリ・コントローラ・ポートは、第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間のリンク上で警告状態フレームが受信されたかどうかを判定することができる。第１のメモリ・コントローラ・ポートが警告状態フレームを受信し得ないう場合、論理はブロック４０２に戻る。警告状態フレームが受信された場合、第１のメモリ・コントローラ・ポートは、ブロック４０４において、ソフト・リセットを実行する。その後、ブロック４０６において、第１のメモリ・コントローラ・ポートは、リンクの警告状態フレームがクリアされたかどうか判定することができる。クリアされた場合、第１のメモリ・コントローラ・ポートは、ブロック４０８において、第１のメモリ・コントローラ・ポートにおいて第１のリプレイ・アクションを開始することができる。
【００５２】
第１のメモリ・コントローラ・ポートは、ブロック４１０において、第１のメモリ・コントローラ・ポートにおいて第１のリプレイ・アクションが進行中であることをアドレス変換ユニットに対して示すことができる。ブロック４１２において、メモリ・コントローラは、第２のメモリ・コントローラ・ポートがリプレイ・アクション（例えば、第２のリプレイ・アクション）に従事しているかどうかを判定することができる。第２のメモリ・コントローラ・ポートが第２のリプレイ・アクションに従事していない場合、論理はブロック４１６に進む。第２のメモリ・コントローラが第２のリプレイ・アクションに従事している場合、論理はブロック４１４に進む。
【００５３】
ブロック４１４において、メモリ・コントローラは、第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションを開始する前に、第２のメモリ・コントローラ・ポートが第２のリプレイ・アクションを開始していたかどうかを判定する。第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションを開始する前に、第２のメモリ・コントローラ・ポートが第２のリプレイ・アクションを開始していた場合、メモリ・コントローラは、ブロック４１８において、着信読み出しコマンドを第２のメモリ・コントローラ・ポートに振り向ける。ブロック４２０において、第１のメモリ・コントローラ・ポートは、第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションを既に完了したかどうかを判定することができる。第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションを既に完了した場合、メモリ・コントローラは、ブロック４２２において、着信読み出しコマンドを第１のメモリ・コントローラ・ポートと第２のメモリ・コントローラ・ポートとの両方に振り向ける。論理は、状態４３４で終了することができる。
【００５４】
ブロック４２０において、第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションをまだ完了していない場合、論理はブロック４２０に戻る。ブロック４１４において、第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションを開始する前に第２のメモリ・コントローラ・ポートが第２のリプレイ・アクションを開始していなかった場合、メモリ・コントローラは、ブロック４３６において、着信読み出しコマンドを第１のメモリ・コントローラ・ポートに振り向けることができる。
【００５５】
ブロック４３８において、メモリ・コントローラは、第２のメモリ・コントローラ・ポートが第２のリプレイ・アクションを既に完了したかどうか判定することができる。既に完了した場合、メモリ・コントローラは、ブロック４２２において、着信読み出しコマンドを第１のメモリ・コントローラ・ポートと第２のメモリ・コントローラ・ポートとの両方に振り向けることができる。論理は、状態４３４で終了することができる。ブロック４３８において、第２のメモリ・コントローラ・ポートが第２のリプレイ・アクションをまだ完了していない場合、論理はブロック４３８に戻る。
【００５６】
ブロック４１６において、メモリ・コントローラは、第２のメモリ・コントローラ・ポートが第２のメモリ・コントローラ・ポートと第２のリドライブ・デバイスとの間のリンクのリトレーンに従事しているかどうか判定することができる。第２のメモリ・コントローラ・ポートが第２のリンク・リトレーンを開始していた場合、メモリ・コントローラは、ブロック４４０において、着信読み出しコマンドを第１のメモリ・コントローラ・ポートに振り向けることができる。ブロック４４５において、メモリ・コントローラは、第２のメモリ・コントローラ・ポートがリトレーン中であるかどうかを判定する。第２のメモリ・コントローラ・ポートがリトレーン中である場合、論理はブロック４４５に戻る。第２のメモリ・コントローラ・ポートが既にリトレーンを完了した場合、メモリ・コントローラは、ブロック４２２において、着信読み出しコマンドを第１のメモリ・コントローラ・ポートと第２のメモリ・コントローラ・ポートとの両方に振り向けることができる。論理は、状態４３４で終了することができる。
【００５７】
ブロック４１６において、第２のメモリ・コントローラ・ポートが第２のリンク・リトレーン・アクションに従事していない場合、メモリ・コントローラは、ブロック４１８において、着信読み出しコマンドを第２のメモリ・コントローラ・ポートに振り向けることができる。ブロック４２０において、第１のメモリ・コントローラ・ポートは、第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションを既に完了したかどうか判定することができる。第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションをまだ完了していない場合、論理はブロック４２０に戻る。第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションを既に完了した場合、メモリ・コントローラは、ブロック４２２において、着信読み出しコマンドを第１のメモリ・コントローラ・ポートと第２のメモリ・コントローラ・ポートとの両方に振り向けることができる。論理は、状態４３４で終了することができる。
【００５８】
ブロック４０６において、警告状態フレームがクリアされていない場合、第１のメモリ・コントローラ・ポートは、ブロック４２４において、第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間の第１のリンク・リトレーン・アクションを開始する。第１のメモリ・コントローラ・ポートは、ブロック４２６において、第１のメモリ・コントローラ・ポートが第１のリトレーン・アクションを開始したことをアドレス変換ユニットに対して示す。メモリ・コントローラは、ブロック４２８において、第２のメモリ・コントローラ・ポートが第２のリンク・リトレーン・アクションに従事しているかどうか判定する。
【００５９】
第２のメモリ・コントローラ・ポートが第２のメモリ・コントローラ・ポートと第２のリドライブ・デバイスとの間のリンクをリトレーンしている場合、メモリ・コントローラは、ブロック４２２において、着信読み出しコマンドを第１のメモリ・コントローラ・ポートと第２のメモリ・コントローラ・ポートとの両方に振り向けることができる。論理は、状態４３４で終了する。
【００６０】
ブロック４２８において、第２のメモリ・コントローラ・ポートが第２のリンク・リトレーン・アクションに従事していない場合、論理はブロック４３０に進み、メモリ・コントローラは、着信コマンドを第２のメモリ・コントローラ・ポートに振り向けることができる。ブロック４３２において、メモリ・コントローラは、第１のメモリ・コントローラ・ポートが第１のリンク・リトレーン・アクションを既に完了したかどうか判定する。第１のメモリ・コントローラ・ポートが第１のリンク・リトレーン・アクションをまだ完了していない場合、論理はブロック４３２に戻る。第１のメモリ・コントローラ・ポートが、第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間のリンクのリトレーンを既に完了した場合、第１のメモリ・コントローラ・ポートは、ブロック４０８において、第１のメモリ・コントローラ・ポートにおける第１のリプレイ・アクションを開始する。第１のメモリ・コントローラ・ポートは、ブロック４１０において、第１のメモリ・コントローラ・ポートにおいて第１のリプレイ・アクションが進行中であることをアドレス変換ユニットに対して示す。ブロック４１２において、メモリ・コントローラは、第２のメモリ・コントローラ・ポートが第２のリプレイ・アクションに従事しているかどうか判定する。第２のメモリ・コントローラ・ポートが第２のリプレイ・アクションを開始していない場合、論理はブロック４１６に進む。第２のメモリ・コントローラが第２のリプレイ・アクションを既に開始していた場合、論理はブロック４１４に進む。
【００６１】
ブロック４１４において、メモリ・コントローラは、第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションを開始する前に、第２のメモリ・コントローラ・ポートが第２のリプレイ・アクションを開始していたかどうかを判定することができる。第１のメモリ・コントローラ・ポートより前に第２のメモリ・コントローラ・ポートがリプレイ・アクションを開始していた場合、論理はブロック４１８に進み、メモリ・コントローラは、着信読み出しコマンドを第２のメモリ・コントローラ・ポートに振り向ける。
【００６２】
第１のメモリ・コントローラ・ポートは、ブロック４２０において、第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションを既に完了したかどうかを判定することができる。第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションを既に完了した場合、メモリ・コントローラは、ブロック４２２において、着信読み出しコマンドを第１のメモリ・コントローラ・ポートと第２のメモリ・コントローラ・ポートとの両方に振り向けることができる。論理は、状態４３４で終了することができる。第１のメモリ・コントローラ・ポートがリプレイ・アクションをまだ完了していない場合、論理は、第１のメモリ・コントローラ・ポートにおける第１のリプレイ・アクションが完了するまで、ブロック４２０に戻る。
【００６３】
ブロック４１４において、第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションを開始する前に第２のメモリ・コントローラ・ポートが第２のリプレイ・アクションを開始していなかった場合、メモリ・コントローラは、ブロック４３６において、着信読み出しコマンドを第１のメモリ・コントローラ・ポートに振り向ける。ブロック４３８において、メモリ・コントローラは、第２のメモリ・コントローラ・ポートが第２のリプレイ・アクションを既に完了したかどうかを判定することができる。既に完了した場合、メモリ・コントローラは、ブロック４２２において、着信読み出しコマンドを第１のメモリ・コントローラ・ポートと第２のメモリ・コントローラ・ポートとの両方に振り向ける。論理は、状態４３４で終了することができる。ブロック４３８において、第２のメモリ・コントローラ・ポートが第２のリプレイ・アクションをまだ完了していない場合、論理はブロック４３８に戻ることができる。
【００６４】
ブロック４１６において、メモリ・コントローラは、第２のメモリ・コントローラ・ポートが第２のメモリ・コントローラ・ポートと第２のリドライブ・デバイスとの間のリンクのリトレーンに従事しているかどうかを判定することができる。第２のメモリ・コントローラ・ポートが第２のリンク・リトレーンを開始していた場合、メモリ・コントローラは、ブロック４４０において、着信読み出しコマンドを第１のメモリ・コントローラ・ポートに振り向けることができる。ブロック４４５において、メモリ・コントローラは、第２のメモリ・コントローラ・ポートがリトレーン中であるかどうかを判定する。第２のメモリ・コントローラ・ポートがリトレーン中である場合、論理はブロック４４５に戻る。第２のメモリ・コントローラ・ポートが既にリトレーンを完了した場合、メモリ・コントローラは、ブロック４２２において、着信読み出しコマンドを第１のメモリ・コントローラ・ポートと第２のメモリ・コントローラ・ポートとの両方に振り向けることができる。論理は、状態４３４で終了することができる。
【００６５】
ブロック４１６において、第２のメモリ・コントローラ・ポートが第２のリンク・リトレーン・アクションに従事していない場合、メモリ・コントローラは、ブロック４１８において、着信読み出しコマンドを第２のメモリ・コントローラ・ポートに振り向けることができる。ブロック４２０において、第１のメモリ・コントローラ・ポートは、第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションを既に完了したかどうかを判定する。第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションをまだ完了していない場合、論理はブロック４２０に戻る。第１のメモリ・コントローラ・ポートが第１のリプレイ・アクションを既に完了した場合、メモリ・コントローラは、ブロック４２２において、着信読み出しコマンドを第１のメモリ・コントローラ・ポートと第２のメモリ・コントローラ・ポートとの両方に振り向けることができる。論理は、状態４３４で終了することができる。
【００６６】
図５は、メモリ・コントローラにおいてコマンドをスケジューリングする方法５００の第２の実施形態の流れ図である。方法５００は、図１−図３のシステムのいずれか、またはその組み合わせによって実行することができる。方法５００は、ブロック５０２において、第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間の伝送エラーを検出することを含むことができる。例えば、図１−図３のメモリ・コントローラは、第１のメモリ・コントローラ・ポート１０４と第１のリドライブ・デバイス１０８との間の伝送エラー１２０を検出することができる。
【００６７】
方法５００はまた、ブロック５０４において、伝送エラーの検出に応答して、第１のメモリ・コントローラ・ポートにおいて第１の修正動作を開始することを含むことができる。例えば、図１−図３のメモリ・コントローラ１０２は、伝送エラー１２０の検出に応答して、第１のメモリ・コントローラ・ポート１０４において第１の修正動作１２２を開始する。方法５００は、ブロック５０６において、第２のメモリ・コントローラ・ポートが第２の修正動作を開始していたことを判定することをさらに含む。例えば、図１−図３のメモリ・コントローラ１０２は、第２のメモリ・コントローラ・ポート１０６が第２の修正動作１２４を開始していたことを判定することができる。方法５００はまた、ブロック５０８において、第１の修正動作と第２の修正動作との比較に基づき、着信読み出しコマンドを割り当てることを含むことができる。例えば、図１−図３のメモリ・コントローラ１０２は、第１の修正動作１２２と第２の修正動作１２４との比較に基づき、着信読み出しコマンド１２６を割り当てる。
【００６８】
図６は、メモリ・コントローラにおいてコマンドをスケジューリングするように構成された、全体が６００で示されるシステムの第４の実施形態の図である。システム６００は、リンク６０６を介して接続されたメモリ・コントローラ６０２とリドライブ・デバイス６０４とを含む。リンク６０６は、２つの単方向高速リンクを指す。例えば、メモリ・コントローラ６０２は、サウスバウンド・リンクを経由してリドライブ・デバイス６０４に伝送することができ、リドライブ・デバイス６０４は、ノースバウンド・リンクを経由してメモリ・コントローラ６０２に伝送することができる。
【００６９】
メモリ・コントローラ６０２は、本質的に同期しているが実際には同一周波数ではない、コア・クロック・ドメインとデータリンク層ドメインとを含むことができる。コア・クロック・ドメイン及びデータリンク層は互いの逓倍であり得る。コア・クロック・ドメインは、コア・クロック６１０に基づいてプロセスを実施する、メモリ・コントローラ６０２の部分を含むことができる。データリンク層ドメインは、メモリ・クロックに基づいてプロセスを実施する、メモリ・コントローラ６０２の部分を含むことができる。例えば、データリンク層ドメインにおいて、メモリ・コントローラ６０２は、メモリ・クロックに基づき、リンク６０６を経由してリドライブ・デバイス６０４からデータを受信することができる。データリンク層ドメインにおいてデータを受信した後で、メモリ・コントローラ６０２は、コア・クロック６１０に同期したプロセッサにコア・クロック・ドメインを介してデータを伝送する前に、そのデータをコア・クロック６１０にアラインメントすることができる。
【００７０】
例えば、コア・クロック・ドメインにアラインメントすることは、コア・クロック・サイクルの後半の間にデータリンク層ドメインにおいて受信された第１のデータを、半コア・クロック・サイクルだけ遅延させることを含むことができる。コア・クロック・サイクルの後半の間に受信された第１のデータを、次のコア・クロック・サイクルの前半になるまでコア・クロック・ドメインに伝送しないようにすることができる。第１のデータを次のコア・クロック・サイクルの前半になるまで遅延させることで、次のコア・クロック・サイクルの前半の間に受信される第２のデータを半コア・クロック・サイクルだけ遅延させることができる。この遅延が次に、コア・クロック・サイクルのその次の後半の間に受信される第３のデータを遅延させることができる。その次のコア・クロック・サイクルの前半の間に受信される第４のデータもまた遅延させることができ、次のコア・クロック・サイクルの後半の間に受信される第５のデータもまた同様である。データリンク層ドメインにおいて抽出することができ、かつコア・クロック・ドメインに伝送することができない非データが受信されると、第２のデータと第４のデータとの間にギャップが形成されることがある。遅延した第２のデータは、第４のデータを遅延させることなく、半コア・クロック・サイクルのギャップを埋めることができる。従って、第１のデータ、第２のデータ、第４のデータ、及び第５のデータを、ギャップなしで効率的にコア・クロック・ドメインに伝送することができる。
【００７１】
メモリ・コントローラ６０２は、コア・クロック６１０にアラインメントしたときにコア・クロック・ドメインにギャップなしに伝送することができるようなデータのシーケンスが得られるように、コマンドの伝送をスケジューリングすることができる。ギャップのないデータが得られるようにコマンドをスケジューリングすることは、同期コマンド６０８がコア・クロック・サイクルの望ましくない半期において伝送されるようにスケジューリングすることを含むことができる。同期コマンド６０８をコア・クロック・サイクルの望ましくない半期においてスケジューリングすることは、ギャップなしで伝送することができるデータを生成することになるのはコア・クロック・サイクルのどちらの半期における伝送かを判定することを含むことができる。コア・クロック・アラインメントの間のデータのギャップを防ぐように、メモリ・コントローラ６０２においてコマンドを効率的にスケジューリングすることで、メモリ・コントローラ６０２の効率性を改善し、かつメモリの待ち時間を低減することができる。
【００７２】
メモリ・コントローラ６０２は、メモリ・コントローラ６０２とリドライブ・デバイス６０４との間のリンク６０６が、メモリ・コントローラ６０２からリドライブ・デバイス６０４への同期コマンドの伝送を必要としていることを判定するように構成することができる。メモリ・コントローラ６０２は、信号のラウンドトリップ時間６１８に基づいてコア・クロック・サイクルの望ましくない半期を判定するように構成することができる。特定の実施形態において、メモリ・コントローラ６０２は、コア・クロック・サイクルの望ましくない半期の判定に基づいて同期コマンド６０８の伝送をスケジューリングするように構成される。
【００７３】
メモリ・コントローラ６０２は、メモリ・コントローラ６０２とリドライブ・デバイス６０４との間のリンク６０６が同期コマンド（例えば、同期コマンド６０８）を必要としていることを判定することができる。リンク６０６が同期コマンド６０８を必要としていることを判定することは、リンク上で伝送されるフレームの数をメモリ・コントローラ６０２が判定することを含むことができる。メモリ・コントローラ６０２は、リンク６０６上で伝送されるフレームの数を、上限閾値及び下限閾値と比較することができる。上限閾値は、リンクの同期を保持するために同期コマンド６０８を伝送しなければならなくなる前にリンク６０６上で伝送することが可能なフレームの最大数とすることができる。下限閾値は、同期コマンド６０８が伝送される前に伝送されなければならないフレームの最小数とすることができる。例えば、下限閾値を４２フレームとし、上限閾値を８４フレームとすることができる。メモリ・コントローラ６０２が４２個の正常フレーム（例えば、読み出しコマンド）を伝送した後で、メモリ・コントローラ６０２は、８４番目のフレームが伝送される前のどこかのポイントにおいて、リンク６０６が同期コマンド６０８の伝送を必要としていると判定することができる。例えば、リンクの同期を維持するために、メモリ・コントローラ６０２は、４２番目のフレームと８４番目のフレームとの間で、同期コマンド６０８をサウスバウンド・リンク上でリドライブ・デバイス６０４に伝送することができる。
【００７４】
リンク６０６が同期コマンド６０８を必要としているとの判定に応答して、メモリ・コントローラ６０２は、同期コマンド６０８の伝送をスケジューリングすることができる。同期コマンド６０８の伝送をスケジューリングすることは、コア・クロック・サイクルのどちらの半期で同期コマンドを伝送するかを判定することを含むことができる。
【００７５】
コア・クロック・サイクルのどちらの半期で同期コマンドを伝送するかを判定することは、望ましい半期と望ましくない半期とを判定することを含むことができる。コア・クロック・サイクルの望ましい半期とは、特定のコマンドをその上で伝送することで、コア・クロック・サイクルの前半においてメモリ・コントローラ６０２に到着するデータをもたらすことになる、コア・クロック・サイクルの半期を指すものとすることができる。コア・クロック・サイクルの前半において到着するデータは、コア・クロック・ドメインにアラインメントするので、従って、遅延を生じさせないであろう。コア・クロック・サイクルの望ましい半期は、メモリ・コントローラ６０２における効率的なデータ受信をもたらす。コア・クロック・サイクルの望ましくない半期とは、特定のコマンドをその上で伝送することで、コア・クロック・サイクルの後半においてメモリ・コントローラ６０２に到着するデータをもたらすことになる、コア・クロック・サイクルの半期を指すものとすることができる。コア・クロック・サイクルの後半において到着するデータは、コア・クロック・ドメインにアラインメントしないので、従って、遅延を生じさせ得る。この場合、コマンドをコア・クロック・サイクルの望ましくない半期の上で伝送することは、メモリ・コントローラ６０２における非効率的なデータの受信をもたらし得る。
【００７６】
コア・クロック・サイクルのどちらの半期が望ましくない半期であるかを判定することは、信号のラウンドトリップ時間６１８に基づくことができる。メモリ・コントローラ６０２は、リドライブ・デバイス６０４に対して発行される特定のコマンドと、その特定のコマンドに応答してメモリ・コントローラ６０２に到着するデータとの間のコア・クロック・サイクルの数を判定することができる。リンク上での特定のコマンドの伝送の間に、配線遅延がラウンドトリップ時間６１８に寄与し得る。リドライブ・デバイス６０４における受信器、内部論理、クロス・チップ配線、及びドライバ遅延が、ラウンドトリップ時間６１８に寄与し得る。例えば、特定のコマンドの発行とそれに応答して到着するデータとの間のラウンドトリップ時間６１８が、８つの全コア・クロック・サイクル及び１つの半コア・クロック・サイクルであるとする。特定のコマンドがコア・クロック・サイクルの前半において発行されたとすれば、データはコア・クロック・サイクルの後半において戻ることになる。コア・クロック・サイクルの後半において戻ってくるデータは、遅延を生じさせる。この場合には、コア・クロック・サイクルの前半が、望ましくない半期である。
【００７７】
代替的に、メモリ・コントローラ６０２は、リドライブ・デバイス６０４に対して発行される特定のコマンドと、その特定のコマンドに応答してメモリ・コントローラ６０２に到着するデータとの間のメモリ・クロック・サイクルの数を判定することができる。メモリ・クロックは、コア・クロック６１０の２倍の速さである。例えば、特定のコマンドの発行とそれに応答して到着するデータとの間のラウンドトリップ時間６１８は、１７メモリ・クロック・サイクルとなり得る。別の例として、ラウンドトリップ時間６１８が９つの全コア・クロック・サイクルであった場合、コア・クロック・サイクルの後半において特定のコマンドが発行されると、データはコア・クロック・サイクルの後半において戻ってくることになる。この場合には、コア・クロック・サイクルの後半が、望ましくない半期である。
【００７８】
メモリ・コントローラ６０２は、コア・クロック・サイクルのどちらの半期が望ましくない半期であるかの判定を記憶する。判定を記憶することで、同期コマンド６０８の必要性が検出される度にメモリ・コントローラ６０２が判定を行わなければならなくなることを回避することができる。メモリ・コントローラ６０２は、リンク６０６がリトレーンされた後で、コア・クロック・サイクルのどちらの半期が望ましくない半期であるかを再判定することができる。例えば、リンク６０６のリトレーンは、信号のラウンドトリップ遅延に対して熱的な又は電圧のドリフトに起因する影響を与えることがある。メモリ・コントローラ６０２は、コア・クロック・サイクルのどちらの半期が望ましくない半期であるかを周期的に再判定することができる。例えば、メモリ・コントローラ６０２は、以前の判定の後に予め設定された数のコア・クロックが生じた後、判定を実施することができる。
【００７９】
同期コマンド６０８の伝送をコア・クロック・サイクルの望ましくない半期に基づいてスケジューリングすることは、コア・クロック・サイクルの望ましくない半期において同期コマンド６０８を伝送することを含むことができる。望ましくない半期において同期コマンド６０８をリドライブ・デバイス６０４に伝送することは、コア・クロック・サイクルの後半においてメモリ・コントローラ６０２に到着する同期状態をもたらし得る。同期状態はメモリ・コントローラ６０２のデータリンク層において抽出され、コア・クロック・ドメインでは用いられない。同期状態がコア・クロック・サイクルの後半においてメモリ・コントローラ６０２により受信されると、同期状態の後に受信されるデータを遅延させることなく、同期状態の前に受信されたデータを半コア・クロック・サイクルだけ遅延させることができる。その判定に基づく同期コマンド６０８の再アラインメント及びスケジューリング中に、コア・クロック・サイクルのどちらの半期が遅延をもたらすことになるか（例えば、コア・クロック・サイクルの望ましくない半期）を判定することにより、メモリ・コントローラ６０２は、同期コマンドの発行に関連するオーバーヘッドを防止することができる。同期オーバーヘッドを低減することで、メモリ・コントローラ６０２の効率を改善し、メモリの待ち時間を減らすことができる。
【００８０】
図７は、メモリ・コントローラ６０２においてコマンドをスケジューリングするための、全体が７００で示されるシステムの第５の実施形態の図である。システム７００は、図６において参照されるシステム６００でも見られる多くの要素を含み、同様の要素は同じ参照符号を有する。
【００８１】
動作中、コア・クロック・サイクル７３０のどちらの半期が望ましくない半期７２８であるかの判定は、信号のラウンドトリップ時間７３２に基づくことができる。信号のラウンドトリップ時間７３２は、リドライブ・デバイス６０４に対して発行される特定のコマンド７２２と、その特定のコマンド７２２に応答してメモリ・コントローラ６０２に到着するデータ７２４との間のコア・クロック・サイクルの数とすることができる。代替的に、信号のラウンドトリップ時間７３２は、リドライブ・デバイス６０４に対して発行される特定のコマンド７２２と、その特定のコマンド７２２に応答してメモリ・コントローラ６０２に到着するデータ７２４との間のメモリ・クロック・サイクルの数に基づいて判定することができる。メモリ・コントローラ６０２は、ラウンドトリップ時間７３２が偶数個のメモリ・クロック・サイクルに等しいと判定し得る。例えば、特定のコマンド７２２の発行とその特定のコマンド７２２に応答するデータ７２４の到着との間のラウンドトリップ時間７３２は、１８メモリ・クロック・サイクルであり得る。メモリ・クロックがコア・クロックの２倍の速さである場合、１８メモリ・クロック・サイクルは、９つの全コア・クロック・サイクル７３０に対応し得る。特定のコマンド７２２をコア・クロック・サイクル７３０の後半において伝送すると、その結果、それに応答するデータ７２４は、コア・クロック・サイクル７３０の後半においてメモリ・コントローラ６０２に到着し得る。コア・クロック・サイクル７３０の後半において到着するデータは、コア・クロック・ドメインにアラインメントしないので、従って、遅延を生じさせ得る。コア・クロック・サイクルの後半における特定のコマンド７２２の伝送が、コア・クロック・サイクルの後半におけるデータ７２４をもたらすので、コア・クロック・サイクルの後半が望ましくない半期７２８である。
【００８２】
コア・クロック・サイクル７３０のどちらの半期が遅延をもたらすことになるか（例えば、コア・クロック・サイクル７３０の望ましくない半期７２８）を判定することにより、メモリ・コントローラ６０２は、同期コマンドの発行に関連するオーバーヘッドを防止することができる。同期オーバーヘッドを低減することで、メモリ・コントローラ６０２の効率性を改善し、メモリの待ち時間を減らすことができる。
【００８３】
図８は、メモリ・コントローラ６０２においてコマンドをスケジューリングするための、全体が８００で示されるシステムの第６の実施形態の図である。システム８００は、図６において参照されるシステム６００でも見られる多くの要素を含み、同様の要素は同じ参照符号を有する。
【００８４】
動作中、コア・クロック・サイクル８３０のどちらの半期が望ましくない半期８２６であるかの判定は、信号のラウンドトリップ時間８３２に基づくことができる。信号のラウンドトリップ時間８３２は、リドライブ・デバイス６０４に対して発行される特定のコマンド８２２と、その特定のコマンド８２２に応答してメモリ・コントローラ６０２に到着するデータ８２４との間のコア・クロック・サイクルの数とすることができる。代替的に、信号のラウンドトリップ時間８３２は、リドライブ・デバイス６０４に対して発行される特定のコマンド８２２と、その特定のコマンド８２２に応答してメモリ・コントローラ６０２に到着するデータ８２４との間のメモリ・クロック・サイクルの数に基づいて判定することができる。メモリ・コントローラ６０２は、ラウンドトリップ時間８３２が奇数個のメモリ・クロック・サイクルに等しいと判定し得る。例えば、特定のコマンド８２２の発行とその特定のコマンド８２２に応答するデータ８２４の到着との間のラウンドトリップ時間８３２は、１７メモリ・クロック・サイクルであり得る。メモリ・クロック８２０がコア・クロック６１０の２倍の速さである場合、１７メモリ・クロック・サイクルは、８つの全コア・クロック・サイクル８３０及び１つの半コア・クロック・サイクル８３０に対応し得る。特定のコマンド８２２をコア・クロック・サイクル８３０の前半において伝送すると、その結果、それに応答するデータ８２４はコア・クロック・サイクル８３０の後半においてメモリ・コントローラ６０２に到着することになる。コア・クロック・サイクル８３０の後半において到着するデータは、コア・クロック・ドメインにアラインメントしないので、従って、遅延を生じさせ得る。コア・クロック・サイクルの前半における特定のコマンド８２２の伝送が、コア・クロック・サイクルの後半の上におけるデータ８２４をもたらすので、コア・クロック・サイクルの前半が望ましくない半期８２６である。
【００８５】
コア・クロック・サイクル８３０のどちらの半期が遅延をもたらすことになるか（例えば、コア・クロック・サイクル８３０の望ましくない半期８２６）を判定することにより、メモリ・コントローラ６０２は、同期コマンドの発行に関連するオーバーヘッドを防止することができる。同期オーバーヘッドを低減することで、メモリ・コントローラ６０２の効率性を改善し、メモリの待ち時間を減らすことができる。
【００８６】
図９は、メモリ・コントローラにおいてコマンドをスケジューリングするための、全体が９００で示されるシステムの第７の実施形態の図である。システム９００は、図６において参照されるシステム６００でも見られる多くの要素を含み、同様の要素は同じ参照符号を有する。
【００８７】
メモリ・コントローラは、信号のラウンドトリップ時間９５６が１７個のメモリ・クロック９２０サイクルであると判定する。ラウンドトリップ時間９５６が奇数であるとの判定に基づき、メモリ・コントローラは、コア・クロック６１０サイクルの前半が望ましくない半期９６４であると判定することができる。これに応答して、メモリ・コントローラは、コア・クロック６１０サイクルの前半９６４における同期コマンド９４４の伝送をスケジューリングすることができる。同期コマンド９４４は、データリンク層において抽出され得る非データをもたらすいずれかのコマンドで置き換えることができる。例えば、メモリ・コントローラは、第１のコマンドをコア・クロック６１０サイクルの望ましくない半期９６４において伝送し、第２のコマンド９４２を望ましい半期９６６において伝送することができる。メモリ・コントローラは、同期コマンド９４４を望ましくない半期９６４において伝送し、第３のコマンド９４６を望ましい半期９６６において伝送し、第４のコマンド９４８を望ましくない半期９６４において伝送することができる。
【００８８】
メモリ・コントローラは、第１のコマンド９４０及び第２のコマンド９４２に応答して、第１のデータ９５０をメモリ・コントローラの物理層において受信することができる。メモリ・コントローラは、同期コマンド９４４に応答して、同期状態９５２を受信することができ、第３のコマンド９４６及び第４のコマンド９４８に応答して、第２のデータ９５４を受信することができる。例えば、リドライブ・デバイスからメモリ・コントローラに到着するフレームは、コア・クロック６１０がコア・クロック・サイクルの後半にあるときに第１のデータ９５０の第１の部分が到着するシーケンスに従うことができる。第１のデータ９５０の第２の部分は、コア・クロック６１０が後続のコア・クロック・サイクルの前半にあるときに到着することができる。同期状態９５２は、コア・クロック６１０がコア・クロック・サイクルの次の後半にあるときに到着することができる。第２のデータ９５４の第１の部分は、コア・クロック６１０がコア・クロック・サイクルの次の前半にあるときに到着することができる。第２のデータ９５４の第２の部分は、コア・クロック６１０がコア・クロック・サイクルの次の後半にあるときに到着することができる。
【００８９】
メモリ・コントローラは、メモリ・コントローラのデータリンク層において、同期状態９５２を抽出すること（９５８）ができる。同期状態９５２は、メモリ・コントローラのデータリンク層のみにおいて使用されるものとすることができ、メモリ・コントローラのコア・クロック・ドメインには伝送されないものとすることができる。第１のデータ９５０と第２のデータ９５４との間にはギャップが形成され得る。メモリ・コントローラは、第１のデータ９５０をコア・クロック・ドメインにアラインメントするために、第１のデータ９５０を半コア・クロック・サイクルだけ遅延させること（９６０）ができる。例えば、第１のデータ９５０の第１の部分がコア・クロック６１０サイクルの後半において到着した場合には、メモリ・コントローラのコア・クロック・ドメインは、コア・クロック・サイクルの次の半期（例えば、前半）になるまで、第１のデータ９５０を受信しないようにすることができる。
【００９０】
コア・クロック・サイクルの次の前半の間に、メモリ・コントローラは、第１のデータ９５０を読み出すことができる。同期状態が抽出され、第２のデータ９５４がコア・クロック・ドメインにアラインメントしている状態で、メモリ・コントローラは、続くコア・クロック・サイクルの前半の間に第２のデータ９５４を読み出すことができる。第２のコマンド９４２の発行と第３のコマンド９４６の発行との間に半コア・クロック・サイクルがあるにもかかわらず、メモリ・コントローラは、第１のデータ９５０と第２のデータ９５４とを２コア・クロック・サイクル以内に収集すること（９６２）ができる。
【００９１】
同期状態９５２がコア・クロック・サイクルの後半においてメモリ・コントローラにより受信されると、同期状態９５２の後に受信されたデータ（例えば第２のデータ９５４）を遅延させることなく、同期状態９５２の前に受信されたデータ（例えば、第１のデータ９５０）を半コア・クロック・サイクルだけ遅延させることができる。コア・クロック・サイクル８３０のどちらの半期が遅延をもたらすことになるか（例えば、コア・クロック・サイクル８３０の望ましくない半期８２６）を判定することにより、メモリ・コントローラ６０２は、コア・クロック・アラインメントの間のデータのギャップを防ぐように、コマンドをスケジューリングすることができる。コア・クロック・アラインメントの間のデータのギャップを防ぐことで、メモリ・コントローラ６０２の効率性を改善し、メモリの待ち時間を減らすことができる。
【００９２】
図１０は、メモリ・コントローラにおいてコマンドをスケジューリングする方法１０００の第３の実施形態の流れ図である。特定の実施形態において、方法１０００は、図６−図９のシステムのいずれか、またはその組み合わせによって実施される。方法１０００は、１００２において、メモリ・コントローラとリドライブ・デバイスとの間のリンクがメモリ・コントローラからリドライブ・デバイスへの同期コマンドの伝送を必要としていることを判定することを含む。例えば、図６のメモリ・コントローラ６０２は、メモリ・コントローラ６０２とリドライブ・デバイス６０４との間のリンク６０６が、メモリ・コントローラ６０２からリドライブ・デバイス６０４への同期コマンド６０８の伝送を必要としていることを判定する。
【００９３】
方法１０００はまた、ブロック１００４において、信号のラウンドトリップ時間に基づき、コア・クロック・サイクルの望ましくない半期を判定することを含む。例えば、図６のメモリ・コントローラ６０２は、信号のラウンドトリップ時間６１８に基づき、コア・クロック６１０サイクルの望ましくない半期（６１２又は６１４）を判定する。別の例として、図７のメモリ・コントローラ６０２は、ラウンドトリップ時間７３２に基づき、コア・クロック・サイクル７３０の望ましくない半期７２８を判定する。別の例として、図８のメモリ・コントローラ６０２は、ラウンドトリップ時間８３２に基づき、コア・クロック・サイクル８３０の望ましくない半期８２６を判定する。方法１０００は、１００６において、コア・クロック・サイクルの望ましくない半期の判定に基づき、同期コマンドの伝送をスケジューリングすることをさらに含む。例えば、メモリ・コントローラ６０２は、コア・クロック６１０サイクルの望ましくない半期（６１２又は６１４）の判定に基づき、図６の同期コマンド６０８の伝送をスケジューリングすることができる。別の例として、コア・クロック・サイクルの望ましくない半期９６４の判定に基づき、図９の同期コマンド９４４の伝送がスケジューリングされる。
【００９４】
図１１は、メモリ・コントローラにおいてコマンドをスケジューリングするための、全体が１１００で示されるシステムの第８の実施形態の図である。システム１１００は、メモリ・コントローラ・ユニット１１０４とメモリ・コントローラ・ポート１１０８とを有するメモリ・コントローラ１１０２を含む。メモリ・コントローラ・ユニット１１０４は予測論理１１０６を含み、メモリ・コントローラ・ポート１１０８は読み出しキュー１１１０を含む。
【００９５】
メモリ・コントローラ・ユニット１１０４は、複数の位置から収集された情報を用いて、読み出しキュー１１１０の待ち行列に並ぶコマンドの数１１３４を予測する。読み出しキュー１１１０がいつ満杯になるかを推論的に判定することにより、メモリ・コントローラ・ユニット１１０４は、ソーシング・エージェント１１４０に対して効率的なバックプレッシャを与えることが可能になる。読み出しキュー１１１０の状態に関する予測の精度を向上させることで、メモリ・コントローラ１１０２が読み出しキュー１１１０をより多く満たすことが可能になる。読み出しキュー１１１０をより多く満たすことで、読み出しキュー１１１０の利用率が改善され、メモリ・コントローラ１１０２の全効率が向上する。
【００９６】
メモリ・コントローラ１１０２は、メモリ・コントローラ・ポート１１０８から、ある１サイクル中にメモリ・コントローラ・ポート１１０８の読み出しキュー１１１０の待ち行列に並んだコマンドの数１１３２の指標１１２０を受信するように構成される。メモリ・コントローラは、メモリ・コントローラ・ポート１１０８に伝送された送信済みコマンド１１２８の数１１２６を追跡するように構成することができる。メモリ・コントローラ１１０２は、そのサイクル中に待ち行列に並んだコマンドの数１１３２及び送信済みコマンド１１２８の数１１２６に基づき、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンド１１３４の予測数１１３０を判定するように構成することができる。
【００９７】
メモリ・コントローラ・ユニット１１０４は、コマンド１１２８をメモリ・コントローラ・ポート１１０８に伝送することができる。メモリ・コントローラ・ユニット１１０４は、メモリ・コントローラ・ポート１１０８に送られたコマンド１１２８の数１１２６を追跡することができる。メモリ・コントローラ・ポート１１０８は、そのサイクル中に読み出しキューの待ち行列に並んだコマンドの数１１３２を判定する。メモリ・コントローラ・ポート１１０８は、メモリ・コントローラ・ユニット１１０４に、そのサイクル中に読み出しキューの待ち行列に並んだコマンドの数１１３２の指標１１２０を送信することができる。
【００９８】
メモリ・コントローラ・ユニット１１０４は、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンド１１３４の予測数１１３０を判定することができる。判定は、そのサイクル中に待ち行列に並んだコマンドの数１１３２及び送信済みコマンドの数１１２６に基づくことができる。メモリ・コントローラ・ユニット１１０４の予測論理１１０６は、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンド１１３４の数１１３０を予測することができる。例えば、送信済みコマンドの数１１２６が２であり、そのサイクル中に読み出しキューの待ち行列に並んだコマンドの数１１３２が９である場合、予測論理１１０６は、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンド１１３４の予測数１１３０が１０であると判定することができる。この場合、予測論理１１０６は、このサイクルと後続のサイクルとの間に、読み出しキュー１１１０から１つのコマンドが発行されると予測した。
【００９９】
メモリ・コントローラ・ユニット１１０４は、後続のコマンドがメモリ・コントローラ・ポート１１０８に振り向けられないようにするかどうか判定することができる。判定は、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンドの予測数１１３０と、最大読み出しキュー容量とに基づくことができる。最大読み出しキュー容量は、読み出しキュー１１１０が保持することができるコマンドの最大数とすることができる。例えば、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンドの予測数１１３０が１０であり、かつ最大読み出しキュー容量が１２である場合、メモリ・コントローラ・ユニット１１０４は、後続のコマンドがメモリ・コントローラ・ポート１１０８に振り向けられないようにすることができる。
【０１００】
メモリ・コントローラ・ユニット１１０４は、ソーシング・エージェント１１４０から、着信コマンド１１２４を受信することができる。例えば、着信コマンド１１２４は、プロセッサ・ポート、スケーラビリティ・ポート、要求ハンドラ、又は保留中のキューから発せられるものとすることができる。メモリ・コントローラは、ある種のソーシング・エージェントからの要求を無視し、かつ他のソーシング・エージェントからの要求に応じるべきものとすることが可能であり得る。例えば、メモリ・コントローラは、ファストパス要求を無視することができる。メモリ・コントローラ・ユニット１１０４は、受信した着信コマンド１１２４の数１１２２を判定することができる。メモリ・コントローラ・ユニット１１０４は、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンドの予測数１１３０と、着信コマンド１１２４の数１１２２とに基づき、ソーシング・エージェント１１４０に対してバックプレッシャをかけることができる。バックプレッシャは、着信コマンド１１２４を送ることを停止するように個々のソーシング・エージェントに指示する信号を含むことができる。例えば、メモリ・コントローラ・ユニット１１０４は、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンドの予測数１１３０が１０であり、着信コマンド１１２４の数１１２２が５である場合に、ソーシング・エージェント１１４０に対してバックプレッシャをかけることができる。ソーシング・エージェント１１４０に対してバックプレッシャをかけることにより、メモリ・コントローラ・ポート１１０８内の読み出しキュー１１１０が溢れることが防止される。
【０１０１】
読み出しキュー１１１０がいつ満杯になるかを推論的に判定することで、メモリ・コントローラ・ユニット１１０４が、ソーシング・エージェント１１４０に対して効率的にバックプレッシャをかけること、及び、読み出しキュー１１１０の状態をより良く予測することが可能になる。読み出しキュー１１１０の状態に関する予測の精度を向上させることで、メモリ・コントローラ１１０２が読み出しキュー１１１０をより多く満たすようにすることが可能になる。読み出しキュー１１１０をより多く満たすことで、読み出しキュー１１１０の利用率が改善され、メモリ・コントローラ１１０２の全効率性が向上する。
【０１０２】
図１２は、メモリ・コントローラにおいてコマンドをスケジューリングする方法１２００の第４の実施形態の流れ図である。方法１２００は、図１１のいずれかのシステムにより実施される。本方法は、ブロック１２０２において、メモリ・コントローラ・ポートから、１サイクル中にメモリ・コントローラ・ポートの読み出しキューの待ち行列に並んだコマンドの数の指標を受信することを含む。例えば、図１１のメモリ・コントローラ・ユニット１１０４は、メモリ・コントローラ・ポート１１０８から、サイクル中に読み出しキュー１１１０の待ち行列に並んだコマンドの数１１３２の指標１１２０を受信する。方法１２００はまた、ブロック１２０４において、メモリ・コントローラ・ポートに伝送された送信済みコマンドの数を追跡することを含む。例えば、図１１のメモリ・コントローラ・ユニット１１０４は、送信済みコマンド１１２８の数１１２６を追跡する。方法１２００はまた、ブロック１２０６において、待ち行列に並んだコマンドの数及び送信済みコマンドの数に基づき、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンドの予測数を判定することを含む。例えば、図１１のメモリ・コントローラ・ユニット１１０４の予測論理１１０６は、サイクル中に読み出しキューの待ち行列に並んだコマンドの数１１３２及び送信済みコマンド１１２８の数１１２６に基づき、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンド１１３４の予測数１１３０を判定する。
【０１０３】
特定の実施形態は、全体がハードウェアの実施形態、全体がソフトウェアの実施形態、又はハードウェア要素とソフトウェア要素の両方を含む実施形態の形態を取ることができる。特定の実施形態において、開示された方法は、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むがこれらに限定されないソフトウェアとして実装される。
【０１０４】
さらに、実施形態は、コンピュータ若しくはいずれかの命令実行システムによって使用されるか又はこれらと関連して使用されるプログラム・コードを提供するコンピュータ使用可能媒体又はコンピュータ可読媒体からアクセス可能なコンピュータ・プログラム製品の形態を取ることができる。この説明の目的に関して、コンピュータ使用可能媒体又はコンピュータ可読媒体は、命令実行システム、装置、若しくはデバイスによって使用されるか又はこれらと関連して使用されるプログラムを収容し、格納し、通信し、伝搬し、又は搬送することができるいずれかの装置とすることができる。
【０１０５】
媒体は、電子、磁気、光学、電磁気、赤外線若しくは半導体のシステム（又は装置若しくはデバイス）又は伝搬媒体とすることができる。コンピュータ可読媒体の例として、半導体又は固体メモリ、磁気テープ、取り外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、剛性磁気ディスク及び光ディスクが挙げられる。現在の光ディスクの例として、コンパクトディスク−読み出し専用メモリ（ＣＤ−ＲＯＭ）、コンパクトディスク−読み出し／書き込み（ＣＤ−Ｒ／Ｗ）及びＤＶＤが挙げられる。
【０１０６】
プログラム・コードを格納し、及び／又は実行するのに適したデータ処理システムは、システム・バスを通じてメモリ要素に直接又は間接に結合される少なくとも１つのプロセッサを含む。メモリ要素は、プログラム・コードの実際の実行中に用いられるローカル・メモリと、大容量記憶デバイスと、実行中に大容量記憶デバイスからコードを取り出さなければならない回数を減らすために少なくとも幾つかのプログラム・コードの一時的な記憶場所を提供するキャッシュ・メモリとを含むことができる。
【０１０７】
入出力デバイスすなわちＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれらに限定されない）は、システムに、直接的に、又は介在するＩ／Ｏコントローラを通じて結合することができる。
【０１０８】
ネットワーク・アダプタをシステムに結合して、データ処理システムを、介在する私設ネットワーク又は公衆ネットワークを通じて他のデータ処理システム又は遠隔のプリンタ若しくは記憶デバイスに結合できるようにすることもできる。モデム、ケーブル・モデム及びイーサネット・カードは、現在利用可能なネットワーク・アダプタのタイプのうちのごく一部である。
【０１０９】
開示された実施形態の上記の説明は、当業者が開示された実施形態を作り又は使用することができるようにするために提供される。これらの実施形態の種々の修正は当業者には容易に明らかとなり、本明細書において定義された包括的な原理は、本開示の範囲から逸脱することなく他の実施形態に適用することができる。よって、本開示は、本明細書において示された実施形態に限定されることが意図されるものではなく、以下の特許請求の範囲により定義される原理及び特徴と矛盾しない、可能な限り最も広い範囲が与えられるべきである。
【０１１０】
本発明を種々の実施形態の説明により示し、かつ、これらの実施形態をかなり詳細に説明してきたが、添付の特許請求の範囲をそのような詳細に限定し、又はいかなる形であっても制限することは、出願人の意図するところではない。従って、本発明は、その最も広範な態様において、図示及び説明された特定の詳細、代表的な装置、方法、及び説明的例示に限定されるものではない。従って、出願人の包括的な発明の概念の範囲から逸脱することなく、そのような詳細から逸脱することができる。
【図１】
2013502019.tif 000003
【図２】
2013502019.tif 000004
【図３】
2013502019.tif 000005
【図４】
2013502019.tif 000006
【図５】
2013502019.tif 000007
【図６】
2013502019.tif 000008
【図７】
2013502019.tif 000009
【図８】
2013502019.tif 000010
【図９】
2013502019.tif 000011
【図１０】
2013502019.tif 000012
【図１１】
2013502019.tif 000013
【図１２】
2013502019.tif 000014
【手続補正書】
【提出日】平成24年2月15日(2012.2.15)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリ・コントローラにおいてコマンドをスケジューリングするための方法であって、
第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間の伝送エラーを検出することと、
前記伝送エラーの前記検出に応答して、前記第１のメモリ・コントローラ・ポートにおいて第１の修正動作を開始することと、
第２のメモリ・コントローラ・ポートが第２の修正動作を開始していたことを判定することと、
前記第１の修正動作と前記第２の修正動作との比較に基づき、複数の着信読み出しコマンドを割り当てることと、
を含む、方法。
【請求項２】
前記第１の修正動作が開始される前に前記第２の修正動作が開始されたことを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第２のメモリ・コントローラ・ポートに割り当てられる、請求項１に記載の方法。
【請求項３】
前記第１の修正動作が第１のリプレイ・アクションを開始する前に前記第２の修正動作が第２のリプレイ・アクションを開始したことを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第２のメモリ・コントローラ・ポートに割り当てられる、請求項１に記載の方法。
【請求項４】
前記第１の修正動作がリンク・リトレーン・アクションであり、かつ前記第２の修正動作がリプレイ・アクションであることを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第２のメモリ・コントローラ・ポートに割り当てられる、請求項１に記載の方法。
【請求項５】
前記リプレイ・アクションが、第２のリドライブ・デバイスにコマンド・ストリームを再発行することを含み、前記コマンド・ストリームが、前記伝送エラーに応答して前記第２のリドライブ・デバイスが前記コマンド・ストリームを停止させたポイントから再発行される、請求項４に記載の方法。
【請求項６】
前記リンク・リトレーン・アクションが、前記第１のメモリ・コントローラ・ポートと前記第１のリドライブ・デバイスとの間のリンクをリトレーンすることを含む、請求項４に記載の方法。
【請求項７】
前記伝送エラーを検出することが、前記第１のメモリ・コントローラ・ポートにおいて、前記第１のリドライブ・デバイスから警告状態フレームを受信することを含む、請求項１に記載の方法。
【請求項８】
前記伝送エラーが、前記リドライブ・デバイスからの伝送において、前記第１のポートにより検出される、請求項１に記載の方法。
【請求項９】
メモリ・コントローラとリドライブ・デバイスとの間のリンクが前記メモリ・コントローラから前記リドライブ・デバイスへの同期コマンドの伝送を必要としていることを判定することと、
信号のラウンドトリップ時間に基づき、コア・クロック・サイクルの望ましくない半期を判定することと、
前記コア・クロック・サイクルの前記望ましくない半期の前記判定に基づき、前記同期コマンドの伝送をスケジューリングすることと
をさらに含む、請求項１に記載の方法。
【請求項１０】
前記信号のラウンドトリップ時間が、前記メモリ・コントローラからのコマンドの発行と、前記コマンドに応答して前記メモリ・コントローラにおいて受信されるデータとの間で経過するメモリ・クロック・サイクルの数に基づいて計算される、請求項９に記載の方法。
【請求項１１】
前記コア・クロック・サイクルの前記望ましくない半期の前記判定が、前記信号のラウンドトリップ時間が奇数個のメモリ・クロック・サイクルと等しいと判定することを含む、請求項１０に記載の方法。
【請求項１２】
前記コア・クロック・サイクルの前記望ましくない半期の前記判定が、前記信号のラウンドトリップ時間が偶数個のメモリ・クロック・サイクルに等しいと判定することを含む、請求項１０に記載の方法。
【請求項１３】
前記望ましくない半期の前記判定に基づき、前記同期コマンドの伝送をスケジューリングすることが、前記望ましくない半期において第１のコマンドを、前記コア・クロック・サイクルの望ましい半期において第２のコマンドを、前記望ましくない半期において前記同期コマンドを、前記望ましい半期において第３のコマンドを、そして前記望ましくない半期において第４のコマンドを伝送することを含む、請求項９に記載の方法。
【請求項１４】
前記メモリ・コントローラの物理層において、前記第１のコマンド及び前記第２のコマンドに応答して第１のデータを受信し、前記同期コマンドに応答して同期状態を受信し、前記第３のコマンド及び前記第４のコマンドに応答して第２のデータを受信することと、
前記第１のデータが前記コア・クロック・サイクルにアラインメントするように、該１のデータを半コア・クロック・サイクルだけ遅延させることと、
前記同期状態を前記メモリ・コントローラのデータリンク層において抽出することと、
前記第１のデータ及び前記第２のデータを２コア・クロック・サイクル以内で収集することと
をさらに含む、請求項１３に記載の方法。
【請求項１５】
前記メモリ・コントローラから前記リドライブ・デバイスへの前記同期コマンドの伝送を必要としていることの前記判定が、前回の同期コマンドの伝送の後に前記リドライブ・デバイスに送信されたフレームの数に基づく、請求項９に記載の方法。
【請求項１６】
メモリ・コントローラ・ポートから、１サイクル中に前記メモリ・コントローラ・ポートの読み出しキューの待ち行列に並んだコマンドの数の指標を受信することと、
前記メモリ・コントローラ・ポートに伝送された送信済みコマンドの数を追跡することと、
前記待ち行列に並んだコマンドの数及び前記送信済みコマンドの数に基づき、後続のサイクル中に前記読み出しキューの待ち行列に並ぶコマンドの予測数を判定することと
をさらに含む、請求項１に記載の方法。
【請求項１７】
後続のサイクル中に前記読み出しキューの待ち行列に並ぶコマンドの前記予測数を判定することが、前記後続サイクル中に待ち行列に並ぶ前記コマンドの数に予め設定された数を加算することを含む、請求項１６に記載の方法。
【請求項１８】
着信コマンドの数を判定することをさらに含む、請求項１６に記載の方法。
【請求項１９】
前記後続のサイクルにおいて前記読み出しキューの待ち行列に並ぶコマンドの前記予測数と、最大読み出しキュー容量とに基づき、後続のコマンドが前記メモリ・コントローラ・ポートに振り向けられることを防止するか否かを判定することをさらに含む、請求項１８に記載の方法。
【請求項２０】
前記後続のサイクル中に前記読み出しキューの待ち行列に並ぶコマンドの前記予測数と、前記着信コマンドの数とに基づき、ソーシング・エージェントにバックプレッシャをかけることをさらに含む、請求項１９に記載の方法。
【請求項２１】
メモリ・コントローラにおいてコマンドをスケジューリングするための装置であって、
第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間の伝送エラーを検出するための手段と、
前記伝送エラーの前記検出に応答して、前記第１のメモリ・コントローラ・ポートにおいて第１の修正動作を開始するための手段と、
第２のメモリ・コントローラ・ポートが第２の修正動作を開始していたことを判定するための手段と、
前記第１の修正動作と前記第２の修正動作との比較に基づき、複数の着信読み出しコマンドを割り当てるための手段と
を含む、装置。
【請求項２２】
コンピュータ・システム内にロードされ、かつその上で実行されたときに、請求項１乃至請求項２０のいずれか一項に記載の方法の全てのステップを前記コンピュータ・システムに行わせる、コンピュータ・プログラム・コードを含むコンピュータ・プログラム。
【手続補正書】
【提出日】平成24年9月5日(2012.9.5)
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリ・コントローラにおいてコマンドをスケジューリングするための方法であって、
第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間の伝送エラーを検出するステップと、
前記伝送エラーの前記検出に応答して、前記第１のメモリ・コントローラ・ポートにおいて第１の修正動作を開始するステップと、
第２のメモリ・コントローラ・ポートにおいて第２のリドライブ・デバイスとの間の第２の修正動作を開始していたことを判定するステップと、
前記メモリ・コントローラにおいて前記判定に応答して、前記第１の修正動作にかかる時間及び前記第２の修正動作にかかる時間の判定と、前記第１の修正動作及び前記第２の修正動作のうちどちらの修正動作が最初に開始されたかの判定とを含む比較に基づき、前記第１の修正動作及び前記第２の修正動作のうちどちらの修正動作が最初に完了するかを示すステップと、
前記メモリ・コントローラにおいて、前記第１のメモリ・コントローラ・ポート及び前記第２のメモリ・コントローラ・ポートのうち、修正動作を最初に完了するメモリ・コントローラ・ポートに複数の着信読み出しコマンドを割り当てるステップと、
を含む、方法。
【請求項２】
前記第１の修正動作が開始される前に前記第２の修正動作が開始されたことを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第２のメモリ・コントローラ・ポートに割り当てられる、請求項１に記載の方法。
【請求項３】
前記第１の修正動作が第１のリプレイ・アクションを開始する前に前記第２の修正動作が第２のリプレイ・アクションを開始したことを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第２のメモリ・コントローラ・ポートに割り当てられる、請求項１に記載の方法。
【請求項４】
前記第１の修正動作がリプレイ・アクションを伴うリンク・リトレーン・アクションであり、かつ前記第２の修正動作がリプレイ・アクションであることを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第２のメモリ・コントローラ・ポートに割り当てられる、請求項１に記載の方法。
【請求項５】
前記リプレイ・アクションが、第１のリドライブ・デバイスにコマンド・ストリームを再発行することを含み、前記コマンド・ストリームが、前記伝送エラーに応答して前記第１のリドライブ・デバイスが前記コマンド・ストリームを停止させたポイントから再発行される、請求項４に記載の方法。
【請求項６】
前記リンク・リトレーン・アクションが、前記第１のメモリ・コントローラ・ポートと前記第１のリドライブ・デバイスとの間のリンクをリトレーンすることを含む、請求項４に記載の方法。
【請求項７】
前記伝送エラーを検出することが、前記第１のメモリ・コントローラ・ポートにおいて、前記第１のリドライブ・デバイスから警告状態フレームを受信することを含む、請求項１に記載の方法。
【請求項８】
前記メモリ・コントローラは、コア・クロックに基いてプロセスするコア・クロック・ドメインと、前記コア・クロックに同期し且つ前記コア・クロックの２倍の速さのメモリ・クロックに基いてプロセスするデータ・リンク層ドメインとを含み、
前記メモリ・コントローラは、データ・リンク層ドメインを介して前記リドライブ・デバイスからデータを受け取り、該データを前記コア・クロック・ドメインを介して伝送するようになっており、
更に、前記メモリ・コントローラが前記コマンドを伝送するステップを含み、
前記コマンドを伝送するステップは、
前記メモリ・コントローラがコマンドを発行してからデータを受信するまでのラウンドトリップ時間が奇数のメモリ・クロック・サイクルに等しいと判定し、コア・クロック・サイクルの前半が望ましくない半期であり、コア・クロック・サイクルの後半が望ましい半期であると判定するステップと、
前記望ましくない半期及び前記望ましい半期の判定に基づき、前記メモリ・コントローラが、前記コア・クロック・サイクルの前半において第１のコマンドを、次の後半において第２のコマンドを、次のコア・クロック・サイクルの前半において同期コマンドを、次の後半において第３のコマンドを、次のコア・クロック・サイクルの前半において第４のコマンドを伝送するステップとを含む、請求項１に記載の方法。
【請求項９】
前記メモリ・コントローラが、前記ラウンドトリップ時間の経過後のコア・クロック・サイクルの半期及び次の半期に前記第１のコマンド及び前記第２のコマンドに応答した第１のデータを受け取り、コア・クロック・サイクルの次の半期に前記同期コマンドに応答した同期状態を受け取り、コア・クロック・サイクルの次の半期及び次の半期に前記第３のコマンド及び前記第４のコマンドに応答した第２のデータを受け取るステップと、
前記メモリ・コントローラが、前記同期状態を抽出して前記第１のデータ及び前記第２のデータの間にギャップを形成するステップと、
前記メモリ・コントローラが、前記第１のデータをコア・クロック・サイクルの半期だけ遅延させるステップとを含む、請求項８に記載の方法。
【請求項１０】
メモリ・コントローラにおいてコマンドをスケジューリングするための方法であって、
第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間の伝送エラーを検出するステップと、
前記伝送エラーの前記検出に応答して、前記第１のメモリ・コントローラ・ポートにおいてリプレイ・アクションを伴うリンク・リトレーン・アクションである第１の修正動作を開始するステップと、
第２のメモリ・コントローラ・ポートにおいて第２のリドライブ・デバイスとの間のリプレイ・アクションである第２の修正動作を開始していたことを判定するステップと、
前記メモリ・コントローラにおいて前記判定に応答して、前記第１の修正動作にかかる時間及び前記第２の修正動作にかかる時間の判定と、前記第１の修正動作及び前記第２の修正動作のうちどちらの修正動作が最初に開始されたかの判定とを含む比較に基づき、前記第１の修正動作及び前記第２の修正動作のうちどちらの修正動作が最初に完了するかを示すステップと、
前記メモリ・コントローラにおいて、前記第２のメモリ・コントローラ・ポートに複数の着信読み出しコマンドを割り当てるステップと、
を含む、方法。
【請求項１１】
前記リプレイ・アクションが、第１のリドライブ・デバイスにコマンド・ストリームを再発行することを含み、前記コマンド・ストリームが、前記伝送エラーに応答して前記第１のリドライブ・デバイスが前記コマンド・ストリームを停止させたポイントから再発行される、請求項１０に記載の方法。
【請求項１２】
前記リンク・リトレーン・アクションが、前記第１のメモリ・コントローラ・ポートと前記第１のリドライブ・デバイスとの間のリンクをリトレーンすることを含む、請求項１０に記載の方法。
【請求項１３】
メモリ・コントローラにおいてコマンドをスケジューリングするための装置であって、
第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間の伝送エラーを検出する手段と、
前記伝送エラーの前記検出に応答して、前記第１のメモリ・コントローラ・ポートにおいて第１の修正動作を開始する手段と、
第２のメモリ・コントローラ・ポートにおいて第２のリドライブ・デバイスとの間の第２の修正動作を開始していたことを判定する手段と、
前記メモリ・コントローラにおいて前記判定に応答して、前記第１の修正動作にかかる時間及び前記第２の修正動作にかかる時間の判定と、前記第１の修正動作及び前記第２の修正動作のうちどちらの修正動作が最初に開始されたかの判定とを含む比較に基づき、前記第１の修正動作及び前記第２の修正動作のうちどちらの修正動作が最初に完了するかを示す手段と、
前記メモリ・コントローラにおいて、前記第１のメモリ・コントローラ・ポート及び前記第２のメモリ・コントローラ・ポートのうち、修正動作を最初に完了するメモリ・コントローラ・ポートに複数の着信読み出しコマンドを割り当てる手段とを備える装置。
【請求項１４】
前記第１の修正動作が第１のリプレイ・アクションを開始する前に前記第２の修正動作が第２のリプレイ・アクションを開始したことを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第２のメモリ・コントローラ・ポートに割り当てられる、請求項１３に記載の装置。
【請求項１５】
前記第１の修正動作がリプレイ・アクションを伴うリンク・リトレーン・アクションであり、かつ前記第２の修正動作がリプレイ・アクションであることを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第２のメモリ・コントローラ・ポートに割り当てられる、請求項１３に記載の装置。
【請求項１６】
メモリ・コントローラにおいてコマンドをスケジューリングするための装置であって、
第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間の伝送エラーを検出する手段と、
前記伝送エラーの前記検出に応答して、前記第１のメモリ・コントローラ・ポートにおいてリプレイ・アクションを伴うリンク・リトレーン・アクションである第１の修正動作を開始する手段と、
第２のメモリ・コントローラ・ポートにおいて第２のリドライブ・デバイスとの間のリプレイ・アクションである第２の修正動作を開始していたことを判定する手段と、
前記メモリ・コントローラにおいて前記判定に応答して、前記第１の修正動作にかかる時間及び前記第２の修正動作にかかる時間の判定と、前記第１の修正動作及び前記第２の修正動作のうちどちらの修正動作が最初に開始されたかの判定とを含む比較に基づき、前記第１の修正動作及び前記第２の修正動作のうちどちらの修正動作が最初に完了するかを示す手段と、
前記メモリ・コントローラにおいて、前記第２のメモリ・コントローラ・ポートに複数の着信読み出しコマンドを割り当てる手段と、
を備える装置。
【請求項１７】
前記リプレイ・アクションが、第１のリドライブ・デバイスにコマンド・ストリームを再発行することを含み、前記コマンド・ストリームが、前記伝送エラーに応答して前記第１のリドライブ・デバイスが前記コマンド・ストリームを停止させたポイントから再発行される、請求項１６に記載の装置。
【請求項１８】
前記リンク・リトレーン・アクションが、前記第１のメモリ・コントローラ・ポートと前記第１のリドライブ・デバイスとの間のリンクをリトレーンすることを含む、請求項１６に記載の装置。
【請求項１９】
メモリ・コントローラにおいてコマンドをスケジューリングするために、コンピュータに、
第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間の伝送エラーを検出する手順と、
前記伝送エラーの前記検出に応答して、前記第１のメモリ・コントローラ・ポートにおいて第１の修正動作を開始する手順と、
第２のメモリ・コントローラ・ポートにおいて第２のリドライブ・デバイスとの間の第２の修正動作を開始していたことを判定する手順と、
前記メモリ・コントローラにおいて前記判定に応答して、前記第１の修正動作にかかる時間及び前記第２の修正動作にかかる時間の判定と、前記第１の修正動作及び前記第２の修正動作のうちどちらの修正動作が最初に開始されたかの判定とを含む比較に基づき、前記第１の修正動作及び前記第２の修正動作のうちどちらの修正動作が最初に完了するかを示す手順と、
前記メモリ・コントローラにおいて、前記第１のメモリ・コントローラ・ポート及び前記第２のメモリ・コントローラ・ポートのうち、修正動作を最初に完了するメモリ・コントローラ・ポートに複数の着信読み出しコマンドを割り当てる手順と、
を実行させるためのプログラム。
【請求項２０】
前記第１の修正動作が第１のリプレイ・アクションを開始する前に前記第２の修正動作が第２のリプレイ・アクションを開始したことを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第２のメモリ・コントローラ・ポートに割り当てられる、請求項１９に記載のプログラム。
【請求項２１】
前記第１の修正動作がリプレイ・アクションを伴うリンク・リトレーン・アクションであり、かつ前記第２の修正動作がリプレイ・アクションであることを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第２のメモリ・コントローラ・ポートに割り当てられる、請求項１９に記載のプログラム。
【請求項２２】
メモリ・コントローラにおいてコマンドをスケジューリングするために、コンピュータに、
第１のメモリ・コントローラ・ポートと第１のリドライブ・デバイスとの間の伝送エラーを検出する手順と、
前記伝送エラーの前記検出に応答して、前記第１のメモリ・コントローラ・ポートにおいてリプレイ・アクションを伴うリンク・リトレーン・アクションである第１の修正動作を開始する手順と、
第２のメモリ・コントローラ・ポートにおいて第２のリドライブ・デバイスとの間のリプレイ・アクションである第２の修正動作を開始していたことを判定する手順と、
前記メモリ・コントローラにおいて前記判定に応答して、前記第１の修正動作にかかる時間及び前記第２の修正動作にかかる時間の判定と、前記第１の修正動作及び前記第２の修正動作のうちどちらの修正動作が最初に開始されたかの判定とを含む比較に基づき、前記第１の修正動作及び前記第２の修正動作のうちどちらの修正動作が最初に完了するかを示す手順と、
前記メモリ・コントローラにおいて、前記第２のメモリ・コントローラ・ポートに複数の着信読み出しコマンドを割り当てる手順と、
を実行させるためのプログラム。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図２
【補正方法】変更
【補正の内容】
【図２】
2013502019.tif 000015
【手続補正４】
【補正対象書類名】図面
【補正対象項目名】図３
【補正方法】変更
【補正の内容】
【図３】
2013502019.tif 000016
【国際調査報告】
2013502019.tif 000017
2013502019.tif 000018