(57)【要約】  コプロセッサ又は入出力デバイスとインターフェースするためのシステムを開示する。１つの実施の形態によれば、このシステムは、コンピュータ処理装置、メモリモジュール、コンピュータ処理装置とメモリモジュールとを接続するメモリバス、及び、コプロセッシングユニット又は入出力デバイスを有し、メモリバスは、また、このコプロセッシングユニット又は入出力デバイスをコンピュータ処理装置と接続させることを特徴とする。【選択図】２
2014506698.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ処理装置と。
メモリモジュールと、
前記コンピュータ処理装置と前記メモリモジュールとを接続するメモリバスと、
コプロセッシングユニット又は入出力デバイスと、
を具備し、
前記メモリバスは、また、前記コプロセッシングユニット又は入出力デバイスをコンピュータ処理装置と接続させることを特徴とするシステム。
【請求項２】
前記システムは、前記メモリバスから受け取り前記メモリバスへ送る、アドレス信号及びデータバス信号を処理するＡＳＩＣをさらに具備することを特徴とする請求項１に記載のシステム。
【請求項３】
コンピュータ処理装置からのデータバーストの時刻変更を行うバッファをさらに具備することを特徴とする請求項１に記載のシステム。
【請求項４】
１以上のランクのＤＲＡＭジュールをさらに具備することを特徴とする請求項１に記載のシステム。
【請求項５】
コマンドを前記ＡＳＩＣに伝達するソフトウェアドライバをさらに具備することを特徴とする請求項２に記載のシステム。
【請求項６】
前記システムは、ＢＩＯＳメモリのテスト動作を行った後であってオペレーションシステムをブートする前に、前記ＡＳＩＣを検出し初期化することを特徴とする請求項２に記載のシステム。
【請求項７】
前記ＡＳＩＣを初期化することには、各アドレスバス信号に関連付けられた生成ベクトルを解くことにより、前記コンピュータ処理装置が用いるデータスクランブルシーケンスを知得することが含まれることを特徴とする請求項６に記載のシステム。
【請求項８】
前記ＡＳＩＣを初期化することには、シリアルＲＯＭ及びＳＭＢｕｓのうちの少なくとも１つからデータスクランブルシーケンスをロードすることが含まれ、該データスクランブルシーケンスは、各アドレスバス信号と関連付けられた生成ベクトルを解くために前記コンピュータ処理装置により用いられることを特徴とする請求項６に記載のシステム。
【請求項９】
前記ＡＳＩＣを初期化することには、前記ＡＳＩＣの内部のアドレス信号のセットに前記アドレスバス信号をマップする、実質的に線形のアドレスマッピングを生成することが含まれることを特徴とする請求項６に記載のシステム。
【請求項１０】
前記ＡＳＩＣを初期化することには、シリアルＲＯＭ及びＳＭＢｕｓのうちの少なくとも１つから、実質的に線形のアドレスマッピングの設定をロードすることが含まれ、該実質的に線形のアドレスマッピングは、前記ＡＳＩＣの内部のアドレス信号のセットに前記アドレスバス信号をマップすることを特徴とする請求項６に記載のシステム。
【請求項１１】
前記ＡＳＩＣを初期化することには、各データバス信号と関連付けられた生成ベクトルを解くことにより前記コンピュータ処理装置が用いるＥＣＣを知得することが含まれることを特徴とする請求項６に記載のシステム。
【請求項１２】
前記ＡＳＩＣを初期化することには、シリアルＲＯＭ及びＳＭＢｕｓのうちの少なくとも１つから、ＥＣＣ設定パラメータをロードすることが含まれ、該ＥＣＣ設定パラメータは、各データバス信号と関連付けられた生成ベクトルを解くために前記コンピュータ処理装置により用いられることを特徴とする請求項６に記載のシステム。
【請求項１３】
前記ＡＳＩＣを初期化することには、複数のデータパターンを順番に前記ＡＳＩＣに書き込み、連続する各書き込みでの一連のビット変化の数とモードを解除するシーケンスとを比較することにより、前記ＡＳＩＣを知得モードにすることが含まれることを特徴とする請求項６に記載のシステム。
【請求項１４】
前記ＡＳＩＣによるアドレス信号及びデータバス信号の処理には、前記コンピュータ処理装置から受け取ったデータ値のスクランブルの解除を行うこと、及び前記コンピュータ処理装置に送るために値をスクランブルすることが含まれ、前記スクランブルの解除及びスクランブルは、関連するアドレス値に基づき行われることを特徴とする請求項２に記載のシステム。
【請求項１５】
前記ＡＳＩＣによるアドレス信号及びデータバス信号の処理には、関連するデータ値に基づきＥＣＣ値を生成することが含まれることを特徴とする請求項２に記載のシステム。
【請求項１６】
前記ＡＳＩＣには、読み込みできないアドレスへのメモリ書き込みにスクラバ応答するブロックが含まれることを特徴とする請求項２に記載のシステム。
【請求項１７】
前記コプロセッシングユニット又は前記入出力デバイスには、暗号化ユニットが含まれることを特徴とする請求項１に記載のシステム。
【請求項１８】
前記コプロセッシングユニット又は前記入出力デバイスには、圧縮ユニットが含まれることを特徴とする請求項１に記載のシステム。
【請求項１９】
前記コプロセッシングユニット又は前記入出力デバイスには、ディジタル信号処理装置が含まれることを特徴とする請求項１に記載のシステム。
【請求項２０】
前記コプロセッシングユニット又は前記入出力デバイスには、画像処理装置が含まれることを特徴とする請求項１に記載のシステム。
【請求項２１】
前記コプロセッシングユニット又は前記入出力デバイスには、パターンマッチングユニットが含まれることを特徴とする請求項１に記載のシステム。
【請求項２２】
前記コプロセッシングユニット又は前記入出力デバイスには、無線通信装置が含まれることを特徴とする請求項１に記載のシステム。
【請求項２３】
前記コプロセッシングユニット又は前記入出力デバイスには、ＲＡＩＤ制御装置が含まれることを特徴とする請求項１に記載のシステム。
【請求項２４】
前記コプロセッシングユニット又は前記入出力デバイスには、不揮発性メモリ記憶デバイスが含まれることを特徴とする請求項１に記載のシステム。
【請求項２５】
メモリ制御装置をさらに具備し、
前記メモリ制御装置は、ＲＤＩＭＭ、ＵＤＩＭＭ、及びＬＲＤＩＭＭのうちの１つとして、不揮発性メモリ記憶デバイスを検出することを特徴とする請求項２４に記載のシステム。
【請求項２６】
アドレス信号のセットに基づきデータ値をスクランブルするためにコンピュータシステムで用いられるスクランブル生成ベクトルを知得する方法であって、該方法は、
第１のデータ値を生成するためにゼロデータパターンをアドレスゼロに書き込むことをコンピュータシステムに命令するステップと、
前記第１のデータ値をスクランブルした値をスクランブル生成ベクトルの１つとして保存するステップであって、前記アドレス信号のセットの各々１つの信号に対して、
前記アドレス信号のセット中の前記各々１つの信号だけ「１」の値に設定し、他の信号は「０」の値に設定するステップと、
前記アドレス信号に対応する１つのアドレスにゼロデータパターンを書き込み第２のスクランブルされたデータ値を生成するステップと、
前記第１のスクランブルされたデータ値と前記第２のスクランブルされたデータ値との間でビットごとに排他的論理和演算を行い、前記アドレス信号の前記各々１つと関係付けられたスクランブル生成ベクトルを生成するステップと、
前記アドレス信号の前記各々１つと関係付けられたスクランブル生成ベクトルを保存するステップと、
を実行することを特徴とするステップと、
を具備することを特徴とする方法。
【請求項２７】
データ信号のセットに基づきＥＣＣを生成するためにコンピュータシステムで用いられるＥＣＣ生成ベクトルを知得するための方法であって、該方法は、
第１のＥＣＣ値を生成するためにゼロデータパターンをアドレスゼロに書き込むことを前記コンピュータシステムに命令するステップと、
前記第１のＥＣＣ値が反転されているかどうかを判断するステップと、
前記データ信号における各々１つに対して、
前記データ信号のセット中の前記各々１つの信号だけ「１」の値に設定し、他の信号は「０」の値に設定するステップと、
第２のＥＣＣ値を生成するために前記データ信号のセットに対応するデータパターンを書き込むステップと、
前記１つの信号に関連したＥＣＣ生成ベクトルとして第２のＥＣＣ値を保存するステップと、
を具備することを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
この出願は、２０１１年２月８日に出願された、米国仮特許出願番号６１／４５７，２３３、及び、２０１１年１１月２２日に出願された、米国実用特許出願番号１３／３０３，０４８、表題「メインメモリコプロセッサ及び入出力デバイス（Main  Memory  Co-processors  And  Input/Output  Devices）」に基づく優先権を主張し、これらの出願は参照することにより本出願に組み込むものとする。
【０００２】
本発明は、一般にコンピュータの分野に関し、さらに詳細には、メインメモリシステムを介して、コプロセッサ及び入出力デバイスとのインターフェースに関する。
【背景技術】
【０００３】
コンピュータシステムは、コンピュータシステムの様々な構成要素と接続するために複数のバスを用いる。バスは、システムを介して、種々の構成要素に情報（例えば、コマンド、アドレス、及びデータ）を伝達することができる。一般に異なるバスは異なるデータ帯域幅をサポートする。例えば、中央演算処理装置（ＣＰＵ）とシステムメモリ（例えば、ＤＲＡＭ）とを接続するメインメモリバスは、Ｉ／Ｏバス（例えば、ＰＣＩ、ＰＣＩ−Ｅｘｐｒｅｓｓ、等）によりサポートされている帯域幅より著しく高いデータ帯域幅をサポートすることができる。
【０００４】
従来から、コプロセッサ及びＩ／Ｏデバイスは、Ｉ／Ｏバスを介してコンピュータシステムとインターフェースしている。いくつかのＩ／Ｏ又は共同処理（コプロセッシング）アプリケーションに対して、Ｉ／Ｏバスを介してのコンピュータシステムとのインターフェースにより、適切な性能が得られている。しかしながら、Ｉ／Ｏバスによりサポートされている低い帯域幅が、しばしば、はるかに速い速度で動作することのできるＩ／Ｏ又はコプロセッシングアプリケーションにとって、通信におけるボトルネックとなっている。
【０００５】
従って、Ｉ／Ｏの能力及び性能の強化をもたらす、コンピュータシステムにおけるインターフェースコプロセッサ又はＩ／Ｏデバイス及びシステムの必要性が存在する。特に、メインメモリシステムを介してコプロセッサデバイスとインターフェースするシステム及び方法が必要となる。
【発明の概要】
【０００６】
コプロセッサ又はＩ／Ｏデバイスとインターフェースするためのシステムを開示する。１つの実施の形態によれば、このシステムは、コンピュータ処理装置、メモリモジュール、コンピュータ処理装置とメモリモジュールとを接続するメモリバス、及び、コプロセッシングユニット又は入出力デバイスを有し、メモリバスは、さらに、処理ユニット又は入出力デバイスをコンピュータ処理装置と接続することを特徴とする。
【図面の簡単な説明】
【０００７】
本明細書の一部となす添付図は、現時点での好ましい実施の形態を示し、上述の概要及び下記の好ましい実施の形態の詳細な説明と合わせて、ここに開示する原理の説明及び教示を行う。
【図１】Ｉ／Ｏバスを介してコプロセッサ又はＩ／Ｏ（ＣＰＩＯ）デバイスと接続するコンピュータアーキテクチャの一般的な従来技術のブロック図を示す。
【図２】１つの実施の形態による、Ｉ／Ｏの能力及び性能の強化をもたらす、メインメモリシステムを介してＣＰＩＯデバイスとインターフェースするコンピュータアーキテクチャのブロック図を示す。
【図３】１つの実施の形態による、デュアルランクテラＤＩＭＭのブロック図を示す。
【図４】１つの実施の形態による、典型的なシングルランクテラＤＩＭＭのブロック図を示す。
【図５】１つの実施の形態による、メモリバスが直接Ｒｕｓｈに接続された典型的なシングルランクテラＤＩＭＭのブロック図を示す。
【図６】１つの実施の形態による、ディスカバリーブートローダを組み込んだ典型的なブートシーケンスを示す。
【図７】１つの実施の形態による、テラＤＩＭＭの初期化処理の典型的なフォローチャートを示す。
【図８】１つの実施の形態による、ディスカバリーブート処理の典型的なフォローチャートを示す。
【図９】１つの実施の形態による、ジェネレータ・ベクトルの各々を解く方法の典型的なフローチャートを示す。
【図１０】１つの実施の形態による、ホストへ送られたデータをスクランブルするか又はホストから受け取ったデータのスクランブルを解くスクランブラーシーケンスを生成する回路の論理的な実施形態を示す。
【図１１】１つの実施の形態による、最適なアドレスマッピングを生成する方法の典型的なフローチャートを示す。
【図１２ａ】１つの実施の形態による、ＤＩＭＭ物理アドレスビットをＲｕｓｈ内部アドレスビットに関連付ける回路の論理的な実施形態を示す。
【図１２ｂ】１つの実施の形態による、ＤＩＭＭ物理アドレスビットをＲｕｓｈ内部アドレスビットに関連付ける回路の第２の論理的な実施形態を示す。
【図１３】１つの実施の形態による、ＥＣＣ及びインターリーブ（interleave）／スイッツル（swizzle）知得のステップについての例示的なフローチャートを示す。
【図１４】１つの実施の形態による、ＥＣＣビットを計算するＥＣＣ回路の論理的な実施形態を示す。
【図１５】１つの実施の形態による、リードコマンドのコマンド及びデータのフローを示す論理ブロック図を示す。
【図１６】１つの実施の形態による、ライトコマンドのコマンド及びデータのフローを示す論理ブロック図を示す。
【０００８】
図は必ずしも縮尺を合わせてはおらず、図全般にわたって表示目的で、類似の構成又は機能は、一般に、類似の参照番号で表現している。図は、ここに記載した種々の実施の形態の説明を容易にすることを意図するだけのものである。図はここに開示したものを示すすべての特徴を記述するものではなく、特許請求の範囲を制限するものでもない。
【発明を実施するための形態】
【０００９】
（先行技術）
図１は、Ｉ／Ｏバスを介してコプロセッサ又はＩ／Ｏ（ＣＰＩＯ）デバイスを接続するコンピュータアーキテクチャの典型的な先行技術のブロック図を示す。コンピュータシステム１００は、一般に、ＣＰＵ（中央演算処理装置）１０１と、メインメモリユニット１０２（例えば、１以上のＤＲＡＭ（dynamic  random  access  memory）モジュール）と、ビデオカード１０３、サウンドカード１０４、ハードドライブ１０８、及びＳＳＤ（ソリッドステートドライブ）１０５を含むＣＰＩＯデバイスと、を有する。これらの構成要素は、マザーボード（不図示）上のバスを介して接続されている。図示のとおり、ＣＰＵ１０１、メインメモリユニット１０２、及びビデオカード１０３は、それぞれのバス１１１、１１２、及び１１２を介してノースブリッジ１０６に接続されている。ノースブリッジ１０６は、高速バスに接続された、マザーボードのチップセット中の伝統的なチップであり、ＦＳＢ（フロントサイドバス）１１１、メインメモリバス１１２、及びＰＣＩ−Ｅ（peripheral  component  interconnect  express）バス１１３を有している。
【００１０】
ＰＣＩバス、ＵＳＢ（universal  serial  bus）１１５、及びＳＡＴＡ（serial  advanced  technology  attachment）バス１１６を有する低速バスは、従来、サウスブリッジ１０７に接続されている。サウスブリッジ１０７は、チップセット中の他のチップであり、ＤＭＩ（direct  media  interface）バス１１７を介してノースブリッジ１０６に接続されている。サウスブリッジ１０７は、低速バスを介して接続されているＣＰＩＯデバイス間の情報量を調整する。例えば、サウンドカード１０４は、一般に、ＰＣＩバス１１４を介してシステム１００に繋がっている。ハードドライブ１０８及びＳＳＤ１１６のような記憶ドライブは、一般に、ＳＡＴＡバス１１６を介して繋がっている。キーボードからｍｐ３ミュージックプレーヤーに至るまでの種々の他のデバイス１０９は、ＵＳＢ１１５を介してシステム１００に接続することができる。
【００１１】
ハードドライブ１０８及びＳＳＤ１０５は共に、コンピュータシステム１００の非揮発性データ記憶ユニットである。しかし、これらは異なる技術を用いて動作する。ＳＳＤの技術は、一般に、フラッシュメモリ技術のような機械的に動く部品を持たない半導体メモリ技術を用いてドライブを参照する。ＳＳＤの技術は、一般に、ハードドライブに比べて動作電力は少なく、読み取り速度は速い。非揮発性（例えば、フラッシュ）メモリ技術は進化を続けており、ＳＳＤをより入手しやすくしているので、ＳＳＤは徐々に多くの今日のコンピュータにおけるハードドライブと置き換えられている。
【００１２】
特定のＣＰＩＯデバイス（例えば、サウンドカード１０４）では、低速バスを介してコンピュータシステムに接続されている場合でも、十分なデータ帯域幅が得られる。しかし、高い帯域幅（例えば、そのバスでサポートされているものより早いスピードの入出力データ）で動作することのできるＣＰＩＯデバイス（例えば、ＳＳＤ１０５）が低速バスを介して接続されている場合、それが入出力ボトルネックを形成することとなる。入出力能力及び性能を強化する、コンピュータシステムにおけるＣＰＩＯデバイスをインターフェースするシステム及び方法が必要となる。特に、メインメモリシステムを介してＣＰＩＯデバイスとインターフェースするシステム及び方法が必要となる。
（入出力能力及び性能を強化するシステム）
図２は、１つの実施の形態による、Ｉ／Ｏの能力及び性能の強化をもたらす、メインメモリシステムを介してＣＰＩＯデバイスとインターフェースするコンピュータアーキテクチャのブロック図を示す。コンピュータシステム２００は、ＣＰＵ（中央演算処理装置）２０１と、メモリユニット（例えば、ＤＲＡＭ）２０２と、ビデオカード２０３、サウンドカード２０４、ハードドライブ２０８、ＳＳＤ２０５、及び汎用ＣＰＩＯデバイス２１０を含むＣＰＩＯデバイスとを有する。これらの構成要素は、マザーボード（不図示）上でバスを介して相互に接続されている。図示の通り、ＣＰＵ２０１、メインメモリユニット２０２、及びビデオカード２０３は、それぞれ、ＦＳＢ２１１、メインメモリバス２１２、及びＰＣＩ−Ｅバス２１３を介して、ノースブリッジ２０６に接続されている。ＰＣＩバス２１４、ＵＳＢ２１５、及び、ＳＡＴＡバス２１６は、サウスブリッジ２０７に接続されている。図では、各ブロックの構成要素を個別の構成要素として示しているが、構成要素によっては１つ以上の他の構成要素と結合又は統合することもできる。例えば、インテルその他のベンダーにより生産された特定のＣＰＵは、ＣＰＵの一部としてノースブリッジが含まれている。
【００１３】
図１に示した先行技術のアーキテクチャとは異なり、図２のコンピュータアーキテクチャでは、ＳＳＤ２０５及び汎用ＣＰＩＯデバイス２１０を、メインメモリバス２１２を介してコンピュータシステムに接続している。メインメモリユニット２０２（例えば、ＤＲＡＭ）と同様に、ＳＳＤ２０５及び汎用ＣＰＩＯデバイス２１０は、メインメモリバス２１２を介してノースブリッジ２０６内のメモリコントローラに接続されている。メインメモリバス２１２は一般に非常に広い帯域幅を（例えば、ＳＡＴＡバス２１６と比べて）サポートするので、このアーキテクチャは、ＳＳＤ２０５又は汎用ＣＰＩＯデバイス２１０のＩ／Ｏ性能を制限することとなっていたＩ／Ｏボトルネックを削除又は著しく軽減する。ＳＳＤ２０５及び汎用ＣＰＩＯデバイス２１０は、ＤＩＭＭ（デュアルインラインメモリモジュール）メモリスロットに挿入可能なように設計することが好ましい。
【００１４】
図２に示すように、本開示は、以下に説明する方法で、ＣＰＩＯデバイスはメインメモリバスを介してコンピュータシステムと接続しインターフェースすることができることを意図するものである。ＣＰＩＯデバイスには、ホストプロセッサからデータを受け取るあらゆるデバイスを含むことができ、受け取ったデータは、ＣＰＩＯデバイスで修正されるか又は新しいデータを生成するためにＣＰＩＯデバイスで用いられ、修正されたデータ又は新しいデータは、ホストプロセッサに送り返される。コプロセッサの例として、暗号化、圧縮、ディジタル信号処理、画像処理、パターンマッチングが含まれる。入出力デバイスの例として、非揮発性記憶装置、無線通信装置、有線通信装置、ＲＡＩＤ制御装置が含まれる。
【００１５】
ＳＳＤ２０５は、以下の説明を容易にするために用いられるが、本明細書の範囲は、ＳＳＤのアプリケーション又は特定のＣＰＩＯデバイスのアプリケーションに限定するものではない。ここに開示した方法及びシステムは、あらゆるＣＰＩＯデバイスの使用に適用することができる。ＳＳＤ２０５は、新しいタイプのＣＰＩＯデバイスに属する。先行技術のメモリデバイスと区別するため及び説明を簡単にするために、この新しいタイプのＣＰＩＯデバイスを、今後、「テラＤＩＭＭ」と称する。名称及び表示（例えば、「テラＤＩＭＭ」、「Ｒｕｓｈ」、「ボルト」、等）は、ここでは説明のためだけに用い、あらゆる意味で限定の目的で用いるものではない。
【００１６】
記憶用のＣＰＩＯデバイスにおいて、テラＤＩＭＭは、不揮発性メモリ（例えば、ＮＡＮＤフラッシュ、フェーズチェンジ、等）を、例えばＤＤＲ３メモリチャンネル又はＤＤＲ−４メモリチャンネルに組み込むことにより、ＣＰＵの仮想メモリ能力に適合することのできる物理メモリシステムを生成する能力のある新しいクラスのＤＩＭＭメモリである。将来のメモリ技術（例えば、ＤＤＲ５、等）と互換性のあるテラＤＩＭＭは、この明細書の記載及びこの明細書の精神の範囲内である。
【００１７】
テラＤＩＭＭは、ＳＳＤと同じような役割を果たすが、ＰＣＩ−Ｅデバイス又はディスクドライブの限定された数値と比べて、メインメモリシステムのフォームファクター／ロケーションから来る、平行度／帯域幅／拡張性で利点を持つ。テラＤＩＭＭは、仮想メモリスワップデバイス、一般化したファイルシステムデバイス、遠隔記憶のためのキャッシュレイヤーとして用いることができる。システムに関する限り、システムに接続されたとき、テラＤＩＭＭは、ＲＤＩＭＭ（レジスタードＤＩＭＭ）のような、標準のＤＩＭＭメモリデバイスのように見える。多くのテラＤＩＭＭの実施形態が検討されている。例えば、テラＤＩＭＭは、また、UDIMM（アンレジスタードＤＩＭＭ）、ＬＲＤＩＭＭ（ロード・リデューストＤＩＭＭ）、等のように見せることもできる。
【００１８】
テラＤＩＭＭは、バイキング・モジュラー・ソリューションズ（Viking  Modular  Solutions）で製造されているＳＡＴＡＤＩＭＭとは区別することができる。ＳＡＴＡＤＩＭＭは、マザーボードのＤＩＭＭメモリスロット内に設置され、描画のためのＤＩＭＭメモリスロットを使わない点で利点がある。しかし、ＳＡＴＡＤＩＭＭとのデータのやり取りのようなＩ／Ｏ動作は、ＳＡＴＡＤＩＭＭに接続されたＳＡＴＡケーブルにより行われる。従って、テラＤＩＭＭとは違い、ＳＡＴＡＤＩＭＭは、Ｉ／Ｏ動作のためのメインメモリバスの非常に広い帯域幅を持つという利点はない。
（テラＤＩＭＭアーキテクチャ）
テラＤＩＭＭは、シングルランクＤＩＭＭ、デュアルランクＤＩＭＭ、或いは、クワッドランクＤＩＭＭとすることができる。１つの実施の形態において、シングルランクテラＤＩＭＭは、１つのランクの不揮発性メモリ（ＮＶＭ）を有する。１つの実施の形態において、デュアルランクテラＤＩＭＭは、１つのランクのＮＶＭと１つのランクのＤＲＡＭを有する。１つの実施の形態において、クワッドランクテラＤＩＭＭは、２つのランクのＮＶＭと２つのランクのＤＲＡＭとを有する。この説明は、これらの実施の形態に限定するものではなく、増大させたランク（例えば、６ランク、８ランク、等）を有するテラＤＩＭＭも含まれる。メモリのランクは、一般に、同じチップ選択信号により選択されたモジュール上のメモリデバイスセットを指す。メモリモジュールにアクセスできるランク数はメモリコントローラに依存する。例えば、メモリスロット当たり２つのチップ選択信号を出すメモリコントローラは、メモリモジュール上の２つのランクまでアクセスすることができる。メモリスロット当たり４つのチップ選択信号を出すメモリコントローラは、メモリモジュール上の４つのランクまでアクセスすることができる。
【００１９】
シングルランクテラＤＩＭＭに対して、ＢＩＯＳのメモリテストを通過するようＢＩＯＳ（basic  input/output  system）の変更がなされる。ＢＩＯＳは、最初に電源を入れたときハードウェアをセットアップし、オペレーティングシステムをブートするためにコンピュータシステムにより走らされる、一連のファームウェア命令である。電源を入れたあと、ＢＩＯＳによって行われる最初の動作の１つは、メモリモジュールのＳＰＤ（serial  presence  detect）にアクセスすることである。割り当てたＳＰＤは、メモリモジュールのサイズ（例えば、ランクの数）、データ幅、製造業者、速度、及び、電圧のような、メモリモジュールに関する情報をＢＩＯＳに送る。メモリモジュールのランクを決定した後、一般に、ＢＩＯＳはモジュール中の各ランクでメモリテストを行う。シングルランクテラＤＩＭＭは、ＳＰＤで宣言されたほどの物理的ＤＲＡＭスピードのメモリ量を有していないのでこのメモリテストに失敗するかもしれない。シングルランクテラＤＩＭＭは、すべてのメモリアドレスを急いで応答することができるが、一般にメモリワードをエイリアス（alias）する。このエイリアシング（aliasing）は、メモリテストにより、間違ったメモリワードとして検出することができる。
【００２０】
デュアルランク／クワッドランクテラＤＩＭＭについて、ＢＩＯＳのメモリテストをバイパスするためにＢＩＯＳ変更を組み込まないこともできる。コンピュータシステムと共にデュアルランク／クワッドランクテラＤＩＭＭに最初に電源を投入したとき、テラＤＩＭＭはＮＶＭランクを選択するチップ信号を、ＤＲＡＭランクを選択するチップ信号にエイリアスする。例えば、デュアルランクテラＤＩＭＭに対して、ＮＶＭランクを選択するチップ信号を、ＤＲＡＭランクを選択するＣＳ０にエイリアスすることができる。この方法では、コンピュータシステムがＮＶＭランクを読み書きするために選択するとき、データが実際にはＤＲＡＭランクから読み書きされる。同様に、クワッドランクテラＤＩＭＭに対して、ＮＶＭランクを選択するＣＳ２及びＣＳ３は、２つのＤＲＡＭランクを選択するために用いられるＣＳ０及びＣＳ１にエイリアスすることができる。最後に、デュアルランクテラＤＩＭＭを、ＤＲＡＭのランクがＢＩＯＳメモリテストで用いられる、シングルランクＤＩＭＭとして、通知することができる。
【００２１】
図３は、１つの実施の形態による、デュアルランクテラＤＩＭＭのブロック図を示す。図示の通りテラＤＩＭＭ３００はＡＳＩＣ３０１、ここでは「Ｒｕｓｈ」と呼ぶ、一列に並べた（ランクになった）ＤＲＡＭデバイス３０２、複数のデータバッファデバイス３０３、ここでは「ボルトデバイス（Ｂｏｌｔ  ｄｅｖｉｃｅｓ）」と呼ぶ、一列に並べた（ランクになった）ＮＶＭデバイス３０４、ＳＳＤコントローラ３０５、ＳＰＤ３０６、及びＰＩＣマイクロコントローラ３０７を有する。ＲＤＩＭＭと同様に、Ｒｕｓｈ３０１は、メモリコントローラの制御ラインへの電気負荷を軽減するために、レジスタ及び位相同期ループ回路、ここでは「ＲＰＬＬ回路」と呼ぶ、を備えている。Ｒｕｓｈ３０１はまた、ボルトデバイス（Ｂｏｌｔ  ｄｅｖｉｃｅｓ）３０３の制御回路及びＳＳＤコントローラ３０５とのインターフェース（例えば、ＳＡＴＡ、ＰＣＩ−Ｅ、等）を有する。ＳＳＤコントローラ３０５は、ＮＶＭデバイス３０４と行き来するデータのフローを管理する。ＳＳＤコントローラ３０５をＲｕｓｈ３０１内に組み込むことができるようにすることを意図するものである。アドレス／制御・バス３１１は、Ｒｕｓｈ３０１と接続される一方、メインメモリバス３１２は、ボルトデバイス３０３により、ＤＩＭＭ上のメモリバスとから分離されている。
【００２２】
各ボルトデバイスは、双方向オクタルフリップフロップと（メモリバスに接続された）ホストポートを任意の３つのＤＤＲ３ポートに接続するマルチプレクサとを有する３つのＤＤＲ３ポートを有する。さらに、ＤＤＲ３の各ポートは、トライステートとすることができ、ＤＤＲ３のＤＱ／ＤＱＳ信号を用いて信号を送ることができる。ボルトデバイス３０３は、コンピュータシステムとＤＲＡＭデバイス３０２又はＲｕｓｈ３０１とのデータバーストの時刻変更を行う。また、ボルトデバイス３０３は、ＤＩＭＭ上のＤＭＡ（direct  memory  access）をＤＲＡＭデバイス３０２とＲｕｓｈ３０１との間で生じさせることができるような分離を行う。
【００２３】
Ｒｕｓｈ３０１データインターフェースの１つの特徴は、レーン毎の遅れを補償する回路、例えば、プログラム可能な送出時間と受け取り時レーンゆがみ補正を行う回路を含んでいることである。ボルトデバイス３０３とＲｕｓｈ３０１との距離、及び、ボルトデバイス３０３とＤＲＡＭデバイス３０２との距離、の間の距離の相違により、テラＤＩＭＭは、データが適切な時刻に到着するよう送出時間を調整することができる。これは、これらの値を製造工程で較正することができ、ＮＶＲＡＭ（ｎｏｎｖｏｌａｔｉｌｅ  ＲＡＭ）のようなオンボードのメモリに記憶させることを意図するものである。これはまた、ＢＩＯＳのファームウェアを適切に変更することにより、このような較正を、他のＢＩＯＳの較正の一部としてシステム中で実行することができることを意図するものである。
【００２４】
図４は、１つの実施の形態による、典型的なシングルランクテラＤＩＭＭのブロック図を示す。この実施の形態はどのようなＤＲＡＭデバイスをも含まないので、ＮＶＭデバイスに非常に大きな余裕を与える。上述のように、ＢＩＯＳの変更を、ＢＩＯＳのブートにおけるメモリテスト（例えば、メモリ使用不可テスト）を通過させるために組み込むことができる。図５に示す１つの実施の形態によれば、メモリバス５１２を、Ｒｕｓｈ５０１に直接接続することができる。この実施の形態では、ＤＲＡＭ又はボルトデバイスは含まれない。
（テラＤＩＭＭの設置）
メモリテストを行うことに加えて、一般にＢＩＯＳは、ＣＰＵメモリコントローラのプログラミングを制御し、どのメモリアドレスが有効であるかを理解するためにオペレーティングシステム（ＯＳ）で用いられるマッピングを生成する。ホスト論理アドレスのＤＩＭＭ物理アドレスへのマッピングは、ＣＰＵ及びＢＩＯＳプログラミングの設計に依存する。後で説明する多くの特徴は、（先に説明したように、シングルランクテラＤＩＭＭは、メモリテストを不可能にするよう、ＢＩＯＳの変更を組み込んでいるので）ＢＩＯＳの変更を行わなければならない事態を避けるよう設計されている。従って、テラＤＩＭＭは、ＢＩＯＳの変更の有無にかかわらずコンピュータシステムに組み込むことができる。
【００２５】
テラＤＩＭＭに対応してＢＩＯＳの変更を行うことが好ましくないか又はできないようなシステムに対して、テラＤＩＭＭを動作させるためのシステム／ドライバを適切に設定するためにディスカバリーブートローダをインストールすることができる。図６に示したように、ディスカバリーブートローダの命令６０２は、ＢＩＯＳの命令６０１の後で、ブートローダの命令６０３の前に実行される。ＤＩＭＭの動作の観点から、テラＤＩＭＭがディスカバリーブートローダを用いて初期化されていたかどうかによる違いはない。一般に、テラＤＩＭＭドライバはまた、ＲｕｓｈのＡＳＩＣと通信するために取り付けることができる。
【００２６】
ディスカバリーブートローダにはシステムディスカバリーのための命令が含まれる。システムディスカバリーは、テラＤＩＭＭ初期化処理のサブセクションであり、テラＤＩＭＭを適切に認識させるためのＢＩＯＳ変更が行われなかったときに必要となるかもしれない。ディスカバリーの役割は、テラＤＩＭＭはメモリマップのどこに適するかを決め、テラＤＩＭＭを動作させるためにテラＤＩＭＭドライバによりマッピングを使うことができるかどうかを判断することである。メモリマップがテラＤＩＭＭの動作に役立つ場合は、ディスカバリー処理は、コンピュータシステムの、データのスクランブル、アドレスのマッピング、ＥＣＣの生成、データのインターリーブ／デ・インターリーブ、及びビットスイッツリング（bit  swizzling）について知得する処理とすることができる。最終的に、ブートローダは（メモリマップを確認するためにＯＳにより用いられた）メモリマップテーブルを修正し、ＯＳにテラＤＩＭＭメモリ空間を確保するよう命令する。一旦ディスカバリーブートローダが動作を完了しＢＩＯＳメモリマップテーブルを適切に修正すると、従来のブートローダが開始する。
（ＢＩＯＳの変更なしでのテラＤＩＭＭの初期化）
図７は、１つの実施の形態による、テラＤＩＭＭの初期化処理の典型的なフォローチャートを示す。テラＤＩＭＭの初期化処理は、電源オンボタンを押したときからＯＳがテラＤＩＭＭドライバを初期化するまでをカバーする。この実施の形態において、テラＤＩＭＭは、ＳＰＤによりＲＤＩＭＭとして通知され、ＲＤＩＭＭの初期化シーケンス（ＲＰＬＬシーケンス）がそれに続く。
【００２７】
ステップ７０１で、テラＤＩＭＭへの電源がオンとなる。電源がオンとなった後、ステップ７０２で、テラＤＩＭＭが初期化される。ＳＰＤにも電源を供給する電源レールにＰＩＣが接続される。ＰＩＣがブートし、ホストコンピュータシステム（以降「ホスト」と称す）がＳＰＤを読み込もうとする前に、ホストからＩ２Ｃオペレーションを受け取る準備が完了する。代替的に、ホストがＳＰＤを直接読み込む代わりにＰＩＣがＳＰＤデータをホストに提供することもできる。一旦、ＤＩＭＭへの電源が有効となると、Ｒｕｓｈが不揮発性メモリから設定／較正情報を読み取ることができるか又は、ＰＩＣがＲｕｓｈレジスタをプログラムすることができる。ＲｕｓｈのＡＳＩＣにプログラムされた情報として下記を含めることができる。
・  Ｒｕｓｈの動作及びボルトの動作を、電圧毎及び動作スピード毎に可能なようにする製造時の較正データ
・  電圧毎及び動作スピード毎の、ＲＰＬＬ／ＤＲＡＭ／ボルトの設定オーバーライドデータ、及び
・  現在のＤＲＡＭのランクの数及びＤＲＡＭの編成（ｘ４／ｘ８）を含むＤＩＭＭの設定データ。
【００２８】
ステップ７０３で、次に、ホストは、ＳＰＤを読み込む。一般にＢＩＯＳは、すべてのＤＩＭからＳＰＤの値を読み込み、動作パラメータの共通部分を決定する。ＳＰＤの値の読み込みに応じて、ＢＩＯＳはＤＩＭＭに適用する電圧を決定する。ＳＰＤは、一般に、メモリモジュール情報を記憶する不揮発性メモリ（例えば、ＥＥＰＲＯＭ）及び温度センサーを有する。１つの実施の形態によれば、その代わりにＰＩＣが内部のＮＶＭにあるメモリモジュール情報（ここで「ＳＰＤ負荷」と称す）を記憶し、ＳＰＤを温度センサーとしてのみ用いる。これにより、ＰＩＣのＮＶＭに複数のＳＰＤを記憶させることができる。複数のＳＰＤ負荷を記憶させることにより、テラＤＩＭＭがシングルランク（セーフモード）テラＤＩＭＭ、又は、デュアルランク（ノーマルモード）テラＤＩＭＭとして現れることができる。ＤＩＭＭが多くの場合システム内でブートできるような方法を提供するために、セーフモードが存在する。
【００２９】
次に、ステップ７０４で、ＲｕｓｈのＡＳＩＣ及びＤＲＡＭメモリが初期化される。ＲＰＬＬが初期化されている間、複数のＲＰＬＬのＲＣレジスタ及びＤＲＡＭのＭＲＳレジスタが、テラＤＩＭＭを制御するためにＢＩＯＳにより書き込まれる。これらの値のいくつかは、ホストにより提供されたこれらの値がテラＤＩＭＭの設計（特にＢＩＯＳの変更のない場合）と互換性がないかもしれないので、書き込まれる前にＲｕｓｈにより「メッセージされる」必要がある。
【００３０】
次に、ステップ７０５で、ホストとテラＤＩＭＭとの間のＤＤＲデータ経路のトレーニング及び較正をＢＩＯＳが行う。このステップの間、Ｒｕｓｈの振る舞いは、テラＤＩＭＭのタイプ（例えば、シングルランク／デュアルランク／クワッドランク）に大きく依存する。１以上のＤＲＡＭランクを有するテラＤＩＭＭに対して、Ｒｕｓｈは、ホストがＮＶＭランクにアクセスすることを試みている間であってもＤＲＡＭランクにアクセスできるように、ＤＲＡＭランクをエイリアスする。ランクのないＤＲＡＭを有するテラＤＩＭＭに対して、Ｒｕｓｈは、メモリアクセスに応答してＤＩＭＭの内部バッファをエイリアスする。ＢＩＯＳが起動させず、読み返す前に識別可能なＲＡＳアドレスの数（例えば、２）より大きな数を書き込まない限り、なにもすべきでない。サポートされる識別可能なＲＡＳアドレスの数は細かく実行され、必要に応じて増減することがある。
【００３１】
次に、ステップ７０６で、ＢＩＯＳはメモリテスト及びメモリの初期化を行う。一般に、ＢＩＯＳはすべてのＤＲＡＭランクが完全に機能することを確かめる。シングルランクテラＤＩＭＭ（例えば、ＤＲＡＭのないもの）は、このテストで失格となる。従って、このメモリテストは、シングルランクテラＤＩＭＭに対して行うことはできない。デュアルランクテラＤＩＭＭにたいして、ＲｕｓｈはＤＲＡＭランクがどのランクににもアクセスするようエイリアスする。デュアルランクテラＤＩＭＭは、ＲｕｓｈがこのＤＲＡＭをＮＶＭにエイリアスできるように、シングルランクＤＩＭＭとして通知することができる。これにより、ＮＶＭランクにアクセスする読み込み書き出しをＤＲＡＭランクに導くことができる。メモリテストが同時にシングルランクを確認する限り、何も行うべきでない。メモリテストの後、すべての配置が有効なＥＣＣ（エラーコードの訂正）を持つように、メモリは初期化される。
【００３２】
次に、ステップ７０７で、ＢＩＯＳの命令を完了させた後、さらなる初期化をディスカバリーブートローダに引き渡す。一般に、ディスカバリーブートローダは、システムに接続されたテラＤＩＭＭの数とテラＤＩＭＭのメモリサイズとを決定すると共に、ＲｕｓｈのＡＳＩＣのアドレスマップを特定する役割を担う。また、データのスクランブリング、ＥＣＣの生成、データのインターリーブ／デ・インターリーブ、ビットスイッツリング（bit  swizzling）、及びアドレスの線形化をサポートするようＲｕｓｈのＡＳＩＣを設定する役割を担う。当然のことながら、データのスクランブリング、ＥＣＣの生成、データのインターリーブ／デ・インターリーブ、ビットスイッツリング（bit  swizzling）、及びアドレスの線形化はフレキシブルであり、プログラマブルである。これらの機能をプログラムする能力により、例えば、シングルテラＤＩＭＭ設計が、種々の異なるＣＰＵシステムで動作するようにできる。異なる設定に対応させる方法には以下のものが含まれるが、これに限定されるものではない。
・  ＤＩＭＭ上に必要な、すなわち、側波帯通信方法（例えば、ホスト対ＤＩＭＭのサブバス）を用いて、ＢＩＯＳ、ブートローダ又はデバイスドライバの初期化に必要な不揮発記憶、及び、
・  ＢＩＯＳ、ブートローダ、又は、デバイスドライバが、ロジックを訓練しプログラマブルロジックを設定するために、一連のメモリ操作を送る、知得方法
すべての、設定が行われた後、ディスカバリーブートローダがＢＩＯＳメモリマップテーブルを更新する。これらの動作モードの知得又はプログラムする能力により、所定のテラＤＩＭＭが１つのシステムから他のシステムに再配置することができ、テラＤＩＭＭの仕様を特定のサーバーのデザインに組み立てる必要をなくすことができる。
【００３３】
最後に、ステップ７０８で、ディスカバリーステップの後、ＯＳを従来のブートローダでブートする。ＯＳがブートされている間、テラＤＩＭＭドライバも初期化される。この段階で、システムに接続されたテラＤＩＭＭは、通常のメモリ動作モードになり、テラＤＩＭＭドライバがアクセスする準備が完了する。
（テラＤＩＭＭディスカバリー）
先に説明した通り、ディスカバリーブートローダは、システムに接続されたテラＤＩＭＭの数及びメモリのサイズを決定し、ＲｕｓｈのＡＳＩＣのアドレスマップを特定する役割を担う。また、アドレスの知得及びＥＣＣとデータのインターリーブ／スイッツルの知得の役割を担う。これらの機能を実行するためにＲｕｓｈは多くの特殊なモードで動作する。このような特殊なモードは迷路解除シーケンスにより選択される。
【００３４】
迷路解除シーケンスにより、アドレスマップ又はＥＣＣ又はデータマップを知らなくてもＲｕｓｈの動作モードを変えることができる。これらのシーケンスは、同じアドレスへのデータの書き込みバーストを比較することにより特定することができる。特に、１つの書き込みバーストから次の書き込みバーストへ変化するデータビットの数を比較する。基本的には、ハードウェアが連続する書き込みのデータビットにＸＯＲ演算を行い、結果値中の「１」の数を数える。以下は、連続する書き込みのビット数の変化がスクランブリングにより、如何に影響を受けないかを示している。
2014506698.tif 000003
【００３５】
Ｈ（ｉ）は、シーケンス位置ｉにおいて書き込まれたデータを表す。Ｄ（ｉ）はＨ（ｉ）のスクランブルされた値を表す。ＤＶ（ｉ）は、Ｄ（ｉ）とＤ（ｉ＋１）とでＸＯＲ演算をおこなうことによりｉ＋１での書き込みとｉでの書き込みの間での変化したビットの数を表す。一例として、迷路解除シーケンスは、ＤＶ（０）・・・ＤＶ（６）＝＝｛６４，８，３２，４，１６，２，８｝ａｎｄＤＶ（７）、そして、どの迷路が解除されたかを示す。
【００３６】
一旦迷路が解除されると、Ｒｕｓｈは解除シーケンスと関連付けられたモードで動作する。１つの実施の形態による種々の迷路を以下の表１に記載する。
【００３７】
【表１】
2014506698.tif 000004
【００３８】
特定の環境において、迷路シーケンスの解除に用いないように設計に制限が加わることがある。このような制限を克服するために、他の位置に読み込み又は書き込みせずに（同じ位置での読み込みは許され、カウントをリセットすることはない）行うＮ回の（例えば、レジスタにより設定可能である）同じ位置への書き込みアクセスを監視することにより、Ｒｕｓｈでの種々のモードでの動作を解除することができるようにするものである。
【００３９】
図８は、１つの実施の形態による、ディスカバリーブート処理の典型的なフォローチャートを示す。ステップ８０１で、ディスカバリーブートローダ（ここでは「ＤＢＬ」と称す）は、エイリアシングの振る舞いを検索することにより、メモリモジュールが通常のＤＲＡＭモジュールか又はテラＤＩＭＭモジュールかを判断する。例えば、デュアルランクテラＤＩＭＭは、１セットのデータをランク０に書き込み、そして、別のセットのデータをランク１内の同じオフセットに書き込むことにより（各ランクについて複数回行うかもしれない）、検出することができる。ランク１に書き込まれたデータに対応するランク０から、データが読み返された場合、メモリモジュールはエイリアシングとしての振る舞いを呈する。
【００４０】
ステップ８０２で、ＤＢＬは、テラＤＩＭＭ中のランクのうちどれがＮＶＭランクかを決定する。デュアルランクテラＤＩＭＭにとって、ステップ８０１で、デュアルランクテラＤＩＭＭが検出されたとしても、どのランクがＮＶＭランクかについては依然として未定である。これを決定するために、ＤＢＬは最初にテラＤＩＭＭを「ディスカバリーのためのシングルランクエイリアス」（ここでは「ＳＡＤ」と称す）モード（表１参照）に配置する。ＳＡＤ内での動作により、テラＤＩＭＭは、ＮＶＭランクを書き込むときにデータパターンを反転させる。これにより、各ランクにパターンを書き込み、どのデータのセットが反転しているかを読み返すことにより、ＮＶＭランクを見つけることができる。反転したデータのセットはＮＶＭランクに対応している。また、ＳＡＤモードで動作することで、ＤＢＬはシングルランクテラＤＩＭＭを検出することができる。
【００４１】
ＳＡＤモードが適切に機能する前に、しかしながら、ＲｕｓｈがホストシステムのＥＣＣ反転ルールを知得する必要がある。これは、一般に、ホストシステムがデータをメモリモジュールに書き込むとき、ＥＣＣビットのセットも書き込むからである。ＥＣＣ中の各ビットは、データからのビットのサブセットの排他的論理和である。この点で、このようなビットを生成するためのＥＣＣルールはＲｕｓｈに知られていない。ホストによって読み込まれたとき、正しいＥＣＣビットのセットなしに反転させたデータパターンをＲｕｓｈが返した場合は、読み込みエラーが生じるかもしれない。
【００４２】
先に説明したように、ＥＣＣ中の各ビットは、データからのビットのサブセットの排他的論理和である。このサブセット中のメンバーの数は奇数又は偶数である。これが偶数の場合、すべてのデータビットが反転した場合ＥＣＣビットは変化しない。数が奇数の場合、ＥＣＣビットは反転する。従って、Ｒｕｓｈがデータを修正し、正しいＥＣＣビットを生成することのできる方法は、ＤＢＬにデータパターンＸ及び反転した〜Ｘを同じアドレスに送らせることである。これは何度か繰り返される（例えば、４回）。Ｒｕｓｈはメモリに書き込まれた最後の２つの値を監視し、その値をビット単位で反転している場合は、Ｒｕｓｈは、どのＥＣＣビットが反転しているかを決定する。一旦Ｒｕｓｈがこれを繰り返して特定すると（例えば、４回）、Ｒｕｓｈは、ＥＣＣ反転ルールを知得し、上述のＳＡＤモードでの動作をスタートする準備が完了する。例えば、ホストがデータパターンＸを書き込むときに、Ｒｕｓｈは、反転パターン〜Ｘをそのメモリに実際に書き込み、ＥＣＣバイトレーン中の適切なビットを反転させる。
【００４３】
ＤＢＬがＮＶＭランクを特定した後、ＤＢＬはステップ８０３に移り、テラＤＩＭＭのベースアドレスを見つける。ＤＢＬはテラＤＩＭＭを「ベースハント」（ここでは「ＢＨ］と称す）モードに配置する（表１参照）。ＢＨモードは、ＤＢＬがテラＤＩＭＭのベースアドレスを見つけるのを助けるために動作する（例えば、ＢＡ／ＲＡＳ／ＣＡＳ＝０／０／０）。ＢＨモードにおいて、ＮＶＭランクでのディスカバリーエイリアシングは、書き込みアドレスＢＡ／ＲＡＳ／ＣＡＳが０／０／０と一致した場合、反転したデータが書き込まれるよう振る舞う。さもなくば、データは反転しない。これにより、ＤＢＬはテラＤＩＭＭにマップしたすべてのアドレス空間をスキャンしテラＤＩＭＭのベースアドレスを生成するホストアドレスを見つけることができる。
【００４４】
テラＤＩＭＭのベースアドレスを特定した後、ＤＢＬは、ステップ８０４に移り、テラＤＩＭＭのアドレス空間を見つける。ＤＢＬはテラＤＩＭＭを「アドレスハント」（ここでは「ＡＨ］と称す）モードに配置する（表１参照）。ＡＨモードは、ＢＨモードの拡張として動作し、ＤＢＬがテラＤＩＭＭのアドレス空間を見つけるのを助け、ベースアドレスの知得と同じように振る舞う。例えば、ＤＢＬがテラＤＩＭＭのベースアドレス（例えば、ＢＡ／ＲＡＳ／ＣＡＳ＝０／０／０）に対応するホストアドレスを見つけた後、Ｒｕｓｈは、テラＤＩＭＭのアドレスが０／０／０×８に合致しない場合、Ｒｕｓｈは、反転したデータを書き込む。さもなくば、データは反転しない。再度ＡＨモードに入った場合（例えば、ＡＨモードのために迷路解除が再始動した場合）、Ｒｕｓｈは、テラＤＩＭＭアドレス０／０／０×１０を追求する。ＡＨモードのそれぞれの再始動により、アドレスは、ＣＡＳ（行アドレスストローブ）、ＲＡＳ（列アドレスストローブ）、そしてＢＡ（バンクアドレス）を通って、直線的に上昇する（例えば、０／０／０×１００、０／０／０×２００、等）。
【００４５】
次に、ＤＢＬはステップ８０５に移り、テラＤＩＭＭのアドレス空間で動作可能であるかどうかを分析し判断する。例えば、ＤＢＬは、アドレスインターリーブがあるか、そして、アドレス空間に穴があるかどうかを判断しなければならない。１つの実施の形態によれば、アドレスインターリーブが検出されたとしても、キャッシュライン境界より小さいインターリーブは低効率で動作する可能性がある。穴がある場合は、ＤＢＬはこの穴が妥当なものであるかどうかを判断しなければならない。１つの実施の形態によれば、ＤＢＬはこの穴が妥当なものであるかどうかは、穴の全数量であって所定の穴の寸法ではない。妥当性は、ＯＳメモリマップテーブルに対するＢＩＯＳの最大サイズに関してであろう。
【００４６】
次に、ＤＢＬは、アドレス及びデータのスクランブルを知得するためにステップ８０６に移り、テラＤＩＭＭを「アドレス知得」（ここでは「ＡＬ」と称す）モード（表１参照）に配置する。当然のことながら、アドレス及びデータのスクランブル情報が既知であれば、知得することは必要ではない可能性があり（（例えば、バイパスステップ８０６）、そのような情報はＲｕｓｈのＡＳＩＣ設定レジスタに直接プログラムすることができる。例えば、そのような情報は非揮発性記憶ユニット（例えば、ＤＩＭＭシリアルＲＯＭ）又は、ＢＩＯＳ、ＤＢＬ、又はデバイスドライバにより、側波帯通信を介してプログラマブルレジスタにロードされる（例えば、ホストからＤＩＭＭのＳＭＢｕｓへ）。
【００４７】
ＡＬモードでの運転において、Ｒｕｓｈハードウェアは、
・  ホストのデータをスクランブル／デ・スクランブルする、
・  ホストの物理アドレスからＤＩＭＭアドレスへマッピングし最適な内部マッピングを設定する、及び
・  このマッピングを知得するためのメカニズムをホストに提供する、
ために知る必要のある情報について判断する。
【００４８】
データのスクランブル／デ・スクランブルは、特定のＣＰＵ製造会社（例えば、インテル）は、データ書き込みのためのアドレスに基づきＤＲＡＭに書き込まれたデータをスクランブルするので、必要となる可能性がある。データのスクランブルは、記憶するために書き込まれたデータを知る必要のない従来のＤＲＡＭに問題を提示するものではない。一方、テラＤＩＭＭは、ホスト上で走っているテラＤＩＭＭドライバにより送られたコマンドを知る必要があるかもしれない。従って、テラＤＩＭＭに書き込まれたデータは、スクランブルすべきであり、ホストに送り返されたデータはスクランブルすべきである（ホストはスクランブルされたデータが戻ってくることを期待している）。
【００４９】
ホストの物理アドレスからＤＩＭＭアドレスへのマッピングを判断するために、そして、最適な内部マッピングを設定するために、Ｒｕｓｈにはアドレスマッピングのハードウェアが含まれる。適切なマッピングを取得することにより、テラＤＩＭＭドライバがＲｕｓｈに組み込まれたバッファのセットにアドレスを指定することができる。マッピングを最適化することで効率的な動作がもたらされる。データバッファが隣接する４ＫＢのチャンクとしてマップされ、特定のバッファがアドレスマップに複数回現れるなら、マッピングは最適化されたと考えられる。特定のバッファを何度も出現させることは、新しいコマンドのために再利用されるバッファの内容を読み込むときに、キャッシュヒットが生じること（またはキャッシュ無効命令を使うこと）を低減又は避けることに役立つ。ここに記載のアドレス知得アルゴリズム及びアドレスマッピングハードウェアは最適なマッピングの解決手段をもたらす。
【００５０】
アドレス及びスクランブルの知得が完了した後、ＤＢＬは、ＥＣＣ及びデータインターリーブ／スイッツル知得のため、ステップ８０７に移る。当然のことながら、ＥＣＣ及びデータインターリーブ／スイッツル情報が既知である場合、知得は必要でない可能性があり（例えば、ステップ８０７をバイパスする）、このような情報を、ＲｕｓｈのＡＳＩＣ設定レジスタに直接プログラムすることができる。例えば、そのような情報は非揮発性記憶ユニット（例えば、ＤＩＭＭシリアルＲＯＭ）から読み込むこと、或いは、ＢＩＯＳ、ＤＢＬ、又はデバイスドライバにより、側波帯通信を介してプログラマブルレジスタにロードされる（例えば、ホストからＤＩＭＭのＳＭＢｕｓへ）。
【００５１】
テラＤＩＭＭは、特定のバイト／ビットフィールドに予想される、コマンドのような、ホスト意味情報から受け取るので、ＥＣＣ及びデータインターリーブ／スイッツル知得は必要であるかもしれない。対照的に、従来のＤＩＭＭは、データ及びＥＣＣビットの両方がメモリに一緒に記憶され、同じ順序で書き込みと読み込みとがなされていたので、一般に、データスイッツル機構を知る必要はなかった。
【００５２】
ホストで用いられるＥＣＣアルゴリズム／コードには、６４／７２ＳＥＣ／ＤＥＤコード、１２８／１４４ＳＳＣ／ＤＳＤコード、２５６／２８８ＳＳＣ／ＤＳＤコード、又は２５６＋Ａｄｄｒ／２８８ＳＳＣ／ＤＳＤコードを含むことができる。テラＤＩＭＭ中のフラッシュデバイスは、一般に、ＳＥＣ／ＤＥＤコード又はＳＳＣ／ＤＳＤＥＣＣコードではなくＢＣＨコードを用いるので、Ｒｕｓｈは、ホストから送受信するデータのＥＣＣビットを生成及びチェックをすることができるようにすべきである。１つの実施の形態によれば、ＥＣＣビットは、ホストとのインターフェースでではなくＲｕｓｈコア中で生成されチェックされる。１つの実施の形態によれば、Ｒｕｓｈは、ＥＣＣを組み込んでいないテラＤＩＭＭをサポートすることができる。この実施の形態において、バイトレーンをチェックするための入力ピンは設置することができドライバをターンオフすることができる。加えて、ＥＣＣビットを、データがＲｕｓｈに転送されるとき、チェックしないことも可能である。
【００５３】
ＥＣＣ及びデータインターリーブ／スイッツル知得を容易にするため、ＤＢＬはテラＤＩＭＭを「ＥＣＣ／インターリーブ／スイッツル知得」モード（ここでは「ＥＩＳ」モードと称す）におく（表１参照）。ＥＩＳモードで運転すると、ＤＢＬは、知得パターンを用いて、ＥＣＣ生成回路、及びデ・インターリーブ／デ・スイッツル回路を初期化し、習得させる。ＥＣＣ／インターリーブ／スイッツル知得が完了した後、ステップ８０８にて、通常運転のために、テラＤＩＭＭにホストがアクセスする準備が完了する。この点で、ディスカバリーブート処理が終わり、従来のブートローダがホスト上でＯＳのブートを制御する。
（データスクランブリング）
先に説明したように、図８のステップ８０６に関し、特定のＣＰＵ製造業者（例えば、インテル）では、データ書き込みのためのアドレスに基づいてＤＲＡＭに書き込まれたデータをスクランブルするので、データのスクランブル／デ・スクランブルが必要であるかもしれない。インテルのシステムでは、例えば、スクランブルシーケンスによりデータに排他的論理和演算をおこないデータをスクランブルする。スクランブルシーケンスは、各アドレスビットがベクトルに対応する独立ベクトルのセットの線形重ね合わせ（例えば、ビット単位の排他的論理和）に基づく。ベクトルのいくつかは有意であり（ゼロでない）、いくつかはそうでない。４ビットデータ値及び２ビットアドレス値を用いて、以下の例示では、アドレス１０ｂへの書き込み時、バイナリーデータ値１１００ｂをどのようにインテルではスクランブルしているかを示している。
2014506698.tif 000005
【００５４】
従って、「scrambled_value」のスクランブルを解除するため、ベクトルｖ１及びｖｃを知らなくてはならない。簡潔さにより、これらのベクトルｖは、スクランブルシーケンスで用いられるこれらのベクトルｖは「生成ベクトル」と称す。
【００５５】
図９は、１つの実施の形態による、ジェネレータ・ベクトルの各々を解く方法の典型的なフローチャートを示す。最初に、ステップ９０１で、ホストはアドレス０ｂにゼロデータパターンを書き込む。これにより、Ｒｕｓｈは、ステップ９０２で、生成値ｖｃを決定することができる。説明のために、ホストがデータ値Ｄを書き込んだときＲｕｓｈにより見られるスクランブルされた値は、上記記載を想起して、
2014506698.tif 000006
【００５６】
Ｒｕｓｈは、ステップ９０３で、ｖｃをベクトルレジスタに保存する。
【００５７】
Ｒｕｓｈが残りの生成ベクトル（例えば、ｖ０、ｖ１、・・・、ｖＮ、ここで、Ｎはアドレスビット位置に対応する）を解くための手助けとして、ホストは１つのアドレスビットを「１」に設定する一方、他のすべてのアドレスビットは「０」に設定され、ゼロデータパターンをそのアドレスに書き込む。例えば、生成ベクトルｖｉについて解くために、位置ｉにあるアドレスビットを「１」に設定し、ステップ９０４で、そのアドレスに書き込むだけでよい。Ｒｕｓｈは、ｖｉについて解くために、ステップ９０５で、以下のようにする。Ｒｕｓｈにより、見つけられるスクランブルされた値は、
2014506698.tif 000007
【００５８】
Ｒｕｓｈは、ステップ９０６で、対応するベクトルレジスタにｖを保存する。ステップ９０４から９０６は生成ベクトル値が解けるまでこの順序で繰り返される。すべての生成ベクトル値が解けると、Ｒｕｓｈは、ホストから受け取ったデータのスクランブルを解除し、又はホストへ送るデータをスクランブルすることができる。
【００５９】
図１０は、１つの実施の形態による、ホストへ送られたデータをスクランブルするか又はホストから受け取ったデータのスクランブルを解くスクランブラーシーケンスを生成する回路の論理的な実施形態を示す。図示のとおり、生成ベクトルの各々は５７６ビット（７２ビット幅×８ビートバースト長）で特徴付けられる。一般に、ホストが使うスクランブベクトルは１６ビット幅である。例えば、いくつかのインテルのＣＰＵは、１６ビットレーンの各々に対して１６ビットのスクランブルベクトルを用いる（例えば、３２ビットデータバスに対して４．５×１６ビットレーン）一方、他のＣＰＵは、３２ビットのスクランブルベクトルを用いる。小さいベクトルを用いることも可能であるが、特定のＣＰＵでは使用が制限される可能性がある。ＥＣＣレーンは、下位の８ビット（例えば、０．５×１６ビットレーン）を用いる。マザーボードをスイッツルできると仮定して、７２ビット以上のビット幅を用いることが好ましいであろう。しかし、マザーボードがビットスイッツルできないことがわかっている場合、生成ベクトルのハードウェアはホストのスクランブルベクトルと同じ幅である必要があるかもしれない（例えば、１６ビット又は３２ビット）。上記インテルの場合、メモリのコストが約５倍になることを節約して、１６ビットとなる。
【００６０】
図１０に示したアドレス入力信号はＤＩＭＭに関するものなので、アドレス入力信号はアドレスビット位置「３」で始まる。アドレス入力信号がＤＩＭＭに関するものなのかホストに関するものなのかにより、回路へのアドレス入力信号は、他のアドレスビット位置で始めることができる。
（アドレス知得／マッピング）
ホストは、一般に、非線形及び／又は非直交でアドレスを単調に増加させるようマッピングする。直交マッピングは、一般に、ホストアドレスにおける単一のビット変化がＤＩＭＭ物理アドレスにおける単一のビット変化をもたらすマッピングを意味する。直交マッピングは、一般に、ホストアドレスが単調に増加するにつれて、アドレスフィールド（例えば、ＢＡ、ＲＡＳ、ＣＡＳ）内でＤＩＭＭ物理アドレスが単調に増加するマッピングを意味する。完全な直交マッピングは、一般に、他のフィールドに切り替わる前にフィールド（例えば、ＢＡ、ＲＡＳ、ＣＡＳ）全体にわたってＤＩＭＭ物理アドレスが増加するマッピングを意味する。
【００６１】
例えば、テストの結果、ＡＭＤにより製造されるマイクロプロセッサは、一般に、（いくつかの文書では直交マッピングに戻す逆マッピングが可能であることを示しているが）非直交を採用するが線形アドレスマッピングを採用していることが分かっている。一方、インテルにより製造されるマイクロプロセッサは、一般に、直交であるが非線形マッピングを採用している。いずれの場合も、アドレスマッピングは、一般に、テラＤＩＭＭと共に用いるための最適化はされていない。
【００６２】
適切なマッピングを取得することにより、テラＤＩＭＭドライバはＲｕｓｈに組み込まれたバッファのセットにアドレスすることが可能になる。マッピングを最適化することにより動作の効率化がもたらされる。データバッファが連続する４ＫＢチャンクとしてマッピングされ、特定のバッファがアドレスマップ中に複数回現れる場合は、マッピングが最適化されたと考えられる。特に、ホストメモリマップ中の固有の１６ＫＢページに各Ｒｕｓｈバッファを配置することが好ましい。個々のバッファは、そのページのオフセット０にて開始することができ、６４Ｂ、５１２Ｂ、又は４ＫＢの大きさとなる。ページの残りは、ゼロバッファとして読み込まれ、ホストが書き込むときは無視されることになる。あるいは、実施の形態に合わせて、ページの残りは、バッファにエイリアスされ、１６ＫＢのページ内で何度もデータを読み込むことができる。
【００６３】
以下の表２は、インテルのマイクロプロセッサベースのシステムのホストアドレスがＲｕｓｈ物理アドレス内にどのようにマッピングされるかを示している。以下のアドレスが示しているように、下位３ビットは６４ビットワード内のバイトオフセットを示すために用いられ、次の３ビットは６４Ｂ（８ビート）バーストの開始オフセットも示すために用いられると仮定すると、ホストアドレスの下位６ビットは、最下位ではない。
【００６４】
【表２】
2014506698.tif 000008
【００６５】
表２に示したようなアドレスマッピングは、単調増加し且つ直交する一連のアドレスを提供するアドレス知得パターンをホストにアサートすることにより作り上げることができる。そのような知得パターンをアサートすることにより、ＲｕｓｈのＡＳＩＣは、外部から見ることができるアドレス信号（例えば、ＢＡ、ＲＡＳ、ＣＡＳ）を非線形かつ非直交アドレス空間から線形かつ直交アドレス空間へ再マッピングすることが可能となる。図１１は、１つの実施の形態による、最適なアドレスマッピングを生成する方法の典型的なフローチャートを示す。ホストは、ステップ１１０１で、キャッシュをバイパスさせる書き込み命令を用いてテラＤＩＭＭホストベースアドレス（例えばアドレスｏｆｆｓｅｔ＝０）への一連の書き込みを生成する。書き込まれたデータはすべてゼロのパタンである。次いで、ホストは、ステップ１１０２でのアサンプションのセットに基づきホストアドレスの最下位ビットを決定する。表２に示した１つの実施の形態によれば、アサンプションには以下が含まれる。
・  ＤＩＭＭが６４ビット幅ならば、各ＣＡＳアドレスは８バイトに対応する。従って、最後の３ケタのホスト関連アドレスビットは、メモリシステムで用いられていない。
・  ＤＩＭＭは８ワードのバーストをサポートしているので、次の３アドレスビットは、バーストの開始位置を決定することに関連し、ＣＡＳアドレスの最下位３ビットとなる。
【００６６】
次に、ステップ１１０３で、ホストはホストアドレスの最下位ビットを「１」に設定し、そのホストアドレスへの一連の書き込みを生じさせる（例えば、テラＤＩＭＭベースアドレス＋０ｘ４０オフセットアドレス）。一連の書き込みの間、ＲｕｓｈのＡＳＩＣのアドレスマッピングのハードウェアは、「１」に設定されたＤＩＭＭ物理アドレスビットを検出し、このＤＩＭＭアドレスビットをＲｕｓｈ内の対応するアドレスビットに関連付ける（例えば、表２において、ＣＡＳ［３］はＣＯＬ［０］と関連付けられる）。アドレスの関連付けは、１以上のマルチプレクサを用いることにより生成することができ、後に図１２に示すように、対応するマルチプレクサレジスタに保存することができる。
【００６７】
次に、ホストは、ステップ１１０４で、ホストアドレスオフセットを１ビット位置だけ左に移動させ（例えば、０ｘ４０を０ｘ８０へ）、このホストアドレスへの一連の書き込みを生じさせる（例えば、テラＤＩＭＭベースのアドレス＋０ｘ８０オフセットアドレス）。さらに、Ｒｕｓｈのアドレスマッピングのハードウェアは、「１」に設定されているＤＩＭＭ物理アドレスビットを検出し、このＤＩＭＭアドレスビットをＲｕｓｈ内の対応するアドレスビットに関連付ける（例えば、表２において、ＣＡＳ［４］はＣＯＬ［１］と関連付けられる）。この関連付けは、他の関連するマルチプレクサレジスタに保存される。ステップ１１０４は、ホストオフセットアドレス空間全体の移動が完了するまで繰り返される。
【００６８】
１つの実施の形態によれば、いくつかの初期でコーディングをＲＡＳサイクルの後で始めることができ、ＣＡＳサイクルまで待つ必要がなく、Ｒｕｓｈは、ＲＡＳサイクルの間にすべてのＲＯＷ［  ］アドレスビットを関連付ける。例えば、一旦ＲＯＷ［  ］アドレス信号が関連付けられると、それに続くホストアドレスに対して、関連するＤＩＭＭ物理アドレスビットがＣＡＳビットである場合、このＣＡＳビットが無視されＲＯＷ［  ］アドレスポインターが進まない（例えば、ＣＡＳビットがスキップされ残りのアドレスビットが右にシフトされる）。表２に示すように、ＣＯＬ［  ］アドレスビットは、ＢＡ／ＲＡＳ／ＣＡＳビットの混合とすることができる。このように、ＣＡＳサイクルビットは、バッファの部分を選択するために用いられるが、バッファは以下のＲＡＳサイクルで選択される。１つの実施の形態によれば、ＣＡＳアドレスビットは、ＲＯＷ空間に現れることがある。
【００６９】
図１２ａは、１つの実施の形態による、ＤＩＭＭ物理アドレスビットをＲｕｓｈ内部アドレスビットに関連付ける回路の論理的な実施形態を示す。この回路には、ＢＡ／ＲＡ／ＣＡＳアドレスビットをＲｕｓｈの内部ＲＯＷ［  ］／ＣＯＬ［  ］アドレスビットと関連付けるための複数のマルチプレクサが含まれる。この回路にはまた、アドレス知得の開始時に「０」にリセットされるアドレス位置レジスタが含まれる。図示した回路の典型的な動作を、表２に示した関係に従って、以下に説明する。アドレス位置レジスタの値が０から７に増加するときに、対応するＢＡビット、ＲＡＳビット、又はＣＡＳビットを選択するために、マルチプレクサのレジスタ、ＣＯＬＭＵＸ０からＣＯＬＭＵＸ７、が初期化される。アドレス位置レジスタの値が８から２６に増加するときに、対応するＢＡ又はＲＡＳを選択するために、マルチプレクサのレジスタ、ＲＯＷＭＵＸ０からＲＯＷＭＵＸ８、が初期化される。この点で、ホストアドレスがＣＡＳ物理ビットに対応している場合、アドレス位置レジスタが増加せず、ＣＡＳビットがスキップされる。ホストアドレスオフセットが検索され、そして、対応する関連性が保存されると、ホストは、これらのレジスタを読み込み最終的なアドレスマッピングを決定する。図１２ｂは、ＤＩＭＭ物理アドレスビットをＲｕｓｈ内部アドレスビットに関連付ける論理回路の他の実施の形態を示す。図１２ｂの論理回路により、ＢＡ／ＲＡＳ／ＣＡＳのＤＩＭＭアドレスビットをＲｕｓｈ内部アドレスビットにマップすることができる。
【００７０】
図１２ａ及び図１２ｂに示したような、Ｒｕｓｈアドレスマップ及びアドレスマッピングハードウェアの目的は、常に１６ＫＢページのオフセット０で始まるバッファを提供することである（例えば、ＣＯＬ＝＝０）。表３は、１つの実施の形態による、異なるタイプのＲｕｓｈバッファにアクセスするための典型的なアドレスデコーディングを示す。ページサイズの選択（例えば、１６ＫＢ）は、別のＣＰＩＯアプリケーションで変更することができ、そのデバイスに最適なデータ転送サイズに基づく。
【００７１】
【表３】
2014506698.tif 000009
【００７２】
表３に関して
・  ＲＯＷ［２：０］（通常ＨＡ［１６：１４］）は、アクセスされるバッファのタイプを定義する。
・  ＲＯＷ［Ｊ＋３：３］（通常ＨＡ［Ｊ＋１７：１７］）は、特定のバッファに索引を付けるために用いられる。Ｊの値はアクセスされるバッファのタイプに依存する。
・  ＲＯＷ［１８：Ｊ＋４（通常ＨＡ［Ｎ：Ｊ＋１８］）は、特定のバッファにエイリアスバックされる。
通常ＨＡ［Ｎ：０］は、（ドライバにより計算されたような）内部物理アドレス空間であり、Ｎは、テラＤＩＭＭの長さそのものよりも大きい（例えば、ビットの大きい）アドレスになることがある、テラＤＩＭＭメモリ空間が終了するメモリマップ内の場所の関数である。ＨＡ［Ｎ：Ｍ］は、Ｒｕｓｈランクのベースアドレスを定義し、ＨＡ［Ｍ−１：０］は、Ｒｕｓｈメモリマップ内にあるオフセットを定義する。
【００７３】
この構成の利点は、ＤＩＭＭ／Ｒｕｓｈアドレス空間の宣言サイズを、デバイスを追加することなく変更することできる点である。ＨＡビットのＢＡ／ＲＡＳ／ＣＡＳビットへのマッピングがおかしくなる可能性があることを条件として、これにより、所定の任意のバッファにベースアドレスを直接的に計算する方法がテラＤＩＭＭドライバに提供される。
（ＥＣＣ及びデータのインターリーブ／スイッツル知得）
先に説明したように、テラＤＩＭＭが特にバイト／ビットフィールド中の、コマンドのような、セマンティック情報をホストから受け取るので、ＥＣＣ及びデータのインターリーブ／スイッツルを知得することが必要となることがある。デ・インターリーブ／デ・スイッツルにより、コマンド及びデータが正しく解釈できるように、ＣＰＵの標準的な順序でＲｕｓｈにデータがもたらされる。１つの実施の形態によれば、ＥＣＣ及びデ・インターリーブ／デ・スイッツル回路は、各８ビートバースト（５１２ビット）毎に２回動作する２５６ビットコアの周りに構築することができる。このコアは、１２８：１６及び６４：８ビットコードに対して正しい動作をおこなうことができる。１つの実施の形態によれば、デ・インターリーブ／デ・スイッツル回路には、４８ビートバースト内のどのビット位置にも自由にデータを動かすことができる２５６・２５６ビットマルチプレクサを含めることができる。ＥＣＣ生成回路には、３２・２５６ビット幅のＡＮＤ／ＸＯＲゲート（一般に、任意のＥＣＣチェックビットは、ワード中のデータビットのサブセットのＸＯＲ関数であることを想起せよ）を含めることができる。同じアルゴリズムを、現在入手可能なＣＰＵに基づき２５６を選定することにより、大きなサイズのＥＣＣコードにまで拡張することができる。
【００７４】
ＥＣＣ回路とデ・インターリーブ／デ・スイッツル回路の両方を同じ知得パターンを用いて初期化することができる。ＥＣＣ及びデータのインターリーブ／スイッツルの知得は、「１」をデータフィールドを通って「歩かせる」データパターンを走らせる必要がある。図１３は、１つの実施の形態による、ＥＣＣ及びインターリーブ／スイッツルの知得のステップについての例示的なフローチャートを示す。ステップ１３０１で、ホストは、すべてのゼロデータバーストパターンをテラＤＩＭＭのベースアドレスに０ｘ０のアドレスオフセットを持たせて書き込む。これにより、ＲｕｓｈはＥＣＣインバージョンがあったかどうかを判断することができる。次に、ホストは、最下位６４ビットワードのＬＳＢ（最下位ビット）を、ステップ１３０２で、「１」に設定することによりデータバーストパターンを修正する。ホストは、代替的に、ステップ１３０３で、アドレスオフセットを０ｘ４０だけ増加させる。０ｘ４０のオフセットは６４Ｂ境界に対応する。オフセットを増加させることは必要ではないが、デバッグのための追加情報を提供するためにオフセットの増加をおこなうことができる。アドレスオフセットを増加させることが好ましくない場合は、ホストはこれを飛ばしてステップ１３０４に進む。ステップ１３０４で、ホストは修正したバーストパターンをベースアドレス＋増加したオフセット（ステップ１３０３を飛ばさなかった場合）に書き込む。Ｒｕｓｈがデータバーストパターン及び書き込まれたＥＣＣをみたとき、Ｒｕｓｈは、ステップ１３０５で、設定したデータビット（例えば「１」）に対応するＥＣＣ生成ベクトルとしてＥＣＣデータを保存する。ＥＣＣ生成装置は、ＥＣＣ回路の３２ビットレジスタに保存される。また、Ｒｕｓｈは、期待されるデータビット位置（例えば、ホストにより見られる位置）を、例えば、２５６ビットのマルチプレクサを用いて、Ｒｕｓｈにより見られる実際のビット位置と関連付ける。ビット位置の関連付けは対応するマルチプレクサ制御レジスタに保存される。次に、ホストは、設定したビットが、最上位６４ビットワードのＭＳＢ（最上位ビット）かどうかを判断する。設定したビットが最上位６４ビットワードのＭＳＢでない場合、ホストは、ステップ１３０６で、データバーストパターンを１ビット（例えば、００１ｂから０１０ｂへ）移動させることにより修正する。ステップ１３０３から１３０６は、データバーストパターンが、ＥＣＣ及びデータのインターリーブ／スイッツルの知得が完了する、最上位６４ビットワードのＭＳＢに移動するまで繰り返される。当然のことながら、図１３は特定の順番でステップを記載しているが、ステップについてはいろいろな順序が可能でありここで開示した範囲内である。加えて、当然のことながら、所定のプロセッサ／マザーボードに対して、ＥＣＣの生成、データインターリーブ、及びビットスイッツルの情報は既知であり、従って、このような情報は、システムがリセットされた後ＲｕｓｈのＡＳＩＣにプログラムすることができる。例えば、このような情報は非揮発性記憶ユニット（例えば、ＤＩＭＭ上のシリアルＲＯＭ）から読み取ることができ、或いは、側波帯通信方法（例えば、ホストからＤＩＭＭのＳＭＢｕｓへ）、ＢＩＯＳ、ＤＢＬ、又はデバイスドライバによりプログラマブルレジスタにロードすることができる。このような場合、ＥＣＣ及びデータのインターリーブ／スイッツルの知得は行う必要がないこともある。
【００７５】
図１４は、１つの実施の形態による、ＥＣＣビットを計算するＥＣＣ回路の論理的な実施形態を示す。図示の回路は、ＥＣＣの３２ビットを持つ２５６ビットデータブロックとして設計されている。計算したＥＣＣは、「１」に設定したデータビットに対応するすべての生成ベクトルの線形重ね合わせ（例えば、ＸＯＲ）である。データ及びＥＣＣのレイアウトが同じである限り、ＥＣＣ回路は、インターリーブに関係なくＥＣＣを計算する。
（Ｒｕｓｈバッファ）
（ホスト読み込みバッファ）
ＤＤＲ３メモリシステムの必要な待機時間に合わせることが課題となるかもしれないことが分かっている。可能な限りの高速性を維持するために、１つの実施の形態において、ＤＤＲ３の物理レイヤに「近接した」位置に読み込みバッファのセットをＲｕｓｈが供給する。このバッファには、高速読み込み経路を有するホストを提供する３２の４ＫＢバッファ及び３２の１２８Ｂバッファを含めることができる。付加的な１２８Ｂにより、ホストのメタデータ機能をサポートするＳＳＤのフラッシュページに保存されたメタデータをホストが読み込むことができる。Ｒｕｓｈバッファへの内部的なアドレス指定を直接的に維持する１つの方法は、メインデータからメタデータを別のメモリインスタンスに保存することである。ホストが所定のバッファを一旦読み込むと、テラＤＩＭＭドライバは、そのバッファを解放する。これは、バッファを新しいデータで用いることができるという信号をＲｕｓｈに送るものである。続いて、Ｒｕｓｈは、一般的な読み／書きバッファからホスト読み込みバッファにデータを転送する。Ｒｕｓｈはホストリードバッファを割り当て、各コマンドに対するスタータスバイト中の最終的配置をドライバに伝える。ホストリードバッファは、ＤＩＭＭメモリマップ中の固定位置に配置される。汎用のリード／ライトバッファは一般に未処理コマンドの番号順に並べられる。
（ライトバッファエントリーポイント）
ライトバッファエントリーポイントは、ホストに、スクラバとホストメモリコントローラの読み込み／修正／書き込み動作の両方をホストにサポートさせることができるようにする。スクラバの動作は後述する。１つの実施の形態によれば、４ＫＢの８個のエントリーポイントがあり、１２８Ｂの８個のエントリーポイントがある。ホストはこれらのバッファに書き込みを行う。一旦バッファにデータ及びコマンドが書き込まれると、そのバッファは汎用リード／ライトバッファに転送される。
【００７６】
テラＤＩＭＭドライバは、一般にデータバッファ書き込みとコマンドバッファ書き込みとを交互配置する。さらに、コマンドバッファフォーマットには、どのバッファエントリーポイントがコマンドに関連付けられるのかを明示するフィールド及びバッファ中のデータと関連付けられたチェックサムフィールドが含まれる。これらの２つのフィールドにより、どのバッファエントリーポイントがコマンドに関連付けられるのかを、ハードウェアが決定できるようになり、及び、チェックサムにより、すべてのバッファに書き込みがなされているかどうかをＲｕｓｈが決定できるようになる。４ＫＢのデータに加えて、各バッファは、それと、各キャッシュラインが少なくとも１度書き込まれていたことを示す６４ビットベクトルとを関連付ける。このベクトルは、Ｒｕｓｈ内のハードウェアを介して保持される。これにより、ハードウェアはバッファが完了したかどうかを予想する、合理的な開始点を決定することができる。メモリコントローラの一部での読み込み・修正・書き込み動作により、所定のキャッシュラインの未知の大きさの部分に書き込みができるので、予想は所定の環境の下では正確でなくてもよい。従って、すべてのキャッシュラインがすでに書き込まれている必要があろう（しかしこれで十分ではない）。チェックサムでのコマンドプロセッサの照合に合格しなかった場合、バッファの部分を短時間で読み込み修正する。従って、コマンドプロセッサは、短時間の待機の後、チェックサムを再照合をコマンドプロセッサは試みることができる。
（汎用ライトバッファ）
汎用バッファの割り付けはテラＤＩＭＭドライバにより行われる。これにより、リード／ライトコマンドの割合をホストが動的に調整することができる。ＳＳＤの能力に応じて、コマンドが完了するまでライトバッファを解放することができない可能性がある。しかし、バッファを解放することができるとき信号を送ることのできるＳＳＤの性能向上をサポートするために、Ｒｕｓｈは、書き込みバッファがＳＳＤに伝達されたかどうかをドライバに通知することができる。
【００７７】
Ｒｕｓｈバッファの内部アドレス化を直接保持する１つの方法はメタデータをメインデータから別のメモリインスタンスに保存することである。ホストの視点から、メタデータバッファ空間はデータバッファとは別になっている。内部空間内でバッファは接近しているように見えるが、メモリバッファへの書き込みは同じクリティカルパスを持っていないため、内部ロジックは正しいアドレスを生成する。１つの実施の形態によれば、全部で２５６の４ＫＢの汎用リード／ライトバッファ及びメタデータ用の２５６の１２８Ｂバッファがある。
（コマンドバッファ）
一般に、Ｒｕｓｈ中のコマンドバッファに対して、設計上実際のコマンドバッファ毎に１つの複数のエントリーポイントがある。ホストコマンドバッファはメモリマップ中の固定位置に置かれる。１つの実施の形態によれば、このホストについて５１２個の６４Ｂ制御バッファがある。第１のコマンドバッファは、デバッグに用いることができ、ステータスバッファ中の関連付けされたリターンステータスを有することはできない。コマンドバッファを書き込むことにより、コマンドステータスが完了したときにコマンドバッファを実行させることができる。ホストは、一般に、コマンドバッファが完了するまで、コマンドバッファを再使用しない。ホストは、プール内にコマンドバッファを割りつける。ホストは、一般に、コマンドバッファを読み返すことができない。読み返す場合は、すべてのゼロバッファを送り返すことができる。これにより、メモリの相互作用により、間違ったコマンドを受け取ることがなくなる。
（Ｒｕｓｈスクラバブロック）
従来、多くのマイクロプロセッサは、メモリ中のすべてのバイトが周期的に読み込まれる低レベルのメモリスクラビングモジュールを導入している。これにより、単一のビットのアップセットが検出され修正不可能なエラーとなる前に修正することができる。モジュールをスクランブルすることは、メモリを線形的に（上に又は下へ）走査し各ラインを読み込む。モジュールは除外され、ビットエラーがあればデータを再書き込みする。スクラバは２回読み込みを行うことができ、ビットエラーが、確実にバスノイズの原因にならないようにする。
【００７８】
スクラバはメモリの特定の部分を避けるようにプログラムすることができないので、Ｒｕｓｈには、読み込むことのできないすべてのアドレスに応答することができるスクラバブロックが含まれる。スクラバブロックの動作では種々のファイルのマッピング順序及びサイズに関する情報を用いることができる。スクラバブロックにより返送されたデータパターンはすべてゼロでありヌルコマンドに対応する。
【００７９】
１つの実施の形態によれば、Ｒｕｓｈメモリマップ中の、読み込み可能な位置にマップしないＤＩＭＭメモリマップ内のスクラバ読み込み位置は、すべてゼロに初期化した特別なバッファ（例えば、ゼロバッファ）の内容を正しいＥＣＣに戻す。スクラバブロックはあらかじめ計算しておくことができ、ホスト中の小さな範囲のアドレスにＥＣＣを線形的な順序で保存することができる。これは、必ずしも、特定のランク内でマッピングホストアドレスがフレキシブルであるという理由で、テラＤＩＭＭアドレス（例えば、ＲＡＳ、ＣＡＳ、ＢＡ）が整列しているということを意味しない。書き込み可能なコマンドバッファに対応するＲｕｓｈメモリマップ内のスクラバ書き込み位置はまた、ゼロバッファの内容を返送することができる。書き込み可能なコマンドバッファに対応するＲｕｓｈメモリマップ内のスクラバ書き込み位置は、データバッファの更新した内容を返送することができる。読み込み可能なデータバッファに対応するＲｕｓｈメモリマップ内のスクラバ書き込み位置は、データバッファの内容を返送する。スクラバがＥＣＣのエラーを検出し、「訂正」をその位置に書き込んだ場合、その位置を読み込んだスクラバは「訂正された」データを返送する。
【００８０】
読み込みのために、スクラババッファ（ゼロバッファ）は、実際のメモリ位置にマップしていないあらゆるアドレスに、及びコマンドバッファのあらゆるリファレンスに用いることができる。ヌルコマンドをデータパターンとして返送することにより、コマンドを誤らせるあらゆるＤＤＲ３バスのノイズが、コマンドレジスタに書き込まれたヌルコマンドとなり、無視される。スクラバに関して他の２つの特別なバッファタイプがある。すなわち、書き込みデータバッファ及び書き込みメタデータバッファである。これらのバッファは、確実に実際のデータがスクラバで上書きされないようにするために書き込み、及び読み込みの両方が可能である。
【００８１】
観念的には、スクラバはＥＣＣエラーを検出しない。しかし、ＥＣＣエラーをもたらす２つの可能性がある。すなわち、Ｒｕｓｈの内部ＳＲＡＭ中の実際のビットエラー及びＤＤＲ３バス上のノイズである。書き込みバッファエントリーポイントに、訂正したデータをバッファに書き戻すスクラバを供給することは普通はない。一方、ホスト読み込みバッファに、訂正した値を書き戻した後データをスクラバがどれだけすばやく再び読み込むかについては判らないかもしれない。従って、Ｒｕｓｈが本当に実際のメモリを正しい値で更新したかどうかは明らかでないかもしれない。正しい値が書きこまれたことを確かめる１つの方法として、Ｒｕｓｈは書き込みできないメモリ位置への書き込みを留保する小さなキャッシュ（例えば、４項目）を組み込むことができる。このような書き込みが起こったとき、コマンドプロセッサは、その位置を無効にすることができるように、修正アドレスを含んだ割り込みを受け取ることができる。問題のバッファが取り消されたとき、ファームウェアは、バッファを「手動」で無効にする必要があるか、又は読み込みコマンドのデータがとにかくバッファに伝達されようといているので何もしなくても良いのかを判断することができる。
（読み込み／書き込みデータフロー）
（読み込みデータフロー）
図１５は、１つの実施の形態による、リードコマンドのコマンド及びデータのフローを示す論理ブロック図を示す。読み込み処理は、フロー１で、ホストでテラＤＩＭＭドライバが「リード」コマンドを特定のコマンドバッファエントリーポイントに書き込むときから始まる。このコマンドは、次に、コマンドは、フロー１ａで、ＥＣＣ／デ・インターリーブ／デ・スイッツル回路を流れる。バッファチェックロジックは、コマンド完了したかどうかまたいつ完了したのかを決定する。コマンドが完了している場合は、コマンドは、フロー２で、コマンドプロセッサへ伝達される。
【００８２】
コマンドを受け取ると、コマンドプロセッサは、ＤＭＡ記述子を生成し、フロー３で、この記述子をＰＣＩ−Ｅ／ＳＡＴＡブロックへ伝達する。ＰＣＩ−Ｅ／ＳＡＴＡブロックは、フロー４で、ＤＭＡ記述子を読み込む。ＰＣＩ−Ｅ／ＳＡＴＡブロックは、次に、フロー５で、ＳＳＤに読み込み要求を送る。この間、コマンドプロセッサはステータスバッファを更新し、フロー６で、コマンドが進行中であることをテラＤＩＭＭドライバに表示する。ドライバは、フロー６ａで、ステータスを読み込むことも読み込まないこともできる。
【００８３】
フロー７で、ＰＣＩ−Ｅ／ＳＡＴＡブロックは、ＳＳＤからデータ読み込み要求を受け取る。読み込みデータは、フロー７ａで、内部バッファに書きこまれる。ＳＳＤから戻ってきたステータスは、フロー８で、ＤＭＡ記述子内に保存される。また、この間、コマンドプロセッサは、ＰＣＩ−Ｅ／ＳＡＴＡブロックから割り込みを受ける。ホストリードバッファは有効になったとき、内部バッファのリードデータは、フロー９で、ホストリードバッファにコピーされる。データがコピーされた後、コマンドプロセッサは、フロー１０で、ステータスバッファを最終ステータスに更新する。これにより、リードデータはホストリードバッファから読み取り準備完了したことがドライバに示される。テラＤＩＭＭドライバは、ステータスバッファを読み込み、フロー１０ａで、最終状態を監視する。テラＤＩＭＭドライバは読み込んだ後、フロー１１で、ホストリードバッファからデータ読み込み要求を読み込むことができる。一旦テラＤＩＭＭドライバがホストリードバッファの読み込みを完了すると、テラＤＩＭＭドライバは、フロー１２で、再配置コマンドをコマンドバッファエントリーポイント書き込むことにより、ホストリードバッファの再配置を行うことができ、データリードシーケンスを完了することができる。
（書き込みデータフロー）
図１６は、１つの実施の形態による、ライトコマンドのコマンド及びデータのフローを示す論理ブロック図を示す。書き込み処理は、フロー１で、ホストでテラＤＩＭＭドライバがデータバッファを特定のライトエントリーポイントに書き込む時に始まる。テラＤＩＭＭドライバは、次いで、フロー２で、特定のコマンドバッファエントリーポイントに「ライト」コマンドを書き込む。コマンドは、フロー２ａで、ＥＣＣ／デ・インターリーブ／デ・スイッツル回路を流れる。バッファチェックロジックは、コマンドが完了したかどうか及びコマンドが完了したときを決定する。コマンドが完了している場合、バッファチェックロジックは、フロー３で、ライトエントリーポイントからライトデータを引き出し始め、チェックサムを確認し、データを内部バッファに収納する。計算したチェックサムが予期したチェックサムと合わない場合、タイムアウトした後フロー３を再開する。
【００８４】
一旦データバッファ及びコマンドバッファの準備が完了すると、コマンドプロセッサは、フロー４で、新しい作業があるとの情報を受ける。コマンドプロセッサは、ＤＭＡ記述子を生成し、フロー５で、この記述子をＰＣＩ−Ｅ／ＳＡＴＡブロックへ伝達する。ＰＣＩ−Ｅ／ＳＡＴＡブロックは、フロー６で、ＤＭＡ記述子を読み込む。ＰＣＩ−Ｅ／ＳＡＴＡブロックは、フロー７で、データバッファを読み込む。この間、コマンドプロセッサはステータスバッファを更新し、フロー８で、コマンドが進行中であることをテラＤＩＭＭドライバに表示する。ドライバは、フロー８ａで、ステータスを読み込むことも読み込まないこともできる。
【００８５】
フロー９で、ＰＣＩ−Ｅ／ＳＡＴＡブロックは、データバッファをＳＳＤに送り、ＳＳＤは、書き込み動作を始める。ＳＳＤから戻ってきたステータスは、フロー１０で、ＤＭＡ記述子の中に保存される。また、この間に、コマンドプロセッサはＰＣＩ−Ｅ／ＳＡＴＡブロックから割り込みを受け取る。コマンドプロセッサは、フロー１１で、最終ステータスにステータスバッファを更新する。これは、データバッファがＳＳＤに書き込まれていることをドライバに示す。テラＤＩＭＭドライバは、ステータスバッファを読み込み、フロー１１ａで、最終ステータスを監視し、処理を完了する。
【図１】
2014506698.tif 000010
【図２】
2014506698.tif 000011
【図３】
2014506698.tif 000012
【図４】
2014506698.tif 000013
【図５】
2014506698.tif 000014
【図６】
2014506698.tif 000015
【図７】
2014506698.tif 000016
【図８】
2014506698.tif 000017
【図９】
2014506698.tif 000018
【図１０】
2014506698.tif 000019
【図１１】
2014506698.tif 000020
【図１２ａ】
2014506698.tif 000021
【図１２ｂ】
2014506698.tif 000022
【図１３】
2014506698.tif 000023
【図１４】
2014506698.tif 000024
【図１５】
2014506698.tif 000025
【図１６】
2014506698.tif 000026
【国際調査報告】
2014506698.tif 000027
2014506698.tif 000028