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

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

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

<>
  • 特開-メモリシステム 図1
  • 特開-メモリシステム 図2
  • 特開-メモリシステム 図3
  • 特開-メモリシステム 図4
  • 特開-メモリシステム 図5
  • 特開-メモリシステム 図6
  • 特開-メモリシステム 図7
  • 特開-メモリシステム 図8
  • 特開-メモリシステム 図9
  • 特開-メモリシステム 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022102785
(43)【公開日】2022-07-07
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
   G06F 11/10 20060101AFI20220630BHJP
   G11C 11/56 20060101ALI20220630BHJP
【FI】
G06F11/10 612
G11C11/56 210
G11C11/56 220
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2020217736
(22)【出願日】2020-12-25
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】特許業務法人酒井国際特許事務所
(72)【発明者】
【氏名】今泉 康行
(72)【発明者】
【氏名】原 徳正
(72)【発明者】
【氏名】山岸 俊之
【テーマコード(参考)】
5B001
5B225
【Fターム(参考)】
5B001AA03
5B001AB01
5B001AB02
5B001AC01
5B001AD03
5B225BA19
5B225DE08
5B225EA05
5B225FA01
(57)【要約】
【課題】効率良くデータを書き込むことができるメモリシステムを提供する。
【解決手段】メモリシステムは、少なくとも一つのメモリセルを含む不揮発性メモリと、バッファと、メモリコントローラと、を備える。メモリコントローラは、バッファから複数ビットのデータである第1のデータを取得し、第1のデータに対してランダマイズを行うことで第2のデータを生成し、第2のデータに基づいて誤り抑制符号化の処理を識別する情報であるフラグを生成し、フラグをバッファへ格納する。メモリコントローラは、第1のデータのうちの1ビットのデータである第3のデータと、フラグと、をバッファから取得し、第3のデータに対して、取得したフラグに基づく誤り抑制符号化およびランダマイズを行うことで記憶用データを生成し、記憶用データをメモリセルへ書き込む。
【選択図】図3
【特許請求の範囲】
【請求項1】
少なくとも一つのメモリセルを含む不揮発性メモリと、
バッファと、
前記バッファから複数ビットのデータである第1のデータを取得し、
前記第1のデータに対してランダマイズを行うことで第2のデータを生成し、
前記第2のデータに基づいて誤り抑制符号化の処理を識別する情報であるフラグを生成し、
前記フラグを前記バッファへ格納し、
前記第1のデータのうちの1ビットのデータである第3のデータと、前記フラグと、を前記バッファから取得し、
前記第3のデータに対して、前記取得したフラグに基づく誤り抑制符号化およびランダマイズを行うことで記憶用データを生成し、
前記記憶用データを前記メモリセルへ書き込む
ように構成されたメモリコントローラと、
を備えるメモリシステム。
【請求項2】
前記メモリコントローラは、
前記第3のデータに対してランダマイズを行うことで第4のデータを生成し、前記第4のデータに対して前記取得したフラグに基づく誤り抑制符号化を行うことで前記記憶用データを生成する
ように構成されている請求項1に記載のメモリシステム。
【請求項3】
前記メモリコントローラは、
前記第3のデータに対して前記取得したフラグに基づく誤り抑制符号化を行うことで第5のデータを生成し、前記第5のデータに対してランダマイズを行うことで前記記憶用データを生成する
ように構成されている請求項1に記載のメモリシステム。
【請求項4】
前記少なくとも一つのメモリセルは複数のメモリセルを含み、前記複数のメモリセルは複数ページのデータを記憶するように構成され、
前記メモリコントローラは、
前記バッファから複数ページ分のデータである第6のデータを取得し、
前記第6のデータに対してランダマイズを行うことで第7のデータを生成し、
前記第7のデータに基づいて前記フラグを生成し、
前記フラグを前記バッファへ格納し、
前記第6のデータのうちの1ページ分のデータである第8のデータと、前記フラグと、を前記バッファから取得し、
前記第8のデータに対して前記取得したフラグに基づく誤り抑制符号化およびランダマイズを行うことで前記記憶用データを生成する
ようにさらに構成されている請求項1に記載のメモリシステム。
【請求項5】
前記メモリコントローラは、
前記第6のデータを複数に区切ったセグメントデータ毎に前記フラグを生成する
ように構成されている請求項4に記載のメモリシステム。
【請求項6】
前記メモリコントローラは、
前記第8のデータに対して前記取得したフラグに基づく誤り抑制符号化を行うことで第9のデータを生成し、
前記第9のデータの少なくとも一部のデータに対する第1の誤り訂正符号を生成し、
複数の前記第9のデータそれぞれの一部のデータを含むデータに対する第2の誤り訂正符号を生成し、
前記第9のデータと、前記第1の誤り訂正符号と、前記第2の誤り訂正符号と、をランダマイズすることで前記記憶用データを生成する
ようにさらに構成されている請求項4に記載のメモリシステム。
【請求項7】
前記メモリセルは閾値電圧に応じたデータを記憶するように構成され、
前記メモリコントローラは、
前記メモリセルの閾値電圧の条件によるコストに基づいて、前記フラグを生成する
ように構成されている請求項1に記載のメモリシステム。
【請求項8】
前記メモリコントローラは、
前記フラグと前記第3のデータとの排他的論理和を演算することにより、前記第3のデータに対して前記誤り抑制符号化を行う
ように構成されている請求項1に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【0002】
NAND型フラッシュメモリ(以下、NANDメモリという)を記憶媒体に用いるメモリシステムでは、例えば誤り訂正機能を備えるものがある。メモリシステムは、書き込み用のデータにパリティデータを付与してNANDメモリへ書き込む。この場合、効率良くデータを書き込むことが望まれる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許出願公開第2020/0012554号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
一つの実施形態は、効率良くデータを書き込むことができるメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0005】
一つの実施形態によれば、メモリシステムは、少なくとも一つのメモリセルを含む不揮発性メモリと、バッファと、メモリコントローラと、を備える。メモリコントローラは、バッファから複数ビットのデータである第1のデータを取得し、第1のデータに対してランダマイズを行うことで第2のデータを生成し、第2のデータに基づいて誤り抑制符号化の処理を識別する情報であるフラグを生成し、フラグをバッファへ格納する。メモリコントローラは、第1のデータのうちの1ビットのデータである第3のデータと、フラグと、をバッファから取得し、第3のデータに対して、取得したフラグに基づく誤り抑制符号化およびランダマイズを行うことで記憶用データを生成し、記憶用データをメモリセルへ書き込む。
【図面の簡単な説明】
【0006】
図1図1は、ホストに接続された第1の実施形態にかかるメモリシステムの構成の一例を示す図である。
図2図2は、第1の実施形態におけるTLCのメモリセルの閾値電圧とデータコーディングとの対応付けの一例を示す図である。
図3図3は、第1の実施形態における誤り抑制符号化の概要を示す図である。
図4図4は、第1の実施形態における誤り抑制符号化の詳細な説明のための図である。
図5図5は、第1の実施形態における誤り抑制符号化の他の例を説明するための図である。
図6図6は、第1の実施形態にかかるメモリシステムによる符号化および復号の流れを説明するための図である。
図7図7は、第1の実施形態における符号化の処理手順を示すフローチャートである。
図8図8は、第2の実施形態にかかるメモリシステムの構成の一例を示す図である。
図9図9は、第2の実施形態にかかるメモリシステムによる符号化および復号の流れを説明するための図である。
図10図10は、第2の実施形態における符号化の処理手順を示すフローチャートである。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【0008】
(第1の実施形態)
図1は、ホスト2に接続された第1の実施形態にかかるメモリシステム1の構成の一例を示す図である。図1に示すように、メモリシステム1は、メモリコントローラ10及びNAND型フラッシュメモリ20(以下、「NANDメモリ20」と記載)を備える。
【0009】
NANDメモリ20は、1つ以上のNANDパッケージ21を有する。個々のNANDパッケージ21は、1つ以上のメモリチップを備える。1つ以上のメモリチップのそれぞれは、データを不揮発に記憶する。1つ以上のメモリチップは、それぞれ独立して動作し、メモリチップ間での並列動作が可能である。
【0010】
メモリチップは、メモリセルアレイを有する。メモリセルアレイは、複数のブロックを含む。ブロックは、ビット線およびワード線に関連付けられた複数のメモリセル(メモリセルトランジスタ)の集合であり、例えば、データ消去動作の単位となる。ワード線に関連付けられた複数のメモリセルの集合はメモリセルグループと称される。各メモリセルは1ビット以上のデータを記憶し得るように構成される。メモリセルがシングルレベルセル(SLC:Single Level Cell)である場合は、1つのメモリセルグループが1ページに対応する。ページは、例えばデータ書き込み動作及びデータ読み出し動作の単位である。メモリセルがマルチレベルセル(MLC:Multiple Level Cell)である場合は、1つのメモリセルグループが複数ページに対応する。なお、本説明において、MLCには、1つのメモリセルに3ビットを記憶するTLC(Triple Level Cell)や1つのメモリセルに4ビットを記憶するQLC(Quad Level Cell)等が含まれる。
【0011】
メモリシステム1において、NANDメモリ20が有するNANDパッケージ21の個数は任意である。また、NANDパッケージ21が有するメモリチップの個数は任意である。以下では、NANDメモリ20が有するNANDパッケージ21の個数は4であるとする。
【0012】
以下においては、NANDメモリ20を例に挙げて説明するが、メモリシステム1が有する不揮発性メモリはこれに限らず、例えばMRAM(Magnetoresistive Random Access Memory),PCRAM(Phase Change Random Access Memory),ReRAM(Resistive Random Access Memory)のような他の種類のメモリであってもよい。
【0013】
メモリコントローラ10は、例えばSoC(System on a Chip)、FPGA(Field Programmable Gate Array)、ASIC(Application Specific Integrated Circuit)のようなIC(Integrated Circuit)である。メモリコントローラ10は、NANDメモリ20に各種動作を命令することができる。メモリコントローラ10は、外部のホスト2からの要求(リクエスト)に基づいた動作と、ホスト2からの要求に依らない動作とを実行する。メモリコントローラ10の各機能は、プログラムを実行するCPU(Central Processing Unit)により実現されてもよく、専用のハードウェアで実現されてもよい。
【0014】
メモリコントローラ10は、CPU11、ホストインタフェース(I/F)コントローラ12、RAM(Randon Access Memory)13、NANDパッケージ21と同数のNANDコントローラ14を備える。
【0015】
CPU11は、メモリコントローラ10全体の動作を制御する。CPU11は、例えばホスト2から受信したライト要求に応答してライトコマンドを発行して、発行したライトコマンドをNANDコントローラ14に送信する。また、CPU11は、例えばホスト2から受信したリード要求に応答してリードコマンドを発行して、発行したリードコマンドをNANDコントローラ14に送信する。
【0016】
RAM13は、CPU11の作業領域として使用される記憶領域である。RAM13には、例えばNANDメモリ20を管理するためのパラメータや、各種の管理テーブルが記憶される。RAM13は、例えばホスト2から受信した要求の待ち行列(コマンドキュー)を記憶する。また、RAM13は、NANDメモリ20に格納されたデータに関連付けられた論理アドレスをNANDメモリ20の物理アドレスに変換するためのアドレス変換テーブルを記憶する。このアドレス変換テーブルは、例えばNANDメモリ20内に格納され、メモリシステム1の起動時に読み出されてRAM13に記憶される。RAM13としては、SRAM(Static RAM)等の揮発性メモリが用いられる。なお、アドレス変換テーブルのデータサイズが大きい場合には、アドレス変換テーブルは、RAM13よりも容量の大きいDRAM(Dynamic RAM)に記憶されてもよい。
【0017】
ホストI/Fコントローラ12は、ホスト2に接続され、メモリシステム1とホスト2との間の通信を司る。ホストI/Fコントローラ12は、例えばメモリシステム1とホスト2との間で、データ、要求、及びアドレスの転送を制御する。ホストI/Fコントローラ12は、例えばSATA(Serial Advanced Technology Attachment)、SAS(Serial Attached SCSI)、PCIe(PCI Express)、NVMe(Non-Volatile Memory Express)(登録商標)のような通信インタフェース規格をサポートする。つまり、メモリシステム1に接続されるホスト2は、例えばSATA、SAS、PCIe、NVMeのインタフェースを含むコンピュータである。
【0018】
4つのNANDコントローラ14は、それぞれ異なるチャネルCh.0~Ch.3を介して、それぞれ異なるNANDパッケージ21に接続される。各チャネルCh.0~Ch.3は、入出力信号線および制御信号線を含む配線群によって構成される。入出力信号線は、例えばデータ、アドレス、及びコマンドを送受信するための信号線である。制御信号線は、例えばNANDメモリ20を制御する制御信号を送受信するための信号線である。
【0019】
4つのNANDコントローラ14は、それぞれ異なるチャネルCh.0~Ch.3を制御する。またこれにより、NANDコントローラ14は、対応するNANDパッケージ21内のメモリチップに対し、CPU11から指示されたコマンドの制御を実行する。例えば、NANDコントローラ14は、CPU11から指示されたコマンドに応じて、ユーザデータの書き込み、読み出しをする。
【0020】
個々のNANDコントローラ14は、バッファ141、フラグ生成部142、及びNANDインタフェース(I/F)143を備える。
【0021】
バッファ141は、ホスト2から受信したデータを一時的に記憶する。バッファ141は、各種データのバッファリングを行う。バッファ141は、例えばSRAMである。
【0022】
フラグ生成部142は、ランダマイザ1421と、フラグ生成コア部1422とを備える。フラグ生成部142は、誤り抑制符号化処理で使用するフラグを生成する。当該フラグは、誤り抑制符号化の処理を識別する情報である。当該フラグの生成方法の詳細は、後述する。
【0023】
NANDI/F143は、ランダマイザ1431、ECC(Error Correction Code)符号化/復号部1432、誤り抑制符号化/復号部1433、およびメモリインタフェース(I/F)1434を備える。
【0024】
ランダマイザ1431は、例えば線形帰還シフトレジスタ等を含んで構成される。ランダマイザ1431は、書き込み時には、当該線形帰還シフトレジスタ等の疑似乱数発生器から出力されたランダムデータ(ランダマイズキー)と、ユーザデータとの排他的論理和(EXOR)を実行することでランダマイズ処理を行う。また、ランダマイザ1431は、読み出し時には、書き込み時のランダムデータを用いてランダマイズを解除するデランダマイズを実行する。デランダマイズとは、例えば、ランダマイズの逆変換である。このランダマイズ処理は、NANDメモリ20の信頼性を高めることを目的として実行される。
【0025】
ECC符号化/復号部1432は、データに対する誤り検出及び誤り訂正のために、データの符号化および復号を行う。具体的には、ECC符号化/復号部1432は、NANDメモリ20に書き込むデータのパリティデータを生成することで誤り訂正符号化処理を行う。また、ECC符号化/復号部1432は、NANDメモリ20から読み出されたデータを復号する。ECC符号化/復号部1432は、上記パリティデータを用いた復号処理によって、読み出されたデータに対する誤り検出及び誤り訂正を実行する。ECC符号化/復号部1432は、誤り訂正に失敗した場合には、誤り訂正の失敗をCPU11に通知する。ECC符号化/復号部1432による符号化および復号のアルゴリズムには、RS(リード・ソロモン)符号やBCH(Bose-Chaudhuri-Hocquenghem)符号や低密度パリティ検査(LDPC)符号等を用いた任意のアルゴリズムを適用することが可能である。
【0026】
誤り抑制符号化/復号部1433は、NANDメモリ20に記憶されるユーザデータに対する誤り抑制符号化を行う。また、誤り抑制符号化/復号部1433は、NANDメモリ20から読み出されたデータに対して誤り抑制復号を行う。誤り抑制符号化を適用する単位は、メモリセルアレイ全体であってもよいし、ワード線であってもよい。
【0027】
誤り抑制符号化は、書込み対象のデータを変換することによりメモリセルの閾値電圧に偏りを持たせる処理である。誤り抑制符号化により、セル疲弊を低減できる。セル疲弊とは、セル間干渉効果、並びに、書込みおよび消去によるメモリセルの疲弊を意味する。また、誤り抑制符号化により、ビットエラーレート(BER)に関して特性の悪い閾値電圧へプログラムされるメモリセルの数を低減し、特性のよい閾値電圧へプログラムされるメモリセルの数を増加させることができる。
【0028】
誤り抑制符号は、エラー・ミチゲーション・コード(EMC:Error Mitigation Code)と呼ばれることもある。誤り抑制符号の一例はアシンメトリック・コーディング(Asymmetric Coding)である。誤り抑制符号の別の一例はページ・シンメトリック・コーディング(PSC:Page Symmetric Coding)である。誤り抑制符号化の詳細については後述する。
【0029】
メモリI/F1434は、NANDコントローラ14とNANDパッケージ21とを接続し、NANDコントローラ14とNANDパッケージ21との間の通信を司る。メモリI/F1434は、トグルDDR(Double Data Rate)インタフェース、ONFI(Open NAND Flash Interface)のようなNANDインタフェース規格に基づいて構成されている。
【0030】
(誤り抑制符号化について)
ここで、誤り抑制符号化について説明する。以下では、メモリセルがTLCである場合を例に説明するが、SLCおよび他のMLCのメモリセルについても同様の手順を適用できる。
【0031】
図2(a)に、TLCのメモリセルの閾値電圧とデータコーディングとの対応付けの一例を示す。図2(b)は、TLCのメモリセルの閾値電圧分布を示す。図2(b)において、横軸は閾値電圧(Vth)を表し、縦軸はメモリセルを分布Er~分布Gのそれぞれにプログラムしたときの、そのメモリセルの閾値電圧の発生確率(P(Vth))を表している。また、電圧VA~電圧VGは読み出し時にメモリセルのゲートへ印加する読み出し電圧を表している。
【0032】
図2(b)に示すように、TLCのメモリセルの場合、閾値電圧分布には、分布Er、分布A、分布B、分布C、分布D、分布E、分布F、及び分布Gの8つの分布が含まれる。分布Erは閾値電圧が最も低く、消去状態の閾値電圧分布に対応する。分布A、分布B、分布C、・・・分布Gの順に閾値電圧が高くなる。分布Gは閾値電圧が最も高い。3ビット/セルのTLCを用いる場合、8つの閾値電圧分布Er、A、B、C、D、E、F、及びGに、3ビットのデータ値をそれぞれ対応させる。この対応をデータコーディングという。すなわち、このデータコーディングに従って、各メモリセルに記憶されるべきデータ値に応じた閾値電圧が定められる。データの書込み(プログラム)時には、図2(b)に示すそれぞれの範囲内に閾値電圧が収まるように各メモリセルに電荷が注入される。例えば、あるメモリセルに(LOWER,MIDDLE,UPPER)=(0,1,1)というデータを書き込む場合には、そのメモリセルの閾値電圧がVAとVBの間に収まるように電荷が注入される。
【0033】
TLCの場合、1つのワード線に接続されたメモリセルグループに格納されるデータ(以下、ワードラインデータという)が、3ページ分のデータ(以下、1ページ分のデータをページデータという)に対応する。ページデータのサイズは、例えば16KByteである。各メモリセルが記憶可能な3ビットそれぞれは、これら3ページのいずれかに対応している。以下の説明では、これら3ページを、それぞれUPPERページ、MIDDLEページ、およびLOWERページと呼ぶ。
【0034】
図2(a)は、データコーディングの一例を示す図である。図2(a)に示すように、分布Erは“111”のデータ値に対応し、分布Aは“110”のデータ値に対応し、分布Bは“100”のデータ値に対応し、分布Cは“000”のデータ値に対応し、・・・分布Gは“101”のデータ値に対応する。図2(a)に示すデータコーディングは一例である。データコーディングは図2(a)の例に限定されない。
【0035】
続いて、図3を参照して誤り抑制符号化の概要を説明する。図3中のU、MおよびLは、それぞれUPPERページ、MIDDLEページおよびLOWERページを表す。図3に示すように、書き込み対象のデータであるユーザデータ401を用いて、フラグ生成部142がフラグ411を生成して、誤り抑制符号化/復号部1433が誤り抑制符号化処理を実行する。そして、誤り抑制符号化されたユーザデータと、フラグ411とが、NANDメモリ20に書き込まれる。
【0036】
書き込み対象のデータはホストから取得したユーザデータに限られない。書き込み対象データは、ガベージコレクション、ウェアレベリング、リフレッシュ処理のようなメモリシステム1内で行われる内部処理に伴うデータでもよい。
【0037】
続いて、図4を参照して誤り抑制符号化の詳細を説明する。図4中のU、MおよびLは、それぞれUPPERページ、MIDDLEページおよびLOWERページを表す。まず、UPPERページ、MIDDLEページおよびLOWERページのユーザデータ401が、ある一定のデータ長(例えば、128ビット)に区切られる。そして、フラグ生成部142は、区切られたユーザデータ(以下ではセグメントデータと称する)毎に、1ビットのフラグ411を生成する。
【0038】
誤り抑制符号化は、セグメントデータ毎に、上記フラグに基づいてユーザデータ401の各ビットを符号化する。誤り抑制符号化/復号部1433は、例えば、ユーザデータ401のビットごとに、フラグ411との排他的論理和(EXOR)を算出することにより各ビットを符号化する。誤り抑制符号化/復号部1433は、例えば、フラグ411が「1」である場合、ユーザデータ401のビットを反転させ、フラグ411が「0」である場合、ユーザデータ401のビットを反転させない。
【0039】
フラグ411は、例えばNANDメモリ20に書き込むデータを誤りにくいビット列へ可逆的に変換するためのフラグである。フラグ生成部142は、例えばコストに基づいてフラグ411を生成する。コストは、データの誤り易さを示す。例えばコストの値が小さいほど、データは誤りにくいことを表す。
【0040】
フラグ生成部142は、例えば、以下の条件に基づいてコストを計算する。
(条件1)図2(b)に示した分布Gへプログラムされるメモリセルの個数が小さいほどコストが小さくなる。
(条件2)ワード線に接続されているメモリセルのうち、「分布G-分布Er-分布G」とメモリセルが並んでいる箇所の個数が小さいほどコストが小さくなる。
【0041】
すなわち、フラグ生成部142は、ユーザデータ401と当該フラグ411との排他的論理和を実行した場合に、「図2(b)に示した分布Gが少なくなる」または「分布G-分布Er-分布Gの並びが少なくなる」等の条件を満たすようなフラグを生成する。このように、フラグ生成部142は、閾値電圧の条件によるコストに基づいてフラグ411を生成する。
【0042】
コストは、各メモリセルへ書き込まれるべきデータに基づいて算出される。従って、あるページデータから得られるセグメントデータに対応するコストを算出するためには、他の2ページ分のページデータも必要である。すなわち、LOWERページのユーザデータ401から得られるセグメントデータに対応するコストの算出には、LOWERページのユーザデータ401、MIDDLEページのユーザデータ401、UPPERページのユーザデータ401が必要である。
【0043】
フラグ生成部142によりフラグ411が生成されると、誤り抑制符号化/復号部1433は、上記フラグ411と、ユーザデータ401との排他的論理和を実行することで、ユーザデータ401を符号化する。誤り抑制符号化/復号部1433は、符号化したユーザデータを生成する。フラグ411と、符号化したユーザデータとがNANDメモリ20に書き込まれる。例えば、セグメントデータ毎に生成された複数のフラグ411は、符号化されたユーザデータの末尾にページ毎に結合され、NANDメモリ20に書き込まれる。
【0044】
続いて、図5を参照して誤り抑制符号化の他の例を説明する。図5中のU、MおよびLは、それぞれUPPERページ、MIDDLEページおよびLOWERページを表す。図5に示すように、誤り抑制符号化の他の例では、UPPERページとMIDDLEページとLOWERページとのそれぞれのページデータが任意の整数で分割される。例えば、図5に示すように、UPPERページは、128ビット毎に区切られる。MIDDLEページは、64ビット毎に区切られる。LOWERページは、32ビット毎に区切られる。そして、それぞれのセグメントデータ単位でコストを計算してフラグ411を生成するようにしてもよい。この場合、ページ毎に異なる個数のセグメントデータが生成され、これを基にフラグ411が生成されるので、ページ毎にフラグの量が異なる。
【0045】
ここで、UPPERページ、MIDDLEページ、およびLOWERページの各ページのユーザデータに対して、ランダマイズして、上述のフラグを生成して、誤り抑制符号化して、誤り訂正用のパリティデータを付加して、NANDメモリに書き込むことを検討する。
【0046】
この場合、NANDメモリ20のメモリセル間の干渉効果を低減するため、ワード線に接続されたメモリセルにまずLOWERページを書き込んでから、その後、UPPERページおよびMIDDLEページを追加書き込みすることがある。この場合、NANDI/F143の内部に大きなバッファが必要になってしまう。
【0047】
そこで、本実施形態のメモリシステム1は、以下に説明するようにNANDメモリ20へのデータの書き込みを行う。
【0048】
次に、本実施形態によるメモリシステム1による符号化および復号の流れについて説明する。図6は、メモリシステム1による符号化および復号の流れを説明するための図である。
【0049】
図6中のU、MおよびLは、それぞれUPPERページ、MIDDLEページおよびLOWERページを表す。「Rand」と記載しているデータは、ランダマイズされたデータであることを示す。「No Rand」と記載しているデータは、ランダマイズされていないデータまたはデランダマイズされたデータであることを示す。
【0050】
CPU11は、ホスト2から受信したライト要求に応答してライトコマンドを発行して、発行したライトコマンドをNANDコントローラ14に送信する。CPU11は、バッファ141にライト対象のユーザデータを入力する。これに応じて、NANDコントローラ14は、符号化処理を行う。図中にWrite Pathと示す符号化時において、フラグ生成部142は、バッファ141からUPPERページ、MIDDLEページ、およびLOWERページのユーザデータ401を取得し、それぞれをランダマイザ(RAND)1421でランダマイズする。フラグ生成部142のフラグ生成コア部(FG)1422は、ランダマイズされた各ページのユーザデータ401からセグメントデータを生成し、これを基にフラグ411を生成する。フラグ生成部142は、生成したフラグ411をバッファ141へ送出する。
【0051】
NANDI/F143は、LOWERページのユーザデータ401(ランダマイズされる前のページ単位のユーザデータ401)と、フラグ411(LOWERページのユーザデータに対応するフラグ)とを、バッファ141から取得する。ランダマイザ(RAND)1431は、LOWERページのユーザデータ401をランダマイザ1421で用いたのと同じランダム系列でランダマイズする。この時、ランダマイザ1431は、フラグ411をランダマイズしない。そして、誤り抑制符号化/復号部(Flag Flipper(FLP))1433は、フラグ411に基づいて、ランダマイズしたLOWERページのユーザデータ401を、セグメントデータ単位で誤り抑制符号化する。そして、ECC符号化/復号部(ECCENC)1432は、誤り抑制符号化/復号部1433から取得した誤り抑制符号化されたユーザデータ401とフラグ411とに基づいてパリティデータ(ECC parity)421を生成する。NANDI/F143は、誤り抑制符号化されたユーザデータ401と、フラグ411と、パリティデータ421とを、NANDメモリ20へ書き込む。
【0052】
このように、NANDI/F143は、1ページ分のユーザデータ401(例えば、LOWERページのユーザデータ401)と、当該ユーザデータ401に対応するフラグ411とに基づいて、ランダマイズ処理とセグメントデータ単位での誤り抑制符号化処理をし、誤り訂正符号化されたユーザデータをNANDメモリ20へ書き込む。
【0053】
CPU11は、ホスト2から受信したリード要求に応答してリードコマンドを発行して、発行したリードコマンドをNANDコントローラ14に送信する。これに応じて、NANDコントローラ14は、復号処理を行う。図中にRead Pathと示す復号時には、ECC符号化/復号部(ECCDEC)1432が、NANDメモリ20から読み出したデータを誤り訂正する。そして、誤り抑制符号化/復号部(FLP)1433は、誤り訂正したデータをフラグ411に基づいて復号する。そして、ランダマイザ(RAND)1431は、復号したデータをデランダマイズし、そのデータをバッファ141へ送出する。
【0054】
続いて、第1の実施形態における符号化処理手順について、図7に示すフローチャートを用いて説明する。CPU11は、ホスト2からユーザデータを取得すると、当該ユーザデータをバッファ141に保存する(ステップS1)。フラグ生成部142は、バッファ141に保存されたユーザデータを取得すると、当該ユーザデータをランダマイズする(ステップS2)。フラグ生成部142は、ランダマイズされたユーザデータをセグメントデータに分割し、セグメントデータ毎にフラグ411を生成する(ステップS3)。フラグ生成部142は、当該フラグ411をバッファ141へ送出する(ステップS4)。
【0055】
NANDI/F143は、バッファ141からページ単位のランダマイズされていないユーザデータ401と、当該ユーザデータ401に対応するフラグ411とを取得する(ステップS5)。ランダマイザ1431は、ユーザデータ401をランダマイズする(ステップS6)。この時、ランダマイザ1431は、フラグ411をランダマイズしない。誤り抑制符号化/復号部1433は、フラグ411に基づいて、ランダマイズしたユーザデータ401をセグメントデータ単位で誤り抑制符号化する(ステップS7)。ECC符号化/復号部1432は、誤り抑制符号化したユーザデータ401と、フラグ411と、に基づいてパリティデータ421を生成する(ステップS8)。NANDI/F143は、誤り抑制符号化されたユーザデータ401と、フラグ411と、パリティデータ421とを、NANDメモリ20へ書き込む(ステップS9)。
【0056】
上述のように、NANDコントローラ14のフラグ生成部142は、ホスト2から取得したユーザデータ401をランダマイズした結果に基づいて誤り抑制符号化のためのフラグ411を生成する。また、NANDコントローラ14は、フラグ411と、ランダマイザ1431によりランダマイズされ、誤り抑制符号化/復号部1433によりセグメントデータ単位で誤り抑制符号化されたユーザデータ401と、ECC符号化/復号部1432により生成されたパリティデータと、をNANDメモリ20に書き込む。
【0057】
NANDコントローラ14は、3ページ分のユーザデータ401を用いて、誤り抑制符号化のためのフラグ411を生成し、フラグ411をバッファ141へ格納する。次に、NANDコントローラ14は、バッファ141から1ページ分のユーザデータ401と、当該ユーザデータ401に対応するフラグ411とを取得して、当該ユーザデータ401およびフラグ411に基づいてランダマイズ、誤り抑制符号化、および誤り訂正符号化の処理を行う。これにより、NANDコントローラ14は、NANDI/F143内に、容量が大きい(例えば3ページ分の)バッファを設ける必要はない。このように、メモリコントローラ10は、効率良くデータを書き込むことができる。
【0058】
(変形例)
上述した第1の実施形態では、ランダマイザ1431が、ユーザデータ401をランダマイズし、誤り抑制符号化/復号部1433が、ランダマイズしたユーザデータ401をセグメントデータ単位でフラグ411に基づいて誤り抑制符号化し、ECC符号化/復号部1432が、誤り抑制符号化されたユーザデータ401と、フラグ411と、に基づいてパリティデータ421を生成する。しかし、これらの処理手順を変更してもよい。例えば、誤り抑制符号化/復号部1433が、ランダマイズされていないユーザデータ401をセグメントデータ単位でフラグ411に基づいて誤り抑制符号化し、ECC符号化/復号部1432が、誤り抑制符号化されたユーザデータ401と、フラグ411と、に基づいてパリティデータ421を生成し、ランダマイザ1431が、誤り抑制符号化されたユーザデータ401と、フラグ411と、パリティデータ421と、をランダマイズするようにしてもよい。なぜなら、誤り抑制符号化/復号部1433による誤り抑制符号化処理も、ランダマイザ1431によるランダマイズ処理もビット単位のEXOR処理であるので、処理順序を変更できるからである。
【0059】
(第2の実施形態)
第2の実施形態のメモリシステムは、積符号による誤り訂正システムを実装する。すなわち、メモリシステム1は、複数種類のパリティデータを付加する誤り訂正符号化処理を行う。
【0060】
図8は、第2の実施形態にかかるメモリシステム1の構成の一例を示す図である。図8に示すように、第2の実施形態では、誤り抑制符号化/復号部インタフェース(I/F)144が、NANDI/F143から独立している。また、第1ECC符号化部145および積符号復号部146が、NANDI/F143から独立している。誤り抑制符号化/復号部I/F144は、誤り抑制符号化/復号部1433を含む。
【0061】
第1ECC符号化部145は、データに対する誤り検出及び誤り訂正のために、データの符号化をする。例えば、第1ECC符号化部145は、各行がUPPERページ、MIDDLEページ、およびLOWERページのいずれかよりなるユーザデータを行列とした場合における、列方向の誤り訂正符号を生成する。第1ECC符号化部145による符号化のアルゴリズムには、例えばRS(リード・ソロモン)符号が適用される。
【0062】
積符号復号部146は、NANDI/F143から出力されたデータを復号する。例えば、積符号復号部146は、LOWERページ、UPPERページおよびMIDDLEページのいずれかのユーザデータを複数ページ分取得すると、これらのユーザデータを行列とした場合の行方向および列方向における誤り検出処理と誤り訂正処理を行う。
【0063】
第2ECC符号化/復号部14322は、データに対する誤り検出及び誤り訂正のために、データの符号化をする。例えば、第2ECC符号化/復号部14322は、UPPERページ、MIDDLEページ、およびLOWERページのいずれかよりなるユーザデータを行列とした場合における、行方向の誤り訂正符号を生成する。第2ECC符号化/復号部14322による符号化および復号のアルゴリズムには、例えばBCH(Bose-Chaudhuri-Hocquenghem)符号や低密度パリティ検査(LDPC)符号が適用される。
【0064】
次に、第2の実施形態にかかるメモリシステム1による符号化および復号の流れについて説明する。図9は、第2の実施形態にかかるメモリシステム1による符号化および復号の流れを説明するための図である。
【0065】
図9中のU、MおよびLは、それぞれUPPERページ、MIDDLEページ、およびLOWERページを表す。「Rand」と記載しているデータは、ランダマイズされたデータであることを示す。「No Rand」と記載しているデータは、ランダマイズされていないデータまたはデランダマイズされたデータであることを示す。
【0066】
まず、図中にWrite Pathと示す符号化時において、フラグ生成部142は、バッファ141から、UPPERページ、MIDDLEページ、およびLOWERページのユーザデータ401を取得し、それぞれをランダマイザ(RAND)1421でランダマイズする。フラグ生成部142のフラグ生成コア部(FG)1422は、ランダマイズされた各ページのユーザデータ401からセグメントデータを生成し、これを基にフラグ411を生成する。フラグ生成部142は、生成したフラグ411をバッファ141へ送出する。
【0067】
誤り抑制符号化/復号部I/F144は、LOWERページのユーザデータ401(ランダマイズされる前のページ単位のユーザデータ401)と、フラグ411(LOWERページのユーザデータに対応するフラグ)とをバッファ141から取得する。誤り抑制符号化/復号部(FLP)1433は、フラグ411に基づいて、ランダマイズされていないLOWERページのユーザデータ401を、セグメントデータ単位で誤り抑制符号化する。第1ECC符号化部(ECC1ENC)145は、誤り抑制符号化されたユーザデータおよびフラグ411を取得しておく。
【0068】
第2ECC符号化/復号部(ECC2ENC)14322は、誤り抑制符号化されたユーザデータおよびフラグ411に基づいてパリティデータ421を生成する。第2ECC符号化/復号部(ECC2ENC)14322は、当該誤り抑制符号化されたユーザデータおよびフラグ411にパリティデータ421を付加する。ランダマイザ(RAND)1431は、誤り抑制符号化されたユーザデータとフラグ411とパリティデータ421とをランダマイズする。NANDI/F143は、ランダマイズされたユーザデータと、ランダマイズされたフラグ411と、ランダマイズされたパリティデータ421と、をNANDメモリ20へ書き込む。
【0069】
上述した処理が複数回繰り返されることにより、第1ECC符号化部145は、UPPERページ、MIDDLEページ、およびLOWERページのいずれかよりなるユーザデータとこれに対応するフラグ411を複数取得する。第1ECC符号化部145は、積符号の行列を構成するユーザデータとこれに対応するフラグ411を取得すると、列方向のパリティデータ群422を生成する。第2ECC符号化/復号部(ECC2ENC)14322は、当該パリティデータ群422にパリティデータ421を付加する。ランダマイザ(RAND)1431は、パリティデータ群422とパリティデータ421とをランダマイズする。NANDI/F143は、ランダマイズされたパリティデータ群422とランダマイズされたパリティデータ421と、をNANDメモリ20へ書き込む。
【0070】
図中にRead Pathと示す復号時には、ランダマイザ(RAND)1431が、NANDメモリ20から読み出したデータをデランダマイズする。そして、第2ECC符号化/復号部(ECC2ENC)14322は、パリティデータ421に基づいて誤り訂正を行う。積符号復号部146は、第2ECC符号化/復号部(ECC2ENC)14322によって誤り訂正がされたユーザデータ、フラグ411、およびパリティデータ421を取得する。
【0071】
上述した処理が複数回繰り返されることにより、積符号復号部146は、積符号の行列を構成するユーザデータとこれに対応するフラグ411およびパリティデータ421を取得する。
【0072】
ランダマイザ(RAND)1431は、NANDメモリ20から読み出したパリティデータ群422とこれに対応するパリティデータ421をデランダマイズする。第2ECC符号化/復号部(ECC2ENC)14322は、パリティデータ421に基づいて誤り訂正を行う。積符号復号部146は、第2ECC符号化/復号部(ECC2ENC)14322によって誤り訂正がされたパリティデータ群422とこれに対応するパリティデータ421を取得する。
【0073】
すなわち、積符号復号部146は、積符号の行列を構成するユーザデータとこれに対応するフラグ411およびパリティデータ421、並びにパリティデータ群422とこれに対応するパリティデータ421を取得する。積符号復号部146は、これらのデータを用いてパリティデータ421およびパリティデータ群422のパリティデータに基づいた誤り訂正処理を行う。そして、誤り抑制符号化/復号部(FLP)1433は、誤り訂正処理をした後のデータに対して、フラグ411を用いて復号し、復号後のデータをバッファ141へ送出する。
【0074】
続いて、第2の実施形態にかかるメモリシステム1における符号化の処理手順について、図10に示すフローチャートを用いて説明する。図10は、第2の実施形態における符号化の処理手順を示すフローチャートである。
【0075】
CPU11は、ホスト2からユーザデータ401を取得すると、当該ユーザデータをバッファ141に保存する(ステップS11)。フラグ生成部142のランダマイザ1421は、バッファ141に保存されたユーザデータ401を取得すると、当該ユーザデータ401をランダマイズする(ステップS12)。フラグ生成部142のフラグ生成コア部1422は、ランダマイズされたユーザデータをセグメントデータに分割し、セグメントデータ毎にフラグ411を生成する(ステップS13)。
【0076】
フラグ生成部142は、当該フラグ411をバッファ141へ送出する(ステップS14)。誤り抑制符号化/復号部I/F144は、バッファ141からページ単位のユーザデータ401と、当該ユーザデータ401に対応するフラグ411とを取得する(ステップS15)。誤り抑制符号化/復号部1433は、ユーザデータ401とフラグ411とに基づいて、ユーザデータ401をセグメント単位で誤り抑制符号化処理を行う(ステップS16)。
【0077】
第1ECC符号化部145は、誤り抑制符号化したユーザデータの行列を取得すると、列方向のパリティデータ群422を生成する(ステップS17)。第2ECC符号化/復号部14322は、誤り抑制符号化したユーザデータ401およびフラグ411、並びにパリティデータ群422に基づいてパリティデータ421を生成する(ステップS18)。ランダマイザ1431は、誤り抑制符号化したデータ、フラグ411、パリティデータ群422、およびパリティデータ421をランダマイズする(ステップS19)。NANDI/F143は、ランダマイズしたデータをNANDメモリ20へ書き込む(ステップS20)。
【0078】
上述のように、NANDコントローラ14のフラグ生成部142は、ホスト2から取得したユーザデータ401をランダマイズした結果に基づいて誤り抑制符号化のためのフラグ411を生成する。誤り抑制符号化/復号部1433は、ユーザデータ401をセグメントデータ単位でフラグ411に基づいて誤り抑制符号化する。第1ECC符号化部145および第2ECC符号化/復号部14322は、ページ単位のユーザデータ401を誤り訂正符号化し、パリティデータ421を生成する。ランダマイザ1431は、フラグ411とページ単位のユーザデータ401とパリティデータと421をランダマイズする。NANDコントローラ14は、ランダマイズされたデータをNANDメモリ20に書き込む。
【0079】
誤り抑制符号化/復号部1433による誤り抑制符号化処理も、ランダマイザ1431によるランダマイズ処理もビット単位のEXOR処理であるので、処理順序を変更できる。これに基づいて、NANDコントローラ14は、誤り抑制符号化処理および誤り訂正符号化処理をした後に、ランダマイズ処理を行う。この結果、NANDコントローラ14は、フラグおよびパリティデータもランダマイズすることができる。また、NANDコントローラ14がランダマイズ処理を行うタイミングをNANDメモリ20への書き込み直前とすることで、ランダマイザの影響を局在化することができる。これにより、デバッグおよび実機評価における過剰な煩雑さを防止することができる。
【0080】
ランダマイザ1431をNANDI/F143に配置すればCPU11は複数のページデータ取得時に用いる複数のページ情報と、それら各ページデータをランダマイザ1431でランダマイズするときに用いる複数のランダマイズキーを同時にNANDI/F143に設定することができる。一方、ランダマイザ1431を誤り抑制符号化/復号部I/F144に配置してしまうと、CPU11は複数のページ情報をNANDI/F143に設定し、誤り抑制符号化/復号部I/F144に複数のランダマイズキーを設定する必要がある。そして誤り抑制符号化/復号部I/F144はバッファ141から受信するページデータとランダマイズキーとの間で対応付け処理も行わなければならず、全体として処理が煩雑化してしまう。
【0081】
積符号による誤り訂正システムを実装する場合、チャネル毎に実装する必要のない第1ECC符号化部145と積符号復号部146とを、チャネル毎に実装されるNANDI/F143から分離することが望ましい。
【0082】
誤り訂正がされていないデータに対して誤り抑制符号化/復号部1433による復号処理を行ってしまうと、誤りが増えてしまう。このため、第2ECC符号化/復号部14322および積符号復号部146による誤り訂正処理は、誤り抑制符号化/復号部1433による復号処理よりも先に行う必要がある。すなわち、第2ECC符号化/復号部14322および積符号復号部146による誤り訂正処理は、誤り抑制符号化処理がされたデータを対象にする必要がある。これに伴い、書き込み時は、誤り抑制符号化/復号部1433による誤り抑制符号化処理を先に行い、その後で第1ECC符号化部145および第2ECC符号化/復号部14322による誤り訂正符号化処理を行う必要がある。
【0083】
第2の実施形態に係るNANDコントローラ14は、フラグ411と、ページ単位のユーザデータ401とに基づいて、誤り抑制符号化/復号部1433が誤り抑制符号化し、第1ECC符号化部145および第2ECC符号化/復号部14322が誤り訂正符号化し、ランダマイザ1431がランダマイズしたデータをNANDメモリ20に書き込むので、構成を複雑にすることなく、効率良くデータを書き込むことができる。
【0084】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0085】
1 メモリシステム、2 ホスト、10 メモリコントローラ、11 CPU、12 ホストI/Fコントローラ、13 RAM、14 NANDコントローラ、20 NANDメモリ、21 NANDパッケージ、141 バッファ、142 フラグ生成部、143 NANDI/F、144 誤り抑制符号化/復号部I/F、145 第1ECC符号化部、146 積符号復号部、1431 ランダマイザ、1432 ECC符号化/復号部、1433 誤り抑制符号化/復号部、1434 メモリI/F、14322 第2ECC符号化/復号部。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10