(57)【要約】集積回路のデータバッファに対するデータ通信フローを制御するためのデバイスを開示する。このデバイスは、送信デバイス（１７０）から通信されるデータを受信する。受信されたデータは、メモリ（１２０）のデータバッファに配置される。データバッファは複数のバッファ記述子からなるセットによって規定される。複数のバッファ記述子からなるセットにおける空きバッファ記述子の数は、データバッファにおける空き空間の量を表す。通信コントローラ（１１１）は、空きバッファ記述子の数が閾値レベル（ウォーターマーク）未満となる時を判定することによって、データバッファがオーバフローするか否かを判定する。通信コントローラは、データバッファがオーバフロー条件になる可能性があるとの判定に応答して、データの送信を停止するとの要求を送信デバイスに送信し、データバッファがほぼ一杯であることを示す。
2009540681.tif 000002
【特許請求の範囲】
【請求項１】
メモリバッファを規定する複数のバッファ記述子を含むバッファ記述子セットにおける第１のバッファ記述子を表す第１の値を、第１の時に受信することと、第１のバッファ記述子は空きバッファ記述子であることと、
第１の値に基づき、送信デバイスから受信されているデータを停止させると決定することと、からなる方法。
【請求項２】
バッファ記述子セットにおける１つのバッファ記述子がもはや空でないことを表す第２の値を受信することと、
バッファ記述子セットにおける所望の空きバッファ記述子の数を表すウォーターマーク値を受信することと、
さらに第１の値、第２の値およびウォーターマーク値に基づき、集積回路デバイスにおいて送信デバイスから受信されているデータを停止させると決定することと、を含む請求項１に記載の方法。
【請求項３】
集積回路デバイスにおいて送信デバイスから受信されているデータを停止させると決定することは、第１の値と第２の値との関係がウォーターマーク値未満であることに基づく請求項２に記載の方法。
【請求項４】
第１の値はメモリバッファから情報を読み出すデータ処理資源から受信され、第２の値はメモリバッファに情報を提供することに応答して集積回路デバイスにおいて算出される請求項２に記載の方法。
【請求項５】
データ処理資源は集積回路デバイス外にある請求項４に記載の方法。
【請求項６】
バッファ記述子セットの総数を表す長さ値を集積回路デバイスにおいて受信することと、
さらに長さ値に基づき、集積回路デバイスにおいて送信デバイスから受信されているデータを停止させると決定することと、を含む請求項２に記載の方法。
【請求項７】
集積回路デバイスにおいて受信されているデータが停止される期間を識別する停止インジケータを提供することと、
同期間中、送信デバイスからのデータのデータ受信の停止を継続すると決定することと、を含む請求項１に記載の方法。
【請求項８】
受信されるデータはイーサネット（登録商標）プロトコルに関連している請求項１に記載の方法。
【請求項９】
物理インタフェースにおいてデータパケットを受信することと、
集積回路デバイスのリンク層モジュールにおいて、受信ＦＩＦＯキューにデータパケットに関連した情報を提供することと、
同ＦＩＦＯキューからメモリバッファへパケット情報を送信することと、
バッファ記述子リングを規定する第１の複数のバッファ記述子のうちの第１の空きバッファ記述子を表す第１の末尾インジケータ値を受信することと、バッファ記述子リングはメモリバッファを規定することと、
第１の末尾インジケータ値に基づき第１の休止コマンドを送信することと、第１の休止コマンドは、一定の期間に渡って集積回路デバイスの物理インタフェースにおいて受信されるデータのフローを停止することであることと、からなる方法。
【請求項１０】
前記複数のバッファ記述子における次の利用可能なバッファ記述子を表す先頭インジケータ値を受信することと、
ウォーターマーク値を受信することと、を含み、
第１の停止コマンドを送信することは、さらに先頭インジケータ値およびウォーターマーク値に基づく、請求項９に記載の方法。
【請求項１１】
第１の停止コマンドを送信することは、先頭インジケータ値と末尾インジケータ値との関係がウォーターマーク値未満であることに基づく請求項１０に記載の方法。
【請求項１２】
前記複数のバッファ記述子におけるバッファ記述子の数を表す長さ値を受信することを含み、
第１の停止コマンドを送信することは、さらに長さ値に基づく、請求項１０に記載の方法。
【請求項１３】
第２の複数のバッファ記述子における最も最近解放されたバッファ記述子を表す第２の末尾インジケータ値を受信することと、
第１の末尾インジケータ値に基づき第２の停止コマンドを送信することと、第２の休止コマンドは、集積回路デバイスの物理インタフェースにおいて受信されるデータのフローを制限することであることと、を含む請求項９に記載の方法。
【請求項１４】
ウォーターマーク値を格納するウォーターマークレジスタと、ウォーターマーク値は、メモリバッファに対するバッファ記述子セットの所望の空きバッファ記述子の最少数を示すことと、
ウォーターマークレジスタに接続された第１の入力と、ウォーターマーク値に基づきアサートされた信号を提供し、メモリバッファのオーバフローの可能性を示す出力とを有するオーバフロー検出モジュールと、
オーバフロー検出モジュールの出力に接続された入力と、オーバフロー検出モジュールにおける信号がオーバフローの可能性を示すとき、インタフェースモジュールに情報を送信することを停止するとの要求を送信デバイスに送信する出力とを有するインタフェースモジュールと、を備える通信コントローラ。
【請求項１５】
バッファ記述子セットのうちの第１のバッファ記述子に対する第１のポインタを格納する先頭レジスタと、
バッファ記述子セットのうちの第２のバッファ記述子に対する第２のポインタを格納する末尾レジスタと、をさらに備え、
オーバフロー検出モジュールは、先頭レジスタに接続された第２の入力、末尾レジスタに接続された第３の入力をさらに有し、アサートされた信号は、さらに第１のポインタおよび第２のポインタに基づく、請求項１４に記載の通信コントローラ。
【請求項１６】
アサートされた信号は、第１のポインタと第２のポインタとの関係がウォーターマーク値未満であることに基づく請求項１５に記載の通信コントローラ。
【請求項１７】
第１のポインタは集積回路デバイスにて算出され、集積回路デバイスは、集積回路デバイス外のデバイスから第２のポインタを受信するための入力を有する請求項１５に記載の通信コントローラ。
【請求項１８】
バッファ記述子セットのバッファ記述子の総数を表すリング長さ値を格納するためのリング長さレジスタをさらに備え、アサートされた信号は、さらにリング長さ値に基づく請求項１５に記載の通信コントローラ。
【請求項１９】
前記要求に応答して送信デバイスが情報を送信することを停止する休止間隔を表す休止長さ値を格納するための休止長さレジスタをさらに備える請求項１５に記載の通信コントローラ。
【請求項２０】
休止長さレジスタに接続された入力と、アサートされた再発行信号を提供する出力とを有するカウンタをさらに備え、
オーバフロー検出モジュールは、カウンタの出力に接続された第４の入力をさらに有し、アサートされた信号は、さらに再発行信号に基づく、請求項１９に記載の通信コントローラ。
【請求項２１】
集積回路デバイスに受信メモリＦＩＦＯキューをさらに備え、
受信メモリＦＩＦＯキューは、通信コントローラに関連しており、受信メモリＦＩＦＯキューが一杯であることに基づき、アサートされたＦＩＦＯオーバフロー信号をオーバフロー検出モジュールに提供し、受信メモリＦＩＦＯキューのオーバフローの可能性を示すための出力を有する請求項１４に記載の通信コントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示はデータ通信に関し、より詳細にはデータ通信のフロー制御に関する。
【背景技術】
【０００２】
コンピュータ・ネットワークなど、通信システムにおけるデバイスは、多量のデータを受信することがある。通信システムにおける受信側のデバイスは、１つ以上の送信側のデバイスからどれほどの量の情報が受信されるかに関して目算のないことが一般的である。例えば、イーサネット（登録商標）ネットワークでは、受信デバイスは、物理層およびデータリンク層において、どれほど大きなパケットが受信されているかに関して（次のパケットがどれほど大きいかについては言うに及ばず）目算がなく、これによって、受信デバイスにおけるデータオーバフローおよび送信されたデータの損失の可能性が生じる場合がある。受信されるデータをデータ処理資源によって即座に処理し、オーバフローの可能性を緩和するためには、通常、デバイスの中央処理装置（ＣＰＵ）または他の処理モジュールに望ましくない負荷を与える必要がある。同様に、送信されるデータがアプリケーションに渡されるまで失われないことを保証するようにデータリンク層におけるメモリＦＩＦＯを充分に大きくするには、それが可能な場合であっても、大きな費用が必要である。したがって、小さいメモリＦＩＦＯを用いて、受信されたデータをデータバッファへ送信する前に、一時的に少量の受信されたデータを迅速に格納することがある。
【０００３】
しかしながら、一部の状況では、アプリケーションがデータバッファからデータを除去し、処理することが可能であるのよりも速く、データが受信されることがある。これによって、データバッファのオーバフローや、受信されたデータの望ましくない損失が生じることがある。大きな受信キューまたはデータバッファを用いることによってデータバッファオーバフローの尤度を減少させることが可能であるが、そのようなメモリのサイズおよび費用は多くの通信システムには望ましいものでない。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
したがって、データ通信フローを制御するための改良されたデバイスは有利である。
【課題を解決するための手段】
【０００５】
集積回路のデータバッファに対するデータ通信フローを制御するためのデバイスを開示する。一実施形態では、このデバイスは、送信デバイスから通信されるデータを受信する。受信されたデータは、メモリにおけるデータバッファに配置される。データバッファは複数のバッファ記述子からなるセットによって規定される。複数のバッファ記述子からなるセットにおける空きバッファ記述子の数は、データバッファにおける空き空間の量を表す。このデバイスは、送信デバイスから情報を受信するとともに、データバッファに対する空きバッファ記述子の数を表す情報にアクセスを行う通信コントローラを含む。この通信コントローラは、空きバッファ記述子の数が閾値レベル（ウォーターマーク）未満となる時を判定することによって、データバッファがオーバフローするか否かを判定する。通信コントローラは、データバッファがオーバフロー条件になる可能性があるとの判定に応答して、データの送信を停止するとの要求を送信デバイスに送信し、データバッファがほぼ一杯であることを示す。データバッファがその容量に近づくときに、受信されるデータのフローを停止することによって、通信コントローラは受信デバイスにてデータが失われる尤度を減少させる。
【発明を実施するための最良の形態】
【０００６】
図１を参照する。図１には、通信システム１００のブロック図を示す。通信システム１００は、送信デバイス１７０、受信デバイス１８１およびネットワーク１５０を含む。ネットワーク１５０は、ローカルエリアネットワーク、ワイドエリアネットワークもしくは他の適切な通信ネットワーク、またはそれらの組み合わせであってよい。
【０００７】
動作中、送信デバイス１７０はネットワーク１５０を介して受信デバイス１８１へデータを送信する。受信デバイス１８１は、受信したデータをメモリ１２０におけるデータバッファに格納する。データバッファは複数のバッファ記述子からなるセットによって規定される。したがって、複数のバッファ記述子からなるセットにおける各空きバッファ記述子は、まだいかなるデータも収容しておらず、空きであると考えられるデータバッファの部分を識別する。受信したデータを収容しているデータバッファの部分に関連したバッファ記述子は、空きでないと考えられる。１つのバッファ記述子に関連したデータバッファの占有された部分における全てのデータの除去その他使用が完了されたとき、関連するバッファ記述子は、サービス提供済み（すなわち、解放済み）であると考えられ、再度、空きバッファ記述子であると考えられる。したがって、このとき、解放されたバッファ記述子に関連したメモリにおけるデータバッファの部分は、より多くのデータを受信するために利用可能である。
【０００８】
受信デバイス１８１は、バッファ記述子セットにおける空きバッファ記述子の数を追跡記録する。データがデータバッファに書き込まれているとき、この数がウォーターマーク（閾値）レベル未満となり、データバッファのオーバフローの可能性を示した場合、受信デバイス１８１は、データを送信することを停止するよう送信デバイス１７０へ要求を発行する。この停止要求は、イーサネット（登録商標）休止フレームまたは他の適切な休止要求であってよい。一定の期間に渡って送信デバイスがデータを送信することを停止することによって、受信デバイス１８１に複数のバッファ記述子を解放する時間が与えられることにより、バッファオーバーフローの尤度が減少する。
【０００９】
受信デバイス１８１によって維持されるウォーターマークレベルは、データバッファのオーバフローを生じ得る送信デバイス１７０と受信デバイス１８１との間の任意の通信遅延を補償するように設定されてよい。例えば、受信デバイスにて停止要求が発行される時と、送信デバイスがデータを送信することを停止することが可能である時との間には、遅延が存在し得る。したがって、停止要求が発行された後、一定の期間に渡って、データが継続して受信される。ウォーターマークレベルは、停止要求が発行される時と、送信デバイスがデータを送信することを停止することが可能である時との間に受信されるデータを、関連するデータバッファが収容することを保証するのに充分な空きバッファ記述子が存在するように、選択されることが可能である。例えば、ウォーターマークレベルは、受信されるデータの最大フレームサイズや、データの送信を停止するために必要な最大遅延に基づいてよい。
【００１０】
図１の実施形態における受信デバイス１８１は、メモリ１２０、デバイス１３０およびデバイス１４０に接続された集積回路デバイス１１０を備えるように示している。デバイス１４０は、通信コントローラ１１０とネットワーク１５０との間のインタフェースを提供するようにネットワーク１５０に接続された、物理的な通信モジュール１４０を表す。デバイス１３０は、ＣＰＵ、メモリコントローラまたは他の周辺デバイスなど、マスタ／スレーブデバイスであることが可能である。メモリ１２０は、読取／書込ランダムアクセスメモリを含むことが可能である。一実施形態では、メモリ１２０は、システム１００のＣＰＵに対する１つ以上の命令、ビデオ情報などを格納するために用いられるシステムメモリである。物理的な通信モジュール１４０は、通信コントローラ１１０とネットワーク１５０との間のインタフェースを提供する。物理的な通信モジュール１４０は、イーサネット（登録商標）のＰＨＹ層または他の適切な物理的な通信機能を実装することが可能である。メモリ１２０、デバイス１３０および物理的な通信モジュール１４０を集積回路１１０外にあるように示しているが、これらのモジュールのうちの１つ以上も集積回路１１０に統合可能であることが認められる。さらに、物理的な通信モジュール１４０なしで通信システムが実装されてよいことが認められる。
【００１１】
集積回路１１０は、物理的な通信モジュール１４０およびシステムバス１２５に接続された通信コントローラ１１１を備える。特定の一実施形態では、通信コントローラは、イーサネット（登録商標）媒体アクセスコントローラ（ＭＡＣ）などのリンク層コントローラ、または他の標準規格ベースもしくは適当なリンク層コントローラである。また、集積回路デバイス１１０はバス１２５に接続されたデバイス１１２，１１３，１１４も備える。デバイス１１２〜１１４はマスタデバイスまたはスレーブデバイスであってよく、特定の一実施形態では、デバイス１１３はＣＰＵであり、デバイス１１４は、バスとバス１２６との間のバスインタフェースユニットであってよい。
【００１２】
動作中、物理的な通信モジュール１４０は送信デバイス１７０から信号を受信し、適切な処理を実行して通信モジュール１１１にデータを提供する。特定の一実施形態では、通信コントローラ１１１は、受信されたデータを通信コントローラ１１１における先入れ先出し方式（ＦＩＦＯ）のメモリキュー（メモリＦＩＦＯ）（図示せず）に配置する。ＦＩＦＯメモリにおけるデータは、データバッファに転送される。このデータバッファはメモリ１２０に格納可能である。
【００１３】
データバッファに格納されたデータは、通常、アクセスを行うアプリケーションによって、先入れ先出し方式（ＦＩＦＯ）によりデータバッファから除去され、これによって、データが格納されていたデータバッファの部分が解放される。例えば、アクセスを行うアプリケーションは、データバッファに格納されたパケット化された情報を処理し、パケット化されたデータを他のアプリケーションによるアクセスに適切なフォーマットへ変換することができる。なお、データバッファにおけるデータにアクセスを行うアプリケーションは、ハードウェアによるアプリケーションであってもソフトウェアによるアプリケーションであってもよい。
【００１４】
特定の一実施形態では、データバッファは複数のバッファ記述子からなるセットによって規定される。例えば、複数のバッファ記述子からなるセットは、各バッファ記述子がメモリ１２０に格納されたデータバッファの一部に関連している、バッファ記述子リングを形成することが可能である。例えば、各バッファ記述子は、メモリ１２０においてデータバッファ部分に関連したメモリ位置に対するポインタを収容することが可能である。データがデータバッファの一部に書き込まれるとき、そのデータバッファ部分に関連したバッファ記述子は、使用済み、すなわち、もはや空きでないものとして識別される。データバッファにおいて特定のバッファ記述子位置に格納されたデータは、処理されると、それによってデータバッファから出され、バッファ記述子が解放され、空きとして識別される。したがって、空きバッファ記述子の数は、通信コントローラ１１１に利用可能なデータバッファにおける空き空間の量を表す。
【００１５】
通信コントローラ１１１は、バッファ記述子のセットにおける空きバッファ記述子の数を監視する。空きバッファの数に関する情報は、システムメモリを規定するバッファ記述子を管理するデータ処理資源によって提供可能である。そのような資源は、ユーザアプリケーション、ドライバなど、ハードウェアまたはソフトウェアのリソースであってよい。資源は、マスタ／スレーブデバイス１３０など、集積デバイス１１０外にあってよい。例えば、複数のバッファ記述子からなるセットにおけるバッファ記述子の利用可能性に関する情報を更新する資源が、通信コントローラ１１１によってアクセス可能な集積回路デバイスまたは他の位置に対し、利用可能性の情報を提供してもよい。この情報はシステムバス１２５を介して提供されてよい。従来のシステムでは、バッファ記述子の解放に関する情報は、通信コントローラ１１１などリンクレベルのコントローラに提供されず、リンクレベルのコントローラによるそのような解放のアセスメントは望ましくない量の時間およびシステム資源を消費することがある。加えて、使用済み、すなわち空きでないバッファ記述子に関連した情報は、通信コントローラ１１１にて算出可能である。なお、本開示では、バッファ記述子の利用可能性に関する集積回路デバイスにおける情報を更新する資源は、リアルタイムで情報を更新する必要はない。したがって、特定の一実施形態では、空きバッファ記述子情報によって示されるより多いまたは少ない空き空間がバッファに存在し得る。ウォーターマークは、バッファ記述子の利用可能性が更新されるときを補償するように設定可能である。
【００１６】
通信コントローラ１１１は、所望の空きバッファ記述子の数を示すウォーターマークに対するアクセスを有する。データバッファに関連した空きバッファ記述子の数がウォーターマークに基づく値以下になる場合、データバッファのオーバフローの可能性が示される。したがって、オーバフロー可能性条件に応答して、通信コントローラ１１１は送信デバイス１７０に停止要求を発行し、これによってデータの送信が停止される。
【００１７】
停止要求はイーサネット（登録商標）休止コマンドなどによって一時的にデータの送信を遅延させるか、あるいは送信デバイスからのデータの送信を終了させることが可能である。したがって、特定の一実施形態では、充分なバッファ記述子の数が解放された後、通信コントローラは、データの送信を再開できることを送信デバイス１７０に通知することが可能である。特定の一実施形態では、通信コントローラは、データが送信されるべきか否かを送信デバイスに示す、制御信号を提供することが可能である。制御信号の状態を設定することによって、通信コントローラはデータの送信を制御することが可能である。
【００１８】
代替の一実施形態では、通信コントローラ１１１は送信デバイス１７０に一連の休止要求を発行する。各休止要求によって、休止間隔に渡ってデータの送信が停止される。充分な数のバッファ記述子が解放された後、通信コントローラ１１１は休止要求の発行を停止し、係属中の休止間隔が経過した後、送信デバイス１７０はデータの送信を再開する。
【００１９】
図２を参照する。図２には、通信コントローラ２１１の特定の一実施形態のブロック図を示す。通信コントローラ２１１は、図１の通信コントローラ１１１の特定の一実施形態である。通信コントローラ２１１は、インタフェースコントローラ２２０、受信ＦＩＦＯ２３０、送信ＦＩＦＯ２４０、ＤＭＡ（ダイレクト・メモリ・アクセス）コントローラ２５０およびオーバフロー検出モジュール２６０を備える。特定の一実施形態では、受信ＦＩＦＯ２３０はＳＲＡＭ受信ＦＩＦＯである。インタフェースコントローラ２２０は、物理的な通信モジュールに接続された出力および入力を備える。受信ＦＩＦＯは、インタフェースコントローラ２２０の出力に接続された入力と、ＤＭＡコントローラ２５０の入力に接続された出力とを備える。受信ＦＩＦＯは、インタフェースコントローラ２２０の入力に接続された出力と、ＤＭＡコントローラ２５０の出力に接続された入力とを備える。オーバフロー検出モジュール２６０は、インタフェースコントローラ２２０の入力に接続された出力を有する。モジュール間の制御信号は、接続２２５によって表される１つ以上の接続を通じて提供される。なお、オーバフロー検出に関連した情報を受信するために、オーバフロー検出モジュール２６０が接続２２５に接続されることも可能である。
【００２０】
動作中、インタフェースコントローラ２２０は物理的な通信モジュール１４０からデータを受信し、物理的な通信モジュール１４０にデータを提供する。受信されたデータは受信ＦＩＦＯ２３０に格納され、ＤＭＡモジュール２５０を介してデータバッファへ転送される。オーバフロー検出モジュール２６０は、データバッファが一杯であることを示す指標として、データバッファを規定する空きバッファ記述子の数を監視して、オーバフローの可能性の条件が存在するか否かを判定する。また、オーバフロー検出モジュールは、オーバフローの可能性または実際のオーバフローが存在するか否かを判定するために、他のシステム資源を監視することも可能である。例えば、オーバフロー検出モジュール２６０は、オーバフローの可能性の条件が受信ＦＩＦＯ２３０に存在するか否かを判定するために、受信ＦＩＦＯ２３０が一杯であることを監視することが可能である。オーバフローの可能性の条件が存在する場合には、オーバフロー検出モジュール２６０はＯＶＥＲＦＬＯＷ  ＩＮＤＩＣＡＴＯＲ信号のアサートを行う。これに応答して、フロー制御モジュール２７０はデータの送信を停止するとの要求を送信デバイスに送信し、したがって、データバッファまたは受信ＦＩＦＯ２３０におけるオーバフローの尤度を減少させる。
【００２１】
送信ＦＩＦＯ２４０は、インタフェースコントローラ２２０によってアクセスが行われるデータを受信する。インタフェースコントローラ２２０は、送信ＦＩＦＯからのデータを物理インタフェースモジュールに提供する。
【００２２】
図３を参照する。図３には、データバッファを組織化する方式の特定の一実施形態を示す。この図には、複数のレジスタからなるセット３３０が示されている。レジスタのセット３３０は、複数のバッファ記述子からなるセット３２２に関連したアドレスおよび他の情報を格納する。複数のバッファ記述子からなるセット３２２は、データバッファ３２１を規定するバッファ記述子リングを表す。複数のバッファ記述子からなるセット３２２およびデータバッファ３２１は、図１のメモリ１２０など、メモリ３２０に格納されて存在することが可能である。レジスタのセット３３０は集積回路デバイスに配置されてもよく、詳細には、通信コントローラ１１１内に存在してよい。
【００２３】
示すように、バッファ記述子のセット３２２は複数のバッファ記述子を含む。各バッファ記述子は、データバッファ３２１に関連したメモリ３２０の部分を識別する、メモリ３２０のアドレスに対するポインタを含む。各バッファ記述子に含まれるポインタは、システムの初期化中または他の適切な時間に初期化可能である。バッファ記述子がメモリ３２０の物理的に連続した部分を指す必要はないことが認められる。
【００２４】
レジスタのセット３３０は、ベースレジスタ３３１、先頭ポインタレジスタ３３２、末尾ポインタレジスタ３３３、リング長さレジスタ３３４およびウォーターマークレジスタ３３５を含む。ベースレジスタ３３１は、バッファ記述子セット３２２における第１のバッファ記述子に対するメモリアドレスを表す値（ＲＢＡＳＥ）を格納する。先頭ポインタレジスタ３３２は、データバッファ３２１の次の利用可能な部分に関連したバッファ記述子に対するメモリアドレスを表す値（ＨＰＯＩＮＴＥＲ）を格納し、これは新たなバッファ記述子位置にデータが格納されるとときに通信コントローラ１１１によって更新される。
【００２５】
特定の一実施形態では、複数のバッファ記述子からなるセット３２２は、データが書き込まれるときにラップアラウンドを行うバッファ記述子リングとして構成される。最初、ＨＰＯＩＮＴＥＲの値は、ＨＰＯＩＮＴＥＲがバッファ記述子リングの第１のバッファ記述子にてデータが格納されることを示すように、バッファ記述子リングを管理する資源によってＲＢＡＳＥの値に設定される。
【００２６】
末尾ポインタレジスタ３３３は、データバッファ３２１のうちの最も最近サービス提供された、すなわち解放された部分に関連したバッファ記述子を表す値（ＴＰＯＩＮＴＥＲ）を格納する。したがって、処理アプリケーションがデータバッファ３２１からデータを出すとき、すなわち、メモリの割当を解除するとき、ＴＰＯＩＮＴＥＲの値は、データバッファ３２１のうちサービス提供された最後の部分に関連したバッファ記述子を識別するように、リングバッファを管理する資源によって更新される。複数のバッファ記述子からなるセット３２２がバッファ記述子リングとして構成される場合、ＴＰＯＩＮＴＥＲは環状に移動し、バッファ記述子リングの「末尾」を指す。
【００２７】
空きバッファ記述子の数はバッファ記述子リングの先頭および末尾の位置に基づき決定可能であることが認められる。空きバッファ記述子の数は、通信コントローラ１１１に利用可能なデータバッファ３２１の一杯さの尺度を提供する。特定の一実施形態では、空きバッファ記述子の数は次の式によって算出可能である：
ＦＲＥＥＢＤ＝ＴＰＯＩＮＴＥＲ−ＨＰＯＩＮＴＥＲ＋ＲＢＤＬＥＮＧＴＨ
ここで、ＴＰＯＩＮＴＥＲはＨＰＯＩＮＴＥＲ未満であり、次の式に従う。
ＦＲＥＥＢＤ＝ＴＰＯＩＮＴＥＲ−ＨＰＯＩＮＴＥＲ
ここで、ＴＰＯＩＮＴＥＲはＨＰＯＩＮＴＥＲ以上である。値ＲＢＤＬＥＮＧＴＨはバッファ記述子リングの長さを表すものであり、レジスタセット３３０のレジスタ３３４に格納される。特定の一実施形態では、ＨＰＯＩＮＴＥＲ、ＴＰＯＩＮＴＥＲおよびＲＢＤＬＥＮＧＴＨは、バッファ記述子に対するインデックス値を表す。
【００２８】
ウォーターマークレジスタ３３５は、複数のバッファ記述子からなるセット３２２における所望の空きバッファ記述子の最少数を示す値ＰＢＤＷＭを格納する。複数のバッファ記述子からなるセット３２２における空きバッファ記述子の数が、この所望の数未満である場合、データバッファ３２１にオーバフローの可能性が存在する。したがって、データバッファ３２１のオーバフローの可能性を識別するために、ＰＢＤＷＭ値を複数のバッファ記述子からなるセット３２２における空きバッファ記述子の数と比較することが可能である。
【００２９】
図４を参照する。図４は、バッファ記述子４００の特定の一実施形態を示す。バッファ記述子４００は、アドレスポインタフィールド４０２、データ長さフィールド４０４ならびに状態および制御フィールド４０６を備える。アドレスポインタフィールド４０２は、データバッファ３２１など、バッファ記述子４００に関連したデータバッファの部分の基本アドレスを識別する。データ長さフィールド４０４は、バッファ記述子４００に関連したデータバッファの部分に格納されたデータの量を表す値を格納する。データ長さフィールドは、どれほどのデータバッファが特定のバッファ記述子に関連しているかを識別するために、バッファ記述子に対応するデータバッファに対するアクセスを管理する資源によって用いられることが可能である。状態および制御フィールド４０６は、システムメモリ内の先頭および末尾の情報、バッファが空きであるか否か、バッファ記述子４００がバッファ記述子リングにおける最後のバッファ記述子であるか否かなど、状態および制御情報を格納する。
【００３０】
図５を参照する。図５は、オーバフロー検出モジュール２６０の特定の一実施形態のブロック図である。オーバフロー検出モジュール２６０は。レジスタのセット３３０に接続される。オーバフロー検出モジュール２６０は、バッファ記述子フロー制御モジュール５０２、受信ＦＩＦＯフロー制御モジュール５０６、休止カウンタ５０８、休止間隔レジスタ５１０およびＯＲゲート５０４を備える。バッファ記述子フロー制御モジュールは、レジスタのセット３３０に接続された第１の入力と、信号ＲＥＣＨＥＣＫを受信する第２の入力と、データバッファにて可能なオーバフロー条件を示す信号ＢＤＰＡＵＳＥを提供する出力とを備える。受信ＦＩＦＯフロー制御モジュール５０６は、受信ＦＩＦＯにおける可能なオーバフロー条件を示す信号ＭＦＰＡＵＳＥを提供する出力を有する。休止カウンタ５０８は、信号ＲＥＣＨＥＣＫを提供するようにバッファ記述子フロー制御モジュールに接続された出力と、信号ＢＤＰＡＵＳＥを受信する第１の入力と、第２の入力とを備える。休止間隔レジスタ５１０は、休止カウンタ５０８の第２の入力に接続された出力を備える。ＯＲゲート５０４は、バッファ記述子フロー制御モジュール５０２の出力に接続された入力および受信ＦＩＦＯフロー制御モジュール５０６の出力に接続された入力を含む複数の入力と、信号ＯＶＥＲＦＬＯＷ  ＩＮＤＩＣＡＴＯＲを提供する出力とを有する。
【００３１】
動作中、バッファ記述子フロー制御モジュール５０２は、データバッファにオーバフローの可能性が存在するか否かを判定するために、レジスタのセット３３０にアクセスを行う。特定の一実施形態では、バッファ記述子フロー制御モジュール５０２は、図３に関して記載するように、データバッファに関連した空きバッファ記述子の数を決定し、その数をウォーターマーク値ＰＢＤＷＭと比較することによって、オーバフローの可能性を検出する。バッファ記述子フロー制御モジュール５０２がオーバフローの可能性を検出した場合、信号ＢＤＰＡＵＳＥがアサートされ、ＯＶＥＲＦＬＯＷ  ＩＮＤＩＣＡＴＯＲ信号のアサートが生じる。この信号のアサートに応答して、通信コントローラ１１１は、送信デバイスに停止要求を発行し、これによってデータバッファにおけるオーバフローの尤度を減少させる。
【００３２】
受信ＦＩＦＯフロー制御モジュール５０６は、受信ＦＩＦＯ２３０におけるオーバフローの可能性を検出する。オーバフローの可能性が検出される場合、信号ＭＦＰＡＵＳＥがアサートされ、信号ＯＶＥＲＦＬＯＷ  ＩＮＤＩＣＡＴＯＲのアサートおよび休止要求の発行が生じる。したがって、オーバフロー検出モジュール２６０は、受信ＦＩＦＯ２３０およびデータバッファを含む複数の位置においてオーバフローの可能性を検出し、これによってデータ損失の尤度を減少させることが可能である。
【００３３】
休止カウンタ５０８を用いて、データ送信が停止された時間の長さに基づく値を保持し、オーバフローの可能性がもはや存在しなくなるまでオーバフロー検出モジュール２６０がオーバフローインジケータを維持することや、所定量の時間の後にオーバフローインジケータを除去することを可能とすることができる。イーサネット（登録商標）プロトコルが実装されている一実施形態では、ＢＤＰＡＵＳＥ信号によって、休止カウンタが休止コマンドによって送信される休止間隔に基づく値に設定される。休止間隔の値はレジスタ５１０に格納された値ＰＡＵＳＥ  ＩＮＴＥＲＶＡＬの値であり、これは通信コントローラ１１１によって停止要求が発行された後、休止コマンドによってデータ送信が停止される時間の長さを表す。休止カウンタ５０８は、閾値に到達するまで、ＰＡＵＳＥ  ＩＮＴＥＲＶＡＬの値のカウントダウンを行う。特定の一実施形態では、この閾値はＰＡＵＳＥ  ＩＮＴＥＲＶＡＬの値の半分である。閾値に到達すると、ＲＥＣＨＥＣＫ信号がアサートされ、バッファ記述子フロー制御モジュールは、データバッファにおいてオーバフローの可能性が依然として存在するか否かを判定するために、レジスタバンク３３０に格納された値を再確認する。オーバフローの可能性が依然として存在する場合、信号ＢＤＰＡＵＳＥが再びアサートされ、送信デバイスに別の停止要求が送信される。
【００３４】
図６を参照する。図６には、データバッファに対するデータフローを制御する方法の特定の一実施形態のフローチャートを示す。この方法は、図１の通信コントローラ１１１など、通信コントローラにおいて実装可能である。ブロック６１１にて、データバッファに関連した空きバッファ記述子の数が決定される。空きバッファ記述子の数は、通信コントローラまたは類似のデバイスに利用可能なデータバッファにおける空き空間の量を表し、したがって、データオーバフローの可能性を示す。判定ブロック６１２にて、空きバッファ記述子の数がウォーターマーク値以下であるか否かが決定される。ウォーターマーク値は、データバッファにおけるオーバフローの可能性を避けるまたは尤度を減少させる所望の空きバッファ記述子の数を表す。空きバッファ記述子の数がウォーターマーク値より大きい場合、方法のフローはブロック６１１へ戻る。空きバッファ記述子の数がウォーターマーク以下である場合、方法のフローはブロック６１３へ移り、データの送信を停止させる要求がデータ送信デバイスへ送信される。これによって、システムがデータバッファの充分な空間をクリアして、オーバフローの尤度を減少させることが可能となる。
【００３５】
方法のフローはブロック６１４へ移り、カウンタに格納された値が減少される。このカウンタは、データ送信が停止される時間の量を表す。判定ブロック６１５にて、カウンタが閾値に到達したか否かが決定される。カウンタが閾値に達していない場合、方法のフローはブロック６１４へ戻り、閾値に到達するまでカウンタの減少が継続される。閾値に到達すると、方法のフローはブロック６１１へ戻り、データバッファにおいてオーバフローの可能性が依然として存在するか否かを判定する。このようにして、データバッファの充分な空間がクリアされオーバフローの尤度が減少するまで、方法は停止要求の発行を継続する。
【００３６】
特定の実施形態に関連して本開示の記載を行った。しかしながら、添付の特許請求の範囲に述べるような本開示の範囲から逸脱することなく、様々な修正および変更が可能であることが認められる。例えば、サイズが変化するパケットではなく、サイズが固定のパケットを受信するように、本明細書に記載の通信システムを実装することもできる。さらに、本明細書に記載の通信コントローラは、バッファ記述子セットに関連した複数のデータバッファに対するアクセスを有することもできる。各バッファ記述子セットは異なるウォーターマークに関連してよい。したがって、各データバッファは、関連するウォーターマークに少なくとも部分的には応じた異なるサービス品質に関連してよい。さらに、バッファ記述子リングの先頭および末尾に対するポインタなどバッファ記述子セットに関連した情報は、通信コントローラなど、集積回路のどこに格納されてもよく、集積回路外に格納されてもよい。したがって、明細書および図面は限定的な意味ではなく例示として捉えられるものであり、そのような修正は全て、本開示の範囲の内に含まれることが意図される。
【００３７】
データフローを管理する方法を開示した。特定の実施形態では、この方法は、メモリバッファを規定する複数のバッファ記述子を含むバッファ記述子セットにおける第１のバッファ記述子を表す第１の値を、第１の時に集積回路デバイスにて受信することと、第１のバッファ記述子は空きバッファ記述子であることと、第１の値に基づき、集積回路デバイスにおいて送信デバイスから受信されているデータを停止させると決定することとを含む。特定の一態様では、この方法は、バッファ記述子セットにおける１つのバッファ記述子がもはや空でないことを表す第２の値を集積回路デバイスにて受信することと、バッファ記述子セットにおける所望の空きバッファ記述子の数を表すウォーターマーク値を集積回路デバイスにて受信することと、さらに第１の値、第２の値およびウォーターマーク値に基づき、集積回路デバイスにおいて送信デバイスから受信されているデータを停止させると決定することとを含む。
【００３８】
別の特定の態様では、この方法は、バッファ記述子セットの総数を表す長さ値を集積回路デバイスにおいて受信することと、さらに長さ値に基づき、集積回路デバイスにおいて送信デバイスから受信されているデータを停止させると決定することとを含む。さらに別の特定の態様では、バッファ記述子セットはバッファ記述子リングとして構成される。さらに別の特定の態様では、集積回路デバイスにおいて送信デバイスから受信されているデータを停止させると決定することは、第１の値と第２の値との関係がウォーターマーク値未満であることに基づく。
【００３９】
特定の一態様では、この方法は、集積回路デバイスにおいて受信されているデータが停止される期間を識別する停止インジケータを提供することと、同期間中、送信デバイスからのデータのデータ受信の停止を継続すると決定することとを含む。別の特定の態様では、第１の値はメモリバッファから情報を読み出すデータ処理資源から受信され、第２の値はメモリバッファに情報を提供することに応答して集積回路デバイスにおいて算出される。特定の一態様では、データ処理資源は集積回路デバイス外にある。
【００４０】
特定の一実施形態では、この方法は、物理インタフェースにおいてイーサネット（登録商標）パケットを受信することと、集積回路デバイスのリンク層モジュールにおいて、受信ＦＩＦＯキューにイーサネット（登録商標）データパケットに関連した情報を提供することと、同ＦＩＦＯキューからメモリバッファへパケット情報を送信することと、バッファ記述子リングを規定する第１の複数のバッファ記述子のうちの第１の空きバッファ記述子を表す第１の末尾インジケータ値を受信することと、バッファ記述子リングはメモリバッファを規定することと、第１の末尾インジケータ値に基づき第１の休止コマンドを送信することと、第１の休止コマンドは、一定の期間に渡って集積回路デバイスの物理インタフェースにおいて受信されるデータのフローを停止することであることとを含む。
【００４１】
特定の一態様では、この方法は、前記複数のバッファ記述子における次の利用可能なバッファ記述子を表す先頭インジケータ値を受信することと、ウォーターマーク値を受信することとを含む。特定の一態様では、第１の停止コマンドを送信することは、さらに先頭インジケータ値およびウォーターマーク値に基づく。別の特定の態様では、第１の停止コマンドを送信することは、先頭インジケータ値と末尾インジケータ値との関係がウォーターマーク値未満であることに基づく。
【００４２】
別の特定の態様では、この方法は、前記複数のバッファ記述子におけるバッファ記述子の数を表す長さ値を受信することと、第１の停止コマンドを送信することは、さらに長さ値に基づくこととを含む。さらに別の特定の態様では、この方法は、バッファ記述子リングの基本アドレスを表すバッファ記述子基本値を受信することと、第１の停止コマンドを送信することは、バッファ記述子基本値に基づくこととを含む。
【００４３】
さらに別の特定の態様では、この方法は、第２の複数のバッファ記述子における最も最近解放されたバッファ記述子を表す第２の末尾インジケータ値を受信することと、第１の末尾インジケータ値に基づき第２の停止コマンドを送信することと、第２の休止コマンドは、集積回路デバイスの物理インタフェースにおいて受信されるデータのフローを制限することであることとを含む。
【００４４】
データフローを制御するためのデバイスを開示した。特定の一実施形態では、このデバイスは、集積回路デバイスにおけるシステムバスと、システムバスに接続された集積回路デバイスにおける通信コントローラとを備える。特定の一態様では、この通信コントローラは、ウォーターマーク値を格納するウォーターマークレジスタと、ウォーターマーク値は、メモリバッファに対するバッファ記述子セットの所望の空きバッファ記述子の最少数を示すことと、ウォーターマークレジスタに接続された第１の入力と、ウォーターマーク値に基づきアサートされた信号を提供し、メモリバッファのオーバフローの可能性を示す出力とを有するオーバフロー検出モジュールと、オーバフロー検出モジュールの出力に接続された入力と、オーバフロー検出モジュールにおける信号がオーバフローの可能性を示すとき、インタフェースモジュールに情報を送信することを停止するとの要求を送信デバイスに送信する出力とを有するインタフェースモジュールとを含む。
【００４５】
別の特定の態様では、この通信コントローラは、バッファ記述子セットのうちの第１のバッファ記述子に対する第１のポインタを格納する先頭レジスタと、バッファ記述子セットのうちの第２のバッファ記述子に対する第２のポインタを格納する末尾レジスタとをさらに含み、オーバフロー検出モジュールは、先頭レジスタに接続された第２の入力、末尾レジスタに接続された第３の入力をさらに有し、アサートされた信号は、さらに第１のポインタおよび第２のポインタに基づく。さらに別の特定の態様では、この通信コントローラは、バッファ記述子セットのバッファ記述子の総数を表すリング長さ値を格納するためのリング長さレジスタをさらに備え、アサートされた信号は、さらにリング長さ値に基づく。特定の一態様では、第１のポインタは集積回路デバイスにて算出され、集積回路デバイスは、集積回路デバイス外のデバイスから第２のポインタを受信するための入力を有する。さらに別の特定の態様では、第１の停止コマンドを送信することは、先頭インジケータ値と末尾インジケータ値との関係がウォーターマーク値未満であることに基づく。
【００４６】
別の特定の態様では、通信コントローラは、要求に応答して送信デバイスが情報を送信することを停止する休止間隔を表す休止長さ値を格納するための休止長さレジスタをさらに備える。さらに別の特定の態様では、通信コントローラは、休止長さレジスタに接続された入力と、アサートされた再発行信号を提供する出力とを有するカウンタをさらに含み、オーバフロー検出モジュールは、カウンタの出力に接続された第４の入力をさらに有し、アサートされた信号は、さらに再発行信号に基づく。
【００４７】
さらに別の特定の態様では、インタフェースモジュールはイーサネット（登録商標）媒体アクセスコントローラを含む。さらに別の特定の態様では、このデバイスは集積回路デバイスに受信メモリＦＩＦＯキューを備え、受信メモリＦＩＦＯキューは通信コントローラに関連しており、受信メモリＦＩＦＯキューが一杯であることに基づき、アサートされたＦＩＦＯオーバフロー信号をオーバフロー検出モジュールに提供し、受信メモリＦＩＦＯキューのオーバフローの可能性を示すための出力を有する。
【図面の簡単な説明】
【００４８】
【図１】通信システムの特定の一実施形態のブロック図。
【図２】通信システムの通信コントローラの特定の一実施形態のブロック図。
【図３】本発明の特定の一実施形態による通信システムの様々なメモリ要素の関係を示す図。
【図４】データバッファに関連したバッファ記述子の特定の一実施形態の図。
【図５】通信コントローラのオーバフロー検出モジュールの特定の一実施形態のブロック図。
【図６】集積回路デバイスにおけるデータ通信フローを管理する方法の特定の一実施形態のフローチャート。
【図１】
2009540681.tif 000003
【図２】
2009540681.tif 000004
【図３】
2009540681.tif 000005
【図４】
2009540681.tif 000006
【図５】
2009540681.tif 000007
【図６】
2009540681.tif 000008
【国際調査報告】
2009540681.tif 000009