JP2013502019A - メモリ・コントローラにおいてコマンドをスケジューリングするための方法、装置及びプログラム - Google Patents
メモリ・コントローラにおいてコマンドをスケジューリングするための方法、装置及びプログラム Download PDFInfo
- Publication number
- JP2013502019A JP2013502019A JP2012525149A JP2012525149A JP2013502019A JP 2013502019 A JP2013502019 A JP 2013502019A JP 2012525149 A JP2012525149 A JP 2012525149A JP 2012525149 A JP2012525149 A JP 2012525149A JP 2013502019 A JP2013502019 A JP 2013502019A
- Authority
- JP
- Japan
- Prior art keywords
- memory controller
- command
- commands
- controller port
- port
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1405—Saving, restoring, recovering or retrying at machine instruction level
- G06F11/141—Saving, restoring, recovering or retrying at machine instruction level for bus or memory accesses
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Debugging And Monitoring (AREA)
Abstract
【課題】 メモリ・コントローラにおける改善されたコマンド・スケジューリングを提供すること。
【解決手段】 メモリ・コントローラにおいてコマンドをスケジューリングするために応答するシステム及び方法が開示される。第1のメモリ・コントローラ・ポートと第1のリドライブ・デバイスとの間の伝送エラーを検出することができる。伝送エラーの検出に応答して、第1のメモリ・コントローラ・ポートにおいて第1の修正動作を開始することができる。特定の方法は、第2のメモリ・コントローラ・ポートが第2の修正動作を開始していたことを判定することを含むことができる。第1の修正動作と第2の修正動作との比較に基づき、着信読み出しコマンドを割り当てることができる。
【選択図】 図1
【解決手段】 メモリ・コントローラにおいてコマンドをスケジューリングするために応答するシステム及び方法が開示される。第1のメモリ・コントローラ・ポートと第1のリドライブ・デバイスとの間の伝送エラーを検出することができる。伝送エラーの検出に応答して、第1のメモリ・コントローラ・ポートにおいて第1の修正動作を開始することができる。特定の方法は、第2のメモリ・コントローラ・ポートが第2の修正動作を開始していたことを判定することを含むことができる。第1の修正動作と第2の修正動作との比較に基づき、着信読み出しコマンドを割り当てることができる。
【選択図】 図1
Description
本発明は、一般にデータ通信に関し、より具体的にはデータ伝送エラーを低減することに関する。
データ伝送は、伝送におけるエラーにより著しく影響を受けることがある。例えば、伝送エラーは、メモリ・コントローラからメモリ・リドライブ・デバイスに送信される読み出しコマンドに影響を与えることがある。検出されたエラーに応答して、メモリ・リドライブ・デバイスは、特別なエラー指標コマンド警告状態フレームを伝送することができる。警告状態フレームは、読み出しコマンドが破損されていたことを示す。メモリ・コントローラは、それに続いて、失敗したコマンドの再送信といった修正動作を実施することができる。例えば、メモリ・コントローラは、読み出しコマンドをリプレイすることができ、又は読み出しコマンドをリプレイする前にメモリ・コントローラとメモリ・リドライブ・デバイスとの間のリンクをリトレーンすることができる。
メモリ・コントローラが修正動作に従事しているとき、新たなコマンド及びデータを処理するメモリの能力は減少する。例えば、メモリ・コントローラは、要求側エージェントからのコマンドを伝送すること又はコマンドに関連したデータを受信することに利用できなくなることがある。メモリ・コントローラに割り振られたコマンドは、メモリ・コントローラの中でバックログとなってしまうことがある。このようなバックログは、メモリの待ち時間を増大させることがある。多くの場合、メモリの待ち時間は、システム全体の性能を低下させるという望ましくない結果を生じさせ得る。したがって、メモリ・コントローラにおける改善されたコマンド・スケジューリングが必要とされている。
特定の一実施形態において、メモリ・コントローラにおいてコマンドをスケジューリングする改善された方法が開示される。本方法は、第1のメモリ・コントローラ・ポートと第1のリドライブ・デバイスとの間の伝送エラーを検出することを含む。伝送エラーの検出に応答して、第1のメモリ・コントローラ・ポートにおいて第1の修正動作が開始される。本方法は、第2のメモリ・コントローラ・ポートが第2の修正動作を開始していたことを判定することをさらに含む。第1の修正動作と第2の修正動作との比較に基づき、着信読み出しコマンド(incoming read command)が割り当てられる。
別の特定の実施形態において、メモリ・コントローラにおいてコマンドをスケジューリングする改善された方法が開示される。本方法は、メモリ・コントローラとリドライブ・デバイスとの間のリンクがメモリ・コントローラからリドライブ・デバイスへの同期コマンドの伝送を必要としていることを判定することを含む。信号のラウンドトリップ時間に基づき、コア・クロック・サイクルの望ましくない半期を判定することができる。本方法は、コア・クロック・サイクルの望ましくない半期の判定に基づき、同期コマンドの伝送をスケジューリングすることをさらに含む。
別の特定の実施形態において、メモリ・コントローラにおいてコマンドをスケジューリングするための改善された方法が開示される。本方法は、メモリ・コントローラ・ポートから、1サイクル中にメモリ・コントローラ・ポートの読み出しキューの待ち行列に並んだコマンドの数の指標を受信することを含む。メモリ・コントローラ・ポートに伝送された送信済みコマンドの数を追跡することができる。本方法は、待ち行列に並んだコマンドの数及び送信済みコマンドの数に基づき、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンドの予測数を判定することをさらに含む。
本発明を特徴付けるこれらの及び他の利点及び特徴は、本明細書に添付され、その更なる部分を構成する、添付の特許請求の範囲の中で示される。しかしながら、本発明、及びその使用を通じて達成される利点をより良く理解するために、本発明の例示的な実施形態がその中で説明されている図面とそれに付随する説明事項を参照されたい。
図1は、メモリ・コントローラにおいてコマンドをスケジューリングするように構成された、全体が100で示されるシステムの第1の実施形態の図である。システム100は、第1のリドライブ・デバイス108と、第2のリドライブ・デバイス110と、メモリ・コントローラ102とを含む。メモリ・コントローラ102は、アドレス変換ユニット112と、第1のメモリ・コントローラ・ポート104と、第2のメモリ・コントローラ・ポート106とを含む。特定の実施形態において、第1のメモリ・コントローラ・ポート104と第1のリドライブ・デバイス108とは、第1の高速リンクを経由して接続される。第2のメモリ・コントローラ・ポート106と第2のリドライブ・デバイス110とは、第2の高速リンクを経由して接続することができる。各高速リンクは、2つの単方向高速リンクを指すことができる。例えば、第1のメモリ・コントローラ・ポート104は、第1の高速リンクのサウスバウンド・リンクを経由して第1のリドライブ・デバイス108に伝送することができる。第1のリドライブ・デバイス108は、第1の高速リンクのノースバウンド・リンクを経由して第1のメモリ・コントローラ・ポート104に伝送することができる。
特定の実施形態において、第1のメモリ・コントローラ・ポート104及び第2のメモリ・コントローラ・ポート106は、同一のメモリ内容を収容した異なるリドライブ・デバイスにアクセスする。例えば、第1のメモリ・コントローラ・ポート104及び第2のメモリ・コントローラ・ポート106は、ミラーリングすることができる。第1のメモリ・コントローラ・ポート104及び第2のメモリ・コントローラ・ポート106によりアクセスされるデータは、同一のものとすることができる。
メモリ・コントローラ102は、第1のメモリ・コントローラ・ポート104において開始された第1の修正動作122と第1のメモリ・コントローラ・ポート106において開始された第2の修正動作124を比較することができる。修正動作を比較することは、修正動作の重大度(severity)と、その修正動作が開始された順番とを判定することを含むことができる。この比較に基づき、メモリ・コントローラ102は、どちらのメモリ・コントローラ・ポートが着信読み出しコマンド126を処理するために最初に使用可能となるかを判定することができる。最初に使用可能となるメモリ・コントローラ102のポートによって着信読み出しコマンド126が実行されるようにスケジューリングすることで、着信読み出しコマンド126により生じる遅延を減らすことができる。このような着信読み出しコマンド126は、修正動作に従事しているメモリ・コントローラ・ポートにおいてはバックログとなることがある。メモリ・コントローラ・ポートにおける遅延を最小化することで、メモリの待ち時間が改善され、システム100の全効率が向上する。
メモリ・コントローラ102は、第1のメモリ・コントローラ・ポート104と第1のリドライブ・デバイス108との間の伝送エラーを検出するように構成することができる。メモリ・コントローラ102は、伝送エラー120の検出に応答して、第1のメモリ・コントローラ・ポート104において第1の修正動作122を開始するようにさらに構成することができる。メモリ・コントローラ102は、第2のメモリ・コントローラ・ポート106が第2の修正動作124を開始していたことを判定することができる。メモリ・コントローラ102は、第1の修正動作122と第2の修正動作124との比較に基づき、着信読み出しコマンド126を割り当てることができる。
第1のメモリ・コントローラ・ポート104は、第1の高速リンクのサウスバウンド・リンクを経由して、第1のリドライブ・デバイス108にコマンドのストリームを伝送することができる。第1のリドライブ・デバイス108は、コマンドのストリームをデコード及び再フォーマットして、第1のリドライブ・デバイス108に接続されたメモリ構造体(図示せず)に送ることができる。メモリ構造体は、コマンド・ストリームに応答して、データを取り出すことができ、そのデータを第1のリドライブ・デバイス108に伝送することができる。第1のリドライブ・デバイス108は、メモリ構造体から受信したデータを再フォーマットし、再フォーマット済みデータを高速リンクのノースバウンド・リンクを経由して第1のメモリ・コントローラ・ポート104に伝送することができる。
第1のリドライブ・デバイス108は、第1の高速リンクのサウスバウンド・リンクを経由して受信したコマンド・ストリーム内の伝送エラーを検出することができる。例えば、第1のリドライブ・デバイス108は、コマンド・ストリーム内の第1のコマンドが訂正不可能な誤り訂正符号(ECC)又は巡回冗長検査(CRC)エラーを含んでいると判定し得る。伝送エラー120を検出した後、第1のリドライブ・デバイス108は、コマンド・ストリームの中の後続のコマンドを全てドロップし、第1のメモリ・コントローラ・ポート104に警告状態フレームを戻すことができる。第1のリドライブ・デバイス108は、伝送エラー120に応答して、第1の高速リンクのノースバウンド・リンクを経由して第1のメモリ・コントローラ・ポート104に警告状態フレームのストリームを戻すことができる。第1のメモリ・コントローラ・ポート104は、受信した警告状態フレームを用いて、第1のメモリ・コントローラ・ポート104と第1のリドライブ・デバイス108との間の伝送エラー120を検出することができる。例えば、第1のメモリ・コントローラ・ポート104は、第1の高速リンクのノースバウンド・リンクを経由して警告状態フレームを受信したことに基づき、第1の高速リンクのサウスバウンド・リンクにおいて伝送エラー120が生じたと判定することができる。
第1のメモリ・コントローラ・ポート104は、第1の高速リンクのノースバウンド・リンクを経由して受信した第1のリドライブ・デバイス108からのデータ内の伝送エラー120を検出することができる。例えば、第1のメモリ・コントローラ・ポート104は、第1のリドライブ・デバイス108から受信したデータをCRCエラーについてチェックする論理を含むことができる。例えば、CRCをチェックすることで、第1のリドライブ・デバイス108から受信したデータが伝送エラー(例えば、伝送エラー120)を含んでいることを示し得る。
伝送エラー120の検出に応答して、メモリ・コントローラ102は、第1のメモリ・コントローラ・ポート104において第1の修正動作122を開始することができる。第1の修正動作122は、リプレイ・アクションとすることができる。第1の高速リンクがコマンド・ストリームを再発行する準備ができている場合には、リプレイ・アクションを第1の修正動作122として選択することができる。例えば、警告状態フレームを受信した後、第1のメモリ・コントローラ・ポート104は、第1の高速リンクのリンク・エラー状態リセットを発行することができる。代替的に、リンク・エラー状態リセットは、ソフト・リセットと呼ばれることがある。ソフト・リセットが第1の高速リンクの警告状態フレームをクリアすることに成功した場合に、第1の高速リンクはコマンド・ストリームを再発行する準備ができているとすることができる。第1のメモリ・コントローラ・ポート104は、リプレイ・アクションを第1の修正動作122として開始することができる。例えば、第1のリドライブ・デバイス108は、第1の高速リンクのサウスバウンド・リンクを経由して受信したコマンド・ストリームの第1のコマンド内の伝送エラー120を検出し得る。
伝送エラー120の検出に応答して、第1のリドライブ・デバイス108は、第1のコマンドの後に受信したコマンド・ストリームの中の後続のコマンドを全てドロップすることができる。第1のリドライブ・デバイス108は、第1のコマンド又は後続のコマンドをメモリ構造体にリドライブしないものとすることができる。第1のリドライブ・デバイス108がコマンド・ストリームをメモリ構造体にリドライブできるようにするために、リプレイ・アクションを用いて、第1のリドライブに対してコマンド・ストリームを再発行することができる。例えば、第1のメモリ・コントローラ・ポート104は、第1のリドライブ・デバイス108が伝送エラー120の検出に応答してコマンド・ストリームを停止させたポイントから、コマンド・ストリームを再発行することができる。この場合、第1のメモリ・コントローラ・ポート104は、第1のリドライブ・デバイス108に対して、第1のコマンドから始まるコマンド・ストリームを再発行することができる。
しかしながら、ソフト・リセットが第1の高速リンクの警告状態フレームをクリアすることに成功しない場合には、第1の高速リンクは、リプレイ・アクション中に再発行されたコマンドを受信する準備ができていないものとすることができる。例えば、第1のメモリ・コントローラ・ポート104は、ソフト・リセットを実行した後も、第1の高速リンクのノースバウンド・リンク上で警告状態フレームを受信し続けることがある。第1のメモリ・コントローラ・ポート104は、第1の修正動作122としてリンク・リトレーン・アクションを開始することができる。リンク・リトレーン・アクションは、第1のメモリ・コントローラ・ポート104と第1のリドライブ・デバイス108との間の第1の高速リンクをリトレーンすることを含むことができる。第1のメモリ・コントローラ・ポート104は、リンク・リトレーン・アクションによって、第1の高速リンクが再発行されたコマンドを受信する準備ができた後で、リプレイ・アクションを実行することができる。例えば、第1の高速リンクがリトレーンされた後で、第1のメモリ・コントローラ・ポート104は、第1のリドライブ・デバイス108が伝送エラー120の検出に応答してコマンド・ストリームを停止させたポイントからコマンド・ストリームを再発行することができる。
代替的に、第1のメモリ・コントローラ・ポート104は、第1の高速リンクのノースバウンド・リンクにおける伝送エラー120の検出に応答して、第1の修正動作122を開始することができる。例えば、第1のメモリ・コントローラ・ポート104は、第1の高速リンクのノースバウンド・リンクを経由して受信したデータ内のCRCエラーを検出することができる。第1のメモリ・コントローラ・ポート104は、第1の高速リンクのサウスバウンド・リンクを経由して発行されたコマンド・ストリームの中の第2のコマンドがノースバウンド・リンクにおける破損データをもたらしたと判定することができる。例えば、第1のメモリ・コントローラ・ポート104は、第2のコマンドから始まるコマンド・ストリームを第1の高速リンクのサウスバウンド・リンクを経由して第1のリドライブ・デバイス108に対して再発行することにより、リプレイ・アクションを開始することができる。
サウスバウント・リンク又はノースバウンド・リンクを経由した第1の高速リンクにおける伝送エラー120の検出に応答して、メモリ・コントローラ102は、第2のメモリ・コントローラ・ポート106が修正動作(例えば、第2の修正動作124)を開始していたかどうか判定することができる。第2の修正動作124の検出に応答して、メモリ・コントローラ102は、第1の修正動作122と第2の修正動作124とを比較することができる。修正動作を比較することは、各々の修正動作の重大度を判定することと、どちらの修正動作が最初に開始されたかを判定することとを含むことができる。修正動作の重大度は、その修正動作を実行するのに必要なクロック・サイクルの数に基づくものとすることができる。リンク・リトレーン・アクションは、実行するのにリプレイ・アクションより多くのクロック・サイクルを要し得るので、従って、より重大である。この比較に基づき、メモリ・コントローラ102は、どちらの修正動作が最初に完了するかを示すことができる。メモリ・コントローラはまた、メモリ・コントローラ・ポートが通常のトラフィック(例えば、着信読み出しコマンド126)を処理するために使用可能となる順序を示すことができる。ミラー・モードにおいては、着信読み出しコマンドを、どちらのメモリ・コントローラ・ポートに割り当てることもできる。
メモリ・コントローラ102は、第1の修正動作122と第2の修正動作124との比較に基づき、着信読み出しコマンド126を割り当てることができる。アドレス変換ユニット112が、着信読み出しコマンド126を割り当てることができる。例えば、アドレス変換ユニット112は、比較に基づき、第1のメモリ・コントローラ・ポート104が第1の修正動作122を完了する前に第2のメモリ・コントローラ・ポート106が第2の修正動作124を完了するであろうと判定し得る。アドレス変換ユニット112は、着信読み出しコマンド126を第2のメモリ・コントローラ・ポート106に振り向けることができる。着信読み出しコマンド126を第2のメモリ・コントローラ・ポート106に振り向けることで、第1のメモリ・コントローラ・ポート104が第1の修正動作122を完了している間に着信読み出しコマンド126が第1のメモリ・コントローラ・ポート104でストールすることを防止することができる。着信読み出しコマンド126が遅延することを防止することで、メモリの待ち時間を改善することができる。システム100が音声又は映像をストリーミングする用途においては、読み出しコマンドがメモリ・コントローラ・ポートにおいてバックログとなることを防止することで、音飛び又は映像の欠落といった気付くほどになり得る影響を防止することができる。
図2は、メモリ・コントローラにおいてコマンドをスケジューリングするための、全体が200で示されるシステムの第2の実施形態の図である。システム200は、図1において参照されるシステム100でも見られる多くの要素を含み、同様の要素は同じ参照符号を有する。
第1のメモリ・コントローラ・ポート104は、第1の高速リンクのサウスバウンド・リンクを経由して、第1のリドライブ・デバイス108にコマンドのストリームを伝送することができる。第1のリドライブ・デバイス108は、コマンドのストリームをデコード及び再フォーマットして、第1のリドライブ・デバイス108に接続されたメモリ構造体(図示せず)に送ることができる。メモリ構造体は、コマンド・ストリームに応答して、データを取り出すことができ、そのデータを第1のリドライブ・デバイス108に伝送することができる。第1のリドライブ・デバイス108は、メモリ構造体から受信したデータを再フォーマットし、再フォーマット済みデータを高速リンクのノースバウンド・リンクを経由して第1のメモリ・コントローラ・ポート104に伝送することができる。
第1のリドライブ・デバイス108は、第1の高速リンクのサウスバウンド・リンクを経由して受信したコマンド・ストリーム内の伝送エラーを検出することができる。例えば、第1のリドライブ・デバイス108は、コマンド・ストリーム内の第1のコマンドがECC又はCRCシングル・ビット・エラーを含んでいると判定し得る。伝送エラー120を検出した後、第1のリドライブ・デバイス108は、コマンド・ストリームの中の後続のコマンドを全てドロップし、第1のメモリ・コントローラ・ポート104に警告状態フレームを戻すことができる。
第1のリドライブ・デバイス108は、伝送エラー120に応答して、第1の高速リンクのノースバウンド・リンクを経由して第1のメモリ・コントローラ・ポート104に警告状態フレームのストリームを戻すことができる。第1のメモリ・コントローラ・ポート104は、受信した警告状態フレームを用いて、第1のメモリ・コントローラ・ポート104と第1のリドライブ・デバイス108との間の伝送エラー120を検出することができる。例えば、第1のメモリ・コントローラ・ポート104は、第1の高速リンクのノースバウンド・リンクを経由して警告状態フレームを受信したことに基づき、第1の高速リンクのサウスバウンド・リンクにおいて伝送エラー120が生じたと判定することができる。
第1のメモリ・コントローラ・ポート104は、ノースバウンド・リンクを経由して受信した第1のリドライブ・デバイス108からのデータ内の伝送エラー120を検出することができる。例えば、第1のメモリ・コントローラ・ポート104は、第1のリドライブ・デバイス108から受信したデータをCRCエラーについてチェックする論理を含むことができる。例えば、CRCをチェックすることで、第1のリドライブ・デバイス108から受信したデータが伝送エラー(例えば、伝送エラー120)を含んでいることを示し得る。
伝送エラー120の検出に応答して、メモリ・コントローラ102は、第1のメモリ・コントローラ・ポート104において第1の修正動作222を開始することができる。第1の修正動作222は、リプレイ・アクションとすることができる。第1の高速リンクがコマンド・ストリームを再発行する準備ができている場合には、リプレイ・アクションを第1の修正動作222として選択することができる。例えば、警告状態フレームを受信した後、第1のメモリ・コントローラ・ポート104は、第1の高速リンクのソフト・リセットを発行することができる。
ソフト・リセットが第1の高速リンクの警告状態フレームをクリアすることに成功した場合に、第1の高速リンクはコマンド・ストリームを再発行する準備ができているとすることができる。第1のメモリ・コントローラ・ポート104は、リプレイ・アクションを第1の修正動作222として開始することができる。例えば、第1のリドライブ・デバイス108は、第1の高速リンクのサウスバウンド・リンクを経由して受信したコマンド・ストリームの第1のコマンド内の伝送エラー120を検出し得る。
伝送エラー120の検出に応答して、第1のリドライブ・デバイス108は、第1のコマンドの後に受信したコマンド・ストリームの中の後続のコマンドを全てドロップすることができる。第1のリドライブ・デバイス108は、第1のコマンド又は後続のコマンドをメモリ構造体にリドライブしないものとすることができる。第1のリドライブ・デバイス108がコマンド・ストリームをメモリ構造体にリドライブできるようにするために、リプレイ・アクションを用いて、第1のリドライブに対してコマンド・ストリームを再発行することができる。例えば、第1のメモリ・コントローラ・ポート104は、第1のリドライブ・デバイス108が伝送エラー120の検出に応答してコマンド・ストリームを停止させたポイントから、コマンド・ストリームを再発行することができる。第1のメモリ・コントローラ・ポート104は、第1のリドライブ・デバイス108に対して、第1のコマンドから始まるコマンド・ストリームを再発行することができる。
しかしながら、ソフト・リセットが第1の高速リンクの警告状態フレームをクリアすることに成功しない場合には、第1の高速リンクは、リプレイ・アクションによって再発行されたコマンドを受信する準備ができていないものとすることができる。例えば、第1のメモリ・コントローラ・ポート104は、ソフト・リセットを実行した後も、第1の高速リンクのノースバウンド・リンク上で警告状態フレームを受信し続けることがある。第1のメモリ・コントローラ・ポート104は、第1の修正動作222としてリンク・リトレーン・アクションを開始することができる。リンク・リトレーン・アクションは、第1のメモリ・コントローラ・ポート104と第1のリドライブ・デバイス108との間の第1の高速リンクをリトレーンすることを含むことができる。
第1のメモリ・コントローラ・ポート104は、リンク・リトレーン・アクションによって、第1の高速リンクが再発行されたコマンドを受信する準備ができた後で、リプレイ・アクションを実行することができる。例えば、第1の高速リンクがリトレーンされた後で、第1のメモリ・コントローラ・ポート104は、第1のリドライブ・デバイス108が伝送エラー120の検出に応答してコマンド・ストリームを停止させたポイントからコマンド・ストリームを再発行することができる。
代替的に、第1のメモリ・コントローラ・ポート104は、第1の高速リンクのノースバウンド・リンクにおける伝送エラー120の検出に応答して、第1の修正動作222を開始することができる。例えば、第1のメモリ・コントローラ・ポート104は、第1の高速リンクのノースバウンド・リンクを経由して受信したデータ内のCRCエラーを検出することができる。第1のメモリ・コントローラ・ポート104は、第1の高速リンクのサウスバウンド・リンクを経由して発行されたコマンド・ストリームの中の第2のコマンドが第1の高速リンクのノースバウンド・リンクにおける破損データをもたらしたと判定することができる。例えば、第1のメモリ・コントローラ・ポート104は、第2のコマンドから始まるコマンド・ストリームを第1の高速リンクのサウスバウンド・リンクを経由して第1のリドライブ・デバイス108に対して再発行することにより、リプレイ・アクションを開始することができる。
サウスバウント・リンク又はノースバウンド・リンクを経由した第1の高速リンクにおける伝送エラー120の検出に応答して、メモリ・コントローラ102は、第2のメモリ・コントローラ・ポート106が修正動作(例えば、第2の修正動作224)を開始していたかどうか判定することができる。第2の修正動作224の検出に応答して、メモリ・コントローラ102は、第1の修正動作222と第2の修正動作224とを比較することができる。修正動作を比較することは、各々の修正動作の重大度を判定することと、どちらの修正動作が最初に開始されたかを判定することとを含むことができる。
修正動作の重大度は、その修正動作を実行するのに必要なクロック・サイクルの数に基づくものとすることができる。リンク・リトレーン・アクションは、実行するのにリプレイ・アクションより多くのクロック・サイクルを要し、従って、より重大である。この比較に基づき、メモリ・コントローラ102は、どちらの修正動作が最初に完了するかということと、メモリ・コントローラ・ポートが通常のトラフィック(例えば、着信読み出しコマンド226)を処理するために使用可能となる順序とを示すことができる。
メモリ・コントローラ102は、第1の修正動作222と第2の修正動作224との比較に基づき、着信読み出しコマンド226を割り当てることができる。例えば、メモリ・コントローラ102は、比較に基づき、第1のメモリ・コントローラ・ポート104が第1の修正動作222を完了する前に第2のメモリ・コントローラ・ポート106が第2の修正動作224を完了するであろうと判定し得る。メモリ・コントローラ102は、着信読み出しコマンド226を第2のメモリ・コントローラ・ポート106に振り向けることができる。
別の例として、メモリ・コントローラ102は、比較に応答して、着信読み出しコマンド226を第2のメモリ・コントローラ・ポート106に割り当てることができる。この比較は、第1の修正動作222が第1のリプレイ・アクションを開始する前に、第2の修正動作224が第2のリプレイ・アクションを開始したことを示し得る。着信読み出しコマンド226を第2のメモリ・コントローラ・ポート106に振り向けることで、第1のメモリ・コントローラ・ポート104が第1の修正動作222を完了している間に着信読み出しコマンド226が第1のメモリ・コントローラ・ポート104でストールすることを防止することができる。着信読み出しコマンド226が遅延することを防止することで、メモリの待ち時間を改善することができる。例えば、システム200が音声又は映像をストリーミングする用途においては、読み出しコマンドがメモリ・コントローラ・ポートにおいてバックログとなることを防止することで、音飛び又は映像の欠落といった気付くほどになり得る影響を防止することができる。
図3は、メモリ・コントローラにおいてコマンドをスケジューリングするための、全体が300で示されるシステムの第3の実施形態の図である。システム300は、図1において参照されるシステム100でも見られる多くの要素を含み、同様の要素は同じ参照符号を有する。
動作中に、第1のメモリ・コントローラ・ポート104は、第1の高速リンクのサウスバウンド・リンクを経由して、第1のリドライブ・デバイス108にコマンドのストリームを伝送することができる。第1のリドライブ・デバイス108は、コマンドのストリームをデコード及び再フォーマットして、第1のリドライブ・デバイス108に接続されたメモリ構造体(図示せず)に送ることができる。メモリ構造体は、コマンド・ストリームに応答して、データを取り出すことができ、そのデータを第1のリドライブ・デバイス108に伝送することができる。第1のリドライブ・デバイス108は、メモリ構造体から受信したデータを再フォーマットし、再フォーマット済みデータを高速リンクのノースバウンド・リンクを経由して第1のメモリ・コントローラ・ポート104に伝送することができる。
第1のリドライブ・デバイス108は、サウスバウンド・リンクを経由して受信したコマンド・ストリーム内の伝送エラーを検出することができる。例えば、第1のリドライブ・デバイス108は、コマンド・ストリーム内の第1のコマンドがシングル・ビット・エラーを含んでいると判定し得る。伝送エラー120を検出した後、第1のリドライブ・デバイス108は、コマンド・ストリームの中の後続のコマンドを全てドロップし、第1のメモリ・コントローラ・ポート104に警告状態フレームを戻すことができる。
第1のリドライブ・デバイス108は、伝送エラー120に応答して、第1の高速リンクのノースバウンド・リンクを経由して第1のメモリ・コントローラ・ポート104に警告状態フレームのストリームを戻すことができる。第1のメモリ・コントローラ・ポート104は、受信した警告状態フレームを用いて、第1のメモリ・コントローラ・ポート104と第1のリドライブ・デバイス108との間の伝送エラー120を検出することができる。例えば、第1のメモリ・コントローラ・ポート104は、第1の高速リンクのサウスバウンド・リンクにおいて伝送エラー120が生じたと判定することができる。この判定は、第1の高速リンクのノースバウンド・リンクを経由した警告状態フレームの受信に基づくことができる。
第1のメモリ・コントローラ・ポート104は、第1の高速リンクのノースバウンド・リンクを経由して受信した第1のリドライブ・デバイス108からのデータ内の伝送エラー120を検出することができる。例えば、第1のメモリ・コントローラは、第1のリドライブ・デバイス108から受信したデータをCRCエラーについてチェックする論理を含むことができる。例えば、CRCをチェックすることで、第1のリドライブ・デバイス108から受信したデータが伝送エラー(例えば、伝送エラー120)を含み得ることを示すことができる。
伝送エラー120の検出に応答して、メモリ・コントローラ102は、第1のメモリ・コントローラ・ポート104において第1の修正動作322を開始することができる。第1の修正動作322は、リプレイ・アクションである。第1の高速リンクがコマンド・ストリームを再発行する準備ができている場合には、リプレイ・アクションを第1の修正動作322として選択することができる。例えば、警告状態フレームを受信した後、第1のメモリ・コントローラ・ポート104は、第1の高速リンクのソフト・リセットを発行することができる。ソフト・リセットが第1の高速リンクの警告状態フレームをクリアすることに成功した場合に、第1の高速リンクはコマンド・ストリームを再発行する準備ができているとすることができる。第1のメモリ・コントローラ・ポート104は、リプレイ・アクションを第1の修正動作322として開始することができる。例えば、第1のリドライブ・デバイス108は、第1の高速リンクのサウスバウンド・リンクを経由して受信したコマンド・ストリームの第1のコマンド内の伝送エラー120を検出し得る。
伝送エラー120の検出に応答して、第1のリドライブ・デバイス108は、第1のコマンドの後に受信したコマンド・ストリームの中の後続のコマンドを全てドロップすることができる。第1のリドライブ・デバイス108は、第1のコマンド又は後続のコマンドをメモリ構造体にリドライブしないものとすることができる。第1のリドライブ・デバイス108がコマンド・ストリームをメモリ構造体にリドライブできるようにするために、リプレイ・アクションを用いて、第1のリドライブに対してコマンド・ストリームを再発行することができる。例えば、第1のメモリ・コントローラ・ポート104は、第1のリドライブ・デバイス108が伝送エラー120の検出に応答してコマンド・ストリームを停止させたポイントから、コマンド・ストリームを再発行することができる。第1のメモリ・コントローラ・ポート104は、第1のリドライブ・デバイス108に対して、第1のコマンドから始まるコマンド・ストリームを再発行することができる。
ソフト・リセットが第1の高速リンクの警告状態フレームをクリアすることに成功しない場合には、第1の高速リンクは、リプレイ・アクションによって再発行されたコマンドを受信する準備ができていないものとすることができる。例えば、第1のメモリ・コントローラ・ポート104は、ソフト・リセットを実行した後も、第1の高速リンクのノースバウンド・リンク上で警告状態フレームを受信し続けることがある。第1のメモリ・コントローラ・ポート104は、第1の修正動作322としてリンク・リトレーン・アクションを開始することができる。リンク・リトレーン・アクションは、第1のメモリ・コントローラ・ポート104と第1のリドライブ・デバイス108との間の第1の高速リンクをリトレーンすることを含むことができる。
第1のメモリ・コントローラ・ポート104は、リンク・リトレーン・アクションによって、第1の高速リンクが再発行されたコマンドを受信する準備ができた後で、リプレイ・アクションを実行することができる。例えば、第1の高速リンクがリトレーンされた後で、第1のメモリ・コントローラ・ポート104は、第1のリドライブ・デバイス108が伝送エラー120の検出に応答してコマンド・ストリームを停止させたポイントからコマンド・ストリームを再発行することができる。
代替的に、第1のメモリ・コントローラ・ポート104は、第1の高速リンクのノースバウンド・リンクにおける伝送エラー120の検出に応答して、第1の修正動作322を開始することができる。例えば、第1のメモリ・コントローラ・ポート104は、第1の高速リンクのノースバウンド・リンクを経由して受信したデータ内のCRCエラーを検出することができる。第1のメモリ・コントローラ・ポート104は、第1の高速リンクのサウスバウンド・リンクを経由して発行されたコマンド・ストリームの中の第2のコマンドが第1の高速リンクのノースバウンド・リンクにおける破損データをもたらしたと判定することができる。例えば、第1のメモリ・コントローラ・ポート104は、第2のコマンドから始まるコマンド・ストリームを第1の高速リンクのサウスバウンド・リンクを経由して第1のリドライブ・デバイス108に対して再発行することにより、リプレイ・アクションを開始することができる。
サウスバウント・リンク又はノースバウンド・リンクを経由した第1の高速リンクにおける伝送エラー120の検出に応答して、メモリ・コントローラ102は、第2のメモリ・コントローラ・ポート106が修正動作(例えば、第2の修正動作324)を開始していたかどうかを判定することができる。第2の修正動作324の検出に応答して、メモリ・コントローラ102は、第1の修正動作322と第2の修正動作324とを比較することができる。修正動作を比較することは、各々の修正動作の重大度を判定することと、どちらの修正動作が最初に開始されたかを判定することとを含むことができる。
修正動作の重大度は、メモリ・コントローラがその修正動作を実行するのに幾つのクロック・サイクルを要するかを示す指標とすることができる。リンク・リトレーン・アクションは、実行するのにリプレイ・アクションより多くのクロック・サイクルを要し得るので、従って、より重大である。この比較に基づき、メモリ・コントローラ102は、どちらの修正動作が最初に完了するかということと、メモリ・コントローラ・ポートが通常のトラフィック(例えば、着信読み出しコマンド326)を処理するために使用可能となる順序とを示すことができる。
メモリ・コントローラ102は、第1の修正動作322と第2の修正動作324との比較に基づき、着信読み出しコマンド326を割り当てることができる。例えば、メモリ・コントローラ102は、比較に基づき、第1の修正動作322はリンク・リトレーン・アクションであり、第2の修正動作324はリプレイ・アクションであると判定することができる。リンク・リトレーン・アクションは実行するのにリプレイ・アクションより時間がかかるので、リンク・リトレーン・アクションはリプレイ・アクションより重大であり得る。
この比較に基づき、メモリ・コントローラ102は、第1のメモリ・コントローラ・ポート104が第1の修正動作322(すなわち、リンク・リトレーン・アクション)を完了する前に、第2のメモリ・コントローラ・ポート106が第2の修正動作324(すなわち、リプレイ・アクション)を完了すると判定することができる。メモリ・コントローラ102は、着信読み出しコマンド326を第2のメモリ・コントローラ・ポート106に振り向けることができる。着信読み出しコマンド326を第2のメモリ・コントローラ・ポート106に振り向けることで、第1のメモリ・コントローラ・ポート104が第1の修正動作322を完了している間に着信読み出しコマンド326が第1のメモリ・コントローラ・ポート104でストールすることを防止することができる。着信読み出しコマンド326が遅延することを防止することで、メモリの待ち時間を改善することができる。例えば、システム300が音声又は映像をストリーミングする用途においては、読み出しコマンドがメモリ・コントローラ・ポートにおいてバックログとなることを防止することで、音飛び又は映像の欠落といった気付くほどになり得る影響を防止することができる。
図4を参照すると、メモリ・コントローラにおいてコマンドをスケジューリングするための、全体が400で示される方法の第1の実施形態の図が示される。方法400は、開始状態401で開始する。ブロック402において、第1のメモリ・コントローラ・ポートは、第1のメモリ・コントローラ・ポートと第1のリドライブ・デバイスとの間のリンク上で警告状態フレームが受信されたかどうかを判定することができる。第1のメモリ・コントローラ・ポートが警告状態フレームを受信し得ないう場合、論理はブロック402に戻る。警告状態フレームが受信された場合、第1のメモリ・コントローラ・ポートは、ブロック404において、ソフト・リセットを実行する。その後、ブロック406において、第1のメモリ・コントローラ・ポートは、リンクの警告状態フレームがクリアされたかどうか判定することができる。クリアされた場合、第1のメモリ・コントローラ・ポートは、ブロック408において、第1のメモリ・コントローラ・ポートにおいて第1のリプレイ・アクションを開始することができる。
第1のメモリ・コントローラ・ポートは、ブロック410において、第1のメモリ・コントローラ・ポートにおいて第1のリプレイ・アクションが進行中であることをアドレス変換ユニットに対して示すことができる。ブロック412において、メモリ・コントローラは、第2のメモリ・コントローラ・ポートがリプレイ・アクション(例えば、第2のリプレイ・アクション)に従事しているかどうかを判定することができる。第2のメモリ・コントローラ・ポートが第2のリプレイ・アクションに従事していない場合、論理はブロック416に進む。第2のメモリ・コントローラが第2のリプレイ・アクションに従事している場合、論理はブロック414に進む。
ブロック414において、メモリ・コントローラは、第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションを開始する前に、第2のメモリ・コントローラ・ポートが第2のリプレイ・アクションを開始していたかどうかを判定する。第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションを開始する前に、第2のメモリ・コントローラ・ポートが第2のリプレイ・アクションを開始していた場合、メモリ・コントローラは、ブロック418において、着信読み出しコマンドを第2のメモリ・コントローラ・ポートに振り向ける。ブロック420において、第1のメモリ・コントローラ・ポートは、第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションを既に完了したかどうかを判定することができる。第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションを既に完了した場合、メモリ・コントローラは、ブロック422において、着信読み出しコマンドを第1のメモリ・コントローラ・ポートと第2のメモリ・コントローラ・ポートとの両方に振り向ける。論理は、状態434で終了することができる。
ブロック420において、第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションをまだ完了していない場合、論理はブロック420に戻る。ブロック414において、第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションを開始する前に第2のメモリ・コントローラ・ポートが第2のリプレイ・アクションを開始していなかった場合、メモリ・コントローラは、ブロック436において、着信読み出しコマンドを第1のメモリ・コントローラ・ポートに振り向けることができる。
ブロック438において、メモリ・コントローラは、第2のメモリ・コントローラ・ポートが第2のリプレイ・アクションを既に完了したかどうか判定することができる。既に完了した場合、メモリ・コントローラは、ブロック422において、着信読み出しコマンドを第1のメモリ・コントローラ・ポートと第2のメモリ・コントローラ・ポートとの両方に振り向けることができる。論理は、状態434で終了することができる。ブロック438において、第2のメモリ・コントローラ・ポートが第2のリプレイ・アクションをまだ完了していない場合、論理はブロック438に戻る。
ブロック416において、メモリ・コントローラは、第2のメモリ・コントローラ・ポートが第2のメモリ・コントローラ・ポートと第2のリドライブ・デバイスとの間のリンクのリトレーンに従事しているかどうか判定することができる。第2のメモリ・コントローラ・ポートが第2のリンク・リトレーンを開始していた場合、メモリ・コントローラは、ブロック440において、着信読み出しコマンドを第1のメモリ・コントローラ・ポートに振り向けることができる。ブロック445において、メモリ・コントローラは、第2のメモリ・コントローラ・ポートがリトレーン中であるかどうかを判定する。第2のメモリ・コントローラ・ポートがリトレーン中である場合、論理はブロック445に戻る。第2のメモリ・コントローラ・ポートが既にリトレーンを完了した場合、メモリ・コントローラは、ブロック422において、着信読み出しコマンドを第1のメモリ・コントローラ・ポートと第2のメモリ・コントローラ・ポートとの両方に振り向けることができる。論理は、状態434で終了することができる。
ブロック416において、第2のメモリ・コントローラ・ポートが第2のリンク・リトレーン・アクションに従事していない場合、メモリ・コントローラは、ブロック418において、着信読み出しコマンドを第2のメモリ・コントローラ・ポートに振り向けることができる。ブロック420において、第1のメモリ・コントローラ・ポートは、第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションを既に完了したかどうか判定することができる。第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションをまだ完了していない場合、論理はブロック420に戻る。第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションを既に完了した場合、メモリ・コントローラは、ブロック422において、着信読み出しコマンドを第1のメモリ・コントローラ・ポートと第2のメモリ・コントローラ・ポートとの両方に振り向けることができる。論理は、状態434で終了することができる。
ブロック406において、警告状態フレームがクリアされていない場合、第1のメモリ・コントローラ・ポートは、ブロック424において、第1のメモリ・コントローラ・ポートと第1のリドライブ・デバイスとの間の第1のリンク・リトレーン・アクションを開始する。第1のメモリ・コントローラ・ポートは、ブロック426において、第1のメモリ・コントローラ・ポートが第1のリトレーン・アクションを開始したことをアドレス変換ユニットに対して示す。メモリ・コントローラは、ブロック428において、第2のメモリ・コントローラ・ポートが第2のリンク・リトレーン・アクションに従事しているかどうか判定する。
第2のメモリ・コントローラ・ポートが第2のメモリ・コントローラ・ポートと第2のリドライブ・デバイスとの間のリンクをリトレーンしている場合、メモリ・コントローラは、ブロック422において、着信読み出しコマンドを第1のメモリ・コントローラ・ポートと第2のメモリ・コントローラ・ポートとの両方に振り向けることができる。論理は、状態434で終了する。
ブロック428において、第2のメモリ・コントローラ・ポートが第2のリンク・リトレーン・アクションに従事していない場合、論理はブロック430に進み、メモリ・コントローラは、着信コマンドを第2のメモリ・コントローラ・ポートに振り向けることができる。ブロック432において、メモリ・コントローラは、第1のメモリ・コントローラ・ポートが第1のリンク・リトレーン・アクションを既に完了したかどうか判定する。第1のメモリ・コントローラ・ポートが第1のリンク・リトレーン・アクションをまだ完了していない場合、論理はブロック432に戻る。第1のメモリ・コントローラ・ポートが、第1のメモリ・コントローラ・ポートと第1のリドライブ・デバイスとの間のリンクのリトレーンを既に完了した場合、第1のメモリ・コントローラ・ポートは、ブロック408において、第1のメモリ・コントローラ・ポートにおける第1のリプレイ・アクションを開始する。第1のメモリ・コントローラ・ポートは、ブロック410において、第1のメモリ・コントローラ・ポートにおいて第1のリプレイ・アクションが進行中であることをアドレス変換ユニットに対して示す。ブロック412において、メモリ・コントローラは、第2のメモリ・コントローラ・ポートが第2のリプレイ・アクションに従事しているかどうか判定する。第2のメモリ・コントローラ・ポートが第2のリプレイ・アクションを開始していない場合、論理はブロック416に進む。第2のメモリ・コントローラが第2のリプレイ・アクションを既に開始していた場合、論理はブロック414に進む。
ブロック414において、メモリ・コントローラは、第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションを開始する前に、第2のメモリ・コントローラ・ポートが第2のリプレイ・アクションを開始していたかどうかを判定することができる。第1のメモリ・コントローラ・ポートより前に第2のメモリ・コントローラ・ポートがリプレイ・アクションを開始していた場合、論理はブロック418に進み、メモリ・コントローラは、着信読み出しコマンドを第2のメモリ・コントローラ・ポートに振り向ける。
第1のメモリ・コントローラ・ポートは、ブロック420において、第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションを既に完了したかどうかを判定することができる。第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションを既に完了した場合、メモリ・コントローラは、ブロック422において、着信読み出しコマンドを第1のメモリ・コントローラ・ポートと第2のメモリ・コントローラ・ポートとの両方に振り向けることができる。論理は、状態434で終了することができる。第1のメモリ・コントローラ・ポートがリプレイ・アクションをまだ完了していない場合、論理は、第1のメモリ・コントローラ・ポートにおける第1のリプレイ・アクションが完了するまで、ブロック420に戻る。
ブロック414において、第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションを開始する前に第2のメモリ・コントローラ・ポートが第2のリプレイ・アクションを開始していなかった場合、メモリ・コントローラは、ブロック436において、着信読み出しコマンドを第1のメモリ・コントローラ・ポートに振り向ける。ブロック438において、メモリ・コントローラは、第2のメモリ・コントローラ・ポートが第2のリプレイ・アクションを既に完了したかどうかを判定することができる。既に完了した場合、メモリ・コントローラは、ブロック422において、着信読み出しコマンドを第1のメモリ・コントローラ・ポートと第2のメモリ・コントローラ・ポートとの両方に振り向ける。論理は、状態434で終了することができる。ブロック438において、第2のメモリ・コントローラ・ポートが第2のリプレイ・アクションをまだ完了していない場合、論理はブロック438に戻ることができる。
ブロック416において、メモリ・コントローラは、第2のメモリ・コントローラ・ポートが第2のメモリ・コントローラ・ポートと第2のリドライブ・デバイスとの間のリンクのリトレーンに従事しているかどうかを判定することができる。第2のメモリ・コントローラ・ポートが第2のリンク・リトレーンを開始していた場合、メモリ・コントローラは、ブロック440において、着信読み出しコマンドを第1のメモリ・コントローラ・ポートに振り向けることができる。ブロック445において、メモリ・コントローラは、第2のメモリ・コントローラ・ポートがリトレーン中であるかどうかを判定する。第2のメモリ・コントローラ・ポートがリトレーン中である場合、論理はブロック445に戻る。第2のメモリ・コントローラ・ポートが既にリトレーンを完了した場合、メモリ・コントローラは、ブロック422において、着信読み出しコマンドを第1のメモリ・コントローラ・ポートと第2のメモリ・コントローラ・ポートとの両方に振り向けることができる。論理は、状態434で終了することができる。
ブロック416において、第2のメモリ・コントローラ・ポートが第2のリンク・リトレーン・アクションに従事していない場合、メモリ・コントローラは、ブロック418において、着信読み出しコマンドを第2のメモリ・コントローラ・ポートに振り向けることができる。ブロック420において、第1のメモリ・コントローラ・ポートは、第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションを既に完了したかどうかを判定する。第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションをまだ完了していない場合、論理はブロック420に戻る。第1のメモリ・コントローラ・ポートが第1のリプレイ・アクションを既に完了した場合、メモリ・コントローラは、ブロック422において、着信読み出しコマンドを第1のメモリ・コントローラ・ポートと第2のメモリ・コントローラ・ポートとの両方に振り向けることができる。論理は、状態434で終了することができる。
図5は、メモリ・コントローラにおいてコマンドをスケジューリングする方法500の第2の実施形態の流れ図である。方法500は、図1−図3のシステムのいずれか、またはその組み合わせによって実行することができる。方法500は、ブロック502において、第1のメモリ・コントローラ・ポートと第1のリドライブ・デバイスとの間の伝送エラーを検出することを含むことができる。例えば、図1−図3のメモリ・コントローラは、第1のメモリ・コントローラ・ポート104と第1のリドライブ・デバイス108との間の伝送エラー120を検出することができる。
方法500はまた、ブロック504において、伝送エラーの検出に応答して、第1のメモリ・コントローラ・ポートにおいて第1の修正動作を開始することを含むことができる。例えば、図1−図3のメモリ・コントローラ102は、伝送エラー120の検出に応答して、第1のメモリ・コントローラ・ポート104において第1の修正動作122を開始する。方法500は、ブロック506において、第2のメモリ・コントローラ・ポートが第2の修正動作を開始していたことを判定することをさらに含む。例えば、図1−図3のメモリ・コントローラ102は、第2のメモリ・コントローラ・ポート106が第2の修正動作124を開始していたことを判定することができる。方法500はまた、ブロック508において、第1の修正動作と第2の修正動作との比較に基づき、着信読み出しコマンドを割り当てることを含むことができる。例えば、図1−図3のメモリ・コントローラ102は、第1の修正動作122と第2の修正動作124との比較に基づき、着信読み出しコマンド126を割り当てる。
図6は、メモリ・コントローラにおいてコマンドをスケジューリングするように構成された、全体が600で示されるシステムの第4の実施形態の図である。システム600は、リンク606を介して接続されたメモリ・コントローラ602とリドライブ・デバイス604とを含む。リンク606は、2つの単方向高速リンクを指す。例えば、メモリ・コントローラ602は、サウスバウンド・リンクを経由してリドライブ・デバイス604に伝送することができ、リドライブ・デバイス604は、ノースバウンド・リンクを経由してメモリ・コントローラ602に伝送することができる。
メモリ・コントローラ602は、本質的に同期しているが実際には同一周波数ではない、コア・クロック・ドメインとデータリンク層ドメインとを含むことができる。コア・クロック・ドメイン及びデータリンク層は互いの逓倍であり得る。コア・クロック・ドメインは、コア・クロック610に基づいてプロセスを実施する、メモリ・コントローラ602の部分を含むことができる。データリンク層ドメインは、メモリ・クロックに基づいてプロセスを実施する、メモリ・コントローラ602の部分を含むことができる。例えば、データリンク層ドメインにおいて、メモリ・コントローラ602は、メモリ・クロックに基づき、リンク606を経由してリドライブ・デバイス604からデータを受信することができる。データリンク層ドメインにおいてデータを受信した後で、メモリ・コントローラ602は、コア・クロック610に同期したプロセッサにコア・クロック・ドメインを介してデータを伝送する前に、そのデータをコア・クロック610にアラインメントすることができる。
例えば、コア・クロック・ドメインにアラインメントすることは、コア・クロック・サイクルの後半の間にデータリンク層ドメインにおいて受信された第1のデータを、半コア・クロック・サイクルだけ遅延させることを含むことができる。コア・クロック・サイクルの後半の間に受信された第1のデータを、次のコア・クロック・サイクルの前半になるまでコア・クロック・ドメインに伝送しないようにすることができる。第1のデータを次のコア・クロック・サイクルの前半になるまで遅延させることで、次のコア・クロック・サイクルの前半の間に受信される第2のデータを半コア・クロック・サイクルだけ遅延させることができる。この遅延が次に、コア・クロック・サイクルのその次の後半の間に受信される第3のデータを遅延させることができる。その次のコア・クロック・サイクルの前半の間に受信される第4のデータもまた遅延させることができ、次のコア・クロック・サイクルの後半の間に受信される第5のデータもまた同様である。データリンク層ドメインにおいて抽出することができ、かつコア・クロック・ドメインに伝送することができない非データが受信されると、第2のデータと第4のデータとの間にギャップが形成されることがある。遅延した第2のデータは、第4のデータを遅延させることなく、半コア・クロック・サイクルのギャップを埋めることができる。従って、第1のデータ、第2のデータ、第4のデータ、及び第5のデータを、ギャップなしで効率的にコア・クロック・ドメインに伝送することができる。
メモリ・コントローラ602は、コア・クロック610にアラインメントしたときにコア・クロック・ドメインにギャップなしに伝送することができるようなデータのシーケンスが得られるように、コマンドの伝送をスケジューリングすることができる。ギャップのないデータが得られるようにコマンドをスケジューリングすることは、同期コマンド608がコア・クロック・サイクルの望ましくない半期において伝送されるようにスケジューリングすることを含むことができる。同期コマンド608をコア・クロック・サイクルの望ましくない半期においてスケジューリングすることは、ギャップなしで伝送することができるデータを生成することになるのはコア・クロック・サイクルのどちらの半期における伝送かを判定することを含むことができる。コア・クロック・アラインメントの間のデータのギャップを防ぐように、メモリ・コントローラ602においてコマンドを効率的にスケジューリングすることで、メモリ・コントローラ602の効率性を改善し、かつメモリの待ち時間を低減することができる。
メモリ・コントローラ602は、メモリ・コントローラ602とリドライブ・デバイス604との間のリンク606が、メモリ・コントローラ602からリドライブ・デバイス604への同期コマンドの伝送を必要としていることを判定するように構成することができる。メモリ・コントローラ602は、信号のラウンドトリップ時間618に基づいてコア・クロック・サイクルの望ましくない半期を判定するように構成することができる。特定の実施形態において、メモリ・コントローラ602は、コア・クロック・サイクルの望ましくない半期の判定に基づいて同期コマンド608の伝送をスケジューリングするように構成される。
メモリ・コントローラ602は、メモリ・コントローラ602とリドライブ・デバイス604との間のリンク606が同期コマンド(例えば、同期コマンド608)を必要としていることを判定することができる。リンク606が同期コマンド608を必要としていることを判定することは、リンク上で伝送されるフレームの数をメモリ・コントローラ602が判定することを含むことができる。メモリ・コントローラ602は、リンク606上で伝送されるフレームの数を、上限閾値及び下限閾値と比較することができる。上限閾値は、リンクの同期を保持するために同期コマンド608を伝送しなければならなくなる前にリンク606上で伝送することが可能なフレームの最大数とすることができる。下限閾値は、同期コマンド608が伝送される前に伝送されなければならないフレームの最小数とすることができる。例えば、下限閾値を42フレームとし、上限閾値を84フレームとすることができる。メモリ・コントローラ602が42個の正常フレーム(例えば、読み出しコマンド)を伝送した後で、メモリ・コントローラ602は、84番目のフレームが伝送される前のどこかのポイントにおいて、リンク606が同期コマンド608の伝送を必要としていると判定することができる。例えば、リンクの同期を維持するために、メモリ・コントローラ602は、42番目のフレームと84番目のフレームとの間で、同期コマンド608をサウスバウンド・リンク上でリドライブ・デバイス604に伝送することができる。
リンク606が同期コマンド608を必要としているとの判定に応答して、メモリ・コントローラ602は、同期コマンド608の伝送をスケジューリングすることができる。同期コマンド608の伝送をスケジューリングすることは、コア・クロック・サイクルのどちらの半期で同期コマンドを伝送するかを判定することを含むことができる。
コア・クロック・サイクルのどちらの半期で同期コマンドを伝送するかを判定することは、望ましい半期と望ましくない半期とを判定することを含むことができる。コア・クロック・サイクルの望ましい半期とは、特定のコマンドをその上で伝送することで、コア・クロック・サイクルの前半においてメモリ・コントローラ602に到着するデータをもたらすことになる、コア・クロック・サイクルの半期を指すものとすることができる。コア・クロック・サイクルの前半において到着するデータは、コア・クロック・ドメインにアラインメントするので、従って、遅延を生じさせないであろう。コア・クロック・サイクルの望ましい半期は、メモリ・コントローラ602における効率的なデータ受信をもたらす。コア・クロック・サイクルの望ましくない半期とは、特定のコマンドをその上で伝送することで、コア・クロック・サイクルの後半においてメモリ・コントローラ602に到着するデータをもたらすことになる、コア・クロック・サイクルの半期を指すものとすることができる。コア・クロック・サイクルの後半において到着するデータは、コア・クロック・ドメインにアラインメントしないので、従って、遅延を生じさせ得る。この場合、コマンドをコア・クロック・サイクルの望ましくない半期の上で伝送することは、メモリ・コントローラ602における非効率的なデータの受信をもたらし得る。
コア・クロック・サイクルのどちらの半期が望ましくない半期であるかを判定することは、信号のラウンドトリップ時間618に基づくことができる。メモリ・コントローラ602は、リドライブ・デバイス604に対して発行される特定のコマンドと、その特定のコマンドに応答してメモリ・コントローラ602に到着するデータとの間のコア・クロック・サイクルの数を判定することができる。リンク上での特定のコマンドの伝送の間に、配線遅延がラウンドトリップ時間618に寄与し得る。リドライブ・デバイス604における受信器、内部論理、クロス・チップ配線、及びドライバ遅延が、ラウンドトリップ時間618に寄与し得る。例えば、特定のコマンドの発行とそれに応答して到着するデータとの間のラウンドトリップ時間618が、8つの全コア・クロック・サイクル及び1つの半コア・クロック・サイクルであるとする。特定のコマンドがコア・クロック・サイクルの前半において発行されたとすれば、データはコア・クロック・サイクルの後半において戻ることになる。コア・クロック・サイクルの後半において戻ってくるデータは、遅延を生じさせる。この場合には、コア・クロック・サイクルの前半が、望ましくない半期である。
代替的に、メモリ・コントローラ602は、リドライブ・デバイス604に対して発行される特定のコマンドと、その特定のコマンドに応答してメモリ・コントローラ602に到着するデータとの間のメモリ・クロック・サイクルの数を判定することができる。メモリ・クロックは、コア・クロック610の2倍の速さである。例えば、特定のコマンドの発行とそれに応答して到着するデータとの間のラウンドトリップ時間618は、17メモリ・クロック・サイクルとなり得る。別の例として、ラウンドトリップ時間618が9つの全コア・クロック・サイクルであった場合、コア・クロック・サイクルの後半において特定のコマンドが発行されると、データはコア・クロック・サイクルの後半において戻ってくることになる。この場合には、コア・クロック・サイクルの後半が、望ましくない半期である。
メモリ・コントローラ602は、コア・クロック・サイクルのどちらの半期が望ましくない半期であるかの判定を記憶する。判定を記憶することで、同期コマンド608の必要性が検出される度にメモリ・コントローラ602が判定を行わなければならなくなることを回避することができる。メモリ・コントローラ602は、リンク606がリトレーンされた後で、コア・クロック・サイクルのどちらの半期が望ましくない半期であるかを再判定することができる。例えば、リンク606のリトレーンは、信号のラウンドトリップ遅延に対して熱的な又は電圧のドリフトに起因する影響を与えることがある。メモリ・コントローラ602は、コア・クロック・サイクルのどちらの半期が望ましくない半期であるかを周期的に再判定することができる。例えば、メモリ・コントローラ602は、以前の判定の後に予め設定された数のコア・クロックが生じた後、判定を実施することができる。
同期コマンド608の伝送をコア・クロック・サイクルの望ましくない半期に基づいてスケジューリングすることは、コア・クロック・サイクルの望ましくない半期において同期コマンド608を伝送することを含むことができる。望ましくない半期において同期コマンド608をリドライブ・デバイス604に伝送することは、コア・クロック・サイクルの後半においてメモリ・コントローラ602に到着する同期状態をもたらし得る。同期状態はメモリ・コントローラ602のデータリンク層において抽出され、コア・クロック・ドメインでは用いられない。同期状態がコア・クロック・サイクルの後半においてメモリ・コントローラ602により受信されると、同期状態の後に受信されるデータを遅延させることなく、同期状態の前に受信されたデータを半コア・クロック・サイクルだけ遅延させることができる。その判定に基づく同期コマンド608の再アラインメント及びスケジューリング中に、コア・クロック・サイクルのどちらの半期が遅延をもたらすことになるか(例えば、コア・クロック・サイクルの望ましくない半期)を判定することにより、メモリ・コントローラ602は、同期コマンドの発行に関連するオーバーヘッドを防止することができる。同期オーバーヘッドを低減することで、メモリ・コントローラ602の効率を改善し、メモリの待ち時間を減らすことができる。
図7は、メモリ・コントローラ602においてコマンドをスケジューリングするための、全体が700で示されるシステムの第5の実施形態の図である。システム700は、図6において参照されるシステム600でも見られる多くの要素を含み、同様の要素は同じ参照符号を有する。
動作中、コア・クロック・サイクル730のどちらの半期が望ましくない半期728であるかの判定は、信号のラウンドトリップ時間732に基づくことができる。信号のラウンドトリップ時間732は、リドライブ・デバイス604に対して発行される特定のコマンド722と、その特定のコマンド722に応答してメモリ・コントローラ602に到着するデータ724との間のコア・クロック・サイクルの数とすることができる。代替的に、信号のラウンドトリップ時間732は、リドライブ・デバイス604に対して発行される特定のコマンド722と、その特定のコマンド722に応答してメモリ・コントローラ602に到着するデータ724との間のメモリ・クロック・サイクルの数に基づいて判定することができる。メモリ・コントローラ602は、ラウンドトリップ時間732が偶数個のメモリ・クロック・サイクルに等しいと判定し得る。例えば、特定のコマンド722の発行とその特定のコマンド722に応答するデータ724の到着との間のラウンドトリップ時間732は、18メモリ・クロック・サイクルであり得る。メモリ・クロックがコア・クロックの2倍の速さである場合、18メモリ・クロック・サイクルは、9つの全コア・クロック・サイクル730に対応し得る。特定のコマンド722をコア・クロック・サイクル730の後半において伝送すると、その結果、それに応答するデータ724は、コア・クロック・サイクル730の後半においてメモリ・コントローラ602に到着し得る。コア・クロック・サイクル730の後半において到着するデータは、コア・クロック・ドメインにアラインメントしないので、従って、遅延を生じさせ得る。コア・クロック・サイクルの後半における特定のコマンド722の伝送が、コア・クロック・サイクルの後半におけるデータ724をもたらすので、コア・クロック・サイクルの後半が望ましくない半期728である。
コア・クロック・サイクル730のどちらの半期が遅延をもたらすことになるか(例えば、コア・クロック・サイクル730の望ましくない半期728)を判定することにより、メモリ・コントローラ602は、同期コマンドの発行に関連するオーバーヘッドを防止することができる。同期オーバーヘッドを低減することで、メモリ・コントローラ602の効率性を改善し、メモリの待ち時間を減らすことができる。
図8は、メモリ・コントローラ602においてコマンドをスケジューリングするための、全体が800で示されるシステムの第6の実施形態の図である。システム800は、図6において参照されるシステム600でも見られる多くの要素を含み、同様の要素は同じ参照符号を有する。
動作中、コア・クロック・サイクル830のどちらの半期が望ましくない半期826であるかの判定は、信号のラウンドトリップ時間832に基づくことができる。信号のラウンドトリップ時間832は、リドライブ・デバイス604に対して発行される特定のコマンド822と、その特定のコマンド822に応答してメモリ・コントローラ602に到着するデータ824との間のコア・クロック・サイクルの数とすることができる。代替的に、信号のラウンドトリップ時間832は、リドライブ・デバイス604に対して発行される特定のコマンド822と、その特定のコマンド822に応答してメモリ・コントローラ602に到着するデータ824との間のメモリ・クロック・サイクルの数に基づいて判定することができる。メモリ・コントローラ602は、ラウンドトリップ時間832が奇数個のメモリ・クロック・サイクルに等しいと判定し得る。例えば、特定のコマンド822の発行とその特定のコマンド822に応答するデータ824の到着との間のラウンドトリップ時間832は、17メモリ・クロック・サイクルであり得る。メモリ・クロック820がコア・クロック610の2倍の速さである場合、17メモリ・クロック・サイクルは、8つの全コア・クロック・サイクル830及び1つの半コア・クロック・サイクル830に対応し得る。特定のコマンド822をコア・クロック・サイクル830の前半において伝送すると、その結果、それに応答するデータ824はコア・クロック・サイクル830の後半においてメモリ・コントローラ602に到着することになる。コア・クロック・サイクル830の後半において到着するデータは、コア・クロック・ドメインにアラインメントしないので、従って、遅延を生じさせ得る。コア・クロック・サイクルの前半における特定のコマンド822の伝送が、コア・クロック・サイクルの後半の上におけるデータ824をもたらすので、コア・クロック・サイクルの前半が望ましくない半期826である。
コア・クロック・サイクル830のどちらの半期が遅延をもたらすことになるか(例えば、コア・クロック・サイクル830の望ましくない半期826)を判定することにより、メモリ・コントローラ602は、同期コマンドの発行に関連するオーバーヘッドを防止することができる。同期オーバーヘッドを低減することで、メモリ・コントローラ602の効率性を改善し、メモリの待ち時間を減らすことができる。
図9は、メモリ・コントローラにおいてコマンドをスケジューリングするための、全体が900で示されるシステムの第7の実施形態の図である。システム900は、図6において参照されるシステム600でも見られる多くの要素を含み、同様の要素は同じ参照符号を有する。
メモリ・コントローラは、信号のラウンドトリップ時間956が17個のメモリ・クロック920サイクルであると判定する。ラウンドトリップ時間956が奇数であるとの判定に基づき、メモリ・コントローラは、コア・クロック610サイクルの前半が望ましくない半期964であると判定することができる。これに応答して、メモリ・コントローラは、コア・クロック610サイクルの前半964における同期コマンド944の伝送をスケジューリングすることができる。同期コマンド944は、データリンク層において抽出され得る非データをもたらすいずれかのコマンドで置き換えることができる。例えば、メモリ・コントローラは、第1のコマンドをコア・クロック610サイクルの望ましくない半期964において伝送し、第2のコマンド942を望ましい半期966において伝送することができる。メモリ・コントローラは、同期コマンド944を望ましくない半期964において伝送し、第3のコマンド946を望ましい半期966において伝送し、第4のコマンド948を望ましくない半期964において伝送することができる。
メモリ・コントローラは、第1のコマンド940及び第2のコマンド942に応答して、第1のデータ950をメモリ・コントローラの物理層において受信することができる。メモリ・コントローラは、同期コマンド944に応答して、同期状態952を受信することができ、第3のコマンド946及び第4のコマンド948に応答して、第2のデータ954を受信することができる。例えば、リドライブ・デバイスからメモリ・コントローラに到着するフレームは、コア・クロック610がコア・クロック・サイクルの後半にあるときに第1のデータ950の第1の部分が到着するシーケンスに従うことができる。第1のデータ950の第2の部分は、コア・クロック610が後続のコア・クロック・サイクルの前半にあるときに到着することができる。同期状態952は、コア・クロック610がコア・クロック・サイクルの次の後半にあるときに到着することができる。第2のデータ954の第1の部分は、コア・クロック610がコア・クロック・サイクルの次の前半にあるときに到着することができる。第2のデータ954の第2の部分は、コア・クロック610がコア・クロック・サイクルの次の後半にあるときに到着することができる。
メモリ・コントローラは、メモリ・コントローラのデータリンク層において、同期状態952を抽出すること(958)ができる。同期状態952は、メモリ・コントローラのデータリンク層のみにおいて使用されるものとすることができ、メモリ・コントローラのコア・クロック・ドメインには伝送されないものとすることができる。第1のデータ950と第2のデータ954との間にはギャップが形成され得る。メモリ・コントローラは、第1のデータ950をコア・クロック・ドメインにアラインメントするために、第1のデータ950を半コア・クロック・サイクルだけ遅延させること(960)ができる。例えば、第1のデータ950の第1の部分がコア・クロック610サイクルの後半において到着した場合には、メモリ・コントローラのコア・クロック・ドメインは、コア・クロック・サイクルの次の半期(例えば、前半)になるまで、第1のデータ950を受信しないようにすることができる。
コア・クロック・サイクルの次の前半の間に、メモリ・コントローラは、第1のデータ950を読み出すことができる。同期状態が抽出され、第2のデータ954がコア・クロック・ドメインにアラインメントしている状態で、メモリ・コントローラは、続くコア・クロック・サイクルの前半の間に第2のデータ954を読み出すことができる。第2のコマンド942の発行と第3のコマンド946の発行との間に半コア・クロック・サイクルがあるにもかかわらず、メモリ・コントローラは、第1のデータ950と第2のデータ954とを2コア・クロック・サイクル以内に収集すること(962)ができる。
同期状態952がコア・クロック・サイクルの後半においてメモリ・コントローラにより受信されると、同期状態952の後に受信されたデータ(例えば第2のデータ954)を遅延させることなく、同期状態952の前に受信されたデータ(例えば、第1のデータ950)を半コア・クロック・サイクルだけ遅延させることができる。コア・クロック・サイクル830のどちらの半期が遅延をもたらすことになるか(例えば、コア・クロック・サイクル830の望ましくない半期826)を判定することにより、メモリ・コントローラ602は、コア・クロック・アラインメントの間のデータのギャップを防ぐように、コマンドをスケジューリングすることができる。コア・クロック・アラインメントの間のデータのギャップを防ぐことで、メモリ・コントローラ602の効率性を改善し、メモリの待ち時間を減らすことができる。
図10は、メモリ・コントローラにおいてコマンドをスケジューリングする方法1000の第3の実施形態の流れ図である。特定の実施形態において、方法1000は、図6−図9のシステムのいずれか、またはその組み合わせによって実施される。方法1000は、1002において、メモリ・コントローラとリドライブ・デバイスとの間のリンクがメモリ・コントローラからリドライブ・デバイスへの同期コマンドの伝送を必要としていることを判定することを含む。例えば、図6のメモリ・コントローラ602は、メモリ・コントローラ602とリドライブ・デバイス604との間のリンク606が、メモリ・コントローラ602からリドライブ・デバイス604への同期コマンド608の伝送を必要としていることを判定する。
方法1000はまた、ブロック1004において、信号のラウンドトリップ時間に基づき、コア・クロック・サイクルの望ましくない半期を判定することを含む。例えば、図6のメモリ・コントローラ602は、信号のラウンドトリップ時間618に基づき、コア・クロック610サイクルの望ましくない半期(612又は614)を判定する。別の例として、図7のメモリ・コントローラ602は、ラウンドトリップ時間732に基づき、コア・クロック・サイクル730の望ましくない半期728を判定する。別の例として、図8のメモリ・コントローラ602は、ラウンドトリップ時間832に基づき、コア・クロック・サイクル830の望ましくない半期826を判定する。方法1000は、1006において、コア・クロック・サイクルの望ましくない半期の判定に基づき、同期コマンドの伝送をスケジューリングすることをさらに含む。例えば、メモリ・コントローラ602は、コア・クロック610サイクルの望ましくない半期(612又は614)の判定に基づき、図6の同期コマンド608の伝送をスケジューリングすることができる。別の例として、コア・クロック・サイクルの望ましくない半期964の判定に基づき、図9の同期コマンド944の伝送がスケジューリングされる。
図11は、メモリ・コントローラにおいてコマンドをスケジューリングするための、全体が1100で示されるシステムの第8の実施形態の図である。システム1100は、メモリ・コントローラ・ユニット1104とメモリ・コントローラ・ポート1108とを有するメモリ・コントローラ1102を含む。メモリ・コントローラ・ユニット1104は予測論理1106を含み、メモリ・コントローラ・ポート1108は読み出しキュー1110を含む。
メモリ・コントローラ・ユニット1104は、複数の位置から収集された情報を用いて、読み出しキュー1110の待ち行列に並ぶコマンドの数1134を予測する。読み出しキュー1110がいつ満杯になるかを推論的に判定することにより、メモリ・コントローラ・ユニット1104は、ソーシング・エージェント1140に対して効率的なバックプレッシャを与えることが可能になる。読み出しキュー1110の状態に関する予測の精度を向上させることで、メモリ・コントローラ1102が読み出しキュー1110をより多く満たすことが可能になる。読み出しキュー1110をより多く満たすことで、読み出しキュー1110の利用率が改善され、メモリ・コントローラ1102の全効率が向上する。
メモリ・コントローラ1102は、メモリ・コントローラ・ポート1108から、ある1サイクル中にメモリ・コントローラ・ポート1108の読み出しキュー1110の待ち行列に並んだコマンドの数1132の指標1120を受信するように構成される。メモリ・コントローラは、メモリ・コントローラ・ポート1108に伝送された送信済みコマンド1128の数1126を追跡するように構成することができる。メモリ・コントローラ1102は、そのサイクル中に待ち行列に並んだコマンドの数1132及び送信済みコマンド1128の数1126に基づき、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンド1134の予測数1130を判定するように構成することができる。
メモリ・コントローラ・ユニット1104は、コマンド1128をメモリ・コントローラ・ポート1108に伝送することができる。メモリ・コントローラ・ユニット1104は、メモリ・コントローラ・ポート1108に送られたコマンド1128の数1126を追跡することができる。メモリ・コントローラ・ポート1108は、そのサイクル中に読み出しキューの待ち行列に並んだコマンドの数1132を判定する。メモリ・コントローラ・ポート1108は、メモリ・コントローラ・ユニット1104に、そのサイクル中に読み出しキューの待ち行列に並んだコマンドの数1132の指標1120を送信することができる。
メモリ・コントローラ・ユニット1104は、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンド1134の予測数1130を判定することができる。判定は、そのサイクル中に待ち行列に並んだコマンドの数1132及び送信済みコマンドの数1126に基づくことができる。メモリ・コントローラ・ユニット1104の予測論理1106は、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンド1134の数1130を予測することができる。例えば、送信済みコマンドの数1126が2であり、そのサイクル中に読み出しキューの待ち行列に並んだコマンドの数1132が9である場合、予測論理1106は、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンド1134の予測数1130が10であると判定することができる。この場合、予測論理1106は、このサイクルと後続のサイクルとの間に、読み出しキュー1110から1つのコマンドが発行されると予測した。
メモリ・コントローラ・ユニット1104は、後続のコマンドがメモリ・コントローラ・ポート1108に振り向けられないようにするかどうか判定することができる。判定は、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンドの予測数1130と、最大読み出しキュー容量とに基づくことができる。最大読み出しキュー容量は、読み出しキュー1110が保持することができるコマンドの最大数とすることができる。例えば、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンドの予測数1130が10であり、かつ最大読み出しキュー容量が12である場合、メモリ・コントローラ・ユニット1104は、後続のコマンドがメモリ・コントローラ・ポート1108に振り向けられないようにすることができる。
メモリ・コントローラ・ユニット1104は、ソーシング・エージェント1140から、着信コマンド1124を受信することができる。例えば、着信コマンド1124は、プロセッサ・ポート、スケーラビリティ・ポート、要求ハンドラ、又は保留中のキューから発せられるものとすることができる。メモリ・コントローラは、ある種のソーシング・エージェントからの要求を無視し、かつ他のソーシング・エージェントからの要求に応じるべきものとすることが可能であり得る。例えば、メモリ・コントローラは、ファストパス要求を無視することができる。メモリ・コントローラ・ユニット1104は、受信した着信コマンド1124の数1122を判定することができる。メモリ・コントローラ・ユニット1104は、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンドの予測数1130と、着信コマンド1124の数1122とに基づき、ソーシング・エージェント1140に対してバックプレッシャをかけることができる。バックプレッシャは、着信コマンド1124を送ることを停止するように個々のソーシング・エージェントに指示する信号を含むことができる。例えば、メモリ・コントローラ・ユニット1104は、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンドの予測数1130が10であり、着信コマンド1124の数1122が5である場合に、ソーシング・エージェント1140に対してバックプレッシャをかけることができる。ソーシング・エージェント1140に対してバックプレッシャをかけることにより、メモリ・コントローラ・ポート1108内の読み出しキュー1110が溢れることが防止される。
読み出しキュー1110がいつ満杯になるかを推論的に判定することで、メモリ・コントローラ・ユニット1104が、ソーシング・エージェント1140に対して効率的にバックプレッシャをかけること、及び、読み出しキュー1110の状態をより良く予測することが可能になる。読み出しキュー1110の状態に関する予測の精度を向上させることで、メモリ・コントローラ1102が読み出しキュー1110をより多く満たすようにすることが可能になる。読み出しキュー1110をより多く満たすことで、読み出しキュー1110の利用率が改善され、メモリ・コントローラ1102の全効率性が向上する。
図12は、メモリ・コントローラにおいてコマンドをスケジューリングする方法1200の第4の実施形態の流れ図である。方法1200は、図11のいずれかのシステムにより実施される。本方法は、ブロック1202において、メモリ・コントローラ・ポートから、1サイクル中にメモリ・コントローラ・ポートの読み出しキューの待ち行列に並んだコマンドの数の指標を受信することを含む。例えば、図11のメモリ・コントローラ・ユニット1104は、メモリ・コントローラ・ポート1108から、サイクル中に読み出しキュー1110の待ち行列に並んだコマンドの数1132の指標1120を受信する。方法1200はまた、ブロック1204において、メモリ・コントローラ・ポートに伝送された送信済みコマンドの数を追跡することを含む。例えば、図11のメモリ・コントローラ・ユニット1104は、送信済みコマンド1128の数1126を追跡する。方法1200はまた、ブロック1206において、待ち行列に並んだコマンドの数及び送信済みコマンドの数に基づき、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンドの予測数を判定することを含む。例えば、図11のメモリ・コントローラ・ユニット1104の予測論理1106は、サイクル中に読み出しキューの待ち行列に並んだコマンドの数1132及び送信済みコマンド1128の数1126に基づき、後続のサイクル中に読み出しキューの待ち行列に並ぶコマンド1134の予測数1130を判定する。
特定の実施形態は、全体がハードウェアの実施形態、全体がソフトウェアの実施形態、又はハードウェア要素とソフトウェア要素の両方を含む実施形態の形態を取ることができる。特定の実施形態において、開示された方法は、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むがこれらに限定されないソフトウェアとして実装される。
さらに、実施形態は、コンピュータ若しくはいずれかの命令実行システムによって使用されるか又はこれらと関連して使用されるプログラム・コードを提供するコンピュータ使用可能媒体又はコンピュータ可読媒体からアクセス可能なコンピュータ・プログラム製品の形態を取ることができる。この説明の目的に関して、コンピュータ使用可能媒体又はコンピュータ可読媒体は、命令実行システム、装置、若しくはデバイスによって使用されるか又はこれらと関連して使用されるプログラムを収容し、格納し、通信し、伝搬し、又は搬送することができるいずれかの装置とすることができる。
媒体は、電子、磁気、光学、電磁気、赤外線若しくは半導体のシステム(又は装置若しくはデバイス)又は伝搬媒体とすることができる。コンピュータ可読媒体の例として、半導体又は固体メモリ、磁気テープ、取り外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、剛性磁気ディスク及び光ディスクが挙げられる。現在の光ディスクの例として、コンパクトディスク−読み出し専用メモリ(CD−ROM)、コンパクトディスク−読み出し/書き込み(CD−R/W)及びDVDが挙げられる。
プログラム・コードを格納し、及び/又は実行するのに適したデータ処理システムは、システム・バスを通じてメモリ要素に直接又は間接に結合される少なくとも1つのプロセッサを含む。メモリ要素は、プログラム・コードの実際の実行中に用いられるローカル・メモリと、大容量記憶デバイスと、実行中に大容量記憶デバイスからコードを取り出さなければならない回数を減らすために少なくとも幾つかのプログラム・コードの一時的な記憶場所を提供するキャッシュ・メモリとを含むことができる。
入出力デバイスすなわちI/Oデバイス(キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれらに限定されない)は、システムに、直接的に、又は介在するI/Oコントローラを通じて結合することができる。
ネットワーク・アダプタをシステムに結合して、データ処理システムを、介在する私設ネットワーク又は公衆ネットワークを通じて他のデータ処理システム又は遠隔のプリンタ若しくは記憶デバイスに結合できるようにすることもできる。モデム、ケーブル・モデム及びイーサネット・カードは、現在利用可能なネットワーク・アダプタのタイプのうちのごく一部である。
開示された実施形態の上記の説明は、当業者が開示された実施形態を作り又は使用することができるようにするために提供される。これらの実施形態の種々の修正は当業者には容易に明らかとなり、本明細書において定義された包括的な原理は、本開示の範囲から逸脱することなく他の実施形態に適用することができる。よって、本開示は、本明細書において示された実施形態に限定されることが意図されるものではなく、以下の特許請求の範囲により定義される原理及び特徴と矛盾しない、可能な限り最も広い範囲が与えられるべきである。
本発明を種々の実施形態の説明により示し、かつ、これらの実施形態をかなり詳細に説明してきたが、添付の特許請求の範囲をそのような詳細に限定し、又はいかなる形であっても制限することは、出願人の意図するところではない。従って、本発明は、その最も広範な態様において、図示及び説明された特定の詳細、代表的な装置、方法、及び説明的例示に限定されるものではない。従って、出願人の包括的な発明の概念の範囲から逸脱することなく、そのような詳細から逸脱することができる。
Claims (22)
- メモリ・コントローラにおいてコマンドをスケジューリングするための方法であって、
第1のメモリ・コントローラ・ポートと第1のリドライブ・デバイスとの間の伝送エラーを検出することと、
前記伝送エラーの前記検出に応答して、前記第1のメモリ・コントローラ・ポートにおいて第1の修正動作を開始することと、
第2のメモリ・コントローラ・ポートが第2の修正動作を開始していたことを判定することと、
前記第1の修正動作と前記第2の修正動作との比較に基づき、複数の着信読み出しコマンドを割り当てることと、
を含む、方法。 - 前記第1の修正動作が開始される前に前記第2の修正動作が開始されたことを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第2のメモリ・コントローラ・ポートに割り当てられる、請求項1に記載の方法。
- 前記第1の修正動作が第1のリプレイ・アクションを開始する前に前記第2の修正動作が第2のリプレイ・アクションを開始したことを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第2のメモリ・コントローラ・ポートに割り当てられる、請求項1に記載の方法。
- 前記第1の修正動作がリンク・リトレーン・アクションであり、かつ前記第2の修正動作がリプレイ・アクションであることを示す前記比較に応答して、前記複数の着信読み出しコマンドが前記第2のメモリ・コントローラ・ポートに割り当てられる、請求項1に記載の方法。
- 前記リプレイ・アクションが、第2のリドライブ・デバイスにコマンド・ストリームを再発行することを含み、前記コマンド・ストリームが、前記伝送エラーに応答して前記第2のリドライブ・デバイスが前記コマンド・ストリームを停止させたポイントから再発行される、請求項4に記載の方法。
- 前記リンク・リトレーン・アクションが、前記第1のメモリ・コントローラ・ポートと前記第1のリドライブ・デバイスとの間のリンクをリトレーンすることを含む、請求項4に記載の方法。
- 前記伝送エラーを検出することが、前記第1のメモリ・コントローラ・ポートにおいて、前記第1のリドライブ・デバイスから警告状態フレームを受信することを含む、請求項1に記載の方法。
- 前記伝送エラーが、前記リドライブ・デバイスからの伝送において、前記第1のポートにより検出される、請求項1に記載の方法。
- メモリ・コントローラとリドライブ・デバイスとの間のリンクが前記メモリ・コントローラから前記リドライブ・デバイスへの同期コマンドの伝送を必要としていることを判定することと、
信号のラウンドトリップ時間に基づき、コア・クロック・サイクルの望ましくない半期を判定することと、
前記コア・クロック・サイクルの前記望ましくない半期の前記判定に基づき、前記同期コマンドの伝送をスケジューリングすることと
をさらに含む、請求項1に記載の方法。 - 前記信号のラウンドトリップ時間が、前記メモリ・コントローラからのコマンドの発行と、前記コマンドに応答して前記メモリ・コントローラにおいて受信されるデータとの間で経過するメモリ・クロック・サイクルの数に基づいて計算される、請求項9に記載の方法。
- 前記コア・クロック・サイクルの前記望ましくない半期の前記判定が、前記信号のラウンドトリップ時間が奇数個のメモリ・クロック・サイクルと等しいと判定することを含む、請求項10に記載の方法。
- 前記コア・クロック・サイクルの前記望ましくない半期の前記判定が、前記信号のラウンドトリップ時間が偶数個のメモリ・クロック・サイクルに等しいと判定することを含む、請求項10に記載の方法。
- 前記望ましくない半期の前記判定に基づき、前記同期コマンドの伝送をスケジューリングすることが、前記望ましくない半期において第1のコマンドを、前記コア・クロック・サイクルの望ましい半期において第2のコマンドを、前記望ましくない半期において前記同期コマンドを、前記望ましい半期において第3のコマンドを、そして前記望ましくない半期において第4のコマンドを伝送することを含む、請求項9に記載の方法。
- 前記メモリ・コントローラの物理層において、前記第1のコマンド及び前記第2のコマンドに応答して第1のデータを受信し、前記同期コマンドに応答して同期状態を受信し、前記第3のコマンド及び前記第4のコマンドに応答して第3のデータを受信することと、
前記第1のデータが前記コア・クロック・サイクルにアラインメントするように、該1のデータを半コア・クロック・サイクルだけ遅延させることと、
前記同期状態を前記メモリ・コントローラのデータリンク層において抽出することと、
前記第1のデータ及び前記第2のデータを2コア・クロック・サイクル以内で収集することと
をさらに含む、請求項13に記載の方法。 - 前記メモリ・コントローラから前記リドライブ・デバイスへの前記同期コマンドの伝送を必要としていることの前記判定が、前回の同期コマンドの伝送の後に前記リドライブ・デバイスに送信されたフレームの数に基づく、請求項9に記載の方法。
- メモリ・コントローラ・ポートから、1サイクル中に前記メモリ・コントローラ・ポートの読み出しキューの待ち行列に並んだコマンドの数の指標を受信することと、
前記メモリ・コントローラ・ポートに伝送された送信済みコマンドの数を追跡することと、
前記待ち行列に並んだコマンドの数及び前記送信済みコマンドの数に基づき、後続のサイクル中に前記読み出しキューの待ち行列に並ぶコマンドの予測数を判定することと
をさらに含む、請求項1に記載の方法。 - 後続のサイクル中に前記読み出しキューの待ち行列に並ぶコマンドの前記予測数を判定することが、前記後続サイクル中に待ち行列に並ぶ前記コマンドの数に予め設定された数を加算することを含む、請求項16に記載の方法。
- 着信コマンドの数を判定することをさらに含む、請求項16に記載の方法。
- 前記後続のサイクルにおいて前記読み出しキューの待ち行列に並ぶコマンドの前記予測数と、最大読み出しキュー容量とに基づき、後続のコマンドが前記メモリ・コントローラ・ポートに振り向けられることを防止するか否かを判定することをさらに含む、請求項18に記載の方法。
- 前記後続のサイクル中に前記読み出しキューの待ち行列に並ぶコマンドの前記予測数と、前記着信コマンドの数とに基づき、ソーシング・エージェントにバックプレッシャをかけることをさらに含む、請求項19に記載の方法。
- メモリ・コントローラにおいてコマンドをスケジューリングするための装置であって、
第1のメモリ・コントローラ・ポートと第1のリドライブ・デバイスとの間の伝送エラーを検出するための手段と、
前記伝送エラーの前記検出に応答して、前記第1のメモリ・コントローラ・ポートにおいて第1の修正動作を開始するための手段と、
第2のメモリ・コントローラ・ポートが第2の修正動作を開始していたことを判定するための手段と、
前記第1の修正動作と前記第2の修正動作との比較に基づき、複数の着信読み出しコマンドを割り当てるための手段と
を含む、装置。 - コンピュータ・システム内にロードされ、かつその上で実行されたときに、請求項1乃至請求項20のいずれか一項に記載の方法の全てのステップを前記コンピュータ・システムに行わせる、コンピュータ可読媒体上に格納されたコンピュータ・プログラム・コードを含むコンピュータ・プログラム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/545,192 US8132048B2 (en) | 2009-08-21 | 2009-08-21 | Systems and methods to efficiently schedule commands at a memory controller |
US12/545,192 | 2009-08-21 | ||
PCT/EP2010/061833 WO2011020791A1 (en) | 2009-08-21 | 2010-08-13 | Systems and methods to efficiently schedule commands at a memory controller |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2013502019A true JP2013502019A (ja) | 2013-01-17 |
JP5128724B2 JP5128724B2 (ja) | 2013-01-23 |
Family
ID=42668733
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012525149A Expired - Fee Related JP5128724B2 (ja) | 2009-08-21 | 2010-08-13 | メモリ・コントローラにおいてコマンドをスケジューリングするための方法、装置及びプログラム |
Country Status (5)
Country | Link |
---|---|
US (1) | US8132048B2 (ja) |
EP (1) | EP2467781B1 (ja) |
JP (1) | JP5128724B2 (ja) |
CN (1) | CN102483712B (ja) |
WO (1) | WO2011020791A1 (ja) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8205138B2 (en) * | 2008-08-07 | 2012-06-19 | International Business Machines Corporation | Memory controller for reducing time to initialize main memory |
US8352786B2 (en) * | 2010-07-20 | 2013-01-08 | International Business Machines Corporation | Compressed replay buffer |
JP5337177B2 (ja) * | 2011-02-03 | 2013-11-06 | 株式会社東芝 | メモリ制御装置及びメモリ制御方法 |
KR101907068B1 (ko) * | 2012-06-20 | 2018-10-11 | 에스케이하이닉스 주식회사 | 메모리 장치 |
US10691344B2 (en) | 2013-05-30 | 2020-06-23 | Hewlett Packard Enterprise Development Lp | Separate memory controllers to access data in memory |
US9058273B1 (en) * | 2013-12-20 | 2015-06-16 | International Business Machines Corporation | Frequency determination across an interface of a data processing system |
US9673994B2 (en) * | 2014-01-20 | 2017-06-06 | General Electric Company | Synchrophasor data management systems and methods |
US9626270B2 (en) * | 2014-09-26 | 2017-04-18 | Intel Corporation | Link retraining based on runtime performance characteristics |
US10133627B2 (en) * | 2015-12-11 | 2018-11-20 | SK Hynix Inc. | Memory device controller with mirrored command and operating method thereof |
US11675659B2 (en) * | 2016-07-15 | 2023-06-13 | Advanced Micro Devices, Inc. | DDR memory error recovery |
KR20180068346A (ko) * | 2016-12-13 | 2018-06-22 | 에스케이하이닉스 주식회사 | 반도체 장치 및 그의 동작 방법 |
US10635617B2 (en) | 2017-05-19 | 2020-04-28 | Western Digital Technologies, Inc. | Context-aware dynamic command scheduling for a data storage system |
US10437482B2 (en) * | 2017-07-25 | 2019-10-08 | Samsung Electronics Co., Ltd. | Coordinated near-far memory controller for process-in-HBM |
US10572183B2 (en) * | 2017-10-18 | 2020-02-25 | Advanced Micro Devices, Inc. | Power efficient retraining of memory accesses |
US20230236726A1 (en) * | 2022-01-27 | 2023-07-27 | Micron Technology, Inc. | Optimized control of the commands running in a cache |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5210867A (en) * | 1990-10-05 | 1993-05-11 | Bull Hn Information Systems Inc. | Method and apparatus for memory retry |
JP2005533314A (ja) * | 2002-07-12 | 2005-11-04 | クロスローズ・システムズ・インコーポレイテッド | Scsiレベルコマンドを用いる冗長パスにわたる、増強されたファイバチャネルエラー回復を可能にするための機構 |
US20060184846A1 (en) * | 2005-02-03 | 2006-08-17 | International Business Machines Corporation | System and method for managing mirrored memory transactions and error recovery |
JP2007035039A (ja) * | 2005-07-25 | 2007-02-08 | Samsung Electronics Co Ltd | マルチポートdramでのリフレッシュ制御方法及び該方法を利用するマルチポートメモリシステム |
US20070089035A1 (en) * | 2005-09-30 | 2007-04-19 | Intel Corporation | Silent data corruption mitigation using error correction code with embedded signaling fault detection |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE3912705C2 (de) * | 1989-04-18 | 1996-06-20 | Siemens Nixdorf Inf Syst | Verfahren und Anordnung zur Steuerung des Datenaustausches bei Schreibanforderungen von Verarbeitungseinheiten an einen Cachespeicher |
US20030163769A1 (en) * | 2002-02-27 | 2003-08-28 | Sun Microsystems, Inc. | Memory module including an error detection mechanism for address and control signals |
US8127087B2 (en) * | 2009-02-12 | 2012-02-28 | International Business Machines Corporation | Memory controller for improved read port selection in a memory mirrored system |
-
2009
- 2009-08-21 US US12/545,192 patent/US8132048B2/en active Active
-
2010
- 2010-08-13 EP EP10742504A patent/EP2467781B1/en active Active
- 2010-08-13 WO PCT/EP2010/061833 patent/WO2011020791A1/en active Application Filing
- 2010-08-13 CN CN201080036977.9A patent/CN102483712B/zh active Active
- 2010-08-13 JP JP2012525149A patent/JP5128724B2/ja not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5210867A (en) * | 1990-10-05 | 1993-05-11 | Bull Hn Information Systems Inc. | Method and apparatus for memory retry |
JP2005533314A (ja) * | 2002-07-12 | 2005-11-04 | クロスローズ・システムズ・インコーポレイテッド | Scsiレベルコマンドを用いる冗長パスにわたる、増強されたファイバチャネルエラー回復を可能にするための機構 |
US20060184846A1 (en) * | 2005-02-03 | 2006-08-17 | International Business Machines Corporation | System and method for managing mirrored memory transactions and error recovery |
JP2007035039A (ja) * | 2005-07-25 | 2007-02-08 | Samsung Electronics Co Ltd | マルチポートdramでのリフレッシュ制御方法及び該方法を利用するマルチポートメモリシステム |
US20070089035A1 (en) * | 2005-09-30 | 2007-04-19 | Intel Corporation | Silent data corruption mitigation using error correction code with embedded signaling fault detection |
Also Published As
Publication number | Publication date |
---|---|
WO2011020791A1 (en) | 2011-02-24 |
CN102483712B (zh) | 2015-04-01 |
US20110047400A1 (en) | 2011-02-24 |
JP5128724B2 (ja) | 2013-01-23 |
EP2467781A1 (en) | 2012-06-27 |
CN102483712A (zh) | 2012-05-30 |
US8132048B2 (en) | 2012-03-06 |
EP2467781B1 (en) | 2013-03-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5128724B2 (ja) | メモリ・コントローラにおいてコマンドをスケジューリングするための方法、装置及びプログラム | |
US8346998B2 (en) | System and method for transmitting data packets in a computer system having a memory hub architecture | |
US11650765B2 (en) | Apparatus and method for performing persistent write operations using a persistent write command | |
JP2009517725A (ja) | メモリ・システム内で不確定な読み取りデータ待ち時間を可能にする方法及びシステム | |
US7603504B2 (en) | Reducing core wake-up latency in a computer system | |
WO2019109299A1 (zh) | 内存访问技术及计算机系统 | |
CN103765522A (zh) | 排特定的循环冗余校验 | |
WO2013097642A1 (zh) | 快速通道互联系统中数据包重传方法、节点 | |
US9258834B2 (en) | Method of mobile terminal internal communications | |
CN106815094B (zh) | 一种用于实现主备同步模式下事务提交的方法与设备 | |
WO2015127717A1 (zh) | 一种流量控制方法、装置及计算机存储介质 | |
WO2014206220A1 (zh) | 数据写入方法及内存系统 | |
JP5381109B2 (ja) | 通信装置及びその制御プログラム | |
WO2007099584A1 (ja) | エラー検出装置 | |
JP5930469B2 (ja) | エラー検出に応答するためのシステム及び方法 | |
US9985828B2 (en) | System and method for enhancing server media throughput in mismatched networks | |
CN118282969A (zh) | 一种网络音频传输方法及系统 | |
JP2016201641A (ja) | 通信装置およびバッファ制御方法 | |
TW200928753A (en) | Data processing apparatus and data processing system | |
WO2004023792A1 (en) | Method of real-time disk-scheduling, disk-scheduler, file system, data storage system and computer program product |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20151109 Year of fee payment: 3 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |