(57)【要約】【課題】アドレス変換テーブルの容量を節約しつつ、パフォーマンスの低下を効果的に抑制可能なメモリコントローラを提供する。【解決手段】本発明によるメモリコントローラは、ｐ個のゾーンに分割可能なフラッシュメモリにアクセスするためのメモリコントローラであって、一つのゾーンに関するアドレス変換情報を格納可能なテーブルをｒ個（ｒ＜ｐ）有するアドレス変換テーブルを備える。そして、フラッシュメモリのあるゾーンに対するアクセスが要求されたことに応答して、ホスト側から見て当該ゾーンの次のゾーンに関するアドレス変換情報をアドレス変換テーブルの所定のテーブル内に作成する。本発明によれば、上記次のゾーンに対して実際にアクセスがされた場合、対応するアドレス変換情報を初めから作成する必要がない。【選択図】　　　　　図１３
2004070691.tif 000002
【特許請求の範囲】
【請求項１】
ｐ個のゾーンに分割可能なフラッシュメモリにアクセスするためのメモリコントローラであって、前記フラッシュメモリの一つのゾーンに関するアドレス変換情報を格納可能なテーブルをｒ個（ｒ＜ｐ）有するアドレス変換テーブルを備え、前記フラッシュメモリに対するアクセスが要求されたことに応答して、アクセス対象である第１のゾーンとは異なる第２のゾーンに関するアドレス変換情報を前記アドレス変換テーブルの所定のテーブル内に作成することを特徴とするメモリコントローラ。
【請求項２】
前記第２のゾーンは、ホスト側から見て前記第１のゾーンの次のゾーンであることを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記ｒ個のテーブルの優先順位を表示する手段をさらに備え、前記所定のテーブルは優先順位が最も低いテーブル及び優先順位が次に低いテーブルから選ばれることを特徴とする請求項１または２に記載のメモリコントローラ。
【請求項４】
前記アクセスの要求が、フラッシュメモリに対するデータの読み出し要求であることを特徴とする請求項１乃至３いずれか１項に記載のメモリコントローラ。
【請求項５】
ｐ個のゾーンに分割可能なフラッシュメモリにアクセスするためのメモリコントローラであって、前記フラッシュメモリの一つのゾーンに関するアドレス変換情報を格納可能なテーブルをｒ個（ｒ＜ｐ）有するアドレス変換テーブルを備え、前記フラッシュメモリの第１のゾーンに対するアクセスが要求されたことに応答して、ホスト側から見て前記第１のゾーンに続く第２のゾーンに関するアドレス変換情報が前記アドレス変換テーブルのいずれかのテーブル内に格納されているか否かを判断することを特徴とするメモリコントローラ。
【請求項６】
前記第２のゾーンに関するアドレス変換情報が前記アドレス変換テーブルのいずれのテーブル内にも格納されていないと判断されたことに応答して、いずれかのテーブルに対し、前記第２のゾーンに関するアドレス変換情報の上書きを開始することを特徴とする請求項５に記載のメモリコントローラ。
【請求項７】
ホストコンピュータ側のアドレスに属する論理アドレスからフラッシュメモリ側のアドレスに属する物理アドレスへの変換に用いるアドレス変換テーブルと、前記フラッシュメモリから読み出したデータを一時的に格納する一時メモリとを備え、前記一時メモリに格納されたデータが前記ホストコンピュータへ転送されている期間に、前記アドレス変換テーブルの内容を更新することを特徴とするメモリコントローラ。
【請求項８】
前記一時メモリがＦＩＦＯであることを特徴とする請求項７に記載のメモリコントローラ。
【請求項９】
ｐ個のゾーンに分割可能なフラッシュメモリと、前記フラッシュメモリにアクセスするメモリコントローラとを備えるフラッシュメモリシステムであって、前記メモリコントローラは、前記フラッシュメモリの一つのゾーンに関するアドレス変換情報を格納可能なテーブルをｒ個（ｒ＜ｐ）有するアドレス変換テーブルを備え、前記フラッシュメモリに対するアクセスが要求されたことに応答して、アクセス対象である第１のゾーンとは異なる第２のゾーンに関するアドレス変換情報を前記アドレス変換テーブルの所定のテーブル内に作成することを特徴とするフラッシュメモリシステム。
【請求項１０】
ｐ個のゾーンに分割可能なフラッシュメモリと、前記フラッシュメモリにアクセスするメモリコントローラとを備えるフラッシュメモリシステムであって、前記メモリコントローラは、前記フラッシュメモリの一つのゾーンに関するアドレス変換情報を格納可能なテーブルをｒ個（ｒ＜ｐ）有するアドレス変換テーブルを備え、前記フラッシュメモリの第１のゾーンに対するアクセスが要求されたことに応答して、ホスト側から見て前記第１のゾーンに続く第２のゾーンに関するアドレス変換情報が前記アドレス変換テーブルのいずれかのテーブル内に格納されているか否かを判断することを特徴とするフラッシュメモリシステム。
【請求項１１】
複数のゾーンに分割可能なフラッシュメモリの制御方法であって、前記フラッシュメモリの第１のゾーンに対するアクセスが要求されたことに応答して、ホスト側から見て前記第１のゾーンに続く第２のゾーンに関するアドレス変換情報がアドレス変換テーブル内に格納されているか否かを判断するステップと、前記第２のゾーンに関するアドレス変換情報が前記アドレス変換テーブル内に格納されていない場合、前記アドレス変換テーブルに対して前記第２のゾーンに関するアドレス変換情報の格納を開始するステップとを備えることを特徴とするフラッシュメモリの制御方法。
【請求項１２】
複数のゾーンに分割可能なフラッシュメモリの制御方法であって、前記フラッシュメモリの所定のゾーンに対するアクセスが要求されたことに応答して、前記所定のゾーンに関するアドレス変換情報がアドレス変換テーブル内に格納されているか否かを判断する第１のステップと、前記所定のゾーンに関するアドレス変換情報が前記アドレス変換テーブル内に格納されていると判断されたことに応答して、これが完全なアドレス変換情報であるか不完全なアドレス変換情報であるかを判断する第２のステップとを備えることを特徴とするフラッシュメモリの制御方法。
【請求項１３】
前記第２のステップにおいて、前記アドレス変換情報が不完全であると判断されたことに応答して、不完全な部分を補充することによってこれを完成させる第３のステップをさらに備えることを特徴とする請求項１２に記載のフラッシュメモリの制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、メモリコントローラ及びこれを備えるメモリシステムに関し、特に、フラッシュメモリを制御するためのメモリコントローラ及びこれを備えるメモリシステムに関する。また、本発明はフラッシュメモリの制御方法に関する。
【０００２】
【従来の技術】
近年、メモリカードやシリコンディスクなどに用いられる半導体メモリとして、フラッシュメモリ、特にＮＡＮＤ型フラッシュメモリが用いられることが多い。ＮＡＮＤ型フラッシュメモリは、メモリセルを消去状態（論理値＝１）から書込状態（論理値＝０）に変化させる場合は、これをメモリセル単位で行うことが可能である一方、メモリセルを書込状態（０）から消去状態（１）に変化させる場合は、これをメモリセル単位で行うことができず、複数のメモリセルからなるブロック単位でしかこれを行うことができない。かかる一括消去動作は、一般的に「ブロック消去」と呼ばれる。
【０００３】
このように、フラッシュメモリでは、ブロック単位でしかメモリセルを書込状態（０）から消去状態（１）に変化させることができないことから、既にデータが割り当てられている論理アドレスに対して新しいデータを上書きする場合であっても、旧データが格納されているブロックに対して新しいデータを直接上書きすることはできない。このため、既にデータが割り当てられている論理アドレスに対して新しいデータを上書きするようホストコンピュータから指示されると、旧データが格納されているブロック内における上書き対象外のデータを消去済みブロックに転送するとともに、新しいデータを当該消去済みブロックに書き込むという処理が必要となる。かかる処理は「ブロック間転送」と呼ばれ、ホストコンピュータからデータの上書きが指示される度に実行される。ブロック間転送が行われた後、転送元のブロックはブロック消去され、これにより転送元のブロックは新たな消去済みブロックとなる。
【０００４】
したがって、論理アドレスと各ブロックに一義的に割り当てられた物理アドレスとの関係は固定されず、これらの関係はデータの上書きが指示される度に動的に変化することになる。このため、フラッシュメモリを制御するためのコントローラ内には、論理アドレスと物理アドレスとの関係を保持するためのアドレス変換テーブルが必要となり、ホストコンピュータからデータの読み出しが要求される度にこれを参照してアドレス変換が行われるとともに、データの書き込みが要求される度にその内容が更新される。
【０００５】
しかしながら、アドレス変換テーブルに必要とされる記録容量は、コントローラの制御対象となるブロック数に比例することから、制御対象となるブロック数が非常に多い場合には大容量のアドレス変換テーブルが必要となる。しかも、アドレス変換テーブルには一般にＳＲＡＭ（Ｓｔａｔｉｃ　Ｒａｎｄｏｍ　Ａｃｃｅｓｓ　Ｍｅｍｏｒｙ）が用いられるため、大容量のアドレス変換テーブルを用いるとコントローラの製品コストを大幅に増大させてしまう。
【０００６】
このような問題を解消するためには、制御対象となる全てのブロックに関するアドレス変換情報をアドレス変換テーブルに格納するのではなく、一部のブロックに関するアドレス変換情報のみをアドレス変換テーブルに格納することが有効である。例えば、アドレス変換テーブルに格納するアドレス変換情報を半分のブロックに関する情報のみとすれば、アドレス変換テーブルに必要とされる記憶容量を半分とすることができ、コントローラの製品コストを下げることが可能となる。
【０００７】
【発明が解決しようとする課題】
しかしながら、一部のブロックに関するアドレス変換情報のみをアドレス変換テーブルに展開する方式においては、アドレス変換テーブルにアドレス変換情報が展開されていないブロックに対してデータの読み出しが要求された場合、アドレス変換テーブル内の一部のデータを破棄し、新たに当該ブロックに関するアドレス変換情報をアドレス変換テーブル内に格納するといった更新作業が必要となる。当然ながら、更新作業が完了するまでは要求されたデータの読み出しを行うことができないので、かかる更新作業の発生はメモリシステムのパフォーマンスを低下させる原因となる。
【０００８】
このような更新作業の発生頻度は、アドレス変換テーブルにアドレス変換情報が格納されるブロックの割合によって決まり、この割合が少ないほど更新作業は高頻度で発生することになる。つまり、アドレス変換テーブルの容量を節約することによってアドレス変換情報を格納可能なブロックの割合を減らせば減らすほど、コントローラの製品コストが低下するとともにパフォーマンスも低下し、逆に、アドレス変換テーブルの容量を増大することによってアドレス変換情報を格納可能なブロックの割合を増やせば増やすほど、コントローラの製品コストが上昇するとともにパフォーマンスも向上する。すなわち、アドレス変換テーブルの容量に基づく製品コストとパフォーマンスとはトレードオフの関係にあり、その両方を満足させることは困難であった。
【０００９】
したがって、本発明の目的は、アドレス変換テーブルの容量を節約しつつ、パフォーマンスの低下を効果的に抑制可能なメモリコントローラ及びこれを備えるメモリシステムを提供することである。
【００１０】
また、本発明の他の目的は、アドレス変換テーブルの容量を節約しつつ、パフォーマンスの低下を効果的に抑制可能なフラッシュメモリの制御方法を提供することである。
【００１１】
【課題を解決するための手段】
本発明の一側面によるメモリコントローラは、ｐ個のゾーンに分割可能なフラッシュメモリにアクセスするためのメモリコントローラであって、前記フラッシュメモリの一つのゾーンに関するアドレス変換情報を格納可能なテーブルをｒ個（ｒ＜ｐ）有するアドレス変換テーブルを備え、前記フラッシュメモリに対するアクセスが要求されたことに応答して、アクセス対象である第１のゾーンとは異なる第２のゾーンに関するアドレス変換情報を前記アドレス変換テーブルの所定のテーブル内に作成することを特徴とする。
【００１２】
本発明によれば、実際に第２のゾーンに対してアクセスがされる前に、第２のゾーンに関するアドレス変換情報をアドレス変換テーブル内に作成していることから、その後第２のゾーンに対して実際にアクセスがされた場合、対応するアドレス変換情報を初めから作成する必要がない。これにより、アドレス変換テーブルの容量を節約しつつ、パフォーマンスの低下を効果的に抑制することが可能となる。
【００１３】
また、あるゾーンに対してアクセス（特に、データの読み出し）が要求された場合、その後これに続くゾーンに対するアクセスが要求されることが多いことから、前記第２のゾーンは、ホスト側から見て前記第１のゾーンの次のゾーンであることが好ましい。また、本発明によるメモリコントローラは、前記ｒ個のテーブルの優先順位を表示する手段をさらに備え、前記所定のテーブルは優先順位が最も低いテーブル及び優先順位が次に低いテーブルから選ばれることが好ましい。
【００１４】
本発明の他の側面によるメモリコントローラは、ｐ個のゾーンに分割可能なフラッシュメモリにアクセスするためのメモリコントローラであって、前記フラッシュメモリの一つのゾーンに関するアドレス変換情報を格納可能なテーブルをｒ個（ｒ＜ｐ）有するアドレス変換テーブルを備え、前記フラッシュメモリの第１のゾーンに対するアクセスが要求されたことに応答して、ホスト側から見て前記第１のゾーンに続く第２のゾーンに関するアドレス変換情報が前記アドレス変換テーブルのいずれかのテーブル内に格納されているか否かを判断することを特徴とする。
【００１５】
本発明は、次にアクセスされる可能性の高い第２のゾーンに関するアドレス変換情報がアドレス変換テーブル内に格納されているか否かを先行して判断することにより、パフォーマンスの向上を可能としている。また、第２のゾーンに関するアドレス変換情報が前記アドレス変換テーブルのいずれのテーブル内にも格納されていないと判断されたことに応答して、いずれかのテーブルに対し、前記第２のゾーンに関するアドレス変換情報の上書きを開始すれば、その後実際に第２のゾーンに対してアクセスがされた場合であっても、対応するアドレス変換情報を初めから作成する必要がなくなる。これにより、アドレス変換テーブルの容量を節約しつつ、パフォーマンスの低下を効果的に抑制することが可能となる。
【００１６】
本発明のさらに他の側面によるメモリコントローラは、ホストコンピュータ側のアドレスに属する論理アドレスからフラッシュメモリ側のアドレスに属する物理アドレスへの変換に用いるアドレス変換テーブルと、前記フラッシュメモリから読み出したデータを一時的に格納する一時メモリとを備え、前記一時メモリに格納されたデータが前記ホストコンピュータへ転送されている期間に、前記アドレス変換テーブルの内容を更新することを特徴とする。
【００１７】
本発明は、本来メモリコントローラが待ち状態となる期間においてアドレス変換テーブルの内容を更新することにより、パフォーマンスの向上を可能としている。また、前記一時メモリは、ＦＩＦＯであることが好ましい。
【００１８】
本発明の一側面によるフラッシュメモリシステムは、ｐ個のゾーンに分割可能なフラッシュメモリと、前記フラッシュメモリにアクセスするメモリコントローラとを備えるフラッシュメモリシステムであって、前記メモリコントローラは、前記フラッシュメモリの一つのゾーンに関するアドレス変換情報を格納可能なテーブルをｒ個（ｒ＜ｐ）有するアドレス変換テーブルを備え、前記フラッシュメモリに対するアクセスが要求されたことに応答して、アクセス対象である第１のゾーンとは異なる第２のゾーンに関するアドレス変換情報を前記アドレス変換テーブルの所定のテーブル内に作成することを特徴とする。
【００１９】
本発明においても、実際に第２のゾーンに対してアクセスがされる前に、第２のゾーンに関するアドレス変換情報をアドレス変換テーブル内に作成していることから、その後第２のゾーンに対して実際にアクセスがされた場合、対応するアドレス変換情報を初めから作成する必要がない。これにより、アドレス変換テーブルの容量を節約しつつ、パフォーマンスの低下を効果的に抑制することが可能となる。
【００２０】
本発明の他の側面によるフラッシュメモリシステムは、ｐ個のゾーンに分割可能なフラッシュメモリと、前記フラッシュメモリにアクセスするメモリコントローラとを備えるフラッシュメモリシステムであって、前記メモリコントローラは、前記フラッシュメモリの一つのゾーンに関するアドレス変換情報を格納可能なテーブルをｒ個（ｒ＜ｐ）有するアドレス変換テーブルを備え、前記フラッシュメモリの第１のゾーンに対するアクセスが要求されたことに応答して、ホスト側から見て前記第１のゾーンに続く第２のゾーンに関するアドレス変換情報が前記アドレス変換テーブルのいずれかのテーブル内に格納されているか否かを判断することを特徴とする。
【００２１】
本発明も、次にアクセスされる可能性の高い第２のゾーンに関するアドレス変換情報がアドレス変換テーブル内に格納されているか否かを先行して判断することにより、パフォーマンスの向上を可能としている。
【００２２】
本発明の一側面によるフラッシュメモリの制御方法は、複数のゾーンに分割可能なフラッシュメモリの制御方法であって、前記フラッシュメモリの第１のゾーンに対するアクセスが要求されたことに応答して、ホスト側から見て前記第１のゾーンに続く第２のゾーンに関するアドレス変換情報がアドレス変換テーブル内に格納されているか否かを判断するステップと、前記第２のゾーンに関するアドレス変換情報が前記アドレス変換テーブル内に格納されていない場合、前記アドレス変換テーブルに対して前記第２のゾーンに関するアドレス変換情報の格納を開始するステップとを備えることを特徴とする。
【００２３】
本発明においても、実際に第２のゾーンに対してアクセスがされる前に、前記アドレス変換テーブルに対して前記第２のゾーンに関するアドレス変換情報の格納を開始していることから、その後第２のゾーンに対して実際にアクセスがされた場合、対応するアドレス変換情報を初めから作成する必要がない。これにより、アドレス変換テーブルの容量を節約しつつ、パフォーマンスの低下を効果的に抑制することが可能となる。
【００２４】
本発明の他の側面によるフラッシュメモリの制御方法は、複数のゾーンに分割可能なフラッシュメモリの制御方法であって、前記フラッシュメモリの所定のゾーンに対するアクセスが要求されたことに応答して、前記所定のゾーンに関するアドレス変換情報がアドレス変換テーブル内に格納されているか否かを判断する第１のステップと、前記所定のゾーンに関するアドレス変換情報が前記アドレス変換テーブル内に格納されていると判断されたことに応答して、これが完全なアドレス変換情報であるか不完全なアドレス変換情報であるかを判断する第２のステップとを備えることを特徴とする。そして、前記第２のステップにおいて、前記アドレス変換情報が不完全であると判断されたことに応答して、不完全な部分を補充することによってこれを完成させれば、対応するアドレス変換情報を初めから作成する必要がなくなることから、パフォーマンスの低下を効果的に抑制することが可能となる。
【００２５】
【発明の実施の形態】
以下、添付図面を参照しながら、本発明の好ましい実施態様について詳細に説明する。
【００２６】
図１は、本発明の好ましい実施態様にかかるフラッシュメモリシステム１の構成を概略的に示すブロック図である。図１に示すように、本実施態様にかかるフラッシュメモリシステム１は、フラッシュメモリ２及びコントローラ３からなる。特に限定されるものではないが、フラッシュメモリシステム１はフラッシュメモリ２及びコントローラ３が一つのカード内に集積されて構成され、ホストコンピュータに対して着脱可能な一種の外部記憶装置として用いることができる。ホストコンピュータとしては、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置が挙げられる。
【００２７】
フラッシュメモリ２は、多数のメモリセルを含む１又は２以上の半導体チップからなり、ｎ個（例えば８１９２個）のブロックによって構成される。これらｎ個のブロックはいずれもｋ個（例えば３２個）のページ（セクタ）からなり、各ページは例えば５１２バイトの記録容量を有する最小アクセス単位として用いられる。したがって、上記の例のように、
ｎ＝８１９２（＝８Ｋ）
ｋ＝３２
である場合、フラッシュメモリ２は２５６Ｋページのアドレス空間を含み、このためホストコンピュータ側から特定のページにアクセスするためには、少なくとも１８ビットのアドレス情報が必要となる。本明細書においては、ホストコンピュータよりフラッシュメモリシステム１に供給されるアドレス情報を「ホストアドレス」と呼ぶ。
【００２８】
コントローラ３は、少なくともＣＰＵ４、ＲＡＭ５、ＲＯＭ６及びＦＩＦＯ７を含む種々の機能ブロックによって構成される。特に限定されるものではないが、コントローラ３は一つの半導体チップ上に集積されていることが好ましい。ＣＰＵ４は、コントローラ３を構成する各機能ブロック全体の動作を制御するための機能ブロックである。また、ＲＡＭ５は、ＣＰＵ４によるフラッシュメモリ２の制御に必要なデータが一時的に格納される作業領域であり、特に限定されるものではないが、複数のＳＲＡＭセルによって構成することが好ましい。以下に詳述するが、アドレス変換テーブルもＲＡＭ５内に格納される。ＲＯＭ６は、ＣＰＵ４が実行すべき制御プログラム（ファームウェア）を格納するための機能ブロックである。また、ＦＩＦＯ７は、フラッシュメモリ２に書き込むべきデータ及びフラッシュメモリ２から読み出されたデータを一時的に格納するためのメモリである。
【００２９】
次に、フラッシュメモリ２に含まれるメモリセルの具体的な構造について説明する。
【００３０】
図２は、フラッシュメモリ２に含まれる各メモリセル１０の構造を概略的に示す断面図である。図２に示すように、メモリセル１０は、Ｐ型半導体基板１１に形成されたＮ型のソース拡散領域１２及びドレイン拡散領域１３と、ソース拡散領域１２とドレイン拡散領域１３との間のＰ型半導体基板１１を覆って形成されたトンネル酸化膜１４と、トンネル酸化膜１４上に形成されたフローティングゲート電極１５と、フローティングゲート電極１５上に形成された絶縁膜１６と、絶縁膜１６上に形成されたコントロールゲート電極１７とから構成される。このような構成を有するメモリセル１０は、フラッシュメモリ２内において、複数個直列に接続されて、ＮＡＮＤ型フラッシュメモリを構成する。
【００３１】
メモリセル１０は、フローティングゲート電極１５に電子が注入されているか否かによって、「消去状態」と「書込状態」のいずれかの状態となる。メモリセル１０が消去状態であることは、当該メモリセル１０にデータ「１」が保持されていることを意味し、メモリセル１０が書込状態であることは、当該メモリセル１０にデータ「０」が保持されていることを意味する。すなわち、メモリセル１０は、１ビットのデータを保持することが可能である。
【００３２】
図２に示すように、消去状態とは、フローティングゲート電極１５に電子が注入されていない状態を指す。消去状態におけるメモリセル１０は、デプレッション型のトランジスタとなり、コントロールゲート電極１７に読み出し電圧が印加されているか否かに関わらず、ソース拡散領域１２とドレイン拡散領域１３との間のＰ型半導体基板１１の表面にはチャネル１８が形成される。したがって、ソース拡散領域１２とドレイン拡散領域１３とは、コントロールゲート電極１７に読み出し電圧が印加されているか否かに関わらず、チャネル１８によって常に電気的に接続状態となる。
【００３３】
図３は、書込状態であるメモリセル１０を概略的に示す断面図である。図３に示すように、書込状態とは、フローティングゲート電極１５に電子が蓄積されている状態を指す。フローティングゲート電極１５はトンネル酸化膜１４及び絶縁膜１６に挟まれているため、一旦、フローティングゲート電極１５に注入された電子は、きわめて長時間フローティングゲート電極１５内にとどまる。書込状態におけるメモリセル１０は、エンハンスメント型のトランジスタとなり、コントロールゲート電極１７に読み出し電圧が印加されていないときには、ソース拡散領域１２とドレイン拡散領域１３との間のＰ型半導体基板１１の表面にはチャネルが形成されず、コントロールゲート電極１７に読み出し電圧が印加されているときには、ソース拡散領域１２とドレイン拡散領域１３との間のＰ型半導体基板１１の表面にチャネル（図示せず）が形成される。したがって、コントロールゲート電極１７に読み出し電圧が印加されていない状態では、ソース拡散領域１２とドレイン拡散領域１３とは電気的に絶縁され、コントロールゲート電極１７に読み出し電圧が印加された状態では、ソース拡散領域１２とドレイン拡散領域１３とが電気的に接続される。
【００３４】
ここで、選択されたメモリセル１０が消去状態であるか書込状態であるかは、次のようにして読み出すことができる。すなわち、複数個直列に接続されたメモリセル１０のうち、選択されたメモリセル１０以外の全てのメモリセル１０のコントロールゲート電極１７に読み出し電圧を印加し、この状態において、これらメモリセル１０の直列体に電流が流れるか否かを検出する。その結果、かかる直列体に電流が流れれば、選択されたメモリセル１０が消去状態であると判断することができ、かかる直列体に電流が流れなければ、選択されたメモリセル１０が書込状態であると判断することができる。このようにして、直列体に含まれる任意のメモリセル１０に保持されたデータが「０」であるのか「１」であるのかを読み出すことができる。但し、ＮＡＮＤ型フラッシュメモリにおいては、ひとつの直列体に含まれる２以上のメモリセル１０に保持されたデータを同時に読み出すことはできない。
【００３５】
また、消去状態であるメモリセル１０を書込状態に変化させる場合、コントロールゲート電極１７に正の高電圧が印加され、これによって、トンネル酸化膜１４を介してフローティングゲート電極１５へ電子が注入される。フローティングゲート電極１５への電子の注入は、ＦＮトンネル電流による注入が可能である。一方、書込状態であるメモリセル１０を消去状態に変化させる場合、コントロールゲート電極１７に負の高電圧が印加され、これによって、トンネル酸化膜１４を介してフローティングゲート電極１５に蓄積された電子が排出される。
【００３６】
次に、フラッシュメモリ２の持つアドレス空間の具体的な構成について説明する。
【００３７】
図４は、フラッシュメモリ２のアドレス空間の構造を概略的に示す図である。図４に示すように、フラッシュメモリ２のアドレス空間は、ブロック＃０〜＃ｎ−１からなるｎ個のブロックによって構成される。ここで、各ブロックは、データの消去単位である。すなわち、フラッシュメモリ２では、各メモリセル１０ごとに、その状態を書込状態から消去状態に変化させることはできず、メモリセル１０を書込状態から消去状態に変化させる場合は、当該メモリセル１０が属するブロックに含まれる全てのメモリセル１０を一括して消去状態とする必要がある。逆に、各メモリセル１０ごとにその状態を消去状態から書込状態に変化させることは可能である。
【００３８】
さらに、図４に示すように、フラッシュメモリ２を構成する各ブロック＃０〜＃ｎ−１は、それぞれページ＃０〜＃ｋ−１からなるｋ個のページによって構成されている。これら各ページはデータの読み出し及び書き込みにおけるアクセス単位であり、図４に示すように、ビットｂ０〜ｂ７からなる８ビットを１バイトとして、例えばそれぞれ５１２バイトのユーザ領域２１と１６バイトの冗長領域２２によって構成される。ユーザ領域２１は、ホストコンピュータより供給されるユーザデータが格納される領域である。
【００３９】
ここで、ｎ個のブロック＃０〜＃ｎ−１は、ゾーン＃０〜＃ｐ−１（ｐは３以上の整数であり、且つ、ｎの約数である）からなるｐ個のゾーンに分類される。したがって、各ゾーンはｎ／ｐ（＝ｍ）個のブロックによって構成されることになる。また、ゾーン＃ｑ（ｑは０〜ｐ−１のいずれか）はブロック＃ｍ×ｑ〜＃ｍ×ｑ＋ｍ−１によって構成される。例えば、
ｎ＝８１９２（＝８Ｋ）
ｐ＝８
であるとすれば、各ゾーンはｍ＝１０２４個のブロックによって構成され、具体的には、ゾーン＃ｑはブロック＃１０２４ｑ〜＃１０２４ｑ＋１０２３によって構成されることになる。フラッシュメモリ２のアドレス空間をｐ個のゾーンに分類するのは、アドレス変換テーブルの記録容量を節約するためであり、その詳細については後述する。
【００４０】
図５は、冗長領域２２のデータ構造を概略的に示す図である。図５に示すように、冗長領域２２は、論理ブロックアドレス格納領域２３及びその他の付加情報を格納するための領域２４によって構成される。
【００４１】
論理ブロックアドレス格納領域２３は、当該ブロックに対応する論理ブロックアドレスを格納するための領域であり、少なくともｘ個（ｘ＝ｌｏｇ２ｍ）のメモリセル１０が割り当てられる。ここで、論理ブロックアドレスとは、ホストアドレスの一部若しくはホストアドレスの一部に基づいて生成されたアドレスであり、ホストコンピュータ側から見た各ゾーンにおけるブロック番号を示している。したがって、論理ブロックアドレスは各ゾーンにおいて一義的に割り当てられ、少なくともｘビットで構成される。論理ブロックアドレス格納領域２３は、各ページに含まれる冗長領域２２が共通に備える要素であるが、一つのブロックはｋ個のページからなるため、一つのブロックを構成する全てのページの論理ブロックアドレス格納領域２３に論理ブロックアドレスを格納しておく必要はなく、少なくとも各ブロックの先頭ページ（ページ＃０）の論理ブロックアドレス格納領域２３に論理ブロックアドレスを格納すれば足りる。また、消去済みのブロックについては全てのメモリセル１０が消去状態（１）となっていることから、論理ブロックアドレス格納領域２３がｘ個のメモリセル１０からなる場合、論理ブロックアドレス格納領域２３に格納される値はｍ−１（＝２ｘ−１）となる。一方、何らかのユーザデータが格納されているブロックについては、対応する論理ブロックアドレスの値が論理ブロックアドレス格納領域２３に格納されている。
【００４２】
尚、領域２４には、対応するユーザ領域２１に格納されたユーザデータの誤りを訂正するための付加情報（エラーコレクションコード）や、当該ブロックについての異常を表示するブロックステータス等が格納されているが、これらについては、本発明の要旨と直接関係がないため、説明は省略する。
【００４３】
以上のように、フラッシュメモリ２はｎ個のブロックによって構成され、これらはそれぞれｍ個のブロックからなるｐ個のゾーンに分類されているが、各ゾーンに含まれるｍ個のブロックのうち、ｍ’（＜ｍ）個のブロックは実際にデータを格納することができる実使用ブロックとして取り扱われ、残りのｍ−ｍ’個のブロックは冗長ブロックとして取り扱われる。フラッシュメモリ２のアドレス空間は、実使用ブロックのみによって構成され、あるブロックに不良が発生し使用不能となった場合には、不良が発生したブロックの数だけ冗長ブロックとして用いられるブロックの数が減らされる。
【００４４】
次に、ＲＡＭ５内に作成される各種テーブルについて説明する。
【００４５】
ＲＡＭ５内に作成される各種テーブルには、少なくとも、アドレス変換テーブル、管理テーブル、優先リンク及び書き込みキューが含まれ、これらはコントローラ３に対して電源投入またはリセット動作がなされた場合に、ＲＯＭ６に格納されているファームウェアに基づきＣＰＵ４によって作成される。
【００４６】
アドレス変換テーブルは、ホストアドレスに基づき生成される論理ブロックアドレスと各ブロックに対して一義的に割り当てられた物理ブロックアドレスとの対応関係を保持するためのテーブルであり、以下の構造を有している。
【００４７】
図６は、ＲＡＭ５内に作成されるアドレス変換テーブル３１のデータ構造を示す図である。図６に示すように、アドレス変換テーブル３１は、テーブル＃０〜＃ｒ−１（ｒは２〜ｐ−１の整数）からなるｒ個のテーブルからなる。各テーブル＃０〜＃ｒ−１は、それぞれゾーン＃０〜ゾーン＃ｐ−１のいずれか一つのゾーンに関するアドレス変換情報を格納するための領域であり、上述の通りｒ＜ｐであることから、アドレス変換テーブル３１に全て（ｐ個）のゾーンに関するアドレス変換情報を格納することはできず、一部（ｒ個）のゾーンに関するアドレス変換情報しか格納することができない。これは、アドレス変換テーブル３１に必要とされる記憶容量を節約することにより、製品コストを下げるために他ならない。
【００４８】
各テーブル＃０〜＃ｒ−１は、物理ブロックアドレス格納領域＃０〜物理ブロックアドレス格納領域＃ｍ−１からなるｍ個の物理ブロックアドレス格納領域と、これら物理ブロックアドレス格納領域にそれぞれ対応して設けられたｍ個のフラグからなる。ここで、各物理ブロックアドレス格納領域に対して一義的に割り当てられた領域番号（＃０〜＃ｍ−１）は論理ブロックアドレスを示し、各物理ブロックアドレス格納領域に格納された内容は、対応する物理ブロックアドレスを示している。したがって、例えば物理ブロックアドレス格納領域＃ｉ（ｉは０〜ｍ−１のいずれか）に格納されている物理ブロックアドレスが＃ｊであれば、論理ブロックアドレス＝＃ｉが物理ブロックアドレス＝＃ｊに対応することになる。
【００４９】
また、フラグ＃０〜フラグ＃ｍ−１は、それぞれ対応する物理ブロックアドレス格納領域の内容（物理ブロックアドレス）が有効であるか否かを示している。具体的には、フラグが「０」であれば、対応する物理ブロックアドレス格納領域の内容が有効であることを意味し、フラグが「１」であれば、対応する物理ブロックアドレス格納領域の内容が無効であることを意味する。もちろん、逆に、物理ブロックアドレス格納領域の内容が有効である場合に、対応するフラグを「１」としても構わない。
【００５０】
管理テーブルは、各テーブル＃０〜＃ｒ−１に格納されているアドレス変換情報がそれぞれどのゾーンに関するアドレス変換情報であるのかを示すためのテーブルであり、以下の構造を有している。
【００５１】
図７は、ＲＡＭ５内に作成される管理テーブル３２のデータ構造を示す図である。図７に示すように、管理テーブル３２は、ゾーン番号格納領域＃０〜＃ｒ−１からなるｒ個のゾーン番号格納領域からなる。各ゾーン番号格納領域＃０〜＃ｒ−１はそれぞれテーブル＃０〜＃ｒ−１に対応しており、ここに格納されている値が対応するゾーン番号を示している。一例として、テーブル＃２に格納されているアドレス変換情報がゾーン＃５に関するアドレス変換情報である場合には、ゾーン番号格納領域＃２にはゾーン番号として「５」が格納される。したがって、管理テーブル３２を参照すれば、各テーブル＃０〜＃ｒ−１と各ゾーン＃０〜＃ｐ−１との関係を知ることが可能となる。
【００５２】
優先リンクは、アドレス変換テーブル３１を構成する各テーブル＃０〜＃ｒ−１の優先順位を示す要素であり、以下の構造を有している。
【００５３】
図８は、ＲＡＭ５内に作成される優先リンク３３のデータ構造を示す図である。図８に示すように、優先リンク３３は、ポインタ＃０〜＃ｒ−１からなるｒ個のポインタによって構成される。優先リンク３３によって、アドレス変換テーブル３１を構成するｒ個のテーブル＃０〜＃ｒ−１の優先順位を示す具体的な方法について説明する前に、これらｒ個のテーブル＃０〜＃ｒ−１に優先順位を設ける必要性について説明する。
【００５４】
上述のとおり、アドレス変換テーブル３１を構成するテーブルの数（ｒ個）は、フラッシュメモリ２のアドレス空間を構成するゾーンの数（ｐ個）よりも少なく、このため、アドレス変換テーブル３１に展開されるアドレス変換情報は、一部のゾーンに関わるアドレス変換情報に限られる。したがって、アドレス変換テーブル３１にアドレス変換情報が展開されていないゾーンに対して、ホストコンピュータからアクセスが要求された場合には、アドレス変換テーブル３１の内容を更新する必要がある。すなわち、ＣＰＵ４は、アドレス変換テーブル３１を構成するｒ個のテーブル＃０〜＃ｒ−１の中からいずれか１つのテーブルを選び、その内容を消去して、アクセスが要求されたゾーンに関わるアドレス変換情報を当該テーブル内に新たに格納する必要がある。したがって、テーブル＃０〜＃ｒ−１の中から、その内容が消去されるべきテーブルを選ぶためには、テーブル＃０〜＃ｒ−１に優先順位を設け、優先順位の低いテーブルから順にその内容を消去する必要がある。
【００５５】
かかる理由から、アドレス変換テーブル３１を構成するｒ個のテーブル＃０〜＃ｒ−１には優先順位が与えられ、かかる優先順位を記憶するために優先リンク３３が設けられるのである。優先リンク３３を用いたテーブル＃０〜＃ｒ−１の優先順位の記憶方法は次の通りである。
【００５６】
すなわち、優先リンク３３を構成するポインタ＃０〜＃ｒ−１には、リンク先ポインタ番号として値「０」〜「ｒ−１」及びデータ「ＮＵＬＬ」のいずれかが互いに重複しないように格納され、その結果、いずれのポインタにも格納されていない値（０〜ｒ−１）に対応するテーブルが最も優先順位の高いテーブルとなる。例えば、値「２」がいずれのポインタにも格納されていない場合には、テーブル＃２が最も優先順位の高いテーブルとなる。
【００５７】
次に、最も優先順位の高いテーブルと同じ番号を持つポインタに格納されている値（０〜ｒ−１）に対応するテーブルが２番目に優先順位の高いテーブルとなる。上記の例のように、テーブル＃２が最も優先順位の高いテーブルである場合、ポインタ＃２に格納されている値（例えば「０」）に対応するテーブルが２番目に優先順位の高いテーブルとなる。
【００５８】
同様に、２番目に優先順位の高いテーブルと同じ番号を持つポインタに格納されている値（０〜ｒ−１）に対応するテーブルが３番目に優先順位の高いテーブルとなり、以下、このようなリンク作業を次々と行うことによって、全てのテーブル＃０〜＃ｒ−１についての優先順位を特定することができる。最も優先順位の低いテーブルと同じ番号を持つポインタにはデータ「ＮＵＬＬ」が格納され、これにより、優先リンク３３を参照すれば現在最も優先順位の低いテーブルを直ちに特定することが可能となる。
【００５９】
書き込みキューは、消去済みの空きブロックの登録テーブルであり、以下の構造を有している。
【００６０】
図９は、ＲＡＭ５内に作成される書き込みキュー３４のデータ構造を示す図である。図９に示すように、書き込みキュー３４は、キュー＃０〜キュー＃ｒ−１からなるｒ個のキューによって構成され、各キューには、対応するゾーンに含まれる消去済みブロックの物理ブロックアドレスが格納されている。ここで、対応するゾーンとは、各キューのキュー番号と同じ番号を持つテーブルにアドレス変換情報が格納されているゾーンを指す。例えば、ゾーン＃７に関するアドレス変換情報がテーブル＃１に格納されているとすれば、キュー＃１に対応するゾーンはゾーン＃７であり、ゾーン＃７を構成するブロックのうち消去済みであるブロックの物理ブロックアドレスがキュー＃１に格納される。
【００６１】
尚、図９に示す書き込みキュー３４はｒ個のキューによって構成されているが、ｒの整数倍個のキューを用いることにより、対応するゾーンに含まれる消去済みブロックの物理ブロックアドレスを複数個格納可能に構成しても構わない。
【００６２】
以上が、本実施態様にかかるフラッシュメモリシステムの構成である。次に、本実施態様にかかるフラッシュメモリシステム１の動作について説明する。
【００６３】
図１０は、アドレス変換テーブル３１の新規作成方法を示すフローチャートである。アドレス変換テーブル３１の新規作成は、コントローラ３に対して電源投入またはリセット動作がなされたことに応答して、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することにより行われる動作であり、電源投入またはリセット動作に応答したコントローラ３の初期設定動作の一つを構成する。
【００６４】
まず、コントローラ３に対して電源投入またはリセット動作がなされると、ＣＰＵ４は、ＲＡＭ５のうちアドレス変換テーブル３１を構成するビットを全て「１」にリセットする（ステップＳ１）。次いで、ＣＰＵ４は、内部変数ａ及びｂの値を０にリセットし（ステップＳ２）、ブロック番号が
ａ×ｍ＋ｂ
に一致するブロックの先頭ページ（ページ＃０）に格納されている論理ブロックアドレスを読み出す（ステップＳ３）。上述の通り、「ｍ」とは総ブロック数ｎをゾーン数ｐで除した値（＝ｎ／ｐ）であり、一つのゾーンを構成するブロック数を表している。この場合、内部変数ａ＝ｂ＝０であるから、ブロック＃０のページ＃０に格納されている論理ブロックアドレスが読み出されることになる。
【００６５】
次に、ＣＰＵ４は、読み出された論理ブロックアドレスが「オール１」であるか否か、すなわちｍ−１であるかを判断し（ステップＳ４）、その結果、読み出された論理ブロックアドレスが「オール１（＝ｍ−１）」以外であれば（Ｓ４：ＮＯ）、テーブル番号が内部変数ａに一致するテーブルのうち、フラグ番号が論理ブロックアドレスに一致するフラグを「０」に書き替える（ステップＳ５）とともに、領域番号が論理ブロックアドレスに一致する物理ブロックアドレス格納領域に内部変数ｂを格納する（ステップＳ６）。一方、ステップＳ４において、読み出された論理ブロックアドレスが「オール１（＝ｍ−１）」であれば（Ｓ４：ＹＥＳ）、上記ステップＳ５及びステップＳ６は実行されない。
【００６６】
そして、ＣＰＵ４は、内部変数ｂをインクリメントした後（ステップＳ７）、内部変数ｂがｍに一致しているか否かを判断し（ステップＳ８）、その結果、内部変数ｂがｍではない場合（Ｓ８：ＮＯ）にはステップＳ３に戻って、内部変数ａ及びｂを用いた論理ブロックアドレスの読み出しを行う。一方、内部変数ｂがｍに一致している場合（Ｓ８：ＹＥＳ）には、内部変数ａをインクリメントした後（ステップＳ９）、内部変数ａがｒに一致しているか否かを判断し（ステップＳ１０）、その結果、内部変数ａがｒではない場合（Ｓ１０：ＮＯ）にはステップＳ３に戻って、内部変数ａ及びｂを用いた論理ブロックアドレスの読み出しを行う。一方、内部変数ａがｒに一致している場合（Ｓ１０：ＹＥＳ）には、一連の処理を完了する。上述の通り、「ｒ」とはアドレス変換テーブル３１を構成するテーブルの数を表している。
【００６７】
以上のようにして、内部変数ａがｒに一致するまでステップＳ３〜ステップＳ１０が繰り返し実行され、これによってアドレス変換テーブル３１が完成する。すなわち、内部変数ｂがｍに一致するまでステップＳ３〜Ｓ８からなるループを繰り返すことによって、一つのゾーンに関するアドレス変換情報が所定のテーブルに格納され、内部変数ａがｒに一致するまでステップＳ３〜Ｓ１０からなるループを繰り返すことによって、全てのテーブルにアドレス変換情報が格納されることになる。具体的には、図１０に示す動作を実行することにより、ゾーン＃０〜ゾーン＃ｒ−１に関するアドレス変換情報がそれぞれテーブル＃０〜＃ｒ−１に格納されたことになる。
【００６８】
尚、上記例では、アドレス変換テーブル３１にアドレス変換情報を格納する対象としてゾーン＃０〜ゾーン＃ｒ−１を選択しているが、本動作はコントローラ３に対する電源投入直後またはリセット直後に実行されるアドレス変換テーブル３１の新規作成動作であることから、ゾーン＃０〜ゾーン＃ｒ−１に限定されず、いずれのゾーンを対象としても構わない。
【００６９】
また、アドレス変換テーブル３１の新規作成動作が完了した後、或いは、アドレス変換テーブル３１の新規作成動作と並行して、初期設定動作における他の動作、つまり、管理テーブル３２の作成、優先リンク３３の作成及び書き込みキュー３４の作成が行われる。
【００７０】
すなわち、管理テーブル３２を構成するゾーン番号格納領域＃０〜＃ｒ−１にはそれぞれゾーン番号として＃０〜＃ｒ−１が格納され、これによりゾーン＃０〜ゾーン＃ｒ−１に関するアドレス変換情報がそれぞれテーブル＃０〜＃ｒ−１に格納されている旨が表示される。
【００７１】
また、優先リンク３３を構成するポインタ＃０〜＃ｒ−２にはそれぞれ「１」〜「ｒ−１」が格納され、ポインタ＃ｒ−１にはデータ「ＮＵＬＬ」が格納される。これにより、テーブル＃０〜＃ｒ−１の優先順位はこの順となる。但し、現時点ではまだ実際にアクセスがされておらず、優先順位を決める手がかりがないことから、ここで決定した優先順位はあくまで暫定的なものである。したがって、テーブル＃０〜＃ｒ−１の優先順位としてはこの順とすることは必須ではなく、これと異なる順序としても構わない。
【００７２】
そして、ゾーン＃０〜＃ｒ−１に含まれる消去済みブロックが一つずつ選ばれ、その物理ブロックアドレスが書き込みキュー３４を構成するキュー＃０〜＃ｒ−１に登録される。
【００７３】
以上により、電源投入またはリセット動作に応答したコントローラ３の初期設定動作が完了する。
【００７４】
次に、アドレス変換テーブル３１等が作成された後、すなわち初期設定が完了した後におけるフラッシュメモリ２へのアクセス方法について、データの読み出し動作及びデータの書き込み動作の順に説明する。また、データの書き込み動作については、データが全く割り当てられていない論理ブロックアドレスに対して新規にデータを割り当てる場合（データの新規書込動作）と、既にデータが割り当てられている論理ブロックアドレスに対して追加して或いは重ねてデータを割り当てる場合（データの上書き動作）に分けて説明する。
【００７５】
まず、データの読み出し動作について説明する。
【００７６】
図１１は、データの読み出し動作を示すフローチャートである。かかる動作も、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することによって行われる。
【００７７】
データの読み出し動作において、ホストコンピュータよりホストアドレスが供給されると、ＣＰＵ４はまず、ＲＥＡＤＹ／ＢＵＳＹ信号（図１参照）をＢＵＳＹ状態とするとともに、ホストアドレスに基づいてゾーンアドレス、論理ブロックアドレス及びページアドレスを作成する（ステップＳ１１）。具体的には、ホストアドレスの上位ビットをｍ’（１ゾーンに含まれる実使用ブロック数）で除算し、その商に基づいてゾーンアドレスを特定するとともに、剰余に基づいて論理ブロックアドレスを特定する。一例として、フラッシュメモリ２が８個（ｐ＝２３）のゾーンに分割されており、各ゾーンが１０２４個（ｍ＝２１０）のブロックからなり、さらに、一つのブロックが３２個（ｋ＝２５）のページからなる場合、少なくとも１８ビットのホストアドレスが用いられ、その上位１３ビットをｍ’（例えば１０００）で除することにより得られる商がゾーンアドレスとなり、剰余が論理ブロックアドレスとなる。また、ホストアドレスの下位５ビットがそのままページアドレスとなる。
【００７８】
次に、ＣＰＵ４は、ＲＡＭ５内に作成された管理テーブル３２を参照することによって、アクセスすべきゾーンに関するアドレス変換情報がアドレス変換テーブル３１内に格納されているか否かを判断する（ステップＳ１２）。ここで、アクセスすべきゾーンとは、ステップＳ１１において得られたゾーンアドレスによって特定され、ゾーンアドレスと同じ番号を持つゾーンが該当する。また、上記判断は、管理テーブル３２を構成するゾーン番号格納領域＃０〜＃ｒ−１のいずれかにゾーンアドレスと同じ値が格納されているか否かによって行われ、これが格納されている場合には、アクセスすべきゾーンに関するアドレス変換情報がアドレス変換テーブル３１内に格納されていると判断され、格納されていない場合には、アクセスすべきゾーンに関するアドレス変換情報がアドレス変換テーブル３１内に格納されていないと判断される。
【００７９】
その結果、アクセスすべきゾーンに関するアドレス変換情報がアドレス変換テーブル３１内に格納されていると判断された場合（Ｓ１２：ＹＥＳ）、さらにＣＰＵ４は、アクセスすべきゾーンに対応するテーブルが完全であるか不完全であるかを判断する（ステップＳ１３）。ここで、アクセスすべきゾーンに対応するテーブルとは、ゾーンアドレスと同じ値が格納されていたゾーン番号格納領域と同じ番号を持つテーブルを指す。例えば、ゾーンアドレスと同じ値がゾーン番号格納領域＃１に格納されていた場合には、完全であるか否かが判断されるテーブルはテーブル＃１となる。テーブルが完全であるか否かの具体的な判断方法としては特に限定されず、例えば、テーブルが完全であるか否かを示すフラグを設けこれを参照することによって行うことができる。
【００８０】
その結果、アクセスすべきゾーンに対応するテーブルが完全であると判断された場合（Ｓ１３：ＹＥＳ）、ＣＰＵ４はかかるテーブルを参照することにより論理ブロックアドレスを物理ブロックアドレスに変換する（ステップＳ１４）。具体的なアドレス変換の方法は次の通りである。すなわち、選択されたテーブルの中から、領域番号が論理ブロックアドレスに一致する物理ブロックアドレス格納領域にアクセスし、ここに格納されている物理ブロックアドレスを読み出すことにより変換を行う。尚、本例はデータの読み出し動作であり、当該ホストアドレスに対応するブロックには原則としてユーザデータが割り当てられているはずであるから、対応するフラグは「０（有効）」となっているはずである。但し、ホストコンピュータによっては、ユーザデータの割り当てられていないホストアドレスに対して読み出し要求を行う場合もある。
【００８１】
一方、ステップＳ１２において、アクセスすべきゾーンに関するアドレス変換情報がアドレス変換テーブル３１内に格納されていないと判断された場合には（Ｓ１２：ＮＯ）、テーブルの更新動作が実行される。テーブルの更新動作については後述する。
【００８２】
また、ステップＳ１３において、アクセスすべきゾーンに対応するテーブルが不完全であると判断された場合には（Ｓ１３：ＮＯ）、テーブルの完成動作が実行される。テーブルの完成動作についても後述する。
【００８３】
次にＣＰＵ４は、上記ゾーンアドレス、アドレス変換テーブル３１から読み出された物理ブロックアドレス及び上記ページアドレスに基づいてフラッシュメモリ２にアクセスし、対応するページに格納されているデータを読み出す（ステップＳ１５）。この場合、アクセスされるブロックはゾーンアドレス及び物理ブロックアドレスによって特定され、アクセスされるページはページアドレスによって特定される。
【００８４】
そして、読み出したデータをＦＩＦＯ７に一時的に格納し、ＲＥＡＤＹ／ＢＵＳＹ信号をＲＥＡＤＹ状態とする（ステップＳ１６）。ＲＥＡＤＹ状態とは、コントローラ３が待ち状態であり、ホストコンピュータからのアクセスを受け付け可能であることを意味し、ホストコンピュータはこれに応答してＦＩＦＯ７に格納されているユーザデータを読み出す。ホストコンピュータがＦＩＦＯ７に格納されているユーザデータを読み出す際には、そのデータ転送は一般に１バイトずつ実行される。したがって、１ページが５１２バイトのユーザデータからなる場合、ホストコンピュータは５１２回の読み出しを実行することによって一連のデータ転送を完了する。
【００８５】
この間、ＣＰＵ４は優先リンク３３の更新を行う（ステップＳ１７）。優先リンク３３の具体的な更新手順は次の通りである。まず、いま使用されたテーブル（アクセスされたゾーンに対応するテーブル）のテーブル番号と同じ値が格納されているポインタに、いま使用されたテーブルのテーブル番号と同じ番号を持つポインタに格納されている値を上書きする。次に、いま使用されたテーブルのテーブル番号と同じ番号を持つポインタに、現在最も優先順位の高いテーブルのテーブル番号をリンク先ポインタ番号として上書きする。これにより優先リンク３３の更新が完了し、いまアクセスされたゾーンに対応するテーブルの優先順位が最も高くなる。
【００８６】
具体例を用いて説明すると、アドレス変換テーブル３１を構成するテーブルの数（＝優先リンク３３を構成するポインタの数）であるｒが「４」であり、上記初期設定動作が完了した直後の状態（ポインタ＃０〜＃２にそれぞれ「１」〜「３」が格納され、ポインタ＃３にデータ「ＮＵＬＬ」が格納されている状態）においてテーブル＃２が使用された場合、いま使用されたテーブルのテーブル番号である「２」が格納されているポインタ＃１に、いま使用されたテーブルのテーブル番号である「２」と同じ番号を持つポインタ＃２に格納されている値「３」を上書きする。そして、いま使用されたテーブルのテーブル番号である「２」と同じ番号を持つポインタ＃２に、現在最も優先順位の高いテーブルのテーブル番号である「０」を上書きする。これによりポインタ＃０〜＃３の内容はそれぞれ「１」、「３」、「０」及び「ＮＵＬＬ」となるので、テーブル＃０〜＃３の優先順位はテーブル＃２、＃０、＃１、＃３の順となる。
【００８７】
さらにＣＰＵ４は、今アクセスされたゾーンの次のゾーンに関するアドレス変換情報がアドレス変換テーブル３１に格納されているか否かを判断する（ステップＳ１８）。ここで、今アクセスされたゾーンの次のゾーンとは、ホスト側から見て今アクセスされたゾーンの次に位置するゾーンをいい、今アクセスされたゾーンをゾーン＃ｑ（ｑは０〜ｐ−１のいずれか）とすれば、ゾーン＃ｑ＋１を指す。したがって、今アクセスされたゾーンが最終ゾーンであるゾーン＃ｐ−１である場合には、次のゾーンは存在しない。また、上記判断はステップＳ１２における判断と同様、管理テーブル３２を構成するゾーン番号格納領域＃０〜＃ｒ−１のいずれかに値「ｑ＋１」が格納されているか否かによって行われ、これが格納されている場合には、次のゾーンに関するアドレス変換情報がアドレス変換テーブル３１内に格納されていると判断され、格納されていない場合には、次のゾーンに関するアドレス変換情報がアドレス変換テーブル３１内に格納されていないと判断される。ここで、次のゾーンに関するアドレス変換情報がアドレス変換テーブル３１に格納されているか否かを判断する理由は、後述するように、あるゾーンに対するデータの読み出しが行われた場合、その後、続けて次のゾーンに対するデータの読み出しが要求される可能性が高いことから、次のゾーンに対するデータの読み出しが実際に要求される前に、アドレス変換テーブル３１を投機的に更新しておくためである。
【００８８】
その結果、次のゾーンに関するアドレス変換情報がアドレス変換テーブル３１に格納されていると判断された場合（Ｓ１８：ＹＥＳ）には、当該次のゾーンに対応するテーブルが完全であるか不完全であるかを判断する（ステップＳ１９）。その結果、次のゾーンに対応するテーブルが不完全であると判断された場合には（Ｓ１９：ＮＯ）、後述するテーブルの完成動作が実行される。ステップＳ１９において次のゾーンに対応するテーブルが完全であると判断された場合には（Ｓ１９：ＹＥＳ）、一連の処理を完了する。
【００８９】
一方、ステップＳ１８において、次のゾーンに関するアドレス変換情報がアドレス変換テーブル３１内に格納されていないと判断された場合には（Ｓ１８：ＮＯ）、テーブルの更新動作が実行される。
【００９０】
次に、テーブルの更新動作について説明する。
【００９１】
図１２は、テーブルの更新動作を示すフローチャートである。上述の通り、テーブルの更新動作は、図１１に示すステップＳ１２において、アクセスすべきゾーンに関するアドレス変換情報がアドレス変換テーブル３１内に格納されていないと判断された場合や、図１１に示すステップＳ１８において、今アクセスされたゾーンの次のゾーンに関するアドレス変換情報がアドレス変換テーブル３１に格納されていないと判断された場合に実行される。かかる動作も、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することによって行われる。
【００９２】
テーブルの更新動作においては、ＣＰＵ４はまず、ＲＡＭ５内に作成された優先リンク３３を参照することによって、優先順位の最も低いテーブルを特定する（ステップＳ２１）。ここで、優先順位の最も低いテーブルの特定は、優先リンク３３を構成するポインタ＃０〜＃ｒ−１のうち、データ「ＮＵＬＬ」が格納されているポインタを探すことにより行われ、データ「ＮＵＬＬ」が格納されているポインタのポインタ番号と同じ番号を持つテーブルが優先順位の最も低いテーブルであると判断される。以下、新たにアドレス変換情報が格納されるゾーンのゾーンアドレスを「ｃ」として説明を続ける。ここで、新たにアドレス変換情報が格納されるゾーンとは、図１１に示すステップＳ１２から分岐した場合（Ｓ１２：ＮＯ）においてはアクセスすべきゾーン（ステップＳ１１において得られたゾーンアドレスに対応するゾーン）を指し、図１１に示すステップＳ１８から分岐した場合（Ｓ１８：ＮＯ）においては今アクセスされたゾーンの次のゾーンを指す。
【００９３】
次に、ＣＰＵ４は管理テーブル３２の内容を更新し、ステップＳ２１において優先順位が最も低いと判断されたテーブルと新たにアドレス変換情報が格納されるゾーンとを関連づける（ステップＳ２２）。すなわち、対応するゾーン番号格納領域に「ｃ」を格納する。
【００９４】
次いで、ＣＰＵ４は、内部変数ｄの値を０にリセットし（ステップＳ２３）、ブロック番号が
ｃ×ｍ＋ｄ
に一致するブロックの先頭ページ（ページ＃０）に格納されている論理ブロックアドレスを読み出す（ステップＳ２４）。この場合、内部変数ｄ＝０であるから、新たにアドレス変換情報が格納されるゾーンの先頭ブロック＃（ｃ×ｍ）のページ＃０に格納されている論理ブロックアドレスが読み出されることになる。
【００９５】
次に、ＣＰＵ４は、読み出された論理ブロックアドレスが「オール１」であるか否か、すなわちｍ−１であるかを判断し（ステップＳ２５）、その結果、読み出された論理ブロックアドレスが「オール１（＝ｍ−１）」以外であれば（Ｓ２５：ＮＯ）、ステップＳ２１において優先順位が最も低いと判断されたテーブルのうち、フラグ番号が論理ブロックアドレスに一致するフラグを「０」に書き替える（ステップＳ２６）とともに、領域番号が論理ブロックアドレスに一致する物理ブロックアドレス格納領域に内部変数ｄを格納する（ステップＳ２７）。一方、ステップＳ２５において、読み出された論理ブロックアドレスが「オール１（＝ｍ−１）」であれば（Ｓ２５：ＹＥＳ）、ステップＳ２１において優先順位が最も低いと判断されたテーブルのうち、フラグ番号が論理ブロックアドレスに一致するフラグを「１」に書き替える（ステップＳ２８）。
【００９６】
そして、ＣＰＵ４は、内部変数ｄをインクリメントした後（ステップＳ２９
）、内部変数ｄがｍに一致しているか否かを判断し（ステップＳ３０）、その結果、内部変数ｄがｍではない場合（Ｓ３０：ＮＯ）にはステップＳ２４に戻って、内部変数ｄ等を用いた論理ブロックアドレスの読み出しを行う。一方、内部変数ｄがｍに一致している場合（Ｓ３０：ＹＥＳ）には、テーブルの更新動作を完了し、図１１に示すステップＳ１２から分岐した場合（Ｓ１２：ＮＯ）においてはステップＳ１４に復帰し、図１１に示すステップＳ１８から分岐した場合（Ｓ１８：ＮＯ）においては一連の処理を終了する。
【００９７】
以上のようにして、内部変数ｄがｍに一致するまでステップＳ２４〜ステップＳ３０からなるループを繰り返すことによって、優先順位が最も低いテーブルの内容が、アクセス対象となるゾーンに関するアドレス変換情報に更新される。
【００９８】
尚、上記例では、優先順位が最も低いテーブルに対応するゾーンがどのゾーンであるかに関わらず当該テーブルの内容を更新しているが、優先順位が最も低いテーブルに対応するゾーンが先頭ゾーンであるゾーン＃０である場合には、優先順位が次に低いテーブルを更新対象とすることが好ましい。これは、上述の通り、先頭ゾーンであるゾーン＃０にはアクセス頻度の高いファイルが格納されることが多く、このため、ゾーン＃０に関するアドレス変換情報を破棄するとパフォーマンスが低下するおそれがあるからである。
【００９９】
また、テーブルの更新動作が完了した後、或いは、テーブルの更新動作と並行して書き込みキュー３４の作成が行われる。すなわち、ゾーン＃ｃに含まれる消去済みブロックが一つ選ばれ、その物理ブロックアドレスが書き込みキュー３４を構成するキュー＃０〜＃ｒ−１のうち、更新されたテーブルに対応するキューに登録される。
【０１００】
さて、図１２に示すテーブルの更新動作は、図１１に示すステップＳ１２から分岐した場合（Ｓ１２：ＮＯ）においてはステップＳ３０において内部変数ｄがｍに一致していると判断されるまで実行されるが、図１１に示すステップＳ１８から分岐した場合（Ｓ１８：ＮＯ）においては、既にステップＳ１６でＲＥＡＤＹ／ＢＵＳＹ信号がＲＥＡＤＹ状態とされているので、ホストコンピュータからの次のアクセスを受ける可能性がある。さらに、ホストコンピュータより要求されたデータの読み出し（図１１）が連続する複数ページを対象としている場合、ＦＩＦＯ７に格納されたデータの転送が完了すると、コントローラ３は次のページに対するデータの読み出しを開始する必要がある。このような場合には、図１２に示すテーブルの更新動作を一旦中断し、コントローラ３は、ホストコンピュータから新たに要求された処理（例えば、次のデータ読み出し処理）や次のページに対するデータの読み出しを実行する。テーブルの更新動作を中断する場合には、ＲＡＭ５内に内部変数ｄを保存しておく必要がある。不完全なテーブルが発生するのは、主にこのような理由によるものである。
【０１０１】
そして、この中断がホストコンピュータから次のアクセスを受けたためである場合、要求された処理が同じゾーンに対する読み出し処理であれば、これを実行しＲＥＡＤＹ／ＢＵＳＹ信号を再びＲＥＡＤＹ状態とした後に、中断したテーブルの更新動作を再開すればよい。また、この中断がホストコンピュータから次のアクセスを受けたためであって、要求された処理が次のゾーン、すなわち対応するテーブルが不完全な状態となっているゾーンに対する読み出し処理であれば、図１１に示すステップＳ１３においてテーブルが不完全であると判断されて（Ｓ１３：ＮＯ）、後述するテーブルの完成動作が行われる。但し、ホストコンピュータから要求された処理が、同じゾーン及び次のゾーンのいずれでもないゾーンに対する読み出し処理であれば、かかる不完全なテーブルの内容は破棄される。
【０１０２】
また、この中断が次のページに対するデータの読み出しを行うためである場合には、次のページのデータが読み出されＦＩＦＯ７に格納されたことに応答して中断したテーブルの更新動作を再開すればよい。この様子をタイミング図を用いてより詳細に説明する。
【０１０３】
図１３は、ホストコンピュータより要求されたデータの読み出しが連続する複数ページを対象としている場合における、テーブルの更新動作の中断／再開のタイミングを示すタイミング図である。
【０１０４】
図１３に示すように、まずホストコンピュータよりアドレス及びコマンドが発行され、コントローラ３がこれを受信すると（アドレス受信、コマンド受信）、ＲＥＡＤＹ／ＢＵＳＹ信号がＲＥＡＤＹ状態からＢＵＳＹ状態に変化し、内部アドレスが生成される（アドレス生成）。ここで、ホストコンピュータより供給されるアドレスは、読み出し対象となる複数ページのうち先頭のページを特定するためのアドレスであり、ホストコンピュータより供給されるコマンドは、読み出し命令であることを示すとともに、読み出しを行うべきページ数（例えば、前記先頭ページから１００ページ等）を特定するためのコマンドである。また、アドレス生成とは、図１１に示すステップＳ１１〜Ｓ１４に対応する動作であり、上述の通り、必要なアドレス変換情報がアドレス変換テーブル３１内に格納されていない場合には（Ｓ１２：ＮＯ）、図１２に示すテーブルの更新動作が含まれることになる。また、参照すべきテーブルが不完全である場合には（Ｓ１３：ＮＯ）、後述するテーブルの完成動作が含まれることになる。
【０１０５】
内部アドレスが生成されると、これを用いて実際にフラッシュメモリ２への読み出しが実行され、読み出されたユーザデータがＦＩＦＯ７に格納される（Ｒｅａｄ）。かかる動作は、図１１に示すステップＳ１５及びＳ１６に対応する動作である。
【０１０６】
ユーザデータがＦＩＦＯ７に格納されると、ＲＥＡＤＹ／ＢＵＳＹ信号がＲＥＡＤＹ状態に変化し、ホストコンピュータはこれに応答してＦＩＦＯ７に格納されたデータの読み出しを行う。すなわち、フラッシュメモリ２からホストコンピュータへのデータ転送が行われる。この間、次のゾーンに関するアドレス変換情報をアドレス変換テーブル３１に格納するためのテーブルの更新動作が行われる（テーブル更新）。ホストコンピュータへのデータ転送速度やフラッシュメモリ２及びコントローラ３の動作速度にもよるが、一般的には、１ページ分のデータをホストコンピュータに転送する間にテーブルの更新動作を完了することは困難である。すなわち、テーブルの更新動作の途中でホストコンピュータへのデータ転送が完了するため、コントローラ３はテーブルの更新動作を中断して、次のページに対するデータの読み出し及びＦＩＦＯ７への格納を行う必要がある。
【０１０７】
このようにして、実際の読み出し動作（Ｒｅａｄ）とテーブルの更新動作（テーブル更新）とを交互に行うことにより、本来コントローラ３にとって空き時間となるデータ転送期間を活用して、次のゾーンに関するアドレス変換情報の一部又は全部をアドレス変換テーブル３１に投機的に格納しておくことが可能となる。
【０１０８】
ここで、次のゾーンに関するアドレス変換情報をアドレス変換テーブル３１に格納しておくのは、あるゾーンに対するデータの読み出しが行われた場合、その後、次のゾーンに対するデータの読み出しが要求される可能性が高いためであり、実際に次のゾーンに対するデータの読み出しが要求された場合におけるパフォーマンスを向上させるためである。すなわち、空き時間となるデータ転送期間を活用して次のゾーンに関するアドレス変換情報の一部又は全部をアドレス変換テーブル３１に格納しておけば、実際に次のゾーンに対するデータの読み出しが要求された場合に、図１１に示すステップＳ１２において必要なアドレス変換情報が格納されていると判断されることから（Ｓ１２：ＹＥＳ）、一連のデータ読み出し動作を高速に完了することが可能となる。
【０１０９】
但し、投機的なテーブルの更新動作が完全に終了する前に、次のゾーンに対するデータの読み出しが実際に要求された場合においては、当該ゾーンに関するアドレス変換情報の一部のみが所定のテーブルに格納された状態、すなわちテーブルが不完全な状態となっていることから（Ｓ１３：ＮＯ）、次に説明するテーブルの完成動作を行う必要がある。
【０１１０】
図１４は、テーブルの完成動作を示すフローチャートである。上述の通り、テーブルの完成動作は、図１１に示すステップＳ１３において、アクセスすべきゾーンに対応するテーブルが不完全であると判断された場合に実行される。かかる動作も、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することによって行われる。
【０１１１】
テーブルの完成動作においては、ＣＰＵ４はまず、ＲＡＭ５内に保存された内部変数ｄの値をロードし（ステップＳ３１）、ブロック番号が
ｃ×ｍ＋ｄ
に一致するブロックの先頭ページ（ページ＃０）に格納されている論理ブロックアドレスを読み出す（ステップＳ３２）。かかる動作は、図１２に示したステップＳ２４と同様である。
【０１１２】
次に、ＣＰＵ４は、読み出された論理ブロックアドレスが「オール１」であるか否か、すなわちｍ−１であるかを判断し（ステップＳ３３）、その結果、読み出された論理ブロックアドレスが「オール１（＝ｍ−１）」以外であれば（Ｓ３３：ＮＯ）、対象テーブルのうちフラグ番号が論理ブロックアドレスに一致するフラグを「０」に書き替える（ステップＳ３４）とともに、領域番号が論理ブロックアドレスに一致する物理ブロックアドレス格納領域に内部変数ｄを格納する（ステップＳ３５）。一方、ステップＳ３３において、読み出された論理ブロックアドレスが「オール１（＝ｍ−１）」であれば（Ｓ３３：ＹＥＳ）、対象テーブルのうち、フラグ番号が論理ブロックアドレスに一致するフラグを「１」に書き替える（ステップＳ３６）。上記ステップＳ３３〜Ｓ３６の動作は、図１２に示したステップＳ２５〜Ｓ２８と同様である。
【０１１３】
そして、ＣＰＵ４は、内部変数ｄをインクリメントした後（ステップＳ３７）、内部変数ｄがｍに一致しているか否かを判断し（ステップＳ３８）、その結果、内部変数ｄがｍではない場合（Ｓ３８：ＮＯ）にはステップＳ３２に戻って、内部変数ｄ等を用いた論理ブロックアドレスの読み出しを行う。一方、内部変数ｄがｍに一致している場合（Ｓ３８：ＹＥＳ）には、テーブルの完成動作を完了し、図１１に示すステップＳ１４に復帰する。上記ステップＳ３７及びＳ３８の動作は、図１２に示したステップＳ２９及びＳ３０と同様である。
【０１１４】
以上のようにして、内部変数ｄがｍに一致するまでステップＳ３２〜ステップＳ３８からなるループを繰り返すことによって、不完全であったテーブルが完成し、アドレス変換が可能な状態となる。
【０１１５】
また、テーブルの完成動作が完了した後、或いは、テーブルの完成動作と並行して、書き込みキュー３４の作成が行われる。すなわち、現在アクセスされているゾーンに含まれる消去済みブロックが一つ選ばれ、その物理ブロックアドレスが書き込みキュー３４を構成するキュー＃０〜＃ｒ−１のうち、対象テーブルに対応するキューに登録される。
【０１１６】
このように、投機的なテーブルの更新動作が完全に終了する前に、次のゾーンに対するデータの読み出しが実際に要求された場合においては、上述したテーブルの完成動作を行う必要があるが、かかるテーブルの完成動作は、内部変数ｄをロードしている分、図１２に示すテーブルの更新動作よりも高速に完了することができる。このため、上記のようなケースであっても、対応するアドレス変換情報がアドレス変換テーブル３１に全く格納されていない場合と比べて、一連のデータ読み出し動作を高速に行うことが可能となる。
【０１１７】
次に、データの書き込み動作について説明する。データの書き込み動作は、上述の通り、データの新規書込動作とデータの上書き動作に分けられることから、ホストコンピュータからデータの書き込み要求がなされた場合、まず、これがデータの新規書込であるのかデータの上書きであるのかの判断が行われる。
【０１１８】
図１５は、かかる判断動作を示すフローチャートである。かかる動作も、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することによって行われる。
【０１１９】
データの書き込み動作において、ホストコンピュータよりホストアドレスが供給されると、ＣＰＵ４はまず、ホストアドレスに基づいてゾーンアドレス、論理ブロックアドレス及びページアドレスを作成する（ステップＳ４１）。その生成方法は上述の通りである。次に、ＣＰＵ４は、ＲＡＭ５内に作成された管理テーブル３２を参照することによって、アクセスすべきゾーンに関するアドレス変換情報がアドレス変換テーブル３１内に格納されているか否かを判断する（ステップＳ４２）。その判断方法についても上述した通りである。
【０１２０】
その結果、アクセスすべきゾーンに関するアドレス変換情報がアドレス変換テーブル３１内に格納されていると判断された場合（Ｓ４２：ＹＥＳ）、ＣＰＵ４は、アクセスすべきゾーンに対応するテーブル内のフラグのうち、フラグ番号が論理ブロックアドレスに一致するフラグを読み出し（ステップＳ４３）、その内容を参照することによって、当該論理ブロックアドレスに対応するブロックが既に割り当てられているか否かを判断する（ステップＳ４４）。これは、本データの書き込み動作がデータの新規書込動作であるのか、或いはデータの上書き動作であるのかを判断することに等しい。
【０１２１】
その結果、読み出されたフラグが「１（無効）」であれば（Ｓ４４：ＮＯ）、当該論理ブロックアドレスに対応するブロックがまだ割り当てられていない、すなわち、本データの書き込み動作がデータの新規書込動作であると判断することができるので、図１６に示すデータの新規書込動作が実行され、逆に、読み出されたフラグが「０（有効）」であれば（Ｓ４４：ＹＥＳ）、当該論理ブロックアドレスに対応するブロックが既に割り当てられている、すなわち、本データの書き込み動作がデータの上書き動作であると判断することができるので、図１７に示すデータの上書き動作が実行される。
【０１２２】
一方、ステップＳ４２において、アクセスすべきゾーンに関するアドレス変換情報がアドレス変換テーブル３１内に格納されていないと判断された場合には（Ｓ４２：ＮＯ）、図１２に示したテーブルの更新動作が実行された後、上記ステップＳ４３及びＳ４４が実行される。
【０１２３】
まず、図１６を用いてデータの新規書込動作について説明する。かかる動作も、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することによって行われる。
【０１２４】
データの新規書込動作においては、ＣＰＵ４はまず、書き込みキュー３４にアクセスし、対応するキューに格納されている物理ブロックアドレスを読み出す（ステップＳ５１）。ここで、対応するキューとは、ステップＳ４３においてフラグの読み出しを行ったテーブルのテーブル番号と同じ番号を有するキューを指す。
【０１２５】
次に、ＣＰＵ４は、ゾーンアドレス、書き込みキュー３４から読み出された物理ブロックアドレス及び上記ページアドレスに基づいてフラッシュメモリ２にアクセスし、対応するページ及び当該ブロックの先頭ページ（ページ＃０）に必要なデータを格納する（ステップＳ５２）。ここで、対応するページに格納すべきデータには少なくともユーザデータが含まれ、先頭ページ（ページ＃０）に格納すべきデータには少なくとも論理ブロックアドレスが含まれる。このうちユーザデータは、対応するページのユーザ領域２１に格納され、論理ブロックアドレスは、当該ブロックの先頭ページ（ページ＃０）の論理ブロックアドレス格納領域２３に格納される。
【０１２６】
そして、ＣＰＵ４は、アドレス変換テーブル３１、優先リンク３３及び書き込みキュー３４の内容を更新する（ステップＳ５３、Ｓ５４、Ｓ５５）。具体的には、アドレス変換テーブル３１の更新については、対応するテーブルにおいてフラグ番号が論理ブロックアドレスに一致するフラグの値を「０（有効）」に書き替えるとともに、対応する物理ブロックアドレス格納領域に書き込みキュー３４から読み出された物理ブロックアドレスを格納する。また、優先リンク３３の更新については、ステップＳ１７における動作と同様である。さらに、書き込みキュー３４の更新については、アクセスしたゾーンに含まれる別の消去済みの空きブロックの物理ブロックアドレスを前記キューに上書きすることにより行う。
【０１２７】
以上によりデータの新規書込動作が完了する。
【０１２８】
尚、アドレス変換テーブル３１、優先リンク３３及び書き込みキュー３４の更新は、図１６に示す順に行う必要はなく、これとは異なる順で行っても構わない。
【０１２９】
次に、図１７を用いてデータの上書き動作について説明する。かかる動作も、ＣＰＵ４がＲＯＭ６に格納されているファームウェアを実行することによって行われる。
【０１３０】
データの上書き動作においては、ＣＰＵ４はまず、対応するテーブル内の物理ブロックアドレス格納領域のうち、領域番号が論理ブロックアドレスに一致する物理ブロックアドレス格納領域にアクセスし、ここに格納されている物理ブロックアドレスを読み出す（ステップＳ６１）。以下、ステップＳ６１において得られた物理ブロックアドレスを「転送元ブロックアドレス」と呼ぶ。
【０１３１】
次に、ＣＰＵ４は、書き込みキュー３４にアクセスし、対応するキューに格納されている物理ブロックアドレスを読み出す（ステップＳ６２）。以下、ステップＳ６２において得られた物理ブロックアドレスを「転送先ブロックアドレス」と呼ぶ。
【０１３２】
次に、ＣＰＵ４は、内部変数ｅの値を０にリセットし（ステップＳ６３）、内部変数ｅの値がページアドレスと一致しているか否かを判断する（ステップＳ６４）。その結果、内部変数ｅの値がページアドレスと一致していれば（Ｓ６４：ＹＥＳ）、ゾーンアドレス、転送先ブロックアドレス及びページアドレスに基づいてフラッシュメモリ２にアクセスし、対応するページに必要なデータを格納する（ステップＳ６５）。ここで、対応するページに格納されるデータには少なくともユーザデータが含まれ、かかるユーザデータは、対応するページのユーザ領域２１に格納される。一方、内部変数ｅの値がページアドレスと一致していなければ、「ブロック間転送」が行われる（ステップＳ６６）。ブロック間転送においては、ゾーンアドレス及び転送元ブロックアドレスにより特定されるブロック内の内部変数ｅにより特定されるページの内容が、ゾーンアドレス及び転送先ブロックアドレスにより特定されるブロック内の内部変数ｅにより特定されるページに転送される。尚、内部変数ｅが「０」である場合には、ステップＳ６５が実行されるかステップＳ６６が実行されるかに関わらず、ゾーンアドレス及び転送先ブロックアドレスにより特定されるブロックの先頭ページ（ページ＃０）の論理ブロックアドレス格納領域２３に論理ブロックアドレスが格納される。
【０１３３】
次に、ＣＰＵ４は、内部変数ｅをインクリメントした後（ステップＳ６７）、内部変数ｅがｋに一致しているか否かを判断し（ステップＳ６８）、その結果、内部変数ｅがｋではない場合にはステップＳ６４に戻って内部変数ｅとページアドレスとの比較を行い、内部変数ｅがｋに一致している場合には、後述するステップが実行される。上述の通り、「ｋ」とは１ブロックに含まれるページ数である。以上のようにして、内部変数ｅがｋに一致するまでステップＳ６４〜ステップＳ６８が繰り返し実行され、これによって、ホストコンピュータより与えられたユーザデータが転送先のブロックの所定のページに書き込まれるとともに、転送元のブロック内に格納されていた上書き対象外のデータが転送先のブロックの同じページに書き込まれることになる。
【０１３４】
ステップＳ６８において内部変数ｅがｋに一致した場合、ＣＰＵ４は、アドレス変換テーブル３１、優先リンク３３及び書き込みキュー３４の内容を更新する（ステップＳ６９〜Ｓ７１）。かかる動作は上述したステップＳ５３〜Ｓ５５と同様である。したがって、アドレス変換テーブル３１、優先リンク３３及び書き込みキュー３４の更新は、図１７に示す順に行う必要はなく、これと異なる順序で行っても構わない。
【０１３５】
そして、ＣＰＵ４は、ゾーンアドレス及び転送元ブロックアドレスにより特定されるブロックをブロック消去し（ステップＳ７２）、一連のデータの上書き動作が完了する。
【０１３６】
以上説明したように、本実施態様においては、一部のブロックに関するアドレス変換情報のみをアドレス変換テーブルに展開するとともに、あるゾーンに対してデータの読み出しが要求されたことに応答して次のゾーンに関するアドレス変換情報の作成を開始していることから、実際に次のゾーンに対するアクセスが要求された場合であっても、当該ゾーンに関するアドレス変換情報を初めから作成する必要がない。すなわち、従来のフラッシュメモリシステムにおいては、次のゾーンに関するアドレス変換情報がアドレス変換テーブル内に格納されていない場合には、このゾーンに対するアクセスが要求されると、このゾーンを構成する全てのブロックに対して読み出しを行うことによりアドレス変換情報を初めから作成する必要があるが、本実施態様においてはこれを初めから作成する必要がないので、ＢＵＳＹ状態となる期間を短縮することができる。このため、実使用時において要求されることの多い、連続するホストアドレスに対するデータの読み出しを高速に行うことが可能となるので、アドレス変換テーブルの容量を節約しつつ、パフォーマンスの低下を効果的に抑制することが可能となる。
【０１３７】
本発明は、以上の実施態様に限定されることなく、特許請求の範囲に記載された発明の範囲内で種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることはいうまでもない。
【０１３８】
例えば、上記実施態様では、アドレス変換テーブル３１内に次のゾーンに関するアドレス変換情報が格納されているか否かを、データの読み出し時において常に判断しているが（ステップＳ１８）、これを所定の条件下においてのみ行っても構わない。例えば、データの読み出し対象ブロックの対応論理ブロックアドレスが所定値以上である場合にのみかかる判断を行い、対応論理ブロックアドレスが所定値未満である場合にはこれを省略しても構わない。このような条件を設ければ、投機的なテーブル作成が必要以上に早期に行われることがないので、アドレス変換テーブル３１に現在格納されているテーブルの内容が不必要に破棄される可能性を低くすることができる。したがってこの場合には、しきい値となる上記対応論理ブロックアドレスの所定値をテーブル作成に必要な時間等を考慮して決定することが好ましい。
【０１３９】
また、本発明において、手段とは、必ずしも物理的手段を意味するものではなく、各手段の機能がソフトウエアによって実現される場合も包含する。さらに、一つの手段の機能が二以上の物理的手段により実現されても、二以上の手段の機能が一つの物理的手段により実現されてもよい。
【０１４０】
尚、本発明は、ＰＣＭＣＩＡ（Ｐｅｒｓｏｎａｌ　Ｃｏｍｐｕｔｅｒ　Ｍｅｍｏｒｙ　Ｃａｒｄ　Ｉｎｔｅｒｎａｔｉｏｎａｌ　Ａｓｓｏｃｉａｔｉｏｎ）が発表した統一規格に基づくＰＣカードとして実現することが可能である。さらに、近年、半導体素子の高集積化技術の発展に伴い、より小型化された小型メモリカード、例えば、ＣＦＡ（ＣｏｍｐａｃｔＦｌａｓｈ　Ａｓｓｏｃｉａｔｉｏｎ）が提唱する「ＣｏｍｐａｃｔＦｌａｓｈ」や、ＭｕｌｔｉＭｅｄｉａＣａｒｄＡｓｓｏｃｉａｔｉｏｎの提唱する「ＭＭＣ（ＭｕｌｔｉＭｅｄｉａＣａｒｄ）」、ソニー株式会社が提唱する「メモリースティック」、松下電器産業株式会社等が提唱する「ＳＤメモリーカード」などに本発明を適用することが可能である。
【０１４１】
【発明の効果】
以上説明したように、本発明によれば、アドレス変換テーブルの容量を節約しつつ、パフォーマンスの低下を効果的に抑制することが可能となる。しかも、本発明においては、コントローラが本来待ち状態となる期間にアドレス変換情報の投機的な作成作業を行っていることから、この作業によってフラッシュメモリシステムのパフォーマンスを低下させることがない。
【０１４２】
したがって、本発明は、コントローラが本来待ち状態となる期間が長い場合、例えば、ホストコンピュータの動作が遅い場合や、ＦＩＦＯの容量が小さい場合において特に効果的である。
【図面の簡単な説明】
【図１】本発明の好ましい実施態様にかかるフラッシュメモリシステム１の構成を概略的に示すブロック図である。
【図２】消去状態であるメモリセル１０を概略的に示す断面図である。
【図３】書込状態であるメモリセル１０を概略的に示す断面図である。
【図４】フラッシュメモリ２のアドレス空間の構造を概略的に示す図である。
【図５】冗長領域２２のデータ構造を概略的に示す図である。
【図６】アドレス変換テーブル３１のデータ構造を示す図である。
【図７】管理テーブル３２のデータ構造を示す図である。
【図８】優先リンク３３のデータ構造を示す図である。
【図９】書き込みキュー３４のデータ構造を示す図である。
【図１０】アドレス変換テーブル３１の新規作成方法を示すフローチャートである。
【図１１】データの読み出し動作を示すフローチャートである。
【図１２】テーブルの更新動作を示すフローチャートである。
【図１３】ホストコンピュータより要求されたデータの読み出しが連続する複数ページを対象としている場合における、テーブルの更新動作の中断／再開のタイミングを示すタイミング図である。
【図１４】テーブルの完成動作を示すフローチャートである。
【図１５】ホストコンピュータからデータの書き込み要求がデータの新規書込であるのかデータの上書きであるのかを判断するためのフローチャートである。
【図１６】データの新規書込動作を示すフローチャートである。
【図１７】データの上書き動作を示すフローチャートである。
【符号の説明】
１　フラッシュメモリシステム
２　フラッシュメモリ
３　コントローラ
４　ＣＰＵ
５　ＲＡＭ
６　ＲＯＭ
７　ＦＩＦＯ
１０　メモリセル
１１　Ｐ型半導体基板
１２　ソース拡散領域
１３　ドレイン拡散領域
１４　トンネル酸化膜
１５　フローティングゲート電極
１６　絶縁膜
１７　コントロールゲート電極
１８　チャネル
２１　ユーザ領域
２２　冗長領域
２３　論理ブロックアドレス格納領域
２４　その他の付加情報を格納するための領域
３１　アドレス変換テーブル
３２　管理テーブル
３３　優先リンク
３４　書き込みキュー
【図１】
2004070691.tif 000003
【図２】
2004070691.tif 000004
【図３】
2004070691.tif 000005
【図４】
2004070691.tif 000006
【図５】
2004070691.tif 000007
【図６】
2004070691.tif 000008
【図７】
2004070691.tif 000009
【図８】
2004070691.tif 000010
【図９】
2004070691.tif 000011
【図１０】
2004070691.tif 000012
【図１１】
2004070691.tif 000013
【図１２】
2004070691.tif 000014
【図１３】
2004070691.tif 000015
【図１４】
2004070691.tif 000016
【図１５】
2004070691.tif 000017
【図１６】
2004070691.tif 000018
【図１７】
2004070691.tif 000019