説明

画像転送装置

【課題】メモリへのアクセスが効率良く行え、BITBLT処理を高速に行うことのできる画像転送装置を得る。
【解決手段】処理対象となる画像データ毎に第1の画像リード部11,第2の画像リード部12,第3の画像リード部13を設ける。第1の画像リード部11〜第3の画像リード部13は、それぞれ参照する画像データのメモリ50内のアドレスを計算してその画像データを読み出す。演算部14は、これらの第1の画像リード部11〜第3の画像リード部13で読み出された画像データに演算処理を施す。演算部14で演算処理された画像データは、バスIF部16を介してメモリ50に書き戻される。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、二次元画像データのBITBLT処理を行う画像転送装置に関するものである。
【背景技術】
【0002】
二次元グラフィクスの描画処理において、メモリ上の画像の矩形領域を別の領域へと転送するBITBLT(Bit Block Transfer:ビットブリット)は頻繁に使用される機能である。また、転送時に転送元のデータと転送先のデータとの間でブレンド処理や論理演算等の処理を行ったり、別領域にある画像を参照して画像の合成を行ったりする場合もある。
BITBLT処理を行う際には、メモリから参照する画像データの読み出し、演算処理、メモリへの書き込みを行う必要がある。従来では、CPUによるソフトウェア処理により実施されていたが、高速に処理を行うためにハードウェアで実施する方法が提案されている(例えば、特許文献1または特許文献2参照)。
また、1画素当たりのビット数が異なる複数の画像をメモリから読み出して合成する際に、それぞれの画像を一時保存する一時保存メモリを用意し、メモリからバースト転送によって読み出して一時保存メモリへ保持し、合成する方法も提案されている(例えば、特許文献3参照)。
【0003】
【特許文献1】特開平6−004659号公報
【特許文献2】特開2005−190002号公報
【特許文献3】特開2000−172242号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
組み込み用システムなどにおいて使用されるユニファイドメモリアーキテクチャでは、CPUが使用するメインメモリと描画を行うビデオメモリが同じメモリであるため、BITBLT処理時の転送元の領域や転送先の領域が同じメモリ内に存在することになる。メモリとしてはSDRAMやDDR−SDRAMが使用されることが多い。
この場合、例えば特許文献1に示されるような従来の装置によるBITBLT処理では、画素毎にメモリに対する読み出しと書き込みが繰り返されることになる。そのため、転送元と転送先のメモリ内のアドレスが離れている場合には、読み出しまたは書き込みのアクセス毎に、メモリに対するプリチャージ等のオーバーヘッドが生じる場合があり効率が悪いという問題があった。また、例えば、特許文献2に示されているようなBITBLT処理では、参照する画像を格納するメモリと書き込みを行うメモリが分かれており、同じメモリ内でのBITBLT処理については考慮されておらず、同一メモリ内におけるBITBLT処理には適用できないという問題があった。
【0005】
更に、例えば、特許文献3に示されたような従来の装置による処理は、表示装置への画面の出力を想定したものであり、画像のメモリへの書き戻しや、画像の一部の領域を転送することが考慮されていない。また、1画素当たりのビット数が少ない画像の場合には一度に読み出すデータの量を減らすため、一時保存メモリの容量が有効に利用されていないという課題があった。
【0006】
この発明は上記のような課題を解決するためになされたもので、メモリへのアクセスが効率良く行え、BITBLT処理を高速に行うことのできる画像転送装置を得ることを目的とする。
【課題を解決するための手段】
【0007】
この発明に係る画像転送装置は、処理対象となる画像データ毎に設けられ、参照する画像データのメモリ内のアドレスを計算してその画像データを読み出す複数の画像リード部と、複数の画像リード部で読み出された画像データに演算処理を施してメモリへ書き戻すための演算部と、複数の画像リード部および演算部からの読み出し要求または書き込み要求を制御する制御部とを備えたものである。
【発明の効果】
【0008】
この発明の画像転送装置は、処理対象となる画像データ毎に画像リード部を設け、これらの画像リード部で読み出した画像データを演算部で演算して書き戻すようにしたので、メモリへのアクセスが効率良く行え、BITBLT処理を高速に行うことができる。
【発明を実施するための最良の形態】
【0009】
実施の形態1.
図1は、この発明の実施の形態1による画像転送装置を示す構成図であるが、この説明に先立ち、実施の形態1の画像転送装置におけるBITBLT処理について説明する。
図2は、実施の形態1による画像転送装置の処理内容の説明図である。
図示のフレームバッファ100A,フレームバッファ100B,フレームバッファ100Cは同一メモリ内に割り当てられているとする。また、一例として、フレームバッファ100Aとフレームバッファ100Cは1画素当たりのビット数が32ビットであり、フレームバッファ100Bは1画素あたりのビット数が16ビットであると仮定する。このような条件で画像転送装置がフレームバッファ100A内の画像Aとフレームバッファ100B内の画像Bを合成し、フレームバッファ100Cの画像Cの領域へブレンド処理を行いながら転送する場合を実施の形態として説明する。
【0010】
以下、図1を用いて、実施の形態1による画像転送装置の構成を説明する。
図示のように、画像転送装置10は、第1の画像リード部11、第2の画像リード部12、第3の画像リード部13、演算部14、制御部15、バスIF部16を備えている。また、画像転送装置10は、バス20を介してCPU30およびメモリIF40と相互に接続され、メモリIF40にはメモリ50が接続されている。尚、図中、破線矢印は制御信号、実線矢印はデータ信号の流れを示している。
【0011】
第1の画像リード部11は、図2で説明した画像Aのデータを読み出すリード部である。同様に、第2の画像リード部12は、画像Bのデータを読み出す画像リード部であり、第3の画像リード部13は、画像Cのデータを読み出す画像リード部である。これらの画像リード部11〜13は、それぞれバッファ11a、12a、13aを備えており、これらバッファ11a、12a、13aに、画像A、画像B、画像Cを一時保持するよう構成されている。
【0012】
演算部14は、第1の画像リード部11,第2の画像リード部12,第3の画像リード部13からそれぞれ出力されるデータに対して合成等の演算処理を施し、この演算処理結果をバスIF部16に出力する機能部である。制御部15は、画像転送装置10における全ての制御を司る制御部であり、CPU30から設定されたパラメータに基づいて、第1の画像リード部11〜第3の画像リード部13からの読み出し要求および演算部14からの書き込み要求のうち、どの処理を実行するかを判断する。バスIF部16は、制御部15からの指示に従い、第1の画像リード部11〜第3の画像リード部13からの読み出し要求および演算部14からの書き込み要求のうち、いずれかの要求を選択してバス20に出力するためのバスインタフェースである。
【0013】
バス20は、画像転送装置10とメモリ50間のデータ転送や、CPU30と画像転送装置10間の制御データの転送を行うためのバスである。CPU30は、画像転送装置10に対して、BITBLT処理における種々の設定や指示を行うプロセッサである。また、メモリIF40は、実際にメモリ50へのアクセスを行うメモリインタフェースである。メモリ50は、画像データを保持する外部メモリであり、図2で示したフレームバッファ100A,100B,100Cが設けられたメモリである。
また、本実施の形態の前提として、メモリIF40は、メモリ50に対して連続した読み出しあるいは書き込みの処理を行う際に、ロウアドレスが同一であればプリチャージ等のオーバーヘッドなしで処理することができるよう構成されているものとする。
【0014】
次に、実施の形態1の動作について説明する。
先ず、BITBLT処理時には、CPU30が画像転送装置10に対して画像のサイズや演算処理内容などの必要なパラメータを設定する。そして、CPU30が画像転送装置10に起動を指示することにより、画像転送装置10が動作を開始する。
【0015】
以下、図3を参照して画像転送装置10の動作を説明する。
図3は、画像転送装置10の動作を説明するタイミング図である。
第1の画像リード部11から制御部15に対しては、第1の画像リード部11が動作中であるか否かを示すビジー信号BUSY1、バッファ11aが満杯になった、または参照する画像Aのデータを全て読み込んだことを伝えるためのパルス信号FULL1、バッファ11aが空であるか否かを示す信号EMPTY1が出力される。
同様に、第2の画像リード部12から制御部15に対しては、第2の画像リード部12が動作中であるか否かを示すビジー信号BUSY2、バッファ12aが満杯になった、または参照する画像Bのデータを全て読み込んだことを伝えるためのパルス信号FULL2、バッファ12aが空であるか否かを示す信号EMPTY2が出力される。
同様に、第3の画像リード部13から制御部15に対しては、第3の画像リード部13が動作中であるか否かを示すビジー信号BUSY3、バッファ13aが満杯になった、または参照する画像Cのデータを全て読み込んだことを伝えるためのパルス信号FULL3、バッファ13aが空であるか否かを示す信号EMPTY3が出力される。
【0016】
また、演算部14から制御部15に対しては、演算部14が動作中であるか否かを示すビジー信号BUSY4が出力される。
初期状態では、ビジー信号BUSY1,BUSY2、BUSY3,BUSY4は共に“0”で、動作中ではないことを示している。また、EMPTY1,EMPTY2,EMPTY3は共に“1”で、バッファ11a、バッファ12a,バッファ13aが空であることを示している(図3、T1)。
【0017】
画像転送装置1がCPU30から起動の指示を受けると、第1の画像リード部11が動作を開始し、ビジー信号BUSY1を“1”とする。そして、設定されたパラメータ(フレームバッファ100Aのベースアドレス、フレームバッファ100Aのサイズ、フレームバッファ100Aの1画素あたりのビット数、画像Aの座標、転送サイズなど)から、参照する画像Aのメモリ50における最初のアドレスを計算し、バスIF部16に対して画像Aのデータの読み出しを要求する。
また、同時に第2の画像リード部12も動作を開始し、ビジー信号BUSY2を“1”とする。そして、設定されたパラメータ(フレームバッファBのベースアドレス、フレームバッファ100Bのサイズ、フレームバッファ100Bの1画素あたりのビット数、画像Bの座標、転送サイズなど)から、参照する画像Bのメモリ50における最初のアドレスを計算し、バスIF部16に対して画像Bのデータの読み出しを要求する。
同様に、第3の画像リード部13も動作を開始し、ビジー信号BUSY3を“1”とする。そして、設定されたパラメータ(フレームバッファ100Cのベースアドレス、フレームバッファ100Cのサイズ、フレームバッファ100Cの1画素あたりのビット数、画像Cの座標、転送サイズなど)から、参照する画像Cのメモリ50における最初のアドレスを計算し、バスIF部16に対して画像Cのデータの読み出しを要求する。
【0018】
画像転送装置1がCPU30から起動の指示を受けると、制御部15は先ずバスIF部16に対して画像Aの読み出しを行うように指示する。バスIF部16は、制御部15からの指示に従い、第1の画像リード部11からの読み出し要求を選択し、バス20へ出力する。そしてメモリIF40を介してメモリ50から読み出されたデータを受け取ると、データを第1の画像リード部11へ返す。第1の画像リード部11はバスIF部16から受け取ったデータをバッファ11aへ格納し、バッファ11aが空であるか否かを示す信号EMPTY1を“0”とする。
第1の画像リード部11は、読み出し要求がバスIF部16に受け付けられると、連続して次のデータの読み出しを要求する。バスIF部16は、制御部15から画像Aの読み出しを指示されているため、続けて第1の画像リード部11からの読み出し要求を選択してバス20へ出力する。このように連続して画像Aのデータの読み出しを行い、画像Aのデータをバッファ11aへ順次格納していく(図3、T2)。
この期間中、第2の画像リード部12および第3の画像リード部13は、画像Bおよび画像Cの読み出し要求がバスIF部16に受け付けられないため、読み出し要求を出したまま一時停止状態となる。
【0019】
やがて第1の画像リード部11のバッファ11aが満杯になると、第1の画像リード部11は、制御部15に対してパルス信号FULL1を出力し、データの読み出しを中止する。そして、バッファ11aに蓄えられた画像Aのデータを演算部14に対して出力する。
演算部14は、第1の画像リード部11から画像Aのデータが出力されても、この時点では第2の画像リード部12および第3の画像リード部13から画像Bおよび画像Cのデータが出力されていないため、第1の画像リード部11からの画像Aのデータを受け取らない。第1の画像リード部11は演算部14に対して画像Aのデータを出力したまま一時停止状態となる。
【0020】
制御部15は、第1の画像リード部11からパルス信号FULL1が入力されると、画像Aの一連の読み出し処理が終了したと判断し、次にどの処理を実行するかを判断する。図4は、制御部15における判断方法を示したものである。この場合、現在の処理が画像Aの読み出しであり、EMPTY2が“1”であるため、次にバスIF部16に対して画像Bの読み出しを行うように指示する。
【0021】
バスIF部16は、制御部15からの指示に従い、第2の画像リード部12から出力されている読み出し要求を選択し、バス20へ出力する。そしてメモリIF40を介してメモリ50から読み出されたデータを受け取ると、データを第2の画像リード部12へ返す。第2の画像リード部12はバスIF部16から受け取ったデータをバッファ12aへ格納し、バッファ12aが空であるか否かを示す信号EMPTY2を“0”とする。
第2の画像リード部12は、読み出し要求がバスIF部16に受け付けられると、連続して次のデータの読み出しを要求する。バスIF部16は制御部15から画像Bの読み出しを指示されているため、続けて第2の画像リード部12からの読み出し要求を選択してバス20へ出力する。このように連続して画像Bのデータの読み出しを行い、画像Bのデータをバッファ12aへ順次格納していく(図3、T3)。
【0022】
やがてバッファ12aが満杯になると、第2の画像リード部12は制御部15に対してパルス信号FULL2を出力し、データの読み出しを中止する。そして、バッファ12aに蓄えられた画像Bのデータを演算部14に対して出力する。
演算部14では、第2の画像リード部12から画像Bのデータが出力されていても、この時点では第3の画像リード部13から画像Cのデータが出力されていないため、第2の画像リード部12からの画像Bのデータを受け取らない。第2の画像リード部12は演算部14に対して画像Bのデータを出力したまま一時停止状態となる。
【0023】
制御部15は、第2の画像リード部12からパルス信号FULL2が入力されると、画像Bの一連の読み出し処理が終了したと判断し、次にどの処理を実行するかを判断する。この場合、現在の処理が画像Bの読み出しであり、EMPTY1が“0”かつEMPTY3が“1”であるため、次にバスIF部16に対して画像Cの読み出しを行うように指示する。
【0024】
バスIF部16は、制御部15からの指示に従い、第3の画像リード部13から出力されている読み出し要求を選択し、バス20へ出力する。そしてメモリIF40を介してメモリ50から読み出されたデータを受け取ると、データを第3の画像リード部13へ返す。第3の画像リード部13はバスIF部16から受け取ったデータをバッファ13aへ格納し、バッファ13aが空であるか否かを示す信号EMPTY3を“0”とする。
第3の画像リード部13は、読み出し要求がバスIF部16に受け付けられると、連続して次のデータの読み出しを要求する。バスIF部16は制御部15から画像Cの読み出しを指示されているため、続けて第3の画像リード部13からの読み出し要求を選択してバス20へ出力する。このように連続して画像Cのデータの読み出しを行い、画像Cのデータをバッファ13aへ順次格納していく(図3、T4)。
やがて第3の画像リード部13のバッファ13aが満杯になると、第3の画像リード部13は、制御部15に対してパルス信号FULL3を出力し、データの読み出しを中止する。そして、バッファ13aに蓄えられた画像Cのデータを演算部14に対して出力する。
【0025】
制御部15は、第3の画像リード部13からパルス信号FULL3が入力されると、画像Cの一連の読み出し処理が終了したと判断し、次にどの処理を実行するかを判断する。この場合、現在の処理が画像Cの読み出しであり、EMPTY1が“0”かつEMPTY2が“0”であるため、次にバスIF部16に対して画像Cの書き込みを行うように指示する。
【0026】
演算部14は、第1の画像リード部11、第2の画像リード部12および第3の画像リード部13の全てからデータが入力されると、データを受け取って動作を開始し、ビジー信号BUSY4を“1”とする。
演算部14は、設定されたパラメータに従い画像データに対して合成やブレンド等の演算処理を行い、結果を画像Cのアドレスへ書き戻すためにバスIF部16へ書き込み要求を出力する。
バスIF部16は、制御部15からの指示に従い、演算部14から出力されている書き込み要求を選択し、バス20へ出力する。そしてメモリIF40を介してメモリ50へデータを書き込む。
【0027】
第1の画像リード部11、第2の画像リード部12および第3の画像リード部13は、演算部14にデータが受け取られると、バッファ11a,バッファ12a,およびバッファ13aに格納されている画像データを順次演算部14へ出力する。
演算部14は、データを受け取って演算処理を行い、バスIF部16へ出力する処理をパイプライン処理で行い、連続してバスIF部16へ書き込み要求を出力する。バスIF部16は、制御部15から画像Cの書き込みを指示されているため、続けて演算部14からの書き込み要求を選択してバス20へ出力する。このように連続して画像C領域へのデータの書き込み行う(図3、T5)。
【0028】
やがてバッファ11a、バッファ12a,バッファ13aのいずれかが空になると、演算部14に対する入力データが揃わなくなるため、演算部14はデータの受け取りを停止する。そして、それまでに受け取ったデータを全てバスIF部16へ出力し終わった時点でビジー信号BUSY4を“0”にする。
この例では、画像Aと画像Cが、画像Bよりも1画素あたりのビット数が2倍であると仮定しているため、バッファ11aとバッファ13aが空になり、バッファ12aには半分のデータが残っている状態となる。
【0029】
第1の画像リード部11は、バッファ11aが空になった時点で、バッファ11aが空であるか否かを示す信号EMPTY1を“1”にし、画像Aの続きのアドレスを計算してバスIF部16に対して読み出し要求を出力する。
同様に、第3の画像リード部13は、バッファ13aが空になった時点で、バッファ13aが空であるか否かを示す信号EMPTY3を“1”にし、画像Cの続きのアドレスを計算してバスIF部16に対して読み出し要求を出力する。
【0030】
制御部15は、演算部14からのビジー信号BUSY4が“1”から“0”へ変化すると、画像Cの一連の書き込み処理が終了したと判断し、次にどの処理を実行するかを判断する。この場合、現在の処理が画像Cの書き込みであり、EMPTY1が“1”であるため、次にバスIF部16に対して画像Aの読み出しを行うように指示する。それにより、バッファ11aが満杯になるまで画像Aの読み出し処理が連続して行われる。(図3、T6)
【0031】
以上説明したように、画像を読み出す際にはバッファが満杯になるまで連続してリードを行い、データが揃ったらいずれかのバッファが空になるまで連続して演算処理をしながら書き戻す処理を繰り返す。
【0032】
やがて、第1の画像リード部11は、参照する画像Aの最終データを読み込むと、バッファ11aが満杯になっていなくても制御部15に対してパルス信号FULL1を出力し、演算部14に対してデータを出力する。そして、演算部14に対して全てのデータを出力し終わった時点でビジー信号BUSY1を“0”にする。
同様に、第2の画像リード部12は、参照する画像Bの最終データを読み込むと、バッファ12aが満杯になっていなくても制御部15に対してパルス信号FULL2を出力し、演算部14に対してデータを出力する。そして、演算部14に対して全てのデータを出力し終わった時点でビジー信号BUSY2を“0”にする。
同様に、第3の画像リード部13は、参照する画像Cの最終データを読み込むと、バッファ13aが満杯になっていなくても制御部15に対してパルス信号FULL3を出力し、演算部14に対してデータを出力する。そして、演算部14に対して全てのデータを出力し終わった時点でビジー信号BUSY3を“0”にする。
【0033】
演算部14が受け取ったデータを全てバスIF部16へ出力し、ビジー信号4が“1”から“0”へ変化した時点で、BUSY1、BUSY2およびBUSY3が全て“0”であれば画像転送装置10の動作が終了する(図3、T7)。
【0034】
以上のように、画像を読み出す際にはバッファが満杯になるまで連続してリードを行い、データが揃ったらいずれかのバッファが空になるまで連続して演算処理をしながら書き戻す構成としたため、メモリ50に対して連続して読み出しあるいは書き込みが行われるようになり、メモリアクセスの際のオーバーヘッドを低減することができ、高速に処理を行うことができる。
【0035】
尚、上記実施の形態では、画像リード部を3個としたが、これらの数は3個に限定されるものではない。例えば、更に別の画像Dを参照して合成を行う機能を実現する場合には、画像リード部の数を4個とし、同様の制御を行えばよい。
【0036】
以上のように、実施の形態1の画像転送装置によれば、同一メモリ内の画像データのBITBLT処理を行う画像転送装置において、処理対象となる画像データ毎に設けられ、参照する画像データのメモリ内のアドレスを計算し、画像データを読み出す複数の画像リード部と、複数の画像リード部で読み出された画像データに演算処理を施してメモリへ書き戻すための演算部と、複数の画像リード部および演算部からの読み出し要求または書き込み要求を制御する制御部とを備えたので、メモリへのアクセスが効率良く行え、BITBLT処理を高速に行うことができる。
【0037】
また、実施の形態1の画像転送装置によれば、複数の画像リード部は、読み出した画像データを一時保存するバッファをそれぞれ備え、参照する画像データをバッファが満杯になるまでリードを行い、その後バッファが空になるまで出力するように動作するようにしたので、バッファ容量を有効に利用することができ、バッファの小容量化に寄与することができる。
【0038】
また、実施の形態1の画像転送装置によれば、制御部は、複数の画像リード部のデータ読み出しまたは演算部からのデータ書き込みがメモリに対して連続して行われるように制御するようにしたので、同一メモリ内での画像データのBITBLT処理が効率良く行え、BITBLT処理を高速に行うことができる。
【図面の簡単な説明】
【0039】
【図1】この発明の実施の形態1による画像転送装置を示す構成図である。
【図2】この発明の実施の形態1による画像転送装置のBITBLT処理の説明図である。
【図3】この発明の実施の形態1による画像転送装置の動作を示すタイミング図である。
【図4】この発明の実施の形態1による画像転送装置の制御部における判断方法を示す説明図である。
【符号の説明】
【0040】
10 画像転送装置、11 第1の画像リード部、11a,12a,13a バッファ、12 第2の画像リード部、13 第3の画像リード部、14 演算部、15 制御部、16 バスIF部、20 バス、30 CPU、40 メモリIF、50 メモリ、100A,100B,100C フレームバッファ。

【特許請求の範囲】
【請求項1】
同一メモリ内の画像データのBITBLT処理を行う画像転送装置において、
処理対象となる画像データ毎に設けられ、参照する画像データの前記メモリ内のアドレスを計算し、当該画像データを読み出す複数の画像リード部と、
前記複数の画像リード部で読み出された画像データに演算処理を施して前記メモリへ書き戻すための演算部と、
前記複数の画像リード部および前記演算部からの読み出し要求または書き込み要求を制御する制御部とを備えた画像転送装置。
【請求項2】
複数の画像リード部は、読み出した画像データを一時保存するバッファをそれぞれ備え、参照する画像データをバッファが満杯になるまでリードを行い、その後バッファが空になるまで出力するように動作することを特徴とする請求項1記載の画像転送装置。
【請求項3】
制御部は、複数の画像リード部のデータ読み出しまたは演算部からのデータ書き込みがメモリに対して連続して行われるように制御することを特徴とする請求項1または請求項2記載の画像転送装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公開番号】特開2009−70162(P2009−70162A)
【公開日】平成21年4月2日(2009.4.2)
【国際特許分類】
【出願番号】特願2007−238181(P2007−238181)
【出願日】平成19年9月13日(2007.9.13)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】