(57)【要約】【課題】  誤り訂正機能を備えた磁気メモリを提供すること。【解決手段】  本発明はメモリシステムの実施形態で実施される。一実施形態においてメモリ（２０）は、メモリセルアレイ（２６）と制御回路（２２）とを含む。制御回路（２２）は、メモリセルアレイ（２６）から誤り訂正符号で符号化されたデータを読み出し、その誤り訂正符号化データの選択部分に対し誤り訂正符号の復号を実施するとともに、誤り訂正符号化データの非選択部分から使用しない誤り訂正符号パリティを破棄するように構成される。【選択図】  図１
2005085464.tif 000002
【特許請求の範囲】
【請求項１】
メモリセルアレイ（２６）と、
前記メモリセルアレイ（２６）から誤り訂正符号化されたデータを読み出し、誤り訂正符号化されたデータの選択部分に対し誤り訂正符号の復号を実施するとともに、誤り訂正符号化されたデータの非選択部分から誤り訂正符号パリティデータを破棄するように構成された制御回路（２２）と、
からなるメモリ（２０）。
【請求項２】
前記制御回路（２２）は、前記誤り訂正符号化されたデータの完全性をチェックし、完全性が失われていた誤り訂正符号化データに対し誤り訂正符号の復号を実施するように構成される、請求項１に記載のメモリ。
【請求項３】
前記制御回路（２２）は前記誤り訂正符号化されたデータのチェックサムを計算し、該計算したチェックサムを取り出したチェックサムと比較して、前記計算したチェックサムが前記取り出したチェックサムと異なる場合、誤り訂正符号化されたデータに対し誤り訂正符号の復号を実施するように構成される、請求項１に記載のメモリ。
【請求項４】
前記制御回路（２２）は前記誤り訂正符号化されたデータの奇数／偶数パリティを計算し、該計算した奇数／偶数パリティを予想される奇数／偶数パリティと比較して、前記計算した奇数／偶数パリティが前記予想される奇数／偶数パリティと異なる場合、誤り訂正符号化されたデータ対し誤り訂正符号の復号を実施するように構成される、請求項１に記載のメモリ。
【請求項５】
前記制御回路（２２）は、前記メモリセルアレイ（２６）から得たデータを評価し、そのデータの評価に基づいて、誤り訂正符号化されたデータに対し誤り訂正符号の復号を実施するように構成され、
前記データは、
前記メモリセルアレイ（２６）から得た抵抗値の読み、
前記メモリセルアレイ（２６）内のテストメモリセルから得た抵抗値の読み、及び
前記メモリセルアレイ（２６）内のメモリセル（２８）から得た論理状態
のうちのいずれか一つである、請求項１に記載のメモリ。
【請求項６】
前記制御回路（２２）は、前記誤り訂正符号化されたデータを受信し、該誤り訂正符号化されたデータの選択部分を誤り訂正符号デコーダ（３０ｂ）に渡すとともに、前記誤り訂正符号化されたデータの非選択部分をバッファ回路（３０８に渡すように構成されたメモリバッファ（３１０）を含み、該メモリバッファ（３１０）は、前記誤り訂正符号化されたデータの非選択部分から使用しない誤り訂正パリティデータを破棄するように構成される、請求項１に記載のメモリ。
【請求項７】
前記メモリセルアレイ（２６）は、
磁気メモリセルのマクロアレイ（１２６）、
相変化ランダムアクセスのメモリセルアレイ、
フラッシュランダムアクセスのメモリセルアレイ、及び、
プローブベースのメモリセルアレイ
のうちのいずれか一つである、請求項１に記載のメモリ。
【請求項８】
磁気メモリ（２０）を読み書きする方法であって、
メモリセルアレイ（２６）からＥＣＣ符号化データを読み出すことと、
非ＥＣＣパリティデータを評価して評価結果を得ること、
前記評価結果が前記ＥＣＣ符号化データの破損を示す場合、前記ＥＣＣ符号化データを復号して復元データを得ることと、
からなる方法。
【請求項９】
元データを受信することと、
受信した前記元データをＥＣＣ方式で符号化することと、
前記ＥＣＣ符号化データのＣＲＣチェックサムを計算することと、
前記ＥＣＣ符号化データおよび前記ＣＲＣチェックサムを前記メモリセルアレイ（２６）に書き込むこととを含み、
前記ＥＣＣ符号化データを読み出すことは、前記ＥＣＣ符号化データおよび前記ＣＲＣチェックサムを取り出すことを含み、
前記非ＥＣＣパリティデータを評価することは、
前記ＥＣＣ符号化データのＣＲＣチェックサムを計算することと、
計算した前記ＣＲＣチェックサムを取り出した前記ＣＲＣチェックサムと比較して、前記ＥＣＣ符号化データが破損しているか否かを示す比較結果を得ることとを含む、請求項８に記載の磁気メモリを読み書きする方法。
【請求項１０】
破損したＥＣＣ符号化データから復元データを生成することと、
破損していないＥＣＣ符号化データから前記ＥＣＣパリティデータを破棄することと、
前記破損していないＥＣＣ符号化データから元データを生成することとを含む、請求項８に記載の磁気メモリを読み書きする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は磁気メモリデバイスに関し、詳しくは誤り訂正機能を備えた磁気メモリデバイスに関する。
【背景技術】
【０００２】
電子メモリデバイスには、揮発性メモリと不揮発性メモリがある。揮発性メモリの種類としては、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）やスタティックランダムアクセスメモリ（ＳＲＡＭ）などがある。不揮発性メモリの種類としては、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブル読み取り専用メモリ（ＥＥＰＲＯＭ）、およびフラッシュＥＥＰＲＯＭメモリ等のような、リプログラマブルメモリがある。
【０００３】
当該技術分野で既知の不揮発性リプログラマブルメモリの一種に、磁気メモリセルがある。磁気ランダムアクセスメモリ（ＭＲＡ）デバイスと呼ばれるデバイスは、磁気メモリセルのアレイを含む。磁気メモリセルの種類は異なる場合もある。メモリセルは、例えば磁気トンネル接合（ＭＴＪ）メモリセルであることもあれば、巨大磁気抵抗（ＧＭＲ）メモリセルであることもある。
【０００４】
一般に、磁気メモリセルは、磁化の向きを変更することが可能な磁性薄膜層と、磁化の向きを特定の方向に固定すなわち「ピン止め」することが可能な磁性薄膜層とを有する。磁化の向きを変更することが可能な磁性薄膜はセンス層またはデータ記憶層と呼ばれ、磁化の向きが固定された磁性薄膜は基準層またはピン止め層と呼ばれる。
【０００５】
ワード線およびビット線と呼ばれる導電トレースが、メモリセルアレイ全体に配線される。ワード線はメモリセルの行に沿って延び、ビット線はメモリセルの列に沿って延びる。ワード線とビット線の交点のそれぞれにおいてメモリセルに格納される１ビットの情報は、センス層の磁化の向きとして記憶される。センス層における磁化の向きは、磁化容易軸と呼ばれる軸の向きに等しい。磁界を印加し、センス層の磁化の向きを磁化容易軸の方向に沿って、基準層の磁化の向きに対し平行の向きまたは反平行の向きに反転させる。
【０００６】
センス層の磁化の向きを反転させるため、メモリセルアレイ全体にワード線およびビット線が配線される。ワード線はセンス層付近にあるメモリセルの行に沿って延び、ビット線は基準層付近にあるメモリセルの列に沿って延びる。ワード線およびビット線は書き込み回路に電気的に接続される。
【０００７】
書き込み動作の際、書き込み回路は１本のワード線と１本のビット線を選択し、それらの導体の交点にあるメモリセルのセンス層の磁化の向きを変更する。書き込み回路は、選択したワード線およびビット線に書き込み電流を供給し、選択したメモリセルの位置に磁界を生成する。それらの磁界の組み合わせにより、選択したメモリセルの磁化の向きが、設定または変更される。
【０００８】
メモリセルの抵抗値は、センス層および基準層の磁化の向きが平行であるか、それとも反平行であるかによって異なる。メモリセルの抵抗値は磁化の向きが反平行のときに最大になり、その状態は論理「１」状態と呼ばれることもある。メモリセルの抵抗値は磁化の向きが平行のときに最小になり、その状態は論理「０」状態と呼ばれることもある。メモリセルの抵抗状態はメモリセルの抵抗値を検出することによって判定することができる。
【０００９】
一構成では、メモリセルの抵抗値を検出する際に、ワード線およびビット線を使用する場合がある。ワード線はセンス層に電気的に接続され、ビット線は基準層に電気的に接続される。ワード線およびビット線はさらに読み出し回路に電気的に接続され、メモリセルの抵抗状態を検出する。
【００１０】
読み出し動作の際、読み出し回路は１本のワード線と１本のビット線を選択し、それらの導体の交点にあるメモリセルの抵抗値を検出する。読み出し動作の一例として、読み出し回路は選択したメモリセルの両端に一定の検出電圧を加え、メモリセルを流れる検出電流を生成する場合がある。メモリセルを流れる検出電流はメモリセルの抵抗値に比例するので、この検出電流を使用して高抵抗状態と低抵抗状態を区別することができる。
【００１１】
磁気メモリは一般に信頼性が高いが、データを記憶するメモリセルの能力に影響するような故障が発生することもある。故障を引き起こす原因は、製造不良、読み出し動作時のノイズ等のような内部的要因、温度や周囲の電磁ノイズといった環境要因、および磁気メモリの使用による経年劣化など、多数存在する。故障したメモリセルは、メモリセルから論理値を読み出すことができなくなったり、メモリセルから読み出した論理値がそのメモリセルに書き込んだ論理値と必ずしも同じにならないといった具合に、使用不能になることがある。磁気メモリの記憶容量や信頼性は深刻な影響を受けることがあり、最悪の場合、磁気メモリ全体が使用不能になることもある。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
製造不良の数を減らし、磁気メモリの寿命を延ばすために、製造工程と磁気メモリの構造にいくらかの改良が行なわれてきた。しかしながら、それらの改良は一般に、製造コストと複雑さを増大させ、回路の歩留まりを低下させるものであった。そのため、故障に対処し、容量の損失を減らす技術の開発が進められている。
【課題を解決するための手段】
【００１３】
本発明はメモリシステムの実施形態で実施される。一実施形態において、本メモリはメモリセルアレイと制御回路とを含む。制御回路は、メモリセルアレイから誤り訂正符号化されたデータを読み出し、誤り訂正符号化されたデータの選択部分に対し誤り訂正符号の復号を行い、誤り訂正符化されたデータの非選択部分から使用しない誤り訂正符号のパリティデータを破棄するように構成される。
【００１４】
本発明の実施形態は添付の図面を参照することによりさらによく理解することができる。図面の要素は必ずしも互いに一定の縮尺で描かれているとは限らない。同じ符号は対応する類似の構成要素であることを示している。
【発明を実施するための最良の形態】
【００１５】
図１は、本発明による磁気メモリ２０の例示的実施形態を示す図である。磁気メモリ２０は、制御回路２２、読み出し／書き込み回路２４、および磁気メモリセルアレイ２６を含む。磁気メモリセルアレイ２６は磁気メモリセル２８を含む。制御回路２２は、誤り訂正符号（ＥＣＣ）ユニット３０を含む。ＥＣＣユニット３０は、磁気メモリセルアレイ２６に格納されるデータの符号化および復号を行なう。
【００１６】
図示の実施形態は磁気メモリ２０に関するものである。他の実施形態では、相変化ランダムアクセスメモリ（ＰＣＲＡＭ）、フラッシュランダムアクセスメモリ（ＲＡＭ）、およびプローブベースのメモリ等のような、他の適当なメモリタイプであってもよい。プローブベースのメモリの場合、機械式プローブのアレイが記憶媒体の様々な部分とやりとりして、記憶媒体に対するデータの読み書きを行なう。プローブベースのメモリにデータを記憶する方法としては、ストレージチャージ方法、磁気的方法、熱機械的方法、および相変化的方法などがある。
【００１７】
図示の実施形態において、制御回路２２は、ホストシステム等の外部ソースから元データを受信する。受信データはＥＣＣ方式で符号化され、アレイ２６に書き込まれる。制御回路２２は、アレイ２６からＥＣＣ符号化データを読み出し、そのＥＣＣ符号化データの完全性をチェックする。ＥＣＣ符号化データの完全性が失われていた場合、制御回路２２は、ＥＣＣユニット３０を用いてＥＣＣ符号化されたデータを復号する。ＥＣＣユニット３０は、破損したＥＣＣ符号化データを復号して誤りを訂正し、元のデータを復元する。復元したデータは外部ソースに供給される。ＥＣＣ符号化データの完全性が失われていなければ、ＥＣＣユニット３０を用いたＥＣＣ符号化データの復号は行わずに、ＥＣＣパリティデータを破棄し、取得した元データを外部ソースに渡す。すなわち、制御回路２２は、アレイ２６から読み出したＥＣＣ符号化データの全部ではなく一部を復号する。アレイ２６から読み出したＥＣＣ符号化データの全部ではなく一部を復号することにより、アレイ２６を読み出して元データを復元し、外部ソースへ渡すのに要する時間と処理能力が低減される。
【００１８】
制御回路２２は、アレイ２６から読み出したＥＣＣ符号化データの完全性を、ＥＣＣ復号よりも高速な誤り検出方式でチェックする。この誤り検出方式は、任意の適当な誤り検出方式でよい。一実施形態において、制御回路２２は、アレイ２６から読み出したＥＣＣ符号化データの完全性を、巡回冗長検査（ＣＲＣ）チェックサムを用いてチェックする。制御回路２２は、外部ソースから元データを受信し、ＥＣＣユニット３０を用いてＥＣＣ方式で元データを符号化する。ＥＣＣ符号化されたデータは次いでＣＲＣユニットに渡され、ＣＲＣチェックサムが計算される。そして、そのＥＣＣ符号化データとＣＲＣチェックサムが、アレイ２６に書き込まれる。制御回路２２は、アレイ２６からＥＣＣ符号化データとＣＲＣチェックサムを読み出し、そのＥＣＣ符号化データの新たなＣＲＣチェックサムを計算する。そして、その新たなＣＲＣチェックサムを読み出したＣＲＣチェックサムと比較する。ＣＲＣチェックサムが一致する場合、そのＥＣＣ符号化データは信頼できるものと考えられるので、ＥＣＣの復号は行わない。ＣＲＣチェックサムが一致しない場合、アレイ２６から読み出したＥＣＣ符号化データは信頼できないものと考えられる。その場合、ＥＣＣユニット３０を用いてその信頼性のないＥＣＣ符号化データを復号し、誤りを訂正する。
【００１９】
他の実施形態において、アレイ２６から読み出したＥＣＣ符号化データの完全性は、そのＥＣＣ符号化データを記憶しているメモリセル２８の抵抗値の読みを評価することによって判断される。抵抗値の読みが所定のしきい値に違反する場合、読み出したＥＣＣ符号化データは信頼性がないものと考えられる。信頼性のないＥＣＣ符号化データは、ＥＣＣユニット３０を用いて復号され、訂正される。抵抗値の読みが所定のしきい値に違反しない場合、ＥＣＣ符号化データの復号は行わない。その場合、ＥＣＣ符号化データの一部であるＥＣＣパリティデータを破棄し、元データの部分を残す。そして、その元データを外部ソースに直接渡す。他の実施形態では、例えば、奇数／偶数パリティチェックや、アレイ２６内のテストメモリセルの抵抗値などのような、他の適当な完全性チェックを用いる場合もある。
【００２０】
磁気メモリセル２８は、ｘ軸方向に延びる行とｙ軸方向に延びる列に、行列に配置される。説明を簡単にするため、磁気メモリ２０のメモリセル２８は少数しか図示していない。実際には任意の適当なサイズのアレイを用いることができ、アレイを積み重ねて三次元マクロアレイ構造を形成し、本明細書において後で説明するマクロアレイのように、高度な並列形態で動作させることもできる。
【００２１】
図示の実施形態において、読み出し／書き込み回路２４は、読み出し／書き込み行回路３２ａおよび３２ｂと、読み出し／書き込み列回路３４ａおよび３４ｂとを含む。行回路３２ａおよび３２ｂはワード線３６ａ〜３６ｃに電気的に接続され、列回路３４ａおよび３４ｂはビット線３８ａ〜３８ｃに電気的に接続される。導電性ワード線３６ａ〜３６ｃは、アレイ２６の片面の平面においてｘ軸方向に延びる。導電性ビット線３８ａ〜３８ｃは、アレイ２６の反対側の平面においてｙ軸方向に延びる。アレイ２６の各行につき１本のワード線３６ａ〜３６ｃがあり、アレイ２６の各列につき１本のビット線３８ａ〜３８ｃがある。メモリセル２８は、ワード線３６ａ〜３６ｃとビット線３８ａ〜３８ｃの交点にそれぞれ配置される。
【００２２】
制御回路２２は、導電性読み出し／書き込みパス４０を通して、行回路３２ａ、３２ｂに接続されるとともに、列回路３４ａ、３４ｂに電気的に接続される。さらに、制御回路２２は、導電性入力／出力（Ｉ／Ｏ）パス４２を通して外部ソースにも電気的に接続される。制御回路２２は、外部ソースおよび読み出し／書き込み回路２４と通信するためのＩ／Ｏ回路を有する。また、制御回路２２は、組み込みプロセッサおよび不揮発性メモリを更に有する。不揮発性メモリは、組み込みプロセッサおよび制御回路２２の動作プログラムを記憶する。制御回路２２およびＥＣＣユニット３０は、アレイ２６に記憶されているデータの符号化と復号を制御する。
【００２３】
制御回路２２は、読み出し／書き込み回路２４によるアレイ２６へのデータの書き込みや、アレイ２６からのデータの読み出しを制御する。制御回路２２は、Ｉ／Ｏパス４２を通して外部ソースから書き込みアドレスおよび元データを受信する。また、制御回路２２は、Ｉ／Ｏパス４２を通して外部ソースから読み出しアドレスを受信し、元データを外部ソースに送信する働きもする。制御回路２２とアレイ２６は、一つの基板上に形成してもよいし、別々に構成してもよい。図示の実施形態では、制御回路２２とアレイ２６を別々の基板上に形成している。
【００２４】
書き込み動作の際、制御回路２２は、Ｉ／Ｏパス４２を通して外部書き込みアドレスと元データを受信する。制御回路２２は、受信した元データをＥＣＣユニット３０を用いて符号化し、そのＥＣＣ符号化したデータと書き込みアドレスとを読み出し／書き込み回路２４に渡す。書き込みアドレスは、受信した外部書き込みアドレス、すなわち論理アドレスであってもよいし、その外部書き込みアドレスを対応するアレイの読み出し／書き込みアドレスにマッピングしたアレイ読み出し／書き込みアドレス、すなわち物理アドレスであってもよい。
【００２５】
読み出し／書き込み回路２４は、ワード線３６ａ〜３６ｃおよびビット線３８ａ〜３８ｃを通じて書き込み電流を供給することにより、アレイ２６内のメモリセル２８に書き込みを行なう。選択されたメモリセル２８に書き込みを行なうためには、行回路３２ａおよび３２ｂによって選択されたワード線３６ａ〜３６ｃに第１の書き込み電流を流すとともに、列回路３４ａおよび３４ｂによって選択されたビット線３８ａ〜３８ｃに第２の書き込み電流を流す。選択されたメモリセル２８に書き込みを行なう際、行回路３２ａおよび３２ｂは、必要に応じていずれの方向にも選択されたワード線３６ａ〜３６ｃを通して第１の書き込み電流を供給することができる。選択されたメモリセル２８に書き込みを行なう際、列回路３４ａおよび３４ｂは、必要に応じていずれの方向にも選択されたビット線３８ａ〜３８ｃを通して第２の書き込み電流を供給することができる。第１の書き込み電流は、選択されたワード線３８ａ〜３８ｃを通じて行回路３２ａから行回路３２ｂへ流れ、あるいはその逆方向に流れる。第２の書き込み電流は、選択されたビット線３８ａ〜３８ｃを通じて列回路３４ａから列回路３４ｂへ流れ、あるいはその逆方向に流れる。図面において、アレイ２６に接続される読み出し／書き込み回路２４は一つしか図示していない。実際には、読み出し／書き込み回路２４のような読み出し／書き込み回路が任意の適当な数だけアレイ２６に接続され、アレイ２６は任意の適当な数のメモリセル２８を有する。アレイ２６内のメモリセル２８に対する読み書きは、高度に並列な態様で行なわれる。
【００２６】
書き込み動作の際、行回路３２ａおよび３２ｂは１本のワード線３６ａ〜３６ｃを選択し、列回路３４ａ〜３４ｂは１本のビット線３８ａ〜３８ｃを選択して、選択したワード線３６ａ〜３６ｃとビット線３８ａ〜３８ｃの交点にあるメモリセル２８のセンス層の磁化の向きを設定または変更する。行回路３２ａおよび３２ｂは第１の書き込み電流を選択したワード線３６ａ〜３６ｃに供給し、列回路３４ａおよび３４ｂは第２の書き込み電流を選択したビット線３８ａ〜３８ｃに供給する。第１の書き込み電流は、右手の法則に従って選択されたワード線３６ａ〜３６ｃの周囲に磁界を生成し、第２の書き込み電流は、右手の法則に従って選択されたビット線３８ａ〜３８ｃの周囲に磁界を生成する。それらの磁界を結合したものにより、選択されたメモリセル２８のセンス層の磁化の向きが設定または変更される。
【００２７】
読み出し動作の際、制御回路２２はＩ／Ｏパス４２を通して外部読み出しアドレスを受信する。制御回路２２は、外部読み出しアドレス（すなわち論理アドレス）、または対応するアレイの読み出し／書き込みアドレス（すなわち物理アドレス）を読み出し／書き込み回路２４に渡す。読み出し／書き込み回路２４は、アレイ２６内の受信したアドレスに格納されているデータを読み出す。制御回路２２は、アレイ２６からＥＣＣ符号化データを取得し、そのＥＣＣ符号化データの完全性を評価する。ＥＣＣ符号化データが信頼性のないものである場合、制御回路２２はＥＣＣユニット３０を使用してＥＣＣ符号化データを復号し、復号したデータ、すなわち復元されたデータをＩ／Ｏパス４２を通して外部ソースに供給する。アレイ２６から読み出されたＥＣＣ符号化データが信頼性のあるものと考えられる場合、制御回路２２はＥＣＣパリティデータを破棄し、残りのデータ、すなわち元データをＩ／Ｏパス４２を通して外部ソースに供給する。
【００２８】
読み出し動作の際、読み出し／書き込み回路２４は、１本のワード線３６ａ〜３６ｃと１本のビット線３８ａ〜３８ｃを選択し、選択したワード線３６ａ〜３６ｃとビット線３８ａ〜３８ｃの交点にあるメモリセル２８の抵抗を検出する。行回路３２ａが１本のワード線３６ａ〜３６ｃを選択し、列回路３４ａが１本のビット線３８ａ〜３８ｃを選択する。行回路３２ａは選択したワード線３６ａ〜３６ｃをグラウンドに電気的に接続する。列回路３４ａは、一定の検知電圧を選択したビット線３８ａ〜３８ｃに印加し、選択されたメモリセル２８を通る検知電流を生成する。選択されたメモリセル２８を通る検知電流の大きさは、選択されたメモリセル２８の抵抗状態および論理状態に対応する。列回路３４ａは検知電流の大きさを検出し、論理出力信号を制御回路２２に供給する。この論理出力信号は、選択されたメモリセル２８の抵抗状態を示す高論理レベルまたは低論理レベルの信号である。
【００２９】
図２は、アレイ部分５０の例示的な一実施形態を示す図である。アレイ部分５０はワード線３６ａ、メモリセル２８、およびビット線３８ａを含む。メモリセル２８は、ワード線３６ａとビット線３８ａの間に配置される。図示の実施形態では、ワード線３６ａとビット線３８ａが互いに直交している。他の実施形態において、ワード線３６ａとビット線３８ａは、互いに他の適当な角度で配置してもよい。
【００３０】
図示の実施形態では、ワード線３６ａとビット線３８ａが読み出し／書き込み回路２４に電気的に接続される。ワード線３６ａは行回路３２ａおよび３２ｂに電気的に接続され、ビット線３８ａは列回路３４ａおよび３４ｂに電気的に接続される。メモリセル２８に書き込むためには、行回路３２ａおよび３２ｂによって第１の書き込み電流をワード線３６ａに供給し、列回路３４ａおよび３４ｂによって第２の書き込み電流をビット線３８ａに供給する。ワード線３６ａを通る第１の書き込み電流は、右手の法則に従ってワード線３６ａの周囲およびメモリセル２８に磁界を生成する。ビット線３８ａを通る第２の書き込み電流は、右手の法則に従ってビット線３８ａの周囲およびメモリセル２８に磁界を生成する。それらの磁界を結合したものにより、メモリセル２８の状態が設定または変更される。
【００３１】
メモリセル２８の抵抗状態および論理状態を読み出すためには、行回路３２ａによってワード線３６ａをグラウンドに電気的に接続し、列回路３４ａによって一定の検知電圧をビット線３８ａに印加する。メモリセル２８の両端に加えた一定の検知電圧により、ビット線３８ａからワード線３６ａおよびグラウンドまで流れるメモリセル２８の中を通る検知電流が発生する。検知電流の大きさは、メモリセル２８の抵抗状態を示す。列回路３４ａは検知電流の大きさを検出し、メモリセル２８の抵抗状態および論理状態を示す出力信号を制御回路２２に供給する。
【００３２】
図３は、アレイ部分５０の例示的な実施形態の断面を示す図である。アレイ部分５０は、ワード線３６ａとビット線３８ａの間にメモリセル２８を有する。メモリセル２８は、センス層５２、スペーサ層５４、および基準層５６を含む。スペーサ層５４は、センス層５２と基準層５６の間に配置される。センス層５２は、スペーサ層５４とワード線３６ａの間に配置される。基準層５６は、スペーサ層５４とビット線３８ａの間に配置される。
【００３３】
センス層５２の磁化の向きは変更することができ、基準層５６の磁化の向きはピン止めされている。図示の実施形態の場合、メモリセル２８はＭＴＪスピントンネルデバイス、スペーサ層５４は絶縁バリア層になっていて、読み出し動作の際に、スペーサ層５４を通って電荷がトンネルするようになっている。スペーサ層５４を通る電荷のトンネル現象は、メモリセル２８の両端に検知電圧を加えることによって起こる。他の実施形態において、メモリセル２８は、スペーサ層５４を銅などの導体にし、ＧＭＲ構造にしてもよい。
【００３４】
図４は、他の磁気メモリ１２０を示す図である。磁気メモリ１２０は、マクロアレイ１２６および制御回路２２を備える。制御回路２２はＥＣＣユニット３０を備える。マクロアレイ１２６は複数の磁気メモリセルアレイ２６を含む。各メモリセルアレイ２６は、ワード線３６とビット線３８の交点にメモリセル２８を有する。アレイ２６は先に述べたように形成され、制御回路２２に電気的に接続される。マクロアレイ１２６のようにマクロアレイ内に複数のアレイ２６を個別に設けることにより、個々のアレイ２６をそれほど大きくする必要がなくなり、製造や管理を難しくすることなく、全体のデータ記憶容量が大きいマクロアレイを得ることができる。
【００３５】
アレイ２６はｘ軸方向に延びる行とｙ軸方向に延びる列に、行列に配置される。さらに、アレイ２６はｚ軸方向に延びる階層にも配置される。説明を簡単にするため、メモリセル２８およびアレイ２６は比較的少数しか図示していない。アレイのサイズとマクロアレイのサイズは、実際には任意の適当なサイズでよい。
【００３６】
１２８Ｍバイトマクロアレイの好ましい一実施形態では、１０２４個のアレイを、高さ１６アレイ、幅１６アレイの、４階層を有するマクロアレイに構成する。各アレイは、高さ１０２４メモリセル、幅１０２４メモリセルの１つのＭビットアレイである。オプションとして、磁気メモリは２個以上のそのようなマクロアレイを含んでもよい。
【００３７】
１２８Ｍバイトアレイに適した一つのアドレス指定方式において、メモリセルのアクセスは、複数のアレイのそれぞれにおいて１本のワード線を選択し、複数のアレイのそれぞれにおいて複数のビット線を選択することにより行なわれる。各アレイにおいて複数のビット線を選択することにより、各アレイから複数のメモリセルを選択する。複数のアレイのそれぞれにおいてアクセスされたメモリセルは、データ単位のうちの小さな部分に対応する。同時に、それらのアクセスされたメモリセルは、５１２バイトのセクタ等のようなデータ単位全体、またはデータ単位全体のうちのかなりの部分を提供する。メモリセルはほぼ同時にアクセスされる。
【００３８】
磁気メモリ１２０の図示の実施形態において、メモリセル２８のアクセスは、複数のアレイ２６のそれぞれにおいて、１本のワード線３６と複数のビット線３８を選択し、複数のメモリセル２８を選択することによって行なわれる。アクセスされたメモリセル２８は、５１２バイトのセクタ等のようなデータ部分全体のうちの少なくとも一部に対応する。複数のアレイ２６にほぼ同時にアクセスすることができる。他の実施形態において実際には、複数のアレイ２６のそれぞれにおいて１本のビット線３８と複数のワード線３６を選択するといったように、他の適当なアクセス方式を用いることもできる。
【００３９】
アレイ２６および１２６は一般に信頼性の高いものではあるが、メモリセル２８のデータ記憶機能に影響を与える故障が発生することもある。故障は、系統的故障と偶発故障に分類される。系統的故障とは、毎回同じ特定のメモリセル２８や特定のメモリセル２８グループで発生する故障である。偶発故障とは、短期的に発生し、同じ箇所で繰り返し発生する可能性がない故障である。系統的故障は一般に、製造不良や経年劣化が原因で発生する。偶発故障は、読み出しまたは書き込みプロセス中のノイズ、温度、周囲の電磁ノイズといった、内外の環境の影響を受けて発生する。故障したメモリセル２８は、メモリセル２８から論理値をまったく読み出すことができなかったり、メモリセル２８から読み出した論理値がそのメモリセル２８に書き込んだ論理値と必ずしも同じでならなかったりといった具合で、読み出すことが不可能になる可能性がある。
【００４０】
故障のメカニズムは様々な形態があり、例えば短絡ビット、開放ビット、半選択ビット、および単一故障ビットなどがある。短絡ビットでは、メモリセル２８の抵抗が予想される抵抗値よりもはるかに小さくなる。短絡ビットは、同じ行および同じ列に存在するすべてのメモリセル２８に影響を及ぼす傾向がある。開放ビットでは、メモリセル２８両端の抵抗が予想される抵抗値よりもはるかに大きくなる。開放ビット故障は、必ずではないが、同じ行または同じ列、あるいはそれら両方に存在するすべてのメモリセル２８に影響を及ぼす可能性がある。半選択ビット故障は、ある行または列にあるメモリセル２８への書き込みにより、それと同じ行または同じ列にある他のメモリセル２８の状態を変化させてしまったときに発生する。したがって、半選択故障を起こしやすいメモリセル２８は、それと同じ行または同じ列に存在するどのメモリセル２８への書き込みに対しても状態の変化を起こしやすく、記憶されたデータの信頼性が低い。単一故障ビットとは、特定のメモリセル２８が高抵抗または低抵抗状態に固定される場合をいう。単一故障ビットは、必ずしも他のメモリセル２８に影響を与えるものではなく、他のメモリセル２８の動作の影響を受けない。
【００４１】
これら４つの故障メカニズムの例は、毎回常に同じメモリセル（複数の場合もあり）２８が故障するという点で系統的故障である。故障メカニズムが１つのメモリセル２８にしか影響を与えないものである場合、そのような故障は「単独故障」と呼ばれる。故障メカニズムがメモリセル２８のグループに影響を与える場合、そのような故障は「グループ故障」と呼ばれる。
【００４２】
メモリセル２８を用いてデータを何らかの適当な論理的配置で記憶する際、データはバイト等の基本的な単位に編成するのが好ましい。そして、その基本的単位をセクタ等のような、もっと大きな論理的データ単位にグループ化する。物理的故障は、特に多数のメモリセル２８に影響を与えるグループ故障の場合、多数バイト、および多数セクタのデータに影響を与えることがある。一箇所の物理的故障は、多数の論理的単位のデータに影響を与えることがあり、故障の影響を受けたバイト、セクタその他単位のデータは全部を使用することができなくなり、磁気メモリ２０および１２０の記憶容量は実質的に減少する。たとえば、たった１つのメモリセル２８における短絡ビット故障のようなグループ故障は、同じ行または同じ列にある他の多数のメモリセル２８に影響を与えることがある。１個のＭビットアレイを１０２４×１０２４個のメモリセル２８で構成した場合、１個のメモリセル２８における１箇所の短絡ビット故障は、同じ行にある１０００を越える他のメモリセル２８、および同じ列にある１０００を越えるメモリセル２８に影響を与える場合がある。影響を受けるメモリセル２８は多数バイトおよび多数セクタに及ぶこともあり、影響を受けたバイトおよびセクタを使用しないことにより、磁気メモリの記憶容量は減少してしまう。
【００４３】
図示の実施形態では、影響を受けたバイトおよびセクタのうちの一部または全部をデータの記憶に使用する。データはＥＣＣ方式で符号化され、ＥＣＣ符号化データとしてアレイ２６に記憶される。誤り訂正符号化は、記憶する元データを受信することと、誤りを特定し理想的にはそれを訂正することが可能なＥＣＣ符号化データを形成することを含む。ＥＣＣ符号化データは、元データとＥＣＣパリティデータとを含む。ＥＣＣ符号化データは、磁気メモリ２０および１２０のアレイ２６および１２６に記憶される。
【００４４】
読み出し動作の際は、破損したＥＣＣ符号化データをＥＣＣ復号化することにより、破損したＥＣＣ符号化データから元データを復元することができる。ＥＣＣユニット３０は、ＥＣＣパリティデータを用いて破損したＥＣＣ符号化データを復号化して訂正し、元データを復元する。ＥＣＣの復号は、時間および処理能力を要するプロセスである。ＥＣＣ符号化データが破損していなければ、ＥＣＣ符号化データからＥＣＣパリティデータを破棄することにより、元データを得ることができる。破損していないＥＣＣ符号化データはＥＣＣユニット３０に供給しない。使用しないＥＣＣパリティデータ、すなわち不要なＥＣＣパリティデータを破棄し、ＥＣＣを復号することなく元データを得ることにより、消費時間と処理能力が低減される。
【００４５】
ＥＣＣ方式には様々なものを用いることができ、それらは単体で使用してもよいし、組み合わせて使用してもよい。適当なＥＣＣ方式としては、ＢＣＨ（Ｂｏｓｅ  Ｃｈａｕｄｈｕｆｉ  Ｈｏｃｑｕｅｎｇｈｅｍ）のような１ビットシンボルを用いる方式や、リードソロモン符号のような複数ビットシンボルを用いる方式などがある。
【００４６】
ＥＣＣについての背景情報は、W. W. Peterson、 E. J. Weldon, Jr.著,「Error-Correcting Codes」, 2nd Edition, 12th Printing, 1994, MIT Press, Cambridge, MAに記載されている。また、リードソロモンコードの詳細は、"Reed-Solomon Codes And Their Applications" ED. S. B. Wicker and V. K. Bhargava, IEEE Press, New York, 1994に記載されている。
【００４７】
図５は、アレイ２６および１２６に記憶されるＥＣＣ符号化データの論理データ構造の例を示す図である。制御回路２２は、元データを５１２バイトからなる元データセクタ２００に受信する。制御回路２２およびＥＣＣユニット３０は、受信した元データセクタ２００を符号化し、ＥＣＣ符号化されたデータセクタ２０２を生成する。
【００４８】
ＥＣＣ符号化データセクタ２０２は、４つのコードワード２０４を含む。各コードワード２０４は１６０個のシンボル２０６を含む。図示の実施形態では、リードソロモンＥＣＣ符号化方式を使用していて、各シンボル２０６が符号２０８で示すように８ビットを含む。他の実施形態において、各シンボル２０６は１ビット（たとえば１ビットシンボルを用いるＢＣＨ符号の場合）であっても、または１０ビット等のように８ビット以外の複数ビット（たとえば複数ビットのシンボルを用いるリードソロモン符号の場合）であってもよい。８個のビット２０８は、シンボル２０６に対応し、シンボルグループと呼ばれる８個のメモリセル２８に記憶される。シンボルグループ中の８個のメモリセル２８のいずれかに直接または間接的に影響を与える物理的故障は、それらのビットのうちの１つまたは複数を読み出し不能にし、誤ったシンボル２０６を与える場合がある。
【００４９】
制御回路２２は、メモリセル２８に記憶されたＥＣＣ符号化データの各ブロックを読み出す。制御回路２２およびＥＣＣユニット３０は、そのＥＣＣ符号化データを復号し、故障シンボル２０６を特定して訂正する。この復号処理は、ＥＣＣ符号化データセクタ２０２やＥＣＣコードワード２０４等のような、ＥＣＣ符号化データの各ブロックについて個別に実施される。
【００５０】
図示の実施形態において、制御回路２２およびＥＣＣユニット３０は、リードソロモンＥＣＣ方式を用いて、受信した元データ２００を符号化する。リードソロモン方式は、ＥＣＣ符号化データの各ブロックについて、所定の最大数までの故障シンボル２０６を数学的に特定して訂正する線形誤り訂正符号である。たとえば、１２８バイトの元データに対し８ビットシンボルのコードワードを１６０個生成する［１６０，１２８，３２］リードソロモンコードは、１６０バイト中、最大で１６個までのランダムエラーを見つけて訂正することができる。他の例において、１２８バイトの元データに対し８ビットシンボルのコードワードを１３２個生成する［１３２，１２８，４］リードソロモンコードは、１３２バイト中、最大で２個までのランダムエラーを見つけて訂正することができる。
【００５１】
ＥＣＣ方式は、実質的にどんな場合でも、ＥＣＣ符号化データから元データ２００を復元するのに十分なだけの能力を備えたものが選択される。図示の実施形態の場合、制御回路２２およびＥＣＣユニット３０は、元データ２００の符号化および復号化に［１６０，１２８，３２］リードソロモンコードを使用する。元データ２００は４個のコードワード２０４に分割される。各コードワード２０４は、１２８バイトの元データと３２バイトのＥＣＣパリティデータとを含む。従って、コードワードの長さは１６０バイトになり、ＥＣＣ符号化データセクタ２０２の長さは６４０バイトになる。他の実施形態において、制御回路２２およびＥＣＣユニット３０は、［１３２，１２８，４］リードソロモンコード等のような、任意の適当なＥＣＣＣ方式を使用してもよい。
【００５２】
図６および図７は、マクロアレイ１２６と通信する制御回路２２の例示的な一実施形態を異なる態様で示す図である。図６は、制御回路２２の例示的な実施形態におけるマクロアレイ１２６に書き込みを行なうための書き込み構成要素を示し、図７は、制御回路２２の例示的な実施形態におけるマクロアレイ１２６から読み出しを行うための読み出し構成要素を示す。読み出し構成要素および書き込み構成要素は制御回路２２の一部である。
【００５３】
図６は、制御回路２２の例示的な実施形態におけるマクロアレイ１２６にデータを書き込むための構成要素を示す図である。制御回路２２は、組み込みプロセッサ３００、ホストインタフェース３０２、バッファ回路３０４、および記憶部インタフェース３０６を備える。バッファ回路３０４は、バッファマネージャ３０８、マルチプレクサ３３０、およびバッファメモリ３１０を備える。記憶部インタフェース３０６は、ＥＣＣエンコーダ３０ａおよびＣＲＣエンコーダ３１２を備える。
【００５４】
組み込みプロセッサ３００は、制御回路２２の動作を制御するとともに、符号３１５で示すようにホストインタフェース３０２、バッファ回路３０４、および記憶部インタフェース３０６と電気的に通信する。図を分かりやすくするため、組み込みプロセッサ３００と他の構成要素との間の導電パスは図示していない。図示の実施形態において、組み込みプロセッサ３００は縮小命令セット演算（ＲＩＳＣ）プロセッサである。他の実施形態において、組み込みプロセッサ３００は汎用処理コア等のような任意の適当なプロセッサであってもよい。あるいはプロセッサ３００は有限状態機械（ＦＳＭ）で置き換えることもできる。
【００５５】
ホストインタフェース３０２は、Ｉ／Ｏパス４２を通して外部ソースに接続され、内部Ｉ／Ｏパス３１４を通してバッファ回路３０４に電気的に接続される。さらに、ホストインタフェース３０２は組み込みプロセッサ３００と電気的に通信する。ホストインタフェース３０２は、コンパクトフラッシュコントローラやセキュアデジタルメモリインタフェースのような、外部ソースに対する制御回路のインタフェースである。組み込みプロセッサ３００は、ホストインタフェース３０２によるＩ／Ｏパス４２を通じたホストシステムに対するデータの送受信を制御する。
【００５６】
バッファ回路３０４は、バッファマネージャ３０８、マルチプレクサ３３０、およびバッファメモリ３１０を備える。バッファマネージャ３０８は、内部Ｉ／Ｏパス３１４を通してホストインタフェース３０２に接続され、導電パス３１６を通して記憶部インタフェース３０６に電気的に接続される。さらに、バッファマネージャ３０８は、導電メモリ入力パス３１８を通してバッファメモリ３１０に接続され、マルチプレクサ出力パス３３４を通してマルチプレクサ３３０に電気的に接続される。バッファマネージャ３０８は、バッファメモリ３１０に対するデータの送受信を制御する。
【００５７】
バッファメモリ３１０は、メモリ入力パス３１８を通してバッファマネージャ３０８に電気的に接続される。さらに、バッファメモリ３１０は、メモリ出力パス３３６を通してマルチプレクサ３３０に電気的に接続される。バッファメモリ３１０はバッファマネージャ３０８によって制御され、データをメモリ出力パス３３６に出力する。書き込み動作の際、マルチプレクサ３３０は、メモリ出力パス３３６上のデータをマルチプレクサ出力パス３３４に渡し、バッファマネージャ３０８へと送る。
【００５８】
バッファマネージャ３０８は、組み込みプロセッサ３００により制御されるデジタルロジックを備える。バッファマネージャ３０８は、ホストインタフェース３０２からデータを受信し、受信したデータを記憶部インタフェース３０６に渡す。バッファマネージャ３０８は、記憶部インタフェース３０６がデータを受信できる速度よりも速い速度でホストインタフェース３０２からデータを受信した場合、受信したデータをバッファメモリ３１０に記憶する。記憶されたデータは、バッファマネージャ３０８によって取り出され、一連のハンドシェイクを通じて記憶部インタフェース３０６に送られる。さらに、バッファマネージャ３０８は、記憶部インタフェース３０６からデータを受信して、そのデータをホストインタフェース３０２に送る。記憶部インタフェース３０６から受信したデータはバッファメモリ３１０に記憶され、ホストインタフェース３０２および外部ソースに送られる前に処理される。
【００５９】
バッファメモリ３１０は、バッファマネージャ３０８から受信したデータを記憶する。バッファマネージャ３０８は、バッファメモリ３１０からデータを読み出し、そのデータをホストインタフェース３０２、または記憶部インタフェース３０６に渡す。バッファメモリ３１０は、スタティックランダムアクセスメモリ（ＳＲＡＭ）やダイナミックランダムアクセスメモリ（ＤＲＡＭ）等のような揮発性メモリである。
【００６０】
記憶部インタフェース３０６は、バッファマネージャ３０８とマクロアレイ１２６の間に配置される。記憶部インタフェース３０６は、導電性パス３１６を通してバッファマネージャ３０８に接続され、導電パス３２０を通してマクロアレイ１２６に電気的に接続される。記憶部インタフェース３０６は、ＣＲＣエンコーダ３１２と、ＥＣＣユニット３０の一部であるＥＣＣエンコーダ３０ａを備える。記憶部インタフェース３０６のデジタルロジックは、ＥＣＣエンコーダ３０ａおよびＣＲＣエンコーダ３１２に電気的に接続される。記憶部インタフェース３０６は、バッファマネージャ３０８から受信した元データのＥＣＣ符号化およびＣＲＣ符号化を制御する。
【００６１】
図示の実施形態において、ＥＣＣエンコーダ３０ａはＥＣＣエンコーダのデジタルハードウェア実施態様を示している。ＥＣＣエンコーダ３０ａは、受信した元データを符号化する際に、［１６０，１２８，３２］リードソロモン符号を使用する。ＥＣＣエンコーダ３０ａは、元データを受信して、そのデータを処理し、リードソロモンＥＣＣで符号化されたデータを生成する。このリードソロモンＥＣＣ符号化データは、受信した元データとＥＣＣパリティデータとを含む。たとえば、１６０バイトの［１６０，１２８，３２］リードソロモンＥＣＣ符号化データは、１２８バイトの元データと、３２バイトのＥＣＣパリティデータとを含む。他の実施形態において、ＥＣＣエンコーダ３０ａは、組み込みプロセッサ３００によって実行されＥＣＣ符号化データを生成する、ソフトウェアまたはファームウェアのＥＣＣエンコーダであってもよい。また、他の実施形態において、ＥＣＣエンコーダ３０ａは、［１３２，１２８，４］リードソロモン符号やＢＣＨ符号等のような、別のＥＣＣ方式を用いて元データを符号化してもよい。
【００６２】
ＣＲＣエンコーダ３１２は、ＣＲＣエンコーダのデジタルハードウェア実施態様を示す。ＣＲＣエンコーダ３１２は、ＥＣＣ符号化データを受信し、ＣＲＣチェックサムを計算して、そのＣＲＣチェックサムをＥＣＣ符号化データと一緒にマクロアレイ１２６に格納する。元データとＥＣＣパリティデータとを含むＥＣＣ符号化データが、ＣＲＣエンコーダ３１２に供給される。ＣＲＣエンコーダ３１２は、元データとＥＣＣパリティデータとを含むＥＣＣ符号化データブロックのＣＲＣチェックサムを計算する。計算されたＣＲＣチェックサムは、ＥＣＣ符号化データと一緒にアレイ１２６に格納される。他の実施形態において、ＣＲＣチェックサムは元データについてのみ計算され、ＥＣＣパリティデータについては計算されない場合もある。また、他の実施形態において、ＣＲＣエンコーダ３１２は、組み込みプロセッサ３００により実行され、ＥＣＣ符号化データまたは元データに対するチェックサムを生成する、ソフトウェアまたはファームウェアのＣＲＣエンコーダであってもよい。記憶部インタフェース３０６は組み込みプロセッサ３００により制御され、ＥＣＣ符号化データおよびＣＲＣチェックサムをマクロアレイ１２６に書き込む。
【００６３】
書き込み動作の際、制御回路２２は、外部書き込みアドレスと元データとを受信し、元データをマクロアレイ１２６に書き込む。組み込みプロセッサ３００は、ホストインタフェース３０２から外部書き込みアドレスを取得し、組み込みプロセッサ３００の不揮発性メモリの中から対応するアレイ書き込みアドレスを見つける。このアレイ書き込みアドレスは、元データを書き込むことが可能なマクロアレイ１２６内の位置であり、外部書き込みアドレスのリマッピングを考慮に入れている。組み込みプロセッサ３００は、そのアレイ書き込みアドレスを記憶部インタフェース３０６に渡し、データをマクロアレイ１２６に書き込む。
【００６４】
ホストインタフェース３０２が受信した元データは、バッファマネージャ３０８に渡される。バッファマネージャ３０８は、受信したデータを記憶部インタフェース３０６およびＥＣＣエンコーダ３０ａに渡す。ＥＣＣエンコーダ３０ａがデータの処理に忙しい場合、例えば、前に受信したデータを符号化している最中であったり、ＣＲＣエンコーダ３１２に渡す前のデータを保持している場合、バッファマネージャ３０８は、受信データをバッファメモリ３１０に記憶、すなわちバッファリングする。バッファマネージャ３０８は、レディ／ビジー線を介して一連のハンドシェイクにより記憶部インタフェース３０６と通信し、記憶した元データを記憶部インタフェース３０６に転送する。バッファマネージャ３０８は、記憶部インタフェース３０６からの準備完了信号に応答してバッファメモリ３１０から記憶した元データを読み出し、その元データをＥＣＣエンコーダ３０ａに供給する。
【００６５】
ＥＣＣエンコーダ３０ａは、バッファマネージャ３０８から元データを受信し、［１６０，１２８，３２］リードソロモン符号を用いて元データを符号化し、ＥＣＣ符号化データを得る。ＥＣＣエンコーダ３０ａは、５１２バイトの元データセクタを４つの１２８バイト部分に分割することによって符号化する。元データの各１２８バイト部分は、ＥＣＣエンコーダ３０ａを用いて符号化され、３２バイトのＥＣＣパリティデータが得られる。１２８バイトの元データと３２バイトのＥＣＣパリティデータが、１６０バイトのコードワードを構成する。５１２バイトの元データは６４０バイトのＥＣＣ符号化データになり、それが１６０バイトの４つのコードワードとして記憶される。ＥＣＣエンコーダ３０ａは、ＥＣＣ符号化データを一度に１コードワードずつ、ＣＲＣエンコーダ３１２に渡す。
【００６６】
ＣＲＣエンコーダ３１２は、ＥＣＣ符号化データを受信し、各コードワードについてＣＲＣチェックサムを計算する。記憶部インタフェース３０６は、ＥＣＣ符号化データとＣＲＣチェックサムデータをマクロアレイ１２６の、組み込みプロセッサ３００によって供給されたアレイ書き込みアドレスに記憶する。
【００６７】
例示の実施形態において、ＥＣＣ符号化セクタは、コードワードとそれに対応するＣＲＣチェックサムからなる４対のペアとして記憶される。第１のコードワードを記憶した後、それに対応する第１のＣＲＣチェックサムが第２のコードワードとの間に記憶される。第２のコードワードを記憶した後、それに対応する第２のＣＲＣチェックサムが第３のコードワードとの間に記憶される。以下同様である。他の実施形態において、ＥＣＣ符号化セクタは、４つの元データ部分を記憶した後、対応する４つのＥＣＣパリティデータ部分を記憶し、その後に対応する４つのＣＲＣチェックサムを記憶するといったように、他の適当な配置で記憶される。
【００６８】
例示の実施形態では、ＣＲＣチェックサムは、マクロアレイ１２６から読み出したＥＣＣ符号化データの完全性のチェックに使用される。マクロアレイ１２６からコードワードとそれに対応するＣＲＣチェックサムを読み出す。マクロアレイ１２６から読み出したコードワードについて、新たなＣＲＣチェックサムを計算する。新たなＣＲＣチェックサムを読み出したＣＲＣチェックサムと比較する。２つのチェックサムが一致しない場合、そのＥＣＣ符号化データは破損しているものと考えられる。ＣＲＣチェックサムの計算と比較は非常に高速であり、ほとんど処理能力を必要としない。
【００６９】
他の実施形態では、記憶部インタフェース３０６がＣＲＣエンコーダ３１２を有しない場合もあり、ＥＣＣ符号化データのＣＲＣチェックサムを計算しない場合もある。ＥＣＣ符号化データは、ＣＲＣチェックサムを計算することなく、マクロアレイ１２６の、組み込みプロセッサ３００から供給されたアレイ書き込みアドレスに書き込まれる。マクロアレイ１２６から読み出したＥＣＣ符号化データの完全性チェックは、マクロアレイ１２６のパラメトリック値を評価することによって行う。一実施形態では、マクロアレイ１２６からのＥＣＣ符号化データの読み出し中に、そのＥＣＣ符号化データを記憶しているメモリセル２８の抵抗値を取得する。得られた抵抗値は所定のしきい値と比較される。得られた抵抗値がしきい値に違反する場合、ＥＣＣ符号化データは信頼性がないものと考えられる。メモリセル２８の物理的な故障や、読み出し回路の較正、およびノイズ問題などを含む系統的故障または偶発故障が原因で、得られる抵抗値は許容可能な範囲外になる場合がある。得られた抵抗値および／またはしきい値判定不良を示すフラグが、マクロアレイ１２６から記憶部インタフェース３０６に渡される。メモリセルの測定抵抗値を分類する回路および方法については、２００３年１２月３日に出願された「Memory Device」と題する米国特許出願第１０／７２７，２７３号に記載されている。
【００７０】
他の実施形態では、１ビットしか使用しない奇数／偶数パリティ計算により、マクロアレイ１２６から読み出したＥＣＣ符号化データの完全性をチェックすることもできる。さらに他の実施形態では、マクロアレイ１２６内のテストメモリセル２８から得たパラメトリック値をしきい値と比較するようにしてもよい。テストメモリセル２８は、マクロアレイ１２６の行および列に配置される。たとえば、マクロアレイ１２６の各行に１個のテストメモリセル２８を配置し、マクロアレイ１２６の各列に１個のテストメモリセル２８を配置することができる。抵抗値は、マクロアレイ１２６から読み出しを行うＥＣＣ符号化データを記憶しているメモリセル２８に対応する行および列にあるテストメモリセル２８から測定される。テストメモリセル２８の抵抗値の読みをしきい値と比較すると、マクロアレイ１２６から読み出したＥＣＣ符号化データを記憶しているメモリセル２８の信頼性が分かる。抵抗値の読みおよび／またはフラグは、記憶部インタフェース３０６に渡し、マクロアレイ１２６から読み出したＥＣＣ符号化データの信頼性を知らせる。
【００７１】
図７は、制御回路２２の例示的な実施形態におけるマクロアレイ１２６からデータを読み出す構成要素を示す図である。制御回路２２は、組み込みプロセッサ３００、ホストインタフェース３０２、バッファ回路３０４、および記憶部インタフェース３０６を備える。バッファ回路３０４は、バッファマネージャ３０８、バッファメモリ３１０、マルチプレクサ３３０、およびＥＣＣデコーダ３０ｂを備える。記憶部インタフェース３０６は、ＣＲＣデコーダ３３２を備える。他の実施形態において、ＥＣＣデコーダ３０ｂは記憶部インタフェース３０６の一部にしてもよい。
【００７２】
組み込みプロセッサ３００は読み出し動作を制御し、符号３１５で示すように、ホストインタフェース３０２、バッファ回路３０４、および記憶部インタフェース３０６と電気的に通信する。ホストインタフェース３０２は、Ｉ／Ｏパス４２を通して外部ソースに接続され、内部Ｉ／Ｏパス３１４を通してバッファマネージャ３０８に電気的に接続される。組み込みプロセッサ３００はホストインタフェース３０２を制御し、Ｉ／Ｏパス４２を介した外部ソースに対するデータの送受信を制御する。バッファ回路３０４は、内部Ｉ／Ｏパス３１４を通してホストインタフェースに接続され、導電パス３１６を通して記憶部インタフェース３０６に電気的に接続されたバッファマネージャ３０８を含む。さらに、バッファマネージャ３０８は、メモリ入力パス３１８を通してバッファメモリ３１０に接続され、マルチプレクサ出力パス３３４を通してマルチプレクサ３３０に電気的に接続される。バッファマネージャ３０８は、バッファメモリ３１０に対するデータの転送を制御する。
【００７３】
バッファメモリ３１０は、メモリ入力パス３１８を通してバッファマネージャ３０８に電気的に接続される。さらに、バッファメモリ３１０は、メモリ出力パス３３６を通してＥＣＣデコーダ３０ｂおよびマルチプレクサ３３０に電気的に接続される。バッファメモリ３１０は、バッファマネージャ３０８によって制御され、データをメモリ出力パス３３６に出力する。メモリ出力パス３３６に供給されたデータは、ＥＣＣデコーダ３０ｂによって処理されるか、あるいはマルチプレクサ３３０を通してバッファマネージャ３０８に直接渡される。
【００７４】
ＥＣＣデコーダ３０ｂはＥＣＣユニット３０の一部であり、バッファメモリ３１０およびマルチプレクサ３３０に電気的に接続される。さらに、ＥＣＣデコーダ３０ｂは、符号３１５で示すように組み込みプロセッサ３００と電気的に通信する。ＥＣＣデコーダ３０ｂの入力は、メモリ出力パス３３６を通してバッファメモリ３１０およびマルチプレクサ３３０に電気的に接続される。ＥＣＣデコーダ３０ｂの出力は、ＥＣＣデコーダ出力パス３３８を通してマルチプレクサ３３０に電気的に接続される。
【００７５】
このＥＣＣデコーダは、［１６０，１２８，３２］リードソロモンＥＣＣ復号化を実行するデジタルハードウェアのＥＣＣデコーダユニットである。ＥＣＣデコーダは、メモリ出力パス３３６を通してデータを受信し、プロセッサ３００により制御され、ＥＣＣ符号化データを復号する。他の実施形態において、ＥＣＣデコーダ３０ｂは、組み込みプロセッサ３００によって実行されるソフトウェアまたはファームウェアのＥＣＣデコーダであってよい。また、他の実施形態において、ＥＣＣデコーダは、［１３２，１２８，４］リードソロモン方式やＢＣＨ方式等のような、別のＥＣＣ復号方式を用いてもよい。
【００７６】
マルチプレクサ３３０は、２つのデータ入力のうちの一方を選択し、出力をバッファマネージャ３０８に供給する。一方のデータ入力は、メモリ出力パス３３６を通してバッファメモリ３１０およびＥＣＣデコーダ３０ｂの入力に電気的に接続される。他方のデータ入力は、ＥＣＣデコーダ出力パス３３８を通してＥＣＣデコーダ出力に電気的に接続される。マルチプレクサ３３０の出力は、マルチプレクサ出力パス３３４を通してバッファマネージャ３０８に電気的に接続され、マルチプレクサ３３０の選択入力は、マルチプレクサ選択パス３４０を通して記憶部インタフェース３０６に電気的に接続される。記憶部インタフェース３０６は、マルチプレクサ３３０の入力を選択する。
【００７７】
記憶部インタフェース３０６は、制御回路２２とマクロアレイ１２６の間の通信インタフェースである。記憶部インタフェース３０６は、バッファ回路３０４とマクロアレイ１２６の間にＣＲＣデコーダ３３２を有する。記憶部インタフェース３０６は、導電性パス３１６を通してバッファマネージャ３０８に接続され、マルチプレクサ選択パス３４０を通してマルチプレクサ３３０に電気的に接続される。さらに、記憶部インタフェース３０６は、導電性パス３２０を通してマクロアレイ１２６に電気的に接続される。
【００７８】
ＣＲＣデコーダ３３２は、ＣＲＣ復号・比較回路のデジタルハードウェア実施態様である。ＣＲＣデコーダ３３２は、ＣＲＣエンコーダ３１２と対をなすものである。他の実施形態において、ＣＲＣデコーダ３３２は、組み込みプロセッサ３００によって実行されるソフトウェアまたはファームウェアのＣＲＣデコーダであってよい。
【００７９】
記憶部インタフェース３０６は、組み込みプロセッサ３００により制御され、マクロアレイ１２６からＥＣＣ符号化データおよびＣＲＣチェックサムを読み出す。ＣＲＣデコーダ３３２は、マクロアレイ１２６からコードワード等のＥＣＣ符号化データと、それに対応するＣＲＣチェックサムとを受信する。ＣＲＣデコーダ３３２は、受信したＥＣＣ符号化データについて新たなＣＲＣチェックサムを計算する。ＣＲＣデコーダ３３２は、新たに計算したＣＲＣチェックサムを受信したＣＲＣチェックサムと比較し、一致または不一致の結果を得る。ＣＲＣデコーダ３３２は、ＣＲＣチェックサムを破棄し、比較結果を記憶部インタフェース３０６に渡す。記憶部インタフェース３０６は、ＥＣＣ符号化データをバッファマネージャ３０８に渡す。バッファマネージャ３０８は、ＥＣＣ符号化データをバッファメモリ３１０に記憶する。
【００８０】
ＣＲＣチェックサムが一致した場合、記憶部インタフェース３０６はマルチプレクサ３３０の選択入力を操作し、マルチプレクサ３３０の入力をバッファメモリ３１０の出力に電気的に接続する。ＣＲＣチェックサムの一致は、ＥＣＣ符号化データが破損していないことを意味し、ＥＣＣ符号化データをＥＣＣデコーダ３０ｂに通す必要がないことを意味する。
【００８１】
ＣＲＣチェックサムが一致しなかった場合、記憶部インタフェース３０６は、マルチプレクサ３３０の選択入力を操作して、ＥＣＣデコーダ３０ｂの出力の方を選択する。ＣＲＣチェックサムの不一致は、ＥＣＣ符号化データの破損を意味し、ＥＣＣ符号化データをＥＣＣデコーダ３０ｂを通して訂正する必要があることを意味する。ＥＣＣ符号化データをＥＣＣデコーダ３０ｂに通し、データを訂正する。そして、復元データと呼ばれる訂正された元データをバッファマネージャ３０８に渡す。
【００８２】
読み出し動作の際、制御回路２２は、マクロアレイ１２６から元データを読み出すために、外部読み出しアドレスを受信する。元データは、対応するＣＲＣチェックサムと一緒にＥＣＣ符号化データとしてマクロアレイ１２６に記憶されている。組み込みプロセッサ３００は、ホストインタフェース３０２から外部読み出しアドレスを取得し、組み込みプロセッサ３００の不揮発性メモリの中から対応するアレイ書き込みアドレスを見つける。このアレイ書き込みアドレスは、元データがＥＣＣ符号化データとして記憶されているマクロアレイ１２６内の位置である。組み込みプロセッサ３００は、そのアレイ書き込みアドレスを、マクロアレイ１２６内のそのアレイ書き込み書き込みアドレスからＥＣＣ符号化データおよびＣＲＣチェックサムを読み出す命令とともに、記憶部インタフェース３０６に供給する。
【００８３】
記憶部インタフェース３０６は、ＥＣＣ符号化データおよび対応するＣＲＣチェックサムをマクロアレイ１２６から読み出すため、アレイ書き込みアドレスをマクロアレイ１２６に供給する。マクロアレイ１２６はメモリセル２８を読み出し、ＥＣＣ符号化データとそれに対応するＣＲＣチェックサムを記憶部インタフェース３０６に返す。この読み出したＥＣＣ符号化データは、マクロアレイ１２６に書き込まれたＥＣＣ符号化データと同じでない場合がある。取得されたＥＣＣ符号化データは、破損データを含む場合がある。
【００８４】
記憶部インタフェース３０６は、取得されたＥＣＣ符号化データおよびＣＲＣチェックサムをＣＲＣデコーダ３３２に渡し、そのＥＣＣ符号化データの完全性をチェックする。ＣＲＣデコーダ３３２は、各コードワードについて新たなＣＲＣチェックサムを計算し、その新たなＣＲＣチェックサムを、そのコードワードに対応するＣＲＣチェックサムと比較する。ＣＲＣチェックサムの計算は、マクロアレイ１２６からデータを受信するときに実施され、比較結果は記憶部インタフェース３０６および組み込みプロセッサ３００に渡される。
【００８５】
記憶部インタフェース３０６は、取得されたＥＣＣ符号化データをバッファマネージャ３０８に渡す。バッファマネージャ３０８は、元データとＥＣＣパリティデータとを含むＥＣＣ符号化データをバッファメモリ３１０に記憶する。組み込みプロセッサ３００は、記憶部インタフェース３０６、バッファマネージャ３０８、およびＥＣＣデコーダ３０ｂを制御して、ＥＣＣ符号化データから正確な元データを得る。
【００８６】
組み込みプロセッサ３００は、バッファマネージャ３０８に対し、ＥＣＣ符号化データのうちの選択されたブロックをバッファメモリ３１０の出力およびメモリ出力パス３３６に供給するように命令する。ＥＣＣ符号化データのうちの選択されたブロックについてＣＲＣチェックサムが一致した場合、組み込みプロセッサ３００は記憶部インタフェース３０６を制御して、マルチプレクサ３３０の入力をバッファメモリ３１０の出力に接続する。メモリ出力パス３３６上のＥＣＣ符号化データは、マルチプレクサ３３０を通してバッファマネージャ３０８に渡される。プロセッサ３００は、バッファマネージャ３０８に対し、不要な、すなわち使用しないＥＣＣパリティデータを破棄するように命令する。バッファマネージャ３０８は、改変されなかったその元データをホストインタフェース３０２に、そして外部ソースに渡し、読み出し動作を完了する。
【００８７】
ＥＣＣ符号化データブロックのうちの選択されたブロックについてＣＲＣチェックサムが一致しなかった場合、プロセッサ３００はＥＣＣデコーダ３０ｂを制御し、メモリ出力パス３３６上のＥＣＣ符号化データを復号する。ＥＣＣデコーダ３０ｂは、ＥＣＣ符号化データを復号してデータを訂正し、訂正された元データ、すなわち復元データを得る。この復元データは、ＥＣＣデコーダ３０ｂからＥＣＣデコーダ出力パス３３８を通して、マルチプレクサ３３０に渡される。記憶部インタフェース３０６は、マルチプレクサ３３０の入力をＥＣＣデコーダ３０ｂの出力に接続する。復元データは、マルチプレクサ３３０を通してバッファマネージャ３０８に渡される。バッファマネージャ３０８は、復元データを訂正された元データとしてインタフェース３０２、そして外部ソースに渡して、読み出し動作を完了する。各ＥＣＣ符号化データブロックは、バッファマネージャ３０８を通してホストインタフェース３０２に渡される。バッファマネージャ３０８は、元データをホストインタフェース３０２へ渡す際に組み込みプロセッサ３００に割り込みをかけ、バッファ回路３０４が次のＥＣＣ符号化データブロックを処理する準備ができたことを知らせる。
【００８８】
例示の実施形態では、ＥＣＣデコーダ３０ｂは、ＥＣＣ符号化データの［１６０，１２８，３２］リードソロモン符号による訂正を実行する。他の実施形態では、［１３２，１２８，４］リードソロモン符号による訂正や、ＢＣＨ符号による訂正等のような、１または複数の他の適当なＥＣＣ方式を使用してよい。
【００８９】
他の実施形態では、記憶部インタフェース３０６はＣＲＣデコーダ３３２を有しない場合もあり、ＥＣＣ符号化データはＣＲＣチェックサムと一緒に記憶されない場合もある。代わりに、マクロアレイ１２６がメモリセル２８を読み出し、抵抗値を読み取る。抵抗値の読みはしきい値と比較される。抵抗の読みがしきい値に違反する場合、マクロアレイ１２６は、抵抗値の読みおよび／またはフラグ等のような信頼性が低いことを示すデータインジケータを、取得したＥＣＣ符号化データとともに記憶部インタフェース３０６に渡す。記憶部インタフェース３０６および制御回路２２全体は、その抵抗値の読みおよび／またはフラグを、ＣＲＣチェックサムが一致しないときと同様に処理する。取得された信頼性のないＥＣＣ符号化データは、ＥＣＣデコーダ３０ｂを通して元データに復元される。元データは、バッファマネージャ３０８およびホストインタフェース３０２に渡される。抵抗値の読みがしきい値に違反しない場合、取得された信頼性のあるＥＣＣ符号化データはバッファマネージャ３０８に渡される。その場合、不要なＥＣＣパリティデータは破棄され、元データがホストインタフェース３０２に渡される。
【００９０】
他の実施形態では、１ビットを使用した奇数／偶数パリティ計算により、マクロアレイ１２６から読み出したＥＣＣ符号化データの完全性をチェックすることもできる。さらに他の実施形態では、マクロアレイ１２６内のテストメモリセル２８から得たパラメトリック値をしきい値と比較するようにしてもよい。テストメモリセル２８は、マクロアレイ１２６の行および列に配置される。たとえば、マクロアレイ１２６の各行に１個のテストメモリセル２８を配置し、マクロアレイ１２６の各列に１個のテストメモリセル２８を配置することができる。抵抗値は、マクロアレイ１２６から読み出しを行うＥＣＣ符号化データを記憶しているメモリセル２８に対応する行および列にあるテストメモリセル２８から測定される。テストメモリセル２８の抵抗値の読みをしきい値と比較すると、マクロアレイ１２６から読み出したＥＣＣ符号化データの信頼性が分かる。抵抗値の読みおよび／またはフラグは、記憶部インタフェース３０６に渡し、マクロアレイ１２６から読み出したＥＣＣ符号化データの信頼性を知らせる。
【００９１】
図８は、元データ４００を含む、符号化データおよび復号化データの構造を示す図である。元データ４００は、５１２バイトのデータセクタである。元データ４００は、ホストインタフェース３０２に受信され、バッファマネージャ３０８に渡される。バッファマネージャ３０８は、受信した元データ４００をバッファメモリ３１０に記憶する。バッファマネージャ３０８は元データ４００を４つの同じ元データ部分４００ａ〜４００ｄに分割する。バッファマネージャ３０８は、記憶部インタフェース３０６と間の一連のハンドシェイクにより、４つの元データ部分４００ａ〜４００ｄをそれぞれ記憶部インタフェース３０６に渡す。
【００９２】
記憶部インタフェース３０６は、各元データ部分４００ａ〜４００ｄを受信し、受信した各元データ部分４００ａ〜４００ｄをＥＣＣエンコーダ３０ａに渡す。ＥＣＣエンコーダ３０ａは、各元データ部分４００ａ〜４００ｄを符号化し、対応するＥＣＣパリティデータ４０２ａ〜４０２ｄを生成する。ＥＣＣエンコーダ３０ａは、各元データ部分４００ａ〜４００ｄを、それに対応するＥＣＣパリティデータ４０２ａ〜４０２ｄと一緒にＣＲＣエンコーダ３１２に渡す。ＣＲＣエンコーダ３１２は、元データ部分４００ａ〜４００ｄとＥＣＣパリティデータ４０２ａ〜４０２ｄの各ペアについて、ＣＲＣチェックサム４０４ａ〜４０４ｄを計算する。記憶部インタフェース３０６は、元データ部分４００ａ〜４００ｄ、ＥＣＣパリティデータ４０２ａ〜４０２ｄ、およびＣＲＣチェックサム４０４ａ〜４０４ｄを、符号化データ構造４０６のように編成する。
【００９３】
符号化データ構造４０６は、４つのコードワード４０８ａ〜４０８ｄを含む。各コードワード４０８ａ〜４０８ｄは、元データ部分４００ａ〜４００ｄとそれに対応するＥＣＣパリティデータ４０２ａ〜４０２ｄとを含む。４つのコードワード４０８ａ〜４０８ｄは、ＣＲＣチェックサム４０４ａがコードワード４０８ａとコードワード４０８ｂの間にくるように、ＣＲＣチェックサム４０４ａ〜４０４ｃで互いに隔離される。ＣＲＣチェックサム４０４ｂはコードワード４０８ｂとコードワード４０８ｃの間に配置され、ＣＲＣチェックサム４０４ｃはコードワード４０８ｃとコードワード４０８ｄの間に配置される。ＣＲＣチェックサム４０４ｄは対応するコードワード４０８ｄの隣に配置される。
【００９４】
符号化データ構造４０６は、各元データ部分４００ａ〜４００ｄを、それに対応するＥＣＣパリティデータ４０２ａ〜４０２ｄおよびＣＲＣチェックサム４０４ａ〜４０４ｄの隣に有する。符号化データ構造４０６は、ＣＲＣチェックサムを有するＥＣＣ符号化データとしてマクロアレイ１２６に書き込まれる。
【００９５】
読み出し動作の際、符号化データ構造４０６はマクロアレイ１２６から読み出され、記憶部インタフェース３０６によって受信される。受信された符号化データ構造４０６におけるデータの完全性をチェックするため、コードワード４０８ａ〜４０８ｄを一度に１つずつ、ＣＲＣデコーダ３３２に渡す。各コードワード４０８ａ〜４０８ｄについて、新たなＣＲＣチェックサムを計算する。新たなチェックサムを取得したＣＲＣチェックサム４０４ａ〜４０４ｄと比較し、ＥＣＣ符号化データが破損しているか否かを判断する。記憶部インタフェース３０６は、取得したＣＲＣチェックサム４０４ａ〜４０４ｄを破棄し、コードワード４０８ａ〜４０８ｄをＣＲＣ復号化データ構造４１０としてバッファマネージャ３０８に渡す。バッファマネージャ３０８は、コードワード４０８ａ〜４０８ｄをバッファメモリ３１０に記憶する。
【００９６】
コードワード４０８ａ〜４０８ｄは、ＥＣＣデコーダ３０ｄに渡されるか、またはバッファマネージャ３０８に直接渡される。ＥＣＣデコーダ３０ｄに渡されたコードワード４０８ａ〜４０８ｄは復号され、誤り訂正され、元データが復元される。ＥＣＣデコーダ３０ｄは、ＥＣＣパリティデータ４０２ａ〜４０２ｄを破棄し、復元データをバッファマネージャ３０８に渡す。信頼性のあるコードワード４０８ａ〜４０８ｄは、復号することなくバッファマネージャ３０８に渡される。バッファマネージャ３０８は、不要なＥＣＣパリティデータ４０２ａ〜４０２ｄを破棄し、元データを得る。復元データおよび元データは、バッファマネージャ３０８からホストインタフェース３０２に渡され、そして外部ソースに復元／元データ４１２として渡される。
【００９７】
図９は、元データ４００を含む他の一連の符号化データ構造および復号化データ構造を示す図である。元データ４００は、５１２バイトのデータセクタである。元データ４００は、ホストインタフェース３０２により受信され、バッファマネージャ３０８に渡される。バッファマネージャ３０８は、受信した元データ４００をバッファメモリ３１０に記憶する。バッファマネージャ３０８は、記憶部インタフェース３０６との間の一連のハンドシェイクにより、４つの同じ元データ部分４００ａ〜４００ｄを記憶部インタフェース３０６に渡す。
【００９８】
記憶部インタフェース３０６は、各元データ部分４００ａ〜４００ｄを受信し、受信した各元データ部分４００ａ〜４００ｄをＥＣＣエンコーダ３０ａに渡す。ＥＣＣエンコーダ３０ａは、各元データ部分４００ａ〜４００ｄを符号化し、対応するＥＣＣパリティデータ４０２ａ〜４０２ｄを生成する。ＥＣＣエンコーダ３０ａは、各元データ部分４００ａ〜４００ｄを、それに対応するＥＣＣパリティデータ４０２ａ〜４０２ｄと一緒にＣＲＣエンコーダ３１２へ渡す。ＣＲＣエンコーダ３１２は、元データ部分４００ａ〜４００ｄとＥＣＣパリティデータ４０２ａ〜４０２ｄの各ペアについて、ＣＲＣチェックサム４０４ａ〜４０４ｄを計算する。記憶部インタフェース３０６は、元データ部分４００ａ〜４００ｄ、ＥＣＣパリティデータ４０２ａ〜４０２ｄ、およびＣＲＣチェックサム４０４ａ〜４０４ｄを、符号化データ構造４２０のように編成する。
【００９９】
符号化データ構造４２０は、隣接配置された４つの元データ部分４００ａ〜４００ｄを含む。４つのＥＣＣパリティデータ部分４０２ａ〜４０２ｄも隣接配置され、４つの元データ部分４００ａ〜４００ｄの隣に配置される。４つのＣＲＣチェックサム４０４ａ〜４０４ｄも隣接配置され、４つのＥＣＣパリティデータ部分４０２ａ〜４０２ｄの隣に配置される。符号化データ構造４２０は、ＣＲＣチェックサム４０４ａ〜４０４ｄを有するＥＣＣ符号化データとしてマクロアレイ１２６に書き込まれる。
【０１００】
読み出し動作の際、符号化データ構造４２０はマクロアレイ１２６から読み出され、記憶部インタフェース３０６によって受信される。受信された符号化データ構造４２０におけるデータの完全性をチェックするため、元データ部分４００ａ〜４００ｄとそれに対応するＥＣＣパリティデータ４０２ａ〜４０２ｄをＣＲＣデコーダ３３２に渡す。たとえば、元データ部分４００ａとＥＣＣパリティデータ４０２ａがＣＲＣデコーダ３３２に渡される。ＣＲＣデコーダ３３２は新たなＣＲＣチェックサムを計算し、その新たなＣＲＣチェックサムを、対応する取得したＣＲＣチェックサム４０４ａ〜４０４ｄと比較する。この例の場合、計算した新たなＣＲＣチェックサムはＣＲＣチェックサム４０４ａと比較される。新たなＣＲＣチェックサムと取得したＣＲＣチェックサム４０４ａ〜４０４ｄを比較し、ＥＣＣ符号化データが破損しているか否かを判断する。ＣＲＣデコーダ３３２および記憶部インタフェース３０６はＣＲＣチェックサム４０４ａ〜４０４ｄを破棄し、ＣＲＣ復号化データ構造４２２をバッファマネージャ３０８に渡す。バッファマネージャ３０８はＣＲＣ復号化データ構造４２２をバッファメモリ３１０に記憶する。
【０１０１】
ＥＣＣパリティデータ４０２ａ〜４０２ｄを有する元データ部分４００ａ〜４００ｄは、ＥＣＣデコーダ３０ｂに渡されるか、あるいはバッファマネージャ３０８に直接渡される。ＥＣＣデコーダ３０ｂに渡された元データ部分４００ａ〜４００ｄおよびＥＣＣパリティデータ４０２ａ〜４０２ｄは復号され、誤り訂正されて、元データが復元される。ＥＣＣデコーダはＥＣＣパリティデータ４０２ａ〜４０２ｄを破棄し、復元したデータをバッファマネージャ３０８に渡す。バッファマネージャ３０８に直接渡された信頼性のある元データ４００ａ〜４００ｄおよびＥＣＣパリティデータ４０２ａ〜４０２ｄは、復号化されない。その場合、ＥＣＣパリティデータ４０２ａ〜４０２は破棄される。元データ４００ａ〜４００ｄは、復元／元データ構造４２４の中で復元データと組み合わせられる。復元／元データ構造２４２は、バッファマネージャ３０８からホストインタフェース３０２に渡され、そして外部ソースに渡される。
【図面の簡単な説明】
【０１０２】
【図１】本発明による磁気メモリの例示的な一実施形態を示す図である。
【図２】アレイ部分の例示的な一実施形態を示す図である。
【図３】アレイ部分の例示的な実施形態の断面を示す図である。
【図４】別の磁気メモリを示す図である。
【図５】アレイに記憶されているＥＣＣ符号化データの例示的な論理データ構造を示す図である。
【図６】データをマクロアレイに書き込む場合の、制御回路の例示的な実施形態の構成要素を示す図である。
【図７】マクロアレイからデータを読み出す場合の、制御回路の例示的な実施形態の構成要素を示す図である。
【図８】元データを含む例示的な符号化データ構造および復号化データ構造を示す図である。
【図９】元データを含む別の符号化データ構造および復号化データ構造のセットを示す図である。
【符号の説明】
【０１０３】
２０  磁気メモリ
２２  制御回路
２６  アレイ
３０ｂ  ＥＣＣデコーダ
１２６  マクロアレイ
３０８  バッファマネージャ
３１０  バッファメモリ
【図１】
2005085464.tif 000003
【図２】
2005085464.tif 000004
【図３】
2005085464.tif 000005
【図４】
2005085464.tif 000006
【図５】
2005085464.tif 000007
【図６】
2005085464.tif 000008
【図７】
2005085464.tif 000009
【図８】
2005085464.tif 000010
【図９】
2005085464.tif 000011