IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

<>
  • 特開-メモリシステム 図1
  • 特開-メモリシステム 図2
  • 特開-メモリシステム 図3
  • 特開-メモリシステム 図4
  • 特開-メモリシステム 図5
  • 特開-メモリシステム 図6
  • 特開-メモリシステム 図7
  • 特開-メモリシステム 図8
  • 特開-メモリシステム 図9
  • 特開-メモリシステム 図10
  • 特開-メモリシステム 図11
  • 特開-メモリシステム 図12
  • 特開-メモリシステム 図13
  • 特開-メモリシステム 図14
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024043898
(43)【公開日】2024-04-02
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
   G06F 12/00 20060101AFI20240326BHJP
   G06F 12/06 20060101ALI20240326BHJP
   G06F 12/02 20060101ALI20240326BHJP
【FI】
G06F12/00 560B
G06F12/06 515J
G06F12/06 522A
G06F12/02 510A
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022149133
(22)【出願日】2022-09-20
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】唐 一凡
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA12
5B160MM03
(57)【要約】
【課題】性能が高いメモリシステムを提供すること。
【解決手段】メモリシステムは、不揮発性のメモリセルアレイを備える第1メモリと、第1メモリよりも高速に動作する第2メモリと、メモリコントローラと、を備える。メモリコントローラは、ホストからのライトコマンドに応じて、ライトコマンドによってライトが指示された第1データに対し、ホストからライトバッファへのデータ転送と、データイン動作と、プログラム動作と、を実行する。第1データに対するデータイン動作が開始した後であって、データイン動作が完了する前のタイミングでは、メモリコントローラは、第1データのリードを指示するリードコマンドに応じて、第2メモリからホストに第1データを転送する。第1データに対するプログラム動作が開始されるタイミングより後では、メモリコントローラは、リードコマンドに応じて、第1メモリからホストに第1データを転送する。
【選択図】図8
【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
不揮発性のメモリセルアレイを備える第1メモリと、
前記第1メモリよりも高速に動作する第2メモリと、
前記ホストからのライトコマンドに応じて、前記ライトコマンドによってライトが指示された第1データに対し、前記ホストから前記第2メモリへのデータ転送である第1動作を実行し、前記第2メモリから前記第1メモリへのデータ転送である第2動作を実行し、前記第2動作によって転送されたデータを前記メモリセルアレイへライトする第3動作を前記第1メモリに実行させる、ように構成されたメモリコントローラと、を備え、
前記メモリコントローラは、
前記第1データに対する前記第2動作が開始するタイミングである第1タイミングの後であって、前記第1データに対する前記第2動作が完了するタイミングである第2タイミングより前では、前記第1データのリードを指示するリードコマンドに応じて、前記第1動作によって前記第2メモリに格納された前記第1データである第2データを前記第2メモリから前記ホストに転送し、
前記第1データに対する前記第3動作が開始されるタイミングである第3タイミングより後では、前記リードコマンドに応じて、前記第3動作によって前記メモリセルアレイにライトされた前記第1データである第3データを前記第1メモリから取得して前記ホストに転送する、
ようにさらに構成される、
を備えるメモリシステム。
【請求項2】
前記メモリコントローラは、
前記ライトコマンドに応じて前記第2メモリに第1領域をアロケートし、
前記第1データに対する前記第1動作では、前記第1データを前記第1領域へ格納し、
前記第1データに対する前記第2動作では、前記第1領域から前記第1メモリへ前記第1データを転送し、
前記第1データに対する前記第2動作の完了に応じて前記第1領域をデアロケートする、
ようにさらに構成される、
請求項1に記載のメモリシステム。
【請求項3】
前記メモリコントローラは、
前記ホストからのアクセスパターンに応じて第1モードと第2モードとの切り替えを実行するようにさらに構成され、
前記第1モードは、前記第1タイミングより前では、前記リードコマンドに応じて、前記第2データを前記第2メモリから前記ホストに転送し、前記第1タイミングより後では、前記リードコマンドに応じて、前記第3データを前記第1メモリから取得して前記ホストに転送する、モードであり、
前記第2モードは、前記第2タイミングより前では、前記リードコマンドに応じて、前記第2データを前記第2メモリから前記ホストに転送し、前記第3タイミングより後では、前記リードコマンドに応じて、前記第3データを前記第1メモリから取得して前記ホストに転送する、モードである、
請求項1に記載のメモリシステム。
【請求項4】
前記メモリコントローラは、
前記ホストからのライトの頻度がしきい値よりも高い場合、前記第1タイミングより前では、前記リードコマンドに応じて、前記第2データを前記第2メモリから前記ホストに転送し、前記第1タイミングより後では、前記リードコマンドに応じて、前記第3データを前記第1メモリから取得して前記ホストに転送し、
前記ホストからのライトの頻度が前記しきい値よりも低い場合、前記第2タイミングより前では、前記リードコマンドに応じて、前記第2データを前記第2メモリから前記ホストに転送し、前記第3タイミングより後では、前記リードコマンドに応じて、前記第3データを前記第1メモリから取得して前記ホストに転送する、
ように構成される、
請求項1に記載のメモリシステム。
【請求項5】
前記メモリコントローラは、
前記ホストからのリードの頻度がしきい値よりも低い場合、前記第1タイミングより前では、前記リードコマンドに応じて、前記第2データを前記第2メモリから前記ホストに転送し、前記第1タイミングより後では、前記リードコマンドに応じて、前記第3データを前記第1メモリから取得して前記ホストに転送し、
前記ホストからのリードの頻度が前記しきい値よりも高い場合、前記第2タイミングより前では、前記リードコマンドに応じて、前記第2データを前記第2メモリから前記ホストに転送し、前記第3タイミングより後では、前記リードコマンドに応じて、前記第3データを前記第1メモリから取得して前記ホストに転送する、
ように構成される、
請求項1に記載のメモリシステム。
【請求項6】
第3メモリと、
第4メモリと、
をさらに備え、
前記メモリコントローラは、
第1管理情報を前記第3メモリに格納し、
第2管理情報を前記第4メモリに格納し、
前記ライトコマンドに応じて前記第2メモリに第1領域をアロケートし、
前記第1データに対する前記第1動作では、前記第1データを前記第1領域へ格納し、
前記第1データに対する前記第2動作では、前記第1領域から前記第1メモリへ前記第1データを転送し、
前記第1データに対する前記第2動作の完了に応じて前記第1領域をデアロケートする、
ようにさらに構成され、
前記メモリコントローラは、
前記ライトコマンドに基づいて、論理アドレス空間内の前記第1データの位置を示す第1アドレスを特定し、
前記第1モードにおいては、
前記第1領域のアロケーションの際に前記第1アドレスと前記第1領域の識別情報との対応関係を前記第1管理情報に登録し、
前記第2動作の前に、前記メモリセルアレイにおける位置を示す第2アドレスを決定して、前記識別情報と前記第2アドレスとの対応関係を前記第2管理情報に登録し、
前記第3動作の完了に応じて、前記第2管理情報に登録された前記識別情報と前記第2アドレスとの前記対応関係を解消し、前記第1管理情報に登録された前記第1アドレスと前記識別情報との前記対応関係を前記第1アドレスと前記第2アドレスとの対応関係に更新し、
前記第2モードにおいては、
前記第1領域のアロケーションの際に前記第1アドレスと前記識別情報との対応関係を前記第1管理情報に登録し、
前記第2動作の前に、前記第2アドレスを決定し、
前記第2動作の完了に応じて、前記識別情報と前記第2アドレスとの対応関係を前記第2管理情報に登録し、
前記第3動作の完了に応じて、前記第2管理情報に登録された前記識別情報と前記第2アドレスとの前記対応関係を解消し、前記第1管理情報に登録された前記第1アドレスと前記識別情報との前記対応関係を前記第1アドレスと前記第2アドレスとの対応関係に更新する、
ようにさらに構成される、
請求項3に記載のメモリシステム。
【請求項7】
前記メモリコントローラは、
前記第1管理情報によって前記第1アドレスが前記識別情報に対応付けられており、かつ前記第2管理情報によって前記識別情報が前記第2アドレスに対応付けられていない場合、前記リードコマンドに応じて、前記第2データを前記第2メモリから前記ホストに転送し、
前記第1管理情報によって前記第1アドレスが前記識別情報に対応付けられており、かつ前記第2管理情報によって前記識別情報が前記第2アドレスに対応付けられている場合、前記リードコマンドに応じて、前記第3データを前記第1メモリから取得して前記ホストに転送し、
前記第1管理情報によって前記第1アドレスが前記第2アドレスに対応付けられている場合、前記リードコマンドに応じて、前記第3データを前記第1メモリから取得して前記ホストに転送する、
ように構成される、
請求項6に記載のメモリシステム。
【請求項8】
前記メモリコントローラは、
前記第1管理情報によって前記第1アドレスが前記識別情報に対応付けられており、かつ前記第2管理情報によって前記識別情報が前記第2アドレスに対応付けられている場合、前記リードコマンドに応じて、前記第1データに対する前記第3動作の完了を待ってから前記第3データを前記第1メモリから取得して前記ホストに転送する、
ように構成される、
請求項7に記載のメモリシステム。
【請求項9】
前記メモリコントローラは、
前記第1領域をデアロケートしたことに応じ、前記第1領域がアロケートされていた前記第2メモリの領域を、前記第1データとは異なる第2データを格納するための第2領域としてアロケートする、
ようにさらに構成される、
請求項6に記載のメモリシステム。
【請求項10】
前記メモリコントローラは、
前記第1領域をデアロケートした後も、前記第1アドレスと前記識別情報との対応関係を前記第1管理情報に登録したままとし、
前記第3動作の完了に応じて、前記第1管理情報に登録された前記第1アドレスと前記識別情報との前記対応関係を前記第1アドレスと前記第2アドレスとの対応関係に更新する
請求項9に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、メモリシステムに関する。
【背景技術】
【0002】
NAND型フラッシュメモリなどの不揮発性メモリを有するメモリシステムは、一般に、ホストと不揮発性メモリとの間の転送データが一時的に格納されるバッファメモリを有する。バッファメモリを効率的に使用することは、メモリシステムの性能の向上に寄与する。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許第9507711号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
一つの実施形態は、性能が高いメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0005】
一つの実施形態によれば、メモリシステムはホストに接続可能である。メモリシステムは、不揮発性のメモリセルアレイを備える第1メモリと、第1メモリよりも高速に動作する第2メモリと、メモリコントローラと、を備える。メモリコントローラは、ホストからのライトコマンドに応じて、ライトコマンドによってライトが指示された第1データに対し、第1動作と、第2動作と、を実行し、第1メモリに第3動作を実行させる。第1動作は、ホストから第2メモリへのデータ転送である。第2動作は、第2メモリから第1メモリへのデータ転送である。第3動作は、第1メモリが、第2動作によって転送されたデータをメモリセルアレイへライトする動作である。第1データに対する第2動作が開始するタイミングである第1タイミングよりも後であって、第1データに対する第2動作が完了するタイミングである第2タイミングよりも前では、メモリコントローラは、第1データのリードを指示するリードコマンドに応じて、第1動作によって第2メモリに格納された第1データである第2データを第2メモリからホストに転送する。第1データに対する第3動作が開始されるタイミングである第3タイミングより後では、メモリコントローラは、リードコマンドに応じて、第3動作によってメモリセルアレイにライトされた第1データである第3データを第1メモリから取得して前記ホストに転送する。
【図面の簡単な説明】
【0006】
図1】実施形態にかかるメモリシステムのハードウェア構成の一例を示す模式的な図。
図2】実施形態にかかるメモリチップの構成の一例を示す模式的な図。
図3】実施形態にかかるRAMの構成の一例を示す模式的な図。
図4】実施形態にかかるLUT(Look Up Table)の構造の一例を示す模式的な図。
図5】実施形態にかかるサブテーブルの構造の一例を示す模式的な図。
図6】実施形態にかかるメモリコントローラの構成の一例を示す模式的な図。
図7】実施形態にかかる第1モードでのホストライトの動作を説明するための模式的な図。
図8】実施形態にかかる第2モードでのホストライトの動作を説明するための模式的な図。
図9】実施形態にかかるメモリコントローラによるホストライトのモードの切り替えの動作の一例を示すフローチャート。
図10】実施形態にかかる第1モードでのホストライトの動作のうちの第1アップデートまでの動作を説明するための模式的な図。
図11】実施形態にかかる第1モードでのホストライトの動作のうちの第1アップデート完了からプログラム動作の開始までの動作を説明するための模式的な図。
図12】実施形態にかかる第1モードでのホストライトの動作のうちのプログラム動作以降の動作を説明するための模式的な図。
図13】実施形態にかかる第2モードでのホストライトの動作のうちの第1アップデート完了からプログラム動作の開始までの動作を説明するための模式的な図。
図14】実施形態にかかるメモリコントローラによるリードコマンドの処理の一例を示すフローチャート。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【0008】
(実施形態)
図1は、実施形態にかかるメモリシステムのハードウェア構成の一例を示す模式的な図である。
【0009】
メモリシステム1は、ホスト2と通信路3を介して接続される。通信路3および通信路3を介した通信が準拠する規格は、特定の規格に限定されない。ホスト2は、例えばパーソナルコンピュータ、携帯情報端末、またはサーバなどである。
【0010】
ホスト2は、メモリシステム1にアクセスする際に、メモリシステム1にアクセスコマンドを送信する。アクセスコマンドは、ライトコマンドまたはリードコマンドなどを含む。アクセスコマンドは、論理アドレスとサイズ情報とを伴う。論理アドレスは、メモリシステム1がホスト2に提供する論理アドレス空間におけるデータの配置位置を示す情報である。なお、論理アドレスは、LCA(Logical Cluster Address)またはLBA(Logical Block Address)とも称され得る。アクセスコマンドに含まれるサイズ情報は、論理アドレスによって指定された位置を先頭とする論理アドレス空間上の連続する範囲を示す。つまり、ホスト2は、各アクセスコマンドにおいて、論理アドレスとサイズ情報とによって論理アドレス空間上のアクセス範囲を指定する。
【0011】
なお、一例では、クラスタと称されるデータ単位毎に論理アドレスが定義される。即ち、論理アドレス空間における1つの論理アドレスが示す範囲には、1つのクラスタのみが配置され得る。したがって、ここでは、論理アドレスを、LCAと表記する。
【0012】
ホスト2は、ライトコマンドに対応するライト対象のデータをメモリシステム1に送信する。このようなホスト2からメモリシステム1に送られたデータを、ライトデータと表記する。
【0013】
メモリシステム1は、メモリコントローラ10と、NAND型フラッシュメモリ(NANDメモリ)20と、RAM(Random Access Memory)30と、を備える。
【0014】
NANDメモリ20は、ライトデータが格納されるストレージとして機能する不揮発性のメモリである。
【0015】
メモリコントローラ10は、メモリシステム1の制御を実行する。この制御は、ホスト2とNANDメモリ20との間のデータ転送に関する制御を含む。メモリコントローラ10は、RAM30を、データ転送のためのバッファメモリ(後述する1以上のライトバッファ301)として使用したり、管理情報がキャッシュされるキャッシュメモリとして使用したりする。後述するLUT(Look Up Table)50およびサブテーブル303は、管理情報の一例である。
【0016】
RAM30は、DRAM(Dynamic Random Access Memory)、SRAM(Static Random Access Memory)、またはこれらの組み合わせによって構成され得る。なお、RAM30が担う機能は、NANDメモリ20よりも高速な動作が可能な他の任意の種類のメモリによって実現されてもよい。RAM30が担う機能は、2以上の種類のメモリによって実現されてもよい。
【0017】
メモリコントローラ10は、例えばSoC(System-On-a-Chip)として構成され得る。メモリコントローラ10は、複数のチップによって構成されてもよい。RAM30は、SoCとして構成されたメモリコントローラ10内に配置されてもよいし、図1に示すようにメモリコントローラ10外に配置されてもよい。
【0018】
NANDメモリ20は、1以上のメモリチップ21によって構成される。1以上のメモリチップ21のそれぞれは、1以上のチャネルを介してメモリコントローラ10に接続される。図1に示される例では、NANDメモリ20は、メモリチップ21-0,21-1,21-2,21-3を含む。メモリチップ21-0,21-1は、チャネルch.0を介してメモリコントローラ10に接続される。メモリチップ21-2,21-3は、チャネルch.1を介してメモリコントローラ10に接続される。なお、NANDメモリ20を構成するメモリチップ21の数、およびNANDメモリ20とメモリコントローラ10とを接続するチャネルの数は、これらに限定されない。
【0019】
図2は、実施形態にかかるメモリチップ21の構成の一例を示す模式的な図である。メモリチップ21は、メモリセルアレイ211、ページレジスタ212、およびデータキャッシュ213を備える。
【0020】
メモリセルアレイ211は、不揮発にデータを記憶することができる。メモリセルアレイ211は、複数のブロックを備える。1つのブロックに記憶される全データは、一括してイレースされる。各ブロックは、ページと称される記憶領域を複数備える。各ページには、連続する物理アドレスが割り当てられている。メモリセルアレイ211に対するライトおよびリードは、ページ単位で行われる。ページのサイズは、一例では、クラスタのサイズよりも大きい。
【0021】
メモリセルアレイ211における位置を示すアドレス情報である物理アドレスを、MCA(Media Cluster Address)と表記する。MCAは、NANDメモリ20内の位置をクラスタ単位で示す。
【0022】
ページレジスタ212は、例えばSRAMによって構成される。ページレジスタ212は、少なくともページのサイズの容量を有する。ページレジスタ212には、メモリコントローラ10から受信したライト対象のデータが、メモリセルアレイ211に対するライトが完了するまで、格納される。また、メモリセルアレイ211からリードされたデータは、いったんページレジスタ212に格納される。
【0023】
データキャッシュ213は、例えばSRAMによって構成される。データキャッシュ213は、メモリコントローラ10とメモリチップ21との間のデータ転送のためのバッファメモリとして機能するメモリである。メモリコントローラ10からメモリチップ21に転送されたデータは、まず、データキャッシュ213に格納され、その後、ページレジスタ212を介してメモリセルアレイ211にライトされる。
【0024】
メモリセルアレイ211からリードされてページレジスタ212に格納されたデータは、データキャッシュ213を介してメモリコントローラ10に転送される。
【0025】
メモリコントローラ10からメモリチップ21(より正確にはデータキャッシュ213)へデータを転送する動作を、データイン動作、と表記する。メモリチップ21が、データイン動作によってデータキャッシュ213に受けたデータをメモリセルアレイ211にライトする動作を、プログラム動作、と表記する。
【0026】
図3は、実施形態にかかるRAM30の構成の一例を示す模式的な図である。
【0027】
RAM30には、1以上のライトバッファ301がアロケートされ得る。1以上のライトバッファ301のそれぞれには、ライトデータが1クラスタ分、格納され得る。なお、以降の図においては、ライトバッファ301を、WBと表記することがある。
【0028】
各ライトバッファ301には、それぞれの識別情報として数値情報がアサインされ得る。各ライトバッファ301にアサインされる数値情報をバッファIDと表記する。
【0029】
RAM30には、管理情報として、LUT302およびサブテーブル303が格納され得る。LUT302およびサブテーブル303は、LCAと、LCAに対応するクラスタのメモリシステム1内の位置と、の対応関係が記録された情報である。なお、実施形態では、LCAと、LCAに対応するクラスタのメモリシステム1内の位置と、の対応関係が記録された情報はテーブルのデータ構造を有することとしている。しかしながら、LCAと、LCAに対応するクラスタのメモリシステム1内の位置と、の対応関係が記録された情報のデータ構造は、必ずしもテーブルのデータ構造でなくてもよい。
【0030】
また、LUT302の一部または全部はNANDメモリ20に格納されてもよい。LUT302は、NANDメモリ20に格納され、RAM30にはLUT302の一部または全部がキャッシュされてもよい。RAM30に格納されているLUT302は、適時、NANDメモリ20に退避(save)されてもよい。
【0031】
サブテーブル303は、NANDメモリ20に格納されてもよい。RAM30に格納されているサブテーブル303は、適時、NANDメモリ20に退避されてもよい。
【0032】
なお、LUT302は、第1管理情報の一例である。サブテーブル303は、第2管理情報の一例である。RAM30は、バッファメモリとして使用される第2メモリの一例である。また、RAM30は、第1管理情報としてのLUT302が格納される第3メモリの一例である。また、RAM30は、第2管理情報としてのサブテーブル303が格納される第4メモリの一例である。バッファメモリとして使用される第2メモリ、第1管理情報としてのLUT302が格納される第3メモリ、および第2管理情報としてのサブテーブル303が格納される第4メモリの一部または全部は、それぞれ異なるメモリによって構成されてもよい。
【0033】
図4は、実施形態にかかるLUT302の構造の一例を示す模式的な図である。
【0034】
LUT302は、LCA毎にMCAまたはバッファIDが登録され得るテーブルである。つまり、LUT302には、LCAとMCAまたはバッファIDとの対応関係が登録される。
【0035】
図5は、実施形態にかかるサブテーブル303の構造の一例を示す模式的な図である。
【0036】
サブテーブル303は、バッファID毎にMCAが登録され得るテーブルである。つまり、サブテーブル303には、バッファIDとMCAとの対応関係が登録され得る。サブテーブル303は、MCAが登録されていないエントリ(例えば図5においてN/Aと表記されたエントリ)を含み得る。
【0037】
サブテーブル303の或るエントリに記録されたMCAは、そのエントリに対応するバッファIDが示すライトバッファ301に一時的に格納されているクラスタの最終的な転送先(即ち、メモリセルアレイ211における格納位置)を示す。
【0038】
LUT302とサブテーブル303とは、協働して、LCAと、LCAに対応するクラスタのメモリシステム1内の位置と、の対応関係を示す。
【0039】
例えば、或るケースでは、LUT302において、或るLCA(第1のLCAと表記する)にバッファID(第1のバッファIDと表記する)が対応付けられ、サブテーブル303においては、第1のバッファIDにはいずれのMCAも対応付けられていない。そのようなケースでは、第1のLCAは、LUT302およびサブテーブル303によって、第1のバッファIDに対応付けられるとして扱われる。
【0040】
別のケースでは、LUT302において、第1のLCAに第1のバッファIDが対応付けられ、サブテーブル303においては、第1のバッファIDに或るMCA(第1のMCAと表記する)が対応付けられている。そのようなケースでは、第1のLCAは、LUT302およびサブテーブル303によって、第1のMCAに対応付けられるとして扱われる。
【0041】
さらに別のケースでは、LUT302において、第1のLCAに第1のMCAが対応付けられ、サブテーブル303においては、第1のMCAは登録されていない。そのようなケースでは、第1のLCAは、LUT302およびサブテーブル303によって、第1のMCAに対応付けられるとして扱われる。
【0042】
LUT302およびサブテーブル303の状態の遷移の詳細については後述する。
【0043】
図6は、実施形態にかかるメモリコントローラ10の構成の一例を示す模式的な図である。
【0044】
メモリコントローラ10は、ホストインタフェース処理回路101、バッファ管理回路102、LUT管理回路103、サブテーブル管理回路104、ライトコントローラ105、およびNANDインタフェース処理回路106を備える。
【0045】
ホストインタフェース処理回路101は、通信路3を介したホスト2との間の通信を制御する。ホストインタフェース処理回路101は、その制御の一環として、アクセスコマンドの受信、ライトデータの受信、受信したライトデータのライトバッファ301への転送、などを実行する。
【0046】
バッファ管理回路102は、RAM30におけるライトバッファ301のアロケーション、アロケートしたライトバッファ301へのバッファIDのアサイン/デアサイン、などを実行する。
【0047】
LUT管理回路103は、LUT302の参照および更新を実行する。
【0048】
サブテーブル管理回路104は、サブテーブル303の参照および更新を実行する。
【0049】
ライトコントローラ105は、ライトデータのNANDメモリ20へのライトの制御を行う。
【0050】
NANDインタフェース処理回路106は、メモリコントローラ10とNANDメモリ20との間のデータ転送、および各メモリチップ21の制御、などを実行する。
【0051】
なお、メモリコントローラ10が備えるこれらの回路のうちの任意の回路は多重化されていてもよい。例えば、LUT管理回路103は、メモリコントローラ10に複数設けられてもよい。また、NANDインタフェース処理回路106は、メモリコントローラ10に複数設けられてもよい。例えば、メモリコントローラ10は、チャネル毎にNANDインタフェース処理回路106を備えていてもよい。また、メモリコントローラ10が備えるこれらの回路のうちの任意の2以上の回路の機能は、1つの回路に統合されてもよい。また、メモリコントローラ10が備えるこれらの回路は、CPU(Central Processing Unit)などのコンピュータプログラムによって制御されるプロセッサ、FPGA(field-programmable gate array)、またはASIC(application specific integrated circuit)など、任意の種類の回路によって構成され得る。
【0052】
ホスト2から受信したライトデータは、クラスタ単位でライトバッファ301に格納され、その後、各ライトバッファからNANDメモリ20に転送される。メモリコントローラ10は、ひとつのライトコマンドによってライトが指示されたライトデータの全部を1以上のライトバッファ301に格納すると、ライトコマンドの実行完了をホスト2に通知する。よって、RAM30に多くのライトバッファ301をアロケートすることができれば、ライトの性能が向上する。
【0053】
しかしながら、大容量のRAMの搭載はコストの点で不利であるから、メモリシステムに搭載されるRAMの容量は抑制される傾向にある。つまり、ライトバッファのアロケートに利用可能なRAMの記憶容量には上限が存在する。
【0054】
メモリシステムが備えるRAMの容量が小さくてもライトの性能を向上させるためのひとつの方法として、ライトバッファのアロケーション/デアロケーションのサイクルの速度を向上させることが考えられる。ライトバッファを早いタイミングでデアロケートできれば、そのライトバッファのデアロケートによって再利用可能となった領域に別のライトバッファをアロケートすることができる。
【0055】
一方、ホストからのリードコマンドによってリードが指示されたデータがライトバッファに格納されているケースにおいて、ライトバッファ内の当該データをメモリシステムがホストに転送できれば、NANDメモリへのアクセスを行う必要が無い分、リードコマンドに対する応答速度が向上する。よって、リードの性能を向上させるひとつの方法として、ホストから受信したライトデータをできるだけ長い時間、ライトバッファに格納しておくことが考えられる。
【0056】
実施形態では、ライトの性能とリードの性能とをともに向上させるために、メモリシステム1は、データイン動作が完了するまでライトバッファ301からホスト2へのデータ転送が可能に構成される。
【0057】
具体的には、メモリシステム1は、第1モードと、第2モードと、の何れのモードでも動作可能に構成される。第1モードは、データイン動作を開始するまでライトバッファ301からホスト2へのデータ転送が可能であり、データイン動作の開始後はライトバッファ301からホスト2へのデータ転送が不可能なモードである。第2モードは、データイン動作が完了するまでライトバッファ301からホスト2へのデータ転送が可能であり、プログラム動作の開始後はライトバッファ301からホスト2へのデータ転送が不可能なモードである。
【0058】
図7および図8は、実施形態にかかる第1モードおよび第2モードでのホストライトの動作をそれぞれ説明するための模式的な図である。これらの図には、第1モードおよび第2モードでのホストライトの動作を構成する一連の処理とともに、ホストライトにおいてバッファIDが使用される期間、ライトバッファ301がアロケートされる期間、ライト対象のユーザデータに対応するLUT302のエントリの内容の推移、ライト対象のユーザデータに対応するサブテーブル303のエントリの内容の推移、およびリードコマンドに応じたデータ転送の転送元の推移、がそれぞれ図示されている。
【0059】
まず、図7を参照して、実施形態にかかる第1モードでのホストライトの動作を説明する。
【0060】
ホスト2からライトコマンドが発行されると、ホストインタフェース処理回路101は、発行されたライトコマンドを受信して、当該ライトコマンドに対してホストインタフェース処理を実行する(S101)。ホストインタフェース処理では、ホストインタフェース処理回路101は、ライトコマンドに基づき、ライトデータの位置を示すLCAをクラスタ単位で特定する。
【0061】
バッファ管理回路102は、必要数のライトバッファ301を準備する(S102)。具体的には、バッファ管理回路102は、特定されたLCAの数、即ちライトデータを構成するクラスタの数、と同数のライトバッファ301のアロケーションと、アロケートした各ライトバッファ301へのバッファIDのアサインと、を実行する。ここでは説明を簡単にするために、1個のライトバッファ301の準備が実行されたこととする。
【0062】
続いて、ホストインタフェース処理回路101は、ホスト2からライトデータ(ユーザデータ)を受信して、受信したユーザデータを、ステップS102で準備されたライトバッファ301に転送する(S103)。
【0063】
続いて、LUT管理回路103は、第1アップデートを実行する(S104)。第1アップデートでは、LUT管理回路103は、LUT302にバッファIDを登録する。第1アップデートでは、LUT管理回路103は、ホストインタフェース処理によって特定されたLCAに、ステップS102の処理によって準備されたライトバッファ301を示すバッファIDを対応付ける。
【0064】
また、ホストインタフェース処理回路101は、ステップS104の処理と並行して、ホスト2にライトコマンドの実行完了を通知する(S105)。
【0065】
続いて、サブテーブル管理回路104は、第2アップデートを実行する(S106)。第2アップデートでは、サブテーブル管理回路104は、サブテーブル303にMCAを登録する。この処理で登録されるMCAは、ライトコントローラ105によって決定される。第2アップデートでは、サブテーブル管理回路104は、ステップS102の処理によって準備されたライトバッファ301を示すバッファIDに、ライトコントローラ105によって決定されたMCAを対応付ける。
【0066】
図7の説明において、ステップS101の処理によって特定されたLCAを、単に、LCA、と表記する。また、ステップS102の処理によって準備されたライトバッファ301を示すバッファIDを、単に、バッファID、と表記する。また、ステップS106の処理の前に決定されたMCAを、単に、MCA、と表記する。
【0067】
続いて、NANDインタフェース処理回路106は、データイン動作を実行する(S107)。データイン動作では、NANDインタフェース処理回路106は、ライトバッファ301からNANDメモリ20にライトデータを転送する。
【0068】
データイン動作が完了すると、バッファ管理回路102は、ライトバッファ301のデアロケーションを実行する(S108)。なお、ライトバッファ301がデアロケートされても、当該ライトバッファ301を示すバッファIDはLUT302に登録されたままとなる。
【0069】
ライトバッファ301がデアロケートされても、データイン動作が完了してからプログラム動作が完了してLUT302にMCAが登録されるまでの期間中、対応するバッファIDがサブテーブル303への参照が行われる際に用いられる。当該期間中においてもサブテーブル303から正確なMCAを取得可能とするために、LUT302にMCAが登録されるまで、当該ライトバッファ301を示すバッファIDがLUT302に登録されたままとされる。
【0070】
また、データイン動作が完了すると、NANDインタフェース処理回路106は、プログラム動作をNANDメモリ20(より詳しくはメモリチップ21)に実行させる(S109)。プログラム動作では、NANDメモリ20は、ライトデータをメモリセルアレイ211にライトする。ライト先はMCAが示す位置である。
【0071】
プログラム動作が完了すると、LUT管理回路103およびサブテーブル管理回路104は、第3アップデートを実行する(S110)。第3アップデートでは、LUT管理回路103は、LUT302に対し、LCAに対応付けられていたバッファIDをMCAでリプレイスするアップデートを実行する。また、第3アップデートでは、サブテーブル管理回路104は、MCAをサブテーブル303から削除するアップデートを実行する。
【0072】
また、プログラム動作が完了すると、バッファ管理回路102は、バッファIDのデアサインを実行する(S111)。
【0073】
以上の動作により、ライトデータの格納に使用されるライトバッファ301のバッファIDは、ライトバッファ301の準備の処理によって生成され(タイミングt1)、プログラム動作が完了後の第3アップデートの際(タイミングt5)に破棄される。ライトバッファ301のデアロケーションは、データイン動作が完了した際(タイミングt4)に実行され、デアロケーションによって解放されたRAM30のエリアに新たなライトバッファ301をアロケートすることが可能になる。
【0074】
LUT302においては、第1アップデートによってLCAにバッファIDが対応付けられる(タイミングt2)。そして、第3アップデートによってLCAとバッファIDとの対応関係が解消されて、LCAにバッファIDが対応付けられる(タイミングt5)。
【0075】
サブテーブル303においては、第2アップデートによってバッファIDにMCAが対応付けられる(タイミングt3)。そして、第3アップデートによってバッファIDとMCAとの対応関係が解消される(タイミングt5)。
【0076】
メモリコントローラ10は、上記のライトデータをリードの対象とするリードコマンドを受信した場合、LUT302およびサブテーブル303によってリード対象のデータの位置を特定する。よって、リードコマンドの処理のタイミングによってリードコマンドに応じたデータ転送の転送元が異なり得る。
【0077】
例えば、タイミングt2からタイミングt3までの期間には、LCAは、LUT302によってバッファIDに対応付けられ、当該バッファIDはサブテーブル303において何れのMCAにも対応付けられていない。よって、メモリコントローラ10は、この期間にリードコマンドを処理する場合、バッファIDが示すライトバッファ301を転送元としたホスト2へのデータ転送を実行する。即ち、メモリコントローラ10は、ライトバッファ301からデータをリードして、リードしたデータをホスト2に転送する。
【0078】
タイミングt3からタイミングt5までの期間には、LCAは、LUT302によってバッファIDに対応付けられ、当該バッファIDはサブテーブル303によってMCAに対応付けられている。また、タイミングt5以降は、LCAは、LUT302によってMCAに対応付けられている。よって、メモリコントローラ10は、タイミングt3よりも後にリードコマンドを処理する場合、NANDメモリ20内のMCAが示す位置を転送元としたホスト2へのデータ転送を実行する。即ち、メモリコントローラ10は、NANDメモリ20からデータをリードして、リードしたデータをホスト2に転送する。
【0079】
なお、タイミングt3からタイミングt5までの期間は、ライトデータに対し、データイン動作またはプログラム動作が実行されている。よって、この期間にリードコマンドの処理が行われる場合、NANDインタフェース処理回路106は、NANDメモリ20に対するリード処理を自身が有するキューに記憶しておき、プログラム動作が完了してから当該リード処理を実行する。つまり、メモリコントローラ10は、データのプログラム動作が完了した後、リードコマンドの処理として、NANDメモリ20からの当該データのリードと、リードしたデータのホスト2への転送と、を実行する。
【0080】
次に、図8を参照して、実施形態にかかる第2モードでのホストライトの動作を説明する。
【0081】
メモリコントローラ10は、ステップS201~S205では、図7を用いて説明した第1モードでの動作におけるステップS101~S105と同様の処理を実行する。
【0082】
ステップS204の第1アップデートおよびステップS205のライトコマンドの実行完了のホスト2への通知の後、NANDインタフェース処理回路106は、データイン動作を実行する(S206)。なお、ライトデータの格納先を示すMCAは、ステップS206の処理の前にライトコントローラ105によって決定される。
【0083】
図8の説明において、ステップS201の処理によって特定されたLCAを、単に、LCA、と表記する。また、ステップS202の処理によって準備されたライトバッファ301を示すバッファIDを、単に、バッファID、と表記する。また、ステップS206の処理の前に決定されたMCAを、単に、MCA、と表記する。
【0084】
データイン動作が完了すると、サブテーブル管理回路104は、第2アップデートを実行する(S207)。第2アップデートでは、サブテーブル管理回路104は、サブテーブル303にMCAを登録する。
【0085】
また、バッファ管理回路102は、ライトバッファ301のデアロケーションを実行する(S208)。なお、ライトバッファ301がデアロケートされても、当該ライトバッファ301を示すバッファIDの使用は継続される。
【0086】
また、NANDインタフェース処理回路106は、プログラム動作をNANDメモリ20(より詳しくはメモリチップ21)に実行させる(S209)。プログラム動作では、NANDメモリ20は、ライトデータをメモリセルアレイ211にライトする。ライト先はMCAが示す位置である。
【0087】
プログラム動作が完了すると、LUT管理回路103およびサブテーブル管理回路104は、図7を用いて説明した第1モードでの動作におけるステップS110と同様、第3アップデートを実行する(S210)。
【0088】
また、プログラム動作が完了すると、バッファ管理回路102は、バッファIDのデアサインを実行する(S211)。
【0089】
以上の動作により、ライトデータの格納に使用されるライトバッファ301のバッファIDは、ライトバッファ301の準備の処理によってアサインされ(タイミングt11)、プログラム動作が完了後の第3アップデートの際(タイミングt14)にデアサインされる。ライトバッファ301のデアロケーションは、データイン動作が完了した際(タイミングt13)に実行され、デアロケーションによって解放されたRAM30のエリアは、新たなライトバッファ301にアロケートすることが可能になる。新たにアロケートされたライトバッファ301は、別のライトデータの格納に使用され得る。
【0090】
LUT302においては、第1アップデートによってLCAにバッファIDが対応付けられる(タイミングt12)。そして、第3アップデートによってLCAとバッファIDとの対応関係が解消されて、LCAにバッファIDが対応付けられる(タイミングt14)。
【0091】
サブテーブル303においては、第2アップデートによってバッファIDにMCAが対応付けられる(タイミングt13)。そして、第3アップデートによってバッファIDとMCAとの対応関係が解消される(タイミングt14)。
【0092】
よって、タイミングt12からタイミングt13までの期間には、LCAは、LUT302によってバッファIDに対応付けられ、バッファIDはサブテーブル303において何れのMCAにも対応付けられていない。よって、メモリコントローラ10は、この期間にリードコマンドを処理する場合、バッファIDが示すライトバッファ301を転送元としたホスト2へのデータ転送を実行する。即ち、メモリコントローラ10は、ライトバッファ301からデータをリードして、リードしたデータをホスト2に転送する。
【0093】
タイミングt13からタイミングt14までの期間には、LCAは、LUT302によってバッファIDに対応付けられ、当該バッファIDはサブテーブル303によってMCAに対応付けられている。また、タイミングt14以降は、LCAは、LUT302によってMCAに対応付けられている。よって、メモリコントローラ10は、タイミングt13よりも後にリードコマンドを処理する場合、NANDメモリ20内のMCAが示す位置を転送元としたホスト2へのデータ転送を実行する。即ち、メモリコントローラ10は、NANDメモリ20からデータをリードして、リードしたデータをホスト2に転送する。
【0094】
なお、タイミングt13からタイミングt14までの期間は、ライトデータに対し、プログラム動作が実行されている。よって、この期間にリードコマンドの処理が行われる場合、NANDインタフェース処理回路106は、NANDメモリ20に対するリード処理を自身が有するキューに記憶しておき、プログラム動作が完了してから当該リード処理を実行する。つまり、メモリコントローラ10は、データのプログラム動作が完了した後、リードコマンドの処理として、NANDメモリ20からの当該データのリードと、リードしたデータのホスト2への転送と、を実行する。
【0095】
このように、第2モードによれば、第1モードに比べ、ライトバッファ301を転送元としたホスト2へのデータ転送が可能な期間が長い。よって、第2モードでは、第1モードに比べてリードの性能が高い。
【0096】
本実施形態と比較される技術(以降、比較例と表記する)として、プログラム動作が完了するまでライトバッファを転送元としたホストへのデータ転送を可能とする技術が考えられる。比較例によれば、ライトバッファを転送元としたホストへのデータ転送が可能な期間は第2モードに比べて長いが、ライトバッファのデアロケーションが可能なタイミングが第1モードおよび第2モードに比べて遅い。よって、ライトバッファに格納されたデータへのリードが頻発した場合、ライトバッファのアロケーション/デアロケーションのサイクルの長さが延長され得るため、ライトの性能が劣化する。
【0097】
第2モードによれば、比較例に比べて早いタイミングでライトバッファのデアロケーションが実行されるので、ライトの性能の劣化が抑制される。つまり、第2モードによれば、ライトおよびリードの性能をともに向上させることができる。
【0098】
なお、第2モードによれば、第1モードに比べて、ライトバッファ301を転送元としたホスト2へのデータ転送が可能な期間が長い。この期間にライトバッファ301を転送元としたホスト2へのデータ転送が頻発すると、当該データ転送のためにライトバッファ301が使用中となる期間が長くなることにより、ライトバッファ301のデアロケーションの実行のタイミングが遅れる可能性がある。
【0099】
そこで、実施形態では、メモリコントローラ10は、ホスト2からのアクセスパターンに応じて第1モードと第2モードとの間の切り替えを実行する。
【0100】
図9は、実施形態にかかるメモリコントローラ10によるホストライトのモードの切り替えの動作の一例を示すフローチャートである。
【0101】
メモリコントローラ10は、ホストライトの頻度の測定を行う(S301)。ホストライトの頻度の測定を実行する構成要素は特定の構成要素に限定されない。例えば、サブテーブル管理回路104またはNANDインタフェース処理回路106がホストライトの頻度を測定する。
【0102】
また、ホストライトの頻度に対応する限り、任意の情報をホストライトの頻度と見なすことができる。例えば、メモリコントローラ10は、所定の時間長さあたりにNANDメモリ20に送信したクラスタの数、所定の時間長さあたりに準備したライトバッファ301の数、所定の時間長さあたりに処理したライトコマンドの数、などをホストライトの頻度として測定する。
【0103】
メモリコントローラ10は、ホストライトの頻度がしきい値以下であるか否かを判定する(S302)。ホストライトの頻度がしきい値以下でない場合(S302:No)、メモリコントローラ10は、ホストライトのモードを第1モードに設定する(S303)。ホストライトの頻度がしきい値以下である場合(S302:Yes)、メモリコントローラ10は、ホストライトのモードを第2モードに設定する(S304)。
【0104】
ステップS303またはS304によって、ホストモードの切り替えの動作が終了する。
【0105】
なお、ステップS301~S304の動作は繰り返し実行される。ステップS301~S304の動作は所定の時間周期で実行されてもよいし、任意の処理をトリガとして実行されてもよい。
【0106】
また、図9では、ホストライトの頻度がしきい値と等しい場合、メモリコントローラ10は、ホストライトのモードを第2モードに設定した。ホストライトの頻度がしきい値と等しい場合、メモリコントローラ10は、ホストライトのモードを第1モードに設定してもよい。
【0107】
このように、第2モードでの動作は、ホストライトの頻度が低い場合に限定して実行される。よって、たとえホスト2からのリードコマンドの処理によってライトバッファ301のデアロケーションの実行のタイミングが遅れる事象が発生したとしても、ライトの性能の悪化が抑制される。
【0108】
なお、上記したモードの切り替えの動作はあくまでも一例である。例えば、メモリコントローラ10は、リードコマンドの処理の頻度に応じてモードの切り替えを実行してもよい。具体的には、メモリコントローラ10は、リードコマンドの処理の頻度が或るしきい値よりも高い場合には第2モードでホストライトを実行し、リードコマンドの処理の頻度が当該しきい値よりも低い場合には第1モードでホストライトを実行するよう、構成されてもよい。
【0109】
続いて、図10図12を参照して第1モードでのホストライトの動作の詳細を説明する。
【0110】
図10は、実施形態にかかる第1モードでのホストライトの動作のうちの第1アップデートまでの動作を説明するための模式的な図である。
【0111】
ホストインタフェース処理回路101は、ホストインタフェース処理においてLCAを特定すると、バッファ管理回路102にライトバッファ301の準備を要求する(S401)。ライトバッファ301の準備の要求は、LCAを含む。
【0112】
バッファ管理回路102は、ライトバッファ301の準備の要求に応じて、ライトバッファ301のアロケーションおよびバッファIDのアサインを実行する(S402)。ホストインタフェース処理回路101は、データ転送を実行する(S403)。即ち、ホストインタフェース処理回路101は、ホスト2からライトデータを取得して、取得したライトデータをライトバッファ301に格納する。
【0113】
なお、ステップS403の処理は、第1動作の一例である。
【0114】
バッファ管理回路102は、第1アップデートの要求をLUT管理回路103に送信する(S404)。第1アップデートの要求は、LCAと、バッファIDと、を含む。
【0115】
LUT管理回路103は、第1アップデートの要求に応じて、第1アップデート、即ちLUT302に対するバッファIDの登録を実行する(S405)。LUT管理回路103は、第1アップデートを完了すると、第1アップデートの完了をサブテーブル管理回路104を介してライトコントローラ105に通知する(S406)。第1アップデートの完了の通知はバッファIDを含む。
【0116】
図11は、実施形態にかかる第1モードでのホストライトの動作のうちの第1アップデート完了からプログラム動作の開始までの動作を説明するための模式的な図である。
【0117】
ライトコントローラ105は、第1アップデート完了の通知に応じて、MCAを決定する(S411)。そして、ライトコントローラ105は、サブテーブル管理回路104に、データイン動作の要求を送信する(S412)。データイン動作の要求は、バッファIDおよびMCAを含む。
【0118】
サブテーブル管理回路104は、データイン動作の要求に応じて、第2アップデート、つまりサブテーブル303へのMCAの登録を実行する(S413)。
【0119】
また、サブテーブル管理回路104は、データイン動作の要求をNANDインタフェース処理回路106に転送する(S414)。データイン動作の要求は、バッファIDおよびMCAを含む。
【0120】
NANDインタフェース処理回路106は、データイン動作の要求に応じて、データ転送を実行する(S415)。即ち、NANDインタフェース処理回路106は、ライトバッファ301からライトデータをリードして、ライトデータをNANDメモリ20(より正確にはメモリチップ21)に送信する。
【0121】
ステップS415の処理は、第2動作の一例である。
【0122】
NANDインタフェース処理回路106がデータイン動作を完了すると、データイン完了がバッファ管理回路102に通知される。バッファ管理回路102は、データイン完了の通知に応じて、ライトバッファ301のデアロケーションを実行する(S416)。そして、NANDインタフェース処理回路106は、NANDメモリ20(より正確にはメモリチップ21)にプログラム動作を指示する(S417)。プログラム動作を指示されたメモリチップ21は、ライトデータをメモリセルアレイ211にライトするプログラム動作を実行する。
【0123】
なお、プログラム動作は、第3動作の一例である。
【0124】
図12は、実施形態にかかる第1モードでのホストライトの動作のうちのプログラム動作以降の動作を説明するための模式的な図である。
【0125】
NANDインタフェース処理回路106は、プログラム動作が完了すると、プログラム動作の完了をライトコントローラ105に通知する(S421)。
【0126】
ライトコントローラ105は、プログラム動作の完了の通知に応じて、バッファIDのデアサインの要求をバッファ管理回路102へ送信し(S422)し、第3アップデートの要求をLUT管理回路103へ送信する(S423)。第3アップデートの要求は、バッファIDおよびMCAを含む。
【0127】
バッファ管理回路102は、バッファIDのデアサインの要求に応じて、バッファIDのデアサインを実行する(S424)。デアサインによって、そのバッファIDは再利用が可能となる。
【0128】
LUT管理回路103は、第3アップデートの要求に応じて、LUT302においてLCAに対応付けられて登録されたバッファIDをMCAにリプレイスする(S425)。また、LUT管理回路103は、受信した第3アップデートの要求をサブテーブル管理回路104に転送する(S426)。
【0129】
サブテーブル管理回路104は、第3アップデートの要求に応じて、サブテーブル303においてバッファIDに対応付けられて登録されたMCAを削除する(S427)。
【0130】
続いて、第2モードでのホストライトの動作の詳細を説明する。
【0131】
第2モードでは、第1アップデートまで、図10に示した第1モードと同様の動作が実行される。また、第2モードでは、プログラム動作以降は、図12に示した第1モードと同様の動作が実行される。よって、ここでは、第2モードでのホストライトの動作のうちの第1アップデート完了からプログラム動作の開始までの動作を説明し、他の動作の説明を省略する。
【0132】
図13は、実施形態にかかる第2モードでのホストライトの動作のうちの第1アップデート完了からプログラム動作の開始までの動作を説明するための模式的な図である。
【0133】
ライトコントローラ105は、第1アップデート完了の通知に応じて、MCAを決定する(S511)。そして、ライトコントローラ105は、NANDインタフェース処理回路106に、データイン動作の要求を送信する(S512)。データイン動作の要求は、バッファIDおよびMCAを含む。
【0134】
NANDインタフェース処理回路106は、データイン動作の要求に応じて、データ転送を実行する(S513)。即ち、NANDインタフェース処理回路106は、ライトバッファ301からライトデータをリードして、ライトデータをNANDメモリ20(より正確にはメモリチップ21)に送信する。
【0135】
ステップS513の処理は、第2動作の一例である。
【0136】
NANDインタフェース処理回路106は、データイン動作を完了すると、サブテーブル管理回路104にデータイン動作の完了を通知する(S514)。データイン動作の完了の通知は、バッファIDおよびMCAを含む。
【0137】
サブテーブル管理回路104は、データイン動作完了の通知に応じて、第2アップデート、つまりサブテーブル303へのMCAの登録を実行する(S515)。また、バッファ管理回路102は、ライトバッファ301のデアロケーションを実行する(S516)。
【0138】
NANDインタフェース処理回路106は、データイン動作完了をサブテーブル管理回路104に通知した後、NANDメモリ20(より正確にはメモリチップ21)にプログラム動作を指示する(S517)。プログラム動作を指示されたメモリチップ21は、ライトデータをメモリセルアレイ211にライトするプログラム動作を実行する。
【0139】
プログラム動作は、第3動作の一例である。
【0140】
図14は、実施形態にかかるメモリコントローラ10によるリードコマンドの処理の一例を示すフローチャートである。
【0141】
メモリコントローラ10は、ホスト2からリードコマンドを受信すると(S601)、LUT302によって、リード対象のデータの位置を示すLCAにバッファIDが対応付けられているか否かを判定する(S602)。
【0142】
なお、リード対象のデータの位置を示すLCAは、例えばホストインタフェース処理回路101によって特定される。リード対象のデータが2以上のクラスタによって構成される場合には、ホストインタフェース処理回路101は、2以上のクラスタのそれぞれについてLCAを特定する。なお、ここでは説明を簡単にするために、リード対象のデータは1つのクラスタによって構成されることとする。
【0143】
LUT302によってLCAにバッファIDが対応付けられているか否かは、例えばLUT管理回路103が判定する。
【0144】
LUT302によってLCAにバッファIDが対応付けられていない場合(S602:No)、即ちLCAにMCAが対応付けられている場合、メモリコントローラ10は、NANDメモリ20におけるMCAが示す位置からデータをリードする(S603)。
【0145】
LUT302によってLCAにバッファIDが対応付けられている場合(S602:Yes)、メモリコントローラ10は、サブテーブル303によって、そのバッファIDにMCAが対応付けられているか否かを判定する(S604)。
【0146】
サブテーブル303によってバッファIDにMCAが対応付けられている場合(S604:Yes)、図7に示したタイミングt3からタイミングt5までの期間、または図8に示したタイミングt13からタイミングt14までの期間を参照しても明らかなように、リード対象のデータのプログラム動作がまだ完了していない。よって、メモリコントローラ10は、リード対象とされたデータのプログラム動作の完了後にNANDメモリ20におけるMCAが示す位置からそのデータをリードする(S605)。
【0147】
サブテーブル303によってバッファIDにMCAが対応付けられていない場合(S604:No)、メモリコントローラ10は、そのバッファIDが示すライトバッファ301からデータをリードする(S606)。
【0148】
ステップS603、S605、またはS606の後、メモリコントローラ10は、ライトバッファ301またはNANDメモリ20からリードしたデータをホスト2に送信する(S607)。そしてリードコマンドの処理が完了する。
【0149】
なお、以上述べた例では、メモリコントローラ10は、第1モードと第2モードとの間でホストライトのモードの切り替えを行った。メモリコントローラ10は、第1モードと第2モードとを含む3以上のモードのうちからホストライトのモードの切り替えを行ってもよい。または、メモリコントローラ10は、ホストライトにおいては第2モードとして述べた動作のみ実行できるよう構成されてもよい。
【0150】
以上述べたように、実施形態によれば、第2アップデートよりも前、つまり少なくともライトデータに対するデータイン動作が完了するタイミングより前では、メモリコントローラ10は、ライトデータをリード対象とするリードコマンドに応じて、ライトバッファ301を転送元としてリード対象のデータをホスト2に転送する。第2アップデートよりも後、つまり少なくともプログラム動作が開始されるタイミングより後では、メモリコントローラ10は、リードコマンドに応じて、プログラム動作によってメモリセルアレイ211にライトされたデータをメモリチップ21からリードしてホスト2に転送する。
【0151】
よって、ライトおよびリードの性能をともに向上させることができる。つまり、性能が高いメモリシステム1が得られる。
【0152】
また、実施形態によれば、メモリコントローラ10は、ライトコマンドに応じてRAM30にライトバッファ301をアロケートし、データイン動作の完了に応じてライトバッファ301をデアロケートする。
【0153】
また、実施形態によれば、ホスト2からのライトの頻度がしきい値よりも高い場合、メモリコントローラ10は第1モードでホストライトを実行し、ホスト2からのライトの頻度がしきい値よりも低い場合、メモリコントローラ10は第2モードでホストライトを実行する。
【0154】
第2モードでの動作は、ホストライトの頻度がしきい値よりも低いという限定された条件下で実行され得る。よって、たとえホスト2からのリードコマンドの処理によってライトバッファ301のデアロケーションの実行のタイミングが遅れる事象が発生したとしても、ライトの性能の悪化が抑制される。
【0155】
なお、前述したように、第1モードと第2モードとの切り替えの条件は、ホストライトの頻度に基づく条件に限定されない。
【0156】
例えば、メモリコントローラ10は、ホスト2からのリードの頻度がしきい値よりも低い場合、第1モードでホストライトを実行し、ホスト2からのリードの頻度がしきい値よりも高い場合、第2モードでホストライトを実行してもよい。
【0157】
つまり、メモリコントローラ10は、ホスト2からのアクセスパターンに応じて第1モードと第2モードとの切り替えを実行するように構成されてもよい。
【0158】
また、実施形態によれば、第3メモリとしてのRAM30にLUT302が格納され、第4メモリとしてのRAM30にサブテーブル303が格納される。
【0159】
第1モードにおいては、メモリコントローラ10は、ライトバッファ301のアロケーションの際に、ライトコマンドに基づいて特定したLCAと、アロケートするライトバッファ301の識別情報であるバッファIDと、の対応関係をLUT302に登録する。そして、メモリコントローラ10は、データイン動作の前に、MCAを決定してバッファIDとMCAとの対応関係をサブテーブル303に登録する。そして、メモリコントローラ10は、プログラム動作の完了に応じて、サブテーブル303に登録されたバッファIDとMACとの対応関係を解消し、LUT302に登録されたLCAとバッファIDとの対応関係のうちのバッファIDをMCAでリプレイスする。
【0160】
第2モードにおいては、メモリコントローラ10は、ライトバッファ301のアロケーションの際に、ライトコマンドに基づいて特定したLCAと、アロケートするライトバッファ301の識別情報であるバッファIDと、の対応関係をLUT302に登録する。そして、メモリコントローラ10は、データイン動作の前にMCAを決定する。そして、メモリコントローラ10は、データイン動作の完了に応じて、バッファIDとMCAとの対応関係をサブテーブル303に登録する。そして、メモリコントローラ10は、プログラム動作の完了に応じて、サブテーブル303に登録されたバッファIDとMACとの対応関係を解消し、LUT302に登録されたLCAとバッファIDとの対応関係のうちのバッファIDをMCAでリプレイスする。
【0161】
そして、実施形態によれば、LUT302によってLCAがバッファIDに対応付けられており、かつサブテーブル303によってそのバッファIDがMCAに対応付けられていない場合、メモリコントローラ10は、リードコマンドに応じて、リード対象のデータをライトバッファ301からホスト2に転送する。リードコマンドを処理する際に、LUT302によってLCAがバッファIDに対応付けられており、かつサブテーブル303によってそのバッファIDがMCAに対応付けられている場合、メモリコントローラ10は、リードコマンドに応じて、リード対象のデータをプログラム動作の完了後にNANDメモリ20から取得してホスト2に転送する。LUT302によってLCAがMCAに対応付けられている場合、メモリコントローラ10は、リードコマンドに応じて、リード対象のデータをNANDメモリ20から取得してホスト2に転送する。
【0162】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0163】
1 メモリシステム、2 ホスト、3 通信路、10 メモリコントローラ、20 NANDメモリ、21,21-0,21-1,21-2,21-3 メモリチップ、101 ホストインタフェース処理回路、102 バッファ管理回路、103 LUT管理回路、104 サブテーブル管理回路、105 ライトコントローラ、106 NANDインタフェース処理回路、211 メモリセルアレイ、212 ページレジスタ、213 データキャッシュ、301 ライトバッファ、302 LUT、303 サブテーブル。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14