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