本発明は、さまざまに変形されたり代替形態を取りうるが、その特定の実施形態が、例として図面に図示され、かつ本明細書に詳細に記載される。しかし、図面およびその詳細な説明は、開示の形態に本発明を限定することを意図するものではなく、逆に、本発明が、添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれる全ての変形例、均等物および代替例を含むことを意図することが理解されるべきである。本願にわたり、「しうる」、「してもよい」との文言は、許容を示す意味(すなわち、可能性がある、可能であること)で用いられており、義務的な意味(すなわち必須)ではない点に留意されたい。
図1を参照すると、高速シリアルバッファの一実施形態を備えたメモリシステムのブロック図が示される。メモリシステム10は、メモリユニット110A〜110Hと、バッファユニット170A〜170Jとに接続されたメモリコントローラ100を備える。数字と文字を含む参照符号を付された要素が、数字のみによって参照されることもある点にも留意されたい。例えば、メモリユニット110Aは、必要に応じて「メモリユニット110」と呼ばれることもある。また、メモリコントローラ100は、ノースブリッジ構成において使用されるもののような、チップセットの一部をなすメモリコントローラでもよいという点に留意されたい。別の実施形態では、図5に示すように、メモリコントローラ100は、メモリコントローラ100が、例えば、1つ以上のプロセッサコアを備えた処理ノード内に組み込まれる組み込み型のソリューションの一部をなしていてもよい。
一実施形態では、例えば、メモリユニット110A〜110Hは、デュアルインラインメモリモジュール(DIMM)などのメモリモジュールなどである。このため、各DIMMは、複数のメモリデバイス(図示せず)、例えば、メモリデバイスのダイナミックアクセスメモリ(DRAM)の一員であるデバイスなどを備えうる。しかし、一般に、システム10のメモリユニット110は、システムメモリであればどのようなタイプのものも例示することができる点に留意されたい。
図中の実施形態では、メモリコントローラ100は、高速シリアル相互接続160Aおよび160Bを介してバッファユニット170に接続されている。一実施形態では、各高速シリアル相互接続160は、差動信号方式を使用する。高速シリアル相互接続160には、複数の差動双方向データ信号パス(DDQ)、差動バッファコマンド信号パス(BCMD)、差動クロック信号パス(WCLK)、および差動巡回冗長符号信号パス(CRC)が含まれうる。図中の実施形態では、2つのメモリチャネルが示されている。このように、シリアル相互接続160Aは、一方のチャネルに使用され、このためバッファユニット170A〜170Fに接続されており、シリアル相互接続160Bは、もう一方のチャネルに使用され、バッファユニット170G〜170Jに接続されている。図の実施形態では、バッファユニット170Eおよび170Jの各々は、一部が未使用であり、このため、必要に応じて他の用途に使用することができるという点に留意されたい。
また、メモリコントローラ100は、パラレル相互接続165を介してメモリユニット110に接続されている。図に示すように、メモリコントローラ100とメモリユニット110間のパラレル相互接続165には、アドレス/コマンド信号パス(ADDR/CMD)およびクロック信号パス(MCLK)が含まれうる。図に示す2つのシリアル相互接続と同様に、2つのADDR/CMD/MCLK信号パスが示されている。ADDR/CMD/MCLK信号パスのそれぞれは、個々のメモリチャネル用に使用されうる。図に示すように、ADDR/CMD/MCLK信号パスの一方はメモリユニット110A〜110Dに接続され、もう一方のADDR/CMD/MCLK信号パスはメモリユニット110E〜110Hに接続されている。更に、バッファユニット170は、パラレル相互接続165を介してもメモリユニット110に接続されている。図に示すように、パラレル相互接続165には、データパス(DQ)およびデータストローブ信号パス(DQS)も含まれうる。一実施形態では、メモリコントローラ100は、ADDR/CMD信号パスを介してアドレスおよびコマンドを送信することによって、メモリユニット110の動作を制御しうる。
後で更に詳細に説明するように、DQデータパスはバッファユニット170とメモリユニット110との間で双方向にデータを伝達しうる。DQデータパスは、所定数の8ビット(バイト幅)のデータパスを含みうる。例えば、データパス全体は288ビット幅であるが、データパス全体がバイトサイズの部分に分割されてもよい。一実施形態では、288ビットに4つのチェックバイトが含まれているが、別の実施形態では、それ以外の数のチェックバイトが使用されてもよいという点に留意されたい。また、データパス全体が任意の数のデータビットを有してもよく、異なるサイズの部分に分割されてもよい点にも留意されたい。シリアル相互接続160のDDQデータパスは、パラレル相互接続を介して伝達されていたデータを、シリアルに高速で伝達することができる。例えば、DDQ0信号パスは、DQ[0:3]に対応するデータビットを伝達し、DDQ1信号パスは、DQ[4:7]に対応するデータビットを伝達し、、と続いていくが、これ以外のマッピングも可能である。
データパスをメモリユニット110に接続できる方法はさまざまに存在する。例えば、バッファユニット170が1つの集積回路の一部であってもよいとも考えられる。しかし、このような実装に必要なピンの数により、この実装は実際的でない。このため、一実施形態では、データパスが分割され、より小さな単位にグループ分けされうる。したがって、一実施形態では、バッファユニット170のそれぞれは、個々のグループにバッファ機能を提供する独立した集積回路などである。
一実施形態では、ライトオペレーション時には、各シリアルバッファユニット170はシリアルにクロックイン(clock in)し、2バイトを記憶して、次に、この2バイトをパラレル相互接続165にパラレルに送信する。一実施形態では、シリアル相互接続160は、必要なスループットを得るために、パラレル相互接続165がデータ信号パス上にデータを転送する速度の4倍の速度でデータを転送しうる。しかし、ADDR/CMD信号パスとMCLK信号パスは、パラレル相互接続165のデータパスの半分の速度で動作しうる。例えば、シリアル相互接続160は、6.4GT/sでDDQデータパス上にデータを転送し、パラレル相互接続165のデータ信号パスDQ/DQSは、1600MT/sでデータを転送し、ADDR/CMD信号パスとMCLK信号パスは、800MT/sで動作しうる。なお、別の実施形態では、シリアルバッファユニット170は、パラレルインターフェース165にバイトを送信する前に記憶するバイト数は、任意のバイト数であってもよい点に留意されたい。また、シリアル相互接続160が、パラレル相互接続165に対して任意の適したデータ速度で動作されうる点にも留意されたい。
CRC信号パスは、それぞれの一方向差動信号パスを介して、各バッファユニット170からメモリコントローラ100にCRC情報を伝達しうる。また、クロック信号パスは、バッファユニット170のそれぞれに、WCLK信号を伝達しうる。同様に、BCMD信号パスは、メモリコントローラ100からバッファユニット170のそれぞれにバッファコマンドを伝達する。
一実施形態では、メモリコントローラ100は、BCMD信号パスを介して送信するコマンドを介して、バッファユニット170の動作を制御しうる。このため、バッファユニット170は、通常動作モードと、構成およびテストモードを有しうる。例えば、通常のデータオペレーション中は、メモリコントローラ100は、データストレージとの間で読み出しおよび書き込みをするため、およびDQ信号パスの位相オフセットを調整するために、データとプリアンブルおよびポストアンブルの両方に対してリードコマンドおよびライトコマンドを送信しうる。また、メモリコントローラ100は、例えば、各種ループバックコマンド、CRC制御コマンドおよびCRCトレーニングパターンコマンドを送信することによって、バッファユニット170の構成、トレーニングおよびテストを制御しうる。
高いデータ速度では、バッファユニット170またはメモリコントローラ100がビット誤りを受信する確率が非常に高くなる。このため、被保護ブロック内の複数のビット誤りを確実に検出する誤り検出コードにより、メモリコントローラ100とバッファユニット170との間で転送を保護することが必要となりうる。一実施形態では、このような複数のビット誤り検出を提供するために、CRCコードが使用されうる。より詳細には、図2に示すように、バッファユニットおよび/またはメモリモジュール内の論理とメモリコントローラ100への誤りの報告を簡略化するために、バッファユニット170は、自身が生成中のデータか自身が受信中のデータに基づいてCRCを計算する。このため、メモリコントローラ100にCRC情報を送り返すために、一方向CRC信号パスが使用されうる。図2に示すように、CRCユニット250は、自身の内部データに基づいてCRCを計算し、CRCデータをメモリコントローラ100に送り返す。リンクのいずれかの方向で誤りが検出されると、メモリコントローラ100はオペレーションを再試行することによって誤りを訂正しうる。
一実施形態では、CRCが、メモリコントローラ100に到着したときに、CRCが保護しているデータブロックと同時にCRCが利用可能となるように、CRC情報が、バッファユニット170からメモリコントローラ100に転送中のデータと同時に計算され送信されうる。一実施形態では、CRCの計算に伴う遅延は、ライトからリードへの遷移およびリードからライトへの遷移の間にデータパスで発生する遅延によって緩和されうる。
上で説明したように、多くの従来のシステムは、例えば、クロック位相のリカバリ、チャネル等化、誤り検出などの制御機能を両方の通信デバイスに実装することによって、高速の双方向通信を制御している。しかし、後で更に詳細に説明するように、このタイプの制御機能を非対称することでバッファユニット170を簡略化することができる。このため、メモリコントローラ100は、バッファユニット170から受信した情報に基づいて、送信する書き込みデータの信号特性(例えば位相など)を動的かつ適応的に調整することができる制御機能を備え、バッファユニット170が正確にデータを読み出せるようにすることができる。また、メモリコントローラ100は、メモリコントローラ100が、バッファユニット170が送信するデータを受信することができるように、自身の内部受信器の特性を調整することができる。更に、メモリコントローラ100は、アドレスおよびコマンドの情報が正しくサンプリングされるように、バッファユニット170に供給するクロック信号の位相を調整しうる。
より詳細には、高いデータ速度では、バス中の異なる信号用の送信パスにおける遅延が不確実であるため、これらの信号の受信器のサンプルクロックをビット単位で位相調整する必要がある。この回路をバッファユニット170に使用せずに済むように、メモリコントローラ100は、自身の送信クロックおよびデータ信号の位相を調整し、これにより、スレーブに複雑な位相シフト回路を使用せずに済むようにする。このため、図中の実施形態では、メモリコントローラ100は、制御ユニット101を備え、制御ユニット102は送信ユニット104、受信ユニット106およびクロックユニット806に接続されている。制御ユニット101は、バッファユニット170から受信したデータに基づいて位相情報を計算し、これが、メモリコントローラ100内でさまざまなクロックエッジの位相を調整するために使用されうる。例えば、制御ユニット101は、このような情報を、CRCデータおよび読み出しデータとして受け取ると、送信ユニット102、受信ユニット104およびクロックユニット106内のそれぞれの位相トラッキングおよび調整回路(図2に示す)を制御しうる。この機能は、図2,図5の説明に関連して、後で更に詳細に説明する。
図2を参照すると、図1のメモリシステムの構成要素のより詳細な態様を示す図が示される。図1に示した構成要素に対応する構成要素は、明瞭と簡潔を期するために同じ符号を付している。メモリコントローラ100は、差動シリアル相互接続160を介してシリアルバッファ170に接続されている。バッファユニット170は、図1に示したバッファユニット170A〜170Jのいずれであってもよい点に留意されたい。このため、差動シリアル相互接続160には、差動WCLK信号パス、差動BCMD信号パス、差動CRC信号パス、および差動データ信号パスDDQ[7:0]が含まれる。
メモリコントローラ100では、図1のクロックユニット106によって6.4GHzのクロック信号が生成され、このクロック信号が、可変位相ユニット293,294,295,296に接続されており、これらは、クロックユニット106の一部をなし、メモリコントローラ100用の内部クロックを供給しうる。可変位相ユニット293,294,295,296の出力は、それぞれ、フリップフロップ(FF)290,289,286,284用のクロック信号を供給する。可変位相ユニット293は、FF290のクロック入力に接続されている。FF290は、入力にフィードバックループでインバータ292が接続されているため、6.4GHzのクロックが3.2GHzのクロックとして出力される。FF290の出力は、差動出力ドライバ291の入力に接続され、差動出力ドライバ291の出力は、差動WCLK信号パスに接続されている。書き込みデータは、FF286の入力に接続されている。FF286の出力は、差動等化出力ドライバ287に接続されている。ドライバ287の出力は、DDQ[7:0]の1つの信号パスに接続されている。このため、DDQ[7:0]の各信号パスに対して、同様の書き込みデータ出力パス(図示せず)が使用されうる。同様に、読み出しデータのために、DDQ[7:0]の1つの信号パスが差動入力バッファ283に接続されており、差動入力バッファ283の出力がFF284の入力に接続されている。FF284の出力は、メモリコントローラ100の他の部分(図示せず)に、読み出しデータとして供給される。CRC信号パスは差動入力バッファ281に接続され、差動入力バッファ281の出力は受信器クロックデータ回復ユニット(RxCDR)282の入力に接続されている。RxCDRはビット毎オフセットユニット285に接続され、ビット毎オフセットユニット285は可変位相ユニット296に接続されている。バッファコマンド情報がFF289の入力に供給される。FF289の出力は差動等化出力ドライバ288に接続され、差動等化出力ドライバ288は差動BCMD信号パスに接続されている。
バッファユニット170は、DDQ[7:0]信号パスのそれぞれの差動入力バッファであるバッファ209を備える。バッファ209は、DDQ[7:0]信号パスの1つに送信される書き込みデータを受け取るように接続されている。バッファ209の出力は、FF208の入力に接続されている。FF208の出力は、書き込みFIFO220に接続されている。書き込みFIFO220の出力は、DRAMインタフェース256に接続され、DRAMインタフェース256は、パラレル相互接続165を介してメモリユニット110にインタフェースするために使用される入力バッファおよび出力ドライバ回路を表している。図に示すように、パラレル相互接続165の一部に、16のデータストローブ信号パスDQS[15:0]と32のデータ信号パスDQ[31:0]がある。書き込みFIFOからの書き込みデータは、DQ[31:0]を介してメモリユニット110に出力されうる。DQ信号とDQS信号のみが示されているが、簡潔を期するためにほかの信号を省略している点に留意されたい。また、MCLK信号とDQS信号も差動信号であってもよいが、簡潔を期するためにそのように図示されていない点にも留意されたい。
DQ[31:0]を介したメモリユニット110からの読み出しデータは、DRAMインタフェース256を介してマルチプレクサ(mux)203の1つの入力に接続されている。mux203の出力は、FF206の入力に供給される。制御論理255が、mux203のマルチプレクサ入力選択を制御している。FF206の出力は、差動等化データ出力ドライバ210に接続され、差動等化データ出力ドライバ210はDDQ[7:0]の差動信号パスの1つに接続されている。
バッファユニット170は、メモリコントローラ100から入力バッファ201を介してバッファコマンド情報(BCMD)を受け取るように接続された制御論理255を備え、入力バッファ201は、FF202の入力に接続されている。BCMD情報は、制御論理255に、DQデータパスに書き込みデータを出力させたり、DQデータパス用のデータを読み出させたり、初期化シーケンスに移行させるか、またはこれから退出させる、などをさせる。このため、制御論理255は、DRAMインタフェース256、CRCユニット250、mux203のほか、そのほかの回路を制御しうる。
図中の実施形態では、3.2GHzのクロックが、FF202,205,208,206のクロック入力に接続されている。FF202,205,208,206のそれぞれは、デュアルエッジフリップフロップとして図示されており、入力クロック信号の立ち上がりおよび立ち下りの両方で「D」入力をラッチするように構成されている。したがって、読み出しデータおよびBCMD情報を、そのそれぞれのデータパスで6.4Gb/sで伝達することができ、入力が3.2GHzのクロックを使用してラッチされうる。同様に、メモリコントローラ100は6.4GHzで動作するため、読み出しデータおよびCRC情報は、そのそれぞれのデータパスで6.4Gb/sで伝達され、特定のループバックモード中にメモリコントローラ100内で使用されうる。
一実施形態では、書き込みデータが受信されると、このデータがFF208によってラッチされ、FIFO220に記憶される。書き込みFIFO220は、DRAMインタフェース256を介してメモリユニット110に出力するために十分なビットを受け取るまで、このデータを記憶しうる。
図5の説明に関連して後で詳細に説明するように、動作中に、メモリコントローラ100は、送信される書き込みデータの信号特性(例えば位相など)と、その内部の受信器特性を動的かつ適応的に調整し、バッファユニット170に供給される3.2GHzのクロックを生成する6.4GHzのクロックの位相を調整しうる。より詳細には、上で説明したように、受信ユニット104は、バッファユニット170によって送信されるデータをより最適に受け取るために、自身のローカルサンプルクロック位相を調整するための、サンプルクロック位相調整回路(RxCDR282およびオフセットユニット285など)を備える。このため、メモリコントローラ100がバッファユニット170からCRCデータを受信している間は常に、受信ユニット104は、RxCDR282、オフセットユニット285および可変位相ユニット296を使用して、FF284のクロック位相を調整しうる。また、メモリコントローラ100内の制御ユニット101は、可変位相ユニット293を調整して、FF290に供給する6.4GHzのクロック信号の位相を調整しうる。例えば、メモリコントローラ100は、パワーオンリセットなどの初期化処理中に、バッファユニット170がバッファコマンド信号を正しくサンプリングできるようにするために、可変位相ユニット294を調整して、FF289に供給する6.4GHzのクロック信号の位相を調整しうる。更に、制御ユニット101は、初期化中および動作中の所定間隔に、バッファユニット170が書き込みデータをより最適に受け取ることができるように、可変位相ユニット295を調整し、FF286に供給する6.4GHzのクロック信号の位相を調整して、バッファユニット170に送信する書き込みデータの位相を調整しうる。
図3は、8ビットバースト中の図1,図2に示した実施形態の例示的な動作を示すタイミングチャートである。より詳細には、このタイミングチャートは128バイトのリード/ライト/リードバーストを示す。図には、メモリコントローラ100によってメモリユニット110に供給されるMCLK信号とADDR/CMD信号が示されている。また、図には、バッファユニット170とメモリユニット110間で、それぞれデータとデータストローブを伝達するDQ信号およびDQS信号も示される。残りの信号は、メモリコントローラ100とバッファユニット170間で情報を伝達するDDQ信号、BCMD信号およびCRC信号である。
図に示すように、リードコマンド(rdAおよびrdBなど)がメモリコントローラ100によってメモリユニット110に送信されている。数MCLKサイクル後に、データストローブ信号DQSと共にデータがDQ信号パスに現れる。データがDQ信号パスに現れる前に、リードコマンド(r0、r1など)が、BCMD信号パスを介してバッファユニット170に送信される。rdAデータがDQ信号パスに現れた後の次のMCLKサイクルで、rdAデータがDDQ信号パスに現れる。上で説明したように、rdAとrdBのデータは、MCLK速度の2倍の速度(1600MT/sなど)で、メモリユニット110からバッファユニット170にパラレルに伝達される。しかし、データは、遙かに高いデータ速度(6.4GT/sなど)で、バッファユニット170からメモリコントローラ100にシリアルに伝達される。
リードからライトへの遷移時のバスターンアラウンドタイムを短縮するために、書き込みデータが、バッファユニット170内に予めバッファされうる。例えば、図に示すように、wrXのデータおよび関連するBCMDライトコマンド(w1など)がバッファユニット170に送信されるが、点線に示すように、このデータは後になるまでメモリユニット110に書き込まれない。
このリード/ライト/リードのシーケンスでは、一般に、wrXのデータが、メモリコントローラ100によってDDQ信号パスを介してバッファユニット170に書き込まれて、バッファユニット170内に記憶されうる。メモリコントローラ100は、同時に、ADDR/CMD信号パスを介して、メモリユニット110にリードコマンド(rdAと、その数MCLKサイクル後にrdB)を発行する。DQバスにrdAデータが現れる直前に(例えば、DDQでのwrXのデータ転送の終了時点で)、メモリコントローラ100は、BCMDを介してバッファユニット170にリードコマンド(r1、r2など)を発行する。rdAとrdBのデータがDQバスに出力されている間に、メモリコントローラ100は、ADDR/CMDバスを介してメモリユニット110にライトコマンド(wrXおよびwrYなど)を送信する。rdAとrdBのデータは、バッファユニット170内にラッチされ、DDQを介してメモリコントローラ100に送信される。DDQでのrdBデータの転送が完了する前に、メモリコントローラ100は、ライトコマンド(w0、w2およびw3など)をバッファユニット170に送信する。w2コマンドにより、以前に記憶されたwrXのデータがメモリユニット110に書き込まれ、w3ライトコマンドによって、DDQ信号パスを介して送信されたばかりのwrYのデータが、DQデータパスを介してメモリユニット110に送信される。wrXのデータがメモリユニット110に書き込まれている間に、メモリコントローラ100は、ADDR/CMD信号パスを介してメモリユニット110にrdCコマンドを発行する。数サイクル後に、rdCデータとデータストローブが、それぞれDQ信号パスとDQS信号パスに現れる。rdCデータがDQデータパス上でバッファユニット170に転送されている間に、メモリコントローラ100は、BCMD信号パスを介してバッファユニット170にリードコマンド(r0およびr1など)を発行し、これにより、バッファユニット170が読み出しデータをDDQデータパスを介して送信できるようになる。wrXのデータと同様に、wrZのデータはこのバースト中はメモリユニット110に書き込まれない。その代わりに、次のライトバーストで使用するためにバッファユニット170内に記憶される。上で説明したように、CRCが生成され、メモリコントローラ100とバッファユニット170の間のリードオペレーションとライトオペレーション中にメモリコントローラ170に送信される。CRCは、矢印によって示されるように、BCMD情報、書き込みデータおよび読み出しデータから生成される。図に示すように、w1、r0、w0コマンド、wrX、rdAとrdBのデータが、CRC信号パス上でバッファユニット170からメモリコントローラ170に送信されるCRC情報を生成するために使用される。
図に示すように、上記の信号により、CRC情報が生成され、メモリコントローラ100に送信されうるが、バッファユニット170が未使用の(すなわち、データを転送していない)ときにも、CRC信号パスが遷移することがある。上で説明したように、CRCデータは、メモリコントローラ100内のRxCDR282を駆動させる。このため、これらの遷移により、読み出しデータを正しくサンプリングするために、読み出しデータサンプルクロックが常に位相整合されるようになる。
図4は、図1,図2に示した実施形態の動作を示すフローチャートである。上で簡単に説明したように、メモリコントローラ100とバッファユニット170間のインタフェースは非対称である。すなわち、メモリコントローラ100内の制御機能のほうがバッファユニット170内の制御機能よりも多い。このため、パワーアップ中および動作中の所定の時間に、メモリコントローラ100は、バッファユニット170が正しくデータを読み出すことができるように、バッファユニット170から受信した情報に基づいて、送信する書き込みデータの信号特性(例えば位相など)を調整しうる。また、メモリコントローラ100は、メモリコントローラ100が、バッファユニット170が送信するデータを正しく受信することができるように、自身の内部受信器の特性を調整することができる。更に、メモリコントローラ100は、バッファコマンド情報がバッファユニット170によって正しくサンプリングされるように、バッファユニット170に供給するクロック信号の位相を調整し、BCMD信号の位相を調整しうる。
図1,図2,図4と、ブロック400の始点を合わせて参照すると、リセットまたはパワーオン状態(ブロック400)の後に、一実施形態では、制御論理255が、バッファユニット170をリセットからトレーニングモードに移行させる(ブロック405)。トレーニング状態に入ると、全ての双方向信号パスドライバ(DDQ、DQおよびDQSなど)が高インピーダンス状態にされうる(ブロック410)。トレーニングモードでは、偶数MCLKサイクルの間にBCMD信号パスがCRC信号パスにループバックされ(ブロック415)、奇数MCLKサイクルの間はトレーニングパターン(10101010…)がCRCパスに出力される(ブロック420)。メモリコントローラ100がBCMD信号パス上にトレーニングパターンを出力し、これが、偶数MCLKサイクルの間にCRCパスに出力される(ブロック425)。メモリコントローラ100は、CRCパス上で既知のデータパターンを受信して、ビットロックとバイトロックを取得する(ブロック430)。また、メモリコントローラ100は、可変位相ユニット294を調整することによって、BCMDクロック信号の位相を調整し、この結果、バッファユニット170が、BCMD信号パス上でビットロック(すなわちビット整合)、およびバイトロック(すなわちバイト整合)を取得しうる(ブロック435)。より詳細には、バッファユニット170が、各ビットを正しくキャプチャし、正しいバイト境界で、シリアルビットをシフトインし、8ビットバイト全体をキャプチャすることを保証するために、メモリコントローラ1000は、送信中のパターンを1ビット時間(UI)だけ変化(シフト)させうる。次に、メモリコントローラは、バッファコマンドを送信して、バッファユニット170をトレーニングモードから退出させる(ブロック440)。
メモリコントローラ100は、DDQデータパスをトレーニングするために、トレーニングパターン(多くの遷移を含むランダムパターンなど)をDDQデータパスを介して送信する。このパターンは、書き込みFIFO220内に記憶される(ブロック445)。メモリコントローラ100は、記憶したパターンを読み戻し、ビットロックを取得する(ブロック450)。メモリコントローラ100は、ビット誤り率が実質的に50%になるように、(例えば、可変位相ユニット295を調整することによって)書き込みデータの位相を調整する。50%の遷移誤り率は、書き込みデータがエッジの近くでサンプリングされていることを示しうる。次に、メモリコントローラ100は、書き込みデータの位相を0.5UIだけ後方に調整する。これにより、例えば、FF208が各データビットの中央付近でデータをサンプリングするようになる。このプロセスが、各DDQ信号パスに対して実行されうる(ブロック455)。メモリコントローラ100は、バイトロックを取得するために、DDQデータパスを介してトレーニングパターンを送信する。一実施形態では、トレーニングパターンは、各バイトで異なるパターンを含んでいてもよい。メモリコントローラ100は、CRC情報をモニタしながら、トレーニングパターンデータを1UI増分ずつシフトさせうる。CRC情報が正しければ、バイトロックが確立される(ブロック460)。バッファユニット170内でトレーニングパターンがバイトロックされると、メモリコントローラ100は読み出しデータのバイトロックを取得しようとする。一実施形態では、メモリコントローラ100は、バイトロックされたトレーニングパターンを読み戻す(ブロック465)。この時点で、シリアル相互接続は、ビットロックとバイトロックの両方が書き込み方向と読み出し方向で取得されているように整合されている。
このようにして、パラレルDRAMインタフェース256が整合されうる。より詳細には、一実施形態では、メモリコントローラ100は、書き込み位相DQSエッジが、適切なMCLKエッジと整合されるまで、BCMDとDDQの書き込み位相整合を保ちながらWCLK位相を調整しうる(ブロック470)。
バッファユニット170のシリアル相互接続とパラレル相互接続が整合されると、正常動作中に、メモリコントローラ100は、上で説明したように、トレーニングパターンを使用してシリアル相互接続160の書き込み位相トレーニングを実行しうる。このトレーニングは、所定間隔で実行されうる。同様に、アイドル時間中に、メモリコントローラ100は、所定数のアイドルコマンドをバッファユニット170に送信することによって、BCMDとCRCの整合をモニタし調整しうる。これらのアイドルコマンドにより、遷移が多く含まれる所定のCRCパターンがCRC信号パス上で送信されうる(ブロック475)。
図5を参照すると、図1,図2のメモリシステムを備えたコンピュータシステムの例示的な実施形態のブロック図が示される。明瞭と簡潔を期するために、図1,図2に示す構成要素に対応する構成要素には同じ参照符号を付している点に留意されたい。コンピュータシステム500は、メモリバッファ170とメモリユニット110とに接続された処理ノード650を有する。
一実施形態では、バッファユニット170はマザーボードに実装された集積回路チップであり、メモリユニット110はソケットに接続されうる。別の実施形態では、バッファユニット170は、メモリドータカードソケットに接続することができるドータボードに実装された集積回路チップであってもよい。このような実装では、ドータボードは、メモリユニット110をライザー構成で接続するソケットを備えうる。
より詳細には、処理ノード650は、メモリコントローラ100に接続されたプロセッサコア601を備える。処理ノード650内に含まれるプロセッサコア601の個数はどのような数であってもよい点に留意されたい。上で説明したように、メモリコントローラ100の信号は、差動シリアル相互接続160を介してメモリバッファ170に、パラレル相互接続165を介してメモリユニット170に接続されている。図に示すように、シリアル相互接続には、一方向CRC信号パス、一方向WCLK信号パス、一方向BCMD信号パスおよび双方向データ信号パスが含まれる。また、パラレル相互接続165には、メモリバッファ170とメモリユニット110間の双方向のデータパスおよびデータストローブ信号パスが含まれる。更に、パラレル相互接続165には、処理ノード650とメモリユニット110間の一方向のADDR/CMD信号パスおよびMCLK信号パスが含まれる。パラレル相互接続165には、ADDR/CMD信号に加えて、チップセレクト、バンクセレクトや他の信号が含まれうるが、簡潔を期するために、ここではこれらが省略されている点に留意されたい。また、MCLK信号とDQS信号も差動信号であってもよいが、簡潔を期するためにそのように図示されていない点にも留意されたい。
図6を参照すると、デュアルモードメモリ相互接続を備えたメモリコントローラを備えたコンピュータシステムの一実施形態のブロック図が示されるコンピュータシステム700は、図5に示したコンピュータシステム500と同様である。例えば、コンピュータシステム700も、メモリバッファ170とメモリユニット110とに接続された処理ノード650を有する。しかし図6では、メモリコントローラ710がデュアルモードメモリコントローラであるという点で、図5のメモリコントローラ100とは異なる。より詳細には、下記に詳しく説明するように、メモリコントローラ710は、メモリユニット110へのパラレル相互接続、またはバッファユニット170と併用するためのシリアル相互接続のいずれかにより動作するように選択的に構成されうる。
上で簡単に説明したように、コンピュータシステムの設計者は、システムの構成要素が、できるだけ多くのシステムメーカによって使用されることができるような非常に柔軟なシステムを設計することを求めている。したがって、一実施形態では、メモリコントローラ710は、各種のメモリ規格と互換性を有しうるパラレルメモリ相互接続を提供する第1のモードで動作するように構成されうる。例えば、各種の実施形態では、メモリユニット110は、必要に応じて、DDR2、DDR3または他の規格と互換性を有しうる。このため、メモリコントローラ710は、必要に応じて、自身のパラレル相互接続として、DDR2およびDDR3技術と互換性を有するパラレル相互接続を提供しうる。また、メモリコントローラ710は、図1,図2のシリアル相互接続160などの差動シリアル相互接続を提供するための第2のモードでも動作するように構成されうる。
図6に示すように、構成ユニット720は、メモリコントローラ711内のI/O回路710の構成を決定し選択しうる。一実施形態では、メモリコントローラ710のモードは、処理ノード600の固定配線された外部ピンを使用して選択さされうる。このような実施形態では、例えば、処理ノード600の1本以上の外部選択ピンが、図に示すように回路のグラウンド、VDD、または他の何らかの電圧に固定配線されうる。構成ユニット720は、選択ピンの状態を検出し、次に、これに従ってメモリコントローラ711のI/O回路710を構成する。別の実施形態では、BIOS605または他のシステムレベルソフトウェアの実行中のシステムの起動時に、メモリコントローラのモードが選択されうる。
図中の実施形態では、第1のモードでは、メモリコントローラ710がメモリユニット110に直接接続される。このような構成では、I/O回路711は、例えば、DQ、DQS、ADDR/CMDおよびMCLKなどの信号パスが含まれるパラレル相互接続である。第2のモードでは、I/O回路711は差動シリアル相互接続に変化し、図1,図2,図5などに示すように、メモリバッファユニット170に接続される(点線で示す)。
I/O回路711は、モードの切り替えを行うために、複数の出力ドライバおよび入力バッファを備えうる。ドライバおよびバッファのなかには、差動回路があっても、シングルエンド形があってもよい。一実施形態では、モードに応じて、処理ノードの各種入出力ピンと、ドライバおよびバッファとの間の接続が変更されうる。このため、一実施形態では、I/O回路711の一部は、プログラム可能な相互接続のように動作しうる。
例えば、図6に示すように、CRC/DQS信号パスは、双方向DQS信号パスと一方向CRC信号パスで切り替わりうる。また、DQS/BCMDも、双方向DQS信号パスと一方向BCMD信号パスで切り替わりうる。また、WCLK/DQS信号パスは、双方向DQS信号パスと一方向WCLK信号パスで切り替わりうる。更に、DDQ/DQ信号パスは、双方向シングルエンド形DQS信号パスと双方向差動データDDQ信号パスで切り替わりうる。
図7を参照すると、高速バッファを備えたメモリシステムの別の実施形態のブロック図が示される。メモリシステム80は、メモリユニット110A〜110Hと、バッファユニット870A〜870Dとに接続されたメモリコントローラ800を備える。また、図1に示すメモリコントローラと同様に、メモリコントローラ800も、ノースブリッジ構成において使用されるもののような、チップセットの一部をなすメモリコントローラでもよいという点に留意されたい。別の実施形態では、図10に示すように、メモリコントローラ800は、メモリコントローラ100が、例えば、1つ以上のプロセッサコアを備えた処理ノード内に組み込まれる組み込み型のソリューションの一部をなしていてもよい。
上で説明した図面に示したものに対応する回路構成要素は、明瞭と簡潔を期するために同じ符号を付している。このため、一実施形態では、例えば、メモリユニット110A〜110Hは、上で説明したように、デュアルインラインメモリモジュール(DIMM)などのメモリモジュールなどであってもよい。各種の実施形態では、例えば、メモリユニットは、DDR2およびDDR3などの各種技術に準拠しうる。
図中の実施形態では、メモリコントローラ800は、シリアル相互接続860A〜860Dを介してバッファユニット870に接続されている。一実施形態では、各シリアル相互接続860は、差動信号方式を使用する。図8の説明に関連して後で更に詳細に説明するように、シリアル差動相互接続860A〜860Dには、それぞれ、各バッファユニット870への上りリンクと下りリンクが含まれうる。下りリンクには、複数の下りシリアルデータ信号パス(DSD)と、バッファユニット870にデータをクロックするために使用されうる対応する下りシリアルクロック信号パス(DSCLK)が含まれうる。同様に、上りリンクのそれぞれには、複数の上りシリアルデータ信号パス(USD)と、メモリコントローラ800にデータをクロックするために使用されうる対応する上りシリアルクロック信号パス(USCLK)が含まれる。図中の実施形態では、4つのメモリチャネルが示されているが、ほかの数も可能である。このように、シリアル相互接続160Aは、1つのチャネルに使用され、このためバッファユニット870Aに接続され、シリアル相互接続860Bは、第2のチャネルに使用され、バッファユニット870Bに接続され、シリアル相互接続860Bは、第3のチャネルに使用され、バッファユニット870Cに接続され、シリアル相互接続860Dは、第4のチャネルに使用され、バッファユニット870Dに接続されうる。
上記の実施形態で使用されたシリアル相互接続160とは対照的に、シリアル相互接続860は、データ、CRCおよびADDR/CMD情報をそれぞれ伝達するデータ信号パスを使用する。このように、一実施形態では、シリアル相互接続860は、パケットに、ペイロードがADDR/CMDとデータのいずれであるかを示すエンコードが含まれうるパケットプロトコルを使用しうる。また、各パケットは、CRC情報およびペイロード(データまたはADDR/CMDなど)の専用のビット時間を有するフォーマットを有しうる。
また、バッファユニット870A〜870Dは、パラレル相互接続865を介してメモリユニット110に接続されている。一実施形態では、パラレル相互接続865には、データパス(DQ)、データストローブ信号パス(DQS)、アドレス/コマンド信号パス(ADDR/CMD)、およびクロック信号パス(MCLK)が含まれうる。パラレル相互接続865には、チップセレクト、バンクセレクト、チェックビットや他の信号が含まれうるが、簡潔を期するために、ここではこれらが省略されている点に留意されたい。また、パラレル相互接続865に4つのチャネルが含まれてもよい点にも留意されたい。図に示すように、1つのチャネルは、メモリユニット110A〜110Dに接続され、別のチャネルは、メモリユニット110E〜110Hに接続され、別のチャネルは、メモリユニット110J〜110Mに接続され、別のチャネルは、メモリユニット110N〜110Rに接続されている。
後で更に詳細に説明するように、DQデータパスは、バッファユニット870とメモリユニット110との間で双方向にデータを伝達する一方、シリアル相互接続860の差動データパスは、パラレル相互接続を介して伝達されたデータを、シリアルに高速で伝達しうる。例えば、所定のアップリンクUSD[0]またはダウンリンクDSD[0]の信号パスは、DQ[0:3]に対応するデータビットを伝達し、USD[1]信号パスは、DQ[4:7]に対応するデータビットを伝達し…、と続いていくが、これ以外のマッピングも可能である。一部の実施形態では、シリアルリンクは、シリアルデータピンの本数に関して非対称でもよい。一実施形態では、ライトオペレーションよりも、リードオペレーションのほうが帯域幅の消費が大きいと考えられるため、アップリンクのデータ信号パスの本数が、ダウンリンクよりも多い場合もある。
上で説明したバッファユニット170と同様に、各シリアル相互接続860は、パラレル相互接続865がデータ信号パス上にデータを転送する速度の4倍の速度でデータを転送しうる。しかし、ADDR/CMD信号パスとMCLK信号パスは、パラレル相互接続865のデータパスの半分の速度で動作しうる。例えば、シリアル相互接続860は、6.4GT/sでアップリンクとダウンリンクのデータパス上にデータを転送し、パラレル相互接続865のデータ信号パスDQ/DQSは、1600MT/sでデータを転送し、ADDR/CMD信号パスとMCLK信号パスは、800MT/sで動作しうる。シリアル相互接続860が、パラレル相互接続865に対して任意の適したデータ速度で動作されうる点に留意されたい。
一実施形態では、メモリコントローラ800は、DSD信号パス上に送信するコマンドを介して、バッファユニット870の動作を制御しうる。このため、バッファユニット870は、通常動作モードと、構成およびテストモードを有しうる。例えば、通常のデータオペレーション中は、メモリコントローラ800は、データストレージとの間で読み出しおよび書き込みをするため、およびDQ信号パスの位相オフセットを調整するために、データとプリアンブルおよびポストアンブルの両方に対してリードコマンドおよびライトコマンドを送信しうる。また、メモリコントローラ800は、例えば、各種ループバックコマンド、CRC制御コマンドおよびCRCトレーニングパターンコマンドを送信することによって、バッファユニット870の構成、トレーニングおよびテストを制御しうる。
高いデータ速度では、バッファユニット170またはメモリコントローラ100がビット誤りを受信する確率が非常に高くなる。このため、被保護ブロック内の複数のビット誤りを確実に検出する誤り検出コードにより、メモリコントローラ100とバッファユニット170との間で転送を保護することが必要となりうる。一実施形態では、このような複数のビット誤り検出を提供するために、CRCコードが使用されうる。より詳細には、図2に示すように、CRC情報が生成され、アップリンクとダウンリンクの両方で送信される。シリアル相互接続のいずれかの方向で誤りが検出されると、メモリコントローラ100はオペレーションを再試行することによって誤りを訂正しうる。一実施形態では、下りリンクで検出されたCRCエラーは、上りCRCに符号化されうる。
一実施形態では、メモリコントローラ800は、バッファユニット870から受信した情報に基づいて、送信する書き込みデータの信号特性(例えば位相など)を動的かつ適応的に調整することができる制御機能を備え、バッファユニット870が正確にデータを読み出せるようにすることができる。また、メモリコントローラ800は、メモリコントローラ100が、バッファユニット870が送信するデータを受信することができるように、自身の内部受信器の特性を調整することができる。更に、メモリコントローラ800は、アドレスおよびコマンドの情報が正しくサンプリングされるように、バッファユニット870に供給するクロック信号の位相を調整しうる。
より詳細には、高いデータ速度では、バス中の異なる信号用の送信パスにおける遅延が不確実であるため、これらの信号の受信器のサンプルクロックをビット単位で位相調整する必要がある。この回路をバッファユニット870に使用せずに済むように、メモリコントローラ800は、自身の送信クロックおよびデータ信号の位相を調整し、これにより、スレーブに複雑な位相シフト回路を使用せずに済むようにする。このため、図中の実施形態では、メモリコントローラ800は、制御ユニット801を備え、制御ユニット801は送信ユニット802、受信ユニット804およびクロックユニット806に接続されている。制御ユニット801は、バッファユニット870から受信したデータに基づいて位相情報を計算し、これが、メモリコントローラ800内でさまざまなクロックエッジの位相を調整するために使用されうる。例えば、制御ユニット801は、このような情報を、CRCデータおよび読み出しデータとして受け取ると、送信ユニット802、受信ユニット804およびクロックユニット806内のそれぞれの位相トラッキングおよび調整回路(図8に示す)を制御しうる。この機能は、図8,図9の説明に関連して、後で更に詳細に説明する。
図8を参照すると、図7のメモリシステムの構成要素のより詳細な態様を示す図が示される。図7に示した構成要素に対応する構成要素は、明瞭と簡潔を期するために同じ符号を付している。メモリコントローラ800は、差動シリアル相互接続860を介してシリアルバッファユニット870に接続されている。バッファユニット870は、図7に示したバッファユニット870A〜870Dのいずれであってもよい点に留意されたい。このため、差動シリアル相互接続860には、下り差動シリアルクロック信号パス(DSCLK)と下り差動データ信号パスDSD[11:0]が含まれる。同様に、差動シリアル相互接続860には、上り差動シリアルクロック信号パス(USCLK)と上り差動データ信号パスUSD[19:0]とが含まれる。
メモリコントローラ800は6.4GHzのクロック信号を有し、この信号は図7のクロックユニット806によって生成されうる。一実施形態では、6.4GHzのクロックは、メモリコントローラ800用の内部クロックである。可変位相ユニット890の出力は、フリップフロップ(FF)889用のクロック信号を供給する。また、6.4GHzのクロックは、レーンデスキュー回路881と、シリアルクロックDSCLKを生成するためにFF893のクロック入力とに接続されている。FF893は、入力にフィードバックループでインバータ892が接続されているため、6.4GHzのクロックが2分され、3.2GHzのシリアルクロックとして出力される。3.2GHzのクロックは、差動出力ドライバ891によって差動的に出力される。
図中の実施形態では、書き込みデータ、ADDR/CMDおよびCRCが、FF889の入力に供給される。FF889の出力は、差動等化出力ドライバ888に接続されている。ドライバ888の出力は、DSD[11:0]の1つの信号パスに接続されている。このため、DSD[11:0]の各信号パスに対して、同様の出力パス(図示せず)が使用されうる。同様に、読み出しデータのために、USD[19:0]の1つの信号パスが差動入力バッファ885に接続されており、差動入力バッファ885の出力がFF886の入力に接続されている。FF886の出力は、レーンデスキューユニット881の入力に接続されている。レーンデスキューユニット881の出力は、メモリコントローラ800の他の部分(図示せず)に、読み出しデータおよびCRC情報として供給される。上りシリアルクロック信号USCLKは差動入力バッファ887に接続され、差動入力バッファ887の出力は可変位相ユニット882に接続されている。可変位相ユニット882の出力は、FF886のクロック入力に接続されている。
バッファユニット870は、DSD[11:0]信号パスのそれぞれの差動入力バッファであるバッファ801を備える。バッファ801は、DSD[11:0]信号パスの1つに送信される書き込みデータ、ADDR/CMDおよびCRC情報を受け取るように接続されている。このため、メモリコントローラ800と同様に、DSD[11:0]の各信号パスに対して、同様の出力パス(図示せず)が使用されうる。バッファ801の出力は、FF802の入力に接続されている。FF802の出力は、FF803の入力に接続されている。F803の出力は、コマンドバッファ805、CRCユニット806、書き込みFIFO807、および出力マルチプレクサ(mux)809に接続されている。書き込みFIFO807の出力は、DRAMインタフェース256に接続され、DRAMインタフェース256は、図2の説明と関連して上で説明したDRAMインタフェースと同様である。図に示すように、パラレル相互接続865の一部として、4つのMCLK信号、ADDR/CMD信号、16のデータストローブ信号パスDQS[15:0]、および72のデータ信号パスDQ[71:0]が含まれる。書き込みFIFO807からの書き込みデータは、DQ[71:0]を介してメモリユニット110に出力されうる。簡潔を期するために、ほかの信号は省略された点に留意されたい。MCLK信号とDQS信号も差動信号であってもよいが、簡潔を期するためにそのように図示されていない点に留意されたい。
DQ[71:0]を介したメモリユニット110からの読み出しデータは、DRAMインタフェース856を介してmux809の1つの入力に接続されうる。mux809の出力は、FF810の入力に供給される。制御論理855が、mux809のマルチプレクサ入力選択を制御している。FF810の出力は、差動等化データ出力ドライバ811に接続され、差動等化データ出力ドライバ811はUSD[19:0]の差動信号パスの1つに接続されている。
また、バッファユニット870は、メモリコントローラ800からコマンド情報(CMD)を受け取るように接続された制御論理855も備える。CMD情報は、制御論理855に、DQデータパスに書き込みデータを出力させたり、DQデータパス用のデータを読み出させたり、初期化シーケンスおよびテストシーケンスに移行させるか、またはこれから退出させる、などをさせる。このため、制御論理855は、DRAMインタフェース856、CRCユニット806,808、mux809のほか、そのほかの回路を制御しうる。
図中の実施形態では、3.2GHzのクロックはFF810のクロック入力と、差動等化データ出力ドライバ812の入力とに接続され、ドライバ812の出力は上りシリアルクロックUSCLKである。また、3.2GHzのクロック信号は、4分割ユニット804にも接続され、このため内部800MHzのクロックドメインを供給し、これはMCLKドメインである。
一実施形態では、DSD[11:0]信号パスを介して受信されたパケットは、CMDバッファ805、書き込みFIFO807およびCRCユニット806に同時に供給されうる。パケットは、パケットがADDR/CMDまたはデータペイロードのいずれであるかを示すためにエンコードされていることがあるため、CMDバッファ805および書き込みFIFO807は、それぞれのパケットをキャプチャできるように、パケットデコード論理(図示せず)を備えうる。このため、書き込みデータペイロードパケットが受信されると、パケットが書き込みFIFO807によってデコードされ、データが書き込みFIFO807内に記憶される。CMDバッファ805は、データペイロードパケットを破棄しうる。書き込みFIFO807は、DRAMインタフェース856を介してメモリユニット110に出力するのに十分なビットを受け取るまで、書き込みデータを記憶しうる。同様に、CMDペイロードパケットが受信されると、パケットがCMDバッファ805によってデコードされ、CMD情報がCMDバッファ805内に記憶される。書き込みFIFO807は、CMDペイロードパケットを破棄しうる。全てのパケットにCRCペイロードが含まれうるため、CRCユニット806は、全パケットを受信して、CRC情報を抽出する。
図9の説明に関連して後で更に詳細に説明するように、動作中に、メモリコントローラ800は、送信する書き込みデータおよび受信する読み出しデータの信号特性(例えば位相など)を動的かつ適応的に調整しうる。より詳細には、上で説明したように、受信ユニット804は、バッファユニット870によって送信されるデータをより最適に受け取るために、自身のローカルサンプルクロック位相を調整するための、サンプルクロック位相調整回路(レーンデスキュー881および可変位相ユニット890,882など)を備える。このため、メモリコントローラ800がバッファユニット870からCRCデータを受信している間は常に、受信ユニット804は、レーンデスキューおよび可変位相ユニット882を使用して、FF885のクロック位相を調整しうる。また、メモリコントローラ800内の制御ユニット801は、バッファユニット870がより最適に書き込みデータを受信できるように、可変位相ユニット890を調整し、バッファユニット870に送信する書き込みデータの位相を調整しうる。
図9は、図7,図8に示した実施形態の例示的な動作を示すフローチャートである。より詳細には、メモリコントローラ800とバッファユニット870間で通信を確立し、これを維持するための初期化および構成手順について説明する。図7〜図9と、図9のブロック900の始点を合わせて参照すると、システムが、パワーオンリセットまたはその他のシステムリセット状態においてリセットされると、シリアル信号パスのいずれも整合されていないとみなされうる。このため、メモリコントローラとバッファユニット870が、リセットからトレーニング状態1またはT1に移行する。T1状態では、シリアル相互接続860は、400MT/sで動作される(ブロック905)。メモリコントローラ800は、データの送受信に、デッドレコニングされた(dead-reckoned)0.5UIオフセットを使用する(ブロック910)。例えば、メモリコントローラは、所定のビット時間の半分(halfway across a given bit time)の近似点にオフセットを調整する。メモリコントローラ800は、バッファユニット870にコマンドを送信してT1状態からT2状態に移行させる(ブロック915)。T2状態において、バッファユニット870は、101010…パターンなどの所定のパターンを、USDリンクの全ビットレーンに出力する。メモリコントローラは、例えば、既知のパターンを使用してビットロックを取得し、可変位相ユニット882を調整する(ブロック920)。
一実施形態では、メモリコントローラ800は、例えば、8ビット時間の間、「1」のみを出力することによって、バッファユニット870にバッファコマンドを送信して、T2状態からT3状態に移行させる(ブロック925)。T3状態では、バッファユニット870は、偶数MCLKサイクルにおいて、USD信号パスを介して、メモリコントローラ800に所定のパターン(101010…など)を送信する(ブロック930)。バッファユニット870は、奇数MCLKサイクルにおいて、上りUSD信号パスに下りデータをループバックし、101010…とは異なるパターンを、DSD信号パスを介して下りに送信するように構成されている(ブロック935)。メモリコントローラ800は、この異なるパターンを使用してバイトロックを取得する。次に、メモリコントローラ800は、バッファユニット870がビットロックおよびバイトロックを取得できるように、下りデータ位相を調整する(ブロック940)。完了すると、メモリコントローラ800は、8ビット時間の間、「0」のみを出力し、これにより、バッファユニット870をT3状態から、メモリコントローラ800がメモリユニット110との間でデータの読み書き等を行うことができる通常動作モードブロック(945)に移行させる。
メモリコントローラ800は、通常動作モードに入ると、全バッファユニット870が同じクロックエッジ(位相)を使用するように、各バッファユニット870内の4分割MCLK分割器804を調整しうる(ブロック950)。より詳細には、メモリコントローラ800は、バッファコマンドを送信して、MCLK位相を1ビット時間以上遅延させうる。
メモリコントローラ800は、通常動作中の所定の間隔(100μs毎など)で、定期的なトレーニングモードを使用して、上りと下りの信号パスをトレーニングしうる(ブロック955)。例えば、下りのトレーニングのために、メモリコントローラ800は、所定のトレーニング位相オフセットを使用して、書き込みFIFO807にトレーニングパターンを書き込みうる(ブロック960)。次にメモリコントローラ800は、このトレーニングパターンを読み戻し、パターンの遷移値からエラーサイン(sign)を計算しうる(ブロック965)。メモリコントローラ800は、計算で求めたエラーサインを使用して、下りデータ位相を調整しうる(ブロック970)。
上りのトレーニングのために、メモリコントローラ800は、通常の位相オフセットを使用して、書き込みFIFO807にトレーニングパターンを書き込みうる(ブロック975)。次にメモリコントローラ800は、記憶したトレーニングパターンを読み戻し、別の所定のトレーニング位相オフセットを使用して、パターンの遷移値からエラーサインを計算しうる(ブロック980)。メモリコントローラ800は、計算で求めたエラーサインを使用して、上りサンプル位相を調整しうる(ブロック985)。定期的なトレーニングが完了すると、バッファユニット870は、上で説明したように、ブロック945において通常モードに戻される。
次に図10を参照すると、図7に示したメモリシステムを備えたコンピュータシステムの一実施形態のブロック図が示される。明瞭と簡潔を期するために、図7,図8に示す構成要素に対応する構成要素には同じ参照符号を付している点に留意されたい。コンピュータシステム1100は、メモリバッファ870とメモリユニット110とに接続された処理ノード1150を有する。
図5に示したコンピュータシステムと同様に、一実施形態では、バッファユニット870はマザーボードに実装された集積回路チップであり、メモリユニット110はソケットに接続されうる。別の実施形態では、バッファユニット870は、メモリドータカードソケットに接続することができるドータボードに実装された集積回路チップであってもよい。このような実施形態では、ドータボードは、メモリユニット110をライザー構成で接続するソケットを備えうる。
図10に示す実施形態では、処理ノード1150は、メモリコントローラ800に接続されたプロセッサコア1101を備える。処理ノード1150内に含まれるプロセッサコア1101の個数はどのような数であってもよい点に留意されたい。図7,図8の説明に関連して上で説明したように、メモリコントローラ800の信号は、差動シリアル相互接続860を介してメモリバッファ870に、パラレル相互接続865を介してメモリユニット110に接続されている。図に示すように、シリアル相互接続860には、一方向下り信号パス、一方向下りクロック信号パス、一方向上り信号パス、および一方向上りクロック信号パスが含まれる。また、パラレル相互接続865には、メモリバッファ870とメモリユニット110間の双方向のデータパスおよびデータストローブ信号パスが含まれる。更に、パラレル相互接続865には、処理ノード600とメモリユニット110間の一方向のADDR/CMD信号パスおよびMCLK信号パスが含まれる。パラレル相互接続865には、ADDR/CMD信号に加えて、チップセレクト、バンクセレクトや他の信号が含まれうるが、簡潔を期するために、ここではこれらが省略されている点に留意されたい。
図11を参照すると、デュアルモードメモリ相互接続を備えたメモリコントローラを備えたコンピュータシステムの別の実施形態のブロック図が示されるコンピュータシステム1200は、図10に示したコンピュータシステム1100と同様である。例えば、コンピュータシステム1200も、メモリバッファ870とメモリユニット110とに接続された処理ノード1250を有する。しかし図11では、メモリコントローラ1210がデュアルモードメモリコントローラであるという点で、図10のメモリコントローラ800とは異なる。より詳細には、下記に詳しく説明するように、メモリコントローラ1210は、図7,図8の説明に関連して上で説明したように、メモリユニット110への直接接続のためのパラレル相互接続865、またはバッファユニット870と併用するためのシリアル相互接続860のいずれかにより動作するように選択的に構成されうる。
上で説明したメモリコントローラ710と同様に、図11のメモリコントローラ1210は、各種のメモリ規格と互換性を有しうるメモリモジュールへの直接接続のためにパラレル相互接続によっても選択的に動作しうる。例えば、各種の実施形態では、メモリユニット110は、必要に応じて、DDR2、DDR3または他の規格と互換性を有しうる。このため、メモリコントローラ1210は、必要に応じて、自身のパラレル相互接続として、DDR2およびDDR3技術と互換性を有するパラレル相互接続865を提供しうる。また、メモリコントローラ1210は、バッファユニット870に接続するために、図7,図8のシリアル相互接続860などの差動シリアル相互接続を提供するための第2のモードでも選択的に動作するように構成されうる。
図11に示すように、構成ユニット1220は、メモリコントローラ1210内のI/O回路1211の構成を決定し選択しうる。一実施形態では、メモリコントローラ1210のモードは、処理ノード1250の固定配線された外部ピンを使用して選択さされうる。このような実施形態では、例えば、処理ノード1250の1本以上の外部選択ピンが、図に示すように回路のグラウンド、VDD、または他の何らかの電圧に固定配線されうる。構成ユニット1220は、選択ピンの状態を検出し、次に、これに従ってメモリコントローラ1210のI/O回路1211を構成する。別の実施形態では、BIOS1205または他のシステムレベルソフトウェアの実行中のシステムの起動時に、メモリコントローラのモードが選択されうる。
図中の実施形態では、第1のモードでは、メモリコントローラ1210がメモリユニット110に直接接続される。このような構成では、I/O回路1211は、なかでも、例えば、DQ、DQS、ADDR/CMDおよびMCLKなどの信号パスが含まれるパラレル相互接続を提供する。第2のモードでは、I/O回路1211は差動シリアル相互接続に変化し、図7,図8,図10などに示すように、メモリバッファユニット870に接続される(点線で示す)。
I/O回路1211は、モードの切り替えを行うために、複数の出力ドライバおよび入力バッファを備えうる。ドライバおよびバッファのなかには、差動回路があっても、シングルエンド形があってもよい。一実施形態では、モードに応じて、処理ノードの各種入出力ピンと、ドライバおよびバッファとの間の接続が変更されうる。このため、一実施形態では、I/O回路1211の一部は、プログラム可能な相互接続のように動作しうる。
例えば、図11に示すように、DSD信号パスは、必要に応じて、一方向差動DDS信号パスと双方向シングルエンド形DQ信号パスで切り替わりうる。また、USD信号パスは、一方向UDS信号パスおよび双方向シングルエンド形ADDR/CMD信号パス、および/または双方向差動DQS信号パスが切り替わりうる。更に、DSCLK信号パスは、差動一方向クロック信号パスから1つ以上のシングルエンド形MCLK信号パスに切り替わる、などである。他のピンの組み合わせも可能であり、考察される点に留意されたい。
上の実施形態についてかなり詳細に記載したが、上記の開示を完全に理解できれば、数多くの変形例および変更例が当業者にとって自明であろう。下記の特許請求の範囲は、このような変形例および変更例を全て包含するものと解釈されることが意図される。