(57)【要約】【課題】  ＤＭＡ転送により任意のバイトサイズのデータを転送する際に、どのアドレスからもバイトアライン位置に影響されることなく、データ転送回数を少なくして転送時間を短縮することができるＤＭＡ転送制御装置を提供する。【解決手段】  ＤＭＡ転送制御装置２００は、転送元アドレスレジスタ２０１、転送先アドレスレジスタ２０２、転送サイズレジスタ２０３、処理転送サイズを決定する処理転送サイズ決定部２０４、転送元アドレス及び転送先アドレスからデータシフト量を算出するデータシフト量演算器２０５、読み込みデータ及び書き込みデータをデータシフトさせながらバッファ２０８に書き込み及び読み込みするデータシフト器２０６及び２０７、転送バイトサイズに従って、データ読み込み及びデータ書き込み転送を行うバスサイクル発生器２０９、ＤＭＡ転送の実行を指示するＤＭＡ転送制御器２１０等を備える。【選択図】      図１
2006004340.tif 000002
【特許請求の範囲】
【請求項１】
複数バイトのバス幅のバスを介して、外部制御手段の制御に基づき転送元に格納された連続データを転送先にＤＭＡ転送する為の構成を備えたＤＭＡ転送制御装置において、
前記転送元に格納された連続データの転送元開始アドレス及び前記転送先の転送先開始アドレス、並びに前記連続データのデータサイズを前記外部制御手段からそれぞれ取得して設定する転送パラメータ設定手段と、
この転送パラメータ設定手段に設定された前記転送元開始アドレスに基づき、前記転送元に格納された連続データを前記バス幅に対するアラインメント境界に合致するようデータシフトさせながら順次読み出して一時記憶し、この一時記憶された連続データを前記転送パラメータ設定手段に設定された前記転送先開始アドレスに基づき、前記バス幅に対するアラインメント境界に合致するようデータシフトさせながら順次読み出して前記転送先に格納するデータシフト手段
とをそれぞれ具備した構成であることを特徴とするＤＭＡ転送制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バス幅に対してアラインメントされていないアドレスに対しても、効率的なブロックデータ転送が可能なＤＭＡ転送制御装置に関する。
【背景技術】
【０００２】
ＤＭＡ（ダイレクトメモリアクセス）は、データ転送元からデータ転送先へのデータ転送を制御する為の１つの方式である。ＤＭＡ転送では、データ転送元アドレス、データ転送先アドレス、データ転送サイズをレジスタ等に設定し、その後、ＣＰＵ等が転送開始を制御することによりＤＭＡ転送制御装置は転送動作を開始する。転送時にはシステムのＣＰＵによる転送制御の必要はない為、データの転送速度を向上させ、ＣＰＵの負担を減らすことができる。レジスタ等に設定されたデータサイズの転送が完了した場合、ＤＭＡ転送制御装置はＤＭＡ転送終了割り込みをアサートする。ＣＰＵは、ＤＭＡ転送終了割り込みのアサートが発生すると、実際に転送を終了したデータサイズ結果やＤＭＡ転送の停止や転送中等のステータスを報告する為のレジスタ等を読み込み、ＤＭＡ転送の動作を監視する。尚、ＤＭＡ転送の際は、１回のアドレス指定で複数個のバイトデータをまとめて連続的に転送するバースト転送を利用する場合が多い。
【０００３】
このＤＭＡ転送方式を利用したものでは、アドレスがバイトアラインの何処に位置しているかにより、一度に転送できるバイトサイズを決定させる手法がある（特許文献１参照。）。
【特許文献１】特開２０００−１３２４９７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記のＤＭＡ転送方式においては、バイトアライン上のアドレスの位置により、一度に転送するバイトサイズが決定される為、転送するデータ内に空データが含まれている場合でも、アドレスの位置から順番にデータ転送を行なってしまい、転送効率が悪かった。これは、大きなデータサイズの転送を行なう場合の転送処理の高速化の妨げとなっていた。
【０００５】
本発明は、ＤＭＡ転送により任意のバイトサイズのデータを転送する際に、どのアドレスからもバイトアライン位置に影響されることなく、データ転送回数を少なくして転送時間を短縮することができるＤＭＡ転送制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記の問題点を鑑みて、本発明の特徴は、［イ］複数バイトのバス幅のバスを介して、外部制御手段（１００）の制御に基づき転送元（２１１）に格納された連続データを転送先（２１２）にＤＭＡ転送する為の構成を備えたＤＭＡ転送制御装置において、転送元に格納された連続データの転送元開始アドレス及び転送先の転送先開始アドレス、並びに連続データのデータサイズを外部制御手段からそれぞれ取得して設定する転送パラメータ設定手段（２０１，２０２，２０３）と、［ロ］この転送パラメータ設定手段に設定された転送元開始アドレスに基づき、転送元に格納された連続データをバス幅に対するアラインメント境界に合致するようデータシフトさせながら順次読み出して一時記憶し、この一時記憶された連続データを転送パラメータ設定手段に設定された転送先開始アドレスに基づき、バス幅に対するアラインメント境界に合致するようデータシフトさせながら順次読み出して転送先に格納するデータシフト手段（１１０，２０６，２０７，２０８）とを備えるＤＭＡ転送制御装置であることを要旨とする。
【発明の効果】
【０００７】
本発明によれば、任意のバイトサイズのデータをＤＭＡ転送する際に、データをシフト処理しながら読み込み転送及び書き込み転送することで、どのアドレスからもバイトアライン位置に影響されることなく、バス幅を最大限に利用したデータ転送が可能である。又、従来よりもデータ転送回数を少なくして転送時間の短縮化を実現できる。更に、広いデータバス幅において利用することも可能である。
【発明を実施するための最良の形態】
【０００８】
以下、本発明の実施の形態に係るＤＭＡ転送制御装置について説明する。尚、本発明の実施の形態において使用される機器、手法等は一例であり、本発明はこれらに限定されるものではないことは勿論である。
【０００９】
（実施の形態）
コンピュータ内部で各回路がデータをやり取りするための伝送路は一般に「バス」と呼ばれる。複数の信号線で同時に複数のビットを転送するパラレル転送方式でデータを伝送する際、1回の転送で同時に送れるデータの量は「バス幅」と呼ばれる。
【００１０】
バスは大きく分けて、ＣＰＵ内部の回路間を結ぶ内部バス、ＣＰＵとＲＡＭなどの周辺回路を結ぶ外部バス、拡張スロットに接続された拡張カードとコンピュータ本体を結ぶ拡張バスの３種類がある。ＣＰＵの処理速度は内部バスのバス幅に大きく左右されるため、８ビット、１６ビットなど、バス幅がＣＰＵの性能指標としてよく使われる。
【００１１】
外部バスとＲＡＭ間のＤＭＡ転送においては、ＣＰＵを介さずに各外部装置とＲＡＭの間で直接データ転送が行われるが、本発明の実施の形態に係るＤＭＡ転送制御装置２００においては、ブロック転送の基本単位（以後「１クール」と記す）をＤＭＡ転送制御装置内のバッファの最大値とする。更に１クール内の１サイクル毎の転送サイズをバス幅の最大値とし、所定のデータシフト処理を行ないながらＤＭＡ転送を行なう。これにより、任意のバイトサイズのデータを転送する際に、どのアドレスからもバイトアライン位置に影響されることはなく、データ転送回数は少なくなる。
【００１２】
（ＤＭＡ転送制御装置）
本発明の実施の形態に係るＤＭＡ転送制御装置２００は、図１に示すように、転送パラメータ設定手段である転送元アドレスレジスタ２０１、転送先アドレスレジスタ２０２及び転送サイズレジスタ２０３と、データシフト手段であるデータシフト器２０６，２０７、バッファ２０８及びレジスタ１１０と、処理転送サイズ決定部２０４と、データシフト量演算器２０５と、バスサイクル発生器２０９とＤＭＡ転送制御器２１０等を備えている。
【００１３】
転送元アドレスレジスタ２０１は、転送元アドレスを保持する。転送先アドレスレジスタ２０２は、転送先アドレスを保持する。転送サイズレジスタ２０３は、転送サイズを保持する。
【００１４】
処理転送サイズ決定部２０４は、転送サイズレジスタ２０３から得る転送サイズとバッファ２０８のサイズを比較して、１クールで転送可能な最大の転送サイズである処理転送サイズを決定する。
【００１５】
データシフト量演算器２０５は、転送元アドレスレジスタ２０１及び転送先アドレスレジスタ２０２から得る転送元アドレス及び転送先アドレスから、データシフト器２０６及び２０７で利用するデータシフト量を算出する。
【００１６】
データシフト器２０６及び２０７はデータシフト量演算器２０５から得るデータシフト量に従って、転送元メモリ２１１からの読み込みデータをデータシフトさせながらバッファ２０８に書き込みしたり、バッファ２０８から読み込みしたデータをデータシフトさせながら転送先メモリ２１２に書き込みしたりする。
【００１７】
バッファ２０８は、転送元メモリ２１１と転送先メモリ２１３との間においてデータをやり取りするときに、処理速度や転送速度の差を補うためにデータを一時的に保存しておく為の記憶部である。
【００１８】
バスサイクル発生器２０９は、転送元アドレスレジスタ２０１で指示される転送元メモリ２１１及び転送先アドレスレジスタ２０２で指示される転送先メモリ２１２に対して、処理転送サイズ決定部２０４より得る転送バイトサイズに従って、データ読み込み及びデータ書き込み転送を行う。
【００１９】
ＤＭＡ転送制御器２１０は、ＣＰＵ１００又は図示しない周辺回路からの転送要求に基づく転送要求信号の入力により、ＤＭＡ転送制御装置２００によるＤＭＡ転送の実行を指示する。
【００２０】
ＤＭＡ転送制御装置２００は外部バスを介して、ＣＰＵ１００、レジスタ１１０、転送元メモリ２１１及び転送先メモリ２１２に接続される。レジスタ１１０、転送元メモリ２１１、転送先メモリ２１２、２個のデータシフト器２０６及び２０７、バッファ２０８は、それぞれ複数バイト幅のデータバスで接続されている。
【００２１】
ＣＰＵ１００は外部制御手段であり、転送元アドレスレジスタ２０１、転送先アドレスレジスタ２０２、転送サイズレジスタ２０３に所定の値を設定し、ＤＭＡ転送の要求を受けるとＤＭＡ転送処理の開始を指示する。一度ＤＭＡ転送が開始されると、ＣＰＵ１００はＤＭＡ転送に関しての直接の命令は行わない。レジスタ１１０は、データシフト器２０６及び２０７がシフト処理を行なう際の作業用領域として使用される。
【００２２】
（ＤＭＡ転送制御装置の動作）
以下、本発明の実施の形態に係るＤＭＡ転送制御装置２００が、図１の転送元メモリ２１１からデータを読み込み、転送先メモリ２１２に書き込むデータ転送動作について図２のフローチャートを用いて説明する。
【００２３】
尚、以下において説明するデータ転送動作は、データバス幅１６バイトのバースト転送の場合のものであり、ＣＰＵ１００の制御命令により、転送元アドレス、転送先アドレス及び転送バイトサイズが、それぞれ図１の転送元アドレスレジスタ２０１、転送先アドレスレジスタ２０２、転送サイズレジスタ２０３に既に設定されているものとする。
【００２４】
(ａ)先ず、ステップＳ１０１においては、ＤＭＡ転送制御器２１０が、ＳＣＳＩインタフェース等の外部インタフェースを介してＤＭＡ転送の要求を受信したか否かを判定する。尚、判定要求を受信していない場合には、ＤＭＡ転送制御器２１０はこの判定を続ける。
【００２５】
（ｂ）ＤＭＡ転送の要求がある場合は、ステップＳ１０２において、ＣＰＵ１００がＤＭＡ転送制御装置２００に対しＤＭＡ転送開始を指示し、ＤＭＡ転送制御装置２００は、転送元アドレスレジスタ２０１内の転送元アドレスを読み出す。ステップＳ１０３において、データシフト量演算器２０５が、読み出された転送元アドレスの値よりデータシフト量を算出する。
【００２６】
（ｃ）ステップＳ１０４においては、データシフト器２０６は、転送先アドレスレジスタ２０２内の転送先アドレスを読み出す。ステップＳ１０５において、データシフト量演算器２０５が、読み出された転送先アドレスの値よりデータシフト量を算出する。
【００２７】
（ｄ）ステップＳ１０６においては、処理転送サイズ決定部２０４は、転送サイズレジスタ２０３内の転送バイトサイズを読み出す。ステップＳ１０７においては、バッファ２０８のサイズとの比較により、処理転送サイズ決定部２０４は、１クールの転送における最大転送サイズである処理転送バイトサイズを決定する。尚、最大転送サイズはバッファ２０８のサイズとなり、以下のような関係になる。
【００２８】
１）転送バイトサイズ＜バッファサイズの場合
転送バイトサイズ＝転送バイトサイズ（転送回数１回）
２）転送バイトサイズ＝バッファサイズの場合
転送バイトサイズ＝バッファサイズ（転送回数１回）
３）転送バイトサイズ＞バッファサイズの場合
転送１回目：転送バイトサイズ＝バッファサイズ
転送２回目：転送バイトサイズ＝（転送バイトサイズ―バッファサイズ）
これ以降、転送するデータの残りのサイズが０となるまで、転送する度に処理転送サイズを決定する。具体的には、バス幅＝１６バイト、バッファサイズ＝２５６バイトである場合、例えば、転送バイトサイズ＝４０バイトであると、処理転送バイトサイズは４０バイトとなり、１６＋１６＋８で、１クール３回の転送処理が必要となる。又、転送バイトサイズ＝２６０バイトであると、処理転送バイトサイズは２５６バイトとなり、１６×１６で１クール目１６回、４×１で２クール目１回の転送処理が必要となる。
【００２９】
（ｅ）ステップＳ１０９〜Ｓ１１２においては、読み込み転送動作となる。まずステップＳ１０９においては、データシフト器２０６は、転送元メモリ２１１内の転送元アドレスが示すデータを読み込みする。バスサイクル発生器２０９はこの読み込みデータをバス幅ずつバッファ２０８へ転送する。ステップＳ１１０においては、データシフト器２０６は、その読み込みデータをステップＳ１０３で算出したデータシフト量分、データシフトを施しながら、ステップＳ１１１にてバッファ２０８へ書き込みする。これらステップＳ１０９〜Ｓ１１１の一連の処理をステップＳ１０７で決定した処理転送バイトサイズ分だけ繰返し、ステップＳ１１２にて転送するデータが０になると、１クールの読み込み転送動作が終了となる。
【００３０】
（ｆ）ステップＳ１１４〜Ｓ１７７は書き込み転送動作となる。先ず、ステップＳ１１４において、データシフト器２０７は、バッファ２０８からデータを読み込みする。ステップＳ１１５においては、データシフト器２０７は、その読み込みデータをステップＳ１０５で算出したデータシフト量分のデータシフト処理を施しながら、ステップＳ１１６にて、転送先メモリ２１２内の転送先アドレスが示す位置へデータ書き込みする。バスサイクル発生器２０９はこの書き込みデータをバス幅ずつバッファ２０８へ転送する。これらステップＳ１１４〜Ｓ１１６の一連の処理を読み込み転送動作でバッファに書き込みしたデータサイズ分だけ繰返し、ステップＳ１１７にて転送するデータが０になると、１クールの書き込み転送動作終了となる。
【００３１】
（ｇ）最後に、ステップＳ１１８において、全ての転送サイズが０か否かの判定を行い、転送サイズが０でない、つまり未だ転送すべきデータが残っている場合はステップＳ１１９へ進み、転送元アドレス、転送先アドレス、転送サイズを更新し、ステップＳ１０２へ戻る。転送サイズが０となった場合、このデータ転送処理を終了する。
【００３２】
（実施例：読み込み転送動作）
次に、ステップＳ１０９〜Ｓ１１２の読み込み転送動作の実施例について述べる。以下においては、図３（ａ）に示すように、転送元アドレスレジスタ２０１内の転送元アドレスは０ｘ０００Ｃ、転送サイズレジスタ２０３内の転送バイトサイズは４０バイトの場合について説明する。
【００３３】
＜処理１＞データシフト量演算器２０５によってデータシフト量＝０ｘＣ（ステップＳ１０３）、処理転送サイズ決定部２０４によって処理転送バイトサイズ＝４０バイト（ステップＳ１０６）と設定される。
【００３４】
＜処理２＞データシフト器２０６は、図３（ａ）の転送元メモリ２１１の最初の４バイトのデータ１を読み込みし（ステップＳ１０９）、図３（ｂ）のレジスタ１１０内のレジスタ１に一時記憶させる。
【００３５】
＜処理３＞データシフト器２０６は、データ１をレジスタ１１０内のレジスタ２に移動させ、次の１６バイトのデータ２を読み込みし、レジスタ１に一時記憶させる（ステップＳ１０９）。
【００３６】
＜処理４＞データシフト器２０６は、レジスタ１とレジスタ２に記憶されているデータ１とデータ２から、０ｘＣだけデータシフトさせて一つのデータに変換する（ステップＳ１１０）。その後、バッファ２０８に書き込みする（ステップＳ１１１）。
【００３７】
＜処理５＞データ２をレジスタ２に移動させ、次のデータ３を読み込みし、レジスタ１に一時記憶させる（ステップＳ１０９）。
【００３８】
＜処理６＞レジスタ１とレジスタ２に記憶されているデータ２とデータ３から、０ｘＣだけデータシフトさせて一つのデータに変換して（ステップＳ１１０）、バッファ２０８に書き込みする（ステップＳ１１１）。
【００３９】
＜処理７＞データ３をレジスタ２に移動させ、次のデータ４を読み込みし（ステップＳ１０９）、レジスタ１に一時記憶させる。
【００４０】
＜処理８＞レジスタ１とレジスタ２に記憶されているデータ３とデータ４から、０ｘＣだけデータシフトさせて一つのデータに変換（ステップＳ１１０）し、バッファ２０８に書き込みする（ステップＳ１１１）。
【００４１】
この様に、転送元アドレスが０ｘ０００Ｃと１６バイトアラインさせていない場合でも、データシフト器２０６が読み込みデータをシフト処理を施しながらバッファへ書き込みすることにより、バッファの先頭から４０バイトのデータを書き込みすることができる。
【００４２】
（実施例：書き込み転送動作）
次に、ステップＳ１１４〜Ｓ１７７は書き込み転送動作の実施例について述べる。以下、転送先アドレスレジスタ２０２内の転送先アドレス０ｘ０００Ｃに対して、読み込み転送によって別途バッファ２０８に書き込みされた４８バイトのデータを書き込み転送する場合について図４を用いて説明する。
【００４３】
＜処理１１＞データシフト量演算器２０５より、データシフト量＝０ｘ４と設定される（ステップＳ１０５）。
【００４４】
＜処理１２＞図４（ａ）のバッファ２０８の先頭から最初の１６バイトのデータ１を読み込みする（ステップＳ１１４）。その後図４（ｂ）のレジスタ１１０内のレジスタ１とレジスタ２に書き込む。
【００４５】
＜処理１３＞データシフト器２０７は、レジスタ１とレジスタ２に記憶されているデータ１から、０ｘ４だけデータシフトさせて一つのデータに変換する（ステップＳ１１５）。
【００４６】
＜処理１４＞シフトされたデータは、図４（ｃ）の転送先メモリ２１２内の転送先アドレスが示す位置に書き込みされる（ステップＳ１１６）。尚、書き込み処理は、空欄部分（無効データ部分）に予めマスク処理を行ってから行なわれる。
【００４７】
＜処理１５＞図４（ａ）のバッファ２０８内の、次の１６バイトのデータ２を読み込みし、図４（ｂ）のレジスタ１に上書きする（ステップＳ１１４）。
【００４８】
＜処理１６＞データシフト器２０７は、レジスタ１とレジスタ２に記憶されているデータ１とデータ２から、０ｘ４だけデータシフトさせて一つのデータに変換する（ステップＳ１１５）。
【００４９】
＜処理１７＞シフトされたデータは、図４（ｃ）の転送先メモリ２１２に続けて書き込みされる（ステップＳ１１６）。
【００５０】
＜処理１８＞図４（ｂ）のデータ２をレジスタ２に移動させ、図４（ａ）の次のデータ３を読み込み（ステップＳ１１４）し、レジスタ１に上書きする。
【００５１】
＜処理１９＞データシフト器２０７は、図４（ｂ）のレジスタ１とレジスタ２に記憶されているデータ２とデータ３から、０ｘ４だけデータシフトさせて一つのデータに変換する（ステップＳ１１５）。
【００５２】
＜処理２０＞シフトされたデータは図４（ｃ）の転送先メモリ２１２に順次書き込みされる（ステップＳ１１６）。
【００５３】
＜処理２１＞図４（ｂ）のデータ３をレジスタ２に移動させ、再度図４（ａ）のデータ３をレジスタ１に上書きする。
【００５４】
＜処理２２＞データシフト器２０６は、レジスタ１とレジスタ２に記憶されているデータ３から、０ｘ４だけデータシフトさせて一つのデータに変換する（ステップＳ１１５）。
【００５５】
＜処理２３＞シフトされたデータは図４（ｃ）の転送先メモリ２１２に順次書き込みされる（ステップＳ１１６）。尚、書き込み処理は、空欄部分（無効データ部分）に予めマスク処理を行ってから行なわれる。
【００５６】
１回目の読み込み／書き込み転送が終了すると、転送バイトサイズが０か否かが判定され（ステップＳ１１８）、転送バイト数が０でない場合、転送元アドレスの更新、転送先アドレスの更新及び転送バイト数の更新（ステップＳ１１９）が行われ、ステップＳ１０２に戻って以後のステップを転送バイト数が０になるまで繰り返す。転送バイト数が０である場合、ＤＭＡ転送制御装置２００によるＤＭＡのバースト転送は終了する。
【００５７】
この様に転送先アドレスが０ｘ０００Ｃと１６バイトアラインさせていない場合でも、データシフト器２０７がバッファ２０８内のデータをシフト処理を施しながら転送先メモリ２１２へ書き込みすることにより、所定の位置より４８バイトのデータを書き込みすることができる。
【図面の簡単な説明】
【００５８】
【図１】本発明の実施の形態に係るＤＭＡ転送制御装置の内部構成ブロック図である。
【図２】ＤＭＡ転送制御の動作を示すフローチャートである。
【図３】本発明の読み込み転送時のデータシフトの説明図である。
【図４】本発明の書き込み転送時のデータシフトの説明図である。
【符号の説明】
【００５９】
１００…ＣＰＵ
１１０…レジスタ
２００…ＤＭＡ転送制御装置
２０１…転送元アドレスレジスタ
２０２…転送先アドレスレジスタ
２０３…転送サイズレジスタ
２０４…処理転送サイズ決定部
２０５…データシフト量演算器
２０６，２０７…データシフト器
２０８…バッファ
２０９…バスサイクル発生器
２１０…ＤＭＡ転送制御器
２１１…転送元メモリ
２１２…転送先メモリ
【図１】
2006004340.tif 000003
【図２】
2006004340.tif 000004
【図３】
2006004340.tif 000005
【図４】
2006004340.tif 000006