(57)【特許請求の範囲】
【請求項１】
方法であって、
共有メモリにアクセスするための複数のトランザクションを、対応する複数のマスタから受信するステップと、
前記複数のトランザクションを、前記複数のトランザクションのためのそれぞれのビートレベルメモリアクセスコマンドに分割するステップであって、前記トランザクションのそれぞれは、少なくとも１つのビートレベルメモリアクセスコマンドに分割され、前記トランザクションのうちの少なくとも１つは、複数のビートレベルメモリアクセスコマンドに分割される、ステップと、
前記複数のトランザクションのそれぞれに対するサービス品質にアクセスするステップと、
前記複数のトランザクションに対する前記サービス品質に基づいてマスタの必要性に対して調整された調停方式を選択するステップと、
前記それぞれのビートレベルメモリアクセスコマンドを、選択された前記調停方式に従って調停するステップと、
前記それぞれのビートレベルメモリアクセスコマンドを、前記ビートレベルメモリアクセスコマンドの調停の結果に基づいて、前記共有メモリにディスパッチするステップと
を含むことを特徴とする方法。
【請求項２】
前記それぞれのビートレベルメモリアクセスコマンドを、前記選択された前記調停方式に従って調停する前記ステップは、
第１のビートレベルメモリアクセスコマンドが前記共有メモリにディスパッチされるようにするために待機する時間の増加に応答して、前記それぞれのビートレベルメモリアクセスコマンドの第１のビートレベルメモリアクセスコマンドのスケジューリング重みを増加させるステップ
を含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記それぞれのビートレベルメモリアクセスコマンドを、前記選択された前記調停方式に従って調停する前記ステップは、
同じトランザクションに関連付けられた２つのビートレベルメモリアクセスコマンドに異なるスケジューリング重みを割り当てるステップ
を含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記同じトランザクションに関連付けられた２つのビートレベルメモリアクセスコマンドに異なるスケジューリング重みを割り当てる前記ステップは、
２つのビートレベルメモリアクセスコマンドのそれぞれのビートがトランザクションにとってどれだけクリティカルであるかに依存するｂｅａｔ＿ｐｒｉｏｒｉｔｙに基づいて、前記同じトランザクションに関連付けられた前記２つのビートレベルメモリアクセスコマンドに異なるスケジューリング重みを割り当てるステップ
を含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記複数のトランザクションの第１のトランザクションが、トランザクション全体が速やかに処理されるべき帯域幅センシティブであるか、又はトランザクションの一定の部分が他の部分を犠牲にしてもより早く処理されるべきタイミングセンシティブであるかを決定するステップをさらに含む
ことを特徴とする請求項１ないし４のいずれか１項に記載の方法。
【請求項６】
前記それぞれのビートレベルメモリアクセスコマンドを、前記選択された前記調停方式に従って調停する前記ステップは、
前記第１のトランザクションがタイミングセンシティブである場合、前記第１のトランザクションのための１つのビートレベルメモリアクセスコマンドをディスパッチすることを、前記第１のトランザクションのための他のビートレベルメモリアクセスコマンドをディスパッチすることより優遇する第１のスケジューリング重み付け方式を使用するステップと、
前記第１のトランザクションが帯域幅センシティブである場合、前記第１のトランザクションのための前記ビートレベルメモリアクセスコマンドのすべてを平等に扱う第２のスケジューリング重み付け方式を使用するステップと
を含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記トランザクションのそれぞれに対する前記サービス品質にアクセスする前記ステップは、前記複数のトランザクションの第１のトランザクションに対するタイミングバジェットにアクセスするステップを含み、
前記それぞれのビートレベルメモリアクセスコマンドを、前記選択された前記調停方式に従って調停する前記ステップは、前記タイミングバジェットを満たすように、前記第１のトランザクションに関連付けられたビートレベルメモリアクセスコマンドのスケジューリング優先度を段階的に拡大するステップを含む
ことを特徴とする請求項１に記載の方法。
【請求項８】
前記トランザクションのそれぞれに対する前記サービス品質にアクセスする前記ステップは、前記複数のトランザクションの第１のトランザクションのためのモードに対する帯域幅割り振りにアクセスするステップを含み、
前記モードは、前記共有メモリのアクセスに関して一定の帯域幅がそれぞれに割り振られる、複数のモードの第１のモードであり、
前記それぞれのビートレベルメモリアクセスコマンドを、前記選択された前記調停方式に従って調停する前記ステップは、前記第１のモードに関連付けられたビートレベルメモリアクセスコマンドの帯域幅が前記第１のモードに対する前記割り振られた帯域幅を超えたとき、前記第１のトランザクションに関連付けられたビートレベルメモリアクセスコマンドが前記共有メモリにディスパッチされることを防止するステップを含む
ことを特徴とする請求項１に記載の方法。
【請求項９】
前記それぞれのビートレベルメモリアクセスコマンドを、前記選択された前記調停方式に従って調停する前記ステップは、
スケジューリング重みを、同じトランザクションに関連付けられた前記ビートレベルメモリアクセスコマンドに、
ｉ）前記同じトランザクションに関連付けられた前記ビートレベルメモリアクセスコマンドのそれぞれが、前記共有メモリにディスパッチされるようにするためにどれだけ多くのクロックサイクルだけ待機しているか、および
ｉｉ）前記同じトランザクションに関連付けられた前記ビートレベルメモリアクセスコマンドのそれぞれのビートがトランザクションにとってどれだけクリティカルであるかに依存するｂｅａｔ＿ｐｒｉｏｒｉｔｙ
に基づいて割り当てるステップ
を含むことを特徴とする請求項１に記載の方法。
【請求項１０】
装置であって、
共有メモリにアクセスするための複数のトランザクションを走査し、前記トランザクションをビートレベルメモリアクセスコマンドに分割するように構成されたトランザクションスキャナであって、前記トランザクションのそれぞれは少なくとも１つのビートレベルメモリアクセスコマンドに分割可能であり、前記トランザクションのうちの少なくとも１つは複数のビートレベルメモリアクセスコマンドに分割可能である、トランザクションスキャナと、
前記共有メモリ内の複数の共有メモリブロックに対応する複数のコマンドアービタを備えたコマンドスーパーアービタであって、
前記複数のトランザクションのそれぞれに対するサービス品質にアクセスし、
前記複数のトランザクションに対する前記サービス品質に基づいてマスタの必要性に対して調整された調停方式を選択し、
前記複数のトランザクションに関連付けられた前記ビートレベルメモリアクセスコマンドを、選択された前記調停方式に従って調停し、
前記ビートレベルメモリアクセスコマンドを、前記ビートレベルメモリアクセスコマンドの調停の結果に基づいて、前記共有メモリブロックにディスパッチするように構成されたコマンドスーパーアービタとを備えた
ことを特徴とする装置。
【請求項１１】
前記複数のコマンドアービタのうちの少なくとも一つのコマンドアービタは、
第１のビートレベルメモリアクセスコマンドが前記共有メモリにディスパッチされるようにするために待機しているクロックサイクルの数が増加するのに従って、前記ビートレベルメモリアクセスコマンドの第１のビートレベルメモリアクセスコマンドのスケジューリング重みを増加させるように構成された
ことを特徴とする請求項１０に記載の装置。
【請求項１２】
前記複数のコマンドアービタのうちの少なくとも一つのコマンドアービタは、
２つのビートレベルメモリアクセスコマンドのそれぞれのビートがトランザクションにとってどれだけクリティカルであるかに依存するｂｅａｔ＿ｐｒｉｏｒｉｔｙに基づいて、同じトランザクションに関連付けられた前記２つのビートレベルメモリアクセスコマンドに、異なるスケジューリング重みを割り当てるように構成された
ことを特徴とする請求項１０に記載の装置。
【請求項１３】
前記複数のコマンドアービタのうちの少なくとも一つのコマンドアービタは、
前記複数のトランザクションの第１のトランザクションが、トランザクション全体が速やかに処理されるべき帯域幅センシティブであるか、それともトランザクションの一定の部分が他の部分を犠牲にしてもより早く処理されるべきタイミングセンシティブであるかを決定するように構成された
ことを特徴とする請求項１０に記載の装置。
【請求項１４】
前記少なくとも一つのコマンドアービタは、
前記第１のトランザクションがタイミングセンシティブである場合、前記第１のトランザクションのための１つのビートレベルメモリアクセスコマンドをディスパッチすることを、前記第１のトランザクションのための他のビートレベルメモリアクセスコマンドをディスパッチすることより優遇する第１のスケジューリング重み付け方式を用い、
前記第１のトランザクションが帯域幅センシティブである場合、前記第１のトランザクションのための前記ビートレベルメモリアクセスコマンドのすべてを平等に扱う第２のスケジューリング重み付け方式を使用するように構成された
ことを特徴とする請求項１３に記載の装置。
【請求項１５】
前記複数のコマンドアービタのうちの少なくとも一つのコマンドアービタは、前記複数のトランザクションの第１のトランザクションに対するタイミングバジェットにアクセスするように構成され、
前記コマンドアービタは、前記タイミングバジェットを満たすように、前記第１のトランザクションに関連付けられたビートレベルメモリアクセスコマンドのスケジューリング優先度を段階的に拡大するように構成された
ことを特徴とする請求項１０に記載の装置。
【請求項１６】
前記複数のトランザクションのそれぞれに対するサービス品質にアクセスするように構成された前記コマンドスーパーアービタは、前記複数のトランザクションのそれぞれのトランザクションのためのモードに対する帯域幅割り振りにアクセスするように構成された前記コマンドスーパーアービタを備え、
前記モードは、前記共有メモリのアクセスに関して一定の帯域幅がそれぞれに割り振られる、複数のモードの第１のモードであり、
前記トランザクションに関連付けられた前記ビートレベルメモリアクセスコマンドを、前記それぞれのトランザクションに対する前記サービス品質に基づいて調停するように構成された前記コマンドスーパーアービタは、
前記第１のモードに関連付けられたビートレベルメモリアクセスコマンドの帯域幅が前記第１のモードに対する前記割り振られた帯域幅を超えたとき、前記複数のトランザクションの第１のトランザクションに関連付けられたビートレベルメモリアクセスコマンドが前記共有メモリにディスパッチされることを防止するように構成された前記コマンドスーパーアービタを備えた
ことを特徴とする請求項１０に記載の装置。
【請求項１７】
前記複数のコマンドアービタのうちの少なくとも一つのコマンドアービタは、読み出しアービタおよび書き込みアービタを備え、
前記コマンドアービタに関連付けられた前記共有メモリブロックは第１の物理メモリブロックおよび第２の物理メモリブロックに分割され、
それぞれ前記第１の物理メモリブロックおよび前記第２の物理メモリブロックにおける同時並行した実行のために、前記読み出しアービタからのビートレベル読み出しコマンドおよび前記書き込みアービタからのビートレベル書き込みコマンドを選択するように構成されたブロックコントローラをさらに備えた
ことを特徴とする請求項１０に記載の装置。
【請求項１８】
システムオンチップ（ＳｏＣ）であって、
複数の共有メモリブロックと、
前記複数の共有メモリブロックにアクセスするために、複数の読み出し／書き込みトランザクションを生成するように構成された複数のマスタと、
前記複数の共有メモリブロックと前記複数のマスタとの間に結合された共有メモリコントローラであって、前記共有メモリコントローラは、トランザクションスキャナと、前記複数の共有メモリブロックに対応する複数のコマンドアービタとを備え、
前記トランザクションスキャナは、前記複数の読み出し／書き込みトランザクションを走査し、ビートレベル読み出し／書き込みコマンドに分割するように構成され、前記トランザクションスキャナは、前記読み出し／書き込みトランザクションのうちの少なくとも１つを複数のビートレベル読み出し／書き込みコマンドに分割するように構成され、
前記複数のコマンドアービタは、
前記読み出し／書き込みトランザクションのそれぞれに対するサービス品質にアクセスし、
前記読み出し／書き込みトランザクションのそれぞれに対する前記サービス品質に基づいてマスタの必要性に対して調整された調停方式を選択し、
前記読み出し／書き込みトランザクションに関連付けられた前記ビートレベル読み出し／書き込みコマンドを、選択された前記調停方式に従って調停し、
それぞれの前記複数の共有メモリブロックに対応するビートレベル読み出し／書き込みコマンドのシーケンスを生じ、
ビートレベル読み出し／書き込みコマンドの前記シーケンスを、それぞれの前記複数の共有メモリブロックにディスパッチする
ように構成される、共有メモリコントローラと
を備えたことを特徴とするシステムオンチップ（ＳｏＣ）。
【請求項１９】
前記複数のコマンドアービタの第１のコマンドアービタは、ビートレベル読み出し／書き込みコマンドの前記シーケンスの第１のシーケンスを生成するように構成され、
第１のシーケンスにおけるビートレベル読み出し／書き込みコマンドを、前記複数の共有メモリブロックの第１の共有メモリブロックにディスパッチするように構成され、
前記読み出し／書き込みトランザクションに関連付けられた前記ビートレベル読み出し／書き込みコマンドを、前記読み出し／書き込みトランザクションのそれぞれに対する前記サービス品質に基づいて調停するように構成された前記複数のコマンドアービタは、
第１のビートレベルメモリアクセスコマンドが前記共有メモリブロックにディスパッチされるようにするために待機しているクロックサイクルの数が増加するのに応答して、ビートレベル読み出し／書き込みコマンドの前記第１のシーケンス内にある前記第１のビートレベルメモリアクセスコマンドを、前記第１のシーケンスにおいてより優先度の高い位置に昇格させるように構成された前記第１のコマンドアービタを備えた
ことを特徴とする請求項１８に記載のシステムオンチップ（ＳｏＣ）。
【請求項２０】
前記複数のコマンドアービタの第１のコマンドアービタは、ビートレベル読み出し／書き込みコマンドの前記シーケンスの第１のシーケンスを生成するように構成され、
第１のシーケンス上のビートレベル読み出し／書き込みコマンドを、前記複数の共有メモリブロックの第１の共有メモリブロックにディスパッチするように構成され、
前記読み出し／書き込みトランザクションに関連付けられた前記ビートレベル読み出し／書き込みコマンドを、前記読み出し／書き込みトランザクションのそれぞれに対する前記サービス品質に基づいて調停するように構成された前記複数のコマンドアービタは、
第１の読み出し／書き込みトランザクションの第１のビートレベルメモリアクセスコマンドと、前記第１の読み出し／書き込みトランザクション内の他のビートレベルメモリアクセスコマンドのビートがトランザクションにとってどれだけクリティカルであるかに依存するｂｅａｔ＿ｐｒｉｏｒｉｔｙに応答して、前記読み出し／書き込みトランザクションの第１の読み出し／書き込みトランザクションに関連付けられた前記第１のビートレベルメモリアクセスコマンドに、前記第１の読み出し／書き込みトランザクション内の他のビートレベルメモリアクセスコマンドに比べてより大きなスケジューリング重みを割り当てるように構成された前記第１のコマンドアービタを備えた
ことを特徴とする請求項１８に記載のシステムオンチップ（ＳｏＣ）。
【請求項２１】
前記共有メモリコントローラは、バス幅を有する相互接続部によって前記複数の共有メモリブロックに結合され、それぞれの複数のビートにおける各ビートのサイズは、前記バス幅に一致するサイズである
ことを特徴とする請求項１８ないし２０のいずれか１項に記載のシステムオンチップ（ＳｏＣ）。
【請求項２２】
前記複数の共有メモリブロックは、複数のインターリーブされた物理メモリバンクである
ことを特徴とする請求項１８ないし２１のいずれか１項に記載のシステムオンチップ（ＳｏＣ）。
【請求項２３】
前記複数の共有メモリブロックは、複数の直線的にアドレス指定されたメモリバンクである
ことを特徴とする請求項１８ないし２１のいずれか１項に記載のシステムオンチップ（ＳｏＣ）。
【請求項２４】
前記複数の共有メモリブロックはそれぞれデータ幅を有し、前記複数の共有メモリブロックのうちの少なくとも２つは、異なるデータ幅を有する
ことを特徴とする請求項１８ないし２３のいずれか１項に記載のシステムオンチップ（ＳｏＣ）。
【請求項２５】
コンピュータに請求項１ないし９のいずれか１項に記載の方法を実施させることを記録したプログラムを有するコンピュータ読取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有メモリコントローラおよびそれを使用する方法に関する。
【背景技術】
【０００２】
関連出願の相互参照
本出願は、参照により本明細書にその全体が再現されているかの如く組み込まれている、２０１５年７月１３日に出願された「Ｓｈａｒｅｄ  Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌｌｅｒ  ａｎｄ  Ｍｅｔｈｏｄ  ｏｆ  Ｕｓｉｎｇ  Ｓａｍｅ」という名称の米国非仮特許出願第１４／７９７，６２０号の優先権を主張するものである。
【０００３】
マルチコアシステムオンチップ（ＳｏＣ）の普及が増している。通常のマルチコアＳｏＣは、メモリ空間を共有する処理コアなどの複数のマスタを含む。マスタは、数ある中でもマイクロプロセッサコア、デジタル信号プロセッサ（ＤＳＰ）、ハードウェアアクセラレータ（ＨＡＣ）などの多様な処理デバイスとすることができる。共有メモリはまた、数ある中でもフラッシュ、またはダイナミックランダムアクセスメモリ（ＤＲＡＭ）などの多様な形をとることができる。共有メモリはしばしば、メモリの複数の物理ブロックに分割される。複数の処理コアのそれぞれは、共有メモリコントローラを通じて共有メモリにアクセスする。共有メモリコントローラは、様々なマスタおよびメモリの複数の物理ブロックの間のデータの流れを調節する。共有メモリコントローラはしばしば、ＳｏＣ性能に対するボトルネックとなる。
【発明の概要】
【課題を解決するための手段】
【０００４】
本明細書で開示される実施形態は、共有メモリコントローラ、および共有メモリを制御する方法を提供する。
【０００５】
共有メモリを制御する実施形態方法は以下を含む。共有メモリにアクセスするためのトランザクションは、マスタから受信される。トランザクションは、それぞれのトランザクションのためのビートレベルメモリアクセスコマンドに分割される。トランザクションのそれぞれは、少なくとも１つのビートレベルメモリアクセスコマンドに分割され、トランザクションのうちの少なくとも１つは、複数のビートレベルメモリアクセスコマンドに分割される。トランザクションのそれぞれに対して、サービス品質がアクセスされる。トランザクションに関連付けられたビートレベルメモリアクセスコマンドは、それぞれのトランザクションに対するサービス品質に基づいて調停（ａｒｂｉｔｒａｔｅ）される。ビートレベルメモリアクセスコマンドは、ビートレベルメモリアクセスコマンドの調停の結果に基づいて、共有メモリにディスパッチ（ｄｉｓｐａｔｃｈ）される。
【０００６】
実施形態は、共有メモリのためのコントローラを含む。コントローラは、共有メモリにアクセスするためのトランザクションをスキャンイン（ｓｃａｎ−ｉｎ）し、トランザクションをビートレベルメモリアクセスコマンドに分割するように構成されたトランザクションスキャナを備える。トランザクションのそれぞれは少なくとも１つのビートレベルメモリアクセスコマンドに分割可能であり、トランザクションのうちの少なくとも１つは複数のビートレベルメモリアクセスコマンドに分割可能である。コントローラはまた、共有メモリ内の複数の共有メモリブロックに対応する複数のコマンドアービタ（ａｒｂｉｔｅｒ）を備えたコマンドスーパーアービタを備える。コマンドスーパーアービタは、トランザクションのそれぞれに対するサービス品質にアクセスし、トランザクションに関連付けられたビートレベルメモリアクセスコマンドを、複数のトランザクションのそれぞれに対するサービス品質に基づいて調停し、ビートレベルメモリアクセスコマンドを、ビートレベルメモリアクセスコマンドの調停の結果に基づいて、共有メモリブロックにディスパッチするように構成される。
【０００７】
実施形態は、共有メモリブロックと、共有メモリブロックにアクセスするために、それぞれの読み出し／書き込みトランザクションを生成するように構成されたマスタと、共有メモリブロックとマスタとの間に結合された共有メモリコントローラとを備えたシステムオンチップ（ＳｏＣ）を含む。共有メモリコントローラは、トランザクションスキャナと、共有メモリブロックに対応するコマンドアービタとを備える。トランザクションスキャナは、読み出し／書き込みトランザクションをビートレベル読み出し／書き込みコマンドに、スキャンインおよび分割するように構成される。トランザクションスキャナは、読み出し／書き込みトランザクションのうちの少なくとも１つを複数のビートレベル読み出し／書き込みコマンドに分割するように構成される。コマンドアービタは、読み出し／書き込みトランザクションのそれぞれに対するサービス品質にアクセスし、読み出し／書き込みトランザクションに関連付けられたビートレベル読み出し／書き込みコマンドを、読み出し／書き込みトランザクションのそれぞれに対するサービス品質に基づいて調停し、それぞれの共有メモリブロックに対応するビートレベル読み出し／書き込みコマンドのシーケンスを生じるように構成される。コマンドアービタは、ビートレベル読み出し／書き込みコマンドのシーケンスを、それぞれの共有メモリブロックにディスパッチするようにさらに構成される。
【０００８】
この発明の概要は、発明を実施するための形態において以下でさらに述べられる選択された概念を、簡略化された形で導入するために提供される。この発明の概要は、特許請求される主題の主要な特徴または本質的な特徴を特定するためのものではなく、特許請求される主題の範囲を決定するための補助として用いられるためのものでもない。特許請求される主題は、背景技術において記載された、いずれかのまたはすべての欠点を解決する実装形態に限定されない。
【図面の簡単な説明】
【０００９】
本開示の態様は例として示され、類似の参照は類似の要素を示す添付の図に限定されない。
【００１０】
【図１】共有メモリコントローラまたは共有メモリを制御する方法がその中で具体化または遂行されてよい、ＳｏＣの一実施形態のブロック図である。
【図２】図１の共有メモリコントローラの一実施形態のブロック図である。
【図３】３つの共有メモリトランザクションを示す図である。
【図４】共有メモリのためのコントローラの実施形態を通って流れる、図３の共有メモリトランザクションの図である。
【図５】コマンドアービタの一実施形態の図である。
【図６】コマンドアービタの別の実施形態の図である。
【図７】共有メモリを制御する方法の一実施形態のフローチャートである。
【図８】ビートレベルメモリアクセスコマンドを、それぞれのトランザクションに対するＱｏＳに基づいて調停する方法の一実施形態のフローチャートである。
【図９】トランザクションに対するＱｏＳにアクセスし、トランザクションに関連付けられたビートレベルメモリアクセスコマンドを、ＱｏＳに基づいて調停する処理の一実施形態のフローチャートである。
【図１０】トランザクションに対するＱｏＳにアクセスし、トランザクションに関連付けられたビートレベルメモリアクセスコマンドをＱｏＳに基づいて調停する処理の別の実施形態のフローチャートである。
【図１１Ａ】物理メモリブロックに結合されたコマンドアービタおよびブロックコントローラの一実施形態の図である。
【図１１Ｂ】物理メモリサブブロックに結合されたコマンドアービタおよびブロックコントローラの別の実施形態の図である。
【発明を実施するための形態】
【００１１】
本開示は、一般に述べられると、共有メモリにアクセスするための技術に関する。少なくとも１つのマスタ（プロセッサなど）、共有メモリ、および共有メモリコントローラを有する通常のＳｏＣにおいて、マスタはトランザクションを介して共有メモリにアクセスする。トランザクションは、読み出しコマンドまたは書き込みコマンドなどのメモリアクセスコマンドでよい。マスタは、読み出しコマンドまたは書き込みコマンドを生成し、それを共有メモリコントローラに送る。本明細書において読み出し／書き込みコマンドという用語は、読み出しコマンドまたは書き込みコマンドであるコマンドを指すように用いられる。単一の処理コアに限定される場合、読み出し／書き込みコマンドは単に実行され、メモリはアクセスされる。マルチコアＳｏＣにおいてコアのそれぞれは、読み出し／書き込みコマンドを同時に生成することができ、それぞれがトランザクションに対応する。複数の読み出し／書き込みコマンドは、どれがいつ遂行されることになるかを決定するために調停される。
【００１２】
１つのトランザクションは、あるデータ量を共有メモリから読み出す、またはそれに書き込むことを目的とする。所与のクロックサイクル内でメモリの所与の物理ブロックから読み出されまたはそれに書き込まれることができるデータ量は、一般に共有メモリをＳｏＣに結合するバスのサイズによって制限される。バスが８ビット幅である場合、クロックサイクル当たり最大の８ビット（１バイト）がメモリの所与の物理ブロックに書き込まれることができる。同様にバスが３２ビット幅である場合、最大は３２ビット（４バイト）である。各トランザクションは、バス幅に適するように、より小さな部分に分割されることができる。これらのより小さな部分のそれぞれはビートと呼ばれ、バス幅に一致するサイズを有してよい。例えば共有メモリに対して８ビットバス幅を有するＳｏＣにおいて、共有メモリに対して６４ビットのデータを読み出すまたは書き込むためのトランザクションは、８つのビートに分割されるようになり、各ビートは８ビットのサイズを有する。トランザクションの各ビートは、独立してアドレス指定されることができ、これは所与のトランザクションがデータを、メモリの１つまたは複数の物理ブロックから読み出させ、またはそれに書き込ませることができることを意味する。メモリのブロックは絶対的にアドレス指定されることができ、またはメモリブロック番号およびブロック内のオフセットによってアドレス指定されることができる。さらにいくつかのタイプのメモリは、複数の同時の読み出しおよび書き込みコマンドを取り扱うことができ、他は１つの読み出しまたは書き込みコマンドのみを取り扱うことができ、他は１つの読み出しおよび１つの書き込みのみを取り扱うことができる。
【００１３】
通常の共有メモリコントローラは、複数のマスタ、共有メモリコントローラ、および共有メモリの間の読み出し／書き込みコマンドおよびデータの流れを調節するために、スイッチングファブリック（ｆａｂｒｉｃ）に依存する。いくつかの従来のスイッチングファブリックは、トランザクションレベル細分性で、複数のマスタによって生成されたトラフィックを調停し、これはマルチコアＳｏＣの性能、特に読み出しおよび書き込みアクセス待ち時間を悪化させる。最初に１つのトランザクションが共有メモリにアクセスすることが許され、次いで別のトランザクションが、スイッチングファブリックを通じて共有メモリにアクセスすることが許される。上述のようにマルチコアＳｏＣにおいて、複数のトランザクションがスイッチングファブリックに同時に到着することができる。例えば上記６４ビットトランザクションと同時並行して、別の３２ビットのトランザクションが到着すると仮定する。また６４ビットトランザクションは、より高い優先度であると仮定する。このケースにおいて３２ビットトランザクションは、それが共有メモリにディスパッチされる前に、６４ビットトランザクションが完了することを待機する。
【００１４】
スイッチングファブリックを利用したいくつかの従来のマルチコアＳｏＣは、メモリアクセス待ち時間を低減するためにトランザクションのための調停細分性のサイズを制限する。例えば１つの大きな高優先度トランザクションは、かなりの時間、共有メモリコントローラを占有することができ、すべての他のトランザクションに対して大きい待ち時間を引き起こす。
【００１５】
本明細書で開示される実施形態は、１つまたは複数のマスタ（例えば処理コア）からのアクティブなコマンドを同時並行してスキャンインし、同時並行したビートレベル調停を行うように構成された共有メモリコントローラを提供する。さらに共有メモリコントローラは、メモリの様々な物理ブロックへのビートレベル読み出し／書き込みコマンドの同時並行したディスパッチを可能にする、インターリーブされたメモリを使用することができる。代替的実施形態においてメモリは、直線的に体系化されることができる。
【００１６】
いくつかの実施形態において共有メモリコントローラは、サービス品質（ＱｏＳ）認識型である。一実施形態の共有メモリコントローラは、ビートレベルメモリアクセスコマンドを、ビートレベルメモリアクセスコマンドに関連付けられたトランザクションのＱｏＳに基づいて調停する。これはさらなる性能改善を提供する。例えば１つのマスタにとっては、トランザクションの他の部分が完了するのが遅くなることを犠牲にしても、トランザクションの一定の部分ができるだけ速く完了することが、より重要となることがある。別のマスタにとっては、トランザクション全体ができるだけ速く完了することが、より重要となることがある。いくつかの実施形態の共有メモリコントローラは、マスタの必要性に対して調整されたビートレベル調停方式を選択する。
【００１７】
一実施形態において共有メモリコントローラは、待ち時間認識型である。共有メモリコントローラは、ビートレベルメモリアクセスコマンドが、共有メモリにディスパッチされるために待機する時間の増加に応答して、ビートレベルメモリアクセスコマンドのスケジューリング重みを増加させる。これはメモリアクセス枯渇を緩和することができる。
【００１８】
一実施形態において共有メモリコントローラは、クリティカルビート認識型である。共有メモリコントローラは、トランザクションにとって、よりクリティカル（ｃｒｉｔｉｃａｌ）なビートレベルメモリアクセスコマンドに、より高いスケジューリング重みを割り当ててよい。これは共有メモリコントローラが、よりクリティカルなデータをより速くマスタに返すことができることを可能にする。
【００１９】
共有メモリコントローラがどのように（ＱｏＳ）認識型になってよいかの、さらなる多くの例がある。例えばマスタが共有メモリコントローラに送るトランザクションのそれぞれに対して、タイミングバジェット（ｂｕｄｇｅｔ）が存在してよい。いくつかの実施形態の共有メモリコントローラは、トランザクションのタイミングバジェットを満たすことを助けるために、ビートレベルコマンドのスケジューリングを段階的に拡大する。
【００２０】
いくつかの実施形態において共有メモリコントローラは、帯域幅認識型である。例えば共有メモリコントローラは、様々なタイプのトランザクションに割り振られた帯域幅を認識する。共有メモリコントローラは、帯域幅割り振りを実施することを助けるために、ビートレベルメモリアクセスコマンドを絞ってよい。
【００２１】
図１は、共有メモリコントローラまたは共有メモリを制御する方法がその中で具体化または遂行されてよい、ＳｏＣ１００の一実施形態のブロック図である。ＳｏＣ１００は、バス、ネットワーク（例えばパケットネットワーク）などの相互接続部１４０によって共有メモリコントローラ１２０に結合された、共有メモリ１１０を含む。ＳｏＣ１００はまた、ＤＳＰ１３０−１、ＤＳＰ１３０−２、ＤＳＰ１３０−３、ＣＰＵ１３２−１、ＣＰＵ１３２−２、およびハードウェアアクセラレータ（ＨＡＣ）１３４−１を含み、これらは本明細書では「マスタ」と呼ばれる。代替的実施形態は、任意の数およびタイプのマスタ（例えばプロセッサ、プロセッサコア、ＣＰＵ、ＤＳＰ、およびＨＡＣ）を含むことができる。
【００２２】
マスタは、相互接続部１３５上で共有メモリコントローラ１２０と通信する。相互接続部１３５は、１つまたは複数のバス、１つまたは複数のネットワーク（パケット交換ネットワークなど）、またはバスおよびネットワークの何らかの組み合わせにより実施されてよい。相互接続部１３５内の様々なバスのバス幅は、他のバスと同じであってもよいし、同じでなくてもよい。例えば相互接続部内のいくつかのバスは３２ビット幅でよく、他は６４ビット幅である。したがって一例として１つのマスタは３２ビットバス上で通信してよく、別のマスタは６４ビットバス上で通信する。共有メモリコントローラ１２０は、１つの可能性として、マスタの１つまたは複数に直接接続されてよいことに留意されたい。相互接続部１４０は、相互接続部１３５内のバスの幅と同じまたは異なる幅であるバスを有することができる。また相互接続部１３０および１４０内の様々なバスおよびネットワークは、同じまたは異なるプロトコルを遵守してよい。一実施形態においてマスタの１つまたは複数は、共有メモリコントローラ１２０へのポイントツーポイント直接接続により構成される。これはビートレベル調停の実施形態を用いたとき、高い性能を達成することを助けることができる。
【００２３】
図１の実施形態において、共有メモリ１１０、共有メモリコントローラ１２０、ＤＳＰ１３０−１から１３０−３、ＣＰＵ１３２−１、ＣＰＵ１３２−２、およびＨＡＣ１３４−１は、共通の周波数でクロックされることができ、または独立にクロックされることができる。また共有メモリ１１０、共有メモリコントローラ１２０、ＤＳＰ１３０−１から１３０−３、ＣＰＵ１３２−１、ＣＰＵ１３２−２、およびＨＡＣ１３４−１は、同期的にまたは非同期的にクロックされることができる。同期的にクロックされる場合、共有メモリ１１０および共有メモリコントローラ１２０のためのクロック速度は、ＤＳＰ１３０−１から１３０−３、ＣＰＵ１３２−１、ＣＰＵ１３２−２、およびＨＡＣ１３４−１のためのクロック速度に比例する。さらに非同期的にクロックされる場合、それぞれは異なる周波数において、および異なるクロック位相を有してクロックされることができる。例えば一実施形態において、ＤＳＰ１３０−１から１３０−３は周波数Ｆでクロックされると仮定する。共有メモリ１１０および共有メモリコントローラ１２０は、１／２Ｆでクロックされてよい。別の実施形態において共有メモリ１１０は１／２Ｆでクロックされてよく、共有メモリコントローラ１２０は１／４Ｆでクロックされる。デバイスをオーバークロッキングすることは一般に電力を浪費し、アンダークロッキングは待ち時間を導入するので、特定の実施形態のためのクロック速度は、性能を電力とバランスさせるように決定されることができる。
【００２４】
ＤＳＰ１３０−１から１３０−３、ＣＰＵ１３２−１、ＣＰＵ１３２−２、およびＨＡＣ１３４−１はそれぞれ読み出し／書き込みコマンドを生成することができ、それらは共有メモリコントローラ１２０に送られる。コマンドのそれぞれは、相互接続部１４０を介して共有メモリ１１０から読み出すまたはそれに書き込むことになるトランザクションに対応する。一実施形態において共有メモリコントローラ１２０は、すべてのアクティブな読み出し／書き込みトランザクションを同時並行してスキャンインし、それらをビートレベルメモリアクセスコマンドに分割するように構成される。各読み出し／書き込みトランザクションは、１つまたは複数のビートレベルメモリアクセスコマンドに分割されてよい。例えば読み出しトランザクションは、８つのビートレベル読み出しコマンドに分割されてよい。共有メモリコントローラ１２０は、ビートレベルコマンドに対してビートレベル調停を遂行するようにさらに構成される。ビートレベル調停は、いずれか１つのトランザクションに大きな待ち時間を経験させる可能性を緩和する。共有メモリ１１０が物理メモリのバンクを備える実施形態において、ビートレベル調停は、物理メモリの様々なバンクへの、ビートレベルメモリアクセスコマンドの同時並行したディスパッチをさらに可能にする。
【００２５】
いくつかの実施形態の共有メモリコントローラ１２０は、サービス品質（ＱｏＳ）認識型である。例えば共有メモリコントローラ１２０は、マスタ、および／またはマスタからのトランザクションの１つまたは複数のＱｏＳパラメータを認識する。ＱｏＳパラメータは、優先度、タイミングバジェット、および帯域幅割り振りを含むことができるが、それらに限定されない。
【００２６】
一実施形態において共有メモリコントローラ１２０は、同じトランザクションに関連付けられた異なるビートレベルメモリアクセスコマンドに、異なるスケジューリング重みを割り当てるように構成される。例えばビートレベルメモリアクセスコマンドの１つは、所与のトランザクション内で、他に比べてよりクリティカルであってよい。そのビートレベルメモリアクセスコマンドに、より高いまたはより大きなスケジューリング重みを割り当てることは、それがそのトランザクション内の他より速く完了することを可能にする。さらに、より低いスケジューリング重みを、そのトランザクション内の他のビートレベルメモリアクセスコマンドに割り当てることは、クリティカルさがより低いビートレベルメモリアクセスコマンドが、異なるトランザクションからのビートレベルメモリアクセスコマンドを阻止する可能性を防止し、または少なくとも低減してよい。
【００２７】
別の例として共有メモリコントローラ１２０は、ビートレベルメモリアクセスコマンドに対するスケジューリング重みを、それが共有メモリ１１０にディスパッチされるためにどれだけ多くのクロックサイクルだけ待機しているかに基づいて、割り当てるように構成される。一実施形態において、ビートレベルメモリアクセスコマンドが長く待機しているほど、スケジューリング重みは高くなる。これはより低い優先度のビートレベルメモリアクセスコマンドが、共有メモリ１１０にディスパッチされるために過度の時間、待機する必要がなくなることを確実にする。
【００２８】
いくつかの実施形態において共有メモリコントローラ１２０はまた、共有メモリ１１０からのビートレベル応答を、各トランザクションに対する１つまたは複数の応答に組み合わせる。例えば共有メモリコントローラ１２０が８つのビートに分割した読み出しトランザクションを仮定すると、読み出しデータは、共有メモリ１１０内の様々な物理メモリブロックから、８回取り出される。共有メモリコントローラ１２０は、それら８つのビートレベル読み出しデータ応答のそれぞれを集め、それらを読み出しトランザクションに対する単一の読み出しデータ応答に組み合わせてよい。次いで共有メモリコントローラ１２０は、トランザクションを指令したいずれかのマスタに、読み出しデータを返すことができる。
【００２９】
しかし共有メモリコントローラ１２０は、必ずしも読み出しデータのすべてを連続して送り返さないことに留意されたい。いくつかのケースにおいて、所与のトランザクションのための読み出しデータのクリティカルな部分は共有メモリ１１０から返ってよく、一方、そのトランザクションのための読み出しデータのクリティカルさがより低い部分は、共有メモリ１１０からまだ取り出されていない。このようなケースにおいて共有メモリコントローラ１２０は、トランザクションに対するビートレベル応答のすべてよりも少ないものからの読み出しデータを一緒にまとめ、そのデータをマスタに送ってよく、その結果マスタは最もクリティカルなデータをより速く受信する。次いで共有メモリコントローラ１２０は、トランザクションに関連付けられたクリティカルさがより低い読み出しデータを、そのデータが共有メモリ１１０から取り出されるのに応答して送るように、進行することができる。
【００３０】
別の例において、共有メモリコントローラが８つのビートに分ける、書き込みトランザクションを仮定すると、共有メモリ１１０内の８つの様々な宛先物理メモリブロックから、肯定応答が受信されてよい。いくつかの実施形態において共有メモリコントローラ１２０は、それら８つのビートレベル書き込み応答のそれぞれを集め、それらを書き込みトランザクションに対する単一の書き込み応答に組み合わせる。
【００３１】
図２は、図１の共有メモリコントローラ１２０の一実施形態のブロック図である。共有メモリコントローラ１２０は、トランザクションスキャナ２１０、コマンドスーパーアービタ２２０、コンバイナ２４０、およびスーパーバイザ２６０を含む。共有メモリコントローラ１２０は、Ｎ個の物理メモリブロック２５０−１から２５０−Ｎに結合される。同様にコマンドスーパーアービタ２２０は、Ｎ個の物理メモリブロックに対応するＮ個のコマンドアービタ２３０−１から２３０−Ｎを含む。いくつかの実施形態においてＮ個のコマンドアービタ２３０−１から２３０−Ｎのそれぞれは、個別の読み出しアービタおよび個別の書き込みアービタを含む。一実施形態においてコマンドアービタ２３０は、読み出しおよび書き込み調停の両方を一緒に行う。一実施形態においてトランザクションスキャナ２１０、コマンドスーパーアービタ２２０、コンバイナ２４０、およびスーパーバイザ２６０は、レジスタおよび／または組み合わせ論理を用いて実施される。しかし他の実装形態も用いられることができる。
【００３２】
トランザクションスキャナ２１０は、共有メモリコントローラ１２０に結合された様々なマスタ（例えば処理コア、プロセッサ、ＣＰＵ、ＤＳＰ、ＨＡＣなど）からのすべてのアクティブなトランザクションを、同時並行してスキャンインするように構成される。アクティブなトランザクションは、読み出しトランザクション（ＲＴ）および書き込みトランザクション（ＷＴ）の両方を同時に含むことができる。トランザクションスキャナ２１０は、メモリアクセストランザクションをスキャンインし、それらを並列に処理する。メモリアクセストランザクションを並列に処理することは、次のメモリアクセストランザクションが共有メモリにディスパッチされる前に各メモリアクセストランザクションが終了するシリアル処理とは対照的である。メモリアクセストランザクションを並列に処理することは、メモリアクセストランザクションの２つ以上の部分が、同時並行して共有メモリにディスパッチされてよいことを意味する。すなわち第１のメモリアクセストランザクションが終了していなくても、第２のメモリアクセストランザクションの一部分は共有メモリ１１０にディスパッチされてよい。
【００３３】
メモリアクセストランザクションの処理においてトランザクションスキャナ２１０は、各メモリアクセストランザクションを、それのそれぞれのビートレベルメモリアクセスコマンドに分割し、または分ける（ｂｒｅａｋ）。次いでビートレベルコマンド（ＲＥＱ）は、物理メモリブロック２５０−１から２５０−Ｎ内のアドレスに従って、コマンドスーパーアービタ２２０内の適切なコマンドアービタ２３０に転送される。したがって、トランザクションスキャナ２１０によって受信された各メモリアクセストランザクション（例えば読み出しまたは書き込み）に対して、トランザクションスキャナ２１０は、２つ以上のビートレベルメモリアクセスコマンド（ＲＥＱ）を出力してよい。また所与のメモリアクセストランザクションに関連付けられたビートレベルメモリアクセスコマンドは、異なるコマンドアービタ２３０に渡されてよいことに留意されたい。例えば読み出しトランザクションのためのビートレベル読み出しコマンドの１つはコマンドアービタ２３０−１に、もう１つはコマンドアービタ２３０−２になどと、送られてよい。
【００３４】
上述のように各コマンドアービタ２３０は、物理メモリブロックの１つに対応してよい。例えば各コマンドアービタ２３０は、共有メモリブロック２５０の１つに対する調停を制御してよい。物理メモリブロック２５０−１から２５０−Ｎは、共有メモリ１１０の一実施形態である。一実施形態において物理メモリブロック２５０−１から２５０−Ｎは、物理メモリバンクである。一実施形態において物理メモリブロック２５０は、インターリーブされた物理メモリバンクである。一実施形態において物理メモリブロック２５０は、直線的にアドレス指定されたメモリバンクである。物理メモリブロック２５０−１から２５０−Ｎは、同じデータ幅または異なるデータ幅を有してよい。データ幅は、物理メモリブロック２５０へのインターフェース（例えばデータバス）の幅を指す。一実施形態において物理メモリブロックのデータ幅は、その物理メモリブロックに対するビートサイズに対応する。これは異なるメモリブロック２５０は異なるビートサイズを有することができることを意味する。したがってトランザクションスキャナ２１０は、各メモリアクセストランザクションをそれのそれぞれのビートレベルメモリアクセスコマンドに分割するとき、メモリアクセストランザクションを、コマンドアービタ２３０がどの物理メモリブロック２５０に対応するかに応じて、適切なサイズのビートに分ける（ｂｒｅａｋ）。
【００３５】
コマンドアービタ２３０−１から２３０−Ｎのそれぞれは、トランザクションスキャナ２１０に結合され、ビートレベルメモリアクセスコマンドを１つまたは複数の基準に従って調停するように構成される。例示の基準は、ビートレベルメモリアクセスコマンドに関連付けられたトランザクションに割り当てられた優先度、ビートレベルメモリアクセスコマンドが、共有メモリにディスパッチされるためにどれだけ多くのクロックサイクルだけ待機しているか、ビートレベルメモリアクセスコマンドがどれだけクリティカルであるか、トランザクションに対するタイミングバジェット、トランザクションに関連付けられたモードに対する共有メモリ帯域幅割り振りを含むが、それらに限定されない。これらの基準の任意の組み合わせ、または他の基準が用いられることができる。
【００３６】
各コマンドアービタ２３０は、それが処理するビートレベルメモリアクセスコマンドのそれぞれに、スケジューリング重みを割り当ててよい。より高いスケジューリング重みを有するビートレベルメモリアクセスコマンドは、より低いスケジューリング重みを有するものより前に、共有メモリ１１０にディスパッチされてよい。各コマンドアービタ２３０は、それが、それの物理メモリブロック２５０に対するビートレベルメモリアクセスコマンドのシーケンス（ＳＥＱ）に処理する、ビートレベルメモリアクセスコマンドを順序付けてよい。例えばコマンドアービタ２３０−１は、それが物理メモリブロック２５０−１に対するビートレベルメモリアクセスコマンドのシーケンスに処理する、ビートレベルメモリアクセスコマンドを順序付けてよい。各コマンドアービタ２３０はシーケンス（ＳＥＱ）をコンバイナ２４０に送ってよく、これは物理メモリブロック２５０への、適切なビートレベルメモリアクセスコマンドの実際のディスパッチを取り扱ってよい。調停は、コマンドアービタ２３０−１から２３０−Ｎの間で並列に遂行されてよい。
【００３７】
読み出しデータ／書き込み応答コンバイナ２４０は、物理メモリブロック２５０−１から２５０−Ｎ、ならびにコマンドスーパーアービタ２２０およびトランザクションスキャナ２１０に結合される。ビートレベル書き込みコマンドの遂行において、書き込みアドレス（ＷＡ）および書き込みデータ（ＷＡＤ）は、適切な物理メモリブロックにディスパッチされる。物理メモリブロックは、ビートレベル書き込み応答（ＢＷＲ）を書き込み応答コンバイナ２４０に返して、ビートレベル書き込みコマンドが対処されたことを確認する。各ビートレベル応答を、書き込みトランザクション応答（ＷＴＲ）において発信元のプロセッサに渡し戻すのではなく、読み出しデータ／書き込み応答コンバイナ２４０は、ビートレベル書き込み応答を集め、それらをトランザクションに対する単一の書き込み応答（ＷＲＥＳＰ）に組み合わせてよく、これはトランザクションスキャナ２１０に送られてよい。次いで単一の書き込み応答は、トランザクションを指令したプロセッサに、書き込みトランザクション応答（ＷＴＲ）において渡し戻されてよい。
【００３８】
ビートレベル読み出しコマンドの遂行において、読み出しアドレス（ＲＡ）は適切な物理メモリブロックにディスパッチされ、そのビートに対する読み出しデータ（ＢＲＤ）が返される。読み出しデータ／書き込み応答コンバイナ２４０は、物理メモリブロックからの様々なビートレベル読み出しデータ（ＢＲＤ）を集め、それをトランザクションに対する読み出しデータ応答（ＲＤ）に組み合わせてよく、これはトランザクションスキャナ２１０に送られてよい。次いで読み出しデータ応答（ＲＤ）は、トランザクションを指令したプロセッサに、読み出しトランザクション応答（ＲＴＲ）において渡し戻されてよい。
【００３９】
一実施形態において読み出しデータ／書き込み応答コンバイナ２４０は、読み出しデータ応答（ＲＤ）を読み出しトランザクション応答（ＲＴＲ）において、トランザクションスキャナ２１０に送り返す前に、所与のトランザクションのためのすべてのビートレベル読み出しデータコマンドが完了するのを待機しない。これは共有メモリコントローラ１２０が、トランザクションに関連付けられたすべてのビートレベル読み出しデータコマンドが完了する前に、読み出し応答をマスタに送ることを可能にする。したがってマスタは、より（または最も）クリティカルな読み出しデータをより速く受信することができる。
【００４０】
スーパーバイザ２６０は、特定のマスタに関する構成情報を受信し、それを用いて、そのマスタに対するトランザクションが、共有メモリコントローラ１２０によってどのように調停されることになるかを構成する。構成情報は、構成インターフェースにおいて提供されてよい。例えばＳｏＣにおけるプロセッサ上で実行するソフトウェアは、構成情報をスーパーバイザ２６０に提供することができる。スーパーバイザ２６０は、トランザクションスキャナ２１０、コマンドスーパーアービタ２２０、およびコンバイナ２４０に、これらの要素が各マスタからのトランザクションをどのように処理するかを構成するために、結合される。所与のマスタに対する構成情報は、動的とすることができることに留意されたい。例えば構成情報は時間と共に、構成インターフェースを介して更新されてよい。またマスタは、動作条件に基づいて構成情報を更新することができる。したがって構成情報は、同じマスタに関連付けられた異なるトランザクションに対して、異なることができる。
【００４１】
構成情報は、マスタのＱｏＳに関するものでよい。例えば構成情報は、マスタに対するメモリアクセストランザクションが、タイミング感知（ｓｅｎｓｉｔｉｖｅ）として、又は帯域幅感知として扱われるべきかを指定してよい。タイミング感知の例は、要求されたデータの一部分が他の部分よりクリティカルであるものである。例えばＣＰＵは、最初にデータの１つのワードに対するＬ１キャッシュルックアップを行うことがあり、キャッシュミスという結果となる。次いでＣＰＵは、キャッシュライン全体を満たすように、共有メモリ１１０からデータの８ワードを要求するトランザクションを送ってよい。この例においてＣＰＵは実際に、直ちにデータの他の７ワードを必要としないことがあるが、ＣＰＵは８ワードに対してＣＰＵキャッシュフィルポリシーに適合するように要求を行う。この例においてキャッシュミスに関連付けられたワードは、「最もクリティカルなワード」と呼ばれてよい。一実施形態において共有メモリコントローラ１２０は、トランザクションにおける最もクリティカルなワードを他のワードより高速に提供するように、ビートレベル読み出しコマンドを調停する。例えば共有メモリコントローラ１２０は、トランザクションに関連付けられたデータのすべてが共有メモリ１１０からアクセスされる前に、最もクリティカルなワードをＣＰＵに送り返すことができる。帯域幅izonゅょの例は、マスタがトランザクションに関連付けられたデータのすべてを、単にできるだけ早く得ることを望むことである。
【００４２】
ＱｏＳに関する構成情報の別の例は、トランザクションに対するタイミングバジェットである。一実施形態において共有メモリコントローラ１２０は、トランザクションがタイミングバジェットを満たすことを助けるために、ビートレベルメモリアクセスコマンドの優先度を段階的に拡大する。
【００４３】
ＱｏＳに関する構成情報の別の例は、帯域幅割り振り情報である。各マスタには異なるモードが割り当てられてよい。例えば無線領域においては、ユニバーサル移動体通信システム（ＵＭＴＳ）モード、ロングタームエボリューション（ＬＴＥ）モード、移動体通信用グローバルシステム（ＧＳＭ）モードなどが存在してよい。各モードには、共有メモリ１１０のアクセスに関して、一定の帯域幅が割り振られてよい。例えばモードＡには帯域幅の６２パーセントが割り振られてよく、モードＢには帯域幅の３１パーセントが割り振られてよく、モードＣには帯域幅の７パーセントが割り振られてよい。一実施形態において共有メモリコントローラ１２０は、ビートレベルメモリアクセスコマンドを、ビートレベルメモリアクセスコマンドに関連付けられたトランザクションを送ったマスタのモードに基づいて絞る。
【００４４】
ＱｏＳ情報は、トランザクションに関連付けられた側波帯情報において、共有メモリコントローラ１２０によってアクセスされてもよいことに留意されたい。例えば優先度、タイミングバジェット、帯域幅割り振り、帯域幅割り振りを示すモードなどは、マスタからの側波帯情報において提供されることができる。戻って図１を参照すると、側波帯情報は相互接続部１３５上で送られることができる。側波帯情報は、トランザクションとは別々に送られてよい。
【００４５】
ＱｏＳ情報はまた、トランザクションの一部として送られることができる。例えばトランザクション内に、この特定のトランザクションの優先度を指定するフィールドが存在してよい。これは例えば、このトランザクションがどれだけ重要かを示す、２または３ビットとすることができる。
【００４６】
一実施形態においてコマンドスーパーアービタ２２０は、構成情報に応じて異なるスケジューリング重み付け方式を使用する。例えば１つの方式は、トランザクションの優先度、およびどれだけ長くビートレベルメモリアクセスコマンドが待機しているかを要因として含めることができる。別の方式は、トランザクションの優先度、どれだけ長くビートレベルメモリアクセスコマンドが待機しているか、およびトランザクション内の各ビートレベルメモリアクセスコマンドがどれだけクリティカルであるかを要因として含めることができる。さらに他の方式が用いられることができる。さらにプロセッサに対するスケジューリング重み付け方式は、動的に計算され、調整されることができる。
【００４７】
図３は３つの共有メモリトランザクション、トランザクション３００、トランザクション３２０、およびトランザクション３４０の図である。トランザクション３００は４つのビート、ビート３１０−１から３１０−４を含む。トランザクション３２０は２つのビート、ビート３３０−１および３３０−２を含む。トランザクション３４０は３つのビート、ビート３５０−１、３５０−２、および３５０−３を含む。
【００４８】
図４は、共有メモリのためのコントローラ４００の実施形態を通って流れる、図３の共有メモリトランザクションの図である。コントローラ４００は、図２のトランザクションスキャナ２１０およびコマンドスーパーアービタ２２０を含む。トランザクション３００、トランザクション３２０、およびトランザクション３４０は、トランザクション４１０−１、トランザクション４１０−２、およびトランザクション４１０−３の３つの対応する読み出し／書き込みトランザクションの形で、トランザクションスキャナ２１０に同時に到着してよい。この例において３つのメモリアクセストランザクションは、３つの異なるマスタによって送られる。トランザクションスキャナ２１０は、３つの読み出し／書き込みトランザクションを同時並行してスキャンインし、それぞれをそれのそれぞれのビートレベルメモリアクセスコマンドに分割する。トランザクションスキャナ２１０は、トランザクション３００をビート３１０−１から３１０−４に、トランザクション３２０をビート３３０−１および３３０−２に、トランザクション３４０をビート３５０−１、３５０−２、および３５０−３に分割する。
【００４９】
次いでビートレベルコマンドは、コマンドスーパーアービタ２２０に渡される。いくつかの実施形態においてトランザクションスキャナ２１０は、コマンドスーパーアービタ２２０に直接接続によって接続され、他の実施形態においてそれらは、スイッチングファブリック、パケットネットワークなどの相互接続部によって接続される。ビートレベルメモリアクセスコマンドのそれぞれは、それの宛先メモリアドレスに従ってコマンドアービタに渡る。次いでコマンドアービタは、ビートレベルメモリアクセスコマンドが、コントローラ４００が結合された様々な物理メモリブロックにディスパッチされることになるシーケンスを決定する。一実施形態においてシーケンスは、トランザクション３００、３２０、および３４０のそれぞれに対する調停方式に従って決定される。
【００５０】
図５は、図２のコマンドアービタ２３０の一実施形態の図である。コマンドアービタ２３０は、１つの物理メモリブロック２５０に対するビートレベルメモリアクセスコマンドをスケジューリングしてよい。この例においてコマンドアービタ２３０は、ビートレベルメモリアクセスコマンド５０２−１から５０２−４をスケジューリングする。４つのビートレベルメモリアクセスコマンド５０２−１から５０２−４は、共有メモリ１１０にまだディスパッチされていないビートレベルメモリアクセスコマンドを表す。必要ではないが、ビートレベルメモリアクセスコマンド５０２−１から５０２−４のそれぞれは、異なるトランザクションに関連付けられることが可能である。任意の時点において、コマンドアービタ２３０によってスケジューリングされる、４つより多いまたは少ないビートレベルメモリアクセスコマンドが存在してよい。
【００５１】
コマンドアービタ２３０は、遅延マネージャ５０４−１から５０４−４、優先度計算５０６−１から５０６−４、要求スケジューラ５１０、およびキュー５２０を備える。遅延マネージャ５０４−１から５０４−４、優先度計算５０６−１から５０６−４、および要求スケジューラ５１０は、レジスタおよび／または組み合わせ論理を含む論理によって実施されてよいが、それらに限定されない。
【００５２】
この実施形態においてコマンドアービタ２３０は、各ビートレベルメモリアクセスコマンドに、遅延および優先度に基づいてスケジューリング重みを割り当てる。例えば遅延マネージャ５０４−１および優先度計算５０６−１は、ビートレベルメモリアクセスコマンド５０２−１に対するスケジューリング重みを決定する。他の遅延マネージャ５０４−２から５０４−４、および優先度計算５０６−２から５０６−４は、ビートレベルメモリアクセスコマンド５０２−２から５０２−４にスケジューリング重みを割り当てる。一実施形態においてコマンドアービタ２３０は、クロックサイクルごとに、共有メモリにまだディスパッチされていない任意のビートレベルメモリアクセスコマンドに、新しいスケジューリング重みを割り当てる。
【００５３】
一実施形態において遅延は、ビートレベルメモリアクセスコマンドが、共有メモリにディスパッチされるために、コマンドアービタ２３０においてどれだけ多くのクロックサイクルだけ待機しているかである。一実施形態において優先度は、ビートレベルメモリアクセスコマンドに関連付けられたトランザクションの優先度である。コマンドアービタ２３０がこれら２つのパラメータを要因として含めることができる多くの方法がある。一例は式１に示される。
【００５４】
【数１】
0006755935.tif 000002
【００５５】
式１において「Ｗ」はビートレベルメモリアクセスコマンドに対するスケジューリング重み、「ｄ」はクロックサイクルでの、ビートレベルメモリアクセスコマンドによって経験される遅延、および「ｐ」はビートレベルメモリアクセスコマンドに関連付けられたトランザクションの優先度である。優先度は、トランザクションにおける数ビットの情報として提供されてよい。優先度は、４ビットの例を用いて１と１６の間の値とすることができる。式１において、より高い優先度は、より高い値として表される。一実施形態において「ｐ」は、ビートレベルメモリアクセスコマンドに関連付けられたトランザクションの優先度に基づくが、時間と共に変化することができる。これの例は、式２に関して以下で論じられる。
【００５６】
式１において遅延は、定数であるスケーリングファクタ「ｂ」によって除算される。スケーリングファクタは２のべき乗でよく、これは、除算はシフトによって行われることができるので、効率的な計算に役立つ。例として「ｂ」は４、８、１６、３２などとすることができる。他の２のべき乗が用いられてもよい。しかしクロックサイクルでの遅延が、何らかの２のべき乗で除算されることは必要ではない。また遅延は、クロックサイクル以外の方式で表されることができる。式１において「ａ」も定数である。一例として「ａ」は２である。しかし「ａ」は別の値を有することができる。
【００５７】
一実施形態において遅延マネージャ５０４および優先度計算５０６は、式１の計算を行う。そうするために遅延マネージャ５０４は、それが処理しているビートレベルメモリアクセスコマンドが、共有メモリにディスパッチされるために待機しているクロックサイクルの数を追跡してよい。優先度計算５０６−１から５０６−４は優先度Ｐ１からＰ４を入力し、これらはそれぞれのビートレベルメモリアクセスコマンドに関連付けられたトランザクションの優先度でよい。
【００５８】
各ビートレベルメモリアクセスコマンド５０２に対するスケジューリング重みに基づいて、要求スケジューラ５１０はキュー５２０を形成する。キュー５２０は、ビートレベルメモリアクセスコマンドが、このコマンドアービタ２３０に関連付けられた物理メモリブロック２５０にディスパッチされることになる順序を表す。例えば式１によって表される待ち時間認識型係数は、ビートレベルメモリアクセスコマンドがキュー５２０上で行き詰まることを防止することに留意されたい。例えば、それの関連付けられたトランザクションがより高い優先度を有するビートレベルメモリアクセスコマンドが、キュー上に置かれ続けても、それの関連付けられたトランザクションがより低い優先度を有するビートレベルメモリアクセスコマンドは、共有メモリにディスパッチされるための待機が増加するのに応答して、事実上キュー内のより高い位置に昇格されてよい。
【００５９】
時間と共にビートレベルメモリアクセスコマンド５０２のスケジューリング重みは、遅延値が変化することにより、変化できることに留意されたい。要求スケジューラ５１０は情報を遅延マネージャ５０４にフィードバックし、その結果遅延マネージャはそれのビートレベルメモリアクセスコマンドがディスパッチされたかどうかを知る。したがってそれのビートレベルメモリアクセスコマンドがディスパッチされない限り、遅延マネージャ５０４は、クロックサイクルごとに遅延をインクリメントし、新しい遅延値を優先度計算５０６に出力してよい。時にはスケジューリング重みは、最大値に達することができる。このケースにおいてスケジューリング優先度は、ビートレベルメモリアクセスコマンドが最大値に達する順序に基づいてよい。
【００６０】
一実施形態においてビートレベルメモリアクセスコマンドの優先度は、ビートレベルメモリアクセスコマンドが共有メモリ１１０にディスパッチされるために待機するのに従って、変化することができる。一例としてこれは、トランザクションに対するタイミングバジェットを満たすことを助けるためになされてよい。式２は、ビートレベルメモリアクセスコマンドに対する優先度を、遅延の関数とする一例を提供する。
【００６１】
（２）  ｐ＝ｆ（ｔ−ｄ）
【００６２】
式２において「ｔ」は、ビートレベルメモリアクセスコマンドに関連付けられたトランザクションのためのタイミングバジェットに対するパラメータを表す。やはり「ｄ」は、ビートレベルメモリアクセスコマンドに対する遅延を、例えばクロックサイクルで表す。式２において「ｆ」は、パラメータｔおよびｄに適用される何らかの関数を表す。式２の解釈は、「ｔ−ｄ」が小さいほど、「ｐ」は大きくなることである。これは遅延が増加するのに従って、優先度（ｐ）は増加することを示す。これはトランザクションのためのビートレベルメモリアクセスコマンドのすべてが、そのトランザクションに対するタイミングバジェットを満たすことを助けることができる。
【００６３】
一実施形態において優先度計算５０６−１から５０６−４に供給される値Ｐ１からＰ４は、式２に基づいてそれぞれの遅延マネージャ５０４−１から５０４−４によって計算される。タイミングバジェットに基づいてトランザクションの優先度を変更するために、他の実装形態が用いられてよい。
【００６４】
図６は、図２のコマンドアービタ２３０の別の実施形態の図である。この実施形態は、図５のコマンドアービタ２３０の一実施形態と同様であるが、ビートレベル優先度情報を追加する。例えば優先度計算５０６−１から５０６−４は、ビートレベル優先度情報Ｂ１からＢ４を入力する。これはコマンドアービタ２３０が、トランザクションのクリティカルな部分に対して待ち時間感知となるようにする。例えばコマンドアービタ２３０は、クリティカルビート待ち時間感知としてよい。
【００６５】
一実施形態においてコマンドアービタ２３０は、各ビートレベルメモリアクセスコマンドにスケジューリング重みを、各ビートレベルメモリアクセスコマンドの遅延、ビートレベルメモリアクセスコマンドに関連付けられたトランザクションの優先度、およびビートレベルメモリアクセスコマンドがトランザクションにとってどれだけクリティカルであるかに基づいて割り当てる。
【００６６】
一実施形態において図５の例でのように遅延は、ビートレベルメモリアクセスコマンドが、共有メモリにディスパッチされるために、コマンドアービタ２３０においてどれだけ多くのクロックサイクルだけ待機しているかとしてよい。
【００６７】
コマンドアービタ２３０がこれら３つのパラメータを要因として含めることができる多くの方法がある。一例は式３に示される。
【００６８】
【数２】
0006755935.tif 000003
【００６９】
式３において「Ｗ」はビートレベルメモリアクセスコマンドに対するスケジューリング重み、「ｄ」はクロックサイクルでの、ビートレベルメモリアクセスコマンドによって経験される遅延、および「ｐ」はビートレベルメモリアクセスコマンドに関連付けられたトランザクションの優先度である。優先度は静的な値でよく、または式２に関して上述されたように、ビートレベルメモリアクセスコマンドがスケジューリングされるために待機するのに従って動的に調整されてよい。式３において「ｃ」はスケーリングファクタであり、これは定数である。これは、式１におけるスケーリングファクタ「ｂ」と同様な役割を果たす。
【００７０】
一実施形態においてｂｅａｔ＿ｐｒｉｏｒｉｔｙは、ビートがトランザクションにとってどれだけクリティカルであるかに依存する。式３において最もクリティカルなビートは、ｂｅａｔ＿ｐｒｉｏｒｉｔｙに対して最も高い値を受け取る。必要ではないが、トランザクション内の各ビートに対して、異なるｂｅａｔ＿ｐｒｉｏｒｉｔｙを有することが可能である。
【００７１】
ｂｅａｔ＿ｐｒｉｏｒｉｔｙを割り当てることを助けるために、トランザクション内の各ビートにビート識別子（ｂｅａｔ＿ＩＤ）が割り当てられてよい。例えばトランザクション内に１６個のビートがある場合、それらは０から１５のｂｅａｔ＿ＩＤで順序付けられてよい。一例としてビートは、ｂｅａｔ＿ＩＤに従ってクリティカルさにおいて順序付けられてよく、最もクリティカルなビートには０のｂｅａｔ＿ＩＤが割り当てられてよい。一実施形態においてｂｅａｔ＿ｐｒｉｏｒｉｔｙは、式３での計算の論理を簡略化するために、２のべき乗である。例えばｂｅａｔ＿ＩＤ０には、８のｂｅａｔ＿ｐｒｉｏｒｉｔｙが割り当てられてよく、ｂｅａｔ＿ＩＤ１から３には、４のｂｅａｔ＿ｐｒｉｏｒｉｔｙが割り当てられてよく、ｂｅａｔ＿ＩＤ４から７には、２のｂｅａｔ＿ｐｒｉｏｒｉｔｙが割り当てられてよく、ｂｅａｔ＿ＩＤ８以上には、１のｂｅａｔ＿ｐｒｉｏｒｉｔｙが割り当てられてよい。
【００７２】
一実施形態において共有メモリコントローラ１２０は、トランザクションに基づいて最もクリティカルなビートを識別する。例えばトランザクションは、Ｌ１キャッシュミスの結果としてよい。このケースにおいてマスタは、トランザクションにおいてデータのすべてが要求されることを不要とすることができる。共有メモリコントローラ１２０は、０のｂｅａｔ＿ＩＤをキャッシュミスに関連付けられたビートに割り当ててよい。他のビートには、共有メモリ内のそれらのアドレスに基づいてｂｅａｔ＿ＩＤが割り当てられることができる。例えばアドレスが増加するのに従って、ｂｅａｔ＿ＩＤは増加する。しかし最もクリティカルなビートは、必ずしも最も低いアドレスを有するものではないことに留意されたい。したがって最も高いアドレスを有するビートの後に、最も低いアドレスを有するビートに次のｂｅａｔ＿ＩＤが割り当てられることができる。次いで、すべてのビートにｂｅａｔ＿ＩＤが割り当てられるまで、漸進的により高いアドレスには、より高いｂｅａｔ＿ＩＤというパターンが再開されることができる。
【００７３】
マスタは、トランザクション内に情報を提供することによって、どのビートが最もクリティカルなビートであるかをシグナリングすることができる。例えばマスタは、トランザクションのどの部分がキャッシュミスに関連付けられるかを示してよい。しかし共有メモリコントローラ１２０が最もクリティカルなビートを決定するために、他の技法が用いられることができる。
【００７４】
式３における優先度は、式２に関して論じられたように、タイミングバジェットを満たすように調整されることができることに留意されたい。式２は、遅延が増加するのに従って優先度（ｐ）は増加することを示すことを想起されたい。これはトランザクションのためのビートレベルメモリアクセスコマンドのすべてが、そのトランザクションに対するタイミングバジェットを満たすことを助けることができる。
【００７５】
図７は、共有メモリを制御する処理７００の一実施形態のフロー図である。方法は、共有メモリコントローラ１２０の一実施形態によって行われる。方法の様々なステップは、図１または２の共有メモリコントローラ１２０、ならびに図５および６のコマンドアービタ２３０によって行われてよい。したがって図７を論じるとき、それらの図内の要素への参照がなされる。しかし図７の方法は、図１または２の共有メモリコントローラ１２０、または図５または６のコマンドアービタ２３０に限定されない。
【００７６】
ステップ７１０は、マスタから、共有メモリ１１０にアクセスするためのメモリアクセストランザクションを受信することを含む。一実施形態においてこれらのトランザクションは、トランザクションスキャナ２１０によって受信される。一実施形態においてメモリアクセストランザクションは、トランザクションスキャナ２１０によって同時並行してスキャンインされる。複数のメモリアクセストランザクションは、例えばプロセッサコア、プロセッサ、ＣＰＵ、ＤＳＰ、ＨＡＣなどの１つまたは複数のマスタから生じることができる。各メモリアクセストランザクションは、１つまたは複数のビートに分割可能であり、そのサイズは、共有メモリコントローラ１２０がそれを通じて共有メモリ１１０にアクセスする、相互接続部１４０のバス幅に依存してよい。
【００７７】
ステップ７２０は、メモリアクセストランザクションを、トランザクションのためのビートレベルメモリアクセスコマンドに分割することを含む。トランザクションのそれぞれは少なくとも１つのビートレベルメモリアクセスコマンドに分割され、トランザクションのうちの少なくとも１つは複数のビートレベルメモリアクセスコマンドに分割される。潜在的にトランザクションのすべてが、複数のビートレベルメモリアクセスコマンドに分割されることができる。一実施形態においてトランザクションスキャナ２１０が、ステップ７２０を行う。ビートレベルメモリアクセスコマンドのそれぞれは、共有メモリ１１０内の特定のアドレスに向かう。所与のトランザクションに対して、各ビートレベルメモリアクセスコマンドに対する共有メモリアドレスは異なることができる。所与のトランザクションは、データを共有メモリの複数の物理ブロックに書き込ませ、またはそれらから読み出させることができる。
【００７８】
ステップ７３０は、トランザクションのそれぞれに対するＱｏＳにアクセスすることを含む。ステップ７３０は、コマンドスーパーアービタ２２０がトランザクションに対するＱｏＳを受信する、決定し、または読み出すことを含むが、それらに限定されない。いくつかのケースにおいてこれは、トランザクションを送ったマスタのＱｏＳにアクセスすることを意味してよいことに留意されたい。例えば、時にはマスタに対するＱｏＳは変化せず、またはまれに変化する。しかしいくつかのケースにおいてＱｏＳは、所与のマスタに対する１つのトランザクションから次のトランザクションへと変化することができる。
【００７９】
ＱｏＳは、トランザクション内の構成情報、側波帯情報から、または他の方法でアクセスされることができる。ステップ７３０は、スーパーバイザ２６０が、記憶された構成情報をトランザクションスキャナ２１０、コマンドスーパーアービタ２２０、またはコンバイナ２４０にいずれかに提供することを含んでよい。ステップ７３０は、トランザクション自体からの情報にアクセスすることを含んでよい。例えばトランザクションは、優先度ビットを含んでよい。ステップ７３０は、マスタから帯域外情報にアクセスすることを含んでよい。帯域外情報は、マスタから相互接続部１３５−１から１３５−６の１つ上で受信されることができる。
【００８０】
ステップ７４０は、トランザクションのそれぞれに関連付けられたビートレベルメモリアクセスコマンドを、それぞれのトランザクションに対するＱｏＳに基づいて調停することを含む。一実施形態においてステップ７４０は、トランザクションのそれぞれに対するＱｏＳに基づく調停方式を選択することを含む。ステップ７４０は、トランザクションを送ったマスタに対するＱｏＳ、および／またはトランザクション自体に対するＱｏＳを認識する方式で、ビートレベルメモリアクセスコマンドを調停するという結果となる。すなわち、所与のマスタに対する異なるトランザクションは、同じまたは異なるＱｏＳを有することができる。
【００８１】
ビートレベルメモリアクセスコマンドは、調停ステップ７４０において同時並行に調停されてよい。調停は、共有メモリ１１０の物理ブロック２５０に対応するコマンドアービタ２３０を介して、共有メモリの各物理ブロックに対して並列に遂行されてよい。コマンドアービタ２３０は、読み出しアービタおよび書き込みアービタを有することができ、ビートレベル読み出しコマンドおよびビートレベル書き込みコマンドの独立の調停を可能にする。調停は、ビートレベルメモリアクセスコマンドのシーケンスを、それらのそれぞれのトランザクションの調停ポリシーに従って決定するように、共有メモリ１１０の物理ブロック２５０ごとに同時並行に遂行されてよい。
【００８２】
ステップ７５０は、ビートレベルメモリアクセスコマンドを、調停ステップ７４０の結果に基づいて共有メモリ１１０にディスパッチすることを含む。所与のトランザクションのためのビートレベルメモリアクセスコマンドは、異なる物理メモリブロック２５０にディスパッチされてよいことに留意されたい。したがって所与のトランザクションのためのビートレベルメモリアクセスコマンドは、異なるスケジューリングキュー上にあってよい。これは、必要ではないが、所与のトランザクションのビートレベルメモリアクセスコマンドの並列ディスパッチ（ならびに並列実行）を可能にする。
【００８３】
ステップ７６０において共有メモリコントローラ１２０は、トランザクションへの応答をマスタに返してよい。これは組み合わせるステップを含んでよい。組み合わせるステップは、それぞれの読み出しトランザクションに対するデータおよび応答を統合してよい。同様に組み合わせるステップは、それぞれの書き込みトランザクションに対する応答を統合してよい。
【００８４】
読み出しトランザクション時に、組み合わせるステップにおいて、ビートレベル読み出しデータは、共有メモリ１１０の様々な物理ブロック２５０から集められてよい。対応するトランザクションに対するすべての読み出しデータが集められた後、単一の読み出しデータ応答がマスタに向かって渡し戻されてよい。一実施形態において共有メモリコントローラ１２０は、マスタに応答を送り始める前に、様々なビートレベルメモリアクセスコマンドからの読み出しデータのすべてが完了するのを待機しない。例えばより（または最も）クリティカルなビートに対する読み出しデータは、他のビートが完了する前にマスタに送られてよい。
【００８５】
書き込みトランザクション時に、共有メモリ１１０の様々な物理ブロック２５０は、ビートレベル書き込み応答を生成して、ビートレベル書き込みコマンドが対処されたことを確認する。組み合わせるステップにおいてビートレベル書き込み応答は、共有メモリ１１０の様々な物理ブロック２５０から集められてよく、単一の書き込み応答がマスタに向かって渡し戻されてよい。
【００８６】
図８は、ビートレベルメモリアクセスコマンドを、それぞれのトランザクションに対するＱｏＳに基づいて調停する処理８００の一実施形態のフローチャートである。処理は、共有メモリコントローラ１２０の一実施形態によって行われる。これは、図７からのステップ７４０の一実施形態である。ステップ８１０において共有メモリコントローラ１２０は、トランザクションがタイミング感知か、又は帯域幅感知かを決定する。タイミング感知とは、トランザクションの一定の部分は、トランザクションの他の部分が共有メモリによって、より遅く処理されることを犠牲にしても、共有メモリによって、より速く処理されるべきであることを意味する。帯域幅感知とは、トランザクションの１つの部分に対する所与の優先度なしに、トランザクション全体が共有メモリによって速やかに処理されるべきであることを意味する。
【００８７】
一例としてＣＰＵは、トランザクションからの読み出しデータの一定の部分をできるだけ速く受信することについて最も関心をもつという点で、タイミング感知としてよい。ＣＰＵは、所与のトランザクションに対する読み出しデータのすべてを受信することにおける遅延には、関心をもたないことがある。これはＬ１キャッシュミスに応答して、ＣＰＵがＬ２共有メモリからキャッシュラインを要求するときに当てはまることがある。帯域幅感知の例は、プロセッサが、トランザクションに関連付けられたデータのすべてを、単にできるだけ早く得ることを望むことである。これはレンダリング応用例を行うプロセッサに対して当てはまることがあるが、多くの他の例が存在する。ステップ８１０の決定は、スーパーバイザ２６０によって記憶された、それぞれのマスタに対する構成情報に基づいてよい。
【００８８】
ステップ８１０の決定に基づいて共有メモリコントローラ１２０は、タイミングを優遇するビートレベル調停（ステップ８２０）、または帯域幅を優遇するビートレベル調停（ステップ８３０）のいずれかを行う。タイミングを優遇するビートレベル調停の一例は、式３において提供される。式３は、クリティカルビート感知であることに留意されたい。したがってステップ８２０は、トランザクションのためのすべてのビートレベルメモリアクセスコマンドをディスパッチすることより、トランザクションのための最もクリティカルなビートレベルメモリアクセスコマンドをディスパッチすることを優遇する、スケジューリング重み付け方式を使用することを含んでよい。ステップ８２０は、ビートレベルメモリアクセスコマンドがよりクリティカルであるほど、より高いスケジューリング重みをトランザクションに与えるスケジューリング重み付け方式を使用することを含んでよい。これは、最もクリティカルなビートレベルメモリアクセスコマンドに、最も高いスケジューリング重みを与えることを含んでよい。
【００８９】
一実施形態においてステップ８２０は、同じトランザクションに関連付けられた２つのビートレベルメモリアクセスコマンドに、異なるスケジューリング重みを割り当てることを含む。これは所与のトランザクションにおける様々なビートレベルメモリアクセスコマンドが、他より速くまたは遅く共有メモリにディスパッチされることを可能にしてよい。一例としてステップ８２０は、同じトランザクションに関連付けられた２つのビートレベルメモリアクセスコマンドに、それぞれの２つのビートレベルメモリアクセスコマンドがトランザクションにとってどれだけクリティカルであるかに基づいて、異なるスケジューリング重みを割り当てることを含む。言い換えれば共有メモリコントローラは、同じトランザクションに関連付けられた２つのビートレベルメモリアクセスコマンドに、それぞれの２つのビートレベルメモリアクセスコマンドがマスタにとってどれだけクリティカルであるかに基づいて、異なるスケジューリング重みを割り当てる。
【００９０】
帯域幅を優遇する１つの例示のビートレベル調停は、式１において提供される。したがってステップ８３０においてビートレベル調停は、式１に基づいてよい。式１は、所与のビートレベルメモリアクセスコマンドが、共有メモリにディスパッチされるためにどれだけ長く待機しているかを要因として含めるという点で、待ち時間感知であることに留意されたい。したがってその技法は、枯渇を避けるための助けとなる。それはまた帯域幅を増加させるための助けとなる。したがってステップ８３０は、トランザクションのためのビートレベルメモリアクセスコマンドのすべてを速やかにディスパッチすることを優遇する、スケジューリング重み付け方式を使用することを含んでよい。ステップ８３０は、トランザクションにおけるビートレベルメモリアクセスコマンドのすべてに同じスケジューリング重みを与える、スケジューリング重み付け方式を使用することを含んでよい。一実施形態においてステップ８３０は、トランザクションのためのビートレベルメモリアクセスコマンドのすべてを平等に扱う、スケジューリング重み付け方式を使用することを含む。
【００９１】
図９は、トランザクションに対するＱｏＳにアクセスし、トランザクションのそれぞれに関連付けられたビートレベルメモリアクセスコマンドをＱｏＳに基づいて調停する、処理９００の一実施形態のフローチャートである。これは図７からのステップ７３０および７４０の一実施形態である。
【００９２】
ステップ９１０において共有メモリコントローラ１２０は、トランザクションに対するタイミングバジェットにアクセスする。タイミングバジェットは、スーパーバイザ２６０によって記憶された、マスタに対する構成情報において指定されてよい。タイミングバジェットはまた、マスタから共有メモリコントローラ１２０に供給される、側波帯情報において供給されることができる。
【００９３】
ステップ９２０において、トランザクションのためのビートレベルメモリアクセスコマンドを処理しているコマンドアービタ２３０は、タイミングバジェットを満たすために、ビートレベルメモリアクセスコマンドのスケジューリング優先度を段階的に拡大する。式２は、タイミングバジェットを満たすために、どのようにスケジューリング重みが計算されることができるかの一例を示す。式２においてビートレベルメモリアクセスコマンドに対する優先度は、ビートレベルメモリアクセスコマンドが、共有メモリにディスパッチされるために長く待機するほど、増加されることを想起されたい。したがってスケジューリング優先度を段階的に拡大することは、ビートレベルメモリアクセスコマンドの優先度を動的に変化させることを含んでよい。
【００９４】
図１０は、トランザクションに対するＱｏＳにアクセスし、トランザクションのそれぞれに関連付けられたビートレベルメモリアクセスコマンドをＱｏＳに基づいて調停する、処理１０００の一実施形態のフローチャートである。これは図７からのステップ７３０および７４０の一実施形態である。
【００９５】
ステップ１０１０において共有メモリコントローラ１２０は、トランザクションのためのモードに対する帯域幅割り振りにアクセスする。例えば無線領域においては、ユニバーサル移動体通信システム（ＵＭＴＳ）モード、ロングタームエボリューション（ＬＴＥ）モード、移動体通信用グローバルシステム（ＧＳＭ）モードなどが存在してよい。これらのモードのそれぞれは、指定された帯域幅割り振りを有してよい。マスタに対するモードおよび／またはその帯域幅割り振りは、スーパーバイザ２６０に提供される構成情報において指定されることができる。この情報は、サービングエリアが決定された後に領域に対して設定されてよいので、他のＱｏＳ情報に比べてより静的としてよい。例えば北米における基地局内に配置されたＳｏＣは、ＬＴＥモードにおいて、より高い帯域幅を有することになる。モードは、この無線領域の例に限定されないことに留意されたい。マスタに割り振られた帯域幅が、動的に変化することも可能である。
【００９６】
ステップ１０１２において共有メモリコントローラ１２０は、トランザクションに関連付けられたモードに対する帯域幅割り振りに適合するように、ビートレベルメモリアクセスコマンドを絞る。例えば共有メモリコントローラ１２０は、トランザクションのためのモードに関連付けられたビートレベルメモリアクセスコマンドが、トランザクションのためのモードに対する割り振られた帯域幅を超えたとき、ビートレベルメモリアクセスコマンドが共有メモリにディスパッチされることを防止する。これは、別のモードに関連付けられたビートレベルメモリアクセスコマンドのグループが、それらの割り振られた帯域幅を受け取るための助けとなることに留意されたい。
【００９７】
一実施形態においてステップ１０１２は、トランザクションスキャナ２１０が、構成情報に基づいてコマンドスーパーアービタ２２０への要求を絞ることを含む。例えば、トランザクションに関連付けられたモードに対する帯域幅割り振りに達した場合、要求はトランザクションスキャナ２１０によって、コマンドスーパーアービタ２２０に送られない。帯域幅の割り振りを管理する一例は次の通りであり、１３クロックサイクルごとに、８クロックサイクルはモード１に与えられ、４クロックサイクルはモード２に与えられ、および１クロックサイクルはモード３に与えられることになる。したがってモード１は８／１３の帯域幅割り振りを有することになり、モード２は４／１３の帯域幅割り振りを有することになり、およびモード３は１／１３の帯域幅のみを有する。１つのモードがそれのスロット内で要求を有しない場合、このスロットは他のモードに関連付けられた他の要求に割り当てられることができる。
【００９８】
帯域幅割り振り情報は、コマンドスーパーアービタ２２０に渡されてもよく、これは帯域幅割り振りをビートレベルで達成できるからである。コマンドスーパーアービタ２２０は、トランザクションスキャナ２１０によって用いられるのと同じ帯域幅割り振りを使用することができる。コマンドスーパーアービタ２２０は、上記で論じられたフォーマットを用いて、同じモードでのすべての未処理の要求を調停してよい。したがって最終的な効果は、２レベルの調停処理であってよい。最初に、ビートレベルメモリアクセスコマンドが帯域幅割り振りを満足することを確実にするためのテストがなされてよい。帯域幅割り振りテストに合格しないビートレベルメモリアクセスコマンドは、絞られる。コマンドスーパーアービタ２２０は、ビートレベルメモリアクセスコマンドを、共有メモリにディスパッチされるためのコマンドのそれのキューに置かないことによって、ビートレベルメモリアクセスコマンドを絞ってよい。したがってビートレベルメモリアクセスコマンドの調停は、絞られなかったすべてのビートレベルメモリアクセスコマンドに対して、上記で論じられたスケジューリング重みに基づいて行われてよい。
【００９９】
図１１Ａは、物理メモリブロックに結合されたコマンドアービタおよびブロックコントローラの一実施形態の図である。読み出しアービタ２３０ａおよび書き込みアービタ２３０ｂは、図２のメモリコントローラにおけるコマンドアービタ２３０の一実施形態である。ブロックコントローラ１１０２は、コンバイナ２４０の一実施形態内にある。コンバイナ２４０の他の要素は、図１１Ａに示されない。
【０１００】
読み出しアービタ２３０ａは、ビートレベル読み出しコマンドの１つを、マルチプレクサ（ＭＵＸ）１１０４の１つの入力に提供する。書き込みアービタ２３０ｂは、ビートレベル書き込みコマンドの１つを、ＭＵＸ１１０４の別の入力に提供する。ブロックコントローラ１１０２は、物理メモリブロック２５０にディスパッチされることになるビートレベル読み出しコマンドまたはビートレベル書き込みコマンドのいずれかを選択するようにＭＵＸを制御する。一実施形態において物理メモリブロック２５０は、物理メモリバンクである。
【０１０１】
したがって図１１Ａの実施形態では、ある時点において物理メモリブロック２５０は、それから読み出されまたはそれに書き込まれてよい。しかしこの実施形態において物理メモリブロック２５０は、同時にはそれから読み出されおよびそれに書き込まれない。
【０１０２】
図１１Ｂは、物理メモリサブブロックに結合されたコマンドアービタおよびブロックコントローラの一実施形態の図である。この実施形態では、２つの物理メモリサブブロック２５０ａ、２５０ｂがある。一実施形態においてこれらのサブブロック２５０ａ、２５０ｂは、図１１Ａの物理メモリブロック２５０の２つの互いに異なる領域である。例えば一実施形態においてサブブロック２５０ａ、２５０ｂは、同じ物理メモリバンクの異なる物理的部分である。２つのサブブロック２５０ａ、２５０ｂは、異なるメモリアドレスに関連付けられる。
【０１０３】
この実施形態において１つのビートレベルメモリアクセスコマンドは物理メモリサブブロック２５０ａ内で実行することができ、別のビートレベルメモリアクセスコマンドは物理メモリサブブロック２５０ｂ内で実行することができる。例えばビートレベル読み出しコマンドは物理メモリサブブロック２５０ａ内で実行することができ、ビートレベル書き込みコマンドは物理メモリサブブロック２５０ｂ内で実行する。代替としてビートレベル書き込みコマンドは物理メモリサブブロック２５０ａ内で実行してよく、ビートレベル読み出しコマンドは物理メモリサブブロック２５０ｂ内で実行する。
【０１０４】
読み出しアービタ２３０ａは、ビートレベル読み出しコマンドに関連付けられメモリアドレスに応じて、ビートレベル読み出しコマンドをＭＵＸ１１０４ａに提供し、異なるビートレベル読み出しコマンドをＭＵＸ１１０４ｂに提供してよい。書き込みアービタ２３０ｂは、ビートレベル書き込みコマンドに関連付けられたメモリアドレスに応じて、ビートレベル書き込みコマンドをＭＵＸ１１０４ａに提供し、異なるビートレベル書き込みコマンドをＭＵＸ１１０４ｂに提供してよい。ブロックコントローラ１１０２は、物理メモリサブブロック２５０ａにディスパッチされるようにＭＵＸ１１０４ａに提供された、ビートレベルメモリアクセスコマンドの１つを選択する。ブロックコントローラ１１０２は、物理メモリサブブロック２５０ｂにディスパッチされるようにＭＵＸ１１０４ｂに提供された、ビートレベルメモリアクセスコマンドの１つを選択する。
【０１０５】
したがって共有メモリコントローラの一実施形態は、それぞれ第１の物理メモリブロック２５０ａおよび第２の物理メモリブロック２５０ｂにおける同時並行した実行のために、読み出しアービタ２３０ａからビートレベル読み出しコマンドを、また書き込みアービタ２３０ｂからビートレベル書き込みコマンドを選択するように構成される。すなわちビートレベル読み出しコマンドは第１の物理メモリブロック２５０ａ内で実行し、ビートレベル書き込みコマンドは第２の物理メモリブロック２５０ｂ内で実行する。
【０１０６】
したがって図１１Ｂの実施形態は、きめの細かいメモリバンキングを提供する。さらに物理メモリサブブロック２５０ａ、２５０ｂにディスパッチされるメモリアクセスコマンドは、ビートレベルにある。これは、さらなる性能改善を提供してよい。
【０１０７】
きめの細かいバンキングは、２つのサブブロックに限定されない。一実施形態において物理メモリブロックは、４つのサブブロックに分割される。一実施形態において物理メモリブロックは、８つのサブブロックに分割される。物理メモリブロックは、何らかの他の数のサブブロックに分割されることができる。
【０１０８】
例示の実施形態において共有メモリコントローラは、ビートレベルメモリアクセスコマンドを調停するために用いられる。共有メモリコントローラは、共有メモリにアクセスするための複数のトランザクションを、対応する複数のマスタから受信し、複数のトランザクションを、それぞれのトランザクションのためのビートレベルメモリアクセスコマンドに分割する、受信要素を含む。共有メモリコントローラは、複数のトランザクションのそれぞれに対するサービス品質にアクセスし、トランザクションに関連付けられたビートレベルメモリアクセスコマンドを、それぞれのトランザクションに対するサービス品質に基づいて調停し、ビートレベルメモリアクセスコマンドを、ビートレベルメモリアクセスコマンドの調停の結果に基づいて共有メモリにディスパッチする、調停要素を含む。いくつかの例示の実施形態においてこの共有メモリコントローラは、実施形態で述べられたステップのいずれか１つまたは組み合わせを行うための、１つまたは複数の要素をさらに含んでよい。
【０１０９】
本開示の説明は、例示および説明のために示されたが、網羅的であること、または本開示が開示された形に限定されることを意図するものではない。当業者には、本開示の範囲および趣旨から逸脱せずに、多くの変更および変形が明らかになるであろう。本明細書での開示の態様は、本開示の原理、および実際の応用例を最もよく説明するように、ならびに他の当業者が、企図される特定の使用に適するような様々な変更により本開示を理解することを可能にするように選ばれ、述べられた。
【０１１０】
本文書の目的のために、開示された技術に関連付けられた各処理は、連続して、および１つまたは複数の要素によって行われてよい。処理における各ステップは、他のステップにおいて用いられるものと同じまたは異なる要素によって行われてよく、各ステップは必ずしも単一の要素によって行われる必要はない。
【０１１１】
主題について構造的特徴および／または方法論的動作に固有の用語で述べてきたが、添付の特許請求の範囲において定義される主題は、必ずしも上述された特定の特徴または動作に限定されないことを理解されたい。むしろ上述された特定の特徴および動作は、特許請求の範囲を実施する例示の形として開示されるものである。
【図１】
0006755935.tif 000004
【図２】
0006755935.tif 000005
【図３】
0006755935.tif 000006
【図４】
0006755935.tif 000007
【図５】
0006755935.tif 000008
【図６】
0006755935.tif 000009
【図７】
0006755935.tif 000010
【図８】
0006755935.tif 000011
【図９】
0006755935.tif 000012
【図１０】
0006755935.tif 000013
【図１１Ａ】
0006755935.tif 000014
【図１１Ｂ】
0006755935.tif 000015