(57)【特許請求の範囲】
【請求項１】
それぞれが、転送情報の転送単位区分を示す、一転送単位の転送元アドレス情報および転送バイト数情報を含む、１以上のディスクリプタ；および、これらのディスクリプタから順次に転送元アドレス情報および転送バイト数情報を読出してこれらの情報に従って転送情報をメモリから読出す転送制御手段；を備えるＤＭＡ装置において、
各ディスクリプタは割込み発生タイミング情報を含み、前記転送制御手段は、１つのディスクリプタの情報に基づいた一単位の転送の完了毎に該ディスクリプタが保持した割込み発生タイミング情報が指定するタイミングで割込み信号を発生し、該割込み信号に応答して発生する転送指示に応じて次のディスクリプタに基づく転送を開始する、ことを特徴とするＤＭＡ装置。
【請求項２】
各ディスクリプタは、それに宛てられた一単位の転送の制御には無関係な、ディスクリプタ管理用のデータを含む、請求項１に記載のＤＭＡ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ダイレクト・メモリ・アクセス（ＤＭＡ）装置に関する。
【０００２】
【従来の技術】
特開平７−２１１１７号公報には、ＤＭＡの１バスサイクル転送，２バスサイクル転送，バースト転送およびサイクルスチール転送が説明され、バースト転送には単転送モード，繰返し転送モード，アレイチェーン転送モードおよびリンクアレイ転送モードの４モードがあることが説明されている。
【０００３】
従来のディスクリプタ方式のコントローラ（ＤＭＡＣ）は、転送開始タイミングをカウンタのアンダーフローを使って制御することはできたが転送終了のタイミングを遅らせることはできなかった。また、ディスクリプタによって指定される転送対象のブロックを連続で転送することができても、ブロック転送完了で一旦停止し、再起動することはできなかった。
【０００４】
【発明が解決しようとする課題】
ディスクリプタを使った転送ではディスクリプタのチェーンが終了し、すべてのブロックが転送完了した場合にのみ、完了割り込みが発生していた。しかし、プリンタの描画処理のようにブロック毎の処理とブロック毎の転送を同時に行う場合、現在、転送されているブロックが何番目のディスクリプタに設定されているブロックなのかをプログラムが知ることができなかった。周期的なブロック転送を異なるブロックに対して行うとき、転送先デバイスの処理が完了してから、次のブロックを送る必要がある。
【０００５】
本発明は、現在、転送されているブロックが何番目のディスクリプタに設定されているブロックなのかを認識するための処理を容易にすることを第１の目的とし、１つ目のブロック転送完了と次のブロック転送の開始までの時間を設定できるようにすることを第２の目的とし、ディスクリプタの生成，設定，保存をプログラムにおいて管理しやすくすることを第３の目的とする。
【０００６】
【課題を解決するための手段】
（１）それぞれが、転送情報の転送単位区分(ブロック)を示す、一転送単位（１ブロック）の転送元アドレス情報(612/622)および転送バイト数情報(613/623)を含む、１以上のディスクリプタ(610/620)；および、これらのディスクリプタから順次に転送元アドレス情報および転送バイト数情報を読出してこれらの情報に従って転送情報をメモリ(630/640)から読出す転送制御手段(400)；を備えるＤＭＡ装置において、
各ディスクリプタは割込み発生タイミング情報(モードワード614のタイマ変数)を含み、前記転送制御手段(400)は、１つのディスクリプタの情報に基づいた一単位の転送の完了毎に該ディスクリプタが保持した割込み発生タイミング情報が指定するタイミングで割込み信号(継続割込み)を発生し、該割込み信号に応答して発生する転送指示に応じて次のディスクリプタに基づく転送を開始する、ことを特徴とするＤＭＡ装置。なお、理解を容易にするためにカッコ内には、図面に示し後述する実施例の対応要素の符号又は対応事項を、参考までに付記した。以下も同様である。
【０００７】
これによれば、ディスクリプタ毎に割込み信号を発生するので、この信号に応答して、実行したディスクリプタの数をカウントアップして、何番目のディスクリプタに設定されているブロックの転送なのかを認識することが可能になる。また、割込み信号に応答して次のブロックの転送を開始するか一時的に保留するかのチェックを行なって開始可のときに転送を開始するなど、順次転送を抑制することも可能になる。割り込みのタイミングや継続のタイミングをディスクリプタ毎に設定することができる。
【０００８】
【発明の実施の形態】
（２）各ディスクリプタは、それに宛てられた一単位の転送の制御には無関係な、ディスクリプタ管理用のデータ（モードワード614の「未使用」）を含む。ディスクリプタ毎にディスクリプタ管理用のデータを用意することで、ソフトウェアによるディスクリプタの管理を容易に行なうことができる。
（３）各ディスクリプタが、割込み信号の発生を指定するデータ(モードワード614のCONT)を含み、転送制御手段(400)は、各ディスクリプタから情報を読込むときに該指定データをコントロールレジスタ(402)に書込んで、情報を読込んだディスクリプタの情報に基づいた一単位の転送の終了時に、該指定データに基づいて割込み信号を発生する。
（４）ディスクリプタ毎に割り込みを発生させることができるＤＭＡコントローラ。
（５）ディスプリクタ毎に割り込み発生タイミングと再起動のタイミングを遅らせることができるＤＭＡコントローラ。
（６）ディスクリプタ内に動作に無関係なデータ(モードワード614の「未使用」)を設けたことを特徴とするＤＭＡコントローラ。
【０００９】
本発明の他の目的および特徴は、図面を参照した以下の実施例の説明より明らかになろう。
【００１０】
【実施例】
図１に本発明の一実施例の構成を示す。ＣＰＵ１００はマイクロプロセッサである。ＲＯＭ２００はＣＰＵ１００が実行するプログラムを格納するリードオンリーメモリである。メモリコントローラ３００はＲＡＭ６００の制御信号を発生し、ＣＰＵ１００やＤＭＡコントローラ４００の要求に応じてＲＡＭ６００に対してリードやライトを行う回路である。ＤＭＡコントローラ４００が、本発明の一実施例のＤＭＡ装置の主要部である。Ｉ／Ｏデバイス５００はたとえばハードディスクのようなデータ転送の対象となるデバイスである。ＲＡＭ６００はリードライト可能なランダムアクセスメモリである。
【００１１】
ＤＭＡを行う前に、ＣＰＵ１００がＲＡＭ６００にディスクリプタを用意する。図２に、ＲＡＭ６００上に２つのディスクリプタ６１０，６２０を生成した態様を示し、図３の（ａ）に、１つのディスクリプタ６１０の構造を示す。図２に示すようにディスクリプタを２つ生成したとすると、第１のディスクリプタ６１０のネクストディスクリプタポインタレジスタ６１１（メモリの１領域：１つのレジスタ）には、第２のディスクリプタ６２０の先頭アドレスが格納されている。
【００１２】
第２のディスクリプタ６２０の転送元アドレスレジスタ６１２のデータは、バッファメモリ６３０の先頭のアドレスを示す。バッファメモリ６３０には転送すべきデータが格納されている。第１のディスクリプタ６１０の転送バイト数レジスタ６１３には、バッファメモリ６３０に格納されたデータのうち、転送すべきバイト数が格納されている。
【００１３】
第１のディスクリプタ６１０のモードワードレジスタ６１４の、最下位ビットすなわちビットＮｏ．０には、この第１のディスクリプタ６１０で示される転送が終了したら、割り込みを発生するかどうかをきめるフラグデータCONTが存在し、これが「１」のとき、ＤＭＡコントローラ４００が割り込み信号を発生する。
【００１４】
同様に、第２のディスクリプタ６２０に示されるネクストディスクリプタポインタレジスタ６２１には、もし、あれば第３のディスクリプタの先頭アドレスが格納されるが、図示例では、第２のディスクリプタ６２０は最後のディスクリプタなので、終了であることをＤＭＡコントローラ４００に教えるために、「０」が格納される。第２のディスクリプタ６２０の転送元アドレスレジスタ６２２はバッファメモリ６４０の先頭アドレスを示し、バッファメモリ６４０には転送すべきデータが格納されている。第２のディスクリプタ６２０の転送バイト数レジスタ６２３にはバッファメモリ６４０に格納されたデータのうち、転送すべきバイト数が格納されている。第２のディスクリプタ６２０のモードワードレジスタ６２４には、何も設定されていない。
【００１５】
従来のディスクリプタ方式のＤＭＡでは、最終ディスクリプタで示されるブロックを転送完了すると割り込みを発生していた。本実施例では、図３に示すように、最終ディスクリプタの前のディスクリプタ６１０内に割り込みイネーブルビット「ＣＯＮＴ」を設けることで、ディスクリプタ単位で割り込みを発生させることをできるようにした。ディスクリプタのサイズは何ワードでも、機能に問題はないがここでは４ワードとし、ディスクリプタの先頭アドレスからの増分アドレスをオフセットとして図３の（ａ）に示す。ネクストディスクリプタアドレスレジスタ６１１は、ディスクリプスタ６１０，６２０をチェーン構造にしてリンクしていけるように、次に実行すべきディスクリプスタ６２０のアドレスを格納する。転送元アドレスレジスタ６１２のデータは、このディスクリプタ６１０がバッファメモリ６３０からＩ／Ｏデバイス５００への転送を行うものとして、ＲＡＭメモリ６００上に確保された転送データ（６３０）の先頭アドレスを示す。転送バイト数レジスタ６１３のデータは転送すべき長さ（バイト数）を示す。
【００１６】
モードワードレジスタ６１４は、ディスクリプタ単位での動作モードを設定するためのワードを格納し、詳細は図３の（ｂ）に示す。モードワードレジスタ６１４は、この実施例の場合３２ｂｉｔの長さをもつ。その最下位ビットであるビットＮｏ．０のデータＣＯＮＴは、「０」と「１」の２つの状態を取ることができ、このＢｉｔデータＣＯＮＴは割り込みイネーブルビットとして機能する。割り込みイネーブルビットとは、このビットが「１」に設定されているディスクリプタの示す転送が完了したら、割り込みを発生することを許可することを示す。
【００１７】
図４の（ａ）に、ＤＭＡＣ（ＤＭＡコントローラ）４００の構成を示す。ディスクリプタポインタレジスタ４０１は、ＲＡＭメモリ６００上に格納されたディスクリプタ（６１０／６２０）の先頭アドレスを格納するためのレジスタである。コントロールレジスタ４０２は、ＣＰＵ１００からＤＭＡ動作開始の指示をうけるためのレジスタである。アドレスレジスタ４０３は、ディスクリプタが保持する転送元アドレスを格納するものであり、転送カウンタ４０９は実際の転送バイト数をカウントするカウンタである。転送バイト数レジスタ４１０はディスクリプタで示される転送バイト数を格納するためのレジスタである。
【００１８】
ＤＭＡ転送制御回路４０４は、アドレスレジスタ４０３の転送元アドレスと転送カウンタ４０９のカウント値（転送済バイト数）の和で示されるアドレスのメモリをアクセスし、実際の転送を行う回路である。モードレジスタ４０６はディスクリプタのモードワードレジスタ６１４，６２４のデータを格納するためのレジスタである。ディスクリプタ制御回路４０５は、ディスクリプタ６１０，６２０の読み込みを行う回路である。割込みイネーブル信号ライン４０７を介して、モードレジスタ４０６の割込み指示ビットＣＯＮＴのデータ（「１」又は「０」）をＤＭＡ転送制御回路４０４に与える。これが転送完了時に割り込みを発生させるかどうかを知らせる信号である。ディスクリプタで示される転送が完了したときに、ＤＭＡ転送制御回路４０４（ＤＭＡＣ４００）は、割込み信号ライン４０８を介してＣＰＵ１００に対して割込みを知らせる信号を与える。
【００１９】
ＣＰＵ１００が、ＲＡＭ６００上に転送データおよびディスクリプタを設定し、そしてＤＭＡＣ４００のディスクリプタポィンタレジスタ４０１に第１ディスクリプタの先端アドレスを書込み、コントロールレジスタ４０２の、図４の（ｃ）に示すビットＥＸＥＣに、「１」を書くと、これに応答してＤＭＡＣ４００が転送動作を開始する。
【００２０】
図５に、ＤＭＡＣ４００の転送動作フローを示す。開始７０１は、ＣＰＵ１００がＤＭＡＣ４００のコントロールレジスタ４０２のＥＸＥＣビットに「１」を立てることで始まり、ＤＭＡＣ４００はまずディスクリプタ読み出し７０２に進む。すなわちメモリ上のディスクリプタを読み出しに行く。具体的には、ＤＭＡＣ４００は、ディスクリプタポインタレジスタ４０１のデータが示すアドレス（ディスクリプタ６１０）の内容を４ワード読み出して、最初のワード（ネクストディスクリプタアドレス）を図４の（ａ）に示すネクストディスクリプタポインタレジスタ４１１へ格納し、２番目のワード（転送元アドレス）はアドレスレジスタ４０３へ格納し、３番目のワード（転送バイト数）は転送バイト数レジスタ４１０へ格納し、４番目のワード（モードワード）はモードレジスタ４０６およびコントロールレジスタ４０２へ格納する。その動作波形を図６に示す。
【００２１】
図６を参照すると、ＣＬＫ信号はシステムの動作の基本となるクロック信号を示す。ＴＲＺ＿ＳＴＡＲＴ信号はメモリに対するアクセスが開始されたことを示す。ＡＤＤＲＥＳＳ信号はメモリのアドレスを示す。ＤＡＴＡ信号はメモリが出力するデータ信号を示す。ＲＤＷＲ信号はメモリに対するアクセスが読み出しか書き込みかを示す。ＩＡＤＤＲ信号はＤＭＡＣ４００の内部のレジスタのアドレスを示す。ＩＲＤＷＲ信号はＤＭＡＣ内部のアクセスが読み出しか書き込みかを示す。ＩＤＡＴＡ信号はＤＭＡＣ内部のデータを示す。ＩＲＤＡＴＡ信号はＩＡＤＤＲ信号で指定されたＤＭＡＣの内部レジスタの内容を示す信号である。
【００２２】
図６の(1)のＣＬＫ信号立ち上がりでは、ＴＲＺ＿ＳＴＡＲＴ信号がアサートされて、アクセスが開始されたことを示し、同時にＡＤＤＲＥＳＳ信号が有効になり、ＲＤＷＲ信号がハイとなり、読み出しであることを示している。(2)のクロック立ち上がりでは、そのＡＤＤＲＥＳＳ信号を受けて、メモリはデータをＤＡＴＡ信号に出力している。同時にＤＭＡＣは内部の取り込むべきレジスタのアドレスをＩＡＤＤＲ信号に出力し、ＩＲＤＷＲ信号は内部レジスタに対する書き込みであることを示している。そして、メモリのデータ（ＤＡＴＡ）を内部のデータ（ＩＤＡＴＡ）として出力している。(3)のクロック立ち上がりではＤＭＡＣの内部のデータ（ＩＤＡＴＡ）からＩＡＤＤＲ信号で示される内部レジスタに取り込まれ、レジスタの内容がＩＲＤＡＴＡ信号に保持されている。(4)のクロック立ち上がりはなにもないアイドルサイクルを示す。(5)のクロック立ち上がりは次のアクセスの開始を示す。この図では一回のメモリアクセスは４クロックで行われる。以上により第１ディスクリプタ６１０の各レジスタ６１１〜６１４の各データが、ＤＭＡＣ４００の各レジスタ４１１，４０３，４１０，４０６に書込まれる。
【００２３】
次にＤＭＡＣ４００は、各レジスタ４１１，４０３，４１０，４０６のデータが規定するＤＭＡ転送（７０３）を開始し、１つのディスクリプタ（第１ディスクリプタ６１０）で指定されたブロックの転送が完了したかどうかチェックする（７０４）。ブロックの転送が完了していなければ、次の転送のためにアドレスを更新する（７０５）。ブロックの転送が完了するまで、転送（７０３）を繰り返す。ブロックの転送が完了すると、ＤＭＡＣ４００は、ディスクリプタそのもののチェーンが完了した、すなわち全体の転送が完了した、かどうかをチェックする（７０６）。
【００２４】
先に述べたが図示例では、第２のディスクリプタ６２０が最後のディスクリプタなので、終了であることをＤＭＡコントローラ４００に教えるために、「０」がネクストディスクリプタポインタ６２１に書込まれており、今転送を実行したディスクリプタが、仮に最後のディスクリプタ（第２ディスクリプタ６２０）であるとすると、ＤＭＡＣ４００のネクストディスクリプタポインタレジスタ４１１にはデータ「０」が書込まれているので、このデータに基づいて、全体の転送が完了した、と判定する（７０６）。
【００２５】
しかし、今終えた転送が第１ディスクリプタ６１０のデータに基づくものであると、ネクストディスクリプタポインタレジスタ４１１には第１ディスクリプタ６１０のネクストディスクリプタポインタ６１１のデータ（第２ディスクリプタ６２０の先頭アドレス）があるので、ＤＭＡＣ４００は、次のディスクリプタ（６２０）が有効であるので、モードレジスタ４０６に格納している、元はモードワードレジスタ６１４にあったビットＣＯＮＴの「１」をライン４０７経由で読んで、それが「１」であるので、コントロールレジスタ４０２に書込んでいるタイマ変数（元はモードワードレジスタ６１４にあったデータ）を計時タイマに設定して計時を開始し、タイマ変数が表わす時間が経過すると、継続の割込みを発生する（７０７）。すなわち、ＤＭＡＣ４００は、コントロールレジスタ４０２のビットEXECを「０」にクリアして、ＣＰＵ１００への割込要求ライン４０８に割込み信号を与える（７０７）。そして、ＣＰＵ１００がこれに応答してコントロールレジスタ４０２のビットEXECを「１」にするのを待つ。そして、「１」になると、第２ディスクリプタ６２０のデータを読込んでレジスタ各レジスタ４１１，４０３，４１０，４０６，４０２に書込み（７０２）、転送（７０３）を行なう。
【００２６】
第２ディスクリプタ６２０のデータに基づいた転送を完了すると、ネクストディスクリプタポインタレジスタ４１１のデータが「０」になっているので、ＤＭＡＣ４００は、完了割込み信号を発生して（７０８）、全処理を完了する。
【００２７】
継続割込み（７０７）は、ＤＭＡＣ４００のコントロールレジスタのＣＯＮＴビットが「１」（第１ディスクリプタ６１０）のとき、有効となるが「０」（第２ディスクリプタ６２０）のときは、継続割込みは発生しない。最終ディスクリプタ（６２０）中のモードワード（６２４）にもCONTビット相当のビットは存在するが、それは「０」とされ、コントロールレジスタ４０２のCONTビットが「０」になるので、ＤＭＡＣ４００は、継続割込みは発生せず、完了割込み信号を発生する。
【００２８】
上述の実施例では、図３の（ｂ）に示すように、ディスクリプタのモードワードレジスタ６１４内にタイマ変数を用意して、１ブロックの転送完了後タイマ変数で指定した時間待ってから、継続割込みを発生する。このタイマ変数にて、１ブロック転送完了から継続割込み発生までの時間を設定することができる。最終ディスクリプタ（６２０）のモードワードレジスタ（６２４）にもタイマ変数を含めて、最終ブロックの転送完了からその時間分の遅延の後に完了割込み信号を発生するようにすることによって、完了割込みのタイミングも設定可能になる。
【００２９】
図３の（ｂ）に示すように、ディスクリプタのモードワードレジスタ６１４内に、ディスクリプタによる転送制御には無関係の「未使用」ビットを用意し、ＤＭＡＣ４００がこれを使わないようにすることで、ソフトウェアによる該「未使用」ビットへの読み書きが可能であり、ソフトウェアによるディスクリプタの管理に使用することができる。
【図面の簡単な説明】
【図１】  本発明の一実施例のＤＭＡシステムの構成を示すブロック図である。
【図２】  図１に示すＲＡＭ６００上に設定されたディスクリプタを模式的に示す図表である。
【図３】  （ａ）は図２に示す第１ディスクリプタ６１０のワード構成を模式的に示す図表、（ｂ）は（ａ）に示すモードワードレジスタ６１４のデータ構成を示す図表である。
【図４】  （ａ）は図１に示すＤＭＡコントローラ４００の機能構成を示すブロック図、（ｂ）は（ａ）に示すディスクリプタポインタレジスタ４０１の格納データの内容を示す図表であり、（ｃ）はコントロールレジスタ４０２の格納データの内容の一部を示す図表である。
【図５】  図４に示すＤＭＡコントローラ４００のＤＭＡ転送制御の概要を示すフロ−チャ−トである。
【図６】  図４に示すＤＭＡコントローラ４００がＲＡＭ６００からデータを読込むときの読み書きデータおよび制御信号の発生タイミングを示すタイムチャ−トである。
【図１】
0003824122.tif 000002
【図２】
0003824122.tif 000003
【図３】
0003824122.tif 000004
【図４】
0003824122.tif 000005
【図５】
0003824122.tif 000006
【図６】
0003824122.tif 000007