(57)【要約】【課題】  エラー発生の有無に関わらず過去のＤＭＡ転送について解析する。【解決手段】ＤＭＡ転送に必要なパラメータを示す情報である記述子を、転送に際して記述子からパラメータが読み込まれるごとに、転送のログとして記録する。ログにはプロセス識別情報を含めることができ、また、ログ採取機能はチャネル毎に有効にすることができる。【選択図】  図１
2005339372.tif 000002
【特許請求の範囲】
【請求項１】
データのダイレクトメモリアクセス転送を行うダイレクトメモリアクセス転送制御制御装置において、
ダイレクトメモリアクセス転送に必要なパラメータを示す情報である記述子を、転送のログとして記録するデバッグコントローラを備えることを特徴とするダイレクトメモリアクセス転送制御装置。
【請求項２】
前記デバッグコントローラは、
前記パラメータがメモリに格納された前記記述子から取得されるたびに、該パラメータをログとして記録する手段を備えることを特徴とする請求項１記載のダイレクトメモリアクセス転送制御装置。
【請求項３】
前記記述子は、該記述子の内容に従い行われるダイレクトメモリアクセス転送が完了した次に行うダイレクトメモリアクセス転送に関するパラメータを示す記述子の格納場所を示す情報を含むことを特徴とする請求項１又は２記載のダイレクトメモリアクセス転送制御装置。
【請求項４】
上記ログは、対象プロセスの識別情報をさらに含むことを特徴とする請求項１〜３のいずれかに記載されたダイレクトメモリアクセス転送制御装置。
【請求項５】
上記ログは、前記ダイレクトメモリアクセス転送を行うチャネルの識別情報をさらに含むことを特徴とする請求項１〜４のいずれかに記載されたダイレクトメモリアクセス転送制御装置。
【請求項６】
上記デバッグコントローラのログを記録する機能を、ダイレクトメモリアクセス転送のチャネル毎に有効にする手段を備えることを特徴とする請求項１〜５のいずれかに記載されたダイレクトメモリアクセス転送制御装置。
【請求項７】
前記デバッグコントローラが前記ログを記録するための専用メモリを備えることを特徴とする請求項１〜６のいずれかに記載されたダイレクトメモリアクセス転送制御装置。
【請求項８】
請求項１〜６のいずれかに記載のダイレクトメモリアクセス転送制御装置を備えることを特徴とするダイレクトメモリアクセス転送制御装置利用システム。
【請求項９】
前記ダイレクトメモリアクセス転送制御装置利用システムは、プロセッサと、該プロセッサが利用するプログラム及び／又はデータを格納するメモリとをさらに備え、
前記デバッグコントローラは、前記ログを前記メモリに記録することを特徴とする請求項８記載のダイレクトメモリアクセス転送制御装置利用システム。
【請求項１０】
前記ダイレクトメモリアクセス転送制御装置利用システムは、デバッグ用の内部バス及びインタフェースをさらに備え、
前記デバッグコントローラは、前記デバッグ用の内部バス及びインタフェースを介して前記ログを出力することを特徴とする請求項８又は９記載のダイレクトメモリアクセス転送制御装置利用システム。
【請求項１１】
ダイレクトメモリアクセス転送制御装置のデバッグを支援する方法において、
前記ダイレクトメモリアクセス転送に際し必要となるパラメータをログとして記録することを特徴とするデバッグ支援方法。
【請求項１２】
ダイレクトメモリアクセス転送制御装置のデバッグを支援するシステムにおいて、
前記ダイレクトメモリアクセス転送に際し必要となるパラメータをログとして記録する手段と、
記録された上記ログを出力する手段とを備えることを特徴とするデバッグ支援システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ダイレクトメモリアクセス転送（以下、ＤＭＡ転送と略す）を制御するデータ転送制御装置に関するものである。
【背景技術】
【０００２】
特開平８−２０２６３５号公報（特許文献１）には、ＤＭＡ転送される複数の対象データ毎に転送動作情報が設定された動作定義テーブルに従い動作するＤＭＡ制御装置において、エラー発生時にエラー情報テーブルにソース／ディスティネーションアドレスを記録する技術が記されている。エラー情報テーブルに記録するソース／ディスティネーションアドレスは、動作定義テーブルに対応する情報であり、この情報を元にエラーの発生したＤＭＡ転送を容易に知ることができるとしている。
【０００３】
特開平１１−２３２２１１号公報（特許文献２）には、ＤＭＡ転送記述子に記述子自身の識別情報を付加し、記述子に対応したＤＭＡ転送を実行している期間、この識別情報を保持する技術が記されている。転送エラー発生時には、この識別情報を参照することで、エラーの発生した記述子の特定を可能にしている。  
【特許文献１】特開平８−２０２６３５号公報
【特許文献２】特開平１１−２３２２１１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１及び特許文献２で示された方法では、エラー発生時にのみＤＭＡ転送に関する情報が取得可能であるため、エラー発生時点より前のＤＭＡ転送に問題がある場合や、エラーの発生を伴わない想定外のＤＭＡ転送動作を解析することは非常に困難である。また、特許文献２に示された方法では、記述子の識別情報だけを記録するため、動的に記述子を書き換える応用では、エラー発生時に参照すべき記述子の内容が既に書き換えられている場合もある。
【０００５】
近年、システムの集積回路化が進んでおり、集積回路に高機能なＤＭＡ転送制御装置を搭載することがある。このような超高集積回路では、ＤＭＡ転送制御装置周辺の信号を測定することは困難であり、ＤＭＡ転送に問題が発生した際のデバッグが困難になりつつある。特にメディア処理では大量かつ複数のデータ転送を伴うことが多く、メディア処理向けプロセッサなどでは、ＤＭＡ転送に必要なパラメータをメモリに格納した複数の記述子で指定し、且つ複数チャネルのＤＭＡ転送を同時に行うことが可能なＤＭＡ転送制御装置が搭載される場合があり、ＤＭＡ転送に関連するデバッグは特に困難となっている。
【０００６】
そこで本発明では、エラー発生の有無に関わらず過去のＤＭＡ転送について解析することが可能なＤＭＡ転送制御装置と、該解析を可能とするデバッグ支援方法及びシステムとを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明では、上記目的を達成するため、ＤＭＡ転送制御装置が転送動作情報又は記述子を読み出す際に、ログ記録対象として設定された転送であれば、読み出した転送動作情報あるいは記述子をログとしてメモリに記録する。この際、同時に複数のＤＭＡ転送を行う多チャンネル対応のＤＭＡ転送制御装置では、チャネル番号をログに付加することが望ましい。また、複数のプロセスを処理するプロセッサに付加するＤＭＡ転送制御装置では、プロセス識別番号をログに付加することが望ましい。本発明によれば、デバッグの際には、ＤＭＡ転送制御装置が記録したログからチャネル番号やプロセス識別番号を元に必要な情報を取り出し、解析することができる。
【０００８】
具体的には、本発明では、データのダイレクトメモリアクセス転送を行うダイレクトメモリアクセス転送制御制御装置であって、ダイレクトメモリアクセス転送に必要なパラメータを示す情報である記述子を転送のログとして記録するデバッグコントローラを備えるＤＭＡ転送制御装置が提供される。
【０００９】
なお、デバッグコントローラは、パラメータがメモリに格納された記述子から取得されるたびに、該パラメータをログとして記録する手段を備えることが望ましい。また、記述子は、該記述子の内容に従い行われるダイレクトメモリアクセス転送が完了した次に行うダイレクトメモリアクセス転送に関するパラメータを示す記述子の格納場所を示す情報を含むようにすることができる。ログには、対象プロセスの識別情報をさらに含むことが望ましい。また、複数チャネルによりＤＭＡ転送が行われる場合には、ＤＭＡ転送を行うチャネルの識別情報をさらに含むことが望ましい。さらにこの場合、デバッグコントローラのログを記録する機能を、ダイレクトメモリアクセス転送のチャネル毎に有効にする手段を備えることが望ましい。
【００１０】
また、本発明では、上述した本発明のＤＭＡ転送制御装置を備えるＤＭＡ転送制御装置利用システムが提供される。本発明のＤＭＡ転送制御装置利用システムがプロセッサと、該プロセッサが利用するプログラム及び／又はデータを格納するメモリとをさらに備える場合、デバッグコントローラがログを当該メモリに記録するようにしてもよい。
【００１１】
本発明のＤＭＡ転送制御装置利用システムは、デバッグ用の内部バス及びインタフェースをさらに備えてもよく、この場合、デバッグコントローラは、このデバッグ用の内部バス及びインタフェースを介してログを出力するようにすることができる。
【００１２】
さらに本発明では、ダイレクトメモリアクセス転送制御装置のデバッグを支援する方法であって、ダイレクトメモリアクセス転送に際し必要となるパラメータをログとして記録するデバッグ支援方法と、該方法を用いてログを記録し、該記録された上記ログを出力する手段を備えるデバッグ支援システムとが提供される。
【発明の効果】
【００１３】
ＤＭＡ転送において、エラー発生以前の転送が原因となった動作不良や、エラーが発生しない動作不良のデバッグに必要な情報を取得することが可能になる。この結果、ＤＭＡ転送に関するデバッグが容易になる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施形態について具体的に説明する。
【実施例１】
【００１５】
図１を用いて、本発明のＤＭＡ転送制御装置５１００の基本動作を説明する。ＤＭＡ転送制御装置５１００はＤＭＡ転送制御装置利用システム５０００内に設けられている。ここでＤＭＡ転送制御装置利用システム５０００は主として集積回路であることを想定しているが、複数の集積回路を用いて構成された装置であってもよい。また、ＤＭＡ転送制御装置利用システム５０００は、ＤＭＡ転送制御装置のデバッグ支援システムとして用いることもできる。
【００１６】
ＤＭＡ転送制御装置５１００は外部メモリ１０００に格納された記述子を読み込み、記述子の内容に従って、メモリ間、メモリ−入出力装置間又は入出力装置間のＤＭＡ転送を行う。記述子についての具体例は後述するが、記述子にはＤＭＡ転送の対象となるデータのアドレスや転送するデータ長、次に利用する記述子の存在するアドレス等の情報が含まれている。ＤＭＡ転送制御装置５１００はデータ転送に際し、転送元指定用の記述子と転送先指定用の記述子を読み出し、記述子の持つ情報に従いデータ転送を行う。
【００１７】
図１では転送元指定用の記述子として記述子Ａ１（１１１）、記述子Ａ２（１１２）、記述子Ａ３（１１３）、記述子Ａ４（１１４）、転送先指定用の記述子として記述子Ｂ１（１２１）、記述子Ｂ２（１２２）、記述子Ｂ３（１２３）、記述子Ｂ４（１２４）を記している。記述子Ａ１（１１１）は次の記述子として記述子Ａ２（１１２）を、記述子Ａ２（１１２）は次の記述子として記述子Ａ３（１１３）を、記述子Ａ３（１１３）は次の記述子として記述子Ａ４（１１４）を、記述子Ｂ１（１２１）は次の記述子として記述子Ｂ２（１２２）を、記述子Ｂ２（１２２）は次の記述子として記述子Ｂ３（１２３）を、記述子Ｂ３（１２３）は次の記述子として記述子Ｂ４（１２４）をそれぞれ指すポインタ情報を有する。
【００１８】
ＤＭＡ転送制御装置５１００は記述子を読み込んだ際に、記述子をログとして記録するよう設定されていれば、記述子の内容及び付加情報を記述子ログとして外部メモリ１０００に書き出す。図１ではＤＭＡ転送制御装置５１００が記述子ログを記録するよう設定してあり、記述子Ａ１（１１１）、記述子Ｂ１（１２１）、記述子Ａ２（１１２）の順で記述子を読み込んだ状態を想定している。すなわち、記述子Ａ１（１１１）を読み込んだ際に記述子ログＡ１（５１１）を、記述子Ｂ１（１２１）を読み込んだ際に記述子ログＢ１（５２１）を、記述子Ａ２（１１２）を読み込んだ際に記述子ログＡ２（５１２）を書き出した状態を示している。
【００１９】
ＤＭＡ転送制御装置５１００は記述子を読み込んだ直後に記述子をログとして書き出すので、記述子を読み込んだ順に対応する記述子のログが記述子ログとして記録される。
図１では記述子及び記述子ログを外部メモリ１０００に配置したが、外部メモリ１０００の代わりにＤＭＡ転送制御装置利用システム５０００内部にメモリを用意すれば、そのメモリの利用も可能である。
【００２０】
図２を用いてＤＭＡ転送制御装置利用システム５０００の構成例を説明する。ＤＭＡ転送制御装置利用システム５０００は、ＤＭＡ転送制御装置５１００の他、外部メモリ１０００とのインタフェースである外部メモリ制御装置５７００、演算処理やＤＭＡ転送制御装置利用システム５０００の制御を行うプロセッサ５８００、ＤＭＡ転送制御装置利用システム内部で外部メモリ１０００と比較してより高速にアクセス可能な内部メモリ５９００、及び、外部装置とのインタフェースを行う入出力制御装置５６００を備え、それぞれシステムバス５５００を介して接続されている。プロセッサ５８００内部にはキャッシュメモリが搭載されている場合もある。
【００２１】
ＤＭＡ転送制御装置５１００はシステムバス５５００を使用し、外部メモリ制御装置５７００を経由して外部メモリ１０００にアクセスしたり、内部メモリ５９００にアクセスしたり、入出力制御装置５６００を経由して外部装置と通信可能な他、プロセッサ５８００がキャッシュメモリを搭載している場合には、キャッシュメモリにもアクセス可能である。
【００２２】
外部メモリ１０００及び内部メモリ５９００は、主としてプロセッサ５８００が利用するプログラムやデータの格納に利用するが、ＤＭＡ転送制御装置５１００の参照する記述子の格納や、ＤＭＡ転送装置５１００が書き出す記述子ログの格納にも利用する。この例では、記述子ログを外部メモリ１０００や内部メモリ５９００に格納するので、記述子ログ記録用に別途メモリを追加する必要はない。但し、記述子ログを取得する場合、ログ記録用に余分にメモリを必要とするので、メモリ容量を追加する必要が生じうる。しかし、ＤＭＡ転送制御利用システム５０００を民生機器などに利用する際には、デバッグ機能が必要となる開発環境でのみメモリ容量を追加し、デバッグの終了した量産品には追加しないという態様でも構わない。
【００２３】
本実施例では、ＤＭＡ転送制御装置５１００がキャッシュメモリにアクセスできるため、ＤＭＡ転送時にキャッシュメモリと外部メモリ１０００や内部メモリ５９００との内容の同一性を保つことや、データ転送結果をキャッシュメモリに反映することが可能となる。この結果、ＤＭＡ転送制御装置利用システム５０００内部でもプロセッサ５８００が最も高速にアクセス可能なキャッシュメモリに演算処理で予め必要となるデータをＤＭＡ転送で用意することが可能となり、プロセッサ５８００のデータ待ち時間を抑制できる。
【００２４】
本実施例のＤＭＡ転送制御装置５１００を図３に示す。ＤＭＡ転送制御装置５１００内部にはシステムバス５５００とのインタフェースであるバスインタフェース５１９０、ＤＭＡ転送制御装置５１００内部で発生したシステムバス５５００へのアクセス要求の調停を行う調停回路５１８０、転送状態を記録しておく転送制御レジスタ５２００、転送制御レジスタ５２００の更新制御を行う転送制御レジスタコントローラ５１３０、転送するデータを一時蓄えるデータバッファメモリ５１７０、データ転送全体を制御するデータ転送コントローラ５１６０、複数のチャネルのＤＭＡ転送を行う際に転送の順番を決定するチャネルスケジューラ５１５０が存在する。さらに、記述子ログの記録を行うため、記述子ログの記録動作設定や記録場所を保持するデバッグコントロールレジスタ５１１０、及び記述子ログ記録制御を行うデバッグコントローラ５１２０が存在する。
【００２５】
図４にＤＭＡ転送制御装置５１００の使用する記述子１００の構成内容の例を示す。本実施例の記述子１００には、転送に必要なパラメータとして、転送データの開始アドレスを示すデータ開始アドレス１０１、連続したアドレスに対するデータ転送長（バイト数）を示す連続データ転送長１０２、連続データ転送長１０２で指定した長さの連続したアドレスに対するデータ転送を実行する回数から１を引いた値を指定するデータ転送回数１０３、連続データ転送長１０２で指定した長さの連続したアドレスに対するデータ転送を行った後、次の連続したアドレスに対するデータ転送を行う前のアドレスの増分を指定する転送毎アドレス間隔１０４、ある記述子で指定したデータ転送の次に利用する記述子が格納されたメモリアドレスを指定する次の記述子アドレス１０５、その他に必要となるデータ転送パラメータを指定する転送モード１０６が格納される。
【００２６】
転送モード１０６の内容には、転送対象のデータがメモリであるか入出力制御装置５６００であるかの指定、キャッシュメモリを転送対象とするか否かの指定、メモリアクセス時のアクセス単位（バイト長）、この記述子で転送を終了するか次の記述子を読み込んで転送を継続するかの指定等が含まれている。
【００２７】
記述子１００には連続データ転送長１０２、データ転送回数１０３、転送毎アドレス間隔１０４が格納されているので、１個の記述子で例えば画像表示データを格納するフレームバッファをアクセスするようなアドレスの発生を指示可能である。例えば、１ライン当たり１００バイト、８０ラインで構成される画像表示データが、１ライン当たり１２８バイト割り当てられているフレームバッファに格納されている場合、フレームバッファ内の有効な画像データ部分にアクセスするアドレス生成を指示するには、データ転送長１０２に１００、データ転送回数１０３に８０から１を引いた７９、転送毎アドレス間隔１０４に２８を設定すれば良い。
【００２８】
記述子１００は１個で１個のアドレス生成を指定するので、データ転送元とデータ転送先でそれぞれ用意する必要がある。また、記述子１００は次の記述子アドレス１０５を用いて次の記述子を指定可能であるので、一連のアドレス生成を複数の記述子１００により指定可能である。この際、データ転送元とデータ転送先で同数の記述子を用いる必要は無い。例えばデータ転送元では１６バイト分と３２バイト分の転送を行う２個の記述子を用いてアドレス生成を指定し、データ転送先では４８バイト分の転送を行う１個の記述子を用いてアドレス生成を指定した場合でも、データ転送元と転送先それぞれの合計の転送バイト数が同じであるので問題ない。
【００２９】
図５にＤＭＡ転送制御装置５１００が出力する記述子ログ５００の構成内容の例を示す。記述子ログ５００にはＤＭＡ転送制御装置５１００が読み込んだ記述子１００の内容が含まれるのに加え、記述子１００を参照した転送チャネル及び転送元・転送先の識別できるよう対象チャネル番号（転送元・先判別ビット付き）５０２と、ＤＭＡ転送の初期設定を行ったプロセッサ５８００上で動作するプロセスを識別する対象プロセス識別番号５０１が含まれている。対象プロセス識別番号５０１は、プロセッサ５８００からＤＭＡ転送を起動する際に、ＤＭＡ転送制御装置５１００内部の転送制御レジスタ５２００に設定した値が反映される。
【００３０】
記述子ログ５００に含まれる記述子１００の部分は、ＤＭＡ転送制御装置５１００がデータ転送に必要とする情報を含んでいれば、記述子１００とフォーマットや構成内容が異なっても良い。また、記述子１００を用いず、ＤＭＡ転送するデータ領域を直接内部レジスタに指定するＤＭＡ転送制御装置では、記述子ログ５００の記述子１００の部分にその内部レジスタの内容を記録することも考えられる。
【００３１】
ＤＭＡ転送制御装置５１００内部に存在する転送制御レジスタ５２００の構成内容を例として図６に示す。ＤＭＡ転送制御装置５１００はｎチャネルのＤＭＡ転送を同時に行うことが可能であるので、チャネル１状態レジスタ５２２０からチャネルｎ状態レジスタ５２５０までチャネル毎にチャネル状態レジスタが存在する。また各チャネルの動作状態を保持するチャネル動作フラグ５２１０が存在する。
【００３２】
チャネル動作フラグ５２１０は、チャネル毎に２ビットずつ割り当てられており、それぞれのビットはデータ転送元からデータバッファメモリ５１７０への転送が動作中か否か、データバッファメモリ５１７０からデータ転送先への転送が動作中か否かを示している。
【００３３】
チャネル状態レジスタの構成内容を例として図７に示す。プロセス識別番号５２６０は記述子ログが出力される際に対象プロセス識別番号５０１として出力される値で、プロセッサ５８００がＤＭＡ転送の初期設定を行う際に設定する。
【００３４】
バッファ開始アドレス５２６１はデータバッファメモリ５１７０の該当チャネル使用領域の先頭アドレスを示し、バッファ終了アドレス５２６２はデータバッファメモリ５１７０の該当チャネル使用領域の最終アドレスを保持する。バッファ開始アドレス５２６１及びバッファ終了アドレス５２６２は他のチャネルの使用領域と重ならないよう、プロセッサ５８００で設定する。
【００３５】
転送元データアドレス５２７１は、転送元データのアドレスを保持し、該当チャネルの転送元指定用に記述子１００を読み込んだ際にデータ開始アドレス１０１の値が設定される。転送元データアドレス５２７１は、転送元がメモリである場合には、転送元からデータバッファメモリ５１７０にデータを読み込む度に次の転送元データを指すよう更新される。転送元が入出力制御装置５６００の場合には、対象となる入力の識別にアドレスを使用するので、更新されない。
【００３６】
転送元連続データ転送長５２７２は、転送元の連続したアドレスに対するデータ転送長（バイト数）を保持し、該当チャネルの転送元指定用に記述子１００を読み込んだ際に連続データ転送長１０２の値が設定される。
【００３７】
転送元データ転送回数残り５２７３は、転送元の連続したアドレスに対するデータ転送を残り何回行うか保持しており、該当チャネルの転送元指定用に記述子１００を読み込んだ際にデータ転送回数１０３の値が設定される。また、連続したアドレスに対するデータ転送が完了する毎に値が1減少する。
【００３８】
転送元転送毎アドレス間隔５２７４は、転送元の連続したアドレスに対するデータ転送が１回完了する毎の転送元データアドレス５２７１更新時にアドレスに加算する値を保持し、該当チャネルの転送元指定用に記述子１００を読み込んだ際に転送毎アドレス間隔１０４の値が設定される。
【００３９】
転送元次の記述子アドレス５２７５は、次に読み込む記述子のアドレスを保持し、該当チャネルの転送元指定用に記述子１００を読み込んだ際に次の記述子アドレス１０５の値が設定される。
【００４０】
転送元転送モード５２７６は、転送元がメモリであるか入出力装置であるかの指定、キャッシュメモリを転送対象とするか否かの指定、メモリアクセス時のアクセス単位（バイト長）、この記述子で転送を終了するか次の記述子を読み込み転送を継続するかの指定等を保持し、該当チャネルの転送元指定用に記述子１００を読み込んだ際に転送モード１０６の値が設定される。
【００４１】
転送元データ転送長残り５２７７は、転送元からの連続したアドレスに対するデータ転送において、データ転送長の残りバイト数を保持し、該当チャネルの転送元指定用に記述子１００を読み込んだ際に連続データ転送長１０２の値が設定される。また、連続したアドレスに対するデータ転送が完了し、転送元データ転送回数残り５２７３の値が１減少する際に、転送元連続データ転送長５２７２の値が設定される。
【００４２】
バッファ書き込みアドレス５２７８は転送元から読み出したデータを格納する際のデータバッファメモリ５１７０のアドレスを保持し、データを格納するたびに次のアドレスを指すよう更新される。但し、更新結果がバッファ終了アドレス５２６２より大きくなる場合には、バッファ開始アドレス５２６１の値に更新される。
【００４３】
転送先データアドレス５２８１は、データ転送先のアドレスを保持し、該当チャネルの転送先指定用に記述子１００を読み込んだ際にデータ開始アドレス１０１の値が設定される。転送先データアドレス５２８１は、転送先がメモリである場合には、データバッファメモリ５１７０から転送先へデータを書き込む度に次の転送先アドレスを指すよう更新される。転送先が入出力制御装置５６００の場合には、対象となる出力の識別にアドレスを使用するので、更新されない。
【００４４】
転送先連続データ転送長５２８２は、転送先への連続したアドレスに対するデータ転送長（バイト数）を保持し、該当チャネルの転送先指定用に記述子１００を読み込んだ際に連続データ転送長１０２の値が設定される。
【００４５】
転送先データ転送回数残り５２８３は、転送先への連続したアドレスに対するデータ転送を残り何回行うか保持しており、該当チャネルの転送先指定用に記述子１００を読み込んだ際にデータ転送回数１０３の値が設定される。また、連続したアドレスに対するデータ転送が完了する毎に値が1減少する。
【００４６】
転送先転送毎アドレス間隔５２８４は、転送先への連続したアドレスに対するデータ転送が１回完了する毎の転送先データアドレス５２８１更新時にアドレスに加算する値を保持し、該当チャネルの転送先指定用に記述子１００を読み込んだ際に転送毎アドレス間隔１０４の値が設定される。
【００４７】
転送先次の記述子アドレス５２８５は、次に読み込む記述子のアドレスを保持し、該当チャネルの転送先指定用に記述子１００を読み込んだ際に次の記述子アドレス１０５の値が設定される。
【００４８】
転送先転送モード５２８６は、転送先がメモリであるか入出力装置であるかの指定、キャッシュメモリを転送対象とするか否かの指定、メモリアクセス時のアクセス単位（バイト長）、この記述子で転送を終了するか次の記述子を読み込み転送を継続するかの指定等を保持し、該当チャネルの転送先指定用に記述子１００を読み込んだ際に転送モード１０６の値が設定される。
【００４９】
転送先データ転送長残り５２８７は、転送先への連続したアドレスに対するデータ転送において、データ転送長の残りバイト数を保持し、該当チャネルの転送先指定用に記述子１００を読み込んだ際に連続データ転送長１０２の値が設定される。また、連続したアドレスに対するデータ転送が完了し、転送先データ転送回数残り５２８３の値が１減少する際に、転送先連続データ転送長５２８２の値が設定される。
バッファ読み出しアドレス５２８８は転送先へ送り出すデータを読み出す際のデータバッファメモリ５１７０のアドレスを保持し、データを読み出すたびに次のアドレスを指すよう更新される。但し、更新結果がバッファ終了アドレス５２６２より大きくなる場合には、バッファ開始アドレス５２６１の値に更新される。
【００５０】
つぎに、ＤＭＡ転送制御装置５１００内部に存在するデバッグコントロールレジスタ５１１０の構成内容例を、図８を用いて説明する。
【００５１】
ログ記録領域開始アドレス５１１１は、記述子ログ５００の格納するメモリ領域の先頭アドレスを保持する。ログ記録領域終了アドレス５１１２は、記述子ログ５００の格納するメモリ領域の最終アドレスを保持する。
【００５２】
ログ記録アドレス５１１３は、次に記述子ログ５００を書き込むアドレスを保持し、記述子ログ５００を書き込む毎に書き込んだ記述子ログ５００の直後を指すよう更新される。但し更新後のアドレスがログ記録領域終了アドレス５１１２を超えた場合には、ログ記録領域開始アドレス５１１１の値が設定される。
【００５３】
ログ記録制御フラグ５１１４は記述子ログ５００を取得するか否かをチャネル毎に、転送元、転送先毎に保持する。すなわち、チャネル毎に、転送元、転送先毎に記述子ログ５００を取得するか否か制御可能である。この機能により、記述子ログ５００の取得量を抑制可能である。
【００５４】
ＤＭＡ転送制御装置５１００の動作を図３及び図９を用いて説明する。
Ｓ００１ではチャネルスケジューラ５１５０によりデータ転送するチャネル及び転送方向の決定を行う。ここで転送方向とは、外部メモリ１０００や内部メモリ５９００などのメモリあるいは入出力制御装置５６００からデータバッファメモリ５１７０への転送か、データバッファメモリ５１７０から外部メモリ１０００や内部メモリ５９００などのメモリまたは入出力制御装置５６００への転送かのいずれかである。
【００５５】
チャネルスケジューラ５１５０はチャネル動作フラグ５２１０で動作中と示されているチャネルに対し、データ転送コントローラ５１６０からデータ転送可能なチャネル及び転送方向の情報を受け取り、適当に優先順位付けを行う。優先順位付けにはラウンドロビン法を用いるが、別の方法でも良い。
【００５６】
データ転送元からデータバッファメモリ５１７０への転送においてデータ転送可能な状態とは、データバッファメモリ５１７０に該当するチャネルに割り当てられた領域に空きがあり、データ転送元が入出力制御装置５６００の場合にはさらに入力対象の準備が整っている状態である。データバッファメモリ５１７０に空きがあるか否かは、バッファ書き込みアドレス５２８０に格納されている値から、次の更新の際にバッファ書き込みアドレス５２８０に書き込む値を算出し、この値とバッファ読み出しアドレス５２８８に格納されている値を比較して行う。比較の結果、両者が一致しなければ空きがあると判定する。
【００５７】
データバッファメモリ５１７０からデータ転送先への転送においてデータ転送可能な状態とは、データバッファメモリ５１７０に該当するチャネルに割り当てられた領域に有効なデータが存在し、データ転送先が入出力制御装置５６００の場合にはさらに出力対象の準備が整っている状態である。データバッファメモリ５１７０に有効なデータが存在するか否かは、バッファ書き込みアドレス５２８０に格納されている値とバッファ読み出しアドレス５２８８に格納されている値を比較して行う。比較の結果、両者が一致しなければ有効なデータが存在すると判定する。
【００５８】
Ｓ００１でデータ転送対象が決定すると、Ｓ００２で該当するデータ転送に新たに記述子１００を読み込む必要があるか判断する。この判断は転送制御レジスタ５２００の内容を用いて行う。転送制御レジスタ５２００内部の該当するチャネル状態レジスタを参照し、該当する転送方向のデータ転送回数残り及びデータ転送長残りが０である場合、記述子１００を読み込む必要がある。
【００５９】
記述子１００を読み込む必要がない場合、Ｓ００８に移行しデータ転送を行う。
【００６０】
記述子１００を読み込む必要がある場合、転送制御レジスタコントローラ５１３０の制御により、Ｓ００３で外部メモリ１０００または内部メモリ５９００より記述子１００を読み出す。記述子１００を読み出すアドレスには、該当するチャネルのチャネル状態レジスタの該当する転送方向の次の記述子アドレスに格納されている値を利用する。
【００６１】
Ｓ００３で読み込んだ記述子１００は、Ｓ００４で該当するチャネル状態レジスタに設定する。
【００６２】
Ｓ００５では転送制御レジスタコントローラ５１３０からデバッグコントローラ５１２０に記述子１００の読み込みを行ったことが伝わり、デバッグコントローラ５１２０はデバッグコントロールレジスタ５１１０の内容を確認して、デバッグ対象のチャネルであるか、またデバッグ対象のデータ転送方向か判断する。
デバッグ対象でなかった場合、Ｓ００８に移行しデータ転送を行う。
デバッグ対象であった場合、Ｓ００６でデバッグコントローラ５１２０が転送制御レジスタコントローラ５１３０に要求を出し、転送制御レジスタコントローラ５１３０は転送制御レジスタ５２００から記述子１００の内容を含む記述子ログ５００の書き出しを行うよう制御する。記述子ログ５００の書き出しは、転送制御レジスタ５２００から調停回路５１８０、バスインタフェース５１９０を介し、システムバス５５００経由で行う。記述子ログ５００を書き出す時点では、記述子１００に含まれていた情報はそのまま該当するチャネルのチャネル状態レジスタに含まれており、またチャネル番号や転送方向についても、チャネル状態レジスタを参照する上で転送制御レジスタコントローラ５１３０は把握しているので、フォーマットを整えるだけで記述子ログ５００を生成可能である。
【００６３】
記述子ログ５００を書き出した後、Ｓ００７でデバッグコントローラ５１２０はデバッグコントロールレジスタ５１１０に含まれるログ記録アドレス５１１３を更新する。更新の際には、書き出した記述子ログ５００の直後のアドレスを指すよう更新するが、更新結果がログ記録領域終了アドレス５１１２に格納された値より大きい場合には、ログ記録領域開始アドレス５１１１に格納された値で更新する。
【００６４】
Ｓ００８では、データ転送コントローラ５１６０が該当するチャネル及びデータ転送方向のチャネル状態レジスタの内容に基づき、実際にデータ転送を行う。データ転送時にデータバッファメモリ５１７０の使用状況や入出力制御装置５６００の状態により転送不可能な状態になった時点で、Ｓ００９へ移行する。またデータ転送の際、他のチャネルのデータ転送処理を長時間停止するのを防止するため、数十から数百バイト程度データ転送してデータ転送を一旦中断し、Ｓ００９へ移行する。さらに、連続するアドレスのデータ転送が完了した段階でも、転送毎アドレス間隔で指定された分アドレスをスキップする必要があるので、アドレス更新処理のためにデータ転送を一旦中断し、Ｓ００９へ移行する。
【００６５】
Ｓ００９では、Ｓ００８でのデータ転送量に基づき、該当するチャネルのチャネル状態レジスタの該当する転送方向のデータアドレス、データ転送長残りを更新する。データ転送元からデータバッファメモリ５１７０への転送では、バッファ書き込みアドレス５２７８も更新し、データバッファメモリ５１７０からデータ転送先への転送ではバッファ読み出しアドレス５２８８も更新する。また、データ転送長残りが０となった場合、データ転送回数残りが０でなければ、データ転送回数残りを１減少させ、データ転送長残りに連続データ転送長の値を書き込む。
【００６６】
Ｓ０１０では、該当チャネルの該当転送方向の転送が全て完了したか判断し、転送完了時には転送制御レジスタ５２００内部のチャネル動作フラグ５２１０の更新を行う。すなわち、データ転送長残りが０で、データ転送回数残りが０、且つ転送モードで次の記述子の読み出し転送を継続するよう指定されていない場合、チャネル動作フラグ５２１０の該当チャネル該当転送方向のビットをクリアし、以後プロセッサ５８００によりビットがセットされるまで、該当チャネル該当転送方向のデータ転送を停止状態とする。
【００６７】
Ｓ０１０の処理が完了すると、Ｓ００１に戻る。
【００６８】
ＤＭＡ転送を起動するためには、プロセッサ５８００を用いて必要な記述子１００を用意した後、使用するチャネルを決定するため、転送制御レジスタ５２００内部のチャネル動作フラグ５２１０を参照して停止状態のチャネルを探す。次に使用するチャネルのチャネル状態レジスタのプロセス識別番号５２６０に、プロセッサ５８００で動作しているＤＭＡ転送を要求したプロセスのプロセス識別番号を設定する。また、転送元データ転送回数残り５２７３、転送元データ転送長残り５２７７、転送先データ転送回数残り５２８３、及び転送先データ転送長残り５２７８に０を書き込み、転送元次の記述子アドレス５２７５にデータ転送元からデータバッファメモリ５１７０への転送で最初に利用する記述子１００が格納されているアドレスを書き込み、転送先次の記述子アドレス５２８５にデータバッファメモリ５１７０から転送先へのデータ転送で最初に利用する記述子１００が格納されているアドレスを書き込む。最後に、チャネル動作フラグ５２１０の該当するチャネルの転送元、転送先両方に対応するビットに１を書き込む。チャネル動作フラグ５２１０は転送制御レジスタコントローラによっても更新されるので、特定のビットのみを書き換える機能を用意し、更新書き込みが確実に行えるようにしている。起動時に、転送元データ転送回数残り５２７３、転送元データ転送長残り５２７７、転送先データ転送回数残り５２８３、及び転送先データ転送長残り５２７８を０に設定するため、最初のデータ転送を行う前に、必ず必要な記述子１００の読み出しが行われる。
【００６９】
記録した記述子ログ５００を用いたデバッグの例を、図１０と図１１を用いて説明する。図１０及び図１１に示した例において、記述子Ｃ１（１３１）、記述子Ｃ２（１３２）、記述子Ｃ３（１３３）、記述子Ｃ４（１４４）はデータ転送元からデータバッファメモリ５１７０への転送を指定する記述子１００である。
【００７０】
正しくは、記述子Ｃ１（１３１）には次の記述子アドレス１０５に記述子Ｃ２（１３２）が格納されたアドレスが設定され、Ｃ２（１３２）には次の記述子アドレス１０５に記述子Ｃ３（１３３）が格納されたアドレスが設定され、記述子Ｃ３（１３３）には次の記述子アドレス１０５に記述子Ｃ４（１３４）が格納されたアドレスが設定される必要がある。しかし、ここで示した例では、記述子Ｃ１（１３１）では次の記述子アドレス１０５に記述子Ｃ３（１３３）が格納されたアドレスが設定されており、記述子が誤っている。
【００７１】
また、記述子Ｄ１（１４１）、記述子Ｄ２（１４２）、記述子Ｄ３（１４３）、記述子Ｄ４（１４４）はデータバッファメモリ５１７０からデータ転送先への転送を指定する記述子１００である。記述子Ｄ１（１４１）には次の記述子アドレス１０５に記述子Ｄ２（１４２）が格納されたアドレスが設定され、Ｄ２（１４２）には次の記述子アドレス１０５に記述子Ｄ３（１４３）が格納されたアドレスが設定され、記述子Ｄ３（１４３）には次の記述子アドレス１０５に記述子Ｄ４（１４４）が格納されたアドレスが設定されている。
【００７２】
この状態でＤＭＡ転送を行った場合、データ転送元からデータバッファメモリ５１７０への転送量が本来の動作より少なくなるため、データ不足でデータバッファメモリ５１７０からデータ転送先への転送が完了しない。
【００７３】
転送が完了せず時間が経過した際、転送元側のデータが少ないため、転送元の転送に関しては既に記述子Ｃ４（１３４）が使用された状態となる。すなわち、転送元で最後に利用した記述子１００は記述子Ｃ４（１３４）であり、問題のない記述子１００であるので、最後に利用された記述子１００に関する情報だけではＤＭＡ転送で発生した問題の原因特定が困難である。また、記述子１００をプロセッサ５８００が動的に生成している場合、記述子Ｃ１（１３１）が既に書き換えられていることがあり、このような場合、問題の発生した転送に関連する記述子１００全ての格納場所が分かり、記述子Ｃ１（１３１）を参照できたとしても、問題の原因となった記述子Ｃ１（１３１）が持っていたパラメータとは既に異なるため、問題の特定が困難となる。
【００７４】
このような状況であっても、本実施例では、記述子ログ５００が記録されており、該ログを出力させて参照することができるため、原因を容易に解析することができる。すなわち、ここに用いている例では、本実施例により図１１に示すログを取得することができる。これを解析すると、本来存在すべき記述子ログＣ２が存在しないことがわかる。記述子Ｃ２（１３２）を次の記述子１００として指示する予定であった記述子Ｃ１（１３１）に対応する記述子ログＣ１（５３１）を参照すると、記述子ログＣ１（５３１）はＤＭＡ転送時に参照した記述子Ｃ１（１３１）の内容を含む。この結果、記述子Ｃ１（１３１）に問題があったことが判明する。
【００７５】
ログを解析する際、デバッグ対象のプロセスやチャネルが決まっていれば、記述子ログ５００の対象チャネル番号（転送元・先判別ビット付き）５０２や対象プロセス識別番号５０１から必要なログのみを容易に抽出でき、デバッグ効率を向上可能である。すなわち、デバッグ環境では、記述子ログ５００を抽出、表示することで、ダイレクトメモリアクセス転送のデバッグを支援することができる。
【実施例２】
【００７６】
第２の実施例におけるＤＭＡ転送制御装置５１００を図１２に示す。このＤＭＡ転送制御装置５１００には、図３に示した第１の実施例と比較し、転送ログメモリ５１４０が追加してある。この転送ログメモリ５１４０は、記述子ログ５００を記録するメモリである。
【００７７】
第１の実施例のＤＭＡ転送制御装置５１００は、記述子ログ５００を外部メモリ１０００や内部メモリ５９００に記録するため、記述子ログ５００を書き出す際にシステムバス５５００を使用した。しかし、第２の実施例では転送ログメモリ５１４０を用意し、ここに記述子ログ５００を記録するので、記述子ログ５００を書き出す際のシステムバス５５００へ影響を抑制可能である。この結果、記述子ログ５００記録用に別途転送ログメモリ５１４０が必要となるが、記述子ログ５００記録時のＤＭＡ転送制御装置利用システム５０００の性能低下を抑制できる。また記述子ログ５００記録時と非記録時でシステムバス５５００の挙動が異なる場合、記述子ログ５００記録時にはバグが発生せず、デバッグ困難になることも考えられるが、このような問題も回避可能である。
【００７８】
本実施例では、ログを出力する手段として調停回路５１８０を用いる。すなわち、本実施例では、転送ログメモリ５１４０に記録されたログは、デバッグ時に調停回路５１８０、バスインタフェース５１９０を介し、システムバス５５００を経由して読み出される。
【００７９】
なお、特にＤＭＡ転送制御装置利用システム５０００が集積回路で実施される場合、実装上の制限やコストの関係から転送ログメモリ５１４０の容量が制限される場合がある。このような場合、ＤＭＡ転送上の問題に関係した記述子１００に対応するログが短時間で上書きされる可能性が高くなるため、ＤＭＡ転送時にエラーを検出した場合、ＤＭＡデバッグコントロールレジスタ５１１０を書き換え、記述子ログ５００の取得を停止する措置が必要となる。
【００８０】
記述子ログ５００の記録を停止する方法は、ＤＭＡ転送制御装置５１００に動作中のチャネルについて一定時間データ転送が発生しない場合にエラー検出する装置を追加し、エラー検出時に自動的にＤＭＡデバッグコントロールレジスタ５１１０を書き換える方法と、ソフトウェアで定期的にＤＭＡ転送に異常が無いか確認を行い、異常検出時にＤＭＡデバッグコントロールレジスタ５１１０を書き換える方法が考えられる。また、両者を同時に使用することも考えられる。
【実施例３】
【００８１】
ＤＭＡ転送制御装置５１００の第３の実施例を図１３に示す。また、図１３に示すＤＭＡ転送制御装置５１００ではデバッグバス５５９０を必要とするため、デバッグバス５５９０を有するＤＭＡ転送制御装置利用システム５０００の構成例を図１４に示す。
【００８２】
図１３に示すＤＭＡ転送制御装置５１００には、図３に示した第１の実施例と比較し、転送ログバッファメモリ５１４５が追加してあり、転送ログバッファメモリ５１４５はデバッグバス５５９０に接続されている。
【００８３】
転送ログバッファメモリ５１４５は、ＤＭＡ転送制御装置５１００が出力する記述子ログ５００を、デバッグバス５５９０に出力するまでの間、一時的に蓄えておくメモリである。
【００８４】
図１４に示すＤＭＡ転送制御装置利用システム５０００には、図２に示したＤＭＡ転送制御装置利用システム５０００と比較し、デバッグバス５５９０とデバッグインタフェース５５９５が追加してある。
【００８５】
デバッグバス５５９０はＤＭＡ転送制御装置利用システム５０００のデバッグ制御に必要な制御信号やデータを流すバスであり、デバッグインタフェース５５９５は制御装置利用システム５０００内部のデバッグ機能とＤＭＡ転送制御装置利用システム５０００外部に用意するデバッグ端末との接続を行うインタフェースである。
【００８６】
第３の実施例では、転送ログバッファメモリ５１４５を介しデバッグバス５５９０経由で記述子ログ５００が出力されるため、第２の実施例同様に記述子ログ５００をシステムバス５５００経由で出力する必要が無く、記述子ログ５００記録の際にシステムバス５５００への影響を抑制できる。また、記録する記述子ログ５００全てをＤＭＡ転送制御装置利用システム５０００内部に保持する必要が無いため、第２の実施例に比べデバッグ端末次第で多くの記述子ログ５００を記録し易く、上書きされる間隔を長くすることが可能である。
【産業上の利用可能性】
【００８７】
本発明は、メモリ−メモリ間、メモリ−入出力装置間、又は入出力装置−入出力装置間のＤＭＡ転送制御装置に有用であり、ＤＭＡ転送制御装置及びプロセッサを含むシステムを集積回路で実現した際に、ＤＭＡ転送に関わるデバッグを容易にすることができる。
【図面の簡単な説明】
【００８８】
【図１】実施例１におけるＤＭＡ転送制御装置の基本動作を示す説明図である。
【図２】実施例１におけるＤＭＡ転送制御装置利用システムを示すハードウエア構成図である。
【図３】実施例１におけるＤＭＡ転送制御装置を示すハードウエア構成図である。
【図４】記述子の構成内容の例を示すデータ構造図である。
【図５】記述子ログの構成内容の例を示すデータ構造図である。
【図６】転送制御レジスタの構成内容の例を示すデータ構造図である。
【図７】チャネル状態レジスタの構成内容の例を示すデータ構造図である。
【図８】デバッグコントロールレジスタの構成内容の例を示すデータ構造図である。
【図９】ＤＭＡ転送制御装置の動作手順の例を示す流れ図である。
【図１０】誤った内容を持つ記述子の例を示す説明図である。
【図１１】記述子ログの出力結果例を示す説明図である。
【図１２】実施例２におけるＤＭＡ転送制御装置を示すハードウエア構成図である。
【図１３】実施例３におけるＤＭＡ転送制御装置を示すハードウエア構成図である。
【図１４】実施例３におけるＤＭＡ転送制御装置利用システムを示すハードウエア構成図である。
【符号の説明】
【００８９】
１００…記述子、１０１…データ開始アドレス、１０２…連続データ転送長、１０３…データ転送回数、１０４…転送毎アドレス間隔、１０５…次の記述子アドレス、１０６…転送モード、１１１…記述子Ａ１、１１２…記述子Ａ２、１１３…記述子Ａ３、１１４…記述子Ａ４、１２１…記述子Ｂ１、１２２…記述子Ｂ２、１２３…記述子Ｂ３、１２４…記述子Ｂ４、１３１…記述子Ｃ１、１３２…記述子Ｃ２、１３３…記述子Ｃ３、１３４…記述子Ｃ４、１４１…記述子Ｄ１、１４２…記述子Ｄ２、１４３…記述子Ｄ３、１４４…記述子Ｄ４、５００…記述子ログ、５０１…対象プロセス識別番号、５０２…対象チャネル番号（転送元・先判別ビット付き）、５１１…記述子ログＡ１、５１２…記述子ログＡ２、５２１…記述子ログＢ１、５３１…記述子ログＣ１、５３３…記述子ログＣ３、５３４…記述子ログＣ４、５４１…記述子ログＤ１、５４２…記述子ログＤ２、５４３…記述子ログＤ３、５４４…記述子ログＤ４、１０００…外部メモリ、５０００…ＤＭＡ転送制御装置利用システム、５１００…ＤＭＡ転送制御装置、５１１０…デバッグコントロールレジスタ、５１１１…ログ記録領域開始アドレス、５１１２…ログ記録領域終了アドレス
５１１３…ログ記録アドレス、５１１４…ログ記録制御フラグ、５１２０…デバッグコントローラ、５１３０…転送制御レジスタコントローラ、５１４０…転送ログメモリ、５１４５…転送ログバッファメモリ、５１５０…チャネルスケジューラ、５１６０…データ転送コントローラ、５１７０…データバッファメモリ、５１８０…調停回路、５１９０…バスインタフェース、５２００…転送制御レジスタ、５２１０…チャネル動作フラグ、５２２０…チャネル１状態レジスタ、５２３０…チャネル２状態レジスタ、５２４０…チャネル３状態レジスタ、５２５０…チャネルｎ状態レジスタ、５２６０…プロセス識別番号
５２６１…バッファ開始アドレス、５２６２…バッファ終了アドレス、５２７１…転送元データアドレス、５２７２…転送元連続データ転送長、５２７３…転送元データ転送回数残り、５２７４…転送元転送毎アドレス間隔、５２７５…転送元次の記述子アドレス、５２７６…転送元転送モード、５２７７…転送元データ転送長残り、５２７８…バッファ書き込みアドレス、５２８１…転送先データアドレス、５２８２…転送先連続データ転送長
５２８３…転送先データ転送回数残り、５２８４…転送先転送毎アドレス間隔、５２８５…転送先次の記述子アドレス、５２８６…転送先転送モード、５２８７…転送先データ転送長残り、５２８８…バッファ読み出しアドレス、５５００…システムバス、５５９０…デバッグバス、５５９５…デバッグインタフェース、５６００…入出力制御装置、５７００…外部メモリ制御装置、５８００…プロセッサ、５９００…内部メモリ。
【図１】
2005339372.tif 000003
【図２】
2005339372.tif 000004
【図３】
2005339372.tif 000005
【図４】
2005339372.tif 000006
【図５】
2005339372.tif 000007
【図６】
2005339372.tif 000008
【図７】
2005339372.tif 000009
【図８】
2005339372.tif 000010
【図９】
2005339372.tif 000011
【図１０】
2005339372.tif 000012
【図１１】
2005339372.tif 000013
【図１２】
2005339372.tif 000014
【図１３】
2005339372.tif 000015
【図１４】
2005339372.tif 000016