(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-19
(45)【発行日】2022-12-27
(54)【発明の名称】データ処理装置及びデータ処理プログラム
(51)【国際特許分類】
G06F 12/00 20060101AFI20221220BHJP
G06F 11/10 20060101ALI20221220BHJP
G06F 7/58 20060101ALI20221220BHJP
【FI】
G06F12/00 550Z
G06F11/10 612
G06F7/58 680
(21)【出願番号】P 2018152402
(22)【出願日】2018-08-13
【審査請求日】2021-05-13
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】羽根田 光正
(72)【発明者】
【氏名】内田 淳
【審査官】北村 学
(56)【参考文献】
【文献】特開2005-130062(JP,A)
【文献】特開2018-045501(JP,A)
【文献】米国特許出願公開第2012/0144277(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
G06F 11/10
G06F 7/58
(57)【特許請求の範囲】
【請求項1】
第1乱数データを継続的に生成する第1乱数発生器と、
前記第1乱数発生器により生成された
第1の第1乱数データを基に
複数の第2乱数データを生成する第2乱数発生器と、
前記第1乱数発生器により生成された
第2の第1乱数データ、及び、不揮発性メモリへの複数の書込データ
のそれぞれに異なる前記第2乱数データを結合した結合データを用いて、前記書込データ毎に異なる誤り検出符号を算出する算出部と、
前記算出部により算出された各前記誤り検出符号を基に各前記書込データをランダム化してランダム化済書込データを生成するランダム化部と、
前記ランダム化済書込データと前記誤り検出符号の算出に用いた前記第2の第1乱数データとを前記不揮発性メモリに書き込むデータ書込部と
を備えたことを特徴とするデータ処理装置。
【請求項2】
前記算出部は、前記第2の
第1乱数データを取得し、取得した前記第2の第1乱数データをシード値として、前記書込データの書き込みが完了するまで継続して前記誤り検出符号の算出を行うことを特徴とする請求項
1に記載のデータ処理装置。
【請求項3】
前記算出部は、前記書込データ
のそれぞれに異なる前記第2乱数データを付加して
前記結合データを生成し、前記第2の第1乱数データ及び前記結合データを基に前記誤り検出符号の算出を行うことを特徴とする請求項1
又は2に記載のデータ処理装置。
【請求項4】
前記ランダム化部は、前記誤り検出符号と前記書込データとの排他的論理和を求めることで、前記ランダム化済書込データを生成することを特徴とする請求項1~3のいずれか一つに記載のデータ処理装置。
【請求項5】
前記不揮発性メモリから1度に読み出し可能な数のランダム化済書込データと前記第2の第1乱数データとを前記不揮発性メモリから読み出すデータ読出部をさらに備え、
前記算出部は、前記データ読出部により読み出された前記第2の第1乱数データを取得し、取得した前記第2の第1乱数データを基に前記誤り検出符号を算出し、
前記ランダム化部は、前記第2乱数データ及び前記算出部により算出された前記誤り検出符号を基に、前記不揮発性メモリから読み出されたランダム化済書込データのランダム化を解除して前記書込データを取得する
ことを特徴とする請求項1~4のいずれか一つに記載のデータ処理装置。
【請求項6】
第1乱数データを継続的に生成し、
第1の第1乱数データを基に
複数の第2乱数データを生成し、
第2の第1乱数データ、及び、不揮発性メモリへの複数の書込データ
のそれぞれに異なる前記第2乱数データを結合した結合データを用いて、前記書込データ毎に異なる誤り検出符号を算出し、
算出した各前記誤り検出符号を基に各前記書込データをランダム化してランダム化済書込データを生成し、
前記ランダム化済書込データと前記誤り検出符号の算出に用いた前記第2の第1乱数データとを前記不揮発性メモリに書き込む
処理をコンピュータに実行させることを特徴とするデータ処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ処理装置及びデータ処理プログラムに関する。
【背景技術】
【0002】
近年、コンピュータの発達やアプリケーションの拡大にしたがいメモリの大容量化の要望がさらに高まっている。一方、NAND型のフラッシュメモリであるNANDフラッシュメモリは、ビットあたりのコストの低価格化及び大容量化が進んでいる。そこで、書き込み速度の速いNANDフラッシュの普及が急速に拡大した。さらに、NANDフラッシュメモリでは、さらなる大容量化の要望に応えるため多値化の研究が進んでいる。
【0003】
NANDフラッシュメモリでは、ページ単位でデータの書き込みが行われる。一方、NANDフラッシュメモリにおけるデータの読み出しは、ページに含まれるカラムを複数まとめたカラム群毎に行われる。以下では、データを読み出すカラム群毎の単位を読み出し単位という。さらに、NANDフラッシュメモリでは、ページを複数集めたブロック単位でデータの消去が行われる。
【0004】
ここで、データの書き込みに際して次のような問題が発生する。1つには、読み書きや消去が行われる領域が偏り、読み書きや消去が頻繁に行われる領域のトランジスタの寿命が短くなる。また、NANDフラッシュメモリでは読み出したデータの何ビットかにデータ化けが発生する。そのため、読み出す領域が特定領域に固まった場合、エラー訂正が困難になり、書き込んだデータの信頼性が低下する。そこで、多値化されたNANDフラッシュメモリでは、長寿命化及びデータの信頼性保持の観点から書き込み時にデータをランダム化することが好ましい。
【0005】
NANDフラッシュメモリにおけるデータのランダム化には、以下の要件を満たすことが重要である。1つには、ページ毎にランダムなデータであること。次に、ページ内のカラムごとにランダムなデータであること。最後に、同じページ内でも、そのページが属するブロックにおけるデータの消去の前後で近似なデータにならないこと。これらの要件を満たすことでNANDフラッシュメモリにおけるデータのランダム化が達成される。
【0006】
データのランダム化の方式としては、書込データと乱数化されたデータ列である乱数列との排他的論理和(XOR:exclusive or)を求めることでNANDフラッシュメモリに書き込むデータをランダム化する方法が一般的である。ここで、乱数列に含まれる各乱数データは、例えば、乱数の初期値であるシード値を基にして順次生成される。
【0007】
また、ランダム化されたデータは、読み出し時に書き込み時と同じ乱数列を生成して読み出したデータとの排他的論理和を求めることでランダム化前の値に復元される。ここで、前述のようにNANDフラッシュメモリではページ単位のデータの書き込みに対し読み出し単位でデータが読み出されるため、データのランダム化に用いる乱数列は、読み出し単位のデータ数の乱数データを有することになる。このような方法でデータをランダム化する場合、乱数列の長さに比例してランダム性は向上する。
【0008】
ここで、データ書込みにおけるランダム化の技術として、2つの異なる方法で2つの乱数列を発生させ、各乱数列を用いてNANDフラッシュの書込み位置をランダム化する従来技術がある。また、乱数生成の技術として、読み出しデータを用いて乱数パラメータを生成し、生成した乱数パラメータをシード値として乱数を発生させる従来技術がある。
【先行技術文献】
【特許文献】
【0009】
【文献】特開2009-157841号公報
【文献】特開2012-252195号公報
【発明の概要】
【発明が解決しようとする課題】
【0010】
しかしながら、NANDフラッシュメモリの読み出し単位は、例えば256Byteであり、これはカラムの数としては125カラム前後にあたり、ランダム性を確保するのに十分な長さを有するとは言えない。そのため、NANDフラッシュメモリの読み出し単位毎に初期化された乱数化されたデータを使用した場合、データのランダム性を向上させることは困難である。
【0011】
また、NANDフラッシュのデータ幅は16ビットが一般的であり、従来のランダム化の方式では、乱数化されたデータ列のシード値も同じビット幅となる。さらに、シード値にはページ情報も含まれることになる。そのため、シード値として使用できる値が制限され、ランダム性の阻害要因となる。
【0012】
さらに、前述した要件を満たすため、あるブロックのデータが消去された後にそのブロックに新しくデータが書き込まれる場合、書き込まれるデータは、消去前のデータとは近似しない値を取ることが好ましい。そこで、ブロックのデータ消去後に新たにデータを書き込む場合、書き込むデータをランダム化するための乱数化されたデータ列のシード値を切替えることが一般的である。これを実現するために、各ブロックに対応した乱数化されたデータ列のシード値の値を含むテーブルを保持することになり、システムが複雑化してしまう。
【0013】
開示の技術は、上記に鑑みてなされたものであって、簡易な構造でデータのランダム性を向上させるデータ処理装置及びデータ処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0014】
本願の開示するデータ処理装置及びデータ処理プログラムの一つの態様において、第1乱数発生器は、第1乱数データを継続的に生成する。第2乱数発生器は、前記第1乱数発生器により生成された第1の第1乱数データを基に複数の第2乱数データを生成する。算出部は、前記第1乱数発生器により生成された第2の第1乱数データ、及び、不揮発性メモリへの複数の書込データのそれぞれに異なる前記第2乱数データを結合した結合データを用いて、前記書込データ毎に異なる誤り検出符号を算出する。ランダム化部は、前記算出部により算出された各前記誤り検出符号を基に各前記書込データをランダム化してランダム化済書込データを生成する。書込部は、前記ランダム化済書込データと前記誤り検出符号の算出に用いた前記第2の第1乱数データとを前記不揮発性メモリに書き込む。
【発明の効果】
【0015】
1つの側面では、本発明は、簡易な構造でデータのランダム性を向上させることができる。
【図面の簡単な説明】
【0016】
【
図1】
図1は、書き込み時のNANDコントローラの機能を表すブロック図である。
【
図2】
図2は、実施例に係るNANDコントローラによるNANDフラッシュメモリへのデータの書き込みを説明するための図である。
【
図3】
図3は、NANDフラッシュメモリに書き込まれるデータのフォーマットを表す図である。
【
図4】
図4は、読み出し時のNANDコントローラの機能を表すブロック図である。
【
図5】
図5は、データの書き込みのシーケンス図である。
【
図6】
図6は、データ書き込み時のタイミングチャートである。
【
図7】
図7は、データ読み出し時のタイミングチャートである。
【発明を実施するための形態】
【0017】
以下に、本願の開示するデータ処理装置及びデータ処理プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示するデータ処理装置及びデータ処理プログラムが限定されるものではない。
【実施例】
【0018】
図1は、書き込み時のNANDコントローラの機能を表すブロック図である。NANDコントローラ10は、ホスト1及びNANDフラッシュメモリ2に接続される。
【0019】
ホスト1は、演算処理を行う演算処理装置である。ホスト1は、NANDフラッシュメモリ2に対するデータの読み出し及び書き込みの命令をNANDコントローラ10へ送信する。NANDフラッシュメモリ2は、不揮発性メモリである。NANDフラッシュメモリ2は、書き込み単位であるページ単位でデータが書き込まれる。また、NANDフラッシュメモリ2は、ページに含まれるカラムを複数まとめた読み出し単位でデータが読み出される。さらに、NANDフラッシュメモリ2は、ページを複数まとめたブロック単位でデータの消去が行われる。
【0020】
NANDコントローラ10は、ホスト1から送信されたデータの書き込み命令又は読み出し命令にしたがって、NANDフラッシュメモリ2に対するデータの読み出し及び書き込みを行う。NANDコントローラ10は、乱数生成部101、データ結合部102、CRC(Cyclic Redundancy Check)演算器103、XOR回路104、データ書込部105及びデータ消去部106を有する。
【0021】
乱数生成部101は、第1乱数発生器111及び第2乱数発生器112を有する。第1乱数発生器111及び第2乱数発生器112は、例えば、線形帰還シフトレジスタ(LFSR:Linear Feedback Shift Register)である。
【0022】
第1乱数発生器111は、NANDコントローラ10の起動後、乱数の発生を開始し、その後乱数の発生を継続する。すなわち、第1乱数発生器111から発行される乱数は、常時更新される。そして、第1乱数発生器111は、生成した乱数を第2乱数発生器112及びCRC演算器103へ出力する。以下では、第1乱数発生器111が生成した乱数を第1乱数データと言う。
【0023】
第2乱数発生器112は、ホスト1からのデータの書き込み指示の入力のタイミングで、第1乱数発生器111が生成した第1乱数データを取得する。次に、第2乱数発生器112は、取得した第1乱数データをシード値として乱数列を生成する。この乱数列に含まれる乱数データは、NANDフラッシュメモリ2のデータ幅と同じサイズを有する。例えば、NANDフラッシュメモリ2のデータを入出力するためのバスのデータ幅が16ビットであれば、第2乱数発生器112で生成される乱数データも16ビットとなる。また、この乱数列は、NANDフラッシュメモリ2の読み出し単位である読み出し単位のデータをデータ幅で分割した個数の乱数データを含む。その後、第2乱数発生器112は、生成した乱数列をデータ結合部102へ出力する。以下では、第2乱数発生器112が生成した乱数を、第2乱数データという。
【0024】
読み出し単位の数の乱数データを含む乱数列の生成した後、第2乱数発生器112は、第1乱数発生器111が生成した第1乱数データを取得する。そして、第2乱数発生器112は、新たに乱数列を生成する。この後、第2乱数発生器112は、第1乱数データの取得及び取得した第1乱数データを用いた読み出し単位の数の乱数データを含む乱数列の生成を繰り返す。
【0025】
データ結合部102は、第2乱数発生器112により生成された第2乱数データの乱数列の入力を受ける。また、データ結合部102は、NANDフラッシュメモリ2へ書き込むデータの入力をホスト1から受ける。そして、データ結合部102は、書き込むデータをNANDフラッシュメモリ2のデータ幅すなわち読み出し単位に分割する。ここでは、この分割後の読み出し単位のデータを書込データという。この書込データを、NANDフラッシュメモリ2からデータを読み出す場合の1度に読み出せるカラム数分集めたデータが、読み出し単位のデータとなる。
【0026】
次に、データ結合部102は、取得した乱数列に含まれる第2乱数データを先頭から順に生成した各書込データと結合する。以下では、この書込データと第2乱数発生器112から取得した第2乱数データとを結合させたデータを結合データという。そして、データ結合部102は、結合データをCRC演算器103及びXOR回路104へ出力する。
【0027】
CRC演算器103は、誤り検出符号であるCRCを算出する回路である。CRC演算器103は、ホスト1によるNANDコントローラ10の初期化のタイミングで第1乱数発生器111が生成した第1乱数データを取得する。NANDコントローラ10の初期化のタイミングとは、例えば、NANDコントローラ10の起動時やデータの消去時である。そして、CRC演算器103は、取得した第1乱数データをシード値とする。その後、CRC演算器103は、データの書き込みのタイミングまでシード値を保持する。
【0028】
その後、データの書き込みの指示がホスト1から入力されると、CRC演算器103は、データ結合部102から書込データに乱数データが結合された結合データの入力を受ける。そして、CRC演算器103は、保持するシード値を使用して、入力された結合データに対するCRCを算出する。
【0029】
CRC演算器103は、CRCを連続で算出するので、読み出し単位のデータに含まれる書込データの個数の算出が完了すると、そのままCRCの算出を継続し、次の読み出し単位のデータのランダム化に用いるCRCの算出に移行する。すなわち、CRC演算器103は、1つ前の読み出し単位のデータに含まれる最後の書込データのランダム化に用いるCRCをシード値として、次の読み出し単位のデータに含まれる書き込みデータのランダム化に用いるCRCを算出する。このように、CRC演算器103は、読み出し単位毎に第1乱数データをシード値として誤り検出符号の算出を最初から繰り返すのではなく、全ての書込データの書き込みが完了するまで継続して誤り検出符号の算出を行う。このCRCは、NANDフラッシュメモリ2のデータ幅と同じサイズを有する。その後、CRC演算器103は、算出したCRCをXOR回路104及びデータ書込部105へ順次出力する。
【0030】
XOR回路104は、入力された2つの値の排他的論理和を求める回路である。XOR回路104は、NANDフラッシュメモリ2に書き込むデータの入力をホスト1から受ける。また、XOR回路104は、CRC演算器103からCRCの入力を順次受ける。そして、XOR回路104は、NANDフラッシュメモリ2に書き込むデータを読み出し単位に分割して書込データを生成する。XOR回路104は、書込データを分割前の順で保持する。
【0031】
次に、XOR回路104は、書込データの先頭から順番にCRC演算器103から順次入力された対応するCRCとの排他的論理和を求める。そして、XOR回路104は、算出した排他的論理和をデータ書込部105へ順次出力する。以下では、この排他的論理和を「ランダム化済書込データ」という。このXOR回路104が、「ランダム化部」の一例にあたる。そして、書込データとCRCとの排他的論理和の算出が、「ランダム化」の一例にあたる。
【0032】
データ書込部105は、ランダム化済書込データの入力をXOR回路104から受ける。また、データ書込部105は、CRCの入力をCRC演算器103から順番に受ける。そして、データ書込部105は、最初に読み出し単位のデータのランダム化に用いたCRCのシード値を配置し、それに続けてランダム化済書込データを読み出し単位分並べる。次に、データ書込部105は、次の読み出し単位のデータのランダム化に用いたCRCシード値を配置し、それに続けてランダム化済書込データを読み出し単位分並べる。データ書込部105は、書き込み単位のデータサイズまでCRCの挿入及び読み出し単位分のランダム化済書込データの配置を行う。そして、データ書込部105は、書き込み単位のデータサイズとなったデータをNANDフラッシュメモリ2に書き込む。
【0033】
ここで、
図2を参照してデータの書き込みの全体的な動作について説明する。
図2は、実施例に係るNANDコントローラによるNANDフラッシュメモリへのデータの書き込みを説明するための図である。NANDコントローラ10は、NANDフラッシュメモリ2に書き込まれるデータを読み出し単位で取り扱う。
図2では、例として、3つの読み出し単位で読み出される場合を例に、先頭の読出単位データ121及び2番目の読出単位データ122を示した。
【0034】
書込データD0、D1、D2、D3、D4、・・・というデータが存在し、読出単位データ121には、書込データD0~D3が含まれる。また、第2乱数発生器112が発生させる乱数列は、LFSR#0、#1、#2、#3、#4、・・・という乱数列である。
【0035】
そして、データ結合部102により、書込データD0とLFSR#0とが結合され、結合データ200が生成される。同様に、データ結合部102により、結合データ201及び202が生成される。
【0036】
そして、CRCシードは、CRCを生成する際のシード値であり、ホスト1によりNANDコントローラ10が初期化されたタイミングで、第1乱数発生器111が発生させた乱数データである。CRC##1は、CRC演算器103によりCRCシード及び結合データ200を基に生成されたCRCである。CRC##2は、CRC演算器103によりCRC##1及び結合データ201を基に生成されたCRCである。
【0037】
そして、XOR回路104により書込データD0とCRCシードとの排他的論理和が算出され、ランダム化済書込データ203が生成される。同様に、XOR回路104によりデータD1とCRC##1との排他的論理和が算出され、ランダム化済書込データ204が生成される。また、XOR回路104によりデータD2とCRC##2との排他的論理和が算出され、ランダム化済書込データ205が生成される。
【0038】
そして、NANDフラッシュメモリ2には、CRCシードの値及びランダム化済書込データ203~205が書き込まれる。次の読出単位データ122においても、NANDコントローラ10は、同様のデータの書き込みを行う。
【0039】
ここで、本実施例では、データ書込部105は、読出単位データ121及び122の先頭、すなわち、読み出し単位データの境界にCRCシード値を書き込んだ。このように、読出単位データ121の先頭のデータと隣接する場所にCRCシード値を格納することで、読出時に先頭のデータの復号に用いるCRCシード値の特定が容易となり、その後に続くデータの復号に用いるCRCデータの生成が直ぐに行え、複合処理の速度を向上させることができる。ただし、CRCシード値を書き込む場所はこれに限らない。例えば、CRCにはデータと一体的にディスクに書き込まない使用もある。その場合、データ書込部105は、各読出単位データとCRCシード値との対応付けを読出単位データと同じもしくは異なる場所に保存し、CRCシード値自体は他の場所に書き込んで別管理する。このように、CRCシード値を読出単位データと分離することで、重複排除の効果が得られる。
【0040】
ここで、
図3を参照して、NANDフラッシュメモリ2へのデータの具体的な格納状態について説明する。
図3は、NANDフラッシュメモリに書き込まれるデータのフォーマットを表す図である。1つのカラムに対応する1つのランダム化済書込データは、
図3のフォーマット20で示すように、メタデータ21、データ22及びECC(Error Check Cord)23を有する。ここで、誤り検出符号であるECC23は、具体的にはCRCにあたる。そして、データ22及びECC23は、実際には混在した1つのデータである。また読み出し単位である読み出し単位にまとめたランダム化済書込データのうちの先頭のメタデータ21には、LFSRシード211とCRCシード212とが格納される。
図3では、メタデータ21にLFSRシード211及びCRCシード212が格納された状態を記載したが、読み出し単位にまとめたランダム化済書込データのうちの先頭のメタデータ21以外のメタデータ21には、LFSRシード211及びCRCシード212は挿入されなくてよい。
【0041】
そして、NANDフラッシュメモリ2には、フォーマット20を有するランダム化済書込データが格納状態24で示す格納される。実際には、例えば、ページ単位に相当する数のフォーマット20を有するランダム化済書込データが一度にNANDフラッシュメモリ2に書き込まれる。そして、ランダム化済書込データの読み出し時には、例えば読み出し単位である読み出し単位のフォーマット20を有するデータが枠25で囲われたデータの場合、枠25に含まれるメタデータ21、データ22及びECC23がそれぞれ読み出される。
【0042】
図2に戻って説明を続ける。データ消去部106は、データの消去命令をホスト1から受ける。そして、データ消去部106は、消去命令で指定されたブロックに含まれるデータを全て消去する。ここで、データ消去部106によりブロックに含まれるデータが消去された後に、当該ブロックにデータを書き込む場合、NANDコントローラ10は、更新され続ける第1乱数発生器111が生成した乱数データをシード値として乱数を生成する。そして、NANDコントローラ10は、生成した乱数を用いて書込データをランダム化してNANDフラッシュメモリ2に書き込む。すなわち、NANDコントローラ10は、常に異なる乱数データをシード値として用いる。これにより、ランダム化するシード値が切り替わるので、データ消去後に同じ場所に近似した値のデータが書き込まれることが回避できる。
【0043】
次に、
図4を参照して、NANDコントローラ10のデータ読み出し時の機能について説明する。
図4は、読み出し時のNANDコントローラの機能を表すブロック図である。
図4に示すように、NANDコントローラ10は、第2乱数発生器112、データ結合部102、CRC演算器103、XOR回路104及びデータ送信部107を有する。第2乱数発生器112、データ結合部102、CRC演算器103及びXOR回路104はいずれも、
図1に示したものと同じ機能ブロックである。ここでは、NANDフラッシュメモリ2に格納された読み出し単位の特定のランダム化済書込データが読み出される場合で説明する。
【0044】
第2乱数発生器112は、NANDフラッシュメモリ2に格納された読み出す対象のランダム化済書込データのうちの先頭のランダム化済書込データのメタデータ21に含まれるLFSRシード211を取得する。そして、第2乱数発生器112は、書き込み時と同じアルゴリズムで、取得したLFSRシード211をシード値として乱数列を生成する。そして、第2乱数発生器112は、シード値に続いて発生させた乱数列に含まれる乱数データを順にデータ結合部102へ出力する。この時、第2乱数発生器112は、読み出し単位の数の乱数データを出力する。
【0045】
データ結合部102は、ランダマイ化が解除された解除済読出データの入力をXOR回路104から受ける。また、データ結合部102は、読み出し単位の数の乱数データの入力を第2乱数発生器112から受ける。そして、データ結合部102は、解除済読出データに、第2乱数発生器112から取得した乱数データを付加して読出用結合データを生成する。この場合、データ結合部102は、解除済読出データの先頭から順に第2乱数発生器112から取得した順番の第2乱数データを先頭から対応させて、各ランダム化済書込データに対応する第2乱数データを付加する。そして、データ結合部102は、読み出し単位の数の読出用結合データをCRC演算器103へ出力する。
【0046】
CRC演算器103は、NANDフラッシュメモリ2に格納された読み出す対象のランダム化済書込データのうちの先頭のランダム化済書込データのメタデータ21に含まれるCRCシード212を取得する。取得したCRCシード212をシード値とする。そして、CRC演算器103は、まず1つ目のCRCとしてシード値をXOR回路104へ出力する。その後、CRC演算器103は、読出用結合データの入力をデータ結合部102から受ける。そして、CRC演算器103は、シード値及びデータ結合部102から入力された読出用結合データを用いて読み出し時と同じアルゴリズムでCRCを順次算出する。そして、CRC演算器103は、算出順にCRCをXOR回路104へ出力する。
【0047】
XOR回路104は、NANDフラッシュメモリ2に格納された読出データを読み出し単位で取得する。また、XOR回路104は、シード値及び算出されたCRCを算出順にCRC演算器103から取得する。そして、XOR回路104は、読出データの先頭から順に、シード値を先頭として算出順にCRCを並べた場合の先頭からCRCを対応させて、各読出用データと対応するCRCとの排他的論理和を求める。これにより、XOR回路104は、読出用データのランダム化を解除して元のデータであるホスト送信データを取得することができる。そして、XOR回路104は、取得したホスト送信データをホスト1へ送信する。
【0048】
次に、
図5を参照して、データの書き込みの流れについて説明する。
図5は、データの書き込みのシーケンス図である。
【0049】
ホスト1は、NANDシステムの起動をNANDコントローラ10に指示する(ステップS1)。
【0050】
NANDシステム起動の指示を受けて、第1乱数発生器111は、乱数生成を開始し、以後乱数の生成を継続する(ステップS2)。
【0051】
そして、第1乱数発生器111が乱数生成を開始すると、CRC演算器103は、乱数生成の開始のタイミングで第1乱数発生器111が生成した第1乱数データを取得してシード値を生成する(ステップS3)。
【0052】
次に、ホスト1は、データの書き込みをNANDコントローラ10に指示する(ステップS4)。
【0053】
また、データの書き込みの指示を受けて、第2乱数発生器112は、そのタイミングで第1乱数発生器111が生成した乱数データを取得してシード値とし、乱数生成を開始する(ステップS5)。
【0054】
データ結合部102は、書込データと第2乱数データとを結合して結合データを生成する(ステップS6)。
【0055】
CRC演算器103は、生成したシード値及びデータ結合部102から取得した結合データからCRCを生成する(ステップS7)。
【0056】
その後、XOR回路104は、書込データとCRCの排他的論理和を求めランダマイズする。データ書込部105は、XOR回路104によりランダマイズされたデータをNANDフラッシュメモリ2に書き込む(ステップS8)。
【0057】
その後、ホスト1が、データ消去をNANDコントローラ10に指示する(ステップS9)。
【0058】
ホスト1からのデータ消去の指示を受けて、データ消去部106は、指定されたブロックのデータを消去する(ステップS10)。
【0059】
また、データ消去を受けると、CRC演算器103は、そのタイミングで第1乱数発生器111が生成した第1乱数データを取得してシード値を生成する(ステップS11)。ここで、第1乱数発生器111は、ステップS2に示すように乱数の生成を継続する。そのため、ステップS3におけるデータ書き込みの指示のタイミングにおける第1乱数と、ステップS10におけるデータ書き込みの指示のタイミングにおける第1乱数とは異なる値である。すなわち、CRC演算器103は、ステップS3とステップS11では、異なる値のシード値を生成する。
【0060】
次に、ホスト1は、データの書き込みをNANDコントローラ10に指示する(ステップS12)。ここでは、ステップS8で書き込まれたデータがステップS11で消去され、そのデータが消去されたページに対する書き込みが行われる場合で説明する。
【0061】
また、データの書き込みの指示を受けて、第2乱数発生器112は、そのタイミングで第1乱数発生器111が生成した乱数データを取得してシード値とし、乱数生成を開始する(ステップS13)。
【0062】
データ結合部102は、書込データと第2乱数データとを結合して結合データを生成する(ステップS14)。
【0063】
CRC演算器103は、生成したシード値及びデータ結合部102から取得した結合データからCRCを生成する(ステップS15)。
【0064】
その後、XOR回路104は、書込データとCRCの排他的論理和を求めランダマイズする。ここで、CRCのシード値がデータ消去前のシード値と異なるので、XOR回路104が生成するランダム化済書込データは、データ消去前のデータに近似しない値を取る。データ書込部105は、XOR回路104によりランダマイズされたデータをNANDフラッシュメモリ2に書き込む(ステップS16)。
【0065】
次に、
図6を参照してデータ書き込み時の各部の動作についてさらに説明する。
図6は、データ書き込み時のタイミングチャートである。
図6における各グラフは、
図6に向かって上から順に、動作クロック、初期化信号、第1乱数データ、NAND書込データ有効信号、書込データ、第2乱数データ、CRC演算出力及びNAND書込データをそれぞれ表す。動作クロックは、NANDコントローラ10に含まれる各部の動作のタイミングを決定するためのクロック信号である。
【0066】
ここでは、初期化信号を表す信号が2クロック目でHighの値となり、NANDコントローラ10へ入力される。この初期化信号は、NANDコントローラ10の起動時やデータ消去時に発生する。初期化信号の入力を受けて、第1乱数発生器111が乱数の生成を開始する。第1乱数発生器111は、第1乱数データの生成において最初にシード値を生成する。そして、第1乱数発生器111は、生成したシード値をCRC演算器103へ出力する。CRC演算器103は、第1乱数発生器111から入力されたシード値を保持する。
【0067】
その後、NANDフラッシュメモリ2がデータ格納可能状態になると、NANDコントローラ10は、入力されるNAND書込データ有効信号がHighの値に遷移する。NAND書込データがHighとなったタイミングで、ホスト1からNANDコントローラ10へ書込データの入力が開始される。この場合、読み出し単位の書込データが書込データD0~D190である場合である。
【0068】
NAND書込データが有効になると、第2乱数発生器112は、そのタイミングで第1乱数発生器111が出力した第1乱数データを取得してシード値とする。その後、第2乱数発生器112は、取得したシード値を用いて第2乱数データを生成する。
【0069】
CRC演算器103は、NAND書込データが有効になると、保持するシード値及び書込データに第2乱数データを付加した結合データを基にCRCを算出する。この場合、CRC演算器103は、CRC演算出力として表されるCRCC0~C190を生成する。
【0070】
XOR回路104は、書込データとCRC演算出力との排他的論理和を求めランダム化済書込データを生成する。そして、データ書込部105は、XOR回路104が生成したランダム化済書込データをNANDフラッシュメモリ2に格納する。この場合、データ書込部105は、データR0~R190をNANDフラッシュメモリ2に格納する。
【0071】
そして、読み出し単位の書込データD0~D190に対応するデータR0~R190の書き込みが完了すると、NAND書込データ有効信号はLowの値に遷移する。これにより、次の読み出し単位の書込データD0~D190の書き込みが開始される。この時、第2乱数発生器112は、このタイミングで第1乱数発生器111が出力した第1乱数データを取得する。そして、第2乱数発生器112は、取得した第1乱数データを次の読み出し単位のデータに対する第2乱数データを生成するためのシード値とする。このように、読み出し単位で乱数列を第2乱数発生器112が生成することで、読み出し単位毎にデータをランダム化できるとともにデータ消去の前後でデータをランダム化できる。
【0072】
これに対して、CRC演算器103は、直前のCRC、すなわち1つ前の読み出し単位の最後の書込データのランダム化に用いたCRCを、次の読み出し単位のデータに対する第2乱数データを生成するためのシード値とする。これにより、読み出し単位の書込データの末尾と先頭とのデータをランダム化する値が近似することを回避でき、NANDフラッシュメモリ2に書き込むデータにおける、読み出し単位毎のデータの間のランダム性が向上する。
【0073】
次に、
図7を参照してデータ読み出し時の各部の動作についてさらに説明する。
図7は、データ読み出し時のタイミングチャートである。
図7における各グラフは、
図7に向かって上から順に、動作クロック、初期化信号、NAND書込データ有効信号、第2乱数データ、読出データ、CRC演算出力及びホスト送信データをそれぞれ表す。読出データは、NANDフラッシュメモリ2から読み出したままの状態のデータであり、ホスト送信データはランダマイズが解除された状態のホスト1へ送信されるデータである。
【0074】
ここでは、初期化信号を表す信号が2クロック目でHighの値となり、NANDコントローラ10へ入力される。この初期化信号は、NANDコントローラ10からのデータ読み出し時に発生する。初期化信号の入力を受けた次のクロックで、Highの値に遷移したNAND読出データ有効信号がNANDコントローラ10に入力される。
【0075】
NAND読み出しデータ有効信号がHighになると、第2乱数発生器112は、読み出し単位の読出データの先頭のメタデータ21からLFSRシード211を取得する。また、CRC演算器103は、読み出し単位の読出データの先頭のメタデータ21からCRCシード212を取得する。
図7における読出データの先頭のシードは、LFSRシード211及びCRCシード212が読み出されることを示す。
【0076】
そして、第2乱数発生器112は、取得したLFSRシード211をシード値として第2乱数データを生成する。ここで、第2乱数発生器112は、書き込み時と同じ値をシード値とし、書き込み時と同様のアルゴリズムで乱数列を生成するので、ランダマイズ時と同様の第2乱数データの乱数列を生成することができる。
【0077】
さらに、NANDデータ有効信号がHighになったタイミングで、NANDフラッシュメモリ2からの読出データの読み出しが開示される。ここでは、読み出しデータとしてデータR0、R1、・・・のデータが読み出される場合で説明する。
【0078】
CRC演算器103は、取得したCRCシード212をシード値とする。そして、CRC演算器103は、読出データに対応する第2乱数データが付加された読出用結合データ及びシード値を用いてCRCを算出する。この場合、CRC演算器103は、CRCC0、C1・・・を生成する場合で説明する。ここで、CRC演算器103は、最初のCRCには、書き込み時と同じ値のシード値を用いる。そのため、CRC演算器103は、CRCの演算は行わずにシード値をXOR回路104へ出力する。その後、CRC演算器103は、ランダマイズが解除された1つ前のホスト送信データに対応する第2乱数データが付加された読出用結合データをデータ結合部102から取得する。そして、CRC演算器103は、取得した読出用結合データとシード値とを用いて続くCRCの算出を繰り返す。これにより、CRC演算器103は、ランダマイズ時と同様のCRCの乱数列を生成することができる。
【0079】
XOR回路104は、読出データと対応するCRCとの排他的論理和を求めホスト送信データを生成する。そして、データ送信部107は、XOR回路104が出力したホスト送信データをホスト1へ送信する。また、XOR回路104は、ランダマイズを解除したホスト送信データをデータ結合部102へ出力する。
【0080】
ここで、以上に説明したNANDコントローラ10は、例えば、FPGA(Field Programmable Gate Array)を用いて製造される。このFPGAに含まれるメモリに、
図1及び4に例示した乱数生成部101、データ結合部102、CRC演算器103、データ書込部105、データ消去部106及びデータ送信部107の機能を実現するプログラムを含む各種プログラムが格納される。そして、FPGAに含まれるプロセッサが、メモリから各種プログラムを読み出し実行することで、乱数生成部101、データ結合部102、CRC演算器103、データ書込部105、データ消去部106及びデータ送信部107の機能を実現する。
【0081】
以上に説明したように、本実施例に係るNANDコントローラは、常時発生される第1乱数データをシード値としてLFSRにより読み出し単位の数の第2乱数データの乱数列を生成する。また、NANDコントローラは、第1乱数データをシード値とし、書込データと第2乱数データとの結合データを用いてCRCを生成する。そして、生成したCRCを用いて書込データをランダム化する。また、次の読み出し単位の書込データをランダム化する場合、1つ前の読み出し単位の書込データから求まるCRCをシード値とする。これにより、読み出し単位毎のランダム性を向上させることができ、また、データ消去の前後での同じ領域に格納されるデータの近似を回避することができ、さらに、読み出し単位の書込データ間の近似も回避することができる。したがって、シンプルな構造でデータのランダム性を向上させることが可能となる。
【符号の説明】
【0082】
1 ホスト
2 NANDフラッシュメモリ
10 NANDコントローラ
101 乱数生成部
102 データ結合部
103 CRC演算器
104 XOR回路
105 データ書込部
106 データ消去部
107 データ送信部
111 第1乱数発生器
112 第2乱数発生器