(57)【要約】      （修正有）【課題】バススレーブを共有するシステムにおいてアクセスの競合を減らすことのできるＤＭＡコントローラを提供する。【解決手段】１群のデータを転送元のＲＯＭ２０から転送先のバススレーブであるメモリ３０に転送するＤＭＡコントローラ１００は、バッファと、転送制御部とを具備する。転送制御部は、所定のデータ量（例えば５１２バイト）のブロックを単位としてバッファからメモリ３０に転送する動作を、時間的に分散させて実行する。【選択図】図１
2015099477.tif 000002
【特許請求の範囲】
【請求項１】
１群のデータを転送元のバススレーブから転送先のバススレーブに転送するＤＭＡコントローラであって、
バッファと、
前記１群のデータを、所定のデータ量のブロックを単位として前記転送元のバススレーブからバッファに格納させる動作、または、前記バッファに格納させたブロックを前記転送先のバススレーブに転送する動作、を時間的に分散させて実行する転送制御部と、
を具備することを特徴とするＤＭＡコントローラ。
【請求項２】
前記バッファは、前記所定のデータ量の記憶容量を有する第１バッファおよび第２バッファを含み、
前記転送制御部は、前記第１バッファまたは第２バッファの一方に対して前記転送元のバススレーブからのブロックを格納させた場合に、前記第１バッファまたは第２バッファの他方からブロックを読み出して、前記転送先のバススレーブに転送する
ことを特徴とする請求項１に記載のＤＭＡコントローラ。
【請求項３】
前記転送制御部は、
所定のデータ転送速度に応じた期間のウェイトをかけてから、各ブロックを前記転送先のバススレーブに転送するとともに、
前記一のブロックを前記転送先のバススレーブに転送するのを遅らせた場合、当該一のブロックの次のブロックを前記転送先のバススレーブに転送するまでのウェイトを減少させる
ことを特徴とする請求項１または２に記載のＤＭＡコントローラ。
【請求項４】
前記転送制御部は、
所定のデータ転送速度に応じた期間のウェイトをかけてから、各ブロックを前記転送先のバススレーブに転送するとともに、
前記一のブロックを前記転送先のバススレーブに転送するのを遅らせた場合、当該一のブロックの次のブロックを前記転送先のバススレーブに転送するまでのウェイトを減少させない
ことを特徴とする請求項１または２に記載のＤＭＡコントローラ。
【請求項５】
前記転送制御部は、
所定のデータ転送速度に応じた期間のウェイトをかけてから、各ブロックを前記転送先のバススレーブに転送するとともに、
外部から入力されるイベント信号によって前記ウェイトを変更する
ことを特徴とする請求項１または２に記載のＤＭＡコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＤＭＡ（Direct Memory Access)方式によりデータを転送するＤＭＡコントローラに関する。
【背景技術】
【０００２】
処理能力が高くないＣＰＵ（Central Processing Unit）を含むシステムによって動画を表示させる場合、専用のハードウェア、例えばデコーダやラスタライザなどを設けて、当該ＣＰＵの代わりに、動画の表示処理の一部を実行させる場合がある。一般に、動画データは、膨大であるので、当該動画データは、比較的低速であるが安価な低速メモリに格納される。当該動画データは、ＤＭＡコントローラによってバスを介して高速メモリに転送されるとともにデコーダやラスタライザが当該高速メモリにアクセスして必要な処理を並列的に実行する構成となる。膨大な動画データはＤＭＡコントローラによって高速メモリにＤＭＡ転送されるので、ＣＰＵは、その分、負荷が低減されて、他の必要な処理を実行することができる。
【０００３】
一方、ＤＭＡコントローラやＣＰＵなどのバスマスタが高速メモリを共有する構成では、同時に複数のバスマスタが同一のバススレーブ（ここでは高速メモリ）にアクセスすることはできないので、バススレーブにアクセスが集中すると、あるバスマスタが所定の時間内に当該バススレーブに対するデータ転送を完了することができない、という不都合が生じる。
そこで、バス調停器が、残りの転送時間の余裕度に応じてデータ転送の優先順位をアクセス単位でダイナミックに変更する技術が提案されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−２０９５００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記技術では、アクセスが競合した瞬間でのみ調停が実行される。このため、優先順位の低いアクセスを実行中に、優先度の高いアクセスが発生しても、優先順位の低いアクセスの実行が終了するまで、優先度の高いアクセスは待たされることが考えられる。
このため、動画を表示させる場合のように、ＤＭＡコントローラや、それ以外の他のバスマスタが並列的にバススレーブの高速メモリにアクセスする構成では、優先順位の高い動画の表示処理に関わるアクセスが待たされ、結果的に、いわゆるコマ落ちが発生する可能性が高くなる。
本発明は、このような事情に鑑みてなされたものであり、その目的の一つは、バススレーブを共有するシステムにおいてアクセスの競合を減らすことができるＤＭＡコントローラを提供することにある。
【課題を解決するための手段】
【０００６】
上記目的を達成するために、本発明の一態様に係るＤＭＡコントローラは、１群のデータを転送元のバススレーブから転送先のバススレーブに転送するＤＭＡコントローラであって、バッファと、前記１群のデータを、所定のデータ量のブロックを単位として前記転送元のバススレーブからバッファに格納させる動作、または、前記バッファに格納させたブロックを前記転送先のバススレーブに転送する動作、を時間的に分散させて実行する転送制御部と、を具備することを特徴とする。
この一態様に係るＤＭＡコントローラによれば、ブロックが時間的に集中して、転送元のバススレーブからバッファへの格納されること、または、バッファから転送先のバススレーブへの転送されること、がない。このため、当該バススレーブを共有する他のバスマスタからすれば、ＤＭＡコントローラがブロックを転送しない期間に当該バススレーブにアクセス（読出または格納）することができるので、当該バススレーブに対するアクセスの競合を減らすことができる。
なお、１群のデータとは、（ＣＰＵによって発行される）転送指示によって、転送元のバススレーブから転送先のバススレーブに転送すべきデータの全体をいう。
【０００７】
上記一態様において、前記バッファは、前記所定のデータ量の記憶容量を有する第１バッファおよび第２バッファを含み、前記転送制御部は、前記第１バッファまたは第２バッファの一方に対して前記転送元のバススレーブからのブロックを格納させた場合に、前記第１バッファまたは第２バッファの他方からブロックを読み出して、前記転送先のバススレーブに転送する構成としても良い。
この構成によれば、第１バッファと第２バッファとにおいて、転送元のバススレーブからのブロックの読み出しと、転送先のバススレーブへのブロックの転送を同時に実行できるので、転送の効率化が図られる
この構成によれば、第１バッファと第２バッファとにおいて、転送元のバスマスタからのブロックが格納されるものと、転送先のバスマスタに転送されるブロックの読み出し元となるものとが別々になるので、転送の効率化が図られる。
【０００８】
上記一態様において、前記転送制御部は、所定のデータ転送速度に応じた期間のウェイトをかけてから、各ブロックを前記転送先のバススレーブに転送するとともに、前記一のブロックを前記転送先のバススレーブに転送するのを遅らせた場合、当該一のブロックの次のブロックを前記転送先のバススレーブに転送するまでのウェイトを減少させる構成としても良い。この構成によれば、単位時間におけるデータ転送量（データ転送速度）を均一に保つことができる。
なお、転送制御部が、一のブロックを転送先バススレーブに転送するのを遅らせた場合とは、他のバスマスタによって当該転送先バススレーブが使用されている場合である。また、所定のデータ転送速度とは、バススレーブにアクセスするバスマスタに割り当てられた比率によって後述するように定められる。
【０００９】
上記一態様において、前記転送制御部は、所定のデータ転送速度に応じた期間のウェイトをかけてから、各ブロックを前記転送先のバススレーブに転送するとともに、前記一のブロックを前記転送先のバススレーブに転送するのを遅らせた場合、当該一のブロックの次のブロックを前記転送先のバススレーブに転送するまでのウェイトを減少させない構成としても良い。この構成によれば、単位時間におけるデータ転送量（データ転送速度）を、所定の値よりも抑えることができる。
【００１０】
上記一態様において、前記転送制御部は、所定のデータ転送速度に応じた期間のウェイトをかけてから、各ブロックを前記転送先のバススレーブに転送するとともに、外部から入力されるイベント信号によって前記ウェイトを変更する構成としても良い。この構成によれば、イベント信号によってウェイトが変更されるので、単位時間におけるデータ転送量（データ転送速度）を動的に制御することができる。
【図面の簡単な説明】
【００１１】
【図１】実施形態に係るＤＭＡコントローラを含むシステムの構成を示すブロック図である。
【図２】システムにおける処理の概要を示す図である。
【図３】ＤＭＡコントローラの構成を示すブロック図である。
【図４】ＤＭＡコントローラにおけるリード転送処理を示すフローチャートである。
【図５】ＤＭＡコントローラにおけるリード転送処理を示すフローチャートである。
【図６】ＤＭＡコントローラにおけるライト転送処理を示すフローチャートである。
【図７】ＤＭＡコントローラにおけるライト転送処理を示すフローチャートである。
【図８】各ブロックにおけるリード転送およびライト転送の一例を示す図である。
【図９】実施形態と比較例とにおけるＤＭＡ転送の対比を示す図である。
【図１０】本発明のＤＭＡコントローラにおけるメモリ帯域の割当の一例を示す図である。
【図１１】本発明のＤＭＡコントローラにおけるメモリ帯域の割当の一例を示す図である。
【図１２】比較例のＤＭＡコントローラにおけるメモリ帯域の割当の一例を示す図である。
【図１３】比較例のＤＭＡコントローラにおけるメモリ帯域の割当の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施形態について図面を参照して説明する。
【００１３】
図１は、実施形態に係るＤＭＡコントローラ１００を含むシステム１の全体の構成を示すブロック図である。
この図に示されるようにシステム１は、ＣＰＵ１０、ＲＯＭ（Read Only Memory）２０、メモリ３０、デコーダ４０、ラスタライザ５０、ディスプレイコントローラ６０、および、表示部７０を含み、これらのうち、ＲＯＭ２０および表示部７０を除き、バスＢを介して互いに接続されている。
このシステム１は、圧縮された動画データをデコードした後、フレーム毎にラスタライズ（描画）して、表示部７０に表示させる処理（表示処理）を実行する。
【００１４】
図２は、この表示処理の概略的な流れを示す図である。
ＲＯＭ２０は、例えば書き替え可能なフラッシュメモリなどであり、動画データを圧縮した状態で、すなわち圧縮データとして記憶する。ＤＭＡコントローラ１００は、詳細については後述するが、ＲＯＭ２０に記憶された圧縮データを読み出して、メモリ３０に転送する。メモリ３０は、アクセス（格納および書込）が高速な、例えばＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）であり、ＤＭＡコントローラ１００とともに、ＣＰＵ１０、デコーダ４０、ラスタライザ５０、ディスプレイコントローラ６０に共有される。
デコーダ４０は、メモリ３０に転送された圧縮データを動画データにデコードして、メモリ３０に格納する。ラスタライザ５０は、メモリ３０に格納された動画データをラスタライズして、メモリ３０に割り当てられた描画領域３２に格納する。描画領域３２は、一種のフレームバッファである。ディスプレイコントローラ６０は、ラスタライズされたデータを描画領域３２から、走査（水平走査および垂直走査）の順に読み出し、表示部７０に供給して画面表示させる。
【００１５】
ところで、動画データは圧縮したとしても、データのサイズが数百メガバイトから数ギガバイトまでに及ぶ。このような動画データの圧縮データは、１つに限られず、条件や場面に応じた適切な動画を表示させるために複数の場合もあり得る。このため、ＲＯＭ２０には大容量であることが要求される。一般に、記憶素子においてアクセス速度と容量とは互いにトレードオフの関係にあるので、大容量のＲＯＭ２０からのアクセス（読出）は比較的低速にならざるを得ない。
このため、ＣＰＵ１０が、ＲＯＭ２０から圧縮データを、バスＢを介して読み出す構成では、ＣＰＵ１０に負荷がかかるだけなく、バスＢの占有時間が長くなる。そこで、本実施形態では、ＤＭＡコントローラ１００が、ＲＯＭ２０から圧縮データを（低速で）読み出した後に、一旦、メモリ３０に（高速で）転送する構成となっている。
【００１６】
ＣＰＵ１０は、メモリ３０を一時作業領域として各種の演算等を実行するとともに、当該演算の結果にしたがってデコーダ４０やラスタライザ５０などに命令を出す。また、ＣＰＵ１０は、動画の再生のために圧縮データが必要となったとき、ＤＭＡコントローラ１００に対して、ＲＯＭ２０から圧縮データをメモリ３０に転送するために、各種の設定を実行する。
【００１７】
図３は、ＤＭＡコントローラ１００の構成を示すブロック図である。
この図に示されるように、ＤＭＡコントローラ１００は、デマルチプレクサ１０２と、バッファ１０４と、マルチプレクサ１０６と、転送制御部１１０と、アップカウンタ１１４と、ダウンカウンタ１２４と、を含む構成となっている。
【００１８】
本実施形態において、バッファ１０４は、第１バッファ１０４ａと第２バッファ１０４ｂとに分けられる。第１バッファ１０４ａと第２バッファ１０４ｂとは、いずれも例えば５１２バイトの記憶容量を有するＦＩＦＯ（Fast In Fast Out）メモリであり、アクセス（格納および読出）については転送制御部１１０によって制御される。なお、第１バッファ１０４ａまたは第２バッファ１０４ｂのいずれか一方を指す場合に、一方のバッファと表記する場合がある。
デマルチプレクサ１０２は、選択信号Ｓel-Ａが例えばＨレベルであれば、入力端Ｉnに入力されたデータを実線で示されるように出力端ａから出力し、Ｌレベルであれば、破線で示されるように出力端ｂから出力する。マルチプレクサ１０６は、選択信号Ｓel-ＡがＨレベルであれば（当該選択信号Ｓel-Ａの否定信号がＬレベルであれば）、実線で示されるように入力端ｂに入力されたデータを出力端Ｏutから出力し、選択信号Ｓel-ＡがＬレベルであれば（当該選択信号Ｓel-Ａの否定信号がＨレベルであれば）、破線で示されるように入力端ａに入力されたデータを出力端Ｏutから出力する。
このように、バッファ１０４の入出力は、選択信号Ｓel-Ａによって、図において実線または破線のいずれかとなるように制御される。
【００１９】
転送制御部１１０は、ＣＰＵ１０からＤＭＡ転送指示があったとき、ＲＯＭ２０から圧縮データを読み出すとともに、５１２バイト毎に、一方のバッファ（第１バッファ１０４ａまたは第２バッファ１０４ｂのいずれか一方）にデマルチプレクサ１０２を介して格納（リード転送）する。また、転送制御部１１０は、他方のバッファから圧縮データを読み出して、マルチプレクサ１０６（およびバスＢ）を介してメモリ３０にライト転送する。
すなわち、ＤＭＡコントローラ１００は、１群の圧縮データを５１２バイト毎のブロックに区切ってＲＯＭ２０からメモリ３０にＤＭＡ転送する。このとき、転送制御部１１０は、リード転送する際の圧縮データの格納先と、ライト転送する際の圧縮データの読出元とを、第１バッファ１０４ａおよび第２バッファ１０４ｂとで交互に切り換える。
【００２０】
また、ＣＰＵ１０からのＤＭＡ転送指示には、ウェイト回数Ｗcと転送回数Ｔcとが含まれる。
ウェイト回数Ｗcは、１ブロックの圧縮データをライト転送してから、次の１ブロックの圧縮データをライト転送するまでの期間を、ウェイトのサイクル回数で示したものであり、転送制御部１１０のレジスタ１１２にセットされる。
ここで、ウェイトの１サイクルは、１ブロックのライト転送に要する時間、すなわち、５１２バイトのブロックを、バスＢを介してメモリ３０に転送するのに要する時間としている。ウェイト回数Ｗcについては、例えば後述するようなメモリ帯域に割り当てによって制限（または制約される）データ転送速度に応じて設定される。
データ転送速度の単位は、一般に「ビット／秒」で表されるが、ここでは、計算を簡単にするために、「ブロック／フレーム」とする。本実施形態において、１ブロックは５１２バイトとしており、また、１フレームは、例えば表示の垂直走査周波数が６０Ｈｚ（１秒あたり６０コマの表示）であれば、１６．７ミリ秒である。
ＤＭＡコントローラ１００が、例えば１フレーム当たり２ブロックを、ＲＯＭ２０からメモリ３０にＤＭＡ転送する場合、すなわちデータ転送速度として２ブロック／フレームとする場合を想定する。この場合に、１ブロックのライト転送に要する時間が０．４１８ミリ秒であれば、ウェイト回数Ｗcは、単位時間である１フレーム（１６．７ミリ秒）を、２ブロックのライト転送に要する時間（＝０．４１８×２ミリ秒）で除した「２０」に設定される。これにより、２０ウェイトにつき、１ブロックが（１ウェイトで）ＤＭＡ転送されるように設定される。
なお、実際には、ＣＰＵ１０が、データ転送速度に応じたウェイト回数ＷcをＤＭＡ転送指示する際に出力する構成となるが、後述するように、ウェイト回数Ｗcについては動的に切り替えられる場合もある。
このようにウェイト回数Ｗcについては、データ転送速度に応じて設定される。ここで、データ転送速度が低ければ、ウェイト回数Ｗcが大きくなる。ウェイト回数Ｗcが大きくなるにつれて、ＤＭＡコントローラ１００以外の他のバスマスタ（ＣＰＵ１０、デコーダ４０、ラスタライザ５０、ディスプレイコントローラ６０）が、メモリ３０にアクセスすることが可能な期間が長くなる。
【００２１】
転送回数Ｔcは、転送対象となる１群の圧縮データのデータ量をブロック数に換算した値である。例えば、圧縮データのデータ量が３０７２バイトであれば、転送回数Ｔcは、当該３０７２バイトを１ブロックの５１２バイトで除した「６」になる。なお、実際の圧縮データのデータ量は、上述したように数百メガバイトから数ギガバイト程度までに及ぶので、ここでの数値はあくまでも説明のための便宜上の値に過ぎない。また、ＣＰＵ１０から供給される転送回数Ｔcは、転送制御部１１０のレジスタ１２２にセットされる。
【００２２】
転送制御部１１０は、第１ブロックのリード転送が完了したとき、および、アップカウンタ１１４のカウント値Ｑ１がウェイト回数Ｗcに達したとき、アップカウンタ１１４のリセット端（Ｒes）にリセット信号を出力して、アップカウンタ１１４のカウント値Ｑ１をゼロにリセットする。
一方、アップカウンタ１１４は、ウェイトの周期に等しいクロックＣlkにしたがってカウント値Ｑ１を「１」ずつアップカウントする。すなわち、５１２バイトの１ブロックがメモリ３０にライト転送される時間（ウェイト）を単位として、カウント値Ｑ１がアップカウントされる構成となっている。
なお、クロックＣlkは、図示省略したクロックジェネレータによって生成される。
【００２３】
また、転送制御部１１０は、ＣＰＵ１０からＤＭＡ転送指示があったときの初期設定において、レジスタ１２２にセットされた転送回数Ｔcを、ダウンカウンタ１２４にセットするとともに、アップカウンタ１１４のカウント値Ｑ１がウェイト回数Ｗcに達したとき、ダウンカウンタ１２４にパルス信号を出力して、当該ダウンカウンタ１２４によるカウント値Ｑ２を「１」だけデクリメント（ダウンカウント）させる。
【００２４】
ＲＯＭ２０からメモリ３０に転送される１群の圧縮データのブロックについては、便宜的に、リード転送される順番で第１ブロック、第２ブロック、第３ブロック、…、と記載する場合がある。なお、１群の圧縮データのうち、最終ブロックは、転送回数Ｔcで示される第Ｔcブロックである。
【００２５】
ところで、ＲＯＭ２０からの読み出しは、メモリ３０へ書き込みと比較して低速であるので、１ブロック（５１２バイト）を一方のバッファにリード転送するのに要する時間は、同じデータ量を、バスＢを介してメモリ３０にライト転送するのに要する時間よりも長くなる。このため、一方のバッファへのリード転送が完了しないうちに、他方のバッファからのライト転送が完了している場合がある。換言すれば、他方のバッファからのライト転送が完了して当該他方のバッファが空になっていても、一方のバッファにおけるリード転送が完了していない場合がある。
このため、転送制御部１１０は、あるブロック（第１ブロックおよび第２ブロックを除く）のリード転送を次の場合に実行する。すなわち、あるブロックのリード転送が一方のバッファに対して開始される場合とは、当該ブロックの１つ前のブロックが、他方のバッファへのリード転送が完了している場合（条件Ａ）であって、かつ、当該一方のバッファにおいて、２つ前のブロックのライト転送がすでに完了して空になっている場合（条件Ｂ）である。
【００２６】
ただし、第１ブロックのリード転送については、１つ前のブロックが存在しないことから、条件Ａが要件にならないし、また、２つ前のブロックも存在しないことから、条件Ｂも要件にならない。すなわち、第１ブロックについては、ＣＰＵ１０からＤＭＡ転送指示があったとき、直ちに一方のバッファにリード転送することができる。また、第２ブロックのリード転送については、２つ前のブロックが存在しないことから、条件Ｂが要件にならない。このため、第２ブロックについては、第１ブロックが一方のバッファへのリード転送が完了したとき、他方のバッファにリード転送することができる。
【００２７】
一方、転送制御部１１０は、あるブロック（第１ブロックを除く）のライト転送については、１つ前のブロックのライト転送を開始してから、ウェイト回数Ｗcで示されるサイクル数だけのウェイトが経過したときに実行する。端的に言えば、転送制御部１１０は、あるブロックのライト転送については、１つ前のブロックのライト転送を開始してから、ウェイト回数Ｗcとウェイトの１サイクルとを乗じた期間だけウェイトして実行する。
ただし、第１ブロックでは１つ前のブロックが存在しない。このため、第１ブロックのライト転送については、ウェイトをかけることなく（第１ブロックのリード転送が完了していれば）、実行することができる。
【００２８】
このような転送制御部１１０によるリード転送およびライト転送について、図面を参照して説明する。
図４および図５は、各ブロックをリード転送するためのリード転送処理を示すフローチャートであり、図６および図７は、各ブロックをライト転送するためのライト転送処理を示すフローチャートである。
なお、リード転送処理とライト転送処理とは、互いに並行して実行される。また、以下においては説明の便宜上、奇数（１、３、５、…）ブロックは第１バッファ１０４ａに転送され、偶数（２、４、６、…）ブロックは第２バッファ１０４ｂに転送されるものとする。また、ここでは、ウェイト回数Ｗcおよび転送回数Ｔcについては、具体的な数値で特定しないで説明する。
【００２９】
まず、リード転送処理について図４および図５を参照して説明する。
転送制御部１１０は、ＣＰＵ１０からＤＭＡ転送指示があったとき、初期設定を実行する（ステップＳａ１１）。具体的には、転送制御部１１０は、当該ＣＰＵ１０から供給されるウェイト回数Ｗcをレジスタ１１２にセットし、当該ＣＰＵ１０から供給される転送回数Ｔcをレジスタ１２２にセットするとともに、当該転送回数Ｔcをダウンカウンタ１２４にセットする。
【００３０】
次に、転送制御部１１０は、選択信号Ｓel-ＡをＨレベルにする（ステップＳａ１２）。これにより、デマルチプレクサ１０２では出力端ａが選択される。
続いて、転送制御部１１０は、転送対象である１群の圧縮データの第１ブロックをＲＯＭ２０から読み出して、デマルチプレクサ１０２を介して、第１バッファ１０４ａに格納する（リード転送の開始、ステップＳａ１３）。
ここで、転送制御部１１０は、第１ブロックのリード転送が完了したか否かを判別する（ステップＳａ１４）。第１ブロックのリード転送が完了していないと判別すれば（ステップＳａ１４の判別結果が「Ｎｏ」であれば）、転送制御部１１０は、処理手順をステップＳａ１３に戻す。このため、第１ブロックのリード転送が完了するまで、転送制御部１１０は、ステップＳａ１３を実行することになる。
【００３１】
第１ブロックのリード転送が完了したならば（ステップＳａ１４の判別結果が「Ｙｅｓ」であれば）、転送制御部１１０は、選択信号Ｓel-Ａを反転してＬレベルとする（ステップＳａ１５）。これにより、デマルチプレクサ１０２では出力端ｂが選択され、マルチプレクサ１０６では入力端ａが選択される。
【００３２】
第１ブロックのリード転送が完了しているので、転送制御部１１０は、続く第２ブロックを、ＲＯＭ２０から読み出し、デマルチプレクサ１０２を介して第２バッファ１０４ｂに格納する（ステップＳａ１６、Ｓａ１７）。なお、ステップＳａ１６、Ｓａ１７は、ステップＳａ１３、Ｓａ１４と、リード転送の対象であるブロックと記憶先であるバッファとが異なる以外、同様である。
第２ブロックのリード転送が完了したならば（ステップＳａ１７の判別結果が「Ｙｅｓ」であれば）、転送制御部１１０は、変数ｍに「３」をセットする（ステップＳａ１８）。ここで、変数ｍは、リード転送の対象とするブロックの番号を示す。これにより、リード転送の対象は、１群の圧縮データのうち、第３ブロックに設定される。
なお、第１ブロックおよび第２ブロックのリード転送と、第３ブロック以降のリード転送と区別している理由は、上述したように、第１ブロックでは、上記条件Ａおよび条件Ｂの充足が要件ではなく、第２ブロックでは、上記条件Ｂの充足が要件ではないからである。
【００３３】
このように、転送制御部１１０は、第１ブロックについては第１バッファ１０４ａに、第２ブロックについては第２バッファ１０４ｂに、それぞれＲＯＭ２０からリード転送する。次に、第３ブロック以降のリード転送について図５を参照して説明する。
【００３４】
まず、転送制御部１１０は、変数ｍで示される第（ｍ−２）ブロックのライト転送が完了しているか否かについて判別する（ステップＳａ１９）。ここで、第（ｍ−２）ブロックとは、リード転送の対象に設定された第ｍブロックよりも２つ前のブロックであり、第ｍブロックの格納予定先であるバッファに既に記憶されたブロックである。このため、ステップＳａ１９では、第ｍブロックをいずれかのバッファに記憶するにあたって、当該バッファが空になっているのか否かが判別される。すなわち、上記条件Ｂを充足しているのか否かが判別される。
【００３５】
第（ｍ−２）ブロックのライト転送が完了していなければ（ステップＳａ１９の判別結果が「Ｎｏ」であれば、第ｍブロックの格納予定先であるバッファが空でないことを意味するので、転送制御部１１０は、第（ｍ−２）ブロックのライト転送が完了するまで待機する。
一方、第（ｍ−２）ブロックのライト転送が完了すれば（ステップＳａ１９の判別結果が「Ｙｅｓ」になれば）、転送制御部１１０は、選択信号Ｓel-Ａを反転させて、リード転送の格納先とライト転送の読出元とを切り換える（ステップＳａ２０）。そして、転送制御部１１０は、ＲＯＭ２０から第ｍブロックを読み出し、デマルチプレクサ１０２を介して、制御信号Ｓel-Ａで選択した方のバッファにリード転送する（ステップＳａ２１、Ｓａ２２）。
なお、ステップＳａ２１における第ｍブロックのリード転送は、ｍが「３」であれば、第２ブロックのリード転送の完了後（ステップＳａ１６、Ｓａ１７の後）に実行され、ｍが「４」以上であれば、第（ｍ−１）ブロックのリード転送の完了後（変数ｍがインクリメントされる前のステップＳａ２１、Ｓａ２２の後）に実行される。このため、上記条件Ａについては、フローチャートで示される処理の順序に従えば、必然的に充足することになるので、条件Ａを満たすか否かを判別するステップを、特別に用意している訳ではない。
【００３６】
第ｍブロックのリード転送が完了したならば（ステップＳａ２２の判別結果が「Ｙｅｓ」であれば）、転送制御部１１０は、変数ｍと、レジスタ１２２にセットされた転送回数Ｔcとが互いに等しいか否か、すなわちリード転送したブロックが１群の圧縮データのうちの最終ブロックであったか否かを判別する（ステップＳａ２３）。
リード転送したブロックが最終ブロックであったならば（ステップＳａ２３の判別結果が「Ｙｅｓ」であれば）、後述する例外処理によって選択信号Ｓel-Ａを反転した（ステップＳａ２５）後、このリード転送処理が終了する。
ただし、リード転送処理は終了しても、バッファに格納されたブロックが転送されるライト転送処理は引き続き実行される。詳細については後述するが、図８において、リード転送処理は、※印で示される時刻Ｓ１１における例外処理によって選択信号Ｓel-Ａが反転された時点で終了するが、引き続き実行されるライト転送処理によって最終ブロック（第６ブロック）がライト転送されることになる。
【００３７】
一方、リード転送したブロックが最終ブロックでなければ（ステップＳａ２３の判別結果が「Ｎｏ」であれば）、転送制御部１１０は、リード転送の対象を次のブロックとするために、変数ｍを「１」だけインクリメントして（ステップＳａ２４）、処理手順をステップＳａ１９に戻す。
これによって、最終の第Ｔcブロックまで、格納先であるバッファを交互に切り換えながらリード転送が実行される。
【００３８】
次に、ライト転送処理について図６および図７を参照して説明する。
まず、転送制御部１１０は、第１ブロックのリード転送が完了しているか否かを判別し（ステップＳｂ１１）、当該第１ブロックのリード転送が完了していなければ（ステップＳｂ１１の判別結果が「Ｎｏ」であれば）、当該第１ブロックのリード転送が完了するまで待機する。
【００３９】
第１ブロックのリード転送が完了していれば（ステップＳｂ１１の判別結果が「Ｙｅｓ」であれば）、転送制御部１１０は、諸条件をクリアしているか否かを判別する（ステップＳｂ１２）。
なお、ここでいう諸条件とは、例えば、メモリ３０が他のバスマスタによって使用されていないことなどである。諸条件をクリアしていなければ（ステップＳｂ１２の判別結果が「Ｎｏ」であれば）、転送制御部１１０は、当該諸条件がクリアされるまで待機するが、ここでの説明では、当該諸条件はクリアされているものとする。
次に、転送制御部１１０は、アップカウンタ１１４にリセット信号を出力して、カウント値Ｑ１をゼロにリセットする（ステップＳｂ１３）。なお、フローチャートでは特に図示しないが、アップカウンタ１１４は、リード転送処理およびライト転送処理とは独立して、ウェイトの周期に等しいクロックＣlkにしたがってカウント値Ｑ１をアップカウントする。
【００４０】
また、上述したようにリード転送処理において、第１ブロックのリード転送が完了すると、選択信号Ｓel-Ａが反転してＬレベルとなる（図４のステップＳａ１５）。このため、当該選択信号Ｓel-Ａの反転信号はＨレベルとなるので、マルチプレクサ１０６では入力端ａが選択された状態となる。この状態において、転送制御部１１０は、第１ブロックを第１バッファ１０４ａから読み出し、マルチプレクサ１０６およびバスＢを介して、メモリ３０にライト転送する（ステップＳｂ１４、Ｓｂ１５）。
なお、転送制御部１１０は、あるブロックをメモリ３０にライト転送する場合、バススレーブであるメモリ３０へのアクセスをＣＰＵ１０に通知する。このため、ＤＭＡコントローラ１００以外の他のバスマスタ、具体的には、ＣＰＵ１０、デコーダ４０、ラスタライザ５０、ディスプレイコントローラ６０は、メモリ３０へのアクセスすることができなくなる。
【００４１】
第１ブロックのメモリ３０へのライト転送が完了したならば（ステップＳｂ１５の判別結果が「Ｙｅｓ」であれば）、転送制御部１１０は、メモリ３０の解放をＣＰＵ１０に通知する。これにより、他のバスマスタは、メモリ３０にアクセスすることができる。
また、 第１ブロックのライト転送後、転送制御部１１０は、ダウンカウンタ１２４にパルス信号を出力して、カウント値Ｑ２を「１」だけデクリメントさせる（ステップＳｂ１６）。カウント値Ｑ２は、初期設定（図４のステップＳａ１１）において転送回数Ｔcがセットされるとともに、１ブロックのライト転送が完了する毎に「１」だけデクリメントされる（ステップＳｂ１６、Ｓｂ２３）。このため、カウント値Ｑ２は、１群の圧縮データのうち、ライト転送が完了していないブロック数を示すことになる。
【００４２】
この後、転送制御部１１０は、変数ｎに「２」をセットする（ステップＳｂ１７）。ここで、変数ｎは、ライト転送の対象とするブロックの番号を示す。すなわち、ここでは、ライト転送の対象として、１群の圧縮データのうち、第２ブロックに設定する。
なお、変数ｎの初期値を「２」にして、第１ブロックのライト転送と、第２ブロック以降のライト転送とを区別している理由は、上述したように、第２ブロック以降のライト転送については、１つ前のブロックをライト転送してから、ウェイト回数Ｗcで示されるサイクル数を経過して時点で実行する。これに対して、第１ブロックについては１つ前のブロックが存在しないので、バッファへのリード転送が完了した後、直ちに実行できるためである。
【００４３】
このようにして、転送制御部１１０は、第１ブロックについては第１バッファ１０４ａから読み出してメモリ３０にライト転送する。次に、第２ブロック以降のライト転送について図７を参照して説明する。
【００４４】
まず、転送制御部１１０は、アップカウンタ１１４によるカウント値Ｑ１がレジスタ１１２にセットされたウェイト回数Ｗcに達しているか否かを判別する（ステップＳｂ１８）。カウント値Ｑ１がウェイト回数Ｗcに達していなければ（ステップＳｂ１８の判別結果が「Ｎｏ」であれば、第ｎブロックのライト転送するタイミングには至っていないので、転送制御部１１０は、カウント値Ｑ１がウェイト回数Ｗcに達するまで、第ｎブロックをライト転送しないで待機することになる。
【００４５】
カウント値Ｑ１がウェイト回数Ｗcに達した場合（ステップＳｂ１８の判別結果が「Ｙｅｓ」である場合）、転送制御部１１０は、諸条件をクリアしているか否かを判別する（ステップＳｂ１９）。
なお、ここでいう諸条件とは、例えば、ステップＳｂ１２におけるメモリ３０が他のバスマスタによって使用されていないことに加えて、ライト転送の対象である第ｎブロックのリード転送が完了していることなどである。諸条件をクリアしていなければ（ステップＳｂ１９の判別結果が「Ｎｏ」であれば）、転送制御部１１０は、当該諸条件がクリアされるまで待機するが、ここでの説明では、当該諸条件はクリアされているものとする。
【００４６】
次に、転送制御部１１０は、アップカウンタ１１４のカウント値Ｑ１をゼロリセットするとともに（ステップＳｂ２０）、第ｎブロックを一方のバッファから読み出し、マルチプレクサ１０６およびバスＢを介して、メモリ３０にライト転送する（ステップＳｂ２１、Ｓｂ２２）。なお、転送制御部１１０は、あるブロックをライト転送する場合、メモリ３０へのアクセスをＣＰＵ１０に通知する点については、上述した通りである。
【００４７】
第ｎブロックのメモリ３０へのライト転送が完了したならば（ステップＳｂ２２の判別結果が「Ｙｅｓ」であれば）、転送制御部１１０は、メモリ３０の解放をＣＰＵ１０に通知するとともに、ダウンカウンタ１２４のカウント値Ｑ２を「１」だけデクリメントさせる（ステップＳｂ２３）。
次に、転送制御部１１０は、カウント値Ｑ２がゼロであるか否か、すなわち、ライト転送がされていないブロックが存在するか否かを判別する（ステップＳｂ２４）。
【００４８】
カウント値Ｑ２がゼロでなければ（ステップＳｂ２４の判別結果が「Ｎｏ」であれば）、転送制御部１１０は、ライト転送の対象を次のブロックするために、変数ｎを「１」だけインクリメントして（ステップＳｂ２５）、処理手順をステップＳｂ１８に戻す。これによって、最終の第Ｔcブロックまで、アップカウンタ１１４によるカウント値Ｑ１がウェイト回数Ｗcに達する毎にライト転送する処理が繰り返し実行されることになる。
【００４９】
一方、カウント値Ｑ２がゼロであれば（ステップＳｂ２４の判別結果が「Ｙｅｓ」であれば）、転送制御部１１０は、アップカウンタ１１４のカウント値Ｑ１がウェイト回数Ｗcに達したか否かを判別する（ステップＳｂ２６）。
カウント値Ｑ１がウェイト回数Ｗcに達していなければ（ステップＳｂ２６の判別結果が「Ｎｏ」であれば）、転送制御部１１０は、処理手順をステップＳｂ２６に戻して、当該カウント値Ｑ１がウェイト回数Ｗcに達するまで待機する。カウント値Ｑ１がウェイト回数Ｗcに達したとき（ステップＳｂ２６の判別結果が「Ｙｅｓ」になったとき）、転送制御部１１０は、ＣＰＵ１０から指示された１群の圧縮データのＤＭＡ転送を完了して、次のＤＭＡ転送指示を受け付ける。
【００５０】
図８は、ＤＭＡコントローラ１００によるＤＭＡ転送の一例を、リード転送とライト転送とに分けて示す図である。なお、この例では、簡略化して説明するために、ＤＭＡ転送される圧縮データを、第１ブロックから第６ブロックまでとしている。すなわち、転送回数Ｔcを「６」としている。
まず、時刻Ｓ１でＣＰＵ１０によるＤＭＡ転送指示があったときに、リード転送処理では、第１ブロックがＲＯＭ２０から第１バッファ１０４ａにリード転送される（ステップＳａ１１〜Ｓａ１４）。
時刻Ｓ２で第１ブロックのリード転送が完了すると、リード転送処理においては、選択信号Ｓel-Ａが反転するので（ステップＳａ１５）、第２ブロックが第２バッファ１０４ｂにリード転送される（Ｓａ１６、Ｓａ１７）。一方、ライト転送処理においては、第１ブロックが第１バッファ１０４ａからメモリ３０にライト転送され（ステップＳｂ１１〜Ｓｂ１５）、この後、変数ｎに「２」がセットされる（ステップＳｂ１７）。
【００５１】
時刻Ｓ３で第２ブロックのリード転送が完了すると、リード転送処理においては変数ｍに「３」がセットされるとともに（ステップＳａ１８）、選択信号Ｓel-Ａが反転するので（ステップＳａ２０）、変数ｍの「３」に対応した第３ブロックが第１バッファ１０４ａにリード転送され（ステップＳａ２１、Ｓａ２２）、この後、変数ｍが「４」にインクリメントされる（ステップＳａ２４）。
【００５２】
時刻Ｓ４、詳細には、第１ブロックのライト転送が開始された時刻Ｓ２からウェイト回数Ｗcに相当する期間Ｗ（＝Ｗc×Ｔa、ＴaはクロックＣlkの１周期）が経過した時刻Ｓ４に至ると、ライト転送処理においては、「２」にセットされた変数ｎにしたがって第２ブロックのライト転送が開始される（ステップＳｂ２１）。
時刻Ｓ５で第２ブロックのライト転送が完了すると、ライト転送処理においては、ステップＳｂ２２の判別結果が「Ｙｅｓ」になり、変数ｎがインクリメントされて「３」となる（ステップＳｂ２５）。一方、リード転送処理においては、ステップＳａ１９の判別結果が「Ｙｅｓ」になり、選択信号Ｓel-Ａが反転して（ステップＳａ２０）、変数ｍの「４」に対応した第４ブロックが第２バッファ１０４ｂにリード転送され（Ｓａ２１、Ｓａ２２）、この後、変数ｍが「５」にインクリメントされる（ステップＳａ２４）。
時刻Ｓ５で第２ブロックのライト転送が完了すると、ライト転送処理においては、ステップＳｂ２２の判別結果が「Ｙｅｓ」になり、変数ｎがインクリメントされて「３」となる（ステップＳｂ２５）。一方、リード転送処理においては、ステップＳａ１９の判別結果が「Ｙｅｓ」になり、選択信号Ｓel-Ａが反転して（ステップＳａ２０）、変数ｍの「４」に対応した第４ブロックが第２バッファ１０４ｂにリード転送され（Ｓａ２１、Ｓａ２２）、この後、変数ｍが「５」にインクリメントされる（ステップＳａ２４）。
【００５３】
時刻Ｓ４から期間Ｗが経過した時刻Ｓ６に至ると、ライト転送処理においては、変数ｎの「３」に対応した第３ブロックのライト転送が開始される（ステップＳｂ２１）。
時刻Ｓ７で第３ブロックのライト転送が完了すると、ライト転送処理においては、ステップＳｂ２２の判別結果が「Ｙｅｓ」になり、変数ｎがインクリメントされて「４」となる（ステップＳｂ２５）。一方、リード転送処理においては、ステップＳａ１９の判別結果が「Ｙｅｓ」になり、選択信号Ｓel-Ａが反転して（ステップＳａ２０）、変数ｍの「５」に対応した第５ブロックが第１バッファ１０４ａにリード転送され（Ｓａ２１、Ｓａ２２）、この後、変数ｍが「６」にインクリメントされる（ステップＳａ２４）。
【００５４】
時刻Ｓ６から期間Ｗが経過した時刻Ｓ８に至ると、ライト転送処理においては、変数ｎの「４」に対応した第４ブロックのライト転送が開始される（ステップＳｂ２１）。
時刻Ｓ９で第４ブロックのライト転送が完了すると、ライト転送処理においては、ステップＳｂ２２の判別結果が「Ｙｅｓ」になり、変数ｎがインクリメントされて「５」となる（ステップＳｂ２５）。一方、リード転送処理においては、ステップＳａ１９の判別結果が「Ｙｅｓ」になり、選択信号Ｓel-Ａが反転して（ステップＳａ２０）、変数ｍの「６」に対応した第６ブロックが第２バッファ１０４ｂにリード転送される（Ｓａ２１、Ｓａ２２）。なお、変数ｍの「６」は、転送回数Ｔcの「６」であるので、以降、変数ｍはインクリメントされない。
【００５５】
時刻Ｓ８から期間Ｗが経過した時刻Ｓ１０に至ると、ライト転送処理においては、変数ｎの「５」に対応した第５ブロックのライト転送が開始される（ステップＳｂ２１）。
時刻Ｓ１１で第５ブロックのライト転送が完了すると、ライト転送処理においては、ステップＳｂ２２の判別結果が「Ｙｅｓ」になり、変数ｎがインクリメントされて「６」となる（ステップＳｂ２５）。一方、リード転送処理においては例外処理として選択信号Ｓel-Ａが反転され（ステップＳａ２５）、この後、リード転送処理が終了する。
時刻Ｓ１０から期間Ｗが経過した時刻Ｓ１２に至ると、ライト転送処理においては、変数ｎの「６」に対応した第６ブロックのライト転送が開始される（ステップＳｂ２１）。
【００５６】
第６ブロックのライト転送が完了すると、ダウンカウンタ１２４のカウント値Ｑ２がゼロになる（ステップＳｂ２４の判別結果が「Ｙｅｓ」となる）。
第６ブロックのライト転送の開始前には、アップカウンタ１１４のカウント値Ｑ１はゼロにリセットされ（ステップＳｂ２０）、この後、第６ブロックのライト転送が開始される（ステップＳｂ２０）。第６ブロックのライト転送が完了したときは、カウント値Ｑ１はゼロにリセットされてから、クロック信号Ｃlkの１周期の時間が経過しているので、カウント値Ｑ１が「１」にアップカウントされた状態である。このため、第６ブロックのライト転送が完了した直後は、ステップＳｂ２６の判別結果が「Ｎｏ」であり、ＤＭＡ転送処理自体は完了しない。
本実施形態において、ＤＭＡ転送処理が完了するのは、アップカウンタ１１４のカウント値Ｑ１がウェイト回数Ｗcに達した時点、すなわち、時刻Ｓ１２から期間Ｗが経過した時刻Ｓ１３である。
このため、最終の第６バッファのライト転送が終了した時点で、次の１群の圧縮データをＤＭＡ転送する指示があったとき、当該次のＤＭＡ転送は、時刻Ｓ１３以降において実行される。
また、本実施形態では、ＤＭＡ転送終了時を、アップカウンタ１１４のカウント値Ｑ１がウェイト回数Ｗcに達した時点としているのは、各ブロックをメモリ３０に転送する際のデータ転送速度を一定に保つためである。
詳細には、ＤＭＡ転送では、後述する図１１に示されるようにメモリ帯域の割り当てが予め決まっている場合があるが、最終の第６ブロックのライト転送終了時をＤＭＡ転送終了時にすると、第５ブロックのライト転送開始から第６ブロックのライト転送終了までの期間が、他の第１〜第４ブロックと比較して短くなる。このため、第１〜第４ブロックについてはライト転送のデータ転送速度が、１フレーム当たり２ブロックであるのに対し、第５および第６ブロックについてはライト転送の実際のデータ転送速度が、１フレームよりも短い期間で２ブロックとなるので、データ転送速度の均一化が図れなくなる。これに対して、本実施形態では、ＤＭＡ転送終了時を、アップカウンタ１１４のカウント値Ｑ１がウェイト回数Ｗcに達した時刻Ｓ１３としているので、第５および第６ブロックについての転送速度も、１フレーム当たり２ブロックとなり、第１〜第４ブロックについてのデータ転送速度と揃えることができる。
【００５７】
ここで、本実施形態に係るＤＭＡコントローラ１００の優位性について、従来のＤＭＡコントローラと比較して説明する。従来のＤＭＡコントローラ（比較例）は、ＣＰＵからＤＭＡ転送指示があった場合、転送すべき１群のデータを、バススレーブであるメモリに書き込むことが可能な最大速度で、すなわち、図９の（ｃ）に示されるように、期間Ｘcにまとめて転送する。このため、比較例に係るＤＭＡコントローラが期間ＸcでデータをＤＭＡ転送しているときに、当該期間Ｘcでは、他のバスマスタが当該メモリにアクセスすることができない。
【００５８】
特に、上述した表示処理、すなわち圧縮データをデコードし、ラスタライズして、表示させる処理では、ＤＭＡコントローラだけではなく、他のバスマスタであるＣＰＵ、デコーダ、ラスタライザ、ディスプレイコントローラがメモリにアクセスする必要がある。
このため、ある動画を表示させるための処理が実行されている場合に、例えば次に表示すべき動画の圧縮データのＤＭＡ転送がＣＰＵによって指示されたとき、当該ＤＭＡ転送によってメモリが期間Ｘcにわたって使用されてしまうと、他のバスマスタは一時的にメモリにアクセスすることができなくなる。
動画を表示するためには、フレーム（コマ）毎に、デコード処理、ラスタライズおよび当該ラスタライズの結果を表示する処理が滞りなく並行して実行される必要がある。比較例に係るＤＭＡコントローラが期間Ｘcにわたってメモリを占有してしまうと、他のバスマスタがメモリにアクセスできなくなり、１フレームの期間で動画表示処理が滞って、いわゆるコマ落ちが発生し、動画の表示品質を低下させてしまう可能性が高くなる。
【００５９】
これに対して、本実施形態に係るＤＭＡコントローラ１００によれば、（ａ）で示されるように、１群の圧縮データをブロックに分割するとともに、各ブロックを時間的に集中させずに離散させてメモリ３０にＤＭＡ転送する。すなわち、各ブロックがウェイトサイクル数に対応した期間Ｗ毎にメモリ３０にＤＭＡ転送される。このため、１つのブロックがＤＭＡ転送されると、メモリ３０は他のバスマスタに解放されるので、他のバスマスタがＤＭＡコントローラ１００によるＤＭＡ転送によってメモリ３０を使用できなくなるという不都合（アクセスの競合）は、従来と比較して低減される。
【００６０】
次に、本実施形態に係るＤＭＡコントローラ１００の優位性について、メモリ帯域という概念で説明する。なお、ここでいうメモリ帯域とは、メモリに対して単位時間にわたって実際にアクセス可能なデータ量をいう。
【００６１】
図１２は、単位時間でみたときに、メモリ帯域が、バスマスタ毎にどのような比率で割り当てられるかを示す図である。なお、単位時間については、上述したように１フレーム（１６．７ミリ秒）としている。
同図の（ａ）は、メモリ帯域の合計を１００％としたときに、ＤＭＡコントローラ（ＤＭＡＣ）によるＤＭＡ転送が実行されない場合に、各バスマスタに割り当てられる比率の一例を示した図である。この図では、ＤＭＡコントローラ以外のＣＰＵ、ラスタライザ、デコーダおよびディスプレイコントローラが、図に示されるパーセンテージを上限として、メモリ３０にアクセスすることを示している。
【００６２】
同図の（ｂ）は、比較例に係るＤＭＡコントローラにおいて、ＤＭＡ転送が実行される場合の割り当てを、当該ＤＭＡコントローラを含めて示す図である。
この図では、比較例に係るＤＭＡコントローラがＤＭＡ転送によって、メモリ帯域の３５％を使用したことを示している。一方、ＤＭＡ転送によってメモリ帯域のうち、他のバスマスタへの割り当ては、同図に示されるように減少する。すなわち、他のバスマスタであるＣＰＵ、ラスタライザ、デコーダおよびディスプレイコントローラについては、それぞれＤＭＡコントローラによってメモリ帯域が奪われることになる。このため、他のデバイスでは、処理が滞りやすくなり、コマ落ちの原因となる。
【００６３】
なお、比較例に係るＤＭＡコントローラがＤＭＡ転送によってメモリ帯域の３５％を使用することが事前に判っている場合、コマ落ちを解消するためには、図１３の（ａ）に示されるように、ＤＭＡ転送が実行されないときにおいてメモリ帯域に予め３５％の空きを設けておくとともに、他のバスマスタについてはメモリ帯域の割り当てを低くし、処理の適切化を図ってコマ落ちが発生しないことを担保しておく。一方、同図の（ｂ）に示されるように、ＤＭＡ転送が実行されるときには、ＤＭＡコントローラに当該３５％を割り当てて、他のバスマスタについては、ＤＭＡ転送によって、メモリ帯域の割り当てが変動しないようにする構成も考えられる。
ただし、この構成では、ＤＭＡ転送しない場合において、メモリ帯域に設ける空きが非常に無駄であり、他のバスマスタの転送効率が低下してしまう。
【００６４】
一方、本実施形態に係るＤＭＡコントローラ１００において、ＤＭＡ転送が実行されない場合、ＤＭＡコントローラ１００以外の他のバスマスタに割り当てられる比率は、図１０の（ａ）に示されるように、比較例に係るＤＭＡコントローラと同じである（図１２（ａ）参照）。
ただし、本実施形態に係るＤＭＡコントローラ１００では、１群の圧縮データをブロックに分割して、時間的に離散させて各ブロックをメモリ３０にＤＭＡ転送するので、図１０の（ｂ）に示されるように、ＤＭＡコントローラ１００によって占められるメモリ帯域の比率は、例えば５％で済み、比較例（図１２の（ｂ）参照）に対して低くなる。
このため、本実施形態に係るＤＭＡコントローラ１００において、図１１の（ａ）に示されるように、ＤＭＡ転送が実行されないときに、メモリ帯域に予め５％の空きを設けておく一方、同図の（ｂ）に示されるように、ＤＭＡ転送が実行されるときには、当該空きの帯域部分をＤＭＡコントローラ１００に割り当てる構成にして良い。このような構成であっても、ＤＭＡ転送しない場合において、メモリ帯域に設ける無駄な空きが、比較例（図１３の（ａ）参照）に対して少なくすることができる。
なお、ＤＭＡコントローラに割り当てるメモリ帯域の５％とは、上述した例でいえば、２０サイクルのウェイトにつき、１ブロックを（１ウェイトで）メモリ３０にＤＭＡ転送する場合をいう。
【００６５】
本発明は、上述した実施形態に限定されるものではなく、例えば次に述べるような各種の応用・変形が可能である。また、次に述べる応用・変形の態様は、任意に選択された一または複数を適宜に組み合わせることもできる。
【００６６】
あるブロックのライト転送が完了すると、メモリ３０が解放されるので、期間Ｗが経過して次のブロックのライト転送しようとするときに、他のバスマスタがメモリ３０にアクセスしている場合がある。この場合、上述した実施形態では、ステップＳｂ１２、Ｓｂ１９の判別結果が「Ｎｏ」になるので、転送制御部１１０は、当該ブロックのライト転送を、バスＢが他のバスマスタから解放されるまで待機させる。このとき、転送制御部１１０は、待機させた時間αを計測するとともに、当該ブロックの次のブロックのライト転送を、期間Ｗよりも時間αだけ早めて、実行する構成としても良い。
例えば、図９の（ｂ）において、第２ブロックのライト転送が、他のバスマスタによるメモリ３０のアクセスによって時間αだけ待機させられた場合、次の第３ブロックのライト転送を期間αだけ早めて実行する構成としても良い。すなわち、第２ブロックのライト転送が第１ブロックのライト転送から期間（Ｗ＋α）経過した時点で開始した場合、次の第３ブロックのライト転送を、第２ブロックのライト転送から期間（Ｗ−α）経過した時点で実行する構成としても良い。
このような構成によれば、あるブロックのライト転送が、他のバスマスタによるメモリ３０のアクセスによって遅延しても、当該ブロックの次のライト転送が時間的に早められるので、単位時間にＤＭＡ転送されるブロック数を一定に保つことができる。すなわち、ＤＭＡコントローラ１００によるデータ転送速度を均一に保つことができる。
なお、転送制御部１１０は、あるブロックのライト転送を時間αだけ待機させた場合であっても、次のブロックのライト転送を、期間Ｗよりも時間αだけ早めない構成としても良い。この構成によれば、単位時間にＤＭＡ転送されるブロック数、すなわちＤＭＡコントローラ１００によるＤＭＡ転送のデータ転送速度を、予め定められた値よりも抑えることができる。
【００６７】
また、ブロックの転送が待機させられた場合に次のブロックの転送のウェイトを減少させる／させないに関わらず、転送制御部１１０は、転送開始から転送完了までの時間を所定のタイマーにて計測するようにしても良い。こうすることで、実際のデータ転送速度を求めることが出来、当初の要求転送速度との差を定量的に評価することにより、システムのボトルネック解消に役立てることができる。
【００６８】
実施形態では、圧縮データの各ブロックをバッファ１０４からメモリ３０に転送するＤＭＡコントローラ１００を例とって説明したが、他のバスマスタにも適用可能である。例えば、デコーダ４０や、ラスタライザ５０、ディスプレイコントローラ６０にバッファを内蔵させて、バススレーブであるメモリ３０からブロック毎にデータを読み出して、内蔵バッファに格納させる構成としても良い。
すなわち、本発明は、バッファ１０４に格納させたブロックを転送先のバススレーブ（メモリ３０）に転送する場合のみならず、転送元のバススレーブ（メモリ３０）から内蔵バッファに転送する場合にも適用可能である。なお、転送元のバススレーブから内蔵バッファに転送する場合の動作については、ＤＭＡコントローラ１００によるライト転送において転送元と転送先とが異なるだけでほぼ同様な動作となる。
【００６９】
転送制御部１１０には、ＣＰＵ１０からＤＭＡ転送指示があったときに、当該指示に含まれるウェイト回数Ｗcについては、予め用意された複数種類のうち、ＣＰＵ１０がデータ転送速度に応じた１種類を選択して供給する構成としても良い。あるいは、転送制御部１１０のレジスタ１１２に、データ転送速度に応じた複数種類のウェイト回数を予めセットしておく一方、ＣＰＵ１０などの他のバスマスタからのイベント信号によって、複数種類のウェイト回数のうち、いずれかに変更して、カウント値Ｑ１と比較に用いる構成としても良い。
このようにウェイトを変更する構成によって、ＤＭＡ転送のデータ転送速度を動的に制御することができる。
【００７０】
また、実施形態のように動画を表示させる場合、表示部７０では、帰線期間（水平帰線期間および垂直帰線期間）が存在する。この帰線期間では、ＣＰＵ１０、デコーダ４０、ラスタライザ５０およびディスプレイコントローラ６０によるバスＢを介したメモリ３０のアクセス頻度が低下する。このため、ＤＭＡコントローラ１００は、帰線期間になった場合にデータの転送速度を走査期間よりも高めて、例えばウェイト回数Ｗcを少なくしてセットする構成としても良い。
【００７１】
実施形態では、ライト転送処理として図６および図７に示されるような内容としたが、あるブロックを一方のバッファから読み出すライト転送開始時に、次のブロックを他方のバッファに記憶させるリード転送を開始させる処理であっても良い。
また、実施形態では、バッファ１０４を第１バッファ１０４ａと第２バッファ１０４ｂとに分けたが、１群のデータをブロック化し、時間的に離散させてライト転送することができれば良いので、１つのバッファを用いる構成でも良い。
なお、ＤＭＡ転送の対象は、圧縮データに限られず、圧縮していない動画データでも良いし、動画以外のデータであっても良い。
【符号の説明】
【００７２】
１０…ＣＰＵ、２０…ＲＯＭ、３０…メモリ、４０…デコーダ、５０…ラスタライザ、６０…ディスプレイコントローラ、１００…ＤＭＡコントローラ、１０４…バッファ、１０４ａ…第１バッファ、１０４ｂ…第２バッファ。
【図１】
2015099477.tif 000003
【図２】
2015099477.tif 000004
【図３】
2015099477.tif 000005
【図４】
2015099477.tif 000006
【図５】
2015099477.tif 000007
【図６】
2015099477.tif 000008
【図７】
2015099477.tif 000009
【図８】
2015099477.tif 000010
【図９】
2015099477.tif 000011
【図１０】
2015099477.tif 000012
【図１１】
2015099477.tif 000013
【図１２】
2015099477.tif 000014
【図１３】
2015099477.tif 000015