(57)【要約】      （修正有）【課題】Ｔｒｉｍコマンドに対応する半導体記憶装置を提供する。【解決手段】チップ内の各ブロックを、複数ページから成る第１ページ集合と、複数ページから成る第２ページ集合に分割する。論理アドレス空間を複数グループに分割し、各グループを複数ラインに分割する。複数チップの各々から所定数のブロックを集めてブロックユニットを複数組作成し、所定数のブロックユニットを標準ブロックユニット、それ以外を予備ブロックユニットとする。各標準ブロックユニットには１つのグループを対応付ける。標準ブロックユニットを構成する複数ブロックの第１ページ集合のページに対応グループのデータを格納し、第２ページ集合の未書き込みページはそのグループデータの更新データを記録する。メモリコントローラは、Ｔｒｉｍコマンドに応じて、その論理アドレスを含むグループとその不要なラインとを特定し、そのライン番号をライン管理テーブルに記録する。【選択図】図６Ａ
2011090496.tif 000002
【特許請求の範囲】
【請求項１】
メモリコントローラと複数のフラッシュメモリチップとを備え、
前記メモリコントローラは、前記複数のフラッシュメモリチップを制御するために前記フラッシュメモリチップに接続され、
前記複数のフラッシュメモリチップの各々は、前記メモリコントローラの指示で一括消去可能なブロックを複数含み、
前記ブロックの各々は、前記メモリコントローラが書込単位とするページを複数含み、
前記メモリコントローラは、前記各ブロックを、複数の前記ページから成る第１ページ集合と、複数の前記ページから成る第２ページ集合とに分割し、
論理アドレス空間を複数のグループに分割し、前記グループの各々を複数のラインに分割し、
前記複数のフラッシュメモリチップの各々から、所定数の前記ブロックを集めてブロックユニットを複数組作成し、
所定数の前記ブロックユニットを標準ブロックユニット、それ以外の前記ブロックユニットを予備ブロックユニットとして管理し、
前記標準ブロックユニットの各々に１つの前記グループを対応付け、
前記標準ブロックユニットを構成する複数の前記ブロックの前記第１ページ集合内の前記ページに、対応する前記グループのデータを格納し、
前記標準ブロックユニットを構成する複数の前記ブロックの前記第２ページ集合内の前記ページ中に、前記対応グループデータの更新データを記録するための未書き込みの前記ページを有する半導体記憶装置であって、
前記グループの各々について、前記グループに所属する各前記ラインが有効か無効かの状態を示すテーブルを持ち、
前記メモリコントローラは、不要論理アドレス範囲の情報を含む不要アドレス通知コマンドの受信に応じて、
前記不要論理アドレス範囲を含む不要対象前記グループと不要対象前記ラインとを特定し、
前記不要対象グループの前記テーブルにおける前記不要対象ラインの状態を無効状態に設定することを特徴とする半導体記憶装置。
【請求項２】
請求項１に記載の半導体記憶装置であって、
前記メモリコントローラは、ライト先論理アドレスとライトデータとを含むライトコマンドの受信に応じて、
前記ライト先論理アドレスを含むライト先前記ラインを特定し、
前記ライト先グループの前記テーブルにおける前記ライト先ラインの状態を有効状態に設定することを特徴とする半導体記憶装置。
【請求項３】
請求項１または２に記載の半導体記憶装置であって、
前記メモリコントローラは、前記ライトコマンドの受信に応じて、
前記ライト先論理アドレスを含むライト先前記グループを特定し、
前記ライトデータを、前記ライト先グループのデータの更新データとして、前記第２ページ集合内の前記未書き込みページに書き込み、
前記メモリコントローラは、前記不要アドレス通知コマンドの受信に応じて、
前記不要論理アドレス範囲を含む不要対象前記グループと不要対象前記ラインとを特定し、
前記不要対象ラインを示す情報を、前記不要対象グループの前記第２ページ集合内の前記未書き込みページに書き込むことを特徴とする半導体記憶装置。
【請求項４】
請求項１〜３のいずれか１項に記載の半導体記憶装置であって、
前記標準ブロックユニットの前記第２ページ集合内の前記未書き込みページが不足している、再構成対象前記グループについて、
前記予備ブロックユニットの１つを選択し、前記再構成対象グループのデータを前記対応標準ブロックユニットから前記選択予備ブロックユニットに移動するときに、
前記再構成対象グループのデータのうち、前記不要対象ライン以外の前記ラインのデータを前記選択予備ブロックユニットの前記第１ページ集合に移動して、前記第１ページ集合のサイズを削減し、
当該削減されたサイズの分だけ、前記選択予備ブロックユニットの前記第２ページ集合のサイズを拡張することを特徴とする半導体記憶装置。
【請求項５】
請求項１〜４のいずれか１項に記載の半導体記憶装置であって、
前記メモリコントローラは、リード元論理アドレスを含むリードコマンドの受信に応じて、
前記リード元論理アドレスを含むリード元前記グループとリード元前記ラインとを特定し、
前記リード元グループの前記テーブルを参照し、
前記リード元ラインの状態が有効状態に設定されている場合は、前記リード元グループに対応する前記標準ブロックユニットに格納されているデータを出力し、
前記リード元ラインの状態が無効状態に設定されている場合は、前記リード元グループに対応する前記標準ブロックユニットに格納されていない所定の無効データを出力することを特徴とする半導体記憶装置。
【請求項６】
一括消去可能なブロックを複数含み、前記ブロックの各々が、書込単位であるページを複数含む、フラッシュメモリチップと、
第１のブロックに割当てた論理アドレスに対応する複数の前記ページの各々が有効か無効かの状態を示す第１のテーブルと、
前記第１のブロックのガベジコレクションに伴って、前記第１のテーブルで前記有効状態を示す前記ページのデータを、第２のブロックのオリジナルデータ用ページを構成する第１のページにコピーし、前記第２のブロックに含まれ、前記オリジナルデータ用ページ以外を構成する第２のページを更新データ用ページとし、前記第１のテーブルの内容をコピーした第２のテーブルを前記第２のブロックに対応させて設ける、前記フラッシュメモリチップに接続したメモリコントローラとを有することを特徴とする半導体記憶装置。
【請求項７】
請求項６に記載の半導体記憶装置であって、
前記第１及び第２のテーブルの各々は、複数の前記フラッシュメモリチップの各々から選択した複数の前記第１のブロックに割当てた論理アドレスに対応する、前記ページの集合であるラインの各々が有効か無効かの状態を示すことを特徴とする半導体記憶装置。
【請求項８】
請求項７に記載の半導体記憶装置であって、
前記メモリコントローラは、不要論理アドレス範囲の情報を含む不要アドレス通知コマンドの受信に応じて、
前記不要論理アドレス範囲に対応する不要対象前記ラインを特定し、
前記不要対象グループの前記第２のテーブルにおける前記不要対象ラインの状態を無効状態に設定することを特徴とする半導体記憶装置。
【請求項９】
請求項８に記載の半導体記憶装置であって、
前記メモリコントローラは、ライト先論理アドレスとライトデータとを含むライトコマンドの受信に応じて、
前記ライト先論理アドレスを含むライト先前記ラインを特定し、
前記ライト先グループの前記第２のテーブルにおける前記ライト先ラインの状態を有効状態に設定することを特徴とする半導体記憶装置。
【請求項１０】
一括消去可能なブロックを複数含む複数のフラッシュメモリチップと複数の前記フラッシュメモリチップに接続するメモリコントローラとを備え、前記ブロックの各々は、前記メモリコントローラが書込単位とするページを複数含む半導体記憶装置における、前記メモリコントローラによる制御方法であって、
前記各ブロックを、複数の前記ページから成る第１ページ集合と、複数の前記ページから成る第２ページ集合とに分割し、
論理アドレス空間を複数のグループに分割し、前記グループの各々を複数のラインに分割し、
前記複数のフラッシュメモリチップの各々から、所定数の前記ブロックを集めてブロックユニットを複数組作成し、
所定数の前記ブロックユニットを標準ブロックユニット、それ以外の前記ブロックユニットを予備ブロックユニットとして管理し、
前記標準ブロックユニットの各々に１つの前記グループを対応付け、
前記標準ブロックユニットを構成する複数の前記ブロックの前記第１ページ集合内の前記ページに、対応する前記グループのデータを格納し、
前記標準ブロックユニットを構成する複数の前記ブロックの前記第２ページ集合内の前記ページ中に、前記対応グループデータの更新データを記録するための未書き込みの前記ページを有し、
前記グループの各々について、前記グループに所属する各前記ラインが有効か無効かの状態を示すテーブルを持ち、
前記メモリコントローラは、不要論理アドレス範囲の情報を含む不要アドレス通知コマンドの受信に応じて、
前記不要論理アドレス範囲を含む不要対象前記グループと不要対象前記ラインとを特定し、
前記不要対象グループの前記テーブルにおける前記不要対象ラインの状態を無効状態に設定することを特徴とする制御方法。
【請求項１１】
請求項１０に記載の制御方法であって、
前記メモリコントローラは、ライト先論理アドレスとライトデータとを含むライトコマンドの受信に応じて、
前記ライト先論理アドレスを含むライト先前記ラインを特定し、
前記ライト先グループの前記テーブルにおける前記ライト先ラインの状態を有効状態に設定することを特徴とする制御方法。
【請求項１２】
一括消去可能なブロックを複数含み、前記ブロックの各々が、書込単位であるページを複数含む、フラッシュメモリチップと、第１のブロックに割当てた論理アドレスに対応する複数の前記ページの各々が有効か無効かの状態を示す第１のテーブルと、前記フラッシュメモリチップに接続したメモリコントローラとを有する半導体記憶装置における、前記メモリコントローラによる制御方法であって、
前記第１のブロックのガベジコレクションに伴って、前記第１のテーブルで前記有効状態を示す前記ページのデータを、第２のブロックのオリジナルデータ用ページを構成する第１のページにコピーし、
前記第２のブロックに含まれ、前記オリジナルデータ用ページ以外を構成する第２のページを更新データ用ページとし、
前記第１のテーブルの内容をコピーした第２のテーブルを前記第２のブロックに対応させて設けることを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体記憶装置に関し、特に不揮発性メモリの格納データの更新時の技術に関する。
【背景技術】
【０００２】
従来、フラッシュメモリを記憶媒体とする半導体記憶装置にとって、セクタやブロック上にある全てのユーザデータ、すなわち予備ブロック等を除き論理アドレスにマップされているブロックの格納データは、全て有用なものとして管理されてきた。ユーザが消去したファイルが占有していたクラスタに割り当てられていたセクタやブロックも、記憶装置は有用なデータが記録されているものとしてその内容を引き続き維持する。ガベジコレクションや新規データの書き込みの際にブロック消去をする必要が生じた場合も、記憶装置はそのデータをそのまま書き戻す。これは記憶装置にとって、性能上および製品寿命上のオーバヘッドの一因になる。記憶装置自身は、セクタやブロックがＯＳやユーザから見て、使われているかどうかを知り得ない。しかし、ＯＳからそのセクタやブロックが使われていない、そのセクタやブロックに書かれているデータが必要とされていないと記憶装置が分かれば、そのデータを書き戻す必要はなくなる。また、その際に使われないメモリ領域を利用することで、ウェアレベリング等の自由度が大幅に増す。
【０００３】
そこで、ＯＳから記憶装置に不要な論理アドレス範囲を教える手段として提案されているのがＴｒｉｍコマンドである。Ｔｒｉｍコマンドは、ＯＳから記憶装置に指定アドレス範囲がＯＳにとって不要になったことを通知する。不要になったことを通知するのみで、不要になったアドレス部分をどう扱うかは記憶装置内部のメモリコントローラに委ねる。ただし、その指定アドレス範囲に対して、Ｔｒｉｍコマンド後にデータが書き込まれた場合、それは再び有用データとして扱う。Ｔｒｉｍコマンドは、２００９年５月現在、ＡＴＡ（ＡＴ Ａｔｔａｃｈｍｅｎｔ）の標準化を行なうＩＮＣＩＴＳ（米国規格協会ＡＮＳＩの諮問機関）のＴ１３技術委員会に、「Data Set Management Commands Proposal for ATA8-ACS2」として提案されている。Data Set Management Commandsとは、ＯＳ側から記憶装置側へさまざまなデータ属性を伝えるためのコマンドセットを指し、その最初の標準として具体化しているのが、不要という属性を通知するＴｒｉｍコマンドである。なお、Ｔｒｉｍコマンドに未対応の記憶装置はそのコマンドを無視し、不要データも有用データとして維持する。
【０００４】
一方、特許文献１には、以下のような制御方式を特徴として持つ半導体記憶装置が記載されている。すなわち、半導体記憶装置内部のメモリコントローラが、同じく内部のフラッシュメモリチップ内の各ブロックを複数ページから成る第１ページ集合と、複数ページから成る第２ページ集合に分割する。一方、装置外部から見える論理アドレス空間を複数グループに分割し、各グループを複数ラインに分割する。そして、複数チップの各々から所定数のブロックを集めてブロックユニットを複数組作成し、このうち所定数のブロックユニットを標準ブロックユニット、それ以外を予備ブロックユニットとして管理する。各標準ブロックユニットには１つのグループを対応付け、標準ブロックユニットを構成する複数ブロックの第１ページ集合内のページに対応グループのデータを格納し、第２ページ集合内のページにそのグループデータの更新データを記録するための未書き込みページを設ける。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−６４２５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載される半導体記憶装置は、Ｔｒｉｍコマンドに対応していない。したがって、この半導体記憶装置は、Ｔｒｉｍコマンドを無視し、不要データも有用データとして維持するので、Ｔｒｉｍコマンドで指定された論理アドレス範囲に記録されていた不要データも依然として管理せざるを得ない。ガベジコレクションが発生した際には、もはや不要となったデータの移動によって、処理時間の無駄やフラッシュメモリの書き換え寿命の浪費が発生することが課題である。
【課題を解決するための手段】
【０００７】
本発明は、以下を特徴とする半導体記憶装置を提供する。
【０００８】
メモリコントローラと複数のフラッシュメモリチップとを備える。それらのチップ内の各ブロックを、複数ページから成る第１ページ集合(オリジナルデータ用ページ)と、複数ページから成る第２ページ集合(更新データ用ページ)に分割する。一方、論理アドレス空間を複数グループに分割し、各グループを複数ラインに分割する。そして、複数チップの各々から所定数のブロックを集めてブロックユニットを複数組作成する。このうち所定数のブロックユニットを標準ブロックユニット、それ以外を予備ブロックユニットとして管理する。各標準ブロックユニットには１つのグループを対応付ける。そして、標準ブロックユニットを構成する複数ブロックの第１ページ集合のページに対応グループのデータを格納し、第２ページ集合の未書き込みページはそのグループデータの更新データを記録するためのページとする。メモリコントローラは、不要な論理アドレス範囲を含むＴｒｉｍコマンドに応じて、その論理アドレスを含むグループとその不要なラインとを特定し、そのライン番号をライン管理テーブルに記録する。そして、第２ページ集合の未書き込みページが不足した標準ブロックユニットのグループデータを予備ブロックユニットに移動するとき、その不要ラインを除いたグループデータを移動し、第１ページ集合のページ容量を削減し、それ以降の更新データを記録する第２ページ集合のページ容量を拡張する。削減したラインを含めて、第１ページ集合の各ラインの有効、無効をライン管理テーブルを用いて管理する。
【発明の効果】
【０００９】
本発明によれば、ガベジコレクションの発生頻度が低減され、平均的に見てライト性能が向上するという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】半導体記憶装置の内部構造を示す図である。
【図２】半導体記憶装置の論理アドレス空間のフラッシュメモリの物理アドレス空間への配置を説明する図である。
【図３Ａ】更新データ用ページへの更新データの記録を説明する図である。
【図３Ｂ】更新データ用ページへの更新データの記録の状態を管理するテーブルを示す図である。
【図４Ａ】Ｔｒｉｍ対象ラインを含まないグループのガベジコレクションにおける、データ移動元、移動先のブロックユニットの状態を示す図である。
【図４Ｂ】Ｔｒｉｍ対象ラインを含まないグループのガベジコレクションにおける、データ移動元、移動先のブロックユニットの状態の管理テーブルを示す図である。
【図５Ａ】論理アドレスのＴｒｉｍ範囲とグループとの対応関係を示す図である。
【図５Ｂ】論理アドレスのＴｒｉｍ範囲とグループ内のラインとの対応関係を示す図である。
【図６Ａ】Ｔｒｉｍコマンドやライトコマンド応じて更新データ用ページへデータを記録する過程を説明する図である。
【図６Ｂ】Ｔｒｉｍコマンドやライトコマンド応じて更新データ用ページへデータを記録する過程を説明する図である。
【図７Ａ】Ｔｒｉｍ対象ラインを含むグループのガベジコレクションにおける、データ移動先のブロックユニットの状態を示す図である。
【図７Ｂ】Ｔｒｉｍ対象ラインを含むグループのガベジコレクションにおける、データ移動先のブロックユニットの状態の管理テーブルを示す図である。
【図８】Ｔｒｉｍコマンドに対してメモリコントローラが実行する処理を示すフローチャートである。
【図９】ライトコマンドに対してメモリコントローラが実行する処理を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、実施形態について説明する。図１は、本実施形態の半導体記憶装置１０００の内部構造を簡単に表したものである。半導体記憶装置１０００は、ホストインタフェース１０１０、メモリコントローラ１０２０、ホストデータバッファ１０３０、テンポラリデータバッファ１０４０、複数（例えば１６枚）のフラッシュメモリチップ１１００〜１１１５で構成される。
【００１２】
ホストインタフェース１０１０は外部のホスト(ホストコンピュータまたはＣＰＵ)と接続されるインタフェース機構であり、ホストからリード／ライト要求コマンドに応答して、フラッシュメモリに格納されたデータをホストに送信したり、フラッシュメモリに格納すべきライトデータをホストから受信したりする。なお、ホストは、リード／ライトを要求するデータの論理的な格納位置を論理アドレス（以下、ＬＢＡ（Ｌｏｇｉｃａｌ Ｂｌｏｃｋ Ａｄｄｒｅｓｓ））によって指定する。このアドレスはフラッシュメモリチップ１１００〜１１１５をメモリコントローラ１０２０がアクセスする時に用いる物理アドレスとは異なる仮想的なアドレスである。
【００１３】
ホストインタフェース１０１０の機構およびコマンドやデータの送受信のプロトコルについては、標準的なハードディスク装置と互換性のあるインタフェース仕様（例えば、パラレルＡＴＡ、シリアルＡＴＡ、ＳＣＳＩ）に準拠することが好ましい。
【００１４】
ホストデータバッファ１０３０は、主にＲＡＭ（Ｒａｎｄｏｍ Ａｃｃｅｓｓ Ｍｅｍｏｒｙ）により構成される揮発性メモリである。ホストからのライト要求によって受信したライトデータは、フラッシュメモリチップ１１００〜１１１５に書き込まれる前に、フラッシュメモリチップに入力すべき所定量に達するまでホストデータバッファ１０３０に格納される。ホストからのリード要求に応答して送信すべきリードデータは、フラッシュメモリチップ１１００〜１１１５から読み出された後に、ホストに出力すべき所定量に達するまでホストデータバッファ１０３０に格納される。
【００１５】
テンポラリデータバッファ１０４０は、主にＲＡＭにより構成される揮発性メモリである。フラッシュメモリチップ１１００〜１１１５のある物理アドレスに格納されたデータを別の物理アドレスに移動する必要が生じたときに、フラッシュメモリチップから読み出した当該データを一時的にテンポラリデータバッファ１０４０に保持する。
【００１６】
メモリコントローラ１０２０は、ホストインタフェース１０１０、ホストデータバッファ１０３０、テンポラリデータバッファ１０４０、フラッシュメモリチップ１１００〜１１１５と接続され、それらを制御するマイクロプロセッサである。これは、上に述べたような、ホストからのリード／ライト要求コマンドの解釈、ホストとの間のデータ送受信、ホストデータバッファ１０３０やテンポラリデータバッファ１０４０へのアクセス（リード／ライト）、フラッシュメモリチップ１１００〜１１１５へのアクセス（リード／プログラム／消去）を実行する。また、メモリコントローラ１０２０は、ホストから指定されたＬＢＡがどのフラッシュメモリチップのどの物理アドレスに対応するかのアドレスマップをテーブル（アドレスマップテーブル）によって管理している。メモリコントローラ１０２０は、ＲＡＭなどの揮発性メモリを内蔵し、半導体記憶装置１０００の電源投入時にその中にアドレスマップテーブルを作成する（アドレスマップテーブルが、どのようなテーブルかについては図３（ｂ）や図７（ｂ）を用いて後に述べる。）。さらに、各フラッシュメモリチップに格納されるデータを保障するためのＥＣＣ（エラー訂正コード）の計算や検証も実行する。なお、アドレスマップテーブルはメモリコントローラ１０２０内部でなくても、メモリコントローラ１０２０からアクセス可能な揮発性メモリ上であればどこでもよい。
【００１７】
各フラッシュメモリチップ内の不揮発性メモリ領域は、複数（例えば、４０９６個）のブロック１３００〜１３１１で構成される。格納されたデータはブロックを単位として消去される。ブロックは、複数（例えば、６４個）のページ１４００〜１４６３で構成される。フラッシュメモリに格納すべきデータはページを単位としてプログラムされる。各ブロック内の６４個のページをプログラムする順序は固定されており、１４００、１４０１、…、１４６３の順でプログラムしなければならない。また、プログラム済みのページは上書きが禁止されており、そのページが属するブロックを消去しなければ、再びそのページをプログラムすることができない。さらに、ページは複数（例えば、４個）のセクタデータ１５１０〜１５１３（各５１２バイト）を記憶するためのデータ部と、それらのセクタデータに関する情報１５２０〜１５２３（各１６バイト）を記憶するための冗長部から成る。ページに格納されたデータはセクタを単位としてリードできる。メモリコントローラ１０２０は、これらの冗長部に、各セクタデータの内容を保障するためのＥＣＣや、各セクタデータのＬＢＡなどを格納する。このＬＢＡは、半導体記憶装置１０００の電源投入時にアドレスマップテーブルを構成するために、メモリコントローラ１０２０によって読み出され、参照される。
【００１８】
各チップにおいてブロックは0番から４０９５番までナンバリングされており、偶数番ブロックの集合と奇数番ブロックの集合はそれぞれプレイン０、プレイン１と呼ばれる。プレイン毎にページレジスタ（１２００、１２０１）が備えられており、各プレイン内のブロックに含まれるページからリードしたデータ、またはそのページにプログラムするデータはそれぞれのページレジスタに一時的に格納される。各プレインは消去／プログラム回路を独立に持っており、隣接する２ブロック（すなわち、整数Ｘ＝０〜２０４７について２Ｘ番と（２Ｘ＋１）番の２ブロック）を同時に消去することができる。また、それら隣接２ブロック内の同一番号の２ページを同時にプログラムすることができる。ただし、リード回路は共通であるため、１ページずつでしかリードできない。
【００１９】
メモリコントローラ１０２０は、各ブロックを構成する６４個のページを、データ管理上の用途として２種類に分ける。基本的に、前部６０ページ（１４００〜１４５９）をオリジナルデータ用ページ１４７０とし、後部４ページ（１４６０〜１４６３）を更新データ用ページ１４８０とする。ただし、本実施例の半導体記憶装置１０００は、Ｔｒｉｍコマンドの受信に応じて、一部のブロックについて、オリジナルデータ用ページを６０ページ未満（例えば６０−Ｔ）に変更し、更新データ用ページを５ページ以上（例えば４＋Ｔ）に変更することがある。変化量Ｔがどのように決まるかは後述する。なお、この分類は論理的なものであり、両者に含まれるページの物理構造に一切違いはない。
【００２０】
図２は、メモリコントローラ１０２０が、ＬＢＡで示される論理空間のデータをフラッシュメモリチップ１１００〜１１１５内のブロック・ページに基本的にどのように格納するかを示した図である。この格納方式は特許文献１に従うものだが、本実施形態ではＴｒｉｍコマンドの受信に応じて、一部のブロック・ページにおいて格納方式が変化する。それについては図７を用いて後述する。
【００２１】
まず、１９２０ページを１グループとして、ＬＢＡで示される論理空間を複数のグループに分割する。例えば、０番から１９９９番の番号を付した２０００個のグループ２０００〜２０１０に分けることとする。次に、３２ページを１ラインとして、各グループを６０個のライン２１００〜２１５９に分割する。それらのラインに０番から５９番までナンバリングする。そして、各ライン２１７０を２ページ単位で１６個（２２００〜２２１５）に分割する。
【００２２】
一方、１６枚のチップそれぞれから隣接する２ブロックを選び、３２ブロックからなるブロックユニット２３００を構成する。図２では、一例として、第０チップから２ａ番と（２ａ＋１）番の２ブロック、第１チップから２ｂ番と（２ｂ＋１）番の２ブロック、第２チップから２ｃ番と（２ｃ＋１）番の２ブロック、第１５チップから２ｐ番と（２ｐ＋１）番の２ブロックを選んだ場合を示している。この２３００のようなブロックユニットを、ＬＢＡで示される論理空間のグループに相当する２０００組作成し、０番から１９９９番の番号を付す。これらを標準ブロックユニットと呼ぶ。また、標準ブロックユニット（２３００など）に選ばれなかった隣接する２ブロックを１６枚のチップからそれぞれ選び、３２ブロックからなるブロックユニット２４００を構成する。図２では、一例として、第０チップから２ａ’番と（２ａ’＋１）番の２ブロック、第１チップから２ｂ’番と（２ｂ’＋１）番の２ブロック、第２チップから２ｃ’番と（２ｃ’＋１）番の２ブロック、第１５チップから２ｐ’番と（２ｐ’＋１）番の２ブロックを選んだ場合を示している。この２４００のようなブロックユニットをできるだけ多く作成する。これらを予備ブロックユニットと呼ぶ。もし、１６枚のチップに不良ブロックが１つも存在しなければ、予備ブロックユニット（２４００など）は４８組（最大数）作成できる。
【００２３】
次に、第Ｎグループ内のデータ格納先を第Ｎ標準ブロックユニット２３００に割り当てる。ここで、Ｎ＝０〜１９９９である。さらに、当該グループの第Ｍラインのデータ格納先を当該標準ブロックユニットの各隣接２ブロックの第Ｍページに割り当てる。ここで、Ｍ＝０〜５９である。当該ラインを１６個（２２００〜２２１５）に分割したデータの格納先をそれぞれチップ０〜１５内の前記第Ｍページに割り当てる。すなわち、標準ブロックユニット２３００の斜線部（１９２０ページ）が第Ｎグループのデータの格納先となる。これは図１のオリジナルデータ用ページ１４７０（６０ページ）を２ブロック分×１６チップ分集めたものに相当する。その結果、標準ブロックユニット２３００には１２８ページの未書き込み領域が残される。これは図１の更新データ用ページ１４８０（４ページ）を２ブロック分×１６チップ分集めたものに相当する。なお、グループデータを格納するときは、各ページの冗長部に、そのページデータのＬＢＡ及びオリジナルデータであることを示す識別値ＯＩＤを含めてプログラムする。メモリコントローラ１０２０は、斜線部内のグループデータの一部が更新された時に、更新データの記録先としてこの未書き込み領域を利用する。
【００２４】
一方、予備ブロックユニット２４００は、グループのデータ格納先として割り当てられておらず、全体的に未書き込みとなっている。メモリコントローラ１０２０は、ある標準ブロックユニット２３００の未書き込み領域が更新データで満たされた場合に、予備ブロックユニット２４００を１つ選び、その標準ブロックユニット２３００内の有効データのみをその予備ブロックユニット２４００のオリジナルデータ用ページ１４７０部分へとコピーする。そして、以後はそれを新たな標準ブロックユニット２３００として利用する。その後、コピー元の標準ブロックユニット２３００は消去されて新たな予備ブロックユニット２４００としてリサイクルされる。
【００２５】
図３Ａは、標準ブロックユニット２３００内に格納されたグループデータの一部が更新された時に、更新データが記録されていく状況を示した図である。更新対象のグループデータはページ単位で管理する。更新対象グループデータのページアドレスをオリジナルアドレスと呼ぶ。第Ｘライン内で第Ｙチップ上のプレインＺのページに格納されたデータのオリジナルアドレスＷは、Ｗ＝３２Ｘ＋２Ｙ＋Ｚで表される。その取り得る値の範囲は０〜１２７である。ここで、整数Ｘ＝０〜５９、整数Ｙ＝０〜１５、整数Ｚ＝０又は１である。
【００２６】
図３Ｂは、グループデータに割り当てられた標準ブロックユニット２３００を構成する１６組の隣接２ブロックのアドレスを管理するブロックマップテーブル３２００と、標準ブロックユニット２３００内の未書き込み領域に記録された更新データを管理する更新データマップテーブル３３００を示した図である。両テーブルともメモリコントローラ１０２０内に含まれる揮発性ＲＡＭ上に構成される。
【００２７】
ブロックマップテーブル３２００は、隣接２ブロックのアドレスを１６枚のチップ（第０〜１５）毎に記録するため、チップ番号３２０１とブロック番号３２０２の対応表として構成されている。メモリコントローラ１０２０は、このブロックマップテーブル３２００を、標準ブロックユニット２３００の総数、つまり２０００個保持する。
【００２８】
更新データマップテーブル３３００は、未書き込み領域内の更新先ページをインデックスとして、対応するオリジナルアドレスを管理するように構成されている。メモリコントローラ１０２０は、この更新データマップテーブル３３００を、標準ブロックユニット２３００の総数、つまり２０００個保持する。
【００２９】
更新データマップテーブル３３００は、１２８個存在する更新先ページを表すために、ページ番号３３０１、チップ番号３３０２、プレイン番号３３０３を用いる。そして、装置外部からのライト要求コマンドによって当該グループデータ内に更新データが発生する度に、その更新データを記録した更新先ページについて、更新対象セクタ３３０４、オリジナルアドレス３３０５、更新先ページ状態３３０６を記録する。更新対象セクタ３３０４は、更新先ページ内に含まれる４つのセクタ（第０〜３セクタ）にそれぞれ更新データが格納されているか否かを０と１で示す。１は格納、０は非格納を意味する。例えば、００１０は第２セクタのみ更新データとして格納していることを示す。オリジナルアドレス３３０５は、上式で示したＷの値を示す。更新先ページ状態３３０６は、更新先ページが未書き込みならば「空き」、最新の更新データを記録していれば「有効」、古い更新データを記録していれば「無効」を示す。更新データが次々と記録されるにつれて、更新先ページ状態３３０６が「空き」の更新先ページが消費されていく。また、同じオリジナルアドレスのセクタが２回以上更新されると、最新でない更新データを記録している更新先ページの更新先ページ状態３３０６は「無効」になる。
【００３０】
図３Ａにおいて、例えば、Ｗ＝１のページの第２セクタデータＡ０がＡ１に更新された時には、未書き込み領域内の１ページを選び、（ここでは、第６０ページの第０チップのプレイン０とする。）その第２セクタにＡ１をプログラムする。Ｗ＝１のページで更新されていない３セクタについては記録する必要がないため、Ａ１以外の３セクタはプログラムしない。これにより、Ａ１を記録している更新先ページの状態３３０６「有効」になる。
【００３１】
例えば、Ｗ＝３６のページの第１、第２セクタデータＢ０、Ｃ０がそれぞれＢ１、Ｃ１に更新された時には、未書き込み領域内の１ページを選び、（ここでは、第６０ページの第０チップのプレイン１とする。）その第１、第２セクタにＢ１、Ｃ１をプログラムする。Ｗ＝３６のページで更新されていない２セクタについては記録する必要がないため、Ｂ１、Ｃ１以外の２セクタはプログラムしない。これにより、Ｂ１、Ｃ１を記録している更新先ページの状態３３０６は「有効」になる。
【００３２】
図３Ａには、同様に、Ｗ＝３２のページの第２セクタＤ０がＤ１に更新され、Ｗ＝３５のページの第０、第１セクタデータＥ０、Ｆ０がそれぞれＥ１、Ｆ１に更新され、Ｗ＝３０のページの第２、第３セクタデータＧ０、Ｈ０がそれぞれＧ１、Ｈ１に更新される様子が示されている。
【００３３】
Ｗ＝３６のページの第１、第２セクタデータＢ１、Ｃ１がそれぞれＢ２、Ｃ２に更新された時には、未書き込み領域内の１ページを選び、（ここでは、第６０ページの第２チップのプレイン１とする。）その第１、第２セクタにＢ２、Ｃ２をプログラムする。これにより、Ｂ２、Ｃ２を記録している更新先ページの状態３３０６は「有効」３３１０になり、Ｂ１、Ｃ１を記録している更新先ページの状態３３０６は「無効」３３１１になる。
【００３４】
ライン状態テーブル３４００は、特許文献１に開示されていないものだが、本実施形態においてＴｒｉｍコマンドに対応するために使用する管理テーブルとしてＲＡＭ上に実装する。基本的に、本実施形態の半導体記憶装置１０００が特許文献１の格納方式に従ってデータを管理しているグループについては、ライン状態テーブル３４００のライン状態を全て「有効」に設定する。
【００３５】
なお、図１に示したように、フラッシュメモリの各ページには冗長部１５２０〜１５２３が含まれている。更新先ページをプログラムする際には、対応するオリジナルアドレスＷ及び更新データであることを示す識別値ＵＩＤを冗長部内に含ませてプログラムする。その情報は半導体記憶装置１０００の起動時にメモリコントローラ１０２０によって読み出され、更新データマップテーブルやライン状態テーブルを作成するために使用される。
【００３６】
図４Ａの標準ブロックユニット２３００は、未書き込みページが無くなるまで更新データが記録された状況を示した図である。図中、オリジナルデータ用ページ１４７０内のＸは更新されたセクタデータを表し、更新データ用ページ１４８０内のＸは最新ではない更新セクタデータを表し、更新データ用ページ１４８０内のＯは最新の更新セクタデータを表す。この標準ブロックユニット２３００へ割り当てられているグループデータにさらなる更新データが発生した場合には、それを記録する場所がない。そこで、メモリコントローラ１０２０は、予備ブロックユニット２４００を用いて新たな記録場所を確保する。すなわち、標準ブロックユニット２３００のオリジナルデータ用ページ１４７０内のＸで示された各データに対応する最新の更新データを、更新データマップテーブル３３００を参照することによって、更新データ用ページ１４８０内のＯで示されたデータから見つけ、そのＸの部分をＯで置き換えたページデータを作り、予備ブロックユニット２４００の同一ページアドレスにコピーする。また、Ｘの部分を含まない未更新ページはそのまま予備ブロックユニット２４００の同一ページアドレスにコピーする。これらのコピーをグループデータの全ページに渡って実施する。この処理をガベジコレクションと呼ぶ。ガベジコレクションによって、更新データの未書き込みページが無くなった標準ブロックユニット２３００は、予備ブロックユニット２４００を用いて新たな標準ブロックユニット２３００として再構成される。
【００３７】
図４Ａの予備ブロックユニット２４００は、グループデータの全ページコピーが完了した状況を示した図である。図中、オリジナルデータ用ページ１４７０内のＯで示されたセクタは最新の更新データが格納されていることを表す。このとき、更新データ用ページ１４８０は全て未書き込みの状態である。ここが当該グループデータの新たな更新データの記録先となる。
図４Ｂは、以上のコピー手続きによる、当該グループのブロックマップテーブルと更新データマップテーブルの書き換え後の状態を示した図である。ブロックマップテーブル４２００では、各チップについて、隣接２ブロックのアドレス４２０２を、予備ブロックユニット２４００を構成するそれぞれのチップの隣接２ブロックのアドレスに書き換える。更新データマップテーブル４３００では、１２８個のエントリ全体について、更新対象セクタ４３０４とオリジナルアドレス４３０５の項目をクリアし、更新先ページ状態４３０６を「空き」に設定する。また、本実施形態では、ライン状態テーブル４４００は、ガベジコレクション直前のライン状態テーブルの状態を維持する。
【００３８】
以上が、特許文献１に基づく本実施形態における基本的なデータ格納方式である。
【００３９】
以下、図５〜９を用いて、本実施形態により開示される、Ｔｒｉｍコマンドに対応するためのデータ格納方式を説明する。
【００４０】
図５ＡはＬＢＡ空間においてＴｒｉｍコマンドによってＯＳから不要であると通知された３つのアドレス範囲の例を示す。１つ目のＴｒｉｍ範囲Ａ５０１０は、２つのグループ５００１、５００２にまたがる。このとき、Ｔｒｉｍ範囲Ａ５０１０に対応する、グループ５００１の後部ラインのデータと、グループ５００２の前部ラインのデータはフラッシュメモリ上で管理する必要がない。２つ目のＴｒｉｍ範囲Ｂ５０１１は、３つのグループ５００３、５００４、５００５にまたがる。このとき、Ｔｒｉｍ範囲Ｂ５０１１に対応する、グループ５００３の後部ラインのデータと、グループ５００４の全ラインのデータと、グループ５００５の前部ラインのデータはフラッシュメモリ上で管理する必要がない。３つ目のＴｒｉｍ範囲Ｃ５０１２は、１つのグループ５００６に含まれる。このとき、Ｔｒｉｍ範囲Ｃ５０１２に対応する、グループ５００６の中央部ラインのデータはフラッシュメモリ上で管理する必要がない。本実施形態では、グループ５０００のように、Ｔｒｉｍ範囲が重ならない場合は、特許文献１に基づくデータ格納方式により、全６０ラインのオリジナルデータとその更新データをブロックユニットで管理するが、グループ５００１〜５００６のように、Ｔｒｉｍ範囲が重なる場合は、６０本未満のラインのオリジナルデータとその更新データをブロックユニットで管理する。その際、オリジナルデータの量が減る分、更新データを格納する容量を増やすように制御する。すなわち、オリジナルデータ用ページと更新データ用ページの境界を、特許文献１のようなページＮｏ．６０の固定位置から小さいページ番号に向かって移動させる。グループ５００４のような場合が最大の移動となり、ブロックユニットが全て更新データ用ページとして利用される。このように更新データを格納できる容量を増やすことは、半導体記憶装置１０００のライト性能を向上させる効果がある。その根拠は後で定量的に示す。
【００４１】
図５Ｂは、Ｔｒｉｍコマンドで指定されたＬＢＡ範囲と、ブロックユニットで管理不要なラインとの対応関係を、Ｔｒｉｍ範囲Ｃ５０１２とグループ５００６を例に示したものである。ＯＳから通知されたＴｒｉｍ範囲Ｃ５０１２の先頭アドレスや末尾アドレスはラインの境界位置に一致するとは限らない。図５Ｂのように先頭アドレスがライン５１０２の途中にあったり、末尾アドレスがライン５１５７の途中にあったりする。本実施形態では、Ｔｒｉｍ範囲のアドレスに内包されるラインのみをＴｒｉｍ対象（不要ライン）とする。この例では、ライン５１０３〜５１５６の５４本をＴｒｉｍ対象とし、ライン５１０２、５１５７のような有用データを含むラインをＴｒｉｍ対象に含めない（有用ラインとする）。
【００４２】
本実施形態では、１グループ当たり６０本あるラインのうち、ＯＳが不要であると通知したＬＢＡ範囲内にあるラインについては「無効」、それ以外は「有効」とするライン状態テーブルをグループ毎に作成し、Ｔｒｉｍ対象ラインを管理する。したがって、この例では、ライン状態テーブルでライン番号Ｎｏ．３〜５６の状態を「無効」に、それ以外のラインの状態を「有効」に設定する。
【００４３】
図６Ａ及び図６Ｂを用いて、半導体記憶装置１０００がＴｒｉｍコマンドやライトコマンドを受信したときに、メモリコントローラ１０２０がブロックユニットの更新データ用ページにどういうデータをどのように格納するかを説明する。
【００４４】
ライトコマンドを受信したときは、特許文献１のようにライト先ＬＢＡから対象グループを求め、図６Ａのように、その対応ブロックユニット２３００の更新データ用ページの空きページにライトデータを順に記録し、更新データマップテーブルのエントリを変更していくが、その後、Ｔｒｉｍコマンドを受信したときは、通知されたＴｒｉｍ範囲から求めたＴｒｉｍ対象ライン番号を示す情報を、斜線部６０００のように更新データ用ページの空きページの１つに続けて記録する。なお、この情報はＴｒｉｍ範囲のＬＢＡなど、計算によってライン番号を特定できる情報であってもよく、１つの情報形式に限定されるものではない。また、Ｔｒｉｍ情報を書き込むときは、そのページの冗長部にＴｒｉｍ情報であることを示す識別値ＴＩＤを含めてプログラムする。この識別値ＴＩＤは半導体記憶装置１０００の起動時にメモリコントローラ１０２０によって読み出され、ライン状態テーブルを作成するために使用される。
【００４５】
Ｔｒｉｍ情報を記録した後も、ライトコマンドを受信したときは、図６Ｂのように、更新データ用ページの空きページが無くなるまで（不足するまで）ライトデータを順に記録していく。そして、ガベジコレクションが必要となったら、記録したＴｒｉｍ情報や更新データに基づいて、不要ラインを除いたグループデータを対象にガベジコレクションを行う。
【００４６】
ここで注意すべきは、不要ラインは斜線部６０００のＴｒｉｍ情報だけで定まるものではない。なぜなら、図６ＢのようにＴｒｉｍコマンド後にもライトコマンドを受け付けており、そのライト先ＬＢＡがＴｒｉｍ範囲のＬＢＡに重なっており、再び不要から有用に遷移したラインが存在する可能性があるからである。
【００４７】
そこで、メモリコントローラ１０２０は、ガベジコレクションの際にラインの不要／有用を即時に知ることができるように、ホストからのライトコマンドやＴｒｉｍコマンドに応じてライン状態テーブルを変更する。例えば、図６Ａのライン状態テーブル６１００は、Ｔｒｉｍコマンドにより通知されたＴｒｉｍ範囲により、ラインＮｏ．２３〜５９が不要になったことを示す。そして、図６Ｂのライン状態テーブル６２００は、その後のライトコマンドによるデータライトにより、ラインＮｏ．３５〜５９が再び有用に戻ったことを示す。この場合、ラインＮｏ．２３〜３４を除いたグループデータを対象にガベジコレクションを行う。
【００４８】
図７Ａおよび図７Ｂを用いて、不要ラインが含まれる図６Ｂのグループに対してガベジコレクションを行うときに、メモリコントローラ１０２０が新しいブロックユニットにどのようにグループデータを移動するかを説明する。
【００４９】
図７Ａのように、メモリコントローラ１０２０は、予備ブロックユニット６３００を図６Ｂのグループの新たな記録場所として確保する。まず、ライン状態テーブル６２００を参照し、「有効」状態の４８本のラインを選択する。それらのラインの各々について、図６Ｂの標準ブロックユニット２３００のオリジナルデータ用ページ内のＸで示されたデータに対応する最新の更新データを、更新データマップテーブルを参照することにより、更新データ用ページのＯで示されたデータから見つける。そのＸの部分をＯで置き換えたページデータを作り、予備ブロックユニット６３００にコピーする。Ｘの部分を含まない未更新ページはそのまま予備ブロックユニット６３００にコピーする。これらのコピーを「有効」状態のラインの全ページに渡って実施する。この例では、このコピーによって予備ブロックユニット６３００の斜線部（ページＮｏ．０〜４７）が書き込み済みとなる。この斜線部がオリジナルデータ用ページとなり、ブロックユニット６３００の残りの未書き込み部分（ページＮｏ．４８〜６３）が新たな更新データ用ページとして確保される。その容量は１６×３２＝５１２ページとなり、基本的な格納方式に従ったときの更新データ用ページ容量１２８ページの４倍に相当する。ゆえに、このグループデータは次回のガベジコレクションを実施するまで、従来の４倍の量の更新データを受け付けることができる。
【００５０】
図７Ｂは、ガベジコレクション時に、メモリコントローラ１０２０が本グループの各種管理テーブルに設定する内容を示す。まず、ブロックマップテーブル７０００には、ブロックユニット６３００を構成する各ブロックのブロックアドレスを設定する。そして、更新データマップテーブル７１００は、その容量を５１２ページ分の更新情報を格納できるように拡張し、その全エントリのページ状態を「空き」に設定する。最後に、ライン状態テーブル７２００は、ライン状態テーブル６２００の「有効／無効」状態をそのまま保持する。
【００５１】
図８は、半導体記憶装置１０００がホストからＴｒｉｍコマンドを受けて、メモリコントローラ１０２０が実行する処理の手順を示したものである。
【００５２】
メモリコントローラ１０２０は、Ｔｒｉｍコマンドを通じて、Ｔｒｉｍ対象のＬＢＡ範囲を示す情報を受信する（ステップ８０１０）。そのＬＢＡ範囲の値から、数値計算によって、それに対応するグループ番号とライン番号を特定する（ステップ８０２０）。次に、そのグループのライン状態テーブル（３４００や７２００など）で、そのライン番号のエントリを全て「無効」状態に設定する（ステップ８０３０）。そのグループの更新データマップテーブル（３３００や７１００など）で「空き」状態を示すエントリが存在するかを調査する（ステップ８０４０）。存在するならば、「空き」状態の更新データ用ページの１つにＴｒｉｍ対象のライン番号を示す情報を記録する（ステップ８０５０）。以上で処理を終わる。
【００５３】
一方、ステップ８０４０で「空き」状態のエントリが存在しないならば、そのグループのライン状態テーブル（３４００や７２００など）で「有効」状態のラインを選択し、それらのラインについてのみガベジコレクションを行う（ステップ８０６０）。すなわち、それらのラインに含まれるページに更新部分があれば、そのページに対する最新の更新セクタを、更新データマップテーブルを参照して更新データ用ページから読み出し、未更新のページ部分と結合して最新のページデータを作り、予備ブロックユニットにコピーする。全く未更新のページはそのまま予備ブロックユニットにコピーする。これらのコピー処理を上記「有効」ラインの全ページに渡って実施する。このガベジコレクションの後、ブロックマップテーブルに移動先の新しいブロックユニットの番号を設定する（ステップ８０７０）。そして、ライン状態テーブルで「有効」ラインの本数が（６０−Ｔ）本の場合、更新データマップテーブルのエントリ数を（４＋Ｔ）×３２ページ分に変更し、当該エントリの全てのページ状態を空きに設定する（ステップ８０８０）。以上で処理を終わる。
【００５４】
図９は、半導体記憶装置１０００がホストからライトコマンドを受けて、メモリコントローラ１０２０が実行する処理の手順を示したものである。
【００５５】
メモリコントローラ１０２０は、ライトコマンドを通じて、ライト対象のＬＢＡ、セクタ数とライトデータを受信する（ステップ９０１０）。そして、ライトすべき範囲のＬＢＡについて、数値計算により、それに対応するグループ番号とライン番号を特定する（ステップ９０２０）。そのグループの更新データマップテーブル（３３００や７１００など）でライトするページ数以上の数の「空き」状態エントリが存在するかを調査する（ステップ９０３０）。存在しないならば、そのグループのライン状態テーブル（３４００や７２００など）で「有効」状態のラインを選択し、それらのラインについてのみガベジコレクションを実行する（ステップ９０４０）。この処理は図８のステップ８０６０と同様である。その後、ブロックマップテーブルに移動先の新しいブロックユニットの番号を設定する（ステップ９０５０）。そして、ライン状態テーブルで「有効」ラインの本数が（６０−Ｔ）本の場合、更新データマップテーブルのエントリ数を（４＋Ｔ）×３２ページ分に変更し、当該エントリの全てのページ状態を空きに設定する（ステップ９０６０）。次に、新しいブロックユニットの更新データ用ページの未書き込みページの先頭からライトデータを格納する（ステップ９０７０）。最後に、ライン状態テーブルでライト対象のＬＢＡが含まれるラインの状態を「有効」に設定する（ステップ９０８０）。以上で処理を終わる。一方、ステップ９０３０で十分な「空き」状態のエントリが存在するならば、ステップ９０７０、９０８０を実行し、処理を終わる。
【００５６】
半導体記憶装置１０００がホストからリードコマンドを受けて、メモリコントローラ１０２０が実行する処理の手順を以下に示す。ただし、これは図示しない。
【００５７】
メモリコントローラ１０２０は、リードコマンドを通じて、リード対象のＬＢＡとセクタ数をリード元論理アドレスとして受信する。リードすべき範囲のＬＢＡについて、数値計算により、それに対応するグループ番号とライン番号を特定する。次に、ライン状態テーブルでその番号の状態を参照する。そのラインが「有効」であれば、更新データマップテーブルを参照する。更新済みであれば、更新データ用ページから最新データを読み、未更新であれば、オリジナルデータ用ページから最新データを読み、半導体記憶装置１０００の外部のホストに出力する。一方、ライン状態テーブルでそのラインが「無効」であれば、ゼロデータを半導体記憶装置１０００の外部のホストに出力する。ただし、これはゼロデータに限らず、乱数データなど、当該ブロックユニットに格納されていない所定の無効データでもよい。あるいは、当該ブロックユニット上に残された（Ｔｒｉｍ対象とされる前の）旧データであってもよい。ただ、ＯＳがユーザファイルを削除するときにＴｒｉｍコマンドを発行する場合などを考慮すれば、前者のようなゼロデータや乱数データであるほうがデータの安全性を確保する上で好ましい。
【００５８】
以上の説明の中で、半導体記憶装置１０００の起動時にメモリコントローラ１０２０によって、ブロックマップテーブル（７０００など）、更新データマップテーブル（７１００など）、ライン状態テーブル（７２００など）をＲＡＭ上に作成すると述べたが、その詳細な方法を以下に示す。
【００５９】
まず、メモリブロックの各ページの冗長部からＬＢＡを読み、論理的なグループ番号と物理的なブロック番号との対応を調べ、それに基づいてブロックマップテーブルを作成する。次に、それぞれのグループに対応するブロックユニットの各ページの冗長部を読み、オリジナルデータ識別値ＯＩＤを含むかを調べ、そのグループのオリジナルデータ用ページと更新データ用ページの境界（ページ番号０〜６０の間）を求める。さらに、オリジナルデータ用ページの冗長部からＬＢＡを読み、どのラインのデータが記録されているかを調べ、それに基づいて（仮状態の）ライン状態テーブルを作成する。そして、更新データ用ページの記録済みページについて、更新が古いほうから新しいほうに向かってその冗長部を読んでいき、更新データ識別値ＵＩＤを含むならば、そのオリジナルアドレスＷに基づいて更新データマップテーブルを構成していく。その途中で、オリジナルアドレスＷに対応するＬＢＡがライン状態テーブルで「無効」なラインに含まれていたら、そのライン状態を「有効」に修正する。また、Ｔｒｉｍ情報識別値ＴＩＤを含むならば、そのページ読み、Ｔｒｉｍ対象のラインを特定し、そのライン状態を「無効」に修正する。このように、更新データ用ページの記録済みページを全て調査して修正を行い、ライン状態テーブルの作成は完了する。
【００６０】
本実施形態によれば、半導体記憶装置１０００は、Ｔｒｉｍ対象のラインを含むグループのＬＢＡ範囲に対するライトコマンドに対して（そのグループのガベジコレクション以後）性能が向上するという効果がある。この根拠を以下、特許文献１に基づく図４のデータ配置状態と本実施形態の図７のデータ配置状態とを定量的に比較しながら示す。
【００６１】
まず、フラッシュメモリの性能特性は、一般的な２値／セルの製品仕様に基づき、ページリード時間を２５μ秒、ページプログラム時間を２００μ秒、ブロック消去時間を１ｍ秒とする。また、メモリチップのインタフェース駆動周波数を４０ＭＨｚ、バス幅を８ビットとする。よって、メモリチップとメモリコントローラ間で１ページを転送する時間は５０μ秒となる。また、１６個のメモリチップは並列に動作させる。さらに、ホストからのコマンドをメモリコントローラ１０２０が受けて処理する時間を１０μ秒とする。
【００６２】
簡単のために、ガベジコレクション直後の状態から始め、グループ内の相違なる論理アドレスに、セクタ数が４ＫＢ（２ページ）固定のライトコマンドを連続的に発行するものとし、その途中でそのグループに対するＴｒｉｍコマンドは発行しないものとする。
【００６３】
特許文献１に基づくデータ配置（図４）では、更新データ用ページは２５６ＫＢであるから、４ＫＢのライトを６４回行うとガベジコレクションが発生して初期状態に復帰する。１回のライト処理時間は、コマンド処理時間１０μ秒、ライトデータ転送時間２×５０μ秒、ページプログラム時間２００μ秒の計３１０μ秒である。また、ガベジコレクション処理時間は、予備ブロックユニットの消去時間１ｍ秒、標準ブロックユニット全体からのリード・転送時間６４×（２×２５＋２×５０）μ秒、予備ブロックユニットのオリジナルデータ用ページへの転送・ライト時間６０×（２×５０＋２００）μ秒の計２８６００μ秒である。以上より、１回のライトコマンドにかかる平均処理時間は、（６４×３１０＋２８６００）／６４＝７５７μ秒となり、平均性能は１３２１ＩＯＰＳ（Input / Output Per Second）となる。
【００６４】
一方、本実施形態によるＴｒｉｍコマンドに対応したデータ配置（図７）では、更新データ用ページは１０２４ＫＢであるから、４ＫＢのライトを２５６回行うとガベジコレクションが発生して初期状態に復帰する。１回のライト処理時間は上記と同じく３１０μ秒である。また、ガベジコレクション処理時間は、予備ブロックユニットの消去時間１ｍ秒、標準ブロックユニット全体からのリード・転送時間６４×（２×２５＋２×５０）μ秒、予備ブロックユニットのオリジナルデータ用ページへの転送・ライト時間４８×（２×５０＋２００）μ秒の計２５０００μ秒である。以上より、１回のライトコマンドにかかる平均処理時間は、（２５６×３１０＋２５０００）／２５６＝４０８μ秒となり、平均性能は２４５３ＩＯＰＳとなる。したがって、図７の例では１．８６倍の性能向上となる。一般的に、本実施形態のデータ格納方式によれば、グループ内のＴｒｉｍ対象ラインの本数が増えるにしたがって平均ライト性能が向上することが言える。
【００６５】
なお、以上の説明においては、Ｔｒｉｍコマンドに応じて図６のようにＴｒｉｍ情報６０００を更新データ用ページ内に記録したが、その他の専用メモリブロックに記録したり、半導体記憶装置１０００内にその他の不揮発性メモリを搭載してそこに記録したりしてもよく、それらの場合でも本実施形態の効果を享受することは明白である。ただ、Ｔｒｉｍ情報はガベジコレクションが終われば移動元のグループデータと一緒に廃棄してもよい情報であるから、上述のように当該グループのブロックユニットの中に記録するほうが、後々の並列ブロック消去１回で一緒に処分できるため、より効率的である。
【００６６】
以上、特許文献１に開示される技術との際が明確になるように、特許文献１に開示される技術を起点として実施形態を説明した。すでに明らかなように、本実施形態では、Ｔｒｉｍコマンドが不要と指示した無効なラインをライン管理テーブルで管理し、無効なラインのデータを、ガベジコレクションに伴って、オリジナルデータ用ページ１４７０に格納せずに容量を削減する。極端な場合として、前述の図５におけるグループ５００４のように、オリジナルデータ用ページの容量を０とし、ブロックユニットが全て更新データ用ページとして利用される。このように更新データを格納できる容量を増やすことによって、半導体記憶装置１０００のライト性能の向上が図れる。特許文献１に開示される技術を起点とした例として、オリジナルデータ用ページ１４７０の元のサイズを６０ページとした。半導体記憶装置１０００を初めて使用する場合は、有効なデータが格納されていない状態なので、オリジナルデータ用ページの容量を０とし、ライン管理テーブルの内容をすべて無効状態として、ブロックユニットが全て更新データ用ページとして利用できるようにすると良い。
【００６７】
ライン管理テーブルは、ＬＢＡから導き出した３２ページからなるラインの状態を管理するように説明した。ＬＢＡはフラッシュメモリのページに対応付けられることから、ページ単位に有効、無効を管理し、ブロックユニット単位ではなく、ブロック単位または同一フラッシュメモリチップの隣接する二つのブロック単位に設けても良い。この場合、ライン管理テーブルの総容量が大きくなること、ガベジコレクションなどの処理時間が長くなることを考慮する必要がある。
【符号の説明】
【００６８】
１０００…半導体記憶装置、１０２０…メモリコントローラ、１０３０…ホストデータバッファ、１０４０…テンポラリデータバッファ、１１００〜１１１５…フラッシュメモリチップ。
【図１】
2011090496.tif 000003
【図２】
2011090496.tif 000004
【図３Ａ】
2011090496.tif 000005
【図３Ｂ】
2011090496.tif 000006
【図４Ａ】
2011090496.tif 000007
【図４Ｂ】
2011090496.tif 000008
【図５Ａ】
2011090496.tif 000009
【図５Ｂ】
2011090496.tif 000010
【図６Ａ】
2011090496.tif 000011
【図６Ｂ】
2011090496.tif 000012
【図７Ａ】
2011090496.tif 000013
【図７Ｂ】
2011090496.tif 000014
【図８】
2011090496.tif 000015
【図９】
2011090496.tif 000016