(57)【要約】【課題】簡易な構造でデータのランダム性を向上させるデータ処理装置及びデータ処理プログラムを提供する。【解決手段】第１乱数発生器１１１は、第１乱数データを継続的に生成する。第２乱数発生器１１２は、第１乱数発生器１１１により生成された第１乱数データを基に第２乱数データを生成する。ＣＲＣ演算器１０３は、第１乱数データ、第２乱数データ及びＮＡＮＤフラッシュメモリ２への書込データを用いて誤り検出符号を算出する。ＸＯＲ回路１０４は、ＣＲＣ演算器１０３により算出された誤り検出符号を基に各書込データをランダム化してランダム化済書込データを生成する。データ書込部１０５は、ランダム化済書込データと誤り検出符号の算出に用いた第１データとをＮＡＮＤフラッシュメモリ２に書き込む。【選択図】図１
2020027473.tif 000002
【特許請求の範囲】
【請求項１】
第１乱数データを継続的に生成する第１乱数発生器と、
前記第１乱数発生器により生成された前記第１乱数データを基に第２乱数データを生成する第２乱数発生器と、
前記第１乱数データ、前記第２乱数データ及び不揮発性メモリへの書込データを用いて誤り検出符号を算出する算出部と、
前記算出部により算出された前記誤り検出符号を基に各前記書込データをランダム化してランダム化済書込データを生成するランダム化部と、
前記ランダム化済書込データと前記誤り検出符号の算出に用いた前記第１乱数データとを前記不揮発性メモリに書き込むデータ書込部と
を備えたことを特徴とするデータ処理装置。
【請求項２】
前記第２乱数発生器は、読出単位の前記書込データの数の前記第２乱数データを作成する度に、そのタイミングで生成された前記第１乱数データを取得し、取得した前記第１乱数データをシード値として前記第２乱数データを生成することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記算出部は、所定のタイミングで取得した前記第１乱数データをシード値として、前記書込データの書き込みが完了するまで継続して前記誤り検出符号の算出を行うことを特徴とする請求項１又は２に記載のデータ処理装置。
【請求項４】
前記算出部は、前記書込データに前記第２乱数データを付加して結合データを生成し、前記第１乱数データ及び前記結合データを基に前記誤り検出符号の算出を行うことを特徴とする請求項１〜３のいずれか一つに記載のデータ処理装置。
【請求項５】
前記ランダム化部は、前記誤り検出符号と前記書込データとの排他的論理和を求めることで、前記ランダム化済書込データを生成することを特徴とする請求項１〜４のいずれか一つに記載のデータ処理装置。
【請求項６】
前記不揮発性メモリから読出単位のランダム化済書込データと前記第１乱数データとを読み出すデータ読出部をさらに備え、
前記算出部は、前記データ読出部により読み出された前記第１乱数データを取得し、取得した前記第１乱数データを基に前記誤り検出符号を算出し、
前記ランダム化部は、前記第２乱数データ及び前記算出部により算出された前記誤り検出符号を基に、前記不揮発性メモリから読み出されたランダム化済書込データのランダム化を解除して前記書込データを取得する
ことを特徴とする請求項１〜５のいずれか一つに記載のデータ処理装置。
【請求項７】
第１乱数データを継続的に生成し、
生成した前記第１乱数データを基に第２乱数データを生成し、
前記第１乱数データ、前記第２乱数データ及び不揮発性メモリへの書込データを用いて誤り検出符号を算出し、
算出した前記誤り検出符号を基に各前記書込データをランダム化してランダム化済書込データを生成し、
前記ランダム化済書込データと前記誤り検出符号の算出に用いた前記第１乱数データとを前記不揮発性メモリに書き込む
処理をコンピュータに実行させることを特徴とするデータ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置及びデータ処理プログラムに関する。
【背景技術】
【０００２】
近年、コンピュータの発達やアプリケーションの拡大にしたがいメモリの大容量化の要望がさらに高まっている。一方、ＮＡＮＤ型のフラッシュメモリであるＮＡＮＤフラッシュメモリは、ビットあたりのコストの低価格化及び大容量化が進んでいる。そこで、書き込み速度の速いＮＡＮＤフラッシュの普及が急速に拡大した。さらに、ＮＡＮＤフラッシュメモリでは、さらなる大容量化の要望に応えるため多値化の研究が進んでいる。
【０００３】
ＮＡＮＤフラッシュメモリでは、ページ単位でデータの書き込みが行われる。一方、ＮＡＮＤフラッシュメモリにおけるデータの読み出しは、ページに含まれるカラムを複数まとめたカラム群毎に行われる。以下では、データを読み出すカラム群毎の単位を読み出し単位という。さらに、ＮＡＮＤフラッシュメモリでは、ページを複数集めたブロック単位でデータの消去が行われる。
【０００４】
ここで、データの書き込みに際して次のような問題が発生する。１つには、読み書きや消去が行われる領域が偏り、読み書きや消去が頻繁に行われる領域のトランジスタの寿命が短くなる。また、ＮＡＮＤフラッシュメモリでは読み出したデータの何ビットかにデータ化けが発生する。そのため、読み出す領域が特定領域に固まった場合、エラー訂正が困難になり、書き込んだデータの信頼性が低下する。そこで、多値化されたＮＡＮＤフラッシュメモリでは、長寿命化及びデータの信頼性保持の観点から書き込み時にデータをランダム化することが好ましい。
【０００５】
ＮＡＮＤフラッシュメモリにおけるデータのランダム化には、以下の要件を満たすことが重要である。１つには、ページ毎にランダムなデータであること。次に、ページ内のカラムごとにランダムなデータであること。最後に、同じページ内でも、そのページが属するブロックにおけるデータの消去の前後で近似なデータにならないこと。これらの要件を満たすことでＮＡＮＤフラッシュメモリにおけるデータのランダム化が達成される。
【０００６】
データのランダム化の方式としては、書込データと乱数化されたデータ列である乱数列との排他的論理和（ＸＯＲ：exclusive  or）を求めることでＮＡＮＤフラッシュメモリに書き込むデータをランダム化する方法が一般的である。ここで、乱数列に含まれる各乱数データは、例えば、乱数の初期値であるシード値を基にして順次生成される。
【０００７】
また、ランダム化されたデータは、読み出し時に書き込み時と同じ乱数列を生成して読み出したデータとの排他的論理和を求めることでランダム化前の値に復元される。ここで、前述のようにＮＡＮＤフラッシュメモリではページ単位のデータの書き込みに対し読み出し単位でデータが読み出されるため、データのランダム化に用いる乱数列は、読み出し単位のデータ数の乱数データを有することになる。このような方法でデータをランダム化する場合、乱数列の長さに比例してランダム性は向上する。
【０００８】
ここで、データ書込みにおけるランダム化の技術として、２つの異なる方法で２つの乱数列を発生させ、各乱数列を用いてＮＡＮＤフラッシュの書込み位置をランダム化する従来技術がある。また、乱数生成の技術として、読み出しデータを用いて乱数パラメータを生成し、生成した乱数パラメータをシード値として乱数を発生させる従来技術がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００９−１５７８４１号公報
【特許文献２】特開２０１２−２５２１９５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、ＮＡＮＤフラッシュメモリの読み出し単位は、例えば２５６Ｂｙｔｅであり、これはカラムの数としては１２５カラム前後にあたり、ランダム性を確保するのに十分な長さを有するとは言えない。そのため、ＮＡＮＤフラッシュメモリの読み出し単位毎に初期化された乱数化されたデータを使用した場合、データのランダム性を向上させることは困難である。
【００１１】
また、ＮＡＮＤフラッシュのデータ幅は１６ビットが一般的であり、従来のランダム化の方式では、乱数化されたデータ列のシード値も同じビット幅となる。さらに、シード値にはページ情報も含まれることになる。そのため、シード値として使用できる値が制限され、ランダム性の阻害要因となる。
【００１２】
さらに、前述した要件を満たすため、あるブロックのデータが消去された後にそのブロックに新しくデータが書き込まれる場合、書き込まれるデータは、消去前のデータとは近似しない値を取ることが好ましい。そこで、ブロックのデータ消去後に新たにデータを書き込む場合、書き込むデータをランダム化するための乱数化されたデータ列のシード値を切替えることが一般的である。これを実現するために、各ブロックに対応した乱数化されたデータ列のシード値の値を含むテーブルを保持することになり、システムが複雑化してしまう。
【００１３】
開示の技術は、上記に鑑みてなされたものであって、簡易な構造でデータのランダム性を向上させるデータ処理装置及びデータ処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本願の開示するデータ処理装置及びデータ処理プログラムの一つの態様において、第１乱数発生器は、第１乱数データを継続的に生成する。第２乱数発生器は、前記第１乱数発生器により生成された前記第１乱数データを基に第２乱数データを生成する。算出部は、前記第１乱数データ、前記第２乱数データ及び不揮発性メモリへの書込データを用いて誤り検出符号を算出する。ランダム化部は、前記算出部により算出された前記誤り検出符号を基に各前記書込データをランダム化してランダム化済書込データを生成する。書込部は、前記ランダム化済書込データと前記誤り検出符号の算出に用いた前記第１乱数データとを前記不揮発性メモリに書き込む。
【発明の効果】
【００１５】
１つの側面では、本発明は、簡易な構造でデータのランダム性を向上させることができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、書き込み時のＮＡＮＤコントローラの機能を表すブロック図である。
【図２】図２は、実施例に係るＮＡＮＤコントローラによるＮＡＮＤフラッシュメモリへのデータの書き込みを説明するための図である。
【図３】図３は、ＮＡＮＤフラッシュメモリに書き込まれるデータのフォーマットを表す図である。
【図４】図４は、読み出し時のＮＡＮＤコントローラの機能を表すブロック図である。
【図５】図５は、データの書き込みのシーケンス図である。
【図６】図６は、データ書き込み時のタイミングチャートである。
【図７】図７は、データ読み出し時のタイミングチャートである。
【発明を実施するための形態】
【００１７】
以下に、本願の開示するデータ処理装置及びデータ処理プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示するデータ処理装置及びデータ処理プログラムが限定されるものではない。
【実施例】
【００１８】
図１は、書き込み時のＮＡＮＤコントローラの機能を表すブロック図である。ＮＡＮＤコントローラ１０は、ホスト１及びＮＡＮＤフラッシュメモリ２に接続される。
【００１９】
ホスト１は、演算処理を行う演算処理装置である。ホスト１は、ＮＡＮＤフラッシュメモリ２に対するデータの読み出し及び書き込みの命令をＮＡＮＤコントローラ１０へ送信する。ＮＡＮＤフラッシュメモリ２は、不揮発性メモリである。ＮＡＮＤフラッシュメモリ２は、書き込み単位であるページ単位でデータが書き込まれる。また、ＮＡＮＤフラッシュメモリ２は、ページに含まれるカラムを複数まとめた読み出し単位でデータが読み出される。さらに、ＮＡＮＤフラッシュメモリ２は、ページを複数まとめたブロック単位でデータの消去が行われる。
【００２０】
ＮＡＮＤコントローラ１０は、ホスト１から送信されたデータの書き込み命令又は読み出し命令にしたがって、ＮＡＮＤフラッシュメモリ２に対するデータの読み出し及び書き込みを行う。ＮＡＮＤコントローラ１０は、乱数生成部１０１、データ結合部１０２、ＣＲＣ（Cyclic  Redundancy  Check）演算器１０３、ＸＯＲ回路１０４、データ書込部１０５及びデータ消去部１０６を有する。
【００２１】
乱数生成部１０１は、第１乱数発生器１１１及び第２乱数発生器１１２を有する。第１乱数発生器１１１及び第２乱数発生器１１２は、例えば、線形帰還シフトレジスタ（ＬＦＳＲ：Linear  Feedback  Shift  Register）である。
【００２２】
第１乱数発生器１１１は、ＮＡＮＤコントローラ１０の起動後、乱数の発生を開始し、その後乱数の発生を継続する。すなわち、第１乱数発生器１１１から発行される乱数は、常時更新される。そして、第１乱数発生器１１１は、生成した乱数を第２乱数発生器１１２及びＣＲＣ演算器１０３へ出力する。以下では、第１乱数発生器１１１が生成した乱数を第１乱数データと言う。
【００２３】
第２乱数発生器１１２は、ホスト１からのデータの書き込み指示の入力のタイミングで、第１乱数発生器１１１が生成した第１乱数データを取得する。次に、第２乱数発生器１１２は、取得した第１乱数データをシード値として乱数列を生成する。この乱数列に含まれる乱数データは、ＮＡＮＤフラッシュメモリ２のデータ幅と同じサイズを有する。例えば、ＮＡＮＤフラッシュメモリ２のデータを入出力するためのバスのデータ幅が１６ビットであれば、第２乱数発生器１１２で生成される乱数データも１６ビットとなる。また、この乱数列は、ＮＡＮＤフラッシュメモリ２の読み出し単位である読み出し単位のデータをデータ幅で分割した個数の乱数データを含む。その後、第２乱数発生器１１２は、生成した乱数列をデータ結合部１０２へ出力する。以下では、第２乱数発生器１１２が生成した乱数を、第２乱数データという。
【００２４】
読み出し単位の数の乱数データを含む乱数列の生成した後、第２乱数発生器１１２は、第１乱数発生器１１１が生成した第１乱数データを取得する。そして、第２乱数発生器１１２は、新たに乱数列を生成する。この後、第２乱数発生器１１２は、第１乱数データの取得及び取得した第１乱数データを用いた読み出し単位の数の乱数データを含む乱数列の生成を繰り返す。
【００２５】
データ結合部１０２は、第２乱数発生器１１２により生成された第２乱数データの乱数列の入力を受ける。また、データ結合部１０２は、ＮＡＮＤフラッシュメモリ２へ書き込むデータの入力をホスト１から受ける。そして、データ結合部１０２は、書き込むデータをＮＡＮＤフラッシュメモリ２のデータ幅すなわち読み出し単位に分割する。ここでは、この分割後の読み出し単位のデータを書込データという。この書込データを、ＮＡＮＤフラッシュメモリ２からデータを読み出す場合の１度に読み出せるカラム数分集めたデータが、読み出し単位のデータとなる。
【００２６】
次に、データ結合部１０２は、取得した乱数列に含まれる第２乱数データを先頭から順に生成した各書込データと結合する。以下では、この書込データと第２乱数発生器１１２から取得した第２乱数データとを結合させたデータを結合データという。そして、データ結合部１０２は、結合データをＣＲＣ演算器１０３及びＸＯＲ回路１０４へ出力する。
【００２７】
ＣＲＣ演算器１０３は、誤り検出符号であるＣＲＣを算出する回路である。ＣＲＣ演算器１０３は、ホスト１によるＮＡＮＤコントローラ１０の初期化のタイミングで第１乱数発生器１１１が生成した第１乱数データを取得する。ＮＡＮＤコントローラ１０の初期化のタイミングとは、例えば、ＮＡＮＤコントローラ１０の起動時やデータの消去時である。そして、ＣＲＣ演算器１０３は、取得した第１乱数データをシード値とする。その後、ＣＲＣ演算器１０３は、データの書き込みのタイミングまでシード値を保持する。
【００２８】
その後、データの書き込みの指示がホスト１から入力されると、ＣＲＣ演算器１０３は、データ結合部１０２から書込データに乱数データが結合された結合データの入力を受ける。そして、ＣＲＣ演算器１０３は、保持するシード値を使用して、入力された結合データに対するＣＲＣを算出する。
【００２９】
ＣＲＣ演算器１０３は、ＣＲＣを連続で算出するので、読み出し単位のデータに含まれる書込データの個数の算出が完了すると、そのままＣＲＣの算出を継続し、次の読み出し単位のデータのランダム化に用いるＣＲＣの算出に移行する。すなわち、ＣＲＣ演算器１０３は、１つ前の読み出し単位のデータに含まれる最後の書込データのランダム化に用いるＣＲＣをシード値として、次の読み出し単位のデータに含まれる書き込みデータのランダム化に用いるＣＲＣを算出する。このように、ＣＲＣ演算器１０３は、読み出し単位毎に第１乱数データをシード値として誤り検出符号の算出を最初から繰り返すのではなく、全ての書込データの書き込みが完了するまで継続して誤り検出符号の算出を行う。このＣＲＣは、ＮＡＮＤフラッシュメモリ２のデータ幅と同じサイズを有する。その後、ＣＲＣ演算器１０３は、算出したＣＲＣをＸＯＲ回路１０４及びデータ書込部１０５へ順次出力する。
【００３０】
ＸＯＲ回路１０４は、入力された２つの値の排他的論理和を求める回路である。ＸＯＲ回路１０４は、ＮＡＮＤフラッシュメモリ２に書き込むデータの入力をホスト１から受ける。また、ＸＯＲ回路１０４は、ＣＲＣ演算器１０３からＣＲＣの入力を順次受ける。そして、ＸＯＲ回路１０４は、ＮＡＮＤフラッシュメモリ２に書き込むデータを読み出し単位に分割して書込データを生成する。ＸＯＲ回路１０４は、書込データを分割前の順で保持する。
【００３１】
次に、ＸＯＲ回路１０４は、書込データの先頭から順番にＣＲＣ演算器１０３から順次入力された対応するＣＲＣとの排他的論理和を求める。そして、ＸＯＲ回路１０４は、算出した排他的論理和をデータ書込部１０５へ順次出力する。以下では、この排他的論理和を「ランダム化済書込データ」という。このＸＯＲ回路１０４が、「ランダム化部」の一例にあたる。そして、書込データとＣＲＣとの排他的論理和の算出が、「ランダム化」の一例にあたる。
【００３２】
データ書込部１０５は、ランダム化済書込データの入力をＸＯＲ回路１０４から受ける。また、データ書込部１０５は、ＣＲＣの入力をＣＲＣ演算器１０３から順番に受ける。そして、データ書込部１０５は、最初に読み出し単位のデータのランダム化に用いたＣＲＣのシード値を配置し、それに続けてランダム化済書込データを読み出し単位分並べる。次に、データ書込部１０５は、次の読み出し単位のデータのランダム化に用いたＣＲＣシード値を配置し、それに続けてランダム化済書込データを読み出し単位分並べる。データ書込部１０５は、書き込み単位のデータサイズまでＣＲＣの挿入及び読み出し単位分のランダム化済書込データの配置を行う。そして、データ書込部１０５は、書き込み単位のデータサイズとなったデータをＮＡＮＤフラッシュメモリ２に書き込む。
【００３３】
ここで、図２を参照してデータの書き込みの全体的な動作について説明する。図２は、実施例に係るＮＡＮＤコントローラによるＮＡＮＤフラッシュメモリへのデータの書き込みを説明するための図である。ＮＡＮＤコントローラ１０は、ＮＡＮＤフラッシュメモリ２に書き込まれるデータを読み出し単位で取り扱う。図２では、例として、３つの読み出し単位で読み出される場合を例に、先頭の読出単位データ１２１及び２番目の読出単位データ１２２を示した。
【００３４】
書込データＤ０、Ｄ１、Ｄ２、Ｄ３、Ｄ４、・・・というデータが存在し、読出単位データ１２１には、書込データＤ０〜Ｄ３が含まれる。また、第２乱数発生器１１２が発生させる乱数列は、ＬＦＳＲ＃０、＃１、＃２、＃３、＃４、・・・という乱数列である。
【００３５】
そして、データ結合部１０２により、書込データＤ０とＬＦＳＲ＃０とが結合され、結合データ２００が生成される。同様に、データ結合部１０２により、結合データ２０１及び２０２が生成される。
【００３６】
そして、ＣＲＣシードは、ＣＲＣを生成する際のシード値であり、ホスト１によりＮＡＮＤコントローラ１０が初期化されたタイミングで、第１乱数発生器１１１が発生させた乱数データである。ＣＲＣ＃＃１は、ＣＲＣ演算器１０３によりＣＲＣシード及び結合データ２００を基に生成されたＣＲＣである。ＣＲＣ＃＃２は、ＣＲＣ演算器１０３によりＣＲＣ＃＃１及び結合データ２０１を基に生成されたＣＲＣである。
【００３７】
そして、ＸＯＲ回路１０４により書込データＤ０とＣＲＣシードとの排他的論理和が算出され、ランダム化済書込データ２０３が生成される。同様に、ＸＯＲ回路１０４によりデータＤ１とＣＲＣ＃＃１との排他的論理和が算出され、ランダム化済書込データ２０４が生成される。また、ＸＯＲ回路１０４によりデータＤ２とＣＲＣ＃＃２との排他的論理和が算出され、ランダム化済書込データ２０５が生成される。
【００３８】
そして、ＮＡＮＤフラッシュメモリ２には、ＣＲＣシードの値及びランダム化済書込データ２０３〜２０５が書き込まれる。次の読出単位データ１２２においても、ＮＡＮＤコントローラ１０は、同様のデータの書き込みを行う。
【００３９】
ここで、本実施例では、データ書込部１０５は、読出単位データ１２１及び１２２の先頭、すなわち、読み出し単位データの境界にＣＲＣシード値を書き込んだ。このように、読出単位データ１２１の先頭のデータと隣接する場所にＣＲＣシード値を格納することで、読出時に先頭のデータの復号に用いるＣＲＣシード値の特定が容易となり、その後に続くデータの復号に用いるＣＲＣデータの生成が直ぐに行え、複合処理の速度を向上させることができる。ただし、ＣＲＣシード値を書き込む場所はこれに限らない。例えば、ＣＲＣにはデータと一体的にディスクに書き込まない使用もある。その場合、データ書込部１０５は、各読出単位データとＣＲＣシード値との対応付けを読出単位データと同じもしくは異なる場所に保存し、ＣＲＣシード値自体は他の場所に書き込んで別管理する。このように、ＣＲＣシード値を読出単位データと分離することで、重複排除の効果が得られる。
【００４０】
ここで、図３を参照して、ＮＡＮＤフラッシュメモリ２へのデータの具体的な格納状態について説明する。図３は、ＮＡＮＤフラッシュメモリに書き込まれるデータのフォーマットを表す図である。１つのカラムに対応する１つのランダム化済書込データは、図３のフォーマット２０で示すように、メタデータ２１、データ２２及びＥＣＣ（Error  Check  Cord）２３を有する。ここで、誤り検出符号であるＥＣＣ２３は、具体的にはＣＲＣにあたる。そして、データ２２及びＥＣＣ２３は、実際には混在した１つのデータである。また読み出し単位である読み出し単位にまとめたランダム化済書込データのうちの先頭のメタデータ２１には、ＬＦＳＲシード２１１とＣＲＣシード２１２とが格納される。図３では、メタデータ２１にＬＦＳＲシード２１１及びＣＲＣシード２１２が格納された状態を記載したが、読み出し単位にまとめたランダム化済書込データのうちの先頭のメタデータ２１以外のメタデータ２１には、ＬＦＳＲシード２１１及びＣＲＣシード２１２は挿入されなくてよい。
【００４１】
そして、ＮＡＮＤフラッシュメモリ２には、フォーマット２０を有するランダム化済書込データが格納状態２４で示す格納される。実際には、例えば、ページ単位に相当する数のフォーマット２０を有するランダム化済書込データが一度にＮＡＮＤフラッシュメモリ２に書き込まれる。そして、ランダム化済書込データの読み出し時には、例えば読み出し単位である読み出し単位のフォーマット２０を有するデータが枠２５で囲われたデータの場合、枠２５に含まれるメタデータ２１、データ２２及びＥＣＣ２３がそれぞれ読み出される。
【００４２】
図２に戻って説明を続ける。データ消去部１０６は、データの消去命令をホスト１から受ける。そして、データ消去部１０６は、消去命令で指定されたブロックに含まれるデータを全て消去する。ここで、データ消去部１０６によりブロックに含まれるデータが消去された後に、当該ブロックにデータを書き込む場合、ＮＡＮＤコントローラ１０は、更新され続ける第１乱数発生器１１１が生成した乱数データをシード値として乱数を生成する。そして、ＮＡＮＤコントローラ１０は、生成した乱数を用いて書込データをランダム化してＮＡＮＤフラッシュメモリ２に書き込む。すなわち、ＮＡＮＤコントローラ１０は、常に異なる乱数データをシード値として用いる。これにより、ランダム化するシード値が切り替わるので、データ消去後に同じ場所に近似した値のデータが書き込まれることが回避できる。
【００４３】
次に、図４を参照して、ＮＡＮＤコントローラ１０のデータ読み出し時の機能について説明する。図４は、読み出し時のＮＡＮＤコントローラの機能を表すブロック図である。図４に示すように、ＮＡＮＤコントローラ１０は、第２乱数発生器１１２、データ結合部１０２、ＣＲＣ演算器１０３、ＸＯＲ回路１０４及びデータ送信部１０７を有する。第２乱数発生器１１２、データ結合部１０２、ＣＲＣ演算器１０３及びＸＯＲ回路１０４はいずれも、図１に示したものと同じ機能ブロックである。ここでは、ＮＡＮＤフラッシュメモリ２に格納された読み出し単位の特定のランダム化済書込データが読み出される場合で説明する。
【００４４】
第２乱数発生器１１２は、ＮＡＮＤフラッシュメモリ２に格納された読み出す対象のランダム化済書込データのうちの先頭のランダム化済書込データのメタデータ２１に含まれるＬＦＳＲシード２１１を取得する。そして、第２乱数発生器１１２は、書き込み時と同じアルゴリズムで、取得したＬＦＳＲシード２１１をシード値として乱数列を生成する。そして、第２乱数発生器１１２は、シード値に続いて発生させた乱数列に含まれる乱数データを順にデータ結合部１０２へ出力する。この時、第２乱数発生器１１２は、読み出し単位の数の乱数データを出力する。
【００４５】
データ結合部１０２は、ランダマイ化が解除された解除済読出データの入力をＸＯＲ回路１０４から受ける。また、データ結合部１０２は、読み出し単位の数の乱数データの入力を第２乱数発生器１１２から受ける。そして、データ結合部１０２は、解除済読出データに、第２乱数発生器１１２から取得した乱数データを付加して読出用結合データを生成する。この場合、データ結合部１０２は、解除済読出データの先頭から順に第２乱数発生器１１２から取得した順番の第２乱数データを先頭から対応させて、各ランダム化済書込データに対応する第２乱数データを付加する。そして、データ結合部１０２は、読み出し単位の数の読出用結合データをＣＲＣ演算器１０３へ出力する。
【００４６】
ＣＲＣ演算器１０３は、ＮＡＮＤフラッシュメモリ２に格納された読み出す対象のランダム化済書込データのうちの先頭のランダム化済書込データのメタデータ２１に含まれるＣＲＣシード２１２を取得する。取得したＣＲＣシード２１２をシード値とする。そして、ＣＲＣ演算器１０３は、まず１つ目のＣＲＣとしてシード値をＸＯＲ回路１０４へ出力する。その後、ＣＲＣ演算器１０３は、読出用結合データの入力をデータ結合部１０２から受ける。そして、ＣＲＣ演算器１０３は、シード値及びデータ結合部１０２から入力された読出用結合データを用いて読み出し時と同じアルゴリズムでＣＲＣを順次算出する。そして、ＣＲＣ演算器１０３は、算出順にＣＲＣをＸＯＲ回路１０４へ出力する。
【００４７】
ＸＯＲ回路１０４は、ＮＡＮＤフラッシュメモリ２に格納された読出データを読み出し単位で取得する。また、ＸＯＲ回路１０４は、シード値及び算出されたＣＲＣを算出順にＣＲＣ演算器１０３から取得する。そして、ＸＯＲ回路１０４は、読出データの先頭から順に、シード値を先頭として算出順にＣＲＣを並べた場合の先頭からＣＲＣを対応させて、各読出用データと対応するＣＲＣとの排他的論理和を求める。これにより、ＸＯＲ回路１０４は、読出用データのランダム化を解除して元のデータであるホスト送信データを取得することができる。そして、ＸＯＲ回路１０４は、取得したホスト送信データをホスト１へ送信する。
【００４８】
次に、図５を参照して、データの書き込みの流れについて説明する。図５は、データの書き込みのシーケンス図である。
【００４９】
ホスト１は、ＮＡＮＤシステムの起動をＮＡＮＤコントローラ１０に指示する（ステップＳ１）。
【００５０】
ＮＡＮＤシステム起動の指示を受けて、第１乱数発生器１１１は、乱数生成を開始し、以後乱数の生成を継続する（ステップＳ２）。
【００５１】
そして、第１乱数発生器１１１が乱数生成を開始すると、ＣＲＣ演算器１０３は、乱数生成の開始のタイミングで第１乱数発生器１１１が生成した第１乱数データを取得してシード値を生成する（ステップＳ３）。
【００５２】
次に、ホスト１は、データの書き込みをＮＡＮＤコントローラ１０に指示する（ステップＳ４）。
【００５３】
また、データの書き込みの指示を受けて、第２乱数発生器１１２は、そのタイミングで第１乱数発生器１１１が生成した乱数データを取得してシード値とし、乱数生成を開始する（ステップＳ５）。
【００５４】
データ結合部１０２は、書込データと第２乱数データとを結合して結合データを生成する（ステップＳ６）。
【００５５】
ＣＲＣ演算器１０３は、生成したシード値及びデータ結合部１０２から取得した結合データからＣＲＣを生成する（ステップＳ７）。
【００５６】
その後、ＸＯＲ回路１０４は、書込データとＣＲＣの排他的論理和を求めランダマイズする。データ書込部１０５は、ＸＯＲ回路１０４によりランダマイズされたデータをＮＡＮＤフラッシュメモリ２に書き込む（ステップＳ８）。
【００５７】
その後、ホスト１が、データ消去をＮＡＮＤコントローラ１０に指示する（ステップＳ９）。
【００５８】
ホスト１からのデータ消去の指示を受けて、データ消去部１０６は、指定されたブロックのデータを消去する（ステップＳ１０）。
【００５９】
また、データ消去を受けると、ＣＲＣ演算器１０３は、そのタイミングで第１乱数発生器１１１が生成した第１乱数データを取得してシード値を生成する（ステップＳ１１）。ここで、第１乱数発生器１１１は、ステップＳ２に示すように乱数の生成を継続する。そのため、ステップＳ３におけるデータ書き込みの指示のタイミングにおける第１乱数と、ステップＳ１０におけるデータ書き込みの指示のタイミングにおける第１乱数とは異なる値である。すなわち、ＣＲＣ演算器１０３は、ステップＳ３とステップＳ１１では、異なる値のシード値を生成する。
【００６０】
次に、ホスト１は、データの書き込みをＮＡＮＤコントローラ１０に指示する（ステップＳ１２）。ここでは、ステップＳ８で書き込まれたデータがステップＳ１１で消去され、そのデータが消去されたページに対する書き込みが行われる場合で説明する。
【００６１】
また、データの書き込みの指示を受けて、第２乱数発生器１１２は、そのタイミングで第１乱数発生器１１１が生成した乱数データを取得してシード値とし、乱数生成を開始する（ステップＳ１３）。
【００６２】
データ結合部１０２は、書込データと第２乱数データとを結合して結合データを生成する（ステップＳ１４）。
【００６３】
ＣＲＣ演算器１０３は、生成したシード値及びデータ結合部１０２から取得した結合データからＣＲＣを生成する（ステップＳ１５）。
【００６４】
その後、ＸＯＲ回路１０４は、書込データとＣＲＣの排他的論理和を求めランダマイズする。ここで、ＣＲＣのシード値がデータ消去前のシード値と異なるので、ＸＯＲ回路１０４が生成するランダム化済書込データは、データ消去前のデータに近似しない値を取る。データ書込部１０５は、ＸＯＲ回路１０４によりランダマイズされたデータをＮＡＮＤフラッシュメモリ２に書き込む（ステップＳ１６）。
【００６５】
次に、図６を参照してデータ書き込み時の各部の動作についてさらに説明する。図６は、データ書き込み時のタイミングチャートである。図６における各グラフは、図６に向かって上から順に、動作クロック、初期化信号、第１乱数データ、ＮＡＮＤ書込データ有効信号、書込データ、第２乱数データ、ＣＲＣ演算出力及びＮＡＮＤ書込データをそれぞれ表す。動作クロックは、ＮＡＮＤコントローラ１０に含まれる各部の動作のタイミングを決定するためのクロック信号である。
【００６６】
ここでは、初期化信号を表す信号が２クロック目でＨｉｇｈの値となり、ＮＡＮＤコントローラ１０へ入力される。この初期化信号は、ＮＡＮＤコントローラ１０の起動時やデータ消去時に発生する。初期化信号の入力を受けて、第１乱数発生器１１１が乱数の生成を開始する。第１乱数発生器１１１は、第１乱数データの生成において最初にシード値を生成する。そして、第１乱数発生器１１１は、生成したシード値をＣＲＣ演算器１０３へ出力する。ＣＲＣ演算器１０３は、第１乱数発生器１１１から入力されたシード値を保持する。
【００６７】
その後、ＮＡＮＤフラッシュメモリ２がデータ格納可能状態になると、ＮＡＮＤコントローラ１０は、入力されるＮＡＮＤ書込データ有効信号がＨｉｇｈの値に遷移する。ＮＡＮＤ書込データがＨｉｇｈとなったタイミングで、ホスト１からＮＡＮＤコントローラ１０へ書込データの入力が開始される。この場合、読み出し単位の書込データが書込データＤ０〜Ｄ１９０である場合である。
【００６８】
ＮＡＮＤ書込データが有効になると、第２乱数発生器１１２は、そのタイミングで第１乱数発生器１１１が出力した第１乱数データを取得してシード値とする。その後、第２乱数発生器１１２は、取得したシード値を用いて第２乱数データを生成する。
【００６９】
ＣＲＣ演算器１０３は、ＮＡＮＤ書込データが有効になると、保持するシード値及び書込データに第２乱数データを付加した結合データを基にＣＲＣを算出する。この場合、ＣＲＣ演算器１０３は、ＣＲＣ演算出力として表されるＣＲＣＣ０〜Ｃ１９０を生成する。
【００７０】
ＸＯＲ回路１０４は、書込データとＣＲＣ演算出力との排他的論理和を求めランダム化済書込データを生成する。そして、データ書込部１０５は、ＸＯＲ回路１０４が生成したランダム化済書込データをＮＡＮＤフラッシュメモリ２に格納する。この場合、データ書込部１０５は、データＲ０〜Ｒ１９０をＮＡＮＤフラッシュメモリ２に格納する。
【００７１】
そして、読み出し単位の書込データＤ０〜Ｄ１９０に対応するデータＲ０〜Ｒ１９０の書き込みが完了すると、ＮＡＮＤ書込データ有効信号はＬｏｗの値に遷移する。これにより、次の読み出し単位の書込データＤ０〜Ｄ１９０の書き込みが開始される。この時、第２乱数発生器１１２は、このタイミングで第１乱数発生器１１１が出力した第１乱数データを取得する。そして、第２乱数発生器１１２は、取得した第１乱数データを次の読み出し単位のデータに対する第２乱数データを生成するためのシード値とする。このように、読み出し単位で乱数列を第２乱数発生器１１２が生成することで、読み出し単位毎にデータをランダム化できるとともにデータ消去の前後でデータをランダム化できる。
【００７２】
これに対して、ＣＲＣ演算器１０３は、直前のＣＲＣ、すなわち１つ前の読み出し単位の最後の書込データのランダム化に用いたＣＲＣを、次の読み出し単位のデータに対する第２乱数データを生成するためのシード値とする。これにより、読み出し単位の書込データの末尾と先頭とのデータをランダム化する値が近似することを回避でき、ＮＡＮＤフラッシュメモリ２に書き込むデータにおける、読み出し単位毎のデータの間のランダム性が向上する。
【００７３】
次に、図７を参照してデータ読み出し時の各部の動作についてさらに説明する。図７は、データ読み出し時のタイミングチャートである。図７における各グラフは、図７に向かって上から順に、動作クロック、初期化信号、ＮＡＮＤ書込データ有効信号、第２乱数データ、読出データ、ＣＲＣ演算出力及びホスト送信データをそれぞれ表す。読出データは、ＮＡＮＤフラッシュメモリ２から読み出したままの状態のデータであり、ホスト送信データはランダマイズが解除された状態のホスト１へ送信されるデータである。
【００７４】
ここでは、初期化信号を表す信号が２クロック目でＨｉｇｈの値となり、ＮＡＮＤコントローラ１０へ入力される。この初期化信号は、ＮＡＮＤコントローラ１０からのデータ読み出し時に発生する。初期化信号の入力を受けた次のクロックで、Ｈｉｇｈの値に遷移したＮＡＮＤ読出データ有効信号がＮＡＮＤコントローラ１０に入力される。
【００７５】
ＮＡＮＤ読み出しデータ有効信号がＨｉｇｈになると、第２乱数発生器１１２は、読み出し単位の読出データの先頭のメタデータ２１からＬＦＳＲシード２１１を取得する。また、ＣＲＣ演算器１０３は、読み出し単位の読出データの先頭のメタデータ２１からＣＲＣシード２１２を取得する。図７における読出データの先頭のシードは、ＬＦＳＲシード２１１及びＣＲＣシード２１２が読み出されることを示す。
【００７６】
そして、第２乱数発生器１１２は、取得したＬＦＳＲシード２１１をシード値として第２乱数データを生成する。ここで、第２乱数発生器１１２は、書き込み時と同じ値をシード値とし、書き込み時と同様のアルゴリズムで乱数列を生成するので、ランダマイズ時と同様の第２乱数データの乱数列を生成することができる。
【００７７】
さらに、ＮＡＮＤデータ有効信号がＨｉｇｈになったタイミングで、ＮＡＮＤフラッシュメモリ２からの読出データの読み出しが開示される。ここでは、読み出しデータとしてデータＲ０、Ｒ１、・・・のデータが読み出される場合で説明する。
【００７８】
ＣＲＣ演算器１０３は、取得したＣＲＣシード２１２をシード値とする。そして、ＣＲＣ演算器１０３は、読出データに対応する第２乱数データが付加された読出用結合データ及びシード値を用いてＣＲＣを算出する。この場合、ＣＲＣ演算器１０３は、ＣＲＣＣ０、Ｃ１・・・を生成する場合で説明する。ここで、ＣＲＣ演算器１０３は、最初のＣＲＣには、書き込み時と同じ値のシード値を用いる。そのため、ＣＲＣ演算器１０３は、ＣＲＣの演算は行わずにシード値をＸＯＲ回路１０４へ出力する。その後、ＣＲＣ演算器１０３は、ランダマイズが解除された１つ前のホスト送信データに対応する第２乱数データが付加された読出用結合データをデータ結合部１０２から取得する。そして、ＣＲＣ演算器１０３は、取得した読出用結合データとシード値とを用いて続くＣＲＣの算出を繰り返す。これにより、ＣＲＣ演算器１０３は、ランダマイズ時と同様のＣＲＣの乱数列を生成することができる。
【００７９】
ＸＯＲ回路１０４は、読出データと対応するＣＲＣとの排他的論理和を求めホスト送信データを生成する。そして、データ送信部１０７は、ＸＯＲ回路１０４が出力したホスト送信データをホスト１へ送信する。また、ＸＯＲ回路１０４は、ランダマイズを解除したホスト送信データをデータ結合部１０２へ出力する。
【００８０】
ここで、以上に説明したＮＡＮＤコントローラ１０は、例えば、ＦＰＧＡ（Field  Programmable  Gate  Array）を用いて製造される。このＦＰＧＡに含まれるメモリに、図１及び４に例示した乱数生成部１０１、データ結合部１０２、ＣＲＣ演算器１０３、データ書込部１０５、データ消去部１０６及びデータ送信部１０７の機能を実現するプログラムを含む各種プログラムが格納される。そして、ＦＰＧＡに含まれるプロセッサが、メモリから各種プログラムを読み出し実行することで、乱数生成部１０１、データ結合部１０２、ＣＲＣ演算器１０３、データ書込部１０５、データ消去部１０６及びデータ送信部１０７の機能を実現する。
【００８１】
以上に説明したように、本実施例に係るＮＡＮＤコントローラは、常時発生される第１乱数データをシード値としてＬＦＳＲにより読み出し単位の数の第２乱数データの乱数列を生成する。また、ＮＡＮＤコントローラは、第１乱数データをシード値とし、書込データと第２乱数データとの結合データを用いてＣＲＣを生成する。そして、生成したＣＲＣを用いて書込データをランダム化する。また、次の読み出し単位の書込データをランダム化する場合、１つ前の読み出し単位の書込データから求まるＣＲＣをシード値とする。これにより、読み出し単位毎のランダム性を向上させることができ、また、データ消去の前後での同じ領域に格納されるデータの近似を回避することができ、さらに、読み出し単位の書込データ間の近似も回避することができる。したがって、シンプルな構造でデータのランダム性を向上させることが可能となる。
【符号の説明】
【００８２】
１  ホスト
２  ＮＡＮＤフラッシュメモリ
１０  ＮＡＮＤコントローラ
１０１  乱数生成部
１０２  データ結合部
１０３  ＣＲＣ演算器
１０４  ＸＯＲ回路
１０５  データ書込部
１０６  データ消去部
１０７  データ送信部
１１１  第１乱数発生器
１１２  第２乱数発生器
【図１】
2020027473.tif 000003
【図２】
2020027473.tif 000004
【図３】
2020027473.tif 000005
【図４】
2020027473.tif 000006
【図５】
2020027473.tif 000007
【図６】
2020027473.tif 000008
【図７】
2020027473.tif 000009