(57)【要約】【課題】フラッシュメモリの各ゾーンに不良ブロックを分散させることにより、不良ブロックの偏在による不具合を回避する。【解決手段】  フラッシュメモリ内の複数ブロックで構成されたゾーンと、そのゾーンに割り当てられるホストシステム側の論理ブロックアドレス空間との相対関係を管理するゾーン管理機能と、ゾーンに割り当てるブロックを、各ゾーンに割り当てるブロックを記述したテーブルに基づいて決定するブロック割当機能と、ゾーンに対するアクセスを制御するアクセス制御機能とを備える。【選択図】  図６
2005209184.tif 000002
【特許請求の範囲】
【請求項１】
予め定められた数のブロックを含んだ複数のゾーンに分割されたフラッシュメモリの仮想アドレス空間とホストシステムにおける論理アドレス空間との対応関係を管理するよう構成された管理モジュールと、
前記複数のゾーンの各々に分類されるブロックの仮想アドレスと前記フラッシュメモリにおける物理アドレスとの対応関係を管理することにより、前記複数のゾーンの各々に分類されるブロックを決定する分類制御モジュールと、
前記各ゾーンに含まれる不良ブロック数が許容数を超えているか否かを診断する診断モジュールとを備え、
前記診断モジュールにより、前記複数のゾーンのうちの１以上に前記許容数を超える不良ブロックが含まれていると診断された場合に、前記仮想アドレスと物理アドレスとの対応関係を変更することを特徴とするメモリコントローラ。
【請求項２】
前記分類制御モジュールは、
前記複数のゾーンの各々に分類されるブロックの仮想アドレスを前記フラッシュメモリにおける物理アドレスと関連付ける複数の関連テーブルを予め保持し、
前記複数の関連テーブルのうちの１つを参照することにより、前記複数のゾーンの各々に分類されるブロックを決定する、
ことを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を最小化するべく、前記複数の関連テーブルのうちの１つを選択し、
選択された前記関連テーブルを参照することにより、前記複数のゾーンの各々に分類されるブロックを決定する、
ことを特徴とする請求項２に記載のメモリコントローラ。
【請求項４】
前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、前記複数のゾーンの各々に分類される不良ブロック数が２番目に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関連テーブルのうちの１つを選択し、
選択された前記関連テーブルを参照することにより、前記複数のゾーンの各々に分類されるブロックを決定すると共に、分類される不良ブロック数が最大となるゾーンを使用禁止状態にする、
ことを特徴とする請求項２に記載のメモリコントローラ。
【請求項５】
前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、前記複数のゾーンの各々に分類される不良ブロック数がｎ番目（ｎは３以上の自然数）に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関連テーブルのうちの１つを選択し、
選択された前記関連テーブルを参照することにより、前記複数のゾーンの各々に分類されるブロックを決定すると共に、分類される不良ブロック数が１番目に大きいゾーンからｎ−１番目に大きいゾーンまでを使用禁止状態にする、
ことを特徴とする請求項２に記載のメモリコントローラ。
【請求項６】
前記分類制御モジュールは、
前記複数のゾーンの各々に分類されるブロックの仮想アドレスを前記フラッシュメモリにおける物理アドレスと関連付けるための複数の関数を予め保持し、
前記複数の関数のうちの１つを使用することにより、前記複数のゾーンの各々に分類されるブロックを決定する、
ことを特徴とする請求項１に記載のメモリコントローラ。
【請求項７】
前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を最小化するべく、前記複数の関数のうちの１つを選択し、
選択された関数を使用することにより、前記複数のゾーンの各々に分類されるブロックを決定する、
ことを特徴とする請求項６に記載のメモリコントローラ。
【請求項８】
前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、前記複数のゾーンの各々に分類される不良ブロック数が２番目に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関数のうちの１つを選択し、
選択された関数を使用することにより、前記複数のゾーンの各々に分類されるブロックを決定すると共に、分類される不良ブロック数が最大となるゾーンを使用禁止状態にする、
ことを特徴とする請求項６に記載のメモリコントローラ。
【請求項９】
前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、前記複数のゾーンの各々に分類される不良ブロック数がｎ番目（ｎは３以上の自然数）に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関数のうちの１つを選択し、
選択された関数を使用することにより、前記複数のゾーンの各々に分類されるブロックを決定すると共に、分類される不良ブロック数が１番目に大きいゾーンからｎ−１番目に大きいゾーンまでを使用禁止状態にする、
ことを特徴とする請求項６に記載のメモリコントローラ。
【請求項１０】
前記分類制御モジュールは、
前記複数のゾーンの各々に分類されるブロックの仮想アドレスを前記フラッシュメモリにおける物理アドレスと関連付けるべく、１対１の写像循環を生成する関数を予め保持し、
前記関数による変換の実行回数を設定することにより、前記複数のゾーンの各々に分類されるブロックを決定する、
ことを特徴とする請求項１に記載のメモリコントローラ。
【請求項１１】
前記関数は、テント写像を生成する関数である、
ことを特徴とする請求項１０に記載のメモリコントローラ。
【請求項１２】
前記テント写像における循環周期がＴであり、前記複数のゾーンのいずれかに分類されるブロックの総数がＮであるときに、ＴとＮが
Ｎ＝２（Ｔ−１）
の関係を満たす、
ことを特徴とする請求項１０に記載のメモリコントローラ。
【請求項１３】
前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を最小化するべく、前記関数による変換の実行回数を設定し、
設定された変換の実行回数により、前記複数のゾーンの各々に分類されるブロックを決定する、
ことを特徴とする請求項１０乃至１２のいずれか１項に記載のメモリコントローラ。
【請求項１４】
前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、前記複数のゾーンの各々に分類される不良ブロック数が２番目に大きいゾーンの不良ブロック数を最小化するべく、前記関数による変換の実行回数を設定し、
設定された変換の実行回数により、前記複数のゾーンの各々に分類されるブロックを決定すると共に、分類される不良ブロック数が最大となるゾーンを使用禁止状態にする、
ことを特徴とする請求項１０乃至１２のいずれか１項に記載のメモリコントローラ。
【請求項１５】
前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、前記複数のゾーンの各々に分類される不良ブロック数がｎ番目（ｎは３以上の自然数）に大きいゾーンの不良ブロック数を最小化するべく、前記関数による変換の実行回数を設定し、
設定された変換の実行回数により、前記複数のゾーンの各々に分類されるブロックを決定すると共に、分類される不良ブロック数が１番目に大きいゾーンからｎ−１番目に大きいゾーンまでを使用禁止状態にする、
ことを特徴とする請求項１０乃至１２のいずれか１項に記載のメモリコントローラ。
【請求項１６】
請求項１乃至１５のいずれか１項に記載のメモリコントローラとフラッシュメモリを備えることを特徴とするフラッシュメモリシステム。
【請求項１７】
ホストシステムにおける論理アドレス空間に対して予め定められた数のブロックを含んだ複数のゾーンに分割されたフラッシュメモリの仮想アドレス空間を割り当て、
更に、前記複数のゾーンの各々に分類されるブロックの仮想アドレスに対して物理アドレスを割り当てることにより、
ホストシステムとフラッシュメモリとの間でのデータ交換動作を制御するフラッシュメモリの制御方法であって、
前記ゾーンに含まれる不良ブロック数が許容数を超えているか否かを診断する処理と、
前記診断により、前記複数のゾーンのうちの１以上に許容数を超える不良ブロックが含まれていると診断された場合に、仮想アドレスと前記物理アドレスとの対応関係を変更する処理と、
を含むことを特徴とするフラッシュメモリの制御方法。
【請求項１８】
前記仮想アドレスと前記物理アドレスとの対応関係は、
前記複数のゾーンの各々に分類されるブロックの仮想アドレスを前記フラッシュメモリにおける物理アドレスと関連付ける複数の関連テーブルを予め保持し、
前記複数の関連テーブルのうちの１つを参照することにより決定される、
ことを特徴とする請求項１７に記載のフラッシュメモリの制御方法。
【請求項１９】
前記仮想アドレスと前記物理アドレスとの対応関係は、
前記複数のゾーンの各々に分類される不良ブロックの最大数を最小化するべく、前記複数の関連テーブルのうちの１つが選択され、
選択された前記関連テーブルを参照することにより決定される、
ことを特徴とする請求項１８に記載のフラッシュメモリの制御方法。
【請求項２０】
前記仮想アドレスと前記物理アドレスとの対応関係を変更する処理を実行しても、前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、
前記複数のゾーンの各々に分類される不良ブロック数が２番目に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関連テーブルのうちの１つが選択され、
選択された前記関連テーブルを参照することにより、前記仮想アドレスと前記物理アドレスとの対応関係が決定されると共に、分類される不良ブロック数が最大となるゾーンの使用が禁止される、
ことを特徴とする請求項１８に記載のフラッシュメモリの制御方法。
【請求項２１】
前記仮想アドレスと前記物理アドレスとの対応関係を変更する処理を実行しても、前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、
前記複数のゾーンの各々に分類される不良ブロック数がｎ番目（ｎは３以上の自然数）に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関連テーブルのうちの１つが選択され、
選択された前記関連テーブルを参照することにより、前記仮想アドレスと前記物理アドレスとの対応関係が決定されると共に、分類される不良ブロック数が１番目に大きいゾーンからｎ−１番目に大きいゾーンまでの使用が禁止される、
ことを特徴とする請求項１８に記載のフラッシュメモリの制御方法。
【請求項２２】
前記仮想アドレスと前記物理アドレスとの対応関係は、
前記複数のゾーンの各々に分類されるブロックの仮想アドレスを前記フラッシュメモリにおける物理アドレスと関連付けるための複数の関数を予め保持し、
前記複数の関数のうちの１つを使用することにより決定される、
ことを特徴とする請求項１７に記載のフラッシュメモリの制御方法。
【請求項２３】
前記仮想アドレスと前記物理アドレスとの対応関係は、
前記複数のゾーンの各々に分類される不良ブロックの最大数を最小化するべく、前記複数の関数のうちの１つが選択され、
選択された関数を使用することにより決定される、
ことを特徴とする請求項２２に記載のフラッシュメモリの制御方法。
【請求項２４】
前記仮想アドレスと前記物理アドレスとの対応関係を変更する処理を実行しても、前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、
前記複数のゾーンの各々に分類される不良ブロック数が２番目に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関数のうちの１つが選択され、
選択された関数を使用することにより、前記仮想アドレスと前記物理アドレスとの対応関係が決定されると共に、分類される不良ブロック数が最大となるゾーンの使用が禁止される、
ことを特徴とする請求項２２に記載のフラッシュメモリの制御方法。
【請求項２５】
前記仮想アドレスと前記物理アドレスとの対応関係を変更する処理を実行しても、前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、
前記複数のゾーンの各々に分類される不良ブロック数がｎ番目（ｎは３以上の自然数）に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関数のうちの１つが選択され、
選択された関数を使用することにより、前記仮想アドレスと前記物理アドレスとの対応関係が決定されると共に、分類される不良ブロック数が１番目に大きいゾーンからｎ−１番目に大きいゾーンまでの使用が禁止される、
ことを特徴とする請求項２２に記載のフラッシュメモリの制御方法。
【請求項２６】
前記仮想アドレスと前記物理アドレスとの対応関係は、
前記複数のゾーンの各々に分類されるブロックの仮想アドレスを前記フラッシュメモリにおける物理アドレスと関連付けるべく、１対１の写像循環を生成する関数を予め保持し、
前記関数による変換の実行回数を設定することにより決定される、
ことを特徴とする請求項１７に記載のフラッシュメモリの制御方法。
【請求項２７】
前記関数が、テント写像を生成する関数である、
ことを特徴とする請求項２６に記載のフラッシュメモリの制御方法。
【請求項２８】
前記テント写像における循環周期がＴであり、前記複数のゾーンのいずれかに分類されるブロックの総数がＮであるときに、ＴとＮが
Ｎ＝２（Ｔ−１）
の関係を満たす、
ことを特徴とする請求項２７に記載のフラッシュメモリの制御方法。
【請求項２９】
前記仮想アドレスと前記物理アドレスとの対応関係は、
前記複数のゾーンの各々に分類される不良ブロックの最大数を最小化するべく、前記関数による変換の実行回数が設定され、
設定された変換の実行回数により決定される、
ことを特徴とする請求項２６乃至２８のいずれか１項に記載のフラッシュメモリの制御方法。
【請求項３０】
前記仮想アドレスと前記物理アドレスとの対応関係を変更する処理を実行しても、前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、
前記複数のゾーンの各々に分類される不良ブロック数が２番目に大きいゾーンの不良ブロック数を最小化するべく、前記関数による変換の実行回数が設定され、
設定された変換の実行回数により、前記仮想アドレスと前記物理アドレスとの対応関係が決定されると共に、分類される不良ブロック数が最大となるゾーンの使用が禁止される、
ことを特徴とする請求項２６乃至２８のいずれか１項に記載のフラッシュメモリの制御方法。
【請求項３１】
前記仮想アドレスと前記物理アドレスとの対応関係を変更する処理を実行しても、前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、
前記複数のゾーンの各々に分類される不良ブロック数がｎ番目（ｎは３以上の自然数）に大きいゾーンの不良ブロック数を最小化するべく、前記関数による変換の実行回数が設定され、
設定された変換の実行回数により、前記仮想アドレスと前記物理アドレスとの対応関係が決定されると共に、分類される不良ブロック数が１番目に大きいゾーンからｎ−１番目に大きいゾーンまでの使用が禁止される、
ことを特徴とする請求項２６乃至２８のいずれか１項に記載のフラッシュメモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラ、フラッシュメモリシステム、及びホストシステムとフラッシュメモリとの間でのデータ交換動作を制御するためのフラッシュメモリの制御方法に関する。
【背景技術】
【０００２】
近年、メモリーカードやシリコンディスクといったメモリシステムにて使用される半導体メモリに、フラッシュメモリが広く採用されている。フラッシュメモリは、不揮発性メモリの一種である。フラッシュメモリに格納されたデータは、電力が供給されていないときでも保持されていることが要求される。
【０００３】
ＮＡＮＤ型フラッシュメモリは、上記のメモリシステムで特に多く用いられるフラッシュメモリの一種である。ＮＡＮＤ型フラッシュメモリに含まれている複数のメモリセルのそれぞれは、他のメモリセルとは独立して、論理値“１”を示すデータが格納されている消去状態から、論理値“０”を示すデータが格納されている書込状態へと変化することができる。
【０００４】
これとは対照的に、複数のメモリセルのうちの少なくとも１つが書込状態から消去状態へと変化しなければならないときには、各メモリセルは他のメモリセルと独立して変化することができない。このときには、ブロックと称される予め定められた数のメモリセルにおいて、全てのメモリセルが同時に消去状態とならなければならない。この一括消去動作は、一般的に、"ブロック消去"と称されている。ブロック消去が行われたブロックは、消去済ブロックと称される。
【０００５】
上記のような特徴により、ＮＡＮＤ型フラッシュメモリでは、データを上書きすることが不可能である。メモリセルにおける格納データを書き換えるためには、新しいデータを含んだブロックデータが消去済ブロックに書き込まれた後に、古いデータを格納しているブロックのためのブロック消去が行われなければならない。
【０００６】
書き換えられたデータは、以前に格納されていたブロックとは異なるブロックに書き込まれる。そのため、ホストシステムから供給されるアドレス信号によって指定される論理ブロックアドレスと、フラッシュメモリ内での実際のブロックアドレスを示す物理ブロックアドレスとの間の対応関係は、フラッシュメモリにてデータが書き換えられる毎に、コントローラによって動的に調整される。例えば、論理ブロックアドレスと物理ブロックアドレスの間の対応関係は、コントローラに設けられたアドレス変換テーブルに記載される。
【０００７】
フラッシュメモリに含まれる全てのブロックについて、論理ブロックアドレスと物理ブロックアドレスの間の対応関係がアドレス変換テーブルに記載されるときには、データ容量が大きなフラッシュメモリに対応して、大きなサイズのアドレス変換テーブルが必要とされる。大きなサイズのアドレス変換テーブルを作成するためには、大きなシステムリソースや長い処理時間が費やされる。
【０００８】
この問題を解決するために、後述する特許文献１では、フラッシュメモリ上のメモリ空間を複数のゾーンに分割し、各ゾーンに割り当てられたブロックについてのアドレス変換テーブルを作成するための技術を開示している。また、特許文献２は、フラッシュメモリに格納されているアドレス変換テーブルの一部分をＲＡＭ上のメモリ空間にコピーすることにより、アドレス変換テーブルを使用するために必要となるメモリ容量の増大を防止するアドレス変換方法を開示している。
【０００９】
さらに、特許文献３は、フラッシュメモリにおける一連のデータ書込動作を並行して実行できるようにしたメモリコントローラを開示している。その文献で開示されているメモリコントローラは、互いに異なるグループに属する複数の物理ブロックを仮想的に結合することにより形成された複数の仮想ブロックを使用するよう設計されている。
【００１０】
特許文献１で開示されているような複数のゾーンに分割されたメモリ空間を有するフラッシュメモリでは、ホストシステムに含まれるデータ領域に対する各ゾーンの割り当てにおいて、不良ブロックの存在が考慮されるべきである。言い換えると、ホストシステムに含まれる所定範囲のデータ領域に割り当てられるゾーンの記憶容量は、そのデータ領域で取り扱われるデータの上限よりも大きくするべく設計されることが好ましい。
このとき、各ゾーンでは、全ブロック数に対する予備的なブロックの比率が所定値となるように、少なくとも１つの予備的なブロック（冗長なブロック）が配置される。
【特許文献１】特開２０００−２８４９９６号公報
【特許文献２】特開２００２−７３４０９号公報
【特許文献３】特開２００３−１５９４６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながら、フラッシュメモリの一部分に多くの不良ブロックが存在するときには、その一部分が割り当てられたゾーンに、不良ブロックが集中する。１つのゾーンに含まれている不良ブロックの数がそのゾーンに含まれている予備的なブロックの数よりも大きくなったときには、消去済みのブロックを確保できなくなり、動作が停止してしまう。
【００１２】
上記のように、特定のゾーンに多くの不良ブロックが集中するときには、フラッシュメモリ全体の不良ブロックの数が正常動作のための許容量を越えていなくても、データを正しく記憶できない不具合が発生することがある。
【００１３】
本発明の目的は、フラッシュメモリの一部分に多くの不良ブロックが存在するときに、フラッシュメモリにおける不具合の発生を抑制することである。
【課題を解決するための手段】
【００１４】
上記目的を達成するために、本発明の第１の観点に係るメモリコントローラは、
予め定められた数のブロックを含んだ複数のゾーンに分割されたフラッシュメモリの仮想アドレス空間とホストシステムにおける論理アドレス空間との対応関係を管理するよう構成された管理モジュールと、
前記複数のゾーンの各々に分類されるブロックの仮想アドレスと前記フラッシュメモリにおける物理アドレスとの対応関係を管理することにより、前記複数のゾーンの各々に分類されるブロックを決定する分類制御モジュールと、
前記各ゾーンに含まれる不良ブロック数が許容数を超えているか否かを診断する診断モジュールとを備え、
前記診断モジュールにより、前記複数のゾーンのうちの１以上に前記許容数を超える不良ブロックが含まれていると診断された場合に、前記仮想アドレスと物理アドレスとの対応関係を変更することを特徴とする。
【００１５】
尚、前記分類制御モジュールは、
前記複数のゾーンの各々に分類されるブロックの仮想アドレスを前記フラッシュメモリにおける物理アドレスと関連付ける複数の関連テーブルを予め保持し、
前記複数の関連テーブルのうちの１つを参照することにより、前記複数のゾーンの各々に分類されるブロックを決定してもよい。
【００１６】
また、前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を最小化するべく、前記複数の関連テーブルのうちの１つを選択し、
選択された前記関連テーブルを参照することにより、前記複数のゾーンの各々に分類されるブロックを決定してもよい。
【００１７】
また、前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、前記複数のゾーンの各々に分類される不良ブロック数が２番目に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関連テーブルのうちの１つを選択し、
選択された前記関連テーブルを参照することにより、前記複数のゾーンの各々に分類されるブロックを決定すると共に、分類される不良ブロック数が最大となるゾーンを使用禁止状態にしてもよい。
【００１８】
また、前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、前記複数のゾーンの各々に分類される不良ブロック数がｎ番目（ｎは３以上の自然数）に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関連テーブルのうちの１つを選択し、
選択された前記関連テーブルを参照することにより、前記複数のゾーンの各々に分類されるブロックを決定すると共に、分類される不良ブロック数が１番目に大きいゾーンからｎ−１番目に大きいゾーンまでを使用禁止状態にしてもよい。
【００１９】
さらに、また、前記分類制御モジュールは、
前記複数のゾーンの各々に分類されるブロックの仮想アドレスを前記フラッシュメモリにおける物理アドレスと関連付けるための複数の関数を予め保持し、
前記複数の関数のうちの１つを使用することにより、前記複数のゾーンの各々に分類されるブロックを決定してもよい。
【００２０】
この場合、前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を最小化するべく、前記複数の関数のうちの１つを選択し、
選択された関数を使用することにより、前記複数のゾーンの各々に分類されるブロックを決定してもよい。
【００２１】
また、前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、前記複数のゾーンの各々に分類される不良ブロック数が２番目に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関数のうちの１つを選択し、
選択された関数を使用することにより、前記複数のゾーンの各々に分類されるブロックを決定すると共に、分類される不良ブロック数が最大となるゾーンを使用禁止状態にしてもよい。
【００２２】
また、前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、前記複数のゾーンの各々に分類される不良ブロック数がｎ番目（ｎは３以上の自然数）に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関数のうちの１つを選択し、
選択された関数を使用することにより、前記複数のゾーンの各々に分類されるブロックを決定すると共に、分類される不良ブロック数が１番目に大きいゾーンからｎ−１番目に大きいゾーンまでを使用禁止状態にしてもよい。
【００２３】
さらに、また、前記分類制御モジュールは、
前記複数のゾーンの各々に分類されるブロックの仮想アドレスを前記フラッシュメモリにおける物理アドレスと関連付けるべく、１対１の写像循環を生成する関数を予め保持し、
前記関数による変換の実行回数を設定することにより、前記複数のゾーンの各々に分類されるブロックを決定してもよい。
【００２４】
この場合、前記関数は、テント写像を生成する関数であってもよい。
【００２５】
また、前記テント写像における循環周期がＴであり、前記複数のゾーンのいずれかに分類されるブロックの総数がＮであるときに、ＴとＮが
Ｎ＝２（Ｔ−１）
の関係を満たしてもよい。
【００２６】
また、前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を最小化するべく、前記関数による変換の実行回数を設定し、
設定された変換の実行回数により、前記複数のゾーンの各々に分類されるブロックを決定してもよい。
【００２７】
また、前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、前記複数のゾーンの各々に分類される不良ブロック数が２番目に大きいゾーンの不良ブロック数を最小化するべく、前記関数による変換の実行回数を設定し、
設定された変換の実行回数により、前記複数のゾーンの各々に分類されるブロックを決定すると共に、分類される不良ブロック数が最大となるゾーンを使用禁止状態にしてもよい。
【００２８】
また、前記分類制御モジュールは、
前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、前記複数のゾーンの各々に分類される不良ブロック数がｎ番目（ｎは３以上の自然数）に大きいゾーンの不良ブロック数を最小化するべく、前記関数による変換の実行回数を設定し、
設定された変換の実行回数により、前記複数のゾーンの各々に分類されるブロックを決定すると共に、分類される不良ブロック数が１番目に大きいゾーンからｎ−１番目に大きいゾーンまでを使用禁止状態にしてもよい。
【００２９】
上記目的を達成するために、本発明の第２の観点に係るフラッシュメモリシステムは、本発明の第１の観点に係るメモリコントローラとフラッシュメモリを備えることを特徴とする。
【００３０】
上記目的を達成するために、本発明の第３の観点に係るフラッシュメモリの制御方法は、
ホストシステムにおける論理アドレス空間に対して予め定められた数のブロックを含んだ複数のゾーンに分割されたフラッシュメモリの仮想アドレス空間を割り当て、
更に、前記複数のゾーンの各々に分類されるブロックの仮想アドレスに対して物理アドレスを割り当てることにより、
ホストシステムとフラッシュメモリとの間でのデータ交換動作を制御するフラッシュメモリの制御方法であって、
前記ゾーンに含まれる不良ブロック数が許容数を超えているか否かを診断する処理と、
前記診断により、前記複数のゾーンのうちの１以上に許容数を超える不良ブロックが含まれていると診断された場合に、仮想アドレスと前記物理アドレスとの対応関係を変更する処理と、
を含むことを特徴とする。
【００３１】
尚、前記仮想アドレスと前記物理アドレスとの対応関係は、
前記複数のゾーンの各々に分類されるブロックの仮想アドレスを前記フラッシュメモリにおける物理アドレスと関連付ける複数の関連テーブルを予め保持し、
前記複数の関連テーブルのうちの１つを参照することにより決定されてもよい。
【００３２】
この場合、前記仮想アドレスと前記物理アドレスとの対応関係は、
前記複数のゾーンの各々に分類される不良ブロックの最大数を最小化するべく、前記複数の関連テーブルのうちの１つが選択され、
選択された前記関連テーブルを参照することにより決定されてもよい。
【００３３】
また、前記複数のっゾーンの各々に分類される不良ブロックの最大数を最小化するべく、前記複数の関連テーブルのうちの１つが選択され、
選択された前記関連テーブルを参照することにより決定されてもよい。
【００３４】
また、前記仮想アドレスと前記物理アドレスとの対応関係を変更する処理を実行しても、前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、
前記複数のゾーンの各々に分類される不良ブロック数が２番目に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関連テーブルのうちの１つが選択され、
選択された前記関連テーブルを参照することにより、前記仮想アドレスと前記物理アドレスとの対応関係が決定されると共に、分類される不良ブロック数が最大となるゾーンの使用が禁止されてもよい。
【００３５】
また、前記仮想アドレスと前記物理アドレスとの対応関係を変更する処理を実行しても、前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、
前記複数のゾーンの各々に分類される不良ブロック数がｎ番目（ｎは３以上の自然数）に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関連テーブルのうちの１つが選択され、
選択された前記関連テーブルを参照することにより、前記仮想アドレスと前記物理アドレスとの対応関係が決定されると共に、分類される不良ブロック数が１番目に大きいゾーンからｎ−１番目に大きいゾーンまでの使用が禁止されてもよい。
【００３６】
さらに、また、前記仮想アドレスと前記物理アドレスとの対応関係は、
前記複数のゾーンの各々に分類されるブロックの仮想アドレスを前記フラッシュメモリにおける物理アドレスと関連付けるための複数の関数を予め保持し、
前記複数の関数のうちの１つを使用することにより決定されてもよい。
【００３７】
この場合、前記仮想アドレスと前記物理アドレスとの対応関係は、
前記複数のゾーンの各々に分類される不良ブロックの最大数を最小化するべく、前記複数の関数のうちの１つが選択され、
選択された関数を使用することにより決定されてもよい。
【００３８】
また、前記仮想アドレスと前記物理アドレスとの対応関係を変更する処理を実行しても、前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、
前記複数のゾーンの各々に分類される不良ブロック数が２番目に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関数のうちの１つが選択され、
選択された関数を使用することにより、前記仮想アドレスと前記物理アドレスとの対応関係が決定されると共に、分類される不良ブロック数が最大となるゾーンの使用が禁止されてもよい。
【００３９】
また、前記仮想アドレスと前記物理アドレスとの対応関係を変更する処理を実行しても、前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、
前記複数のゾーンの各々に分類される不良ブロック数がｎ番目（ｎは３以上の自然数）に大きいゾーンの不良ブロック数を最小化するべく、前記複数の関数のうちの１つが選択され、
選択された関数を使用することにより、前記仮想アドレスと前記物理アドレスとの対応関係が決定されると共に、分類される不良ブロック数が１番目に大きいゾーンからｎ−１番目に大きいゾーンまでの使用が禁止されてもよい。
【００４０】
さらに、また、前記仮想アドレスと前記物理アドレスとの対応関係は、
前記複数のゾーンの各々に分類されるブロックの仮想アドレスを前記フラッシュメモリにおける物理アドレスと関連付けるべく、１対１の写像循環を生成する関数を予め保持し、
前記関数による変換の実行回数を設定することにより決定されてもよい。
【００４１】
この場合、前記関数が、テント写像を生成する関数であってもよい。
また、前記テント写像における循環周期がＴであり、前記複数のゾーンのいずれかに分類されるブロックの総数がＮであるときに、ＴとＮが
Ｎ＝２（Ｔ−１）
の関係を満たしてもよい。
また、前記仮想アドレスと前記物理アドレスとの対応関係は、
前記複数のゾーンの各々に分類される不良ブロックの最大数を最小化するべく、前記関数による変換の実行回数が設定され、
設定された変換の実行回数により決定されてもよい。
また、前記仮想アドレスと前記物理アドレスとの対応関係を変更する処理を実行しても、前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、
前記複数のゾーンの各々に分類される不良ブロック数が２番目に大きいゾーンの不良ブロック数を最小化するべく、前記関数による変換の実行回数が設定され、
設定された変換の実行回数により、前記仮想アドレスと前記物理アドレスとの対応関係が決定されると共に、分類される不良ブロック数が最大となるゾーンの使用が禁止されてもよい。
【００４２】
また、前記仮想アドレスと前記物理アドレスとの対応関係を変更する処理を実行しても、前記複数のゾーンの各々に分類される不良ブロックの最大数を許容数以下にすることができない場合に、
前記複数のゾーンの各々に分類される不良ブロック数がｎ番目（ｎは３以上の自然数）に大きいゾーンの不良ブロック数を最小化するべく、前記関数による変換の実行回数が設定され、
設定された変換の実行回数により、前記仮想アドレスと前記物理アドレスとの対応関係が決定されると共に、分類される不良ブロック数が１番目に大きいゾーンからｎ−１番目に大きいゾーンまでの使用が禁止されてもよい。
【発明の効果】
【００４３】
本発明によれば、フラッシュメモリの一部分に多くの不良ブロックが存在するときに、フラッシュメモリにおける不具合の発生を抑制することができる。
【発明を実施するための最良の形態】
【００４４】
図１は、本発明にかかるフラッシュメモリシステム１を概略的に示すブロック図である。
フラッシュメモリシステム１は、フラッシュメモリ２と、コントローラ３とを有している。フラッシュメモリシステム１は、ホストシステム４が有するメモリインタフェースに装着されることができる。
【００４５】
ホストシステム４にフラッシュメモリシステム１を装着することにより、ホストシステム４は、フラッシュメモリシステム１を外部記憶装置として動作させることができる。
【００４６】
ホストシステム４は、文字情報、音声情報あるいは画像情報などといった様々な情報を処理するためのパーソナルコンピュータや、デジタルカメラに代表される情報処理システム等であってもよい。例えば、ホストシステム４は、ＣＰＵ（Central Processing Unit）といった、メインプロセッサを含んでいてもよい。
【００４７】
図１に示されたフラッシュメモリ２は、不揮発性メモリである。フラッシュメモリ２において、データ読出動作およびデータ書込動作はともに、いわゆるページ単位で実行される。他方、フラッシュメモリ２に格納されたデータは、いわゆるブロック単位で消去される。例えば、１つのブロックは、３２個のページを含んでいる。１つのページは、５１２バイトのユーザ領域２５（図４にて示される）と、１６バイトの冗長領域２６（図４にて示される）とを含んでいる。
【００４８】
図１において、コントローラ３は、ホストインタフェース制御ブロック５と、マイクロプロセッサ６と、ホストインタフェースブロック７と、ワークエリア８と、バッファ９と、フラッシュメモリインタフェースブロック１０と、ＥＣＣブロック１１と、フラッシュシーケンサブロック１２とを有している。例えば、コントローラ３は、１つの半導体チップ上に集積される。以下に、コントローラ３の各部位の機能を説明する。
【００４９】
ホストインタフェース制御ブロック５は、ホストインタフェースブロック７の動作を制御するための機能ブロックである。ホストインタフェース制御ブロック５は、複数のレジスタ（図示せず）を有している。ホストインタフェース制御ブロック５は、各レジスタに設定された情報に基づいて、ホストインタフェースブロック７の動作を制御する。
【００５０】
マイクロプロセッサ６は、コントローラ３全体の動作を制御するための機能ブロックである。
ホストインタフェースブロック７は、マイクロプロセッサ６による制御により、データ、アドレス、ステータス、外部コマンド等を示す情報を、ホストシステム４との間で交換するための機能ブロックである。フラッシュメモリシステム１がホストシステム４に装着されたとき、フラッシュメモリシステム１とホストシステム４とは、外部バス１３を介して相互に接続される。ホストシステム４からフラッシュメモリシステム１に供給される情報は、ホストインタフェースブロック７を通してコントローラ３の内部に取り込まれる。フラッシュメモリシステム１からホストシステム４に供給される情報は、ホストインタフェースブロック７を通してホストシステム４へ出力される。
【００５１】
ワークエリア８は、フラッシュメモリ２の制御に使用されるデータを一時的に格納するためのメモリモジュールである。例えば、ワークエリア８は、複数のＳＲＡＭ（Static Random Access Memory）セルを含んでいる。
【００５２】
バッファ９は、フラッシュメモリ２から読み出されたデータ及びフラッシュメモリ２に書き込まれるべきデータを、保持するための機能ブロックである。フラッシュメモリ２から読み出されたデータは、ホストシステム４に出力されるまで、バッファ９に保持される。フラッシュメモリ２に書き込まれるべきデータは、フラッシュメモリ２のデータ書込動作の準備ができるまで、バッファ９に保持される。
【００５３】
フラッシュメモリインタフェースブロック１０は、内部バス１４を介して、データ、アドレス、ステータス及び内部コマンド等を示す情報を、フラッシュメモリ２との間で交換するための機能ブロックである。
内部コマンドは、コントローラ３からフラッシュメモリ２に与えられるコマンドであり、ホストシステム４からフラッシュメモリシステム１に与えられる外部コマンドとは区別される。
【００５４】
ＥＣＣブロック１１は、フラッシュメモリ２への書込データに付加されるエラーコレクションコードを生成するための機能ブロックである。加えて、ＥＣＣブロック１１は、フラッシュメモリ２から読み出されたデータに含まれるエラーコレクションコードに基づいて、読出データに含まれる誤りの検出及び訂正を行う。
【００５５】
フラッシュシーケンサブロック１２は、内部コマンドに基づいて、フラッシュメモリ２の動作を制御するための機能ブロックである。フラッシュシーケンサブロック１２は、複数のレジスタ（図示せず）を有している。フラッシュシーケンサブロック１２は、マイクロプロセッサ６による制御のもと、内部コマンドが実行されるときに使用される情報を、複数のレジスタに設定する。複数のレジスタに情報を設定した後、フラッシュシーケンサブロック１２は、各レジスタに設定された情報に基づいて、内部コマンドに従った動作を行う。加えて、フラッシュシーケンサブロック１２は、１つのブロックに割り付けられる複数のブロックをフラッシュメモリ２内で分散させるための分散処理を実行する。
【００５６】
以下に、図２及び図３を参照することにより、フラッシュメモリ２に含まれるメモリセル１６の構造を説明する。図２及び図３は、フラッシュメモリ２に含まれている１つのメモリセル１６の構造を概略的に示す断面図である。図２では、メモリセル１６にデータが書き込まれていない。図３では、メモリセル１６にデータが書き込まれている。
【００５７】
図２及び図３に示されているように、メモリセル１６は、Ｐ型半導体基板１７と、Ｎ型ソース拡散領域１８と、Ｎ型ドレイン拡散領域１９と、トンネル酸化膜２０と、フローティングゲート電極２１と、絶縁膜２２と、コントロールゲート電極２３とを含んでいる。
【００５８】
ソース拡散領域１８及びドレイン拡散領域１９は、共にＰ型半導体基板１７上に形成されている。トンネル酸化膜２０は、ソース拡散領域１８とドレイン拡散領域１９との間において、Ｐ型半導体基板１７を覆っている。フローティングゲート電極２１は、トンネル酸化膜２０上に形成されている。絶縁膜２２は、フローティングゲート電極２１上に形成されている。コントロールゲート電極２３は、絶縁膜２２上に形成されている。フラッシュメモリ２では、複数のメモリセル１６が直列に接続されている。１つのメモリセル１６は、１ビットのデータを格納する。
【００５９】
図２に示されているように、フローティングゲート電極２１に電子が蓄積されていないとき、メモリセル１６は、消去状態にある。他方、フローティングゲート電極２１に電子が蓄積されているとき、メモリセル１６は、書込状態にある。消去状態のメモリセル１６は、論理値“1”を示すデータを格納している。書込状態のメモリセル１６は、論理値“０”を示すデータを格納している。
【００６０】
メモリセル１６に格納されたデータを読み出すために予め定められた読出電圧が、消去状態となっているメモリセル１６のコントロールゲート電極２３に印加されていないときには、ソース拡散領域１８とドレイン拡散領域１９との間のＰ型半導体基板１７の表面に、チャネルが形成されない。従って、ソース拡散領域１８とドレイン拡散領域１９は、互いに電気的に絶縁される。
【００６１】
これに対して、消去状態となっているメモリセル１６のコントロールゲート電極２３に読出電圧が印加されているときには、ソース拡散領域１８とドレイン拡散領域１９との間のＰ型半導体基板１７の表面に、チャネル（図示せず）が形成される。ソース拡散領域１８とドレイン拡散領域１９は、そのチャネルによって電気的に接続される。
【００６２】
上述のように、消去状態となっているメモリセル１６のコントロールゲート電極２３に読出電圧が印加されていないときには、ソース拡散領域１８とドレイン拡散領域１９が電気的に絶縁される。消去状態となっているメモリセル１６のコントロールゲート電極２３に読出電圧が印加されているときには、ソース拡散領域１８とドレイン拡散領域１９が電気的に接続される。
【００６３】
図３に示されているように、フローティングゲート電極２１に電子が蓄積されているとき、メモリセル１６は書込状態にある。フローティングゲート電極２１はトンネル酸化膜２０と絶縁膜２２に挟まれている。そのため、電子が一旦フローティングゲート電極２１に注入されると、電位障壁により、きわめて長時間にわたり電子がフローティングゲート電極２１内にとどまる。
【００６４】
フローティングゲート電極２１に電子を蓄積することにより書込状態となっているメモリセル１６では、コントロールゲート電極２３に読出電圧が印加されているか否かにかかわらず、チャネル２４がソース拡散領域１８とドレイン拡散領域１９との間のＰ型半導体基板１７の表面に形成される。従って、メモリセル１６が書込状態となっているときには、コントロールゲート電極２３に読出電圧が印加されているか否かにかかわらず、ソース拡散領域１８とドレイン拡散領域１９が電気的に接続される。
【００６５】
メモリセル１６が消去状態であるか書込状態であるかを特定するためのデータ読出動作を、以下に説明する。フラッシュメモリ２では、複数のメモリセル１６が直列に接続されている。その複数のメモリセル１６のうちの１つが、格納データの読み出しのためにコントローラ３によって選択される。
所定の低レベル電圧が、その選択された１つのメモリセル１６に取り付けられたコントロールゲート電極２３に印加される。低レベル電圧よりも高い所定の高レベル電圧（読出電圧）が、複数のメモリセル１６のうちの他のものに取り付けられたコントロールゲート電極２３に印加される。この状況で、一連のメモリセル１６が導通しているか否かを、所定の検出器により検出する。検出器が導通を検出したとき、選択されたメモリセル１６は、書込状態である。検出器が不導通を検出したとき、選択されたメモリセル１６は、消去状態である。
【００６６】
上記のように、フラッシュメモリ２は、直列に接続された一連のメモリセル１６のうちの任意の１つから論理値“０”又は“１”を示す格納データを読み出すように、設計されている。
メモリセル１６の状態を消去状態と書込状態との間で変更するときには、メモリセル１６のデータ読出動作にて使用される電圧よりも大きい消去電圧又は書込電圧が使用される。
【００６７】
消去状態となっているメモリセル１６を書込状態に変更するときには、コントロールゲート電極２３の電位がフローティングゲート電極２１の電位よりも高くなるように、書込電圧がコントロールゲート電極２３に印加される。この書込電圧によって、Ｐ型半導体基板１７とフローティングゲート電極２１の間に、トンネル酸化膜２０を介してＦＮ（ファウラーノルトハイム；Fowler-Nordhaim）トンネル電流が流れる。この結果、電子がフローティングゲート電極２１に注入される。
【００６８】
他方、書込状態となっているメモリセル１６を消去状態に変更するときには、コントロールゲート電極２３の電位がフローティングゲート電極２１の電位よりも低くなるように、消去電圧がコントロールゲート電極２３に印加される。この消去電圧によって、フローティングゲート電極２１に蓄積されている電子がトンネル酸化膜２０を介してＰ型半導体基板１７に排出される。
【００６９】
以下に、フラッシュメモリ２にデータを格納するための構造を説明する。図４は、フラッシュメモリ２のアドレス空間を概略的に示している。図４に示された構造において、フラッシュメモリ２のアドレス空間は、"ページ"と"ブロック"に基づいて分割されている。ページは、フラッシュメモリ２にて行われるデータ読出動作及びデータ書込動作での処理単位である。ブロックは、フラッシュメモリ２にて行われるデータ消去動作での処理単位である。
【００７０】
１つのページは、５１２バイトのユーザ領域２５と、１６バイトの冗長領域２６とを含んでいる。ユーザ領域２５は、ホストシステム４から供給されるユーザデータを格納する。冗長領域２６は、エラーコレクションコード（ＥＣＣ）、対応論理ブロックアドレスあるいはブロックステータス等を示す付加情報を格納する。エラーコレクションコードは、ユーザ領域２５に格納されたデータに含まれる誤りを訂正するために使用される。ユーザ領域２５に格納されたデータに含まれる誤りの数が予め定められた閾値以下であるときには、その誤りは、エラーコレクションコードによって訂正されることができる。このとき、ユーザ領域２５から読み出されたデータは、エラーコレクションコードによって正しいデータに修正される。
【００７１】
対応論理ブロックアドレスは、１つのブロックに含まれている少なくとも１つのユーザ領域２５に有効なデータが格納されているときに、そのブロックが対応付けられている論理ブロックのアドレスを示す。論理ブロックアドレスは、ホストシステム４から与えられるホストアドレスに基づいて決定されるブロックのアドレスである。他方、フラッシュメモリ２内における実際のブロックのアドレスは、物理ブロックアドレスと称される。
【００７２】
１つのブロックに含まれている全てのユーザ領域２５に有効なデータが全く格納されていないときには、そのブロックに含まれている冗長領域２６に、対応論理ブロックアドレスが格納されていない。従って、冗長領域２６に対応論理ブロックアドレスが格納されているか否かを判定することにより、その冗長領域２６が含まれているブロックにてデータが消去されたか否かを判定することができる。冗長領域２６に対応論理ブロックアドレスが格納されていないとき、その冗長領域２６が含まれているブロックは、データが消去された状態にある。
【００７３】
ブロックステータスは、各ブロックが正常にデータを格納することができない不良ブロックであるか否かを示す。例えば、あるブロックが不良ブロックであるときには、そのブロックに対応して設けられたブロックステータスフラグがオン状態に設定される。
【００７４】
フラッシュメモリ２において、メモリセル１６の状態は、セル単位で書込状態から消去状態に変化することができず、その状態変化はブロック単位でのみ行われることができる。このため、あるページに新しいデータを格納するには、その新しいデータを含んだブロックデータが消去済ブロックに書き込まれた後に、古いデータを格納しているブロックのためのブロック消去が行われなければならない。ブロック消去はブロック単位で実行されるので、古いデータを格納していたページを含むブロックでは、全てのページの格納データが消去される。従って、あるページの格納データを書き換えるときには、そのページが含まれているブロック内の他のページの格納データも、消去済ブロックに移転させるための処理が必要となる。
【００７５】
書き換えられるべき新しいデータを格納するブロックは、古いデータを格納するブロックとは異なる。従って、ホストシステム４から与えられるアドレス信号によって指定される論理ブロックアドレスと、フラッシュメモリ２における実際のブロックアドレスである物理ブロックアドレスとの対応関係は、フラッシュメモリ２にてデータが書き換えられる毎に、コントローラ３によって動的に調整されなければならない。
【００７６】
こうした観点に基づき、コントローラ３は、ユーザ領域２５へのデータ書込動作に対応して論理ブロックアドレス（対応論理ブロックアドレス）を示す付加情報を冗長領域２６に書き込むことにより、論理ブロックアドレスと物理ブロックアドレスの対応関係を管理できるようにしている。
【００７７】
フラッシュメモリ２のアドレス空間においては、複数のブロックが複数のゾーンのうちの１つに分類される。以下に、ホストシステム４における論理ブロックアドレス空間への、フラッシュメモリ２におけるゾーンの割付例について説明する。
【００７８】
図５に示された例では、１つのゾーンが１０２４個のブロック＃０〜＃１０２３を有している。ブロック＃０〜＃１０２３のそれぞれは、３２個のページＰ００〜Ｐ３１を有している。ブロックは、データ消去動作における処理単位である。ページは、データ読出動作及びデータ書込動作における処理単位である。図５に示されたゾーンは、ホストシステム４において所定範囲の論理ブロックアドレス空間に割り付けられている。
【００７９】
例えば、１０２４個のブロックを含んだゾーンは、１０００ブロックに相当するデータ容量を有する論理ブロックアドレス空間に割り付けられる。この例では、１つのゾーンにおける記憶容量が、２４個のブロックに相当するデータ量分だけ、対応する論理ブロックアドレス空間のデータ容量よりも大きい。この割付では、不良ブロックが考慮されている。フラッシュメモリ２にて格納データが書き換えられるときには、新しいデータを書き込むための予備的なブロックが１つ必要となる。従って、実質的には、１つのゾーンで２３個のブロックが余剰ブロックとして扱われる。
１つのゾーンに含まれるブロックの数は、フラッシュメモリシステム１の用途やフラッシュメモリ２の仕様などに基づいて、適宜設定されてもよい。
【００８０】
以下に、各ゾーンにおける複数のブロックの分類例について説明する。フラッシュメモリ２内の複数のブロックは、物理ブロックアドレスの順に各ゾーンに分類されることもできる。しかしながら、この場合には、不良ブロックがフラッシュメモリ２の一部分に偏在することにより、特定のゾーンに多くの不良ブロックが分類されることがある。
他方、本発明にかかるフラッシュメモリシステム１では、特定のゾーンに不良ブロックが集中することを防止するために、１つのゾーンに含まれる複数のブロックが、フラッシュメモリ２内で分散されている。
【００８１】
図６は、フラッシュメモリ２が有する複数のブロックを複数のゾーンのうちの１つに分類するための処理を示す概略図である。図６において、ホストシステム４から与えられる論理ブロックアドレスＬＢＡは、アドレス変換テーブル３１によって、仮想ブロックアドレスＶＢＡに変換される。例えば、アドレス変換テーブル３１は、ワークエリア８に格納され、ホストインタフェース制御ブロック５によって参照される。仮想ブロックアドレスＶＢＡは、分散処理部３２により、物理ブロックアドレスＰＢＡと関連づけられる。例えば、フラッシュシーケンサブロック１２は、所定のプログラムを実行することにより、図６に示す分散処理部３２として機能することが好ましい。
【００８２】
仮想ブロックアドレスＶＢＡは、１つのゾーンに含まれる複数のブロックに付けられたシリアル番号を、そのゾーンに対応するオフセット値に加算することにより、与えられる。図７に示した例では、各ゾーンに対して１０２４個のブロックが分類される。従って、１つのゾーン内では、各ブロックに対して“０”から"1023"までのシリアル番号が付されている。各ゾーンに対応するオフセット値は、以下の通りである。
ゾーン＃０：０，
ゾーン＃１：１０２４×１，
ゾーン＃２：１０２４×２，
．
．
．
ゾーン＃Ｎ：１０２４×Ｎ．
【００８３】
仮想ブロックアドレス空間では、フラッシュメモリ２内の全てのブロックが、仮想ブロックアドレスＶＢＡが１ずつ増加するように配置されている。ブロックのシリアル番号及び仮想ブロックアドレスＶＢＡがビットデータ（バイナリデータ）の形式であるときには、各ゾーンに割り振られたゾーン番号（バイナリデータ）をブロックのシリアル番号よりも上位のビットに挿入することにより、仮想ブロックアドレスＶＢＡが与えられる。ゾーン＃０〜＃７のそれぞれが１０２４個のブロックを含んでいるとき、ブロックのシリアル番号は、１０ビットのデータ（"00 0000 0000"から"11 1111 1111"まで）によって表示される。
【００８４】
８個のゾーン＃０〜＃７には、３ビットのデータ（"000"から"111"まで）が、ゾーン番号として割り振られる。この場合には、ブロックのシリアル番号よりも上位のビットにゾーン番号を挿入することによって、１３ビットの仮想ブロックアドレスＶＢＡが作成される。例えば、ゾーン番号が"100"であるゾーン＃４内でシリアル番号"16"（２進数形式で"00 0001 0000"）を有するブロックの仮想ブロックアドレスＶＢＡは、２進数形式で"1 0000 0001 0000"となる。分散処理部３２は、仮想ブロックアドレスＶＢＡを物理ブロックアドレスＰＢＡと関連づけるために、予め用意された関数またはテーブルを参照する。
【００８５】
図７は、論理ブロックアドレスＬＢＡと、仮想ブロックアドレスＶＢＡと、物理ブロックアドレスＰＢＡとの間での相関関係を示している。図７では、１０００個のブロック毎に分割された複数の論理ブロックアドレス空間のそれぞれが、１０２４個のブロックを含む複数のゾーン＃０〜＃Ｎのそれぞれに割り付けられている。ゾーン＃Ｋにおける仮想ブロックアドレスの最小値は、ゾーン＃（Ｋ−１）における仮想ブロックアドレスＶＢＡの最大値よりも１だけ大きい（１≦Ｋ≦Ｎ）。
【００８６】
この仮想ブロックアドレスＶＢＡの設定により、仮想ブロックアドレス空間では、ゾーン＃０〜＃Ｎのうちで互いに隣り合っている任意の２つのゾーンが仮想ブロックアドレスＶＢＡを媒介して連結されている。仮想ブロックアドレスＶＢＡは、分散処理部３２により、予め用意された関数またはテーブルの設定に従って、物理ブロックアドレスＰＢＡと関連づけられる。分散処理部３２によって参照される関数またはテーブルは、互いに大きく異なる物理ブロックアドレスＰＢＡを有する複数のブロックを、ゾーン＃０〜＃７のうちの１つに分類するべく設計されていればよい。この結果として、１０００ブロック毎に分割された論理ブロックアドレス空間に、フラッシュメモリ２内で分散されている１０２４個のブロックが含まれるゾーンを割り付けることができる。
【００８７】
以下に、分散処理部３２によって実行される分散処理を説明する。フラッシュメモリ２内で分散されている複数のブロックは、分散処理が実行されることにより、複数のゾーンのうちの１つに分類される。この分散処理において、分散処理部３２は、仮想ブロックアドレスＶＢＡを物理ブロックアドレスＰＢＡと関連づける。分散処理を実行するために、分散処理部３２は、図８に示されるようなアドレスレジスタ３３と、処理設定レジスタ３４とを使用する。例えば、アドレスレジスタ３３及び処理設定レジスタ３４は、フラッシュシーケンサブロック１２内に含まれていてもよい。
【００８８】
仮想ブロックアドレスＶＢＡは、フラッシュメモリ２の仮想アドレス空間内で複数のページのそれぞれに割り当てられた複数の仮想ページアドレスのそれぞれに、含まれている。仮想ページアドレスは、仮想ブロックアドレスＶＢＡと、５ビットのページ番号とを含んでいる。５ビットのページ番号は、１つのブロックに含まれる３２個のページのそれぞれを識別するために使用される。アドレスレジスタ３３は、仮想ページアドレスを一時的に格納する。処理設定レジスタ３４は、仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡとの対応関係を示す情報を格納する。
【００８９】
分散処理部３２は、物理ブロックアドレスＰＢＡを生成するために、アドレスレジスタ３３に格納されている仮想ページアドレスに含まれている仮想ブロックアドレスＶＢＡを読み出す。そして、分散処理部３２は、処理設定レジスタ３４に格納されている情報に基づいて、アドレスレジスタ３３に格納されている仮想ブロックアドレスＶＢＡを、物理ブロックアドレスＰＢＡに置き換える。
アドレスレジスタ３３に格納されている仮想ページアドレスに含まれているページ番号を、分散処理部３２によって生成された物理ブロックアドレスＰＢＡに付加することにより、物理ページアドレスが作成される。その物理ページアドレスは、フラッシュメモリ２のメモリ空間３５へと提供される。
【００９０】
図９は、アドレスレジスタ３３に格納された仮想ページアドレスに基づいて物理ページアドレスを作成するための動作を示している。
図９に示されている仮想ページアドレスは、ページ番号を示す下位の５ビットデータと、仮想ブロックアドレスＶＢＡを示す上位の１３ビットデータとに分割される。
【００９１】
分散処理部３２は、仮想ブロックアドレスＶＢＡを示す上位の１３ビットデータを、物理ブロックアドレスＰＢＡを示す別の１３ビットデータに置き換える。図９に示された例では、仮想ページアドレスに含まれている上位の１３ビットデータが、仮想ブロックアドレスＶＢＡとして、"0 0001 0001 0001"を示している。"0 0001 0001 0001"は、分散処理部３２によって、物理ブロックアドレスＰＢＡとしての"1 1001 1001 1001"に置き換えられる。
分散処理部３２によって実行される分散処理では、仮想ブロックアドレスＶＢＡを示すビットデータは物理ブロックアドレスＰＢＡを示すビットデータに置き換えられるが、ページ番号を示す５ビットデータは変更されない。仮想ページアドレス内で仮想ブロックアドレスＶＢＡを示すビットの数は、フラッシュメモリ２に設けられたブロックの数に対応して決定される。
【００９２】
仮想ページアドレス内でページ番号を示すビットの数は、１つのブロックに含まれるページの数に対応して決定される。例えば、フラッシュメモリ２において、メモリ空間が８１９２個のブロックに分割されており、１つのブロックが３２個のページを有しているとき、１３ビットのデータによって仮想ブロックアドレスＶＢＡが識別されるとともに、５ビットのデータによってページ番号が識別される。
【００９３】
次に、仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡとの間の対応関係を設定するための処理について説明する。
図１０は、仮想ブロックアドレスＶＢＡが直接的に物理ブロックアドレスＰＢＡに割り当てられている場合の、仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡとの間の対応関係を示している。
図１０に示す例では、分散処理部３２が分散処理を実行しない。この場合、フラッシュメモリ２内の各ブロックが有する物理ブロックアドレスＰＢＡは、仮想ブロックアドレスＶＢＡと一致する。
【００９４】
従って、仮想アドレス空間におけるゾーン＃０〜＃７のそれぞれは、物理ブロックアドレスＰＢＡに従って、フラッシュメモリ２における複数の物理的な区域のそれぞれに、割り付けられている。この場合、例えば、物理ブロックアドレスＰＢＡとして"0 0100 0000 0000(1024)"から"0 0111 1111 1111(2047)"までが割り振られた１０２４個のメモリセル１６で構成されるメモリ区域に３０個の不良ブロックが含まれているとき、その３０個の不良ブロックがゾーン＃１に分類される。
【００９５】
この場合、ホストシステム４においてゾーン＃１に対応する論理ブロックアドレス空間に対して提供されたデータの全てがフラッシュメモリ２において正しく格納される保証はない。不良ブロックがデータを格納するために使用される有効ブロックから排除される場合には、ゾーン＃１において有効ブロックとして使用するためのブロックが不足する。
【００９６】
不良ブロックが論理ブロックアドレス空間の一部分に割り当てられたときには、ホストシステム４がその一部分に対して提供したデータは、フラッシュメモリ２において適切に格納されることができない。本発明にかかるフラッシュメモリシステム１は、複数のゾーンのそれぞれに分類される不良ブロックの数が平均化されるように、仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの対応関係を設定する。
【００９７】
例えば、フラッシュメモリシステム１は、仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの対応関係を記述する複数の置換テーブルを備えている。複数の置換テーブルは、コントローラ３内で固定的なデータ及びプログラムを記憶するＲＯＭ（Read Only Memory）に予め記憶されてもよい。あるいは、複数の置換テーブルは、フラッシュメモリ２内で所定の記憶領域に予め記憶され、コントローラ３によって読み出されてもよい。
【００９８】
図１１は、置換テーブルの一例を示している。置換テーブルは、仮想ブロックアドレスＶＢＡを物理ブロックアドレスＰＢＡと関連付けている。フラッシュメモリシステム１は、分散処理を実行するために、各ゾーンに分類される不良ブロックの最大数を最小化する置換テーブルの１つを選択する。
【００９９】
複数の置換テーブルのうちの１つを選択するために、コントローラ３は、フラッシュメモリ２内にある全ての不良ブロックを検出し、置換テーブルのうちの１つに従って各不良ブロックに対応した仮想ブロックアドレスＶＢＡを特定する。続いて、コントローラ３は、不良ブロックに対応した仮想ブロックアドレスＶＢＡに基づいて、各ゾーンに含まれる不良ブロックの数を集計する。コントローラ３は、各置換テーブルに対応した集計結果を参照することにより、各ゾーンに分類される不良ブロックの最大数を最小化する置換テーブルを検出する。
【０１００】
不良ブロックが分類されているゾーンを特定するために、コントローラ３は、不良ブロックに付された物理ブロックアドレスＰＢＡを、置換テーブル内にて検索する。不良ブロックに付された物理ブロックアドレスＰＢＡが検出されたときには、その置換テーブルにて当該物理ブロックアドレスＰＢＡと関連付けられた仮想ブロックアドレスＶＢＡが読み出される。仮想ブロックアドレスＶＢＡは、１０２４個ごとに、複数のゾーンのうちの１つに割り付けられている。従って、１つの不良ブロックに付された１つの仮想ブロックアドレスＶＢＡに対応して、１つのゾーンが特定される。
【０１０１】
例えば、コントローラ３によって検出された不良ブロックは、図１２に示すような物理ブロックアドレスＰＢＡを有する。
図１２にて示される不良ブロックのリストにおいて不良ブロックの物理ブロックアドレスＰＢＡとして一番上に記されている"0 0100 0000 0001"は、図１１にて示される置換テーブルで物理ブロックアドレスＰＢＡを記した列において、上から８番目に記述されている。従って、図１１にて示される置換テーブルにより、"0 0000 0000 0111"が、物理ブロックアドレスＰＢＡとしての"0 0100 0000 0001"に対応した不良ブロックの仮想ブロックアドレスＶＢＡとして、特定される。物理ブロックアドレスＰＢＡにおける"0 0100 0000 0001"は、ゾーン＃０に割り付けられた"0 0000 0000 0000"から"0 0011 1111 1111"までの仮想アドレス範囲に含まれている。上記のようにして、図１２にて一番上に記されている不良ブロックはゾーン＃０に分類されていることが、特定される。
【０１０２】
フラッシュメモリ２における８１９２個のブロックが、図１３に示すように８つのゾーンに分類されているとき、ゾーン＃０〜＃７のそれぞれに分類されている不良ブロックの総数として、変数Ｎｂ０〜Ｎｂ７のそれぞれが算定される。変数Ｎｂ０〜Ｎｂ７のうちの最大値は、各ゾーンに分類される不良ブロックの最大数を示す。
【０１０３】
例えば、変数Ｎｂ０〜Ｎｂ７のそれぞれが、以下のように算定される。
Ｎｂ０＝５，
Ｎｂ１＝３，
Ｎｂ２＝８，
Ｎｂ３＝２，
Ｎｂ４＝６，
Ｎｂ５＝４，
Ｎｂ６＝９，
Ｎｂ７＝７．
この場合、ゾーン＃６に分類される不良ブロックの数を示す変数Ｎｂ６が、変数Ｎｂ０〜Ｎｂ７のうちの最大値となる。従って、変数Ｎｂ６によって示される"9"が、各ゾーンに分類される不良ブロックの最大数である。
【０１０４】
複数の置換テーブルのそれぞれに対応して、各ゾーンに分類される不良ブロックの最大数が特定された後、その最大数を最小化する置換テーブルの１つが、分散処理を実行するために選択される。例えば、フラッシュメモリシステム１が５つの置換テーブルＴｂ１〜Ｔｂ５を有している。置換テーブルＴｂ１に対応して算定された変数Ｎｂ０〜Ｎｂ７の最大値は、Ｎｂ３＝９である。置換テーブルＴｂ２に対応して算定された変数Ｎｂ０〜Ｎｂ７の最大値は、Ｎｂ６＝８である。置換テーブルＴｂ３に対応して算定された変数Ｎｂ０〜Ｎｂ７の最大値は、Ｎｂ７＝１０である。置換テーブルＴｂ４に対応して算定された変数Ｎｂ０〜Ｎｂ７の最大値は、Ｎｂ０＝１５である。置換テーブルＴｂ５に対応して算定された変数Ｎｂ０〜Ｎｂ７の最大値は、Ｎｂ４＝６である。この場合、不良ブロックの最大数を最小化するテーブルとして、置換テーブルＴｂ５が選択される。
【０１０５】
分散処理を実行するために選択された置換テーブルは、図８にて示される処理設定レジスタ３４に格納された情報によって特定される。上記のようにして選択された置換テーブルは、仮想ブロックアドレスＶＢＡを物理ブロックアドレスＰＢＡに置き換えるために、分散処理部３２によって参照される。
【０１０６】
仮想ブロックアドレス（ＶＢＡ）と物理ブロックアドレス（ＰＢＡ）の対応関係は、予め定められた関数によって設定されてもよい。この場合、フラッシュメモリシステム１において、コントローラ３は、複数種類の関数を定義する情報を予め記憶している。
【０１０７】
コントローラ３は、各ゾーンに分類される不良ブロックの最大数を最小化する関数を選択する。コントローラ３において定義されている関数は、仮想ブロックアドレス空間と物理ブロックアドレス空間の間で１対１写像を行うためのものである。各不良ブロックが分類されるゾーンは、分散処理部３２による分散処理で使用される関数に対する逆関数によって、特定することができる。
【０１０８】
コントローラ３において定義されている関数によって生成される写像は、周期軌道を描くことが望ましい。言い換えると、コントローラ３において定義されている関数は、写像循環を生成するためのものであることが望ましい。周期軌道を形成するための写像の一例として、テント写像が用いられてもよい。テント写像は、以下の等式（１）、（２）で定義される関数Ｆ（ｘ）を使用することによって、実行される。
【０１０９】
変数ｘが０≦ｘ＜２（ｎ−１）のとき
Ｆ（ｘ）＝２ｘ          （１）
変数ｘが２（ｎ−１）≦ｘ＜２ｎのとき
Ｆ（ｘ）＝−２ｘ＋２（ｎ＋１）−１          （２）
【０１１０】
分散処理の対象となるブロックには、０から順番にシリアル番号が付される。等式（１）、（２）において、変数ｎには、ブロックに付されたシリアル番号を２進数コードの形式で表示するために必要な桁数が代入される。例えば、８１９２個のブロックが分散処理の対象となるとき、ブロックに付されたシリアル番号の最大値"8191"は、２進数コードの形式で"1 1111 1111 1111"となる。このとき、変数ｎには、"13"が代入される。
【０１１１】
等式（１）、（２）で示される関数Ｆ（ｘ）を使用した変換をｎ＋１回実行することにより得られる関数値は、元の値と一致する。言い換えると、等式（１）、（２）で示される関数Ｆ（ｘ）による写像は、循環周期Ｔ＝ｎ＋１を有している。例えば、変数ｎに"4"が代入されるとともに、元の値として変数ｘに“１”が代入されたときには、関数Ｆ（ｘ）を使用した変換を５回実行することにより得られる関数値は、下記のように、元の値“１”と一致する。
Ｆ（１）＝２×１＝２，
Ｆ（２）＝２×２＝４，
Ｆ（４）＝２×４＝８，
Ｆ（８）＝−２×８＋３２−１＝１５，
Ｆ（１５）＝−２×１５＋３２−１＝１．
【０１１２】
関数Ｆ（ｘ）を使用した変換の実行回数を示す変数ａ及びｂが、以下の等式（３）で示される関係を有すると仮定する。
ａ＋ｂ＝ｎ＋１          （３）
この場合、等式（１）、（２）で示される関数Ｆ（ｘ）による写像は循環周期Ｔ＝ｎ＋１を有していることから、関数Ｆ（ｘ）を使用したａ回の変換は、ｂ回の変換の逆変換となる。例えば、変数ｎに"4"が代入されるとともに、元の値として変数ｘに“１”が代入されたときには、関数Ｆ（ｘ）を使用した変換を２回実行することにより、関数値"4"が得られる。他方、変数ｎに  "4"が代入されるとともに、元の値として変数ｘに"4"が代入されたときには、関数Ｆ（ｘ）を使用した変換を３回実行することにより、関数値“１”が得られる。関数Ｆ（ｘ）による写像の循環周期Ｔと、各ゾーンに分類されるブロックの総数Ｍは、以下の等式（４）で示される関係を満たすことが望ましい。
Ｍ＝２（Ｔ−１）          （４）
【０１１３】
図１３は、上記の等式（１）、（２）で示される関数Ｆ（ｘ）を用いた仮想ブロックアドレス空間と物理ブロックアドレス空間との間のマッピング例を示している。
図１３において、フラッシュメモリ２の物理ブロックアドレス空間は、８１９２個のブロックに分割されている。等式（１）、（２）で示される関数Ｆ（ｘ）を用いた分散処理を実行するために、図１４に示すような分散処理部３２からの出力をチェックするモニタレジスタ３６が適用される。処理設定レジスタ３４には、関数Ｆ（ｘ）を用いた変換の実行回数を示す情報が格納される。
【０１１４】
フラッシュメモリ２に８１９２個のブロックが含まれているときには、関数Ｆ（ｘ）における変数ｎが"13"に設定される。処理設定レジスタ３４に格納された情報が示す変換の実行回数は、“０”から"13"までの範囲内にある。変換の実行回数は、各ゾーンに分類される不良ブロックの最大数を最小化する数値に設定される。
【０１１５】
各ゾーンに分類される不良ブロックの最大数を最小化する変換の実行回数は、以下のようにして決定される。始めに、コントローラ３は、フラッシュメモリ２内にある全ての不良ブロックを検出する。この検出処理において、処理設定レジスタ３４に変換の実行回数として“０”を示す情報が設定される。
【０１１６】
すなわち、仮想ブロックアドレスＶＢＡが直接的に物理ブロックアドレスＰＢＡへと変換される状態において、フラッシュメモリ２におけるデータの消去、書込み、読出し等によって、コントローラ３は不良ブロックを検出する。これに続いて、分散処理部３２は、処理設定レジスタ３４に変換の実行回数として“１”を示す情報を設定した後に、上記の検出処理において検出された不良ブロックに付された物理ブロックアドレスＰＢＡを変数ｘに設定することにより、関数Ｆ（ｘ）の写像を生成する。
【０１１７】
モニタレジスタ３６は、分散処理部３２による変換結果を蓄積する。モニタレジスタ３６に蓄積された値は、不良ブロックの仮想ブロックアドレスＶＢＡとして読み出される。コントローラ３は、不良ブロックの仮想ブロックアドレスＶＢＡに基づいて、各ゾーンに含まれる不良ブロックの数を集計する。コントローラ３は、処理設定レジスタ３４に格納される情報を、変換の実行回数が１ずつ増加するべく更新する。
【０１１８】
処理設定レジスタ３４に格納された情報によって示される変換の実行回数に対応した写像のグループが分散処理部３２によって生成されるごとに、コントローラ３は、各ゾーンに含まれる不良ブロックの数を集計する。コントローラ３は、変換の実行回数に対応した集計結果を参照することにより、各ゾーンに分類される不良ブロックの最大数を最小化する変換の実行回数を検出する。
【０１１９】
例えば、関数Ｆ（ｘ）を用いた変換の実行回数に対応して、各ゾーンにおける不良ブロックの最大数が、次のように特定されたとする。
変換の実行回数が１回のとき、変数Ｎｂ０〜Ｎｂ７のうちの最大値がＮｂ４＝８。
変換の実行回数が２回のとき、変数Ｎｂ０〜Ｎｂ７のうちの最大値がＮｂ６＝１０。
変換の実行回数が３回のとき、変数Ｎｂ０〜Ｎｂ７のうちの最大値がＮｂ１＝９。
変換の実行回数が４回のとき、変数Ｎｂ０〜Ｎｂ７のうちの最大値がＮｂ５＝１１。
変換の実行回数が５回のとき、変数Ｎｂ０〜Ｎｂ７のうちの最大値がＮｂ３＝１３。
変換の実行回数が６回のとき、変数Ｎｂ０〜Ｎｂ７のうちの最大値がＮｂ２＝９。
変換の実行回数が７回のとき、変数Ｎｂ０〜Ｎｂ７のうちの最大値がＮｂ０＝８。
変換の実行回数が８回のとき、変数Ｎｂ０〜Ｎｂ７のうちの最大値がＮｂ６＝６。
変換の実行回数が９回のとき、変数Ｎｂ０〜Ｎｂ７のうちの最大値がＮｂ４＝８。
変換の実行回数が１０回のとき、変数Ｎｂ０〜Ｎｂ７のうちの最大値がＮｂ７＝１０。
変換の実行回数が１１回のとき、変数Ｎｂ０〜Ｎｂ７のうちの最大値がＮｂ２＝７。
変換の実行回数が１２回のとき、変数Ｎｂ０〜Ｎｂ７のうちの最大値がＮｂ０＝９。
変換の実行回数が１３回のとき、変数Ｎｂ０〜Ｎｂ７のうちの最大値がＮｂ３＝１２。
【０１２０】
この場合には、変換の実行回数が８回であるときに、各ゾーンに分類される不良ブロックの最大数が最小化される。各ゾーンに分類される不良ブロックの数が集計されるときには、不良ブロックの物理ブロックアドレスＰＢＡが仮想ブロックアドレスＶＢＡに変換される。
【０１２１】
これとは逆に、仮想ブロックアドレスＶＢＡが物理ブロックアドレスＰＢＡに変換されるときには、上記のような実行回数に対応した変換の逆変換が実行される。等式（３）を満たす変数ａ及び変数ｂに基づいて、関数Ｆ（ｘ）による変換がｂ回繰り返されたときの写像は、関数Ｆ（ｘ）による変換がａ回繰り返されたときの逆写像となっている。
【０１２２】
従って、物理ブロックアドレスＰＢＡから仮想ブロックアドレスＶＢＡへの変換によって特定された不良ブロックの最大数を最小化させる変換の実行回数が変数ａで示されるとき、以下に示すような等式（５）によって特定される変数ｂに対応する回数だけ変換を繰り返すことで、不良ブロックの最大数を最小化するべく、仮想ブロックアドレスＶＢＡが物理ブロックアドレスＰＢＡに変換される。
ｂ＝ｎ＋１−ａ          （５）
【０１２３】
上記の例では、変数ｎ＝１３、変数ａ＝８に対応して、変数ｂが"６"となる。そこで、処理設定レジスタ３４に、変換の実行回数として"６"を示す情報が設定される。
【０１２４】
ホストシステム４からフラッシュメモリ２へのアクセスが要求されたとき、コントローラ３は、処理設定レジスタ３４に変換の実行回数を示す情報を設定した後、アドレスレジスタ３３に設定された仮想ページアドレスを示す情報に基づいて、データ読出動作やデータ書込動作等を開始する。
【０１２５】
分散処理部３２は、ホストシステム４からの要求に応答して、仮想ページアドレスにおいて仮想ブロックアドレスＶＢＡを示す一部分を、物理ブロックアドレスＰＢＡに置き換える。分散処理部３２によって生成された物理ページアドレスは、フラッシュメモリ２のメモリ空間３５に供給される。ブロック消去が実行されるときには、仮想ブロックアドレスＶＢＡを示す情報をアドレスレジスタ３３に設定することにより、物理ブロックアドレスＰＢＡがフラッシュメモリ２のメモリ空間３５に供給される。
【０１２６】
仮想ブロックアドレス空間が多くのゾーンに分割されているときには、各ゾーンが複数のグループに分類されてもよい。この場合、分散処理部３２は、グループ単位で、仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの間の変換を行うようにしてもよい。
【０１２７】
例えば、３２個のゾーンのそれぞれが４つのグループに分類されているとき、分散処理部３２は、８個のゾーンごとに、仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの間の変換を行う。フラッシュメモリ２が複数のメモリチップを含んでいるときには、分散処理部３２が１つのチップごとに、仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの間の変換を行うようにしてもよい。置換テーブル、関数、変換の実行回数等についての設定は、グループごと、又はチップごとに、異なっていてもよい。
【０１２８】
仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡとの対応関係を規定する関数は、任意に設定されてもよい。例えば、その関数は、ベルヌイ写像といった、周期軌道を形成する任意の写像関数であってもよい。
【０１２９】
図１５にて示されるようなアドレスレジスタ３３に格納された情報に基づいて、データ読出動作又はデータ書込動作が行われるときには、コントローラ３が、論理ブロックアドレスＬＢＡと仮想ブロックアドレスＶＢＡの対応関係を示すアドレス変換テーブルを使用することにより、ホストシステム４に対してフラッシュメモリ２へのアクセスを提供することが望ましい。
【０１３０】
アドレス変換テーブルは、複数のゾーンのそれぞれに対応して、コントローラ３によって作成される。例えば、アドレス変換テーブルでは、図１５に示すように、仮想ブロックアドレス空間において各ブロックに付されたシリアル番号が、論理ブロックアドレスＬＢＡの順に記述されている。仮想ブロックアドレス空間において各ブロックに付されたシリアル番号は、より上位のビットにゾーン番号を挿入することで、仮想ブロックアドレスＶＢＡに変換される。
【０１３１】
例えば、ゾーン＃０において、２進数コードの形式で"000"をシリアル番号より上位のビットに挿入することにより、ゾーン＃０に対応した仮想ブロックアドレスＶＢＡが生成される。
【０１３２】
アドレス変換テーブルには、空きフラグを示す情報も含まれている。空きフラグは、論理ブロックアドレスＬＢＡに対応するブロックにデータが格納されているか否かを識別できるようにする。図１５に示す例では、空きフラグが“１”を示すことによって、論理ブロックアドレスＬＢＡに対応する仮想ブロックアドレスＶＢＡは存在しないことが識別される。アドレス変換テーブルにて対応付けられた仮想ブロックアドレスＶＢＡを持たない論理ブロックアドレスＬＢＡでは、データが格納されていない。
【０１３３】
コントローラ３が図１５にて示されるようなアドレス変換テーブルを作成するときには、始めに、ワークエリア８において、１０００ブロックに対応したシリアル番号と空きフラグとを示す情報を格納するための領域が確保される。このとき、確保された領域における格納データは、全て論理値“１”に設定される。続いて、アドレス変換テーブルが論理ブロックアドレスＬＢＡとの対応関係を管理する範囲において、仮想ブロックアドレスＶＢＡの順にブロックの冗長領域２６における格納データが読み出される。
【０１３４】
冗長領域２６における格納データが、対応論理ブロックアドレスとして特定の論理ブロックアドレスＬＢＡを示しているときには、アドレス変換テーブル内でその論理ブロックアドレスＬＢＡの行に、ブロックのシリアル番号が書き込まれる。また、その論理ブロックアドレスＬＢＡに対応する空きフラグは、論理値“０”に設定される。
【０１３５】
コントローラ３は、仮想ブロックアドレスＶＢＡからゾーン番号を示すビットを取り除くことにより、仮想ブロックアドレスＶＢＡをブロックのシリアル番号に変換することができる。アドレス変換テーブルにおいて、冗長領域２６の格納データによって示されていなかった論理ブロックアドレスＬＢＡの行では、空きフラグが初期設定としての論理値“１”のまま保持される。
【０１３６】
フラッシュメモリ２の格納データが書き換えられるときには、新たなデータを含んだ書換用のデータを書き込むための消去済ブロックが特定されなければならない。以下に、消去済ブロックを特定するための処理を説明する。
【０１３７】
この処理では、図１６（ａ）にて示されるような検索用テーブル４０が使用される。この検索用テーブル４０では、複数のビットのそれぞれが、特定のゾーンに分類されている複数のブロックが有する仮想ブロックアドレスＶＢＡのそれぞれと、関連付けられている。検索用テーブル４０は、コントローラ３によって、複数のゾーンに対応して複数作成されることが好ましい。
【０１３８】
図１６（ａ）にて示される例では、検索用テーブル４０上で左から右、及び上から下へと進むに従って、仮想ブロックアドレスＶＢＡが増加する。例えば、図１６（ａ）にて示される検索用テーブル４０における左上のビットは、その検索用テーブル４０に対応したゾーンにおける先頭の仮想ブロックアドレスＶＢＡと関連付けられている。
【０１３９】
図１６（ａ）にて示される検索用テーブル４０における右下のビットは、その検索用テーブル４０に対応したゾーンにおける最終の仮想ブロックアドレスＶＢＡと関連付けられている。図１６にて示される検索用テーブル４０において、論理値“０”を示すビットは、関連付けられた仮想ブロックアドレスＶＢＡを有するブロックが、データを格納しているか、不良ブロックであるかのいずれかであることを表している。その検索テーブル４０において、論理値“１”を示すビットは、関連付けられた仮想ブロックアドレスＶＢＡを有するブロックが、消去された状態であることを表している。
【０１４０】
検索用テーブル４０は、アドレス変換テーブルが作成されるときに、同時に作成されることができる。例えば、検索用テーブル４０では、初期状態として、全てのビットに対して論理値“０”が設定される。その後、コントローラ３は、各ビットと関連付けられた仮想ブロックアドレスＶＢＡを有するブロックにおいて、対応論理ブロックアドレス、あるいは不良ブロックであることを示すブロックステータスが、冗長領域２６に格納されているか否かを判定する。
【０１４１】
コントローラ３が、対応論理ブロックアドレスも、不良ブロックであることを示すブロックステータスも格納されていないと判別したときには、その仮想ブロックアドレスＶＢＡに対応するビットが、論理値“１”に設定される。こうして、検索用テーブル４０では、消去済ブロックと関連付けられたビットだけ論理値“１”に設定され、他のビットは論理値“０”のまま保持される。
【０１４２】
検索用テーブル４０が作成された後、消去済ブロックに対してデータが書き込まれたときには、検索用テーブル４０において、そのブロックと関連付けられたビットが論理値“１”から論理値“０”へと更新される。データを格納していたブロックに対するブロック消去が行われたときには、検索用テーブル４０において、そのブロックと関連付けられたビットが論理値“０”から論理値“１”へと更新される。
【０１４３】
以下に、検索用テーブル４０を用いることによって消去済ブロックを検索するための処理を、図１６（ｂ）を参照することにより説明する。
この処理では、コントローラ３が、検索用テーブル４０を、特定のゾーンにおける先頭の仮想ブロックアドレスＶＢＡと関連付けられた左上のビットから、最終の仮想ブロックアドレスＶＢＡと関連付けられた右下のビットへと向かう方向で、スキャンする。例えば、コントローラ３は、検索用テーブル４０のある行において、左から右へと順次にビットをチェックした後、１つ下の行において、同様にビットをチェックする。コントローラ３は、消去済ブロックに対応した論理値“１”を示すビットを検出する。
【０１４４】
図１６（ｂ）にて示される検索用テーブル４０では、第４行第５列において、論理値“１”を示すビットが検出される。コントローラ３は、論理値“１”を示すビットが検出されたことに応答して、検索用テーブル４０における検索を終了する。このとき、コントローラ３は、論理値“１”を示すビットと関連付けられた仮想ブロックアドレスＶＢＡを特定する。
【０１４５】
コントローラ３は、こうして特定された仮想ブロックアドレスＶＢＡを有するブロックに、新たなデータを含んだ書換用のデータを書き込む。検索処理の終了点の次のビットは、次回の検索処理における開始点となってもよい。例えば、図１６（ｂ）にて示される検索用テーブル４０では、第４行第６列を開始点として、次回の検索処理が開始される。検索処理において、右下のビットがチェックされた後には、チェック動作が左上のビットに戻る。
【０１４６】
以下に、ホストシステム４からの要求に応答してフラッシュメモリ２からデータを読み出すためのデータ読出動作を説明する。このデータ読出動作では、ホストシステム４からコントローラ３へと出力されるアドレス信号によって指定される論理ブロックアドレスＬＢＡが、図１５にて示されるアドレス変換テーブルを使用することにより、仮想ブロックアドレスＶＢＡへと変換される。フラッシュシーケンサブロック１２が有する複数のレジスタには、次のような情報が設定される。第１に、内部読出コマンドは、フラッシュシーケンサブロック１２内の予め定められた第１のレジスタ（図示せず）に、内部コマンドとして設定される。第２に、アドレス変換テーブルによって特定された仮想ブロックアドレスＶＢＡと、ページ番号を示す５ビットデータ（１つのブロックが３２個のページを含むとき）とを含んだ仮想ページアドレスは、図８及び図１４にて示されるアドレスレジスタ３３に設定される。
【０１４７】
上記のようなデータ読出動作のために設定された情報に基づいて、フラッシュシーケンサブロック１２は、内部コマンドに従ってフラッシュメモリインタフェースブロック１０を制御する。フラッシュメモリインタフェースブロック１０は、内部バス１４を介してフラッシュメモリ２に、内部コマンドを示す情報、及びアドレスを示す情報等を提供する。
【０１４８】
仮想ページアドレスは、例えば図８及び図１４にて示される分散処理部３２によって物理ページアドレスに変換される。従って、フラッシュメモリ２に提供される情報は、物理ページアドレスを示している。フラッシュメモリ２では、コントローラ３から提供された情報によって指定される物理ページアドレスに対応するデータ領域から格納データが読み出される。フラッシュメモリ２から読み出されたデータは、内部バス１４を介してバッファ９に転送される。この結果として、アドレスレジスタ３３に設定された仮想ページアドレスと関連付けられた物理ページアドレスを有するデータ領域の格納データが、バッファ９によって保持される。
【０１４９】
次に、ホストシステム４からの要求に応答してフラッシュメモリ２にデータを書き込むためのデータ書込動作を説明する。このデータ書込動作では、フラッシュシーケンサブロック１２が有する複数のレジスタに、次のような情報が設定される。第１に、内部書込コマンドは、フラッシュシーケンサブロック１２内の第１のレジスタに、内部コマンドとして書き込まれる。第２に、検索用テーブル４０により特定された消去済ブロックの仮想ブロックアドレスＶＢＡと、ページ番号を示す５ビットデータ（１つのブロックが３２個のページを含むとき）とを含んだ仮想ページアドレスは、図８及び図１４にて示されるアドレスレジスタ３３に設定される。
【０１５０】
上記のようなデータ書込動作のために設定された情報に基づいて、フラッシュシーケンサブロック１２は、内部コマンドに従ってフラッシュメモリインタフェースブロック１０を制御する。フラッシュメモリインタフェースブロック１０は、内部バス１４を介してフラッシュメモリ２に、内部コマンドを示す情報、及びアドレスを示す情報等を提供する。
【０１５１】
仮想ページアドレスは、例えば図８及び図１４にて示される分散処理部３２によって物理ページアドレスに変換される。従って、フラッシュメモリ２に提供される情報は、物理ページアドレスを示している。フラッシュメモリインタフェースブロック１０は、バッファ９の格納データを、内部バス１４を介してフラッシュメモリ２へと転送する。この結果として、アドレスレジスタ３３に設定された仮想ページアドレスと関連付けられた物理ページアドレスを有するデータ領域に、コントローラ３からフラッシュメモリ２へと供給されたデータが書き込まれる。
【０１５２】
上記のようなデータ書込動作において、消去されるべき古いデータがフラッシュメモリ２に格納されているときには、データ書込動作に続いて、古いデータが格納されているブロックに対するデータ消去動作が実行される。古いデータが格納されているブロックが有する仮想ブロックアドレスＶＢＡは、図１５にて示されるアドレス変換テーブルを使用することによって特定されることができる。
【０１５３】
このデータ消去動作では、フラッシュシーケンサブロック１２が有する複数のレジスタに、次のような情報が設定される。第１に、内部消去コマンドは、フラッシュシーケンサブロック１２内の第１のレジスタに、内部コマンドとして書き込まれる。第２に、古いデータが格納されているブロックの仮想ブロックアドレスＶＢＡと、ページ番号を示す５ビットデータ（１つのブロックが３２個のページを含むとき）とを含んだ仮想ページアドレスは、図８及び図１４にて示されるアドレスレジスタ３３に設定される。
【０１５４】
上記のようなデータ消去動作のために設定された情報に基づいて、フラッシュシーケンサブロック１２は、内部コマンドに従ってフラッシュメモリインタフェースブロック１０を制御する。フラッシュメモリインタフェースブロック１０は、内部バス１４を介してフラッシュメモリ２に、データ消去動作に対応した内部コマンドを示す情報、及びアドレスを示す情報等を提供する。
【０１５５】
仮想ページアドレスは、図８及び図１４にて示される分散処理部３２によって物理ページアドレスに変換される。従って、フラッシュメモリ２に提供される情報は、物理ページアドレスを示している。この結果として、コントローラ３は、フラッシュメモリ２において古いデータが格納されていたブロックに対するデータ消去動作を完了させる。
【０１５６】
コントローラ３は、複数の置換テーブル又は複数の関数を用いることにより、各ゾーンに分類される不良ブロックの最大数を最小化するための処理を実行する。これにより、コントローラ３は、フラッシュメモリ２の一部分に多くの不良ブロックが存在するときでも、複数のゾーンのそれぞれにおいてホストシステム４から提供されたデータを適切に格納させることができる。
【０１５７】
本発明は、様々な変形及び応用が可能である。例えば、図６に示した分散処理部３２をフラッシュメモリ２内に設けてもよい。コントローラ３は、フラッシュメモリシステム１とは独立して、フラッシュメモリ２とホストシステム４との間でのデータ交換を制御してもよい。コントローラ３は、ホストシステム４に内蔵されていてもよい。アドレスレジスタ３３及び処理設定レジスタ３４は、ＳＲＡＭやＤＲＡＭ（Dynamic RAM）などといった、任意のメモリに置き換えられてもよい。
【０１５８】
上述のように本発明にかかるフラッシュメモリシステム１では、特定のゾーンに不良ブロックが集中することを防止するために、１つのゾーンに含まれる複数のブロックを、フラッシュメモリ２内に分散させている。ここで、各ゾーンに含まれる仮想ブロックアドレスＶＢＡと物理ブロックアドレスの対応関係は、フラッシュメモリシステム１を初期化したときに設定される。この初期化の際には、各ゾーンに含まれる不良ブロックの最大数が最小になるように仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの対応関係が設定される。実質的には、各ゾーンに含まれる不良ブロックの数が均一化されるように仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの対応関係が設定される。
【０１５９】
しかしながら、不良ブロックでなかったブロックが、その後の使用により不良ブロックとなることがあり、そのような不良ブロックが特定のゾーンに集中し、不良ブロックの数が許容数（ゾーンに割り当てられた予備的なブロックの数）を超えてしまった場合、フラッシュメモリシステム１は動作を停止してしまう。
【０１６０】
フラッシュメモリシステム１が動作を停止したときに、その動作の停止が、ゾーンに含まれる不良ブロックの数が許容数を超えてしまったことに起因するのであれば、再度、仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの対応関係を設定し直せば使用することができるようになることが多い。従って、このような場合には、各ゾーンに含まれる不良ブロックの数が、許容数を超えているか否かの診断（以下、不良ブロック数の診断と言う。）を実行することが好ましい。
【０１６１】
この不良ブロック数の診断では、現状の仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの対応関係で、各ゾーンに含まれる不良ブロックの数をブロックステータス（不良ブロックであることを示すブロックステータス）に基づいて集計する。尚、ブロックステータスに基づいて集計する場合には、各ブロックのブロックステータスを読み出して集計しなければならないが、各ゾーンに含まれる不良ブロックの仮想ブロックアドレスＶＢＡ、又は各ゾーンに含まれる不良ブロックの数を、特定のブロックに書き込むようにすれば、そのブロックに書き込まれているこれらの情報に基づいて不良ブロックの数を知得することができる。
【０１６２】
このようにして得られた各ゾーンの不良ブロック数が許容数を超えているか否かを診断し、許容数を超えているゾーンが存在する場合には、各ゾーンに含まれる不良ブロックの最大数を最小化するように仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの対応関係を再設定する。つまり、上述のように各ゾーンに分類される不良ブロックの最大数を最小化するように置換テーブル若しくは関数を再度選択したり、又は、写像循環を生成する関数による変換の実行回数を再度設定したりする。
【０１６３】
この仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの対応関係の再設定を行っても、不良ブロックの数が許容数を超えているゾーンが存在する場合には、前記複数のゾーンの各々に分類される不良ブロック数が２番目に大きいゾーンの不良ブロック数を最小化するように仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの対応関係を再設定する。このように設定した場合、分類された不良ブロック数が最大となるゾーンは、不良ブロックの数が許容数を超えてしまうので、そのゾーンを使用禁止状態にする。つまり、この設定では、特定のゾーンに不良ブロックを集中させることにより、その他のゾーンに分類される不良ブロック数を小さくしている。
【０１６４】
上記のように使用禁止状態にするゾーンは、２個以上であってもよい。例えば、前記複数のゾーンの各々に分類される不良ブロック数が３（＝ｎ）番目に大きいゾーンの不良ブロック数を最小化するように仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの対応関係を再設定し、分類された不良ブロック数が１番目と２（＝ｎ−１）番目に大きいゾーンを使用禁止状態にする。同様に、不良ブロック数が４（＝ｎ）番目に大きいゾーンの不良ブロック数を最小化するように仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの対応関係を再設定した場合は、分類された不良ブロック数が１番目、２番目及び３（＝ｎ−１）番目に大きいゾーンを使用禁止状態にする。つまり、この設定では、使用禁止状態にするゾーンを除いたゾーンに分類される不良ブロック数の最大数を最小化するように仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの対応関係を再設定している。
【０１６５】
上述のような仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの対応関係の再設定を行うことにより、一旦、使用不能となったフラッシュメモリシステム１を再び使用できる状態に戻すことができる。又、上記の不良ブロック数診断、置換テーブル若しくは関数の再選択、及び写像循環を生成する関数による変換の実行回数の再設定は、これらの処理に対応する外部コマンドを設定しておき、ホストシステム４側から与えられる外部コマンドに基づいて実行されるようにしてもよい。
【０１６６】
又、上記の不良ブロック数診断は、いずれかのゾーンに含まれる不良ブロックの数が許容数を超えていることを検知できれば十分なので、ホストシステム４から与えられる外部コマンドに基づいた書込み処理で、新たなデータを書き込む消去済みのブロックを確保できなくなった場合は、それを不良ブロック数診断の診断結果としてもよい。従って、新たなデータを書き込む消去済みのブロックを確保できなくなった場合は、このエラーに基づいて置換テーブル若しくは関数の再選択、又は写像循環を生成する関数による変換の実行回数の再設定を行うようにしてもよい。
【０１６７】
尚、仮想ブロックアドレスＶＢＡと物理ブロックアドレスＰＢＡの対応関係を再設定する場合には、予めフラッシュメモリ２に書き込まれているデータをホストシステム４側のＳＲＡＭやＤＲＡＭに退避しておくことが好ましい。又、分類された不良ブロック数が最大となるゾーンを使用禁止状態にした場合には、それに応じて、フラッシュメモリに書き込まれている記憶容量等の管理情報を変更する。
【図面の簡単な説明】
【０１６８】
【図１】本発明にかかるフラッシュメモリシステムのブロック図である。
【図２】メモリセルの構造を概略的に示す断面図である。
【図３】書込状態となっているメモリセルの断面図である。
【図４】フラッシュメモリにおけるアドレス空間の概略図である。
【図５】フラッシュメモリにおけるゾーンの割付例の概略図である。
【図６】ブロックを分類するための処理の概略図である。
【図７】論理ブロックアドレス、仮想ブロックアドレス、物理ブロックアドレスの間での相関関係の一例を示す概略図である。
【図８】分散処理部、アドレスレジスタ、処理設定レジスタ等を示すブロック図である。
【図９】仮想ページアドレスを物理ページアドレスに変換するための動作の概略図である。
【図１０】仮想ブロックアドレスが物理ブロックアドレスに直接的に割り当てられている場合の概略図である。
【図１１】置換テーブルの構成例を示す概略図である。
【図１２】不良ブロックのリストの一例を示す概略図である。
【図１３】分散処理によって仮想ブロックアドレスが物理ブロックアドレスと関連付けられる動作の概略図である。
【図１４】モニタレジスタを備える構成例を示す概略図である。
【図１５】アドレス変換テーブルの一構成例を示す概略図である。
【図１６】検索用テーブルの一構成例を示す概略図である。
【符号の説明】
【０１６９】
１      フラッシュメモリシステム
２      フラッシュメモリ
３      コントローラ
４      ホストシステム
５      ホストインタフェース制御ブロック
６      マイクロプロセッサ
７      ホストインタフェースブロック
８      ワークエリア
９      バッファ
１０    フラッシュメモリインタフェースブロック
１１    ＥＣＣブロック
１２    フラッシュシーケンサブロック
１３    外部バス
１４    内部バス
１６    メモリセル
１７    Ｐ型半導体基板
１８    ソース拡散領域
１９    ドレイン拡散領域
２０    トンネル酸化膜
２１    フローティングゲート電極
２２    絶縁膜
２３    コントロールゲート電極
２４    チャネル
２５    ユーザ領域
２６    冗長領域
３１    アドレス変換テーブル
３２    分散処理部
３３    アドレスレジスタ
３４    処理設定レジスタ
３５    メモリ空間
３６    モニタレジスタ
【図１】
2005209184.tif 000003
【図２】
2005209184.tif 000004
【図３】
2005209184.tif 000005
【図４】
2005209184.tif 000006
【図５】
2005209184.tif 000007
【図６】
2005209184.tif 000008
【図７】
2005209184.tif 000009
【図８】
2005209184.tif 000010
【図９】
2005209184.tif 000011
【図１０】
2005209184.tif 000012
【図１１】
2005209184.tif 000013
【図１２】
2005209184.tif 000014
【図１３】
2005209184.tif 000015
【図１４】
2005209184.tif 000016
【図１５】
2005209184.tif 000017
【図１６】
2005209184.tif 000018