メモリコントローラおよびデータ処理装置
【課題】複数のメモリアクセスリクエスタからのリクエストでも、バスの使用効率を高めるためのグループ化が可能なメモリコントローラおよびデータ処理装置を提供する。
【解決手段】リクエストキュー22は、複数のメモリアクセスリクエスタから受信したリクエストを格納する。併合部31は、リクエストキュー22内のリクエストのうち、DDR2−SDRAMにおける1回の読出しサイクルまたは書込みサイクルでアクセス可能なリクエストを併合する。メモリインタフェース部27は、リクエストに従って、DDR2−SDRAMに対してアクセスを行ない、併合された複数のリクエストに対するDDR2−SDRAMのアクセスを一括して行なう。
【解決手段】リクエストキュー22は、複数のメモリアクセスリクエスタから受信したリクエストを格納する。併合部31は、リクエストキュー22内のリクエストのうち、DDR2−SDRAMにおける1回の読出しサイクルまたは書込みサイクルでアクセス可能なリクエストを併合する。メモリインタフェース部27は、リクエストに従って、DDR2−SDRAMに対してアクセスを行ない、併合された複数のリクエストに対するDDR2−SDRAMのアクセスを一括して行なう。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリコントローラおよびデータ処理装置に関し、特に、複数のメモリアクセスリクエスタからのリクエストを処理するメモリコントローラ、およびそのようなメモリコントローラを備えたデータ処理装置に関する。
【背景技術】
【0002】
従来から、バスに接続された複数のメモリアクセスリクエスタ(バスマスタ)と、そのバスにメモリコントローラを介して接続されたメモリとを備えたデータ処理装置において、バスマスタのレイテンシを低減することを目的とした方法が開示、提案されている。
【0003】
たとえば、特許文献1には、インタフェース部が、メモリアクセスリクエスタ(バスマスタ)からバスの所定のバス帯域分を使用した共有リソースへのアクセスの要求を受信した際に、全てのバスマスタにより現在使用されているバスのバス帯域から共有リソースへのアクセスの要求が最新に許可されたバスマスタが現在使用しているバスのバス帯域を減算した第1の減算結果と、バスの最大のバス帯域から最新に許可されたバスマスタにおけるバスの予約分のバス帯域を減算した第2の減算結果とを比較して、第1の減算結果が第2の減算結果よりも大きい場合には、インタフェース部が受信した共有リソースへのアクセスの要求に対して許可を与えないようにする調停装置が開示されている。
【0004】
この調停装置によれば、メモリアクセスリクエスタ(バスマスタ)のレイテンシは低減できるものの、各バスマスタからのアクセスは、多数の細切れのものとなるため、バス帯域を効率的に使用することができない。
【0005】
これに対して、たとえば、特許文献2には、特定のメモリアクセスリクエスタ(バスマスタ)は、メモリのアクセス箇所のロウアドレス(行アドレス)が一致するリクエストをグループ化して、メモリコントローラに出力し、メモリコントローラは、グループ化されたリクエストを連続して処理する方法が記載されている。この方法によれば、メモリにおいて、メモリコントーラからメモリへのコマンドおよびアドレスの転送回数を削減することができ、バスの使用効率を高めることができる。
【特許文献1】特開2007−102509号公報
【特許文献2】特開2007−328585号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
ところで、特許文献2に記載されたリクエストのグループ化は、メモリアクセスリクエスタ(マスタ)が自身で行ない、複数のメモリアクセスリクエスタからのリクエストはグループ化されない。
【0007】
しかしながら、複数のメモリアクセスリクエスタがメモリ内の同一のロウに同時にアクセス要求を行なう場合もある。たとえば、符号化などの画像処理を行なうデータ処理装置では、各メモリアクセスリクエスタが、特定の画像処理機能を担当し、メモリは、各画素のデータを記憶する。このような装置では、複数のメモリアクセスリクエスタが、画像の同一の行に対して、並行して処理するようなことがある。したがって、バスの使用効率を高めるために、複数のメモリアクセスリクエスタからのリクエストであってもグループ化する必要がある。
【0008】
それゆえに、本発明の目的は、複数のメモリアクセスリクエスタからのリクエストでも、バスの使用効率を高めるためのグループ化が可能なメモリコントローラおよびデータ処理装置を提供することである。
【課題を解決するための手段】
【0009】
本発明の一実施例のメモリコントローラによれば、複数のメモリアクセスリクエスタから受信したリクエストを格納するキューと、キュー内のリクエストのうち、メモリにおける1回の読出しサイクルまたは書込みサイクルでアクセス可能なリクエストを併合する併合部と、リクエストに従って、メモリに対してアクセスを行なうインタフェース部とを備え、インタフェース部は、併合された複数のリクエストに対するメモリへのアクセスを一括して行なう。
【発明の効果】
【0010】
本発明によれば、複数のメモリアクセスリクエスタからのリクエストでも、バスの使用効率を高めるためのグループ化を行なうことができる。
【発明を実施するための最良の形態】
【0011】
以下、本発明の実施の形態について、図面を参照して説明する。
図1は、本発明の実施形態のデータ処理装置の構成を表わす図である。
【0012】
図1を参照して、このデータ処理装置1は、複数個のイニシエータ1〜4と、バスアービタ7と、メモリコントローラ6と、DDR(Double Data Rate)2−SDRAM(Synchronous Dynamic Random Access memory)8とを備える。
【0013】
このデータ処理装置100は、たとえば、符号化などの画像処理を行なう装置であり、各イニシエータ1〜4が、特定の画像処理機能を担当し、DDR2−SDRAM8は、各画素のデータを記憶し、複数のイニシエータ1〜4のうちイニシエータ1は、CPU(Central Processing Unit)であるものとする。
【0014】
バスアービタ7は、イニシエータ1〜4から出力されるリクエスト(トランザクション)と、DDR2−SDRAM8から出力されるレスポンスとの競合を調停するルータとして機能する。
【0015】
各イニシエータ1〜4は、メモリアクセスリクエスタであって、リクエスト生成部10と、ポインタ管理部11とを備える。
【0016】
リクエスト生成部10は、リクエストを生成し、生成したリクエストをバス5を通じてメモリコントローラ6へ出力する。
【0017】
図2(a)および(b)は、リクエストのデータ構造を表わす図である。
図2(a)に示すように、リクエストがリードの場合には、リクエストは、リード要求と、リクエスト特性情報と、割込通知要求フラグとからなる。また、図2(b)に示すように、リクエストがライトの場合には、リクエストは、ライト要求と、ライトデータと、リクエスト特性情報と、割込通知要求フラグとからなる。
【0018】
割込通知要求フラグは、このリクエストが終了した場合に、イニシエータ1(CPU)に割込みを通知する場合に付加される。この割込通知要求フラグは、たとえば、画像処理装置において、画像処理の最終段の処理を行なう画像処理モジュール(イニシエータ)が、1画面の最後のデータに対するアクセスを要求するようなリクエストに含まれる。割込みを通知されたイニシエータ1(CPU)は、1画面の処理が終了したことが分かるので、1画面の表示処理を行なうようにすることができる。
【0019】
図2(c)は、リクエスト情報の例を表わす図である。
TIDは、リクエストを識別する番号である。
【0020】
キューイング可否は、リクエストキュー22に格納可能か否かの識別情報である。
併合可否は、他のリクエストと併合されて一括処理が可能か否かの識別情報である。これは、他のリクエストと併合されると不都合が生じるようなリクエストを考慮したものである。
【0021】
発行元イニシエータ番号は、リクエストを発行したイニシエータを識別する情報である。
【0022】
許容待ち時間情報は、リクエストによるDDR2−SDRAM8へのアクセス開始の許容できる待ち時間を表わす。これは、リクエストが、イニシエータから発行されてから、実際に処理が行われるまでに時間的な制限が課されている場合が多いことを考慮したものである。
【0023】
優先度情報は、処理の優先度を表わす。
想定平均処理レートは、リクエストが属するグループの平均処理レート、つまり1バイト当りの処理時間の想定される平均値である。処理時間とは、DDR2−SDRAM8へのアクセスが開始されるまでの時間である。
【0024】
メモリアドレスは、DDR2−SDRAM8内のアクセス対象のメモリセルのアドレスである。
【0025】
転送バイト数は、イニシエータとDDR2−SDRAM8間のデータの転送バイト数である。
【0026】
転送方向は、データを転送する方向が、イニシエータからDDR2−SDRAM8(ライト)か、DDR2−SDRAM8からイニシエータ(リード)かの識別情報である。
【0027】
アクセスレベルは、特権アクセスか、あるいはユーザアクセスかの識別情報である。
スプリット可否は、アクセスが、途中でスプリット(中断)可能か否かの識別情報である。
【0028】
ロック転送フラグは、ロック転送か否かを識別する情報である。
アウトオブオーダ可否フラグは、アウトオブオーダ可能なリクエストか否かの識別情報である。リクエストがアウトオブオーダが不可能な場合には、そのリクエストは、それまでに受信したリクエストのすべてが処理された後、かつそれ以降に受信したリクエストが処理されるまでの間に処理する。
【0029】
再び、図1を参照して、ポインタ管理部11は、出力したリクエストごとに、DDR2−SDRAM8内のアクセス位置を表わすアドレスを表わすポインタと、ポインタについてのアクセス状態を表わすポインタフラグを管理する。
【0030】
図3(a)は、ポインタのフラグを表わす図である。
図3(a)を参照して、DDR2−SDRAM8のデータの更新中の場合には、ポインタフラグはD(Dirty)となる。DDR2−SDRAM8のデータの参照中の場合には、ポインタフラグはR(Reference)となる。DDR2−SDRAM8へのアクセスが行なわれていない場合には、ポインタフラグはV(Valid)となる。
【0031】
ポインタ管理部11は、リードのリクエストを出力後、ステータス管理部25から実行中(EXE)のステータスの通知を受けたときには、ポインタフラグをRに設定する。また、ポインタ管理部11は、ライトのリクエストを出力後、ステータス管理部25から実行中(EXE)のステータスの通知を受けたときには、ポインタフラグをDに設定する。また、ポインタ管理部11は、リクエストの出力後、ステータス管理部25から終了状態(DONE)のステータスの通知を受けたときには、ポインタフラグをVに設定する。
【0032】
図3(b)は、イニシエータ1で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。図3(c)は、イニシエータ2で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。図3(d)は、イニシエータ3で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。図3(e)は、イニシエータ4で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。
【0033】
このように、各イニシエータ1〜4が自身のリクエストに対するポインタフラグを管理し、イニシエータ1〜4どうしで、互いに他のイニシエータ1〜4のポインタフラグを参照することによって、たとえば、イニシエータ2が、DDR2−SDRAM8内のADD(10)のアドレスのデータを参照中であるので、他のイニシエータ1、3および4からは、DDR2−SDRAM8内のADD(10)のアドレスと同一のロー(行)へアクセスすることを控えるようにすることができ、DDR2−SDRAM8内のデータのコヒーレンシを保つことができる。
【0034】
再び、図1を参照して、DDR2−SDRAM8は、メモリセルアレイ51と、ロウデコーダ53と、カラムデコーダ52と、アドレスバッファ55と、コマンドデコーダ57と、I/Oバッファ54とを備える。
【0035】
メモリセルアレイ51は、行列上に配置された複数のメモリセルを備える。メモリセル内には、行方向にm本のワード線WL1〜WLmが配置され、列方向にn本のビット線BL1〜BLnが配置される。
【0036】
アドレスバッファ55は、メモリインタフェース部27から出力されたロウアドレスおよびカラムアドレスを受けて、ロウアドレスをロウデコーダ53に供給し、カラムアドレスをカラムデコーダ52に供給する。
【0037】
コマンドデコーダ57は、メモリインタフェース部27から出力されたコマンドを受けて、コマンドに基づいて、メモリセルアレイ51に対するアクセスを制御する。
【0038】
I/Oバッファ54は、カラムアドレスで選択された列のビット線対から伝送されるリードデータを保持し、リードデータをメモリコントローラ6へ出力する。また、I/Oバッファ54は、メモリコントローラ6から送られたライトデータを保持し、カラムアドレスで選択された列のビット線対へ出力する。
【0039】
ロウデコーダ53は、アドレスバッファ55から送られるロウアドレスに従って、1本のワード線を選択して、選択したワード線を活性化する。
【0040】
カラムデコーダ52は、アドレスバッファ55から送られるカラムアドレスに従って、I/Oバッファ54と接続する列を選択する。
【0041】
図4は、メモリコントローラ6の構成を表わす図である。
図4を参照して、メモリコントローラ6は、キューイング可否判定部20と、リクエストキュー22と、キュー情報記憶部23と、併合部31と、併合情報記憶部24と、イニシエータグループ情報記憶部30と、優先制御部21と、メモリインタフェース部27と、ステータス情報記憶部26と、ステータス管理部25と、メモリインタフェース部27と、出力制御部29とを備える。優先制御部21は、待ち時間計測部28と、処理時間計測部32と、平均処理レート算出部33と、選択部34とを備える。
【0042】
キューイング可否判定部20は、受信したリクエストのリクエスト情報のキューイング可否を参照して、キューイング可否が可に設定されているかどうかを調べる。キューイング可否判定部20は、キューイング可否が可に設定されている場合には、受信したリクエストをリクエストキュー22の空いているキー位置の番号が最も小さい位置に出力し、受信したリクエストが格納された状態を表わすようにキュー情報記憶部23内のキュー情報を更新する。また、キューイング可否判定部20は、キューイング可否が不可に設定されている場合には、受信したリクエストを直接選択部34に出力する。このように、キューイングの可否を判定することによって、迅速に処理すべきリクエスト(特にイニシエータ1(CPU)から出力されるリクエストなど)がリクエストキュー22に格納されることによって、処理が後回しになるのを防止することができる。
【0043】
リクエストキュー22は、キューイング可否判定部20から出力されたリクエストを格納する。リクエストは、リクエストキュー22内のキュー位置の番号が小さい方から順番に格納される。また、リクエストキュー22は、格納しているリクエストがメモリインタフェース部27へ出力された場合には、残りのリクエストをキュー位置の番号が小さくなるように詰めることによって、リクエストを再配置する。
【0044】
図5(a)および(b)は、リクエストキュー22の状態の例を表わす図である。
図5(a)を参照して、キュー位置が「1」にTIDが「0001」のリクエストが格納され、キュー位置が「2」にTIDが「0002」のリクエストが格納され、キュー位置が「3」にTIDが「0003」のリクエストが格納され、キュー位置が「4」にTIDが「0004」のリクエストが格納され、キュー位置が「5」にTIDが「0005」のリクエストが格納され、キュー位置が「6」にTIDが「0009」のリクエストが格納され、キュー位置が「7」にTIDが「0010」のリクエストが格納され、キュー位置が「8」にTIDが「0011」のリクエストが格納され、キュー位置が「9」にTIDが「0012」のリクエストが格納されている。
【0045】
図5(b)は、図5(a)の状態から、TIDが「0001」、「0003」、「0005」、「0009」、「0010」、「0011」、「0012」のリクエストが出力されたときのリクエストキュー22の状態を表わす。
【0046】
キュー情報記憶部23は、キューの位置と、そこに格納されているリクエストの識別番号(TID)との対応を定めたキュー情報を記憶する。
【0047】
図6(a)は、図5(a)に示すリクエストキュー22の状態でのキュー情報の例を表わす図である。図6(b)は、図6(b)に示すリクエストキュー22の状態でのキュー情報の例を表わす図である。
【0048】
再び、図1を参照して、併合部31は、リクエストキュー22内のリクエストのうち、DDR2−SDRAM8における1回の読出しサイクルまたは書込みサイクルでアクセス可能なリクエストを併合する。併合処理の詳細は後述する。
【0049】
イニシエータグループ情報記憶部30は、イニシエータグループ情報を記憶する。イニシエータグループ情報は、他の条件を満たせば、リクエストを併合することができるイニシエータの組合せを表わす。言い換えると、イニシエータグループ情報で定められていないイニシエータ間では、リクエストの併合ができないことになる。これは、併合になじまないイニシエータどうしのリクエストを併合すると不都合が生じる場合があることを考慮したものである。
【0050】
併合情報記憶部24は、併合されたリクエストについて、グループ識別番号(GID)と、そのグループに属するリクエストの識別番号(TID)との対応を表わす情報を記憶する。
【0051】
図7は、併合情報の例を表わす図である。
図7を参照して、グループ識別番号(GID)が「0001」には、TIDが「0001」、「0005」、「0009」、「0010」のリクエストが併合されている。また、グループ識別番号(GID)が「0002」には、TIDが「0003」、「0011」、「0012」のリクエストが併合されている。
【0052】
ステータス情報記憶部26は、受信したリクエストのステータス情報を記憶する。DDR2−SDRAM8へのアクセスが未実行のリクエストのステータスは、アイドル(IDLE)である。DDR2−SDRAM8へのアクセスが実行中のリクエストのステータスは実行中(EXE)である。DDR2−SDRAM8へのアクセスが終了したリクエストのステータスは終了状態(DONE)である。
【0053】
図8は、ステータス情報の例を表わす図である。
図8を参照して、グループ識別番号(GID)が「0001」に属するTIDが「0001」、「0005」、「0009」、「0010」のリクエストのステータスは、いずれも「END」である。
【0054】
また、TIDが「0002」のリクエストのステータスは、「IDLE」である。
グループ識別番号(GID)が「0002」に属するTIDが「0003」、「0011」のリクエストのステータスは、いずれも「END」であり、TIDが「0012」のリクエストのスタータスは「EXE」である。このように、同一のグループに属するリクエストのステータスが相違するのは、たとえば、リードのアクセスの場合に、指定したカラムアドレスおよび指定した転送バイト数などによって、DDR2−SDRAM8から転送されてきたリードデータが、どのリクエストに対応するものかを識別することができるからである。
【0055】
また、TIDが「0004」のリクエストのステータスは、「IDLE」である。
ステータス管理部25は、イニシエータ1〜4からのリクエストの受信に応じて、リクエストのステータスをIDLEに設定する。ステータス管理部25は、メモリインタフェース部27がリクエストに従ってDDR2−SDRAM8へのアクセスを開始した(つまり、コマンドやアドレスを出力した)ことに応じて、リクエストのステータスをEXEに設定する。また、ステータス管理部25は、リクエストがリードの場合に、リクエストに応答してDDR2−SDRAM8からリードデータを受信したことに応じて、リクエストのステータスをDONEに設定する。また、ステータス管理部25は、リクエストがライトの場合には、リクエストに従ってDDR2−SDRAM8へのアクセスを開始してから所定の時間が経過したことに応じて、リクエストのステータスをDONEに設定する。
【0056】
ステータス管理部25は、リクエストのステータスが変化したことに応じて、リクエストを出力したイニシエータに対して、ステータス情報を送る。このようにリクエストのステータスをイニシエータ側に送るのは、イニシエータ側は、発行したリクエストがリクエストキュー22に格納されることによって、すぐに実行されるとは限らず、発行したリクエストのステータスが把握できないことを考慮したものである。
【0057】
また、ステータス管理部25は、ステータスが(DONE)に変化したリクエストが、割込通知要求フラグがオンのリクエストの場合には、特定のイニシエータ1(CPU)に割込みを表わす割込情報を送る。
【0058】
待ち時間計測部28は、ステータス情報記憶部26を参照して、リクエストがリクエストキュー22に格納されることによってそのリクエストのステータスがIDLEが設定された時に、そのリクエスト用のタイマを起動し、待ち時間を計測する。
【0059】
処理時間計測部32は、ステータス情報記憶部26を参照して、リクエストがリクエストキュー22に格納されることによってそのリクエストのステータスがIDLEに設定された時に、そのリクエスト用のタイマを起動し、そのリクエストのステータスがEXEに設定される(すなわちアクセスが開始される)までの時間を計測して、処理時間記憶部61に記憶する。
【0060】
平均処理レート算出部33は、各リクエストの計測された処理時間と転送バイト数とを用いて、グループごとの平均処理レート、つまり1バイトごとの処理時間の平均値を算出して、平均処理レート記憶部62に記憶する。ここでは、1つのグループに属するリクエストは、たとえば、キューイング可否、併合可否、および転送方向が同一であるとする。
【0061】
選択部34は、第1優先度制御、第2優先度制御に基づいて、リクエストキュー22に格納されたリクエストおよびキューイング可否判定部20から直接送られてきたリクエストのうち、次に処理すべきリクエストを選択し、選択したリクエストをメモリインタフェース部27に出力する。第1優先度制御は、できるだけ迅速に処理すべきリクエストを選択するための制御である。第2優先度制御は、第1優先度制御だけでは、いつまでも選択されずに残ってしまうリクエストを選択するための制御である。第1優先度制御および第2優先度制御の詳細は、後述する。
【0062】
メモリインタフェース部27は、選択部34から出力されたリクエストに基づいて、DDR2−SDRAM8に対して、バス12を通じてアクセスを行なう。すなわち、メモリインタフェース部27は、アクセス要求がリードの場合には、リクエスト情報中のメモリアドレスおよび転送バイト数に基づいて、プリチャージコマンドを出力し、その後アクティブコマンドとロウアドレスを発行し、その後リードコマンドとカラムアドレスを発行する。また、メモリインタフェース部27は、アクセス要求がライトの場合には、リクエスト情報中のメモリアドレスおよび転送バイト数に基づいて、プリチャージコマンドを発行し、その後アクティブコマンドとロウアドレスを発行し、その後ライトコマンドとカラムアドレスを発行する。
【0063】
メモリインタフェース部27は、併合された複数のリクエストに対するDDR2−SDRAM8へのアクセスを一括して行なう。すなわち、メモリインタフェース部27は、併合された複数のリクエストについては、ロウアドレスが同一であるので、先頭のリクエストについてのみ、プリチャージコマンド、アクティブコマンドおよびロウアドレスをDDR2−SDRAM8へ出力する。このように、コマンドおよびアドレスの転送回数を減らすことによって、メモリコントローラ6とDDR2−SDRAM8の間のバス12の使用効率を高めることができる。
【0064】
また、メモリインタフェース部27は、アクセス要求がリードの場合には、バス12を通じてDDR2−SDRAM8から送られるリードデータを受信する。
【0065】
出力制御部29は、リクエスト情報に基づいて、受信したリードデータをどのイニシエータに出力するかを特定し、特定したイニシエータにリードデータを出力する。
【0066】
(キューイングと併合処理の動作)
図9は、キューイングと併合処理の動作手順を表わす図である。
【0067】
図9を参照して、キューイング可否判定部20は、受信したリクエストのリクエスト情報のキューイング可否を参照して、キューイング可否が可に設定されているかどうかを調べる。キューイング可否判定部20は、キューイング可否が可に設定されている場合には(ステップS101でYES)、受信したリクエストをリクエストキュー22の空いているキー位置の番号が最も小さい位置に出力する(ステップS102)。また、キューイング可否判定部20は、受信したリクエストが格納された状態を表わすようにキュー情報記憶部23内のキュー情報を更新する(ステップS104)。
【0068】
一方、キューイング可否判定部20は、キューイング可否が不可に設定されている場合には(ステップS101でNO)、受信したリクエストを直接選択部34に出力する(ステップS103)。
【0069】
次に、併合部31は、受信したリクエストのリクエスト情報の併合可否を参照して、併合可否が可に設定されているかどうかを調べる。併合部31は、併合可否が不可に設定されている場合には(ステップS105でNO)、受信したリクエストと他のリクエストとの併合を行なわないこととし、ステップS111に進む。
【0070】
次に、併合部31は、併合可否が可に設定されている場合には(ステップS105でYES)、受信したリクエストのリクエスト情報の発行元イニシエータ識別番号と、リクエストキュー22に格納されているリクエストのリクエスト情報の発行元イニシエータ識別番号と、イニシエータグループ情報記憶部30内のイニシエータグループ情報を参照して、受信したリクエストの発行元イニシエータが属するイニシエータグループと同一のグループに属するイニシエータの1個以上のリクエスト(A)が、リクエストキュー22に格納されているかどうかを調べる。併合部31は、1個以上のリクエスト(A)が格納されていない場合には(ステップS106でNO)、受信したリクエストと他のリクエストとの併合を行なわないこととし、ステップS111に進む。
【0071】
次に、併合部31は、1個以上のリクエスト(A)が格納されている場合には(ステップS106でYES)、受信したリクエストのリクエスト情報の転送方向と、リクエストキュー22に格納されている1個以上のリクエスト(A)のリクエスト情報の転送方向を参照して、リクエストキュー22に格納されている1個以上のリクエスト(A)のうち、受信したリクエストと転送方向が同一である1個以上のリクエスト(B)があるかどうかを調べる。併合部31は、1個以上のリクエスト(B)がない場合には(ステップS107でNO)、受信したリクエストと他のリクエストとの併合を行なわないこととし、ステップS111に進む。
【0072】
次に、併合部31は、1個以上のリクエスト(B)がある場合には(ステップS107でYES)、受信したリクエストのリクエスト情報のメモリアドレスと、リクエストキュー22に格納されている1個以上のリクエスト(B)のリクエスト情報のメモリアドレスを参照して、リクエストキュー22に格納されている1個以上のリクエスト(B)のうち、受信したリクエストと、メモリアドレスのうちのロウアドレスが同一の1個以上のリクエスト(C)があるかどうかを調べる。併合部31は、1個以上のリクエスト(C)がない場合には(ステップS108でNO)、受信したリクエストと他のリクエストとの併合を行なわないこととし、ステップS111に進む。
【0073】
次に、併合部31は、1個以上のリクエスト(C)がある場合には(ステップS108でYES)、受信したリクエストのリクエスト情報の転送バイト数と、リクエストキュー22に格納されている1個以上のリクエスト(C)のリクエスト情報の転送バイト数とを参照して、リクエストキュー22に格納されている1個以上のリクエスト(C)のうち、併合したときの転送バイト数が、メモリセルアレイ51のビット線の数(つまり、1回にアクセスできるサイズ)以下となるような、1個以上のリクエスト(D)があるかどうかを調べる。ここで、たとえば、リクエストCには、c1、c2があり、c1とc2が既に併合されている場合には、併合部31は、併合情報を参照して、c1とc2の転送バイト数の合計と、受信したリクエストの転送バイト数の総和が、1回にアクセスできるサイズ以下であるかどうかを調べることになる。併合部31は、1個以上のリクエスト(D)がない場合には(ステップS109でNO)、受信したリクエストと他のリクエストとの併合を行なわないこととし、ステップS111に進む。
【0074】
次に、併合部31は、1個以上のリクエスト(D)がある場合には(ステップS109でYES)、併合情報記憶部24内の併合情報を更新する。すなわち、併合部31は、併合相手のリクエストが既に別のリクエストと併合されている場合には、併合されているグループに属するリクエストのTIDに、受信したリクエストのTIDを追記する。併合する相手のリクエストが今回初めて併合される場合には、新規にグループを作成し、そのグループに属するリクエストのTIDに、受信したリクエストのTIDと、併合する相手のリクエストのTIDを書込む(ステップS110)。
【0075】
次に、ステータス管理部25は、ステータス情報記憶部26内のステータス情報に受信したリクエストのステータス(IDLE)を設定する(ステップS111)。
【0076】
(第1の優先度制御の動作)
図10は、第1の優先度制御の動作手順を表わす図である。
【0077】
図10を参照して、待ち時間計測部28は、1つのリクエストがリクエストキュー22に格納されるごとに、そのリクエスト用のタイマを起動して、待ち時間T1を計測する。すなわち、待ち時間計測部28は、リクエストがリクエストキュー22に格納されることによってステータス情報にそのリクエストのステータスがIDLEが設定された時に、そのリクエスト用のタイマを起動し、待ち時間T1を計測する(ステップS201)。
【0078】
次に、選択部34は、キューイング可否判定部20から直接出力されたリクエスト(このリクエストをリクエストAとする)があるかどうかを調べる。
【0079】
選択部34は、リクエストAが1個以上存在する場合には(ステップS202でYES)、1個のリクエストAをメモリインタフェース部27へ送る(ステップS203)。
【0080】
次に、選択部34は、リクエストAが存在しない場合には(ステップS202でNO)、リクエストキュー22に格納されているリクエストのリクエスト情報の許容間待ち時間情報を参照して、リクエストキュー22に格納された複数のリクエストについて、許容可能待ち時間T2と、待ち時間計測部28で計測された待ち時間T1との時間差を算出し、この時間差ΔTが閾値TR1以下となるリクエスト(このリクエストをリクエストBとする)があるかどうかを調べる。ここで、TR1は、転送バイト数、メモリコントローラ6からDDR2−SDRAM8までの転送レートを考慮した値である。
【0081】
選択部34は、リクエストBが1個以上存在する場合には(ステップS204でYES)、1個のリクエストBをメモリインタフェース部27へ送る。ただし、この1個のリクエストBが併合されている場合には、選択部34は、併合されている他のリクエストもメモリインタフェース部27へ送る(ステップS205)。
【0082】
次に、選択部34は、リクエストBが存在しない場合には(ステップS204でNO)、リクエストキュー22に格納されているリクエストのリクエスト情報の優先度情報を参照して、優先度が他のリクエストよりも高く、かつ最大であるリクエスト(このリクエストをリクエストCとする)があるかどうかを調べる。
【0083】
選択部34は、リクエストCが1個以上存在する場合には(ステップS206でYES)、1個のリクエストCをメモリインタフェース部27へ送る。ただし、この1個のリクエストCが併合されている場合には、選択部34は、併合されている他のリクエストもメモリインタフェース部27へ送る(ステップS207)。
【0084】
選択部34は、リクエストCが存在しない場合には(ステップS206でNO)、リクエストキュー22のキュー位置が「1」の1個のリクエスト(このリクエストをリクエストDとする)をメモリインタフェース部27へ送る。ただし、この1個のリクエストDが併合されている場合には、選択部34は、併合されている他のリクエストもメモリインタフェース部27へ送る(ステップS208)。
【0085】
リクエストキュー22は、格納しているリクエストがメモリインタフェース部27へ出力された場合には、残りのリクエストをキュー位置の番号が小さくなるように詰めることによって、リクエストを再配置する(ステップS209)。
【0086】
次に、選択部34は、リクエストキュー22内のリクエストがメモリインタフェース部27へ出力された場合には、再配置したリクエストキュー22の格納状態を表わすようにキュー情報記憶部23内のキュー情報を更新する(ステップS210)。
【0087】
次に、メモリインタフェース部27は、選択部34から出力されたリクエストに基づいて、DDR2−SDRAM8に対して、コマンド、ロウアドレス、およびカラムアドレスを発行して、アクセスを行なう(ステップS211)。
【0088】
次に、ステータス管理部25は、メモリインタフェース部27がリクエストに従ってDDR2−SDRAM8へのアクセスを開始した(つまり、コマンドやアドレスを出力した)ことに応じて、リクエストのステータスをEXEに設定し、そのリクエストを発行したイニシエータにステータス(EXE)を表わすステータス情報を送る(ステップS212)。
【0089】
(第2の優先度制御の動作)
図11は、第2の優先度制御の動作手順を表わす図である。
【0090】
図11を参照して、処理時間計測部32は、1つのリクエストがリクエストキュー22に格納されるごとに、そのリクエスト用のタイマを起動して、処理時間T3を計測する。すなわち、処理時間計測部32は、リクエストがリクエストキュー22に格納されることによってステータス情報にそのリクエストのステータスがIDLEに設定された時に、そのリクエスト用のタイマを起動し、そのリクエストのステータスがEXEに設定されるまでの時間を処理時間T3として計測して、処理時間記憶部61に記憶する(ステップS301)。
【0091】
平均処理レート算出部33は、各リクエストの処理時間T3および転送バイト数を用いて、グループごとの平均処理レートR1、つまり1バイトごとの処理時間の平均値を算出して、平均処理レート記憶部62に記憶する。ここでは、1つのグループに属する1個以上のリクエストは、キューイング可否、併合可否、および転送方向が同一であるとする。
【0092】
選択部34は、所定の時間間隔ごとに(ステップS303でYES)、以下のステップの処理を行なう。これは、優先度の制御は、第1の優先度制御を基本としつつ、第1の優先度制御では、いつまでも選択されないリクエストを救済するために第2の優先度制御を行なうためである。
【0093】
選択部34は、リクエストキュー22に格納されているリクエストのリクエスト情報の想定処理レートR2を参照して、リクエストキュー22に格納されている複数のリクエストについて、そのリクエストが属するグループの平均処理レートR1と、そのリクエストの想定処理レートR2とのレート差ΔRを算出して、このレート差ΔRが閾値TR2以上となるリクエスト(このリクエストをリクエストAとする)があるかどうかを調べる。
【0094】
選択部34は、そのようなリクエストAが1個以上存在する場合には(ステップS304でYES)、1個のリクエストAをメモリインタフェース部27へ送る。ただし、この1個のリクエストAが併合されている場合には、選択部34は、併合されている他のリクエストもメモリインタフェース部27へ送る(ステップS305)。
【0095】
次に、リクエストキュー22は、格納しているリクエストがメモリインタフェース部27へ出力された場合には、残りのリクエストをキュー位置の番号が小さくなるように詰めることによって、リクエストを再配置する(ステップS306)。
【0096】
次に、選択部34は、再配置したリクエストキュー22の格納状態を表わすようにキュー情報記憶部23内のキュー情報を更新する(ステップS307)。
【0097】
次に、メモリインタフェース部27は、選択部34から出力されたリクエストに基づいて、DDR2−SDRAM8に対して、コマンド、ロウアドレス、およびカラムアドレスを発行して、アクセスを行なう(ステップS308)。
【0098】
次に、ステータス管理部25は、メモリインタフェース部27がリクエストに従ってDDR2−SDRAM8へのアクセスを開始した(つまり、コマンドやアドレスを出力した)ことに応じて、リクエストのステータスをEXEに設定し、そのリクエストを発行したイニシエータにステータス(EXE)を表わすステータス情報を送る(ステップS309)。
【0099】
(イニシエータへの応答処理の動作)
図12は、イニシエータへの応答処理の動作手順を表わす図である。
【0100】
図12を参照して、メモリインタフェース部27が、転送方向がDDR2−SDRAM8からイニシエータに設定されたリクエストに従ってリードコマンドを出力した場合に(ステップS401でYES)、メモリインタフェース部27は、DDR2−SDRAM8からリードデータを受信する(ステップS402)。
【0101】
出力制御部29は、リクエスト情報に基づいて、受信したリードデータをどのイニシエータに出力するかを特定し、特定したイニシエータにリードデータを出力する(ステップS403)。
【0102】
ステータス管理部25は、イニシエータへ出力したリードデータに対応するリクエスト、つまり、そのリードデータの転送を指定したリクエストのステータス情報をDONEに設定し、そのリードデータの転送を指定したリクエストを発行したイニシエータにステータス(DONE)を表わすステータス情報を送る(ステップS404)。
【0103】
一方、メモリインタフェース部27が、転送方向がイニシエータからDDR2−SDRAM8に設定されたリクエストに従ってライトコマンドを出力した場合に(ステップS401でNO)、ステータス管理部25は、所定の時間が経過した後(ステップS405でYES)、そのリクエストのステータス情報をDONEに設定し、そのリクエストを発行したイニシエータにステータス(DONE)を表わすステータス情報を送る(ステップS406)。
【0104】
次に、出力制御部29は、そのリクエストが、割込通知要求フラグがオンのリクエストの場合には(ステップS407でYES)、イニシエータ1(CPU)に割込みを表わす割込情報を送る(ステップS408)。
【0105】
以上のように、本発明の実施形態のデータ処理装置によれば、複数のイニシエータからのリクエストでも、同一の行に対するものは併合して一括して処理するので、バススの使用効率を高めることができる。
【0106】
[変形例]
本発明は、上記の実施形態に限定されるものではなく、たとえば、以下のような変形例も含まれる。
【0107】
(1) 平均処理レート
本発明の実施形態では、DDR2−SDRAMへのアクセスが開始されるまでのレートを想定処理レートとしたが、これに限定するものではない、たとえば、DDR2−SDRAMへのアクセスが終了するまでのレートを想定処理レートとしてもよい。そして、処理時間計測部32は、リクエストがリクエストキュー22に格納されることによってステータス情報にそのリクエストのステータスがIDLEが設定された時に、そのリクエスト用のタイマを起動し、そのリクエストのステータスがDONEに設定される(すなわち、アクセスが終了)までの時間を処理時間T3として計測することとしてもよい。
【0108】
(2) ポインタ管理部
本発明の実施形態では、ポインタ管理部が、ポインタとポインタフラグを管理するものとしたが、これに限定するものではない。たとえば、ポインタ管理部が、ポインタとポインタフラグに加えて、アクセス対象のメモリセルのアドレス、ポインタを始点としたアクセス対象のメモリセルの数などを管理することとしてもよい。
【0109】
(3) 割り込み
本発明の実施形態では、割込通知要求フラグは、たとえば、画像処理装置において、画像処理の最終段の処理を行なう画像処理モジュール(イニシエータ)が、1画面の最後のデータに対するアクセスを要求するようなリクエストに含まれるとしたが、これに限定するものではない。特定のイニエータが、1画面の最初のデータに対するアクセスを要求するようなリクエストに含まれるものとしてもよい。この場合、ステータス管理部25は、ステータスが(EXE)に変化したリクエストが、割込通知要求フラグがオンのリクエストの場合には、特定のイニシエータ1(CPU)に割込みを表わす割込情報を送るものとしてもよい。
【0110】
(4) ライト要求
本発明の実施形態では、メモリインタフェース部27が転送方向がイニシエータ側に設定されたリクエストに従ってライトコマンドを出力した場合に、ステータス管理部25は、所定の時間が経過した後、そのリクエストのステータスをDONEに設定したが、これに限定するものではない。たとえば、DDR2−SDRAMから書込みを終了したことを表わす情報を受信した後、または、リクエストの転送が終了したことを表わす情報を受信したときに、リクエストのステータスをDONEに設定するものとしてもよい。
【0111】
(5) 割込みの判断
本発明の実施形態では、割込通知要求フラグを用いて、割込情報を送るか否かを判断するものとしたが、これに限定するものではない。たとえば、リクエスト情報に含まれるアクセスされるメモリアドレスに基づいて、割込みを送るか否かを判断してもよい。
【0112】
またリクエストの併合や実行において、データの整合性や排他処理を考慮することは当然に行うことである。例えば、メモリインタフェース部27でDDR2−SDRAMへのリードリクエスト、ライトリクエスト、再度のリードリクエストが順次受付けられ、2つのリードリクエストが併合可能な属性であったとしても、ライトリクエストにより最初のリードリクエストまたは再度のリードリクエストでのデータに整合性の問題を生じるのであれば、これら2つのリードリクエストの併合は当然に行われず、ライトリクエストの実行時点を挟んで、前後のリードリクエストがかかる順序で実行される。
【0113】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。特にメモリインタフェース部に接続されるメモリはDDR2−SDRAMを含むSDRAM(揮発性メモリ)だけでなくNAND型Flashメモリ(不揮発性メモリ)等を含み、アクセスアドレスにより選択される1のワード線に接続されるメモリセルの数が比較的多く1回のワード線アクセスに対して複数回のデータ入出力が対応するようなメモリ、又は複数個のメモリを有する外面的に同様の動作と捉えられる記憶媒体(メモリカード)のインタフェース部において本発明を同様に実施することが可能である。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【0114】
【図1】本発明の実施形態のデータ処理装置の構成を表わす図である。
【図2】リクエストのデータ構造を表わす図である。
【図3】(a)は、ポインタフラグを表わす図である。(b)は、イニシエータ1で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。(c)は、イニシエータ2で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。(d)は、イニシエータ3で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。(e)は、イニシエータ4で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。
【図4】メモリコントローラの構成を表わす図である。
【図5】(a)および(b)は、リクエストキューの状態の例を表わす図である。
【図6】キュー情報の例を表わす図である。
【図7】併合情報の例を表わす図である。
【図8】ステータス情報の例を表わす図である。
【図9】キューイングと併合処理の動作手順を表わす図である。
【図10】第1の優先度制御の動作手順を表わす図である。
【図11】第2の優先度制御の動作手順を表わす図である。
【図12】イニシエータへの応答処理の動作手順を表わす図である。
【符号の説明】
【0115】
1〜4 イニシエータ、5,12 バス、6 メモリコントローラ、7 バスアービタ、8 DDR2−SDRAM、10 リクエスト生成部、11 ポインタ管理部、20 キューイング可否判定部、21 優先制御部、22 リクエストキュー、23 キュー情報記憶部、24 併合情報記憶部、25 ステータス管理部、26 ステータス情報記憶部、27 メモリインタフェース部、28 待ち時間計測部、29 出力制御部、30 イニシエータグループ情報記憶部、31 併合部、32 処理時間計測部、33 平均処理レート算出部、34 選択部、51 メモリセルアレイ、52 カラムデコーダ、53 ロウデコーダ、54 I/Oバッファ、55 アドレスバッファ、57 コマンドデコーダ、61 処理時間記憶部、62 平均処理レート記憶部。
【技術分野】
【0001】
本発明は、メモリコントローラおよびデータ処理装置に関し、特に、複数のメモリアクセスリクエスタからのリクエストを処理するメモリコントローラ、およびそのようなメモリコントローラを備えたデータ処理装置に関する。
【背景技術】
【0002】
従来から、バスに接続された複数のメモリアクセスリクエスタ(バスマスタ)と、そのバスにメモリコントローラを介して接続されたメモリとを備えたデータ処理装置において、バスマスタのレイテンシを低減することを目的とした方法が開示、提案されている。
【0003】
たとえば、特許文献1には、インタフェース部が、メモリアクセスリクエスタ(バスマスタ)からバスの所定のバス帯域分を使用した共有リソースへのアクセスの要求を受信した際に、全てのバスマスタにより現在使用されているバスのバス帯域から共有リソースへのアクセスの要求が最新に許可されたバスマスタが現在使用しているバスのバス帯域を減算した第1の減算結果と、バスの最大のバス帯域から最新に許可されたバスマスタにおけるバスの予約分のバス帯域を減算した第2の減算結果とを比較して、第1の減算結果が第2の減算結果よりも大きい場合には、インタフェース部が受信した共有リソースへのアクセスの要求に対して許可を与えないようにする調停装置が開示されている。
【0004】
この調停装置によれば、メモリアクセスリクエスタ(バスマスタ)のレイテンシは低減できるものの、各バスマスタからのアクセスは、多数の細切れのものとなるため、バス帯域を効率的に使用することができない。
【0005】
これに対して、たとえば、特許文献2には、特定のメモリアクセスリクエスタ(バスマスタ)は、メモリのアクセス箇所のロウアドレス(行アドレス)が一致するリクエストをグループ化して、メモリコントローラに出力し、メモリコントローラは、グループ化されたリクエストを連続して処理する方法が記載されている。この方法によれば、メモリにおいて、メモリコントーラからメモリへのコマンドおよびアドレスの転送回数を削減することができ、バスの使用効率を高めることができる。
【特許文献1】特開2007−102509号公報
【特許文献2】特開2007−328585号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
ところで、特許文献2に記載されたリクエストのグループ化は、メモリアクセスリクエスタ(マスタ)が自身で行ない、複数のメモリアクセスリクエスタからのリクエストはグループ化されない。
【0007】
しかしながら、複数のメモリアクセスリクエスタがメモリ内の同一のロウに同時にアクセス要求を行なう場合もある。たとえば、符号化などの画像処理を行なうデータ処理装置では、各メモリアクセスリクエスタが、特定の画像処理機能を担当し、メモリは、各画素のデータを記憶する。このような装置では、複数のメモリアクセスリクエスタが、画像の同一の行に対して、並行して処理するようなことがある。したがって、バスの使用効率を高めるために、複数のメモリアクセスリクエスタからのリクエストであってもグループ化する必要がある。
【0008】
それゆえに、本発明の目的は、複数のメモリアクセスリクエスタからのリクエストでも、バスの使用効率を高めるためのグループ化が可能なメモリコントローラおよびデータ処理装置を提供することである。
【課題を解決するための手段】
【0009】
本発明の一実施例のメモリコントローラによれば、複数のメモリアクセスリクエスタから受信したリクエストを格納するキューと、キュー内のリクエストのうち、メモリにおける1回の読出しサイクルまたは書込みサイクルでアクセス可能なリクエストを併合する併合部と、リクエストに従って、メモリに対してアクセスを行なうインタフェース部とを備え、インタフェース部は、併合された複数のリクエストに対するメモリへのアクセスを一括して行なう。
【発明の効果】
【0010】
本発明によれば、複数のメモリアクセスリクエスタからのリクエストでも、バスの使用効率を高めるためのグループ化を行なうことができる。
【発明を実施するための最良の形態】
【0011】
以下、本発明の実施の形態について、図面を参照して説明する。
図1は、本発明の実施形態のデータ処理装置の構成を表わす図である。
【0012】
図1を参照して、このデータ処理装置1は、複数個のイニシエータ1〜4と、バスアービタ7と、メモリコントローラ6と、DDR(Double Data Rate)2−SDRAM(Synchronous Dynamic Random Access memory)8とを備える。
【0013】
このデータ処理装置100は、たとえば、符号化などの画像処理を行なう装置であり、各イニシエータ1〜4が、特定の画像処理機能を担当し、DDR2−SDRAM8は、各画素のデータを記憶し、複数のイニシエータ1〜4のうちイニシエータ1は、CPU(Central Processing Unit)であるものとする。
【0014】
バスアービタ7は、イニシエータ1〜4から出力されるリクエスト(トランザクション)と、DDR2−SDRAM8から出力されるレスポンスとの競合を調停するルータとして機能する。
【0015】
各イニシエータ1〜4は、メモリアクセスリクエスタであって、リクエスト生成部10と、ポインタ管理部11とを備える。
【0016】
リクエスト生成部10は、リクエストを生成し、生成したリクエストをバス5を通じてメモリコントローラ6へ出力する。
【0017】
図2(a)および(b)は、リクエストのデータ構造を表わす図である。
図2(a)に示すように、リクエストがリードの場合には、リクエストは、リード要求と、リクエスト特性情報と、割込通知要求フラグとからなる。また、図2(b)に示すように、リクエストがライトの場合には、リクエストは、ライト要求と、ライトデータと、リクエスト特性情報と、割込通知要求フラグとからなる。
【0018】
割込通知要求フラグは、このリクエストが終了した場合に、イニシエータ1(CPU)に割込みを通知する場合に付加される。この割込通知要求フラグは、たとえば、画像処理装置において、画像処理の最終段の処理を行なう画像処理モジュール(イニシエータ)が、1画面の最後のデータに対するアクセスを要求するようなリクエストに含まれる。割込みを通知されたイニシエータ1(CPU)は、1画面の処理が終了したことが分かるので、1画面の表示処理を行なうようにすることができる。
【0019】
図2(c)は、リクエスト情報の例を表わす図である。
TIDは、リクエストを識別する番号である。
【0020】
キューイング可否は、リクエストキュー22に格納可能か否かの識別情報である。
併合可否は、他のリクエストと併合されて一括処理が可能か否かの識別情報である。これは、他のリクエストと併合されると不都合が生じるようなリクエストを考慮したものである。
【0021】
発行元イニシエータ番号は、リクエストを発行したイニシエータを識別する情報である。
【0022】
許容待ち時間情報は、リクエストによるDDR2−SDRAM8へのアクセス開始の許容できる待ち時間を表わす。これは、リクエストが、イニシエータから発行されてから、実際に処理が行われるまでに時間的な制限が課されている場合が多いことを考慮したものである。
【0023】
優先度情報は、処理の優先度を表わす。
想定平均処理レートは、リクエストが属するグループの平均処理レート、つまり1バイト当りの処理時間の想定される平均値である。処理時間とは、DDR2−SDRAM8へのアクセスが開始されるまでの時間である。
【0024】
メモリアドレスは、DDR2−SDRAM8内のアクセス対象のメモリセルのアドレスである。
【0025】
転送バイト数は、イニシエータとDDR2−SDRAM8間のデータの転送バイト数である。
【0026】
転送方向は、データを転送する方向が、イニシエータからDDR2−SDRAM8(ライト)か、DDR2−SDRAM8からイニシエータ(リード)かの識別情報である。
【0027】
アクセスレベルは、特権アクセスか、あるいはユーザアクセスかの識別情報である。
スプリット可否は、アクセスが、途中でスプリット(中断)可能か否かの識別情報である。
【0028】
ロック転送フラグは、ロック転送か否かを識別する情報である。
アウトオブオーダ可否フラグは、アウトオブオーダ可能なリクエストか否かの識別情報である。リクエストがアウトオブオーダが不可能な場合には、そのリクエストは、それまでに受信したリクエストのすべてが処理された後、かつそれ以降に受信したリクエストが処理されるまでの間に処理する。
【0029】
再び、図1を参照して、ポインタ管理部11は、出力したリクエストごとに、DDR2−SDRAM8内のアクセス位置を表わすアドレスを表わすポインタと、ポインタについてのアクセス状態を表わすポインタフラグを管理する。
【0030】
図3(a)は、ポインタのフラグを表わす図である。
図3(a)を参照して、DDR2−SDRAM8のデータの更新中の場合には、ポインタフラグはD(Dirty)となる。DDR2−SDRAM8のデータの参照中の場合には、ポインタフラグはR(Reference)となる。DDR2−SDRAM8へのアクセスが行なわれていない場合には、ポインタフラグはV(Valid)となる。
【0031】
ポインタ管理部11は、リードのリクエストを出力後、ステータス管理部25から実行中(EXE)のステータスの通知を受けたときには、ポインタフラグをRに設定する。また、ポインタ管理部11は、ライトのリクエストを出力後、ステータス管理部25から実行中(EXE)のステータスの通知を受けたときには、ポインタフラグをDに設定する。また、ポインタ管理部11は、リクエストの出力後、ステータス管理部25から終了状態(DONE)のステータスの通知を受けたときには、ポインタフラグをVに設定する。
【0032】
図3(b)は、イニシエータ1で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。図3(c)は、イニシエータ2で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。図3(d)は、イニシエータ3で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。図3(e)は、イニシエータ4で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。
【0033】
このように、各イニシエータ1〜4が自身のリクエストに対するポインタフラグを管理し、イニシエータ1〜4どうしで、互いに他のイニシエータ1〜4のポインタフラグを参照することによって、たとえば、イニシエータ2が、DDR2−SDRAM8内のADD(10)のアドレスのデータを参照中であるので、他のイニシエータ1、3および4からは、DDR2−SDRAM8内のADD(10)のアドレスと同一のロー(行)へアクセスすることを控えるようにすることができ、DDR2−SDRAM8内のデータのコヒーレンシを保つことができる。
【0034】
再び、図1を参照して、DDR2−SDRAM8は、メモリセルアレイ51と、ロウデコーダ53と、カラムデコーダ52と、アドレスバッファ55と、コマンドデコーダ57と、I/Oバッファ54とを備える。
【0035】
メモリセルアレイ51は、行列上に配置された複数のメモリセルを備える。メモリセル内には、行方向にm本のワード線WL1〜WLmが配置され、列方向にn本のビット線BL1〜BLnが配置される。
【0036】
アドレスバッファ55は、メモリインタフェース部27から出力されたロウアドレスおよびカラムアドレスを受けて、ロウアドレスをロウデコーダ53に供給し、カラムアドレスをカラムデコーダ52に供給する。
【0037】
コマンドデコーダ57は、メモリインタフェース部27から出力されたコマンドを受けて、コマンドに基づいて、メモリセルアレイ51に対するアクセスを制御する。
【0038】
I/Oバッファ54は、カラムアドレスで選択された列のビット線対から伝送されるリードデータを保持し、リードデータをメモリコントローラ6へ出力する。また、I/Oバッファ54は、メモリコントローラ6から送られたライトデータを保持し、カラムアドレスで選択された列のビット線対へ出力する。
【0039】
ロウデコーダ53は、アドレスバッファ55から送られるロウアドレスに従って、1本のワード線を選択して、選択したワード線を活性化する。
【0040】
カラムデコーダ52は、アドレスバッファ55から送られるカラムアドレスに従って、I/Oバッファ54と接続する列を選択する。
【0041】
図4は、メモリコントローラ6の構成を表わす図である。
図4を参照して、メモリコントローラ6は、キューイング可否判定部20と、リクエストキュー22と、キュー情報記憶部23と、併合部31と、併合情報記憶部24と、イニシエータグループ情報記憶部30と、優先制御部21と、メモリインタフェース部27と、ステータス情報記憶部26と、ステータス管理部25と、メモリインタフェース部27と、出力制御部29とを備える。優先制御部21は、待ち時間計測部28と、処理時間計測部32と、平均処理レート算出部33と、選択部34とを備える。
【0042】
キューイング可否判定部20は、受信したリクエストのリクエスト情報のキューイング可否を参照して、キューイング可否が可に設定されているかどうかを調べる。キューイング可否判定部20は、キューイング可否が可に設定されている場合には、受信したリクエストをリクエストキュー22の空いているキー位置の番号が最も小さい位置に出力し、受信したリクエストが格納された状態を表わすようにキュー情報記憶部23内のキュー情報を更新する。また、キューイング可否判定部20は、キューイング可否が不可に設定されている場合には、受信したリクエストを直接選択部34に出力する。このように、キューイングの可否を判定することによって、迅速に処理すべきリクエスト(特にイニシエータ1(CPU)から出力されるリクエストなど)がリクエストキュー22に格納されることによって、処理が後回しになるのを防止することができる。
【0043】
リクエストキュー22は、キューイング可否判定部20から出力されたリクエストを格納する。リクエストは、リクエストキュー22内のキュー位置の番号が小さい方から順番に格納される。また、リクエストキュー22は、格納しているリクエストがメモリインタフェース部27へ出力された場合には、残りのリクエストをキュー位置の番号が小さくなるように詰めることによって、リクエストを再配置する。
【0044】
図5(a)および(b)は、リクエストキュー22の状態の例を表わす図である。
図5(a)を参照して、キュー位置が「1」にTIDが「0001」のリクエストが格納され、キュー位置が「2」にTIDが「0002」のリクエストが格納され、キュー位置が「3」にTIDが「0003」のリクエストが格納され、キュー位置が「4」にTIDが「0004」のリクエストが格納され、キュー位置が「5」にTIDが「0005」のリクエストが格納され、キュー位置が「6」にTIDが「0009」のリクエストが格納され、キュー位置が「7」にTIDが「0010」のリクエストが格納され、キュー位置が「8」にTIDが「0011」のリクエストが格納され、キュー位置が「9」にTIDが「0012」のリクエストが格納されている。
【0045】
図5(b)は、図5(a)の状態から、TIDが「0001」、「0003」、「0005」、「0009」、「0010」、「0011」、「0012」のリクエストが出力されたときのリクエストキュー22の状態を表わす。
【0046】
キュー情報記憶部23は、キューの位置と、そこに格納されているリクエストの識別番号(TID)との対応を定めたキュー情報を記憶する。
【0047】
図6(a)は、図5(a)に示すリクエストキュー22の状態でのキュー情報の例を表わす図である。図6(b)は、図6(b)に示すリクエストキュー22の状態でのキュー情報の例を表わす図である。
【0048】
再び、図1を参照して、併合部31は、リクエストキュー22内のリクエストのうち、DDR2−SDRAM8における1回の読出しサイクルまたは書込みサイクルでアクセス可能なリクエストを併合する。併合処理の詳細は後述する。
【0049】
イニシエータグループ情報記憶部30は、イニシエータグループ情報を記憶する。イニシエータグループ情報は、他の条件を満たせば、リクエストを併合することができるイニシエータの組合せを表わす。言い換えると、イニシエータグループ情報で定められていないイニシエータ間では、リクエストの併合ができないことになる。これは、併合になじまないイニシエータどうしのリクエストを併合すると不都合が生じる場合があることを考慮したものである。
【0050】
併合情報記憶部24は、併合されたリクエストについて、グループ識別番号(GID)と、そのグループに属するリクエストの識別番号(TID)との対応を表わす情報を記憶する。
【0051】
図7は、併合情報の例を表わす図である。
図7を参照して、グループ識別番号(GID)が「0001」には、TIDが「0001」、「0005」、「0009」、「0010」のリクエストが併合されている。また、グループ識別番号(GID)が「0002」には、TIDが「0003」、「0011」、「0012」のリクエストが併合されている。
【0052】
ステータス情報記憶部26は、受信したリクエストのステータス情報を記憶する。DDR2−SDRAM8へのアクセスが未実行のリクエストのステータスは、アイドル(IDLE)である。DDR2−SDRAM8へのアクセスが実行中のリクエストのステータスは実行中(EXE)である。DDR2−SDRAM8へのアクセスが終了したリクエストのステータスは終了状態(DONE)である。
【0053】
図8は、ステータス情報の例を表わす図である。
図8を参照して、グループ識別番号(GID)が「0001」に属するTIDが「0001」、「0005」、「0009」、「0010」のリクエストのステータスは、いずれも「END」である。
【0054】
また、TIDが「0002」のリクエストのステータスは、「IDLE」である。
グループ識別番号(GID)が「0002」に属するTIDが「0003」、「0011」のリクエストのステータスは、いずれも「END」であり、TIDが「0012」のリクエストのスタータスは「EXE」である。このように、同一のグループに属するリクエストのステータスが相違するのは、たとえば、リードのアクセスの場合に、指定したカラムアドレスおよび指定した転送バイト数などによって、DDR2−SDRAM8から転送されてきたリードデータが、どのリクエストに対応するものかを識別することができるからである。
【0055】
また、TIDが「0004」のリクエストのステータスは、「IDLE」である。
ステータス管理部25は、イニシエータ1〜4からのリクエストの受信に応じて、リクエストのステータスをIDLEに設定する。ステータス管理部25は、メモリインタフェース部27がリクエストに従ってDDR2−SDRAM8へのアクセスを開始した(つまり、コマンドやアドレスを出力した)ことに応じて、リクエストのステータスをEXEに設定する。また、ステータス管理部25は、リクエストがリードの場合に、リクエストに応答してDDR2−SDRAM8からリードデータを受信したことに応じて、リクエストのステータスをDONEに設定する。また、ステータス管理部25は、リクエストがライトの場合には、リクエストに従ってDDR2−SDRAM8へのアクセスを開始してから所定の時間が経過したことに応じて、リクエストのステータスをDONEに設定する。
【0056】
ステータス管理部25は、リクエストのステータスが変化したことに応じて、リクエストを出力したイニシエータに対して、ステータス情報を送る。このようにリクエストのステータスをイニシエータ側に送るのは、イニシエータ側は、発行したリクエストがリクエストキュー22に格納されることによって、すぐに実行されるとは限らず、発行したリクエストのステータスが把握できないことを考慮したものである。
【0057】
また、ステータス管理部25は、ステータスが(DONE)に変化したリクエストが、割込通知要求フラグがオンのリクエストの場合には、特定のイニシエータ1(CPU)に割込みを表わす割込情報を送る。
【0058】
待ち時間計測部28は、ステータス情報記憶部26を参照して、リクエストがリクエストキュー22に格納されることによってそのリクエストのステータスがIDLEが設定された時に、そのリクエスト用のタイマを起動し、待ち時間を計測する。
【0059】
処理時間計測部32は、ステータス情報記憶部26を参照して、リクエストがリクエストキュー22に格納されることによってそのリクエストのステータスがIDLEに設定された時に、そのリクエスト用のタイマを起動し、そのリクエストのステータスがEXEに設定される(すなわちアクセスが開始される)までの時間を計測して、処理時間記憶部61に記憶する。
【0060】
平均処理レート算出部33は、各リクエストの計測された処理時間と転送バイト数とを用いて、グループごとの平均処理レート、つまり1バイトごとの処理時間の平均値を算出して、平均処理レート記憶部62に記憶する。ここでは、1つのグループに属するリクエストは、たとえば、キューイング可否、併合可否、および転送方向が同一であるとする。
【0061】
選択部34は、第1優先度制御、第2優先度制御に基づいて、リクエストキュー22に格納されたリクエストおよびキューイング可否判定部20から直接送られてきたリクエストのうち、次に処理すべきリクエストを選択し、選択したリクエストをメモリインタフェース部27に出力する。第1優先度制御は、できるだけ迅速に処理すべきリクエストを選択するための制御である。第2優先度制御は、第1優先度制御だけでは、いつまでも選択されずに残ってしまうリクエストを選択するための制御である。第1優先度制御および第2優先度制御の詳細は、後述する。
【0062】
メモリインタフェース部27は、選択部34から出力されたリクエストに基づいて、DDR2−SDRAM8に対して、バス12を通じてアクセスを行なう。すなわち、メモリインタフェース部27は、アクセス要求がリードの場合には、リクエスト情報中のメモリアドレスおよび転送バイト数に基づいて、プリチャージコマンドを出力し、その後アクティブコマンドとロウアドレスを発行し、その後リードコマンドとカラムアドレスを発行する。また、メモリインタフェース部27は、アクセス要求がライトの場合には、リクエスト情報中のメモリアドレスおよび転送バイト数に基づいて、プリチャージコマンドを発行し、その後アクティブコマンドとロウアドレスを発行し、その後ライトコマンドとカラムアドレスを発行する。
【0063】
メモリインタフェース部27は、併合された複数のリクエストに対するDDR2−SDRAM8へのアクセスを一括して行なう。すなわち、メモリインタフェース部27は、併合された複数のリクエストについては、ロウアドレスが同一であるので、先頭のリクエストについてのみ、プリチャージコマンド、アクティブコマンドおよびロウアドレスをDDR2−SDRAM8へ出力する。このように、コマンドおよびアドレスの転送回数を減らすことによって、メモリコントローラ6とDDR2−SDRAM8の間のバス12の使用効率を高めることができる。
【0064】
また、メモリインタフェース部27は、アクセス要求がリードの場合には、バス12を通じてDDR2−SDRAM8から送られるリードデータを受信する。
【0065】
出力制御部29は、リクエスト情報に基づいて、受信したリードデータをどのイニシエータに出力するかを特定し、特定したイニシエータにリードデータを出力する。
【0066】
(キューイングと併合処理の動作)
図9は、キューイングと併合処理の動作手順を表わす図である。
【0067】
図9を参照して、キューイング可否判定部20は、受信したリクエストのリクエスト情報のキューイング可否を参照して、キューイング可否が可に設定されているかどうかを調べる。キューイング可否判定部20は、キューイング可否が可に設定されている場合には(ステップS101でYES)、受信したリクエストをリクエストキュー22の空いているキー位置の番号が最も小さい位置に出力する(ステップS102)。また、キューイング可否判定部20は、受信したリクエストが格納された状態を表わすようにキュー情報記憶部23内のキュー情報を更新する(ステップS104)。
【0068】
一方、キューイング可否判定部20は、キューイング可否が不可に設定されている場合には(ステップS101でNO)、受信したリクエストを直接選択部34に出力する(ステップS103)。
【0069】
次に、併合部31は、受信したリクエストのリクエスト情報の併合可否を参照して、併合可否が可に設定されているかどうかを調べる。併合部31は、併合可否が不可に設定されている場合には(ステップS105でNO)、受信したリクエストと他のリクエストとの併合を行なわないこととし、ステップS111に進む。
【0070】
次に、併合部31は、併合可否が可に設定されている場合には(ステップS105でYES)、受信したリクエストのリクエスト情報の発行元イニシエータ識別番号と、リクエストキュー22に格納されているリクエストのリクエスト情報の発行元イニシエータ識別番号と、イニシエータグループ情報記憶部30内のイニシエータグループ情報を参照して、受信したリクエストの発行元イニシエータが属するイニシエータグループと同一のグループに属するイニシエータの1個以上のリクエスト(A)が、リクエストキュー22に格納されているかどうかを調べる。併合部31は、1個以上のリクエスト(A)が格納されていない場合には(ステップS106でNO)、受信したリクエストと他のリクエストとの併合を行なわないこととし、ステップS111に進む。
【0071】
次に、併合部31は、1個以上のリクエスト(A)が格納されている場合には(ステップS106でYES)、受信したリクエストのリクエスト情報の転送方向と、リクエストキュー22に格納されている1個以上のリクエスト(A)のリクエスト情報の転送方向を参照して、リクエストキュー22に格納されている1個以上のリクエスト(A)のうち、受信したリクエストと転送方向が同一である1個以上のリクエスト(B)があるかどうかを調べる。併合部31は、1個以上のリクエスト(B)がない場合には(ステップS107でNO)、受信したリクエストと他のリクエストとの併合を行なわないこととし、ステップS111に進む。
【0072】
次に、併合部31は、1個以上のリクエスト(B)がある場合には(ステップS107でYES)、受信したリクエストのリクエスト情報のメモリアドレスと、リクエストキュー22に格納されている1個以上のリクエスト(B)のリクエスト情報のメモリアドレスを参照して、リクエストキュー22に格納されている1個以上のリクエスト(B)のうち、受信したリクエストと、メモリアドレスのうちのロウアドレスが同一の1個以上のリクエスト(C)があるかどうかを調べる。併合部31は、1個以上のリクエスト(C)がない場合には(ステップS108でNO)、受信したリクエストと他のリクエストとの併合を行なわないこととし、ステップS111に進む。
【0073】
次に、併合部31は、1個以上のリクエスト(C)がある場合には(ステップS108でYES)、受信したリクエストのリクエスト情報の転送バイト数と、リクエストキュー22に格納されている1個以上のリクエスト(C)のリクエスト情報の転送バイト数とを参照して、リクエストキュー22に格納されている1個以上のリクエスト(C)のうち、併合したときの転送バイト数が、メモリセルアレイ51のビット線の数(つまり、1回にアクセスできるサイズ)以下となるような、1個以上のリクエスト(D)があるかどうかを調べる。ここで、たとえば、リクエストCには、c1、c2があり、c1とc2が既に併合されている場合には、併合部31は、併合情報を参照して、c1とc2の転送バイト数の合計と、受信したリクエストの転送バイト数の総和が、1回にアクセスできるサイズ以下であるかどうかを調べることになる。併合部31は、1個以上のリクエスト(D)がない場合には(ステップS109でNO)、受信したリクエストと他のリクエストとの併合を行なわないこととし、ステップS111に進む。
【0074】
次に、併合部31は、1個以上のリクエスト(D)がある場合には(ステップS109でYES)、併合情報記憶部24内の併合情報を更新する。すなわち、併合部31は、併合相手のリクエストが既に別のリクエストと併合されている場合には、併合されているグループに属するリクエストのTIDに、受信したリクエストのTIDを追記する。併合する相手のリクエストが今回初めて併合される場合には、新規にグループを作成し、そのグループに属するリクエストのTIDに、受信したリクエストのTIDと、併合する相手のリクエストのTIDを書込む(ステップS110)。
【0075】
次に、ステータス管理部25は、ステータス情報記憶部26内のステータス情報に受信したリクエストのステータス(IDLE)を設定する(ステップS111)。
【0076】
(第1の優先度制御の動作)
図10は、第1の優先度制御の動作手順を表わす図である。
【0077】
図10を参照して、待ち時間計測部28は、1つのリクエストがリクエストキュー22に格納されるごとに、そのリクエスト用のタイマを起動して、待ち時間T1を計測する。すなわち、待ち時間計測部28は、リクエストがリクエストキュー22に格納されることによってステータス情報にそのリクエストのステータスがIDLEが設定された時に、そのリクエスト用のタイマを起動し、待ち時間T1を計測する(ステップS201)。
【0078】
次に、選択部34は、キューイング可否判定部20から直接出力されたリクエスト(このリクエストをリクエストAとする)があるかどうかを調べる。
【0079】
選択部34は、リクエストAが1個以上存在する場合には(ステップS202でYES)、1個のリクエストAをメモリインタフェース部27へ送る(ステップS203)。
【0080】
次に、選択部34は、リクエストAが存在しない場合には(ステップS202でNO)、リクエストキュー22に格納されているリクエストのリクエスト情報の許容間待ち時間情報を参照して、リクエストキュー22に格納された複数のリクエストについて、許容可能待ち時間T2と、待ち時間計測部28で計測された待ち時間T1との時間差を算出し、この時間差ΔTが閾値TR1以下となるリクエスト(このリクエストをリクエストBとする)があるかどうかを調べる。ここで、TR1は、転送バイト数、メモリコントローラ6からDDR2−SDRAM8までの転送レートを考慮した値である。
【0081】
選択部34は、リクエストBが1個以上存在する場合には(ステップS204でYES)、1個のリクエストBをメモリインタフェース部27へ送る。ただし、この1個のリクエストBが併合されている場合には、選択部34は、併合されている他のリクエストもメモリインタフェース部27へ送る(ステップS205)。
【0082】
次に、選択部34は、リクエストBが存在しない場合には(ステップS204でNO)、リクエストキュー22に格納されているリクエストのリクエスト情報の優先度情報を参照して、優先度が他のリクエストよりも高く、かつ最大であるリクエスト(このリクエストをリクエストCとする)があるかどうかを調べる。
【0083】
選択部34は、リクエストCが1個以上存在する場合には(ステップS206でYES)、1個のリクエストCをメモリインタフェース部27へ送る。ただし、この1個のリクエストCが併合されている場合には、選択部34は、併合されている他のリクエストもメモリインタフェース部27へ送る(ステップS207)。
【0084】
選択部34は、リクエストCが存在しない場合には(ステップS206でNO)、リクエストキュー22のキュー位置が「1」の1個のリクエスト(このリクエストをリクエストDとする)をメモリインタフェース部27へ送る。ただし、この1個のリクエストDが併合されている場合には、選択部34は、併合されている他のリクエストもメモリインタフェース部27へ送る(ステップS208)。
【0085】
リクエストキュー22は、格納しているリクエストがメモリインタフェース部27へ出力された場合には、残りのリクエストをキュー位置の番号が小さくなるように詰めることによって、リクエストを再配置する(ステップS209)。
【0086】
次に、選択部34は、リクエストキュー22内のリクエストがメモリインタフェース部27へ出力された場合には、再配置したリクエストキュー22の格納状態を表わすようにキュー情報記憶部23内のキュー情報を更新する(ステップS210)。
【0087】
次に、メモリインタフェース部27は、選択部34から出力されたリクエストに基づいて、DDR2−SDRAM8に対して、コマンド、ロウアドレス、およびカラムアドレスを発行して、アクセスを行なう(ステップS211)。
【0088】
次に、ステータス管理部25は、メモリインタフェース部27がリクエストに従ってDDR2−SDRAM8へのアクセスを開始した(つまり、コマンドやアドレスを出力した)ことに応じて、リクエストのステータスをEXEに設定し、そのリクエストを発行したイニシエータにステータス(EXE)を表わすステータス情報を送る(ステップS212)。
【0089】
(第2の優先度制御の動作)
図11は、第2の優先度制御の動作手順を表わす図である。
【0090】
図11を参照して、処理時間計測部32は、1つのリクエストがリクエストキュー22に格納されるごとに、そのリクエスト用のタイマを起動して、処理時間T3を計測する。すなわち、処理時間計測部32は、リクエストがリクエストキュー22に格納されることによってステータス情報にそのリクエストのステータスがIDLEに設定された時に、そのリクエスト用のタイマを起動し、そのリクエストのステータスがEXEに設定されるまでの時間を処理時間T3として計測して、処理時間記憶部61に記憶する(ステップS301)。
【0091】
平均処理レート算出部33は、各リクエストの処理時間T3および転送バイト数を用いて、グループごとの平均処理レートR1、つまり1バイトごとの処理時間の平均値を算出して、平均処理レート記憶部62に記憶する。ここでは、1つのグループに属する1個以上のリクエストは、キューイング可否、併合可否、および転送方向が同一であるとする。
【0092】
選択部34は、所定の時間間隔ごとに(ステップS303でYES)、以下のステップの処理を行なう。これは、優先度の制御は、第1の優先度制御を基本としつつ、第1の優先度制御では、いつまでも選択されないリクエストを救済するために第2の優先度制御を行なうためである。
【0093】
選択部34は、リクエストキュー22に格納されているリクエストのリクエスト情報の想定処理レートR2を参照して、リクエストキュー22に格納されている複数のリクエストについて、そのリクエストが属するグループの平均処理レートR1と、そのリクエストの想定処理レートR2とのレート差ΔRを算出して、このレート差ΔRが閾値TR2以上となるリクエスト(このリクエストをリクエストAとする)があるかどうかを調べる。
【0094】
選択部34は、そのようなリクエストAが1個以上存在する場合には(ステップS304でYES)、1個のリクエストAをメモリインタフェース部27へ送る。ただし、この1個のリクエストAが併合されている場合には、選択部34は、併合されている他のリクエストもメモリインタフェース部27へ送る(ステップS305)。
【0095】
次に、リクエストキュー22は、格納しているリクエストがメモリインタフェース部27へ出力された場合には、残りのリクエストをキュー位置の番号が小さくなるように詰めることによって、リクエストを再配置する(ステップS306)。
【0096】
次に、選択部34は、再配置したリクエストキュー22の格納状態を表わすようにキュー情報記憶部23内のキュー情報を更新する(ステップS307)。
【0097】
次に、メモリインタフェース部27は、選択部34から出力されたリクエストに基づいて、DDR2−SDRAM8に対して、コマンド、ロウアドレス、およびカラムアドレスを発行して、アクセスを行なう(ステップS308)。
【0098】
次に、ステータス管理部25は、メモリインタフェース部27がリクエストに従ってDDR2−SDRAM8へのアクセスを開始した(つまり、コマンドやアドレスを出力した)ことに応じて、リクエストのステータスをEXEに設定し、そのリクエストを発行したイニシエータにステータス(EXE)を表わすステータス情報を送る(ステップS309)。
【0099】
(イニシエータへの応答処理の動作)
図12は、イニシエータへの応答処理の動作手順を表わす図である。
【0100】
図12を参照して、メモリインタフェース部27が、転送方向がDDR2−SDRAM8からイニシエータに設定されたリクエストに従ってリードコマンドを出力した場合に(ステップS401でYES)、メモリインタフェース部27は、DDR2−SDRAM8からリードデータを受信する(ステップS402)。
【0101】
出力制御部29は、リクエスト情報に基づいて、受信したリードデータをどのイニシエータに出力するかを特定し、特定したイニシエータにリードデータを出力する(ステップS403)。
【0102】
ステータス管理部25は、イニシエータへ出力したリードデータに対応するリクエスト、つまり、そのリードデータの転送を指定したリクエストのステータス情報をDONEに設定し、そのリードデータの転送を指定したリクエストを発行したイニシエータにステータス(DONE)を表わすステータス情報を送る(ステップS404)。
【0103】
一方、メモリインタフェース部27が、転送方向がイニシエータからDDR2−SDRAM8に設定されたリクエストに従ってライトコマンドを出力した場合に(ステップS401でNO)、ステータス管理部25は、所定の時間が経過した後(ステップS405でYES)、そのリクエストのステータス情報をDONEに設定し、そのリクエストを発行したイニシエータにステータス(DONE)を表わすステータス情報を送る(ステップS406)。
【0104】
次に、出力制御部29は、そのリクエストが、割込通知要求フラグがオンのリクエストの場合には(ステップS407でYES)、イニシエータ1(CPU)に割込みを表わす割込情報を送る(ステップS408)。
【0105】
以上のように、本発明の実施形態のデータ処理装置によれば、複数のイニシエータからのリクエストでも、同一の行に対するものは併合して一括して処理するので、バススの使用効率を高めることができる。
【0106】
[変形例]
本発明は、上記の実施形態に限定されるものではなく、たとえば、以下のような変形例も含まれる。
【0107】
(1) 平均処理レート
本発明の実施形態では、DDR2−SDRAMへのアクセスが開始されるまでのレートを想定処理レートとしたが、これに限定するものではない、たとえば、DDR2−SDRAMへのアクセスが終了するまでのレートを想定処理レートとしてもよい。そして、処理時間計測部32は、リクエストがリクエストキュー22に格納されることによってステータス情報にそのリクエストのステータスがIDLEが設定された時に、そのリクエスト用のタイマを起動し、そのリクエストのステータスがDONEに設定される(すなわち、アクセスが終了)までの時間を処理時間T3として計測することとしてもよい。
【0108】
(2) ポインタ管理部
本発明の実施形態では、ポインタ管理部が、ポインタとポインタフラグを管理するものとしたが、これに限定するものではない。たとえば、ポインタ管理部が、ポインタとポインタフラグに加えて、アクセス対象のメモリセルのアドレス、ポインタを始点としたアクセス対象のメモリセルの数などを管理することとしてもよい。
【0109】
(3) 割り込み
本発明の実施形態では、割込通知要求フラグは、たとえば、画像処理装置において、画像処理の最終段の処理を行なう画像処理モジュール(イニシエータ)が、1画面の最後のデータに対するアクセスを要求するようなリクエストに含まれるとしたが、これに限定するものではない。特定のイニエータが、1画面の最初のデータに対するアクセスを要求するようなリクエストに含まれるものとしてもよい。この場合、ステータス管理部25は、ステータスが(EXE)に変化したリクエストが、割込通知要求フラグがオンのリクエストの場合には、特定のイニシエータ1(CPU)に割込みを表わす割込情報を送るものとしてもよい。
【0110】
(4) ライト要求
本発明の実施形態では、メモリインタフェース部27が転送方向がイニシエータ側に設定されたリクエストに従ってライトコマンドを出力した場合に、ステータス管理部25は、所定の時間が経過した後、そのリクエストのステータスをDONEに設定したが、これに限定するものではない。たとえば、DDR2−SDRAMから書込みを終了したことを表わす情報を受信した後、または、リクエストの転送が終了したことを表わす情報を受信したときに、リクエストのステータスをDONEに設定するものとしてもよい。
【0111】
(5) 割込みの判断
本発明の実施形態では、割込通知要求フラグを用いて、割込情報を送るか否かを判断するものとしたが、これに限定するものではない。たとえば、リクエスト情報に含まれるアクセスされるメモリアドレスに基づいて、割込みを送るか否かを判断してもよい。
【0112】
またリクエストの併合や実行において、データの整合性や排他処理を考慮することは当然に行うことである。例えば、メモリインタフェース部27でDDR2−SDRAMへのリードリクエスト、ライトリクエスト、再度のリードリクエストが順次受付けられ、2つのリードリクエストが併合可能な属性であったとしても、ライトリクエストにより最初のリードリクエストまたは再度のリードリクエストでのデータに整合性の問題を生じるのであれば、これら2つのリードリクエストの併合は当然に行われず、ライトリクエストの実行時点を挟んで、前後のリードリクエストがかかる順序で実行される。
【0113】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。特にメモリインタフェース部に接続されるメモリはDDR2−SDRAMを含むSDRAM(揮発性メモリ)だけでなくNAND型Flashメモリ(不揮発性メモリ)等を含み、アクセスアドレスにより選択される1のワード線に接続されるメモリセルの数が比較的多く1回のワード線アクセスに対して複数回のデータ入出力が対応するようなメモリ、又は複数個のメモリを有する外面的に同様の動作と捉えられる記憶媒体(メモリカード)のインタフェース部において本発明を同様に実施することが可能である。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【0114】
【図1】本発明の実施形態のデータ処理装置の構成を表わす図である。
【図2】リクエストのデータ構造を表わす図である。
【図3】(a)は、ポインタフラグを表わす図である。(b)は、イニシエータ1で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。(c)は、イニシエータ2で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。(d)は、イニシエータ3で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。(e)は、イニシエータ4で発行されたリクエストのポインタフラグと、ポインタ値の例を表わす図である。
【図4】メモリコントローラの構成を表わす図である。
【図5】(a)および(b)は、リクエストキューの状態の例を表わす図である。
【図6】キュー情報の例を表わす図である。
【図7】併合情報の例を表わす図である。
【図8】ステータス情報の例を表わす図である。
【図9】キューイングと併合処理の動作手順を表わす図である。
【図10】第1の優先度制御の動作手順を表わす図である。
【図11】第2の優先度制御の動作手順を表わす図である。
【図12】イニシエータへの応答処理の動作手順を表わす図である。
【符号の説明】
【0115】
1〜4 イニシエータ、5,12 バス、6 メモリコントローラ、7 バスアービタ、8 DDR2−SDRAM、10 リクエスト生成部、11 ポインタ管理部、20 キューイング可否判定部、21 優先制御部、22 リクエストキュー、23 キュー情報記憶部、24 併合情報記憶部、25 ステータス管理部、26 ステータス情報記憶部、27 メモリインタフェース部、28 待ち時間計測部、29 出力制御部、30 イニシエータグループ情報記憶部、31 併合部、32 処理時間計測部、33 平均処理レート算出部、34 選択部、51 メモリセルアレイ、52 カラムデコーダ、53 ロウデコーダ、54 I/Oバッファ、55 アドレスバッファ、57 コマンドデコーダ、61 処理時間記憶部、62 平均処理レート記憶部。
【特許請求の範囲】
【請求項1】
複数のメモリアクセスリクエスタからのリクエストを受けて、バスを介してメモリへのアクセスをコントロールするメモリコントローラであって、
複数のメモリアクセスリクエスタから受信したリクエストを格納するキューと、
前記キュー内のリクエストのうち、前記メモリにおける1回の読出しサイクルまたは書込みサイクルでアクセス可能なリクエストを併合する併合部と、
前記リクエストに従って、前記メモリに対してアクセスを行なうインタフェース部とを備え、
前記インタフェース部は、併合された複数のリクエストに対する前記メモリへのアクセスを一括して行なう、メモリコントローラ。
【請求項2】
前記メモリは、SDRAMであって、
前記インタフェース部は、併合された複数のリクエストについては、先頭のリクエストについてのみ、プリチャージコマンド、アクティブコマンドおよびロウアドレスを前記SDRAMへ出力する、請求項1記載のメモリコントローラ。
【請求項3】
前記メモリコントローラは、さらに、
複数のメモリアクセスリクエスタのうちの併合可能なメモリアクセスリクエスタのグループを表わす第1の情報を記憶する記憶部を備え、
前記併合部は、さらに、前記第1の情報を参照して、併合可能なメモリアクセスリクエスタからのリクエストのみを併合する、請求項1または2記載のメモリコントローラ。
【請求項4】
前記リクエストは、他のリクエストとの併合の可否を表わす第2の情報を含み、
前記併合部は、さらに、前記第2の情報を参照して、併合が可能なリクエストのみを併合する、請求項1〜3のいずれか1項に記載のメモリコントローラ。
【請求項5】
前記リクエストは、前記キューへの格納の可否を表わす第3の情報を含み、
前記メモリコントローラは、さらに、
受信したリクエストに含まれる前記第3の情報を参照して、前記キューへの格納が可能なものだけを前記キューに格納するキューイング判定部を備えた、請求項1〜4のいずれか1項に記載のメモリコントローラ。
【請求項6】
前記リクエストは、前記メモリへのアクセスの開始までの許容可能な待ち時間を表わす第4の情報を含み、
前記メモリコントローラは、さらに、
受信したリクエストの前記キューに格納されてからの待ち時間を計測する計測部と、
前記キューに格納された複数のリクエストについて、前記第4の情報で示される許容可能な待ち時間と前記計測部で計測される前記待ち時間との時間差を算出し、前記算出した時間差に基づいて、次に処理すべきリクエストを選択し前記インタフェース部に出力する選択部とを備え、
前記選択部は、前記選択したリクエストが他のリクエストと併合されている場合には、前記併合されている他のリクエストも選択して、前記インタフェース部に出力する、請求項5記載のメモリコントローラ。
【請求項7】
前記リクエストは、処理の優先度を表わす第5の情報を含み、
前記メモリコントーラは、さらに、
前記キューに格納された複数のリクエストについて、前記第5の情報で示される優先度に基づいて、次に処理すべきリクエストを選択し前記インタフェース部に出力する選択部を備え、
前記選択部は、前記選択したリクエストが他のリクエストと併合されている場合には、前記併合されている他のリクエストも選択して、前記インタフェース部に出力する、請求項5記載のメモリコントローラ。
【請求項8】
前記リクエストは、前記メモリへのアクセスが開始されるまで、または前記メモリへのアクセスが終了するまでの想定処理レートを表わす第6の情報を含み、
前記メモリコントローラは、さらに、
受信したリクエストの前記キューに格納されてからメモリへのアクセスが開始されるまでの処理時間、または前記メモリへのアクセスが終了するまでの処理時間を計測する第2の計測部と、
前記複数のメモリアクセスリクエスタから出力される複数のリクエストを分類したグループごとに、前記計測した処理時間に基づいて平均処理レートを算出する平均処理レート算出部と、
所定の時間ごとに、前記キューに格納された複数のリクエストについて、前記リクエストが属するグループの平均処理レートと、前記リクエストの前記第6の情報で示される想定処理レートとの時間差に基づいて、次に処理すべきリクエストを選択して、前記インタフェース部に出力する選択部とを備え、
前記選択部は、前記選択したリクエストが他のリクエストと併合されている場合には、前記併合されている他のリクエストも選択して、前記インタフェース部に出力する、請求項5記載のメモリコントローラ。
【請求項9】
前記メモリコントローラは、
前記受信したリクエストのステータスを管理するステータス管理部を備え、
前記ステータス管理部は、前記メモリへのアクセスが未実行のリクエストのステータスをアイドルに設定し、前記メモリへのアクセスが実行中のリクエストのステータスを実行中に設定し、前記メモリへのアクセスが終了したリクエストのステータスを終了状態に設定し、
前記ステータス管理部は、前記リクエストを出力したメモリアクセスリクエスタに対して、前記ステータスを通知する、請求項1〜8のいずれか1項に記載のメモリコントローラ。
【請求項10】
前記ステータス管理部は、前記メモリアクセスリクエスタからのリクエストの受信に応じて、受信したリクエストのステータスをアイドル状態に設定する、請求項9記載のメモリコントローラ。
【請求項11】
前記ステータス管理部は、前記インタフェース部が、リクエストに従って前記メモリへのアクセスを開始したことに応じて、前記リクエストのステータスを実行状態に設定する、請求項9記載のメモリコントローラ。
【請求項12】
前記ステータス管理部は、リクエストが読出し要求の場合には、前記リクエストに応答して前記メモリから読出されたデータの受信に応じて、前記リクエストのステータスを終了状態に設定する、請求項9記載のメモリコントローラ。
【請求項13】
前記ステータス管理部は、特定のリクエストのステータスが実行中になったことに応じて、所定のメモリアクセスリクエスタに割込みを通知する、請求項9記載のメモリコントローラ。
【請求項14】
前記ステータス管理部は、特定のリクエストのステータスが終了状態になったことに応じて、所定のメモリアクセスリクエスタに割込みを通知する、請求項9記載のメモリコントローラ。
【請求項15】
前記複数のメモリアクセスリクエスタと、
請求項9〜14のいずれか1項に記載のメモリコントローラと、
前記メモリとを備え、
各メモリアクセスリクエスタは、
出力したリクエストごとに、前記メモリ内のアクセス位置のアドレスを表わすポインタを管理するポインタ管理部を備え、
前記ポインタ管理部は、さらに、前記ポインタについて、アクセス状態を表わすポインタフラグを管理し、
前記ポインタ管理部は、読出しのリクエストを出力後、前記ステータス管理部から実行中のステータスの通知を受けたときには、前記ポインタフラグを前記メモリのデータの参照中を表わすように設定し、
書込みのリクエストを出力後、前記ステータス管理部から実行中のステータスの通知を受けたときには、前記ポインタフラグを前記メモリのデータの更新中を表わすように設定し、
リクエストの出力後、前記ステータス管理部から終了状態のステータスの通知を受けたときには、前記ポインタフラグを前記メモリへのアクセスが行なわれていないことを表わすように設定する、データ処理装置。
【請求項1】
複数のメモリアクセスリクエスタからのリクエストを受けて、バスを介してメモリへのアクセスをコントロールするメモリコントローラであって、
複数のメモリアクセスリクエスタから受信したリクエストを格納するキューと、
前記キュー内のリクエストのうち、前記メモリにおける1回の読出しサイクルまたは書込みサイクルでアクセス可能なリクエストを併合する併合部と、
前記リクエストに従って、前記メモリに対してアクセスを行なうインタフェース部とを備え、
前記インタフェース部は、併合された複数のリクエストに対する前記メモリへのアクセスを一括して行なう、メモリコントローラ。
【請求項2】
前記メモリは、SDRAMであって、
前記インタフェース部は、併合された複数のリクエストについては、先頭のリクエストについてのみ、プリチャージコマンド、アクティブコマンドおよびロウアドレスを前記SDRAMへ出力する、請求項1記載のメモリコントローラ。
【請求項3】
前記メモリコントローラは、さらに、
複数のメモリアクセスリクエスタのうちの併合可能なメモリアクセスリクエスタのグループを表わす第1の情報を記憶する記憶部を備え、
前記併合部は、さらに、前記第1の情報を参照して、併合可能なメモリアクセスリクエスタからのリクエストのみを併合する、請求項1または2記載のメモリコントローラ。
【請求項4】
前記リクエストは、他のリクエストとの併合の可否を表わす第2の情報を含み、
前記併合部は、さらに、前記第2の情報を参照して、併合が可能なリクエストのみを併合する、請求項1〜3のいずれか1項に記載のメモリコントローラ。
【請求項5】
前記リクエストは、前記キューへの格納の可否を表わす第3の情報を含み、
前記メモリコントローラは、さらに、
受信したリクエストに含まれる前記第3の情報を参照して、前記キューへの格納が可能なものだけを前記キューに格納するキューイング判定部を備えた、請求項1〜4のいずれか1項に記載のメモリコントローラ。
【請求項6】
前記リクエストは、前記メモリへのアクセスの開始までの許容可能な待ち時間を表わす第4の情報を含み、
前記メモリコントローラは、さらに、
受信したリクエストの前記キューに格納されてからの待ち時間を計測する計測部と、
前記キューに格納された複数のリクエストについて、前記第4の情報で示される許容可能な待ち時間と前記計測部で計測される前記待ち時間との時間差を算出し、前記算出した時間差に基づいて、次に処理すべきリクエストを選択し前記インタフェース部に出力する選択部とを備え、
前記選択部は、前記選択したリクエストが他のリクエストと併合されている場合には、前記併合されている他のリクエストも選択して、前記インタフェース部に出力する、請求項5記載のメモリコントローラ。
【請求項7】
前記リクエストは、処理の優先度を表わす第5の情報を含み、
前記メモリコントーラは、さらに、
前記キューに格納された複数のリクエストについて、前記第5の情報で示される優先度に基づいて、次に処理すべきリクエストを選択し前記インタフェース部に出力する選択部を備え、
前記選択部は、前記選択したリクエストが他のリクエストと併合されている場合には、前記併合されている他のリクエストも選択して、前記インタフェース部に出力する、請求項5記載のメモリコントローラ。
【請求項8】
前記リクエストは、前記メモリへのアクセスが開始されるまで、または前記メモリへのアクセスが終了するまでの想定処理レートを表わす第6の情報を含み、
前記メモリコントローラは、さらに、
受信したリクエストの前記キューに格納されてからメモリへのアクセスが開始されるまでの処理時間、または前記メモリへのアクセスが終了するまでの処理時間を計測する第2の計測部と、
前記複数のメモリアクセスリクエスタから出力される複数のリクエストを分類したグループごとに、前記計測した処理時間に基づいて平均処理レートを算出する平均処理レート算出部と、
所定の時間ごとに、前記キューに格納された複数のリクエストについて、前記リクエストが属するグループの平均処理レートと、前記リクエストの前記第6の情報で示される想定処理レートとの時間差に基づいて、次に処理すべきリクエストを選択して、前記インタフェース部に出力する選択部とを備え、
前記選択部は、前記選択したリクエストが他のリクエストと併合されている場合には、前記併合されている他のリクエストも選択して、前記インタフェース部に出力する、請求項5記載のメモリコントローラ。
【請求項9】
前記メモリコントローラは、
前記受信したリクエストのステータスを管理するステータス管理部を備え、
前記ステータス管理部は、前記メモリへのアクセスが未実行のリクエストのステータスをアイドルに設定し、前記メモリへのアクセスが実行中のリクエストのステータスを実行中に設定し、前記メモリへのアクセスが終了したリクエストのステータスを終了状態に設定し、
前記ステータス管理部は、前記リクエストを出力したメモリアクセスリクエスタに対して、前記ステータスを通知する、請求項1〜8のいずれか1項に記載のメモリコントローラ。
【請求項10】
前記ステータス管理部は、前記メモリアクセスリクエスタからのリクエストの受信に応じて、受信したリクエストのステータスをアイドル状態に設定する、請求項9記載のメモリコントローラ。
【請求項11】
前記ステータス管理部は、前記インタフェース部が、リクエストに従って前記メモリへのアクセスを開始したことに応じて、前記リクエストのステータスを実行状態に設定する、請求項9記載のメモリコントローラ。
【請求項12】
前記ステータス管理部は、リクエストが読出し要求の場合には、前記リクエストに応答して前記メモリから読出されたデータの受信に応じて、前記リクエストのステータスを終了状態に設定する、請求項9記載のメモリコントローラ。
【請求項13】
前記ステータス管理部は、特定のリクエストのステータスが実行中になったことに応じて、所定のメモリアクセスリクエスタに割込みを通知する、請求項9記載のメモリコントローラ。
【請求項14】
前記ステータス管理部は、特定のリクエストのステータスが終了状態になったことに応じて、所定のメモリアクセスリクエスタに割込みを通知する、請求項9記載のメモリコントローラ。
【請求項15】
前記複数のメモリアクセスリクエスタと、
請求項9〜14のいずれか1項に記載のメモリコントローラと、
前記メモリとを備え、
各メモリアクセスリクエスタは、
出力したリクエストごとに、前記メモリ内のアクセス位置のアドレスを表わすポインタを管理するポインタ管理部を備え、
前記ポインタ管理部は、さらに、前記ポインタについて、アクセス状態を表わすポインタフラグを管理し、
前記ポインタ管理部は、読出しのリクエストを出力後、前記ステータス管理部から実行中のステータスの通知を受けたときには、前記ポインタフラグを前記メモリのデータの参照中を表わすように設定し、
書込みのリクエストを出力後、前記ステータス管理部から実行中のステータスの通知を受けたときには、前記ポインタフラグを前記メモリのデータの更新中を表わすように設定し、
リクエストの出力後、前記ステータス管理部から終了状態のステータスの通知を受けたときには、前記ポインタフラグを前記メモリへのアクセスが行なわれていないことを表わすように設定する、データ処理装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2010−134628(P2010−134628A)
【公開日】平成22年6月17日(2010.6.17)
【国際特許分類】
【出願番号】特願2008−308795(P2008−308795)
【出願日】平成20年12月3日(2008.12.3)
【出願人】(503121103)株式会社ルネサステクノロジ (4,790)
【Fターム(参考)】
【公開日】平成22年6月17日(2010.6.17)
【国際特許分類】
【出願日】平成20年12月3日(2008.12.3)
【出願人】(503121103)株式会社ルネサステクノロジ (4,790)
【Fターム(参考)】
[ Back to top ]