(57)【要約】【課題】不揮発性半導体メモリを低コスト化すると共に、外部との転送データ量を少なくする。【解決手段】半導体メモリ装置は、メモリセルアレイ、センスアンプ、ドライバ、インタフェースロジックなどの既存のメモリ装置の構成に加え、メモリセルアレイのデータの読み出し／書き込み単位である１ページ分の容量の揮発性のバッファメモリを設け、センスアンプの出力、バッファメモリの出力、及び、センスアンプの出力とバッファメモリの出力との排他的論理和を選択的にバッファメモリへ入力するデータ選択回路を設ける。さらに、データ選択回路によるバッファメモリへ入力の選択に対応して、バッファメモリの出力は、データ選択回路を介した該バッファメモリ及びドライバの少なくとも一方の入力として、または、データ選択回路を介した該バッファメモリ及びドライバのいずれにも入力しないように制御する制御回路を有する。【選択図】図３
2012027991.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性のメモリセルアレイ、
前記メモリセルアレイのデータの読み出し／書き込み単位である１ページ分の容量の揮発性のバッファメモリ、
前記メモリセルアレイからデータを読み出すセンスアンプ、
前記メモリセルアレイへデータを書き込むドライバ、
メモリコントローラと接続するインタフェースロジック、
前記センスアンプの出力、前記バッファメモリの出力、及び、前記センスアンプの出力と前記バッファメモリの出力との排他的論理和を選択的に前記バッファメモリへ入力するデータ選択回路、並びに、
前記データ選択回路による前記バッファメモリへ入力の選択に対応して、前記バッファメモリの出力は、前記データ選択回路を介した該バッファメモリ及び前記ドライバの少なくとも一方の入力として、または、前記データ選択回路を介した該バッファメモリ及び前記ドライバのいずれにも入力しないように制御する制御回路を有することを特徴とする半導体メモリ装置。
【請求項２】
前記メモリコントローラからの前記インタフェースロジックを介した、前記メモリセルアレイの第１のページ（Ｘ）を指定した第１のコマンド（Ｔｇｌ＿Ｒ）に応答して、前記センスアンプは前記第１のページ（Ｘ）の第１のデータ（Ｂ）を前記メモリセルアレイから読み出し、前記データ選択回路は、読み出された前記第１のデータ（Ｂ）を前記バッファメモリに入力し、前記バッファメモリは前記第１のデータ（Ｂ）を格納し、
前記メモリコントローラからの前記インタフェースロジックを介した、前記メモリセルアレイの第２のページ（Ｗ）を指定した第２のコマンド（Ｔｇｌ＿Ｔ１）に応答して、前記センスアンプは前記第２のページ（Ｗ）の第２のデータ（Ａ）を前記メモリセルアレイから読み出し、前記データ選択回路は、前記バッファメモリに格納された前記第１のデータ（Ｂ）と読み出された前記第２のデータ（Ａ）との排他的論理和を計算した第３のデータ（Ａ＾Ｂ）を前記バッファメモリに入力し、前記バッファメモリは入力した前記第３のデータ（Ａ＾Ｂ）を格納し、
前記メモリコントローラからの前記インタフェースロジックを介した、前記メモリセルアレイの前記第２のページ（Ｗ）を指定した第３のコマンド（Ｔｇｌ＿Ｔ２）に応答して、前記制御回路は、前記バッファメモリの出力を前記ドライバに入力し、前記バッファメモリに格納した前記第３のデータ（Ａ＾Ｂ）を、前記メモリセルアレイの前記第２のページ（Ｗ）に書き込むように制御することを特徴とする請求項１記載の半導体メモリ装置。
【請求項３】
前記第３のコマンド（Ｔｇｌ＿Ｔ２）に応答して、前記データ選択回路は、前記バッファメモリの前記第３のデータ（Ａ＾Ｂ）を前記バッファメモリにフィードバック入力し、前記バッファメモリはフィードバックされた前記第３のデータ（Ａ＾Ｂ）を格納し、
前記メモリコントローラからの前記インタフェースロジックを介した、前記メモリセルアレイの前記第１のページ（Ｘ）を指定した２回目の前記第２のコマンド（Ｔｇｌ＿Ｔ１）に応答して、前記センスアンプは前記第１のページ（Ｘ）の前記第１のデータ（Ｂ）を前記メモリセルアレイから読み出し、前記データ選択回路は、前記バッファメモリに格納された前記第３のデータ（Ａ＾Ｂ）と読み出された前記第１のデータ（Ｂ）との排他的論理和を計算した前記第２のデータ（Ａ）を前記バッファメモリに入力し、前記バッファメモリは入力した前記第２のデータ（Ａ）を格納し、
前記メモリコントローラからの前記インタフェースロジックを介した、前記メモリセルアレイの前記第１のページ（Ｘ）を指定した２回目の前記第３のコマンド（Ｔｇｌ＿Ｔ２）に応答して、前記制御回路は、前記バッファメモリの出力を前記ドライバに入力し、前記バッファメモリに格納した前記第２のデータ（Ａ）を、前記メモリセルアレイの前記第１のページ（Ｘ）に書き込むように制御することを特徴とする請求項２記載の半導体メモリ装置。
【請求項４】
２回目の前記第３のコマンド（Ｔｇｌ＿Ｔ２）に応答して、前記データ選択回路は、前記バッファメモリの前記第２のデータ（Ａ）を前記バッファメモリにフィードバック入力し、前記バッファメモリはフィードバックされた前記第２のデータ（Ａ）を格納し、前記メモリコントローラからの前記インタフェースロジックを介した、前記メモリセルアレイの前記第２のページ（Ｗ）を指定した３回目の前記第２のコマンド（Ｔｇｌ＿Ｔ１）に応答して、前記センスアンプは前記第２のページ（Ｗ）の前記第３のデータ（Ａ＾Ｂ）を前記メモリセルアレイから読み出し、前記データ選択回路は、前記バッファメモリに格納された前記第２のデータ（Ａ）と読み出された前記第３のデータ（Ａ＾Ｂ）との排他的論理和を計算した前記第１のデータ（Ｂ）を前記バッファメモリに入力し、前記バッファメモリは入力した前記第１のデータ（Ｂ）を格納し、
前記メモリコントローラからの前記インタフェースロジックを介した、前記メモリセルアレイの前記第２のページ（Ｗ）を指定した３回目の前記第３のコマンド（Ｔｇｌ＿Ｔ２）に応答して、前記制御回路は、前記バッファメモリの出力を前記ドライバに入力し、前記バッファメモリに格納した前記第１のデータ（Ｂ）を、前記メモリセルアレイの前記第２のページ（Ｗ）に書き込むように制御することを特徴とする請求項３記載の半導体メモリ装置。
【請求項５】
前記メモリコントローラからの前記インタフェースロジックを介した、前記メモリセルアレイの第４のページを指定した第４のコマンドであるリードコマンドに応答して、前記センスアンプは前記第４のページの第４のデータを前記メモリセルアレイから読み出し、前記データ選択回路は、読み出された前記第４のデータを前記バッファメモリに入力し、前記バッファメモリは前記第４のデータを格納し、
前記インタフェースロジックは、前記メモリコントローラからの、前記第４のデータのビット値を“１”とするビットアドレスを指定した第５のコマンド（Ｔｇｌ＿Ｓ）に応答して、指定されたビットアドレスに対応したビット値を“１”とし、指定されないビットアドレスに対応したビット値を“０”とする第５のデータを生成するトグルパタン生成器を含み、
前記データ選択回路は、前記バッファメモリに格納された前記第４のデータと生成された前記第５のデータとの排他的論理和を計算した第６のデータを前記バッファメモリに入力し、前記バッファメモリは入力した第６のデータを格納し、
前記メモリコントローラからの第６のコマンド（Ｔｇｌ＿Ｔ２）に応答して、前記制御回路は、前記バッファメモリの出力を前記ドライバに入力し、前記バッファメモリに格納した前記第６のデータを、前記メモリセルアレイの前記第４のページに書き込むように制御することを特徴とする請求項１〜４のいずれか１項に記載の半導体メモリ装置。
【請求項６】
不揮発性のメモリセルアレイ、
前記メモリセルアレイのデータの読み出し／書き込み単位である１ページ分の容量の揮発性のバッファメモリ、
前記メモリセルアレイからデータを読み出すセンスアンプ、
前記メモリセルアレイへデータを書き込むドライバ、
前記センスアンプの出力、前記バッファメモリの出力、及び、前記センスアンプの出力と前記バッファメモリの出力との排他的論理和を選択的に前記バッファメモリへ入力するデータ選択回路、並びに、
前記データ選択回路による前記バッファメモリへ入力の選択に対応して、前記バッファメモリの出力は、前記データ選択回路を介した該バッファメモリ及び前記ドライバの少なくとも一方の入力として、または、前記データ選択回路を介した該バッファメモリ及び前記ドライバのいずれにも入力しないように制御する制御回路を有する半導体メモリ装置と、
前記半導体メモリ装置のインタフェースロジックに接続し、前記半導体メモリ装置を制御するメモリコントローラと、
前記半導体メモリ装置に供給される電源をバックアップするバックアップ電源とを含むことを特徴とする記憶装置。
【請求項７】
前記メモリコントローラからの前記インタフェースロジックを介した、前記メモリセルアレイの第１のページ（Ｘ）を指定した第１のコマンド（Ｔｇｌ＿Ｒ）に応答して、前記センスアンプは前記第１のページ（Ｘ）の第１のデータ（Ｂ）を前記メモリセルアレイから読み出し、前記データ選択回路は、読み出された前記第１のデータ（Ｂ）を前記バッファメモリに入力し、前記バッファメモリは前記第１のデータ（Ｂ）を格納し、
前記メモリコントローラからの前記インタフェースロジックを介した、前記メモリセルアレイの第２のページ（Ｗ）を指定した第２のコマンド（Ｔｇｌ＿Ｔ１）に応答して、前記センスアンプは前記第２のページ（Ｗ）の第２のデータ（Ａ）を前記メモリセルアレイから読み出し、前記データ選択回路は、前記バッファメモリに格納された前記第１のデータ（Ｂ）と読み出された前記第２のデータ（Ａ）との排他的論理和を計算した第３のデータ（Ａ＾Ｂ）を前記バッファメモリに入力し、前記バッファメモリは入力した前記第３のデータ（Ａ＾Ｂ）を格納し、
前記メモリコントローラからの前記インタフェースロジックを介した、前記メモリセルアレイの前記第２のページ（Ｗ）を指定した第３のコマンド（Ｔｇｌ＿Ｔ２）に応答して、前記制御回路は、前記バッファメモリの出力を前記ドライバに入力し、前記バッファメモリに格納した前記第３のデータ（Ａ＾Ｂ）を、前記メモリセルアレイの前記第２のページ（Ｗ）に書き込むように制御し、
前記メモリコントローラは、
前記第１のコマンド（Ｔｇｌ＿Ｒ）および前記第２のコマンド（Ｔｇｌ＿Ｔ１）の実行中に前記電源の供給が遮断された場合には、その実行を中断し、
前記第３のコマンド（Ｔｇｌ＿Ｔ２）の実行中に前記電源の供給が遮断された場合には、その実行を完了するまで前記バックアップ電源を利用することを特徴とする請求項６記載の記憶装置。
【請求項８】
前記半導体メモリ装置の前記メモリセルアレイの前記第１のページ（Ｘ）および前記第２のページ（Ｗ）に格納されているデータは、該データの有効／無効を示す第１の所定部分を有し、
前記メモリコントローラは、
リードコマンドにより前記半導体メモリ装置の前記メモリセルアレイから前記第１のページ（Ｘ）および前記第２のページ（Ｗ）のデータを読み出し、
読み出した前記第１のページ（Ｘ）のデータの前記第１の所定部分が有効を示し、読み出した前記第２のページ（Ｗ）のデータの前記第１の所定部分が無効を示しているならば、
前記第１のページ（Ｘ）を指定して、前記第１のコマンド（Ｔｇｌ＿Ｒ）を実行し、
前記第２のページ（Ｗ）を指定して、前記第２のコマンド（Ｔｇｌ＿Ｔ１）と前記第３のコマンド（Ｔｇｌ＿Ｔ２）を実行することを特徴とする請求項７記載の記憶装置。
【請求項９】
前記半導体メモリ装置の前記メモリセルアレイの前記第１のページ（Ｘ）および前記第２のページ（Ｗ）に格納されているデータは、該データの論理アドレスを示す第２の所定部分を有し、
前記メモリコントローラは、
前記第１の所定部分が有効を示す前記第１のページ（Ｘ）のデータの前記第２の所定部分の第１の論理アドレスと物理アドレスである前記第１のページ（Ｘ）との対応関係をテーブルに登録し、
前記テーブルにおいて、対応する物理アドレスを持たない第２の論理アドレスを検出し、
前記第２のページ（Ｗ）に格納されているデータの前記第２の所定部分の内容と前記第２の論理アドレスとの排他的論理和を計算して、第３の論理アドレス（スワップパートナ）を算出し、
前記テーブルから、前記第３の論理アドレス（スワップパートナ）に対応する前記第１のページ（Ｘ）を取得し、
前記第１のページ（Ｘ）を指定した前記第１のコマンド（Ｔｇｌ＿Ｒ）を実行することを特徴とする請求項８記載の記憶装置。
【請求項１０】
前記メモリコントローラからの前記インタフェースロジックを介した、前記メモリセルアレイの第４のページを指定した第４のコマンドであるリードコマンドに応答して、前記センスアンプは前記第４のページの第４のデータを前記メモリセルアレイから読み出し、前記データ選択回路は、読み出された前記第４のデータを前記バッファメモリに入力し、前記バッファメモリは前記第４のデータを格納し、
前記インタフェースロジックは、前記メモリコントローラからの、前記第４のデータのビット値を“１”とするビットアドレスを指定した第５のコマンド（Ｔｇｌ＿Ｓ）に応答して、指定されたビットアドレスに対応したビット値を“１”とし、指定されないビットアドレスに対応したビット値を“０”とする第５のデータを生成するトグルパタン生成器を含み、
前記データ選択回路は、前記バッファメモリに格納された前記第４のデータと生成された前記第５のデータとの排他的論理和を計算した第６のデータを前記バッファメモリに入力し、前記バッファメモリは入力した第６のデータを格納し、
前記メモリコントローラからの、第６のコマンド（Ｔｇｌ＿Ｔ２）に応答して、前記制御回路は、前記バッファメモリの出力を前記ドライバに入力し、前記バッファメモリに格納した前記第６のデータを、前記メモリセルアレイの前記第４のページに書き込むように制御し、
前記メモリコントローラは、
前記第４のコマンドを実行して、前記第４のページの前記第４のデータを読み出し、
前記第４のデータに含まれる誤りビットのビットアドレスを指定した前記第５のコマンド（Ｔｇｌ＿Ｓ）を実行することを特徴とする請求項６〜９のいずれか１項に記載の記憶装置。
【請求項１１】
不揮発性のメモリセルアレイ、前記メモリセルアレイのデータの読み出し／書き込み単位である１ページ分の容量の揮発性のバッファメモリ、前記メモリセルアレイからデータを読み出すセンスアンプ、前記メモリセルアレイへデータを書き込むドライバ、前記センスアンプの出力、前記バッファメモリの出力、及び、前記センスアンプの出力と前記バッファメモリの出力との排他的論理和を選択的に前記バッファメモリへ入力するデータ選択回路、並びに、前記データ選択回路による前記バッファメモリへ入力の選択に対応して、前記バッファメモリの出力は、前記データ選択回路を介した該バッファメモリ及び前記ドライバの少なくとも一方の入力として、または、前記データ選択回路を介した該バッファメモリ及び前記ドライバのいずれにも入力しないように制御する制御回路を有する半導体メモリ装置と、前記半導体メモリ装置のインタフェースロジックに接続し、前記半導体メモリ装置を制御するメモリコントローラと、前記半導体メモリ装置に供給される電源をバックアップするバックアップ電源とを含む記憶装置における、前記メモリコントローラによる制御方法であって、
前記メモリコントローラは、前記インタフェースロジックを介して、前記メモリセルアレイの第１のページ（Ｘ）を指定した第１のコマンド（Ｔｇｌ＿Ｒ）を発行し、前記第１のコマンド（Ｔｇｌ＿Ｒ）に応答して、前記センスアンプは前記第１のページ（Ｘ）の第１のデータ（Ｂ）を前記メモリセルアレイから読み出し、前記データ選択回路は、読み出された前記第１のデータ（Ｂ）を前記バッファメモリに入力し、前記バッファメモリは前記第１のデータ（Ｂ）を格納し、
前記メモリコントローラは、前記インタフェースロジックを介して、前記メモリセルアレイの第２のページ（Ｗ）を指定した第２のコマンド（Ｔｇｌ＿Ｔ１）を発行し、前記第２のコマンド（Ｔｇｌ＿Ｔ１）に応答して、前記センスアンプは前記第２のページ（Ｗ）の第２のデータ（Ａ）を前記メモリセルアレイから読み出し、前記データ選択回路は、前記バッファメモリに格納された前記第１のデータ（Ｂ）と読み出された前記第２のデータ（Ａ）との排他的論理和を計算した第３のデータ（Ａ＾Ｂ）を前記バッファメモリに入力し、前記バッファメモリは入力した前記第３のデータ（Ａ＾Ｂ）を格納し、
前記メモリコントローラは、前記インタフェースロジックを介して、前記メモリセルアレイの前記第２のページ（Ｗ）を指定した第３のコマンド（Ｔｇｌ＿Ｔ２）を発行し、前記第３のコマンド（Ｔｇｌ＿Ｔ２）に応答して、前記制御回路は、前記バッファメモリの出力を前記ドライバに入力し、前記バッファメモリに格納した前記第３のデータ（Ａ＾Ｂ）を、前記メモリセルアレイの前記第２のページ（Ｗ）に書き込むように制御し、
前記メモリコントローラは、
前記第１のコマンド（Ｔｇｌ＿Ｒ）および前記第２のコマンド（Ｔｇｌ＿Ｔ１）の実行中に前記電源の供給が遮断された場合には、その実行を中断し、
前記第３のコマンド（Ｔｇｌ＿Ｔ２）の実行中に前記電源の供給が遮断された場合には、その実行を完了するまで前記バックアップ電源を利用することを特徴とする制御方法。
【請求項１２】
前記半導体メモリ装置の前記メモリセルアレイの前記第１のページ（Ｘ）および前記第２のページ（Ｗ）に格納されているデータは、該データの有効／無効を示す第１の所定部分を有し、
前記メモリコントローラは、
リードコマンドにより前記半導体メモリ装置の前記メモリセルアレイから前記第１のページ（Ｘ）および前記第２のページ（Ｗ）のデータを読み出し、
読み出した前記第１のページ（Ｘ）のデータの前記第１の所定部分が有効を示し、読み出した前記第２のページ（Ｗ）のデータの前記第１の所定部分が無効を示しているならば、
前記第１のページ（Ｘ）を指定して、前記第１のコマンド（Ｔｇｌ＿Ｒ）を実行し、
前記第２のページ（Ｗ）を指定して、前記第２のコマンド（Ｔｇｌ＿Ｔ１）と前記第３のコマンド（Ｔｇｌ＿Ｔ２）を実行することを特徴とする請求項１１記載の制御方法。
【請求項１３】
前記半導体メモリ装置の前記メモリセルアレイの前記第１のページ（Ｘ）および前記第２のページ（Ｗ）に格納されているデータは、該データの論理アドレスを示す第２の所定部分を有し、
前記メモリコントローラは、
前記第１の所定部分が有効を示す前記第１のページ（Ｘ）のデータの前記第２の所定部分の第１の論理アドレスと物理アドレスである前記第１のページ（Ｘ）との対応関係をテーブルに登録し、
前記テーブルにおいて、対応する物理アドレスを持たない第２の論理アドレスを検出し、
前記第２のページ（Ｗ）に格納されているデータの前記第２の所定部分の内容と前記第２の論理アドレスとの排他的論理和を計算して、第３の論理アドレス（スワップパートナ）を算出し、
前記テーブルから、前記第３の論理アドレス（スワップパートナ）に対応する前記第１のページ（Ｘ）を取得し、
前記第１のページ（Ｘ）を指定した前記第１のコマンド（Ｔｇｌ＿Ｒ）を実行することを特徴とする請求項１２記載の制御方法。
【請求項１４】
前記メモリコントローラは、前記インタフェースロジックを介して、前記メモリセルアレイの第４のページを指定した第４のコマンドであるリードコマンドを発行し、前記第４のページの前記第４のデータを読み出し、前記第４のコマンドに応答して、前記センスアンプは前記第４のページの第４のデータを前記メモリセルアレイから読み出し、前記データ選択回路は、読み出された前記第４のデータを前記バッファメモリに入力し、前記バッファメモリは前記第４のデータを格納し、
前記メモリコントローラは、前記第４のデータに含まれる誤りビットのビットアドレスを指定した第５のコマンド（Ｔｇｌ＿Ｓ）を発行し、前記第５のコマンド（Ｔｇｌ＿Ｓ）に応答して、前記インタフェースロジックは、指定されたビットアドレスに対応したビット値を“１”とし、指定されないビットアドレスに対応したビット値を“０”とする第５のデータを生成し、前記データ選択回路は、前記バッファメモリに格納された前記第４のデータと生成された前記第５のデータとの排他的論理和を計算した第６のデータを前記バッファメモリに入力し、前記バッファメモリは入力した第６のデータを格納し、
前記メモリコントローラは、第６のコマンド（Ｔｇｌ＿Ｔ２）を発行し、前記第６のコマンド（Ｔｇｌ＿Ｔ２）に応答して、前記制御回路は、前記バッファメモリの出力を前記ドライバに入力し、前記バッファメモリに格納した前記第６のデータを、前記メモリセルアレイの前記第４のページに書き込むように制御することを特徴とする請求項１１〜１３のいずれか１項に記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は不揮発性半導体メモリ、不揮発性半導体メモリを搭載した記憶装置、及びその制御方法に関する。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュメモリをはじめとする高集積・大容量の不揮発性半導体メモリは、書き換え回数が有限（例えば、１００００回）で、記憶データの一部の破壊（データ誤り）も起こりうるという特徴を持つ。そのような半導体メモリを利用して記憶装置（ＳＳＤ）を構成する場合には、一般に、ページ書き換え回数を平準化するウェアレベリングや、データ誤りを起こしたページを保全するデータリフレッシュなど、高信頼化手段の実装が必要である。
【０００３】
ウェアレベリング方法としては、特許文献１にその一つの手段が開示されている。すなわち、ライト回数が多く、今後ライトされる可能性が高いと思われる論理ブロックに、消去回数が多い物理ブロックが割り当てられていたときには、ライト回数の少ない論理ブロックに割り当てられている消去回数の少ない物理ブロックを探し、ライト回数が多い論理ブロックには消去回数が少ない物理ブロックを割り当て、ライト回数が少ない論理ブロックには消去回数が多い物理ブロックを割り当てるようにマッピングを変更する。これは、２つの物理ブロックに格納された論理ブロックデータを交換するスワップ動作を行うことに相当する。
【０００４】
２つの記憶媒体に記録されたデータ同士を交換するスワップ方法としては、古くから計算機技術として排他的論理和命令を用いた方法が知られている。例えば、特許文献２の図４のように、＄１＝＄１  ｅｘｏｒ  （＄１  ｅｘｏｒ  ＄２）＝＄２、＄２＝＄２  ｅｘｏｒ  （＄１  ｅｘｏｒ  ＄２）＝＄１という計算機命令により、＄１と＄２のデータを交換する。
【０００５】
一方、データリフレッシュ方法については、記憶媒体に記録しようとするデータにあらかじめ誤り訂正コードを付加しておき、記録後にはそれを利用して当該データの誤りを検出・訂正し、記憶媒体に訂正された記録データを書きなおすという方法がよく知られている。
【０００６】
通常、不揮発性半導体メモリでのデータ誤り率はデータ全体の０．１〜１．０％程度であり、訂正すべきは記録データのごく一部である。不揮発性半導体メモリのデータの一部を書き換える技術としては、特許文献３に、ページデータの一部の書き換えを行って異なるページに書き込む不揮発性半導体メモリ（特に、ＮＡＮＤ型フラッシュメモリ）が開示されている。
【０００７】
不揮発性半導体メモリのデータ誤り訂正として適用される誤り訂正技術は、巡回符号を応用したものが一般的であり、リードソロモン符号やＢＣＨ符号がよく知られている。いずれもガロア体（四則演算が定義され閉じている有限集合）での数値計算を利用する。ガロア体における加法は排他的論理和である。そのため、データ誤り訂正を行う際には、誤りを含む記録データと、誤りパタンデータとの排他的論理和を計算することにより、訂正された記録データを作成する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】米国特許第５７３７７４２号公報
【特許文献２】米国特許第５８１２８４５号公報
【特許文献３】米国特許第６６６１７０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献３に開示されるような不揮発性メモリセルアレイとバッファメモリとを備えた半導体メモリを利用して記憶装置を構成する場合、ウェアレベリングやデータリフレッシュの機能を実装する上で以下のような課題がある。
【００１０】
まず、ウェアレベリングのためのページスワップでは、交換する２つのページのデータを読み出し、一時的に保持しておく都合上、少なくとも２つのメモリ内部バッファが必要である。さらに、保持したデータを損失してはならないので、ライトコマンド２回分の電源保護が必要である。
【００１１】
また、データリフレッシュのための誤り訂正では、訂正データを一時的に保持しておくために、少なくとも１つのメモリ外部バッファが必要である。さらに、誤りを含むアドレス及びその訂正データを、訂正箇所の数の分メモリへ転送することが必要である。
【課題を解決するための手段】
【００１２】
開示される半導体メモリ装置は、ウェアレベリングにおけるページスワップやデータリフレッシュを低コスト化し、不揮発性半導体メモリ外との転送データ量を少なくするために、１ページ分のバッファメモリと小規模の回路を設ける。
【００１３】
具体的には、半導体メモリ装置は、不揮発性のメモリセルアレイ、メモリセルアレイからデータを読み出すセンスアンプ、メモリセルアレイへデータを書き込むドライバ、メモリコントローラと接続するインタフェースロジックを有する。さらに、メモリセルアレイのデータの読み出し／書き込み単位である１ページ分の容量の揮発性のバッファメモリを設け、センスアンプの出力、バッファメモリの出力、及び、センスアンプの出力とバッファメモリの出力との排他的論理和を選択的にバッファメモリへ入力するデータ選択回路、並びに、データ選択回路によるバッファメモリへ入力の選択に対応して、バッファメモリの出力は、データ選択回路を介した該バッファメモリ及びドライバの少なくとも一方の入力として、または、データ選択回路を介した該バッファメモリ及びドライバのいずれにも入力しないように制御する制御回路を有する。
【００１４】
他の態様として、上記の半導体メモリ装置は、メモリコントローラからのインタフェースロジックを介した、メモリセルアレイの第１のページ（Ｘ）を指定した第１のコマンド（Ｔｇｌ＿Ｒ）に応答して、センスアンプは第１のページ（Ｘ）の第１のデータ（Ｂ）をメモリセルアレイから読み出し、データ選択回路は、読み出された第１のデータ（Ｂ）をバッファメモリに入力し、バッファメモリは第１のデータ（Ｂ）を格納する。そして、メモリコントローラからのインタフェースロジックを介した、メモリセルアレイの第２のページ（Ｗ）を指定した第２のコマンド（Ｔｇｌ＿Ｔ１）に応答して、センスアンプは第２のページ（Ｗ）の第２のデータ（Ａ）をメモリセルアレイから読み出し、データ選択回路は、バッファメモリに格納された第１のデータ（Ｂ）と読み出された第２のデータ（Ａ）との排他的論理和を計算した第３のデータ（Ａ＾Ｂ）をバッファメモリに入力し、バッファメモリは入力した第３のデータ（Ａ＾Ｂ）を格納する。さらに、メモリコントローラからのインタフェースロジックを介した、メモリセルアレイの第２のページ（Ｗ）を指定した第３のコマンド（Ｔｇｌ＿Ｔ２）に応答して、制御回路は、バッファメモリの出力をドライバに入力し、バッファメモリに格納した第３のデータ（Ａ＾Ｂ）を、メモリセルアレイの第２のページ（Ｗ）に書き込むように制御する。
【００１５】
さらに他の態様として、上記の半導体メモリ装置は、第３のコマンド（Ｔｇｌ＿Ｔ２）に応答して、データ選択回路は、バッファメモリの第３のデータ（Ａ＾Ｂ）をバッファメモリにフィードバック入力し、バッファメモリはフィードバックされた第３のデータ（Ａ＾Ｂ）を格納する。そして、メモリコントローラからのインタフェースロジックを介した、メモリセルアレイの第１のページ（Ｘ）を指定した２回目の第２のコマンド（Ｔｇｌ＿Ｔ１）に応答して、センスアンプは第１のページ（Ｘ）の第１のデータ（Ｂ）をメモリセルアレイから読み出し、データ選択回路は、バッファメモリに格納された第３のデータ（Ａ＾Ｂ）と読み出された第１のデータ（Ｂ）との排他的論理和を計算した第２のデータ（Ａ）をバッファメモリに入力し、バッファメモリは入力した第２のデータ（Ａ）を格納する。さらに、メモリコントローラからのインタフェースロジックを介した、メモリセルアレイの第１のページ（Ｘ）を指定した２回目の第３のコマンド（Ｔｇｌ＿Ｔ２）に応答して、制御回路は、バッファメモリの出力をドライバに入力し、バッファメモリに格納した第２のデータ（Ａ）を、メモリセルアレイの第１のページ（Ｘ）に書き込むように制御する。
【００１６】
さらに他の態様として、上記の半導体メモリ装置は、２回目の第３のコマンド（Ｔｇｌ＿Ｔ２）に応答して、データ選択回路は、バッファメモリの第２のデータ（Ａ）をバッファメモリにフィードバック入力し、バッファメモリはフィードバックされた第２のデータ（Ａ）を格納する。そして、メモリコントローラからのインタフェースロジックを介した、メモリセルアレイの第２のページ（Ｗ）を指定した３回目の第２のコマンド（Ｔｇｌ＿Ｔ１）に応答して、センスアンプは第２のページ（Ｗ）の第３のデータ（Ａ＾Ｂ）をメモリセルアレイから読み出し、データ選択回路は、バッファメモリに格納された第２のデータ（Ａ）と読み出された第３のデータ（Ａ＾Ｂ）との排他的論理和を計算した第１のデータ（Ｂ）をバッファメモリに入力し、バッファメモリは入力した第１のデータ（Ｂ）を格納する。さらに、メモリコントローラからのインタフェースロジックを介した、メモリセルアレイの第２のページ（Ｗ）を指定した３回目の第３のコマンド（Ｔｇｌ＿Ｔ２）に応答して、制御回路は、バッファメモリの出力をドライバに入力し、バッファメモリに格納した第１のデータ（Ｂ）を、メモリセルアレイの第２のページ（Ｗ）に書き込むように制御する。
【００１７】
さらに他の態様として、上記の半導体メモリ装置は、メモリコントローラからのインタフェースロジックを介した、メモリセルアレイの第４のページを指定した第４のコマンドであるリードコマンドに応答して、センスアンプは第４のページの第４のデータをメモリセルアレイから読み出し、データ選択回路は、読み出された第４のデータをバッファメモリに入力し、バッファメモリは第４のデータを格納する。そして、インタフェースロジックは、メモリコントローラからの、第４のデータのビット値を“１”とするビットアドレスを指定した第５のコマンド（Ｔｇｌ＿Ｓ）に応答して、指定されたビットアドレスに対応したビット値を“１”とし、指定されないビットアドレスに対応したビット値を“０”とする第５のデータを生成するトグルパタン生成器を含む。さらに、データ選択回路は、バッファメモリに格納された第４のデータと生成された第５のデータとの排他的論理和を計算した第６のデータをバッファメモリに入力し、バッファメモリは入力した第６のデータを格納する。さらに、メモリコントローラからの第６のコマンド（Ｔｇｌ＿Ｔ２）に応答して、制御回路は、バッファメモリの出力をドライバに入力し、バッファメモリに格納した第６のデータを、メモリセルアレイの第４のページに書き込むように制御する。
【００１８】
さらに、開示される記憶装置は、上記の半導体メモリと、メモリコマンドを実行するメモリコントローラと、バックアップ電源とを備えており、メモリコントローラは、第１のコマンド（Ｔｇｌ＿Ｒ）（トグル参照コマンド）、または第２のコマンド（Ｔｇｌ＿Ｔ１）（トグル対象第１コマンド）の実行中に供給電源が遮断された場合には、その実行を中断し、第３のコマンド（Ｔｇｌ＿Ｔ２）（トグル対象第２コマンド）の実行中に供給電源が遮断された場合には、その実行を完了するまでバックアップ電源を利用する。
【００１９】
さらに他の態様として、上記の記憶装置は、メモリコントローラがライトコマンドで書き込むデータのＦｌａｇ部に、非ゼロ値を設定するように構成されている。メモリコントローラは、リードコマンドで半導体メモリのページのデータを読み出し、Ｆｌａｇ部が非ゼロ値であれば有効ページ、ゼロ値であれば無効ページと判定する。メモリコントローラは、有効ページＸを指定して、第１のコマンド（Ｔｇｌ＿Ｒ）（トグル参照コマンド）を実行し、無効ページＷを指定して、第２のコマンド（Ｔｇｌ＿Ｔ１）（トグル対象第１コマンド）と第３のコマンド（Ｔｇｌ＿Ｔ２）（トグル対象第２コマンド）を実行し、無効ページＷを有効ページに変更する。
【００２０】
さらに他の態様として、上記の記憶装置は、メモリコントローラがライトコマンドで書き込むデータのＬＡ部に、データの論理アドレスを設定するように構成されている。メモリコントローラは、有効ページと判定されたページのＬＡ部に書かれた論理アドレスを調べ、論理アドレスと有効ページの物理アドレスとの対応関係をテーブルに登録し、テーブルにおいて対応する物理アドレスを持たない論理アドレスを検出する。また、無効ページと判定されたページについて、ＬＡ部の内容と、検出した未対応論理アドレスとの排他的論理和を計算して、スワップパートナの論理アドレスを算出し、テーブルから、スワップパートナの論理アドレスに対応する物理アドレスを取得し、上記第１のコマンド（Ｔｇｌ＿Ｒ）（トグル参照コマンド）の実行先である有効ページＸをそれによって選択する。
【発明の効果】
【００２１】
本発明によれば、不揮発性半導体メモリを低コスト化し、不揮発性半導体メモリ外との転送データ量を少なくすることができる。
【図面の簡単な説明】
【００２２】
【図１】半導体記憶装置（ＳＳＤ）の構成を示す図である。
【図２Ａ】相変化メモリセルの基本構造を示す図である。
【図２Ｂ】相変化メモリセルの書き込み電流特性を示す図である。
【図３】相変化メモリチップの構造を示すブロック図である。
【図４Ａ】メモリコマンドＴｇｌ＿Ｒのインタフェースタイミングを示す図である。
【図４Ｂ】メモリコマンドＴｇｌ＿Ｔ１のインタフェースタイミングを示す図である。
【図４Ｃ】メモリコマンドＴｇｌ＿Ｔ２のインタフェースタイミングを示す図である。
【図５Ａ】メモリコマンドＴｇｌ＿Ｒの処理を示す図である。
【図５Ｂ】メモリコマンドＴｇｌ＿Ｔ１の処理を示す図である。
【図５Ｃ】メモリコマンドＴｇｌ＿Ｔ２の処理を示す図である。
【図６】メモリチップのページ割当仕様を示す図である。
【図７】ページスワップ動作におけるページ状態遷移を示す図である。
【図８】ページスワップ動作における電源バックアップパタンを示すタイミング図である。
【図９Ａ】電源遮断時の割り込み処理のフローチャートである。
【図９Ｂ】ページスワップ動作制御のフローチャートである。
【図１０】ページスワップ動作における論理物理アドレス変換テーブルの状態遷移を示す図である。
【図１１】ページスワップ動作中の電源遮断後に実行するブートアップ処理のフローチャートである。
【図１２Ａ】本実施形態のページスワップ動作の効果を説明する図である。
【図１２Ｂ】本実施形態のページスワップ動作の効果を説明する図である。
【図１３】ページ誤り訂正処理を示すブロック図である。
【図１４】ページ誤り訂正動作処理のフローチャートである。
【図１５Ａ】本実施形態のページ誤り訂正動作の効果を説明する図である。
【図１５Ｂ】本実施形態のページ誤り訂正動作の効果を説明する図である。
【図１６】メモリコマンドとバッファメモリの入出力との対応関係を示す図である。
【発明を実施するための形態】
【００２３】
本実施形態の半導体メモリ装置は、ウェアレベリングにおけるページスワップやデータリフレッシュを低コスト化し、不揮発性半導体メモリ外との転送データ量を少なくするために、１ページ分のバッファメモリと小規模の回路を設ける。
【００２４】
具体的には、半導体メモリ装置は、不揮発性のメモリセルアレイ、メモリセルアレイからデータを読み出すセンスアンプ、メモリセルアレイへデータを書き込むドライバ、メモリコントローラと接続するインタフェースロジックを有する。さらに、メモリセルアレイのデータの読み出し／書き込み単位である１ページ分の容量の揮発性のバッファメモリを設け、センスアンプの出力、バッファメモリの出力、及び、センスアンプの出力とバッファメモリの出力との排他的論理和を選択的にバッファメモリへ入力するデータ選択回路を設ける。さらに、データ選択回路によるバッファメモリへ入力の選択に対応して、バッファメモリの出力は、データ選択回路を介した該バッファメモリ及びドライバの少なくとも一方の入力として、または、データ選択回路を介した該バッファメモリ及びドライバのいずれにも入力しないように制御する制御回路を有する。
【００２５】
図１を参照して、半導体記憶装置（以下、ＳＳＤ：Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）１０００の構成について説明する。ここでは、不揮発メモリとして、相変化メモリを例に説明する。
【００２６】
ＳＳＤ１０００は、ＳＡＴＡインタフェース１４１０、メモリコントローラ１１００、電源管理部１２００、バックアップ電源１２１０、相変化メモリチップ１３０１〜１３０４で構成される。
【００２７】
ＳＡＴＡインタフェース１４１０は外部のホスト１４００と接続するためのインタフェースであり、ホスト１４００からのリード／ライトコマンドに応答して、それぞれＳＳＤ１０００に格納したデータをホスト１４００に送信し、または、ホスト１４００からデータを受信して格納する。ホスト１４００は、リード／ライトを要求するデータの格納位置を論理アドレスによって指定する。この論理アドレスは相変化メモリチップ１３０１〜１３０４のアクセスに用いられる物理アドレスとは異なる論理的なアドレスである。ＳＡＴＡインタフェース１４１０およびコマンドやデータの送受信のプロトコルは、標準的なハードディスク装置と互換性のあるシリアルＡＴＡ（ＡＴ  Ａｔｔａｃｈｍｅｎｔ）仕様に準拠する。
【００２８】
メモリコントローラ１１００は、ＳＡＴＡインタフェース１４１０、電源管理部１２００、相変化メモリチップ１３０１〜１３０４と接続され、ＳＡＴＡインタフェース１４１０と相変化メモリチップ１３０１〜１３０４を制御するマイクロプロセッサである。メモリコントローラ１１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１１０とＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１１２０を含み、メモリコントローラ１１００の制御は、ＣＰＵ１１１０による組み込まれたプログラムの実行によって実現される。例えば、ホスト１４００からのリード／ライトコマンドの解釈を実行する。また、メモリインタフェース１１３０を介して、相変化メモリチップ１３０１〜１３０４へのアクセス、ホスト１４００と相変化メモリチップ１３０１〜１３０４との間のデータ転送を実行する。
【００２９】
また、メモリコントローラ１１００は、ホスト１４００からのリード／ライトコマンドにおいて指定された論理アドレスがどのメモリチップ内のどのページ（メモリチップのアクセス単位）に対応するかを論理物理アドレス変換テーブルによって管理する。メモリコントローラ１１００は、ＳＳＤ１０００の電源投入時にＲＡＭ１１２０の一部に論理物理アドレス変換テーブルを作成する。ＲＡＭ１１２０は、ＣＰＵ１１１０によるプログラム動作においてワークメモリとしても使われ、相変化メモリチップ１３０１〜１３０４とやりとりする転送データを一時的に保持するためにも使われる。なお、メモリコントローラ１１００は、各相変化メモリチップ１３０１〜１３０４に格納されたデータを保全するための誤り訂正コードの生成や検査を実行するための専用ハードウェアを含む。
【００３０】
電源管理部１２００は、メモリコントローラ１１００や相変化メモリチップ１３０１〜１３０４に電源Ｖｄｄ１２２０を供給する電気回路である。通常では電源管理部１２００は、ホスト１４００からＳＡＴＡインタフェース１４１０を通じて供給されるホスト電源１４２０からＶｄｄ１２２０を生成するが、何らかの事故によりホスト電源１４２０が遮断されたときには、電源管理部１２００はホスト電源１４２０の遮断を検出し、データ損失などの障害が起きないようにＶｄｄ１２２０の生成源をバックアップ電源１２１０へとシームレスに切り替える。
【００３１】
バックアップ電源１２１０は、例えば大容量キャパシタである。その電気容量は、データ損失などの障害が起きないように、しばらくＶｄｄ１２２０の供給を維持すべき時間をカバーするように決定される。よって、Ｖｄｄ１２２０の供給を維持すべき時間が短いほど、キャパシタ容量を小さくできるためＳＳＤ１０００の価格を低減できる。
【００３２】
ＩＲＱ信号１２３０は、電源管理部１２００がホスト電源１４２０の遮断を検出したときに、ＣＰＵ１１１０に割り込みを発生させるための信号線である。ＣＰＵ１１１０はその割り込みを受けると、バックアップ電源１２１０の電気量が尽きるまでの残された時間内に、できるだけ早く必要な処理を終わらせ、いつＶｄｄ１２２０が切断しても問題のないスタンバイ状態に入る。
【００３３】
図２Ａ及び図２Ｂを参照して、相変化メモリチップ１３０１〜１３０４を構成する相変化メモリの基本構造と書き込み電流特性について説明する。
【００３４】
高集積で大容量を実現することができる不揮発性半導体メモリとしては、現在はＮＡＮＤフラッシュメモリが代表的であるが、近年、カルコゲン混合物を利用した相変化メモリ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｍｅｍｏｒｙ）も注目されている。相変化メモリは、製造過程が比較的簡単で安価に大容量化できると期待されているためである。相変化メモリは、異なる電気特性を示す構造状態の間を電気的に遷移可能な物質を利用する。例えば、ゲルマニウム・アンチモン・テルル混合物ＧＳＴであるカルコゲン物質（ＧＳＴ物質）である。ＧＳＴ物質は、比較的に高い抵抗率を示すアモルファス状態としての構造状態と、比較的に低い抵抗率を示す結晶状態としての構造状態を有する。ＧＳＴ物質の結晶状態またはアモルファス状態の割合は、電流によるジュール熱で加熱することによって変化する。ＧＳＴ物質は、形成されるアモルファス状態量によって可変な電気抵抗を持つ（アモルファス状態量の割合が大きいほど、高抵抗状態になる。）。すなわち、相変化メモリは電気的可変抵抗によるメモリ素子である。
【００３５】
図２Ａに、１ビットのデータを記憶する相変化メモリセルの抵抗素子の基本構造を簡略に示す。抵抗素子は、上部電極２０１０、相変化物質２０３０、ヒータプラグ２０４０、下部電極２０２０を積層することで構成される。ヒータプラグ２０４０は、ＴｉＮなどの導電性物質で形成される。相変化物質２０３０の構造状態は、上部電極２０１０から下部電極２０２０へ供給される電流パルスの大きさや時間幅によって変化する。アモルファス状態量２０３１を多くした高抵抗状態を相変化メモリにデータ“０”を書き込むことに対応させると、アモルファス状態量２０３１を少なくした低抵抗状態を相変化メモリにデータ“１”を書き込むことに対応させることができる。
【００３６】
図２Ｂに、相変化メモリセルへの書き込み電流特性を示す。図２Ｂの書き込み電流特性は、相変化メモリセルにデータを書き込むときに上部電極２０１０から下部電極２０２０へ供給する電流パルスの大きさや時間幅を示す。アモルファス状態量２０３１を多くするときは、リセット電流範囲２１１０の大きさの電流をリセット電流期間２１３０だけ供給する。アモルファス状態量２０３１を少なくするときは、セット電流範囲２１２０の大きさの電流をセット電流期間２１４０だけ供給する。リセット電流範囲２１１０の電流はセット電流範囲２１２０の電流より大きい。また、リセット電流期間２１３０はセット電流期間２１４０より短い。例えば、リセット電流期間２１３０は５０ｎｓ（ナノ秒）、セット電流期間２１４０は４００ｎｓである。なお、相変化メモリセルからデータを読むときは、相変化物質２０３０の状態を変化させないように、セット電流範囲２１２０より小さい電流を供給し、抵抗素子による電圧降下を計測して、高抵抗状態または低抵抗状態の構造状態を判別し、判別した状態に対応して格納データが“０”または“１”であるかを判別する。
【００３７】
図３を参照して、図２の相変化メモリをアレイ（セルアレイ）とする相変化メモリチップ１３０１〜１３０４の構造について説明する。
【００３８】
相変化メモリチップ１３０１〜１３０４はいずれも、セルアレイ３１３０、アドレスデコーダ３１１０、ビットライン選択回路３１２０、ドライバ３３１０、センスアンプ３３２０、バッファメモリ３３３０、データ選択回路３３４０、インタフェースロジック３４００を含み、電源Ｖｄｄ１２２０の電力と、メモリインタフェース１１３０の電気信号によって動作する。
【００３９】
セルアレイ３１３０は複数のメモリセルで構成される。複数のメモリセルは、複数のワードライン及び複数のビットラインに接続されている。各メモリセルはスイッチングダイオードと、図２Ａのように構成された可変抵抗素子で構成される。そして、一定数（例えば４１８４個）のメモリセルを集めたものによって、メモリチップのリード／ライトのアクセス単位（ページ）を構成する。つまり、１ページは４１８４ビットのデータを格納する。メモリチップには、複数ページのメモリセルが構成される。
【００４０】
アドレスデコーダ３１１０は、メモリコントローラ１１００から入力された物理ページアドレスをデコードする。デコードされたアドレスは、行アドレスを含む。アドレスデコーダ３１１０は、行アドレスによって複数のワードラインの１つを選択する。アドレスデコーダ３１１０は順次列アドレスを生成し、生成した列アドレスによって複数のビットラインの１つを選択する。アドレスデコーダ３１１０は、ビットライン選択回路３１２０に、生成した列アドレスを選択するカラム選択信号３２２０を提供する。
【００４１】
セルアレイ３１３０は、たとえば、アクセス単位であるページを１ワードとして、１ページに含まれるたとえば４１８４個のメモリセルに対応するようにビットラインを設ける。一般には、１ページ当りのビット数をＢとして、Ｂ＝ｍ×ｎ（ｍ：ワードライン数、ｎ：ビットライン数）とすればよい。
【００４２】
ビットライン選択回路３１２０は、複数のビットラインを通じてセルアレイ３１３０と接続され、データライン３２３０を通じてドライバ３３１０やセンスアンプ３３２０と接続される。ビットライン選択回路３１２０は、カラム選択信号３２２０に応答してデータライン３２３０と選択されたビットラインを電気的に接続する。
【００４３】
ドライバ３３１０は、メモリセルへのデータの書き込み回路であり、図２Ｂのような電流パルスによって、“０”または“１”のデータを選択されたメモリセルに書き込むための電流供給回路である。ドライバ３３１０は、シフトレジスタ構造のバッファメモリ３３３０に保持された１ページ分の書き込みデータに応じて、１ビットずつ書き込み電流を出力する。出力された書き込み電流は、データライン３２３０及びビットライン選択回路３１２０を通じて順々に選択されるビットラインに伝わり、１ページ分のメモリセルの抵抗素子の構造状態を変化させる。
【００４４】
センスアンプ３３２０は、メモリセルからのデータの読み出し回路であり、ビットライン選択回路３１２０によって選択されたビットラインを通じてメモリセルの抵抗素子に、前述したように、相変化物質２０３０の構造状態を変化させないような小さな電流を伝え、その電圧降下を計測することによってメモリセルに記録されたデータを感知する、データリード用回路である。センシングされたメモリセルのデータはシフトレジスタ構造のバッファメモリ３３３０に１ビットずつ保持される。
【００４５】
バッファメモリ３３３０は、メモリコントローラ１１００からインタフェースロジック３４００経由で提供されたライトデータを１ビットずつドライバ３３１０に提供する。インタフェースロジック３４００は、メモリコントローラ１１００からたとえば８ビット並列入力されるライトデータを直列データとしてバッファメモリ３３３０に出力するための並列／直列変換回路を含んでいる。
【００４６】
また、データリード用のセンスアンプ３３２０によって１ビットずつ読み出されたデータをインタフェースロジック３４００経由でメモリコントローラ１１００に並列データとして提供する。インタフェースロジック３４００は、リードデータの変換のための直列／並列変換回路を含んでいる。
【００４７】
１ページのサイズが４１８４ビットであるとき、図３に示すＮは４１８３である。バッファメモリ３３３０は、ビットレジスタを４１８４個直列に接続したシフトレジスタで構成され、ページデータの先頭ビットから順に入力される。
【００４８】
インタフェースロジック３４００は、メモリインタフェース１１３０を通じてメモリコントローラ１１００からのメモリコマンドを検出して、ドライバ３３１０またはセンスアンプ３３２０を選択する。例えば、ライトコマンドが検出されるとドライバ３３１０を活性化させ、リードコマンドが検出されるとセンスアンプ３３２０を活性化させる。また、インタフェースロジック３４００は、メモリコントローラ１１００からのライトデータをバッファメモリ３３３０に入力したり、リードデータをバッファメモリ３３３０からメモリコントローラ１１００へ出力したりする。
【００４９】
データ選択回路３３４０は、バッファメモリ３３３０に供給するデータを選択する論理回路である。センスアンプ３３２０からのページデータ、バッファメモリ３３３０からのフィードバックデータ、両者の排他的論理和データを供給できる。さらに、バッファメモリ３３３０からのフィードバックデータとインタフェースロジック３４００からのデータの排他的論理和データを作り、バッファメモリ３３３０に供給することもできる。したがって、バッファメモリ３３３０とデータ選択回路３３４０を合わせた回路は、線形フィードバックシフトレジスタ（ＬＦＳＲ：Ｌｉｎｅａｒ  Ｆｅｅｄｂａｃｋ  Ｓｈｉｆｔ  Ｒｅｇｉｓｔｅｒ）の一種である。
【００５０】
以下、ＳＳＤ１０００のページスワップ動作について述べる。
【００５１】
相変化メモリチップ１３０１〜１３０４は、従来のメモリチップがサポートするリード／ライトコマンドをサポートするが、それらに加えて新しい３つのメモリコマンド：トグル参照コマンド、トグル対象第１コマンド、及びトグル対象第２コマンドをサポートする。以下、これらのコマンドを順にＴｇｌ＿Ｒ、Ｔｇｌ＿Ｔ１、Ｔｇｌ＿Ｔ２と略す。
【００５２】
これらのコマンドは、主に、相変化メモリチップ１３０１〜１３０４に含まれるメモリセルの書換回数を平準化するためのページスワップを実現するために用いられる。例えば、書き換え回数が１０００回のページＷ（物理ページアドレスＷ）と２０００回のページＸ（物理ページアドレスＸ）があるとする。ページＸの格納データＢの論理アドレス（ページＸに対応している論理アドレス）は、ページＷの格納データＡの論理アドレス（ページWに対応している論理アドレス）よりも、ホスト１４００が書き換える頻度が２倍である。そこで、ページスワップにより、メモリセルの書換回数を平準化する。具体的には、ページＸの格納データＢをページＷへ、ページＷの格納データＡをページＸへと交換する。それ以後、単調増加変数α（＞０）として、時間経過に従って、ページＷとページＸの書き換え回数はそれぞれ（１０００＋２α）回、（２０００＋α）回のように変化すると予測される。すなわち、両者の書き換え回数差（１０００−α）は単調減少する。この手法をメモリセル全体にわたって適用すれば、各物理ページの書換回数を平準化できる。
【００５３】
これらのコマンドを順に実行すると、メモリチップ内の任意の２つの物理ページ（以下、対象ページ、参照ページと呼ぶ）のデータ同士を排他的論理和（Ｅｘｃｌｕｓｉｖｅ−ＯＲ）したものを、その１つのページ（対象ページ）へ上書きする機能を実行することができる。例えば、対象ページのデータをＡ、参照ページのデータをＢとすると、この機能を実行した結果、対象ページのデータはＡ＾Ｂに変化する。なお、「＾」は排他的論理和を示す。
【００５４】
図４Ａ〜図４Ｃは、それぞれ３つのメモリコマンドＴｇｌ＿Ｒ、Ｔｇｌ＿Ｔ１、Ｔｇｌ＿Ｔ２のインタフェースタイミング（メモリインタフェース１１３０における各信号のタイミングチャート）を示したものである。
【００５５】
メモリインタフェース１１３０は、駆動クロック（ｃｌｋ）信号、コマンドラッチイネーブル（ＣＬＥ）信号、アドレスラッチイネーブル（ＡＬＥ）信号の各入力信号と、レディ／ビジー（Ｒ／Ｂ）出力信号と、８ビットのＩ／Ｏ入出力信号で構成される。
【００５６】
各コマンドのコードは、ＣＬＥがアサート（Ｈ）のときにＩ／Ｏ信号としてｃｌｋ信号同期で入力される。コマンドコード入力後、Ｔｇｌ＿Ｒ（図４Ａ）、Ｔｇｌ＿Ｔ１（図４Ｂ）コマンドについては、それぞれ参照ページ、対象ページを指示するための３２ビットアドレス（Ａ３、Ａ２、Ａ１、Ａ０）が、ＡＬＥがアサート（Ｈ）のときにＩ／Ｏ信号からｃｌｋ信号同期で４回に分けて入力される。その後、メモリチップは内部処理に入り、それが終わるまでの間、Ｒ／Ｂ信号をネゲート（Ｌ）し、次のメモリコマンドが受けられないことを通知する。Ｒ／Ｂ信号のネゲート時間（ビジー時間）の長さについては後述する。
【００５７】
図５Ａ〜図５Ｃは、それぞれ３つのメモリコマンドＴｇｌ＿Ｒ、Ｔｇｌ＿Ｔ１、Ｔｇｌ＿Ｔ２によって実行されるメモリチップ内部処理の内容を示したものである。
【００５８】
Ｔｇｌ＿Ｒコマンドでは、センスアンプ３３２０を通じて参照ページに対応するメモリセルから読み出された４１８４ビット分のデータが、経路５０１０を通してシフトレジスタ構造のバッファメモリ３３３０に１ビットずつ入力される。この間Ｒ／Ｂ信号がネゲートされるが、この時間はメモリリードコマンドの場合と同じで、例えば１ビット当たり８０ｎｓとすれば、８０ｎｓ×４１８４＝約３３５μｓである。
【００５９】
Ｔｇｌ＿Ｔ１コマンドでは、センスアンプ３３２０を通じて対象ページに対応するメモリセルから読み出された４１８４ビット分のデータが、経路５１１０を通して２入力排他的論理和ゲート５１３０に入力され、一方、それまでにバッファメモリ３３３０に格納されていた４１８４ビット分のデータが、経路５１２０を通してフィードバックして同じく２入力排他的論理和ゲート５１３０に入力され、その演算出力がシフトレジスタ構造のバッファメモリ３３３０に１ビットずつ入力される。この間Ｒ／Ｂ信号がネゲートされるが、この時間もメモリリードコマンドと同じで、例えば８０ｎｓ×４１８４＝約３３５μｓである。参照ページを指定したＴｇｌ＿Ｒコマンドと対象ページを指定したＴｇｌ＿Ｔ１コマンドを、メモリコントローラ１１００が続けて発行した場合、バッファメモリ３３３０の内容は結果的に参照ページと対象ページの両データの排他的論理和となる。
【００６０】
Ｔｇｌ＿Ｔ２コマンドでは、バッファメモリ３３３０に格納されていた４１８４ビット分のデータが経路５２１０を通してドライバに１ビットずつ提供され、対象ページに対応するメモリセルにデータが書き込まれる。このとき、データは経路５２２０を通してフィードバックして再びシフトレジスタ構造のバッファメモリ３３３０に入力され、元の状態（Ｔｇｌ＿Ｔ２コマンド実行直前の状態）に戻る。この間Ｒ／Ｂ信号がネゲートされるが、この時間はメモリライトコマンドの場合と同じで、例えば、最大で４００ｎｓ×４１８４＝約１．６７ｍｓ（全ビットに“１”を書く場合に相当）である。メモリコントローラ１１００が、参照ページを指定したＴｇｌ＿Ｒコマンドと対象ページを指定したＴｇｌ＿Ｔ１コマンドと対象ページを指定したＴｇｌ＿Ｔ２コマンドを続けて発行した場合、参照ページと対象ページの両データの排他的論理和が対象ページに書き込まれ、バッファメモリ３３３０の内容も、参照ページと対象ページのデータの排他的論理和となる。
【００６１】
図６は、ＳＳＤ１０００のメモリコントローラ１１００が、相変化メモリチップ１３０１〜１３０４の各ページの４１８４の構成ビットに割り当てる役割の仕様（ページフォーマット）を示した図である。
【００６２】
ページ６０００は、ホスト１４００がＳＳＤ１０００に対して読み書きする１セクタ（＝５１２バイト＝４０９６ビット）のデータを格納するためのＤａｔａ部６０１０を含む。
【００６３】
また、ページ６０００は、そのセクタの論理アドレス３２ビットを格納するためのＬＡ部６０２０を含む。ホストデータがどのページ（論理アドレスで指定されるページ）に格納されていても、この論理アドレスを利用すれば、ＣＰＵ１１１０は上述の論理物理アドレス変換テーブルを構築することにより、ホストデータの格納場所（指定された論理アドレスに対応する物理アドレスのページ）を特定することができる。メモリコントローラ１１００は、メモリチップへのライトコマンドを実行するときに、ホスト１４００がライト先に指定した論理アドレスをＬＡ部６０２０に設定する。
【００６４】
また、ページ６０００は、Ｄａｔａ部６０１０のデータが有効なホストデータであることを示すためのＦｌａｇ部６０３０を含む。Ｆｌａｇ部６０３０の値が“１”のときは有効データ（ホストが書いたデータ内容そのもの）であり、“０”のときは無効データ（ホストが書いたデータ内容ではない）である。メモリコントローラ１１００は、ホストデータを書き込むためにメモリチップへライトコマンドを実行するときに、Ｆｌａｇ部６０３０に“１”（有効）を設定する。
【００６５】
また、ページ６０００は、そのページ全体を最大４ビットの誤りから保全するための５２ビットの誤り訂正コード（ＥＣＣ：Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）を格納するためのＥＣＣ部６０４０を含む。ＥＣＣのアルゴリズムはＢＣＨ（Ｂｏｓｅ−Ｃｈａｕｄｈｕｒｉ−Ｈｏｃｑｕｅｎｇｈｅｍ）符号である。メモリコントローラ１１００は、ホストデータを書き込むためにメモリチップへライトコマンドを実行するときに、算出した誤り訂正コードをＥＣＣ部６０４０に設定する。
【００６６】
３つのメモリコマンドＴｇｌ＿Ｒ、Ｔｇｌ＿Ｔ１、Ｔｇｌ＿Ｔ２によって、２つのページ（参照ページと対象ページ）の両データの排他的論理和が対象ページに書き込まれると、対象ページのＦｌａｇ部の値も、元の両ページのＦｌａｇ部同士の排他的論理和となる。例えば、元の両ページのＦｌａｇ部の値が“１”（有効）であれば、対象ページのＦｌａｇ部の値は“０”（無効）となる。一方、対象ページのＥＣＣ部の値も元の両ページのＥＣＣ部同士の排他的論理和となる。一般にＢＣＨ符号では、２つのビット列ＡとＢのそれぞれに付したＥＣＣコードの排他的論理和：ＥＣＣ（Ａ）＾ＥＣＣ（Ｂ）は、ＡとＢの排他的論理和に付したＥＣＣコード：ＥＣＣ（Ａ＾Ｂ）に等しい。すなわち、ＥＣＣ部の格納内容は、３つのメモリコマンドＴｇｌ＿Ｒ、Ｔｇｌ＿Ｔ１、Ｔｇｌ＿Ｔ２によって２つのページデータが重ねあわされた状態（排他的論理和をとった状態）でもＥＣＣとしての訂正能力を失わず、誤りを訂正可能である。
【００６７】
図７に示した状態遷移表７０００を参照して、３つのメモリコマンドＴｇｌ＿Ｒ、Ｔｇｌ＿Ｔ１、Ｔｇｌ＿Ｔ２を組み合わせて２つのページＷとＸのデータをスワップ（交換）する手順を示す。以下、コマンド名に続く括弧内の文字はそのコマンドを適用するページを表す。
【００６８】
スワップ前は、ページＷとＸにはそれぞれホスト１４００が書いたデータＡとデータＢが格納されており、両者ともＦｌａｇは“１”（有効）である。
【００６９】
はじめに行う処理Ｐ１では、参照ページをＸ、対象ページをＷとしてページの重ね合わせを行う（排他的論理和をとる）ため、３つのメモリコマンドＴｇｌ＿Ｒ（Ｘ）、Ｔｇｌ＿Ｔ１（Ｗ）、Ｔｇｌ＿Ｔ２（Ｗ）を実行する。Ｔｇｌ＿Ｒ（Ｘ）によりバッファメモリ３３３０にデータＢが読み出され、Ｔｇｌ＿Ｔ１（Ｗ）によりバッファメモリ３３３０にデータＡ＾Ｂが作られる。そして、Ｔｇｌ＿Ｔ２（Ｗ）によりページＷのデータはＡ＾Ｂに更新される。このとき、ページＷのＦｌａｇは“１”（有効）同士の重ねあわせで“０”（無効）となる。
【００７０】
次に行う処理Ｐ２では、参照ページをＷ、対象ページをＸとしてページの重ね合わせを行うため、２つのメモリコマンドＴｇｌ＿Ｔ１（Ｘ）、Ｔｇｌ＿Ｔ２（Ｘ）を実行する。処理Ｐ１でのＴｇｌ＿Ｔ２（Ｗ）の結果、バッファメモリにはページＷのデータＡ＾Ｂが残っているため、Ｔｇｌ＿Ｒ（Ｗ）は省略できる。Ｔｇｌ＿Ｔ１（Ｘ）によりバッファメモリ３３３０にデータＡ（＝（Ａ＾Ｂ）＾Ｂ）が作られる。そして、Ｔｇｌ＿Ｔ２（Ｘ）によりページＸのデータはＡに更新される。このとき、ページＸのＦｌａｇは“０”（無効）と“１”（有効）の重ねあわせで“１”（有効）となる。
【００７１】
最後に行う処理Ｐ３では、参照ページをＸ、対象ページをＷとしてページの重ね合わせを行うため、２つのメモリコマンドＴｇｌ＿Ｔ１（Ｗ）、Ｔｇｌ＿Ｔ２（Ｗ）を実行する。処理Ｐ２でのＴｇｌ＿Ｔ２（Ｘ）の結果、バッファメモリにはページＸの更新されたデータＡが残っているため、Ｔｇｌ＿Ｒ（Ｘ）は省略できる。Ｔｇｌ＿Ｔ１（Ｗ）によりバッファメモリ３３３０にデータＢ（＝Ａ＾（Ａ＾Ｂ））が作られる。そして、Ｔｇｌ＿Ｔ２（Ｗ）によりページＷのデータはＢに更新される。このとき、ページＷのＦｌａｇは“１”（有効）と“０”（無効）の重ねあわせで“１”（有効）となる。
【００７２】
以上、処理Ｐ３まで終えた結果、ページＷとＸにはそれぞれホストが書いたデータＢとＡが格納された状態（スワップされた状態）となり、両者ともＦｌａｇは“１”（有効）となる。
【００７３】
以上説明したように、１ページ分のバッファメモリと小規模の回路（データ選択回路）を設けることで、ウェアレベリングにおけるページスワップやデータリフレッシュを低コスト化し、不揮発性半導体メモリ外との転送データ量を少なくすることができる。また、メモリコントローラ１１００は、あるメモリチップにメモリコマンドを発行後、メモリコマンドがそのメモリチップの内部処理により実行されるので、他のメモリチップに対するリードコマンド、ライトコマンド、その他のメモリコマンドを発行することができ、半導体記憶装置（ＳＳＤ）としての性能を確保できる。
【００７４】
図８は、図７に示した２つのページＷとＸのデータのスワップ手順の実行中に、ＳＳＤ１０００へのホスト電源１４２０が遮断された場合に、メモリコントローラ１１００のＣＰＵ１１１０が、バックアップ電源１２１０を用いて処理Ｐ１〜Ｐ３をどの段階まで実行するかのパタンを示したものである。
【００７５】
Ｔｇｌ＿Ｒ、Ｔｇｌ＿Ｔ１コマンド実行中の電源遮断については、いずれもデータをバッファメモリに読み出す処理であるため、途中で中断してもデータ損失の問題がないため（コマンドを適用した物理ページのデータはコマンド実行前の状態に保持される）、電源遮断に伴うＩＲＱ信号１２３０で割り込みを受けたらバックアップ電源１２１０に頼ることなく、すぐにＣＰＵ１１１０はスリープ命令などを実行してスタンバイ状態に入ればよい。
【００７６】
そこで、図８では、バックアップ電源１２１０に頼る必要があるＴｇｌ＿Ｔ２コマンド実行中の電源遮断の処置方法について、３つのケース（ｉ）（ii）（iii）に分けて示す。
【００７７】
ケース（ｉ）は、処理Ｐ１でのＴｇｌ＿Ｔ２（Ｗ）コマンド８１１０を処理中の電源遮断８１２０であり、Ｔｇｌ＿Ｔ２（Ｗ）コマンド８１１０が完了してページＷの内容がデータＡ＾Ｂに更新されるまでバックアップ電源１２１０を利用する。そのあとすぐに、ＣＰＵ１１１０はスタンバイ状態に入る。
【００７８】
ケース（ii）は、処理Ｐ２でのＴｇｌ＿Ｔ２（Ｘ）コマンド８２１０を処理中の電源遮断８２２０であり、Ｔｇｌ＿Ｔ２（Ｘ）コマンド８２１０が完了してページＸの内容がデータＡに更新されるまでバックアップ電源１２１０を利用する。そのあとすぐに、ＣＰＵ１１１０はスタンバイ状態に入る。
【００７９】
ケース（iii）は、処理Ｐ３でのＴｇｌ＿Ｔ２（Ｗ）コマンド８３１０を処理している最中の電源遮断８３２０であり、Ｔｇｌ＿Ｔ２（Ｗ）コマンド８３１０が完了してページＷの内容がデータＢに更新されるまでバックアップ電源１２１０を利用する。そのあとすぐに、ＣＰＵ１１１０はスタンバイ状態に入る。
【００８０】
ケース（iii）では、結果的に２つのページＷとＸのデータスワップ手順を完結させることができるため、ホスト電源が復旧したときにページＷにもＸにも特に処置を行わない。しかし、ケース（ｉ）（ii）では、ホスト電源が復旧したときにページＷにはデータＡとＢの排他的論理和（Ａ＾Ｂ）が書かれたままになっており、ページＷに対して次のような処置を行う。
【００８１】
まず、ケース（ｉ）ではデータＡがどのページにも存在しない状態で電源が切断されており、ホスト電源が復旧したときにＣＰＵ１１１０はページＷにデータＡを回復させるように処置する。これは、ページＷとページＸをデータスワップ実行前の状態に戻すことになる。
【００８２】
一方、ケース（ii）ではデータＢがどのページにも存在しない状態で電源が切断されており、ホスト電源が復旧したときにＣＰＵ１１１０はページＷにデータＢを回復させるように処置する。これは、ページＷとＸのデータスワップを続行させて完結させることになる。
【００８３】
図９Ａは、電源遮断し、ＣＰＵ１１１０がＩＲＱ信号１２３０で割り込みを受けたときの割り込み処理プログラムのフローチャートである。図９Ｂは、ＣＰＵ１１１０がページスワップ動作を制御するプログラムのフローチャートである。図９Ａの処理は、図９Ｂの処理より優先度が高く、ＣＰＵ１１１０はＩＲＱ信号１２３０で割り込みを受ければ、図９Ｂの処理を中断して図９Ａの処理を実行し、それが終われば、図９Ｂの処理を中断点から続けるように動作する。
【００８４】
図９Ａを参照して、割り込み処理を説明する。割り込みを受けたとき、Ｔｇｌ＿Ｔ２コマンドが実行中であるかを調べる（９０１０）。実行中ならば、ＲＡＭ１１２０に用意した電源遮断フラグ（ソフトウェアフラグ）をＯＮに設定し（９０２０）、処理を終える。一方、実行中でないならば、Ｔｇｌ＿ＲやＴｇｌ＿Ｔ１コマンドの実行中も含めて電源を切断しても問題ない状態であるため、スタンバイ状態に入り（９０３０）、処理を終える。
【００８５】
図９Ｂを参照して、ページスワップ動作制御を説明する。まず、スワップを適用する２つのページを選択する（９１１０）。１つは書き換え回数が所定の回数Ｍ１よりも少ないページＷで、もう１つは書き換え回数が所定の回数Ｍ２よりも多いページＸである。例えば、所定の回数Ｍ１、Ｍ２とは、メモリセル全体の平均書き換え回数をＡＶＧとして、Ｍ１＝ＡＶＧ×０．７、Ｍ２＝ＡＶＧ×１．３などである。なお、本実施形態では、ページ書き換え回数の取得方式については限定しない。一例を示すと、メモリコントローラ１１００内に小容量の不揮発性メモリを備えて、物理ページごとの書き換え回数の管理テーブルを記録し、書き換えが起きる度にそのテーブル内容を更新（カウントアップ）するようにする。
【００８６】
次に、処理Ｐ１のためにＴｇｌ＿Ｒ（Ｘ）、Ｔｇｌ＿Ｔ１（Ｗ）コマンドを発行する（９１２０）。続けて、Ｔｇｌ＿Ｔ２（Ｗ）コマンドを発行する（９１３０）。なお、ステップ９１２０と９１３０の間にＩＲＱ信号１２３０で割り込みを受ければ、図９Ａのようにスタンバイ状態に入るため、ページスワップ動作は未着手扱いのまま電源が切れる。
【００８７】
ステップ９１３０のあと、電源遮断フラグがＯＮかどうかを調べる（９１４０）。ＯＮならば、スタンバイ状態に入り（９２００）、ページスワップ動作はケース（ｉ）のパタンで中断終了する。この場合、Ｔｇｌ＿Ｔ２（Ｗ）コマンド実行中に電源遮断が起きており、バックアップ電源を利用してＴｇｌ＿Ｔ２（Ｗ）コマンドを完了したことを意味する。
【００８８】
ステップ９１４０でＯＦＦならば、処理Ｐ２のためにＴｇｌ＿Ｔ１（Ｘ）コマンドを発行する（９１５０）。続けて、Ｔｇｌ＿Ｔ２（Ｘ）コマンドを発行する（９１６０）。なお、ステップ９１５０と９１６０の間にＩＲＱ信号１２３０で割り込みを受ければ、図９Ａのようにスタンバイ状態に入るため、ページスワップ動作は処理Ｐ１まで終えた状態で中断終了する。
【００８９】
ステップ９１６０のあと、電源遮断フラグがＯＮかどうかを調べる（９１７０）。ＯＮならば、スタンバイ状態に入り（９２００）、ページスワップ動作はケース（ii）のパタンで中断終了する。この場合、Ｔｇｌ＿Ｔ２（Ｘ）コマンド実行中に電源遮断が起きており、バックアップ電源を利用してＴｇｌ＿Ｔ２（Ｘ）コマンドを完了したことを意味する。
【００９０】
ステップ９１７０でＯＦＦならば、処理Ｐ３のためにＴｇｌ＿Ｔ１（Ｗ）コマンドを発行する（９１８０）。続けて、Ｔｇｌ＿Ｔ２（Ｗ）コマンドを発行する（９１９０）。なお、ステップ９１８０と９１９０の間にＩＲＱ信号１２３０で割り込みを受ければ、図９Ａのようにスタンバイ状態に入るため、ページスワップ動作は処理Ｐ２まで終えた状態で中断終了する。
【００９１】
ステップ９１９０が終われば、ページスワップ動作は完結したことを意味する。最後のＴｇｌ＿Ｔ２（Ｗ）コマンド実行中に電源遮断が起きていたとしても、バックアップ電源を利用してコマンドが完了するからである。
【００９２】
本実施形態によるページスワップ動作では、２つのページに対し、合わせて３回の書き換えが必要である。上記フローでは、ページＷは２回、ページＸは１回の書き換えが行われたが、図７で示した手順において両ページの役割を入れ替えてもページスワップは実現可能であるから、ページＷを１回、ページＸを２回書き換えるように制御してもよい。しかし、ページスワップ前のページＷの書き換え回数がページＸのそれより少ないという条件では、ページＷのほうを１回多く書き換え、書き換え回数差を減らすようにした上記フローのほうが平準化の考え方からも好ましい。
【００９３】
以上のように、ページスワップ動作中に電源遮断が起きた場合は、
（１）動作未着手
（２）処理Ｐ１まで終えた状態での中断
（３）処理Ｐ２まで終えた状態での中断
（４）動作完結
の４通りのいずれかの状態で電源が切れることになる。このうち、（２）と（３）の処理Ｐ１またはＰ２まで終えた状態での中断については、図８の説明中で述べたようにページＷのデータ回復を行う必要がある。
【００９４】
図１０および図１１を参照して、処理Ｐ１またはＰ２まで終えた状態でのページスワップ中断からデータ回復を行う方法について説明する。
【００９５】
図１０は、ページデータの格納状態、およびＣＰＵ１１１０がＲＡＭ１１２０上に構築する論理物理アドレス変換テーブルのパタンを示したものである。ここでは、説明を簡単にするため、物理ページの全体数が４個（Ｗ、Ｘ、Ｙ、Ｚ）であり、格納するホストデータも４セクタ分（Ａ、Ｂ、Ｃ、Ｄ）であると仮定する。
【００９６】
いま、１００００のように全データが有効であるページデータ格納状態からＳＳＤ１０００が起動すると、ＣＰＵ１１１０は全ページの各ＬＡ部６０２０を読むことによって、１００１０のような論理物理アドレス変換テーブルを構築する。ここで、ＣＰＵ１１１０がページＷとページＸのページスワップが必要と判断して、ページスワップ動作を実施した場合、最終的に１００２０のようなデータＡとデータＢの格納ページが交換された論理物理アドレス変換テーブルになる。ホスト１４００から見ると、たとえばデータＡは、図６に示したように、データＡを格納する論理アドレスによって認識できる、論理アドレスと対応するデータであるので、図１０に示す論理物理アドレス変換テーブルでは論理アドレスＡと表す。
【００９７】
しかし、そのページスワップ動作中に電源遮断が発生して、処理Ｐ１またはＰ２まで終えた状態で中断したとすると、次にＳＳＤ１０００が起動したときには、１０１００または１０２００のようにページＷのデータが無効であるページデータ格納状態になっている。具体的には、処理Ｐ１まで終えた状態で中断したとすると１０１００の状態、処理Ｐ２まで終えた状態で中断したとすると１０２００の状態である。
【００９８】
処理Ｐ１まで終えた状態で中断していた場合、ＣＰＵ１１１０は全ページの各ＬＡ部６０２０を読むことによって、論理物理アドレス変換テーブルの構築を試みるが、ページＷのＤａｔａ部６０１０やＬＡ部６０２０は無効であるから、１０１１０のように格納ページが存在しない１つのデータＡ（論理アドレスＡ）が現れる。しかし、消去法によりその格納ページはＷであることが分かるので、結果的に１０１２０のように論理物理アドレス変換テーブルを完成させることができる。ページＷのＬＡ部６０２０にはデータＡのアドレスとスワップ相手（パートナ）のアドレスとの排他的論理和が書かれているので、逆算によりスワップパートナがデータＢであることも求めることができる。論理物理アドレス変換テーブルからデータＢの格納ページはＸであるから、見えなくなった格納データＡは、Ｔｇｌ＿Ｒ（Ｘ）、Ｔｇｌ＿Ｔ１（Ｗ）、Ｔｇｌ＿Ｔ２（Ｗ）コマンドで回復できる。
【００９９】
処理Ｐ２まで終えた状態で中断していた場合、ＣＰＵ１１１０は全ページの各ＬＡ部６０２０を読むことによって、論理物理アドレス変換テーブルの構築を試みるが、ページＷのＤａｔａ部６０１０やＬＡ部６０２０は無効であるから、１０２１０のように格納ページが存在しない１つのデータＢが現れる。しかし、消去法によりその格納ページはＷであることが分かるので、結果的に１０２２０のように論理物理アドレス変換テーブルを完成させることができる。ページＷのＬＡ部６０２０にはデータＢのアドレスとスワップパートナのアドレスとの排他的論理和が書かれているので、逆算によりスワップパートナがデータＡであることも求めることができる。論理物理アドレス変換テーブルからデータＡの格納ページはＸであるから、見えなくなった格納データＢは、Ｔｇｌ＿Ｒ（Ｘ）、Ｔｇｌ＿Ｔ１（Ｗ）、Ｔｇｌ＿Ｔ２（Ｗ）コマンドで回復できる。
【０１００】
図１１を参照して、ページスワップを処理Ｐ１またはＰ２まで終えた状態での中断後に、ＳＳＤ１０００を再起動した際に、ＣＰＵ１１１０がデータ回復を行うブートアップ処理を説明する。
【０１０１】
まず、相変化メモリチップ１３０１〜１３０４の全ページをスキャンリードする（ただし、その際にＥＣＣ部６０４０を用いてページ内容の誤りの有無を検査し、誤りがあれば訂正後のページ内容を用いて以降の処理を行うものとする）。そして、Ｆｌａｇ部６０３０の値が“１”（有効）であるようなページについて、ＬＡ部６０２０の論理アドレスを調べ、論理物理アドレス変換テーブルを作成する（１１０１０）。そのテーブルの中に対応する格納ページを持たない論理アドレスがあれば、それを検出する（１１０２０）。Ｆｌａｇ部６０３０の値が“０”（無効）であったページＷにおいて、そのＬＡ部６０２０の内容と、上記の対応する格納ページを持たない論理アドレスとの排他的論理和を計算することで、ページＷの格納データと交換しようとした相手データの論理アドレスを導出する（１１０３０）。そして、論理物理アドレス変換テーブルを参照して、その相手データの論理アドレスに対応するページＸを取得する（１１０４０）。そして、格納データを回復するために、ページＸとＷに対して、Ｔｇｌ＿Ｒ（Ｘ）、Ｔｇｌ＿Ｔ１（Ｗ）、Ｔｇｌ＿Ｔ２（Ｗ）コマンドを発行する（１１０５０）。これにより、ページＷの格納データは有効なものになる。最後に、論理物理アドレス変換テーブルで、対応する格納ページがなかった論理アドレスの対応ページとしてページＷを対応づけ、論理物理アドレス変換テーブルを完成する（１１０６０）。なお、ステップ１１０５０によりＴｇｌ＿Ｔ２（Ｗ）コマンドを実行するが、この途中で再び電源遮断が起きる可能性もある。しかし、バックアップ電源はそのコマンドが完了するまでメモリチップへの電源供給を維持するので問題はない。
【０１０２】
なお、図１１のフローでは、ブートアップ処理プログラムの中で、論理物理アドレス変換テーブルを作成するために全ページをスキャンリードしているが、その負担を減らすために、例えば、メモリコントローラ１１００内に小容量の不揮発性メモリを備えて、論理物理アドレス変換テーブルを常に記録しておいてもよい。その場合、アドレスの対応関係は失われないので、ステップ１１０５０による格納データ回復だけを実施すれば十分である。
【０１０３】
また、３つのコマンドだけでデータ回復できることを利用して、ブートアップ処理プログラムの中ではデータ回復を省略するという方式も可能である。すなわち、ホストからのリードコマンドに応答して、指定された論理アドレスのデータが含まれるページＷが無効（Ｆｌａｇ＝“０”）であれば、そのページＷとそのスワップパートナのページＸに対して、ステップ１１０５０の３つのコマンドを実行し、所望のデータを回復するという方法である。
【０１０４】
上記のページスワップ動作説明では、有効データを示すＦｌａｇ部６０３０の値として“１”を用いたが、非ゼロ値であれば何でもよい。例えば、Ｆｌａｇ部６０３０の全４ビットを“１”とした“Ｆ（１６進数表記）”で有効データを示した場合でも、ページスワップ動作は実施可能であることは言うまでもない。その場合でも、無効データを示すＦｌａｇ部６０３０の値は同じく“０”である。
【０１０５】
図１２Ａおよび図１２Ｂを参照して、本実施形態のページスワップ動作の効果を説明する。
【０１０６】
図１２Ａは、従来のデータ選択回路３３４０を持たず、バッファメモリを２つ持つ半導体メモリチップの内部でページスワップ動作を実行する場合の、データの流れを示している。まず、ページＷから第１のバッファメモリにデータを読み出し（１２０１０）、ページＸから第２のバッファメモリにデータを読み出し（１２０２０）、第２のバッファメモリからページＷにデータを書き込み（１２０３０）、最後に、第１のバッファメモリからページＸにデータを書き込む（１２０４０）。このように、ページスワップ動作には少なくとも２つのバッファメモリを必要とする。しかし、本実施形態によれば、１ビットの排他的論理和回路を含むデータ選択回路３３４０を必要とするものの、１つの４１８４ビットのバッファメモリで、半導体メモリチップの内部でのページスワップ動作を実現できるため、回路規模を削減することができる。よって、半導体メモリチップの低コスト化が可能である。
【０１０７】
図１２Ｂは、従来の半導体メモリチップの内部でページスワップ動作を実行中に、電源遮断が発生した場合の対応方法の例を示している。図１２Ａのステップ１２０３０と１２０４０では、それぞれバッファメモリからページへのライトコマンド１２１１０、１２１２０を実行するが、例えば、第１のライトコマンド１２１１０の途中に電源遮断１２１３０が発生したとすると、次の第２のライトコマンド１２１２０が終わるまでは、バックアップ電源を利用してページスワップ動作を続けなければならない。もし、第１のライトコマンド１２１１０直後に動作中断すると、データＡは揮発性のバッファメモリにしか残されていないため、電源切断によって損失してしまうからである。したがって、従来の半導体メモリチップを適用したＳＳＤでは、２回分のライトコマンド処理時間（約３．３４ｍｓ）分の電力を蓄積できるバックアップ電源を必要とする。しかし、本実施形態によれば、その半分の１回分のライトコマンド処理時間（約１．６７ｍｓ）分の電力を蓄積できるバックアップ電源をＳＳＤに備えれば、安全にページスワップ動作を実現できる。よって、バックアップ電源の電気容量を半減でき、ＳＳＤの低コスト化が可能である。なお、従来のライトコマンドも、本実施形態によるＴｇｌ＿Ｔ２コマンドも、バッファメモリからページへの書き込みを行う処理を行うため、その消費電力に違いはない。
【０１０８】
以下、ＳＳＤ１０００のデータリフレッシュ（ページ誤り訂正）動作について述べる。
【０１０９】
データリフレッシュ動作とは、相変化メモリチップのページの格納データがデータ誤りを起こしているかをメモリコントローラがＥＣＣアルゴリズムを利用して検査し、データに誤りがあれば、それを訂正したデータをそのページに上書きし、ページデータを保全するという動作である。
【０１１０】
以下、図１３を参照しながら、ページ誤り訂正動作を実施するＳＳＤの構成を説明する。
【０１１１】
図１３において、メモリコントローラ１１００には誤り訂正を行う専用ハードウェアが含まれる。そのＥＣＣ方式としては、２の１３乗個の元をもつガロア拡大体における、４重誤り訂正のＢＣＨ符号を用いる。この符号は、最大８１９１ビット中のランダム誤りを最大４ビットまで訂正可能である。そのハードウェアは３つの部分で構成される。シンドローム生成部１３０１０、誤り位置多項式計算部１３０２０、訂正ビットアドレス計算部１３０３０である。ＢＣＨ符号では、一般に、ページデータ全体を蓄積することなく、線形フィードバックシフトレジスタに分割データ（例えば３２ビット単位）を順番に入力することでシンドロームを生成することができる。ゆえに、シンドローム生成部１３０１０はバッファメモリを含まない。なお、誤り訂正はソフトウェアによりＣＰＵ１１１０が処理してもよい。その場合でもシンドローム生成のためにバッファメモリを用意する必要はない。
【０１１２】
また、相変化メモリチップ１３０１〜１３０４は、新しいコマンド：トグル設定コマンド（以下、Ｔｇｌ＿Ｓと表す）をサポートする。Ｔｇｌ＿Ｓコマンドはページを構成する４１８４ビットのデータの中で値を反転したいビット位置（複数個の位置でもよい）を指定することができる。相変化メモリチップ１３０１〜１３０４は、インタフェースロジック３４００内にトグルパタン生成器１３１３０を持ち、Ｔｇｌ＿Ｓコマンドで入力されたビット位置（アドレス）の値を“１”として、その他のビットアドレスの値を“０”とする、４１８４ビットのストリームデータを生成する。
【０１１３】
以下、図１３と図１４を参照しながら、ページ誤り訂正動作の手順を説明する。
【０１１４】
まず、メモリコントローラ１１００はリードコマンドによって、ページ１３１１０から誤りを含むデータを読み出す。このデータはセンスアンプ３３２０とデータ選択回路３３４０を通じてバッファメモリ３３３０に入力される。そして、インタフェースロジック３４００を経由してメモリコントローラ１１００に送信される。このとき、誤りを含むデータはバッファメモリ３３３０に残る。メモリコントローラ１１００に送信されたデータは、シンドローム生成部１３０１０で処理されて、５２ビットのシンドロームが生成される（１４０１０）。
【０１１５】
次に、誤り位置多項式計算部１３０２０は、シンドロームを解析することによって、誤りビット位置を解にもつ４次の誤り位置多項式を算出する（１４０２０）。
【０１１６】
次に、訂正ビットアドレス計算部１３０３０は、誤り位置多項式の解を探索し、その解（誤りビットアドレス）とその個数（最大４個）を計算する（１４０３０）。
【０１１７】
次に、メモリコントローラ１１００はＴｇｌ＿Ｓコマンドによって、その誤りビットアドレスをメモリチップに入力する。トグルパタン生成器１３１３０は、誤りを訂正したいビットが“１”であるような、４１８４ビットのストリームデータを生成する。データ選択回路３３４０は、そのストリームデータと、バッファメモリ３３３０に残った上記の誤りデータをフィードバックしたものとの排他的論理和を１ビットずつ作って、バッファメモリ３３３０に再度入力する。これにより、バッファメモリ３３３０は、誤りが訂正された（ストリームデータのビットが“１”であるビットアドレスに対応する、フィードバックしたデータのビットの値が反転した）ページデータで更新される（１４０４０）。
【０１１８】
最後に、メモリコントローラ１１００はページ１３１１０に対するＴｇｌ＿Ｔ２コマンドを発行する。これによって、バッファメモリ３３３０上の訂正済みデータはドライバ３３１０を通じてページ１３１１０に上書きされる（１４０５０）。以上で、ページ誤り訂正動作が完了する。
【０１１９】
以下、本実施形態によるページ誤り訂正動作の効果を説明する。
【０１２０】
まず、従来の半導体メモリチップを用いてページ誤り訂正を実装する場合のＳＳＤの構成例（図示せず）を説明する。
【０１２１】
従来の半導体メモリチップを用いたＳＳＤにおいても、本実施形態（図１３）と同様にメモリコントローラは誤り訂正を行う専用ハードウェアを含む。同様にシンドローム生成自体にはバッファメモリを必要としないが、従来はメモリコントローラ内で誤り訂正済みデータを用意する必要があるため、メモリチップから読みだした誤りデータを蓄積するための外部バッファメモリ（メモリコントローラがアクセスできる、メモリチップ外のバッファメモリ）を備える必要がある。
【０１２２】
このように、従来のページ誤り訂正動作では、メモリコントローラがアクセスできるバッファメモリを必要とするが、本実施形態によれば、メモリコントローラのバッファメモリを用いることなく、半導体メモリチップの内部のバッファメモリだけでページ誤り訂正動作を実現できるため、メモリコントローラのバッファメモリを削減することができる。よって、ＳＳＤの低コスト化が可能である。
【０１２３】
次に、従来技術として、特許文献３が示している半導体メモリチップを用いたＳＳＤでのページ誤り訂正動作フロー例（図示せず）を説明する。
【０１２４】
まず、メモリコントローラは、メモリチップにリードコマンドを発行し、ページデータを読み出す。そして、誤り訂正ハードウェアによりそのデータに含まれる誤りビットのビットアドレスと個数を計算する。そして、その情報を用いて外部バッファメモリ上で誤りデータを訂正する。最後に、メモリチップに書き換えコマンド（特許文献３のＲｅｗｒｉｔｅ  Ｃｏｍｍａｎｄ）を発行し、誤りを含む箇所のカラムアドレス及び訂正データ部分を転送し、ページを上書きする。（厳密には、特許文献３は上書きでなく異なるページに書く方式を示す。）
図１５Ａ及び図１５Ｂは、本実施形態によるページ誤り訂正動作の効果を示したものである。
【０１２５】
例えば、Ｉ／Ｏ信号幅が８ビットで、ページサイズが５２３バイト、誤りビット個数の最大が４個のメモリチップを考える。
【０１２６】
従来技術として、特許文献３のようにページの一部を書き換えるためにアドレスとデータをコマンドで転送する方式の半導体メモリチップを比較対象とする。そのようなメモリチップを用いた場合のページ誤り訂正動作では、図１５Ａのように、訂正データをライトするための書き換えコマンド（ＲｅＷｒ）で、訂正するカラムアドレスＣＡ１、ＣＡ０（０〜５２２のいずれかのカラムアドレスを示す１０ビット、２クロック分）及び訂正データＤ（カラム当りのデータ長８ビット、１クロック分）のペアを最大４組メモリチップに送る必要がある。すなわち１２クロック分の入力転送が必要である。（図では２回分の波形：１５０１０、１５０２０を示す。）
一方、本実施形態のページ誤り訂正動作では、図１５Ｂのように、トグルパタンを生成するためのＴｇｌ＿Ｓコマンドで、誤りビットアドレスｂＡ１、ｂＡ０（０〜４１８３（８×５２３）のいずれかのビットアドレスを示す１３ビット、２クロック分）を最大４組メモリチップに送る必要がある。すなわち８クロック分の入力転送を行うだけでよい。（図では３回分の波形：１５１１０、１５１２０、１５１３０を示す。）
以上の比較では、カラム当りのデータ長を８ビット（１バイト）としたが、カラム当りのデータ長が長くなれば、従来の入力転送時間と本実施例による入力転送時間の差は大きくなる。たとえば、カラム当りのデータ長を４１８４ビットとすると、従来技術では、カラムアドレスの指定及び繰返しは不要となるが、５２３バイト（５２３クロック分）の入力転送時間になり、本実施形態では、８クロック分の入力転送時間でよい。
【０１２７】
このように、本実施形態によれば、ページ誤り訂正動作を従来より少ない転送クロック数で処理できる。ＳＳＤに含まれる全てのページ（例えば、１００ＧＢのＳＳＤならば２００万ページ）に対して、定期的にデータリフレッシュを行うことを想定すればこの削減効果は大きく作用し、ＳＳＤの動作電力消費量を減らし、低コスト化できる。
【０１２８】
以上、本実施形態の一例を述べたが、相変化メモリを記憶素子とするメモリチップに限らず、多種多様な不揮発性メモリチップ、及びそれを利用した半導体記憶装置においても本実施形態の技術を適用可能である。
【０１２９】
本実施形態のデータリフレッシュ（ページ誤り訂正）技術を、ＮＡＮＤ型フラッシュメモリを記憶素子とするメモリチップ、及びそれを利用した半導体記憶装置に適用する場合には、誤り訂正後のデータをセルアレイ内のページに書き戻すとき、元のページではなく異なるページに書き戻すように実施する。なぜならば、ＮＡＮＤ型フラッシュメモリの書き込み済みページは再書き込みができないからである。（同一ページに再度書くためには、事前にそのページを含む複数ページからなるブロックを消去する必要がある。）
本実施形態のデータリフレッシュ技術は、誤りデータが存在したページ（図１３のページ１３１１０）とは異なるページに訂正済みデータを書き戻すように実施した場合でも、書き込み先のページアドレスを異にするだけであるので、上記の低コスト化の効果を享受することは明らかである。
【０１３０】
特に、ＮＡＮＤ型フラッシュメモリはページサイズが８ＫＢ（キロバイト）で、その他の不揮発性メモリチップに比べて大きく、誤りビット個数の最大は１ＫＢ当たり４０個（つまり、１ページ当たり３２０個）という特徴がある。したがって、従来技術によるデータリフレッシュ動作では、誤りアドレス及び訂正済みデータをメモリチップに転送するための転送クロック数はさらに多くなる。ゆえに、ＮＡＮＤ型フラッシュメモリに本実施形態のデータリフレッシュ技術を適用することで、より多くの転送クロック数が削減される。このように、ＮＡＮＤ型フラッシュメモリの場合は、本実施形態の効果をより多く享受する。
【０１３１】
以上説明した本実施形態によれば、メモリコントローラ１１００からのコマンドに応じてバッファメモリ３３３０の入力がデータ選択回路３３４０によって制御されると共に、バッファメモリ３３３０の出力が選択される。図１６に、説明したメモリコマンドとバッファメモリ３３３０の入出力との対応関係を示す。
【０１３２】
図１６に示すように、コマンドＴｇｌ＿Ｒによりセンスアンプ３３２０からの出力がバッファメモリ３３３０に入力されるように、データ選択回路３３４０が制御される。このとき、バッファメモリ３３３０の出力は他の回路に入力されないように制御される。コマンドＴｇｌ＿Ｔ１によりセンスアンプ３３２０からの出力とバッファメモリ３３３０の出力との排他的論理和がバッファメモリ３３３０に入力されるように、データ選択回路３３４０が制御される。コマンドＴｇｌ＿Ｔ２によりバッファメモリ３３３０の出力がフィードバックされてバッファメモリ３３３０に入力されるように、データ選択回路３３４０が制御される。このときバッファメモリ３３３０の出力はフィードバックされると共に、ドライバ３３１０に入力される。コマンドＴｇｌ＿Ｓによりバッファメモリ３３３０の出力とインタフェースロジック３４００内のトグルパタン生成器１３１３０の出力との排他的論理和がバッファメモリ３３３０に入力されるように、データ選択回路３３４０が制御される。
【０１３３】
データ選択回路３３４０の制御及びバッファメモリ３３３０の出力先（出力しないことを含む）の選択は、インタフェースロジック３４００内または別途設ける制御回路（論理回路又はＣＰＵ）により、メモリコントローラ１１００からインタフェースロジック３４００に入力されるコマンドを解析し、コマンド解析結果に応じて実現される。
【０１３４】
なお、データをページ単位でメモリセルアレイから読み出すリードコマンド、メモリセルアレイへ書き込むライトコマンドについては詳細を略するが、通常の不揮発性メモリセルアレイに対するものと同じである。
【符号の説明】
【０１３５】
１０００…ＳＳＤ、１１００…メモリコントローラ、１１１０…ＣＰＵ、１２１０…バックアップ電源、１３０１〜１３０４…相変化メモリチップ、３１３０…セルアレイ、３１２０…ビットライン選択回路、３３３０…バッファメモリ、３３４０…データ選択回路、６０１０…Ｄａｔａ部、６０２０…ＬＡ部、６０３０…Ｆｌａｇ部、６０４０…ＥＣＣ部。
【図１】
2012027991.tif 000003
【図２Ａ】
2012027991.tif 000004
【図２Ｂ】
2012027991.tif 000005
【図３】
2012027991.tif 000006
【図４Ａ】
2012027991.tif 000007
【図４Ｂ】
2012027991.tif 000008
【図４Ｃ】
2012027991.tif 000009
【図５Ａ】
2012027991.tif 000010
【図５Ｂ】
2012027991.tif 000011
【図５Ｃ】
2012027991.tif 000012
【図６】
2012027991.tif 000013
【図７】
2012027991.tif 000014
【図８】
2012027991.tif 000015
【図９Ａ】
2012027991.tif 000016
【図９Ｂ】
2012027991.tif 000017
【図１０】
2012027991.tif 000018
【図１１】
2012027991.tif 000019
【図１２Ａ】
2012027991.tif 000020
【図１２Ｂ】
2012027991.tif 000021
【図１３】
2012027991.tif 000022
【図１４】
2012027991.tif 000023
【図１５Ａ】
2012027991.tif 000024
【図１５Ｂ】
2012027991.tif 000025
【図１６】
2012027991.tif 000026