以下、本発明の実施形態について、図面を参照して説明する。図1は、本実施形態におけるデータ処理装置の概略構成を示したブロック図である。図1に示したデータ処理装置100は、DMAインタフェース(I/F)10と、書き込み制御部20と、バッファ30と、状態管理部40と、有効データ判定部50と、読み出し制御部60と、を備えている。データ処理装置100は、従来のデータ処理装置と同様に、例えば、図10(a)に示したように1フレームの静止画像を複数のブロックに分割し、分割したブロック毎にブロック処理(画像処理)を行う。
より具体的には、共通のデータバスに接続されたDRAMなどの外部メモリ上に格納されているブロック処理に必要な画像データ(ブロック処理用データ)を、DMAインタフェース10がDMA転送(バースト転送)によって取得する。そして、DMAインタフェース10が取得したブロック処理用データを、書き込み制御部20が、状態管理部40による制御に応じてバッファ30に書き込む(格納する)。また、読み出し制御部60は、状態管理部40による制御に応じて、バッファ30に格納されたブロック処理用データを読み出し、ブロック処理を行った後に、例えば、パイプラインの次の画像処理部に出力する。
データ処理装置100と従来のデータ処理装置とを比較すると、データ処理装置100では、ブロック処理用データを記憶するバッファが1つのバッファ30に統合され、状態管理部40および有効データ判定部50が追加されている。なお、図1に示したデータ処理装置100においては、追加された状態管理部40との関係を明確にするため、従来のデータ処理装置に備えていたDMAインタフェースに相当する構成要素を、DMAインタフェース10および書き込み制御部20に分割して示している。そして、書き込み制御部20および従来のデータ処理装置に備えたバッファ読み出し回路に相当する読み出し制御部60は、状態管理部40から入力された情報に応じてバッファ30へのブロック処理用データの書き込み、およびバッファ30からのブロック処理用データの読み出しを制御する。
バッファ30は、例えば、SRAM(Static Random Access Memory)などで構成された、ブロック処理用データを一時記憶する記憶部である。バッファ30は、DMAインタフェース10が外部メモリから1回のDMA転送によって取得するブロック処理用データの量の2倍の大きさの記憶容量(バッファサイズ)となっている。すなわち、バッファ30は、構成は異なるが、図13に示した従来のデータ処理装置に搭載されたバッファと同様に、2回分のDMA転送によって取得するブロック処理用データを記憶することができる記憶容量を持ったバッファである。また、バッファ30は、予め定められた記憶容量毎に複数の領域に分割されており、分割された記憶領域(以下、「分割バッファ」という)毎に、ブロック処理用データの書き込みおよび読み出しが制御される。また、バッファ30は、複数の分割バッファを仮想的にリング状につなげたリングバッファの形式であるものとして、ブロック処理用データの書き込みおよび読み出しが制御される。
DMAインタフェース10は、外部メモリに記憶されているブロック処理用データを、DMA転送(バースト転送)によって共通のデータバスを介して取得する。そして、DMAインタフェース10は、取得したブロック処理用データを書き込み制御部20に出力する。
書き込み制御部20は、DMAインタフェース10から入力されたブロック処理用データを、バッファ30に書き込む(格納する)。より具体的には、書き込み制御部20がバッファ30にブロック処理用データを格納する際、まず、状態管理部40から入力される空きバッファ情報に基づいて、ブロック処理用データを書き込むバッファ30内の分割バッファを決定する。そして、決定した分割バッファに基づいて生成した書き込み信号によって、バッファ30内の対応する分割バッファにブロック処理用データを書き込む。また、書き込み制御部20は、ブロック処理用データの分割バッファへの書き込みが完了したとき、ブロック処理用データの格納が完了したことを表す通知と、ブロック処理用データを格納した分割バッファの情報とを、書き込み完了情報として状態管理部40に出力する。なお、状態管理部40から入力されるバッファ30の空きバッファ情報に基づいた書き込み制御部20によるブロック処理用データのバッファ30への書き込み(格納)動作に関する詳細な説明は、後述する。
読み出し制御部60は、バッファ30に格納されているブロック処理用データを読み出し、読み出したブロック処理用データに対して、分割したブロック毎のブロック処理を行う。より具体的には、読み出し制御部60がバッファ30からブロック処理用データを読み出す際、まず、状態管理部40から入力されるブロック処理に使用するための有効データがバッファに格納されている情報(以下、「有効バッファ情報」という)に基づいて、ブロック処理用データを読み出すバッファ30内の分割バッファを決定する。そして、決定した分割バッファに基づいて生成した読み出し制御信号によって、バッファ30内の対応する分割バッファからブロック処理用データを読み出す。そして、読み出し制御部60は、ブロック処理を行った後のブロック処理用データを、例えば、パイプラインの次の画像処理部など、データ処理装置100の外部に出力する。また、読み出し制御部60は、分割バッファからのブロック処理用データの読み出しが完了したとき、ブロック処理用データの読み出しが完了したことを表す通知と、ブロック処理用データを読み出した分割バッファの情報とを、読み出し完了情報として状態管理部40に出力する。なお、状態管理部40から入力されるバッファ30の有効バッファ情報に基づいた読み出し制御部60によるバッファ30からのブロック処理用データの読み出し動作に関する詳細な説明は、後述する。
有効データ判定部50は、DMAインタフェース10がDMA転送(バースト転送)によって取得したブロック処理用データが、ブロック処理に使用する有効なデータであるか、ブロック処理に使用しない無効なデータであるかを判定する。そして、ブロック処理に使用する有効なデータの領域を表す情報を、有効データ領域情報として状態管理部40に出力する。
状態管理部40は、書き込み制御部20から入力される書き込み完了情報、および読み出し制御部60から入力される読み出し完了情報に基づいて、バッファ30内のそれぞれの分割バッファにブロック処理用データが格納されているか否かの状態を管理する。より具体的には、書き込み制御部20によってブロック処理用データが格納された分割バッファを使用中(ブロック処理用データが格納されている)の状態とし、読み出し制御部60によってブロック処理用データが読み出された分割バッファを空き(ブロック処理用データが格納されていない)の状態とする。また、状態管理部40は、有効データ判定部50から入力される有効データ領域情報に基づいて、使用中の分割バッファの内、ブロック処理に使用しない無効なブロック処理用データが格納されている分割バッファを空きの状態に変更する。
状態管理部40は、空きの状態となっている分割バッファの情報を、空きバッファ情報として書き込み制御部20に出力する。この空きバッファ情報は、書き込み制御部20がブロック処理用データをバッファ30に書き込む際に、ブロック処理用データを書き込もうとしている分割バッファが空きの状態であるか否かの判断に用いられる。そして、書き込み制御部20は、ブロック処理用データを書き込もうとしている分割バッファが空きの状態である場合に、当該分割バッファがブロック処理用データを格納することができる分割バッファであると判断し、ブロック処理用データを書き込む分割バッファに決定する。
また、状態管理部40は、有効データ判定部50から入力される有効データ領域情報に基づいて、DMAインタフェース10によってDMA転送(バースト転送)されてくるブロック処理用データの内、バッファ30に格納すべき有効なブロック処理用データを判断するための有効データ情報を、空きバッファ情報に付加して書き込み制御部20に出力する。この有効データ情報は、DMAインタフェース10がバースト転送によって取得したブロック処理用データが、現在のブロック処理に使用する有効なデータであるか、ブロック処理に使用しない無効なデータであるかを、ブロック処理用データ毎に表した情報である。書き込み制御部20は、DMAインタフェース10から入力されたブロック処理用データの内、現在のブロック処理に使用する有効なデータを、空きの状態である分割バッファに格納する。
また、状態管理部40は、使用中の状態となっている分割バッファの情報を、有効バッファ情報として読み出し制御部60に出力する。この有効バッファ情報は、読み出し制御部60がバッファ30からブロック処理用データを読み出す際に、ブロック処理用データを読み出そうとしている分割バッファに有効なブロック処理用データが格納されているか否かの判断に用いられる。そして、読み出し制御部60は、ブロック処理用データを読み出そうとしている分割バッファに有効なブロック処理用データが格納されている場合に、当該分割バッファからブロック処理用データを読み出すことができる分割バッファであると判断し、ブロック処理用データを読み出す分割バッファに決定する。
ここで、本実施形態のデータ処理装置100におけるブロック処理の流れについて説明する。図2は、本実施形態のデータ処理装置100におけるブロック処理の流れを説明する図である。図2には、データ処理装置100が外部メモリ200からデータを取得してブロック処理したデータを出力するまでの処理の流れと、各段階で読み出しまたは書き込みされるデータの流れとを模式的に示している。
外部メモリ200には、横方向にデータの流れが連続したブロック処理用データが格納されている。DMAインタフェース10は、1回のバースト転送において、1バースト幅分のブロック処理用データを、外部メモリ200から取得する。また、DMAインタフェース10は、外部メモリ200から取得するブロック処理用データのライン数と同じ回数のバースト転送を行ってDMA転送を終了する。従って、DMAインタフェース10は、1回のDMA転送において、1バースト幅×ライン数分のブロック処理用データを外部メモリ200から取得する。なお、DMAインタフェース10が1回のバースト転送で取得する1バースト幅が、バースト境界の境界線となる。
書き込み制御部20は、DMAインタフェース10が取得したブロック処理用データを、外部メモリ200に格納されている形式と同様の形式で、バッファ30に格納する。その後、読み出し制御部60は、バッファ30に格納されているブロック処理用データを縦横変換、すなわち、縦方向にデータの流れが連続するように変換して読み出し、読み出したブロック処理用データに対してブロック処理を行って出力する。なお、ブロック処理用データの流れによっては、読み出し制御部60によるブロック処理用データの縦横変換は、必ずしも必要な処理ではない。
次に、本実施形態のデータ処理装置100に備えたバッファ30の構成について説明する。図3は、本実施形態のデータ処理装置100に備えたバッファ30の構成例を説明する図である。図3に示したバッファ30の構成例では、バッファ30の全ての記憶容量を、記憶領域1〜8の8つの分割バッファに分割した場合の一例を示している。バッファ30は、それぞれの分割バッファの単位で、書き込み制御部20によるブロック処理用データの書き込み、読み出し制御部60によるブロック処理用データの読み出し、および状態管理部40による状態の管理が行われる。なお、以下の説明においては、8つに分割したそれぞれの分割バッファ(記憶領域)を区別するため、それぞれの分割バッファに符号を付与し、分割バッファ1〜分割バッファ8とする。分割バッファ1〜分割バッファ8の記憶容量の総量は、図13に示した従来の構成のバッファAとバッファBとを合わせた記憶容量と同じ容量である。
上記に述べたように、バッファ30の記憶容量は、DMAインタフェース10が外部メモリ200から1回のDMA転送によって取得するブロック処理用データの量の2倍のバッファサイズである。そして、分割バッファ1〜分割バッファ8が仮想的にリング状につなげたリングバッファの形式であるものとして、ブロック処理用データの書き込みおよび読み出しが制御される。従って、DMAインタフェース10の1回のDMA転送によって、4つの分割バッファに格納されるブロック処理用データが取得される。
書き込み制御部20は、図2に示したように、横方向にデータの流れが連続したブロック処理用データを、連続する4つの分割バッファに格納する。従って、書き込み制御部20は、最初のラインのバースト転送によって取得されたブロック処理用データを、例えば、分割バッファ1→分割バッファ2→分割バッファ3→分割バッファ4というように、順次4つの分割バッファの最初のラインに対応した記憶領域に格納する。続いて、次のラインのバースト転送によって取得されたブロック処理用データを、再び、分割バッファ1→分割バッファ2→分割バッファ3→分割バッファ4というように、順次4つの分割バッファの2番目のラインに対応した記憶領域に格納する。このように、書き込み制御部20は、DMAインタフェース10がDMA転送によって取得した1バースト幅×ライン数分のブロック処理用データを、4つの分割バッファに順次格納する。
また、読み出し制御部60は、図2に示したように、バッファ30に格納されているブロック処理用データを縦横変換して、縦方向にデータの流れが連続するように読み出す。従って、読み出し制御部60は、最初に分割バッファ1に格納された1番目の縦の1ラインのブロック処理用データを読み出し、続いて、分割バッファ1に格納された2番目の縦の1ラインのブロック処理用データを読み出す。そして、分割バッファ1に格納された最後の縦の1ラインのブロック処理用データを読み出して、分割バッファ1に格納されている全てのブロック処理用データの読み出しが完了した後、引き続き、分割バッファ2に格納された1番目の縦の1ラインのブロック処理用データを読み出す。このように、読み出し制御部60は、分割バッファ毎にブロック処理用データを読み出し、4つの分割バッファに格納されている全てのブロック処理用データの読み出しが完了したときに、ブロック処理用データの読み出しを終了する。
次に、本実施形態のデータ処理装置100に備えた状態管理部40および有効データ判定部50による、書き込み制御部20および読み出し制御部60への情報の出力について説明する。図4は、本実施形態のデータ処理装置100に備えたバッファ30にブロック処理用データを格納したときの一例を示した図である。図4に示したブロック処理用データの格納例は、例えば、図10(a)に示したように1フレームの静止画像を複数のブロックに分割したブロック毎にブロック処理(画像処理)を行う場合において、1つのブロックに対応したブロック処理用データの量が、3回のDMA転送分あり、ブロック処理するために必要なブロック処理用データが、DMAインタフェース10がバースト転送する際のバースト境界をまたいでいる場合を示している。
DMAインタフェース10によるDMA転送は、バースト幅の単位でのデータ転送であり、1つのバースト幅に含まれる有効なブロック処理用データのみがDMA転送されるわけではない。そのため、ブロック処理用データがバースト境界をまたいでいない場合には、3回のDMA転送によって1つのブロックに対応した全てのブロック処理用データを取得することができるが、図4に示したブロック処理用データの格納例のように、ブロック処理用データがバースト境界をまたいでいる場合には、4回のDMA転送で全てのブロック処理用データを取得することになる。このため、最初のDMA転送と最後のDMA転送のときに、無効なブロック処理用データが含まれている可能性がある。図4に示したブロック処理用データの格納例では、1回目のDMA転送(DMA転送A)と4回目のDMA転送(DMA転送D)とにおいて、1バースト幅に満たない端数のブロック処理用データが取得される。これは、DMA転送AとDMA転送Dとにおいて、ブロック処理に使用しない無効なブロック処理用データが、バッファ30に格納されることを表している。
そこで、有効データ判定部50は、DMAインタフェース10がブロック処理用データを取得するときに行われるDMA転送の回数に基づいて、現在行われているDMA転送によって、ブロック処理に使用しない無効なブロック処理用データがバッファ30に格納される可能性があるか否かを判定する。より具体的には、DMAインタフェース10が実行しているDMA転送の回数をカウントし、カウントしたDMA転送の回数と、予め設定された今回処理するブロックにおけるDMA転送の回数とを比較する。そして、カウントしたDMA転送の回数が、1回目(例えば、カウント値=0)の場合、および予め設定されたDMA転送の回数と同じ回数である場合(例えば、カウント値=設定された回数−1)に、今回カウントしたDMA転送において、無効なブロック処理用データがバッファ30に格納される可能性があると判定する。これにより、例えば、図4に示したように、4回のDMA転送によって全てのブロック処理用データを取得する場合には、DMA転送A(最初のDMA転送)とDMA転送D(最後のDMA転送)のときに、無効なブロック処理用データがバッファ30に格納される可能性があると判定される。
そして、有効データ判定部50は、無効なブロック処理用データがバッファ30に格納される可能性があると判定したDMA転送において、それぞれのバースト幅毎に、ブロック処理に使用する有効なブロック処理用データの領域(以下、「有効データ領域」という)を算出する。有効データ領域は、ブロック処理用データの画像サイズ、ブロック処理の基準座標(例えば、ブロックの左上端の座標)、ブロックのサイズ、ブロック処理用データの格納フォーマットなどの値に基づいて算出される。例えば、図4に示した1ブロック目のブロック処理では、1つ目のバースト幅および4つ目のバースト幅において、一部(端数)のブロック処理用データのみが有効なデータであり、2つ目および3つ目のバースト幅では、全てのブロック処理用データが有効なデータである。有効データ判定部50は、それぞれのバースト幅内の有効データ領域を算出する。そして、有効データ判定部50は、無効なブロック処理用データがバッファ30に格納されると判定したDMA転送において算出した有効データ領域を、有効データ領域情報として状態管理部40に出力する。
そして、状態管理部40は、有効データ判定部50から入力された有効データ領域情報に基づいて、DMAインタフェース10がDMA転送によって取得したブロック処理用データが、ブロック処理に使用する有効なデータであるか、ブロック処理に使用しない無効なデータであるかを判断するための情報を、有効データ情報として書き込み制御部20に出力する。
なお、状態管理部40が書き込み制御部20に出力する有効データ情報は、ブロック処理用データ毎に、当該ブロック処理用データが有効なデータであるか無効なデータであるかを表す情報であるが、書き込み制御部20による分割バッファへの格納は、分割バッファの単位である。従って、書き込み制御部20は、分割バッファの単位で、DMAインタフェース10から入力されたブロック処理用データを格納するか否かを決定するため、分割バッファに格納されるブロック処理用データが全て無効な場合、当該分割バッファにはブロック処理用データが格納されないように制御する。そのため、分割バッファ内には、無効なブロック処理用データが一部含まれていることもあるが、分割バッファに格納された全てのブロック処理用データが無効なブロック処理用データとなってしまうことはない。
例えば、図4に示したブロック処理用データの格納例では、1ブロック目のDMA転送Aでは、1つ目の分割バッファの一部に無効なブロック処理用データが格納されている。また、1ブロック目のDMA転送Dでは、1つ目の分割バッファの一部に有効なブロック処理用データが格納されているが、2つ目〜4つ目までの分割バッファに無効なブロック処理用データが格納されることはなくなる。また、例えば、図4に示した2ブロック目のDMA転送Dでは、4つ目の分割バッファの一部に無効なブロック処理用データが格納されている。また、2ブロック目のDMA転送Aでは、4つ目の分割バッファの一部に有効なブロック処理用データが格納されているが、1つ目〜3つ目までの分割バッファに無効なブロック処理用データが格納されることはなくなる。
このように、分割バッファの単位でブロック処理用データの格納を管理することにより、図13に示した従来のデータ処理装置のように、バッファに格納されたブロック処理用データの多くが無効なブロック処理用データとなってしまうことを回避することができる。
なお、バッファ30の記憶領域を分割する分割バッファの単位を、図2に示した縦の1ラインの単位とした構成とすることもできる。この場合には、書き込み制御部20が状態管理部40から入力された空きバッファ情報に含まれる有効データ情報に基づいて、ブロック処理用データを分割バッファに格納することにより、有効なブロック処理用データのみを分割バッファに格納することができる。
上記に述べたように、本実施形態のデータ処理装置100では、外部メモリ200からバースト転送するブロック処理用データのバースト境界が、ブロック処理するブロックの境界と一致していない場合においても、DMAインタフェース10が取得した多くの無効なブロック処理用データをバッファ30に格納することなく、バッファ30の記憶領域を効率的に使用することができる。これにより、本実施形態のデータ処理装置100では、安易にバッファサイズを増大させることなく、データの処理を行うことができる。
ここで、本実施形態のデータ処理装置100に備えたバッファ30の管理方法について説明する。まず、バッファ30にブロック処理用データを格納する際のバッファ30の管理方法について説明する。図5は、本実施形態のデータ処理装置100に備えたバッファ30にブロック処理用データを格納する動作の手順を示したフローチャートである。
データ処理装置100におけるブロック処理用データの取得の動作が開始されると、まず、ステップS100において、状態管理部40は、バッファ30内に空きの状態の分割バッファがあるか否かを確認する。バッファ30内に空きの状態の分割バッファがない場合には、ステップS100を繰り返す。また、バッファ30内に空きの状態の分割バッファがある場合には、ステップS110において、有効データ判定部50は、DMAインタフェース10が取得したブロック処理用データがブロックの左端のデータであるか否かを判定する。
ステップS110における有効データ判定部50の判定の結果、DMAインタフェース10が取得するブロック処理用データがブロックの左端のデータである場合、有効データ判定部50は、有効データ領域を算出し、有効データ領域情報を状態管理部40に出力する。そして、状態管理部40は、有効データ判定部50から入力された有効データ領域情報に基づいて、DMAインタフェース10が取得したブロック処理用データが、有効なデータであるか無効なデータであるかを判断するための有効データ情報含む空きバッファ情報を書き込み制御部20に出力する。
続いて、ステップS200において、書き込み制御部20は、状態管理部40から入力された空きバッファ情報に含まれる有効データ情報に基づいて、DMAインタフェース10から入力されたブロック処理用データ内に、現在のブロック処理に使用しない無効なブロック処理用データがあるか否かを判定する。判定の結果、DMAインタフェース10から入力されたブロック処理用データ内に無効なブロック処理用データがある場合には、ステップS211において、書き込み制御部20は、状態管理部40から入力された空きバッファ情報に基づいて、有効なブロック処理用データを書き込むバッファ30内の分割バッファを決定する。そして、有効なブロック処理用データを、対応する空きの状態の分割バッファに格納する。また、書き込み制御部20は、有効なブロック処理用データの分割バッファへの書き込みが完了すると、書き込み完了情報を状態管理部40に出力する。
また、ステップS200における判定の結果、DMAインタフェース10から入力されたブロック処理用データ内に無効なブロック処理用データがない場合には、ステップS212において、書き込み制御部20は、状態管理部40から入力された空きバッファ情報に基づいて、入力された全てのブロック処理用データを書き込むバッファ30内の分割バッファを決定する。そして、全てのブロック処理用データを、空きの状態の分割バッファに格納する。また、書き込み制御部20は、全てのブロック処理用データの分割バッファへの書き込みが完了すると、書き込み完了情報を状態管理部40に出力する。
続いて、ステップS230において、状態管理部40は、書き込み制御部20から入力された書き込み完了情報に基づいて、バッファ30内の分割バッファの状態、すなわち、ブロック処理用データが格納された分割バッファの状態を更新する。そして、ステップS100に戻って、DMAインタフェース10が取得したブロック処理用データを格納する動作を継続する。
また、ステップS110における有効データ判定部50の判定の結果、DMAインタフェース10が取得するブロック処理用データがブロックの左端のデータでない場合、ステップS300において、書き込み制御部20は、状態管理部40から入力された空きバッファ情報に基づいて、入力された全てのブロック処理用データを書き込むバッファ30内の分割バッファを決定する。そして、全てのブロック処理用データを、空きの状態の分割バッファに格納する。また、書き込み制御部20は、全てのブロック処理用データの分割バッファへの書き込みが完了すると、書き込み完了情報を状態管理部40に出力する。
続いて、ステップS310において、有効データ判定部50は、DMAインタフェース10が取得したブロック処理用データがブロックの右端のデータであるか否かを判定する。DMAインタフェース10が取得するブロック処理用データがブロックの右端のデータでない場合には、ステップS340に進む。また、DMAインタフェース10が取得するブロック処理用データがブロックの右端のデータである場合には、有効データ判定部50は、有効データ領域を算出し、有効データ領域情報を状態管理部40に出力する。
続いて、ステップS320において、状態管理部40は、有効データ判定部50から入力された有効データ領域情報に基づいて、バッファ30内のそれぞれの分割バッファに、現在のブロック処理に使用しない不要(無効)なブロック処理用データが格納されているか否かを判定する。バッファ30内に不要なブロック処理用データが格納されていない場合には、ステップS340に進む。また、バッファ30内に不要なブロック処理用データが格納されている場合には、ステップS330において、状態管理部40は、不要なブロック処理用データが格納されている分割バッファを開放(空きの状態に変更)する。
続いて、ステップS340において、状態管理部40は、書き込み制御部20から入力された書き込み完了情報に基づいて、バッファ30内の分割バッファの状態、すなわち、ブロック処理用データが格納された分割バッファの状態を更新する。
続いて、ステップS350において、有効データ判定部50は、1フレーム分のブロック処理用データの取得が終了したか否かを確認する。1フレーム分のブロック処理用データの取得が終了していない場合には、ステップS100に戻って、DMAインタフェース10が取得したブロック処理用データを格納する動作を継続する。1フレーム分のブロック処理用データの取得が終了した場合には、バッファ30にブロック処理用データを格納する動作を終了する。
なお、図5に示したブロック処理用データをバッファ30に格納する動作の手順では、DMAインタフェース10が取得したブロック処理用データがブロックの右端のデータ(ステップ310がYES)であり、分割バッファに不要なブロック処理用データが格納されている(ステップ320がYES)場合に、ステップS330において、不要なブロック処理用データが格納されている分割バッファを開放する場合について説明した。しかし、DMAインタフェース10が取得したブロック処理用データがブロックの右端のデータである場合のバッファ30への格納動作は、一旦バッファ30にブロック処理用データを格納した後に、分割バッファを開放する方法に限定されるものではない。例えば、ステップS200と同様に、書き込み制御部20が、DMAインタフェース10から入力されたブロック処理用データ内に、現在のブロック処理に使用しない無効なブロック処理用データがあるか否かを判定する。そして、その判定の結果に基づいて、ステップS211と同様に、書き込み制御部20が、有効なブロック処理用データを書き込むバッファ30内の分割バッファを決定し、有効なブロック処理用データを、対応する空きの状態の分割バッファに格納する動作にすることもできる。
次に、バッファ30に格納されたブロック処理用データを読み出す際のバッファ30の管理方法について説明する。図6は、本実施形態のデータ処理装置100に備えたバッファ30に格納されたブロック処理用データを読み出す動作の手順を示したフローチャートである。
データ処理装置100におけるブロック処理の動作が開始されると、まず、ステップS400において、状態管理部40は、バッファ30内の分割バッファにブロック処理用データが格納されているか否かを確認する。バッファ30内の分割バッファにブロック処理用データが格納されてない場合には、ステップS400を繰り返す。また、バッファ30内の分割バッファにブロック処理用データが格納されている場合には、ステップS410において、読み出し制御部60は、縦の1ラインのブロック処理用データを読み出し、読み出したブロック処理用データに対してブロック処理を行った後、データ処理装置100の外部に出力する。また、読み出し制御部60は、ブロック処理用データを読み出しが完了すると、読み出し完了情報を状態管理部40に出力する。
続いて、ステップS420において、状態管理部40は、読み出し制御部60から入力された読み出し完了情報に基づいて、バッファ30内に空きの状態の分割バッファができたか否か、すなわち、分割バッファに格納されているブロック処理用データが全てブロック処理に使用されたか否かを確認する。バッファ30内に空きの状態の分割バッファができていない場合には、ステップS410に戻って、読み出し制御部60によるブロック処理用データを読み出しおよびブロック処理を継続する。また、バッファ30内に空きの状態の分割バッファができた場合には、ステップS430において、状態管理部40は、読み出し制御部60から入力された読み出し完了情報に基づいて、バッファ30内の分割バッファの状態、すなわち、ブロック処理用データが読み出された分割バッファの状態を更新する。
続いて、ステップS440において、状態管理部40は、1フレーム分のブロック処理用データに対するブロック処理が完了したか否かを確認する。1フレーム分のブロック処理用データに対するブロック処理が完了していない場合には、ステップS400に戻って、バッファ30に格納されているブロック処理用データに対するブロック処理を継続する。1フレーム分のブロック処理用データに対するブロック処理が完了した場合には、バッファ30に格納されているブロック処理用データに対するブロック処理の動作を終了する。
次に、本実施形態のデータ処理装置100に備えたバッファ30の動作について説明する。図7および図8は、本実施形態のデータ処理装置100に備えたバッファ30の動作の一例を説明する図である。なお、図7および図8に示したバッファ30の動作の説明においては、図4に示したブロック処理用データの格納例を参照して説明する。また、データ処理装置100に備えたバッファ30の構成は、図3に示したように、バッファ30の全ての記憶容量を8つの分割バッファに分割されているものとする。そして、DMAインタフェース10は、図4に示したように、1バースト幅が4つの分割バッファの幅であり、有効なブロック処理用データが、DMAインタフェース10がバースト転送する際のバースト境界をまたいでいるものとする。すなわち、図7および図8に示したバッファ30の動作は、DMAインタフェース10が、1回のバースト転送で、横方向にデータの流れが連続した4つの分割バッファ分のブロック処理用データを外部メモリ200から取得し、書き込み制御部20は、連続する4つの分割バッファにDMAインタフェース10から入力されたブロック処理用データを格納する場合の動作例である。
なお、図7および図8に示したバッファ30の動作の説明では、図4に示した1ブロック目のDMA転送Dおよび2ブロック目のDMA転送Aにおいて、有効なブロック処理用データが1つ、すなわち、縦の1ラインのみ有効であり、1ブロック目のDMA転送Aおよび2ブロック目のDMA転送Dにおいて、無効なブロック処理用データが1つ、すなわち、縦の1ラインのみ無効であるものとして説明する。
まず、データ処理装置100の動作が開始され、DMAインタフェース10が1ブロック目のDMA転送Aによって、ブロック処理用データを取得する。最初は、状態管理部40が把握している空きバッファ情報は、図7(a)に示したように、全ての分割バッファ(分割バッファ1〜分割バッファ8)が空きの状態である。
書き込み制御部20は、状態管理部40から入力される空きバッファ情報に基づいて、1ブロック目のDMA転送Aで取得したブロック処理用データを格納する分割バッファを、分割バッファ1〜分割バッファ4に決定する。そして、書き込み制御部20は、図7(b)に示したように、DMAインタフェース10のDMA転送Aによって取得したブロック処理用データを、分割バッファ1→分割バッファ2→分割バッファ3→分割バッファ4というように、順次4つの分割バッファに格納する(図5のステップS110〜ステップS212参照)。
なお、最初に取得したブロックの左端のブロック処理用データには、現在(1ブロック目)のブロック処理に使用しない無効なブロック処理用データが含まれている可能性がある。書き込み制御部20は、状態管理部40から入力された空きバッファ情報に含まれる有効データ情報に基づいて、DMAインタフェース10から入力された1ブロック目のブロック処理用データに含まれる有効なブロック処理用データを書き込むバッファ30内の分割バッファを決定する。ここでは、1ブロック目のDMA転送Aにおいて無効なブロック処理用データが1つであるため、1ブロック目のDMA転送Aで取得した全てのブロック処理用データが、分割バッファ1〜分割バッファ4に格納され、分割バッファ1に格納されているブロック処理用データの内、最初の縦の1ラインのみが無効なブロック処理用データである。
ブロック処理用データの分割バッファ1〜4への書き込みが完了したとき、書き込み制御部20は、書き込み完了情報を状態管理部40に出力する。これにより、状態管理部40は、図7(c)に示したように、分割バッファ1〜4の状態を使用中の状態、すなわち、分割バッファへの他のデータ書き込みが不可の状態にする。
読み出し制御部60は、分割バッファ1〜分割バッファ4にブロック処理用データが格納された後、状態管理部40から入力される有効バッファ情報に基づいて、ブロック処理用データを読み出す分割バッファを、分割バッファ1〜分割バッファ4に決定する。そして、図7(d)に示したように、分割バッファ1から順に、格納されているブロック処理用データを読み出し、読み出したブロック処理用データに対してブロック処理を行って出力する(図6のステップS400〜ステップS410参照)。なお、分割バッファ1に格納されている最初の縦の1ラインは無効なブロック処理用データであるため、読み出しおよびブロック処理を行わず、分割バッファ1に格納されている縦の2ライン目から、ブロック処理用データの読み出しおよびブロック処理を行う。
また、状態管理部40が把握している空きバッファ情報は、図7(c)に示したように、分割バッファ5〜分割バッファ8が空きの状態である。書き込み制御部20は、状態管理部40から入力される空きバッファ情報に基づいて、1ブロック目のDMA転送Bで取得したブロック処理用データを格納する分割バッファを、分割バッファ5〜分割バッファ8に決定する。そして、書き込み制御部20は、図7(d)に示したように、DMAインタフェース10のDMA転送Bによって取得したブロック処理用データを、分割バッファ5→分割バッファ6→分割バッファ7→分割バッファ8というように、順次4つの分割バッファに格納する。
なお、DMA転送Bによって取得したブロック処理用データは、ブロックの左端でも右端でもない。すなわち、DMA転送Bによって取得したブロック処理用データには、現在(1ブロック目)のブロック処理に使用しない無効なブロック処理用データが含まれている可能性はない。従って、書き込み制御部20は、DMA転送Bによって取得した全てのブロック処理用データを分割バッファ5〜分割バッファ8に格納する(図5のステップS110、およびステップS300〜ステップS340参照)。
ブロック処理用データの分割バッファ5〜8への書き込みが完了したとき、書き込み制御部20は、書き込み完了情報を状態管理部40に出力する。これにより、状態管理部40は、図7(e)に示したように、分割バッファ5〜8の状態を使用中の状態にする。状態管理部40が把握している空きバッファ情報は、図7(e)に示したように、全ての分割バッファ1〜分割バッファ8が使用中の状態である。これにより、DMAインタフェース10によるDMA転送Cは、待機の状態になる(図5のステップS100参照)。
読み出し制御部60は、1つの分割バッファの読み出しおよびブロック処理が完了する毎に、読み出し完了情報を状態管理部40に出力する(図6のステップS410〜ステップS430参照)。従って、読み出し制御部60は、分割バッファ1に格納されているブロック処理用データの読み出しおよびブロック処理が完了したとき、読み出し完了情報を状態管理部40に出力する。そして、読み出し制御部60は、図7(f)に示したように、状態管理部40から入力される有効バッファ情報に基づいて、引き続き、分割バッファ2に格納されているブロック処理用データの読み出しおよびブロック処理を継続する。
また、状態管理部40は、読み出し制御部60から入力された読み出し完了情報に基づいて、図7(g)に示したように、分割バッファ1の状態を空きの状態、すなわち、分割バッファへの他のデータ書き込みが可能の状態にする。
以降、読み出し制御部60は、分割バッファ2〜分割バッファ4に格納されているブロック処理用データを順次読み出し、ブロック処理を行う。また、読み出し制御部60は、1つの分割バッファの読み出しおよびブロック処理が完了する毎に、読み出し完了情報を状態管理部40に出力する(図7(h)参照)。そして、読み出し制御部60は、図7(j)に示したように、状態管理部40から入力される有効バッファ情報に基づいて、引き続き、分割バッファ5に格納されているブロック処理用データの読み出しおよびブロック処理を継続する。
また、状態管理部40は、読み出し制御部60から分割バッファ2〜分割バッファ4に格納されているブロック処理用データの読み出しおよびブロック処理が完了したことを表す読み出し完了情報が入力される毎に、対応する分割バッファの状態を順次空きの状態にする。そして、読み出し制御部60から分割バッファ4に対する読み出し完了情報が入力されたとき、状態管理部40によって、分割バッファ4の状態が空きの状態にされる。これにより、状態管理部40が把握している空きバッファ情報は、図7(i)に示したように、分割バッファ1〜分割バッファ4が空きの状態になる。すなわち、DMA転送Cで取得したブロック処理用データを格納するための記憶容量が空いた状態になる。これにより、DMAインタフェース10は、待機していたDMA転送Cを再開する。
書き込み制御部20は、状態管理部40から入力される空きバッファ情報に基づいて、1ブロック目のDMA転送Cで取得したブロック処理用データを格納する分割バッファを、分割バッファ1〜分割バッファ4に決定する。そして、書き込み制御部20は、図7(j)に示したように、DMAインタフェース10のDMA転送Cによって取得したブロック処理用データを、分割バッファ1→分割バッファ2→分割バッファ3→分割バッファ4というように、順次4つの分割バッファに格納する。
なお、DMA転送Cによって取得したブロック処理用データも、ブロックの左端でも右端でもないため、現在(1ブロック目)のブロック処理に使用しない無効なブロック処理用データが含まれている可能性はない。従って、書き込み制御部20は、DMA転送Cによって取得した全てのブロック処理用データを分割バッファ1〜分割バッファ4に格納する。
ブロック処理用データの分割バッファ1〜4への書き込みが完了したとき、書き込み制御部20は、書き込み完了情報を状態管理部40に出力する。これにより、状態管理部40は、図7(k)に示したように、分割バッファ1〜4の状態を使用中の状態にする。これにより、バッファ30内の全ての分割バッファ1〜分割バッファ8が使用中の状態となるため、DMAインタフェース10によるDMA転送Dは、待機の状態になる。
また、読み出し制御部60は、状態管理部40から入力される有効バッファ情報に基づいて、分割バッファ5〜分割バッファ8に格納されているブロック処理用データの読み出しおよびブロック処理を継続している。そして、読み出し制御部60は、1つの分割バッファの読み出しおよびブロック処理が完了する毎に、読み出し完了情報を状態管理部40に出力する(図7(l)参照)。
状態管理部40は、分割バッファ8に格納されているブロック処理用データの読み出しおよびブロック処理が完了したことを表す読み出し完了情報が、読み出し制御部60から入力されると、図8(m)に示したように、分割バッファ8の状態を空きの状態にする。これにより、状態管理部40が把握している空きバッファ情報は、分割バッファ5〜分割バッファ8が空きの状態になる(図8(m)参照)。
これにより、DMA転送Dで取得したブロック処理用データを格納するための記憶容量が空いた状態になるため、DMAインタフェース10は、待機していたDMA転送Dを再開する。書き込み制御部20は、状態管理部40から入力される空きバッファ情報に基づいて、1ブロック目のDMA転送Dで取得したブロック処理用データを格納する分割バッファを、分割バッファ5〜分割バッファ8に決定する。そして、書き込み制御部20は、図8(n)に示したように、DMAインタフェース10のDMA転送Dによって取得したブロック処理用データを、分割バッファ5→分割バッファ6→分割バッファ7→分割バッファ8というように、順次4つの分割バッファに格納する。
ブロック処理用データの分割バッファ5〜8への書き込みが完了したとき、書き込み制御部20は、書き込み完了情報を状態管理部40に出力する。これにより、状態管理部40は、図8(o)に示したように、分割バッファ5〜8の状態を使用中の状態にする。また、読み出し制御部60は、状態管理部40から入力される有効バッファ情報に基づいて、分割バッファ1に格納されているブロック処理用データの読み出しおよびブロック処理を引き続き継続している(図8(p)参照)。
なお、DMA転送Dによって取得したブロック処理用データは、ブロックの右端のブロック処理用データである。すなわち、DMA転送Dによって取得したブロックの右端のブロック処理用データには、現在(1ブロック目)のブロック処理に使用しない不要なブロック処理用データが含まれている可能性がある。ここでは、1ブロック目のDMA転送Dにおいて有効なブロック処理用データが1つであるため、分割バッファ5の最初の縦の1ラインのみが有効なブロック処理用データである。このため、状態管理部40は、図8(q)に示したように、有効データ判定部50から入力された有効データ領域情報に基づいて、不要なブロック処理用データが格納されている分割バッファ6〜分割バッファ8を開放、すなわち、分割バッファへの他のデータ書き込みが可能な空きの状態に変更する(図5のステップS310〜ステップS330参照)。
書き込み制御部20によるブロック処理用データの分割バッファ5〜8への書き込みが完了、または状態管理部40による分割バッファ6〜分割バッファ8の開放がされたとき、データ処理装置100のDMAインタフェース10およびバッファ書き込み回路20がリセットされ、次に処理する2ブロック目のブロック処理に必要なブロック処理用データを外部メモリ200からDMA転送するための準備が開始される。しかし、状態管理部40が把握している空きバッファ情報は、図8(q)に示したように、空きの状態になっている分割バッファが、分割バッファ6〜分割バッファ8のみである。従って、DMAインタフェース10による2ブロック目のDMA転送Aで取得したブロック処理用データを格納するための記憶容量、すなわち、4つ分の分割バッファは空きの状態となっていない。このため、DMAインタフェース10による2ブロック目のDMA転送Aは、待機の状態になる。
読み出し制御部60は、分割バッファ1に格納されているブロック処理用データの読み出しおよびブロック処理が完了したとき、読み出し完了情報を状態管理部40に出力する。そして、読み出し制御部60は、図8(r)に示したように、状態管理部40から入力される有効バッファ情報に基づいて、引き続き、分割バッファ2に格納されているブロック処理用データの読み出しおよびブロック処理を継続する。
また、状態管理部40は、読み出し制御部60から入力された読み出し完了情報に基づいて、図8(s)に示したように、分割バッファ1の状態を空きの状態にする。これにより、状態管理部40が把握している空きバッファ情報は、分割バッファ1および分割バッファ6〜分割バッファ8が空きの状態になる。すなわち、2ブロック目のDMA転送Aで取得したブロック処理用データを格納するための4つ分の分割バッファが空いた状態になる。そして、DMAインタフェース10は、待機していた2ブロック目のDMA転送Aを再開する。
書き込み制御部20は、状態管理部40から入力される空きバッファ情報に基づいて、2ブロック目のDMA転送Aで取得したブロック処理用データを格納する分割バッファを、分割バッファ6〜分割バッファ8および分割バッファ1に決定する。そして、書き込み制御部20は、DMAインタフェース10の2ブロック目のDMA転送Aによって取得したブロック処理用データを、分割バッファ6→分割バッファ7→分割バッファ8→分割バッファ1というように、順次4つの分割バッファに格納するように準備する。
しかし、2ブロック目のDMA転送Aによって取得するブロック処理用データは、ブロックの左端のブロック処理用データであり、2ブロック目のブロック処理に使用しない無効なブロック処理用データが含まれている可能性がある。書き込み制御部20は、状態管理部40から入力された空きバッファ情報に含まれる有効データ情報に基づいて、DMAインタフェース10から入力された2ブロック目のブロック処理用データに含まれる有効なブロック処理用データを書き込むバッファ30内の分割バッファを決定する。ここでは、2ブロック目のDMA転送Aにおいて有効なブロック処理用データが1つであるため、分割バッファ6の最初の縦の1ラインのみが有効なブロック処理用データである。このため、書き込み制御部20は、図8(t)に示したように、分割バッファ6に対応するブロック処理用データのみが格納されるように制御する。このように制御することによって、分割バッファ6〜分割バッファ8および分割バッファ1が空いている状況で、今までと同じように図4に示した2ブロック目のDMA転送Aを行ってしまったことにより、有効なブロック処理用データが、分割バッファ1に格納されてしまうことを回避する。
ブロック処理用データの分割バッファ6への書き込みが完了したとき、書き込み制御部20は、書き込み完了情報を状態管理部40に出力する。これにより、状態管理部40は、図8(u)に示したように、分割バッファ6の状態を使用中の状態にする。ここで、状態管理部40が把握している空きバッファ情報では、図8(u)に示したように、空きの状態になっている分割バッファ(分割バッファ7、分割バッファ8,および分割バッファ1)があることを示している。しかし、DMAインタフェース10による2ブロック目のDMA転送Bで取得したブロック処理用データを格納する4つ分の分割バッファは空きの状態になっていないため、DMAインタフェース10による2ブロック目のDMA転送Bは、待機の状態になる。
また、読み出し制御部60は、状態管理部40から入力される有効バッファ情報に基づいて、分割バッファ2〜分割バッファ4に格納されているブロック処理用データの読み出しおよびブロック処理を継続している。従って、読み出し制御部60は、分割バッファ2の読み出しおよびブロック処理が完了したとき、読み出し完了情報を状態管理部40に出力する。そして、そして、読み出し制御部60は、図8(v)に示したように、状態管理部40から入力される有効バッファ情報に基づいて、引き続き、分割バッファ3に格納されているブロック処理用データの読み出しおよびブロック処理を継続する。
状態管理部40は、読み出し制御部60から分割バッファ2に対する読み出し完了情報が入力されたとき、図8(w)に示したように、分割バッファ2の状態を空きの状態にする。これにより、分割バッファ1、分割バッファ2、分割バッファ7および分割バッファ8、すなわち、2ブロック目のDMA転送Bで取得したブロック処理用データを格納するための4つ分の分割バッファが空いた状態になる。そして、DMAインタフェース10は、待機していた2ブロック目のDMA転送Bを再開する。
書き込み制御部20は、状態管理部40から入力される空きバッファ情報に基づいて、2ブロック目のDMA転送Bで取得したブロック処理用データを格納する分割バッファを、分割バッファ1、分割バッファ2、分割バッファ7および分割バッファ8に決定する。そして、書き込み制御部20は、図8(x)に示したように、DMAインタフェース10の2ブロック目のDMA転送Bによって取得したブロック処理用データを、分割バッファ7→分割バッファ8→分割バッファ1→分割バッファ2というように、順次4つの分割バッファに格納する。
なお、2ブロック目のDMA転送Bによって取得したブロック処理用データは、ブロックの左端でも右端でもないため、2ブロック目のブロック処理に使用しない無効なブロック処理用データが含まれている可能性はない。従って、書き込み制御部20は、2ブロック目のDMA転送Bによって取得した全てのブロック処理用データを分割バッファ1、分割バッファ2、分割バッファ7および分割バッファ8に格納する。
ブロック処理用データの分割バッファ1、分割バッファ2、分割バッファ7および分割バッファ8への書き込みが完了したとき、書き込み制御部20は、書き込み完了情報を状態管理部40に出力する。これにより、状態管理部40は、図8(y)に示したように、分割バッファ1、分割バッファ2、分割バッファ7および分割バッファ8の状態を使用中の状態にする。これにより、バッファ30内の全ての分割バッファ1〜分割バッファ8が使用中の状態となるため、DMAインタフェース10による2ブロック目のDMA転送Cは、待機の状態になる。
また、図8(z)に示したように、読み出し制御部60は、状態管理部40から入力される有効バッファ情報に基づいて、分割バッファ3〜分割バッファ4に格納されているブロック処理用データの読み出しおよびブロック処理を継続している。
以降、同様に、DMAインタフェース10によって取得したブロック処理用データを格納する4つ分の分割バッファが空きの状態となる毎に、書き込み制御部20は、取得したブロック処理用データを、空きの状態となっている分割バッファに順次格納する。なお、上記に述べたように、書き込み制御部20は、ブロック処理用データが、処理するブロックの左端または右端である場合には、バッファ30内の分割バッファの単位で、ブロック処理用データを格納する分割バッファを制御する。そして、読み出し制御部60は、分割バッファに格納されているブロック処理用データを読み出し、本実施形態のデータ処理装置100の後段でブロック処理を行う。
上記に述べたように、本実施形態のデータ処理装置100では、バッファ30の全ての記憶容量を、予め定められた記憶容量毎に複数の分割バッファに分割し、DMAインタフェース10の1回のDMA転送によって取得するブロック処理用データに対応した数の分割バッファの状態が空きの状態となる毎に、取得したブロック処理用データを順次格納する。これにより、外部メモリ200からバースト転送するブロック処理用データのバースト境界が、ブロック処理するブロックの境界と一致していない場合においても、バッファ30に格納されたブロック処理用データの多くが無効なブロック処理用データとなってしまうことを回避することができる。これにより、本実施形態のデータ処理装置100では、安易にバッファサイズを増大させることなく、データの処理を行うことができる。
次に、本実施形態のデータ処理装置100における処理タイミングについて説明する。図9は、本実施形態のデータ処理装置100におけるブロック毎の処理タイミングの一例を示したタイミングチャートである。データ処理装置100では、読み出し制御部60が、バッファ30内の各分割バッファに格納されたブロック処理用データを順次読み出して、ブロック処理を行う。ここでは、図3に示したように、バッファ30の全ての記憶容量を8つの分割バッファに分割し、DMAインタフェース10が、図4に示したブロック処理用データの格納例のように、バースト境界をまたいでいるブロック処理用データを取得する場合におけるデータ処理装置100の処理のタイミングについて説明する。なお、以下の説明においては、図7および図8に示した、ブロック処理用データが仮想的にリング状につなげられた8つの分割バッファに格納されるバッファ30の動作例を参照して説明する。
まず、タイミングt1において、DMAインタフェース10は、1ブロック目の1回目のDMA転送(DMA転送A)によって、4つの分割バッファ分のブロック処理用データを取得する。そして、書き込み制御部20は、1ブロック目のDMA転送Aによって取得したブロック処理用データを、分割バッファ1〜分割バッファ4に格納する(図7(b)および図7(c)参照)。
書き込み制御部20による分割バッファ1〜4へのブロック処理用データの書き込みが完了すると、引き続き、DMAインタフェース10は、タイミングt2において、1ブロック目の2回目のDMA転送(DMA転送B)によって、4つの分割バッファ分のブロック処理用データを取得する。そして、書き込み制御部20は、1ブロック目のDMA転送Bによって取得したブロック処理用データを、分割バッファ5〜分割バッファ8に格納する(図7(d)参照)。
また、読み出し制御部60は、分割バッファ1〜分割バッファ4にブロック処理用データが格納された後のタイミングt2から、分割バッファ1〜分割バッファ4に格納されているDMA転送Aによって取得したブロック処理用データを順次読み出し、読み出したブロック処理用データに対してブロック処理を行って出力する(図7(d)〜図7(h)参照)。
その後、読み出し制御部60によって、DMA転送Aによって取得したブロック処理用データに対するブロック処理が完了すると、DMAインタフェース10は、タイミングt3において、1ブロック目の3回目のDMA転送(DMA転送C)によって、4つの分割バッファ分のブロック処理用データを取得する。そして、書き込み制御部20は、1ブロック目のDMA転送Cによって取得したブロック処理用データを、分割バッファ1〜分割バッファ4に格納する(図7(i)および図7(j)参照)。
また、読み出し制御部60は、引き続き、タイミングt3から、分割バッファ5〜分割バッファ8に格納されているDMA転送Bによって取得したブロック処理用データを順次読み出し、読み出したブロック処理用データに対してブロック処理を行って出力する(図7(j)〜図7(l)参照)。
その後、読み出し制御部60によって、DMA転送Bによって取得したブロック処理用データに対するブロック処理が完了すると、DMAインタフェース10は、タイミングt4において、1ブロック目の4回目のDMA転送(DMA転送D)によって、4つの分割バッファ分のブロック処理用データを取得する。そして、書き込み制御部20は、1ブロック目のDMA転送Dによって取得したブロック処理用データを、分割バッファ5〜分割バッファ8に格納する(図8(m)および図8(n)参照)。
DMA転送Dによって取得したブロック処理用データには、1ブロック目のブロック処理に不要なデータが含まれているため、状態管理部40は、不要なブロック処理用データが格納されている分割バッファ6〜分割バッファ8を開放する(図8(o)〜図8(q)参照)。
また、読み出し制御部60は、引き続き、タイミングt4から、分割バッファ1〜分割バッファ4に格納されているDMA転送Cによって取得したブロック処理用データを順次読み出し、読み出したブロック処理用データに対してブロック処理を行って出力する(図8(n)〜図8(z)参照)。
書き込み制御部20によるブロック処理用データの分割バッファ5〜8への書き込みが完了、または状態管理部40による分割バッファ6〜分割バッファ8の開放がされたとき、データ処理装置100のDMAインタフェース10およびバッファ書き込み回路20がリセットされ、次に処理する2ブロック目のブロック処理に必要なブロック処理用データを外部メモリ200からDMA転送するための準備が開始される。
その後、読み出し制御部60によって、分割バッファ1に格納されているDMA転送Cによって取得したブロック処理用データに対するブロック処理が完了すると、DMAインタフェース10は、タイミングt5において、2ブロック目の1回目のDMA転送(DMA転送A)によって、4つの分割バッファ分のブロック処理用データを取得する。
2ブロック目のDMA転送Aによって取得したブロック処理用データには、2ブロック目のブロック処理に無効なデータが含まれているため、書き込み制御部20は、2ブロック目のブロック処理に有効なブロック処理用データのみを分割バッファ6に格納する(図8(t)参照)。
その後、読み出し制御部60によって、分割バッファ2に格納されているDMA転送Cによって取得したブロック処理用データに対するブロック処理が完了すると、DMAインタフェース10は、タイミングt6において、2ブロック目の2回目のDMA転送(DMA転送B)によって、4つの分割バッファ分のブロック処理用データを取得する。そして、書き込み制御部20は、2ブロック目のDMA転送Bによって取得したブロック処理用データを、分割バッファ7〜分割バッファ8、および分割バッファ1〜分割バッファ2に格納する(図8(x)参照)。
その後、読み出し制御部60によって、DMA転送Dによって取得したブロック処理用データに対するブロック処理が完了すると、読み出し制御部60は、引き続き、タイミングt7から、分割バッファ6に格納されている2ブロック目のDMA転送Aによって取得したブロック処理用データを読み出し、読み出したブロック処理用データに対してブロック処理を行って出力する。以降、読み出し制御部60は、2ブロック目のDMA転送によって取得したブロック処理用データが格納されている分割バッファを順次読み出し、読み出したブロック処理用データに対してブロック処理を行って出力する。
上記に述べたように、本実施形態のデータ処理装置100では、現在処理しているブロックの最後のブロック処理用データをバッファ30に格納した後、不要なブロック処理用データが格納されている分割バッファを開放する。そして、開放した分割バッファが、次のブロックを処理するためにブロック処理用データを格納する分割バッファとして使用できる状態になる。これにより、本実施形態のデータ処理装置100では、次のブロック処理に使用するブロック処理用データを、事前にバッファ30に格納しておくことができる。このことにより、現在処理しているブロックの処理が終了次第、次のブロックの処理を開始することができ、読み出し制御部60がブロック処理の開始を待機しているロス時間をなくすことができる。
また、本実施形態のデータ処理装置100では、次のブロックの処理に使用する最初のブロック処理用データの内、分割バッファに格納されるブロック処理用データが、全てブロック処理に無効なデータとなる場合には、分割バッファにブロック処理用データを格納しない。これにより、比較的早い時間に、次のブロックを処理するための2回目のブロック処理用データの取得を行うことができる。これにより、ブロック処理が比較的早い時間に終了した場合でも、次のブロック処理に使用するブロック処理用データを、事前にバッファ30に格納しておくことができる。このことにより、現在処理しているブロック処理用データに対するブロック処理が完了次第、次のブロック処理用データに対するブロック処理を開始することができ、読み出し制御部60がブロック処理の開始を待機しているロス時間をなくすことができる。
また、本実施形態のデータ処理装置100では、それぞれの分割バッファに対する制御は、排他的に行われる。すなわち、同じ分割バッファに対して、書き込み制御部20によるブロック処理用データの書き込み(格納)動作と、読み出し制御部60によるブロック処理用データの読み出し動作とが、同時に行われることはない。このため、それぞれの分割バッファを、シングルポートのSRAMで構成することができ、バッファ30の回路規模の増加を極力抑えることができる。
上記に述べたとおり、本発明を実施するための形態によれば、データ処理装置に備えるバッファの記憶容量を、予め定められた記憶容量毎に複数の領域に分割し、分割したバッファ領域の単位で、処理に必要なデータの転送を制御する。そして、処理に必要なデータを転送する際の転送の切れ目(転送単位)に満たない端数のデータを取得した場合に、分割したバッファ領域に格納された全てのデータが処理に不要なデータとなってしまうことを回避する。これにより、端数のデータを格納するために、安易にバッファサイズを増大させることなく、データ処理装置に備えたバッファを効率的に使用して、データの処理を行うことができる。このことにより、データ処理装置の回路規模の増大を抑えることができる。
また、本発明を実施するための形態によれば、バッファ領域内の全てのデータが処理に不要なデータであるバッファ領域を、次の処理に必要なデータを格納するバッファ領域として使用する。これにより、処理に必要なデータが、当該データを転送する転送単位をまたいでおり、転送単位に満たない端数のデータの処理が速く終了してしまうことにより、次の処理の開始が待たされてしまうことによって発生するロス時間を低減することができる。このことにより、分割したブロック毎に処理を行う場合に、各ブロックの処理の間のロス時間を低減することができ、処理時間を短縮することが可能になる。なお、本発明を実施するための形態の構成は、内部の処理時間、すなわち、読み出し制御部60の処理時間に対して、データの転送、すなわち、DMAインタフェース10および書き込み制御部20によるバッファ30または分割バッファへのデータの書き込みが速いデータ処理装置において有効である。
なお、本実施形態においては、DMAインタフェース10が外部メモリ200からブロック処理用データを取得する入力DMAのデータ処理装置である場合について説明したが、本実施形態のバッファ30の構成および制御方法を適用することができるデータ処理装置は、本発明を実施するための形態に限定されるものではない。例えば、パイプラインの前段のデータ処理装置からDMA以外の方法で取得した画像データに基づいて、ローパスフィルタ処理、ノイズ低減フィルタ処理、画像リサイズ処理など、大きなフィルタ処理を行う様々なデータ処理装置にも適用することができる。例えば、ローパスフィルタの処理には、タップ数(フィルタサイズ)分のデータが必要となる。従来のように2つのバッファを備えた構成において、一方のバッファに格納したデータのみでは処理に必要なタップ数に満たない場合、ローパスフィルタの処理を行うことができないため、他方のバッファにデータが格納されるまで処理が待たされてしまうことにより、ロス時間が発生してしまう。本実施形態のような構成にすることによって、事前にローパスフィルタ処理に必要なデータをバッファ内に格納しておくことができるため、処理が待たされてしまうことによって発生するロス時間を低減することができる。
なお、本実施形態においては、ブロック処理用データの書き込み(格納)と読み出しとを、分割バッファの単位で管理する場合について説明したが、データ処理装置が取得するデータを管理する単位は、本発明を実施するための形態に限定されるものではない。例えば、データ処理装置が取得するデータの単位で、データの書き込み(格納)と読み出しとを管理する構成とすることもできる。この場合、例えば、データ処理装置100では、バッファ30を、縦の1ライン毎の分割バッファに分割し、書き込み制御部20は、状態管理部40から入力された空きバッファ情報に含まれる有効データ情報に基づいて、ブロック処理用データを格納する縦の1ライン毎の分割バッファを決定する。また、読み出し制御部60は、有効データ判定部50から入力された有効データ領域情報に基づいて、ブロック処理用データを読み出す縦の1ライン毎の分割バッファを決定する。このような構成とすることによって、ブロック処理用データの単位で書き込み(格納)と読み出しとを管理することができる。
以上、本発明の実施形態について、図面を参照して説明してきたが、具体的な構成はこの実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲においての種々の変更も含まれる。