(57)【要約】  メモリシステムは、それぞれが１つ以上のメモリデバイスおよびパラレル相互接続を備えた１つ以上のメモリユニットを備える。前記システムは、前記メモリコントローラと前記メモリユニットとの間のデータ転送を制御しうるメモリコントローラも備える。前記メモリシステムは、前記パラレル相互接続を介して前記メモリユニットに接続された１つ以上のバッファユニットを更に備える。前記バッファユニットのそれぞれは、各々のシリアル相互接続を介して前記メモリコントローラに接続されている。各バッファユニットは、前記メモリコントローラからコマンド情報を受信すると、前記各々のシリアル相互接続を介して前記メモリコントローラからデータを受信し、かつ前記パラレル相互接続を介して前記メモリユニットに前記データを送信しうる。前記メモリコントローラは、更に、前記１つ以上のバッファユニットから受信された情報に基づいて、送信するデータの信号特性を調整することによって、前記メモリコントローラと前記バッファユニット間のデータ転送を非対称的に制御しうる。
2010508599.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが１つ以上のメモリデバイスおよびパラレル相互接続を備えた１つ以上のメモリユニットと、
前記パラレル相互接続を介して前記１つ以上のメモリユニットに接続された１つ以上のバッファユニットと、
各々のシリアル相互接続を介して前記１つ以上のバッファユニットの各々に接続されたメモリコントローラと、を有し
前記１つ以上のバッファユニットのそれぞれは、前記メモリコントローラからコマンド情報を受信すると、前記各々のシリアル相互接続を介して前記メモリコントローラからデータを受信し、前記パラレル相互接続を介して前記１つ以上のメモリユニットに前記データを送信するように構成され、
前記メモリコントローラは、前記１つ以上のバッファユニットから受信された情報に基づいて、送信するデータの信号特性を調整することによって、前記メモリコントローラと前記１つ以上のバッファユニット間のデータ転送を非対称的に制御するように構成されているメモリシステム。
【請求項２】
各シリアル相互接続は、それぞれが前記１つ以上のバッファユニットの所定のバッファユニットと前記メモリコントローラとの間でデータを伝達するように構成された複数の差動双方向データ信号パスを有する請求項１に記載のメモリシステム。
【請求項３】
各シリアル相互接続は、前記メモリコントローラから前記１つ以上のバッファユニットの所定のバッファユニットに前記コマンド情報を伝達するように構成された差動コマンド信号パスを有する請求項１に記載のメモリシステム。
【請求項４】
前記パラレル相互接続は、グループ分けされた複数の双方向データ信号パスを有し、各グループは、前記１つ以上のバッファユニットの所定のバッファユニットと前記１つ以上のメモリユニットとの間でデータを伝達するように構成されている請求項２に記載のメモリシステム。
【請求項５】
前記各々のシリアル相互接続の各差動双方向データ信号パスを介して伝達される前記データは、前記パラレル相互接続の双方向データ信号パスの各々のサブセットによって伝達される請求項４に記載のメモリシステム。
【請求項６】
前記シリアル相互接続は第１のデータ転送速度で動作し、前記パラレル相互接続は第２のデータ転送速度で動作し、前記第１のデータ転送速度は第２の転送速度よりも高速である請求項１に記載のメモリシステム。
【請求項７】
各シリアル相互接続は、前記メモリコントローラから前記１つ以上のバッファユニットの所定のバッファユニットにクロックを伝達するように構成された差動クロック信号パスを有し、前記差動クロック信号の各々は、前記第１のデータ転送速度で動作する請求項６に記載のメモリシステム。
【請求項８】
前記パラレル相互接続は、それぞれが前記メモリコントローラから前記１つ以上のメモリユニットにクロック信号を伝達するように構成された１つ以上のクロック信号パスを有し、前記第２のクロック信号は前記第２のデータ転送速度で動作する請求項１に記載のメモリシステム。
【請求項９】
前記１つ以上のバッファユニットの各々は、前記シリアル相互接続の１つ以上の一方向巡回冗長符号（ＣＲＣ）信号パスを介してＣＲＣ情報を送信するように構成されており、前記ＣＲＣ情報は、前記各々のシリアル相互接続を介して前記メモリコントローラによって送信される前記データに対応している請求項１に記載のメモリシステム。
【請求項１０】
各シリアル相互接続は、それぞれが、前記メモリコントローラから前記１つ以上のバッファユニットに、データ、アドレスおよび前記コマンド情報を伝達するように構成された複数の下り差動一方向信号パスを有する請求項１に記載のメモリシステム。
【請求項１１】
各シリアル相互接続は、前記メモリコントローラから前記１つ以上のバッファユニットの各々にシリアルクロック信号を伝達するように構成された下り一方向差動クロック信号パスを有する請求項１０に記載のメモリシステム。
【請求項１２】
各シリアル相互接続は、それぞれが前記１つ以上のバッファユニットの１つから前記メモリコントローラにデータおよび巡回冗長符号（ＣＲＣ）情報を伝達するように構成された複数の上り差動一方向信号パスを有する請求項１に記載のメモリシステム。
【請求項１３】
各シリアル相互接続は、前記１つ以上のバッファユニットの１つから前記メモリコントローラにシリアルクロック信号を伝達するように構成された上り一方向差動クロック信号パスを有する請求項１２に記載のメモリシステム。
【請求項１４】
プロセッサと、
前記プロセッサに接続されたメモリシステムと、を有し、前記メモリシステムは、
それぞれが１つ以上のメモリデバイスおよびパラレル相互接続を備えた１つ以上のメモリユニットと、
前記パラレル相互接続を介して前記１つ以上のメモリユニットに接続された１つ以上のバッファユニットと、
各々のシリアル相互接続を介して前記１つ以上のバッファユニットの各々に接続されたメモリコントローラと、を有し
前記１つ以上のバッファユニットのそれぞれは、前記メモリコントローラからコマンド情報を受信すると、前記各々のシリアル相互接続を介して前記メモリコントローラからデータを受信し、前記パラレル相互接続を介して前記１つ以上のメモリユニットに前記データを送信するように構成され、
前記メモリコントローラは、前記１つ以上のバッファユニットから受信された情報に基づいて、送信するデータの信号特性を調整することによって、前記メモリコントローラと前記１つ以上のバッファユニット間のデータ転送を非対称的に制御するように構成されているコンピュータシステム。
【請求項１５】
各シリアル相互接続は、それぞれが前記１つ以上のバッファユニットの所定のバッファユニットと前記メモリコントローラとの間でデータを伝達するように構成された複数の差動双方向データ信号パスを有する請求項１４に記載のコンピュータシステム。
【請求項１６】
各シリアル相互接続は、前記メモリコントローラから前記１つ以上のバッファユニットの所定のバッファユニットに前記コマンド情報を伝達するように構成された差動コマンド信号パスを有する請求項１４に記載のコンピュータシステム。
【請求項１７】
前記パラレル相互接続は、グループ分けされた複数の双方向データ信号パスを有し、各グループは、前記１つ以上のバッファユニットの所定のバッファユニットと前記１つ以上のメモリユニットとの間でデータを伝達するように構成されている請求項１５に記載のコンピュータシステム。
【請求項１８】
前記各々のシリアル相互接続の各差動双方向データ信号パスを介して伝達される前記データは、前記パラレル相互接続の双方向データ信号パスの各々のサブセットによって伝達される請求項１７に記載のコンピュータシステム。
【請求項１９】
前記シリアル相互接続は第１のデータ転送速度で動作し、前記パラレル相互接続は第２のデータ転送速度で動作し、前記第１のデータ転送速度は第２の転送速度よりも高速である請求項１４に記載のコンピュータシステム。
【請求項２０】
各シリアル相互接続は、前記メモリコントローラから前記１つ以上のバッファユニットの所定のバッファユニットにクロックを伝達するように構成された差動クロック信号パスを有し、前記差動クロック信号の各々は、前記第１のデータ転送速度で動作する請求項１４に記載のコンピュータシステム。
【請求項２１】
前記パラレル相互接続は、それぞれが前記メモリコントローラから前記１つ以上のメモリユニットにクロック信号を伝達するように構成された１つ以上のクロック信号パスを有し、前記第２のクロック信号は前記第２のデータ転送速度で動作する請求項１４に記載のコンピュータシステム。
【請求項２２】
前記１つ以上のバッファユニットの各々は、前記シリアル相互接続の１つ以上の一方向ＣＲＣ信号パスを介して巡回冗長符号（ＣＲＣ）情報を送信するように構成されており、前記ＣＲＣ情報は、前記各々のシリアル相互接続を介して前記メモリコントローラによって送信される前記データに対応している請求項１４に記載のコンピュータシステム。
【請求項２３】
各シリアル相互接続は、それぞれが、前記メモリコントローラから前記１つ以上のバッファユニットに、データ、アドレスおよび前記コマンド情報を伝達するように構成された複数の下り差動一方向信号パスを有する請求項１４に記載のコンピュータシステム。
【請求項２４】
各シリアル相互接続は、前記メモリコントローラから前記１つ以上のバッファユニットの所定のバッファユニットにシリアルクロック信号を伝達するように構成された下り一方向差動クロック信号パスを有する請求項２３に記載のコンピュータシステム。
【請求項２５】
各シリアル相互接続は、それぞれが、前記１つ以上のバッファユニットから前記メモリコントローラに、データを伝達するように構成された複数の下り差動一方向信号パスを有する請求項１４に記載のコンピュータシステム。
【請求項２６】
各シリアル相互接続は、前記１つ以上のバッファユニットの１つから前記メモリコントローラにシリアルクロック信号を伝達するように構成された上り一方向差動クロック信号パスを有する請求項２５に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータメモリシステムに関し、より詳細には、メモリコントローラとメモリユニットの間のデータ転送に関する。
【背景技術】
【０００２】
コンピュータシステムは、多くの異なるタイプのシステムメモリを使用する。一般的なシステムメモリの１つのタイプは、着脱可能なメモリモジュールを使用して実装される。メモリモジュールには、さまざまなタイプおよび構成のものがある。しかし、一般には、メモリモジュールは、エッジコネクタと所定数のメモリデバイスを有するプリント回路基板として実装されうる。メモリモジュールは、マザーボードまたはその他のシステムボードに設けられたソケットに接続されうる。広く用いられているメモリモジュールはデュアルインラインメモリモジュール（ＤＩＭＭ）として公知であるが、ほかにも多くのメモリモジュールが存在する。ほかのシステムでは、メモリデバイスが、着脱できず、マザーボードまたはシステムボードに直接実装されていることがある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
コンピュータシステムのプロセッサは、近年、速度と性能が急速に向上している。しかし、システムメモリの性能は概して遅れをとっている。このように、システムの性能向上は、一部にはシステムメモリの性能によって制限されうる。このため、システムメモリの帯域幅と容量の向上が、システム設計者にとって大きな関心事でありうる。
【０００４】
システムメモリの性能は向上が可能であるものの、このような向上は時としてコストがかかってしまう。このように、コストを抑えつつ、システムメモリの帯域幅と容量を向上させることが望ましいと考えられる。
【課題を解決するための手段】
【０００５】
高速シリアルバッファを備えたメモリシステムの各種実施形態が開示される。一実施形態では、前記メモリシステムは、デュアルインラインメモリモジュール（ＤＩＭＭ）、例えば、それぞれが１つ以上のメモリデバイスおよびパラレル相互接続を備えるものなどの１つ以上のメモリユニットを備える。また、前記メモリシステムは、前記メモリコントローラと前記メモリユニットとの間のデータ転送を制御しうるメモリコントローラも備える。前記メモリシステムは、前記パラレル相互接続を介して前記メモリユニットに接続された１つ以上のバッファユニットを更に備える。前記バッファユニットのそれぞれは、各々のシリアル相互接続を介して前記メモリコントローラに接続されている。各バッファユニットは、前記メモリコントローラからコマンド情報を受信すると、前記各々のシリアル相互接続を介して前記メモリコントローラからデータを受信し、かつ前記パラレル相互接続を介して前記メモリユニットに前記データを送信しうる。前記メモリコントローラは、更に、前記バッファユニットから受信される情報に基づいて、送信データの信号特性を調整することによって、前記メモリコントローラと前記バッファユニット間のデータ転送を非対称的に制御するように構成されうる。
【０００６】
特定の一実施形態では、各シリアル相互接続は、複数の差動双方向データ信号パスを有する。各差動双方向データ信号パスは、所定のバッファユニットと前記メモリコントローラとの間でデータを伝達するように構成されうる。また、前記パラレル相互接続は、グループ分けされた複数の双方向データ信号パスを有しうる。各グループは、所定のバッファユニットと前記メモリユニットとの間でデータを伝達しうる。更に、各差動双方向データ信号パスを介して伝達される前記データは、前記パラレル相互接続の双方向データ信号パスの各々のサブセットによって伝達されうる。
【０００７】
別の特定の実施形態では、各シリアル相互接続は、前記メモリコントローラから所定のバッファユニットに前記コマンド情報を伝達しうる差動コマンド信号パスを有する。
【０００８】
別の特定の実施形態では、各シリアル相互接続は、複数の下り差動一方向信号パスと下り一方向差動クロック信号パスとを有する。前記下り差動一方向信号パスのそれぞれは、前記メモリコントローラから前記１つ以上のバッファユニットに、データ、ならびに前記アドレスおよびコマンド情報を伝達しうる。前記下り一方向差動クロック信号パスは、前記メモリコントローラから前記１つ以上のバッファユニットの各々にシリアルクロック信号を伝達しうる。
【０００９】
更に別の特定の実施形態では、各シリアル相互接続は、複数の上り差動一方向信号パスを有する。前記複数の上り差動一方向信号パスのそれぞれは、前記１つ以上のバッファユニットの１つから前記メモリコントローラにデータおよび巡回冗長符号（ＣＲＣ）情報を伝達しうる。
【図面の簡単な説明】
【００１０】
【図１】高速バッファを備えたメモリシステムの一実施形態のブロック図である。
【図２】図１のメモリシステムの構成要素のより詳細な態様を示す図である。
【図３】図１，図２に示した実施形態の例示的なバースト動作を示すタイミングチャートである。
【図４】図１〜図３に示した実施形態の動作を示すフローチャートである。
【図５】図１に示したメモリシステムを備えたコンピュータシステムの一実施形態のブロック図である。
【図６】デュアルモードメモリ相互接続を備えたメモリコントローラを備えたコンピュータシステムの一実施形態のブロック図である。
【図７】高速バッファを備えたメモリシステムの別の実施形態のブロック図である。
【図８】図７のメモリシステムの構成要素のより詳細な態様を示す図である。
【図９】図７，図８に示した実施形態の動作を示すフローチャートである。
【図１０】図７に示したメモリシステムを備えたコンピュータシステムの一実施形態のブロック図である。
【図１１】デュアルモードメモリ相互接続を備えたメモリコントローラを備えたコンピュータシステムの別の実施形態のブロック図である。
【発明を実施するための形態】
【００１１】
本発明は、さまざまに変形されたり代替形態を取りうるが、その特定の実施形態が、例として図面に図示され、かつ本明細書に詳細に記載される。しかし、図面およびその詳細な説明は、開示の形態に本発明を限定することを意図するものではなく、逆に、本発明が、添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれる全ての変形例、均等物および代替例を含むことを意図することが理解されるべきである。本願にわたり、「しうる」、「してもよい」との文言は、許容を示す意味（すなわち、可能性がある、可能であること）で用いられており、義務的な意味（すなわち必須）ではない点に留意されたい。
【００１２】
図１を参照すると、高速シリアルバッファの一実施形態を備えたメモリシステムのブロック図が示される。メモリシステム１０は、メモリユニット１１０Ａ〜１１０Ｈと、バッファユニット１７０Ａ〜１７０Ｊとに接続されたメモリコントローラ１００を備える。数字と文字を含む参照符号を付された要素が、数字のみによって参照されることもある点にも留意されたい。例えば、メモリユニット１１０Ａは、必要に応じて「メモリユニット１１０」と呼ばれることもある。また、メモリコントローラ１００は、ノースブリッジ構成において使用されるもののような、チップセットの一部をなすメモリコントローラでもよいという点に留意されたい。別の実施形態では、図５に示すように、メモリコントローラ１００は、メモリコントローラ１００が、例えば、１つ以上のプロセッサコアを備えた処理ノード内に組み込まれる組み込み型のソリューションの一部をなしていてもよい。
【００１３】
一実施形態では、例えば、メモリユニット１１０Ａ〜１１０Ｈは、デュアルインラインメモリモジュール（ＤＩＭＭ）などのメモリモジュールなどである。このため、各ＤＩＭＭは、複数のメモリデバイス（図示せず）、例えば、メモリデバイスのダイナミックアクセスメモリ（ＤＲＡＭ）の一員であるデバイスなどを備えうる。しかし、一般に、システム１０のメモリユニット１１０は、システムメモリであればどのようなタイプのものも例示することができる点に留意されたい。
【００１４】
図中の実施形態では、メモリコントローラ１００は、高速シリアル相互接続１６０Ａおよび１６０Ｂを介してバッファユニット１７０に接続されている。一実施形態では、各高速シリアル相互接続１６０は、差動信号方式を使用する。高速シリアル相互接続１６０には、複数の差動双方向データ信号パス（ＤＤＱ）、差動バッファコマンド信号パス（ＢＣＭＤ）、差動クロック信号パス（ＷＣＬＫ）、および差動巡回冗長符号信号パス（ＣＲＣ）が含まれうる。図中の実施形態では、２つのメモリチャネルが示されている。このように、シリアル相互接続１６０Ａは、一方のチャネルに使用され、このためバッファユニット１７０Ａ〜１７０Ｆに接続されており、シリアル相互接続１６０Ｂは、もう一方のチャネルに使用され、バッファユニット１７０Ｇ〜１７０Ｊに接続されている。図の実施形態では、バッファユニット１７０Ｅおよび１７０Ｊの各々は、一部が未使用であり、このため、必要に応じて他の用途に使用することができるという点に留意されたい。
【００１５】
また、メモリコントローラ１００は、パラレル相互接続１６５を介してメモリユニット１１０に接続されている。図に示すように、メモリコントローラ１００とメモリユニット１１０間のパラレル相互接続１６５には、アドレス／コマンド信号パス（ＡＤＤＲ／ＣＭＤ）およびクロック信号パス（ＭＣＬＫ）が含まれうる。図に示す２つのシリアル相互接続と同様に、２つのＡＤＤＲ／ＣＭＤ／ＭＣＬＫ信号パスが示されている。ＡＤＤＲ／ＣＭＤ／ＭＣＬＫ信号パスのそれぞれは、個々のメモリチャネル用に使用されうる。図に示すように、ＡＤＤＲ／ＣＭＤ／ＭＣＬＫ信号パスの一方はメモリユニット１１０Ａ〜１１０Ｄに接続され、もう一方のＡＤＤＲ／ＣＭＤ／ＭＣＬＫ信号パスはメモリユニット１１０Ｅ〜１１０Ｈに接続されている。更に、バッファユニット１７０は、パラレル相互接続１６５を介してもメモリユニット１１０に接続されている。図に示すように、パラレル相互接続１６５には、データパス（ＤＱ）およびデータストローブ信号パス（ＤＱＳ）も含まれうる。一実施形態では、メモリコントローラ１００は、ＡＤＤＲ／ＣＭＤ信号パスを介してアドレスおよびコマンドを送信することによって、メモリユニット１１０の動作を制御しうる。
【００１６】
後で更に詳細に説明するように、ＤＱデータパスはバッファユニット１７０とメモリユニット１１０との間で双方向にデータを伝達しうる。ＤＱデータパスは、所定数の８ビット（バイト幅）のデータパスを含みうる。例えば、データパス全体は２８８ビット幅であるが、データパス全体がバイトサイズの部分に分割されてもよい。一実施形態では、２８８ビットに４つのチェックバイトが含まれているが、別の実施形態では、それ以外の数のチェックバイトが使用されてもよいという点に留意されたい。また、データパス全体が任意の数のデータビットを有してもよく、異なるサイズの部分に分割されてもよい点にも留意されたい。シリアル相互接続１６０のＤＤＱデータパスは、パラレル相互接続を介して伝達されていたデータを、シリアルに高速で伝達することができる。例えば、ＤＤＱ０信号パスは、ＤＱ［０：３］に対応するデータビットを伝達し、ＤＤＱ１信号パスは、ＤＱ［４：７］に対応するデータビットを伝達し、…、と続いていくが、これ以外のマッピングも可能である。
【００１７】
データパスをメモリユニット１１０に接続できる方法はさまざまに存在する。例えば、バッファユニット１７０が１つの集積回路の一部であってもよいとも考えられる。しかし、このような実装に必要なピンの数により、この実施形態は実際的でない。このため、一実施形態では、データパスが分割され、より小さな単位にグループ分けされうる。したがって、一実施形態では、バッファユニット１７０のそれぞれは、個々のグループにバッファ機能を提供する独立した集積回路などである。
【００１８】
一実施形態では、ライトオペレーション時には、各シリアルバッファユニット１７０はシリアルにクロックイン（clock in）し、２バイトを記憶して、次に、この２バイトをパラレル相互接続１６５にパラレルに送信する。一実施形態では、シリアル相互接続１６０は、必要なスループットを得るために、パラレル相互接続１６５がデータ信号パス上にデータを転送する速度の４倍の速度でデータを転送しうる。しかし、ＡＤＤＲ／ＣＭＤ信号パスとＭＣＬＫ信号パスは、パラレル相互接続１６５のデータパスの半分の速度で動作しうる。例えば、シリアル相互接続１６０は、６．４ＧＴ／ｓでＤＤＱデータパス上にデータを転送し、パラレル相互接続１６５のデータ信号パスＤＱ／ＤＱＳは、１６００ＭＴ／ｓでデータを転送し、ＡＤＤＲ／ＣＭＤ信号パスとＭＣＬＫ信号パスは、８００ＭＴ／ｓで動作しうる。なお、別の実施形態では、シリアルバッファユニット１７０は、パラレルインターフェース１６５にバイトを送信する前に記憶するバイト数は、任意のバイト数であってもよい点に留意されたい。また、シリアル相互接続１６０が、パラレル相互接続１６５に対して任意の適したデータ速度で動作されうる点にも留意されたい。
【００１９】
ＣＲＣ信号パスは、それぞれの一方向差動信号パスを介して、各バッファユニット１７０からメモリコントローラ１００にＣＲＣ情報を伝達しうる。また、クロック信号パスは、バッファユニット１７０のそれぞれに、ＷＣＬＫ信号を伝達しうる。同様に、ＢＣＭＤ信号パスは、メモリコントローラ１００からバッファユニット１７０のそれぞれにバッファコマンドを伝達する。
【００２０】
一実施形態では、メモリコントローラ１００は、ＢＣＭＤ信号パスを介して送信するコマンドを介して、バッファユニット１７０の動作を制御しうる。このため、バッファユニット１７０は、通常動作モードと、構成およびテストモードを有しうる。例えば、通常のデータオペレーション中は、メモリコントローラ１００は、データストレージとの間で読み出しおよび書き込みをするため、およびＤＱ信号パスの位相オフセットを調整するために、データとプリアンブルおよびポストアンブルの両方に対してリードコマンドおよびライトコマンドを送信しうる。また、メモリコントローラ１００は、例えば、各種ループバックコマンド、ＣＲＣ制御コマンドおよびＣＲＣトレーニングパターンコマンドを送信することによって、バッファユニット１７０の構成、トレーニングおよびテストを制御しうる。
【００２１】
高いデータ速度では、バッファユニット１７０またはメモリコントローラ１００がビット誤りを受信する確率が非常に高くなる。このため、被保護ブロック内の複数のビット誤りを確実に検出する誤り検出コードにより、メモリコントローラ１００とバッファユニット１７０との間で転送を保護することが必要となりうる。一実施形態では、このような複数のビット誤り検出を提供するために、ＣＲＣコードが使用されうる。より詳細には、図２に示すように、バッファユニットおよび／またはメモリモジュール内の論理とメモリコントローラ１００への誤りの報告を簡略化するために、バッファユニット１７０は、自身が生成中のデータか自身が受信中のデータに基づいてＣＲＣを計算する。このため、メモリコントローラ１００にＣＲＣ情報を送り返すために、一方向ＣＲＣ信号パスが使用されうる。図２に示すように、ＣＲＣユニット２５０は、自身の内部データに基づいてＣＲＣを計算し、ＣＲＣデータをメモリコントローラ１００に送り返す。リンクのいずれかの方向で誤りが検出されると、メモリコントローラ１００はオペレーションを再試行することによって誤りを訂正しうる。
【００２２】
一実施形態では、ＣＲＣが、メモリコントローラ１００に到着したときに、ＣＲＣが保護しているデータブロックと同時にＣＲＣが利用可能となるように、ＣＲＣ情報が、バッファユニット１７０からメモリコントローラ１００に転送中のデータと同時に計算され送信されうる。一実施形態では、ＣＲＣの計算に伴う遅延は、ライトからリードへの遷移およびリードからライトへの遷移の間にデータパスで発生する遅延によって緩和されうる。
【００２３】
上で説明したように、多くの従来のシステムは、例えば、クロック位相のリカバリ、チャネル等化、誤り検出などの制御機能を両方の通信デバイスに実装することによって、高速の双方向通信を制御している。しかし、後で更に詳細に説明するように、このタイプの制御機能を非対称することでバッファユニット１７０を簡略化することができる。このため、メモリコントローラ１００は、バッファユニット１７０から受信した情報に基づいて、送信する書き込みデータの信号特性（例えば位相など）を動的かつ適応的に調整することができる制御機能を備え、バッファユニット１７０が正確にデータを読み出せるようにすることができる。また、メモリコントローラ１００は、メモリコントローラ１００が、バッファユニット１７０が送信するデータを受信することができるように、自身の内部受信器の特性を調整することができる。更に、メモリコントローラ１００は、アドレスおよびコマンドの情報が正しくサンプリングされるように、バッファユニット１７０に供給するクロック信号の位相を調整しうる。
【００２４】
より詳細には、高いデータ速度では、バス中の異なる信号用の送信パスにおける遅延が不確実であるため、これらの信号の受信器のサンプルクロックをビット単位で位相調整する必要がある。この回路をバッファユニット１７０に使用せずに済むように、メモリコントローラ１００は、自身の送信クロックおよびデータ信号の位相を調整し、これにより、スレーブに複雑な位相シフト回路を使用せずに済むようにする。このため、図中の実施形態では、メモリコントローラ１００は、制御ユニット１０１を備え、制御ユニット１０１は送信ユニット１０２、受信ユニット１０４およびクロックユニット１０６に接続されている。制御ユニット１０１は、バッファユニット１７０から受信したデータに基づいて位相情報を計算し、これが、メモリコントローラ１００内でさまざまなクロックエッジの位相を調整するために使用されうる。例えば、制御ユニット１０１は、このような情報を、ＣＲＣデータおよび読み出しデータとして受け取ると、送信ユニット１０２、受信ユニット１０４およびクロックユニット１０６内のそれぞれの位相トラッキングおよび調整回路（図２に示す）を制御しうる。この機能は、図２，図５の説明に関連して、後で更に詳細に説明する。
【００２５】
図２を参照すると、図１のメモリシステムの構成要素のより詳細な態様を示す図が示される。図１に示した構成要素に対応する構成要素は、明瞭と簡潔を期するために同じ符号を付している。メモリコントローラ１００は、差動シリアル相互接続１６０を介してシリアルバッファ１７０に接続されている。バッファユニット１７０は、図１に示したバッファユニット１７０Ａ〜１７０Ｊのいずれであってもよい点に留意されたい。このため、差動シリアル相互接続１６０には、差動ＷＣＬＫ信号パス、差動ＢＣＭＤ信号パス、差動ＣＲＣ信号パス、および差動データ信号パスＤＤＱ［７：０］が含まれる。
【００２６】
メモリコントローラ１００では、図１のクロックユニット１０６によって６．４ＧＨｚのクロック信号が生成され、このクロック信号が、可変位相ユニット２９３，２９４，２９５，２９６に接続されており、これらは、クロックユニット１０６の一部をなし、メモリコントローラ１００用の内部クロックを供給しうる。可変位相ユニット２９３，２９４，２９５，２９６の出力は、それぞれ、フリップフロップ（ＦＦ）２９０，２８９，２８６，２８４用のクロック信号を供給する。可変位相ユニット２９３は、ＦＦ２９０のクロック入力に接続されている。ＦＦ２９０は、入力にフィードバックループでインバータ２９２が接続されているため、６．４ＧＨｚのクロックが３．２ＧＨｚのクロックとして出力される。ＦＦ２９０の出力は、差動出力ドライバ２９１の入力に接続され、差動出力ドライバ２９１の出力は、差動ＷＣＬＫ信号パスに接続されている。書き込みデータは、ＦＦ２８６の入力に接続されている。ＦＦ２８６の出力は、差動等化出力ドライバ２８７に接続されている。ドライバ２８７の出力は、ＤＤＱ［７：０］の１つの信号パスに接続されている。このため、ＤＤＱ［７：０］の各信号パスに対して、同様の書き込みデータ出力パス（図示せず）が使用されうる。同様に、読み出しデータのために、ＤＤＱ［７：０］の１つの信号パスが差動入力バッファ２８３に接続されており、差動入力バッファ２８３の出力がＦＦ２８４の入力に接続されている。ＦＦ２８４の出力は、メモリコントローラ１００の他の部分（図示せず）に、読み出しデータとして供給される。ＣＲＣ信号パスは差動入力バッファ２８１に接続され、差動入力バッファ２８１の出力は受信器クロックデータ回復ユニット（ＲｘＣＤＲ）２８２の入力に接続されている。ＲｘＣＤＲはビット毎オフセットユニット２８５に接続され、ビット毎オフセットユニット２８５は可変位相ユニット２９６に接続されている。バッファコマンド情報がＦＦ２８９の入力に供給される。ＦＦ２８９の出力は差動等化出力ドライバ２８８に接続され、差動等化出力ドライバ２８８は差動ＢＣＭＤ信号パスに接続されている。
【００２７】
バッファユニット１７０は、ＤＤＱ［７：０］信号パスのそれぞれの差動入力バッファであるバッファ２０９を備える。バッファ２０９は、ＤＤＱ［７：０］信号パスの１つに送信される書き込みデータを受け取るように接続されている。バッファ２０９の出力は、ＦＦ２０８の入力に接続されている。ＦＦ２０８の出力は、書き込みＦＩＦＯ２２０に接続されている。書き込みＦＩＦＯ２２０の出力は、ＤＲＡＭインタフェース２５６に接続され、ＤＲＡＭインタフェース２５６は、パラレル相互接続１６５を介してメモリユニット１１０にインタフェースするために使用される入力バッファおよび出力ドライバ回路を表している。図に示すように、パラレル相互接続１６５の一部に、１６のデータストローブ信号パスＤＱＳ［１５：０］と３２のデータ信号パスＤＱ［３１：０］がある。書き込みＦＩＦＯからの書き込みデータは、ＤＱ［３１：０］を介してメモリユニット１１０に出力されうる。ＤＱ信号とＤＱＳ信号のみが示されているが、簡潔を期するためにほかの信号を省略している点に留意されたい。また、ＭＣＬＫ信号とＤＱＳ信号も差動信号であってもよいが、簡潔を期するためにそのように図示されていない点にも留意されたい。
【００２８】
ＤＱ［３１：０］を介したメモリユニット１１０からの読み出しデータは、ＤＲＡＭインタフェース２５６を介してマルチプレクサ（ｍｕｘ）２０３の１つの入力に接続されている。ｍｕｘ２０３の出力は、ＦＦ２０６の入力に供給される。制御論理２５５が、ｍｕｘ２０３のマルチプレクサ入力選択を制御している。ＦＦ２０６の出力は、差動等化データ出力ドライバ２１０に接続され、差動等化データ出力ドライバ２１０はＤＤＱ［７：０］の差動信号パスの１つに接続されている。
【００２９】
バッファユニット１７０は、メモリコントローラ１００から入力バッファ２０１を介してバッファコマンド情報（ＢＣＭＤ）を受け取るように接続された制御論理２５５を備え、入力バッファ２０１は、ＦＦ２０２の入力に接続されている。ＢＣＭＤ情報は、制御論理２５５に、ＤＱデータパスに書き込みデータを出力させたり、ＤＱデータパス用のデータを読み出させたり、初期化シーケンスに移行させるか、またはこれから退出させる、などをさせる。このため、制御論理２５５は、ＤＲＡＭインタフェース２５６、ＣＲＣユニット２５０、ｍｕｘ２０３のほか、そのほかの回路を制御しうる。
【００３０】
図中の実施形態では、３．２ＧＨｚのクロックが、ＦＦ２０２，２０５，２０８，２０６のクロック入力に接続されている。ＦＦ２０２，２０５，２０８，２０６のそれぞれは、デュアルエッジフリップフロップとして図示されており、入力クロック信号の立ち上がりおよび立ち下りの両方で「Ｄ」入力をラッチするように構成されている。したがって、読み出しデータおよびＢＣＭＤ情報を、そのそれぞれのデータパスで６．４Ｇｂ／ｓで伝達することができ、入力が３．２ＧＨｚのクロックを使用してラッチされうる。同様に、メモリコントローラ１００は６．４ＧＨｚで動作するため、読み出しデータおよびＣＲＣ情報は、そのそれぞれのデータパスで６．４Ｇｂ／ｓで伝達され、特定のループバックモード中にメモリコントローラ１００内で使用されうる。
【００３１】
一実施形態では、書き込みデータが受信されると、このデータがＦＦ２０８によってラッチされ、ＦＩＦＯ２２０に記憶される。書き込みＦＩＦＯ２２０は、ＤＲＡＭインタフェース２５６を介してメモリユニット１１０に出力するために十分なビットを受け取るまで、このデータを記憶しうる。
【００３２】
図５の説明に関連して後で詳細に説明するように、動作中に、メモリコントローラ１００は、送信される書き込みデータの信号特性（例えば位相など）と、その内部の受信器特性を動的かつ適応的に調整し、バッファユニット１７０に供給される３．２ＧＨｚのクロックを生成する６．４ＧＨｚのクロックの位相を調整しうる。より詳細には、上で説明したように、受信ユニット１０４は、バッファユニット１７０によって送信されるデータをより最適に受け取るために、自身のローカルサンプルクロック位相を調整するための、サンプルクロック位相調整回路（ＲｘＣＤＲ２８２およびオフセットユニット２８５など）を備える。このため、メモリコントローラ１００がバッファユニット１７０からＣＲＣデータを受信している間は常に、受信ユニット１０４は、ＲｘＣＤＲ２８２、オフセットユニット２８５および可変位相ユニット２９６を使用して、ＦＦ２８４のクロック位相を調整しうる。また、メモリコントローラ１００内の制御ユニット１０１は、可変位相ユニット２９３を調整して、ＦＦ２９０に供給する６．４ＧＨｚのクロック信号の位相を調整しうる。例えば、メモリコントローラ１００は、パワーオンリセットなどの初期化処理中に、バッファユニット１７０がバッファコマンド信号を正しくサンプリングできるようにするために、可変位相ユニット２９４を調整して、ＦＦ２８９に供給する６．４ＧＨｚのクロック信号の位相を調整しうる。更に、制御ユニット１０１は、初期化中および動作中の所定間隔に、バッファユニット１７０が書き込みデータをより最適に受け取ることができるように、可変位相ユニット２９５を調整し、ＦＦ２８６に供給する６．４ＧＨｚのクロック信号の位相を調整して、バッファユニット１７０に送信する書き込みデータの位相を調整しうる。
【００３３】
図３は、８ビットバースト中の図１，図２に示した実施形態の例示的な動作を示すタイミングチャートである。より詳細には、このタイミングチャートは１２８バイトのリード／ライト／リードバーストを示す。図には、メモリコントローラ１００によってメモリユニット１１０に供給されるＭＣＬＫ信号とＡＤＤＲ／ＣＭＤ信号が示されている。また、図には、バッファユニット１７０とメモリユニット１１０間で、それぞれデータとデータストローブを伝達するＤＱ信号およびＤＱＳ信号も示される。残りの信号は、メモリコントローラ１００とバッファユニット１７０間で情報を伝達するＤＤＱ信号、ＢＣＭＤ信号およびＣＲＣ信号である。
【００３４】
図に示すように、リードコマンド（ｒｄＡおよびｒｄＢなど）がメモリコントローラ１００によってメモリユニット１１０に送信されている。数ＭＣＬＫサイクル後に、データストローブ信号ＤＱＳと共にデータがＤＱ信号パスに現れる。データがＤＱ信号パスに現れる前に、リードコマンド（ｒ０、ｒ１など）が、ＢＣＭＤ信号パスを介してバッファユニット１７０に送信される。ｒｄＡデータがＤＱ信号パスに現れた後の次のＭＣＬＫサイクルで、ｒｄＡデータがＤＤＱ信号パスに現れる。上で説明したように、ｒｄＡとｒｄＢのデータは、ＭＣＬＫ速度の２倍の速度（１６００ＭＴ／ｓなど）で、メモリユニット１１０からバッファユニット１７０にパラレルに伝達される。しかし、データは、遙かに高いデータ速度（６．４ＧＴ／ｓなど）で、バッファユニット１７０からメモリコントローラ１００にシリアルに伝達される。
【００３５】
リードからライトへの遷移時のバスターンアラウンドタイムを短縮するために、書き込みデータが、バッファユニット１７０内に予めバッファされうる。例えば、図に示すように、ｗｒＸのデータおよび関連するＢＣＭＤライトコマンド（ｗ１など）がバッファユニット１７０に送信されるが、点線に示すように、このデータは後になるまでメモリユニット１１０に書き込まれない。
【００３６】
このリード／ライト／リードのシーケンスでは、一般に、ｗｒＸのデータが、メモリコントローラ１００によってＤＤＱ信号パスを介してバッファユニット１７０に書き込まれて、バッファユニット１７０内に記憶されうる。メモリコントローラ１００は、同時に、ＡＤＤＲ／ＣＭＤ信号パスを介して、メモリユニット１１０にリードコマンド（ｒｄＡと、その数ＭＣＬＫサイクル後にｒｄＢ）を発行する。ＤＱバスにｒｄＡデータが現れる直前に（例えば、ＤＤＱでのｗｒＸのデータ転送の終了時点で）、メモリコントローラ１００は、ＢＣＭＤを介してバッファユニット１７０にリードコマンド（ｒ１、ｒ２など）を発行する。ｒｄＡとｒｄＢのデータがＤＱバスに出力されている間に、メモリコントローラ１００は、ＡＤＤＲ／ＣＭＤバスを介してメモリユニット１１０にライトコマンド（ｗｒＸおよびｗｒＹなど）を送信する。ｒｄＡとｒｄＢのデータは、バッファユニット１７０内にラッチされ、ＤＤＱを介してメモリコントローラ１００に送信される。ＤＤＱでのｒｄＢデータの転送が完了する前に、メモリコントローラ１００は、ライトコマンド（ｗ０、ｗ２およびｗ３など）をバッファユニット１７０に送信する。ｗ２コマンドにより、以前に記憶されたｗｒＸのデータがメモリユニット１１０に書き込まれ、ｗ３ライトコマンドによって、ＤＤＱ信号パスを介して送信されたばかりのｗｒＹのデータが、ＤＱデータパスを介してメモリユニット１１０に送信される。ｗｒＸのデータがメモリユニット１１０に書き込まれている間に、メモリコントローラ１００は、ＡＤＤＲ／ＣＭＤ信号パスを介してメモリユニット１１０にｒｄＣコマンドを発行する。数サイクル後に、ｒｄＣデータとデータストローブが、それぞれＤＱ信号パスとＤＱＳ信号パスに現れる。ｒｄＣデータがＤＱデータパス上でバッファユニット１７０に転送されている間に、メモリコントローラ１００は、ＢＣＭＤ信号パスを介してバッファユニット１７０にリードコマンド（ｒ０およびｒ１など）を発行し、これにより、バッファユニット１７０が読み出しデータをＤＤＱデータパスを介して送信できるようになる。ｗｒＸのデータと同様に、ｗｒＺのデータはこのバースト中はメモリユニット１１０に書き込まれない。その代わりに、次のライトバーストで使用するためにバッファユニット１７０内に記憶される。上で説明したように、ＣＲＣが生成され、メモリコントローラ１００とバッファユニット１７０の間のリードオペレーションとライトオペレーション中にメモリコントローラ１７０に送信される。ＣＲＣは、矢印によって示されるように、ＢＣＭＤ情報、書き込みデータおよび読み出しデータから生成される。図に示すように、ｗ１、ｒ０、ｗ０コマンド、ｗｒＸ、ｒｄＡとｒｄＢのデータが、ＣＲＣ信号パス上でバッファユニット１７０からメモリコントローラ１７０に送信されるＣＲＣ情報を生成するために使用される。
【００３７】
図に示すように、上記の信号により、ＣＲＣ情報が生成され、メモリコントローラ１００に送信されうるが、バッファユニット１７０が未使用の（すなわち、データを転送していない）ときにも、ＣＲＣ信号パスが遷移することがある。上で説明したように、ＣＲＣデータは、メモリコントローラ１００内のＲｘＣＤＲ２８２を駆動させる。このため、これらの遷移により、読み出しデータを正しくサンプリングするために、読み出しデータサンプルクロックが常に位相整合されるようになる。
【００３８】
図４は、図１，図２に示した実施形態の動作を示すフローチャートである。上で簡単に説明したように、メモリコントローラ１００とバッファユニット１７０間のインタフェースは非対称である。すなわち、メモリコントローラ１００内の制御機能のほうがバッファユニット１７０内の制御機能よりも多い。このため、パワーアップ中および動作中の所定の時間に、メモリコントローラ１００は、バッファユニット１７０が正しくデータを読み出すことができるように、バッファユニット１７０から受信した情報に基づいて、送信する書き込みデータの信号特性（例えば位相など）を調整しうる。また、メモリコントローラ１００は、メモリコントローラ１００が、バッファユニット１７０が送信するデータを正しく受信することができるように、自身の内部受信器の特性を調整することができる。更に、メモリコントローラ１００は、バッファコマンド情報がバッファユニット１７０によって正しくサンプリングされるように、バッファユニット１７０に供給するクロック信号の位相を調整し、ＢＣＭＤ信号の位相を調整しうる。
【００３９】
図１，図２，図４と、ブロック４００の始点を合わせて参照すると、リセットまたはパワーオン状態（ブロック４００）の後に、一実施形態では、制御論理２５５が、バッファユニット１７０をリセットからトレーニングモードに移行させる（ブロック４０５）。トレーニング状態に入ると、全ての双方向信号パスドライバ（ＤＤＱ、ＤＱおよびＤＱＳなど）が高インピーダンス状態にされうる（ブロック４１０）。トレーニングモードでは、偶数ＭＣＬＫサイクルの間にＢＣＭＤ信号パスがＣＲＣ信号パスにループバックされ（ブロック４１５）、奇数ＭＣＬＫサイクルの間はトレーニングパターン（１０１０１０１０…）がＣＲＣパスに出力される（ブロック４２０）。メモリコントローラ１００がＢＣＭＤ信号パス上にトレーニングパターンを出力し、これが、偶数ＭＣＬＫサイクルの間にＣＲＣパスに出力される（ブロック４２５）。メモリコントローラ１００は、ＣＲＣパス上で既知のデータパターンを受信して、ビットロックとバイトロックを取得する（ブロック４３０）。また、メモリコントローラ１００は、可変位相ユニット２９４を調整することによって、ＢＣＭＤクロック信号の位相を調整し、この結果、バッファユニット１７０が、ＢＣＭＤ信号パス上でビットロック（すなわちビット整合）、およびバイトロック（すなわちバイト整合）を取得しうる（ブロック４３５）。より詳細には、バッファユニット１７０が、各ビットを正しくキャプチャし、正しいバイト境界で、シリアルビットをシフトインし、８ビットバイト全体をキャプチャすることを保証するために、メモリコントローラ１０００は、送信中のパターンを１ビット時間（ＵＩ）だけ変化（シフト）させうる。次に、メモリコントローラは、バッファコマンドを送信して、バッファユニット１７０をトレーニングモードから退出させる（ブロック４４０）。
【００４０】
メモリコントローラ１００は、ＤＤＱデータパスをトレーニングするために、トレーニングパターン（多くの遷移を含むランダムパターンなど）をＤＤＱデータパスを介して送信する。このパターンは、書き込みＦＩＦＯ２２０内に記憶される（ブロック４４５）。メモリコントローラ１００は、記憶したパターンを読み戻し、ビットロックを取得する（ブロック４５０）。メモリコントローラ１００は、ビット誤り率が実質的に５０％になるように、（例えば、可変位相ユニット２９５を調整することによって）書き込みデータの位相を調整する。５０％の遷移誤り率は、書き込みデータがエッジの近くでサンプリングされていることを示しうる。次に、メモリコントローラ１００は、書き込みデータの位相を０．５ＵＩだけ後方に調整する。これにより、例えば、ＦＦ２０８が各データビットの中央付近でデータをサンプリングするようになる。このプロセスが、各ＤＤＱ信号パスに対して実行されうる（ブロック４５５）。メモリコントローラ１００は、バイトロックを取得するために、ＤＤＱデータパスを介してトレーニングパターンを送信する。一実施形態では、トレーニングパターンは、各バイトで異なるパターンを含んでいてもよい。メモリコントローラ１００は、ＣＲＣ情報をモニタしながら、トレーニングパターンデータを１ＵＩ増分ずつシフトさせうる。ＣＲＣ情報が正しければ、バイトロックが確立される（ブロック４６０）。バッファユニット１７０内でトレーニングパターンがバイトロックされると、メモリコントローラ１００は読み出しデータのバイトロックを取得しようとする。一実施形態では、メモリコントローラ１００は、バイトロックされたトレーニングパターンを読み戻す（ブロック４６５）。この時点で、シリアル相互接続は、ビットロックとバイトロックの両方が書き込み方向と読み出し方向で取得されているように整合されている。
【００４１】
このようにして、パラレルＤＲＡＭインタフェース２５６が整合されうる。より詳細には、一実施形態では、メモリコントローラ１００は、書き込み位相ＤＱＳエッジが、適切なＭＣＬＫエッジと整合されるまで、ＢＣＭＤとＤＤＱの書き込み位相整合を保ちながらＷＣＬＫ位相を調整しうる（ブロック４７０）。
【００４２】
バッファユニット１７０のシリアル相互接続とパラレル相互接続が整合されると、正常動作中に、メモリコントローラ１００は、上で説明したように、トレーニングパターンを使用してシリアル相互接続１６０の書き込み位相トレーニングを実行しうる。このトレーニングは、所定間隔で実行されうる。同様に、アイドル時間中に、メモリコントローラ１００は、所定数のアイドルコマンドをバッファユニット１７０に送信することによって、ＢＣＭＤとＣＲＣの整合をモニタし調整しうる。これらのアイドルコマンドにより、遷移が多く含まれる所定のＣＲＣパターンがＣＲＣ信号パス上で送信されうる（ブロック４７５）。
【００４３】
図５を参照すると、図１，図２のメモリシステムを備えたコンピュータシステムの例示的な実施形態のブロック図が示される。明瞭と簡潔を期するために、図１，図２に示す構成要素に対応する構成要素には同じ参照符号を付している点に留意されたい。コンピュータシステム５００は、メモリバッファ１７０とメモリユニット１１０とに接続された処理ノード６５０を有する。
【００４４】
一実施形態では、バッファユニット１７０はマザーボードに実装された集積回路チップであり、メモリユニット１１０はソケットに接続されうる。別の実施形態では、バッファユニット１７０は、メモリドータカードソケットに接続することができるドータボードに実装された集積回路チップであってもよい。このような実装では、ドータボードは、メモリユニット１１０をライザー構成で接続するソケットを備えうる。
【００４５】
より詳細には、処理ノード６５０は、メモリコントローラ１００に接続されたプロセッサコア６０１を備える。処理ノード６５０内に含まれるプロセッサコア６０１の個数はどのような数であってもよい点に留意されたい。上で説明したように、メモリコントローラ１００の信号は、差動シリアル相互接続１６０を介してメモリバッファ１７０に、パラレル相互接続１６５を介してメモリユニット１７０に接続されている。図に示すように、シリアル相互接続には、一方向ＣＲＣ信号パス、一方向ＷＣＬＫ信号パス、一方向ＢＣＭＤ信号パスおよび双方向データ信号パスが含まれる。また、パラレル相互接続１６５には、メモリバッファ１７０とメモリユニット１１０間の双方向のデータパスおよびデータストローブ信号パスが含まれる。更に、パラレル相互接続１６５には、処理ノード６５０とメモリユニット１１０間の一方向のＡＤＤＲ／ＣＭＤ信号パスおよびＭＣＬＫ信号パスが含まれる。パラレル相互接続１６５には、ＡＤＤＲ／ＣＭＤ信号に加えて、チップセレクト、バンクセレクトや他の信号が含まれうるが、簡潔を期するために、ここではこれらが省略されている点に留意されたい。また、ＭＣＬＫ信号とＤＱＳ信号も差動信号であってもよいが、簡潔を期するためにそのように図示されていない点にも留意されたい。
【００４６】
図６を参照すると、デュアルモードメモリ相互接続を備えたメモリコントローラを備えたコンピュータシステムの一実施形態のブロック図が示されるコンピュータシステム７００は、図５に示したコンピュータシステム５００と同様である。例えば、コンピュータシステム７００も、メモリバッファ１７０とメモリユニット１１０とに接続された処理ノード６５０を有する。しかし図６では、メモリコントローラ７１０がデュアルモードメモリコントローラであるという点で、図５のメモリコントローラ１００とは異なる。より詳細には、下記に詳しく説明するように、メモリコントローラ７１０は、メモリユニット１１０へのパラレル相互接続、またはバッファユニット１７０と併用するためのシリアル相互接続のいずれかにより動作するように選択的に構成されうる。
【００４７】
上で簡単に説明したように、コンピュータシステムの設計者は、システムの構成要素が、できるだけ多くのシステムメーカによって使用されることができるような非常に柔軟なシステムを設計することを求めている。したがって、一実施形態では、メモリコントローラ７１０は、各種のメモリ規格と互換性を有しうるパラレルメモリ相互接続を提供する第１のモードで動作するように構成されうる。例えば、各種の実施形態では、メモリユニット１１０は、必要に応じて、ＤＤＲ２、ＤＤＲ３または他の規格と互換性を有しうる。このため、メモリコントローラ７１０は、必要に応じて、自身のパラレル相互接続として、ＤＤＲ２およびＤＤＲ３技術と互換性を有するパラレル相互接続を提供しうる。また、メモリコントローラ７１０は、図１，図２のシリアル相互接続１６０などの差動シリアル相互接続を提供するための第２のモードでも動作するように構成されうる。
【００４８】
図６に示すように、構成ユニット７２０は、メモリコントローラ７１０内のＩ／Ｏ回路７１１の構成を決定し選択しうる。一実施形態では、メモリコントローラ７１０のモードは、処理ノード６００の固定配線された外部ピンを使用して選択さされうる。このような実施形態では、例えば、処理ノード６００の１本以上の外部選択ピンが、図に示すように回路のグラウンド、ＶＤＤ、または他の何らかの電圧に固定配線されうる。構成ユニット７２０は、選択ピンの状態を検出し、次に、これに従ってメモリコントローラ７１０のＩ／Ｏ回路７１１を構成する。別の実施形態では、ＢＩＯＳ６０５または他のシステムレベルソフトウェアの実行中のシステムの起動時に、メモリコントローラのモードが選択されうる。
【００４９】
図中の実施形態では、第１のモードでは、メモリコントローラ７１０がメモリユニット１１０に直接接続される。このような構成では、Ｉ／Ｏ回路７１１は、例えば、ＤＱ、ＤＱＳ、ＡＤＤＲ／ＣＭＤおよびＭＣＬＫなどの信号パスが含まれるパラレル相互接続である。第２のモードでは、Ｉ／Ｏ回路７１１は差動シリアル相互接続に変化し、図１，図２，図５などに示すように、メモリバッファユニット１７０に接続される（点線で示す）。
【００５０】
Ｉ／Ｏ回路７１１は、モードの切り替えを行うために、複数の出力ドライバおよび入力バッファを備えうる。ドライバおよびバッファのなかには、差動回路があっても、シングルエンド形があってもよい。一実施形態では、モードに応じて、処理ノードの各種入出力ピンと、ドライバおよびバッファとの間の接続が変更されうる。このため、一実施形態では、Ｉ／Ｏ回路７１１の一部は、プログラム可能な相互接続のように動作しうる。
【００５１】
例えば、図６に示すように、ＣＲＣ／ＤＱＳ信号パスは、双方向ＤＱＳ信号パスと一方向ＣＲＣ信号パスで切り替わりうる。また、ＤＱＳ／ＢＣＭＤも、双方向ＤＱＳ信号パスと一方向ＢＣＭＤ信号パスで切り替わりうる。また、ＷＣＬＫ／ＤＱＳ信号パスは、双方向ＤＱＳ信号パスと一方向ＷＣＬＫ信号パスで切り替わりうる。更に、ＤＤＱ／ＤＱ信号パスは、双方向シングルエンド形ＤＱＳ信号パスと双方向差動データＤＤＱ信号パスで切り替わりうる。
【００５２】
図７を参照すると、高速バッファを備えたメモリシステムの別の実施形態のブロック図が示される。メモリシステム８０は、メモリユニット１１０Ａ〜１１０Ｈと、バッファユニット８７０Ａ〜８７０Ｄとに接続されたメモリコントローラ８００を備える。また、図１に示すメモリコントローラと同様に、メモリコントローラ８００も、ノースブリッジ構成において使用されるもののような、チップセットの一部をなすメモリコントローラでもよいという点に留意されたい。別の実施形態では、図１０に示すように、メモリコントローラ８００は、メモリコントローラ１００が、例えば、１つ以上のプロセッサコアを備えた処理ノード内に組み込まれる組み込み型のソリューションの一部をなしていてもよい。
【００５３】
上で説明した図面に示したものに対応する回路構成要素は、明瞭と簡潔を期するために同じ符号を付している。このため、一実装では、例えば、メモリユニット１１０Ａ〜１１０Ｈは、上で説明したように、デュアルインラインメモリモジュール（ＤＩＭＭ）などのメモリモジュールなどであってもよい。各種の実施形態では、例えば、メモリユニットは、ＤＤＲ２およびＤＤＲ３などの各種技術に準拠しうる。
【００５４】
図中の実施形態では、メモリコントローラ８００は、シリアル相互接続８６０Ａ〜８６０Ｄを介してバッファユニット８７０に接続されている。一実施形態では、各シリアル相互接続８６０は、差動信号方式を使用する。図８の説明に関連して後で更に詳細に説明するように、シリアル差動相互接続８６０Ａ〜８６０Ｄには、それぞれ、各バッファユニット８７０への上りリンクと下りリンクが含まれうる。下りリンクには、複数の下りシリアルデータ信号パス（ＤＳＤ）と、バッファユニット８７０にデータをクロックするために使用されうる対応する下りシリアルクロック信号パス（ＤＳＣＬＫ）が含まれうる。同様に、上りリンクのそれぞれには、複数の上りシリアルデータ信号パス（ＵＳＤ）と、メモリコントローラ８００にデータをクロックするために使用されうる対応する上りシリアルクロック信号パス（ＵＳＣＬＫ）が含まれる。図中の実施形態では、４つのメモリチャネルが示されているが、ほかの数も可能である。このように、シリアル相互接続１６０Ａは、１つのチャネルに使用され、このためバッファユニット８７０Ａに接続され、シリアル相互接続８６０Ｂは、第２のチャネルに使用され、バッファユニット８７０Ｂに接続され、シリアル相互接続８６０Ｂは、第３のチャネルに使用され、バッファユニット８７０Ｃに接続され、シリアル相互接続８６０Ｄは、第４のチャネルに使用され、バッファユニット８７０Ｄに接続されうる。
【００５５】
上記の実施形態で使用されたシリアル相互接続１６０とは対照的に、シリアル相互接続８６０は、データ、ＣＲＣおよびＡＤＤＲ／ＣＭＤ情報をそれぞれ伝達するデータ信号パスを使用する。このように、一実施形態では、シリアル相互接続８６０は、パケットに、ペイロードがＡＤＤＲ／ＣＭＤとデータのいずれであるかを示すエンコードが含まれうるパケットプロトコルを使用しうる。また、各パケットは、ＣＲＣ情報およびペイロード（データまたはＡＤＤＲ／ＣＭＤなど）の専用のビット時間を有するフォーマットを有しうる。
【００５６】
また、バッファユニット８７０Ａ〜８７０Ｄは、パラレル相互接続８６５を介してメモリユニット１１０に接続されている。一実施形態では、パラレル相互接続８６５には、データパス（ＤＱ）、データストローブ信号パス（ＤＱＳ）、アドレス／コマンド信号パス（ＡＤＤＲ／ＣＭＤ）、およびクロック信号パス（ＭＣＬＫ）が含まれうる。パラレル相互接続８６５には、チップセレクト、バンクセレクト、チェックビットや他の信号が含まれうるが、簡潔を期するために、ここではこれらが省略されている点に留意されたい。また、パラレル相互接続８６５に４つのチャネルが含まれてもよい点にも留意されたい。図に示すように、１つのチャネルは、メモリユニット１１０Ａ〜１１０Ｄに接続され、別のチャネルは、メモリユニット１１０Ｅ〜１１０Ｈに接続され、別のチャネルは、メモリユニット１１０Ｊ〜１１０Ｍに接続され、別のチャネルは、メモリユニット１１０Ｎ〜１１０Ｒに接続されている。
【００５７】
後で更に詳細に説明するように、ＤＱデータパスは、バッファユニット８７０とメモリユニット１１０との間で双方向にデータを伝達する一方、シリアル相互接続８６０の差動データパスは、パラレル相互接続を介して伝達されたデータを、シリアルに高速で伝達しうる。例えば、所定のアップリンクＵＳＤ［０］またはダウンリンクＤＳＤ［０］の信号パスは、ＤＱ［０：３］に対応するデータビットを伝達し、ＵＳＤ［１］信号パスは、ＤＱ［４：７］に対応するデータビットを伝達し…、と続いていくが、これ以外のマッピングも可能である。一部の実施形態では、シリアルリンクは、シリアルデータピンの本数に関して非対称でもよい。一実施形態では、ライトオペレーションよりも、リードオペレーションのほうが帯域幅の消費が大きいと考えられるため、アップリンクのデータ信号パスの本数が、ダウンリンクよりも多い場合もある。
【００５８】
上で説明したバッファユニット１７０と同様に、各シリアル相互接続８６０は、パラレル相互接続８６５がデータ信号パス上にデータを転送する速度の４倍の速度でデータを転送しうる。しかし、ＡＤＤＲ／ＣＭＤ信号パスとＭＣＬＫ信号パスは、パラレル相互接続８６５のデータパスの半分の速度で動作しうる。例えば、シリアル相互接続８６０は、６．４ＧＴ／ｓでアップリンクとダウンリンクのデータパス上にデータを転送し、パラレル相互接続８６５のデータ信号パスＤＱ／ＤＱＳは、１６００ＭＴ／ｓでデータを転送し、ＡＤＤＲ／ＣＭＤ信号パスとＭＣＬＫ信号パスは、８００ＭＴ／ｓで動作しうる。シリアル相互接続８６０が、パラレル相互接続８６５に対して任意の適したデータ速度で動作されうる点に留意されたい。
【００５９】
一実施形態では、メモリコントローラ８００は、ＤＳＤ信号パス上に送信するコマンドを介して、バッファユニット８７０の動作を制御しうる。このため、バッファユニット８７０は、通常動作モードと、構成およびテストモードを有しうる。例えば、通常のデータオペレーション中は、メモリコントローラ８００は、データストレージとの間で読み出しおよび書き込みをするため、およびＤＱ信号パスの位相オフセットを調整するために、データとプリアンブルおよびポストアンブルの両方に対してリードコマンドおよびライトコマンドを送信しうる。また、メモリコントローラ８００は、例えば、各種ループバックコマンド、ＣＲＣ制御コマンドおよびＣＲＣトレーニングパターンコマンドを送信することによって、バッファユニット８７０の構成、トレーニングおよびテストを制御しうる。
【００６０】
高いデータ速度では、バッファユニット１７０またはメモリコントローラ１００がビット誤りを受信する確率が非常に高くなる。このため、被保護ブロック内の複数のビット誤りを確実に検出する誤り検出コードにより、メモリコントローラ１００とバッファユニット１７０との間で転送を保護することが必要となりうる。一実施形態では、このような複数のビット誤り検出を提供するために、ＣＲＣコードが使用されうる。より詳細には、図２に示すように、ＣＲＣ情報が生成され、アップリンクとダウンリンクの両方で送信される。シリアル相互接続のいずれかの方向で誤りが検出されると、メモリコントローラ１００はオペレーションを再試行することによって誤りを訂正しうる。一実施形態では、下りリンクで検出されたＣＲＣエラーは、上りＣＲＣに符号化されうる。
【００６１】
一実施形態では、メモリコントローラ８００は、バッファユニット８７０から受信した情報に基づいて、送信する書き込みデータの信号特性（例えば位相など）を動的かつ適応的に調整することができる制御機能を備え、バッファユニット８７０が正確にデータを読み出せるようにすることができる。また、メモリコントローラ８００は、メモリコントローラ１００が、バッファユニット８７０が送信するデータを受信することができるように、自身の内部受信器の特性を調整することができる。更に、メモリコントローラ８００は、アドレスおよびコマンドの情報が正しくサンプリングされるように、バッファユニット８７０に供給するクロック信号の位相を調整しうる。
【００６２】
より詳細には、高いデータ速度では、バス中の異なる信号用の送信パスにおける遅延が不確実であるため、これらの信号の受信器のサンプルクロックをビット単位で位相調整する必要がある。この回路をバッファユニット８７０に使用せずに済むように、メモリコントローラ８００は、自身の送信クロックおよびデータ信号の位相を調整し、これにより、スレーブに複雑な位相シフト回路を使用せずに済むようにする。このため、図中の実施形態では、メモリコントローラ８００は、制御ユニット８０１を備え、制御ユニット８０１は送信ユニット８０２、受信ユニット８０４およびクロックユニット８０６に接続されている。制御ユニット８０１は、バッファユニット８７０から受信したデータに基づいて位相情報を計算し、これが、メモリコントローラ８００内でさまざまなクロックエッジの位相を調整するために使用されうる。例えば、制御ユニット８０１は、このような情報を、ＣＲＣデータおよび読み出しデータとして受け取ると、送信ユニット８０２、受信ユニット８０４およびクロックユニット８０６内のそれぞれの位相トラッキングおよび調整回路（図８に示す）を制御しうる。この機能は、図８，図９の説明に関連して、後で更に詳細に説明する。
【００６３】
図８を参照すると、図７のメモリシステムの構成要素のより詳細な態様を示す図が示される。図７に示した構成要素に対応する構成要素は、明瞭と簡潔を期するために同じ符号を付している。メモリコントローラ８００は、差動シリアル相互接続８６０を介してシリアルバッファユニット８７０に接続されている。バッファユニット８７０は、図７に示したバッファユニット８７０Ａ〜８７０Ｄのいずれであってもよい点に留意されたい。このため、差動シリアル相互接続８６０には、下り差動シリアルクロック信号パス（ＤＳＣＬＫ）と下り差動データ信号パスＤＳＤ［１１：０］が含まれる。同様に、差動シリアル相互接続８６０には、上り差動シリアルクロック信号パス（ＵＳＣＬＫ）と上り差動データ信号パスＵＳＤ［１９：０］とが含まれる。
【００６４】
メモリコントローラ８００は６．４ＧＨｚのクロック信号を有し、この信号は図７のクロックユニット８０６によって生成されうる。一実施形態では、６．４ＧＨｚのクロックは、メモリコントローラ８００用の内部クロックである。可変位相ユニット８９０の出力は、フリップフロップ（ＦＦ）８８９用のクロック信号を供給する。また、６．４ＧＨｚのクロックは、レーンデスキュー回路８８１と、シリアルクロックＤＳＣＬＫを生成するためにＦＦ８９３のクロック入力とに接続されている。ＦＦ８９３は、入力にフィードバックループでインバータ８９２が接続されているため、６．４ＧＨｚのクロックが２分され、３．２ＧＨｚのシリアルクロックとして出力される。３．２ＧＨｚのクロックは、差動出力ドライバ８９１によって差動的に出力される。
【００６５】
図中の実施形態では、書き込みデータ、ＡＤＤＲ／ＣＭＤおよびＣＲＣが、ＦＦ８８９の入力に供給される。ＦＦ８８９の出力は、差動等化出力ドライバ８８８に接続されている。ドライバ８８８の出力は、ＤＳＤ［１１：０］の１つの信号パスに接続されている。このため、ＤＳＤ［１１：０］の各信号パスに対して、同様の出力パス（図示せず）が使用されうる。同様に、読み出しデータのために、ＵＳＤ［１９：０］の１つの信号パスが差動入力バッファ８８５に接続されており、差動入力バッファ８８５の出力がＦＦ８８６の入力に接続されている。ＦＦ８８６の出力は、レーンデスキューユニット８８１の入力に接続されている。レーンデスキューユニット８８１の出力は、メモリコントローラ８００の他の部分（図示せず）に、読み出しデータおよびＣＲＣ情報として供給される。上りシリアルクロック信号ＵＳＣＬＫは差動入力バッファ８８７に接続され、差動入力バッファ８８７の出力は可変位相ユニット８８２に接続されている。可変位相ユニット８８２の出力は、ＦＦ８８６のクロック入力に接続されている。
【００６６】
バッファユニット８７０は、ＤＳＤ［１１：０］信号パスのそれぞれの差動入力バッファであるバッファ８０１を備える。バッファ８０１は、ＤＳＤ［１１：０］信号パスの１つに送信される書き込みデータ、ＡＤＤＲ／ＣＭＤおよびＣＲＣ情報を受け取るように接続されている。このため、メモリコントローラ８００と同様に、ＤＳＤ［１１：０］の各信号パスに対して、同様の出力パス（図示せず）が使用されうる。バッファ８０１の出力は、ＦＦ８０２の入力に接続されている。ＦＦ８０２の出力は、ＦＦ８０３の入力に接続されている。Ｆ８０３の出力は、コマンドバッファ８０５、ＣＲＣユニット８０６、書き込みＦＩＦＯ８０７、および出力マルチプレクサ（ｍｕｘ）８０９に接続されている。書き込みＦＩＦＯ８０７の出力は、ＤＲＡＭインタフェース２５６に接続され、ＤＲＡＭインタフェース２５６は、図２の説明と関連して上で説明したＤＲＡＭインタフェースと同様である。図に示すように、パラレル相互接続８６５の一部として、４つのＭＣＬＫ信号、ＡＤＤＲ／ＣＭＤ信号、１６のデータストローブ信号パスＤＱＳ［１５：０］、および７２のデータ信号パスＤＱ［７１：０］が含まれる。書き込みＦＩＦＯ８０７からの書き込みデータは、ＤＱ［７１：０］を介してメモリユニット１１０に出力されうる。簡潔を期するために、ほかの信号は省略された点に留意されたい。ＭＣＬＫ信号とＤＱＳ信号も差動信号であってもよいが、簡潔を期するためにそのように図示されていない点に留意されたい。
【００６７】
ＤＱ［７１：０］を介したメモリユニット１１０からの読み出しデータは、ＤＲＡＭインタフェース８５６を介してｍｕｘ８０９の１つの入力に接続されうる。ｍｕｘ８０９の出力は、ＦＦ８１０の入力に供給される。制御論理８５５が、ｍｕｘ８０９のマルチプレクサ入力選択を制御している。ＦＦ８１０の出力は、差動等化データ出力ドライバ８１１に接続され、差動等化データ出力ドライバ８１１はＵＳＤ［１９：０］の差動信号パスの１つに接続されている。
【００６８】
また、バッファユニット８７０は、メモリコントローラ８００からコマンド情報（ＣＭＤ）を受け取るように接続された制御論理８５５も備える。ＣＭＤ情報は、制御論理８５５に、ＤＱデータパスに書き込みデータを出力させたり、ＤＱデータパス用のデータを読み出させたり、初期化シーケンスおよびテストシーケンスに移行させるか、またはこれから退出させる、などをさせる。このため、制御論理８５５は、ＤＲＡＭインタフェース８５６、ＣＲＣユニット８０６，８０８、ｍｕｘ８０９のほか、そのほかの回路を制御しうる。
【００６９】
図中の実施形態では、３．２ＧＨｚのクロックはＦＦ８１０のクロック入力と、差動等化データ出力ドライバ８１２の入力とに接続され、ドライバ８１２の出力は上りシリアルクロックＵＳＣＬＫである。また、３．２ＧＨｚのクロック信号は、４分割ユニット８０４にも接続され、このため内部８００ＭＨｚのクロックドメインを供給し、これはＭＣＬＫドメインである。
【００７０】
一実施形態では、ＤＳＤ［１１：０］信号パスを介して受信されたパケットは、ＣＭＤバッファ８０５、書き込みＦＩＦＯ８０７およびＣＲＣユニット８０６に同時に供給されうる。パケットは、パケットがＡＤＤＲ／ＣＭＤまたはデータペイロードのいずれであるかを示すためにエンコードされていることがあるため、ＣＭＤバッファ８０５および書き込みＦＩＦＯ８０７は、それぞれのパケットをキャプチャできるように、パケットデコード論理（図示せず）を備えうる。このため、書き込みデータペイロードパケットが受信されると、パケットが書き込みＦＩＦＯ８０７によってデコードされ、データが書き込みＦＩＦＯ８０７内に記憶される。ＣＭＤバッファ８０５は、データペイロードパケットを破棄しうる。書き込みＦＩＦＯ８０７は、ＤＲＡＭインタフェース８５６を介してメモリユニット１１０に出力するのに十分なビットを受け取るまで、書き込みデータを記憶しうる。同様に、ＣＭＤペイロードパケットが受信されると、パケットがＣＭＤバッファ８０５によってデコードされ、ＣＭＤ情報がＣＭＤバッファ８０５内に記憶される。書き込みＦＩＦＯ８０７は、ＣＭＤペイロードパケットを破棄しうる。全てのパケットにＣＲＣペイロードが含まれうるため、ＣＲＣユニット８０６は、全パケットを受信して、ＣＲＣ情報を抽出する。
【００７１】
図９の説明に関連して後で更に詳細に説明するように、動作中に、メモリコントローラ８００は、送信する書き込みデータおよび受信する読み出しデータの信号特性（例えば位相など）を動的かつ適応的に調整しうる。より詳細には、上で説明したように、受信ユニット８０４は、バッファユニット８７０によって送信されるデータをより最適に受け取るために、自身のローカルサンプルクロック位相を調整するための、サンプルクロック位相調整回路（レーンデスキュー８８１および可変位相ユニット８９０，８８２など）を備える。このため、メモリコントローラ８００がバッファユニット８７０からＣＲＣデータを受信している間は常に、受信ユニット８０４は、レーンデスキューおよび可変位相ユニット８８２を使用して、ＦＦ８８５のクロック位相を調整しうる。また、メモリコントローラ８００内の制御ユニット８０１は、バッファユニット８７０がより最適に書き込みデータを受信できるように、可変位相ユニット８９０を調整し、バッファユニット８７０に送信する書き込みデータの位相を調整しうる。
【００７２】
図９は、図７，図８に示した実施形態の例示的な動作を示すフローチャートである。より詳細には、メモリコントローラ８００とバッファユニット８７０間で通信を確立し、これを維持するための初期化および構成手順について説明する。図７〜図９と、図９のブロック９００の始点を合わせて参照すると、システムが、パワーオンリセットまたはその他のシステムリセット状態においてリセットされると、シリアル信号パスのいずれも整合されていないとみなされうる。このため、メモリコントローラとバッファユニット８７０が、リセットからトレーニング状態１またはＴ１に移行する。Ｔ１状態では、シリアル相互接続８６０は、４００ＭＴ／ｓで動作される（ブロック９０５）。メモリコントローラ８００は、データの送受信に、デッドレコニングされた（dead-reckoned）０．５ＵＩオフセットを使用する（ブロック９１０）。例えば、メモリコントローラは、所定のビット時間の半分（halfway across a given bit time）の近似点にオフセットを調整する。メモリコントローラ８００は、バッファユニット８７０にコマンドを送信してＴ１状態からＴ２状態に移行させる（ブロック９１５）。Ｔ２状態において、バッファユニット８７０は、１０１０１０…パターンなどの所定のパターンを、ＵＳＤリンクの全ビットレーンに出力する。メモリコントローラは、例えば、既知のパターンを使用してビットロックを取得し、可変位相ユニット８８２を調整する（ブロック９２０）。
【００７３】
一実施形態では、メモリコントローラ８００は、例えば、８ビット時間の間、「１」のみを出力することによって、バッファユニット８７０にバッファコマンドを送信して、Ｔ２状態からＴ３状態に移行させる（ブロック９２５）。Ｔ３状態では、バッファユニット８７０は、偶数ＭＣＬＫサイクルにおいて、ＵＳＤ信号パスを介して、メモリコントローラ８００に所定のパターン（１０１０１０…など）を送信する（ブロック９３０）。バッファユニット８７０は、奇数ＭＣＬＫサイクルにおいて、上りＵＳＤ信号パスに下りデータをループバックし、１０１０１０…とは異なるパターンを、ＤＳＤ信号パスを介して下りに送信するように構成されている（ブロック９３５）。メモリコントローラ８００は、この異なるパターンを使用してバイトロックを取得する。次に、メモリコントローラ８００は、バッファユニット８７０がビットロックおよびバイトロックを取得できるように、下りデータ位相を調整する（ブロック９４０）。完了すると、メモリコントローラ８００は、８ビット時間の間、「０」のみを出力し、これにより、バッファユニット８７０をＴ３状態から、メモリコントローラ８００がメモリユニット１１０との間でデータの読み書き等を行うことができる通常動作モードブロック（９４５）に移行させる。
【００７４】
メモリコントローラ８００は、通常動作モードに入ると、全バッファユニット８７０が同じクロックエッジ（位相）を使用するように、各バッファユニット８７０内の４分割ＭＣＬＫ分割器８０４を調整しうる（ブロック９５０）。より詳細には、メモリコントローラ８００は、バッファコマンドを送信して、ＭＣＬＫ位相を１ビット時間以上遅延させうる。
【００７５】
メモリコントローラ８００は、通常動作中の所定の間隔（１００μｓ毎など）で、定期的なトレーニングモードを使用して、上りと下りの信号パスをトレーニングしうる（ブロック９５５）。例えば、下りのトレーニングのために、メモリコントローラ８００は、所定のトレーニング位相オフセットを使用して、書き込みＦＩＦＯ８０７にトレーニングパターンを書き込みうる（ブロック９６０）。次にメモリコントローラ８００は、このトレーニングパターンを読み戻し、パターンの遷移値からエラーサイン（sign）を計算しうる（ブロック９６５）。メモリコントローラ８００は、計算で求めたエラーサインを使用して、下りデータ位相を調整しうる（ブロック９７０）。
【００７６】
上りのトレーニングのために、メモリコントローラ８００は、通常の位相オフセットを使用して、書き込みＦＩＦＯ８０７にトレーニングパターンを書き込みうる（ブロック９７５）。次にメモリコントローラ８００は、記憶したトレーニングパターンを読み戻し、別の所定のトレーニング位相オフセットを使用して、パターンの遷移値からエラーサインを計算しうる（ブロック９８０）。メモリコントローラ８００は、計算で求めたエラーサインを使用して、上りサンプル位相を調整しうる（ブロック９８５）。定期的なトレーニングが完了すると、バッファユニット８７０は、上で説明したように、ブロック９４５において通常モードに戻される。
【００７７】
次に図１０を参照すると、図７に示したメモリシステムを備えたコンピュータシステムの一実施形態のブロック図が示される。明瞭と簡潔を期するために、図７，図８に示す構成要素に対応する構成要素には同じ参照符号を付している点に留意されたい。コンピュータシステム１１００は、メモリバッファ８７０とメモリユニット１１０とに接続された処理ノード１１５０を有する。
【００７８】
図５に示したコンピュータシステムと同様に、一実施形態では、バッファユニット８７０はマザーボードに実装された集積回路チップであり、メモリユニット１１０はソケットに接続されうる。別の実施形態では、バッファユニット８７０は、メモリドータカードソケットに接続することができるドータボードに実装された集積回路チップであってもよい。このような実施形態では、ドータボードは、メモリユニット１１０をライザー構成で接続するソケットを備えうる。
【００７９】
図１０に示す実施形態では、処理ノード１１５０は、メモリコントローラ８００に接続されたプロセッサコア１１０１を備える。処理ノード１１５０内に含まれるプロセッサコア１１０１の個数はどのような数であってもよい点に留意されたい。図７，図８の説明に関連して上で説明したように、メモリコントローラ８００の信号は、差動シリアル相互接続８６０を介してメモリバッファ８７０に、パラレル相互接続８６５を介してメモリユニット１１０に接続されている。図に示すように、シリアル相互接続８６０には、一方向下り信号パス、一方向下りクロック信号パス、一方向上り信号パス、および一方向上りクロック信号パスが含まれる。また、パラレル相互接続８６５には、メモリバッファ８７０とメモリユニット１１０間の双方向のデータパスおよびデータストローブ信号パスが含まれる。更に、パラレル相互接続８６５には、処理ノード６００とメモリユニット１１０間の一方向のＡＤＤＲ／ＣＭＤ信号パスおよびＭＣＬＫ信号パスが含まれる。パラレル相互接続８６５には、ＡＤＤＲ／ＣＭＤ信号に加えて、チップセレクト、バンクセレクトや他の信号が含まれうるが、簡潔を期するために、ここではこれらが省略されている点に留意されたい。
【００８０】
図１１を参照すると、デュアルモードメモリ相互接続を備えたメモリコントローラを備えたコンピュータシステムの別の実施形態のブロック図が示されるコンピュータシステム１２００は、図１０に示したコンピュータシステム１１００と同様である。例えば、コンピュータシステム１２００も、メモリバッファ８７０とメモリユニット１１０とに接続された処理ノード１２５０を有する。しかし図１１では、メモリコントローラ１２１０がデュアルモードメモリコントローラであるという点で、図１０のメモリコントローラ８００とは異なる。より詳細には、下記に詳しく説明するように、メモリコントローラ１２１０は、図７，図８の説明に関連して上で説明したように、メモリユニット１１０への直接接続のためのパラレル相互接続８６５、またはバッファユニット８７０と併用するためのシリアル相互接続８６０のいずれかにより動作するように選択的に構成されうる。
【００８１】
上で説明したメモリコントローラ７１０と同様に、図１１のメモリコントローラ１２１０は、各種のメモリ規格と互換性を有しうるメモリモジュールへの直接接続のためにパラレル相互接続によっても選択的に動作しうる。例えば、各種の実施形態では、メモリユニット１１０は、必要に応じて、ＤＤＲ２、ＤＤＲ３または他の規格と互換性を有しうる。このため、メモリコントローラ１２１０は、必要に応じて、自身のパラレル相互接続として、ＤＤＲ２およびＤＤＲ３技術と互換性を有するパラレル相互接続８６５を提供しうる。また、メモリコントローラ１２１０は、バッファユニット８７０に接続するために、図７，図８のシリアル相互接続８６０などの差動シリアル相互接続を提供するための第２のモードでも選択的に動作するように構成されうる。
【００８２】
図１１に示すように、構成ユニット１２２０は、メモリコントローラ１２１０内のＩ／Ｏ回路１２１１の構成を決定し選択しうる。一実施形態では、メモリコントローラ１２１０のモードは、処理ノード１２５０の固定配線された外部ピンを使用して選択さされうる。このような実施形態では、例えば、処理ノード１２５０の１本以上の外部選択ピンが、図に示すように回路のグラウンド、ＶＤＤ、または他の何らかの電圧に固定配線されうる。構成ユニット１２２０は、選択ピンの状態を検出し、次に、これに従ってメモリコントローラ１２１０のＩ／Ｏ回路１２１１を構成する。別の実施形態では、ＢＩＯＳ１２０５または他のシステムレベルソフトウェアの実行中のシステムの起動時に、メモリコントローラのモードが選択されうる。
【００８３】
図中の実施形態では、第１のモードでは、メモリコントローラ１２１０がメモリユニット１１０に直接接続される。このような構成では、Ｉ／Ｏ回路１２１１は、なかでも、例えば、ＤＱ、ＤＱＳ、ＡＤＤＲ／ＣＭＤおよびＭＣＬＫなどの信号パスが含まれるパラレル相互接続を提供する。第２のモードでは、Ｉ／Ｏ回路１２１１は差動シリアル相互接続に変化し、図７，図８，図１０などに示すように、メモリバッファユニット８７０に接続される（点線で示す）。
【００８４】
Ｉ／Ｏ回路１２１１は、モードの切り替えを行うために、複数の出力ドライバおよび入力バッファを備えうる。ドライバおよびバッファのなかには、差動回路があっても、シングルエンド形があってもよい。一実施形態では、モードに応じて、処理ノードの各種入出力ピンと、ドライバおよびバッファとの間の接続が変更されうる。このため、一実施形態では、Ｉ／Ｏ回路１２１１の一部は、プログラム可能な相互接続のように動作しうる。
【００８５】
例えば、図１１に示すように、ＤＳＤ信号パスは、必要に応じて、一方向差動ＤＤＳ信号パスと双方向シングルエンド形ＤＱ信号パスで切り替わりうる。また、ＵＳＤ信号パスは、一方向ＵＤＳ信号パスおよび双方向シングルエンド形ＡＤＤＲ／ＣＭＤ信号パス、および／または双方向差動ＤＱＳ信号パスが切り替わりうる。更に、ＤＳＣＬＫ信号パスは、差動一方向クロック信号パスから１つ以上のシングルエンド形ＭＣＬＫ信号パスに切り替わる、などである。他のピンの組み合わせも可能であり、考察される点に留意されたい。
【００８６】
上の実施形態についてかなり詳細に記載したが、上記の開示を完全に理解できれば、数多くの変形例および変更例が当業者にとって自明であろう。下記の特許請求の範囲は、このような変形例および変更例を全て包含するものと解釈されることが意図される。
【産業上の利用可能性】
【００８７】
本発明は、一般にマイクロプロセッサに利用可能である。
【図１】
2010508599.tif 000003
【図２】
2010508599.tif 000004
【図３】
2010508599.tif 000005
【図４】
2010508599.tif 000006
【図５】
2010508599.tif 000007
【図６】
2010508599.tif 000008
【図７】
2010508599.tif 000009
【図８】
2010508599.tif 000010
【図９】
2010508599.tif 000011
【図１０】
2010508599.tif 000012
【図１１】
2010508599.tif 000013
【手続補正書】
【提出日】平成20年8月22日(2008.8.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
それぞれが１つ以上のメモリデバイスおよびパラレル相互接続（１６５）を備えた１つ以上のメモリユニット（１１０）と、
前記パラレル相互接続（１６５）を介して前記１つ以上のメモリユニット（１１０）に接続された１つ以上のバッファユニット（１７０）と、
各々のシリアル相互接続（１６０）を介して前記１つ以上のバッファユニット（１７０）の各々に接続され、かつ前記パラレル相互接続（１６５）を介して前記１つ以上のメモリユニット（１１０）の各々に接続されたメモリコントローラ（１００）と、を有し、
前記１つ以上のバッファユニット（１７０）のそれぞれは、前記メモリコントローラ（１００）からコマンド情報を受信すると、前記各々のシリアル相互接続（１６０）を介して前記メモリコントローラ（１００）からデータを受信し、前記パラレル相互接続（１６５）を介して前記１つ以上のメモリユニット（１１０）に前記データを送信するように構成され、
前記メモリコントローラ（１００）は、前記１つ以上のバッファユニット（１７０）から受信された情報に基づいて、前記メモリコントローラ（１００）によって送信されるデータの信号位相整合を調整することによって、前記メモリコントローラ（１００）と前記１つ以上のバッファユニット（１７０）間のデータ転送を非対称的に制御するように構成されているメモリシステム（１０）。
【請求項２】
各シリアル相互接続（１６０）は、それぞれが前記１つ以上のバッファユニット（１７０）の所定のバッファユニットと前記メモリコントローラ（１００）との間でデータを伝達するように構成された複数の差動双方向データ信号パスを有する請求項１に記載のメモリシステム（１０）。
【請求項３】
各シリアル相互接続（１６０）は、前記メモリコントローラ（１００）から前記１つ以上のバッファユニット（１７０）の所定のバッファユニットに前記コマンド情報を伝達するように構成された差動コマンド信号パスを有する請求項１に記載のメモリシステム（１０）。
【請求項４】
前記パラレル相互接続（１６５）は、グループ分けされた複数の双方向データ信号パスを有し、各グループは、前記１つ以上のバッファユニット（１７０）の所定のバッファユニットと前記１つ以上のメモリユニット（１１０）との間でデータを伝達するように構成されている請求項２に記載のメモリシステム（１０）。
【請求項５】
前記各々のシリアル相互接続（１６０）の各差動双方向データ信号パスを介して伝達される前記データは、前記パラレル相互接続（１６５）の双方向データ信号パスの各々のサブセットによって伝達される請求項４に記載のメモリシステム（１０）。
【請求項６】
前記シリアル相互接続（１６０）は第１のデータ転送速度で動作し、前記パラレル相互接続（１６５）は第２のデータ転送速度で動作し、前記第１のデータ転送速度は第２の転送速度よりも高速である請求項１に記載のメモリシステム（１０）。
【請求項７】
各シリアル相互接続は、前記メモリコントローラ（１００）から前記１つ以上のバッファユニット（１７０）の所定のバッファユニットにクロックを伝達するように構成された差動クロック信号パスを有し、前記差動クロック信号の各々は、前記第１のデータ転送速度で動作する請求項６に記載のメモリシステム（１０）。
【請求項８】
前記パラレル相互接続（１６５）は、それぞれが前記メモリコントローラ（１００）から前記１つ以上のメモリユニット（１１０）にクロック信号を伝達するように構成された１つ以上のクロック信号パスを有し、前記第２のクロック信号は前記第２のデータ転送速度で動作する請求項１に記載のメモリシステム（１０）。
【請求項９】
前記１つ以上のバッファユニット（１７０）の各々は、前記シリアル相互接続（１６０）の１つ以上の一方向巡回冗長符号（ＣＲＣ）信号パスを介してＣＲＣ情報を送信するように構成されており、前記ＣＲＣ情報は、前記各々のシリアル相互接続（１６０）を介して前記メモリコントローラによって送信される前記データに対応している請求項１に記載のメモリシステム（１０）。
【請求項１０】
各シリアル相互接続（１６０）は、それぞれが、前記メモリコントローラ（１００）から前記１つ以上のバッファユニット（１７０）に、データ、アドレスおよび前記コマンド情報を伝達するように構成された複数の下り差動一方向信号パスを有する請求項１に記載のメモリシステム（１０）。
【請求項１１】
各シリアル相互接続（１６０）は、前記メモリコントローラ（１００）から前記１つ以上のバッファユニット（１７０）の各々にシリアルクロック信号を伝達するように構成された下り一方向差動クロック信号パスを有する請求項１０に記載のメモリシステム（１０）。
【請求項１２】
各シリアル相互接続（１６０）は、それぞれが前記１つ以上のバッファユニット（１７０）の１つから前記メモリコントローラ（１００）にデータおよび巡回冗長符号（ＣＲＣ）情報を伝達するように構成された複数の上り差動一方向信号パスを有する請求項１に記載のメモリシステム（１０）。
【請求項１３】
各シリアル相互接続（１６０）は、前記１つ以上のバッファユニット（１７０）の１つから前記メモリコントローラ（１００）にシリアルクロック信号を伝達するように構成された上り一方向差動クロック信号パスを有する請求項１２に記載のメモリシステム（１０）。
【請求項１４】
プロセッサ（６０１）と、
前記プロセッサに接続された、請求項１〜１３のいずれか１項に記載のメモリシステム（１０）と、を有するコンピュータシステム（５００）。
【国際調査報告】
2010508599.tif 000014
2010508599.tif 000015
2010508599.tif 000016