(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025012071
(43)【公開日】2025-01-24
(54)【発明の名称】メモリシステムおよびメモリシステムの制御方法
(51)【国際特許分類】
G06F 12/00 20060101AFI20250117BHJP
G06F 12/02 20060101ALI20250117BHJP
G06F 3/06 20060101ALI20250117BHJP
G06F 13/14 20060101ALI20250117BHJP
G06F 11/10 20060101ALI20250117BHJP
G06F 3/08 20060101ALI20250117BHJP
【FI】
G06F12/00 560A
G06F12/02 570A
G06F12/00 597U
G06F3/06 301K
G06F3/06 306K
G06F13/14 320H
G06F11/10 648
G06F3/08 H
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2023114619
(22)【出願日】2023-07-12
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】菅野 伸一
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA06
5B160AB26
(57)【要約】
【課題】誤読み出しによって間違ったデータがホストに送信されることを防止できるメモリシステムを実現する。
【解決手段】コントローラは、複数の物理アドレスに対応する複数のフラグを管理する。リードコマンドをホストから受信したことに応じ、コントローラは、リードコマンドによって指定された論理アドレスにマッピングされている物理アドレスを第1の管理テーブルから取得し、取得した物理アドレスに基づいて、不揮発性メモリからデータを読み出す。コントローラは、取得した物理アドレスに対応するフラグの現在の状態が、有効データを示す第1の値に設定されているか、無効データを示す第2の値に設定されているかに基づいて、読み出したデータをホストに送信するか否かを決定する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリを制御するように構成されたコントローラと、を具備し、
前記コントローラは、
前記ホストが前記メモリシステムにアクセスするための複数の論理アドレスと前記不揮発性メモリの複数の物理アドレスとの間のマッピングを示すマッピング情報を、第1の管理テーブルを使用して管理し、
前記複数の物理アドレスに対応付けられた複数のフラグを第2の管理テーブルを使用して管理し、前記複数のフラグには、前記物理アドレスに対応する前記不揮発性メモリの記憶位置に格納されているデータが、有効データであることを示す第1の値、または無効データであることを示す第2の値のいずれかが設定され、
第1の論理アドレスを指定するライトコマンドを前記ホストから受信したことに応じ、前記第1の論理アドレスに第1の物理アドレスを割り当て、前記第1の物理アドレスに対応する前記不揮発性メモリの第1の記憶位置に前記ライトコマンドに関連付けられた第1のデータを書き込み、前記第1の物理アドレスに対応する第1のフラグを前記第1の値に設定し、
前記第1のデータの更新または削除によって前記第1のデータが無効データにされたことに応じ、前記第1のフラグを前記第2の値に設定し、
前記第1の論理アドレスを指定するリードコマンドを前記ホストから受信したことに応じ、前記第1の論理アドレスに前記リードコマンド実行時にマッピングされている物理アドレスを前記第1の管理テーブルから取得し、前記取得した物理アドレスに基づいて、前記不揮発性メモリからデータを読み出し、前記取得した物理アドレスに対応するフラグの現在の状態が前記第1の値に設定されているか、前記第2の値に設定されているかに基づいて、前記読み出したデータを前記ホストに送信するか否かを決定するように構成されている、
メモリシステム。
【請求項2】
前記コントローラは、
前記第1のデータを前記不揮発性メモリに書き込む際に、前記第1のデータと前記第1の物理アドレスとを共に前記第1の記憶位置に書き込み、
前記不揮発性メモリから前記第1のデータを読み出す際に、前記第1の管理テーブルから取得した前記物理アドレスに基づいて、前記不揮発性メモリからデータと物理アドレスとを共に読み出し、
前記第1の管理テーブルから取得した前記物理アドレスに対応する前記フラグの現在の状態が前記第1の値に設定されており、且つ、前記不揮発性メモリから読み出した前記物理アドレスが前記第1の管理テーブルから取得した前記物理アドレスに一致する、という条件を満たすか否かに基づいて、前記不揮発性メモリから読み出したデータを前記ホストに送信するか否かを決定するように構成されている、
請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、
前記第1の管理テーブルから取得した前記物理アドレスに対応する前記フラグを前記第2の管理テーブルから取得し、
前記取得したフラグの値が前記第1の値に設定されているか、前記第2の値に設定されているかを判定し、
前記判定の結果に基づいて、前記不揮発性メモリから読み出したデータを前記ホストに送信するか否かを決定するように構成されている、
請求項1に記載のメモリシステム。
【請求項4】
前記コントローラは、
前記第1のデータを前記不揮発性メモリに書き込む際に、前記第1のデータと前記第1の値を有するフラグとを含む情報の整合性をチェックするための第1の検査符号を、前記第1のデータと前記第1の値を有する前記フラグとを使用して生成し、
前記第1のデータと前記第1の検査符号とを共に前記第1の記憶位置に書き込み、
前記不揮発性メモリから前記第1のデータを読み出す際に、前記第1の管理テーブルから取得した前記物理アドレスに基づいて、前記不揮発性メモリからデータと検査符号とを共に読み出し、
前記第1の管理テーブルから取得した前記物理アドレスに対応する前記フラグを前記第2の管理テーブルから取得し、
前記取得したフラグと前記読み出したデータとを含む情報の整合性をチェックするための第2の検査符号を、前記取得したフラグと前記読み出したデータとを使用して生成し、
前記第2の検査符号が前記読み出した検査符号と一致するか否かに基づいて、前記読み出したデータを前記ホストに送信するか否かを決定するように構成されている、
請求項1に記載のメモリシステム。
【請求項5】
前記コントローラは、
前記第1のデータを前記不揮発性メモリに書き込む際に、前記第1のデータと前記第1の値を有するフラグと前記第1の物理アドレスとを含む情報の整合性をチェックするための第1の検査符号を、前記第1のデータと前記第1の値を有する前記フラグと前記第1の物理アドレスとを使用して生成し、
前記第1のデータと前記第1の検査符号とを共に前記第1の記憶位置に書き込み、
前記不揮発性メモリから前記第1のデータを読み出す際に、前記第1の管理テーブルから取得した前記物理アドレスに基づいて、前記不揮発性メモリから前記データと検査符号とを共に読み出し、
前記第1の管理テーブルから取得した前記物理アドレスに対応する前記フラグを前記第2の管理テーブルから取得し、
前記取得したフラグと前記第1の管理テーブルから取得した前記物理アドレスと前記読み出したデータとを含む情報の整合性をチェックするための第2の検査符号を、前記取得したフラグと前記第1の管理テーブルから取得した前記物理アドレスと前記読み出したデータとを使用して生成し、
前記第2の検査符号が前記読み出した検査符号と一致するか否かに基づいて、前記読み出したデータを前記ホストに送信するか否かを決定するように構成されている、
請求項1に記載のメモリシステム。
【請求項6】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリを制御するように構成されたコントローラと、を具備し、
前記コントローラは、
前記ホストが前記メモリシステムにアクセスするための複数の論理アドレスと前記不揮発性メモリの複数の物理アドレスとの間のマッピングを示すマッピング情報を、第1の管理テーブルを使用して管理し、
第1の論理アドレスを指定するライトコマンドを前記ホストから受信したことに応じ、前記第1の論理アドレスに第1の物理アドレスを割り当て、前記第1の物理アドレスに対応する前記不揮発性メモリの第1の記憶位置に前記ライトコマンドに関連付けられた第1のデータと、前記第1の物理アドレスから直接的または間接的に決定される第1の付加情報とを共に書き込み、
前記第1の論理アドレスを指定するリードコマンドを前記ホストから受信したことに応じ、前記第1の論理アドレスに前記リードコマンド実行時にマッピングされている物理アドレスを前記第1の管理テーブルから取得し、前記取得した物理アドレスに基づいて、前記不揮発性メモリからデータと付加情報とを共に読み出し、
前記読み出した付加情報が前記第1の管理テーブルから取得した前記物理アドレスから直接的または間接的に決定される付加情報に一致するか否かに基づいて、前記読み出したデータを前記ホストに送信するか否かを決定するように構成されている、
メモリシステム。
【請求項7】
前記コントローラは、
前記複数の物理アドレスに対応付けられた複数のフラグを第2の管理テーブルを使用して管理し、前記複数のフラグには、前記物理アドレスに対応する前記不揮発性メモリの記憶位置に格納されているデータが、有効データであることを示す第1の値、または無効データであることを示す第2の値のいずれかが設定され、
前記第1のデータと前記第1の付加情報とを共に前記第1の記憶位置に書き込んだことに応じ、前記第1の物理アドレスに対応する第1のフラグを前記第1の値に設定し、
前記第1のデータの更新または削除によって前記第1のデータが無効データにされたことに応じ、前記第1のフラグを前記第2の値に設定し、
前記読み出した付加情報が、前記第1の管理テーブルから取得した前記物理アドレスから直接的または間接的に決定される前記付加情報に一致し、且つ、前記第1の管理テーブルから取得した前記物理アドレスに対応するフラグの現在の状態が前記第1の値に設定されている、という条件を満たすか否かに基づいて、前記読み出したデータを前記ホストに送信するか否かを決定するように構成されている、
請求項6に記載のメモリシステム。
【請求項8】
前記第1の付加情報および前記読み出した付加情報の各々は、物理アドレスであり、
前記コントローラは、
前記第1のデータを前記不揮発性メモリに書き込む際に、前記第1のデータと前記第1の物理アドレスとを共に前記第1の記憶位置に書き込み、
前記不揮発性メモリから前記第1のデータを読み出す際に、前記第1の管理テーブルから取得した前記物理アドレスに基づいて、前記不揮発性メモリからデータと物理アドレスとを共に読み出し、
前記読み出した物理アドレスが前記第1の管理テーブルから取得した前記物理アドレスに一致するか否かに基づいて、前記読み出したデータを前記ホストに送信するか否かを決定するように構成されている、
請求項6に記載のメモリシステム。
【請求項9】
前記第1の付加情報および前記読み出した付加情報の各々は、検査符号であり、
前記コントローラは、
前記第1のデータを前記不揮発性メモリに書き込む際に、前記第1のデータと前記第1の物理アドレスとを含む情報の整合性をチェックするための第1の検査符号を、前記第1のデータと前記第1の物理アドレスとを使用して生成し、
前記第1のデータと前記第1の検査符号とを共に前記第1の記憶位置に書き込み、
前記不揮発性メモリから前記第1のデータを読み出す際に、前記第1の管理テーブルから取得した前記物理アドレスに基づいて、前記不揮発性メモリからデータと検査符号とを共に読み出し、
前記第1の管理テーブルから取得した前記物理アドレスと前記読み出したデータとを含む情報の整合性をチェックするための第2の検査符号を、前記第1の管理テーブルから取得した前記物理アドレスと前記読み出したデータとを使用して生成し、
前記第2の検査符号が前記読み出した検査符号に一致するか否かに基づいて、前記読み出したデータを前記ホストに送信するか否かを決定するように構成されている、
請求項6に記載のメモリシステム。
【請求項10】
前記第1の付加情報および前記読み出した付加情報の各々は、物理アドレスであり、
前記コントローラは、
前記複数の物理アドレスに対応付けられた複数のフラグを第2の管理テーブルを使用して管理し、前記複数のフラグには、前記物理アドレスに対応する前記不揮発性メモリの記憶位置に格納されているデータが、有効データであることを示す第1の値、または無効データであることを示す第2の値のいずれかが設定され、
前記第1のデータと前記第1の付加情報とを共に前記第1の記憶位置に書き込んだことに応じ、前記第1の物理アドレスに対応する第1のフラグを前記第1の値に設定し、
前記第1のデータの更新または削除によって前記第1のデータが無効データにされたことに応じ、前記第1のフラグを前記第2の値に設定し、
前記第1のデータを前記不揮発性メモリに書き込む際に、前記第1のデータと前記第1の値を有するフラグと前記第1の物理アドレスとを含む情報の整合性をチェックするための第1の検査符号を、前記第1のデータと前記第1の値を有するフラグと前記第1の物理アドレスとを使用して生成し、
前記第1のデータと前記第1の検査符号とを共に前記第1の記憶位置に書き込み、
前記不揮発性メモリから前記第1のデータを読み出す際に、前記第1の管理テーブルから取得した前記物理アドレスに基づいて、前記不揮発性メモリからデータと検査符号とを共に読み出し、
前記第1の管理テーブルから取得した前記物理アドレスに対応するフラグを前記第2の管理テーブルから取得し、
前記第1の管理テーブルから取得した前記物理アドレスと前記取得したフラグと前記読み出したデータとを含む情報の整合性をチェックするための第2の検査符号を、前記第1の管理テーブルから取得した前記物理アドレスと前記取得したフラグと前記読み出したデータとを使用して生成し、
前記第2の検査符号が前記読み出した検査符号に一致するか否かに基づいて、前記読み出したデータを前記ホストに送信するか否かを決定するように構成されている、
請求項6に記載のメモリシステム。
【請求項11】
不揮発性メモリを含むメモリシステムを制御する制御方法であって、
ホストが前記メモリシステムにアクセスするための複数の論理アドレスと前記不揮発性メモリの複数の物理アドレスとの間のマッピングを示すマッピング情報を、第1の管理テーブルを使用して管理することと、
前記複数の物理アドレスに対応付けられた複数のフラグを第2の管理テーブルを使用して管理することと、前記複数のフラグには、前記物理アドレスに対応する前記不揮発性メモリの記憶位置に格納されているデータが、有効データであることを示す第1の値、または無効データであることを示す第2の値のいずれかが設定され、
第1の論理アドレスを指定するライトコマンドを前記ホストから受信したことに応じ、前記第1の論理アドレスに第1の物理アドレスを割り当て、前記第1の物理アドレスに対応する前記不揮発性メモリの第1の記憶位置に前記ライトコマンドに関連付けられた第1のデータを書き込み、前記第1の物理アドレスに対応する第1のフラグを前記第1の値に設定することと、
前記第1のデータの更新または削除によって前記第1のデータが無効データにされたことに応じ、前記第1のフラグを前記第2の値に設定することと、
前記第1の論理アドレスを指定するリードコマンドを前記ホストから受信したことに応じ、前記第1の論理アドレスに前記リードコマンド実行時にマッピングされている物理アドレスを前記第1の管理テーブルから取得し、前記取得した物理アドレスに基づいて、前記不揮発性メモリからデータを読み出し、前記取得した物理アドレスに対応するフラグの現在の状態が前記第1の値に設定されているか、前記第2の値に設定されているかに基づいて、前記読み出したデータを前記ホストに送信するか否かを決定することと、を具備する、
制御方法。
【請求項12】
不揮発性メモリを含むメモリシステムを制御する制御方法であって、
ホストが前記メモリシステムにアクセスするための複数の論理アドレスと前記不揮発性メモリの複数の物理アドレスとの間のマッピングを示すマッピング情報を、第1の管理テーブルを使用して管理することと、
第1の論理アドレスを指定するライトコマンドを前記ホストから受信したことに応じ、前記第1の論理アドレスに第1の物理アドレスを割り当て、前記第1の物理アドレスに対応する前記不揮発性メモリの第1の記憶位置に前記ライトコマンドに関連付けられた第1のデータと前記第1の物理アドレスから直接的または間接的に決定される第1の付加情報とを共に書き込むことと、
前記第1の論理アドレスを指定するリードコマンドを前記ホストから受信したことに応じ、前記第1の論理アドレスに前記リードコマンド実行時にマッピングされている物理アドレスを前記第1の管理テーブルから取得し、前記取得した物理アドレスに基づいて、前記不揮発性メモリからデータと付加情報とを共に読み出すことと、
前記読み出した付加情報が前記第1の管理テーブルから取得した前記物理アドレスから直接的または間接的に決定される付加情報に一致するか否かに基づいて、前記読み出したデータを前記ホストに送信するか否かを決定することと、を具備する、
制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステム、および、メモリシステムの制御方法に関する。
【背景技術】
【0002】
近年広く普及しているメモリシステムとして、例えば、不揮発性メモリと、この不揮発性メモリを制御するコントローラと、を備えるソリッドステートドライブ(SSD)が知られている。
【0003】
メモリシステムは、通常、外部のホストと接続され、相互にデータの送受信が可能とされている。例えば、SSDでは、コントローラが、外部のホストから特定のコマンドを受信することにより、ホストから受信したデータを不揮発性メモリに書き込む処理や、不揮発性メモリに書き込まれたデータを読み出しホストに送信する処理などが実行される。
【0004】
SSD等のメモリシステムにおけるデータ送受信においては、不揮発性メモリに書き込まれたデータを読み出してホストに送信する際、誤読み出しによって間違ったデータがホストに送信されることを防止できる技術が必要とされている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】米国特許出願公開第2020/0201785号明細書
【特許文献2】米国特許出願公開第2020/0278883号明細書
【特許文献3】米国特許出願公開第2020/0371861号明細書
【特許文献4】特許第5221699号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明の一実施形態が解決しようとする課題は、誤読み出しによって間違ったデータがホストに送信されることを防止できるメモリシステムおよびメモリシステムの制御方法を提供することである。
【課題を解決するための手段】
【0007】
実施形態によれば、メモリシステムは、ホストに接続可能である。前記メモリシステムは、不揮発性メモリと、前記不揮発性メモリを制御するように構成されたコントローラと、を具備する。前記コントローラは、前記ホストが前記メモリシステムにアクセスするための複数の論理アドレスと前記不揮発性メモリの複数の物理アドレスとの間のマッピングを示すマッピング情報を、第1の管理テーブルを使用して管理する。前記コントローラは、前記複数の物理アドレスに対応付けられた複数のフラグを第2の管理テーブルを使用して管理する。前記複数のフラグには、前記物理アドレスに対応する前記不揮発性メモリの記憶位置に格納されているデータが、有効データであることを示す第1の値、または無効データであることを示す第2の値のいずれかが設定される。第1の論理アドレスを指定するライトコマンドを前記ホストから受信したことに応じ、前記コントローラは、前記第1の論理アドレスに第1の物理アドレスを割り当てる。前記コントローラは、前記第1の物理アドレスに対応する前記不揮発性メモリの第1の記憶位置に前記ライトコマンドに関連付けられた第1のデータを書き込む。前記コントローラは、前記第1の物理アドレスに対応する第1のフラグを前記第1の値に設定する。前記第1のデータの更新または削除によって前記第1のデータが無効データにされたことに応じ、前記コントローラは、前記第1のフラグを前記第2の値に設定する。前記第1の論理アドレスを指定するリードコマンドを前記ホストから受信したことに応じ、前記コントローラは、前記第1の論理アドレスに前記リードコマンド実行時にマッピングされている物理アドレスを前記第1の管理テーブルから取得する。前記コントローラは、前記取得した物理アドレスに基づいて、前記不揮発性メモリからデータを読み出す。前記コントローラは、前記取得した物理アドレスに対応するフラグの現在の状態が前記第1の値に設定されているか、前記第2の値に設定されているかに基づいて、前記読み出したデータを前記ホストに送信するか否かを決定する。
【図面の簡単な説明】
【0008】
【
図1】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【
図2】実施形態に係るメモリシステムにおいて使用される、複数のチャンネルと複数のフラッシュダイとの関係を示す構成例を示すブロック図。
【
図3】実施形態に係るメモリシステムにおいて使用されるスーパーブロックの構成例を示す図。
【
図4】実施形態に係るメモリシステムにおいて使用されるバリッドフラグテーブルの構成例を示す図。
【
図5】実施形態に係るメモリシステムにおける書き込みデータおよび読み出しデータの制御に関する構成例を示す図。
【
図6】実施形態に係るメモリシステムの書き込み処理の流れを示す図。
【
図7】実施形態に係るメモリシステムの無効化処理の流れを示す図。
【
図8】実施形態に係るメモリシステムの読み出し処理の流れを示す図。
【
図9】実施形態に係るメモリシステムのガベージコレクション処理の流れを示す図。
【
図10】実施形態に係るメモリシステムの書き込みデータの第1の例を示す図。
【
図11】実施形態に係るメモリシステムの読み出しデータの第1の例を示す図。
【
図12】実施形態に係るメモリシステムの書き込み処理の手順の第1の例を示すフローチャート。
【
図13】実施形態に係るメモリシステムの読み出し処理の手順の第1の例を示すフローチャート。
【
図14】実施形態に係るメモリシステムの書き込みデータの第2の例を示す図。
【
図15】実施形態に係るメモリシステムの読み出しデータの第2の例を示す図。
【
図16】実施形態に係るメモリシステムの書き込み処理の手順の第2の例を示す図。
【
図17】実施形態に係るメモリシステムの読み出し処理の手順の第2の例を示す図。
【
図18】実施形態に係るメモリシステムの書き込みデータの第3の例を示す図。
【
図19】実施形態に係るメモリシステムの読み出しデータの第3の例を示す図。
【
図20】実施形態に係るメモリシステムの書き込み処理の手順の第3の例を示す図。
【
図21】実施形態に係るメモリシステムの読み出し処理の手順の第3の例を示す図。
【
図22】実施形態に係るメモリシステムの書き込みデータの第4の例を示す図。
【
図23】実施形態に係るメモリシステムの読み出しデータの第4の例を示す図。
【
図24】実施形態に係るメモリシステムの書き込み処理の手順の第4の例を示す図。
【
図25】実施形態に係るメモリシステムの読み出し処理の手順の第4の例を示す図。
【発明を実施するための形態】
【0009】
以下、図面を参照して、実施形態を説明する。
【0010】
図1は、実施形態に係るメモリシステムを含む情報処理システム1の構成例を示すブロック図である。情報処理システム1は、ホスト(ホストデバイス)2と、メモリシステムとしてのSSD(ソリッドステートドライブ)3とを含む。
【0011】
ホスト2は、例えば、パーソナルコンピュータ、サーバコンピュータ、またはモバイルデバイスなどの情報処理装置である。ホスト2は、SSD3に接続され、SSD3にアクセス可能である。具体的には、ホスト2は、データを書き込むためのライトコマンドをSSD3に発行する。また、ホスト2は、データを読み出すためのリードコマンドをSSD3に発行する。
【0012】
SSD3は、ストレージデバイスとも呼ばれ、内部の不揮発性メモリにデータを書き込むこと、及び、内部の不揮発性メモリからデータを読み出すことが可能である。
【0013】
SSD3とホスト2との間の通信は、バス7を介して実行される。バス7は、ホスト2とSSD3とを接続する伝送路である。バス7は、例えば、PCI expressTM(PCIeTM)バスである。PCIeバスは、全二重(full duplex)伝送路である。全二重伝送路は、ホスト2からSSD3へデータおよび入出力(I/O)コマンドを送信する伝送路と、SSD3からホスト2へデータおよび応答を送信する伝送路との双方を含む。I/Oコマンドは、ホスト2からSSD3に対して発行され、不揮発性メモリへのデータを書き込むためのライトコマンド、または不揮発性メモリからのデータの読み出しを行うためのリードコマンドを含む。
【0014】
ホスト2とSSD3とを接続する論理インターフェースには、例えば、NVM expressTM(NVMeTM)規格が使用され得る。NVMe規格に準拠するインターフェースでは、少なくとも1つのサブミッションキュー(SQ)と、このサブミッションキュー(SQ)に関連付けられたコンプリーションキュー(CQ)とを含む一対のキューを用いて、ホスト2とSSD3との間の通信が行われる。例えば、この一対のキューは、サブミッションキュー/コンプリーションキューペア(SQ/CQペア)と称される。
【0015】
次に、ホスト2の構成について説明する。
【0016】
ホスト2は、プロセッサ21と、メモリ22とを含み、プロセッサ21と、メモリ22とは、内部バス20を介して相互接続される。
【0017】
プロセッサ21は、例えばCPU(Central Processing Unit)である。プロセッサ21は、SSD3、または、ホスト2に接続された他のストレージデバイスからメモリ22にロードされるソフトウェア(ホストソフトウェア)を実行する。ホストソフトウェアは、例えば、オペレーティングシステム、ファイルシステム、アプリケーションプログラム、を含む。
【0018】
メモリ22は、例えば揮発性のメモリである。メモリ22は、メインメモリ、システムメモリ、またはホストメモリとも称される。メモリ22は、例えばダイナミックランダムアクセスメモリ(DRAM)である。メモリ22の記憶領域の一部は、ホストライトバッファとして使用される。ホストライトバッファは、SSD3の不揮発性メモリに書き込むべきデータを一時的に記憶する記憶領域である。メモリ22の記憶領域の他の一部は、ホストリードバッファとして使用される。ホストリードバッファは、SSD3の不揮発性メモリから読み出され、ホストに送信(転送)すべきデータを一時的に記憶する記憶領域である。
【0019】
次に、SSD3の内部構成について説明する。ここでは、SSD3に含まれる不揮発性メモリがNAND型フラッシュメモリであることを想定するが、他のフラッシュメモリや、MRAM、ReRAM、FeRAM、相変化メモリ等の他の不揮発性メモリであってもよい。
【0020】
SSD3は、コントローラ4と、NAND型フラッシュメモリ5と、を含む。 NAND型フラッシュメモリ5は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。また、SSD3は、ランダムアクセスメモリ、例えば、揮発性メモリであるダイナミックランダムアクセスメモリ(DRAM)6をさらに含んでいてもよい。
【0021】
コントローラ4は、メモリコントローラである。コントローラ4は、例えば、System-on-a-Chip(SoC)のような制御回路である。コントローラ4は、NAND型フラッシュメモリ5およびDRAM6の各々に電気的に接続されている。コントローラ4は、ホスト2から受信される様々なコマンドを処理する。コントローラ4は、ライトコマンドを受信すると、NAND型フラッシュメモリ5にデータを書き込む処理を実行する。コントローラ4は、リードコマンドを受信すると、NAND型フラッシュメモリ5からデータを読み出す処理を実行する。さらに、コントローラ4は、トリムコマンドを受信すると、NAND型フラッシュメモリ5に記憶されているデータを無効化する処理を実行する。トリムコマンドは、デアロケートコマンドまたはアンマップコマンドとも称される、SSD3にデータの無効化を要求するコマンドである。無効化されたデータは、ホスト2によってアクセスされることがない、無効データと称される。一方、無効化される前の、ホスト2によってアクセスされる可能性があるデータは、有効データと称される。
【0022】
コントローラ4とNAND型フラッシュメモリ5とを接続する物理インターフェースには、例えば、Toggleインターフェース、またはオープンNANDフラッシュインターフェース(ONFI)が使用される。コントローラ4の各部の機能は、専用ハードウェア、プログラムを実行するプロセッサ、またはこれら専用ハードウェアとプロセッサとの組み合わせにより実現され得る。
【0023】
NAND型フラッシュメモリ5は、複数のダイを含み得る。ダイは、フラッシュダイ、メモリダイ、メモリチップ、フラッシュチップ等とも称される。以下の説明では、ダイをフラッシュダイと称する。
図1においては、NAND型フラッシュメモリ5が、32個のフラッシュダイ#0~#31を含む例が示されている。
【0024】
NAND型フラッシュメモリ5に含まれる複数のフラッシュダイの各々は、複数のブロックから構成される。複数のブロックの各々は、データ消去動作の最小単位である。複数のブロックの各々は、メモリブロックまたは物理ブロックとも称される。複数のブロックの各々は、複数のページを含む。複数のページの各々は、データ書き込み動作およびデータ読み出し動作の単位である。ページは、同一のワード線に接続されたメモリセルの集合を含む。ページは、物理ページとも称される。
【0025】
DRAM6は、揮発性のメモリである。DRAM6の記憶領域の一部は、例えば、NAND型フラッシュメモリ5に書き込まれるデータを一時的に格納するため、あるいはNAND型フラッシュメモリ5から読み出されたデータを一時的に格納するため、コントローラ4によって使用される。
【0026】
次に、コントローラ4の内部構成を説明する。コントローラ4は、例えば、ホストインターフェース(ホストI/F)41と、スタティックRAM(SRAM)42と、CPU43と、検査回路44と、誤り訂正回路45と、NANDインターフェース(NAND I/F)46と、DRAMインターフェース(DRAM I/F)47等の構成要素を含む。これらの構成要素同士は、内部バス40を介して相互に接続される。
【0027】
ホストインターフェース41は、ホスト2との通信を実行する通信インターフェース回路である。ホストインターフェース41は、例えば、PCIeコントローラによって実現されている。
【0028】
SRAM42は、揮発性メモリである。SRAM42の記憶領域は、例えば、CPU43の作業領域として使用される。また、SRAM42の他の記憶領域は、NAND型フラッシュメモリ5に書き込むべきデータを一時的に記憶する記憶領域として使用され得る。
【0029】
CPU43は、プロセッサである。CPU43は、NAND型フラッシュメモリ5または図示しないROMに格納されている制御プログラム(ファームウェア)をSRAM42にロードする。そして、CPU43は、このファームウェアを実行することによって様々な処理を行う。なお、ファームウェアは、DRAM6にロードされたものであってもよい。
【0030】
CPU43は、例えば、フラッシュトランスレーション層(FTL)として、NAND型フラッシュメモリ5に記憶されたデータの管理と、NAND型フラッシュメモリ5に含まれるブロックの管理とを行う。NAND型フラッシュメモリ5に記憶されたデータの管理は、例えば、論理物理アドレス変換テーブル(L2Pテーブル)61を使用したマッピング情報の管理を含む。L2Pテーブル61は、複数の論理アドレスの各々と複数の物理アドレスの各々との間のマッピングを示すマッピング情報を保持するテーブルである。マッピング情報の詳細については、後述する。
【0031】
NAND型フラッシュメモリ5に記憶されているデータのうち、論理アドレスにマッピングされている物理アドレスによって示される記憶位置に記憶されているデータは、有効データである。一方、どの論理アドレスにもマッピングされていない物理アドレスによって示される記憶位置に記憶されているデータは、無効データである。つまり、物理アドレスに対応する記憶位置にデータが記憶されていたとしても、その物理アドレスが論理アドレスとマッピングされていなければ無効データとなる。CPU43は、少なくとも一つの有効データを保持しているブロックをアクティブブロックとして管理する。一方、CPU43は、有効データを保持していないブロックをフリーブロックとして管理する。
【0032】
また、NAND型フラッシュメモリ5の各ブロックに対する管理としては、不良ブロック(バッドブロック)管理、ウェアレベリング(WL)、及び、ガベージコレクション(GC)などが含まれる。
【0033】
検査回路44は、NAND型フラッシュメモリ5から読み出されたデータ(読み出しデータ)が正しいデータであるか否かを検査する回路である。検査回路44において、例えば、読み出しデータが正しいデータであるか否かを検査する、つまり読み出しデータの整合性(integrity)をチェックするために、検査符号が用いられてもよい。検査回路44は、例えば、検査符号生成回路441と、検査符号検査回路442と、フラグ検査回路443と、PBA検査回路444と、LBA検査回路445とを含む。検査符号検査回路442、フラグ検査回路443、PBA検査回路444、およびLBA検査回路445の一部又は全ては、データ検査回路44aとして動作し得る。
【0034】
検査符号生成回路441は、例えば、NAND型フラッシュメモリ5に書き込まれるべきデータを使用して、検査符号を生成する。検査符号は、このデータが正しいデータであるか否かを検査する、つまり、データの整合性をチェックするための符号である。検査符号は、例えば、巡回冗長符号(CRC)、または、ハッシュ値、である。検査符号生成回路441は、少なくともユーザデータを使用して、検査符号を生成する。ユーザデータは、ホスト2から受信されるライトコマンドに関連付けられたデータである。例えば、二つの同じデータからそれぞれ生成された二つの検査符号は、互いに一致した値となる。また、二つの異なるデータからそれぞれ生成された二つの検査符号は、互いに異なる値となる。そのため、二つの一致する値の検査符号をそれぞれ生成するために使用された二つのデータは、互いに同じデータであると判定される。また、互いに異なる二つの値の検査符号をそれぞれ生成するために使用された二つのデータは、互いに異なるデータであると判定される。
【0035】
このように、検査符号生成回路441は、ユーザデータの整合性をチェックするために検査符号を生成する。例えば、データ書き込み時、このユーザデータと、ユーザデータから生成された検査符号とは、一つのデータセットとしてNAND型フラッシュメモリ5における書き込み先の記憶位置に書き込まれる。また、例えば、検査符号生成回路441は、データ読み出し時、NAND型フラッシュメモリ5のリード対象記憶位置からユーザデータと共に読み出された検査符号と比較されるべき検査符号を生成する。
【0036】
尚、検査符号生成回路441は、ユーザデータだけでなく、論理アドレス(例えば、論理ブロックアドレス(LBA))、物理アドレス(例えば、物理ブロックアドレス(PBA))、またはフラグをも使用して、検査符号を生成し得る。すなわち、検査符号生成回路441は、例えば、LBA、PBA、およびフラグの全てとユーザデータとを含む情報の整合性をチェックするための検査符号を、LBA、PBA、およびフラグの全てと、ユーザデータとを使用して生成し得る。あるいは、検査符号生成回路441は、例えば、LBA、PBA、およびフラグの任意の組み合わせとユーザデータとを含む情報の整合性をチェックするための検査符号を、LBA、PBA、およびフラグのこの任意の組み合わせと、ユーザデータとを使用して生成し得る。ここで、フラグは、ある物理アドレスによって示されるNAND型フラッシュメモリ5における一つの記憶位置に記憶されているデータが有効データまたは無効データのいずれであるかを示す1ビットの情報である。フラグの値は、データが有効データである場合、第1の値が設定され、データが無効データである場合、第2の値が設定される。
【0037】
データ検査回路44aは、NAND型フラッシュメモリ5から読み出されたデータが検査符号生成回路441で生成した検査符号のデータと一致するかどうかを判定する。尚、ここでデータとは、検査符号生成回路441において、(1)ユーザデータ、及び/又は、(2)LBA、PBA、及び、フラグのいずれかの組合せ、により生成される検査符号のデータである。両者が一致する場合、同一のデータであると判定する。両者が一致しない場合、同一のデータではないと判定する。
【0038】
データ検査回路44aは、例えば、検査符号検査回路442、フラグ検査回路443、PBA検査回路444、LBA検査回路445の全ての回路、或いは、一部の回路を含み得る。
【0039】
以下、データ検査回路44aが備え得る、検査符号検査回路442、検査装置443、444、445の各々の動作について説明する。
【0040】
検査符号検査回路442は、二つの検査符号が一致しているか否かを検査する回路である。検査符号検査回路442は、NAND型フラッシュメモリ5から読み出されたデータの検査符号と、検査符号生成回路441において生成された検査符号とを比較する。これら二つの検査符号が互いに一致する場合、検査符号検査回路442は、NAND型フラッシュメモリ5から読み出されたデータが同一のデータ、すなわち、正しいデータであると判定する。また、二つの検査符号が互いに一致しない場合、検査符号検査回路442は、NAND型フラッシュメモリ5から読み出されたデータが同一のデータでない、すなわち、間違ったデータであると判定する。
【0041】
フラグ検査回路443は、読み出し対象の論理アドレスに読み出し実行時にマッピングされている物理アドレスに対応するフラグの現在の状態が第1の値に設定されている状態であるか否かを判定する回路である。つまり、フラグ検査回路443は、ホスト2から受信されたリードコマンドによって指定される論理アドレスに読み出し実行時にマッピングされている物理アドレスに対応するフラグの値を参照し、このフラグの値が第1の値で保持し続けられているか否かを判定する。フラグの値が第1の値である場合、フラグ検査回路443は、NAND型フラッシュメモリ5から読み出されたユーザデータが正しいデータであると判定する。一方、フラグの値が第1の値を保持していない場合、フラグ検査回路443は、NAND型フラッシュメモリ5から読み出されたユーザデータが、間違ったデータであると判定する。
【0042】
PBA検査回路444は、二つの物理アドレス(PBA)が一致するか否かを検査する回路である。PBA検査回路444は、例えば、NAND型フラッシュメモリ5から読み出されたPBAが、リードコマンドによって指定されたLBAに読み出し実行時にマッピングされている最新のPBAと一致するか否かを検査する。これら二つのPBAが互いに一致する場合、PBA検査回路444は、NAND型フラッシュメモリ5から読み出されたデータが正しいデータであると判定する。また、これら二つのPBAが互いに一致しない場合、PBA検査回路444は、NAND型フラッシュメモリ5から読み出されたデータが間違ったデータであると判定する。
【0043】
LBA検査回路445は、二つの論理アドレス(LBA)が一致するか否かを検査する回路である。LBA検査回路445は、例えば、リードコマンドによって指定された最新のLBAが、読み出しデータと共にNAND型フラッシュメモリ5から読み出されたLBAと一致するか否かを検査する。これら二つのLBAが互いに一致する場合、LBA検査回路445は、NAND型フラッシュメモリ5から読み出されたデータが正しいデータであると判定する。また、これら二つのLBAが互いに一致しない場合、LBA検査回路445は、NAND型フラッシュメモリ5から読み出されたデータが間違ったデータであると判定する。
【0044】
本実施形態において実行される読み出し処理では、読み出されたデータが、ホスト2から受信したリードコマンドによって指定される論理アドレスに対応する以前のデータ(すなわち旧データ)だった場合、読み出されたデータは検査回路44によって間違ったデータとして検出される。すなわち、たとえ読み出されたデータがリードコマンドによって指定される論理アドレスと同じ論理アドレスに対応するデータであったとしても、この読み出されたデータがこの論理アドレスに対応する最新のデータ(新データ)ではなく、以前のデータ(旧データ)であった場合には、この読み出されたデータは、間違ったデータとして検出される。
【0045】
NAND型フラッシュメモリ5においては、ある論理アドレスについて、その論理アドレスに対応するデータの更新が行われた場合、以前のデータ(旧データ)が格納されている記憶位置ではなく、この記憶位置とは異なる別の記憶位置に更新データ(新データ)が書き込まれる。この結果、NAND型フラッシュメモリ5においては、同じ論理アドレスに対応する複数世代のデータが存在し得る。したがって、もしL2Pテーブル61内のデータ破損等によってマッピング情報の一部に誤りが生じた場合、ある論理アドレスに対応する以前のデータ(旧データ)がNAND型フラッシュメモリ5から誤って読み出されてしまう可能性がある。
【0046】
しかしながら、本実施形態によれば、ある論理アドレスに対応する更新データ(新データ)の書き込みによってこの論理アドレスに対応する以前のデータ(旧データ)が無効化された場合、以前のデータ(旧データ)が記憶されている記憶位置を示す物理アドレスに対応するフラグは、無効データを示す第2の値に設定される。コントローラ4は、ホスト2から受信されるリードコマンドによって指定される論理アドレス(読み出し対象の論理アドレス)にリードコマンド実行時にマッピングされている最新の物理アドレスをL2Pテーブル61から取得し、この取得した物理アドレスに基づいて、NAND型フラッシュメモリ5からデータを読み出す。データを読み出す際には、取得した最新の物理アドレスに対応するフラグの現在の状態が、第1の値に設定されている状態が維持し続けられているか否かを判定する。これにより、NAND型フラッシュメモリ5から読み出されたデータが正しいデータか、間違ったデータかのいずれであるかを判定できる。この判定結果に基づいて、コントローラ4は、NAND型フラッシュメモリ5から読み出されたデータをホスト2に送信するか否かを決定する。この結果、読み出し対象の論理アドレスに対応する以前のデータ(旧データ)や、トリムコマンドによって既に無効化されたデータ等、誤読み出しによって間違ったデータがホスト2に送信されることを防止することができる。
【0047】
読み出し対象の論理アドレスに読み出し実行時にマッピングされている物理アドレスに対応するフラグの現在の状態が、第1の値に設定されている状態が維持し続けられているか否かを判定するための方法としては、以下に述べる、第1の方法と第2の方法とがある。
【0048】
第1の方法は、読み出し対象の論理アドレスに読み出し実行時にマッピングされている物理アドレスに対応するフラグ自体を参照し、フラグ検査回路443によって、このフラグの値が第1の値で維持し続けられているか否かを判定する方法である(論物マップフラグ値判定方法(“1/0”)。以下、単にフラグ値判定方法と呼ぶ場合もある。)。
【0049】
第2の方法は、NAND型フラッシュメモリ5に書き込む際に、ユーザデータと共に書き込まれる検査符号を用い、ユーザデータと第1の値を有するフラグとを含む情報の整合性をチェックする方法である(検査符号判定方法(“一致/不一致”))。
【0050】
第2の方法によれば、読み出し対象の論理アドレスにリードコマンド実行時にマッピングされている物理アドレスによって示される記憶位置からユーザデータを読み出す際、ユーザデータと共に検査符号も読み出される。そして、読み出し対象の論理アドレスに読み出し実行時にマッピングされている物理アドレスに対応するフラグと、読み出されたユーザデータとを含む情報の整合性を検査するための新たな検査符号が、このフラグと、この読み出されたユーザデータとを使用して生成される。このフラグの値が第2の値に設定されている場合には、新たな検査符号は、読み出された検査符号と一致しない。したがって、新たな検査符号が読み出された検査符号と一致するか否かを判定することにより、読み出し対象の論理アドレスに読み出し実行時にマッピングされている物理アドレスに対応するフラグの現在の状態が、第1の値に維持し続けられているか否かを判定することができる。そのため、フラグ検査回路443によって、フラグ自体を参照して、値を判定することを必要としない。つまり、第2の方法の場合、検査回路44は、フラグ検査回路443を含んでいなくてもよい。
【0051】
なお、上述したように、ある論理アドレスに対応する以前のデータ(旧データ)が格納されている記憶位置の物理アドレスと、この論理アドレスに対応する最新のデータ(新データ)が格納されている記憶位置の物理アドレスとは、互いに異なる。但し、たとえL2Pテーブル61のマッピング情報の内容が正しかったとしても、NAND型フラッシュメモリ5内のアドレスデコーダ等の誤動作等が発生した場合、この論理アドレスに対応する以前のデータ(旧データ)が格納されている記憶位置からデータが誤って読み出されてしまう可能性がある。この場合においても、誤読み出しによって間違ったデータがホスト2に送信されてしまう可能性がある。
【0052】
このようにNAND型フラッシュメモリ5内で生じた誤動作に起因する誤読み出しの場合についても、間違ったデータがホスト2に送信されることを防止することが必要である。そのために、コントローラ4は、ユーザデータを、このユーザデータが書き込まれるべき物理アドレスから直接的または間接的に決定される付加情報と共に、NAND型フラッシュメモリ5に書き込んでもよい。ユーザデータが書き込まれるべき物理アドレスから直接的または間接的に決定される付加情報としては、ユーザデータが書き込まれるべき物理アドレスそのものが使用され得る。あるいは、ユーザデータと物理アドレスとを含む情報から生成される検査符号が、この付加情報として使用されてもよい。
【0053】
リードコマンドによって指定された読み出し対象論理アドレスに対応するデータをNAND型フラッシュメモリ5から読み出す際、コントローラ4は、リード対象論理アドレスにリードコマンド実行時にマッピングされている最新の物理アドレス(リード対象物理アドレス)をL2Pテーブル61から取得する。コントローラ4は、取得したリード対象物理アドレスに基づいて、NAND型フラッシュメモリ5からユーザデータと付加情報とを共に読み出す。コントローラ4は、読み出した付加情報が、リード対象論理アドレスから直接的または間接的に決定される付加情報と一致するか否かを判定する。物理アドレスそのものが付加情報として使用されるケースにおいては、コントローラ4は、読み出した付加情報がリード対象物理アドレスと一致するか否かを判定する。一方、ユーザデータと物理アドレスとを含む情報の検査符号が付加情報として使用されるケースにおいては、コントローラ4は、まず、読み出したユーザデータとリード対象物理アドレスとを使用して検査符号を生成する。そして、コントローラ4は、読み出した付加情報が生成した検査符号と一致するか否かを判定する。
【0054】
このように、読み出した付加情報がリード対象物理アドレスから直接的または間接的に決定される付加情報と一致するか否かを判定することにより、NAND型フラッシュメモリ5から読み出されたユーザデータがリード対象の物理アドレスから読み出された正しいデータであるか、リード対象の物理アドレスとは異なる別の物理アドレスから読み出された間違ったデータであるかを判定することができる。このように、コントローラ4は、NAND型フラッシュメモリ5から読み出された付加情報が、リード対象物理アドレスから直接的または間接的に決定される付加情報と一致するか否かに基づいて、NAND型フラッシュメモリ5から読み出されたユーザデータをホスト2に送信するか否かを決定する。この結果、読み出し対象の論理アドレスに対応する以前のデータのような間違ったデータがホスト2に送信されることを防止できる。
【0055】
前述したように、直接的または間接的な付加情報は、例えば、物理アドレス(PBA)そのものであってもよい。この場合、コントローラ4は、ユーザデータを、このユーザデータが書き込まれるべきPBA(書き込み先PBAとも云う)と共に、NAND型フラッシュメモリ5に書き込む。
【0056】
あるいは、前述したように、直接的または間接的な付加情報は、例えば、検査符号であってもよい。この場合、コントローラ4は、まず、ユーザデータと書き込み先PBAとを含む情報の整合性をチェックするための検査符号を生成し、そして、ユーザデータを、この生成した検査符号と共に、NAND型フラッシュメモリ5に書き込む。
【0057】
付加情報がPBAそのもの(PBA付加情報)である場合、PBA検査回路444が二つのPBAを比較することによって、NAND型フラッシュメモリ5から読み出されたユーザデータが正しいデータであるか否かを判定する。一方、付加情報が検査符号(検査符号付加情報)である場合、検査符号検査回路442が二つの検査符号を比較することによって、NAND型フラッシュメモリ5から読み出されたデータが正しいデータであるか否かを判定する。従って、この場合、PBA検査回路444がPBA自体を比較することを必要としないため、検査回路44は、PBA検査回路444を含んでいなくてもよい。
【0058】
誤り訂正回路45は、NAND型フラッシュメモリ5にデータが書き込まれる際に、エンコード処理を実行する。エンコード処理において、誤り訂正回路45は、NAND型フラッシュメモリ5に書き込まれるべきデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた際に、誤り訂正回路45は、デコード処理を実行する。デコード処理において、誤り訂正回路45は、NAND型フラッシュメモリ5から読み出されたデータに付加されたECCを使用して、このデータの誤り訂正を実行する。
【0059】
NANDインターフェース46は、NAND型フラッシュメモリ5を制御する回路である。NANDインターフェース46は、NAND型フラッシュメモリ5に含まれる複数のフラッシュダイに電気的に接続される。
【0060】
個々のフラッシュダイは、独立して動作可能である。このため、フラッシュダイは、並列動作可能な単位として機能する。NANDインターフェース46は、例えば、NANDコントローラ461-0、461-1、…、461-7を含む。NANDコントローラ461-0、461-1、…、461-7は、チャンネルch0、ch1、…、ch7にそれぞれ接続される。NANDコントローラ461-0、461-1、…、461-7の各々は、対応するチャンネルを介して、1つまたは複数のフラッシュダイに接続される。
図1においては、チャンネルch0、ch1、…、ch7の各々に4つのフラッシュダイが接続されている場合が例示されている。この場合、NANDコントローラ461-0は、チャンネルch0を介して、フラッシュダイ#0、#8、#16および#24に接続される。NANDコントローラ461-1は、チャンネルch1を介して、フラッシュダイ#1、#9、#17および#25に接続される。そして、NANDコントローラ461-7は、チャンネルch7を介して、フラッシュダイ#7、#15、#23および#31に接続される。フラッシュダイ#0、#1、…、#7は、コントローラ4によってバンクBNK0として扱われる。フラッシュダイ#8、#9、…、#15は、コントローラ4によってバンクBNK1として扱われる。フラッシュダイ#16、#17、…、#23は、コントローラ4によってバンクBNK2として扱われる。フラッシュダイ#24、#25、…、#31は、コントローラ4によってバンクBNK3として扱われる。バンクは、インターリーブ動作によって、複数のフラッシュダイを並列動作させる単位である。また、フラッシュダイ#0~#31の各々は、
図2に示されているように、複数のブロックBLK1~BLKx-1を含む。
【0061】
図1および
図2に示されるNAND型フラッシュメモリ5の構成においては、コントローラ4は、8チャンネルと、バンクインタリーブ動作とによって、フラッシュダイ#0~#31を並列にアクセスすることができる。このため、コントローラ4は、最大で32個のフラッシュダイに対するデータの書き込みまたは読み出しを並列に実行することができる。
【0062】
なお、フラッシュダイ#0~#31の各々は、複数のプレーンを有するマルチプレーン構成を有していてもよい。例えば、フラッシュダイ#0~#31の各々が4プレーンを含む場合、コントローラ4は、最大で128個のプレーンに対するデータの書き込みまたは読み出しを並列に実行することができる。
【0063】
複数の書き込み先ブロックの各々は、一つのブロック(物理ブロック)であってもよいし、並列動作可能な複数の物理ブロックの集合を含むスーパーブロックであってもよい。
【0064】
一つのスーパーブロックは、これに限定されないが、NAND型フラッシュメモリダイ#0~#31から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリダイ#0~#31の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリダイ#0~#31の各々が、4つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリダイ#0~#31に対応する128個のプレーンから一つずつ選択される計128個の物理ブロックを含んでいてもよい。
【0065】
図3には、32個の物理ブロック(ここでは、NAND型フラッシュメモリダイ#0の物理ブロックBLK2、NAND型フラッシュメモリダイ#1の物理ブロックBLK3、NAND型フラッシュメモリダイ#2の物理ブロックBLK7、…、NAND型フラッシュメモリダイ#24内の物理ブロックBLK4、NAND型フラッシュメモリダイ#25内の物理ブロックBLK6、…、NAND型フラッシュメモリダイ#31内の物理ブロックBLK3)を含む一つのスーパーブロック(SB)が例示されている。
【0066】
スーパーブロック(SB)は、32個の物理ブロックの各々に含まれるページの数と同数のスーパーページを含む。例えば、NAND型フラッシュメモリダイ#0の物理ブロックBLK2のPage0と、NAND型フラッシュメモリダイ#1の物理ブロックBLK3のPage0と、NAND型フラッシュメモリダイ#2の物理ブロックBLK7のPage0と、…、NAND型フラッシュメモリダイ#24内の物理ブロックBLK4のPage0と、NAND型フラッシュメモリダイ#25内の物理ブロックBLK6のPage0と、…、NAND型フラッシュメモリダイ#31内の物理ブロックBLK3のPage0は、コントローラ4によってスーパーブロック(SB)内の32個のスーパーページのうちの一つのスーパーページとして扱われてもよい。
【0067】
なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
【0068】
図1の説明に戻る。DRAMインターフェース47は、DRAM6を制御する回路である。DRAMインターフェース47は、DRAM6にデータを格納する。また、DRAMインターフェース47は、DRAM6に格納されているデータを読み出す。
【0069】
次に、DRAM6の構成について説明する。
【0070】
DRAM6は、論理物理アドレス変換テーブル(logical-to-physical address translation table:L2Pテーブル)61を記憶する記憶領域を含む。また、DRAM6は、バリッドフラグテーブル62を記憶する記憶領域と、アクティブブロックリスト63を記憶する記憶領域と、フリーブロックリスト64を記憶する記憶領域と、をさらに含む。
【0071】
L2Pテーブル61は、マッピング情報を格納するテーブルである。マッピング情報は、論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを所定の管理サイズの単位で示す情報である。論理アドレスは、SSD3にアクセスするためにホスト2によって使用されるアドレスである。論理アドレスとしては、例えば、論理ブロックアドレス(LBA)が使用される。物理アドレスは、NAND型フラッシュメモリ5内の記憶位置を示すアドレスである。物理アドレスは、例えば、フラッシュダイアドレス、ブロックアドレス、ページアドレス、ページ内のオフセットアドレス、及び、これらの全部あるいは一部の任意の組み合わせ等によって表現され得る。
【0072】
バリッドフラグテーブル62は、複数のフラグを管理するテーブルである。複数のフラグそれぞれは、SSD3における複数の物理アドレスそれぞれと1対1の関係で対応する。複数のフラグの各々は、対応する物理アドレスによって示される記憶位置に格納されているデータが有効データまたは無効データのいずれであるかを示す。例えば、第1の物理アドレスに対応する第1のフラグは、ホスト2から受信されたライトコマンドに関連付けられたデータが、第1の物理アドレスによって示される第1の記憶位置に書き込まれたことに応じて、有効データを示す第1の値に設定される。そして、第1の記憶位置に記憶されているデータの更新または削除によって第1の記憶位置に記憶されているデータが無効データになったことに応じて、第1のフラグは、無効データに対応する第2の値に設定される。ここで、第1の記憶位置に記憶されているデータの更新は、このデータの論理アドレスに対応する更新データ(新データ)がNAND型フラッシュメモリ5に書き込まれたことを意味する。また、第1の記憶位置に記憶されているデータの削除は、トリムコマンドによってこのデータが無効化されたことを意味する。
【0073】
アクティブブロックリスト63は、少なくとも有効データを保持するブロックであるアクティブブロックのリストを管理するテーブルである。
【0074】
フリーブロックリスト64は、有効データを保持していないブロックであるフリーブロックのリストを管理するテーブルである。
【0075】
次に、CPU43の機能構成を説明する。CPU43は、FTLとして機能する構成要素に加え、リード処理部431、およびライト処理部432を含む。
【0076】
リード処理部431およびライト処理部432の各々の一部または全部は、コントローラ4の専用ハードウェアによって実現されてもよい。
【0077】
リード処理部431は、ホスト2から受信されるリードコマンドそれぞれを処理することによって、読み出し処理を実行する。読み出し処理は、L2Pテーブル61を参照することによって、リードコマンドによって指定された論理アドレスを物理アドレスに変換する処理と、物理アドレスによって示されるNAND型フラッシュメモリ5内の記憶位置からデータを読み出す処理と、読み出されたデータをホスト2のメモリ22に転送する処理と、を含む。
【0078】
ライト処理部432は、ホスト2から受信されるライトコマンドそれぞれを処理することによって、書き込み処理を実行する。書き込み処理は、ホスト2のメモリ22からSRAM42あるいはDRAM6に書き込みデータをロード(転送)する処理と、SRAM42あるいはDRAM6にロードされた書き込みデータをNAND型フラッシュメモリ5内の記憶位置に書き込む処理と、L2Pテーブル61を更新して、ライトコマンドによって指定された論理アドレスに、ライトデータが書き込まれた記憶位置を示す物理アドレスをマッピングする処理と、を含む。
【0079】
ライト処理部432は、フラッシュPBA割り当て部433を含む。
【0080】
フラッシュPBA割り当て部433は、ライトコマンドによって指定されたLBAに、このライトコマンドに関連付けられたデータが書き込まれるべきNAND型フラッシュメモリ5の記憶位置を示すPBAを割り当てる。LBAに割り当てられるPBAは、更新データ(新データ)の書き込みに利用可能な記憶位置を示すPBAである。
【0081】
次に、バリッドフラグテーブル62について説明する。
図4は、実施形態に係るメモリシステムにおいて使用されるバリッドフラグテーブル62の構成例を示す図である。
【0082】
バリッドフラグテーブル62は、複数のバリッドフラグテーブル領域62-0、…、62-nを含む。複数のバリッドフラグテーブル領域62-1、…、62-nの各々は、複数のブロックBLK1、…、BLKnのうちの一つのブロックBLKに対応する。
【0083】
例えば、バリッドフラグテーブル領域62-1は、ブロックBLK1に対応する。バリッドフラグテーブル領域62-1は、複数のフラグを含む。複数のフラグは、ビットマップデータとも称される。バリッドフラグテーブル領域62-1に格納されているビットマップデータは、ブロックBLK1に含まれる複数の記憶位置をそれぞれ示す複数の物理アドレス(PBA)の数と同数のビット(つまりフラグ)を含む。複数のフラグの各々は、このフラグに対応する物理アドレスによって示される記憶位置に記憶されているデータが有効であるか否かを示す。有効データが記憶されている記憶位置を示す物理アドレスに対応するフラグは、第1の値(例えば、“1”)に設定される。また、無効データが記憶されている記憶位置を示す物理アドレスに対応するフラグは、第2の値(例えば、“0”)に設定される。以下では、第1の値が“1”で、第2の値が“0”である場合を例として説明する。
【0084】
ブロックBLK1のページP0は、例えば、4つのPBA(PBAx、PBA(x+1)、PBA(x+2)、PBA(x+3))によってそれぞれ示される4つの記憶位置を含む。これら4つの記憶位置には、データD0、データD1、データD2、およびデータD3が記憶されている。データD0、データD2、およびデータD3の各々が有効データであり、且つデータD1が無効データである場合、4つのPBA(PBAx、PBA(x+1)、PBA(x+2)、PBA(x+3))に対応する4つのフラグ、つまり4ビットのビットマップデータは、“1011”を示す。
【0085】
ブロックBLK1のページP1は、4つのPBA(PBA(x+4)、PBA(x+5)、PBA(x+6)、PBA(x+7))によってそれぞれ示される4つの記憶位置を含む。これら4つの記憶位置には、データD4、データD5、データD6、およびデータD7が記憶されている。データD4、データD5、データD6、およびデータD7の各々が有効データである場合、4つのPBA(PBA(x+4)、PBA(x+5)、PBA(x+6)、PBA(x+7))に対応する4つのフラグ、つまり4ビットのビットマップデータは、“1111”を示す。
【0086】
ブロックBLK1のページP2は、4つのPBA(PBA(x+8)、PBA(x+9)、PBA(x+10)、PBA(x+11))によってそれぞれ示される4つの記憶位置を含む。これら4つの記憶位置には、データD8、データD9、データD10、およびデータD11が記憶されている。データD8およびデータD9の各々が有効データであり、且つデータD10およびデータD11の各々が無効データである場合、4つのPBA(PBA(x+8)、PBA(x+9)、PBA(x+10)、PBA(x+11))に対応する4つのフラグ、つまり4ビットのビットマップデータは、“1100”を示す。
【0087】
図5は、実施形態に係るメモリシステムにおける書き込みデータおよび読み出しデータの制御に関する構成例を示す図である。
【0088】
メモリシステム3は、NAND型フラッシュメモリ5へのデータ書き込み動作において、フラッシュPBA割り当て部433から出力された書き込み先PBAによって示される記憶位置に、データを書き込む。このデータは、誤り訂正回路45によって出力されたデータ、つまり、NAND型フラッシュメモリ5に書き込まれるべきデータと、ECCと、を含む符号語(ECCフレーム)である。NAND型フラッシュメモリ5に書き込まれるべきデータは、例えば、ユーザデータ、LBA、および検査符号を含む。なお、NAND型フラッシュメモリ5に書き込まれるべきデータには、PBAがさらに含まれていてもよい。ユーザデータは、ホスト2から受信されたライトコマンドに関連付けられたデータである。LBAは、ユーザデータが書き込まれるべき書き込み先LBA、つまりライトコマンドによって指定されたLBA(要求LBA)である。PBAは、ライトコマンドで指定された要求LBAに従ってフラッシュPBA割り当て部433から出力された書き込み先PBAである。
【0089】
メモリシステム3は、NAND型フラッシュメモリ5からのデータ読み出し動作において、L2Pテーブル61に記録された読み出し対象PBAによって示される記憶位置に格納されているデータ(例えば、ユーザデータ、LBA、検査符号、ECC)を読み出す。読み出されたデータは、誤り訂正回路45に送られる。
【0090】
検査回路44は、SSD3がホスト2からライトコマンドを受信した場合、例えば、ライトコマンドに関連付けられたデータ、ライトコマンドによって指定された要求LBA、書き込み先PBA、および有効データを示す値を有するフラグを使用して、検査符号(例えばCRC)を生成する。そして、検査回路44は、ライトコマンドに関連付けられたデータと、要求LBAと、生成されたCRCとを誤り訂正回路45に出力する。
【0091】
検査回路41は検査符号生成回路441において、SSD3がホスト2からリードコマンドを受信した場合、例えば、NAND型フラッシュメモリ5から読み出されたデータ、リードコマンドによって指定された要求LBA(読み出し対象LBA)、L2Pテーブル61から取得される読み出し対象PBA、および読み出し対象PBAに対応するフラグを使用して、検査符号を生成する。ここで、読み出し対象PBAは、読み出し対象LBAにリードコマンド実行時にマッピングされているPBAである。そして、検査回路44は、検査符号生成回路441において生成された検査符号と、NAND型フラッシュメモリ5から読み出された検査符号と、を比較する。検査回路44は、二つの検査符号の比較結果が、互いに一致した場合、読み出されたデータ(ユーザデータ)が正しいデータであると判定する。読み出されたデータはホストI/F41を介してホスト2に送信される。一方、検査回路44は、二つの検査符号の比較結果が互いに一致しなかった場合、読み出されたデータが間違ったデータであると判定する。この場合、エラーがホストI/F41を介してホスト2に通知される。
【0092】
誤り訂正回路45は、NAND型フラッシュメモリ5に書き込まれるべきデータのエンコード、あるいは読み出しデータのデコードを実行する。検査回路44からデータ、LBA、および検査符号を受信した誤り訂正回路45は、データ、LBA、および検査符号を使用して、ECCを生成する。そして、誤り訂正回路45は、データ、LBA、検査符号、およびECCをNAND型フラッシュメモリ5に出力する。
【0093】
NAND型フラッシュメモリ5から読み出されるデータ、LBA、検査符号、およびECCを受信した誤り訂正回路45は、ECCを使用して、誤り訂正を実行する。誤り訂正が完了すると、誤り訂正回路45は、データ、LBA、および検査符号を検査回路44に出力する。
【0094】
L2Pテーブル61は、各LBAと、各LBAに対応する各PBAとの間のマッピングを管理する。SSD3がホスト2からライトコマンド、またはトリムコマンドを受信した場合、コントローラ4は、L2Pテーブル61から、受信されたコマンドによって指定された要求LBAに対応するPBA(最終PBAとも称する)を取得する。最終PBAは、ライトコマンドまたはトリムコマンドを受信した時点で、ライトコマンドまたはトリムコマンドによって指定されたLBAにマッピングされているPBAである。取得された最終PBAは、バリッドフラグテーブル62に出力される。SSD3がホスト2からリードコマンドを受信した場合、コントローラ4は、L2Pテーブル61から、受信されたリードコマンドによって指定された要求LBAに対応するPBA(読み出し対象PBA)を取得する。読み出し対象PBAは、NAND型フラッシュメモリ5とバリッドフラグテーブル62に出力される。また、書き込み処理、あるいはGC処理においては、フラッシュPBA割り当て部433から出力される書き込み先PBAがライトコマンドによって指定されたLBAにマッピングされるように、L2Pテーブル61が更新される。
【0095】
バリッドフラグテーブル62は、異なるPBAにそれぞれ対応する複数のフラグを管理する。SSD3がホスト2からライトコマンドを受信した場合、L2Pテーブル61に記録されている最終PBAに対応するバリッドフラグテーブル62のフラグは、第2の値に設定される。そして、フラッシュPBA割り当て部433から出力された書き込み先PBAに対応するフラグは、第1の値に設定される。また、SSD3がホスト2からリードコマンドを受信した場合、コントローラ4は、L2Pテーブル61に記録されている読み出し対象PBAに対応するフラグをバリッドフラグテーブル62から取得し、取得したフラグを検査回路44に出力する。またさらに、SSD3がGC処理を実行する場合、コントローラ4は、GCコピー元ブロックの複数のPBAから、第1の値に設定されているフラグにそれぞれ対応するPBAを選択し、選択したPBAの各々を、GCコピー元PBAとしてフラッシュPBA割り当て部433に出力する。フラッシュPBA割り当て部433は、GCコピー元PBA毎に、GCコピー先PBAを書き込み先PBAとして決定する。GCコピー元PBAによって示される記憶位置に格納されている有効データが、GCコピー先PBAによって示される記憶位置にコピーされると、GCコピー元PBAに対応するフラグは、第2の値に設定され、GCコピー先PBAに対応するフラグは、第1の値に設定される。
【0096】
次に、
図5に示したメモリシステムの構成例における各種処理について、以下、説明する。より具体的には、メモリシステムの書込み処理、無効化処理、読み出し処理、及び、ガベージコレクション処理についてそれぞれ、
図6、
図7、
図8、及び
図9を用いて順番に説明する。
図6は、メモリシステムの書き込み処理の流れを説明するための図である。SSD3のコントローラ4は、ホスト2からライトコマンドを受信したことに応じて、書き込み処理を開始する。
ここでは、一例として、第2の方法(検査符号判定方法)により検査を行い、且つ付加情報が検査符号(検査符号付加情報)である場合について、以下説明する。
【0097】
(1)ホスト2から受信されたライトコマンドによって指定された書き込み先LBAは、L2Pテーブル61、フラッシュPBA割り当て部433、および検査回路44に出力される。
【0098】
(2)コントローラ4は、書き込み先LBAにライトコマンド実行時にマッピングされているPBAを、最終PBAとして、L2Pテーブル61から取得する。コントローラ4は、最終PBAに対応するバリッドフラグテーブル62内のフラグを、第2の値に設定する。
【0099】
(3)コントローラ4のフラッシュPBA割り当て部433は、受信されたライトコマンドに関連付けられたデータが書き込まれるべき記憶位置を決定し、この記憶位置を示す書き込み先PBAを、書き込み先LBAに割り当てる。フラッシュPBA割り当て部433は、書き込み先PBAを、NAND型フラッシュメモリ5、L2Pテーブル61、およびバリッドフラグテーブル62に出力する。
【0100】
(4)さらに、フラッシュPBA割り当て部433は、書き込み先PBAを検査回路44に出力する。
【0101】
(5)検査回路44は、受信されたライトコマンドに関連付けられたデータと、第1の値を有するフラグと、書き込み先LBAと、書き込み先PBAとを使用して、検査符号を生成する。このフラグは、特定の記憶位置に対応するフラグである必要はなく、単に第1の値を有するビットである。生成される検査符号は、例えば、CRCである。検査回路44は、データと、生成された検査符号とを、誤り訂正回路45に出力する。
【0102】
(6)誤り訂正回路45は、データと、検査符号とを使用して、エラー訂正コード(ECC)を生成する。そして、誤り訂正回路45は、データと、検査符号と、ECCとを、NAND型フラッシュメモリ5に書き込まれるべきデータ(ECCフレーム)として、NAND型フラッシュメモリ5に出力する。NAND型フラッシュメモリ5は、書き込み先PBAによって示される記憶位置に、ECCフレームを書き込む。
【0103】
(7)そして、コントローラ4は、書き込み先LBAに書き込み先PBAがマッピングされるように、L2Pテーブル61のマッピング情報を更新する。また、コントローラ4は、書き込み先PBAに対応するバリッドフラグテーブル62内のフラグを、第1の値に設定する。
【0104】
図7は、メモリシステムの無効化処理に関する構成例の部分に着目し、無効化処理の流れを説明するための図である。SSD3のコントローラ4は、ホスト2からトリムコマンドを受信したことに応じて、無効化処理を開始する。
【0105】
(1)ホスト2から受信されたトリムコマンドによって指定された、無効化対象データに対応するLBAは、L2Pテーブル61に出力される。
【0106】
(2)コントローラ4は、無効化対象データに対応するLBAにトリムコマンド実行時にマッピングされているPBAを、最終PBAとして、L2Pテーブル61から取得する。コントローラ4は、最終PBAに対応するバリッドフラグテーブル62内のフラグを、第2の値に設定する。
図8は、メモリシステムの読み出し処理に関する構成例の部分に着目し、読み出し処理の流れを説明するための図である。SSD3のコントローラ4は、ホスト2からリードコマンドを受信したことに応じて、読み出し処理を実行する。
【0107】
(1)リードコマンドによって指定された読み出し対象LBAは、L2Pテーブル61、および検査回路44に出力される。
【0108】
(2)コントローラ4は、読み出し対象LBAにリードコマンド実行時にマッピングされているPBAを、読み出し対象PBAとして、L2Pテーブル61から取得する。コントローラ4は、取得した読み出し対象PBAを、検査回路44、およびバリッドフラグテーブル62に出力する。
【0109】
(3)コントローラ4は、バリッドフラグテーブル62から、読み出し対象PBAに対応するフラグを取得する。コントローラ4は、取得したフラグを検査回路44に出力する。
【0110】
(4)コントローラ4は、読み出し対象PBAをNAND型フラッシュメモリ5に出力して、NAND型フラッシュメモリ5にデータの読み出しを指示する。
【0111】
(5)NAND型フラッシュメモリ5は、読み出し対象PBAによって示される記憶位置に記憶されているデータ(ECCフレーム)を読み出して、誤り訂正回路45に出力する。
【0112】
(6)誤り訂正回路45は、ECCフレームをデコードして、誤りが訂正されたデータ(ユーザデータと検査符号)を生成する。誤り訂正回路45は、生成したデータと検査符号とを検査回路44に出力する。
【0113】
(7)検査回路44は、検査符号生成回路441において、誤り訂正回路45から出力されたユーザデータと、バリッドフラグテーブル62から取得したフラグと、読み出し対象LBAと、読み出し対象PBAとを使用して、検査符号を生成する。検査回路44は、誤り訂正回路45から出力された検査符号と、生成した検査符号とを比較する。二つの検査符号が互いに一致した場合、検査回路44は、正しいユーザデータが読み出されたと判定し、読み出されたユーザデータをホスト2に送信する。二つの検査符号が互いに一致しなかった場合、検査回路44は、間違ったデータが読み出されたと判定し、エラー処理を実行する。エラー処理では、コントローラ4は、読み出されたユーザデータをホスト2に送信せずに、例えば、エラーをホスト2に通知する。
【0114】
図9は、メモリシステムのガベージコレクション処理の流れを説明するための図である。SSD3のコントローラ4は、SSD3におけるフリーブロックの数が閾値を下回ったことに応じて、GC処理を開始する。GC処理が開始されると、アクティブブロックリスト63によって管理されているブロックの集合から、任意のブロックがコピー元ブロックとして選択される。選択されるブロックは、例えば、格納しているデータのうちの有効データの割合が低いブロックである。
【0115】
(1)バリッドフラグテーブル62は、コピー元ブロックに含まれる複数の記憶位置に対応する複数のPBAのうち、対応するフラグが第1の値を示しているPBAをGCコピー元PBAとして選択する。バリッドフラグテーブル62は、選択したPBAを、GCコピー元PBAとしてフラッシュPBA割り当て部433に出力する。
【0116】
(2)コントローラ4は、GCコピー元PBAを読み出し対象PBAとしてNAND型フラッシュメモリ5に出力して、NAND型フラッシュメモリ5にデータの読み出しを指示する。
【0117】
(3)NAND型フラッシュメモリ5は、読み出し対象PBAからデータ(ECCフレーム)を読み出して、誤り訂正回路45に出力する。
【0118】
(4)誤り訂正回路45は、ECCフレームをデコードして、誤りが訂正されたデータ(ユーザデータと検査符号)を生成する。誤り訂正回路45は、生成したデータと検査符号とを検査回路44に出力する。
【0119】
(5)フラッシュPBA割り当て部433は、GCコピー元PBAから読み出されたデータが書き込まれるべき記憶位置を示す物理アドレスを、GCコピー先PBAとして割り当てる。フラッシュPBA割り当て部433は、割り当てたGCコピー先PBAをNAND型フラッシュメモリ5に出力する。
【0120】
(6)フラッシュPBA割り当て部433は、割り当てたGCコピー先PBAを検査回路44に出力する。
【0121】
(7)検査回路44は、NAND型フラッシュメモリ5のGCコピー元PBAから読み出されたデータ(GCコピー対象データ)と、第1の値を有するフラグと、GC対象コピー対象LBAと、GCコピー先PBAとを使用して、検査符号生成回路441において検査符号を生成する。検査回路44は、GCコピー対象データと、生成した検査符号とを誤り訂正回路45に出力する。
【0122】
(8)誤り訂正回路45は、GCコピー対象データと、検査符号とを使用して、誤り訂正コード(ECC)を生成する。そして、誤り訂正回路45は、GCコピー対象データと、検査符号と、ECCとを書き込みデータ(ECCフレーム)としてNAND型フラッシュメモリ5に出力する。NAND型フラッシュメモリ5は、書き込みデータ(ECCフレーム)を、フラッシュPBA割り当て部433によって出力されたGCコピー先PBAによって示される記憶位置に書き込む。
【0123】
(9)そして、コントローラ4は、GCコピー対象データに対応するLBAにコピー動作実行時にマッピングされているPBAを、最終PBAとして、L2Pテーブル61から取得する。コントローラ4は、GCコピー対象データに対応するLBAにGCコピー先PBAがマッピングされるように、L2Pテーブル61のマッピング情報を更新する。そして、コントローラ4は、GCコピー先PBAに対応するバリッドフラグテーブル62内のフラグを、第1の値に設定する。
【0124】
(10)コントローラ4は、取得した最終PBAに対応するバリッドフラグテーブル62内のフラグを、第2の値に設定する。
【0125】
以上のようにして、メモリシステムの書込み処理、無効化処理、読み出し処理、及び、ガベージコレクション処理が行われる。
【0126】
次に、本実施形態のメモリシステムにおける各種の検査方法について、以下、具体的な例を用いて説明する。
(第1の方法(論物マップフラグ判定方法(データ・PBAand/orLBA・フラグ))、及び、PBA付加情報による検査)
まず、データと共にNAND型フラッシュメモリ5に記憶されている物理アドレスと、バリッドフラグテーブル62で管理されているバリッドフラグの値とを使用して読み出しデータを検査する場合について説明する。つまり、フラグについて第1の方法(論物マップフラグ判定方法)を使用して検査し、且つ付加情報がPBAそのもの(PBA付加情報)であるケースについて説明する。
【0127】
まず、書き込みデータついて説明する。
図10は、実施形態に係るメモリシステムの書き込みデータの第1の例を示す図である。
【0128】
書き込み関連データは、NAND型フラッシュメモリ5に書き込まれるべきデータに関連し、書き込み処理で使用されるデータである。書き込み関連データは、例えば、ユーザデータと、LBAと、PBAとを含む。ユーザデータは、ホスト2から受信されたライトコマンドに関連付けられたデータである。LBAは、このライトコマンドによって指定された要求LBA(書き込み先LBA)である。PBAは、フラッシュPBA割り当て部433によって書き込み先LBAに割り当てられた書き込み先PBAである。なお、書き込み関連データは、ユーザデータとPBAとを含んでいれば十分であり、LBAを必ずしも含んでいなくてもよい。
【0129】
検査符号生成回路441は、少なくともユーザデータを使用して、検査符号を生成する。なお、検査符号生成回路441は、ユーザデータに加えて、LBAまたはPBAのいずれか一方、またはLBAおよびPBAの両方を使用して検査符号を生成してもよい。
【0130】
誤り訂正回路45は、ユーザデータと、LBAと、PBAと、検査符号とを含むデータセットを符号化して、ECCフレームを生成する。そして、ユーザデータと、LBAと、PBAと、検査符号と、ECCとを含むECCフレームが、NAND型フラッシュメモリ5の同一ページに書き込まれる。
【0131】
次いで、
図10で説明された書き込みデータがNAND型フラッシュメモリ5から読み出された場合について説明する。
図11は、実施形態に係るメモリシステムの読み出しデータの第1の例を示す図である。
【0132】
NAND型フラッシュメモリ5から読み出されたデータは、ユーザデータと、LBAと、PBAと、検査符号と、ECCとを含む。誤り訂正回路45は、デコード処理を実行することによって、読み出されたデータに対する誤り訂正を実行する。
【0133】
誤り訂正が完了すると、誤り訂正回路45は、ユーザデータと、LBAと、PBAと、検査符号とを出力する。
【0134】
フラグ検査回路443は、リードコマンドによって指定されたLBAに読み出し実行時にマッピングされているPBAに対応するフラグの値が、第1の値に維持し続けられているか否かを検査する。フラグが第1の値である場合、フラグ検査回路443は、正しいデータが読み出されたと判定する。フラグが第2の値である場合、フラグ検査回路443は、L2Pテーブル61のマッピング情報の一部の破損によって間違ったデータが読み出されたと判定する。
【0135】
PBA検査回路444は、リードコマンドによって指定されたLBAに読み出し実行時にマッピングされているPBAが、誤り訂正回路45によって出力されたPBAと一致しているか否かを検査する。二つのPBAが一致している場合、PBA検査回路444は、正しいデータが読み出されたと判定する。二つのPBAが一致していない場合、PBA検査回路444は、NAND型フラッシュメモリ5のアドレスデコーダの誤動作によって間違ったユーザデータが読み出されたと判定する。
【0136】
LBA検査回路445は、ホスト2から受信されたリードコマンドによって指定されたLBAが、誤り訂正回路45によって出力されたLBAと一致しているか否かを検査する。二つのLBAが一致している場合、LBA検査回路445は、正しいデータが読み出されたと判定する。二つのLBAが一致していない場合、LBA検査回路445は、L2Pテーブル61のマッピング情報の一部の破損によって間違ったデータが読み出されたと判定する。
【0137】
検査符号生成回路441は、誤り訂正回路45によって出力されたユーザデータを少なくとも使用して、検査符号を生成する。例えば、このデータの書き込みの際に、ユーザデータに加えLBAまたはPBAのいずれか一方または両方を使用して検査符号が生成されていた場合を想定する。この場合、検査符号生成回路441は、誤り訂正回路45によって出力されたユーザデータに加え、リードコマンドによって指定されたLBAまたはこのLBAに読み出し実行時にマッピングされているPBAの一方または両方を使用して、検査符号を生成する。
【0138】
検査符号検査回路442は、検査符号生成回路441によって生成された検査符号が、誤り訂正回路45によって出力された検査符号と一致しているか否かを検査する。二つの検査符号が互いに一致していない場合、検査符号検査回路442は、間違ったデータが読み出されたと判定する。二つの検査符号が一致している場合、検査符号検査回路442は、正しいデータが読み出されたと判定する。
【0139】
検査符号検査回路442、フラグ検査回路443、PBA検査回路444、およびLBA検査回路445のすべてが、正しいデータが読み出されたと判定した場合、コントローラ4は、読み出したデータをホスト2に送信する。
【0140】
検査符号検査回路442、フラグ検査回路443、PBA検査回路444、およびLBA検査回路445のうちのいずれかが、間違ったデータが読み出されたと判定した場合、コントローラ4は、エラー処理を実行する。例えば、コントローラ4は、エラー処理として、エラーをホスト2に通知する。この場合、コントローラ4は、リードコマンドの完了を示す完了応答として、リードコマンドの処理が失敗したことを示す応答をホスト2に送信してもよい。
【0141】
また、PBA検査回路444のみが間違ったユーザデータが読み出されたと判定した場合、コントローラ4は、エラー処理として、読み出し対象PBAによって示されるNAND型フラッシュメモリ5内の記憶位置からデータを読み出す処理を再び実行してもよい。これは、PBA検査回路444のみがエラーを検知する原因として、NAND型フラッシュメモリ5内のアドレスデコーダの誤動作によって、読み出し対象PBAが示す記憶位置とは異なる記憶位置からデータが読み出される場合が想定されるためである。
【0142】
次いで、書き込み処理の手順について説明する。
図12は、実施形態に係るメモリシステムの書き込み処理の手順の第1の例を示すフローチャートである。
コントローラ4は、SSD3がホスト2からライトコマンドを受信したことに応じて(ステップS1001)、書き込み処理を開始する。
【0143】
コントローラ4は、S1001で受信されたライトコマンドによって指定された書き込み先LBAに古いデータが関連付けられているか否かを判定する(ステップS1002)。コントローラ4は、L2Pテーブル61から、書き込み先LBAにPBAがマッピングされている場合に、書き込み先LBAに古いデータが関連付けられていると判定する。
【0144】
書き込み先LBAに古いデータが関連付けられている場合(S1002でYes)、コントローラ4は、L2Pテーブル61から、書き込み先LBAにマッピングされている最終PBAを取得する(ステップS1003)。
【0145】
コントローラ4は、最終PBAに対応するバリッドフラグテーブル62内のフラグをリセットする(ステップS1004)。ステップS1004では、バリッドフラグテーブル62において、最終PBAに対応するフラグは、第2の値に設定される。
【0146】
書き込み先LBAに古いデータが関連付けられていない場合(S1002でNo)、コントローラ4は、S1003、およびS1004の処理をスキップする。
【0147】
コントローラ4は、書き込み先LBAに新しいPBAを割り当てる(ステップS1005)。割り当てられたPBAは、ライトコマンドに関連付けられたデータが書き込まれるべき記憶位置を示す書き込み先PBAである。
【0148】
コントローラ4は、検査符号生成回路441において、S1001で受信されたライトコマンドに関連付けられたデータと、書き込み先LBAとを使用して、検査符号を生成する(ステップS1006)。この検査符号は、データと書き込み先LBAとを含む情報の整合性をチェックするための符号である。
【0149】
コントローラ4は、データと、書き込み先LBAと、書き込み先PBAと、検査符号とを符号化して、符号語(ECCフレーム)を生成する(ステップS1007)。
【0150】
コントローラ4は、データと、書き込み先LBAと、書き込み先PBAと、検査符号と、ECCとを、書き込み先PBAによって示されるNAND型フラッシュメモリ5内の記憶位置に書き込む(ステップS1008)。
【0151】
コントローラ4は、バリッドフラグテーブル62における、書き込み先PBAに対応するフラグをセットし(ステップS1009)、書き込み処理を終了する。ステップS1009では、コントローラ4は、書き込み先PBAに対応するフラグを第1の値に設定する。
【0152】
なお、
図12で示した書き込み処理では、データと、書き込み先LBAと、書き込み先PBAと、検査符号とをNAND型フラッシュメモリ5に書き込む場合を説明した。しかしながら、コントローラ4は、書き込み先LBAをNAND型フラッシュメモリ5に書き込まずに、データ、書き込み先PBA、および検査符号だけをNAND型フラッシュメモリ5に書き込んでもよい。これは、検査符号が、データと書き込み先LBAとを使用して生成されているためである。
【0153】
次いで、読み出し処理の手順について説明する。
図13は、実施形態に係るメモリシステムの読み出し処理の手順の第1の例を示すフローチャートである。
【0154】
コントローラ4は、SSD3がホスト2からリードコマンドを受信したことに応じて(ステップS1101)、読み出し処理を開始する。
【0155】
コントローラ4は、S1101で受信したリードコマンドによって指定されたLBAに対応するPBAをL2Pテーブル61から取得する(ステップS1102)。
【0156】
コントローラ4は、S1102で取得したPBAに対応するフラグをバリッドフラグテーブル62から取得する(ステップS1103)。
【0157】
コントローラ4は、S1102で取得したPBAによって示される記憶位置に記憶されている読み出し対象データ(ここでは、ユーザデータ、LBA、PBA、および検査符号)を、NAND型フラッシュメモリ5から読み出す(ステップS1104)。
【0158】
コントローラ4は、S1104で読み出した読み出し対象データに含まれるユーザデータと、S1101で受信したリードコマンドによって指定されたLBAとを使用して、検査符号生成回路441において検査符号を生成する(ステップS1105)。
【0159】
コントローラ4は、S1105で生成した検査符号が、S1104で読み出された読み出し対象データに含まれている検査符号と一致するか否かを判定する(ステップS1106)。
【0160】
コントローラ4は、S1102でL2Pテーブル61から取得したPBAが、S1104で読み出された読み出し対象データに含まれているPBAと一致するか否かを判定する(ステップS1107)。
【0161】
コントローラ4は、S1103で取得したフラグが有効を示す値にセットされているか否かを判定する(ステップS1108)。
【0162】
S1106、S1107、およびS1108の判定は、任意の順序で実行され得る。
【0163】
S1105で生成した検査符号がS1104で読み出された読み出し対象データに含まれている検査符号と一致し(S1106でYes)、S1102でL2Pテーブル61から取得したPBAが、S1104で読み出された読み出し対象データに含まれているPBAと一致し(S1107でYes)、且つS1103で取得したフラグが有効を示す値にセットされている場合(S1108でYes)、コントローラ4は、S1104で読み出した読み出し対象データに含まれるデータ(ユーザデータ)をホスト2に送信し(ステップS1109)、読み出し処理を終了する。
【0164】
S1105で生成した検査符号がS1104で読み出された読み出し対象データに含まれている検査符号と一致しない(S1106でNo)、S1102でL2Pテーブル61から取得したPBAがS1104で読み出された読み出し対象データに含まれているPBAと一致しない(S1107でNo)、あるいはS1103で取得したフラグが無効を示す値にセットされている場合(S1108でNo)、コントローラ4は、エラー処理を実行し(ステップS1110)、読み出し処理を終了する。
【0165】
以上の説明では、フラグ、PBA、および検査符号の全てを検査する場合を説明したが、第1の方法(論物マップフラグ判定方法)およびPBA(PBA付加情報)を使用した検査では、検査符号を使用した検査(S1106)は、省略されてもよい。つまり、第1の方法(論物マップフラグ判定方法)およびPBA(PBA付加情報)を使用した検査では、コントローラ4は、S1103で取得したフラグが有効を示す値にセットされており、且つ、NAND型フラッシュメモリ5から読み出したPBAがL2Pテーブル61から取得した最新のPBAと一致する、という条件を満たすか否かに基づいて、NAND型フラッシュメモリ5から読み出したデータをホスト2に送信するか否かを決定する。
【0166】
(第2の方法(検査符号判定方法(データ・フラグ・PBA))、及び、検査符号付加情報による検査)
次に、データとフラグと物理アドレスとを少なくとも使用して検査符号を生成し、この検査符号を使用して読み出しデータを検査する場合について説明する。つまり、フラグについて第2の方法(検査符号判定方法)を使用して検査し、且つ付加情報が検査符号(検査符号付加情報)であるケースについて説明する。
【0167】
まず、書き込みデータついて説明する。
図14は、実施形態に係るメモリシステムの書き込みデータの第2の例を示す図である。
【0168】
書き込み関連データは、ユーザデータと、LBAと、PBAと、フラグとを含む。ユーザデータは、ホスト2から受信されたライトコマンドに関連付けられたデータである。LBAは、このライトコマンドによって指定された要求LBA(書き込み先LBA)である。PBAは、フラッシュPBA割り当て部433によって書き込み先LBAに割り当てられた書き込み先PBAである。フラグは、有効データを示す第1の値を有するフラグ、つまり、例えば“1”を示す1ビットの情報である。
【0169】
ここで、検査符号生成回路441は、少なくともユーザデータ、PBA、およびフラグを使用して、検査符号を生成する。また、検査符号生成回路441は、ユーザデータ、PBA、およびフラグに加えて、LBAを使用して検査符号を生成してもよい。
【0170】
そして、誤り訂正回路45は、ユーザデータと、LBAと、検査符号とを含むデータセットを符号化して、ECCフレームを生成する。そして、ユーザデータと、LBAと、検査符号と、ECCとを含むECCフレームが、NAND型フラッシュメモリ5の同一ページに書き込まれる。
【0171】
次いで、
図14で説明された書き込みデータがNAND型フラッシュメモリ5から読み出された場合について説明する。
図15は、実施形態に係るメモリシステムの読み出しデータの第2の例を示す図である。
【0172】
NAND型フラッシュメモリ5から読み出されたデータは、ユーザデータと、LBAと、検査符号と、ECCとを含む。誤り訂正回路45は、デコード処理を実行することによって、読み出されたデータに対する誤り訂正を実行する。
【0173】
誤り訂正が完了すると、誤り訂正回路45は、ユーザデータと、LBAと、検査符号とを出力する。
【0174】
検査符号生成回路441は、誤り訂正回路45によって出力されたユーザデータと、L2Pテーブル61において読み出し対象LBAに対応付けられているPBAと、バリッドフラグテーブル62においてこのPBAに対応付けられているフラグとを使用して、検査符号を生成する。また、このデータの書き込みの際にユーザデータ、PBA、およびフラグの他にLBAを使用して検査符号が生成されていた場合には、検査符号生成回路441は、ホスト2から受信されたリードコマンドによって指定された読み出し対象LBAをさらに使用して、検査符号を生成する。
【0175】
検査符号検査回路442は、検査符号生成回路441によって生成された検査符号が、誤り訂正回路45によって出力された検査符号と一致しているか否かを検査する。二つの検査符号が互いに一致していない場合、検査符号検査回路442は、間違ったユーザデータが読み出されたと判定する。二つの検査符号が一致している場合、検査符号検査回路442は、正しいユーザデータが読み出されたと判定する。
【0176】
検査符号検査回路442が、正しいユーザデータが読み出されたと判定した場合、コントローラ4は、読み出したユーザデータをホスト2に送信する。
【0177】
検査符号検査回路442が、間違ったユーザデータが読み出されたと判定した場合、コントローラ4は、エラー処理を実行する。例えば、コントローラ4は、エラー処理として、エラーをホスト2に通知する。
【0178】
次いで、書き込み処理の手順について説明する。
図16は、実施形態に係るメモリシステムの書き込み処理の手順の第1の例を示すフローチャートである。
【0179】
コントローラ4は、SSD3がホスト2からライトコマンドを受信したことに応じて(ステップS1201)、書き込み処理を開始する。
【0180】
コントローラ4は、S1201で受信したライトコマンドによって指定された書き込み先LBAに古いデータが関連付けられているか否かを判定する(ステップS1202)。コントローラ4は、L2Pテーブル61において、書き込み先LBAにPBAがマッピングされている場合に、書き込み先LBAに古いデータが関連付けられていると判定する。
【0181】
書き込み先LBAに古いデータが関連付けられている場合(S1202でYes)、コントローラ4は、L2Pテーブル61から、書き込み先LBAにマッピングされている最終PBAを取得する(ステップS1203)。
【0182】
コントローラ4は、最終PBAに対応するバリッドフラグテーブル62内のフラグをリセットする(ステップS1204)。ステップS1204では、バリッドフラグテーブル62において、最終PBAに対応するフラグは、第2の値に設定される。
【0183】
書き込み先LBAに古いデータが関連付けられていない場合(S1202でNo)、コントローラ4は、S1003、およびS1004の処理をスキップする。
【0184】
コントローラ4は、書き込み先LBAに新しいPBAを割り当てる(ステップS1205)。割り当てられたPBAは、ライトコマンドに関連付けられたデータが書き込まれるべき記憶位置を示す書き込み先PBAである。
【0185】
コントローラ4は、S1201で受信されたライトコマンドに関連付けられたデータと、書き込み先LBAと、S1205で割り当てられたPBAと、有効を示す値にセットされたフラグとを使用して、検査符号生成回路441において検査符号を生成する(ステップS1206)。この検査符号は、データと、書き込み先LBAと、PBAと、フラグとを含む情報の整合性をチェックするための符号である。
【0186】
コントローラ4は、データと、書き込み先LBAと、検査符号とを符号化して、符号語(ECCフレーム)を生成する(ステップS1207)。
【0187】
コントローラ4は、データと、書き込み先LBAと、検査符号と、ECCとを、書き込み先PBAによって示されるNAND型フラッシュメモリ5内の記憶位置に書き込む(ステップS1208)。
【0188】
コントローラ4は、バリッドフラグテーブル62における、書き込み先PBAに対応するフラグをセットし(ステップS1209)、書き込み処理を終了する。ステップS1209では、コントローラ4は、書き込み先PBAに対応するフラグを第1の値に設定する。
【0189】
なお、
図16で示した書き込み処理では、データと、書き込み先LBAと、検査符号とをNAND型フラッシュメモリ5に書き込む場合を説明したが、書き込み先LBAをNAND型フラッシュメモリ5に書き込まずに、データおよび検査符号だけをNAND型フラッシュメモリ5に書き込んでもよい。
【0190】
次いで、読み出し処理の手順について説明する。
図17は、実施形態に係るメモリシステムの読み出し処理の手順の第2の例を示すフローチャートである。
【0191】
コントローラ4は、SSD3がホスト2からリードコマンドを受信したことに応じて(ステップS1301)、読み出し処理を開始する。
【0192】
コントローラ4は、S1301で受信したリードコマンドによって指定されたLBAに対応するPBAをL2Pテーブル61から取得する(ステップS1302)。
【0193】
コントローラ4は、S1302で取得したPBAに対応するフラグをバリッドフラグテーブル62から取得する(ステップS1303)。
【0194】
コントローラ4は、S1302で取得したPBAによって示される記憶位置に記憶されている読み出し対象データ(ここでは、データ、LBA、および検査符号)を、NAND型フラッシュメモリ5から読み出す(ステップS1304)。
【0195】
コントローラ4は、S1304で読み出した読み出し対象データに含まれるデータと、S1301で受信したリードコマンドによって指定されたLBAと、S1302で取得したPBAと、S1303で取得したフラグとを使用して、検査符号生成回路441において検査符号を生成する(ステップS1305)。
【0196】
コントローラ4は、S1305で生成した検査符号が、S1304で読み出された読み出し対象データに含まれている検査符号と一致するか否かを判定する(ステップS1306)。
【0197】
S1305で生成した検査符号が、S1304で読み出された読み出し対象データに含まれている検査符号と一致する場合(S1306でYes)、コントローラ4は、S1304で読み出した読み出し対象データに含まれるデータ(ユーザデータ)をホスト2に送信し(ステップS1307)、読み出し処理を終了する。
【0198】
S1305で生成した検査符号が、S1304で読み出された読み出し対象データに含まれている検査符号と一致しない場合(S1306でNo)、コントローラ4は、エラー処理を実行し(ステップS1308)、読み出し処理を終了する。
(第1の方法(論物マップフラグ判定方法)、及び、検査符号付加情報による検査)
次に、データと物理アドレスとを使用して生成された検査符号と、バリッドフラグテーブル62で管理されているフラグの値とを使用して読み出しデータを検査する場合について説明する。つまり、フラグについて第1の方法(論物マップフラグ判定方法)を使用して検査し、且つ付加情報が検査符号であるケースについて説明する。
【0199】
まず、書き込みデータついて説明する。
図18は、実施形態に係るメモリシステムの書き込みデータの第3の例を示す図である。
【0200】
書き込み関連データは、ユーザデータと、LBAと、PBAとを含む。ユーザデータは、ホスト2から受信されたライトコマンドに関連付けられたデータである。LBAは、このライトコマンドによって指定された要求LBA(書き込み先LBA)である。PBAは、フラッシュPBA割り当て部433によって書き込み先LBAに割り当てられた書き込み先PBAである。
【0201】
検査符号生成回路441は、少なくともユーザデータと書き込み先PBAとを使用して、検査符号を生成する。また、検査符号生成回路441は、ユーザデータと書き込み先PBAとに加えて、LBAをさらに使用して検査符号を生成してもよい。
【0202】
誤り訂正回路45は、ユーザデータと、LBAと、検査符号とを含むデータセットを符号化して、ECCフレームを生成する。そして、ユーザデータと、LBAと、検査符号と、ECCとを含むECCフレームが、NAND型フラッシュメモリ5の同一ページに書き込まれる。
【0203】
次いで、
図18で説明された書き込みデータがNAND型フラッシュメモリ5から読み出された場合について説明する。
図19は、実施形態に係るメモリシステムの読み出しデータの第3の例を示す図である。
【0204】
NAND型フラッシュメモリ5から読み出されたデータは、ユーザデータと、LBAと、検査符号と、ECCとを含む。誤り訂正回路45は、デコード処理を実行することによって、読み出されたデータに対する誤り訂正を実行する。
【0205】
誤り訂正が完了すると、誤り訂正回路45は、ユーザデータと、LBAと、検査符号とを出力する。
【0206】
検査符号生成回路441は、誤り訂正回路45によって出力されたユーザデータと、ホスト2から受信されたリードコマンドによって指定された読み出し対象LBAに対応付けられているPBAとを使用して、検査符号を生成する。また、このデータの書き込みの際にユーザデータおよびPBAの他にLBAが使用されていた場合には、検査符号生成回路441は、誤り訂正回路45によって出力されたユーザデータと、ホスト2から受信されたリードコマンドによって指定されたLBAに対応付けられているPBAとの他に、ホスト2から受信されたリードコマンドによって指定されたLBAを使用して、検査符号を生成する。
【0207】
検査符号検査回路442は、検査符号生成回路441によって生成された検査符号が、誤り訂正回路45によって出力された検査符号と一致しているか否かを検査する。二つの検査符号が互いに一致していない場合、検査符号検査回路442は、間違ったユーザデータが読み出されたと判定する。二つの検査符号が一致している場合、検査符号検査回路442は、正しいユーザデータが読み出されたと判定する。
【0208】
フラグ検査回路443は、L2Pテーブル61においてリードコマンドによって指定された読み出し対象LBAに対応付けられているPBAに対応するフラグの値が、第1の値であるか否かを検査する。フラグが第1の値である場合、フラグ検査回路443は、正しいユーザデータが読み出されたと判定する。フラグが第2の値である場合、フラグ検査回路443は、間違ったユーザデータが読み出されたと判定する。
【0209】
検査符号検査回路442およびフラグ検査回路443が、正しいユーザデータが読み出されたと判定した場合、コントローラ4は、読み出したユーザデータをホスト2に送信する。
【0210】
検査符号検査回路442またはフラグ検査回路443が、間違ったユーザデータが読み出されたと判定した場合、コントローラ4は、エラー処理を実行する。例えば、コントローラ4は、エラー処理として、エラーをホスト2に通知する。
【0211】
また、検査符号検査回路442のみが間違ったユーザデータが読み出されたと判定した場合、コントローラ4は、エラー処理として、読み出し対象PBAよって示されるNAND型フラッシュメモリ5内の記憶位置からデータを読み出す処理を再び実行してもよい。これは、検査符号検査回路442のみがエラーを検知する原因として、NAND型フラッシュメモリ5内のアドレスデコーダの誤動作によって、読み出し対象PBAが示す記憶位置とは異なる記憶位置からデータが読み出された場合が想定されるためである。
【0212】
次いで、書き込み処理の手順について説明する。
図20は、実施形態に係るメモリシステムの書き込み処理の手順の第3の例を示すフローチャートである。
【0213】
コントローラ4は、SSD3がホスト2からライトコマンドを受信したことに応じて(ステップS1401)、書き込み処理を開始する。
【0214】
コントローラ4は、S1401で受信されたライトコマンドによって指定された書き込み先LBAに古いデータが関連付けられているか否かを判定する(ステップS1402)。コントローラ4は、L2Pテーブル61において、書き込み先LBAにPBAがマッピングされている場合に、書き込み先LBAに古いデータが関連付けられていると判定する。
【0215】
書き込み先LBAに古いデータが関連付けられている場合(S1402でYes)、コントローラ4は、L2Pテーブル61から、書き込み先LBAにマッピングされている最終PBAを取得する(ステップS1403)。
【0216】
コントローラ4は、最終PBAに対応するバリッドフラグテーブル62内のフラグをリセットする(ステップS1404)。ステップS1404では、バリッドフラグテーブル62において、最終PBAに対応するフラグは、第2の値に設定される。
【0217】
書き込み先LBAに古いデータが関連付けられていない場合(S1402でNo)、コントローラ4は、S1403、およびS1404の処理をスキップする。
【0218】
コントローラ4は、書き込み先LBAに新しいPBAを割り当てる(ステップS1405)。割り当てられたPBAは、ライトコマンドに関連付けられたデータが書き込まれるべき記憶位置を示す書き込み先PBAである。
【0219】
コントローラ4は、S1401で受信されたライトコマンドに関連付けられたデータと、書き込み先LBAと、S1405で割り当てられた書き込み先PBAとを使用して、検査符号生成回路441において検査符号を生成する(ステップS1406)。この検査符号は、データと、書き込み先LBAと、書き込み先PBAとを含む情報の整合性をチェックするための符号である。
【0220】
コントローラ4は、データと、書き込み先LBAと、検査符号とを符号化して、符号語(ECCフレーム)を生成する(ステップS1407)。
【0221】
コントローラ4は、データと、書き込み先LBAと、検査符号と、ECCとを、書き込み先PBAによって示されるNAND型フラッシュメモリ5内の記憶位置に書き込む(ステップS1408)。
【0222】
コントローラ4は、バリッドフラグテーブル62における、書き込み先PBAに対応するフラグをセットし(ステップS1409)、書き込み処理を終了する。ステップS1409では、コントローラ4は、書き込み先PBAに対応するフラグを第1の値に設定する。
【0223】
なお、
図20で示した書き込み処理では、データと、書き込み先LBAと、検査符号とをNAND型フラッシュメモリ5に書き込む場合を説明したが、書き込み先LBAをNAND型フラッシュメモリ5に書き込まずに、データおよび検査符号だけをNAND型フラッシュメモリ5に書き込んでもよい。これは、検査符号が、データと書き込み先LBAと書き込み先PBAとを使用して生成されているためである。
【0224】
次いで、読み出し処理の手順について説明する。
図21は、実施形態に係るメモリシステムの読み出し処理の手順の第3の例を示すフローチャートである。
【0225】
コントローラ4は、SSD3がホスト2からリードコマンドを受信したことに応じて(ステップS1501)、読み出し処理を開始する。
【0226】
コントローラ4は、S1501で受信したリードコマンドによって指定されたLBAに対応するPBAをL2Pテーブル61から取得する(ステップS1502)。
【0227】
コントローラ4は、S1502で取得したPBAに対応するフラグをバリッドフラグテーブル62から取得する(ステップS1503)。
【0228】
コントローラ4は、S1502で取得したPBAによって示される記憶位置に記憶されている読み出し対象データ(ここでは、データ、LBA、および検査符号)を、NAND型フラッシュメモリ5から読み出す(ステップS1504)。
【0229】
コントローラ4は、S1504で読み出した読み出し対象データに含まれるユーザデータと、S1501で受信したリードコマンドによって指定されたLBAと、S1502で取得したPBAとを使用して、検査符号生成回路441において検査符号を生成する(ステップS1505)。
【0230】
コントローラ4は、S1505で生成した検査符号が、S1504で読み出された読み出し対象データに含まれている検査符号と一致するか否かを判定する(ステップS1506)。
【0231】
コントローラ4は、S1503で取得したフラグが有効を示す値にセットされているか否かを判定する(ステップS1507)。
【0232】
S1506、およびS1507の判定は、任意の順序で実行され得る。
【0233】
S1505で生成した検査符号がS1504で読み出された読み出し対象データに含まれている検査符号と一致し(S1506でYes)、且つS1503で取得したフラグが有効を示す値にセットされている場合(S1507でYes)、コントローラ4は、S1504で読み出した読み出し対象データに含まれるデータ(ユーザデータ)をホスト2に送信し(ステップS1508)、読み出し処理を終了する。
【0234】
また、S1505で生成した検査符号がS1504で読み出された読み出し対象データに含まれている検査符号と一致しない(S1506でNo)、あるいはS1507で取得したフラグが無効を示す値にセットされている場合(S1507でNo)、コントローラ4は、エラー処理を実行し(ステップS1509)、読み出し処理を終了する。
(第2の方法(検査符号判定方法)、及び、PBA付加情報による検査)
次に、データと共にNAND型フラッシュメモリ5に記憶されている物理アドレスと、ユーザデータおよびバリッドフラグテーブル62で管理されているフラグを使用して生成された検査符号と、を使用して読み出しデータを検査する場合について説明する。つまり、フラグについて第2の方法(検査符号判定方法)を使用して検査し、且つ付加情報がPBAそのものであるケースについて説明する。
【0235】
まず、書き込みデータついて説明する。
図22は、実施形態に係るメモリシステムの書き込みデータの第4の例を示す図である。
【0236】
書き込み関連データは、ユーザデータと、LBAと、PBAと、フラグとを含む。ユーザデータは、ホスト2から受信されたライトコマンドに関連付けられたデータである。LBAは、このライトコマンドによって指定された要求LBA(書き込み先LBA)である。PBAは、フラッシュPBA割り当て部433によって書き込み先LBAに割り当てられた書き込み先PBAである。フラグは、有効データを示す第1の値を有するフラグ、つまり、例えば“1”を示す1ビットの情報である。なお、書き込み関連データは、ユーザデータとPBAとフラグとを含んでいれば十分であり、LBAを必ずしも含んでいなくてもよい。
【0237】
検査符号生成回路441は、少なくともユーザデータ、およびフラグを使用して、検査符号を生成する。なお、検査符号生成回路441は、ユーザデータ、およびフラグに加えて、LBAを使用して検査符号を生成してもよい。
【0238】
誤り訂正回路45は、ユーザデータと、LBAと、PBAと、検査符号とを含むデータセットを符号化して、ECCフレームを生成する。そして、ユーザデータと、LBAと、PBAと、検査符号と、ECCとを含むECCフレームが、NAND型フラッシュメモリ5の同一ページに書き込まれる。
【0239】
次いで、
図22で説明された書き込みデータがNAND型フラッシュメモリ5から読み出された場合について説明する。
図23は、実施形態に係るメモリシステムの読み出しデータの第4の例を示す図である。
【0240】
NAND型フラッシュメモリ5から読み出されたデータは、ユーザデータと、LBAと、PBAと、検査符号と、ECCとを含む。誤り訂正回路45は、デコード処理を実行することによって、読み出されたデータに対する誤り訂正を実行する。
【0241】
誤り訂正が完了すると、誤り訂正回路45は、ユーザデータと、LBAと、PBAと、検査符号とを出力する。
【0242】
検査符号生成回路441は、誤り訂正回路45によって出力されたユーザデータと、バリッドフラグテーブル62において読み出し対象PBAに対応付けられているフラグとを少なくとも使用して、検査符号を生成する。また、このデータの書き込みの際にユーザデータおよびフラグの他にLBAが使用されていた場合には、検査符号生成回路441は、ユーザデータおよびフラグの他に、ホスト2から受信されたリードコマンドによって指定された読み出し対象LBAをさらに使用して、検査符号を生成する。
【0243】
検査符号検査回路442は、検査符号生成回路441によって生成された検査符号が、誤り訂正回路45によって出力された検査符号と一致しているか否かを検査する。二つの検査符号が一致していない場合、検査符号検査回路442は、間違ったユーザデータが読み出されたと判定する。二つの検査符号が一致している場合、検査符号検査回路442は、正しいユーザデータが読み出されたと判定する。
【0244】
PBA検査回路444は、リードコマンドによって指定されたLBAに読み出し実行時にマッピングされているPBAが、誤り訂正回路45によって出力されたPBAと一致しているか否かを検査する。二つのPBAが一致している場合、PBA検査回路444は、正しいユーザデータが読み出されたと判定する。二つのPBAが一致していない場合、PBA検査回路444は、NAND型フラッシュメモリ5のアドレスデコーダの誤動作によって間違ったユーザデータが読み出されたと判定する。
【0245】
検査符号検査回路442、およびPBA検査回路444が、正しいユーザデータが読み出されたと判定した場合、コントローラ4は、読み出したユーザデータをホスト2に送信する。
【0246】
検査符号検査回路442、またはPBA検査回路444が、間違ったユーザデータが読み出されたと判定した場合、コントローラ4は、エラー処理を実行する。例えば、コントローラ4は、エラー処理として、エラーをホスト2に通知する。この場合、コントローラ4は、リードコマンドの完了示す完了応答として、リードコマンドの処理が失敗したことを示す応答をホスト2に送信してもよい。
【0247】
また、PBA検査回路444のみが間違ったユーザデータが読み出されたと判定した場合、コントローラ4は、エラー処理として、読み出し対象PBAよって示されるNAND型フラッシュメモリ5内の記憶位置からデータを読み出す処理を再び実行してもよい。これは、PBA検査回路444のみがエラーを検知する原因として、NAND型フラッシュメモリ5内のアドレスデコーダの誤動作によって、読み出し対象PBAが示す記憶位置とは異なる記憶位置からデータが読み出される場合が想定されるためである。
【0248】
次いで、書き込み処理の手順について説明する。
図24は、実施形態に係るメモリシステムの書き込み処理の手順の第4の例を示すフローチャートである。
【0249】
コントローラ4は、SSD3がホスト2からライトコマンドを受信したことに応じて(ステップS1601)、書き込み処理を開始する。
【0250】
コントローラ4は、S1601で受信されたライトコマンドによって指定された書き込み先LBAに古いデータが関連付けられているか否かを判定する(ステップS1602)。コントローラ4は、L2Pテーブル61から、書き込み先LBAにPBAがマッピングされている場合に、書き込み先LBAに古いデータが関連付けられていると判定する。
【0251】
書き込み先LBAに古いデータが関連付けられている場合(S1602でYes)、コントローラ4は、L2Pテーブル61から、書き込み先LBAにマッピングされている最終PBAを取得する(ステップS1603)。
【0252】
コントローラ4は、最終PBAに対応するバリッドフラグテーブル62内のフラグをリセットする(ステップS1604)。ステップS1604では、バリッドフラグテーブル62において、最終PBAに対応するフラグは、第2の値に設定される。
【0253】
書き込み先LBAに古いデータが関連付けられていない場合(S1602でNo)、コントローラ4は、S1603、およびS1604の処理をスキップする。
【0254】
コントローラ4は、書き込み先LBAに新しいPBAを割り当てる(ステップS1605)。割り当てられたPBAは、ライトコマンドに関連付けられたデータが書き込まれるべき記憶位置を示す書き込み先PBAである。
【0255】
コントローラ4は、S1601で受信されたライトコマンドに関連付けられたデータと、書き込み先LBAと、有効を示すフラグとを使用して、検査符号生成回路441において検査符号を生成する(ステップS1606)。この検査符号は、データと書き込み先LBAとフラグとを含む情報の整合性をチェックするための符号である。
【0256】
コントローラ4は、データと、書き込み先LBAと、書き込み先PBAと、検査符号とを符号化して、符号語(ECCフレーム)を生成する(ステップS1607)。
【0257】
コントローラ4は、データと、書き込み先LBAと、書き込み先PBAと、検査符号と、ECCとを、書き込み先PBAによって示されるNAND型フラッシュメモリ5内の記憶位置に書き込む(ステップS1608)。
【0258】
コントローラ4は、バリッドフラグテーブル62における、書き込み先PBAに対応するフラグをセットし(ステップS1609)、書き込み処理を終了する。ステップS1609では、コントローラ4は、書き込み先PBAに対応するフラグを第1の値に設定する。
【0259】
なお、
図24で示した書き込み処理では、データと、書き込み先LBAと、書き込み先PBAと、検査符号とをNAND型フラッシュメモリ5に書き込む場合を説明したが、書き込み先LBAをNAND型フラッシュメモリ5に書き込まずに、データ、書き込み先PBAおよび検査符号だけをNAND型フラッシュメモリ5に書き込んでもよい。これは、検査符号が、データと書き込み先LBAとフラグとを使用して生成されているためである。
【0260】
次いで、読み出し処理の手順について説明する。
図25は、実施形態に係るメモリシステムの読み出し処理の手順の第4の例を示すフローチャートである。
【0261】
コントローラ4は、SSD3がホスト2からリードコマンドを受信したことに応じて(ステップS1701)、読み出し処理を開始する。
【0262】
コントローラ4は、S1701で受信したリードコマンドによって指定されたLBAに対応するPBAをL2Pテーブル61から取得する(ステップS1702)。
【0263】
コントローラ4は、S1702で取得したPBAに対応するフラグをバリッドフラグテーブル62から取得する(ステップS1703)。
【0264】
コントローラ4は、S1702で取得したPBAによって示される記憶位置に記憶されている読み出し対象データ(ここでは、データ、LBA、PBA、および検査符号)を、NAND型フラッシュメモリ5から読み出す(ステップS1704)。
【0265】
コントローラ4は、S1704で読み出した読み出し対象データに含まれるユーザデータと、S1701で受信したリードコマンドによって指定されたLBAと、S1703で取得したフラグとを使用して、検査符号生成回路441において検査符号を生成する(ステップS1705)。
【0266】
コントローラ4は、S1705で生成した検査符号が、S1704で読み出された読み出し対象データに含まれている検査符号と一致するか否かを判定する(ステップS1706)。
【0267】
コントローラ4は、S1702でL2Pテーブル61から取得したPBAが、S1704で読み出された読み出し対象データに含まれているPBAと一致するか否かを判定する(ステップS1707)。
【0268】
コントローラ4は、S1703で取得したフラグが有効を示す値にセットされているか否かを判定する(ステップS1708)。
【0269】
S1706、およびS1707の判定は、任意の順序で実行され得る。
【0270】
S1705で生成した検査符号がS1704で読み出された読み出し対象データに含まれている検査符号と一致し(S1706でYes)、且つS1702でL2Pテーブル61から取得したPBAがS1704で読み出された読み出し対象データに含まれているPBAと一致する場合(S1707でYes)、コントローラ4は、S1704で読み出した読み出し対象データに含まれるデータ(ユーザデータ)をホスト2に送信し(ステップS1708)、読み出し処理を終了する。
【0271】
S1705で生成した検査符号がS1704で読み出された読み出し対象データに含まれている検査符号と一致しない(S1706でNo)、あるいはS1702でL2Pテーブル61から取得したPBAがS1704で読み出された読み出し対象データに含まれているPBAと一致しない場合(S1707でNo)、コントローラ4は、エラー処理を実行し(ステップS1709)、読み出し処理を終了する。
【0272】
以上説明したように、本実施形態によれば、コントローラ4は、リードコマンドをホスト2から受信したことに応じ、リードコマンドによって指定された論理アドレス(読み出し対象LBA)にリードコマンド実行時にマッピングされている物理アドレス(PBA)をL2Pテーブル61から取得し、取得したPBAに基づいて、NAND型フラッシュメモリ5からデータ(ユーザデータ)を読み出す。そして、コントローラ4は、取得したPBAに対応するフラグの現在の状態が第1の値に設定されている状態が維持し続けられているか否かに基づいて、読み出されたデータ(ユーザデータ)をホスト2に送信するか否かを決定する。すなわち、コントローラ4は、フラグを使用して、NAND型フラッシュメモリ5から読み出されたデータが、読み出し対象LBAに対応する最新のデータである正しいデータ、または読み出し対象LBAに対応する最新のデータ以外のデータである間違ったデータであるかを検査することができる。これにより、たとえL2Pテーブル61のマッピング情報の一部の破損によって間違ったデータがNAND型フラッシュメモリ5から読み出された場合であっても、この間違ったデータがホスト2に送信されることを防ぐことができる。
【0273】
具体的には、取得したPBAに対応するフラグの現在の状態が第2の値に設定されている状態である場合、コントローラ4は、ホスト2にエラーを通知する。これにより、L2Pテーブル61に誤りがあることによって同一LBAの過去のデータが読まれた場合に、コントローラ4は、ホスト2にエラーを通知することができる。
【0274】
また、コントローラ4は、物理アドレスから直接的または間接的に決定される付加情報を使用して、NAND型フラッシュメモリ5から読み出されたデータが正しいデータであるか否かを検査することができる。
【0275】
ホスト2から受信されたリードコマンドが指定するLBAに基づいて取得された付加情報と、NAND型フラッシュメモリ5から読み出されたデータに含まれる付加情報とが一致しない場合、コントローラ4は、エラー処理を実行する。この場合、NAND型フラッシュメモリ5の不具合によって、リードコマンドに基づいて指定されたPBAと、NAND型フラッシュメモリ5から読み出されたデータに基づいて決定されたPBAとが不一致となったことが検出される。そのため、コントローラ4は、エラー処理として、再度NAND型フラッシュメモリ5からデータを読み出すように、読み出し処理を実行してもよい。あるいは、コントローラ4は、エラー処理として、ホスト2にエラーを通知してもよい。
【0276】
なお、実際には、L2Pテーブル61のマッピング情報の破損や、NAND型フラッシュメモリ5の誤動作は、滅多に起こらない。このため、フラグだけを使用して、NAND型フラッシュメモリ5から読み出されたデータが正しいデータである否かを検査する構成が利用されてよいし、付加情報だけを使用して、NAND型フラッシュメモリ5から読み出されたデータが正しいデータである否かを検査する構成が利用されてよい。
【0277】
あるいは、コントローラ4は、フラグと付加情報との双方を使用して、NAND型フラッシュメモリ5から読み出されたデータが正しいデータである否かを検査することもできる。
【0278】
コントローラ4は、フラグが有効であることを示し、且つ、ホスト2から受信されたリードコマンドが指定するLBAに基づいて取得された付加情報と、NAND型フラッシュメモリ5から読み出したデータに含まれる付加情報とが一致する、という条件を満たした場合に、読み出したデータをホスト2に送信する。一方、この条件を満たさなかった場合、コントローラ4は、読み出したデータをホスト2に送信しない。このように、コントローラ4は、フラグが有効であることを示し、且つ、ホスト2から受信されたリードコマンドが指定するLBAに基づいて取得された付加情報と、NAND型フラッシュメモリ5から読み出したデータに含まれる付加情報とが一致する、という条件が満たされたか否かに基づいて、NAND型フラッシュメモリ5から読み出したデータをホスト2に送信するか否かを決定する。これにより、たとえL2Pテーブル61のマッピング情報の破損またはNAND型フラッシュメモリ5の誤動作のいずれか一方又は双方が起きた場合であっても、コントローラ4は、誤読み出しによって間違ったデータがホスト2に送信されることを防ぐことができる。
【0279】
また、コントローラ4は、フラグまたは物理アドレスを使用して検査符号生成回路441において検査符号を生成し、生成した検査符号を使用して読み出しデータが正しいデータであることを検査することができる。
【0280】
この場合、SSD3は、読み出しデータの検査の際に、検査符号の検査のみを実行すればよい。そのため、コントローラ4は、別途、フラグの検査、およびPBAの検査を実行する必要がない。
【0281】
このことから、フラグおよび物理アドレスを使用して検査符号を生成する場合には、SSD3は、読み出しデータの検査のために、特別なハードウェア回路(例えば、
図1で示したフラグ検査回路443およびPBA検査回路444)を必要としない。また、物理アドレスをNAND型フラッシュメモリ5に書き込むことなく、NAND型フラッシュメモリ5の誤動作に起因する誤読み出しの場合についても、間違ったデータの読み出しを検出できるので、NAND型フラッシュメモリ5の物理記憶スペースをより有効に活用することが可能となる。
【0282】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0283】
1…情報処理システム
2…ホスト
3…SSD
4…コントローラ
5…NAND型フラッシュメモリ
6…DRAM
7…バス
20…内部バス
21…プロセッサ
22…メモリ
40…内部バス
41…ホストインターフェース
42…SRAM
43…CPU
44…検査回路
45…誤り訂正回路
46…NANDインターフェース
47…DRAMインターフェース
61…L2Pテーブル
62…バリッドフラグテーブル
63…アクティブブロックリスト
64…フリーブロックリスト
431…リード処理部
432…ライト処理部
433…フラッシュPBA割り当て部
441…検査符号生成回路
442…検査符号検査回路
443…フラグ検査回路
444…PBA検査回路
445…LBA検査回路