特許第6232964号(P6232964)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ヤマハ株式会社の特許一覧

<>
  • 特許6232964-DMAコントローラ 図000002
  • 特許6232964-DMAコントローラ 図000003
  • 特許6232964-DMAコントローラ 図000004
  • 特許6232964-DMAコントローラ 図000005
  • 特許6232964-DMAコントローラ 図000006
  • 特許6232964-DMAコントローラ 図000007
  • 特許6232964-DMAコントローラ 図000008
  • 特許6232964-DMAコントローラ 図000009
  • 特許6232964-DMAコントローラ 図000010
  • 特許6232964-DMAコントローラ 図000011
  • 特許6232964-DMAコントローラ 図000012
  • 特許6232964-DMAコントローラ 図000013
  • 特許6232964-DMAコントローラ 図000014
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6232964
(24)【登録日】2017年11月2日
(45)【発行日】2017年11月22日
(54)【発明の名称】DMAコントローラ
(51)【国際特許分類】
   G06F 13/28 20060101AFI20171113BHJP
   G06F 13/38 20060101ALI20171113BHJP
【FI】
   G06F13/28 310J
   G06F13/38 310E
【請求項の数】5
【全頁数】20
(21)【出願番号】特願2013-238836(P2013-238836)
(22)【出願日】2013年11月19日
(65)【公開番号】特開2015-99477(P2015-99477A)
(43)【公開日】2015年5月28日
【審査請求日】2016年9月21日
(73)【特許権者】
【識別番号】000004075
【氏名又は名称】ヤマハ株式会社
(74)【代理人】
【識別番号】100125689
【弁理士】
【氏名又は名称】大林 章
(74)【代理人】
【識別番号】100121108
【弁理士】
【氏名又は名称】高橋 太朗
(72)【発明者】
【氏名】西岡 直俊
【審査官】 田上 隆一
(56)【参考文献】
【文献】 特開2006−285300(JP,A)
【文献】 国際公開第2004/079583(WO,A1)
【文献】 特開2007−206799(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 13/28
G06F 13/38
(57)【特許請求の範囲】
【請求項1】
1群のデータを転送元のバススレーブから転送先のバススレーブに転送するDMAコントローラであって、
先入れ先出し型のバッファと、
前記1群のデータを、所定のデータ量のブロックを単位として前記転送元のバススレーブからバッファに格納させる動作、または、前記バッファに格納させたブロックを前記転送先のバススレーブに転送する動作、を所定のデータ転送速度に応じた期間のウェイトをかけて実行する転送制御部と、
を具備することを特徴とするDMAコントローラ。
【請求項2】
前記バッファは、前記所定のデータ量の記憶容量を有する先入れ先出し型の第1バッファおよび第2バッファを含み、
前記転送制御部は、前記第1バッファまたは第2バッファの一方に対して前記転送元のバススレーブからのブロックを格納させた場合に、前記第1バッファまたは第2バッファの他方からブロックを読み出して、前記転送先のバススレーブに転送する
ことを特徴とする請求項1に記載のDMAコントローラ。
【請求項3】
前記転送制御部は、
のブロックを前記転送先のバススレーブに転送するのを遅らせた場合、当該一のブロックの次のブロックを前記転送先のバススレーブに転送するまでのウェイトを減少させる
ことを特徴とする請求項1または2に記載のDMAコントローラ。
【請求項4】
前記転送制御部は、
のブロックを前記転送先のバススレーブに転送するのを遅らせた場合、当該一のブロックの次のブロックを前記転送先のバススレーブに転送するまでのウェイトを減少させない
ことを特徴とする請求項1または2に記載のDMAコントローラ。
【請求項5】
前記転送制御部は、
部から入力されるイベント信号によって前記ウェイトを変更する
ことを特徴とする請求項1または2に記載のDMAコントローラ。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、DMA(Direct Memory Access)方式によりデータを転送するDMAコントローラに関する。
【背景技術】
【0002】
処理能力が高くないCPU(Central Processing Unit)を含むシステムによって動画を表示させる場合、専用のハードウェア、例えばデコーダやラスタライザなどを設けて、当該CPUの代わりに、動画の表示処理の一部を実行させる場合がある。一般に、動画データは、膨大であるので、当該動画データは、比較的低速であるが安価な低速メモリに格納される。当該動画データは、DMAコントローラによってバスを介して高速メモリに転送されるとともにデコーダやラスタライザが当該高速メモリにアクセスして必要な処理を並列的に実行する構成となる。膨大な動画データはDMAコントローラによって高速メモリにDMA転送されるので、CPUは、その分、負荷が低減されて、他の必要な処理を実行することができる。
【0003】
一方、DMAコントローラやCPUなどのバスマスタが高速メモリを共有する構成では、同時に複数のバスマスタが同一のバススレーブ(ここでは高速メモリ)にアクセスすることはできないので、バススレーブにアクセスが集中すると、あるバスマスタが所定の時間内に当該バススレーブに対するデータ転送を完了することができない、という不都合が生じる。
そこで、バス調停器が、残りの転送時間の余裕度に応じてデータ転送の優先順位をアクセス単位でダイナミックに変更する技術が提案されている(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2006−209500号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、上記技術では、アクセスが競合した瞬間でのみ調停が実行される。このため、優先順位の低いアクセスを実行中に、優先度の高いアクセスが発生しても、優先順位の低いアクセスの実行が終了するまで、優先度の高いアクセスは待たされることが考えられる。
このため、動画を表示させる場合のように、DMAコントローラや、それ以外の他のバスマスタが並列的にバススレーブの高速メモリにアクセスする構成では、優先順位の高い動画の表示処理に関わるアクセスが待たされ、結果的に、いわゆるコマ落ちが発生する可能性が高くなる。
本発明は、このような事情に鑑みてなされたものであり、その目的の一つは、バススレーブを共有するシステムにおいてアクセスの競合を減らすことができるDMAコントローラを提供することにある。
【課題を解決するための手段】
【0006】
上記目的を達成するために、本発明の一態様に係るDMAコントローラは、1群のデータを転送元のバススレーブから転送先のバススレーブに転送するDMAコントローラであって、バッファと、前記1群のデータを、所定のデータ量のブロックを単位として前記転送元のバススレーブからバッファに格納させる動作、または、前記バッファに格納させたブロックを前記転送先のバススレーブに転送する動作、を時間的に分散させて実行する転送制御部と、を具備することを特徴とする。
この一態様に係るDMAコントローラによれば、ブロックが時間的に集中して、転送元のバススレーブからバッファへの格納されること、または、バッファから転送先のバススレーブへの転送されること、がない。このため、当該バススレーブを共有する他のバスマスタからすれば、DMAコントローラがブロックを転送しない期間に当該バススレーブにアクセス(読出または格納)することができるので、当該バススレーブに対するアクセスの競合を減らすことができる。
なお、1群のデータとは、(CPUによって発行される)転送指示によって、転送元のバススレーブから転送先のバススレーブに転送すべきデータの全体をいう。
【0007】
上記一態様において、前記バッファは、前記所定のデータ量の記憶容量を有する第1バッファおよび第2バッファを含み、前記転送制御部は、前記第1バッファまたは第2バッファの一方に対して前記転送元のバススレーブからのブロックを格納させた場合に、前記第1バッファまたは第2バッファの他方からブロックを読み出して、前記転送先のバススレーブに転送する構成としても良い。
この構成によれば、第1バッファと第2バッファとにおいて、転送元のバススレーブからのブロックの読み出しと、転送先のバススレーブへのブロックの転送を同時に実行できるので、転送の効率化が図られる
この構成によれば、第1バッファと第2バッファとにおいて、転送元のバスマスタからのブロックが格納されるものと、転送先のバスマスタに転送されるブロックの読み出し元となるものとが別々になるので、転送の効率化が図られる。
【0008】
上記一態様において、前記転送制御部は、所定のデータ転送速度に応じた期間のウェイトをかけてから、各ブロックを前記転送先のバススレーブに転送するとともに、前記一のブロックを前記転送先のバススレーブに転送するのを遅らせた場合、当該一のブロックの次のブロックを前記転送先のバススレーブに転送するまでのウェイトを減少させる構成としても良い。この構成によれば、単位時間におけるデータ転送量(データ転送速度)を均一に保つことができる。
なお、転送制御部が、一のブロックを転送先バススレーブに転送するのを遅らせた場合とは、他のバスマスタによって当該転送先バススレーブが使用されている場合である。また、所定のデータ転送速度とは、バススレーブにアクセスするバスマスタに割り当てられた比率によって後述するように定められる。
【0009】
上記一態様において、前記転送制御部は、所定のデータ転送速度に応じた期間のウェイトをかけてから、各ブロックを前記転送先のバススレーブに転送するとともに、前記一のブロックを前記転送先のバススレーブに転送するのを遅らせた場合、当該一のブロックの次のブロックを前記転送先のバススレーブに転送するまでのウェイトを減少させない構成としても良い。この構成によれば、単位時間におけるデータ転送量(データ転送速度)を、所定の値よりも抑えることができる。
【0010】
上記一態様において、前記転送制御部は、所定のデータ転送速度に応じた期間のウェイトをかけてから、各ブロックを前記転送先のバススレーブに転送するとともに、外部から入力されるイベント信号によって前記ウェイトを変更する構成としても良い。この構成によれば、イベント信号によってウェイトが変更されるので、単位時間におけるデータ転送量(データ転送速度)を動的に制御することができる。
【図面の簡単な説明】
【0011】
図1】実施形態に係るDMAコントローラを含むシステムの構成を示すブロック図である。
図2】システムにおける処理の概要を示す図である。
図3】DMAコントローラの構成を示すブロック図である。
図4】DMAコントローラにおけるリード転送処理を示すフローチャートである。
図5】DMAコントローラにおけるリード転送処理を示すフローチャートである。
図6】DMAコントローラにおけるライト転送処理を示すフローチャートである。
図7】DMAコントローラにおけるライト転送処理を示すフローチャートである。
図8】各ブロックにおけるリード転送およびライト転送の一例を示す図である。
図9】実施形態と比較例とにおけるDMA転送の対比を示す図である。
図10】本発明のDMAコントローラにおけるメモリ帯域の割当の一例を示す図である。
図11】本発明のDMAコントローラにおけるメモリ帯域の割当の一例を示す図である。
図12】比較例のDMAコントローラにおけるメモリ帯域の割当の一例を示す図である。
図13】比較例のDMAコントローラにおけるメモリ帯域の割当の一例を示す図である。
【発明を実施するための形態】
【0012】
以下、本発明の実施形態について図面を参照して説明する。
【0013】
図1は、実施形態に係るDMAコントローラ100を含むシステム1の全体の構成を示すブロック図である。
この図に示されるようにシステム1は、CPU10、ROM(Read Only Memory)20、メモリ30、デコーダ40、ラスタライザ50、ディスプレイコントローラ60、および、表示部70を含み、これらのうち、ROM20および表示部70を除き、バスBを介して互いに接続されている。
このシステム1は、圧縮された動画データをデコードした後、フレーム毎にラスタライズ(描画)して、表示部70に表示させる処理(表示処理)を実行する。
【0014】
図2は、この表示処理の概略的な流れを示す図である。
ROM20は、例えば書き替え可能なフラッシュメモリなどであり、動画データを圧縮した状態で、すなわち圧縮データとして記憶する。DMAコントローラ100は、詳細については後述するが、ROM20に記憶された圧縮データを読み出して、メモリ30に転送する。メモリ30は、アクセス(格納および書込)が高速な、例えばSDRAM(Synchronous Dynamic Random Access Memory)であり、DMAコントローラ100とともに、CPU10、デコーダ40、ラスタライザ50、ディスプレイコントローラ60に共有される。
デコーダ40は、メモリ30に転送された圧縮データを動画データにデコードして、メモリ30に格納する。ラスタライザ50は、メモリ30に格納された動画データをラスタライズして、メモリ30に割り当てられた描画領域32に格納する。描画領域32は、一種のフレームバッファである。ディスプレイコントローラ60は、ラスタライズされたデータを描画領域32から、走査(水平走査および垂直走査)の順に読み出し、表示部70に供給して画面表示させる。
【0015】
ところで、動画データは圧縮したとしても、データのサイズが数百メガバイトから数ギガバイトまでに及ぶ。このような動画データの圧縮データは、1つに限られず、条件や場面に応じた適切な動画を表示させるために複数の場合もあり得る。このため、ROM20には大容量であることが要求される。一般に、記憶素子においてアクセス速度と容量とは互いにトレードオフの関係にあるので、大容量のROM20からのアクセス(読出)は比較的低速にならざるを得ない。
このため、CPU10が、ROM20から圧縮データを、バスBを介して読み出す構成では、CPU10に負荷がかかるだけなく、バスBの占有時間が長くなる。そこで、本実施形態では、DMAコントローラ100が、ROM20から圧縮データを(低速で)読み出した後に、一旦、メモリ30に(高速で)転送する構成となっている。
【0016】
CPU10は、メモリ30を一時作業領域として各種の演算等を実行するとともに、当該演算の結果にしたがってデコーダ40やラスタライザ50などに命令を出す。また、CPU10は、動画の再生のために圧縮データが必要となったとき、DMAコントローラ100に対して、ROM20から圧縮データをメモリ30に転送するために、各種の設定を実行する。
【0017】
図3は、DMAコントローラ100の構成を示すブロック図である。
この図に示されるように、DMAコントローラ100は、デマルチプレクサ102と、バッファ104と、マルチプレクサ106と、転送制御部110と、アップカウンタ114と、ダウンカウンタ124と、を含む構成となっている。
【0018】
本実施形態において、バッファ104は、第1バッファ104aと第2バッファ104bとに分けられる。第1バッファ104aと第2バッファ104bとは、いずれも例えば512バイトの記憶容量を有するFIFO(Fast In Fast Out)メモリであり、アクセス(格納および読出)については転送制御部110によって制御される。なお、第1バッファ104aまたは第2バッファ104bのいずれか一方を指す場合に、一方のバッファと表記する場合がある。
デマルチプレクサ102は、選択信号Sel-Aが例えばHレベルであれば、入力端Inに入力されたデータを実線で示されるように出力端aから出力し、Lレベルであれば、破線で示されるように出力端bから出力する。マルチプレクサ106は、選択信号Sel-AがHレベルであれば(当該選択信号Sel-Aの否定信号がLレベルであれば)、実線で示されるように入力端bに入力されたデータを出力端Outから出力し、選択信号Sel-AがLレベルであれば(当該選択信号Sel-Aの否定信号がHレベルであれば)、破線で示されるように入力端aに入力されたデータを出力端Outから出力する。
このように、バッファ104の入出力は、選択信号Sel-Aによって、図において実線または破線のいずれかとなるように制御される。
【0019】
転送制御部110は、CPU10からDMA転送指示があったとき、ROM20から圧縮データを読み出すとともに、512バイト毎に、一方のバッファ(第1バッファ104aまたは第2バッファ104bのいずれか一方)にデマルチプレクサ102を介して格納(リード転送)する。また、転送制御部110は、他方のバッファから圧縮データを読み出して、マルチプレクサ106(およびバスB)を介してメモリ30にライト転送する。
すなわち、DMAコントローラ100は、1群の圧縮データを512バイト毎のブロックに区切ってROM20からメモリ30にDMA転送する。このとき、転送制御部110は、リード転送する際の圧縮データの格納先と、ライト転送する際の圧縮データの読出元とを、第1バッファ104aおよび第2バッファ104bとで交互に切り換える。
【0020】
また、CPU10からのDMA転送指示には、ウェイト回数Wcと転送回数Tcとが含まれる。
ウェイト回数Wcは、1ブロックの圧縮データをライト転送してから、次の1ブロックの圧縮データをライト転送するまでの期間を、ウェイトのサイクル回数で示したものであり、転送制御部110のレジスタ112にセットされる。
ここで、ウェイトの1サイクルは、1ブロックのライト転送に要する時間、すなわち、512バイトのブロックを、バスBを介してメモリ30に転送するのに要する時間としている。ウェイト回数Wcについては、例えば後述するようなメモリ帯域に割り当てによって制限(または制約される)データ転送速度に応じて設定される。
データ転送速度の単位は、一般に「ビット/秒」で表されるが、ここでは、計算を簡単にするために、「ブロック/フレーム」とする。本実施形態において、1ブロックは512バイトとしており、また、1フレームは、例えば表示の垂直走査周波数が60Hz(1秒あたり60コマの表示)であれば、16.7ミリ秒である。
DMAコントローラ100が、例えば1フレーム当たり2ブロックを、ROM20からメモリ30にDMA転送する場合、すなわちデータ転送速度として2ブロック/フレームとする場合を想定する。この場合に、1ブロックのライト転送に要する時間が0.418ミリ秒であれば、ウェイト回数Wcは、単位時間である1フレーム(16.7ミリ秒)を、2ブロックのライト転送に要する時間(=0.418×2ミリ秒)で除した「20」に設定される。これにより、20ウェイトにつき、1ブロックが(1ウェイトで)DMA転送されるように設定される。
なお、実際には、CPU10が、データ転送速度に応じたウェイト回数WcをDMA転送指示する際に出力する構成となるが、後述するように、ウェイト回数Wcについては動的に切り替えられる場合もある。
このようにウェイト回数Wcについては、データ転送速度に応じて設定される。ここで、データ転送速度が低ければ、ウェイト回数Wcが大きくなる。ウェイト回数Wcが大きくなるにつれて、DMAコントローラ100以外の他のバスマスタ(CPU10、デコーダ40、ラスタライザ50、ディスプレイコントローラ60)が、メモリ30にアクセスすることが可能な期間が長くなる。
【0021】
転送回数Tcは、転送対象となる1群の圧縮データのデータ量をブロック数に換算した値である。例えば、圧縮データのデータ量が3072バイトであれば、転送回数Tcは、当該3072バイトを1ブロックの512バイトで除した「6」になる。なお、実際の圧縮データのデータ量は、上述したように数百メガバイトから数ギガバイト程度までに及ぶので、ここでの数値はあくまでも説明のための便宜上の値に過ぎない。また、CPU10から供給される転送回数Tcは、転送制御部110のレジスタ122にセットされる。
【0022】
転送制御部110は、第1ブロックのリード転送が完了したとき、および、アップカウンタ114のカウント値Q1がウェイト回数Wcに達したとき、アップカウンタ114のリセット端(Res)にリセット信号を出力して、アップカウンタ114のカウント値Q1をゼロにリセットする。
一方、アップカウンタ114は、ウェイトの周期に等しいクロックClkにしたがってカウント値Q1を「1」ずつアップカウントする。すなわち、512バイトの1ブロックがメモリ30にライト転送される時間(ウェイト)を単位として、カウント値Q1がアップカウントされる構成となっている。
なお、クロックClkは、図示省略したクロックジェネレータによって生成される。
【0023】
また、転送制御部110は、CPU10からDMA転送指示があったときの初期設定において、レジスタ122にセットされた転送回数Tcを、ダウンカウンタ124にセットするとともに、アップカウンタ114のカウント値Q1がウェイト回数Wcに達したとき、ダウンカウンタ124にパルス信号を出力して、当該ダウンカウンタ124によるカウント値Q2を「1」だけデクリメント(ダウンカウント)させる。
【0024】
ROM20からメモリ30に転送される1群の圧縮データのブロックについては、便宜的に、リード転送される順番で第1ブロック、第2ブロック、第3ブロック、…、と記載する場合がある。なお、1群の圧縮データのうち、最終ブロックは、転送回数Tcで示される第Tcブロックである。
【0025】
ところで、ROM20からの読み出しは、メモリ30へ書き込みと比較して低速であるので、1ブロック(512バイト)を一方のバッファにリード転送するのに要する時間は、同じデータ量を、バスBを介してメモリ30にライト転送するのに要する時間よりも長くなる。このため、一方のバッファへのリード転送が完了しないうちに、他方のバッファからのライト転送が完了している場合がある。換言すれば、他方のバッファからのライト転送が完了して当該他方のバッファが空になっていても、一方のバッファにおけるリード転送が完了していない場合がある。
このため、転送制御部110は、あるブロック(第1ブロックおよび第2ブロックを除く)のリード転送を次の場合に実行する。すなわち、あるブロックのリード転送が一方のバッファに対して開始される場合とは、当該ブロックの1つ前のブロックが、他方のバッファへのリード転送が完了している場合(条件A)であって、かつ、当該一方のバッファにおいて、2つ前のブロックのライト転送がすでに完了して空になっている場合(条件B)である。
【0026】
ただし、第1ブロックのリード転送については、1つ前のブロックが存在しないことから、条件Aが要件にならないし、また、2つ前のブロックも存在しないことから、条件Bも要件にならない。すなわち、第1ブロックについては、CPU10からDMA転送指示があったとき、直ちに一方のバッファにリード転送することができる。また、第2ブロックのリード転送については、2つ前のブロックが存在しないことから、条件Bが要件にならない。このため、第2ブロックについては、第1ブロックが一方のバッファへのリード転送が完了したとき、他方のバッファにリード転送することができる。
【0027】
一方、転送制御部110は、あるブロック(第1ブロックを除く)のライト転送については、1つ前のブロックのライト転送を開始してから、ウェイト回数Wcで示されるサイクル数だけのウェイトが経過したときに実行する。端的に言えば、転送制御部110は、あるブロックのライト転送については、1つ前のブロックのライト転送を開始してから、ウェイト回数Wcとウェイトの1サイクルとを乗じた期間だけウェイトして実行する。
ただし、第1ブロックでは1つ前のブロックが存在しない。このため、第1ブロックのライト転送については、ウェイトをかけることなく(第1ブロックのリード転送が完了していれば)、実行することができる。
【0028】
このような転送制御部110によるリード転送およびライト転送について、図面を参照して説明する。
図4および図5は、各ブロックをリード転送するためのリード転送処理を示すフローチャートであり、図6および図7は、各ブロックをライト転送するためのライト転送処理を示すフローチャートである。
なお、リード転送処理とライト転送処理とは、互いに並行して実行される。また、以下においては説明の便宜上、奇数(1、3、5、…)ブロックは第1バッファ104aに転送され、偶数(2、4、6、…)ブロックは第2バッファ104bに転送されるものとする。また、ここでは、ウェイト回数Wcおよび転送回数Tcについては、具体的な数値で特定しないで説明する。
【0029】
まず、リード転送処理について図4および図5を参照して説明する。
転送制御部110は、CPU10からDMA転送指示があったとき、初期設定を実行する(ステップSa11)。具体的には、転送制御部110は、当該CPU10から供給されるウェイト回数Wcをレジスタ112にセットし、当該CPU10から供給される転送回数Tcをレジスタ122にセットするとともに、当該転送回数Tcをダウンカウンタ124にセットする。
【0030】
次に、転送制御部110は、選択信号Sel-AをHレベルにする(ステップSa12)。これにより、デマルチプレクサ102では出力端aが選択される。
続いて、転送制御部110は、転送対象である1群の圧縮データの第1ブロックをROM20から読み出して、デマルチプレクサ102を介して、第1バッファ104aに格納する(リード転送の開始、ステップSa13)。
ここで、転送制御部110は、第1ブロックのリード転送が完了したか否かを判別する(ステップSa14)。第1ブロックのリード転送が完了していないと判別すれば(ステップSa14の判別結果が「No」であれば)、転送制御部110は、処理手順をステップSa13に戻す。このため、第1ブロックのリード転送が完了するまで、転送制御部110は、ステップSa13を実行することになる。
【0031】
第1ブロックのリード転送が完了したならば(ステップSa14の判別結果が「Yes」であれば)、転送制御部110は、選択信号Sel-Aを反転してLレベルとする(ステップSa15)。これにより、デマルチプレクサ102では出力端bが選択され、マルチプレクサ106では入力端aが選択される。
【0032】
第1ブロックのリード転送が完了しているので、転送制御部110は、続く第2ブロックを、ROM20から読み出し、デマルチプレクサ102を介して第2バッファ104bに格納する(ステップSa16、Sa17)。なお、ステップSa16、Sa17は、ステップSa13、Sa14と、リード転送の対象であるブロックと記憶先であるバッファとが異なる以外、同様である。
第2ブロックのリード転送が完了したならば(ステップSa17の判別結果が「Yes」であれば)、転送制御部110は、変数mに「3」をセットする(ステップSa18)。ここで、変数mは、リード転送の対象とするブロックの番号を示す。これにより、リード転送の対象は、1群の圧縮データのうち、第3ブロックに設定される。
なお、第1ブロックおよび第2ブロックのリード転送と、第3ブロック以降のリード転送と区別している理由は、上述したように、第1ブロックでは、上記条件Aおよび条件Bの充足が要件ではなく、第2ブロックでは、上記条件Bの充足が要件ではないからである。
【0033】
このように、転送制御部110は、第1ブロックについては第1バッファ104aに、第2ブロックについては第2バッファ104bに、それぞれROM20からリード転送する。次に、第3ブロック以降のリード転送について図5を参照して説明する。
【0034】
まず、転送制御部110は、変数mで示される第(m−2)ブロックのライト転送が完了しているか否かについて判別する(ステップSa19)。ここで、第(m−2)ブロックとは、リード転送の対象に設定された第mブロックよりも2つ前のブロックであり、第mブロックの格納予定先であるバッファに既に記憶されたブロックである。このため、ステップSa19では、第mブロックをいずれかのバッファに記憶するにあたって、当該バッファが空になっているのか否かが判別される。すなわち、上記条件Bを充足しているのか否かが判別される。
【0035】
第(m−2)ブロックのライト転送が完了していなければ(ステップSa19の判別結果が「No」であれば、第mブロックの格納予定先であるバッファが空でないことを意味するので、転送制御部110は、第(m−2)ブロックのライト転送が完了するまで待機する。
一方、第(m−2)ブロックのライト転送が完了すれば(ステップSa19の判別結果が「Yes」になれば)、転送制御部110は、選択信号Sel-Aを反転させて、リード転送の格納先とライト転送の読出元とを切り換える(ステップSa20)。そして、転送制御部110は、ROM20から第mブロックを読み出し、デマルチプレクサ102を介して、制御信号Sel-Aで選択した方のバッファにリード転送する(ステップSa21、Sa22)。
なお、ステップSa21における第mブロックのリード転送は、mが「3」であれば、第2ブロックのリード転送の完了後(ステップSa16、Sa17の後)に実行され、mが「4」以上であれば、第(m−1)ブロックのリード転送の完了後(変数mがインクリメントされる前のステップSa21、Sa22の後)に実行される。このため、上記条件Aについては、フローチャートで示される処理の順序に従えば、必然的に充足することになるので、条件Aを満たすか否かを判別するステップを、特別に用意している訳ではない。
【0036】
第mブロックのリード転送が完了したならば(ステップSa22の判別結果が「Yes」であれば)、転送制御部110は、変数mと、レジスタ122にセットされた転送回数Tcとが互いに等しいか否か、すなわちリード転送したブロックが1群の圧縮データのうちの最終ブロックであったか否かを判別する(ステップSa23)。
リード転送したブロックが最終ブロックであったならば(ステップSa23の判別結果が「Yes」であれば)、後述する例外処理によって選択信号Sel-Aを反転した(ステップSa25)後、このリード転送処理が終了する。
ただし、リード転送処理は終了しても、バッファに格納されたブロックが転送されるライト転送処理は引き続き実行される。詳細については後述するが、図8において、リード転送処理は、※印で示される時刻S11における例外処理によって選択信号Sel-Aが反転された時点で終了するが、引き続き実行されるライト転送処理によって最終ブロック(第6ブロック)がライト転送されることになる。
【0037】
一方、リード転送したブロックが最終ブロックでなければ(ステップSa23の判別結果が「No」であれば)、転送制御部110は、リード転送の対象を次のブロックとするために、変数mを「1」だけインクリメントして(ステップSa24)、処理手順をステップSa19に戻す。
これによって、最終の第Tcブロックまで、格納先であるバッファを交互に切り換えながらリード転送が実行される。
【0038】
次に、ライト転送処理について図6および図7を参照して説明する。
まず、転送制御部110は、第1ブロックのリード転送が完了しているか否かを判別し(ステップSb11)、当該第1ブロックのリード転送が完了していなければ(ステップSb11の判別結果が「No」であれば)、当該第1ブロックのリード転送が完了するまで待機する。
【0039】
第1ブロックのリード転送が完了していれば(ステップSb11の判別結果が「Yes」であれば)、転送制御部110は、諸条件をクリアしているか否かを判別する(ステップSb12)。
なお、ここでいう諸条件とは、例えば、メモリ30が他のバスマスタによって使用されていないことなどである。諸条件をクリアしていなければ(ステップSb12の判別結果が「No」であれば)、転送制御部110は、当該諸条件がクリアされるまで待機するが、ここでの説明では、当該諸条件はクリアされているものとする。
次に、転送制御部110は、アップカウンタ114にリセット信号を出力して、カウント値Q1をゼロにリセットする(ステップSb13)。なお、フローチャートでは特に図示しないが、アップカウンタ114は、リード転送処理およびライト転送処理とは独立して、ウェイトの周期に等しいクロックClkにしたがってカウント値Q1をアップカウントする。
【0040】
また、上述したようにリード転送処理において、第1ブロックのリード転送が完了すると、選択信号Sel-Aが反転してLレベルとなる(図4のステップSa15)。このため、当該選択信号Sel-Aの反転信号はHレベルとなるので、マルチプレクサ106では入力端aが選択された状態となる。この状態において、転送制御部110は、第1ブロックを第1バッファ104aから読み出し、マルチプレクサ106およびバスBを介して、メモリ30にライト転送する(ステップSb14、Sb15)。
なお、転送制御部110は、あるブロックをメモリ30にライト転送する場合、バススレーブであるメモリ30へのアクセスをCPU10に通知する。このため、DMAコントローラ100以外の他のバスマスタ、具体的には、CPU10、デコーダ40、ラスタライザ50、ディスプレイコントローラ60は、メモリ30へのアクセスすることができなくなる。
【0041】
第1ブロックのメモリ30へのライト転送が完了したならば(ステップSb15の判別結果が「Yes」であれば)、転送制御部110は、メモリ30の解放をCPU10に通知する。これにより、他のバスマスタは、メモリ30にアクセスすることができる。
また、 第1ブロックのライト転送後、転送制御部110は、ダウンカウンタ124にパルス信号を出力して、カウント値Q2を「1」だけデクリメントさせる(ステップSb16)。カウント値Q2は、初期設定(図4のステップSa11)において転送回数Tcがセットされるとともに、1ブロックのライト転送が完了する毎に「1」だけデクリメントされる(ステップSb16、Sb23)。このため、カウント値Q2は、1群の圧縮データのうち、ライト転送が完了していないブロック数を示すことになる。
【0042】
この後、転送制御部110は、変数nに「2」をセットする(ステップSb17)。ここで、変数nは、ライト転送の対象とするブロックの番号を示す。すなわち、ここでは、ライト転送の対象として、1群の圧縮データのうち、第2ブロックに設定する。
なお、変数nの初期値を「2」にして、第1ブロックのライト転送と、第2ブロック以降のライト転送とを区別している理由は、上述したように、第2ブロック以降のライト転送については、1つ前のブロックをライト転送してから、ウェイト回数Wcで示されるサイクル数を経過して時点で実行する。これに対して、第1ブロックについては1つ前のブロックが存在しないので、バッファへのリード転送が完了した後、直ちに実行できるためである。
【0043】
このようにして、転送制御部110は、第1ブロックについては第1バッファ104aから読み出してメモリ30にライト転送する。次に、第2ブロック以降のライト転送について図7を参照して説明する。
【0044】
まず、転送制御部110は、アップカウンタ114によるカウント値Q1がレジスタ112にセットされたウェイト回数Wcに達しているか否かを判別する(ステップSb18)。カウント値Q1がウェイト回数Wcに達していなければ(ステップSb18の判別結果が「No」であれば、第nブロックのライト転送するタイミングには至っていないので、転送制御部110は、カウント値Q1がウェイト回数Wcに達するまで、第nブロックをライト転送しないで待機することになる。
【0045】
カウント値Q1がウェイト回数Wcに達した場合(ステップSb18の判別結果が「Yes」である場合)、転送制御部110は、諸条件をクリアしているか否かを判別する(ステップSb19)。
なお、ここでいう諸条件とは、例えば、ステップSb12におけるメモリ30が他のバスマスタによって使用されていないことに加えて、ライト転送の対象である第nブロックのリード転送が完了していることなどである。諸条件をクリアしていなければ(ステップSb19の判別結果が「No」であれば)、転送制御部110は、当該諸条件がクリアされるまで待機するが、ここでの説明では、当該諸条件はクリアされているものとする。
【0046】
次に、転送制御部110は、アップカウンタ114のカウント値Q1をゼロリセットするとともに(ステップSb20)、第nブロックを一方のバッファから読み出し、マルチプレクサ106およびバスBを介して、メモリ30にライト転送する(ステップSb21、Sb22)。なお、転送制御部110は、あるブロックをライト転送する場合、メモリ30へのアクセスをCPU10に通知する点については、上述した通りである。
【0047】
第nブロックのメモリ30へのライト転送が完了したならば(ステップSb22の判別結果が「Yes」であれば)、転送制御部110は、メモリ30の解放をCPU10に通知するとともに、ダウンカウンタ124のカウント値Q2を「1」だけデクリメントさせる(ステップSb23)。
次に、転送制御部110は、カウント値Q2がゼロであるか否か、すなわち、ライト転送がされていないブロックが存在するか否かを判別する(ステップSb24)。
【0048】
カウント値Q2がゼロでなければ(ステップSb24の判別結果が「No」であれば)、転送制御部110は、ライト転送の対象を次のブロックするために、変数nを「1」だけインクリメントして(ステップSb25)、処理手順をステップSb18に戻す。これによって、最終の第Tcブロックまで、アップカウンタ114によるカウント値Q1がウェイト回数Wcに達する毎にライト転送する処理が繰り返し実行されることになる。
【0049】
一方、カウント値Q2がゼロであれば(ステップSb24の判別結果が「Yes」であれば)、転送制御部110は、アップカウンタ114のカウント値Q1がウェイト回数Wcに達したか否かを判別する(ステップSb26)。
カウント値Q1がウェイト回数Wcに達していなければ(ステップSb26の判別結果が「No」であれば)、転送制御部110は、処理手順をステップSb26に戻して、当該カウント値Q1がウェイト回数Wcに達するまで待機する。カウント値Q1がウェイト回数Wcに達したとき(ステップSb26の判別結果が「Yes」になったとき)、転送制御部110は、CPU10から指示された1群の圧縮データのDMA転送を完了して、次のDMA転送指示を受け付ける。
【0050】
図8は、DMAコントローラ100によるDMA転送の一例を、リード転送とライト転送とに分けて示す図である。なお、この例では、簡略化して説明するために、DMA転送される圧縮データを、第1ブロックから第6ブロックまでとしている。すなわち、転送回数Tcを「6」としている。
まず、時刻S1でCPU10によるDMA転送指示があったときに、リード転送処理では、第1ブロックがROM20から第1バッファ104aにリード転送される(ステップSa11〜Sa14)。
時刻S2で第1ブロックのリード転送が完了すると、リード転送処理においては、選択信号Sel-Aが反転するので(ステップSa15)、第2ブロックが第2バッファ104bにリード転送される(Sa16、Sa17)。一方、ライト転送処理においては、第1ブロックが第1バッファ104aからメモリ30にライト転送され(ステップSb11〜Sb15)、この後、変数nに「2」がセットされる(ステップSb17)。
【0051】
時刻S3で第2ブロックのリード転送が完了すると、リード転送処理においては変数mに「3」がセットされるとともに(ステップSa18)、選択信号Sel-Aが反転するので(ステップSa20)、変数mの「3」に対応した第3ブロックが第1バッファ104aにリード転送され(ステップSa21、Sa22)、この後、変数mが「4」にインクリメントされる(ステップSa24)。
【0052】
時刻S4、詳細には、第1ブロックのライト転送が開始された時刻S2からウェイト回数Wcに相当する期間W(=Wc×Ta、TaはクロックClkの1周期)が経過した時刻S4に至ると、ライト転送処理においては、「2」にセットされた変数nにしたがって第2ブロックのライト転送が開始される(ステップSb21)。
時刻S5で第2ブロックのライト転送が完了すると、ライト転送処理においては、ステップSb22の判別結果が「Yes」になり、変数nがインクリメントされて「3」となる(ステップSb25)。一方、リード転送処理においては、ステップSa19の判別結果が「Yes」になり、選択信号Sel-Aが反転して(ステップSa20)、変数mの「4」に対応した第4ブロックが第2バッファ104bにリード転送され(Sa21、Sa22)、この後、変数mが「5」にインクリメントされる(ステップSa24)。
時刻S5で第2ブロックのライト転送が完了すると、ライト転送処理においては、ステップSb22の判別結果が「Yes」になり、変数nがインクリメントされて「3」となる(ステップSb25)。一方、リード転送処理においては、ステップSa19の判別結果が「Yes」になり、選択信号Sel-Aが反転して(ステップSa20)、変数mの「4」に対応した第4ブロックが第2バッファ104bにリード転送され(Sa21、Sa22)、この後、変数mが「5」にインクリメントされる(ステップSa24)。
【0053】
時刻S4から期間Wが経過した時刻S6に至ると、ライト転送処理においては、変数nの「3」に対応した第3ブロックのライト転送が開始される(ステップSb21)。
時刻S7で第3ブロックのライト転送が完了すると、ライト転送処理においては、ステップSb22の判別結果が「Yes」になり、変数nがインクリメントされて「4」となる(ステップSb25)。一方、リード転送処理においては、ステップSa19の判別結果が「Yes」になり、選択信号Sel-Aが反転して(ステップSa20)、変数mの「5」に対応した第5ブロックが第1バッファ104aにリード転送され(Sa21、Sa22)、この後、変数mが「6」にインクリメントされる(ステップSa24)。
【0054】
時刻S6から期間Wが経過した時刻S8に至ると、ライト転送処理においては、変数nの「4」に対応した第4ブロックのライト転送が開始される(ステップSb21)。
時刻S9で第4ブロックのライト転送が完了すると、ライト転送処理においては、ステップSb22の判別結果が「Yes」になり、変数nがインクリメントされて「5」となる(ステップSb25)。一方、リード転送処理においては、ステップSa19の判別結果が「Yes」になり、選択信号Sel-Aが反転して(ステップSa20)、変数mの「6」に対応した第6ブロックが第2バッファ104bにリード転送される(Sa21、Sa22)。なお、変数mの「6」は、転送回数Tcの「6」であるので、以降、変数mはインクリメントされない。
【0055】
時刻S8から期間Wが経過した時刻S10に至ると、ライト転送処理においては、変数nの「5」に対応した第5ブロックのライト転送が開始される(ステップSb21)。
時刻S11で第5ブロックのライト転送が完了すると、ライト転送処理においては、ステップSb22の判別結果が「Yes」になり、変数nがインクリメントされて「6」となる(ステップSb25)。一方、リード転送処理においては例外処理として選択信号Sel-Aが反転され(ステップSa25)、この後、リード転送処理が終了する。
時刻S10から期間Wが経過した時刻S12に至ると、ライト転送処理においては、変数nの「6」に対応した第6ブロックのライト転送が開始される(ステップSb21)。
【0056】
第6ブロックのライト転送が完了すると、ダウンカウンタ124のカウント値Q2がゼロになる(ステップSb24の判別結果が「Yes」となる)。
第6ブロックのライト転送の開始前には、アップカウンタ114のカウント値Q1はゼロにリセットされ(ステップSb20)、この後、第6ブロックのライト転送が開始される(ステップSb20)。第6ブロックのライト転送が完了したときは、カウント値Q1はゼロにリセットされてから、クロック信号Clkの1周期の時間が経過しているので、カウント値Q1が「1」にアップカウントされた状態である。このため、第6ブロックのライト転送が完了した直後は、ステップSb26の判別結果が「No」であり、DMA転送処理自体は完了しない。
本実施形態において、DMA転送処理が完了するのは、アップカウンタ114のカウント値Q1がウェイト回数Wcに達した時点、すなわち、時刻S12から期間Wが経過した時刻S13である。
このため、最終の第6バッファのライト転送が終了した時点で、次の1群の圧縮データをDMA転送する指示があったとき、当該次のDMA転送は、時刻S13以降において実行される。
また、本実施形態では、DMA転送終了時を、アップカウンタ114のカウント値Q1がウェイト回数Wcに達した時点としているのは、各ブロックをメモリ30に転送する際のデータ転送速度を一定に保つためである。
詳細には、DMA転送では、後述する図11に示されるようにメモリ帯域の割り当てが予め決まっている場合があるが、最終の第6ブロックのライト転送終了時をDMA転送終了時にすると、第5ブロックのライト転送開始から第6ブロックのライト転送終了までの期間が、他の第1〜第4ブロックと比較して短くなる。このため、第1〜第4ブロックについてはライト転送のデータ転送速度が、1フレーム当たり2ブロックであるのに対し、第5および第6ブロックについてはライト転送の実際のデータ転送速度が、1フレームよりも短い期間で2ブロックとなるので、データ転送速度の均一化が図れなくなる。これに対して、本実施形態では、DMA転送終了時を、アップカウンタ114のカウント値Q1がウェイト回数Wcに達した時刻S13としているので、第5および第6ブロックについての転送速度も、1フレーム当たり2ブロックとなり、第1〜第4ブロックについてのデータ転送速度と揃えることができる。
【0057】
ここで、本実施形態に係るDMAコントローラ100の優位性について、従来のDMAコントローラと比較して説明する。従来のDMAコントローラ(比較例)は、CPUからDMA転送指示があった場合、転送すべき1群のデータを、バススレーブであるメモリに書き込むことが可能な最大速度で、すなわち、図9の(c)に示されるように、期間Xcにまとめて転送する。このため、比較例に係るDMAコントローラが期間XcでデータをDMA転送しているときに、当該期間Xcでは、他のバスマスタが当該メモリにアクセスすることができない。
【0058】
特に、上述した表示処理、すなわち圧縮データをデコードし、ラスタライズして、表示させる処理では、DMAコントローラだけではなく、他のバスマスタであるCPU、デコーダ、ラスタライザ、ディスプレイコントローラがメモリにアクセスする必要がある。
このため、ある動画を表示させるための処理が実行されている場合に、例えば次に表示すべき動画の圧縮データのDMA転送がCPUによって指示されたとき、当該DMA転送によってメモリが期間Xcにわたって使用されてしまうと、他のバスマスタは一時的にメモリにアクセスすることができなくなる。
動画を表示するためには、フレーム(コマ)毎に、デコード処理、ラスタライズおよび当該ラスタライズの結果を表示する処理が滞りなく並行して実行される必要がある。比較例に係るDMAコントローラが期間Xcにわたってメモリを占有してしまうと、他のバスマスタがメモリにアクセスできなくなり、1フレームの期間で動画表示処理が滞って、いわゆるコマ落ちが発生し、動画の表示品質を低下させてしまう可能性が高くなる。
【0059】
これに対して、本実施形態に係るDMAコントローラ100によれば、(a)で示されるように、1群の圧縮データをブロックに分割するとともに、各ブロックを時間的に集中させずに離散させてメモリ30にDMA転送する。すなわち、各ブロックがウェイトサイクル数に対応した期間W毎にメモリ30にDMA転送される。このため、1つのブロックがDMA転送されると、メモリ30は他のバスマスタに解放されるので、他のバスマスタがDMAコントローラ100によるDMA転送によってメモリ30を使用できなくなるという不都合(アクセスの競合)は、従来と比較して低減される。
【0060】
次に、本実施形態に係るDMAコントローラ100の優位性について、メモリ帯域という概念で説明する。なお、ここでいうメモリ帯域とは、メモリに対して単位時間にわたって実際にアクセス可能なデータ量をいう。
【0061】
図12は、単位時間でみたときに、メモリ帯域が、バスマスタ毎にどのような比率で割り当てられるかを示す図である。なお、単位時間については、上述したように1フレーム(16.7ミリ秒)としている。
同図の(a)は、メモリ帯域の合計を100%としたときに、DMAコントローラ(DMAC)によるDMA転送が実行されない場合に、各バスマスタに割り当てられる比率の一例を示した図である。この図では、DMAコントローラ以外のCPU、ラスタライザ、デコーダおよびディスプレイコントローラが、図に示されるパーセンテージを上限として、メモリ30にアクセスすることを示している。
【0062】
同図の(b)は、比較例に係るDMAコントローラにおいて、DMA転送が実行される場合の割り当てを、当該DMAコントローラを含めて示す図である。
この図では、比較例に係るDMAコントローラがDMA転送によって、メモリ帯域の35%を使用したことを示している。一方、DMA転送によってメモリ帯域のうち、他のバスマスタへの割り当ては、同図に示されるように減少する。すなわち、他のバスマスタであるCPU、ラスタライザ、デコーダおよびディスプレイコントローラについては、それぞれDMAコントローラによってメモリ帯域が奪われることになる。このため、他のデバイスでは、処理が滞りやすくなり、コマ落ちの原因となる。
【0063】
なお、比較例に係るDMAコントローラがDMA転送によってメモリ帯域の35%を使用することが事前に判っている場合、コマ落ちを解消するためには、図13の(a)に示されるように、DMA転送が実行されないときにおいてメモリ帯域に予め35%の空きを設けておくとともに、他のバスマスタについてはメモリ帯域の割り当てを低くし、処理の適切化を図ってコマ落ちが発生しないことを担保しておく。一方、同図の(b)に示されるように、DMA転送が実行されるときには、DMAコントローラに当該35%を割り当てて、他のバスマスタについては、DMA転送によって、メモリ帯域の割り当てが変動しないようにする構成も考えられる。
ただし、この構成では、DMA転送しない場合において、メモリ帯域に設ける空きが非常に無駄であり、他のバスマスタの転送効率が低下してしまう。
【0064】
一方、本実施形態に係るDMAコントローラ100において、DMA転送が実行されない場合、DMAコントローラ100以外の他のバスマスタに割り当てられる比率は、図10の(a)に示されるように、比較例に係るDMAコントローラと同じである(図12(a)参照)。
ただし、本実施形態に係るDMAコントローラ100では、1群の圧縮データをブロックに分割して、時間的に離散させて各ブロックをメモリ30にDMA転送するので、図10の(b)に示されるように、DMAコントローラ100によって占められるメモリ帯域の比率は、例えば5%で済み、比較例(図12の(b)参照)に対して低くなる。
このため、本実施形態に係るDMAコントローラ100において、図11の(a)に示されるように、DMA転送が実行されないときに、メモリ帯域に予め5%の空きを設けておく一方、同図の(b)に示されるように、DMA転送が実行されるときには、当該空きの帯域部分をDMAコントローラ100に割り当てる構成にして良い。このような構成であっても、DMA転送しない場合において、メモリ帯域に設ける無駄な空きが、比較例(図13の(a)参照)に対して少なくすることができる。
なお、DMAコントローラに割り当てるメモリ帯域の5%とは、上述した例でいえば、20サイクルのウェイトにつき、1ブロックを(1ウェイトで)メモリ30にDMA転送する場合をいう。
【0065】
本発明は、上述した実施形態に限定されるものではなく、例えば次に述べるような各種の応用・変形が可能である。また、次に述べる応用・変形の態様は、任意に選択された一または複数を適宜に組み合わせることもできる。
【0066】
あるブロックのライト転送が完了すると、メモリ30が解放されるので、期間Wが経過して次のブロックのライト転送しようとするときに、他のバスマスタがメモリ30にアクセスしている場合がある。この場合、上述した実施形態では、ステップSb12、Sb19の判別結果が「No」になるので、転送制御部110は、当該ブロックのライト転送を、バスBが他のバスマスタから解放されるまで待機させる。このとき、転送制御部110は、待機させた時間αを計測するとともに、当該ブロックの次のブロックのライト転送を、期間Wよりも時間αだけ早めて、実行する構成としても良い。
例えば、図9の(b)において、第2ブロックのライト転送が、他のバスマスタによるメモリ30のアクセスによって時間αだけ待機させられた場合、次の第3ブロックのライト転送を期間αだけ早めて実行する構成としても良い。すなわち、第2ブロックのライト転送が第1ブロックのライト転送から期間(W+α)経過した時点で開始した場合、次の第3ブロックのライト転送を、第2ブロックのライト転送から期間(W−α)経過した時点で実行する構成としても良い。
このような構成によれば、あるブロックのライト転送が、他のバスマスタによるメモリ30のアクセスによって遅延しても、当該ブロックの次のライト転送が時間的に早められるので、単位時間にDMA転送されるブロック数を一定に保つことができる。すなわち、DMAコントローラ100によるデータ転送速度を均一に保つことができる。
なお、転送制御部110は、あるブロックのライト転送を時間αだけ待機させた場合であっても、次のブロックのライト転送を、期間Wよりも時間αだけ早めない構成としても良い。この構成によれば、単位時間にDMA転送されるブロック数、すなわちDMAコントローラ100によるDMA転送のデータ転送速度を、予め定められた値よりも抑えることができる。
【0067】
また、ブロックの転送が待機させられた場合に次のブロックの転送のウェイトを減少させる/させないに関わらず、転送制御部110は、転送開始から転送完了までの時間を所定のタイマーにて計測するようにしても良い。こうすることで、実際のデータ転送速度を求めることが出来、当初の要求転送速度との差を定量的に評価することにより、システムのボトルネック解消に役立てることができる。
【0068】
実施形態では、圧縮データの各ブロックをバッファ104からメモリ30に転送するDMAコントローラ100を例とって説明したが、他のバスマスタにも適用可能である。例えば、デコーダ40や、ラスタライザ50、ディスプレイコントローラ60にバッファを内蔵させて、バススレーブであるメモリ30からブロック毎にデータを読み出して、内蔵バッファに格納させる構成としても良い。
すなわち、本発明は、バッファ104に格納させたブロックを転送先のバススレーブ(メモリ30)に転送する場合のみならず、転送元のバススレーブ(メモリ30)から内蔵バッファに転送する場合にも適用可能である。なお、転送元のバススレーブから内蔵バッファに転送する場合の動作については、DMAコントローラ100によるライト転送において転送元と転送先とが異なるだけでほぼ同様な動作となる。
【0069】
転送制御部110には、CPU10からDMA転送指示があったときに、当該指示に含まれるウェイト回数Wcについては、予め用意された複数種類のうち、CPU10がデータ転送速度に応じた1種類を選択して供給する構成としても良い。あるいは、転送制御部110のレジスタ112に、データ転送速度に応じた複数種類のウェイト回数を予めセットしておく一方、CPU10などの他のバスマスタからのイベント信号によって、複数種類のウェイト回数のうち、いずれかに変更して、カウント値Q1と比較に用いる構成としても良い。
このようにウェイトを変更する構成によって、DMA転送のデータ転送速度を動的に制御することができる。
【0070】
また、実施形態のように動画を表示させる場合、表示部70では、帰線期間(水平帰線期間および垂直帰線期間)が存在する。この帰線期間では、CPU10、デコーダ40、ラスタライザ50およびディスプレイコントローラ60によるバスBを介したメモリ30のアクセス頻度が低下する。このため、DMAコントローラ100は、帰線期間になった場合にデータの転送速度を走査期間よりも高めて、例えばウェイト回数Wcを少なくしてセットする構成としても良い。
【0071】
実施形態では、ライト転送処理として図6および図7に示されるような内容としたが、あるブロックを一方のバッファから読み出すライト転送開始時に、次のブロックを他方のバッファに記憶させるリード転送を開始させる処理であっても良い。
また、実施形態では、バッファ104を第1バッファ104aと第2バッファ104bとに分けたが、1群のデータをブロック化し、時間的に離散させてライト転送することができれば良いので、1つのバッファを用いる構成でも良い。
なお、DMA転送の対象は、圧縮データに限られず、圧縮していない動画データでも良いし、動画以外のデータであっても良い。
【符号の説明】
【0072】
10…CPU、20…ROM、30…メモリ、40…デコーダ、50…ラスタライザ、60…ディスプレイコントローラ、100…DMAコントローラ、104…バッファ、104a…第1バッファ、104b…第2バッファ。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13