(57)【要約】【課題】複数のメモリチャンネルに格納されている２次元配置のデータに水平アクセス、垂直アクセスした場合であっても、メモリに効率よくアクセスすることができるメモリアクセスシステムを提供することである。【解決手段】本発明にかかるメモリアクセスシステムは、２次元に配置されたデータを、Ｘ方向にＸａ個のブロックをＹ方向にＹａ個のブロックを備える第１の格納単位で区切り、第１の格納単位のデータを、更に、Ｘ方向にＸａ個のブロックをＹ方向にＹｂ個のブロックを備える第２の格納単位で区切り、第１の格納単位の第１のブロック群のデータを、２個のメモリチャンネルのそれぞれの第１のバンクに、第２の格納単位毎にそれぞれ格納し、第１の格納単位の第２のブロック群のデータを、２個のメモリチャンネルのそれぞれの第２のバンクに、第２の格納単位毎にそれぞれ格納する。【選択図】図４
2011170594.tif 000002
【特許請求の範囲】
【請求項１】
２次元に配置されたデータを複数のメモリチャンネルに最小アクセス単位であるブロック単位で格納するメモリアクセスシステムであって、
前記２次元に配置されたデータを、Ｘ方向にＸａ個のブロックをＹ方向にＹａ個のブロックを備える第１の格納単位で区切り、
前記第１の格納単位のデータを、更に、Ｘ方向にＸａ個のブロックをＹ方向にＹｂ個のブロックを備える第２の格納単位で区切り、
前記第１の格納単位の第ｍ（ｍは正の整数）のブロック群のデータを、ｋ（ｋは２以上の整数）個のメモリチャンネルのそれぞれの第ｐ（ｐは正の整数）のバンクに、前記第２の格納単位毎にそれぞれ格納し、
前記第１の格納単位の第（ｍ＋１）のブロック群のデータを、前記ｋ個のメモリチャンネルのそれぞれの第（ｐ＋１）のバンクに、前記第２の格納単位毎にそれぞれ格納する、
メモリアクセスシステム。
【請求項２】
前記第１の格納単位の第１のブロック群のデータを、第１のメモリチャンネルの第１のバンクと第２のメモリチャンネルの第１のバンクとに、前記第２の格納単位毎に交互に格納し、
前記第１の格納単位の第２のブロック群のデータを、前記第１のメモリチャンネルの第２のバンクと前記第２のメモリチャンネルの第２のバンクとに、前記第２の格納単位毎に交互に格納する、
請求項１に記載のメモリアクセスシステム。
【請求項３】
前記各々のメモリチャンネルのバンクの数は２ｎ個である、請求項１または２に記載のメモリアクセスシステム。
【請求項４】
前記第ｐのバンクが２ｎ個目のバンクである場合、前記第（ｐ＋１）のバンクは１つ目のバンクである、請求項３に記載のメモリアクセスシステム。
【請求項５】
前記第１の格納単位のデータサイズを前記メモリチャンネルの数で除算したデータサイズは、前記バンクの１つのローアドレスに対応した記憶領域に格納可能なデータサイズと同一である、請求項１乃至４のいずれか一項に記載のメモリアクセスシステム。
【請求項６】
前記２次元に配置されたデータのＸ方向のデータのサイズが、前記Ｘａ個のブロックのデータサイズで割り切れない場合は、前記ブロックの数がＸａ個に満たないブロック群のデータが格納されるローアドレスに対応した記憶領域を余らせる、請求項１乃至５のいずれか一項に記載のメモリアクセスシステム。
【請求項７】
前記２次元に配置されたデータのＹ方向のデータのサイズが、前記Ｙａ個のブロックのデータサイズで割り切れない場合は、前記ブロックの数がＹａ個に満たないブロック群のデータが格納されるローアドレスに対応した記憶領域を余らせる、請求項１乃至６のいずれか一項に記載のメモリアクセスシステム。
【請求項８】
前記第１の格納単位の第２のブロック群のデータは、前記第１のブロック群のＸ座標方向において隣に位置する、請求項１乃至７のいずれか一項に記載のメモリアクセスシステム。
【請求項９】
前記第１の格納単位の第２のブロック群のデータは、前記第１のブロック群のＹ座標方向において隣に位置する、請求項１乃至７のいずれか一項に記載のメモリアクセスシステム。
【請求項１０】
前記各々のバンクのローアドレスおよびカラムアドレスがそれぞれ昇順となるように、前記２次元に配置されたデータが格納される、請求項１乃至９のいずれか一項に記載のメモリアクセスシステム。
【請求項１１】
前記Ｘａの値および前記Ｙａの値は前記バンクの１つのローアドレスに対応した記憶領域に格納可能なデータサイズに基づき決定される、請求項１乃至１０のいずれか一項に記載のメモリアクセスシステム。
【請求項１２】
２次元に配置されたデータを複数のメモリチャンネルに最小アクセス単位であるブロック単位で格納するメモリアクセス制御方法であって、
前記２次元に配置されたデータを、Ｘ方向にＸａ個のブロックをＹ方向にＹａ個のブロックを備える第１の格納単位で区切り、
前記第１の格納単位のデータを、更に、Ｘ方向にＸａ個のブロックをＹ方向にＹｂ個のブロックを備える第２の格納単位で区切り、
前記第１の格納単位の第ｍ（ｍは正の整数）のブロック群のデータを、ｋ（ｋは２以上の整数）個のメモリチャンネルのそれぞれの第ｐ（ｐは正の整数）のバンクに、前記第２の格納単位毎にそれぞれ格納し、
前記第１の格納単位の第（ｍ＋１）のブロック群のデータを、前記ｋ個のメモリチャンネルのそれぞれの第（ｐ＋１）のバンクに、前記第２の格納単位毎にそれぞれ格納する、
メモリアクセス制御方法。
【請求項１３】
前記第１の格納単位の第１のブロック群のデータを、第１のメモリチャンネルの第１のバンクと第２のメモリチャンネルの第１のバンクとに、前記第２の格納単位毎に交互に格納し、
前記第１の格納単位の第２のブロック群のデータを、前記第１のメモリチャンネルの第２のバンクと前記第２のメモリチャンネルの第２のバンクとに、前記第２の格納単位毎に交互に格納する、
請求項１２に記載のメモリアクセス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はメモリアクセスシステムおよびメモリアクセス制御方法に関し、特に２次元に配置されたデータを複数のメモリチャンネルに格納するメモリアクセスシステムおよびメモリアクセス制御方法に関する。
【背景技術】
【０００２】
画像データなどの２次元配置のデータを複数のメモリチャンネルに格納する技術がある。図５は背景技術にかかるメモリアクセスシステムを説明するためのブロック図である。図５に示すメモリアクセスシステムは、プロセッサ１（１１１）、プロセッサ２（１１２）、プロセッサ３（１１３）、バス１２１、１２２、メモリコントローラＡ（１３１）、メモリコントローラＢ（１３２）を有する。
【０００３】
各プロセッサ１〜３（１１１〜１１３）は、バス１２１、１２２を介してメモリコントローラＡ（１３１）、メモリコントローラＢ（１３２）と接続されている。メモリコントローラＡ（１３１）はメモリＡ（１４１）に接続され、メモリコントローラＢ（１３２）はメモリＢ（１４２）に接続されている。
【０００４】
図６はメモリＡ（１４１）の構成を説明するためのブロック図である。メモリＡ（１４１）は４つのバンク０〜３（１５１〜１５４）に分割されている。各バンク（１５１〜１５４）にはメモリコントローラＡ（１３１）からコントロールアドレス１５６、クロック信号１５７が供給される。各バンク（１５１〜１５４）からはコントロールアドレス１５６に応じたデータがクロック信号１５７に基づくタイミングでデータ線１５８に出力される。なお、メモリＢ（１４２）も同様の構成である。
【０００５】
プロセッサ１（１１１）がメモリＡ（１４１）に記憶されているデータを読み出そうとする命令コードを実行する場合、またはメモリＡ（１４１）にデータを書き込もうとする命令コードを実行する場合には、プロセッサ１（１１１）は読み出しまたは書き込みを行おうとするデータの２次元配置の座標（Ｘ、Ｙ）を、バス１２１を経由してメモリコントローラＡ（１３１）に出力する。
【０００６】
メモリコントローラＡ（１３１）は、プロセッサ１（１１１）から２次元配置の座標（Ｘ、Ｙ）を受け取ると、これに従いメモリＡ（１４１）のバンク、ローアドレス、およびカラムアドレスを算出する。メモリコントローラＡ（１３１）は、算出したバンク、ローアドレス、およびカラムアドレスに従ってメモリＡ（１４１）にアクセスする。すなわち、プロセッサ１（１１１）が実行する命令コードがデータの読み出しの場合には、メモリＡ（１４１）の当該バンク、ローアドレス、およびカラムアドレスに記憶されているデータを読み出す。一方、プロセッサ１（１１１）が実行する命令コードがデータの書き込みの場合には、メモリＡ（１４１）の当該バンク、ローアドレス、およびカラムアドレスにデータを書き込む。なお、上記で説明した動作は、各プロセッサ（１１１〜１１３）がメモリコントローラＢ（１３２）を用いてメモリＢ（１４２）にアクセスする場合も同様である。
【０００７】
次に、図５に示すメモリアクセスシステムを用いて２次元配置のデータを格納する場合について具体的に説明する。図７は、メモリＡ（１４１）、メモリＢ（１４２）の各バンクのローアドレスとカラムアドレスを具体的に示した一例である。図７に示した各メモリの各バンクのローアドレスは"０〜８１９１"、カラムアドレスは"０〜２０４７"としている。この例では、最小アクセス単位が１６バイト、１ページ（１ローアドレス当たり）が２０４８バイト、４バンクからなるメモリを２チャンネルで構成している。
【０００８】
図８は、このような構成のメモリに格納された２次元配置のデータのマッピングの一例を示す図である。図８に示す２次元配置のデータの１つのブロックは最小アクセス単位（１６バイト）で、１つのブロックに横方向（Ｘ方向）に連続した１６画素の画像データが割り当てられている。全体としては、横方向に１９２０画素（１２０ブロック）、縦方向（Ｙ方向）に１０８０行の２次元画像データがマッピングされている。また、各ブロックには（メモリチャンネル、バンク、ローアドレス、カラムアドレス）を示している。例えば、（Ａ、０、０、１６）と示されているブロックは、メモリチャンネルが"Ａ"、バンクが"０"、ローアドレスが"０"、カラムアドレスが"１６"であることを示している。ここで、１つのブロックには１６バイトのデータを格納することができるので、カラムアドレスが"１６"の場合はカラムアドレス"１６〜３１"にデータが格納されている。図８では便宜上、カラムアドレスは先頭のアドレスのみを表示している。
【０００９】
図８に示す２次元配置データの左上（座標（０、０））のブロック１７１は（Ａ、０、０、０）であるので、このブロックのデータは図７に示すメモリチャンネル"Ａ"のバンク"０"のローアドレス"０"のカラムアドレス"０〜１５"に格納されている。以降、Ｘ方向のブロックのデータは、メモリチャンネル"Ａ"のバンク"０"のローアドレス"０"のカラムアドレス"１６"以降に順次格納されている。そして、Ｘ方向の画素サイズを超えると、つまりブロック１７２のデータが格納された後は、次の行の左端（座標（０、１））のブロック１７３のデータが格納される。このとき、ブロック１７３（Ａ、０、０、１９２０）以降のデータは、ブロック１７２の次のカラムアドレス"１９２０"以降に格納されている。
【００１０】
図８に示した太線で囲んだ領域１７４には１２８ブロック（１ページ）存在し、これらがメモリチャンネル"Ａ"のバンク"０"のローアドレス"０"に対応した記憶領域１６０（図７参照）に格納されている。そして、メモリチャンネル"Ａ"のバンク"０"のローアドレス"０"のカラムアドレスが"２０４７"に達すると、次にメモリチャンネル"Ｂ"のバンク"０"のローアドレス"０"に対応した記憶領域１６１にブロックのデータが格納される。すなわち、図８に示すように、ブロック（Ａ、０、０、２０３２）の次のブロックはブロック（Ｂ、０、０、０）であり、ブロック（Ｂ、０、０、０）のデータはメモリチャンネル"Ｂ"のバンク"０"のローアドレス"０"のカラムアドレス"０〜１５"に格納されている。そして、以降のブロックのデータは、ブロック（Ｂ、０、０、０）の次のカラムアドレス"１６"以降に順次格納されている。
【００１１】
このような規則に従い各ブロックのデータがメモリに格納されている。つまり、まずはメモリチャンネル"Ａ"のバンク"０"のローアドレス"０"の記憶領域１６０（図７参照）にデータが格納され、このローアドレスの格納領域が満たされると、次にメモリチャンネル"Ｂ"のバンク"０"のローアドレス"０"の記憶領域１６１にデータが格納される。次に、"Ａ"のバンク"１"のローアドレス"０"の記憶領域１６２にデータが格納され、次に、"Ｂ"のバンク"１"のローアドレス"０"の記憶領域１６３にデータが格納される。次に、"Ａ"のバンク"２"のローアドレス"０"の記憶領域１６４にデータが格納され、次に、"Ｂ"のバンク"２"のローアドレス"０"の記憶領域１６５にデータが格納される。次に、"Ａ"のバンク"３"のローアドレス"０"の記憶領域１６６にデータが格納され、次に、"Ｂ"のバンク"３"のローアドレス"０"の記憶領域１６７にデータが格納される。
【００１２】
次に、"Ａ"のバンク"０"のローアドレス"１"の記憶領域１６８にデータが格納され、次に、"Ｂ"のバンク"０"のローアドレス"１"の記憶領域１６９にデータが格納される。つまり、各メモリチャンネルのバンクが"３"まで達すると、バンク番号が"０"となる。また、このときローアドレスはインクリメントして"１"となる。以降、同様な規則に従い各ブロックが順次格納されている。
【００１３】
図８に示すマッピング例では２次元配置データの左上（座標（０、０））のブロック１７１からＸ座標方向に順次格納し、右端に達したら次の行の左端からＸ方向に順次格納するという規則に従い、右下（座標１２０、１０８０）までのデータを上記の順番に従い格納している。
【００１４】
また、特許文献１には同一バンクの異なるローアドレスへの連続アクセスが禁止された２ｎ（ｎは２以上の整数）個のバンクからなるメモリに効率的にアクセスする技術が開示されている。特許文献１において、メモリは２次元配置のデータを記憶するのに使用される。ＣＰＵからメモリにアクセスする際にアドレス変換装置によりアドレス変換が行われる。アドレス変換装置は２次元配置のデータの座標を（Ｘ、Ｙ）とした場合に、Ｂ＝｛Ｙ×（２ｎ×ｍ＋ｋ）＋Ｘ｝ｍｏｄ２ｎ及びＡ＝ＩＮＴ［｛Ｙ×（２ｎ×ｍ＋ｋ）＋Ｘ｝／２ｎ］によりバンク番号Ｂ及びローアドレス番号Ａを算出する。但し、ｍは正の整数であり、ｋは１以外で、２ｎよりも小さい正の整数であり、ｍｏｄは剰余を求める演算子であり、ＩＮＴは商の整数部を求める演算子である。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特許第３４１７４７３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１６】
図８に示すようにマッピングされた２次元配置データにリニアアクセスする際は、上記の規則に従いアクセスする。つまり、メモリチャンネル"Ａ"のバンク"０"、"Ｂ"のバンク"０"、"Ａ"のバンク"１"、"Ｂ"のバンク"１"、"Ａ"のバンク"２"、"Ｂ"のバンク"２"、"Ａ"のバンク"３"、"Ｂ"のバンク"３"、"Ａ"のバンク"０"（ローアドレスをインクリメントする）の順にアクセスする。このとき、ローアドレス、カラムアドレスがそれぞれ昇順となるようにアクセスする。よって、２０４８バイト毎にメモリチャンネルが入れ替わる。
【００１７】
また、水平アクセスする際は、ページサイズ（１ローアドレスのサイズ）が画像のＸ方向のサイズよりも大きい場合は両方のメモリチャンネルに跨る可能性がある。つまり、図８に示す例では、２行目においてブロック（Ａ、０、０、２０３２）からブロック（Ｂ、０、０、０）に移動しているため、両方のメモリチャンネルに跨っている。また、ページサイズが画像のＸ方向のサイズよりも小さい場合は、１行目においても両方のメモリチャンネルに跨る。ページサイズが画像のＸ方向のサイズと同一の場合にのみ、どの行でも片方のメモリチャンネルのみのアクセスとなる。
【００１８】
また、垂直アクセスする際は、連続して垂直アクセスする場合はほぼ両方のメモリチャンネルに跨る。また、１行おきに垂直アクセスする場合は、ページサイズと画像のＸ方向のサイズが同一である場合にのみ片方のメモリチャンネルのみのアクセスとなるが、これ以外の場合は両方のメモリチャンネルに跨る可能性がある。
【００１９】
よって、図８に示したようなある一定の容量毎にメモリチャンネルを切り替えるマッピング方法では、水平アクセス、垂直アクセスにおいて、１回のメモリアクセスが複数のメモリチャンネルに跨る確率が高くなり、メモリに効率的にアクセスできないという問題がある。
【００２０】
このとき、メモリアクセスの順序を保つために、一方のメモリチャンネルのメモリアクセスが完了した後に、他方のメモリチャンネルのメモリアクセスを開始することもできるが、この方法ではメモリアクセスの性能が低下する。例えば、あるメモリマスタから８バーストのメモリリードアクセスを行なう場合に、前半の４バーストがメモリチャンネル"Ａ"に、後半の４バーストがメモリチャンネル"Ｂ"に割り当てられていたとする。メモリマスタへのリードデータの転送は昇順に行なう必要があるため、まずメモリチャンネル"Ａ"に４バーストのメモリアクセス要求を出し、これが完了したらメモリチャンネル"Ｂ"に４バーストのメモリアクセス要求を出す必要がある。メモリアクセスは要求を出してから実際にアクセスが実行されるまでにレイテンシがあるため、メモリチャンネル"Ａ"とメモリチャンネル"Ｂ"のメモリアクセスの間に無駄な時間が発生し、メモリアクセス性能が低下する。このように、１回のメモリアクセスが複数のメモリチャンネルに跨るとメモリに効率的にアクセスできない。
【００２１】
一方、メモリアクセスの順序を保つために、全てのメモリマスタにデータの並び替えを行なうために必要なバッファメモリを設けることもできるが、この方法ではハードウェアが増加するという問題がある。つまり、あるメモリマスタから８バーストのメモリリードアクセスを行なう場合に、前半の４バーストがメモリチャンネル"Ａ"に、後半の４バーストがメモリチャンネル"Ｂ"に割り当てられていたとする。上記問題を解決するためにはメモリチャンネル"Ａ"、"Ｂ"に同時にメモリアクセス要求を出す必要があるが、メモリチャンネル"Ａ"がビジーで長く待たされ、メモリチャンネル"Ｂ"が空いていた場合には、メモリチャンネル"Ｂ"からのリードデータの方が先に返ってくる。メモリマスタへのリードデータの転送は昇順に行なう必要があるため、メモリチャンネル"Ａ"からリードデータが返ってくるまでは、メモリチャンネル"Ｂ"からのリードデータを保持しておくためのバッファメモリが必要となり、ハードウェアが増加する。
【００２２】
また、例えば各メモリチャンネルの全メモリ容量毎にメモリチャンネルを切り替えるマッピング方法では、メモリアクセス性能の低下もなくバッファメモリも必要としない。しかし、このマッピング方法では各メモリチャンネルにメモリアクセスを均等に割り当てることができない。つまり、全メモリ容量の前半分をメモリチャンネル"Ａ"に、後半分をメモリチャンネル"Ｂ"に割り当てたとすると、１回のメモリアクセスがメモリチャンネル"Ａ"と"Ｂ"に跨る確率は限りなく０に近いため、両者に跨るアクセスの時はメモリチャンネル"Ａ"へのアクセスが完了してからメモリチャンネル"Ｂ"へのアクセスを開始することができる。
【００２３】
しかし、このマッピング方法ではメモリマスタからのアクセスが各メモリチャンネルに固定的に割り当てられることになるため、予めメモリマスタ毎にどちらのチャンネルを使用するかを決めておく必要がある。このとき、考慮すべきパラメータとして、各メモリマスタが使用するメモリ帯域とメモリ容量の２つの変数があり、その両方を満たす方程式を解かなければならない。これは難易度が高く、結果として帯域か容量のいずれかを犠牲にする（片方のチャンネルの帯域か容量のいずれかが無駄になる）結果を招きやすい。また、メモリチャンネル数が増加すればその傾向はより顕著になる。
【課題を解決するための手段】
【００２４】
本発明にかかるメモリアクセスシステムは、２次元に配置されたデータを複数のメモリチャンネルに最小アクセス単位であるブロック単位で格納するメモリアクセスシステムであって、前記２次元に配置されたデータを、Ｘ方向にＸａ個のブロックをＹ方向にＹａ個のブロックを備える第１の格納単位で区切り、前記第１の格納単位のデータを、更に、Ｘ方向にＸａ個のブロックをＹ方向にＹｂ個のブロックを備える第２の格納単位で区切り、前記第１の格納単位の第ｍ（ｍは正の整数）のブロック群のデータを、ｋ（ｋは２以上の整数）個のメモリチャンネルのそれぞれの第ｐ（ｐは正の整数）のバンクに、前記第２の格納単位毎にそれぞれ格納し、前記第１の格納単位の第（ｍ＋１）のブロック群のデータを、前記ｋ個のメモリチャンネルのそれぞれの第（ｐ＋１）のバンクに、前記第２の格納単位毎にそれぞれ格納する。
【００２５】
本発明にかかるメモリアクセスシステムでは、水平アクセス、垂直アクセスした場合であっても複数のメモリチャンネルに跨る確率が低くなるように、２次元配置のデータを複数のメモリチャンネルに格納することができる。よって、メモリに効率的にアクセスすることができるメモリアクセスシステムを提供することができる。
【００２６】
本発明にかかるメモリアクセス制御方法は、２次元に配置されたデータを複数のメモリチャンネルに最小アクセス単位であるブロック単位で格納するメモリアクセス制御方法であって、前記２次元に配置されたデータを、Ｘ方向にＸａ個のブロックをＹ方向にＹａ個のブロックを備える第１の格納単位で区切り、前記第１の格納単位のデータを、更に、Ｘ方向にＸａ個のブロックをＹ方向にＹｂ個のブロックを備える第２の格納単位で区切り、前記第１の格納単位の第ｍ（ｍは正の整数）のブロック群のデータを、ｋ（ｋは２以上の整数）個のメモリチャンネルのそれぞれの第ｐ（ｐは正の整数）のバンクに、前記第２の格納単位毎にそれぞれ格納し、前記第１の格納単位の第（ｍ＋１）のブロック群のデータを、前記ｋ個のメモリチャンネルのそれぞれの第（ｐ＋１）のバンクに、前記第２の格納単位毎にそれぞれ格納する。
【００２７】
本発明にかかるメモリアクセス制御方法により、水平アクセス、垂直アクセスした場合であっても複数のメモリチャンネルに跨る確率が低くなるように、２次元配置のデータを複数のメモリチャンネルに格納することができる。よって、メモリに効率的にアクセスすることができるメモリアクセス制御方法を提供することができる。
【発明の効果】
【００２８】
本発明により複数のメモリチャンネルに格納されている２次元配置のデータに水平アクセス、垂直アクセスした場合であっても、メモリに効率よくアクセスすることができるメモリアクセスシステムおよびメモリアクセス制御方法を提供することができる。
【図面の簡単な説明】
【００２９】
【図１】実施の形態にかかるメモリアクセスシステムを説明するためのブロック図である。
【図２】実施の形態にかかるメモリアクセスシステムのメモリの構成例を説明するためのブロック図である。
【図３】実施の形態にかかるメモリアクセスシステムのメモリＡ、メモリＢの詳細な構成を説明するための図である。
【図４】実施の形態にかかるメモリアクセスシステムを用いてマッピングされた２次元配置のデータの一例を示す図である。
【図５】背景技術にかかるメモリアクセスシステムを説明するためのブロック図である。
【図６】背景技術にかかるメモリアクセスシステムのメモリの構成例を説明するためのブロック図である。
【図７】背景技術にかかるメモリアクセスシステムのメモリＡ、メモリＢの詳細な構成を説明するための図である。
【図８】背景技術にかかるメモリアクセスシステムを用いてマッピングされた２次元配置のデータを示す図である。
【発明を実施するための形態】
【００３０】
以下、図面を参照して本発明の実施の形態について説明する。図１は本実施の形態にかかるメモリアクセスシステムを説明するためのブロック図である。図１に示すメモリアクセスシステムは、プロセッサ１（１１）、プロセッサ２（１２）、プロセッサ３（１３）、バス２１、２２、メモリコントローラＡ（３１）、メモリコントローラＢ（３２）を有する。
【００３１】
各プロセッサ１〜３（１１〜１３）は、バス２１、２２を介してメモリコントローラＡ（３１）、メモリコントローラＢ（３２）と接続されている。メモリコントローラＡ（３１）はメモリＡ（４１）と接続され、メモリコントローラＢ（３２）はメモリＢ（４２）と接続されている。ここで、プロセッサの数は任意に決定することができる。また、メモリおよび当該メモリに対応して設けられるメモリコントローラの数も任意に決定することができる。
【００３２】
図２はメモリＡ（４１）の構成を説明するためのブロック図である。メモリＡ（４１）は複数のバンク０〜２ｎ−１（ｎは正の整数）（５１〜５５）に分割されている。つまり、メモリＡ（４１）のバンクの数は２ｎ（ｎは正の整数）個とすることができる。各バンク（５１〜５５）にはメモリコントローラＡ（３１）からコントロールアドレス５６、クロック信号５７が供給される。各バンク（５１〜５５）からはコントロールアドレス５６に応じたデータがクロック信号５７に基づくタイミングでデータ線５８に出力される。なお、メモリＢ（４２）も同様の構成である。
【００３３】
例えば、プロセッサ１（１１）がメモリＡ（４１）に記憶されているデータを読み出そうとする命令コードを実行する場合、またはメモリＡ（４１）にデータを書き込もうとする命令コードを実行する場合には、プロセッサ１（１１）は読み出しまたは書き込みを行おうとするデータの２次元配置の座標（Ｘ、Ｙ）を、バス２１を経由してメモリコントローラＡ（３１）に出力する。
【００３４】
メモリコントローラＡ（３１）は、プロセッサ１（１１）から２次元配置の座標（Ｘ、Ｙ）を受け取ると、これに従いメモリＡ（４１）のバンク、ローアドレス、およびカラムアドレスを算出する。メモリコントローラＡ（３１）は、算出したバンク、ローアドレス、およびカラムアドレスに従ってメモリＡ（４１）にアクセスする。すなわち、プロセッサ１（１１）が実行する命令コードがデータの読み出しの場合には、メモリＡ（４１）の当該バンク、ローアドレス、およびカラムアドレスに記憶されているデータを読み出す。一方、プロセッサ１（１１）が実行する命令コードがデータの書き込みの場合には、メモリＡ（４１）の当該バンク、ローアドレス、およびカラムアドレスにデータを書き込む。なお、上記で説明した動作は、各プロセッサ（１１〜１３）がメモリコントローラＢ（３２）を用いてメモリＢ（４２）にアクセスする場合も同様である。
【００３５】
次に、図１に示すメモリアクセスシステムを用いて２次元配置のデータを格納する場合について具体的に説明する。なお、以下に示す例ではメモリおよびメモリコントローラの数をそれぞれ２個とし、各メモリのバンクの数を４個としている。図３は、メモリＡ（４１）、メモリＢ（４２）の各バンクのローアドレスとカラムアドレスを具体的に示した一例である。図３に示した各メモリの各バンクのローアドレスは"０〜８１９１"、カラムアドレスは"０〜２０４７"としている。この例では、１ページ（１ローアドレス当たり）が２０４８バイト、４バンクからなるメモリを２チャンネルで構成している。
【００３６】
図４は、本実施の形態にかかるメモリアクセスシステムを用いて各メモリチャンネルに格納された２次元配置のデータのマッピングの一例を示す図である。ここで、２次元配置のデータは例えば画像データである。図４に示す２次元配置のデータの１つのブロックは最小アクセス単位（１６バイト）で、１つのブロックに横方向（Ｘ方向）に連続した１６画素の画像データが割り当てられている。全体としては、Ｘ方向に１９２０画素（１２０ブロック）、Ｙ方向に１０８０行の２次元画像データがマッピングされている。また、各ブロックには（メモリチャンネル、バンク、ローアドレス、カラムアドレス）を示している。例えば、（Ａ、０、０、１６）と示されているブロックは、メモリチャンネルが"Ａ"、バンクが"０"、ローアドレスが"０"、カラムアドレスが"１６"であることを示している。ここで、１つのブロックには１６バイトのデータを格納することができるので、カラムアドレスが"１６"の場合はカラムアドレスが"１６〜３１"のデータが格納されている。図４では便宜上、カラムアドレスは先頭のアドレスのみを表示している。
【００３７】
本実施の形態にかかるメモリアクセスシステムは、まず２次元配置のデータを、Ｘ方向にＸａ個のブロックをＹ方向にＹａ個のブロックを備える第１の格納単位で区切る。図４に示す２次元配置のデータでは、Ｘａ＝４ブロック、Ｙａ＝６４行としている。第１の格納単位は画像データを格納する最小単位である。なお、第１の格納単位のサイズ、すなわちＸａの値、Ｙａの値はバンクの１つのローアドレスに対応した記憶領域に格納可能なデータサイズ（図３の場合は２０４８バイト）に応じて変更することができる。
【００３８】
つまり、第１の格納単位のデータサイズをメモリチャンネルの数で除算したデータサイズは、バンクの１つのローアドレスに対応した記憶領域に格納可能なデータサイズと同一とすることとができる。図３、図４に示す例では、第１の格納単位のデータサイズ（４０９６バイト）をメモリチャンネルの数（２つ）で除算したデータサイズは２０４８であり、これはバンクの１つのローアドレスに対応した記憶領域に格納可能なデータサイズ（２０４８バイト）と一致している。
【００３９】
本実施の形態にかかるメモリアクセスシステムは、この第１の格納単位を２次元配置のデータのサイズに応じてＸ方向、Ｙ方向に複数個並べて、全データを格納する。
【００４０】
次に、第１の格納単位のデータを、更に、Ｘ方向にＸａ個のブロックをＹ方向にＹｂ個のブロックを備える第２の格納単位で区切る。図４に示す例では、Ｙｂ＝４行としている。ここで、Ｙｂの値は任意に決定することができる。しかし、Ｙｂの値が大き過ぎると、メモリチャンネルＡ、Ｂそれぞれにアクセスする際のアクセスバランスが崩れる確率が高くなる。一方、Ｙｂの値が小さすぎると、垂直アクセス（Ｙ方向アクセス）する際にメモリチャンネルＡ、Ｂの両方に跨る確率が高くなる。よって、Ｙｂの値の値はこれらのバランスを考慮して決定する。
【００４１】
次に、第１の格納単位のブロック群（第１のブロック群。太線で示す。）７１のデータを、メモリチャンネル"Ａ"のバンク"０"とメモリチャンネル"Ｂ"のバンク"０"のそれぞれに、第２の格納単位毎に交互に格納する。つまり、ブロック群７１のデータのうち、第２の格納単位のデータ８１（破線で表示）を、メモリチャンネル"Ａ"のバンク"０"のローアドレス"０"のカラムアドレス"０〜２５５"に格納する。また、ブロック群７１のデータのうち、第２の格納単位のデータ８２（破線で表示）を、メモリチャンネル"Ｂ"のバンク"０"のローアドレス"０"のカラムアドレス"０〜２５５"に格納する。以降、同様に第２の格納単位で区切られたブロック群７１のデータを、メモリチャンネル"Ａ"のバンク"０"のローアドレス"０"の記憶領域６０（図３参照）と、メモリチャンネル"Ｂ"のバンク"０"のローアドレス"０"の記憶領域６１に、それぞれ格納する。
【００４２】
このとき、メモリチャンネル"Ａ"のバンク"０"のローアドレス"０"の記憶領域６０、およびメモリチャンネル"Ｂ"のバンク"０"のローアドレス"０"の記憶領域６１には、それぞれブロック群７１のデータサイズ（４０９６バイト）の半分のデータ（２０４８バイト）が格納される。このように、第１の格納単位のデータサイズを記憶領域６０と記憶領域６１の合計の記憶容量と一致させることで、メモリ領域を有効に利用することができる。
【００４３】
次に、上記と同様に第１の格納単位のブロック群（第２のブロック群）７２のデータを、メモリチャンネル"Ａ"のバンク"１"とメモリチャンネル"Ｂ"のバンク"１"のそれぞれに、第２の格納単位毎に交互に格納する。このとき、第２の格納単位のそれぞれのデータは、図３のメモリチャンネル"Ａ"のバンク"１"のローアドレス"０"の記憶領域６２とメモリチャンネル"Ｂ"のバンク"１"のローアドレス"０"の記憶領域６３にそれぞれ格納される。
【００４４】
以降、同様に第１の格納単位のブロック群７３のデータは、メモリチャンネル"Ａ"のバンク"２"のローアドレス"０"の記憶領域６４とメモリチャンネル"Ｂ"のバンク"２"のローアドレス"０"の記憶領域６５にそれぞれ格納される。第１の格納単位のブロック群７４のデータは、メモリチャンネル"Ａ"のバンク"３"のローアドレス"０"の記憶領域６６とメモリチャンネル"Ｂ"のバンク"３"のローアドレス"０"の記憶領域６７にそれぞれ格納される。
【００４５】
図４に示す例では、各メモリチャンネルのバンクの数を４つとしている。よって、第１の格納単位のブロック群７５のデータは、再びメモリチャンネル"Ａ"のバンク"０"とメモリチャンネル"Ｂ"のバンク"０"のそれぞれに、第２の格納単位毎に格納される。このとき、各メモリチャンネルのバンク"０"のローアドレスがインクリメントする。よって、ブロック群７５のデータは、メモリチャンネル"Ａ"のバンク"０"のローアドレス"１"の記憶領域６８とメモリチャンネル"Ｂ"のバンク"０"のローアドレス"１"の記憶領域６９にそれぞれ格納される。
【００４６】
以降、同様に、Ｘ方向に第１の格納単位のブロック群のデータが格納される。そして、ブロック群７６のデータが格納された後、ブロック群７７のデータが格納され、再びＸ方向にブロック群のデータが格納される。そして、最後のブロック群７９のデータが、メモリチャンネル"Ａ"のバンク"１"のローアドレス"１２７"の記憶領域とメモリチャンネル"Ｂ"のバンク"１"のローアドレス"１２７"の記憶領域にそれぞれ格納されると、メモリアクセスシステムはデータの格納を終了する。
【００４７】
なお、２次元に配置されたデータのＸ方向のデータのサイズが、Ｘａ個のブロックのデータサイズで割り切れない場合はメモリ領域を余らせることができる。この場合は第１の格納単位のデータサイズ（４０９６バイト）に満たないブロック群が存在するため、このブロック群のデータを格納するローアドレスに対応する記憶領域が余ることになる。なお、図４に示す例では、Ｘ方向に１２０ブロック（４ブロックで割り切れる）配置されているのでメモリ領域は余らない。
【００４８】
また、２次元に配置されたデータのＹ方向のデータのサイズが、Ｙａ個のブロックのデータサイズで割り切れない場合は、Ｙ方向のメモリ領域を余らせることができる。この場合も第１の格納単位のデータサイズ（４０９６バイト）に満たないブロック群（ブロック群７８〜ブロック群７９）が存在するため、このブロック群のデータを格納するローアドレスに対応する記憶領域が余ることになる。なお、図４に示す例では、Ｙ方向に１０８０行配置されているので、８行分のメモリ領域を余らせている。
【００４９】
なお、以上で説明した本実施の形態にかかるメモリアクセスシステムは、メモリチャンネルを２つ備えていたが、メモリチャンネルの数は２つ以上であれば任意に決定することができる。本実施の形態にかかるメモリアクセスシステムでは、特にメモリチャンネルの数を２のべき乗（２ｎ）個とすると、メモリチャンネルの数が２ｎ個でない場合と比べて演算処理を簡素化することができる。また、上記例では各メモリチャンネルのバンクの数を４つとしたが、バンクの数は２ｎ個であれば任意に決定することができる。また、バンクのローアドレス、カラムアドレスも上記の例に限定されることはなく、任意に決定することができる。また、以上で説明したメモリシステムは、ブロック群７１の次にブロック群７２を格納、すなわちＸ方向に隣接するブロック群を格納していた。しかし、ブロック群７１を格納した後にＹ方向に隣接するブロック群７７を格納してもよい。この場合は、ブロック群７８に達したら、次にブロック群７２を格納する構成とすることができる。
【００５０】
以上で説明した本実施の形態にかかるメモリシステムは、下記の様に一般化して表現することができる。
すなわち、本実施の形態にかかるメモリアクセスシステムは、２次元に配置されたデータを複数のメモリチャンネルに最小アクセス単位であるブロック単位で格納する際に次のようにして格納する。まず、２次元に配置されたデータを、Ｘ方向にＸａ個のブロックをＹ方向にＹａ個のブロックを備える第１の格納単位で区切る。次に、第１の格納単位のデータを、更に、Ｘ方向にＸａ個のブロックをＹ方向にＹｂ個のブロックを備える第２の格納単位で区切る。
【００５１】
そして、第１の格納単位の第ｍ（ｍは正の整数）のブロック群のデータを、ｋ（ｋは２以上の整数）個のメモリチャンネルのそれぞれの第ｐ（ｐは正の整数）のバンクに、第２の格納単位毎にそれぞれ格納する。次に、第１の格納単位の第（ｍ＋１）のブロック群のデータを、ｋ個のメモリチャンネルのそれぞれの第（ｐ＋１）のバンクに、第２の格納単位毎にそれぞれ格納する。
【００５２】
以上で説明した本実施の形態にかかるメモリアクセスシステムにおいて、図４に示すようにマッピングされた２次元配置データに昇順にリニアアクセスする際は、メモリチャンネル"Ａ"のバンク"０"、"Ｂ"のバンク"０"、"Ａ"のバンク"１"、"Ｂ"のバンク"１"、"Ａ"のバンク"２"、"Ｂ"のバンク"２"、"Ａ"のバンク"３"、"Ｂ"のバンク"３"、"Ａ"のバンク"０"（ローアドレスをインクリメントする）の順にアクセスする。このとき、カラムアドレスを昇順にアクセスする。よって、２０４８バイト毎にメモリチャンネルが入れ替わる。したがって、メモリチャンネルを跨る確率は非常に低いため、各メモリチャンネルに入出力するデータを並び替えるためのバッファを設ける必要がない。
【００５３】
また、水平方向に連続してアクセスする水平アクセスの場合は、どの行でも片方のメモリチャンネルのみのアクセスとなる。つまり、Ｘ方向には同じメモリチャンネルのブロックが配列されている。よって、各メモリチャンネルに入出力するデータを並び替えるためのバッファを設ける必要がない。図８に示した背景技術にかかるマッピング方法では、水平アクセスの際は、ほとんどの場合において両方のメモリチャンネルに跨っていたが、本実施の形態にかかるメモリアクセスシステムを用いることで、どの行でも片方のメモリチャンネルのみのアクセスとすることができる。
【００５４】
また、垂直方向に連続してアクセスする垂直アクセスの場合は、図４に示したＹｂの値が"４"であるため５行以上のアクセスでは必ず両方のチャンネルに跨る。また、４行以下のアクセスでは両方のチャンネルに跨る可能性はあるが、行数が少なくなるに従い両方のチャンネルに跨る確率は低下する。また、１行置きに連続して垂直アクセスする場合、３行以上のアクセスでは必ず両方のチャンネルに跨る。また、１行置きに連続してアクセスする場合、２行のアクセスでは両方のチャンネルに跨る可能性がある。よって、必要に応じて各メモリチャンネルに入出力するデータを並び替えるためのバッファを設ける必要がある。
【００５５】
しかし、図８に示した背景技術にかかるマッピング方法と比較すると、垂直アクセスの際に両方のチャンネルに跨る確率を低くすることができる。図８に示したマッピング方法では、ほとんどの場合、メモリチャンネル"Ａ"とメモリチャンネル"Ｂ"が交互に入れ替わっていた。一方、図４に示す本実施の形態の場合は４行置きにメモリチャンネル"Ａ"とメモリチャンネル"Ｂ"が入れ替わっている。よって、図８の場合と比べて垂直アクセス時に両方のメモリチャンネルに跨る確率を低くすることができる。なお、一般的には垂直アクセスを必要とするメモリマスタは、ＭＰＥＧやＨ．２６４のような動画符号／復号化を行なうメモリマスタやグラフィックス描画を行なうメモリマスタに限られるため、全メモリマスタに占める割合は非常に小さいといえる。このため、各メモリチャンネルに入出力するデータを並び替えるためのバッファを少なく抑えることができる。
【００５６】
以上で説明したように、本実施の形態にかかるメモリアクセスシステムにより、複数のメモリチャンネルに格納されている２次元配置のデータに水平アクセス、垂直アクセスした場合であっても、１回のメモリアクセスが複数のメモリチャンネルに跨る確率を低くすることができ、メモリに効率的にアクセスすることができるメモリアクセスシステムを提供することが可能となる。
【００５７】
また、本実施の形態にかかるメモリアクセスシステムでは、水平アクセスの際にどの行でも片方のメモリチャンネルのみのアクセスとなる。よって、各メモリチャンネルに入出力するデータを並び替えるためのバッファを設ける必要がないため、ハードウェア量の増加を抑えることができる。
【００５８】
また、垂直アクセスの場合であっても、図８に示した背景技術に係るマッピング方法と比較すると両方のチャンネルに跨る確率を低くすることができる。よって、各メモリチャンネルに入出力するデータを並び替えるためのバッファを少なくすることができ、ハードウェア量の増加を抑えることができる。また、Ｘ方向とＹ方向のマッピングを反対にすれば、垂直アクセスが多く水平アクセスが少ない場合でも、各メモリチャンネルに入出力するデータを並び替えるためのバッファを少なくすることができ、ハードウェア量の増加を抑えることができる。
【００５９】
また、本実施の形態にかかるメモリアクセスシステムにより、複数のチャンネルを備えるメモリアクセスシステムにおいて、メモリアクセスシステムのアドレス空間をリニアアクセスする場合、水平アクセスする場合、垂直アクセスする場合であっても、メモリアクセスを各チャンネルに均等に割り当てることができる。
【００６０】
以上、本発明を上記実施形態に即して説明したが、上記実施形態の構成にのみ限定されるものではなく、本願特許請求の範囲の請求項の発明の範囲内で当業者であればなし得る各種変形、修正、組み合わせを含むことは勿論である。
【符号の説明】
【００６１】
１１、１２、１３  プロセッサ
２１、２２  バス
３１、３２  メモリコントローラ
４１、４２  メモリ
５１、５２、５３、５４、５５  バンク
【図１】
2011170594.tif 000003
【図２】
2011170594.tif 000004
【図３】
2011170594.tif 000005
【図４】
2011170594.tif 000006
【図５】
2011170594.tif 000007
【図６】
2011170594.tif 000008
【図７】
2011170594.tif 000009
【図８】
2011170594.tif 000010