以下、添付の図面を参照して本発明の実施形態を詳細に説明する。しかし、本発明はここで説明される実施形態に限定されず、他の形態で具体化することもできる。むしろ、ここで紹介される実施形態は開示された内容が徹底して完全になれるように、そして当業者に本発明の思想を十分に伝達するために提供されるものである。
図2はデータ処理システムの一つである本発明によるメモリ帯域幅要求事項を最小化するビデオコーデック200を概略的に示すブロック図である。図2を参照すると、本発明の一実施形態によるビデオコーデック200は独立的なデータ処理動作を実行するデータ処理単位201、221、231およびこれらの動作を制御するマイクロコントローラ290を含む。データ処理単位201は離散余弦変換量子化器DCTQであり、データ処理単位221は動き推定器MEであり、データ処理単位231は動き補償器MCである。離散余弦変換量子化器(DCTQ)201は離散余弦変換器 (DCT)203、量子化器(Q)205、逆量子化器(IQ)207、逆離散余弦変換器(IDCT)209のようなデータ処理単位で構成される。コーディング制御器215はイントラモード、インタモード、量子化インデックスなどを制御する。
本発明のビデオコーデック200はメモリ帯域幅要求事項を最小化するためにメモリプール241を含む。メモリプール241はビデオコーデック200の内部データメモリである探索領域データメモリ(prev mem)243、動き補償されたデータメモリ(mced mem)245および基準マクロブロックデータメモリ(curr mem)247を含む。これら各内部データメモリ43、245、247に貯蔵されたデータをデータ処理単位201、221、231が共有する。すなわち、動き推定器221と動き補償器231は探索領域データメモリ243を共有する。離散余弦変換器203および逆離散余弦変換器209は動き補償されたデータメモリ245を共有する。そして、動き推定器231および離散余弦変換器203は基準マクロブロックデータメモリ247を共有する。
内部メモリプール241は各データ処理単位から制御信号(内部データメモリ制御信号)を受け、そこに応答して各データ処理単位に必要なデータを提供する。
フレームメモリ281、291は現在処理しようとする入力や画像データ(現在フレーム)、現在入力画像データの以前の再構成された画像データ(再構成フレーム、以前フレーム)などを貯蔵する。例えば、フレームメモリ281、291はバーストアクセスが可能なSDRAMである。マイクロコントローラ290の制御下にフレームメモリ281、291に貯蔵された輝度および色差データが内部データメモリ247、243に書き込まれる。
一方、離散余弦変換量子化器(DCTQ)201は再構成フレームを一時的に貯蔵する再構成データメモリ(recon mem)211、量子化係数COEFを貯蔵する量子化係数データメモリ(COEF mem)213をさらに含むことができる。
以下では、ビデオコーデック200を構成するデータ処理単位固有動作に対して説明する。ビデオコーデック200はマイクロコントローラ290の制御下に、符号器または複号器として動作することができる。また、各々に対してインタモード、またはイントラモードで動作することができる。
まず、符号器として動作する場合を説明する。符号器として動作する場合、イントラ符号化およびインタ符号化を実行する。イントラ符号化は入力された現在フレームの空間的重複性を除去するために、入力される現在フレームに対して離散余弦変換および量子化を実行する。一方、インタ符号化は連続するフレームの間の時間的重複性を除去するために、動き推定、動き補償、現在フレームおよび動き補償されたフレーム(予測フレーム)の画像差分データ(予測エラー信号)に対する離散余弦変換、量子化などを実行する。
符号器動作のうち、まずインタ符号化の時の各データ処理単位の動作について説明する。動き推定器221は輝度成分Yに対して16*16ピクセルの大きさのブロック(マクロブロック)単位に現在入力されたフレームと以前フレーム(再構成フレーム)の間の動きを推定する。すなわち、基準マクロブロックデータメモリ247から提供される現在入力フレームのマクロブロックと最も類似のマクロブロック(マッチングマクロブロック)を探索領域データメモリ243から提供される以前フレームの探索領域からさがした後、これら二つのマクロブロックの間の変位量(動きベクタ)mvを推定する。推定された動きベクタmvは動き補償および可変長符号化のために使用される。探索領域は以前フレームで現在マクロブロックの位置に対応するマクロブロックおよびその周りに隣接した8個のマクロブロックで構成されることができる。すなわち、探索領域は48*48ピクセル(9個のマクロブロック)で構成されることができる。
動き補償器231は動き推定器221によって推定された動きベクタmvを基盤にして探索領域データメモリ243とフレームメモリ291とから提供される以前フレームの輝度Yおよび色差Cb/Crブロックから動きが補償された輝度および色差データブロック(予測データ)を生成する。動き補償された輝度および色差データブロック(予測データ)が動き補償されたデータメモリ245に貯蔵される。
離散余弦変換量子化器(DCTQ)201は動き補償されたデータブロック(予測データ)を使用して離散余弦変換器203および量子化器205よって符号化を、逆量子化器207および逆離散余弦変換器209によって複号化を実行する。すなわち、離散余弦変換量子化器(DCTQ)201は基準マクロブロックデータメモリ247から提供される現在フレームの輝度および色差データブロックで動き補償されたデータメモリ245に提供される動き補償された輝度および色差データブロック(予測データ)を減算した結果、得られた画像差分データに対して離散余弦変換器(DCT)203および量子化器(Q)205を介して離散余弦変換および量子化を実行して量子化係数COEFを量子化係数メモリ213に貯蔵する。一方、量子化された画像差分データは逆量子化器207および逆離散余弦変換器209を介して逆量子化および逆離散余弦変換された後、動き補償された輝度および色差データに加算されて再構成フレームが形成され、その結果が再構成フレームメモリ211に一時的に貯蔵される。離散余弦変換量子化器(DCTQ)210は8*8ピクセルブロック単位でデータを処理する。再構成フレームメモリ211に貯蔵された再構成フレームは動き補償のために外部フレームメモリ291に貯蔵される。
動き推定器221によって推定された動きベクタmvおよび量子化係数データメモリ213に貯蔵された量子化係数COEFに対して可変長符号化が実行される。可変長符号化は可変長符号器VLCのようなハードウェアによって実行するか、プログラムを通じるソフトウェアによって実行することができる。ソフトウェアによって可変長符号化を実行する場合、動きベクタおよび量子化係数は外部フレームメモリ291に書き込まれる。一方、可変長符号器を使用する場合、外部メモリへの書き込みは不要である。例えば、量子化係数の場合、可変長符号器が量子化係数データメモリ213に接近して量子化係数を使用する。また、量子化係数は動き推定器221に接近して動きベクタを接近して動きベクタを使用する。すなわち、可変長符号器が使用される場合、動きベクタmvは動き推定器221から、量子化係数は量子化係数データメモリ213から提供される。すなわち、可変長符号器と離散余弦変換量子化器は量子化係数データメモリを共有する。この時、可変長符号器はレディー/ビジー (ready/busy)信号を発生して離散余弦変換量子化器201に自分が動作しているということを知らせる。離散余弦変換量子化器201は量子化係数を量子化係数データメモリ213に書き込んだ後、その動作完了を知らせる信号を発生して可変長符号器が量子化係数データメモリ205に接近して量子化係数を使用して可変長符号を実行するようにする。
符号器のイントラ符号化モードの場合、空間的重複性を除去するために、基準マクロブロックデータメモリ247から提供される現在フレームに対して8*8ピクセルブロック単位で離散余弦変換器203によって離散余弦変換した後、量子化器205によって量子化されて生成された量子化係数COEFは内部メモリである量子化係数メモリ213に貯蔵される。量子化係数COEFはソフトウェア的に、または可変長符号器によってエントロピー符号化される。
次に複号器動作について説明する。複号器動作の場合、動き推定は実行されない。インタ複号化の場合、複号器動作は動き補償、エントロピー符号化された画像差分データの量子化係数に対する複号化、動きベクタを利用したフレーム復元を含む。動き補償器231はエントロピー複号化された動きベクタを使用して輝度および色差成分データに対する動き補償を実行する。離散余弦変換量子化器201はエントロピー複号化された輝度および色差成分の量子化係数を逆量子化および逆離散余弦変換を実行して動き補償された輝度および色差データに加算してフレームを復元する。
次に、イントラ複号化を説明する。イントラ複号化はインタ複号化動作のうちの動き補償を実行しない。イントラ複号化動作はエントロピー複号化、フレーム復元を含む。
以上説明した本発明のビデオコーデック200によれば、動き推定器221と動き補償器231とは探索領域データメモリ243を共有し、離散余弦変換器203と逆離散余弦変換器209とは動き補償されたデータメモリ245を共有し、動き推定器231と離散余弦変換器203とは基準マクロブロックデータメモリ247を共有する。したがって、メモリ帯域幅要求事項を最小化できる。
図3は高性能のパイプライン動作が可能な本発明によるデータ処理システムの一種であるビデオコーデック300を概略的に示すブロック図である。ビデオコーデック300はタスクスケジュラー361および制御レジスタ371を含むマイクロコントローラ390、離散余弦変換量子化器(DCTQ)301、動き推定器321、動き補償器331、可変長符号器/複号器351を含むデータ処理単位およびメモリプール314を含む。離散余弦変換量子化器(DCTQ)301は離散余弦変換器303、量子化器305、逆量子化器307、逆離散余弦変換器309を含む。
可変長符号器/複号器351はエントロピー符号化/複号化を実行する。エントロピー符号化/複号化は、可変長符号器/複号器のようなハードウェアによらず、エントロピー符号化/複号化を実行するアルゴリズムによってソフトウェア的に実行することができる。
制御レジスタ371はビデオコーデック300の機能を設定する。例えば、フレーム開始、イントラ符号化、インタ符号化、符号化、複号化などのビデオコーデックの全般的な機能を設定する。制御レジスタ371による各種モード別(イントラ符号化、インタ符号化、イントラ複号化、インタ複号化)データ処理単位301、321、331、351の動作は図2を参照して説明した通りである。
メモリプール314は探索領域データメモリ343、動き補償されたデータメモリ345および基準マクロブロックデータメモリ347を含んでデータ処理単位301、321、331は共通的なデータを相互連結網349を介して共有する。すなわち、動き推定器321と動き補償器331とは探索領域データメモリ343を共有する。また離散余弦変換器303と逆離散余弦変換器309とは動き補償されたデータメモリ345を共有する。そして、動き推定器331と離散余弦変換器303とは基準マクロブロックデータメモリ347を共有する。
タスクスケジュラー361はビデオコーデック300を構成するデータ処理単位のパイプライン動作を全体的に制御する。タスクスケジュラー361は離散余弦変換量子化器(DCTQ)301、動き推定器321、動き補償器331およびメモリプール314にタスクの実行を指示する命令語(制御信号)、すなわちタスク開始信号を送る。タスク開始信号を受けたデータ処理単位301、321、331およびメモリプール314はそれに相応するタスクを実行する。タスク実行が終了すれば、データ処理単位301、321、331およびメモリプール314はタスク実行終了を知らせるタスク終了信号を発生してタスクスケジュラー361に送って、自分は他のタスク開始信号を待つ待機状態になる。データ処理単位301、321、331およびメモリプール314からタスク終了信号を受けたタスクスケジュラー361は次のタスクの実行を指示する他のタスク開始信号を発生してデータ処理単位301、321、331およびメモリプール314に送る。
可変長符号器/複号器351は動き推定器221から提供される動きベクタまたは量子化係数メモリ(図2の213)に貯蔵された量子化係数COEFに対して可変長符号化/複号化を実行する。可変長符号器/複号器351がない場合、動きベクタは外部フレームメモリ(図2の291)から提供され(すなわち、動きベクタが動き推定器から外部フレームメモリに貯蔵される)、量子化係数も外部フレームメモリから提供される(量子化係数が量子化係数メモリから外部フレームメモリに貯蔵される)。
可変長符号器/複号器351はレディー/ビジー信号(ready/busy信号)を発生して離散余弦変換量子化器301に自分が動作しているということを知らせる。離散余弦変換量子化器301は量子化係数を量子化係数データメモリに書き込んだ後、その動作完了を知らせる信号を発生して可変長符号器/複号器351が可変長符号を実行するようにする。
タスクスケジュラー361によって独立的に制御されるデータ処理単位のタスクは次のとおりである。動き推定器321は輝度データブロックに対して動きを推定する動き推定タスク、動きベクタを外部メモリに書き込むタスク(可変長符号器/複号器を使用しない場合)を実行する。動き補償器331は輝度および色差データブロックに対して各々別個のタスク、すなわち輝度データブロックに対する動き補償タスク、色差データブロックに対する動き補償タスクを実行する。離散余弦変換量子化器(DCTQ)301は輝度および色差データブロックに対して各々別個のタスク、すなわち、輝度成分に対するDCTQ(離散余弦変換、量子化、逆量子化、逆離散余弦変換)タスク、色差成分に対するDCTQタスク、再構成フレームを貯蔵するための再構成フレーム貯蔵タスクを実行する。可変長符号器/複号器351は動き補償器331および離散余弦変換量子化器DCTQの制御によって輝度成分に対するエントロピー符号化/複号化のためのタスク、色差成分の量子化係数に対するエントロピー符号化/複号化のためのタスク、動きベクタに対する可変長符号化/複号化タスクを実行する。
メモリプール314はタスクスケジュラー361の制御に従ってフレームメモリ(図2の281、291)から以前フレームの輝度成分を読み出して探索領域データメモリ343に貯蔵し、現在フレームの輝度および色差成分を基準マクロブロックデータメモリ347に貯蔵するタスクを実行する。動き補償器331によって補償された動き補償された輝度および色差成分は動き補償されたデータメモリ345に貯蔵される。
一方、メモリプール314の内部データメモリ343、345、347に貯蔵されたデータは離散余弦変換量子化器301、動き推定器321および動き補償器331の制御下にアクセスされる。
このような各データ処理単位のタスクはタスクスケジュラー361によって制御されてパイプライン動作で実行される。図4は本発明のビデオコーデック300の符号化モードの時の各データ処理単位のタスクに対するパイプライン動作を概略的に図示する。
タスクスケジュラー361の制御信号(タスク開始信号)によってフレームメモリから現在フレームおよび以前フレームの輝度成分が基準マクロブロック輝度データメモリおよび探索領域データメモリに書き込まれた後、動き推定器321によって動き推定が実行されて動きベクタが生成される。動き推定器321によって動き推定が完了すれば、動きベクタを基盤にして、動き補償器331による輝度および色差成分に対する動き補償が実行される。可変長符号器/複号器を使用しない場合、輝度成分に対する動き補償を実行する時、動きベクタが外部フレームメモリに書き込まれる。動き補償器331によって輝度成分に対する動き補償が完了した後、離散余弦変換量子化器(DCTQ)301によって輝度成分に対するDCTQタスクが実行され、動き補償器331によって色差成分に対する動き補償が完了すれば、離散余弦変換量子化器(DCTQ)301によって色差成分に対するDCTQタスク、および構成フレーム貯蔵タスクが実行される。離散余弦変換量子化器(DCTQ)301によって輝度成分に対するDCTQタスクが完了した後、量子化係数COEFに対するエントロピー符号化が行なわれる。
上述のデータ処理単位のタスク別効率的なパイプライン動作および外部メモリ帯域要求事項を最小化するためのメモリプール341の構成の一例が図5、図6A、図6B、図7A、および図7Bに概略的に示されている。本例では動き補償のための探索領域が[−16、15]であり、すなわち探索領域が48*48ピクセルブロックであり、システムで支援されるメモリアクセスモードがシングル、バースト4、バースト8、バースト16である場合に対することを例示的に図示したものである。メモリプール341は探索領域データメモリ、基準マクロブロックデータメモリ、動き補償されたデータメモリを含む。
図5は動き推定および動き補償のために再構成された以前フレームから提供された輝度成分を貯蔵する探索領域データメモリを図示し、図6Aおよび図6Bは動き推定、離散余弦変換量子化器DCTQのために現在入力フレームから提供された輝度および色差成分を貯蔵する基準マクロブロック輝度データメモリおよび基準マクロブロック色差データメモリを図示し、図7Aおよび図7Bは離散余弦変換量子化器DCTQの符号化/複号化、そしてフレーム再構成のために動き補償された輝度成分および色差成分を貯蔵するメモリを図示する。
まず、図5を参照すると、探索領域データメモリ345は外部フレームメモリ(図2の281)に対してバースト8、バースト16でアクセスされた以前フレームの輝度成分を貯蔵する。探索領域が [−16、16]の場合、48*48ピクセルの大きさのデータが要求される点と、フレームメモリに対するバースト8、バースト16アクセス、パイプライン動作を考慮して、探索領域データメモリ343は48*(16*10)ピクセルの大きさを貯蔵することができるメモリの大きさを有するように構成される。図5は48*(16*10)ピクセルの大きさのデータを貯蔵する探索領域データメモリを図示する。
初めには、パッディング領域を考慮してバースト8に外部フレームメモリ(図2の291)がアクセスされて二つの48*16ピクセルの大きさの輝度ブロックが探索領域データメモリ343ブロックPY0、PY1に貯蔵され、その後からはバースト16でアクセスされる。すなわち、二つの48*16ピクセルの大きさの輝度ブロックが探索領域データメモリ345ブロックPY0、PY1に貯蔵された後、フレームメモリがバースト16にアクセスされて4個の48*16ピクセルの大きさの輝度ブロックが探索領域データメモリ343ブロックPY2、PY3、PY4、PY5に貯蔵される。以後もフレームメモリがバースト16にアクセスされて4個の48*16ピクセルの大きさの輝度ブロックが探索領域データメモリ343ブロックPY6、PY7、PY8、PY9に貯蔵される。探索領域データメモリ343ブロックPY6、PY7、PY8、PY9に4個の48*16ブロックが貯蔵された後、探索領域データメモリ343ブロックPY0、PY1、PY2、PY3に4個の48*16ブロックが貯蔵される。このような過程は以前フレームの水平方向マクロブロックのアクセスが完了するまで繰り返される。この時、水平方向に残っているマクロブロックが4個ではない場合には、残っているマクロブロックの数に対応してバーストアクセスが行なわれる。ここで探索領域の範囲が変わるようになれば、探索領域データメモリ343の垂直ピクセルの大きさ(すなわち、48ピクセル)水平ピクセルの大きさ(16*100)もそれに相応して変わるであろう。
次に、図6Aおよび図6Bを参照すると基準マクロブロックデータメモリ347は輝度成分を貯蔵するための基準マクロブロック輝度データメモリ347aおよび色差成分を貯蔵するための基準マクロブロック色差データメモリ347bを含む。基準マクロブロック輝度データメモリ347aはフレームメモリ(図2の281)をバースト16にアクセスして輝度成分を貯蔵する。基準マクロブロック色差データメモリ347bはフレームメモリ(図2の281)をバースト8にアクセスして輝度成分を貯蔵する。
すなわち、輝度成分データはバースト16に4個のマクロブロック単位(16*16ピクセルの大きさ)にアクセスされて基準マクロブロック輝度データメモリ347aのブロックCY0、CY1、CY2、CY3に貯蔵され、次の回のアクセスの時に基準マクロブロック輝度データメモリ347aのブロックCY4、CY5、CY6、CY7に4個の輝度マクロブロックが貯蔵される。輝度ブロックCY4〜CY7がアクセスされて貯蔵される前に、以前に貯蔵された輝度ブロックCY0〜CY3に対するデータ処理が完了する。基準マクロブロックデータメモリ347aのブロックCY4、CY5、CY6、CY7に4個の輝度16*16ブロックが貯蔵された後、次の回のアクセスの時に基準マクロブロックデータメモリ347aのブロックCY0、CY1、CY2、CY3に4個の輝度16*16ブロックが貯蔵される。すなわち、パイプライン動作を円滑にするために一つのメモリブロックグループCYO〜CY3が処理されている間、次の回の処理のために他のメモリブロックグループCY4〜CY7にデータが書き込まれる。以後、このような過程が以前フレームの水平方向マクロブロックのアクセスが完了するまで繰り返される。この時、水平方向に残っているマクロブロックの数にあうようにバーストアクセスが行なわれる。
色差成分データは色差成分Cb、色差成分Crの手順によって、4個の8*8ピクセルの大きさのブロック単位でバースト8にアクセスされてマクロブロック色差データメモリ347bのブロックCCb0、CCb1、CCb2、CCb3、CCr0、CCr1、CCr2、CCr3 に貯蔵される。続いて、同一にバースト8に色差成分Cb、色差成分Crの手順にアクセスされて8*8ピクセルの大きさのブロック単位で基準マクロブロック色差データメモリ347bのブロックCCb4、CCb5、CCb6、CCb7、CCr4、CCr5、CCr6、CCr7に貯蔵される。色差データブロックCCb4、CCb5、CCb6、CCb7、CCr4、CCr5、CCr6、CCr7に色差成分が貯蔵される前に、それ以前に色差データブロックCCb0、CCb1、CCb2、CCb3、CCr0、CCr1、CCr2、CCr3に貯蔵された色差データに対する処理が完了する。パイプライン動作を円滑にするために一つのメモリブロックグループCCb0、CCb1、CCb2、CCb3、CCr0、CCr1、CCr2、CCr3が処理されている間次の回の処理のために他のメモリブロックグループCCb4、CCb5、CCb6、CCb7、CCr4、CCr5、CCr6、CCr7にデータが書き込まれる。このような過程が繰り返して行なわれる。
次に、図7Aおよび図7Bを参照すると、動き補償されたデータメモリ345は動き補償された輝度および色差成分データブロックを貯蔵する。離散余弦変換量子化器(DCTQ)301の離散余弦変換器303および逆離散余弦変換器309が同時に動き補償されたデータメモリ345をアクセスするので、動き補償されたデータメモリ345は動き補償された同一の輝度成分を貯蔵するための一対の動き補償された輝度データメモリ345a、および動き補償された同一の色差成分を貯蔵するための一対の動き補償色差データメモリ345bを含む。
動き補償された輝度データメモリ345aは二つのマクロブロック16*16を貯蔵することができる大きさを有し、動き補償された色差データメモリ345bは各色差成分に対して二つの8*8ピクセルの大きさのブロックを貯蔵することができる大きさを有する。すなわち、動き補償された輝度データメモリ345aは16*16ピクセルの大きさのメモリブロックMY0、MY1で構成され、動き補償された色差データメモリ345bは8*8ピクセルの大きさのメモリブロックMCbo、MCb1、MCr0、MCr1で構成される。
図8は今まで説明した内部データメモリ841およびデータ処理単位の間の相互連結網849を介した相互連結関係を図示するブロック図である。離散余弦変換器803および逆離散余弦変換器809は同一の動き補償されたマクロブロックを同時に接近し、また動き補償されたデータメモリ845を共有する。動き推定器821と動き補償器831とは探索領域データメモリ843を共有する。動き推定器821と離散余弦変換器803とは基準マクロブロックデータメモリ847の輝度成分データCY0〜CY7を共有する。
探索領域データメモリ843に貯蔵された輝度成分データは3個の48*16ブロック単位で動き推定器821および動き補償器831に伝達される。基準マクロブロック輝度データメモリ847に貯蔵された輝度成分マクロブロック対(CY0、CY2)、(CY1、CY3)、(CY4、CY6)、(CY5、CY7)はマルチプレクサ849a、849bを介して動き推定器821および離散余弦変換器803に提供され、基準マクロブロック色差データメモリ847に貯蔵された色差成分ブロック対(CCb0、CCr0、CCb2、CCr2)、(CCb1、CCr1、CCb3、CCr3)、(CCb4、CCr4、CCb6、CCr6)、(CCb5、CCr5、CCb7、CCr7)はマルチプレクサ849cによって離散余弦変換器803に提供される。
以下、上述のパイプライン動作のためのデータ処理単位およびメモリプールについてより詳細に説明する。なお、可変長符号器を使用せず、ソフトウェア的に可変長符号化を実行すると考えて説明する。すなわち、ソフトウェア的に可変長符号化を実行する場合、可変長符号化のために動きベクタおよび量子化係数が外部メモリに貯蔵される。一方、可変長符号器を使用する場合、動きベクタおよび量子化係数を外部メモリに伝達しなくてもよい。
図9は動き推定器の詳細ブロック図であり、図10は動き補償器の詳細ブロック図であり、図11は離散余弦変換量子化器DCTQの詳細ブロック図であり、図12はメモリプールの詳細ブロック図である。
まず、図9を参照すると、動き推定器900は動き推定エンジン901、タスク制御回路903、内部データメモリ読み出し制御回路905、動きベクタ伝達制御回路907を含む。
タスク制御回路903はタスクスケジュラーから実行しなければならないタスク命令(動き推定開始信号me_start、動きベクタ書き込み開始信号mv_writeのようなタスク制御信号)を受け、これらタスクの実行完了を知らせるタスク終了信号(動き推定終了信号me_end、動きベクタ書き込み終了信号mv_write_end)をタスクスケジュラーに伝達する。動きベクタ書き込み開始信号mv_writeによって動きベクタは動きベクタ伝達制御回路907の制御下に外部フレームメモリに書き込まれる。一方、可変長符号器を使用する場合、可変長符号化のために動きベクタを外部メモリに貯蔵する必要はなく、可変長符号器が動き推定器を直接アクセスして動きベクタを使用することができる(動き補償器も動き推定器を直接アクセスして動きベクタを使用する)。したがって、動きベクタ書き込み開始信号mv_writeおよび動きベクタ書き込み終了信号mv_write_endは不要になる。しかし、動きベクタ書き込み開始信号mv_writeを使用する場合、この信号が発生するとすぐに、動きベクタ書き込み終了信号mv_write_endが発生するようにして、タスクスケジュラーに知らせることができる。
内部データメモリ読み出し制御回路905は、メモリプールの探索領域データメモリから輝度成分データPYと基準マクロブロックデータメモリから輝度成分データCYとを読み出すための内部データメモリ制御信号を発生する。動き推定エンジン901はタスク制御回路903を介してタスクスケジュラーから受けた動き推定開始信号me_startに応答してメモリプールの探索領域データメモリから輝度成分データPYと基準マクロブロックデータメモリから輝度成分データCYとを利用して動きを推定して動きベクタを生成する。動きベクタ伝達制御回路907は動き補償器(または可変長符号器)に動きベクタを提供するために動きベクタを一時的に貯蔵するか、動きベクタ可変長符号化のために動きベクタを外部メモリに書き込む。
動き推定、動きベクタ書き込みが終了すれば、タスク制御回路903はタスクスケジュラーに動き推定終了を知らせる動き推定終了信号me_end、動きベクタ書き込み終了を知らせる動きベクタ書き込み終了信号mv_write_endを送る。
次に、図10を参照すると、動き補償器1000は動き補償エンジン1001、タスク制御回路1003、内部データメモリ読み出し/書き込み回路1005、動きベクタ解釈回路1007、フレームメモリ読み出し制御回路1009を含む。
タスク制御回路1003はタスクスケジュラーから実行しなければならないタスク実行命令(輝度成分に対する動き補償実行の開始を指示する信号mc_y_start、色差成分に対する動き補償実行の開始を指示する信号mc_cbcr_startのようなタスク制御信号)を受けて、これらタスクの実行完了をタスクスケジュラーに知らせるタスク終了信号(輝度成分に対する動き補償が完了したことを知らせる信号mc_y_end、色差成分に対する動き補償が完了したことを知らせる信号mc_cbcr_end)を伝達する。内部データメモリ読み出し/書き込み回路1005はメモリプールの探索領域データメモリから輝度成分データPYを読み出し、動き補償された結果である動き補償された輝度成分データMYと動き補償された色差成分データMCb/MCrを動き補償されたデータメモリに書き込むための内部データメモリ制御信号を発生する。フレームメモリ読み出し制御回路1009は色差成分の動き補償のためにフレームメモリ(図2の291)アクセスを制御する。動き解釈ベクタ回路1007は符号化モードの時には動き推定器から、複号化モードの時には外部メモリ(または可変長複号器)から、動きベクタが伝達されて解釈する。動き補償エンジン1001はタスクスケジュラーから受けた輝度成分動き補償開始信号mc_y_start、色差成分動き補償開始信号mc_cbcr_startに応答して解釈された動きベクタを基盤にして輝度成分および色差成分に対して動き補償を実行する。動き補償エンジン1001によって動き補償が終了すれば、タスク制御回路1003はタスクスケジュラーに動き補償終了を知らせる動き補償終了信号mc_y_end、mc_cbcr_endを送る。
図11を参照すると、離散余弦変換量子化器(DCTQ)1100は離散余弦変換器1111、量子化器1113、逆量子化器1115、逆離散余弦変換器1117、タスク制御回路1103、内部データメモリ読み出し制御回路1105、フレームメモリ書き込み制御回路1109を含む。
タスク制御回路1103はタスクスケジュラーから実行しなければならないタスク実行命令(輝度成分に対する離散余弦変換量子化開始信号dctq_y_start、色差成分に対する離散余弦変換量子化開始信号dctq_cbcr_start、輝度成分に対する量子化係数エントロピー符号化開始を指示する信号coef_y_write、色差成分に対する量子化係数エントロピー符号化開始を指示する信号coef_cbcr_write、輝度成分に対する逆量子化逆離散余弦変換開始信号iqidct_y_start、色差成分に対する逆量子化逆離散余弦変換開始信号iqidct_cbcr_start、再構成フレーム貯蔵開始信号recon_writeのようなタスク制御信号)を受け、これらタスクの実行完了を知らせるタスク終了信号(輝度成分に対する離散余弦変換量子化終了信号dctq_y_end、色差成分に対する離散余弦変換量子化終了信号dctq_cbcr_end、輝度成分に対する量子化係数エントロピー符号化終了を知らせる信号coef_y_write_end、色差成分に対する量子化係数エントロピー符号化終了を知らせる信号coef_cbcr_write_end、輝度成分に対する逆量子化逆離散余弦変換終了信号iqidct_y_end、色差成分に対する逆量子化逆離散余弦変換終了信号iqidct_cbcr_write_end、再構成フレーム貯蔵終了信号recon_write_end 信号)を伝達する。
輝度成分に対する量子化係数エントロピー符号化開始信号coef_y_write および色差成分に対する量子化係数エントロピー符号化開始信号coef_cbcr_writeは可変長符号化のために量子化係数を外部メモリに書き込み、可変長符号化が実行されるように指示する信号である。
一方、可変長符号器が使用される場合、輝度成分に対する量子化係数エントロピー符号化開始信号coef_y_writeおよび色差成分に対する量子化係数エントロピー符号化開始信号coef_cbcr_writeに応答して(外部メモリ書き込み動作なしに)可変長符号器は離散余弦変換量子化器を直接アクセスして(すなわち、量子化係数データメモリ(図2の213)をアクセスして)可変長符号化を実行する。
内部データメモリ読み出し制御回路1105はメモリプールの基準マクロブロック輝度データメモリから輝度成分データCYを、基準マクロブロック色差データメモリから色差成分データCCb/CCrを、動き補償された輝度成分データメモリから輝度成分データMYを、動き補償された色差成分データメモリから色差成分データMCb/MCrを読み出すための内部データメモリ制御信号を発生させる。フレームメモリ書き込み制御回路1109は再構成されたフレームをフレームメモリ(図2の291)に貯蔵することを制御する。
次に、図12を参照すると、メモリプール1200は現在フレームの輝度成分および色差成分を貯蔵する基準マクロブロックデータメモリ1211、以前フレームの輝度成分を貯蔵する探索領域データメモリ1213、動き補償された輝度および色差成分を貯蔵する動き補償されたデータメモリ1215、タスク制御回路1203、内部データメモリ読み出し/書き込み制御回路1205、フレームメモリ読み出し制御回路1209、相互連結網1217を含む。
タスク制御回路1203はタスクスケジュラーから実行しなければならないタスク命令(探索領域輝度成分書き込み開始信号py_write、基準マクロブロック輝度成分書き込み開始信号cy_write、基準マクロブロック色差成分書き込み開始信号ccbccr_write のようなタスク制御信号)を受けて、フレームメモリ読み出し制御回路1209を介して外部フレームメモリに貯蔵されたデータをアクセスして基準マクロブロック輝度および色差データメモリと探索領域データメモリとに貯蔵されるようにする。また、タスク制御回路1203はこのような各タスクの実行完了をタスクスケジュラーに知らせるタスク終了信号(探索領域輝度成分書き込み終了信号py_write_end、基準マクロブロック輝度成分書き込み終了信号cy_write_end、基準マクロブロック色差成分書き込み終了信号ccbccr_write_endのようなタスク制御信号)を伝達する。
内部データメモリ読み出し/書き込み回路1205は各データ処理単位(動き推定器、動き補償器、離散余弦変換量子化器DCTQ)から内部データメモリ制御信号を受けて相互連結網1217を介して必要なデータすなわち、探索領域輝度データPY、基準マクロブロック輝度成分データCY、基準マクロブロック色差成分データCCb/CCr、動き補償された輝度成分データMY、動き補償された色差成分データMCb/MCrを各データ処理単位に提供する。
図13は本発明によるビデオコーデックの全体動作を制御するタスクスケジュラーと各データ処理単位が取り交わすタスク開始信号、タスク終了信号などを概略的に図示する。タスクスケジュラー1361は制御レジスタ1371から一フレームの一番目の開始を知らせるframe_start信号によって動作を開始する。制御レジスタ1371はモード設定信号、すなわち、符号化と複号化とを区別するencoder信号、インタモードとイントラモードとを決めるinter信号を発生してタスクスケジュラー1361に提供してビデオコーデックの機能を設定する。encoder信号が“1”である時、符号化であり、“0”である時、複号化を実行し、inter信号は“1”の場合がインタモード、“0”の場合はイントラモードを示す。またビデオ符号化はフレーム単位で処理することもでき、スライス単位で処理することもできる。スライス単位で処理する時は、決められたマクロブロックの数だけ符号化を実行するので、制御レジスタは次のスライスに対する動作を知らせるために動作開始信号op_startを発生する。信号mem_mbx、me_mbx、mc_mbx、dctq_mbxは各々のメモリプール1341、動き推定器1321、動き補償器1331及び離散余弦変換量子化器(DCTQ)1301で現在処理されているマクロブロックの水平方向の位置(処理されるフレームでのマクロブロックの水平方向位置)を示す。mem_mbxの場合、4個のマクロブロック単位で内部データメモリに貯蔵されるので、貯蔵が終了するごとにmem_mbxは4ずつ増加する。これに反して、me_mbx、mc_mbx、dctq_mbxは各々の動きベクタ伝達、色差成分に対する動き補償終了、色差成分に対するDCTQタスクが終了するごとに1ずつ増加する。
一方、VGA解像度を支援する場合、マクロブロックの水平方向位置は6ビットに表示することができる。また、水平方向のマクロブロックを4個のマクロブロック単位で区分する時、最後に残るマクロブロックの数は0、1、2、3のうちのいずれかになる。したがって、残っているマクロブロックの数を知らせるための信号がhorizontal_endである。horizontal_end信号が発生した後には、残っているマクロブロックの数だけのマクロブロックがメモリプールのデータメモリに貯蔵される。この場合、水平方向の位置を示すビットのうちの最後の二つのビットから残っているマクロブロックの数が分かる。
図13に示した残りの信号はタスクスケジュラー1361から各データ処理単位1321、1331、1301およびメモリプール1341にタスクの開始を知らせるタスク開始信号とそれに対応するデータ処理単位1321、1331、1301およびメモリプール1341の動作の完了を示すタスク終了信号とである。
まず、メモリプール1341とタスクスケジュラー1361との間に取り交わす信号対をよく見る。信号py_writeはタスクスケジュラー1361が発生する信号として内部データメモリの探索領域データメモリPY0〜PY9に書き込みを知らせる信号であり、信号py_write_endはメモリプール1341が発生する信号として書き込みが完了したことを示す信号である。信号cy_writeはタスクスケジュラー1361が発生する信号として基準マクロブロック輝度成分データCY0〜CY7の書き込みを知らせる信号であり、信号cy_write_endはメモリプール1341が発生する信号として書き込みが完了したことを知らせる信号である。同様に、信号ccbccr_writeは基準マクロブロック色差成分データCCb0〜CCb7、CCr0〜CCr7の書き込みを知らせる信号であり、信号ccbccr_write_endは書き込みが完了することを示す信号である。
次に、動き推定器1321とタスクスケジュラー1361との間に取り交わす信号対をよく見る。信号me_startはタスクスケジュラー1361が発生する信号として動き推定器1321が動き推定を開始するように命令する信号であり、信号me_endは動き推定の完了をタスクスケジュラー1361に知らせる信号として動き推定器1321が発生する信号である。信号mv_writeは動き推定の結果である動きベクタを外部メモリに書き込むようにするタスクスケジュラー1361が発生する信号であり、信号mv_write_endは動きベクタの書き込みが完了することを示す動き推定器1321が発生する信号である。
次に、動き補償器1331とタスクスケジュラー1361との間に取り交わす信号対に対してよく見る。信号mc_y_startは動き補償器1331が輝度成分に対する動き補償を開始するように知らせるタスクスケジュラー1361が発生する信号であり、信号mc_cbcr_startは色差成分に対する動き補償をするように知らせるタスクスケジュラー1361が発生する信号であり、信号mc_y_endとmc_cbcr_endは各々の輝度と色差成分の動き補償が終了したことを示す動き補償器1331が発生する信号である。
次に、離散余弦変換量子化器(DCTQ)1301とタスクスケジュラー1361との間に取り交わす信号対をよく見る。信号dctq_y_startと信号dctq_cbcr_startとは複号化の場合、各々の輝度と色差成分とに対する離散余弦変換、量子化、逆量子化、逆離散余弦変換を実行するようにタスクスケジュラー1361が発生する信号であり、信号dctq_y_endと信号dctq_cbcr_endとは各々の輝度と色差成分とに対する動作が完了したということをタスクスケジュラー1361に知らせる信号として離散余弦変換量子化器1301が発生する信号である。信号coef_y_writeと信号coef_cbcr_writeとは量子化された結果である輝度と色差成分との量子化係数をエントロピー符号化するようにタスクスケジュラー1361が発生する信号であり、信号coef_y_write_endと信号coef_cbcr_write_endとはエントロピー符号化が完了することをタスクスケジュラー1361に知らせる離散余弦変換量子化器1301がタスクスケジュラー1361に知らせる信号である。可変長符号器を使用する場合、信号coef_y_write信号と信号coef_cbcr_write信号とは可変長符号器に量子化係数データメモリに貯蔵された量子化係数に接近して可変長符号を実行するように指示する信号であり、信号coef_y_write_endと信号coef_cbcr_write_endとは離散余弦変換量子化器が可変長符号器によって可変長符号が終了したことをタスクスケジュラーに知らせる信号である。信号recon_writeは再構成されたフレームデータを貯蔵するように離散余弦変換量子化器1301に知らせる信号であり、完了すれば、離散余弦変換量子化器1301は信号recon_write_end信号を発生してタスク終了をタスクスケジュラー1301に知らせる。
一方、複号化の時において、タスクスケジュラー1661は信号coef_y_read信号と信号coef_cbcr_readとを発生して離散余弦変換量子化器1301に輝度と色差成分とに対する量子化係数を外部メモリ(または可変長複号器)から受け入れるように指示する信号であり、離散余弦変換量子化器1301は信号coef_y_read_endと信号coef_cbcr_read_end信号とを発生して、この動作の完了をタスクスケジュラー1361に知らせる。信号iqidct_y_startと信号 iqidct_cbcr_startとは輝度と色差成分とに対して逆量子化と逆離散余弦変換の動作を開始させる信号であり、信号iqidct_y_endと信号iqidct_cbcr_endはその動作が完了したことを知らせる信号である。
今まで説明したビデオコーデックのパイプライン動作をモード別にさらに詳細に示せば、以下の図14Aおよび図14B、図15Aおよび図15Bと同様である。図14Aおよび図14Bは符号化/インタモードおよび符号化/イントラモード時のパイプラインを図示し、図15Aおよび図15Bは複号化/インタモードおよび複花化/イントラモード時のパイプラインを図示する。
まず、図14Aを参照すると、符号化/インタモードで、フレームメモリから動き推定のための輝度成分データがメモリプールの探索領域データメモリおよび基準マクロブロックデータメモリに書き込まれる。フレームメモリからメモリプールの内部データメモリへのデータ貯蔵は探索領域データメモリ、基準マクロブロック輝度データメモリ、基準マクロブロック色差データメモリの順に繰り返して行われる。具体的に説明すれば、タスク0(T0)で探索領域データメモリのブロックPY0〜PY6に6個の48*16輝度ブロックが貯蔵される。この時、フレームメモリ(図2のフレームメモリ291参照)に対する二度のアクセスを通じて行われる。まず、フレームメモリがバースト8にアクセスされてメモリブロックPY0〜PY1に輝度成分データが貯蔵され、続いてバースト16にアクセスされてメモリブロックPY2〜PY5に輝度成分データが貯蔵される(図5参照)。
次に、タスク1(T1)でフレームメモリ(図2のフレームメモリ281参照)がバースト16にアクセスされて4個の16*16輝度成分データCYが基準マクロブロック輝度データメモリのブロックCY0〜CY3に貯蔵される(図6A参照)。
基準マクロブロック輝度メモリに4個の輝度マクロブロックの貯蔵が完了すれば、動き推定器がマクロブロック16*16単位で基準マクロブロック輝度メモリに貯蔵された4個の輝度ブロックCY0〜CY3に対して動き推定タスクを開始する。すなわち、タスク2T2で、タスク0(T0)およびタスク1(T1)で準備された探索領域輝度データPY0〜PY2および基準マクロ輝度データブロックCY0を使用して動き推定器が動き推定タスクを開始する。また、タスク2(T2)でフレームメモリがバースト8にアクセスされて各々4個の8*8ピクセル色差成分データCCbおよびCCrが基準マクロブロック色差データメモリのブロックCCb0〜CCb3、CCr0〜CCr3に貯蔵される(図6b参照)。ここで、タスク(T2)で動き推定が終了すれば、mem_mbxは初期0から4に変わる。
タスク2(T2)で輝度マクロブロックCY0に対する動き推定が完了して動きベクタが生成されれば、タスク3(T3)で動きベクタが外部メモリに伝達され、動き補償器は輝度ブロックPY0に対する動き補償を実行して動き補償された輝度ブロックMY0が動き補償された輝度データメモリに貯蔵される。ここで、動きベクタの伝達が終了すれば、me_mbxは初期0から1に増加する。またタスク2(T2)でフレームメモリがバースト8にアクセスされて色差成分CCb0〜CCb3、CCr0〜CCr3が基準マクロブロック色差データメモリに貯蔵されれば、タスク8(T8)で(図面で三番目のT8)輝度マクロブロックPY4に対する動き推定のために、タスク3(T3)でフレームメモリがバースト16にアクセスされて48*16ピクセルの大きさの4個の輝度ブロックPY6〜PY9が探索領域データメモリに書き込まれ始め、タスク9(T9)(二番目のT9)でフレームメモリがバースト16にアクセスされて16*16ピクセルの大きさの4個の輝度ブロックCY4〜CY7が基準マクロブロックデートメモリに書き込まれ始める(図5参照)。
輝度ブロックPY0に対する動き補償が完了して動きベクタの伝達が終了すれば、タスク4(T4)で8*8ブロック単位で離散余弦変換量子化器DCTQは差分輝度ブロックCY0−PY0に対するDCTQタスク(離散余弦変換、量子化、逆量子化、逆離散余弦変換)を実行する。これと同時に、タスク4(T4)で色差ブロックに対する動き補償が実行され、輝度マクロブロックCY1に対する動き推定が開始される。タスク4(T4)で色差成分に対する動き補償が終了すれば、mc_mbxは初期0から1に増加する。
輝度ブロックCY0−MY0に対するDCTQタスクが完了すれば、タスク5(T5)およびタスク6(6)(一番目のT6)にかけて輝度成分COEF Y0に対する可変長符号化タスクが実行される。またタスク4(T4)で色差ブロックに対する動き補償が完了すれば、タスク(5)で色差成分に対するDCTQタスクが実行される。タスク5(T5)で輝度マクロブロックに対する動き推定が終了すれば、タスク6(T6)(一番目のT6)で輝度マクロブロックPY1に対する動き補償が実行されて動き補償された輝度ブロックMY1が動き補償された輝度データメモリに貯蔵される。
タスク5(T5)で色差ブロックに対するDCTQタスクが終了すれば、タスク6(T6)(一番目のT6)で再構成フレーム書き込みタスクが実行され、そのタスク実行が完了した後、dctq_mbxは初期0から1に増加する。
タスク6(T6)で輝度成分COEF Y0に対する可変長符号が終了すれば、タスク8(8)(一番目のT8)で色差成分に対する可変長符号が実行される。この時、色差成分に対する動き補償が動き補償器によって、輝度成分CY1−MY1に対するDCTQが離散余弦変換量子化器によって、輝度成分CY2に対する動き推定が動き補償器によって実行される。
インタ符号化モードの場合、探索領域データはタスク0(T0)とタスク3(T3)〜タスク8(T8)との間T3、T4、T4、T6、T8、T9、T6、T8に、基準マクロブロックの輝度データはタスク1(T1)とタスク9(T9)との間、色差データはタスク2(T2)とタスク9(T9)との間に外部フレームメモリでアクセスされて貯蔵される。動き推定はタスク2(T2)、タスク4(T4)〜タスク5(T5)(T4、T5)とタスク8(T8)〜タスク9(T9)との間(T8、T9)に、動きベクタ伝達はタスク3(T3)とタスク6(T6)、動き補償の輝度成分はタスク3(T3)とタスク6(T6)との間に、動き補償の色差成分はタスク4(T4)とタスク8(T8)との間に、DCTQ動作の輝度成分はタスク4(T4)とタスク8(T8)との間に、DCTQの色差成分はタスク5(T5)とタスク9(T9)との間に、再構成されたフレームの貯蔵はタスク6(T6)で実行される。
輝度成分に対する可変長符号化はタスク5(T5)〜タスク6(T6)(T5、T6)、タスク9(T9)〜タスク6(T6)(T9、T6)の間に実行され、色差成分に対する可変長符号化はタスク8(T8)で実行される。
イントラ符号化の時のパイプライン動作を図14Bに示す。イントラ符号化モードの場合は探索領域データのアクセス、動き推定器と動き補償器とが動作しないのでタスクT0とT3とを除いては、残りの動作はインタモードの場合と同一に動作する。
本発明によるビデオコーデックが複号器として動作する場合のイントラ複号化、インタ複号化に対するパイプライン動作は図15Aおよび図15Bに示すとおりである。
図15Aを参照すると、インタ複号化モードはインタ符号化と比べて、動き推定を実行せず、基準マクロブロックに対する動作は発生しない。すなわち、インタ複号化モードは動き推定器が動作しないので、探索領域データはT0とT3〜T6(T3、T4、T5、T6、T7、T8、T9、T6、T7、T8、T9、T6)の間アクセスされ、動き補償の輝度成分はT3とT6、色差成分はT4とT7〜T8(T7、T8)、DCTQの輝度成分はT4とT8、色差成分は15とT9、再構成されたフレームの貯蔵はT6タスクの間に実行される。
図15Bを参照すると、イントラ複号化モードはインタ複号化モードと比べて、動き補償を実行しないことを除いては同一である。
図16A乃至図16Dは図14Aおよび図14B、図15Aおよび図15Cの各モード別のパイプライン動作でタスク流れを概略的に図式化したタスク流れ図である。
図16A乃至図16Dは図14Aおよび図14B、そして図15Aおよび図15Bの各モード別パイプライン動作でのタスク流れを要約して図示する。図16Aはインタ符号化モード時のタスク流れを、図16Bはイントラ符号化モード時のタスク流れを、図16Cはインタ複号化モード時のタスク流れを、図16Dはイントラ複号化モード時のタスク流れを示す。
符号化と複号化の場合、各々T8とT6タスクで水平方向のすべてのマクロブロックの動作が完了すれば(MX=MXLAST、ここでMXは現在処理されているマクロブロックの水平方向の位置を示し、MXLASTは水平方向マクロブロックの最後のマクロブロックを示す)初期タスクT0に、または一フレームに対する動作が完了すればMB END遊休IDLEタスクに遷移して実行される。
図14Aおよび図14B、そして図15Aおよび図15Bに概略的に図示されたモード別のパイプライン動作に対するタスク制御信号によるタスクスケジュラーの各モード別の状態遷移を図17乃至図20に示した。図17はインタ符号化モード、図18はイントラ符号化モード、図19はインタ複号化モード、図20はイントラ複号化モード場合のタスクスケジュラーの状態遷移状態を示す。図17乃至図20で、mxlastは一フレームで水平方向で最後のマクロブロックの位置であり、M−1(Mはフレームで水平方向へのマクロブロック個数)の値を有し、mxは現在DCTQ処理されるマクロブロックの水平位置として、dctq_mbxのような位置を示し、myは現在処理されているマクロブロックの垂直方向の位置であり、0〜N−1(Nは垂直方向のマクロブロックの個数)の範囲を有する。op_unitは全体マクロブロックの数、すなわちM×N値を有し、op_cntは現在処理されたマクロブロックの数を示す。
まず、図17を参照すると(図14A、16Aも共に参照)、インタ符号化モードの場合、タスクスケジュラーは制御レジスタによるフレーム開始信号frame_startによって一フレームに対する動作を開始し、メモリプール、動き推定器、動き補償器、離散余弦変換量子化器による各種タスク終了信号によってタスクを変換する(状態が遷移される)。すなわち、制御レジスタによるフレーム開始信号frame_startによって遊休状態IDLEからタスク0(T0)に遷移する。メモリプールが探索領域マクロブロック輝度データ書き込み完了信号py_write_endを発生すれば、タスクスケジュラーはタスク1(T1)タスクを転換する。また、基準マクロブロック輝度データ書き込みの完了信号cy_write_endが発生すれば、タスク2(T2)に遷移する。基準マクロブロック色差データ書き込み完了信号ccbr_write_endと動き推定完了信号me_endとが発生すれば、タスク3(T3)に遷移する。外部フレームメモリへの動きベクタの書き込みが終了し(mv_write_end)、輝度成分に対する動き補償が完了すれば(mc_y_end)タスク4(T4)に遷移する。色差データに対する動き補償が完了して(mc_cbcr_end)輝度成分に対するDCTQタスクが完了すれば(dctq_y_end)タスク5(T5)に遷移する。タスクT5からタスク T6への遷移の時に要求される信号は動き推定終了信号me_endと色差成分に対するDCTQ終了信号dctq_cbcr_endでとある(図14A参照)。ここで、水平方向の最後のマクロブロック(この時、me_mbx=M−1)に対しては動き推定、動き補償、DCTQが順次に実行される。したがって、最後のマクロブロックに対する動き推定が終わって動きベクタが伝達されれば、me_mbx=Mになる。この時、色差成分に対するDCTQが終わる時(dctq_cbcr_end)動き推定終了信号は発生しないので、タスクT5からタスクT6に遷移されなくなる。したがって、最後のマクロブロックに対してはme_end信号に構わず、dctq_cbcr_end信号だけでタスクT5からタスクT6に遷移するようにするために、常に真である論理式me_mbx==Mをme_endと論理和演算した(me_end||me_mbx==M)。
同様に、タスクT6からタスクT8への遷移の時に必要な信号は動きベクタ伝達終了信号mv_write_end、輝度ブロックに対する動き補償終了信号mc_y_end、再構成フレーム書き込み終了信号recon_write_end、輝度成分に対する可変長符号化終了信号coef_y_write_endである(図14A参照)。ここでも水平方向の最後のマクロブロックに対する可変長符号化終了信号が発生する時、動きベクタ伝達終了信号および輝度成分に対する動き補償終了信号が発生しないので、mv_write_end||me_mbx==M、mc_y_end||mc_mbx=Mを使用した。
タスク8では、全体フレームに対する処理が完了せず、水平方向へのマクロブロックに対する処理が完了しなければ、T8→T9→T6→T8に循環しながら状態を遷移する。または現在処理されたマクロブロックの個数が全体マクロブロックの個数と同一であり(op_unit==op_cnt)、現在マクロブロックの水平方向の位置がM(水平方向のマクロブロックの個数)と同一であり(mx==M)、現在マクロブロックの垂直方向のフレーム位置がフレームの垂直方向の最後のマクロブロックの個数と同一であり(nx==N)、色差成分の量子化係数に対する可変長符号が完了すれば(coef_cbcr_write_end)、すなわち全体一フレームに対する処理が完了すれば、タスク8から遊休状態に遷移して新しいフレームに対する動作が開始されることを待つようになる。または、現在処理されたマクロブロックの個数が全体マクロブロックの個数と同一ではなく(op_unit!=op_cnt)(すなわち、全体フレームに対する処理が完了しなく)、色差成分に対する量子化係数の可変長符号が終わって(coef_cbcr_write_end)、そして水平方向の最後のマクロブロックが処理されたら(mx==M)、タスク0に遷移し、次の水平ラインのマクロブロックに対する処理が進行される。
一方、全体マクロブロックに対する処理が終わらず、また水平ラインのマクロブロックに対する処理が終わらなければ(op_unit!=unit && mx!M)、タスクT8からタスクT9に遷移する。この時、図14Aで一番目のタスクT8で、色差成分に対する動き補償が終わって(mc_cbcr_end)、輝度成分に対するDCTQが終わって(dctq_y_end)、色差成分の量子化係数に対する可変長符号が終われば(coef_cbcr_write_end)、タスクT9に遷移する。一方、二番目のタスクT8からT9への遷移の時には、mc_cbcr_end、dctq_y_end、coef_cbcr_write_end信号だけではなく、輝度マクロブロックPYに対する書き込み終了信号py_write_endも必要である。したがって、py_write_end信号も考慮しなければならない。一方、一番目のT8で色差成分に対する動き補償が終われば(mc_cbcr_end)、mx[1:0]=1状態(mxの最下位二つのビットは‘01')であり、二番目のT8で色差成分に対する動き補償が終われば(mc_cbcr_end)、mx[1:0]=2(mxの最下位の二つのビットは‘10’)状態である。したがって、すべての場合におけるタスク8からタスク9への遷移を保障するため、図示したように (((py_write_end)&&mx[1:0]==2'b10)||mx[1:0]!=2’10)||mem_mbx==M)が加えられた。
一方、図14Aを参照すると、動き推定が終わって(me_end)、色差成分に対するDCTQが終われば(dctq_cbcr_end) 一番目のタスク9からタスク6に遷移する。一方、二番目のタスク9からタスク6に遷移するためには、me_end、dctq_cbcr_endだけではなく、基準マクロブロック輝度データに対する書き込み動作が完了しなければならない(cy_write_end)。そして、三番目のタスク9からタスク6に遷移するためには基準マクロブロック色差データに対する書き込み動作が完了しなければならない(ccbccr_write_end)。一方、三番目のタスク9が終わればmx[1:0]=3になる。このような状況を考慮して、タスク9からタスク6に遷移するためには(me_end||me_mbx==M)&&dctq_cbcr_end&&((((cy_write_end && mx[1:0]==2'b10) || mx[1:0]!=2’b10) && ((ccbccr_write_end && mx[1:0]==2'b11 || mx[1:0] != 2’b11) || mem_mbx == M)条件を満足しなければならない。
一方、スライス単位でマクロブロックが処理されることを支援するためにタスクT8から待機状態Waitに遷移することにした。すなわち、初めに設定したスライド単位処理が完了したが(op_unit==op_cnt)、全体フレームに対する処理が終わらなければ(mx!=M||my!=N)、タスクT8から待機状態Waitに遷移する。タスク8からタスク9への遷移で前に説明したように、すべてのタスク8から待機状態への遷移を担保にするため(((py_write_end) && mx[1:0]==2'b10) || mx[1:0]!=2’10) || mem_mbx==M || mx==M)が考慮されなければならない。したがって、図示したように、タスク8から待機状態への遷移はop_unit==op_cnt && (mx!=M || my!=N)&&((mc_cbcr_end && dctq_y_end) || mx==M) && coef_cbcr_write_end && (((py_write_end) && mx[1:0]==2'b10) || mx[1:0]!=2’10) || mem_mbx==M || mx==M)条件を満足しなければならない。
待機状態でスライス単位処理開始信号(op_start)が制御レジスタによって発生し、水平方向へのすべてのマクロブロックの処理が終われば(mx==M)、タスク0に遷移する。一方、スライス単位処理開始信号(op_start)が制御レジスタによって発生し、水平方向へのすべてのマクロブロックに対する処理が終わらなければ(mx!=M)、タスク9に遷移する。
図18はイントラ符号化モード時のタスクスケジュラーの状態遷移を図示する。図18、図14Bおよび図16Bを参照すると、遊休状態で制御レジスタによるframe_start信号によってタスク1に遷移し、cy_write_end 信号によってタスク2に遷移し、信号ccbccr_write_endタスク4に遷移し、信号dctq_y_endが発生すればタスク5に遷移し、信号dctq_cbcr_endが発生すればタスク6に遷移する。タスク6で、基準マクロブロック色差データに対する書き込み動作を考慮して(((ccbccr_write_end&&mx[1:0]==2b11)||mx[1:0]!=2b11) ||mem_mex==m)条件を満足し、輝度成分に対する動き補償が終わって(mc_y_end ||mc_mbx==M)、輝度成分の量子化係数に対する可変長符号が終わって(coef_y_write_end)、再構成フレーム貯蔵が終われば(recon_write_end)、タスク8に遷移する。タスク8で遊休状態およびタスク1に遷移する動作は図17と同一である。また、待機状態でタスク9およびタスク1に遷移する動作も図17と同一である。一方、動き補償が行なわれないので、図17のタスク8から待機状態への遷移で色差成分に対する動き補償完了信号mc_cbcr_endが不要であり、信号py_write_endに代えて信号cy_write_endが使用される。タスク8終了時点でmx「1:0」=3であるので、図17のmx[1:0]==2'10は図18のイントラ符号化モードではmx[1:0]==2’b11に変わる。このようなことはタスク8からタスク9への遷移時にも同一に適用される。
図19は複号化イントラモード時のタスクスケジュラーの状態遷移を図示する。図15A、図16Cおよび図19を参照すると、遊休状態で信号frame_startによってタスク0に遷移する。信号py_write_end(輝度成分に対する書き込み動作が完了すれば)によってタスク3に遷移し、信号mc_y_end(輝度成分に対する動き補償が完了して)とcoef_y_read_end(外部メモリまたは可変長複号器から輝度量子化係数に対する読み出し動作が完了すれば)とが発生すれば、タスク4に遷移し、信号mc_cbcr_end(色差信号に対する動き補償が完了して)、coef_cbcr_read_end(外部メモリまたは可変長複号器から色差量子化係数に対する読み出し動作が完了して)、iqidct_y_endが発生すれば(輝度成分に対する逆量子化逆離散余弦変換が完了)タスク5に遷移し、信号iqidct_cbcr_endが発生すれば(色差成分に対する逆量子化逆離散余弦変換が終了すれば)タスク6に遷移する。
タスク6では、全体フレームに対する処理が完了せず、水平方向へのマクロブロックに対する処理が完了しなければ、T6→T7→T8→T9→6循環しながら状態を遷移する。または現在処理されたマクロブロックの個数が全体マクロブロックの個数と同一であり、(op_unit==op_cnt)、現在マクロブロックの水平方向の位置がM(水平方向のマクロブロックの個数)と同一であり(mx==M)、現在マクロブロックの垂直方向のフレーム位置がフレームの垂直方向の最後のマクロブロックの個数と同一であり(my==N)、再構成フレーム貯蔵が終われば(recon_write_end)、すなわち全体一フレームに対する処理が完了すれば、タスク8で遊休状態IDLEに遷移して新しいフレームに対する動作が開始されることを待つようになる。または、現在処理されたマクロブロックの個数が全体マクロブロックの個数と同一ではなく(op_unit!=op_cnt)(すなわち、全体フレームに対する処理が完了しなく)、水平方向の最後のマクロブロックが処理され(mx==M)、再構成フレーム貯蔵が終われば(recon_write_end)、すなわち、水平方向にすべてのマクロブロックに対する処理が終われば、タスク0に遷移して次の水平ラインのマクロブロックに対する処理が実行される。
一方、全体マクロブロックに対する処理が終わらず、また水平ラインのマクロブロックに対する処理が終わらず(op_unit!=unit && mx!M)、輝度成分に対する動き補償が終わって(mc_y_end)、再構成フレーム貯蔵が終われば(recon_write_end)、タスクT6からタスクT7に遷移する。タスク7で外部メモリから輝度成分の量子化係数に対する読み出しが終われば、タスク8に遷移する。タスク8で、色差成分に対する動き補償が終了して(mc_cbcr_end)、外部メモリから色差成分の量子化係数に対する読み出しが終了して(coef_cbcr_read_end)、色差成分に対する逆量子化および逆離散余弦変換が終了すれば(iqidct_y_end)、タスク9に遷移する。
すべてのタスク9からタスク6への遷移の時には色差成分に対する逆量子化および逆離散余弦変換終了(iqidct_cbcr_end)が必要であるだけではなく、場合によっては、タスク9からタスク6への遷移のために輝度成分書き込み終了(py_write_end)が必要な場合もある。また、二番目のタスク9が終わる時点でmx[1:3]=3(mxの最下位の二つのビットが‘11’)状態である、したがって、すべてのタスク9からタスク6への遷移を保障するために図示したように、iqidct_cbcr_end && (((py_write_end && mx[1:0]==2‘b11 || mx[1:0]!=2’b11 || mem_mbx==M) 条件を満足しなければならない。
一方、スライス単位でマクロブロックが処理されることを支援するためにタスクT6から待機状態Waitに遷移するようにした。すなわち、初めに設定したスライド単位処理が完了したが(op_unit==op_cnt)、全体フレームに対する処理が終わらず(mx!=M||nx!=N)、再構成フレーム書き込みが終わって(recon_write_end)、水平ラインの最後のマクロブロックを考慮した輝度成分に対する動き補償が終われば(mc_y_end||mx==M)、タスクT6から待機状態Waitに遷移する。
待機状態でスライス単位処理開始信号op_startが制御レジスタによって発生し、水平方向へのすべてのマクロブロックの処理が終われば(mx==M)、タスク0に遷移する。一方、スライス単位処理開始信号op_startが制御レジスタによって発生して水平方向へのすべてのマクロブロックに対する処理が終わらなければ(mx!=M)、タスク7に遷移する。
図20は複号化イントラモードの時のタスクスケジュラーに対する状態遷移を図示する。
図20、図15B、および図16Dを参照して、遊休状態IDLEで制御レジスタによるframe_start信号によってタスク3に遷移する。タスク3でcoef_y_end 信号によってタスク4に遷移し、coef_cbcr_read_endおよびiqidct_y_endによってタスク5に遷移し、iqidc_cbcr_endによってタスク6に遷移する。
複号化イントラモードの場合、動き補償が実行されない。したがって、タスク6で待機状態、遊休状態、タスク7への遷移は輝度成分に対する動き補償mc_y_endがないことを除いては図19の複号化インタモード時と同一である。
一方、図13に示したタスクスケジュラーが生成するタスク制御信号を各データ処理単位によってタスク別に要約すれば、図21乃至図24と同様であり、このようなタスク制御信号によるメモリプール、動き推定器、動き補償器、離散余弦変換量子化器の状態遷移は図25乃至図28に示したとおりである。
図21はメモリプール、図22は動き推定器、図23は動き補償器、図24は離散余弦変換量子化器DCTQのためのタスク制御信号の発生を示した。図21で、horizontal_end信号は水平方向に残っているマクロブロックの個数が三つの以下である場合、これを知らせるためのものである。例えば、VGA解像度を支援する場合、マクロブロックの水平方向位置は6ビットで構成される。また、水平方向のマクロブロックを4個のマクロブロック単位で区分する時、最後に残るマクロブロックの数は0、1、2、3のうちの一つの場合になる。すなわち、mem_mbxの上位4ビット[5、2]がmxlastの上位4ビットと同一であれば(すなわち、一水平ラインで残っているマクロブロックの数が0〜3個であれば)、horizontal_end 信号が発生する。この時、mxは‘111100’、‘111101’、‘111110’、または‘111111’ 値のうちのいずれか一つを有するであろう。horizontal_end信号が発生した後には残っているマクロブロック数だけデータメモリに貯蔵される。また、水平領域のすべてのマクロブロックに対する処理が終わるか(mx==M)、全体マクロブロックに対する処理が終われば(op_unit==op_cnt)、またhorizontal_end信号が消滅して次の水平ライン、または次のフレームの一番目のラインのマクロブロックに対するメモリアクセスが行なわれるようにする。
一方、符号化インタモードにおいて、タスク6で、mxの最下位の二つのビットが‘11’の場合、py_write enableを発生して以前フレームの輝度ブロックPYに対するメモリ書き込みが起きるようにする。また、符号化インタモードにおいて、タスク9で、mxの最下位の二つのビットが‘11’の場合、ccbccr_write enableを発生して現在フレームの色差ブロックCCb、CCrに対するメモリ書き込みが起きるようにする。また、タスク9でmxの最下位の二つのビットが‘10'の場合、cy_write enableを発生して輝度ブロックCYに対するメモリ書き込みが起きるようにする。
符号化イントラモードの場合、動き推定が起きないのでpy_write_enable信号の発生はなく、現在フレームの輝度ブロックCYおよび色差ブロックCCb、CCrに対するメモリ書き込みを指示する信号cy_write enable、ccbccr_write_enable信号が発生する。タスク9でmxの最下位の二つのビットが‘11’の場合、ccbccr_write enableを発生して現在フレームの色差ブロックCCb、CCrに対するメモリ書き込みが起きるようにし、mxの最下位の二つのビットが‘10'の場合、py_write enableを発生して現在フレームの輝度ブロックCYに対するメモリ書き込みが起きるようにする。
複号化インタモードの場合、py_write enable信号が発生する。タスク6でmxの最下位の二つのビットが‘11'の場合、py_write enableを発生して以前フレームの輝度ブロックPYに対するメモリ書き込みが起きるようにする。
次に、図22を参照すれば、タスクスケジュラーはme_start enable、mv_start enableを発生してインタモードで動き推定器に動き推定および動きベクタ伝達タスクを実行するようにする。
次に、図23を参照すると、タスクスケジュラーはmc_start enable、mc_cbcr_start enableを発生して動き補償器に輝度成分に対する動き補償および色差成分に対する動き補償を実行するようにする。
次に、図24を参照すると、タスクスケジュラーは符号化インタ/イントラモードの時にdctq_y_start enalble、dctq_cbcr_start enable、coef_y_write enalbe、recon_write enable、coef_cbcr_write enable信号を発生して離散余弦変換量子化器に提供する。一方、複号化インタ/イントラモード時にはcoef_y_read enable、coef_cbcr_read enable、iqidct_y_start enable、iqidct_cbcr_start enable、recon_write enableなどの信号を発生して離散余弦変換器に提供する。
図25はメモリプールの状態遷移を図示する。全体的に探索領域データメモリPY、基準マクロブロック輝度成分データメモリCY、基準マクロブロック色差成分データメモリCCb/CCrにフレームメモリから当該データをアクセスして貯蔵する機能で区分されており、タスクスケジュラーでタスク制御信号を受けて動作し、タスクスケジュラーに各々の実行が完了したことを知らせる。タスクスケジュラーからタスク開始信号、例えば、py_write、cy_write、ccbccr_writeなどによってフレームメモリをアクセスする状態になり、アクセスが終われば、それに相応するタスク終了信号py_write_end、cy_write_end、ccbccr_write_endを発生して待機状態になる。
メモリプールはタスクスケジュラーからタスク開始信号を受け、そこに相応するタスクを実行してタスク開始信号によってタスクを転換する。探索領域データメモリPYの場合、遊休状態IDLEで符号化モードの時には探索領域データメモリ書き込みを指示する信号py_writeによって、初めにはバースト8にアクセスされ、以後からはバースト16にアクセスされる(〜horizontal_end)。バースト16にアクセスしていて、水平方向に残っているマクロブロックが3個である場合(horizontal_end && mxlast[1:0]==2‘b11))ペディング領域を考慮してバースト16にアクセスされる。一方、水平方向に残っているマクロブロックの数が0であれば(mxlast[1:0]==2’b00)、ペディング領域を考慮してバースト4にアクセスされ、二つ、または一つが残っていれば(mxlast[1:0]==2‘b01||2’b10)ペディング領域を考慮してまずバースト8にアクセスされ、続いてバースト 4にアクセスが行なわれる。
待機状態でタスクスケジュラーから信号cy_writeを受ければ、外部フレームメモリから輝度成分が基準マクロ輝度データメモリに貯蔵される。基準マクロブロック輝度データはバースト16にアクセスされる(〜horizontal)。バースト16に続いてアクセスされて、残っている水平方向のマクロブロックが三つの以下になればhorizontal信号が発生する。この時、水平方向に残っているマクロブロックが3個である場合(horizontal_end && mxlast[1:0]==2‘b11))、 ペディング領域を考慮してバースト16にアクセスされる。一方、水平方向に残っているマクロブロックの数が0であれば(mxlast[1:0]==2’b00)、ペディング領域を考慮してバースト4にアクセスされ、1または2であれば(mxlast[1:0]==2‘b01||2’b10))、ペディング領域を考慮してまずバースト8にアクセスされ、続いてバースト4にアクセスされる。
待機状態でタスクスケジュラーから信号ccbccr_writeが発生すれば、フレームメモリから基準マクロ色差データメモリに色差成分が貯蔵される。色差成分は初めにはバースト8にアクセスされる(〜horizontal)。バースト8にアクセスが繰り返されて残っている水平方向へのマクロブロックが3個以下になればhorizontal信号が発生する。この時、水平方向に残っているマクロブロックが3個である場合(horizontal_end && mxlast[1:0]==2‘b11))、ペディング領域を考慮してバースト8にアクセスされる。一方、水平方向に残っているマクロブロックの数が0であれば(mxlast[1:0]==2’b00)、ペディング領域を考慮してバースト2に(シングルモード)アクセスされ、1または2であれば(mxlast[1:0]==2‘b01||2’b10))ペディング領域を考慮してまずバースト4にアクセスされ、続いてバースト2にアクセスされる。
図26乃至図28は各々動き推定器、動き補償器と離散余弦変換量子化器DCTQの状態遷移を示す。図26を参照すると、動き推定器は遊休状態IDLEでタスクスケジュラーから受けた動き推定開始信号me_startによって動き推定を実行する状態ME opになり、動き推定終了信号me_endを発生して待機状態Waitになる。待機状態Waitで動きベクタ書き込み開始信号(mv_write)を受けて動きベクタを外部メモリに書き込む動作を実行する状態MV writeになり、その動作が終了すれば、動きベクタ書き込み終了信号mv_write_endを生成して遊休状態IDLEになる。
図27を参照すると、動き補償器はパイプライン動作を効率的にするために輝度と色差成分とに対して動き補償を区分して実行する。遊休状態でmc_y_start信号によって輝度成分に対して動き補償を実行し、mc_y_end信号を発生して待機状態になる。待機状態でmc_cbcr_start信号によって色差成分に対する動き補償を実行する状態MC Cb/Cr opになり、mc_cbcr_end信号によって遊休状態になる。
図28を参照すれば、離散余弦変換量子化器DCTQの状態は遊休状態IDLE、輝度成分に対する離散余弦変換量子化を実行する状態DCTQ Y、輝度成分に対する量子化係数を外部メモリに貯蔵する状態COEF Y Write、色差成分に対する離散余弦変換量子化を実行する状態DCTQ Cb/Cr、色差成分に対する量子化係数を外部メモリに貯蔵する状態COEF Cb/Cr Write、再構成フレームを貯蔵する状態recon Write、外部メモリから量子化係数を読み出す状態COEF Y Read、COEF Cb/Cr Read、逆量子化逆離散余弦変換を実行する状態IQIDCT Y、 IQIDCT Cb/Cr、待機状態Waitを含む。各状態の間には待機状態Waitが存在し、各状態でタスク終了信号(符号化動作:dctq_end、coef_y_end、recon_write_end、dctq_cbcr_end、coef_cbcr_write_end、複号化動作:coef_y_read_end、iqidct_y_end、coef_cbcr_read_end、iqidct_cbcr_end、 recon_write_end)によって待機状態に遷移し、待機状態でタスク開始信号(符号化動作:dctq_y_start、coef_y_write、dctq_cbcr_start、recon_write、coef_write、複号化動作:coef_y_read、iqidct_y_start、coef_cbcr_read、iqidct_cbcr_start、recon_write)によって個々状態に遷移する。
遊休状態でdctq_y_start信号によって符号化動作が開始され、coef_y_read信号によって複号化動作が開始される。符号化動作の場合、色差成分に対する符号化が終了し、水平方向のマクロブロックに対するすべての処理が終了すれば、遊休状態に遷移して次のラインのマクロブロックに対する処理を指示するdctq_y_start信号を待つようになる。複号化動作の場合、再構成フレーム貯蔵が終われば(recon_write_end)遊休状態に遷移する。
可変長符号器を使用する場合、dctq_y_end信号が発生すれば輝度成分に対する量子化係数に対する可変長符号化が実行され、その後に、dctq_cbcr_end信号が発生されていれば、色差成分に対する量子化係数に対する可変長符号化が実行される。すなわち、DCTQ Y状態が終了すれば、すぐ可変長符号器によって輝度成分に対するDCTQタスク実行の結果(輝度成分に対する量子化係数)に対して可変長符号化が実行される。同様にDCTQ Cb/Cr状態が終了すれば、すぐ可変長符号器によって色差成分に対するDCTQタスク実行の結果(色差成分に対する量子化係数)に対して可変長符号化が実行される。
本発明によるビデオコーデックの消費電力を最小化するために二つの方法を適用する。一番目の方法は符号化と複号化、インタとイントラモードの場合に動作しないデータ処理単位にクロックを供給しない全域電力管理(Global Power Management)を実行し、二番目の方法は各データ処理単位がタスク別にパイプライン動作を実行して各データ処理単位の実行時間は違うので、実行する間にだけクロックを供給する動的クロックゲーティング方法(Dynamic Clock Gating Method)を使用する。各データ処理単位の機能実行はタスクスケジュラーが生成する開始信号と実行が終わることを知らせる完了信号との間の区間で動作をするので、図29のように実行区間t1〜tnでだけクロックを供給するようにする。
開始信号がt0時点で活性化されれば、システムクロックの下降エッジで(t1で)クロック活性化信号が活性化される。完了信号がt(n−1)時点で活性化されれば、次のシステムクロックの下降エッジtnでクロック活性化信号が不活性化される。したがって、t1〜t(n)区間の間にだけ(すなわち、データ処理単位が動作を実行する期間の間にだけ)ゲーティングされたクロックが発生し、この区間でだけデータ処理単位が動作する。
以上、本発明に対してその望ましい実施形態を説明した。本発明が属する技術分野で通常の知識を持つ者は本発明が本発明の本質的な特性から逸脱しない範囲で変形された形態に実現されることができることを理解することができるであろう。したがって、本開示の実施形態は限定的な観点ではなく、説明的な観点で考慮されなければならない。本発明の範囲は上述の説明ではなく、特許請求の範囲に示しており、それと同等の範囲内にあるすべての差異は本発明に含まれるものと解釈されなければならない。