(57)【特許請求の範囲】
【請求項１】
メモリアレイにデータを格納するメモリ制御装置であって、
Ｙ行及びＸ列（Ｘ及びＹのそれぞれは、４以上の整数）の２次元配列データを、それぞれが連続する複数行のデータを含む複数のブロックに分け、各ブロックの偶数番号の行のデータを１つのアドレスに書き込み、各ブロックの奇数番号の行のデータを他の１つのアドレスに書き込むデータ書き込み部を備え、
前記メモリアレイが、１つのアドレスに２ｎ−１個（ｎは２以上の整数）のデータを格納可能であり、
前記データ書き込み部は、前記２次元配列データを、連続する２ｎ行ごとのブロックに分け、各データを配列要素（ｉ，ｊ）（０≦ｉ≦Ｘ−１、０≦ｊ≦Ｙ−１）で表し、且つ、ｋをｊの下位ｎビットで構成される整数として、各ブロックのｋが偶数の配列要素を前記１つのアドレスに書き込み、各ブロックのｋが奇数の配列要素を前記他の１つのアドレスに書き込み、
前記データ書き込み部は、配列要素（０，０）を格納する先頭のメモリアドレスをＡｄｒ０、ｉｎｔを括弧内の数値を整数化する関数として、各配列要素（ｉ，ｊ）を、
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋ｉ （ｋが偶数のとき）
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋Ｘ＋ｉ （ｋが奇数のとき）
で求まるアドレスＡｄｒに格納し、
前記データ書き込み部は、書き込んだ前記２次元配列データを縦方向に１行おきに連続して読み出す、
ことを特徴とするメモリ制御装置。
【請求項２】
前記２次元配列データが、横方向の画素数がＸで、縦方向のライン数がＹの画像データである、請求項１に記載のメモリ制御装置。
【請求項３】
メモリアレイにデータを格納する方法であって、
コンピュータが、Ｙ行及びＸ列（Ｘ及びＹのそれぞれは、４以上の整数）の２次元配列データを、それぞれが連続する複数行のデータを含む複数のブロックに分け、各ブロックの偶数番号の行に配列されたデータを１つのアドレスに書き込み、各ブロックの奇数番号の行のデータを他の１つのアドレスに書き込み、
前記メモリアレイが、２ｎ−１個（ｎは２以上の整数）のデータを格納可能であり、前記コンピュータが、前記２次元配列データを、連続する２ｎ行ごとのブロックに分け、各データを配列要素（ｉ，ｊ）（０≦ｉ≦Ｘ−１、０≦ｊ≦Ｙ−１）で表し、且つ、ｋをｊの下位ｎビットで構成される整数として、各ブロックにおいて、ｋが偶数の配列要素を前記１つのアドレスに書き込み、各ブロックのｋが奇数の配列要素を前記他の１つのアドレスに書き込み、
配列要素（０，０）を格納する先頭のメモリアドレスをＡｄｒ０、ｉｎｔを括弧内の数値を整数化する関数として、前記コンピュータが、各配列要素（ｉ，ｊ）を、
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋ｉ （ｋが偶数のとき）
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋Ｘ＋ｉ （ｋが奇数のとき）
で求まるアドレスＡｄｒに格納し、
前記コンピュータが、書き込んだ前記２次元配列データを縦方向に１行おきに連続して読み出す、
ことを特徴とするメモリマッピング方法。
【請求項４】
メモリアレイにデータを格納するコンピュータに、
Ｙ行及びＸ列（Ｘ及びＹのそれぞれは、４以上の整数）の２次元配列データを、それぞれが連続する複数行のデータを含む複数のブロックに分け、各ブロックの偶数番号の行のデータを１つのアドレスに書き込み、各ブロックの奇数番号の行のデータを他の１つのアドレスに書き込む書き込み処理を実行させ、  
前記メモリアレイが、１つのアドレスに２ｎ−１個（ｎは２以上の整数）のデータを格納可能であり、
前記書き込み処理では、前記２次元配列データを、連続する２ｎ行ごとのブロックに分け、各データを配列要素（ｉ，ｊ）（０≦ｉ≦Ｘ−１、０≦ｊ≦Ｙ−１）で表し、且つ、ｋをｊの下位ｎビットで構成される整数として、各ブロックのｋが偶数の配列要素を前記１つのアドレスに書き込み、各ブロックのｋが奇数の配列要素を前記他の１つのアドレスに書き込み、
前記書き込み処理では、配列要素（０，０）を格納する先頭のメモリアドレスをＡｄｒ０、ｉｎｔを括弧内の数値を整数化する関数として、各配列要素（ｉ，ｊ）を、
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋ｉ （ｋが偶数のとき）
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋Ｘ＋ｉ （ｋが奇数のとき）
で求まるアドレスＡｄｒに格納し、
前記書き込み処理では、書き込んだ前記２次元配列データを縦方向に１行おきに連続して読み出す、
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ制御装置、メモリマッピング方法、及び、プログラムに関し、更に詳しくは、１つのアドレスに複数のデータが記憶可能なメモリアレイに２次元配列データを格納するメモリ制御装置、メモリマッピング方法、及び、プログラムに関する。
【背景技術】
【０００２】
メモリアクセスに際し、単位時間当たりの最大データアクセス量であるアクセス帯域を増やすための方策として、２つの方策が考えられる。１つは、メモリを駆動するクロック周波数を上げるというものである。もう１つは、データを使用する装置とメモリとの間のデータ接続の配線数、すなわち、データバス幅を広げて一度にアクセスするデータ量を増やすというものである。クロック周波数は、メモリが対応している周波数よりも上げることはできないため、周波数を限界まで上げた後は、メモリに一度にアクセスするデータ幅を広げるしかない。一方で、データバス幅を広げると、１つのアドレスに割り当てられるデータ量が多くなるため、所望のデータにアクセスする際に、それ以外の不必要なデータにも同時にアクセスすることになって、アクセス効率が低下するという弊害が生じる。【０００３】
図５に、横方向に連続した２画素分のデータを１つのアドレスに格納する場合のマッピングの例を示す。この例では、画像サイズを、横１０２４×縦１０２４としている。アドレス０には、座標（０，０）、（１，０）の２つの画素のデータを格納し、アドレス１には、座標（２，０）、（３，０）の２つの画素の画像データを格納する。０ライン目の画素のデータ（（０，０）〜（１０２３，０））は、アドレス０からアドレス５１１に格納され、１ライン目の画素のデータ（（０，１）〜（１０２３，１））は、アドレス５１２からアドレス１０２３に格納される。【０００４】
図５に示すマッピングで、横方向に連続した画素にアクセスする場合を考える。横方向に連続する画素にアクセスするとは、座標を（ｘ，ｙ）で表したときに、ｘが隣接する座標の画素に連続してアクセスすることである。具体的には、例えば、座標（０，０）から、座標（１，０）、（２，０）、（３，０）の順にアクセスすることである。画像データ処理部などの読み出し側の装置は、アドレス０、アドレス１、アドレス２、・・・の順にメモリにアクセスする。この場合、読み出し側の装置は、アドレス０にアクセスすることで座標（０，０）、（１，０）のデータを取得でき、アドレス１にアクセスすることで座標（２，０）、（３，０）のデータを取得できる。従って、横方向連続アクセスでは、不必要なデータへのアクセスは発生せず、アクセス効率は１００％となる。【０００５】
図５に示すマッピングにて、縦方向に連続した画素にアクセスする場合を考える。縦方向に連続する画素にアクセスするとは、座標を（ｘ，ｙ）で表したときに、ｙが隣接する座標の画素に連続してアクセスすることである。具体的には、例えば、座標（０，０）から、座標（０，１）、（０，２）、（０，３）の順にアクセスすることである。縦方向に連続する画素にアクセスする場合には、読み出し側の装置は、アドレス０、アドレス５１２、・・・の順に、メモリにアクセスする。このとき、読み出し側の装置は、例えばアドレス０にて、座標（０，０）にアクセスする際に、不必要な座標（１，０）にもアクセスすることになる。１つのアドレスには、横方向に連続する２つの画素のデータが格納されているため、アクセスしたデータのうちの半分は不必要なデータとなり、アクセス効率は５０％となる。【０００６】
図６に、縦方向に連続した２画素分のデータを１つのアドレスに格納する場合のマッピングを示す。ここでも、画像サイズは、横１０２４×縦１０２４である。図６に示すマッピングにて、縦方向に連続した画素にアクセスすると、図５にて横方向に連続した画素にアクセスする場合と同様に、アクセス効率は１００％になる。また、図６に示すマッピングにて、横方向に連続した画素にアクセスすると、図５にて縦方向に連続した画素にアクセスする場合と同様に、アクセス効率は５０％となる。従って、横方向に連続したアクセスが多い場合は、図５に示すマッピングとし、縦方向に連続したアクセスが多い場合は、図６に示すマッピングとすることで、効率的なアクセスが可能となる。【０００７】
ここで、画像の描画ソフトウェアの変更なしに、上下反転や９０°回転した画像を得ることができる画像メモリ制御装置が特許文献１に記載されている。特許文献１の画像メモリ制御装置は、アドレスバスと画像メモリとの間にアドレス変換装置に配列された。アドレス変換装置は、行アドレス、列アドレスについての演算を行う。アドレス変換装置が、行アドレスと列アドレスの演算を適宜行い、行アドレスと列アドレスとの交換を組み合わせることで、アドレスバスから入力するアドレスを変更することなく、上下の反転や、９０°回転した画像を得ることができる。
【特許文献１】特開平６−２９５３３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
２次元配列に対するアクセスでは、横方向連続及び縦方向連続だけでなく、縦方向に１行おきにアクセスする場合もある。縦方向に１行おきにアクセスするデータ処理の典型例は、動画像のデコード処理である。画素のデータへのアクセスに際して、縦方向に１行おきにアクセスする場合は、図６のメモリマッピングでも、１アドレスに格納された２画素分のデータのうちの１画素分しか有効なデータにアクセスできないため、アクセス効率が５０％になる。特許文献１に記載のアドレス変換部は、反転画像を得るためのアドレス変換をするのみであるため、特許文献１では、縦方向に１行おきのアクセスの際のアクセス効率を向上させることは不可能である。【０００９】
本発明は、１つのアドレスに複数のデータが格納可能なメモリに対して、縦方向に１行おきに連続したアクセスの際にも、効率のよいメモリアクセスが実現可能なメモリ制御装置、メモリマッピング方法（データ格納方法）、及び、プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、メモリアレイにデータを格納するメモリ制御装置であって、Ｙ行及びＸ列（Ｘ及びＹのそれぞれは、４以上の整数）の２次元配列データを、それぞれが連続する複数行のデータを含む複数のブロックに分け、各ブロックの偶数番号の行のデータを１つのアドレスに書き込み、各ブロックの奇数番号の行のデータを他の１つのアドレスに書き込むデータ書き込み部を備え、
前記メモリアレイが、１つのアドレスに２ｎ−１個（ｎは２以上の整数）のデータを格納可能であり、
前記データ書き込み部は、前記２次元配列データを、連続する２ｎ行ごとのブロックに分け、各データを配列要素（ｉ，ｊ）（０≦ｉ≦Ｘ−１、０≦ｊ≦Ｙ−１）で表し、且つ、ｋをｊの下位ｎビットで構成される整数として、各ブロックのｋが偶数の配列要素を前記１つのアドレスに書き込み、各ブロックのｋが奇数の配列要素を前記他の１つのアドレスに書き込み、
前記データ書き込み部は、配列要素（０，０）を格納する先頭のメモリアドレスをＡｄｒ０、ｉｎｔを括弧内の数値を整数化する関数として、各配列要素（ｉ，ｊ）を、
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋ｉ （ｋが偶数のとき）
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋Ｘ＋ｉ （ｋが奇数のとき）
で求まるアドレスＡｄｒに格納し、
前記データ書き込み部は、書き込んだ前記２次元配列データを縦方向に１行おきに連続して読み出す、
ことを特徴とするメモリ制御装置を提供する。
【００１１】
本発明は、また、メモリアレイにデータを格納する方法であって、コンピュータが、Ｙ行及びＸ列（Ｘ及びＹのそれぞれは、４以上の整数）の２次元配列データを、それぞれが連続する複数行のデータを含む複数のブロックに分け、各ブロックの偶数番号の行に配列されたデータを１つのアドレスに書き込み、各ブロックの奇数番号の行のデータを他の１つのアドレスに書き込み、
前記メモリアレイが、２ｎ−１個（ｎは２以上の整数）のデータを格納可能であり、前記コンピュータが、前記２次元配列データを、連続する２ｎ行ごとのブロックに分け、各データを配列要素（ｉ，ｊ）（０≦ｉ≦Ｘ−１、０≦ｊ≦Ｙ−１）で表し、且つ、ｋをｊの下位ｎビットで構成される整数として、各ブロックにおいて、ｋが偶数の配列要素を前記１つのアドレスに書き込み、各ブロックのｋが奇数の配列要素を前記他の１つのアドレスに書き込み、
配列要素（０，０）を格納する先頭のメモリアドレスをＡｄｒ０、ｉｎｔを括弧内の数値を整数化する関数として、前記コンピュータが、各配列要素（ｉ，ｊ）を、
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋ｉ （ｋが偶数のとき）
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋Ｘ＋ｉ （ｋが奇数のとき）
で求まるアドレスＡｄｒに格納し、
前記コンピュータが、書き込んだ前記２次元配列データを縦方向に１行おきに連続して読み出す、
ことを特徴とするメモリマッピング方法を提供する。
【００１２】
本発明は、更に、メモリアレイにデータを格納するコンピュータに、Ｙ行及びＸ列（Ｘ及びＹのそれぞれは、４以上の整数）の２次元配列データを、それぞれが連続する複数行のデータを含む複数のブロックに分け、各ブロックの偶数番号の行のデータを１つのアドレスに書き込み、各ブロックの奇数番号の行のデータを他の１つのアドレスに書き込む書き込み処理を実行させ、
前記メモリアレイが、１つのアドレスに２ｎ−１個（ｎは２以上の整数）のデータを格納可能であり、
前記書き込み処理では、前記２次元配列データを、連続する２ｎ行ごとのブロックに分け、各データを配列要素（ｉ，ｊ）（０≦ｉ≦Ｘ−１、０≦ｊ≦Ｙ−１）で表し、且つ、ｋをｊの下位ｎビットで構成される整数として、各ブロックのｋが偶数の配列要素を前記１つのアドレスに書き込み、各ブロックのｋが奇数の配列要素を前記他の１つのアドレスに書き込み、
前記書き込み処理では、配列要素（０，０）を格納する先頭のメモリアドレスをＡｄｒ０、ｉｎｔを括弧内の数値を整数化する関数として、各配列要素（ｉ，ｊ）を、
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋ｉ （ｋが偶数のとき）
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋Ｘ＋ｉ （ｋが奇数のとき）
で求まるアドレスＡｄｒに格納し、
前記書き込み処理では、書き込んだ前記２次元配列データを縦方向に１行おきに連続して読み出す、
ことを特徴とするプログラムを提供する。
【発明の効果】
【００１３】
本発明のメモリ制御装置、データ格納方法（メモリマッピング方法）、及び、プログラムは、縦方向に１行おきに連続したアクセスの際にも、効率のよいアクセスを実現できる。【００１４】
本発明の上記、及び、他の目的、特徴及び利益は、図面を参照する以下の説明により明らかになる。
【図面の簡単な説明】
【００１５】
【図１】本発明の一実施形態のメモリ制御装置を示すブロック図。
【図２】本実施形態におけるメモリマッピングを示す図表。
【図３】データ格納時の動作手順を示すフローチャート。
【図４】データ読み出し時の動作手順を示すフローチャート。
【図５】横方向に隣接するデータを同じアドレスに格納するメモリマッピングを示す図表。
【図６】縦方向に隣接するデータを同じアドレスに格納するメモリマッピングを示す図表。
【発明を実施するための形態】
【００１６】
本発明のメモリ制御装置は、メモリアレイにデータを格納するメモリ制御装置であって、その最小構成として、Ｙ行及びＸ列（Ｘ及びＹのそれぞれは、４以上の整数）の２次元配列データを、それぞれが連続する複数行のデータを含む複数のブロックに分け、各ブロックの偶数番号の行のデータを１つのアドレスに書き込み、各ブロックの奇数番号の行のデータを他の１つのアドレスに書き込むデータ書き込み部を備える。
【００１７】
本発明のデータ格納方法は、メモリアレイにデータを格納する方法であって、その最小構成として、コンピュータが、Ｙ行及びＸ列（Ｘ及びＹのそれぞれは、４以上の整数）の２次元配列データを、それぞれが連続する複数行のデータを含む複数のブロックに分け、各ブロックの偶数番号の行に配列されたデータを１つのアドレスに書き込み、各ブロックの奇数番号の行のデータを他の１つのアドレスに書き込むステップに配列された。
【００１８】
本発明のプログラムは、コンピュータ読み込み可能な記録媒体に格納されたプログラムであって、その最小構成として、メモリアレイにデータを格納するコンピュータに、Ｙ行及びＸ列（Ｘ及びＹのそれぞれは、４以上の整数）の２次元配列データを、それぞれが連続する複数行のデータを含む複数のブロックに分け、各ブロックの偶数番号の行のデータを１つのアドレスに書き込み、各ブロックの奇数番号の行のデータを他の１つのアドレスに書き込む処理を実行させる。
【００１９】
上記本発明の最小構成のメモリ制御装置、データ格納方法（メモリマッピング方法）、及び、プログラムは、メモリアドレスへの複数のアクセス方法に対応可能であり、例えば縦方向に１行おきに連続したメモリアドレスへのアクセスの際にも、効率のよいアクセスを実現できる。
【００２０】
以下、図面を参照し、本発明の例示的な実施形態を詳細に説明する。図１は、本発明の一実施形態のデータ記憶装置１００を、画像データに対して演算処理を実行する画像データ処理部１０４と共に示している。データ記憶装置１００は、データ書き込み部１０１及びデータ読み出し部１０２を含むメモリ制御装置１０７と、メモリアレイ（以下、単にメモリと呼ぶ）１０３とに配列された。データ記憶装置１００のメモリ制御装置１０７は、画像データ処理部１０４の指示を受けてメモリ１０３へのデータ格納、及び、メモリ１０３からの読出し処理を行う。メモリ１０３は、１つのアドレスに、複数の画素のデータを格納できる。ここでは、メモリ１０３は、ｎを２以上の正の整数として、２ｎ−１個の画素のデータを格納できるとする。データ書き込み部１０１、データ読み出し部１０２、及び、画像データ処理部１０４は、コンピュータ上で所定のプログラムを実行することで実現可能である。或いは、これらは、ハードウェアで構成されていてもよい。
【００２１】
画像データ処理部１０４は、データ記憶装置１００に画像データを格納し、或いは、データ記憶装置１００から画像データを読み出す。画像データ処理部１０４は、データ格納に際しては、データ書き込み部１０１に、各画素の画像データを出力する。画像データ処理部１０４は、データ読み出しに際しては、データ読み出し部１０２に、読み出したい画像データの座標を渡し、データ読み出し部１０２から、指定した座標の画像データを受け取る。画像データ処理部１０４が行うデータ読み出しは、画像の横方向の連続読み出しと、縦方向の連続読み出しと、縦方向１行おきの連続読み出しとを含む。
【００２２】
データ書き込み部１０１は、画像データ処理部１０４から画像データを入力し、メモリ１０３へ画像データを格納する。画像データのサイズは、Ｘ画素×Ｙライン（Ｘ及びＹのそれぞれは、４以上の整数）とする。つまり、画像データは、Ｙ行Ｘ列の２次元配列データである。画像データの各要素（配列要素）は、（ｉ，ｊ）（０≦ｉ≦Ｘ−１、０≦ｊ≦Ｙ−１）で表す。データ書き込み部１０１は、画像データの縦方向を、連続する複数の行ごとに、複数のブロックに分割する。１ブロックの行数は、メモリ１０３が１つのアドレスに格納できるデータの個数の２倍とする。メモリ１０３が１つのアドレスに２ｎ−１個のデータを格納可能なときは、画像データを、連続する２ｎラインごとのブロックに分割する。
【００２３】
データ書き込み部１０１は、上記のように分割した各ブロックの画像データについて書き込みを行う際に、各ブロックの行番号（ｊ）が偶数の画像データを１つのアドレスに書き込み、各ブロックの行番号（ｊ）が奇数のデータを他の１つのアドレスに書き込む。つまり、データ書き込み部１０１は、ｋをｊの下位ｎビットで構成される整数（０〜２ｎ−１）として、各ブロックのｋが偶数の配列要素のデータを１つのメモリアドレスに格納し、各ブロックのｋが奇数の配列要素のデータを他の１つのメモリアドレスに格納する。
【００２４】
図２に、メモリ１０３における各画素のデータのマッピングを示す。図２では、説明簡略化のため、ｎ＝２とする。つまり、メモリ１０３は、１つのアドレスに、２つの画素データを格納できるものとする。データ書き込み部１０１は、画像データを、０行目から順に、２２＝４ラインごとのブロックに分割する。データ書き込み部１０１は、各グループについて、画素データの縦方向の座標ｊの下位２ビットをｋ（０〜３）とし、ｋが偶数（０又は２）の画像データをメモリ１０３の同じアドレスに格納し、ｋが奇数（１又は３）のデータをメモリ１０３の同じアドレスに格納する。
【００２５】
配列要素（０，０）のデータを格納する先頭のメモリアドレスＡｄｒ０をアドレス０とする。データ書き込み部１０１は、アドレス０に、ｋが偶数のラインの画素データである座標(０，０)と座標（０，２）の画素データを格納する。データ書き込み部１０１は、アドレス１０２４に、ｋが奇数のラインの画素データである座標（０，１）と座標（０，３）の画素データを格納する。各列でのデータ格納の仕方は、０列目と同様である。すなわち、データ書き込み部１０１は、アドレス１には座標（１，０）と座標（１，２）の画素データを格納し、アドレス１０２５には座標（１，１）と座標（１，３）の画素データを格納する。
【００２６】
配列要素（ｉ，ｊ）と、その配列要素を格納するアドレスＡｄｒとの関係を一般化すると、以下のようになる。
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋ｉ  （ｋが偶数のとき）
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋Ｘ＋ｉ  （ｋが奇数のとき）
ここで、ｉｎｔ（）は、括弧内の数値を整数化する関数である。なお、ｋはｊの下位ｎビットで構成される整数であるので、ｋが偶数であることは、ｊが偶数であることと等価である。データ書き込み部１０１は、上記式で求まるアドレスＡｄｒに、配列要素（ｉ，ｊ）のデータを格納する。同一アドレス内に格納する２ｎ−１個の画素データの並び順は、ｊの値が小さい順であるとする。データ書き込み部１０１は、上記演算を行うことにより、２次元配列データを、それぞれが連続する複数行のデータを含む複数のブロックに分け、各ブロックの配列要素を、行番号が偶数の配列要素を１つのアドレスに書き込み、行番号が奇数の配列要素を他の１つのアドレスに書き込むことが出来る。
【００２７】
データ読み出し部１０２は、画像データ処理部１０４から、読み出したい画像データの座標を受け取る。画像データ処理部１０４は、例えば、座標（０，０）から横方向に連続して８画素分の画像データを読み出す際には、座標（０，０）、（１，０）、・・・、（７，０）を順次にデータ読み出し部１０２に出力する。或いは、画像データ処理部１０４は、開始点の座標が（０，０）で、読み出しのモードが横方向連続、読み出しのサイズが８画素分のデータであるという指定をデータ読み出し部１０２に対して与えてもよい。データ読み出し部１０２は、指定された座標のデータをメモリ１０３から読み出し、画像データ処理部１０４に出力する。
【００２８】
データ読み出し部１０２は、アドレス変換部１０５とデータ取得部１０６とに配列された。アドレス変換部１０５は、読み出すべき画像データの座標を、メモリ１０３のアドレスに変換する。データ取得部１０６は、メモリ１０３から、アドレス変換部１０５が生成したアドレスのデータを取得する。アドレス変換部１０５におけるアドレス変換は、データ書き込み部１０１におけるアドレス生成と同様である。すなわち、アドレス変換部１０５は、読み出すべき画像データの座標（ｉ，ｊ）から、下記式により、座標（ｉ，ｊ）の画像データを格納するメモリ１０３のアドレスＡｄｒを計算する。
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋ｉ  （ｊが偶数のとき）
Ａｄｒ＝Ａｄｒ０＋ｉｎｔ（ｊ／２ｎ）×２Ｘ＋Ｘ＋ｉ  （ｊが奇数のとき）
【００２９】
図３に、データ格納時の動作手順を示す。データ書き込み部１０１は、画像データ処理部１０４から、例えば１０２４×１０２４ラインの画像データを受け取る（ステップＳ１）。データ書き込み部１０１は、１０２４ラインの画像データを、連続する２ｎラインずつのブロックに分割する（ステップＳ２）。データ書き込み部１０１は、例えば、ｎ＝２のときは、１０２４ラインを、２５６のブロックに分割する。データ書き込み部１０１は、各ブロックを偶数行と奇数行とに分け、偶数行を同じアドレスに、奇数行を同じアドレスに格納する（ステップＳ３）。
【００３０】
図４に、データ読み出し時の動作手順を示す。画像データ処理部１０４は、読み出すべき画素の座標を、データ読み出し部１０２に出力する（ステップＳ１１）。アドレス変換部１０５は、座標を、アドレスに変換する（ステップＳ１２）。データ取得部１０６は、アドレス変換部１０５にて生成されたアドレスにアクセスし、データを取得する（ステップＳ１３）。データ取得部１０６は、取得したデータを、画像データ処理部１０４に渡す（ステップＳ１４）。
【００３１】
画像データ処理部１０４が横方向に連続した画素に一度にアクセスする際の動作について説明する。画像データ処理部１０４は、座標（０，０）から横方向に連続した８画素にアクセスするものとする。画像データ処理部１０４は、データ読み出し部１０２に、座標（０，０）、（１，０）、・・・、（７，０）を順次に出力する。或いは、画像データ処理部１０４は、読み出しの開始座標（０，０）と、横方向連続である旨と、８画素分のデータとを、データ読み出し部１０２に渡してもよい。
【００３２】
メモリ１０３は、座標（０，０）、（１，０）、・・・、（７，０）のデータを、アドレス０、１、・・・、７に格納している。アドレス変換部１０５は、座標（０，０）、（１，０）、・・・、（７，０）に対応するアドレス０、１、・・・、７を、順次にデータ取得部１０６に渡す。データ取得部１０６は、メモリ１０３にアクセスして、アドレス変換部１０５から受け取ったアドレスのデータを取得し、取得したデータを画像データ処理部１０４に出力する。
【００３３】
アドレス０、１、・・・、７には、０行目のデータに加えて、２行目のデータも格納されている。つまり、画像データ処理部１０４は、８画素分のデータを取得する際に、１６画素分のデータにアクセスする。従って、画像データ処理部１０４が横方向に連続してメモリ１０３にアクセスする際のアクセス効率は、５０％となる。
【００３４】
次に、画像データ処理部１０４が縦方向に連続した画素に一度にアクセスする際の動作について説明する。画像データ処理部１０４は、座標（０，０）から縦方向に連続した８画素にアクセスするものとする。画像データ処理部１０４は、データ読み出し部１０２に座標（０，０）、（０，１）、・・・、（０，７）を順次に出力する。アドレス変換部１０５は、座標（０，０）、（０，１）、・・・、（０，７）の画素のデータを格納するアドレス０、１０２４、２０４８、３０７２を、データ取得部１０６に順次に出力する。データ取得部１０６は、メモリ１０３にアクセスして、アドレス変換部１０５から受け取ったアドレスのデータを取得し、取得したデータを画像データ処理部１０４に出力する。
【００３５】
上記の例では、データ読み出し部１０２は、要求されたデータ数が８画素分で、メモリ１０３の８画素分のデータにアクセスするので、メモリアクセス効率は１００％になる。このケースは、無駄なデータにはアクセスしない例であるが、最大では、４画素分の無駄なアクセスが生じる。例えば、座標（０，２）から縦方向連続に４画素分のデータを読み出すことを考える。この場合、アドレス０へのアクセスで座標（０，２）と共に取得した座標（０，０）のデータ、アドレス１０２４へのアクセスで座標（０，３）のデータと共に取得した座標（０，１）のデータ、アドレス２０４８へのアクセスで座標（０，４）のデータと共に取得した座標（０，６）のデータ、及び、アドレス３０７２へのアクセスで座標（０，５）のデータと共に取得した座標（０，７）のデータが無駄になる。
【００３６】
上記のケースは、最悪の例であり、メモリアクセス効率は５０％になる。しかし、無駄にアクセスする量は、全部で何行分アクセスする場合でも最大４つであるため、縦方向に多くの行にアクセスするほど、メモリアクセス効率は５０％から高くなっていく。
【００３７】
続いて、縦方向に１行おきに連続した画素に一度にアクセスする際の動作について説明する。縦方向に１行おきに連続した画素にアクセスするとは、Ｙ方向の座標を＋２ずつ増加しながらアクセスすることである。画像データ処理部１０４は、座標（０，０）から、縦方向の１行おきに連続した８画素にアクセスするものとする。すなわち、画像データ処理部１０４は、座標（０，０）、（０，２）、（０，４）、（０，６）、（０，８）、（０，１０）、（０，１２）、（０，１４）の画素に一度にアクセスする。アドレス変換部１０５は、座標（０，０）、（０，２）、・・・、（０，１４）のデータを格納するアドレス０、２０４８、４０９６、６１４４を、データ取得部１０６に順次に出力する。データ取得部１０６は、メモリ１０３にアクセスして、アドレス変換部１０５から受け取ったアドレスのデータを取得し、取得したデータを画像データ処理部１０４に出力する。
【００３８】
上記の例は、無駄なデータにはアクセスしない、つまり、メモリアクセス効率は１００％の例であるが、最悪のケースでは、最大２行分の無駄なアクセスが生じる。例えば、座標（０，２）から縦方向に１行おきに連続した４画素にアクセスする場合には、アドレス０、２０４８、４０９６にアクセスする必要があり、（０，０）、（０，１０）の２行分のデータが無駄になる。無駄にアクセスする量は、全部で何行分アクセスする場合でも最大で２行であるため、縦方向に多くの行をアクセスするほど、メモリアクセス効率は高くなる。
【００３９】
本実施形態では、メモリ１０３は、１つのアドレスに複数のデータを格納可能であり、データ書き込み部１０１は、メモリ１０３に対し、Ｙ行Ｘ列の２次元配列データを格納する際に、２次元配列データを連続する複数行ごとにブロックに分け、各ブロックについて、行番号が偶数の配列要素のデータを同じメモリアドレスに格納し、行番号が奇数の配列要素のデータを同じメモリアドレスに格納する。このようなメモリ格納（メモリマッピング）を行うことで、Ｙ方向に１行おきに２次元配列データにアクセスする際のメモリアクセス効率を向上させることができる。
【００４０】
横方向に連続する複数のデータを同じアドレスに格納する場合、横方向に連続するデータにアクセスする際のメモリアクセス効率は最大１００％にできるものの、縦方向に連続するデータにアクセスする際のメモリアクセス効率は５０％に落ちる。これに対し、縦方向に連続する複数のデータを同じアドレスに格納すると、縦方向に連続するデータにアクセスする際のメモリアクセス効率を１００％にできる。しかし、縦方向に連続するデータを同じアドレスに格納する場合でも、縦方向に１行おきに連続してアクセスするときのメモリアクセス効率は、５０％に落ちる。
【００４１】
画像処理では、動画像のデコード処理など、縦方向に１行おきに連続するデータにアクセスする状況が存在する。本実施形態では、縦方向に１行おきに連続するデータを同じアドレスに格納するので、縦方向に１行おきに連続するアクセスの際のメモリアクセス効率を、最大１００％に向上できる。また、縦方向に連続するデータにアクセスする際のメモリアクセス効率についても、最大で１００％にすることができる。つまり、本実施形態では、縦方向に連続してアクセスする際のメモリアクセス効率、及び、縦方向に１行おきに連続してアクセスする際の双方のメモリアクセス効率を向上することができる。特に、画像データは、縦方向への連続アクセスが多いので、本実施形態におけるメモリマッピングを採用することが有利である。上記２次元配列データは、例えば、横方向の画素数がＸで、縦方向のライン数がＹの画像データである。
【００４２】
なお、上記実施形態では、２次元配列データを画像データとする例について説明したが、格納すべき２次元配列データは、画像データには限定されない。縦方向に連続、及び、縦方向１行おきに連続する配列要素へのアクセスの際のメモリアクセス効率を向上できるという効果は、画像データ以外のデータであっても、同様に得ることができる。
【００４３】
本発明を特別に示し且つ例示的な実施形態を参照して説明したが、本発明は、その実施形態及びその変形に限定されるものではない。当業者に明らかなように、本発明は、添付の請求の範囲に規定される本発明の精神及び範囲を逸脱することなく、種々の変更が可能である。
【００４４】
本出願は、２００８年１０月１０日出願に係る日本特許出願２００８−２６３７６５号を基礎とし且つその優先権を主張するものであり、引用によってその開示の内容の全てを本出願の明細書中に加入する。
【図１】
0005605225.tif 000002
【図２】
0005605225.tif 000003
【図３】
0005605225.tif 000004
【図４】
0005605225.tif 000005
【図５】
0005605225.tif 000006
【図６】
0005605225.tif 000007