(57)【要約】【課題】複数のデータ発信元と複数のデータ宛先との間でデータ転送を制御するダイレクト・メモリ・アクセス・コントローラを提供する。【解決手段】複数のデータ発信元および複数のデータ宛先は、複数のチャネルを介してダイレクト・メモリ・アクセス・コントローラと交信し、ダイレクト・メモリ・アクセス・コントローラは、更にメモリおよびプロセッサと交信する。メモリは、複数のチャネルの各々およびプロセッサについて２組の制御データを記憶する。ダイレクト・メモリ・アクセス・コントローラは、前記複数のチャネルの１つ又は前記プロセッサから受信するデータ転送要求に応答して、前記メモリ中に記憶された前記対応する制御データの１組にアクセスし、前記ダイレクト・メモリ・アクセスは、前記アクセスされる制御データに依存して要求される前記データ転送の少なくとも一部を実行する。【選択図】図１ａ
2008204456.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ発信元と複数のデータ宛先との間でデータ転送を制御するダイレクト・メモリ・アクセス・コントローラであって、前記複数のデータ発信元およびデータ宛先は、複数のチャネルを介して前記ダイレクト・メモリ・アクセス・コントローラと交信しており、前記ダイレクト・メモリ・アクセス・コントローラは、更にメモリおよびプロセッサと交信し、前記メモリは、前記複数のチャネルの各々および前記プロセッサに対して２組の制御データを記憶するように適応しており、
前記ダイレクト・メモリ・アクセス・コントローラは、前記複数のチャネルの１つ又は前記プロセッサから受信するデータ転送要求に応答して、前記メモリに記憶された前記対応する制御データの１組にアクセスし、前記ダイレクト・メモリ・アクセスは、前記アクセスされた制御データに依存して、要求される前記データ転送の少なくとも一部を実行する、
ダイレクト・メモリ・アクセス・コントローラ。
【請求項２】
請求項１記載のダイレクト・メモリ・アクセス・コントローラであって、前記ダイレクト・メモリ・アクセス・コントローラは、前記１組の制御データによって制御される前記データ転送の一部の完了に続いて、前記２組の制御データの他方にアクセスして前記データ転送の別の一部の転送を制御するように適応した前記ダイレクト・メモリ・アクセス・コントローラ。
【請求項３】
請求項１記載のダイレクト・メモリ・アクセス・コントローラであって、前記ダイレクト・メモリ・アクセス・コントローラは、前記１組の制御データに依存して前記データ転送のすべてを実行し、また同じチャネル又はプロセッサからの後続のデータ転送要求に応答して前記２組の制御データの他方にアクセスするように適応した前記ダイレクト・メモリ・アクセス・コントローラ。
【請求項４】
請求項１記載のダイレクト・メモリ・アクセス・コントローラであって、前記ダイレクト・メモリ・アクセス・コントローラは、１つのレジスタを含み、前記レジスタは、前記制御データの記憶場所に関するベース・アドレスを記憶するように適応しており、それによって前記ベース・アドレスに依存して制御データの各組にアクセスできる前記ダイレクト・メモリ・アクセス・コントローラ。
【請求項５】
請求項１記載のダイレクト・メモリ・アクセス・コントローラであって、前記ダイレクト・メモリ・アクセス・コントローラは、前記複数のチャネルの各々およびプロセッサについて１つのインジケータ記憶を含み、前記インジケータ記憶は、前記２組の制御データのどちらにアクセスすべきかを指すインジケータ・ビットを含み、前記ダイレクト・メモリ・アクセス・コントローラは、前記１組の制御データによって制御される前記データ転送の少なくとも一部の完了に続いて、前記インジケータ・ビットをトグルさせるように適応した前記ダイレクト・メモリ・アクセス・コントローラ。
【請求項６】
請求項１記載のダイレクト・メモリ・アクセス・コントローラであって、前記制御データは、前記データの発信元を指す発信元ポインタ、前記データの宛先を指す宛先ポインタおよび前記データ転送のタイプを示すタイプ・データを含む前記ダイレクト・メモリ・アクセス・コントローラ。
【請求項７】
請求項３記載のダイレクト・メモリ・アクセス・コントローラであって、前記ダイレクト・メモリ・アクセス・コントローラは、制御データの前記１組によって制御されるデータ転送の完了に応答して、制御データの前記１組を更新するように要求するインタラプトを前記プロセッサに対して発行し、また前記後続のデータ転送要求に応答して、制御データの前記他方の組にアクセスし、また制御データの前記他の組によって制御される別のデータ転送を実行し、また前記別のデータ転送の完了に続いて、制御データの前記他の組を更新するように要求するインタラプトを前記プロセッサに対して発行し、また同じチャネル又はプロセッサからの別のデータ転送要求に応答して、制御データの前記１組に、もしそれが更新されていればアクセスし、制御データの前記１組の制御下で前記別のデータ転送を開始し、またもし制御データの前記１組が更新されていないことが検出されれば、前記別のデータ転送を保留させる前記ダイレクト・メモリ・アクセス・コントローラ。
【請求項８】
請求項７記載のダイレクト・メモリ・アクセス・コントローラであって、前記ダイレクト・メモリ・アクセス・コントローラは、制御データの前記１組によって制御されるデータ転送の完了に応答して、制御データの前記１組を無効としてマークし、更に無効とマークされた制御データの前記１組を更新し、次に有効とマークするように要求するインタラプトを前記プロセッサに対して発行し、また前記別のデータ転送の完了に続いて、制御データの前記他方の組を無効としてマークし、制御データの前記他方の組を更新して有効とマークするように要求するインタラプトを前記プロセッサに対して発行し、それが有効又は無効のいずれにマークされるかに依存して、制御データの前記１組が更新されたかどうかを検出する前記ダイレクト・メモリ・アクセス・コントローラ。
【請求項９】
請求項２記載のダイレクト・メモリ・アクセス・コントローラであって、制御データの前記１組によって制御される前記データ転送の前記部分には、制御データの前記他方の組の上書きが含まれ、前記データ転送の前記別の部分は、制御データの前記更新された他方の組によって制御され、それによって、前記ダイレクト・メモリ・アクセス・コントローラは、プロセッサ介入を要求することなく、更新された制御データを使用してデータ転送シーケンスを実行するように適応した前記ダイレクト・メモリ・アクセス・コントローラ。
【請求項１０】
請求項９記載のダイレクト・メモリ・アクセス・コントローラであって、制御データの前記更新された他方の組によって制御される前記データ転送の前記別の部分の１つは、前記１組の制御データの上書きを含み、それによって、前記ダイレクト・メモリ・アクセス・コントローラは、プロセッサ介入なしに、上限のない複数のデータ転送を実行するように適応した前記ダイレクト・メモリ・アクセス・コントローラ。
【請求項１１】
請求項８記載のダイレクト・メモリ・アクセス・コントローラであって、前記ダイレクト・メモリ・アクセス・コントローラは、前記プロセッサが前記チャネルをディセーブルするか、前記データ転送が完了するまで、制御データの前記１組および制御データの前記他方の組によって制御される後続のデータ転送を連続して実行するように適応した前記ダイレクト・メモリ・アクセス・コントローラ。
【請求項１２】
請求項９記載のダイレクト・メモリ・アクセス・コントローラであって、前記ダイレクト・メモリ・アクセス・コントローラは、別のデータ要求に応答して、制御データの前記１組にアクセスし、制御データの前記１組の制御下で別のデータ転送の一部を実行し、前記別のデータ転送の前記部分は、制御データの前記他方の組の上書きを含み、前記ダイレクト・メモリ・アクセス・コントローラは、制御データの前記１組によって制御される前記別のデータ転送の前記部分の完了に応答して、制御データの前記更新された他方の組にアクセスし、また前記更新された制御データの制御下で、前記別のデータ転送の別の一部を実行する前記ダイレクト・メモリ・アクセス・コントローラ。
【請求項１３】
複数のデータ発信元／宛先、メモリ、プロセッサおよび前記データ発信元／宛先と前記メモリとの間でデータ転送を制御する請求項１に記載のダイレクト・メモリ・アクセス・コントローラを含むデータ処理装置であって、前記データ発信元／宛先は、前記複数のチャネルを介して前記ダイレクト・メモリ・アクセス・コントローラと交信し、前記メモリは、前記複数のチャネルの各々およびプロセッサに対応して制御データの前記２つの組を記憶するように適応したデータ処理装置。
【請求項１４】
請求項１３記載のデータ処理装置であって、前記複数のデータ発信元／宛先が周辺機器を含む前記データ処理装置。
【請求項１５】
複数のデータ発信元と複数のデータ宛先との間でデータ転送を制御するダイレクト・メモリ・アクセス制御方法であって、前記複数のデータ発信元および複数のデータ宛先は、複数のチャネルを介して前記ダイレクト・メモリ・アクセス・コントローラと交信しており、前記ダイレクト・メモリ・アクセス・コントローラは、更にメモリおよびプロセッサと交信し、前記メモリは、前記複数のチャネルの各々および前記プロセッサに対して２組の制御データを記憶するように適応しており、
前記ダイレクト・メモリ・アクセス制御方法は、
前記複数のチャネルの１つ又は前記プロセッサからデータ転送要求を受信する工程と、
前記データ転送要求に応答して、前記対応するチャネル又はプロセッサに関する前記メモリに記憶された前記制御データの１つの組にアクセスする工程と、
前記アクセスされた制御データの制御下で、前記データ転送の少なくとも一部を実行する工程と、
を含むダイレクト・メモリ・アクセス制御方法。
【請求項１６】
請求項１５記載のダイレクト・メモリ・アクセス制御方法であって、更に、
制御データの前記１組によって制御される前記データ転送の前記部分の完了に続いて、前記２組の前記制御データの他方にアクセスして、前記データ転送の別の部分を制御する工程と、
前記別の部分のデータ転送を実行する工程と、
を含む前記ダイレクト・メモリ・アクセス制御方法。
【請求項１７】
請求項１５記載のダイレクト・メモリ・アクセス制御方法であって、更に、
前記複数のチャネルの前記１つ又はプロセッサからの後続のデータ転送要求に応答して、前記２組の制御データの前記他方にアクセスする工程と、
前記他方の制御データの制御下で、前記後続のデータ転送を実行する工程と、
を含む前記ダイレクト・メモリ・アクセス制御方法。
【請求項１８】
請求項１５記載のダイレクト・メモリ・アクセス制御方法であって、前記ダイレクト・メモリ・アクセス・コントローラは、前記複数のチャネルの各々およびプロセッサについて１つのインジケータ記憶を含み、前記インジケータ記憶は、前記複数のチャネルの各々およびプロセッサに対して前記２組の制御データのどちらにアクセスすべきかを指示するインジケータ・ビットを含み、前記アクセス工程においてアクセスされる制御データの前記１組は、前記インジケータ・ビットの値に依存した前記ダイレクト・メモリ・アクセス制御方法。
【請求項１９】
請求項１５記載のダイレクト・メモリ・アクセス制御方法であって、制御データの前記１組によって制御されるデータ転送の完了に続いて、
前記１組の制御データを無効としてマークする工程と、
前記プロセッサに対して、制御データの前記１組を更新して有効としてマークするように要求するインタラプトを発行する工程と、
更に別のデータ転送を実行するようにとの要求の受信に応答して、
制御データの前記他方の組にアクセスする工程と、
制御データの前記他方の組によって制御される前記別のデータ転送を実行する工程と、
前記別のデータ転送の完了に続いて、前記他方の制御データを無効としてマークする工程と、
前記プロセッサに対して、制御データの前記他方の組を更新して有効としてマークするように要求するインタラプトを発行する工程と、
更に別のデータ転送を実行するようにとの要求の受信に応答して、
制御データの前記１組にアクセスして、制御データの前記１組が有効としてマークされていることを検出すると、それに応答して、
制御データの前記１組によって制御される前記更に別のデータ転送を実行する工程、
の前記更なる工程を含む前記ダイレクト・メモリ・アクセス制御方法。
【請求項２０】
請求項１６記載のダイレクト・メモリ・アクセス制御方法であって、制御データの前記１組によって制御される前記データ転送の前記部分は、制御データの前記他方の組を上書きする工程を含み、前記方法は、制御データの前記１組によって制御される前記データ転送の完了に続いて、
制御データの前記他方の組にアクセスして、前記データ転送の別の部分を制御する工程と、
制御データの前記上書きされた他方の組の制御下で、前記データ転送の前記別の部分を実行する工程、
の前記更なる工程を含む前記ダイレクト・メモリ・アクセス制御方法。
【請求項２１】
請求項２０記載のダイレクト・メモリ・アクセス制御方法であって、プロセッサからチャネル・ディセーブル信号を受信するか、あるいは、前記データ転送が完了するまで、前記方法の前記工程の実行を繰り返し含む前記ダイレクト・メモリ・アクセス制御方法。
【請求項２２】
請求項２１記載のダイレクト・メモリ・アクセス制御方法であって、制御データの前記更新された他方の組の制御下で前記データ転送の前記更なる部分を実行する前記工程の反復されるシーケンスにおける前記工程の１つは、制御データの前記１組を上書きする工程を含む前記ダイレクト・メモリ・アクセス制御方法。
【請求項２３】
請求項２０記載のダイレクト・メモリ・アクセス制御方法であって、前記方法は、
別のデータ要求に応答して、
制御データの前記１組にアクセスする工程と、
制御データの前記１組の制御下で別のデータ転送の一部を実行する工程であって、前記更なるデータ転送の前記部分が制御データの前記他方の組を上書きする工程を含む前記工程と、
制御データの前記更新された他方の組にアクセスする工程と、
前記更新された制御データの制御下で前記別のデータ転送の別の部分を実行する工程、
の更なる工程を含む前記ダイレクト・メモリ・アクセス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、データ処理に関するものであって、更に詳細には、ダイレクト・メモリ・アクセス・コントローラを使用したデータ転送の制御に関する。
【背景技術】
【０００２】
メモリと周辺機器間のように異なる機能ユニット間で、プロセッサを使用する必要なく、従ってそれをインタラプトすることなしにデータ・アクセスを制御するために、ダイレクト・メモリ・アクセス・コントローラ、すなわちＤＭＡＣを備えることが知られている。
【０００３】
ＤＭＡコントローラは、複数の周辺機器とメモリ間でデータ転送を制御する。特別なデータ転送を制御するために、ダイレクト・メモリ・アクセス・コントローラは、データの初期の発信元アドレス、宛先アドレス、例えば１ワードすなわち３２ビットなど転送幅および例えば３０７２バイトなど転送サイズを必要とする。これらは、ＤＭＡコントローラ自身に記憶させることができる。しかし、ＤＭＡコントローラが非常に多数の周辺機器のメモリ・アクセスを制御する場合、この情報をそれら周辺機器又はチャネルの各々に記憶させる必要がある。このことは、大量の記憶を必要とし、ＤＭＡコントローラのゲート・カウントを増やすことになる。この問題に対処する１つの既存の方法は、各チャネルに関する制御情報をメモリに記憶させて、ＤＭＡコントローラには、それへのポインタだけを記憶させるものである。これは、各チャネルについて１つのポインタであるか、あるいは、ベース・アドレスへのポインタでよく、各種のチャネルに関する制御情報は、このアドレスから既知のオフセットだけ離れた場所に記憶されることになる。これは、データ転送が各チャネルについて連続的な線形転送の場合はよいが、しかし、これがスキャッタ（ｓｃａｔｔｅｒ）／ギャザ（ｇａｔｈｅｒ）転送のように、データがいくつかの宛先に送られたり、いくつかの発信元から取り出されたりする場合のようにバラバラなケースでは、転送と転送の間に制御データを更新する必要が生まれ、これをプロセッサが行わなければならない。
【０００４】
この問題に対処する１つに既存の方法は、リンク・リスト（ｌｉｎｋｅｄ  ｌｉｓｔ）を使用するものである（例えば、ＡＲＭによって製造され、ｈｔｔｐ：／／ｗｗｗ．ａｒｍ．ｃｏｍ／ｐｄｆｓ／ＤＤＩ０１９６Ｇ＿ｄｍａｃ＿ｐｌ０８０＿ｒ１ｐ３＿ｔｒｍ．ｐｄｆに見出される出版物に詳細があるＰＬ０８ｘ型ＤＭＡＣを参照）。このような構成では、ＤＭＡＣ内に各チャネルに関するレジスタがあって、それがこのチャネルに対するリンク・リストを指している。各リンク・リストは、データの１ブロックの転送を制御し、次にオプションとして、ＤＡＭオペレーションを継続するために別のリンク・リストをロードするか、あるいは、ＤＭＡストリームを停止させる。このように、第１のリンク・リストのアドレスは、転送すべきデータの第１のブロック、転送すべき次のブロックを定義する次のリンク・リストを記憶するこのデータ・ブロックの最後のアドレス等々を定義し、最後には、次のリンク・リスト・アドレスがデータ転送の停止を意味する００を記憶するアドレスを記憶する。これは、バラバラなデータ転送を実行する効率的なやり方であるが、リンク・リスト・ポインタを記憶するために、ＤＭＡコントローラ内に各チャネルについて１つのレジスタを必要とする。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
プロセッサをインタラプトする必要なく、またＤＭＡコントローラに関するゲート・カウントを小さく保ったままでバラバラなデータ転送を実行する柔軟性を有することが望ましい。
【課題を解決するための手段】
【０００６】
本発明の第１の態様は、複数のデータ発信元と複数のデータ宛先との間でデータ転送を制御するダイレクト・メモリ・アクセス・コントローラを提供し、前記複数のデータ発信元およびデータ宛先は、複数のチャネルを介して前記ダイレクト・メモリ・アクセス・コントローラと交信し、前記ダイレクト・メモリ・アクセス・コントローラは、更にメモリおよびプロセッサと交信しており、前記メモリは、前記複数のチャネルの各々および前記プロセッサに対して２組の制御データを記憶するように適応している。前記ダイレクト・メモリ・アクセス・コントローラは、前記複数のチャネルの１つ又は前記プロセッサから受信するデータ転送要求に応答して、前記メモリに記憶された前記対応する制御データの１組にアクセスし、前記ダイレクト・メモリ・アクセスは、前記アクセスされた制御データに依存して、要求される前記データ転送の少なくとも一部を実行する。
【０００７】
ＤＭＡコントローラによって実行されるメモリ・アクセスを制御する制御データをＤＭＡコントローラに付随するメモリ内に記憶された形で提供することは、ＤＭＡコントローラ内に記憶すべきデータ量を減らし、従ってそれのゲート・カウントも減らす。ＤＭＡコントローラがオンであるがまだアクティブでない場合が多いことから、このことは、有利であり、また少数のゲート・カウントを有することは、電力消費も改善する。このように、データ転送要求が受信されると対応する制御データへのアクセスが必要となり、このことによってこのデータがＤＭＡコントローラ自身に記憶される場合よりも大きい電力が消費されるものの、このようなことがそれほど頻繁に発生するわけではないことから、小型のＤＭＡコントローラによって節電する場合と比べて、その支払うべきコストは、一般に小さい。更に、各チャネルおよびプロセッサに対して２組の制御データを備えることは、各々のデータ転送要求に対して実質的に実施できる可能なデータ転送が２つ存在することを意味する。これは、プロセッサ介入の必要なしに複雑な非線形のデータ転送シーケンスを実行することを可能にする。
【０００８】
いくつかの実施の形態で、前記ダイレクト・メモリ・アクセス・コントローラは、前記１組の制御データによって制御される前記データ転送の一部の完了に続いて、前記２組の制御データの他方にアクセスして前記データ転送の別の一部の転送を制御するように適応している。
【０００９】
この２組の制御データは、単一のデータ転送要求の間に使用することができ、メモリ・アクセス・コントローラは、これらの制御データの１組によって制御される部分の完了に続いて、これらの間の切り替えを自動的に実行する。
【００１０】
他の実施の形態で、前記ダイレクト・メモリ・アクセス・コントローラは、前記１組の制御データに依存して前記データ転送のすべてを実行し、また同じチャネル又はプロセッサからの後続のデータ転送要求に応答して前記２組の制御データの他方にアクセスするように適応する。
【００１１】
１組の制御データの制御下でデータ転送全体が実行されることもある。また、別のデータ転送要求が受信されると、他方の制御データ組が使用される。これに関して注意すべきことは、１つのデータ転送は、１つのデータ転送要求に応答して転送されるデータを含むと考えられることである。すなわち、先の実施の形態で、１つのデータ転送は、いくつかの部分に分けて実行され、その各々が異なる制御データによって制御されていたが、この実施の形態では、これが１組の制御データによってデータ転送される。両方のケースで、これは、１つの特別な要求に応答してデータ転送される。
【００１２】
いくつかの実施の形態で、前記ダイレクト・メモリ・アクセス・コントローラは、１つのレジスタを含み、前記レジスタは、前記制御データの記憶に関するベース・アドレスを記憶するように適応して、制御データの各組は、前記ベース・アドレスに依存してアドレス指定できる。
【００１３】
制御データをメモリに記憶させることによって、ダイレクト・メモリ・アクセス・コントローラが必要とするデータ量が減る。特に、制御データのベース・アドレスが１つのレジスタに記憶させれば、制御データの異なる組の各々を記憶させる場所を計算するためにＤＭＡコントローラが必要とするものは、もしそれらが既知の配置で記憶されることになっていれば、これだけでよい。
【００１４】
いくつかの実施の形態で、前記ダイレクト・メモリ・アクセス・コントローラは、前記複数のチャネルの各々およびプロセッサについて１つのインジケータ記憶（ｉｎｄｉｃａｔｏｒ  ｓｔｏｒｅ）を含み、前記インジケータ記憶は、前記２組の制御データのどちらにアクセスすべきかを指すインジケータ・ビットを含み、前記ダイレクト・メモリ・アクセス・コントローラは、前記１組の制御データによって制御される前記データ転送の少なくとも一部の完了に続いて、前記インジケータ・ビットをトグルさせるように適応している。
【００１５】
どの制御データを使用するかをＤＭＡコントローラが知る便利な方法は、１ビットを記憶するインジケータ記憶を利用するものである。これは、制御データの１組によって制御されるデータ転送の完了に続いてトグルされ、それによって次のデータ・アクセスでは、制御データの他方が自動的に使用される。次のデータ・アクセスは、データ転送の一部であるか、あるいは、それは、新しいデータ転送である。
【００１６】
いくつかの実施の形態で、前記制御データは、前記データの発信元を指す発信元ポインタ、前記データの宛先を指す宛先ポインタおよび前記データ転送のタイプを示すタイプ・データ（ｔｙｐｅ  ｄａｔａ）を含む。
【００１７】
制御データには、複数のものが含まれ、いくつかの実施の形態では、データ転送のタイプを示す情報が含まれる。これは、データ転送要求にコントローラがどのように反応するか、また特別な場合であろうとなかろうと、それが２組の制御データをどのように使用するかを決定する情報である。
【００１８】
いくつかの実施の形態で、前記ダイレクト・メモリ・アクセス・コントローラは、制御データの前記１組によって制御されるデータ転送の完了に応答して、制御データの前記１組を更新するように要求するインタラプトを前記プロセッサに対して発行し、また前記後続のデータ転送要求に応答して、制御データの前記他方の組にアクセスし、また制御データの前記他の組によって制御される別のデータ転送を実行し、また前記別のデータ転送の完了に続いて、制御データの前記他の組を更新するように要求するインタラプトを前記プロセッサに対して発行し、また同じチャネル又はプロセッサからの別のデータ転送要求に応答して、制御データの前記１組に、もしそれが更新されていればアクセスして、制御データの前記１組の制御下で前記別のデータ転送を開始し、またもし制御データの前記１組が更新されていないことが検出されれば、前記別のデータ転送を保留させる。
【００１９】
本発明の実施の形態が取り扱うバラバラなデータ転送の１つの特別なタイプは、ピンポン（ｐｉｎｇ  ｐｏｎｇ）データ転送である。このケースで、制御データの１組によって制御されるデータ転送に続いて、ＤＭＡコントローラは、この制御データを更新するように要求するインタラプトをプロセッサに対して発行する。これは、次に、このチャネルを使用して、制御データの他方の組を用いて別のデータ転送要求を実行できる。もしこの転送の間に、プロセッサが制御データの第１の組を更新することができれば、別の転送要求に続いて、新しい更新された制御データを使用できる。このようにして、ＤＭＡコントローラは、多くの異なるデータ転送を連続して制御できる。
【００２０】
いくつかの実施の形態で、前記ダイレクト・メモリ・アクセス・コントローラは、制御データの前記１組によって制御されるデータ転送の完了に応答して、制御データの前記１組を無効であるとマークし、更に無効とマークされた制御データの前記１組を更新し次に有効としてマークするように要求するインタラプトを前記プロセッサに対して発行し、また前記別のデータ転送の完了に続いて、制御データの前記他方の組を無効としてマークし、制御データの前記他方の組を更新して有効としてマークするように要求するインタラプトを前記プロセッサに対して発行し、それが有効又は無効のいずれにマークされるかに依存して、制御データの前記１組が更新されたかどうかを検出する。
【００２１】
制御データを再び使用する前に、それが更新されたかどうかを決定する方法は、多く存在するが、１つの簡単で効率的な方法は、使用後にその制御データを無効としてマークし、一旦それが更新されれば有効としてマークするものである。これは、従って制御データが準備できているかどうかをＤＭＡコントローラが知る直接的な方法である。もし準備ができていなければ、それは、そのデータ転送を保留させる。
【００２２】
いくつかの実施の形態で、制御データの前記１組によって制御される前記データ転送の前記部分には、制御データの前記他方の組の上書きが含まれ、前記データ転送の前記別の部分は、制御データの前記更新された他方の組によって制御され、それによって、前記ダイレクト・メモリ・アクセス・コントローラは、プロセッサ介入を要求することなく、更新された制御データを使用してデータ転送シーケンスを実行するように適応する。
【００２３】
本発明の実施の形態は、またメモリ・スキャッタ・ギャザ（ｍｅｍｏｒｙ  ｓｃａｔｔｅｒ  ｇａｔｈｅｒ）データ転送に特に適している。これには、制御データの他方の組を更新するために、制御データの１組を使用するメモリ・アクセス・コントローラが関与する。このように、プロセッサ介入の必要なしに、複数の異なるアドレスに対して複数のデータ転送を行うことができる。すなわち、プロセッサをインタラプトする必要なしに、バラバラなデータ転送が行われる。
【００２４】
いくつかの実施の形態で、制御データの前記更新された他方の組によって制御される前記データ転送の前記別の部分の１つは、前記１組の制御データの上書きを含み、それによって、前記ダイレクト・メモリ・アクセス・コントローラは、プロセッサ介入なしに、上限のない複数のデータ転送を実行するように適応する。
【００２５】
制御データの組の１つが他方の組を更新すると、その発生回数は、第１のデータ転送のデータ転送サイズによって限定される。しかし、もし制御データの他方の組が、一定数のデータ転送に続いて、制御データの前記１組を上書きすることができれば、これは、チャネル制御データを記憶するために割り当てられたメモリのサイズによってのみ限定される。
【００２６】
いくつかの実施の形態で、前記ダイレクト・メモリ・アクセス・コントローラは、前記プロセッサが前記チャネルをディセーブルするか、前記データ転送が完了するまで、制御データの前記１組および制御データの前記他方の組によって制御される後続のデータ転送を連続して実行するように適応する。
【００２７】
このデータ転送は、それが完了するか、あるいは、プロセッサがチャネルをディセーブルするかのいずれかによって停止される。
【００２８】
いくつかの実施の形態で、前記ダイレクト・メモリ・アクセス・コントローラは、別のデータ要求に応答して、制御データの前記１組にアクセスし、制御データの前記１組の制御下で別のデータ転送の一部を実行し、前記別のデータ転送の前記部分は、制御データの前記他方の組の上書きを含み、前記ダイレクト・メモリ・アクセス・コントローラは、制御データの前記１組によって制御される前記別のデータ転送の前記部分の完了に応答して、制御データの前記更新された他方の組にアクセスし、また前記更新された制御データの制御下で、前記別のデータ転送の別の部分を実行する。
【００２９】
メモリ又は実質的にプロセッサからのソフトウエア・インタラプトによって発行されるデータ要求からのスキャッタ・ギャザ・データ転送のケースでは、データ転送要求は、別の要求が受信されなくても自動的に継続される。しかし、もしこのメモリ・スキャッタ・ギャザを要求したのが周辺機器であれば、データの第２の組が使用されるたびに、ＤＭＡコントローラは、先に進む前に新しいデータ転送要求を待つ。
【００３０】
本発明の別の態様は、複数のデータ発信元／宛先、メモリ、プロセッサおよび発明の第１の態様に従い前記データ発信元／宛先と前記メモリとの間でデータ転送を制御するダイレクト・メモリ・アクセス・コントローラを含むデータ処理装置を提供し、前記データ発信元／宛先は、前記複数のチャネルを介して前記ダイレクト・メモリ・アクセス・コントローラと交信し、前記メモリは、前記複数のチャネルの各々およびプロセッサに対応する制御データの前記２つの組を記憶するように適応する。
【００３１】
前記複数のデータ発信元／宛先は、複数のものでよいが、いくつかの実施の形態では、これらは、周辺機器を含む。ダイレクト・メモリ・アクセス・コントローラは、周辺機器とメモリとの間でデータ転送を制御するのに特に有用である。
【００３２】
発明の更に別の態様は、複数のデータ発信元と複数のデータ宛先との間でデータ転送を制御するダイレクト・メモリ・アクセス制御方法を提供し、前記複数のデータ発信元および複数のデータ宛先は、複数のチャネルを介して前記ダイレクト・メモリ・アクセス・コントローラと交信し、前記ダイレクト・メモリ・アクセス・コントローラは、更にメモリおよびプロセッサと交信しており、前記メモリは、前記複数のチャネルの各々および前記プロセッサに対して２組の制御データを記憶するように適応する。前記ダイレクト・メモリ・アクセス制御方法は、前記複数のチャネルの１つ又は前記プロセッサからデータ転送要求を受信する工程、前記データ転送要求に応答して前記対応するチャネル又はプロセッサに関する前記メモリに記憶された前記制御データの１組にアクセスする工程および前記アクセスされた制御データの制御下で前記データ転送の少なくとも一部を実行する工程を含む。
【００３３】
本発明の上記およびその他の目的、特徴および利点は、例示的実施の形態についての以下の詳細な説明を添付図面と関連付けながら参照することによって明らかとなろう。
【実施例】
【００３４】
図１ａは、本発明の１つの実施の形態に従うダイレクト・メモリ・アクセス・コントローラを含むデータ処理装置５を示す。ダイレクト・メモリ・アクセス（ＤＭＡ）コントローラ１０は、複数の周辺機器２０、メモリ３０およびプロセッサ４０に接続される。
【００３５】
メモリ３０は、ＤＭＡ１０の制御下で転送すべきデータをＤＭＡコントローラ１０を制御する制御データと一緒に記憶する。ＤＭＡコントローラ１０の内部には、レジスタ１２があって、これは、ＤＭＡコントローラ１０の第１のチャネルについての制御情報を保持するメモリ３０内の１つの場所３１のベース・アドレスを保有する。ＤＭＡコントローラ１０は、周辺機器２０をＤＭＡコントローラ１０に接続する複数のチャネル１４を有する。これらのチャネルは、周辺機器からＤＭＡコントローラ１０にデータ・アクセス要求を伝達する。これは、またチャネル１６を有し、それは、プロセッサ４０からのチャネルであって、メモリからＤＭＡコントローラ１０へのデータ転送に関するデータ・アクセス要求を伝達する。これらは、一般的にソフトウエアが発生する要求である。これらのチャネル１４、１６は、すべてデータ・アクセス要求を受信し、これらのデータ・アクセス要求は、メモリ３０に記憶された制御データによって制御される。レジスタ１２は、このデータの記憶場所のベース・アドレス３１を示し、ＤＭＡコントローラ１０は、それに従ってこのベース・アドレスの同定とデータ・アクセス要求に対応するチャネルの知識とによって適切な制御データの組にアクセスできる。
【００３６】
各チャネルに対して２組の制御データ３２があって、これらは、メモリ３０に記憶され、これらの１つは、一次（ｐｒｉｍａｒｙ）制御データであり、もう１つは、代替（ａｌｔｅｒｎａｔｅ）制御データである。この実施の形態で、これらは、各々４つのメモリ場所に記憶される。メモリ場所の１つは、未使用であり、別の１つは、データの発信元アドレスを示す発信元ポインタを記憶し、別の１つは、宛先ポインタであってデータの行き先を示し、別の１つは、制御情報を記憶する。この制御情報は、データ転送サイズとデータ転送が使用するアドレス増分を示す。これは、またデータ転送タイプを示し、データ転送タイプは、一次および代替制御データがどのように使用されるかを決定する。このデータの記憶は、図１ｂに更に詳細に示されている。
【００３７】
ＤＭＡコントローラ１０は、また各チャネルについてトグル・ビット１３を含む。このトグル・ビットは、その要求についての特定の１つのチャネルに対して、一次又は代替制御データのいずれにアクセスすべきかを決定する。
【００３８】
上述のように、制御データは、実行すべきデータ転送のタイプを指示できる。注意すべきことは、すべてのデータ転送タイプについて、コントローラは、２Ｒ個のＤＭＡ転送に続いて、アービトレート（ａｒｂｉｔｒａｔｅ）することである。これは、優先度の低いＤＭＡ転送が長時間にわたってＤＭＡをブロックすることを防止する。Ｒの値は、性能要求に従って選ぶことができる。制御データの一部の値については、図１ｂの３２に示されている。
【００３９】
図１ｂは、メモリ３０中の代替および一次制御データの記憶をより詳細に示している。この実施の形態で、一次制御データおよび代替制御データは、互いの間にオフセットを持たせて一緒に記憶され、それによってこれらの場所を、ＤＭＡコントローラがベース・アドレスから知ることができるようになっている。１つのチャネルに関する１組の制御データは、３２に示されており、４つのメモリ場所が示されているが、１つが未使用で、１つが制御データを含み、１つが宛先エンド・ポインタ（ｅｎｄ  ｐｏｉｎｔｅｒ）で、１つが発信元エンド・ポインタである。
【００４０】
図２は、データ転送の１つのタイプである、「ピンポン」モードを示す。このモードで、コントローラは、データ転送要求５０に応答して、制御データ構造の１つを用いてＤＭＡサイクルを実行する。このデータ転送の終わりに、どの制御データを使用するかを指示するビットがトグルされる。すなわち、別のデータ転送要求５０に応答して、このチャネルに関する他方の制御データを用いたＤＭＡサイクルが実行される。コントローラが無効な制御データ構造を読むまで、あるいは、ホスト・プロセッサがチャネルをディセーブルするまで、コントローラがこれらの制御データ構造間を切り替えるごとに、すなわち、一次から代替へ、そして一次へと切り替えるたびに、制御データ・ビットがトグルされる。
【００４１】
データ要求５０に応答して、一次制御データの制御下で、Ｎ個のデータ・ビットのデータ転送が開始される。この転送の終わりに、どの制御データを使用すべきかを指示するこのチャネルに関するトグル・ビット（図１の１３）がトグルされる。後続の要求に続いて、代替制御データ構造を用いてデータが転送され、これが完了すると、チャネルに関するトグル・ビット１３が再びトグルされ、以下同様の操作が続けられる。このように、各々の新しいデータ転送要求に対して、制御データが、一次と代替との間をトグルする。
【００４２】
図３は、「メモリ・スキャッタ・ギャザ」と呼ばれる別のタイプのデータ転送を示す。メモリ・スキャッタ・ギャザ・モードでは、データが複数の異なる場所に転送される。このことは、制御データの１つを使用して、他方の制御データの更新を制御することによって実現される。この更新された制御データを使用して、データ転送が制御され、そうすることで、複数の異なる場所へのデータ転送を実行できる。
【００４３】
本発明の１つの実施の形態に従うメモリ・スキャッタ・ギャザにおいて、コントローラは、イニシャル要求を受信し、これに応答してこのチャネルに関する一次制御データ構造を用いたＤＭＡ転送を実行する。一次制御データは、代替制御データ記憶場所へのデータの転送を制御する。すなわち、これは、代替制御データを更新する。これが完了すると、すなわち、４個の転送に続いて、トグル・ビットがトグルされ、ＤＭＡコントローラは、次に代替制御データ構造の使用へ自動的に切り替わり、そこにおいて、Ｎ個のデータ・アイテムのデータ転送が実行される。注意すべきことは、この実施の形態で、制御データを記憶するために３つの場所が必要であるところ、４つのメモリ場所が使用されることであって、それは、データ転送が２のべき乗でのみ実行できるためであり、そのために４つの場所が使用されていることである。これに続いて、このチャネルに関するトグル・ビットは、もう一度トグルされて、一次制御データの制御下で再びデータ転送が開始され、それによって代替制御データがもう一度更新される。代替制御データ構造を更新するために、ＤＭＡコントローラが一次制御データを使用するので、単一のデータ転送要求に応答して、プロセッサ介入なしで複数のデータ転送を実行できる。単一の要求の制御下でデータ・アイテムを転送できる先の異なる場所の数に対する唯一の上限は、代替データ転送を更新するために実行できる一次データ転送の数である。これは、一次データ転送の全長によって支配される。しかし、この制限は、代替データ構造によって制御された最後のデータ転送を使用して一次制御データを更新すれば克服できる。これは、全く新しいデータ転送の組みを開始することを許容する。このように、実質的に上限のない数のデータ転送を実行できる。
【００４４】
図３は、上述のプロセスを示す。最初に、メモリ・スキャッタ・ギャザをスタートすべきことを示すソフトウエア要求６０がプロセッサ６０からＤＭＡコントローラに受信される。次に一次制御データの制御下で２Ｒ個のデータ転送が実行され、次に制御データを示すトグル・ビットがトグルされる。次に、代替制御データが次のＮ個のデータ転送のために用いられ、そこでトグル・ビットが再びトグルされる。この実施の形態で、一次データ転送が代替制御データを含むメモリ内の４つのメモリ場所の上書きを含むため、２Ｒは、４である。Ｎが１６にセットされ、従って、一次制御データの制御下で実行できる４個の転送のタスクは、４つあり、このことは、この制御データの制御下で代替データを４回更新できることを意味する。もし一次制御データの更新を代替制御データが制御するのであれば、新しい一次制御データで４個の転送を超えてこれを続けることができることは、明らかである。
【００４５】
図４は、代替的実施の形態を示し、そこには、周辺機器スキャッタ・ギャザ（ｐｅｒｉｐｈｅｒａｌ  ｓｃａｔｔｅｒ  ｇａｔｈｅｒ）が示されている。これは、メモリ・スキャッタ・ギャザに似ているが、転送が一次の制御下で実行され、次に自動的に代替制御データの制御下で実行されるが、自動的に切り替わって再び一次制御データの制御下で別のデータを転送することはなく、むしろ別のデータ転送要求７０が受信されるまで別のデータ転送はない。この時点で、データは、一次制御データの制御下で、次に代替制御データの制御下で転送される。言い換えれば、メモリ・スキャッタ・ギャザの場合のように、一次から代替へ、そして代替から一次へと自動的に切り替わって転送が続くことがない。
【００４６】
すなわち、周辺機器からのデータ転送要求７０がＤＭＡコントローラに受信される。この要求に応答して一次制御データの制御下でデータ転送が実行される。これは、代替制御データの更新を制御する。これが完了すると、トグル・ビットがトグルされて、データ転送の制御は、代替制御データに切り替わる。次にこの更新された代替制御データの制御下でデータ転送が実行される。次にデータ転送が完了する。同じ周辺機器からの、すなわち同じチャネル上の別のデータ転送要求に応答して、一次制御データを再び使用して代替制御データが更新される。
【００４７】
本発明の更に別の実施の形態は、以下のページに、より詳細に提示される。
【００４８】
異なるタイプのデータ転送は、ｃｙｃｌ＿ｃｔｒｌビットによって決まる。ここに述べた実施の形態で、次の表は、異なる可能なｃｙｃｌ＿ｃｔｒｌビットを示す。
【００４９】
【表１】
2008204456.tif 000003
【００５０】
すべてのタイプのサイクルに対して、コントローラは、２Ｒ個のＤＭＡ転送に続いてアービトレートする。もし優先度の低いチャネルに大きい２Ｒの値をセットすれば、優先度の低いＤＭＡ転送が完了するまで、これは、すべての他のチャネルがＤＭＡ転送を実行することを阻止する。従って、Ｒのべき乗を設定する場合、優先度の高いチャネルの待ち時間を大幅に増やすことのないように気を配る必要がある。
【００５１】
次のセクションでは、サイクル・タイプについて説明する。
・無効
・ベーシック
・自動要求  段落００５４、００５５
・ピンポン  段落００５６
・メモリ・スキャッタ−ギャザ  段落００７３
・周辺機器スキャッタ−ギャザ  段落００８６
【００５２】
無効
コントローラがＤＭＡサイクルを完了したあと、それは、このサイクル・タイプを無効にセットする。これは、コントローラがＤＭＡサイクルを繰り返すことを防止するためである。
【００５３】
ベーシック
このモードで、コントローラは、一次又は代替のいずれかのデータ構造を使用するように構成される。このチャネルがイネーブルされたあと、コントローラが要求を受信し、そのあとの、このＤＭＡサイクルに対するフローは、次のようになる。
１．コントローラは、２Ｒ個の転送を実行する。もし残りの転送数がゼロであれば、フローは、工程３に続く。
２．コントローラがアービトレートする。
・もし優先度の高いチャネルがサービス要求すれば、コントローラは、そのチャネルにサービス提供する。
・もし周辺機器又はソフトウエアがコントローラに要求を発行すれば、これは、工程１に続く。
３．コントローラは、１つのｈｃｌｋサイクルに対してｄｍａ＿ｄｏｎｅ［Ｃ］をＨＩＧＨにセットする。これは、このＤＭＡサイクルが完了したことをホスト・プロセッサに示す。
【００５４】
自動要求
コントローラがこのモードで動作するとき、これに要求されることは、単一の要求を受信して、このＤＭＡサイクル全体を完了させることである。
【００５５】
コントローラは、一次又は代替のいずれかのデータ構造を使用するように構成できる。チャネルがイネーブルされたあと、そしてこのチャネルに対する要求をコントローラが受信したあとの、このＤＭＡサイクルに関するフローは、次のようになる。
１．コントローラは、チャネルＣ＜ｘ＞に関する２Ｒ個の転送を実行する。もし残りの転送数がゼロであれば、フローは、工程３に続く。
２．コントローラは、アービトレートする。チャネルＣ＜ｘ＞が最も高い優先度を有する場合、ＤＭＡサイクルは、工程１に続く。
３．コントローラは、１つのｈｃｌｋサイクルに対してｄｍａ＿ｄｏｎｅ［Ｃ］をＨＩＧＨにセットする。これは、このＤＭＡサイクルが完了したことをホスト・プロセッサに示す。
【００５６】
ピンポン
ピンポン・モードで、コントローラは、チャネル・データ構造の１つを使用してＤＭＡサイクルを実行し、次に他方のチャネル・データ構造を使用してＤＡＭサイクルを実行する。コントローラは、それが無効なチャネル制御データ構造を読むまで、あるいは、ホスト・プロセッサがこのチャネルをディセーブルするまで、一次から代替へ、更に一次へと切り替えを続ける。
【００５７】
図５は、ピンポンＤＭＡトランザクションの一例を示す。
【００５８】
図５で
タスクＡ
１．ホスト・プロセッサは、一次チャネル・データ構造をタスクＡ用に構成する。
２．ホスト・プロセッサは、代替チャネル・データ構造をタスクＢ用に構成する。これは、より高い優先度のチャネルがサービス要求しないかぎり、タスクＡが完了したあとコントローラがタスクＢに直ちに切り替えることをイネーブルする。
３．コントローラは、要求を受信して、４個のＤＭＡ転送を実行する。
４．コントローラは、アービトレートする。コントローラがこのチャネルに対する要求を受信したあと、もしチャネルが最も高い優先度を有していれば、フローが続く。
５．コントローラは、残る２個のＤＭＡ転送を実行する。
６．コントローラは、１つのｈｃｌｋサイクルに対してｄｍａ＿ｄｏｎｅ［Ｃ］をＨＩＧＨにセットし、アービトレート・プロセスに入る。
【００５９】
タスクＡが完了したあと、ホスト・プロセッサは、一次チャネル・データ構造をタスクＣ用に構成できる。これは、より高い優先度のチャネルがサービス要求しないかぎり、タスクＢが完了したあとコントローラがタスクＣに直ちに切り替えることをイネーブルする。
【００６０】
コントローラがこのチャネルに対する新しい要求を受信したあと、これが最も高い優先度を有していれば、タスクＢが開始される。
【００６１】
タスクＢ
７．コントローラは、４個のＤＭＡ転送を実行する。
８．コントローラは、アービトレートする。コントローラがこのチャネルに対する要求を受信したあと、もしチャネルが最も高い優先度を有していれば、フローが続く。
９．コントローラは、４個のＤＭＡ転送を実行する。
１０．コントローラは、アービトレートする。コントローラがこのチャネルに対する要求を受信したあと、もしチャネルが最も高い優先度を有していれば、フローが続く。
１１．コントローラは、残る４個のＤＭＡ転送を実行する。
１２．コントローラは、１つのｈｃｌｋサイクルに対してｄｍａ＿ｄｏｎｅ［Ｃ］をＨＩＧＨにセットし、アービトレート・プロセスに入る。
【００６２】
タスクＢが完了したあと、ホスト・プロセッサは、代替チャネル・データ構造をタスクＤ用に構成できる。
【００６３】
コントローラがこのチャネルに対する新しい要求を受信したあと、これが最も高い優先度を有していれば、タスクＣが開始される。
【００６４】
タスクＣ
１３．コントローラは、２個のＤＭＡ転送を実行する。
１４．コントローラは、１つのｈｃｌｋサイクルに対してｄｍａ＿ｄｏｎｅ［Ｃ］をＨＩＧＨにセットし、アービトレート・プロセスに入る。
【００６５】
タスクＣが完了したあと、ホスト・プロセッサは、一次チャネル・データ構造をタスクＥ用に構成できる。
【００６６】
コントローラがこのチャネルに対する新しい要求を受信したあと、これが最も高い優先度を有していれば、タスクＤが開始される。
【００６７】
タスクＤ
１５．コントローラは、４個のＤＭＡ転送を実行する。
１６．コントローラは、アービトレートする。コントローラがこのチャネルに対する要求を受信したあと、もしチャネルが最も高い優先度を有していれば、フローが続く。
１７．コントローラは、残るＤＭＡ転送を実行する。
１８．コントローラは、１つのｈｃｌｋサイクルに対してｄｍａ＿ｄｏｎｅ［Ｃ］をＨＩＧＨにセットし、アービトレート・プロセスに入る。
【００６８】
コントローラがこのチャネルに対する新しい要求を受信したあと、これが最も高い優先度を有していれば、タスクＥが開始される。
【００６９】
タスクＥ
１９．コントローラは、４個のＤＭＡ転送を実行する。
２０．コントローラは、アービトレートする。コントローラがこのチャネルに対する要求を受信したあと、もしチャネルが最も高い優先度を有していれば、フローが続く。
２１．コントローラは、残る３個のＤＭＡ転送を実行する。
２２．コントローラは、１つのｈｃｌｋサイクルに対してｄｍａ＿ｄｏｎｅ［Ｃ］をＨＩＧＨにセットし、アービトレート・プロセスに入る。
【００７０】
コントローラがこのチャネルに対する新しい要求を受信して、これが最も高い優先度を有していれば、次のタスクを開始しようとする。しかし、ホスト・プロセッサが代替チャネル・データ構造を構成していないため、タスクＤの完了とともに、コントローラは、ｃｙｃｌｅ＿ｃｔｒｌビットをｂ０００にセットし、ピンポンＤＭＡトランザクションが完了する。
【００７１】
メモリ・スキャッタ−ギャザ
メモリ・スキャッタ−ギャザ・モードで、コントローラは、イニシャル要求を受信し、そのあと一次チャネル・データ構造を使用して４個のＤＭＡ転送を実行する。この転送が完了したあと、それは、代替チャネル制御データ構造を使用してＤＭＡサイクルをスタートさせる。このサイクルが完了したあと、コントローラは、一次データ構造を使用して別の４個のＤＭＡ転送を実行する。コントローラは、次のいずれかが成立するまで一次から代替へ、更に一次へと切り替えを続ける。
・それが無効なチャネル制御データ構造を読む。
・ホスト・プロセッサが代替データ構造をベーシック・サイクル用に構成する。
【００７２】
ベーシック・サイクルを使用したスキャッタ−ギャザ・トランザクションが完了すると、コントローラは、ｄｍａ＿ｄｏｎｅをアサートする。
【００７３】
スキャッタ−ギャザ・モードで、コントローラは、一次チャネル・データ構造を使用して代替チャネル制御データ構造をプログラムする。従って、常に表２にリスト・アップされた値で一次チャネル・データ構造のフィールドをプログラムする必要がある。
【００７４】
【表２】
2008204456.tif 000004
【００７５】
図６は、メモリ・スキャッタ−ギャザの一例を示す
【００７６】
図６で
初期化
１．ホスト・プロセッサは、ｃｙｃｌｅ＿ｃｔｒｌをｂ１００にセットすることによって、一次チャネル・データ構造をメモリ・スキャッタ−ギャザ・モードで動作するように構成する。チャネル・データ構造が４ワードを含むので、２Ｒは、常に４にセットされる。この例で、４つのタスクがあり、従ってＮは、１６にセットされる。
２．ホスト・プロセッサは、タスクＡ、Ｂ、ＣおよびＤに関するチャネル・データ構造を保持するメモリ場所に情報を書き込む。
３．ホスト・プロセッサは、このチャネルをイネーブルする。
【００７７】
コントローラがｄｍａ＿ｒｅｑ［］に対する要求を受信するか、あるいは、ホスト・プロセッサから手動要求を受信すると、メモリ・スキャッタ−ギャザ・トランザクションが開始される。トランザクションは、次のように続く。
【００７８】
一次、コピーＡ
１．要求を受信したあと、コントローラは、４個のＤＭＡ転送を実行する。これらの転送は、タスクＡ用の代替チャネル・データ構造を書き込む。
２．コントローラは、このチャネルに対する自動要求を生成し、次にアービトレートする。
【００７９】
タスクＡ
３．コントローラは、タスクＡを実行する。このタスクを完了したあと、それは、このチャネル用の自動要求を生成し、次にアービトレートする。
【００８０】
一次、コピーＢ
４．コントローラは、４個のＤＭＡ転送を実行する。これらの転送は、タスクＢ用の代替チャネル・データ構造を書き込む。
５．コントローラは、このチャネルに対する自動要求を生成し、次にアービトレートする。
【００８１】
タスクＢ
６．コントローラは、タスクＢを実行する。このタスクを完了したあと、それは、このチャネル用の自動要求を生成し、次にアービトレートする。
【００８２】
一次、コピーＣ
７．コントローラは、４個のＤＭＡ転送を実行する。これらの転送は、タスクＣ用の代替チャネル・データ構造を書き込む。
８．コントローラは、このチャネルに対する自動要求を生成し、次にアービトレートする。
【００８３】
タスクＣ
９．コントローラは、タスクＣを実行する。このタスクを完了したあと、それは、このチャネル用の自動要求を生成し、次にアービトレートする。
【００８４】
一次、コピーＤ
１０．コントローラは、４個のＤＭＡ転送を実行する。これらの転送は、タスクＤ用の代替チャネル・データ構造を書き込む。
１１．コントローラは、一次チャネル制御データ構造のｃｙｃｌｅ＿ｃｔｒｌビットをｂ０００にセットして、このデータ構造が今や無効であることを示す。
１２．コントローラは、このチャネルに対する自動要求を生成し、次にアービトレートする。
【００８５】
タスクＤ
１３．コントローラは、ベーシック・サイクルを使用してタスクＤを実行する。
１４．コントローラは、１つのｈｃｌｋサイクルに対してｄｍａ＿ｄｏｎｅ［Ｃ］をＨＩＧＨにセットして、アービトレート・プロセスに入る。
【００８６】
周辺機器スキャッタ−ギャザ
周辺機器スキャッタ−ギャザ・モードで、コントローラは、イニシャル要求を受信し、次に一次チャネル・データ構造を使用して４個のＤＭＡ転送を実行する。このサイクルが完了して、別の要求が受信されると、それは、代替チャネル制御データ構造を使用してＤＭＡサイクルをスタートさせる。このサイクルが完了したあと、コントローラは、一次データ構造を使用して別の４個のＤＭＡ転送を実行する。コントローラは、次のいずれかが成立するまで一次から代替へ、更に一次へと切り替えを続ける。
・それが無効なチャネル制御データ構造を読む。
・ホスト・プロセッサが代替データ構造をベーシック・サイクル用に構成する。
【００８７】
ベーシック・サイクルを使用したスキャッタ−ギャザ・トランザクションが完了すると、コントローラは、ｄｍａ＿ｄｏｎｅをアサートする。
【００８８】
スキャッタ−ギャザ・モードで、コントローラは、一次チャネル・データ構造を使用して代替チャネル制御データ構造をプログラムする。従って、常に表２−１０にリスト・アップされた値で一次チャネル・データ構造のフィールドをプログラムする必要がある。
より詳しくは、段落０１２７の制御データ構成を参照
【００８９】
図７は、周辺機器スキャッタ−ギャザの一例を示す。
【００９０】
図７で
初期化
１．ホスト・プロセッサは、ｃｙｃｌｅ＿ｃｔｒｌをｂ１１０にセットすることによって、一次チャネル・データ構造を周辺機器スキャッタ−ギャザ・モードで動作するように構成する。１つのチャネル・データ構造が４ワードを含むので、２Ｒは、常に４にセットされる。この例で、４つのタスクがあり、従ってＮは、１６にセットされる。
２．ホスト・プロセッサは、タスクＡ、Ｂ、ＣおよびＤに関するチャネル・データ構造を保持するメモリ場所に情報を書き込む。
３．ホスト・プロセッサは、チャネルをイネーブルする。
【００９１】
コントローラがｄｍａ＿ｒｅｑ［］に対する要求を受信するか、あるいは、ホスト・プロセッサから手動要求を受信すると、周辺機器スキャッタ−ギャザ・トランザクションが開始される。トランザクションは、次のように続く。
【００９２】
一次、コピーＡ
１．要求を受信したあと、コントローラは、４個のＤＭＡ転送を実行する。これらの転送は、タスクＡ用の代替チャネル・データ構造を書き込む。
２．コントローラは、アービトレート・プロセスに入る。
【００９３】
周辺機器が新しい要求を発行したあと、それが最も高い優先度を有していれば、プロセスは、次のように続く。
【００９４】
タスクＡ
３．コントローラは、タスクＡを実行する。このタスクを完了したあと、それは、このチャネル用の自動要求を生成し、次にアービトレートする。
【００９５】
一次、コピーＢ
４．コントローラは、４個のＤＭＡ転送を実行する。これらの転送は、タスクＢ用の代替チャネル・データ構造を書き込む。
５．コントローラは、アービトレート・プロセスに入る。
【００９６】
周辺機器が新しい要求を発行したあと、それが最も高い優先度を有していれば、プロセスは、次のように続く。
【００９７】
タスクＢ
６．コントローラは、タスクＢを実行する。タスクを完了させるために、周辺機器は、別の３つの要求を発行しなければならない。このタスクが完了したあと、それは、このチャネル用の自動要求を生成し、次にアービトレートする。
【００９８】
一次、コピーＣ
７．コントローラは、４個のＤＭＡ転送を実行する。これらの転送は、タスクＣ用の代替チャネル・データ構造を書き込む。
８．コントローラは、アービトレート・プロセスに入る。
【００９９】
周辺機器が新しい要求を発行したあと、それが最も高い優先度を有していれば、プロセスは、次のように続く。
【０１００】
タスクＣ
９．コントローラは、タスクＣを実行する。このタスクが完了したあと、それは、このチャネル用の自動要求を生成し、次にアービトレートする。
【０１０１】
一次、コピーＤ
１０．コントローラは、４個のＤＭＡ転送を実行する。これらの転送は、タスクＤ用の代替チャネル・データ構造を書き込む。
１１．コントローラは、一次チャネル制御データ構造のｃｙｃｌｅ＿ｃｔｒｌビットをｂ０００にセットして、このデータ構造が今や無効であることを示す。
１２．コントローラは、アービトレート・プロセスに入る。
【０１０２】
周辺機器が新しい要求を発行したあと、それが最も高い優先度を有していれば、プロセスは、次のように続く。
【０１０３】
タスクＤ
１３．コントローラは、ベーシック・サイクルを使用してタスクＤを実行する。
１４．コントローラは、１つのｈｃｌｋサイクルに対してｄｍａ＿ｄｏｎｅ［Ｃ］をＨＩＧＨにセットして、アービトレート・プロセスに入る。
【０１０４】
エラー通知
もしコントローラがＡＨＢ−Ｌｉｔｅマスタ・インタフェース上でＥＲＲＯＲ応答を検出すると、それは、
・ＥＲＲＯＲに対応するチャネルをディセーブルする
・ｄｍａ＿ｅｒｒをＨＩＧＨにセットする
【０１０５】
ｄｍａ＿ｅｒｒがＨＩＧＨであることをホスト・プロセッサが検出したあと、それは、ＥＲＲＯＲが発生したときにどのチャネルがアクティブであったかをチェックしなければならない。それは、次によってこのことを行うことができる。
１．ｃｈｎｌ＿ｅｎａｂｌｅ＿ｓｅｔレジスタを読んで、ディセーブルされたチャネルのリストを生成する。
【０１０６】
チャネルがｄｍａ＿ｄｏｎｅ［］をアサートすると、コントローラは、そのチャネルをディセーブルする。ホスト・プロセッサ上で走っているプログラムは、最新のｄｍａ＿ｄｏｎｅ［］出力をアサートしたチャネルがどれであるかを常に記録に残しておかなければならない。
【０１０７】
２．これは、工程１でディセーブルされたチャネルのリストを、最近ｄｍａ＿ｄｏｎｅ出力をセットしたチャネルの記録と比較しなければならない。ｄｍａ＿ｄｏｎｅがセットされた記録を持たないチャネルは、ＥＲＲＯＲが発生したチャネルである。
【０１０８】
必要とされるシステム・メモリの量は、次に依存する。
・コントローラが使用するように構成されるＤＭＡチャネルの数
・１つのＤＭＡチャネルが代替チャネル制御データを使用するように構成されたかどうか
【０１０９】
表３は、コントローラがチャネル制御データ構造の要素にアクセスするときにそれが使用するアドレス・ビットを、コントローラが含むチャネル数に依存して、リスト・アップする。
【０１１０】
【表３】
2008204456.tif 000005
【０１１１】
2008204456.tif 000006
【０１１２】
２．２．４  チャネル制御データ構造
チャネル制御データ構造を含めるためのシステム・メモリの領域を設けなければならない。このシステム・メモリは、次のようになっていなければならない。
・コントローラおよびホスト・プロセッサがアクセスできるように、システム・メモリの連続した領域を設けなければならない。
・チャネル制御データ構造の合計サイズの倍数となる整数値を取るベース・アドレスを有する。
【０１１３】
図８は、コントローラが３２個のチャネルすべてとオプションの代替チャネルを使用するとき、それがチャネル制御データ構造用に必要とするメモリを示す。
【０１１４】
図８の構造例は、１ＫＢのシステム・メモリを使用する。この例で、コントローラは、それが構造中の要素すべてにアクセスすることをイネーブルするために下位の１０個のアドレス・ビットを使用するため、ベース・アドレスは、０ｘ×××××０００、０ｘ×××××４００、０ｘ×××××８００又は０ｘ×××××Ｃ００でなければならない。
【０１１５】
チャネル制御データ構造用のベース・アドレスは、ｃｔｒｌ  ｂａｓｅ＿ｐｔｒレジスタに適当な値を書き込むことで構成できる。
注記
ａｌｔ＿ｃｔｒｌ＿ｂａｓｅ＿ｐｔｒレジスタが代替チャネル制御データのベース・アドレスを提供するので、これを計算する必要はない。
【０１１６】
図９は、コントローラが３個のＤＭＡチャネルと代替チャネル制御データ構造とを使用する実施例を示す。
【０１１７】
図９の構造例は、１２８バイトのシステム・メモリを使用する。この例で、コントローラは、それが構造中の要素すべてにアクセスするのをイネーブルするために下位６個のアドレス・ビットを使用しており、従ってベース・アドレスは、０ｘ××××××００又０ｘ××××××８０でなければならない。
【０１１８】
表４は、チャネル制御データ構造にアサイン（ａｓｓｉｇｎ）できる許可されたベース・アドレス値を、コントローラが含むチャネル数に依存して示す。
【０１１９】
【表４】
2008204456.tif 000007
【０１２０】
コントローラは、システム・メモリを使用して、それが２つのポインタと、それが各チャネルについて必要とする制御情報とにアクセスすることをイネーブルする。次のサブセクションで、これらの３２ビットのメモリ場所と、コントローラがＤＭＡ転送アドレスをどのように計算するかについて説明する。
・発信元データ・エンド・ポインタ
・宛先データ・エンド・ポインタ  段落０１２４
・制御データ構成  段落０１２７
・アドレス計算  段落０１４１
【０１２１】
発信元データ・エンド・ポインタ
ｓｒｃ＿ｄａｔａ＿ｅｎｄ＿ｐｔｒメモリ場所は、発信元データのエンド・アドレスへのポインタを含む。表５は、このメモリ場所に対するビット・アサインメントをリスト・アップする。
【０１２２】
【表５】
2008204456.tif 000008
【０１２３】
コントローラがＤＭＡ転送を実行できる前に、このメモリ場所を発信元データのエンド・アドレスでプログラムしなければならない。コントローラは、それが２Ｒ個のＤＭＡ転送をスタートさせるときに、このメモリ場所を読み出す。
注記
コントローラは、このメモリ場所に書込みしない。
【０１２４】
宛先データ・エンド・ポインタ
ｄｓｔ＿ｄａｔａ＿ｅｎｄ＿ｐｔｒメモリ場所は、宛先データのエンド・アドレスへのポインタを含む。表６は、このメモリ場所に対するビット・アサインメントをリスト・アップする。
【０１２５】
【表６】
2008204456.tif 000009
【０１２６】
コントローラがＤＭＡ転送を実行できる前に、このメモリ場所を宛先データのエンド・アドレスでプログラムしなければならない。コントローラは、それが２Ｒ個のＤＭＡ転送をスタートさせるときに、このメモリ場所を読み出す。
注記
コントローラは、このメモリ場所に書込みしない。
【０１２７】
制御データ構成
各ＤＭＡ転送に対して、ｃｈａｎｎｅｌ＿ｃｆｇメモリ場所は、コントローラのための制御情報を提供する。図１０は、このメモリ場所に対するビット・アサインメントを示す。
【０１２８】
表７は、このメモリ場所に対するビット・アサインメントをリスト・アップする。
【０１２９】
【表７】
2008204456.tif 000010
【０１３０】
2008204456.tif 000011
【０１３１】
【表８】
2008204456.tif 000012
【０１３２】
2008204456.tif 000013
【０１３３】
2008204456.tif 000014
【０１３４】
2008204456.tif 000015
【０１３５】
2008204456.tif 000016
【０１３６】
2008204456.tif 000017
【０１３７】
2008204456.tif 000018
【０１３８】
１個のＤＭＡサイクル又は２Ｒ個のＤＭＡ転送の開始時点で、コントローラは、システム・メモリからｃｈａｎｎｅｌ＿ｃｆｇをフェッチする。それが２Ｒ個又はＮ個の転送を実行したあと、それは、更新されたｃｈａｎｎｅｌ＿ｃｆｇをシステム・メモリに記憶させる。
【０１３９】
コントローラは、ｓｒｃ＿ｓｉｚｅ値と異なるｄｓｔ＿ｓｉｚｅ値をサポートしない。もしこれらの値の間に不一致が検出されると、それは、ｓｒｃ＿ｓｉｚｅ値を発信元および宛先のために使用し、それが次にｎ＿ｍｉｎｕｓ＿１フィールドを更新するときに、それは、ｄｓｔ＿ｓｉｚｅフィールドをｓｒｃ＿ｓｉｚｅフィールドと同じ値にセットする。
【０１４０】
コントローラがＮ個の転送を完了したあと、それは、ｃｙｃｌｅ＿ｃｔｒｌフィールドをゼロにセットし、ｃｈａｎｎｅｌ＿ｃｆｇデータが無効であることを示す。これは、同じＤＭＡ転送をコントローラが繰り返すことを防止する。
【０１４１】
アドレス計算
ＤＭＡ転送の発信元アドレスを計算するために、コントローラは、ｓｒｃ＿ｉｎｃが指定するシフト量だけの左シフトをｎ＿ｍｉｎｕｓ＿１値に対して実行し、次に結果の値を発信元エンド・ポインタから差し引く。同様に、ＤＭＡ転送の宛先アドレスを計算するために、それは、ｄｓｔ＿ｉｎｃが指定するシフト量だけの左シフトをｎ＿ｍｉｎｕｓ＿１値に対して実行し、次に結果の値を宛先エンド・ポインタから差し引く。
【０１４２】
ｓｒｃ＿ｉｎｃおよびｄｓｔ＿ｉｎｃの値に依存して、発信元アドレスおよび宛先アドレスは、次式を用いて計算できる。
【０１４３】
ｓｒｃ＿ｉｎｃ＝ｂ００およびｄｓｔ＿ｉｎｃ＝ｂ００
＊  発信元アドレス＝ｓｒｃ＿ｄａｔａ＿ｅｎｄ＿ｐｔｒ−ｎ＿ｍｉｎｕｓ＿１
＊  宛先アドレス＝ｄｓｔ＿ｄａｔａ＿ｅｎｄ＿ｐｔｒ−ｎ＿ｍｉｎｕｓ＿１
【０１４４】
ｓｒｃ＿ｉｎｃ＝ｂ０１およびｄｓｔ＿ｉｎｃ＝ｂ０１
＊  発信元アドレス＝ｓｒｃ＿ｄａｔａ＿ｅｎｄ＿ｐｔｒ−（ｎ＿ｍｉｎｕｓ＿１＜＜１）
＊  宛先アドレス＝ｄｓｔ＿ｄａｔａ＿ｅｎｄ＿ｐｔｒ−（ｎ＿ｍｉｎｕｓ＿１＜＜１）
【０１４５】
ｓｒｃ＿ｉｎｃ＝ｂ１０およびｄｓｔ＿ｉｎｃ＝ｂ１０
＊  発信元アドレス＝ｓｒｃ＿ｄａｔａ＿ｅｎｄ＿ｐｔｒ−（ｎ＿ｍｉｎｕｓ＿１＜＜２）
＊  宛先アドレス＝ｄｓｔ＿ｄａｔａ＿ｅｎｄ＿ｐｔｒ−（ｎ＿ｍｉｎｕｓ＿１＜＜２）
【０１４６】
ｓｒｃ＿ｉｎｃ＝ｂ１１およびｄｓｔ＿ｉｎｃ＝ｂ１１
＊  発信元アドレス＝ｓｒｃ＿ｄａｔａ＿ｅｎｄ＿ｐｔｒ
＊  宛先アドレス＝ｄｓｔ＿ｄａｔａ＿ｅｎｄ＿ｐｔｒ
【０１４７】
表９は、６ワードのＤＭＡサイクルに関する宛先アドレスをリスト・アップする。
【０１４８】
【表９】
2008204456.tif 000019
【０１４９】
2008204456.tif 000020
【０１５０】
表１０は、ハーフ・ワード増分を用いた１２バイトのＤＭＡ転送に関する宛先アドレスをリスト・アップする。
【０１５１】
【表１０】
2008204456.tif 000021
【０１５２】
2008204456.tif 000022
【０１５３】
2008204456.tif 000023
【０１５４】
本発明の例示的実施の形態について添付図面を参照しながらここに詳細に説明してきたが、本発明がこれらの実施の形態に正確には限定されないこと、また添付された請求の範囲に定義された発明の範囲および精神から外れることなしに、各種の変更および修正を当業者が実施できることを理解されるべきである。
【図面の簡単な説明】
【０１５５】
【図１ａ】本発明の１つの実施の形態に従うデータ処理装置を示すブロック図。
【図１ｂ】図１ａのメモリに記憶された制御データを示す模式図。
【図２】本発明の１つの実施の形態に従うダイレクト・メモリ・アクセス・コントローラによって制御されるデータ転送のピンポン・モードを示す模式図。
【図３】本発明の１つの実施の形態に従うダイレクト・メモリ・アクセス・コントローラによって制御されるデータ転送のメモリ・スキャッタ・ギャザ・モードを示す模式図。
【図４】本発明の１つの実施の形態に従うダイレクト・メモリ・アクセス・コントローラによって制御されるデータ転送の周辺機器スキャッタ・ギャザ・モードを示す模式図。
【図５】別のピンポン・モードの実施の形態を示す模式図。
【図６】メモリ・スキャッタ・ギャザの実施の形態を示す模式図。
【図７】周辺機器スキャッタ・ギャザの実施の形態を示す模式図。
【図８】３２チャネルに関するメモリ・マップを示す模式図。
【図９】３個のＤＭＡチャネルに関するメモリ・マップを示す模式図。
【図１０】チャネル構成ビット・アサインメントを示す模式図。
【符号の説明】
【０１５６】
５  データ処理装置
１０  ダイレクト・メモリ・アクセス・コントローラ（ＤＭＡコントローラ）
１２  レジスタ
１３  トグル・ビット
１４，１６  チャネル
２０  周辺機器
３０  メモリ
３１  記憶場所
３２  制御データ
４０  プロセッサ
５０  データ転送要求
６０  ソフトウエア要求
７０  データ転送要求
【図１ａ】
2008204456.tif 000024
【図１ｂ】
2008204456.tif 000025
【図２】
2008204456.tif 000026
【図３】
2008204456.tif 000027
【図４】
2008204456.tif 000028
【図５】
2008204456.tif 000029
【図６】
2008204456.tif 000030
【図７】
2008204456.tif 000031
【図８】
2008204456.tif 000032
【図９】
2008204456.tif 000033
【図１０】
2008204456.tif 000034
【外国語明細書】
2008204456000001.pdf