(57)【要約】一形態では、メモリコントローラは、コマンドキューと、アービタと、リプレイキューと、を含む。コマンドキューは、メモリアクセス要求を受信して記憶する。アービタは、メモリコマンドのシーケンスをメモリチャネルに提供するために、コマンドキューに接続されている。リプレイキューは、メモリコマンドのシーケンスをメモリチャネルに記憶し、メモリチャネルからの応答を未だ受信していないメモリアクセスコマンドを記憶し続ける。対応するメモリコマンドがエラーなく完了したことが応答によって示された場合、リプレイキューは、さらなるアクションを行わずに、対応するメモリコマンドを削除する。対応するメモリコマンドがエラーを伴って完了したことが応答によって示された場合、リプレイキューは、少なくとも対応するメモリコマンドをリプレイする。他の形態では、データ処理システムは、メモリコントローラと、メモリアクセスエージェントと、メモリコントローラに接続されたメモリシステムと、を含む。【選択図】図５
2019527424.tif 000002
【特許請求の範囲】
【請求項１】
メモリアクセス要求を受信して記憶するコマンドキュー（５２０）と、
前記コマンドキューに接続され、メモリコマンドのシーケンスをメモリチャネル（１３０／１４０）に提供するアービタ（５３８）と、
前記メモリコマンドのシーケンスを前記メモリチャネル（１３０／１４０）に記憶し、前記メモリチャネル（１３０／１４０）からの応答を未だ受信していないメモリアクセスコマンドを記憶し続けるリプレイキュー（５３０）と、
を備えるメモリコントローラ（５００）であって、
対応するメモリコマンドがエラーなく完了したことが応答によって示された場合、前記リプレイキュー（５３０）は、さらなるアクションを行わずに、前記対応するメモリコマンドを削除し、
前記対応するメモリコマンドがエラーを伴って完了したことが応答によって示された場合、前記リプレイキュー（５３０）は、少なくとも前記対応するメモリコマンドをリプレイする、
メモリコントローラ（５００）。
【請求項２】
前記対応するメモリコマンドのエラー訂正コード（ＥＣＣ）を計算し、計算したＥＣＣを、前記メモリチャネル（１３０／１４０）から返されたＥＣＣと比較するために前記リプレイキュー（５３０）に接続されたＥＣＣチェックブロック（５４２）をさらに備える、
請求項１のメモリコントローラ（５００）。
【請求項３】
メモリアクセス要求を受信し記憶するために前記コマンドキュー（５２０）に接続されたメモリインタフェースキュー（５１４）をさらに備え、
前記メモリインタフェースキュー（５１４）は、前記メモリチャネル（１３０／１４０）にディスパッチされたコマンドと、前記コマンドに応じて前記メモリチャネル（１３０／１４０）から受信した応答と、を提供するために前記リプレイキュー（５３０）に接続されている、
請求項１のメモリコントローラ（５００）。
【請求項４】
前記リプレイキュー（５３０）は、前記メモリインタフェースキュー（５１４）からの応答の受信に応じて、エラー訂正コードを計算し、前記エラー訂正コードを前記メモリチャネル（１３０／１４０）から受信したエラー訂正コードと比較することによって、前記応答にエラーが存在することを判別する、
請求項３のメモリコントローラ（５００）。
【請求項５】
前記リプレイキュー（５３０）は、前記メモリインタフェースキュー（５１４）からのエラーを含む応答の受信に応じて、前記対応するメモリコマンドと、前記対応するメモリコマンドの後に前記メモリインタフェースキュー（５１４）が前記メモリチャネル（１３０／１４０）に提供した追加のコマンドと、をリプレイする、
請求項３のメモリコントローラ（５００）。
【請求項６】
メモリアクセス要求を受信して記憶するコマンドキュー（５２０）と、
前記コマンドキュー（５２０）に接続され、メモリコマンドのシーケンスをメモリチャネル（１３０／１４０）に提供するアービタ（５３８）と、
前記コマンドキュー（５２０）に接続され、メモリアクセス要求を受信して記憶するメモリインタフェースキュー（５１４）と、
前記メモリインタフェースキュー（５１４）に接続され、前記メモリコマンドのシーケンスを前記メモリチャネル（１３０／１４０）に記憶し、前記メモリチャネル（１３０／１４０）からの応答を未だ受信していないメモリアクセスコマンドを記憶し続けるリプレイキュー（５３０）と、
を備えるメモリコントローラ（５００）であって、
前記メモリコントローラ（５００）は、エラーを検出しない限り通常状態に留まり、前記メモリインタフェースキュー（５１４）は、前記通常状態において、前記アービタ（５３８）によって選択されたコマンドを前記コマンドキュー（５２０）から受信し続け、
前記メモリコントローラ（５００）は、エラーの検出に応じてリカバリ状態（６３０／６４０）に移行し、前記リプレイキュー（５３０）は、前記リカバリ状態において、少なくとも１つの対応するメモリコマンドを前記メモリインタフェースキュー（５１４）に送信することによって、前記少なくとも１つの対応するメモリコマンドをリプレイする、
メモリコントローラ（５００）。
【請求項７】
前記メモリコントローラ（５００）は、前記リプレイキュー（５３０）が、メモリエラーを発生させた全てのメモリコマンドをさらなるエラーなしにリプレイするまで、前記リカバリ状態（６３０／６４０）に留まる、
請求項６のメモリコントローラ（５００）。
【請求項８】
前記メモリコントローラ（５００）は、コマンド及びアドレスエラーに応じてエラーリカバリ状態（６４０）に移行し、データエラーに応じてコマンドリプレイ状態（６３０）に移行する、
請求項６のメモリコントローラ（５００）。
【請求項９】
前記メモリコントローラ（５００）は、エラーが発生した可能性があるコマンドのリプレイに応じて、前記エラーリカバリ状態（６４０）から前記コマンドリプレイ状態（６３０）に移行し、
前記メモリコントローラ（５００）は、全てのリプレイされたコマンドに対する応答をエラーなしに受信したことに応じて、前記コマンドリプレイ状態（６３０）から前記通常状態（６１０）に移行する、
請求項８のメモリコントローラ（５００）。
【請求項１０】
前記メモリコントローラ（５００）は、エラーが発生した可能性があるコマンドのリプレイに応じて、前記エラーリカバリ状態（６４０）から前記コマンドリプレイ状態（６３０）に移行し、
前記メモリコントローラ（５００）は、さらなるエラーに応じて、前記さらなるエラーがコマンド／アドレスエラーである場合に前記エラーリカバリ状態（６４０）に移行し、それ以外の場合に前記コマンドリプレイ状態（６３０）に移行する、
請求項８のメモリコントローラ（５００）。
【請求項１１】
前記メモリコントローラ（５００）は、前記対応するメモリコマンドをリプレイして所定回数のエラーを受信したことに応じて、システムエラーを示す、
請求項７のメモリコントローラ（５００）。
【請求項１２】
メモリアクセス要求を提供するメモリアクセスエージェント（１１０／２１０／２２０）と、
メモリシステム（１２０）と、
請求項１〜１１の何れかのメモリコントローラ（２９０／５００）と、
を備えるデータ処理システム（１００）であって、
前記メモリコントローラ（２９０／５００）は、前記メモリアクセスエージェント（１１０／２１０／２２０）及び前記メモリシステム（１２０）に接続されている、
データ処理システム（１００）。
【請求項１３】
メモリアクセス要求を受信して記憶することと、
記憶されたメモリアクセス要求からのメモリコマンドのシーケンスをメモリチャネル（１３０／１４０）に提供することと、
前記メモリコマンドのシーケンスを前記メモリチャネル（１３０／１４０）に記憶し、前記メモリチャネル（１３０／１４０）からエラーなしの応答を未だ受信していないメモリコマンドを記憶し続けることと、
前記メモリチャネル（１３０／１４０）から受信した応答にエラーが発生したか否かを検出することと、
メモリエラーが検出されなかったことに応じて通常状態（６１０）に留まり、前記通常状態（６１０）の間、記憶されたメモリアクセス要求からコマンドを提供し続けることと、
エラーの検出に応じてリカバリ状態（６３０／６４０）に移行し、前記リカバリ状態（６３０／６４０）の間、記憶されたメモリコマンドを、前記エラーが発生した対応するメモリコマンドからリプレイし始めることと、を含む、
方法。
【請求項１４】
前記リカバリ状態（６３０／６４０）に移行する前に、少なくとも１つのメモリがパワーダウン状態から起動したという確認を待つことをさらに含む、
請求項１３の方法。
【請求項１５】
メモリエラーを生じた全てのメモリコマンドがさらなるエラーなしにリプレイされるまで前記リカバリ状態（６３０／６４０）に留まることをさらに含む、
請求項１３の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピュータシステムは、通常、安価で高密度のダイナミックランダムアクセスメモリ（ＤＲＡＭ）チップをメインメモリとして使用する。今日販売されている多くのＤＲＡＭチップは、半導体技術協会（ＪＥＤＥＣ：Joint Electron Devices Engineering Council）によって公表された様々なダブルデータレート（ＤＤＲ）ＤＲＡＭ規格と互換性がある。ＤＤＲ  ＤＲＡＭは、様々な低電力モードを設けることによって、高性能及び低電力動作の両方を提供する。
【０００２】
最新のＤＤＲメモリコントローラは、保留中のメモリアクセス要求を記憶するためのキューを維持して、保留中のメモリアクセス要求を、生成又は記憶された順序から外れた順序で選択するのを可能にし、これによって効率を高める。例えば、メモリコントローラは、所定のメモリランクの同じ行への複数のメモリアクセス要求をキューから取り出し、これらをメモリシステムに連続的に発行することによって、現在の行をプリチャージして他の行をアクティブにするオーバーヘッドを回避することができる。
【０００３】
ＤＤＲメモリシステムは、例えばパリティビット、巡回冗長コード（ＣＲＣ）、エラー検出コード（ＥＤＣ）、又は、ＤＤＲ  ＤＲＡＭ内にデータと共に記憶される他のエラー訂正コード（ＥＣＣ）等のように、エラー検出及びリカバリのための様々なメカニズムを含む。ＤＤＲメモリコントローラは、メモリアクセスを実行する場合に、記憶されたＣＲＣ又はＥＣＣビットを、メモリアクセスに伴って計算されたＣＲＣ又はＥＣＣビットと比較する。ＤＤＲメモリコントローラは、エラーの検出に応じて、可能であればエラーを訂正し、エラーをオペレーティングシステムに報告する。そして、オペレーティングシステムは、実行すべき是正措置を決定する。しかし、ＤＲＡＭバスは、２４００メガヘルツ（ＭＨｚ）等の比較的高いクロックレートで動作し、クロックサイクルの両遷移でデータを転送する。データレートが高いため、ＤＤＲメモリバスは、偶発的なランダムエラー又はメモリバス上の「グリッチ」の影響を受けやすい。既知のＤＤＲメモリコントローラは、これらのエラーを検出及び訂正するメカニズムを有するが、このようなメカニズムは、オペレーティングシステムコールによって引き起こされるオーバーヘッドのためにシステムパフォーマンスを著しく低下させる。
【図面の簡単な説明】
【０００４】
【図１】いくつかの実施形態による、データ処理システムのブロック図である。
【図２】図１のデータ処理システムでの使用に適したアクセラレーテッドプロセッシングユニット（ＡＰＵ：accelerated processing unit）のブロック図である。
【図３】いくつかの実施形態による、図２のＡＰＵでの使用に適したメモリコントローラ及び関連する物理インタフェース（ＰＨＹ）のブロック図である。
【図４】いくつかの実施形態による、図２のＡＰＵでの使用に適した他のメモリコントローラ及び関連するＰＨＹのブロック図である。
【図５】いくつかの実施形態による、メモリコントローラのブロック図である。
【図６】図５のメモリコントローラの有限状態マシンの動作に関連する状態図である。
【発明を実施するための形態】
【０００５】
以下の説明では、異なる図面において同じ参照番号を使用して、類似又は同一の項目を示している。特に断りのない限り、「接続された」という単語及びこれに関連する動詞形は、当技術分野において既知の手段による直接接続及び間接的な電気接続の両方を含む。特に断りのない限り、直接接続の説明は、適切な形態の間接的な電気接続を使用する代替の実施形態をも意味している。
【０００６】
一形態では、メモリコントローラは、コマンドキューと、アービタと、リプレイキューと、を含む。コマンドキューは、メモリアクセス要求を受信して記憶する。アービタは、メモリコマンドのシーケンスをメモリチャネルに提供するために、コマンドキューに接続されている。リプレイキューは、メモリコマンドのシーケンスをメモリチャネルに記憶し、メモリチャネルからの応答を未だ受信していないメモリアクセスコマンドを記憶し続ける。対応するメモリコマンドがエラーなく完了したことが応答によって示された場合、リプレイキューは、さらなるアクションを行わずに、対応するメモリコマンドを削除する。対応するメモリコマンドがエラーを伴って完了したことが応答によって示された場合、リプレイキューは、少なくとも当該対応するメモリコマンドをリプレイする。
【０００７】
他の形態では、メモリコントローラは、コマンドキューと、アービタと、メモリインタフェースキューと、リプレイキューと、を含む。コマンドキューは、メモリアクセス要求を受信して記憶する。アービタは、メモリコマンドのシーケンスをメモリチャネルに提供するために、コマンドキューに接続されている。メモリインタフェースキューは、メモリアクセス要求を受信して記憶するために、コマンドキューに接続されている。リプレイキューは、メモリインタフェースキューに接続されており、メモリコマンドのシーケンスをメモリチャネルに記憶し、メモリチャネルからの応答を未だ受信していないメモリアクセスコマンドを記憶し続ける。メモリコントローラは、エラーを検出しない限り通常状態に留まり、メモリインタフェースキューは、通常状態において、アービタによって選択されたコマンドをコマンドキューから受信し続ける。メモリコントローラは、エラーの検出に応じてリカバリ状態に移行し、リプレイキューは、リカバリ状態において、少なくとも１つの対応するメモリコマンドをメモリインタフェースキューに送信することによって、少なくとも１つの対応するメモリコマンドをリプレイする。
【０００８】
さらに他の形態では、データ処理システムは、メモリアクセスエージェントと、メモリシステムと、メモリコントローラと、を含む。メモリアクセスエージェントは、メモリアクセス要求を提供する。メモリコントローラは、メモリアクセスエージェント及びメモリシステムに接続されている。メモリコントローラは、コマンドキューと、アービタと、リプレイキューと、を含む。コマンドキューは、メモリアクセス要求を受信して記憶する。アービタは、メモリコマンドのシーケンスをメモリシステムに提供するために、コマンドキューに接続されている。リプレイキューは、メモリコマンドのシーケンスをメモリチャネルに記憶し、メモリチャネルからの応答を未だ受信していないメモリアクセスコマンドを記憶し続ける。対応するメモリコマンドがエラーなく完了したことが応答によって示された場合、リプレイキューは、さらなるアクションを行わずに、対応するメモリコマンドを削除する。対応するメモリコマンドがエラーを伴って完了したことが応答によって示された場合、リプレイキューは、少なくとも当該対応するメモリコマンドをリプレイする。
【０００９】
さらに他の形態では、方法は、メモリアクセス要求を受信して記憶することを含む。記憶されたメモリアクセス要求からのメモリコマンドのシーケンスがメモリチャネルに提供され、メモリチャネルからエラーなしの応答を未だ受信していないメモリコマンドが記憶され続ける。メモリエラーが発生したか否かは、メモリチャネルから受信した応答において検出される。メモリコントローラは、メモリエラーが検出されないことに応じて、通常状態に留まり、通常状態の間、記憶されたメモリアクセス要求の中からコマンドが提供され続ける。エラーの検出に応じてリカバリ状態に移行し、リカバリ状態の間、記憶されたメモリコマンドは、エラーが発生した対応するメモリコマンドからリプレイし始める。
【００１０】
図１は、いくつかの実施形態による、データ処理システム１００のブロック図である。データ処理システム１００は、概して、アクセラレーテッドプロセッシングユニット（ＡＰＵ）の形態のデータプロセッサ１１０と、メモリシステム１２０と、周辺機器相互接続エクスプレス（ＰＣＩｅ）システム１５０と、ユニバーサルシリアルバス（ＵＳＢ）システム１６０と、ディスクドライブ１７０と、を含む。データプロセッサ１１０は、データ処理システム１００の中央処理装置（ＣＰＵ）として動作し、現代のコンピュータシステムにおいて有用な様々なバス及びインタフェースを提供する。これらのインタフェースには、２つのダブルデータレート（ＤＤＲｘ）メモリチャネルと、ＰＣＩｅリンクへの接続用のＰＣＩｅルートコンプレックスと、ＵＳＢネットワークへの接続用のＵＳＢコントローラと、ＳＡＴＡ（Serial Advanced Technology Attachment）大容量記憶デバイスへのインタフェースと、が含まれる。
【００１１】
メモリシステム１２０は、メモリチャネル１３０と、メモリチャネル１４０と、を含む。メモリチャネル１３０は、本例において別々のランクに対応する代表的なＤＩＭＭ１３４，１３６，１３８を含む、ＤＤＲｘバス１３２に接続されたデュアルインラインメモリモジュール（ＤＩＭＭ）のセットを含む。同様に、メモリチャネル１４０は、代表的なＤＩＭＭ１４４，１４６，１４８を含む、ＤＤＲｘバス１４２に接続されたＤＩＭＭのセットを含む。
【００１２】
ＰＣＩｅシステム１５０は、データプロセッサ１１０内のＰＣＩｅルートコンプレックスに接続されたＰＣＩｅスイッチ１５２と、ＰＣＩｅデバイス１５４と、ＰＣＩｅデバイス１５６と、ＰＣＩｅデバイス１５８と、を含む。ＰＣＩｅデバイス１５６は、システム基本入出力システム（ＢＩＯＳ）メモリ１５７に接続されている。システムＢＩＯＳメモリ１５７は、例えば読み出し専用メモリ（ＲＯＭ）、フラッシュＥＥＰＲＯＭ（electrically erasable programmable ROM）等の様々な不揮発性メモリタイプの何れかであってもよい。
【００１３】
ＵＳＢシステム１６０は、データプロセッサ１１０内のＵＳＢマスタに接続されたＵＳＢハブ１６２と、ＵＳＢハブ１６２にそれぞれ接続された代表的なＵＳＢデバイス１６４，１６６，１６８と、を含む。ＵＳＢデバイス１６４，１６６，１６８は、例えばキーボード、マウス、フラッシュＥＥＰＲＯＭポート等のデバイスであってもよい。
【００１４】
ディスクドライブ１７０は、ＳＡＴＡバスを介してデータプロセッサ１１０に接続されており、オペレーティングシステム、アプリケーションプログラム、アプリケーションファイル等のための大容量ストレージを提供する。
【００１５】
データ処理システム１００は、メモリチャネル１３０及びメモリチャネル１４０を設けることによって、最新のコンピューティングアプリケーションでの使用に適している。各メモリチャネル１３０，１４０は、例えばＤＤＲバージョン４（ＤＤＲ４）、低電力ＤＤＲ４（ＬＰＤＤＲ４）、グラフィックスＤＤＲバージョン５（ＧＤＤＲ５）及び高帯域幅メモリ（ＨＢＭ）等の最新のＤＤＲメモリに接続されてもよいし、将来のメモリ技術に適応されてもよい。これらのメモリは、高いバス帯域幅及び高速動作を提供する。同時に、これらは、ラップトップコンピュータ等のバッテリ駆動アプリケーションの電力を節約する低電力モードも設けており、組み込み型サーマルモニタリングも提供する。
【００１６】
図２は、図１のデータ処理システム１００での使用に適したＡＰＵ２００のブロック図である。ＡＰＵ２００は、概して、中央処理装置（ＣＰＵ）コアコンプレックス２１０と、グラフィックスコア２２０と、ディスプレイエンジン２３０のセットと、メモリ管理ハブ２４０と、データファブリック２５０と、周辺コントローラ２６０のセットと、周辺バスコントローラ２７０のセットと、システム管理ユニット（ＳＭＵ）２８０と、メモリコントローラ２９０のセットと、を含む。
【００１７】
ＣＰＵコアコンプレックス２１０は、ＣＰＵコア２１２と、ＣＰＵコア２１４と、を含む。本例において、ＣＰＵコアコンプレックス２１０は２つのＣＰＵコアを含むが、他の実施形態では、ＣＰＵコアコンプレックス２１０は任意の数のＣＰＵコアを含んでもよい。各ＣＰＵコア２１２，２１４は、制御ファブリックを形成するシステム管理ネットワーク（ＳＭＮ）及びデータファブリック２５０に対して双方向に接続されており、メモリアクセス要求をデータファブリック２５０に提供することができる。各ＣＰＵコア２１２，２１４は、単一コアであってもよいし、例えばキャッシュ等の特定のリソースを共有する２つ以上の単一コアを有するコアコンプレックスであってもよい。
【００１８】
グラフィックスコア２２０は、例えば、頂点処理、フラグメント処理、シェーディング、テクスチャブレンド等のグラフィックス操作を、高度に統合された並列形式で実行することの可能な高性能グラフィックス処理ユニット（ＧＰＵ）である。グラフィックスコア２２０は、ＳＭＮ及びデータファブリック２５０に対して双方向に接続されており、メモリアクセス要求をデータファブリック２５０に提供することができる。これに関して、ＡＰＵ２００は、ＣＰＵコアコンプレックス２１０及びグラフィックスコア２２０が同じメモリ空間を共有するユニファイドメモリアーキテクチャ、又は、ＣＰＵコアコンプレックス２１０及びグラフィックスコア２２０がメモリ空間の一部を共有するメモリアーキテクチャをサポートしてもよいが、グラフィックスコア２２０は、ＣＰＵコアコンプレックス２１０がアクセスできない専用のグラフィックスメモリを使用してもよい。
【００１９】
ディスプレイエンジン２３０は、グラフィックスコア２２０によって生成されたオブジェクトをレンダリング及びラスタライズして、モニタに表示する。グラフィックスコア２２０及びディスプレイエンジン２３０は、メモリシステム１２０の適切なアドレスに一様に変換されるために共通のメモリ管理ハブ２４０に対して双方向に接続されており、メモリ管理ハブ２４０は、かかるメモリアクセスを生成し、メモリシステムから返された読出しデータを受信するために、データファブリック２５０に対して双方向に接続されている。
【００２０】
データファブリック２５０は、任意のメモリアクセスエージェントとメモリコントローラ２９０との間でメモリアクセス要求及びメモリ応答をルーティングするためのクロスバースイッチを含む。また、データファブリック２５０は、システム構成に基づくメモリアクセスの宛先と、仮想接続毎のバッファとを判断するためのシステムメモリマップであって、ＢＩＯＳによって定義されたシステムメモリマップを含む。
【００２１】
周辺コントローラ２６０は、ＵＳＢコントローラ２６２と、ＳＡＴＡインタフェースコントローラ２６４と、を含み、これらの各々が、システムハブ２６６及びＳＭＮバスに対して双方向に接続されている。これらの２つのコントローラは、ＡＰＵ２００で使用可能な周辺コントローラの単なる例示である。
【００２２】
周辺バスコントローラ２７０は、システムコントローラ（即ち「サウスブリッジ」（ＳＢ））２７２と、ＰＣＩｅコントローラ２７４と、を含み、これらの各々が、入出力（Ｉ／Ｏ）ハブ２７６及びＳＭＮバスに対して双方向に接続されている。また、Ｉ／Ｏハブ２７６は、システムハブ２６６及びデータファブリック２５０に対して双方向に接続されている。したがって、例えば、ＣＰＵコアは、データファブリック２５０がＩ／Ｏハブ２７６を介してルーティングするアクセスを通じて、ＵＳＢコントローラ２６２、ＳＡＴＡインタフェースコントローラ２６４、ＳＢ２７２、又は、ＰＣＩｅコントローラ２７４内のレジスタをプログラムすることができる。
【００２３】
ＳＭＵ２８０は、ＡＰＵ２００上のリソースの動作を制御し、それらの間の通信を同期させるローカルコントローラである。ＳＭＵ２８０は、ＡＰＵ２００上の様々なプロセッサのパワーアップシーケンシングを管理し、リセット、イネーブル及び他の信号を介して複数のオフチップデバイスを制御する。ＳＭＵ２８０は、ＡＰＵ２００の各コンポーネントにクロック信号を提供するために、図２に示されていない１つ以上のクロック源（例えば位相同期ループ（ＰＬＬ）等）を含む。また、ＳＭＵ２８０は、様々なプロセッサ及び他の機能ブロックの電力を管理し、ＣＰＵコア２１２，２１４及びグラフィックスコア２２０から測定された電力消費値を受信して、適切な電力状態を判断してもよい。
【００２４】
また、ＡＰＵ２００は、様々なシステムモニタリング及び省電力機能を実装する。特に、１つのシステムモニタリング機能は、サーマルモニタリングである。例えば、ＳＭＵ２８０は、ＡＰＵ２００が高温になると、ＣＰＵコア２１２，２１４及び／又はグラフィックスコア２２０の周波数及び電圧を低減させてもよい。ＡＰＵ２００が非常に高温になった場合には、ＡＰＵ２００が完全にシャットダウンされてもよい。サーマルイベントは、ＳＭＵ２８０によって、外部センサからＳＭＮバスを介して受信されてもよく、ＳＭＵ２８０は、これに応じてクロック周波数及び／又は電源電圧を低下させてもよい。
【００２５】
図３は、いくつかの実施形態による、図２のＡＰＵ２００での使用に適したメモリコントローラ３００及び関連する物理インタフェース（ＰＨＹ）３３０のブロック図である。メモリコントローラ３００は、メモリチャネル３１０と、パワーエンジン３２０と、を含む。メモリチャネル３１０は、ホストインタフェース３１２と、メモリチャネルコントローラ３１４と、物理インタフェース３１６と、を含む。ホストインタフェース３１２は、メモリチャネルコントローラ３１４を、スケーラブルデータポート（ＳＤＰ）を介してデータファブリック２５０に双方向に接続する。物理インタフェース３１６は、メモリチャネルコントローラ３１４を、ＤＤＲ−ＰＨＹインタフェース仕様（ＤＦＩ）に準拠するバスを介してＰＨＹ３３０に双方向に接続する。パワーエンジン３２０は、ＳＭＮバスを介してＳＭＵ２８０に双方向に接続されており、ＡＰＢ（Advanced Peripheral Bus）を介してＰＨＹ３３０に双方向に接続されており、メモリチャネルコントローラ３１４にも双方向に接続されている。ＰＨＹ３３０は、例えば図１のメモリチャネル１３０又はメモリチャネル１４０等のメモリチャネルに対する双方向接続を有する。メモリコントローラ３００は、単一のメモリチャネルコントローラ３１４を使用した単一のメモリチャネル用のメモリコントローラの例示であり、以下にさらに説明するメモリチャネルコントローラ３１４の動作を制御するためのパワーエンジン３２０を有する。
【００２６】
図４は、いくつかの実施形態による、図２のＡＰＵ２００での使用に適した別のメモリコントローラ４００及び関連するＰＨＹ４４０，４５０のブロック図である。メモリコントローラ４００は、メモリチャネル４１０，４２０と、パワーエンジン４３０と、を含む。メモリチャネル４１０は、ホストインタフェース４１２と、メモリチャネルコントローラ４１４と、物理インタフェース４１６と、を含む。ホストインタフェース４１２は、メモリチャネルコントローラ４１４を、ＳＤＰを介してデータファブリック２５０に双方向に接続する。物理インタフェース４１６は、ＤＦＩ仕様に準拠しており、メモリチャネルコントローラ４１４をＰＨＹ４４０に双方向に接続する。メモリチャネル４２０は、ホストインタフェース４２２と、メモリチャネルコントローラ４２４と、物理インタフェース４２６と、を含む。ホストインタフェース４２２は、メモリチャネルコントローラ４２４を、別のＳＤＰを介してデータファブリック２５０に双方向に接続する。物理インタフェース４２６は、ＤＦＩ仕様に準拠しており、メモリチャネルコントローラ４２４をＰＨＹ４５０に双方向に接続する。パワーエンジン４３０は、ＳＭＮバスを介してＳＭＵ２８０に双方向に接続されており、ＡＰＢを介してＰＨＹ４４０，４５０に双方向に接続されており、メモリチャネルコントローラ４１４，４２４にも双方向に接続されている。ＰＨＹ４４０は、例えば図１のメモリチャネル１３０等のメモリチャネルに対する双方向接続を有する。ＰＨＹ４５０は、例えば図１のメモリチャネル１４０等のメモリチャネルに対する双方向接続を有する。メモリコントローラ４００は、２つのメモリチャネルコントローラを有するメモリコントローラの例示であり、共有のパワーエンジン４３０を使用して、以下にさらに説明するように、メモリチャネルコントローラ４１４及びメモリチャネルコントローラ４２４の各々の動作を制御する。
【００２７】
図５は、いくつかの実施形態による、メモリコントローラ５００のブロック図である。メモリコントローラ５００は、メモリチャネルコントローラ５１０と、電力コントローラ５５０と、を含む。メモリチャネルコントローラ５１０は、インタフェース５１２と、キュー５１４と、コマンドキュー５２０と、アドレス生成器５２２と、コンテンツアドレス可能メモリ（ＣＡＭ）５２４と、リプレイキュー５３０と、リフレッシュロジックブロック５３２と、タイミングブロック５３４と、ページテーブル５３６と、アービタ５３８と、エラー訂正コード（ＥＣＣ）チェックブロック５４２と、ＥＣＣ生成ブロック５４４と、データバッファ（ＤＢ）５４６と、を含む。
【００２８】
インタフェース５１２は、外部バスを介したデータファブリック２５０との第１双方向接続と、出力と、を有する。メモリコントローラ５００において、この外部バスは、「ＡＸＩ４」として知られている、英国ケンブリッジのＡＲＭ  Ｈｏｌｄｉｎｇｓ，ＰＬＣによって仕様化されたアドバンストエクステンシブルインタフェースバージョン４と互換性があるが、他の実施形態では、他のタイプのインタフェースであってもよい。インタフェース５１２は、ＦＣＬＫ（又はＭＥＭＣＬＫ）ドメインとして知られる第１クロックドメインから、ＵＣＬＫドメインとして知られるメモリコントローラ５００の内部の第２クロックドメインへのメモリアクセス要求を変換する。同様に、キュー５１４は、ＵＣＬＫドメインから、ＤＦＩインタフェースに関連するＤＦＩＣＬＫドメインへのメモリアクセスを提供する。
【００２９】
アドレス生成器５２２は、データファブリック２５０からＡＸＩ４バスを介して受信したメモリアクセス要求のアドレスを復号化する。メモリアクセス要求は、正規化されたアドレスとして表わされる物理アドレス空間内のアクセスアドレスを含む。アドレス生成器５２２は、正規化されたアドレスを、メモリシステム１２０内の実際のメモリデバイスをアドレス指定し、関連するアクセスを効率的にスケジュールするのに使用可能なフォーマットに変換する。このフォーマットは、メモリアクセス要求を特定のランク、行アドレス、列アドレス、バンクアドレス及びバンクグループに関連付ける領域識別子を含む。システムＢＩＯＳは、起動時に、メモリシステム１２０内のメモリデバイスにクエリしてそのサイズ及び構成を判断し、アドレス生成器５２２に関連する構成レジスタのセットをプログラムする。アドレス生成器５２２は、構成レジスタに記憶された構成を使用して、正規化されたアドレスを適切なフォーマットに変換する。コマンドキュー５２０は、データ処理システム１００内のメモリアクセスエージェント（例えば、ＣＰＵコア２１２，２１４及びグラフィックスコア２２０等）から受信したメモリアクセス要求のキューである。コマンドキュー５２０は、アドレス生成器５２２によって復号化されたアドレスフィールドと、アクセスタイプ及びサービス品質（ＱｏＳ）識別子を含むメモリアクセスをアービタ５３８が効率的に選択するのを可能にする他のアドレス情報と、を記憶する。ＣＡＭ５２４は、例えばライトアフターライト（ＷＡＷ）及びリードアフターライト（ＲＡＷ）順序付けルール等の順序付けルールを実施するための情報を含む。
【００３０】
リプレイキュー５３０は、例えば、アドレス及びコマンドパリティ応答、ＤＤＲ４  ＤＲＡＭの書込み巡回冗長検査（ＣＲＣ）応答、又は、ＧＤＤＲ５  ＤＲＡＭの書込み及び読出しＣＲＣ応答等の応答を待つアービタ５３８によって取り出されたメモリアクセスを記憶するための一時的なキューである。リプレイキュー５３０は、ＥＣＣチェックブロック５４２にアクセスして、返されたＥＣＣが正しいか否か又はエラーを示しているか否かを判別する。リプレイキュー５３０は、何れかのサイクルでパリティ又はＣＲＣエラーの場合にアクセスがリプレイされるのを可能にする。
【００３１】
リフレッシュロジック５３２は、メモリアクセスエージェントから受信した通常の読出し及び書込みメモリアクセス要求とは別に生成される様々なパワーダウン、リフレッシュ、及び、終端抵抗（ＺＱ）較正サイクルのためのステートマシンを含む。例えば、メモリランクがプリチャージパワーダウンにある場合には、リフレッシュサイクルを実行するために定期的に起動されなければならない。リフレッシュロジック５３２は、オートリフレッシュコマンドを定期的に生成して、ＤＲＡＭチップ内のメモリセルのチャージオフストレージキャパシタのリークによって生じるデータエラーを防止する。さらに、リフレッシュロジック５３２は、ＺＱを定期的に較正して、システム内の熱変化によるオンダイ終端抵抗のミスマッチを防止する。また、リフレッシュロジック５３２は、どの場合にＤＲＡＭデバイスを別のパワーダウンモードにするのかを決定する。
【００３２】
アービタ５３８は、コマンドキュー５２０に双方向に接続されており、メモリチャネルコントローラ５１０の中心部分である。アービタ５３８は、メモリバスの利用を改善するために、インテリジェントなアクセススケジューリングによって効率を改善する。アービタ５３８は、タイミングブロック５３４を使用して、コマンドキュー５２０内の特定のアクセスの発行に適しているか否かをＤＲＡＭタイミングパラメータに基づいて判断することによって、適切なタイミング関係を実施する。例えば、各ＤＲＡＭは、同じバンクへの起動コマンド間の最小指定時間（「ｔＲＣ」として知られる）を有する。タイミングブロック５３４は、リプレイキュー５３０に双方向に接続されており、このタイミングパラメータ及びＪＥＤＥＣ仕様で指定された他のタイミングパラメータに基づいて適格性を判断するカウンタのセットを維持する。ページテーブル５３６は、リプレイキュー５３０に双方向に接続されており、アービタ５３８のメモリチャネルの各バンク及びランクのアクティブページに関する状態情報を維持する。
【００３３】
ＥＣＣ生成ブロック５４４は、インタフェース５１２から受信した書込みメモリアクセス要求に応じて、書込みデータに従ってＥＣＣを計算する。ＤＢ５４６は、受信したメモリアクセス要求の書込みデータ及びＥＣＣを記憶する。アービタ５３８が、メモリチャネルにディスパッチするための対応する書込みアクセスを選ぶと、ＤＢ５４６は、結合した書込みデータ／ＥＣＣをキュー５１４に出力する。
【００３４】
電力コントローラ５５０は、アドバンストエクテンシブルインタフェースバージョン１（ＡＸＩ）へのインタフェース５５２と、ＡＰＢインタフェース５５４と、パワーエンジン５６０と、を含む。インタフェース５５２は、ＳＭＮへの第１双方向接続であって、図５に別に示された「ＥＶＥＮＴ＿ｎ」と付されたイベント信号を受信するための入力を含む第１双方向接続と、出力と、を含む。ＡＰＢインタフェース５５４は、インタフェース５５２の出力に接続された入力と、ＡＰＢを介してＰＨＹに接続するための出力と、を有する。パワーエンジン５６０は、インタフェース５５２の出力に接続された入力と、キュー５１４の入力に接続された出力と、を有する。パワーエンジン５６０は、構成レジスタ５６２のセットと、マイクロコントローラ（μＣ）５６４と、セルフリフレッシュコントローラ（ＳＬＦＲＥＦ／ＰＥ）５６６と、信頼性のある読出し／書込みトレーニングエンジン（ＲＲＷ／ＴＥ）５６８と、を含む。構成レジスタ５６２は、ＡＸＩバスを介してプログラムされており、メモリコントローラ５００内の様々なブロックの動作を制御するための構成情報を記憶する。したがって、構成レジスタ５６２は、図５に詳細に示されていないこれらのブロックに接続された出力を有する。セルフリフレッシュコントローラ５６６は、リフレッシュロジック５３２によるリフレッシュの自動生成に加えて、リフレッシュの手動生成を可能にするエンジンである。信頼性のある読出し／書込みトレーニングエンジン５６８は、ＤＤＲインタフェース読出しレイテンシトレーニング及びループバックテスト等の目的のために、連続的なメモリアクセスストリームをメモリ又はＩ／Ｏデバイスに提供する。
【００３５】
メモリチャネルコントローラ５１０は、関連するメモリチャネルへのディスパッチのためにメモリアクセスを選択することを可能にする回路を含む。アドレス生成器５２２は、所望のアービトレーションの決定を行うために、アドレス情報を、メモリシステム内のランク、行アドレス、列アドレス、バンクアドレス及びバンクグループを含むプリデコードされた情報に復号化し、コマンドキュー５２０は、プリデコードされた情報を記憶する。構成レジスタ５６２は、受信したアドレス情報をアドレス生成器５２２がどのように復号するのかを決定するために、構成情報を記憶する。アービタ５３８は、復号化されたアドレス情報と、タイミングブロック５３４によって示されたタイミング適格性情報と、ページテーブル５３６によって示されたアクティブページ情報と、を使用して、例えばＱｏＳ要件等の他の基準を遵守しながらメモリアクセスを効率的にスケジューリングする。例えば、アービタ５３８は、メモリページを変更するのに必要なプリチャージ及びアクティブ化コマンドのオーバーヘッドを避けるために、オープンページへのアクセスを優先し、或るバンクへのオーバーヘッドアクセスを、他のバンクへの読出し及び書込みアクセスをインタリーブすることによって隠す。特に、アービタ５３８は、通常動作中に、異なるページを選択する前にプリチャージされる必要があるまで、異なるバンク内のページオープンを維持することを決定してもよい。
【００３６】
アービタ５３８は、タイミングブロック５３４を使用して、保留中のアクセスのタイミング適格性を判別し、次に、効率性及び公平性の両方を保証する基準のセットに基づいて、コマンドキュー５２０から適格なアクセスを選択する。アービタ５３８は、効率性及び公平性の両方を保証する２つのメカニズムをサポートする。第１に、アービタ５３８は、コマンドキュー５２０に記憶されたメモリアクセス要求の属性と、書き込みが許可されているのと同時に読み出しが許可される条件を制御するためのプログラム可能な閾値と、を調べることによって読み出し／書き込みトランザクション管理を実行して効率性及び公平性の両方を保証する。第２に、アービタ５３８は、特定のタイプのアクセスのストリークがメモリバスを無期限に保持するのを許可しないように保証するストリークカウンタを含む。これらの２つのメカニズムについて説明する。
【００３７】
（ＤＤＲメモリエラーリカバリ）
上述したように、リプレイキュー５３０は、アドレス及びコマンドパリティ応答、ＤＤＲ４  ＤＲＡＭの書き込み巡回冗長検査（ＣＲＣ）応答、又は、ＧＤＤＲ５  ＤＲＡＭの書き込み及び読み出しＣＲＣ応答等の応答を待っているアービタ５３８によって選択されたメモリアクセスを記憶する一時的なキューである。リプレイキュー５３０は、ＥＣＣチェックブロック５４２にアクセスして、返されたＥＣＣが正しいかどうか又はエラーを示しているかどうかを判別する。リプレイキュー５３０は、これらのサイクルのうち１つのサイクルにパリティ又はＣＲＣエラーがあった場合に、アクセスがリプレイされることを可能にする。また、リプレイキュー５３０は、現在のＤＤＲ  ＤＲＡＭで利用可能なエラー報告メカニズムを利用して、リプレイに関する決定を行う。メモリエラーが通常一時的であって、メモリチャネルが直ぐにリカバリすると仮定することによって、リプレイキュー５３０は、冗長で破壊的なリカバリシーケンスを回避するための適切なバックアップ及びリプレイメカニズムを提供する。
【００３８】
いくつかのデバイスは、転送時のデータ保護をサポートする（例えば、エラー検出及び訂正（ＥＤＣ）を伴うＧＤＤＲ５読み出し及び書き込みデータ転送、書き込みＣＲＣによって保護されたＤＤＲ４書き込みデータ転送等）。ＧＤＤＲ５デバイスは、ＣＲＣデータを転送するための単方向ＥＤＣバスを提供する。これにより、要求が読み出しか書き込みかにかかわらず、ＥＤＣ値がデバイスからコントローラに常に伝えられる。ＧＤＤＲ５の読み出し応答データの転送中に、ＥＤＣバンドルが、パラメータｔｃｒｃｒｌに基づいて、応答データと共に又は応答データの直後に返される。書き込みデータの転送中、ＥＤＣバンドルが、ＧＤＤＲ５デバイスが書き込みデータを受信した後に（受信した書き込みデータからＥＤＣ値が計算されるため）返される。読み出し時に、メモリコントローラ５００は、受信した読み出しデータ応答からＥＤＣ値を計算し、ＥＤＣ値を、その読み出しから受信したＥＤＣデータと比較する。書き込み時に、メモリコントローラ５００は、予想ＥＤＣ値を計算し、書き込みデータサイクル後にＧＤＤＲ５から返されたＥＤＣパケットと後で比較するために、計算した予想ＥＤＣ値をメモリコントローラ５００に一時的に記憶する。予想書き込みデータＥＤＣ値は、メモリコントローラ５００内のＥＤＣキューロジック（ＥＤＣＱ）に記憶される。
【００３９】
メモリコントローラ５００は、レイテンシを短縮するために「早期応答」をサポートし、リプレイキュー５３０は、ＥＤＣ応答が返される時間に対して「早期」に早期応答をメモリチャネルに返す。この「早期応答」サポートは、ＥＤＣの結果が「不良」に戻った場合に応答が「キャンセル」されることを要求する。メモリコントローラ５００は、ＥＤＣの結果が不良に戻った場合に、「早期応答」パケット及び「応答キャンセル」をメモリチャネルに応答する。ＥＤＣが「良好」と返された場合、さらなる措置が不要となる。読み出し要求又は書き込み要求が失敗すると、リプレイキュー５３０は、サイクル要求の再試行を実行する。書き込み要求は、発行時にメモリチャネルに確認応答される。書き込みが失敗した場合、リプレイキュー５３０は、メモリチャネルとは無関係にコマンドを再試行し、書き込みデータの順序を維持する。
【００４０】
ＤＤＲ４デバイスは、書き込みコマンドでのＣＲＣチェックのみをサポートする。ＣＲＣ情報は、最新の２ビット時間の間に書き込みデータと共に送信される。よって、ＧＤＤＲ５のＥＤＣとは異なり、ＣＲＣ情報がＤＤＲ４デバイスでチェックされ、デバイスは、エラー検出時にＡＬＥＲＴ＃信号をアサートする。ＡＬＥＲＴ＃信号はオープンドレインであり、ＤＲＡＭ  ＭＥＭＣＬＫ又は任意の内部コントローラクロックと非同期であるとみなされ、これにより同期を必要とすることから、連続するバーストのシーケンスにおいてエラーを引き起こした特定の書き込みトランザクションを識別するメモリコントローラ５００の能力が制限され、メモリコントローラ５００は、以前に発行された様々な書き込みコマンドをリプレイして、失敗した書き込みのリプレイを確実にする。ＧＤＤＲ５及びＤＤＲ４の両方のメモリに対して、リプレイキュー５３０は、書き込み及び読み出しトランザクションをリプレイし、失敗したサイクルが正常に完了するまで、コマンドキュー５２０から発行されている新たなトランザクションを停止する。
【００４１】
リプレイキュー５３０の具体的な実施形態及び動作について説明する。
【００４２】
図６は、図５のメモリコントローラ５００の有限状態マシン６００の動作に関連する状態図である。有限状態マシン６００は、ＮＯＲＭＡＬ状態６１０と、「ＷＡＩＴ＿ＡＣＫ」と付された待機確認状態６２０と、「ＣＭＤ＿ＲＥＰ」と付されたコマンドリプレイ状態６３０と、「ＥＲＲ＿ＲＥＣ」と付されたエラーリカバリ状態６４０と、によって定義される。メモリコントローラ５００は、ＤＲＡＭエラーが検出されない限り、ＮＯＲＭＡＬ状態６１０に留まる。この状態の間、アービタ５３８は、メモリシステムへのメモリアクセスコマンドの順序付けの制御を保持し、その通常の優先順位ルールに従ってコマンドキュー５２０からコマンドを選択することによって、通常のトラフィックを送信する。メモリコントローラ５００は、リプレイキュー５３０から返されたＤＲＡＭエラーを検出すると、ＮＯＲＭＡＬ状態６１０を離れ、一時的にＷＡＩＴ＿ＡＣＫ状態６２０に移行する。次に、キュー５１４は、アービタ５３８によって選択されたコマンドの受け付けを停止し、選択されたリカバリフェーズにおいてリプレイキュー５３０からのコマンドの受信を開始する。リプレイキュー５３０は、メモリアクセスコマンドの発行を制御し、ＤＲＡＭタイプ及びエラータイプに基づいてリカバリシーケンスを実行する。例えば、ＤＤＲ４システムにおけるコマンド／アドレスエラーの場合、メモリコントローラ５００は、ＥＲＲ＿ＲＥＣ状態６４０に移行し、コマンドが正しく提供されたことを保証するために、リプレイキュー５３０が最後のリカバリコマンドを送信した後の待機時間までこの状態に留まる。このとき、メモリコントローラ５００は、ＣＭＤ＿ＲＥＰ状態６３０に移行する。ＣＭＤ＿ＲＥＰ状態６３０において、リプレイキュー５３０は、エラーが発生した可能性のある１つ以上のコマンドをリプレイする。ＣＭＤ＿ＲＥＰ状態６３０は、エラーが発生した可能性がある最後のコマンドをリプレイキュー５３０が送信したときに終了する。
【００４３】
例えば、典型的なシーケンスは以下のように進行する。
【００４４】
１）起動時に、有限状態マシン６００は、ＮＯＲＭＡＬ状態６１０で開始する。
【００４５】
２）ＤＤＲ４システムの場合、リプレイキュー５３０はエラー（ＡＬＥＲＴ＿ｎ＝０）をサンプリングし、ＧＤＤＲ５システムの場合、リプレイキュー５３０がキュー５１４から返されたＣＲＣエラーを受信すると、リプレイキュー５３０は、キュー５１４からの制御を要求し、有限状態マシン６００は、ＷＡＩＴ＿ＡＣＫ状態６２０に移行する。
【００４６】
３）アービタ５３８及びキュー５１４は、リカバリ要求を確認する前に任意のＤＲＡＭをパワーダウンモードから起動して、リプレイキュー５３０が制御している間、動的なパワーダウンを無効にする必要がある。
【００４７】
４）キュー５１４が要求を確認すると、状態マシン６００は、ＥＲＲ＿ＲＥＣ状態６４０に移行してコマンド／アドレスエラーリカバリシーケンスを実行するか、ＣＭＤ＿ＲＥＰ状態６３０に直接移行する。
【００４８】
５）コマンド／アドレスエラーリカバリが完了すると、状態マシン６００はＣＭＤ＿ＲＥＰ状態６３０に移行する。
【００４９】
６）ＣＭＤ＿ＲＥＰ状態６３０において、エラートランザクションがリプレイされ、メモリシステムに再送される。さらなるエラーが発生した場合、状態マシン６００は、ＣＭＤ＿ＲＥＰ状態６３０に留まるか、コマンド／アドレスエラーの場合にはＥＲＲ＿ＲＥＣ状態６４０に移行する。
【００５０】
７）リプレイが完了してクールダウン時間が経過すると、リプレイキュー５３０は、トランザクションの制御をアービタ５３８に解放し、有限状態マシン６００は、ＮＯＲＭＡＬ状態６１０に戻り、メモリコントローラ５００は、再び通常のコマンドを提供する用意を整える。メモリコントローラ５００がメモリコマンドをリプレイし、所定の回数だけエラーを受信した場合、システムエラーを示す。エラーが繰り返し発生するということは、メモリバス上の一時的な状態ではなく、実際のシステム障害を示しているので、オペレーティングシステムによって他の是正措置を取る必要がある。
【００５１】
図５のメモリコントローラは、ハードウェア及びソフトウェアの様々な組み合わせによって実装されてもよい。例えば、ハードウェア回路は、プライオリティエンコーダ、有限ステートマシン、プログラマブルロジックアレイ（ＰＬＡ）等を含んでもよい。例えば、アービタ５３８は、保留中のコマンドの相対的なタイミング適格性を評価するために、記憶されたプログラム命令を実行するマイクロコントローラを用いて実装することができる。この場合、いくつかの命令は、マイクロコントローラによって実行されるために、非一時的なコンピュータメモリ又はコンピュータ可読記憶媒体に記憶されてもよい。様々な実施形態では、非一時的なコンピュータ可読記憶媒体は、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ等のソリッドステート記憶デバイス、又は、他の不揮発性メモリデバイスを含む。非一時的なコンピュータ可読記憶媒体に記憶されたコンピュータ可読命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、１つ以上のプロセッサによって解釈及び／若しくは実行可能な他の命令フォーマットであってもよい。
【００５２】
図５のメモリコントローラ又はその一部（例えば、リプレイキュー５３０）は、プログラムによって読出され、集積回路を製造するために直接的若しくは間接的に使用されるデータベース又は他のデータ構造の形態のコンピュータアクセス可能なデータ構造によって記述されてもよいし表現されてもよい。例えば、このデータ構造は、例えばＶｅｒｉｌｏｇ又はＶＨＤＬ等の高水準設計言語（ＨＤＬ）におけるハードウェア機能の動作レベル記述であってもよいし、レジスタ転送レベル（ＲＴＬ）記述であってもよい。記述は、ゲートのリストを含むネットリストを合成ライブラリから生成するために当該記述を合成し得る合成ツールによって読出されてもよい。ネットリストは、集積回路を含むハードウェアの機能を表すゲートのセットを含む。そして、ネットリストを配置及びルーティングして、マスクに適用される幾何学的形状を記述するデータセットを生成してもよい。マスクは、集積回路を製造するために様々な半導体製造工程で使用されてもよい。或いは、コンピュータアクセス可能な記憶媒体上のデータベースは、所望により、ネットリスト（合成ライブラリ有り若しくは無し）又はデータセットであってもよいし、グラフィックデータシステム（ＧＤＳ）ＩＩデータであってもよい。
【００５３】
特定の実施形態について説明してきたが、これらの実施形態に対する様々な変更が当業者には明らかであろう。例えば、メモリチャネルコントローラ５１０及び／又は電力コントローラ５５０の内部アーキテクチャは、様々な実施形態において変更することができる。メモリコントローラ５００は、ＤＤＲｘメモリ以外の他のタイプのメモリ（例えば、高帯域幅メモリ（ＨＢＭ）、ＲＡＭバスＤＲＡＭ（ＲＤＲＡＭ）等）にインタフェースすることができる。図示した実施形態は、別々のＤＩＭＭに対応する各ランクのメモリを示したが、他の実施形態では、各ＤＩＭＭは複数のランクをサポートすることができる。
【００５４】
したがって、添付の特許請求の範囲によって、開示された実施形態の範囲に含まれる、開示された実施形態の全ての変更を包含することが意図される。
【図１】
2019527424.tif 000003
【図２】
2019527424.tif 000004
【図３】
2019527424.tif 000005
【図４】
2019527424.tif 000006
【図５】
2019527424.tif 000007
【図６】
2019527424.tif 000008
【手続補正書】
【提出日】平成31年4月19日(2019.4.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリアクセス要求を受信して記憶するコマンドキュー（５２０）と、
前記コマンドキューに接続され、メモリコマンドのシーケンスをメモリチャネル（１３０／１４０）に提供するアービタ（５３８）と、
前記メモリコマンドのシーケンスを前記メモリチャネル（１３０／１４０）に記憶し、前記メモリチャネル（１３０／１４０）からの応答を未だ受信していないメモリアクセスコマンドを記憶し続けるリプレイキュー（５３０）と、
を備えるメモリコントローラ（５００）であって、
対応するメモリコマンドがエラーなく完了したことが応答によって示された場合、前記リプレイキュー（５３０）は、さらなるアクションを行わずに、前記対応するメモリコマンドを削除し、
前記対応するメモリコマンドがエラーを伴って完了したことが応答によって示された場合、前記リプレイキュー（５３０）は、少なくとも前記対応するメモリコマンドをリプレイし、前記リプレイキューは、前記エラーが発生した可能性がある前記対応するメモリコマンド又は前記エラーが発生した可能性があるコマンドの範囲をリプレイする、
メモリコントローラ（５００）。
【請求項２】
前記対応するメモリコマンドのエラー訂正コード（ＥＣＣ）を計算し、計算したＥＣＣを、前記メモリチャネル（１３０／１４０）から返されたＥＣＣと比較するために前記リプレイキュー（５３０）に接続されたＥＣＣチェックブロック（５４２）をさらに備える、
請求項１のメモリコントローラ（５００）。
【請求項３】
メモリアクセス要求を受信し記憶するために前記コマンドキュー（５２０）に接続されたメモリインタフェースキュー（５１４）をさらに備え、
前記メモリインタフェースキュー（５１４）は、前記メモリチャネル（１３０／１４０）にディスパッチされたコマンドと、前記コマンドに応じて前記メモリチャネル（１３０／１４０）から受信した応答と、を提供するために前記リプレイキュー（５３０）に接続されている、
請求項１のメモリコントローラ（５００）。
【請求項４】
前記リプレイキュー（５３０）は、前記メモリインタフェースキュー（５１４）からの応答の受信に応じて、エラー訂正コードを計算し、前記エラー訂正コードを前記メモリチャネル（１３０／１４０）から受信したエラー訂正コードと比較することによって、前記応答にエラーが存在することを判別する、
請求項３のメモリコントローラ（５００）。
【請求項５】
前記リプレイキュー（５３０）は、前記メモリインタフェースキュー（５１４）からのエラーを含む応答の受信に応じて、前記対応するメモリコマンドと、前記対応するメモリコマンドの後に前記メモリインタフェースキュー（５１４）が前記メモリチャネル（１３０／１４０）に提供した追加のコマンドと、をリプレイする、
請求項３のメモリコントローラ（５００）。
【請求項６】
メモリアクセス要求を受信して記憶するコマンドキュー（５２０）と、
前記コマンドキュー（５２０）に接続され、メモリコマンドのシーケンスをメモリチャネル（１３０／１４０）に提供するアービタ（５３８）と、
前記コマンドキュー（５２０）に接続され、メモリアクセス要求を受信して記憶するメモリインタフェースキュー（５１４）と、
前記メモリインタフェースキュー（５１４）に接続され、前記メモリコマンドのシーケンスを前記メモリチャネル（１３０／１４０）に記憶し、前記メモリチャネル（１３０／１４０）からの応答を未だ受信していないメモリアクセスコマンドを記憶し続けるリプレイキュー（５３０）と、
を備えるメモリコントローラ（５００）であって、
前記メモリコントローラ（５００）は、エラーを検出しない限り通常状態に留まり、前記メモリインタフェースキュー（５１４）は、前記通常状態において、前記アービタ（５３８）によって選択されたコマンドを前記コマンドキュー（５２０）から受信し続け、
前記メモリコントローラ（５００）は、エラーの検出に応じてリカバリ状態（６３０／６４０）に移行し、前記リプレイキュー（５３０）は、前記リカバリ状態において、少なくとも１つの対応するメモリコマンドを前記メモリインタフェースキュー（５１４）に送信することによって、前記少なくとも１つの対応するメモリコマンドをリプレイし、前記リプレイキューは、前記エラーが発生した可能性がある前記対応するメモリコマンド又は前記エラーが発生した可能性があるコマンドの範囲をリプレイする、
メモリコントローラ（５００）。
【請求項７】
前記メモリコントローラ（５００）は、前記リプレイキュー（５３０）が、メモリエラーを発生させた全てのメモリコマンドをさらなるエラーなしにリプレイするまで、前記リカバリ状態（６３０／６４０）に留まる、
請求項６のメモリコントローラ（５００）。
【請求項８】
前記メモリコントローラ（５００）は、コマンド及びアドレスエラーに応じてエラーリカバリ状態（６４０）に移行し、データエラーに応じてコマンドリプレイ状態（６３０）に移行する、
請求項６のメモリコントローラ（５００）。
【請求項９】
前記メモリコントローラ（５００）は、エラーが発生した可能性があるコマンドのリプレイに応じて、前記エラーリカバリ状態（６４０）から前記コマンドリプレイ状態（６３０）に移行し、
前記メモリコントローラ（５００）は、全てのリプレイされたコマンドに対する応答をエラーなしに受信したことに応じて、前記コマンドリプレイ状態（６３０）から前記通常状態（６１０）に移行する、
請求項８のメモリコントローラ（５００）。
【請求項１０】
前記メモリコントローラ（５００）は、エラーが発生した可能性があるコマンドのリプレイに応じて、前記エラーリカバリ状態（６４０）から前記コマンドリプレイ状態（６３０）に移行し、
前記メモリコントローラ（５００）は、さらなるエラーに応じて、前記さらなるエラーがコマンド／アドレスエラーである場合に前記エラーリカバリ状態（６４０）に移行し、それ以外の場合に前記コマンドリプレイ状態（６３０）に移行する、
請求項８のメモリコントローラ（５００）。
【請求項１１】
前記メモリコントローラ（５００）は、前記対応するメモリコマンドをリプレイして所定回数のエラーを受信したことに応じて、システムエラーを示す、
請求項７のメモリコントローラ（５００）。
【請求項１２】
メモリアクセス要求を提供するメモリアクセスエージェント（１１０／２１０／２２０）と、
メモリシステム（１２０）と、
請求項１〜１１の何れかのメモリコントローラ（２９０／５００）と、
を備えるデータ処理システム（１００）であって、
前記メモリコントローラ（２９０／５００）は、前記メモリアクセスエージェント（１１０／２１０／２２０）及び前記メモリシステム（１２０）に接続されている、
データ処理システム（１００）。
【請求項１３】
メモリアクセス要求を受信して記憶することと、
記憶されたメモリアクセス要求からのメモリコマンドのシーケンスをメモリチャネル（１３０／１４０）に提供することと、
前記メモリコマンドのシーケンスを前記メモリチャネル（１３０／１４０）に記憶し、前記メモリチャネル（１３０／１４０）からエラーなしの応答を未だ受信していないメモリコマンドを記憶し続けることと、
前記メモリチャネル（１３０／１４０）から受信した応答にエラーが発生したか否かを検出することと、
メモリエラーが検出されなかったことに応じて通常状態（６１０）に留まり、前記通常状態（６１０）の間、記憶されたメモリアクセス要求からコマンドを提供し続けることと、
エラーの検出に応じてリカバリ状態（６３０／６４０）に移行し、前記リカバリ状態（６３０／６４０）の間、記憶されたメモリコマンドを、前記エラーが発生した対応するメモリコマンドからリプレイし始めることと、を含み、
前記リプレイすることは、前記エラーが発生した可能性がある前記対応するメモリコマンド又は前記エラーが発生した可能性があるコマンドの範囲をリプレイすることを含む、
方法。
【請求項１４】
前記リカバリ状態（６３０／６４０）に移行する前に、少なくとも１つのメモリがパワーダウン状態から起動したという確認を待つことをさらに含む、
請求項１３の方法。
【請求項１５】
メモリエラーを生じた全てのメモリコマンドがさらなるエラーなしにリプレイされるまで前記リカバリ状態（６３０／６４０）に留まることをさらに含む、
請求項１３の方法。
【国際調査報告】
2019527424.tif 000009
2019527424.tif 000010