(57)【特許請求の範囲】
【請求項１】
ＣＰＵにデータバスおよびアドレスバスを介して接続されるとともに通信バスに接続される送信制御回路において、
送信データを格納するＣＰＵと送信制御回路の両方からアクセス可能な共有メモリと、
共有メモリから転送された送信データを通信バスに送信する送信回路と、
送信データを格納する共有メモリのアドレスが設定されるＣＰＵと送信制御回路の両方からアクセス可能なアドレスレジスタと、
共有メモリに格納される通信データの数が設定されるＣＰＵと送信制御回路の両方からアクセス可能なデータ数レジスタと、
通信速度や通信のタイプや通信の有効／無効などの情報が設定されるＣＰＵと送信制御回路の両方からアクセス可能な情報レジスタと、
アドレスレジスタに設定されたアドレスが設定されカウンタクロックによってカウントアップされるアドレスカウンタと、
データ数レジスタに設定されたデータ数の値が設定されカウンタクロックによってカウントダウンされるデータ数カウンタと、
送信回路からの送信データ転送要求に応じてアドレスカウンタが示す共有メモリのアドレスから送信データを読み出し送信回路に転送するとともにカウンタクロックを生成するＲＡＭ制御回路と、
データ数レジスタや情報レジスタの値を読み出し送信の準備ができているかを判断し、送信の準備ができていれば、アドレスレジスタのアドレスをアドレスカウンタにデータ数レジスタのデータ数の値をデータ数カウンタにそれぞれ設定し、送信回路に送信開始を指示し、送信が成功すれば、アドレスカウンタの値をアドレスレジスタに、データ数カウンタの値をデータ数レジスタにそれぞれライトバックする通信制御コントローラと
からなる送信制御回路。
【請求項２】
共有メモリは、同期シングルポートＲＡＭと、２つの異なるアドレス信号の一方を選択して同期シングルポートＲＡＭに入力するアドレス信号セレクタと、２つの異なるライト要求信号の一方を選択して同期シングルポートＲＡＭに入力するライト要求セレクタと、２つの異なるライトデータ信号の一方を選択して同期シングルポートＲＡＭに入力するライトデータセレクタと、同期シングルポートＲＡＭのリードデータを保持する２組のラッチ回路と、カウンタクロックを分周する分周回路とを備え、カウンタクロックを分周して作成したセレクト信号で各セレクタやラッチを切り替えることを特徴とする請求項１に記載の送信制御回路。
【請求項３】
ＣＰＵにデータバスおよびアドレスバスを介して接続されるとともに通信バスに接続される受信制御回路において、
受信データを格納するＣＰＵと受信制御回路の両方からアクセス可能な共有メモリと、
通信バスから受信した受信データを共有メモリに転送する受信回路と、
受信データを格納する共有メモリのアドレスが設定されるＣＰＵと受信制御回路の両方からアクセス可能なアドレスレジスタと、
共有メモリに格納される受信データの数が設定されるＣＰＵと受信制御回路の両方からアクセス可能なデータ数レジスタと、
通信速度や通信のタイプや通信の有効／無効などの情報が設定されるＣＰＵと受信制御回路の両方からアクセス可能な情報レジスタと、
アドレスレジスタに設定されたアドレスが設定されカウンタクロックによってカウントアップされるアドレスカウンタと、
データ数レジスタに設定されたデータ数の値が設定されカウンタクロックによってカウントダウンされるデータ数カウンタと、
受信回路からの受信データ転送要求に応じて受信データを共有メモリに転送しアドレスカウンタが示すアドレスに書き込むとともにカウンタクロックを生成するＲＡＭ制御回路と、
データ数レジスタや情報レジスタの値を読み出し受信の準備ができているかを判断し、受信の準備ができていれば、アドレスレジスタのアドレスをアドレスカウンタにデータ数レジスタのデータ数の値をデータ数カウンタにそれぞれ設定し、受信回路に受信データの転送開始を指示し、受信が成功すれば、アドレスカウンタの値をアドレスレジスタにデータ数カウンタの値をデータ数レジスタにそれぞれライトバックする通信制御コントローラと、
からなる受信制御回路。
【請求項４】
共有メモリは、同期シングルポートＲＡＭと、２つの異なるアドレス信号の一方を選択して同期シングルポートＲＡＭに入力するアドレスセレクタと、２つの異なるライト要求信号の一方を選択して同期シングルポートＲＡＭに入力するライト要求セレクタと、２つの異なるライトデータ信号の一方を選択して同期シングルポートＲＡＭに入力するライトデータセレクタと、同期シングルポートＲＡＭのリードデータを保持する２組のラッチ回路と、カウンタクロックを分周する分周回路とを備え、カウンタクロックを分周して作成したセレクト信号で各セレクタやラッチを切り替えることを特徴とする請求項３に記載の受信制御回路。
【請求項５】
ＣＰＵにデータバスおよびアドレスバスを介して接続されるとともに通信バスに接続される通信制御回路において、
通信データを格納するＣＰＵと通信制御回路の両方からアクセス可能な共有メモリと、
共有メモリから転送された通信データを通信バスに送信する送信回路と、
通信バスから受信した通信データを共有メモリに転送する受信回路と、
通信データを格納する共有メモリのアドレスが設定されるＣＰＵと通信制御回路の両方からアクセス可能なアドレスレジスタと、
共有メモリに格納される通信データの数が設定されるＣＰＵと通信制御回路の両方からアクセス可能なデータ数レジスタと、
通信速度や通信のタイプや通信の有効／無効などの情報が設定されるＣＰＵと通信制御回路の両方からアクセス可能な情報レジスタと、
アドレスレジスタのアドレスが設定されカウンタクロックによってカウントアップされるアドレスカウンタと、
データ数レジスタのデータ数の値が設定されカウンタクロックによってカウントダウンされるデータ数カウンタと、
送信中は送信回路からの送信データ転送要求に応じてアドレスカウンタが示す共有メモリのアドレスから送信データを読み出し送信回路に転送するとともにカウンタクロックを生成し、受信中は受信回路からの受信データ転送要求に応じて受信データを共有メモリに転送しアドレスカウンタが示すアドレスに書き込むとともにカウンタクロックを生成するＲＡＭ制御回路と、
データ数レジスタや情報レジスタの値を読み出して送信の準備ができているか受信の準備ができているかを判断し、送信の準備ができていれば、アドレスレジスタのアドレスをアドレスカウンタにデータ数レジスタのデータ数の値をデータ数カウンタにそれぞれ設定し、送信回路に送信開始を指示し、送信が成功すれば、アドレスカウンタの値をアドレスレジスタにデータ数カウンタの値をデータ数レジスタにそれぞれライトバックし、受信の準備ができていれば、アドレスレジスタのアドレスをアドレスカウンタにデータ数レジスタの値をデータ数カウンタにそれぞれ設定し、受信回路に受信データの転送開始を指示し、受信が成功すれば、アドレスカウンタの値をアドレスレジスタにデータ数カウンタの値をデータ数レジスタにそれぞれライトバックする通信制御コントローラと
からなる通信制御回路。
【請求項６】
共有メモリは、同期シングルポートＲＡＭと、２つの異なるアドレス信号の一方を選択して同期シングルポートＲＡＭに入力するアドレスセレクタと、２つの異なるライト要求信号の一方を選択して同期シングルポートＲＡＭに入力するライト要求セレクタと、２つの異なるライトデータ信号の一方を選択して同期シングルポートＲＡＭに入力するライトデータセレクタと、同期シングルポートＲＡＭのリードデータを保持する２組のラッチ回路と、カウンタクロックを分周する分周回路とを備え、カウンタクロックを分周して作成したセレクト信号で各セレクタやラッチを切り替えることを特徴とする請求項５に記載の通信制御回路。
【発明の詳細な説明】
【０００１】
【発明が属する技術分野】
本発明は、別の機器とデータをやり取りするための通信制御装置を構成する通信制御回路に関し、特に多数の機器と時分割により別々のデータのやりとりを行う必要が有る場合に、少ない回路規模で、ＣＰＵから簡単な制御で通信を行うことができる通信制御回路に関する。
【０００２】
具体的には、例えば、ＵＳＢ（Universal Serial Bus）のホスト回路のように、機器１台につきエンドポイントと呼ばれる通信のチャンネルを１６個有する最大１２７台の機器と通信を行い、全部で最大２０３２個の通信チャンネルで通信を行うことができる通信制御回路を、少ない回路規模で、ＣＰＵから簡単な制御で通信を行うようにした通信制御回路および通信制御方法に関する。
【０００３】
【従来技術】
従来から電子機器は様々な機器と通信を行うために、様々な通信手段を搭載していた。通信速度が遅かった頃は、機器毎に別々の通信回路を持っており、１つの通信回路には１台の機器しか接続しておらず、１対１の通信しか行っていなかった。
【０００４】
しかし、近年は回路の動作速度が飛躍的に向上し通信速度が早くなったことから、１つの通信回路に多数の機器を接続することが可能となった。
【０００５】
例えば、図７に示すように、ＵＳＢは、１台のホストに最大１２７台のデバイスを接続することが可能となっている。さらに、各デバイスは最大１６個のエンドポイントを持つことができるので、ホストには、最大で１２７×１６＝２０３２個のエンドポイントと通信を行う能力が要求される。
【０００６】
従来の通信制御装置（ホスト回路）について、図８を用いて説明する。通信制御装置は、ＣＰＵ１と、ＲＯＭ２と、各種Ｉ／Ｏ機器３と、通信制御回路５とから構成される。ＣＰＵ１、ＲＯＭ２、各種Ｉ／Ｏ機器３、通信制御回路５は、互いにＣＰＵアドレスバスとＣＰＵデータバスで接続されている。
【０００７】
通信制御回路５は、通信制御コントローラ５０と、チャンネル毎に設けたチャンネル“０”ＦＩＦＯ５１０〜チャンネル“ｎ”ＦＩＦＯ５１ｎと、情報レジスタ５４と、受信回路５５と、送信回路５６と、チャンネルセレクタ５７と、ＦＩＦＯ制御５８とを有して構成される。
【０００８】
各チャンネルＦＩＦＯ５１０〜５１ｎは、それぞれ、ＲＡＭから構成され、リードカウンタ５２０〜５２ｎと、ライトカウンタ５３０〜５３ｎとを有している。
【０００９】
ＣＰＵ１は、ＲＯＭ２に書き込まれているプログラムに従って、各種Ｉ／Ｏ機器３や通信制御回路５を制御する。各種Ｉ／Ｏ機器３とは、キーや表示装置、データ記憶装置、モータ、センサ等を指す。
【００１０】
以下、上記通信制御回路５を使ってデータをチャンネル“０”から通信バスへ送信する手順を説明する。
（１）ＣＰＵ１は、ＣＰＵデータバスから受けた通信データをチャンネル“０”ＦＩＦＯ５１０に書き込む。
（２）ＦＩＦＯに通信データを書き込む毎にチャンネル“０”ＦＩＦＯ５１０内部のライトカウンタ５３０はカウントアップし、リードカウンタ５２０と等しくなるとＦＩＦＯフルとなり、書き込みを停止する。なお、各ＦＩＦＯ５１０〜５１ｎのリードカウンタ５２０〜５２ｎとライトカウンタ５３０〜５３ｎは共に循環カウンタで、例えば６４バイトのＦＩＦＯの場合、各カウンタは、０→１→２→…→６３→０→１→…のように変化する。また、初期値は任意であるがリードカウンタ５２０〜５２ｎとライトカウンタ５３０〜５３ｎの値が等しい値である必要がある。
（３）ＣＰＵ１は、情報レジスタ５４にチャンネル“０”の通信速度や通信の種類や通信の有効／無効等の情報を書き込む。
（４）通信制御コントローラ５０は、チャンネル番号を０,１,…ｎまで順次変更しながらチャンネル“０”ＦＩＦＯ５１０からチャンネル“ｎ”ＦＩＦＯ５１ｎの状態と情報レジスタ５４の値をチェックし、通信の準備ができているか確認する。
（５）通信制御コントローラ５０は、チャンネル“０”の準備ができていると判断すると、送信回路５６に送信開始を指示する。
（６）送信回路５６がＦＩＦＯ制御回路５８に送信データ要求を出すと、ＦＩＦＯ制御回路５８は、チャンネル“０”ＦＩＦＯ５１０からデータを読み出し、チャンネルセレクタ５７を介して、送信回路５６にデータを送る。チャンネル“０”ＦＩＦＯ５１０からデータを読み出す毎にリードカウンタ５２０はカウントアップし、ライトカウンタ５３０と等しくなればＦＩＦＯエンプティになる。
（７）送信回路５６は、データを通信バスに出力する。
（８）データが無くなる（ＦＩＦＯエンプティとなる）まで（６）〜（７）を繰り返す。
（９）ＦＩＦＯエンプティになると（１）に戻り、次のチャネルの処理を実行する。
【００１１】
通信制御回路５を使ってチャンネル“１”で通信バスからデータを受信する手順を説明する。
（１）ＣＰＵ１は、情報レジスタ５４にチャンネル“１”の通信速度や通信の種類等の情報を書き込む。
（２）受信回路５５が通信バスからチャンネル“１”宛てのデータを受け取る。
（３）通信制御コントローラ５０は、受信したデータのチャンネルを確認し、チャンネル番号を“１”にする。
（４）受信回路５５がＦＩＦＯ制御５８に受信データ要求を出すと、ＦＩＦＯ制御回路５８は、チャンネル“１”ＦＩＦＯ５１１に書き込み信号を出し、受信データをチャンネル“１”ＦＩＦＯ５１１に書き込む。チャンネル“１”ＦＩＦＯ５１１に書き込む毎に、ライトカウンタ５３１はカウントアップする。
（５）全てのデータを受信する（ＦＩＦＯがフルとなったり、規定数のデータを受信したり、受信終了信号を受け取る等）と、ＣＰＵ１は、チャンネル“１”ＦＩＦＯ５１１からＣＰＵデータバスにデータを読み出す。データを読み出す毎にリードカウンタ５２１はカウントアップし、ライトカウンタ５３１と等しくなればＦＩＦＯエンプティとなる。
（６）ＦＩＦＯエンプティになると（１）に戻り、次のチャネルの処理を実行する。
【００１２】
上記で説明した通信制御回路において通信のためのチャンネルが多数存在する場合、その数だけ、ＦＩＦＯが必要となり、リードカウンタ、ライトカウンタ、ＦＩＦＯ用メモリ（ＲＡＭ）が必要となる。ＦＩＦＯ用メモリ（ＲＡＭ）の容量は、通信データのパケットの最大サイズ分以上必要となる。
【００１３】
例えば、ＵＳＢでは、チャンネルの数は２０３２、パケットの最大サイズは１０２３バイトなので、リードカウンタが２０３２個、ライトカウンタが２０３２個、ＦＩＦＯ用メモリ（ＲＡＭ）は１０２３バイト×２０３２＝２０７８７３６バイトという、大規模な回路と大容量のメモリが必要となる。
【００１４】
送信中にエラーが発生した場合、ＣＰＵ１は再度同じデータをＦＩＦＯに書き込み送信開始を指示する必要がある。また、受信中にエラーが発生した場合、ＣＰＵ１はＦＩＦＯのデータを捨てて再度同じデータを受信し直す必要がある。この処理をＣＰＵ１で行わずに通信制御回路５で行なう場合は、通信開始時のＦＩＦＯのリードカウンタおよびライトカウンタの値を保持する回路をＦＩＦＯ内部に追加し、通信エラー発生時は、この保持回路の値をリードカウンタおよびライトカウンタにライトバック（書き戻す）する必要がある。これにより、さらに回路規模が増大するという問題がある。
【００１５】
回路規模を削減する方法として最も簡単な方法は、図９に示す従来例２のような構成である。この構成の回路は、ＣＰＵ１と、ＲＯＭ２と、各種Ｉ／Ｏ機器３と、ワークＲＡＭ６１と、受信回路６２と、送信回路６３と、ＤＭＡコントローラ６４とを、ＣＰＵアドレスバスおよびＣＰＵデータバスで接続して構成される。
【００１６】
ワークＲＡＭ６１は、通信データと、アドレスと、データ数と、情報を格納する。ＤＭＡコントローラ６４は、ＤＭＡ転送要求制御６４０と、アドレスカウンタ６４１と、データ数カウンタ６４２とを有している。
【００１７】
この構成では、ＣＰＵ１が各チャンネルのデータ、アドレス、データ数、情報を全てワークＲＡＭ６１に格納しておき、ＤＭＡコントローラ６４を使って受信回路６２および送信回路６３とワークＲＡＭ６１の間でＣＰＵデータバスを介してデータを転送させることになる。
【００１８】
ＣＰＵ１は、ＲＯＭ２に書き込まれているプログラムに従って、各種Ｉ／Ｏ機器３やワークＲＡＭ６１、受信回路６２、送信回路６３、ＤＭＡコントローラ６４を制御する。
【００１９】
データの送信は、以下の手順で行われる。
（１）ＣＰＵ１は、データをワークＲＡＭ６１に書き込む。
（２）ＣＰＵ１は、ワークＲＡＭ６１内のデータ数、通信速度や通信の種類や通信の有効／無効等の情報を見て送信の準備ができているかどうか判断する。
（３）ＣＰＵ１は、送信の準備ができていると判断すると、データが格納されているワークＲＡＭ６１のアドレスとデータ数をＤＭＡコントローラ６４のアドレスカウンタ６４１とデータ数カウンタ６４２に設定し、送信回路６３に送信開始を指示する。
（４）送信回路６３がＤＭＡコントローラ６４のＤＭＡ転送要求制御６４０に送信データ要求を出すと、ＤＭＡコントローラ６４は、設定されたアドレスをＣＰＵアドレスバスに出力し、ワークＲＡＭ６１の該当するデータを読み出し、ＣＰＵデータバスを介して送信回路６３にデータを転送する。ＤＭＡコントローラ６４は、データを転送する毎にアドレスカウンタ６４１をカウントアップし、データ数カウンタ６４２をカウントダウンする。
（５）送信回路６３は、ワークＲＡＭ６１から読み出したデータを通信バスに出力する。
（６）データが無くなる（データ数カウンタ６４２が０になる）まで（４）〜（５）を繰り返す。
（７）データがなくなると（１）に戻り、次のチャネルの処理を行う。
【００２０】
データの受信は、以下の手順で行われる。
（１）ＣＰＵ１は、受信データを格納するワークＲＡＭ６１のアドレス、データ数、情報等をワークＲＡＭ６１に書き込む。
（２）受信回路６２が通信バスからチャンネル“１”宛てのデータを受け取る。
（３）ＣＰＵ１は、受信したデータのチャンネルを確認し、チャンネル“１”の情報やデータ数を確認し、受信の準備ができていると判断すれば、アドレス、データ数をＤＭＡコントローラ６４のアドレスカウンタ６４１とデータカウンタ６４２に設定する。
（４）受信回路６２がＤＭＡコントローラ６４のＤＭＡ転送要求制御６４０に受信データ要求を出すと、ＤＭＡコントローラ６４は設定されたアドレスをＣＰＵアドレスバスに出力し、受信回路６２からデータを読み出し、ＣＰＵデータバスを介してワークＲＡＭ６１にデータを転送する。ＤＭＡコントローラ６４は、データを転送する毎にアドレスカウンタ６４１をカウントアップし、データ数カウンタ６４２をカウントダウンする。
（５）全てのデータを受信（データ数カウンタ６４２が０になったり、規定数のデータを受信したり、受信終了信号を受け取る等）すると処理を終了する。
（６）全てのデータの受信が終了すると（１）に戻り、次のチャネルの処理を行う。
【００２１】
この方法では、送受信するデータを全てワークＲＡＭ６１に格納するので、実際に通信を行っているチャンネル分のメモリをワークＲＡＭ６１に確保すればよく、さらにアドレスカウンタ６４１およびデータ数カウンタ６４２もＤＭＡコントローラ６４内部のものを各チャンネルで共有できるので、回路規模は非常に小さくなる。
【００２２】
しかし、ＣＰＵ１は１回の通信を行うためにＤＭＡコントローラ６４のアドレスカウンタ６４１とデータ数カウンタ６４２に値を書き込み、さらに送信回路６３に送信を指示したり受信回路６２からの要求に即座に応答したりする必要があるので、高速な通信を行うには、ＣＰＵ１が非常に高い性能を持っている必要がある。
【００２３】
また、送信中にエラーが発生した場合、ＣＰＵ１は再度同じデータを送信するためにＤＭＡコントローラ６４のアドレスカウンタ６４１とデータ数カウンタ６４２に値を書き込み、送信回路６３に送信を指示する必要がある。受信中にエラーが発生した場合、ＣＰＵ１は同じデータを受信するためにＤＭＡコントローラ６４のアドレスカウンタ６４１とデータ数カウンタ６４２に値を書き込み、受信を待つ必要がある。このようにエラー発生時にもＣＰＵ１が処理を行なう必要が有る。
【００２４】
また、データ転送時はＤＭＡコントローラ６４がＣＰＵアドレスバスやＣＰＵデータバスを使用するのでＣＰＵ１が止まり、各種Ｉ／Ｏ機器３の制御が疎かになるという問題を有している。
【００２５】
これを改善する方法として、図１０に示す従来例３のように、共有メモリを使用するとともに、通信をＣＰＵ１とは別のＣＰＵで行う方法がある。
【００２６】
この例では、回路は、ＣＰＵ１と、ＲＯＭ２と、各種Ｉ／Ｏ機器３と、共有ワークＲＡＭ７１と、共有メモリ７２と、受信回路７３と、送信回路７４と、ＤＭＡコントローラ７５と、ＣＰＵ７０と、ＲＯＭ７６とを有して構成される。
【００２７】
ＣＰＵ１、ＲＯＭ２、各種Ｉ／Ｏ機器３、共有ワークＲＡＭ７１、共有メモリ７２は、互いにＣＰＵ１アドレスバスおよびＣＰＵ１データバスに接続される。
【００２８】
ＣＰＵ７０、共有ワークＲＡＭ７１、共有メモリ７２、受信回路７３、送信回路７４、ＤＭＡコントローラ７５、ＲＯＭ７６は、互いにＣＰＵ７０アドレスバスおよびＣＰＵ７０データバスに接続される。
【００２９】
ＣＰＵ１は、ＲＯＭ２に書き込まれているプログラムに従って、各種Ｉ／Ｏ機器３や共有ワークＲＡＭ７１、共有メモリ７２を制御する。ＣＰＵ７０は、ＲＯＭ７６に書き込まれているプログラムに従って、共有ワークＲＡＭ７１や共有メモリ７２、受信回路７３、送信回路７４、ＤＭＡコントローラ７５を制御する。
【００３０】
データの送信は、以下の手順で行われる。
（１）ＣＰＵ１は、データを共有ワークＲＡＭ７１に、データのアドレス、データ数、情報等を共有メモリ７２に書き込む。
（２）ＣＰＵ７０は、共有メモリ７２内のデータ数、通信速度や通信の種類や通信の有効／無効等の情報等を見て送信の準備ができているかどうか判断する。
（３）ＣＰＵ７０は、送信の準備ができていると判断すると、データが格納されている共有ワークＲＡＭ７１のアドレスとデータ数をＤＭＡコントローラ７５のアドレスカウンタ７５１とデータ数カウンタ７５２に設定し、送信回路７４に送信開始を指示する。
（４）送信回路７４がＭＡコントローラ７５のＤＭＡ転送制御要求７５０に通信データ要求を出すと、ＤＭＡコントローラ７５は設定されたアドレスをＣＰＵ７０アドレスバスに出力し、共有ワークＲＡＭ７１の該当するデータを読み出し、ＣＰＵ７０データバスを介して送信回路７４にデータを転送する。ＤＭＡコントローラ７５は、データを転送する毎にアドレスカウンタ７５１をカウントアップし、データ数カウンタ７４２をカウントダウンする。
（５）送信回路７４は、データを通信バスに出力する。
（６）データが無くなる（データ数カウンタ７５２が０になる）まで（４）〜（５）を繰り返す。
（７）データがなくなると（１）に戻り、次のチャンネルの処理を実行する。
【００３１】
データ受信は、次の手順で行われる。
（１）ＣＰＵ１は、受信データを格納する共有ワークＲＡＭ７１のアドレス、データ数、情報等を共有メモリ７２に書き込む。
（２）受信回路７３が通信バスからチャンネル“１”宛てのデータを受け取る。
（３）ＣＰＵ７０は、受信したデータのチャンネルを確認し、チャンネル“１”の情報やデータ数を確認し、受信の準備ができていると判断すれば、アドレス、データ数をＤＭＡコントローラ７５のアドレスカウンタ７５１とデータ数カウンタ７５２に設定する。
（４）受信回路７３がＤＭＡコントローラ７５のＤＭＡ転送要求制御７５０に受信データ要求を出すと、ＤＭＡコントローラ７５は設定されたアドレスをＣＰＵ７０アドレスバスに出力し、受信回路７３からデータを読み出し、ＣＰＵ７０データバスを介して共有ワークＲＡＭ７１にデータを転送する。ＤＭＡコントローラ７５は、データを転送する毎にアドレスカウンタ７５１をカウントアップし、データ数カウンタ７５２をカウントダウンする。
（５）全てのデータを受信（データ数カウンタが０になったり、規定数のデータを受信したり、受信終了信号を受け取る等）すれば処理を終了する。
（６）全てのデータを受信すると（１）に戻り、次のチャンネルの処理を行う。
【００３２】
この方法では、通信の制御やデータ転送をＣＰＵ７０が行うので、ＣＰＵ１は各種Ｉ／Ｏ機器３の制御に専念することができる。
【００３３】
しかし、ＣＰＵ７０は、１回の通信を行うためにＤＭＡコントローラ７５のアドレスカウンタ７５１とデータ数カウンタ７５２に値を書き込み、さらに送信回路７４に送信を指示したり受信回路７３からの要求に即座に応答したりする必要があるので、高速な通信を行うには、ＣＰＵ７０が非常に高い性能を持っていることが必要となる。
【００３４】
また、送信中にエラーが発生した場合、ＣＰＵ７０は、再度同じデータを送信するためにＤＭＡコントローラ７５のアドレスカウンタ７５１とデータ数カウンタ７５２に値を書き込み、送信回路７４に送信を指示する必要がある。受信中にエラーが発生した場合、ＣＰＵ７０は、同じデータを受信するためにＤＭＡコントローラ７５のアドレスカウンタ７５１とデータ数カウンタ７５２に値を書き込み、受信を待つ必要がある。このようにエラー発生時にもＣＰＵ７０が処理を行なう必要が有る点は改善されていない。
【００３５】
また、一般にＣＰＵの回路規模は大きく、さらにプログラムを格納するＲＯＭも必要となり、図９と比べるとかなり回路規模が増大する。
【００３６】
特開昭６２-６００４４号公報には、さらにＣＰＵを増やし、送信と受信を別々のＣＰＵで制御することで高速化を図っているが、さらに回路規模が増大するという問題が有る。
【００３７】
【発明が解決しようとする課題】
本発明は、非常に多くのチャンネルの数を用いかつ高速な通信において、通信エラーが発生したときに、ＣＰＵの処理負担を増やさずに最小限の回路規模で再通信することを実現する送信制御回路および受信制御回路ならびに通信制御回路を提供することを目的とする。
【００３８】
【課題を解決するための手段】
上記課題を解決するために、本発明は、通信データをＣＰＵが接続されるＣＰＵバスと通信制御回路とで共有する共有ワークＲＡＭに格納し、データが格納されているアドレスやデータ数、各種情報をＣＰＵが接続されるＣＰＵバスと通信制御回路とで共有するそれぞれ別の共有メモリ（アドレスレジスタ、データ数レジスタ、情報レジスタ）に格納しておき、アドレスを格納している共有メモリ（アドレスレジスタ）をアドレスカウンタと、データ数を格納している共有メモリ（データ数レジスタ）をデータ数カウンタと、各種情報を格納している共有メモリ（情報レジスタ）を通信制御コントローラと接続しておき、１度にアドレス、データ数、情報の設定、更新を行えるようにすることで、高速な通信を最小限の回路規模で実現できる。
【００３９】
さらに、上記課題を解決するために、本発明は、ＣＰＵにデータバスおよびアドレスバスを介して接続されるとともに通信バスに接続される送信制御回路において、送信データを格納するＣＰＵと送信制御回路の両方からアクセス可能な共有メモリと、共有メモリから転送された送信データを通信バスに送信する送信回路と、送信データを格納する共有メモリのアドレスが設定されるＣＰＵと送信制御回路の両方からアクセス可能なアドレスレジスタと、共有メモリに格納される通信データの数が設定されるＣＰＵと送信制御回路の両方からアクセス可能なデータ数レジスタと、通信速度や通信のタイプや通信の有効／無効などの情報が設定されるＣＰＵと送信制御回路の両方からアクセス可能な情報レジスタと、アドレスレジスタに設定されたアドレスが設定されカウンタクロックによってカウントアップされるアドレスカウンタと、データ数レジスタに設定されたデータ数の値が設定されカウンタクロックによってカウントダウンされるデータ数カウンタと、送信回路からの送信データ転送要求に応じてアドレスカウンタが示す共有メモリのアドレスから送信データを読み出し送信回路に転送するとともにカウンタクロックを生成するＲＡＭ制御回路と、データ数レジスタや情報レジスタの値を読み出し送信の準備ができているかを判断し、送信の準備ができていれば、アドレスレジスタのアドレスをアドレスカウンタにデータ数レジスタのデータ数の値をデータ数カウンタにそれぞれ設定し、送信回路に送信開始を指示し、送信が成功すれば、アドレスカウンタの値をアドレスレジスタに、データ数カウンタの値をデータ数レジスタにそれぞれライトバックする通信制御コントローラとを備えた。
【００４０】
上記課題を解決するために、本発明は、ＣＰＵにデータバスおよびアドレスバスを介して接続されるとともに通信バスに接続される受信制御回路において、受信データを格納するＣＰＵと受信制御回路の両方からアクセス可能な共有メモリと、通信バスから受信した受信データを共有メモリに転送する受信回路と、受信データを格納する共有メモリのアドレスが設定されるＣＰＵと受信制御回路の両方からアクセス可能なアドレスレジスタと、共有メモリに格納される受信データの数が設定されるＣＰＵと受信制御回路の両方からアクセス可能なデータ数レジスタと、通信速度や通信のタイプや通信の有効／無効などの情報が設定されるＣＰＵと受信制御回路の両方からアクセス可能な情報レジスタと、アドレスレジスタに設定されたアドレスが設定されカウンタクロックによってカウントアップされるアドレスカウンタと、データ数レジスタに設定されたデータ数の値が設定されカウンタクロックによってカウントダウンされるデータ数カウンタと、受信回路からの受信データ転送要求に応じて受信データを共有メモリに転送しアドレスカウンタが示すアドレスに書き込むとともにカウンタクロックを生成するＲＡＭ制御回路と、データ数レジスタや情報レジスタの値を読み出し受信の準備ができているかを判断し、受信の準備ができていれば、アドレスレジスタのアドレスをアドレスカウンタにデータ数レジスタのデータ数の値をデータ数カウンタにそれぞれ設定し、受信回路に受信データの転送開始を指示し、受信が成功すれば、アドレスカウンタの値をアドレスレジスタにデータ数カウンタの値をデータ数レジスタにそれぞれライトバックする通信制御コントローラとを備えた。
【００４１】
上記課題を解決するために、本発明は、ＣＰＵにデータバスおよびアドレスバスを介して接続されるとともに通信バスに接続される通信制御回路において、通信データを格納するＣＰＵと通信制御回路の両方からアクセス可能な共有メモリと、共有メモリから転送された通信データを通信バスに送信する送信回路と、通信バスから受信した通信データを共有メモリに転送する受信回路と、通信データを格納する共有メモリのアドレスが設定されるＣＰＵと通信制御回路の両方からアクセス可能なアドレスレジスタと、共有メモリに格納される通信データの数が設定されるＣＰＵと通信制御回路の両方からアクセス可能なデータ数レジスタと、通信速度や通信のタイプや通信の有効／無効などの情報が設定されるＣＰＵと通信制御回路の両方からアクセス可能な情報レジスタと、アドレスレジスタのアドレスが設定されカウンタクロックによってカウントアップされるアドレスカウンタと、データ数レジスタのデータ数の値が設定されカウンタクロックによってカウントダウンされるデータ数カウンタと、送信中は送信回路からの送信データ転送要求に応じてアドレスカウンタが示す共有メモリのアドレスから送信データを読み出し送信回路に転送するとともにカウンタクロックを生成し、受信中は受信回路からの受信データ転送要求に応じて受信データを共有メモリに転送しアドレスカウンタが示すアドレスに書き込むとともにカウンタクロックを生成するＲＡＭ制御回路と、データ数レジスタや情報レジスタの値を読み出して送信の準備ができているか受信の準備ができているかを判断し、送信の準備ができていれば、アドレスレジスタのアドレスをアドレスカウンタにデータ数レジスタのデータ数の値をデータ数カウンタにそれぞれ設定し、送信回路に送信開始を指示し、送信が成功すれば、アドレスカウンタの値をアドレスレジスタにデータ数カウンタの値をデータ数レジスタにそれぞれライトバックし、受信の準備ができていて通信バスからデータが入力されると、アドレスレジスタのアドレスをアドレスカウンタにデータ数レジスタの値をデータ数カウンタにそれぞれ設定し、受信が成功すれば、アドレスカウンタの値をアドレスレジスタにデータ数カウンタの値をデータ数レジスタにそれぞれライトバックする通信制御コントローラとを備えた。
【００４２】
さらに、本発明は、上記送信制御回路または受信制御回路若しくは通信制御回路において、共有メモリを、同期シングルポートＲＡＭと、２つの異なるアドレス信号の一方を選択して同期シングルポートＲＡＭに入力するアドレスセレクタと、２つの異なるライト要求信号の一方を選択して同期シングルポートＲＡＭに入力するライト要求セレクタと、２つの異なるライトデータ信号の一方を選択して同期シングルポートＲＡＭに入力するライトデータセレクタと、同期シングルポートＲＡＭのリードデータを保持する２組のラッチ回路と、カウンタクロックを分周する分周回路とから構成し、カウンタクロックを分周して作成したセレクト信号で各セレクタやラッチを切り替えるようにした。
【００４３】
【発明の実施形態】
本発明にかかる通信（送信／受信）制御回路を用いた通信制御装置の構成を、図１を用いて説明する。本発明にかかる通信制御回路を備えた通信制御装置は、ＣＰＵ１と、ＲＯＭ２と、各種Ｉ／Ｏ機器３と、通信制御回路４とを備えており、ＣＰＵ１と、ＲＯＭ２と、各種Ｉ／Ｏ機器３と、通信制御回路４は、ＣＰＵアドレスバスおよびＣＵデータバスを介して互いに接続されて構成される。さらに通信制御回路４は、通信バスに接続されている。
【００４４】
ＣＰＵ１は、ＲＯＭ２に書き込まれているプログラムに従って、各種Ｉ／Ｏ機器３や共有ワークＲＡＭ４１、アドレスレジスタ４２、データ数レジスタ４３、情報レジスタ４４を制御する。
【００４５】
ＲＯＭ２は、各種Ｉ／Ｏ機器３や共有ワークＲＡＭ４１、アドレスレジスタ４２、データ数レジスタ４３、情報レジスタ４４を制御するプログラムを格納している。
【００４６】
各種Ｉ／Ｏ機器３は、通信制御装置によって対向する通信制御装置間で通信を行う各種通信機器である。
【００４７】
通信制御回路４は、通信バスを介して対向する通信制御装置との間の通信を制御する回路で、この例では、最大２０３２チャネルの通信を時分割で行うことができる回路として構成される。
【００４８】
通信制御回路４は、通信制御コントローラ４０と、共有ワークＲＡＭ４１と、アドレスレジスタ４２と、データ数レジスタ４３と、情報レジスタ４４と、アドレスカウンタ４５と、データ数カウンタ４６と、受信回路４７と、送信回路４８と、ＲＡＭ制御回路４９とを有して構成される。
【００４９】
ＣＰＵアドレスバスは、ＣＰＵ１、ＲＯＭ２、各種Ｉ／Ｏ機器３および通信制御回路４の共有ワークＲＡＭ４１、アドレスレジスタ４２、データ数レジスタ４３、情報レジスタ４４の間で、アドレスおよびアドレスに関する情報をやり取りするバスである。
【００５０】
ＣＰＵデータバスは、ＣＰＵ１、ＲＯＭ２、各種Ｉ／Ｏ機器３および通信制御回路４の共有ワークＲＡＭ４１、アドレスレジスタ４２、データ数レジスタ４３、情報レジスタ４４の間で、通信データの他各種情報をやり取りするバスである。
【００５１】
通信制御コントローラ４０は、通信制御回路４内の、データ数レジスタ４３、情報レジスタ４４、受信回路４７を絶えずモニターし、送信の準備ができていたりデータを受信した場合に、共有ワークＲＡＭ４１、アドレスレジスタ４２、データ数レジスタ４３、情報レジスタ４４、アドレスカウンタ４５５、データ数カウンタ４６、受信回路４７、送信回路４８、ＲＡＭ制御回路４９を制御して通信を行なう。
【００５２】
共有ワークＲＡＭ４１は、ＣＰＵバス側と通信バス（通信制御回路）側の双方からアクセス可能な共有ＲＡＭであり、ＣＰＵバスと通信バスとの間で送受信する通信データ（転送データ）を格納するメモリである。
【００５３】
アドレスレジスタ４２は、ＣＰＵバス側と通信バス側の双方からアクセス可能なレジスタであり、共有ワークＲＡＭ４１に格納された通信データのアドレスが設定されるレジスタである。
【００５４】
データ数レジスタ４３は、ＣＰＵバス側と通信バス側の双方からアクセス可能なレジスタであり、共有ワークＲＡＭ４１に格納される通信データのデータ数が設定されるレジスタである。
【００５５】
情報レジスタ４４は、ＣＰＵバス側と通信バス側の双方からアクセス可能なレジスタであり、共有ワークＲＡＭ４１に格納された通信データに関する通信速度や通信の種類や通信の有効／無効等の情報等の各種情報が設定されるレジスタである。
【００５６】
アドレスカウンタ４５は、通信制御コントローラ４０が示すチャンネル番号の通信データを共有ワークＲＡＭ４１に格納するアドレスであるアドレスレジスタ４２から読み出したアドレス値に設定され、ＲＡＭ制御回路４９から出力されるカウンタクロックによりカウントアップされる。
【００５７】
データ数カウンタ４６は、通信制御コントローラ４０が示すチャンネル番号の通信データのデータ数であるデータ数レジスタ４３から読み出した値に設定され、ＲＡＭ制御回路４９から出力されるカウンタクロックによりカウントダウンされる。
【００５８】
受信回路４７は、通信バスから通信データを受信し、受信した旨を通信制御コントローラ４０へ通知するとともに、ＲＡＭ制御回路４９からの受信データ転送要求に基づいて、受信した通信データを共有ワークＲＡＭ４１へ転送する回路である。
【００５９】
送信回路４８は、通信制御コントローラ４０からの指令に基づいて送信データ転送要求をＲＡＭ制御回路４９へ送出し、共有ワークＲＡＭ４１から転送された通信データを通信バスへ送信する回路である。
【００６０】
ＲＡＭ制御回路４９は、受信回路４７から共有ワークＲＡＭ４１への通信データ（受信データ）の転送が成功したときまたは共有ワークＲＡＭ４１から送信回路４８への通信データ（送信データ）の転送が成功したときに、カウンタクロックを生成し、アドレスカウンタ４５およびデータ数カウンタ４６へ送出する回路である。
【００６１】
本発明においては、通信データの送信または受信が成功するとカウンタクロックによってカウントアップされたアドレスカウンタ４５の値がアドレスレジスタ４２にライトバックされる。また、通信データの送信または受信が成功するとカウンタクロックによってカウントダウンされたデータ数カウンタ４６の値がデータ数レジスタ４３にライトバックされる。
【００６２】
また、本発明においては、通信データの送信または受信が成功しないときには、アドレスカウンタ４５およびデータ数カウンタ４６の値は、アドレスレジカウンタ４２およびデータ数レジスタ４３へライトバックされない。これにより、通信コントローラ４０がアドレスレジカウンタ４２およびデータ数レジスタ４３の値をアドレスレカウンタ４５およびデータ数カウンタ４６の値を再設定するだけで、同じ通信データを再送信または再受信することが可能になる。
【００６３】
図１に示した通信制御装置における共有ワークＲＡＭ（共有メモリ）４１の構成を、図２を用いて説明する。通信データの格納部として働くＣＰＵバス側と通信バス側で共有する共有ワークＲＡＭは、デュアルポートＲＡＭを使う方法が一般的である。しかし、デュアルポートＲＡＭは、一般的にシングルポートＲＡＭと比べると回路規模が２倍程度大きいので、現状のままでは本発明に用いるには適さない。さらにレジスタはフリップフロップを使う方法が一般的であるが、数が多くなるとシングルポートＲＡＭと比べると回路規模が８倍程度になり、現状のままではやはり本発明には適さない。図２に、同期シングルポートＲＡＭを使って、共有メモリ４１実現する方法を示す。アドレスレジスタ４２、データ数レジスタ４３、情報レジスタ４４も、ほぼ同様の原理で構成される。
【００６４】
共有ワークＲＡＭ４１は、同期シングルポートＲＡＭ１０と、アドレス用のセレクタであるライトセレクタ１１と、ライトデータ用のセレクタであるライトデータセレクタ１２と、ライト要求用セレクタであるライト要求セレクタ１３と、フリップフロップからなる分周器１４と、分周器の出力を反転するインバータ１５と、第１のラッチ１６と、第２のラッチ１７とから構成される。
【００６５】
同期シングルポートＲＡＭ１１は、ライト要求１またはライト要求２によってアドレス１またはアドレス２で指定されるアドレスにライトデータ１またはライトデータ２が書き込まれるＲＡＭであり、アドレス１またはアドレス２が指定するアドレスからデータを読み出し、第１のラッチまたは第２のラッチから出力するＲＡＭである。
【００６６】
アドレスセレクタ１１は、アドレス１またはアドレス２のいずれかを分周器の出力によって交互に選択して出力する手段である。
【００６７】
ライトデータセレクタ１２は、ライトデータ１またはライトデータ２のいずれかを分周器の出力によって交互に選択して出力する手段である。
【００６８】
ライト要求セレクタ１３は、ライト要求１またはライト要求２のいずれかを分周器の出力によって交互に選択し、ライトイネーブルを出力する手段である。
【００６９】
分周器１４は、カウンタクロックを分周して時分割信号を出力する手段である。
【００７０】
第１のラッチ１６および第２のラッチ１７は、アドレス１またはアドレス２によって指定されたアドレスから読み出したデータを交互にラッチし、リードデータ１またはリードデータ２として出力する手段である。
【００７１】
図３のタイミングチャートを用いて、図２の共有ワークＲＡＭにおけるデータの書き込みおよび読み出しタイミングを説明する。ＲＡＭ制御回路４９からのカウンタクロックが、同期シングルポートＲＡＭ１０と、分周器１４と、第１のラッチ１６と、第２のラッチ１７に入力される。分周器１４は、クロック入力に基づいて時分割信号を出力する。
【００７２】
アドレスセレクタ１１に入力されたアドレス（ＣＰＵアドレスバス側）１およびアドレス（通信バス側通信アドレス）２は、時分割信号に基づいていずれかが交互に選択され、同期シングルポートＲＡＭ１０へアドレスとして出力される。
【００７３】
ライト要求セレクタ１３に入力されたライト要求１（ＣＰＵデータバス側）およびライト要求（通信バス側）２は、時分割信号に基づいていずれかが交互に選択され、同期シングルポートＲＡＭ１０へライトイネーブルとして出力される。
【００７４】
ライトデータセレクタ１２に入力されたライトデータ１およびライトデータ２は、時分割信号に基づいていずれかが交互に選択され、同期シングルポートＲＡＭ１０へライトデータとして出力される。
【００７５】
リードデータは、時分割信号に基づいて同期シングルポートＲＡＭ１０から読み出され、第１のラッチ１６および第２のラッチ１７に出力される。
【００７６】
第１のラッチ１６および第２のラッチ１７に入力されたリードデータは、時分割信号に基づいて、第１のラッチ１６からリードデータ１として、第２のラッチ１７からリードデータ２として、交互に出力される。
【００７７】
分周器１４にカウンタクロックを入力すると、インバータ１５により時分割信号はクロックの立ち上がりエッジで“０”から“１”へ、“１”から“０”へ、交互に替わる。それにより、アドレスセレクタ１１、ライトデータセレクタ１２、ライト要求セレクタ１３が切り替わり、時分割信号が“０”の時はアドレス１、ライトデータ１、ライト要求１が選択され、時分割信号が“１”の時はアドレス２、ライトデータ２、ライト要求２が選択される。
【００７８】
このようにして選択された信号が同期シングルポートＲＡＭ１０に入力され、クロックの立ち上がりでライトされたり読み出されたりする。
【００７９】
読み出された値であるリードデータは、時分割信号が“１”の時、クロックの立ち上がりで第１のラッチ１６に保持される。時分割信号が“０”の時、クロックの立ち上がりで第２のラッチ１７に保持される。
【００８０】
このようにして２つの別々の回路から同期シングルポートＲＡＭ１０にアクセスできるようになる。アドレスレジスタ４２、データ数レジスタ４３、情報レジスタ４４も、ほぼ同様の原理で動作する。
【００８１】
通信制御装置における通信データ（送信データ）を送信する場合の動作手順を図４を用いて、この手順におけるアドレスレジスタ４２およびデータ数レジスタ４３等の移り変わりの例を図５を用い説明する。この例では、初期状態におけるチャンネル“０”のアドレスが“１５”、データ数が“４”、チャンネル“１”のアドレスが“５３”、データ数が“２０”、チャンネル“２”のアドレスが“０”、データ数が“２”である場合である。また、情報レジスタ４４に設定されたチャンネル番号は“０”であったとする。
【００８２】
ＣＰＵ１は、チャネル番号“０”の通信速度や通信の種類や通信の有効／無効等の情報等を情報レジスタ４４に書き込む（Ｓ１０１)。
【００８３】
ＣＰＵ１は、通信データ（送信データ）を共有ワークＲＡＭ４１の所定のアドレスに書き込み(Ｓ１０２)、送信データを格納している共有ワークＲＡＭ４２のアドレスをアドレスレジスタ４２に書き込み(Ｓ１０３)、送信データのデータ数をデータ数レジスタ４３に、書き込む（Ｓ１０４）。
【００８４】
ＣＰＵ１は、送信データの送信が終了したかを監視し(Ｓ１０５)、送信データの送信が終了すると送信処理を終了する（Ｓ１０６）。
【００８５】
一方、通信コントローラ４０は、ＣＰＵ１が指定したチャネル番号“０”の送信情報を情報レジスタ４４から、データ数をデータ数レジスタ４３から読み出す（Ｓ１１０）。
【００８６】
通信制御コントローラ４０は、データ数レジスタ４３や、情報レジスタ４４を見て送信の準備ができているかどうか判断する（Ｓ１１１）。
【００８７】
送信の準備ができていると判断すると、通信制御コントローラ４０は、アドレスレジスタ４２の値“１５“をアドレスカウンタ４５に設定し、データ数レジスタ４３の値“４”をデータ数カウンタ４６に設定する(Ｓ１１３)。
【００８８】
通信制御コントローラ４０は、送信回路４８に送信データの送信開始を指示する(Ｓ１１４)。送信回路４８は、送信データの転送を要求する送信データ転送要求（送信データ要求）をＲＡＭ制御回路４９へ通知する（Ｓ１１５）。ＲＡＭ制御回路４９は、共有ワークＲＡＭ４１のアドレスカウンタ４５が指すアドレス“１５”から送信データを読み出し、送信回路４８へ転送して書き込む。その後カウンタクロックを一つ出力する（Ｓ１１６）。
【００８９】
送信データの転送が成功するとＲＡＭ制御回路４９からカウンタクロックが入力され、アドレスカウンタ４５は１カウントアップして“１６”とし、データ数カウンタ４６は１カウントダウンして“３”とする（Ｓ１１７）。
【００９０】
送信回路４８は、送信データを通信バスに出力する。送信制御コントローラ４０は、データ数カウンタ４６を参照してデータ数が“０”となったかどうかを見て、まだ送信データを送信するか否かを判断する（Ｓ１１８）。
【００９１】
データ数カウンタ４６のデータ数が“０”とならないときには、ステップＳ１１５に戻り次の通信データの送信処理を実行する。
【００９２】
送信データが無くなる（データ数カウンタ４６が“０”になる）まで送信データの送信処理（ステップＳ１１５〜Ｓ１１８）を繰り返し、ステップＳ１１８でデータ数カウンタ４６が“０”になると、送信データの送信が修了したと判断して、対向する通信制御回路からのハンドシェイク（応答）を受信し（Ｓ１１９）、送信が成功したか否かを判断する（Ｓ１２０）。
【００９３】
送信データの送信が成功すれば、アドレスカウンタ４５の値“１９”をアドレスレジスタ４２に、データ数カウンタ４６の値“０”をデータ数レジスタ４３にライトバックした（Ｓ１２１）後、通信制御コントローラ４０は、チャンネル番号をカウントアップして（Ｓ１１２）、ステップＳ１１０に戻り次のチャネル番号“１”の送信データの送信処理に移行する。チャンネル番号は循環カウンタとなっている。
【００９４】
チャンネル番号“１”では、アドレスカウンタ４５にアドレス“５３”が、データ数カウンタ４６にデータ数“２０”が設定される（Ｓ１１３）。ステップＳ１１４の後ステップＳ１１５〜ステップＳ１１８の処理を繰返し、チャンネル“１”の最大パケット長を“５”とすると、送信回路４８は５個のデータを送信した時点で送信を終了し、送信データを“５”送信できたときには、アドレスカウンタ値が“５８”に、データカウンタ値が“１５”に設定されているので、ステップＳ１２１でこれらの値をそれぞれアドレスレジスタ４２およびデータ数レジスタ４３にライトバックする。その後、ステップＳ１１２でチャンネル番号をカウントアップし、次のチャネル番号“２”の送信処理に備える。
【００９５】
チャンネル番号“２”では、アドレスカウンタ４５にアドレス“０”が、データ数カウンタ４６にデータ数“２”が設定される（Ｓ１１３）。ステップＳ１１４の処理後ステップＳ１１５〜ステップＳ１１８の処理を繰り返す。
【００９６】
ステップＳ１２０で送信が成功しなかったと判断されたときには、ステップＳ１１２へ戻りチャンネル番号をカウントアップして、次のチャネル番号“０”の送信データの送信処理に移行する（Ｓ１１０）。チャンネル番号“０”の通信データは既に送信済みであるので、準備ができていないと判断して（Ｓ１１１）、チャンネル番号をカウントアップ（Ｓ１１２）し、次のチャネル番号“１”の送信データの送信処理に移行する（Ｓ１１０）。
【００９７】
チャンネル番号“１”では、アドレスカウンタ４５にアドレス“５８”が、データ数カウンタ４６にデータ数“１５”が設定される（Ｓ１１３）。ステップＳ１１４の後ステップＳ１１５〜ステップＳ１１８の処理を繰返し、チャンネル“１”の最大パケット長を“５”を送信した時点で送信を終了し、送信データが“５”送信できたときには、アドレスカウンタ値が“６３”に、データカウンタ値が“１０”に設定されているので、ステップＳ１２１でこれらの値をそれぞれアドレスレジスタ４２およびデータ数レジスタ４３にライトバックする。その後、ステップＳ１１２でチャンネル番号をカウントアップし、次のチャネル番号“２”の送信処理に備える。
【００９８】
チャンネル番号“２”では、前回の通信データ送信が成功していないので、アドレスカウンタ４２およびデータ数カウンタ４３の値は、初期設定のままであり、アドレスカウンタ４５にアドレス“０”が、データ数カウンタ４６にデータ数“２”が設定される（Ｓ１１３）。ステップＳ１１４の処理後ステップＳ１１５〜ステップＳ１１８の処理を繰り返す。通信データの送信が成功したときには、アドレスカウンタ４５の値が“２”に、データ数カウンタ４６の値が“０”となっているので、この値をそれぞれ、アドレスレジスタ４２およびデータ数レジスタ４３へライトバックする。
【００９９】
通信制御装置における通信データを受信する場合の動作手順を、図６を用いて説明する。
【０１００】
ＣＰＵ１は、通信速度や通信の種類や通信の有効／無効等の受信情報を情報レジスタ４４に書き込む（Ｓ２０１)。
【０１０１】
ＣＰＵ１は、受信した通信データ（受信データ）を書き込む共有ワークＲＡＭ４１のアドレスを、アドレスレジスタ４２に書き込む(Ｓ２０２)。ＣＰＵ１は、受信可能なデータ数をデータ数レジスタ４３に書き込む（Ｓ２０３)。
【０１０２】
ＣＰＵ１は、受信データの受信を監視し(Ｓ２０４)、受信データを受信したことを知ると、受信データを共有ワークＲＡＭ４１から読み出し（Ｓ２０５）、受信処理を終了する（Ｓ２０６）。
【０１０３】
一方、通信コントローラ４０は、受信回路４７において、自分宛のパケットを受信したか否かを監視し（Ｓ２１０）、受信回路４７が通信バスからチャンネル“１”宛てのパケットを受け取ると、通信制御コントローラ４０は、受信したデータのチャンネルを確認し、チャンネル番号を“１”にして、チャンネル番号“１”の情報とデータ数をそれぞれ情報レジスタ４４とデータ数レジスタ４３から読み出す（Ｓ２２１）。
【０１０４】
通信コントローラ４０は、データ数レジスタ４３や情報レジスタ４４を確認し、受信の準備ができているか否かを判断する（Ｓ２１２）。受信の準備ができていると判断すれば、アドレスレジスタ４２の値をアドレスカウンタ４５に設定し、データ数レジスタ４３の値をデータ数カウンタ４６に設定する（Ｓ２１４）。
【０１０５】
受信回路４７は、ＲＡＭ制御回路４９に受信データを共有ワークＲＡＭ４１への書き込むことを要求する受信データ転送要求（受信データ要求）を通知する（Ｓ２１５）。
【０１０６】
受信データ転送要求を受けたＲＡＭ制御回路４９は、共有ワークＲＡＭ４１のアドレスカウンタ４５が示すアドレスに、受信回路４７から受信データを書き込む。その後ＲＡＭ制御回路４９は、カウンタクロックを一つ出力する（Ｓ２１６）。
【０１０７】
カウンタクロックを受信したアドレスカウンタ４５は１カウントアップし、データ数カウンタ４６は１カウントダウンする（Ｓ２１７）。
【０１０８】
通信制御コントローラ４０は、共有ワークＲＡＭ４１へ転送した受信データがパケットの終わりであるか否かを判断し（Ｓ２１８）、パケットの終わりであるときには、アドレスカウンタ４５の値をアドレスレジスタ４２へ、データ数カウンタ４６の値をデータ数カウンタ４３へライトバックする（Ｓ２２０）。
【０１０９】
通信制御回路４０は、対向する通信制御装置へ受信成功を返すように、送信回路４８に指示した後（Ｓ２２１）、ステップＳ２１０に戻って、次の通信データの受信に備える。
【０１１０】
ステップＳ２１２において、当該チャネルの受信の準備ができていないときには、対向する通信制御装置へ受信成功を返すように、送信回路４８へ指示する（Ｓ２１３）。
【０１１１】
ステップＳ２１８において、受信データを共有ワークＲＡＭ４１に転送した後パケットが終わりでないときには、ステップＳ２１５へ戻って、次の受信データの受信処理を行う。
【０１１２】
ステップＳ２１９において、通信データの受信が成功しないときには、通信制御回路４０は、対向する通信制御装置へ受信失敗を返すように、送信回路４８に指示した後（Ｓ２１３）、ステップＳ２１０に戻って、次の通信データの受信に備える。
【０１１３】
以上のように、本発明においては、送信中にエラーが発生した場合、アドレスカウンタ４５の値およびデータ数カウンタ４６の値は、アドレスレジスタ４２およびデータ数レジスタ４３にライトバックされない。したがって、通信制御回路４は、アドレスレジスタ４２およびデータ数レジスタ４３に設定されているアドレスおよびデータ数レジスタをそれぞれアドレスカウンタ４５とデータ数カウンタ４６へ書き込むことによって、同じ通信データを再送信することができる。同様に、受信中にエラーが発生した場合、同様にアドレスカウンタ４５の値およびデータ数カウンタ４６の値は、アドレスレジスタ４２およびデータ数レジスタ４３にライトバックされない。したがって、通信制御回路４は、アドレスレジスタ４２およびデータ数レジスタ４３に設定されているアドレスおよびデータ数レジスタをそれぞれアドレスカウンタ４５とデータ数カウンタ４６へ書き込むことによって、同じ通信データを再受信することができる。
【０１１４】
本発明によれば、エラー発生時は通信制御回路４が、アドレスレジスタ４２、データ数レジスタ４３、情報レジスタ４４に設定されたデータを用いて自動的に通信をやり直すため、ＣＰＵ１は何も行なう必要が無くなる。
【０１１５】
【発明の効果】
以上、説明した通り、本発明によれば、ＣＰＵが行う通信データを格納する共有ワークＲＡＭのアドレス、通信データ数、通信に関するその他の情報の設定または更新を一度行うだけでその後の通信処理の失敗に対処することができ、高速な通信を実現することができる。さらに、本発明によれば、アドレスカウンタ、データ数カウンタやデータを格納するメモリを複数の通信チャンネルで共有することで通信制御回路を最小限の回路規模で実現でき、さらに通信エラー発生時に同じデータを再送信／再受信する機能も容易に実現できる。
【図面の簡単な説明】
【図１】  本発明にかかる通信制御装置の構成を説明するブロック図。
【図２】  本発明にかかる通信制御装置に用いる共有ワークＲＡＭ、アドレスレジスタ、データ数レジスタ、情報レジスタの構成を説明するブロック図。
【図３】  図２の回路のタイミングチャート。
【図４】  本発明における送信処理を説明するフローチャート
【図５】  送信処理時のアドレスレジスタ、データ数レジスタと各カウンタの移り変わりを説明する図。
【図６】  本発明における受信処理を説明するフローチャート。
【図７】  ＵＳＢの論理バストポロジーを説明する図。
【図８】  従来の通信制御装置の構成を説明するブロック図（例１）。
【図９】  従来の通信制御装置の構成を説明するブロック図（例２）。
【図１０】  従来の通信制御装置の構成を説明するブロック図（例３）。
【符号の説明】
１、７０  ＣＰＵ
１０  同期シングルポートＲＡＭ
１１  アドレス用セレクタ
１２  ライトデータ用セレクタ
１３  ライト要求用セレクタ
１４  分周器
１５  インバータ
１６  第１のラッチ
１７  第２のラッチ
２、７６  ＲＯＭ
３  各種Ｉ／Ｏ機器
４  通信制御回路
４０、５０  通信制御コントローラ
４１、７１  共有ワークＲＡＭ
４２  アドレスレジスタ
４３  データ数レジスタ
４４  情報レジスタ
４５  アドレスカウンタ
４６  データ数カウンタ
４７、５５，６２，７３  受信回路
４８５６，６３，７４  送信回路
４９  ＲＡＭ制御回路
５  通信制御回路
５１０，５１１，５１ｎ  ＦＩＦＯ
５２０，５２１，５２ｎ  リードカウンタ
５３０，５３１，５３ｎ  ライトカウンタ
５７  選択回路
５８  ＦＩＦＯ制御
６１  ワークＲＡＭ
６４、７５  ＤＭＡコントローラ
６４０、７５０  ＤＭＡ転送要求制御
６４１、７５１  アドレスカウンタ
６４２、７５２  データ数カウンタ
【図１】
0003785373.tif 000002
【図２】
0003785373.tif 000003
【図３】
0003785373.tif 000004
【図４】
0003785373.tif 000005
【図５】
0003785373.tif 000006
【図６】
0003785373.tif 000007
【図７】
0003785373.tif 000008
【図８】
0003785373.tif 000009
【図９】
0003785373.tif 000010
【図１０】
0003785373.tif 000011