(57)【要約】【課題】書き込み動作の柔軟性を向上可能なメモリシステムを実現する。【解決手段】メモリシステムは、磁気記憶線を含む磁気メモリと、磁気メモリを制御するコントローラとを具備する。磁気メモリは、コントローラから受信した第１のデータの値と磁気記憶線の第１の層の磁区の磁化方向とに基づいて、磁気記憶線の各層に格納されている磁区が第１方向に１層分移動されるように、第１の層に格納されている磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する第１の磁区を第１の層に入れる。コントローラから第１のコマンドを受信した場合、磁気メモリは、第１の追加の磁区と前記第１の追加の磁区とは逆の磁化方向を有する第２の追加の磁区とを第１の磁気記憶線に入れる。磁気メモリは、コントローラから第２のコマンドを受信した場合、第２の追加の磁区と第１の追加の磁区を読み出して前記第１の磁区の磁化方向を決定する。【選択図】図２５
2020149741.tif 000002
【特許請求の範囲】
【請求項１】
磁区を格納可能な層を複数有する第１の磁気記憶線を含む磁気メモリと、
前記磁気メモリを制御するコントローラとを具備し、
前記磁気メモリは、
前記コントローラから受信した第１のデータの値と前記第１の磁気記憶線の一端側に位置する第１の層の磁区の磁化方向とに基づいて、前記第１の磁気記憶線の各層に格納されている磁区が前記第１の磁気記憶線の一端側から他端側に向かう第１方向に１層分移動されるように、前記第１の層の磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する第１の磁区を前記第１の層に入れ、
前記コントローラから第１のコマンドを受信した場合、前記第１の磁気記憶線の各層に格納されている磁区が前記第１方向に２層分移動されるように、前記第１の磁区の磁化方向から定められる磁化方向を有する第１の追加の磁区と前記第１の追加の磁区とは逆の磁化方向を有する第２の追加の磁区とを前記第１の磁気記憶線に入れ、
前記コントローラから第２のコマンドを受信した場合、前記第１の磁気記憶線の各層に格納されている磁区を前記第１の磁気記憶線の他端側から一端側に向かう第２方向に２層分移動させて前記第２の追加の磁区と前記第１の追加の磁区を読み出し、読み出された前記第２の追加の磁区と前記第１の磁区とに基づいて前記第１の磁区の磁化方向を決定するように構成されている、メモリシステム。
【請求項２】
前記磁気メモリは、前記コントローラから受信した第２のデータの値と前記決定された前記第１の磁区の磁化方向とに基づいて、前記第１の磁気記憶線の各層に格納されている磁区が前記第１方向に１層分移動されるように、前記決定された前記第１の磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する第２の磁区を前記第１の層に入れるように構成されている請求項１記載のメモリシステム。
【請求項３】
前記第１のデータが第１の値である場合、前記第１の磁区は前記第１の層に格納されている前記磁区の磁化方向と逆の磁化方向を有し、前記第１のデータが第２の値である場合、前記第１の磁区は前記第１の層に格納されている前記磁区の磁化方向と同じ磁化方向を有する請求項１記載のメモリシステム。
【請求項４】
前記磁気メモリは、各々が１以上の磁気記憶線を含む複数のブロックを含み、
前記コントローラは、前記第１の磁気記憶線を含む第１のブロックへの書き込み途中に別のブロックに対する処理を開始する場合、前記磁気メモリに前記第１のコマンドを発行し、前記第１のブロックに対する書き込み動作を再開する場合、前記磁気メモリに前記第２のコマンドを発行するように構成されている請求項１記載のメモリシステム。
【請求項５】
前記磁気メモリは、読み出された前記第２の追加の磁区の磁化方向に起因する磁気抵抗効果素子の抵抗状態に応じた第１のサンプリング値と読み出された前記第１の追加の磁区の磁化方向に起因する前記磁気抵抗効果素子の抵抗状態に応じた第２のサンプリング値との大小関係に基づいて、前記第１の磁区の磁化方向を決定するように構成されている請求項１記載のメモリシステム。
【請求項６】
前記磁気メモリは、誘導磁場を発生するフィールド線と、前記フィールド線に流す電流の向きを制御して前記第１の磁気記憶線に入れるべき磁区を形成する誘導磁場を前記フィールド線に発生させる書き込み制御回路と、前記フィールド線に流す前記電流の向きを示す磁気データを格納するラッチ回路とを含み、
前記磁気メモリは、読み出された前記第２の追加の磁区の磁化方向に起因する磁気抵抗効果素子の抵抗状態に応じた第１のサンプリング値と読み出された前記第１の追加の磁区の磁化方向に起因する前記磁気抵抗効果素子の抵抗状態に応じた第２のサンプリング値との大小関係に基づいて、前記第１の磁区を形成するための誘導磁場を前記フィールド線に発生させるために使用した電流の向きを特定し、前記磁気データが前記特定された電流の向きを示すように前記ラッチ回路の内容を復元するように構成されている請求項１記載のメモリシステム。
【請求項７】
前記磁気メモリは、
最初の１層分のデータを書き込むための第１のプログラムコマンドを前記コントローラから受信した場合、予め決められた固定の磁化方向を有する初期の磁区を前記第１の磁気記憶線の前記第１の層に入れ、前記第１のプログラムコマンドに関連付けられたデータの値と前記初期の磁区の磁化方向とに基づいて、前記第１の磁気記憶線の各層の磁区が前記第１方向に１層分移動されるように、前記初期の磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する磁区を前記第１の磁区として前記第１の層に入れるように構成されている請求項１記載のメモリシステム。
【請求項８】
前記磁気メモリは、
前記第１の磁気記憶線の中間層のいずれか一層に１層分のデータを書き込むための第２のプログラムコマンドを前記コントローラから受信した場合、前記第２のプログラムコマンドに関連付けられたデータの値と前記第１の磁気記憶線の前記第１の層に最後に入れられた磁区の磁化方向とに基づいて、前記第１の磁気記憶線の各層の磁区が前記第１方向に１層分移動されるように、前記第１の層に最後に入れられた前記磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する磁区を前記第１の磁区として前記第１の層に入れるように構成されている請求項１記載のメモリシステム。
【請求項９】
磁区を格納可能な層を複数有する第１の磁気記憶線を含む磁気メモリと、
前記磁気メモリを制御するコントローラとを具備し、
前記磁気メモリは、
前記コントローラから受信した第１のデータの値と前記第１の磁気記憶線の一端側に位置する第１の層の磁区の磁化方向とに基づいて、前記第１の磁気記憶線の各層に格納されている磁区が前記第１の磁気記憶線の一端側から他端側に向かう第１方向に１層分移動されるように、前記第１の層の磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する第１の磁区を前記第１の層に入れ、
前記コントローラから第１のコマンドを受信した場合、前記第１の磁気記憶線の各層に格納されている磁区が前記第１方向に１層分移動されるように、前記第１の磁区の磁化方向とは逆の磁化方向を有する追加の磁区を前記第１の層に入れ、
前記コントローラから第２のコマンドを受信した場合、前記第１の磁気記憶線の各層に格納されている磁区を前記第１の磁気記憶線の他端側から一端側に向かう第２方向に２層分移動させて前記追加の磁区と前記第１の磁区を読み出し、読み出された前記追加の磁区と前記第１の磁区とに基づいて、前記第１の磁区の磁化方向を決定し、前記第１の磁気記憶線の各層に格納されている磁区が前記第１方向に１層分移動されるように、前記決定された磁化方向を有する前記第１の磁区を前記第１の層に書き戻すように構成されている、メモリシステム。
【請求項１０】
前記コントローラから受信した第２のデータの値と前記決定された前記第１の磁区の磁化方向とに基づいて、前記第１の磁気記憶線の各層に格納されている磁区が前記第１方向に１層分移動されるように、前記決定された前記第１の磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する第２の磁区を前記第１の層に入れるように構成されている請求項９記載のメモリシステム。
【請求項１１】
前記磁気メモリは、各々が１以上の磁気記憶線を含む複数のブロックを含み、
前記コントローラは、前記第１の磁気記憶線を含む第１のブロックへの書き込み途中に別のブロックに対する処理を開始する場合、前記磁気メモリに前記第１のコマンドを発行し、前記第１のブロックに対する書き込み動作を再開する場合、前記磁気メモリに前記第２のコマンドを発行するように構成されている請求項９記載のメモリシステム。
【請求項１２】
磁区を格納可能な層を複数有する第１の磁気記憶線を含む磁気メモリと、
前記磁気メモリを制御するコントローラとを具備し、
前記磁気メモリは、
前記コントローラから受信した第１のデータの値と前記第１の磁気記憶線の一端側に位置する第１の層の磁区の磁化方向とに基づいて、前記第１の磁気記憶線の各層に格納されている磁区が前記第１の磁気記憶線の一端側から他端側に向かう第１方向に１層分移動されるように、前記第１の層の磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する第１の磁区を前記第１の層に入れ、
前記コントローラから第１のコマンドを受信した場合、前記第１の磁気記憶線の各層に格納されている磁区が前記第１方向に１層分移動されるように、予め決められた固定の磁化方向を有する初期の磁区を前記第１の磁気記憶線の前記第１の層に入れ、
前記コントローラから受信される第２のデータの値と前記固定の磁化方向と同じ磁化方向とに基づいて、前記第１の磁気記憶線の各層に格納されている磁区が前記第１方向に１層分移動されるように、前記固定の磁化方向と同じ磁化方向または逆の磁化方向を有する第２の磁区を前記第１の層に入れるように構成されている、メモリシステム。
【請求項１３】
前記磁気メモリは、各々が１以上の磁気記憶線を含む複数のブロックを含み、
前記コントローラは、前記第１の磁気記憶線を含む第１のブロックへの書き込み途中に別のブロックに対する処理を開始する場合に前記磁気メモリに前記第１のコマンドを発行し、前記第１のブロックに対する書き込み動作を再開する場合、前記磁気メモリに、前記第１の磁気記憶線の中間層のいずれか一層に１層分のデータを書き込むための第２のプログラムコマンドを発行するように構成されている請求項１２記載のメモリシステム。
【請求項１４】
前記磁気メモリは、各々が１以上の磁気記憶線を含む複数のブロックを含み、
前記磁気メモリは、
最初の１層分のデータを書き込むための第１のプログラムコマンドを前記コントローラから受信した場合、予め決められた固定の磁化方向を有する初期の磁区を前記第１の磁気記憶線の前記第１の層に入れ、前記第１のプログラムコマンドに関連付けられたデータの値と前記初期の磁区の磁化方向とに基づいて、前記第１の磁気記憶線の各層の磁区が前記第１方向に１層分移動されるように、前記初期の磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する磁区を前記第１の磁区として前記第１の層に入れ、
前記第１の磁気記憶線の中間層のいずれか一層に１層分のデータを書き込むための第２のプログラムコマンドを前記コントローラから受信した場合、前記第２のプログラムコマンドに関連付けられたデータの値と前記第１の磁気記憶線の前記第１の層に最後に入れられた磁区の磁化方向とに基づいて、前記第１の磁気記憶線の各層の磁区が前記第１方向に１層分移動されるように、前記第１の層に最後に入れられた前記磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する磁区を前記第１の磁区として前記第１の層に入れるように構成され、
前記コントローラは、前記第１の磁気記憶線を含む第１のブロックへの書き込み途中に別のブロックに対する処理を実行した後に前記第１のブロックに対する書き込み動作を再開する場合、前記磁気メモリに前記第１のコマンドとして前記第１のプログラムコマンドを発行するように構成されている請求項１２記載のメモリシステム。
【請求項１５】
磁区を格納可能な層を複数有する第１の磁気記憶線を含む磁気メモリと、
前記磁気メモリを制御するコントローラとを具備し、
前記磁気メモリは、
前記コントローラから受信した第１のデータの値と前記第１の磁気記憶線の一端側に位置する第１の層の磁区の磁化方向とに基づいて、前記第１の磁気記憶線の各層に格納されている磁区が前記第１の磁気記憶線の一端側から他端側に向かう第１方向に１層分移動されるように、前記第１の層の磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する第１の磁区を前記第１の層に入れ、
前記コントローラから第３のコマンドを受信した場合、前記第１の磁区の磁化方向を示す磁気データを格納している第１のラッチ回路の内容を第２のラッチ回路にコピーし、
前記コントローラからプログラムコマンドを受信した場合、前記第２のラッチ回路の内容に基づいて、前記第１の層に移動した前記第１の磁区の磁化方向を決定し、前記コントローラから受信した第２のデータの値と前記決定された前記第１の磁区の磁化方向とに基づいて、前記第１の磁気記憶線の各層に格納されている磁区が前記第１方向に１層分移動されるように、前記決定された前記第１の磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する第２の磁区を前記第１の層に入れるように構成されている、メモリシステム。
【請求項１６】
前記磁気メモリは、各々が１以上の磁気記憶線を含む複数のブロックを含み、
前記コントローラは、前記第１の磁気記憶線を含む第１のブロックへの書き込み途中に別のブロックに対する処理を開始する場合、前記磁気メモリに前記第３のコマンドを発行し、前記第１のブロックに対する書き込み動作を再開する場合、前記磁気メモリに前記プログラムコマンドを発行するように構成されている請求項１５記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、磁気メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、ＮＡＮＤ型フラッシュメモリを備えるソリッドステートドライブ（ＳＳＤ）が知られている。
【０００３】
最近では、次世代の不揮発性メモリとして、磁気メモリが開発され始めている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１６−１４３４３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、書き込み動作の柔軟性を向上可能なメモリシステムを提供することである。
【課題を解決するための手段】
【０００６】
実施形態によれば、メモリシステムは、磁区を格納可能な層を複数有する磁気記憶線を含む磁気メモリと、前記磁気メモリを制御するコントローラとを具備する。前記磁気メモリは、前記コントローラから受信した第１のデータの値と前記第１の磁気記憶線の一端側に位置する第１の層の磁区の磁化方向とに基づいて、前記第１の磁気記憶線の各層に格納されている磁区が前記第１の磁気記憶線の一端側から他端側に向かう第１方向に１層分移動されるように、前記第１の層の磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する第１の磁区を前記第１の層に入れる。前記磁気メモリは、前記コントローラから第１のコマンドを受信した場合、前記第１の磁気記憶線の各層に格納されている磁区が前記第１方向に２層分移動されるように、前記第１の磁区の磁化方向から定められる磁化方向を有する第１の追加の磁区と前記第１の追加の磁区とは逆の磁化方向を有する第２の追加の磁区とを前記第１の磁気記憶線に入れる。前記磁気メモリは、前記コントローラから第２のコマンドを受信した場合、前記第１の磁気記憶線の各層に格納されている磁区を前記第１の磁気記憶線の他端側から一端側に向かう第２方向に２層分移動して前記第２の追加の磁区と前記第１の追加の磁区を読み出し、読み出された前記第２の追加の磁区と前記第１の磁区とに基づいて前記第１の磁区の磁化方向を決定する。
【図面の簡単な説明】
【０００７】
【図１】実施形態に係るメモリシステムの構成例を示すブロック図。
【図２】実施形態のメモリシステムに含まれる磁気メモリ内のメモリセルアレイの構成例を示す図。
【図３】図２のメモリセルアレイの回路構成例を示す図。
【図４】図２のメモリセルアレイの構成例を示す斜視図。
【図５】図２のメモリセルアレイに含まれる磁気記憶線が有する複数の磁区及び情報記憶方法を示す図。
【図６】磁気メモリ内の読み出し制御回路の構成例を示す回路図。
【図７】図６の読み出し制御回路に含まれるセンスアンプの構成例を示す回路図。
【図８】磁気メモリにおいて実行される読み出し動作の手順を示すフローチャート。
【図９】磁気メモリにおいて実行される書き込み動作に関連する回路の構成例を示す図。
【図１０】磁気メモリにおいて実行される書き込み動作の手順を示すフローチャート。
【図１１】磁気メモリにおいて実行される読み出し動作を示す図。
【図１２】読み出し動作のシーケンスを示すタイミングチャート。
【図１３】図１２のタイミングチャートによって示される読み出し動作における磁気メモリ内のデータの変化を示す図。
【図１４】磁気メモリにおいて実行される書き込み動作の一部分を示す図。
【図１５】磁気メモリにおいて実行される書き込み動作の続き部分を示す図。
【図１６】磁気メモリに発行される３種類のプログラムコマンドを示す図。
【図１７】ブロックの単位で実行される書き込み動作の手順を示すフローチャート。
【図１８】初層プログラム動作のシーケンスを示すタイミングチャート。
【図１９】中間層プログラム動作のシーケンスを示すタイミングチャート。
【図２０】最終層プログラム動作のシーケンスを示すタイミングチャート。
【図２１】図１８のタイミングチャートによって示される初層プログラム動作における磁気メモリ内のデータの変化を示す図。
【図２２】ブロック内の任意の層への書き込みの完了時に別のブロックに対する動作に遷移可能とする書き込み動作の手順の概略を示すフローチャート。
【図２３】磁気メモリの回路構成の例を示すブロック図。
【図２４】図２３の磁気メモリのカラム制御回路内に含まれる複数のユニット回路の一つの構成例を示すブロック図。
【図２５】磁気記憶線に最後にプログラムされた層の磁化方向を再現するための２層分の追加の磁区（フタ用磁区）を磁気記憶線に書き込む動作を示す図。
【図２６】２層分のフタ用磁区を読み出し、最後にプログラムされた層の磁化方向を示す磁気データを復元する動作を示す図。
【図２７】フタ用磁区を追加するコマンドの例を示す図。
【図２８】フタ用磁区の取り除き、且つプログラムするコマンドの例を示す図。
【図２９】初層プログラム動作とフタ用磁区を追加する動作を示すタイミングチャート。
【図３０】中間層プログラム動作とフタ用磁区を追加する動作を示すタイミングチャート。
【図３１】フタ用磁区の取り除き、且つプログラムするための初層プログラムコマンドに応じて実行される処理シーケンスを示すタイミングチャート。
【図３２】フタ用磁区の取り除き、且つプログラムする中間層プログラムコマンドに応じ実行される処理シーケンスを示すタイミングチャート。
【図３３】フタ用磁区の取り除き、且つプログラムする最終層プログラムコマンドに応じて実行される処理シーケンスを示すタイミングチャート。
【図３４】図３０のタイミングチャートによって示される動作における磁気メモリ内のデータの変化を示す図。
【図３５】図３２のタイミングチャートによって示される動作における磁気メモリ内のデータの変化を示す図。
【図３６】２層分のフタ用磁区を追加し、これら２層分のフタ用磁区を読み出す動作の手順を示すフローチャート。
【図３７】中間層に磁区を書き込み、１層分のフタ用磁区を追加する動作における磁気メモリ内のデータの変化を示す図。
【図３８】１層分のフタ用磁区を読み出す動作における磁気メモリ内のデータの変化を示す図。
【図３９】１層分のフタ用磁区を追加し、１層分のフタ用磁区と１層分のライトデータ用磁区とを読み出し、１層分のライトデータ用磁区を書き戻す動作の手順を示すフローチャート。
【図４０】初層プログラムコマンドを使用して、固定の磁化方向を有する磁区をフタ用磁区として追加する動作を示す図。
【図４１】固定の磁化方向を有する磁区をフタ用磁区として追加する動作の手順を示すフローチャート。
【図４２】最後にプログラムされた層の磁化方向を示す磁気データを保持するデータラッチ回路（ＭＤＬ）をリセットしない読み出し動作を示すタイミングチャート。
【図４３】図４２のタイミングチャートによって示される読み出し動作における磁気メモリ内のデータの変化を示す図。
【図４４】第１のＭＤＬの内容を第２のＭＤＬにコピーするコマンドの例を示す図。
【図４５】磁気メモリ内の複数のブロック間で共有される２つのＭＤＬを示す図。
【図４６】初層プログラム動作とコピーコマンド処理を示すタイミングチャート。
【図４７】中間層プログラム動作とコピーコマンド処理を示すタイミングチャート。
【図４８】中間層プログラム動作とコピーコマンド処理における磁気メモリ内のデータの変化を示す図。
【発明を実施するための形態】
【０００８】
以下、図面を参照して、実施形態を説明する。  
図１は第１実施形態に係るメモリシステム１の構成例を示す。メモリシステム１はコントローラ（以下、メモリコントローラと称する）２と磁気メモリ３とを含む。メモリシステム１はホスト（ホストデバイス）４と接続可能であり、図１ではメモリシステム１がホスト４に接続されている状態を示している。ホスト４は、パーソナルコンピュータ、サーバ、携帯端末、等の電子機器である。
【０００９】
磁気メモリ３は、ブロックと呼ばれるある容量単位で、データの書き込みおよび読み出しを後入れ先出し方式（先入れ後出し方式とも称される）で行うように構成されている。すなわち、磁気メモリ３は、複数のブロックを含む。各ブロックは、シフトレジスタの複数のステージとして機能する複数の層を含む。換言すれば、一つの層はシフトレジスタ内のステージの一つとして機能する。磁気メモリ３は、個々の層に格納されている磁区（磁化ともいう）を最初のステージに対応するレイヤから最後のステージに対応するレイヤに向かう第１の方向または第１の方向とは逆の第２の方向に層単位でシフトさせることによって、各ブロックに対するデータの書き込みおよび読み出しを後入れ先出し方式で行う。この磁気メモリ３は、磁壁移動メモリとも称される。
【００１０】
メモリシステム１は、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）として実現されてもよいし、メモリコントローラ２と磁気メモリ３が１つのパッケージとして構成されるメモリカードとして実現されてもよい。
【００１１】
メモリコントローラ２は、ホスト４から受信されるライト要求に従って磁気メモリ３へのデータの書込みを制御する。この場合、メモリコントローラ２は、データの書き込み（プログラム）を指示するプログラムコマンドを、アドレスおよびデータと一緒に磁気メモリ３に送出する。また、ホスト４から受信されるリード要求に従って磁気メモリ３からのデータの読み出しを制御する。この場合、メモリコントローラ２は、データの読み出しを指示するリードコマンドを、アドレスと一緒に磁気メモリ３に送出する。
【００１２】
メモリコントローラ２は、ＳｏＣのような回路によって実現されていてもよい。メモリコントローラ２は、ホストインタフェース２１、メモリインタフェース２２、制御部２３、符号化／復号部（Ｅｎｃｏｄｅｒ／Ｄｅｃｏｄｅｒ）２４、およびデータバッファ２５を備える。ホストインタフェース２１、メモリインタフェース２２、制御部２３、符号化／復号部（Ｅｎｃｏｄｅｒ／Ｄｅｃｏｄｅｒ）２４、およびデータバッファ２５は、内部バス２０に接続されている。
【００１３】
ホストインタフェース２１は、ホストとデバイスとの間のインタフェース規格に従った処理を実施し、ホスト４から受信した要求、ユーザデータなどを内部バス２０に出力する。また、ホストインタフェース２１は、磁気メモリ３から読み出されたユーザデータ、制御部２３から受信した応答などをホスト４へ送信する。なお、本実施形態では、ホスト４からの書込み要求に関連付けられたデータをユーザデータと呼ぶ。
【００１４】
メモリインタフェース２２は、制御部２３からの指示に基づいて、磁気メモリ３へデータを書き込む書き込み動作を行う。また、制御部２３からの指示に基づいて、メモリインタフェース２２は、磁気メモリ３からデータを読み出す読み出し動作を行う。
【００１５】
制御部２３は、メモリシステム１の各構成要素を統括的に制御する。制御部２３は、ＣＰＵ（プロセッサ）によって実現されてもよい。
【００１６】
制御部２３は、ホスト４からホストインタフェース２１経由で要求を受けた場合に、その要求に従った制御を行う。例えば、制御部２３は、ホスト４から受信したライト要求に従って、磁気メモリ３へのライトデータ（ユーザデータ、パリティ等）の書き込みをメモリインタフェース２２へ指示する。また、制御部２３は、ホスト４から受信したリード要求に従って、磁気メモリ３からのデータ（ユーザデータ、パリティ等）の読み出しをメモリインタフェース２２へ指示する。ここで、パリティとは、ユーザデータを符号化することによって得られる誤り訂正符号（ＥＣＣ）を意味する。
【００１７】
また、制御部２３は、ホスト４からライト要求を受信した場合、データバッファ２５に蓄積されるユーザデータが書き込まれるべき磁気メモリ３上の記憶領域（メモリ領域）を決定する。すなわち、制御部２３は、ユーザデータの書き込み先を管理する。制御部２３は、ホスト４から受信したライト要求により指定された論理アドレスとこの論理アドレスに対応するユーザデータが格納された磁気メモリ３上の記憶領域を示す物理アドレスとの間のマッピングを、アドレス変換テーブルとして機能するルックアップテーブル（ＬＵＴ）を使用して管理する。ルックアップテーブル（ＬＵＴ）はメモリシステム１内のＲＡＭ（ダイナミックＲＡＭ（ＤＲＡＭ）またはスタティックＲＡＭ（ＳＲＡＭ）に格納されていてもよいし、磁気メモリ３に不揮発に格納されていてもよい。後者においては、メモリシステム１がパワーオンされた時にＬＵＴを磁気メモリ３からメモリシステム１内のＲＡＭにロードしてもよい。
【００１８】
また、制御部２３は、ホスト４からリード要求を受信した場合、リード要求により指定された論理アドレスを上述のＬＵＴ（アドレス変換テーブル）を用いて物理アドレスに変換し、該物理アドレスからのデータの読み出しをメモリインタフェース２２へ指示する。
【００１９】
データバッファ２５は、ホスト４から受信したユーザデータを一時的に格納する。また、データバッファ２５は、磁気メモリ３から読み出されたユーザデータを一時的に格納する。また、データバッファ２５は、ユーザデータが符号化されて生成された符号化データ（ユーザデータ＋ＥＣＣ）を一時格納する。データバッファ２５は、例えば、上述のＲＡＭ（ＳＲＡＭまたはＤＲＡＭ）で構成される。
【００２０】
ホスト４から送信されるユーザデータは内部バス２０に転送されてデータバッファ２５に格納される。符号化部／復号部２４は、磁気メモリ３に書き込むべきデータを符号化して符号化データ（ユーザデータ＋ＥＣＣ）を生成する。符号化としてはどのような符号化を用いてもよいが、例えばＲＳ（Ｒｅｅｄ  Ｓｏｌｏｍｏｎ）符号化、ＢＣＨ（Ｂｏｓｅ  Ｃｈａｕｄｈｕｒｉ  Ｈｏｃｑｕｅｎｇｈｅｍ）符号化、ＬＤＰＣ（Ｌｏｗ  Ｄｅｎｓｉｔｙ  Ｐａｒｉｔｙ  Ｃｈｅｃｋ）符号化を用いることができる。符号化部／復号部２４は、符号化部（Ｅｎｃｏｄｉｎｇ  Ｕｎｉｔ）２６と復号部（Ｄｅｃｏｄｉｎｇ  Ｕｎｉｔ）２７を備える。
【００２１】
説明を簡単にするために、本実施形態では、磁気メモリ３が１つの磁気メモリチップを含む場合を想定するが、本実施形態は、磁気メモリ３が複数の磁気メモリチップを含む構成にも適用可能である。
【００２２】
図２は、磁気メモリ３に含まれるメモリセルアレイの構成例を示す。以下では、理解しやすくするために特定の数値を使用してメモリセルアレイの構成例を説明するが、これら数値はあくまで例示であり、本実施形態はこれら特定の数値に限定されず、任意の数値が本実施形態のメモリセルアレイの構成に適用可能である。
【００２３】
メモリセルアレイは、複数のブロックを含む。複数のブロックの各々は、後入り先出し方式でデータの書き込みおよび読み出しを行う単位である。
【００２４】
ここでは、各ブロックが、層Ｌ１〜層Ｌｎの計ｎ層を含む場合を想定する。これらｎ層が上述のシフトレジスタの複数のステージとしてそれぞれ機能する。層Ｌｎはシフトレジスタの最初のステージに対応し、層Ｌ１はシフトレジスタの最後のステージに対応する。
【００２５】
一つのブロックの層Ｌ１〜Ｌｎは、このブロックに含まれる一本以上の磁気記憶線ＭＭＬによって実現することができる。
【００２６】
ここでは、各ブロックが５１２本の磁気記憶線ＭＭＬを含む場合を想定する。磁気記憶線ＭＭＬは磁気シフトレジスタであり、例えば、一方向に延びた磁性体によって実現される。磁気記憶線ＭＭＬは、磁性線、磁性細線、または磁気記憶柱と称されることもある。磁気記憶線ＭＭＬは磁区をそれぞれ格納可能な複数の層を含む。これら層は、ブロックの層Ｌ１〜層Ｌｎの要素である。例えば、ブロックの層Ｌｎは５１２本の磁気記憶線ＭＭＬそれぞれの一端側に位置する５１２個の層の集合を含み、ブロックの層Ｌ１は５１２本の磁気記憶線ＭＭＬそれぞれの他端側に位置する５１２個の層の集合を含む。
【００２７】
図２においては、縦方向に連なる複数の楕円の集合が一つの磁気記憶線ＭＭＬを示している。一つの楕円は磁気記憶線ＭＭＬ内の一つの層を示す。５１２本の磁気記憶線ＭＭＬの組み合わせが一つのブロックを構成する。５１２本の磁気記憶線ＭＭＬを跨がるように横方向に延びた角丸四角は、ブロックの層Ｌ１〜Ｌｎを表している。
【００２８】
各磁気記憶線ＭＭＬは、先に書き込まれたデータは次にデータが書き込まれると奥側にその記憶位置が移動し、奥のデータは、後にプログラムしたデータを読み出してからでないと読み出すことができない、という後入れ先出し方式でアクセスされる。
【００２９】
ブロックにデータを書き込む書き込み動作においては、このブロックの個々の層に格納されているデータ（ここでは、５１２個の磁区）は最初のステージに対応する層Ｌｎから最後のステージに対応する層Ｌ１に向かう第１方向（図２において上から下に向かう方向）に層単位でシフトされる。
【００３０】
ブロックからデータを読み出す動作においては、このブロックの個々の層に格納されているデータ（ここでは、５１２個の磁区）は第１方向とは逆の第２方向（図２において下から上に向かう方向）に層単位でシフトされる。
【００３１】
図３は、図２のメモリセルアレイの回路構成例を示す。
【００３２】
メモリセルアレイは、複数のビット線ＢＬ、複数のソース線ＳＬ、複数のフィールド線ＦＬを含む。ビット線ＢＬとソース線ＳＬとの間に、磁気記憶線ＭＭＬが電気的に接続される。一つのブロックは、例えば、このブロックに含まれる磁気記憶線ＭＭＬの数と同数のビット線ＢＬと、このブロックに含まれる磁気記憶線ＭＭＬの数と同数のフィールド線ＦＬと、１本のソース線ＳＬとを含む。
【００３３】
磁気記憶線ＭＭＬの一端は、磁気抵抗効果素子（あるいは抵抗変化素子、可変抵抗素子）１１、及び選択素子（セレクタ）１２を順に介してビット線ＢＬに接続される。すなわち、磁気記憶線ＭＭＬの一端は磁気抵抗効果素子１１の一端に接続され、磁気抵抗効果素子１１の他端は選択素子１２の一端に接続される。選択素子１２の他端はビット線ＢＬに接続される。さらに、磁気記憶線ＭＭＬの他端はソース線ＳＬに接続される。
【００３４】
磁気抵抗効果素子１１は、例えば、磁化状態に応じて抵抗が変化するＭＴＪ（Ｍａｇｎ
ｅｔｉｃ ＴｕｎｎｅｌＪｕｎｃｔｉｏｎ）素子を含む。選択素子１２は、例えば、閾値電圧以上の電圧が印加されると低抵抗状態となり、闘値電圧より低い電圧が印加されると高抵抗状態となる素子を含む。選択素子１２は、例えば２端子間スイッチ素子であってもよい。２端子間に印加する電圧が閾値以下の場合、そのスイッチ素子は高抵抗状態、例えば電気的に非導通状態である。２端子間に印加する電圧が闘値以上の場合、スイッチ素子は低抵抗状態、例えば電気的に導通状態に変わる。スイッチ素子は、電圧がどちらの極性でもこの機能を有していてもよい。このスイッチ素子には、Ｔｅ、ＳｅおよびＳからなる群より選択された少なくとも１種以上のカルコゲン元素を含む。または、上記カルコゲン元素を含む化合物であるカルコグナイドを含んでいてもよい。このスイッチ素子は他にも、Ｂ、Ａｌ、Ｇａ、１ｎ、Ｃ、Ｓｉ、Ｇｅ、Ｓｎ、Ａｓ、Ｐ、Ｓｂからなる群より選択された少なくとも１種以上の元素を含んでもよい。
【００３５】
例えば、一方向に沿って配列された複数の磁気記憶線ＭＭＬ、磁気抵抗効果素子１１及び選択素子１２の集合は、選択素子１２の他端にて同一のビット線ＢＬに接続される。さらに、この一方向に沿って配列された複数の磁気記憶線ＭＭＬの一端の近傍には、１本のフィールド線ＦＬが配設されている。各フィールド線ＦＬは誘導磁場を発生させるために使用される。
【００３６】
一方、この一方向と交差する方向に沿って配列された複数の磁気記憶線ＭＭＬ、磁気抵抗効果素子１１及び選択素子１２の集合は、磁気記憶線ＭＭＬの他端にて同一のソース線ＳＬに接続される。
【００３７】
図４は、メモリセルアレイの構成例を示す斜視図である。
【００３８】
図４において、互いに直交する２方向をＸ方向及びＹ方向とし、これらＸ方向及びＹ方向（ＸＹ面）に対して直交し、磁気記憶線ＭＭＬが延伸した方向をＺ方向とする。
【００３９】
Ｙ方向に延伸したソース線ＳＬは、Ｘ方向に複数配列される。ソース線ＳＬ上には、磁気記憶線ＭＭＬ、磁気抵抗効果素子１１、及び選択素子１２がＺ方向に配列されている。磁気抵抗効果素子１１は、例えばＭＴＪ素子で構成される。ＭＴＪ素子は、磁性層１１Ｒ、非磁性層１１Ｎ、及び磁性層１１Ｓを含む。ＭＴＪ素子の詳細については後述する。
【００４０】
メモリセルアレイの構成を詳述すると、ソース線ＳＬ上には、磁気記憶線ＭＭＬが設けられる。磁気記憶線ＭＭＬの一端上には、磁性層１１Ｓが設けられる。磁性層１１ＳはＹ方向にある距離だけ延伸しており、延伸した磁性層１１Ｓ上には非磁性層１１Ｎ及び磁性層１１Ｒが順に設けられる。磁性層１１Ｒ上には、選択素子１２を介してビット線ＢＬが設けられる。なお、磁気記憶線ＭＭＬの一端上に配置され且つＹ方向に延伸する磁性層上に、ＭＴＪ素子の磁性層１１Ｓが設けられてもよい。この場合、磁気記憶線ＭＭＬの一端上に配置され且つＹ方向に延伸する磁性層は、ＭＴＪ素子の磁性層１１Ｓの一部として機能し、磁性層１１Ｓ’としても参照される。
【００４１】
Ｚ方向に設けられた磁気記憶線ＭＭＬ、磁気抵抗効果素子１１、及び選択素子１２は、Ｘ及びＹ方向に行列状に配列される。Ｘ方向に配列された選択素子１２上にはビット線ＢＬが設けられる。さらに、磁性層１１Ｓ上には、フィールド線（書き込み線）ＦＬが設けられる。
【００４２】
一つのブロックは、１本のソース線ＳＬと、ソース線ＳＬ上に配置されたｂ本の磁気記憶線ＭＭＬと、ｂ本の磁気記憶線ＭＭＬに対応するｂ本のビット線ＢＬとを含む。各磁気記憶線ＭＭＬ内の層の数がｎの場合、一つのブロックは、ｂ×ｎの磁区を格納することができる。ブロックに対するデータの書き込みおよび読み出しは、このブロックに含まれるｂ本の磁気記憶線ＭＭＬに対して層単位で並列に実行される。ｂが５１２であるケースにおいては、ブロックの１層分に対応するデータサイズは６４バイトである。なお、メモリセルアレイに含まれるソース線ＳＬの数はｓである。ｓ、ｎ、ｂは、通常、２以上の整数であるが、原理的には、ｓ、ｎ、ｂは１以上の整数であってもよい。
【００４３】
以下に、ＭＴＪ素子について詳述する。ＭＴＪ素子は、磁性層１１Ｒ、非磁性層１１Ｎ、及び磁性層１１Ｓを含む。磁性層１１Ｒと磁性層１１Ｓ間には非磁性層１１Ｎが配置される。磁性層１１Ｒは参照層として機能し、磁性層１１Ｓは記憶層として機能する。非磁性層１１Ｎはトンネルバリアとして機能する。なお、ＭＴＪ素子は、さらなる層を含んで
いてもよい。
【００４４】
磁性層（記憶層）１１Ｓは、ある軸に沿う方向に磁化されている。例えば、磁性層１１Ｓの磁化方向は、層１１Ｓ、１１Ｒ、及び１１Ｎの境界面に対して垂直な方向に沿って安定している。磁性層１１Ｓの磁化方向は、フィールド線ＦＬによって発生される誘導磁場または磁気記憶線ＭＭＬから読み出される磁区により、反転されることが可能である。
【００４５】
磁性層（参照層）１１Ｒは、方向が固定または不変の磁化を有し、例えば、磁性層（記憶層）１１Ｓの保磁力より大きい保磁力を有する。磁性層１１Ｒの磁化方向が「固定されている」または「不変である」とは、磁性層（記憶層）１１Ｓの磁化を反転させる、磁気記憶線ＭＭＬの磁区の磁化方向によって、磁性層１１Ｒの磁化方向が反転しないことを意味する。
【００４６】
磁性層１１Ｒ、非磁性層１１Ｎ、及び磁性層１１Ｓの組により、磁気抵抗効果の現象を生じさせることができる。具体的には、磁性層１１Ｓの磁化方向が磁性層１１Ｒの磁化方向と同じ（平行）であると、ＭＴＪ素子は、最小の抵抗値を示す。一方、磁性層１１Ｓの磁化方向が磁性層１１Ｒの磁化方向と逆（反平行）であると、ＭＴＪ素子は、最大の抵抗値を示す。磁気抵抗効果素子（ＭＴＪ素子）１１は、磁性層（記憶層）１１Ｓと磁性層（参照層）１１Ｒの磁化方向の相対関係が平行であるとき低抵抗状態を、反平行であるとき高抵抗状態をそれぞれ取ることができる。
【００４７】
次に、図５を参照して、磁気記憶線ＭＭＬが有する複数の磁区及び情報記憶方法を説明する。
【００４８】
図５は、磁気記憶線ＭＭＬのＡ−Ａ’線に沿った断面構造と、磁気記憶線ＭＭＬが有する磁区（あるいは磁化）の一例と、これら磁区を用いた情報記憶方法を示す。
【００４９】
磁気記憶線ＭＭＬは、例えば、図４に示したようなＺ方向に延伸した線状の強磁性体から成る。線状の強磁性体は、例えば、図５に示すように、中央部が中空の筒状（例えば、円筒状）であってもよいし、あるいは中央部に中空がない形状であってもよい。強磁性体は、Ｚ方向に沿って複数の磁区を有する。例えば、磁気記憶線ＭＭＬは、円筒状の磁性薄膜の断面にＺ方向に沿って磁区（磁化）Ｍ１，Ｍ２，Ｍ３，…を有する。換言すけば、磁気記憶線ＭＭＬは、Ｚ方向に沿って複数の層を有し、これら層の各々が磁区を保持する。
【００５０】
各層は、一方向、あるいは一方向と反対の方向の磁区（あるいは磁化状態）を保持可能である。各層は、図５に示すように、円筒の外側からＮ極、Ｓ極の順序で形成される磁化方向、または、これと反対に、円筒の外側からＳ極、Ｎ極の順序で形成される磁化方向を有する。
【００５１】
なお、磁化方向は、磁気記憶線ＭＭＬが延伸するＺ方向に対して垂直方向であってもよいし（垂直磁化膜）、あるいは、磁気記憶線ＭＭＬが延伸するＺ方向であってもよい（面内磁化膜）。
【００５２】
本実施形態では、一つの磁区の磁化方向が情報の”１”または”０”を表すのではなく、Ｚ方向に隣接する２つの磁区の磁化方向が互いに異なるか同じであるかに応じて情報の”１”または”０”が表される。つまり、Ｚ方向において、隣接する２つ磁区の磁化方向が互いに異なる場合は、第１の値のデータを記憶されていると判定される。一方、隣接する２つの磁区の磁化方向が同じである場合は、第２の値のデータが記憶されていると判定される。例えば、図５において、磁区Ｍ１と磁区Ｍ２は、磁化方向が同じであるため“０”を記憶する。一方、磁区Ｍ２と磁区Ｍ３は、磁化方向が異なるため“１”を記憶する。
【００５３】
このように、本実施形態では、単一の磁区の磁化方向が“１”または“０”に対応するのではなく、同じ磁化方向を有する隣接する２つの磁区の組み合わせがデータの“０”に対応し、互いに異なる磁化方向を有する隣接する２つの磁区の組み合わせがデータの“１”に対応する。なお、同じ磁化方向を有する隣接する２つの磁区の組み合わせがデータの“１”に対応し、互いに異なる磁化方向を有する隣接する２つの磁区の組み合わせがデータの“０”に対応してもよい。
【００５４】
したがって、一つの磁気記憶線ＭＭＬがｎ層を含む場合には、一つの磁気記憶線ＭＭＬは最大でｎ−１ビットのデータを格納することができる。
【００５５】
磁気記憶線ＭＭＬにデータを書き込む書き込み動作においては、磁気メモリ３は、書き込むべきデータの値と磁気記憶線ＭＭＬの一端側に位置する層Ｌｎに現在格納されている磁区の磁化方向とに基づいて、磁気記憶線ＭＭＬの層Ｌｎ〜層Ｌ２の各層に格納されている磁区が磁気記憶線ＭＭＬの一端側から他端側に向かう方向に１層分移動されるように、磁気記憶線ＭＭＬの一端側に位置する層Ｌｎに現在格納されている磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する新たな磁区を磁気記憶線ＭＭＬの層Ｌｎに入れる。具体的には、磁気メモリ３は、以下の書き込み動作を実行する。
【００５６】
磁気メモリ３は、まず、書き込むべきデータの値と層Ｌｎに格納されている磁区の磁化方向とに基づいて、層Ｌｎに格納されている磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する磁区を、磁気記憶線ＭＭＬの一端上の磁性層１１Ｓに形成する。例えば、書き込むべきデータの値が“１”の場合には、層Ｌｎの磁区の磁化方向と逆の磁化方向を有する磁区が磁性層１１Ｓに形成される。一方、書き込むべきデータの値が“０”の場合には、層Ｌｎの磁区の磁化方向と同じ磁化方向を有する磁区が磁性層１１Ｓに形成される。
【００５７】
そして、磁気メモリ３は、磁気記憶線ＭＭＬの各層の磁区を層Ｌｎから層Ｌ１に向かう方向に１層分移動させる。これにより、磁性層１１Ｓの磁区が層Ｌｎに伝搬して層Ｌｎに押し込まれると共に、磁気記憶線ＭＭＬの層Ｌｎ〜層Ｌ２の各層に格納されている磁区が磁気記憶線ＭＭＬの一端側から他端側に向かう方向に１層分移動する。例えば、層Ｌｎに存在していた磁区は層Ｌｎ−１に移動し、層Ｌｎ−１に存在していた磁区は層Ｌｎ−２に移動する。
【００５８】
このように、本実施形態では、隣接する２つの磁区の磁化方向の組み合わせがデータの“０”または“１”に対応するので、磁気メモリ３は、書き込むべきデータの値と層Ｌｎに格納されている磁区の磁化方向とに基づいて、層Ｌｎに格納されている磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する磁区を磁気記憶線ＭＭＬの層Ｌｎに入れる（プログラム）。これにより、たとえば、“０”が記憶されている場合には、隣接する２つの磁区が読み出された時に磁気抵抗効果素子１１の抵抗は変化しない。一方、たとえば、“１”が記憶されている場合には、磁気記憶線ＭＭＬの隣接する２つの磁区が読み出された時に磁気抵抗効果素子１１の抵抗が変化する。
【００５９】
このため、隣接する２つの磁区が読み出された時に磁気抵抗効果素子１１の抵抗状態が変化したかどうかに基づいて、つまり、最初に読み出された磁区の磁化方向に起因する磁気抵抗効果素子１１の抵抗状態に応じた第１のサンプリング値と次に読み出された磁区の磁化方向に起因する磁気抵抗効果素子１１の抵抗状態に応じた第２のサンプリング値との差が閾値よりも大きいか否かに基づいて、データの“０”または“１”を判定することが可能となる。
【００６０】
したがって、ある一つの磁区が読み出された時の磁気抵抗効果素子１１の抵抗そのものが低抵抗／高抵抗のいずれであるかを精度よく判定する必要がなくなり、安定した読み出し動作を実行することが可能となる。
【００６１】
図６は、磁気メモリ３内の読み出し制御回路の構成例を示す。
【００６２】
読み出し制御回路は、キャパシタＣ１１，Ｃ１２、センスアンプ４７、大小判定回路４８、パストランジスタ４４，４５、マルチプレクサ４２、ｐＭＯＳトランジスタＰＴ２，ＰＴ２１、及びｎＭＯＳトランジスタＮＴ１，ＮＴ２を含む。
【００６３】
以下に、図６に示した読み出し制御回路の回路接続を述べる。センスアンプ４７の第１入力端子は、キャパシタＣ１１の第１電極、パストランジスタ４４の第１端子に接続される。センスアンプ４７の第２入力端子は、キャパシタＣ１２の第１電極、パストランジスタ４５の第１端子に接続される。
【００６４】
ｐＭＯＳトランジスタＰＴ２１は読み出し電流を一定にするための定電流回路として機能する。ｐＭＯＳトランジスタＰＴ２１のソースには電源端子ＶＤＤに接続され、ｐＭＯＳトランジスタＰＴ２１のゲートはｐＭＯＳトランジスタＰＴ２１のドレインに接続される。ｐＭＯＳトランジスタＰＴ２１のゲートとドレインとの間の接続点（センスノード：ＳＮ）は、パストランジスタ４４，４５の各々の第２端子に接続される。センスノードＳＮは、ｎＭＯＳトランジスタＮＴ１，ＮＴ２を介してマルチプレクサ４２の入力端子にも接続される。
【００６５】
ｎＭＯＳトランジスタＮＴ１のゲートにはクランプ信号ＶＣＬＭＰが入力される。ｎＭＯＳトランジスタＮＴ１は、選択素子１２、磁気抵抗効果素子１１、及び磁気記憶線ＭＭＬに過剰な電流及び電圧が供給されるのを防止するクランプ回路として機能する。ｎＭＯＳトランジスタＮＴ２のゲートにはリードイネーブル信号ＲＥが入力される。リードイネーブル信号ＲＥがイネーブル状態に遷移すると、ｎＭＯＳトランジスタＮＴ２がオンする。これにより、読み出し電流が選択素子１２、磁気抵抗効果素子１１、及び磁気記憶線ＭＭＬに供給される。この結果、センスノードＳＮの電圧値が磁気抵抗効果素子１１の抵抗状態の変化に応じて変化し、磁気抵抗効果素子１１の低抵に対応する状態信号ＶＥＶＡＬが得られる。
【００６６】
キャパシタＣ１１，Ｃ１２の第２電極は電源端子ＶＤＤに接続される。パストランジスタ４４のゲートには、サンプル信号ＳＭＰ１，ＳＭＰ１ｎがそれぞれ入力される。パストランジスタ４５のゲートには、サンプル信号ＳＭＰ２，ＳＭＰ２ｎがそれぞれ入力される。初回の読み出し動作においては、パストランジスタ４４がオンする。これにより、状態信号ＶＥＶＡＬの電圧値がキャパシタＣ１１にサンプリング電圧ＶＳＭＰ１として蓄積される。次の読み出し動作においては、パストランジスタ４５がオンする。これにより、状態信号ＶＥＶＡＬの電圧値がキャパシタＣ１２にサンプリング電圧ＶＳＭＰ２として蓄積される。さらに次の読み出し動作においては、パストランジスタ４４がオンする。これにより、状態信号ＶＥＶＡＬの電圧値がキャパシタＣ１１にサンプリング電圧ＶＳＭＰ１として蓄積される。
【００６７】
ｐＭＯＳトランジスタＰＴ２は磁気記憶線ＭＭＬの各層の磁区を磁気記憶線ＭＭＬの他端側から一端側に向かう方向（層Ｌ１から層Ｌｎに向かう方向）にシフトさせるためのシフト電流（読み出しシフト電流）を磁気記憶線ＭＭＬに供給するために使用される。ｐＭＯＳトランジスタＰＴ２のソースにはシフト電圧ＶＳが供給され、ｐＭＯＳトランジスタＰＴ２のゲートにはシフト信号ＳＦＴｎが入力される。
【００６８】
マルチプレクサ４２は、磁気記憶線ＭＭＬに供給されるシフト電流を読み出しシフト電流と書き込みシフト電流との間で切り替える。書き込みシフト電流は磁気記憶線ＭＭＬの各層の磁区を磁気記憶線ＭＭＬの一端側から他端側に向かう方向（層Ｌｎから層Ｌ１に向かう方向）にシフトさせるためのシフト電流である。書き込みシフト電流は磁気メモリ３内の書き込み回路に含まれている。
【００６９】
読み出し動作においては、まず、シフト電流（読み出しシフト電流）が磁気記憶線ＭＭＬに供給され、磁気記憶線ＭＭＬの各層の磁区が磁気記憶線ＭＭＬの他端側から一端側に向かう方向に移動される。この結果、磁気記憶線ＭＭＬの層Ｌｎに格納されている磁区が磁気記憶線ＭＭＬから読み出されて磁性層１１Ｓに移動し、磁気記憶線ＭＭＬの他の各層の磁区もその上層に移動する。そして、ｎＭＯＳトランジスタＮＴ１がオンされ、読み出し電流が選択素子１２、磁気抵抗効果素子１１、及び磁気記憶線ＭＭＬに供給される。この結果、磁性層１１Ｓに移動した磁区の磁化方向に起因する磁気抵抗効果素子１１の低抗状態に応じた状態信号ＶＥＶＡＬが得られる。状態信号ＶＥＶＡＬはキャパシタＣ１１にサンプリング電圧ＶＳＭＰ１（第１のサンプリング値とも称する）として蓄積される。
【００７０】
次の読み出し動作においても、シフト電流（読み出しシフト電流）が磁気記憶線ＭＭＬに供給され、これによって磁気記憶線ＭＭＬの層Ｌｎの磁区が磁性層１１Ｓに移動し、磁気記憶線ＭＭＬの他の各層の磁区もその上層に移動する。この結果、もともと磁気記憶線ＭＭＬの層Ｌｎ−１に存在していた磁区に対応する状態信号ＶＥＶＡＬがキャパシタＣ１２にサンプリング電圧ＶＳＭＰ２（第２のサンプリング値とも称する）として蓄積される。
【００７１】
センスアンプ４７は、サンプリング電圧ＶＳＭＰ１とサンプリング電圧ＶＳＭＰ２とを比較し、ＶＳＭＰ１とＶＳＭＰ２との差が閾値（オフセット電圧ＶＯＦＳＴ）以下である場合は“０”を出力データＤＯＵＴとして出力する。一方、ＶＳＭＰ１とＶＳＭＰ２との差が閾値（オフセット電圧ＶＯＦＳＴ）より大きい場合、センスアンプ４７は、“１”を出力データＤＯＵＴとして出力する。
【００７２】
大小判定回路４８は、サンプリング電圧ＶＳＭＰ１とサンプリング電圧ＶＳＭＰ２とを比較し、ＶＳＭＰ１とＶＳＭＰ２の大小関係が、ＶＳＭＰ１＞ＶＳＭＰ２であるか、ＶＳＭＰ１＜ＶＳＭＰ２であるかを判定する。ＶＳＭＰ１とＶＳＭＰ２との差が閾値（オフセット電圧ＶＯＦＳＴ）より大きい場合、大小判定回路４８の判定結果は、読み出された２つの磁区それぞれの磁化方向を特定するために使用することができる。
【００７３】
図７は、センスアンプの構成例を示す。
【００７４】
センスアンプ４７は、ｐＭＯＳトランジスタＰＴ１１〜ＰＴ１８、ｎＭＯＳトランジスタＮＴ１１〜ＮＴ１６、及び論理和回路４３を含む。
【００７５】
ｐＭＯＳトランジスタＰＴ１１のソースには、電源電圧ＶＤＤが供給される。ｐＭＯＳトランジスタＰＴ１１のドレインは、ｎＭＯＳトランジスタＮＴ１１のドレイン及びゲートに接続される。ｎＭＯＳトランジスタＮＴ１１のソースは、基準電圧端ＶＳＳに接続される。
【００７６】
ｐＭＯＳトランジスタＰＴ１２，ＰＴ１３のソースには、電源電圧ＶＤＤが供給される。ｐＭＯＳトランジスタＰＴ１２のドレインは、ｎＭＯＳトランジスタＮＴ１２のドレイン、ｐＭＯＳトランジスタＰＴ１３のドレイン、ｐＭＯＳトランジスタＰＴ１４及びｎＭＯＳトランジスタＮＴ１３のゲートに接続される。ｎＭＯＳトランジスタＮＴ１２のソースは、基準電圧端ＶＳＳに接続される。
【００７７】
ｐＭＯＳトランジスタＰＴ１４のソースには、電源電圧ＶＤＤが供給される。ｐＭＯＳトランジスタＰＴ１４のドレインは、ｎＭＯＳトランジスタＮＴ１３のドレイン、及び論理和回路４３の第１入力端子に入力される。ｎＭＯＳトランジスタＮＴ１３のソースは、基準電圧端ＶＳＳに接続される。
【００７８】
ｐＭＯＳトランジスタＰＴ１５のソースには、電源電圧ＶＤＤが供給される。ｐＭＯＳトランジスタＰＴ１５のドレインは、ｎＭＯＳトランジスタＮＴ１４のドレイン及びゲートに接続される。ｎＭＯＳトランジスタＮＴ１４のソースは、基準電圧端ＶＳＳに接続される。
【００７９】
ｐＭＯＳトランジスタＰＴ１６，ＰＴ１７のソースには、電源電圧ＶＤＤが供給される。ｐＭＯＳトランジスタＰＴ１６のドレインは、ｎＭＯＳトランジスタＮＴ１５のドレイン、ｐＭＯＳトランジスタＰＴ１７のドレイン、ｐＭＯＳトランジスタＰＴ１８及びｎＭＯＳトランジスタＮＴ１６のゲートに接続される。ｎＭＯＳトランジスタＮＴ１５のソースは、基準電圧端ＶＳＳに接続される。
【００８０】
ｐＭＯＳトランジスタＰＴ１８のソースには、電源電圧ＶＤＤが供給される。ｐＭＯＳトランジスタＰＴ１８のドレインは、ｎＭＯＳトランジスタＮＴ１６のドレイン、及び論理和回路４３の第２入力端子に入力される。ｎＭＯＳトランジスタＮＴ１６のソースは、基準電圧端ＶＳＳに接続される。
【００８１】
ｐＭＯＳトランジスタＰＴ１１，ＰＴ１６のゲートは、センスアンプ４６の第１入力端子に相当する。ｐＭＯＳトランジスタＰＴ１１，ＰＴ１６のゲートには、電圧ＶＳＡＭＰ１が入力される。ｐＭＯＳトランジスタＰＴ１２，ＰＴ１５のゲートは、センスアンプ４６の第２入力端子に相当する。ｐＭＯＳトランジスタＰＴ１２，ＰＴ１５のゲートには、電圧ＶＳＡＭＰ２が入力される。ｐＭＯＳトランジスタＰＴ１３，ＰＴ１７のゲートには、オフセット電圧ＶＯＦＳＴが入力される。さらに、論理和回路４３の出力端子から出力データＤＯＵＴが出力される。
【００８２】
なお、オフセット電圧ＶＯＦＳＴが入力されるｐＭＯＳトランジスタＰＴ１３，ＰＴ１７は、素子の温度特性及び製造のばらつき等により、状態信号の比較時に生じる誤りを補正するために設けられる。具体的には、センスアンプ４６は、電圧ＶＳＡＭＰ１と電圧ＶＳＡＭＰ２の差が閾値電圧以下であれば例えば“Ｌ”（＝データ“０”）を出力し、閾値電圧より大きければ例えば“Ｈ”（＝データ“１”）を出力する。オフセット電圧ＶＯＦＳＴは、このときの閾値電圧を設定する。
【００８３】
図８のフローチャートは、磁気メモリ３において実行される読み出し動作の手順を示す。
【００８４】
ステップＳ１０では、磁気記憶線ＭＭＬの各磁区（あるいは磁壁）をシフトさせるための読み出しシフト電流が選択素子１２、磁気抵抗効果素子１１、磁気記憶線ＭＭＬに流され、これによって磁気記憶線ＭＭＬの各層の磁区が磁気記憶線ＭＭＬの他端側から一端側に向かう方向に１層分シフトされる。これにより、層Ｌｎに格納されている磁区Ｍ１が読み出されて読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動し、読み出し位置（磁性層１１Ｓ，１１Ｓ’）の磁化状態が更新される。同時に、他の各層の磁区もその上層に移動する。
【００８５】
この磁区Ｍ１の磁化方向に起因する磁気抵抗効果素子１１の抵抗に応じた状態信号ＶＥＶＡＬが、キャパシタＣ１１にサンプリングされる（ステップＳ１１）。
【００８６】
次に、磁気抵抗効果素子１１、磁気記憶線ＭＭＬに読み出しシフト電流が再び流され、これによって磁気記憶線ＭＭＬの各層の磁区が磁気記憶線ＭＭＬの他端側から一端側に向かう方向に１層分シフトされる。これにより、層Ｌｎに現在存在する磁区Ｍ２が読み出されて読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動し、読み出し位置（磁性層１１Ｓ，１１Ｓ’）の磁化状態が更新される（ステップＳ１２）。同時に、他の各層の磁区もその上層に移動する。
【００８７】
この磁区Ｍ２の磁化方向に起因する磁気抵抗効果素子１１の抵抗に応じた状態信号ＶＥＶＡＬが、キャパシタＣ１２にサンプリングされる（ステップＳ１３）。
【００８８】
次に、キャパシタＣ１１に蓄積された状態信号（１つ前の磁区Ｍ１の状態信号）と、キャパシタＣ１２に蓄積された状態信号（現在の磁区Ｍ２の状態信号）とが比較され、これら状態信号の差が閾値よりも大きいか否かに基づいて“０”または“１”のデータ（ビット情報）が読み出される（ステップＳ１４）。
【００８９】
次に、最後のビット情報が読み出されたか否かが判定される（ステップＳ１５）。最後のビット情報を読み出していない場合は（ステップＳ１４のＮｏ）、処理はステップＳ１６に進む。一方、最後のビット情報が既に読み出された場合は（ステップＳ１４のＹｅｓ）、読み出し動作が終了される。
【００９０】
ステップＳ１６では、磁気抵抗効果素子１１、磁気記憶線ＭＭＬに読み出しシフト電流が再び流され、これによって磁気記憶線ＭＭＬの各層の磁区が磁気記憶線ＭＭＬの他端側から一端側に向かう方向に１層分シフトされる。これにより、層Ｌｎに現在存在する磁区Ｍ３が読み出されて読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動し、読み出し位置（磁性層１１Ｓ，１１Ｓ’）の磁化状態が更新される。同時に、他の各層の磁区もその上層に移動する。
【００９１】
この磁区Ｍ３の磁化方向に起因する磁気抵抗効果素子１１の抵抗に応じた状態信号ＶＥＶＡＬが、キャパシタＣ１１にサンプリングされる（ステップＳ１７）。
【００９２】
次に、キャパシタＣ１２に蓄積されている状態信号（１つ前の磁区Ｍ２の状態信号）と、キャパシタＣ１１に蓄積された状態信号（現在の磁区Ｍ３の状態信号）とが比較され、これら状態信号の差が閾値よりも大きいか否かに基づいて“０”または“１”のデータ（ビット情報）が読み出される（ステップＳ１８）。
【００９３】
次に、最後のビット情報が読み出されたか否かが判定される（ステップＳ１９）。最後のビット情報が読み出されていない場合は（ステップＳ１９のＮｏ）、処理はステップＳ１２に戻り、ステップＳ１２以降の動作が繰り返される。一方、最後のビット情報が既に読み出された場合は（ステップＳ１９のＹｅｓ）、読み出し動作が終了される。
【００９４】
図９は、書き込み動作に関連する回路の構成例を示す。
【００９５】
図９において、シフト制御回路５０は、磁気記憶線ＭＭＬの一端側に配されている。シフト制御回路５０は、ｎＭＯＳトランジスタＮＴ１３、マルチプレクサ４２、フィールド線ＦＬを間にして、磁気記憶線ＭＭＬと反対側に配されている。
【００９６】
ｎＭＯＳトランジスタＮＴ１３は、磁気記憶線ＭＭＬの各層の磁区を層Ｌｎから層Ｌ１に向かう方向にシフトさせるためのシフト電流（書き込みシフト電流）を磁気記憶線ＭＭＬに供給するために使用される。ｎＭＯＳトランジスタＮＴ１３のゲートはシフト制御回路５０に電気的に接続される。シフト制御回路５０は、シフト信号ＳＦＴを生成して、シフト信号ＳＦＴをｎＭＯＳトランジスタＮＴ１３のゲートに供給する。ｎＭＯＳトランジスタＮＴ１３は、アクティブレベルのシフト信号ＳＦＴをそのゲートで受けた際にオンすることで、書き込みシフト電流を磁気記憶線ＭＭＬに流すことができる。
【００９７】
マルチプレクサ４２は、書き込み用のシフト回路（ｎＭＯＳトランジスタＮＴ１３）と読み出し用のシフト回路（図６のｐＭＯＳトランジスタＰＴ２）とのいずれかを選択して磁気記憶線ＭＭＬに電気的に接続可能である。書き込み動作においては、マルチプレクサ４２は、書き込み用のシフト回路（ｎＭＯＳトランジスタＮＴ１３）を選択して書き込み用のシフト回路（ｎＭＯＳトランジスタＮＴ１３）を磁気記憶線ＭＭＬに電気的に接続することができる。
【００９８】
フィールド線ＦＬは、磁気記憶線ＭＭＬの一端の近傍を通る。具体的には、フィールド線ＦＬは、磁気記憶線ＭＭＬの中心軸から偏心した位置で磁気記憶線ＭＭＬの一端の近傍を通る。これにより、フィールド線ＦＬに所望の方向の電流（書き込み電流）を流した際に、磁気記憶線ＭＭＬの一端の近傍を所望の磁化方向に磁化可能である。
【００９９】
ＦＬドライバ６０は、２つのインバータＩＮＶａ，ＩＮＶｂを有する。これらインバータＩＮＶａ，ＩＮＶｂは、フィールド線ＦＬの両端に配される。
【０１００】
インバータＩＮＶａは、ｎＭＯＳトランジスタＮＴ１１及びｐＭＯＳトランジスタＰＴ１１を有する。ｎＭＯＳトランジスタＮＴ１１及びｐＭＯＳトランジスタＰＴ１１は、グランド電位及び書き込み基準電位Ｖｗの間に接続されている。書き込み基準電位Ｖｗは、グランド電位より高い電位であり、シフト基準電位ＶＳと異なる電位である。ｎＭＯＳトランジスタＮＴ１１のドレインとｐＭＯＳトランジスタＰＴ１１のドレインとは、フィールド線ＦＬの一端ＦＬａに共通接続されている。ｎＭＯＳトランジスタＮＴ１１のゲートとｐＭＯＳトランジスタＰＴ１１のゲートとは、書き込み制御回路８０に共通接続されている。
【０１０１】
インバータＩＮＶａは、アクティブレベルの制御信号ＷＴＡｎを受けた際に、ｎＭＯＳトランジスタＮＴ１１をオフさせるとともにｐＭＯＳトランジスタＰＴ１１をオンさせ、フィールド線ＦＬの一端ＦＬａの電位を書き込み基準電位ＶＷ側にプルアップすることができる。制御信号ＷＴＡｎは、ロウアクティブの制御信号とすることができる（ｎはロウアクティブであること表す）。このとき、制御信号ＷＴＢｎがノンアクティブレベル（Ｈレベル）であり、インバータＩＮＶｂがフィールド線ＦＬの他端ＦＬｂの電位をグランド電位にプルダウンしている。これにより、フィールド線ＦＬに対して、一端ＦＬａから他端ＦＬｂへ向かう方向に電流を流すことができる。
【０１０２】
インバータＩＮＶｂは、ｎＭＯＳトランジスタＮＴ１２及びｐＭＯＳトランジスタＰＴ１２を有する。ｎＭＯＳトランジスタＮＴ１２及びｐＭＯＳトランジスタＰＴ１２は、グランド電位及び書き込み基準電位Ｖｗの間に接続されている。ｎＭＯＳトランジスタＮＴ１２のドレインとｐＭＯＳトランジスタＰＴ１２のドレインとは、フィールド線ＦＬの他端ＦＬｂに共通接続されている。ｎＭＯＳトランジスタＮＴ１２のゲートとｐＭＯＳトランジスタＰＴ１２のゲートとは、書き込み制御回路８０に共通接続されている。インバータＩＮＶｂは、アクティブレベルの制御信号ＷＴＢｎを受けた際に、ｎＭＯＳトランジスタＮＴ１２をオフさせるとともにｐＭＯＳトランジスタＰＴ１２をオンさせ、フィールド線ＦＬの他端ＦＬｂの電位を書き込み基準電位Ｖｗ側にプルアップすることができる。制御信号ＷＴＢｎは、ロウアクティブの制御信号とすることができる（ｎはロウアクティブであること表す）。このとき、制御信号ＷＴＡｎがノンアクティブレベル（Ｈレベル）であり、インバータＩＮＶａがフィールド線ＦＬの一端ＦＬａの電位をグランド電位にプルダウンしている。これにより、フィールド線ＦＬに対して、他端ＦＬｂから一端ＦＬａへ向かう方向に電流を流すことができる。
【０１０３】
図１０のフローチャートは、磁気メモリ３において実行される書き込み動作の手順を示す。
【０１０４】
磁気メモリ３は、書き込み対象のブロックを選択すると、この選択されたブロックへの今回のデータ書き込みが最初のデータ書き込み（この選択されたブロック内の各磁気記憶線ＭＭＬへの最初の磁区の書き込み）であるか否かを判定する（ステップＳ１）。今回のデータ書き込みが最初のデータ書き込みである場合（ステップＳ１のＹｅｓ）、磁気メモリ３は、データを書き込む準備（ＰｒｅＷｒｉｔｅ）を行う。Ｐｒｅ Ｗｒｉｔｅにおいては、磁気メモリ３は、制御信号ＷＴＡｎ又は制御信号ＷＴＢｎをアクティブレベルにしてフィールド線ＦＬに電流を流し、これによって磁気記憶線ＭＭＬの書き込み位置（磁性層１１Ｓ，１１Ｓ’）に所定の磁化方向を有する磁区を初期の磁区として書き込む（ステップＳ２）。磁気メモリ３は、磁気記憶線ＭＭＬにシフト電流（書き込みシフト電流）を流す（ステップＳ３）。これにより、磁気記憶線ＭＭＬの書き込み位置に存在する初期の磁区が下方向に１層分シフト（移動）され、この初期の磁区が磁気記憶線ＭＭＬの層Ｌｎに入れられる。そして、磁気メモリ３は、磁気記憶線ＭＭＬへ書き込むべきデータの値を判定する（ステップＳ４）。
【０１０５】
書き込むべきデータの値が“１”である場合（ステップＳ４の“１”）、磁気メモリ３は、初期の磁区の磁化方向とは逆の磁化方向を有する磁区が磁気記憶線ＭＭＬに入れられるようにするために、フィールド線ＦＬに流される電流の向きを変更する（ステップＳ５）。
【０１０６】
書き込むべきデータの値が“０”である場合（ステップＳ４の“０”）、磁気メモリ３は、初期の磁区の磁化方向と同じ磁化方向を有する磁区が磁気記憶線ＭＭＬに入れられるようにするために、フィールド線ＦＬに流される電流の向きを変更しない。
【０１０７】
そして、磁気メモリ３は、磁気記憶線ＭＭＬにシフト電流を流す（ステップＳ３）。これにより、磁気記憶線ＭＭＬの書き込み位置に存在する磁区が下方向に１層分シフト（移動）され、この磁区が磁気記憶線ＭＭＬの層Ｌｎに入れられる。層Ｌｎに存在していた初期の磁区は層Ｌｎ−１に移動する。
【０１０８】
書き込むべき全てのデータが磁気記憶線ＭＭＬに書き込まれた場合（ステップＳ８のＹｅｓ）、磁気メモリ３は処理を終了する。
【０１０９】
図１１は、磁気メモリ３において実行される読み出し動作を示す。
【０１１０】
図示の簡単化のため、ここでは、磁気記憶線ＭＭＬに含まれる層の総数が４であり、磁気記憶線ＭＭＬに３ビットのデータが格納されるケースを想定する。また、図１１では、各磁区の磁化方向は右矢印「→」または左矢印「←」によって示されている。また、図１１では、磁気抵抗効果素子１１の磁性層（参照層）１１Ｒが、右矢印「→」で示される固定の磁化方向を有する磁化を保持しているケースが想定されている。
【０１１１】
図１１の（Ａ）は、３ビットのデータ（ここでは、「１１１」）を格納している磁気記憶線ＭＭＬを示している。磁気記憶線ＭＭＬの層Ｌ１は、Ｐｒｅ  ｗｒｉｔｅによってプログラムされた初期の磁区Ｍ４を保持している。磁気記憶線ＭＭＬの層Ｌ２は、磁区Ｍ３を保持している。磁区Ｍ３は初期の磁区Ｍ４の磁化方向とは逆の磁化方向を有している。磁区Ｍ３と初期の磁区Ｍ４の組は“１”のビット情報に対応する。
【０１１２】
磁気記憶線ＭＭＬの層Ｌ３は、磁区Ｍ２を保持している。磁区Ｍ２は磁区Ｍ３の磁化方向とは逆の磁化方向を有している。磁区Ｍ２と磁区Ｍ３の組は“１”のビット情報に対応する。
【０１１３】
磁気記憶線ＭＭＬの最上層Ｌ４は、磁区Ｍ１を保持している。磁区Ｍ１は磁区Ｍ２の磁化方向とは逆の磁化方向を有している。磁区Ｍ１と磁区Ｍ２の組は“１”のビット情報に対応する。
【０１１４】
磁気メモリ３は、まず、図１１の（Ｂ）に示すように、磁気記憶線ＭＭＬの各層の磁区を磁気記憶線ＭＭＬの他端側から一端側に向かう方向（上方向）に１層分移動させるシフト動作を行う。これにより、磁区Ｍ１は磁気記憶線ＭＭＬから押し出される。つまり、磁区Ｍ１は磁気記憶線ＭＭＬの層Ｌ４から読み出されて読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動される。また、磁区Ｍ２、磁区Ｍ３、磁区Ｍ４も、層Ｌ４、層Ｌ３、層Ｌ２にそれぞれ移動される。磁区Ｍ１が読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動されると、磁区Ｍ１に起因する磁気抵抗効果素子１１の抵抗状態（ここでは、低抵抗）に応じた状態信号ＶＥＶＡＬがキャパシタＣ１１に電圧ＶＳＭＰ１として蓄積される（Ｃ１１サンプリング）。
【０１１５】
図１１の（Ｃ）に示すように、磁気メモリ３は、磁気記憶線ＭＭＬの各層の磁区を上方向に１層分移動させるシフト動作を行う。これにより、磁区Ｍ２は磁気記憶線ＭＭＬから読み出され読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動される。また、磁区Ｍ３、磁区Ｍ４も、層Ｌ４、層Ｌ３にそれぞれ移動される。磁区Ｍ２が読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動されると、磁区Ｍ２に起因する磁気抵抗効果素子１１の抵抗状態（ここでは、高抵抗）に応じた状態信号ＶＥＶＡＬがキャパシタＣ１２に電圧ＶＳＭＰ２として蓄積される（Ｃ１２サンプリング）。磁気抵抗効果素子１１の抵抗状態は変化したため（ここでは、低抵抗状態から高抵抗状態へ変化）、電圧ＶＳＭＰ１と電圧ＶＳＭＰ２との差は閾値電圧よりも大きくなる。この結果、センスアンプ４７の出力データＤＯＵＴは“１”となり、磁区Ｍ１と磁区Ｍ２の組に対応する“１”のビット情報が読み出される。
【０１１６】
図１１の（Ｄ）に示すように、磁気メモリ３は、磁気記憶線ＭＭＬの各層の磁区を上方向に１層分移動させるシフト動作を行う。これにより、磁区Ｍ３は磁気記憶線ＭＭＬから読み出され読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動される。また、磁区Ｍ４も、層Ｌ４に移動される。磁区Ｍ３が読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動されると、磁区Ｍ３に起因する磁気抵抗効果素子１１の抵抗状態（ここでは、低抵抗）に応じた状態信号ＶＥＶＡＬがキャパシタＣ１１に電圧ＶＳＭＰ１として蓄積される（Ｃ１１サンプリング）。磁気抵抗効果素子１１の抵抗状態は変化したため（ここでは、高抵抗状態から低抵抗状態へ変化）、電圧ＶＳＭＰ１と電圧ＶＳＭＰ２との差は閾値電圧よりも大きくなる。この結果、センスアンプ４７の出力データＤＯＵＴは“１”となり、磁区Ｍ２と磁区Ｍ３の組に対応する“１”のビット情報が読み出される。
【０１１７】
図１１の（Ｅ）に示すように、磁気メモリ３は、磁気記憶線ＭＭＬの各層の磁区を上方向に１層分移動させるシフト動作を行う。これにより、磁区Ｍ４は磁気記憶線ＭＭＬから読み出され読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動される。磁区Ｍ４が読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動されると、磁区Ｍ４に起因する磁気抵抗効果素子１１の抵抗状態（ここでは、高抵抗）に応じた状態信号ＶＥＶＡＬがキャパシタＣ１２に電圧ＶＳＭＰ２として蓄積される（Ｃ１２サンプリング）。磁気抵抗効果素子１１の抵抗状態は変化したため（ここでは、低抵抗状態から高抵抗状態へ変化）、電圧ＶＳＭＰ１と電圧ＶＳＭＰ２との差は閾値電圧よりも大きくなる。この結果、センスアンプ４７の出力データＤＯＵＴは“１”となり、磁区Ｍ３と磁区Ｍ４の組に対応する“１”のビット情報が読み出される。
【０１１８】
図１２のタイミングチャートは、読み出し動作のシーケンスを示す。
【０１１９】
メモリコントローラ２と磁気メモリ３との間の通信は、チップイネーブル信号ＣＥｎ、アドレスラッチイネーブル信号ＡＬＥ、コマンドラッチイネーブル信号ＣＬＥ、ライトイネーブル信号ＷＥｎ、リードイネーブル信号ＲＥｎ、Ｉ／Ｏ信号＜７：０＞、レディー／ビジー信号Ｒ／Ｂｎを含む。ここで、信号の名称の末尾の「ｎ」は、この信号がロウアクティブの信号であることを意味する。
【０１２０】
メモリコントローラ２は、磁気メモリ３内の一つのブロックから１層分のデータを読み出すためのリードコマンドシーケンス（リードコマンド“００ｈ”、ロウアドレス、カラムアドレス、リードコマンド“３０ｈ”）を磁気メモリ３に送信する。
【０１２１】
すなわち、メモリコントローラ２は、リードコマンド“００ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。引き続きメモリコントローラ２は、例えば２サイクルにわたってアドレス（ロウアドレス、カラムアドレス）を発行すると共にアドレスラッチイネーブル信号ＡＬＥをアサートする。ロウアドレスは、データが読み出されるべきブロックに対応する１つのソース線ＳＬを指定する。カラムアドレスは、例えば、複数のカラムのうちの１つのカラムを指定する。１つのカラムは例えば８本のビット線ＢＬに対応する。その後、メモリコントローラ２は、リードコマンド“３０ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。
【０１２２】
磁気メモリ３はロウアドレスレジスタとカラムアドレスレジスタとを含む。メモリコントローラ２から受信したロウアドレスはロウアドレスレジスタに保持される。また、メモリコントローラ２から受信したカラムアドレスはカラムアドレスレジスタに保持される。カラムアドレスレジスタに保持されたカラムアドレスの値はデータ読み出し動作に応じて自動的にインクリメントされる。
【０１２３】
リードコマンド“３０ｈ”を受信すると、磁気メモリ３は、ロウアドレスによって指定されたソース線ＳＬに対応するブロックからのデータの読み出し動作を開始してビジー状態となる。磁気メモリ３においては、このブロックから１層に対応するサイズのデータが読み出され、磁気メモリ３内のラッチ回路ＸＤＬに保持される。なお、図１２では、図示の簡単化のために１層に対応するデータサイズが４バイトである場合が例示されている。
【０１２４】
その後、磁気メモリ３がレディー状態になると、メモリコントローラ２はリードイネーブル信号ＲＥｎを繰り返しアサートする。リードイネーブル信号ＲＥｎがアサートされる度に、データラッチ回路ＸＤＬ内のデータが１バイト単位でメモリコントローラ２へ送信される。
【０１２５】
図１３は、図１２のタイミングチャートによって示される読み出し動作における磁気メモリ３内のデータの変化を示している。
【０１２６】
磁気メモリ３は、ラッチ回路ＸＤＬと、ラッチ回路ＭＤＬとを含む。ラッチ回路ＸＤＬはメモリコントローラ２との通信用に使用される。読み出し動作においては、ブロックＢＬＫから読み出されたデータはラッチ回路ＸＤＬに格納される。書き込み動作においては、メモリコントローラ２から受信されるデータ（ライトデータ）がラッチ回路ＸＤＬに格納される。ラッチ回路ＸＤＬは、磁気メモリ３内の全てのブロックによって共有される。
【０１２７】
ラッチ回路ＭＤＬは、フィールド線ＦＬに流す電流の向きを示す磁気データ、つまり磁気記憶線ＭＭＬに書き込むべき磁区の磁化方向を示す磁気データを格納する。磁気データはｍｄａｔａとも称する。ラッチ回路ＭＤＬも、磁気メモリ３内の複数のブロックによって共有される。
【０１２８】
また、図１３において、記号“Ｎ”は図１１の左矢印に対応する磁化方向を有する磁区を示し、記号“Ｓ”は図１１の右矢印に対応する磁化方向を有する磁区を示している。
【０１２９】
図１２のタイミングチャートのタイミングｔ１においては、ＸＤＬの内容は不定であり、またＭＤＬの内容も不定である。そして、例えば、リードコマンド“３０ｈ”の受信に応じて、ＸＤＬの内容およびＭＤＬの内容がリセットされる。そして、リードコマンド“３０ｈ”が受信されると、ブロックＢＬＫからデータを読み出す動作（ｒｅａｄ＆ｓｈｉｆｔ）が実行される。図１３では、ブロックＢＬＫの総層数が４である場合が想定されている。また、ブロックＢＬＫに４層分のデータが格納されている状態で図１２のリードコマンドシーケンスが受信された場合が想定されている。この場合、まず、層Ｌ４の磁区が読み出され、次いで、層Ｌ３の磁区が読み出される。
【０１３０】
ここでは、層Ｌ３にコントローラ２からの１層分のライトデータに対応する磁区「ＮＮＮＮ  ＮＮＮＮ…」が格納されている場合が例示されている。
【０１３１】
層Ｌ４に格納されている磁区「ＳＳＳＳ  ＮＳＳＳ…」は、コントローラ２からの次の１層分のライトデータに対応する。このライトデータの“１”のビット位置に対応する各磁区は、層Ｌ３の対応するビット位置に存在する磁区（Ｎ）の反転極性（Ｓ）を有し、ライトデータの“０”のビット位置に対応する各磁区は、層Ｌ３の対応するビット位置に存在する磁区（Ｎ）と同じ極性（Ｎ）を有している。
【０１３２】
リードコマンド“３０ｈ”が受信されると、磁気メモリ３は、ブロックＢＬＫを構成する磁気記憶線ＭＭＬそれぞれの各磁区を上方向に１層分移動させるシフト動作を２回実行する。これにより、これら磁気記憶線ＭＭＬの各々において、各磁区が上方向に２層分移動し、ブロックＢＬＫから２層分の磁区「ＳＳＳＳ  ＮＳＳＳ  …」、「ＮＮＮＮ  ＮＮＮＮ  …」が読み出される。そして、磁気メモリ３は、各ビット線ＢＬに対応する２つの電圧ＶＳＭＰ１、２を比較することによって、１層分の出力データ（ここでは４バイトのデータ）を生成し、この出力データをＸＤＬに格納する。出力データの例えば上位１バイトに着目すると、層Ｌ４の上位１バイト分の磁区は「ＳＳＳＳ  ＮＳＳＳ」であり、層Ｌ３の上位１バイト分の磁区は「ＮＮＮＮ  ＮＮＮＮ」であるので、出力データの上位１バイトは「１１１１  ０１１１１」（＝Ｆ７ｈ）となる。
【０１３３】
図１４は、磁気メモリ３において実行される書き込み動作の一部分を示す。ここでは、各磁気記憶線ＭＭＬに含まれる層の総数が４であり、３ビットのデータ（ここでは、「１１１」）を各磁気記憶線ＭＭＬに書き込む場合を想定する。
【０１３４】
本実施形態では、初層プログラムコマンドと中間層プログラムコマンドと最終層プログラムコマンドの３種類のプログラムコマンドが使用される。初層プログラムコマンドは、ブロックに最初の１層分のデータを書き込むために使用される。中間層プログラムコマンドは、ブロックの１層目と最終層目とを除く中間層のいずれか一層に１層分のデータを書き込むために使用される。最終層プログラムコマンドは、ブロックの最終層目に１層分のデータを書き込むために使用される。
【０１３５】
初層プログラムコマンドを受信した場合、磁気メモリ３は、１層分の初期の磁区と１層分のライトデータに応じた１層分の磁区とを含む計２層分の磁区をブロックに書き込む（図１４の（Ａ）〜（Ｄ））。
【０１３６】
図１４の（Ａ）に示すように、磁気メモリ３は、まず、フィールド線ＦＬに紙面手前側から奥行側へ向かう方向に電流を流し、「←」の磁化方向を有する磁区を形成するための誘導磁場をフィールド線ＦＬに発生させる。これにより、書き込み位置（磁性層１１Ｓ，１１Ｓ’）に「←」の磁化方向を有する磁区Ｍ４が形成される。
【０１３７】
図１４の（Ｂ）に示すように、磁気メモリ３は、磁気記憶線ＭＭＬの各層の磁区を下方向に移動するシフト動作を行い、これによって初期の磁区Ｍ４を磁気記憶線ＭＭＬの層Ｌ４に入れる。
【０１３８】
次に、図１４の（Ｃ）に示すように、磁気メモリ３は、初層プログラムコマンドに関連付けられたライトデータか“１”であるので、フィールド線ＦＬに流れる電流の向きを変更する。つまり、磁気メモリ３は、フィールド線ＦＬに紙面奥行側から手前側へ向かう方向に電流を流し、「→」の磁化方向を有する磁区を形成するための誘導磁場をフィールド線ＦＬに発生させる。これにより、書き込み位置（磁性層１１Ｓ，１１Ｓ’）に「→」の磁化方向を有する磁区Ｍ３が形成される。
【０１３９】
図１４の（Ｄ）に示すように、磁気メモリ３は、磁気記憶線ＭＭＬの各層の磁区を下方向に移動するシフト動作を行い、これによって磁区Ｍ３を磁気記憶線ＭＭＬの層Ｌ４に入れる。この時、初期の磁区Ｍ４は層Ｌ３に移動する。磁区Ｍ３と磁区Ｍ４の組は“１”のビット情報に対応する。
【０１４０】
図１５は、磁気メモリ３において実行される書き込み動作の続き部分を示す。
【０１４１】
中間層プログラムコマンドを受信した場合、磁気メモリ３は、この中間層プログラムコマンドに関連付けられたライトデータに応じた１層分の磁区をこのブロックに書き込む（図１５の（Ｅ）、（Ｆ））。
【０１４２】
図１５の（Ｅ）に示すように、磁気メモリ３は、中間層プログラムコマンドに関連付けられたライトデータか“１”であるので、フィールド線ＦＬに流れる電流の向きを変更する。つまり、磁気メモリ３は、フィールド線ＦＬに紙面手前側から奥行側へ向かう方向に電流を流し、「←」の磁化方向を有する磁区を形成するための誘導磁場をフィールド線ＦＬに発生させる。これにより、書き込み位置（磁性層１１Ｓ，１１Ｓ’）に「←」の磁化方向を有する磁区Ｍ２が形成される。
【０１４３】
図１５の（Ｆ）に示すように、磁気メモリ３は、磁気記憶線ＭＭＬの各層の磁区を下向に移動するシフト動作を行い、これによって磁区Ｍ２を磁気記憶線ＭＭＬの層Ｌ４に入れる。この時、初期の磁区Ｍ４は層Ｌ２に移動し、磁区Ｍ３は層Ｌ３に移動する。磁区Ｍ２と磁区Ｍ３の組は“１”のビット情報に対応する。
【０１４４】
最終層プログラムコマンドを受信した場合、磁気メモリ３は、この最終層プログラムコマンドに関連付けられたライトデータに応じた１層分の磁区をこのブロックに書き込む（図１５の（Ｇ）、（Ｈ））。
【０１４５】
図１５の（Ｇ）に示すように、磁気メモリ３は、最終層プログラムコマンドに関連付けられたライトデータか“１”であるので、フィールド線ＦＬに流れる電流の向きを変更する。つまり、磁気メモリ３は、フィールド線ＦＬに紙面奥行側から手前側へ向かう方向に電流を流し、「→」の磁化方向を有する磁区を形成するための誘導磁場をフィールド線ＦＬに発生させる。これにより、書き込み位置（磁性層１１Ｓ，１１Ｓ’）に「→」の磁化方向を有する磁区Ｍ１が形成される。
【０１４６】
図１５の（Ｈ）に示すように、磁気メモリ３は、磁気記憶線ＭＭＬの各層の磁区を下方向に移動するためのシフト動作を行い、これによって磁区Ｍ１を磁気記憶線ＭＭＬの層Ｌ４に入れる。この時、初期の磁区Ｍ４は層Ｌ１に移動し、磁区Ｍ３は層Ｌ２に移動し、磁区Ｍ２は層Ｌ３に移動する。磁区Ｍ１と磁区Ｍ２の組は“１”のビット情報に対応する。
【０１４７】
図１６は、メモリコントローラ２によって磁気メモリ３に発行される３種類のプログラムコマンドを示す。
【０１４８】
初層プログラムコマンドのコマンドシーケンスは、プログラムコマンド“８０ｈ”、ロウアドレス、カラムアドレス、データ（１層分のデータ、例えば６４バイト）、およびプログラムコマンド“０１ｈ”を含む。
【０１４９】
中間層プログラムコマンドのコマンドシーケンスは、プログラムコマンド“８１ｈ”、カラムアドレス、データ（１層分のデータ、例えば６４バイト）、およびプログラムコマンド“０１ｈ”を含む。
【０１５０】
最終層プログラムコマンドのコマンドシーケンスは、プログラムコマンド“８１ｈ”、カラムアドレス、データ（１層分のデータ、例えば６４バイト）、およびプログラムコマンド“００ｈ”を含む。
【０１５１】
ここで、初層プログラムコマンドおよび中間層プログラムコマンドの各々において使用されるプログラムコマンド“０１ｈ”は、このブロックの後続の層への書き込みのために、初層プログラムコマンドまたは中間層プログラムコマンドに対応する１層分のライトデータの書き込み動作の完了後にＭＤＬの内容を維持すべきことを指定する。一方、最終層プログラムコマンドにおいて使用されるプログラムコマンド“００ｈ”は、この最終層プログラムコマンドに対応する１層分のライトデータの書き込み動作の完了後にＭＤＬの内容を解放（変更）可能であることを指定する。
【０１５２】
なお、中間層プログラムコマンドおよび最終層プログラムコマンドの各々も、カラムアドレスのみならず、ロウアドレスも指定してもよい。
【０１５３】
図１７のフローチャートは、ブロックの単位で実行される書き込み動作の手順を示す。
【０１５４】
あるブロックにブロックサイズに対応するサイズのデータを書き込むために、メモリコントローラ２は、以下の処理を実行する。
【０１５５】
まず、メモリコントローラ２は、このブロックに対応するソース線ＳＬを指定するロウアドレスを含む初層プログラムコマンドを磁気メモリ３に発行する（ステップＳ２１）。磁気メモリ３は初層プログラムコマンドに対応する書き込み動作（初層プログラム動作とも云う）を実行する。磁気メモリ３による初層プログラム動作が完了すると、メモリコントローラ２は、中間層プログラムコマンドを磁気メモリ３に発行する（ステップＳ２２）。磁気メモリ３は中間層プログラムコマンドに対応する書き込み動作（中間層プログラム動作とも云う）を実行する。磁気メモリ３による中間層プログラム動作が完了すると、メモリコントローラ２は、このブロックの未書き込みの層が１層のみであるか否かを判定する（ステップＳ２３）。
【０１５６】
未書き込みの層が２層以上存在する場合には（ステップＳ２３のＮＯ）、メモリコントローラ２は、次の中間層プログラムコマンドを磁気メモリ３に発行する。
【０１５７】
このようにして、メモリコントローラ２は、このブロックの未書き込みの層が１層のみになるまで、中間層プログラムコマンドを磁気メモリ３に繰り返し発行する（ステップＳ２３のＮＯ、ステップＳ２２）。
【０１５８】
このブロックの未書き込みの層が１層のみになると（ステップＳ２３のＹＥＳ）、メモリコントローラ２は、最終層プログラムコマンドを磁気メモリ３に発行する（ステップＳ２４）。磁気メモリ３は最終層プログラムコマンドに対応する書き込み動作（最終層プログラム動作とも云う）を実行する。磁気メモリ３による最終層プログラム動作が完了すると、メモリコントローラ２は、このブロックに対する書き込み処理を終了する。
【０１５９】
このように、メモリコントローラ２は、ブロックの状態、例えば、（１）ブロックのどの層にもデータが未書き込みである未書き込み状態、（２）ブロックの一つ以上の層にデータが書き込まれ且つ未書き込みの層が２層以上存在する状態、（３）ブロックの一つ以上の層にデータが書き込まれ且つ未書き込みの層が１層のみである状態、（４）未書き込みの層が存在しない状態、等を管理する。そして、メモリコントローラ２は、ブロックの状態に応じて、層単位でプログラムを実行するための３種類のプログラムコマンド、つまり初層プログラムコマンド、中間層プログラムコマンド、最終層プログラムコマンドを選択的に発行する。
【０１６０】
図１８は、初層プログラム動作のシーケンスを示すタイミングチャートである。ここでは、図示の簡単化のために、ブロックの１層分のデータサイズが４バイトである場合を想定する。
【０１６１】
メモリコントローラ２は、プログラムコマンド“８０ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。引き続きメモリコントローラ２は、例えば２サイクルにわたってアドレス（ロウアドレス、カラムアドレス）を発行すると共にアドレスラッチイネーブル信号ＡＬＥをアサートする。ロウアドレスは、データが書き込まれるべきブロックに対応する１つのソース線ＳＬを指定する。カラムアドレスは、例えば、複数のカラムのうちの１つのカラムを指定する。１つのカラムは例えば８本のビット線ＢＬに対応する。その後、メモリコントローラ２は、１層分のライトデータ（例えば、Ｆ７ｈ、５５ｈ、２３ｈ、６５ｈ）を磁気メモリ３に転送する。この後、メモリコントローラ２は、プログラムコマンド“０１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。
【０１６２】
磁気メモリ３においては、メモリコントローラ２から受信したロウアドレスはロウアドレスレジスタに保持される。また、メモリコントローラ２から受信したカラムアドレスはカラムアドレスレジスタに保持される。カラムアドレスレジスタに保持されたカラムアドレスの値は１バイト分のライトデータの受信の度に自動的にインクリメントされる。
【０１６３】
磁気メモリ３は、ロウアドレスによって指定されたソース線ＳＬに対応するブロックに対する初層プログラム動作を開始してビジー状態となる。初層プログラム動作では、１層分の初期の磁区の書き込みと１層分のライトデータに対応する１層分の磁区の書き込みとを含む、計２層分の磁区の書き込みが実行される。
【０１６４】
図１９は、中間層プログラム動作のシーケンスを示すタイミングチャートである。
【０１６５】
メモリコントローラ２は、プログラムコマンド“８１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。引き続きコントローラ２は、カラムアドレスを発行すると共にアドレスラッチイネーブル信号ＡＬＥをアサートする。その後、メモリコントローラ２は、１層分のライトデータ（例えば、ＤＥｈ、ＡＤｈ、ＣＡｈ、ＦＥｈ）を磁気メモリ３に転送する。この後、メモリコントローラ２は、プログラムコマンド“０１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。
【０１６６】
磁気メモリ３のロウアドレスレジスタには、初層プログラムコマンドで指定されたロウアドレスが保持されている。磁気メモリ３は、このロウアドレスによって指定されたソース線ＳＬに対応するブロックを選択し、このブロックに対する中間層プログラム動作を開始してビジー状態となる。中間層プログラム動作では、１層分のライトデータに対応する１層分の磁区の書き込みが実行される。
【０１６７】
図２０は、最終層プログラム動作のシーケンスを示すタイミングチャートである。
【０１６８】
メモリコントローラ２は、プログラムコマンド“８１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。引き続きコントローラ２は、カラムアドレスを発行すると共にアドレスラッチイネーブル信号ＡＬＥをアサートする。その後、メモリコントローラ２は、１層分のライトデータ（例えば、Ｆ７ｈ、５５ｈ、２３ｈ、６５ｈ）を磁気メモリ３に転送する。この後、メモリコントローラ２は、プログラムコマンド“００ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。
【０１６９】
磁気メモリ３のロウアドレスレジスタには、初層プログラムコマンドで指定されたロウアドレスが保持されている。磁気メモリ３は、このロウアドレスによって指定されたソース線ＳＬに対応するブロックを選択し、このブロックに対する最終層プログラム動作を開始してビジー状態となる。最終層プログラム動作では、１層分のライトデータに対応する１層分の磁区の書き込みが実行される。
【０１７０】
図２１は、図１８のタイミングチャートによって示される初層プログラム動作における磁気メモリ３内のデータの変化を示す。
【０１７１】
図１８のタイミングチャートのタイミングｔ１においては、ＸＤＬの内容は不定であり、またＭＤＬの内容も不定である。そして、例えば、初層プログラムコマンドに対応するプログラムコマンド“８０ｈ”の受信に応じて、磁気メモリ３は、ＭＤＬの内容（ｍｄａｔａ）を例えばオール１（＝ＦＦＦＦＦＦＦＦｈ）にリセットする。ＭＤＬにおいて、ｍｄａｔａの“１”のビットは、「←」の磁化方向を有する磁区（Ｎ）を書き込むべきこと、つまり磁区（Ｎ）を形成するために必要な向きの電流をフィールド線ＦＬに流すべきことを示す。ｍｄａｔａの“０”のビットは、「→」の磁化方向を有する磁区（Ｓ）を書き込むべきこと、つまり磁区（Ｓ）を形成するために必要な向きの電流をフィールド線ＦＬに流すべきことを示す。
【０１７２】
磁気メモリ３は、ブロックＢＬＫを構成する全ての磁気記憶線ＭＭＬの層Ｌ４に１層分の初期の磁区（「←」の磁化方向を有する磁区（Ｎ））を書き込む（ｐｒｅ  ｗｒｉｔｅ  ＆  ｓｈｉｆｔ）。
【０１７３】
図１８のタイミングチャートのタイミングｔ２においては、１バイト目のライトデータＦ７ｈがＸＤＬにセットされる。図１８のタイミングチャートのタイミングｔ３においては、ＸＤＬに１層分のライトデータの全て（Ｆ７ｈ、５５ｈ、２３ｈ、６５ｈ）が揃う。
【０１７４】
プログラムコマンド“０１ｈ”が受信されると、磁気メモリ３は、ＸＤＬに格納されている１層分のライトデータに応じて、ＭＤＬのｍｄａｔａを更新する。本実施形態では、同じ磁化方向を有する隣接する２つの磁区の組み合わせがデータの“０”に対応し、互いに異なる磁化方向を有する隣接する２つの磁区の組み合わせがデータの“１”に対応する。したがって、磁気メモリ３は、ＸＤＬ内の“１”のビット位置に対応するＭＤＬ内のビットの値を反転させる。この場合、ＸＤＬとＭＤＬとの排他的論理和を求める論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ］が実行され、論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ］の結果がＭＤＬに格納されてＭＤＬの内容が更新される。
【０１７５】
例えば、１層分のライトデータの上位１バイトに着目すると、いま、ライトデータの上位１バイトがＦ７ｈ（＝１１１１  ０１１１）であり、ＭＤＬのｍｄａｔａの上位１バイトがＦＦｈ（＝１１１１  １１１１）であるので、ｍｄａｔａの上位１バイトは０８ｈ（＝００００  １０００）に更新される。
【０１７６】
磁気メモリ３は、更新されたＭＤＬに基づいてフィールド線ＦＬそれぞれに電流を流し、そしてシフト動作を実行してブロックＢＬＫに１層分の磁区「ＳＳＳＳ  ＮＳＳＳ  …」を押し込む（Ｃｕｒｒｅｎｔ  ｆｌｏｗ＆ｓｈｉｆｔ）。１層分の磁区「ＳＳＳＳ  ＮＳＳＳ  …」はブロックＢＬＫを構成する全ての磁気記憶線ＭＭＬの層Ｌ４に入れられ、１層分の初期の磁区「ＮＮＮＮ  ＮＮＮＮ  …」は、これら磁気記憶線ＭＭＬの層Ｌ４から層Ｌ３に移動する。
【０１７７】
次に、図２２を参照して、ブロックへの書き込み途中に別のブロックに対する処理に遷移するインターリーブ動作について説明する。
【０１７８】
図２２の左部に示されるフローチャートは、ブロック単位でデータを書き込む書き込み動作の手順を示している（図１７で説明した書き込み動作）。この書き込み動作の手順を使用した場合には、通常、このブロックＢＬＫに対する最終層プログラム動作が終了した後にのみ、別のブロックに対する処理（例えば別のブロックに対するデータの書き込みまたは読み出し）が実施可能である。なぜなら、ＭＤＬは複数のブロックによって共有されているため、ブロックＢＬＫに対する書き込み途中で別のブロックに対する書き込みまたは読み出しを実行すると、ＭＤＬの内容が書き換わる場合があるからである。この場合、ブロックＢＬＫへの最後に書き込み時にフィールド線ＦＬに流した電流の向きを示す情報が失われてしまう。したがって、たとえブロックＢＬＫに対するデータ書き込み動作が再開されても、後続のライトデータの値に対応する磁区の磁化方向を正しく決定することが困難となり、ブロックＢＬＫへの正しい書き込みができなくなる。
【０１７９】
そこで、本実施形態では、図２２の右部に示されるように、例えば、初層プログラム動作の後または中間層プログラム動作の後のように、ブロックＢＬＫ内の任意の層への書き込みの完了時に別のブロックに対する動作に遷移可能とする新たな書き込み動作を実現する。
【０１８０】
本実施形態では、磁気メモリ３は、ブロックへの書き込み途中に別のブロックに対する処理に遷移するインターリーブ動作を可能にするために、大別して、以下の２つの新たな機能を有している。ここで、書き込み途中のブロックとは、このブロックへの１以上の層への書き込みが実行され、且つ未書き込みの層が１つ以上存在しているブロックを意味する。
（１）追加の磁区を書き込む機能
追加の磁区を書き込む機能は、ブロックＢＬＫに最後に書き込んだ磁区の磁化方向、つまりブロックＢＬＫへの最後に書き込み時にフィールド線ＦＬに流した電流の向きを復元するための磁区を追加の磁区（以下、フタ用磁区とも称する）としてブロックＢＬＫに書き込み、そしてこの追加の磁区を読み出して、インターリーブ動作の直前のＭＤＬの内容を復元する。具体的には、この機能は、以下の３つの方法のいずれかによって実現することができる。
（１−１）２層分の追加の磁区を書き込み、２層分の追加の磁区を読み出す
（１−２）１層分の追加の磁区を書き込み、２層分の磁区を読み出し、１層分の磁区を書き戻す
（１−３）インターリーブ動作の開始時または書き込み再開時に、予め決められた固定の磁化方向を有する初期の磁区を書き込む
（２）ＭＤＬの内容を維持する機能
ＭＤＬの内容を維持する機能は、磁気メモリ内のラッチ回路またはメモリコントローラ２内のバッファにＭＤＬの内容を保持する機能である。
【０１８１】
これら機能の詳細については図２５以降で説明する。
【０１８２】
次に、図２３を参照して、磁気メモリ３の回路構成を説明する。
【０１８３】
磁気メモリ３は、メモリセルアレイ１０１、ビットラインデコーダ１０２、ソースラインデコーダ１０３、シーケンサ１０４、シフト制御回路１０５、ソース線ドライバ１０６、カラムアドレスデコーダ１０７、カラム制御回路１０８、等を含む。
【０１８４】
メモリセルアレイ１０１は、図２〜図５で説明した複数の磁気記憶線ＭＭＬ、複数のビット線ＢＬ、複数のフィールド線ＦＬ、および複数のソース線ＳＬを含む。ビットラインデコーダ１０２は、カラムアドレスデコーダ１０７の制御の下、複数のビット線ＢＬの一つを選択する。ソースラインデコーダ１０３は、ソース線ドライバ１０６の制御の下、複数のソース線ＳＬの一つを選択する。
【０１８５】
シーケンサ１０４は磁気メモリ３の動作全体を制御するように構成された制御回路であり、メモリコントローラ２から受信される様々なコマンドに応じてシフト制御回路１０５、カラム制御回路１０８等を制御して、各コマンドの処理に必要な動作を実行する。シフト制御回路１０５は、シーケンサ１０４の制御の下、磁気記憶線ＭＭＬに格納されている各磁区を層Ｌｎから層Ｌ１に向かう方向に、または層Ｌ１から層Ｌｎに向かう方向に、層単位でシフトさせる制御を実行する。
【０１８６】
カラム制御回路１０８は、シーケンサ１０４の制御の下、ビット線ＢＬの制御およびフィールド線ＦＬの制御に関する動作を実行する。カラム制御回路１０８は、ビット線ＢＬの数（つまりフィールド線ＦＬの数）と同数のユニット回路２０１を含む。これらユニット回路２０１の各々は、このユニット回路２０１に対応する一つのビット線ＢＬおよびこのユニット回路２０１に対応する一つのフィールド線ＦＬを制御する。
【０１８７】
図２４に示されているように、ユニット回路２０１は、データラッチ回路２１１、書き込み制御回路２１２、フィールド線（ＦＬ）ドライバ２１３、ビット線ドライバ２１４、読み出し制御回路２１５等を含む。
【０１８８】
一つのユニット回路２０１に対応するラッチ回路ＸＤＬは、このユニット回路２０１に対応する１つのビット線ＢＬ（または１つのフィールド線ＦＬ）に対応する１ビット分のデータを保持するために使用される。一つのユニット回路２０１に対応するラッチ回路ＭＤＬは、このユニット回路２０１に対応する１つのビット線ＢＬ（または１つのフィールド線ＦＬ）に対応する１ビット分の磁気データ（ｍｄａｔａ）を保持するために使用される。
【０１８９】
書き込み制御回路２１２は、ラッチ回路ＸＤＬの内容と、直前の書き込みに使用したラッチ回路ＭＤＬの内容とを用いて、フィールド線ＦＬに流す電流（書き込み電流）の向きを決定し、フィールド線（ＦＬ）ドライバ２１３を介してフィールド線ＦＬに流される電流（書き込み電流）の向きを変更する制御等を実行する。
【０１９０】
ビット線ドライバ２１４は、シフト制御回路１０５の制御の下、ビットラインデコーダ１０２を介して、対応するビット線ＢＬに関する制御を実行する。読み出し制御回路２１５は、図６で説明したセンスアンプ４７およびその前段の回路、図６で説明した大小判定回路４８等を含む。
【０１９１】
読み出し制御回路２１５においては、磁気記憶線ＭＭＬの最上層およびその下の層からそれぞれ読み出された２つの磁区に対応する電圧ＶＳＭＰ１と電圧ＶＳＭＰ２との比較結果に対応する出力データＤＯＵＴが“１”であった場合、ＶＳＭＰ１＞ＶＳＭＰ２あるいはＶＳＭＰ１＜ＶＳＭＰ２のどちらの条件が満たされているかが判定される（大小判定）。この判定結果に基づいて、これら２つの磁区それぞれの磁化方向、つまりこれら２つの磁区の各々を書き込む時に使用された書き込み電流の向きを特定することができる。例えば、磁気抵抗効果素子１１の磁性層（参照層）１１Ｒが右矢印で示される磁化方向（Ｓ）に磁化されており、且つ磁気抵抗効果素子１１の抵抗状態が高抵抗から低抵抗に変化した場合に状態信号ＶＥＶＡＬの電圧値が低下するように読み出し制御回路２１５が構成されているケースにおいては、ＶＳＭＰ１＞ＶＳＭＰ２であるならば、最上層の磁区の磁化方向がＮ、その下の層の磁区の磁化方向がＳと判定される。一方、ＶＳＭＰ１＜ＶＳＭＰ２であるならば、最上層の磁区の磁化方向がＳ、その下の層の磁区の磁化方向がＮと判定される。したがって、特定された書き込み電流の向きを示すｍｄａｔａを読み出し制御回路２１５内で生成して、このｍｄａｔａをラッチ回路ＭＤＬに転送することにより、後続のデータの書き込みを行うことが可能となる。
【０１９２】
次に、２層分の追加の磁区を書き込み、そして２層分の追加の磁区を読み出す動作について説明する。
【０１９３】
まず、図２５を参照して、２層分の追加の磁区（フタ用磁区）を書き込む動作について説明する。ここでは、１層目の追加の磁区が最上層の磁区の磁化方向とは逆の磁化方向を有し、２層目の追加の磁区が１層目の追加の磁区の磁化方向とは逆の磁化方向を有する場合を想定する。なお、１層目の追加の磁区が最上層の磁区の磁化方向と同じ磁化方向を有し、２層目の追加の磁区が１層目の追加の磁区の磁化方向とは逆の磁化方向を有していてもよい。
【０１９４】
図２５の（Ａ）は、ブロックＢＬＫに対する初層プログラム動作の直後の状態を示している。まず、初期の磁区Ｍ４の磁化方向「←」から定められる所定の磁化方向、ここでは、初期の磁区Ｍ４の磁化方向「←」とは逆の磁化方向「→」を有する磁区Ｍ３がシフト動作によって磁気記憶線ＭＭＬに押し込まれ、これによって磁区Ｍ３が最上層Ｌ４に入り、初期の磁区Ｍ４が最上層Ｌ４から層Ｌ３に移動する。
【０１９５】
この書き込み途中のブロックＢＬＫとは別のブロックの処理を行うインターリーブ動作を開始する場合、メモリコントローラ２は、フタ用磁区を追加するコマンド（第１のコマンドとも称する）を磁気メモリ３に発行する。フタ用磁区を追加するコマンドは、ブロックＢＬＫに最後に書き込んだ磁区の磁化方向を復元可能な磁区をブロックＢＬＫに書き込むことを指示するコマンドである。
【０１９６】
フタ用磁区を追加するコマンドをメモリコントローラ２から受信した場合、図２５の（Ｂ）に示すように、磁気メモリ３は、最上層Ｌ４の磁区Ｍ３とは逆の「←」の磁化方向を有する１層目の追加の磁区Ｍｘを書き込むために、フィールド線ＦＬに流す電流の向きを変更する。つまり、磁気メモリ３は、フィールド線ＦＬに紙面手前側から奥行側へ向かう方向に電流を流し、「←」の磁化方向を有する追加の磁区Ｍｘを形成するための誘導磁場をフィールド線ＦＬに発生させる。これにより、書き込み位置（磁性層１１Ｓ，１１Ｓ’）に「←」の磁化方向を有する追加の磁区Ｍｘが形成される。
【０１９７】
図２５の（Ｃ）に示すように、磁気メモリ３は、磁気記憶線ＭＭＬの各層の磁区を下方向に移動するためのシフト動作を行う。これによって追加の磁区Ｍｘが磁気記憶線ＭＭＬに押し込まれ、最上層Ｌ４に入る。この時、初期の磁区Ｍ４は層Ｌ２に移動し、磁区Ｍ３は層Ｌ３に移動する。
【０１９８】
図２５の（Ｄ）に示すように、磁気メモリ３は、追加の磁区Ｍｘとは逆の「→」の磁化方向を有する２層目の追加の磁区Ｍｙを書き込むために、フィールド線ＦＬに流れる電流の向きを変更する。つまり、磁気メモリ３は、フィールド線ＦＬに紙面奥行側から手前側へ向かう方向に電流を流し、「→」の磁化方向を有する追加の磁区Ｍｙを形成するための誘導磁場をフィールド線ＦＬに発生させる。これにより、書き込み位置（磁性層１１Ｓ，１１Ｓ’）に「→」の磁化方向を有する追加の磁区Ｍｙが形成される。
【０１９９】
図２５の（Ｅ）に示すように、磁気メモリ３は、磁気記憶線ＭＭＬの各層の磁区を下方向に移動するためのシフト動作を行う。これによって追加の磁区Ｍｙが磁気記憶線ＭＭＬに押し込まれ、最上層Ｌ４に追加に入る。この時、初期の磁区Ｍ４は層Ｌ１に移動し、磁区Ｍ３は層Ｌ２に移動し、磁区Ｍｘは層Ｌ３に移動する。
【０２００】
このようにして、磁気記憶線ＭＭＬの各層の磁区が下方向に２層分移動されるように、フタ用の追加の磁区Ｍｙ，Ｍｘが磁気記憶線ＭＭＬに入れられる。この結果、フタ用の追加の磁区Ｍｙ，Ｍｘが磁気記憶線ＭＭＬの層Ｌ４，Ｌ３に書き込まれる。これら２層分の追加の磁区Ｍｙ，Ｍｘの磁区方向は互いに反平行である。
【０２０１】
次に、図２６を参照して、２層分の追加の磁区を読み出す動作について説明する。
【０２０２】
インターリーブ動作の実行の後にブロックＢＬＫに対する書き込み動作を再開する場合、メモリコントローラ２は、フタ用磁区を取り除き且つプログラムするコマンド（第２のコマンドとも称する）を磁気メモリ３に発行する。フタ用磁区を取り除き且つプログラムするコマンドは、フタ用磁区が書き込まれる直前の最上層の磁区の磁化方向、つまりフタ用磁区が書き込まれる直前にフィールド線ＦＬに流した電流の向きを復元し、且つ１層分のデータ（磁区）を書き込むことを指示するコマンドである。
【０２０３】
図２６の（Ａ）は、書き込み再開時のブロックＢＬＫ内の磁気記憶線ＭＭＬの状態を示している。
【０２０４】
磁気記憶線ＭＭＬの層Ｌ１は、「←」の磁化方向を有する磁区Ｍ４を保持している。磁気記憶線ＭＭＬの層Ｌ２は、「→」の磁化方向を有する磁区Ｍ３を保持している。磁気記憶線ＭＭＬの層Ｌ３は、１層目のフタ用磁区である磁区Ｍｘを保持している。磁区Ｍｘは、磁区Ｍ３とは逆の「←」の磁化方向を有している。磁気記憶線ＭＭＬの層Ｌ４は、２層目のフタ用磁区である磁区Ｍｙを保持している。磁区Ｍｙは、磁区Ｍｘとは逆の「→」の磁化方向を有している。
【０２０５】
フタ用磁区を取り除き且つプログラムするコマンドを受信すると、磁気メモリ３は、まず、図２６の（Ｂ）に示すように、磁気記憶線ＭＭＬの各層の磁区を上方向に移動するシフト動作を行う。これにより、磁区Ｍｙは磁気記憶線ＭＭＬから読み出されて読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動される。また、磁区Ｍｘ、磁区Ｍ３、磁区Ｍ４も、層Ｌ４、層Ｌ３、層Ｌ２にそれぞれ移動される。磁区Ｍｙが読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動されると、磁区Ｍｙの磁化方向に起因する磁気抵抗効果素子１１の抵抗状態に応じた状態信号ＶＥＶＡＬがキャパシタＣ１１に電圧ＶＳＭＰ１（第１のサンプリング値とも称する）として蓄積される（Ｃ１１サンプリング）。
【０２０６】
図２６の（Ｃ）に示すように、磁気メモリ３は、磁気記憶線ＭＭＬの各層の磁区を上方向に移動するシフト動作を行う。これにより、磁区Ｍｘは磁気記憶線ＭＭＬから読み出されて読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動される。また、磁区Ｍ３、磁区Ｍ４も、層Ｌ４、層Ｌ３にそれぞれ移動される。磁区Ｍｘが読み出し位置（磁性層１１Ｓ，１１Ｓ’）に移動されると、磁区Ｍｘの磁化方向に起因する磁気抵抗効果素子１１の抵抗状態に応じた状態信号ＶＥＶＡＬがキャパシタＣ１２に電圧ＶＳＭＰ２（第２のサンプリング値とも称する）として蓄積される（Ｃ１２サンプリング）。
【０２０７】
磁区Ｍｙの磁化方向と磁区Ｍｘの磁化方向は反平行であるため、磁区Ｍｙの読み出し時の磁気抵抗効果素子１１の抵抗と磁区Ｍｘの読み出し時の磁気抵抗効果素子１１の抵抗は互いに異なる。したがって、電圧ＶＳＭＰ１と電圧ＶＳＭＰ２との差は閾値電圧よりも大きくなる。この結果、センスアンプ４７の出力データＤＯＵＴは“１”となる。磁気メモリ３は、大小判定回路４８を用いて、ＶＳＭＰ１＞ＶＳＭＰ２、あるいはＶＳＭＰ１＜ＶＳＭＰ２のどちらの条件が満たされているかを判定する。この判定結果に基づいて、磁気メモリ３は、フタ用磁区Ｍｘ，Ｍｙを磁気記憶線ＭＭＬに書き込む前に最上層Ｌ４に存在した磁区Ｍ３の磁化方向を決定する。
【０２０８】
すなわち、ＶＳＭＰ１＞ＶＳＭＰ２、あるいはＶＳＭＰ１＜ＶＳＭＰ２のどちらの条件が満たされているかに応じて、これら２つの磁区Ｍｙ，Ｍｘそれぞれの磁化方向が特定される。磁区Ｍｘと磁区Ｍ３は互いに逆の磁化方向を有しているので、磁区Ｍｘの磁化方向から磁区Ｍ３の磁化方向、つまり磁区Ｍ３を形成するための誘導磁場をフィールド線ＦＬに発生させるために使用した書き込み電流の向き、が特定される。
【０２０９】
そして、図２６の（Ｃ）に示すように、磁気メモリ３は、磁区Ｍ３の磁化方向（特定された書き込み電流の向き）を示すｍｄａｔａを生成することによって、インターリーブ動作の開始前のＭＤＬの内容を復元することができる。つまり、ＭＤＬのｍｄａｔａが、特定された書き込み電流の向きを示すように、ＭＤＬのｍｄａｔａが更新される。
【０２１０】
したがって、磁気メモリ３は、後続のライトデータの値と復元されたＭＤＬの内容とに基づいて、後続のライトデータを書き込むために必要な磁区の磁化方向を正しく決定することができる。磁気メモリ３は、ＦＬドライバ２１３を駆動してフィールド線ＦＬにこの磁区の磁化方向に対応する磁場を発生させる。そして、磁気メモリ３は、シフト動作を行い、この磁区を磁気記憶線ＭＭＬの最上層Ｌ４に入れ、磁気記憶線ＭＭＬの各層の磁区を下方向に移動する。
【０２１１】
図２７は、フタ用磁区を追加するコマンドの例を示す。
【０２１２】
フタ用磁区を追加するコマンドのコマンドシーケンスは、プログラムコマンド“８１ｈ”、カラムアドレス、およびプログラムコマンド“２１ｈ”を含む。フタ用磁区を追加するコマンドのコマンドシーケンスには、ライトデータは含まれない。
【０２１３】
図２８は、フタ用磁区を取り除き且つプログラムするコマンドの例を示す。
【０２１４】
フタ用磁区を取り除き且つプログラムするコマンドは、限定されないが、例えば、上述の初層プログラムコマンド、中間層プログラムコマンド、最終層プログラムコマンドを利用して実現されてもよい。
【０２１５】
初層プログラムコマンドのコマンドシーケンスに含まれるコマンド“０１ｈ”の上位４ビット［７：４］が“０”の場合、この初層プログラムコマンドは、フタ用磁区を取り除く動作を実行しない通常の初層プログラムコマンドとして取り扱われる。
【０２１６】
初層プログラムコマンドのコマンドシーケンスに含まれるコマンド“０１ｈ”の上位４ビット［７：４］が“１”の場合、この初層プログラムコマンドは、フタ用磁区を取り除く動作も実行する初層プログラムコマンドとして取り扱われてもよい。
【０２１７】
中間層プログラムコマンドのコマンドシーケンスに含まれるコマンド“０１ｈ”の上位４ビット［７：４］が“０”の場合、この中間層プログラムコマンドは、フタ用磁区を取り除く動作を実行しない通常の中間層プログラムコマンドとして取り扱われる。
【０２１８】
中間層プログラムコマンドのコマンドシーケンスに含まれるコマンド“０１ｈ”の上位４ビット［７：４］が“１”の場合、この中間層プログラムコマンドは、フタ用磁区を取り除く動作も実行する中間層プログラムコマンドとして取り扱われてもよい。
【０２１９】
最終層プログラムコマンドのコマンドシーケンスに含まれるコマンド“００ｈ”の上位４ビット［７：４］が“０”の場合、この最終層プログラムコマンドは、フタ用磁区を取り除く動作を実行しない通常の最終層プログラムコマンドとして取り扱われる。
【０２２０】
最終層プログラムコマンドのコマンドシーケンスに含まれるコマンド“００ｈ”の上位４ビット［７：４］が“１”の場合、この最終層プログラムコマンドは、フタ用磁区を取り除く動作も実行する最終層プログラムコマンドとして取り扱われてもよい。
【０２２１】
なお、フタ用磁区を取り除き且つプログラムするコマンドとして使用される中間層プログラムコマンドおよび最終層プログラムコマンドの各々のコマンドシーケンスは、カラムアドレスを含んでいてもよい。
【０２２２】
図２９のタイミングチャートは、初層プログラム動作と、フタ用磁区を追加する動作とを示す。
【０２２３】
ここでは、初層プログラム動作の完了後に、メモリコントローラ２からのフタ用磁区を追加するコマンドを、磁気メモリ３が受信した場合が想定されている。
【０２２４】
初層プログラム動作が完了すると、メモリコントローラ２は、プログラムコマンド“８１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。引き続きメモリコントローラ２は、カラムアドレス（“００ｈ”）を発行すると共にアドレスラッチイネーブル信号ＡＬＥをアサートする。その後、メモリコントローラ２は、プログラムコマンド“２１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。
【０２２５】
磁気メモリ３のロウアドレスレジスタには、初層プログラムコマンドで指定されたロウアドレスが保持されている。磁気メモリ３は、このロウアドレスによって指定されたソース線ＳＬに対応するブロックを選択し、フタ用磁区を追加するプログラム動作を開始してビジー状態となる。フタ用磁区を追加するプログラム動作では、２層分のフタ用磁区の書き込みが実行される。
【０２２６】
図３０のタイミングチャートは、中間層プログラム動作と、フタ用磁区を追加する動作とを示す。
【０２２７】
ここでは、中間層プログラム動作の完了後に、メモリコントローラ２からのフタ用磁区を追加するコマンドを、磁気メモリ３が受信した場合が想定されている。
【０２２８】
中間層プログラム動作が完了すると、メモリコントローラ２は、プログラムコマンド“８１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。引き続きメモリコントローラ２は、カラムアドレス（“００ｈ”）を発行すると共にアドレスラッチイネーブル信号ＡＬＥをアサートする。その後、メモリコントローラ２は、プログラムコマンド“２１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。
【０２２９】
磁気メモリ３のロウアドレスレジスタには、初層プログラムコマンドで指定されたロウアドレスが保持されている。磁気メモリ３は、このロウアドレスによって指定されたソース線ＳＬに対応するブロックを選択し、フタ用磁区を追加するプログラム動作を開始してビジー状態となる。フタ用磁区を追加するプログラム動作では、２層分のフタ用磁区の書き込みが実行される。
【０２３０】
図３１は、フタ用磁区を取り除く動作も実行する初層プログラムコマンドに対するシーケンスを示すタイミングチャートである。
【０２３１】
メモリコントローラ２は、プログラムコマンド“８０ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。引き続きメモリコントローラ２は、例えば２サイクルにわたってアドレス（ロウアドレス、カラムアドレス）を発行すると共にアドレスラッチイネーブル信号ＡＬＥをアサートする。ロウアドレスは、データが書き込まれるべきブロックに対応する１つのソース線ＳＬを指定する。その後、メモリコントローラ２は、１層分のライトデータ（例えば、Ｆ７ｈ、５５ｈ、２３ｈ、６５ｈ）を磁気メモリ３に転送する。この後、メモリコントローラ２は、プログラムコマンド“１１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。
【０２３２】
磁気メモリ３においては、メモリコントローラ２から受信したロウアドレスはロウアドレスレジスタに保持される。また、メモリコントローラ２から受信したカラムアドレスはカラムアドレスレジスタに保持される。カラムアドレスレジスタに保持されたカラムアドレスの値はライトデータの受信の度に自動的にインクリメントされる。
【０２３３】
磁気メモリ３は、ロウアドレスによって指定されたソース線ＳＬに対応するブロックから２層分の磁区を読み出す動作と、初層プログラム動作とを開始してビジー状態となる。
【０２３４】
図３２は、フタ用磁区を取り除く動作も実行する中間層プログラムコマンドに対するシーケンスを示すタイミングチャートである。
【０２３５】
メモリコントローラ２は、プログラムコマンド“８１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。引き続きメモリコントローラ２は、カラムアドレスを発行すると共にアドレスラッチイネーブル信号ＡＬＥをアサートする。その後、メモリコントローラ２は、１層分のライトデータ（例えば、７６ｈ、３６ｈ、２２ｈ、９Ｄｈ）を磁気メモリ３に転送する。この後、メモリコントローラ２は、プログラムコマンド“１１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。
【０２３６】
磁気メモリ３のロウアドレスレジスタには、初層プログラムコマンドで指定されたロウアドレスが保持されている。磁気メモリ３は、このロウアドレスによって指定されたソース線ＳＬに対応するブロックを選択し、このブロックから２層分の磁区を読み出す動作と、中間層プログラム動作とを開始してビジー状態となる。
【０２３７】
図３３は、フタ用磁区を取り除く動作も実行する最終層プログラムコマンドに対するシーケンスを示すタイミングチャートである。
【０２３８】
メモリコントローラ２は、プログラムコマンド“８１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。引き続きメモリコントローラ２は、カラムアドレスを発行すると共にアドレスラッチイネーブル信号ＡＬＥをアサートする。その後、メモリコントローラ２は、１層分のライトデータ（例えば、Ｆ７ｈ、５５ｈ、２３ｈ、６５ｈ）を磁気メモリ３に転送する。この後、メモリコントローラ２は、プログラムコマンド“１０ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。
【０２３９】
磁気メモリ３のロウアドレスレジスタには、初層プログラムコマンドで指定されたロウアドレスが保持されている。磁気メモリ３は、このロウアドレスによって指定されたソース線ＳＬに対応するブロックを選択し、このブロックから２層分の磁区を読み出す動作と、最終層プログラム動作とを開始してビジー状態となる。
【０２４０】
＜２層分の追加の磁区を書き込み、２層分の追加の磁区を読み出す＞
次に、２層分の追加の磁区を書き込み、２層分の追加の磁区を読み出す動作について説明する。
【０２４１】
図３４は、２層分のフタ用磁区を書き込む動作における磁気メモリ３内のデータの変化を示す。図３４においては、各磁気記憶線ＭＭＬがＬ１〜Ｌ６の計６層で構成されている場合を想定する。
【０２４２】
以下、図３０のタイミングチャートのタイミングｔ２’〜ｔ４’（中間層プログラム動作）における磁気メモリ３内のデータの変化と、図３０のタイミングチャートのタイミングｔ５（フタ用磁区を書き込む動作）における磁気メモリ３内のデータの変化を説明する。
【０２４３】
図３０のタイミングチャートのタイミングｔ２’においては、１バイト目のライトデータＤＥｈがＸＤＬにセットされる。また、ＭＤＬには、初層プログラム動作で書き込まれた最上層Ｌ６の磁区（ＳＳＳＳ  ＮＳＳＳ  …）に対応するｍｄａｔａ（０８ｈ  ＡＡｈ  ＤＣｈ  ９Ａｈ）が格納されている。
【０２４４】
図３０のタイミングチャートのタイミングｔ３’においては、ＸＤＬに１層分のライトデータの全て（ＤＥｈ、ＡＤｈ、ＣＡｈ、ＦＥｈ）が揃う。
【０２４５】
図３０のタイミングチャートのタイミングｔ４’でプログラムコマンド“０１ｈ”が受信されると、磁気メモリ３は、ＸＤＬに格納されている１層分のライトデータに応じて、ＭＤＬのｍｄａｔａを更新する。本実施形態では、同じ磁化方向を有する隣接する２つの磁区の組み合わせがデータの“０”に対応し、互いに異なる磁化方向を有する隣接する２つの磁区の組み合わせがデータの“１”に対応する。したがって、磁気メモリ３は、ＸＤＬ内の“１”のビット位置に対応するＭＤＬのビット値を反転する。この場合、ＸＤＬとＭＤＬとの排他的論理和を求める論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ］が実行され、論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ］の結果がＭＤＬに格納されてＭＤＬが更新される。
【０２４６】
例えば、１層分のライトデータ上位１バイトに着目すると、いま、ライトデータの上位１バイトがＤＥｈ（＝１１０１  １１１０）であり、ＭＤＬのｍｄａｔａの上位１バイトが０８ｈ（＝００００  １０００）であるので、ライトデータ内の“１”のビット位置に対応するｍｄａｔａのビット値が反転されて、ｍｄａｔａの上位１バイトはＤ６ｈ（＝１１０１  ０１１０）に更新される。
【０２４７】
磁気メモリ３は、更新されたＭＤＬに基づいてフィールド線ＦＬそれぞれに電流を流して、ブロックＢＬＫを構成する全ての磁気記憶線ＭＭＬの書き込み位置に１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」を書き込む。そして磁気メモリ３は、シフト動作を実行してブロックＢＬＫに１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」を押し込む。１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」はブロックＢＬＫを構成する全ての磁気記憶線ＭＭＬの層Ｌ６に入れられ、層Ｌ６に存在していた１層分の磁区「ＳＳＳＳ  ＮＳＳＳ  …」はこれら磁気記憶線ＭＭＬの層Ｌ５に移動し、層Ｌ５に存在していた１層分の初期の磁区「ＮＮＮＮ  ＮＮＮＮ  …」は、これら磁気記憶線ＭＭＬの層Ｌ４に移動する。
【０２４８】
図３０のタイミングチャートのタイミングｔ５で、フタ用磁区を追加するコマンドが受信されると、磁気メモリ３は、層Ｌ６の磁区「ＮＮＳＮ  ＳＮＮＳ  …」の反転極性を有する１層目のフタ用磁区を書き込むために、ＭＤＬの全てのビット値それぞれを反転する。この場合、ＭＤＬの各ビットを反転する論理演算［ｎｏｔＭＤＬ］が実行され、論理演算［ｎｏｔＭＤＬ］の結果がＭＤＬに格納されてＭＤＬの内容が更新される。
【０２４９】
例えば、ＭＤＬのｍｄａｔａの上位１バイトに着目すると、いま、ＭＤＬのｍｄａｔａの上位１バイトがＤ６ｈ（＝１１０１  ０１１０）であるので、ｍｄａｔａの上位１バイトは２９ｈ（＝００１０  １００１）に更新される。
【０２５０】
磁気メモリ３は、更新されたＭＤＬに基づいてフィールド線ＦＬそれぞれに電流を流し、そしてシフト動作を実行してブロックＢＬＫに１層目のフタ用磁区「ＳＳＮＳ  ＮＳＳＮ  …」を押し込む（Ｃｕｒｒｅｎｔ  ｆｌｏｗ＆ｓｈｉｆｔ）。１層目のフタ用磁区「ＳＳＮＳ  ＮＳＳＮ  …」はブロックＢＬＫを構成する全ての磁気記憶線ＭＭＬの層Ｌ６に入れられ、層Ｌ６に存在していた１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」はこれら磁気記憶線ＭＭＬの層Ｌ５に移動し、層Ｌ５に存在していた１層分の磁区「ＳＳＳＳ  ＮＳＳＳ  …」はこれら磁気記憶線ＭＭＬの層Ｌ４に移動し、層Ｌ４に存在していた１層分の初期の磁区「ＮＮＮＮ  ＮＮＮＮ  …」は、これら磁気記憶線ＭＭＬの層Ｌ３に移動する。
【０２５１】
次に、磁気メモリ３は、２層目のフタ用磁区を書き込むために、ＭＤＬの全てのビット値それぞれを反転する。この場合、ＭＤＬの各ビットを反転する論理演算［ｎｏｔＭＤＬ］が実行され、論理演算［ｎｏｔＭＤＬ］の結果がＭＤＬに格納されてＭＤＬの内容が更新される。
【０２５２】
例えば、ＭＤＬのｍｄａｔａの上位１バイトに着目すると、いま、ＭＤＬのｍｄａｔａの上位１バイトが２９ｈ（＝００１０  １００１）であるので、ｍｄａｔａの上位１バイトはＤ６ｈ（＝１１０１  ０１１０）に更新される。
【０２５３】
磁気メモリ３は、更新されたＭＤＬに基づいてフィールド線ＦＬそれぞれに電流を流し、そしてシフト動作を実行してブロックＢＬＫに２層目のフタ用磁区「ＮＮＳＮ  ＳＮＮＳ  …」を押し込む（Ｃｕｒｒｅｎｔ  ｆｌｏｗ＆ｓｈｉｆｔ）。２層目のフタ用磁区「ＮＮＳＮ  ＳＮＮＳ  …」はブロックＢＬＫを構成する全ての磁気記憶線ＭＭＬの層Ｌ６に入れられ、層Ｌ６に存在していた１層目のフタ用磁区「ＳＳＮＳ  ＮＳＳＮ  …」は層Ｌ５移動し、層Ｌ５に存在していた１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」はこれら磁気記憶線ＭＭＬの層Ｌ４に移動し、層Ｌ４に存在していた１層分の磁区「ＳＳＳＳ  ＮＳＳＳ  …」はこれら磁気記憶線ＭＭＬの層Ｌ３に移動し、層Ｌ３に存在していた１層分の初期の磁区「ＮＮＮＮ  ＮＮＮＮ  …」はこれら磁気記憶線ＭＭＬの層Ｌ２に移動する。
【０２５４】
なお、図３４にＢ方法として示されているように、１層目のフタ用磁区が、ＭＤＬによって示される磁化方向（最後に書き込まれた磁区の磁化方向）と同じ磁化方向を有し、２層目のフタ用磁区が１層目のフタ用磁区の磁化方向とは逆の磁化方向を有していてもよい。つまり、１層目のフタ用磁区と２層目のフタ用磁区は互いに逆の磁化方向を有している必要があるが、１層目のフタ用磁区は、最後に書き込まれた磁区の磁化方向から定められる磁化方向（最後に書き込まれた磁区の磁化方向と同じ磁化方向または逆の磁化方向のいずれか）を有していればよい。
【０２５５】
図３５は、２層分のフタ用磁区を取り除き且つプログラムする動作における磁気メモリ３内のデータの変化を示す。
【０２５６】
ここでは、図３２のタイミングチャートで説明した、フタ用磁区を取り除く動作も実行する中間層プログラムコマンドを受信した場合を想定する。
【０２５７】
インターリーブ動作の終了後、図３２のタイミングチャートのタイミングｔ６’で、メモリコントローラ２はブロックＢＬＫに対する書き込み動作を再開するために、磁気メモリ３にプログラムコマンド“８１ｈ”を発行する。この時点では、ＸＤＬ、ＭＤＬの内容は不定である。
【０２５８】
図３２のタイミングチャートのタイミングｔ７’においては、ＸＤＬに１層分のライトデータの全て（７６ｈ、３６ｈ、２２ｈ、９０ｈ）が揃う。
【０２５９】
図３２のタイミングチャートのタイミングｔ８’でプログラムコマンド“１１ｈ”が受信されると、磁気メモリ３は、まず、ブロックＢＬＫの各層の磁区を上方向にシフトするシフト動作を行うことによって、ブロックＢＬＫの最上層Ｌ６からフタ用磁区「ＮＮＳＮ  ＳＮＮＳ  …」を読み出してブロックＢＬＫの各層の磁区を上方向に１層分移動する。この読み出された１層分のフタ用磁区「ＮＮＳＮ  ＳＮＮＳ  …」に対応する１層分の電圧ＳＡＭＰ１は１層分のキャパシタＣ１１にそれぞれ格納される。
【０２６０】
次いで、磁気メモリ３は、ブロックＢＬＫの各層の磁区を上方向にシフトするシフト動作を行うことによって、ブロックＢＬＫの最上層Ｌ６からフタ用磁区「ＳＳＮＳ  ＮＳＳＮ  …」を読み出してブロックＢＬＫの各層の磁区を上方向に１層分移動する。この読み出された１層分のフタ用磁区「ＳＳＮＳ  ＮＳＳＮ  …」に対応する１層分の電圧ＳＡＭＰ２は１層分のキャパシタＣ１２にそれぞれ格納される。
【０２６１】
磁気メモリ３は、サンプリング電圧ＶＳＭＰ１とサンプリング電圧ＶＳＭＰ２とを比較し、ＶＳＭＰ１とＶＳＭＰ２の大小関係が、ＶＳＭＰ１＞ＶＳＭＰ２であるか、ＶＳＭＰ１＜ＶＳＭＰ２であるかを判定する。この判定結果に基づき、磁気メモリ３は、層Ｌ５に存在していた１層目のフタ用磁区「ＳＳＮＳ  ＮＳＳＮ  …」の磁化方向を特定し、この１層目のフタ用磁区の磁化方向の反転を示すｍｄａｔａでＭＤＬを更新する（Ｃｏｍｐａｒｅ  Ｃ１１＆Ｃ１２→ＭＤＬ）。
【０２６２】
例えば、ＭＤＬのｍｄａｔａの上位１バイトに着目すると、いま、１層目のフタ用磁区の上位１バイト分の磁区は「ＳＳＮＳ  ＮＳＳＮ」であるので、更新されたＭＤＬの上位１バイトは、「ＳＳＮＳ  ＮＳＳＮ」の反転極性「ＮＮＳＮ  ＳＮＮＳ」を示すＤ６ｈ（＝１１０１  ０１１０）となる。この結果、２層のフタ用磁区を書き込む直前のＭＤＬの内容（層Ｌ６に現在存在する１層分の磁区の書き込みに使用された電流の向き）を復元することができる。
【０２６３】
よって、磁気メモリ３は、ＸＤＬの内容と復元されたＭＤＬの内容とに基づいて、ブロックＢＬＫに対する中間層プログラムを再開することが可能となる。
【０２６４】
図３６のフローチャートは、２層分のフタ用磁区を追加し、これら２層分のフタ用磁区を読み出す動作の手順を示す。
【０２６５】
磁気メモリ３は、メモリコントローラ２から受信したプログラムコマンドに応じて実行すべきプログラム動作の種類が中間層プログラム、最終層プログラム、初層プログラムのいずれであるかを判定する（ステップＳ１０１〜Ｓ１０３）。
【０２６６】
実行すべきプログラム動作の種類が中間層プログラムまたは最終層プログラムである場合（ステップＳ１０１のＹＥＳ、またはステップＳ１０２のＹＥＳ）、磁気メモリ３は、メモリコントローラ２から転送される１層分のライトデータをＸＤＬにセットする（ステップＳ１０４）。磁気メモリ３は、ＸＤＬとＭＤＬとの排他的論理和を求める論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ］を実行し、論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ］の結果をＭＤＬに格納してＭＤＬの内容を更新する（ステップＳ１０５）。磁気メモリ３は、ＭＤＬの値に基づいてＦＬドライバ２１３を駆動して、ブロックＢＬＫ内の磁気記憶線ＭＭＬそれぞれに対応するフィールド線ＦＬに磁場を発生させる（ステップＳ１０９）。磁気メモリ３は、シフト動作を行い、これによって１層分のライトデータに対応する磁区をこれら磁気記憶線ＭＭＬの最上層に入れてこれら磁気記憶線ＭＭＬの各層の磁区を下方向に１層分シフト（移動）する（ステップＳ１１０）。
【０２６７】
実行すべきプログラム動作の種類が初層プログラムである場合（ステップＳ１０３のＹＥＳ）、磁気メモリ３は、１層分の初期の磁区をこれら磁気記憶線ＭＭＬの最上層に入れる（ステップＳ１０６）。ステップＳ１０６では、磁気メモリ３は、ＭＤＬにオール１またはオール０をセットする。磁気メモリ３は、ＭＤＬの値に基づいてＦＬドライバ２１３を駆動して、ブロックＢＬＫ内の磁気記憶線ＭＭＬそれぞれに対応するフィールド線ＦＬの全てに同じ磁化方向に対応する磁場を発生させるそして、磁気メモリ３は、シフト動作を行い、これによって１層分の初期の磁区をこれら磁気記憶線ＭＭＬの最上層に入れる。
【０２６８】
１層分の初期の磁区がこれら磁気記憶線ＭＭＬの最上層に入れられた後、磁気メモリ３は、メモリコントローラ２から転送される１層分のライトデータをＸＤＬにセットする（ステップＳ１０７）。磁気メモリ３は、ＸＤＬとＭＤＬとの排他的論理和を求める論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ］を実行し、論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ］の結果をＭＤＬに格納してＭＤＬの内容を更新する（ステップＳ１０８）。そして、ステップＳ１０９、Ｓ１１０の処理を実行し、これによって１層分のライトデータに対応する１層分の磁区をこれら磁気記憶線ＭＭＬの最上層に入れ、初期の磁区を下方向に１層分移動する。
【０２６９】
実行すべきプログラム動作の種類がフタ用磁区を追加する動作（フタを入れる）である場合、つまりフタ用の磁区を追加するコマンドを受信した場合（ステップＳ１１１１のＹＥＳ）、磁気メモリ３は、まず、１層目のフタ用磁区をブロックＢＬＫにプログラムするために、ステップＳ１１３〜Ｓ１１５の処理を行う。
【０２７０】
ステップＳ１１３において、磁気メモリ３は、ＭＤＬの各ビットを反転する論理演算［ｎｏｔＭＤＬ］を実行し、論理演算［ｎｏｔＭＤＬ］の結果をＭＤＬに格納してＭＤＬの内容を更新する。
【０２７１】
ステップＳ１１４において、磁気メモリ３は、ＭＤＬの値に基づいてＦＬドライバ２１３を駆動して、ブロックＢＬＫ内の磁気記憶線ＭＭＬそれぞれに対応するフィールド線ＦＬに磁場を発生させる。
【０２７２】
ステップＳ１１５において、磁気メモリ３は、シフト動作を行い、これによって１層分のフタ用磁区をこれら磁気記憶線ＭＭＬの最上層に入れてこれら磁気記憶線ＭＭＬの各層の磁区を下方向に１層分シフト（移動）する。
【０２７３】
次に、磁気メモリ３は、２層目のフタ用磁区をブロックＢＬＫにプログラムするために、ステップＳ１１６、Ｓ１０９、Ｓ１１０の処理を行う。
【０２７４】
ステップＳ１１６において、磁気メモリ３は、ＭＤＬの各ビットを反転する論理演算［ｎｏｔＭＤＬ］を実行し、論理演算［ｎｏｔＭＤＬ］の結果をＭＤＬに格納してＭＤＬの内容を更新する。
【０２７５】
ステップＳ１０９において、磁気メモリ３は、ＭＤＬの値に基づいてＦＬドライバ２１３を駆動して、ブロックＢＬＫ内の磁気記憶線ＭＭＬそれぞれに対応するフィールド線ＦＬに磁場を発生させる。
【０２７６】
ステップＳ１１０において、磁気メモリ３は、シフト動作を行い、これによって２層目のフタ用磁区をこれら磁気記憶線ＭＭＬの最上層に入れてこれら磁気記憶線ＭＭＬの各層の磁区を下方向に１層分シフト（移動）する。
【０２７７】
実行すべきプログラム動作の種類がフタ用磁区を取り除く動作（フタを取る）である場合、つまりフタ用の磁区を取り除き且つプログラムするコマンドを受信した場合（ステップＳ１１２のＹＥＳ）、磁気メモリ３は、まず、これら磁気記憶線ＭＭＬの各層の磁区を上方向に２層分移動して２層目のフタ用磁区と１層目のフタ用磁区をこれら磁気記憶線ＭＭＬから読み出す（ステップＳ１１７）。磁気メモリ３は、読み出された２層目のフタ用磁区と読み出された１層目のフタ用磁区とに基づいて、「電流の向きの値」、つまりブロックＢＬＫへの１層分のライトデータの最後の書き込み時にフィールド線ＦＬに流した電流の向きを示すｍｄａｔａを復元し、この復元された「電流の向きの値」をＭＤＬにセットする（ステップＳ１１８）。
【０２７８】
一つの磁気記憶線ＭＭＬに着目すると、ステップＳ１１８では、磁気メモリ３は、この磁気記憶線ＭＭＬから読み出されたフタ用磁区Ｍｙの磁化方向に起因する磁気抵抗効果素子１１の抵抗状態に応じたＶＳＭＰ１（第１のサンプリング値）とこの磁気記憶線ＭＭＬから読み出されたフタ用磁区Ｍｘの磁化方向に起因する磁気抵抗効果素子１１の抵抗状態に応じたＶＳＭＰ２（第２のサンプリング値）との大小関係に基づいて、フタ用磁区Ｍｘの前にこの磁気記憶線ＭＭＬに入れられた磁区を形成するための誘導磁場をフィールド線ＦＬに発生させるために使用した電流の向きを特定する。そして、磁気メモリ３は、ｍｄａｔａがこの特定された電流の向きを示すように、ＭＤＬの内容を復元する。
【０２７９】
ＭＤＬの内容が復元された後、磁気メモリ３は、フタ用の磁区を取り除き且つプログラムするコマンドに関連付けられた１層分のライトデータをブロックＢＬＫにプログラムする（ステップＳ１１９、Ｓ１２０、Ｓ１０９、Ｓ１１０）。
【０２８０】
ステップＳ１１９において、磁気メモリ３は、メモリコントローラ２から転送される１層分のライトデータをＸＤＬにセットする。
【０２８１】
ステップＳ１２０において、磁気メモリ３は、ＸＤＬと復元されたＭＤＬとの排他的論理和を求める論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ］を実行し、論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ］の結果をＭＤＬに格納してＭＤＬの内容を更新する。
【０２８２】
ステップＳ１０９において、磁気メモリ３は、ＭＤＬの値に基づいてＦＬドライバ２１３を駆動して、ブロックＢＬＫ内の磁気記憶線ＭＭＬそれぞれに対応するフィールド線ＦＬに磁場を発生させる。
【０２８３】
ステップＳ１１０において、磁気メモリ３は、シフト動作を行い、これによって１層分のライトデータに対応する１層分の磁区をこれら磁気記憶線ＭＭＬの最上層に入れてこれら磁気記憶線ＭＭＬの各層の磁区を下方向に１層分シフト（移動）する。
【０２８４】
次に、１層分の追加の磁区を書き込み、２層分の磁区を読み出し、１層分の磁区を書き戻す動作について説明する。
【０２８５】
図３７は、１層分のフタ用磁区を書き込む動作における磁気メモリ３内のデータの変化を示す。図３７においては、各磁気記憶線ＭＭＬがＬ１〜Ｌ６の計６層で構成されている場合を想定する。
【０２８６】
以下、図３０のタイミングチャートのタイミングｔ２’〜ｔ４’（中間層プログラム動作）における磁気メモリ３内のデータの変化と、図３０のタイミングチャートのタイミングｔ５（フタ用磁区を書き込む動作）における磁気メモリ３内のデータの変化を説明する。
【０２８７】
図３０のタイミングチャートのタイミングｔ２’〜ｔ４’で実行される動作は、図３４で説明した動作と同じである。
【０２８８】
図３０のタイミングチャートのタイミングｔ５で、フタ用磁区を追加するコマンドを受信すると、磁気メモリ３は、層Ｌ６の磁区「ＮＮＳＮ  ＳＮＮＳ  …」の反転極性を有する１層分のフタ用磁区を書き込むために、ＭＤＬの全てのビット値それぞれを反転する。この場合、ＭＤＬの各ビットを反転する論理演算［ｎｏｔＭＤＬ］が実行され、論理演算［ｎｏｔＭＤＬ］の結果がＭＤＬに格納されてＭＤＬが更新される。
【０２８９】
例えば、ＭＤＬのｍｄａｔａの上位１バイトに着目すると、いま、ＭＤＬのｍｄａｔａの上位１バイトがＤ６ｈ（＝１１０１  ０１１０）であるので、ｍｄａｔａの上位１バイトは２９ｈ（＝００１０  １００１）に更新される。
【０２９０】
磁気メモリ３は、更新されたＭＤＬに基づいてフィールド線ＦＬそれぞれに電流を流し、そしてシフト動作を実行してブロックＢＬＫに１層分のフタ用磁区「ＳＳＮＳ  ＮＳＳＮ  …」を押し込む（Ｃｕｒｒｅｎｔ  ｆｌｏｗ＆ｓｈｉｆｔ）。１層分のフタ用磁区「ＳＳＮＳ  ＮＳＳＮ  …」はブロックＢＬＫを構成する全ての磁気記憶線ＭＭＬの層Ｌ６に入れられ、層Ｌ６に存在していた１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」はこれら磁気記憶線ＭＭＬの層Ｌ５に移動し、層Ｌ５に存在していた１層分の磁区「ＳＳＳＳ  ＮＳＳＳ  …」はこれら磁気記憶線ＭＭＬの層Ｌ４に移動し、層Ｌ４に存在していた１層分の初期の磁区「ＮＮＮＮ  ＮＮＮＮ  …」は、これら磁気記憶線ＭＭＬの層Ｌ３に移動する。
【０２９１】
図３８は、１層分のフタ用磁区を取り除き且つプログラムする動作における磁気メモリ３内のデータの変化を示す。
【０２９２】
ここでは、図３２のタイミングチャートで説明した、フタ用磁区を取り除く動作も実行する中間層プログラムコマンドを受信した場合を想定する。
【０２９３】
インターリーブ動作の終了後、図３２のタイミングチャートのタイミングｔ６’で、メモリコントローラ２はブロックＢＬＫに対する書き込み動作を再開するために、磁気メモリ３にプログラムコマンド“８１ｈ”を発行する。この時点では、ＸＤＬ、ＭＤＬの内容は不定である。
【０２９４】
図３２のタイミングチャートのタイミングｔ７’においては、ＸＤＬに１層分のライトデータの全て（７６ｈ、３６ｈ、２２ｈ、９０ｈ）が揃う。
【０２９５】
図３２のタイミングチャートのタイミングｔ８’でプログラムコマンド“１１ｈ”を受信すると、磁気メモリ３は、まず、ブロックＢＬＫの各層の磁区を上方向にシフトするシフト動作を行うことによって、ブロックＢＬＫの最上層Ｌ６からフタ用磁区「ＳＳＮＳ  ＮＳＳＮ  …」を読み出してブロックＢＬＫの各層の磁区を上方向に１層分移動する。この読み出された１層分のフタ用磁区「ＳＳＮＳ  ＮＳＳＮ  …」に対応する１層分の電圧ＳＡＭＰ１は１層分のキャパシタＣ１１にそれぞれ格納される。
【０２９６】
次いで、磁気メモリ３は、ブロックＢＬＫの各層の磁区を上方向にシフトするシフト動作を行うことによって、ブロックＢＬＫの最上層Ｌ６から１層分のライトデータに対応する１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」を読み出してブロックＢＬＫの各層の磁区を上方向に１層分移動する。この読み出された１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」に対応する１層分の電圧ＳＡＭＰ２は１層分のキャパシタＣ１２にそれぞれ格納される。
【０２９７】
磁気メモリ３は、サンプリング電圧ＶＳＭＰ１とサンプリング電圧ＶＳＭＰ２とを比較し、ＶＳＭＰ１とＶＳＭＰ２の大小関係が、ＶＳＭＰ１＞ＶＳＭＰ２であるか、ＶＳＭＰ１＜ＶＳＭＰ２であるかを判定する。この判定結果に基づき、磁気メモリ３は、層Ｌ５に存在していた１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」の磁化方向を決定することができる。磁気メモリ３は、この決定された磁区の磁化方向を示すｍｄａｔａを用いて、フタ用磁区が追加される前のＭＤＬの内容を復元する（Ｃｏｍｐａｒａ  Ｃ１１＆Ｃ１２→ＭＤＬ）。
【０２９８】
例えば、ＭＤＬのｍｄａｔａの上位１バイトに着目すると、いま、この１層分のライトデータの上位１バイト分の磁区は「ＮＮＳＮ  ＳＮＮＳ」であるので、更新されたＭＤＬの上位１バイトは、「ＮＮＳＮ  ＳＮＮＳ」を示すＤ６ｈ（＝１１０１  ０１１０）となる。
【０２９９】
磁気メモリ３は、特定された磁化方向を有する１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」をブロックＢＬＫに含まれる磁気記憶線ＭＭＬそれぞれの最上層Ｌ６に書き戻して、これら磁気記憶線ＭＭＬの各層の磁区を下方向に１層分移動する（ＭＤＬ  ｗｒｉｔｅ）。
【０３００】
このＭＤＬ  ｗｒｉｔｅでは、磁気メモリ３は、更新されたＭＤＬに基づいてフィールド線ＦＬそれぞれに電流を流し、そしてシフト動作を実行してブロックＢＬＫに１層分のライトデータに対応する１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」を押し込む。１層分のライトデータに対応する１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」はブロックＢＬＫを構成する全ての磁気記憶線ＭＭＬの層Ｌ６に入れられ、これら磁気記憶線ＭＭＬの各層の磁区は下方向に１層分移動する。
【０３０１】
このようにして、フタ用磁区を書き込む直前のＭＤＬの内容が復元され、１層分のライトデータに対応する１層分の磁区がブロックＢＬＫに書き戻される。よって、磁気メモリ３は、ＸＤＬの内容と復元されたＭＤＬの内容とに基づいて、ブロックＢＬＫに対する中間層プログラムを再開することが可能となる。
【０３０２】
図３９のフローチャートは、１層分のフタ用磁区を追加し、１層分のフタ用磁区と１層分のライトデータ用磁区とを読み出し、１層分のライトデータ用磁区を書き戻す動作の手順を示す。
【０３０３】
ここでは、初層プログラム動作、中間層プログラム動作、および最終層プログラム動作の手順は図３６のフローチャートで説明した手順と同じである。図３６のフローチャートで説明した手順と異なるのは、メモリコントローラ２からのフタ用の磁区を追加するコマンドを受信した場合（ステップＳ１１１のＹＥＳ）に磁気メモリ３が実行する動作と、メモリコントローラ２からのフタ用の磁区を取り除き且つプログラムするコマンドを受信した場合（ステップＳ１１２のＹＥＳ）に磁気メモリ３が実行する動作のみである。以下、これら動作について説明する。
【０３０４】
実行すべきプログラム動作の種類がフタ用磁区を追加する動作（フタを入れる）である場合、つまりメモリコントローラ２が発行したフタ用の磁区を追加するコマンドを受信した場合（ステップＳ１１１のＹＥＳ）、磁気メモリ３は、まず、１層分のフタ用磁区をブロックＢＬＫにプログラムするために、ステップＳ２０１、Ｓ１０９、Ｓ１１０の処理を行う。
【０３０５】
ステップＳ２０１において、磁気メモリ３は、ＭＤＬの各ビットを反転する論理演算［ｎｏｔＭＤＬ］を実行し、論理演算［ｎｏｔＭＤＬ］の結果をＭＤＬに格納してＭＤＬの内容を更新する。
【０３０６】
ステップＳ１０９において、磁気メモリ３は、ＭＤＬの値に基づいてＦＬドライバ２１３を駆動して、ブロックＢＬＫ内の磁気記憶線ＭＭＬそれぞれに対応するフィールド線ＦＬに磁場を発生させる。
【０３０７】
ステップＳ１１０において、磁気メモリ３は、シフト動作を行い、これによって１層分のフタ用磁区をこれら磁気記憶線ＭＭＬの最上層に入れてこれら磁気記憶線ＭＭＬの各層の磁区を下方向に１層分シフト（移動）する。
【０３０８】
実行すべきプログラム動作の種類がフタ用磁区を取り除く動作（フタを取る）である場合、つまりメモリコントローラ２が発行したフタ用の磁区を取り除き且つプログラムするコマンドを受信した場合（ステップＳ１１２のＹＥＳ）、磁気メモリ３は、まず、これら磁気記憶線ＭＭＬの各層の磁区を上方向に２層分移動して、１層分のフタ用磁区と、１層分のライトデータに対応する１層分の磁区とをこれら磁気記憶線ＭＭＬから読み出す（ステップＳ２１１）。磁気メモリ３は、読み出された１層分のフタ用磁区と、１層分のライトデータに対応する読み出された１層分の磁区とに基づいて、「電流の向きの値」、つまりこの１層分のライトデータに対応する１層分の磁区の書き込み時にフィールド線ＦＬに流した電流の向きを示すｍｄａｔａを復元し、この復元された「電流の向きの値」をＭＤＬにセットする（ステップＳ２１２）。
【０３０９】
ＭＤＬの内容が復元された後、磁気メモリ３は、この１層分のライトデータに対応する１層分の磁区をこれら磁気記憶線ＭＭＬの最上層に書き戻す（ステップＳ２１３、Ｓ２１４）。
【０３１０】
ステップＳ２１３において、磁気メモリ３は、ＭＤＬの値に基づいてＦＬドライバ２１３を駆動して、ブロックＢＬＫ内の磁気記憶線ＭＭＬそれぞれに対応するフィールド線ＦＬに磁場を発生させる。
【０３１１】
ステップＳ２１４において、磁気メモリ３は、シフト動作を行い、これによって１層分のライトデータに対応する１層分の磁区をこれら磁気記憶線ＭＭＬの最上層に入れてこれら磁気記憶線ＭＭＬの各層の磁区を下方向に１層分シフト（移動）する。
【０３１２】
ＭＤＬの内容が復元され且つ１層分の磁区が書き戻された後、磁気メモリ３は、フタ用の磁区を取り除き且つプログラムするコマンドに関連付けられた新たな１層分のライトデータをブロックＢＬＫにプログラムする（ステップＳ２１５、Ｓ２１６、Ｓ１０９、Ｓ１１０）。
【０３１３】
ステップＳ２１５において、磁気メモリ３は、メモリコントローラ２から転送される１層分のライトデータをＸＤＬにセットする。
【０３１４】
ステップＳ２１６において、磁気メモリ３は、ＸＤＬと復元されたＭＤＬとの排他的論理和を求める論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ］を実行し、論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ］の結果をＭＤＬに格納してＭＤＬの内容を更新する。
【０３１５】
ステップＳ１０９において、磁気メモリ３は、ＭＤＬの値に基づいてＦＬドライバ２１３を駆動して、ブロックＢＬＫ内の磁気記憶線ＭＭＬそれぞれに対応するフィールド線ＦＬに磁場を発生させる。
【０３１６】
ステップＳ１１０において、磁気メモリ３は、シフト動作を行い、これによって１層分のライトデータに対応する１層分の磁区をこれら磁気記憶線ＭＭＬの最上層に入れてこれら磁気記憶線ＭＭＬの各層の磁区を下方向に１層分シフト（移動）する。
【０３１７】
図４０は、予め決められた固定の磁化方向を有する磁区をフタ用磁区として追加する動作を示す。予め決められた固定の磁化方向は、上述の初期の磁区と同様に、次に書き込まれる磁区の磁化方向を決定するために必要な基準の磁化方向として使用される。
【０３１８】
図４０の（Ａ）は、磁気記憶線ＭＭＬの層Ｌ３に初期の磁区Ｍ７（Ｎ）が格納され、層Ｌ４に磁区Ｍ６（Ｓ）が格納され、層Ｌ５に磁区Ｍ５（Ｎ）が格納され、最上層Ｌ６に磁区Ｍ４（Ｎ）が格納されている状態を示している。
【０３１９】
この状態で、フタ用の磁区を追加するコマンドを受信した場合、図４０の（Ｂ）に示すように、磁気メモリ３は、予め決められた固定の磁化方向を有する初期の磁区Ｍ３（ここではＮ）を最上層Ｌ６に入れて磁気記憶線ＭＭＬの各層の磁区を下方向に１層分移動する。
【０３２０】
そして、プログラムコマンドを受信した場合、図４０の（Ｃ）に示すように、磁気メモリ３は、このプログラムコマンドに関連付けられたライトデータの値と初期の磁区Ｍ３の磁化方向とに基づいて、初期の磁区Ｍ３と同じ磁化方向または逆の磁化方向を有する磁区Ｍ２を最上層Ｌ６に入れて、磁気記憶線ＭＭＬの各層の磁区を下方向に１層分移動する。例えば、ライトデータの値が“１”の場合には、磁気メモリ３は、初期の磁区Ｍ３（Ｎ）と逆の磁化方向を有する磁区Ｍ２（Ｓ）を最上層Ｌ６に入れて磁気記憶線ＭＭＬの各層の磁区を下方向に１層分移動する。一方、ライトデータの値が“０”の場合には、磁気メモリ３は、初期の磁区Ｍ３（Ｎ）と同じ磁化方向を有する磁区Ｍ２（Ｎ）を最上層Ｌ６に入れて磁気記憶線ＭＭＬの各層の磁区を下方向に１層分移動する。
【０３２１】
予め決められた固定の磁化方向を有する初期の磁区をフタ用磁区として追加する構成においては、メモリコントローラ２は、書き込み途中のブロックＢＬＫと別のブロックに対する処理を行うインターリーブ動作を開始する時に、フタ用磁区を追加するコマンドを磁気メモリ３に発行し、インターリーブ動作の実行の後にインターリーブ元のブロックＢＬＫに対する書き込み動作を再開する時に、プログラムコマンドを磁気メモリ３に発行してもよい。
【０３２２】
あるいは、メモリコントローラ２は、インターリーブ元のブロックＢＬＫに対する書き込み動作を再開する時に、フタ用磁区を追加するコマンドと、プログラムコマンドとを磁気メモリ３に発行してもよい。
【０３２３】
このように、予め決められた固定の磁化方向を有する初期の磁区をフタ用磁区として追加する構成においては、この固定の磁化方向を有する初期の磁区とその下層の磁区との組み合わせによって表されるビット情報は無効となるものの、この固定の磁化方向を有する初期の磁区の読み出しを行う必要はない。どの層にこの固定の磁化方向を有する初期の磁区が入れられたかを示す情報は、メモリコントローラ２によって保持される。
【０３２４】
また、予め決められた固定の磁化方向を有する初期の磁区をフタ用磁区として追加する構成においては、フタ用の磁区を追加するコマンドとプログラムコマンドとは、上述の一つの初層プログラムコマンドとして実現することができる。
【０３２５】
この場合、インターリーブ動作の実行の後にブロックＢＬＫに対する書き込み動作を再開する場合、メモリコントローラ２は、初層プログラムコマンドを磁気メモリ３に発行すればよい。
【０３２６】
図４１のフローチャートは、固定の磁化方向を有する磁区をフタ用磁区として追加する動作の手順を示す。
【０３２７】
基本的には、磁気メモリ３は、メモリコントローラ２からのフタ用の磁区を追加するコマンドを受信した場合、固定の磁化方向を有する磁区を磁気記憶線ＭＭＬの最上層に入れて磁気記憶線ＭＭＬの各層の磁区を下方向に１層分移動し、フタ用の磁区を取り除き且つプログラムするコマンドをメモリコントローラ２から受信した場合、ライトデータの値と固定の磁化方向とに基づいて、固定の磁化方向と同じ磁化方向または逆の磁化方向を有する磁区を磁気記憶線ＭＭＬの最上層に入れて磁気記憶線ＭＭＬの各層の磁区を下方向に１層分移動する。
【０３２８】
フタ用の磁区を追加するコマンドとプログラムコマンドとが一つの初層プログラムコマンドとして実現されているケースにおいては、図４１のフローチャートに示すように、図３６のフローチャートで説明したステップＳ１０１〜Ｓ１０８と同じ処理だけが実行されればよい。
【０３２９】
次に、ＭＤＬの内容の維持する機能について説明する。
【０３３０】
図４２のタイミングチャートは、最後にプログラムされた層の磁化方向を示すｍｄａｔａを保持するＭＤＬをリセットしない読み出し動作を示す。
【０３３１】
ここでは、ＭＤＬをリセットしないリードコマンドが使用される。このリードコマンドのコマンドシーケンスは、図４２に示すように、例えば、リードコマンド“００ｈ”、ロウアドレス、カラムアドレス、リードコマンド“３１ｈ”を含む。ＭＤＬのリセットを許可する通常のリードコマンドのコマンドシーケンスに含まれる最後のリードコマンドは“３０ｈ”であったが、ＭＤＬをリセットしないリードコマンドのコマンドシーケンスに含まれる最後のリードコマンドは“３１ｈ”に変更されている。
【０３３２】
あるブロックＢＬＫに対する書き込み途中で別のブロックに対するリード動作を開始すべき場合、メモリコントローラは、磁気メモリ３内の別のブロックから１層分のデータを読み出すためのコマンドシーケンス（リードコマンド“００ｈ”、ロウアドレス、カラムアドレス、リードコマンド“３１ｈ”）を磁気メモリ３に送信する。
【０３３３】
すなわち、メモリコントローラ２は、リードコマンド“００ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。引き続きメモリコントローラ２は、例えば２サイクルにわたってアドレス（ロウアドレス、カラムアドレス）を発行すると共にアドレスラッチイネーブル信号ＡＬＥをアサートする。ロウアドレスは、データが読み出されるべきインターリーブ先のブロックに対応する１つのソース線ＳＬを指定する。カラムアドレスは、例えば、複数のカラムのうちの１つのカラムを指定する。その後、メモリコントローラ２は、リードコマンド“３１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。
【０３３４】
リードコマンド“３１ｈ”を受信すると、磁気メモリ３は、ＭＤＬをリセットせずに、ロウアドレスによって指定されたソース線ＳＬに対応するブロックからのデータの読み出し動作を開始してビジー状態となる。磁気メモリ３においては、このブロックの各層の磁区を上方向に移動するシフト動作が２回実行され、このブロックから最上層Ｌｎの磁区と最上層に隣接する層Ｌｎ−１の磁区との２層分の磁区が読み出される。そして、これら最上層Ｌｎの磁区と層Ｌｎ−１の磁区とを比較することによって得られる１層分のデータが磁気メモリ３内のラッチ回路ＸＤＬに保持される。なお、図４２では、図示の簡単化のために１層に対応するデータサイズが４バイトである場合が例示されている。
【０３３５】
その後、磁気メモリ３がレディー状態になると、メモリコントローラ２はリードイネーブル信号ＲＥｎを繰り返しアサートする。リードイネーブル信号ＲＥｎがアサートされる度に、データラッチ回路ＸＤＬ内のデータが１バイト単位でコントローラ２へ送信される。
【０３３６】
図４３は、図４２のタイミングチャートによって示される読み出し動作における磁気メモリ３内のデータの変化を示す。
【０３３７】
図４３のｔ３’、ｔ４’は、図３０のタイミングチャートで説明した中間層プログラム動作を示している。
【０３３８】
タイミングｔ３’においては、ＸＤＬに１層分のライトデータの全て（ＤＥｈ、ＡＤｈ、ＣＡｈ、ＦＥｈ）が揃う。
【０３３９】
タイミングｔ４’でプログラムコマンド“０１ｈ”が受信されると、磁気メモリ３は、ＸＤＬに格納されている１層分のライトデータに応じて、ＭＤＬのｍｄａｔａを更新する。この場合、ＸＤＬとＭＤＬとの排他的論理和を求める論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ］が実行され、論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ］の結果をＭＤＬに格納してＭＤＬの内容を更新する。
【０３４０】
例えば、１層分のライトデータ上位１バイトに着目すると、いま、ライトデータの上位１バイトがＤＥｈ（＝１１０１  １１１０）であり、ＭＤＬのｍｄａｔａの上位１バイトが０８ｈ（＝００００  １０００）であるので、ｍｄａｔａの上位１バイトはＤ６ｈ（＝１１０１  ０１１０）に更新される。
【０３４１】
磁気メモリ３は、更新されたＭＤＬに基づいてフィールド線ＦＬそれぞれに電流を流して、ブロックＢＬＫを構成する全ての磁気記憶線ＭＭＬの書き込み位置に１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」を書き込む。そして磁気メモリ３は、シフト動作を実行してブロックＢＬＫに１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」を押し込む。１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」はブロックＢＬＫを構成する全ての磁気記憶線ＭＭＬの層Ｌ６に入れられ、層Ｌ６に存在していた１層分の磁区「ＳＳＳＳ  ＮＳＳＳ  …」はこれら磁気記憶線ＭＭＬの層Ｌ５に移動し、層Ｌ５に存在していた１層分の初期の磁区「ＮＮＮＮ  ＮＮＮＮ  …」は、これら磁気記憶線ＭＭＬの層Ｌ４に移動する。
【０３４２】
図４３のｔ５’、ｔ６’は、図４２のタイミングチャートで説明したデータ読み出し動作を示している。
【０３４３】
リードコマンド“００ｈ”、ロウアドレス、カラムアドレス、リードコマンド“３１ｈ”を含むコマンドシーケンスを受信すると、磁気メモリ３は、ＭＤＬをリセットせずに、ロウアドレスで指定された別のブロックに対する読み出し動作を開始する。
【０３４４】
磁気メモリ３は、別のブロックＢＬＫを構成する磁気記憶線ＭＭＬそれぞれの各磁区を上方向に１層分移動させるシフト動作を２回実行する。これにより、これら磁気記憶線ＭＭＬの各々において、各磁区が上方向に２層分移動し、ブロックから２層分の磁区「ＳＳＳＳ  ＮＳＳＳ  …」、「ＮＮＮＮ  ＮＮＮＮ  …」が読み出される。そして、磁気メモリ３は、各ビット線ＢＬに対応する２つの電圧ＶＳＭＰ１、２を比較することによって、１層分の出力データ（ここでは４バイトのデータ）を生成し、この出力データをＸＤＬに格納する。出力データの例えば上位１バイトに着目すると、層Ｌ４の上位１バイト分の磁区は「ＳＳＳＳ  ＮＳＳＳ」であり、層Ｌ３の上位１バイト分の磁区は「ＮＮＮＮ  ＮＮＮＮ」であるので、出力データの上位１バイトは「１１１１  ０１１１１」（＝Ｆ７ｈ）となる。
【０３４５】
例えば、メモリコントローラ２は、インターリーブ先のブロックに対してデータ読み出し動作を行い、インターリーブ動作の実行の後に、書き込み途中のブロック（インターリーブ元のブロックＢＬＫ）に対する書き込み動作を再開するケースにおいては、フタ用磁区を追加するコマンドを発行せずに、ＭＤＬをリセットしないリードコマンドをインターリーブ先のブロックに対して発行してもよい。
【０３４６】
一方、インターリーブ先のブロックに対してデータ書き込み動作を行うケース、またはインターリーブ先のブロックに対してデータ読み出し動作を行い、インターリーブ動作の実行の後にさらに別のブロックに対するデータ書き込み動作を行うケースにおいては、メモリコントローラ２は、インターリーブ元のブロックＢＬＫに対してフタ用磁区を追加するコマンドを発行してもよい。あるいは、インターリーブ元のブロックＢＬＫに対するデータ書き込み動作を再開する際に、メモリコントローラ２は、固定の磁化方向の磁区の書き込みから書き込み動作を再開するために、再び初層プログラムコマンドをブロックＢＬＫに発行してもよい。
【０３４７】
このように、メモリコントローラ２は、フタ用磁区を追加するコマンド、フタ用磁区を取り除いて且つプログラムするコマンド、固定の磁化方向の磁区の書き込みから書き込み動作を再開するコマンド（初層プログラムコマンド）、ＭＤＬをリセットしないリードコマンド等を含む様々なコマンドを適宜発行することにより、複数のブロックに対する柔軟な操作を実行することができる。
【０３４８】
次に、２以上のＭＤＬを使用することによって、インターリーブ元のブロックＢＬＫに対する最後のプログラムで使用したＭＤＬの内容を維持する動作について説明する。
【０３４９】
磁気メモリ３は、２つのＭＤＬ、つまりＭＤＬ＃１、ＭＤＬ＃２を含む。ＭＤＬ＃１は、これまで説明したＭＤＬと同じラッチ回路であり、複数のブロック間で共有される。ＭＤＬ＃２は、書き込み途中のブロックに対応するＭＤＬ＃１の内容のコピーを格納するためのＭＤＬである。
【０３５０】
図４４は、磁気メモリ３に発行されるコピーコマンド（第３のコマンドとも称する）の例を示す。このコピーコマンドは、ＭＤＬ＃１の内容をＭＤＬ＃２にコピーすべきことを指示する。
【０３５１】
このコピーコマンドのコマンドシーケンスは、例えば、コマンド８１ｈ，カラムアドレス、コマンド４１ｈを含む。
【０３５２】
図４５は、磁気メモリ３内の複数のブロック間で共有される２つのＭＤＬを示す。図４５に示されているように、磁気メモリ３は、ラッチ回路として、ＸＤＬ、ＭＤＬ＃１、ＭＤＬ＃２を含む。ＸＤＬ、ＭＤＬ＃１およびＭＤＬ＃２は、複数のブロック間で共有される。メモリコントローラ２から図４４のコピーコマンドを受信すると、磁気メモリ３は、現在のＭＤＬ＃１の内容をＭＤＬ＃２にコピーするコピーコマンド処理（コピー動作とも称する）を実行する。
【０３５３】
書き込み途中のブロックＢＬＫとは別のブロックの処理を行うインターリーブ動作を開始する場合、メモリコントローラ２は、フタ用磁区を追加するコマンドの代わりに、このコピーコマンドを磁気メモリ３に発行することができる。
【０３５４】
なお、一つのＭＤＬ＃１が全てのブロック間で共有されるのではなく、ある一つのＭＤＬ＃１が特定の幾つかのブロック間で共有され、他の一つのＭＤＬ＃１が別の特定の幾つかのブロック間で共有されてもよい。
【０３５５】
図４６のタイミングチャートは、初層プログラム動作と、コピーコマンド処理とを示す。
【０３５６】
ここでは、初層プログラム動作の完了後に、メモリコントローラ２からのフタ用磁区を追加するコマンドを、磁気メモリ３が受信した場合が想定されている。
【０３５７】
初層プログラム動作が完了すると、メモリコントローラ２は、プログラムコマンド“８１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。引き続きメモリコントローラ２は、カラムアドレス（“００ｈ”）を発行すると共にアドレスラッチイネーブル信号ＡＬＥをアサートする。その後、メモリコントローラ２は、コマンド“４１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。
【０３５８】
磁気メモリ３は、ＭＤＬ＃１の内容をＭＤＬ＃２にコピーするコピーコマンド処理を開始してビジー状態となる。なお、磁気メモリ３のロウアドレスレジスタには、初層プログラムコマンドで指定されたロウアドレスが保持されている。したがって、ある一つのＭＤＬ＃１が特定の幾つかのブロック間で共有されるケースにおいては、磁気メモリ３は、このロウアドレスによって指定されたソース線ＳＬに対応するブロックに対応するＭＤＬ＃１を特定し、この特定されたＭＤＬ＃１の内容をＭＤＬ＃２にコピーするコピーコマンド処理を開始してもよい。
【０３５９】
図４７のタイミングチャートは、中間層プログラム動作と、コピーコマンド処理とを示す。
【０３６０】
ここでは、中間層プログラム動作の完了後に、メモリコントローラ２からのフタ用磁区を追加するコマンドを、磁気メモリ３が受信した場合が想定されている。
【０３６１】
中間層プログラム動作が完了すると、メモリコントローラ２は、プログラムコマンド“８１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。引き続きメモリコントローラ２は、カラムアドレスを発行すると共にアドレスラッチイネーブル信号ＡＬＥをアサートする。その後、メモリコントローラ２は、コマンド“４１ｈ”を発行すると共に、コマンドラッチイネーブル信号ＣＬＥをアサートする。
【０３６２】
磁気メモリ３は、ＭＤＬ＃１の内容をＭＤＬ＃２にコピーするコピーコマンド処理を開始してビジー状態となる。なお、磁気メモリ３のロウアドレスレジスタには、初層プログラムコマンドで指定されたロウアドレスが保持されている。したがって、ある一つのＭＤＬ＃１が特定の幾つかのブロック間で共有されるケースにおいては、磁気メモリ３は、このロウアドレスによって指定されたソース線ＳＬに対応するブロックに対応するＭＤＬ＃１を特定し、この特定されたＭＤＬ＃１の内容をＭＤＬ＃２にコピーするコピーコマンド処理を開始してもよい。
【０３６３】
図４８は、コピーコマンド処理における磁気メモリ３内のデータの変化を示す。図４８においては、各磁気記憶線ＭＭＬがＬ１〜Ｌ６の計６層で構成されている場合を想定する。
【０３６４】
以下、図４７のタイミングチャートのタイミングｔ２’〜ｔ４’（中間層プログラム動作）における磁気メモリ３内のデータの変化と、図４７のタイミングチャートのタイミングｔ５（コピーコマンド処理）における磁気メモリ３内のデータの変化を説明する。
【０３６５】
タイミングｔ２’〜ｔ４’の動作は、図３４で説明した動作と同じである。ブロックＢＬＫの層Ｌ４には１層分の初期の磁区「ＮＮＮＮ  ＮＮＮＮ  …」が格納され、層Ｌ５には１層分のライトデータに対応する１層分の磁区「ＳＳＳＳ  ＮＳＳＳ  …」が格納され、最上層Ｌ６には１層分のライトデータに対応する１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」が格納されている。また、ＭＤＬ＃１には、最上層Ｌ６に格納されている１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」の磁化方向を示すｍｄａｔａ（Ｄ６ｈ  ０７ｈ  １６ｈ  ６４ｈ）が格納されている。
【０３６６】
書き込み途中のブロックＢＬＫとは別のブロックの処理を行うインターリーブ動作を開始する場合、メモリコントローラ２は、コピーコマンドを磁気メモリ３に発行する。
【０３６７】
このコピーコマンドをメモリコントローラ２から受信した場合（タイミングｔ５）、磁気メモリ３は、ＭＤＬ＃１に格納されているｍｄａｔａ（Ｄ６ｈ  ０７ｈ  １６ｈ  ６４ｈ）をＭＤＬ＃２にコピーする。
【０３６８】
インターリーブ動作の実行の後にブロックＢＬＫに対する書き込み動作を再開する場合、メモリコントローラ２は、プログラムコマンド（例えば、中間層プログラムコマンド、または最終層プログラムコマンド）を磁気メモリ３に発行する。
【０３６９】
ＭＤＬ＃２には、最上層Ｌ６に格納されている１層分の磁区「ＮＮＳＮ  ＳＮＮＳ  …」の磁化方向を示すｍｄａｔａが格納されている。したがって、磁気メモリ３は、ＭＤＬ＃２を使用することによって、ブロックＢＬＫに対する書き込み動作を正常に再開する実行することが可能となる。この場合、磁気メモリ３は、まず、ＭＤＬ＃２の内容をＭＤＬ＃１にコピーする。そして、磁気メモリ３は、メモリコントローラ２から受信したプログラムコマンドに関連付けられたライトデータがＸＤＬに転送されると、ＸＤＬとＭＤＬ＃１との排他的論理和を求める論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ＃１］を実行し、論理演算［ＸＤＬ  ｅｘｏｒ  ＭＤＬ＃１］の結果をＭＤＬ＃１に格納してＭＤＬ＃１の内容を更新する。これにより、ライトデータの“０”または“１”に応じて、ブロックＢＬＫに最後に書き込まれた１層分の磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する１層分の磁区を正しくブロックＢＬＫに書き込むことができる。
【０３７０】
一つの磁気記憶線ＭＭＬに着目すると、磁気メモリ３は、まず、ＭＤＬ＃２の内容に基づいて、この磁気記憶線ＭＭＬの最上層Ｌｎに格納されている磁区の磁化方向を決定する。そして、磁気メモリ３は、受信したプログラムコマンドに関連付けられたライトデータの値と決定された最上層Ｌｎの磁区の磁化方向とに基づいて、磁気記憶線ＭＭＬの各層に格納されている磁区が下方向に移動されるように、決定された最上層Ｌｎの磁区の磁化方向と同じ磁化方向または逆の磁化方向を有する磁区を磁気記憶線ＭＭＬの最上層Ｌｎに入れる。
【０３７１】
なお、ここでは、ＭＤＬ（ＭＤＬ＃１）の内容を磁気メモリ３内の別のＭＤＬ（ＭＤＬ＃２）にコピーしたが、メモリコントローラ２のバッファにＭＤＬの内容をコピーしてもよい。この場合、メモリコントローラ２は、ＭＤＬの内容をリードするコマンド（ＭＤＬリードコマンド）を磁気メモリ３に発行し、磁気メモリ３はこのＭＤＬリードコマンドに応じてＭＤＬの内容をメモリコントローラ２に転送してもよい。メモリコントローラ２は、そのバッファ内に複数のブロックそれぞれに対応するＭＤＬの内容を保持してもよい。この場合、メモリコントローラ２は、バッファ内のＭＤＬの内容毎にこのＭＤＬに対応するブロックの識別子を管理すればよい。
【０３７２】
以上説明したように、本実施形態によれば、フタ用磁区を追加するコマンドをメモリコントローラ２が必要に応じて磁気メモリ３に送信することによって、磁気記憶線ＭＭＬの任意の層に対するプログラム動作の完了時に、フタ用磁区を磁気記憶線ＭＭＬの最上層に入れることができる。また、フタ用磁区を取り除き且つプログラムするコマンドをメモリコントローラ２が必要に応じて磁気メモリ３に送信することによって、フタ用磁区を追加する前に、磁気記憶線ＭＭＬの最上層に存在していた磁区（最後に書き込まれた磁区）の磁化方向を正しく復元することが可能となる。
【０３７３】
よって、磁気記憶線ＭＭＬの隣接する２つの層の磁化方向が同じ磁化方向または逆の磁化方向のいずれであるかに応じてデータの第１の値（例えば“１”）または第２の値（例えば“０”）を表す構成においても、ある磁気記憶線ＭＭＬを含むブロックＢＬＫに対する書き込み途中に別のブロックに対する処理（書き込み動作、読み出し動作）を開始し、その後、ブロックＢＬＫに対する書き込み動作を再開するといった柔軟な書き込み動作を実現することができる。
【０３７４】
なお、本実施形態では、各ブロックが複数の磁気記憶線ＭＭＬを含む構成を例示して説明したが、原理的には、各ブロックに含まれる磁気記憶線ＭＭＬの数は一つ以上であればよい。
【０３７５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０３７６】
１…メモリシステム、２…メモリコントローラ、３…磁気メモリ、２１…ホストインタフェース、２２…メモリインタフェース、２３…制御部、２４…符号化／復号部（Ｅｎｃｏｄｅｒ／Ｄｅｃｏｄｅｒ）、２５…データバッファ、１０４…シーケンサ、１０５…シフト制御回路、１０６…ソース線ドライバ、１０８…カラム制御回路、２１２…書き込み制御回路、２１５…読み出し制御回路。
【図１】
2020149741.tif 000003
【図２】
2020149741.tif 000004
【図３】
2020149741.tif 000005
【図４】
2020149741.tif 000006
【図５】
2020149741.tif 000007
【図６】
2020149741.tif 000008
【図７】
2020149741.tif 000009
【図８】
2020149741.tif 000010
【図９】
2020149741.tif 000011
【図１０】
2020149741.tif 000012
【図１１】
2020149741.tif 000013
【図１２】
2020149741.tif 000014
【図１３】
2020149741.tif 000015
【図１４】
2020149741.tif 000016
【図１５】
2020149741.tif 000017
【図１６】
2020149741.tif 000018
【図１７】
2020149741.tif 000019
【図１８】
2020149741.tif 000020
【図１９】
2020149741.tif 000021
【図２０】
2020149741.tif 000022
【図２１】
2020149741.tif 000023
【図２２】
2020149741.tif 000024
【図２３】
2020149741.tif 000025
【図２４】
2020149741.tif 000026
【図２５】
2020149741.tif 000027
【図２６】
2020149741.tif 000028
【図２７】
2020149741.tif 000029
【図２８】
2020149741.tif 000030
【図２９】
2020149741.tif 000031
【図３０】
2020149741.tif 000032
【図３１】
2020149741.tif 000033
【図３２】
2020149741.tif 000034
【図３３】
2020149741.tif 000035
【図３４】
2020149741.tif 000036
【図３５】
2020149741.tif 000037
【図３６】
2020149741.tif 000038
【図３７】
2020149741.tif 000039
【図３８】
2020149741.tif 000040
【図３９】
2020149741.tif 000041
【図４０】
2020149741.tif 000042
【図４１】
2020149741.tif 000043
【図４２】
2020149741.tif 000044
【図４３】
2020149741.tif 000045
【図４４】
2020149741.tif 000046
【図４５】
2020149741.tif 000047
【図４６】
2020149741.tif 000048
【図４７】
2020149741.tif 000049
【図４８】
2020149741.tif 000050