(57)【特許請求の範囲】
【請求項１】
共用バスによって接続された複数のメモリ・モジュールの各々の総メモリ待ち時間に少なくとも部分的に基づいて前記メモリ・モジュールの各々の固定応答時間を求めることと、
前記メモリ・モジュールへの読取り要求に対応する戻りデータを前記メモリ・モジュールのターゲット・メモリ・モジュールからデータ・バスを介して受け取るために使用可能なタイム・スロットであって、現時点のクロック・サイクルと前記使用可能なタイム・スロットとの時間差が前記ターゲット・メモリ・モジュールの固定応答時間より長いタイム・スロットを識別することと、
前記使用可能なタイム・スロットを予約することによって第１のスロット予約を生成することと、
前記データ・バスを介して前記メモリ・モジュールに、前記第１のスロット予約の時間から前記ターゲット・メモリ・モジュールの固定応答時間を減算することによって求められるクロック・サイクルで発行される前記読取り要求を発行することと
を含む方法。
【請求項２】
前記ターゲット・メモリ・モジュールは、前記固定応答時間に対応する期限で前記データ・バスに前記戻りデータを送るように構成される
請求項１に記載の方法。
【請求項３】
前記固定応答時間で前記戻りデータを受け取ることに基づいて、前記戻りデータを前記対応する読取り要求と一致させること
を含む請求項１に記載の方法。
【請求項４】
前記ターゲット・メモリ・モジュールから前記戻りデータを受け取るための前記第１のスロット予約は前記メモリ・モジュールに通信されない
請求項１に記載の方法。
【請求項５】
前記第１のスロット予約よりも時間的に後の第２の使用可能なタイム・スロットを識別し予約することによって前記第１のスロット予約に関連付けられた前記読取り要求と同一の読取り要求に関連付けられる第２のスロット予約を生成すること
を含み、
前記ターゲット・メモリ・モジュールが、前記読取り要求によって示される要求されたデータを、前記要求されたデータが前記第１のスロット予約に到達するための時間内で戻せない場合には、前記読取り要求に対応する第２の戻りデータが前記第２のスロット予約で受け取られる
請求項１に記載の方法。
【請求項６】
前記第１のスロット予約と前記第２のスロット予約との時間間隔は前記ターゲット・メモリ・モジュールの固定応答時間に等しい
請求項５に記載の方法。
【請求項７】
共用バスを介してメモリ・コントローラに動作可能に結合される一群のメモリ・モジュール
を備え、
前記メモリ・コントローラは、
前記メモリ・モジュールの各々の総メモリ待ち時間に少なくとも部分的に基づいて前記メモリ・モジュールの各々の固定応答時間を求めるように構成され、
前記メモリ・モジュールへの読取り要求に対応する戻りデータを前記メモリ・モジュールのターゲット・メモリ・モジュールから受け取るための使用可能なタイム・スロットであって、現時点のクロック・サイクルと前記使用可能なタイム・スロットの時間差が前記ターゲット・メモリ・モジュールの前記固定応答時間より長いタイム・スロットを識別することと、
前記使用可能なタイム・スロットを予約することによって第１のスロット予約を生成することと、
前記共用バスを介して読取り要求を発行することと
によって、前記一群のメモリ・モジュールのターゲット・メモリ・モジュールに読取り要求を発行するように構成される
システム。
【請求項８】
前記メモリ・モジュールのそれぞれは、
前記読取り要求によって指示されるメモリ・アドレスから要求されたデータを取得するように構成されるモジュール・コントローラ
を備える
請求項７に記載のシステム。
【請求項９】
前記要求されたデータが前記固定応答時間内で使用可能である場合、前記モジュール・コントローラは、前記要求されたデータを含む前記戻りデータを前記ターゲット・メモリ・モジュールの前記固定応答時間で前記共用バスに送る
請求項８に記載のシステム。
【請求項１０】
前記要求されたデータが前記固定応答時間内で使用可能でない場合、前記モジュール・コントローラは、否定応答を含む前記戻りデータを前記ターゲット・メモリ・モジュールの前記固定応答時間で前記共用バスに送る
請求項８に記載のシステム。
【請求項１１】
前記メモリ・コントローラは、前記第１のスロット予約で前記ターゲット・メモリ・モジュールによって戻される前記戻りデータを前記対応する読取り要求と一致させるように構成される
請求項７に記載のシステム。
【請求項１２】
前記メモリ・コントローラは、前記第1のスロット予約に関連付けられた前記読取り要求と同一の読取り要求に関連付けられる第２のスロット予約を生成するように構成され、前記第１のスロット予約と前記第２のスロット予約の時間間隔は前記ターゲット・メモリ・モジュールの固定応答時間に等しい
請求項７に記載のシステム。
【請求項１３】
共用バスによって接続された複数のメモリ・モジュールの各々の固定応答時間を前記メモリ・モジュールの各々の総メモリ待ち時間に少なくとも部分的に基づいて求めることと、
前記メモリ・モジュールへの読取り要求に対応する戻りデータを前記メモリ・モジュールのターゲット・メモリ・モジュールから受け取るための使用可能なタイム・スロットであって、現時点のクロック・サイクルと前記使用可能なタイム・スロットの時間差が前記ターゲット・メモリ・モジュールの固定応答時間より長いクロック・サイクルを識別することと、
前記使用可能なタイム・スロットを予約することによって第１のスロット予約を生成することと、
前記第１のスロット予約の時間から前記ターゲット・メモリ・モジュールの固定応答時間を減算することによって求められるクロック・サイクルで発行される前記読取り要求を前記メモリ・モジュールに発行することと
をプロセッサに指令するように構成されるコードを含む非一時的コンピュータ可読媒体。
【請求項１４】
前記第１のスロット予約で戻される前記戻りデータを前記読取り要求と関連付けるように前記プロセッサに指令するように構成されるコード
を含み、
前記第１のスロット予約は前記メモリ・モジュールに通信されない
請求項１３に記載の非一時的コンピュータ可読媒体。
【請求項１５】
前記読取り要求に対応する戻りデータを受け取るための第２の使用可能なタイム・スロットを識別することと、
前記第２の使用可能なタイム・スロットを予約することによって前記第1のスロット予約に関連付けられた前記読取り要求と同一の読取り要求に関連付けられる第２のスロット予約を生成することと
を前記プロセッサに指令するように構成されるコードを含む請求項１３に記載の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ・インターフェースに関する。
【背景技術】
【０００２】
従来のマスタ／スレーブ・メモリ・アーキテクチャにおいては、プロセッサは、メモリ・コントローラを介して主システム・メモリにアクセスし、このメモリ・コントローラは、各メモリ・トランザクションに関して重要な制御管理を提供する。
メモリ・トランザクションをスケジューリングするために、メモリ・コントローラは、アドレス／コマンド・バス、データ・バンクおよびデータ・バスのようなシステムの様々な構成要素の状態に関する大量の情報を特に管理する。
各メモリ読取りの間、メモリ・コントローラは、メモリ・モジュールに特定のコマンドを発行して、行の有効化、列の選択、ビット・ラインのプリチャージなど、この読取り操作のあらゆる側面を詳細に管理する。
これは、アドレス／コマンド・バスに性能面で負荷をかける。
メモリ・コントローラはまた、潜在的には数百もの独立したメモリ・バンクの多数の状態を追跡して競合のないアクセスを実現する。
適切な時点で、メモリ・コントローラはまた、例えばＤＲＡＭリフレッシュなどのメンテナンス・コマンドも発行することがある。
異質の成分からなるメモリ・システムにおいては、メモリ・コントローラは、異なるメモリ・モジュールに対して異なるメンテナンス要件を実施することがある。
さらに、メモリ・コントローラは、共用メモリ・バス上のデータ転送のためにメモリ・モジュール間のアービトレーションを実施する。
【０００３】
大型メモリ・システムの管理は極めて複雑であり、多数の状態を維持すること、および１つのトランザクションを完了するために注意深く協調することが必要とされることは明らかである。
このことはメモリ・コントローラの複雑さを大きく増加させる。
そのため、完全な集中制御を伴うメモリ・コントローラとメモリ・モジュールの間の現在のマスタ−スレーブ・インターフェースは拡張性がなく(not scalable)、将来のコンピュータ・システムに望ましい容量の増加およびより広い帯域の要求を満たすためには適していない。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は、上述した従来技術を改良することを目的とする。
【課題を解決するための手段】
【０００５】
本願発明にかかる方法は、メモリ・モジュールの総メモリ待ち時間に少なくとも部分的に基づいて固定応答時間を求めることと、戻りデータを前記メモリ・モジュールからデータ・バスを介して受け取るために使用可能なタイム・スロットであって、現時点のクロック・サイクルと前記使用可能なタイム・スロットとの時間差が前記固定応答時間より長いタイム・スロットを識別することと、前記使用可能なタイム・スロットを予約することによって第１のスロット予約を生成することと、前記データ・バスを介して前記メモリ・モジュールに、前記第１のスロット予約の時間から前記固定応答時間を減算することによって求められるクロック・サイクルで発行される読取り要求を発行することとを含む。
【図面の簡単な説明】
【０００６】
以下の詳細な記載において図面を参照して、いくつかの実施形態を説明する。
【図１】一実施形態によるメモリ・インターフェースのブロック図である。
【図２】一実施形態による、スロットに基づくリソース割当てを示すタイミング図である。
【図３】一実施形態による、メモリ読取り要求を処理する方法のプロセスフローチャートである。
【図４】一実施形態による、メモリ・インターフェースを実施するためのコードを格納する非一時的コンピュータ可読媒体を示すブロック図である。
【発明を実施するための形態】
【０００７】
例示実施形態は、メモリ・アクセスを実施するためのシステムおよび方法に関する。
本明細書で説明する様々な実施形態は、メモリ・コントローラと１つまたは複数のメモリ・モジュールとの間のパケットに基づくメモリ・インターフェースを提供する。
様々なデバイス管理およびメモリ・アクセスのタスクは、従来のマスタ／スレーブ・メモリ・システムにおけるようにメモリ・コントローラではなく、メモリ・モジュールによって実施される。
したがって、各メモリ・モジュールは、従来のマスタ／スレーブ・メモリ・アクセス・システムにおけるメモリ・モジュールと比較してより自律的であり得る。
メモリ操作中、メモリ・コントローラは、メモリ・モジュールに、要求されているメモリ・ブロックのアドレスおよび操作が読取りか書込みかの指示を送る。
一実施形態では、追加の制御情報は何ら用いられない。
読取り要求では、メモリ・モジュールは、要求されたデータを取得し、この要求されたデータを共用バスを介してメモリ・コントローラに送る。
メモリ・インターフェースは、メモリ・コントローラとメモリ・モジュールの間で単一点調停（アービトレーション; arbitration）を用い、これは、共用データ・バス上でデータを転送するための１つまたは複数のタイム・スロット予約として実施される。
メモリ・トランザクションに関連する操作は、このスロット予約を満足するちょうどよいタイミングで行われる。
メモリ・コントローラは、各読取り要求を指定されたタイム・スロット予約で受け取られる戻りデータと関連付けるように構成される。
メモリ・モジュールは、読取り応答が予約されたタイム・スロットでメモリ・コントローラに送られるように固定時間内で各読取り要求を実施する。
データが戻るスロットから時間的に戻って動作するので、すべての他のリソースは自動的にそのトランザクションに対して予約され、いかなる段階でもさらなるアービトレーションは用いられない。
本明細書で説明する技術は、複雑さおよび電力消費が低減された能率的なメモリ・アクセス・インターフェースを提供する。
さらに、以下でさらに説明するように、タイム・スロット予約方式は、メモリ・コントローラにおいてシステム状態が意図的に把握されないことにより生じる或る種の状況を扱うように構成され得る。
【０００８】
図１は、実施形態によるメモリ・インターフェースの例のブロック図である。
このメモリ・インターフェースを参照番号１００によって示す。
図１に示すように、メモリ・インターフェース１００は、１つまたは複数のメモリ・モジュール１０４にメモリ・コントローラ１０６を介して動作可能に結合されるプロセッサ１０２を含み得る。
プロセッサ１０２は、頻繁にアクセスされるデータを格納する１つまたは複数のメモリ・キャッシュ１０８を含み得る。
実施形態では、メモリ・コントローラ１０６は、プロセッサ１０２と統合されることがあり、例えば、プロセッサ１０２と同じダイ上に作製されるか、または、プロセッサ１０２と同じチップパッケージ内に配置され得る。
実施形態では、メモリ・コントローラ１０６は、特定用途向け集積回路（ＡＳＩＣ）などの別の集積回路とし得る。
メモリ・コントローラ１０６は、メモリ・バス１１０を介してメモリ・モジュール１０４と結合され得る。
【０００９】
メモリ・モジュール１０４は、デュアル・インライン・メモリ・モジュール（ＤＩＭＭ）とすることができ、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、シンクロナス・ダイナミック・ランダム・アクセス・メモリ（ＳＤＲＡＭ）、フラッシュ・メモリなどのような任意の適切なタイプのランダム・アクセス・メモリを含み得る。
各メモリ・モジュール１０４は、複数のメモリ・バンク１１２を含み得る。
各メモリ・モジュール１０４は、メモリ読取り要求の受信と要求されたデータの提供の間のクロック・サイクル数を示す総メモリ待ち時間に関連し得る。
総メモリ待ち時間は、コマンド転送、非競合バンク・アクセス、オンチップ・ネットワーク・アクセス、およびデータの戻りに用いられるクロック・サイクル数に基づき得る。
総メモリ待ち時間は、シリアル・プレゼンス検出（ＳＰＤ：Ｓｅｒｉａｌ  Ｐｒｅｓｅｎｃｅ  Ｄｅｔｅｃｔ）などのメモリ・モジュール１０４の各々の制御レジスタに格納され得る。
異なるメモリ・モジュール１０４では異なり得る総メモリ待ち時間は、メモリ・コントローラ１０６に通信され得る。
例えば、システム起動時に、各メモリ・モジュール１０４の総メモリ待ち時間は、各メモリ・モジュールのシリアル・プレゼンス検出から読み取ることができ、メモリ・コントローラ１０６の１つまたは複数の制御レジスタに格納され得る。
【００１０】
メモリ・バス１１０は、任意の数のビット幅とすることができ、メモリ・コントローラ１０６とメモリ・モジュール１０４の間でアドレス、データ、およびコマンドを通信するために用いられる。
メモリ・コントローラ１０６とメモリ・モジュール１０４は、メモリ・バス１１０を介して送信されるバス・パケットを介して通信する。
メモリ・バス１１０は、メモリ・コントローラ１０６からメモリ・モジュール１０４に読取り要求および書込み要求を送るために用いられる共用要求チャネルを含み得る。
読取り要求および書込み要求は、情報の中でもとりわけ、例えば、メモリ・アドレスおよび制御データを含み得る。
メモリ・バス１１０は、メモリ・モジュール１０４からメモリ・コントローラ１０６に応答情報を送り返すのに用いられる共用応答チャネルも含み得る。
この応答情報は、例えば、データの中でもとりわけ、要求されたデータまたは書込み肯定応答を含み得る。
一実施形態では、メモリ・バスは、メモリ読取り操作のための共用の要求チャネルおよび応答チャネル、ならびにメモリ書込み操作のための別の共用の要求チャネルおよび応答チャネルを含み得る。
【００１１】
各メモリ・モジュール１０４は、それ自体のメモリ・バンク１１２に含まれるメモリを維持し、かつ、そのメモリにアクセスすることに関する様々なタスクを扱うモジュール・コントローラ１１４を含む。
従来のメモリ・システムと異なり、メモリ・モジュール１０４は、メモリ・コントローラ１０６に依存せずに、行の有効化、列の選択、ビット・ライン・プリチャージなどのような低レベル・メモリ・アクセス操作ごとに特定の要求を送出する。
その代わりに、モジュール・コントローラ１１４は、メモリ・アドレスを含む要求パケットを受け入れ、これらの低レベル・メモリ・アクセス操作を管理する。
モジュール・コントローラ１１４は、メモリ・リフレッシュや他のメモリ・メンテナンス機能、例えば、フラッシュ・メモリにおけるウェア・レベリングなどを実施するようにも構成され得る。
メモリ・リフレッシュおよびメモリ・アクセスに関係するタイミング制約を扱う論理回路は、メモリ・コントローラ１０６から取り除き得る。
【００１２】
メモリ書込み操作を実施するために、メモリ・コントローラ１０６は、メモリ・バス１１０の要求チャネルを介して一群のメモリ・モジュール１０４に書込み要求パケットを送る。
この書込み要求パケットは、メモリ・アドレス、操作が書込みであることを示す制御情報、およびこのメモリ・アドレスに格納されるべきデータを含む。
書込み要求パケットは、アドレス・バスの幅およびデータ・バスの幅に応じて１つまたは複数のクロック・サイクルで一群のメモリ・モジュール１０４に送ることができる。
例えば、６４ビット・アーキテクチャでは、メモリ・アドレスは専用のアドレス・バス上を２つのクロック・サイクルで送ることができ、データは８クロック・サイクルで送ることができる。
各メモリ・モジュール１０４は書込み要求パケットを復号し、この書込み操作に対応するターゲット・モジュール・コントローラ１１４が書込み要求を処理する。
アドレス指定されたデータ・ブロックが使用可能な場合、データは対応するメモリ・アドレスに書き込まれる。データが成功裏にメモリに書き込まれる場合、肯定応答（ＡＣＫ）がメモリ・コントローラ１０６に戻される。
アドレス指定されたデータ・ブロックがビジーである場合、または他の理由で使用可能でない場合、ターゲット・モジュール・コントローラ１１４は否定応答（ＮＡＣＫ）をメモリ・コントローラ１０６に送り返し得る。
一実施形態では、メモリ書込み操作を各メモリ・モジュール１０４にバッファすることができ、バッファが一杯になった場合にはメモリ・コントローラ１０６にＮＡＣＫを送ることができる。
メモリ・コントローラ１０６が書込み要求に応答したＮＡＣＫを受け取ると、メモリ・コントローラ１０６は、特定数のクロック・サイクルの間待機し、書込み要求パケットを再送し得る。
【００１３】
メモリ読取り操作を実施するためには、メモリ・コントローラ１０６は、メモリ・バス１１０の読取り要求チャネルを介して一群のメモリ・モジュール１０４に読取り要求パケットを送る。
読取り要求パケットは、対応するメモリ・アドレスおよび読取り要求がメモリ読取り操作であることの指示を含む。
一群のメモリ・モジュール１０４はそれぞれ、読取り要求パケットを復号し、ターゲット・モジュール・コントローラ１１４が、読取り要求パケットによって示されるメモリ・アドレスから要求されたデータを取得することによって読取り要求を処理する。
次いで、ターゲット・モジュール・コントローラ１１４は、要求されたデータをデータ・パケットによりメモリ・バス１１０の共用応答チャネルを介してメモリ・コントローラ１０６に送る。
【００１４】
典型的なメモリ編成では、メモリ・バンク１１２への各アクセスは、いくつかのキャッシュ・ラインを読み取り、その結果を行バッファに置く。
後続のアクセスが行バッファの内容に一致するアドレスを有する場合、これらのアクセスは、新たな読取りまたは書込みを行うよりも速く行われる。
このポリシーは、行バッファが最初の要求後も有効なデータを担持し続けるので、オープン・ページを呼ばれる。
オープン・ページ・ポリシーでは、メモリ・バンク１１２へのアクセス時間は、メモリ・アクセスが行バッファにおいてヒットするかどうかに応じて変化することになる。
このオープン・ページ・ポリシーは、アクセスの流れに強い局所性がある場合に有益である。
行バッファにおいてヒットしない場合、別のページを読み取る前に元のページを閉じる追加のステップが実施され、それによってアクセス時間が長くなる。そのため、ランダム・アクセスでは一般にオープン・ページ・ポリシーが有益でない。
クローズド・ページ・ポリシーでは、メモリ・アクセスが完了し、バンクが次の新たなアクセスの準備をした後でページが閉じられる。
一実施形態では、メモリ・インターフェース１００はクローズド・ページ・ポリシーを用いる。
【００１５】
２つ以上のメモリ・モジュールがバス１１０に同時にアクセスしようとするバス競合を避けるために、メモリ・コントローラ１０６は、各読取り要求または書込み要求を送る前に、アービトレーション手順を実施する。
このアービトレーション手順の間、メモリ・コントローラ１０６は、共用メモリ・バス１１０上の戻りデータを受け取るための１つまたは複数のタイム・スロットを予約する。
メモリ・バス１１０の応答チャネル上のあらゆる転送は、メモリ・コントローラ１０６による明示的な要求により生じる。
さらに、クローズド・ページ・メモリ編成では、オープン・ページ・メモリ編成と比較して、アクセス待ち時間はより確定的である。そのため、データ・バス上のタイム・スロットは、メモリ・コントローラ１０６によって、各メモリ・モジュール１０４によって指定される既知の総メモリ待ち時間に基づいて予約することができ、戻りデータが使用可能な場合にメモリ・バス１１０にアクセスするためのメモリ・モジュール１０４間のさらなるアービトレーションをなくすことができる。
さらに、メモリ・コントローラ１０６は、特定のタイム・スロットで戻されるデータを、予約されたタイム・スロットに対応する特定の読取り要求または書込み要求と関連付けるように構成される。
そのため、追加のタグを用いてメモリ・コントローラ１０６の読取り要求または書込み要求をメモリ・モジュール１０４の対応する戻りデータに相関させることが不要になり得る。
【００１６】
場合によっては、時間内にメモリからデータが読み取られず、対応するタイム・スロット予約でメモリ・コントローラ１０６にデータが送られないことがある。
例えば、読取り要求が或るメモリ・バンク１１２を参照し、そのメモリ・バンク１１２がその時点で前の読取り要求の処理に関与している場合、バンク競合が生じ得る。
この場合、第１の読取り要求が完了するまで第２の読取り要求を開始することができない。
このような場合、メモリ・バンク１１２が使用可能でないことにより加算される追加の待ち時間により、第２の読取り要求に対する応答が対応するタイム・スロット予約に間に合わないことがある。
他のイベントでも、例えば、読取り要求が到来した時点でメモリ・バンク１１２が周期的なリフレッシュ操作に関与しているか、または低電力スリープ・モードになっている場合、読取り要求がそのタイム・スロット予約期限に間に合わないことが生じ得る。
メモリ・コントローラ１０６は、生じ得るバンク競合その他の遅延を予測し得る情報をもたない。
これは、メモリ・コントローラ１０６がバンクごとの状態の詳細を扱わないためである。
【００１７】
要求されたデータが予約されたタイム・スロットで使用可能でない場合、ターゲット・モジュール・コントローラ１１４は、予約されたタイム・スロットでメモリ・コントローラ１０６にＮＡＣＫを戻し得る。
一実施形態では、メモリ・コントローラ１０６は、指定されたタイム・スロットでＮＡＣＫを受け取った場合、例えば指定時間遅延後に、読取り要求パケットを再送し得る。
一実施形態では、メモリ・コントローラ１０６が採用するスロット予約方式は、メモリ・モジュール１０４によって戻されるデータが、対応するタイム・スロット予約で時間内に戻されるようには使用可能でない場合を扱うように構成される。
例えば、メモリ・コントローラ１０６は、一群のメモリ・モジュール１０４に送られる読取り要求ごとに２つのタイム・スロットを予約し得る。
データが第１のタイム・スロット予約で使用可能でなかった場合には、第２のタイム・スロット予約が用いられ得る。このスロット予約方式は、図２を参照してよりよく理解されよう。
【００１８】
図２は、一実施形態による、スロットに基づくリソース割当てを示すタイミング図である。このタイミング図を参照番号２００によって示す。
タイミング図２００は、共用データ・バス上のデータ・フローを表す一連のタイム・スロット２０２を示す。各タイム・スロット２０２は、メモリ・モジュール１０４（図１）からメモリ・コントローラ１０６にデータを戻し得る１つまたは複数のクロック・サイクルに対応する。
各タイム・スロット２０２のクロック・サイクルを単位とする幅は、キャッシュ・ラインのサイズおよび応答チャネルの幅に基づいて決定し得る。
例えば、６４バイトのキャッシュ・ラインおよび６４ビットの応答チャネルでは、各読取り要求は、データ・バスが完全にパイプライン化されていると仮定して、４サイクルごとにデュアル・データ・レート送信で行われ得る。
空のボックスとして示される使われていないタイム・スロット２０４は、現時点で予約されていないタイム・スロット２０２を表す。
「Ｘ」付きのボックスとして示す使用中のタイム・スロット２０６は、前の読取り要求または書込み要求の結果、現時点で予約されているタイム・スロット２０２を表す。
【００１９】
プロセッサ１０２（図１）が発行する読取り要求は、メモリ・コントローラ１０６によってメンテナンスされる読取り要求キューに格納され得る。
このキューから得られる読取り要求を処理するために、メモリ・コントローラ１０６は、戻りデータを受け取るために用いられ得る１つまたは複数のタイム・スロット２０２に対してアービトレーションを行う。
この例では、２つのタイム・スロット２０２が予約される。ただし、１つ、２つ、３つ、またはそれ以上の数を含めて任意の適切な数のタイム・スロット２０２が予約され得ることを理解されたい。
使用可能なタイム・スロット２０２は、一群のメモリ・モジュール１０４に読取り要求を送る前に、識別され予約され得る。
【００２０】
上記で論じたように、メモリ・コントローラ１０６は、各メモリ・モジュール１０４の総メモリ待ち時間に関する情報を受け取る。
実施形態では、各メモリ・モジュール１０４の総メモリ待ち時間を用いて、メモリ・モジュール１０４ごとに固定応答時間を求める。
メモリ・モジュール１０４ごとに指定される固定応答時間は、メモリ・モジュール１０４の総メモリ待ち時間以上となり得る。
メモリ・モジュール１０４ごとに求められる固定応答時間は、例えば、システム起動時に行われ得るタイミング構成段階中に、それぞれの対応するメモリ・モジュール１０４に通信して戻すことができ、制御レジスタに格納し得る。
一実施形態では、固定応答時間は、メモリ・モジュール１０４によって指定される総メモリ待ち時間と等しくし得る。
この場合、固定応答時間をメモリ・モジュールに通信して戻すことを省略することができ、メモリ・モジュール１０４によって指定される総メモリ待ち時間を固定応答時間として用い得る。
固定応答時間は、メモリ・モジュール１０４の総メモリ待ち時間以上であるクロック・サイクル数として表現され得る。
固定応答時間は、メモリ・コントローラ１０６によって用いることができ、それによって、メモリ・モジュール１０４から戻りデータを受け取るためのタイム・スロットが識別され予約され得る。
固定応答時間は、各メモリ・モジュール１０４によって用いることができ、それによって、特定の読取り要求に応答する時点が求められ得る。
図２に、固定応答時間を参照番号２０８によって示す。
【００２１】
図２に示すように、読取り要求は、矢印２１０で示す時間ゼロにおいてキューから取得され得る。
使用可能なタイム・スロット２０２を識別するために、メモリ・コントローラ１０６は、キューから読取り要求が取得される時間ゼロから少なくとも１つの固定応答時間後の第１の使用可能なタイム・スロット２０２を識別する。
図２に示すように、矢印２１２で示す、時間ゼロから固定応答時間後のタイム・スロット２０２が予約される。
そのため、矢印２１４で示す次に使用可能なタイム・スロットが第１のスロット予約として選択される。
【００２２】
さらに、第２の使用可能なタイム・スロットが、第１のスロット予約から少なくとも１つの固定応答時間後の第１の利用可能なタイム・スロット２０２として識別される。
矢印２１６で示される、第２のスロット予約として識別されたタイム・スロット２０２は使用されておらず、そのため、第２のスロット予約として用いられ得る。
このタイム・スロット２０２がすでに使用されている場合、次に使用可能なタイム・スロット２０２が第２のスロット予約として識別され、かつ、第１のスロット予約は同じ数のタイム・スロットだけ移動しているはずであり、そのため、第１のスロット予約と第２のスロット予約の間の距離が固定応答時間２０８に等しく保たれる。
さらに、第１のタイム・スロット予約と第２のタイム・スロット予約の時間間隔は固定応答時間２０８に等しいが、一実施形態では、第１のスロット予約と第２のスロット予約の時間間隔を任意の適切な間隔とすることができ、固定応答時間よりも長くても短くてもよいことを理解されたい。
第２のスロット予約は第１のスロット予約から総メモリ待ち時間１つ分よりも前に位置し得ることも理解されたい。
第１のタイム・スロット予約と第２のタイム・スロット予約の時間間隔が固定応答時間に等しくない場合、第２の固定応答時間を第２のスロット予約に対して指定することができ、タイミング構成段階の間にメモリ・モジュール１０４に通信し得る。
【００２３】
戻りデータに用いられ得る２つの使用可能なタイム・スロット２０２を識別した後で、メモリ・コントローラ１０６は、これら識別されたタイム・スロットを予約し、それによってこれらのタイム・スロットが後続の読取り要求に用いられ得ないようにする。
矢印２１４で示す第１のタイム・スロット予約は、本明細書では「スロット１」と称し、矢印２１６で示す第２のタイム・スロット予約は、本明細書では「スロット２」と称することがある。
次いで、メモリ・コントローラ１０６は、第１のスロット予約および固定応答時間に基づいて求められたクロック・サイクルで読取り要求を一群のメモリ・モジュール１０４にメモリ・バス１１０を介して発行する。
例えば、読取り要求は、矢印２１４で示す第１のスロット予約の時間から固定応答時間２０８を減算することによって求められるクロック・サイクルで発行され得る。これにより、タイム・スロット予約の位置が、発行された読取り要求から既知の数のタイム・スロット後となり、戻りデータがスロット予約の時間で共用バスに到達することになる。
一実施形態では、（矢印２１４で示す）第１のスロット予約の時間および（矢印２１６で示す）第２のスロット予約の時間は、読取り要求パケットによってメモリ・モジュール１０４に通信されない。
【００２４】
メモリ・コントローラ１０６は、スロット１  ２１４およびスロット２  ２１６を読取り要求と関連付け、それによって、これらのタイム・スロットでデータが戻されたときに、このデータがプロセッサ１０２の適切なキャッシュ・ラインに送られ得る。
この戻りデータは、要求されたデータ、言い換えれば、読取り要求によって識別されるメモリ・アドレスにおけるデータを含み得る。
ターゲット・メモリ・バンク１１２がビジーであるか、または、他の理由で対応するメモリ・モジュール１０４が要求されたデータをスロット１  ２１４内で戻すことができない場合、メモリ・モジュール１０４によってスロット１  ２１４内で戻される戻りデータは否定応答（ＮＡＣＫ）を含み得る。次いで、要求されたデータはスロット２  ２１６内で戻され得るが、ほとんどの状況では、この時点までにはこの要求されたデータが使用可能になる可能性が高い。
ほとんどの場合、要求されたデータはスロット１  ２１４で戻されることになる。
【００２５】
実施形態では、メモリ・コントローラ１０６は、要求されたデータがスロット１  ２１４内で戻される場合、スロット２  ２１６の予約が解除され、それによって後続の読取り要求に対してスロット２  ２１６が使用可能になり得るように構成され得る。
こうすると、スロット２  ２１６の予約がメモリ・インターフェース１００の全体的な有効帯域幅に大きな影響を及ぼさないようになる。スロット２  ２１６をスロット１  ２１４から少なくとも総メモリ待ち時間１つ分だけ離して配置することによって、スロット２  ２１６の予約を時間内で解除することができ、それによって後続の読取り要求に対してスロット２  ２１６が使用可能になる。このようなスロット１  ２１４とスロット２  ２１６の時間間隔では、スロット２  ２１６の戻りにいくらかの追加の待ち時間が生じ得るが、スロット２  ２１６が無駄になる可能性が小さくなる。
【００２６】
場合によっては、一連の長い読取り要求または書込み要求をすべて同じバンクに向けることがある。
この場合、メモリ・モジュール１０４は、要求されたデータをスロット１  ２１４でもスロット２  ２１６でも戻すことができないことがある。
これは、各メモリ・アクセスがバンク・アクセス時間に等しい時間だけ離れるからである。メモリ・モジュール１０４がスロット１  ２１４でもスロット２  ２１６でもデータを戻すことができない場合、スロット１  ２１４およびスロット２  ２１６の両方でＮＡＣＫを戻すことができ、その後、メモリ・コントローラ１０６が読取り要求を再試行し得る。
一実施形態では、この読取り要求は、メモリ・コントローラ１０６によってメンテナンスされる読取り要求キューの最後に置かれる。
一実施形態では、メモリ・コントローラ１０６は、一定時間の間待機し、新たな組のタイム・スロット２０２のアービトレーションを行い、読取り要求を再発行し得る。このプロセスは、潜在的に、複数回繰り返すことができ、そのため、キューの占有、無駄なタイム・スロット２０２、およびアドレス再送信エネルギーの形でリソースが消費されるが、全体的な性能に何らかの大きな影響を及ぼすほど頻繁に起こらないと予想される。
【００２７】
図３は、一実施形態による、メモリ読取り要求を処理する方法のプロセスフローチャートである。
この方法は、参照番号３００で示され、図１のメモリ・コントローラ１０６によって実施され得る。
この方法は、キューから読取り要求が受け取られるブロック３０２で開始され得る。
ブロック３０４で、メモリ・コントローラは、先に述べたように、使用可能なタイム・スロットを識別する。
この使用可能なタイム・スロットは、データを保持するメモリ・モジュールに対して指定される固定応答時間よりも後の最も近くにある未使用のタイム・スロットである。
【００２８】
ブロック３０６で、メモリ・コントローラは、識別されたタイム・スロットを予約し、それによってこれらのタイム・スロットが後続の読取り要求に用いられ得ないようにする。
このようにタイム・スロットを予約すると、戻りデータが予約されたタイム・スロットで戻ることが予想されるサイクル中は他の読取り要求が発行され得ないことが保証される。
【００２９】
ブロック３０８で、メモリ・コントローラは、メモリ・バス上に読取り要求パケットを発行する。ブロック３０４で使用可能なタイム・スロットが識別されることにより、読取り要求パケットが発行されるサイクルが決まる。
言い換えれば、読取り要求パケットは、戻りデータがブロック３０４で識別されたタイム・スロットで戻るサイクルで発行される。
第１の予約されたタイム・スロットは、ターゲット・メモリ・モジュールの固定応答時間によって示されるサイクルの数だけ発行サイクルよりも先にある。
第２の予約されたタイム・スロットは、第１の予約されたタイム・スロットよりもターゲット・メモリ・モジュールの固定応答時間によって示されるサイクルの数だけ先にある。
【００３０】
ブロック３１０で、メモリ・コントローラによって第１の予約されたタイム・スロットでデータが受け取られる。
このデータは、要求されたデータであることもあるし、ＮＡＣＫなどのメモリ・モジュール１０４が要求されたデータを第１のタイム・スロットで戻せなかったことを示す指示であることもある。
【００３１】
ブロック３１２で、第１の予約されたタイム・スロットでＮＡＣＫが戻されたかどうかに関して判断がなされる。
ＮＡＣＫが第１の予約されたタイム・スロットで戻されなかった場合、プロセスフローは、ブロック３１４に進むことができ、そこで戻されたデータが処理される。
【００３２】
ブロック３１４で、ブロック３０８で発行された読取り要求パケットに関連するプロセッサ・キャッシュ・ラインに要求されたデータを送ることによって戻りデータが処理される。
ブロック３１６で、第２の予約されたタイム・スロットの予約が解除され、それによってこのタイム・スロットが後続の読取り要求に対して使用可能になる。
次いで、プロセスフローはブロック３１８に進むことができ、プロセスが終了する。
【００３３】
ブロック３１２で、第１の予約されたタイム・スロットでＮＡＣＫが戻される場合、プロセスフローはブロック３２０に進み得る。
ブロック３２０で、第２のスロット予約されたタイム・スロットで戻りデータが受け取られる。
ブロック３２２で、第２の予約されたタイム・スロットでＮＡＣＫが受け取られたかどうかに関して判断がなされる。
ＮＡＣＫが受け取られなかった場合、プロセスフローはブロック３２４に進み得る。ブロック３２４で、ブロック３０８で発行された読取り要求パケットに関連するプロセッサ・キャッシュ・ラインに要求されたデータを送ることによって戻りデータが処理される。
【００３４】
ブロック３２２で、第２の予約されたタイム・スロットで第２のＮＡＣＫが戻された場合、プロセスフローはブロック３２６に進むことができ、その後、例えば、このような場合に対してメモリ・コントローラ１０６によって指定される時間遅延後、読取り要求が再試行され得る。
次いで、プロセスフローはブロック３０４に戻ることができ、そこで、新たな組のタイム・スロットが新たな要求パケットに対して識別され得る。
【００３５】
図４は、一実施形態による、メモリ・インターフェースを実施するためのコードを格納する非一時的コンピュータ可読媒体を示すブロック図である。
この非一時的コンピュータ可読媒体を、全体的に、参照番号４００によって示す。非一時的コンピュータ可読媒体４００は、プログラミング・コードなどのような、コンピュータにより実施される命令を格納する任意の典型的なストレージ・デバイスに対応し得る。
例えば、非一時的コンピュータ可読媒体４００は、不揮発性メモリ、揮発性メモリ、および／または１つもしくは複数のストレージ・デバイスの１つまたは複数を含み得る。
不揮発性メモリの例には、電気的に消去可能なプログラマブル読出し専用メモリ（ＥＥＰＲＯＭ）や読出し専用メモリ（ＲＯＭ）が含まれるが、これらに限定されるものではない。
揮発性メモリの例には、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）やダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）が含まれるが、これらに限定されるものではない。ストレージ・デバイスの例には、ハード・ディスク・ドライブ、コンパクト・ディスク・ドライブ、デジタル多目的ディスク・ドライブ、光学ドライブ、およびフラッシュ・メモリ・デバイスが含まれるが、これらに限定されるものではない。
非一時的コンピュータ可読媒体４００は、特定用途向け集積回路（ＡＳＩＣ）とすることもできる。
【００３６】
図１に示すプロセッサ１０２または別のメモリ・コントローラ１０６とし得るプロセッサ４０２は、一般に、非一時的コンピュータ可読媒体４００に格納される命令を取り出し実行して、本明細書で説明したメモリ・インターフェースの実施形態によるメモリ操作を処理する。
一実施形態では、有形の機械可読媒体４００は、プロセッサ４０２によってコンピュータ・バス４０４を介してアクセスされ得る。
第１の領域４０６は、メモリ・モジュールの総メモリ待ち時間に少なくとも部分的に基づいてメモリ・モジュールの固定応答時間を求めるように構成されるタイミング構成モジュールを含み得る。
【００３７】
第２の領域４０８は、読取り要求に対応する戻りデータを受け取るためのタイム・スロットを識別し予約するように構成されるアービトレータを含み得る。
このアービトレータは、読取り要求に対応する戻りデータを受け取るための使用可能なタイム・スロットを識別することができ、現時点のクロック・サイクルと使用可能なタイム・スロットの時間差が固定応答時間以上である。
次いで、アービトレータは、使用可能なタイム・スロットを予約することによって第１のスロット予約を生成する。
一実施形態では、アービトレータは、読取り要求に対応する戻りデータを受け取るための第２の使用可能なタイム・スロットも識別し、第２の使用可能なタイム・スロットを予約することによって第２のスロット予約も生成する。
第１のスロット予約と第２のスロット予約の時間間隔は固定応答時間に等しくし得る。
【００３８】
第３の領域４１０は、メモリ・モジュールに読取り要求を発行するように構成されるメモリ・アクセス・インターフェースを含み得る。
この読取り要求は、第１のスロット予約の時間から固定応答時間を減算することによって求められるクロック・サイクルで発行され得る。
一実施形態では、これらスロット予約のいずれも読取り要求パケットによってメモリ・モジュールに通信されない。
メモリ・モジュールは固定応答時間で読取り要求に応答するように構成されるので、戻りデータは第１のスロット予約で共用バス上に到達することになる。
戻りデータは、読取り要求によって要求されるデータまたは固定応答時間によって指定される時間ではデータが使用可能でなかったことの指示を含み得る。
メモリ・アクセス・インターフェースは、第１のスロット予約で戻された戻りデータを対応する読取り要求に関連付ける。
さらに、第１のスロット予約で戻された戻りデータが読取り要求によって識別されるデータである場合、メモリ・アクセス・インターフェースは、第２のスロット予約を解除し得る。
【００３９】
連続するブロックとして示したが、ソフトウェアの構成要素は任意の順序または構成で格納され得る。
例えば、非一時的コンピュータ可読媒体４００がハード・ドライブである場合、ソフトウェアの構成要素は不連続セクタまたは重なり合うセクタにさえも格納され得る。
【符号の説明】
【００４０】
１０２，４０２・・・プロセッサ，１０４・・・メモリ・モジュール，１０６・・・メモリ・コントローラ，１０８・・・キャッシュ，１１２・・・メモリ・バンク，１１４・・・モジュール・コントローラ，４０６・・・タイミング構成，４０８・・・アービトレータ，４１０・・・メモリ・アクセス，
【図１】
0005666722.tif 000002
【図２】
0005666722.tif 000003
【図３】
0005666722.tif 000004
【図４】
0005666722.tif 000005