Warning: fopen(.htaccess): failed to open stream: No such file or directory in /home/jp321/public_html/header.php on line 47

Warning: filesize(): stat failed for .htaccess in /home/jp321/public_html/header.php on line 48

Warning: fread() expects parameter 1 to be resource, boolean given in /home/jp321/public_html/header.php on line 48

Warning: fclose() expects parameter 1 to be resource, boolean given in /home/jp321/public_html/header.php on line 49

Warning: fopen(.htaccess): failed to open stream: Permission denied in /home/jp321/public_html/header.php on line 54

Warning: flock() expects parameter 1 to be resource, boolean given in /home/jp321/public_html/header.php on line 56

Warning: fclose() expects parameter 1 to be resource, boolean given in /home/jp321/public_html/header.php on line 63
DMA転送制御方法 - 松下電器産業株式会社
米国特許情報 | 欧州特許情報 | 国際公開(PCT)情報 | Google の米国特許検索
 
     特許分類
A 農業
B 衣類
C 家具
D 医学
E スポ−ツ;娯楽
F 加工処理操作
G 机上付属具
H 装飾
I 車両
J 包装;運搬
L 化学;冶金
M 繊維;紙;印刷
N 固定構造物
O 機械工学
P 武器
Q 照明
R 測定; 光学
S 写真;映画
T 計算機;電気通信
U 核技術
V 電気素子
W 発電
X 楽器;音響


  ホーム -> 計算機;電気通信 -> 松下電器産業株式会社

発明の名称 DMA転送制御方法
発行国 日本国特許庁(JP)
公報種別 公開特許公報(A)
公開番号 特開2007−4667(P2007−4667A)
公開日 平成19年1月11日(2007.1.11)
出願番号 特願2005−186379(P2005−186379)
出願日 平成17年6月27日(2005.6.27)
代理人 【識別番号】100115107
【弁理士】
【氏名又は名称】高松 猛
発明者 松永 光彦 / 加藤 章浩
要約 課題
複数バイト幅のバスを用いたDMA転送において、データの転送バイト数が転送単位のデータ長の倍数でない場合にもDMAバスの転送単位を効率よく使用して高速にDMA転送を行う。

