(57)【要約】【課題】入出力モジュールからメモリへのＤＭＡ転送中に転送データが消失するオーバーランエラーを検出する。【解決手段】入出力モジュールが次の転送データを準備するために必要な最短時間設定を設定する最短時間設定レジスタと、入出力モジュールからのＤＭＡ転送要求信号の受信からの経過時間を計測するカウンタタイマと比較回路を設ける。カウンタタイマの計測時間と最短レジスタ内の最短時間とを比較回路にて比較し、カウンタタイマの計測時間が最短時間を超えた時にＣＰＵに割込み信号を送ってオーバーランエラーの発生を知らせる。【選択図】　図１
2004013395.tif 000002
【特許請求の範囲】
【請求項１】
入出力モジュールとメモリ間のデータのＤＭＡ転送を制御するＤＭＡコントローラであって、
前記入出力モジュールが次の転送データを準備するために必要な最短時間を設定する最短時間設定レジスタと、
前記入出力モジュールからのＤＭＡ転送要求信号の受信からの経過時間を計測するカウンタタイマと、
前記カウンタタイマの計測時間と前記最短時間とを比較して前記計測時間が前記最短時間を超えた時にＣＰＵに割込み信号を送る比較回路と、
を備えたことを特徴とするＤＭＡコントローラ。
【請求項２】
前記カウンタタイマは、前記入出力モジュールからの前記ＤＭＡ転送要求信号を受けて該カウンタタイマをリセットした後、直ちに計時用クロックパルスの計数を開始し、前記ＤＭＡコントローラから前記入出力モジュールへの１データのＤＭＡ転送終了により計数を停止することを特徴とする請求項１に記載のＤＭＡコントローラ。
【請求項３】
前記カウンタタイマの内容をＣＰＵに読み込めるようにしたことを特徴とする請求項１または２に記載のＤＭＡコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えばマイクロコンピュータシステムのメモリと入出力モジュール間におけるデータのＤＭＡ転送を制御するＤＭＡコントローラに関する。
【０００２】
【従来の技術】
例えばマイクロコンピュータシステムにおいては、従来よりメモリと外部入出力モジュールとの間でＤＭＡ（Ｄｉｒｅｃｔ　Ｍｅｍｏｒｙ　Ａｃｃｅｓｓの略）転送と呼ばれる高速データ転送が広く採用されている。これはデータがＣＰＵを経由せず、メモリと入出力モジュールとの間で直接転送される方式で、このデータ転送を制御する回路はＤＭＡコントローラと呼ばれる。
【０００３】
図５は、このようなＤＭＡコントローラ１００の内部構成例を示すブロック図であり、図６はこのＤＭＡコントローラ１００を用いたＤＭＡ転送回路の構成例である。ＤＭＡ転送回路はＣＰＵ２００、メモリ３００、ＤＭＡコントローラ１００、バスアービタ４００、バス５００、入出力モジュール６００、７００等で構成されている。入出力モジュール６００、７００は、例えばシリアル通信装置で、図示しない外部機器との間でシリアル通信によりデータの送受信を行なう。図６は入出力モジュールが２式の場合を例示している。
【０００４】
また、ＤＭＡ転送を制御するＤＭＡコントローラ１００は、ＤＭＡ転送要求／許可判定回路１０１、バス権要求／許可判定回路１０２、起動制御回路１０３、アドレスカウンタ１０４、転送回数制御回路１０５、バスインターフェイス１０６等で構成されている。
【０００５】
このような回路構成の下でのＤＭＡ転送の動作を、入出力モジュール６００からメモリ３００にデータを転送する場合を例に説明する。
まずＣＰＵ２００は、メモリ３００内に転送データを受け取るための書込領域を準備する。そして、その書込領域の先頭アドレスをＤＭＡコントローラ１００内のアドレスカウンタ１０４に、転送データ数を転送回数制御回路１０５に設定し、続いて転送方向や転送元、転送許可等の転送制御情報を起動制御回路１０３に設定する。
【０００６】
これらの転送に必要な制御情報が設定されると、ＤＭＡコントローラ１００は、入出力モジュール６００からのＤＭＡ転送要求信号ＤＲＥＱ０の入力待ち状態となる。次いでＣＰＵ２００は、入出力モジュール６００に対して受信開始の許可信号をバス５００経由で送る。バス５００は、アドレスバス、データバス、制御信号線で構成されている。
【０００７】
この受信開始の許可信号を受け取った入出力モジュール６００は、図示しない外部機器からのデータの受信を開始し、受信した最初のデータを内部の出力レジスタにセットする。その上で、メモリ３００へのＤＭＡ転送を開始してもらうべくＤＭＡ転送要求信号ＤＲＥＱ０をＤＭＡコントローラ１００内のＤＭＡ転送要求／許可判定回路１０１に出力する。ＤＲＥＱ０信号を受け取ったＤＭＡ転送要求／許可判定回路１０１は、受け取ったＤＲＥＱ信号が先にＣＰＵより転送制御情報の設定を受けた転送元からの要求信号であることを確認をする。
【０００８】
確認後、ＤＭＡ転送要求／許可判定回路１０１は、バス権を獲得するためにバス権要求／許可判定回路１０２を通して、バス権要求信号ＢＲＥＱをバスアービタ４００に出力する。ここでバス権の獲得とは、通常、バス５００を使用しているＣＰＵ２００から、バス５００の使用許可を得る（図６のスイッチ８００をＣＰＵ２００側からＤＭＡコントローラ１００側に切り換え、バス５００をＤＭＡコントローラ１００に接続する）ことで、その調停（スイッチ８００の制御）を行うのがバスアービタ４００である。
【０００９】
バス権要求信号ＢＲＥＱを受け取ったバスアービタ４００は、ＣＰＵ２００に対してバス５００の使用要求があったことを通報する。そして、予め決められた調停ロジックによりバス権をＤＭＡコントローラ１００に渡し（スイッチ８００をＤＭＡコントローラ１００側に切り換え、バス５００をＤＭＡコントローラ１００に接続する）、そのことを知らせるためにバス権許可信号ＢＡＣＫをＤＭＡコントローラ１００内のバス権要求／許可判定回路１０２に出力する。
【００１０】
バス権許可信号ＢＡＣＫを受け取ったバス権要求／許可判定回路１０２は、それをＤＭＡ転送要求／許可判定回路１０１に通報し、通報を受けたＤＭＡ転送要求／許可判定回路１０１は、入出力モジュール６００に対しＤＭＡ転送許可信号ＤＡＣＫ０を出力する。
【００１１】
入出力モジュール６００は、ＤＡＣＫ０信号を受けて内部の出力レジスタに準備していた最初の転送データを、バス５００内のデータバス上に出力する。するとＤＭＡコントローラ１００は、バスインターフェース１０６を介してバス５００内のアドレスバスと制御線を操作し、データバス５００上に出力された転送データをアドレスカウンタ１０４に設定されていたメモリ３００内書込領域の先頭アドレスに書き込む。
【００１２】
こうして最初のデータの転送が終わると、アドレスカウンタ１０４内の先頭アドレスは＋１され、転送回数制御回路１０５内の転送データ数は−１される。続いて、入出力モジュール６００は、二番目に受信したデータを内部の出力レジスタにセットした上、次のＤＭＡ転送を開始してもらうべくＤＭＡ転送要求信号ＤＲＥＱ０を、再びＤＭＡコントローラ１００内のＤＭＡ転送要求／許可判定回路１０１に出力する。
【００１３】
以下、前述と同じ一連の動作が繰り返し行なわれ、転送回数制御回路１０５の内容がゼロになった時点、即ち、最初に設定された転送データ数だけのデータ転送が終わった時点で、一連のＤＭＡ転送が終了する。以上の説明から分かるようにＤＭＡ転送では、ＣＰＵ２００はＤＭＡコントローラ１００と入出力モジュール６００にＤＭＡ転送に必要な制御情報を設定して起動をかけるだけである。それ以降、指定データ数の転送が終了するまでの一連のデータ転送は、ＤＭＡコントローラ１００の制御の下で行なわれる。そのデータ転送はＣＰＵ２００を介さないで、メモリ３００と入出力モジュール６００との間の直接転送で行なわれるため、ＤＭＡ転送によるデータ転送は転送速度が極めて速く、またＣＰＵ２００の負荷が軽くなる利点がある。
【００１４】
【発明が解決しようとする課題】
しかし、こうした高速に行なわれるＤＭＡ転送の際に、データの転送エラーが生ずることがある。その一つに、入力モジュール６００、７００におけるオーバーランエラーの発生による転送エラーがある。これは上述の例で言えば、入出力モジュール６００の出力レジスタに準備されたデータの転送が完了する前に、入出力モジュール６００が次のデータの受信を完了し、そのデータで出力レジスタの内容を更新しまう場合に生ずる転送エラーである。
【００１５】
これを図３、図４のタイミングチャートを参照して説明する。入出力モジュール６００は、最初に受信したデータＡを内部の出力レジスタにセットする。それと同時にＤＭＡコントローラ１００に対してＤＭＡ転送要求信号ＤＲＥＱ０を出力し、自身は次のデータＢの受信を始める。ＤＭＡコントローラ１００は、バス権を獲得してＤＭＡ転送許可信号ＤＡＣＫ０を“　Ｈｉｇｈ　”レベルにして入出力モジュールに出力する。ＤＡＣＫ０信号を受けた入出力モジュール６００が、出力レジスタ内のデータＡをバス５００に乗せると、ＤＭＡコントローラ１００がバス５００内のアドレスバスと制御線を操作してデータＡをメモリ３００に書き込む。書き込み終了でＤＭＡコントローラ１００は、ＤＡＣＫ０信号を“　Ｌｏｗ　”レベルに戻す。
【００１６】
ここで、入出力モジュール６００が次のデータＢを受信するのにかかる時間をＴ１とし、ＤＲＥＱ０信号の“　Ｈｉｇｈ　”の立ち上がりからＤＡＣＫ０信号が“　Ｌｏｗ　”に戻るまでの時間をＴ２とする。図３に示すように、Ｔ１＞Ｔ２　であれば、ＤＡＣＫ０信号が“　Ｈｉｇｈ　”レベルの期間中、出力レジスタ内にはデータＡが保持されているため、そのデータＡがメモリ３００に正常に書き込まれる。
【００１７】
しかし、ＤＭＡ転送要求信号ＤＲＥＱ０が出力され、ＤＭＡコントローラ１００がバスアービタ４００にＢＲＥＱ信号を出力してバス権を要求した時に、バス５００の負荷が高かったとする。するとバスアービタ４００がバス権許可信号ＢＡＣＫを直ぐには返せないことが起こる。こうした場合には図４に示すように、ＤＡＣＫ０信号が出力されるタイミングが遅れて、Ｔ１＜Ｔ２となる場合が生じ得る。
【００１８】
このようなことが生ずると、ＤＡＣＫ０が“　Ｈｉｇｈ　”レベルとなる前、あるいは“　Ｈｉｇｈ　”レベルの期間中に出力レジスタの内容が、次に送られるべきデータＢに置き換わってしまう。すると、先に転送されるべきであったデータＡはメモリ３００に転送されずに消えてしまい、次のデータＢがメモリ３００に誤って転送されてしまうことになる。これがオーバーランエラーの発生による転送エラーである。
【００１９】
入出力モジュール６００が受信データＢを出力レジスタにセットする際に、前のデータＡのＤＭＡ転送が完了していることを確認する。即ち、前のデータＡに対応するＤＡＣＫ０信号が一度“　Ｈｉｇｈ　”レベルとなった上で“　Ｌｏｗ　”に戻ったことを確認する。それが確認できない場合にはオーバーランエラーの発生と判定してＣＰＵ２００に割込み信号を送って知らせる。このようになっていれば、ＣＰＵ２００は、それに対応した処置をとることができる。しかし、数ある入出力モジュールの中には、回路の簡素化、コスト低減のためにこのような機能を持たないものがある。その場合には、ＣＰＵ２００がオーバーランの発生を認知することができず、誤った転送データに基づいてその後の処理を続けるという不具合が生ずる。
【００２０】
本発明はこのような不具合に対処するためになされたもので、上述のようなオーバーランエラーの発生を入出力モジュールに代わって検出し、ＣＰＵに通報する機能を有するＤＭＡコントローラを提供することを課題としている。
【００２１】
【課題を解決するための手段】
上記目的を達成するために、本発明のＤＭＡコントローラにおいては、入出力モジュールが次の転送データを準備するために必要な最短時間を設定する最短時間設定レジスタと、入出力モジュールからのＤＭＡ転送要求信号の受信からの経過時間を計測するカウンタタイマと、該カウンタタイマの計測時間と前記最短時間とを比較する比較回路とを設けた。そしてカウンタタイマの計測時間が前記最短時間を超えた時にＣＰＵに割込み信号を送るように構成した。
【００２２】
これにより、転送データの消失というオーバーランエラーが高い確率で発生しうる状態が生じたことをＣＰＵが認識できるようになる。従ってＣＰＵがオーバーランエラーの発生に気づかず、誤った転送データに基づいてその後の処理を進めてしまうという異常事態を回避することが可能になる。
【００２３】
また、好ましくは、前記カウンタタイマは、入出力モジュールからのＤＭＡ転送要求信号を受けて、該カウンタタイマを一旦リセットする。そして直ちに計時用クロックパルスの計数を開始し、ＤＭＡコントローラから入出力モジュールへの１データのＤＭＡ転送終了により計数を停止すると良い。
【００２４】
このように、計時用クロックパルスの計数開始直前にカウンタタイマをリセットすれば、前回のカウント数がリセットされて正確な計時が可能になる。また、ＤＭＡ転送終了後の計数は、意味がないので計数を停止するのが好ましい。
【００２５】
また、好ましくは前記カウンタタイマの内容をＣＰＵに読み込めるように構成するとよい。
このように構成すれば、ＤＭＡ転送要求開始から１データのＤＭＡ転送終了までに要した時間をＣＰＵが認識できる効果がある。
【００２６】
【発明の実施の形態】
本発明の実施の形態を実施例にもとづき図１、図２を参照して説明する。
図１は、本発明のＤＭＡコントローラ１の内部回路構成の一例である。ＤＭＡコントローラ１は、ＤＭＡ転送要求／許可判定回路２、バス権要求／許可判定回路３、起動制御回路４、アドレスカウンタ５、転送回数制御回路６、バスインターフェース７、オーバーラン検出回路８を備えている。オーバーラン検出回路８は、最短時間設定レジスタ８ａ、カウンタタイマ８ｂ、比較回路８ｃを備えている。
【００２７】
図２は、このＤＭＡコントローラ１を用いたＤＭＡ転送回路の構成例である。このＤＭＡ転送回路は、図６の場合と同様に、ＤＭＡコントローラ１、ＣＰＵ１０、メモリ１１、バスアービタ１２、バス１３、入出力モジュール１４、１５等で構成されている。ここで入出力モジュール１４、１５は、シリアル通信装置、フロッピーディスク装置等の外部入出力装置で、図２は入出力モジュールが２式の場合を例示している。
【００２８】
以下、このような回路構成の下で、入出力モジュール１４が受信（準備）したデータをメモリ１１にＤＭＡ転送する場合の動作を説明する。
まずＣＰＵ１０は、転送データを受け取るための書込領域をメモリ１１内に準備する。そして、その書込領域の先頭アドレスをＤＭＡコントローラ１内のアドレスカウンタ５に、転送データ数を転送回数制御回路６に、転送方向や転送元、転送許可等の制御情報を起動制御回路４に設定する。
【００２９】
続いてＣＰＵ１０は、入出力モジュール１４が転送データを受信（準備）するのにかかると予測される最短時間（例えば、入出力モジュール１４がシリアル通信モジュールの場合には、外部装置より１データを受信するのに要する最短時間）Ｔ１ｍｉｎを、オーバーラン検出回路８内の最短時間設定レジスタ８ａに設定する。最短時間Ｔ１ｍｉｎは、図３に示すタイミングチャートで言えば、データＢ受信時間Ｔ１の予想される最小値である。その値は、各入出力モジュール毎に予めメモリ１１に記憶させておく。
【００３０】
これらの各制御情報が設定されると、ＤＭＡコントローラ１は、入出力モジュール１４からのＤＭＡ転送要求信号ＤＲＥＱ０の入力待ち状態となる。次いでＣＰＵ１０は、入出力モジュール１４に対して受信開始の許可信号をバス１３経由で送る。バス１３は、アドレスバス、データバス、制御信号線で構成されている。
【００３１】
この受信開始の許可信号を受け取った入出力モジュール１４は、外部装置よりデータの受信を開始し、受信した最初のデータを内部の出力レジスタにセットする。そしてメモリ１１へのＤＭＡ転送を開始してもらうべく、ＤＭＡ転送要求信号ＤＲＥＱ０をＤＭＡコントローラ１内のＤＭＡ転送要求／許可判定回路２に出力する。その後、入出力モジュール１４は、次に転送するデータの受信（準備）を開始する。
【００３２】
ＤＲＥＱ０信号を受け取ったＤＭＡ転送要求／許可判定回路２は、ＣＰＵ１０からバス権を獲得するためにバス権要求／許可判定回路３を通して、バス権要求信号ＢＲＥＱをバスアービタ１２に出力する。
【００３３】
これと同時にＤＭＡ転送要求／許可判定回路２は、カウンタタイマ８ｂに転送要求受付信号を送り、オーバーラン検出回路８内のカウンタタイマ８ｂを一旦リセットしてゼロにさせた上で、計数を開始させる。カウンタタイマ８は、計時用クロックパルス（図示しない）を計数し、計数開始からの経過時間、すなわち入出力モジュール１４がＤＲＥＱ０信号を出力してからの経過時間Ｔｅｌを計測する。
【００３４】
このカウンタタイマ８ｂで計測された経過時間Ｔｅｌは、先に最短時間設定レジスタ８ａに設定された最短時間Ｔ１ｍｉｎと比較回路８ｃにて比較される。そして
Ｔｅｌ≧Ｔ１ｍｉｎ　　　　　　　　　　　　　　　（１）式
と判定された時に、比較回路８ｃよりバスインターフェース７とバス１３内の制御線を通じてＣＰＵ１０に割込み信号が送られるようになっている。
なお、カウンタタイマ８ｂの内容は、ＣＰＵ１０に読み込めるようにしておくと良い。
【００３５】
これに続く動作は、最初のデータのＤＭＡ転送中に、上記（１）式の条件が成立する場合と成立しない場合とで分かれる。まず上記（１）式の条件が転送途中で成立しない場合の動作について説明する。
バス権要求信号ＢＲＥＱを受け取ったバスアービタ１２は、ＣＰＵ１０に対してバス１３の使用要求があったことを通報する。そして、予め決められた調停ロジックによりバス権をＤＭＡコントローラ１に渡し（スイッチ１６をＤＭＡコントローラ１側に切り換え、バス１３をＤＭＡコントローラ１に接続する）、そのことを知らせるためにバス権許可信号ＢＡＣＫをバス権要求／判定回路３に出力する。
【００３６】
バス権許可信号ＢＡＣＫを受け取ったバス権要求／許可判定回路３は、それをＤＭＡ転送要求／許可判定回路２に通報する。通報を受けたＤＭＡ転送要求／許可判定回路２は、入出力モジュール１４に対しＤＭＡ転送許可信号ＤＡＣＫ０を出力する。
【００３７】
入出力モジュール１４は、ＤＡＣＫ０信号を受けて内部の出力レジスタに準備していた最初の転送データをバス１３内のデータバス上に出力する。するとＤＭＡコントローラ１は、バスインターフェース７を介してバス１３内のアドレスバスと制御線を操作し、データバス上に出力された転送データをアドレスカウンタ５に設定されていた書込領域の先頭アドレスに書き込む。
書き込みが終了すると、ＤＭＡ転送要求／許可判定回路２は、ＤＡＣＫ０信号を“　Ｌｏｗ　”レベルに戻す。それと同時、すなわち最初のデータの転送終了と同時にカウンタタイマ８ｂに転送許可終了信号を送って計数を停止させる。
【００３８】
こうして最初のデータの転送が完了すると、アドレスカウンタ５内の先頭アドレスは＋１され、転送回数制御回路６内の転送データ数は−１される。入出力モジュール１４は、次に転送するデータを内部の出力レジスタに準備し、次のＤＭＡ転送を開始してもらうべくＤＭＡ転送要求信号ＤＲＥＱ０を、再びＤＭＡコントローラ１内のＤＭＡ転送要求／許可判定回路２に出力する。以上の一連の動作タイミングは、前述した図３に示すものと同じである。
以下、このような一連の動作の繰り返しにより、転送回数制御回路６に最初に設定された転送データ数だけのデータ転送が行なわれ、一連のＤＭＡ転送が終了する。
【００３９】
次に、前記（１）式の条件が転送途中で成立する場合の動作について説明する。これは図４に示したタイミングチャートに相当する場合である。
入出力モジュール１４は、最初の転送データを内部の出力レジスタに設定する。そしてＤＭＡ転送を開始してもらうべくＤＭＡ転送要求信号ＤＲＥＱ０をＤＭＡコントローラ１内のＤＭＡ転送要求／許可判定回路２に出力する。その後、入出力モジュール１４は、次に転送するデータの受信（準備）を開始する。
【００４０】
ＤＲＥＱ０信号を受けたＤＭＡ転送要求／許可判定回路２は、ＣＰＵ１０からバス権を獲得するためにバス権要求／許可判定回路３を通して、バス権要求信号ＢＲＥＱをバスアービタ１２に送る。そしてバス権を得て、ＤＡＣＫ０信号を入出力モジュール１４に返す。しかし、本ケースの場合は、ＤＡＣＫ０信号が出力し終えるまで、すなわちＤＡＣＫ０信号が一旦“　Ｈｉｇｈ　”レベルになった後、“　Ｌｏｗ　”レベルに戻る前に前記（１）式の条件が成立する。
【００４１】
前記（１）式の条件が成立した場合に、そのまま動作が継続されたとする。すると図４のタイミングチャートに示すように、ＤＡＣＫ０信号によりメモリ１１にデータが書き込まれる瞬間には、入出力モジュール１４の出力レジスタの内容は、本来転送されるべきデータＡではなく、次に転送されるべきデータＢに置き換わっている可能性が高い（設定時間Ｔ１ｍｉｎは、Ｔ１の予想最短時間であるので、経過時間ＴｅｌがＴ１ｍｉｎを超えても、出力レジスタ内にデータＡが残っている場合もあり得る）。
【００４２】
（１）式の条件が成立すると、直ちに比較回路８ｃより割込み信号がＣＰＵ１０に送られる。これにより、ＣＰＵ１０は異常転送よるデータの消失、すなわちオーバーランエラーが高い確率で生じる状態が発生したことを認識することができる。
【００４３】
ＣＰＵ１０がこのような状態の発生を認識せずに、その後の処理を進めれば、誤った転送データに基づく処理がなされて取り返しのつかない事態が発生し得る。しかし本発明の構成によれば、ＣＰＵ１０は、このような事態の発生を事前に認識することができる。従って、その後の処理を中止したり、あるいは転送データを破棄して入出力モジュール１４に再度転送要求を発生させるなどの対策を採ることができ、取り返しのつかない事態を回避することが可能となる。
【図面の簡単な説明】
【図１】本発明のＤＭＡコントローラの構成ブロック図である。
【図２】本発明のＤＭＡコントローラを用いたＤＭＡ転送回路の構成例である。
【図３】ＤＭＡ転送が正常に行われる場合のタイミングチャートである。
【図４】ＤＭＡ転送にオーバーランエラーが発生する場合のタイミングチャートである。
【図５】従来技術を示す図１相当図である。
【図６】従来技術を示す図２相当図である。
【符号の説明】
図面中、１はＤＭＡコントローラ、８はオーバーラン検出回路、８ａは最短時間設定レジスタ、８ｂはカウンタタイマ、８ｃは比較回路、１０はＣＰＵ、１１はメモリ、１２はバスアービタ、１４、１５は入出力モジュールである。
【図１】
2004013395.tif 000003
【図２】
2004013395.tif 000004
【図３】
2004013395.tif 000005
【図４】
2004013395.tif 000006
【図５】
2004013395.tif 000007
【図６】
2004013395.tif 000008