(57)【要約】【課題】キャッシュメモリの１ページ単位毎に設定される有効フラグの内容に基づいて低速・大容量のフラッシュメモリの読み出し処理を効率よく実行する半導体メモリ装置を提供する。【解決手段】半導体メモリ装置は、低速で大容量のフラッシュメモリと、フラッシュメモリから先読みした複数のページが格納される先読みバッファを有するキャッシュメモリと、ＣＰＵの制御により先読みバッファに格納された各ページの論理アドレスが格納される複数の先読みバッファ論理アドレスレジスタと、ＣＰＵの制御によりヒットしたライトキャッシュの論理アドレス及びキャッシュアドレス対を格納するライトキャッシュヒットレジスタペアレジスタと、外部のホストからの論理アドレスと先読みバッファ論理アドレスレジスタおよびライトキャッシュヒットレジスタペアレジスタに格納される論理アドレスとを比較し、一致した時にライトキャッシュ又は先読みバッファからデータを読み出してホストへ転送する読出制御手段と、を有する。【選択図】図４
2014197285.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、
低速で大容量のフラッシュメモリと、
前記フラッシュメモリの一部のデータを記憶すると共に、前記フラッシュメモリから先読みした複数のページが格納される先読みバッファを有するキャッシュメモリと、
前記ＣＰＵの制御により前記先読みバッファに格納された前記各ページの論理アドレスが格納される複数の先読みバッファ論理アドレスレジスタと、
前記ＣＰＵの制御によりヒットしたライトキャッシュの論理アドレス及びキャッシュアドレス対を格納するライトキャッシュヒットレジスタペアレジスタと、
外部のホストからのリード指令の論理アドレスと前記先読みバッファ論理アドレスレジスタおよび前記ライトキャッシュヒットレジスタペアレジスタに格納される前記論理アドレスとを比較する比較手段と、
前記比較手段で一致した時に、前記ライトキャッシュ又は前記先読みバッファからデータを読み出して前記ホストへ転送する読出制御手段と、
を有することを特徴とする半導体メモリ装置。
【請求項２】
前記ＣＰＵは、前記リード指令の論理アドレスと前記先読みバッファ論理アドレスレジスタで一致した場合、前記先読みバッファから前記ホストへ一致したページのデータを転送を行っている間に、次のページのデータを前記フラッシュメモリから前記先読みバッファに格納することを特徴とする請求項１に記載の半導体メモリ装置。
【請求項３】
前記比較手段で一致しなかった時に、前記ＣＰＵに対して割込みを発生し、前記ＣＰＵによって前記ライトキャッシュ又は前記先読みバッファにヒットするデータを準備させることを特徴とする請求項１に記載の半導体メモリ装置。
【請求項４】
前記比較手段で一致した時に、前記論理アドレスに対応するキャッシュアドレスが設定されるレジスタを更に有し、
前記読出制御手段は前記レジスタに基づき前記キャッシュメモリ又は前記先読みバッファからデータを読み出すことを特徴とする請求項１に記載の半導体メモリ装置。
【請求項５】
前記比較手段で一致しなかった時、前記レジスタには一致しないことを示す特定の値が設定されることを特徴とする請求項３又は４に記載の半導体メモリ装置。
【請求項６】
前記リード指令の後に、シーケンシャルリードの指令が続くことに応答して前記データ転送を行うことを特徴とする請求項１又は２に記載の半導体メモリ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、低速で大容量のフラッシュメモリを使用した半導体メモリ装置に関する。
【背景技術】
【０００２】
現在、一般的に販売されているＳＳＤ（半導体ディスク）は、記憶媒体としてそのほとんどがＮＡＮＤフラッシュメモリを使用している。また、その構造は、基板上にＮＡＮＤフラッシュメモリチップとＮＡＮＤフラッシュコントローラ（ＬＳＩ）を実装している。こうした一般市場向けのＳＳＤ製品は大量生産され、メモリチップもチップメーカーから大量に購入することによりチップ単価を安く抑えることができ、製品一台当たりの価格も低く抑えることができる。また、メモリチップを直接制御することにより性能（スピード）を最大限に伸ばすことも可能となる。
【０００３】
しかし、特定用途または特定顧客向けの特殊仕様で少量生産品のような場合には、メモリチップの購入数も少量となり価格が割高になってしまう。また、メモリチップもたびたび新しい仕様（デザインルール）の製品に生まれ変わっていくため、そのたびに装置（＝製品自体）も新しくしなければならなくなり、製品単価にしめる開発費の割合が大きくなり、さらに価格が高くなってしまうという欠点がある。
【０００４】
このような少量生産とならざるを得ないような製品の場合には、コンパクトフラッシュ(登録商標)メモリ（以下、ＣＦメモリと略す）を代表とするフラッシュメモリカードが有効となる。フラッシュメモリカードのインターフェイスは、それぞれの規格で決まっており、内部で使用しているＮＡＮＤフラッシュチップのメーカや容量等に関係しないので、容量が大きくなる場合もあるかもしれないが、それを除けば、ほぼ同じコンパチブル品として使用し続けることができる。カードメーカは、ＮＡＮＤメモリチップを大量に購入し生産するため、ＣＦメモリカードを使用すればＳＳＤに負けないくらいの低コストで半導体メモリ装置を作ることができる可能性がある。
【０００５】
ＣＦメモリは、電力が遮断されても記憶した内容が保持される不揮発性であること、また繰り返しデータの書込みや消去ができること、振動や騒音がなく、消費電力が少ない等の特長を有することから、記憶装置として幅広く利用されている。そして、一般的にＣＦメモリやＳＤ（Secure Digital）メモリには、ＮＡＮＤフラッシュメモリが使用されている。
【０００６】
ＮＡＮＤフラッシュメモリにおけるデータの書込み又は消去は、フラッシュメモリを構成しているブロック単位で行われている。また、フラッシュメモリに書込まれたデータを書換える場合は、前のデータをブロック単位で消去し、新しいデータを書込むという処理が行われる。しかし、ＮＡＮＤフラッシュメモリは特性上寿命があり、その書込み回数には上限がある。したがって、効率の悪い無駄な書込み又は消去は、フラッシュメモリの寿命を短くする一因となる。
【０００７】
また、フラッシュメモリカードはＮＡＮＤコントローラを内蔵しており、ＮＡＮＤコントローラはＮＡＮＤの制御をすべて行っている。一般的に、ＮＡＮＤコントローラは性能が遅く、フラッシュメモリカードを使用して記憶装置を構成した場合に、ＳＳＤ並の性能を出すことは、よほどの工夫をしない限りほとんど不可能に近い。
【０００８】
例えばＣＦメモリを単体で使用するシステム、またはＣＦメモリを使用したフラッシュメモリ装置（ＳＳＤ）では、図６に示すように、ホストまたはＳＳＤシステム（ＳＳＤ内でのＣＦメモリ制御部）ＡとＣＦメモリＢはＰＡＴＡインターフェイスＣを介して接続されている。そして、ＣＦメモリＢはＮＡＮＤコントローラＢ１とＮＡＮＤチップＢ２から構成されている。このような構成において、ホストＡからＮＡＮＤチップＢ２に格納したデータをアクセスする場合、ホストＡからＮＡＮＤコントローラＢ１にアクセス指令を出し、ＮＡＮＤコントローラＢ１がＮＡＮＤチップＢ２をアクセスして、その結果をホストＡに出力する動作となる。このような構成では、ＮＡＮＤコントローラＢ１の処理速度がホストＡに比べて極端に遅いという課題がある。
【０００９】
それは、単純にＣＦメモリＢを必要な容量分だけ並べて、論理アドレスを固定してＣＦメモリＢに割り当てた様なシステムでは、性能低下が顕著に現れる。特に、ホストＡからＣＦメモリＢに保存されたデータを書換える場合は、ＣＦメモリＢの内部でＮＡＮＤチップＢ２からデータを一度読み出し、書換えデータがあるセクタのみを上書きし、消去済みのＮＡＮＤチップＢ２に書き戻すという処理が行われる。この動作は、１セクタのみ書き換える場合でも、ＮＡＮＤチップＢ２の特性上１ブロック全体を書き換えなければならない。これにより、処理が遅いというだけではなく、ブロック消去が大量に発生することによるＮＡＮＤチップＢ２の寿命低下という致命的な欠点にもつながっていた。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０１２−６４１５８号公報
【特許文献２】特開２００６−３２３７３９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上述したように、ＣＦメモリはリードの処理が遅い（＝オーバヘッドが大きい）という欠点がある。この問題を解決する手段として、複数ページの容量を有する先読みバッファを設けて、ＣＦメモリのデータを先読みバッファに先読みすることが要望される。
本発明が解決しようとする課題は、低速で大容量のフラッシュメモリを用いるシステムで、キャッシュメモリに設けた先読みバッファの先読み制御の実行により、特にシーケンシャルリードの実行時において性能の低下を抑えることのできる半導体メモリ装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
実施形態に係る半導体メモリ装置は、ＣＰＵと、低速で大容量のフラッシュメモリと、前記フラッシュメモリの一部のデータを記憶すると共に、前記フラッシュメモリから先読みした複数のページが格納される先読みバッファを有するキャッシュメモリと、前記ＣＰＵの制御により前記先読みバッファに格納された前記各ページの論理アドレスが格納される複数の先読みバッファ論理アドレスレジスタと、前記ＣＰＵの制御によりヒットしたライトキャッシュの論理アドレス及びキャッシュアドレス対を格納するライトキャッシュヒットレジスタペアレジスタと、外部のホストからのリード指令の論理アドレスと前記先読みバッファ論理アドレスレジスタおよび前記ライトキャッシュヒットレジスタペアレジスタに格納される前記論理アドレスとを比較する比較手段と、前記比較手段で一致した時に、前記ライトキャッシュ又は前記先読みバッファからデータを読み出して前記ホストへ転送する読出制御手段と、を有することを特徴とする。
【発明の効果】
【００１３】
本発明によれば、ホストからのリードコマンド時、主にシーケンシャルリードでの処理動作の速度を大幅に上げることができる。
【図面の簡単な説明】
【００１４】
【図１】実施形態に係る半導体メモリ装置並びにシステムブロックを示す図である。
【図２】実施形態に係るセクタ単位にＤフラグを持つキャッシュメモリの構成を示す図である。
【図３】キャッシュメモリの各ページの情報を示す図である。
【図４】実施形態に係るＣＦメモリの先読み制御回路を示す図である。
【図５】図４の動作を示すフローチャート。
【図６】従来のホストとＣＦメモリの接続構成を示す図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態に係る半導体メモリ装置を、図面を参照して説明する。
本実施形態の半導体メモリ装置は、ホストからのリードコマンド時、主にシーケンシャルリードでの処理動作の速度を大幅に上げることを可能とする。
【００１６】
図１は、実施形態に係る半導体メモリ装置並びに同装置を用いたシステムブロックを示す図である。図２において、半導体メモリ装置１００は、ＣＰＵ１１０、ＣＰＵバス１２０、フラッシュメモリ（ここでは、ＣＦメモリを用いているので、以下ではＣＦメモリと称する）１３０、ＣＦコントローラ１４０、キャッシュメモリ（ＤＲＡＭ）１５０、キャッシュコントローラ１６０、ホストインターフェイス１７０、ローカルバス１８０、ＲＡＭ１９０、ＲＯＭ１９５を有している。半導体メモリ装置１００のホストインターフェイス１７０は、外部のホスト２００のホストバス２１０と接続されている。ＣＦメモリ１３０は、メインメモリを構成するもので、低速・大容量のメモリである。キャッシュメモリ１５０は、ＣＦメモリ１３０に格納されるデータの一部のデータの写しを記憶する高速・小容量のメモリである。
【００１７】
そして、半導体メモリ装置１００のＣＰＵバス１２０には、ＣＰＵ１１０、ＣＦコントローラ１４０、ＲＡＭ１９０、ＲＯＭ１９５などが接続されている。また、ローカルバス１８０には、キャッシュコントローラ１６０、ホストインターフェイス１７０、ＣＦコントローラ１４０などが接続されている。ＣＰＵバス１２０とローカルバス１８０は、直接およびＣＦコントローラ１４０を経由して接続されている。ＣＰＵ１１０は、ＣＦコントローラ１４０を介してＣＦメモリ１３０をアクセスすることができる。また、ＣＰＵ１１０は、キャッシュコントローラ１６０又はＣＦコントローラ１４０−キャッシュコントローラ１６０を介してキャッシュメモリ１５０をアクセスすることができる。ＲＡＭ１９０、ＲＯＭ１９５は、ＯＳ、ファームウェア、及びアプリケーション等のプログラムの格納領域、並びに実行時の作業領域となるメモリである。
【００１８】
ホスト２００と半導体メモリ装置１００のホストインターフェイス１７０とを接続するホストバス２１０は、例えばＳＣＳＩバスやＳＡＴＡバスである。ホストインターフェイス１７０は、ホストバス２１０を介してホスト２００との間のコマンド、データの転送を制御する。ホスト２００からライトするデータ又はホスト２００へのリードするデータは、一時的にキャッシュメモリ１５０に蓄えられる。つまり、ホスト２００から半導体メモリ装置１００に対するリード／ライトコマンド実行時には、ホストインターフェイス１７０、キャッシュコントローラ１６０を介してキャッシュメモリ１５０との間でデータがやりとりされる。
【００１９】
ホスト２００からのライトコマンド実行時は、ホスト２００から送られてきたライトデータをホストインターフェイス１７０で保持した後、キャッシュメモリ１５０に転送する。キャッシュメモリ１５０は、ページ単位で管理されている。例えば、１ページ＝６４セクタのサイズとする。その後、キャッシュメモリ１５０のライトデータは、ＣＦメモリ１３０に転送される。キャッシュメモリ１５０とＣＦメモリ１３０との間の転送の最小サイズは、例えば１ページである。
【００２０】
ホスト２００からのリードコマンド実行時は、キャッシュメモリ１５０がヒットしているかミスしているかによって、それ以前のライトキャッシュに対して実行されたライトコマンドによるライトデータか、またはＣＦメモリ１３０からキャッシュメモリ１５０に転送されたデータが、ホスト２００に転送される。ＣＦメモリ１３０の制御は、ＣＦコントローラ１４０が行う。これらのＣＦコントローラ１４０、ホストインターフェイス１７０、及びキャッシュコントローラ１６０等の全体を制御するのがＣＰＵ１１０である。
【００２１】
（キャッシュメモリの構造）
次に、キャッシュメモリ１５０の構造について説明する。キャッシュメモリ１５０は、一般的に数ＭＢ（メガバイト）〜数十ＭＢの容量がある。ここでは、図２に示すように、キャッシュメモリ１５０の容量を、例えば６４ＭＢとし、例えば１ページ＝６４セクタ＝３２ＫＢ（キロバイト）単位で管理することにする。したがって、キャッシュメモリ１５０は、６４ＭＢ÷３２ＫＢ＝２０４８ページで構成される。
キャッシュメモリ１５０の各ページ情報として、図３に示すように、
（１）論理アドレス
（２）ヴァリッドフラグ（１ビット）
（３）Ｄフラグ（６４ビット）
（４）ＬＲＵ情報
という４種類の値を有する。これら４つの値を格納する場所は、どこでも構わないが、例えばＣＰＵ空間にあるＲＡＭ１９０上でも構わない。これら４つの値を１セット（１ページ分）として、２０４８ページ分保有しておく。
【００２２】
（１）論理アドレスは、ページに対応する論理アドレスであり、ホスト２００からのリード／ライトコマンドで指定されるアドレスと同じ意味である。値としては、各６４セクタの先頭のアドレス、例えば0x000000, 0x000040, 0x000080, …..という値を持つ。
（２）ヴァリッドフラグ「Ｖ」は、そのページが有効か否かを示すフラグである。有効ならばＶ＝“１”、無効ならばＶ＝“０”となる。
（３）Ｄフラグは、ページ内の各セクタに有効なデータが存在するかどうかを示すフラグであり、ここの例では１ページ＝６４セクタなので、各Ｄフラグは６４ビットである。
（４）ＬＲＵ−Ｕ／ＬＲＵ−Ｄは、キャッシュメモリ１５０の空きページがなくなって、ページの追い出しの必要性が発生したときに、２０４８ページの内のどのページから追い出していくかを決めるための情報である。ＬＲＵとは、Least Recently Usedアルゴリズムである。このアルゴリズムは、「最も昔に使用された」ページから追い出しを行うという、追い出しの順番を決める方法の一つである。値としては０〜２０４７までの値、２つで１セットを構成している。例えば、あるページ（ページ番号Ｍ）について、現在Ｎ番目にアクセスされたページだとする。ＬＲＵ情報はポインタ値となっていて、ＬＲＵ−Ｕは、自分よりひとつ上（より新しくアクセスされた）ページのページ番号を示す。ＬＲＵ−Ｄは、自分よりひとつ下のページを指す。このように各ページは上下２方向の数珠つなぎになっている。
【００２３】
ここで、キャッシュメモリ１５０のページ番号Ｍがアクセスされたとすると、このエントリは最も最近使用されたということで、最上位に移動される。最上位への移動処理は、現在つながっている数珠の位置から切り離して、一番上位の端に繋ぎ変える。切られたＮ−１番目とＮ＋１番目をつなぎ直さなければならないが、それらが何ページ目かは２つのポインタ（ＬＲＵ−Ｕ／ＬＲＵ−Ｄ）を見ればわかる。
【００２４】
キャッシュメモリ１５０がヒットしているかミスしているかは、リード／ライトコマンドで指定されたアドレスと同じアドレスで、かつ、ヴァリッドフラグ「Ｖ」が“１”のページが存在するかどうかを調べればよい。
【００２５】
次に、ホスト２００から半導体メモリ装置１００へ書き込み動作について説明する。
ホスト２００からライトコマンドが半導体メモリ装置１００のホストインターフェイス１７０に発行されると、ホストインターフェイス１７０は、ＣＰＵ１１０に割込みを掛けてライトコマンドが受信したこと、およびコマンド内容を知らせる。ＣＰＵ１１０は、書き込みアドレスがキャッシュメモリ１５０でヒットしているかどうかを調べ、ヒットしていたならば該当するキャッシュメモリ１５０のアドレス位置にライトデータを転送するようホストインターフェイス１７０を設定して、ライトデータの書き込み動作を実行する。
【００２６】
もしも、キャッシュメモリ１５０に対するライトキャッシュがミス（キャッシュミス）であったならば、キャッシュメモリ１５０に１ページ分の新しい領域を割り当てて、このキャッシュメモリ１５０の新しい領域のアドレス位置にヒットするライトデータを転送するようホストインターフェイス１７０を設定して、ライトデータの書き込み動作を実行する。もしも、キャッシュメモリ１５０に空きページが無い場合には、キャッシュ追い出しアルゴリズム（こここでは、ＬＲＵアルゴリズム）により、最も過去にアクセスされたページをＣＦメモリ１３０に書き戻し（＝ライトバック）、空きページを確保する。
【００２７】
（ライトバック）
キャッシュメモリ１５０からＣＦメモリ１３０へのライトバックは、ページ単位で行う。まず、図２に示すキャッシュメモリ１５０の各ページのＤフラグに“０”となっているビット（セクタ）が存在するかどうかを調べる。もしも“０”のセクタがあったならば、ＣＦメモリ１３０の対応するセクタからのデータをキャッシュメモリ１５０の当該セクタに読み込まなければならない。
【００２８】
ＣＰＵ１１０は、ＣＦメモリ１３０からデータを読み込む際に、キャッシュメモリ１５０のＤフラグが“１”となっているセクタを避けてデータを転送しなければならない。つまり、キャッシュメモリ１５０のＤフラグが“０”のセクタに対してのみリード動作を実行する。しかし、ヒットしているページならばライトデータがまばらに存在する、言い換えればＤフラグに“１”と“０”がランダムに混在した状態となっている可能性は十分考えられる。そのような場合、いちいち“０”のセクタだけ選び出して、それに対応するＣＦメモリ１３０にリード動作を行うことは処理的に煩雑すぎるし、実際に動作を行った場合にＣＦメモリ１３０のオーバヘッドが大きすぎて実用的な性能を出すことができない。
【００２９】
そこで、キャッシュコントローラ１６０にＤフラグを記憶するレジスタを設け、その出力端とキャッシュメモリ１５０を構成するＤＲＡＭのＤＭ端子とを接続する構成とすることで、ＤＭ信号「Ｈ」＝“１”が入力されると、ライトプロテクト（書き込み禁止）を掛けるようにする。即ち、Ｄフラグレジスタの値が“０”の有効なセクタのみに対してデータの書き換えが行える仕組みを実現する。一方、Ｄフラグレジスタの値が“１”の非有効なセクタに対しては、ライトプロテクトが掛かり、ＤＲＡＭの内容がそのまま保持されるようにする。
【００３０】
（ライトバック）
キャッシュメモリ１５０からＣＦメモリ１３０へのライトバックは、ページ単位で行うが、一般的にＣＦメモリ１３０は物理ブロック単位でイレーズ／ライトを行うため、物理ブロック分をまとめてライトバックを行わなければならない。もしも、物理ブロックのサイズと異なるサイズでＣＦメモリ１３０に対してライトしたとすると、ＣＦメモリ１３０の内部では書き換えないデータが発生するためリード・モディファイ・ライトを行わなければならなくなる。すると、ＣＦメモリ１３０を構成するＮＡＮＤメモリ間でのデータ読み出し／書き戻しが大量に発生し、オーバヘッドでＣＦメモリ１３０は大幅な性能低下に陥ってしまう。
【００３１】
また、キャッシュメモリの１ページも物理ブロックと同じサイズにすれば話が単純になるが、キャッシュメモリのページサイズを大きくしすぎると総ページ数が減り、ミスする確率が上がってしまう。これにより、逆に性能が低下してしまうため、サイズは十分検討して決める必要がある。
【００３２】
従って、ライトバック動作では、１物理ブロック（例えば、２０４８セクタ＝３２ページ）で行うために、ＣＦメモリ１３０上で常に連続した１物理ブロック（ここでは、２０４８セクタ）分の領域を確保しなければならない。このため、ＣＦメモリ１３０上のアドレスとライトバックされたキャッシュメモリ１５０に対応する以下の３種類のアドレス変換テーブルを用意する。
（ａ）論理−物理アドレス変換テーブル
（ｂ）物理−論理アドレス変換テーブル
（ｃ）ヴァリッドページフラグテーブル
【００３３】
（ａ）論理−物理アドレス変換テーブルは、通常のライトバックで必要となるテーブルで、ホスト２００からリード／ライトコマンドが出力された際に、要求されたデータがＣＦメモリ１３０のどこに格納されているかを調べるためのテーブルである。リード／ライトコマンドで指定されたアドレスが論理アドレスであり、このテーブルによって対応する物理アドレスが求められる。
（ｂ）物理−論理アドレス変換テーブルは、逆にＣＦメモリ１３０上のアドレス（物理アドレス）を入力すると論理アドレスが求まるテーブルである。これは、ガーベージコレクションと呼ばれる動作の時に必要となる。
（ｃ）ヴァリッドページフラグテーブルは、ＣＦメモリ１３０の６４セクタ毎に１ビット、４バイト当たりＣＦメモリの２０４８セクタ分に相当する。
【００３４】
（ガーベージコレクション）
１物理ブロック（例えば、２０４８セクタ単位）でライトバックする場合、ＣＦメモリ１３０に一度ライトしたデータは当然ながらいつかは書き換えられる。すると、ＣＦメモリ１３０上でキャッシュメモリ１５０のページ（６４セクタ）単位で古いデータ（ガーベージ：ゴミ）が残ることになる。この古いデータをそのままにしておくと、ＣＦメモリ全体にゴミが散乱して連続した２０４８セクタが確保できなくなり、ライトバックができなくなる。これを防ぐために、ゴミを含む２０４８セクタのうちゴミではない有効なページ（６４セクタ分）を読み出して、それらを２０４８セクタ分まとめてあらためてライトバックを行う。この作業は、一般的にガーベージコレクションと呼ばれ、有効なデータだけが一個所にまとめられ、ゴミしか含まない再生可能な２０４８セクタの領域が生成される。このゴミしか含まない２０４８セクタの領域には、次回のライトバック時に新しいデータを上書きすることができる。
【００３５】
（先読み制御）
次に、実施形態に係るＣＦメモリ１３０の先読み制御回路について説明する。図４は、ＣＦコントローラ１４０に設けられる先読み制御回路の構成を示すブロック図である。
前述したように、ＣＦメモリ１３０はリードの処理が遅い（＝オーバヘッドが大きい）という欠点がある。ここでは、特にシーケンシャルリードの実行時において性能の低下を抑えるための方法について説明する。
【００３６】
図４に示すように、ＣＦメモリ１３０のシーケンシャルリード性能を上げるために、キャッシュメモリ１５０に先読みバッファ４００（例えば、４ページ分）を設ける。一方、ＣＦコントローラ１４０内には、先読みバッファ４００の各ページに対応して「先読みバッファ論理アドレスレジスタ」ＬＵＢＬＡＲ＃０（４１０ａ）乃至ＬＵＢＬＡＲ＃３（４１０ｄ）が設けられる。このＬＵＢＬＡＲ＃０（４１０ａ）乃至ＬＵＢＬＡＲ＃３（４１０ｄ）には、ＣＰＵ１１０がＣＦメモリ１３０から先読みバッファ４００に１ページのデータを先読みした時に、ＣＦメモリ１３０の対応する論理アドレスを登録する。なお、「先読みバッファ論理アドレスレジスタ」ＬＵＢＬＡＲ＃０（４１０ａ）乃至ＬＵＢＬＡＲ＃３（４１０ｄ）に対応するキャッシュメモリ１５０のアドレスは、ハードウェア的に固定されているので、ＣＰＵ１１０内部で保持している。
【００３７】
また、キャッシュメモリ１５０のライトキャッシュ側をリードする場合に、対応する４つの「ライトキャッシュヒットレジスタペア」ＷＣＨＲが設けられる。この「ライトキャッシュヒットレジスタペア」ＷＣＨＲは、「論理アドレス」を登録するＷＣＨＬＡＲ＃０（４５０ａ）乃至ＷＣＨＬＡＲ＃３（４５０ｄ）と、「キャッシュアドレス」を登録するＷＣＨＣＡＲ＃０（４５５ａ）乃至ＷＣＨＣＡＲ＃３（４５５ｄ）によって構成する。つまり、ＣＰＵ１１０は、ホスト２００からのリード指令に応じて、ヒットしたライトキャッシュの「論理アドレス」と「キャッシュアドレス」のペアを、ライトキャッシュヒットレジスタペアＷＣＨＲに設定する。
【００３８】
また、ホスト２００からのリード指令と共に転送される論理アドレスが、ＣＤＢレジスタ４６０にセットされ、その論理アドレスが比較回路４７０に出力される。比較回路４７０は、ＣＤＢレジスタ４６０の論理アドレスとＬＵＢＬＡＲ＃０（４１０ａ）乃至ＬＵＢＬＡＲ＃３（４１０ｄ）、およびＷＣＨＬＡＲ＃０（４５０ａ）乃至ＷＣＨＬＡＲ＃３（４５０ｄ）とを比較して、一致（ヒット）するか否かを検出する。
【００３９】
例えば、ＷＣＨＬＡＲ＃０（４５０ａ）乃至ＷＣＨＬＡＲ＃３（４５０ｄ）で一致した場合は、対応する「キャッシュアドレス」をＷＣＨＣＡＲ＃０（４５５ａ）乃至ＷＣＨＣＡＲ＃３（４５５ｂ）から取り出し、キャッシュヒットアドレスレジスタＣＨＡＲ４８０にセットする。一方、ＬＵＢＬＡＲ＃０（４１０ａ）乃至ＬＵＢＬＡＲ＃３（４１０ｄ）で一致した場合、ＣＰＵ１１０は予め設定されている固定値のキャッシュアドレスをキャッシュヒットアドレスレジスタＣＨＡＲ４８０にセットする。ＣＨＡＲ４８０のキャッシュアドレスは、ホストインターフェイス１７０の制御の元、キャッシュメモリ１５０に出力される。また、比較回路４７０は、論理アドレスの比較動作にて不一致を検出したときは、ＣＰＵ１１０へ割り込み信号を送信する。
【００４０】
次に、図５のフローチャートを用いて、図４の動作を説明する。ホスト２００からリードコマンドが送られて来ると、ホストインターフェイス１７０は送られてきたコマンド、例えば「アドレスＡからＭセクタ分リードしなさい」というコマンドに含まれるリード論理アドレスをＣＦコントローラ１４０のＣＤＢレジスタ４６０にセットする（Ｓ２００）。
【００４１】
ＣＦコントローラ１４０の比較回路４７０は、ＣＤＢレジスタ４６０にセットした論理アドレスと「先読みバッファ論理アドレスレジスタ」ＬＵＢＬＡＲ＃０（４１０ａ）乃至ＬＵＢＬＡＲ＃３（４１０ｄ）、および「ライトキャッシュヒットレジスタペアの論理アドレス」ＷＣＨＬＡＲ＃０（４５０ａ）乃至ＷＣＨＬＡＲ＃３（４５０ｄ）とを比較し（Ｓ２１０）、一致（ヒット）するか否かを検出する。一致（ヒット）した場合（Ｓ２２０のＹｅｓ）、先読みバッファ４００でヒットしているか、ライトキャッシュがある場合（＝ヒット）である。ライトキャッシュでヒットした場合、その対応するキャッシュメモリアドレスを「ライトキャッシュヒットレジスタペアのキャッシュアドレス」ＷＣＨＣＡＲ＃０（４５５ａ）乃至ＷＣＨＣＡＲ＃３（４５５ｄ）から抽出し、「キャッシュヒットアドレスレジスタ」ＣＨＡＲ４８０にセットする（Ｓ２３０）。また、先読みバッファ４００でヒットした場合、ＣＰＵ１１０は予め設定されている固定値のキャッシュアドレスをキャッシュヒットアドレスレジスタＣＨＡＲ４８０にセットする（Ｓ２３０）。
【００４２】
もしも、比較回路４７０で不一致が検出された場合（＝ミス）には、比較回路４７０はＣＨＡＲ４８０にオール“０”をセットする。同時に、比較回路４７０は、ＣＰＵ１１０に対して割込み信号（ミス割込み）を出力する（Ｓ２４０）。
【００４３】
割込み信号を受信したＣＰＵ１１０は、ＣＤＢレジスタ４６０の論理アドレスを参照してキャッシュメモリ１５０のライトキャッシュ内にヒットするページがないか調べる。もしも、ヒットするページがあれば、その論理アドレスとキャッシュアドレスを「ライトキャッシュヒットレジスタペア」ＷＣＨＲの置き換え位置にセットする。一方、ライトキャッシュではヒットするページがなければ、ＣＰＵ１１０はＣＦメモリ１３０から先読みバッファ４００に１ページ分のデータを読み出し、その論理アドレスを「先読みバッファ論理アドレスレジスタ」ＬＵＢＬＡＲ＃０（４１０ａ）乃至ＬＵＢＬＡＲ＃３（４１０ｄ）の４つの内の一つにセットする（Ｓ２５０）。
【００４４】
それらのセットが行われる間、ホストインターフェイス１７０では、ＣＨＡＲ４８０の値がオール“０”でなくなるまで繰り返し読み出し続ける（Ｓ２６０のＹｅｓ）。そして、ＣＰＵ１１０が対応して、キャッシュメモリ１５０のライトキャッシュまたは先読みバッファ４００にヒットする準備が整うと、ホストインターフェイス１７０はデータ転送を開始することができる。つまり、比較回路４７０は一致（ヒット）し、「キャッシュヒットアドレスレジスタ」ＣＨＡＲ４８０にセットする（Ｓ２３０）される。
【００４５】
ホストインターフェイス１７０は、キャッシュメモリ１５０から「キャッシュヒットアドレスレジスタ」ＣＨＡＲ４８０にセットした内容を読み出す。つまり、ＣＨＡＲ４８０にセットされるキャッシュヒットアドレスに従いライトキャッシュ又はキャッシュメモリ１５０の先読みバッファ４００からデータを読み出し、ホストバス２１０を経由してホスト２００に転送し（Ｓ２７０）、終了する。
【００４６】
（効果的な先読み動作）
ホストインターフェイス１７０は、ホスト２００からのリードコマンドを受信したら、その後にシーケンシャルリードが続くことを予想して、現在データ転送しているページの次のページをライトキャッシュ又はＣＦメモリ１３０から検索する。もしも、次のページ見つかれば「先読みバッファ論理アドレスレジスタ」ＬＵＢＬＡＲ＃０（４１０ａ）乃至ＬＵＢＬＡＲ＃３（４１０ｄ）または「ライトキャッシュヒットレジスタペア」ＷＣＨＲの特定位置にセットする。
【００４７】
現在転送中のページが転送終了したら、終了したページ対応する「先読みバッファ論理アドレスレジスタ」（４１０ａ）乃至ＬＵＢＬＡＲ＃３（４１０ｄ）および「ライトキャッシュヒットレジスタペア」ＷＣＨＲも削除が可能となる。削除されて空きレジスタができたら、引き続きその先のヒットしたページを登録し続ける。以上の動作をＣＰＵ１１０がバックグラウンドで行い続けることにより、特にシーケンシャルリードコマンド実行時の場合には常に４ページ分の先読みバッファ４００が準備されていて、常に先読みバッファ４００がヒットした状態でデータ転送を行うことができ、大幅な性能向上が期待できる。
【００４８】
特に、シーケンシャルライトのように広い領域に対して分割してライトコマンドが出された場合には、頻繁に発生するＣＦメモリからキャッシュメモリへの読み出し（コピー動作）が不要となり、ＣＦメモリへのアクセスを最小限にできる。これによって、大容量のＣＦメモリに格納したデータを効率的に書換え処理することができる。
【００４９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更、組み合わせを行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５０】
１００‥半導体メモリ装置、１１０‥ＣＰＵ、１２０‥ＣＰＵバス、１３０‥ＣＦメモリ、１４０‥ＣＦコントローラ、１５０‥キャッシュメモリ、１６０‥キャッシュコントローラ、１７０‥ホストインターフェイス、１８０‥ローカルバス、２００‥ホスト、２１０‥ホストバス、４００‥先読みバッファ
４１０ａ〜４１０ｄ‥先読みバッファ論理アドレスレジスタ
４５０ａ〜４５０ｄ‥ライトキャッシュヒットレジスタペアの論理アドレス
４５５ａ〜４５５ｄ‥ライトキャッシュヒットレジスタペアのキャッシュアドレス
４６０‥ＣＤＲレジスタ、４７０‥比較回路、
４８０‥キャッシュヒットアドレスレジスタＣＨＡＲ
【図１】
2014197285.tif 000003
【図２】
2014197285.tif 000004
【図３】
2014197285.tif 000005
【図４】
2014197285.tif 000006
【図５】
2014197285.tif 000007
【図６】
2014197285.tif 000008