(57)【特許請求の範囲】
【請求項１】
第１クロックドメインで動作する書き込み機構により書き込まれ、第２クロックドメインで動作する読み出し機構により読み出されるリングバッファ内のアンダーフローエラーおよびオーバーフローエラーを検出する方法であって、該方法は、
該リングバッファを介して転送されるデータワードを受信するステップと、
該リングバッファに該データワードとともに格納されるフローインジケータ値を生成するステップであって、該フローインジケータ値は、該リングバッファから読み出している間にアンダーフローが起きるか、または、該リングバッファに書き込んでいる間にオーバーフローが起きるかどうかを判定することを容易にする情報を含み、該フローインジケータ値は周期的に変化し、予想可能な異なるフローインジケータ値は、各々の項目への連続的な書き込み動作に際して該リングバッファの各々の項目に書き込まれる、ステップと、
該リングバッファの項目に該フローインジケータ値とともにデータワードを格納するステップと、
該読み出し機構を使用して、該リングバッファから該項目を読み出すステップと、
該読み出し機構内で、予想されたフローインジケータ値を生成するステップであって、該予想されたフローインジケータ値は、該フローインジケータ値と該予想された異なるフローインジケータ値との間の差としてアンダーフロー状態およびオーバーフロー状態を検出することを可能にする、ステップと、
該リングバッファから読み出した該項目のフローインジケータ値と該予想されたフローインジケータ値とを比較するステップと、
該フローインジケータ値が該予想されたフローインジケータ値と異なる場合にフローエラー信号を生成するステップと
を有し、
該方法は更に、
前記リングバッファに前記データワードとともに格納されるフロー方向インジケータ値を生成するステップであって、該フロー方向インジケータ値は、フローエラーがオーバーフローであるか、またはアンダーフローであるかを判定することを容易にする情報を含む、ステップと、
前記リングバッファの前記項目に該データワードとともに該フロー方向インジケータ値を格納するステップと、
該フロー方向インジケータの予想された値および前記フローインジケータの予想された値ならびに該フロー方向インジケータの観測された値を使用して観測されたフローエラーがアンダーフローであるか、またはオーバーフローであるかを演算するステップと
を有する、
方法。
【請求項２】
前記フローインジケータ値は、前記リングバッファの書き込みポインターが最大値に達する毎に変化するシングルビットを含み、該書き込みポインターは、該リングバッファ内の書き込まれる項目を示す、請求項１に記載の方法。
【請求項３】
前記フローインジケータ値は、前記データワードのパリティビットにおいて偶数パリティと奇数パリティとの間を変化するように符号化される、請求項１に記載の方法。
【請求項４】
前記リングバッファは奇数サイズであり、前記フローインジケータ値は、連続的な書き込み動作において０と１との間を交互にとるシングルビットである、請求項１に記載の方法。
【請求項５】
前記フローインジケータ値は、前記データワードのパリティビットにおいて偶数パリティと奇数パリティとの間を変化するように符号化され、前記リングバッファは奇数サイズであり、該パリティビットは連続的な書き込み動作において偶数パリティと奇数パリティとの間を交互にとる、請求項１に記載の方法。
【請求項６】
前記フローインジケータ値は、アンダーフローエラーをオーバーフローエラーと区別することを可能にするフロー方向インジケータをさらに含む、請求項１に記載の方法。
【請求項７】
前記データワードとともに格納される前記フローインジケータ値を生成するステップは、前記リングバッファを含むチップとは別個の遠隔送信器で行われる、請求項１に記載の方法。
【請求項８】
前記データワードとともに格納される前記フローインジケータ値を生成するステップは、前記リングバッファを含むチップ内で局所的に行われる、請求項１に記載の方法。
【請求項９】
リングバッファ内でアンダーフローエラーおよびオーバーフローエラーを検出する装置と、
該リングバッファと、
該リングバッファにデータワードとともに格納されるフローインジケータ値を生成するフローインジケータジェネレータであって、該フローインジケータ値は、該リングバッファから読み出す間にアンダーフローが起こるかどうか、または、該リングバッファへ書き込む間にオーバーフローが起こるかどうかを判定することを容易にする情報を含み、
該フローインジケータジェネレータは、該フローインジケータ値を周期的に変化するように構成され、予想可能な異なるフローインジケータ値は、項目への連続的な書き込み動作の際に該リングバッファの各々の項目に書き込まれ、該予想可能な異なるフローインジケータ値は、該フローインジケータ値と予想されたフローインジケータ値との間の差としてアンダーフロー状態またはオーバーフロー状態を検出することを可能にする、フローインジケータジェネレータと、
第１クロックドメインで動作し、該リングバッファの項目に該フローインジケータ値とともに該データワードを格納するように構成される、書き込み機構と、
第２クロックドメインで動作し、該リングバッファから該項目を読み出すように構成される、読み出し機構と、
該読み出し機構内で、予想されたフローインジケータ値を生成するように構成される、予想フローインジケータジェネレータと、
該リングバッファから読み出された該項目からのフローインジケータ値を該予想されたフローインジケータ値と比較するように構成された、比較機構と、
該フローインジケータ値が該予想されたフローインジケータ値と異なる場合、
フローエラー信号を生成するように構成された、エラージェネレータと、
を備え、
前記フローインジケータジェネレータは、前記リングバッファに前記データワードとともに格納されるフロー方向インジケータ値を生成するように構成され、該フロー方向インジケータ値は、フローエラーがオーバーフローであるか、またはアンダーフローであるかを判定することを容易にする情報を含み、
前記比較機構は、前記リングバッファから読み出された前記項目からのフロー方向インジケータ値を前記予想されたフローインジケータ値と比較し、フローエラーがオーバーフローであるか、または、アンダーフローであるかを判定するように構成される、
装置。
【請求項１０】
前記フローインジケータ値はシングルビットを含み、前記フローインジケータジェネレータは、前記リングバッファへの書き込みポインターが最大値に達する毎に該シングルビットを変化するように構成され、該書き込みポインターは、該リングバッファ内の書き込まれる項目を示す、請求項９に記載の装置。
【請求項１１】
前記フローインジケータジェネレータは、前記データワードのパリティビットにおける偶数パリティと奇数パリティとの間の変化で前記フローインジケータ値を符号化するように構成される、請求項９に記載の装置。
【請求項１２】
前記リングバッファは奇数サイズであり、前記フローインジケータは、連続的な書き込み動作で０と１との間を交互にとるシングルビットである、請求項９に記載の装置。
【請求項１３】
前記フローインジケータジェネレータは、前記データワードのパリティビットにおける偶数パリティと奇数パリティとの間の変化で前記フローインジケータ値を符号化するように構成され、リングバッファは奇数サイズであり、該パリティビットは、連続的な書き込み動作で偶数パリティと奇数パリティとの間を交互にとる、請求項９に記載の装置。
【請求項１４】
前記フローインジケータ値はフロー方向インジケータをさらに含み、前記フローインジケータジェネレータは、アンダーフローエラーをオーバーフローエラーと区別することを可能にするように該フロー方向インジケータを変化するように構成される、請求項９に記載の装置。
【請求項１５】
前記フローインジケータジェネレータは、前記リングバッファを含むチップと分かれた遠隔送信器に配置される、請求項９に記載の装置。
【請求項１６】
前記フローインジケータジェネレータは、前記リングバッファを含むチップ内に配置される、請求項９に記載の装置。
【請求項１７】
リングバッファ内のアンダーフローエラーおよびオーバーフローエラーを検出する装置を含むコンピュータシステムであって、
プロセッサーと、
メモリと、
該リングバッファと、
該リングバッファにデータワードとともに格納されるフローインジケータ値を生成するフローインジケータジェネレータであって、該フローインジケータ値は、該リングバッファから読み出す間にアンダーフローが起こるかどうか、または該リングバッファへ書きこむ間にオーバーフローが起こるかどうかを判定することを容易にする情報を含むフローインジケータジェネレータと、
該フローインジケータジェネレータは、該フローインジケータ値を周期的に変化するように構成され、予想可能な異なるフローインジケータ値は、項目への連続的な書き込み動作の際に該リングバッファの各々の項目に書き込まれ、該予想可能な異なるフローインジケータ値は、該フローインジケータ値と予想されたフローインジケータ値との間の差としてアンダーフロー状態またはオーバーフロー状態を検出することを可能にする、フローインジケータジェネレータと、
第１クロックドメインで動作し、該リングバッファの項目に該フローインジケータ値とともに該データワードを格納するように構成される書き込み機構と、
第２クロックドメインで動作し、該リングバッファからの項目を読み出すように構成される読み出し機構と、
該読み出し機構内で、予想されたフローインジケータ値を生成するように構成される予想フローインジケータジェネレータと、
該リングバッファから読み出された該項目からのフローインジケータ値を該予想されたフローインジケータ値と比較するように構成された比較機構と、
該フローインジケータ値が該予想されたフローインジケータ値と異なる場合、
フローエラー信号を生成するように構成されたエラージェネレータと、
を備え、
前記フローインジケータジェネレータは、前記リングバッファに前記データワードとともに格納されるフロー方向インジケータ値を生成するように構成され、該フロー方向インジケータ値は、フローエラーがオーバーフローであるか、またはアンダーフローであるかを判定することを容易にする情報を含み、
前記比較機構は、前記リングバッファから読み出された前記項目からのフロー方向インジケータ値を前記予想されたフローインジケータ値と比較し、フローエラーがオーバーフローであるか、または、アンダーフローであるかを判定するように構成される、
コンピュータシステム。
【発明の詳細な説明】
【０００１】
（発明の分野）
本発明はデジタルデータの通信に関する。より詳細には、本発明は、リングバッファ内部のアンダーフロー状態またはオーバーフロー状態を検出するための方法と装置に関する。
【０００２】
（関連技術）
コンピュータシステム内のデータの転送速度が増加し続けるにつれて、コンピュータシステムのコンポーネント間でのデータの送信および受信を調整することは、より困難になる。データは、データが送信および受信されたとき、コントロールされるために使用されるグローバルなクロック信号のコントロール下で、コンピュータシステムコンポーネント間を典型的に転送される。
【０００３】
クロック周波数がより早いデータの転送速度を提供するように増加するにつれて、クロックスキューは、顕著な問題になり得る。クロックスキューにより、グローバルなクロック信号は、異なる時間および予測できない時間で様々なコンピュータシステムのコンポーネントに到達するようになる。従って、第２のコンポーネントにデータを送信する第１のコンポーネントは、データが第２のコンポーネントによってラッチされると確実とはなり得ない。クロックスキューは、異なるモジュールまたは異なるチップ上で配置されたコンピュータシステムのコンポーネント間で特に顕著である。
【０００４】
コンピュータシステムのコンポーネント間でデータを転送することに関係するいくつかの通信の問題を改善するための一つの方法は、リングバッファとしてインプリメントされるＦＩＦＯを使用してコンピュータシステムのコンポーネント間でバッファデータを転送することである。リングバッファは、データ項目のアレイならびに読み出しポインターおよび書き込みポインターを典型的に含む。データがリングバッファに到達すると、データは、アレイを経て進むように書き込みポインターを使用してリングバッファ内に格納され、アレイ中の連続したロケーションの中に連続したデータアイテムを格納する。書き込みポインターがアレイの末端に到達すると、書き込みポインターは冒頭にラップアラウンド（ｗｒａｐ  ａｒｏｕｎｄ）する。受信側において、読み出しポインターは、アレイからの連続したデータアイテムを読み出すために使用される。
【０００５】
残念なことに、リングバッファは、オーバーフローエラーおよびアンダーフローエラーになる傾向になり得る。オーバーフローエラーは、アレイが一杯になり、書き込みポインターが読み出しポインターを経て進んだときに起こり、データが読み出され得る前に上書きされる。アンダーフローエラーは、アレイが空になり読み出しポインターが書き込みポインターを経て進み、書き込まれる前に項目を読み出すときに起こる。
【０００６】
フローエラー（例として、アンダーフローエラーまたはオーバーフローエラー）は、データを受信するときにデータを調べることによって典型的に検出されることができない。従来のエラー検出およびエラー修正の技術（例えば、エラー修正コードおよびエラー検出コード）は、データワード中の１以上のビットがデータ転送の間に変更されると、検出され得る。しかし、それらのエラーは、全体のデータワードがオーバーフローエラーまたはアンダーフローエラーの結果として置換されると、検出できない。
【０００７】
特に汎用性のあるインプリメンテーションにおいて、書き込みポインターロジックは、遠隔源から達するデータに関連したクロックを使用し、一方で読み出しポインターロジックは、ローカルクロックを使用する。複数のクロックの使用は、フローエラーの検出を特に困難にさせる。
【０００８】
必要とされることは、データ転送プロセスの終わりで受信されるデータを調べることによって、オーバーフローエラーおよびアンダーフローエラーを検出することを可能にする方法および装置である。
【０００９】
（要旨）
本発明の一つの実施形態は、リングバッファ内で発生するアンダーフローエラーおよびオーバーフローエラーを検出するためのシステムを提供する。そのシステムがリングバッファを経て転送されるべきデータワードを受信すると、システムはリングバッファ内にデータワードと一緒に格納されるフローインジケータ値を生成する。このフローインジケータ値は、リングバッファから読み出している間にアンダーフローが起こるかどうか、またはリングバッファに書き込んでいる間にオーバーフローが起こるかどうかを判定することを容易にする情報を含む。次に、このシステムは、リングバッファ内の項目の中にフローインジケータ値とともにデータワードを書き込む。その後になって、このシステムはリングバッファからの項目を読み出し、予想されたフローインジケータ値を生成する。このシステムは、リングバッファから読み出されたフローインジケータ値と予想されたフローインジケータ値とを比較する。フローインジケータ値が予想されたフローインジケータ値と異なる場合、システムは、アンダーフローまたはオーバーフローが起きたことを示すエラー信号を生成する。
【００１０】
本発明の一つの実施形態において、フローインジケータ値は周期的に変化し、その結果予測可能な異なるフローインジケータ値は、項目への連続した書き込み動作の際にリングバッファ内の項目の中へ書き込まれる。この予測可能な異なるフローインジケータ値は、フローインジケータ値と予想されたフローインジケータ値とを比較することによって、システムがアンダーフロー状態、またはオーバーフロー状態を検出することを可能にする。リングバッファから読み出されたフローインジケータ値が予想されたフローインジケータ値と異なる場合、アンダーフロー状態またはオーバーフロー状態が起きている。
【００１１】
本発明の一つの実施形態において、フローインジケータ値は、リングバッファに関する書き込みポインターが最大値に達する毎に変化するシングルビットを含んでいる。
【００１２】
本発明の一つの実施形態において、フローインジケータ値は、データワードのパリティビット内部で偶数パリティと奇数パリティとの間を変化するように符号化される。
【００１３】
本発明の一つの実施形態において、リングバッファは奇数サイズであり、フローインジケータ値は、連続した書き込み動作において０と１との間を交互にとるシングルビットである。
【００１４】
本発明の一つの実施形態において、フローインジケータ値は、データワード中のパリティビットの偶数パリティと奇数パリティとの間を変化するように符号化される。さらに、リングバッファは奇数サイズであり、パリティビットは、連続した書き込み動作において偶数パリティと奇数パリティとの間を交互にとる。
【００１５】
本発明の一つの実施形態において、フローインジケータ値は、アンダーフローエラーをオーバーフローエラーと識別することを可能にするフロー方向インジケータをさらに包含する。
【００１６】
（詳細な説明）
以下の説明は、当業者が本発明を為し、使用することが可能なように提供され、そして特定の用途および要件のコンテキストにおいて提供される。開示された実施形態の様々な改変は、当業者にとって容易に明らかとなり、本明細書中で規定される一般的な原理は、本発明の意図および範囲から逸脱することなく、他の実施形態および用途に適用され得る。従って、本発明は、示される実施形態に限定されることを意図しないが、本明細書中で開示される原理および特徴と一致する最も広い範囲に認められる。
【００１７】
（コンピュータシステム）
図１は、本発明の実施形態によるコンピュータシステム１００を示す。コンピュータシステム１００は、多くのコンポーネントを含んでおり、プロセッサー１２０、メモリ１３０、およびデバイス１４０を含んでいる。
【００１８】
プロセッサー１２０は、コードおよび／またはデータを処理できるあらゆるタイプの演算デバイスを含み得る。限定されないが、これは、メインフレームプロセッサー、マルチプロセッサーシステム、マイクロプロセッサー、デバイスコントローラ、および電気製品内部の演算ユニットを含んでいる。プロセッサー１２０は、他のコンピュータシステムのコンポーネントからのデータ１０４を受信するインプットポート１２２を含む。リングバッファ１０８内でデータ１０４は、データ１０５に変換される。これは、受信クロック信号１１０の制御下で作動するインプットポート１２２から内部のプロセッサー回路部１１２へ転送される。
【００１９】
入力ポート１２２はリングバッファ１０８を含み、これは、データ１０４がデバイス１４０から内部のプロセッサー回路部１１２へ転送される際にデータ１０４をバッファリングするためのものである。データ１０４は、送信クロック信号１０６を使用してデバイス１４０からリングバッファ１０８へクロック（ｃｌｏｃｋ）される。データ１０５は、受信クロック信号１１０を使用してリングバッファ１０８の外部にクロック（ｃｌｏｃｋ）される。リングバッファ１０８は、本発明の実施形態に従って、フローエラーを検出するための特別な回路部を含んでいることに留意されたい。
【００２０】
このフローエラーの検出回路部が、プロセッサーだけでなく、転送データに関与するあらゆるタイプのデバイスとともに一般に使用され得ることにも留意されたい。例えば、フローエラーの検出回路部は、デジタルシステム内部のＩ／Ｏデバイス、メモリデバイスまたは切り換えデバイスで使用され得る。
【００２１】
メモリ１３０は、プロセッサー１２０による実行のためのコードおよび／またはデータを格納するために使用され得るあらゆるタイプのランダムアクセスメモリを含む。
【００２２】
デバイス１４０は、プロセッサー１２０にデータを転送するコンピュータシステム１００内部のあらゆるタイプのデバイスを含み得る。これは、限定されないが、周辺機器デバイス、オフチップキャッシュ、別のメモリおよび別のプロセッサーを含む。デバイス１４０は、リングバッファ１０８の中へデータ１０４を転送する遠隔送信器１０２を含む。デバイス１４０は、プロセッサー１２０とは別個のモジュールまたは別個のチップ上に設置され得る。あるいは、デバイス１４０は、プロセッサー１２０と同じチップ上に設置され得る。記述される実施形態において、デバイス１４０は、コンピュータシステム１００の内部に設置される。別の実施形態において、デバイス１４０は、コンピュータシステム１００に対して外部に設置される。
【００２３】
本発明は、コンピュータシステム内部のリングバッファに限定されないことに留意されたい。一般に、本発明は、例えばデジタル通信網を含む、リングバッファを使用するデータを転送するためのあらゆるシステムに適用され得る。
【００２４】
（リングバッファの第１の実施形態）
図２は、本発明の第１の実施形態によるリングバッファ１０８と関連した回路部を示している。本実施形態において、リングバッファ１０８は、０、１、２、３、４、５、６、７、および８と名付けられたの９つの項目を含む。各々の項目は、フローインジケータビットおよびデータワードを含む。より詳細には、項目０は、フローインジケータビット２２０およびデータワード２１０を含む。項目１は、フローインジケータビット２２１およびデータワード２１１を含む。項目２は、フローインジケータビット２２２およびデータワード２１２を含む。項目３は、フローインジケータビット２２３およびデータワード２１３を含む。項目４は、フローインジケータビット２２４およびデータワード２１４を含む。項目５は、フローインジケータビット２２５およびデータワード２１５を含む。項目６は、フローインジケータビット２２６およびデータワード２１６を含む。項目７は、フローインジケータビット２２７およびデータワード２１７を含む。項目８は、フローインジケータビット２２８およびデータワード２１８を含む。
【００２５】
リングバッファ１０８は、書き込みカウンター２３０および読み出しカウンター２４０（これらは、読み出しポインターおよび書き込みポインターとも呼ばれ得る）と関連している。書き込みカウンター２３０は、リングバッファ１０８内へ書き込むためにその次の項目を表す値（０から８まで）を含む。読み出しカウンター２４０は、リングバッファ１０８内から読み出すためにその次の項目を表す同様の値（０から８まで）を含む。
【００２６】
書き込みカウンター２３０のコンテンツは、比較回路２３２を通って進行し、比較回路２３２は、書き込みカウンター２３０が最大値８に達しているかどうかを確認するために試験を行う。最大値８に達していれば、比較回路２３２は、トグルフリップフロップ２３４のトグル入力中へ進行する１の値を生成する。これにより、トグルフリップフロップ２３４は状態を変化させる。トグルフリップフロップ２３４のコンテンツは、書き込み動作の間、対応するデータワードとともに、リングバッファ１０８へ書き込まれることに留意されたい。書き込みカウンター２３０およびトグルフリップフロップ２３４は、送信クロック信号１０６の制御下で動作することにも留意されたい。リングバッファ１０８の左側にある回路部は、リングバッファ１０８を書き込みポインター２３０が循環するとき交互に、フローインジケータビット２２０〜２２８の中へ連続的に０を書き込み、次いで、フローインジケータビット２２０〜２２８の中へ連続的に１を書き込む。
【００２７】
読み出しカウンター２４０のコンテンツは、比較回路２４２を通って入力し、比較回路２４２は、読み出しカウンター２４０が最大値８に達しているかどうかを確認するために試験を行う。最大値８に達していれば、比較回路２４２は、トグルフリップフロップ２４４のトグル入力中へ進行する１の値を生成する。これにより、トグルフリップフロップ２４４はその状態を変化させる。読み出しカウンター２４０およびトグルフリップフロップ２４４の両方とも受信クロック１１０の制御下で動作する。
【００２８】
リングバッファ１０８の左側にある回路部は、読み出しカウンター２４０がリングバッファ１０８を介して走査するとき、連続的に０を生成し、次いで、リングバッファ１０８を通る次のパスの間に連続的に１を生成する。
【００２９】
トグルフリップフロップ２４４のコンテンツは、フローエラー信号２４８を生成するために、排他的ＯＲゲート２４６を使用してリングバッファ１０８から読み出されるフローインジケータビットと比較される。リングバッファ１０８から読み出されたフローインジケータビットが、トグルフリップフロップ２４４に格納された予想されたフローインジケータビットと一致する場合、フローエラー信号２４８は０の値を想定する。そうでなければ、フローエラー信号２４８は１の値を想定する。
【００３０】
リングバッファ１０８から読み出されたフローインジケータビットがトグルフリップフロップ２４４に格納された予想されたフローインジケータビットと一致しない場合、リングバッファ１０８から読み出されたフローインジケータビットが、リングバッファ１０８にわたる書き込みカウンター２３０による前の循環、または次の循環のどちらかで書き込まれたということを示している。従って、アンダ−フローまたはオーバーフローが生じている。
【００３１】
（リングバッファの第２の実施形態）
図３は、本発明の第２の実施形態によるリングバッファ１０８と関連した回路部を示している。この第２の実施形態は、図１で示された第１の実施形態と本質的に同じ態様で動作する。唯一の違いは、フローインジケータビットがリングバッファ２３８の各々の項目と関連するパリティビット内部に符号化されることである。従って、リングバッファ１０８の各々の項目は、（符号化されたフロー情報を有する）パリティビット、およびデータワードを含む。より詳細には、項目０は、パリティビット３２０およびデータワード２１０を含む。項目１は、パリティビット３２１およびデータワード２１１を含む。項目２は、パリティビット３２２およびデータワード２１２を含む。項目３は、パリティビット３２３およびデータワード２１３を含む。項目４は、パリティビット３２４およびデータワード２１４を含む。項目５は、パリティビット３２５およびデータワード２１５を含む。項目６は、パリティビット３２６およびデータワード２１６を含む。項目７は、パリティビット３２７およびデータワード２１７を含む。項目８は、パリティビット３２８およびデータワード２１８を含む。
【００３２】
図２に示された第１の実施形態のように、リングバッファ１０８は、送信クロック信号１０６の制御下で動作する書き込みカウンター２３０を含む。送信クロック信号１０６もまた、トグルフリップフロップ３０４のクロック入力中へ進行する。トグルフリップフロップ３０４のトグル入力は１の値に拘束され、トグルフリップフロップ３０４は、送信クロック信号１０６がクロック循環を介して前進する毎に状態を変化させる。従って、トグルフリップフロップ３０４は、０および１の値を交互に生成する。
【００３３】
トグルフリップフロップ３０４の出力は、パリティ生成回路３０２の偶数／奇数制御の入力へ進行する。パリティ生成回路３０２は、データ１０４からデータワードを受信し、データワードに付随するパリティビットを作成する。このパリティビットは、偶数パリティまたは奇数パリティのどちらか一方を作成し得る。偶数パリティの場合、パリティビットを加えたデータワード中に偶数の１がある。奇数パリティの場合、パリティビットを加えたデータワード中に奇数の１がある。この偶数または奇数の選択は、パリティ生成回路３０２の偶数／奇数制御の入力によって選択される。書き込み制御の間、パリティ生成回路３０２によって生成されたパリティビットは、リングバッファ１０８に付随するデータワードとともに記録される。
【００３４】
トグルフリップフロップ３０４のコンテンツが、偶数パリティと奇数パリティとの間で交互になるとき、パリティ生成回路３０２によって生成したパリティビットの方向性は、偶数パリティと奇数パリティとの間で交互になることに留意されたい。従って、リングバッファ１０８に格納される交互のパリティビットは、偶数パリティおよび奇数パリティを有する。リングバッファ１０８内の項目の数が奇数なので、リングバッファ１０８の個々のパリティビットの方向性は、書き込みカウンター２３０がリングバッファ１０８を通って連続的に進行するときに偶数と奇数との間を循環する。例えば、リングバッファ１０８を介した第１通過に関して、パリティビット｛３２０、３２１、３２２、３２３、３２４、３２５、３２６、３２７、および３２８｝は、以下の方向性パターン｛偶数、奇数、偶数、奇数、偶数、奇数、偶数、奇数、偶数｝を有する。リングバッファ１０８を介する書き込みカウンター２３０による第２の通過に関して、パリティビットは、逆のパターン｛奇数、偶数、奇数、偶数、奇数、偶数、奇数、偶数、奇数｝を有する。これは、図３で示された回路部が第１の通過で書かれたパリティビットと第２の通過で同じ位置に書かれたパリティビットとを区別することを可能にする。これは、オーバーフローエラーおよびアンダーフローエラーを検出することを可能にする。エラー検出の目的で、連続したパリティの変化が、バッファの全ての単一データワードの中へ格納する回路が適している。
【００３５】
図２にあるように、リングバッファ１０８はまた、受信クロック信号１１０の制御下で動作する読み出しカウンター２４０を含む。さらに受信クロック信号１１０は、トグルフリップフロップ３１２のクロック入力へ進む。トグルフリップフロップ３１２のトグル入力は１の値に拘束され、トグルフリップフロップ３１２は、受信クロック信号１１０がクロック循環を介して前進する毎に状態を変化させる。従って、トグルフリップフロップ３１２は、０および１の値を交互に生成する。
【００３６】
トグルフリップフロップ３１２の出力は、パリティ生成回路３１０の偶数／奇数の制御の入力へ進行する。パリティ生成回路３１０は、リングバッファ１０８からデータワードを受信し、予想されたパリティビットを生成する。この予想されたパリティビットは、フローエラー信号３１８を生成するために排他的ＯＲゲート３１６を使用してリングバッファ１０８の対応する項目から読み出されるパリティビットに対して比較される。リングバッファ１０８から読み出されたパリティビットが、パリティ生成回路３１０によって生成された予想されたパリティビットと一致する場合、フローエラー信号３１８は、０の値を想定する。さもなければ、フローエラー信号３１８は、１の値を想定する。
【００３７】
リングバッファ１０８から読み出されたフローインジケータビットが、予想されたフローインジケータビットに一致しない場合、これは、リングバッファ１０８から読み出されたフローインジケータビットが書き込みカウンター２３０によるリングバッファ１０８を介して、前の循環または次の循環のどちらか一方に書き込まれたことを表す。または、読み出されたデータのパリティが書き込まれたデータのパリティと同じでないということを表す。従って、アンダーフロー、オーバーフロー、またはデータ格納のエラーが起こる。これらのエラーの二つ以上が同時に起こることはあまりない。
【００３８】
図３で示される本発明の一つの実施形態において、パリティ生成回路３０２およびトグルフリップフロップ３０４は、送信器（例えば図１の遠隔送信器１０２）と一体化されることに留意されたい。この実施形態において、パリティ生成回路３０２の出力は、送信器と受信器との間を転送される。これは、シングル信号が通信エラーおよびフローエラーをともに検出するために使用されることを可能にする。本発明の別の実施形態において、パリティ生成回路３０２およびトグルフリップフロップ３０４は受信器と一体化される。この場合、パリティ信号は、遠隔送信器１０２および入力ポート１２２の間を送信されない。
【００３９】
（リングバッファの第３の実施形態）
図４は、本発明の第３の実施形態によるリングバッファ１０８に関連した回路部を示す。この第３の実施形態において、追加した回路部は、アンダーフローエラーおよびオーバーフローエラーを区別するために図２で示された回路部に追加される。
【００４０】
追加したフロー方向インジケータビット４２０〜４２８は、リングバッファ１０８の項目に追加される。より詳細には、フロー方向インジケータビット４２０は項目０に追加され、フロー方向インジケータビット４２１は項目１に追加され、フロー方向インジケータビット４２２は項目２に追加され、フロー方向インジケータビット４２３は項目３に追加され、フロー方向インジケータビット４２４は項目４に追加され、フロー方向インジケータビット４２５は項目５に追加され、フロー方向インジケータビット４２６は項目６に追加され、フロー方向インジケータビット４２７は項目７に追加され、およびフロー方向インジケータビット４２８は項目８に追加される。
【００４１】
トグルフリップフロップ４０４は、ＡＮＤゲート４０３の出力からの入力を受信する。ＡＮＤゲート４０３は、比較回路２３２の出力からの入力、およびトグルフリップフロップ２３４の出力からの別の入力を受信する。書き込み動作の間、トグルフリップフロップ４０４の出力は、対応するデータワードおよびフローインジケータビットとともにリングバッファ１０８の項目中へ書き込まれる。
【００４２】
リングバッファ１０８の右側で、トグルフリップフロップ４０８は、ＡＮＤゲート４０７の出力からの入力を受信する。ＡＮＤゲート４０７は、比較回路２４２の出力からの入力、およびトグルフリップフロップ２４４の出力からの別の入力を受信する。予想されたフロー方向インジケータ４０９、予想されたフローインジケータ２４５、および観測されたフロー方向インジケータ４２９は、アンダーフロー信号４１２を生成するためにＸＯＲゲート４１４および４１０を介してゲート制御（ｇａｔｅ）される。
【００４３】
図４で示される回路部の演算に隠された論理は、図７Ａおよび図７Ｂを参照することで説明され得る。図７Ａにおいて、フロー方向ビットは、比較回路２３２の出力が１であり、かつトグルフリップフロップ４０４の出力が１であるときに変化することに留意されたい。従って、フロー方向インジケータビットは、フローインジケータビットが変化するとき１回おきに変化する。このことは、エラーがオーバーフローかどうかを排他的ＯＲゲート４１０が判定することを可能にする。
【００４４】
図７Ｂは、検査によって図７Ａから抽出される。図７Ａにおいて、項目Ｂがリングバッファ１０８のロケーション７で予測される場合に、項目Ａが観測されるとき、次いでロケーション７で予測される項目は、まだ書き込まれていない。これは、アンダーフローの事象の定義である。一方、項目Ｃがリングバッファ１０８のロケーション７で観測される場合、その予測された項目は、新しい項目によってすでに上書きされている。これは、オーバーフローの事象の定義である。図７Ｂのそれぞれの線は、図７Ａからのこの検査プロセスによって抽出される。
【００４５】
図７Ｂを参照して、予想されたフローインジケータおよびフロー方向インジケータビットが実際に認識されるビットと同じ場合、システムはエラーなしで機能する。これは、システムは“ＯＫ”であることを意味する。図７Ｂは、演算“（予想されたフローインジケータ）ＸＯＲ（予想されたフロー方向インジケータ）ＸＯＲ（観測フロー方向インジケータ）”の値に対するカラムを含む。予想されたフローインジケータが観測フローインジケータと異なる場合にアンダーフロー状態を表すことは、図７Ｂから認識され得る。予想されたフローインジケータおよび観測フローインジケータが異なる場合、ならびにこの演算が値０を生成する場合、エラーはオーバーフローである。多くの組み合わせは、“ストレンジ（ＳＴＲＡＮＧＥ）”の意味を有するように記されることに留意されたい。これは、これらのエラーのタイプがシステム動作の間に起こるべきではないことを表し、エラーが起こる場合、そのエラーがオーバーフロー、アンダーフロー、または他のタイプのエラーを含んでいるかどうかは明らかでない。
【００４６】
（書き込み機構の動作）
図５Ａは、本発明の第１実施形態によるリングバッファ１０８へ書き込む機構の動作を示すフローチャートである。そのシステムは、最初にフローインジケータ値および書き込みカウンター２３０を初期化する（ステップ５０２）。これらの値が初期化された後、このシステムは、リングバッファ１０８へ書き込む時間まで待機するループに入る（ステップ５０５）。リングバッファ１０８へ書き込む時間になると、このシステムは、書き込みカウンター２３０によって示されたリングバッファ１０８内部の項目にデータワードおよびフローインジケータ値を書き込む（ステップ５０６）。次に、このシステムは、書き込みカウンター２３０をインクリメントし（ステップ５０８）、値が最大値８に等しいかどうかを認識するために書き込みカウンター２３０をテストする（ステップ５１０）。値が最大値８に等しい場合、このシステムは、フローインジケータ値を変化させ（ステップ５１０）、次のデータワードに関するプロセスを繰り返すようにステップ５０５へ戻る。値が最大値８に等しくない場合、このシステムはステップ５０５へ直接戻る。
【００４７】
（読み出し機構の動作）
図５Ｂは、本発明の第１実施形態によるリングバッファ１０８から読み出す機構の動作を示すフローチャートである。そのシステムは、最初にフローインジケータ値および読み出しカウンター２４０を初期化する（ステップ５２２）。これらの値が初期化された後、このシステムは、リングバッファ１０８から読み出す時間まで待機するループに入る（ステップ５２６）。リングバッファ１０８から読み出される時間になると、システムは、読み出しカウンター２４０によって示されたリングバッファ１０８内部の項目からデータワード、および対応したフローインジケータ値を読み出す（ステップ５２８）。次に、システムは、リングバッファ１０８から読み出されたフローインジケータ値が予想されたフローインジケータ値と一致しているかどうかを判定する（ステップ５３０）。一致しない場合、システムはエラー信号を生成する（ステップ５３１）。
【００４８】
一致する場合、システムは、読み出しカウンター２４０をインクリメントし（ステップ５３２）、最大値８に等しいかどうかを認識するために読み出しカウンター２４０をテストする（ステップ５３３）。最大値８に等しい場合、システムは、フローインジケータ値を変化させ（ステップ５３４）、次のデータワードへのプロセスを繰り返すためにステップ５２６に戻る。最大値８に等しくない場合、システムは直接ステップ５２６に戻る。
（エラーフリー動作の例）
図６Ａは、本発明の第１実施形態によるリングバッファ１０８のエラーフリー動作を示している。図６Ａにおいて、時間は左から右へと進み、列は時間が異なる点での様々な量の状態を示している。
【００４９】
図６Ａに見られ得るように、リングバッファ１０８に書き込まれたフローインジケータ値は、書き込みカウンター２３０がリングバッファ１０８を介して循環し終えると０と１との間を交互にとる。読み出しカウンター２４０は、リングバッファ１０８の同じ項目を介して循環するので、予想されたフローインジケータは、リングバッファ１０８から読み出されたフローインジケータ値と同じ値を有する。従って、フローエラー信号２４８は決してアサートされない。
【００５０】
（オーバーフローの例）
図６Ｂは、本発明の第１実施形態によるリングバッファ１０８のオーバーフロー状態の検出を示している。この例において、読み出しプロセスは、書き込みプロセスの半分の速度で生ずる。読み出しカウンター２４０が項目６に初めて遭遇すると、書き込みカウンターは、項目６のフローインジケータ値の１を書き込むために２度リングバッファ１０８を循環することに留意されたい。これは、リングバッファ１０８から読み出されたフローインジケータ値を予想されたフローインジケータ値と一致させない。従って、フローエラー信号が生成される。
【００５１】
（アンダーフローの例）
図６Ｃは、本発明の第１実施形態によるリングバッファのアンダーフロー状態の検出を図示している。この例において、書き込みプロセスは、読み出しプロセスの半分の速度で生ずる。従って、読み出しプロセスが項目４を得ると、それは、書き込みプロセスによる前の循環から継続されるフローインジケータ値の１を読み出す。これは、リングバッファ１０８から読み出されたフローインジケータ値を予想されたフローインジケータ値と一致させない。従って、フローエラー信号が生成される。このフローエラー信号は、システムによってラッチされ、その後リセットされるまで持続される。
【００５２】
発明の実施形態の前述した記述は、図および説明のみの目的で提示される。それらは、網羅すること、または、開示された形式に本発明を限定することを意図しない。従って、多くの変更および改変は、当業者にとって明白である。さらに、上記の開示は、発明を限定することを意図していない。発明の範囲は、添付の特許請求の範囲によって規定される。
【図面の簡単な説明】
【図１】  図１は、本発明の実施形態によるコンピュータシステムを示す。
【図２】  図２は、本発明の第１実施形態によるリングバッファに関連する回路部を示す。
【図３】  図３は、本発明の第２実施形態によるリングバッファに関連する回路部を示す。
【図４】  図４は、本発明の第３実施形態によるリングバッファに関連する回路部を示す。
【図５Ａ】  図５Ａは、本発明の実施形態によるリングバッファ内へ書き込む機構の動作を示すフローチャートである。
【図５Ｂ】  図５Ｂは、本発明の実施形態によるリングバッファから読み出す機構の動作を示すフローチャートである。
【図６Ａ】  図６Ａは、本発明の実施形態によるリングバッファのエラーフリー動作を示す。
【図６Ｂ】  図６Ｂは、本発明の実施形態によるリングバッファのオーバーフロー状態の検出を示す。
【図６Ｃ】  図６Ｃは、本発明の実施形態によるリングバッファのアンダーフロー状態の検出を示す。
【図７Ａ】  図７Ａは、本発明の実施形態による図４で示された回路部の演算に隠された論理を示す表である。
【図７Ｂ】  図７Ｂは、本発明の実施形態による図４で示された回路部の演算に隠された論理を示す表である。
【図１】
0004664559.tif 000002
【図２】
0004664559.tif 000003
【図３】
0004664559.tif 000004
【図４】
0004664559.tif 000005
【図５Ａ】
0004664559.tif 000006
【図５Ｂ】
0004664559.tif 000007
【図６Ａ】
0004664559.tif 000008
【図６Ｂ】
0004664559.tif 000009
【図６Ｃ】
0004664559.tif 000010
【図７Ａ】
0004664559.tif 000011
【図７Ｂ】
0004664559.tif 000012