(57)【要約】【課題】  ２次元の矩形で定義されるＤＭＡ転送領域に対してリングバッファ構成で転送を行ったり、転送領域をＤＭＡ転送途中で動的に不連続なメモリエリアへ遷移させるチェインモードを実現することを目的とする。【解決手段】  リングバッファの上底と下底のアドレスをレジスタで設定できるようにしてＤＭＡのリングバッファ動作を可能とする。これを応用して、内部アドレスはリングの下底アドレスを越えたカラムの次カラムの転送からＣＰＵによるリング上底、下底アドレス再設定まで一時的に下底アドレスを無視することでアドレスチェインを実現する。【選択図】  図６
2007087178.tif 000002
【特許請求の範囲】
【請求項１】
多次元ブロックをDMA転送領域として指定できるDMAコントローラのうち、メモリアドレス生成用のカウンタ以外に内部アドレス用カウンタを1つだけ持ち、CPUから設定可能なリングバッファ上底アドレスレジスタとリングバッファ下底アドレスレジスタを持ち、前記内部アドレスカウンタ値が前記リングバッファ下底アドレスを超えたときは前記内部アドレスカウンタ値と前記リングバッファ上底アドレスと前記リングバッファ下底アドレスで演算されたアドレスをメモリアドレスとして出力することで常に指定されたリングバッファ範囲内でデータ転送を行えることを特徴とするDMAコントローラにおいて、リング領域を越えたカラムの次カラムの転送開始からリングバッファ下底アドレスレジスタを再設定されるまでリングバッファ下底アドレスレジスタを無視することのできるDMAコントローラ。
【請求項２】
請求項１を満たし、リング領域を越えたカラムの最後まで転送が終了したところで割り込みを発生させることのできるDMAコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は多次元ブロックをDMA転送領域として指定でき、メモリ領域をリングバッファとして使用できるDMAコントローラのうち、簡単な応用で複雑なアドレスチェインを可能とするDMAコントローラに関する。
【背景技術】
【０００２】
従来のDMAコントローラで上限アドレスを設けてアドレスをスタートアドレスへジャンプさせてリングバッファとして使用できるものはあった。しかし2次元の矩形（ロウブロック＊カラムブロック）で定義された領域に関してこれをリングバッファ、およびアドレスチェインさせて使用することを考慮したものはなかった。
【０００３】
従来例としては、例えば特許文献１と特許文献２と特許文献３をあげることが出来る。
【特許文献１】特開平０７−６４９００号公報
【特許文献２】特開平０９−１７９８１３号公報
【特許文献３】特開２０００−３０５８９１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
２次元の矩形で定義されるDMA転送領域に対してリングバッファ構成で転送を行ったり、転送領域をDMA転送途中で動的に遷移させたりすることを目的とする。
【課題を解決するための手段】
【０００５】
前記課題を解決するために、本発明ではリングバッファの上底と下底にあたるアドレスをレジスタとして定義し、あらかじめこのレジスタにリングバッファの大きさを設定できるようにしておく。さらに最終段で出力されるメモリアドレス以外に内部に独自の内部アドレスカウンタを設けて、メモリアドレスを内部アドレスカウンタとリングバッファアドレスの演算結果として出力する。これによってDMA転送領域をリングバッファとすることは可能となる。
【０００６】
一方、転送領域を動的にチェインさせるために次のような制御を付け加える。一度リングバッファ下底アドレスを越えた場合、そのアドレスを含むロウブロックが終了し、次のロウブロックへジャンプした時の内部アドレスカウンタ値をチェックする。もしこのアドレスがリングバッファ下底アドレスを越えている場合は、現在のメモリアドレスを内部アドレスカウンタにロードする。もしリングバッファアドレスを超えていない場合はそのままのカウンタ値を使用する。ここで現在設定されているリングバッファ下底アドレスを無視するように制御する。このときDMAコントローラはCPUからの新規のリングバッファ下底アドレス、上底アドレス再設定待ち状態に入っている。つまりこの再設定が行われない限り、DMAコントローラは内部アドレスカウンタ値をそのままメモリアドレスとして出力することとなる。再設定が行われると、DMAコントローラは再設定された値を下底アドレスと判断する。もしこの下底アドレスに到達したら上底アドレスへ再び遷移させるという処理を行う。請求項２に関して、リングバッファ上底、下底アドレス再設定のタイミングをCPUへ知らせるための割込み要因を追加した。このことによってCPUは現在のアドレスを監視してリングバッファ上底、下底アドレスの再設定のタイミングを計る必要がなくなる。またリングバッファ上底アドレスレジスタと下底アドレスレジスタの前段にバッファを持つ必要がなくなる。
【０００７】
（作用）
２次元のブロックで構成されるDMA転送領域に対して、CPUがリングバッファ上底アドレスレジスタと下底アドレスレジスタをDMA転送中に再設定することで転送領域を動的に遷移させることができるようになる。
【発明の効果】
【０００８】
以上説明したように本発明は、リングバッファ動作させることを目的としたDMAコントローラの機能を拡張させて、動的にDMA転送領域を変えるアドレスチェイン転送を可能にするものである。
【発明を実施するための最良の形態】
【０００９】
以下本発明の実施例について図を用いて説明する。
【００１０】
図１は本発明のDMAコントローラ１の内部構成図である。この図はメモリからデバイスへ対してデータ転送を行うDMAコントローラの例である。反対方向であるデバイスからメモリへのデータ転送を行うためのDMAコントローラに関しても制御ブロックの構成は同様である。
【００１１】
DMAコントローラ１はレジスタインターフェース２、デバイスインターフェース３、メモリバスインターフェース４、FIFO５から構成される。レジスタインターフェース２はCPUからDMAコントローラ内のスタートアドレス、転送長レジスタなどの制御レジスタに直接読み書きするためのブロックである。デバイスインターフェース３はDMAコントローラに接続される外部デバイス（JPEGなどの画像処理ブロック）との間でデータのやり取りをするためのシンプルなプロトコルを制御するためのブロックである。FIFO５は外部デバイスとメモリ間でのデータを一時的に保存するための緩衝用FIFOである。FIFO５のサイズは接続されるデバイスの要求する転送レートによって決定されるものである。メモリバスインターフェース４はメモリと接続されたメモリコントローラをスレーブとして持つ画像処理バス６のプロトコルを制御するためのブロックである。このメモリバスインターフェースの内部ブロック構成図を図２に示す。メモリバスインターフェース4はバスリクエスト制御ブロック7とアドレス生成器8、転送長カウンタ9から構成される。バスリクエスト制御系ブロック7はFIFO5の状態と転送長カウンタ9から出力される残り転送長ステータスとアドレス生成器8から出力されるアドレスアラインメント情報をみてバスリクエストを出すか出さないかを制御するブロックである。
【００１２】
本発明のDMAコントローラがサポートするDMA転送領域は図３のように矩形で定義できる。最小単位は「ライン」でありXAバイトで定義される。「ブロック」はYLENラインで定義される。図中の（０，０）、（０，１）・・・がブロックである。「ロウブロック」はXNUMブロックで定義される。すべてのDMA転送領域の矩形はYNUMカラムブロックで定義される。XLEN、YLEN、XNUM、YNUMはそれぞれ１６ビットレジスタ値であり、DMA転送開始前にCPUにより設定される値である。DMAはCPUによって予め設定されるスタートアドレスSAから開始され、１ラインの転送が終了すると内部アドレスカウンタ値にOFF1を足して次ラインにジャンプする。同様に１ブロックが終了すると内部アドレスカウンタ値にOFF2を足して次のブロックへジャンプする。１カラムブロックが終了すると内部アドレスにOFF3を足して次のカラムブロックへジャンプする。最終カラムブロックの最終ロウブロックの最終ラインの転送が終了するとDMAが完了する。
【００１３】
これらのパラメータ以外に本発明ではUAとLAという３２ビットレジスタを定義する。これらはそれぞれリングバッファの上底アドレスと下底アドレスを表している。このアドレスの使い方を図４、５、６で説明する。
【００１４】
図４のように矩形が存在し、UAは（Y0＋１）カラム目の先頭アドレスを指し、LAはSAと同じアドレスを指しているとする。この場合、Y0カラムが完了すると（Y0+1）カラム目にジャンプしたところで、内部アドレスINTAがINTA>=UAになっているので、メモリアドレスMEMAをLA+(INTA-UA)として出力する。この場合、このメモリアドレスはSAと同じになるはずである。INTA>=UA条件が成立するアドレスでは常にメモリアドレスはLA+(INTA-UA)として出力されるよってリングバッファ内でのDMA転送が可能となる。
【００１５】
またMEMA>=UAの場合、メモリアドレスMEMAはLA+(INTA-INTA')として出力される。ここでINTA'はMEMAがUAに到達したときのINTAのレジスタ値を保存したものである。
【００１６】
これらの条件式が成立しないとき、メモリアドレスは常にINTAである。この図の場合LAがSAと同じ値になってはいるが、実際は異なる値が設定されていても構わない。
【００１７】
図５はUAアドレスがカラムブロック境界に無い場合の例である。この場合アドレッシングの仕方が複雑になる。Y0カラムの途中で内部アドレスINTAがUAに到達したところで、メモリアドレスはLA+(INTA-UA)で出力される。このブロックが終了するまではこの演算式でメモリアドレスが出力されるが、次のブロックである(1,Y1)の先頭アドレスA0はリングバッファ内に収まっているので、メモリアドレスはINTAとなる。再びこのブロック内でINTA>=UAとなるA1からはメモリアドレスはLA+(INTA-UA)で出力される。INTA=A1のときのメモリアドレスはA2である。図５のようにブロック境界でないところでリングバッファを構成できるようにすることで、バッファ容量に自由度を持たせることができるようになる。
【００１８】
図６はアドレスチェインの例を示している。この図では1ロウ＝2ブロック、全DMAエリア＝７カラムとして定義している。2回のアドレスチェインが行われ、合計３つの不連続なメモリ空間でDMAが行われていることになる。リングバッファとして使用する場合は全てのDMAパラメータ（SA,XA,YA,UA,LA,・・・）はDMA転送中に書き換えることは無かった。但し、チェインモードで使用する場合、CPUはメモリの使い方によってUA,LAを何度も書き換える可能性がある。この図の例ではDMA転送中にUAを2度、LAを1度だけ書き換えている。DMA転送開始前に予め設定しておくのは図中のUA0とLA0である。UA0は最初のメモリ空間の下底アドレスを意味し、LA0は次のメモリ空間の上底アドレスを意味している。内部アドレスは3カラム目の途中のラインでUA0に達しており、メモリアドレスはLA0+(INTA-UA0)となる。ここで一旦2番目のメモリ空間に移ったことになる。しかし、当ブロック(0,2)が終了して(1,2)へジャンプしたところで内部アドレスINTAは再び1番目のメモリ空間(1,2a)に戻ることとなる。その後リングバッファの際のルールに従ってまた(1,2b)へ移る。ここまではリングバッファとして使用する場合と全く同じである。INTAが4ストライプ目に移ったとき現在のメモリアドレスを内部アドレスカウンタ値INTAにロードする。またこのとき請求項２の割込みを発生させCPUに対して次のリング上底、下底アドレス設定を促す。同時にDMAコントローラは設定されているLA0の値を無視する。その後DMAは (0,3)→(1,3)→(0,4)→(1,4)ブロックの順で転送が行われる。図6の例では(1,4)ブロックが終了する前に新しいリング上底アドレスLA1、下底アドレスUA1が設定されている。INTAがUA1に到達すると今度はLA1を起点としたアドレスからDMAが行われるようになる。ただし、新規のUAはDMA転送中動的に再設定されるので、内部アドレスINTAが既に新規のUAを越えてしまっている場合、期待通りの転送エリア遷移が行われないので注意が必要である。
【００１９】
リングバッファモード、アドレスチェインモードを有効にするアドレス生成回路のデータパスを図7に示す。内部アドレスINTA１９はラインの最後に到達したときにOFF1分だけインクリメントされ、またブロックの最後に到達したときにOFF2、ロウブロックの最後のブロックに到達したときにOFF３分だけインクリメントされる。それ以外はDMAで転送したバイト数だけインクリメントされる。１６はそのためのマルチプレクサである。１２から１９までがリングバッファの定義と関係なく生成される内部アドレスカウンタ生成用のロジックである。２０はメモリアドレスを生成するためのマルチプレクサで、２１がメモリアドレスレジスタである。２０のマルチプレクサはINTA<UAかINTA>=UAでＩＮＴＡアドレスをそのまま出力するか、演算結果アドレスを出力するかを選択するためのロジックである。LA+(INTA-UA)を生成する演算器が２２である。また、内部アドレスカウンタ値がリングバッファ領域を外れた後、さらにメモリアドレスがリングバッファ下底アドレスに到達したときのためにメモリアドレスを再計算するための演算器が２５である。このときUAの代わりにINTA'２４が入力される。
【図面の簡単な説明】
【００２０】
【図１】DMAコントローラ内部構成図
【図２】メモリバスインターフェース
【図３】矩形DMA転送領域
【図４】リングバッファでのDMA転送（リングバッファがブロック境界の場合）
【図５】リングバッファでのDMA転送（リングバッファがブロック境界でない場合）
【図６】アドレスチェインを利用したDMA転送
【図７】アドレス生成器のデータパス
【符号の説明】
【００２１】
１  DMAコントローラ
２  レジスタインターフェース
３  デバイスインターフェース
４  メモリバスインターフェース
５  FIFO
６  画像処理用メモリバス
７  バスリクエスト制御ブロック
８  アドレス生成ブロック
９  転送長カウンタブロック
10  リングバッファ上底アドレスレジスタ
11  リングバッファ下底アドレスレジスタ
12  スタートアドレスレジスタ
13  ライン間オフセットアドレスレジスタ
14  ブロック間オフセットアドレスレジスタ
15  ストライプ間オフセットアドレスレジスタ
16  インクリメントアドレス選択用マルチプレクサ
17  内部アドレス用演算器
18  内部アドレスレジスタ用マルチプレクサ
19  内部アドレスレジスタ
20  メモリアドレスレジスタ用マルチプレクサ
21  メモリアドレスレジスタ
22  リングバッファ領域演算器
23  内部アドレスレジスタ保存用マルチプレクサ
24  内部アドレス保存レジスタ
25  リングバッファ領域演算器
26  メモリアドレスの内部アドレスへのロード
【図１】
2007087178.tif 000003
【図２】
2007087178.tif 000004
【図３】
2007087178.tif 000005
【図４】
2007087178.tif 000006
【図５】
2007087178.tif 000007
【図６】
2007087178.tif 000008
【図７】
2007087178.tif 000009