(57)【特許請求の範囲】
【請求項１】
複数のパケットを１つのバーストとして連続して転送するバースト転送モードにてデータを受信可能な受信コントローラ部を複数有し、
少なくとも１パケット分の容量を有し、前記受信コントローラ部に対応付けられた複数の専用バッファ部と、
それぞれが、少なくとも前記バースト転送モードにおいて連続して転送されるパケット数分の容量を有し、複数の前記受信コントローラ部によって共用される、複数の共用バッファ部と、を備え、
前記バースト転送モードが開始された場合、前記専用バッファ部に先頭パケットをバッファし、後続するパケットを前記共用バッファ部にバッファし、
前記バースト転送モードにおいて、前記共用バッファ部に生じる少なくとも１パケット分の空き領域に、後続するバースト転送の先頭パケットをバッファするとともに、別の前記共用バッファ部を確保し、後続するパケットのバッファを継続する通信制御装置。
【請求項２】
複数のパケットを１つのバーストとして連続して転送するバースト転送モードにてデータを受信可能な受信コントローラ部を複数有し、
少なくとも１パケット分の容量を有し、前記受信コントローラ部に対応付けられた複数の専用バッファ部と、
それぞれが、少なくとも前記バースト転送モードにおいて連続して転送されるパケット数分の容量を有し、前記複数の受信コントローラ部によって共用される、複数の共用バッファ部と、
を備える通信制御装置におけるデータ通信方法であって、
前記バースト転送モードが開始された場合、前記専用バッファ部に先頭パケットをバッファする工程と、後続するパケットを前記共用バッファ部にバッファする工程と、
前記バースト転送モードにおいて、前記共用バッファ部に生じる少なくとも１パケット分の空き領域に、後続するバースト転送の先頭パケットをバッファする工程と、
別の前記共用バッファ部を確保し、後続するパケットのバッファを継続する工程と、
を含むことを特徴とするデータ通信方法。
【請求項３】
複数のパケットを１つのバーストとして連続して転送するバースト転送モードにてデータを受信可能な受信コントローラ部を複数有し、
少なくとも１パケット分の容量を有し、前記受信コントローラ部に対応付けられた複数の専用バッファ部と、
それぞれが、少なくとも前記バースト転送モードにおいて連続して転送されるパケット数分の容量を有し、前記複数の受信コントローラ部によって共用される、複数の共用バッファ部と、
を備える通信制御装置を構成するコンピュータに実行させるプログラムであって、
前記バースト転送モードが開始された場合、前記専用バッファ部に先頭パケットをバッファする処理と、後続するパケットを前記共用バッファ部にバッファする処理と、
前記バースト転送モードにおいて、前記共用バッファ部に生じる少なくとも１パケット分の空き領域に、後続するバースト転送の先頭パケットをバッファする処理と、
別の共用バッファ部を確保し、後続するパケットのバッファを継続する処理と、
を実行することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信制御装置に関し、特に複数のエンドポイントを持つ通信制御装置、データ通信方法及びプログラムに関する。
【背景技術】
【０００２】
近年、パーソナルコンピュータや家電製品と周辺機器を接続する、シリアルバス規格の一つとしてＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）が広く用いられている。ＵＳＢは物理的にはシリアルで通信を行うものであるが、ＵＳＢコントローラ内にエンドポイントを複数持つことにより、エンドポイントごとに独立した通信を行うことが可能である（図３参照）。
【０００３】
特許文献１において、各エンドポイントそれぞれに対応する専用バッファと、各エンドポイントで共用する共用バッファとを備えるダブルバッファ構成のＵＳＢコントローラが開示されている。特許文献１によれば、データ転送を行う際にエンドポイントに共用バッファが割り当てられていれば、専用バッファ及び共用バッファを制御してデータ転送を行う。さらに、共用バッファが割り当てられていなければ、バッファ切り替え制御部で共用バッファが割り当てられている他のエンドポイントの読み出し側のバッファが空か否かを判定し、空であればそのバッファをデータ通信するエンドポイントに割り当て、ダブルバッファ構成でデータ転送を行うものとしている。
【０００４】
このように、回路規模を最小限に抑えた上で、高い通信性能を発揮するＵＳＢコントローラの開発が進んでいる。一方で、最大転送速度向上のため、ＵＳＢ規格自体の拡張が行われ、最大データ転送速度として５Ｇｂｉｔ／ｓの速度を実現するＵＳＢ３．０（非特許文献１）の普及が始まっている。ＵＳＢ３．０においては、上記転送速度実現のため、ＵＳＢ２．０でのコントロール転送やバルク転送などの転送モードに加えバースト転送が規定されている。バースト転送は、データ転送を高速に行うための手順であり、連続したデータを転送する際に、アドレスの指定などを一部省略することによって転送速度を向上させている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第３４１５５６７号公報
【非特許文献】
【０００６】
【非特許文献１】USB Implementers Forum, Inc、“USB 3.0 Specification”、２００８年１１月１２日、［online］、［平成22年4月20日検索］、インターネット〈URL：http://www.usb.org/developers/docs/〉
【発明の概要】
【発明が解決しようとする課題】
【０００７】
以下の分析は、本発明の観点からなされたものである。
【０００８】
上述のように、ＵＳＢ３．０においてはバースト転送及び複数のエンドポイントにおける独立した通信が可能となるわけであるが、このような通信に対応するためには、ＵＳＢコントローラのバッファ容量を大きくすることが必要となる。
【０００９】
例えば、特許文献１で開示された技術をバースト転送及び複数のエンドポイントを持つＵＳＢコントローラに適用するとするならば、ホストが連続的に送信する転送データ量（パケット数）は可変になるため専用バッファ容量を大きくする必要がある。つまり、特許文献１の構成はＵＳＢ側とＣＰＵ側がそれぞれ１パケット分のバッファを持つものであるため、複数のパケットを１つのバーストとして連続的に転送するバースト転送においては、エンドポイントごとにパケットサイズ×最大バースト長の容量の専用バッファを持ち、同様にパケットサイズ×最大バースト長の容量の共用バッファを付加する構成が必要となる。
【００１０】
しかし、このような構成では回路規模が増大するという問題がある。専用バッファの容量を大きくすると、回路規模が増大し、結果として製品のコストアップに繋がってしまう。また、専用バッファと共用バッファの容量をパケットサイズ×最大バースト長とする構成では、バースト転送が連続する場合、最初のバースト転送は受信できたとしても、次のバースト転送の最初のパケットの受信時に共用バッファの確保が間に合わず、フローコントロールが必要となり、転送速度が低下してしまうことがある。
【００１１】
以上のとおり、従来技術には、解決すべき問題点が存在する。
【００１２】
本発明の一側面において、バースト転送に対応するにあたり、専用バッファ及び共用バッファの制御を効率的に行い、回路規模を縮小した通信制御装置、データ通信方法及びプログラムが、望まれる。
【課題を解決するための手段】
【００１３】
本発明の第１の視点によれば、複数のパケットを１つのバーストとして連続して転送するバースト転送モードにてデータを受信可能な受信コントローラ部を複数有し、少なくとも１パケット分の容量を有し、前記受信コントローラ部に対応付けられた複数の専用バッファ部と、それぞれが、少なくとも前記バースト転送モードにおいて連続して転送されるパケット数分の容量を有し、複数の前記受信コントローラ部によって共用される、複数の共用バッファ部と、を備え、前記バースト転送モードが開始された場合、前記専用バッファ部に先頭パケットをバッファし、後続するパケットを前記共用バッファ部にバッファし、前記バースト転送モードにおいて、前記共用バッファ部に生じる少なくとも１パケット分の空き領域に、後続するバースト転送の先頭パケットをバッファするとともに、別の前記共用バッファ部を確保し、後続するパケットのバッファを継続する通信制御装置が提供される。
【００１４】
本発明の第２の視点によれば、複数のパケットを１つのバーストとして連続して転送するバースト転送モードにてデータを受信可能な受信コントローラ部を複数有し、少なくとも１パケット分の容量を有し、前記受信コントローラ部に対応付けられた複数の専用バッファ部と、それぞれが、少なくとも前記バースト転送モードにおいて連続して転送されるパケット数分の容量を有し、前記複数の受信コントローラ部によって共用される、複数の共用バッファ部と、を備える通信制御装置におけるデータ通信方法であって、前記バースト転送モードが開始された場合、前記専用バッファ部に先頭パケットをバッファする工程と、後続するパケットを前記共用バッファ部にバッファする工程と、前記バースト転送モードにおいて、前記共用バッファ部に生じる少なくとも１パケット分の空き領域に、後続するバースト転送の先頭パケットをバッファする工程と、別の前記共用バッファ部を確保し、後続するパケットのバッファを継続する工程と、を含むデータ通信方法が提供される。
【００１５】
本発明の第３の視点によれば、複数のパケットを１つのバーストとして連続して転送するバースト転送モードにてデータを受信可能な受信コントローラ部を複数有し、少なくとも１パケット分の容量を有し、前記受信コントローラ部に対応付けられた複数の専用バッファ部と、それぞれが、少なくとも前記バースト転送モードにおいて連続して転送されるパケット数分の容量を有し、前記複数の受信コントローラ部によって共用される、複数の共用バッファ部と、を備える通信制御装置を構成するコンピュータに実行させるプログラムであって、前記バースト転送モードが開始された場合、前記専用バッファ部に先頭パケットをバッファする処理と、後続するパケットを前記共用バッファ部にバッファする処理と、前記バースト転送モードにおいて、前記共用バッファ部に生じる少なくとも１パケット分の空き領域に、後続するバースト転送の先頭パケットをバッファする処理と、別の共用バッファ部を確保し、後続するパケットのバッファを継続する処理と、を実行するプログラムが提供される。
【発明の効果】
【００１６】
本発明の各視点によれば、エンドポイントごとの独立した通信方式において、バッファのサイズを縮小した構成で、高速なデータ通信が実現できる。
【図面の簡単な説明】
【００１７】
【図１】一実施例によるＵＳＢエンドポイントコントローラ部のブロック図である。
【図２】図１におけるバースト転送時の転送データ量と専用バッファと共用バッファとの関係図である。
【図３】複数のエンドポイントを有する、ＵＳＢコントローラ内の参考図である。
【図４】一実施例によるＵＳＢコントローラ全体のブロック図の詳細である。
【図５】一実施例におけるバッファの状態遷移図である。
【図６】共用バッファを管理するためのテーブルの一例である。
【図７】図５の状態遷移に対応した図６におけるテーブルの値である。
【発明を実施するための形態】
【００１８】
続いて、本発明のとり得る好適な実施形態について図面を参照して詳細に説明する。
【００１９】
はじめに、本発明の概要について説明する。図１にＵＳＢエンドポイントコントローラ部の構成を示す。ＵＳＢ３．０規格のバースト転送に対応する際に、各エンドポイントに対して１パケット分に相当するサイズの専用バッファを確保する。さらに、共用バッファとしては、パケットサイズ×最大バースト長に相当するサイズを共用バッファの１単位とし、その共用バッファを複数備える構成とする。これらの専用バッファ及び共用バッファを適切に制御することで、バッファ全体のサイズを抑えつつ、高速なデータ通信を実現する。
【００２０】
ＵＳＢ機器間でバースト転送が開始されると、ＵＳＢデバイスコントローラでは最初のパケットを専用バッファ１０３に格納する。この時点ではまだ共用バッファ１０５１の確保が行われておらず、このままでは次のパケットの受信ができないため、共用バッファの確保を行う。共用バッファの確保に成功すれば、最初のパケット以降のパケットを共用バッファに格納する。すると、共用バッファ１０５１のサイズとしてはパケットサイズ×最大バースト長に相当する容量を確保しているため、最初の専用バッファで１パケット分は受信済みであるから、共用バッファに格納されるデータの容量はパケットサイズ×（最大バースト長−１）に相当するサイズである。つまり、未だ共用バッファには１パケット分格納する余裕があることになる（図２参照）。
【００２１】
バースト転送が終了した時点で、必ず１パケット分の余裕があることから、最初に確保した共用バッファのデータが読み出されておらず、別のバッファの確保が必要な場合であっても、次のバースト転送のうち最初のパケットの受信は確実に行うことができる。そのため、次のバースト転送における最初のバケットの受信中に、さらなる共用バッファの確保を要求することが出来る。
【００２２】
このように、専用バッファのサイズを１パケット分と最小にし、共用バッファのサイズをパケットサイズ×最大バースト長相当とすることで、常に１パケット分の余裕を作り出し、この１パケット分の余裕を有効活用することでＵＳＢ３．０規格のバースト転送に対応することとした。
【００２３】
［第１の実施形態］
続いて、本発明の一実施形態の構成を詳細に説明し、次に、各構成要素の動作及び構成要素間の連携について詳細に説明する。図４は、本発明の実施形態に係るＵＳＢデバイスコントローラの一構成例である。
【００２４】
ＵＳＢデバイスコントローラ１は、ＵＳＢエンドポイントコントローラ部１０、ＵＳＢインタフェース部２０及び外部バスインタフェース部３０から構成されている。
【００２５】
ＵＳＢエンドポイントコントローラ部１０は、ホストからのデータ送受信の要求を受け付け、データの送受信の管理を行う。ＵＳＢインタフェース部２０は、ＵＳＢから受信したアナログ信号のデジタル変換や誤り訂正などの処理に加えて、ホストからのデジタル信号をアナログ信号に変換し、ＵＳＢに送出する処理も行う。外部バスインタフェース部３０は、周辺機器のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラと接続されたバスを制御し、これらとの間でデータの送受信を行う。ＵＳＢエンドポイントコントローラ部１０は、受信コントローラ部１０１及び１０２、バッファ選択部１０６、バッファアクセス生成部１０７、受信用エンドポイント専用バッファ１０３及び１０４、エンドポイント共用バッファ１０５から構成される。
【００２６】
ここで、ＵＳＢ規格は複数のエンドポイントに対応可能であり、本実施形態においては２つのエンドポイントに対応する場合を考え説明をする。受信コントローラ部１０１で制御するエンドポイントを第１のエンドポイント、受信コントローラ部１０２で制御するエンドポイントを第２のエンドポイントとする。なお、受信コントローラ部１０２は、受信コントローラ部１０１と同等の構成である。そのため、受信コントローラ部１０２に関する説明は省略する。
【００２７】
受信コントローラ部１０１はＵＳＢインタフェース部２０や外部バスインタフェース部３０からのデータ送受信の要求を受け付け、データのリード・ライトの管理を行う。バッファ選択部１０６は、受信コントローラ部１０１からの共用バッファ確保要求及び共用バッファ開放要求を制御する。バッファアクセス生成部１０７は、受信コントローラ部１０１からのライト要求若しくはリード要求に従い、確保した専用バッファ及び共用バッファに対してデータのリード・ライトを行う。受信用エンドポイント専用バッファ１０３は、受信コントローラ部と１対１で対応付けられ、第１のエンドポイントに対応する受信用エンドポイント専用バッファを１０３、第２のエンドポイントに対応する受信用エンドポイント専用バッファを１０４とする。エンドポイント共用バッファ１０５はそれぞれのエンドポイントで共用するバッファである。
【００２８】
受信コントローラ部１０１は、受信用ＰＨＹ（Ｐｈｙｓｉｃａｌ  Ｌａｙｅｒ）側制御部１０１１と、受信用ＣＰＵ側制御部１０１２と、受信用バッファインタフェース部１０１３と、受信用バッファ管理部１０１４から構成される。
【００２９】
受信用ＰＨＹ側制御部１０１１は、ＵＳＢインタフェース部２０においてデジタル変換されたパケットを受信し、このパケットに対するプロトコル制御を行い、正常受信したデータを受信用バッファ管理部１０１４に送出する。また、受信用ＰＨＹ側制御部１０１１は、受信用バッファ管理部１０１４からバッファエンプティ信号１１３１が通知された場合にはＵＳＢ３．０規格で定義されるフローコントロール制御を行う。
【００３０】
受信用ＣＰＵ側制御部１０１２は、外部バスインタフェース部３０を介して受信データのリード要求を受けた場合には、受信用バッファ管理部１０１４に対してリード要求信号を出力し、受信用バッファ管理部１０１４を経由してリードデータを外部バスインタフェース部３０に出力する。
【００３１】
受信用バッファインタフェース部１０１３は、受信用バッファ管理部１０１４から通知されるライト要求、リード要求に従い、バッファアクセス生成部１０７に対してアクセスタイミング信号を生成する。すなわち、受信用バッファ管理部１０１４からバッファライト要求信号１１４１、データ信号１１６１、アドレス信号１１７１を受信すると、受信用バッファインタフェース部１０１３がバッファアクセス生成部１０７に対してライトアドレス及びライトデータを含んだアクセスタイミング信号を生成する。それを受けて、バッファアクセス生成部１０７では、受信用エンドポイント専用バッファ１０３もしくはエンドポイント共用バッファ１０５にデータのライトを行う。
【００３２】
次に、受信用バッファ管理部１０１４からバッファリード要求信号１１５１を受信すると、受信用バッファインタフェース部１０１３がバッファアクセス生成部１０７に対してリードアドレスを含んだアクセスタイミング信号を生成する。それを受けて、バッファアクセス生成部１０７では、受信用エンドポイント専用バッファ１０３若しくはエンドポイント共用バッファ１０５から読み出したリードデータをデータ信号１１６１及びアドレス信号１１７１として受信用バッファ管理部１０１４に出力する。
【００３３】
受信用バッファ管理部１０１４は、共用バッファの確保、開放要求の制御を行うと共に、確保している共用バッファの状態と、受信用ＰＨＹ側制御部１０１１の受信状態及び、受信用ＣＰＵ側制御部１０１２からの読み出し状態を管理する。さらに、受信用ＰＨＹ側制御部１０１１からデータを受信し、共用バッファを確保する必要が生じた場合、受信用バッファ管理部１０１４はバッファ選択部１０６に対して、共用バッファ確保要求信号１１０１をアサートする。受信用バッファ管理部１０１４は、バッファ選択部１０６から共用バッファ確保受付信号１１１１を受信することにより、共用バッファ確保要求が受理されたことを認識する。
【００３４】
一方、受信用バッファ管理部１０１４が、共用バッファを開放する場合には、バッファ選択部１０６に対して、共用バッファ開放要求信号１１２１をアサートする。
【００３５】
また、受信用バッファ管理部１０１４は、ＵＳＢからのデータの受信が可能か否かを示すバッファエンプティ信号１１３１を受信用ＰＨＹ側制御部１０１１に対して通知する機能を有する。
【００３６】
ここで、受信用バッファ管理部１０１４が、受信用ＰＨＹ側制御部１０１１から正常受信したデータをバッファに書き込む手順を説明する。受信用バッファ管理部１０１４は、受信用ＰＨＹ側制御部１０１１から正常受信したデータを受け付けると、受信用バッファインタフェース部１０１３に対して、バッファライト要求信号１１４１を出力し、同時に、アドレス信号１１７１及びデータ信号１１６１を出力する。さらに、バッファ選択部１０６に対しては、バッファライト要求信号１１４１に加えて、専用バッファ１０３若しくはエンドポイント共用バッファ１０５内に確保したバッファ領域に、どのような順番でデータを書き込むかを指定するバッファ領域選択信号１１８１を出力する。
【００３７】
次に、受信用バッファ管理部１０１４が、受信用ＣＰＵ側制御部１０１２からリード要求を受けた場合の読み出し手順を説明する。受信用バッファ管理部１０１４は、データの読み出しのため、受信用バッファインタフェース部１０１３に対して、バッファリード要求信号１１５１を出力し、同時に、アドレス信号１１７１を出力し、データ信号１１６１から受信したリードデータを受信用ＣＰＵ側制御部１０１２に出力する。さらに、バッファ選択部１０６に対して、前記バッファリード要求信号１１５１に加えて、専用バッファ１０３若しくはエンドポイント共用バッファ１０５内に確保したバッファ領域から、どのような順序でデータを読み出すかを指定するバッファ領域選択信号１１８１を出力する。
【００３８】
以上が受信コントローラ部１０１の説明である。次に、バッファ選択部１０６について説明する。
【００３９】
バッファ選択部１０６は、受信用バッファ管理部１０１４から共用バッファ確保要求信号１１０１を受け付けた場合には、エンドポイント共用バッファ１０５の確保を開始し、確保が完了すると、共用バッファ確保受付信号１１１１をアサートする。一方、受信用バッファ管理部１０１４から共用バッファ開放要求があった場合、直ちにエンドポイント共用バッファ１０５の開放処理を行う。バッファ選択部１０６は、受信用バッファ管理部１０１４からのライトアクセスもしくはリードアクセスがあった場合、同時に通知されたバッファ領域選択信号１１８１により、どのエンドポイントからのアクセスかを判別する。前記判別結果により、バッファ選択部１０６は、受信用エンドポイント専用バッファ１０３、又はエンドポイント共用バッファ１０５を構成するエンドポイント共用バッファ領域１０５１、１０５２の何れに対してアクセスするかを決定するためのバッファ選択信号１０３４をバッファアクセス生成部１０７に対して出力する。
【００４０】
バッファ選択部１０６はバッファ選択制御テーブルを有している。バッファ選択部１０６はこのテーブルに従ってエンドポイント共用バッファ１０５の管理を行っている。そのテーブルの内容を示したものが、図６である。バッファ選択制御テーブルは、エンドポイント共用バッファ領域ごとに、領域番号フィールドと、割り当て対象エンドポイントフィールドと、領域確保順序フィールドの３つのフィールドを有している。
【００４１】
領域番号フィールドは、エンドポイント共用バッファ領域１０５１、１０５２を一意に識別するためのフィールドであり、図６においては、エンドポイント共用バッファ領域１０５１を領域番号１、エンドポイント共用バッファ領域１０５２を領域番号２としている。割り当て対象エンドポイントフィールドは、エンドポイント共用バッファ領域が、どのエンドポイントによって使用されているかを示すフィールドであり、図６のテーブルにおいては２つのエンドポイントを想定しているため、第１のエンドポイントを１、第２のエンドポイントを２として管理する。なお、割り当て対象エンドポイントフィールドが０の場合には、当該エンドポイント領域がどのエンドポイントに対しても使用されていないことを示す。領域確保順序フィールドは、エンドポイント共用バッファ領域が割り当て対象エンドポイントに対して、何番目に割り当てられたかを示すフィールドである。
【００４２】
以上が、バッファ選択部１０６についての説明である。次に、バッファアクセス生成部１０７について説明する。
【００４３】
バッファアクセス生成部１０７は、バッファ選択部１０６からのバッファ選択信号１０３４に基づき、受信用エンドポイント専用バッファ１０３若しくは１０４、又はエンドポイント共用バッファ領域１０５１若しくは１０５２のいずれかの領域を選択する。さらに、アクセスの対象となるエンドポイントの受信用バッファインタフェース部１０１３若しくは１０２３から受信したリード又はライトアクセスタイミング信号を前記のバッファ選択信号１０３４で選択された領域に出力する。
【００４４】
リードアクセスの場合においては、選択したバッファから読み出したデータを、対象となるエンドポイントの受信用バッファインタフェース部１０１３、１０２３に出力する。
【００４５】
次に、バッファの容量について記述する。受信用エンドポイント専用バッファ１０３、１０４の容量は１パケットに相当するサイズである。さらに、エンドポイント共用バッファ１０５は、エンドポイント共用バッファ領域１０５１、１０５２から構成され、それぞれパケットサイズ×最大バースト長に相当する容量を有する。
【００４６】
以上が、ＵＳＢデバイスコントローラ１の構成である。
【００４７】
次に、各構成要素の動作及び構成要素間の連携について詳細に説明する。図５は、本実施形態における動作を示す図であり、図５を用いて図４の構成をもつＵＳＢデバイスコントローラ１の動作を説明する。動作の説明は、第１のエンドポイントについてのみ行い、第２のエンドポイントは第１のエンドポイントと同様の動作のため説明を省略する。また本実施形態では、最大バースト長を４パケットとして説明する。図５は、Ｔ１〜Ｔ１２の各時刻におけるＵＳＢ側、ＣＰＵ側の通信状態と、受信用エンドポイント専用バッファ１０３、エンドポイント共用バッファ領域１０５１、１０５２の状態と、受信用バッファ管理部１０１４の状態遷移、共用バッファ確保要求信号１１０１、共用バッファ確保受付信号１１１１、共用バッファ開放要求信号１１２１の各動作を示すものである。また、通信状態をＢ１１〜Ｂ１４、Ｂ２１〜Ｂ２４で表し、それぞれ１つのＯＵＴトランザクションである。即ち、これらが１パケットである。ＵＳＢの通信モードはバースト転送とし、パケットＢ１１〜Ｂ１４、パケットＢ２１〜Ｂ２４をそれぞれ１つのバースト転送の単位とする。
【００４８】
時刻Ｔ１は、ＵＳＢ側、ＣＰＵ側ともに通信は行われていない初期状態を示す。初期状態時は、受信用エンドポイント専用バッファ１０３及びエンドポイント共用バッファ領域１０５１、１０５２は未使用であり、バッファ選択制御テーブルの領域番号フィールドの番号１、２ともに割り当て対象エンドポイントフィールドは０である（図７のＴ１時のテーブル参照）。
【００４９】
時刻Ｔ２において、ＵＳＢ側から最初のバーストの先頭パケットＢ１１の受信を開始する。受信用ＰＨＹ側制御部１０１１は、受信したパケットＢ１１を受信用バッファ管理部１０１４に出力する。Ｂ１１の受信開始により受信用バッファ管理部１０１４は、パケットＢ１１の受信が完了すると、次のパケットＢ１２を受信する空き領域がなくなるため、受信用ＰＨＹ側制御部１０１１に対してバッファエンプティ信号１１３１をアサートし、同時に次のパケットを受信するためにバッファ選択部１０６に対して共用バッファ確保要求信号１１０１をアサートする。
【００５０】
ここで、受信したパケットを専用バッファへ書き込みするための処理を示す。受信用バッファ管理部１０１４は、バッファ選択部１０６に対しては、バッファライト要求信号１１４１と、データの書き込み先として受信用エンドポイント専用バッファ１０３を示すバッファ領域選択信号１１８１をアサートする。同時に、受信用バッファインタフェース部１０１３に対して、バッファライト要求信号１１４１、アドレス信号１１７１及びデータ信号１１６１を出力する。バッファ選択部１０６においては、受信用バッファ管理部１０１４より受信用エンドポイント専用バッファ１０３を示すバッファ領域選択信号１１８１がアサートされているため、バッファアクセス生成部１０７に対し、受信用エンドポイント専用バッファ１０３を示すバッファ選択信号１０３４をバッファアクセス生成部１０７に出力する。バッファアクセス生成部１０７は、バッファ選択信号１０３４に従い受信用エンドポイント専用バッファ１０３を選択し、受信用バッファインタフェース部１０１３で生成されたライトタイミング信号により指定されたライトアドレスにライトデータを書き込む。
【００５１】
時刻Ｔ３では、時刻Ｔ２から継続してＵＳＢ側から最初のバーストの先頭パケットＢ１１を受信中であり、時刻Ｔ２と同様に専用バッファ書き込み処理を行っている。バッファ選択部１０６は、受信用バッファ管理部１０１４からの共用バッファ確保要求信号１１０１のアサートを認識すると、バッファ選択制御テーブルに基づいて共用バッファが確保可能か検索する。具体的には、バッファ選択制御テーブル内の全ての領域番号について、割り当て対象エンドポイントフィールドが０の領域があるかを判定し０の領域がある場合は対象となる領域の割り当て対象エンドポイントフィールドに要求対象のエンドポイント番号を書き込む。さらに、使用領域の中の領域確保順序フィールドの最大値に１を加算した値を対象となる領域の領域確保順序フィールドに書き込むことで共用バッファの確保を完了する。一方、バッファ選択制御テーブル内に確保可能な領域がない場合は、バッファ選択制御テーブルに対して何らの処理を行わない。
【００５２】
当初のエンドポイント共用バッファ領域１、２のそれぞれの割り当て対象エンドポイントフィールドは、０であるため、エンドポイント共用バッファ領域１０５１の割り当て対象エンドポイントフィールドに第１エンドポイントを示す１、領域確保順序フィールドに最初の確保であることを示す１をそれぞれ書き込む。これにより、第１のエンドポイントに対して、エンドポイント共用バッファ領域１０５１を格納領域として共用バッファの確保が完了する（図７のＴ３時のテーブル参照）。確保が完了すれば、共用バッファ確保受付信号１１１１をアサートして受信用バッファ管理部１０１４に通知する。受信用バッファ管理部１０１４においては、共用バッファ確保受付信号１１１１のアサートを認識した後、共用バッファ確保要求信号１１０１をネゲートする。一方、共用バッファが確保できない場合には、共用バッファ確保受付信号１１１１をアサートしない。
【００５３】
時刻Ｔ４は、ＵＳＢ側から最初のバーストの先頭パケットＢ１１の受信を完了した状態である。パケットＢ１１は受信用エンドポイント専用バッファ１０３に格納され、ＣＰＵ側からの読み出しが可能となり、同時に次のパケットが受信可能となる。
【００５４】
ここで、受信用エンドポイント専用バッファ１０３に格納されたデータをＣＰＵ側から読み出す処理を以下に示す。ＣＰＵ側からのバッファの読み出しが開始されると、受信用ＣＰＵ側制御部１０１２ではデータ読み出し要求を受信用バッファ管理部１０１４に出力する。受信用バッファ管理部１０１４は、バッファ選択部１０６に対して、バッファリード要求信号１１５１と、読み出し先として受信用エンドポイント専用バッファ１０３を示すバッファ領域選択信号１１８１をアサートする。さらに、受信用バッファインタフェース部１０１３に対しては、バッファリード要求信号１１５１に加えて、アドレス信号１１７１を出力してデータを受信用エンドポイント専用バッファ１０３から読み出し、受信用ＣＰＵ側制御部１０１２に出力する。バッファ選択部１０６は、受信用バッファ管理部１０１４より受信用エンドポイント専用バッファ１０３を示すバッファ領域選択信号１１８１がアサートされたため、バッファアクセス生成部１０７に対し、受信用エンドポイント専用バッファ１０３を示すバッファ選択信号１０３４をバッファアクセス生成部１０７に出力する。バッファアクセス生成部１０７は、バッファ選択信号１０３４に基づき、受信用エンドポイント専用バッファ１０３を選択し、受信用バッファインタフェース部１０１３で生成されたリードタイミング信号により指定されたリードアドレスからデータを読み出し、受信用バッファインタフェース部１０１３、受信用バッファ管理部１０１４を介して、受信用ＣＰＵ側制御部１０１２に出力する。さらに、読み出されたデータは外部バスインタフェース部３０を通じてＣＰＵ側に出力される。
【００５５】
時刻Ｔ５は、ＵＳＢ側からバースト転送の２パケット目であるパケットＢ１２の受信を開始した状態である。パケットＢ１２は、確保済みの共用バッファであるエンドポイント共用バッファ領域１０５１に格納される。ここで、受信したパケットを共用バッファに書き込む際の処理について説明する。受信用バッファ管理部１０１４は、受信用ＰＨＹ側制御部１０１１において受信したパケットを計数し、バッファ選択部１０６に対して、バッファライト要求信号１１４１と、何番目に確保した共用バッファかを示すバッファ領域選択信号１１８１をアサートし、同時に、バッファライト要求信号１１４１、アドレス信号１１７１及びデータ信号１１６１を受信用バッファインタフェース部１０１３に出力する。バッファ選択部１０６においては、受信用バッファ管理部１０１４より確保済みの共用バッファを示すバッファ領域選択信号１１８１がアサートされているため、バッファ選択制御テーブルの各エンドポイント共用バッファ領域のうち、割り当て対象エンドポイントフィールドが一致する各エンドポイント共用バッファ領域の中で、領域確保順序フィールドの値とバッファ領域選択信号１１８１が一致するエンドポイント共用バッファ領域を検索し、当該エンドポイント共用バッファ領域の領域番号フィールドをバッファ選択信号１０３４としてバッファアクセス生成部１０７に対して出力する。バッファアクセス生成部１０７では、バッファ選択信号１０３４に基づき、エンドポイント共用バッファ領域１０５１を選択し、受信用バッファインタフェース部１０１３で生成されたライトタイミング信号で指定されたライトアドレスにライトデータを書き込む。
【００５６】
時刻Ｔ６は、ＵＳＢ側から最初のバースト転送であるパケットＢ１１〜Ｂ１４の受信が完了した状態である。時刻Ｔ６では、時刻Ｔ４と同様に、受信用エンドポイント専用バッファ１０３に格納されたデータの読み出し処理が行われる。
【００５７】
時刻Ｔ７は、パケットＢ１１のＣＰＵ側からの読み出しが完了し、パケットＢ１２の読み出しを開始した状態である。先に、専用バッファのＣＰＵ側からの読み出しについて説明したが、ここではＣＰＵ側からの共用バッファ読み出し処理を以下に示す。ＣＰＵ側からバッファの読み出しが開始されると、受信用ＣＰＵ側制御部１０１２は読み出し要求を受信用バッファ管理部１０１４に出力する。受信用バッファ管理部１０１４では、バッファリード要求信号１１５１と、何番目に確保した共用バッファから読み出すかを示すバッファ領域選択信号１１８１をバッファ選択部１０６に対してアサートする。さらに、受信用バッファインタフェース部１０１３に対してはバッファリード要求信号１１５１とアドレス信号１１７１を出力してデータを共用バッファから読み出し、受信用ＣＰＵ側制御部１０１２に出力する。受信用バッファ管理部１０１４においては、最初に確保した共用バッファから読み出しを行うため、バッファ領域選択信号１１８１を１としてバッファ選択部１０６に対して通知する。また、バッファ選択部１０６では、バッファ選択制御テーブルを検索し、割り当て対象エンドポイントフィールドが１であり、かつ、領域確保順序フィールドが１であるエンドポイント共用バッファ領域１を指定されたバッファ領域であると判定し、領域番号フィールドの値である１をバッファ選択信号１０３４としてバッファアクセス生成部１０７に出力する。バッファアクセス生成部１０７は、バッファ選択信号１０３４に基づき、エンドポイント共用バッファ領域１０５１を選択し、受信用バッファインタフェース部１０１３で生成されたリードタイミング信号により指定されたリードアドレスからデータを読み出し、受信用バッファインタフェース部１０１３、受信用バッファ管理部１０１４を介して、受信用ＣＰＵ側制御部１０１２に出力する。さらに、読み出されたデータは外部バスインタフェース部３０を通じてＣＰＵ側に出力される。
【００５８】
時刻Ｔ８は、ＵＳＢ側から２番目のバーストの先頭パケットＢ２１の受信を開始した状態である。パケットＢ２１は、時刻Ｔ５で示した共用バッファ書き込み処理と同様の手順でエンドポイント共用バッファ領域１０５１に格納が開始される。パケットＢ２１の受信開始により、エンドポイント共用バッファ領域１０５１に次のパケットＢ２２を受信する空き領域がなくなるため、受信用バッファ管理部１０１４は、受信用ＰＨＹ側制御部１０１１に対し、バッファエンプティ信号１１３１をアサートする。同時に、次のパケットを受信するため、バッファ選択部１０６に対して共用バッファ確保要求信号１１０１をアサートする。
【００５９】
時刻Ｔ９では、時刻Ｔ８から継続してＵＳＢ側から２番目のバースト転送の先頭パケットＢ２１の受信中であり、パケットＢ２１を、先に示した共用バッファ書き込み処理と同様の手順でエンドポイント共用バッファ領域１０５１に格納している。また、既に受信したパケットＢ１２〜Ｂ１４はＴ７に示す共用バッファ読み出し処理と同様の手順によりＣＰＵ側からリード可能である。バッファ選択部１０６は、共用バッファ確保要求信号１１０１からのアサートを確認すると、時刻Ｔ３に示す共用バッファ確保処理と同様の手順で共用バッファの確保を行う。すなわち、バッファ選択部１０６はバッファ選択制御テーブルを検索し、エンドポイント共用バッファ領域１０５１の割り当て対象エンドポイントフィールドが１であること及びエンドポイント共用バッファ領域１０５２の割り当て対象エンドポイントフィールドが０であることを判定し、前記判定結果よりエンドポイント共用バッファ領域１０５２の割り当て対象エンドポイントフィールドに第１エンドポイントを示す１を、領域確保順序フィールドに２番目に確保した領域であることを示す２を書き込み、第１のエンドポイントに対してエンドポイント共用バッファ領域１０５２を格納領域として共用バッファの追加確保が完了する（図７のＴ９時のテーブル参照）。バッファ選択部１０６は共用バッファの確保が完了すると、共用バッファ確保受付信号１１１１をアサートして受信用バッファ管理部１０１４に通知する。受信用バッファ管理部１０１４は共用バッファ確保受付信号１１１１のアサートを認識し、共用バッファ確保要求信号１１０１をネゲートする。
【００６０】
時刻Ｔ１０は、ＵＳＢ側から２番目のバーストの２パケット目であるパケットＢ２２の受信を開始した状態である。パケットＢ２２は、時刻Ｔ５で示す共用バッファ書き込み処理と同様の手順でエンドポイント共用バッファ領域１０５２に格納が開始される。共用バッファに格納済みのパケットＢ１３、Ｂ１４、Ｂ２１はＴ７で説明した共用バッファ読み出し処理と同様の手順によりＣＰＵ側から読み出しが可能である。
【００６１】
時刻Ｔ１１は、エンドポイント共用バッファ領域１０５１に格納されたパケットＢ１２〜Ｂ１４及びＢ２１の読み出しが完了した状態である。ここで、エンドポイント共用バッファ領域１０５１に格納されたデータは全てＣＰＵ側で読み出しが完了しており、本共用バッファ領域の開放を行う。
【００６２】
以下、共用バッファ開放処理について示す。受信用バッファ管理部１０１４は、バッファ選択部１０６に対して、共用バッファ開放要求信号１１２１をアサートする。バッファ選択部１０６は、共用バッファ開放要求信号１１２１のアサートを認識すると、バッファ選択制御テーブルの割り当て対象エンドポイントフィールドが一致する領域に対して、要求対象であるエンドポイントのエンドポイント共用バッファの開放処理を行う。バッファ選択制御テーブルの各エンドポイント共用バッファ領域のうち、対象エンドポイントフィールドの値が要求対象であるエンドポイント番号と一致する場合、対応する領域確保順序フィールドに既に当該フィールドに書き込まれていた値から１減算した値を書き込む。特に対象となる領域の領域確保順序フィールドの値が１である場合は、対象エンドポイントフィールド及び領域確保順序フィールドに０を書き込み、未使用状態にする。バッファ選択部１０６は、エンドポイント共用バッファ領域１０５１の対象エンドポイントフィールドが１、領域確保順序フィールドも１なので、エンドポイント共用バッファ領域１０５１の対象エンドポイントフィールドと領域確保順序フィールドを０にし、エンドポイント共用バッファ領域１０５２の対象エンドポイントフィールドが１で領域確保順序フィールドが２であるため、エンドポイント共用バッファ領域１０５２の領域確保順序フィールドから１減算して１にすることにより、エンドポイント共用バッファ領域１０５２のみが確保された状態となる（図７のＴ１１時のテーブル参照）。エンドポイント共用バッファ領域１０５２に確保されたパケットＢ２２〜Ｂ２４は、時刻Ｔ７に示す共用バッファ読み出し処理と同様の手順でＣＰＵ側から読み出し可能である。
【００６３】
時刻Ｔ１２は、エンドポイント共用バッファ領域１０５２に格納されたパケットＢ２２〜Ｂ２４の読み出しが完了した状態であり、受信用バッファ管理部１０１４はバッファ選択部１０６に対して、共用バッファ開放要求信号１１２１をアサートする。バッファ選択部１０６は、時刻Ｔ１１に示す共用バッファ開放処理と同様の手順により共用バッファを開放する。すなわち、バッファ選択部１０６は、エンドポイント共用バッファ領域１０５２の対象エンドポイントフィールドが１で領域確保順序フィールドが１であるため、エンドポイント共用バッファ領域１０５２の対象エンドポイントフィールドを０にすることにより、全ての共用バッファの開放が完了し、初期状態に戻る（図７のＴ１２時のテーブル参照）。
【００６４】
このように、専用バッファに、パケットサイズ×最大バースト長分の共用バッファを付加し、容量が（バースト長＋１）分のバッファを構成することで、実際には通信を行っていないエンドポイントに割り当てる専用バッファの容量を最小限にすることができ、必要となるバッファの容量を抑え、回路規模の増加を防止できる。また、１つのバーストのパケットを全て受信した後であっても、必ずバッファに１パケット分が受信可能な空きが確保できるため、引き続き次のバーストのパケットを受信可能となり、フローコントロールに移行せず、通信速度が低下することはない。
【００６５】
ここで、本実施形態における必要とするバッファのサイズを特許文献１の方式と比較して検証する。ＵＳＢ３．０規定でのパケットのサイズは１０２４バイトであり、最大バースト長を４パケット、対応エンドポイントの数を２として検証する。特許文献１に示す方式では、受信用エンドポイント専用バッファとして、次式で計算されるサイズが必要である。
専用バッファ容量＝最大バースト長×パケットサイズ×エンドポイント数
＝４×１０２４×２
＝８１９２バイト
共用バッファは次式で計算されるサイズが必要となる。
共用バッファ容量＝最大バースト長×パケットサイズ
＝４×１０２４
＝４０９６バイト
これらを合計すると、１２２８８バイトのバッファサイズを必要とする。
【００６６】
一方、本実施形態においては、受信用エンドポイント専用バッファは各エンドポイントに対して１パケット分で良いため、受信用エンドポイント専用バッファとしては以下の式で計算されるバッファのサイズが必要となる。
専用バッファ容量＝パケットサイズ×エンドポイント数
＝１０２４×２
＝２０４８バイト
共用バッファは次式で計算されるサイズが必要となる。
共用バッファ容量＝最大バースト長×パケットサイズ×共用バッファ領域数
＝４×１０２４×２
＝８１９２バイト
これらを合計すると、１０２４０バイトのバッファサイズを必要とする。
【００６７】
このように、より少ないバッファ容量で、ＵＳＢ３．０のバースト転送に対応可能であることがわかる。
【００６８】
なお、対応可能なエンドポイントの数は２つのエンドポイントに限定されるものではないことは明らかであり、複数のエンドポイントに適用可能である。すなわち、使用するエンドポイントの個数分だけ受信コントローラ部及び受信用エンドポイント専用バッファを有し、バッファ選択制御テーブルをエンドポイント共用バッファの領域数と同数の領域が選択可能とすることができる。その結果、任意の個数のエンドポイントに対してのエンドポイント共用バッファの共有が可能であるため、エンドポイント共用バッファの容量を適切に選択することにより、バッファとして使用するバッファの使用量を削減し、回路規模の増加を防止できる。
【００６９】
なお、上記の特許文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【００７０】
１  ＵＳＢデバイスコントローラ
１０  ＵＳＢエンドポイントコントローラ部
２０  ＵＳＢインタフェース部（ＰＨＹ）
３０  外部バスインタフェース部
１０１、１０２  受信コントローラ部
１０３、１０４  受信用エンドポイント専用バッファ
１０５  エンドポイント共用バッファ
１０６  バッファ選択部
１０７  バッファアクセス生成部
１０１１、１０２１  受信用ＰＨＹ側制御部
１０１２、１０２２  受信用ＣＰＵ側制御部
１０１３、１０２３  受信用バッファインタフェース部
１０１４、１０２４  受信用バッファ管理部
１０３４  バッファ選択信号
１０５１、１０５２  エンドポイント共用バッファ領域
１１０１、１２０１  共用バッファ確保要求信号
１１１１、１２１１  共用バッファ確保受付信号
１１２１、１２２１  共用バッファ開放要求信号
１１３１、１２３１  バッファエンプティ信号
１１４１、１２４１  バッファライト要求信号
１１５１、１２５１  バッファリード要求信号
１１６１、１２６１  データ信号
１１７１、１２７１  アドレス信号
１１８１、１２８１  バッファ領域選択信号
【図１】
0005551512.tif 000002
【図２】
0005551512.tif 000003
【図３】
0005551512.tif 000004
【図４】
0005551512.tif 000005
【図５】
0005551512.tif 000006
【図６】
0005551512.tif 000007
【図７】
0005551512.tif 000008