(57)【要約】【課題】水平及び垂直のエラー訂正符号化（ＥＣＣ）システム及び方法を提供する。【解決手段】本発明にかかる方法は、システムメモリ（６０４）に記憶された、データワード（ＤＷ）のデータビットのエラーを検出して訂正する方法であって、各ＤＷは、複数のデータビットを含む。本発明にかかる方法は、各ＤＷの水平エラー訂正符号（ＨＥＣＣ）を生成することと、各ＨＥＣＣをシステムメモリに記憶することと、垂直エラー訂正符号（ＶＥＣＣ）を生成することであって、各ＶＥＣＣが、ＤＷのすべてからの特定のビットを使用して生成されることと、ＶＥＣＣをシステムメモリに記憶することと、ＶＥＣＣを使用して垂直スクラブを実行して、ＤＷのエラーを検出することと、ＨＥＣＣを使用して水平スクラブを実行して、ＤＷのエラーを検出して訂正することとを含む。【選択図】図５
2006318461.tif 000002
【特許請求の範囲】
【請求項１】
システムメモリ（６０４）に記憶された、データワード（ＤＷ）のデータビットのエラーを検出すると共に訂正する方法であって、
各データワード（ＤＷ）は、複数のデータビットを含み、
前記方法は、
各データワード（ＤＷ）の水平エラー訂正符号（ＨＥＣＣ）を生成することと、
各水平エラー訂正符号（ＨＥＣＣ）を前記システムメモリ（６０４）に記憶することと、
垂直エラー訂正符号（ＶＥＣＣ）を生成することであって、各垂直エラー訂正符号（ＶＥＣＣ）が、前記データワード（ＤＷ）のすべてからの特定のビットを使用して生成される、前記垂直エラー訂正符号（ＶＥＣＣ）を生成することと、
各垂直エラー訂正符号（ＶＥＣＣ）を前記システムメモリ（６０４）に記憶することと、
前記垂直エラー訂正符号（ＶＥＣＣ）を使用して垂直スクラブを実行することであって、それによって、前記データワード（ＤＷ）のエラーを検出する、前記垂直スクラブを実行することと、
前記水平エラー訂正符号（ＨＥＣＣ）を使用して水平スクラブを実行することであって、それによって、前記データワード（ＤＷ）のエラーを検出して訂正する、前記水平スクラブを実行することと
を含む方法。
【請求項２】
前記垂直スクラブを実行することは、訂正されるあらゆるエラーを検出すること
をさらに含み、
前記水平スクラブを実行することは、前記垂直スクラブを実行するオペレーションが、前記垂直スクラブを通じて訂正できないエラーを検出した場合にのみ行われる
請求項１に記載の方法。
【請求項３】
前記水平エラー訂正符号（ＨＥＣＣ）及び前記垂直エラー訂正符号（ＶＥＣＣ）のそれぞれは、ハミングＳＥＣＤＥＤ符号であるか、又は
前記水平エラー訂正符号（ＨＥＣＣ）のそれぞれは、ハミングＳＥＣＤＥＤ符号であり、前記垂直エラー訂正符号（ＶＥＣＣ）のそれぞれは、シングルパリティビットである
請求項１に記載の方法。
【請求項４】
前記垂直エラー訂正符号（ＶＥＣＣ）を定期的に生成することと、
前記垂直エラー訂正符号（ＶＥＣＣ）のいずれかが、前記データワード（ＤＷ）の前記関連付けられたデータビットの１つ又は複数のビットのエラーを示す場合には、
前記対応する垂直エラー訂正符号（ＶＥＣＣ）を使用して、前記関連付けられたデータビットのエラーを訂正することと、
前記垂直エラー訂正符号（ＶＥＣＣ）のいずれかが、前記関連付けられたデータビットにおいて、前記対応する垂直エラー訂正符号によって訂正できるものよりも多くのビットのエラーを示す場合には、
前記水平エラー訂正符号（ＨＥＣＣ）を使用して前記データワードのいずれかにおけるエラーを訂正することと
を含む請求項１に記載の方法。
【請求項５】
メモリモジュール（６１０）であって、
各メモリデバイス（６１２）が、行及び列に配列された複数のメモリロケーション（ＭＬ）にデータを記憶するように集合的に動作可能である複数のメモリデバイス（６１２）を含む、複数のメモリデバイス（６１２）と、
前記メモリデバイスに接続されたエラーロジック（６１４）であって、前記ロジックは、前記メモリモジュール（６１０）のメモリロケーション（ＭＬ）の各列の垂直エラー訂正符号（ＶＥＣＣ）を生成して、各垂直エラー訂正符号（ＶＥＣＣ）を前記メモリデバイス（６１２）に記憶するように動作可能であり、前記対応する垂直エラー訂正符号（ＶＥＣＣ）を使用して、メモリロケーション（ＭＬ）の前記列のいずれかにおけるエラーを検出し、場合によっては訂正も行うように動作可能である、前記エラーロジック（６１４）と
を備えるメモリモジュール。
【請求項６】
前記メモリモジュール（６１０）に接続されたメモリコントローラ（６０６）
をさらに備え、
前記メモリコントローラ（６０６）は、前記メモリモジュール（６１０）におけるメモリロケーション（ＭＬ）の各行の水平エラー訂正符号（ＨＥＣＣ）を生成して前記メモリモジュール（６１０）における前記メモリデバイス（６１２）に各水平エラー訂正符号（ＨＥＣＣ）を記憶するように動作可能であり、前記対応する水平エラー訂正符号（ＨＥＣＣ）を使用して、前記モジュール（６１０）におけるメモリロケーション（ＭＬ）の前記行のいずれかにおけるエラーを検出して訂正するように動作可能である
請求項５に記載のメモリモジュール。
【請求項７】
前記エラーロジック（６１４）は、前記各メモリモジュール（６１０）に配置される部分
を含み、
前記エラーロジック（６１４）の各部分は、前記ロジックが配置される前記関連付けられたメモリモジュール（６１０）の前記垂直エラー訂正符号（ＶＥＣＣ）を生成するように動作可能である
請求項６に記載のメモリモジュール。
【請求項８】
前記各モジュール（６１０）における前記エラーロジック（６１４）の前記部分は、前記対応する垂直エラー訂正符号（ＶＥＣＣ）を自動的に生成するように動作可能であり、
前記メモリコントローラ（６０６）は、所与のメモリモジュール（６１０）の前記エラーロジック（６１４）の前記部分が、前記対応する垂直エラー訂正符号（ＶＥＣＣ）を使用して訂正できないエラーをメモリロケーション（ＭＬ）の前記列のいずれかで検出した場合に、前記対応する水平エラー訂正符号（ＨＥＣＣ）を使用して、前記所与のメモリモジュール（６１０）におけるメモリロケーション（ＭＬ）の前記行のエラーを検出して訂正するようにさらに動作可能である
請求項７に記載のメモリモジュール。
【請求項９】
前記各メモリモジュール（６１０）における前記メモリデバイス（６１２）のそれぞれは、ＤＲＡＭ
を備え、
各モジュール（６１０）における前記エラーロジック（６１４）の前記部分は、前記モジュール（６１０）における前記ＤＲＡＭのリフレッシュサイクル中に、前記対応する垂直エラー訂正符号（ＶＥＣＣ）を自動的に生成する
請求項８に記載のメモリモジュール。
【請求項１０】
前記メモリコントローラ（６０６）を含むチップセット（６０８）と、
フロントサイドバス（６２０）を通じて前記チップセット（６０８）に接続されたプロセッサ（６１８）と、
前記チップセット（６０８）に接続された少なくとも１つの入力（６２６）、出力（６２４）、及びマスストレージデバイス（６２８）と
をさらに備える
請求項９に記載のメモリモジュール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、水平及び垂直のエラー訂正符号化（ＥＣＣ）システム及び方法に関する。
【背景技術】
【０００２】
コンピュータシステムが、現在使用中のプログラム及びデータを記憶するシステムメモリの量は、増加の一途をたどり、このようなシステムメモリを現代のコンピュータシステムは含んでいる。通常のパーソナルコンピュータシステムであっても、今や、数ギガバイトのダイナミックランダムアクセスメモリ（ＤＲＡＭ）を含む場合がある。このＤＲＡＭは、通常、システムメモリの最大の部分を形成する。ウェブサーバ等のサーバコンピュータシステムは、ウェブサイト又は企業データベースに関連付けられたプログラム及びデータを記憶するのに、数百ギガバイトのＤＲＡＭを含む場合があり、数テラバイトのＤＲＡＭを含む場合さえある。
【０００３】
システムメモリの記憶容量が大きくなるにつれて、メモリに記憶されたデータ及びプログラムにエラーが発生する可能性も高くなる。本解説では、「データ」という用語は、プログラム命令、並びに、コンピュータシステムによって現在実行されているプログラムにより生成されるデータ及び利用されるデータを含めて、システムメモリに記憶されたあらゆるタイプのデータを指すのに使用されることに留意されたい。１ギガバイトのＤＲＡＭを含むシステムメモリの場合、８０億（８，０００，０００，０００）個の個別のＤＲＡＭメモリセル又はロケーション（１バイトあたり８ビットのデータを仮定する）があり、各ロケーションは、通常、１ビットのデータを記憶する。このような多数のメモリロケーションを有すると、データビットのエラーは、電気的雑音、熱雑音、メモリロケーションに衝突する中性子及びアルファ粒子のような高エネルギー粒子等のさまざまな異なる理由で発生する可能性がある。たとえば、ＤＲＡＭメモリロケーションに衝突する高エネルギー粒子は、そのロケーションによって記憶された電荷量を変化させる場合があり、それによって、記憶された電荷に対応する記憶されたデータビットを論理１から論理０又はその逆に変化させる場合がある。
【０００４】
システムメモリに記憶されたデータのエラーの結果、プログラムはユーザにエラーのある結果を提供する可能性があったり、コンピュータシステムのクラッシュが引き起こされる可能性があったりする。その結果、データのエラーがコンピュータシステムのオペレーションに悪影響を与えることを防止するために、さまざまな手法がシステムメモリに利用されてきた。このような１つの手法は、「メモリミラーリング」として知られている。メモリミラーリングでは、データの複製コピーがシステムメモリに記憶される。この手法によれば、データの１次コピーにデータエラーが検出されると、データの複製コピーが利用される。この手法は、実際の必要なメモリ容量のサイズを２倍にすることが必要であることから、金銭面及び物理的空間面の双方において多大な費用を要する。
【０００５】
エラーのあるデータビットを実際に検出して訂正するために、従来のシステムメモリには、さまざまな手法が利用されている。最も一般的なものは、パリティビットを追加することを通じて、エラーのあるデータビットを検出することである。パリティビットは、当業者によって理解されるように、１バイトのデータに追加されて、そのバイト及びパリティビットの論理１の個数を偶数又は奇数のいずれかにするビットである。エラーのあるデータビットの検出及び訂正の双方を行うさらに進んだ手法は、エラー訂正符号（ＥＣＣ）の使用を通じたものである。最も一般的に利用されるＥＣＣは、シングルビットデータエラー及びダブルビットデータエラーを検出でき、且つ、シングルビットデータエラーを訂正できる符号である。このタイプのＥＣＣ符号は、シングルエラー訂正ダブルエラー検出（ＳＥＣＤＥＤ）符号として知られている。
【０００６】
図１は、従来のシステムメモリのメモリ図である。このメモリ図は、データワードＤＷ１〜ＤＷＮの形式のデータが、これらのワードのそれぞれについての水平エラー訂正符号ＨＥＣＣ１〜ＨＥＣＣＮと共に記憶されることを示している。このメモリ図は、通常のシステムメモリが、個々のメモリセル、すなわちメモリロケーションＭＬのアレイでデータを記憶するものとみなすことができることを示している。これらのメモリロケーションＭＬのいくつかは、メモリ図の左上コーナに示されている。アレイは、メモリロケーションＭＬのＮ×（Ｍ＋Ｋ）のアレイであり、したがって、Ｎ行のメモリロケーション及びＭ＋Ｋ列のメモリロケーションを含む。各ワードＤＷ１〜ＤＷＮはＭビット幅であり、各水平エラー訂正符号ＨＥＣＣ１〜ＨＥＣＣＮはＫビット幅である。以下の説明においてワードＤＷ１〜ＤＷＮ及び符号ＨＥＣＣ１〜ＨＥＣＣＮに言及する場合に、それらのワード又は符号のいずれか又はすべてを指すときは、それらのデータワード及び符号をそれぞれ単にＤＷ及びＨＥＣＣと呼ぶことにする。一方、特定の行の指定１〜Ｎは、ワード又は符号の特定の１つを指す場合にのみ含まれるものとする。同じことは、本出願の他の図面に関して以下で利用される他の参照番号及び参照文字にも当てはまる場合がある。
【０００７】
動作時に、システムメモリは、水平エラー訂正符号ＨＥＣＣを利用して、関連付けられたワードＤＷにおけるエラーのあるデータビットを検出して訂正する。対応するデータワードＤＷのデータビットから符号ＨＥＣＣを計算する特定の方法は、それらの符号を利用して関連付けられたワードにおけるエラーのあるデータビットを検出して訂正する方法と共に、当業者によって理解されよう。したがって、簡潔にするために、この特定の方法は、本明細書ではおおまかにしか説明しないことにする。簡潔に言えば、各データワードＤＷがシステムメモリに記憶される前に、或るアルゴリズムがデータワードＤＷのデータビットに適用され、それによって、対応するＨＥＣＣ符号が生成される。次に、データワードＤＷは、ＨＥＣＣ符号と共にシステムメモリに記憶される。当業者には十分理解されるように、データワードＤＷの形式のデータ及びＨＥＣＣ符号は、一時に１行しかシステムメモリへの書き込み及びシステムメモリからの読み出しを行うことができない。
【０００８】
各データワードＤＷにおけるエラーのあるデータビットを検出するために、データワードは、対応するＨＥＣＣ符号と共に、システムメモリから読み出され、同じアルゴリズムが、読み出されたデータワードのデータビットに再度適用されて、新たに計算されたＨＥＣＣ符号を生成する。この新たに計算されたＨＥＣＣ符号が、システムメモリから読み出されたＨＥＣＣ符号と等しくない場合、データワードＤＷのデータビットのエラーが発生していることになる。このアルゴリズムは、符号の値によって、データワードＤＷにおける一定の個数のエラーのあるデータビットの訂正が可能になるように、ＨＥＣＣ符号を生成する。メモリロケーションＭＬの行は一時に１行ずつ順次読み出され、読み出された各データワードＤＷについて、このプロセスが繰り返されて、そのデータワードにおけるエラーのあるデータビットが検出されて訂正される。
【０００９】
ワードＤＷのそれぞれが、システムメモリを含むコンピュータシステムの通常オペレーション中にアクセスされるごとに、システムメモリは、そのワードに対してこの検出及び訂正を実行する。これに加えて、システムメモリは、通常、本明細書では「水平スクラブ（horizontal scrubbing）」と呼ぶプロセスを実行する。水平スクラブは、システムメモリによって定期的に実行されるバックグラウンドプロセスである。このバックグラウンドプロセスにおいて、各データワードＤＷ及び関連付けられた符号ＨＥＣＣがアクセスされ、あらゆるエラーが検出されて訂正される。このような水平スクラブは、データワードＤＷがコンピュータシステムの通常オペレーション中にアクセスされるかどうかとは無関係に行われ、理想的には、ワードのいずれにおけるシングルビットエラーもダブルビットエラーにならないことを確保するのに十分な頻度で行われる。
【００１０】
通常、ＨＥＣＣ符号は、ハミングＳＥＣＤＥＤ符号であり、これは、各符号が、関連付けられたワードＤＷにおけるシングルビットエラーを検出して訂正でき、そのワードにおけるダブルビットエラーを検出できることを意味する。ハミングは、当業者によって理解されるように、特定のタイプの符号であり、これらのＳＥＣＤＥＤ符号が生成される方法を定義する。メモリ図から理解できるように、図示したシステムメモリの全記憶容量は、Ｎ×（Ｍ＋Ｋ）ビットのデータである。ＨＥＣＣ符号はこの全記憶容量のＮ×Ｋを占有することに留意されたい。ダブルビットエラーを訂正する能力等、より高度なエラー検出／訂正が望まれる場合、ＨＥＣＣ符号の幅Ｋはさらに大きくなる。このより大きな幅Ｋは、これらの符号が、望ましくないことに、システムメモリの全記憶容量のより大きな割合を占有することを意味する。その結果、システムメモリの全記憶容量を増加させなければならず、これは、望ましくないことに、システムメモリのサイズ及び費用を増加させる。
【００１１】
図２は、別のエラー検出／訂正手法を示すシステムメモリのメモリ図である。この別のエラー検出／訂正手法は、エラーの訂正及び検出に必要とされる、システムメモリの全記憶容量の割合を削減するものである。この手法によれば、システムメモリは、メモリロケーションの（Ｎ＋１）×（Ｍ＋１）アレイによって形成される。ここで、ＮはデータワードＤＷ１〜ＤＷＮを記憶する行数であり、Ｍは各データワードの幅である。各データワードＤＷ１〜ＤＷＮについて、単一の水平パリティビットＨＰ１〜ＨＰＮが記憶される。同様に、アレイのメモリロケーションの各列について、対応する単一の垂直パリティビットＶＰ１〜ＶＰＭが記憶される。その結果、パリティビットＨＰ及びＶＰを記憶するのに、システムメモリのＮ＋Ｍ個のメモリロケーションしか必要とされず、これによって、図１の手法と比較して、全記憶容量の割合ははるかくに小さくする。説明を簡略化するために、メモリロケーションの行は、水平方向であるように指定される一方、メモリロケーションの列は、垂直方向であるように指定されることに留意されたい。
【００１２】
動作時に、システムメモリは、水平パリティビットＨＰ及び垂直パリティビットＶＰを利用して、シングルビットエラーを検出して訂正する。たとえば、水平パリティビットＨＰのいずれかが、対応するデータワードＤＷにおけるエラーのあるビットを示す場合、システムメモリは、垂直パリティビットＶＰをチェックする。垂直パリティビットＶＰの１つは、その列のデータワードＤＷの対応するビットのエラーを示す。エラーを示す垂直パリティビットＶＰは、対応する水平パリティビットＨＰによってこのようなエラーのあるビットを有すると判断されたデータワードＤＷにおけるエラーのあるビットの具体的なロケーションを信号で伝える。たとえば、図２は、データワードＤＷ４に含まれるエラーのあるビットＥを示している。この状況では、水平パリティビットＨＰ４が、データワードＤＷ４のビットの１つにおけるエラーを示し、垂直パリティビットＶＰ３も、同様に、その列のビットの１つにおけるエラーを示す。パリティビットＨＰ４及びＶＰ３から、システムメモリは、データワードＤＷ４の左から３番目のビットにエラーがあると判断し、次いで、このビットを訂正する。
【００１３】
図２に示す手法は、エラーの検出及び訂正に利用されるパリティビットＨＰ及びＶＰを記憶するのに必要とされるメモリロケーションが少なくなるという観点からは効率的であるが、この手法は、非常に低速であり、したがって、仮に商業的に利用されたとしても、広く利用されていない。この手法が低速である理由は、アレイの各メモリロケーションに２回アクセスしなければならないからである。また、この手法は、シングルビットエラーの検出及び訂正に限られることにも留意されたい。
【００１４】
別のエラーチェック／訂正手法は、メモリロケーション間でデータのビットを分散することを含み、この分散が、システムメモリの１つの構成要素の障害を検出して訂正できるように行われるものである。この手法は、一般的には「拡張ＥＣＣ（enhanced ECC）」と呼ばれる場合があり、メモリ業界の異なる会社によって異なる名前を使用して参照される。たとえば、このＥＣＣ手法を参照するのに、インターナショナルビジネスマシン（International Business Machine）社は商標「Ｃｈｉｐｋｉｌｌ」を使用し、ヒューレットパッカード（Hewlett-Packard）社は商標「Ｃｈｉｐ  Ｓｐａｒｅ」を使用する。ＤＲＡＭシステムメモリは、一般に、複数のデュアルインラインメモリモジュール（ＤＩＭＭ）によって形成され、エンハンストＥＣＣ手法を用いて、データのビットがＤＩＭＭ間に分散される。このように、複数のＤＩＭＭは、当該ＤＩＭＭのいずれか１つの障害を検出できて、且つ、障害を受けたＤＩＭＭからのデータワードのビットを訂正できるようにされており、コンピュータシステムは、そのような複数のＤＩＭＭからのビットを含むデータワードにアクセスすることができる。
【発明の開示】
【発明が解決しようとする課題】
【００１５】
システムメモリのマルチビットエラーの検出及び訂正に必要なエラー訂正符号を記憶するためのこのようなメモリの部分を過度に増加させることなく、このようなエラーを検出して訂正する改良されたシステム及び方法が必要とされている。
【課題を解決するための手段】
【００１６】
本発明の一態様によれば、本方法及びシステムはシステムメモリに記憶されたデータワードのデータビットのエラーを検出して訂正する。各データワードは、複数のデータビットを含み、方法は、各データワードの水平エラー訂正符号を生成すること、及び各水平エラー訂正符号をシステムメモリに記憶することを含む。垂直エラー訂正符号が生成され、各垂直エラー訂正符号が、データワードのすべてからの特定のビットを使用して生成される。各垂直エラー訂正符号がシステムメモリに記憶される。垂直エラー訂正符号を使用して垂直スクラブが実行され、それによって、データワードのエラーが検出され、水平エラー訂正符号を使用して水平スクラブが実行され、それによって、データワードのエラーが検出され訂正される。
【００１７】
また、垂直スクラブ（vertical scrubbing）も、検出されたエラーを訂正することができる。水平エラー訂正符号及び垂直エラー訂正符号は、たとえば、ＳＥＣＤＥＤ符号とすることができ、これによって、水平スクラブ及び垂直スクラブの期間中に検出及び訂正が可能になる。或いは、水平エラー訂正符号をＳＥＣＤＥＤ符号とすることができ、垂直エラー訂正符号をパリティビットとすることもでき、これは、垂直スクラブがエラーを検出し、水平スクラブがこのような検出されたエラーを訂正することを意味する。垂直スクラブは、システムメモリのメモリモジュールに含まれる適切なハードウェアを通じて自動的に行うこともできるし、システムメモリのメモリコントローラによって自動的に行うこともできる。
【発明を実施するための最良の形態】
【００１８】
図３は、本発明の一実施の形態による、システムメモリにおいて関連付けられたデータワードＤＷ１〜ＤＷＮのマルチビットエラーを検出して訂正することに使用できる水平エラー訂正符号ＨＥＣＣ１〜ＨＥＣＣＮ及び垂直エラー訂正符号ＶＥＣＣ１〜ＶＥＣＣＭを示すメモリ図である。これらの水平エラー訂正符号ＨＥＣＣ及び垂直エラー訂正符号ＶＥＣＣを組み合わせて利用することにより、ハミングＳＥＣＤＥＤ符号等、より少ないビット数のみで個々に訂正を行うことができる従来の符号をＨＥＣＣ符号及びＶＥＣＣ符号に使用して、マルチビットエラーを検出して訂正することができる。その上、以下でより詳細に説明するように、ＶＥＣＣ符号を利用してエラーの検出及び訂正を行う垂直スクラブハードウェア回路機構と、ＨＥＣＣ符号を利用するソフトウェアとを実施することにより、このようなエラーを検出して訂正する速度を増大させることができる。同様に以下でより詳細に説明するように、一実施の形態では、ＶＥＣＣ符号を利用する垂直スクラブハードウェア回路機構は、システムメモリの「垂直スクラブ」を自動的に実行して、シングルビットエラーを検出して訂正し、ＨＥＣＣ符号は、その後、この垂直スクラブプロセスを通じて誤って訂正されたあらゆるマルチビットエラーを訂正することに利用される。
【００１９】
以下の説明では、本発明の十分な理解を提供するために、一定の詳細が、本発明の説明される実施の形態と共に述べられる。しかしながら、当業者には、本発明がこれらの特定の詳細がなくても実施できることが十分理解されよう。さらに、当業者には、以下で説明する実施の形態の例が本発明の範囲を限定しないことも十分理解され、また、開示された実施の形態及びこのような実施の形態の構成要素のさまざまな変形物、均等物、及び組み合わせが本発明の範囲内にあることも理解されよう。以下では、明示的には詳細に説明されていないが、説明される各実施の形態のいずれについても、そのすべての構成要素よりも少ない構成要素を含む実施の形態も、本発明の範囲内にある場合がある。最後に、本発明を不必要に分かりにくくすることを回避するために、以下では、既知の構成要素及び／又はプロセスのオペレーションは、詳細に図示も説明もされていない。
【００２０】
図３は、メモリセル、すなわちメモリロケーションＭＬのアレイを示しており、ここでも、いくつかのメモリロケーションは、アレイの左上コーナに示されている。このアレイは、Ｎ＋Ｌ行のメモリロケーションＭＬ及びＭ＋Ｋ列のメモリロケーションを含み、したがって、（Ｎ＋Ｌ）×（Ｍ＋Ｋ）アレイである。アレイの各行には、データワードＤＷ１〜ＤＷＮが記憶される。各データワードは、Ｍビット幅であり、関連付けられた水平エラー訂正コードＨＥＣＣ１〜ＨＥＣＣＮを有する。これらの水平エラー訂正コードは、Ｋビット幅であり、同じ行のメモリロケーションＭＬに記憶される。アレイの追加されたＬ行×Ｍ列の部分は、メモリロケーションＭＬの各列に垂直エラー訂正符号ＶＥＣＣ１〜ＶＥＣＣＭを記憶する。各ＶＥＣＣ符号は、データワードＤＷのデータビットの特定の列に関連付けられる。たとえば、垂直エラー訂正符号ＶＥＣＣ２は、各データワードＤＷ１〜ＤＷＮのデータビットの第２列から計算される。この各データワードＤＷ１〜ＤＷＮのデータビットの第２列は、ＤＷ１＜２＞〜ＤＷＮ＜Ｎ＞で指定することができる。
【００２１】
本発明の一実施の形態では、水平エラー訂正符号ＨＥＣＣ及び垂直エラー訂正符号ＶＥＣＣの双方は、ハミングＳＥＣＤＥＤ符号である。したがって、各ＨＥＣＣ符号は、対応するデータワードＤＷのシングルビットエラーを訂正することができ、そのデータワードのダブルビットエラーを検出することができる。同様に、各ＶＥＣＣコードも、データワードＤＷのデータビットの対応する列におけるシングルビットエラーを訂正することができ、データビットのこの列におけるダブルビットエラーを検出することができる。本発明の他の実施の形態では、より多くのエラーのあるデータビットを検出して訂正できる符号を含めて、他のタイプのエラー訂正符号を水平エラー訂正符号ＨＥＣＣ及び垂直エラー訂正符号ＶＥＣＣに利用できることに留意されたい。また、以下でより詳細に解説するように、本発明の一実施の形態では、垂直エラー訂正符号ＶＥＣＣのそれぞれは、シングルパリティビットである。
【００２２】
次に、データワードＤＷにおけるエラーのあるデータビットを検出して訂正することに、図３の水平エラー訂正符号ＨＥＣＣ及び垂直エラー訂正符号ＶＥＣＣを利用するプロセスを、図４のフローチャートを参照してより詳細に説明することにする。図４は、本発明の一実施の形態による、水平エラー訂正符号ＨＥＣＣ及び垂直エラー訂正符号ＶＥＣＣを利用して、データワードＤＷのマルチビットエラーを検出して訂正するエラー訂正プロセス４００を示している。これは、たとえＨＥＣＣ符号及びＶＥＣＣ符号のそれぞれが、説明するサンプルの実施の形態においてハミングＳＥＣＤＥＤ符号であっても当てはまる。
【００２３】
最初に、データワードＤＷ１〜ＤＷＮのすべてが、システムメモリの各行に書き込まれて記憶されており、このプロセスの一部として、各データワードの水平エラー訂正符号ＨＥＣＣ１〜ＨＥＣＣＮが、計算されて、データワードと共に記憶されているものと仮定する。また、データワードＤＷのそれぞれが、システムメモリの対応する行に書き込まれていた時に、そのデータワードのビットは、垂直エラー訂正符号ＶＥＣＣ１〜ＶＥＣＣＭを計算することにも利用される。計算された各垂直エラー訂正符号ＶＥＣＣ１〜ＶＥＣＣＭは、図３に示すように、システムメモリのメモリロケーションＭＬの列に記憶される。
【００２４】
プロセス４００は、ステップ４０２で開始し、直ちにステップ４０４に進む。ステップ４０４では、垂直エラー訂正符号ＶＥＣＣが利用されて、データワードＤＷのデータビットの対応する列におけるシングルビットエラー及びダブルビットエラーが検出される。ステップ４０４は、システムメモリに記憶されたＮ個のデータワードＤＷのそれぞれにアクセスすることを含む。各データワードＤＷがアクセスされた時、そのデータワードの各ビットは、システムメモリの回路部（図示せず）に記憶されるか又は別の方法で適用され、Ｎ個のすべてのデータワードがアクセスされた後に、垂直エラー訂正符号ＶＥＣＣ１〜ＶＥＣＣＭのそれぞれについての新たな値を計算できるようにされる。垂直エラー訂正符号ＶＥＣＣ１〜ＶＥＣＣＭの以前に計算された値もアクセスされ、各値は、その符号について新たに計算された値と比較される（たとえば、ＶＥＣＣ１の新たに計算された値は、メモリに記憶されたＶＥＣＣ１の前の値と比較される）。この比較から、プロセスは、ＶＥＣＣ符号に関連付けられたデータビットの列のいずれかにシングルエラー又はダブルエラーが存在するかどうかを判断する。ＶＥＣＣ符号を利用して、データワードＤＷのデータビットの対応する列におけるシングビットエラー及びダブルビットエラーを検出するプロセスは、以下の説明では「垂直スクラブ」と呼ばれる場合がある。
【００２５】
この時点で、プロセスは、ステップ４０６に進み、シングルビットエラー又はダブルビットエラーがステップ４０４で検出されたかどうかを判断する。この判断が否定的である場合、プロセスは、直ちにステップ４０８に進んで終了する。データワードＤＷにおけるエラーにあるビットはＶＥＣＣ符号を使用して検出されなかったので、それ以上の動作は必要とされない。
【００２６】
ステップ４０６の判断が肯定的である場合、これは、ＶＥＣＣ符号の少なくとも１つに関連付けられたデータビットの列について、少なくとも１つのシングルビットエラー及びダブルビットエラーが検出されたことを意味するので、プロセスはステップ４１０に進む。ステップ４１０では、プロセスは、シングルエラービットのみが、ＶＥＣＣ符号を介してデータワードＤＷに検出されたかどうかを判断する。これが真である場合、プロセスは、ステップ４１２に進み、適切なＶＥＣＣ符号を使用して、検出されたすべてのシングルビットエラーを訂正する。たとえば、図３を参照して、垂直エラー訂正符号ＶＥＣＣ３に関連付けられたデータビットの第３列には、このメモリロケーションの円で囲まれた文字「Ｅ」によって示されるように、エラーのある単一のデータビットが存在する。これが、検出された唯一のシングルビットエラーであると仮定すると、ステップ４１２では、プロセスは、ＶＥＣＣ３符号について新たに計算された値及び前に記憶された値を利用して、このエラーのあるデータビットを訂正する。
【００２７】
すべてのシングルビットエラーがステップ４１２で訂正された後、プロセスは、ステップ４０８に進み、終了する。ＶＥＣＣ符号は、この例ではＳＥＣＤＥＤハミング符号であり、データワードＤＷのデータビットの関連付けられた列におけるすべてのシングルビットエラーを検出して訂正するのに使用されたので、この状況では、このＨＥＣＣ符号を利用する必要はない。複数のＶＥＣＣ符号がエラーを示し、したがって、所与のデータワードＤＷ内の複数のビットが、実際には、垂直エラー訂正符号を介して訂正できることに留意されたい。たとえば、データワードＤＷ３は、円内の文字「Ｅ」によって図３に示されるようなエラーのあるデータビットＤＷ３＜２＞及びＤＷ３＜４＞を含むことができる。この状況では、データワードＤＷ３は、２つのエラーのあるビットを含むが、これらのエラーのそれぞれは、垂直の面ではシングルビットエラーにすぎず、垂直エラー訂正符号ＶＥＣＣ２及びＶＥＣＣ４を使用して訂正することができる。
【００２８】
ステップ４１０に戻って、このステップにおける判断が否定的である場合、これは、少なくとも１つのダブルビットエラーが、ＶＥＣＣ符号を使用してステップ４０４で検出されたことを意味する。たとえば、図３には、垂直エラー訂正符号ＶＥＣＣ４に関連付けられたデータビットの列について、ダブルビットエラーが示されている。これらのエラーは、ＶＥＣＣ４符号に関連付けられたデータビットの列におけるビットＤＷ１＜４＞及びＤＷ３＜４＞に対応する。少なくとも１つのダブルビットエラーが存在するとステップ４１０が判断すると、プロセスはステップ４１４に進み、水平エラー訂正符号ＨＥＣＣを利用して、データワードを「スクラブ」し、すべてのビットエラーを訂正する。このプロセスは、ＶＥＣＣ符号について前述したものと類似する。より具体的には、各データワードＤＷが、関連付けられた水平エラー訂正符号ＨＥＣＣと共にアクセスされる。次に、アクセスされたデータワードＤＷのビットが、関連付けられた水平エラー訂正符号ＨＥＣＣの新たな値を計算するのに使用される。
【００２９】
次に、メモリから読み出された、水平エラー訂正符号ＨＥＣＣの前に計算された値が、そのコードについて新しく計算された値と比較される（たとえば、ＨＥＣＣ２の新たに計算された値が、メモリから読み出されたＨＥＣＣ２の前の値と比較される）。この比較から、プロセスは、データワードＤＷのそれぞれにおけるすべてのシングルビットエラーを検出して訂正することを決定する。この説明は、データワードＤＷのいずれにもダブルビットエラーが存在しないものと仮定していることに留意されたい。ダブルビットエラーは、図３に示すように、データワードＤＷ３のデータビットＤＷ３＜２＞及びＤＷ３＜４＞について発生し得る。ステップ４１４ですべてのデータワードＤＷ１〜ＤＷＮをスクラブした後、プロセスはステップ４０８に進んで終了する。
【００３０】
データワードＤＷの１つにおけるダブルビットエラーの可能性は、通常、比較的低い。したがって、この状況は、エラー訂正プロセス４００の有用性に重大な制限を与えるものではない。このような発生の可能性をさらに削減するために、ＨＥＣＣ符号を使用して水平スクラブを実行するより前に、ＶＥＣＣ符号を使用して検出されたすべてのシングルビットエラーがこれらの符号を使用して訂正されるように、エラー訂正プロセス４００を変更することができる。この実施の形態では、プロセスは、ＶＥＣＣ符号を使用して検出されたすべてのシングルビットエラーを訂正する。これが行われ、且つ、ＶＥＣＣ符号の少なくとも１つがダブルビットエラーを検出した後にのみ、プロセスは、ＨＥＣＣ符号を使用して水平スクラブを実行する。図３を参照して、この実施の形態は、データワードＤＷ３のダブルビットエラーＤＷ３＜２＞及びＤＷ３＜４＞を除去する。これが適正である理由は、ＤＷ３＜２＞のシングルビットエラーが、関連付けられた垂直エラー訂正符号ＶＥＣＣ２によって訂正され、その結果、シングビットエラーＤＷ３＜４＞のみが水平スクラブを行っている時にデータワードＤＷ３に存在するからである。水平スクラブ中に、ＨＥＣＣ３符号は、ＤＷ３＜４＞のこのシングルビットエラーを訂正するのに使用される。水平スクラブ中にデータワードＤＷのいずれかにおいてダブルビットエラーが検出された場合、このようなエラーは、通常、システムメモリがその一部となっているコンピュータシステムのオペレーティングシステムに報告される。
【００３１】
符号ＨＥＣＣ及びＶＥＣＣを利用するエラー訂正プロセスの他の実施の形態も可能であり、このようなプロセスは、当該プロセスが利用されているシステムメモリのアプリケーションに依存して変化する場合がある。また、ＨＥＣＣ符号及びＶＥＣＣ符号に利用される符号のタイプも、同様に、前述したようにアプリケーションに応じて変化する場合があり、各符号のタイプは、実行される特定のプロセスにも影響を与える場合がある。たとえば、図５は、本発明の別の実施の形態によるエラー訂正プロセス５００を示すフローチャートである。図５のプロセスでは、この場合も、水平エラー訂正符号ＨＥＣＣが、ハミングＳＥＣＤＥＤ符号であると仮定される一方、垂直エラー訂正符号ＶＥＣＣのそれぞれは、シングルパリティビットである。
【００３２】
エラー訂正プロセス５００は、ステップ５０２で開始し、直ちにステップ５０４に進む。ステップ５０４では、プロセスは、垂直エラー訂正符号ＶＥＣＣを利用して、データワードＤＷのビットの関連付けられた列におけるシングルビットエラーを検出する。この実施の形態では、ＶＥＣＣ符号のそれぞれがシングルパリティビットであるので、ＶＥＣＣ符号を使用してシングルビットエラーの検出のみを行うことができ、エラーの訂正を行うことはできない。シングルパリティビットＶＥＣＣ符号を使用してシングルビットエラーを検出する際に、システムメモリに記憶されたＮ個のデータワードＤＷのそれぞれが、アクセスされ、そのデータワードの各ビットは、システムメモリの回路部（図示せず）に記憶されるか又は別の方法で適用され、Ｎ個のすべてのデータワードがアクセスされた後に、パリティビットＶＥＣＣ１〜ＶＥＣＣＭ符号のそれぞれについての新たな値を計算できるようにされる。パリティビットＶＥＣＣ１〜ＶＥＣＣＭについて前に計算された値もアクセスされ、前に計算された各パリティビットが新たに計算されたパリティビットと比較される（たとえば、新たに計算されたパリティビットＶＥＣＣ１は、メモリに記憶された、前に計算されたパリティビットＶＥＣＣ１と比較される）。この比較から、プロセスは、ＶＥＣＣ符号に関連付けられたデータビットの列のいずれかにシングビットエラーが存在するかどうかを判断する。
【００３３】
ステップ５０４で、すべてのパリティビットＶＥＣＣが利用されて、シングルビットエラーがデータビットの対応する列に存在するかどうかが判断された後、プロセスは、ステップ５０６に進み、シングルビットエラーが検出されたかどうかを判断する。ステップ５０６の判断が否定的である場合、シングルビットエラーは検出されておらず、したがって、データワードＤＷ１〜ＤＷＮのいずれにもデータビットにおそらくエラーは存在しないので、プロセスはステップ５０８に進んで終了する。ステップ５０６の判断が肯定的である場合、少なくとも１つのシングルビットエラーが、データワードＤＷの少なくとも１つに存在し、プロセスはステップ５１０に進む。ステップ５１０では、プロセスは、前述したように、水平エラー訂正符号ＨＥＣＣを使用して、データワードＤＷの水平スクラブを実行する。データワードＤＷのシングルビットエラーは、この水平スクラブ中に、ＨＥＣＣ符号を使用して検出され、訂正される。この実施の形態では、データワードＤＷの１つ又は複数は、訂正できないマルチビットエラーを含む可能性があることに留意されたい。この例示の実施の形態では、ＨＥＣＣ符号はハミングＳＥＣＤＥＤ符号であるので、水平スクラブ中に、データワードＤＷのいずれかにダブルビットエラーがあれば、そのダブルビットエラーは検出することはできるが、訂正することはできない。このようなダブルビットエラーが検出されれば、このダブルビットエラーは、ここでも、通常、システムメモリがその一部となっているコンピュータシステムのオペレーティングシステムに報告される。
【００３４】
別の実施の形態による別のエラー訂正プロセスでは、図４を参照して図示及び説明したような、検出及び訂正を行うためのＶＥＣＣ符号及びＨＥＣＣ符号の利用順序が逆になる。したがって、ＨＥＣＣ符号が最初に使用されて、データワードＤＷのエラーが検出され訂正され、次いで、ダブルビットエラーが検出されると、ＶＥＣＣ符号が利用されて、このようなエラーが訂正される。
【００３５】
図６は、コンピュータシステム６００の機能ブロック図である。このコンピュータシステム６００は、メモリサブシステム６０４と、チップセット６０８の一部であるメモリコントローラ６０６とによって形成されたシステムメモリ６０２を含む。メモリサブシステム６０４は、複数のデュアルインラインメモリモジュール（ＤＩＭＭ）６１０ａ〜６１０ｎを含む。各ＤＩＭＭは、複数のＤＲＡＭメモリデバイス６１２を含む。ＤＲＡＭメモリデバイス６１２の１つは、ＤＩＭＭ６１０ａに示されている。さらに、各ＤＩＭＭ６１０は、ＤＩＭＭ６１０ｂについてのみ示されているようなエラーチェック／訂正（ＥＣＣ）ロジック６１４を含む。各ＤＩＭＭ６１０のＥＣＣロジック６１４は、対応するＤＲＡＭメモリデバイス６１２に記憶されたデータワードの垂直スクラブを実行するハードウェアロジック回路部である。この垂直スクラブの実行は、図４を参照して前述したようにＶＥＣＣ符号を使用して行われるか、又は、図５を参照して説明したようにＶＥＣＣ符号用のパリティビットを使用して行われる。
【００３６】
ＤＩＭＭ６１０のそれぞれは、アドレスバス、データバス、及び制御バスを含む。これらのバスは、図６ではメモリバス６１６として集合的に示されている。各ＤＩＭＭのＤＲＡＭメモリデバイス６１２のそれぞれは、メモリバス６１６に接続されている。ＤＩＭＭ６１０及びメモリデバイス６１２のメモリバス６１６とのこの接続の詳細は、当業者には十分理解されるように、各メモリデバイスのデータバスの幅、各ＤＩＭＭのメモリデバイスのランク数等のさまざまな異なる要因に応じて変化する。このような詳細は、図６に示す本発明の実施の形態の理解に不可欠なものではなく、したがって、簡略にするために、本明細書ではこれ以上解説しないことにする。
【００３７】
チップセット６０８は、メモリコントローラ６０６を含む。このメモリコントローラ６０６は、メモリバス６１６を通じてＤＩＭＭ６１０に接続されている。メモリコントローラ６０６は、メモリバス６１６を介してアドレス信号、データ信号、及び制御信号の形でＤＩＭＭ６１０にコマンドを適用し、ＤＩＭＭからデータを読み出し、ＤＩＭＭにデータを書き込む。メモリコントローラ６０６は、システムバス６２０を介してコントローラに適用されたプロセッサ６１８からの要求に応答して、これらのコマンドをＤＩＭＭ６１０に供給する。メモリコントローラ６０６は、図４及び図５を参照して前述したように、これらのＤＩＭＭに記憶されたＨＥＣＣ符号を使用して、ＤＩＭＭ６１０に記憶されたデータワードの水平スクラブを実行するＥＣＣロジック６２２を含む。これに加えて、ＥＣＣロジック６２２は、メモリサブシステム６０４から読み出されるデータワードに対して、ＨＥＣＣ符号を使用してエラーの検出及び訂正を実行する。また、コントローラ６０６は、メモリサブシステム６０４に書き込まれるデータワードのＨＥＣＣ符号を生成し、これらの符号をデータワードと共にＤＩＭＭ６１０に記憶する。
【００３８】
さらに、コンピュータシステム６００は、チップセット６０８を通じてプロセッサ６１８に接続された１つ又は複数の出力デバイス６２４も含む。通常の出力デバイス６２４には、プリンタ及びビデオ端子が含まれる。また、キーボードやマウス等の１つ又は複数の入力デバイス６２６も、チップセット６０８を通じてプロセッサ６１８に接続される。マスストレージデバイス６２８も、通常、チップセット６０８を通じてプロセッサ６１８に接続され、外部記憶媒体（図示せず）からの大量のデータの記憶及び取り出しを行う。通常のマスストレージデバイス６２８の例には、ハードディスク及びフロッピー（登録商標）ディスク、テープカセット、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）及び書き換え可能コンパクトディスクメモリ（ＣＤ−ＲＷ）、並びにデジタルビデオディスク（ＤＶＤ）が含まれる。また、チップセット６０８は、当業者には十分理解されるように、プロセッサとデバイス６２４〜６２８との間のすべての通信及び制御も実行し、他のさまざまな機能も実行する。他のさまざまな機能は、出力デバイス６２４の１つに対応するビデオモニタを駆動するビデオドライバ（図示せず）にビデオデータを供給することや、データをマスストレージデバイス６２８からメモリサブシステム６０４へ転送すること等である。
【００３９】
コンピュータシステム６００の動作時に、プロセッサ６１８は、プログラム（図示せず）を実行して所望の機能を遂行する。プロセッサ６１８が、メモリサブシステム６０４に記憶されたプログラミング命令又はデータを必要とする場合、プロセッサは、システムバス６２０を介して適切なコマンドをメモリコントローラ６０６に適用する。このコマンドに応答して、メモリコントローラ６０６は、メモリバス６１６を介して、対応するコマンドをＤＩＭＭ６１０に適用し、要求されたデータにアクセスする。メモリコントローラ６０６からのこのコマンドに応答して、ＤＩＭＭ６１０は、メモリバス６１６を介して、対応するデータワードにアクセスし、要求されたデータワードを対応するＨＥＣＣ符号と共にメモリコントローラへ返す。次に、メモリコントローラ６０６は、各ＨＥＣＣ符号を利用して、対応するデータワード及びプロセッサ６１８へのシステムバス６２０にわたるデータワードにおけるあらゆるエラーのあるデータビットを検出して訂正する。メモリコントローラ６０６は、データワードにおいて訂正できないエラーを検出した場合、通常、このようなエラーを、プロセッサ６１８で実行されているオペレーティングシステム（図示せず）に報告する。オペレーティングシステムは、出力デバイス６２４の１つを介したユーザへの通知や、プロセッサ６１８のすべてのプログラムの実行の終了等、このようなエラーに応答して適切な動作を行う。
【００４０】
メモリサブシステム６０４にデータを書き込むために、プロセッサ６１８は、適切なコマンドを、記憶されるデータワードと共に、システムバス６２０を介してメモリコントローラ６０６に適用する。このコマンドに応答して、メモリコントローラ６０６は、そのデータワードのＨＥＣＣ符号を生成し、メモリバス６１６を介して、対応するコマンドを、データワード及びＨＥＣＣ符号と共にＤＩＭＭ６１０に適用する。メモリコントローラ６０６からのこのコマンドに応答して、ＤＩＭＭ６１０は、適切なメモリロケーションにアクセスし、データワードをＨＥＣＣ符号と共にこれらのメモリロケーションに記憶する。
【００４１】
コンピュータシステム６００の動作中、ＤＩＭＭ６１０のそれぞれに含まれるＥＣＣロジック６１４は、図４又は図５を参照して前述したように動作する。以下の説明では、ＥＣＣロジック６１４は、図４の実施の形態を参照して説明したように、垂直スクラブを実行するよう動作すると仮定する。したがって、各ＤＩＭＭ６１０のＥＣＣロジック６１４は、垂直スクラブを実行し、シングルビットエラーを検出して訂正し、ダブルビットエラーを検出する。ダブルビットエラーが検出されると、ＥＣＣロジック６１４は、メモリバス６１６を介してメモリコントローラ６０６に通知する。この通知に応答して、メモリコントローラ６０６のＥＣＣロジック６２２は、適切なＤＩＭＭ６１０に対して水平スクラブを実行し、エラーを検出して訂正する。また、ＥＣＣロジック６２２は、従来のシステムメモリで行われるように、ＤＩＭＭに記憶されたＨＥＣＣ符号を使用してバックグラウンド水平スクラブも定期的に実行し、ＤＩＭＭに記憶されたデータワードのエラーを検出して訂正することができることにも留意されたい。
【００４２】
図６の実施の形態では、ＤＩＭＭ６１０のそれぞれに配置されたＥＣＣロジック６１４によって、本明細書で解説したＨＥＣＣ符号に対応する従来のＥＣＣをすでに提供している既存のコンピュータシステムでメモリサブシステム６０４を利用することが可能になる。その上、ＤＩＭＭ６１０に含まれるＥＣＣロジック６１４を介して垂直スクラブを実行することにより、この追加されたエラーチェック／訂正レベルは、システムメモリ６０２のスループットに過度に悪影響を与える。このようなスループットがあまり大きな懸念事項でない場合、メモリコントローラ６０６は、本発明の別の実施の形態において、垂直スクラブ機能も実行する。
【００４３】
コンピュータシステム６００の一実施の形態では、各ＤＩＭＭ６１０のＥＣＣロジック６１４は、関連付けられたＤＲＡＭメモリデバイス６１２のリフレッシュサイクル中に垂直スクラブを実行する。当業者には十分理解されるように、リフレッシュサイクル中、各ＤＩＭＭ６１０のすべてのデバイス６１２によって共同で形成されたメモリロケーションのアレイにおける各メモリロケーションは、各メモリロケーションに記憶されたデータを復元するためにアクセスされる。各メモリロケーションがアクセスされるので、これは、ＥＣＣロジック６１４がこれらのデータビットの垂直スクラブを実行する好機である。したがって、一実施の形態では、各ＤＩＭＭ６１０のＥＣＣロジック６１４は、関連付けられたＤＲＡＭメモリデバイス６１２の各リフレッシュサイクル中に垂直スクラブを自動的に実行する。また、ＥＣＣロジック６１４は、他の或るパラメータに応答して、又は、メモリコントローラ６０６からのコマンドに応答して、垂直スクラブを自動的に実行することもできる。他の或るパラメータは、リフレッシュサイクル以外の或る期間等であり、Ｘ回のリフレッシュサイクルごとに１回や各リフレッシュサイクルの間にＹ回等である。
【００４４】
また、本発明の実施の形態は、システムメモリ６０２に含まれるメモリのタイプに限定されるものではなく、したがって、ＤＩＭＭ６１０は、図６のＤＲＡＭメモリデバイス６１２を含むが、他の実施の形態では、システムメモリは、１つ又は複数の追加されたタイプのメモリを含むことにも留意されたい。この追加されたタイプのメモリは、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＦＬＡＳＨメモリ、及びデータビットエラーの傾向がある他のあらゆるタイプ等である。
【００４５】
たとえ本発明のさまざまな実施の形態及び利点を上記説明で述べたとしても、上記開示は、例示にすぎず、詳細に変更を行うことができ、それにもかかわらず、この変更も依然として本発明の広い原理の範囲内にある。その上、当業者には十分理解されるように、図６のコンピュータシステム６００の構成要素６０２〜６２８によって実行される機能は、コンピュータシステムの特定の設計及び用途に応じて、結合されてより少ない要素により実施することもできるし、分離されてより多くの要素により実施することもできるし、結合されて異なる機能ブロックにすることもできる。したがって、本発明は、添付の特許請求の範囲によってのみ限定されることになる。
【図面の簡単な説明】
【００４６】
【図１】データワードＤＷ１〜ＤＷＮを関連付けられた水平エラー訂正符号と共に記憶することを示す従来のシステムメモリのメモリ図である。
【図２】エラーの訂正及び検出に必要とされる、システムメモリの全記憶容量の割合を削減する別のエラー検出／訂正手法を示すシステムメモリのメモリ図である。
【図３】本発明の一実施の形態による、関連付けられたデータワードのマルチビットエラーを検出して訂正することに使用できる水平エラー訂正符号及び垂直エラー訂正符号を示すメモリ図である。
【図４】本発明の一実施の形態による、水平エラー訂正符号及び垂直エラー訂正符号を利用して、図３のデータワードのマルチビットエラーを検出して訂正するエラー訂正プロセスを示す。
【図５】本発明の別の実施の形態によるエラー訂正プロセスを示すフローチャートである。
【図６】メモリサブシステム６０４と、チップセット６０８の一部であるメモリコントローラ６０６とによって形成されたシステムメモリ６０２を含むコンピュータシステム６００の機能ブロック図である。
【符号の説明】
【００４７】
６００・・・コンピュータシステム
６０２・・・システムメモリ
６０４・・・メモリサブシステム
６０６・・・メモリコントローラ
６０８・・・チップセット
６１０ａ、６１０ｂ、６１０ｎ・・・ＤＩＭＭ
６１２・・・ＲＡＭ
６１４、６２２・・・ＥＣＣロジック
６１６・・・メモリバス
６１８・・・プロセッサ
６２０・・・システムバス
６２４・・・出力デバイス
６２６・・・入力デバイス
６２８・・・マスストレージ
【図１】
2006318461.tif 000003
【図２】
2006318461.tif 000004
【図３】
2006318461.tif 000005
【図４】
2006318461.tif 000006
【図５】
2006318461.tif 000007
【図６】
2006318461.tif 000008