(57)【要約】【課題】矩形転送とリングバッファ転送を同一の回路で実現可能にすることにより、回路規模を削減する。【解決手段】リングバッファのスタートアドレスを設定するレジスタ１０２と、現在の転送アドレスを保持するレジスタ１０３と、スタートアドレスからエンドアドレスまでのＤＭＡ転送回数を設定するレジスタ１０６と、エンドアドレスからスタートアドレスまでの差分を設定するレジスタ１０５と、レジスタ１０６に設定されたＤＭＡ転送回数をカウントするカウンタ１０７とを備える。矩形領域のＤＭＡ転送の際にはレジスタ１０６には連続領域におけるＤＭＡ転送回数を設定し、レジスタ１０５には非連続領域のアドレス増分を設定する。カウンタ１０７のカウント終了時にはレジスタ１０３の値とレジスタ１０５の値を加算して次のアドレスとする。【選択図】  図１
2004287757.tif 000002
【特許請求の範囲】
【請求項１】
リングバッファアドレスを発生するＤＭＡ制御装置であって、
リングバッファのスタートアドレスを設定する第１のレジスタと、
リングバッファのスタートアドレスからエンドアドレスまでのＤＭＡ転送回数を設定する第２のレジスタと、
リングバッファのエンドアドレスからスタートアドレスまでの差分を設定する第３のレジスタと、
を備えるＤＭＡ制御装置。
【請求項２】
ある領域に含まれる矩形領域のＤＭＡ転送において、前記第２のレジスタは矩形領域の連続領域におけるＤＭＡ転送回数を設定するレジスタとして使用する請求項１記載のＤＭＡ制御装置。
【請求項３】
ある領域に含まれる矩形領域のＤＭＡ転送において、前記第３のレジスタは非連続領域のアドレス増分を設定するレジスタとして使用する請求項１または２記載のＤＭＡ制御装置。
【請求項４】
現在の転送アドレスを保持する第４のレジスタと、
前記第２のレジスタに設定されたＤＭＡ転送回数をカウントするカウンタと、前記カウンタが前記第２のレジスタに設定されたＤＭＡ転送回数のカウントを終了したときに前記第３のレジスタ値と前記第４のレジスタ値を加算する加算器と、
を備える請求項１から３のいずれか一項記載ＤＭＡ制御装置。
【請求項５】
リングバッファのＤＭＡ転送を実行するためのプログラムであって、コンピュータを、
リングバッファ転送の場合は、リングバッファのスタートアドレスを第１のレジスタに設定する手段、リングバッファのスタートアドレスからエンドアドレスまでのＤＭＡ転送回数を第２のレジスタに設定する手段、リングバッファのエンドアドレスからスタートアドレスまでの差分を第３のレジスタに設定する手段として機能させ、
矩形転送の場合は、転送開始時のスタートアドレスを前記第１のレジスタに設定する手段、矩形領域の連続領域におけるＤＭＡ転送回数を前記第２のレジスタに設定する手段、非連続領域のアドレス増分を前記第３のレジスタに設定する手段として機能させるプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、メモリと周辺装置との間でＤＭＡ方式によるデータ転送を行うＤＭＡ制御装置に関するものである。
【０００２】
【従来の技術】
メモリと周辺装置との間のデータ転送を高速化するために、ＣＰＵを介さずにメモリと周辺装置との間でデータ転送を行うための専用のハードウエアとしてＤＭＡ制御装置が用いられている。図２から図７は従来のＤＭＡ制御装置を説明するための図であり、図２及び図３は矩形転送における非連続なメモリ領域からのＤＭＡ転送を説明するための図、図４はリングバッファにおけるデータ転送を説明するためのアドレス空間を示す図、図５はリングバッファにおけるデータ転送を説明するためのアドレス空間を示す図、図６は従来のＤＭＡ制御装置におけるアドレス発生回路部の構成例を示すブロック図、図７はＤＭＡ制御装置（ＤＭＡＣ）を使用する一般的なシステムＬＳＩの構成例を示すブロック図である。
【０００３】
図７において、高速バス７１１にバスマスタとなるＣＰＵ７０１とＤＭＡＣ７０２が接続されており、バススレーブとしてＲＯＭ７０３、ＲＡＭ７０４、ＳＤＲＡＭ７０６、バスブリッジ７０５が接続されている。バスブリッジ７０５は、高速バス７１１と低速バス７１２との間に位置し、低速バス７１２には、シリアル装置７０７、蓄積メディア装置７０８、ＵＳＢ装置７０９が接続されている。
【０００４】
図６において、アドレス発生回路部６０１はＤＭＡＣ７０２においてリングバッファ転送及び矩形転送が実現可能な構成となっている。
【０００５】
まず、矩形転送の動作について説明する。図７のＳＤＲＡＭ７０６上に画像データが保存されているような場合に、その画像全体ではなく画像データの一部をＲＡＭ７０４上にＤＭＡ転送して処理したいことがある。これは、例えば、携帯電話における待ち受け画面と、その一部であるアンテナ（待ち受け状態を表示）の画像などである。このように画像データの一部を転送するような場合に矩形転送が使用される。
【０００６】
図２及び図３に示す矩形転送における非連続なメモリ領域からのＤＭＡ転送において、図３は画像領域３０１とその一部の矩形領域３０２と関係を示し、図２はアドレス空間における矩形領域３０２の配置を示している。
【０００７】
図３において矩形領域３０２を転送するためには、連続してＤＭＡ転送すべき領域（連続領域）のデータ長Ｌ１についてのみＤＭＡ転送を行い、ＤＭＡ転送が不要な領域（非連続領域）のデータ長Ｌ２については転送を行わない。これを図２のアドレス空間で示すと、矩形領域３０２を転送するためにはアドレス２０１〜２０２、２０３〜２０４、２０５〜２０６のような領域を転送することになる。
【０００８】
すなわち、２０１をスタートアドレスとしてアドレス２０２までのデータ長Ｌ１のデータを転送後、データ長Ｌ２の領域は転送不要なデータであるので、転送アドレスはアドレス２０２からアドレス２０３へジャンプする。同様に、アドレス２０３からアドレス２０４までデータ長Ｌ１の領域を転送し、転送アドレスをアドレス２０４からアドレス２０５にジャンプさせる。このようにして矩形領域への転送を行う。
【０００９】
上記のような矩形アドレスをアドレス発生回路６０１で発生する動作を説明する。まず、ＣＰＵ７０１からＤＭＡＣ７０２に対してのレジスタ設定によりＤＭＡ転送パラメータが設定される。このとき、レジスタ６０２にスタートアドレスが、レジスタ６０６に連続領域のＤＭＡ転送回数が、レジスタ６０５に非連続領域のアドレス増分がそれぞれ設定される。
【００１０】
次にＤＭＡ転送が開始される。まず、スタートアドレスが設定されたレジスタ６０２の値がマルチプレクサ６１０により選択され、転送アドレス出力を保持するレジスタ６１１及び転送アドレスを内部で参照するために設けられたレジスタ６０３にセットされる。
【００１１】
その後、アドレスインクリメント量を保持するレジスタ６０４の値とマルチプレクサ６０８によって選択された転送アドレスを保持するレジスタ６０３の値が加算器６０９によって加算され、これがマルチプレクサ６１０によって選択され、レジスタ６１１及びレジスタ６０３に再度セットされる。
【００１２】
アドレスインクリメント量は、通常のアドレスを１つずつ増加させて転送する場合は１であり、３２ビットバスで８ビット毎にアドレスが割り振られているような場合には４となる。ここで現在の転送アドレスをＡＤＣ、次回の転送アドレスをＡＤＮとし、インクリメント量をＡＩとすると、「ＡＤＮ＝ＡＤＣ＋ＡＩ」となる。
【００１３】
一方、連続領域のＤＭＡ転送回数が設定されたレジスタ６０６の値はＤＭＡ転送開始時にカウンタ６０７にロードされ、ＤＭＡ転送サイクル毎にカウンタ６０７をカウントダウンしていく。カウンタ６０７のアンダーフロー発生は連続領域のＤＭＡ転送の終了を示す。このとき、マルチプレクサ６０８は非連続領域のアドレス増分を加算するために加算器６１５の出力を選択し、カウンタ６０７にはレジスタ６０６の値を再度ロードする。
【００１４】
加算器６１５は非連続領域のアドレス増分が設定されているレジスタ６０５と現在の転送アドレスが保持されているレジスタ６０３を加算する。ここで非連続領域のアドレス増分をＡＤＲとすると、次回の転送アドレスＡＤＮは、「ＡＤＮ＝ＡＤＣ＋ＡＤＲ＋ＡＩ」となる。
【００１５】
ここで、ＡＤＲとＡＩを加算する理由は、連続領域の最後のアドレスは非連続領域の最初のアドレスよりもＡＩだけ少ないためであり、連続領域の最後のアドレスに非連続領域のアドレス増分を加算すると、非連続領域の最後のアドレスになるからである。
【００１６】
このように、カウンタ６０７のアンダーフロー発生時にマルチプレクサ６０８を切り換えることにより次の連続領域のスタートアドレスにジャンプすることで、図３に示したような矩形領域のＤＭＡ転送を実現している。
【００１７】
次に、リングバッファの動作について説明する。シリアル装置７０７やＵＳＢ装置７０９からのデータは、一般的に、シリアル装置７０７やＵＳＢ装置７０９内部にあるＦＩＦＯ等のメモリに蓄積され、ＤＭＡＣ７０２によってＲＡＭ７０４やＳＤＲＡＭ７０６へ転送される。このような連続的なデータを順次受信する場合は、ＲＡＭ７０４上のある一定の範囲をリングバッファとして構成することがある。
【００１８】
図４及び図５に示すリングバッファにおけるデータ転送を説明するためのアドレス空間において、４０１はリングバッファのスタートアドレスであり、４０２はリングバッファのエンドアドレスである。
【００１９】
ＵＳＢ装置７０９等から受信したデータはスタートアドレス４０１から順次蓄積されていくが、アドレス４０２に到達した時点でアドレス４０１に転送アドレスを戻すこととなる。リングバッファから読み出す場合も同様にスタートアドレス４０１から順次リードしていくが、アドレス４０２に到達した時点でアドレス４０１に転送アドレスを戻すこととなる。
【００２０】
ここでＷＰはメモリにライトする側のＤＭＡ制御装置の転送アドレスであり、ＲＰはメモリからリードする側のＤＭＡ制御装置の転送アドレスである。ＷＰとＲＰとは同時に動作しており、図４において、領域Ｍ１はライトされかつリードされた領域であり、領域Ｍ２は１度ライトされたがリード待ち状態にある領域であり、領域Ｍ３は未だデータがライトされていない領域である。
【００２１】
図５は図４から一定時間が経過しＷＰが４０２で折り返した状態を示している。領域Ｍ４は２度目のライトが行われており、リードは１度行われたが２度目にライトしたデータは未だ読み出されていない領域である。領域Ｍ５は１度ライトされかつ１度リードされた領域である。領域Ｍ６は１度ライトされたが１度目のリード待ち状態にある領域である。
【００２２】
このようなリングバッファのデータ転送を実現するために、従来のＤＭＡ制御装置においては、リングバッファのスタートアドレスを指定するレジスタ６１２と、リングバッファのエンドアドレスを指定するレジスタ６１３と、現在の転送アドレスを保持するレジスタ６０３とレジスタ６１３を比較するための比較器６１４とを設け、比較器６１４の結果によりマルチプレクサ６１０がリングバッファのスタートアドレスを保持するレジスタ６１２を選択するように構成している（例えば、特許文献１参照）。
【００２３】
【特許文献１】
特開平６−４４５８号公報
【００２４】
【発明が解決しようとする課題】
しかしながら上記従来の方法では、リングバッファのＤＭＡ転送を実現するために、リングバッファのスタートアドレスレジスタや、エンドアドレスレジスタと比較器等のリングバッファ専用の回路を追加する必要がある。
【００２５】
また、汎用的に使用されるＤＭＡ制御装置においては、リングバッファ転送だけでなく前述した矩形領域ような非連続領域の転送をもサポートしなくてはならない場合も多い。このような汎用のＤＭＡ制御装置に対する機能追加の要望を全てサポートするには、図６のように回路構成が複雑になるため回路規模が増加してしまうという問題があった。この問題は、特にＤＭＡ転送を行う複数の周辺装置と複数のチャネルを有する場合に顕著となる。
【００２６】
本発明は上記従来の問題点を解決するもので、リングバッファのＤＭＡ転送を実現するために、矩形転送とリングバッファ転送を同一の回路で実現可能にすることにより、リングバッファ専用の回路追加を不要にして回路規模を削減することができるＤＭＡ制御装置を提供することを目的とする。
【００２７】
【課題を解決するための手段】
請求項１のＤＭＡ制御装置は、リングバッファアドレスを発生するＤＭＡ制御装置であって、リングバッファのスタートアドレスを設定する第１のレジスタと、リングバッファのスタートアドレスからエンドアドレスまでのＤＭＡ転送回数を設定する第２のレジスタと、リングバッファのエンドアドレスからスタートアドレスまでの差分を設定する第３のレジスタとを備えるものである。
【００２８】
上記構成によれば、汎用的な第１から第３のレジスタ回路によりリングバッファのＤＭＡ転送を実現することができ、リングバッファ専用の回路追加が不要になり、回路規模を削減することができる。
【００２９】
請求項２のＤＭＡ制御装置は、請求項１記載のＤＭＡ制御装置において、ある領域に含まれる矩形領域のＤＭＡ転送の際に、前記第２のレジスタは矩形領域の連続領域におけるＤＭＡ転送回数を設定するレジスタとして使用するものである。
【００３０】
上記構成によれば、リングバッファのスタートアドレスからエンドアドレスまでのＤＭＡ転送回数を設定する第２のレジスタについて、矩形転送とリングバッファ転送を同一の回路で実現することが可能になり、回路規模を削減することができる。
【００３１】
請求項３のＤＭＡ制御装置は、請求項１または２記載のＤＭＡ制御装置において、ある領域に含まれる矩形領域のＤＭＡ転送の際に、前記第３のレジスタは非連続領域のアドレス増分を設定するレジスタとして使用するものである。
【００３２】
上記構成によれば、リングバッファのエンドアドレスからスタートアドレスまでの差分を設定する第３のレジスタについて、矩形転送とリングバッファ転送を同一の回路で実現することが可能になり、回路規模を削減することがことができる。
【００３３】
請求項４のＤＭＡ制御装置は、請求項１から３のいずれか一項記載ＤＭＡ制御装置において、現在の転送アドレスを保持する第４のレジスタと、前記第２のレジスタに設定されたＤＭＡ転送回数をカウントするカウンタと、前記カウンタが前記第２のレジスタに設定されたＤＭＡ転送回数のカウントを終了したときに前記第３のレジスタ値と前記第４のレジスタ値を加算する加算器とを備えるものである。
【００３４】
上記構成によれば、汎用的な第１から第４のレジスタ回路とＤＭＡ転送回数をカウントするカウンタを用いた回路構成により、リングバッファのＤＭＡ転送と矩形領域のＤＭＡ転送とを同一の回路で実現することができるため、リングバッファ専用の回路追加が不要になり、回路規模を削減することができる。
【００３５】
請求項５のプログラムは、リングバッファのＤＭＡ転送を実行するためのプログラムであって、コンピュータを、リングバッファ転送の場合は、リングバッファのスタートアドレスを第１のレジスタに設定する手段、リングバッファのスタートアドレスからエンドアドレスまでのＤＭＡ転送回数を第２のレジスタに設定する手段、リングバッファのエンドアドレスからスタートアドレスまでの差分を第３のレジスタに設定する手段として機能させ、矩形転送の場合は、転送開始時のスタートアドレスを前記第１のレジスタに設定する手段、矩形領域の連続領域におけるＤＭＡ転送回数を前記第２のレジスタに設定する手段、非連続領域のアドレス増分を前記第３のレジスタに設定する手段として機能させるものである。
【００３６】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照しながら説明する。図１は本発明の一実施の形態に係るＤＭＡ制御装置におけるアドレス発生回路部の構成を示すブロック図である。
【００３７】
図１において、アドレス発生回路１０１は、ＣＰＵからアクセス可能なＤＭＡ制御レジスタ１０２、１０５、１０６、ＤＭＡの転送アドレスを保持するレジスタ１１１、内部の制御レジスタ１０３、１０４、カウンタ１０７、マルチプレクサ１０８、１１０、加算器１０９を備える。
【００３８】
まずリングバッファへの転送を実現するための動作について説明する。レジスタ１０２はリングバッファのスタートアドレスを設定するレジスタであり、レジスタ１０６はリングバッファのスタートアドレスからエンドアドレスまでの転送回数を設定するレジスタであり、レジスタ１０５はリングバッファのスタートアドレスからエンドアドレスまでの差分を２の補数で設定するレジスタである。
【００３９】
制御プログラムの実行により、ＤＭＡ転送開始前に各レジスタには、所望のＤＭＡデータ転送を行うための値が設定される。ＤＭＡ転送開始直後は、マルチプレクサ１１０はレジスタ１０２の値をレジスタ１１１及びレジスタ１０３に受け渡し、ＤＭＡ制御装置からはレジスタ１１１の値がリングバッファのスタートアドレスとして出力される。
【００４０】
その後は、マルチプレクサ１１０は加算器１０９からの出力を選択するが、マルチプレクサ１０８は通常、ＤＭＡ転送サイクル毎のアドレスインクリメント量を保持するレジスタ１０４を選択し、レジスタ１０４の値と現在の転送アドレスを保持するレジスタ１０３の値とが加算器１０９に入力されているため、レジスタ１０３の値とレジスタ１０４の加算値がレジスタ１１１にセットされる。
【００４１】
これにより、リングバッファの転送領域においてアドレスが順次インクリメントされていく。一方、リングバッファのサイズ情報を保持するレジスタ１０６の値は転送開始と同時にカウンタ１０７にロードされ、ＤＭＡ転送サイクル毎にカウンタ１０７がデクリメントされる。
【００４２】
ＤＭＡ転送アドレスがリングバッファのエンドアドレスに到達するとカウンタ１０７がアンダーフローする。カウンタ１０７のアンダーフロー発生時には、マルチプレクサ１０８はレジスタ１０５を選択する。これにより、加算器１０９はレジスタ１０３の値とレジスタ１０５の値を加算する。
【００４３】
レジスタ１０５にはリングバッファのエンドアドレスとスタートアドレスの差分が２の補数で設定されているため、レジスタ１０３の値から差分を減算することになり、レジスタ１１１及びレジスタ１０３にはリングバッファのスタートアドレスが設定される。
【００４４】
カウンタ１０７のアンダーフロー発生時のアドレス計算を式で示すならば、レジスタ１０３に保持された現在の転送アドレスをＡＤＣ、次回の転送アドレスをＡＤＮとすれば、レジスタ１０５にはリングバッファのエンドアドレスをＡＲＥとスタートアドレスをＡＲＳの差分ＡＲＳ−ＡＲＥが設定されているため、「ＡＤＮ＝ＡＤＣ＋（ＡＲＳ−ＡＲＥ）」となる。
【００４５】
ここで、カウンタ１０７のアンダーフロー発生時にはＡＤＣはリングバッファのエンドアドレスＡＲＥと等しいので、「ＡＤＮ＝ＡＲＳ」となり、次回転送アドレスはリングバッファのスタートアドレスとなる。上述のような動作を繰り返すことにより、図１の回路構成にてリングバッファへのデータ転送が実現できる。
【００４６】
一方、矩形領域への転送を実現するには、レジスタ１０２にＤＭＡ転送を開始するスタートアドレスを設定し、レジスタ１０６には連続転送領域のＤＭＡ転送回数を設定し、レジスタ１０５は非連続領域のアドレス増分を設定する。
【００４７】
このときの動作は前述したリングバッファと同様であるが、カウンタ１０７のアンダーフロー発生時にマルチプレクサ１０８が選択するレジスタ１０５には非連続領域のアドレス増分が設定されているため、非連続領域のアドレス増分をＡＤＲ、現在の転送アドレスをＡＤＣ、次回の転送アドレスをＡＤＮ、通常の転送アドレスインクリメント量をＡＩとすると、「ＡＤＮ＝ＡＤＣ＋ＡＤＲ＋ＡＩ」となる。
【００４８】
この演算を行うために従来技術では２つの加算器が使用されていた。例えば、３２ビットバスで８ビット毎にアドレスが割り振られているような場合に３２ビット毎のＤＭＡ転送を行うならば、通常のアドレスインクリメント量は４となる。このような場合に対しては、「ＡＤＮ＝ＡＤＣ＋ＡＤＲ＋４」を演算する必要があり、そのままでは１つの演算では対応できない。
【００４９】
これを１つの加算器で実現するには２つの手段がある。一つは、非連続領域のアドレス増分を設定するレジスタ１０５に対して、ＡＤＲの代わりにＡＤＲ＋４を設定する方法である。もう一つの方法は、加算器を制御して４を余計に加算する方法である。
【００５０】
後者については、例えば、転送アドレスが３２ビット毎に整列されている３２ビット毎のＤＭＡ転送であれば、アドレスの下位２ビットは０であるので、アドレス下位２ビットをともに１に固定することにより３を加算するように擬制することができる。これにキャリー操作を加えることにより、「ＡＤＮ＝ＡＤＣ＋ＡＤＲ＋３＋１」（キャリー操作）とすることができる。
【００５１】
ただし、このように加算器回路の制御を固定した場合は、前述のリングバッファ転送の際にもこの制御が有効になってしまうため、リングバッファのスタートアドレスとエンドアドレスの差分を設定するレジスタ５には、「ＡＲＳ−（ＡＲＥ＋４）」を設定しなければならない。
【００５２】
【発明の効果】
以上説明したように、本発明によれば、レジスタとＤＭＡ転送回数をカウントするカウンタを用いた汎用的な回路構成により、リングバッファのＤＭＡ転送と矩形領域のＤＭＡ転送とを同一の回路で実現することができ、リングバッファ専用の回路追加を不要になり、ＤＭＡ制御装置の回路規模を削減することができる。
【図面の簡単な説明】
【図１】本発明の一実施の形態に係るＤＭＡ制御装置におけるアドレス発生回路部の構成を示すブロック図。
【図２】矩形転送におけるアドレス空間の矩形領域配置を示す図。
【図３】矩形転送における連続部と非連続部の関係を説明する図。
【図４】リングバッファにおけるデータ転送を説明するためのアドレス空間を示す図。
【図５】リングバッファにおけるデータ転送を説明するためのアドレス空間を示す図。
【図６】従来のＤＭＡ制御装置におけるアドレス発生回路部の構成例を示すブロック図。
【図７】ＤＭＡ制御装置を使用するシステムＬＳＩの構成例を示すブロック図。
【符号の説明】
１０１、６０１  アドレス発生回路
１０２、１０３、１０４、１０５、１０６、１１１、６０２、６０３、６０４、６０５、６０６、６１１、６１２、６１３  レジスタ
１０７、６０７  カウンタ
１０８、１１０、６０８、６１０  マルチプレクサ
１０９、６０９、６１５  加算器
２０１〜２０６、４０１、４０２  アドレス
３０１  画像領域
３０２  画像領域中の矩形領域
６１４  比較器
７０１  ＣＰＵ
７０２  ＤＭＡ制御装置
７０３  ＲＯＭ
７０４  ＲＡＭ
７０５  バスブリッジ
７０６  ＳＤＲＡＭ
７０７  シリアル装置
７０８  蓄積メディア装置
７０９  ＵＳＢ装置
７１１  高速バス
７１２  低速バス
【図１】
2004287757.tif 000003
【図２】
2004287757.tif 000004
【図３】
2004287757.tif 000005
【図４】
2004287757.tif 000006
【図５】
2004287757.tif 000007
【図６】
2004287757.tif 000008
【図７】
2004287757.tif 000009