(57)【要約】【課題】複数バイト幅のバスを用いたＤＭＡ転送において、データの転送バイト数が転送単位のデータ長の倍数でない場合にもＤＭＡバスの転送単位を効率よく使用して高速にＤＭＡ転送を行う。【解決手段】ＤＭＡ転送するデータの転送サイズ及び前記バスのバス幅を転送単位として設定するステップ（ＳＴ１００）と、前記転送サイズを前記転送単位で除した商を転送回数として設定するステップ（ＳＴ１４０）と、前記転送回数のＤＭＡ転送を行うステップ（ＳＴ１５０）と、前記転送サイズを前記転送単位で除した剰余を新たな転送サイズとして前記転送サイズを更新するステップ（ＳＴ１６０）と、更新された転送サイズのデータを転送するために次のＤＭＡ転送で転送可能な最大のサイズを新たな転送単位として前記転送単位を更新するステップ（ＳＴ１７０）と、前記転送サイズが０であることを検出してＤＭＡ転送を終了するステップ（ＳＴ１３０）とを含む。【選択図】図１
2007004667.tif 000002
【特許請求の範囲】
【請求項１】
複数バイトバス幅を持つバス上で２バイト以上のバス幅を用いてデータを転送するＤＭＡ転送制御方法であって、
ＤＭＡ転送するデータの転送サイズ及び前記バス幅を転送単位として設定するステップと、
前記転送サイズを前記転送単位で除した商を転送回数として設定するステップと、
前記転送回数のＤＭＡ転送を行うステップと、
前記転送サイズを前記転送単位で除した剰余を新たな転送サイズとして前記転送サイズを更新するステップと、
更新された転送サイズのデータを転送するために次のＤＭＡ転送で転送可能な最大のサイズを新たな転送単位として前記転送単位を更新するステップと、
前記転送サイズが０であることを検出してＤＭＡ転送を終了するステップとを含むＤＭＡ転送制御方法。
【請求項２】
コンピュータに請求項１記載のＤＭＡ転送方法を実施させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は複数バイトバス幅を持つバスを用いたＤＭＡ転送制御方法に関する。
【背景技術】
【０００２】
周辺装置と記憶装置の間でＣＰＵを介さずに高速にデータ転送を行うＤＭＡ転送方式において、複数バイトのバス幅を持つバスを用いてデータ転送をする際に、データの転送バイト数が転送単位のデータ長の倍数でない場合は従来問題とされていた。その場合に、以前より次の２通りの転送方法のいずれかが採用されていた。
【０００３】
第一の転送方法においては、データの転送バイト数と転送単位のデータ長の最大公約数を転送単位としていた。この方法では、例えば転送バイト数が奇数で転送単位のデータ長が偶数であると転送単位が１バイトとなるなど、データの転送バイト数によってはデータ転送に要する時間が極端に長くなるという欠点があった。
【０００４】
また、複数バイトのデータ幅を持ち、かつ複数バイトのバス幅を持つバスに整合する記憶装置等の間のデータ転送においては、転送元アドレスと転送先アドレスあるいは転送バイト数のアライメントの関係によってはバス幅を最大に使用したデータ転送ができず、最悪の場合には転送単位が１バイトとなり、やはりデータ転送に要する時間が極端に長くなるという問題があった。
【０００５】
第二の転送方法においては、ＤＭＡコントローラに対してＣＰＵがＤＭＡ転送の起動指令を出す際に、転送バイト数が転送単位のデータ長の倍数なるように転送するデータを複数に分け、分割された複数のデータごとに複数回のＤＭＡ転送の起動を行っていた。
【０００６】
この方法では、複数回のＤＭＡ転送起動を行わなければならず、ＣＰＵがＤＭＡコントローラ対してＤＭＡ転送の起動処理と終了処理を行うために要する時間が長くなるという欠点があった。
【０００７】
例えば、ＤＭＡバスにおける転送単位として４バイト、２バイト、１バイトが可能であった場合に、データの転送バイト数が１０３バイトであると、ＣＰＵは転送するデータを転送単位４バイトで２５回分、転送単位２バイトで１回分、転送単位１バイトで１回分の３つに分割し、ＤＭＡコントローラに対して３回のＤＭＡ転送の起動処理と終了処理を行う。
【０００８】
従来、これらの問題を全て解決する技術が特許文献１に開示されている。この従来技術によるＤＭＡコントローラにおいては、転送元アドレスレジスタと転送先アドレスレジスタと転送バイト数レジスタに若干の回路を付加することにより、データ転送の度に次の最適な転送単位を自動的に回路が計算し、１回のＤＭＡ転送の起動指令によりバスの転送単位を最も効率よく使用してＤＭＡ転送を行うことができる。
【特許文献１】特許第３２０６５６８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
特許文献１に示された従来技術は、転送元と転送先のデータのアドレスアライメントを考慮した最適な転送単位を回路が自動的に計算することができ、ＣＰＵの負荷を増やすことなく最も効率よくＤＭＡバスの機能を使用してＤＭＡ転送を行うことができる点で優れた技術である。
【００１０】
しかしながら、ＤＭＡコントローラにおいて回路を付加することは、若干の回路であっても望ましくない場合がある。特に、既存のＤＭＡコントローラに変更を加えたくない事情がある場合に、最大でもＤＭＡコントローラの制御プログラムの変更にとどめたいことがある。
【００１１】
また、転送元と転送先のデータのアドレスアライメントが自動的に処理されるように考慮されているが、実際のバス動作においては、転送元と転送先のデータのアドレスアライメントが異なる場合はバス幅が最大に活用されることはない。
【００１２】
このような状況も回路が判断し、それに応じた処理を自動的に実行できることが上記従来技術の優れた点であるが、実際にデータ転送を高速にするには、予め転送元と転送先のデータのアドレスアライメントが一致するように設定されていることが必要である。
【００１３】
複数バイトのデータ幅を持つ記憶装置は一般に複数バイトバス幅を持つバスに整合するインタフェースを持つものであり、そのような装置間のデータ転送では、上記特許文献１に示されているように、バス幅を最大に活用したデータ転送を行うためには転送元と転送先のアドレスアライメントの考慮が必須である。
【００１４】
しかし、ＤＭＡ転送を行う一般の装置は必ずしもこのようにメモリ形式でアドレス指定されるとは限らず、転送元と転送先のデータのアドレスアライメントの考慮が不要な装置間のデータ転送の場合、あるいは転送元と転送先のデータのアドレスアライメントの考慮が不要な状況にある場合には、上記従来技術を用いなくても簡易な方法で問題を解決できる可能性がある。
【００１５】
本発明は、複数バイトバス幅を持つバスを用いてＤＭＡ転送方式によりデータ転送をする際に、データの転送バイト数が転送単位のデータ長の倍数でない場合においても、従来のＤＭＡコントローラに特別な回路を付加する必要がなく、バスの転送単位を効率よく使用して高速にＤＭＡ転送を行うことができるＤＭＡ転送制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明は、複数バイトバス幅を持つバス上で２バイト以上のバス幅を用いてデータを転送するＤＭＡ転送制御方法であって、ＤＭＡ転送するデータの転送サイズ及び前記バス幅を転送単位として設定するステップと、前記転送サイズを前記転送単位で除した商を転送回数として設定するステップと、前記転送回数のＤＭＡ転送を行うステップと、前記転送サイズを前記転送単位で除した剰余を新たな転送サイズとして前記転送サイズを更新するステップと、更新された転送サイズのデータを転送するために次のＤＭＡ転送で転送可能な最大のサイズを新たな転送単位として前記転送単位を更新するステップと、前記転送サイズが０になることを検出してＤＭＡ転送を終了するステップとを含むものである。
【００１７】
上記構成によれば、データの転送サイズが転送単位のデータ長の倍数でない場合においても、転送サイズと転送単位から転送回数を算出し、転送回数のＤＭＡ転送が終わると転送単位を更新して残りの転送サイズに対して転送回数を算出する動作を繰り返すため、バスの転送単位を効率よく使用して高速にＤＭＡ転送を行うことができる。
【発明の効果】
【００１８】
本発明によれば、データの転送サイズが転送単位のデータ長の倍数でない場合においても、ＤＭＡコントローラが転送サイズと転送単位から転送回数を最適に算出してＤＭＡ転送を制御するため、従来のＤＭＡコントローラに特別な回路を付加する必要がなく、バスの転送単位を効率よく使用して高速にＤＭＡ転送を行うことができる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施の形態について図面を参照して説明する。図１は本発明の一実施の形態に係るＤＭＡ転送制御方法を実行するＤＭＡコントローラの構成を示すブロック図である。図１において、１０４は本発明に係るＤＭＡコントローラ、１００はシステム全体を制御するＣＰＵ、１０１は記憶装置、１０２は２のｎ乗のバイト数のバス幅を持ち、２のｍ乗（ｎ≧ｍ）のバイト数のバス幅でデータ転送が可能なメインバス、１０３はＤＭＡ転送を行う入出力装置である。
【００２０】
さらに、ＤＭＡコントローラ１０４において、１０５は転送元アドレスを記憶する転送元アドレス記憶部、１０６は転送先アドレスを記憶する転送先アドレス記憶部、１０７は転送するデータの転送サイズを記憶する転送サイズ記憶部、１０８は転送単位を示す転送単位記憶部、１０９は転送回数を示す転送回数記憶部、１１０は演算部、１１１はＤＭＡ転送制御部である。
【００２１】
ここで入出力装置１０３は、複数バイトバス幅を持つメインバスに整合しかつメモリ形式のアドレス指定が必要な記憶装置等ではなく、一般的なバッファ処理を介して複数バイトバス幅のデータを入出力する装置であるものとする。すなわち、アドレスアライメントの考慮が不要な装置である。
【００２２】
また、記憶装置１０１におけるデータ転送の先頭アドレスは複数バイトバス幅を持つメインバスに整合したアドレスが与えられるものとする。すなわち、転送元と転送先のデータのアドレスアライメントの考慮が不要な状況にあるものとする。
【００２３】
図２はＤＭＡコントローラ１０４の動作を説明するフローチャートである。以下、図２のフローチャートを用いて、図１のように構成されたＤＭＡコントローラの動作を説明する。ここでは説明の都合上、入出力装置１０３を転送元、記憶装置１０１を転送先とするが、この逆であっても処理内容は同様である。
【００２４】
まず、ＣＰＵ１００がＤＭＡコントローラ１０４に対して、転送元である入出力装置１０３のアドレスを転送元アドレス記憶部１０５に設定し、データの転送先である記憶装置１０１のアドレスを転送先アドレス記憶部１０６に設定する（ＳＴ１００）。
【００２５】
さらに、転送するデータの総サイズを転送サイズ記憶部１０７に設定し、転送するデータの転送単位となるメインバスのデータ幅を転送単位記憶部１０８に設定する（ＳＴ１１０）。
【００２６】
次に、ＣＰＵ１００はＤＭＡコントローラ１０４に対してＤＭＡ転送の起動指令を出す（ＳＴ１２０）。ＤＭＡコントローラ１０４が起動されると、ＤＭＡ転送制御部１１１は転送サイズ記憶部１０７の値が０であるかどうかを判定する（ＳＴ１３０）。転送サイズ記憶部１０７の値が０であればＤＭＡ転送を終了する。
【００２７】
転送サイズ１０７の値が０でなければ、ＤＭＡ転送制御部１１１は転送サイズ記憶部１０７の転送サイズと転送単位記憶部１０８の転送単位から演算部１１０を用いて転送回数を算出し、転送回数記憶部１０９に設定する（ＳＴ１４０）。
【００２８】
転送回数は転送サイズを転送単位で除算した商であり、除算の剰余が残りの転送サイズである。演算部を用いて商と剰余を求める方法は既知のいずれの方法でもよいが、ここでは転送単位が２のべき乗であるので、単純に転送回数を右シフトすることで商と剰余が得られる。すなわち、転送単位記憶部１０８の値を２のべき乗で表した指数値分だけ、転送サイズ記憶部１０７の値を右ビットシフトして得られた商を転送回数記憶部１０９に書き込む。
【００２９】
実際には、転送単位記憶部１０８の値を２のべき乗で表した指数値を演算部で得るのは簡単ではなく、転送単位記憶部１０８の値を２で割る除算を繰り返す必要がある。例えば転送単位記憶部１０８の値を右ビットシフトし最大シフト回数をもって指数値としなければならない。このような処理を行うよりは、メインバスの可能な転送単位に対応する２のべき乗で表した指数値を制御プログラム中にテーブル形式で持たせる方法が簡易である。
【００３０】
これにより、ＤＭＡコントローラ１０４は転送回数記憶部１０９の転送回数分のＤＭＡ転送を実行し、入出力装置１０３の転送元データがメインバス１０５を経由して転送先である記憶装置１０１に転送される（ＳＴ１５０）。
【００３１】
転送回数記憶部１０９の転送回数分のＤＭＡ転送が完了すると、次に剰余サイズ分のデータ転送を転送単位を縮小して実行する。剰余は転送サイズ記憶部１０７の値を右にビットシフトした際にシフトアウトした値が得られる場合は、これを新しい転送サイズとする。
【００３２】
シフトアウトした値が得られない場合は剰余を除く上位ビットをマスクパターンを用いてマスクする。制御プログラムにマスクパターンを用意しても良いし、転送単位記憶部１０８の値から１を減算した値がマスクパターンになるので、これを用いても良い。
【００３３】
すなわち、転送単位記憶部１０８の値から１を減算した値と転送サイズ記憶部１０７の値の論理積をとり、これを転送サイズ記憶部１０７に上書きすることで残りの転送サイズが得られる（ＳＴ１６０）。
【００３４】
次に転送単位を可能な縮小値に更新する。メインバスが２のｎ乗のバイト数のバス幅を持ち、もし２のｍ乗（ｎ≧ｍ）の全てのバイト数のバス幅でデータ転送が可能な場合は、転送単位を２イメントの考慮が不要な状況にある場合には、データの転送バイト数が転送単位のデータ長の倍数でない場合においても、従来のＤＭＡコントローラに回路を付加する必要がなく、ＤＭＡバスの転送単位を効率よく使用して高速にＤＭＡ転送を行うことができる。
【００３５】
図３は本実施の形態のＤＭＡコントローラを用いた装置の具体例として、メモリカードのデータ処理システムの構成例を示すブロック図である。図３において、３００はデータの記録や取得を行うメモリカードであり、３０１はメモリカードのデータを処理するシステムＬＳＩである。能でない場合（例えばメインバスのバス幅が６４ビットで、データ転送に使用可能なバス幅が６４ビット、１６ビット、４ビット、１ビットである場合）は、可能な転送単位と、それに応じた右シフトビット数と、残りの転送サイズを得るためのマスクパターンをセットにして制御プログラム中にテーブル形式で持たせることで、図２のフローチャートと同様の処理ができ、使用可能なバス幅を最大に活用して残りデータを転送することができる。
【００３６】
このように、本実施の形態のＤＭＡ転送制御方法によれば、転送元と転送先のデータのアドレスアライメントの考慮が不要な状況にある場合には、データの転送バイト数が転送単位のデータ長の倍数でない場合においても、従来のＤＭＡコントローラに回路を付加する必要がなく、ＤＭＡバスの転送単位を効率よく使用して高速にＤＭＡ転送を行うことができる。
【００３７】
図３は本実施の形態のＤＭＡコントローラを用いた装置の具体例として、メモリカードのデータ処理システムの構成例を示すブロック図である。図３において、３００はデータの記録や取得を行うメモリカードであり、３０１はメモリカードのデータを処理するシステムＬＳＩである。
【００３８】
システムＬＳＩ３０１において、３０２はメモリカードを制御するメモリカードコントローラ、３０３はメモリカードと通信を行うためのメモリカードインタフェース、３０４はメモリカードへのデータ書込みやデータ取得を行うためのデータを格納するバッファである。他の構成は図１と同様である。
【００３９】
メモリカード３００から、あるいはメモリカード３００へ伝送されるデータは、メモリカードコントローラ３０２においてバッファ３０４で蓄積処理されるため、メモリカードコントローラ３０２側のアドレスアライメントの考慮は不要であり、メモリ１０１側において、先頭アドレスをメインバス１０２のバス幅に整合したアドレスに設定すれば、データ転送におけるアドレスアライメントの考慮は不要となる。
【００４０】
この構成例におけるＤＭＡ転送制御動作は前述した図２のフローチャートの通りであるが、具体的にメインバス１０２のバス幅が４バイトで、４バイト幅、２バイト幅、１バイト幅のデータ転送が可能であり、転送サイズが１０２７バイトであるとして、動作を検証してみる。
【００４１】
ＣＰＵ１００がＤＭＡコントローラ１０４に各制御データを設定し、ＤＭＡ転送の起動指令を出すと（ＳＴ１２０）、ＤＭＡコントローラ１０４においては、前述した演算部１１０での処理により、転送サイズ記憶部１０７の値１０２７を転送単位記憶部１０８の値４で除し、商の転送回数２５６を算出して転送回数記憶部１０９に設定する。これにより、ＤＭＡコントローラ１０４は２５６回の４バイト幅のＤＭＡ転送を実行する（ＳＴ１５０）。
【００４２】
次に、ＤＭＡコントローラ１０４においては、前述した演算部１１０での処理により、転送サイズ記憶部１０７の値１０２７を転送単位記憶部１０８の値４で除した剰余の残り転送サイズ３を得て転送サイズ記憶部１０７に設定し（ＳＴ１６０）、次の転送単位２を転送単位記憶部１０８に設定する（ＳＴ１７０）。
【００４３】
再びＳＴ１３０に戻るとＳＴ１４０に進み、転送サイズ記憶部１０７の値３を転送単位記憶部１０８の値２で除し、商の転送回数１を算出して転送回数記憶部１０９に設定する。これにより、ＤＭＡコントローラ１０４は１回の２バイト幅のＤＭＡ転送を実行する（ＳＴ１５０）。
【００４４】
ＳＴ１６０、ＳＴ１７０で前記と同様の動作を繰り返し、次にＳＴ１４０では転送サイズ記憶部１０７の値１を転送単位記憶部１０８の値１で除し、商の転送回数１を算出して転送回数記憶部１０９に設定する。これにより、ＤＭＡコントローラ１０４は１回の１バイト幅のＤＭＡ転送を実行する（ＳＴ１５０）。これで全てのデータを転送し、次のＳＴ１３０で転送サイズ記憶部１０７の値が０となり、ＤＭＡ転送を終了する。
【産業上の利用可能性】
【００４５】
本発明のＤＭＡ転送制御方法は、データの転送サイズが転送単位のデータ長の倍数でない場合においても、ＤＭＡコントローラが転送サイズと転送単位から転送回数を最適に算出してＤＭＡ転送を制御するため、従来のＤＭＡコントローラに特別な回路を付加する必要がなく、バスの転送単位を効率よく使用して高速にＤＭＡ転送を行うことができるという効果を有し、複数バイトバス幅を持つバスを用いたＤＭＡ転送制御方法等として有用である。
【図面の簡単な説明】
【００４６】
【図１】本発明の一実施の形態に係るＤＭＡコントローラの構成を示すブロック図。
【図２】本発明の一実施の形態に係るＤＭＡコントローラの動作を説明するフローチャート。
【図３】本発明のＤＭＡコントローラを用いたメモリカードデータ処理システムの構成例を示すブロック図。
【符号の説明】
【００４７】
１００  ＣＰＵ
１０１  記憶装置
１０２  メインバス
１０３  入出力装置
１０４  ＤＭＡコントローラ
１０５  転送元アドレス記憶部
１０６  転送先アドレス記憶部
１０７  転送サイズ記憶部
１０８  転送単位記憶部
１０９  転送回数記憶部
１１０  演算部
１１１  ＤＭＡ転送制御部
３００  メモリカード
３０１  システムＬＳＩ
３０２  メモリカードコントローラ
３０３  メモリカードインタフェース
３０４  バッファ
【図１】
2007004667.tif 000003
【図２】
2007004667.tif 000004
【図３】
2007004667.tif 000005