(57)【要約】【課題】読み出し電圧値の変更処理の頻度を抑制することにより、データの読み出し処理の効率を向上することにある。【解決手段】実施形態によれば、メモリ制御装置は、設定部と、コントローラとを具備する。設定部は、フラッシュメモリからデータを読み出す際の読み出し電圧制御データを設定する。コントローラは、前記フラッシュメモリの未使用ブロックにデータを書き込む際に、前記設定部により設定されている読み出し電圧制御データに対応付けられた未使用ブロックを優先的に書き込み先ブロックとして選択する。【選択図】図１
2013196613.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリからデータを読み出す際の読み出し電圧制御データを設定する設定手段と、
前記フラッシュメモリの未使用ブロックにデータを書き込む際に、前記設定手段により設定されている読み出し電圧制御データに対応付けられた未使用ブロックを優先的に書き込み先ブロックとして選択するコントローラと
を具備するメモリ制御装置。
【請求項２】
前記フラッシュメモリの未使用ブロック群を読み出し電圧制御データ毎にグループ化して管理する未使用ブロック管理テーブルを記憶する未使用ブロック管理テーブル記憶手段を有し、
前記コントローラは、
前記未使用ブロック管理テーブルを参照し、前記設定手段により設定されている読み出し電圧制御データと一致する読み出し電圧制御データのグループに属する未使用ブロックを優先的に書き込み先ブロックとして選択する請求項１に記載のメモリ制御装置。
【請求項３】
前記コントローラは、
前記設定手段により設定されている読み出し電圧制御データと一致する読み出し電圧制御データの未使用ブロックが存在しない場合には、前記未使用ブロック管理テーブルを参照して任意の未使用ブロックを書き込み先ブロックとして選択する請求項２に記載のメモリ制御装置。
【請求項４】
前記フラッシュメモリのブロック毎に、使用中ブロックまたは未使用ブロックのいずれであるかを示す情報および読み出し動作時に設定される読み出し電圧制御データを有するブロック状態テーブルを記憶するブロック状態テーブル記憶手段を有し、
前記コントローラは、
読み出し要求のブロックからデータを読み出す読み出し動作時に、前記ブロック状態テーブルを参照して当該ブロックの読み出し電圧制御データを取得する請求項１から３のいずれか１項に記載のメモリ制御装置。
【請求項５】
前記コントローラは、
消去動作で使用中ブロックからデータを消去した後に、当該使用中ブロックを未使用ブロックに変更するように前記ブロック状態テーブルを更新する請求項４に記載のメモリ制御装置。
【請求項６】
前記コントローラは、
読み出し要求のブロックからデータを読み出す読み出し動作時に、読み出し動作が成功しない場合に前記設定手段により設定された読み出し電圧制御データを変更し、
変更した読み出し電圧制御データを使用して読み出し動作を繰り返す請求項１から３のいずれか１項に記載のメモリ制御装置。
【請求項７】
前記コントローラは、
読み出し要求のブロックからデータを読み出す読み出し動作時に、読み出し動作が成功しない場合に前記設定手段により設定された読み出し電圧制御データを変更し、
変更した読み出し電圧制御データを使用して読み出し動作を繰り返し、
読み出し動作が成功した場合に、前記変更した読み出し電圧制御データを前記読み出し要求のブロックに設定するように前記ブロック状態テーブルを更新する請求項４または５のいずれかに１項に記載のメモリ制御装置。
【請求項８】
データ消去単位をブロックとするフラッシュメモリと、
前記ブロックからデータを読み出す際の読み出し電圧制御データを設定する設定手段と、
前記フラッシュメモリの未使用ブロックにデータを書き込み、使用中ブロックからデータを読み出すための読み出し、書き込み制御を実行するコントローラとを具備し、
前記コントローラは、
前記書き込み動作時に、前記設定手段により設定されている読み出し電圧制御データに対応付けられた未使用ブロックを優先的に書き込み先ブロックとして選択するデータ記憶装置。
【請求項９】
前記フラッシュメモリの未使用ブロック群を読み出し電圧制御データ毎にグループ化して管理する未使用ブロック管理テーブルを記憶する未使用ブロック管理テーブル記憶手段を有し、
前記コントローラは、
前記未使用ブロック管理テーブルを参照し、前記設定手段により設定されている読み出し電圧制御データと一致する読み出し電圧制御データのグループに属する未使用ブロックを優先的に書き込み先ブロックとして選択する請求項８に記載のデータ記憶装置。
【請求項１０】
前記フラッシュメモリのブロック毎に、使用中ブロックまたは未使用ブロックのいずれであるかを示す情報および読み出し動作時に設定される読み出し電圧制御データを有するブロック状態テーブルを記憶するブロック状態テーブル記憶手段を有し、
前記コントローラは、
前記読み出し動作時に、前記ブロック状態テーブルを参照して当該読み出し要求のブロックの読み出し電圧制御データを取得する請求項８または９のいずれか１項に記載のデータ記憶装置。
【請求項１１】
データ消去単位をブロックとするフラッシュメモリを有するデータ記憶装置に適用するメモリ制御方法であって、
前記フラッシュメモリの使用中ブロックからデータを読み出す読み出し動作時に、読み出し電圧制御データを設定し、
前記フラッシュメモリの未使用ブロックにデータを書き込む書き込み動作時に、前記設定されている読み出し電圧制御データに対応付けられた未使用ブロックを優先的に書き込み先ブロックとして選択するメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリのメモリ制御装置、データ記憶装置及びメモリ制御方法に関する。
【背景技術】
【０００２】
近年、データ記憶装置として、書き換え可能な不揮発性メモリであるNAND型フラッシュメモリ（以下、単にフラッシュメモリと表記する場合がある）を記憶媒体とするＳＳＤ（solid state drive）の開発が推進されている。
【０００３】
ＳＳＤは、フラッシュメモリからデータを消去する場合にはブロック単位で消去処理を実行し、データを書き込む場合には論理ページ単位で行なう。このような動作から、ＳＳＤは、ホストからデータの書き込み要求があると、フラッシュメモリから未使用のブロックを選定し、当該未使用ブロックにホストからデータを書き込む。
【０００４】
従来では、未使用ブロック群から割当ブロックを選択する際に、消去時期が古く、かつ消去回数が少ない未使用ブロックを割当ブロックとして選択する処理がなされている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−６７２８４号公報
【特許文献２】特開２０１１−１００５１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来のＳＳＤでは、選定された未使用ブロックにデータが書き込まれると、このブロックが読み出し対象ブロックとして管理される。ＳＳＤは、読み出し対象ブロックからデータを読み出す場合に、設定された読み出し電圧制御データ（以下、シフトデータと表記する場合がある）で示す読み出し電圧をフラッシュメモリのメモリセルに印加する。
【０００７】
ここで、フラッシュメモリの各ブロックはデータ記憶放置時間などの影響により、適合する読み出し電圧値が変化している可能性がある。このため、ＳＳＤは、当初の読み出し電圧制御データで設定された読み出し電圧値を読み出し対象ブロック毎に変更する可能性がある。このような読み出し電圧値の変更処理の頻度が高くなると、データの読み出し処理の効率が低下することになる。
【０００８】
そこで、本発明の目的は、読み出し電圧値の変更処理の頻度を抑制することにより、データの読み出し処理の効率を向上することにある。
【課題を解決するための手段】
【０００９】
実施形態によれば、メモリ制御装置は、設定手段と、コントローラとを具備する。設定手段は、フラッシュメモリからデータを読み出す際の読み出し電圧制御データを設定する。コントローラは、前記フラッシュメモリの未使用ブロックにデータを書き込む際に、前記設定手段により設定されている読み出し電圧制御データに対応付けられた未使用ブロックを優先的に書き込み先ブロックとして選択する。
【図面の簡単な説明】
【００１０】
【図１】実施形態に関するＳＳＤの構成を説明するためのブロック図。
【図２】実施形態に関するフラッシュメモリ内のブロック構成を説明するための図。
【図３】実施形態に関する未使用ブロック管理テーブルの構成を説明するための図。
【図４】実施形態に関するブロックステータステーブルの構成を説明するための図。
【図５】実施形態に関するシフトデータＩＤとシフトデータとの対応付けテーブルの構成を説明するための図。
【図６】実施形態に関する消去動作と読み出し動作を説明するためのフローチャート。
【図７】実施形態に関する書き込み動作を説明するためのフローチャート。
【発明を実施するための形態】
【００１１】
以下図面を参照して、実施形態を説明する。
【００１２】
［データ記憶装置の構成］
図１は、本実施形態に関するデータ記憶装置として、ＳＳＤの構成を説明するためのブロック図である。図１に示すように、ＳＳＤは大別して、メモリコントローラ（ＳＳＤコントローラ）１０と、NAND型フラッシュメモリ（以下、単にフラッシュメモリと表記する場合がある）１１とを有する。フラッシュメモリ１１は、データを記憶する不揮発性記憶媒体である。フラッシュメモリ１１は、２値データを記憶するＳＬＣ（Single Level Cell）構成の複数のメモリセルから構成されている。なお、本実施形態は、ＭＬＣ（Multi Level Cell）構成の複数のメモリセルから構成されるフラッシュメモリの場合でも適用可能である。
【００１３】
メモリコントローラ１０は、システムバス２０に接続される要素として、メモリインターフェース１２と、制御部１３と、テーブル管理部１４と、未使用ブロック登録位置決定部１７と、未使用ブロック登録指示部１８と、未使用ブロック選択部１９と、読み出し電圧設定更新部２１と、読み出し電圧設定取得部２３とを有する。
【００１４】
メモリインターフェース１２は、図示しない複数のチャネルを介してフラッシュメモリ１１と接続し、リード／ライト動作に必要なコマンドやデータの入出力を行なう。各チャネルはデータの伝送を同時に行なう伝送経路である。なお、本実施例におけるチャネル数は８とするが、本発明はこれに限定されるものではない。制御部１３は、例えばマイクロプロセッサからなり、メインコントローラとしてシステムバス２０に接続される各要素の動作を制御する。
【００１５】
テーブル管理部１４は、未使用ブロック管理テーブル格納部１５及びブロックステータステーブル格納部１６のそれぞれに格納される各種テーブルへの問い合わせや、データ更新等のテーブルアクセスを管理する。未使用ブロック管理テーブル格納部１５は、未使用状態にあるブロックアドレスを管理する未使用ブロック管理テーブルを格納する記憶部である（図３を参照して後述する）。ブロックステータステーブル格納部１６は、図４に示すように、ブロック毎に使用・未使用の状態、およびシフトデータを特定するシフトデータＩＤ（識別データ）を管理するブロックステータステーブルを格納する記憶部である。なお、シフトデータについては、図５を参照して後述する
未使用ブロック登録位置決定部１７は、ブロックの状態が使用状態から未使用状態に遷移して未使用ブロック管理テーブルに登録する場合に、当該テーブル上での登録位置を決定する。図３に示すように、未使用ブロック管理テーブルは、未使用状態にあるブロック（フリーブロック）を管理するテーブルである。未使用ブロック登録指示部１８は、制御部１３によって指示されたブロックを、未使用ブロックとして前記未使用ブロック管理テーブルに登録する登録処理を実行する。未使用ブロック選択部１９は、未使用状態のブロックの中から使用中状態に変更するブロックを選択する。
【００１６】
読み出し電圧設定更新部２１は、読み出し電圧設定格納部２２に格納されたシフトデータ（読み出し電圧制御データ）を更新する。読み出し電圧設定格納部２２は、フラッシュメモリ１１からデータ（ユーザデータ）を読み出す際に各チャネルに設定するシフトデータを格納する記憶部である。読み出し電圧設定更新部２１は、読み出し電圧設定格納部２２に対して、シフトデータＩＤの形式で更新指示を実行する。読み出し電圧設定取得部２３は、読み出し電圧設定格納部２２に格納されたシフトデータを取得する。制御部１３は、読み出し電圧設定取得部２３により取得されたシフトデータをフラッシュメモリ１１内の各チャネルに対応したレジスタ１１０〜１１７に設定する。
【００１７】
ここで、図５に示すように、読み出し電圧設定格納部２２には、シフトデータＩＤとシフトデータＶｓｎとの対応付けテーブルが格納されている。この対応付けテーブルにより、読み出し電圧設定更新部２１からの更新指示に対して、シフトデータＩＤとシフトデータＶｓｎとの相互変換を行うことができる。また、読み出し電圧設定取得部２３からのシフトデータＶｓｎの要求に対して、シフトデータＩＤとシフトデータＶｓｎとの相互変換を行うことができる。
【００１８】
対応付けテーブルには、シフトデータＩＤとシフトデータＶｓｎとの対応付けと共に、後述するような読み出し条件（デフォルト、−シフト、＋シフト）が設定されている。ここで、シフトデータＶｓｎとは、ブロックのデータを読み出すことができた際の読み出し条件に対応する読み出し電圧レベルＶＡ及び読み出し電圧値Ｖreadを有する。読み出し電圧レベルＶＡは、データの値（ここでは０，１の２値）を判定するための閾値レベルを示す電圧レベル値である。読み出し電圧値Ｖreadは、読み出し動作時にフラッシュメモリ１１の非選択メモリセルに印加する電圧値である。
【００１９】
本実施形態では、読み出し条件としてデフォルで設定されたシフトデータＶｓｎによる読み出し処理をデフォルトリード処理と呼ぶ場合がある。また、デフォルで設定されたシフトデータＶｓｎを、読み出し電圧レベルＶＡ及び読み出し電圧値Ｖreadのそれぞれをプラス方向（電圧値が増大方向）にシフトさせた場合の読み出し処理を、＋シフトリード処理と呼ぶ場合がある。逆に、読み出し電圧レベルＶＡ及び読み出し電圧値Ｖreadのそれぞれをマイナス方向（電圧値が減少方向）にシフトさせた場合の読み出し処理を、−シフトリード処理と呼ぶ場合がある。
【００２０】
［消去動作と読み出し動作］
以下、図６のフローチャートを参照して、本実施形態のＳＳＤにおける消去動作と読み出し動作を説明する。
【００２１】
メモリコントローラ１０は、図示しないホストインターフェースでホストから送信されるホストコマンドを識別し、イレース（erase）、リード、およびライト要求に基づいて消去動作、読み出し動作、書き込み動作を開始する（ブロック６００）。書き込み動作については、図７を参照して後述する。
【００２２】
制御部１３は、ホストからのイレース要求に基づいて消去動作を実行させるために、メモリインタフェース１２に対してイレース要求のブロックを消去するイレースコマンドを発行する（ブロック６０１）。メモリインタフェース１２は、フラッシュメモリ１１内のコントローラに対してイレースコマンドを送信する。フラッシュメモリ１１内のコントローラは、フラッシュメモリ１１内の消去対象ブロックを消去する。
【００２３】
次に、制御部１３は消去したブロックを未使用ブロックとして登録するため、未使用ブロック登録指示部１８に当該ブロックのブロックアドレスを送信する。未使用ブロック登録位置決定部１７は、未使用ブロック登録指示部１８からのブロックアドレスを使用して、未使用ブロック管理テーブル上での登録位置を算出（決定）する（ブロック６０２）。
【００２４】
即ち、未使用ブロック登録位置決定部１７は、テーブル管理部１４を介して、ブロックステータステーブル格納部１６のブロックステータステーブルを参照し、当該ブロックアドレスのシフトデータＩＤを取得する（図４を参照）。さらに、未使用ブロック登録位置決定部１７は、未使用ブロック管理テーブル上で同一のシフトデータ（シフトデータＩＤに対応）により構成されるブロックアドレスのリストの末尾を算出する。具体例としては、当該ブロックアドレスＢ４のシフトデータＩＤが「１」の場合には、図３に示すように、未使用ブロック管理テーブルで、同一のシフトデータＶs1のグループに含まれるブロックアドレスＢ３の次の位置となる。
【００２５】
次に、未使用ブロック登録指示部１８は、制御部１３から指示されたブロックアドレスを、未使用ブロック管理テーブル上の算出位置に追加して当該テーブルを更新する（ブロック６０３）。ここで、未使用ブロック登録指示部１８は、テーブル管理部１４を介して、未使用ブロック管理テーブル格納部１５に格納された未使用ブロック管理テーブルを更新する。
【００２６】
さらに、未使用ブロック登録指示部１８は、図４に示すように、ブロックステータステーブルの当該ブロックアドレスの「状態」の値を未使用に変更する（ブロック６０４）。ここで、未使用ブロック登録指示部１８は、テーブル管理部１４を介して、ブロックステータステーブル格納部１６に格納されたブロックステータステーブルを更新する。この後、制御部１３がホストに正常終了ステータスを送信することにより、ホストからのイレース要求に応じた消去動作は終了となる。
【００２７】
次に、ホストからのリード要求に基づいた読み出し動作では、制御部１３は、読み出し要求のブロックアドレスについて、図４に示すブロックステータステーブルから当該ブロックの前回読み出し時のシフトデータ（シフトデータＩＤ）を取得する（ブロック６０５）。なお、制御部１３は、ブロックステータステーブルにおいて、前回読み出し時のシフトデータ（シフトデータＩＤ）が格納されていない場合は、読み出し条件としてデフォルトを選択する。即ち、制御部１３は、デフォルトで設定されたシフトデータＶｓｎによるデフォルトリード処理を実行する。
【００２８】
次に、制御部１３は、取得したシフトデータと、読み出し電圧設定格納部２２に格納されている現在のシフトデータとを比較する（ブロック６０６）。比較結果が一致していれば、制御部１３は、現在設定されているシフトデータの各値（ＶＡ，Ｖread）を変更することなく、メモリインタフェース１２に対してリードコマンドを発行する（ブロック６０７）。
【００２９】
一方、比較結果が不一致の場合には、制御部１３は、現在設定されているシフトデータを取得したシフトデータに変更する（ブロック６０８）。このシフトデータの変更後に、制御部１３は、メモリインタフェース１２に対してリードコマンドを発行する（ブロック６０７）。即ち、制御部１３は、＋シフトリード処理または−シフトリード処理を実行する。
【００３０】
ここで、図２に示すように、フラッシュメモリ１１内には、読み出し電圧設定格納部２２から取得されたシフトデータＶsnを保持するレジスタ１１０〜１１７が設けられている。読み出し電圧設定格納部２２には、図５に示すように、シフトデータＩＤとシフトデータＶｓｎとの対応付けテーブルが格納されている。シフトデータＶs0はデフォルトで設定されたシフトデータを意味する。フラッシュメモリ１１内のコントローラ（図示せず）は、制御部１３からのリードコマンドに基づいて、各チャネルに対応したレジスタ１１０〜１１７に設定されたシフトデータＶsnを使用し、読み出し要求のブロックアドレスからデータを読み出す。
【００３１】
図２は、フラッシュメモリ１１内に、使用状態のブロック（アドレスＢ０など）２００と、未使用状態の未使用ブロック（アドレスＢ１〜Ｂ５）２１０が混在している様子を示す。図３は、図２に示す未使用ブロック（アドレスＢ１〜Ｂ５）をシフトデータＶｓｎでグループ化したブロックアドレスのリストからなる未使用ブロック管理テーブルを示す。
【００３２】
制御部１３は、リードコマンドの発行後のリード処理の成否のステータスを確認する（ブロック６０９）。即ち、フラッシュメモリ１１内のコントローラは、読み出し要求のブロックアドレスからデータを読み出したときにリードエラーの有無を確認する。当該コントローラは、リードエラーが発生した場合にはリード不成功を示すステータスを制御部１３に送信する（ブロック６０９のＮＯ）。一方、当該コントローラは、リードエラーが発生しない場合にはリード成功を示すステータスを制御部１３に送信する（ブロック６０９のＹＥＳ）。
【００３３】
制御部１３は、リード成功の場合には、図４に示すブロックステータステーブルの当該ブロックアドレスのシフトデータＩＤの値を、現在設定されているシフトデータを示すシフトデータＩＤに更新する（ブロック６１０）。即ち、当該リードを実施したチャネル番号がｍ（ｍ＝０〜７）の場合には、対応するレジスタ１１ｍに設定されたシフトデータＶsnを示すシフトデータＩＤに更新する。制御部１３は、ホストに対して正常終了ステータスとリードデータを送信し、読み出し動作を終了する。
【００３４】
一方、制御部１３は、リード不成功の場合には、予め規定された回数のリードリトライ動作を開始する（ブロック６１１のＹＥＳ）。ここで、制御部１３は、現在設定されているシフトデータの変更後に、メモリインタフェース１２に対してリードコマンドを発行する（ブロック６１３、６０７）。
【００３５】
制御部１３は、予め規定された回数内のリードリトライ動作を実行しても、リードエラーが発生してリード不成功の場合には、所定のリードエラー処理に移行する（ブロック６１１のＮｏ，６１２）。即ち、制御部１３は、ホストに対してエラーステータスを送信し、読み出し動作を終了する。
【００３６】
制御部１３は、予め規定された回数内のリードリトライ動作でリード成功の場合には、図４に示すブロックステータステーブルの当該ブロックアドレスのシフトデータＩＤの値を、現在設定されているシフトデータ（リードリトライ毎に変更したシフトデータ）を示すシフトデータＩＤに更新する（ブロック６１０）。制御部１３は、ホストに対して正常終了ステータスとリードデータを送信し、読み出し動作を終了する。
【００３７】
［書き込み動作］
次に、図７のフローチャートを参照して書き込み動作を説明する。
【００３８】
ホストからのライト要求に基づいた書き込み動作では、制御部１３は、読み出し電圧設定取得部２３を介して、読み出し電圧設定格納部２２から現在設定されているシフトデータＶsnを取得する（ブロック７００）。即ち、当該リードを実施したチャネル番号がｍ（ｍ＝０〜７）の場合には、対応するレジスタ１１ｍに設定されたシフトデータＶsnを示すシフトデータＩＤを取得する。
【００３９】
次に、制御部１３は、未使用ブロック管理テーブル格納部１５に格納されている未使用ブロック管理テーブルを参照し、取得したシフトデータ（シフトデータＩＤ）と同一のシフトデータ（シフトデータＩＤ）を有する未使用ブロックを検索する（ブロック７０１）。
【００４０】
該当する未使用ブロックが未使用ブロック管理テーブルに登録されている場合には、制御部１３は、同一のシフトデータのグループに属する未使用ブロックを書き込み先ブロックとして選択する（ブロック７０１のＹＥＳ，７０２）。ここで、例えば取得したシフトデータと同一のシフトデータをＶs1とした場合、制御部１３は、図３に示す未使用ブロック管理テーブルから、同一のグループに属するブロックアドレスのリストの先頭要素であるブロックアドレスＢ１を書き込み先ブロックとして選択する。
【００４１】
制御部１３は、選択後に未使用ブロック管理テーブルから当該ブロックアドレス（Ｂ１）を削除する。さらに、制御部１３は、図４に示すブロックステータステーブルの当該ブロックアドレス（Ｂ１）の「状態」の値を未使用から使用中に変更する。このような処理後に、制御部１３は、メモリインタフェース１２に対してライトコマンドを発行する（ブロック７０３）。フラッシュメモリ１１内のコントローラは、制御部１３からのライトコマンド及びデータに基づいて、図２に示すように、未使用ブロック（アドレスＢ１）に対してホストからの書き込み要求のデータを書き込む。制御部１３は、ライトコマンド成否のステータスをホストに送信し、書き込み動作を終了する。
【００４２】
一方、該当する未使用ブロックが未使用ブロック管理テーブルに登録されていない場合には、制御部１３は、任意の未使用ブロックを書き込み先ブロックとして選択する（ブロック７０１のＮＯ，７０４）。即ち、現在設定されているシフトデータと同一のシフトデータがない場合は、制御部１３は、図３に示す未使用ブロック管理テーブルから、例えば現在設定されているシフトデータ（Ｖs3とする）に最も近いシフトデータ（Ｖs2とする）のグループに属するブロックアドレスを選択する。具体例としては、図３に示すように、当該グループに属するブロックアドレスのリストの先頭要素であるブロックアドレスＢ２を書き込み先ブロックとして選択する。
【００４３】
制御部１３は、選択後に未使用ブロック管理テーブルから当該ブロックアドレス（Ｂ２）を削除する。さらに、制御部１３は、図４に示すブロックステータステーブルの当該ブロックアドレス（Ｂ２）の「状態」の値を未使用から使用中に変更する。このような処理後に、制御部１３は、メモリインタフェース１２に対してライトコマンドを発行する（ブロック７０３）。フラッシュメモリ１１内のコントローラは、制御部１３からのライトコマンド及びデータに基づいて、図２に示すように、未使用ブロック（アドレスＢ２）に対してホストからの書き込み要求のデータを書き込む。制御部１３は、ライトコマンド成否のステータスをホストに送信し、書き込み動作を終了する。
【００４４】
なお、本実施形態では、図３に示すように、未使用ブロック管理テーブルの各要素は、図４に示すブロックステータステーブルに格納されたブロックアドレスに対応するシフトデータが同一となるように水平方向に配置され、垂直方向にはシフトデータの値が上から下へ昇順になるように配置されている。未使用ブロック管理テーブルの形態は、これに限定されるものではなく、少なくとも値であるブロックアドレスが同一シフトデータ毎にグループ化されて、グループに対応するシフトデータの値が特定されるものであれば良い。このため、例えばシフトデータをキーとして、ブロックアドレスを値としたハッシュテーブル形態の未使用ブロック管理テーブルでも良い。
【００４５】
また、本実施形態では、ＳＳＤの消去動作、読み出し動作、書き込み動作は、ホストからの要求に応じて発行されるコマンドに基づいて実行される場合について説明したが、これに限定されるものではない。例えばコンパクション処理等のＳＳＤの内部での他のイベントをトリガーとして発行されるコマンドに基づいて実行される場合も含まれる。
【００４６】
以上のように本実施形態によれば、データを書き込む書き込み動作時に、フラッシュメモリ１１内の未使用ブロックを書き込み先ブロックとして選択する場合に、読み出し動作時のシフトデータとして現在設定されているシフトデータと同一のシフトデータが設定された未使用ブロックを優先的に選択する。このため、選択された未使用ブロックに書き込まれたデータを読み出す場合には、現在設定されているシフトデータを変更することなく、読み出し動作を実行できる。
【００４７】
ここで当然ながら、読み出し動作時には、図６のブロック６０６，６０８に示すように、読み出し要求のブロックに設定されているシフトデータに基づいて、現在設定されているシフトデータを変更する可能性がある。具体例として、図２に示すように、レジスタ１１ｍ（ｍ＝０〜７）に設定されているシフトデータが「Ｖs1」の場合に、読み出し要求のブロックがアドレスＢ５であれば、レジスタ１１ｍに設定されているシフトデータＶs1を「Ｖs2」に変更することになる。
【００４８】
このような場合、本実施形態であれば、次の書き込み動作時には、変更したシフトデータＶs2が設定されている未使用ブロック（例えばアドレスＢ２）を優先的に選択する。従って、このような未使用ブロックの優先的な選択処理の繰り返しにより、読み出し動作時には、各ブロックに対応するシフトデータが同一である確率が高くなり、シフトデータを変更する頻度が減少する。特に、ＳＳＤでは、シーケンシャルライト動作の実行時に選択した各ブロックをシーケンシャルリード動作する場合が多い。こため、シフトデータの変更頻度が減少することにより、結果としてシーケンシャルリード動作の処理速度が向上することになる。
【００４９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５０】
１０…メモリコントローラ（ＳＳＤコントローラ）、
１１…NAND型フラッシュメモリ、１２…メモリインターフェース、
１３…制御部、１４…テーブル管理部、１５…未使用ブロック管理テーブル格納部、
１６…ブロックステータステーブル格納部、１７…未使用ブロック登録位置決定部、
１８…未使用ブロック登録指示部、１９…未使用ブロック選択部、
２０…システムバス、２１…読み出し電圧設定更新部、
２２…読み出し電圧設定格納部、２３…読み出し電圧設定取得部、
１１０〜１１７…レジスタ。
【図１】
2013196613.tif 000003
【図２】
2013196613.tif 000004
【図３】
2013196613.tif 000005
【図４】
2013196613.tif 000006
【図５】
2013196613.tif 000007
【図６】
2013196613.tif 000008
【図７】
2013196613.tif 000009