(57)【要約】【課題】  本発明は、ホストシステムの動作クロックに同期したアクセスが可能なメモリコントローラ、及び当該メモリコントローラを備えるフラッシュメモリシステムを提供することを目的とする。【解決手段】  本発明に係るメモリコントローラは、ホストシステムが前記フラッシュメモリに格納しようとするデータを、前記ホストシステムの動作の基準となる第１のクロックに同期して受け取り、該受け取ったデータを前記メモリコントローラの内部における動作の基準となる第２のクロックに同期して出力する第１のＦＩＦＯ（First In First Out）７１と、前記ホストシステムが前記フラッシュメモリから読み出そうとするデータを、前記第２のクロックに同期して受け取り、該受け取ったデータを前記第１のクロックに同期して出力する第２のＦＩＦＯ７２と、を備える。【選択図】図３
2007066118.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリを記憶媒体として利用するホストシステムからの命令に応答して前記フラッシュメモリへのアクセスを制御するメモリコントローラであって、
前記ホストシステムが前記フラッシュメモリに格納しようとするデータを、前記ホストシステムの動作の基準となる第１のクロックに同期して受け取り、該受け取ったデータを前記メモリコントローラの内部における動作の基準となる第２のクロックに同期して出力する第１のＦＩＦＯ（First In First Out）と、
前記ホストシステムが前記フラッシュメモリから読み出そうとするデータを、前記第２のクロックに同期して受け取り、該受け取ったデータを前記第１のクロックに同期して出力する第２のＦＩＦＯと、を備える、
ことを特徴とするメモリコントローラ。
【請求項２】
前記第１のクロックをカウントする第１のカウンタと、前記第２のクロックをカウントする第２のカウンタと、を更に備え、
前記第１のＦＩＦＯは、前記第１のカウンタのカウント値に基づいて特定される段にデータを書き込まれ、前記第２のカウンタのカウント値に基づいて特定される段からデータを読み出される、
ことを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記第１のクロックをカウントする第３のカウンタと、前記第２のクロックをカウントする第４のカウンタと、を更に備え、
前記第２のＦＩＦＯは、前記第３のカウンタのカウント値に基づいて特定される段からデータを読み出され、前記第４のカウンタのカウント値に基づいて特定される段にデータを書き込まれる、
ことを特徴とする請求項１に記載のメモリコントローラ。
【請求項４】
前記ホストシステムと前記メモリコントローラとは、ｎビットのバス幅を有する外部バスにより接続され、
前記第１のＦＩＦＯは、ｎ×ｍビットのレジスタを複数個備え、該レジスタは、ｎビットずつｍ回に分けてｎ×ｍビットのデータを書き込まれる、
ことを特徴とする請求項１に記載のメモリコントローラ。
【請求項５】
前記ホストシステムと前記メモリコントローラとは、ｎビットのバス幅を有する外部バスにより接続され、
前記第２のＦＩＦＯは、ｎ×ｍビットのレジスタを複数個備え、該レジスタは、ｎビットずつｍ回に分けてｎ×ｍビットのデータを読み出される、
ことを特徴とする請求項１に記載のメモリコントローラ。
【請求項６】
前記フラッシュメモリに格納するデータ又は前記フラッシュメモリから読み出したデータを保持するバッファを更に備え、
該バッファは、前記第２のクロックに同期して、前記第１のＦＩＦＯから出力されるデータを記憶して前記フラッシュメモリに与え、前記フラッシュメモリから出力されるデータを記憶して前記第１のＦＩＦＯに与える、
ことを特徴とする請求項１乃至５のいずれか１項に記載のメモリコントローラ。
【請求項７】
前記第１のＦＩＦＯ及び前記第２のＦＩＦＯの容量が、前記バッファの容量より小さいことを特徴とする請求項６に記載のメモリコントローラ。
【請求項８】
請求項１から７のいずれか１項に記載のメモリコントローラと、フラッシュメモリと、から構成される、
ことを特徴とするフラッシュメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラ及び当該メモリコントローラを備えるフラッシュメモリシステムに関する。
【背景技術】
【０００２】
近年、不揮発性の記録媒体であるフラッシュメモリの開発が盛んに行われ、デジタルカメラ等の情報機器（ホストシステム）の記憶媒体として普及している。
【０００３】
このような機器によるフラッシュメモリへのアクセスを制御するために、メモリコントローラが用いられる。フラッシュメモリへのデータの書き込み又はフラッシュメモリからのデータの読み出しを円滑化するために、データを一時的に格納するバッファ（例えばＦＩＦＯメモリ等）を備えるメモリコントローラが開発されている（例えば特許文献１を参照）。多くの場合、バッファは、複数セクタ（１セクタは５１２バイト）分のデータを格納できるような構成になっている。また、通常、バッファは、ホストシステムからデータが書き込まれる場合も、ホストシステムがデータを読み出す場合も、メモリコントローラの内部クロックに同期して動作する。
【０００４】
しかしながら、ホストシステムが、上記のようなバッファを備えたメモリコントローラを介してフラッシュメモリにアクセスするときに、ホストシステムの動作クロック（外部クロック）に同期して動作した場合、以下のような不都合が生じる。
【０００５】
例えば、外部クロックが内部クロックよりも高い周波数である場合、ホストシステムは、データの書き込みや読み出しを、自己の動作クロックより遅いクロックに同期して実行せねばならないため、実行に余分な時間がかかる。
逆に、外部クロックが内部クロックよりも低い周波数である場合、ホストシステムからフラッシュメモリにアクセスができない場合がある。
又、内部クロックと外部クロックの周波数が同じであっても位相が異なる場合はホストシステムからフラッシュメモリへのアクセスでエラーが発生する場合がある。
【特許文献１】特開２００４−３２６５７４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
このような不都合は、バッファをいわゆるデュアルポートメモリにより構成することで、回避可能である。
【０００７】
しかしながら、複数セクタ分のデータを格納できる容量を持つバッファを全てデュアルポートメモリにより構成する場合、回路規模の増大や消費電力の増加といった不都合が生じる。
【０００８】
本発明は上記の実情に鑑みてなされたもので、ホストシステム側からホストシステムの動作クロックに同期したアクセスが可能なメモリコントローラ、及び当該メモリコントローラを備えるフラッシュメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の第１の観点に係るメモリコントローラは、フラッシュメモリを記憶媒体として利用するホストシステムからの命令に応答して前記フラッシュメモリへのアクセスを制御するメモリコントローラであって、前記ホストシステムが前記フラッシュメモリに格納しようとするデータを、前記ホストシステムの動作の基準となる第１のクロックに同期して受け取り、該受け取ったデータを前記メモリコントローラの内部における動作の基準となる第２のクロックに同期して出力する第１のＦＩＦＯ（First In First Out）と、前記ホストシステムが前記フラッシュメモリから読み出そうとするデータを、前記第２のクロックに同期して受け取り、該受け取ったデータを前記第１のクロックに同期して出力する第２のＦＩＦＯと、を備える、ことを特徴とする。
【００１０】
前記第１のクロックをカウントする第１のカウンタと、前記第２のクロックをカウントする第２のカウンタと、を更に備え、前記第１のＦＩＦＯは、前記第１のカウンタのカウント値に基づいて特定される段にデータを書き込まれ、前記第２のカウンタのカウント値に基づいて特定される段からデータを読み出されてもよい。
【００１１】
前記第１のクロックをカウントする第３のカウンタと、前記第２のクロックをカウントする第４のカウンタと、を更に備え、前記第２のＦＩＦＯは、前記第３のカウンタのカウント値に基づいて特定される段からデータを読み出され、前記第４のカウンタのカウント値に基づいて特定される段にデータを書き込まれてもよい。
【００１２】
前記ホストシステムと前記メモリコントローラとは、ｎビットのバス幅を有する外部バスにより接続され、前記第１のＦＩＦＯは、ｎ×ｍビットのレジスタを複数個備え、該レジスタは、ｎビットずつｍ回に分けてｎ×ｍビットのデータを書き込まれてもよい。
【００１３】
前記ホストシステムと前記メモリコントローラとは、ｎビットのバス幅を有する外部バスにより接続され、前記第２のＦＩＦＯは、ｎ×ｍビットのレジスタを複数個備え、該レジスタは、ｎビットずつｍ回に分けてｎ×ｍビットのデータを読み出されてもよい。
【００１４】
前記フラッシュメモリに格納するデータ又は前記フラッシュメモリから読み出したデータを保持するバッファを配置し、該バッファは、前記第２のクロックに同期して、前記第１のＦＩＦＯから出力されるデータを記憶して前記フラッシュメモリに与え、前記フラッシュメモリから出力されるデータを記憶して前記第１のＦＩＦＯに与えるようにしてもよい。前記第１のＦＩＦＯ及び前記第２のＦＩＦＯの容量が、前記バッファの容量より小さいことが望ましい。
【００１５】
本発明の第２の観点に係るフラッシュメモリシステムは、上記のいずれかの特徴を有するメモリコントローラと、フラッシュメモリと、から構成される、ことを特徴とする。
【発明の効果】
【００１６】
本発明によれば、メモリコントローラは、ホストシステムの動作クロックに同期してデータを受け取り、該受け取ったデータをメモリコントローラの内部クロックに同期して出力する第１のＦＩＦＯ（First In First Out）と、内部クロックに同期してデータを受け取り、該受け取ったデータをホストシステムの動作クロックに同期して出力する第２のＦＩＦＯとを備えることにより、ホストシステム側からホストシステムの動作クロックに同期したアクセスが可能である。
【発明を実施するための最良の形態】
【００１７】
以下、図面に基づき、本発明の実施の形態について詳細に説明する。
【００１８】
図１は、本発明に係るフラッシュメモリシステム１を概略的に示すブロック図である。図１に示すように、フラッシュメモリシステム１は、フラッシュメモリ２と、それを制御するコントローラ３で構成されている。
【００１９】
なお、フラッシュメモリシステム１は、外部バス１３を介してホストシステム４と接続される。本実施の形態における外部バス１３は１６ビットのバス幅を有する。ホストシステム４は、ホストシステム４の全体の動作を制御するためのＣＰＵ（Central Processing Unit）、フラッシュメモリシステム１との情報の授受を担うコンパニオンチップ等から構成される。ホストシステム４は、例えば、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
【００２０】
なお、ホストシステム４は、動作クロックとして、コントローラ３の内部で生成される内部クロックＵＣＬＫと異なる周波数の外部クロックＢＣＬＫに基づいて動作するものとする。
【００２１】
フラッシュメモリ２は、不揮発性メモリであり、レジスタと、メモリセルアレイと、から構成される。フラッシュメモリ２は、レジスタとメモリセルとの間でデータの複写を行って、データの書き込み又は読み出しを行う。
【００２２】
メモリセルアレイは、複数のメモリセル群と、ワード線と、を備える。各メモリセル群は、複数のメモリセルが直列に接続されたものである。ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、データの複写、即ち、レジスタから選択されたメモリセルへの複写又は選択されたメモリセルからレジスタへのデータの複写が行われる。
【００２３】
メモリセルアレイを構成するメモリセルは、２つのゲートを備えたＭＯＳトランジスタによって構成される。ここで、上側のゲート、下側のゲートは、それぞれ、コントロールゲート、フローティングゲートと呼ばれており、フローティングゲートに電荷（電子）を注入若しくはフローティングゲートから電荷（電子）を排出することによって、データの書き込み若しくはデータの消去が行われる。
【００２４】
このフローティングゲートは、周囲を絶縁体で囲まれているので、注入された電子は長期間にわたって保持される。なお、フローティングゲートに電子を注入するときは、コントロールゲートが高電位側となる高電圧を印加して電子が注入される。また、フローティングゲートから電子を排出するときは、コントロールゲートが低電位側となる高電圧を印加して電子が排出される。
【００２５】
ここで、フローティングゲートに電子が注入されている状態が書き込み状態であり、論理値「０」に対応する。また、フローティングゲートから電子が排出されている状態が消去状態であり、論理値「１」に対応する。
【００２６】
このようなフラッシュメモリ２のアドレス空間を図２に示す。フラッシュメモリ２のアドレス空間は、“ページ”と“ブロック”に基づいて分割されている。
【００２７】
ページは、フラッシュメモリ２にて行われるデータ読み出し動作及びデータ書き込み動作における処理単位である。ブロックは、フラッシュメモリ２にて行われるデータ消去動作における処理単位である。
【００２８】
図２に示したフラッシュメモリでは、１つのページは、１セクタ（５１２バイト）のユーザ領域２５と、１６バイトの冗長領域２６とを含んでいる。又、一つのページが４セクタのユーザー領域と６４バイトの冗長領域で構成されているフラッシュメモリもある。ユーザ領域２５は、ホストシステム４から供給されるユーザデータを格納する。
【００２９】
冗長領域２６は、エラーコレクションコード、対応論理ブロックアドレス、ブロックステータス（フラグ）等の付加データを記録するための領域である。
【００３０】
エラーコレクションコードは、ユーザ領域２５に記憶されているデータに含まれる誤りを検出し、訂正するためのデータである。
【００３１】
対応論理ブロックアドレスは、１つのブロックに含まれている少なくとも１つのユーザ領域２５に有効なデータが格納されているとき、そのブロックが対応付けられている論理ブロックのアドレスを示す。
【００３２】
論理ブロックアドレスは、ホストシステム４から与えられるホストアドレスに基づいて決定されるブロックのアドレスである。一方、フラッシュメモリ２内における実際のブロックのアドレスは、物理ブロックアドレスと称される。
【００３３】
１つのブロックに含まれているいずれのユーザ領域２５にも有効なデータが格納されていないときには、そのブロックに含まれている冗長領域２６に、対応論理ブロックアドレスは格納されていない。
【００３４】
従って、冗長領域２６に対応論理ブロックアドレスが格納されているか否かを判定することにより、その冗長領域２６が含まれているブロックのデータが消去されているか否かを判定することができる。冗長領域２６に対応論理ブロックアドレスが格納されていないとき、そのブロックは、データが消去された状態となっている。
【００３５】
１つのブロックは、複数のページを含んでいる。フラッシュメモリ２では、データの上書きができない。このため、１つのページに格納されたデータのみを書き換えるときであっても、そのページが含まれたブロック内の全ページに格納されたデータを、再度書き込まなければならない。
【００３６】
つまり、通常のデータ書き換えでは、書き換えるページが含まれるブロックの全ページに格納されたデータが、別の消去されているブロックに書き込まれる。この際、データが変更されないページに格納されているデータは、以前に格納されていたデータがそのまま再度書き込まれる。
【００３７】
上記のようにデータを書き換えるにあたっては、書き換えられたデータは、以前に格納されていたブロックとは異なるブロックに書き込まれる。このため、論理ブロックアドレスと物理ブロックアドレスの間の対応関係は、フラッシュメモリ２にてデータが書き換えられる毎に、動的に変化する。
【００３８】
従って、論理ブロックアドレスと物理ブロックアドレスとの対応関係を管理する必要があり、通常、この対応関係は、アドレス変換テーブルによって管理される。このアドレス変換テーブルは、各ページの冗長領域２６に記憶されている対応論理ブロックアドレスに基づいて作成される。なお、このような動的なアドレス管理手法は、フラッシュメモリを用いたメモリシステムでは一般的に行われている手法である。
【００３９】
ブロックステータスは、ブロックの良否を示すフラグである。正常にデータの書き込み等を行うことができないブロックは、不良ブロックと判別され、冗長領域２６には、不良ブロックであることを示すブロックステータスが書き込まれる。
【００４０】
このようなフラッシュメモリ２は、コントローラ３から、データ、アドレス情報、ステータス情報、内部コマンド等を受信して、データの読み出し処理、書き込み処理、ブロック消去処理、転送処理等の各処理を行う。
【００４１】
ここで、内部コマンドとは、コントローラ３がフラッシュメモリ２に処理の実行を指示するためのコマンドであり、フラッシュメモリ２は、コントローラ３から与えられる内部コマンドに従って動作する。これに対して、外部コマンドとは、ホストシステム４がフラッシュメモリシステム１に対して処理の実行を指示するためのコマンドである。
【００４２】
コントローラ３は、図１に示すように、マイクロプロセッサ６と、ホストインターフェースブロック７と、ワークエリア８と、バッファ９と、フラッシュメモリインターフェースブロック１０と、ＥＣＣ（エラー・コレクション・コード）ブロック１１と、ＲＯＭ（Read Only Memory）１２と、内部クロック源１５と、から構成される。これら機能ブロックによって構成されるコントローラ３は、一つの半導体チップ上に集積される。以下に各機能ブロックについて説明する。
【００４３】
マイクロプロセッサ６は、ＲＯＭ１２に記憶されているプログラムに従って、コントローラ３の全体の動作を制御する。例えば、マイクロプロセッサ６は、各種処理等を定義したコマンドセットをワークエリア８から読み出してフラッシュメモリインターフェースブロック１０に供給し、フラッシュメモリインターフェースブロック１０に処理を実行させる。
【００４４】
内部クロック源１５は、水晶発振器等により構成されるクロック源で、コントローラ３の各構成要素の動作の基準となる所定の周波数の内部クロックＵＣＬＫを、各構成要素に供給する。
【００４５】
ホストインターフェースブロック７は、ホストシステム４との間の、データ、アドレス情報、ステータス情報、外部コマンド、外部クロックＢＣＬＫ等の授受を行なう。すなわち、フラッシュメモリシステム１とホストシステム４は、１６ビットのバス幅の外部バス１３を介して相互に接続される。かかる状態において、ホストシステム４よりフラッシュメモリシステム１に供給されるデータ等は、ホストインターフェースブロック７を入口としてコントローラ３の内部（例えば、バッファ９）に取り込まれる。また、フラッシュメモリシステム１からホストシステム４に供給されるデータ等は、コントローラ３の内部（例えば、バッファ９等）に一時的に格納され、ホストインターフェースブロック７を出口としてホストシステム４に供給される。なお、ホストインターフェースブロック７とバッファ９との間のデータの授受は、６４ビットのバス幅を有するデータバスを介して行われる。
【００４６】
より詳細には、図３に示すように、ホストインターフェースブロック７は、ホストシステム４より供給されるホストアドレス及び外部コマンドを一時的に格納するコマンドレジスタＲ１、書き込み又は読み出しを行うデータのサイズを格納するセクタ数レジスタＲ２、書き込み又は読み出しを行うデータの論理アドレスを格納するＬＢＡ（Logical Block Addressing）レジスタＲ３、等を有する。また、ホストインターフェースブロック７は、図３に示すように、書き込まれるデータを一時的に格納する書込ＦＩＦＯ７１と、読み出されるデータを一時的に格納する読出ＦＩＦＯ７２と、を有する。
【００４７】
書込ＦＩＦＯ７１は、図４に示すように、レジスタ部７１０と、外部クロックカウンタ７１１と、内部クロックカウンタ７１２と、デマルチプレクサ７１３と、検出回路７１４と、から構成される。
【００４８】
レジスタ部７１０は、６４ビットのレジスタを８個備える（レジスタ０乃至レジスタ７）。つまりレジスタ部７１０は、１／８セクタ分のデータ（６４バイトのデータ）を格納することが出来る。レジスタ部７１０に格納されるデータは、外部クロックカウンタ７１１のカウント値により定義されるレジスタ及びビットに書き込まれる。この際、各レジスタに格納されるデータは、外部バス１３を介して供給され、１６ビットずつ、４回に分けて書き込まれる。また、レジスタ部７１０は、内部クロックカウンタ７１２のカウント値により定義されるレジスタから、データバスを介してバッファ９に６４ビットずつデータを供給する。
【００４９】
外部クロックカウンタ７１１は、３２進（すなわち５ビット）のバイナリカウンタにより構成される。外部クロックカウンタ７１１のカウント値は、書き込みを行うレジスタ及び書き込みを行うビット（ビット０〜１５、ビット１６〜３１、ビット３２〜４７、ビット４８〜６３、のいずれか）を定義する。より詳細には、カウント値における上位３ビットは、書き込みを行うレジスタを定義し、下位２ビットは、書き込みを行うビットを定義する。
【００５０】
内部クロックカウンタ７１２は、８進（すなわち３ビット）のバイナリカウンタにより構成される。内部クロックカウンタ７１２のカウント値は、読み出しを行うレジスタを定義する。
【００５１】
デマルチプレクサ７１３は、外部バス１３を介してホストシステム４から供給されるデータを、外部クロックカウンタ７１１のカウント値の下位２ビットに応じて、レジスタのいずれかのビット（ビット０〜１５、ビット１６〜３１、ビット３２〜４７、ビット４８〜６３、のいずれか）に供給する。
【００５２】
検出回路７１４は、外部クロックカウンタ７１１のカウント値の上位３ビットと、内部クロックカウンタ７１２のカウント値とを監視し、一方が他方に追いついたことを検出する。
検出回路７１４は、外部クロックカウンタ７１１のカウント値の上位３ビットが内部クロックカウンタ７１２のカウント値に追いついた場合には、外部クロックカウンタ７１１の動作を停止させるとともに、ビジー信号をホストシステム４に供給する。
【００５３】
逆に、内部クロックカウンタ７１２のカウント値が外部クロックカウンタ７１１のカウント値の上位３ビットに追いついた場合には、検出回路７１４は、内部クロックカウンタ７１２の動作を停止させるとともに、ビジー信号をバッファ９に供給する。
【００５４】
尚、ホストシステム４からレジスタ部７２０にデータを書き込む処理と、レジスタ部７２０からバッファへデータを読み出す処理の進行速度を合わせるために、内部クロックを調整（ＵＣＬＫ≒ＢＣＬＫ／４）するようにしてもよい。
【００５５】
読出ＦＩＦＯ７２は、図５に示すように、レジスタ部７２０と、外部クロックカウンタ７２１と、内部クロックカウンタ７２２と、マルチプレクサ７２３と、検出回路７２４と、から構成される。
【００５６】
レジスタ部７２０は、６４ビットのレジスタを８個備える（レジスタ０乃至レジスタ７）。レジスタ部７２０は、内部クロックカウンタ７２２のカウント値により定義されるレジスタに、データバスを介してバッファ９から供給されるデータが、６４ビットずつ書き込まれる。また、レジスタ部７２０に格納されたデータは、外部クロックカウンタ７２１のカウント値により定義されるレジスタ及びビットから、ホストシステム４により外部バス１３を介して、１６ビットずつ、４回に分けて読み出される。
【００５７】
外部クロックカウンタ７２１は、３２進（すなわち５ビット）のバイナリカウンタにより構成される。外部クロックカウンタ７２１のカウント値は、読み出しを行うレジスタ及び読み出しを行うビット（ビット０〜１５、ビット１６〜３１、ビット３２〜４７、ビット４８〜６３、のいずれか）を定義する。より詳細には、カウント値における上位３ビットは、読み出しを行うレジスタを定義し、下位２ビットは、読み出しを行うビットを定義する。
【００５８】
内部クロックカウンタ７２２は、８進（すなわち３ビット）のバイナリカウンタにより構成される。内部クロックカウンタ７１２のカウント値は、書き込みを行うレジスタを定義する。
【００５９】
マルチプレクサ７２３は、外部クロックカウンタ７２１のカウント値の下位２ビットに応じて、レジスタのいずれかのビット（ビット０〜１５、ビット１６〜３１、ビット３２〜４７、ビット４８〜６３、のいずれか）のデータを、外部バス１３を介してホストシステム４に供給する。
【００６０】
検出回路７２４は、外部クロックカウンタ７２１のカウント値の上位３ビットと、内部クロックカウンタ７２２のカウント値とを監視し、一方が他方に追いついたことを検出する。
【００６１】
検出回路７２４は、外部クロックカウンタ７２１のカウント値の上位３ビットが内部クロックカウンタ７２２のカウント値に追いついた場合には、外部クロックカウンタ７２１の動作を停止させるとともに、ビジー信号をホストシステム４に供給する。
【００６２】
逆に、内部クロックカウンタ７１２のカウント値が外部クロックカウンタ７２１のカウント値の上位３ビットに追いついた場合には、検出回路７２４は、内部クロックカウンタ７２２の動作を停止させるとともに、ビジー信号をバッファ９に供給する。
【００６３】
ワークエリア８は、フラッシュメモリ２の制御に必要なデータが一時的に格納される作業領域であり、複数のＳＲＡＭ（Static Random Access Memory）セルによって構成される。
【００６４】
バッファ９は、フラッシュメモリ２から読み出されたデータ及びフラッシュメモリ２に書き込むべきデータを一時的に蓄積する。すなわち、フラッシュメモリ２から読み出されたデータは、ホストシステム４が受け取り可能な状態となるまでバッファ９に保持され、フラッシュメモリ２に書き込むべきデータは、フラッシュメモリ２が書き込み可能な状態となるまでバッファ９に保持される。
【００６５】
フラッシュメモリインターフェースブロック１０は、内部バス１４を介して、フラッシュメモリ２とデータ、アドレス情報、ステータス情報、内部コマンド等の授受を行う。より詳細には、フラッシュメモリインターフェースブロック１０は、アドレスレジスタ、コマンドレジスタ、命令処理ブロック等から構成される。
【００６６】
アドレスレジスタは、アクセス先の物理ブロックアドレスを格納するためのレジスタである。物理ブロックアドレスは、フラッシュメモリインターフェースブロック１０が実行する一連の制御処理でアクセスするフラッシュメモリ２内のブロックを指定するためのアドレス情報である。
【００６７】
コマンドレジスタは、コマンドセットを構成するシーケンスコマンドを格納するためのレジスタである。このコマンドセットには、コントローラ３内での処理を指示するコマンドや、フラッシュメモリ２への内部コマンド、アドレス情報等の供給を指示するコマンドが含まれている。
【００６８】
命令処理ブロックは、コマンドレジスタに格納されているシーケンスコマンドに従って、フラッシュメモリ２を制御するための内部コマンド、アドレス情報等を出力する。
【００６９】
フラッシュメモリインターフェースブロック１０は、命令処理ブロックによって出力される内部コマンド、アドレス情報等をフラッシュメモリ２に供給することにより、フラッシュメモリ２に読み出し、書き込み等を実行させる。
【００７０】
ＥＣＣブロック１１は、フラッシュメモリ２に書き込むデータに付加されるエラーコレクションコードを生成するとともに、読み出しデータに付加されたエラーコレクションコードに基づいて、読み出したデータに含まれる誤りを検出・訂正する。
【００７１】
ＲＯＭ１２は、マイクロプロセッサ６による処理の手順を定義するプログラムを格納する不揮発性の記憶素子である。具体的には、ＲＯＭ１２は、例えば、アドレス変換テーブルの作成等の処理手順を定義するプログラムを格納する。
【００７２】
次に、このように構成されるフラッシュメモリシステム１において、ホストシステム４がフラッシュメモリ２にデータを書き込む際の書込ＦＩＦＯ７１の動作について、図６に示すタイミングチャートを参照して説明する。
【００７３】
書き込み処理では、ホストシステム４は、ホストインターフェースブロック７のセクタ数レジスタＲ２に、書き込むデータのサイズを設定し、ＬＢＡレジスタＲ３に、書き込みを行うデータの論理アドレスを設定し、その後、コマンドレジスタＲ１に、書き込み処理を指示する外部コマンドを設定する。
【００７４】
コントローラ３は、書き込み処理を指示する外部コマンドが、コマンドレジスタＲ１に設定されると、書き込み処理を開始する。
【００７５】
書き込み処理が開始されると、書込ＦＩＦＯ７１の外部クロックカウンタ７１１がリセットされ、カウント値が０となる。そして、外部クロックＢＣＬＫに同期して、書き込むデータが順次書込ＦＩＦＯ７１に供給される。
【００７６】
時刻Ｔ０では、外部クロックカウンタ７１１のカウント値が０となり、データは、レジスタ０のビット４８〜６３に書き込まれる。
時刻Ｔ１では、外部クロックカウンタ７１１のカウント値が１となり、データは、レジスタ０のビット３２〜４７に書き込まれる。
時刻Ｔ２では、外部クロックカウンタ７１１のカウント値が２となり、データは、レジスタ０のビット１６〜３１に書き込まれる。
時刻Ｔ３では、外部クロックカウンタ７１１のカウント値が３となり、データは、レジスタ０のビット０〜１５に書き込まれる。
時刻Ｔ４では、外部クロックカウンタ７１１のカウント値が４となり、データは、レジスタ１のビット４８〜６３に書き込まれる。
その後も同様にして、順次、データがレジスタ部７１０に書き込まれる。
【００７７】
外部クロックカウンタ７１１がリセットされてから所定の時間が経過した時刻Ｔ５において、バッファ９に対するビジー信号の供給が停止される。これに合わせて内部クロックカウンタ７１２もリセットされ、カウント値が０となり、以後、内部クロックＵＣＬＫに同期して、データが順次読み出され、バッファ９に供給される。
【００７８】
時刻Ｔ５では、内部クロックカウンタ７１２のカウント値が０となり、レジスタ０のデータがバッファ９に供給される。
時刻Ｔ６では、内部クロックカウンタ７１２のカウント値が１となり、レジスタ１のデータがバッファ９に供給される。
その後も同様にして、順次、データがバッファ９に供給される。
【００７９】
書き込み先のレジスタが、読み出し元のレジスタに追いついた場合（すなわち、外部クロックカウンタ７１１の上位３ビットが内部クロックカウンタ７１２のカウント値に追いついた場合）には、検出回路７１４は、外部クロックカウンタ７１１の動作を停止させるとともに、ホストシステム４にビジー信号を供給し、データの供給を一時停止させる。
【００８０】
なお、逆に、読み出し元のレジスタが、書き込み先のレジスタに追いついた場合には、検出回路７１４は、内部クロックカウンタ７１２の動作を停止させるとともに、バッファ９にビジー信号を供給し、データの読み出しを一時停止させる。
【００８１】
そして、書き込み先のレジスタが、読み出し元のレジスタに追いついてから、所定の時間が経過すると、検出回路７１４は、外部クロックカウンタ７１１の動作を再開させるとともに、ホストシステム４へのビジー信号の供給を停止する。これにより、レジスタへのデータ書き込みが再開される。
【００８２】
書込ＦＩＦＯ７１からバッファ９に読み出されたデータは、フラッシュメモリ２が書き込み可能な状態になるまでバッファ９に保持される。そして、該データは、フラッシュメモリ２が書き込み可能な状態になると、フラッシュメモリインターフェースブロック１０及び内部バスを介してフラッシュメモリ２の所望のページに書き込まれる。
【００８３】
次に、フラッシュメモリシステム１において、ホストシステム４がフラッシュメモリ２からデータを読み出す際の読出ＦＩＦＯ７２の動作について、図７に示すタイミングチャートを参照して説明する。
【００８４】
ホストシステム４は、ホストインターフェースブロック７のセクタ数レジスタＲ２に、読み出すデータのサイズを設定し、ＬＢＡレジスタＲ３に、読み出すデータの論理アドレスを設定し、その後、コマンドレジスタＲ１に、読み出し処理を指示する外部コマンドを設定する。
【００８５】
コントローラ３は、読み出し処理を指示する外部コマンドが、コマンドレジスタＲ１に設定されると、読み出し処理を開始する。
【００８６】
読み出し処理では、マイクロプロセッサ６は、論理アドレスを物理アドレスへと変換する。そして、フラッシュメモリ２の該物理アドレスに格納されたデータは、フラッシュメモリインターフェースブロック１０及び内部バスを介してバッファ９に読み出される。バッファ９に読み出されたデータは、以下で説明する読出ＦＩＦＯ７２の動作により、バッファ９からホストシステム４に供給される。
【００８７】
はじめに、読出ＦＩＦＯ７２の内部クロックカウンタ７２２がリセットされ、カウント値が０となる。そして、内部クロックＵＣＬＫに同期して、読み出すデータが読出読出ＦＩＦＯ７２に供給される。
【００８８】
時刻Ｔ１０では、内部クロックカウンタ７２２のカウント値が０となり、バッファ９からのデータはレジスタ０に書き込まれる。
時刻Ｔ１１では、内部クロックカウンタ７２２のカウント値が１となり、バッファ９からのデータはレジスタ１に書き込まれる。
その後も同様にして、順次、バッファ９からのデータがレジスタに書き込まれる。
【００８９】
内部クロックカウンタ７２２がリセットされてから所定の時間が経過した時刻Ｔ１２において、ホストシステムに対するビジー信号の供給を停止する。これに合わせて外部クロックカウンタ７２１もリセットされ、カウント値が０となり、以後、内部クロックＵＣＬＫに同期して、データが順次読み出され、ホストシステム４に供給される。
【００９０】
時刻Ｔ１２では、外部クロックカウンタ７２１のカウント値が０となり、レジスタ０のビット４８〜６３のデータがホストシステム４に供給される。
時刻Ｔ１３では、外部クロックカウンタ７２１のカウント値が１となり、レジスタ０のビット３２〜４７のデータがホストシステム４に供給される。
時刻Ｔ１４では、外部クロックカウンタ７２１のカウント値が２となり、レジスタ０のビット１６〜３１のデータがホストシステム４に供給される。
時刻Ｔ１５では、外部クロックカウンタ７２１のカウント値が３となり、レジスタ０のビット０〜１５のデータがホストシステム４に供給される。
時刻Ｔ１６では、外部クロックカウンタ７２１のカウント値が４となり、レジスタ１のビット４８〜６３のデータがホストシステム４に供給される。
その後も同様にして、順次、データがホストシステム４に供給される。
【００９１】
読み出し元のレジスタが、書き込み先のレジスタに追いついた場合（すなわち、外部クロックカウンタ７２１の上位３ビットが内部クロックカウンタ７２２のカウント値に追いついた場合）には、検出回路７２４は、外部クロックカウンタ７２１の動作を停止させるとともに、ホストシステム４にビジー信号を供給し、データの読み出しを一時停止させる。
【００９２】
なお、逆に、書き込み先のレジスタが、読み出し元のレジスタに追いついた場合には、検出回路７２４は、内部クロックカウンタ７２２の動作を停止させるとともに、バッファ９にビジー信号を供給し、データの供給を一時停止させる。
【００９３】
そして、読み出し元のレジスタが、書き込み先のレジスタに追いついてから所定の時間が経過すると、検出回路７２４は、外部クロックカウンタ７２１の動作を再開させるとともに、ホストシステム４へのビジー信号の供給を停止する。これにより、レジスタからのデータ読み出しが再開される。
【００９４】
尚、バッファ９からホストシステム４への１セクタ分のデータ転送の途中で、読み出し元のレジスタが、書き込み先のレジスタに追いつくのを避けるためには、読み出しＦＩＦＯ７２に最初に蓄積しておくデータの容量を増やして、ホストシステムへのビジー信号の供給を停止するタイミングを遅くすればよい。又、読み出しＦＩＦＯ７２の容量は、最初に蓄積しておくデータの容量を考慮して設定するのが好ましい。
【００９５】
以上で説明したように、本実施の形態のフラッシュメモリシステム１では、書込ＦＩＦＯ７１及び読出ＦＩＦＯ７２を介することによって、書き込み処理におけるホストシステム４からのデータ書き込み、及び読み出し処理におけるホストシステム４によるデータ読み出しを、ホストシステム４の動作クロックである外部クロックＢＣＬＫに同期して実行することが可能である。
【００９６】
また、本実施の形態のフラッシュメモリシステム１では、書込ＦＩＦＯ７１及び読出ＦＩＦＯ７２が、デマルチプレクサ７１３及びマルチプレクサ７２３を備える。これにより、ホストシステム４とフラッシュメモリシステム１とを接続する外部バス１３のビット幅と、コントローラ内のデータバスのビット幅が異なる場合でも、円滑なデータの送受信を実現できる。
【００９７】
上記の実施の形態では、外部バス１３のバス幅とコントローラ３内部のデータバスのバス幅とが異なる（それぞれ１６ビット、６４ビット）場合を例に説明したが、外部バス１３のバス幅とコントローラ３内部のデータバスのバス幅とは、同じであってもよい。
【００９８】
上記の実施の形態では、書込ＦＩＦＯ７１及び読出ＦＩＦＯ７２が、いずれも８個のレジスタから構成される場合を例に説明したが、各ＦＩＦＯを構成するレジスタの数は８個よりも多くても、少なくても構わない。また、書込ＦＩＦＯ７１と読出ＦＩＦＯ７２とでレジスタの数が異なっていてもよい。
【００９９】
また、上記の実施の形態では、書込ＦＩＦＯ７１及び読出ＦＩＦＯ７２が、いずれも６４ビットのレジスタを複数備える場合を例に説明したが、ＦＩＦＯが備えるレジスタのビット数は、６４ビットに限らず、これよりも多くても、少なくても構わない。
【０１００】
尚、書き込みＦＩＦＯ７１と読み出しＦＩＦＯ７２の容量は、特に限定されないが、１セクタより小さい容量であっても、ホストシステム４とバッファ９との間のデータ転送を円滑に行うことが出来る。
【０１０１】
上記の実施の形態では、書込ＦＩＦＯ７１のデータの取り込み及び読出ＦＩＦＯ７２のデータの出力が、常時、外部クロックＢＣＬＫに同期して実行される場合を例に説明した。しかし、書込ＦＩＦＯ７１のデータの取り込み及び読出ＦＩＦＯ７２のデータの出力は、外部クロックＢＣＬＫと内部クロックＵＣＬＫとから選択されたいずれか一方のクロックに同期して実行されてもよい。
【０１０２】
外部クロックＢＣＬＫと内部クロックＵＣＬＫとを選択可能にすることにより、ホストシステム４が外部クロックＢＣＬＫを供給できない構成である場合等においても、本発明のメモリコントローラによるフラッシュメモリへのアクセスが可能となる。
【図面の簡単な説明】
【０１０３】
【図１】本発明に係るフラッシュメモリシステムを概略的に示すブロック図である。
【図２】フラッシュメモリのアドレス空間の構造を概略的に示す図である。
【図３】ホストインターフェースブロックの構成を示すブロック図である。
【図４】書込ＦＩＦＯの構成を示すブロック図である。
【図５】読出ＦＩＦＯの構成を示すブロック図である。
【図６】書き込み処理の実行時における書込ＦＩＦＯの動作を示すタイミングチャートである。
【図７】読み出し処理の実行時における読出ＦＩＦＯの動作を示すタイミングチャートである。
【符号の説明】
【０１０４】
１    フラッシュメモリシステム
２    フラッシュメモリ
３    コントローラ
４    ホストシステム
６    マイクロプロセッサ
７    ホストインターフェースブロック
８    ワークエリア
９    バッファ
１０  フラッシュメモリインターフェースブロック
１１  ＥＣＣブロック
１２  ＲＯＭ
１３  外部バス
１４  内部バス
１５  内部クロック源  
２５  ユーザ領域
２６  冗長領域
【図１】
2007066118.tif 000003
【図２】
2007066118.tif 000004
【図３】
2007066118.tif 000005
【図４】
2007066118.tif 000006
【図５】
2007066118.tif 000007
【図６】
2007066118.tif 000008
【図７】
2007066118.tif 000009