(57)【特許請求の範囲】
【請求項１】
転送元領域に記憶されたデータを転送先領域へバースト転送するデータ転送装置において、
バッファ領域を有するバッファと、
前記転送元領域に記憶されたデータを取得して前記バッファ領域へ書き込むバッファライト制御部と、
前記バッファライト制御部が前記バッファ領域に書き込んだデータを前記転送先領域に書き込む転送先ライト制御部であって、前記転送元領域と前記転送先領域とが重なっている場合に、前記転送先領域を分割した各分割領域に対してデータをインクリメント方向に書き込むバーストライトコマンドを生成するとともに、前記転送元領域と前記転送先領域とがアドレスの昇順方向に重なっているときは前記分割領域の先頭アドレスが大きい順に前記分割領域毎の書き込みを行うデクリメント転送制御を実行し、前記転送元領域と前記転送先領域とがアドレスの降順方向に重なっているときは前記分割領域の先頭アドレスが小さい順に前記分割領域毎の書き込みを行うインクリメント転送制御を実行する転送先ライト制御部と、
実行される転送制御が前記デクリメント転送制御である場合に、前記バッファライト制御部がデータの書き込みを完了した前記バッファ領域におけるアドレス値と、前記転送先ライト制御部が書き込むデータの読み出し先の前記バッファ領域におけるアドレス値との大小関係に基づき、前記転送先ライト制御部の前記転送先領域へのデータ書き込みを許可するか否かを判定するデータ非破壊制御部と
を備えたことを特徴とするデータ転送装置。
【請求項２】
前記データ転送装置は、さらに、
前記転送元領域に記憶されたデータを読み出すリードコマンドを出力する転送元リード制御部と、
データを前記バッファ領域から読み出して、前記転送先領域へ送信するバッファリード制御部と
を備え、
前記バッファライト制御部は、前記転送元リード制御部が出力したリードコマンドによって読み出されたデータを取得してバッファ領域へ書き込み、
前記転送先ライト制御部は、前記バッファリード制御部が前記転送先領域へ送信したデータを、前記転送先領域へ書き込むバーストライトコマンドを生成し、
前記データ非破壊制御部は、前記バッファライト制御部がデータの書き込みを完了した前記バッファ領域におけるアドレス値と、前記バッファリード制御部がデータを読み出そうとしている前記バッファ領域におけるアドレス値との大小関係から、前記転送先領域へのデータ書き込みを許可するか否かを判定し、
前記バッファリード制御部は、書き込みを許可すると前記データ非破壊制御部が判定した場合に、データを前記バッファ領域から読み出し、
前記転送先ライト制御部は、書き込みを許可すると前記データ非破壊制御部が判定した場合に、前記ライトコマンドを出力して、前記バッファリード制御部が前記転送先領域へ送信したデータを前記転送先領域へ書き込む
ことを特徴とする請求項１に記載のデータ転送装置。
【請求項３】
前記転送元リード制御部は、単位量のデータづつ所定個の単位量のデータをリード開始アドレスからアドレス値の昇順に読み出すリードコマンドを、前記リード開始アドレスのアドレス値が降順になるように複数個生成して順に出力し、
前記バッファライト制御部は、前記転送元リード制御部が出力した各リードコマンドについて、前記転送元リード制御部がリードコマンドを出力した順に、そのリードコマンドによって読み出されたデータを単位量づつ取得して、そのリードコマンドにおけるリード開始アドレスに対応するバッファ領域におけるアドレスからアドレス値の昇順に書き込むとともに、そのリードコマンドによって読み出されたデータの前記バッファ領域への書き込みが終了した場合に、前記リード開始アドレスに対応するバッファ領域におけるアドレスにライト完了ポインタを設定し、
前記転送先ライト制御部は、単位量のデータづつ所定個の単位量のデータをライト開始アドレスからアドレス値の昇順に書き込むライトコマンドを、前記ライト開始アドレスのアドレス値が降順になるように複数個生成して順に出力し、
前記バッファリード制御部は、前記転送先ライト制御部が次に出力するライトコマンドにおけるライト開始アドレスに対応する、前記バッファ領域におけるアドレスにリードポインタを設定し、
前記データ非破壊制御部は、前記リードポインタが設定されたアドレスのアドレス値が、前記ライト完了ポインタに設定されたアドレスのアドレス値以上である場合に、書き込みを許可すると判定し、
前記バッファリード制御部は、書き込みを許可すると前記データ非破壊制御部が判定した場合に、前記リードポインタが設定されたアドレスからアドレス値の昇順に単位量づつデータを読み出し、
前記転送先ライト制御部は、書き込みを許可すると前記データ非破壊制御部が判定した場合に、次のライトコマンドを出力する
ことを特徴とする請求項２に記載のデータ転送装置。
【請求項４】
前記データ非破壊制御部は、前記転送元領域と前記転送先領域とが重複する場合であっ
て、前記転送元領域の先頭位置を表す先頭アドレスのアドレス値が前記転送先領域の先頭位置を表す先頭アドレスのアドレス値以下である場合には、デクリメント転送を行い、他の場合には、インクリメント転送を行うと判定し、
前記転送元リード制御部は、デクリメント転送を行うと前記データ非破壊制御部が判定した場合、前記リード開始アドレスのアドレス値が降順になるように前記リードコマンドを複数個生成して順に出力し、インクリメント転送を行うと前記データ非破壊制御部が判定した場合、前記リード開始アドレスのアドレス値が昇順になるように前記リードコマンドを複数個生成して順に出力し、
前記転送先ライト制御部は、デクリメント転送を行うと前記データ非破壊制御部が判定した場合、前記ライト開始アドレスのアドレス値が降順になるように前記ライトコマンドを複数個生成して順に出力し、インクリメント転送を行うと前記データ非破壊制御部が判定した場合、前記ライト開始アドレスのアドレス値が昇順になるように前記ライトコマンドを複数個生成して順に出力し、
前記データ非破壊制御部は、デクリメント転送を行うと判定した場合、前記リードポインタが設定されたアドレスのアドレス値が、前記ライト完了ポインタに設定されたアドレスのアドレス値以上である場合に、書き込みを許可すると判定し、インクリメント転送を行うと判定した場合、前記リードポインタと前記ライト完了ポインタとに設定されたアドレスに関わらず、書き込みを許可すると判定する
ことを特徴とする請求項３に記載のデータ転送装置。
【請求項５】
前記バッファライト制御部は、リードコマンドによって読み出されたデータをリード用バスを介して取得し、
前記バッファリード制御部は、前記バッファ領域から読み出したデータを前記リード用バスとは異なるライト用バスを介して転送先領域へ送信する
ことを特徴とする請求項２から４までのいずれかに記載のデータ転送装置。
【請求項６】
転送元領域に記憶されたデータを転送先領域へバースト転送するデータ転送方法において、
前記転送元領域に記憶されたデータを取得してバッファ領域へ書き込むバッファライト制御ステップと、
前記バッファライト制御ステップで前記バッファ領域に書き込まれたデータを前記転送先領域に書き込む転送先ライト制御ステップであって、前記転送元領域と前記転送先領域とが重なっている場合に、前記転送先領域を分割した各分割領域に対してデータをインクリメント方向に書き込むバーストライトコマンドを生成するとともに、前記転送元領域と前記転送先領域とがアドレスの昇順方向に重なっているときは前記分割領域の先頭アドレスが大きい順に前記分割領域毎の書き込みを行うデクリメント転送制御を実行し、前記転送元領域と前記転送先領域とがアドレスの降順方向に重なっているときは前記分割領域の先頭アドレスが小さい順に前記分割領域毎の書き込みを行うインクリメント転送制御を実行する転送先ライト制御ステップと、
実行される転送制御が前記デクリメント転送制御である場合に、前記バッファライト制御ステップでデータの書き込みを完了した前記バッファ領域におけるアドレス値と、前記転送先ライト制御ステップで書き込むデータの読み出し先の前記バッファ領域におけるアドレス値との大小関係に基づき、前記転送先ライト制御ステップでの前記転送先領域へのデータ書き込みを許可するか否かを判定するデータ非破壊制御ステップと
を備えたことを特徴とするデータ転送方法。
【請求項７】
転送元領域に記憶されたデータを転送先領域へバースト転送するデータ転送プログラムにおいて、
前記転送元領域に記憶されたデータを取得してバッファ領域へ書き込むバッファライト制御処理と、
前記バッファライト制御処理で前記バッファ領域に書き込まれたデータを前記転送先領域に書き込む転送先ライト制御処理であって、前記転送元領域と前記転送先領域とが重なっている場合に、前記転送先領域を分割した各分割領域に対してデータをインクリメント方向に書き込むバーストライトコマンドを生成するとともに、前記転送元領域と前記転送先領域とがアドレスの昇順方向に重なっているときは前記分割領域の先頭アドレスが大きい順に前記分割領域毎の書き込みを行うデクリメント転送制御を実行し、前記転送元領域と前記転送先領域とがアドレスの降順方向に重なっているときは前記分割領域の先頭アドレスが小さい順に前記分割領域毎の書き込みを行うインクリメント転送制御を実行する転送先ライト制御処理と、
実行される転送制御が前記デクリメント転送制御である場合に、前記バッファライト制御処理でデータの書き込みを完了した前記バッファ領域におけるアドレス値と、前記転送先ライト制御処理で書き込むデータの読み出し先の前記バッファ領域におけるアドレス値との大小関係に基づき、前記転送先ライト制御処理での前記転送先領域へのデータ書き込みを許可するか否かを判定するデータ非破壊制御処理と
をコンピュータに実行させたことを特徴とするデータ転送プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、転送元領域に記憶されたデータを転送先領域へ転送するデータ転送技術に関する。
【背景技術】
【０００２】
データ転送技術には、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送と呼ばれる技術がある。
ＤＭＡ転送では、まず、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が、データ転送元アドレス、データ転送先アドレス、データ転送サイズ等の転送に必要なＤＭＡ情報をＤＭＡ転送制御装置のレジスタに設定する。そして、ＣＰＵがＤＭＡ転送制御装置へ転送開始を指示すると、ＤＭＡ転送制御装置はレジスタに設定されたＤＭＡ情報に従い転送処理を実行する。ＤＭＡ転送制御装置は、レジスタに設定された転送サイズ分のデータ転送を完了したら、ＤＭＡ転送終了割込みをＣＰＵへアサートする。ＣＰＵは、ＤＭＡ転送終了割込みを検知すると、ＤＭＡ転送制御装置のレジスタの情報を読み込んで、ＤＭＡ転送の結果やステータスを確認する。
ＤＭＡ転送制御装置が転送処理を実行している間、ＣＰＵによる転送制御の必要はない。そのため、ＤＭＡ転送では、ＣＰＵを経由してデータ転送を行う場合に比べて高速にデータ転送を行うことができる。また、ＤＭＡ転送では、ＣＰＵの負担を減らすことができる。
一般的なＤＭＡ転送では、設定されたサイズ（単位量）ごとに必要なデータの読み出しを行ない、その後の書き込みを行う。書き込みの開始タイミングが読み出しの完了後になるため、レイテンシが大きなデバイスへの転送では、転送効率が良くない。
【０００３】
ＡＸＩ（Ａｄｖａｎｃｅｄ  ｅＸｔｅｎｓｉｂｌｅ  Ｉｎｔｅｒｆａｃｅ）バスを使用したＤＭＡ転送制御装置がある。
ＡＸＩバスは、リード専用バスとライト専用バスとを備えており、リード専用バスを使ったデータ転送元領域からのデータ取得と、ライト専用バスを使ったデータ転送先領域へのデータ転送とをパラレルに実行できる。
また、ＡＸＩバスは、バースト転送機能を備えている。バースト転送機能は、１回のリード要求で複数の単位量のリードデータを取得でき、１回のライト要求で複数の単位量のライトが実行できる機能である。
ＡＸＩバスを使用したＤＭＡ転送制御装置では、上記のリード／ライト専用バスやバースト転送機能を用いることにより、高速転送が可能である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−１１６２４５号公報
【特許文献２】特開２００８−８３９１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＤＭＡ転送では、データの転送元領域と転送先領域とが重なった場合、データ破壊が発生する場合がある。特に、バースト転送機能を用いて転送を行った場合、データ破壊を防止することが困難である。
この発明は、データの転送元領域と転送先領域とが重なった場合におけるデータ破壊の発生を防止することを目的とする。特に、バースト転送機能を用いて転送を行った場合であっても、データ破壊の発生を防止することを目的とする。
【課題を解決するための手段】
【０００６】
この発明に係るデータ転送装置は、
転送元領域に記憶されたデータを転送先領域へ転送するデータ転送装置であり、
前記転送元領域に記憶されたデータを読み出すリードコマンドを出力する転送元リード制御部と、
前記転送元リード制御部が出力したリードコマンドによって読み出されたデータを取得してバッファ領域へ書き込むバッファライト制御部と、
前記バッファライト制御部が書き込んだデータを前記バッファ領域から読み出して、前記転送先領域へ送信するバッファリード制御部と、
前記バッファリード制御部が前記転送先領域へ送信したデータを、前記転送先領域へ書き込むライトコマンドを出力する転送先ライト制御部と、
前記バッファライト制御部がデータの書き込みを完了した前記バッファ領域におけるアドレス値と、前記バッファリード制御部がデータを読み出そうとしている前記バッファ領域におけるアドレス値との大小関係から、前記転送先領域へのデータ書き込みを許可するか否かを判定するデータ非破壊制御部と
を備え、
前記バッファリード制御部は、書き込みを許可すると前記データ非破壊制御部が判定した場合に、データを前記バッファ領域から読み出し、
前記転送先ライト制御部は、書き込みを許可すると前記データ非破壊制御部が判定した場合に、前記ライトコマンドを出力して、前記バッファリード制御部が前記転送先領域へ送信したデータを前記転送先領域へ書き込む
ことを特徴とする。
【発明の効果】
【０００７】
この発明に係るデータ転送装置よれば、バッファ領域からのデータ読み出しのタイミングを調整することにより、データ破壊の発生を防ぐことができる。
【図面の簡単な説明】
【０００８】
【図１】データ破壊が発生する場合の説明図。
【図２】データ破壊が発生する場合の説明図。
【図３】バースト転送機能を用いた場合におけるデータ転送の順序の説明図。
【図４】実施の形態１に係るＤＭＡ転送システム１０の構成図。
【図５】実施の形態１に係るＤＭＡ転送制御装置１００の構成図。
【図６】実施の形態１に係るデータ非破壊制御部１６０の構成図。
【図７】実施の形態１に係るＤＭＡ転送制御装置１００全体の動作を示すフローチャート。
【図８】実施の形態１に係る転送元リード制御部１１０の動作を示すフローチャート。
【図９】実施の形態１に係るバッファライト制御部１２０の動作を示すフローチャート。
【図１０】バッファリード制御部１４０の動作を示すフローチャート。
【図１１】実施の形態１に係る転送先ライト制御部１５０の動作を示すフローチャート。
【図１２】実施の形態１に係るデータ非破壊制御部１６０の動作を示すフローチャート。
【図１３】転送元領域と転送先領域とを示す図。
【図１４】ＤＭＡ転送の一連の流れ（リードアクセス、ライトアクセス）を示すタイミングチャート。
【図１５】ＤＭＡ転送時におけるデータの変化を示す図。
【図１６】転送元領域と転送先領域とを示す図。
【図１７】ＤＭＡ転送の一連の流れ（リードアクセス、ライトアクセス）を示すタイミングチャート。
【図１８】ＤＭＡ転送時におけるデータの変化を示す図。
【図１９】ＤＭＡ転送時におけるデータの変化を示す図。
【図２０】実施の形態２に係るデータ非破壊制御部１６０の構成図。
【図２１】実施の形態２に係るＤＭＡ転送制御装置１００全体の動作を示すフローチャート。
【発明を実施するための形態】
【０００９】
実施の形態１．
図１、図２は、データ破壊が発生する場合の説明図である。特に、図１は、データの転送元領域と転送先領域とが順方向にずれている場合の説明図である。図２は、データの転送元領域と転送先領域とが逆方向にずれている場合の説明図である。
【００１０】
図１に基づき、データの転送元領域と転送先領域との一部が重なりつつ、データの転送元領域と転送先領域とが順方向にずれている場合について説明する。転送元領域と転送先領域とが順方向にずれているとは、転送元領域の先頭アドレスのアドレス値が、転送先領域の先頭アドレスのアドレス値よりも小さい場合である。
図１では、転送元領域と転送先領域とが同じデバイスにおける領域であり、領域Ｂが重なっている。また、図１では、転送元領域の先頭アドレスである領域Ａの先頭アドレスのアドレス値は、転送先領域の先頭アドレスである領域Ｂの先頭アドレスのアドレス値よりも小さく、転送元領域と転送先領域とが順方向にずれている。
この場合、アドレス値の昇順方向（インクリメント方向）へ順次データ転送を行うと、まず、領域Ａのデータが領域Ｂへ書き込まれ、その後、領域Ｂのデータが領域Ｃへ書き込まれることになる。この場合、領域Ｂのデータが領域Ｃへ書き込まれる前に、領域Ｂへ領域Ａのデータが書き込まれてしまい、元々領域Ｂに記憶されていたデータが破壊されてしまう。
そこで、この場合、アドレス値の降順方向（デクリメント方向）へ順次データ転送を行うようにする。すると、まず、領域Ｂのデータが領域Ｃへ書き込まれ、その後、領域Ａのデータが領域Ｂへ書き込まれる。そのため、データが破壊されることなく、転送が行える。
【００１１】
図２に基づき、データの転送元領域と転送先領域との一部が重なりつつ、データの転送元領域と転送先領域とが逆方向にずれている場合について説明する。転送元領域と転送先領域とが逆方向にずれているとは、転送元領域の先頭アドレスのアドレス値が、転送先領域の先頭アドレスのアドレス値よりも大きい場合である。
図２でも、図１と同様に、転送元領域と転送先領域とが同じデバイスにおける領域であり、領域Ｂが重なっている。しかし、図２では、転送元領域の先頭アドレスである領域Ｂの先頭アドレスのアドレス値は、転送先領域の先頭アドレスである領域Ａの先頭アドレスのアドレス値よりも大きく、転送元領域と転送先領域とが逆方向にずれている。
この場合、アドレス値の降順方向（デクリメント方向）へ順次データ転送を行うと、まず、領域Ｃのデータが領域Ｂへ書き込まれ、その後、領域Ｂのデータが領域Ａへ書き込まれることになる。この場合、領域Ｂのデータが領域Ａへ書き込まれる前に、領域Ｂへ領域Ｃのデータが書き込まれてしまい、元々領域Ｂに記憶されていたデータが破壊されてしまう。
そこで、この場合、アドレス値の昇順方向（インクリメント方向）へ順次データ転送を行うようにする。すると、まず、領域Ｂのデータが領域Ａへ書き込まれ、その後、領域Ｃのデータが領域Ｂへ書き込まれる。そのため、データが破壊されることなく、転送が行える。
【００１２】
つまり、転送元領域と転送先領域とが順方向にずれている場合には、アドレス値の降順方向へ順次データ転送を行うデクリメント転送を行えばデータ破壊は発生しない。一方、転送元領域と転送先領域とが逆方向にずれている場合には、アドレス値の昇順方向へ順次データ転送を行うインクリメント転送を行えばデータ破壊は発生しない。
【００１３】
図３は、バースト転送機能を用いた場合におけるデータ転送の順序の説明図である。図３では、バースト転送機能を用いてデクリメント方向のデータ転送を行う場合を示している。
通常のデータ転送では、１回のリード／ライト要求で１個の単位量のデータの転送のみ可能である。これに対して、バースト転送機能を用いた場合、１回のリード／ライト要求で複数個の単位量のデータの転送が可能である。
図３では、データ１〜８の８個の単位量のデータの転送を行うことを想定している。そのため、通常のデータ転送では、８回のリード／ライト要求が必要となる。これに対して、バースト転送機能を用いた場合、２回のリード／ライト要求で転送が可能である。なお、ここでは、１回のリード／ライト要求で４個の単位量のデータの転送が可能な４バースト転送を想定している。
ここで、バーストリードコマンド（トランザクション）の発行順序は、インクリメント方向にもデクリメント方向にもできる。しかし、バーストリードコマンド内におけるデータの読み出し順序は、インクリメント方向にしかできない。そのため、図３に示すように、データ５〜８を読み出す４バーストリードコマンドを１個目、データ１〜４を読み出す４バーストリードコマンドを２個目というデクリメント方向の順にバーストリードコマンドを発行しても、データの読み出し順序は、データ５，６，７，８，１，２，３，４の順になってしまう。つまり、データ８，７，６，５，４，３，２，１の順に読み出すことはできない。
したがって、転送元領域と転送先領域とが順方向にずれている場合において、バースト転送機能を用いてデータ転送を行うと、デクリメント転送を用いてもデータ破壊を防止することはできない。
なお、バーストライトコマンドの場合も、バーストリードコマンドの場合と同様に、バーストライトコマンドの発行順序は、インクリメント方向にもデクリメント方向にもできる。しかし、バーストライトコマンド内におけるデータの書き込み順序は、インクリメント方向にしかできない。
【００１４】
図４は、実施の形態１に係るＤＭＡ転送システム１０の構成図である。
ＤＭＡ転送システム１０は、ＤＭＡ転送制御装置１００（データ転送装置）、ＣＰＵ２００、メモリ３００を備える。
ＤＭＡ転送制御装置１００は、ＣＰＵ２００等の使用者によってレジスタに設定されたＤＭＡ情報に従い、メモリ３００にアクセスしてデータ転送を行う装置である。
ＣＰＵ２００は、転送元領域を指定する転送元アドレス、転送先領域を指定する転送先アドレス、転送データのサイズを指定する転送サイズ、転送タイプ（インクリメント転送又はデクリメント転送）のＤＭＡ情報をＤＭＡ転送制御装置１００のレジスタに設定し、ＤＭＡ転送制御装置１００にデータ転送を実行させる。ここでは、ＣＰＵ２００がＤＭＡ情報を設定するとしたが、ＣＰＵ２００ではなく、他の装置やシステムがＤＭＡ情報を設定してもよい。
メモリ３００は、データ転送の転送元領域及び転送先領域となる対象リソースである。
【００１５】
図５は、実施の形態１に係るＤＭＡ転送制御装置１００の構成図である。
なお、図５において、実線はデータが流れるデータ線を表し、破線は制御信号が流れる制御線を表す。
ＤＭＡ転送制御装置１００は、転送元リード制御部１１０、バッファライト制御部１２０、内部バッファ１３０（バッファ領域）、バッファリード制御部１４０、転送先ライト制御部１５０、データ非破壊制御部１６０を備える。
【００１６】
転送元リード制御部１１０は、メモリ３００の転送元領域に記憶されたデータを読み出す転送元リードコマンドをメモリ３００へ出力する。
転送元リードコマンドは、リードアドレス、リードアドレス有効信号（もしくは、リード要求信号）、その他（バーストサイズ、バースト長）の信号をまとめた情報である。
【００１７】
バッファライト制御部１２０は、転送元リード制御部１１０が出力した転送元リードコマンドによって読み出された転送元リードデータをリード専用バスを介して取得する。
また、バッファライト制御部１２０は、取得した転送元リードデータをバッファライトデータとして内部バッファ１３０へ出力し、内部バッファ１３０におけるバッファライトポインタによって指定した位置にバッファライトデータを書き込む。バッファライトポインタは、現在のバッファライト先を示した情報である。
バッファライト制御部１２０は、バッファライトデータの書き込みが完了した位置をバッファライト完了ポインタとして、データ非破壊制御部１６０へ通知する。バッファライト完了ポインタは、言い替えれば、内部バッファ１３０における読み出し準備が完了領域を示した情報である。
【００１８】
内部バッファ１３０は、ＤＭＡ転送制御装置１００に内蔵された転送データ格納用のリソースである。
【００１９】
バッファリード制御部１４０は、内部バッファ１３０におけるバッファリードポインタによって指定した位置からデータをバッファリードデータとして読み出す。バッファリードポインタは、現在のバッファリード先を示した情報である。
また、バッファリード制御部１４０は、読み出したバッファリードデータを転送先ライトデータとしてライト専用バスを介してメモリ３００へ出力する。
バッファリード制御部１４０は、バッファリードポインタをデータ非破壊制御部１６０へ通知する。
【００２０】
転送先ライト制御部１５０は、メモリ３００へ転送先ライトコマンドを出力して、バッファリード制御部１４０が出力した転送先ライトデータを転送先領域に書き込む。
転送先ライトコマンドは、ライトアドレス、ライトアドレス有効信号（もしくは、ライト要求信号）、ライトデータ有効信号、その他（バーストサイズ、バースト長、ストローブ信号）の信号をまとめた情報である。
【００２１】
データ非破壊制御部１６０は、ＣＰＵ２００によって設定された転送タイプ（インクリメント転送又はデクリメント転送）を各制御部へ通知する。なお、各制御部とは、転送元リード制御部１１０、バッファライト制御部１２０、バッファリード制御部１４０、転送先ライト制御部１５０のことである。
また、データ非破壊制御部１６０は、デクリメント転送の場合、バッファライト完了ポインタに基づき、バッファリードポインタが示す位置のデータ読み出し準備ができているか否かを判定する。そして、データ非破壊制御部１６０は、データ読み出し準備ができていると判定した場合に、転送先ライト可能指示をバッファリード制御部１４０、転送先ライト制御部１５０へ出力する。なお、データ非破壊制御部１６０は、インクリメント転送の場合、バッファライト完了ポインタやバッファリードポインタに関わらず、常に転送先ライト可能指示を出力する。
バッファリード制御部１４０は、データ非破壊制御部１６０から転送先ライト可能指示を受信すると、内部バッファ１３０からデータを読み出す。また、転送先ライト制御部１５０は、データ非破壊制御部１６０から転送先ライト可能指示を受信すると、転送先ライトコマンドを出力する。
【００２２】
なお、リード専用バスは、転送元リードコマンド、転送元リードデータを流すバスであり、ライト専用バスは、転送先ライトコマンド、転送先ライトデータを流すバスである。リード専用バスとライト専用バスとには依存関係がなく、パラレルに動作可能である。
【００２３】
図６は、実施の形態１に係るデータ非破壊制御部１６０の構成図である。
データ非破壊制御部１６０は、転送タイプ設定レジスタ１６１、バッファライト完了ポインタ設定レジスタ１６２、バッファリードポインタ設定レジスタ１６３、バッファ準備完了判断部１６４を備える。
転送タイプ設定レジスタ１６１には、ＣＰＵ２００から転送タイプが設定される。転送タイプ設定レジスタ１６１に設定された転送タイプがデータ非破壊制御部１６０から各制御部へ通知される。
バッファライト完了ポインタ設定レジスタ１６２には、バッファライト制御部１２０からバッファライト完了ポインタが設定される。
バッファリードポインタ設定レジスタ１６３には、バッファリード制御部１４０からバッファリードポインタが設定される。
バッファ準備完了判断部１６４は、転送タイプ、バッファライト完了ポインタ、バッファリードポインタに基づき、内部バッファ１３０からのデータ読み出し準備が完了しているか否かを判断する。データ読み出し準備が完了していると判定した場合、データ破壊が発生しないと判定し、バッファリード制御部１４０と転送先ライト制御部１５０とへ転送先ライト可能指示を出力する。
【００２４】
次に、ＤＭＡ転送制御装置１００の動作について説明する。
図７は、実施の形態１に係るＤＭＡ転送制御装置１００全体の動作を示すフローチャートである。
Ｓ１１では、ＣＰＵ２００がＤＭＡ転送制御装置１００のレジスタにＤＭＡ情報を設定し、ＤＭＡ転送制御装置１００を起動する。すると、Ｓ１２では、ＤＭＡ転送制御装置１００のデータ非破壊制御部１６０がレジスタ（転送タイプ設定レジスタ１６１）に設定された転送タイプ（インクリメント転送、又は、デクリメント転送）を各制御部へ通知する。レジスタにインクリメント転送が設定された場合、処理をＳ１３へ進め、デクリメント転送が設定された場合、処理をＳ１４へ進める。
Ｓ１３では、ＤＭＡ転送制御装置１００がメモリ３００に対してインクリメント転送を行う。一方、Ｓ１４では、ＤＭＡ転送制御装置１００がメモリ３００に対してデクリメント転送を行う。
そして、Ｓ１５では、ＤＭＡ転送制御装置１００が指定されたデータ長のデータを転送し終えた場合等、ＤＭＡ転送停止要因があったときに転送動作を停止する。
【００２５】
図８は、実施の形態１に係る転送元リード制御部１１０の動作を示すフローチャートである。なお、図８は、図７におけるＳ１３又はＳ１４における転送元リード制御部１１０の動作を示す。
Ｓ２１では、転送元リード制御部１１０がデータ非破壊制御部１６０から送信された転送タイプに基づき、インクリメント転送かデクリメント転送かを判定する。インクリメント転送と判定した場合、処理をＳ２２へ進め、デクリメント転送と判定した場合、処理をＳ２３へ進める。
Ｓ２２及びＳ２３では、転送元リード制御部１１０が１つのバーストリードコマンドを転送元リードコマンドとして生成する。バーストリードコマンドは、図３に基づき説明したように、単位量のデータづつ所定個の単位量のデータをリード開始アドレスからアドレス値の昇順に読み出すコマンドである。
Ｓ２２，Ｓ２３に続いて、Ｓ２４では、転送元リード制御部１１０が、転送元リードコマンドによって読み出されるデータを格納する空き領域が内部バッファ１３０にあるか否かによって、リードアクセス可能か否か判定する。リードアクセス可能と判定した場合（Ｓ２４でＹＥＳ）、処理をＳ２５へ進める。一方、リードアクセス不可能と判定した場合（Ｓ２４でＮＯ）、Ｓ２４へ処理を戻し、所定の時間経過後再びリードアクセス可能か否か判定する。
Ｓ２５では、転送元リード制御部１１０が生成した転送元リードコマンドをメモリ３００に対して発行して、転送元領域からデータを読み出す。
そして、Ｓ２６では、転送元リード制御部１１０が、転送サイズ分のデータを読み出す転送元リードコマンドをメモリ３００へ送信したか否かにより、メモリ３００へのリードアクセスを終了するか否か判定する。リードアクセスを終了すると判定した場合（Ｓ２６でＹＥＳ）、処理を終了する。一方、リードアクセスを終了しないと判定した場合（Ｓ２６でＮＯ）、処理をＳ２１へ戻す。
【００２６】
なお、Ｓ２２では、転送元リード制御部１１０は、インクリメント方向にバーストリードコマンドを生成する。つまり、バーストリードコマンドのリード開始アドレスのアドレス値が昇順になるように、バーストリードコマンドを生成する。
一方、Ｓ２３では、転送元リード制御部１１０は、デクリメント方向にバーストリードコマンドを生成する。つまり、バーストリードコマンドのリード開始アドレスのアドレス値が降順になるように、バーストリードコマンドを生成する。
【００２７】
図９は、実施の形態１に係るバッファライト制御部１２０の動作を示すフローチャートである。なお、図９は、図７におけるＳ１３又はＳ１４におけるバッファライト制御部１２０の動作を示す。
Ｓ３１では、バッファライト制御部１２０がデータ非破壊制御部１６０から送信された転送タイプに基づき、インクリメント転送かデクリメント転送かを判定する。インクリメント転送と判定した場合、処理をＳ３２へ進め、デクリメント転送と判定した場合、処理をＳ３３へ進める。
Ｓ３２及びＳ３３では、バッファライト制御部１２０が１つの転送元リードコマンドに対応する１つのバーストライトコマンドをバッファライトコマンドとして生成する。このバッファライトコマンドは、対応する転送元リードコマンドのリード開始アドレスに対応する、内部バッファ１３０におけるアドレスをライト開始アドレスとして、ライト開始アドレスからアドレス値の昇順にデータを書き込むコマンドである。
なお、この際、バッファライト制御部１２０は、リード開始アドレスや、何個の単位量のデータを読み出す転送元リードコマンドを発行するかなどの情報を転送元リード制御部１１０から取得して、転送元リードコマンドに対応するバッファライトコマンドを生成する。あるいは、バッファライト制御部１２０は、転送元リード制御部１１０と同様のロジックにより、リード開始アドレスや、転送元リード制御部１１０が何個の単位量のデータを読み出す転送元リードコマンドを発行するかなどを判定して、転送元リードコマンドに対応するバッファライトコマンドを生成してもよい。
また、Ｓ３３では、バッファライト制御部１２０は、バッファライト完了ポインタをデータ非破壊制御部１６０のバッファライト完了ポインタ設定レジスタ１６２に設定する。この際、バッファライト完了ポインタは、バッファライトポインタが示すアドレス値に、そのライトコマンドで書き込むデータサイズ分のアドレス値を加えたアドレス値を示すものとする。
Ｓ３２，Ｓ３３に続いて、Ｓ３４では、バッファライト制御部１２０が内部バッファ１３０に対してバッファライトコマンドを発行する。これにより、１つの転送元リードコマンドによって転送元領域から読み出されたデータを、内部バッファ１３０に書き込む。
そして、Ｓ３５では、バッファライト制御部１２０が、転送サイズ分のデータを書き込むバッファライトコマンドを内部バッファ１３０へ送信したか否かにより、内部バッファ１３０へのライトアクセスを終了するか否かを判定する。ライトアクセスを終了すると判定した場合（Ｓ３５でＹＥＳ）、処理を終了し、ライトアクセスを終了しないと判定した場合（Ｓ３５でＮＯ）、処理をＳ３１へ戻す。
なお、Ｓ３５では、ライトアクセスを終了すると判定した場合（Ｓ３５でＹＥＳ）、バッファライト制御部１２０は、最後に発行したバーストライトコマンドにおけるライト開始アドレスをバッファライト完了ポインタとして、バッファライト完了ポインタ設定レジスタ１６２に設定した上で、処理を終了する。
【００２８】
図１０は、バッファリード制御部１４０の動作を示すフローチャートである。なお、図１０は、図７におけるＳ１３又はＳ１４におけるバッファリード制御部１４０の動作を示す。
Ｓ４１では、バッファリード制御部１４０がデータ非破壊制御部１６０から送信された転送タイプに基づき、インクリメント転送かデクリメント転送かを判定する。インクリメント転送と判定した場合、処理をＳ４２へ進め、デクリメント転送と判定した場合、処理をＳ４３へ進める。
Ｓ４２及びＳ４３では、バッファリード制御部１４０が、１つの転送先ライトコマンドに対応する１つのバーストリードコマンドをバッファリードコマンドとして生成する。このバッファリードコマンドは、対応する転送先ライトコマンドのライト開始アドレスに対応する、内部バッファ１３０におけるアドレスをリード開始アドレスとして、リード開始アドレスからアドレス値の昇順にデータを読み出すコマンドである。
なお、この際、バッファリード制御部１４０は、ライト開始アドレスや、何個の単位量のデータを書き込む転送先ライトコマンドを発行するかなどの情報を転送先ライト制御部１５０から取得して、転送先ライトコマンドに対応するバッファリードコマンドを生成する。あるいは、バッファリード制御部１４０は、転送先ライト制御部１５０と同様のロジックにより、ライト開始アドレスや、転送先ライト制御部１５０が何個の単位量のデータを書き込む転送先ライトコマンドを発行するかなどを判定して、転送先ライトコマンドに対応するバッファリードコマンドを生成してもよい。
また、Ｓ４２及びＳ４３では、バッファリード制御部１４０は、バッファリードコマンドの生成の際、そのバッファリードコマンドのリード開始アドレスを示すバッファリードポインタをデータ非破壊制御部１６０のバッファリードポインタ設定レジスタ１６３に設定する。
Ｓ４２，Ｓ４３に続いて、Ｓ４４では、バッファリード制御部１４０が、リードアクセス可能か否か判定する。バッファリード制御部１４０は、（１）転送先ライトコマンドによって書き込まれるだけのデータが内部バッファ１３０に格納されており、かつ、（２）データ非破壊制御部１６０から転送先ライト可能指示を受信した場合に、リードアクセス可能と判定する。リードアクセス可能と判定した場合（Ｓ４４でＹＥＳ）、処理をＳ４５へ進める。一方、リードアクセス不可能と判定した場合（Ｓ４４でＮＯ）、Ｓ４４へ処理を戻し、所定の時間経過後再びリードアクセス可能か否か判定する。
Ｓ４５では、バッファリード制御部１４０が内部バッファ１３０に対してバッファリードコマンドを発行する。これにより、１つの転送先ライトコマンドによって転送先領域へ書き込まれるデータを、内部バッファ１３０から読み出し、メモリ３００へ送信する。
そして、Ｓ４６では、バッファリード制御部１４０が、転送サイズ分のデータを読み出すバッファリードコマンドを内部バッファ１３０へ送信したか否かにより、内部バッファ１３０へのリードアクセスを終了するか否かを判定する。リードアクセスを終了すると判定した場合（Ｓ４６でＹＥＳ）、処理を終了し、リードアクセスを終了しないと判定した場合（Ｓ４６でＮＯ）、処理をＳ４１へ戻す。
【００２９】
図１１は、実施の形態１に係る転送先ライト制御部１５０の動作を示すフローチャートである。なお、図１１は、図７におけるＳ１３又はＳ１４における転送先ライト制御部１５０の動作を示す。
Ｓ５１では、転送先ライト制御部１５０がデータ非破壊制御部１６０から送信された転送タイプに基づき、インクリメント転送かデクリメント転送かを判定する。インクリメント転送と判定した場合、処理をＳ５２へ進め、デクリメント転送と判定した場合、処理をＳ５３へ進める。
Ｓ５２及びＳ５３では、転送先ライト制御部１５０が１つのバーストライトコマンドを転送先ライトコマンドとして生成する。バーストライトコマンドは、図３に基づき説明したように、単位量のデータづつ所定個の単位量のデータをライト開始アドレスからアドレス値の昇順に書き込むコマンドである。
Ｓ５２，Ｓ５３に続いて、Ｓ５４では、転送先ライト制御部１５０が、バッファリード制御部１４０がリードアクセス可能か否か判定する条件と同じ条件により、ライトアクセス可能か否か判定する。つまり、転送先ライト制御部１５０は、（１）転送先ライトコマンドによって書き込まれるだけのデータが内部バッファ１３０に格納されており、かつ、（２）データ非破壊制御部１６０から転送先ライト可能指示を受信した場合に、ライトアクセス可能と判定する。ライトアクセス可能と判定した場合（Ｓ５４でＹＥＳ）、処理をＳ５５へ進める。一方、ライトアクセス不可能と判定した場合（Ｓ５４でＮＯ）、Ｓ５４へ処理を戻し、所定の時間経過後再びライトアクセス可能か否か判定する。
Ｓ５５では、転送先ライト制御部１５０が生成した転送先ライトコマンドをメモリ３００に対して発行して、転送先領域へデータを書き込む。
そして、Ｓ５６では、転送先ライト制御部１５０が、転送サイズ分のデータを書き込む転送先ライトコマンドをメモリ３００へ送信したか否かにより、メモリ３００へのライトアクセスを終了するか否か判定する。ライトアクセスを終了すると判定した場合（Ｓ５６でＹＥＳ）、処理を終了する。一方、ライトアクセスを終了しないと判定した場合（Ｓ５６でＮＯ）、処理をＳ５１へ戻し、次の転送先ライトコマンドを生成し、メモリ３００へ送信して、データを書き込む。
【００３０】
なお、Ｓ５２では、転送先ライト制御部１５０は、インクリメント方向にバーストライトコマンドを生成する。つまり、バーストライトコマンドのライト開始アドレスのアドレス値が昇順になるように、バーストライトコマンドを生成する。
一方、Ｓ５３では、転送先ライト制御部１５０は、デクリメント方向にバーストライトコマンドを生成するということである。つまり、バーストライトコマンドのライト開始アドレスのアドレス値が降順になるように、バーストライトコマンドを生成する。
【００３１】
図１２は、実施の形態１に係るデータ非破壊制御部１６０の動作を示すフローチャートである。なお、図１２は、図７におけるＳ１３又はＳ１４におけるデータ非破壊制御部１６０の動作を示す。
Ｓ６１では、データ非破壊制御部１６０が、転送タイプ設定レジスタ１６１に設定された転送タイプに従い、インクリメント転送かデクリメント転送かを判定する。デクリメント転送と判定した場合、処理をＳ６２へ進め、インクリメント転送と判定した場合、処理をＳ６４へ進める。
Ｓ６２では、データ非破壊制御部１６０が、バッファライト完了ポインタ設定レジスタ１６２に設定されたバッファライト完了ポインタが示すアドレス値が、バッファリードポインタ設定レジスタ１６３に設定されたバッファリードポインタが示すアドレス値以下か否かを判定する。バッファライト完了ポインタが示すアドレス値がバッファリードポインタが示すアドレス値以下でない場合（Ｓ６２でＮＯ）、処理をＳ６３へ進める。一方、バッファライト完了ポインタが示すアドレス値がバッファリードポインタが示すアドレス値以下である場合（Ｓ６２でＹＥＳ）、処理をＳ６４へ進める。
Ｓ６３では、データ非破壊制御部１６０は、バッファ読み出しの準備が未完了であると判定し、転送先ライト可能指示を送信しない。一方、Ｓ６４では、データ非破壊制御部１６０は、バッファ読み出しの準備が完了したと判定し、バッファリード制御部１４０と転送先ライト制御部１５０とへ転送先ライト可能指示を送信する。
Ｓ６５では、データ非破壊制御部１６０は、転送サイズ分のデータの転送が完了したか否かにより、処理を終了するか否か判定する。処理を終了すると判定した場合（Ｓ６５でＹＥＳ）、処理を終了する。一方、処理を終了しないと判定した場合（Ｓ６５でＮＯ）、処理をＳ６１へ戻し、再びバッファの準備が完了したか否かを判定する。
【００３２】
つまり、インクリメント転送の場合、常にバッファ準備完了と判定される。一方、デクリメント転送の場合、「バッファライト完了ポインタが示すアドレス値≦バッファリードポインタが示すアドレス値」が成立したとき、バッファ準備完了と判定される。
【００３３】
次に、ＤＭＡ転送制御装置１００の具体的な動作例を説明する。
まず、図１３から図１５を用いて、インクリメント転送の場合の例を説明する。
図１３は、転送元領域と転送先領域とを示す図である。なお、図１３の１マスは、２ｂｙｔｅを表す。図１４は、ＤＭＡ転送の一連の流れ（リードアクセス、ライトアクセス）を示すタイミングチャートである。図１５は、ＤＭＡ転送時におけるデータの変化を示す図である。
【００３４】
図１３に示すように、転送元領域はメモリ３００におけるアドレス００ｈ−３０ｈであり、転送先領域はメモリ３００におけるアドレス１８ｈ−４８ｈである。転送元領域と転送先領域とは、アドレス１８ｈから３０ｈまでが重複している。そして、転送元領域の先頭アドレス００ｈは、転送先領域の先頭アドレス１８ｈよりも小さいので、転送元領域と転送先領域とは順方向にずれている。転送元領域と転送先領域とは順方向にずれており、インクリメント転送を行うため、ここではデータ破壊が発生する。
インクリメント転送を行うため、インクリメント方向にバーストリードコマンドやバーストライトコマンドが発行される。ここでは、転送元領域からデータを読み出す転送元リードコマンドとして、４バーストリードコマンド（１）と３バーストリードコマンド（２）とが順に発行される。また、転送先領域へデータを書き込む転送先ライトコマンドとして３バーストライトコマンド（１）と４バーストライトコマンド（２）とが順に発行される。そのため、転送元領域からのデータの読み出し、転送先領域へのデータの書き込みの順序は、Ｄ１，Ｄ２，Ｄ３，Ｄ４，Ｄ５，Ｄ６，Ｄ７の順である。
【００３５】
なお、この例では、転送元リードコマンドのリード開始アドレスのアドレス値と、アドレス値が同じ内部バッファ１３０におけるアドレスを、転送元リードコマンドのリード開始アドレスに対応する、内部バッファ１３０におけるアドレスとする。また、転送先ライトコマンドのライト開始アドレスのアドレス値より、アドレス値が２４ｂｙｔｅ分（３行）小さい内部バッファ１３０におけるアドレスを、転送先ライトコマンドのライト開始アドレスに対応する、内部バッファ１３０におけるアドレスとする。
【００３６】
まず、Ｓ１１で、ＤＭＡ転送制御装置１００のレジスタには、転送元アドレス：００ｈ、転送先アドレス：１８ｈ、転送サイズ：５６ｂｙｔｅ、転送タイプ：インクリメント転送のＤＭＡ情報が設定される。次に、Ｓ１２で、データ非破壊制御部１６０により各制御部へインクリメント転送であることが通知される。そして、Ｓ１３へ進み、インクリメント転送によるＤＭＡ転送が実行される。
【００３７】
すると、転送元リード制御部１１０は、まず、転送元リードコマンドとして、４バーストリードコマンド（１）を図１４のＴ０に発行し、続いて、３バーストリードコマンド（２）を図１４のＴ２に発行する。
また、バッファライト制御部１２０は、まず、４バーストリードコマンド（１）に対応するバッファライトコマンド（１）を発行する。これにより、４バーストリードコマンド（１）によって転送元領域から読み出されたデータＤ１，Ｄ２，Ｄ３，Ｄ４が図１４のＴ３からＴ６までの間に順に内部バッファ１３０に書き込まれる（図１５（ｂ））。
内部バッファ１３０にデータＤ３が書き込まれた時点で、内部バッファ１３０には３つの単位量データが格納された状態となる。つまり、３バーストライトコマンド（１）によって書き込まれるだけのデータが内部バッファ１３０に格納された状態となる。また、今回は、インクリメント転送であるため、常にデータ非破壊制御部１６０から転送先ライト可能指示が送信されている。そのため、転送先ライト制御部１５０は、転送先ライトコマンドとして、３バーストライトコマンド（１）を図１４のＴ６に発行する。また、バッファリード制御部１４０は、３バーストライトコマンド（１）に対応するバッファリードコマンド（１）を発行する。そして、データＤ１，Ｄ２，Ｄ３が図１４のＴ６からＴ８までの間にメモリ３００の転送先領域に順に書き込まれる（図１５（ｃ））。
この際、読み出し前のアドレス２０ｈ，２８ｈのデータＤ５，Ｄ６がデータＤ２，Ｄ３で上書きされ、データが破壊されてしまう。
【００３８】
さらに、バッファライト制御部１２０は、３バーストリードコマンド（２）に対応するバッファライトコマンド（２）を発行する。これにより、３バーストリードコマンド（２）によって読み出されたデータＤ２，Ｄ３，Ｄ７が図１４のＴ８からＴ１０までの間に順に内部バッファ１３０に書き込まれる（図１５（ｄ））。
内部バッファ１３０にデータＤ７が書き込まれた時点で、内部バッファ１３０には４つの単位量データが格納された状態となる。つまり、４バーストライトコマンド（２）によって書き込まれるだけのデータが内部バッファ１３０に格納された状態となる。また、今回は、インクリメント転送であるため、常に転送先ライト制御部１５０から転送先ライト可能指示が送信されている。そのため、転送先ライト制御部１５０は、転送先ライトコマンドとして、４バーストライトコマンド（２）を図１４のＴ１１に発行する。また、バッファリード制御部１４０は、４バーストライトコマンド（２）に対応するバッファリードコマンド（２）を発行する。そして、データＤ４，Ｄ２，Ｄ３，Ｄ７が図１４のＴ１１からＴ１４までの間にメモリ３００の転送先領域に順に書き込まれる（図１５（ｅ））。
この結果、メモリ３００のアドレス３８ｈ，４０ｈに格納されたデータは、本来格納されるべきデータＤ５，Ｄ６ではなく、データＤ２，Ｄ３となっている。
【００３９】
次に、図１６から図１９を用いて、デクリメント転送の場合の例を説明する。
図１６は、転送元領域と転送先領域とを示す図である。なお、図１６の１マスは、２ｂｙｔｅを表す。図１７は、ＤＭＡ転送の一連の流れ（リードアクセス、ライトアクセス）を示すタイミングチャートである。図１８及び図１９は、ＤＭＡ転送時におけるデータの変化を示す図である。
【００４０】
図１６に示すように、転送元領域と転送先領域とは、図１３と同じである。
デクリメント転送を行うため、デクリメント方向にバーストリードコマンドやバーストライトコマンドが発行される。ここでは、転送元領域からデータを読み出す転送元リードコマンドとして、３バーストリードコマンド（１）と４バーストリードコマンド（２）とが順に発行される。また、転送先領域へデータを書き込む転送先ライトコマンドとして４バーストライトコマンド（１）と３バーストライトコマンド（２）とが順に発行される。そのため、転送元領域からのデータの読み出しの順序は、Ｄ５，Ｄ６，Ｄ７，Ｄ１，Ｄ２，Ｄ３，Ｄ４の順であり、転送先領域へのデータの書き込みの順序は、Ｄ４，Ｄ５，Ｄ６，Ｄ７，Ｄ１，Ｄ２，Ｄ３の順である。
【００４１】
なお、この例では、転送元リードコマンドのリード開始アドレスのアドレス値より、アドレス値が２４ｂｙｔｅ分（３行）大きい内部バッファ１３０におけるアドレスを、転送元リードコマンドのリード開始アドレスに対応する、内部バッファ１３０におけるアドレスとする。また、転送先ライトコマンドのライト開始アドレスのアドレス値と、アドレス値が同じ内部バッファ１３０におけるアドレスを、転送先ライトコマンドのライト開始アドレスに対応する、内部バッファ１３０におけるアドレスとする。
【００４２】
まず、Ｓ１１で、ＤＭＡ転送制御装置１００のレジスタには、転送元アドレス：００ｈ、転送先アドレス：１８ｈ、転送サイズ：５６ｂｙｔｅ、転送タイプ：デクリメント転送のＤＭＡ情報が設定される。次に、Ｓ１２で、データ非破壊制御部１６０により各制御部へデクリメント転送であることが通知される。そして、Ｓ１４へ進み、デクリメント転送によるＤＭＡ転送が実行される。
【００４３】
すると、転送元リード制御部１１０は、まず、転送元リードコマンドとして、３バーストリードコマンド（１）を図１７のＴ０に発行し、続いて、４バーストリードコマンド（２）を図１７のＴ２に発行する。
また、バッファライト制御部１２０は、まず、３バーストリードコマンド（１）に対応するバッファライトコマンド（１）を発行する。これにより、３バーストリードコマンド（１）によって転送元領域から読み出されたデータＤ５，Ｄ６，Ｄ７が図１７のＴ３からＴ５までの間に順に内部バッファ１３０に書き込まれる（図１８（ｂ））。
なお、バッファライトコマンド（１）を発行する場合、３バーストリードコマンド（１）におけるリード開始アドレス（アドレス２０ｈ）より、アドレス値が２４ｂｙｔｅ分（３行）大きい、内部バッファ１３０におけるアドレス３８ｈにバッファライトポインタが設定される。また、３バーストリードコマンド（１）では、２４ｂｙｔｅ（３行）読み出されるため、アドレス３８ｈよりアドレス値が２４ｂｙｔｅ分（３行）大きい、内部バッファ１３０におけるアドレス５０ｈにバッファライト完了ポインタが設定される。また、バッファリード制御部１４０により、４バーストライトコマンド（１）におけるライト開始アドレス（アドレス３０ｈ）と、アドレス値が同じ、内部バッファ１３０におけるアドレス３０ｈにバッファリードポインタが設定される。
データＤ７が書き込まれた時点では、内部バッファ１３０には３つの単位量データが格納された状態であり、４バーストライトコマンド（１）によって書き込まれるだけのデータが内部バッファ１３０に格納された状態とはならない。また、バッファライト完了ポインタは、バッファリードポインタよりもアドレス値が大きいアドレスを示しており、データ非破壊制御部１６０から転送先ライト可能指示が送信されない。したがって、この時点では、バッファリード制御部１４０や転送先ライト制御部１５０はコマンドを発行しない。
【００４４】
続いて、バッファライト制御部１２０は、４バーストリードコマンド（２）に対応するバッファライトコマンド（２）を発行し、４バーストリードコマンド（２）によって転送元領域から読み出されたデータＤ１，Ｄ２，Ｄ３，Ｄ４を図１７のＴ７からＴ１０までの間に順に内部バッファ１３０に書き込む。
なお、図１８（ｃ）に示すように、バッファライトコマンド（２）を発行する場合、内部バッファ１３０におけるアドレス１８ｈにバッファライトポインタが設定される。また、４バーストリードコマンド（２）では、３２ｂｙｔｅ（４行）読み出されるため、アドレス１８ｈよりも３２ｂｙｔｅ分（４行）大きい、内部バッファ１３０におけるアドレス３８ｈにバッファライト完了ポインタが設定される。バッファリードポインタは、変らず内部バッファ１３０におけるアドレス３０ｈに設定されている。
内部バッファ１３０にデータＤ１が書き込まれた時点（図１８（ｃ））で、内部バッファ１３０には４つの単位量データが格納された状態となる。つまり、４バーストライトコマンド（１）によって書き込まれるだけのデータが内部バッファ１３０に格納された状態となる。しかし、この時点では、バッファライト完了ポインタは、バッファリードポインタよりもアドレス値が大きいアドレスを示しており、データ非破壊制御部１６０から転送先ライト可能指示が送信されない。したがって、この時点では、バッファリード制御部１４０や転送先ライト制御部１５０はコマンドを発行しない。
その後、内部バッファ１３０にデータＤ４まで書き込みが完了すると（図１９（ｄ））、バッファライト制御部１２０の終了処理（Ｓ３５）にて、４バーストリードコマンド（２）に対応するバッファライトコマンドにおけるライト開始アドレス１８ｈに、バッファライト完了ポインタが設定される。すると、バッファライト完了ポインタが示すアドレスのアドレス値が、バッファリードポインタが示すアドレスのアドレス値以下になり、データ非破壊制御部１６０から転送先ライト可能指示が送信される。そのため、転送先ライト制御部１５０は、転送先ライトコマンドとして、４バーストライトコマンド（１）を図１７のＴ１１に発行する。また、バッファリード制御部１４０は、４バーストライトコマンド（１）に対応するバッファリードコマンドを発行する。そして、データＤ４，Ｄ５，Ｄ６，Ｄ７が図１７のＴ１１からＴ１４までの間にメモリ３００の転送先領域に順に書き込まれる（図１９（ｅ））。
さらに、転送先領域にデータＤ７まで書き込みが完了すると、３バーストライトコマンド（２）におけるライト開始アドレス（アドレス１８ｈ）と、アドレス値が同じ、内部バッファ１３０におけるアドレス１８ｈにバッファリードポインタが設定される。この時点では、内部バッファ１３０には３つの単位量データが格納された状態である。つまり、３バーストライトコマンド（２）によって書き込まれるだけのデータが内部バッファ１３０に格納された状態である。また、バッファライト完了ポインタが示すアドレスのアドレス値が、バッファリードポインタが示すアドレスのアドレス値以下であり、データ非破壊制御部１６０から転送先ライト可能指示が送信される。そのため、転送先ライト制御部１５０は、転送先ライトコマンドとして、３バーストライトコマンド（２）を図１７のＴ１５に発行する。また、バッファリード制御部１４０は、３バーストライトコマンド（２）に対応するバッファリードコマンドを発行する。そして、データＤ１，Ｄ２，Ｄ３が図１７のＴ１５からＴ１７までの間にメモリ３００の転送先領域に順に書き込まれる（図１９（ｆ））。
この結果、メモリ３００の転送先領域に、本来格納されるべきデータが格納される。
【００４５】
以上のように、実施の形態１に係るＤＭＡ転送制御装置１００によれば、転送元領域と転送先領域が重なった場合、バースト転送機能を用いて転送を行ってもデータ破壊を防ぎ、正しい転送結果を得ることができる。
【００４６】
実施の形態２．
実施の形態１では、ＣＰＵ２００がインクリメント転送を行うか、デクリメント転送を行うかを指定した。つまり、ＣＰＵ２００側でインクリメント転送を行うべきか、デクリメント転送を行うべきかの判断をする必要があった。
実施の形態２では、ＤＭＡ転送制御装置１００が転送元領域と転送先領域との重なりの状態に応じて、インクリメント転送を行うべきか、デクリメント転送を行うべきかを適切に判断する方法について説明する。
【００４７】
実施の形態２に係るＤＭＡ転送制御装置１００は、実施の形態１に係るＤＭＡ転送制御装置１００と、データ非破壊制御部１６０の構成のみ異なる。
【００４８】
図２０は、実施の形態２に係るデータ非破壊制御部１６０の構成図である。実施の形態２に係るデータ非破壊制御部１６０は、実施の形態１に係るデータ非破壊制御部１６０が備える転送タイプ設定レジスタ１６１を備えていない。その代わりに、実施の形態２に係るデータ非破壊制御部１６０は、データ非破壊機能ＯＮ／ＯＦＦ設定レジスタ１６５、転送元アドレス設定レジスタ１６６、転送先アドレス設定レジスタ１６７、転送サイズ設定レジスタ１６８、転送タイプ判断部１６９を備える。
データ非破壊機能ＯＮ／ＯＦＦ設定レジスタ１６５には、データ非破壊機能をＯＮ（有効）にするか、ＯＦＦ（無効）にするかが設定される。
転送元アドレス設定レジスタ１６６には、転送元領域の先頭アドレスが設定される。転送先アドレス設定レジスタ１６７には、転送先領域の先頭アドレスが設定される。転送サイズ設定レジスタ１６８には、転送データのサイズが設定される。
転送タイプ判断部１６９は、データ非破壊機能ＯＮ／ＯＦＦ設定レジスタ１６５にＯＮと設定されている場合、以下のように転送タイプを判断し、各制御部へ通知する。
（Ａ）転送元領域と転送先領域とが重ならない場合、インクリメント転送と判断する。
（Ｂ）転送元領域と転送先領域とが重なる場合、以下の（ａ）から（ｃ）のように判断する。
（ａ）転送元領域と転送先領域とが全く同じ領域ならインクリメント転送と判断する。
（ｂ）転送元アドレス設定レジスタ１６６に設定されたアドレス（転送元領域の先頭アドレス）のアドレス値が、転送先アドレス設定レジスタ１６７に設定されたアドレス（転送先領域の先頭アドレス）のアドレス値より小さいならデクリメント転送と判断する。
（ｃ）転送元アドレス設定レジスタ１６６に設定されたアドレス（転送元領域の先頭アドレス）のアドレス値が、転送先アドレス設定レジスタ１６７に設定されたアドレス（転送先領域の先頭アドレス）のアドレス値より大きいならインクリメント転送と判断する。
一方、転送タイプ判断部１６９は、データ非破壊機能ＯＮ／ＯＦＦ設定レジスタ１６５にＯＦＦと設定されている場合、常にインクリメント転送と各制御部へ通知する。
【００４９】
図２１は、実施の形態２に係るＤＭＡ転送制御装置１００全体の動作を示すフローチャートである。
Ｓ７１は、図７のＳ１１と同様である。この際、データ非破壊機能をＯＮとするかＯＦＦとするかもレジスタに設定される。
Ｓ７２では、データ非破壊制御部１６０がレジスタ（データ非破壊機能ＯＮ／ＯＦＦ設定レジスタ１６５）の設定がＯＮか否かを判定する。ＯＮである場合、処理をＳ７３へ進め、ＯＦＦである場合、インクリメント転送であることを各制御部へ通知して、処理をＳ７５へ進める。
Ｓ７３では、データ非破壊制御部１６０がインクリメント転送であるか、デクリメント転送であるかを判定する。デクリメント転送である場合、デクリメント転送であることを各制御部へ通知して、処理をＳ７４へ進める。一方、インクリメント転送である場合、インクリメント転送であることを各制御部へ通知して、処理をＳ７５へ進める。
Ｓ７４では、ＤＭＡ転送制御装置１００がメモリ３００に対してデクリメント転送を行う。一方、Ｓ７５では、ＤＭＡ転送制御装置１００がメモリ３００に対してインリメント転送を行う。
そして、Ｓ７６では、ＤＭＡ転送制御装置１００が指定されたデータ長のデータを転送し終えた場合等、ＤＭＡ転送停止要因があったときに転送動作を停止する。
【００５０】
以上のように、実施の形態２に係るＤＭＡ転送制御装置１００によれば、ＣＰＵ２００が転送タイプを指示することなく、ＤＭＡ転送制御装置１００側で適切な転送タイプを判断した上で、データ転送を行うことができる。
【００５１】
なお、以上の説明において、各制御部は、例えば、回路等によって構成されており、「〜部」を「〜回路」と読み代えても構わない。
【符号の説明】
【００５２】
１０  ＤＭＡ転送システム、１００  ＤＭＡ転送制御装置、１１０  転送元リード制御部、１２０  バッファライト制御部、１３０  内部バッファ、１４０  バッファリード制御部、１５０  転送先ライト制御部、１６０  データ非破壊制御部、１６１  転送タイプ設定レジスタ、１６２  バッファライト完了ポインタ設定レジスタ、１６３  バッファリードポインタ設定レジスタ、１６４  バッファ準備完了判断部、１６５  データ非破壊機能ＯＮ／ＯＦＦ設定レジスタ、１６６  転送元アドレス設定レジスタ、１６７  転送先アドレス設定レジスタ、１６８  転送サイズ設定レジスタ、１６９  転送タイプ判断部、２００  ＣＰＵ、３００  メモリ。
【図１】
0005656589.tif 000002
【図２】
0005656589.tif 000003
【図３】
0005656589.tif 000004
【図４】
0005656589.tif 000005
【図５】
0005656589.tif 000006
【図６】
0005656589.tif 000007
【図７】
0005656589.tif 000008
【図８】
0005656589.tif 000009
【図９】
0005656589.tif 000010
【図１０】
0005656589.tif 000011
【図１１】
0005656589.tif 000012
【図１２】
0005656589.tif 000013
【図１３】
0005656589.tif 000014
【図１４】
0005656589.tif 000015
【図１５】
0005656589.tif 000016
【図１６】
0005656589.tif 000017
【図１７】
0005656589.tif 000018
【図１８】
0005656589.tif 000019
【図１９】
0005656589.tif 000020
【図２０】
0005656589.tif 000021
【図２１】
0005656589.tif 000022