IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドの特許一覧

特許7299890ポインタオフセットを用いた非同期バッファ
<>
  • 特許-ポインタオフセットを用いた非同期バッファ 図1
  • 特許-ポインタオフセットを用いた非同期バッファ 図2
  • 特許-ポインタオフセットを用いた非同期バッファ 図3
  • 特許-ポインタオフセットを用いた非同期バッファ 図4
  • 特許-ポインタオフセットを用いた非同期バッファ 図5
  • 特許-ポインタオフセットを用いた非同期バッファ 図6
  • 特許-ポインタオフセットを用いた非同期バッファ 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-06-20
(45)【発行日】2023-06-28
(54)【発明の名称】ポインタオフセットを用いた非同期バッファ
(51)【国際特許分類】
   G06F 13/38 20060101AFI20230621BHJP
   G06F 1/12 20060101ALI20230621BHJP
【FI】
G06F13/38 310A
G06F1/12
G06F13/38 340C
【請求項の数】 17
(21)【出願番号】P 2020531647
(86)(22)【出願日】2018-09-24
(65)【公表番号】
(43)【公表日】2021-02-18
(86)【国際出願番号】 US2018052378
(87)【国際公開番号】W WO2019118040
(87)【国際公開日】2019-06-20
【審査請求日】2021-09-24
(31)【優先権主張番号】15/837,951
(32)【優先日】2017-12-11
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】リチャード マーティン ボーン
(72)【発明者】
【氏名】デイビッド エム. ダーレ
(72)【発明者】
【氏名】スティーブン コムルシュ
【審査官】田名網 忠雄
(56)【参考文献】
【文献】米国特許出願公開第2013/0205160(US,A1)
【文献】米国特許第05138637(US,A)
【文献】米国特許出願公開第2008/0288805(US,A1)
【文献】米国特許出願公開第2005/0286506(US,A1)
【文献】米国特許出願公開第2012/0226884(US,A1)
【文献】特開2015-232918(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 13/10-13/14
G06F 13/20-13/42
G06F 1/12
(57)【特許請求の範囲】
【請求項1】
プロセッサの第1クロックドメインにおいて、バッファの複数のエントリに対する書き込みポインタの位置を、前記バッファの深度及び第1オフセット値に基づいて更新することと、
前記プロセッサの書き込みモジュールにおいて、前記書き込みポインタが前記バッファの前記複数のエントリのうち第1エントリを示したことに応じて、前記第1エントリにアクセスすることと、
前記プロセッサの第2クロックドメインにおいて、前記バッファの前記複数のエントリに対する読み出しポインタの位置を、前記書き込みポインタの位置及び第2オフセット値に基づいて更新することであって、前記第2オフセット値は、前記第1クロックドメインの第1クロック信号の第1周波数と、前記第2クロックドメインの第2クロック信号の第2周波数との比に基づいており、前記第2クロック信号は、前記第1クロック信号と非同期である、ことと、
前記プロセッサの読み出しモジュールにおいて、前記読み出しポインタが前記バッファの前記複数のエントリのうち前記第1エントリを示したことに応じて、前記第1エントリにアクセスすることと、を含み、
前記第1オフセット値は、前記書き込みモジュールが前記バッファにアクセスすることを示す信号のアサートと、前記バッファへの前記書き込みモジュールのアクセスと、の間の前記第1クロック信号のクロックサイクル数に基づいている、
方法。
【請求項2】
前記第1オフセット値は、前記第1周波数と前記第2周波数との比に基づいている、
請求項1の方法。
【請求項3】
前記第1オフセット値は、前記第1クロックドメインと前記第2クロックドメインとの間のシンクロナイザであって、前記バッファのエントリに書き込まれるデータの遅延を維持するためのシンクロナイザの深度に基づいている、
請求項1の方法。
【請求項4】
前記第2オフセット値は、前記第1クロックドメインと前記第2クロックドメインとの間のシンクロナイザであって、前記バッファのエントリに書き込まれるデータの遅延を維持するためのシンクロナイザの深度に基づいている、
請求項の方法。
【請求項5】
前記第1周波数を第1の調整された周波数に調整し、又は、前記第2周波数を第2の調整された周波数に調整するための要求に応じて、前記第1オフセット値及び前記第2オフセット値をリセットすることをさらに含む、
請求項の方法。
【請求項6】
前記第1オフセット値及び前記第2オフセット値をリセットすることは、
前記第1の調整された周波数が前記第2の調整された周波数よりも高いことに応じて、前記第1の調整された周波数と前記第2の調整された周波数との比に基づいて、前記書き込みポインタの第1の調整されたオフセット値を決定することと、
前記第1の調整された周波数と前記第2の調整された周波数との比に基づいて、前記読み出しポインタの第2の調整されたオフセット値を決定することと、
前記読み出しモジュールによってアクセスされていないデータを含む前記バッファの前記エントリを空にすることと、
前記バッファの共通エントリにおいて前記書き込みポインタ及び前記読み出しポインタを停止させることと、
前記第1の調整されたオフセット値に基づいて、前記書き込みポインタの位置を更新することと、
前記第2の調整されたオフセット値に基づいて、前記読み出しポインタの位置を更新することと、を含む、
請求項の方法。
【請求項7】
プロセッサの第1クロックドメインにおいて、深度を有する先入れ先出しバッファ(FIFO)に対する書き込みポインタの位置に第1オフセット値を適用することと、
前記プロセッサの第2クロックドメインにおいて、前記FIFOに対する読み出しポインタの位置に第2オフセット値を適用することであって、前記第2オフセット値は、前記第1クロックドメインの第1クロック信号の第1周期と、前記第2クロックドメインの第2クロック信号の第2周期との比に基づいている、ことと、
前記プロセッサの書き込みモジュールにおいて、前記書き込みポインタの位置に基づいて、前記FIFOの第1エントリにアクセスすることと、
前記第1エントリにアクセスしたことに応じて、前記FIFOに対する前記書き込みポインタを更新することと、
前記プロセッサの読み出しモジュールにおいて、前記FIFOに対する前記読み出しポインタの位置に基づいて、前記FIFOの前記第1エントリから読み出すことと、
前記第1エントリから読み出したことに応じて、前記FIFOに対する前記読み出しポインタを更新することと、を含み、
前記第1オフセット値は、前記書き込みモジュールが前記FIFOにアクセスすることを示す信号のアサートと、前記FIFOへの前記書き込みモジュールのアクセスと、の間の前記第1クロック信号のクロックサイクル数に基づいている、
方法。
【請求項8】
前記第1オフセット値は、前記第1周期と前記第2周期との比に基づいている、
請求項の方法。
【請求項9】
前記第1オフセット値は、前記第1クロックドメインと前記第2クロックドメインとの間のシンクロナイザであって、前記FIFOのエントリに書き込まれるデータの遅延を維持するためのシンクロナイザの深度に基づいている、
請求項の方法。
【請求項10】
前記第1周期を第1の調整された周期に調整し、又は、前記第2周期を第2の調整された周期に調整するための要求に応じて、前記第1オフセット値及び前記第2オフセット値をリセットすることをさらに含む、
請求項の方法。
【請求項11】
前記第1オフセット値及び前記第2オフセット値をリセットすることは、
前記第1の調整された周期が前記第2の調整された周期よりも高いことに応じて、前記第1の調整された周期と前記第2の調整された周期との比に基づいて、前記書き込みポインタの第1の調整されたオフセット値を決定することと、
前記第1の調整された周期と前記第2の調整された周期との比に基づいて、前記読み出しポインタの第2の調整されたオフセット値を決定することと、
前記読み出しモジュールによってアクセスされていないデータを含む前記FIFOの前記エントリを空にすることと、
前記FIFOの共通エントリにおいて前記書き込みポインタ及び前記読み出しポインタを停止させることと、
前記第1の調整されたオフセット値に基づいて、前記書き込みポインタの位置を更新することと、
前記第2の調整されたオフセット値に基づいて、前記読み出しポインタの位置を更新することと、を含む、
請求項10の方法。
【請求項12】
先入れ先出しバッファ(FIFO)と、
第1クロックドメインであって、
書き込みポインタと、
前記FIFOのエントリに書き込まれるデータの遅延を維持するための第1シンクロナイザと、
前記FIFOにアクセスすることを示す書き込み信号をアサートし、前記FIFOに対する前記書き込みポインタの位置に応じて前記FIFOの第1エントリにアクセスするように構成された書き込みモジュールであって、前記書き込みポインタの位置が前記FIFOの深度及び第1オフセット値に基づいている、書き込みモジュールと、を含む第1クロックドメインと、
第2クロックドメインであって、
読み出しポインタと、
前記FIFOのエントリに書き込まれるデータの遅延を維持するための第2シンクロナイザと、
前記FIFOに対する前記読み出しポインタの位置に応じて前記FIFOの前記第1エントリにアクセスするように構成された読み出しモジュールであって、前記読み出しポインタの位置が前記書き込みポインタの位置及び第2オフセット値に基づいている、読み出しモジュールと、を含む第2のクロックドメインと、
前記第1オフセット値及び前記第2オフセット値を決定するように構成されたコントローラであって、前記第1オフセット値は、前記書き込み信号のアサートと、前記FIFOへの前記書き込みモジュールのアクセスと、の間の第1クロック信号のクロックサイクル数に基づいている、コントローラと、を備える、
プロセッサ。
【請求項13】
前記コントローラは、前記第1クロックドメインの第1クロック信号の第1周波数と、前記第2クロックドメインの第2クロック信号の第2周波数との比に基づいて、前記第1オフセット値を決定するように構成されており、前記第2クロック信号は、前記第1クロック信号と非同期である、
請求項12のプロセッサ。
【請求項14】
前記コントローラは、前記第1シンクロナイザの深度に基づいて、前記第1オフセット値を決定するように構成されている、
請求項12のプロセッサ。
【請求項15】
前記コントローラは、前記第1クロックドメインの第1クロック信号の第1周波数と、前記第2クロックドメインの第2クロック信号の第2周波数との比に基づいて、前記第2オフセット値を決定するように構成されており、前記第2クロック信号は、前記第1クロック信号と非同期である、
請求項12のプロセッサ。
【請求項16】
前記コントローラは、前記第1周波数を第1の調整された周波数に調整し、又は、前記第2周波数を第2の調整された周波数に調整するための要求に応じて、前記第1オフセット値及び前記第2オフセット値をリセットするように構成されている、
請求項15のプロセッサ。
【請求項17】
前記コントローラは、
前記第1の調整された周波数が前記第2の調整された周波数よりも高いことに応じて、前記第1の調整された周波数と前記第2の調整された周波数との比に基づいて、前記書き込みポインタの第1の調整されたオフセット値を決定することと、
前記第1の調整された周波数と前記第2の調整された周波数との比に基づいて、前記読み出しポインタの第2の調整されたオフセット値を決定することと、
前記読み出しモジュールによってアクセスされていないデータを含む前記FIFOの前記エントリを空にすることと、
前記FIFOの共通エントリにおいて前記書き込みポインタ及び前記読み出しポインタを停止させることと、
前記FIFOの深度及び前記第1の調整されたオフセット値に基づいて、前記書き込みポインタの位置を更新することと、
前記書き込みポインタの位置及び前記第2の調整されたオフセット値に基づいて、前記読み出しポインタの位置を更新することと、
を行うように構成されている、
請求項16のプロセッサ。
【発明の詳細な説明】
【背景技術】
【0001】
プロセッサは、通常、1つ以上のクロック信号を利用して、プロセッサのモジュールにおけるロジック動作を同期させることによって、セットアップエラー及び競合状態等のエラーを防止する。通常のプロセッサは、プロセッサの異なる部分に対して異なるクロック信号を利用する。各プロセッサ部分は、クロックドメインと呼ばれる。異なるクロックドメインのクロック信号は、互いに相対的に独立しており、異なるクロックドメインのロジック動作を他のクロックドメインから独立して同期させることができる。例えば、プロセッサは、異なるクロックドメインを異なる周波数のクロック信号を用いて同期させることができ、それによって処理効率を向上させる。さらに、クロック信号が独立していることは、プロセッサにおけるクロック管理及び信号のルーティングの簡略化に役立つ。しかしながら、多くの場合において、異なるクロックドメインのモジュール間でデータを通信する必要がある。これにより、このような通信によってデータにメタスタビリティエラー(meta-stability errors)が生じ得る。これらのエラーは、フリップフロップのセット等のメタスタビリティ回路(シンクロナイザと呼ばれる)を、データ転送を実現するためにクロックドメイン間に含むことによって改善することができる。しかしながら、このようなメタスタビリティ回路によって、レイテンシが増加する場合があり、したがって処理効率に悪影響を及ぼす場合がある。クロックドメイン間でデータを転送するために先入れ先出しバッファ(FIFO)を利用することによってエラーを低減することもできるが、非同期FIFOは、帯域幅が低く、レイテンシが大きいことが欠点である。
【0002】
添付の図面を参照することにより、本開示をより良く理解することができ、その多くの特徴及び利点が当業者に明らかになる。異なる図面での同じ符号の使用は、類似又は同一のアイテムを示す。
【図面の簡単な説明】
【0003】
図1】いくつかの実施形態による、クロックドメイン間のデータ転送をサポートするFIFOの読み出しポインタ及び書き込みポインタにオフセット値を適用するプロセッサのブロック図である。
図2】いくつかの実施形態による、FIFOにおける等しいクロック周波数を有するクロックドメイン間のデータ転送について、書き込みポインタのオフセットも読み出しポインタのオフセットも適用しない図1のFIFOコントローラを示す図である。
図3】いくつかの実施形態による、FIFOにおける等しいクロック周波数を有するクロックドメイン間のデータ転送について、書き込みオフセット及び読み出しオフセットを適用する図1のFIFOコントローラを示す図である。
図4】いくつかの実施形態による、書き込みクロックが読み出しクロックよりも50%高い周波数を有する場合に、FIFOにおける書き込みクロックドメインと読み出しクロックドメインとの間のデータ転送について、書き込みポインタのオフセットも読み出しポインタのオフセットも適用しない図1のFIFOコントローラを示す図である。
図5】いくつかの実施形態による、書き込みクロックが読み出しクロックよりも50%高い周波数を有する場合に、FIFOにおける書き込みクロックドメインと読み出しクロックドメインとの間のデータ転送について、書き込みオフセット及び読み出しオフセットを適用する図1のFIFOコントローラを示す図である。
図6】いくつかの実施形態による、図1のプロセッサのFIFOコントローラのブロック図である。
図7】いくつかの実施形態による、クロックドメインの一方又は両方のクロック信号の周波数の変化に応じて、FIFOにおいてクロックドメイン間でデータを転送するために書き込みポインタオフセット及び読み出しポインタオフセットを設定する方法のフロー図である。
【発明を実施するための形態】
【0004】
図1図7は、クロックドメイン間の周波数比に基づいて、プロセッサのクロックドメイン間で転送されるデータのためのFIFOへの読み出しポインタ及び書き込みポインタにオフセット値を適用して、読み出しポインタ及び書き込みポインタに関連するメタスタビリティ回路によって支配される速度よりも速い速度でデータをFIFOに書き込み、又は、FIFOから読み出すことを可能にする技術を示す。プロセッサは、各クロックドメインでポインタオフセットを設定及び適用する1つ以上のコントローラを使用して、レイテンシを短縮する一方で、データがFIFOのエントリに書き込まれるまで受信クロックドメインによって当該エントリからデータが読み出されないようにし、それによってデータ転送エラーを低減する。さらに、コントローラは、クロックドメインの一方又は両方におけるクロック周波数の変化に応じて、ポインタオフセット値をリセットする。1つ以上のコントローラを使用してポインタオフセット値を設定及び適用することにより、プロセッサは、レイテンシを低減し、帯域幅を最大化しながら、クロック周波数の変化に応じてデータを正確に転送し続ける。プロセッサは、クロックドメイン間の正確なデータ転送をサポートしながら、処理効率を向上させる。
【0005】
例示のために、プロセッサは、2つの異なるクロックドメイン間で転送されたデータを記憶するための複数のエントリを有する先入れ先出しキュー(FIFO)を含む。各クロックドメインは、FIFOにアクセスするためにポインタのセットを管理するコントローラを含む。従来、FIFOエントリの読み出し又は書き込みが完了するまでデータを当該エントリに書き込まないか、当該エントリから読み出さないことを保証するために、読み出しポインタ及び書き込みポインタが、メタスタビリティ回路を介してクロックドメイン間で転送される。しかしながら、メタスタビリティ回路のタイミング及び構成は、異なるクロックドメインのクロック信号間の想定上の「ワーストケース」関係に基づいている。さらに、異なるクロック信号の周波数は、プロセッサの動作要件の変更に基づいて経時的に変化するため、想定されるワーストケース関係は、多くの場合、過度に保守的であり、処理効率に悪影響を及ぼす。本明細書で説明する技術を使用して、FIFOコントローラは、異なるクロックドメインのクロック信号の周波数に基づいて、0以外のオフセット値を、1つ以上の読み出し及び書き込みポインタに適用し、それによって、FIFOをより高速に読み出し又は書き込むことを可能にする。これにより、コントローラは、FIFOに書き込まれたデータが読み出される前に、より低いレイテンシが確立されることを保証する。例えば、クロックドメインの周波数が等しいいくつかの実施形態の場合、コントローラは、FIFOのレイテンシを数クロックサイクルだけ短縮する正の書き込みポインタオフセット値及び正の読み出しポインタオフセット値を設定する。いくつかの実施形態では、書き込みクロックの周波数は、読み出しクロックの周波数よりも高く、コントローラは、負のオフセット値を書き込みポインタに設定して、エントリがFIFO内に留まる時間を減少させ、正のオフセット値を読み出しポインタに設定して、ポインタが同期するのを待つ間に読み出し側がストールするのを防止し、これにより、レイテンシが低減し、帯域幅を増加させる。FIFOの両方のクロックドメインは、転送するデータがない場合でも、既知の周波数(又は周期)の比に基づいて、読み出しポインタ及び書き込みポインタを一定の速度で移動させる。転送速度が一定であることにより、周波数が未知であったり、マージンをとった限界を超えて変化している場合、通常であれば安全ではない妥当なオフセットを適用することができる。オフセット値を決定するために、コントローラは、FIFO深度、シンクロナイザ深度、FIFOに書き込むように書き込みモジュールの準備が完了していること及びFIFOから読み出すように読み出しモジュールの準備が完了していることを示す信号による遅延(レディ及びヘッドアップ深度)、並びに、必要なマージンを考慮して、クロックドメインの周波数を比較する。本明細書でさらに説明するように、コントローラを利用して書き込み及び読み出しポインタの位置をオフセットすることによって、プロセッサは、クロックドメインにわたるデータフローのレイテンシを低減する。
【0006】
図1は、いくつかの実施形態による、クロックドメイン間の周波数比に基づいて、プロセッサのクロックドメイン間で転送されるデータのためのFIFOへの読み出し及び書き込みポインタにオフセット値を適用して、少なくとも1つのクロックドメインのクロック信号の周波数の変化に応じてオフセット値をリセットするプロセッサ100を示す図である。プロセッサ100は、サーバ、デスクトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、計算可能なポータブル携帯電話(例えば、「スマートフォン」)、計算可能な腕時計又は他のウェアラブル製品、パーソナルデジタルアシスタント(PDA)、ゲーム機等の様々な計算可能な何れかの電子デバイスに実装される。図示した例では、プロセッサ100は、書き込みクロックドメイン102及び読み出しクロックドメイン104と呼ばれる2つのクロックドメインを含む。書き込みクロックドメイン102は、プロセッサコア(図示省略)の動作に関連する書き込みモジュール140を含む。読み出しクロックドメイン104は、プロセッサコア(図示省略)の動作に関連する読み出しモジュール145を含む。いくつかの実施形態では、プロセッサ100は、異なるプロセッサコア及び対応するキャッシュをサポートするために、書き込みクロックドメイン102及び読み出しクロックドメイン104と同様の追加のクロックドメイン(図示省略)を含み、各クロックドメインは、自身のキャッシュを含む自身のメモリ階層を有する。
【0007】
処理効率を維持するために、プロセッサ100は、書き込みクロックドメイン102及び読み出しクロックドメイン104に異なるクロック信号を供給して、これらの各々の動作を同期させる。図示した例では、書き込みクロックドメイン102に供給されるクロック信号は「WRITE CLOCK」と指定され、読み出しクロックドメイン104に供給されるクロック信号は「READ CLOCK」と指定される。本明細書でさらに説明するように、WRITE CLOCK信号とREAD CLOCK信号とは非同期であり、したがって、異なる周波数及び位相を有し得る。
【0008】
特に、プロセッサ100は、WRITE CLOCK信号及びREAD CLOCK信号を生成するために、クロックジェネレータ108を使用する。クロックジェネレータ108は、基準水晶等のクロック供給源(図示省略)によって供給された安定した発振信号に位相ロックされたタイミング信号(図示省略)に基づいてWRITE CLOCK信号及びREAD CLOCK信号を生成するように構成されたモジュールである。いくつかの実施形態では、クロックジェネレータ108は、各クロック信号のクロック周波数を独立に確立する制御信号に基づいて複数のクロック信号を選択的に組み合わせることによって、WRITE CLOCK信号及びREAD CLOCK信号を生成する。図示した例では、制御信号は、コントローラ106によって供給される。
【0009】
クロックジェネレータ108は、コントローラ106からの制御信号に基づいて、WRITE CLOCK信号及びREAD CLOCK信号の周波数を識別する。クロックジェネレータ108は、WRITE CLOCK信号及びREAD CLOCK信号を、各々の決定された周波数で生成する。いくつかの実施形態では、クロックジェネレータ108は、位相シフトされたバージョンのタイミング信号を独立に組み合わせて各クロック信号を各々の周波数で生成することによって、WRITE CLOCK信号及びREAD CLOCK信号の各々を生成する。クロックジェネレータ108は、クロック信号WRITE CLOCK及びREAD CLOCKの周波数を互いに独立に設定し、変更する。これにより、WRITE CLOCK信号とREAD CLOCK信号とが非同期になる。
【0010】
クロック信号WRITE CLOCKとクロック信号READ CLOCKとが非同期であるため、書き込みクロックドメイン102及び読み出しクロックドメイン104は、これらの対応するクロック信号のうち1つのみに基づいて、確実にデータを同期させて通信することができない。したがって、書き込みクロックドメイン102と読み出しクロックドメイン104との間のデータ通信を容易にするために、プロセッサ100は、複数のエントリを有するFIFO110を含む。ここで、各エントリは、書き込みクロックドメイン102と読み出しクロックドメイン104との両方によってアクセスされる、個別にアドレス可能な記憶位置である。例えば、いくつかの実施形態では、FIFO110は、8つのエントリを含む(すなわち、このFIFOは、8の深度を有する)。本明細書で使用する場合、FIFO110の深度とは、FIFO110のエントリ数を指す。したがって、いくつかの実施形態では、FIFO110は、4、6、8、10、12、14又は16の深度を有する。説明を容易にするために、本明細書で説明する技術に従って、書き込みクロックドメイン102から読み出しクロックドメイン104にデータを転送するためにFIFO110を利用すると仮定する。
【0011】
FIFO110にアクセスするために、書き込みクロックドメイン102は、書き込みモジュール140を含み、読み出しクロックドメイン104は、読み出しモジュール145を含む。読み出し/書き込みモジュール140,145の各々は、FIFO110にアクセスするためのポインタのセットを独立に管理する。特に、書き込みモジュール140は、書き込みポインタ115を使用して、FIFO110の書き込まれる次のエントリを示す。書き込みモジュール140は、読み出しクロックドメイン104にデータを転送するためのFIFO110内の利用可能なスロットを検出したことに応じて、1クロックサイクルのレディ信号165をアサートして、空いたFIFOエントリが、書き込みクロックドメイン102内の構成されたクロック数で利用可能であることを、プロセッサ100のコンポーネントと通信する外部ロジックに示す。書き込みクロックドメイン102内の構成されたクロック数の後に、書き込みモジュール140は、データをFIFO110のエントリに書き込み、次いで、FIFO110の次のエントリを指すように書き込みポインタ115を調整する。書き込みモジュール140は、必要なケイデンス(cadence)を維持するために、有効なデータの有無を問わずにFIFO110への書き込みを実行する。書き込まれたエントリがFIFO110の最後のエントリである場合、書き込みモジュール140は、FIFO110の最初のエントリを指すように書き込みポインタ115を調整する。したがって、FIFO110が8つのエントリを有すると仮定すると、書き込みポインタ115は、最初にエントリ0を指し、次にエントリ1を指し、次にエントリ2を指し、次にエントリ3を指し、次にエントリ4を指し、次にエントリ5を指し、次にエントリ6を指し、次にエントリ7を指し、次にエントリ0に戻る。
【0012】
読み出しモジュール145は、読み出しポインタ125を使用して、FIFO110の次のエントリが読み出されることを示す。読み出しモジュール145は、FIFO110からエントリが読み出し可能であることを検出したことに応じて、構成された数の読み出しクロックドメイン104サイクルを経てFIFO110からの読み出しが行われることを表す1クロックサイクル分のヘッドアップ信号160を、外部ロジックにアサートする。構成された数の読み出しクロックドメイン104サイクルが経過した後、読み出しモジュール145は、読み出しポインタ125によって示されたエントリを読み出し、次いで、FIFO110の次のエントリを指すように読み出しポインタ125を調整する。読み出しモジュール145は、適切なケイデンスを維持するために、転送される有効なデータの有無を問わずに転送を実行する。上記の書き込みポインタ115と同様に、読み出しエントリがFIFO110の最後のエントリである場合、読み出しモジュール145は、FIFO110の最初のエントリを指すように読み出しポインタ125を調整する。
【0013】
リセット中、書き込みポインタ115と読み出しポインタ125との両方が、FIFO110の初期エントリに対応する初期値に設定される。書き込みポインタ115と読み出しポインタ125とが等しい場合、FIFO110は空になる。書き込みポインタ115と読み出しポインタ125との間で最上位ビット(MSB)が異なるが残りのビットが等しい場合、FIFO110は満杯になる。いくつかの実施形態では、書き込みポインタ115及び読み出しポインタ125は、グレイコード(Gray code)を使用して符号化される。任意の2つの隣接するグレイコード間のコード距離は、1である。したがって、1つのグレイカウントから次のグレイカウントまでに1ビットのみが変化する。グレイコードを使用して書き込みポインタ115及び読み出しポインタ125を符号化することによって、クロックエッジ上の複数の変化するビットを同期させる必要がない。
【0014】
書き込みモジュール140及び読み出しモジュール145の各々は、これらのクロックドメインに対応するクロック信号(すなわち、クロック信号WRITE CLOCK及びREAD CLOCKの各々)によって同期される。読み出しポインタ125を書き込みクロックドメイン102と同期させ、メタスタビリティエラーを防止するために、FIFO110のエントリに対する書き込みポインタ115の位置が、書き込みポインタ同期135を介して読み出しポインタ125に送信される。同様に、書き込みポインタ115を読み出しクロックドメインと同期させる、メタスタビリティエラーを防止するために、FIFO110のエントリに対する読み出しポインタ125の位置が、読み出しポインタ同期130を介して書き込みポインタ115に送信される。書き込みポインタ同期135及び読み出しポインタ同期130の各々は、複数のフリップフロップ(図示省略)(「同期深度」と呼ばれる複数のフリップフロップ)を含み、FIFO110のエントリに書き込まれるか、当該エントリから読み出されるデータの遅延を維持する。
【0015】
いくつかの実施形態では、書き込みモジュール140は、書き込みモジュール140がFIFO110にデータを出力する準備ができていることを示すレディ信号165をアサートする。いくつかの実施形態では、書き込みモジュール140は、書き込みモジュール140がFIFO110にデータを出力する前に、所定数の書き込みクロックサイクルでレディ信号165をアサートする。いくつかの実施形態では、書き込みクロックサイクルの所定数はプログラム可能である。いくつかの実施形態では、読み出しモジュール145は、読み出しモジュール145がFIFO110からデータを読み出す準備ができる前に、所定数の読み出しクロックサイクルでヘッドアップ信号160をアサートする。いくつかの実施形態では、読み出しクロックサイクルの所定数はプログラム可能である。ヘッドアップ信号160及びレディ信号165によって、FIFO110の両側のインタフェースロジックは、データを効率的に送受信し、レイテンシを低減し、クリティカルタイミングパスを緩和することが可能になる。しかしながら、読み出しポインタ同期130、書き込みポインタ同期135、ヘッドアップ信号160及びレディ信号165によって遅延が蓄積されることにより、FIFO110におけるレイテンシが増大する。いくつかの実施形態では、書き込みモジュール140は、レディ信号165及びヘッドアップ信号160を遅延させるための状態素子(図示省略)のパイプラインを含む。
【0016】
いくつかの実施形態では、書き込みモジュール140は、コミット書き込みポインタ170を使用し、読み出しモジュール145は、コミット読み出しポインタ180を使用して、追加の書き込みポインタの状態及び読み出しポインタの状態をそれぞれ追跡する。追加の書き込みポインタの状態及び読み出しポインタの状態は、外部ロジックにとって未処理であるが、FIFO110に未だコミットされていないレディ信号165及びヘッドアップ信号160のアサートを伴うサイクル数(それぞれ、レディ信号165の遅延及びヘッドアップ信号160の遅延と呼ばれる)を反映したものである。コミット書き込みポインタ170のレディ信号165の遅延と、コミット読み出しポインタ180のヘッドアップ信号160の遅延と、が独立して構成可能であることにより、外部ロジック時間を、書き込みクロックドメイン102と読み出しクロックドメイン104との比によって制御されるように、転送されるデータをFIFO110内の利用可能な転送スロットのケイデンスで整合することができる。非同期モードでは、レディ信号165の遅延及びヘッドアップ信号160の遅延は、データ転送のレイテンシを直接増大させる。しかしながら、適切に計算された書き込みオフセット150及び読み出しオフセット155の値を用いることによって、レディ信号165及びヘッドアップ信号160がプロセッサ100の動作内で吸収されるため、システムクロックドメインの転送レイテンシを全体的に減少させることができる。いくつかの実施形態では、コミット書き込みポインタ170及びコミット読み出しポインタ180は、フリップフロップのチェーンを使用して、レディ信号165及びヘッドアップ信号160をアサートしたクロックサイクルから、書き込みモジュール140及び読み出しモジュール145が書き込み動作又は読み出し動作を実行する時間までに必要な遅延を生成する。
【0017】
レイテンシの低減及び帯域幅の増大を容易にするために、コントローラ106は、書き込みクロックと読み出しクロックとの周波数(又は、周期)の比に基づいて、書き込みオフセット150を書き込みポインタ115に適用する。また、コントローラ106は、書き込みクロックと読み出しクロックとの周波数(又は、周期)の比に基づいて、読み出しオフセット155を読み出しポインタ125に適用する。いくつかの実施形態では、書き込みオフセット150と読み出しオフセット155との両方は、正の整数である。いくつかの実施形態では、書き込みオフセット150及び読み出しオフセット155の一方又は両方は、負の整数である。書き込みオフセット150及び読み出しオフセット155の各々は、書き込みポインタ115及び読み出しポインタ125のリミットを前進(正のオフセットの場合)又は後退(負のオフセットの場合)させて、書き込みポインタ115及び読み出しポインタ125が書き込みクロックドメイン102及び読み出しクロックドメイン104間で同期するまでFIFO110が待機する場合にストールしないことによって、FIFO110が全帯域幅を維持することを可能にする。
【0018】
いくつかの実施形態では、コントローラ106は、以下の表1に示す変数に基づいて、書き込みオフセット150及び読み出しオフセット155を計算する。
【表1】
【0019】
いくつかの実施形態では、コントローラは、読み出しオフセット155を以下のように計算する。
読み出しオフセット=(ReadPeriod×(SyncDepth+HeadsUp_m-2.75))/LongPeriod
【0020】
いくつかの実施形態では、コントローラ106は、最後の除算を除き、全ての計算を整数で実行する。最後の除算では、最も近い整数まで剰余が丸められる。
【0021】
いくつかの実施形態では、WritePeriodがReadPeriod以下である場合、コントローラは、書き込みオフセット150を以下のように計算する。
書き込みオフセット=(WritePeriod×(SyncDepth+Rdy_m+1)+2×ReadPeriod-LongPeriod×FifoDepth)/LongPeriod
【0022】
いくつかの実施形態では、WritePeriodがReadPeriodよりも大きい場合、コントローラは、書き込みオフセット150を以下のように計算する。
書き込みオフセット=SyncDepth+Rdy_m-2
【0023】
いくつかの実施形態では、これらの式は、WRITE CLOCKの周波数とREAD CLOCKの周波数との比が、10対1及び1対10である場合のみに利用される。いくつかの実施形態では、コントローラ106は、書き込みオフセット150及び読み出しオフセット155を2回、すなわち、FIFO110を通る各方向について1回ずつ計算する。
【0024】
WRITE CLOCKまたはREAD CLOCKの何れかの周波数の変化に応じて、コントローラ106は、制御された方法で、書き込みオフセット150及び読み出しオフセット155の値をリセットする。いくつかの実施形態では、周波数を変更するための要求を受信したことに応じて、コントローラ106は、書き込みオフセット150及び読み出しオフセット155との両方を0に設定して、FIFO110を単純な非同期モードにする。次に、コントローラ106は、要求された周波数に一致するようにWRITE CLOCK及び/又はREAD CLOCKを調整し、WRITE CLOCK及びREAD CLOCKの調整された周波数の比に基づいて、調整された書き込みオフセット150及び読み出しオフセット155を決定する。
【0025】
図2は、いくつかの実施形態による、FIFO110への書き込み及びこのFIFOからの読み出しを行うために、0の書き込みオフセット150を書き込みポインタ115に適用し、0の読み出しオフセット155を読み出しポインタ125に適用する図1のコントローラ106の例を示す図である。特に、図2は、WRITE CLOCK信号及びREAD CLOCK信号の例に対応する波形240,241を示している。図2の例では、WRITE CLOCK信号及びREAD CLOCK信号は、同じ周波数を有する。波形240,241の各々は、複数のサイクル、すなわち、WRITE CLOCK(波形240)のサイクル250~259及びREAD CLOCK(波形241)のサイクル260~269に分けられる。また、各サイクル250~259について、図2は、書き込みモジュール140によって書き込まれるデータに関して書き込みポインタ115によって示されるFIFO110の位置を示し、各サイクル260~269について、図2は、読み出しモジュール145によって読み出されるデータに関して読み出しポインタ125によって示されるFIFO110の位置を示す。
【0026】
図2の例では、FIFO110は、8つのエントリの深度を有し、読み出しポインタ同期130及び書き込みポインタ同期135の各々は、4つのフリップフロップの深度を有し、ヘッドアップ信号160は、1サイクルの遅延を指定し、レディ信号165は、2サイクルの遅延を指定する。書き込みポインタ115と読み出しポインタ125とが等しい場合、FIFO110は空である。書き込みポインタ115と読み出しポインタ125との最上位ビット(MSB)が異なる(A又はBの何れかの値を有するものとして図2に示した)が、残りのビットが等しい場合、FIFO110は満杯である。したがって、図示した例では、書き込みモジュール140は、サイクル250の間にFIFO110の位置0に書き込み、サイクル251の間にFIFO110の位置1に書き込み、同じようにサイクル257まで書き込む。このとき、書き込みモジュール140はFIFO110の位置7に書き込む。その後、書き込みモジュール140は、位置0の読み出しが書き込みモジュール140に未だ伝達されていないため、位置0でストールする。図示した例では、読み出しモジュール145は、READ CLOCKのサイクル266の間にFIFO110の位置1からデータを読み出す。この読み出しは、データがFIFO110の位置1に書き込まれてから5サイクル後である。
【0027】
図2の例と同様に、図3の例では、WRITE CLOCK信号及びREAD CLOCK信号は、同じ周波数を有する。図3は、いくつかの実施形態による、FIFO110への書き込み及びこのFIFOからの読み出しを行うために、2の書き込みオフセット150を書き込みポインタ115に適用し、2の読み出しオフセット155を読み出しポインタ125に適用する図1のコントローラ106の例を示す図である。図2と同様に、図3は、WRITE CLOCK信号及びREAD CLOCK信号の例に対応する波形340,341を示す。波形340,341の各々は、複数のサイクル、すなわち、WRITE CLOCK(波形340)のサイクル350~359及びREAD CLOCK(波形341)のサイクル360~369に分けられる。また、各サイクル350~359について、図3は、書き込みモジュール140によって書き込まれるデータに関して書き込みポインタ115によって示されるFIFO110の位置を示し、各サイクル360~369について、図3は、読み出しモジュール145によって読み出されるデータに関して読み出しポインタ125によって示されるFIFO110の位置を示す。
【0028】
図2と同様に、図3の例では、FIFO110は、8つのエントリの深度を有し、読み出しポインタ同期130及び書き込みポインタ同期135の各々は、4つのフリップフロップの深度を有し、ヘッドアップ信号160は、1サイクルの遅延を指定し、レディ信号165は、2サイクルの遅延を指定する。書き込みポインタ115及び読み出しポインタ125の最上位ビット(MSB)は、A又はBの何れかの値を有するものとして図3に示されている。図示した例では、2の書き込みオフセット150を書き込みポインタ115に適用し、2の読み出しオフセット155を読み出しポインタ125に適用すると、書き込みモジュール140は、サイクル350の間にFIFO110の位置3に書き込み、サイクル351の間にFIFO110の位置4に書き込み、同じようにサイクル354まで書き込む。このとき、書き込みモジュール140は、FIFO110の位置7に書き込む。その後、書き込みモジュール140は、位置0に書き込む。図示した例では、読み出しモジュール145は、READ CLOCKのサイクル363の間にFIFO110の位置3からデータを読み出す。この読み出しは、データがFIFO110の位置3に書き込まれてから3サイクル後である。したがって、2の書き込みオフセット150を書き込みポインタ115に適用し、2の読み出しオフセット155を読み出しポインタ125に適用することにより、コントローラ106は、FIFO110のレイテンシを、図2に示した5サイクルから図3に示した3サイクルに短縮する。
【0029】
図4は、いくつかの実施形態による、FIFO110への書き込み及びこのFIFOからの読み出しを行うために、0の書き込みオフセット150を書き込みポインタ115に適用し、0の読み出しオフセット155を読み出しポインタ125に適用する図1のコントローラ106の例を示す図である。図4は、WRITE CLOCK信号及びREAD CLOCK信号の例に対応する波形440,441を示す。図4の例において、READ CLOCK信号は、WRITE CLOCK信号よりも50%遅い。波形440,441の各々は、複数のサイクル、すなわち、WRITE CLOCK(波形440)のサイクル450~459及びREAD CLOCK(波形441)のサイクル460~469に分けられる。また、各サイクル450~459について、図4は、書き込みモジュール140によって書き込まれるデータに関して書き込みポインタ115によって示されるFIFO110の位置を示し、各サイクル460~469について、図4は、読み出しモジュール145によって読み出されるデータに関して読み出しポインタ125によって示されるFIFO110の位置を示す。
【0030】
図2及び図3の例と同様に、図4の例では、FIFO110は、8つのエントリの深度を有し、読み出しポインタ同期130及び書き込みポインタ同期135の各々は、4つのフリップフロップの深度を有し、ヘッドアップ信号160は、1サイクルの遅延を指定し、レディ信号165は、2サイクルの遅延を指定する。書き込みポインタ115及び読み出しポインタ125の最上位ビット(MSB)は、A又はBの何れかの値を有するものとして図4に示されている。したがって、図示した例では、書き込みモジュール140は、サイクル450の間にFIFO110の位置3に書き込み、サイクル451の間にFIFO110の位置4に書き込み、サイクル452の間にFIFO110の位置5に書き込み、同じようにサイクル456まで書き込む。このとき、書き込みモジュール140は、FIFO110の位置7に書き込む。その後、書き込みモジュール140は、位置0に書き込む。図示した例では、読み出しモジュール145は、READ CLOCKのサイクル466の間にFIFO110の位置5からデータを読み出す。この読み出しは、最初のデータ値AがFIFO110の位置5に書き込まれてから、WRITE CLOCKの7サイクル後であってREAD CLOCKの5サイクル後である。
【0031】
図4の例と同様に、図5の例では、READ CLOCK信号は、WRITE CLOCK信号よりも50%遅い。図5は、いくつかの実施形態による、FIFO110への書き込み及びこのFIFOからの読み出しを行うために、-1の書き込みオフセット150を書き込みポインタ115に適用し、2の読み出しオフセット155を読み出しポインタ125に適用する図1のコントローラ106の例を示す図である。図4と同様に、図5は、WRITE CLOCK信号及びREAD CLOCK信号の例に対応する波形540,541を示す。波形540,541の各々は、複数のサイクル、すなわち、WRITE CLOCK(波形540)のサイクル550~559及びREAD CLOCK(波形541)のサイクル560~569に分けられる。また、各サイクル550~559について、図5は、書き込みモジュール140によって書き込まれるデータに関して書き込みポインタ115によって示されるFIFO110の位置を示し、各サイクル560~569について、図5は、読み出しモジュール145によって読み出されるデータに関して読み出しポインタ125によって示されるFIFO110の位置を示す。
【0032】
図4の例と同様に、図5の例では、FIFO110は、8つのエントリの深度を有し、読み出しポインタ同期130及び書き込みポインタ同期135の各々は、4つのフリップフロップの深度を有し、ヘッドアップ信号160は、1サイクルの遅延を指定し、レディ信号165は2サイクルの遅延を指定する。書き込みポインタ115及び読み出しポインタ125の最上位ビット(MSB)は、A又はBの何れかの値を有するものとして図5に示されている。図示した例では、-1の書き込みオフセット150を書き込みポインタ115に適用し、2の読み出しオフセット155を読み出しポインタ125に適用すると、書き込みモジュール140は、サイクル550の間にFIFO110の位置2に書き込み、サイクル551の間にFIFO110の位置3に書き込み、サイクル553の間にFIFOの位置4に書き込み、サイクル554の間に位置5に書き込み、同じようにサイクル557まで書き込む。このとき、書き込みモジュール140は、FIFO110の位置7に書き込む。その後、書き込みモジュール140は、サイクル559で位置0に書き込む。図示した例では、読み出しモジュール145は、READ CLOCKのサイクル565の間にFIFO110の位置5からデータを読み出す。この読み出しは、データがFIFO110の位置5に書き込まれてから、WRITE CLOCKの4サイクル後であってREAD CLOCKの3サイクル後である。したがって、-1の書き込みオフセット150を書き込みポインタ115に適用し、2の読み出しオフセット155を読み出しポインタ125に適用することにより、コントローラ106は、FIFO110のレイテンシを、図4に図示したWRITE CLOCKの7サイクル及びREAD CLOCKの5サイクルから、図5に図示したWRITE CLOCKの4サイクル及びREAD CLOCKの3サイクルに短縮する。
【0033】
図6は、いくつかの実施形態による、図1のコントローラ106のブロック図である。図示した例では、以下でさらに説明するように、コントローラ106は、書き込みオフセット150及び読み出しオフセット155を計算し、これらをコミット書き込みポインタ170及びコミット読み出しポインタ180に適用する。次に、コミット書き込みポインタ170及びコミット読み出しポインタ180は、フリップフロップのパイプラインを介して、書き込みポインタ115及び読み出しポインタ125をそれぞれ直接制御する。いくつかの実施形態では、フリップフロップのパイプラインの深度は、読み出し信号及びヘッドアップ信号の遅延(図示省略)に依存する。例えば、レディの深度が0であり、ヘッドアップの深度が0である場合、コミット書き込みポインタ170及びコミット読み出しポインタ180は、効果的に除去される。
【0034】
WRITE CLOCK及びREAD CLOCKの相対的な周波数と、FIFO110の深度と、読み出しポインタ同期130及び書き込みポインタ同期135の深度と、ヘッドアップ信号160及びレディ信号165のサイクル数と、等の他のパラメータを考慮することによって、コントローラ106は、FIFO110の位置に書き込みモジュール140によって書き込まれる時間と、FIFO110の当該位置から読み出しモジュール145によって読み出される時間と、の間の遅延中に行われるFIFO110の両側に出入りする転送の数を予測することが可能になる。コントローラ106は、書き込みオフセット150及び読み出しオフセット155のオフセット値を適用して、コミット読み出しポインタ180によって示されたFIFO110の位置から読み出しモジュール145が正しい値を読み出すことと、読み出しモジュール145によって未だ読み出されていないFIFO110の位置に書き込みモジュール140が値を上書きしないことと、を保証するのに十分なマージンを維持しつつ、コミット書き込みポインタ170及びコミット読み出しポインタ180が、これらが示した生の値(raw values)を超えて移動することができるようにする。
【0035】
図6の例では、プロセッサ100は、クロックジェネレータ108と、コントローラ106と、読み出しオフセット155と、コミット読み出しポインタ180と、読み出しポインタモジュール125と、書き込みオフセット150と、コミット書き込みポインタ170と、書き込みポインタモジュール115と、FIFO110と、を含む。読み出しポインタモジュール125は、読み出しモジュール(図示省略)の読み出しポインタを記憶するように構成されている。「RD」と示された信号のアサートに応じて、コミット読み出しポインタ180は、FIFO110の次の位置を指すように読み出しポインタモジュール125を調整し、読み出しポインタモジュール125は、読み出しポインタをFIFO110に提供する。これに応じて、FIFO110は、読み出しポインタによって示された位置を読み出し、読み出したデータを読み出しモジュールに提供する。
【0036】
書き込みポインタモジュール115は、読み出しポインタモジュール125と同様に構成されており、FIFO110にデータを書き込む。特に、書き込みポインタモジュール115は、書き込みモジュール(図示省略)の書き込みポインタを記憶する。「WRT」と示された信号のアサートに応じて、コミット書き込みポインタ170は、FIFO110の次の位置を指すように書き込みポインタモジュール115を調整し、書き込みポインタモジュール115は、書き込みモジュール(図示省略)によって提供されたデータと共に、書き込みポインタをFIFO110に提供する。これに応じて、FIFO110は、書き込みポインタによって示されたデータ位置に書き込む。
【0037】
コントローラ106は、図1図3及び図5に関して上述したように、書き込みオフセット150及び読み出しオフセット155を計算し、適用するために、FIFO110からデータを読み出し、このFIFOにデータを書き込むためのRD信号及びWRT信号を生成するように構成されている。特に、図6の例では、コントローラ106は、クロックジェネレータ108から周波数変更要求610を受信する。周波数変更要求610は、クロックジェネレータ108がWRITE CLK及びREAD CLKの一方又は両方の周波数を変更することを示す。コントローラ106は、WRITE CLK及びREAD CLKの調整された周波数に基づいて、新たな書き込みオフセット150及び読み出しオフセット155を計算する。次に、コントローラ106は、書き込みポインタ115及び読み出しポインタ125がFIFO110の第1共通エントリを通過するまで待機し、次いで、プロセッサ100のコンポーネントからのデータの転送を一時的に停止し、読み出しモジュールによってアクセスされていないデータを含むFIFO110のエントリを空にする。コントローラ106は、FIFO110の第2共通エントリで書き込みポインタ115及び読み出しポインタ125を停止させ、新たな書き込みオフセット150及び新たな読み出しオフセット155を適用する。次に、コントローラ106は、書き込みポインタ115及び読み出しポインタ150を再開し、プロセッサ100のコンポーネントからのデータ転送を再度有効にする。
【0038】
図7は、いくつかの実施形態による、クロックドメインの一方又は両方のクロック信号の周波数の変化に応じて、FIFOにおいてクロックドメイン間でデータを転送するために書き込みオフセット150及び読み出しオフセット155を設定する方法700のフロー図である。方法700は、図1に示すプロセッサ100のいくつかの実施形態において実施される。コントローラ106は、WRITE CLK及びREAD CLKの一方又は両方が周波数を変更する前後で新たな書き込みオフセット150又は新たな読み出しオフセット155が必要になる毎に、方法700を実行する。方法700は、FIFO110を介した転送を停止することと、全ての保留エントリをFIFO110からフラッシュすることと、書き込みポインタ115及び読み出しポインタ125を一定の位置で停止することと、新たな書き込みオフセット150及び読み出しオフセット155の値を適用することと、書き込みポインタ115及び読み出しポインタ125を制御された方法で再開することと、最終的に、FIFO110を介したデータ転送を再開することと、によって、書き込みオフセット150及び読み出しオフセット155が変化した場合にデータが失われたり複製されたりしないことを保証する。
【0039】
いくつかの実施形態では、コントローラ106は、方法700の2つの並列インスタンスを動作させ、すなわち、一方を書き込みクロックドメイン102のために動作させ、他方を読み出しクロックドメイン104のために動作させる。方法700のいくつかの点で、書き込みポインタ115及び読み出しポインタ125は、方法700の読み出しクロックドメイン102及び書き込みクロックドメイン104の並列バージョンが、適切な動作に必要とされるのと同時に又はほぼ同時に同じブロック702~724にあるように、協調して動作する必要がある。
【0040】
ブロック702において、コントローラ106は、周波数の変化が途中であるかどうか、及び、新たな書き込みオフセット150及び読み出しオフセット155が必要であるかどうかを判別する。必要でない場合、方法フローは、ブロック702に戻る。新たな書き込みオフセット150及び読み出しオフセット155が必要である場合、ブロック704において、コントローラ106は、新たな書き込みオフセット150及び読み出しオフセット155を計算する。ブロック706において、コントローラ106は、読み出しポインタ115及び書き込みポインタ125が第1共通基準点を通過するまで待機する。共通基準点は、書き込みクロックドメイン102及び読み出しクロックドメイン104内の方法700の各インスタンスが定めた(agree upon)FIFO110内の既定の位置である。いくつかの実施形態では、共通基準点は、FIFO110のエントリ0Aである。いくつかの実施形態では、共通基準点は、コミット書き込みポインタ170及びコミット読み出しポインタ180によって追跡されるFIFO110のエントリである。コミット書き込みポインタ170及びコミット読み出しポインタ180を使用することにより、レディ信号165の全てのパルスが、対応するヘッドアップ信号160を有することと、ブロック708に進むときに未だFIFO110内にあるエントリが読み出しモジュール145によって依然として読み出され、ヘッドアップ信号160の対応するパルスを有することと、が保証される。
【0041】
ブロック708において、書き込みポインタ125及び読み出しポインタ115が第1共通基準点を通過した後、コントローラ106は、レディ信号165及びヘッドアップ信号160の値を強制的にローにして、転送が利用可能でないことを、プロセッサ100に接続されたコンポーネントに通知する。しかしながら、プロセッサ100の外部のコンポーネントがストールされている間、書き込みポインタ115及び読み出しポインタ125は、方法700を実行するためにプロセッサ100内で動作し続ける。ブロック710において、コントローラ106は、読み出しモジュール145によって読み出されるのを待機しているFIFO110内の任意のデータを排出する。いくつかの実施形態では、コミット書き込みポインタ170及びコミット読み出しポインタ180を介してレディ信号165及びヘッドアップ信号160を強制的にローにすることにより、方法700がブロック708に到達したときにFIFO110を介した任意の転送が、依然として適切なヘッドアップ信号160を有することが保証される。これは、データの消失を防ぐために、コミット書き込みポインタ170及びコミット読み出しポインタ180内で使用されるフリップフロップパイプラインが、書き込みポインタ115及び読み出しポインタ125をそれぞれ動作させるための適切な値を含むためである。
【0042】
ブロック712において、第2共通基準点にて、先ず、コミット書き込みポインタ170が停止し、次に、書き込みポインタ115が停止する。次に、コミット読み出しポインタ180及び読み出しポインタ125は、第2共通基準点で停止する。いくつかの実施形態では、第2共通基準点は、FIFO110のエントリ0Bである。書き込みポインタ115及び読み出しポインタ125が停止すると、コントローラ106は、ブロック714において、新たな読み出し書き込みオフセット150及び新たな読み出しオフセット155を適用する。ブロック716において、コントローラ106は、読み出しポインタ同期130が第2共通基準点に到達したことを検出すると、書き込みポインタ115を再開する。ブロック718において、読み出しポインタ125は、書き込みポインタ同期136が第2共通基準点を通過したことを検出する。コミット読み出しポインタ180は、内部フリップフロップパイプラインをバイパスし、読み出しポインタ125及びコミット読み出しポインタ180の移動を同時に開始し、コミット読み出しポインタ180及び読み出しポインタ125間のパイプラインのフリップフロップの数だけコミット読み出しポインタ180を進める。コミット読み出しポインタ180を用いた実施形態では、ブロック718は、書き込みポインタ115と読み出しポインタ125との時間差が、コミット読み出しポインタ180のパイプラインの深度に基づいてスキューされないことを保証する。
【0043】
ブロック720において、コントローラ106は、書き込みポインタ115及び読み出しポインタ125が第1共通基準点に戻るまで待機し、書き込みポインタ115及び読み出しポインタ125が適切な時間差になるまでの時間を与える。ブロック722において、コントローラ106は、レディ信号165及びヘッドアップ信号160を新たなプロセッサ100の構成のための適切な値に戻すことによって、通常のトラフィックを有効にする。ブロック724において、コントローラ106は、方法700が完了したことを示す信号をクロックジェネレータ108に送信する。
【0044】
いくつかの実施形態では、方法は、プロセッサの第1クロックドメインにおいて、バッファの複数のエントリに対する書き込みポインタの位置を、バッファの深度及び第1オフセット値に基づいてインクリメントすることと、プロセッサの書き込みモジュールにおいて、書き込みポインタがバッファの複数のエントリのうち第1エントリを示したことに応じて、第1エントリにアクセスすることと、プロセッサの第2クロックドメインにおいて、バッファの複数のエントリに対する読み出しポインタの位置を、書き込みポインタの位置及び第2オフセット値に基づいてインクリメントすることであって、第2オフセット値は、第1クロックドメインの第1クロック信号の第1周波数と、第2クロックドメインの第2クロック信号の第2周波数との比に基づいており、第2クロック信号は、第1クロック信号と非同期である、ことと、プロセッサの読み出しモジュールにおいて、読み出しポインタがバッファの複数のエントリのうち第1エントリを示したことに応じて、第1エントリにアクセスすることと、を含む。一態様では、第1オフセット値は、第1周波数と第2周波数との比に基づいている。別の態様では、第1オフセット値は、第1クロックドメインと第2クロックドメインとの間のシンクロナイザの深度に基づいている。
【0045】
一態様では、方法は、書き込みモジュールがバッファにアクセスすることを示す信号をアサートすることを含み、第1オフセット値は、信号のアサートと、バッファへの書き込みモジュールのアクセスと、の間の第1クロック信号のクロックサイクル数に基づいている。別の態様では、第2オフセット値は、第1クロックドメインと第2クロックドメインとの間のシンクロナイザの深度に基づいている。さらに別の態様では、方法は、第1周波数を第1の調整された周波数に調整し、又は、第2周波数を第2の調整された周波数に調整するための要求に応じて、第1オフセット値及び第2オフセット値をリセットすることを含む。一態様では、第1オフセット値及び第2オフセット値をリセットすることは、第1の調整された周波数が第2の調整された周波数よりも高いことに応じて、第1の調整された周波数と第2の調整された周波数との比に基づいて、書き込みポインタの第1の調整されたオフセット値を決定することと、第1の調整された周波数と第2の調整された周波数との比に基づいて、読み出しポインタの第2の調整されたオフセット値を決定することと、読み出しモジュールによってアクセスされていないデータを含むバッファのエントリを空にすることと、バッファの共通エントリにおいて書き込みポインタ及び読み出しポインタを停止させることと、第1の調整されたオフセット値に基づいて、書き込みポインタの位置をインクリメントすることと、第2の調整されたオフセット値に基づいて、読み出しポインタの位置をインクリメントすることと、を含む。
【0046】
いくつかの実施形態では、方法は、プロセッサの第1クロックドメインにおいて、第1オフセット値に基づいて、深度を有する先入れ先出しバッファ(FIFO)に対する書き込みポインタの位置をオフセットすることと、プロセッサの第2クロックドメインにおいて、第2オフセット値に基づいて、FIFOに対する読み出しポインタの位置をオフセットすることであって、第2オフセット値は、第1クロックドメインの第1クロック信号の第1周期と、第2クロックドメインの第2クロック信号の第2周期と、の比に基づいている、ことと、プロセッサの書き込みモジュールにおいて、書き込みポインタの位置に基づいて、FIFOの第1エントリにアクセスすることと、第1エントリにアクセスしたことに応じて、FIFOに対する書き込みポインタをインクリメントすることと、プロセッサの読み出しモジュールにおいて、FIFOに対する読み出しポインタの位置に基づいて、FIFOの第1エントリから読み出すことと、第1エントリから読み出したことに応じて、FIFOに対する読み出しポインタをインクリメントすることと、を含む。一態様では、第1オフセット値は、第1周期と第2周期との比に基づいている。別の態様では、第1オフセット値は、第1クロックドメインと第2クロックドメインとの間のシンクロナイザの深度に基づいている。
【0047】
さらに別の態様では、方法は、書き込みモジュールがバッファにアクセスすることを示す信号をアサートすることを含み、第1オフセット値は、信号のアサートと、バッファへの書き込みモジュールのアクセスと、の間の第1クロック信号のクロックサイクル数に基づいている。さらに別の態様では、方法は、第1周期を第1の調整された周期に調整し、又は、第2周期を第2の調整された周期に調整するための要求に応じて、第1オフセット値及び第2オフセット値をリセットすることを含む。別の態様では、第1オフセット値及び第2オフセット値をリセットすることは、第1の調整された周波数が第2の調整された周波数よりも高いことに応じて、第1の調整された周波数と第2の調整された周波数との比に基づいて、書き込みポインタの第1の調整されたオフセット値を決定することと、第1の調整された周波数と第2の調整された周波数との比に基づいて、読み出しポインタの第2の調整されたオフセット値を決定することと、読み出しモジュールによってアクセスされていないデータを含むバッファのエントリを空にすることと、バッファの共通エントリにおいて書き込みポインタ及び読み出しポインタを停止させることと、第1の調整されたオフセット値に基づいて、書き込みポインタの位置をインクリメントすることと、第2の調整されたオフセット値に基づいて、読み出しポインタの位置をインクリメントすることと、を含む。
【0048】
いくつかの実施形態では、プロセッサは、先入れ先出しバッファ(FIFO)と、第1クロックドメインであって、書き込みポインタと、第1シンクロナイザと、FIFOに対する書き込みポインタの位置に応じてFIFOの第1エントリにアクセスするように構成された書き込みモジュールであって、書き込みポインタの位置がFIFOの深度及び第1オフセット値に基づいている、書き込みモジュールと、を含む第1クロックドメインと、第2クロックドメインであって、読み出しポインタと、第2シンクロナイザと、FIFOに対する読み出しポインタの位置に応じてFIFOの第1エントリにアクセスするように構成された読み出しモジュールであって、読み出しポインタの位置が書き込みポインタの位置及び第2オフセット値に基づいている、読み出しモジュールと、を含む第2クロックドメインと、第1オフセット値及び第2オフセット値を決定するように構成されたコントローラと、を含む。一態様では、コントローラは、第1クロックドメインの第1クロック信号の第1周波数と、第2クロックドメインの第2クロック信号の第2周波数との比に基づいて、第1オフセット値を決定するように構成されており、第2クロック信号は、第1クロック信号と非同期である。
【0049】
別の態様では、コントローラは、第1シンクロナイザの深度に基づいて、第1オフセット値を決定するように構成されている。さらに別の態様では、書き込みモジュールは、書き込みモジュールがバッファにアクセスすることを示す信号をアサートするように構成されており、コントローラは、信号のアサートと、バッファへの書き込みモジュールのアクセスと、の間の第1クロック信号のクロックサイクル数に基づいて、第1オフセット値を決定するように構成されている。さらに別の態様では、コントローラは、第1クロックドメインの第1クロック信号の第1周波数と、第2クロックドメインの第2クロック信号の第2周波数との比に基づいて、第2オフセット値を決定するように構成されており、第2クロック信号は、第1クロック信号と非同期である。別の態様では、コントローラは、第1周波数を第1の調整された周波数に調整し、又は、第2周波数を第2の調整された周波数に調整するための要求に応じて、第1オフセット値及び第2オフセット値をリセットするように構成されている。さらに別の態様では、コントローラは、第1の調整された周波数が第2の調整された周波数よりも高いことに応じて、第1の調整された周波数と第2の調整された周波数との比に基づいて、書き込みポインタの第1の調整されたオフセット値を決定することと、第1の調整された周波数と第2の調整された周波数との比に基づいて、読み出しポインタの第2の調整されたオフセット値を決定することと、読み出しモジュールによってアクセスされていないデータを含むFIFOのエントリを空にすることと、FIFOの共通エントリにおいて書き込みポインタ及び読み出しポインタを停止させることと、FIFOの深度及び第1の調整されたオフセット値に基づいて、書き込みポインタの位置をインクリメントすることと、書き込みポインタの位置及び第2の調整されたオフセット値に基づいて、読み出しポインタの位置をインクリメントすることと、を行うように構成されている。
【0050】
いくつかの実施形態では、上記の装置及び技術は、図1図7を参照して上述したマルチメディアシステム等の1つ以上の集積回路(IC)デバイス(集積回路パッケージ又はマイクロチップとも呼ばれる)を備えるシステムに実装される。これらのICデバイスの設計及び製造には、電子設計自動化(EDA)及びコンピュータ支援設計(CAD)ソフトウェアツールが使用される。これらの設計ツールは、通常、1つ以上のソフトウェアプログラムとして表される。1つ以上のソフトウェアプログラムは、回路を製造するための製造システムを設計又は適合するための処理の少なくとも一部を実行するように1つ以上のICデバイスの回路を表すコードで動作するようにコンピュータシステムを操作する、コンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、又は、命令及びデータの組み合わせを含むことができる。設計ツール又は製造ツールを表すソフトウェア命令は、通常、コンピューティングシステムがアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ICデバイスの設計又は製造の1つ以上のフェーズを表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶されてもよいし、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体からアクセスされてもよい。
【0051】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。かかる記憶媒体には、限定されないが、光媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、キャッシュ)、不揮発性メモリ(例えば、読み出し専用メモリ(ROM)、フラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体は、コンピュータシステムに内蔵されてもよいし(例えば、システムRAM又はROM)、コンピュータシステムに固定的に取り付けられてもよいし(例えば、磁気ハードドライブ)、コンピュータシステムに着脱可能に取り付けられてもよいし(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)、有線又は無線のネットワークを介してコンピュータシステムに接続されてもよい(例えば、ネットワークアクセス可能なストレージ(NAS))。
【0052】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ等のソリッドステート記憶デバイス、キャッシュ、ランダムアクセスメモリ(RAM)、又は、他の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【0053】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0054】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。
図1
図2
図3
図4
図5
図6
図7