(57)【要約】２つの異なるメモリタイプへの発行に対するメモリ要求を予定することを実行するためのシステム、装置、方法が開示される。コンピューティングシステムは、アプリケーションを処理するための１つ以上のクライアントを含む。メモリコントローラ内の異種メモリチャネルは、メモリコントローラと、第１のメモリ及び第１のメモリとは異なる第２のメモリのそれぞれに接続されたメモリバスとの間でメモリトラフィックを転送する。メモリコントローラは、メモリバス上で駆動される予定である読み取り応答データをすでに有していない次の所与の時点を決定する。メモリコントローラは、第１のメモリにアクセスするための第１のメモリアクセスコマンド、及び第２のメモリにアクセスするための第２のメモリアクセスコマンドを予定するための時間があるかどうかを判断する。それぞれに十分な時間がある場合、次いでアクセスコマンドの１つが、重み付けされた基準に基づいて選択される。【選択図】図９
2021507399.tif 000002
【特許請求の範囲】
【請求項１】
メモリコントローラであって、
メモリ要求を受け取るための第１のインタフェースと、
前記メモリ要求に対応するメモリアクセスコマンドを、第１のメモリデバイスまたは前記第１のメモリデバイスとは異なる第２のメモリデバイスのどちらかにに送信するためのコマンドバスと、
前記メモリコントローラと、前記第１のメモリデバイスと前記第２のメモリデバイスの両方との間でデータを転送するためのデータバスと、
を備える第２のインタフェースと、
制御ロジックであって、前記データバスが所与の時点で利用可能となる予定であると判断することに応えて、前記制御ロジックが、新しいメモリアクセスコマンドを、前記新しいメモリアクセスコマンドに対する応答が前記所与の時点で前記データバス上で受け取られるように、前記第１のメモリデバイスまたは前記第２のメモリデバイスのどちらかへの発行のために予定できるかどうかを判断するように構成される、制御ロジックと、を備える、前記メモリコントローラ。
【請求項２】
前記所与の時点が、前記データバスが、前記データバス上で駆動されるデータを有する予定ではなく、まだスケジューリングについて検討されていない次に利用可能な時点である、請求項１に記載のメモリコントローラ。
【請求項３】
前記新しいメモリアクセスコマンドが、前記所与の時点での発行のために予定できるかどうかを判断するために、前記制御ロジックが、
前記新しいメモリアクセスコマンドの応答レイテンシがＮクロックサイクルであると判断し、Ｎが整数であり、
前記所与の時点よりもＮクロックサイクル前に相当する、より早期の時点を識別し、
前記コマンドバスが前記より早期の時点で利用可能であるかどうかを判断するように構成される、請求項１に記載のメモリコントローラ。
【請求項４】
前記応答レイテンシを有する２つ以上の保留中のメモリアクセスコマンドがあるかどうかを判断することに応えて、前記制御ロジックが、前記２つ以上の保留中のメモリアクセスコマンドの１つを前記より早期の時点での発行のために予定するように構成される、請求項３に記載のメモリコントローラ。
【請求項５】
前記新しいメモリアクセスコマンドが予定されるために十分な時間があると判断することに応えて、前記制御ロジックが、
前記より早期の時点での発行のために前記新しいメモリアクセスコマンドを予定し、
前記データバスが前記所与の時点で利用可能ではない旨の表示を格納するように構成される、請求項３に記載のメモリコントローラ。
【請求項６】
前記応答レイテンシを有する２つ以上の保留中のメモリアクセスコマンドがあると判断することに応えて、前記制御ロジックが、
前記所与の時点と、メモリアクセスコマンドが前記第１のメモリデバイスに発行された直近の時点との間の第１の時間量と、
前記所与の時点と、メモリアクセスコマンドが前記第２のメモリデバイスに発行された直近の時点との間の第２の時間量と、
の１つ以上に基づいて、前記より早期の時点で前記２つ以上の保留中のメモリアクセスコマンドの１つを予定するように構成される、請求項１に記載のメモリコントローラ。
【請求項７】
前記制御ロジックが、
前記第１のメモリアクセスコマンド及び前記第２のメモリアクセスコマンドの優先度レベルと、
前記第１のメモリアクセスコマンド及び前記第２のメモリアクセスコマンドの経過時間と、
の１つ以上に基づいて、発行のために前記２つ以上の保留中のメモリアクセスコマンドの前記１つの１つを選択するようにさらに構成される、請求項６に記載のメモリコントローラ。
【請求項８】
前記応答レイテンシを有する所与のメモリアクセスコマンドが保留中であると判断することに応えて、前記制御ロジックが、
前記所与のメモリアクセスコマンドが、前記第２のメモリデバイスにアクセスする、より早期に発行されたメモリアクセスコマンドと同じアドレスをターゲットとするステータスアクセスコマンドであると判断し、
読み取り応答データが、前記より早期に発行されたメモリアクセスコマンド対して到着しなかったと判断するように構成される、請求項６に記載のメモリコントローラ。
【請求項９】
第１のインタフェースによってメモリ要求を受け取ることと、
第２のインタフェースによって、前記メモリ要求に対応するメモリアクセスコマンドを、コマンドバスを介して、第１のメモリデバイスまたは前記第１のメモリデバイスとは異なる第２のメモリデバイスのどちらかに送信することと、
前記第２のインタフェースによって、データバスを介して、メモリコントローラと、前記第１のメモリデバイス及び前記第２のメモリデバイスの両方との間でデータを転送することと、
前記データバスが所与の時点で利用可能となると予定であると判断することに応えて、新しいメモリアクセスコマンドを、前記新しいメモリアクセスコマンドに対する応答が前記所与の時点で前記データバス上で受け取られるように、前記第１のメモリデバイスまたは前記第２のメモリデバイスのどちらかへの発行のために予定できるかどうかを判断することと、を含む、方法。
【請求項１０】
前記所与の時点が、前記データバスが、前記データバス上で駆動されるデータを有する予定ではなく、まだスケジューリングについて検討されていない次に利用可能な時点である、請求項９に記載の方法。
【請求項１１】
前記新しいメモリアクセスコマンドが、前記所与の時点での発行のために予定できるかどうかを判断するために、前記方法が、
前記新しいメモリアクセスコマンドの応答レイテンシがＮクロックサイクルであると判断し、Ｎが整数であることと、
前記所与の時点よりもＮクロックサイクル前に相当する、より早期の時点を識別することと、
前記コマンドバスが前記より早期の時点で利用可能であるかどうかを判断することと、
をさらに含む、請求項９に記載の方法。
【請求項１２】
前記応答レイテンシを有する２つ以上の保留中のメモリアクセスコマンドがあるかどうかを判断することに応えて、前記方法が、前記２つ以上の保留中のメモリアクセスコマンドの１つを前記より早期の時点での発行のために予定することをさらに含む、請求項１１に記載の方法。
【請求項１３】
前記新しいメモリアクセスコマンドが予定されるために十分な時間があると判断することに応えて、前記方法が、
前記より早期の時点での発行のために前記新しいメモリアクセスコマンドを予定することと、
前記データバスが前記所与の時点で利用可能ではない旨の表示を格納することと、
をさらに含む、請求項１１に記載の方法。
【請求項１４】
前記応答レイテンシを有する２つ以上の保留中のメモリアクセスコマンドがあると判断することに応えて、前記方法が、
前記所与の時点と、メモリアクセスコマンドが前記第１のメモリデバイスに発行された直近の時点との間の第１の時間量と、
前記所与の時点と、メモリアクセスコマンドが前記第２のメモリデバイスに発行された直近の時点との間の第２の時間量と、
の１つ以上に基づいて、前記より早期の時点で前記２つ以上の保留中のメモリアクセスコマンドの１つを予定することと、をさらに含む、請求項９に記載の方法。
【請求項１５】
前記方法が、
前記第１のメモリアクセスコマンド及び前記第２のメモリアクセスコマンドの優先度レベルと、
前記第１のメモリアクセスコマンド及び前記第２のメモリアクセスコマンドの経過時間と、
の１つ以上に基づいて、発行のために前記２つ以上の保留中のメモリアクセスコマンドの前記１つの１つを選択することをさらに含む、請求項１４に記載の方法。
【請求項１６】
前記応答レイテンシを有する所与のメモリアクセスコマンドが保留中であると判断することに応えて、前記方法が、
前記所与のメモリアクセスコマンドが、前記第２のメモリデバイスにアクセスする、より早期に発行されたメモリアクセスコマンドと同じアドレスをターゲットとするステータスアクセスコマンドであると判断することと、
読み取り応答データが、前記より早期に発行されたメモリアクセスコマンドに対して到着しなかったと判断することと、
をさらに含む、請求項１４に記載の方法。
【請求項１７】
第１のメモリデバイスまたは前記第１のメモリデバイスとは異なる第２のメモリデバイスに格納されたデータに対するメモリアクセス要求を生成するように構成されたプロセッサと、
コマンドバスを介して、前記メモリ要求に対応するメモリアクセスコマンドを、第１のメモリデバイスまたは前記第１のメモリデバイスとは異なる第２のメモリデバイスのどちらかに送信し、
データバスを介して、前記メモリコントローラと、前記第１のメモリデバイス及び前記第２のメモリデバイスの両方との間でデータを転送し、
前記データバスが所与の時点で利用可能となる予定であると判断することに応えて、新しいメモリアクセスコマンドを、前記新しいメモリアクセスコマンドに対する応答が前記所与の時点で前記データバス上で受け取られるように、前記第１のメモリデバイスまたは前記第２のメモリデバイスのどちらかへの発行のために予定できるかどうかを判断するように構成された、前記第１のメモリデバイス及び前記第２のメモリデバイスのそれぞれに結合されたメモリコントローラと、
を備える、コンピューティングシステム。
【請求項１８】
前記所与の時点が、前記データバスが、前記データバス上で駆動されるデータを有する予定ではなく、まだスケジューリングについて検討されていない次に利用可能な時点である、請求項１７に記載のコンピューティングシステム。
【請求項１９】
前記新しいメモリアクセスコマンドが、前記所与の時点での発行のために予定できるかどうかを判断するために、前記メモリコントローラが、
前記新しいメモリアクセスコマンドの応答レイテンシがＮクロックサイクルであると判断し、Ｎが整数であり、
前記所与の時点よりもＮクロックサイクル前に相当する、より早期の時点を識別し、
前記コマンドバスが前記より早期の時点で利用可能であるかどうかを判断するように構成される、請求項１７に記載のコンピューティングシステム。
【請求項２０】
前記新しいメモリアクセスコマンドが予定されるために十分な時間があると判断することに応えて、前記メモリコントローラが、
前記より早期の時点での発行のために前記新しいメモリアクセスコマンドを予定し、
前記データバスが前記所与の時点で利用可能ではない旨の表示を格納するように構成される、請求項１７に記載のコンピューティングシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
関連技術の説明
さまざまなコンピューティングデバイスが、システムの機能を提供するために複数のタイプのＩＣを統合する異種統合を利用する。複数の機能が処理ノードに入れられ、複数の機能は、視聴覚（Ａ／Ｖ）データ処理、医学及びビジネス分野向けのその他の高データ並列アプリケーション、汎用インストラクションセットアーキテクチャ（ＩＳＡ）の処理命令、デジタル、アナログ、混合信号及び無線周波数（ＲＦ）機能などを含む。複数のタイプのＩＣを統合するために、処理ノードをシステムパッケージングに入れるためのさまざまな選択肢が存在する。いくつかの例は、システムオンチップ（ＳＯＣ）、マルチチップモジュール（ＭＣＭ）、及びシステムインパッケージ（ＳｉＰ）である。
【０００２】
システムパッケージングの選択肢とは関係なく、いくつかの用途では、１つ以上のコンピューティングシステムの性能は処理ノードによって決まる場合がある。一例では、処理ノードは、マルチソケットサーバのソケットの中の複数の処理ノードの１つである。サーバは、サーバ内のコンピュータプログラムだけではなく、リモートコンピューティングデバイスの中の他のコンピュータプログラムにもサービスを提供するために使用される。別の例では、処理ノードは、いくつかの異なるタイプのアプリケーションを実行し、おそらく複数のユーザー（ローカルとリモートの両方）に情報を一度に中継するモバイルコンピューティングデバイス内で使用される。
【０００３】
通常、相対的に高レベルで性能を維持するには、格納されているデータへの迅速なアクセスが必要になる。いくつかのタイプのデータ集約型アプリケーションは、いくつかのローカルプログラムとリモートプログラム、及びそのユーザーに信頼できる高性能を提供するためにデータストレージへの迅速なアクセスに依存する。メモリ階層は、プロセッサダイ上のレジスタ、及びプロセッサダイ上に位置するか、またはプロセッサダイに接続されるかのどちらかのキャッシュなどの相対的に高速な揮発性メモリから、不揮発性の相対的に低速のメモリに移行する。異なるタイプのメモリのためのインタフェース及びアクセス機構も変化する。したがって、階層の中で２つの異なるタイプのメモリを結合するためのあらゆるハイブリッドな提案が、実行中のコンピュータプログラムによる迅速なアクセス要求のために高性能を維持するという課題を提供する。
【０００４】
上記を考慮して、２つの異なるメモリタイプへの発行に対するメモリ要求を予定するための効率的な方法及びシステムが所望される。
【０００５】
添付図面と共に以下の説明を参照することによって、本明細書で説明される方法及び機構の利点をより良好に理解することができる。
【図面の簡単な説明】
【０００６】
【図１】コンピューティングシステムの一実施形態のブロック図である。
【図２】タイミング図の一実施形態のブロック図である。
【図３】タイミング図の別の実施形態のブロック図である。
【図４】タイミング図の別の実施形態のブロック図である。
【図５】タイミング図の別の実施形態のブロック図である。
【図６】コンピューティングシステムの別の実施形態のブロック図である。
【図７】メモリコントローラの一実施形態のブロック図である。
【図８】２つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法の一実施形態の流れ図である。
【図９】２つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法の別の実施形態の流れ図である。
【図１０】２つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法の別の実施形態の流れ図である。
【図１１】２つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法の別の実施形態の流れ図である。
【図１２】２つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法の別の実施形態の流れ図である。
【発明を実施するための形態】
【０００７】
本発明は、多様な修正及び代替形態の影響を受けやすいが、具体的な実施形態は図面中の例として示され、本明細書で詳細に説明される。しかしながら、図面及びそれに対する詳細な説明は、開示された特定の形態に本発明を限定するものではなく、反対に、本発明は、添付の特許請求の範囲によって定義される本発明の範囲内に収まる全ての修正、均等物、及び代替物を包含するものであることが理解されるべきである。
【０００８】
以下の説明では、本明細書に提示する方法及び機構の完全な理解を提供するために、多くの具体的な詳細が述べられている。しかしながら、当業者は、それらの特定の詳細なしに様々な実施形態を実施することができることを認識するべきである。いくつかの例では、本明細書で説明されるアプローチを曖昧にすることを回避するために、公知の構造、コンポーネント、信号、コンピュータプログラム命令、及び技術が詳細には示されていない。例示の簡潔性及び明確さのために、図に示される要素は、必ずしも縮尺通りに描かれていないことが認識されよう。例えば、要素のいくつかの寸法は、他の要素に対して拡張される場合がある。
【０００９】
２つの異なるメモリタイプから順不同で到着する応答データを識別するための多様なシステム、装置、方法、及びコンピュータ可読媒体が開示される。多様な実施形態では、コンピューティングシステムは、アプリケーションを処理するための１つ以上のクライアントを含む。クライアントの例は、汎用中央演算処理装置（ＣＰＵ）、グラフィックスプロセッシングユニット（ＧＰＵ）、アクセラレーテッドプロセッシングユニット（ＡＰＵ）、入出力デバイス（Ｉ／Ｏ）デバイスなどを含む。メモリコントローラ内の異種メモリチャネルは、メモリコントローラと、第１のメモリ及び第２のメモリのそれぞれに接続されたメモリバスとの間でメモリトラフィックを転送する。
【００１０】
多様な実施形態では、第１のメモリ及び第２のメモリは、異なるデータストレージ技術を利用し、異なるアクセスレイテンシを有する。例えば、第１のメモリ及び第２のメモリのそれぞれは、様々なダイナミックランダムアクセスメモリ（ＤＲＡＭ）などの様々なランダムアクセスメモリ（ＲＡＭ）の１つ、ＮＶＤＩＭＭ−Ｐなどの様々な不揮発性（ＮＶ）デュアルインラインメモリ（ＤＩＭＭ）の１つ、相変化メモリ（ＰＣＭ）、強誘電体メモリ（ＦｅＲＡＭ）、磁気抵抗メモリ（ＭＲＡＭ）、抵抗メモリ（ＲｅＲＡＭまたはＲＲＡＭ）、３次元（３Ｄ）クロスポイント（ＸＰｏｉｎｔ）メモリなどの別のタイプのデータストレージ技術の１つを含む場合がある。したがって、第１のメモリの１つ以上のアクセスレイテンシと、第２のメモリの１つ以上のアクセスレイテンシとの差は、閾値を超える場合がある。一部の実施形態では、読み取りコマンドの発行から有効なデータを含む受け取られた応答まで測定された第１のメモリのアクセスレイテンシは、数十ナノ秒の規模である。多様な実施形態では、メモリアクセスコマンドの発行から受け取られた応答まで測定された第２のメモリのアクセスレイテンシは、数百ナノ秒の規模である。したがって、レイテンシ間の差は数百ナノ秒を超え、これは所与の閾値時間量を超える場合がある。
【００１１】
多様な実施形態では、コマンドプロセッサまたは他のロジックが受け取った各メモリ要求を１つ以上のコマンドに変換する。メモリコントローラ内のスケジューラは、第１のメモリタイプのための第１のコマンド及び第２のメモリタイプのための第２のコマンドなどの２つの保留中のメモリアクセスコマンドがあるかどうかを判断する。スケジューラは、共有メモリデータバス上でデータ衝突を引き起こさずに、第１のコマンド及び第２のコマンドのそれぞれを発行できるかどうかを判断する。例えば、メモリコントローラは、第１のメモリ及び第２のメモリのそれぞれのアクセスレイテンシに加えて、選択したコマンドを発行するための時点に基づいて、読み取り応答データが共有メモリデータバスに到着する予定である時点を追跡する。一部の実施形態では、時点はクロックサイクルで測定される。第１のコマンド及び第２のコマンドのどちらかを選択しても、共有メモリデータバス上でデータ衝突が予定されないであろう場合、次いで第１のコマンド及び第２のコマンドのそれぞれは、発行の候補のままである。このような場合、スケジューラは、アービトレーションロジックに基づいて第１のコマンド及び第２のコマンドからコマンドを選択する。
【００１２】
他の実施形態では、共有メモリデータバス上でデータ衝突を回避するために、メモリコントローラの中のスケジューラは、メモリデータバス上で駆動される予定である読み取り応答データをすでに有していない次の所与の時点を決定する。スケジューラは、所与の時点で応答データを提供するために第１のメモリにアクセスするための第１のメモリアクセスコマンドを予定する時間があるかどうかを判断する。また、スケジューラは、所与の時点で応答データを提供するために第２のメモリにアクセスするための第２のメモリアクセスコマンドを予定する時間があるかどうかも判断する。
【００１３】
第１のアクセスコマンド及び第２のアクセスコマンドのうちの少なくとも一方が所与の時点で応答データを提供するための十分な時間がある場合、次いでスケジューラは、アービトレーションロジックに基づいて第１のメモリアクセスコマンド及び第２のメモリアクセスコマンドのうちの１つを選択する。一実施形態では、アービトレーションロジックは重み付けされた基準を使用する。基準には、少なくとも優先度レベル、年齢などが含まれる。その後、スケジューラは、異種メモリチャネルを介して第１のメモリ及び第２のメモリの１つに選択したアクセスコマンドを発行する。
【００１４】
一部の実施形態では、スケジューラが、発行するための所与のコマンドを予定すると、スケジューラは、要求された読み取りデータが共有メモリデータバス上に到着する予定である所与の時点を決定する。一実施形態では、スケジューラは、所与のコマンドのレイテンシを、スケジューラが所与のコマンドを発行することを予定する時点に加える。他の実施形態では、スケジューラは、所与のコマンドに対応する情報を格納する要求待ち行列の中のエントリの表示として識別子を生成する。他の実施形態では、識別子は、スレッド識別子及び所与のコマンドに対応するメモリ要求のターゲットアドレスの一部分の１つ以上の組み合わせに基づいて識別子を生成する。スケジューラは、識別子の、所与の時点との関連付けを格納する。一実施形態では、表が使用される。したがって、スケジューラは、所与のコマンドに挿入されたタグに基づいてまたは到着する要求された読み取りデータと関連付けられたパケットで、よりもむしろ、所与の時点に基づいて共有メモリデータバス上に到着する要求された読み取りデータで、所与のコマンドを識別できる。
【００１５】
図１を参照すると、コンピューティングシステム１００の一実施形態の一般化されたブロック図が示される。示されるように、クライアント１１０及び１１２は、メモリコントローラ１２０にメモリ要求を送信する。メモリコントローラ１２０内の異種メモリチャネル１２４は、メモリコントローラ１２０とメモリバス１３０との間でメモリトラフィックを転送する。メモリ１４０及びメモリ１５０のそれぞれは、クライアント１１０及び１１２によってアクセスされるデータを格納する。多様な実施形態では、メモリ１４０及びメモリ１５０は異なるデータストレージ技術を使用し、したがって異なるアクセスレイテンシを有する。多様な実施形態では、メモリ１４０及びメモリ１５０の１つ以上は、クライアント１１０及び１１２によってシステムメモリとして使用される。
【００１６】
通信ファブリック、Ｉ／Ｏデバイス用の入出力（Ｉ／Ｏ）インタフェース、及びネットワーク接続のためのあらゆるリンク及びインタフェースは、説明を容易にするためにコンピューティングシステム１００の中に示されていない。一部の実施形態では、コンピューティングシステム１００の構成要素は、システムオンチップ（ＳＯＣ）などの集積回路（ＩＣ）上の個々のダイである。他の実施形態では、構成要素は、システムインパッケージ（ＳｉＰ）またはマルチチップモジュール（ＭＣＭ）の中の個々のダイである。一部の実施形態では、クライアント１１０及び１１２は、中央演算処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、マルチメディアエンジン用のハブなどの１つ以上を含む。クライアント１１０及び１１２のそれぞれは、アプリケーションを処理し、メモリ要求を生成することができるさまざまなコンピューティングリソースの１つである。
【００１７】
単一のメモリコントローラ１２０が示されているが、他の実施形態では、別の数のメモリコントローラがコンピューティングシステム１００で使用される。多様な実施形態では、メモリコントローラ１２０は、クライアント１１０及び１１２からメモリ要求を受け取り、スケジューラ１２２はメモリ要求を予定し、予定したメモリ要求を、異種メモリチャネル１２４を介してメモリ１４０及び１５０の１つに送信する。一部の実施形態では、メモリコントローラ１２０内のスケジューラ１２２は、メモリ１５０の中のメモリ場所をターゲットとするメモリ要求を予定することとは別に、メモリ１４０の中のメモリ場所をターゲットとするメモリ要求を予定する制御ロジックを含む。その後、スケジューラ１２２は、メモリ１４０をターゲットとするメモリ要求とメモリ１５０をターゲットとするメモリ要求との間で選択する。一実施形態では、スケジューラ１２２は、メモリ１４０及びメモリ１５０をターゲットとするアクセスを混合する。
【００１８】
メモリ要求を予定するためのスケジューラ１２２の中の制御ロジックは、サービスの質（ＱｏＳ）またはメモリ要求の他の優先度レベル、メモリ要求のプロセスのまたはソフトウェアスレッドの識別子（ＩＤ）、メモリ要求の経過時間、メモリ要求がメモリ１４０に発行されてからの時間量、メモリ要求がメモリ１５０に発行されてからの時間量などの情報を使用する。したがって、スケジューラ１２２は、メモリ要求の順不同の発行をサポートする。スケジューラ１２２が、メモリ１４０及びメモリ１５０の１つに送信するメモリ要求を選択すると、スケジューラ１２２は、選択したメモリ要求を転送のために異種メモリチャネル１２０に送信する。
【００１９】
異種メモリチャネル１２４は、メモリ１４０及びメモリ１５０のそれぞれとインタフェースをとる。異種メモリチャネル１２４は、メモリ１４０とインタフェースをとるために使用されるプロトコルをサポートし、メモリ１５０とインタフェースをとるために使用される別のプロトコルをサポートする。プロトコルは、クロックサイクルごとのデータ転送の数、信号電圧レベル、信号タイミング、信号位相及びクロック位相、ならびにクロック周波数などの情報転送のために使用される値を決定する。
【００２０】
多様な実施形態では、メモリバス１３０は、読み取りモード及び書き込みモードの所与のモード中などの所与の時間量、単一の方向でデータトラフィックを送信することをサポートし、次いで読み取りモード及び書き込みモードの他のモード中などの別の所与の時間量、反対方向でデータトラフィックを送信する。一実施形態では、メモリバス１３０は、単一のコマンドバス及び単一のデータバスを利用する。したがって、メモリ１４０及びメモリ１５０に対するメモリ要求の発行を予定することは、メモリバス１３０上でデータ衝突を回避するように実行される。
【００２１】
上述のように、メモリ１４０及びメモリ１５０は異なるデータストレージ技術を使用し、したがって異なるアクセスレイテンシを有する。示されるように、メモリ１４０は、メモリ１５０のアクセスレイテンシ１３４とは少なくとも閾値時間量分、異なるアクセスレイテンシ１３２を有する。メモリ１４０及びメモリ１５０のそれぞれについて単一のアクセスレイテンシが示されているが、他の実施形態では、メモリ１４０及びメモリ１５０の１つ以上が複数のアクセスレイテンシを有する。しかしながら、メモリ１４０の複数のアクセスレイテンシのそれぞれ１つは、少なくとも閾値時間量分、メモリ１５０の複数のアクセスレイテンシのそれぞれ１つとは異なる。
【００２２】
一実施形態では、メモリ１４０及びメモリ１５０の一方は、さまざまなダイナミックランダムアクセスメモリ（ＤＲＡＭ）の１つを含む。一方、メモリ１４０及びメモリ１５０の他方のメモリは、ＮＶＤＩＭＭ−Ｐなどのさまざまな不揮発性（ＮＶ）デュアルインラインメモリモジュール（ＤＩＭＭ）の１つを含む。他の実施形態では、異なるアクセスレイテンシを有する他のメモリタイプが、メモリ１４０及びメモリ１５０に使用される。例えば、ランダムアクセスメモリ（ＲＡＭ）技術及びＮＶＤＩＭＭ技術のタイプを使用することの他に、一部の実施形態では、メモリ１４０及びメモリ１５０のそれぞれは、相変化メモリ（ＰＣＭ）、強誘電体メモリ（ＦｅＲＡＭ）、磁気抵抗メモリ（ＭＲＡＭ）、抵抗メモリ（ＲｅＲＡＭまたはＲＲＡＭ）、３次元（３Ｄ）クロスポイント（ＸＰｏｉｎｔ）メモリなどのデータストレージ技術の他の例を含む。多様な実施形態では、メモリ１４０のアクセスレイテンシとメモリ１５０のアクセスレイテンシの差は、閾値を超える。したがって、スケジューラ１２２は、メモリ１４０及びメモリ１５０の中の場所をターゲットとするメモリアクセスコマンドを混合して発行するために制御ロジック及び順次要素を含む。
【００２３】
一部の実施形態では、メモリコントローラ１２０は、それぞれの受け取ったメモリ要求を１つ以上のコマンドに変換するためのコマンドプロセッサを含む。一実施形態では、スケジューラ１２２は、メモリ１４０のための第１のコマンド及びメモリ１５０のための第２のコマンドなどの２つの保留中のメモリアクセスコマンドがあるかどうかを判断する。スケジューラ１２２は、共有メモリデータバス１３０上でデータ衝突を引き起こさずに、第１のコマンド及び第２のコマンドのそれぞれを発行できるかどうかを判断する。例えば、メモリコントローラ１２０は、選択したコマンドを発行するための時点、アクセスレイテンシ１３２及びアクセスレイテンシ１３４に基づいて、データが共有メモリデータバス１３０に到着する予定である時点を追跡する。保留中の第１のコマンド及び第２のコマンドは、読み取りアクセスまたは書き込みアクセスである場合がある。一部の実施形態では、時点はクロックサイクルで測定される。第１のコマンド及び第２のコマンドのどちらかを選択しても、共有メモリデータバス１３０上でデータ衝突が予定されないであろう場合、次いで第１のコマンド及び第２のコマンドのそれぞれは、発行の候補のままである。このような場合、スケジューラ１２２は、アービトレーションロジックに基づいて第１のコマンド及び第２のコマンドからコマンドを選択する。一実施形態では、アービトレーションロジックは重み付けされた基準を使用する。
【００２４】
他の実施形態では、アクセスレイテンシ１３２とアクセスレイテンシ１３４との間のかなりの差にも関わらずメモリバス１３０上でデータ衝突を回避するために、スケジューラ１２２は、メモリバス１３０が利用可能となる予定である次の所与の時点を決定する。言い換えると、スケジューラ１２２は、メモリバス１３０上で駆動される予定である読み取り応答データまたは書き込みデータをすでに有していない次の所与の時点を決定する。一部の実施形態では、時点はクロックサイクルで測定される。また、スケジューラ１２２は、所与の時点でデータを提供するためにメモリ１４０にアクセスするための第１のコマンド及びメモリ１５０にアクセスするための第２のコマンドを予定するための時間があるかどうかも判断する。上述のように、コマンドプロセッサは、受け取ったメモリ要求をコマンドに変換する。一実施形態では、第１のコマンド及び第２のコマンドの１つ以上は、１つ以上の先行するコマンド及び／または１つ以上の後続のコマンドを有し、このことが、第１のコマンド及び第２のコマンドが発行され得るときにレイテンシ及び遅延を加える。
【００２５】
第１のアクセスコマンド及び第２のアクセスコマンドのうちの少なくとも１つが、メモリバス１３０が利用可能である所与の時点でデータを提供するための十分な時間がある場合、スケジューラ１２２は、第１のメモリアクセスコマンド及び第２のメモリアクセスコマンドの１つを選択する。優先度レベル、経過時間などの上述した基準が、スケジューラ１２２によって使用できる。その後、スケジューラ１２２は、異種メモリチャネル１２４を介してメモリ１４０及びメモリ１５０の１つに選択したアクセスコマンドを送信する。
【００２６】
図２を参照すると、タイミング図２００の一実施形態の一般化されたブロック図が示される。示される実施形態では、メモリアクセスコマンドは、タイムライン上の異なるときに発行されると示されている。メモリアクセスコマンドは、異なるアクセスレイテンシを有する２つの異なるタイプのメモリの１つに発行される。多様な実施形態では、第１のタイプのメモリ（メモリタイプ１）は、第２のタイプのメモリ（メモリタイプ２）とは異なるデータストレージ技術を使用し、したがってメモリタイプ１は、少なくとも閾値時間量分、メモリタイプ２のアクセスレイテンシとは異なるアクセスレイテンシを有する。
【００２７】
示されるように、Ａ、Ｂ、及びＣとラベルが付けられた３つのメモリアクセスコマンドが、マークｔ１、ｔ２、及びｔ３によって表示される時間に発行される。これらのメモリアクセスコマンドは、メモリタイプ１に発行される。これらのメモリアクセスコマンドに対する応答は、マークｔ４、ｔ５、及びｔ６によって表示される時間に到着すると示されている。一部の実施形態では、タイムライン上のマークは、クロックサイクルと同等である。他の実施形態では、タイムライン上のマークは、所与の時点を表示する他の時間の測定と同等である。応答は、タイムライン上の３つのマークの決定的なアクセスレイテンシを有することに加えて、メモリアクセスコマンドＡ、Ｂ、及びＣを発行する順序に対して順序正しく到着すると示されている。
【００２８】
さらに、別のメモリアクセスコマンドＤが、マークｔ７によって表示される時間に発行されることが示されている。メモリアクセスコマンドＤは、メモリタイプ２に対して発行される。応答は、マークｔ１２によって表示される時間に受け取られると示されている。アクセスレイテンシは、メモリタイプ１に対して発行されたメモリアクセスコマンドＡ、Ｂ、及びＣの場合よりもメモリタイプ２に対して発行されたメモリアクセスコマンドＤの場合により大きくなる。一部の実施形態では、メモリタイプ２のアクセスレイテンシは、タイムライン上の５つのマークである。
【００２９】
示される実施形態では、メモリタイプ２は、第２のアクセスレイテンシを有する。例えば、メモリアクセスコマンドＥは、タイムライン上のマークｔ１３によって表示される時間にメモリタイプ２に発行される。一部の実施形態では、メモリタイプ２の第２のアクセスレイテンシは、タイムライン上の６つのマークである。示されるように、メモリアクセスコマンドＥに対する応答は、マークｔ１９によって表示される時間に到着すると示されている。一部の実施形態では、読み取りアクセスレイテンシは、メモリタイプ１及びメモリタイプ２の書き込みアクセスレイテンシに等しい。他の実施形態では、読み取りアクセスレイテンシは、メモリタイプ１及びメモリタイプ２の１つ以上の書き込みアクセスレイテンシとは異なる。示される実施形態では、アクセスコマンドＡ〜Ｅは、異なるアクセスレイテンシ２１０及び２２０を有し、コマンドＡ〜Ｅは、互いとは別々に発行されると示されている。ただし、このような発行方式は非効率である。
【００３０】
図３を参照すると、タイミング図３００の別の実施形態の一般化されたブロック図が示される。示される実施形態では、メモリアクセスコマンドはタイムライン上の異なる時間に発行されると示されている。メモリアクセスコマンドは、少なくとも閾値時間量分異なるなど、かなり異なるアクセスレイテンシを有する２つの異なるタイプのメモリの１つに発行される。示されるように、メモリタイプ１に発行されたアクセスコマンドのレイテンシ３１０は、メモリタイプ２に発行されたアクセスコマンドのレイテンシ３２０に満たない。
【００３１】
タイミング図２００と同様に、一部の実施形態では、タイムライン上のマークは、クロックサイクルと同等である。他の実施形態では、タイムライン上のマークは時点を表示する他の時間の測定と同等である。示されるように、Ａ、Ｂ、及びＣとラベルが付けられた３つのメモリアクセスコマンドが、マークｔ１、ｔ２、及びｔ３によって表示される時間に発行される。これらのメモリアクセスコマンドは、メモリタイプ１に発行される。これらのメモリアクセスコマンドに対する応答は、マークｔ４、ｔ５、及びｔ６によって表示される時間に到着するとして示されており、タイムライン上の３つのマークの決定的なレイテンシを有することに加えて、メモリアクセスコマンドＡ、Ｂ、及びＣを発行する順序に対して順序正しい。
【００３２】
メモリアクセスコマンドＤは、マークｔ７によって表示される時間にメモリタイプ２に発行される。応答が受け取られる前に、別のメモリアクセスコマンドＥが、マークｔ８によって表示される時間にメモリタイプ１に発行される。マークｔ９によって表示される時間では、データ衝突なしにメモリタイプ１に別のメモリアクセスコマンドを発行することは不可能である。本例では、メモリタイプ１に発行されるメモリアクセスコマンドのアクセスレイテンシが、タイムライン上の３つのマークであり、メモリタイプ２に発行されるメモリアクセスコマンドのアクセスレイテンシが、タイムライン上で少なくとも５つのマークであることが知られている。したがって、メモリデータバスが、メモリアクセスコマンドＤのスケジューリングのため、マークｔ１２によって表示される時間には利用不可であることが知られている。メモリアクセスコマンドがマークｔ９によって表示される時間にメモリタイプ１に発行される場合、次いでデータ衝突はｔ１２で発生するであろう。
【００３３】
ｔ１３にメモリタイプ２に発行されたメモリアクセスコマンドＦ、及び時間ｔ１４及びｔ１５にメモリタイプ１に発行されたメモリアクセスコマンドＧ及びＨなどの他のアクセスコマンドが発行されると示されている。メモリアクセスコマンドＦのこの例でのアクセスレイテンシは、タイムライン上の６つのマークである。したがって、メモリデータバスが、メモリアクセスコマンドＦのスケジューリングのためにマークｔ１９によって表示される時間に利用できないことが知られている。メモリアクセスコマンドがマークｔ１６によって表示される時間にメモリタイプ１に発行される場合、次いでデータ衝突はｔ１９で発生するであろう。したがって、異種メモリチャネルを介して２つのタイプのメモリにメモリアクセスコマンドを発行するスケジューラは、メモリデータバス上でデータ衝突を回避するために、いつメモリデータバスがコマンドのレイテンシのために利用できないのかを考慮に入れる。
【００３４】
図４を参照すると、タイミング図４００の別の実施形態の一般化されたブロック図が示される。示される実施形態では、メモリアクセスコマンド４２０及び４３０は、クロック４１０に基づいて異なる時間に発行されると示されている。示される実施形態では、クロック４１０のクロックサイクルは、時点を識別するために時間の測定を提供するために使用される。メモリアクセスコマンドは、少なくとも閾値時間量分、互いと異なるアクセスレイテンシを有する２つの異なるタイプのメモリの１つに発行される。一実施形態では、コマンド４２０は、第１のタイプのメモリ（メモリタイプ１）に発行され、コマンド４３０は、第２のタイプのメモリ（メモリタイプ２）に発行される。
【００３５】
示されるように、アクセスコマンド４２０のレイテンシは、アクセスコマンド４３０のレイテンシに満たない。レイテンシは、説明を容易にするために、縮尺通りに描かれていない。一部の実施形態では、読み取りコマンドの発行から有効なデータを含む受け取られた応答まで測定されたメモリタイプ１のアクセスレイテンシは、数十ナノ秒の規模である。示されている例では、レイテンシは２クロックサイクルとして示されている。多様な実施形態では、メモリアクセスコマンドの発行から有効なデータを含む場合もあれば、含まない場合もある受け取られた応答まで測定されたメモリタイプ２のアクセスレイテンシは、数百ナノ秒の規模である。説明を容易にするために、レイテンシは、縮尺通りに描かれるよりむしろ５クロックサイクルとして示される。
【００３６】
多様な実施形態では、メモリ読み取り要求またはメモリ書き込み要求などのメモリ要求は、アクセスされているメモリに基づいて１つ以上のコマンドに変換される。例えば、ＤＲＡＭ内の制御ロジックは、活性化（開放）トランザクション、ならびに一度は識別された行にアクセスするため、及び一度は行バッファに格納された修正されたコンテンツを閉鎖トランザクション中に識別された行に入れ直すためのＤＲＡＭ内でのデータライン及び制御ラインのプリチャージなどの複雑なトランザクションを実行する。活性化／開放、列アクセス、読み取りアクセス、書き込みアクセス及びプリチャージ／閉鎖などの異なるＤＲＡＭトランザクションのそれぞれは、異なるそれぞれのレイテンシを有する。多くの場合、活性化トランザクション及びプリチャージトランザクションは、読み取りアクセス及び書き込みアクセスのトランザクションよりも著しく高いレイテンシを有する。
【００３７】
示されている例に示すコマンドの破線は、メモリアクセスコマンドとともに発行される可能性のある追加のコマンドを表す。例えば、ＤＲＡＭ用の活性化／開放コマンド及びプリチャージ／閉鎖コマンドは使用できるが、タイミング図４００には示されていない。同様に、ＮＶＤＩＭＭ−Ｐの場合、トランザクション読み取り（Ｘ−ＲＥＡＤ）コマンド、送信読み取り（ＳＲＥＡＤ）コマンド、及び推測ステータス読み取りコマンドのそれぞれの後には、通常、大きな線形アドレスのためにアドレスを拡張することを可能にする拡張アドレス（ＸＡＤＲ）コマンドが続く。これらの追加のコマンドは明確に示されていないが、コマンド４２０及び４３０の間に配置される可能性のために破線によって示される。したがって、通常、バックツーバックアクセスコマンドは、バックツーバッククロックサイクルでは発行されない。異種メモリチャネルを有するメモリコントローラのためのスケジューラは、発行のためにメモリアクセスコマンドを予定するときに考えられる追加のコマンドを考慮に入れる。
【００３８】
応答は応答４４０として示され、応答は、単一の共有メモリデータバス上で受け取られる。示されるように、メモリタイプ１のためのメモリアクセスコマンド「ＲＥＡＤ  Ａ」は、クロックサイクル（ＣＣ）１で発行される。この例の２クロックサイクルのアクセスレイテンシにより、有効な応答データはＣＣ３で到着する。例に示されるように、有効なデータは、ＣＣ３及びＣＣ４などの２つのクロックサイクルを消費する。各クロックサイクル中、データバス幅に等しいデータ量がメモリコントローラに返される。データバスのサポートされるサイズは、設計選択肢に基づく。
【００３９】
一実施形態では、メモリコントローラの中のスケジューラまたは他の制御ロジックは、メモリデータバスが利用可能となる予定である次の所与の時点がＣＣ４の後であり、それはＣＣ５であると判断する。スケジューラは、メモリタイプ１のためのメモリアクセスコマンド及びメモリタイプ２のためのメモリアクセスコマンドを予定する時間があると判断する。メモリタイプ１のメモリアクセスコマンドのための応答データ量は、メモリタイプ２のより早いメモリアクセスコマンドのために到着する応答データと衝突しないであろう。したがって、スケジューラは、ＣＣ２でメモリタイプ２のために読み取りコマンド「ＲＥＡＤ  Ｂ」を、及びＣＣ３でメモリタイプ１のためにメモリアクセスコマンド「ＲＥＡＤ  Ｃ」を発行する。例の２クロックサイクルのアクセスレイテンシにより、「ＲＥＡＤ  Ｃ」の有効な応答データはＣＣ５及びＣＣ６で到着する。例の５クロックサイクルのアクセスレイテンシにより、有効な応答データは、「ＲＥＡＤ  Ｂ」のためにＣＣ７及びＣＣ８で到着する予定である。しかしながら、示されるように、要求されたデータは、まだメモリタイプ２から取り出される準備ができていなかった。要求されたデータがまだ利用できないことを記述する表示が、メモリコントローラによって受け取られ、後で再試行するためにスケジューラによって使用される。
【００４０】
スケジューラは、メモリデータバス上で駆動される予定である読み取り応答データをすでに有していない次の所与の時点がＣＣ９であると判断する。スケジューラは、メモリタイプ１のためのメモリアクセスコマンド及びメモリタイプ２のためのメモリアクセスコマンドを予定する時間があると判断する。スケジューラは、発行するための次のメモリアクセスコマンドを選択するために、サービスの質（ＱｏＳ）または他のメモリ要求の他の優先度レベル、メモリ要求のプロセスのまたはソフトウェアのスレッドの識別子（ＩＤ）、メモリ要求の経過時間、メモリアクセスコマンドがメモリタイプ１に発行されてからの時間量、メモリアクセスコマンドがメモリタイプ２に発行されてからの時間量などの情報を使用する。示された例では、スケジューラは、ＣＣ４でメモリタイプ２のために読み取りアクセスコマンド「ＲＥＡＤ  Ｄ」を発行する。例の５クロックサイクルのアクセスレイテンシにより、有効な応答データはＣＣ９及びＣＣ１０で到着する予定である。
【００４１】
スケジューラは、メモリデータバスが利用可能である次の所与の時点がＣＣ１１であると判断する。スケジューラは、メモリタイプ１のためのメモリアクセスコマンド及びメモリタイプ２のためのメモリアクセスコマンドを予定する時間があると判断する。スケジューラは、優先度レベル、経過時間などの上記の基準に基づいて、発行するための次のメモリアクセスコマンドを選択する。一部の実施形態では、スケジューラは、基準のそれぞれに所与の重みを割り当て、加重和を実行する。最大の和を有するメモリアクセスコマンドが、発行のために選択される。
【００４２】
一実施形態では、メモリコントローラは、「ＲＥＡＤ  Ｂ」に対する応答データがいまメモリタイプ２から利用可用である旨の表示を別のチャネルまたはリンクインタフェースで受け取る。メモリアクセスコマンド「ＲＥＡＤ  Ｅ」は、上記の読み取りコマンド「ＲＥＡＤ  Ｂ」に対応する送信読み取りコマンド「ＳＲＥＡＤ  Ｂ」よりも高い加重和を有するが、スケジューラは、メモリアクセスコマンド「ＲＥＡＤ  Ｅ」のための応答データの量が、より早い読み取りコマンド「ＲＥＡＤ  Ｄ」のために到着する応答データと衝突するであろうと判断する。したがって、スケジューラは、ＣＣ８で送信読み取りコマンド「ＳＲＥＡＤ  Ｂ」を、ＣＣ９でメモリアクセスコマンド「ＲＥＡＤ  Ｅ」を発行する。例の２クロックサイクルのアクセスレイテンシにより、「ＲＥＡＤ  Ｅ」のための有効な応答データはＣ１１及びＣＣ１２で到着する。この例の「ＳＲＥＡＤ  Ｂ」の５クロックサイクルのアクセスレイテンシにより、有効な応答データはＣＣ１３及びＣＣ１４（図示せず）で到着する予定である。タイミング図４００が読み取りアクセスコマンドに関して説明されるが、他の実施形態では、類似するタイミング図が、書き込みデータが共有メモリデータバス上に配置され、読み取り応答データまたは他の書き込みアクセスコマンドの他の書き込みデータのどちらかとのデータ衝突が発生する場合がある書き込みアクセスコマンドのために使用される。
【００４３】
一部の実施形態では、受け取られた応答データは、どのコマンドが応答データと関連付けられているのかを識別するタグまたは他の識別子を含む。他の実施形態では、要求データの到着のタイミングが、どのコマンドが応答データと関連付けられているのかを識別するために使用される。したがって、要求データはコマンドの発行に対応して順不同で到着するが、メモリコントローラの中のスケジューラは、受け取ったどのデータがどのコマンドに属するのかを追跡できる。
【００４４】
図５を参照すると、タイミング５００の別の実施形態の一般化されたブロック図が示される。示される実施形態では、メモリアクセスコマンド５２０及び５３０は、クロック５１０に基づいて異なる時間に発行されると示されている。示される実施形態では、クロック５１０のクロックサイクルは、時点を識別するために時間の測定を提供するために使用される。メモリアクセスコマンドは、異なるアクセスレイテンシを有する２つの異なるタイプのメモリの１つに発行される。一実施形態では、コマンド５２０は、従来のＤＲＡＭである第１のタイプのメモリに発行され、コマンド５３０は、ＮＶＤＩＭＭ−Ｐである第２のタイプのメモリに発行される。しかしながら異なるアクセスレイテンシを有する他のタイプのメモリが考えられ、意図される。
【００４５】
コマンドレイテンシは、説明を容易にするために縮尺通りに描かれていない。一部の実施形態では、従来のＤＲＡＭのコマンドレイテンシは、数十ナノ秒の規模である。示されている例では、レイテンシは２クロックサイクルとして示されている。多様な実施形態では、ＮＶＤＩＭＭ−Ｐのアクセスレイテンシは、数百ナノ秒の規模である。示されている例では、レイテンシは７クロックサイクルとして示されている。多様な実施形態では、メモリ読み取り要求などのメモリ要求は、アクセスされているメモリに基づいて１つ以上のコマンドに変換される。上述のように、ＤＲＡＭ内の制御ロジックは、活性化トランザクション及び閉鎖トランザクションのような複雑なトランザクションを実行する。さらに、行アドレスのためのストローブ及び列アドレスのためのストローブ５６０など、他の信号も生成される。
【００４６】
以前のタイミング図４００と同様に、タイミング図５００は、読み取りアクセスコマンドに関して説明される。しかしながら、他の実施形態では、類似するタイミング図が、書き込みコマンドが共有メモリデータバス上に配置され、読み取り応答データまたは他の書き込みアクセスコマンドの他の書き込みデータのどちらかとのデータ衝突が発生する場合がある書き込みアクセスコマンドのために使用される。応答は応答５４０として示され、応答は単一メモリデータバス上で受け取られる。スケジューラは、優先順位レベル、経過時間などの上記の基準に基づいて、発行するための次のメモリアクセスコマンドを選択する。一部の実施形態では、スケジューラは、基準のそれぞれに所与の重みを割り当て、発行するための次のコマンドを選択するときに使用するための加重和を実行する。
【００４７】
示されるように、スケジューラは、ＣＣ２でメモリタイプ２のためにトランザクション読み取りコマンド「Ｘ−ＲＥＡＤ  Ａ」を発行する。大きな線形アドレスのためにアドレスの拡張を可能にする拡張アドレスコマンド「ＸＡＤＲ  Ａ」は、ＣＣ３でただちに続く。例の７クロックサイクルのアクセスレイテンシにより、有効な応答データはＣＣ９で到着する予定である。一部の実施形態では、レイテンシは、コマンド「Ｘ−ＲＥＡＤ  Ａ」からよりむしろコマンド「ＸＡＤＲ  Ａ」から測定される。多様な実施形態では、要求されたデータは複数のクロックサイクルを消費する。しかしながら、説明を容易にするために、コマンド「Ｘ−ＲＥＡＤ  Ａ」に対して要求されたデータは、単一のクロックサイクルを消費する。
【００４８】
スケジューラは、ＣＣ３でメモリタイプ１のためにメモリアクセスコマンド「ＲＥＡＤ  Ｂ」を発行する。例の２クロックサイクルのアクセスレイテンシにより、有効な応答データはＣＣ５で到着する。示されるように、活性化コマンド「ＡＣＴＩＶＡＴＥ」は、ＣＣ３でコマンド「ＲＥＡＤ  Ｂ」を発行することに備えるためにＣＣ１で発行される。ストローブ５６０上の列アドレスストローブ（ＣＡＳ）は、ＣＣ３で論理低値でアサートされる。行アドレスと列アドレスとは、対応するストローブのアサーションと整合したポインタ５７０としてマークされたアドレスライン上に設けられる。示されるように、コマンド「ＲＥＡＤ  Ｂ」のために要求されたデータは、ＣＣ５、ＣＣ６、ＣＣ７、及びＣＣ８などの４つのクロックサイクルを消費する。スケジューラは、メモリデータバスが利用可能である次の所与の時点を決定するとき、受け取った要求されたデータによって消費されるクロックサイクル数を考慮に入れる。
【００４９】
一実施形態では、スケジューラは、メモリデータバスが利用可能である次の所与の時点がＣＣ１０であると判断する。スケジューラは、メモリタイプ１のためのメモリアクセスコマンドを予定する時間があるが、メモリタイプ２のためのメモリアクセスコマンドを予定する時間はないと判断する。示されるように、メモリタイプ２のための次のメモリアクセスコマンドを発行する最も早い時点は、コマンド「ＸＡＤＲ  Ａ」の後であり、それはＣＣ４である。７クロックサイクルのアクセスレイテンシにより、要求されたデータは、ＣＣ１０よりむしろＣＣ１１で到着する予定である。したがって、スケジューラは、ＣＣ８でメモリタイプ１のためのメモリアクセスコマンド「ＲＥＡＤ  Ｃ」を発行する。例の２クロックサイクルのアクセスレイテンシにより、有効な応答データはＣＣ１０で到着する。
【００５０】
示されるように、ＣＣ８でコマンド「ＲＥＡＤ  Ｃ」を発行することに備えるために、プリチャージコマンド「ＰＲＥＣＨＡＲＧＥ」及び活性化コマンド「ＡＣＴＩＶＡＴＥ」がそれぞれＣＣ４及びＣＣ６で発行される。閉じるバンクは、ポインタ５７０としてマークされたアドレスライン上の「ＢＡＮＫ」データの中で指定される。一部の実施形態では、受け取られた応答データは、どのコマンドが応答データと関連付けられているのかを識別するタグまたは他の識別子を含む。他の実施形態では、要求データの到着のタイミングが、どのコマンドが応答データと関連付けられているのかを識別するために使用される。したがって、要求データはコマンドの発行に対応して順不同で到着するが、メモリコントローラの中のスケジューラは、受け取ったどのデータがどのコマンドに属するのかを追跡できる。
【００５１】
図６を参照すると、コンピューティングシステム６００の別の実施形態のブロック図が示される。示されるように、コンピューティングシステム６００は、クライアント６１０のそれぞれとメモリコントローラ６３０との間に通信ファブリック６２０を含む。メモリコントローラ６３０は、メモリバス６５０を介してメモリコントローラ６３０とメモリ６７０とメモリ６８０との間でメモリトラフィックを転送するための異種メモリチャネル６３８を含む。メモリ６７０及びメモリ６８０のそれぞれは、クライアント６１０によってアクセスされるデータを格納する。一部の実施形態では、システム６００の構成要素は、システムオンチップ（ＳＯＣ）などの集積回路（ＩＣ）上の個々のダイである。他の実施形態では、構成要素は、システムインパッケージ（ＳｉＰ）またはマルチチップモジュール（ＭＣＭ）の中の個々のダイである。電源コントローラ、割り込みコントローラ、ネットワークリンクインタフェースなどは、説明を容易にするために示されていない。
【００５２】
多様な実施形態では、メモリバス６５０は、双方向共有バス構造を利用する。多様な実施形態では、メモリ６７０及びメモリ６８０は異なるデータストレージ技術を使用し、したがってメモリ６７０は、少なくとも閾値時間量分、メモリ６８０のアクセスレイテンシとは異なるアクセスレイテンシを有する。多様な実施形態では、メモリ６７０及びメモリ６８０の１つ以上は、クライアント６１０によってシステムメモリとして使用される。
【００５３】
一実施形態では、メモリ６７０及びメモリ６８０の一方がさまざまなタイプのＤＲＡＭの１つであるとき、異種メモリチャネル６３８とメモリコントローラ６３０との間のそれぞれのインタフェースのためのプロトコルの一例は、ダブルデータレート（ＤＤＲ）タイプのプロトコルである。プロトコルは、クロックサイクルあたりのデータ転送の数、信号電圧レベル、信号タイミング、信号位相及びクロック位相、ならびにクロック周波数など、情報転送のために使用される値を決定する。プロトコルの例は、ＤＤＲ２  ＳＤＲＡＭ、ＤＤＲ３  ＳＤＲＡＭ、ＧＤＤＲ４（グラフィックスダブルデータレート、バージョン４）、ＳＤＲＡＭ、ＧＤＤＲ５、ＳＤＲＡＭ、ＧＤＤＲ６、ＨＢＭ２などを含む。メモリコントローラ６３０は、異種メモリチャネル６３８及び他のメモリチャネル（図示せず）にインタフェースし、対応するプログラムに従うための制御回路を含む。
【００５４】
単一のメモリコントローラ６３０が示されているが、他の実施形態では、別の数のメモリコントローラがコンピューティングシステム６００で使用される。示されるように、メモリコントローラ６３０は、通信ファブリック６２０を介してクライアント６１０から受け取られたメモリアクセス要求を待ち行列に入れるための要求待ち行列６３２を含む。また、メモリコントローラ６３０は、メモリ６７０及びメモリ６８０から受け取った応答を格納するための応答待ち行列６３４も有する。一実施形態では、要求待ち行列６３２は、メモリ読み取り要求を格納するためにメモリ６７０及びメモリ６８０のそれぞれに別個の読み取り待ち行列を含む。さらに、要求待ち行列６３２は、メモリ書き込み要求を格納するためにメモリ６７０及びメモリ６８０のそれぞれに別個の書き込み待ち行列を含む。一部の実施形態では、メモリコントローラ６３０は、メモリ６７０及びメモリ６８０の１つ以上が、アクセスに対する応答として失敗ステータスを提供するデータストレージ技術を含むとき、失敗待ち行列６３９も含む。一実施形態では、メモリ６７０及びメモリ６８０のうちの１つは、失敗ステータス応答を提供するＮＶＤＩＭＭ−Ｐである。
【００５５】
一部の実施形態では、要求待ち行列６３２は、受け取ったメモリアクセス要求を格納するための１つ以上の待ち行列と、受け取った要求から変換され、１つ以上の待ち行列から選択された、予定されたメモリアクセスコマンドとを格納するための別個の待ち行列を含む。スケジューラ６３６は、メモリ６７０及びメモリ６８０への順不同の発行のために要求待ち行列６３２に格納されたメモリアクセスコマンドを選択するための制御ロジックを含む。したがって、メモリコントローラ６３０は、メモリ６７０及びメモリ６８０へのメモリアクセス要求の順不同の発行をサポートする。
【００５６】
多様な実施形態では、メモリコントローラ１３０の中のスケジューラ６３６は、サービスの質（ＱｏＳ）または他の優先度情報、経過時間、プロセスのまたはスレッドの識別子（ＩＤ）、メモリアクセスコマンドがメモリ６７０に発行されてからの時間量、メモリアクセスコマンドがメモリ６８０に発行されてからの時間量、及び同じメモリチャネルをターゲットとする、同じランクをターゲットとする、同じバンクをターゲットとする、及び／または同じページをターゲットとするなどの他の格納されている要求との関係性に基づいて、格納されているメモリアクセスコマンドの発行を予定する。一部の実施形態では、スケジューラ６３６は、基準のそれぞれに所与の重みを割り当て、加重和を実行する。最大の和を有するメモリアクセスコマンドまたはステータスアクセスコマンドが、発行のために選択される。
【００５７】
多様な実施形態では、通信ファブリック６２０は、クライアント６１０とメモリコントローラ６３０との間でトラフィックを前後に転送し、それぞれの通信プロトコルをサポートするインタフェースを含む。一部の実施形態では、通信ファブリック６２０は、少なくとも要求及び応答を格納するための待ち行列と、内部ネットワーク全体で要求を送信する前に受け取った要求間でアービトレーションするための選択ロジックと、パケットを構築し、復号するためのロジックと、パケットのためのルートを選択するためのロジックとを含む。
【００５８】
示される実施形態では、クライアント６１０は、中央演算処理装置（ＣＰＵ）６１２、グラフィックスプロセッシングユニット（ＧＰＵ）６１４、及びハブ６１６を含む。ハブ６１６は、マルチメディアエンジン６１８と通信するために使用される。ＣＰＵ６１２、ＧＰＵ６１４、及びマルチメディアエンジン６１８は、アプリケーションを処理できるコンピューティングリソースの例である。示されていないが、他の実施形態では、他のタイプのコンピューティングリソースがクライアント６１０に含まれる。一部の実施形態では、ＣＰＵ６１２の中の１つ以上のプロセッサコアのそれぞれが、所与の選択されたインストラクションセットアーキテクチャ（ＩＳＡ）に従って命令を実行するための回路を含む。多様な実施形態では、ＣＰＵ６１２の中のプロセッサコアのそれぞれは、所与のＩＳＡの命令を処理するために使用されるスーパースカラ、マルチスレッドマイクロアーキテクチャを含む。
【００５９】
一実施形態では、ＧＰＵ  ６１４は、相当数の並列実行レーンを備えた高並行データマイクロアーキテクチャを含む。一実施形態では、マイクロアーキテクチャは、並列実行レーンのために単一命令複数データ（ＳＩＭＤ）パイプラインを使用する。マルチメディアエンジン６１８は、マルチメディアアプリケーションのために音声データ及び視覚データを処理するためのプロセッサを含む。一部の実施形態では、コンピューティングシステム６００のアドレス空間は、少なくともＣＰＵ６１２、ＧＰＵ６１４及びハブ６１６、ならびに入出力（Ｉ／Ｏ）周辺デバイス（図示せず）及び他のタイプのコンピューティングリソースなどの１つ以上の他の構成要素との間で分割される。メモリマップは、どのアドレスがどの構成要素にマッピングされるのか、したがって特定のアドレスに対するメモリ要求がＣＰＵ６１２、ＧＰＵ６１４、及びハブ６１６のどの１つにルーティングされるべきなのかを決定するために維持される。
【００６０】
多様な実施形態では、メモリ６７０及びメモリ６８０の１つ以上は、Ｉ／Ｏコントローラ及びバス６６０及びメモリバス６５０を通してディスクメモリ６６２からのデータで充填される。要求されたブロックを含む対応するキャッシュフィルラインは、元のメモリアクセス要求を完了するために、メモリ６７０及びメモリ６８０の１つ以上から、クライアント６１０の中のキャッシュメモリサブシステムの対応する１つに伝達される。キャッシュフィルラインは、キャッシュの１つ以上のレベルに配置される。一実施形態では、ディスクメモリ６６２は、データの不揮発性の二次ストレージを提供する。一実施形態では、ディスクメモリ６６２は、１つ以上のハードディスクドライブ（ＨＤＤ）を含む。他の実施形態では、ディスクメモリ６６２は、ソリッドステートディスク（ＳＳＤ）を含む。
【００６１】
図７を参照すると、メモリコントローラ７００の一実施形態の一般化された図が示される。示される実施形態では、メモリコントローラ７００は、通信ファブリックを介するクライアントへのインタフェース７１０、受け取ったメモリアクセス要求及び受け取った応答を格納するための待ち行列７２０、制御ユニット７５０、ならびにメモリデータバス及び異種メモリチャネルを介する、それぞれが異なるメモリ技術を使用する複数のメモリデバイスへのインタフェース７８０を含む。インタフェース７１０、７８０、及び７８２のそれぞれは、それぞれの通信プロトコルをサポートする。一実施形態では、インタフェース７８０は、インタフェース７１０を介して受け取ったメモリ要求に対応するメモリアクセスコマンドを、第１のメモリタイプのデータストレージ技術を含むメモリデバイスに送信するためのメモリコマンドバスへのインタフェースである。一実施形態では、インタフェース７８２は、メモリコントローラ７００と、第１のメモリタイプとは異なる第２のメモリタイプのデータストレージ技術を含む別のメモリデバイスとの間でデータを転送するためのメモリデータバスへのインタフェースである。多様な実施形態では、第１のメモリタイプのアクセスレイテンシは、少なくとも閾値時間量分、第２のメモリタイプのアクセスレイテンシとは異なる。
【００６２】
示される実施形態では、待ち行列７２０は、要求待ち行列７３０、応答待ち行列７４０、及び失敗待ち行列７４２を含む。一実施形態では、待ち行列７２０は、第１のメモリタイプをターゲットとする、受け取った読み取り要求を格納するための第１の読み取り待ち行列７３２、及び第２のメモリタイプをターゲットとする、受け取った読み取り要求を格納するための第２の読み取り待ち行列７３４を含む。２つの読み取り待ち行列が、２つの異なるメモリタイプをターゲットとする読み取り要求を受け取るために示されているが、他の実施形態では、別の数の読み取り待ち行列が、別の数の異なるメモリタイプをターゲットとする読み取り要求を受け取るために使用される。さらに、待ち行列７２０は、第１のメモリタイプをターゲットとする、受け取った書き込み要求を格納するための第１の書き込み待ち行列７３６、及び第２のメモリタイプをターゲットとする、受け取った書き込み要求を格納するための第２の書き込み待ち行列７３８を含む。一部の実施形態では、待ち行列７２０は、第１のメモリタイプ及び第２のメモリタイプの１つ以上がアクセスに対する応答として失敗ステータスを提供するデータストレージ技術を含むとき、失敗待ち行列７４２も含む。一実施形態では、第１のメモリタイプ及び第２のメモリタイプの１つは、失敗ステータス応答を提供するＮＶＤＩＭＭ−Ｐである。一実施形態では、待ち行列７２０は、待ち行列７３２〜７３８の１つ以上、または１つが使用される場合には一元化された待ち行列から選択された、予定されたメモリアクセス要求を格納するための待ち行列７３９を含む。
【００６３】
一部の実施形態では、読み取りスケジューラ７５２は、第２の読み取り待ち行列７３４から順不同で読み取り要求を選択するためだけではなく、第１の読み取り待ち行列７３２から順不同で読み取り要求を選択するためのアービトレーションロジックも含む。一実施形態では、読み取りスケジューラ７５２は、それぞれの要求が第１の読み取り待ち行列７３２または第２の読み取り待ち行列７３４のどちらかから所与のクロックサイクルで予定するために利用可能であるとき、第１の読み取り待ち行列７３２または第２の読み取り待ち行列７３４のどちらかから要求を選択する。一部の実施形態では、読み取りスケジューラ７５２は、サービスの質（ＱｏＳ）または他の優先度情報、経過時間、プロセスのまたはスレッドの識別子（ＩＤ）、及び同じメモリチャネルをターゲットとする、同じランクをターゲットとする、同じバンクをターゲットとする、及び／または同じページをターゲットとするなどの他の格納された要求との関係性に基づいた第１のメモリタイプ及び第２のメモリタイプの１つに対する順不同の発行に対する読み取り要求を予定する。
【００６４】
第１のメモリタイプ及び第２のメモリタイプの複数の決定的なアクセスレイテンシにも関わらずメモリデータバス上でデータ衝突を回避するために、一実施形態では、読み取りスケジューラ７５２は、メモリデータバスが利用可能である次の所与の時点を決定する。一部の実施形態では、時点はクロックサイクルで測定される。読み取りスケジューラ７５２は、所与の時点で応答データを提供するために、第１の読み取り待ち行列７３２に格納された、選択された読み取り要求に対応する第１のメモリアクセスコマンドを予定するための十分な時間があるかどうかを判断する。さらに、読み取りスケジューラ７５２は、所与の時点で応答データを提供するために、第２の読み取り待ち行列７３４に格納された、選択された読み取り要求に対応する第２のメモリアクセスコマンドを予定するための十分な時間があるかどうかも判断する。言い換えると、読み取りスケジューラ７５２は、第１の読み取り待ち行列７３２または第２の読み取り待ち行列７３４のどちらかによって受け取られた新しいメモリアクセスコマンドを、新しいメモリアクセスコマンドに対する応答が、所与の時点でメモリデータバス上で受け取られるように、第１のメモリデバイスまたは第２のメモリデバイスのどちらかへの発行のために予定できるかどうかを判断する。多様な実施形態では、所与の時点は、メモリデータバスが、メモリデータバス上で駆動されるデータを有する予定ではなく、まだスケジューリングのために検討されていない次に利用可能な時点である。
【００６５】
一部の実施形態では、第１のメモリタイプ及び第２のメモリタイプの１つ以上のアクセスレイテンシは非決定的であるが、応答は決定的なレイテンシを有する。応答は、有効なデータが応答に含まれているかどうかを記述する表示とともに決定的なレイテンシの後に返される。有効なデータが応答に含まれていない場合、再試行が後で試される。したがって、メモリアクセスコマンドは、後の再試行のために失敗待ち行列７４２に格納される。上述のように、他のコマンドが、ときおりメモリアクセスコマンドとともに追加で使用される。これらの他のコマンドも、メモリアクセスコマンドのレイテンシにレイテンシを加える。
【００６６】
所与の時点でメモリデータバス上で応答データを提供するために、第１のアクセスコマンド及び第２のアクセスコマンドのうちの少なくとも１つを発行するための十分な時間がある場合、読み取りスケジューラ７５２は、第１のメモリアクセスコマンド及び第２のメモリアクセスコマンドの１つを選択する。優先度レベル、経過時間などの上述した基準がスケジューラ７５２によって使用できる。さらに、加重値が使用できる。一実施形態では、読み取りスケジューラ７５２は、選択したアクセスコマンドを異種メモリチャネルを介して対応するメモリタイプに送信する前に、選択したアクセスコマンドを待ち行列７３９に入れる。第１の読み取り待ち行列７３２または第２の読み取り待ち行列７３４のどちらかに格納された保留中の新しいメモリアクセスコマンドを、所与の時点での発行のために予定できるかどうかを判断するために、一実施形態で、読み取りスケジューラ７５２は、新しいメモリアクセスコマンドの応答レイテンシがＮクロックサイクルであると判断し、Ｎは整数である。読み取りスケジューラ７５２は、所与の時点のＮクロックサイクル前に相当するより早い時点を識別し、メモリコマンドバスがそのより早い時点で利用可能であるかどうかを判断する。
【００６７】
読み取りスケジューラ７５２が、上記の新しいメモリアクセスコマンドが予定されるほど十分な時間があると判断する場合、次いで読み取りスケジューラ７５２は、より早い時点での発行のために新しいメモリアクセスコマンドを予定し、メモリデータバスが所与の時点で利用不可である旨の表示を格納する。一部の実施形態では、どの時点でメモリデータバスが利用可能であるのか、及びどの時点でメモリデータバスが利用不可であるのかを示すために、ビットのベクトルがレジスタに格納される。一実施形態では、レジスタは、どの時点がスケジューリングにまだ検討されていないのか、及びどの時点がスケジューリングに検討されたのかを記述する表示を格納するために使用される。多様な実施形態では、これらの格納された表示は、発行のためのコマンドの将来のスケジューリングのために他の所与の時点を決定するために使用できる。
【００６８】
一部の実施形態では、第１のメモリタイプ及び第２のメモリタイプの複数の決定的なアクセスレイテンシにも関わらずメモリバス上でのデータ衝突を回避するために、読み取りスケジューラ７５２は、メモリデータバスが利用可能である次の所与の時点を初期に決定するのと対照的に、メモリコマンドバスが利用可能である次の時点を決定する。再び、一部の実施形態では、時点はクロックサイクルで測定される。一部の実施形態では、読み取りスケジューラ７５２は、メモリコマンドバスが利用可能である次の時点にそれぞれのレイテンシを加えることによって、第１の読み取り待ち行列７３２及び第２の読み取り待ち行列７３４に格納されたそれぞれ異なるタイプの保留中のメモリアクセスコマンドのためのそれぞれの所与の時点を決定する。
【００６９】
第１の読み取り待ち行列７３２または第２の読み取り待ち行列７３４のどちらかに格納された新しい保留中のメモリアクセスコマンドを、メモリコマンドバスが利用可能である次の時点での発行のために予定できるかどうかを判断するために、一実施形態では、読み取りスケジューラ７５２は、新しいメモリアクセスコマンドの応答レイテンシがＮクロックサイクルであると判断し、Ｎは整数である。読み取りスケジューラ７５２は、メモリコマンドバスが利用可能であるＮクロックサイクル後の時点に相当する所与の時点を識別する。その後、読み取りスケジューラ７５２は、メモリデータバスが、その後の所与の時点で利用可能であるかどうかを判断する。
【００７０】
一部の実施形態では、読み取りスケジューラ７５２は、第１の読み取り待ち行列７３２及び第２の読み取り待ち行列７３４に格納された１つ以上の保留中のメモリアクセスコマンドのそれぞれについて、それぞれ１つ以上の所与の時点ごとにメモリデータバスが利用可能であるかどうかを判断するために、上述のように格納されたビットのベクトルを使用する。メモリデータバスが、単一の保留中のメモリアクセスコマンドのためだけにそれぞれの所与の時点の間に利用可能である場合、次いで読み取りスケジューラ７５２は、その単一の保留中のメモリアクセスコマンドを、メモリコマンドバスが利用可能である次の所与の時点に予定する。メモリデータバスが複数の保留中のメモリアクセスコマンドのためにそれぞれの所与の時点の間に利用可能である場合、次いで読み取りスケジューラ７５２は、優先度レベル、経過時間などの上述の基準に基づいて、発行するための保留中のメモリアクセスコマンドの１つを選択する。読み取りスケジューラ７５２は、メモリコマンドバスが利用可能である次の時点に、選択した保留中のメモリアクセスコマンドを予定する。
【００７１】
書き込みスケジューラ７５４は、読み取りスケジューラ７５２によって使用されるのと同様の選択ロジックを、第１の書き込み待ち行列７３６及び第２の書き込み待ち行列７３８のために含む。多様な実施形態では、書き込みスケジューラ７５４も、共有メモリデータバス上で駆動されるデータによって引き起こされるデータ衝突を検討する。スケジューラ７５２によって使用される決定アルゴリズムを実装する制御ロジックも、書き込みスケジューラ７５４によって使用される。一実施形態では、応答スケジューラ７５６は、優先度に基づいて応答を順不同でクライアントに発行するための類似するロジックを含む。一部の実施形態では、受け取った応答データは、応答スケジューラ７５６が、第１の読み取り待ち行列７３２または第２の読み取り待ち行列７３４のどちらかに格納されたどのコマンドが、応答データと関連付けられているのかを識別するために使用するタグまたは他の識別子を含む。他の実施形態では、メモリデータバス上の要求データの到着のタイミングは、どのコマンドが応答データと関連付けられているのかを識別するために、応答スケジューラ７５６によって使用される。したがって、要求データはコマンドの発行に対応して順不同で到着するが、応答スケジューラ７５６は、受け取ったどのデータがどのコマンドに属するのかを追跡できる。
【００７２】
一部の実施形態では、読み取りスケジューラ７５２が発行するための所与のコマンドを予定すると、応答スケジューラ７５６は、要求された読み取りデータが共有メモリデータバス上に到着する予定である所与の時点を決定する。一実施形態では、応答スケジューラ７５６は、所与のコマンドのレイテンシを、読み取りスケジューラ７５２が所与のコマンドを発行することを予定する時点に加える。一部の実施形態では、応答スケジューラ７５６は、識別子を生成する。一部の実施形態では、識別子は、所与のコマンドに対応する情報を格納する要求待ち行列の中のエントリの表示である。他の実施形態では、識別子は、スレッド識別子、及び所与のコマンドに対応するメモリ要求のターゲットアドレスの一部分の１つ以上の組み合わせである。応答スケジューラ７５６は、識別子の、所与の時点との関連付けを格納する。一実施形態では、表が使用される。したがって、応答スケジューラ７５６は、所与のコマンドに挿入されたタグに基づいてまたは到着する要求された読み取りデータと関連付けられたパケットで、よりもむしろ、所与の時点に基づいて共有メモリデータバス上に到着する要求された読み取りデータで、所与のコマンドを識別できる。
【００７３】
一部の実施形態では、制御レジスタ７７０は、カレントモードの表示を格納する。例えば、オフチップメモリデータバス及びメモリデバイスは、所与のときに読み取りモードまたは書き込みモードのどちらかをサポートする。したがって、トラフィックは、カレントモード中に所与の単一の方向でルーティングされ、データバスターンアラウンドレイテンシの後にカレントモードが変更されると、方向を変更する。多様な実施形態では、制御レジスタ７７０は、読み取りモード中に送信する読み取り要求の閾値数（読み取りバースト長）を格納する。一部の実施形態では、制御レジスタ７７０は、発行するために待ち行列７３２〜７３８に格納された要求を選択するための、読み取りスケジューラ７５２及び書き込みスケジューラ７５４の中の選択アルゴリズムによって使用される基準の重みを格納する。
【００７４】
ここで図８を参照すると、２つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法８００の一実施形態が示される。説明のために、（図９〜図１２においてだけではなく）本実施形態のステップも順番に示される。しかしながら、説明する方法の多様な実施形態では、説明する要素の１つ以上が、示されているのとは異なる順序で同時に実行される、または完全に省略されることに留意されたい。他の追加の要素も、所望されるように実行される。本明細書に説明される多様なシステムまたは装置のいずれも、方法８００を実装するように構成される。
【００７５】
ノード内の１つ以上のクライアントは、コンピュータプログラム、つまりソフトウェアアプリケーションを実行する。コンピューティングリソースは、所与のメモリアクセス要求が、１つ以上のクライアントの所与のクライアント内のキャッシュメモリサブシステム内で失敗すると判断する。クライアントは、２つの異なるメモリのそれぞれに接続された異種メモリチャネルを有するメモリコントローラを介して、その２つの異なるメモリによって実装されるシステムメモリにメモリアクセス要求を送信する。第１のタイプのメモリの１つ以上のアクセスレイテンシと、第２のタイプのメモリの１つ以上のアクセスレイテンシとの差は、閾値時間量を超える。所与のメモリチャネルに接続された第１のタイプのメモリに対するメモリ要求は、それらが受け取られると格納される（ブロック８０２）。所与のメモリチャネルに接続された第２のタイプのメモリに対するメモリ要求は、それらが受け取られると格納される（ブロック８０４）。
【００７６】
第１のタイプのメモリに対するメモリ要求は、少なくとも優先度及びメモリ要求のターゲットに基づいて、順不同の発行についてマークされる（ブロック８０６）。第２のタイプのメモリに対するメモリ要求は、少なくとも優先度及びメモリ要求のターゲットに基づいて順不同の発行についてマークされる（ブロック８０８）。したがって、メモリコントローラは、第１のメモリ及び第２のメモリのそれぞれについて順不同の発行をサポートする。メモリ要求は、所与の時点で応答データを提供するように発行のために予定される（ブロック８１０）。例えば、メモリ要求は、異なるアクセスレイテンシに関わらず、共有メモリデータバス上でデータ衝突なしに、混在して予定される。
【００７７】
多様な実施形態では、スケジューラまたはメモリコントローラの中の他の制御ロジックは、第１のメモリタイプのための第１のコマンド及び第２のメモリタイプのための第２のコマンドなどの２つの保留中のメモリアクセスコマンドがあるかどうかを判断する。スケジューラは、共有メモリデータバス上でデータ衝突を引き起こさずに、第１のコマンド及び第２のコマンドのそれぞれを発行できるかどうかを判断する。例えば、第１のタイプのメモリ及び第２のタイプのメモリのそれぞれのアクセスレイテンシに加えて、第１のコマンド及び第２のコマンドの選択したコマンドを発行するための時点に基づいて、メモリコントローラは、読み取り応答データまたは書き込みデータが共有メモリデータバスに到着する予定である時点を追跡する。一部の実施形態では、時点はクロックサイクルで測定される。
【００７８】
第１のコマンド及び第２のコマンドのどちらかを選択しても共有メモリデータバスでデータ衝突が予定されないであろう場合、次いで第１のコマンド及び第２のコマンドのそれぞれは発行の候補のままである。このような場合、スケジューラは、アービトレーションロジックに基づいて第１のコマンド及び第２のコマンドからコマンドを選択する。他の実施形態では、第１のコマンドを発行するのか、それとも第２のコマンドを発行するのかを判断することは、読み取り応答データまたは書き込みデータが共有メモリデータバスで駆動される特定の所与の時点を選択することで開始する。
【００７９】
ここで図９を参照すると、２つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法９００の一実施形態が示される。読み取り応答データがメモリデータバス上で駆動される次の所与の時点が識別される（ブロック９０２）。例えば、アクセスレイテンシと、各発行済みのメモリアクセスコマンド及びステータスアクセスコマンドごとに返す要求されたデータの予定量の両方とも、次の所与の時点を決定するときに検討される。一部の実施形態では、時点はクロックサイクルで測定される。
【００８０】
読み取り応答データが、すでに所与の時点に到達する予定である場合（条件ブロック９０４の「ｙｅｓ」分岐）、次いで方法９００の制御フローは、次の所与の時点が識別されるブロック９０２に戻る。例えば、現在選択されているクロックサイクル後の次のクロックサイクルが検討される。代わりに、２つの異なるメモリの１つから到着する予定である要求された読み取りデータのために消費される所与のクロックサイクル数に等しいカウントが、現在のクロックサイクルに追加される。読み取り応答データが所与の時点のために到着する予定ではない場合（条件ブロック９０４の「ｎｏ」分岐）、次いで所与の時点で応答データを提供するために、第１のメモリタイプのためのメモリアクセスコマンドを予定するための十分な時間があるかどうかが判断される（ブロック９０６）。続いて、所与の時点で応答データを提供するために、第１のメモリタイプとは異なる第２のメモリタイプのためのメモリアクセスコマンドを予定するための十分な時間があるかどうかが判断される（ブロック９０８）。
【００８１】
一部の実施形態では、所与の時点でデータを提供するために、第２のメモリタイプのためのステータスアクセスコマンドを予定するための十分な時間があるかどうかも判断される（ブロック９１０）。一部の実施形態では、ステータスアクセスコマンドのアクセスレイテンシは、第２のメモリタイプのためのメモリアクセスコマンドのアクセスレイテンシとは異なる。コマンドは、所与の時点で応答データを提供できる候補コマンドから選択される（ブロック９１２）。多様な実施形態では、スケジューラは、優先度レベル、経過時間などの上述の基準に基づいて発行するための次のメモリアクセスコマンドまたはステータスアクセスコマンドを選択する。選択したコマンドは、選択したコマンドが所与の時点で応答データを提供できるようにする時点での発行のために予定される（ブロック９１４）。例えば、異種メモリチャネルを有するメモリコントローラのためのスケジューラは、発行するために選択したコマンドを準備するために使用される考えられる追加のコマンド、ならびにメモリアクセスコマンド及びステータスアクセスコマンドを発行のために予定するときのそのそれぞれのレイテンシを考慮に入れる。
【００８２】
上述のように、方法９００は、第１のメモリタイプ及び第２のメモリタイプの複数の決定的なアクセスレイテンシにも関わらず、メモリデータバス上でデータ衝突を回避するためのステップを説明する。しかしながら、上述のように、他の実施形態では、異種メモリチャネルを有するメモリコントローラのためのスケジューラは、メモリデータバスが利用可能である次の所与の時点を初期に決定することと対照的に、メモリコマンドバスが利用可能である次の時点を決定する。一部の実施形態では、時点はクロックサイクルで測定される。一部の実施形態では、スケジューラは、メモリコマンドバスが利用可能である次の時点にそれぞれのレイテンシを加えることによって、それぞれ異なるタイプの保留中のメモリアクセスコマンドのためのそれぞれの所与の時点を決定する。
【００８３】
新しい保留中のメモリアクセスコマンドを、メモリコマンドバスが利用可能である次の時点での発行のために予定できるかどうかを判断するために、一実施形態では、スケジューラは、新規メモリアクセスコマンドの応答レイテンシがＮクロックサイクルであると判断し、Ｎは整数である。スケジューラは、メモリコマンドバスが利用可能であるＮクロックサイクル後の時点に相当する後の所与の時点を識別する。その後、スケジューラは、メモリデータバスが後の所与の時点で利用可能であるかどうかを判断する。
【００８４】
メモリデータバスが、単一の保留中のメモリアクセスコマンドのためだけにそれぞれの所与の時点の間に利用可能である場合、次いでスケジューラは、その単一の保留中のメモリアクセスコマンドを、メモリコマンドバスが利用可能である次の時点に予定する。メモリデータバスが複数の保留中のメモリアクセスコマンドのためにそれぞれの所与の時点の間に利用可能である場合、次いでスケジューラは、優先度レベル、経過時間などの上述の基準に基づいて、発行するための保留中のメモリアクセスコマンドの１つを選択する。スケジューラは、メモリコマンドバスが利用可能である次の時点に、選択した保留中のメモリアクセスコマンドを予定する。
【００８５】
方法１０００〜１２００のための以下の説明は、メモリデータバスが利用可能である次の所与の時点を最初に決定し、続いてメモリコマンドバス上で発行されるメモリアクセスコマンドを予定するためにより早い時点を決定するためのステップを説明する。しかしながら、多様な他の実施形態では、上述のように、スケジューラは、メモリコマンドバスが利用可能である次の時点を決定し、続いて読み取り応答データが、衝突なしにメモリデータバス上に到着する予定である後の時点を決定する。方法９００〜１２００のステップは、読み取りアクセスコマンドに関して説明されるが、他の実施形態では、類似するロジック及びステップが、書き込みデータは共有メモリデータバスに配置され、読み取り応答データまたは共有メモリデータバス上で駆動される他の書き込みアクセスコマンドの他の書き込みデータのどちらかとのデータ衝突が発生する場合がある書き込みアクセスコマンドのために使用される。
【００８６】
ここで図１０を参照すると、２つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法１０００の一実施形態が示される。アクセスコマンドを選択し、選択したアクセスコマンドがターゲットとされる所与の時点で応答データを提供できるようにする時点での発行のためにアクセスコマンドを予定するために、特定のタイミング値が評価される。一部の実施形態では、以下のステップは、（図９の）方法９００のブロック９１４の後に実行される。第１の時間量は、コマンド発行のための所与の時点と、第１のメモリタイプのために予定された第１のアクセスコマンドのための直近の時点との間で決定される（ブロック１００２）。第１のメモリタイプのアクセスコマンドの起こり得る次の発行に備えるための任意の必要な追加のコマンドのレイテンシは、第１のメモリタイプのためのアクセスコマンドの第１のレイテンシに加えられる（ブロック１００４）。類似するステップは、第２のメモリタイプのためのアクセスコマンドについて実行される。例えば、第２の時間量は、所与の時点と、第２のメモリタイプのために予定された第２のアクセスコマンドのための直近の時点との間で決定される（ブロック１００６）。第２のメモリタイプのためのアクセスコマンドの起こり得る次の発行に備えるための任意の必要な追加のコマンドのレイテンシは、第２のメモリタイプのためのアクセスコマンドの第２のレイテンシに加えられる（ブロック１００８）。
【００８７】
第３の時間量は、所与の時点と、第２のメモリタイプの予定された第３のアクセスコマンドのための直近の時点との間で決定される（ブロック１０１０）。第２のメモリタイプのための第３のアクセスコマンドの起こり得る次の発行に備えるための任意の必要な追加のコマンドのレイテンシは、第２のメモリタイプのための第３のアクセスコマンドの第３のレイテンシに加えられる（ブロック１０１２）。第１の時間量、第２の時間量、及び第３の時間量のそれぞれは、第１のレイテンシ、第２のレイテンシ、及び第３のレイテンシのそれぞれ１つに比較される（ブロック１０１４）。
【００８８】
ここで図１１を参照すると、２つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法１１００の一実施形態が示される。アクセスコマンドを選択し、選択したアクセスコマンドがターゲットとされた所与の時点で応答データを提供できるようにする時点での発行のためにアクセスコマンドを予定するために、タイミング値の特定の比較が行われる。一部の実施形態では、以下のステップは、（図１０の）方法１０００のブロック１０１４の後に実行される。
【００８９】
第１のレイテンシが、第１の時間量よりも大きくない場合（条件ブロック１１０２の「ｎｏ」分岐）、次いで第１のメモリタイプの第１のメモリアクセスコマンドは、発行のために候補コマンドの集合に挿入される（ブロック１１０４）。言い換えると、第１のメモリタイプのためのメモリアクセスコマンド及び発行のためにメモリアクセスコマンドを準備するために使用される任意の追加のコマンドの蓄積されたレイテンシが、第１のメモリタイプのための任意のコマンドの最後の発行と、所与の時点との間の時間量以下である場合、次いで第１のメモリタイプのためのメモリアクセスコマンドを発行するための十分な時間がある。例えば、再び（図５の）タイミング図５００を参照すると、ＣＣ８での「ＲＥＡＤ  Ｃ」の発行と、ＣＣ４による「ＲＥＡＤ  Ｂ」の発行の完了との間には少なくとも４クロックサイクルがある必要がある。
【００９０】
第１のレイテンシが、第１の時間量よりも大きい場合（条件ブロック１１０２の「ｙｅｓ」分岐）、次いで第１のメモリタイプのための第１のメモリアクセスコマンドは、発行のための候補コマンドとしての検討から外される（ブロック１１０６）。類似するステップは、第２のメモリタイプのための第２のメモリアクセスコマンドについて実行される。例えば、第２のレイテンシが、第２の時間量よりも大きくない場合（条件ブロック１１０８の「ｎｏ」分岐）、次いで第２のメモリタイプの第２のメモリアクセスコマンドは、発行のため２の候補コマンドの集合に挿入される（ブロック１１１０）。それ以外の場合、第２のレイテンシが、第２の時間量よりも大きい場合（条件ブロック１１０８の「ｙｅｓ」分岐）、次いで第２のメモリタイプのための第２のメモリアクセスコマンドは、発行のための候補コマンドの集合から削除される（ブロック１１１２）。
【００９１】
類似するステップは、第２のメモリタイプのための第３のメモリアクセスコマンドについて実行される。しかしながら、一部の実施形態では、要求された読み取りデータが、対応する元のメモリアクセスコマンドに対してすでに返されたかどうかに関してチェックが行われる。（図４の）タイミング図４００を再び簡略に参照すると、要求された読み取りデータが元のトランザクション読み取りコマンド「ＲＥＡＤ  Ｂ」に対して返されなかったので、読み取りコマンド「ＳＲＥＡＤ  Ｂ」が発行される。ＣＣ７で、要求された読み取りデータは到着する予定であるが、それは第２のメモリタイプから返されなかった。しかしながら、要求された読み取りデータは、ＣＣ９で予定された所与の時点で返されたので、読み取りコマンド「ＲＥＡＤ  Ｄ」に対して後続の読み取りコマンドは発行されない。一部の実施形態では、メモリコントローラは、読み取りアクセスコマンドの応答データが現在第１のメモリタイプ及び第２のメモリタイプの特定のメモリタイプに利用可能であるかどうかを記述する別のチャネルまたはリンクインタフェース上の表示を受け取る。他の実施形態では、メモリコントローラは、応答データが準備完了しているかどうかを判断するために推測読み取りコマンドを発行する。
【００９２】
第３のレイテンシが第３の時間量よりも大きくなく（条件ブロック１１１４の「ｎｏ」分岐）、対応する応答データがまだ返ってこなかったと判断される場合（条件ブロック１１１６の「ｎｏ」分岐）、次いで第２のメモリタイプのための第３のメモリアクセスコマンドは、発行のための候補コマンドの集合に挿入される（ブロック１１１８）。第３のレイテンシが第３の時間量よりも大きくなく（条件ブロック１１１４の「ｎｏ」分岐）、対応する応答データが返ってきたと判断される場合（条件ブロック１１１６の「ｙｅｓ」分岐）、次いで第２のメモリタイプのための第３のメモリアクセスコマンドは、発行のための候補コマンドの集合から削除される（ブロック１１２０）。同様に、第３のレイテンシが第３の時間量より大きい場合（条件ブロック１１１４の「ｙｅｓ」分岐）、次いで第２のメモリタイプのための第３のメモリアクセスコマンドは、発行のための候補コマンドの集合から削除される（ブロック１１２０）。
【００９３】
ここで図１２を参照すると、２つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法１２００の一実施形態が示される。アクセスコマンドを選択し、選択したアクセスコマンドがターゲットとされる所与の時点で応答データを提供できるようにする時点で発行のためのアクセスコマンドを予定するために、認定された候補コマンドの集合の中でアービトレーションが行われる。一部の実施形態では、以下のステップは、（図１１の）方法１１００のステップの後に実行される。重みは、発行のための候補コマンドの集合からコマンドを選択するために使用される基準に割り当てられる（ブロック１２０２）。
【００９４】
上述のように、基準は、ＱｏＳまたは他の優先度情報、経過時間、プロセスのまたはスレッドの識別子（ＩＤ）、メモリアクセスコマンドが第１のメモリタイプに発行されてからの時間量、及びメモリアクセスコマンドまたはステータスアクセスコマンドが第２のメモリタイプに発行されてからの時間量の１つ以上を含む。一部の実施形態では、プログラム可能な制御レジスタ及びステータスレジスタが、選択した基準に割り当てられた重みを格納する。候補コマンドの集合が発行のために決定される（ブロック１２０４）。一実施形態では、コマンドは、以前の方法９００〜１１００のステップの後に認定される。集合が単一のコマンドを含む場合（条件ブロック１２０６の「ｙｅｓ」分岐）、次いで単一のコマンドが発行のために選択される（ブロック１２０８）。
【００９５】
集合が複数のコマンドを含む場合（条件ブロック１２０６の「ｎｏ」分岐）、次いで単一のコマンドが、重み付けされた基準に基づいて複数の候補の中から選択される（ブロック１２１０）。上述のように、一部の実施形態では、スケジューラは、基準のそれぞれに所与の重みを割り当て、加重和を実行する。最大の和を有するメモリアクセスコマンドまたはステータスアクセスコマンドが、発行のために選択される。選択したコマンドの発行に備えるための任意の必要な追加のコマンドを含む選択したコマンドの総レイテンシは、読み取り応答データが到着する予定である時点から差し引かれる（ブロック１２１２）。追加のコマンド及び選択されたアクセスコマンドは、減算を実行することによって見つけられる決定された時点で発行される予定である（ブロック１２１４）。
【００９６】
多様な実施形態では、ソフトウェアアプリケーションのプログラム命令は、上述の方法及び／または機構を実装するために使用される。プログラム命令は、Ｃなどの高水準プログラミング言語でハードウェアの動作を記述する。代わりに、Ｖｅｒｉｌｏｇなどのハードウェア設計言語（ＨＤＬ）が使用される。プログラム命令は、非一時的コンピュータ可読記憶媒体に格納される。多数のタイプの記憶媒体が利用可能である。記憶媒体は、プログラム実行のためにプログラム命令及び付随するデータをコンピューティングシステムに提供するために、使用中、コンピューティングシステムによってアクセス可能である。コンピューティングシステムは、少なくとも１つ以上のメモリ及びプログラム命令を実行するように構成された１つ以上のプロセッサを含む。
【００９７】
上述の実施形態が、実装態様の非限定的な例にすぎないことが強調されるべきである。上記の開示を十分に理解したとき、多くの変形形態及び修正形態が、当業者に明らかになるであろう。以下の特許請求の範囲は、全てのそのような変形及び修正を包含すると解釈されることが意図される。
【図１】
2021507399.tif 000003
【図２】
2021507399.tif 000004
【図３】
2021507399.tif 000005
【図４】
2021507399.tif 000006
【図５】
2021507399.tif 000007
【図６】
2021507399.tif 000008
【図７】
2021507399.tif 000009
【図８】
2021507399.tif 000010
【図９】
2021507399.tif 000011
【図１０】
2021507399.tif 000012
【図１１】
2021507399.tif 000013
【図１２】
2021507399.tif 000014
【国際調査報告】
2021507399.tif 000015
2021507399.tif 000016
2021507399.tif 000017