(57)【要約】【課題】空きブロックの検索時間を短縮させるメモリコントローラおよびフラッシュメモリシステムを提供する。【解決手段】メモリコントローラのワークエリアに、フラッシュメモリの物理ブロックの使用状況を表すテーブルである空きブロック検索テーブル１００を設ける。空きブロック検索テーブル１００では、各物理ブロックの使用状況が１ビットの情報で示される。この使用状況を示す情報は、所定のビット列単位で読み出され、そのビット列の情報に基づいて空きブロックが検索される。更に、所定のビット列を複数集めたグループを構成し、各グループに含まれる空きブロックの個数を示す情報を保持し、この空きブロックの個数を示す情報に基づいて、空きブロックの個数が０個のグループに属するビット列の読み出しをスキップしている。【選択図】図３
2007179479.tif 000002
【特許請求の範囲】
【請求項１】
各ビットの論理値が対応関係にあるフラッシュメモリ内の物理ブロックの使用状況を示している複数ビットの記憶領域で構成されたビットデータ保持手段と、
前記各ビットと前記物理ブロックの対応関係を管理する管理手段と、
前記物理ブロックの使用状況に応じて、前記ビットデータ保持手段に保持されている各ビットの論理値を書き換えるビットデータ更新手段と、
前記データ保持手段に保持されている各ビットの論理値を所定数のビットを含むビット列単位で順次読み出し、読み出した前記ビット列のデータに基づいて、使用可能なことを示しているビットを検出する検出手段と、
前記検出手段によって検出された使用可能なことを示しているビットと対応関係にある物理ブロックにデータを書き込む書き込み手段と、
前記検出手段における読み出し順序が連続している複数の前記ビット列でグループを構成し、該グループに含まれる使用可能なことを示しているビットの個数を該グループ毎に保持するグループデータ保持手段と、
前記物理ブロックの使用状況に応じて、前記グループデータ保持手段に保持されている使用可能なことを示しているビットの個数を書き換えるグループデータ更新手段と、
を備え、
前記検出手段が前記ビット列のデータを順次読み出すときに、前記グループデータ保持手段に保持されている使用可能なことを示しているビットの個数が０個のグループに含まれるビット列のデータを読み飛ばすことを特徴とするメモリコントローラ。
【請求項２】
前記ビット列に含まれるビットの個数が２のべき乗個であることを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記グループに含まれる前記ビット列の個数が２のべき乗個であることを特徴とする請求項２に記載のメモリコントローラ。
【請求項４】
請求項１乃至３のいずれか１項に記載のメモリコントローラと、
フラッシュメモリと、
から構成されることを特徴とするフラッシュメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラおよび当該メモリコントローラを備えるフラッシュメモリシステムに関する。
【背景技術】
【０００２】
近年、不揮発性の記憶媒体であるフラッシュメモリの開発が行われ、デジタルカメラ等の情報機器（ホストシステム）の記憶媒体として普及している。
このような機器が扱うデータが大容量化したことに伴い、フラッシュメモリの記憶容量も大容量化が進んでいる。このように大容量化したフラッシュメモリを円滑に管理するため、近年は、この記憶領域を複数のゾーンに分割して管理する手法が用いられている（たとえば、特許文献１を参照）。
【０００３】
従来の複数のゾーンを有するフラッシュメモリの記憶領域を、より具体的に示せば、例えば図４に示す形に区画され、管理されていた。
【０００４】
すなわち、データの物理的な読み書きの単位であるページを所定数含んだ、データ消去の単位である物理ブロックには、それぞれに固有の物理ブロックアドレス（ＰＢＡ）が割り当てられている。各物理ブロックは、複数の物理ゾーンのいずれかに分類され、各物理ゾーンには、それぞれに固有の物理ゾーン番号（ＰＺＮ）が割り当てられる。図４の例では、計２０４８個の物理ブロックに＃０〜＃２０４７の連続するＰＢＡが割り当てられており、ＰＢＡ＃０〜＃５１１の計５１２個の物理ブロックがＰＺＮ＃０の物理ゾーンに属し、ＰＢＡ＃５１２〜＃１０２３の計５１２個の物理ブロックがＰＺＮ＃１の物理ゾーンに属し、ＰＢＡ＃１０２４〜＃１５３５の計５１２個の物理ブロックがＰＺＮ＃２の物理ゾーンに属し、ＰＢＡ＃１５３６〜＃２０４７の計５１２個の物理ブロックがＰＺＮ＃３の物理ゾーンに属する。
【０００５】
また、各ページには物理ページアドレス（ＰＰＡ）が割り当てられている。ＰＰＡは、ページが属する物理ブロックのＰＢＡの下位に、当該物理ブロック内での当該ページの通番であるページ番号（ＰＮ）を付加した形をとっている。
【０００６】
一方、ホストシステム側のアドレス空間は、セクタ（５１２バイト）単位で分割した領域に付けた通番であるＬＢＡ（Logical Block Address）で管理されている。更に、複数個のセクタをまとめたものを論理ブロックと呼び、複数個の論理ブロックをまとめたものを論理ゾーンと呼んでいる。又、論理ブロックに付けられた通番を論理ブロック番号（ＬＢＮ）と呼び、論理ゾーンに付けられた通番を論理ゾーン番号（ＬＺＮ）と呼んでいる。又、各論理ゾーンに含まれる論理ブロックの、各論理ゾーン内での通番を論理ゾーン内ブロック番号（ＬＺＩＢＮ）と呼んでいる。
【０００７】
従って、各論理ゾーンに含まれる論理ブロック数をｎとした場合、ＬＢＮをｎで割ったときの商がＬＺＮに対応し、余りがＬＺＩＢＮに対応する。
【０００８】
又、各論理ゾーンにはそれぞれ１個の物理ゾーンが割り当てられ、論理ゾーンに含まれる各論理ブロックに対応するデータは、その論理ゾーンに割り当てられた物理ゾーンに含まれる物理ブロックに書き込まれる。更に、データが書き込まれた物理ブロックの冗長領域には、そのデータに対応する論理ブロックのＬＺＩＢＮ（又は、ＬＢＮ）が書き込まれる。
【０００９】
なお、物理ブロックと論理ブロックとの対応関係は、データの書き込みや消去が行われる毎に変化する。このため、個々の時点における両者の対応関係を管理するためアドレス変換テーブルが作成され、対応関係が変化する毎にアドレス変換テーブルが更新される。このアドレス変換テーブルは論理ゾーン毎に作成することができる。つまり、論理ゾーンと物理ゾーンとの対応関係は予め設定されているので、アクセス対象の物理ゾーンに含まれる物理ブロックの冗長領域に書き込まれているＬＺＩＢＮを参照することによりアドレス変換テーブルを作成することができる。
【００１０】
ここで、冗長領域に書き込まれる論理ブロックを特定する情報（以下、論理アドレス情報という。）は、ＬＢＮであってもアドレス変換テーブルを作成することができるが、一般的にはデータ量の少ないＬＺＩＢＮが論理アドレス情報として冗長領域に書き込まれる。
【００１１】
一般的に、各論理ゾーンには、ＬＢＡが連続する複数のセクタが割り当てられている。図４の例では、ＬＺＮ＃０の論理ゾーンにＬＢＡ＃０〜＃１５９９９のセクタが、ＬＺＮ＃１の論理ゾーンにＬＢＡ＃１６０００〜＃３１９９９のセクタが、ＬＺＮ＃２の論理ゾーンにＬＢＡ＃３２０００〜＃４７９９９のセクタが、ＬＺＮ＃３の論理ゾーンにＬＢＡ＃４８０００〜＃６３９９９のセクタが、それぞれ割り当てられている。なお、この例では、フラッシュメモリの１個のページが１個のセクタに対応し、各物理ブロックは、３２個のページで構成されている。
【００１２】
各論理ゾーンに割り当てられた１６０００個のセクタは、論理ゾーン内でＬＢＡが連続する３２個のセクタ単位で論理ブロックとして管理されている。従って、言い換えれば、ＬＢＡが連続する３２個のセクタを論理ブロックとして、ＬＢＮが連続する論理ブロックを各論理ゾーンに５００個（ＬＺＩＢＮ＃０〜＃４９９）ずつ割り当てている。ここで、論理ブロックに含まれるセクタ数については、１個の論理ブロックと１個又は複数個の物理ブロックの容量が一致するよう適宜設定される。又、物理ブロックの各ページにはＬＢＡの順番でデータが格納されるので、各論理ゾーンに含まれる論理ブロックと、その論理ゾーンに対応する物理ゾーンに含まれる物理ブロックとの対応関係に基づいて、フラッシュメモリ内のアクセス先を特定することができる。
【特許文献１】特開２００５−１８４９０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
データを新たにフラッシュメモリに書き込む際には、書き込む論理ゾーンに対応する物理ゾーンを検索し、その物理ゾーン内の使用されていない物理ブロック（空きブロック）を検索し、その空きブロックに対してデータを書き込む必要がある。しかし、空きブロックを検索するときは、ＬＺＩＢＮの順番で空きブロックを順次検索するので、空きブロックの個数が少なくなったときに検索に要する時間が長くなるという問題があった。
【００１４】
本発明は、上記問題点に鑑みてなされたものであり、空きブロックの検索時間を短縮させるメモリコントローラおよびフラッシュメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記課題を解決するため、本発明の第１の観点に係るメモリコントローラは、
各ビットの論理値が対応関係にあるフラッシュメモリ内の物理ブロックの使用状況を示している複数ビットの記憶領域で構成されたビットデータ保持手段と、
前記各ビットと前記物理ブロックの対応関係を管理する管理手段と、
前記物理ブロックの使用状況に応じて、前記ビットデータ保持手段に保持されている各ビットの論理値を書き換えるビットデータ更新手段と、
前記データ保持手段に保持されている各ビットの論理値を所定数のビットを含むビット列単位で順次読み出し、読み出した前記ビット列のデータに基づいて、使用可能なことを示しているビットを検出する検出手段と、
前記検出手段によって検出された使用可能なことを示しているビットと対応関係にある物理ブロックにデータを書き込む書き込み手段と、
前記検出手段における読み出し順序が連続している複数の前記ビット列でグループを構成し、該グループに含まれる使用可能なことを示しているビットの個数を該グループ毎に保持するグループデータ保持手段と、
前記物理ブロックの使用状況に応じて、前記グループデータ保持手段に保持されている使用可能なことを示しているビットの個数を書き換えるグループデータ更新手段と、
を備え、
前記検出手段が前記ビット列のデータを順次読み出すときに、前記グループデータ保持手段に保持されている使用可能なことを示しているビットの個数が０個のグループに含まれるビット列のデータを読み飛ばすことを特徴とする。
【００１６】
前記ビット列に含まれるビットの個数は２のべき乗個であることが好ましい。
【００１７】
前記グループに含まれる前記ビット列の個数は２のべき乗個であることが好ましい。
【００１８】
上記課題を解決するため、本発明の第２の観点に係るフラッシュメモリシステムは、
上記のメモリコントローラと、
フラッシュメモリと、
から構成されることを特徴とする。
【発明の効果】
【００１９】
本発明によれば、物理ゾーン内の物理ブロックをグループに分け、空きブロックの検索において、空きブロック数が０であるグループはスキップして、空きブロック数が１以上であるグループに属する物理ブロックに限って空きブロックを検索するため、空きブロックの検索時間を短縮させるメモリコントローラおよびフラッシュメモリシステムを提供できる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の実施形態について、図面を参照して説明する。
【００２１】
図１は、本発明に係るフラッシュメモリシステム１を概略的に示すブロック図である。図１に示すように、フラッシュメモリシステム１は、フラッシュメモリ２と、それを制御するコントローラ３で構成されている。
【００２２】
なお、フラッシュメモリシステム１は、外部バス１３を介してホストシステム４と接続される。ホストシステム４は、ホストシステム４の全体の動作を制御するためのＣＰＵ（Central Processing Unit）、フラッシュメモリシステム１との情報の授受を担うコンパニオンチップ等から構成される。ホストシステム４は、例えば、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
【００２３】
フラッシュメモリ２は、不揮発性メモリであり、レジスタと、メモリセルアレイとから構成される。フラッシュメモリ２は、レジスタとメモリセルとの間でデータの複写を行って、データの書き込み又は読み出しを行う。
【００２４】
メモリセルアレイは、複数のメモリセル群と、ワード線とを備える。各メモリセル群は、複数のメモリセルが直列に接続されたものである。ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、データの複写、即ち、レジスタから選択されたメモリセルへの複写又は選択されたメモリセルからレジスタへのデータの複写が行われる。
【００２５】
メモリセルアレイを構成するメモリセルは、２つのゲートを備えたＭＯＳトランジスタによって構成される。ここで、上側のゲート、下側のゲートは、それぞれ、コントロールゲート、フローティングゲートと呼ばれており、フローティングゲートに電荷（電子）を注入若しくはフローティングゲートから電荷（電子）を排出することによって、データの書き込み若しくはデータの消去が行われる。
【００２６】
このフローティングゲートは、周囲を絶縁体で囲まれているので、注入された電子は長期間にわたって保持される。なお、フローティングゲートに電子を注入するときは、コントロールゲートが高電位側となる高電圧をコントロールゲートとフローティングゲート間に印加する。また、フローティングゲートから電子を排出するときは、コントロールゲートが低電位側となる高電圧をコントロールゲートとフローティングゲート間に印加する。
【００２７】
ここで、フローティングゲートに電子が注入されている状態が書き込み状態であり、論理値「０」に対応する。また、フローティングゲートから電子が排出されている状態が消去状態であり、論理値「１」に対応する。
【００２８】
このようなフラッシュメモリ２のアドレス空間を図２に示す。フラッシュメモリ２のアドレス空間は、“ページ”及び“ブロック（物理ブロック）”で構成されている。
【００２９】
ページは、フラッシュメモリ２にて行われるデータ読み出し動作及びデータ書き込み動作における処理単位である。物理ブロックは、フラッシュメモリ２にて行われるデータ消去動作における処理単位であり、複数個のページで構成されている。
【００３０】
図２に示したフラッシュメモリでは、１つのページは、１セクタ（５１２バイト）のユーザ領域２５と、１６バイトの冗長領域２６で構成され、１つの物理ブロックは３２個のページで構成されている。なお、１つのページが４セクタのユーザ領域と６４バイトの冗長領域で構成され、１つの物理ブロックが６４個のページで構成されているフラッシュメモリもある。ユーザ領域２５は、ホストシステム４から供給されるユーザデータを記憶するための領域である。
【００３１】
冗長領域２６は、ＥＣＣ（Error Correcting Code）、論理アドレス情報、ブロックステータス（フラグ）等の付加データを記憶するための領域である。
【００３２】
ＥＣＣは、ユーザ領域２５に記憶されているデータに含まれる誤りを検出し、訂正するためのデータである。
【００３３】
論理アドレス情報は、フラッシュメモリ２の各物理ブロックに含まれている少なくとも１個のページのユーザ領域２５に有効なデータが格納されているとき、そのデータに対応する論理ブロックを特定するための情報である。
【００３４】
なお、ユーザ領域２５に有効なデータが格納されていない物理ブロックについては、そのブロックの冗長領域２６に、論理アドレス情報は格納されていない。
【００３５】
したがって、冗長領域２６に論理アドレス情報が格納されているか否かを判定することにより、その冗長領域２６が含まれている物理ブロックに有効なデータが格納されているか否かを判定することができる。つまり、冗長領域２６に論理アドレス情報が格納されていないとき、その物理ブロックには、有効なデータが格納されていないと判断する。
【００３６】
上述のように、１つの物理ブロックは、複数のページを含んでいる。これらのページには、データの上書きができない。このため、１つのページに格納されたデータのみを書き換えるときであっても、そのページが含まれた物理ブロック内の全ページに格納されたデータを、再度書き込まなければならない。
【００３７】
つまり、通常のデータ書き換えでは、書き換えるページが含まれる物理ブロックの全ページに格納されたデータが、別の消去されている物理ブロックに書き込まれる。この際、データが変更されないページに格納されているデータは、以前に格納されていたデータがそのまま再度書き込まれる。
【００３８】
上記のようにデータを書き換えるにあたっては、通常、書き換えられたデータは、以前に格納されていた物理ブロックとは異なる物理ブロックに書き込まれる。このため、論理ブロックアドレスと物理ブロックアドレスの間の対応関係は、フラッシュメモリ２にてデータが書き換えられる毎に、動的に変化する。
【００３９】
したがって、論理ブロックと物理ブロックとの対応関係を管理する必要があり、通常、この対応関係は、アドレス変換テーブルによって管理される。このアドレス変換テーブルは、各物理ブロックの冗長領域２６に記憶されている論理アドレス情報（ＬＺＩＢＮ又はＬＢＮ）に基づいて作成される。なお、このような動的なアドレス管理手法は、上述の通り、フラッシュメモリを用いたメモリシステムでは一般的に行われている手法である。
【００４０】
ブロックステータス（フラグ）は、ブロックの良否を示すフラグである。正常にデータの書き込み等を行うことができないブロックは、不良ブロックと判別され、冗長領域２６には、不良ブロックであることを示すブロックステータス（フラグ）が書き込まれる。
【００４１】
このようなフラッシュメモリ２は、コントローラ３から、データ、アドレス情報、内部コマンド等を受信して、データの読み出し処理、書き込み処理、ブロック消去処理、転送処理等の各処理を行う。
【００４２】
ここで、内部コマンドとは、コントローラ３がフラッシュメモリ２に処理の実行を指示するためのコマンドであり、フラッシュメモリ２は、コントローラ３から与えられる内部コマンドに従って動作する。これに対して、外部コマンドとは、ホストシステム４がフラッシュメモリシステム１に対して処理の実行を指示するためのコマンドである。
【００４３】
コントローラ３は、図１に示すように、マイクロプロセッサ６と、ホストインターフェースブロック７と、ワークエリア８と、バッファ９と、フラッシュメモリインターフェースブロック１０と、ＥＣＣブロック１１と、ＲＯＭ（Read Only Memory）１２と、から構成される。これら機能ブロックによって構成されるコントローラ３は、一つの半導体チップ上に集積される。以下に各機能ブロックについて説明する。
【００４４】
マイクロプロセッサ６は、ＲＯＭ１２に記憶されているプログラムに従って、コントローラ３の全体の動作を制御する。例えば、マイクロプロセッサ６は、各種処理等を定義したコマンドセットをＲＯＭ１２から読み出してフラッシュメモリインターフェースブロック１０に供給し、フラッシュメモリインターフェースブロック１０に処理を実行させる。
マイクロプロセッサ６は、たとえば、シフトレジスタとフラグレジスタとを備え、フラグレジスタはシフトレジスタの演算によりキャリーが発生した場合、キャリーフラグを立てる。
【００４５】
ホストインターフェースブロック７は、ホストシステム４との間の、データ、アドレス情報、ステータス情報、外部コマンド等の授受を行う。ホストシステム４よりフラッシュメモリシステム１に供給されるデータ等は、ホストインターフェースブロック７を入口としてフラッシュメモリシステム１の内部（例えば、バッファ９）に取り込まれる。また、フラッシュメモリシステム１からホストシステム４に供給されるデータ等は、ホストインターフェースブロック７を出口としてホストシステム４に供給される。
【００４６】
ワークエリア８は、フラッシュメモリ２の制御に必要なデータが一時的に格納される作業領域であり、複数のＳＲＡＭ（Static Random Access Memory）セルによって構成される。
【００４７】
バッファ９は、フラッシュメモリ２から読み出されたデータ及びフラッシュメモリ２に書き込むべきデータを一時的に蓄積する。すなわち、フラッシュメモリ２から読み出されたデータは、ホストシステム４が受け取り可能な状態となるまでバッファ９に保持され、フラッシュメモリ２に書き込むべきデータは、フラッシュメモリ２が書き込み可能な状態となるまでバッファ９に保持される。
【００４８】
フラッシュメモリインターフェースブロック１０は、内部バス１４を介して、フラッシュメモリ２とデータ、アドレス情報、ステータス情報、内部コマンド等の授受を行う。より詳細には、フラッシュメモリインターフェースブロック１０は、アドレス処理部、コマンドレジスタ、命令処理ブロック等から構成される。
【００４９】
フラッシュメモリインターフェースブロック１０は、命令処理ブロックによって出力される内部コマンド、アドレス情報等をフラッシュメモリ２に供給することにより、フラッシュメモリ２に読み出し、書き込み等を実行させる。
【００５０】
ＥＣＣブロック１１は、フラッシュメモリ２に書き込むデータに付加されるＥＣＣを生成するとともに、読み出しデータに付加されたＥＣＣに基づいて、読み出したデータに含まれる誤りを検出・訂正する。
【００５１】
ＲＯＭ１２は、マイクロプロセッサ６による処理の手順を定義するプログラムを格納する不揮発性の記憶素子である。具体的には、ＲＯＭ１２は、例えば、アドレス変換テーブルの作成等の処理手順を定義するプログラムを格納する。
【００５２】
本実施形態においては、アドレス変換テーブルは、ワークエリア８に保存され、対応する論理ゾーンと物理ゾーンの組毎に形成され、該論理ゾーン内論理ブロック番号ＬＺＩＢＮと物理ゾーン内物理ブロック番号ＰＺＩＢＮとの対応関係を記憶するものとする。
【００５３】
ＰＺＩＢＮは、物理ゾーン内の物理ブロックに対して、その物理ブロックアドレスＰＢＡの若い方から＃０、＃１、＃２という順番で付けられた通番である。
【００５４】
図３に示す空きブロック検索テーブル１００は、フラッシュメモリ２の物理ゾーンにおける物理ブロックの使用状況を表すテーブルであり、物理ゾーン毎に作成され、ワークエリア８に保存され、マイクロプロセッサ６により管理される。図３の場合、フラッシュメモリ２の各物理ゾーンは、物理ブロック１０２４個から構成されるものとする。
【００５５】
１０２４個の各物理ブロックは、空きブロック検索テーブル１００上の１個のビットに割り当てられ、各ビットの論理値（“０”又は“１”）によって、そのビットに対応する物理ブロックが空きブロックであるか否かを示している。 図３に示した空きブロック検索テーブル１００で、論理値の“０”は物理ブロックが使用されているまたは不良ブロックであることを示し、論理値の“１”は物理ブロックが使用可能である（空きブロックである）ことを示している。尚、図３に示した空きブロック検索テーブル１００上の各行の８ビットには、下位側からＰＺＩＢＮの順番で各物理ブロックが割り当てられている。
【００５６】
１０２４個の物理ブロックに対応する空きブロック検索テーブル１００上の各ビットは、１６個のグループに分割され、各グループは８個のサブグループに分割されている。つまり、空きブロック検索テーブル１００上の１バイト（８ビット）がサブグループに対応し、８バイト（６４ビット）がグループに対応する。ここで、物理ゾーン内の各グループに付けた通番をグループ番号ＧＮとすれば、ＰＺＩＢＮ＃０〜＃６３の物理ブロックに対応するビットがＧＮ＃０のグループに割り当てられ、ＰＺＩＢＮ＃６４〜＃１２７の物理ブロックに対応するビットがＧＮ＃１のグループに割り当てられ、以下同様に、各グループに＃１５までのＧＮが順次割り当てられる。又、論理ゾーン内の各サブグループに付けた通番をサブグループ番号ＳＧＮとすれば、ＰＺＩＢＮ＃０〜＃７の物理ブロックに対応するビットがＳＧＮ＃０のサブグループに割り当てられ、ＰＺＩＢＮ＃８〜＃１５の物理ブロックに対応するビットがＳＧＮ＃１のサブグループに割り当てられ、以下同様に、各サブグループに＃１２７までのＳＧＮが順次割り当てられる。
【００５７】
更に、本実施形態においては、各グループに含まれる空きブロックの個数を空きブロック数ＦＢＮとして管理している。例えば、図３の場合、ＧＮ＃０（ＰＺＩＢＮ＃０〜＃６３に対応）のグループには、空きブロックであることを示す論理値が“１”のビットが３個（ＰＺＩＢＮ＃４、＃１２、＃１５に対応）存在する。したがって、ＧＮ＃０のグループのＦＢＮは３となる。また、図３の場合、ＧＮ＃１（ＰＺＩＢＮ＃６４〜＃１２７に対応）のグループには、空きブロックが存在しない。したがって、ＧＮ＃１のグループのＦＢＮは０となる。
【００５８】
まず、空きブロック検索テーブル１００を作成する処理を説明する。
【００５９】
空きブロック検索テーブル１００は、ある物理ゾーンに対してアクセスがあったときに、その物理ゾーンの空きブロック検索テーブル１００がワークエリア８に存在しないときに作成される。尚、この空きブロック検索テーブル１００は、論理ブロックと物理ブロックの対応関係を示したアドレス変換テーブルと共に作成されることが多い。
【００６０】
マイクロプロセッサ６は、ワークエリア８にＰＺＩＢＮ＃０〜＃１０２３の物理ブロックに対応する１２８バイト（１０２４ビット）の領域と各グループのＦＢＮを書き込む領域を確保する。ここで、各物理ブロックに対応する１２８バイト（１０２４ビット）の領域は、全てのビットが論理値“０”に初期設定され、各グループのＦＢＮは０に初期設定される。又、アドレス変換テーブルを一緒に作成する場合は、アドレス変換テーブルを作成するための領域も確保する。アドレス変換テーブルを作成するための領域は、ＰＺＩＢＮ＃０〜＃１０２３の物理ブロックに割り当てられる論理ブロック数に応じた領域が確保される。例えば、ＰＺＩＢＮ＃０〜＃１０２３の物理ブロックにＬＺＩＢＮ＃０〜＃９９９の論理ブロックが割り当てられている場合には、ＬＺＩＢＮ＃０〜＃９９９のそれぞれに対応するＰＺＩＢＮを書き込むための領域を確保する。
【００６１】
続いて、ＰＺＩＢＮ＃０〜＃１０２３の物理ブロックの冗長領域２６に書き込まれている論理アドレス情報（ＬＺＩＢＮ）とブロックステータスを順次読み出し、論理アドレス情報（ＬＺＩＢＮ）が書き込まれている場合には、アドレス変換テーブルを作成するための領域のそのＬＺＩＢＮに対応する箇所に、そのＬＺＩＢＮが書き込まれていた物理ブロックのＰＺＩＢＮを書き込む。一方、論理アドレス情報（ＬＺＩＢＮ）が書き込まれていない場合は、ブロックステータスに基づいてその物理ブロックが不良ブロックであるか否かを判別する。その結果、不良ブロックでないと判別した場合は、その物理ブロックのＰＺＩＢＮに対応するビットの論理値を“１”に変更し、更に、その物理ブロックのＰＺＩＢＮが属するグループのＦＢＮの値を１増やした値に書き換える。
【００６２】
各ＰＺＩＢＮが属するサブグループ番号ＳＧＮは、ＰＺＩＢＮをサブグループに含まれる物理ブロックの数で割ることによって求めることができ、各ＰＺＩＢＮが属するグループ番号ＧＮは、ＰＺＩＢＮをグループに含まれる物理ブロックの数で割ることによって求めることができる。例えば、サブグループに含まれる物理ブロックが８個で、グループに含まれる物理ブロックが６４個の場合、ＰＺＩＢＮ＃１５３が属するサブグループのＳＧＮ（＃１９）は１５３÷８の商に対応し、ＰＺＩＢＮ＃１５３が属するサブグループのＧＮ（＃２）は１５３÷６４の商に対応する。
又、本実施形態のようにサブグループ及びグループに含まれる物理ブロックの数が２のべき乗個の場合には、ＰＺＩＢＮを２進数で表したときの特定範囲のビットからＳＧＮとＧＮを求めることができる。本実施形態では、サブグループに含まれる物理ブロックが８個で、グループに含まれる物理ブロックが６４個なので、１０ビット（＃０〜＃１０２３は）のＰＺＩＢＮの上位７ビットがＳＧＮに対応し、ＰＺＩＢＮの上位４ビットがＧＮに対応する。例えば、ＰＺＩＢＮ「００  １００１  １００１」（＃１５３）が属するサブグループのＳＧＮは「００１  ００１１」（＃１９）に対応し、ＰＺＩＢＮ＃１５３が属するサブグループのＧＮは「００１０」（＃２）に対応する。
【００６３】
空きブロック検索テーブル１００を作成するときは、上記のようにして求めたＳＧＮ及びＧＮに基づいて、空きブロックに対応するビットの論理値を“１”に変更し、ＦＢＮの値を更新する。例えば、ＰＺＩＢＮ＃１５３の物理ブロックが空きブロックの場合、ＳＧＮが＃１９（１５３÷８の商又はＰＺＩＢＮの上位７ビットに対応する）になるので、空きブロック検索テーブル１００の２０行目（ＳＧＮの値に＋１をした値に対応する）の下位側から２ビット目（１５３÷８の余りに＋１をした値又はＰＺＩＢＮの下位３ビットの値に＋１をした値に対応する）の論理値を“１”に変更し、ＧＮが＃２（１５３÷６４の商又はＰＺＩＢＮの上位４ビットに対応する）のＦＢＮの値を１増やした値に書き換える。
具体的に説明すれば、ＰＺＩＢＮ＃０から順番に物理ブロックの冗長領域２６に書き込まれている論理アドレス情報（ＬＺＩＢＮ）とブロックステータスを順次読み出していき、ＰＺＩＢＮ＃４の物理ブロックが空きブロックであると判別すると、対象ゾーンの空きブロック検索テーブルの１行目の下位から５ビット目の論理値を“１”に変更し、ＧＮ＃０のＦＢＮの値を１に書き換える。その後、引き続き論理アドレス情報（ＬＺＩＢＮ）とブロックステータスを順次読み出していき、ＰＺＩＢＮ＃１２の物理ブロックが空きブロックであると判別すると、２行目の下位から５ビット目の論理値を“１”に変更し、ＧＮ＃０のＦＢＮの値を２に書き換える。以下同様に、空きブロックであると判別した物理ブロックのＰＺＩＢＮに対応するビットの論理値を“１”に変更し、空きブロックであると判別した物理ブロックのＰＺＩＢＮが属するグループのＦＢＮを更新する。
【００６４】
次に、空きブロック検索テーブル１００を用いて物理ゾーン内の空きブロックを検索する処理を説明する。
【００６５】
この空きブロックの検索処理では、前回の検索処理で空きブロックとして検出された物理ブロックの次の物理ブロックから検索を開始する。この検索を開始する物理ブロックのＰＺＩＢＮについては、ワークエリア８に書き込んでおく。
【００６６】
空きブロックの検索処理では、まず、検索を開始する物理ブロックのＰＺＩＢＮが属するグループのＧＮを求め、求めたＧＮに対応するグループのＦＢＮが０でないときは、そのＰＺＩＢＮが属するサブグループのＳＧＮを求め、求めたＳＧＮに対応する行の１バイトの情報（以下、この１バイトの情報をサブグループ情報と言う。）をシフトレジスタに設定する。この際、検索を開始するビットよりも下位側のビットについてはマスク処理（検索を開始するビットよりも下位側のビットだけを０とした１バイトのマスクデータで論理積を求める処理）を施してからシフトレジスタに設定する。例えば、検索を開始するビットが下位側から５ビット目のときは、求めたＳＧＮに対応するサブグループ情報とマスクデータ「１１１１  ００００」の論理積を求め、得られた情報をシフトレジスタに設定する。尚、サブグループに含まれるビットの個数は、シフトレジスタに設定することができるビット列のデータ長に応じて設定する。例えば、シフトレジスタが８ビットとの場合は、サブグループに含まれるビットの個数を８個とし、シフトレジスタが１６ビットとの場合は、サブグループに含まれるビットの個数を１６個とする。
【００６７】
一方、求めたＧＮに対応するグループのＦＢＮが０のときは、その次のグループのＦＢＮを参照し、ＦＢＮが０でないときは、そのグループに属するサブグループのサブグループ情報をＳＧＮの順番で順次読み出していき、サブグループ情報が「００００  ００００」でないときにそのサブグループ情報をシフトレジスタに設定する。その次のグループのＦＢＮも０の場合は、ＧＮの順番で各グループのＦＢＮを参照していき、ＦＢＮが０でないグループを見つけて同様の処理を行う。
【００６８】
次に、シフトレジスタに設定されたサブグループ情報（検索を開始するビットが最下位ビットでないときはマスク処理後のサブグループ情報）を下位側シフトさせ、何回のシフトでキャリーフラグが立ったかを判別する。このキャリーフラグが立ったときのシフト回数とシフトレジスタに設定されたサブグループ情報に対応するＳＧＮに基づいて、空きブロックのＰＺＩＢＮが求められる。このシフト回数とＳＧＮに基づいてＰＺＩＢＮを求めるときは、ＳＧＮを７ビットの２進数で表し、シフト回数に−１した値を３ビットの２進数で表し、これらをこの順番で連結する。このようにすることにより１０ビットの２進数で表したＰＺＩＢＮを求めることができる。又は、ＳＧＮにサブグループに含まれる物理ブロックの個数を乗じた値に、シフト回数に−１した値を加算することによってＰＺＩＢＮを求めることができる。例えば、ＳＧＮが＃２０でキャリーフラグが立ったときのシフト回数が５回の場合には、ＳＧＮ「００１  ０１００」の下位側に、シフト回数に−１した値「１００」を付加することによりＰＺＩＢＮ「００  １０１０  ０１００」を求めることができる。又は、２０（ＳＧＮ）×８（サブグループに含まれる物理ブロックの個数）＋４（シフト回数に−１した値）でＰＺＩＢＮ＃１６４を求めることができる。
【００６９】
上述の検索処理において、ＳＢＮの順番で各サブグループのサブグループ情報を読み出していく途中で異なるグループに遷移するときは、サブグループ情報を読み出す前に、遷移先のグループのＦＢＮを参照し、ＦＢＮが０でないときは、引き続きＳＢＮの順番で各サブグループのサブグループ情報を読み出していき、サブグループ情報が「００００  ００００」でないサブグループのサブグループ情報をシフトレジスタに設定する。一方、遷移先のグループのＦＢＮが０ときは、その後のグループのＦＢＮを順次参照していき、ＦＢＮが０でないグループを見つけて、そのＦＢＮが０でないグループに含まれるサブグループのサブグループ情報を読み出していき、サブグループ情報が「００００  ００００」でないサブグループのサブグループ情報をシフトレジスタに設定する。
又、空きブロックにデータを書き込んだ場合は、データを書き込んだ物理ブロックに対応するビットの論理値を“０”に変更し、更に、その物理ブロックが属するグループのＦＢＮの値を１減らした値に書き換える。一方、データが書き込まれていた物理ブロックを消去処理した場合は、その物理ブロックに対応するビットの論理値を“１”に変更し、更に、その物理ブロックが属するグループのＦＢＮの値を１増やした値に書き換える。
【００７０】
次に、図３に示した空きブロック検索テーブル１００を用いた空きブロックの検索処理を具体的に説明する。
【００７１】
例えば、ワークエリア８に書き込まれている検索を開始する物理ブロックのＰＺＩＢＮが「００  ００１０  ００１１」の場合、このＰＺＩＢＮの上位４ビット「００００」に対応するＧＮ＃０のＦＢＮを参照する。ＧＮ＃０のＦＢＮが３なのでＰＺＩＢＮの上位７ビット「０００  ０１００」に対応するＳＧＮ＃４のサブグループ（ＰＺＩＢＮ＃３２〜＃３９）のサブグループ情報「００００  ００００」を読み出し、そのサブグループ情報「００００  ００００」とマスクデータ（下位３ビットをマスクしたマスクデータ）「１１１１  １０００」の論理積を求める。求めた論理積が「００００  ００００」なので、ＳＧＮ＃４のサブグループ情報（マスク処理後のサブグループ情報）はシフトレジスタに設定しない。続いて、ＳＧＮ＃５のサブグループ以降のサブグループ情報を順次読み出す。ＳＧＮ＃５〜＃７のサブグループ情報は「００００  ００００」なので、ＳＧＮ＃５〜＃７のサブグループ情報はシフトレジスタに設定しない。
【００７２】
その次のＳＧＮ＃８のサブグループは、ＧＮ＃１の先頭サブグループなのでＳＧＮ＃８のサブグループ情報を読み出す前に、ＧＮ＃１のＦＢＮを参照する。ＧＮ＃１のＦＢＮが０なので、ＳＧＮ＃８〜＃１５のサブグループ情報を読み出さず、更に、ＧＮ＃２のＦＢＮを参照する。ＧＮ＃２のＦＢＮが１なので、ＳＧＮ＃１６〜＃２３のサブグループ情報を順次読み出す。
【００７３】
ＳＧＮ＃１７（ＰＺＩＢＮ＃１３６〜＃１４３）のサブグループ情報が「００００  ００００」でないので、ＳＧＮ＃１７のサブグループ情報「００００  １０００」をシフトレジスタに設定する。ＳＧＮ＃１７のサブグループ情報が設定されたシフトレジスタを下位方向にシフトさせ、最初にキャリーフラグが立ったときのシフト回数を判別する。ここでは、４回のシフトでキャリーフラグが立つので、シフト回数に−１をした「０１１」の上位側にＳＧＮ「００１  ０００１」（＃１７）を付加したＰＺＩＢＮ「００  １０００  １０１１」（＃１３９）の物理ブロックが空きブロックとして検出される。
【００７４】
その後、ワークエリア８に書き込まれている検索を開始する物理ブロックのＰＺＩＢＮを＃１４０に変更する。又、ＰＺＩＢＮ＃１３９の物理ブロックにデータを書き込んだときに、空きブロック検索テーブル１００のＰＺＩＢＮ＃１３９に対応するビットの論理値を“０”に変更し、ＧＮ＃２のＦＢＮを０に書き換える。更に、ＰＺＩＢＮ＃１３９に書き込んだデータに対応する旧データが書き込まれていた物理ブロックを消去処理したときは、その物理ブロックに対応するビットの論理値を“１”に変更し、更に、その物理ブロックが属するグループのＦＢＮを１増やした値に書き換える。
【００７５】
次に、空きブロックにホストシステム４から与えられるデータを書き込む処理について説明する。この書き込み処理は、ホストシステム４から与えられる書き込み指示情報に基づいて実行される。この書き込み指示情報には、書き込みを開始するセクタのＬＢＡと書き込むセクタ数を指示する情報が含まれている。このＬＢＡとセクタ数に基づいて、書き込み先の論理ブロックが特定され、この論理ブロックに対応する物理ブロックの空きページにデータを書き込めない場合、つまり、既存データの書き換えを行う場合、又は、この論理ブロックに対応する物理ブロックが存在しない場合に、空きブロック検索テーブル１００を用いて検出された空きブロックにデータが書き込まれる。
【００７６】
空きブロックにデータを書き込む場合は、フラッシュメモリインターフェースブロック１０内のレジスタに空きブロックのＰＢＡ、書き込みを開始するページ番号及び書き込むデータのページ数等が設定され、これらの設定に基づいて書き込み処理が実行される。書き込み処理が実行されると、フラッシュメモリ２に対して、書き込みを指示する内部コマンドと、フラッシュメモリインターフェースブロック１０内のレジスタに設定されているＰＢＡとページ番号に基づいて生成されたアドレスと、書き込みデータが順次供給される。１ページ分のデータが書き込まれる毎に、フラッシュメモリインターフェースブロック１０内のレジスタに設定されているページ番号（初期値は書き込みを開始するページ番号）を１ずつ増やし、ページ数（初期値は書き込むデータのページ数）を１ずつ減らして、同様の処理を繰り返す。この処理を、ページ数が０になるまで繰り返すことによって、フラッシュメモリインターフェースブロック１０内のレジスタに最初に設定したページ数分の書き込み処理が終了する。
【００７７】
以上説明したように、本発明に係るメモリコントローラは、各ビットの論理値（“０”又は“１”）によって対応する物理ブロックの使用状況を示した空きブロック検索テーブル１００を用いて使用可能な物理ブロック（空きブロック）を検索している。上記の実施例では、データが書き込まれていない良品の物理ブロックの使用状況を論理値の“１” で示し、データが書き込まれている良品の物理ブロック若しくは不良ブロックの使用状況を論理値の“０”で示している。更に、所定数のビットを含むビット列単位で各ビットの論理値を順次読み出し、このビット列のデータに含まれる論理値が“１”のビットを検出している。つまり、この検索では、ブロック検索テーブル１００に含まれる各ビットを、上の行から下の行へ、各行を下位側から上位側に走査することによって空きブロックを検出している。又、ビット列（サブグループ）を複数個集めたグループを構成し、各グループに属するビットに含まれる論理値が“１”のビットの数、つまり、各グループに属する空きブロックの個数をグループ毎に保持している。この空きブロックの個数が０個のグループに属するビット列（サブグループ）については、ビット列のデータに含まれる論理値が“１”のビットを検出する処理を、グループ単位でスキップしている。つまり、空きブロックの個数が０個のグループについては、グループ単位でそのグループに属するビット列（サブグループ）が読み飛ばされるため、検索時間が短縮される。
【００７８】
この発明は、上述の実施形態に限定されず、種々の変形及び応用が可能である。
【００７９】
各物理ゾーンの物理ブロック数は１０２４個に限られず、自由に設定できる。
【００８０】
本実施形態では、空きブロック検索テーブル１００のサブグループは８ビットであったが、８ビットに限られず、自由に設定してもよい。ただし、各ビットのデータは、サブグループ単位でシフトレジスタに格納されるから、このビット列（サブグループ）のデータ長はシフトレジスタのビット数以下であることが必要である。
【００８１】
本実施形態では、グループは８個のサブグループをまとめたものであったが、グループは８個のサブグループに限られず、自由に個数を定めてもよい。
【図面の簡単な説明】
【００８２】
【図１】フラッシュメモリシステムの一例を示すブロック図である。
【図２】フラッシュメモリのアドレス空間の構造の一例を示す図である。
【図３】空きブロック検索テーブルの構造を示す図である。
【図４】従来のフラッシュメモリのアドレス空間の構造を概略的に示す図である。
【符号の説明】
【００８３】
１    フラッシュメモリシステム
２    フラッシュメモリ
３    コントローラ
４    ホストシステム
６    マイクロプロセッサ
７    ホストインターフェースブロック
８    ワークエリア
９    バッファ
１０  フラッシュメモリインターフェースブロック
１１  ＥＣＣブロック
１２  ＲＯＭ
１３  外部バス
１４  内部バス
２５  ユーザ領域
２６  冗長領域
【図１】
2007179479.tif 000003
【図２】
2007179479.tif 000004
【図３】
2007179479.tif 000005
【図４】
2007179479.tif 000006