本発明は、さまざまに変形されたり、代替形態を取りうるが、その特定の実施形態が、例として図面に図示され、かつ本明細書に詳細に記載される。しかし、図面およびその詳細な説明は、開示の形態に本発明を限定することを意図するものではなく、逆に、本発明が、添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれるすべての変形例、均等物および代替例を含むことを意図することが理解されるべきである。本願にわたり、「しうる」、「してもよい」との文言は、許容を示す意味(すなわち、可能性がある、可能であること)で用いられており、義務的な意味(すなわち必須)ではない点に留意されたい。
図1を参照すると、双方向データ転送の非対称制御を備えたシステムの一実施形態のブロック図が示される。システム10は、複数の信号パスおよびコネクタ150を介してスレーブデバイス110A〜110nに結合されているマスタコントローラ100を備える。図に示すように、信号パスには、双方向(bidir)データパス114、コマンドパス116および巡回冗長符号(CRC)情報パスおよびクロック118が含まれる。「スレーブデバイス110n」は、任意の数のスレーブデバイスを例示してもよいことを示す点に留意されたい。また、数字と文字を含む参照符号を付された要素が、数字のみによって参照されることもある点にも留意されたい。例えば、スレーブデバイス110Aは、必要に応じて「スレーブデバイス110」と呼ばれることもある。
図中の実施形態では、マスタコントローラ100は、制御ユニット101を備え、制御ユニット101は送信ユニット101、受信ユニット102およびクロックユニット106に結合されている。一実装では、システム10は、メモリサブシステムの例であってもよい。このため、マスタコントローラ100はメモリコントローラであり、スレーブデバイス110A〜110nはメモリデバイスなどであり、例えば、メモリデバイスのダイナミックアクセスメモリ(DRAM)の一員であるデバイスなどである。このため、コネクタ150は、複数のスレーブデバイス110などのメモリデバイスを含むメモリモジュールなどで用いられている「フィンガー」コネクタなどである。しかし、一般に、システム10は、双方向データパスを使用するシステムであればどのようなタイプのものも例示することができる点に留意されたい。
一実施形態では、コマンドパス116は、シングルエンド信号パスを介してアドレスおよび制御の情報を伝達しうる。双方向(bidir)データパス114は、双方向のシングルエンド信号パスを介してデータを双方向に伝達しうる。双方向データパス114は、多くの8ビット(バイト幅)のデータパスを含みうる。例えば、データパス全体は64ビット幅であるが、データパス全体がバイトサイズの部分に分割されてもよい。データパス全体が任意の数のデータビットを有してもよく、異なるサイズの部分に分割されてもよい点に留意されたい。CRCパス112は、一方向のシングルエンド信号パスを介してスレーブ110からマスタコントローラ100にCRC情報を伝達しうる。一実施形態では、CRCパス112には2つのCRCビットを伝達するために2つの信号パスが含まれるが、信号パスの数やビット数は任意に設定することができる。また、クロックパス118は、各スレーブデバイス110にクロック信号0、1、2および3を伝達しうる。一実装では、各クロック信号0〜3は、差動信号の対として伝達されうる。
高いデータ速度では、スレーブデバイス110またはマスタコントローラ100がビット誤りを受信する確率が非常に高くなる。このため、被保護ブロック内の複数のビット誤りを確実に検出する誤り検出コードにより、転送を保護することが必要となりうる。一実施形態では、このような複数のビット誤り検出を提供するために、CRCコードが使用されうる。より詳細には、図2に示すように、スレーブデバイス内のロジックとマスタコントローラ100への誤りの報告を簡略化するために、スレーブデバイス110は、自身が生成中のデータか自身が受信中のデータに基づいてCRCを計算する。このため、マスタコントローラ100にCRC情報を送り返すために、1つ以上の一方向CRC信号パス112が使用されうる。図2に示すように、CRC生成ユニット119Aは、自身の内部データに基づいてCRCを計算し、CRCデータをマスタコントローラ100に送り返す。リンクのいずれかの方向で誤りが検出されると、マスタコントローラ100は動作を再試行することによって誤りを訂正しうる。
一実施形態では、CRCが、マスタコントローラ100に到着したときに、CRCが保護しているデータブロックと同時にCRCが利用可能となるように、CRC情報が、スレーブデバイス110からマスタコントローラ100に転送中のデータと並列に計算され送信されてもよい。一実施形態では、CRCの計算に伴う遅延は、ライトからリードへの遷移およびリードからライトへの遷移の間にデータパスで発生する遅延によって緩和されうる。
上で説明したように、多くの従来のシステムは、例えば、クロック位相のリカバリ、チャネル等化、誤り検出などの制御機能を両方の通信デバイスに実装することによって、高速の双方向通信を制御している。しかし、下記に詳細に説明するように、スレーブデバイス110は簡略化することができる。このため、マスタコントローラ100は、スレーブデバイス110から受信された情報に基づいて、送信する書き込みデータの信号特性(例えば位相など)を動的かつ適応的に調整することができる制御機能を備え、スレーブデバイス110が正確にデータを読み出せるようにすることができる。また、マスタコントローラ100は、マスタコントローラ100が、スレーブデバイス110によって送信されるデータを受信することができるように、自身の内部受信器の特性を調整することができる。更に、マスタコントローラ100は、アドレスおよびコマンドの情報が正しくサンプリングされるように、スレーブデバイス110に供給するクロック信号118の位相を調整しうる。
より詳細には、高いデータ速度では、バス中の異なる信号用の送信パスにおける遅延が不確実であるため、これらの信号の受信器のサンプルクロックをビット単位で位相調整する必要がある。この回路をスレーブデバイス110に使用せずに済むように、マスタコントローラ100は、自身の送信クロックおよびデータ信号の位相を調整し、これにより、スレーブに複雑な移送シフト回路を使用せずに済むようにする。このため、制御ユニット101は、スレーブデバイス110から受信されるデータに基づいて位相情報を計算し、これが、マスタコントローラ100内でさまざまなクロックエッジの位相を調整するために使用されうる。例えば、制御ユニット101は、このような情報を、CRCデータおよび読み出しデータとして受け取ると、送信ユニット102、受信ユニット104およびクロックユニット106内のそれぞれの位相トラッキングおよび調整回路103、105および107を制御しうる。
図2を参照すると、図1のスレーブデバイスの一実施形態のより詳細な態様を例示する図が示される。スレーブデバイス110Aは、図1に示したどのスレーブデバイスを例示してもよい点に留意されたい。図3のスレーブデバイス110Aは、アドレスおよびコマンド信号116を受信するように結合されたコアロジック255を有する。また、スレーブデバイス110Aは、bidirデータパス114の1つの信号パスとVRef信号とを受信するために結合されたデータ入力バッファ209も備える。バッファ209の書き込みデータ出力は、フリップフロップ(FF)208の入力に結合されている。FF208の出力は、CRCユニット119Aの入力と、記憶域120Aとに結合されている。記憶域120Aからの読み出しデータ出力信号は、FF206の入力に結合されている。FF206の出力は、データ出力バッファ210に結合され、これはbidirデータパス114の同じ信号パスに結合されている。また、読み出しデータ出力信号は、CRCユニット119Aの入力にも結合されている。
CRCユニット119Aの出力は、2入力マルチプレクサ250の一方の入力に結合されている。マルチプレクサ250の出力は、FF205の入力に結合されている。FF205の出力は、出力バッファ211に結合され、出力バッファ211は、CRCおよび信号パス112の1つの信号パスに結合されている。マルチプレクサ250のもう一方の入力は、読み出しデータのデータバイトである。CRC信号パスが、読み出しデータと多重されうる。マルチプレクサの入力の選択は、スレーブコアロジック255によって提供される。1本の信号パス、このため1データビットのみが図示されているが、各スレーブデバイスが操作するデータビットの数に応じて、データ信号パスの本数は任意に設定できる点に留意されたい。例えば、スレーブデバイスがDRAMデバイスである実施形態では、各デバイスに、4、8、16などのデータパス信号が使用されてもよい。
図中の実施形態では、クロック118は、1.6GHzの差動信号として入力バッファ219に供給されるが、ほかの周波数が使用されてもよいことが考察される。バッファ219の出力は、FF218のクロック入力に結合されるシングルエンドクロック信号である。FF218の出力は、インバータ217を介してFF218の入力に結合されており、このため、FF218は、1.6GHzのクロックを2分割しているFF218の800MHzの出力は、スレーブコアロジック255内の回路にクロックを供給するためにも使用される。FF218のクリア入力は、スレーブコアロジック255に結合されており、「トレーニングリセット」と示されている。図に示すように、FF205、FF206、FF208およびFF218は、それぞれ1.6GHzのクロックによってクロック供給されている。更に、FF205、FF206およびFF208は、デュアルエッジフリップフロップとして図示されており、入力クロック信号の立ち上がりおよび立ち下りの両方で「D」入力をラッチするように構成されている。したがって、読み出しデータ、書き込みデータおよびCRC情報を、各データパスで3.2GHzで伝達することができる。
一実施形態では、書き込みデータが受信されると、このデータがFF208によってラッチされ、記憶域120Aに記憶される。各種の実施形態では、記憶域120Aは、データを記憶することができる記憶域であればどのようなタイプであってもよい。例えば、一実装では、記憶域120Aは、行と列に配置されたメモリストレージアレイであり、代表的なDRAMデバイスに使用されているような対応するセンスアンプを備えていてもよい。アドレスコマンド信号パス116で受信したアドレスとコマンドに基づいて、ストレージアレイの特定の行と列がアクセスされうる。また、記憶域120Aは、独立してアクセス可能なレジスタを1つ以上備えてもよく、これも、アドレスコマンド信号パス116で受信したアドレスとコマンドに基づいてアクセスすることができる。
上で説明したように、マルチプレクサ250を介して、スレーブデバイス110からマスタコントローラ100にCRC情報が送信される。図2に示すように、CRC信号パス112は、読み出しデータサイクルの一部の間に、データバイトのデータを伝達しうる。より詳細には、一実施形態では、2本のCRC信号パスが、8本のデータパスを保護しうる。スレーブデバイス110からマスタコントローラ100への転送時には、データブロックおよびCRCがすべて受信されるまで、ブロックのデータが正しいことを確認することができない。しかし、これにより、システムの前方向の進捗(forward progress)において重要なワードである可能性があるブロックの先頭部分のレイテンシが増大してしまう。
したがって、一実施形態では、この重要なワードとブロックの残りとの間に追加のインラインエラーコードを挿入することによって、重要なワードが更に保護されうる。例えば、読み出しデータブロックの先頭で重要なワード(例えばバイト0)を繰り返すことによって、追加の誤り検出情報が実装されうる。重要なワードを2回送信することによって、マスタコントローラ100は、2つのコピー間で各ビットが同じであることを検証することができ、この重要なワードの誤り率が実質的に低下し、このため、ブロックのCRCを完全に受信する前に、重要なワードを、正しいデータとして扱えるようになる。換言すると、リードオペレーション中に、スレーブデバイス110は、読み出しブロックの最初の2ビートまたはビットタイミング中に重要なワードを送信することができる。一実施形態では、重要な先頭データワードの2つのコピーのための空きを作るために、データバイトの1つ(例えばバイト3)が、読み出しブロックの最初の4ビートの間にCRCパスに出力されうる。バス効率に対する影響を最小限に押さえると共に、CRCから十分な誤り保護を得るために、CRCが計算されるブロックすべてに、データがグループ化されうるという点に留意されたい。
図3の説明に関連して後で詳細に説明するように、動作中に、マスタコントローラ100は、送信される書き込みデータの信号特性(例えば位相など)、およびその内部の受信器特性を動的かつ適応的に調整し、スレーブデバイス110に供給するクロック信号118の位相を調整しうる。より詳細には、上で説明したように、受信ユニット104は、サンプルクロック位相調整回路105を備え、サンプルクロック位相調整回路105はバン−バン(bang-bang)位相検出器(図示せず)を備えうる。よって、マスタコントローラ100がスレーブデバイス110からデータを受信している間はいつでも、受信ユニット104は、スレーブデバイス110によって送信されるデータをより最適に受信するために、バン−バン位相検出器を使用して、自身のローカルサンプルクロック位相を調整しうる。また、マスタコントローラ100は、クロック位相調整ロジック107も備え、これは、各クロック信号120の位相を調整するために使用されうる。例えば、電源投入リセットなどの初期化処理中に、マスタコントローラ100は、各スレーブデバイスが、アドレスおよびコマンド信号116を正しくサンプリングできるようにするために、各クロック信号118の位相を調整しうる。更に、マスタコントローラ100は、送信データ位相調整ロジック103も備え、これは、スレーブデバイス110Aに送信される書き込みデータの位相を調整するために使用されうる。初期化中、および動作中に所定の間隔で、マスタコントローラ100は、スレーブデバイス110Aが、書き込みデータをより最適に受信できるようにするために、送信データの位相を調整しうる。
図3は、図1および図2に示した実施形態の動作を示すフローチャートである。上で説明したように、マスタコントローラ100は、スレーブデバイスが正確に受信できるデータを送信し、スレーブデバイスが送信するデータを正確に受信できるように、自身のクロック特性、送信特性および受信特性を適応的に変更するように構成されうる。
図4は、図1に示したシステムの一実装を示す図である。図に示すように、システム10は、デュアルインラインメモリモジュール(DIMM)410に結合されたメモリコントローラ100を有するメモリサブシステムである。このため、メモリコントローラ100は、図1に示したマスタコントローラ100を例示しており、DIMM410は、図1のスレーブデバイス110を例示している複数のDRAMデバイス110Aを備える。
図中の実施形態では、図1のクロック信号120がMCLK0〜MCLK3として図示されている。また、上で説明したように、MCLK1は、最初の5つのDRAMデバイス110に結合されており、MCLK0は、続く4つのDRAMデバイス110に結合されている。同様に、MCLK2およびMCLK3は、続く5つのDRAMデバイスおよび4つのDRAMデバイスに結合されている。図中の実施形態では、アドレス/コマンド116信号パスは、DRAMデバイス110に並列に結合されているが、DIMMの一端から他端に結合されている。このため、アドレス/コマンド信号のこの特定の経路により、特にDRAMデバイス同士が離れるほど、DRAMデバイス間で信号のスキューが生じる。後で詳しく説明するように、DRAMデバイス110のグループに供給される各クロックは、ほかの各クロックとは独立して位相調整されうる。
図1〜図4と、図3のブロック300の開始点とを併せて参照すると、リセットまたは電源投入状態(ブロック300)後に、マスタコントローラ100は、各スレーブがアドレスおよびコマンド情報を正しくラッチすることができるように、各クロック信号を独立して整合させうる(ブロック305)。より詳細には、一実施形態では、共通クロックに結合されたスレーブデバイスのクロックスキューが同程度になるように、クロック信号(例えばクロック0、クロック1、クロック2など)のそれぞれが、1つ以上の個々のスレーブデバイス110に配線されうる(may be routed)。また、図4に示すように、アドレス/コマンド信号パス116は、全てのスレーブデバイスに並列に、DIMM410の一端から他端に配線されている。このように、あるクロック(例えばMCLK1)を有するあるスレーブデバイス(例えば110A)でのアドレス/コマンド信号のタイミングが、別のクロック(例えばMCLK2)を有する別のスレーブデバイス(例えば110n)でのアドレス/コマンド信号のタイミングと大きくずれていることがある。しかし、共通クロックが結合されているすべてのスレーブデバイスが、アドレス/コマンド信号を正しく捕捉することができるように、共通クロックの位相が調整されるように、アドレス/コマンド信号のスキューが、共通クロックに結合されているスレーブデバイス間で十分近くなる。
このため、一実施形態では、クロック118を整合させるために、各スレーブデバイス110は、記憶域120Aに所定値を記憶させうる。この値は、スレーブデバイス(例えば110A)に特定のアドレスまたはコマンドを送信することによってアクセスすることができ、これにより、格納されている値がスレーブデバイス110からマスタコントローラ100に送信されうる。スレーブデバイス110Aのクロック分周回路(例えばFF218)が、入力クロックを正しくサンプリングしている(ブロック310)場合、マスタコントローラ100は、記憶域120Aに記憶されている正しい値を読み出すことができる。しかし、良好な初期マージンを得るために、クロック位相調整回路107は、2サイクルの間、クロック位相をスイープしうる。一実施形態では、制御ユニット101は、クロック位相を調整するために、位相調整回路107にデジタル信号を供給しうる(ブロック310)。クロック位相の調整中に、読み出しデータが継続的にチェックされ、制御ユニット101は、最も正確な結果が得られたクロック位相調整範囲を決定し、スレーブデバイス110Aがマスタクロックにロックされているかどうかを判定しうる(ブロック315)。スレーブデバイス分周器(FF218)の1つ以上が間違ったエッジで1.6GHzのクロックを捕捉していることが起こりうる。このような場合、スレーブロジック255は、FF218に、トレーニングリセット信号を供給しうる(ブロック320)。各スレーブデバイス110がそれぞれのマスタクロックにロックされると(ブロック315)、動作はブロック325に進み、マスタコントローラ100の受信ユニット104が、スレーブデバイス110から読み出しデータを正しく受信するためにトレーニングされうる。
一実装では、位相アライメントトレーニング中に、データがスレーブデバイス110に書き込まれて、記憶されうる点に留意されたい。しかし、一部の実施形態では、トレーニング中にしか使用されない特別なレジスタを設けることが望ましくないこともある。このことは、特にDRAMデバイスについていえる。このため、DRAMデバイスのセンスアンプが、トレーニング中にスクラッチパッド記憶域として使用されうる。より詳細には、所定のメモリセルからビット値が読み出されると、そのセルに記憶されている電荷がセンスアンプに転送されて、その後読み出される。しかし、個々の記憶セルにそのデータを書き込む必要はない。
位相調整回路105は、読み出しデータとCRCデータを正確に受信するために、サンプルクロック位相を調整しうる。一実施形態では、制御ユニット101は、受信ユニット104が読み出しデータに最適にロックされているかどうかを判定する回路を備えうる。受信ユニット104が読み出しデータに最適にはロックされていない場合(ブロック330)、制御ユニット101は、位相調整回路105に制御信号を供給しうる。より詳細には、一実施形態では、位相検出および調整回路105内のバン−バン位相検出器を使用して、CRCデータおよび読み出しデータで2つのサンプリングが行われうる。1つのサンプリングはデータの中央で、1つのサンプリングはデータの端で行われうる。これらのサンプリングの結果から、制御ユニット101は、サンプリングが早く行われたか、遅く行われたか、中程度で行われたかを判定しうる。この結果に基づいて、制御ユニット101は、受信位相調整回路105の位相を調整しうる(ブロック335)。受信ユニット104が読み出しデータにロックされている場合(ブロック330)、動作はブロック340に進み、送信ユニット102は、スレーブデバイスが読み出すことができるデータを書き込むためにトレーニングされうる。なお、通常動作中は、読み出しデータが受信されるたびに、受信ユニット104は継続的にトレーニングされうる。
受信ユニット104が読み出しデータおよびCRCデータにロックされているとマスタコントローラ100が判定した(ブロック330)場合、マスタコントローラ100は、スレーブデバイス110が正確に受信することができるデータを送信するために、送信ユニット102をトレーニングしようと試みる。より詳細には、マスタコントローラ100は、スレーブデバイス110に書き込みデータのトレーニングパターンを送信する(ブロック340)。一実装では、トレーニングパターンは、0から1、1から0への遷移を多く含んでもよい。制御ユニット101は、スレーブが書き込みデータにロックされているかどうかを判定しうる。スレーブが書き込みデータにロックされないと制御ユニット101が決定した場合(ブロック345)、制御ユニット101は書き込みデータの位相を調整しうる。一実施形態では、読み出しデータでみられる遷移ビット(例えば、0から1の遷移)に対して、書き込みデータが、スレーブデバイス110によってほぼ50%の誤り率で不正確にラッチされて記憶される程度に、書き込みデータの位相が十分外れて調整されうる(ブロック350)。50%の遷移誤り率は、書き込みデータがエッジの近くでサンプリングされていることを示しうる。次に、書き込みデータの位相が、0.5データビット時間に調整されうる。これにより、FF208が各データビットの中央付近でデータをサンプリングするようになる。この処理が、各スレーブデバイス110の各データ信号パスに対して行われうる。スレーブデバイス110がデータにロックされているとマスタコントローラ100が判定すると、システム10は通常動作を開始しうる(ブロック355)。
ブロック360に進み、システム10の通常動作中に、ダイのこのような温度差のために、さまざまなクロックおよびデータの位相がドリフトしうる。上で説明したように、読み出しが発生しており、データパスでデータが転送されている限り、マスタコントローラ100によって読み出しデータの位相アライメントが継続的に確認されうる。しかし、バストラフィックで大きなギャップが生ずると、位相が検知不能にドリフトすることがある。このように、制御ユニット101は、トレーニングシーケンス間の経過時間を測定することによって、所定の間隔で書き込みデータの位相をトレーニングしうる(ブロック365)。書き込みデータ位相のトレーニング間の経過時間が所定の範囲を越えている場合(ブロック370)、制御ユニット101は、上で説明したように、多くの遷移を含む書き込みデータのトレーニングパターンを書き込み(ブロック375)、書き込みデータの位相を調整して(ブロック385)、ブロック345〜350で上で説明したようにほぼ50%の遷移誤り率を探すことによって、書き込みデータの位相をトレーニングする。スレーブデバイス110が書き込みデータにロックされていると制御ユニット101が判定すると(ブロック380)、システム10は通常動作を続ける。
図5を参照すると、図4のメモリモジュールの一実施形態の例示的なピン図が示される。図4に示す実施形態では、メモリモジュールはDIMMである。代表的な場合、DIMMは、通常はソケットに摺動するフィンガーコネクタを有する回路基板を有する。フィンガーコネクタは、ソケット内のスプリング式接点と係合する金属パッドを有する。フィンガーコネクタからDRAMデバイスに各種信号が配線されている。望ましい信号品質のクロック信号を得るためには、ピン図に示すように、クロック信号がフィンガーコネクタの端に配置される。
上の実施形態についてかなり詳細に記載したが、上記の開示を完全に理解できれば、数多くの変形例および変更例が当業者にとって自明であろう。下記の特許請求の範囲は、このような変形例および変更例を全て包含するものと解釈されることが意図される。