(57)【特許請求の範囲】
【請求項１】
外部コントローラ手段により設定された少なくとも１組以上のテーブルデータに基づいて複数の外部インターフェースの中の第１、第２の外部インターフェースの間でバッファメモリを介したデータ転送を行うための制御を行うデータ転送制御装置であって、
前記テーブルデータが、
一方の外部インターフェース用のテーブルデータを複写して他方の外部インターフェース用のテーブルデータを生成することを指定する複写指定パラメータと、
一連のテーブルデータの最後の組であることを示す転送終了パラメータと、
前記転送終了パラメータに基づき複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを求めるための制御パラメータとを含み、
前記複写指定パラメータが真である場合には一方の外部インターフェース用のテーブルデータを複写することで生成された他方の外部インターフェース用のテーブルデータに基づいて前記バッファメモリと該他方の外部インターフェースとの間でのデータ転送を行う手段と、
複写元である前記一方の外部インターフェース用のテーブルデータの転送終了パラメータと制御パラメータとが共に偽である場合には複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを偽にし、複写元である前記一方の外部インターフェース用のテーブルデータの転送終了パラメータが真であり制御パラメータが偽である場合には複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを真にする手段と、
複写元である前記一方の外部インターフェース用のテーブルデータの転送終了パラメータと制御パラメータとが共に真である場合には複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを偽にする手段と、
前記バッファメモリと前記第１、第２の外部インターフェースとの間でデータ転送を行う際に前記転送終了パラメータが真である場合には次の転送動作を中断する手段と、
を含み、
前記複写元である前記一方の外部インターフェース用の転送終了パラメータが真であり、前記複写先である前記他方の外部インターフェース用の転送終了パラメータが偽である場合は、前記複写元である前記一方の外部インターフェース側におけるデータ転送動作を終了させ、前記複写先である前記他方の外部インターフェース側におけるデータ転送動作を続行させることを特徴とするデータ転送制御装置。
【請求項２】
外部コントローラ手段により設定された少なくとも１組以上のテーブルデータに基づいて複数の外部インターフェースの中の第１、第２の外部インターフェースの間でバッファメモリを介したデータ転送を行うための制御を行うデータ転送制御装置であって、
前記テーブルデータが、
一方の外部インターフェース用のテーブルデータを複写して他方の外部インターフェース用のテーブルデータを生成することを指定する複写指定パラメータと、
一連のテーブルデータの最後の組であることを示す転送終了パラメータと、
前記転送終了パラメータに基づき複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを求めるための制御パラメータとを含み、
前記複写指定パラメータが真である場合には一方の外部インターフェース用のテーブルデータを複写することで生成された他方の外部インターフェース用のテーブルデータに基づいて前記バッファメモリと該他方の外部インターフェースとの間でのデータ転送を行う手段と、
複写元である前記一方の外部インターフェース用のテーブルデータの転送終了パラメータと制御パラメータとが共に偽である場合には複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを偽にし、複写元である前記一方の外部インターフェース用のテーブルデータの転送終了パラメータが真であり制御パラメータが偽である場合には複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを真にする手段と、
複写元である前記一方の外部インターフェース用のテーブルデータの転送終了パラメーターが偽であり制御パラメータが真である場合には複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを真にする手段と、
前記バッファメモリと前記第１、第２の外部インターフェースとの間でデータ転送を行う際に前記転送終了パラメータが真である場合には次の転送動作を中断する手段と、
を含み、
前記複写元である前記一方の外部インターフェース用の転送終了パラメータが偽であり、前記複写先である前記他方の外部インターフェース用の転送終了パラメータが真である場合は、前記複写元である前記一方の外部インターフェース側におけるデータ転送動作を続行させ、前記複写先である前記他方の外部インターフェース側におけるデータ転送動作を終了させることを特徴とするデータ転送制御装置。
【請求項３】
請求項１または２において、
前記テーブルデータが、転送開始アドレスと、転送数と、転送数の単位を選択するための転送数単位選択パラメータとを含み、
前記バッファメモリと前記第１、第２の外部インターフェースとの間において転送するデータの転送数をカウントする転送数カウント手段と、
前記テーブルデータに含まれる前記転送数単位選択パラメータにより転送数の単位を選択し、選択された単位に基づいて前記テーブルデータに含まれる前記転送数を変換し、変換された転送数を前記転送数カウント手段に対して設定する転送数設定手段と、
前記外部コントローラ手段からの転送開始命令に基づいてデータ転送を開始し、前記バッファメモリと前記第１、第２の外部インターフェースとの間で前記転送開始アドレスと前記転送数カウント手段におけるカウント結果とに基づき指定されるアドレス範囲のデータを転送する手段と、
を含むことを特徴とするデータ転送制御装置。
【請求項４】
請求項３において、
前記転送数設定手段が、
前記テーブルデータに含まれる前記転送数の単位を変更するための乗数を格納する乗数格納手段と、
前記テーブルデータに含まれる前記転送数と前記乗数との乗算結果を出力する乗算手段と、
前記転送数単位選択パラメータに基づいて前記乗算手段の出力と前記テーブルデータに含まれる前記転送数のいずれか一方を選択する手段と、
を含むことを特徴とするデータ転送制御装置。
【請求項５】
請求項１〜４のいずれかにおいて、
前記第１の外部インターフェースと前記バッファメモリとの間のデータ転送用のテーブルデータと、前記第２の外部インターフェースと前記バッファメモリとの間のデータ転送用のテーブルデータとが別々に設定されたことを特徴とするデータ転送制御装置。
【請求項６】
請求項１〜５のいずれかのデータ転送制御装置と、前記第１、第２の外部インターフェースに接続される外部装置と、バッファメモリと、外部コントローラ手段とを含むことを特徴とする情報処理装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、ブロック毎のデータ転送が可能なデータ転送制御装置及びこれを含む情報処理装置に関する。
【０００２】
【従来の技術】
高速にデータ転送を行う手法として、ＤＭＡ方式がよく使われる。このＤＭＡ方式では、データ転送に伴い必要となるタイミング信号の発生はハードウェア装置であるＤＭＡコントローラにより行われる。そして、データ転送中は外部コントローラ（例えばＣＰＵ）のプログラムによる制御を必要とせずＤＭＡコントローラにより転送を制御し、転送終了時にそのステータスを外部コントローラに知らせる。
【０００３】
外部コントローラがこのようなＤＭＡコントローラにデータ転送を命令する場合、転送元・転送先それぞれの転送開始アドレス及び転送数からなる管理情報（以下、このような管理情報をテーブルデータと呼ぶ）を指定する。このようにして指定された領域は一組のデータブロックとして連続して転送されることになる。なお、ここで転送数については転送終了アドレスでも可能であり、また転送元または転送先が単なる入力ポートまたは出力ポートである場合には開始アドレスは必要なくなる。
【０００４】
さて、ハードディスク、光磁気ディスク等のディスクメモリをコントロールするＤＭＡコントローラでは、先読み、ＬＲＵと呼ばれる手法が多く用いられている。先読みと呼ばれる手法では、外部コントローラからディスクの中のｎ番目のセクタを読み出せという命令が来た場合、次のｎ＋１番目、ｎ＋２番目のセクタをも先読みし、先読みしたデータをバッファメモリに格納しておく。ディスクメモリ用のＤＭＡコントローラにおいては、ディスクメモリからのデータ読み出しに一番時間がかかる。従って、このように１回のディスク読み出し命令で複数セクタのデータを読み出すようにすれば、データ転送全体の速度を向上させることができるわけである。また、ＬＲＵと呼ばれる手法は、このように先読みにより余分に読み出されたデータを整理する手法であり、バッファメモリに格納されたデータの中で、しばらくアクセスされていないデータを削除する手法である。そして、このように先読み手法によりデータを余分に読み出したり、ＬＲＵ手法により古いデータから順に削除してゆくと、図２４に示すようにデータブロックが物理的に不連続に配置されるという事態が生じる。
【０００５】
しかし、前述のような通常方式のＤＭＡコントローラでは、一回の転送開始命令に対して一組のデータブロックしか指定することができなかった。このため、図２４に示すように物理的に不連続に配置されている複数組のデータブロック４００、４０２、４０４を連続的に転送する場合には、一組のデータブロック転送終了を待ちその後に次のデータブロックを指定してデータ転送を再開させなければならないことになる。従って、外部コントローラにおいて実行される転送制御のためのプログラムのオーバーヘッドが非常に大きくなるという問題が生じていた。
【０００６】
このようなディスクメモリコントローラ用のＤＭＡコントローラで上記の問題を解決したＬＳＩ（以下、ＤＭＣ−１と略）が開発されている。これは、一回の転送開始命令に対して、複数組のデータブロック指定を可能にしたものであり、ＤＭＣ−１が管理するバッファメモリ内にデータブロックを指定するための管理領域を確保し、そこに、図２５（Ａ）に示すように各データブロックの開始アドレス５０３〜５０６を格納してゆくものである。これにより物理的に不連続に配置されているデータブロックの転送を論理的に連続なものとして転送することが可能となった。また、ＤＭＣ−１では、ブロック指定を行うテーブルデータにホストイネーブルビット（Ｈビット）５０１とディスクイネーブルビット（Ｄビット）５０２を含ませている。そして、例えばＨ＝１、Ｄ＝０（１が真で、０が偽）ならば、そのデータブロックについてはホスト（主としてＳＣＳＩインターフェースを想定している）とバッファメモリ間でデータ転送が行われる。また、Ｈ＝０、Ｄ＝１ならば、そのデータブロックについてはディスクとバッファメモリ間でデータ転送が行われる。これにより、１つのテーブルデータでホスト側とディスク側双方のデータ転送が可能となり、ディスクメモリではよく使用される先読みなどのキャッシュ手法の実現が容易となっている。
【０００７】
しかし、ＤＭＣ−１では、一組のデータブロック指定を１セクタ単位でしか行うことができず、管理領域のサイズが非常に大きくなるという問題があった。即ち、例えば１００セクタの転送を行う場合には、１００セクタの全てについて図２５（Ａ）に示すようなテーブルデータが必要となり、従って１００個のテーブルデータを格納できる領域をバッファメモリ上に設けなければならならなかった。そして、実際問題として領域サイズには上限が存在するので、これを超えるような場合には複数回に転送を分ける必要があり、制御が複雑になるという問題があった。更に、一度外部コントローラが転送開始命令を出すと転送終了まで次のデータブロック指定ができないため、データブロック数が多い場合には外部コントローラのプログラムオーバーヘッドが大きくなるという問題もあった。
【０００８】
その後、以下に述べるような方式で上記のＤＭＣ−１の問題点を改善したＬＳＩ（以下、ＤＭＣ−２と略す）が開発されている。このＤＭＣ−２では、ディスク側の転送については図２５（Ｃ）に示すように開始アドレス５１０〜５１２と共に転送セクタ数５０８についても指定できる。従って、上記のＤＭＣ−１と異なり、データ転送を行う全てのセクタについて開始アドレスを指定する必要がなく、物理的に連続するセクタについてはまとめて一つのデータブロックとして指定できる。この点においてＤＭＣ−２は、ＤＭＣ−１に比べ外部コントローラのプログラムオーバーヘッドを軽減できる。また、ＤＭＣ−２では、データブロックを指定するための管理領域はＤＭＣ−１と異なりＬＳＩ内部に確保されており、この管理領域はキューバッファとして動作する。従って、転送動作中に先に指定した領域が空けば次のデータブロック指定を追加することができ、この点においても外部コントローラのプログラムオーバーヘッドを軽減できる。また、ＤＭＣ−２では、ホスト側のデータブロック指定にもキューバッファを導入しており、転送中のブロック指定の追加を可能にしている。
【０００９】
【発明が解決しようとする課題】
しかし、上記ＤＭＣ−２では、図２５（Ｂ）に示すように、ホスト側のブロック指定については開始アドレス５１３〜５１５と転送バイト数５１６〜５１８を指定する。即ち、ホスト−バッファメモリ間ではバイト単位でデータを転送し、バッファメモリ−ディスク間ではセクタ単位でデータを転送することになる。従って、ホスト−ディスク間の転送を行う場合、転送セクタ数から転送バイト数へあるいは逆の変換作業が必要となるという問題があった。また、実際のシステム動作上でのデータ転送を考慮すると、転送単位としてセクタよりもむしろクラスタ、セグメントというようなセクタのあつまりで行われることが多い。従って、このような転送をセクタ単位での指定で行うと指定情報としては冗長となり、外部コントローラのプログラムオーバーヘッド増大の要因となる。
【００１０】
ここで、先に述べたＤＭＣ−１のようにデータブロック指定情報を共有としホスト側の転送も複数のデータブロック指定が可能なようにすることが考えられるが、情報共有化には次のような問題がある。例えばテーブルデータをディスク側とホスト側とで共有化してディスク側からバッファメモリを介してホスト側へとデータ転送を行う場合を考える。この場合には、ＤＭＣ−２の管理領域にディスク−バッファメモリ間でのデータ転送のためのテーブルデータを格納し、このテーブルデータをバッファメモリ−ホスト間でのデータ転送にも使用することになる。しかし、通常、ディスクメモリの読み出し・書き込み動作には時間がかかるため、ディスク側の方がホスト側よりもデータ転送速度が遅い。そして、ＤＭＣ−２では、テーブルデータを格納する管理領域は例えば２段のキューバッファ構造となっているため、このキューバッファにディスク−バッファメモリ間用のテーブルデータが２つ格納されると、バッファメモリ−ホスト間用のテーブルデータを新たに追加することができない。この結果、バッファメモリ−ホスト間のデータ転送は、ディスク−バッファメモリ間のデータ転送が終わるまで待たされてしまうという問題が生じる。
【００１１】
これを解決する方法として、ＤＭＣ−２のようにテーブルデータを共有にはせずに物理的に分けてしまうことが考えられる。こうすると、上記の問題は解決されるものの次のような別の問題が発生する。つまり、両者に共通するテーブルデータについても外部コントローラによって両方に指定しなければならず、二度手間となってしまうという問題である。
【００１２】
また、転送動作の終了方法にも以下のような問題がある。即ち、ＤＭＣ−２ではキューバッファが空になった状態を終了と判断している。従って、例えばディスクからデータを読み出す場合においてホスト側の転送速度の方がディスク側よりも速い場合を考えると、この場合にはホスト側の管理領域が早めに空になる可能性が高く、従って、ホスト側の転送動作が管理領域が空になった時点で終了してしまうことになる。従って、ホスト側の残りのデータブロックを転送する場合には、転送開始命令を再度送って転送を再開しなければならなく、外部コントローラのプログラムオーバーヘッドが増大するという問題があった。
【００１３】
さて、最後に外部インターフェースとの接続上の課題がある。外部インターフェースとしてはＳＣＳＩインターフェースが代表的であるが、通常は上で述べたＤＭＣ−１やＤＭＣ−２とは別にＳＣＳＩコントロールＬＳＩを用意し、一つのシステムとすることが多い。近年、集積化が進み、上記の２種のＬＳＩを１チップ化した製品も市販されているが、内部の基本構成は２チップを単純に接続したものに等しい。このとき、ＳＣＳＩコントローラ側及びＤＭＣ−１（またはＤＭＣ−２）側は、別々に転送数カウンタを持っているため転送数を設定するには２カ所に設定しなければならない。これはプログラム開発時のバグの要因となる。さらに最大転送数を増やそうと回路を変更すると、両方のカウンタの段数を増やさなければならない。これは回路規模の増大を招きＬＳＩとしての信頼性の低下につながる。
【００１４】
本発明は以上述べた課題を解決するためになされたものであり、その目的とするところは、データブロック指定の方法を改善することにより外部コントローラの負荷を減少させ、効率的なデータ転送を実現できるデータ転送制御装置及びこれを含む情報処理装置を提供するところにある。
【００１５】
また、本発明の他の目的は、複数のインターフェース間でのバッファメモリを介したデータ転送を１つの転送数カウンタで制御できるデータ転送制御装置及びこれを含む情報処理装置を提供するところにある。
【００１６】
【課題を解決するための手段及び作用】
上記目的を達成するために本発明は、外部コントローラ手段により設定された少なくとも１組以上のテーブルデータに基づいて複数の外部インターフェースの中の第１、第２の外部インターフェースの間でバッファメモリを介したデータ転送を行うための制御を行うデータ転送制御装置であって、
前記テーブルデータが、転送開始アドレスと、転送数と、転送数の単位を選択するための転送数単位選択パラメータとを含み、前記バッファメモリと前記第１、第２の外部インターフェースとの間において転送するデータの転送数をカウントする転送数カウント手段と、前記テーブルデータに含まれる前記転送数単位選択パラメータにより転送数の単位を選択し、選択された単位に基づいて前記テーブルデータに含まれる前記転送数を変換し、変換された転送数を前記転送数カウント手段に対して設定する転送数設定手段と、前記外部コントローラ手段からの転送開始命令に基づいてデータ転送を開始し、前記バッファメモリと前記第１、第２の外部インターフェースとの間で前記転送開始アドレスと前記転送数カウント手段におけるカウント結果とに基づき指定されるアドレス範囲のデータを転送する手段とを含むことを特徴とする。
【００１７】
本発明によれば、テーブルデータは、転送開始アドレスと、転送数と、転送数単位選択パラメータとを含む。このテーブルデータは外部コントローラ手段により設定されるものであり、本発明においてはバッファメモリに格納してもよいし、データ転送制御装置内の記憶手段に格納してもよい。転送数カウント手段は、バッファメモリと第１、第２の外部インターフェースとの間において転送するデータの転送数をカウントするものであり、転送数設定手段は、転送数カウント手段においてカウントされる転送数を設定するものである。そして、転送数設定手段においては、テーブルデータの中の転送数単位選択パラメータにより転送数の単位の選択、例えばセクタ単位なのかセグメント単位なのかの選択が行われる。そして、選択された単位に基づいてテーブルデータに含まれる転送数が変換され、変換された転送数が転送数カウント手段に設定されることになる。データ転送手段は、外部コントローラから転送開始命令が発行されるとデータ転送を開始する。そして、この場合の転送すべきデータのアドレス範囲は、テーブルデータの中の転送開始アドレスと、転送数カウント手段からのカウント結果とに基づき決められることになる。以上のように本発明によれば、転送数単位選択パラメータにより転送数の単位を任意に選択することが可能となる。
【００１８】
また、本発明では、前記転送数設定手段が、前記テーブルデータに含まれる前記転送数の単位を変更するための乗数を格納する乗数格納手段と、前記テーブルデータに含まれる前記転送数と前記乗数との乗算結果を出力する乗算手段と、前記転送数単位選択パラメータに基づいて前記乗算手段の出力と前記テーブルデータに含まれる前記転送数のいずれか一方を選択する手段とを含むことを特徴とする。
【００１９】
この態様によれば、転送数設定手段が、乗数格納手段と乗算手段と選択手段とを含む。そして、乗数格納手段にはテーブルデータに含まれる転送数の単位を変更するための乗数が格納される。例えば１セグメントが４セクタであった場合には、この４が乗数として格納される。また、乗算手段では、テーブルデータに含まれる転送数と前記乗数とが乗算される。これにより例えば転送数が１００である場合には４００が乗算結果として出力される。そして、選択手段では、転送数単位選択パラメータに基づいて、乗算手段の出力とテーブルデータに含まれる転送数のいずれか一方が選択される。これにより転送数単位選択パラメータにより例えばセクタ単位が選択されると乗算結果である４００が出力され、セグメント単位が選択されるとテーブルデータの中の転送数である１００がそのまま出力されることになる。そして、これらの出力に基づいて転送数カウント手段においてカウントされる転送数が設定されることになる。
【００２０】
また、本発明は、外部コントローラ手段により設定された少なくとも１組以上のテーブルデータに基づいて複数の外部インターフェースの中の第１、第２の外部インターフェースの間でバッファメモリを介したデータ転送を行うための制御を行うデータ転送制御装置であって、
前記テーブルデータが、該テーブルデータが一連のテーブルデータの最後の組であることを示す転送終了パラメータを含み、前記バッファメモリと前記第１、第２の外部インターフェースとの間でデータ転送を行う際に前記転送終了パラメータが真である場合には次の転送動作を中断する手段を含むことを特徴とする。
【００２１】
この態様によれば、テーブルデータが転送終了パラメータを含む。そして、データ転送の際に、そのデータ転送を行うためのテーブルデータに含まれる転送終了パラメータが真である場合には、次の転送動作が中断される。このように本発明によれば、テーブルデータに転送終了パラメータを含ませるという簡易な手法でデータ転送の終了制御を実現することができる。
【００２２】
また、本発明では、前記第１の外部インターフェースと前記バッファメモリとの間のデータ転送用のテーブルデータと、前記第２の外部インターフェースと前記バッファメモリとの間のデータ転送用のテーブルデータとが別々に設定されたことを特徴とする。
【００２３】
この態様によれば、第１の外部インターフェース用のテーブルデータと第２の外部インターフェース用のテーブルデータとが別々に設定される。これにより第１の外部インターフェース側と第２の外部インターフェース側とで転送動作を別々に制御できることになる。例えば、テーブルデータに転送数単位選択パラメータを含ませた場合には、第１の外部インターフェース側の転送数単位と第２の外部インターフェース側の転送数単位とを異ならせることが可能となる。また、例えば、テーブルデータに転送終了パラメータを含ませた場合には、第１の外部インターフェース側の転送終了動作と、第２の外部インターフェース側の転送終了動作とを異ならせることが可能となる。
【００２４】
また、本発明は、外部コントローラ手段により設定された少なくとも１組以上のテーブルデータに基づいて複数の外部インターフェースの中の第１、第２の外部インターフェースの間でバッファメモリを介したデータ転送を行うための制御を行うデータ転送制御装置であって、
前記テーブルデータが、一方の外部インターフェース用のテーブルデータを複写して他方の外部インターフェース用のテーブルデータを生成することを指定する複写指定パラメータを含み、前記複写指定パラメータが真である場合には一方の外部インターフェース用のテーブルデータを複写することで生成された他方の外部インターフェース用のテーブルデータに基づいて前記バッファメモリと該他方の外部インターフェースとの間でのデータ転送を行う手段を含むことを特徴とする。
【００２５】
本発明によれば、テーブルデータが複写指定パラメータを含む。そして、この複写指定パラメータを真とすることにより、一方の外部インターフェース用のテーブルデータを複写して他方の外部インターフェース用のテーブルデータを生成できる。そして、この複写されたテーブルデータに基づいてバッファメモリと該他方の外部インターフェースとの間のデータ転送が行われることになる。このように本発明によれば、複写指定パラメータを用いることにより、第１、第２の外部インターフェース間でテーブルデータを共通化することが可能となる。
【００２６】
また、本発明では、前記テーブルデータが、一連のテーブルデータの最後の組であることを示す転送終了パラメータと、該転送終了パラメータに基づき複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを求めるための制御パラメータとを含み、複写元である前記一方の外部インターフェース用のテーブルデータの転送終了パラメーターと制御パラメータとが共に偽である場合には複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを偽にし、複写元である前記一方の外部インターフェース用のテーブルデータの転送終了パラメーターが真であり制御パラメータが偽である場合には複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを真にする手段を含むことを特徴とする。
【００２７】
この態様によれば、テーブルデータが、複写指定パラメータの他に転送終了パラメータと制御パラメータとを含む。そして、複写元の転送終了パラメータと制御パラメータが共に偽である場合には、複写先の転送終了パラメータが偽に設定され、複写元の転送終了パラメータが真で制御パラメータが偽である場合には複写先の転送終了パラメータが真に設定される。これにより一方の外部インターフェースからバッファメモリにデータを転送し、このデータをそのまま他方の外部インターフェースに転送するという動作を、複写元のテーブルデータを設定するだけで実現できることになる。即ち、この場合には、まず複写元のテーブルデータの転送終了パラメータと制御パラメータとを共に偽に設定する。このように設定しても、複写先の転送終了パラメータは偽となるため複写先の転送動作は終了しない。従って、これにより一方の外部インターフェースからバッファメモリに転送されたデータを、そのまま他方の外部インターフェースに出力すること可能となる。そして、データ転送終了時には、複写元のテーブルデータの転送終了パラメータを真とし制御パラメータを偽とする。これにより一方の外部インターフェース側のデータ転送が終了する。そして、この場合、複写先の転送終了パラメータも真となるため、他方の外部インターフェース側のデータ転送も終了させることが可能となる。
【００２８】
また、本発明では、前記テーブルデータが、一連のテーブルデータの最後の組であることを示す転送終了パラメータと、該転送終了パラメータに基づき複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを求めるための制御パラメータとを含み、複写元である前記一方の外部インターフェース用のテーブルデータの転送終了パラメーターと制御パラメータとが共に真である場合には複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを偽にする手段を含むことを特徴とする。
【００２９】
この態様によれば、複写元の転送終了パラメータと制御パラメータが共に真である場合には、複写先の転送終了パラメータが偽に設定される。これにより、例えば、いわゆるキャッシュ方式のデータ読み出しが可能となる。即ち、この場合には、複写元のテーブルデータの転送終了パラメータと制御パラメータとを共に真に設定する。これにより一方の外部インターフェース側のデータ転送は終了することになる。これに対して、複写先のテーブルデータの転送終了パラメータは偽になるため、他方の外部インターフェース側のデータ転送は終了しない。従って、他方の外部インターフェース側は、ヒットした他のデータブロックを読み出すことが可能となり、これによりキャッシュ方式のデータ読み出しが可能となる。
【００３０】
また、本発明では、前記テーブルデータが、一連のテーブルデータの最後の組であることを示す転送終了パラメータと、該転送終了パラメータに基づき複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを求めるための制御パラメータとを含み、複写元である前記一方の外部インターフェース用のテーブルデータの転送終了パラメータが偽であり制御パラメータが真である場合には複写先である前記他方の外部インターフェース用のテーブルデータの転送終了パラメータを真にする手段を含むことを特徴とする。
【００３１】
この態様によれば、複写元の転送終了パラメータが偽であり制御パラメータが真である場合には、複写先の転送終了パラメータが真に設定される。これにより、例えば、いわゆる先読み方式のデータ読み出しが可能となる。即ち、この場合には、複写元のテーブルデータの転送終了パラメータを偽に設定し制御パラメータを真に設定する。これにより一方の外部インターフェース側のデータ転送は終了せずデータ転送が続行可能となる。これに対して、複写先のテーブルデータの転送終了パラメータは真になるため、他方の外部インターフェース側のデータ転送は終了する。従って、一方の外部インターフェース側が、隣のアドレスのデータを順次読み出すことが可能となり、これにより先読み方式のデータ読み出しが可能となる。
【００４０】
また、本発明に係る情報処理装置は、上記のいずれかのデータ転送制御装置と、前記第１、第２の外部インターフェースに接続される外部装置と、バッファメモリと、外部コントローラ手段とを含むことを特徴とする。
【００４１】
本発明によれば、第１、第２の外部インターフェースに接続される外部装置間で効率的なデータ転送が可能な情報処理装置を実現できる。
【００４２】
【実施例】
以下、本発明について実施例をもとにして説明する。
１．第１の実施例
図１には、本発明の第１の実施例に係るデータ転送制御装置（以下、ＤＴＲＣと略す）３０２及びその周辺装置からなる情報処理装置のブロック図が示される。ＤＴＲＣ３０２は、４つのインターフェース、即ちＣＰＵインターフェース３０９、第１の外部インターフェース３０６、第２の外部インターフェース３０８及びバッファメモリインターフェース３０７を有している。ＣＰＵインターフェース３０９はＣＰＵ（外部コントローラ）３０３を接続するインターフェースであり、ＣＰＵ３０３はＤＴＲＣ３０２内部のレジスタを設定することによりＤＴＲＣを制御する。第１、第２の外部インターフェース３０６、３０８は外部装置を接続するインターフェースであり、外部装置との間でデータ転送を行うためのものである。具体的には第１の外部インターフェース３０６に接続する外部装置としてホストコンピュータ３０４を想定し、第２の外部インターフェース３０８に接続する外部装置としてディスクメモリ３０５を想定して以後説明を行う。バッファメモリインターフェース３０７はバッファメモリ３０１を接続するインターフェースであり、バッファメモリ３０１には第１、第２の外部インターフェース３０６、３０８を通じて転送されるデータが格納される。バッファメモリ３０１は、ＣＰＵインターフェース３０９を通してＣＰＵ３０３との間でもデータ転送が可能となっている。
【００４３】
バッファメモリ３０１内には、テーブル領域３１０が設けられ、このテーブル領域３１０にはＣＰＵ３０３により少なくとも１組以上のテーブルデータが設定される。このテーブルデータは、後述するように転送の開始アドレスと、転送数と、転送数の単位を選択するための転送数単位選択パラメータとを含む。また、テーブルデータは、転送終了の制御を行う場合には転送終了パラメータを含み、テーブルデータの複写を行う場合には複写指定パラメータ、制御パラメータをも含む。そして、ＤＴＲＣ３０２内には転送数カウンタ３１３が設けられ、バッファメモリ３０１と第１、第２の外部インターフェース３０４、３０５との間において転送するデータの転送数がカウントされる。そして、ＤＴＲＣ３０２に設けられた転送数設定部３１４は、この転送数カウンタ３１３においてカウントされる転送数を設定する。この設定は以下のように行われる。即ち、転送数設定部３１４において、前記テーブルデータに含まれる転送数単位選択パラメータにより転送数の単位が選択される。具体的には、例えばセクタ単位なのかセグメント単位なのかの選択が行われる。そして、この選択された単位に基づいてテーブルデータに含まれる転送数が変換され、変換された転送数が転送数カウンタ３１３に設定される。データ転送部３１２は、ＣＰＵ３０３から転送開始命令が発行されるとデータ転送を開始する。そして、この場合の転送すべきデータのアドレス範囲は、テーブルデータの中の開始アドレスと、転送数カウンタ３１３からのカウント結果とに基づき決められることになる。
【００４４】
なお、転送終了の制御を行う場合、テーブルデータの複写を行う場合には、ＤＴＲＣ３０２はこれらの処理を実現するための手段を更に含むことになる。また、テーブルデータは上記のようにテーブル領域３１０に格納されているが、実際にテーブルデータで指定されるデータ転送を行う場合には、本第１の実施例ではＤＴＲＣ３０２内にレジスタを設け、このレジスタにテーブル領域３１０からの該当するテーブルデータを格納して処理を実行している。更に、データ転送処理の効率化、インテリジェント化を図るためには、テーブルデータを第１、第２の外部インターフェース用に別々に設定することが望ましく、また、データ転送部３１２、転送数カウンタ３１３、転送数設定部３１４も第１、第２の外部インターフェース用に別々に設けることが望ましい。
【００４５】
図２には、ＤＴＲＣ内部の詳細なブロック図の一例が示される。ここで、セグメントサイズレジスタ１０１は１セグメント当たりのセクタ数を設定するレジスタである。セクタサイズレジスタ１０２は１セクタあたりのバイト数を設定するレジスタである。コントロールレジスタ１０４は、転送開始時にＣＰＵからＤＴＲＣに対して転送開始命令１０５、１０６を伝え、また転送終了時にＤＴＲＣからＣＰＵに対して終了状態信号１０７、１０８を伝えるためのレジスタである。転送開始命令は第１の外部インターフェース３０６用と第２の外部インターフェース３０８用とで２種類ある。転送ブロック指定レジスタ１０９、１１０は、転送の開始アドレスと転送数及び後述のパラメータを含む１ブロック分のテーブルデータをデータ転送実行時に格納するためのレジスタである。
【００４６】
さて、本実施例においては、テーブルデータは図３（Ａ）に示すようなフォーマットとなっている。図３（Ａ）において、第１バイトのビット５からビット０により転送数が設定される。また、第１バイトのビット６が転送数単位選択パラメータ（以下これをＳビットと呼ぶ）であり、この値によって転送数の単位が変換される。例えばＳビット＝１のとき転送数はセグメント単位で指定され、Ｓビット＝０のときセクタ単位で指定される。また、第２バイトから第４バイトで転送の開始アドレスが指定される。この例では第２、第３、第４バイトは、開始アドレスの下位、中位、上位に対応している。
【００４７】
また、第１バイトのビット７は転送終了パラメータ（以下、これをＥビットと呼ぶ）であり、このビットの指定によってそのテーブルデータが一連の転送動作における最後の組であることが示される。また、第４バイトのビット６は複写指定パラメータ（以下、これをＣビットと呼ぶ）であり、このビットの指定によって一方のテーブルデータの他方への複写の指定が行われる。また、第４バイトのビット７は制御パラメータ（以下、これをＭビットと呼ぶ）であり、このビットの指定によって上記Ｃビットによる複写動作が後述のように制御される。図３（Ｃ）に示すようにバッファメモリ内の下位アドレス側から順にホスト側テーブル領域、ディスク側テーブル領域が確保される。そして、テーブルデータはＣＰＵによりこれらの領域に格納されることになる。
【００４８】
乗算回路１１１、１１２は、セグメントサイズレジスタ１０１に格納されるセグメントサイズと転送ブロック指定レジスタ１０９、１１０に格納される転送数との乗算処理を行うものである。例えば、セグメントサイズが４で（１セグメント＝４セクタとする）、転送数が１０の場合は、４×１０＝４０が出力されることになる。セレクタ１１３、１１４は、乗算回路１１１、１１２の乗算結果、転送ブロック指定レジスタ１０９、１１０に格納される転送数のどちらかを選択するものであり、Ｓビットが１の場合には乗算結果を、０の場合には転送ブロック指定レジスタ１０９、１１０に格納される転送数を選択することになる。本実施例によれば、このような構成とすることにより、転送数の単位を変更した場合にもセクタカウンタ１１５、１１６等を共通に使用することができ、回路の小規模化、制御の簡易化を図ることができる。
【００４９】
セクタカウンタ１１５、１１６はデータ転送時の転送セクタ数をカウントするものであり、１セクタ分転送されるごとに−１される。セクタサイズカウンタ１１７、１１８はデータ転送時の転送バイト数をカウントするものであり、１バイト転送されるごとに−１される。アドレスカウンタ１１９、１２０はデータ転送時のバッファメモリアドレスを指定するものであり、１バイト転送されるごとに＋１される。テーブルライトアドレスカウンタ１２１、１２２はＣＰＵからテーブル領域へテーブルを設定するときにテーブルアドレスを出力するものであり、テーブル領域に１バイト書かれるたびに＋１される。なお、このテーブルライトアドレスカウンタの出力は後述するテーブル複写時にも使用される。テーブルリードアドレスカウンタ１２３、１２４はバッファメモリ内のテーブル領域に格納されたテーブルデータを転送ブロック指定レジスタ１０９、１１０にロードするときに使用されるものであり、１バイトロードするごとに＋１される。アドレスセレクタ１２５は調停回路１２６の指示に応じてデータアドレスかテーブルリードアドレスかテーブルライトアドレスかを選択するものである。タイミング発生回路１２７は、バッファメモリの読み出し、書き込みに必要なタイミング信号を発生させるものである。バスセレクタ１２８は調停回路１２６の指示に応じてテーブルデータか転送データかを選択するものである。
【００５０】
調停回路１２６は２つの転送制御回路１２９、１３０からの転送要求の競合状態を調整するものであり最も優先度の高い要求を許可し各部の制御を行うものである。即ち、本実施例では、バッファメモリには、第１の外部インターフェース用のテーブルデータ及び実際に転送するデータ、並びに、第２の外部インターフェース用のテーブルデータ及び実際に転送するデータというように、４種類のデータが格納されている。そして、これらの４種類のデータに対してバッファメモリは１つであり、これらのデータへのアクセスが競合した場合にこれを調停する手段が必要となる。そのために、本実施例では、バッファメモリの共有化手段として、調停回路１２６が設けられている。
【００５１】
転送制御回路１２９、１３０は、データ転送時に必要となる種々のタイミングを発生させるものであり、以下に述べるような動作を行う。
【００５２】
はじめに、第１の外部インターフェース３０６側についてのみ転送動作を行うものとする。この場合には、ＣＰＵによりホスト側テーブル領域にテーブルデータが設定される。ここでは、転送数はセグメント単位で指定されるものとし、この場合にはＳビットは１にセットされる。セグメントサイズレジスタ１０２にはあらかじめ１セグメントあたりのセクタ数がセットされており、ここでは２となっているものとする。またセクタサイズは８バイトとする。ＣＰＵがテーブルデータを設定した時点でＳビットおよび転送数は確定する。そのため乗算回路１１１を通して乗算結果もすぐに出力される。この場合、Ｓビットは１であるのでセレクタ１１３は乗算回路１１１の出力を選択することになる。
【００５３】
次に、ＣＰＵがコントロールレジスタ１０４に転送開始命令を送ることによって転送制御回路１２９の動作が開始する。図４には、転送制御回路１２９の状態遷移図が示される。図４に示すように、転送制御回路１２９の状態は以下のように遷移する。
状態１：ＣＰＵからの開始命令を待っている状態である。開始命令がくるとテーブルデータをロードするために状態２へ移る。
状態２：ホスト側テーブル領域に格納されているテーブルデータを転送ブロック指定レジスタ１０９にロードする。本実施例では転送ブロック指定レジスタ１０９の容量が１テーブルデータ分しかないので、１テーブルデータをロードしたところで状態３へ移る。なお、状態２の時点で転送ブロック指定レジスタ１０９に格納されているテーブルデータが存在しないときは、新たなテーブルデータか格納されるまでこの状態に留まることになる。
状態３：ロードしたテーブルデータを基にしてデータ転送を行う。この場合、本実施例では図５（Ａ）のタイミング図に示すようなタイミング信号を発生してカウンタを制御している。なお、図５（Ｂ）には、サイズカウンタ値が８から０に変化する時の詳細なタイミング図が示され、図５（Ｃ）には、サイズカウンタ値が６の時のＲＥＱ信号、ＡＣＫ信号等の詳細なタイミング図が示される。
【００５４】
図５（Ａ）の時刻ｔ１に示すように、転送制御回路１２９は、まず、セクタカウンタ１１５、セクタサイズカウンタ１１７及びアドレスカウンタ１１９へ入力されるロード信号を真にしてカウンタの初期値をロードする。具体的には、アドレスカウンタ１１９には０がロードされ、セクタカウンタ１１５には２がロードされ、セクタサイズカウンタ１１７には８がロードされる。その後、第１の外部インターフェース３０６からのＲＥＱ信号に応じてタイミング発生回路１２７が動作し、１バイトのデータの転送が行われる。そして、図５（Ｂ）の時刻ｔ２に示すように、１バイトのデータ転送後、セクタサイズカウンタ１１７をカウンタイネーブルし、セクタサイズカウンタ値を−１する。これによりセクタサイズカウンタ値は７になる。そして、これと同時にアドレスカウンタ１１９もカウンタイネーブルし、アドレスカウンタ値を＋１して、アドレスカウンタ値を０から１に更新する。その後、ＲＥＱ信号に対応するＡＣＫ信号を第１の外部インターフェース３０６に対して返す。以下同様にバイト転送を行い、セクタサイズカウンタ値が０になると、図５（Ａ）の時刻ｔ３に示すように転送制御回路１２９はセクタカウンタをカウンタイネーブルし、セクタカウンタ値を−１して、セクタカウンタ値を２から１に更新する。ここでもしセクタカウンタ値が０でなければ、図５（Ａ）の時刻ｔ４に示すように、セクタサイズカウンタ１１７に入力されるロード信号を真にし、上記の動作を繰り返す。もしセクタカウンタ値が０であれば、図５（Ａ）の時刻ｔ５に示すように、このテーブルデータについての転送を終了し、図４における状態４へ移る。
状態４：これは後で述べるテーブルデータの複写動作である。ここでは何もせず、無条件で状態５へ移るとする。
【００５５】
このようにして、本実施例では、テーブルデータにＳビットを設けることにより、転送数の単位をセクタ単位とするかセグメント単位とするかの選択が可能となる。ディスクメモリ装置のようなアクセス速度の遅い記憶装置では、見かけのアクセス速度を向上させるために記憶装置側でキャッシュメモリを持つことが多い。この場合、キャッシュメモリのデータ管理単位としては、セクタよりもむしろいくつかのセクタのあつまりであるセグメントを管理単位としたほうが全体としての効率が上がることが多い。したがって、データ転送自体もセグメントを単位として行われる可能性が非常に高いので、本実施例のようにセグメント単位で転送数を指定できるしくみを用意すれば、ＣＰＵから指定する管理情報量が少なくてすむことになる。
【００５６】
一方、ホスト側から要求されるデータブロックはあくまでセクタ単位であり、しかもそれがセグメント境界に一致している保証はない。図６（Ａ）〜（Ｃ）に示すようにセクタの並びとセグメントの並びとの対応は３種類が考えられる。図６（Ａ）には、転送要求セクタが１セグメントの途中から始まる場合が示される。図６（Ｂ）には、転送要求セクタの始まりがセグメントの開始に一致している場合、開始セグメントと終了セグメントを除く中間のセグメントの場合及び終了セクタが１セグメントの終了に一致している場合が示される。図６（Ｃ）には、転送要求セクタが１セグメントの途中で終わる場合が示される。図６（Ａ）、図６（Ｃ）のような場合にはＳビットを０としてセクタ単位で指定を行うことになる。一方、図６（Ｂ）のような場合は、Ｓビットを１としてセグメント単位で指定を行うことになる。このように、本実施例によれば、Ｓビットにより転送数の単位を転送データの状態に応じて任意に選択できるため、データ転送の効率を非常に高めることができる。
【００５７】
次に、転送終了パラメータであるＥビットについて説明する。例えば、今、図３（Ｃ）に示すようにホスト側のテーブル領域に３ブロック分のテーブルデータが格納され、３番目のテーブルデータのみＥビットが１にセットされていたとする。転送制御回路１２９は図４の状態５の終了判断でＥビットの検査を行い、もしＥビットが１にセットされていれば状態１へ戻り転送動作を終了する。一方、Ｅビットが０であれば状態２へ戻り次のテーブルデータをロードし、状態３以下の動作を繰り返すことになる。従って、図３（Ｃ）に示すようなテーブルデータであるときには、３番目のテーブルデータのみＥビットが１に設定されているため、転送制御回路１２９は次のような状態遷移を経て転送動作を終了することになる。
【００５８】
状態１−状態２−状態３−状態４−状態５−状態２−状態３−状態４−状態５−状態２−状態３−状態４−状態５−状態１
このように、本実施例では、Ｅビットを設けることにより、従来のＤＭＣ−２のようにキューバッファが空になった場合にデータ転送を終了させるというような手段を設ける必要がなくなる。また、このＥビットをホスト側とディスク側に独立して設けることが可能となるため、ホスト側とディスク側のデータ転送の終了の制御をお互いに影響されずに独立に行うことが可能となる。
【００５９】
次に複写指定パラメータ（Ｃビット）及び制御パラメータ（Ｍビット）について説明する。データ転送動作の一例としてディスク側からホスト側へとデータ転送を行う場合を考える。始めにディスク側のテーブル領域に対して、ＣＰＵインターフェース３０９を通して、例えば図７（Ａ）に示すような３つのテーブルデータ４１０、４１２、４１４が書き込まれたとする。そして、その後、ディスク側・ホスト側ともにコントロールレジスタ１０４を通してデータの転送開始命令が出されたとする。この場合、ホスト側はテーブル領域にまだ情報がないため、転送動作を保留する（図４の状態２）。これに対して、ディスク側には既にテーブルデータがあるので最初のテーブルデータを転送ブロック指定レジスタ１１０にロードする。テーブルデータのロード後、テーブルデータ内の情報がアドレスカウンタ１２０、セクタカウンタ１１６に、セクタサイズレジスタ１０２の内容がセクタサイズカウンタ１１８にロードされ、実際のデータ転送動作が開始される（図４の状態３）。そして、セクタカウンタ１１６のカウンタ値が０になるまで、ディスクからバッファメモリへとデータが蓄えられる。
【００６０】
セクタカウンタ１１６のカウンタ値が０になると、図７（Ａ）に示すようにテーブルデータ４１０ではＣビットが１にセットされているため、ディスク側のテーブルデータ４１０を複写してホスト側のテーブルデータ４２０を生成する動作が行われる（図４の状態４）。転送ブロック指定レジスタ１１０内には、いまデータ転送が終わったばかりのテーブルデータ４１０がすでに存在ずる。従って、転送制御回路１３０が調停回路１２６に複写要求を出すと、調停回路１２６はアドレスセレクタ１２５に対してテーブルライトアドレスカウンタ１２１を選択させ、バスセレクタ１２８に対して転送ブロック指定レジスタ１１０を選択させる。そして、調停回路１２６はタイミング発生回路１２７を起動し、転送ブロック指定レジスタ１１０の内容をホスト側のテーブル領域に転送する。この結果ホスト側にもテーブルデータ４２０が存在することになり、このため、ホスト側の転送動作も開始する（図４の状態３）。一方、ディスク側には次のテーブルデータ４１２がロードされ引き続きデータ転送が行われることになる（図４の状態２、状態３）。ホスト側では、複写されたテーブルデータ４２０に基づいてディスク側と同様の手順でデータ転送動作が行われる。１つのテーブルデータ４２０についてのデータ転送が終了すると次のテーブルデータ４２２が生成されるまでデータ転送が中断される。このようにしてディスク側のデータがホスト側に転送され、３つめのテーブルデータ４１４によるデータ転送がディスク側で終了すると状態５へ移る。このとき、テーブルデータ４１４では図７（Ａ）に示すようにＥビットが１にセットされているため、転送制御回路１３０は転送動作を終了することになる（図４の状態１）。
【００６１】
さて、複写元のＥビットとＭビットとは図３（Ｂ）に示すように排他的論理和回路６０５の入力となっており、排他的論理和回路６０５の出力が複写先のＥビットとなっている。ディスク側のテーブルデータ４１０のＭビットは図７（Ａ）に示すように０であるため、Ｅビットはそのまま複写され、ホスト側のテーブルデータ４２０のＥビットも０となる。また、ディスク側の３つめのテーブル４１４のＭビットも０であるため、Ｅビットは１にセットされた状態でホスト側に複写され、ホスト側のテーブルデータ４２４のＥビットも１となる。従って、ホスト側においても、３つめのテーブルデータ４２４についてのデータ転送が終了すると、テーブルデータ４２４のＥビットが１にセットされていることによりデータ転送が終了することになる。本実施例によれば、このような複写機能を持たせることにより、ＣＰＵインターフェース３０９からディスク側のみにテーブルデータを書き込むだけでディスクからホストへのデータ転送が容易に実現できる。全く、同様にしてホスト側からディスク側へのデータ転送も容易に実現できる。
【００６２】
なお、図７（Ａ）から明らかなように、Ｃビットについては複写先には転送されず、複写元のテーブルデータのＣビットが１であっても複写先のテーブルデータのＣビットは１にならない。複写先のＣビットが１になってしまうと、複写先から複写元への複写が再度行われることになり、不都合が生じるからである。
【００６３】
以上の図７（Ａ）に示す転送形態は、ディスクデータの転送領域がホストデータの転送領域に完全に重なる場合の転送形態である。即ち、この転送形態では、最後のテーブルデータ４１４を除くテーブルデータについてはＥビット・Ｍビットとも０にし、Ｃビットを１にする。そして、最後のテーブルデータ４１４のみＥビットを１、Ｍビットを０、Ｃビットを１にすることになる。ところがキャッシュメモリ的な使い方をする場合には、図７（Ｂ）に示すようなテーブルデータの設定を行うことになる。即ち、この場合は、３つあるデータブロックのうち始めの１ブロックのみディスクから読み出し、残りの２ブロックについてはすでにバッファメモリ内に存在している場合（ヒットした場合）に相当する。ディスク側ではテーブルデータ４３０を１つだけ設定し、このテーブルデータ４３０ではＥビット・Ｍビット・Ｃビットが全て１に設定される。するとディスク側は、Ｅビットが１であるため１テーブルデータめでデータ転送動作を終了する。しかし、テーブルデータ４３０のＭビットは１であり、従って、ホスト側にはＥビットが複写されず、ホスト側のテーブルデータ４４０のＥビットは０となる。この結果、テーブルデータ４３０についてのデータ転送動作が終了してもホスト側は終了状態とはならない。その後ヒットしているデータについては、ホスト側のみに残りの２テーブルデータ４４２、４４４が設定され、バッファメモリからホスト側へのデータ転送動作が続行されることになる。
【００６４】
先読み方式を導入するには図７（Ｃ）に示すようなテーブルデータの設定となる。この先読み方式では、ディスクからはあらかじめ３ブロック分のデータを読み込みバッファメモリへ格納しておく一方、ホスト側へと転送するのは１テーブルデータめのデータブロックだけで良い。従って、この場合には、図７（Ｃ）に示すように、テーブルデータ４５０のみＥビットを０、Ｍビットを１、Ｃビットを１に設定し、テーブルデータ４５２ではＥビット・Ｍビット・Ｃビットを０に設定する。また、テーブルデータ４５４では、Ｅビットを１、Ｍビット・Ｃビットを０に設定する。ディスク側転送でテーブルデータ４５０によるデータ転送が終了するとこのテーブルデータ４５０はホスト側へ複写され、テーブルデータ４６０が生成される。この際、図３（Ｂ）に示す排他的論理和回路６０５によってＥビットは反転し、Ｅビットが１となった状態で複写される。従って、ホスト側では、このテーブルデータ４６０は最後のものと判断される。この結果、２番目、３番目のデータブロックについては、ディスクからバッファメモリに格納されるだけで、ホスト側には転送されずにデータ転送動作が終了することになる。
【００６５】
このように、本実施例によれば、ＭビットをＥビットと組み合わせて使用することにより種々のデータ転送方式を実現できる。ここでは、ホスト側からみたデータリード動作のみについて説明したが、データライト動作についても同様のデータ転送方式を実現できることが容易に理解できるであろう。本実施例ではテーブル領域が外部のバッファメモリ内にあるものとして説明したが、これは本発明の応用範囲を狭めるものではなくテーブル領域がＬＳＩ内部に存在しても同様の機能を実現できる。
【００６６】
２．第２の実施例
第２の実施例は、ＳＣＳＩコントローラとＤＭＡ転送制御回路とを１チップ構成にした場合の実施例である。図８には、本第２の実施例のブロック図の一例が示される。
【００６７】
さて、図９（Ａ）には、例えばＳＣＳＩコントローラ３２０のＬＳＩとＤＭＡ転送制御回路３３０のＬＳＩの２チップでデータ転送制御装置を構成する場合の例が示される。この場合、ＳＣＳＩコントローラ３２０は、ＦＩＦＯ３２２、ＦＩＦＯ制御回路３２４の他に転送数カウンタ３２６を有しており、また、ＤＭＡ転送制御回路３３０も、転送数カウンタ３３２を有している。即ち、図９（Ａ）に示す構成では、各々のＬＳＩに転送数カウンタ３２６、３３２が存在し、各々のＬＳＩ毎に転送終了を検出することになる。
【００６８】
これに対して、図９（Ｂ）には、ＳＣＳＩコントローラ３４０とＤＭＡ転送制御回路３５０を１チップのＬＳＩ３３８上に形成した場合の例が示される。この場合、回路規模の縮小化、あるいは、プログラム開発時のバグ発生防止を図るために、図９（Ｂ）に示すように、転送数カウンタ３５２をＤＭＡ転送制御回路３５０側のみに設け、ＳＣＳＩコントローラ３４０側には設けない構成とすることが望ましい。しかし、このような構成とした場合、ＤＭＡ転送制御回路３５０側では転送数カウンタ３５２により転送終了を検出できるが、ＳＣＳＩコントローラ３４０側では、転送数カウンタがないため転送終了を検出できない。そこで、本第２の実施例では、ＤＭＡ転送制御回路３５０からＳＣＳＩコントローラ３４０に対して最後の転送データであることを示す終了信号を出力する方式を採用している。このように、最終データの転送と同時に終了信号を出力することによって、ＳＣＳＩコントローラ側も転送終了を知ることができ、とりあえず動作を終えることができる。
【００６９】
ところが、このように終了信号を出力する構成としても、次のような問題点が残る場合がある。即ち、このＬＳＩ３３８から外部にＳＤＡＴＡを出力する場合はあまり問題にならないが、外部からＳＤＡＴＡを入力する場合、ＦＩＦＯ３４２が存在するため、実際の転送数よりも余計にＳＤＡＴＡ入力されるという事態が生じる可能性がある。このような事態が生じると、相手側の装置に混乱を与え、システム全体を誤動作させる可能性が生じる。なお、ＦＩＦＯとはＦｉｒｓｔＩｎ  Ｆｉｒｓｔ  Ｏｕｔメモリのことであり、入力された順にデータが出力されるメモリを意味し、ＳＣＳＩデータバスとＤＭＡ転送制御回路間の転送速度の差を一時的に吸収するために使用されるものである。
【００７０】
さて、ＳＣＳＩコントローラ内にＦＩＦＯが存在する理由は以下の通りである。ＳＳＣＳＩの転送方式には非同期モードと同期モードの２種類がある。ここで非同期モードとは、いわゆるハンドシェーク方式のモードであり、ＳＲＥＱ信号とＳＡＣＫ信号のタイミングコントロールによって１バイトずつデータを転送するモードである。従って、非同期モードのときには必ずしもＦＩＦＯは必要ない。これに対して、同期モードとは、ＳＲＥＱ信号（またはＳＡＣＫ信号）に同期してデータ転送が行われる方式であり、ＳＡＣＫ信号（またはＳＲＥＱ信号）とのハンドシェークは行われず、一方的にデータが送られる。この同期モードによれば、ハンドシェークに伴う信号伝搬のディレイを吸収することができ、非同期よりも高速な転送速度が可能となる。ただ、一方的にとはいっても限界が存在し、その限度を決定するものがＦＩＦＯの記憶容量になる。転送開始から数えてそれまでのＳＲＥＱパルスの発生回数からＳＡＣＫパルスの発生回数を引いたものをオフセットカウンタ値と呼び、オフセットカウンタ値の最大値がＦＩＦＯメモリーの記憶容量に相当する。そして、オフセットカウンタ値が多ければ多いほど、平均的な転送速度は上がる。つまり、ＦＩＦＯの記憶容量が多ければ多いほど転送速度を向上させることができる。
【００７１】
いずれにしても同期モードを実現するには、ＦＩＦＯが必要になる。一方、このＦＩＦＯが存在するおかげで、単純にＤＭＡ転送制御回路からＳＣＳＩコントローラに対して終了信号を出力するだけではＳＣＳＩのデータ転送を正確に終わらせることができない可能性が生じる。即ち、前述した余計にデータを入力してしまうこと以外にも、余計なＳＲＥＱ信号を発生する、あるいは、ＳＡＣＫ信号を全て返す前にデータ転送を終了してしまうというような事態が生じることも考えられる。このようなことを防止し、正確にデータ転送を終了させるために、本第２の実施例では、残り転送数（転送数カウンタ値）がＦＩＦＯの記憶容量に等しくなったことを知らせる信号（終了接近信号）、ＦＩＦＯの中味が空になった（ＦＩＦＯの空き容量がＦＩＦＯ記憶容量に等しくなった）ことを知らせる信号（エンプティ信号）、ＦＩＦＯの記憶容量がいっぱいになったことを知らせる信号（フル信号）を生成することとした。また、オフセットカウント値とＦＩＦＯの空き容量値を加算する手段、オフセットカウント値とＦＩＦＯの空き容量値とを比較する手段を設けることとした。そして、本第２の実施例によれば、これらの信号を生成し、これらの手段を設けるために必要な回路の規模は、転送数カウンタの回路規模より少なくすることが可能となり、これにより回路全体の規模を小さくすることが可能となる。特に、この効果は、転送数カウンタのビット数が増えるほど大きく、将来的にバッファ容量が増え、より転送数が増加した場合に、本第２の実施例の構成は大きな優位点をもつことになる。
【００７２】
次に、本第２の実施例の詳細な構成の一例について図８を用いて説明する。図８において、ＤＭＡ転送制御回路（データ転送制御手段）２０１は前述の第１の実施例で述べたＤＴＲＣと同様にブロックデータ転送を実現できる回路である。ＳＣＳＩハンドシェイク回路（インターフェース制御手段）２０５はＳＲＥＱ信号２０６とＳＡＣＫ信号２０７とのハンドシェイクによってデータの転送を制御する機能を有する。例えば、本ＬＳＩがターゲットモードでデータインで動作したとき、ＳＲＥＱは出力、ＳＡＣＫは入力となり、データはＦＩＦＯ２０２より外部に出力される。また、本ＬＳＩがターゲットモードでデータアウトで動作するときはＦＩＦＯ２０２へデータが入力されることになる。オフセットカウンタ２０８は同期モードの時に必要となるもので、ＳＲＥＱパルスの発生回数とＳＡＣＫパルスの発生回数の差を計算する。ＦＩＦＯ制御回路２０９はＤＭＡ転送制御回路２０１およびＳＣＳＩハンドシェイク回路２０５からのＦＩＦＯ２０２へのアクセスを制御するためのものである。また、ＦＩＦＯ制御回路２０９は、ＦＩＦＯ２０２内のデータ数をカウントするカウンタを有しており、カウンタ値が０になったことを示すエンプティ信号２１０とＦＩＦＯ記憶容量（本実施例では１６バイト）がいっぱいになったことを示すフル信号２１１とを出力し、どちらもＤＭＡ転送制御回路２０１とＳＣＳＩハンドシェイク回路２０５に出力される。加算回路２１２はＦＩＦＯ制御回路２０９内のＦＩＦＯカウンタ値とオフセットカウント値を加算するものであり、その出力２１４がＳＣＳＩハンドシェイク回路２０５に入力される。比較回路２１３はＦＩＦＯカウンタ値とオフセットカウント値を大小比較するものであり、その出力２１５がＳＣＳＩハンドシェイク回路２０５に入力される。また、ＤＭＡ転送制御回路２０１からは、ＤＭＡ制御回路内の転送数カウンタ値が０になったことを示す終了信号２１６と、転送数カウンタ値がＦＩＦＯ記憶容量の大きさに達したことを示す終了接近信号２１７とが出力され、ＳＣＳＩハンドシェイク回路２０５へと入力される。
【００７３】
次に本第２の実施例の動作について説明する。本第２の実施例におけるデータの転送形態には、非同期か同期か、イニシエータかターゲットか、データインかデータアウトかによって８通りの組み合わせが存在する。以下、これらの転送形態について順に説明する。
【００７４】
（１）非同期イニシエータデータアウトの場合
この場合、図１０に示すように、本ＬＳＩからＳＣＳＩバスへとデータが出力される。この場合のＳＣＳＩハンドシェイク側の状態遷移とＤＭＡ転送制御回路側の状態遷移を図１１に示す。ＣＰＵからの転送開始コマンドによってＤＭＡ転送制御回路・ＳＣＳＩハンドシェイク回路はともに実行状態となる。
【００７５】
（１）−１  ＤＭＡ側の状態遷移
状態１：開始命令待ち。開始命令がくると状態２へ。
状態２：テーブルデータロード。テーブルデータをロードした後、状態３へ。
状態３：ＦＩＦＯの状態確認。ＦＩＦＯがフルでなければ状態４へ。フルであれば状態３に留まる。即ち、この場合、図１０に示すようにデータはバッファメモリ（ＤＭＡ転送制御回路）からＦＩＦＯへと出力されるが、ＦＩＦＯがフルである場合にはデータをＦＩＦＯに入力することができない。このため、バッファメモリからデータを出力するにあたって、ＦＩＦＯがフルか否かの判断が必要になる。なお、ＦＩＦＯがフルか否かは、図１０に示すようにＦＩＦＯ制御回路からのフル信号により判断する。
状態４：状態３でＦＩＦＯがフルでないと判断されるとバッファメモリからＦＩＦＯにデータが転送される。
状態５：終了判断。転送数カウンタ値が０でなければ状態３へ戻り、転送数カウンタ値が０になるまで状態３〜５を繰り返す。転送数カウンタ値が０でＥビットが１にセットされていればデータ転送が終了したと判断され、終了信号をＳＣＳＩハンドシェーク回路側に出力し（図１０参照）、状態１へ戻る。一方、Ｅビットが０の場合には、次のテーブルデータがまだ存在すると判断され、状態２へ戻り次のテーブルデータをロードする。なお、本第２の実施例における転送数カウンタとは、例えば第１の実施例におけるセクタカウンタ及びセクタサイズカウンタがこれに相当する。
【００７６】
（１）−２  ＳＣＳＩ側の状態遷移
状態１：開始命令待ち。開始命令がくると状態２へ。
状態２：ＦＩＦＯの状態確認。ＦＩＦＯがエンプティでなければ状態３へ。エンプティであれば状態２に留まる。即ち、この場合にはデータはＦＩＦＯからＳＣＳＩバスへと出力されるが、ＦＩＦＯがエンプティである場合にはＦＩＦＯからデータを出力することができない。このため、ＦＩＦＯからデータを出力するにあたって、ＦＩＦＯがエンプティか否かの判断が必要となる。なお、ＦＩＦＯがエンプティか否かの判断はＦＩＦＯ制御回路からのエンプティ信号で判断する。
状態３：非同期モードであるため、ＳＣＳＩバス上のターゲットからのＳＲＥＱ信号に基づいてＦＩＦＯ内のデータをＳＡＣＫ信号とともにＳＣＳＩバスへ出力する。
状態４：終了判断。ＦＩＦＯがエンプティであり、かつ、ＤＭＡ転送制御回路から終了信号が入力されたならば、ＦＩＦＯにもバッファメモリにも転送データが無いと判断されるため、転送動作を終了し状態１へ戻る。そうでなければ、状態２へ戻り、状態２〜４を繰り返す。
【００７７】
（２）非同期イニシエータデータインの場合
この場合、図１２に示すようにＳＣＳＩバスから本ＬＳＩへとデータが入力される。図１３に状態遷移図を示す。ＣＰＵからの転送開始コマンドによってＤＭＡ転送制御回路・ＳＣＳＩハンドシェイク回路はともに実行状態となる。
【００７８】
（２）−１  ＤＭＡ側の状態遷移
状態１：開始命令待ち。開始命令がくると状態２へ。
状態２：テーブルデータロード。テーブルデータロード後、状態３へ。
状態３：ＦＩＦＯの状態確認。ＦＩＦＯがエンプティでなければ状態４へ。エンプティであれば状態３に留まる。即ち、この場合、データはＦＩＦＯからバッファメモリへと入力されるが、ＦＩＦＯがエンプティであるとＦＩＦＯがデータを出力できない。そこで、ＦＩＦＯ制御回路からのエンプティ信号（図１２参照）に基づいてＦＩＦＯがエンプティか否かを判断することになる。
状態４：状態３でＦＩＦＯがエンプティでないと判断されるとＦＩＦＯからバッファメモリにデータが転送される。
状態５：終了接近判断。転送数カウンタ値が１６（＝ＦＩＦＯ記憶容量）でなければ、状態３へ戻り、転送数カウンタ値が１６になるまで状態３〜５を繰り返す。転送数カウンタ値が１６であれば、転送数カウンタ値がＦＩＦＯ記憶容量に等しくなったと判断され、データ転送の終了が接近したことを示す終了接近信号をＳＣＳＩハンドシェーク回路側に出力するとともに状態６へ移る。
状態６：ＦＩＦＯ状態判断。ＦＩＦＯがフルなら状態７へ。フルでなければ状態６に留まる。
状態７：状態６でＦＩＦＯがフルと判断されると、ＦＩＦＯからバッファメモリにデータが転送される。即ち、状態５で終了接近信号を出力した後、ＦＩＦＯがフルになるまで待って（状態６）、フルになった後にＦＩＦＯからバッファメモリにデータを転送することになる。
状態８：終了判断。転送数カウンタ値が０でＥビットが１であれば、データ転送が終了したと判断され状態１へ戻る。一方、転送数カウンタ値が０であってもＥビットが０である場合には、次のテーブルデータが存在すると判断され、状態２へ戻り次のテーブルデータをロードする。転送数カウンタ値が０でなければ状態６へ戻り、転送数カウンタ値が０になるまで状態６〜８を繰り返す。
【００７９】
（２）−２  ＳＣＳＩ側の状態遷移
状態１：開始命令待ち。開始命令がくると状態２へ。
状態２：ＦＩＦＯの状態確認。ＦＩＦＯがフルでなければ状態３へ。フルであれば状態２に留まる。即ち、この場合、データはＳＣＳＩバスからＦＩＦＯへと入力されるが、ＦＩＦＯがフルであるとＦＩＦＯにデータを入力できない。そこで、ＦＩＦＯ制御回路からのフル信号（図１２参照）に基づいてＦＩＦＯがフルか否かを判断することになる。
状態３：非同期モードであるため、ＳＣＳＩバス上のターゲットからのＳＲＥＱ信号に基づいてＳＣＳＩバス上のデータをＦＩＦＯに入力する。
状態４：終了接近判断。ＤＭＡ転送制御回路から終了接近信号が入力されたならば状態５へ。そうでなければ、状態２へ戻り、状態２〜４を繰り返す。
状態５：ＦＩＦＯ状態判断。ＦＩＦＯがフルだったら転送終了とし、状態１へ戻る。ＦＩＦＯがフルでなければ状態６へ。
状態６：ＳＲＥＱ信号に基づいてＳＣＳＩバス上のデータをＦＩＦＯに転送する。転送後、状態５へ戻り、ＦＩＦＯがフルになるまで状態５、６を繰り返す。
【００８０】
以上のように終了接近信号を用いることによりＦＩＦＯに余計なデータが入力されることが防止される。即ち、ＤＭＡ転送制御回路は、転送数カウンタ値がＦＩＦＯの記憶容量（＝１６）に等しくなると終了接近信号をＳＣＳＩハンドシェーク回路に出力するとともにＦＩＦＯがフルになるのを待つ。一方、ＳＣＳＩハンドシェーク回路は、終了接近信号が入力されると、ＦＩＦＯがフルになるまでデータをＳＣＳＩバスからＦＩＦＯに入力する。そして、ＦＩＦＯがフルになるとＳＣＳＩハンドシェーク回路はデータ転送を終了し、余計なデータがＦＩＦＯに入力されることを防止している。一方、ＤＭＡ転送制御回路は、ＦＩＦＯがフルになった段階で、ＦＩＦＯからバッファメモリへのデータ転送を再開し、これにより終了接近信号を出力した後の１６個のデータを適正にバッファメモリに転送することが可能となる。
【００８１】
（３）非同期ターゲットデータアウトの場合
ＳＣＳＩにおいてはイニシエータからターゲットへデータが転送される場合をデータアウトと呼ぶため、この場合、図１４に示すようにＳＣＳＩバスからターゲットである本ＬＳＩへとデータが入力されることになる。ＣＰＵからの転送開始コマンドによってＤＭＡ転送制御回路・ＳＣＳＩハンドシェイク回路はともに実行状態となる。処理の流れは上述の（２）、即ち非同期イニシエータデータインと同様となるが、図１２と図１４を比較すれば明らかなように、ＳＲＥＱ信号が出力となりＳＡＣＫ信号が入力となるところが（２）と異なる。この理由は、ＳＣＳＩにおいては、ＳＲＥＱ信号はターゲット側が出力し、ＳＡＣＫ信号はイニシエータ側が出力するからである。
【００８２】
（４）非同期ターゲットデータインの場合
ＳＣＳＩにおいてはターゲットからイニシエータへデータが転送される場合をデータインと呼ぶため、この場合、図１５に示すように本ＬＳＩからＳＣＳＩバスへとデータが出力される。ＣＰＵからの転送開始コマンドによってＤＭＡ転送制御回路・ＳＣＳＩハンドシェイク回路はともに実行状態となる。処理の流れは上述の（１）、即ち非同期イニシエータデータアウトと同様であるが、ＳＲＥＱ信号が出力となりＳＡＣＫ信号が入力となるところが（１）と異なる。
【００８３】
（５）同期イニシエータデータアウトの場合
この場合、図１６に示すように、本ＬＳＩからＳＣＳＩバスへとデータが出力される。また、この場合は同期転送であり、あらかじめ定められた最大オフセットを超えない範囲でＳＲＥＱパルスが先行して出力される。従って、このことを考慮した転送制御を行わなければならない。図１７に各状態遷移図を示す。ＣＰＵからの転送開始コマンドによってＤＭＡ転送制御回路・ＳＣＳＩハンドシェイク回路はともに実行状態となる。
【００８４】
（５）−１  ＤＭＡ側の状態遷移
ＤＭＡ側の状態遷移は、上述の（１）の場合と同様であり（図１１及び図１７を比較参照）、従って、説明を省略する。
【００８５】
（５）−２  ＳＣＳＩ側の状態遷移
状態１：開始命令待ち。開始命令がくると状態２へ。
状態２：オフセットカウンタチェックおよびＦＩＦＯ状態判断。
【００８６】
オフセットカウンタ値（＝ＳＲＥＱ−ＳＡＣＫ）が０より大きくかつＦＩＦＯがエンプティでなければ状態３へ。そうでなければ状態２に留まる。
状態３：ＦＩＦＯからＳＣＳＩへの転送実行。
【００８７】
ＳＡＣＫパルスに同期してデータをＳＣＳＩバスへ出力する。このとき常にオフセットカウンタは動作しており、自分の出力したＳＡＣＫパルスによってオフセットカウンタ値が−１される。ＳＲＥＱはＳＣＳＩバス上のターゲットから一方的に入力される。従って、本ＬＳＩはＳＡＣＫのパルス発生数がＳＲＥＱのパルス発生数を超えない範囲でＳＡＣＫを出力しデータ転送を行えばよいことになる。そこで、状態２でオフセットカウンタ値（＝ＳＲＥＱ−ＳＡＣＫ）＞０か否かを判断し、オフセットカウンタ値＞０となる範囲で、状態３でＳＡＣＫを出力している。
状態４：終了判断。終了信号がＤＭＡ転送制御回路から出力されると状態５へ。そうでなければ状態２へ戻り、状態２〜４を繰り返す。
状態５：オフセットカウンタチェックおよびＦＩＦＯ状態判断。
【００８８】
ＦＩＦＯがエンプティでなければ状態６へ。オフセットカウンタ値が０でかつＦＩＦＯがエンプティならば状態１へ戻る。それ以外は状態５に留まる。これにより、オフセットカウンタ値が０にならない限りデータ転送が終了しないことが保証される。この結果、ターゲットからのＳＲＥＱに対応したＳＡＣＫを全てターゲットに返す前にデータ転送が終了してしまうというような事態を防止できる。
状態６：ＦＩＦＯからＳＣＳＩへの転送実行。
【００８９】
ＳＡＣＫパルスに同期してデータをＳＣＳＩバスへ出力する。そして、ＦＩＦＯがエンプティになるまで状態５、６を繰り返す。このとき常にオフセットカウンタは動作しており、自分の出力したＳＡＣＫパルスによってオフセットカウンタ値が−１される。
【００９０】
（６）同期イニシエータデータインの場合
この場合、図１８に示すようにＳＣＳＩバスから本ＬＳＩへとデータが入力される。図１９に状態遷移図を示す。ＣＰＵからの転送開始コマンドによってＤＭＡ転送制御回路・ＳＣＳＩハンドシェイク回路はともに実行状態となる。
【００９１】
（６）−１  ＤＭＡ側の状態遷移
ＤＭＡ側の状態遷移は、上述の（２）の場合と同様であり（図１３及び図１９を比較参照）、従って、説明を省略する。
【００９２】
（６）−２  ＳＣＳＩ側の状態遷移
状態１：開始命令待ち。開始命令がくると状態２へ。
状態２：オフセットカウンタチェックおよびＦＩＦＯ状態判断。
【００９３】
オフセットカウンタ値とＦＩＦＯカウンタ値（ＦＩＦＯ内データ数）が等しくなければ状態３へ。そうでなければ状態２に留まる。この場合のオフセットカウンタ値とＦＩＦＯカウンタ値の比較は図１８に示すように比較回路２１３により行われる。
状態３：ＳＡＣＫパルスの出力。
【００９４】
データは相手のＳＲＥＱパルスに同期してすでにＦＩＦＯ内に取り込まれているため、ここではＳＡＣＫを出力するだけである。これによりオフセットカウンタ値は−１される。以上の状態２と状態３の制御により、オフセットカウンタ値（＝ＳＲＥＱ−ＳＡＣＫ）が常にＦＩＦＯカウンタ値に等しくなるように制御される。即ち、ＳＣＳＩバス上のターゲットからデータを受け取ってもすぐにはＳＡＣＫを返さず、ＦＩＦＯ内のデータがバッファメモリに転送されＦＩＦＯ内データ数が減少し、ＦＩＦＯ内のデータ数がオフセットカウンタ値と等しくなってからＳＡＣＫを返すようにしている。このように制御することで、ＳＣＳＩハンドシェーク回路とＤＭＡ転送制御回路との同期をとることが可能となる。
状態４：終了接近判断。終了接近信号が来ていると状態５へ。そうでなければ状態２へ戻る。
状態５：オフセットカウンタチェックおよびＦＩＦＯ状態判断。
【００９５】
オフセットカウンタが０でなく、かつＦＩＦＯがフルでなければ状態６へ。
オフセットカウンタが０で、ＦＩＦＯがフルならば転送終了であり状態１へ戻る。それ以外は、状態５に留まる。
状態６：ＳＡＣＫパルスの出力。これによりオフセットカウンタ値が−１され、オフセットカウンタ値が０になるまで状態５、６が繰り返される。
【００９６】
以上のように終了接近信号を用いることによりＦＩＦＯに余計なデータが入力されるのが防止される。この場合、余計なデータが確実に入力されないようにするためには、ＳＣＳＩハンドシェーク回路とＤＭＡ転送制御回路との間の同期がとれている必要があるが、これは前述の状態２、３の制御により保証される。
【００９７】
（７）同期ターゲットデータアウトの場合
この場合、図２０に示すようにＳＣＳＩバスから本ＬＳＩへとデータが入力される。図２１に各状態遷移図を示す。ＣＰＵからの転送開始コマンドによってＤＭＡ転送制御回路、ＳＣＳＩハンドシェイク回路はともに実行状態となる。
【００９８】
（７）−１  ＤＭＡ側の状態遷移
ＤＭＡ側の状態遷移は、上述の（２）の場合と同様であり（図１３及び図２１を比較参照）、従って、説明を省略する。
【００９９】
（７）−２  ＳＣＳＩ側の状態遷移
状態１：開始命令待ち。開始命令がくると状態２へ。
状態２：オフセットカウンタチェックおよびＦＩＦＯ状態判断。
【０１００】
オフセットカウンタ値とＦＩＦＯカウンタ値の和が１６を超えてなければ状態３へ。そうでなければ状態２に留まる。このような制御を行うのは、以下の理由による。即ち、オフセットカウンタ値はこれまで出力したＳＲＥＱパルス数からＳＡＣＫパルス数を引いた数であり、ＳＣＳＩバス上のイニシエータからはこのオフセットカウンタ値に等しい個数のデータがすぐにでも来ることを意味している。一方、ＦＩＦＯカウンタ値は、実際に現在ＦＩＦＯ内に存在するデータ数を意味する。従って、これからすぐに来るであろうデータ数（オフセットカウンタ値）と、ＦＩＦＯ内のデータ数（ＦＩＦＯカウンタ値）との和が、ＦＩＦＯの記憶容量である１６を超えないように、ＳＲＥＱの出力を制御してやる必要が生じることになる。この場合のオフセットカウンタ値とＦＩＦＯカウンタ値の加算は図２０に示すように加算回路２１２により行われる。
状態３：ＳＲＥＱパルスを出力する。データは相手のＳＡＣＫに同期して取り込まれることになるのでここではＳＲＥＱを出すだけであるこれによりオフセットカウンタ値は＋１される。
状態４：終了接近判断。終了接近信号が来ていると状態５へ。そうでなければ状態２へ戻る。
状態５：オフセットカウンタチェックおよびＦＩＦＯ状態判断。
【０１０１】
ＦＩＦＯがフルだったら終了とし、状態１へ戻る。フルでなくオフセットカウンタ値とＦＩＦＯカウンタ値の和が１６を超えてなければ状態６へ。それ以外は状態５に留まる。
状態６：ＳＲＥＱパルスの出力。これによりオフセットカウンタ値が＋１され、その後に状態５に戻る。
【０１０２】
（８）同期ターゲットデータインの場合
この場合、図２２に示すように、本ＬＳＩからＳＣＳＩバスへとデータが出力される。図２３に状態遷移図を示す。ＣＰＵからの転送開始命令によってＤＭＡ転送制御回路・ＳＣＳＩハンドシェイク回路はともに実行状態となる。
【０１０３】
（８）−１  ＤＭＡ側の状態遷移
ＤＭＡ側の状態遷移は、上述の（１）の場合と同様であり（図１１及び図２３を比較参照）、従って、説明を省略する。
【０１０４】
（８）−２  ＳＣＳＩ側の状態遷移
状態１：開始命令待ち。開始命令がくると状態２へ。
状態２：オフセットカウンタチェックおよびＦＩＦＯ状態判断。
【０１０５】
オフセットカウンタ値が最大オフセットカウンタ値以下でＦＩＦＯがエンプティでなければ状態３へ。そうでなければ状態２に留まる。即ち、ＳＣＳＩにおいてターゲットは、オフセットカウンタ値（＝ＳＲＥＱ−ＳＡＣＫ）があらかじめ定められた最大オフセットカウンタ値以下となるようにＳＲＥＱを出力しなければならない。従って、この状態２の判断が必要となる。
状態３：ＦＩＦＯからＳＣＳＩへの転送実行。
【０１０６】
ＳＲＥＱパルスを出力すると同時にＦＩＦＯデータをＳＣＳＩバスへ出力する。
状態４：終了判断。終了信号が来ていると状態５へ。そうでなければ状態２へ戻る。
状態５：オフセットカウンタチェックおよびＦＩＦＯ状態判断。
【０１０７】
ＦＩＦＯがエンプティでかつオフセットカウンタが０であれば終了とし、状態１へ戻る。ＦＩＦＯがエンプティでなければ状態６へ。それ以外は状態５に留まる。
状態６：ＦＩＦＯからＳＣＳＩへの転送実行。
【０１０８】
ＳＲＥＱパルスを出力すると同時にＦＩＦＯデータをＳＣＳＩバスへ出力し、状態５へ戻る。
（９）まとめ
以上の各モードの動作をまとめると以下のようになる。
【０１０９】
（Ａ）ＤＭＡ転送制御回路側の処理は、ＳＣＳＩハンドシェーク回路側の転送が同期か非同期かには関係せず、以下のように行われる。
【０１１０】
即ち、バッファメモリからＦＩＦＯへデータを転送する場合には、ＦＩＦＯがフルでない限りデータを転送し、転送数カウンタ値が０になったところで動作を終了する。また、ＦＩＦＯからバッファメモリへデータを転送する場合には、ＦＩＦＯがエンプティでない限りデータを転送し、転送数カウンタ値がＦＩＦＯの記憶容量に等しくなったところで終了接近信号を発生し、一時転送を中断する。そして、ＦＩＦＯがフルになったところで転送を再開し、転送数カウンタ値が０になったところで動作を終了する。
【０１１１】
（Ｂ）ＳＣＳＩハンドシェイク回路側の処理は各モードで分かれるものの、以下のようになる。
【０１１２】
即ち、ＦＩＦＯからＳＣＳＩバスへデータを転送する場合の基本動作として、ＦＩＦＯがエンプティでなければデータを出力する。また、終了信号が来るとＦＩＦＯがエンプティとなったところで動作を終了する。
【０１１３】
また、ＳＣＳＩバスからＦＩＦＯへデータを転送する場合の基本動作として、ＦＩＦＯがフルでなければデータを入力する。また、終了接近信号が来るとＦＩＦＯがフルになるまでデータを入力し、フルになったところで動作を終了する。
【０１１４】
なお、本発明は上記実施例に限定されるものではなく、本発明の要旨の範囲内で種々の変形実施が可能である。
【０１１５】
例えば、本実施例では第１の外部インターフェースとしてＳＣＳＩを例にとり説明したが、本発明ではこれに限らず例えばＳＣＳＩ２、ＳＣＳＩ３等の種々のインターフェースに適用できる。
【０１１６】
また、転送数の単位としては、セグメント、セクタに限らず例えばクラスタ等の種々の単位が考えられる。
【０１１７】
また、バッファメモリを介してデータ転送を行うことができるインターフェースは２つに限らず、３以上設けることも可能である。
【０１１８】
また、テーブルデータをバッファメモリに格納せずにデータ転送制御装置内に格納する構成としてもかまわない。また、テーブルデータについても、このテーブルデータと実質的に同等の機能を果たすものであれば、本実施例で説明した形態のものに限られるものではない。
【０１１９】
【発明の効果】
請求項１の発明によれば、転送数単位選択パラメータにより転送数の単位を任意に選択することが可能となる。これにより、物理的にバッファメモリアドレスが連続しているデータブロックに関しては、より少ないテーブルデータの情報量でデータブロック指定が可能となり、ＣＰＵの処理オーバーヘッドが軽減される。特にキャッシュ方式によるデータ転送を行う場合には本発明は有効である。即ち、この場合には、一連のデータブロック列に対して先頭と最後のブロックに関しては転送数単位をセクタ単位とし、中間のブロック列に関してはセグメント単位でブロック指定をする。これにより、従来より大幅にテーブルデータの情報量を減少させることができ、より効率的なデータ転送が可能となる。
【０１２０】
また、請求項２の発明によれば、転送数の単位を変更した場合にも、選択手段の出力先である転送数カウント手段を共通に使用することができ、回路の小規模化、制御の簡易化を図ることができる。
【０１２１】
また、請求項３の発明によれば、転送ブロック指定領域が空になったときにデータ転送が終了するという従来方式に比べて以下の利点を持つことが可能となる。即ち、従来例では、転送速度が速い方の外部インターフェースでは、転送開始命令を何度も発行しなければならないという事態が生じたが、本発明によれば、このような事態が生じるのを防止でき、転送速度によらない一律な制御が可能となる。
【０１２２】
また、請求項４の発明によれば、第１の外部インターフェース側と第２の外部インターフェース側において、転送数単位の設定や、データ転送の終了動作を別々に制御することができ、よりインテリジェントなデータ転送制御が可能となる。
【０１２３】
また、請求項５の発明によれば、複写指定パラメータを用いることにより、第１、第２の外部インターフェース間でテーブルデータを共通化することが可能となる。また、この共通化されたテーブルデータは物理的には分離されているので一方の外部インターフェースの転送速度に依存して他方の外部インターフェースの転送が滞ってしまうという従来の問題は発生しない。
【０１２４】
また、請求項６の発明によれば、一方の外部インターフェースからバッファメモリにデータを転送し、このデータをそのまま他方の外部インターフェースに転送するという動作を、複写元のテーブルデータを設定するだけで実現することが可能となる。
【０１２５】
また、請求項７の発明によれば、他方の外部インターフェース側は、ヒットした他のデータブロックを読み出すことが可能となり、これによりキャッシュ方式のデータ読み出しが可能となる。
【０１２６】
また、請求項８の発明によれば、一方の外部インターフェース側は、読み出したデータの隣のアドレスのデータを順次読み出すことが可能となり、これにより先読み方式のデータ読み出しが可能となる。
【０１２７】
また、請求項９の発明によれば、転送数カウント手段をデータ転送制御手段とインターフェース制御手段とで共通化させることができる。これにより、一カ所の転送数カウント手段に転送数を設定すればよいことになり、ファームウェア開発時のバグの要因を減少させることができる。また、最大転送数を増加させた場合、転送数カウント手段の段数を増やすことになるが、本発明では転送数カウント手段が１カ所にしかないため、段数の増加による回路規模の増大を少なく抑えることができる。これにより、より小さな回路規模で最大転送数を増加することができ、ＬＳＩの信頼性を向上できる。また、本発明によれば、このように転送数カウント手段を共通化した場合にも、第２の外部インターフェースからバッファメモリ及びＦＩＦＯ記憶手段を介して第１の外部インターフェースへと、正常にデータを転送することが可能となる。
【０１２８】
また、請求項１０の発明によれば、例えば同期モードにおいても、正常にリクエスト信号、アクノリッジ信号を発生させることが可能となる。即ち、アクノリッジ信号の発生回数がリクエスト信号の発生回数を超えたり、オフセットカウンタ値が最大オフセットカウンタ値を超えたりするような事態が防止される。
【０１２９】
また、請求項１１の発明によれば、転送数カウント手段をデータ転送制御手段とインターフェース制御手段とで共通化させることができる。これにより、ファームウェア開発時のバグの要因を減少させることができるとともに、より小さな回路規模で最大転送数を増加することができる。また、本発明によれば、このように転送数カウント手段を共通化した場合にも、第１の外部インターフェースからＦＩＦＯ記憶手段及びバッファメモリを介して第２の外部インターフェースへと、正常にデータを転送することが可能となる。即ち、余計なデータがＦＩＦＯ記憶手段に入力されたりするような事態が防止される。
【０１３０】
また、請求項１２の発明によれば、例えば同期モードにおいても、正常にリクエスト信号、アクノリッジ信号を発生させることが可能となる。即ち、リクエスト信号を全て返す前にデータ転送が終了したり、余計なリクエスト信号が出力されたりするような事態が防止される。
【０１３１】
また、請求項１３の発明によれば、より効率的なデータ転送が可能な情報処理装置を実現できる。
【図面の簡単な説明】
【図１】本発明の第１の実施例のブロック図である。
【図２】第１の実施例の詳細な構成の一例を示すブロック図である。
【図３】図３（Ａ）はテーブルデータのフォーマット例を示す図であり、図３（Ｂ）は複写先のＥビットを生成するための回路例を示す図であり、図３（Ｃ）はバッファメモリに形成されたテーブル領域、データ領域を説明するための図である。
【図４】第１の実施例の動作を説明するための状態遷移図である。
【図５】図５（Ａ）、（Ｂ）、（Ｃ）は、第１の実施例の動作を説明するためのタイミング図である。
【図６】図６（Ａ）、（Ｂ）、（Ｃ）は、セクタの並びとセグメントの並びの対応例を示す図である。
【図７】図７（Ａ）、（Ｂ）、（Ｃ）は、複写指定パラメータ、制御パラメータを用いた複写動作について説明するための図である。
【図８】本発明の第２の実施例を示すブロック図である。
【図９】  図９（Ａ）、（Ｂ）は、ＳＣＳＩコントローラとＤＭＡ転送制御回路とを１チップ構成とする場合の問題点について説明するための図である。
【図１０】  非同期イニシエータデータアウトの場合の信号の流れを示す図である。
【図１１】  非同期イニシエータデータアウトの場合の状態遷移図である。
【図１２】  非同期イニシエータデータインの場合の信号の流れを示す図である。
【図１３】  非同期イニシエータデータインの場合の状態遷移図である。
【図１４】  非同期ターゲットデータアウトの場合の信号の流れを示す図である。
【図１５】  非同期ターゲットデータインの場合の信号の流れを示す図である。
【図１６】  同期イニシエータデータアウトの場合の信号の流れを示す図である。
【図１７】  同期イニシエータデータアウトの場合の状態遷移図である。
【図１８】  同期イニシエータデータインの場合の信号の流れを示す図である。
【図１９】  同期イニシエータデータインの場合の状態遷移図である。
【図２０】同期ターゲットデータアウトの場合の信号の流れを示す図である。
【図２１】同期ターゲットデータアウトの場合の状態遷移図である。
【図２２】同期ターゲットデータインの場合の信号の流れを示す図である。
【図２３】同期ターゲットデータインの場合の状態遷移図である。
【図２４】データブロックが不連続に配置される問題について説明するための図である。
【図２５】図２５（Ａ）、（Ｂ）、（Ｃ）は、従来のデータ転送制御装置におけるテーブルデータの例を示す図である。
【符号の説明】
１０１  セグメントサイズレジスタ
１０２  セクタサイズレジスタ
１０３  テーブルアクセスレジスタ
１０４  コントロールレジスタ
１０５、１０６  転送開始信号
１０７、１０８  転送終了信号
１０９、１１０  転送ブロック指定レジスタ
１１１、１１２  乗算回路
１１３、１１４  セレクタ
１１５、１１６  セクタカウンタ
１１７、１１８  セクタサイズレジスタ
１１９、１２０  アドレスカウンタ
１２１、１２２  テーブルライトカウンタ
１２３、１２４  テーブルリードカウンタ
１２５  アドレスセレクタ
１２６  調停回路
１２７  タイミング発生回路
１２８  バスセレクタ
１２９、１３０  転送制御回路
２０１  ＤＭＡ転送制御回路
２０２  ＦＩＦＯ
２０３  ＳＣＳＩデータバス
２０４  ＤＭＡデータバス
２０５  ＳＣＳＩハンドシェイク回路
２０６  ＳＲＥＱ信号
２０７  ＳＡＣＫ信号
２０８  オフセットカウンタ
２０９  ＦＩＦＯ制御回路
２１０  エンプティ信号
２１１  フル信号
２１２  加算回路
２１３  比較回路
２１４  加算結果
２１５  比較一致信号
２１６  終了信号
２１７  終了接近信号
２１８  オフセットカウンタ値
２１９  ＦＩＦＯカウンタ値
２２０  ＦＩＦＯロード信号
２２１  ＦＩＦＯアクセス信号
３０１  バッファメモリ
３０２  ＤＴＲＣ
３０３  ＣＰＵ
３０４  ホストコンピュータ
３０５  ディスクメモリ
３０６  第１の外部インターフェース
３０７  バッファメモリインターフェース
３０８  第２の外部インターフェース
３０９  ＣＰＵインターフェース
３１０  テーブル領域
３１２  データ転送部
３１３  転送数カウンタ
３１４  転送数設定部
【図１】
0003687112.tif 000002
【図２】
0003687112.tif 000003
【図３】
0003687112.tif 000004
【図４】
0003687112.tif 000005
【図５】
0003687112.tif 000006
【図６】
0003687112.tif 000007
【図７】
0003687112.tif 000008
【図８】
0003687112.tif 000009
【図９】
0003687112.tif 000010
【図１０】
0003687112.tif 000011
【図１１】
0003687112.tif 000012
【図１２】
0003687112.tif 000013
【図１３】
0003687112.tif 000014
【図１４】
0003687112.tif 000015
【図１５】
0003687112.tif 000016
【図１６】
0003687112.tif 000017
【図１７】
0003687112.tif 000018
【図１８】
0003687112.tif 000019
【図１９】
0003687112.tif 000020
【図２０】
0003687112.tif 000021
【図２１】
0003687112.tif 000022
【図２２】
0003687112.tif 000023
【図２３】
0003687112.tif 000024
【図２４】
0003687112.tif 000025
【図２５】
0003687112.tif 000026