(58)【調査した分野】(Int.Cl.,DB名)
前記要求されたデータが前記固定応答時間内で使用可能である場合、前記モジュール・コントローラは、前記要求されたデータを含む前記戻りデータを前記ターゲット・メモリ・モジュールの前記固定応答時間で前記共用バスに送る
請求項8に記載のシステム。
前記要求されたデータが前記固定応答時間内で使用可能でない場合、前記モジュール・コントローラは、否定応答を含む前記戻りデータを前記ターゲット・メモリ・モジュールの前記固定応答時間で前記共用バスに送る
請求項8に記載のシステム。
前記メモリ・コントローラは、前記第1のスロット予約で前記ターゲット・メモリ・モジュールによって戻される前記戻りデータを前記対応する読取り要求と一致させるように構成される
請求項7に記載のシステム。
【発明を実施するための形態】
【0007】
例示実施形態は、メモリ・アクセスを実施するためのシステムおよび方法に関する。
本明細書で説明する様々な実施形態は、メモリ・コントローラと1つまたは複数のメモリ・モジュールとの間のパケットに基づくメモリ・インターフェースを提供する。
様々なデバイス管理およびメモリ・アクセスのタスクは、従来のマスタ/スレーブ・メモリ・システムにおけるようにメモリ・コントローラではなく、メモリ・モジュールによって実施される。
したがって、各メモリ・モジュールは、従来のマスタ/スレーブ・メモリ・アクセス・システムにおけるメモリ・モジュールと比較してより自律的であり得る。
メモリ操作中、メモリ・コントローラは、メモリ・モジュールに、要求されているメモリ・ブロックのアドレスおよび操作が読取りか書込みかの指示を送る。
一実施形態では、追加の制御情報は何ら用いられない。
読取り要求では、メモリ・モジュールは、要求されたデータを取得し、この要求されたデータを共用バスを介してメモリ・コントローラに送る。
メモリ・インターフェースは、メモリ・コントローラとメモリ・モジュールの間で単一点調停(アービトレーション; arbitration)を用い、これは、共用データ・バス上でデータを転送するための1つまたは複数のタイム・スロット予約として実施される。
メモリ・トランザクションに関連する操作は、このスロット予約を満足するちょうどよいタイミングで行われる。
メモリ・コントローラは、各読取り要求を指定されたタイム・スロット予約で受け取られる戻りデータと関連付けるように構成される。
メモリ・モジュールは、読取り応答が予約されたタイム・スロットでメモリ・コントローラに送られるように固定時間内で各読取り要求を実施する。
データが戻るスロットから時間的に戻って動作するので、すべての他のリソースは自動的にそのトランザクションに対して予約され、いかなる段階でもさらなるアービトレーションは用いられない。
本明細書で説明する技術は、複雑さおよび電力消費が低減された能率的なメモリ・アクセス・インターフェースを提供する。
さらに、以下でさらに説明するように、タイム・スロット予約方式は、メモリ・コントローラにおいてシステム状態が意図的に把握されないことにより生じる或る種の状況を扱うように構成され得る。
【0008】
図1は、実施形態によるメモリ・インターフェースの例のブロック図である。
このメモリ・インターフェースを参照番号100によって示す。
図1に示すように、メモリ・インターフェース100は、1つまたは複数のメモリ・モジュール104にメモリ・コントローラ106を介して動作可能に結合されるプロセッサ102を含み得る。
プロセッサ102は、頻繁にアクセスされるデータを格納する1つまたは複数のメモリ・キャッシュ108を含み得る。
実施形態では、メモリ・コントローラ106は、プロセッサ102と統合されることがあり、例えば、プロセッサ102と同じダイ上に作製されるか、または、プロセッサ102と同じチップパッケージ内に配置され得る。
実施形態では、メモリ・コントローラ106は、特定用途向け集積回路(ASIC)などの別の集積回路とし得る。
メモリ・コントローラ106は、メモリ・バス110を介してメモリ・モジュール104と結合され得る。
【0009】
メモリ・モジュール104は、デュアル・インライン・メモリ・モジュール(DIMM)とすることができ、ダイナミック・ランダム・アクセス・メモリ(DRAM)、シンクロナス・ダイナミック・ランダム・アクセス・メモリ(SDRAM)、フラッシュ・メモリなどのような任意の適切なタイプのランダム・アクセス・メモリを含み得る。
各メモリ・モジュール104は、複数のメモリ・バンク112を含み得る。
各メモリ・モジュール104は、メモリ読取り要求の受信と要求されたデータの提供の間のクロック・サイクル数を示す総メモリ待ち時間に関連し得る。
総メモリ待ち時間は、コマンド転送、非競合バンク・アクセス、オンチップ・ネットワーク・アクセス、およびデータの戻りに用いられるクロック・サイクル数に基づき得る。
総メモリ待ち時間は、シリアル・プレゼンス検出(SPD:Serial Presence Detect)などのメモリ・モジュール104の各々の制御レジスタに格納され得る。
異なるメモリ・モジュール104では異なり得る総メモリ待ち時間は、メモリ・コントローラ106に通信され得る。
例えば、システム起動時に、各メモリ・モジュール104の総メモリ待ち時間は、各メモリ・モジュールのシリアル・プレゼンス検出から読み取ることができ、メモリ・コントローラ106の1つまたは複数の制御レジスタに格納され得る。
【0010】
メモリ・バス110は、任意の数のビット幅とすることができ、メモリ・コントローラ106とメモリ・モジュール104の間でアドレス、データ、およびコマンドを通信するために用いられる。
メモリ・コントローラ106とメモリ・モジュール104は、メモリ・バス110を介して送信されるバス・パケットを介して通信する。
メモリ・バス110は、メモリ・コントローラ106からメモリ・モジュール104に読取り要求および書込み要求を送るために用いられる共用要求チャネルを含み得る。
読取り要求および書込み要求は、情報の中でもとりわけ、例えば、メモリ・アドレスおよび制御データを含み得る。
メモリ・バス110は、メモリ・モジュール104からメモリ・コントローラ106に応答情報を送り返すのに用いられる共用応答チャネルも含み得る。
この応答情報は、例えば、データの中でもとりわけ、要求されたデータまたは書込み肯定応答を含み得る。
一実施形態では、メモリ・バスは、メモリ読取り操作のための共用の要求チャネルおよび応答チャネル、ならびにメモリ書込み操作のための別の共用の要求チャネルおよび応答チャネルを含み得る。
【0011】
各メモリ・モジュール104は、それ自体のメモリ・バンク112に含まれるメモリを維持し、かつ、そのメモリにアクセスすることに関する様々なタスクを扱うモジュール・コントローラ114を含む。
従来のメモリ・システムと異なり、メモリ・モジュール104は、メモリ・コントローラ106に依存せずに、行の有効化、列の選択、ビット・ライン・プリチャージなどのような低レベル・メモリ・アクセス操作ごとに特定の要求を送出する。
その代わりに、モジュール・コントローラ114は、メモリ・アドレスを含む要求パケットを受け入れ、これらの低レベル・メモリ・アクセス操作を管理する。
モジュール・コントローラ114は、メモリ・リフレッシュや他のメモリ・メンテナンス機能、例えば、フラッシュ・メモリにおけるウェア・レベリングなどを実施するようにも構成され得る。
メモリ・リフレッシュおよびメモリ・アクセスに関係するタイミング制約を扱う論理回路は、メモリ・コントローラ106から取り除き得る。
【0012】
メモリ書込み操作を実施するために、メモリ・コントローラ106は、メモリ・バス110の要求チャネルを介して一群のメモリ・モジュール104に書込み要求パケットを送る。
この書込み要求パケットは、メモリ・アドレス、操作が書込みであることを示す制御情報、およびこのメモリ・アドレスに格納されるべきデータを含む。
書込み要求パケットは、アドレス・バスの幅およびデータ・バスの幅に応じて1つまたは複数のクロック・サイクルで一群のメモリ・モジュール104に送ることができる。
例えば、64ビット・アーキテクチャでは、メモリ・アドレスは専用のアドレス・バス上を2つのクロック・サイクルで送ることができ、データは8クロック・サイクルで送ることができる。
各メモリ・モジュール104は書込み要求パケットを復号し、この書込み操作に対応するターゲット・モジュール・コントローラ114が書込み要求を処理する。
アドレス指定されたデータ・ブロックが使用可能な場合、データは対応するメモリ・アドレスに書き込まれる。データが成功裏にメモリに書き込まれる場合、肯定応答(ACK)がメモリ・コントローラ106に戻される。
アドレス指定されたデータ・ブロックがビジーである場合、または他の理由で使用可能でない場合、ターゲット・モジュール・コントローラ114は否定応答(NACK)をメモリ・コントローラ106に送り返し得る。
一実施形態では、メモリ書込み操作を各メモリ・モジュール104にバッファすることができ、バッファが一杯になった場合にはメモリ・コントローラ106にNACKを送ることができる。
メモリ・コントローラ106が書込み要求に応答したNACKを受け取ると、メモリ・コントローラ106は、特定数のクロック・サイクルの間待機し、書込み要求パケットを再送し得る。
【0013】
メモリ読取り操作を実施するためには、メモリ・コントローラ106は、メモリ・バス110の読取り要求チャネルを介して一群のメモリ・モジュール104に読取り要求パケットを送る。
読取り要求パケットは、対応するメモリ・アドレスおよび読取り要求がメモリ読取り操作であることの指示を含む。
一群のメモリ・モジュール104はそれぞれ、読取り要求パケットを復号し、ターゲット・モジュール・コントローラ114が、読取り要求パケットによって示されるメモリ・アドレスから要求されたデータを取得することによって読取り要求を処理する。
次いで、ターゲット・モジュール・コントローラ114は、要求されたデータをデータ・パケットによりメモリ・バス110の共用応答チャネルを介してメモリ・コントローラ106に送る。
【0014】
典型的なメモリ編成では、メモリ・バンク112への各アクセスは、いくつかのキャッシュ・ラインを読み取り、その結果を行バッファに置く。
後続のアクセスが行バッファの内容に一致するアドレスを有する場合、これらのアクセスは、新たな読取りまたは書込みを行うよりも速く行われる。
このポリシーは、行バッファが最初の要求後も有効なデータを担持し続けるので、オープン・ページを呼ばれる。
オープン・ページ・ポリシーでは、メモリ・バンク112へのアクセス時間は、メモリ・アクセスが行バッファにおいてヒットするかどうかに応じて変化することになる。
このオープン・ページ・ポリシーは、アクセスの流れに強い局所性がある場合に有益である。
行バッファにおいてヒットしない場合、別のページを読み取る前に元のページを閉じる追加のステップが実施され、それによってアクセス時間が長くなる。そのため、ランダム・アクセスでは一般にオープン・ページ・ポリシーが有益でない。
クローズド・ページ・ポリシーでは、メモリ・アクセスが完了し、バンクが次の新たなアクセスの準備をした後でページが閉じられる。
一実施形態では、メモリ・インターフェース100はクローズド・ページ・ポリシーを用いる。
【0015】
2つ以上のメモリ・モジュールがバス110に同時にアクセスしようとするバス競合を避けるために、メモリ・コントローラ106は、各読取り要求または書込み要求を送る前に、アービトレーション手順を実施する。
このアービトレーション手順の間、メモリ・コントローラ106は、共用メモリ・バス110上の戻りデータを受け取るための1つまたは複数のタイム・スロットを予約する。
メモリ・バス110の応答チャネル上のあらゆる転送は、メモリ・コントローラ106による明示的な要求により生じる。
さらに、クローズド・ページ・メモリ編成では、オープン・ページ・メモリ編成と比較して、アクセス待ち時間はより確定的である。そのため、データ・バス上のタイム・スロットは、メモリ・コントローラ106によって、各メモリ・モジュール104によって指定される既知の総メモリ待ち時間に基づいて予約することができ、戻りデータが使用可能な場合にメモリ・バス110にアクセスするためのメモリ・モジュール104間のさらなるアービトレーションをなくすことができる。
さらに、メモリ・コントローラ106は、特定のタイム・スロットで戻されるデータを、予約されたタイム・スロットに対応する特定の読取り要求または書込み要求と関連付けるように構成される。
そのため、追加のタグを用いてメモリ・コントローラ106の読取り要求または書込み要求をメモリ・モジュール104の対応する戻りデータに相関させることが不要になり得る。
【0016】
場合によっては、時間内にメモリからデータが読み取られず、対応するタイム・スロット予約でメモリ・コントローラ106にデータが送られないことがある。
例えば、読取り要求が或るメモリ・バンク112を参照し、そのメモリ・バンク112がその時点で前の読取り要求の処理に関与している場合、バンク競合が生じ得る。
この場合、第1の読取り要求が完了するまで第2の読取り要求を開始することができない。
このような場合、メモリ・バンク112が使用可能でないことにより加算される追加の待ち時間により、第2の読取り要求に対する応答が対応するタイム・スロット予約に間に合わないことがある。
他のイベントでも、例えば、読取り要求が到来した時点でメモリ・バンク112が周期的なリフレッシュ操作に関与しているか、または低電力スリープ・モードになっている場合、読取り要求がそのタイム・スロット予約期限に間に合わないことが生じ得る。
メモリ・コントローラ106は、生じ得るバンク競合その他の遅延を予測し得る情報をもたない。
これは、メモリ・コントローラ106がバンクごとの状態の詳細を扱わないためである。
【0017】
要求されたデータが予約されたタイム・スロットで使用可能でない場合、ターゲット・モジュール・コントローラ114は、予約されたタイム・スロットでメモリ・コントローラ106にNACKを戻し得る。
一実施形態では、メモリ・コントローラ106は、指定されたタイム・スロットでNACKを受け取った場合、例えば指定時間遅延後に、読取り要求パケットを再送し得る。
一実施形態では、メモリ・コントローラ106が採用するスロット予約方式は、メモリ・モジュール104によって戻されるデータが、対応するタイム・スロット予約で時間内に戻されるようには使用可能でない場合を扱うように構成される。
例えば、メモリ・コントローラ106は、一群のメモリ・モジュール104に送られる読取り要求ごとに2つのタイム・スロットを予約し得る。
データが第1のタイム・スロット予約で使用可能でなかった場合には、第2のタイム・スロット予約が用いられ得る。このスロット予約方式は、
図2を参照してよりよく理解されよう。
【0018】
図2は、一実施形態による、スロットに基づくリソース割当てを示すタイミング図である。このタイミング図を参照番号200によって示す。
タイミング
図200は、共用データ・バス上のデータ・フローを表す一連のタイム・スロット202を示す。各タイム・スロット202は、メモリ・モジュール104(
図1)からメモリ・コントローラ106にデータを戻し得る1つまたは複数のクロック・サイクルに対応する。
各タイム・スロット202のクロック・サイクルを単位とする幅は、キャッシュ・ラインのサイズおよび応答チャネルの幅に基づいて決定し得る。
例えば、64バイトのキャッシュ・ラインおよび64ビットの応答チャネルでは、各読取り要求は、データ・バスが完全にパイプライン化されていると仮定して、4サイクルごとにデュアル・データ・レート送信で行われ得る。
空のボックスとして示される使われていないタイム・スロット204は、現時点で予約されていないタイム・スロット202を表す。
「X」付きのボックスとして示す使用中のタイム・スロット206は、前の読取り要求または書込み要求の結果、現時点で予約されているタイム・スロット202を表す。
【0019】
プロセッサ102(
図1)が発行する読取り要求は、メモリ・コントローラ106によってメンテナンスされる読取り要求キューに格納され得る。
このキューから得られる読取り要求を処理するために、メモリ・コントローラ106は、戻りデータを受け取るために用いられ得る1つまたは複数のタイム・スロット202に対してアービトレーションを行う。
この例では、2つのタイム・スロット202が予約される。ただし、1つ、2つ、3つ、またはそれ以上の数を含めて任意の適切な数のタイム・スロット202が予約され得ることを理解されたい。
使用可能なタイム・スロット202は、一群のメモリ・モジュール104に読取り要求を送る前に、識別され予約され得る。
【0020】
上記で論じたように、メモリ・コントローラ106は、各メモリ・モジュール104の総メモリ待ち時間に関する情報を受け取る。
実施形態では、各メモリ・モジュール104の総メモリ待ち時間を用いて、メモリ・モジュール104ごとに固定応答時間を求める。
メモリ・モジュール104ごとに指定される固定応答時間は、メモリ・モジュール104の総メモリ待ち時間以上となり得る。
メモリ・モジュール104ごとに求められる固定応答時間は、例えば、システム起動時に行われ得るタイミング構成段階中に、それぞれの対応するメモリ・モジュール104に通信して戻すことができ、制御レジスタに格納し得る。
一実施形態では、固定応答時間は、メモリ・モジュール104によって指定される総メモリ待ち時間と等しくし得る。
この場合、固定応答時間をメモリ・モジュールに通信して戻すことを省略することができ、メモリ・モジュール104によって指定される総メモリ待ち時間を固定応答時間として用い得る。
固定応答時間は、メモリ・モジュール104の総メモリ待ち時間以上であるクロック・サイクル数として表現され得る。
固定応答時間は、メモリ・コントローラ106によって用いることができ、それによって、メモリ・モジュール104から戻りデータを受け取るためのタイム・スロットが識別され予約され得る。
固定応答時間は、各メモリ・モジュール104によって用いることができ、それによって、特定の読取り要求に応答する時点が求められ得る。
図2に、固定応答時間を参照番号208によって示す。
【0021】
図2に示すように、読取り要求は、矢印210で示す時間ゼロにおいてキューから取得され得る。
使用可能なタイム・スロット202を識別するために、メモリ・コントローラ106は、キューから読取り要求が取得される時間ゼロから少なくとも1つの固定応答時間後の第1の使用可能なタイム・スロット202を識別する。
図2に示すように、矢印212で示す、時間ゼロから固定応答時間後のタイム・スロット202が予約される。
そのため、矢印214で示す次に使用可能なタイム・スロットが第1のスロット予約として選択される。
【0022】
さらに、第2の使用可能なタイム・スロットが、第1のスロット予約から少なくとも1つの固定応答時間後の第1の利用可能なタイム・スロット202として識別される。
矢印216で示される、第2のスロット予約として識別されたタイム・スロット202は使用されておらず、そのため、第2のスロット予約として用いられ得る。
このタイム・スロット202がすでに使用されている場合、次に使用可能なタイム・スロット202が第2のスロット予約として識別され、かつ、第1のスロット予約は同じ数のタイム・スロットだけ移動しているはずであり、そのため、第1のスロット予約と第2のスロット予約の間の距離が固定応答時間208に等しく保たれる。
さらに、第1のタイム・スロット予約と第2のタイム・スロット予約の時間間隔は固定応答時間208に等しいが、一実施形態では、第1のスロット予約と第2のスロット予約の時間間隔を任意の適切な間隔とすることができ、固定応答時間よりも長くても短くてもよいことを理解されたい。
第2のスロット予約は第1のスロット予約から総メモリ待ち時間1つ分よりも前に位置し得ることも理解されたい。
第1のタイム・スロット予約と第2のタイム・スロット予約の時間間隔が固定応答時間に等しくない場合、第2の固定応答時間を第2のスロット予約に対して指定することができ、タイミング構成段階の間にメモリ・モジュール104に通信し得る。
【0023】
戻りデータに用いられ得る2つの使用可能なタイム・スロット202を識別した後で、メモリ・コントローラ106は、これら識別されたタイム・スロットを予約し、それによってこれらのタイム・スロットが後続の読取り要求に用いられ得ないようにする。
矢印214で示す第1のタイム・スロット予約は、本明細書では「スロット1」と称し、矢印216で示す第2のタイム・スロット予約は、本明細書では「スロット2」と称することがある。
次いで、メモリ・コントローラ106は、第1のスロット予約および固定応答時間に基づいて求められたクロック・サイクルで読取り要求を一群のメモリ・モジュール104にメモリ・バス110を介して発行する。
例えば、読取り要求は、矢印214で示す第1のスロット予約の時間から固定応答時間208を減算することによって求められるクロック・サイクルで発行され得る。これにより、タイム・スロット予約の位置が、発行された読取り要求から既知の数のタイム・スロット後となり、戻りデータがスロット予約の時間で共用バスに到達することになる。
一実施形態では、(矢印214で示す)第1のスロット予約の時間および(矢印216で示す)第2のスロット予約の時間は、読取り要求パケットによってメモリ・モジュール104に通信されない。
【0024】
メモリ・コントローラ106は、スロット1 214およびスロット2 216を読取り要求と関連付け、それによって、これらのタイム・スロットでデータが戻されたときに、このデータがプロセッサ102の適切なキャッシュ・ラインに送られ得る。
この戻りデータは、要求されたデータ、言い換えれば、読取り要求によって識別されるメモリ・アドレスにおけるデータを含み得る。
ターゲット・メモリ・バンク112がビジーであるか、または、他の理由で対応するメモリ・モジュール104が要求されたデータをスロット1 214内で戻すことができない場合、メモリ・モジュール104によってスロット1 214内で戻される戻りデータは否定応答(NACK)を含み得る。次いで、要求されたデータはスロット2 216内で戻され得るが、ほとんどの状況では、この時点までにはこの要求されたデータが使用可能になる可能性が高い。
ほとんどの場合、要求されたデータはスロット1 214で戻されることになる。
【0025】
実施形態では、メモリ・コントローラ106は、要求されたデータがスロット1 214内で戻される場合、スロット2 216の予約が解除され、それによって後続の読取り要求に対してスロット2 216が使用可能になり得るように構成され得る。
こうすると、スロット2 216の予約がメモリ・インターフェース100の全体的な有効帯域幅に大きな影響を及ぼさないようになる。スロット2 216をスロット1 214から少なくとも総メモリ待ち時間1つ分だけ離して配置することによって、スロット2 216の予約を時間内で解除することができ、それによって後続の読取り要求に対してスロット2 216が使用可能になる。このようなスロット1 214とスロット2 216の時間間隔では、スロット2 216の戻りにいくらかの追加の待ち時間が生じ得るが、スロット2 216が無駄になる可能性が小さくなる。
【0026】
場合によっては、一連の長い読取り要求または書込み要求をすべて同じバンクに向けることがある。
この場合、メモリ・モジュール104は、要求されたデータをスロット1 214でもスロット2 216でも戻すことができないことがある。
これは、各メモリ・アクセスがバンク・アクセス時間に等しい時間だけ離れるからである。メモリ・モジュール104がスロット1 214でもスロット2 216でもデータを戻すことができない場合、スロット1 214およびスロット2 216の両方でNACKを戻すことができ、その後、メモリ・コントローラ106が読取り要求を再試行し得る。
一実施形態では、この読取り要求は、メモリ・コントローラ106によってメンテナンスされる読取り要求キューの最後に置かれる。
一実施形態では、メモリ・コントローラ106は、一定時間の間待機し、新たな組のタイム・スロット202のアービトレーションを行い、読取り要求を再発行し得る。このプロセスは、潜在的に、複数回繰り返すことができ、そのため、キューの占有、無駄なタイム・スロット202、およびアドレス再送信エネルギーの形でリソースが消費されるが、全体的な性能に何らかの大きな影響を及ぼすほど頻繁に起こらないと予想される。
【0027】
図3は、一実施形態による、メモリ読取り要求を処理する方法のプロセスフローチャートである。
この方法は、参照番号300で示され、
図1のメモリ・コントローラ106によって実施され得る。
この方法は、キューから読取り要求が受け取られるブロック302で開始され得る。
ブロック304で、メモリ・コントローラは、先に述べたように、使用可能なタイム・スロットを識別する。
この使用可能なタイム・スロットは、データを保持するメモリ・モジュールに対して指定される固定応答時間よりも後の最も近くにある未使用のタイム・スロットである。
【0028】
ブロック306で、メモリ・コントローラは、識別されたタイム・スロットを予約し、それによってこれらのタイム・スロットが後続の読取り要求に用いられ得ないようにする。
このようにタイム・スロットを予約すると、戻りデータが予約されたタイム・スロットで戻ることが予想されるサイクル中は他の読取り要求が発行され得ないことが保証される。
【0029】
ブロック308で、メモリ・コントローラは、メモリ・バス上に読取り要求パケットを発行する。ブロック304で使用可能なタイム・スロットが識別されることにより、読取り要求パケットが発行されるサイクルが決まる。
言い換えれば、読取り要求パケットは、戻りデータがブロック304で識別されたタイム・スロットで戻るサイクルで発行される。
第1の予約されたタイム・スロットは、ターゲット・メモリ・モジュールの固定応答時間によって示されるサイクルの数だけ発行サイクルよりも先にある。
第2の予約されたタイム・スロットは、第1の予約されたタイム・スロットよりもターゲット・メモリ・モジュールの固定応答時間によって示されるサイクルの数だけ先にある。
【0030】
ブロック310で、メモリ・コントローラによって第1の予約されたタイム・スロットでデータが受け取られる。
このデータは、要求されたデータであることもあるし、NACKなどのメモリ・モジュール104が要求されたデータを第1のタイム・スロットで戻せなかったことを示す指示であることもある。
【0031】
ブロック312で、第1の予約されたタイム・スロットでNACKが戻されたかどうかに関して判断がなされる。
NACKが第1の予約されたタイム・スロットで戻されなかった場合、プロセスフローは、ブロック314に進むことができ、そこで戻されたデータが処理される。
【0032】
ブロック314で、ブロック308で発行された読取り要求パケットに関連するプロセッサ・キャッシュ・ラインに要求されたデータを送ることによって戻りデータが処理される。
ブロック316で、第2の予約されたタイム・スロットの予約が解除され、それによってこのタイム・スロットが後続の読取り要求に対して使用可能になる。
次いで、プロセスフローはブロック318に進むことができ、プロセスが終了する。
【0033】
ブロック312で、第1の予約されたタイム・スロットでNACKが戻される場合、プロセスフローはブロック320に進み得る。
ブロック320で、第2のスロット予約されたタイム・スロットで戻りデータが受け取られる。
ブロック322で、第2の予約されたタイム・スロットでNACKが受け取られたかどうかに関して判断がなされる。
NACKが受け取られなかった場合、プロセスフローはブロック324に進み得る。ブロック324で、ブロック308で発行された読取り要求パケットに関連するプロセッサ・キャッシュ・ラインに要求されたデータを送ることによって戻りデータが処理される。
【0034】
ブロック322で、第2の予約されたタイム・スロットで第2のNACKが戻された場合、プロセスフローはブロック326に進むことができ、その後、例えば、このような場合に対してメモリ・コントローラ106によって指定される時間遅延後、読取り要求が再試行され得る。
次いで、プロセスフローはブロック304に戻ることができ、そこで、新たな組のタイム・スロットが新たな要求パケットに対して識別され得る。
【0035】
図4は、一実施形態による、メモリ・インターフェースを実施するためのコードを格納する非一時的コンピュータ可読媒体を示すブロック図である。
この非一時的コンピュータ可読媒体を、全体的に、参照番号400によって示す。非一時的コンピュータ可読媒体400は、プログラミング・コードなどのような、コンピュータにより実施される命令を格納する任意の典型的なストレージ・デバイスに対応し得る。
例えば、非一時的コンピュータ可読媒体400は、不揮発性メモリ、揮発性メモリ、および/または1つもしくは複数のストレージ・デバイスの1つまたは複数を含み得る。
不揮発性メモリの例には、電気的に消去可能なプログラマブル読出し専用メモリ(EEPROM)や読出し専用メモリ(ROM)が含まれるが、これらに限定されるものではない。
揮発性メモリの例には、スタティック・ランダム・アクセス・メモリ(SRAM)やダイナミック・ランダム・アクセス・メモリ(DRAM)が含まれるが、これらに限定されるものではない。ストレージ・デバイスの例には、ハード・ディスク・ドライブ、コンパクト・ディスク・ドライブ、デジタル多目的ディスク・ドライブ、光学ドライブ、およびフラッシュ・メモリ・デバイスが含まれるが、これらに限定されるものではない。
非一時的コンピュータ可読媒体400は、特定用途向け集積回路(ASIC)とすることもできる。
【0036】
図1に示すプロセッサ102または別のメモリ・コントローラ106とし得るプロセッサ402は、一般に、非一時的コンピュータ可読媒体400に格納される命令を取り出し実行して、本明細書で説明したメモリ・インターフェースの実施形態によるメモリ操作を処理する。
一実施形態では、有形の機械可読媒体400は、プロセッサ402によってコンピュータ・バス404を介してアクセスされ得る。
第1の領域406は、メモリ・モジュールの総メモリ待ち時間に少なくとも部分的に基づいてメモリ・モジュールの固定応答時間を求めるように構成されるタイミング構成モジュールを含み得る。
【0037】
第2の領域408は、読取り要求に対応する戻りデータを受け取るためのタイム・スロットを識別し予約するように構成されるアービトレータを含み得る。
このアービトレータは、読取り要求に対応する戻りデータを受け取るための使用可能なタイム・スロットを識別することができ、現時点のクロック・サイクルと使用可能なタイム・スロットの時間差が固定応答時間以上である。
次いで、アービトレータは、使用可能なタイム・スロットを予約することによって第1のスロット予約を生成する。
一実施形態では、アービトレータは、読取り要求に対応する戻りデータを受け取るための第2の使用可能なタイム・スロットも識別し、第2の使用可能なタイム・スロットを予約することによって第2のスロット予約も生成する。
第1のスロット予約と第2のスロット予約の時間間隔は固定応答時間に等しくし得る。
【0038】
第3の領域410は、メモリ・モジュールに読取り要求を発行するように構成されるメモリ・アクセス・インターフェースを含み得る。
この読取り要求は、第1のスロット予約の時間から固定応答時間を減算することによって求められるクロック・サイクルで発行され得る。
一実施形態では、これらスロット予約のいずれも読取り要求パケットによってメモリ・モジュールに通信されない。
メモリ・モジュールは固定応答時間で読取り要求に応答するように構成されるので、戻りデータは第1のスロット予約で共用バス上に到達することになる。
戻りデータは、読取り要求によって要求されるデータまたは固定応答時間によって指定される時間ではデータが使用可能でなかったことの指示を含み得る。
メモリ・アクセス・インターフェースは、第1のスロット予約で戻された戻りデータを対応する読取り要求に関連付ける。
さらに、第1のスロット予約で戻された戻りデータが読取り要求によって識別されるデータである場合、メモリ・アクセス・インターフェースは、第2のスロット予約を解除し得る。
【0039】
連続するブロックとして示したが、ソフトウェアの構成要素は任意の順序または構成で格納され得る。
例えば、非一時的コンピュータ可読媒体400がハード・ドライブである場合、ソフトウェアの構成要素は不連続セクタまたは重なり合うセクタにさえも格納され得る。