解決手段
DMA転送するデータの転送サイズ及び前記バスのバス幅を転送単位として設定するステップ(ST100)と、前記転送サイズを前記転送単位で除した商を転送回数として設定するステップ(ST140)と、前記転送回数のDMA転送を行うステップ(ST150)と、前記転送サイズを前記転送単位で除した剰余を新たな転送サイズとして前記転送サイズを更新するステップ(ST160)と、更新された転送サイズのデータを転送するために次のDMA転送で転送可能な最大のサイズを新たな転送単位として前記転送単位を更新するステップ(ST170)と、前記転送サイズが0であることを検出してDMA転送を終了するステップ(ST130)とを含む。
特許請求の範囲
【請求項1】
複数バイトバス幅を持つバス上で2バイト以上のバス幅を用いてデータを転送するDMA転送制御方法であって、
DMA転送するデータの転送サイズ及び前記バス幅を転送単位として設定するステップと、
前記転送サイズを前記転送単位で除した商を転送回数として設定するステップと、
前記転送回数のDMA転送を行うステップと、
前記転送サイズを前記転送単位で除した剰余を新たな転送サイズとして前記転送サイズを更新するステップと、
更新された転送サイズのデータを転送するために次のDMA転送で転送可能な最大のサイズを新たな転送単位として前記転送単位を更新するステップと、
前記転送サイズが0であることを検出してDMA転送を終了するステップとを含むDMA転送制御方法。
【請求項2】
コンピュータに請求項1記載のDMA転送方法を実施させるプログラム。
発明の詳細な説明
【技術分野】
【0001】
本発明は複数バイトバス幅を持つバスを用いたDMA転送制御方法に関する。
【背景技術】
【0002】
周辺装置と記憶装置の間でCPUを介さずに高速にデータ転送を行うDMA転送方式において、複数バイトのバス幅を持つバスを用いてデータ転送をする際に、データの転送バイト数が転送単位のデータ長の倍数でない場合は従来問題とされていた。その場合に、以前より次の2通りの転送方法のいずれかが採用されていた。
【0003】
第一の転送方法においては、データの転送バイト数と転送単位のデータ長の最大公約数を転送単位としていた。この方法では、例えば転送バイト数が奇数で転送単位のデータ長が偶数であると転送単位が1バイトとなるなど、データの転送バイト数によってはデータ転送に要する時間が極端に長くなるという欠点があった。
【0004】
また、複数バイトのデータ幅を持ち、かつ複数バイトのバス幅を持つバスに整合する記憶装置等の間のデータ転送においては、転送元アドレスと転送先アドレスあるいは転送バイト数のアライメントの関係によってはバス幅を最大に使用したデータ転送ができず、最悪の場合には転送単位が1バイトとなり、やはりデータ転送に要する時間が極端に長くなるという問題があった。
【0005】
第二の転送方法においては、DMAコントローラに対してCPUがDMA転送の起動指令を出す際に、転送バイト数が転送単位のデータ長の倍数なるように転送するデータを複数に分け、分割された複数のデータごとに複数回のDMA転送の起動を行っていた。
【0006】
この方法では、複数回のDMA転送起動を行わなければならず、CPUがDMAコントローラ対してDMA転送の起動処理と終了処理を行うために要する時間が長くなるという欠点があった。
【0007】
例えば、DMAバスにおける転送単位として4バイト、2バイト、1バイトが可能であった場合に、データの転送バイト数が103バイトであると、CPUは転送するデータを転送単位4バイトで25回分、転送単位2バイトで1回分、転送単位1バイトで1回分の3つに分割し、DMAコントローラに対して3回のDMA転送の起動処理と終了処理を行う。
【0008】
従来、これらの問題を全て解決する技術が特許文献1に開示されている。この従来技術によるDMAコントローラにおいては、転送元アドレスレジスタと転送先アドレスレジスタと転送バイト数レジスタに若干の回路を付加することにより、データ転送の度に次の最適な転送単位を自動的に回路が計算し、1回のDMA転送の起動指令によりバスの転送単位を最も効率よく使用してDMA転送を行うことができる。
【特許文献1】特許第3206568号公報
【発明の開示】
【発明が解決しようとする課題】
【0009】
特許文献1に示された従来技術は、転送元と転送先のデータのアドレスアライメントを考慮した最適な転送単位を回路が自動的に計算することができ、CPUの負荷を増やすことなく最も効率よくDMAバスの機能を使用してDMA転送を行うことができる点で優れた技術である。
【0010】
しかしながら、DMAコントローラにおいて回路を付加することは、若干の回路であっても望ましくない場合がある。特に、既存のDMAコントローラに変更を加えたくない事情がある場合に、最大でもDMAコントローラの制御プログラムの変更にとどめたいことがある。
【0011】
また、転送元と転送先のデータのアドレスアライメントが自動的に処理されるように考慮されているが、実際のバス動作においては、転送元と転送先のデータのアドレスアライメントが異なる場合はバス幅が最大に活用されることはない。
【0012】
このような状況も回路が判断し、それに応じた処理を自動的に実行できることが上記従来技術の優れた点であるが、実際にデータ転送を高速にするには、予め転送元と転送先のデータのアドレスアライメントが一致するように設定されていることが必要である。
【0013】
複数バイトのデータ幅を持つ記憶装置は一般に複数バイトバス幅を持つバスに整合するインタフェースを持つものであり、そのような装置間のデータ転送では、上記特許文献1に示されているように、バス幅を最大に活用したデータ転送を行うためには転送元と転送先のアドレスアライメントの考慮が必須である。
【0014】
しかし、DMA転送を行う一般の装置は必ずしもこのようにメモリ形式でアドレス指定されるとは限らず、転送元と転送先のデータのアドレスアライメントの考慮が不要な装置間のデータ転送の場合、あるいは転送元と転送先のデータのアドレスアライメントの考慮が不要な状況にある場合には、上記従来技術を用いなくても簡易な方法で問題を解決できる可能性がある。
【0015】
本発明は、複数バイトバス幅を持つバスを用いてDMA転送方式によりデータ転送をする際に、データの転送バイト数が転送単位のデータ長の倍数でない場合においても、従来のDMAコントローラに特別な回路を付加する必要がなく、バスの転送単位を効率よく使用して高速にDMA転送を行うことができるDMA転送制御方法を提供することを目的とする。
【課題を解決するための手段】
【0016】
本発明は、複数バイトバス幅を持つバス上で2バイト以上のバス幅を用いてデータを転送するDMA転送制御方法であって、DMA転送するデータの転送サイズ及び前記バス幅を転送単位として設定するステップと、前記転送サイズを前記転送単位で除した商を転送回数として設定するステップと、前記転送回数のDMA転送を行うステップと、前記転送サイズを前記転送単位で除した剰余を新たな転送サイズとして前記転送サイズを更新するステップと、更新された転送サイズのデータを転送するために次のDMA転送で転送可能な最大のサイズを新たな転送単位として前記転送単位を更新するステップと、前記転送サイズが0になることを検出してDMA転送を終了するステップとを含むものである。
【0017】
上記構成によれば、データの転送サイズが転送単位のデータ長の倍数でない場合においても、転送サイズと転送単位から転送回数を算出し、転送回数のDMA転送が終わると転送単位を更新して残りの転送サイズに対して転送回数を算出する動作を繰り返すため、バスの転送単位を効率よく使用して高速にDMA転送を行うことができる。
【発明の効果】
【0018】
本発明によれば、データの転送サイズが転送単位のデータ長の倍数でない場合においても、DMAコントローラが転送サイズと転送単位から転送回数を最適に算出してDMA転送を制御するため、従来のDMAコントローラに特別な回路を付加する必要がなく、バスの転送単位を効率よく使用して高速にDMA転送を行うことができる。
【発明を実施するための最良の形態】
【0019】
以下、本発明の実施の形態について図面を参照して説明する。図1は本発明の一実施の形態に係るDMA転送制御方法を実行するDMAコントローラの構成を示すブロック図である。図1において、104は本発明に係るDMAコントローラ、100はシステム全体を制御するCPU、101は記憶装置、102は2のn乗のバイト数のバス幅を持ち、2のm乗(n≧m)のバイト数のバス幅でデータ転送が可能なメインバス、103はDMA転送を行う入出力装置である。
【0020】
さらに、DMAコントローラ104において、105は転送元アドレスを記憶する転送元アドレス記憶部、106は転送先アドレスを記憶する転送先アドレス記憶部、107は転送するデータの転送サイズを記憶する転送サイズ記憶部、108は転送単位を示す転送単位記憶部、109は転送回数を示す転送回数記憶部、110は演算部、111はDMA転送制御部である。
【0021】
ここで入出力装置103は、複数バイトバス幅を持つメインバスに整合しかつメモリ形式のアドレス指定が必要な記憶装置等ではなく、一般的なバッファ処理を介して複数バイトバス幅のデータを入出力する装置であるものとする。すなわち、アドレスアライメントの考慮が不要な装置である。
【0022】
また、記憶装置101におけるデータ転送の先頭アドレスは複数バイトバス幅を持つメインバスに整合したアドレスが与えられるものとする。すなわち、転送元と転送先のデータのアドレスアライメントの考慮が不要な状況にあるものとする。
【0023】
図2はDMAコントローラ104の動作を説明するフローチャートである。以下、図2のフローチャートを用いて、図1のように構成されたDMAコントローラの動作を説明する。ここでは説明の都合上、入出力装置103を転送元、記憶装置101を転送先とするが、この逆であっても処理内容は同様である。
【0024】
まず、CPU100がDMAコントローラ104に対して、転送元である入出力装置103のアドレスを転送元アドレス記憶部105に設定し、データの転送先である記憶装置101のアドレスを転送先アドレス記憶部106に設定する(ST100)。
【0025】
さらに、転送するデータの総サイズを転送サイズ記憶部107に設定し、転送するデータの転送単位となるメインバスのデータ幅を転送単位記憶部108に設定する(ST110)。
【0026】
次に、CPU100はDMAコントローラ104に対してDMA転送の起動指令を出す(ST120)。DMAコントローラ104が起動されると、DMA転送制御部111は転送サイズ記憶部107の値が0であるかどうかを判定する(ST130)。転送サイズ記憶部107の値が0であればDMA転送を終了する。
【0027】
転送サイズ107の値が0でなければ、DMA転送制御部111は転送サイズ記憶部107の転送サイズと転送単位記憶部108の転送単位から演算部110を用いて転送回数を算出し、転送回数記憶部109に設定する(ST140)。
【0028】
転送回数は転送サイズを転送単位で除算した商であり、除算の剰余が残りの転送サイズである。演算部を用いて商と剰余を求める方法は既知のいずれの方法でもよいが、ここでは転送単位が2のべき乗であるので、単純に転送回数を右シフトすることで商と剰余が得られる。すなわち、転送単位記憶部108の値を2のべき乗で表した指数値分だけ、転送サイズ記憶部107の値を右ビットシフトして得られた商を転送回数記憶部109に書き込む。
【0029】
実際には、転送単位記憶部108の値を2のべき乗で表した指数値を演算部で得るのは簡単ではなく、転送単位記憶部108の値を2で割る除算を繰り返す必要がある。例えば転送単位記憶部108の値を右ビットシフトし最大シフト回数をもって指数値としなければならない。このような処理を行うよりは、メインバスの可能な転送単位に対応する2のべき乗で表した指数値を制御プログラム中にテーブル形式で持たせる方法が簡易である。
【0030】
これにより、DMAコントローラ104は転送回数記憶部109の転送回数分のDMA転送を実行し、入出力装置103の転送元データがメインバス105を経由して転送先である記憶装置101に転送される(ST150)。
【0031】
転送回数記憶部109の転送回数分のDMA転送が完了すると、次に剰余サイズ分のデータ転送を転送単位を縮小して実行する。剰余は転送サイズ記憶部107の値を右にビットシフトした際にシフトアウトした値が得られる場合は、これを新しい転送サイズとする。
【0032】
シフトアウトした値が得られない場合は剰余を除く上位ビットをマスクパターンを用いてマスクする。制御プログラムにマスクパターンを用意しても良いし、転送単位記憶部108の値から1を減算した値がマスクパターンになるので、これを用いても良い。
【0033】
すなわち、転送単位記憶部108の値から1を減算した値と転送サイズ記憶部107の値の論理積をとり、これを転送サイズ記憶部107に上書きすることで残りの転送サイズが得られる(ST160)。
【0034】
次に転送単位を可能な縮小値に更新する。メインバスが2のn乗のバイト数のバス幅を持ち、もし2のm乗(n≧m)の全てのバイト数のバス幅でデータ転送が可能な場合は、転送単位を2イメントの考慮が不要な状況にある場合には、データの転送バイト数が転送単位のデータ長の倍数でない場合においても、従来のDMAコントローラに回路を付加する必要がなく、DMAバスの転送単位を効率よく使用して高速にDMA転送を行うことができる。
【0035】
図3は本実施の形態のDMAコントローラを用いた装置の具体例として、メモリカードのデータ処理システムの構成例を示すブロック図である。図3において、300はデータの記録や取得を行うメモリカードであり、301はメモリカードのデータを処理するシステムLSIである。能でない場合(例えばメインバスのバス幅が64ビットで、データ転送に使用可能なバス幅が64ビット、16ビット、4ビット、1ビットである場合)は、可能な転送単位と、それに応じた右シフトビット数と、残りの転送サイズを得るためのマスクパターンをセットにして制御プログラム中にテーブル形式で持たせることで、図2のフローチャートと同様の処理ができ、使用可能なバス幅を最大に活用して残りデータを転送することができる。
【0036】
このように、本実施の形態のDMA転送制御方法によれば、転送元と転送先のデータのアドレスアライメントの考慮が不要な状況にある場合には、データの転送バイト数が転送単位のデータ長の倍数でない場合においても、従来のDMAコントローラに回路を付加する必要がなく、DMAバスの転送単位を効率よく使用して高速にDMA転送を行うことができる。
【0037】
図3は本実施の形態のDMAコントローラを用いた装置の具体例として、メモリカードのデータ処理システムの構成例を示すブロック図である。図3において、300はデータの記録や取得を行うメモリカードであり、301はメモリカードのデータを処理するシステムLSIである。
【0038】
システムLSI301において、302はメモリカードを制御するメモリカードコントローラ、303はメモリカードと通信を行うためのメモリカードインタフェース、304はメモリカードへのデータ書込みやデータ取得を行うためのデータを格納するバッファである。他の構成は図1と同様である。
【0039】
メモリカード300から、あるいはメモリカード300へ伝送されるデータは、メモリカードコントローラ302においてバッファ304で蓄積処理されるため、メモリカードコントローラ302側のアドレスアライメントの考慮は不要であり、メモリ101側において、先頭アドレスをメインバス102のバス幅に整合したアドレスに設定すれば、データ転送におけるアドレスアライメントの考慮は不要となる。
【0040】
この構成例におけるDMA転送制御動作は前述した図2のフローチャートの通りであるが、具体的にメインバス102のバス幅が4バイトで、4バイト幅、2バイト幅、1バイト幅のデータ転送が可能であり、転送サイズが1027バイトであるとして、動作を検証してみる。
【0041】
CPU100がDMAコントローラ104に各制御データを設定し、DMA転送の起動指令を出すと(ST120)、DMAコントローラ104においては、前述した演算部110での処理により、転送サイズ記憶部107の値1027を転送単位記憶部108の値4で除し、商の転送回数256を算出して転送回数記憶部109に設定する。これにより、DMAコントローラ104は256回の4バイト幅のDMA転送を実行する(ST150)。
【0042】
次に、DMAコントローラ104においては、前述した演算部110での処理により、転送サイズ記憶部107の値1027を転送単位記憶部108の値4で除した剰余の残り転送サイズ3を得て転送サイズ記憶部107に設定し(ST160)、次の転送単位2を転送単位記憶部108に設定する(ST170)。
【0043】
再びST130に戻るとST140に進み、転送サイズ記憶部107の値3を転送単位記憶部108の値2で除し、商の転送回数1を算出して転送回数記憶部109に設定する。これにより、DMAコントローラ104は1回の2バイト幅のDMA転送を実行する(ST150)。
【0044】
ST160、ST170で前記と同様の動作を繰り返し、次にST140では転送サイズ記憶部107の値1を転送単位記憶部108の値1で除し、商の転送回数1を算出して転送回数記憶部109に設定する。これにより、DMAコントローラ104は1回の1バイト幅のDMA転送を実行する(ST150)。これで全てのデータを転送し、次のST130で転送サイズ記憶部107の値が0となり、DMA転送を終了する。
【産業上の利用可能性】
【0045】
本発明のDMA転送制御方法は、データの転送サイズが転送単位のデータ長の倍数でない場合においても、DMAコントローラが転送サイズと転送単位から転送回数を最適に算出してDMA転送を制御するため、従来のDMAコントローラに特別な回路を付加する必要がなく、バスの転送単位を効率よく使用して高速にDMA転送を行うことができるという効果を有し、複数バイトバス幅を持つバスを用いたDMA転送制御方法等として有用である。
【図面の簡単な説明】
【0046】
【図1】本発明の一実施の形態に係るDMAコントローラの構成を示すブロック図。
【図2】本発明の一実施の形態に係るDMAコントローラの動作を説明するフローチャート。
【図3】本発明のDMAコントローラを用いたメモリカードデータ処理システムの構成例を示すブロック図。
【符号の説明】
【0047】
100 CPU
101 記憶装置
102 メインバス
103 入出力装置
104 DMAコントローラ
105 転送元アドレス記憶部
106 転送先アドレス記憶部
107 転送サイズ記憶部
108 転送単位記憶部
109 転送回数記憶部
110 演算部
111 DMA転送制御部
300 メモリカード
301 システムLSI
302 メモリカードコントローラ
303 メモリカードインタフェース
304 バッファ




 

 


     NEWS
会社検索順位 特許の出願数の順位が発表

URL変更
平成6年
平成7年
平成8年
平成9年
平成10年
平成11年
平成12年
平成13年


 
   お問い合わせ info@patentjp.com patentjp.com   Copyright 2007-2013