(57)【要約】【課題】  フラッシュメモリのブロック消去回数の平準化を考慮し、書き込み可能なブロックの選出処理をハードウェア的に行なう外部記憶装置を構築することを目的とする。【解決手段】  フラッシュメモリを構成するブロック毎にレジスタを設け、レジスタに記憶した使用状況、消去回数の情報に基づいてゲート，制御回路によって、複数のブロックを消去回数に応じたｎ個のグループに分類し、分類した一のグループの書き込みに使用できるブロックのうち、ブロックの構成順にデータの書き込みを行なう。一のグループのブロックを全て使用すると、所定順序で選択された別のグループの書き込みに使用できるブロックにデータを書き込む。順次ｎ個のグループの間で、データの書き込みに使用するブロックを選出する担当を交替して、選出されたブロックにデータを書き込む外部記憶装置とする。【選択図】  図３
2005196634.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する複数のブロックから構成され、データバスに接続されたフラッシュメモリを有する外部記憶装置であって、
前記ブロック毎に
前記ブロックの使用状況を示す使用可否レジスタと、該ブロックのデータの消去回数の情報を示すｎ個（ｎは２以上の整数）の消去回数レジスタとからなるブロック管理レジスタと、
前記使用可否レジスタの値と前記各消去回数レジスタの値との論理積をそれぞれ演算するｎ個の演算ゲートとを有し、
前記演算ゲートの出力値に基づいて、使用可能であるブロックを消去回数に応じてｎ個のグループに分類するｎ個の制御回路を備え、
前記一の制御回路は、
前記一のグループにおいて、前記ブロックの構成順に使用可能な該ブロックを特定する第１の回路と、
前記一のグループ内で、使用可能なブロックが存在しないことを示す信号を出力する第２の回路とを有し、
前記一の制御回路における前記第２の回路の出力タイミング毎に、前記ｎ個のグループを所定順序で周回し、前記第１の回路の出力値に基づいて、使用可能な前記ブロックを選出するブロック選出手段と、
前記選出されたブロックに前記データを記憶する記憶手段と
を備えた外部記憶装置。
【請求項２】
請求項１に記載の外部記憶装置であって、
前記ｎは２であり、
前記ブロック管理レジスタの２個の消去回数レジスタは、
前記ブロックの消去回数が０回または偶数回であることを示す第1の消去回数レジスタと、
前記ブロックの消去回数が奇数回であることを示す第２の消去回数レジスタとからなり、
前記２個の演算ゲートは、
前記使用可否レジスタの値と前記第１の消去回数レジスタの値との論理積を演算する第１ゲートと、
前記使用可否レジスタの値と前記第２の消去回数レジスタの値との論理積を演算する第２ゲートとからなり、
前記２個の制御回路は、
前記第１ゲートの出力値を入力し、前記使用可能なブロックの消去回数が０回または偶数回であるグループを示す第１の制御回路と、
前記第２ゲートの出力値を入力し、前記使用可能なブロックの消去回数が奇数回であるグループを示す第２の制御回路とからなり、
前記ブロック選出手段は、
前記第２の回路の出力タイミングに基づいて、前記使用可能な前記ブロックを選出するグループを、前記第１の制御回路と前記第２の制御回路との間で順次交替して該使用可能なブロックの番号を出力する手段である外部記憶装置。
【請求項３】
請求項１または２に記載の外部記憶装置であって、
前記ブロック管理レジスタは、前記ブロックが不良であるか否かを示す良否レジスタを備え、
前記ｎ個の演算ゲートは、前記使用可否レジスタの値と前記各消去回数レジスタの値とに加えて、前記良否レジスタの値との論理積をそれぞれ演算する外部記憶装置。
【請求項４】
請求項１ないし３のいずれかに記載の外部記憶装置であって、
前記ブロック管理レジスタは、前記データの記憶領域として割り当てられた仮想メモリ空間上のアドレスである論理アドレスを格納する論理アドレスレジスタを有し、
前記ブロック毎に、所定の論理アドレスと、前記論理アドレスレジスタに格納するアドレスとを比較する比較器を備え、
前記記憶手段は、
前記データを一のブロックに書き込むタイミングで、該一のブロックに対応する前記論理アドレスレジスタに前記論理アドレスを格納し、該書き込んだデータの読み出しを所望する際、該比較器の出力値に基づいて、該所望するデータを書き込んだ該ブロックを特定し、該ブロックから該データを読み出す手段を備えた外部記憶装置。
【請求項５】
請求項１ないし３のいずれかに記載の外部記憶装置であって、
前記記憶手段は、前記データの記憶領域として割り当てられた仮想メモリ空間上のアドレスである論理アドレスと、前記ブロック選出手段により選出され、該データを記憶するブロックの物理的なアドレスとの対応関係を表わすテーブルを生成し、該テーブルに基づいて該データを記憶する手段である外部記憶装置。
【請求項６】
請求項１ないし５のいずれかに記載の外部記憶装置であって、
前記ブロック管理レジスタは、不揮発性のメモリを用いて構成された外部記憶装置。
【請求項７】
請求項１ないし５のいずれかに記載の外部記憶装置であって、
前記ブロック管理レジスタに格納する所定値を所定のタイミングで不揮発的に記憶する記憶部を備え、
前記外部記憶装置への電源投入の際、前記記憶部の有する前記所定値を、前記ブロック管理レジスタへ転送する外部記憶装置。
【請求項８】
請求項７に記載の外部記憶装置であって、
前記記憶部は、前記フラッシュメモリの一部分に予め確保された領域である外部記憶装置。
【請求項９】
請求項１ないし８のいずれかに記載の外部記憶装置であって、
前記フラッシュメモリは、ＮＡＮＤ型構造のフラッシュメモリである外部記憶装置。
【請求項１０】
データを記憶する複数のブロックから構成され、データバスに接続されたフラッシュメモリを有する外部記憶装置の該データの書き込み方法であって、
前記ブロック毎に、該ブロックの使用状況および該ブロックの消去回数を示す情報を記憶し、
前記情報に基づいて、使用可能であるブロックを消去回数に応じてｎ個のグループに分類し、
前記データの書き込みを行なう前記ｎ個のグループを所定順序で周回し、該一のグループにおいて、前記使用可能なブロックに、該ブロックの構成順で前記データを書き込み、該使用可能なブロックへの書き込み終了後、該所定順序で他のグループを選択して該ブロックに該データを書き込むデータの書き込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリを搭載した外部記憶装置に関するものである。
【背景技術】
【０００２】
従来から、不揮発性の半導体メモリであるフラッシュメモリを搭載した外部記憶装置がある。フラッシュメモリは、電源を切ってもデータが消えず、他の不揮発性メモリであるＥＥＰＲＯＭ（Electrically  Erasable  Programmable  ROM）よりも比較的低価格であるなどの特徴を有する。反面、フラッシュメモリには、その構造上、データの消去をブロック単位で行なうことや、ブロックの消去回数に制限があることなどの制約がある。特に、特定のブロックのみの消去を繰り返すことで、メモリとして寿命が著しく低下することがある。こうしたフラッシュメモリの特徴から、外部記憶装置としてフラッシュメモリを使用する場合には、各ブロックの消去回数（つまりデータの書換え回数）を平準化する処理が行なわれている。
【０００３】
例えば、特許文献１には、ソフトウェア内において、所定のデータの記憶領域として割り当てられた仮想アドレス（論理アドレスとも言う）とフラッシュメモリの各ブロックの物理的なアドレス（物理アドレスと言う）とを結び付けるアドレス変換テーブル（マップ）を用い、ブロックの消去回数の平準化を図りつつ、データを書き込む仮想アドレスに対応したフラッシュメモリの物理ブロック（物理アドレス）を特定する技術が開示されている。
【０００４】
【特許文献１】特表２００１−５２１２２０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、こうしたアドレス変換の処理では、論理アドレスと物理アドレスとを変換する複雑なファームウェアソフトが必要であり、ファームウェア構造が複雑でかつ処理に時間がかかっていた。また、こうした処理をソフトウェアで実行すると、ソフトウェアでの処理が増大し、結局、処理時間がかかってしまう。
【０００６】
本発明は、こうした問題の少なくとも一部を解決し、消去回数の平準化を考慮したデータの書き込み可能なブロックの選出をハードウェアとして実装した外部記憶装置を構築することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の第１の外部記憶装置は、上記課題の少なくとも一部を解決するため、データを記憶する複数のブロックから構成され、データバスに接続されたフラッシュメモリを有し、更にブロック管理レジスタ，ｎ個の演算ゲート，ｎ個の制御回路，ブロック選出手段，記憶手段を備える構成を採った。このブロック管理レジスタは、ブロック毎に前記ブロックの使用状況を示す使用可否レジスタと、該ブロックのデータの消去回数の情報を示すｎ個（ｎは２以上の整数）の消去回数レジスタとからなる。また、ｎ個の演算ゲートは、前記使用可否レジスタの値と前記各消去回数レジスタの値との論理積をそれぞれ演算し、ｎ個の制御回路は、前記演算ゲートの出力値に基づいて、使用可能であるブロックを消去回数に応じてｎ個のグループに分類する。この一の制御回路は、前記一のグループにおいて、前記ブロックの構成順に使用可能な該ブロックを特定する第１の回路と、前記一のグループ内で、使用可能なブロックが存在しないことを示す信号を出力する第２の回路とを有する。ブロック選出手段は、前記一の制御回路における前記第２の回路の出力タイミング毎に、前記ｎ個のグループを所定順序で周回し、前記第１の回路の出力値に基づいて、使用可能な前記ブロックを選出し、記憶手段は選出されたブロックに該データを記憶する。
【０００８】
また、本発明の第１の外部記憶装置に対応するデータの書き込み方法は、データを記憶する複数のブロックから構成され、データバスに接続されたフラッシュメモリを有する外部記憶装置の該データの書き込み方法であって、前記ブロック毎に、該ブロックの使用状況および該ブロックの消去回数を示す情報を記憶し、前記情報に基づいて、使用可能であるブロックを消去回数に応じてｎ個のグループに分類し、前記データの書き込みを行なう前記ｎ個のグループを所定順序で周回し、該一のグループにおいて、前記使用可能なブロックに、該ブロックの構成順で前記データを書き込み、該使用可能なブロックへの書き込み終了後、該所定順序で他のグループを選択して該ブロックに該データを書き込むことを要旨としている。
【０００９】
本発明の第１の外部記憶装置およびそのデータの書き込み方法によれば、フラッシュメモリを構成するブロック毎に記憶した使用状況、消去回数の情報に基づいて、複数のブロックを消去回数に応じたｎ個のグループに分類する。データの書き込みに際しては、分類した一のグループの使用可能（つまり空き）ブロックを、ブロックの構成順に使用する。一のグループの空きブロックを全て使用すると、所定順序で選択された別のグループの使用可能なブロックにデータを書き込む。順次ｎ個のグループの間で、データの書き込みに使用するブロックを選出する担当を交替して、選出されたブロックにデータを書き込む。したがって、消去回数に応じて分類されたｎ個のグループが順次交替することで、フラッシュメモリ全体としてブロックの消去回数を平準化することができる。また、外部記憶装置のデータの書き込みに使用するブロックの選出処理は、レジスタやゲートからなるハードウェア回路にて構成されるため、ソフトウェアでの処理に比べ、処理速度を向上することができる。
【００１０】
上記の構成を有する外部記憶装置において、ｎは２以上の整数であればいくつでも良いが、前記ｎは２であり、前記ブロック管理レジスタの２個の消去回数レジスタは、前記ブロックの消去回数が０回または偶数回であることを示す第1の消去回数レジスタと、前記ブロックの消去回数が奇数回であることを示す第２の消去回数レジスタとからなり、前記２個の演算ゲートは、前記使用可否レジスタと前記第１の消去回数レジスタとの論理積を演算する第１ゲートと、前記使用可否レジスタと前記第２の消去回数レジスタとの論理積を演算する第２ゲートとからなり、前記２個の制御回路は、前記第１ゲートの出力値を入力し、前記使用可能なブロックの消去回数が０回または偶数回であるグループを示す第１の制御回路と、前記第２ゲートの出力値を入力し、前記使用可能なブロックの消去回数が奇数回であるグループを示す第２の制御回路とからなり、前記ブロック選出手段は、前記第２の回路の出力タイミングに基づいて、前記使用可能な前記ブロックを選出するグループを、前記第１の制御回路と前記第２の制御回路との間で順次交替して該使用可能なブロックの番号を出力するものとしても良い。
【００１１】
かかる外部記憶装置によれば、使用可能なブロックを、消去回数が０回または偶数回のグループと、奇数回のグループとの２個のグループに分類し、両グループの間で書き込みに使用するブロックの選出する担当を繰り返し交替する。したがって、少ないレジスタおよびゲートで容易にシステムを構築することができる。
【００１２】
上記の構成を有する外部記憶装置において、前記ブロック管理レジスタは、前記ブロックが不良であるか否かを示す良否レジスタを備え、前記ｎ個の演算ゲートは、前記使用可否レジスタの値と前記各消去回数レジスタの値とに加えて、前記良否レジスタの値との論理積をそれぞれ演算するものとしても良い。かかる外部記憶装置によれば、ブロック毎の良否を示すレジスタを追加することで、書き込みに使用するブロックの選択肢から、不良なブロックを取り除くことができる。
【００１３】
上記の構成を有する外部記憶装置において、前記ブロック管理レジスタは、前記データの記憶領域として割り当てられた仮想メモリ空間上のアドレスである論理アドレスを格納する論理アドレスレジスタを有し、前記ブロック毎に、所定の論理アドレスと、前記論理アドレスレジスタに格納するアドレスとを比較する比較器を備え、前記記憶手段は、前記データを一のブロックに書き込むタイミングで、該一のブロックに対応する前記論理アドレスレジスタに前記論理アドレスを格納し、該書き込んだデータの読み出しを所望する際、該比較器の出力値に基づいて、該所望するデータを書き込んだ該ブロックを特定し、該ブロックから該データを読み出す手段を備えるものとすることができる。
【００１４】
かかる外部記憶装置によれば、データを一のブロックに書き込むタイミングで、その書き込むデータの論理アドレスを論理アドレスレジスタに記憶する。フラッシュメモリからデータを読み出す際には、読み出しを所望する論理アドレスと、使用中の全てのブロックの論理アドレスレジスタに格納したアドレスとを、一斉に各比較器で比較する。比較した結果、該当するブロックから、所望するデータが出力される。したがって、所定のデータがフラッシュメモリ内のどのブロックに格納されていても、各比較器を用いることで瞬時に所望するデータの読み出しが実行できる。
【００１５】
上記の構成を有する外部記憶装置の記憶手段は、前記データの記憶領域として割り当てられた仮想メモリ空間上のアドレスである論理アドレスと、前記ブロック選出手段により選出され、該データを記憶するブロックの物理的なアドレスとの対応関係を表わすテーブルを生成し、該テーブルに基づいて該データを記憶するものとしても良い。かかる外部記憶装置によれば、使用可能なブロックの選出はハードウェア的に行ない、対応関係を表わすテーブルをソフトウェア的に生成する。このテーブルを用いることで、論理アドレスに対応する物理アドレスを容易に選定し、所望するデータの読み出しをすることができる。
【００１６】
上記の構成を有する外部記憶装置のブロック管理レジスタは、不揮発性のメモリを用いて構成されるものとしても良い。かかる外部記憶装置によれば、ブロックへのアクセスタイミング毎に変更されるブロック毎の所定の情報は、不揮発性のメモリに記憶される。したがって、電源の供給が断たれても、ブロックを管理するための所定の情報を常に記憶しておくことができる。
【００１７】
上記の構成を有する外部記憶装置は、前記ブロック管理レジスタに格納する所定値を所定のタイミングで不揮発的に記憶する記憶部を備え、前記外部記憶装置への電源投入の際、前記記憶部の有する前記所定値を、前記ブロック管理レジスタへ転送するものとしても良い。かかる外部記憶装置によれば、所定のタイミングで不揮発的な記憶部に書き込んだ所定値は、システムへの電源の供給が断たれても記憶され、その所定値を電源投入時にブロック管理レジスタに転送することができる。
【００１８】
上記の構成を有する外部記憶装置の前記記憶部は、前記フラッシュメモリの一部分に予め確保された領域であるものとしても良い。かかる外部記憶装置によれば、ブロック管理レジスタに格納された情報を記憶する領域として、フラッシュメモリの一部を使用する。したがって、新たに不揮発性のメモリを設ける必要がない。
【００１９】
上記の構成を有する外部記憶装置のフラッシュメモリは、ＮＡＮＤ型構造のフラッシュメモリであるものとしても良い。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の実施の形態について実施例に基づき次の順序で説明する。
Ａ．外部記憶装置の概略構成：
Ｂ．書き込みブロックの平準化処理：
（Ｂ−１）第１の演算回路：
（Ｂ−２）第２の演算回路：
（Ｂ−３）ブロックの特定回路：
（Ｂ−４）平準化処理の一例：
Ｃ．データのアクセス処理：
Ｄ．変形例：
【００２１】
Ａ．外部記憶装置の概略構成：
図１は、本発明の第１実施例としての外部記憶装置１０の構成を示す全体ブロック図である。図示するように、この外部記憶装置１０は、外部機器とデータをやり取りするホストＩ／Ｆ２０，ＣＰＵ３０，プログラムメモリ４０，ＲＡＭ５０，外部からのデータを不揮発的に保存するフラッシュメモリ６０，フラッシュメモリ６０へのデータの読み書きを制御するフラッシュコントローラ７０等から構成されている。
【００２２】
ホストＩ／Ｆ２０は、ユニバーサルシリアルバス（ＵＳＢ）規格に準拠し、外部機器（例えば、パーソナルコンピュータやデジタルスチルカメラ等）との接続が可能である。外部機器から外部記憶装置１０へのデータの書き込みや読み出し等のアクセスは、このホストＩ／Ｆ２０を介して行なわれる。なお、ホストＩ/Ｆ２０は、ＵＳＢに限らず、ＩＥＥＥ１３９４やＡＴＡの規格に準拠するものとしても良い。
【００２３】
ＣＰＵ３０は、電源投入時にプログラムメモリ４０から実行プログラムを読み込み、外部記憶装置１０全体の動作環境を整える。ＣＰＵ３０は、例えば、ホストＩ／Ｆ２０を介して、外部機器からデータの書換え要求を受けた場合には、フラッシュメモリ６０への実際の書き込みに先立って、ＲＡＭ５０を作業領域として、一次的にフラッシュメモリ６０内のデータを読み込み、データの修正を行なう。これは、フラッシュメモリ６０のデータの消去がブロック単位で行なわれるからである。そして、データの修正を行なった後、フラッシュメモリ６０にデータを書き込む。具体的には、ＣＰＵ３０は、フラッシュメモリ６０内のデータの読み出し指示、修正データの書き込み指示等をフラッシュコントローラ７０へ出力している。
【００２４】
フラッシュコントローラ７０は、ＣＰＵ３０の指令に従い、フラッシュメモリ６０からのデータの読み出し、データの書き込み、データの消去などのフラッシュメモリ６０内のデータを管理、制御している。具体的には、フラッシュメモリ６０の寿命を低下させる特定領域への頻繁なデータの書換えを回避するため、データの書き込み可能な領域を演算し、フラッシュメモリ６０のデータ書き込み領域を平均的に使用する制御（平準化処理と呼ぶ）をハードウェアにより実施している。この平準化処理については、後述する。
【００２５】
フラッシュメモリ６０は、データを書き込む領域である複数のブロックから構成され、各ブロックにデータを記憶するメモリである。図２は、本実施例で採用するフラッシュメモリ６０の構造である。本実施例では、２５６Ｍｂｉｔの容量を有するＮＡＮＤ型のフラッシュメモリを使用している。図示するように、このフラッシュメモリ６０は、フラッシュコントローラ７０からの指令を受けてデータを一時的に格納するデータレジスタＲと、データの記憶領域である２０４７個の物理的なブロックＢとからなる。この１つのブロックＢは、３２ページＰの領域に分割されている。
【００２６】
このフラッシュメモリ６０は、ブロック単位でデータの消去を行ない、ページ単位でデータの読み出し、書き込みを行なうことができる。読み出し、書き込みの最小単位である１ページは、５１２バイトのデータ書き込み領域８０と、エラー訂正符号（ＥＣＣ符号）等を格納する１６バイトの冗長部領域８５とから構成されている。このＥＣＣ（Error  Correcting  Code）符号は、フラッシュコントローラ７０内のＥＣＣ回路にて、ブロックに書き込まれるデータに対してページ単位で生成される。つまり、フラッシュコントローラ７０は、データの書き込み段階で、ＥＣＣ符号をデータに付加して、フラッシュメモリ６０に格納している。冗長部領域８５に格納されたＥＣＣ符号は、ＣＰＵ３０からのデータの読み出しの指令を受けた時に、読み出したデータにエラーがあるか否かの判断に利用される。エラーが判断され、所定範囲内のエラーである場合には、フラッシュコントローラ７０内のＥＣＣ回路は、ＥＣＣ符号に基づいてエラーの訂正を行なう。なお、こうしたＥＣＣ符号による訂正は、ＣＰＵ３０にて実行するものとしても良い。
【００２７】
こうした構成からなる外部記憶装置１０に対して、例えば、外部機器であるパーソナルコンピュータから、あるファイルデータの書き込み指示が送信された場合には、ホストＩ／Ｆ２０を介してデータを受信したＣＰＵ３０は、そのファイルデータを１６Ｋバイトのブロック単位で取り扱い、ブロック単位での書き込み指令をフラッシュコントローラ７０に出力する。指令を受けたフラッシュコントローラ７０は、書き込みに使用するブロックを選出する。そして、選出された書き込みに使用するブロックに、データレジスタＲに一時的に格納したデータを瞬時に書き込む。この書き込みの単位は、上述のようにページ単位である。フラッシュコントローラ７０は、１６Ｋバイト分のデータを順次ページ単位で読み出してデータレジスタＲに書き込んでいる。こうして、フラッシュコントローラ７０は、所定のブロックのページに順次データを書き込む。書き込むファイルデータが、１６Ｋバイトを超える容量の場合には、次に書き込みに使用するブロックを選出し、データを書き込む。なお、ファイルデータを１６Ｋバイト単位で扱い、端数のデータも次のブロックに書き込むため、一のブロックには未使用ページが存在することとなる。こうした書き込みに使用するブロックの選出には、各ブロックの管理情報を用いている。
【００２８】
本実施例では、各ブロックの管理情報を格納する領域であるブロック管理レジスタをフラッシュコントローラ７０に設けている。ブロック管理レジスタは、３種類のレジスタからなる管理情報レジスタと、論理アドレスレジスタとから構成されている。管理情報レジスタは、ブロックが不良か否かを示す値を格納するレジスタ，ブロックが使用中であるか否かを示す値を格納するレジスタ，ブロックの消去履歴を判断するための値を格納するレジスタを備えている。論理アドレスレジスタは、一のブロックに書き込むデータに対して、仮想的に割り当てた記憶領域のアドレスである論理アドレスを格納するレジスタである。
【００２９】
このブロック管理レジスタに格納された各値の内、管理情報レジスタの値は、フラッシュコントローラ７０での平準化処理による書き込みに使用するブロックの選定演算に使用され、論理アドレスレジスタの値は、所望するデータの読み出し時や、データの書換えに伴う読み出し時に用いられる。つまり、フラッシュコントローラ７０は、特許請求の範囲の「ブロック管理レジスタ」を備え、「演算ゲート」、「制御回路」、「ブロック選出手段」としての機能を有する。
【００３０】
本実施例では、フラッシュメモリ６０の複数のブロックの内、３ブロック分をブロック管理レジスタに格納する値を不揮発的に記憶する記憶領域７６として使用している。ブロック管理レジスタに格納する値は、電源遮断時や一定間隔などの所定のタイミングで、フラッシュメモリ６０の記憶領域７６に記憶され、外部記憶装置１０の電源投入時に、記憶領域７６からブロック管理レジスタへ転送される。なお、外部記憶装置１０内に、ブロック管理レジスタに格納する値を記憶する不揮発性のメモリを別途設け、フラッシュメモリ６０とは独立に構成するものとしても良い。また、ブロック管理レジスタをＲＡＭ５０の記憶領域で代用し、フラッシュコントローラ７０配下に不揮発性のメモリを設けるものとしても良い。この場合、電源遮断時や一定間隔などの所定のタイミングで、フラッシュコントローラ７０での演算に使用する管理情報，論理アドレスをフラッシュコントローラ７０配下のメモリに記憶し、外部記憶装置１０の電源投入時に、メモリからＲＡＭ５０（つまり、ブロック管理レジスタ）に各値を転送することで、外部記憶装置１０を構成することができる。
【００３１】
Ｂ．書き込みブロックの平準化処理：
図３は、本実施例の書き込みブロックの算出処理を説明する説明図である。図中に示した＃０〜＃Ｎは、フラッシュメモリ６０のブロックの物理的な番号（以下、ブロック番号と呼ぶ）を示している。図示するように、ブロック管理レジスタ７５は、各ブロックに対応した数だけ設けられ、管理情報レジスタとしてｂ３〜ｂ０の４つのレジスタを備えている。
【００３２】
ここで、レジスタｂ３はブロックの良否を示す値を格納するレジスタであり特許請求の範囲の「良否レジスタ」に、レジスタｂ２はブロックの使用状況を示す値を格納するレジスタであり特許請求の範囲の「使用可否レジスタ」に、レジスタｂ１，ｂ０はブロックの消去履歴を示す値を格納するレジスタであり特許請求の範囲の「消去回数レジスタ」に、それぞれ該当する。なお、ブロック管理レジスタ７５は、前述のように論理アドレスレジスタを有するが、平準化処理による書き込みブロックの演算の説明には直接関係しないため図３では省略している。
【００３３】
レジスタｂ３（以下、良否レジスタｂ３と呼ぶ）には、ブロックが正常であれば値１が、不良であれば値０が書き込まれる。フラッシュメモリ６０は、上述のように複数のブロックから構成され、各ブロックがデータの記憶領域として使用されるが、出荷時からもともと使用できないブロックも存在することがある。そこで、一般的には、外部記憶装置の製造段階で、全ブロックについて良否を検査し、不良であると判断されたブロックには、以後データを書き込まないように処理されている。本実施例では、出荷時に不良であると判断されているブロックについては外部記憶装置１０の製造段階に、また、ＥＥＣ符号によるエラー訂正では対応できないビットエラーが存在するブロックについてはＣＰＵ３０が使用できないブロックと判断して後述するデータの読み出し時に、そのブロックに対応する良否レジスタｂ３に値０を書き込んでいる。
【００３４】
レジスタｂ２（以下、使用可否レジスタｂ２と呼ぶ）には、ブロックが未使用であれば値１が、使用中であれば値０が書き込まれる。この値は、フラッシュコントローラ７０によって、ブロックへ記憶するデータの書き込み時およびブロックに書き込まれたデータの消去時に、書き換えられる。この使用可否レジスタｂ２への値の書き込み回路は、論理積を出力するＡＮＤゲートにより構成することができる。例えば、ＡＮＤゲートに、フラッシュコントローラ７０からの書き込み信号と、後述する処理により特定されるブロック番号の信号Ｂiとを入力し、ＡＮＤゲートの出力値を使用可否レジスタｂ２に書き込む。こうすることで、アクセスする一のブロックの特定と共に、使用可否レジスタｂ２に値１または値０が書き込まれる。
【００３５】
レジスタｂ１，ｂ０（以下、消去回数レジスタｂ１，ｂ０と呼ぶ）は、２つのレジスタが交互に値１と値０とを繰り返すことで、ブロックの消去履歴を示している。具体的には、初期状態、つまり、一のブロックが未使用状態では、消去回数レジスタ（ｂ１，ｂ０）には（１，０）が書き込まれており、一のブロック内のデータ（つまり、全ページのデータ）が不要となり、消去する場合において、１回目の消去時には、（０，１）が、２回目の消去時には（１，０）が、３回目の消去時には（０，１）、４回目の消去時には（１，０）・・・と順に、書き込みが繰り返される。すなわち、消去回数レジスタｂ１が値１である場合には、一のブロックの消去回数が０回または偶数回であることを示し、消去回数レジスタｂ０が値１である場合には、一のブロックの消去回数が奇数回であることを示している。
【００３６】
この消去回数レジスタｂ１，ｂ０への値の書き込み回路は、ＡＮＤゲートと、消去回数のカウンタとして機能するＤ型フリップフロップ回路とにより構成することができる。この消去回数レジスタの書き込み回路の回路図の一例を図４に示す。図４は一のブロックの消去回数レジスタｂ１，ｂ０の書き込み回路を示しており、実際には、ブロック数に応じた分の回路を必要とする。図示するように、ＡＮＤゲート１９５は、フラッシュコントローラ７０からの消去信号と、特定されるブロック番号の信号Ｂiとを入力する。Ｄ型フリップフロップ回路１９７は、消去回数レジスタｂ１を入力し、ＡＮＤゲート１９５の出力値をクロックパルスとして、入力値を消去回数レジスタｂ０に、入力値を反転した値を消去回数レジスタｂ１に、それぞれ書き込む。こうすることで、消去のタイミング毎に、消去回数レジスタｂ１と消去回数レジスタｂ０とには、交互に反転した値が書き込まれる。
【００３７】
フラッシュコントローラ７０は、各ブロックの管理情報レジスタ７５に基づいて、書き込むブロックを選定する演算を実行する。この演算回路は、図３に示すように、第１のＡＮＤゲート９０，第２のＡＮＤゲート９３，第３のＡＮＤゲート９６，Ａ側アドレス演算部１００，Ｂ側アドレス演算部１１０からなり、演算回路で選定したブロックから最終的にデータを書き込むブロックを特定する。なお、最終的にブロックを特定する回路については、後述する。
【００３８】
第１のＡＮＤゲート９０は、良否レジスタｂ３と使用可否レジスタｂ２とに書き込まれた値を入力し、その論理積を第２のＡＮＤゲート９３，第３のＡＮＤゲート９６にそれぞれ出力する。第２のＡＮＤゲート９３は、第１のＡＮＤゲート９０の出力値と消去回数レジスタｂ１の値とを入力し、その論理積である信号Ａ０〜ＡＮをＡ側アドレス演算部１００に出力する。また、第３のＡＮＤゲート９６は、第１のＡＮＤゲート９０の出力値と消去回数レジスタｂ０の値とを入力し、その論理積である信号Ｂ０〜ＢＮをＢ側アドレス演算部１１０に出力する。
【００３９】
上記のように、Ａ側アドレス演算部１００およびＢ側アドレス演算部１１０は、＃０〜＃Ｎのブロックの数に対応する信号を入力する。Ａ側アドレス演算部１００に入力された値（値１または値０）の内、値１を示すブロックは、消去回数が０回または偶数回で、かつ、使用可能な（つまり、未使用または消去済みで空き領域）ブロックであることを示している。他方、Ｂ側アドレス演算部１１０に入力された値（値１または値０）の内、値１を示すブロックは、消去回数が奇数回で、かつ、使用可能な（つまり、消去済みで空き領域）ブロックであることを示している。換言すると、消去回数が０回または偶数回のブロックはＡ側アドレス演算部１００により判別され、消去回数が奇数回のブロックはＢ側アドレス演算部１１０により判別される。使用可能なブロック全体を、大きく消去回数が偶数か奇数によって分類していることとなる。
【００４０】
このＡ側アドレス演算部１００およびＢ側アドレス演算部１１０は、２つの演算を実行する。第１の演算は、ブロック番号＃０〜＃Ｎの全ブロックの入力値（値０または値１）から、使用可能なブロック（入力値が値１であるもの）の内、最もブロック番号の小さいものを特定する演算である。第２の演算は、ブロック番号＃０〜＃Ｎの全ブロックの入力値（値０または値１）が全て値０となった場合に、値１を出力する演算である。
【００４１】
（Ｂ−１）第１の演算回路：
図５は、第１の演算を実行する回路（以下、第１の演算回路１００ａ，１１０ａと呼ぶ）の一部を示す回路図である。Ａ側アドレス演算部１００は第１の演算回路１００ａを、Ｂ側アドレス演算部１１０は第１の演算回路１１０ａを、それぞれ備えているが、入力値が異なるのみで回路構成は同一である。したがって、以下、入力値Ａ０〜ＡＮのＡ側アドレス演算部１００の第１の演算１００ａについて説明する。なお、ここでは説明を簡単にするため、Ａ側アドレス演算部１００に入力される値は、４ブロック分（＃０〜＃３）の入力値Ａ０〜Ａ３とする。
【００４２】
図示するように、この回路は、入力論理を反転するＩＮＶゲート1２０、論理積演算を行なうＡＮＤゲート１３０，１３１，１３２、多入力であるＡＮＤゲート１４０，１４５、論理和演算を行なう多入力のＯＲゲート１５０，１５１から構成されている。
【００４３】
入力値Ａ０〜Ａ３の信号線は、その自身の信号線と、ＩＮＶゲート１２０を介して反転された信号線とを備えている。以下、自身の信号を信号Ａ０〜Ａ３と、反転された信号を信号Ａ０＼〜Ａ３＼として「＼」を付して記す。ＡＮＤゲート１３０は信号Ａ０＼と信号Ａ１とを入力し、ＡＮＤゲート１４０は信号Ａ０＼と信号Ａ１＼と信号Ａ２とを入力し、ＡＮＤゲート１４５は信号Ａ０＼と信号Ａ１＼と信号Ａ２＼と信号Ａ３とを入力し、それぞれ論理積演算を行なう。
【００４４】
ＡＮＤゲート１３１は信号Ａ０＼とＡＮＤゲート１３０の出力値の反転された信号を入力し、ＡＮＤゲート１３２は信号Ａ０＼とＡＮＤゲート１４０の出力値の反転された信号を入力し、それぞれ論理積演算を行なう。ＯＲゲート１５０はＡＮＤゲート１３１，１４０，１４５の出力値を入力し、ＯＲゲート１５１はＡＮＤゲート１３２，１３０，１４５の出力値を入力し、それぞれ論理和演算を行なう。出力値Ｏ１はＯＲゲート１５１から、出力値Ｏ２はＯＲゲート１５０からそれぞれ出力される。なお、出力値Ｏ１，Ｏ２は、ブロック番号をコード化（エンコード）したものであり、（Ｏ１，Ｏ２）が（０，０）の場合はブロック番号＃０を、（０，１）の場合はブロック番号＃１を、（１，０）の場合はブロック番号＃２を、（１，１）の場合はブロック番号＃３を示している。
【００４５】
例えば、入力信号＃０が値１である場合、ＩＮＶゲート１２０を介して反転された値０が、全てのＡＮＤゲート１３０，１４０，１４５に入力されるため、最終的に２つのＯＲゲート１５０から出力されるのは値０である。つまり、ブロック番号＃０，＃１，＃２，＃３のブロックの構成順序で最初に値１を示すブロックは、コードが（０，０）であるブロック番号＃０となる。
【００４６】
この回路における信号Ａ０〜Ａ３（またはＢ０〜Ｂ３）の入力値とブロック番号（コード）との関係を示す真理値表を図６に示した。図示するように、この回路では、信号Ａ０が値１であれば（０，０）を、信号Ａ０が値０かつ信号Ａ１が値１であれば（０，１）を、信号Ａ０，Ａ１が値０かつ信号Ａ２が値1であれば（１，０）を、信号Ａ０，Ａ１，Ａ２が値０かつ信号Ａ３が値１であれば（１、１）を出力する。この回路をブロック数に応じて拡張することで、書き込むべきブロックを選出することができる。なお、この回路は、一例であり、他のゲートの組み合わせにより、同様な回路を構成するものとしても良い。また、外部記憶装置１０にＲＯＭを設けて、ＲＯＭによる変換テーブルを利用し、ブロックを特定するものとしても良い。この場合、変換テーブルは、信号Ａ０〜ＡＮの入力値をアドレスにして、それに対応する出力値を格納した構成とすれば良い。
【００４７】
（Ｂ−２）第２の演算回路：
図７は、第２の演算を実行する回路（以下、第２の演算回路１００ｂ，１１０ｂと呼ぶ）の回路図である。Ａ側アドレス演算部１００は第２の演算１００ｂを、Ｂ側アドレス演算部１１０は第２の演算１１０ｂを、それぞれ備えているが、第１の演算回路と同様、入力値が異なるのみで回路構成は同一である。
【００４８】
図示するように、この回路は、ＩＮＶゲート１６０と多入力のＡＮＤゲート１７０により構成され、信号Ａ０〜ＡＮ（またはＢ０〜ＢＮ）の入力値が全て値０となる場合に、値１を出力する。もちろん、この回路は、他の構成、例えば多入力のＮＯＲゲートを用いるものとしても良い。この第２の演算回路１００ｂ，１１０ｂでの値１の出力は、一のグループ内で書き込みに使用するブロックは一通り使用したこと（つまり、終了信号）を意味している。具体的には、第２の演算回路１００ｂから値１が出力された場合は、消去回数が０回または偶数回であるブロックのグループ（Ａ側アドレス演算部１００により分類されたブロック）の内、書き込みに使用できる空きブロックはなくなったことを意味し、第２の演算回路１１０ｂから値１が出力された場合には、消去回数が奇数回のブロックであるグループ（Ｂ側アドレス演算部１１０により分類されたグループ）の内、書き込みに使用できる空きブロックはなくなったことを意味している。
【００４９】
（Ｂ−３）ブロックの特定回路：
図８は、上述の４つの演算結果に基づいて、書き込みに使用するブロックを最終的に特定する回路の回路図である。図示するように、この回路は、Ａ側の第２の演算回路１００ｂ，Ｂ側の第２の演算回路１１０ｂからの値を入力するＲＳフリップフロップ回路１７５、Ａ側の第１の演算回路１００ａからの値を入力するバスバッファ１７７，Ｂ側の第１の演算回路１１０ａからの値を入力するバスバッファ１７８、エンコードされたデータを復号するデコーダ１７９等から構成されている。
【００５０】
ＲＳフリップフロップ回路１７５は、Ａ側の第２の演算回路１００ｂからの値γa、Ｂ側の第２の演算回路１１０ｂからの値γbをそれぞれ入力し、入力値γa，γbの変化に応じて出力を切り換える周知の回路である。ＲＳフリップフロップ回路１７５は、入力値γa，γbに基づいて、一のバスバッファ１７７に出力の禁止（インヒビット）信号を排他的に出力している。
【００５１】
Ａ側の第１の演算回路１００ａの出力側に接続されたバスバッファ１７７は、エンコードされたデータであるブロック番号を入力し、ＲＳフリップフロップ回路１７５からの信号がインヒビット信号である場合には、第１の演算回路１００ａからのデータの出力を禁止する。Ｂ側の第１の演算回路１１０ａの出力側に接続されたバスバッファ１７８も同様である。２つのバスバッファ１７７，１７８からの信号線はワイヤード結合されており、ＲＳフリップフロップ回路１７５を介して出力の禁止がされていない一方のバスバッファからの信号がデコーダ１７９に入力される。
【００５２】
デコーダ１７９は、エンコードされたＭ本の信号（ブロック数Ｎ＝２のＭ乗とした場合のＭ）をＮ本の信号に復号し、一のブロックを特定する周知の回路である。デコーダ１７９は、フラッシュコントローラ７０からの書き込みの指令信号を出力許可の信号として、書き込みに使用するブロックに許可信号を出力し、そのブロックにデータバスを介して所定のデータの書き込みが実行される。なお、ここで特定したブロック番号の信号Ｂiは、ブロック管理レジスタの書き込みに用いられる。
【００５３】
こうした構成の回路において、図３に示した演算回路によって分類された消去回数が０回または偶数回のＡ側グループのブロックから、第１の演算回路１００ａにより選定された一のブロック番号（エンコードデータ）がバスバッファ１７７に出力される。同様に、消去回数が奇数回のＢ側グループから、第１の演算回路１１０ａにより選定された一のブロック番号（エンコードデータ）がバスバッファ１７８に出力される。
【００５４】
この状態において、例えば、Ａ側の第２の演算回路１００ｂの値γaが値０から値１に切り換わると、バスバッファ１７７にはインヒビット信号が出力され、バスバッファ１７７からの出力は禁止される。これは、偶数回の書き込みが終了したからである。この結果、バスバッファ１７８から出力されたＢ側グループのブロック番号が最終的に書き込みできるブロックして特定される。他方、Ｂ側の第２の演算回路１１０ｂの値γbが値０から値１に切り換わると、同様に奇数回の書き込みが終了したとして、バスバッファ１７８からの出力は禁止され、バスバッファ１７７から出力されたＡ側グループのブロック番号が最終的に書き込みできるブロックして特定される。
【００５５】
以上のように、消去回数によって分類した０回または偶数回のＡ側グループと奇数回のＢ側グループとのそれぞれのグループにおいて、一のグループ内で書き込みに使用するブロックにデータを書き込み、書き込みに使用できるブロックの使用が一通り終了したら、他方のグループ内の書き込みに使用するブロックにデータを書き込む。例えば、所定のデータを更新する場合には、そのデータを記憶したブロックとは別のブロックに更新データが書き込まれ、同じブロックに更新データの書き直しを行なうことが無い。こうして、消去回数が偶数回のグループと奇数回のグループとの２つのグループを交互に使用することで、特定のブロックの使用に偏らず、全体として消去回数を平準化したブロックの使用がハードウェア的に実現できる。
【００５６】
（Ｂ−４）平準化処理の一例：
この論理回路の内容をより具体的に説明するため、図９から図１１に、平準化処理による書き込みブロックの演算の一例を説明する説明図を示した。図９から図１１は、各ブロックのブロック管理レジスタに書き込まれた値と、Ａ側アドレス演算部１００，Ｂ側アドレス演算部１１０への入力値（以下、Ａ側入力値、Ｂ側入力値と呼ぶ）と、Ａ側の第２の演算回路１００ｂの演算結果γa、Ｂ側の第２の演算回路１１０ｂの演算結果γbとを示した表である。なお、ここでは説明を簡単にするため、ブロック数を１０個（＃０〜＃９）としている。
【００５７】
図９（ａ）は、不良ブロックが存在しない初期状態を示している。つまり、ブロックが正常であるため良否レジスタｂ３には値１、初期状態で未使用であるため使用可否レジスタｂ２には値１、当然消去回数もゼロであるため消去回数レジスタ（ｂ１，ｂ０）には（１，０）が入力されている。このブロック管理レジスタの値に基づいたＡ側入力値は各ブロックとも値１となり、Ａ側の第２の演算回路１００ｂの演算結果γaは全ブロックが値０でないため値０となる。他方、Ｂ側入力値は各ブロックとも値０となり、Ｂ側の第２の演算回路１１０ｂの演算結果γbは全ブロックが値０であるため値１となる。すなわち、第２の演算結果γが値０であるＡ側アドレス演算部１００の第１の演算結果に基づいて、書き込みに使用できるブロックが選択されることとなる。なお、図５にハード構成を示した第１の演算回路でのブロックの選定処理は、図９〜図１１に示す表において、Ａ側入力値またはＢ側入力値をブロック番号＃０から順に検索し、最初に値１を示すブロックを選定することと同等な処理である。したがって、以下、書き込みに使用するブロックの選定は、最初に値１を示すブロックを表から選定するものとする。
【００５８】
図９（ｂ）は、所定のデータを書き込むため、３個のブロックを使用した状態を示している。図中の斜線部分は、ブロック管理レジスタ７５の値が更新されたことを示している。つまり、図９（ａ）のＡ側入力値から、書き込みに使用するブロックは＃０，＃１，＃２の３ブロックとなり、使用中を示すため使用可否レジスタｂ２には値０が入力される。その結果、３ブロックに対応するＡ側入力値は値０となる。
【００５９】
なお、ブロック管理レジスタ７５は、更新される度に、一部のブロックのページに順次追記され、ブロック管理レジスタ７５の使用領域として割り当てたフラッシュメモリ６０の３ブロックの最後まで書き込みを実行した後に、書き込んだブロック（例えば、順次書き込んだ最初の１ブロック）の消去を行ない、再び消去されたブロックにデータが書き込まれる。したがって、ブロック管理レジスタ７５に格納する値の記憶領域７６として割り当てたブロックの消去回数がフラッシュメモリ６０の寿命として問題となることは、ほとんど無い。なお、ブロック管理レジスタ７５に格納する値の記憶に関して信頼性を高めるため、記憶領域７６の容量を２倍とし、格納する値を２重に記憶する（つまり、コピーを持つ）ものとしても良い。また、リードソロモン符号を用いて、２ビット以上の訂正機能を持たせるものとしても良い。
【００６０】
図９（ｃ）は、更に３個のブロックを使用した状態を示している。図９（ｂ）のＡ側入力値から、次に書き込みに使用するブロック（Ａ側入力値を＃０から順に検索し、最初に値１を示すブロック）は、＃３のブロックとなる。したがって、＃３，＃４，＃５の３ブロックにデータを書き込み、使用中である使用可否レジスタｂ２に値０を入力する。３ブロックに対応するＡ側入力値が値０となるのは、図９（ｂ）と同様である。
【００６１】
図９（ｄ）は、＃２，＃３，＃４の３個のブロックのデータを消去した状態を示している。外部機器からＣＰＵ３０を介してあるデータの消去指令を受けた場合には、フラッシュコントローラ７０は、そのデータを記憶したブロックを選定することになるが、この動作については、後にデータの読み出し動作として説明するものとし、ここでは、＃２〜＃４の３ブロックの消去が決定されたものとして説明する。
【００６２】
図示するように、＃２〜＃４の３ブロックのデータは消去され、未使用であるため使用可否レジスタｂ２に値１、消去回数レジスタ（ｂ１，ｂ０）には（０，１）が入力される。その結果、３ブロックに対応するＢ側入力値は値１、Ｂ側の第２の演算回路１１０ｂの演算結果γbは値０となるが、Ａ側の第２の演算回路１００ｂの演算結果γaが依然値０のままであるため、Ａ側アドレス演算部１００の第１の演算結果に基づいて、書き込みに使用するブロックの選定を続ける。つまり、図８に示したＲＳフィリップフロップ回路１７５は入力値が値１から値０へ変化しても、出力値の変化（インヒビット信号の切換）はなく、この段階では、バスバッファ１７７からのブロック番号がデコーダ１７９に出力される。
【００６３】
図１０（ａ）は、更に４個のブロックを使用した状態を示している。図９（ｂ）、（ｃ）と同様に、Ａ側アドレス演算部１００の第１の演算結果に基づいて、書き込みに使用できるブロックである＃６，＃７，＃８，＃９にデータを書き込む。この状態で、Ａ側入力値は全て値０となり、Ａ側の第２の演算回路１００ｂの演算結果γaは値1に変わる。この値１の出力により、Ａ側アドレス演算部１００の第１の演算結果による書き込みに使用できるブロックの選出は終了し、以降は、Ｂ側アドレス演算部１１０の第１の演算結果に拠ることとなる。この段階で、ＲＳフィリップフロップ回路１７５はインヒビット信号の出力先を切り換え、バスバッファ１７８からのブロック番号がデコーダ１７９に出力される。
【００６４】
図１０（ｂ）は、＃７，＃８の２個のブロックのデータを消去した状態を示している。図示するように、未使用であるブロックは、＃２，＃３，＃４，＃７，＃８の５個のブロックとなる。
【００６５】
図１０（ｃ）は、４個のブロックを使用した状態を示している。図１０（ｂ）に示したように、この段階で消去による空きブロックは５個であり、Ｂ側アドレス演算部１１０の第１の演算結果に基づいて、書き込みに使用できるブロック（Ｂ側入力値を＃０から順に検索し、最初に値１を示すブロック）を選定する。この場合、最初に値１を示すブロックは＃２となり、以下、＃３，＃４，＃７の順に選定されたブロックが書き込みに使用される。
【００６６】
図１０（ｄ）は、＃２，＃３の２個のブロックのデータを消去した状態を示している。図示するように、＃２，＃３のブロックの消去回数レジスタ（ｂ１，ｂ０）には（１，０）が入力される。＃２，＃３のブロックは、図９（ｄ）の段階で一度消去しているため、２度目の消去となる。なお、ブロックに対応するＡ側入力値は値１、Ａ側の第２の演算回路１００ｂの演算結果γaは値０となるが、Ｂ側の第２の演算回路１１０ｂの演算結果γbが依然値０のままであるため、Ｂ側アドレス演算部１１０の第１の演算結果に基づいて、書き込みに使用できるブロックの選出を続ける。図１０（ｄ）の段階では、未使用ブロックは、＃２，＃３，＃８の３個のブロックとなる。
【００６７】
図１１（ａ）は、１個のブロックを使用した状態を示している。図１０（ｄ）に示したＢ側入力値から、最初に値１を示すブロックを検索すると、＃８のブロックが選定され、＃８のブロックにデータが書き込まれる。図１１（ａ）に示すように、＃８のブロックに対応するＢ側入力値は値０となり、全ブロックのＢ側入力値が値０となる。したがって、Ｂ側の第２の演算回路１１０ｂの演算結果γbは値１となり、消去回数が１回目である消去済みブロックへの書き込みが一通り終了する。
【００６８】
図１１（ｂ）は、更に１個のブロックを使用した状態を示している。図１１（ａ）の段階で、Ｂ側アドレス演算部１１０の第１の演算結果に基づく書き込みに使用できるブロックの選定は終了しているため、Ａ側アドレス演算部１００の第１の演算結果に基づくブロックの選定が実行される。この場合、Ａ側入力値から最初に値１を示す＃２のブロックが選択され、データが書き込まれる。
【００６９】
図１１（ｃ）は、全データの消去をした状態を示している。図示するように、使用中の全ブロック（＃０〜＃２，＃４〜＃９）を消去するため、Ｂ側の第２の演算回路１１０ｂの演算結果γbは値０となるが、Ａ側の第２の演算回路１００ｂの演算結果γaも値０のままであるため、Ａ側アドレス演算部１００の第１の演算結果に基づいて、以後の書き込みに使用できるブロックを選定する。
【００７０】
図１１（ｄ）は、３個のブロックを使用した状態を示している。前述の通り、図１１（ｃ）に示したＡ側アドレス演算部１００の第１の演算結果に従って、＃３，＃４，＃７の３ブロックが選定され、そこにデータが書き込まれる。
【００７１】
以上の書き込みに使用するブロックの選定の一例に示したように、本実施例では、＃０のブロックから順に、全ブロックに亘って一通りの書き込みを行なった後、次に書き込むブロックは、消去が奇数回目である消去済みブロックの中で、ブロックの構成順に選択される。そして、奇数回目の消去済みブロックを全て使用すると、偶数回目の消去済みブロックを使用する。こうした使用可能なブロックの選択処理を、図３，図５，図７，図８に示した回路にてハードウェア的に行なうため、ソフトウェア的に処理する場合に比べ、簡易な構成であり、かつ、処理速度を向上することができる。なお、本実施例では、２つのグループに分類することで消去回数の平準化を実施しているが、さらに複数のグループに分類して、周回的に、書き込みに使用できるブロックを選出するグループを替えることで、より詳細に平準化処理を実行することができる。
【００７２】
Ｃ．データのアクセス処理：
本実施例の外部記憶装置１０では、データの更新時は、ブロック単位に更新する対象となるデータを読み出し、修正して、フラッシュメモリ６０の未使用（空き）ブロックまたは消去済みブロックに更新データを書き込む。その後、元のデータが存在するブロックを消去するという手法を採っている。したがって、更新データの書き込みに関しては、上述のブロック選出の演算と同様に処理し、更新の対象となるデータの読み出しに関しては、以下に説明するデータ読み出し演算に基づいて処理する。
【００７３】
図１２は、データの読み出し演算の説明図である。図１２は外部記憶装置１０の一部を示しており、ＣＰＵ３０、フラッシュメモリ６０内の各ブロック、フラッシュコントローラ７０内のブロック管理レジスタ７５、フラッシュコントローラ７０の一部であるアドレス演算部２００，比較器１９０からなる各要素の接続関係を示している。
【００７４】
図示するように、ブロック管理レジスタ７５は、論理アドレスレジスタを有し、アドレスバス１８０，許可信号線１８１を介して書き込みアドレス演算部２００と接続している。アドレス演算部２００と接続するアドレスバス１８０には、ＣＰＵ３０から指令された論理アドレスのアドレス信号が出力されている。この信号（アドレス）は、アドレス演算部２００からの許可信号を受けた一の論理アドレスレジスタに書き込まれる。
【００７５】
アドレス演算部２００は、図３に示した書き込みに使用できるブロックを選択する各ゲート９０，９３，９６、Ａ側アドレス演算部１００、Ｂ側アドレス演算部１１０、および、図８に示したブロックの特定回路を含んでいる。つまり、アドレス演算部２００は、所定のデータの書き込み、読み出しや消去をするブロックを特定し、ＣＰＵ３０からの指令に対応した処理をしている。このアドレス演算部２００は、論理アドレスレジスタの他に、データバス１８５，データレジスタＲを介して各ブロックと、論理アドレスバス１９３を介して各比較器１９０と接続している。
【００７６】
ＣＰＵ３０からの所定のデータを書き込む場合、アドレス演算部２００は、選定したブロックに対して許可信号線１８１を介した動作許可信号およびそのブロックに対応するブロック管理レジスタ７５の論理アドレスレジスタに書き込み許可信号を出力すると共に、許可信号線１８２を介した書き込み許可信号を出力している。こうして、許可信号を受けたブロックには、データバス１８５，データレジスタＲを介して所定のデータが書き込まれる。なお、許可信号線１８２は、データの書き込みと消去とを区別する信号を出力しており、所定のブロック内のデータを消去する場合にも使用される。
【００７７】
フラッシュコントローラ７０は、各ブロック管理レジスタ７５に対応する数の比較器１９０を備えている。各比較器１９０は、上述のアドレス演算部２００との接続の他に、論理アドレスレジスタ、ブロック管理レジスタ７５の使用可否レジスタｂ２とも接続し、論理アドレスレジスタからのアドレスと、論理アドレスバス１９３を介した論理アドレスと、使用可否レジスタｂ２の値とが入力される。比較器１９０は、アドレスと論理アドレスとを比較し、両者が一致した場合にブロックに読み出し許可信号ＥＮを出力する。つまり、比較器１９０は所定のデータの読み出し時に使用され、所望するデータが記憶された物理的なブロックを特定するために使用される。許可信号ＥＮを受けたブロックは、記憶したデータをフラッシュメモリ６０のデータレジスタＲを介してデータバス１８５に出力する。こうして所望するデータが読み出される。こうしたデータの読み出しには、一度のアドレス指定で連続してデータを読み出すバーストモードが用いられている。
【００７８】
なお、比較器１９０からの一のブロックへの許可信号（ブロックを特定する信号）は、使用可否レジスタｂ２、消去回数レジスタｂ１，ｂ０の値の更新にも用いられる。例えば、前述の書き込みに使用するブロックを特定するブロック番号の信号Ｂiと、比較器１９０からのブロックを特定する信号とを、フラッシュコントローラ７０からの書き込み指令、消去指令に応じて切り換えることで、前述のＡＮＤゲートやＤ型フリップフロップ回路を用いた書き込み回路を構成することができる。
【００７９】
こうした構成の外部記憶装置１０において、例えば、ＣＰＵ３０から「アドレス０１００Ｈに、データＡを書き込め」との書き込み指令を受けたアドレス演算部２００は、各ブロック管理レジスタ７５の管理情報レジスタから書き込みの可能なブロックとして、例えば＃１のブロックを選定する。アドレス演算部２００は、許可信号線１８１を介して許可信号を＃１の論理アドレスレジスタおよびブロックに出力する。その結果、＃１の論理アドレスレジスタにはアドレスバス１８０を介して「０１００Ｈ」が、＃１のブロックにはデータバス１８５，フラッシュメモリ６０のデータレジスタＲを介して「データＡ」が、それぞれ書き込まれる。
【００８０】
他方、例えば、ＣＰＵ３０から「アドレス０１００Ｈのデータを読み出せ」との読み出し指令を受けたアドレス演算部２００は、論理アドレスバス１９３に「０１００Ｈ」を出力する。これを入力した各比較器１９０は、一斉に、自己の管理する論理アドレスレジスタに書き込まれているアドレス信号と入力値（論理アドレス信号）とを比較する。比較した結果、＃１のブロックを管理する比較部１９０で、アドレスの一致が判断された場合、＃１のブロックを管理する比較部１９０は、＃１のブロックに許可信号ＥＮを出力する。＃１のブロックに書き込まれていた「データＡ」はデータレジスタＲを介してデータバス１８５に出力される。この比較器１９０には、２つのアドレスデータを比較して一致する場合のみ、信号を出力する既存のマグニチュードコンパレータを使用している。比較器１９０は、使用可否レジスタｂ２の値を入力しているため、不使用（つまりレジスタｂ２が値1）である場合には、比較判断を行なうことはない。
【００８１】
フラッシュメモリ６０では、データの書き込み時には消去済みで消去回数を考慮してブロックを選択するため、ある論理アドレスに対応するデータを書き込んだ物理的なブロックの番号は、データの更新ごとに変更されている。本実施例では、論理アドレスレジスタを備え、一のブロックに書き込むデータの論理アドレスを記憶する。所定の論理アドレスのデータを読み出したい時には、読み出しを所望する論理アドレスとの比較を、データの書き込みが行なわれている全てのブロックに対して、一斉に行なう。したがって、フラッシュメモリ６０内のどのブロックに所望するデータが書き込まれても、瞬時に読み出しが実行される。
【００８２】
なお、本実施例ではファイルはブロック単位で扱われるものとしたが、ページ単位で扱うものとしても良い。この場合、外部記憶装置１０内に６ビットのカウンタを設けて、６ビットの最上位の桁上げを使用可否レジスタｂ２に反映させるものとすれば良い。つまり、一のページにデータを書き込む度にカウントし、最上位の桁上げにより一のブロックの全ページの使用を判断して、そのブロックを使用中として使用可否レジスタｂ２に値０を立てる。このカウンタの値は、ＣＰＵ３０で管理するものとすれば良い。そうすることで、最後にアクセスしたブロックの残りページ数を認識することができ、メモリ空間を効率よく使用することができる。
【００８３】
また、ページ単位で扱う場合のデータの読み出しは、ブロックを特定する上位アドレスとページを特定する下位アドレスとをＣＰＵ３０で管理し、所望するデータの読み出し時には、比較器１９０で物理的なブロックの特定を上位アドレスを用いて行ない、特定されたブロック内のページの特定を下位アドレスを用いて行なえば良い。そして、データの更新時に、所定のページのデータを読み出し、修正したデータを別のページに書き込む。記憶場所を物理的に変更したページのアドレスは、ＣＰＵ３０側で管理するものとすれば良い。
【００８４】
Ｄ．変形例：
本実施例の外部記憶装置では、ハードウェア的に書き込みに使用するブロックを選定してデータを書き込み、ハードウェア的に所望するデータを記憶したブロックを特定してデータを読み出す構成としたが、所望するデータを記憶したブロックの特定をソフトウェア的に行なうものとしても良い。
【００８５】
所望するデータを記憶したブロックの特定をソフトウェア的に実行する外部記憶装置の構成を、図１３に示す。図示するように、この外部記憶装置３００は、図１に示した外部記憶装置１０とは、フラッシュメモリ６０の配置が異なり、いわゆる汎用タイプの外部記憶装置である。図１３の外部記記憶装置３００では、図１の外部記憶装置１０と符号を同一とし、各部の説明は省略する。
【００８６】
この外部記憶装置３００は、第１実施例同様に、フラッシュコントローラ７０にて書き込みに使用するフラッシュメモリ６０内のブロックを特定し、そのブロックの物理アドレスをＣＰＵ３０に出力する。ＣＰＵ３０は、外部機器から論理アドレスとフラッシュコントローラ７０からの物理アドレスとを対応付けたテーブルをＲＡＭ５０内に作成する。
【００８７】
このテーブルは、外部機器からのデータの読み書き等の指令ごとに更新される。所望するデータを読み出す際には、このテーブルを参照してブロックを特定し、そのブロックからデータを読み出す。こうしたテーブルを用いてデータの処理を実行することで、図１２に示した論理アドレスレジスタや比較器１９０等を備えることなく外部記憶装置３００を構成することができる。
【００８８】
なお、テーブルを構成する各値は、フラッシュメモリ６０に所定の記憶領域を確保し、その領域に記憶するものとすれば良い。こうすることで、電源遮断時も不揮発的にテーブルの値を記憶することができる。また、テーブルの値を複数記憶したり、エラー訂正可能に記憶するものとしても良い。
【００８９】
以上、本発明の実施の形態について説明したが、本発明はこうした実施の形態に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内において様々な形態で実施し得ることはもちろんである。本実施例では、ブロック管理レジスタとしてフラッシュメモリの所定領域を使用し、ブロック管理レジスタに書き込む管理情報が更新される度に追記する構成としたが、これらの管理情報はＲＡＭ上で保持し、所定のインターバル毎や、外部記憶装置の起動終了の指示があった時にフラッシュメモリの所定領域に書き込むものとしても良い。
【図面の簡単な説明】
【００９０】
【図１】本発明の第１実施例としての外部記憶装置の構成を示す全体ブロック図である。
【図２】本実施例で採用するフラッシュメモリの構造である。
【図３】本実施例の書き込みブロックの算出処理を説明する説明図である。
【図４】消去回数レジスタの書き込み回路の一例を示す回路図である。
【図５】第１の演算を実行する回路の一部を示す回路図である。
【図６】第１の演算回路における入力値とブロック番号との関係を示す真理値表である。
【図７】第２の演算を実行する回路を示す回路図である。
【図８】第１、第２の演算結果に基づいて書き込みに使用するブロックを特定する回路の回路図である。
【図９】平準化処理による書き込みブロックの演算の一例を説明する説明図である。
【図１０】平準化処理による書き込みブロックの演算の一例を説明する説明図である。
【図１１】平準化処理による書き込みブロックの演算の一例を説明する説明図である。
【図１２】データの読み出し演算の説明図である。
【図１３】ブロックの特定をソフトウェア的に実行する外部記憶装置の構成を示す全体ブロック図である。
【符号の説明】
【００９１】
１０，３００...外部記憶装置
２０...ホストＩ／Ｆ
３０...ＣＰＵ
４０...プログラムメモリ
５０...ＲＡＭ
６０...フラッシュメモリ
７０...フラッシュコントローラ
７５...ブロック管理レジスタ
７６...記憶領域
８０...データ書き込み領域
８５...冗長部領域
９０...第１のＡＮＤゲート
９３...第２のＡＮＤゲート
９６...第３のＡＮＤゲート
１００...Ａ側アドレス演算部
１００ａ，１１０ａ...第１の演算回路
１００ｂ，１１０ｂ...第２の演算回路
１１０...Ｂ側アドレス演算部
１２０，１６０...ＩＮＶゲート
１３０，１３１，１３２，１９５...ＡＮＤゲート
１４０，１４５，１７０...多入力のＡＮＤゲート
１５０，１５１...多入力のＯＲゲート
１７５...ＲＳフリップフロップ回路
１７７，１７８...バスバッファ
１７９...デコーダ
１８０...アドレスバス
１８１，１８２...許可信号線
１８５...データバス
１９０...比較器
１９３...論理アドレスバス
１９７...Ｄ型フリップフロップ
２００...アドレス演算部
【図１】
2005196634.tif 000003
【図２】
2005196634.tif 000004
【図３】
2005196634.tif 000005
【図４】
2005196634.tif 000006
【図５】
2005196634.tif 000007
【図６】
2005196634.tif 000008
【図７】
2005196634.tif 000009
【図８】
2005196634.tif 000010
【図９】
2005196634.tif 000011
【図１０】
2005196634.tif 000012
【図１１】
2005196634.tif 000013
【図１２】
2005196634.tif 000014
【図１３】
2005196634.tif 000015