(57)【特許請求の範囲】
【請求項１】
第１のクロックに同期する第１の回路と第２のクロックに同期する第２の回路との間に挿入され、第１の回路と第２の回路との間でデータを転送するインタフェース回路であって、
（ａ）第１の回路から第２の回路へデータを転送するための複数の記憶位置を有する第１のバッファであって、第１の回路が第１のバッファ自体中の書込みポインタが指す記憶位置に書込みを行い、第２の回路が第１のバッファ自体中の読取りポインタが指す記憶位置から読取りを行う第１のバッファと、
（ｂ）第１のバッファに対する書込みと読取りを同期させるために第１のバッファに結合された第１の同期手段と、
（ｃ）第２のクロックのあらゆるサイクルに、第１のバッファにいくつの空記憶位置があるかを動的に判定し、第１のバッファが所定数の空記憶位置を有するときに第１の回路にバス要求イネーブル信号を与えるために前記第１の同期手段に結合された空位置判定手段と、
（ｄ）いくつの記憶位置にデータが書き込まれているかを動的に判定し、第２のクロックのあらゆるサイクルに、第１のバッファのフルネス度を示す複数のフラグを提供するために前記第１の同期手段に結合された満杯位置判定手段と
を備えることを特徴とするインタフェース回路。
【請求項２】
（ａ）第２の回路から第１の回路へデータを転送するための複数の記憶位置を有する第２のバッファであって、第２の回路が、第２のバッファ自体中の書込みポインタが指す記憶位置に書込みを行い、第１の回路が、第２のバッファ自体中の読取りポインタが指す記憶位置から読取りを行う第２のバッファと、
（ｂ）第２のバッファに対する書込みと読取りを同期させるために第２のバッファに結合された第２の同期手段と、
（ｃ）第２のクロックのあらゆるサイクルに、第２のバッファ中のいくつの記憶位置にデータが書き込まれているかを動的に判定し、第２のバッファが、有効なデータを含む所定数の記憶位置を有するときに第１の回路にバス要求イネーブル信号を提供するために前記第２の同期手段に結合された満杯位置判定手段と、（ｄ）第２のバッファ中のいくつの記憶位置が空であるかを動的に判定し、第２のクロックのあらゆるサイクルに、第２のバッファのエンプティネス度を示す複数のフラグを提供するために第２の同期手段に結合された空位置判定手段と
を備えることを特徴とする請求項１に記載のインタフェース回路。
【請求項３】
空位置判定手段がさらに、
（ａ）読取りポインタと書込みポインタとを比較する手段と、
（ｂ）読取りポインタと書込みポインタとが等価であるか否かを判定する手段と、
（ｃ）第２のクロックのあらゆるクロックに、第２のバッファ中の空記憶位置の数を動的に判定する手段と
を備える請求項２に記載のインタフェース回路。
【請求項４】
コンピュータ・システムであって、
第１のクロックに同期するホスト・プロセッサと、
ホスト・プロセッサに結合されたメモリと、
ホスト・プロセッサに結合されたシステム・バスと、
ネットワーク通信を可能にするために、第２のクロックに同期し、かつシステム・バスに結合されたネットワーク・カードと、
システム・バスと前記ネットワーク・カードとの間でデータを転送するためにシステム・バスおよび前記ネットワーク・カードに結合されたインタフェース回路と
を備え、
（ａ）第１の回路から第２の回路へデータを転送するための複数の記憶位置を有する第１のバッファであって、第１の回路が、第１のバッファ自体中の書込みポインタが指す記憶位置に書込みを行い、第２の回路が、第１のバッファ自体中の読取りポインタが指す記憶位置から読取りを行う第１のバッファと、
（ｂ）第１のバッファに対する書込みと読取りを同期させるために第１のバッファに結合された第１の同期手段と、
（ｃ）第２のクロックのあらゆるサイクルに、第１のバッファにいくつの空記憶位置があるかを動的に判定し、第１のバッファが所定数の空記憶位置を有するときに第１の回路にバス要求イネーブル信号を提供するために前記第１の同期手段に結合された空位置判定手段と、
（ｄ）いくつの記憶位置にデータが書き込まれているかを動的に判定し、第２のクロックのあらゆるサイクルに、第１のバッファのフルネス度を示す複数のフラグを提供するために前記第１の同期手段に結合された満杯位置判定手段と
を備えることを特徴とするコンピュータ・システム。
【請求項５】
（ａ）第２の回路から第１の回路へデータを転送するための複数の記憶位置を有する第２のバッファであって、第２の回路が、第２のバッファ自体中の書込みポインタが指す記憶位置に書込みを行い、第１の回路が、第２のバッファ自体中の読取りポインタが指す記憶位置から読取りを行う第２のバッファと、
（ｂ）第２のバッファに対する書込みと読取りを同期させるために第２のバッファに結合された第２の同期手段と、
（ｃ）第２のクロックのあらゆるサイクルに、第２のバッファ中のいくつの記憶位置にデータが書き込まれているかを動的に判定し、第２のバッファが、有効なデータを含む所定数の記憶位置を有するときに第１の回路にバス要求イネーブル信号を提供するために前記第２の同期手段に結合された満杯位置判定手段と、
（ｄ）第２のバッファ中のいくつの記憶位置が空であるかを動的に判定し、第２のクロックのあらゆるサイクルに、第２のバッファのエンプティネス度を示す複数のフラグを提供するために第２の同期手段に結合された空位置判定手段と
を備えることを特徴とする請求項４に記載のコンピュータ・システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、先入れ先出し（ＦＩＦＯ）バッファの分野に関し、詳細には、２つの非同期クロック・ドメイン間の境界を横切る情報を同時に同期させ、あらゆるクロック・サイクルに一方のクロック・ドメインにＦＩＦＯフルネス(fullness)度の表示を与え、あらゆるクロック・サイクルに、ＦＩＦＯがデータを受け入れ、あるいは供給する準備が完了したことを示す他方のクロック・ドメインに対するフラグを与える方法および装置に関する。
【０００２】
【従来の技術】
図１は、あるクロック・ドメインと他のクロック・ドメインとの間でデータを転送する従来技術の手法を示す図である。ブロック＿Ａ３は、クロック・ドメインＡの回路を表す（たとえば、ブロック＿Ａ３の信号はクロック＿Ａ５に同期し、クロック＿Ａ５の立上りで信頼できるデータを有する）。同様に、ブロック＿Ｂ７は、クロック＿Ｂ９に同期する回路および信号を表す。クロック・ドメインＡとクロック・ドメインＢとの間にＦＩＦＯ１１が配置される。この場合、データはＦＩＦＯ１１を通じてブロック＿Ａ３からブロック＿Ｂ７へ転送される。論理機構１３は、ＦＩＦＯに関連付けられており、ＦＩＦＯ１１が満杯であることを論理ブロック＿Ａ３に示す。関連するこのＦＩＦＯ論理機構１３はまた、ＦＩＦＯ１１が空であることをブロック＿Ｂ７に示す。
【０００３】
ＦＩＦＯ１１が満杯である場合、ブロック＿Ａ３の回路はブロック＿Ａ３からＦＩＦＯ１１へのデータの転送を停止し、有効なデータの上書きを防止する。満杯表示１５に対して、ブロック＿Ｂ７の回路は、ブロック＿Ｂ７へのデータの転送を開始し、空信号１７がアサートされ、ブロック＿Ｂ７によって受け取られるまで転送を継続する。ブロック＿Ｂ７は、空信号１７に対してＦＩＦＯ１１からのデータの読取りを停止し、無効なデータ（たとえば、古いデータ）を読み取らないようにする。
【０００４】
従来技術のこのシステムでは、クロック・ドメインＡ中の論理機構が、空信号１７を受け取るまでＦＩＦＯへの書込みを開始しないことは明白である。同様に、クロック・ドメインＢ中の論理機構は、満杯標識１５を受け取るまでＦＩＦＯ１１から読取りを行わない。したがって、クロック・ドメインＡ中の論理機構が、書込みを行う前にＦＩＦＯ１１が完全に空になるのを待つ待ち時間と、クロック・ドメインＢ中の論理機構が、ＦＩＦＯ１１の内容を読み取る前にＦＩＦＯ１１が完全に満杯になるのを待つ他の待ち時間がある。
【０００５】
従来技術のこの手法は、両方のクロック・ドメインが比較的低速であり、あるいは両方のクロック・ドメインが同様に高速であるときには十分である。この従来技術は、ＦＩＦＯの読取りと書込みを同時に行うことが重要でないときには十分である。言い換えれば、低スループットのシステムでは、この手法は十分である。しかし、ＡＴＭがＳバスよりもずっと高速にクロッキングされるＳバスＡＴＭ（非同期転送モード）システムでは、従来技術の方法はもはや十分ではない。Ｓバス性能を高めてＡＴＭの要件を満たすには、あらゆるクロック・サイクルを利用する必要がある。さらに、クロック・ドメインＢ（Ｓバス側）中の論理機構が高速ターンアラウンド（たとえば、平均負荷Ｓバス３２ビット３２バイト・システムで毎秒１５５メガバイト（Ｍｂｐｓ）デュプレックスを必要とするＡＴＭプロトコル）を必要とするとき、従来技術のこの手法は不適切なものとなる。高速ネットワーク・システムでは、スループットを最大にして、ＦＩＦＯが１００％満杯または空になるのを待たずにＦＩＦＯとの間のデータの転送を開始する必要がある。したがって、特にＦＩＦＯが大型の場合に満杯フラグまたは空フラグを待つ際の固有の待ち行列時間を短縮するために様々なフルネス度（満杯度）標識またはエンプティネス度（空の程度）標識を提供する必要がある。
【０００６】
さらに、クロック・ドメインＡ中の論理機構とクロック・ドメインＢ中の論理機構は互いに同期しない（たとえば、ＦＩＦＯに対する読取りと書込みは同期しない）ので、任意のクロック・サイクルに、ＦＩＦＯ中の内容の「真の」レベルを動的に判定する必要がある。たとえば、ブロックＡによってＦＩＦＯに４つのデータ語が書き込まれ、同じクロック中にブロックＢによって４つのデータ語が読み取られた場合、ＦＩＦＯのエンプティネス度またはフルネス度に正味変化はない。
【０００７】
任意のクロック・サイクルでＦＩＦＯの内容の「真の」レベルを正確に判定するには、ドメインＢから得たＦＩＦＯポインタ情報をドメインＡのクロックに同期させ、ドメインＢから得た制御情報をドメインＡに同期させなければならないことは明白である。この情報は、ＦＩＦＯの現フルネス状態またはフルネス度を判定する（たとえば、より低速のクロック・ドメインからの信号をより高速のクロック・ドメインに同期させる）ために使用される。
【０００８】
各クロック・サイクルでのＦＩＦＯのレディネス（たとえば、十分な空間またはデータを有する）を算出し、入出力バスを介してＩＯ  ＤＭＡスレーブ（たとえばホスト・メモリ）との間でデータをやり取りするには、制御信号、アドレス情報、ＦＩＦＯに対してどのくらいのデータを書き込み、あるいは読み取るかのサイズ情報などの情報が必要である。
【０００９】
あるクロック・ドメインからの信号と他のクロック・ドメインとを同期させる従来型の方法は、ＩＯバスを介したデータ転送にＦＩＦＯを使用し、高速ネットワークをサポートするためにスループットを最大にする準備をただちに完了することを必要とする前述の状況には不適切である。
【００１０】
１ビット同期は２つの理由で実施することができない。第１に、前述のように、ＦＩＦＯのデータ転送に関する現レベルおよびレディネス（readiness ）を正しく算出するためには複数の情報ビットを一方のクロック・ドメインから他方のクロック・ドメインに同期させなければならない。第２に、クロック・ドメインＡからクロック・ドメインＢに、およびその逆に同期させる必要があるのが１情報ビットだけである場合でも、従来技術の１ビット同期方式は受け入れられない走行時間または待ち時間を有する。たとえば、従来技術の１ビット同期方式は、マスタ・スレーブ原則に基づいて動作し、完全なハンドシェークが必要とされる（たとえば、情報ビットをクロック・ドメインＡからクロック・ドメインＢに同期させ、逆にクロック・ドメインＢからクロック・ドメインＡに同期させることは、クロック・ドメインＢ中の情報に依存し、逆もまた同様である）。したがって、同期が行われている間はクロック・ドメインＡの状態を変更してはならない（たとえば、クロック・ドメインＡからの信号をクロック・ドメインＢに同期させている間にはクロック・ドメインＡの状態を保持する）。
【００１１】
さらに、クロック・ドメインＢ中の現在同期中の信号は、クロック・ドメインＢでの計算に使用される。しかし、信号は、計算され更新された後、クロック・ドメインＡで計算できるようにクロック・ドメインＡに同期させなければならない（たとえば、一方のクロック・ドメインから他方のクロック・ドメインへの走行時間およびその逆の走行時間が、現応用例の時間制約を超える）。
【００１２】
クロック・ドメイン間の複数ビット同期は、固有の準安定性問題を導入する。１ビット同期方式における特定のクロック・エッジでデータが無効または不確かである（たとえば、準安定性）とき、真のデータは最終的に正しい値（０または１）に達する（たとえば、遅延が挿入され、正しい値は次のクロック・サイクルで提示される）。クロックＡとクロックＢは互いにまったく同期しない（たとえば、クロックの位相および周波数が異なる）ので、ある種の例では、同期クロックの特定のクロック・エッジでのデータが予想できず、かつ信頼できないものとなる。
【００１３】
しかし、複数のビットをクロック・ドメイン間で同時に同期させる（たとえば、アドレス情報またはサイズ情報中の複数のビット）ときには、２つ以上のビットが信頼できないデータを有すると完全に誤ったアドレスまたはサイズがもたらされ、単なる遅延では済まなくなるので、この準安定性問題は深刻である。言い換えると、複数ビット値はクロックの立上りにおいては信頼できない（すなわち、準安定性）。したがって、クロック・ドメイン間の複数ビット同期を必要とする従来技術の方法は通常、複数ビット値がクロック・サイクル当たりに１ビットしか変化しないようにする技法（たとえば、グレー・コードまたはジョンソン・カウンタ）を使用する。このような方式は実施費用が高価であり（たとえば、特に、複数ビット値が４ビットよりも大きい場合、グレー・コードを実施するとビットが無駄になる）、特に、クロック境界を横切って多数の信号を同期させる場合、結果的に使用されるハードウェアは試験およびデバッグが困難である。
【００１４】
【発明が解決しようとする課題】
したがって、クロック・ドメイン間で同期させるビットの数を最小限に抑え、しかも各クロック・サイクルでＦＩＦＯのデータ転送に関するレディネスの真の標識を提供する同期論理機構を提供する方法および装置も必要である。本発明はそれを実現することを課題とする。
【００１５】
【課題を解決するための手段】
本発明は、最小の待ち時間および最小の回路複雑度で、第１の回路と第２の回路との間でデータを転送するために第１のクロック（たとえば、ｓｃｌｋ）に同期する第１の回路と第２のクロック（たとえば、ｍｃｌｋ）に同期する第２の回路との間に結合されたインタフェース回路である。
【００１６】
本発明は、第１の回路によってＦＩＦＯに書き込まれ、第２の回路によってＦＩＦＯから読み取られるデータを転送するＦＩＦＯバッファ（すなわち、読取りＦＩＦＯ）を含む。読取りＦＩＦＯは複数の記憶位置を有する。この読取りＦＩＦＯは、ＦＩＦＯ中の次の読取り位置を指す関連する読取りポインタと、ＦＩＦＯ中の次の書込み位置を指す関連する書込みポインタとを有する。第１の回路は、書込みポインタが指す位置に書込みを行い、第２の回路は、読取りポインタが指す位置から読取りを行う。
【００１７】
本発明は、読取りＦＩＦＯに対する非同期読取りおよび書込みを同期させ、読取りＦＩＦＯの読取りポインタおよび書込みポインタを管理する論理機構を提供する。本発明は、バス要求イネーブル、すなわち、ＦＩＦＯが、読取りポインタ、書込みポインタ、第２の回路からのサイズ情報およびアドレス情報、第１の回路からのバス・サイクル情報、すなわちｍｃｌｋおよびｓｃｌｋに基づいて第１の回路への入出力バス上へデータを転送する準備が完了したことを示す標識を提供する読取りバス要求イネーブル生成装置も提供する。読取りバス要求イネーブル生成装置は、第２の回路からのデータ要求から第１の回路のバス要求までの迅速なターンアラウンド時間を与えることによって、ｓｃｌｋドメイン中のバスの帯域幅の使用度を最大にして１５５／６２２Ｍｂｐｓ  ＡＴＭ  ＳＡＲプロトコルをサポートする。
【００１８】
さらに、読取りバス要求イネーブル生成装置は、前のＤＭＡサイクルがまだ継続している間（たとえば、バック・ツー・バックＤＭＡ読取りのケース）にｓｃｌｋドメイン中の回路がバス要求をアサートできるようにする。読取りバス要求イネーブル生成装置は、ＦＩＦＯにいくつの空き記憶位置があるかを算出し、まだＦＩＦＯに書き込まれていないデータの量も算出する回路を含む。これらの計算は、あらゆるクロック・サイクルにｍｃｌｋドメイン内で行われ、１ビット信号のｒｄ＿ＢＲ＿ｅｎがｓｃｌｋドメインに同期する。
【００１９】
本発明は、読取りＦＩＦＯのフルネス度を第２の回路に示す複数のフラグを提供するＡｔ＿ｌｅａｓｔ＿ｘ＿ｗｏｒｄｓ＿ｆｉｌｌｅｄフラグ生成装置も含む。Ａｔ＿ｌｅａｓｔ＿ｘ＿ｗｏｒｄｓ＿ｆｉｌｌｅｄフラグ生成装置は、単なるＦＩＦＯ満杯標識ではなく、読取りＦＩＦＯの様々なフルネス度の標識を提供する。本発明では、ＡＴＭコア（たとえば、インタフェース論理）は、すべてのデータがＦＩＦＯに入るのを待つのではなく、早めに部分的な読取りを実行することができる。ＦＩＦＯを満杯にする時間は、入出力バス・スレーブ待ち時間に依存する。本発明は、ＦＩＦＯがハンドシェーク志向可変スレーブ待ち時間バスＤＭＡ読取りからのすべてのデータを受け入れ、あるいは、ハンドシェーク指向可変スレーブ待ち時間バスＤＭＡ書込みにすべてのデータを提供する準備が完了したことを示すフラグを、あらゆるクロック・サイクルにＳバス側に提供する（たとえば、スレーブ装置は、最悪ケースに備えて、バス要求に応答する際の可変待ち時間を有する）。
【００２０】
本発明は、このフラグ生成装置を提供して、より密な粒度での迅速なデータ移動を保証し、従来技術で論じた待ち時間を短縮する。具体的には、様々なフルネス度のこれらの標識によって、ｍｃｌｋドメイン回路は、読取りＦＩＦＯが完全に満杯になるのを待たずにバッファからデータを読み取ることができる。本発明では、読取りＦＩＦＯが必要な数の書き込まれた記憶位置を有するようになった直後に、ｍｃｌｋドメイン回路が読取りＦＩＦＯからデータを読み取ることができる。
【００２１】
本発明は、第２の回路から第１の回路（すなわち、書込みＦＩＦＯ）へデータを転送するＦＩＦＯバッファも含む。書込みＦＩＦＯは複数の記憶位置を有する。書込みＦＩＦＯは、次の読取り位置を指す読取りポインタと、次の書込み位置を指す書込みポインタとを有する。第１の回路は、読取りポインタが指す書込みＦＩＦＯ中の記憶位置に対する読取りを行い、第２の回路は、書込みポインタが指す書込みＦＩＦＯ中の位置への書込みを行う。
【００２２】
本発明は、書込みＦＩＦＯに対する読取りと書込みを同期させ、読取りポインタおよび書込みポインタを管理する論理機構を含む。本発明は、読取りポインタ、書込みポインタ、第２の回路からのサイズ情報およびアドレス情報、第１の回路からのバス・サイクル情報、すなわちｍｃｌｋおよびｓｃｌｋに基づいて第１の回路へのバス要求イネーブル信号を生成する書込みバス要求イネーブル生成装置も含む。
【００２３】
バック・ツー・バックＤＭＡ書込みの場合、このイネーブル生成装置によって、ｓｃｌｋドメイン中の回路は、前のＤＭＡ書込みサイクルがまだ継続中である間にバス要求をアサートすることができる。このイネーブル生成装置は、ｍｃｌｋドメインにおいて、バス要求イネーブルをいつ生成することができるかを動的に判定し、その場合、１情報ビットはｗｒ＿ＢＲ＿ｅｎ信号の形でｓｃｌｋドメインに同期する。
【００２４】
本発明は、読取りポインタ、書込みポインタ、ｍｃｌｋに基づいて第２の回路に複数のフラグを提供するＡｔ＿ｌｅａｓｔ＿ｙ＿ｗｏｒｄｓ＿ｅｍｐｔｙフラグ生成装置も含む。このような空フラグはあらゆるｍｃｌｋサイクルに、書込みＦＩＦＯ中の空記憶位置の数を第２の回路に示す。
【００２５】
ｓｃｌｋドメインのバス・プロトコルは非同期的なもの（たとえば、データはあらゆるｓｃｌｋサイクルに現れるとは限らない）なので、本発明は書込みＦＩＦＯの様々なエンプティネス度を示すフラグを提供し、それによって、書込みＦＩＦＯに十分な空間ができた直後に、ｍｃｌｋドメイン中の回路が書込みＦＩＦＯへのあるデータの書込みを開始することができる。
【００２６】
したがって、本発明は、完全満杯フラグまたは完全空フラグのみを待つ際の固有の待ち時間を最小限に抑えることによってｍｃｌｋドメイン回路要求とｓｃｌｋドメイン・バス要求との間の迅速なターンアラウンドを達成するために、読取りＦＩＦＯ、関連する同期論理機構、読取りバス要求イネーブル生成装置、Ａｔ＿ｌｅａｓｔ＿ｘ＿ｗｏｒｄｓ＿ｆｉｌｌｅｄフラグ生成装置、書込みＦＩＦＯ、関連する同期論理機構、書込みバス要求イネーブル生成装置、Ａｔ＿ｌｅａｓｔ＿ｙ＿ｗｏｒｄｓ＿ｅｍｐｔｙフラグ生成装置を提供する。さらに、本発明は、あらゆるｍｃｌｋサイクルに、ＦＩＦＯの状態（たとえば、読取りＦＩＦＯおよび書込みＦＩＦＯ中の満杯記憶位置または利用可能な記憶位置の数）の正確な表示を第２の回路に提供する。
【００２７】
【発明の実施の形態】
図２は、本発明３２を組み込んだコンピュータ・システムを示す。本発明３２は、ホスト・コンピュータ・システム１８とコンピュータ・ネットワーク・インタフェース１９との間でデータを転送するインタフェース回路（すなわち、ＳＢ＿ＡＴＭ）である。インタフェース回路ＳＢ＿ＡＴＭ３２は、ホスト・コンピュータ・システム１８からコンピュータ・ネットワーク・インタフェース論理機構１９へデータを転送する読取りモジュール３３と、コンピュータ・ネットワーク・インタフェース論理機構１９からホスト・コンピュータ・システム１８への転送を行う書込みモジュール３４とを含む。
【００２８】
ホスト・コンピュータ・システム１８は、プロセッサ１９と、ホスト・メモリ２０と、入出力装置をホスト・プロセッサ１９に接続する入出力（Ｉ／Ｏ）バス３５と、入出力バス３５とのプロトコル・インタフェースを実施する入出力装置回路３７（たとえば、Ｓバス・プロトコル・エンジン）とを含む。プロセッサ１９は、メモリ・バス２２を介してホスト・メモリ２０に結合される。ホスト・コンピュータ・システム１８中の要素は、第１のクロック（たとえば、ｓｃｌｋ３８）に対して同期する。
【００２９】
コンピュータ・ネットワーク・インタフェース論理機構１９は、ホスト・コンピュータ・システム１８によって指定された第１のフォーマットを有するデータを、コンピュータ・ネットワーク１９によって指定された第２のフォーマットに変換するＡＴＭ＿ＳＹＳ４７を含む。ＡＴＭ＿ＳＹＳ４７は、読取りモジュール３３からデータ経路２３を通じてＡＴＭ＿ＳＹＳ４７までのデータ転送を管理するＡＴＭ読取り論理機構２０を含む。ＡＴＭ読取り論理機構２０は、複数の制御情報およびアドレス情報を読取りモジュール３３に提供し、ＡＴＭ読取り論理機構には、データ経路２１を通じて読取りモジュール３３から複数のフラグが提供される。
【００３０】
プロトコル・エンジン３７は、データ経路２９を通じて読取りモジュール３３に（たとえば、メモリ２０から得た）データを提供する。プロトコル・エンジン３７は、バス・サイクル情報、ｓｃｌｋ３８および複数の制御信号をデータ経路２８を通じて読取りモジュール３３に提供し、プロトコル・エンジンには、やはりデータ経路２８を通じてバス要求イネーブル信号が提供される。
【００３１】
コンピュータ・ネットワーク・インタフェース論理機構１９は、データ経路２７を通じたコンピュータ・ネットワーク媒体から書込みモジュール３４へのデータ転送を管理するＡＴＭ書込み論理機構２４も含む。ＡＴＭ書込み論理機構２４は、サイズ情報、アドレス情報、イネーブル信号をデータ経路２５を通じて書込みモジュール３４に提供し、かつＡＴＭ書込み論理機構には、書込みモジュール３４によって、書込みモジュール３４中のいくつかの空記憶位置を示す複数のフラグが提供される。ＡＴＭ＿ＳＹＳ４７中の回路構成要素は第２のクロック（たとえば、ｍｃｌｋ５８）に同期する。
【００３２】
書込みモジュール３４は、データ経路３１を通じてホスト・コンピュータ・システム１８（たとえば、メモリ２０）へデータを転送する。プロトコル・エンジン３７はバス・サイクル情報、ｓｃｌｋ３８、複数の制御信号をデータ経路３０を通じて書込みモジュール３４に提供し、かつ書込みモジュール３４はバス要求イネーブル信号をＳＢ＿ＰＲＯ３７に提供する。
【００３３】
図３は、本発明をブロック図でさらに詳細に示すものである。読取りモジュール３３はさらに、読取りＦＩＦＯ８３自体用の同期論理機構８４に結合された読取りＦＩＦＯ８３を含む。Ｒｆ＿Ｓｙｎｃ８４はさらに、読取りバス要求イネーブル生成装置（ＲＢＲＥＧ）８９およびＡｔ＿ｌｅａｓｔ＿ｘ＿ｗｏｒｄｓ＿ｆｉｌｌｅｄフラグ生成装置（ＡＬＸＷＦＦＧ）９１に結合される。
【００３４】
読取りＦＩＦＯバッファ（読取りＦＩＦＯ）８３は複数の記憶位置を有する。読取りＦＩＦＯバッファ８３は、ＲＦ＿ＳＹＮＣ装置８４によって管理される書込みポインタ（ｗｐｔｒ）が指す位置にＳＢ＿ＰＲＯ３７によって書き込まれる。読取りＦＩＦＯ８３は、やはりＲＦ＿ＳＹＮＣ装置８４によって管理される読取りポインタ（ｒｐｔｒ）が指す位置からＡＴＭ＿ＳＹＳ４７によって読み取られる。読取りＦＩＦＯバッファ８３は、読取りポートと書込みポートとを含む二重ポートＲＡＭ（ＤＰＲＡＭ）によって実施することができる。ｒｐｔｒポインタおよびｗｐｔｒポインタはこの二重ポートＲＡＭのアドレスとして働く。
【００３５】
ＡＴＭ＿ＳＹＳ４７は、ｓｃｌｋ３８よりも高い周波数を有するＳＢ＿ＡＴＭ３１への第２のクロック（すなわち、ｍｃｌｋ５８）を提供する。ｓｃｌｋ３８とｍｃｌｋ５８は、この２つのクロックの周波数または位相間に必要な関係がないという点で互いに同期しない。
【００３６】
読取りＦＩＦＯ８３は、ＳＢ＿ＰＲＯ３７からＡＴＭ＿ＳＹＳ４７へ転送されるデータをバッファする。データは、ｓｃｌｋに同期するＦＩＦＯ＿ｗｒ＿ｅｎ４１を介しＳＢ＿ＰＲＯ３７によって読取りＦＩＦＯ８３に書き込まれる。データは、あらゆるｓｃｌｋ３８サイクルに読取りＦＩＦＯ８３に書き込むことができ、あるいは、必ずしもあらゆるｓｃｌｋサイクルに書き込まなくてもよい。ｓｃｌｋの立上りでＦＩＦＯ＿ｗｒ＿ｅｎａｂｌｅ４１がアサートされた場合、読取りＦＩＦＯ８３にデータが書き込まれる。ＦＩＦＯ＿ｗｒ＿ｅｎ４１は、ｓｃｌｋベースのものであり、読取りモジュール３３に入り、読取りＦＩＦＯ８３に書き込まれるデータがあることを示す。同様に、データはＡＴＭ＿ＳＹＳ４７によって、あらゆるｍｃｌｋ５８サイクルに読取りＦＩＦＯ８３から読み取ることができる。ＡＴＭ＿ｒｄ＿ｅｎ信号６３が１ｍｃｌｋにわたってアサートされた場合、ｍｃｌｋ５８の立上りに１データ語が読取りＦＩＦＯ８３からＡＴＭ＿ＳＹＳ４７に読み込まれる。ＡＴＭ＿ｒｄ＿ｅｎ６３がアサートされるｍｃｌｋサイクルの数は、読み出される語の数に等しい。
【００３７】
指定”ｒｅａｄ”および”ｗｒｉｔｅ”は、”ＦＩＦＯ”と共に使用されたときには、ホスト・コンピュータ・システム（たとえば、メモリ２０）中のデータへのアクセスを示す。たとえば、”Ｒｅａｄ”は、ホスト・コンピュータ・システム中のメモリ２０からデータが読み取られることを示す。同様に、”Ｗｒｉｔｅ”はホスト・コンピュータ・システム中のメモリ２０へのデータ転送を示す。
【００３８】
ｓｃｌｋ３８がｍｃｌｋ５８に同期しないので、読取りＦＩＦＯ８３は独立型であり、非同期的に書き込まれ読み取られる。本発明は、ＲＦ＿ＳＹＮＣ８４を提供し、非同期読取りおよび書込みをそれに同期させる。したがって、本発明は、以下で詳しく説明する同期論理機構を提供して読取りＦＩＦＯを同期させる。
【００３９】
書込みモジュール３４は、ＷＲ＿ＳＹＮＣ論理機構１１４に結合された書込みＦＩＦＯ１１３も含む。書込みモジュール３４は、共に、ＷＦ＿ＳＹＮＣ１１４に結合された、書込みバス要求イネーブル生成装置（ＷＢＲＥＧ）１１９とＡｔ＿ｌｅａｓｔ＿ｙ＿ｗｏｒｄｓ＿ｅｍｐｔｙフラグ生成装置（ＡＬＹＷＥＦＧ）１２１も含む。書込みＦＩＦＯ１１３は、ｍｃｌｋ５８およびＡＴＭ＿ｗｒ＿ｅｎ７１の組合せを通じてＡＴＭ＿ＳＹＳ４７によって書き込まれる。書込みＦＩＦＯ１１３はあらゆるｍｃｌｋサイクル５８に書き込むことができる。ＡＴＭ＿ｗｒ＿ｅｎ信号がアサートされた場合７１、ｍｃｌｋ５８の立上りにＡＴＭ＿ＳＹＳ４７から書込みＦＩＦＯ１１３にデータが書き込まれる。書込みＦＩＦＯ１１３は、ｓｃｌｋ３８およびＦＩＦＯ＿ｒｄ＿ｅｎ４２信号の組合せを通じてＳＢ＿ＰＲＯ３７によって読み取られる。ｓｃｌｋ３８の立上りでＦＩＦＯ＿ｒｄ＿ｅｎ４２がアサートされた場合、ＳＢ＿ＰＲＯ３７によって書込みＦＩＦＯ１１３からデータが読み取られる。
【００４０】
ＷＦ＿ＳＹＮＣ論理機構１１４は、書込みＦＩＦＯ１１３に対する読取りおよび書込みを同期させる。
【００４１】
本発明のＳＢ＿ＡＴＭ３２は、ＳＢ＿ＡＴＭ３２と入出力バス３５との間のインタフェースを提供するＳＢ＿ＰＲＯ３７に結合される。前述のように、ＳＢ＿ＰＲＯ３７はプロトコル・エンジンであり、入出力バス３５プロトコルを実施する。この実施形態のＳＢ＿ＰＲＯ３７は状態マシンであり、ＩＥＥＥ  Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｌｅｃｔｒｉｃａｌ  Ｅｎｇｉｎｅｅｒｓ  Ｓｂｕｓ  １４９６プロトコルを実施する。たとえば、ＳＢ＿ＰＲＯ３７は、アドレスおよびデータをバスを介して転送するタイミング信号およびハンドシェーク信号を生成する。ＳＢ＿ＰＲＯ３７は、入出力バス３５を通じてＳＢ＿ＡＴＭ３２とメモリ２０との間でデータを転送するデータ経路（図示せず）を含む。ＳＢ＿ＰＲＯ３７は、メモリとの間でデータを転送するデータ経路を提供するだけでなく、本発明に関連するいくつかの信号も提供する。
【００４２】
第１に、ＳＢ＿ＰＲＯ３７は、コンピュータ・システム（たとえば、ホスト・プロセッサ１９）によって生成されるシステム・クロック３８（たとえば、Ｓバス用のｓｃｌｋ）を提供する。前述のように、メモリ２０や入出力バス３５などのシステム構成要素はｓｃｌｋ３８に対して同期する。第２に、ＳＢ＿ＰＲＯ３７は、読取りＦＩＦＯ８３にデータを書き込めるようにするＦＩＦＯ書込みイネーブル信号（ＦＩＦＯ＿ｗｒ＿ｅｎ）４１と、書込みＦＩＦＯ１１３からデータを読み取れるようにするＦＩＦＯ読取りイネーブル信号（ＦＩＦＯ＿ｒｄ＿ｅｎ）４２を提供する。
【００４３】
本発明はＡＴＭ＿ＳＹＳ４７にも結合される。ＡＴＭ＿ＳＹＳ４７は、読取りＦＩＦＯ８３からＡＴＭ＿ｄａｔａ＿ｏｕｔを受け取る送信ＦＩＦＯ２２と、本発明にＡＴＭ＿ｄａｔａ＿ｉｎ５１を提供する受信ＦＩＦＯ２６とを含む。ＡＴＭ＿ＳＹＳ４７は、ｍｃｌｋ５８を生成するｍｃｌｋクロック生成装置２８も含む。読取りイネーブル信号（たとえば、ＡＴＭ＿ｒｄ＿ｅｎ）６３、ならびにｒｄ＿ｓｉｚｅ５７およびｒｄ＿ａｄｄｒ６１の形のサイズ情報およびアドレス情報（たとえば、読取りのサイズおよび読み取るべきメモリ位置のアドレス）を本発明に提供するＡＴＭ読取り論理機構２０も含む。ＡＴＭ読取り論理機構２０はＡＬＸＷＦＦＧ９１から複数のＡｔ＿ｌｅａｓｔ＿ｘ＿ｗｏｒｄｓ＿ｆｉｌｌｅｄフラグも受け取る。
【００４４】
ＡＴＭ＿ＳＹＳ４７は、初期書込みアドレス（たとえば、ｗｒ＿ａｄｄｒ６７）および書き込むべきデータの量（たとえば、ｗｒ＿ｓｉｚｅ６７）の形の書込みに関するサイズ情報およびアドレス情報を提供するＡＴＭ書込み論理機構２４も含む。ＡＴＭ＿Ｗｒｉｔｅ＿ｌｏｇｉｃ２４はまた、書込みイネーブル信号（たとえば、ＡＴＭ＿ｗｒ＿ｅｎ７１）を本発明に提供し、複数のＡｔ＿ｌｅａｓｔ＿ｙ＿ｗｏｒｄｓ＿ｅｍｐｔｙフラグをＡｌＹＷＥＦＧ１２１から受け取る。
【００４５】
ＡＴＭ読取り論理機構および書込み論理機構（２０、２４）は、あらゆるｍｃｌｋサイクル５８に本発明の読取りＦＩＦＯ８３および書込みＦＩＦＯ１１３に対する読取りおよび書込みをイネーブルすることができる。本発明のＡＬＸＷＦＦＧ論理機構９１およびＡＬＹＷＥＦＧ論理機構１２１は、読取りＦＩＦＯ８３中の満杯位置の数および書込みＦＩＦＯ１１３中の空位置の数をそれぞれ、ＡＴＭ読取り論理機構および書込み論理機構に示す複数のフラグを提供する。論理ブロック９１および１２１は、所定数の位置が満杯または空になった後、ＡＴＭ＿ＳＹＳ４７がただちに読取りＦＩＦＯ８３からの読取りを行い、あるいは書込みＦＩＦＯ１１３への書込みを行うことができるように、あらゆるｍｃｌｋ５８サイクルにそれぞれのＦＩＦＯの状態（たとえば、満杯または空の位置の数）を判定し提示する。あらゆるｍｃｌｋサイクルに読取りＦＩＦＯおよび書込みＦＩＦＯの状態が変化する可能性があるので、本発明は、あらゆるｍｃｌｋサイクルに読取りＦＩＦＯまたは書込みＦＩＦＯの状態を提示する。
【００４６】
ＳＢ＿ＰＲＯ３７は、入出力バス３５自体の制御をＳＢ＿ＰＲＯ３７に与えるバス・アービタ（図示せず）への入出力バス３５上にバス要求信号４３をアサートするバス要求生成装置４１も含む。
【００４７】
本発明は、読取りバス要求イネーブル信号３９（すなわち、ｒｄ＿ＢＲ＿ｅｎ）および書込みバス要求イネーブル信号４０（すなわち、ｗｒ＿ＢＲ＿ｅｎ）をバス要求生成装置４１に与える。バス要求生成装置４１は、どちらかの信号に応答して、入出力バス３５へのバス要求４３を生成することをイネーブルされる。
【００４８】
たとえば、バス要求生成装置４１は、ｒｄ＿ＢＲ＿ｅｎ信号３９を受け取ったときに、バス要求４３を入出力バス３５上にアサートすることをイネーブルされる。ＳＢ＿ＰＲＯ３７がバス３５の制御を与えられた後、直接メモリ・アクセス（ＤＭＡ）バースト・サイクルを介しＳＢ＿ＰＲＯ３７を通じてメモリ３７から本発明の読取りＦＩＦＯ８３にデータが転送される。
【００４９】
図４は、ＳＢ＿ＡＴＭ３２の特定の構成要素を詳しく示すものである。本発明は、さらに読取りＦＩＦＯ（たとえば、二重ポートＲＡＭ）８３とＲｆ＿Ｓｙｎｃ８４とを含む同期読取りＦＩＦＯ８１を含む。Ｒｆ＿Ｓｙｎｃ８４はさらに、読取りＦＩＦＯ８３中の次に読み取るべき位置を指す読取りポインタ（ｒｐｔｒ）１０１を管理する読取り論理機構８５と、読取りＦＩＦＯ８３の次に書き込むべき位置を指す書込みポインタ（ｗｐｔｒ）１０３を管理する書込み論理機構８７とを含む。
【００５０】
同期読取りＦＩＦＯ８１には、ｓｃｌｋ３８、ＳＢ＿ＰＲＯ３７からのＦＩＦＯ＿ｗｒ＿ｅｎ４１、ＡＴＭ＿ＳＹＳ４７からのｍｃｌｋ５８およびＡＴＭ＿ｒｄ＿ｅｎ６３が提供される。同期読取りＦＩＦＯ８１は、読取りバス要求イネーブル生成装置８９および”Ａｔ＿ｌｅａｓｔ＿ｘ＿ｗｏｒｄｓ＿ｆｉｌｌｅｄ”フラグ生成装置９１にｒｐｔｒ１０１（たとえば、ＦＩＦＯアドレス情報）およびｗｐｔｒ１０３（たとえば、ＦＩＦＯアドレス情報）を提供する。
【００５１】
読取りバス要求イネーブル生成装置８９は、他のバス・サイクル情報１０５をＳＢ＿ＰＲＯ３７から受け取ると共に、ＤＭＡ読取り要求サイズ情報およびアドレス情報をＡＴＭ＿ＳＹＳ４７から受け取り、ｒｄ＿ＢＲ＿ｅｎ３９をＳＢ＿ＰＲＯ３７に提供する。読取りバス要求イネーブル生成装置８９については下記で詳しく説明する。”Ａｔ＿ｌｅａｓｔ＿ｘ＿ｗｏｒｄｓ＿ｆｉｌｌｅｄ”フラグ生成装置９１は、Ａｔ＿ｌｅａｓｔ＿ｘ＿ｗｏｒｄｓ＿ｆｉｌｌｅｄフラグ６５をＡＴＭ＿ＳＹＳ４７に提供する。この場合、ｘは整数である。
【００５２】
本発明は、さらに第２の二重ポートＲＡＭ１１３とＷｆ＿Ｓｙｎｃ１１４とを含む同期書込みＦＩＦＯ１１１も含む。Ｗｆ＿Ｓｙｎｃ１１４はさらに、書込みＦＩＦＯの読取りポインタ（ｒｐｔｒ）１２３を管理する読取り論理機構１１５と、書込みＦＩＦＯ１１１の書込みポインタ（ｗｐｔｒ）１２５を管理する書込み論理機構１１７とを含む。
【００５３】
同期読取りＦＩＦＯ８１と同様に、同期書込みＦＩＦＯ１１１は、書込みバス要求イネーブル生成装置１１９と”Ａｔ＿ｌｅａｓｔ＿ｙ＿ｗｏｒｄｓ＿ｅｍｐｔｙ”フラグ生成装置１２１の両方にｒｐｔｒ１２３およびｗｐｔｒ１２５を提供する。ＤＰＲＡＭ１１３にＡＴＭ＿ｄａｔａ＿ｉｎが書き込まれ、書込みＦＩＦＯ１１１からＳＢ＿ｄａｔａ＿ｏｕｔが読み取られる。書込みバス要求イネーブル生成装置１１９には、ｍｃｌｋ５８、ｓｃｌｋ３８、ｗｒ＿ｓｉｚｅのサイズ情報、ｗｒ＿ａｄｄｒのメモリ・アドレス情報がＡＴＭ＿ＳＹＳ４７から提供され、かつ書込みバス要求イネーブル生成装置はＳＢ＿ＰＲＯ３７にｗｒ＿ＢＲ＿ｅｎ４０を提供する。書込みイネーブル生成装置１１９はＳＢ＿ＰＲＯ３７からＳバス・サイクル情報２７も受け取る。
【００５４】
”Ａｔ＿ｌｅａｓｔ＿ｙ＿ｗｏｒｄｓ＿ｅｍｐｔｙ”フラグ生成装置１２１にはｒｐｔｒ１２３およびｗｐｔｒ１２５が提供され、かつ”Ａｔ＿ｌｅａｓｔ＿ｙ＿ｗｏｒｄｓ＿ｅｍｐｔｙ”フラグ生成装置１２１はＡＴＭ−ＳＹＳ４７に対する適切な１組のＡｔ＿ｌｅａｓｔ＿ｙ＿ｗｏｒｄｓ＿ｅｍｐｔｙフラグを生成する。これらのフラグは、あらゆるｍｃｌｋ５８サイクルに書込みＦＩＦＯ１１３中の空記憶位置の数（たとえば、”ｙ”、すなわち２語、４語など）をＡＴＭ＿ＳＹＳ４７に示す。同様に、Ａｔ＿ｌｅａｓｔ＿ｘ＿ｆｉｌｌｅｄフラグ６５は、あらゆるｍｃｌｋサイクルに、有効なデータが書き込まれている読取りＦＩＦＯ８１中の記憶位置の数を示す。
【００５５】
図５は、同期読取りＦＩＦＯ８１を詳しく示すものである。読取りＦＩＦＯ８３は、二重ポートＲＡＭ（ＤＰＲＡＭ）自体への書込みを行うＡポートとＤＰＲＡＭ自体からの読取りを行うＢポートとを有するＤＰＲＡＭとして実施することができる。各ポートは、別々のアドレス線、クロック、読取りイネーブルまたは書込みイネーブルを有する。
【００５６】
書込み論理機構８７は、ＤＰＲＡＭ８３のポートＡに対するｗｐｔｒ（たとえば、アドレス）を生成する書込みポインタ生成装置１４１を含む。書込みポインタ生成装置１４１は、クロック信号を受け取ったときには必ずｗｐｔｒ１０３を増分する循環カウンタと共に実施することができる。書込み論理機構８７は、ｓｃｌｋベースのＦＩＦＯ＿ｗｒ＿ｅｎ４１をｍｃｌｋ５８に同期させるＷｒ＿ｃｌｋａ生成装置１４３も含む。このＷｒ＿ｃｌｋａ生成装置１４３にはｍｃｌｋ５８、ｓｃｌｋ３８、ＦＩＦＯ＿ｗｒ＿ｅｎ信号４１が提供され、かつＷｒ＿ｃｌｋａ生成装置は書込みポインタ生成装置１４１に同期書込みクロック信号（ｗｒ＿ｃｌｋａ）１４７を提供する。ｗｒ＿ｃｌｋａ信号１４７は、ＤＰＲＡＭ８３のポートＡのクロック入力（すなわち、ｃｌｋ＿ａ）にも提供される。Ｗｒ＿ｃｌｋａ生成装置１４３を実施する回路については、図６に関して下記に詳しく説明する。
【００５７】
読取り論理機構８５は、ＤＰＲＡＭ８３のポートＢのアドレス入力に提供される読取りポインタ１０１を生成するためにｍｃｌｋ５８によってクロッキングされる読取りポインタ生成装置（Ｒｐｔｒ生成装置）１４９を含む。ポートＢはｍｃｌｋ５８を用いてクロッキングされる。読取りポインタ生成装置１４９は、あらゆるｍｃｌｋサイクルにｒｐｔｒ１０１を増分する循環カウンタとして実施することもできる。ポートＢ用の読取りイネーブルはＡＴＭ＿ｒｄ＿ｅｎ信号６３である。
【００５８】
図６は、本発明のＷｒ＿ｃｌｋａ生成装置回路１４３を示す。ｗｒ＿ｃｌｋａ１４７によってクロッキングされる第２のフリップフロップ１６３へ送られる信号を生成するために第１のフリップフロップ１６１にｓｃｌｋ３８が提供される。フリップフロップ１６３の出力はｔｏｇ１信号１６５であり、トグル信号１７１を生成するために第１の比較回路１６７に提供される。トグル信号１７１はさらに、ＡＮＤゲート１７３へ送られる。比較回路１６７は、ｔｏｇ１  １６５と、ｍｃｌｋ５８を用いてクロッキングされるフリップフロップ１６９の出力とを比較する。フリップフロップ１６３の反転出力は、フリップフロップ１６１の入力に提供される。
【００５９】
ＡＮＤゲート１７３には、ＦＩＦＯ＿ｗｒ＿ｅｎ信号４１と、反転されたｍｃｌｋを用いてクロッキングされるフリップフロップ１６８の出力からの信号が提供される。フリップフロップ１６８の入力にはＦＩＦＯ＿ｗｒ＿ｅｎ信号４１が提供される。
【００６０】
ＡＮＤゲート１７３の出力は、反転されたｍｃｌｋ５８を用いてクロッキングされる他のフリップフロップ１８３に提供される。このフロップ１８３の出力は、ｗｒ＿ｃｌｋａ信号１４７を生成するようにｍｃｌｋ５８を用いてクロッキングされるＯＲゲート・パルス形成回路１８５に渡される。
【００６１】
点線内の回路構成要素は、Ｗｒ＿ｃｌｋａ生成装置１４３の底部としてミラーリングされる。具体的には、反転されたｍｃｌｋを用いてクロッキングされるフリップフロップ１７７は、第２の比較回路１７９へ送られるｔｏｇ２信号を生成する。比較回路１７９の出力は第２のＡＮＤゲート１８１に提供される。ＡＮＤゲート１８１には、ＦＩＦＯ＿ｗｒ＿ｅｎａｂｌｅ信号４１と、ｍｃｌｋ５８を用いてクロッキングされるフリップフロップ１７５の出力が提供される。ＡＮＤゲート１８１の出力は、やはりｍｃｌｋ５８を用いてクロッキングされる別のフリップフロップ１８７への入力として提供される。フリップフロップ１８７の出力は、ｗｒ＿ｃｌｋａ１４７を生成するためにＯＲゲート・パルス形成回路１８５に提供される。
【００６２】
前述のように、点線ブロックはＷｒ＿ｃｌｋａ生成装置１４３の下部と対称的である。点線部分の回路要素は、ｍｃｌｋ５８立上りを用い、次いでｍｃｌｋ５８立下りを用いてＦＩＦＯ＿ｗｒ＿ｅｎ４１をサンプリングする。あらゆる同期に２つのサンプルが必要である。Ｗｒ＿ｃｌｋａ生成装置回路１４３の下部は、ｍｃｌｋの立下り、次いでｍｃｌｋの立上りでＦＩＦＯ＿ｗｒ＿ｅｎをサンプリングする。回路の上半分と下半分のどちらかが、ＦＩＦＯ＿ｗｒ＿ｅｎ４１のサンプルを得て、適切な内部フラグをトグルし（すなわち、ｔｏｇ１またはｔｏｇ２）他の半分がサンプルを得るのを禁止する。
【００６３】
Ｗｒ＿ｃｌｋａ生成装置１４３は、ｓｃｌｋベースのＦＩＦＯ＿ｗｒ＿ｅｎ４１信号をｍｃｌｋ３８に同期させる。ｗｒ＿ｃｌｋａ信号１４７は、ｍｃｌｋ５８の関数であり、有効なＦＩＦＯ＿ｗｒ＿ｅｎ４１があるときにはいつでも生成される。ｗｒ＿ｃｌｋａ１４７はｍｃｌｋ５８の立上りと立下りのどちらかに同期する。ｗｒ＿ｃｌｋａ１４７は、ｗｐｔｒ１０３を維持しＤＰＲＡＭ８３のポートＡをクロッキングするために使用される。
【００６４】
本発明は、ｍｃｌｋ５８がｓｃｌｋ３８よりもずっと高速であることを使用する。この特定の実施形態では、各ｓｃｌｋ３８周期の長さは、ｍｃｌｋ５８の３つのエッジに適応するためにｍｃｌｋ５８の長さの少なくとも１．５倍である必要がある。この特性の結果、同期論理機構８４は極めて簡略化される（たとえば、本発明を実施するのに必要なのは、従来技術で必要とされる多数のフリップフロップおよび特殊なハンドシェーク論理機構ではなく、最小数のゲートおよびフリップフロップだけである）。この同期方式は、ＦＩＦＯの大きさがどれだけかにかかわらずに（すなわちＦＩＦＯサイズに依存せずに）、同様にうまく機能する。本発明は、同期回路１４３が適切とみなしたときに、ｍｃｌｋ５８によってｓｃｌｋベースのＦＩＦＯ＿ｗｒ＿ｅｎ４１をサンプリングする。ＦＩＦＯ＿ｗｒ＿ｅｎ４１のサンプリングは、各ｍｃｌｋエッジ（たとえば、立上り、次いで立下り、あるいは立下り、次いで立上り）に基づくものである。このサンプリングまたは同期の結果はパルスｗｒ＿ｃｌｋａ１４７であり、書込みポインタを更新するために使用され、読取りＤＰＲＡＭ８３への書込みクロックとしても使用される。したがって、読取りＦＩＦＯ（ＤＰＲＡＭ）８３は、１つのクロック・ドメインのみ（すなわち、ｍｃｌｋドメイン）において、ラッチ・ベースではなく完全な同期エッジ・ベースで動作する。
【００６５】
Ｗｒ＿ｃｌｋａ生成装置１４３中のトグル生成装置１４５は、２つのｍｃｌｋ５８エッジによって有効なＦＩＦＯ＿ｗｒ＿ｅｎ４１がサンプリングされた後にあらゆるｓｃｌｋ３８立上りでトグルされるフラグ（たとえば、トグル）を生成し、ｗｒ＿ｃｌｋａ１４７が生成される。フラグがトグルしており、ｍｃｌｋエッジによって別のＦＩＦＯ＿ｗｒ＿ｅｎ４１が検知された場合、その信号は引き続き同期回路（たとえば、直列された２つのフロップ）内を進行して別のｗｒ＿ｃｌｋａ１４７を生成することができる。ｗｒ＿ｃｌｋａ１４７が生成された後、次のｓｃｌｋ立上りで、フラグは再びトグルする。したがって、本発明は、あらゆるｍｃｌｋ５８立上りで信頼できるものとなるロックステップ同期を行う。さらに、本発明は簡単に、かつ効率的に実施することができる（たとえば、最小限の論理機構で実施することができる）。
【００６６】
図７は、図６に示したｗｒ＿ｃｌｋａ生成装置およびシンクロナイザ・ブロック１４３に関するタイミング図を示す。図７は、ｍｃｌｋ５８、ｓｃｌｋ３８、トグル信号１７１、ｗｒ＿ｃｌｋａ１４７、ＦＩＦＯ＿ｗｒ＿ｅｎ信号４１、ｗｐｔｒ１０３の各関連信号を示す。前述のように、ｍｃｌｋ５８とｓｃｌｋ３８は互いに同期しない（たとえば、ｍｃｌｋ５８とｓｃｌｋ３８の相対位相に関する仮定はない）。この特定の実施形態では、ｍｃｌｋ５８は約４０ＭＨｚであり、ｓｃｌｋ３８は約１６ＭＨｚないし２５ＭＨｚの範囲である。ｒｐｔｒ１０１とｗｐｔｒ１０３は共にｍｃｌｋ５８に同期する。本発明は、Ａｔ＿ｌｅａｓｔ＿ｘ＿ｗｏｒｄｓ＿ｆｉｌｌｅｄフラグを使用して、同じ位置に対する同時読取りおよび書込みが行われないようにする。ＡＴＭ読取り論理機構２０は、適切なフラグを参照し、フラグが許容するものだけを読み取る。フラグは常に（たとえば、ＦＩＦＯがラップアラウンドしているとき、あるいはＦＩＦＯがラップアラウンドされていないとき、あるいはＦＩＦＯに対するあるポインタが固定されているとき）、ＦＩＦＯ中の読み取られていない新しい語の数の真のリアルタイム標識であるので、
【００６７】
この実施形態では、一度に６４データ・ビットが読取りＦＩＦＯ８３に書き込まれ、あるいは読取りＦＩＦＯから読み取られる。
【００６８】
次に図７を参照すると分かるように、ｍｃｌｋ５８の立上りと立下りの両方でＦＩＦＯ＿ｗｒ＿ｅｎ４１がアサートされたときにｗｒ＿ｃｌｋａ１４７が生成され、ｍｃｌｋ５８の立上りでのＦＩＦＯ＿ｗｒ＿ｅｎ４１のサンプルはｍｃｌｋ５８の立下りでのサンプル値に等しい。ｗｒ＿ｃｌｋａ１４７は、ｍｃｌｋ５８の２分の１周期だけ持続し、特定のトグル値に対して１度だけ生成される。このトグルは、前のｗｒ＿ｃｌｋａサイクルでの値とは異なる値である（すなわち、あらゆるｗｒ＿ｃｌｋａサイクルに２つの値間でトグルする）。ｗｒ＿ｃｌｋａは、ｗｐｔｒ１０３を、次に書き込むべき記憶位置を指すように増分する。ｍｃｌｋ５８は、読取りポインタ（ｒｐｔｒ）１０１を、次に読み取るべき記憶位置を指すように増分する。
【００６９】
図８は、同期書込みＦＩＦＯ１１１を詳しく示すものである。書込みＦＩＦＯ１１３は、二重ポートＲＡＭ（ＤＰＲＡＭ）自体からの読取りを行うＡポートとＤＰＲＡＭ自体への書込みを行うＢポートとを有するＤＰＲＡＭとして実施することができる。各ポートは、別々のアドレス線、クロック、読取りイネーブルまたは書込みイネーブルを有する。
【００７０】
読取り論理機構１１５は、ＤＰＲＡＭ１１３のポートＡに対するｒｐｔｒ１２３（たとえば、アドレス）を生成する読取りポインタ生成装置２４９を含む。読取りポインタ生成装置２４９は、クロック信号を受け取ったときには必ずｒｐｔｒ１２３を増分する循環カウンタと共に実施することができる。読取り論理機構１１５は、ｓｃｌｋベースのＦＩＦＯ＿ｒｄ＿ｅｎ４２をｍｃｌｋ５８に同期させるＲｄ＿ｃｌｋａ生成装置２４３も含む。このＲｄ＿ｃｌｋａ生成装置２４３にはｍｃｌｋ５８、ｓｃｌｋ３８、ＦＩＦＯ＿ｒｄ＿ｅｎ信号４２が与えられ、かつＲｄ＿ｃｌｋａ生成装置は読取りポインタ生成装置２４９に同期書込みクロック信号（ｒｄ＿ｃｌｋａ）２４７を与える。ｒｄ＿ｃｌｋａ信号２４７は、ＤＰＲＡＭ１１３のポートＡのクロック入力（すなわち、ｃｌｋ＿ａ）にも与えられる。Ｒｄ＿ｃｌｋａ生成装置２４３を実施する回路については、図９に関して下記に詳しく説明する。
【００７１】
書込み論理機構１１７は、ＡＴＭ＿ｗｒ＿ｅｎ７１がアサートされたときにｍｃｌｋ５８によってクロッキングされる書込みポインタ生成装置（Ｗｐｔｒ生成装置）２４１を含む。書込みポインタ生成装置２４１は、ＤＰＲＡＭ１１３のポートＢのアドレス入力に与えられる書込みポインタ１２５を生成する。ポートＢはｍｃｌｋ５８を用いてクロッキングされる。書込みポインタ生成装置２４１は、あらゆるｍｃｌｋサイクルにｗｐｔｒ１２５を増分する循環カウンタとして実施することもできる。
【００７２】
図９は、本発明のＲｄ＿ｃｌｋａ生成装置回路２４３を示す。ｒｄ＿ｃｌｋａ２４７によってクロッキングされる第２のフリップフロップ２６３へ送られる信号を生成するために第１のフリップフロップ２６１にｓｃｌｋ３８が提供される。フリップフロップ２６３の出力はｔｏｇ１信号２６５であり、トグル信号２７１を生成するために第１の比較回路２６７に提供される。トグル信号２７１はさらに、ＡＮＤゲート２７３へ送られる。比較回路２６７は、ｔｏｇ１  ２６５と、ｍｃｌｋ５８を用いてクロッキングされるフリップフロップ２６９の出力とを比較する。フリップフロップ２６３の反転出力は、フリップフロップ２６１の入力に結合される。
【００７３】
ＡＮＤゲート２７３の出力は、反転されたｍｃｌｋ５８を用いてクロッキングされる他のフリップフロップ２８３に与えられる。このフリップフロップ２８３の出力は、ｒｄ＿ｃｌｋａ信号２４７を生成するようにｍｃｌｋ５８を用いてクロッキングされるＯＲゲート・パルス形成回路２８５に渡される。
【００７４】
ＡＮＤゲート２７３には、ＦＩＦＯ＿ｒｄ＿ｅｎ信号４２と、反転されたｍｃｌｋによってクロッキングされるフリップフロップ２６８の出力も加えられる。フリップフロップ２６８は入力としてＦＩＦＯ＿ｒｄ＿ｅｎ信号４２を有する。
【００７５】
点線内の回路構成要素は、Ｒｄ＿ｃｌｋａ生成装置２４３の下部としてミラーリングされる。具体的には、反転されたｍｃｌｋ５８を用いてクロッキングされるフリップフロップ２７７は、第２の比較回路２７９へ送られるｔｏｇ２信号を生成する。比較回路２７９の出力は第２のＡＮＤゲート２８１に提供される。ＡＮＤゲート２８１には、ＦＩＦＯ＿ｒｄ＿ｅｎａｂｌｅ信号４２と、やはりｍｃｌｋ５８を用いてクロッキングされるフリップフロップ２７５の出力が提供される。ＡＮＤゲート２８１の出力は、やはりｍｃｌｋ５８を用いてクロッキングされる別のフリップフロップ２８７への入力として提供される。フリップフロップ２８７の出力は、ｒｄ＿ｃｌｋａ２４７を生成するためにＯＲゲート・パルス形成回路２８５に提供される。
【００７６】
前述のように、点線ブロックはＲｄ＿ｃｌｋａ生成装置２４３の下部と対称的である。点線部分の回路要素は、ｍｃｌｋ５８立上りを用い、次いでｍｃｌｋ５８立下りを用いてＦＩＦＯ＿ｒｄ＿ｅｎ４２をサンプリングする。あらゆる同期に２つのサンプルが必要である。Ｒｄ＿ｃｌｋａ生成装置回路２４３の下部は、ｍｃｌｋの立下り、次いでｍｃｌｋの立上りでＦＩＦＯ＿ｒｄ＿ｅｎをサンプリングする。回路の上半分と下半分のどちらかが、ＦＩＦＯ＿ｒｄ＿ｅｎ４２のサンプルを得て、適切な内部フラグをトグルし（すなわち、ｔｏｇ１またはｔｏｇ２）他の半分がサンプルを得るのを禁止する。
【００７７】
Ｒｄ＿ｃｌｋａ生成装置２４３は、ｓｃｌｋベースのＦＩＦＯ＿ｒｄ＿ｅｎ４２信号をｍｃｌｋ３８に同期させる。ｒｄ＿ｃｌｋａ信号２４７は、ｍｃｌｋ５８の関数であり、有効なＦＩＦＯ＿ｒｄ＿ｅｎ４２があるときにはいつでも生成される。ｒｄ＿ｃｌｋａ２４７は、ｒｐｔｒ１２３を維持しＤＰＲＡＭ１１３のポートＡをクロッキングするために使用される。
【００７８】
本発明は、ｍｃｌｋ５８がｓｃｌｋ３８よりもずっと高速であることを使用する。この特定の実施形態では、各ｓｃｌｋ３８周期の長さは、ｍｃｌｋ５８の長さの少なくとも１．５倍である必要がある。本発明は、同期回路２４３が適切とみなしたときに、ｍｃｌｋ５８によってｓｃｌｋベースのＦＩＦＯ＿ｒｄ＿ｅｎ４２をサンプリングする。ＦＩＦＯ＿ｒｄ＿ｅｎ４２のサンプリングは、各ｍｃｌｋエッジ（たとえば、立上り、次いで立下り、あるいは立下り、次いで立上り）に基づくものである。このサンプリングまたは同期の結果はパルスｒｄ＿ｃｌｋａ２４７であり、書込みポインタを更新するために使用され、読取りＤＰＲＡＭ１１３への書込みクロックとしても使用される。したがって、読取りＦＩＦＯ（ＤＰＲＡＭ）１１３は、１つのクロック・ドメインのみ（すなわち、ｍｃｌｋドメイン）において、ラッチ・ベースではなく完全な同期エッジ・ベースで動作する。
【００７９】
Ｒｄ＿ｃｌｋａ生成装置２４３中のトグル生成装置２４５は、２つのｍｃｌｋ５８エッジによって有効なＦＩＦＯ＿ｒｄ＿ｅｎ４２がサンプリングされた後にあらゆるｓｃｌｋ３８立上りでトグルされるフラグ（たとえば、トグル）を生成し、ｒｄ＿ｃｌｋａ２４７が生成される。フラグがトグルしており、ｍｃｌｋエッジによって別のＦＩＦＯ＿ｒｄ＿ｅｎ４２が検知された場合、この信号は引き続き同期回路（たとえば、直列された２つのフロップ）内を進行して別のｒｄ＿ｃｌｋａ２４７を生成することができる。ｒｄ＿ｃｌｋａ２４７が生成された後、次のｓｃｌｋ立上りで、フラグは再びトグルする。したがって、本発明は、あらゆるｍｃｌｋ５８立上りで信頼できるものとなるロックステップ同期を行う。さらに、本発明は簡単に、かつ効率的に実施することができる（たとえば、最小限の論理機構で実施することができる）。
【００８０】
図１０は、図９に示したＲｄ＿ｃｌｋａ生成装置２４３に関するタイミング図を示す。図１０は、ｍｃｌｋ５８、ｓｃｌｋ３８、トグル信号２７１、ｒｄ＿ｃｌｋａ２４７、ＦＩＦＯ＿ｒｄ＿ｅｎ信号４２、ｒｐｔｒ１２３の各関連信号を示す。前述のように、ｍｃｌｋ５８とｓｃｌｋ３８は互いに同期しない（たとえば、ｍｃｌｋ５８とｓｃｌｋ３８の相対位相に関する仮定はない）。この特定の実施形態では、ｍｃｌｋ５８は約４０ＭＨｚであり、ｓｃｌｋ３８は約１６ＭＨｚないし２５ＭＨｚの範囲である。ｗｐｔｒ１２５とｒｐｔｒ１２３は共にｍｃｌｋ５８に同期する。Ａｔ＿ｌｅａｓｔ＿ｙ＿ｗｏｒｄｓ＿ｅｍｐｔｙフラグ生成装置１２１は、書込みＦＩＦＯ１１３中の同じ位置に対して読取りと書込みが同時に行われることがないようにする。
【００８１】
この実施形態では、一度に６４データ・ビットが書込みＦＩＦＯ１１３に書き込まれ、あるいは書込みＦＩＦＯ１１３から読み取られる。
【００８２】
次に図１０を参照すると分かるように、ｍｃｌｋ５８の立上りと立下りの両方でＦＩＦＯ＿ｒｄ＿ｅｎ４２がアサートされたときにｒｄ＿ｃｌｋａ２４７が生成される。トグル信号２７１は、前のｒｄ＿ｃｌｋａが発生しており、これがＦＩＦＯ＿ｒｄ＿ｅｎ４２の新しいサンプルであることを示す。ｒｄ＿ｃｌｋａ２４７は、ｍｃｌｋ５８の２分の１周期だけ持続し、特定のトグル値に対して１度だけ生成される。ｒｄ＿ｃｌｋａ２４７は、ｒｐｔｒ１２３を、次に書き込むべき記憶位置を指すように増分する。ｍｃｌｋ５８は、書込みポインタ（ｗｐｔｒ）１２５を、次に書き込むべき記憶位置を指すように増分する。
【００８３】
読取りＦＩＦＯが特定のｓｃｌｋサイクルに直接メモリ・データ転送（ＤＭＡ）用の十分な空間を有するかどうかは、ｒｐｔｒとｗｐｔｒの両方の値に依存する。ｒｐｔｒおよびｗｐｔｒはあらゆるｍｃｌｋに更新される可能性があるので、「距離」（たとえば、ｒｐｔｒが指す位置とｗｐｔｒが指す位置との間の記憶位置の数）は、本発明によってあらゆるｍｃｌｋサイクルに動的に判定される。
【００８４】
考慮すべき４つの別々なケースがある。第１のケースでは、ｒｐｔｒがｗｐｔｒよりも小さく（すなわち、ｗｐｔｒの後方に位置する）、ｗｐｔｒがラップアラウンドしていない。第２のケースでは、ｒｐｔｒがｗｐｔｒよりも小さく、ｗｐｔｒがラップアラウンドしている。第３のケースでは、ｒｐｔｒがｗｐｔｒに等しく、ｒｐｔｒがｗｐｔｒに追いついた。第４のケースでは、ｒｐｔｒがｗｐｔｒに等しく、ｒｐｔｒがｗｐｔｒの方へ逆進した（たとえば、ｒｐｔｒが位置２に停止しており、ｗｐｔｒが位置０から位置１に増分している）。
【００８５】
前のＳバスＤＭＡがまだ継続中であり、データがまだ読取りＦＩＦＯに書き込まれているときには、ｒｐｔｒとｗｐｔｒとの間の距離を調整する必要がある。本発明は、現要求（たとえば、ホスト・メモリからバイト・ブロックを読み取り、あるいはホスト・メモリにバイト・ブロックを書き込むことを要求するＡＴＭ＿ＳＹＳ４７からの読取り要求または書込み要求）を処理する際、前の要求のデータ・サイズおよびアドレスならびに現要求のデータ・サイズおよびアドレスに基づくバス許可イネーブル信号３９、４２をアサートするか否かを決定する際にｒｐｔｒとｗｐｔｒとの間の距離の調整を動的に実行する。
【００８６】
この調整は、まだ読取りＦＩＦＯへ転送されていない語の予想される古い数に基づくものである。まだ転送されていない語の予想される古い数は、古いｒｄ＿ｓｉｚｅ、ｒｄ＿ａｄｄｒ、ｗｐｔｒのスナップショット（すなわち、ＳＢ＿ＰＲＯが、トランザクションの始めであることを示したときのｗｐｔｒの値）に依存する。Ｓバス状態は、Ｓバス・トランザクションの始めを示す。現ｗｐｔｒ、ｒｐｔｒ、ｒｄ＿ｓｉｚｅ、ｒｄ＿ａｄｄｒはすべてｍｃｌｋに同期する。
【００８７】
ｒｄ＿ＢＲ＿ｅｎは、ｒｐｔｒとｗｐｔｒの間の距離と調整値との差が、ＡＴＭ＿ＳＹＳ４７からのこの現要求に対してメモリへ、あるいはメモリから転送すべきバイトの数以上であるときに生成されるフラグである。ｒｄ＿ＢＲ＿ｅｎは、ｍｃｌｋドメインで動的に決定され、ｓｃｌｋに同期する。
【００８８】
したがって、ｒｄ＿ＢＲ＿ｅｎは、あらゆるｍｃｌｋに更新され、あらゆるｓｃｌｋによってサンプリングされる。ＳＢ＿ＰＲＯがバス要求をアサートする準備が完了すると、ｒｄ＿ＢＲ＿ｅｎ信号は、そのｓｃｌｋサイクルにバス３５上にバス要求をアサートできるかどうかを判定する。
【００８９】
図１１は、本発明の読取りバス要求イネーブル生成装置８９の構成要素を詳しく示すものである。読取りバス要求イネーブル生成装置８９は、いつ読取りバス要求イネーブル信号（ｒｄ＿ＢＲ＿ｅｎ）３９をアサートすべきかを判定する回路３０１を含む。この回路３０１はさらに、複数のスナップショット・レジスタ３０３とイネーブル生成装置３０５とを含む。回路３０１は、ｓｃｌｋ３８ベースのＳバス情報１０１を、ｍｃｌｋ５８に同期するＳバス情報３０７（すなわち、ｉｎｆｏ＿ｍｃｌｋ）に変換する同期回路（ｓｙｎｃｈｒｏ）３０６に結合される。Ｓバス情報１０１は、Ｓバス・サイクルのアドレス変換サイクル中の適当な点をＲＢＲＥＧ８９に示し、それによって、ｗｐｔｒまたはｒｐｔｒの信頼できるスナップショットをとることができる。第１のクロックに基づく第１の信号を、第２のクロックに同期する第２の信号に同期させる同期回路は当技術分野において良く知られている。直列された２つのフリップフロップによって同期回路を実施することができる。
【００９０】
イネーブル生成装置３０５は、ｍｃｌｋ５８に同期するバス要求イネーブル信号（ｅｎａｂｌｅ＿ｍｃｌｋ）３０６を生成する。イネーブル生成装置３０５には、同期読取りＦＩＦＯ回路８１からの現ｒｐｔｒ１０１およびｗｐｔｒ１０３、同期回路３０６からのｉｎｆｏ＿ｍｃｌｋ３０７、ＡＴＭ＿ＳＹＳ４７からの現ｒｄ＿ｓｉｚｅ５９およびｒｄ＿ａｄｄｒ６１、複数のスナップショット・レジスタ３０３からのｒｐｔｒ１０１、ｗｐｔｒ１０３、ｒｄ＿ｓｉｚｅ５９、ｒｄ＿ａｄｄｒ６１、ｉｎｆｏ＿ｍｃｌｋ３０７の古い値が提供される。スナップショット・レジスタ３０３は、古い値（たとえば、前のｍｃｌｋサイクルでの読取りＦＩＦＯの状態）をラッチするように働く。イネーブル生成装置３０５は、提供された情報（たとえば、読取りＦＩＦＯの現状態情報と読取りＦＩＦＯの古い状態情報の両方）からｅｎａｂｌｅ＿ｍｃｌｋ信号３０６を動的に決定する。ｅｎａｂｌｅ＿ｍｃｌｋ信号３０６は、（ｒｐｔｒとｗｐｔｒとの間の距離）−（たとえば、バック・ツー・バック読取りＤＭＡの場合に継続中の前のＳバスＤＭＡからまだ転送されていない語）≧（現ｒｄ＿ｓｉｚｅおよびｒｄ＿ａｄｄｒに基づいてＳバスを介して読み取るべきバイトの数）を計算することによって生成される。この関係は、当技術分野で知られている演算論理回路または組合せ論理回路、あるいはその両方によって実施することができる。ｅｎａｂｌｅ＿ｍｃｌｋ３０６は、ｒｄ＿ＢＲ＿ｅｎ信号３９を生成する同期回路３０９へ送られる。ｅｎａｂｌｅ＿ｍｃｌｋ３０６は単一ビット・フラグである。同期回路３０９は、このｍｃｌｋベースの信号、ｅｎａｂｌｅ＿ｍｃｌｋ３０６をｓｃｌｋベースの信号ｒｄ＿ＢＲ＿ｅｎ３９に同期させる。
【００９１】
図１１は、バック・ツー・バックＤＭＡ読取りに適応できるように読取りバス要求イネーブル信号３９を生成する論理機構８９を示し、これに対して、図１２はバック・ツー・バックＤＭＡ書込みに対処する書込みバス要求イネーブル生成装置１１９の構成要素を詳しく示している。書込み生成装置１１９は、書込みバス・イネーブル信号４０（ｗｒ＿ＢＲ＿ｅｎ）を生成し、それをＳＢ＿ＰＲＯ３７に提供する。さらに、Ｓバス・サイクル情報１２７、書込みサイズ６９、書込みアドレス６７がバック・ツー・バックＤＭＡ書込みに関係している。言い換えれば、書込みバス要求イネーブル生成装置１１９はあらゆるｍｃｌｋ５８サイクルに、メモリ２０へ転送して書き込むのに十分なデータが書込みＦＩＦＯ１１３中にあるか否かを動的に判定する。バス要求イネーブル生成装置８９、１１９は、入出力帯域幅の使用度を最大にしてバック・ツー・バックＤＭＡをパイプライン化する。ｅｎａｂｌｅ＿ｍｃｌｋ信号３５６は、（ｒｐｔｒとｗｐｔｒとの間の距離）−（バック・ツー・バック書込みＤＭＡの場合に継続中の前のＳバスＤＭＡからまだ読み取られていない語）≧（現ｗｒ＿ｓｉｚｅおよびｗｒ＿ａｄｄｒに基づいてＳバスを介して書き込むべきバイトの数）を計算することによって生成される。この関係は、当技術分野で知られている演算論理回路または組合せ論理回路、あるいはその両方によって実施することができる。
【００９２】
図１３は、Ａｔ＿ｌｅａｓｔ＿ｘ＿ｗｏｒｄｓ＿ｆｉｌｌｅｄフラグ生成装置９１が、読取りＦＩＦＯ８３に書き込まれている語の数を示す複数のフラグをどのように生成するかを説明するフローチャートを示す。第１に、フラグ生成装置９１は、読取りポインタと書込みポインタが等しいか否かを判定する（決定論理ブロック４０１）。読取りポインタと書込みポインタが等しい場合、フラグ生成装置９１はさらに、読取りＦＩＦＯ８３が満杯かどうかを判定する（決定論理ブロック４０３）。読取りＦＩＦＯ８３が満杯である場合、フラグ生成装置９１はすべてのＡｔ＿ｌｅａｓｔ＿ｘ＿ｗｏｒｄｓ＿ｆｉｌｌｅｄフラグ６５をアサートする（すなわち、すべてのフラグが有効になる）（論理ブロック４０７）。ＦＩＦＯ８３が満杯ではない場合、ＦＩＦＯ８３は空でなければならず（すなわち、ｒｐｔｒ＝ｗｐｔｒであり、満杯ではない場合、ＦＩＦＯは空でなければならない）、フラグ生成装置９１はすべてのＡｔ＿ｌｅａｓｔ＿ｘ＿ｗｏｒｄｓ＿ｆｉｌｌｅｄフラグ４０５をデアサートする。
【００９３】
書込みポインタが読取りポインタに等しくないとフラグ生成装置９１が判定した場合、ｗｐｔｒ１０３がラップアラウンドしているか否かがさらに判定される（４０９）。ｗｐｔｒ１０３がラップアラウンドされていると判定された場合、書き込まれている語の数は、ＦＩＦＯのサイズ（この実施形態では１４個の６４ビット位置）から読取りポインタと書込みポインタとの間の差を減じた値に等しい（論理ブロック４１１）。読取りＦＩＦＯ８３がラップアラウンドされていない場合、書き込まれている語の数は、書込みポインタと読取りポインタとの差に等しいに過ぎない（論理ブロック４１５）。書き込まれている語の数が算出された後、フラグ生成装置９１によって適当なフラグがセットされ（論理ブロック４１３、４１７）、あらゆるｍｃｌｋサイクルにＡＴＭ＿ＳＹＳ４７へ送られる。本発明は、あらゆるｍｃｌｋサイクルにこれらのフラグを更新する。
【００９４】
図１４は、Ａｔ＿ｌｅａｓｔ＿ｙ＿ｗｏｒｄｓ＿ｅｍｐｔｙフラグ生成装置１２１があらゆるｍｃｌｋサイクルに、どのように書込みＦＩＦＯ１１３中の空記憶位置の数を動的に判定するかを示す。この方法は、フラグ生成装置１２１によって実行され、図１４に示したステップが実行される。フラグ生成装置１２１は、書込みＦＩＦＯ１１３中の空の記憶位置の数を動的に判定する。フラグ生成装置１２１は、書込みＦＩＦＯ１１３中に少なくとも”ｙ”個の空語位置があることを示す複数のフラグを生成する。Ｙは任意の整数であってよい（たとえば、この実施態様では、ｙは２、または４、または６、または８に等しい）。これらのフラグ７３は、ＡＴＭ＿ＳＹＳ４７が、あらゆるｍｃｌｋ５８に、ＡＴＭ＿ＳＹＳ４７自体が書込みＦＩＦＯ１１３に書き込むことができる語の数を判定できるように、ＡＴＭ＿ＳＹＳ４７に情報を提供する。
【００９５】
第１に、フラグ生成装置１２１はまず、ｗｐｔｒ１２３がｗｐｔｒ１２５に等しいかどうかを判定する（決定論理ブロック５０１）。これらの２つのポインタが等しい場合、書込みＦＩＦＯ１１３が空であるか否かが判定される（決定論理ブロック５０３）。書込みＦＩＦＯ１１３が空である場合、フラグ生成装置１２１はすべてのＡｔ＿ｌｅａｓｔ＿ｙ＿ｗｏｒｄｓ＿ｅｍｐｔｙフラグをアサートする（論理ブロック５０７）。ＦＩＦＯ１１３が空になると判定された場合、ＦＩＦＯ８３は空でなければならず（すなわち、ｒｐｔｒ＝ｗｐｔｒであり、フラグ生成装置１２１はすべてのＡｔ＿ｌｅａｓｔ＿ｙ＿ｗｏｒｄｓ＿ｅｍｐｔｙフラグをデアサートする（論理ブロック５０５）。
【００９６】
ｗｐｔｒ１２５がｒｐｔｒ１２３に等しくないと判定された場合、さらに、ｗｐｔｒ１２５がラップアラウンドしているか否かが判定される（５０９）。ｗｐｔｒ１２５がラップアラウンドしている場合、フラグ生成装置１２１は、空位置の数＝ＦＩＦＯサイズ−（ｗｐｔｒ−ｒｐｔｒ（論理ブロック５１１）という数式によって書込みＦＩＦＯ１１３中の空位置の数を判定する。次いで、適当なフラグがアサートされる（論理ブロック５１３）。ｗｐｔｒ１２５がラップアラウンドされていない場合、フラグ生成装置１２１は、空位置の数＝ＦＩＦＯサイズ−ｒｐｔｒ−ｗｐｔｒという数式によってＦＩＦＯ１１３中の空位置の数を判定し、適当なフラグがセットされる（論理ブロック５１５および５１７）。
【００９７】
したがって、フラグ生成装置９１は、ＡＴＭ＿ＳＹＳ４７が、読取りＦＩＦＯ８３が完全に満杯になるのを待つ必要なしにＡＴＭ＿ｄａｔａ＿ｏｕｔ４９が利用可能になった直後にそれを読取りＦＩＦＯ８３から読み取れるように、読取りＦＩＦＯ８３中の値データを用いて記憶位置の数をＡＴＭ＿ＳＹＳ４７に示す複数のフラグを提供する。同様に、本発明のフラグ生成装置１２１は、ＡＴＭ＿ＳＹＳ４７があらゆるｍｃｌｋ５８サイクルに、ＡＴＭ＿ＳＹＳ自体が書込みＦＩＦＯ１１３に書き込むことができる語の数を判定できるように、書込みＦＩＦＯ１１３中の空記憶位置の数を示すフラグを提供する。
【００９８】
本発明は、従来技術に勝る多数の利点を提供する。第１に、本発明は、トグル信号を使用してｓｃｌｋベースの信号（たとえば、ＦＩＦＯ＿ｗｒｉｔｅ＿ｅｎおよびＦＩＦＯ＿ｒｄ＿ｅｎ）をロックステップ式に同期させる（たとえば、サンプリングする）簡略化された同期方式を提供する。第２に、本発明では、粒度を用いてＦＩＦＯの内容を示すフルネス標識を提供することによって、ＦＩＦＯを通じた迅速なデータ移動が可能である。第３に、本発明によって、ＡＴＭ＿ＳＹＳはバック・ツー・バック・データ要求（たとえば、ホスト・メモリに対する読取り要求および書込み要求）を実行することができる。言い換えれば、本発明は、ルック・アヘッド表示を提供し、その結果、ＡＴＭ＿ＳＹＳは、１つのメモリ要求が完全に完了するのを待たなくても、その後の要求をアサートすることができる。
【００９９】
前述の明細では、本発明を特定の例示的な実施形態に関して説明した。しかし、添付の特許請求の範囲に記載した本発明のより広い趣旨および範囲から逸脱せずに本発明に様々な修正および変更を加えられることは明白である。したがって、明細書および図面は、制限的ではなく例示的なものとみなすべきである。
【図面の簡単な説明】
【図１】  従来技術のインタフェース回路を示す図である。
【図２】  本発明のシステム・レベル・ブロック図である。
【図３】  本発明のより詳細なシステム・レベル・ブロック図である。
【図４】  本発明の詳細なブロック図である。
【図５】  本発明の同期読取りＦＩＦＯのブロック図である。
【図６】  読取りＦＩＦＯに関連する同期論理機構の詳細な実施態様を示す図である。
【図７】  図６に示した同期論理機構に関連するタイミング図である。
【図８】  本発明の同期書込みＦＩＦＯの詳細なブロック図である。
【図９】  本発明の書込みＦＩＦＯに関連する同期論理機構の詳細な実施態様を示す図である。
【図１０】  図９の同期論理機構に関連するタイミング図である。
【図１１】  本発明の読取りバス要求イネーブル生成装置の詳細なブロック図である。
【図１２】  書込みバス要求イネーブル生成装置の詳細なブロック図である。
【図１３】  あらゆるクロック・サイクルに書込みＦＩＦＯ中に満杯空間がいくつあるかを示すフラグを動的に決定するにはどうすべきかを説明するフローチャートである。
【図１４】  あらゆるクロック・サイクルに書込みＦＩＦＯ中に空の空間がいくつあるかを示すフラグを動的に決定するにはどうすべきかを説明するフローチャートである。
【符号の説明】
３２  本発明
１８  ホスト・コンピュータ・システム
１９  コンピュータ・ネットワーク・インタフェース論理機構
２０  ホスト・メモリ
２２  メモリ・バス
２４  ＡＴＭ書込み論理機構
２５  データ経路
２６  受信ＦＩＦＯ
２８  ｍｃｌｋクロック生成装置
３１  ＳＢ＿ＡＴＭ
３３  読取りモジュール
３４  書込みモジュール
３５  入出力バス
３７  Ｓバスプロトコル・エンジン
３８  ｓｃｌｋ
４１  ＦＩＦＯ＿ｗｒ＿ｅｎ
４２  ＦＩＦＯ＿ｒｄ＿ｅｎ
４３  バス要求信号
４７  ＡＴＭ＿ＳＹＳ
５１  ＡＴＭ＿ｄａｔａ＿ｉｎ
５７  ｒｄ＿ｓｉｚｅ
５８  ｍｃｌｋ
６１  ｒｄ＿ａｄｄｒ
６３  ＡＴＭ＿ｒｄ＿ｅｎ信号
６５  Ａｔ＿ｌｅａｓｔ＿ｘ＿ｗｏｒｄｓ＿ｆｉｌｌｅｄフラグ
６７  ｗｒ＿ａｄｄｒ
７１  ＡＴＭ＿ｗｒ＿ｅｎ
８１  同期読取りＦＩＦＯ
８３  読取りＦＩＦＯ
８４  Ｒｆ＿Ｓｙｎｃ
８５  読取り論理機構
８７  書込み論理機構
８９  読取りバス要求イネーブル生成装置（ＲＢＲＥＧ）
９１  Ａｔ＿ｌｅａｓｔ＿ｘ＿ｗｏｒｄｓ＿ｆｉｌｌｅｄフラグ生成装置（ＡＬＸＷＦＦＧ）
１０１  読取りポインタ（ｒｐｔｒ）
１０３  書込みポインタ（ｗｐｔｒ）
１１３  書込みＦＩＦＯ
１１４  ＷＲ＿ＳＹＮＣ論理機構
１１９  書込みバス要求イネーブル生成装置（ＷＢＲＥＧ）
１２１  Ａｔ＿ｌｅａｓｔ＿ｙ＿ｗｏｒｄｓ＿ｅｍｐｔｙフラグ生成装置（ＡＬＹＷＥＦＧ）
【図１】
0003712471.tif 000002
【図２】
0003712471.tif 000003
【図３】
0003712471.tif 000004
【図４】
0003712471.tif 000005
【図５】
0003712471.tif 000006
【図６】
0003712471.tif 000007
【図７】
0003712471.tif 000008
【図８】
0003712471.tif 000009
【図９】
0003712471.tif 000010
【図１０】
0003712471.tif 000011
【図１１】
0003712471.tif 000012
【図１２】
0003712471.tif 000013
【図１３】
0003712471.tif 000014
【図１４】
0003712471.tif 000015