(57)【特許請求の範囲】
【請求項１】
データ消去の単位であるブロックを複数個有する半導体記憶装置の制御方法であって、
前記半導体記憶装置外部からデータ及びアドレスを含むライト要求を複数受信し、
前記ライト要求に含まれるアドレスに基づき、アドレスが連続するライト要求を所定回数以上連続して受信するという第１の条件が成立するか否かを判定し、
前記第１の条件が成立する場合は、前記ブロックを多値モードで使用すると決定し、当該多値モードのブロックにデータを書き込み、
前記第１の条件が成立しない場合は、前記ブロックを二値モードで使用すると決定し、当該二値モードのブロックにデータを書き込み、
前記ブロックへのデータの書き込み中に前記第１の条件が成立するか否かの判定結果が変化した場合であっても、当該ブロックの書き込みが終了するまでは、記録モードの切り替えを行わない
ことを特徴とする半導体記憶装置の制御方法。 
【請求項２】
前記ライト要求に含まれるアドレスに基づき、データサイズが所定値に一致するライト要求を所定回数以上連続して受信するという第２の条件が成立するか否かを判定し、
前記第１の条件および前記第２の条件が成立する場合は、前記ブロックを多値モードで使用すると決定し、当該多値モードのブロックにデータを書き込み、
前記第１の条件または前記第２の条件が成立しない場合は、前記ブロックを二値モードで使用すると決定し、当該二値モードのブロックにデータを書き込む、
ことを特徴とする請求項１に記載の半導体記憶装置の制御方法。 
【請求項３】
前記ライト要求に含まれるアドレスに基づき、先頭アドレスを所定のデータサイズで割った剰余が０であるライト要求を所定回数以上連続して受信するという第３の条件が成立するか否かを判定し、
前記第１の条件および前記第３の条件が成立する場合は、前記ブロックを多値モードで使用すると決定し、当該多値モードのブロックにデータを書き込み、
前記第１の条件または前記第３の条件が成立しない場合は、前記ブロックを二値モードで使用すると決定し、当該二値モードのブロックにデータを書き込む、
ことを特徴とする請求項１に記載の半導体記憶装置の制御方法。 
【請求項４】
データ消去の単位であるブロックを複数個有する半導体記憶装置の制御方法において、
前記半導体記憶装置外部からデータ及びアドレスを含むライト要求を複数受信し、
前記ライト要求に含まれるアドレスに基づき、前回のライト要求の終端アドレスと今回のライト要求の先頭アドレスとの差分が所定の閾値以内であるライト要求を所定回数以上連続して受信するという第４の条件が成立するか否かを判定し、
前記第４の条件が成立する場合は、前記ブロックを多値モードで使用すると決定し、当該多値モードのブロックにデータを書き込み、
前記第４の条件が成立しない場合は、前記ブロックを二値モードで使用すると決定し、当該二値モードのブロックにデータを書き込み、
前記ライト要求に含まれるアドレスに基づき、データサイズが所定値に一致するライト要求を所定回数以上連続して受信するという第２の条件が成立するか否かをさらに判定し、
前記第４の条件および前記第２の条件が成立する場合は、前記ブロックを多値モードで使用すると決定し、当該多値モードのブロックにデータを書き込み、
前記第４の条件または前記第２の条件が成立しない場合は、前記ブロックを二値モードで使用すると決定し、当該二値モードのブロックにデータを書き込む、
ことを特徴とする半導体記憶装置の制御方法。 
【請求項５】
前記ライト要求に含まれるアドレスに基づき、先頭アドレスを所定のデータサイズで割った剰余が０であるライト要求を所定回数以上連続して受信するという第３の条件が成立するか否かを判定し、
前記第４の条件および前記第３の条件が成立する場合は、前記ブロックを多値モードで使用すると決定し、当該多値モードのブロックにデータを書き込み、
前記第４の条件または前記第３の条件が成立しない場合は、前記ブロックを二値モードで使用すると決定し、当該二値モードのブロックにデータを書き込む、
ことを特徴とする請求項４に記載の半導体記憶装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性半導体メモリを備えた半導体記憶装置の制御方法に関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュメモリの記録方式として多値記録（ＭＬＣ：Ｍｕｌｔｉ  −Ｌｅｖｅｌ  Ｃｅｌｌ）方式と、二値記録（ＳＬＣ：Ｓｉｎｇｌｅ−Ｌｅｖｅｌ  Ｃｅｌｌ）方式とがある。ＳＬＣ方式（以下、ＳＬＣモードという）では、記録単位である１つのセルに１ビットが記録されるのに対し、ＭＬＣ方式（以下、ＭＬＣモードという）では、１つのセルにＮビット（Ｎ＞１）を記録することができる。したがって、例えば２ビット記録のＭＬＣフラッシュメモリでは、１つのセルが４値を表すことができ、３ビット記録のＭＬＣフラッシュメモリでは、１つのセルが８値を表すことができる。
【０００３】
このようにＭＬＣモードでの記録は、ＳＬＣモードでの記録よりも体積あたりの記録容量を大きくでき、また、記録容量あたりのコストを抑えられるというメリットがある。一方、ＳＬＣモードでの記録は、ＭＬＣモードでの記録に比べ、書込みや読出しのアクセス時間が短く、また、信頼性が高いというメリットがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４５３３９６８号
【特許文献２】特許第４６４３６６７号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の一つの実施形態は、シーケンシャルライトであるか否かを簡単かつ軽量なアルゴリズムを用いて判定し、この判定結果に応じて多値記録または二値記録を行うことにより、基本性能を低下させることなく書き込み効率のよい書き込み動作を実現する半導体記憶装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一つの実施形態によれば、半導体記憶装置は、データ消去の単位であるブロックを複数個有する。実施形態によれば、前記半導体記憶装置外部からデータ及びアドレスを含むライト要求を複数受信し、前記ライト要求に含まれるアドレスに基づき、アドレスが連続するライト要求を所定回数以上連続して受信するという第１の条件が成立するか否かを判定し、前記第１の条件が成立する場合は、前記ブロックを多値モードで使用すると決定し、当該多値モードのブロックにデータを書き込み、前記第１の条件が成立しない場合は、前記ブロックを二値モードで使用すると決定し、当該二値モードのブロックにデータを書き込む。
【図面の簡単な説明】
【０００７】
【図１】図１は、ＳＳＤの内部構成例を示すブロック図である。
【図２】図２は、ブロック管理を概念的に示す図である。
【図３】図３は、コンパクションの処理手順を示すフローチャートである。
【図４】図４は、第１の実施形態のシーケンシャル書き込みを判定する一部手順を示すフローチャートである。
【図５】図５は、シーケンシャル書き込みを判定する残りの手順を示すフローチャートである。
【図６】図６は、判定時点と記録モードの切り替えタイミングとの関係を示す概念図である。
【図７】図７は、第２の実施形態のシーケンシャル書き込みを判定する一部手順を示すフローチャートである。
【図８】図８は、第３の実施形態のシーケンシャル書き込みを判定する一部手順を示すフローチャートである。
【発明を実施するための形態】
【０００８】
ＳＳＤ（Solid  State  Drive）において、データの消去単位（ブロック）と、データの管理単位が異なる場合、フラッシュメモリの書き換えが進むと、無効な（最新ではない）データによって、ブロックは穴あき状態になる。このような穴あき状態のブロックが増えると、実質的に使用可能なブロックが少なくなり、フラッシュメモリの記憶領域を有効利用できなくなる。そこで、例えば、フラッシュメモリのフリーブロック（有効データを含まない用途未割り当てのブロック）が所定の閾値より少なくなった場合、有効な最新のデータを集めて、違うブロックに書き直すコンパクションなどのフラッシュメモリの整理を実行し、用途未割り当てのフリーブロックを確保する。
【０００９】
コンパクションが発生すると、ホストからのデータを書き込んだり、ホストから指定されるデータを読み出したりするＳＳＤ本来の処理に影響を与えてＳＳＤの性能が低下する。このためコンパクションは、できるだけ発生し難くするほうが望ましい。
【００１０】
ＳＬＣモードおよびＭＬＣモードでの記録が可能なＳＳＤにおいて、ホストからのデータをＳＬＣモードで書きこむと、高速に書き込みができるが、コンパクションが発生すると、ホストからのデータの書き込みと、コンパクションでの書き込みが並行して発生し、ＳＳＤの書き込み速度が低下したりする場合がある。
【００１１】
通常のＰＣユーザの用途においては、ＳＳＤへの書き込みアドレス範囲は限定されるため、ほとんどの書き込みがＳＬＣモードでの記録で完結し、コンパクションが発生しないため、ＳＳＤの書き込み速度が低下したりすることはない。
【００１２】
一方、ＳＳＤのフラッシュメモリの全面に対するシーケンシャルライト（ＬＢＡアドレスが基本的には連続する書き込み）を実施するような用途の場合、ホストからのデータをＳＬＣモードでフラッシュメモリに書き込んでいると、４値のＭＬＣモードが採用されている場合、フラッシュメモリのＭＬＣ換算の容量のおよそ半分まで書き込んだところで、ブロックを使い切る。その後は、ホストからの書き込みに並行して、すでに書き込まれたＳＬＣモードのブロックのデータをＭＬＣモードで書き直す、コンパクション処理が動作し続けることになる。
【００１３】
この時、ホストから書き込まれるデータ量が１だとすると、ＳＬＣモードで書くデータ量が２(ＭＬＣモードの半分)で、コンパクション処理でＭＬＣモードで書き直すデータ量が１で、トータル３のデータ書き込みがフラッシュメモリに発生し、書き込み効率＝３となる。なお、書き込み効率とは、所定期間内における、ホストから書き込んだデータ量に対する、ブロックの消去量の統計値のことであり、小さいほどフラッシュメモリの消耗度が小さい。
【００１４】
また、産業機器(たとえばデジタルビデオレコーダ)などのリアルタイム性が要求される用途では、コンパクションの有無によって性能が変動するドライブは使いづらいという問題がある。
【００１５】
そこで、本実施形態では、シーケンシャルライトのような書き込みパターンを予測し、シーケンシャルライトと予測された場合には、ＭＬＣモードでデータを書き込み、コンパクションを発生しにくくする。書き込みパターンの予測処理が複雑であると、その予測処理がオーバヘッドとなり、基本性能が低下してしまうため、本実施形態では、経験則に基づく、簡単かつ軽量な予測方法を用いる。シーケンシャルライトの他に、短期的にはドライブの狭いアドレス範囲の書き込みが複数回実行されて、アクセスされるアドレス範囲が順次移動されて、長期的にはドライブ全面にわたって書き込みをするようなアクセスパターンにおいても、ＭＬＣモードで書き込めば、コンパクションが発生しにくくなるため、本実施形態では、このようなパターンも予想できるようにする。
【００１６】
以下に添付図面を参照して、実施形態にかかる半導体記憶装置の制御方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【００１７】
（第１の実施形態）
図１は、ＳＳＤ（Solid  State  Drive）１００の構成例を示すブロック図である。ＳＳＤ１００は、ＡＴＡインタフェース（ＡＴＡ  Ｉ／Ｆ）などのホストインタフェース２を介してパーソナルコンピュータあるいはＣＰＵなどのホスト装置（以下、ホストと略す）１と接続され、ホスト１の外部記憶装置として機能する。ホスト１は、例えば、パーソナルコンピュータ、スチルカメラ、ビデオカメラなどの撮像装置のＣＰＵである。ＳＳＤ１００は、ホストインタフェース２と、不揮発性半導体メモリとしてのＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤと略す）１０と、ＮＡＮＤ１０よりも高速アクセスが可能な半導体メモリであるＲＡＭ２０と、コントローラ３０とを備える。
【００１８】
ＮＡＮＤ１０は、ホスト１によって指定されたユーザデータを記憶したり、ＲＡＭ２０で管理される管理情報をバックアップ記憶したりする。ＮＡＮＤ１０は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有する。ＮＡＮＤ１０は、複数のメモリチップによって構成され、各メモリチップは、データ消去の単位であるブロックを複数配列して構成される。また、ＮＡＮＤ１０では、ページごとにデータの書き込み及びデータの読み出しが行われる。ブロックは、複数のページによって構成されている。ＮＡＮＤ１０は、データ書込みの動作モードを、ＳＬＣモードとＭＬＣモードのうちの何れかに切り替え可能なフラッシュメモリである。すなわち、ブロックに対しＳＬＣモードで書き込むことも可能であるし、ＭＬＣモードで書き込むことも可能である。
【００１９】
ＲＡＭ２０は、ホスト１からのデータをＮＡＮＤ１０にライトする際に一時的にデータを保存するためのライトバッファ２５としての記憶領域と、ＮＡＮＤ１０で不揮発記憶される管理情報を記憶、更新するための記憶領域と、ＮＡＮＤ１０からリードされたデータを一時記憶するなどのための作業領域とを有する。
【００２０】
ホスト１は、ＳＳＤ１００に対しデータをライトする際には、ホストインタフェース２を介して論理アドレスとしてのＬＢＡ（Logical Block Addressing）と、データサイズとを含むライトコマンドとライトデータとをＳＳＤ１００に入力する。ＬＢＡは、セクタ（サイズ：例えば５１２Ｂ）に対して０からの通し番号をつけた論理アドレスであり、データの先頭アドレスを示している。データサイズは、データのセクタ数を示している。本実施の形態においては、ライトバッファ２５，ＮＡＮＤ１０でデータを管理する単位として、セクタサイズよりも大きく、物理ブロックサイズよりも小さい管理単位を使用する。管理単位がブロックサイズと異なるので、ＮＡＮＤ１０の書き換えが進むと、前述したコンパクションが必要となる。
【００２１】
コントローラ３０は、本実施形態に関係する構成要素として、コマンド判定部３１、カウンタ３２、ＳＬＣ／ＭＬＣ判定部３３、ブロック供給部３４，整理部３５、ライト制御部３６を備える。
【００２２】
コマンド判定部３１は、ホスト１から受信したコマンドを解析し、その解析結果に基づいて、カウンタ３２の更新を行う。
【００２３】
カウンタ３２は、コマンド判定部３１によってその計数値が更新されるもので、このカウント値を使用してＳＬＣモードを選択するかＭＬＣモードを選択するかの切り替えが行われる。
【００２４】
ＳＬＣ／ＭＬＣ判定部３３は、カウンタ３２のカウント値を閾値Ｔ１と比較し、カウント値が閾値Ｔ１以上である場合は、ＭＬＣモードを選択し、カウント値が閾値Ｔ１未満である場合は、ＳＬＣモードを選択する。
【００２５】
ブロック供給部３４は、用途未割り当てのフリーブロックを整理部３５、ライト制御部３６に供給する。ブロック供給部３４は、フリーブロックをライト制御部３６に供給する際には、ＳＬＣ／ＭＬＣ判定部３３の判定結果とともにフリーブロックをライト制御部３６に供給する。
【００２６】
整理部３５は、ＮＡＮＤ１０でのデータ整理（コンパクション）を実行する。すなわち、ＮＡＮＤ１０のフリーブロックが所定の閾値より少なくなった場合、ブロック内の有効データを集めて別のブロックに書き直すコンパクションを実行し、フリーブロックを確保する。整理部３５は、最初にＳＬＣモードのブロックをコンパクション元のブロックとして、コンパクション先のブロックにＭＬＣモードでの書き込みを行うコンパクションを行い、フリーブロックが十分に確保できなかった場合に、次に、ＭＬＣモードのブロックをコンパクション元のブロックとして、コンパクション先のブロックにＭＬＣモードでの書き込みを行うコンパクションを行なう。コンパクション先のブロックは、ブロック供給部３４から供給されるフリーブロックを使用する。整理部３５は、コンパクションに伴って、データの論理アドレス（ＬＢＡ）とＮＡＮＤ１０の記録位置を示す物理アドレスとの対応を管理する管理情報を更新する。
【００２７】
ライト制御部３６は、ホスト１からのライトデータを一旦ライトバッファ２５にバッファリングした後、ライトデータをＮＡＮＤ１０に書き込む。ライト制御部３６は、ＮＡＮＤ１０へのデータ書込みの際、ブロック供給部３４から供給されるフリーブロックを使用し、かつ指示された記録モード（ＳＬＣモードおよびＭＬＣモードの何れか）に従って、データの書き込みを行う。ライト制御部３６は、ＮＡＮＤ１０への書き込みに伴い、書き込みデータの論理アドレス（ＬＢＡ）とＮＡＮＤ１０の記録位置を示す物理アドレスとの対応を管理する管理情報を更新する。
【００２８】
図２は、ＳＳＤ１００でのブロック管理を概念的に示す図である。ブロックは、内部に有効データを含むアクティブブロックと、内部に有効データを含まない、用途未割り当てのフリーブロックに分類される。例えば、同じＬＢＡのデータを上書きする場合は、つぎのような処理が行われる。論理アドレスＡ１にブロックサイズの有効なデータが保存されており、記憶領域としてはブロックＢ１が使用されていたとする。ホスト１から論理アドレスＡ１のブロックサイズの更新データを上書きするコマンドを受信した場合、フリーブロック（ブロックＢ２とする）を１個確保し、そのフリーブロックにホスト１から受信したデータを書き込む。その後、論理アドレスＡ１とブロックＢ２を関係付ける。その結果、ブロックＢ２はアクティブブロックＡＢになり、ブロックＢ１に保存されたデータは無効になるためブロックＢ１はフリーブロックＦＢとなる。
【００２９】
このように、ＳＳＤ１００では、同じ論理アドレスＡ１のデータであっても、実際の記録領域として使用されるブロックは書込みの度に変化する。なお、ブロックサイズの更新データ書き込みでは、必ず書き込み先ブロックが変化するが、ブロックサイズ未満の更新データ書き込みでは、同じブロックに更新データが書き込まれることもある。例えばブロックサイズ未満のページデータが更新される場合、当該ブロック内において同じ論理アドレスの旧ページデータが無効化され、新たに書き込まれた最新のページデータが有効ページとして管理される。ブロック内の全データが無効化されると、当該ブロックはフリーブロックＦＢとして解放される。
【００３０】
ホスト１からのデータは、書き込み先ブロック（フリーブロック）に書き込まれる。この書き込み先ブロックへの書き込みの際、ＳＬＣ／ＭＬＣ判定部３３の判定結果に基づき、ＳＬＣモードおよびＭＬＣモードの何れかで書き込みが行われる。ＳＬＣモードで書き込まれたブロックはＳＬＣアクティブブロックとなり、ＭＬＣモードで書き込まれたブロックはＭＬＣアクティブブロックとなる。このように、ＮＡＮＤ１０では、ＳＬＣアクティブブロックとＭＬＣアクティブブロックとが混在している。アクティブブロックは、ＮＡＮＤ１０の書き換えが進むと、フリーブロックとして解放されたり、コンパクションでの書き込み元のブロックを経てフリーブロックとして解放されたりする。フリーブロックは、その後、ホスト１からのユーザデータをライトするための書き込み先ブロックや、コンパクションにおいてデータをライトするためのコンパクション先ブロックとして利用される。
【００３１】
図３は、整理部３５が行うコンパクション処理手順を示すフローチャートである。整理部３５は、フリーブロック（ＦＢ）の個数が閾値Ｋを下回ったと判断すると（ステップＳ１００）、まずＳＬＣアクティブブロックをコンパクション元のブロックとし、コンパクション元のブロックから有効データを集め、集めた有効データをコンパクション先のフリーブロックにＭＬＣモードでの書き込みを行う第１のコンパクションを実行する（ステップＳ１１０）。この第１のコンパクションによってフリーブロックの個数が閾値Ｋ以上となったと判断すると（ステップＳ１２０）、整理部３５はこの時点でＮＡＮＤ整理を終了する。しかし、第１のコンパクションによってフリーブロックの個数が閾値Ｋ以上とならなかった場合、整理部３５は、ＭＬＣアクティブブロックをコンパクション元のブロックとし、コンパクション元のブロックから有効データを集め、集めた有効データをコンパクション先のフリーブロックにＭＬＣモードでの書き込みを行う第２のコンパクションを実行する（ステップＳ１３０）。整理部３５は、このＮＡＮＤ整理に伴って、データの論理アドレス（ＬＢＡ）とＮＡＮＤ１０の記録位置を示す物理アドレスとの対応を管理する管理情報を更新する。
【００３２】
図４は、第１の実施形態でのコントローラ３０のコマンド判定部３１の動作手順を示すフローチャートである。第１の実施形態では、連続書き込みであることを、アドレスの連続性を見て判定する。すなわち、アドレスが連続するライト要求が所定回数以上連続すれば、その後も連続書き込みが続くと予測し、ＭＬＣモードでデータをＮＡＮＤ１０に書き込む。
【００３３】
ＳＳＤ１００が起動されると（ステップＳ２００）、コマンド判定部３１は、カウンタ変数countを０に初期化するとともに、終端アドレス変数last_lbaを無効値（例えば−１）に初期化する（ステップＳ２１０）。カウンタ変数countはカウンタ３２として示しており、カウンタ３２のカウント値によってアドレスの連続性を判定する。終端アドレス変数last_lbaは、ホスト１からの前回のライトコマンドが指定する終端アドレスに続く次アドレス（終端アドレス＋１のアドレス）を示している。終端アドレス変数last_lbaに代入されるアドレスをこの後、終端＋１アドレスと呼称する。
【００３４】
ホスト１からライトコマンドが入力されると（ステップＳ２２０）、コマンド判定部３１は、コマンドを解釈する。ライトコマンドには、前述したように、ライトデータの先頭アドレスを示すアドレス情報ＡＤと、データサイズを示すセクタ数ＳＺが含まれている。コマンド判定部３１は、変数lbaにライトコマンドのアドレス情報ＡＤを代入し、変数sector_countにセクタ数ＳＺを代入する（ステップＳ２３０）。
【００３５】
コマンド判定部３１は、変数lbaと変数last_lbaを比較し（ステップＳ２４０）、これらが不一致の場合は、変数countを０にクリアし（ステップＳ２５０）、これらが一致している場合は、変数count、すなわちカウンタ３２を＋１する（ステップＳ２６０）。さらに、コマンド判定部３１は、変数lbaに変数sector_countを加えた値、すなわち今回のライトコマンドで指定されるデータの終端アドレスに続く次アドレスである終端＋１アドレスを変数last_lbaに代入する（ステップＳ２７０）。このような処理を、ＳＳＤ１００がシャットダウンされるまで（ステップＳ２８０）、繰り返し実行する。
【００３６】
ライトコマンドが最初に受信された段階では、変数last_lbaに無効値が設定されているので、ステップＳ２４０は不一致となり、変数countを０にクリアされて（ステップＳ２５０）、今回のライトコマンドの終端アドレスに続く次アドレスである終端＋１アドレスが変数last_lbaに設定される（ステップＳ２７０）。したがって、この後、連続するアドレスを含むライトコマンドがホスト１から入力された場合は、ステップＳ２４０の比較が一致となり、変数countが順次カウントアップされていく。一方、不連続のアドレスを含むライトコマンドがホスト１から入力された場合は、ステップＳ２４０の比較が不一致となり、変数countが０にクリアされる。
【００３７】
図５は、ＳＬＣ／ＭＬＣ判定部３３の動作手順を示すフローチャートである。ＳＬＣ／ＭＬＣ判定部３３は、変数countの値、すなわちカウンタ３２のカウント値を閾値Ｔ１と比較し（ステップＳ３００）、カウンタ３２のカウント値が閾値Ｔ１以上の場合は、ＭＬＣモードを選択し（ステップＳ３１０）、カウンタ３２のカウント値が閾値Ｔ１未満の場合は、ＳＬＣモードを選択する（ステップＳ３２０）。別言すれば、ＳＬＣ／ＭＬＣ判定部３３は、アドレスが連続するライト要求が閾値回数Ｔ１以上連続すれば、ＭＬＣモードを選択する。ＳＬＣ／ＭＬＣ判定部３３は、この選択した記録モードをブロック供給部３４に通知する。ブロック供給部３４は、ＳＬＣ／ＭＬＣ判定部３３の選択結果である記録モードと、データを書き込むべきフリーブロックを示すブロック番号をライト制御部３６に通知する。ライト制御部３６は、ブロック番号を通知されたフリーブロックを書き込み先ブロックとして用い、この書き込み先ブロックに対し、通知された記録モード（ＭＬＣモードまはたＳＬＣモード）による書き込みを行う。
【００３８】
これにより、アドレスが一定サイズ以上連続している場合は、ＭＬＣモードによる書き込みが行われ、それ以外の場合は、ＳＬＣモードによる書き込みが行われることになる。
【００３９】
ただし、図６に示すように、ブロック途中での記録モードの切替えは行わない。例えば、あるブロックＡ１に対し、ＳＬＣモードでデータを書き込んでいる途中の段階で、記録モードをＳＬＣモードからＭＬＣモードに切り替える判定結果がでた場合でも、ブロックＡ１に対しては、ＳＬＣモードでデータを書き続ける。すなわち、ブロックへのデータの書き込み中に、記録モードをＳＬＣモードからＭＬＣモードに切り替える判定結果がでた場合、当該ブロックの書き込みが終了するまでは、記録モードの切り替えを行わない。そして、書き込み先ブロックが次のブロックＡ２に代わった段階で、記録モードをＳＬＣモードからＭＬＣモードに切り替えるようにする。ＭＬＣモードからＳＬＣモードへの切替えの際も同様であり、書き込み先ブロックが代わった段階で、記録モードの変更を行う。
【００４０】
このように第１の実施形態においては、ホストからの書き込みの際、アドレスが連続するライト要求が閾値回数Ｔ１以上連続していれば、ＭＬＣモードによる書き込みを行い、そうでない場合は、ＳＬＣモードによる書き込みを行うこととしており、シーケンシャルライトのような書き込みパターンが簡単かつ軽量な予測方法を用いて予測されることになり、また、コンパクションが発生し難くなり、ＳＳＤの書き込み速度の低下が抑制され、基本性能を低下させることなく書き込み効率のよい書き込み動作を実現することが可能となる。
【００４１】
（第２の実施形態）
第２の実施形態においては、アドレスの連続性を判定する際、所定の範囲内のアドレスのスキップ（飛び）を許容し、所定の範囲内のアドレスの飛びであれば、アドレスは連続していると判定する。すなわち、今回のライトコマンドと次回のライトコマンド間において、アドレスが完全に連続していなくても、所定の範囲内のアドレスの飛びであれば、アドレスは連続していると判定する。図７は、第２の実施形態のコマンド判定部３１の動作手順を示すフローチャートである。図７においては、図４のフローチャートにステップＳ２３１、Ｓ２３２を追加している。図７において、図４と同じ処理を行うステップに関しては、同一ステップ番号を付している。
【００４２】
ＳＳＤ１００が起動されると（ステップＳ２００）、コマンド判定部３１は、カウンタ変数countを０に初期化するとともに、終端アドレス変数last_lbaを無効値（例えば−１）に初期化する（ステップＳ２１０）。ホスト１からライトコマンドが入力されると（ステップＳ２２０）、コマンド判定部３１は、コマンドを解釈し、変数lbaにライトコマンドのアドレス情報ＡＤを代入し、変数sector_countにセクタ数ＳＺを代入する（ステップＳ２３０）。
【００４３】
コマンド判定部３１は、変数lbaと変数last_lbaの差分の絶対値δを計算する（ステップＳ２３１）。すなわち、このステップＳ２３１で、前回のライトコマンドで指定されるデータに関する終端アドレスに続く次アドレスである終端＋１アドレスと、今回のライトコマンドで指定されるデータに関する先頭アドレスとの差分を導出している。
【００４４】
つぎに、コマンド判定部３１は、差分δが閾値Ｔ２以上あるか否かを判定し、差分δが閾値Ｔ２以上ある場合はアドレスの連続性がないものと判断し、変数countを０にクリアし（ステップＳ２５０）、差分δが閾値Ｔ２未満である場合は、アドレスの連続性があるものと判断し、変数count、すなわちカウンタ３２を＋１する（ステップＳ２６０）。さらに、コマンド判定部３１は、変数lbaに変数sector_countを加えた値、すなわち今回のライトコマンドで指定されるデータの終端アドレスに続く次アドレスである終端＋１アドレスを変数last_lbaに代入する（ステップＳ２７０）。このような処理を、ＳＳＤ１００がシャットダウンされるまで（ステップＳ２８０）、繰り返し実行する。
【００４５】
ＳＬＣ／ＭＬＣ判定部３３は、図５と同様にして、記録モード（ＳＬＣモード、ＭＬＣモード）を判定する。すなわち、ＳＬＣ／ＭＬＣ判定部３３は、変数countの値、すなわちカウンタ３２のカウント値を閾値Ｔ１と比較し（ステップＳ３００）、カウンタ３２のカウント値が閾値Ｔ１以上の場合は、ＭＬＣモードを選択し（ステップＳ３１０）、カウンタ３２のカウント値が閾値Ｔ１未満の場合は、ＳＬＣモードを選択する（ステップＳ３２０）。以下、第１の実施形態と同様に動作する。なお、第１の実施形態は、第２の実施形態のステップＳ２３２において、δ＝０であるか否かを判定することに、相当する。
【００４６】
このように第２の実施形態においては、アドレスの連続性を判定する際、所定の範囲内のアドレスのスキップ（飛び）を許容し、所定の範囲内のアドレスの飛びであれば、アドレスは連続していると判定するようにしており、シーケンシャルライトに属する書き込みパターンが簡単かつ軽量な予測方法を用いて予測されることになり、また、コンパクションが発生し難くなり、ＳＳＤの書き込み速度の低下が抑制され、基本性能を低下させることなく書き込み効率のよい書き込み動作を実現することが可能となる。
【００４７】
（第３の実施形態）
第３の実施形態においては、シーケンシャル書き込みでよく使われるアクセスサイズ（セクタ数ＳＺ）と、シーケンシャル書き込みでよく使われるアドレス（ライトコマンドに含まれるアドレス情報ＡＤ）のアラインメントとを、予測の判定材料として追加し、予測の信頼性を向上させている。。図８は、第３の実施形態のコマンド判定部３１の動作手順を示すフローチャートである。図８では、図７に示す第２の実施形態の処理手順に、アクセスサイズおよびアドレスのアライメントを予測材料として追加している。図８においては、図７のフローチャートにステップＳ２３３、Ｓ２３４を追加している。図８において、図７と同じ処理を行うステップに関しては、同一ステップ番号を付している。
【００４８】
ＳＳＤ１００が起動されると（ステップＳ２００）、コマンド判定部３１は、カウンタ変数countを０に初期化するとともに、終端アドレス変数last_lbaを無効値（例えば−１）に初期化する（ステップＳ２１０）。ホスト１からライトコマンドが入力されると（ステップＳ２２０）、コマンド判定部３１は、コマンドを解釈し、変数lbaにライトコマンドのアドレス情報ＡＤを代入し、変数sector_countにセクタ数ＳＺを代入する（ステップＳ２３０）。
【００４９】
コマンド判定部３１は、変数lbaと変数last_lbaの差分の絶対値δを計算する（ステップＳ２３１）。つぎに、コマンド判定部３１は、差分δが閾値Ｔ２以上あるか否かを判定し、差分δが閾値Ｔ２以上ある場合はアドレスの連続性がないものと判断し、変数countを０にクリアする（ステップＳ２５０）。
【００５０】
差分δが閾値Ｔ２未満である場合、次に、コマンド判定部３１は、変数sector_countが所定の値Ｓ１に一致するか否かを判定する（ステップＳ２３３）。値Ｓ１としては、シーケンシャル書き込みでよく使われるアクセスサイズとして、例えば、１２８ＫｉＢが採用される。コマンド判定部３１は、変数sector_countが所定の値Ｓ１に一致しない場合は、シーケンシャル書き込みではないと判断し、変数countを０にクリアする（ステップＳ２５０）。
【００５１】
ステップＳ２３３の判断がＹｅｓの場合、次に、コマンド判定部３１は、変数lbaを値Ｓ１で割った剰余が０であるか否かを判定し、剰余が０でない場合、シーケンシャル書き込みではないと判断し、変数countを０にクリアする（ステップＳ２５０）。コマンド判定部３１は、剰余が０である場合、すなわちステップＳ２３２、ステップＳ２３３、ステップＳ２３４の条件が全て成立したときに、シーケンシャル書き込みであると判断し、変数count、すなわちカウンタ３２を＋１する（ステップＳ２６０）。さらに、コマンド判定部３１は、変数lbaに変数sector_countを加えた値、すなわち今回のライトコマンドで指定されるデータの終端アドレスに続く次アドレスである終端＋１アドレスを変数last_lbaに代入する（ステップＳ２７０）。このような処理を、ＳＳＤ１００がシャットダウンされるまで（ステップＳ２８０）、繰り返し実行する。
【００５２】
ＳＬＣ／ＭＬＣ判定部３３は、図５と同様にして、記録モード（ＳＬＣモード、ＭＬＣモード）を判定する。すなわち、ＳＬＣ／ＭＬＣ判定部３３は、変数countの値、すなわちカウンタ３２のカウント値を閾値Ｔ１と比較し（ステップＳ３００）、カウンタ３２のカウント値が閾値Ｔ１以上の場合は、ＭＬＣモードを選択し（ステップＳ３１０）、カウンタ３２のカウント値が閾値Ｔ１未満の場合は、ＳＬＣモードを選択する（ステップＳ３２０）。以下、第１の実施形態と同様に動作する。
【００５３】
なお、図８では、アクセスサイズ（ステップＳ２３３）およびアドレスのアライメント（ステップＳ２３４）を予測の判断材料として第２の実施形態の処理手順に追加したが、アクセスサイズ（ステップＳ２３３）およびアドレスのアライメント（ステップＳ２３４）の何れか一方を第２の実施形態の処理手順に追加することにしてもよい。また、第１の実施形態の処理手順に対し、アクセスサイズ（ステップＳ２３３）およびアドレスのアライメント（ステップＳ２３４）のうちの少なくとも一方を、予測の判断材料として追加するようにしてもよい。
【００５４】
このように第３の実施形態では、シーケンシャル書き込みでよく使われるアクセスサイズ、アドレスのアライメントの少なくとも一方を予測の判断材料として追加しているので、簡単な手法で、シーケンシャル書き込みを予測するときの信頼性を向上させることが可能となる。
【００５５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５６】
１  ホスト、２  ホストインタフェース、１０  ＮＡＮＤ、２０  ＲＡＭ、２５   ライトバッファ、３０  コントローラ、３１  コマンド判定部、３２  カウンタ、３３  ＳＬＣ／ＭＬＣ判定部、３４  ブロック供給部、３５  整理部、３６  ライト制御部。
【図１】
0005687649.tif 000002
【図２】
0005687649.tif 000003
【図３】
0005687649.tif 000004
【図４】
0005687649.tif 000005
【図５】
0005687649.tif 000006
【図６】
0005687649.tif 000007
【図７】
0005687649.tif 000008
【図８】
0005687649.tif 000009