(57)【要約】【課題】半導体記憶装置の性能を向上させる。【解決手段】  実施形態の半導体記憶装置は、一括して無効化されることになるデータの集合である複数のストリームデータのそれぞれを識別可能に送信するホストと通信可能である。また、第１の単位ごとにデータの書き込みが行われ、複数の第１の単位からなる第２の単位ごとにデータの消去が行われるｍ個（ｍは２以上の自然数）の不揮発性半導体メモリを具備する。さらに、データを一時的に格納するバッファと、ライトコマンドに関連付けられたデータを、不揮発性半導体メモリのうちのＮ個（Ｎはｍ≧Ｎを満たす自然数）へ書き込むコントローラを具備する。コントローラは、第２の単位の１つには同一と識別されるストリームデータを書き込み、ホストからのデータの受信状況に応じてＮを変更して、バッファに格納されたデータを、第１の単位のサイズごとに不揮発性半導体メモリへ書き込む。【選択図】図２５
2018022275.tif 000002
【特許請求の範囲】
【請求項１】
一括して無効化されることになるデータの集合である複数のストリームデータのそれぞれを識別可能に送信するホストと通信可能である半導体記憶装置であって、
第１の単位ごとにデータの書き込みが行われ、複数の前記第１の単位からなる第２の単位ごとにデータの消去が行われるｍ個（ｍは２以上の自然数）の不揮発性半導体メモリと、
前記ホストと前記不揮発性半導体メモリとの間でデータを一時的に格納するバッファと、
前記ホストから受信したライトコマンドに関連付けられたデータを、前記不揮発性半導体メモリのうちのＮ個（Ｎはｍ≧Ｎを満たす自然数）へ書き込むコントローラと、
を具備し、
前記コントローラは、
前記第２の単位の１つには同一と識別されるストリームデータを書き込み、
前記ホストからのデータの受信状況に応じて前記Ｎを変更して
前記バッファに格納されたデータを、前記第１の単位のサイズごとに前記不揮発性半導体メモリへ書き込む
半導体記憶装置。
【請求項２】
前記コントローラは、
前記バッファに格納されているデータの量が増加し、第１の閾値以上となったことに応じて前記Ｎを減少させ、
前記バッファに格納されているデータの量が減少し、第２の閾値以下となったことに応じて前記Ｎを増大させる
請求項１に記載の半導体記憶装置。
【請求項３】
前記コントローラは、
ストリームデータ内に含まれる各データの記憶先を示す論理アドレスの連続性に応じて前記Ｎをさらに変更する
請求項１に記載の半導体記憶装置。
【請求項４】
前記コントローラは、
前記論理アドレスが連続した累積数を記憶し、
前記累積数が所定の閾値以上となったことに応じて前記Ｎを増大させる
請求項３に記載の半導体記憶装置。
【請求項５】
前記コントローラは、
ストリームデータを識別する識別子の割り当てを要求する第１のコマンドを前記ホストから受信したことに応じて、前記識別子を前記ホストへ供給する
請求項１に記載の半導体記憶装置。
【請求項６】
前記コントローラは、
前記識別子を前記ホストへ割り当てたことに応じて、前記識別子の個数を数えるカウンタの値を増大させ、
前記割り当てられた識別子の解放を要求する第２のコマンドを前記ホストから受信したことに応じて、前記カウンタの値を減少させる
請求項５に記載の半導体記憶装置。
【請求項７】
前記コントローラは、
前記カウンタの値が増加し、第１の閾値以上となったことに応じて前記Ｎを減少させ、
前記カウンタの値が減少し、第２の閾値以下となったことに応じて前記Ｎを増大させる
請求項６に記載の半導体記憶装置。
【請求項８】
前記コントローラは、
前記識別子のうち前記ホストがストリームデータの送信を開始した識別子に対応する前記カウンタの値が増加し、第１の閾値以上となったことに応じて前記Ｎを減少させ、
前記識別子のうち前記ホストがストリームデータの送信を開始した識別子に対応する前記カウンタの値が減少し、第２の閾値以下となったことに応じて前記Ｎを増大させる
請求項６に記載の半導体記憶装置。
【請求項９】
前記コントローラは、
前記割り当てられた識別子の個数の報告を要求する第３のコマンドを前記ホストから受信したことに応じて、前記カウンタの値を前記ホストに報告する
請求項７又は請求項８に記載の半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、半導体記憶装置に関する。
【背景技術】
【０００２】
不揮発性半導体メモリを有する半導体記憶装置においては、信頼性維持のためのイレース回数の低減と、高いリードライト性能の両立が求められる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１２／０２５４５２４号明細書
【非特許文献１】SCSI Block Command -4、http://www.t10.org/drafts.htm#SBC_Family
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明が解決しようとする課題は、半導体記憶装置の性能を向上させることにある。
【課題を解決するための手段】
【０００５】
上記課題を達成するために、実施形態の半導体記憶装置は、一括して無効化されることになるデータの集合である複数のストリームデータのそれぞれを識別可能に送信するホストと通信可能である。また、第１の単位ごとにデータの書き込みが行われ、複数の第１の単位からなる第２の単位ごとにデータの消去が行われるｍ個（ｍは２以上の自然数）の不揮発性半導体メモリを具備する。さらに、データを一時的に格納するバッファと、ライトコマンドに関連付けられたデータを、不揮発性半導体メモリのうちのＮ個（Ｎはｍ≧Ｎを満たす自然数）へ書き込むコントローラを具備する。
【０００６】
コントローラは、第２の単位の１つには同一と識別されるストリームデータを書き込み、ホストからのデータの受信状況に応じてＮを変更して、バッファに格納されたデータを、第１の単位のサイズごとに不揮発性半導体メモリへ書き込む。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態の半導体記憶装置の構成を説明するブロック図である。
【図２】第１の実施形態の物理ページ及び物理ブロックの構成を説明する図である。
【図３】第１の実施形態のＮＡＮＤ型フラッシュメモリの構成を説明するブロック図である。
【図４】第１の実施形態の論理ページの構成を説明する図である。
【図５】第１の実施形態の論理ブロックの構成を説明する図である。
【図６】第１の実施形態のデータパケットの構成を説明する図である。
【図７】第１の実施形態の第１のライト方法を説明する図である。
【図８】第１の実施形態におけるライトバッファのデータ格納量の変化を説明する図である。
【図９】第１の実施形態の第２のライト方法を説明する図である。
【図１０】第１の実施形態におけるライトバッファのデータ格納量の変化を説明する図である。
【図１１】第１の実施形態の第３のライト方法を説明する図である。
【図１２】第１の実施形態におけるライトバッファのデータ格納量の変化を説明する図である。
【図１３ａ】第１の実施形態の第１のライト方法に対応するライトデータ配置テーブルの構成を説明する図である。
【図１３ｂ】第１の実施形態の第２のライト方法に対応するライトデータ配置テーブルの構成を説明する図である。
【図１３ｃ】第１の実施形態の第３のライト方法に対応するライトデータ配置テーブルの構成を説明する図である。
【図１４】第１の実施形態のデータパケット生成部の構成を説明する図である。
【図１５】ＳＣＳＩ規格のＳＴＲＥＡＭ  ＣＯＮＴＲＯＬコマンドを説明する図である。
【図１６】ＳＣＳＩ規格のＷＲＩＴＥ  ＳＴＲＥＡＭコマンドを説明する図である。
【図１７】ＳＡＳ規格でストリームデータを転送する場合のプロトコルを説明する図である。
【図１８】ＳＡＳ規格でストリームデータを転送する場合のプロトコルを説明する図である。
【図１９】第１の実施形態のストリーム制御部の構成を説明するブロック図である。
【図２０】第１の実施形態の論理ブロックに割り当てられるストリームＩＤを説明する図である。
【図２１】第１の実施形態の論理ブロック管理テーブルの構成を説明する図である。
【図２２】第１の実施形態におけるライトバッファのデータ格納量の変化を説明する図である。
【図２３】第１の実施形態におけるライトバッファのデータ格納量の変化を説明する図である。
【図２４】第１の実施形態のデータパケット生成部の動作を説明するフローチャートである。
【図２５】第１の実施形態のライト方法の変更条件を説明する図である。
【図２６】ＳＣＳＩ規格のＷＲＩＴＥ  ＳＴＲＥＡＭコマンドが複数発行される時の状態を説明する図である。
【図２７】第２の実施形態の半導体記憶装置がシーケンシャル性を判定するためのアルゴリズムを説明する模式図である。
【図２８】第２の実施形態のロングシーケンシャル判定テーブルの構成を説明する図である。
【図２９】第２の実施形態のロングシーケンシャル判定テーブルの更新手順を説明する図である。
【図３０】第２の実施形態の論理ブロック管理テーブルの構成を説明する図である。
【発明を実施するための形態】
【０００８】
以下、実施形態の半導体記憶装置を、図面を参照して説明する。なお、以下の説明において、同一の機能及び構成を有する構成要素については、共通する参照符号を付す。
【０００９】
［第１の実施形態］
図１は、第１の実施形態の半導体記憶装置１の構成を説明するブロック図である。
【００１０】
半導体記憶装置１は、ホスト２と通信し半導体記憶装置１全体の動作を制御するメモリコントローラ１０と、データを記憶する複数の不揮発性半導体メモリ２０と、を含む。以下の説明においては、不揮発性半導体メモリ２０からのデータのリードに必要な機能ブロックの説明は省略してある。
【００１１】
本実施形態の説明では、ホスト２はＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）規格のインターフェースをサポートするコンピュータであるが、その他の規格、例えばＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）規格やＮＶＭｅ（ＮＶＭ  Ｅｘｐｒｅｓｓ）（登録商標）規格のインターフェースをサポートするコンピュータであってもよい。
【００１２】
メモリコントローラ１０は、例えばＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  ａ  Ｃｈｉｐ）として構成される半導体集積回路である。
【００１３】
本実施形態の不揮発性半導体メモリ２０はＮＡＮＤ型フラッシュメモリであるが、ＮＯＲ型フラッシュメモリやＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）など他の種類の不揮発性半導体メモリでもよい。
【００１４】
以下の説明においては、不揮発性半導体メモリ２０をＮＡＮＤ型フラッシュメモリ２０と表記することがある。また、本実施形態の半導体記憶装置１は１８チャネル（Ｃｈ）のＮＡＮＤ型フラッシュメモリ２０を有する。以下では各ＮＡＮＤ型フラッシュメモリ２０をＮＡＮＤ型フラッシュメモリＣｈ０〜Ｃｈ１７と表記する。チャネルの数は１８より多くても少なくてもよい。
【００１５】
メモリコントローラ１０は、ホスト２から受信したコマンドの解釈や実行などを行うホストインターフェース（ＩＦ）制御部１００と、ライトバッファの管理などを行うライトバッファ管理部２００と、ＮＡＮＤ型フラッシュメモリ２０へのデータのライトを管理するＮＡＮＤ管理部３００と、ホスト２からのコマンドで指定される論理アドレスとＮＡＮＤ型フラッシュメモリ２０の物理アドレスとの変換を行う論物変換テーブル４００と、ＦＷ（Ｆｉｒｍｗａｒｅ）に基づき半導体記憶装置１全体の制御を行うＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）５００と、を含む。
【００１６】
ライトバッファ管理部２００は、ホスト２より受信したデータを一時的に格納するライトバッファ２１０と、ライトバッファ２１０に格納するデータをデータパケットの形に加工するデータパケット生成部２２０と、ＮＡＮＤ型フラッシュメモリ２０へライトされるデータの配置テーブルを格納するライトデータ配置テーブル格納部２３０と、後述するストリームデータのライト制御を行うストリーム制御部２４０と、を含む。ホスト２より受信するデータは、ホスト２より受信するライトコマンドに関連付けられている。
【００１７】
本実施形態のライトバッファ２１０はＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）からなるメモリであるが、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）など他の種類のメモリを採用してもよい。
【００１８】
ＮＡＮＤ管理部３００は、ＮＡＮＤ型フラッシュメモリＣｈ０〜Ｃｈ１７のそれぞれに接続され、ＮＡＮＤ型フラッシュメモリ２０へのライト・リード・イレース等の動作を制御するＮＡＮＤコントローラ３１０（以下、ＮＡＮＤコントローラＣｈ０〜Ｃｈ１７と表記することがある）と、ライトバッファ２１０から読み出したデータパケットを各ＮＡＮＤコントローラ３１０に転送するバッファ読み出し制御部３２０と、を含む。
【００１９】
なお、ライトバッファ２１０及びＣＰＵ５００はメモリコントローラ１０に内蔵せず、別個の半導体集積回路としてもよい。また、以下の説明においてＦＷにより実行される機能の一部、又は、全部は専用のＨＷ（Ｈａｒｄｗａｒｅ）によっても実行可能であり、ＨＷにより実行される機能の一部、又は、全部をＦＷによって実行することも可能である。
【００２０】
次に、図２ａ及び図２ｂを参照して、本実施形態のＮＡＮＤ型フラッシュメモリ２０の物理ページ６００及び物理ブロック６１０の構成を説明する。
【００２１】
図２ａに示すように、ＮＡＮＤ型フラッシュメモリ２０に対するデータのリードライトにおける最小管理単位はクラスタ６２０と呼ばれる。本実施形態ではクラスタ６２０の大きさは４ｋＢである。また、ＮＡＮＤ型フラッシュメモリ２０のデータのリードライトが可能な最小の回路構成の単位（第１の単位）は物理ページ６００と呼ばれる。本実施形態では物理ページ６００の大きさは１６クラスタ（４ｋＢ×１６クラスタ＝６４ｋＢ）である。
【００２２】
また、図２ｂに示すように、ＮＡＮＤ型フラッシュメモリ２０のデータのイレースが可能な最小の回路構成の単位（第２の単位）は物理ブロック６１０と呼ばれる。本実施形態では物理ブロック６１０の大きさは２５６クラスタ、すなわち１６物理ページ（６４ｋＢ×１６物理ページ＝１０２４ｋＢ）である。なお、これら各単位のサイズは一例であり、これらの値に限定されるものではない。ＮＡＮＤ型フラッシュメモリ２０の寿命を延ばすためには、イレース回数をできるだけ少なくすることが望ましい。
【００２３】
なお、１つの物理ページ６００が２以上の物理ブロック６１０にまたがることはない。すなわち、１つの物理ページ６００にライトされたデータは一度にイレースされる。
【００２４】
次に、図３を参照して、本実施形態のＮＡＮＤ型フラッシュメモリ２０の構成を説明する。
【００２５】
ＮＡＮＤ型フラッシュメモリ２０は、データを一時的に格納するページバッファ２２と、データを不揮発的に記憶するメモリセル２４と、を含む。
【００２６】
本実施形態ではページバッファ２２の大きさは１物理ページ分のデータの大きさに等しい。すなわち、ページバッファ２２の大きさは１６クラスタである。ページバッファ２２に格納されたデータは、一度にメモリセル２４にライトすることが可能である。ライト性能を向上させるためには、ページバッファ２２のすべてをデータで満たしてからメモリセル２４へのライトを行う。
【００２７】
次に、図４を参照して、本実施形態のメモリコントローラ１０がＮＡＮＤ型フラッシュメモリ２０のデータをリードライトする単位である論理ページ７００の構成を説明する。
【００２８】
図４の１つのセルはクラスタ６２０を示す。各クラスタにはＭｅｄｉａ  Ｃｌｕｓｔｅｒ  Ｏｆｆｓｅｔと呼ばれる番号（以下、ＭＣＯと表記する）が割り当てられる。論理ページ７００内の各クラスタはＭＣＯによりその位置が特定される。
【００２９】
また、各ＮＡＮＤ型フラッシュメモリ２０に対応する横方向の１行（１６クラスタ）は物理ページ６００となる。すなわち、本実施形態では論理ページ７００の大きさは１８物理ページである。
【００３０】
次に、図５ａ及び図５ｂを参照して、本実施形態のメモリコントローラ１０がＮＡＮＤ型フラッシュメモリ２０のデータをイレースする単位である論理ブロック８００の構成を説明する。
【００３１】
図５ａに示すように、本実施形態では論理ブロック８００の大きさは１６論理ページである。各ＮＡＮＤ型フラッシュメモリ２０の全クラスタは、論理ブロック番号、論理ページ番号、ＭＣＯにより一意に特定される。
【００３２】
また、図５ｂに示すように、同一のＭＣＯ群を有する物理ページ６００の集合は一つの物理ブロック６１０に属する。例えば、ＭＣＯ＝０、１８、３６、・・・、２５２、２７０を有する物理ページ＃０〜物理ページ＃１５の集合はＮＡＮＤ型フラッシュメモリＣｈ０の１つの物理ブロック６１０に属する。ＭＣＯ＝１、１９、３７、・・・、２５３、２７１を有する物理ページ＃０〜物理ページ＃１５の集合はＮＡＮＤ型フラッシュメモリＣｈ１の１つの物理ブロック６１０に属する。同様に、ＭＣＯ＝１７、３５、５３、・・・、２６９、２８７を有する物理ページ＃０〜物理ページ＃１５の集合はＮＡＮＤ型フラッシュメモリＣｈ１７の１つの物理ブロック６１０に属する。
【００３３】
すなわち、各論理ブロック８００には、ＮＡＮＤ型フラッシュメモリＣｈ０の１つの物理ブロック〜ＮＡＮＤ型フラッシュメモリＣｈ１７の１つの物理ブロックの、合計１８物理ブロックが含まれる。メモリコントローラ１０は、ＮＡＮＤ型フラッシュメモリ２０のデータのイレースの最小単位である物理ブロック６１０ごとではなく、論理ブロック８００ごとにイレース処理を行う。
【００３４】
次に、図６を参照して、本実施形態のデータパケット９００の構成を説明する。
【００３５】
データパケット生成部２２０は、ホストＩＦ制御部１００から受信したデータを、１クラスタ毎にヘッダーを付加してデータパケット９００として生成する。生成されたデータパケット９００はライトバッファ２１０に格納される。
【００３６】
ヘッダーにはＮＡＮＤ管理部３００による制御のための情報が格納されている。
【００３７】
ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）はホスト２が管理しているセクター単位（例えば５１２Ｂ）の論理アドレスで、データパケット９００に格納されているデータの先頭セクターのＬＢＡを示す。
【００３８】
論理ブロック番号、論理ページ番号、ＭＣＯは、前述のようにデータパケット９００に格納されているデータがどのＮＡＮＤ型フラッシュメモリ２０のどのクラスタにライトされるべきかを示す。ストリームＩＤは後述するストリームデータを識別するための識別子である。ライト方法は、後述するライト方法のどれを使用するのかを表す情報である。
【００３９】
次に、図７を参照して、本実施形態のメモリコントローラ１０がＮＡＮＤ型フラッシュメモリ２０へデータをライトする第１の方法を説明する。
【００４０】
第１の方法では、メモリコントローラ１０は、ホスト２より受信したデータを各論理ページ７００内のＭＣＯ順に配置する。すなわち、各論理ページ７００内で最初に受信したデータがＭＣＯ＝０に配置され、次に受信したデータがＭＣＯ＝１に配置され、次に受信したデータがＭＣＯ＝２に配置される。ＭＣＯ＝１７の次に受信したデータはＭＣＯ＝１８に配置される。以下では第１の方法を縦書きと表記する。
【００４１】
ホスト２より受信したデータのＬＢＡがシーケンシャルである場合、縦書きによってＮＡＮＤ型フラッシュメモリ２０へデータをライトしておけば、ＮＡＮＤ型フラッシュメモリ２０の各チャネルから同時にリードすることが可能であるため、シーケンシャルリード性能を向上させることができる。
【００４２】
図８は、本実施形態のメモリコントローラ１０が縦書きにより１論理ページ分のデータをＮＡＮＤ型フラッシュメモリ２０へライトする場合の、ライトバッファ２１０のデータ格納量の変化を説明する図である。
【００４３】
時刻Ｔ０において、データパケット生成部２２０は、ある論理ページ７００のＭＣＯ＝０にライトされるデータをライトバッファ２１０に格納する。その後、ＭＣＯ＝１のデータ、ＭＣＯ＝２のデータ・・・、が順にライトバッファ２１０に格納される。そして、ＭＣＯ＝２６９のデータまでライトバッファ２１０に格納された後、時刻Ｔ１において、ＭＣＯ＝２７０のデータがライトバッファ２１０に格納される。
【００４４】
ＭＣＯ＝２７０のデータがライトバッファ２１０に格納されると、ＮＡＮＤ型フラッシュメモリＣｈ０の１物理ページ分のデータがライトバッファ２１０に格納されたことになるので、バッファ読み出し制御部３２０は、ライトバッファ２１０からＮＡＮＤ型フラッシュメモリＣｈ０内のページバッファ２２へデータを転送する。
【００４５】
その後、同様にＭＣＯ＝２７１のデータがライトバッファ２１０に格納されると、ライトバッファ２１０からＮＡＮＤ型フラッシュメモリＣｈ１内のページバッファ２２へデータが転送され、ＭＣＯ＝２７２のデータがライトバッファ２１０に格納されると、ライトバッファ２１０からＮＡＮＤ型フラッシュメモリＣｈ２内のページバッファ２２へデータが転送され・・・、とデータの格納及び転送が行われる。
【００４６】
この時にライトバッファ２１０に格納されるデータの最大量（ΔＢｕｆｆ１８）は、ＭＣＯ＝０からＭＣＯ＝２７０までの２７１クラスタ分である。
【００４７】
次に、図９を参照して、本実施形態のメモリコントローラ１０がＮＡＮＤ型フラッシュメモリ２０へデータをライトする第２の方法を説明する。
【００４８】
第２の方法では、メモリコントローラ１０は、ホスト２より受信したデータをＮＡＮＤ型フラッシュメモリ２０の９チャネルごとにＭＣＯ順に配置する。すなわち、各論理ページ７００内で最初に受信したデータがＭＣＯ＝０に配置され、次に受信したデータがＭＣＯ＝１に配置され、次に受信したデータがＭＣＯ＝２に配置される。ＭＣＯ＝８の次に受信したデータはＭＣＯ＝１８に配置される。ＭＣＯ＝２７８の次に受信したデータはＭＣＯ＝９に配置される。
【００４９】
ここでは９チャネルごとにＭＣＯ順にライトする方法を説明したが、任意のＮチャネルごとにＭＣＯ順にライトすることも可能である。以下では、ＮチャネルごとにＭＣＯ順にライトする第２の方法を、Ｎチャネル折り返し書きと表記する。前述した縦書きは１８チャネル折り返し書きに相当する。
【００５０】
ホスト２より受信したデータのＬＢＡがシーケンシャルである場合、Ｎチャネル折り返し書きによってＮＡＮＤ型フラッシュメモリ２０へデータをライトしておけば、Ｎチャネルの範囲内でのシーケンシャルリード性能を向上させることができる。
【００５１】
図１０は、本実施形態のメモリコントローラ１０が９チャネル折り返し書きにより１論理ページ分のデータをＮＡＮＤ型フラッシュメモリ２０へライトする場合の、ライトバッファ２１０のデータ格納量の変化を説明する図である。
【００５２】
時刻Ｔ０において、データパケット生成部２２０は、ある論理ページ７００のＭＣＯ＝０にライトされるデータをライトバッファ２１０に格納する。その後、ＭＣＯ＝１のデータ、ＭＣＯ＝２のデータ・・・、が順にライトバッファ２１０に格納される。ＭＣＯ＝８のデータがライトバッファ２１０に格納された後は、ＭＣＯ＝１８のデータがライトバッファ２１０に格納される。そして、ＭＣＯ＝２６０のデータまでライトバッファ２１０に格納された後、時刻Ｔ１において、ＭＣＯ＝２７０のデータがライトバッファ２１０に格納される。
【００５３】
ＭＣＯ＝２７０のデータがライトバッファ２１０に格納されると、ＮＡＮＤ型フラッシュメモリＣｈ０の１物理ページ分のデータがライトバッファ２１０に格納されたことになるので、バッファ読み出し制御部３２０は、ライトバッファ２１０からＮＡＮＤ型フラッシュメモリＣｈ０内のページバッファ２２へデータを転送する。
【００５４】
その後、同様にＭＣＯ＝２７１のデータがライトバッファ２１０に格納されると、ライトバッファ２１０からＮＡＮＤ型フラッシュメモリＣｈ１内のページバッファ２２へデータが転送され、ＭＣＯ＝２７２のデータがライトバッファ２１０に格納されると、ライトバッファ２１０からＮＡＮＤ型フラッシュメモリＣｈ２内のページバッファ２２へデータが転送され・・・、とデータの格納及び転送が行われる。
【００５５】
同様に、ＭＣＯ＝９、１０、・・・、１７、２７、２８、・・・、２６８、２６９のデータがライトバッファ２１０に格納された後、時刻Ｔ２においてＭＣＯ＝２７９のデータがライトバッファ２１０に格納される。
【００５６】
ＭＣＯ＝２７９のデータがライトバッファ２１０に格納されると、ＮＡＮＤ型フラッシュメモリＣｈ９の１物理ページ分のデータがライトバッファ２１０に格納されたことになるので、バッファ読み出し制御部３２０は、ライトバッファ２１０からＮＡＮＤ型フラッシュメモリＣｈ９内のページバッファ２２へデータを転送する。
【００５７】
その後、同様にＭＣＯ＝２８０のデータがライトバッファ２１０に格納されると、ライトバッファ２１０からＮＡＮＤ型フラッシュメモリＣｈ１０内のページバッファ２２へデータが転送され、ＭＣＯ＝２８１のデータがライトバッファ２１０に格納されると、ライトバッファ２１０からＮＡＮＤ型フラッシュメモリＣｈ１１内のページバッファ２２へデータが転送され・・・、とデータの格納及び転送が行われる。
【００５８】
この時にライトバッファ２１０に格納されるデータの最大量（ΔＢｕｆｆ９）は、ＭＣＯ＝０、１、・・・、８、１８、１９、・・・、２５９、２６０、２７０までの１３６クラスタ分である。また、ＮＡＮＤ型フラッシュメモリＣｈ０内のページバッファ２２へのデータ転送が始まる時刻（Ｔ１）は縦書きの時よりも早い。
【００５９】
次に、図１１を参照して、本実施形態のメモリコントローラ１０がＮＡＮＤ型フラッシュメモリ２０へデータをライトする第３の方法を説明する。
【００６０】
第３の方法では、メモリコントローラ１０は、ホスト２より受信したデータをＮＡＮＤ型フラッシュメモリ２０のチャネルごとに配置する。すなわち、各論理ページ７００内で最初に受信したデータがＭＣＯ＝０に配置され、次に受信したデータがＭＣＯ＝１８に配置され、次に受信したデータがＭＣＯ３６に配置される。ＭＣＯ＝２７０の次に受信したデータはＭＣＯ＝１に配置される。以下では第３の方法を横書きと表記する。なお、横書きは１チャネル折り返し書きに相当する。
【００６１】
図１２は、本実施形態のメモリコントローラ１０が横書きにより１論理ページ分のデータをＮＡＮＤ型フラッシュメモリ２０へライトする場合の、ライトバッファ２１０のデータ格納量の変化を説明する図である。
【００６２】
時刻Ｔ０において、データパケット生成部２２０は、ある論理ページのＭＣＯ＝０にライトされるデータをライトバッファ２１０に格納する。その後、ＭＣＯ＝１８のデータ、ＭＣＯ＝３６のデータ・・・、が順にライトバッファ２１０に格納される。そして、ＭＣＯ＝２５２のデータまでライトバッファ２１０に格納された後、時刻Ｔ１において、ＭＣＯ＝２７０のデータがライトバッファ２１０に格納される。
【００６３】
ＭＣＯ＝２７０のデータがライトバッファ２１０に格納されると、ＮＡＮＤ型フラッシュメモリＣｈ０の１物理ページ分のデータがライトバッファ２１０に格納されたことになるので、バッファ読み出し制御部３２０は、ライトバッファ２１０からＮＡＮＤ型フラッシュメモリＣｈ０内のページバッファ２２へデータを転送する。
【００６４】
その後、同様にＭＣＯ＝１、１９、３７、・・・、２５３、２７１のデータがライトバッファ２１０に格納されると、時刻Ｔ２において、ライトバッファ２１０からＮＡＮＤ型フラッシュメモリＣｈ１内のページバッファ２２へデータが転送される。また、ＭＣＯ＝２、２０、３８、・・・、２５４、２７２のデータがライトバッファ２１０に格納されると、時刻Ｔ３において、ライトバッファ２１０からＮＡＮＤ型フラッシュメモリＣｈ２内のページバッファ２２へデータが転送され・・・、とデータの格納及び転送が行われる。
【００６５】
この時にライトバッファ２１０に格納されるデータの最大量（ΔＢｕｆｆ１）は、ＭＣＯ＝０、１８、３６、・・・、２５２までの１５クラスタ分である。また、ＮＡＮＤ型フラッシュメモリＣｈ０内のページバッファ２２へのデータ転送が始まる時刻（Ｔ１）は縦書きや９チャネル折り返し書きの時よりも早い。
【００６６】
これまで説明したように、Ｎチャネル折り返し書き（１≦Ｎ≦１８）では、Ｎが大きくなるにつれ、リード時のシーケンシャルリード性能が高い。一方で、Ｎが大きくなるにつれ、ライトバッファ２１０に格納されるデータ量も大きくなり、ライト性能の低下を招く可能性もある。
【００６７】
なお、上記の各ライト方法は半導体記憶装置１全体で１つに決められていてもよいし、論理ブロック８００ごとに変更されてもよいし、論理ページ７００ごとに変更されてもよい。
【００６８】
次に、図１３ａ〜図１３ｃを参照して、本実施形態のライトデータ配置テーブル格納部２３０に格納されるライトデータ配置テーブル１０００の構成を説明する。
【００６９】
図１３ａ〜図１３ｃにおいて、ＷｔＣｎｔはライトバッファ２１０に格納されるデータのクラスタ単位での順番を示す。また、ＭＣＯは各ＷｔＣｎｔに対応するＭＣＯを示す。なお、各図は作図の都合上、それぞれ２つのテーブルとして描かれている。実際には、各テーブルは、それぞれＷｔＣｎｔ＝０〜２８７を有する１つのテーブルである。
【００７０】
図１３ａに示すライトデータ配置テーブル１０００ａは縦書き時に使用される。図１３ｂに示すライトデータ配置テーブル１０００ｂは９チャネル折り返し書き時に使用される。図１３ｃに示すライトデータ配置テーブル１０００ｃは横書き時に使用される。ライトデータ配置テーブル格納部２３０には、Ｎ＝１８（縦書き）、Ｎ＝９、Ｎ＝１（横書き）以外のＮチャネル折り返し書き用のライトデータ配置テーブル１０００が格納されていてもよい。
【００７１】
次に、図１４を参照して、本実施形態のデータパケット生成部２２０の詳細な構成を説明する。
【００７２】
データパケット生成部２２０は、ホストＩＦ制御部１００より受信したデータをパケットサイズ（４ｋＢ）に分割する。データパケット生成部２２０は、データを１クラスタ分受信すると、ライトカウンタ２２２をインクリメントさせる。データパケット生成部２２０は、データを１論理ページ分受信すると、論理ページカウンタ２２４をインクリメントさせる。ライトカウンタ２２２の値は前述したＷｔＣｎｔとなる。
【００７３】
また、データパケット生成部２２０は、後述するように論理ブロック管理テーブル１１００に現在のライト方法を保持する。データパケット生成部２２０は、ライト方法に応じたライトデータ配置テーブル１０００を、ＷｔＣｎｔをインデックスとして参照することでＭＣＯを求める。データパケット生成部２２０は、縦書きを使用している場合にはライトデータ配置テーブル１０００ａを参照する。データパケット生成部２２０は、９チャネル折り返し書きを使用している場合にはライトデータ配置テーブル１０００ｂを参照する。データパケット生成部２２０は、横書きを使用している場合にはライトデータ配置テーブル１０００ｃを参照する。
【００７４】
データパケット生成部２２０はこれらの情報を用いてデータパケット９００を生成する。生成されたデータパケット９００は、ライトバッファ２１０に格納される。
【００７５】
バッファ読み出し制御部３２０は、データパケット９００中のライト方法及びＭＣＯに従って、データパケット９００をバッファ２１０から読み出すタイミング、及び、データパケット９００をどのＮＡＮＤコントローラ３１０に転送するのかを判断する。これにより、前述したようなライト方法に応じたＮＡＮＤ型フラッシュメモリ２０へのデータのライトが実現される。
【００７６】
以上、本実施形態の半導体記憶装置１における、ＮＡＮＤ型フラッシュメモリ２０へのデータのライトについて説明した。以下では、ストリームデータのライトについて説明する。
【００７７】
近年では不揮発性半導体メモリのイレース回数を低減するために、同一のライフサイクルを有するデータの集合、すなわちホストが無効化する時には一括して無効化することになるデータの集合（以下、ストリームデータと呼ぶ）を、不揮発性半導体メモリの同一イレース単位内にまとめてライトする技術が導入されている。
【００７８】
ここで、ホストがあるデータを無効化する時には、ホストは、（１）当該データと同一の論理アドレスを指定するライトコマンドの発行及びライトデータの送信、（２）当該データに対する無効化を指示するコマンド（例えばＳＣＳＩ規格で規定されているＵＮＭＡＰコマンド）の発行、（３）記憶装置の全領域の初期化を指示するコマンド（例えばＳＣＳＩ規格で規定されているＦＯＲＭＡＴ  ＵＮＩＴコマンド）の発行、などを行いうる。
【００７９】
図１５及び図１６は、ＳＡＳ規格を含むＳＣＳＩ規格においてストリームデータのライトに使用されるコマンドの例を説明する図である。
【００８０】
図１５に示すＳＴＲＥＡＭ  ＣＯＮＴＲＯＬコマンドは、各ストリームデータを識別するための識別子（ストリームＩＤ）の割り当てをホスト２が半導体記憶装置１に要求するコマンドである。また、ＳＴＲＥＡＭ  ＣＯＮＴＲＯＬコマンドは、不要になったストリームＩＤの解放をホスト２が半導体記憶装置１に要求するためにも使用される。
【００８１】
ＳＴＲ＿ＣＴＬフィールドは、０１ｂがストリームＩＤの割り当て要求（ＯＰＥＮ）を表し、１０ｂがストリームＩＤの解放要求（ＣＬＯＳＥ）を表す。解放すべきストリームＩＤは、ＳＴＲ＿ＩＤフィールドで指定される。以下ではＳＴＲ＿ＣＴＬフィールドが０１ｂであるＳＴＲＥＡＭ  ＣＯＮＴＲＯＬコマンドをＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドと表記し、ＳＴＲ＿ＣＴＬフィールドが１０ｂであるＳＴＲＥＡＭ  ＣＯＮＴＲＯＬコマンドをＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＣＬＯＳＥ）コマンドと表記する。
【００８２】
図１６に示すＷＲＩＴＥ  ＳＴＲＥＡＭコマンドは、ストリームデータのライトに使用されるコマンドである。ホスト２はＳＴＲ＿ＩＤフィールドに、ＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドに応じて半導体記憶装置１が割り当てたストリームＩＤを指定して、半導体記憶装置１にコマンドを発行する。
【００８３】
次に、図１７を参照して、ＳＡＳ規格においてストリームデータを転送する場合のプロトコルの一例を説明する。なお、説明を簡略化するため、ＸＦＥＲ＿ＲＤＹフレームやＲＥＳＰＯＮＳＥフレーム、ＤＡＴＡフレーム等、ＳＡＳ規格においてコマンド実行に必要なフレームについての説明は省略してある。
【００８４】
まず、ホスト２がＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドを発行し、ストリームＩＤの割り当てを要求する。半導体記憶装置１はライトバッファ２１０の空きスペースを確保する等の処理を行った後、ストリームＩＤ＝１を割り当てたことをホスト２に通知する。同様に、半導体記憶装置１がストリームＩＤ＝２、３を割り当てたことが、ホスト２に通知されている。
【００８５】
ホスト２は、割り当てられたストリームＩＤ＝１、２、３を使ってＷＲＩＴＥ  ＳＴＲＥＡＭコマンドを発行し、ストリームデータの転送を行う。ホスト２は各ストリームデータのライフサイクルを把握している。ホスト２は異なるライフサイクルのストリームデータを、同一のストリームＩＤを用いて転送することはしない。例えば、ストリームＩＤ＝１のＷＲＩＴＥ  ＳＴＲＥＡＭコマンドによって転送されたデータは、ホスト２が無効化する時にはそのすべてを一括して無効化する。
【００８６】
ストリームデータの転送が完了すると、ホスト２はＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＣＬＯＳＥ）コマンドを発行し、不要になったストリームＩＤ＝１、２、３の解放を要求する。
【００８７】
ここで、ＳＡＳ規格においてはコマンドをキューイングして実行することが可能であるので、図１８に示すように、例えばストリームＩＤ＝１のストリームデータの転送がすべて完了する前に、ストリームＩＤ＝２やストリームＩＤ＝３のストリームデータを転送することが可能である。
【００８８】
次に、図１９を参照して、本実施形態のストリーム制御部２４０の詳細な構成を説明する。
【００８９】
ストリーム制御部２４０は、ホスト２に割り当てるストリームＩＤを管理するためのストリームＩＤ管理テーブル２４２を含む。ストリームＩＤ管理テーブル２４２は、ストリームＩＤ、Ｏｐｅｎフラグ、Ａｃｔｉｖｅフラグを有する。本実施形態では８個までのストリームＩＤがホスト２に割り当て可能である。
【００９０】
ホスト２からＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドを受信すると、ＣＰＵ５００は、ＦＷの制御に基づいてストリームＩＤ管理テーブル２４２から割り当て可能なストリームＩＤを検索し、割り当てたストリームＩＤをホスト２へ通知するようにホストＩＦ制御部１００を制御する。この時、ＣＰＵ５００は、当該ストリームＩＤについてストリームＩＤ管理テーブル２４２のＯｐｅｎフラグをセットする。
【００９１】
また、ホスト２からストリームデータの転送が開始されると、ホストＩＦ制御部１００はＤＡＴＡフレームのヘッダーを読み取り、各ストリームデータのストリームＩＤ（すなわちホスト２からのストリームデータの転送が実際に始まっているストリームＩＤ。以下、アクティブストリームＩＤと表記する）を、ストリーム制御部２４０に通知する。
【００９２】
アクティブストリームＩＤの通知を受けたストリーム制御部２４０は、当該ストリームＩＤについて、ストリームＩＤ管理テーブル２４２のＡｃｔｉｖｅフラグをセットする。
【００９３】
ストリームデータの転送完了後、ホスト２がＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＣＬＯＳＥ）コマンドを発行し、不要になったストリームＩＤの解放を要求すると、ＣＰＵ５００は当該ストリームＩＤについて、ストリームＩＤ管理テーブル２４２のＯｐｅｎフラグ及びＡｃｔｉｖｅフラグをクリアーする。
【００９４】
ＯｐｅｎフラグがセットされているストリームＩＤの数はオープンストリームカウンタ２４４によって数えられ、ＡｃｔｉｖｅフラグがセットされているストリームＩＤの数はアクティブストリームカウンタ２４６によって数えられる。図１９では、ストリームＩＤ＝１、２、３、４がホスト２に割り当て済みであり、ストリームＩＤ＝１、２についてストリームデータの転送が開始されている。従って、オープンストリームカウンタ２４４の値は４、アクティブストリームカウンタ２４６の値は２である。
【００９５】
アクティブストリームＩＤはデータパケット生成部２２０にも出力され、後述するように、各論理ブロック８００に適切なストリームデータがライトされるようにデータパケット９００が生成される。また、オープンストリームカウンタ２４４及びアクティブストリームカウンタ２４６の値もデータパケット生成部２２０に出力される。これらのカウンタの値は、ライト方法の変更条件として用いられる。
【００９６】
なお、ホスト２に割り当て可能なストリームＩＤ数以上のＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドを受信した場合には、半導体記憶装置１はホスト２にエラーを通知する。また、ＧＥＴ  ＳＴＲＥＡＭ  ＳＴＡＴＵＳコマンド（図示しない）により、割り当て済みのストリームＩＤの数を報告するように求められた場合には、オープンストリームカウンタ２４４の値を報告すればよい。
【００９７】
次に、図２０を参照して、本実施形態においてストリームデータをライトする時の、各論理ブロック８００に割り当てられるストリームＩＤの一例を説明する。図２０では、論理ブロック＃０〜＃６に割り当てられるストリームＩＤの一例が示されている。
【００９８】
前述したように、同一のストリームＩＤを有するストリームデータは一括して無効化される。メモリコントローラ１０がデータをイレースする単位である論理ブロック８００内に、複数のストリームＩＤが割り当てられることはない。すなわち、論理ブロック＃０〜＃６のそれぞれに、複数のストリームＩＤが割り当てられることはない。
【００９９】
一方で、論理ブロック＃１、＃２にストリームＩＤ＝２が割り当てられているように、複数の論理ブロック８００に１つのストリームＩＤが割り当てられてもよい。また、論理ブロック＃０、＃４のように、同一のストリームＩＤを有するストリームデータで論理ブロック８００のすべての領域がライトされない場合には、空きスペースにはゼロデータがライトされる。
【０１００】
次に、図２１を参照して、本実施形態のデータパケット生成部２２０に実装される論理ブロック管理テーブル１１００の構成の一例を説明する。
【０１０１】
ＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドに応じてストリームＩＤが割り当てられる時に、ＣＰＵ５００は、対応する論理ブロック８００の番号、及び、その論理ブロック８００のライトに使用されるライト方法を、論理ブロック管理テーブル１１００に登録する。ライト方法は、例えばシーケンシャルリード性能を重視して縦書きとする。
【０１０２】
図２１は、図２０に例示する各論理ブロック８００とストリームＩＤに対応している。すなわち、論理ブロック＃０にはストリームＩＤ＝１が、論理ブロック＃１と論理ブロック＃２にはストリームＩＤ＝２が、論理ブロック＃３と論理ブロック＃４にはストリームＩＤ＝３が、論理ブロック＃５にはストリームＩＤ＝４が、論理ブロック＃６にはストリームＩＤ＝５がそれぞれ割り当てられている。
【０１０３】
データパケット生成部２２０は、ホストＩＦ制御部１００から入力されるアクティブストリームＩＤをインデックスとして本テーブルを検索し、論理ブロック８００の番号及びライト方法を取得しデータパケット９００を生成する。
【０１０４】
次に、図２２を参照して、本実施形態のメモリコントローラ１０が複数のストリームデータをＮＡＮＤ型フラッシュメモリ２０へライトする場合の、ライトバッファ２１０のデータ格納量の変化の一例を説明する。図２２は、図２０及び図２１に例示する各論理ブロック８００とストリームＩＤに対応する。
【０１０５】
時刻Ｔ０において、データパケット生成部２２０は、縦書きによって論理ブロック＃０の論理ページ＃０にライトするストリームデータ（ストリームＩＤ＝１）をライトバッファ２１０へ格納し始める。一方で、ストリームＩＤ＝１のストリームデータがΔＢｕｆｆ１８だけライトバッファ２１０に格納された後、時刻Ｔ１において、ホスト２が、キューイングして実行しているストリームＩＤ＝２のストリームデータの転送を開始したとする。
【０１０６】
この場合、ストリームＩＤ＝１のストリームデータは、まだライトバッファ２１０からＮＡＮＤ型フラッシュメモリＣｈ０内のページバッファ２２へ転送されないが、データパケット生成部２２０は、縦書きによって論理ブロック＃１の論理ページ＃０にライトするストリームデータ（ストリームＩＤ＝２）をライトバッファ２１０へ格納しなければならない。
【０１０７】
同様に、ストリームＩＤ＝２のストリームデータがΔＢｕｆｆ１８だけライトバッファ２１０に格納された後、時刻Ｔ２において、ホスト２が、キューイングして実行しているストリームＩＤ＝３のストリームデータの転送を開始したとする。
【０１０８】
この場合も、ストリームＩＤ＝２のストリームデータは、まだライトバッファ２１０からＮＡＮＤ型フラッシュメモリＣｈ０内のページバッファ２２へ転送されないが、データパケット生成部２２０は、縦書きによって論理ブロック＃３の論理ページ＃０にライトするストリームデータ（ストリームＩＤ＝３）をライトバッファ２１０へ格納しなければならない。
【０１０９】
ここで、ストリームＩＤ＝３のストリームデータがΔＢｕｆｆ１８だけライトバッファ２１０に格納された後、時刻Ｔ３において、ホスト２が、キューイングして実行しているストリームＩＤ＝４のストリームデータの転送を開始したとする。
【０１１０】
この時、データパケット生成部２２０は、ライトバッファ２１０のデータ格納量があらかじめ定めておいた閾値を上回ったので、ライト方法を９チャネル折り返し書きに変更する。
【０１１１】
すると図２３に示すように、ライトバッファ２１０に格納しなければならないデータの最大量は、１ストリームあたりΔＢｕｆｆ９になり、ライトバッファ２１０の空きスペースの枯渇を防止することができる。なお、図示していないが、さらにライトバッファ２１０のデータ格納量が増加した場合には、ライト方法は横書きに変更されてもよい。
【０１１２】
次に、図２４を参照して、本実施形態のデータパケット生成部２２０の動作を説明する。
【０１１３】
データパケット生成部２２０は、ホストＩＦ制御部１００よりアクティブストリームＩＤの通知を受ける（Ｓ１００）と、論理ブロック管理テーブル１１００を検索し、ライト方法の設定を取得する（Ｓ１０１）。ＣＰＵ５００が初期設定するライト方法は例えば縦書きとし、データパケット生成部２２０は、縦書き用のライトデータ配置テーブル１０００ａに従ってＭＣＯを算出し、ライトバッファ２１０へデータを格納する（Ｓ１０２）。
【０１１４】
ライトバッファ２１０へのデータの格納中、データパケット生成部２２０は、ライト方法を変更するための条件が成立したか否かを監視する（Ｓ１０３）。条件が成立していた場合（Ｓ１０３：Ｙｅｓ）は、論理ブロック管理テーブル１１００が書き換えられ、ライト方法が変更される（Ｓ１０４）。
【０１１５】
ライト方法の変更例としては、ライトバッファ２１０のデータ格納量の増加による縦書きから９チャネル折り返し書きへの変更や、ライトバッファ２１０のデータ格納量の減少による９チャネル折り返し書きから縦書きへの変更などがある。
【０１１６】
そして、データパケット生成部２２０は、変更されたライト方法に応じたライトデータ配置テーブル１０００に従ってＭＣＯを算出し、ライトバッファ２１０へのデータの格納を継続する（Ｓ１０１〜Ｓ１０２）。
【０１１７】
次に、図２５を参照して、本実施形態におけるライト方法の変更条件を説明する。
【０１１８】
ライトバッファ２１０のデータ格納量が少ない時は、シーケンシャルリード性能を重視し縦書きが選択される。ライトバッファ２１０のデータ格納量が増加し、第１閾値以上となった時は９チャネル折り返し書きが選択される。さらにライトバッファ２１０のデータ格納量が増加し、第３閾値以上となった時は横書きが選択される。
【０１１９】
一方、ライトバッファ２１０のデータ格納量が減少する場合は、異なる閾値が用いられる。すなわち、ライト方法として横書きが選択されている時に、ライトバッファ２１０のデータ格納量が減少し第３閾値以下となっても、ライト方法は横書きのまま変更されない。そして、ライトバッファ２１０のデータ格納量がさらに減少し、第４閾値（第４閾値＜第３閾値とする）以下となった時に、ライト方法として９チャネル折り返し書きが選択される。同様に、ライト方法として９チャネル折り返し書きが選択されている時に、ライトバッファ２１０のデータ格納量が減少し、第１閾値以下となっても、ライト方法は９チャネル折り返し書きのまま変更されない。そして、ライトバッファ２１０のデータ格納量がさらに減少し、第２閾値（第２閾値＜第１閾値とする）以下となった時に、ライト方法として縦書きが選択される。
【０１２０】
上記では、ライト方法の変更条件としてライトバッファ２１０のデータ格納量を用いたが、オープンストリームカウンタ２４４の値や、アクティブストリームカウンタ２４６の値を用いても、同様にライト方法を変更することができる。
【０１２１】
４種類より多い閾値を設定し３種類よりも多いライト方式が選択されるようにしてもよい。また、第２閾値＝第１閾値、第４閾値＝第３閾値としてもよい。
【０１２２】
以上説明した第１の実施形態の半導体記憶装置によれば、ストリームデータの転送状況に応じてライト方法を変更するので、シーケンシャルリードの性能を向上させつつ、ライトバッファの空きスペースの枯渇を防止することができ、半導体記憶装置の性能を向上させることができる。
【０１２３】
［第２の実施形態］
第１の実施形態の半導体記憶装置では、ライトバッファのデータ格納量又はストリームＩＤの数によってライト方法を変更した。これに対し本実施形態の半導体記憶装置では、ストリームデータのシーケンシャル性により、さらにライト方法を変更する。
【０１２４】
図２６ａは、ホスト２が同一のストリームＩＤを用いて、複数のＷＲＩＴＥ  ＳＴＲＥＡＭコマンドを発行する時の一例を説明する図である。
【０１２５】
ホスト２は、ストリームＩＤ＝１を用いて、開始ＬＢＡ＝０ｘ００００から転送数＝０ｘ５０セクター、開始ＬＢＡ＝０ｘ０１００から転送数＝０ｘ３０セクター、開始ＬＢＡ＝０ｘ０５００から転送数＝０ｘ８０セクター、開始ＬＢＡ＝０ｘ０８００から転送数＝０ｘ１００セクター、の４つのＷＲＩＴＥ  ＳＴＲＥＡＭコマンドをそれぞれ発行する。
【０１２６】
また、ホスト２は、ストリームＩＤ＝２を用いて、開始ＬＢＡ＝０ｘ１０００から転送数＝０ｘ８００セクター、開始ＬＢＡ＝０ｘ１８００から転送数＝０ｘ８００セクター、の２つのＷＲＩＴＥ  ＳＴＲＥＡＭコマンドをそれぞれ発行する。
【０１２７】
この時にホスト２から送信されるストリームデータのＬＢＡは、図２６ｂに示すようになる。図２６ｂの実線部分はストリームデータが転送されるＬＢＡ範囲を示す。図２６ｂの点線部分はストリームデータが転送されないＬＢＡ範囲を示す。ストリームＩＤ＝１のストリームデータはシーケンシャル性が低く、ストリームＩＤ＝２のストリームデータはシーケンシャル性が高い。
【０１２８】
前述したように、Ｎチャネル折り返し書きでは、Ｎが大きくなるにつれてリード時のシーケンシャルリード性能が高くなるため、ストリームＩＤ＝２のストリームデータについては、なるべく大きなＮを用いてＮチャネル折り返し書きをすることが望ましい。
【０１２９】
次に、図２７ａ及び図２７ｂを参照して、本実施形態においてシーケンシャル性を判定するためのアルゴリズムを説明する。図２７ａ及び図２７ｂは、ライトコマンド（Ａ）〜ライトコマンド（Ｅ）に関連付けられるストリームデータ（以下、データ（Ａ）〜データ（Ｅ）と称する）の、開始ＬＢＡ、及び、転送数を示している。
【０１３０】
本実施形態の半導体記憶装置１では、ホストＩＦ制御部１００から入力される開始ＬＢＡや転送数を用いて、ストリーム制御部２４０がシーケンシャル性を判定する。ストリーム制御部２４０は、同一のストリームＩＤを有するストリームデータの、基準となる開始ＬＢＡを記憶する。すなわち、図２７ａに示す例において、ストリーム制御部２４０はデータ（Ａ）の開始ＬＢＡを、基準開始ＬＢＡとして記憶する。ストリーム制御部２４０は、データ（Ａ）のＬＢＡ範囲と連続するＬＢＡ範囲を有するデータ（Ｂ）〜データ（Ｅ）のそれぞれの転送数の累積数を記憶する。そして、データ（Ｄ）の受信により、累積数があらかじめ設定されたロングシーケンシャル判定閾値以上になると、ストリーム制御部２４０は、このストリームデータのシーケンシャル性は高いと判定する。
【０１３１】
ホスト２のストリームデータの転送の仕方によっては、半導体記憶装置１はシーケンシャル性が高いストリームデータを、ＬＢＡ順に受信できるとは限らない。図２７ｂに示す例においては、半導体記憶装置１は、データ（Ｂ）、データ（Ａ）、データ（Ｃ）、データ（Ｄ）、データ（Ｅ）の順にストリームデータを受信している。ストリーム制御部２４０は、このように受信されたストリームデータについても、シーケンシャル性を判定することができる。
【０１３２】
次に、図２８ａ〜図２８ｇを参照して、本実施形態のストリーム制御部２４０がストリームデータのシーケンシャル性を判定するために用いるロングシーケンシャル判定テーブル１２００（以下、判定テーブル１２００と呼ぶ）の構成の一例を説明する。
【０１３３】
判定テーブル１２００は、複数のエントリーを有する。本実施形態においては、判定テーブル１２００は、３つのエントリーを有する。１つのエントリーは、開始ＬＢＡと、最終ＬＢＡと、累積数と、世代番号と、を含む。また、判定テーブル１２００は、ロング判定フラグを有する。判定テーブル１２００はストリームＩＤごとに管理される。すなわち、１つのストリームＩＤに対し、１つの判定テーブル１２００が存在する。判定テーブル１２００は、ＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドに応じてストリームＩＤが割り当てられた時に、ＣＰＵ５００によって初期化されてもよい。
【０１３４】
以下の説明ではロングシーケンシャル判定閾値は０ｘ７００が設定されているものとする。
【０１３５】
図２８ａは、判定テーブル１２００が初期化された状態を示す。図では省略してあるが、すべてのエントリーの開始ＬＢＡ、最終ＬＢＡ、累積数、世代番号はゼロである。ロング判定フラグはセットされていない。
【０１３６】
図２８ｂは、図２８ａの状態で開始ＬＢＡ＝０ｘ１０００から転送数＝０ｘ２００セクターのＷＲＩＴＥ  ＳＴＲＥＡＭコマンド（コマンドＡ）が発行された時の判定テーブル１２００の状態を示す。エントリー０の開始ＬＢＡは０ｘ１０００、最終ＬＢＡは開始ＬＢＡ＋転送数−１なので、０ｘ１１ＦＦとなる。エントリー０の累積数は、登録されている累積値（０ｘ０００）に、コマンドＡの転送数（０ｘ２００）を足したもので、０ｘ２００になる。新規にコマンド情報が登録されたエントリーの世代番号は１になる。すなわち、エントリー０の世代番号は１になる。
【０１３７】
図２８ｃは、図２８ｂの状態で開始ＬＢＡ＝０ｘ１２００から転送数＝０ｘ１００セクターのＷＲＩＴＥ  ＳＴＲＥＡＭコマンド（コマンドＢ）が発行された時の判定テーブル１２００の状態を示す。コマンドＢの開始ＬＢＡは、エントリー０の最終ＬＢＡと連続である。従って、コマンドＢの情報はエントリー０に登録される。エントリー０の開始ＬＢＡは０ｘ１０００のまま、最終ＬＢＡはコマンドＢの最終ＬＢＡである０ｘ１２ＦＦとなる。エントリー０の累積数は、登録されている累積値（０ｘ２００）に、コマンドＢの転送数（０ｘ１００）を足したもので、０ｘ３００になる。受信したコマンドのＬＢＡ範囲と連続するＬＢＡ範囲を有するエントリーの世代番号は１になる。すなわち、エントリー０の世代番号は１のままである。
【０１３８】
図２８ｄは、図２８ｃの状態で開始ＬＢＡ＝０ｘ１４００から転送数＝０ｘ２００セクターのＷＲＩＴＥ  ＳＴＲＥＡＭコマンド（コマンドＣ）が発行された時の判定テーブル１２００の状態を示す。コマンドＣの開始ＬＢＡはエントリー０の最終ＬＢＡと連続ではない。この時、コマンドＣの情報は、エントリー１に登録される。エントリー１の開始ＬＢＡは０ｘ１４００、最終ＬＢＡは０ｘ１５ＦＦとなる。エントリー１の累積数は、登録されている累積値（０ｘ０００）に、コマンドＣの転送数（０ｘ２００）を足したもので、０ｘ２００になる。新規にコマンド情報が登録されたエントリーの世代番号は１になる。すなわち、エントリー１の世代番号は１になる。新規にコマンド情報が登録されたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、１ずつインクリメントされる。すなわち、エントリー０の世代番号は２になる。
【０１３９】
図２８ｅは、図２８ｄの状態で開始ＬＢＡ＝０ｘ０Ｅ００から転送数＝０ｘ１００セクターのＷＲＩＴＥ  ＳＴＲＥＡＭコマンド（コマンドＤ）が発行された時の判定テーブル１２００の状態を示す。コマンドＤの開始ＬＢＡはエントリー０及びエントリー１の最終ＬＢＡと連続ではない。この時、コマンドＤの情報は、エントリー２に登録される。エントリー２の開始ＬＢＡは０ｘ０Ｅ００、最終ＬＢＡは０ｘ０ＥＦＦとなる。エントリー２の累積数は、登録されている累積値（０ｘ０００）に、コマンドＤの転送数（０ｘ１００）を足したもので、０ｘ１００になる。新規にコマンド情報が登録されたエントリーの世代番号は１になる。すなわち、エントリー２の世代番号は１になる。新規にコマンド情報が登録されたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、１ずつインクリメントされる。すなわち、エントリー０の世代番号は３になる。エントリー１の世代番号は２になる。
【０１４０】
図２８ｆは、図２８ｅの状態で開始ＬＢＡ＝０ｘ１３００から転送数＝０ｘ１００セクターのＷＲＩＴＥ  ＳＴＲＥＡＭコマンド（コマンドＥ）が発行された時の判定テーブル１２００の状態を示す。コマンドＥの開始ＬＢＡはエントリー０の最終ＬＢＡと連続である。また、コマンドＥの最終ＬＢＡはエントリー１の開始ＬＢＡと連続である。この時、エントリー０の情報、エントリー１の情報、コマンドＥの情報はマージされて、開始ＬＢＡが小さいほうのエントリー、すなわちエントリー０に登録される。エントリー０の開始ＬＢＡは０ｘ１０００のままである。エントリー０の最終ＬＢＡはエントリー１の最終ＬＢＡであった０ｘ１５ＦＦとなる。エントリー０の累積数は、登録されている累積値（０ｘ３００）に、エントリー１の累積数（０ｘ２００）及びコマンドＥの転送数（０ｘ１００）を足したもので、０ｘ６００になる。マージされたエントリーのうち、開始ＬＢＡが小さいほうのエントリーの世代番号は１になる。すなわち、エントリー０の世代番号は１になる。マージされたエントリーのうち、開始ＬＢＡが大きいほうのエントリーはゼロに初期化される。すなわち、エントリー１は初期化される。マージされたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、小さい世代番号を有するエントリーから順に、２、３、・・・と割り当てられる。すなわち、エントリー２の世代番号は１から２に書き換えられる。
【０１４１】
図２８ｇは、図２８ｆの状態で開始ＬＢＡ＝０ｘ０Ｆ００から転送数＝０ｘ１００セクターのＷＲＩＴＥ  ＳＴＲＥＡＭコマンド（コマンドＦ）が発行された時の判定テーブル１２００の状態を示す。コマンドＦの開始ＬＢＡはエントリー２の最終ＬＢＡと連続である。また、コマンドＦの最終ＬＢＡはエントリー０の開始ＬＢＡと連続である。この時、エントリー０の情報、エントリー２の情報、コマンドＦの情報はマージされて、開始ＬＢＡが小さいほうのエントリー、すなわちエントリー２に登録される。エントリー２の開始ＬＢＡは０ｘ０Ｅ００のままである。エントリー２の最終ＬＢＡはエントリー０の最終ＬＢＡであった０ｘ１５ＦＦとなる。エントリー２の累積数は、登録されている累積値（０ｘ１００）に、エントリー０の累積数（０ｘ６００）及びコマンドＦの転送数（０ｘ１００）を足したもので、０ｘ８００になる。マージされたエントリーのうち、開始ＬＢＡが小さいエントリーの世代番号は１になる。すなわち、エントリー２の世代番号は１になる。マージされたエントリーのうち、開始ＬＢＡが大きいほうのエントリーはゼロに初期化される。すなわち、エントリー０は初期化される。
【０１４２】
ここで、エントリー２の累積数がロングシーケンシャル判定閾値（０ｘ７００）以上となったので、ロング判定フラグがセットされる。
【０１４３】
いずれのエントリーの累積数もゼロではない時に受信したコマンドのＬＢＡ範囲が、いずれのエントリーの開始ＬＢＡ又は最終ＬＢＡとも不連続である場合には、世代番号が最大のエントリーが初期化される。なお、この場合は累積数が最小のエントリーを初期化するようにしてもよい。そして、初期化されたエントリーに、受信したコマンドの情報が登録される。
【０１４４】
次に、図２９を参照して、本実施形態のストリーム制御部２４０による判定テーブル１２００の更新手順を説明する。
【０１４５】
ＷＲＩＴＥ  ＳＴＲＥＡＭコマンドを受信すると（Ｓ２００）、ストリーム制御部２４０は、累積数がゼロではなく、かつ、受信したコマンドのＬＢＡ範囲と連続する開始ＬＢＡ又は最終ＬＢＡを有するエントリーがあるか否かを確認する（Ｓ２０１）。
【０１４６】
ＬＢＡが連続するエントリーがない場合（Ｓ２０１：Ｎｏ）、ストリーム制御部２４０は、累積数がゼロのエントリーがあるか否かを確認する（Ｓ２０２）。累積数がゼロのエントリーがある場合（Ｓ２０２：Ｙｅｓ）、ストリーム制御部２４０は、累積数がゼロであるエントリーのうち、エントリー番号が最小のエントリーにコマンド情報を登録する（Ｓ２０３）。この時、当該エントリーの世代番号は１にされる。累積数がゼロのエントリーがない場合（Ｓ２０２：Ｎｏ）、ストリーム制御部２４０は、世代番号が最大であるエントリー、又は、累積数が最小であるエントリーを初期化する（Ｓ２０４）。
【０１４７】
ＬＢＡが連続するエントリーがある場合（Ｓ２０１：Ｙｅｓ）、ストリーム制御部２４０は、マージ可能なエントリーがあるか否かを確認する（Ｓ２０５）。
【０１４８】
マージ可能なエントリーがない場合（Ｓ２０５：Ｎｏ）、ストリーム制御部２４０は、受信したコマンドのＬＢＡ範囲と連続する開始ＬＢＡ又は最終ＬＢＡを有するエントリーに、コマンド情報を登録する（Ｓ２０６）。この時、当該エントリーの世代番号は１にされる。また、登録対象外のエントリーのうち、累積数がゼロではないエントリーの世代番号は１ずつインクリメントされる（Ｓ２０７）。
【０１４９】
マージ可能なエントリーがある場合（Ｓ２０５：Ｙｅｓ）、ストリーム制御部２４０は、複数のマージ対象エントリーのうち、開始ＬＢＡが最も小さいエントリーに、マージ対象エントリーの情報及びコマンド情報を登録する（Ｓ２０８）。この時、当該エントリーの世代番号は１にされる。また、マージ対象外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、世代番号の小さい順に２、３、・・・と再割り当てされる（Ｓ２０９）。
【０１５０】
次にストリーム制御部２４０は、いずれかのエントリーの累積数がロングシーケンシャル判定閾値以上となったか否かを確認し（Ｓ２１０）、該当するエントリーがある場合（Ｓ２１０：Ｙｅｓ）は、ロング判定フラグをセットする（Ｓ２１１）。
【０１５１】
次に、図３０を参照して、本実施形態の論理ブロック管理テーブル１１００の構成の一例を説明する。
【０１５２】
本実施形態では、第１の実施形態の論理ブロック管理テーブル１１００の構成に、ロング判定フラグが追加される。なお、ロング判定フラグはストリームＩＤとともに、ストリーム制御部２４０からデータパケット生成部２２０に入力される。また、本実施形態では論理ブロックごとにライト方法が設定される。
【０１５３】
図３０に示すように、論理ブロック＃０にはストリームＩＤ＝１が、論理ブロック＃１と＃２にはストリームＩＤ＝２が、論理ブロック＃３と＃４にはストリームＩＤ＝３が、論理ブロック＃５にはストリームＩＤ＝４がそれぞれ割り当てられている。また、ストリームＩＤ＝２と４にはロング判定フラグがセットされている。
【０１５４】
この時、第１の実施形態で説明した判定条件に従えば、ライト方法は９チャネル折り返し書きであるとする。しかし、ロング判定フラグがセットされているストリームＩＤを含む論理ブロック＃１、＃２、＃５については、シーケンシャルリード性能を重視しライト方法を縦書きに変更する。
【０１５５】
なお、図３０では論理ブロック＃０、＃３、＃４のライト方法は９チャネル折り返し書きのままとしたが、論理ブロック＃１、＃２、＃５のライト方法が縦書きに変更されたことに伴い、論理ブロック＃０、＃３、＃４の少なくとも１つの論理ブロック８００のライト方法が横書きに変更されてもよい。これにより、ライトバッファ２１０の空きスペースの枯渇を防止することができる。
【０１５６】
以上説明した第２の実施形態の半導体記憶装置によれば、ストリームデータのシーケンシャル性によりライト方法を変更するので、シーケンシャルリードの性能を向上させ、半導体記憶装置の性能を向上させることができる。
【０１５７】
以上説明した少なくとも１つの実施形態の半導体記憶装置によれば、ストリームデータの転送状況に応じてライト方法を変更するので、シーケンシャルリードの性能を向上させつつ、ライトバッファの空きスペースの枯渇を防止することができ、半導体記憶装置の性能を向上させることができる。
【０１５８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１５９】
１…記憶装置、２…ホスト、１０…メモリコントローラ、２０…不揮発性メモリ、２２…ページバッファ、２４…メモリセル、１００…ホストインターフェース制御部、２００…ライトバッファ管理部、２１０…ライトバッファ、２２０…データパケット生成部、２２２…ライトカウンタ、２２４…論理ページカウンタ、２２６…選択部、２３０…ライトデータ配置テーブル格納部、２４０…ストリーム制御部、２４２…ストリームＩＤ管理テーブル、２４４…オープンストリームカウンタ、２４６…アクティブストリームカウンタ、３００…ＮＡＮＤ管理部、３１０…ＮＡＮＤコントローラ、３２０…バッファ読み出し制御部、４００…論物変換テーブル、５００…ＣＰＵ、６００…物理ページ、６１０…物理ブロック、６２０…クラスタ、７００…論理ページ、８００…論理ブロック、９００…データパケット、１０００…ライトデータ配置テーブル、１１００…論理ブロック管理テーブル、１２００…ロングシーケンシャル判定テーブル
【図１】
2018022275.tif 000003
【図２】
2018022275.tif 000004
【図３】
2018022275.tif 000005
【図４】
2018022275.tif 000006
【図５】
2018022275.tif 000007
【図６】
2018022275.tif 000008
【図７】
2018022275.tif 000009
【図８】
2018022275.tif 000010
【図９】
2018022275.tif 000011
【図１０】
2018022275.tif 000012
【図１１】
2018022275.tif 000013
【図１２】
2018022275.tif 000014
【図１３ａ】
2018022275.tif 000015
【図１３ｂ】
2018022275.tif 000016
【図１３ｃ】
2018022275.tif 000017
【図１４】
2018022275.tif 000018
【図１５】
2018022275.tif 000019
【図１６】
2018022275.tif 000020
【図１７】
2018022275.tif 000021
【図１８】
2018022275.tif 000022
【図１９】
2018022275.tif 000023
【図２０】
2018022275.tif 000024
【図２１】
2018022275.tif 000025
【図２２】
2018022275.tif 000026
【図２３】
2018022275.tif 000027
【図２４】
2018022275.tif 000028
【図２５】
2018022275.tif 000029
【図２６】
2018022275.tif 000030
【図２７】
2018022275.tif 000031
【図２８】
2018022275.tif 000032
【図２９】
2018022275.tif 000033
【図３０】
2018022275.tif 000034