以下に添付図面を参照して、実施形態に係るランダマイザおよび半導体記憶装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
第1実施形態
NAND型フラッシュメモリ(以下、NANDメモリという)などの不揮発性メモリ、特に1つのメモリセルに2ビット以上の多値データを書き込むことが可能な不揮発性メモリでは、メモリセルから読み出されたデータの信頼性を向上させるために、書込み対象のデータ(ユーザデータ。以下、単にデータという)と乱数列との論理演算(たとえば排他的論理和や加算や乗算等)により得られた値がメモリセルに書き込まれる。その際、使用する乱数列の特性(乱数性)が悪いと、データ読出時のエラー発生率が高くなったり、メモリセルの劣化の進行が早くなったり等の不具合が発生し、結果として不揮発性メモリを搭載した製品の信頼性が低下することがある。そのため、不揮発性メモリを備えた半導体記憶装置に搭載されるランダマイザには、乱数性の高い乱数列を発生できることが求められる。
ランダマイザは、一般的には不揮発性メモリに対する書込み/読出しを制御するメモリコントローラに搭載される。近年では、不揮発性メモリに対する書込み/読出しを実行するメモリインタフェース(I/F)が高速化されたことに伴い、ランダマイザにも高速動作が要求されている。このような要求に対する一つの解決策としては、ランダマイザを専用のハードウエアで実装することが考えられる。
また、不揮発性メモリに対する読出し動作では、不連続なアドレスからの読み出しが必要になる場合がある。そのような場合に対応するために、メモリコントローラに搭載されたランダマイザは、指定されたアドレスに対応する乱数のシードをテーブルで持っている。この乱数のシードテーブルには、以下のような制約がある。
(1)連続なアドレスパターンでアクセスされた場合であってシードが陽に定義されていないアドレスにアクセスされた場合、シードの種類が少ないと、シードが陽に定義されたアドレスとシードが陽に定義されていないアドレスとの差分を使って乱数列を発生させる必要があるが、そのような場合、アクセスのレイテンシが長くなるため、必要十分な種類のシードが必要である。
(2)そこでシードテーブルには、不揮発性メモリに対するデータ消去の単位である消去ブロックの大きさ(典型的には6MB(メガバイト))をデータの書き込み単位の大きさ(典型的には4kB(キロバイト))で割った値と同程度の大きさ、もしくはその値の平方根と同程度の大きさが要求される。
(3)ただし、異なるフレーム間で乱数生成のためのシードが重なると、ランダム検定で相関(異常値)が現れる。シードの重なりを防ぐためには、シードの種類(数)を十分に確保しておく必要があるが、そのような場合、シードテーブルが大きくなる。
(4)また、周期の長い擬似乱数生成器は、長い擬似乱数列を発生させる場合には乱数検定に対して良い検定結果を得られるが、短い擬似乱数列を発生させる場合には同じ乱数列が複数回出現するので検定の種類によっては良い検定結果が得られるとは限らない。
そこで以下の実施形態では、不揮発性メモリから読み出されたデータの信頼性を確保するために、複数の擬似乱数列を論理演算(以下の説明では、明確化のため、論理演算を排他的論理和(XOR)とする)することで得られた新たな擬似乱数列を用いて書込み対象のデータをスクランブルする。
ただし、データをスクランブルするための擬似乱数列に規則性があると、その規則性が不揮発性メモリの信頼性を低下させるパターンと一致する場合がある。そのような場合、不揮発性メモリから読み出されたデータの信頼性が低下したり、メモリセルの劣化の進行が早まったり等の不具合が発生する。そこで以下の実施形態では、後述する手法にてスクランブルに使用する擬似乱数列の質を向上させる。
図1は、第1実施形態にかかる半導体記憶装置(メモリシステム)の概略構成例を示すブロック図である。図1に示すように、半導体記憶装置10は、メモリコントローラ100と不揮発性メモリ120とがメモリバス110で接続された構成を備える。
不揮発性メモリ120は、データを不揮発に記憶できる半導体メモリであり、たとえばNAND型フラッシュメモリ(以下、単にNANDメモリという)である。NANDメモリでは、ページ単位でデータの書き込みおよび読み出しが実行される。また、NANDメモリでは、ブロック単位でデータの消去が実行される。NANDメモリを不揮発性メモリ120に用いた場合、そのメモリセルは、1ビットの記憶が可能なシングルレベルセルであってもよいし、2ビット以上の記憶が可能なマルチレベルセルであってもよい。
メモリコントローラ100は、パーソナルコンピュータや携帯端末などの外部装置であるホストからの要求に応じてメモリに対するデータの書込み/読出しを制御するコントローラである。図1に示すように、メモリコントローラ100は、コントローラ101と、RAM(Random Access Memory)102と、ホストインタフェース(ホストI/F)103と、バッファメモリ104と、ECC(Error Check and Correction)回路105と、メモリインタフェース(メモリI/F)106と、ランダマイザ107とが内部バス108を介して相互に接続された構成を備える。
ホストI/F103は、ホストから受信したコマンドやユーザデータ(書込みデータ)などを内部バス108に出力する。また、ホストI/F103は、不揮発性メモリ120から読み出されたユーザデータ(読出しデータ)やコントローラ101からの応答などをホストへ送信する。
メモリI/F106は、コントローラ101からの指示に基づいて、ユーザデータ等を不揮発性メモリ120へ書込む処理および不揮発性メモリ120から読み出す処理を制御する。
コントローラ101は、半導体記憶装置10を統括的に制御する。コントローラ101は、たとえばCPU(Central Processing Unit)、MPU(Micro Processing Unit)等であってよい。コントローラ101は、ホストからホストI/F103経由でコマンドを受け付けると、そのコマンドに従って各部を制御する。たとえばコントローラ101は、ホストからのコマンドに従い、不揮発性メモリ120へのユーザデータの書き込みをメモリI/F106へ指示する。また、コントローラ101は、ホストからのコマンドに従い、不揮発性メモリ120からのユーザデータの読み出しをメモリI/F106へ指示する。
ホストI/F103がホストから書込みデータとして受信したユーザデータは、一時的にバッファメモリ104に蓄積される。コントローラ101は、バッファメモリ104に蓄積されるユーザデータに対して不揮発性メモリ120のメモリ領域を決定し、この決定されたメモリ領域内にユーザデータを書き込むことをメモリI/F106に指示する。一方、コントローラ101は、ホストからの読出しコマンドを受信した場合、読出しコマンドに含まれるアドレスからのユーザデータの読み出しをメモリI/F106へ指示する。これにより不揮発性メモリ120から読み出されたユーザデータは、一時的にバッファメモリ104に蓄積された後、ホストI/F103を介してホストへ送信される。
不揮発性メモリ120に対する書込み/読出しの際にユーザデータ等を一時的に蓄積するバッファメモリ104には、たとえばSRAM(Static Random Access Memory)やDRAM(Dynamic Random Access Memory)などの揮発性メモリを用いることができる。
ECC回路105は、たとえば誤り訂正機能を備えた符号化/復号回路であり、不揮発性メモリ120へ書き込むユーザデータをBCH符号などの誤り訂正符号で符号化し、また、不揮発性メモリ120から読み出された符号化されたユーザデータを復号して元のユーザデータを取得する。
ランダマイザ107は、不揮発性メモリ120の同一ページに書込まれる所定サイズのユーザデータをランダマイズし、ECC回路105に送る。ECC回路105はランダマイズされたユーザデータを符号化する。また、不揮発性メモリ120の同一ページから読み出された所定サイズのユーザデータは、ECC回路105により復号された後、ランダマイザ107に送られる。ランダマイザ107は、ランダマイズされたユーザデータのランダマイズを解除して、元のユーザデータを復元する。
つづいて、図1におけるランダマイザ107について、以下に図面を参照して詳細に説明する。図2は、第1実施形態にかかるランダマイザの概略構成例を示すブロック図である。図2に示すように、ランダマイザ107は、2つの擬似乱数生成器1071および1072と、2つのXOR回路(演算器)1073およびXOR回路(スクランブル回路)1074とを備える。
2つの擬似乱数生成器1071および1072は、それぞれ擬似乱数列を生成可能な乱数生成器であって、互いに性質の異なる擬似乱数生成器である。互いに性質が異なるとは、たとえば擬似乱数生成器1071および1072がM系列の擬似乱数生成器であれば、それぞれの周期が異なるなど、互いに確率性や規則性等が異なることであってよい。また、2つの擬似乱数生成器1071および1072のうち、一方をM系列である擬似乱数生成器とし、他方をM系列でない擬似乱数生成器とすることも可能である。
擬似乱数生成器1071および1072を同じM系列の擬似乱数生成器とした場合、シフト加法性により、生成されるデータ系列の乱数性能が元のM系列の性能に維持される。そこで図2に示すように、異なる性質の擬似乱数生成器1071および1072から出力された擬似乱数列の排他的論理和をとることで、M系列のシフト加法性を崩して新たな乱数列を生成する。それにより、非着目の次元での規則性や乱数の偏りなどの発生を抑制することが可能となる。
図3に、単一の擬似乱数生成器で生成された擬似乱数列の確率分布(累積確率分布:CDF)と、2つの擬似乱数生成器で生成された擬似乱数列の排他的論理和をとった場合の乱数列の確率分布(累積確率分布:CDF)とを示す。図3に示すように、2つの擬似乱数生成器で生成された擬似乱数列の排他的論理和をとった場合の乱数列の累積確率分布は、単一の擬似乱数生成器で生成された擬似乱数列の累積確率分布よりも急峻な傾きとなっている。これは、2つの擬似乱数生成器で生成された擬似乱数列の排他的論理和をとった場合の方が規則性や乱数の偏りなどが排除されて乱数性の高い乱数列が生成されることを示している。
また、M系列のシフト加法性を崩して新たな乱数列を生成することで、不揮発性メモリ120の仕様(たとえばNANDメモリにおけるNANDの仕様)の影響を最小限に抑えることが可能となる。それにより、不揮発性メモリ120の世代を超えて使用することが可能なランダマイザ107を実現することができる。すなわち、不揮発性メモリ120の仕様が変更された場合でも、ランダマイザ107の設計を変更することなくそのまま使用することが可能である。その結果、不揮発性メモリ120を構成するセルに与える負荷を軽減することが可能になるとともに、設計変更によるコスト増加や再設計に要する手間や時間等を抑えることが可能となる。
つづいて図4に、擬似乱数生成器1071および/または1072に適用可能なM系列の線形帰還シフトレジスタ(Linear Feedback Shift Register:LFSR)の一例を示す。図4に示す線形帰還シフトレジスタ1は、M系列の擬似乱数生成回路であり、具体的にはCRC−32で用いられる32次の多項式を用いた割り算回路である。なお、図4には、32次の原始多項式で割り算した余りを乱数で表す線形帰還シフトレジスタを例示するが、これに限定されず、d(dは2以上の整数)次の原始多項式で割り算した余りを乱数で表す線形帰還シフトレジスタを用いることが可能である。また、図4に示す線形帰還シフトレジスタ1は、一部または全部をハードウエアで構成することも可能であるし、一部または全部をファームウエアで構成することも可能である。
図4に示すように、線形帰還シフトレジスタ1は、X
1〜X
32の32個のレジスタ2および13個のXOR演算部3を備える。各レジスタ2には、たとえばフリップフロップ回路が用いられる。このような構成を備える線形帰還シフトレジスタ1は、以下の式(1)で表される32次の原始多項式M(X)で割り算した余りを擬似乱数列として出力する。出力される擬似乱数列の周期は、2
32−1となる。
線形帰還シフトレジスタ1を構成する32個のレジスタ2は、それぞれ原始多項式M(X)の1次の項X1から32次の項X32に対応している。XOR演算部3は、原始多項式M(X)の係数が1である項のうち最終段の項X32以外の項X1、X2、X4、X5、X7、X8、X10、X11、X12、X16、X22、X23およびX26に対応するレジスタ2の後段にそれぞれ設けられる。各XOR演算部3は、32個のレジスタ2のうちの最終段のレジスタ2のレジスタ出力b7と、そのXOR演算部3の前段のレジスタ2のレジスタ出力とのXORをとり、その結果を後段のレジスタ2に出力する。したがって、図4に示す線形帰還シフトレジスタ1では、原始多項式M(X)の係数が1である13個の項X1、X2、X4、X5、X7、X8、X10、X11、X12、X16、X22、X23およびX26それぞれについて、XOR演算の結果が1サイクルごとに生成される。
線形帰還シフトレジスタ1には、乱数出力部4が設けられている。乱数出力部4は、線形帰還シフトレジスタ1の帰還ループ上で生成される13個のXOR演算結果のうちのk(kは1以上12以下の整数)個を擬似乱数列として出力する。図4には、項X32に対応する最終段のレジスタ2に加え、原始多項式M(X)の項X3、X7、X11、X15、X19、X23およびX26に対応する7個(k=7)のレジスタ2から、1サイクルごとに合計8ビットのレジスタ出力b0〜b7を擬似乱数列として取り出す例が示されている。
なお、たとえば項X12のXOR演算結果は、項X13→項X14→項X15→項X16という順序で1サイクルごとにシフトされるが、そのシフトによっては項X12のXOR演算結果が変化しない。そのため、項X12のXOR演算結果は、各項X13、X14、X15およびX16のうちのいずれの項からも取り出すことが可能である。
また、図4では、8ビットの擬似乱数列を取り出すために、各項X3、X7、X11、X15、X19、X23、X26およびX32からレジスタ出力b0〜b7を取り出す構成を例示したが、この構成に限られない。たとえばレジスタ出力b7を除く他のレジスタ出力b0〜b6については、13個の項X1、X2、X4、X5、X7、X8、X10、X11、X12、X16、X22、X23およびX26のうちのどの7個の項が選択されてもよい。
図4に示す線形帰還シフトレジスタ1で擬似乱数列を発生させる場合、各レジスタ2に初期値としてのシードが設定される。各レジスタ2の値は、1サイクルごとに次段に1つずつシフトされる。その際に、各XOR演算部3によるXOR演算結果を擬似乱数として取り出すことで、乱数性の低下を抑えつつ、線形帰還シフトレジスタ1から複数の擬似乱数列を取り出すことが可能である。
また、不揮発性メモリ120としてNANDメモリを用いた場合、線形帰還シフトレジスタ1の次数dは、その線形帰還シフトレジスタ1が発生する擬似乱数列の周期YがNANDメモリのブロックサイズSよりも大きくなるように決定されることが好ましい。それにより、NANDメモリの同一ブロックに書き込まれるデータが周期性を持つのを防止できるため、NANDメモリの同一ブロック内におけるセル間干渉を低減することが可能となる。その結果、NANDメモリの信頼性が向上する。
図5に、図4に示す線形帰還シフトレジスタ1を用いた乱数生成器の概略構成例を示す。図5に示す擬似乱数生成器50は、図2における擬似乱数生成器1071または1072として使用される乱数生成器である。
図5に示すように、擬似乱数生成器50は、シードテーブル51と、レジスタ52と、シード選択部53と、シード設定部54と、巡回制御部55とを備える。
擬似乱数生成器50には、たとえばK(Kは2以上の整数)個のシードテーブル51が格納されている。各シードテーブル51には、たとえば32ビットのシードが67個登録されている。各シードには、インデックスIが対応づけられている。インデックスIは、シードテーブル51におけるシードを特定するための番号である。なお、各シードテーブル51に登録されるシードの個数(本例では67個)は、後述において説明するように、メモリセルの物理的な配置と相関が得にくい素数であることが好ましい。
レジスタ52には、不揮発性メモリ120のページ番号52Aおよびフレームオフセット番号52Bが保持される。なお、ページとは、不揮発性メモリ120に対する書き込み単位または読み出し単位である。また、フレームとは、ECC回路105の処理単位(以下、ECC単位という)である。
シード選択部53は、ページ番号52Aおよびフレームオフセット番号52Bに基づいてインデックスIを求め、そのインデックスIに割り当てられたシードをシードテーブル51から選択する。
シード設定部54は、シードテーブル51から使用するシードを取り出し、取り出したシードを線形帰還シフトレジスタ1に設定する。なお、擬似乱数生成器50は、K個の線形帰還シフトレジスタ1を備えることが可能である。その場合、シード設定部54は、K個の線形帰還シフトレジスタ1それぞれに対して、シードテーブル51からシードを取り出し、取り出したシードを設定する。
線形帰還シフトレジスタ1は、設定されたシードに基づいて擬似乱数列を生成し、生成した擬似乱数列を巡回制御部55に入力する。巡回制御部55は、線形帰還シフトレジスタ1の値を1サイクルごとに1ビットずつ巡回させる。その結果、巡回制御部55からは8ビットの擬似乱数列が出力される。なお、図5では、説明の都合上、乱数生成器1071の8ビットのレジスタ出力をb0a〜b7aとし、乱数生成器1072の8ビットのレジスタ出力をb0b〜b7bとしている。
以上のようにして乱数生成器1071および1072からそれぞれ出力された8ビットの擬似乱数列は、図2に示すXOR回路1073に入力される。ここで図6に、XOR回路1073の概略構成例を示す。図6に示すように、XOR回路1073は、乱数生成器1071および1072それぞれの8ビットのレジスタ出力b0a〜b7aおよびb0b〜b7bの組み合わせそれぞれに対応する8個のXOR演算回路57を備える。各XOR演算回路57は、入力された2つの擬似乱数列のうち該当する2つのビット値のXORをとり、その演算結果を出力する。それにより、XOR回路1073からは、8ビットの擬似乱数列が出力される。なお、説明の都合上、XOR回路1073の8ビットの出力をb0c〜b7cとする。
XOR回路1073から出力された擬似乱数列は、XOR回路1074に入力される。XOR回路1074には、不揮発性メモリ120に対して書込み/読出しをする8ビットの入力データ列Din[7:0]も入力される。図7に、XOR回路1074の概略構成例を示す。図7に示すように、XOR回路1074は、図6に示すXOR回路1073と同様、XOR回路1073の8ビットの出力b0c〜b7cと入力データ列Din[7:0]の8ビットとの組み合わせそれぞれに対応する8個のXOR演算回路58を備える。このような構成を備えることで、XOR回路1074は、XOR回路1073の出力b0c〜b7cに基づいて入力データ列Din[7:0]をランダマイズすることができる。
入力データ列Din[7:0]のランダマイズを行う場合、入力データ列Din[7:0]のページ番号52Aおよびフレームオフセット番号52Bが、図5に示すレジスタ52に格納される。そして、そのページ番号52Aおよびフレームオフセット番号52Bに基づいて、インデックスIが算出される。そして、そのインデックスIをキーとしてシードテーブル51からシードが選択され、線形帰還シフトレジスタ1に設定される。
ここで、インデックスIをIndex、ページ番号52Aをshiftnum、フレームオフセット番号52Bをoffset、1ページ当たりのECC単位数をframe_maxとすると、これらの関係は、例えば、以下の式(2)で与えることができる。また、図8には、式(2)で特定されるインデックスI(Index)とページ番号52A(shiftnum)とフレームオフセット番号52B(offset)との対応関係の一例を示す。なお、図8では、シードの個数を67個としている。また、ECCフレームサイズを1kBとし、ページサイズを16kBとすることで、1ページ内に書き込むことができるECCフレームの数(1ページ当たりのECC単位数(frame_max))を16としている。したがって、図8では、フレームオフセット番号52Bは、0〜15の値を取り得る。
図8に示すように、たとえばフレームオフセット番号52B(offset)を8とし、ページ番号52A(shiftnum)を13とした場合、上記式(2)から、インデックスI(Index)は15と求まる。なお、不揮発性メモリ120のメモリセルが3ビットのTLC(Triple Level Cell)である場合には、TLCでは3ページ単位で1ワードラインに換算されるため、不揮発性メモリ120における該当個所は5ワードライン(Middleレイヤ)に相当することとなる。
各乱数生成器1071および1072においてシードテーブル51から選択されたシードが線形帰還シフトレジスタ1に設定されると、入力データ列Din[7:0]の入力サイクルに従って線形帰還シフトレジスタ1の値が1ビットずつ巡回され、その時のレジスタ出力b0〜b7が線形帰還シフトレジスタ1からXOR回路1073に入力される。XOR回路1073では、擬似乱数生成器1071における線形帰還シフトレジスタ1のレジスタ出力b0a〜b7aと、擬似乱数生成器1072における線形帰還シフトレジスタ1のレジスタ出力b0b〜b7bとのXORがとられることで、M系列のシフト加法性が崩された新たな擬似乱数列が生成される。生成された擬似乱数列は、XOR回路1073の出力b0c〜b7cを介してXOR回路1074へ入力される。
XOR回路1074では、入力データ列Din[7:0]の各ビットとXOR回路1073の出力b0c〜b7cとのXORがとられることで、入力データ列Din[7:0]がランダマイズされた出力データ列Dout[7:0]が生成される。
ここで、ページ番号52Aおよびフレームオフセット番号52Bに基づいて線形帰還シフトレジスタ1に与えるシードを変化させることにより、不揮発性メモリ120を消去した後に同一のメモリセルに同一データを書き込む場合においても、その同一のメモリセルに書き込まれるデータを別の値に変化させることができる。このため、不揮発性メモリ120の同一メモリセルに同一の値が何度も繰り返し書き込まれるのを防止することができ、結果的に、半導体記憶装置10の信頼性の低下を抑制することができる。
つぎに、第1実施形態にかかるシードテーブルの例について、以下に図面を用いて詳細に説明する。図9は、第1実施形態にかかるシードテーブルの一例を示す図である。なお、図9では、シードテーブル51に登録された32ビットのシードが16進数で表されている。図9に示すように、シードテーブル51には、32ビットのシードが67個登録されている。インデックス順に並べた際のシードのビット数の間隔は、均等であることが好ましい。
各シードには、それぞれのシードを特定するためのインデックスIが対応づけられている。また、1つのシードテーブル51に登録するシードの個数(本例では67)は、素数である。各シードテーブル51に登録するシードの個数を素数とすることで、不揮発性メモリ120におけるページ間、カラム間またはレイヤ間でのデータの再現性の周期をシードの周期と一致し難くすることができる。それにより、不揮発性メモリ120における隣接ページ間、隣接カラム間または隣接レイヤ間でのデータの周期を異ならしめることができ、結果的に、NANDメモリのセル間の干渉を抑制することができる。
また、シードのビット数の間隔を均等とすることにより、シードのビット数の最小間隔を大きくすることができる。それにより、線形帰還シフトレジスタ1に与えるシードが変更された場合においても、線形帰還シフトレジスタ1が発生する乱数の周期がシードの変更前後で重なり難くすることができる。
線形帰還シフトレジスタ1に設定可能なシードの個数をPとすると、この個数Pは、線形帰還シフトレジスタ1が発生する擬似乱数列の周期Yおよび不揮発性メモリ120のブロックサイズSとを用いて、Y/P>Sという条件を満たすことが好ましい。たとえば不揮発性メモリ120のブロックサイズSを4Mバイト〜6Mバイト程度とし、線形帰還シフトレジスタ1に設定可能なシードの個数Pを67とした場合、Y/P=(232−1)/67≒8Mバイトとなり、Y/P>Sという条件を満たす。この場合、不揮発性メモリ120のブロックの書き込みデータの周期をブロックサイズSと同等以上に設定することが可能となるため、不揮発性メモリ120の同一ブロックでのセル間干渉を抑制することが可能となる。
なお、シードの個数Pは、不揮発性メモリ120の物理構造および論理構造を特徴付ける数(たとえばワードライン数、BiCS(Bit Cost Scalable)の層数、BiCSのFingerを構成する数、1ワードラインに含まれるECCフレームの数など)と互いに素である(公約数を持たない)数であることが望ましい。素数は、その定義上、公約数を持たないため、ワードライン数、BiCSの層数、Finger数などの公倍数になることはなく、シードの個数Pに素数を用いることは生成される擬似乱数列の乱数性を高めるという点で有効である。
また、シードの個数Pは、ワードライン数と同程度の数であることが望ましい。ここで言う「同程度」とは、1桁程度の差の範囲内であることを意味する。これは、シードの個数Pが小さすぎると、同一のシードが多数回使用されることとなり、その結果、同じ並びを持つ擬似乱数列が多数回出現して相関が現れてしまうためである。また、シードの個数Pが大きすぎると、シードテーブル51のサイズが大きくなり、その結果、シードテーブル51を格納するために多くのメモリ領域が必要となるため、シードの個数Pは大きすぎない数であることが好ましい。
さらに、不揮発性メモリ120として使用される一般的なNANDメモリでは、NAND構造が2のべき乗である2、4、8、16、…、128の整数倍で特徴付けられる構造となっている。ここで、このようなNAND構造に冗長部を付加すると、2+1=3、4+1=5、8+1=9=3×3、16+1=17というように、3や5や17といった比較的小さな値の素数が出現する。そのため、シードの個数Pには、これらのような比較的小さな素数が用いられないようにする必要がある。
これらのような条件を考慮すると、上述において例示した“67”は、たとえば浮遊ゲートNANDの64ワードライン、86ワードラインまたは128ワードライン、ならびに、BiCSの48層、64層または128層と同程度の大きさの素数であって比較的小さな素数ではないため、シードの個数Pとしては好適な数であると言える。
つぎに、入出力ごとにシードを変化させた場合の不揮発性メモリ120における使用領域について説明する。図10は、入出力ごとにシードを変化させた場合の不揮発性メモリにおける使用領域の一例を示す図である。なお、図10を説明するにあたり、不揮発性メモリ120には、線形帰還シフトレジスタ1の周期Y=232−1以下の容量を持つメモリ領域MRが設けられているものとする。このメモリ領域MRには、使用領域と不使用領域があってもよい。また、シードテーブル51および線形帰還シフトレジスタ1の個数Nを4とする。その場合、メモリ領域MRの入出力IO#1、IO#2、IO#3およびIO#4ごとに、4個のシードテーブル51を別個に定義することができる。4個のシードテーブル51は、4個の線形帰還シフトレジスタ1にそれぞれ対応付けられているものとする。
不揮発性メモリ120に対する書込み動作では、入出力IO#1、IO#2、IO#3およびIO#4ごとに別個のシードテーブル51から4個のシードが選択され、これら4個のシードが4個の線形帰還シフトレジスタ1に与えられる。このような動作により、1サイクル当たり4個の入力データ列Din[7:0]がランダマイズされる。
また、入出力IO#1、IO#2、IO#3およびIO#4ごとにシードテーブル51を別個に定義することで、各入出力IO#1、IO#2、IO#3およびIO#4に不使用領域がある場合においても、線形帰還シフトレジスタ1の最長周期を効率的に利用することができる。その結果、出力データDout[7:0]の乱数性を向上させることが可能となる。
以上のように構成および動作することで、第1実施形態によれば、M系列のシフト加法性を崩して新たな乱数列が生成されるため、非着目の次元での規則性や乱数の偏りなどの発生を抑制することが可能となる。その結果、乱数性の高い擬似乱数列を生成することが可能となり、不揮発性メモリ120の同一ブロック内におけるセル間干渉を低減することが可能となるため、NANDメモリの信頼性を向上させることが可能となる。
また、M系列のシフト加法性を崩して新たな乱数列を生成することで、不揮発性メモリ120の仕様(たとえばNANDメモリにおけるNANDの仕様)の影響を最小限に抑えることが可能となるため、不揮発性メモリ120の世代を超えて使用することが可能なランダマイザ107を実現することができる。すなわち、不揮発性メモリ120の仕様が変更された場合でも、ランダマイザ107の設計を変更することなくそのまま使用することが可能である。その結果、不揮発性メモリ120を構成するセルに与える負荷を軽減することが可能になるとともに、設計変更によるコスト増加や再設計に要する手間や時間等を抑えることが可能となる。
第2実施形態
上述した第1実施形態では、互いに性質の異なる2つの擬似乱数生成器で生成された2つの擬似乱数列のXORをとることで、新たな擬似乱数列を生成する場合を例示した。これに対し、第2実施形態では、複数の擬似乱数生成器から1つまたは2つ以上の擬似乱数生成器を適宜選択して擬似乱数列を生成する場合について説明する。
図11は、第2実施形態にかかるランダマイザの概略構成例を示すブロック図である。図11に示すように、第2実施形態にかかるランダマイザは、N個(Nは2以上の整数)の擬似乱数生成器131〜13Nと、入力された2つ以上の擬似乱数列のXORをとって新たな擬似乱数列を生成するXOR回路150と、各擬似乱数生成器131〜13NとXOR回路150との接続状態を導通/非導通のいずれかに切り替えるスイッチ回路141〜14Nとを備える。
各擬似乱数生成器131〜13Nは、第1実施形態で例示した擬似乱数生成器1071または1072と同様であってよい。また、擬似乱数生成器131〜13Nは、第1実施形態と同様に、互いに性質の異なる擬似乱数生成器であるとよい。ただし、このことは、同一の性質を持つ擬似乱数生成器が2つ以上含まれることを除外するものではない。
スイッチ回路141〜14Nは、たとえばメモリコントローラ100におけるコントローラ101からの制御に従い、擬似乱数生成器131〜13Nにおけるいずれか1つまたは2つ以上をXOR回路150に接続する。
XOR回路150は、スイッチ回路141〜14Nのうち2つ以上が導通することで2つ以上の擬似乱数列が入力された場合、これらのXORをとることで新たな擬似乱数列を生成する。ただし、XOR回路150は、スイッチ回路141〜14Nのうちの1つが導通することで1つの擬似乱数列が入力された場合には、入力された擬似乱数列をそのまま出力する。
以上のように、新たな擬似乱数列を生成するために組み合わせる擬似乱数生成器を適宜選択することが可能な構成とすることで、不揮発性メモリ120の仕様に対してより柔軟に対応することが可能となるため、不揮発性メモリ120の世代を超えて使用することが可能なランダマイザを実現することができる。
なお、その他の構成、動作および効果は、第1実施形態と同様であるため、ここでは重複する説明を省略する。
第3実施形態
つぎに、第3実施形態にかかるランダマイザおよび半導体記憶装置について、例を挙げて説明する。上述した実施形態では、シードテーブル51に32ビットのシードが必要個数(たとえば67個)登録されている場合を例示した。その場合、シードの個数を67個とすると、1つのシードテーブル51を保持するために、32ビット×67個の計2144ビットのメモリ空間が必要となる。一方で、たとえばM系列の擬似乱数生成器では、シード数を増やすことで乱数性能を向上させることができることが知られている。しかしながら、通常では、シード数が増加すれば必要なメモリ空間も増加してしまう。そこで第3実施形態では、シードテーブルの格納に必要となるメモリ空間の増大を抑えつつシード数を増加させることが可能なランダマイザおよび半導体記憶装置について、図面を用いて詳細に説明する。
図12は、第3実施形態にかかるシードテーブルの一例を示す図である。図12に示すように、第3実施形態では、1つのシードテーブル160に、32ビットのシード161が256個(=28個)登録されている。
各シード161は、32ビットのうちの一部のビットが可変ビット162と定義され、残りのビットが固定ビット163および164と定義される。本例では、32ビットのうち、8ビットが可変ビット162と定義され、残りの24ビットが固定ビット163および164と定義されている。固定ビット163および164は、1つのシードテーブル160に登録された256個のシード161間で共通のビット値により構成されている。一方、可変ビット162は、1つのシードテーブル160に登録された256個のシード161間で同一の値が存在しないビット値で構成されている。
可変ビット162を8ビットとした場合、この可変ビット162のビット値のパターンは28通り、すなわち256通り存在する。この場合、各シード161間の距離(サイクル)が必要サイクル以上離れていることを確保できれば、32ビット中の一部である8ビットを可変ビット162とした場合でも、生成される擬似乱数列の性能が劣化することを抑制できる。
なお、本例では、可変ビット162をシード161における途中の8ビットとしているが、これに限定されず、たとえばシード161の先頭ビットを含む連続する2ビット以上を可変ビットとしてもよいし、末尾ビットを含む連続する2ビット以上を可変ビットとしてもよい。また、本例では、可変ビット162を連続する8ビットとしているが、これに限定されず、たとえば1つのシード161における不連続の2ビット以上を可変ビットとすることも可能である。
さらに、本例では、可変ビット162を8ビットとしているため、1つのシードテーブル160に登録されるシード161の個数を256個(=28個)としているが、可変ビット162のビット数を増やすことで、より多くのシード161を1つのシードテーブル160に登録することが可能である。たとえば可変ビット162を10ビットとした場合、210個、すなわち1024個のシード161を1つのシードテーブル160に登録することが可能である。
図13は、第3実施形態においてシードテーブルを格納するメモリ空間に記憶されるデータの一例を示す模式図である。図13に示すように、第3実施形態では、固定ビット163および164は、1つのシードテーブル160に登録された全てのシード161で共通のため、シードテーブル160を格納するメモリ空間では重複する固定ビット163および164が省かれている。したがって、第3実施形態において1つのシードテーブル160を格納するのに必要となるメモリ空間は、固定ビット163および164の24ビットに、28通りの可変ビット162を格納するための28×8ビット、すなわち2048ビットを加えた、合計2072ビットとなる。これは、固定ビット163および164を設けない場合のシード64個分に略相当することから、第3実施形態によれば、1つのシードテーブル160を約4倍に拡張できることを意味している。
以上のように、シード161を構成する32ビットのうちの一部を可変ビット162として、1つのシードテーブル160に同一のシード161が存在しないように構成することで、シードテーブル160の格納に必要となるメモリ空間の増大を抑えつつシード数を増加させることが可能となる。
なお、シード161におけるいずれのビットを可変ビットとするかは、メモリコントローラ100におけるコントローラ101などが適宜設定できるとよい。その場合、コントローラ101は、たとえばホストからの要求や不揮発性メモリ120の仕様等に応じて必要なシードの個数を決定し、少なくとも決定した個数分の重複しないビットパターンを得るのに必要となるビット数を特定し、特定した数のビットをシードのビット列からランダムもしくは所定のルールにしたがって選択するとともに、特定したビット数の重複しないビットパターンを生成する。このように生成されたビットパターンおよび固定ビットとするビットパターンは、シードテーブル160を格納する所定のメモリに格納される。なお、可変ビットとする複数のビットパターンおよび固定ビットのビットパターンは、コントローラ101またはランダマイザ107によって適宜生成されてよい。
また、第3実施形態では、第1実施形態で例示した構成、すなわち、ランダマイザ107が2つの擬似乱数生成器1071および1072を備える場合を引用したが、この構成に限定されるものではない。すなわち、第3実施形態で例示した、シードの一部を固定ビットとする構成は、上述したような、原始多項式(生成多項式)を用いた種々の擬似乱数生成器に対して適用することが可能である。これは、ランダマイザ107が単一の擬似乱数生成器を備えた構成である場合にも同様である。
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
第4実施形態
つぎに、第4実施形態にかかるランダマイザおよび半導体記憶装置について、図面を参照して詳細に説明する。なお、以下の説明において、上述した実施形態と同様の構成および動作については、同一の符号を付し、その重複する説明を省略する。
第4実施形態にかかる半導体記憶装置の概略構成例は、第1実施形態において図1を用いて説明した構成と実質的に同一である。
ただし、第4実施形態では、ランダマイザ107において組み合わせられる擬似乱数生成器それぞれが持つ欠点を解消して乱数性の高い新たな擬似乱数列を生成するために、組み合わせる擬似乱数生成器に対して以下のような条件を与える。
(A)周期が乱数性の検定対象のデータサイズのa倍以上(aは1以上の数であって、たとえば100)である長周期の擬似乱数生成器
(B)周期が乱数性の検定対象のデータサイズの1/b以下(bは1以上の数であって、たとえば8)である短周期の擬似乱数生成器
項目(A)の擬似乱数生成器は、生成される擬似乱数列に重なりが発生しないように使うことができるが、擬似乱数生成器に与えるシードによっては局所的に特性の悪い擬似乱数列を発生させる場合がある。また、必要なシードの長さが長いため、多数のシードを持つ場合にはシードテーブルのサイズが大きくなる。
項目(B)の擬似乱数生成器は、原理上、発生させる擬似乱数列に重なりが発生するため、乱数列としての特性が悪くなる可能性がある。その一方で、発生する擬似乱数列に重なりが多数発生することは、擬似乱数列をたとえば8ビット単位で区切った小データで考えたときに、小データの発生確率が(A)の擬似乱数生成器に比べて一様分布に近くなり易いという特徴も有する。
そこで第4実施形態では、(A)の擬似乱数生成器で発生させた擬似乱数列と、(B)の擬似乱数生成器で発生させた擬似乱数列とのXORをとることで、両者の持つ弱点を相殺して特性の良い乱数列を得る。
また、第4実施形態では、(B)の擬似乱数生成器にシードを与えることによって発生させた擬似乱数列を(A)の擬似乱数生成器のシードとして使う。このような構成により、個々のシード長を短くできるため、シードテーブルのサイズを縮小することが可能となる。
(A)の長周期の乱数生成器(これを主乱数生成器(第2擬似乱数生成器)という)としては、CRC−32または後述するルールに従って擬似乱数列を生成する56ビット(または64ビット)の遅れフィボナッチ方式の乱数生成器(以下、単に遅れフィボナッチ乱数生成器という)を用いることができる。(B)の短周期の乱数生成器(これを副乱数生成器(第1擬似乱数生成器)という)としては、CRC−8またはCRC−16(またはCRC−32)の擬似乱数生成器を用いることができる。なお、第4の実施形態では、不揮発性メモリ120への書込み対象のデータとして、最終的に生成する擬似乱数列の全体周期の1/2以上の長さのデータを使う場合を例に挙げる。また、第4実施形態における主乱数生成器および副乱数生成器は、たとえば第1実施形態における2つの擬似乱数生成器1071および1072に相当するものである。
たとえば64ビット遅れフィボナッチ乱数生成器は、64個のフリップフロップと64個のXOR回路とで構成されるため、2倍強の回路規模で232倍(約4×103倍)の周期をもつ擬似乱数列を発生することができる。また、遅れフィボナッチ乱数生成器は、XOR回路が各フリップフロップ間で1段だけ使われる点、フリップフロップの出力の論理出力数(Fan out)が外部への出力および自己へのフィードバックを含めて4つである点、および、フリップフロップ間の配線数がフリップフロップの2倍の128本程度である点を有しているため、ハードウエア実装に向いた構成であるとも考えられる。
そこで第4実施形態では、主乱数生成器に64ビット遅れフィボナッチ乱数生成器を用いることとする。主乱数生成器を遅れフィボナッチ乱数生成器で構成する場合、擬似乱数列を生成する際のルールでは、ハードウエア実装を考慮して、n項の数列を2n項に拡張した以下の式(3)(漸化式)で生成される遅れフィボナッチ(Lagged Fibonacci)数列が用いられる。
ただし、上記の漸化式(3)の条件は、m=2、n>55、0≦i≦n−1、j=i+n(i<nのとき)、j=i(i>n+1のとき)、および、X(j)=X(i)である。
上述した条件のうち、0≦i≦n−1、j=i+n(i<nのとき)およびj=i(i>n+1のとき)の条件から、n≦j≦2n−1となる。さらに、m=2の条件から、X(i)={0,1}となる。
以上のような漸化式(3)を用いた場合に生成される擬似乱数列は、255−1の周期を持つ。擬似乱数列を適用する不揮発性メモリの消去ブロックサイズは、概ね128Mバイト(メガバイト)(≒1Gビット(ギガビット))=230)程度であるので、擬似乱数列の周期は、不揮発性メモリの消去ブロックサイズに対し、約225(≒(255−1)/230)倍の長さとなる。また、この周期は、不揮発性メモリチップの容量を1Tビット(テラビット)(≒240ビット)とした場合でも、約215(≒(255−1)/240)倍の長さとなり、1000(≒210)倍以上の長さを持つことになる。
なお、本説明では、主乱数生成器のハードウエア実装を容易化するために、遅れフィボナッチ数列を生成するための漸化式(3)にXOR演算が用いられているが、加算、乗算など、別の論理演算を用いることも可能である。また、ハードウエア量を考慮しなければ、X(i)の要素には、m=2のビット{0,1}ではなく、もっと大きな単位、たとえばm=8のバイト{0000_0000,0000_0001,0000_0010,…,1111_1111}を用いることも可能である。
さらに、本説明では、漸化式(3)における遅れフィボナッチの「遅れ」の組み合わせを(24,55)と表記する。その場合、その他の「遅れ」の組み合わせとしては、(5,17)、(13,31)、(33,68)、(33,97)、(37,100)、(83,258)等を用いることも可能である。このような組み合わせとすることで、互いに2段以上の論理演算(XOR)を経由しないと到達できない要素からの出力を用いて擬似乱数列を生成することが可能となるため、より相関の低い擬似乱数列を生成することが可能となる。なお、遅れの組を(a,b)(ただし、b>a)とした場合、その周期は2b−1となる。
第4実施形態では、周期が擬似乱数列の適用対象の大きさに対して十分に長いこと、および、8ビット以上を同時に使うことの2つを要件とし、この要件を満たすために、「遅れ」の組み合わせを(24,55)としている。これらの要件を満たすことで、後述において触れるように、遅れの組(a,b)に対して、aビットまでを同時に出力することが可能なハードウエア構成を容易に実装することが可能となる。
また、第4実施形態では、副乱数生成器として、第1実施形態において図4を用いた説明したCRC−32方式の線形帰還シフトレジスタ1を用いた擬似乱数生成器を用いた場合を例に挙げて説明する。
第1実施形態において説明したように、図4に示した線形帰還シフトレジスタ1は、式(1)に示した原始多項式M(X)で定義される。そこで第4実施形態では、この線形帰還シフトレジスタ1を用いて副乱数生成器を構成し、あらかじめ定義しておいた32ビットのシードをこの副乱数生成器に入力することで、64ビットの擬似乱数列を8ビット×7周期で生成する。副乱数生成器が8ビット×7周期で生成した64ビットの擬似乱数列は、主乱数生成器である64ビット遅れフィボナッチ乱数生成器にシードとして与えられる。
CRC−32で擬似乱数列を発生させるのに必要なシードが32ビットであり、主乱数生成器である64ビット遅れフィボナッチ乱数生成器で必要なシードが64ビットであることから、CRC−32方式の副乱数生成器で生成した擬似乱数列を主乱数生成器である64ビット遅れフィボナッチ乱数生成器のシードとして用いることは、シードのサイズを約1/2に削減できることを意味している。
また、CRC−32方式の副乱数生成器は、32ビットの短周期の擬似乱数生成器であるため、CRC−32方式の副乱数生成器の出力を主乱数生成器のシードとして順に用いることで、26(=64≒55)ビットのシードを約6400万(≒226=232/26≒(232−1)/64)個生成することができる。
さらに、55ビットシードが不足する場合にも、副乱数生成器に入力する32ビットのシードの他に、副乱数生成器から出力を取り出すまでにオフセットとして与える出力を捨てる回数を調整することで、別系列の55ビットシードを生成することができるため、その不足を解消することが可能である。
なお、CRC−32方式の副乱数生成器に与えるシードは、第1実施形態において図5を用いて説明したように、たとえば67エントリ(67個のシード)のシードテーブル51のインデックスiと、インデックスiに対するフレームオフセット番号とを指定することで特定することができる。
図14に、第4実施形態において主乱数生成器として使用する64ビット遅れフィボナッチ乱数生成器の一例を示す。また、図15に、図14の64ビット遅れフィボナッチ乱数生成器で使用するフリップフロップの一例を示し、図16に、図14の各フリップフロップの入力段に設けられる入力回路の一例を示す。
図14に例示する64ビット遅れフィボナッチ乱数生成器(以下、単に主乱数生成器という)200は、インデックスiが0から63(すなわち、X0〜X63)にそれぞれ対応する計64個のフリップフロップ201と、64個のフリップフロップ201それぞれの入力段に設けられた入力回路202とを備える。なお、本説明では、インデックスiのフリップフロップ201を“Xi”または“X(i)”と称する場合がある。
個々のフリップフロップ201は、図15に示すように、たとえばD型フリップフロップであり、その端子として、C(クロック)端子と、D入力と、Q出力と、Qバー(反転)出力と、CLR(クリア)端子とを備える。
また、各フリップフロップ201の入力段に設けられる入力回路202は、図16に示すように、セレクタ2021と、シードテーブル2022と、XOR回路2023とを備える。なお、図16には、インデックスi=0に対応するフリップフロップ201の入力段に設けられた入力回路202が示されているが、他のインデックスi=1〜63それぞれに対応するフリップフロップ201についても同様の入力回路202が設けられている。
一般的な64ビット遅れフィボナッチ乱数生成器では、i=0〜63のフリップフロップが順に使用された後に、i=64〜127のフリップフロップが順に使用される。しかしながら、たとえばi=0〜7のフリップフロップに格納された情報を使って当該i=0〜7のフリップフロップを参照する後続のフリップフロップを更新した後は、i=0〜7のフリップフロップは、以降、後続のフリップフロップから参照されることは無い。そこで第4実施形態にかかる主乱数生成器200では、たとえばi=0〜7のフリップフロップ201に格納された情報を使って当該i=0〜7のフリップフロップ201を参照する後続のフリップフロップ201を更新した後は、i=0〜7のフリップフロップ201がi=64〜71の情報を格納するフリップフロップとして使用される。同様に、i=8〜55までのフリップフロップ201は、i=72〜119までの情報を順次格納するフリップフロップとして使用される。すなわち、第4実施形態では、64個のフリップフロップ201のうち、「モジュロn(以下、modnと記す)が同じフリップフロップは等価」と見なして情報が格納される。
図14は、i=0のフリップフロップ201を含む要素に着目した図であり、その他のi=1〜63のフリップフロップ201それぞれを含む要素も同様の接続構成を備える。したがって、第4実施形態にかかる主乱数生成器200は、それぞれ1つのフリップフロップ201とその入力段に設けられた1つの入力回路202とで構成された要素が8行8列の行列状に配置された構成を有する。図14に示される構成では、図面中、最左列(これを1列目とする)の上から下にかけてi=0〜7に対応する要素が並べられ、左から2列目には上から下にかけてi=8〜15に対応する要素が並べられ、以降同様にして、最右列(すなわち、左から8列目)には上から下にかけてi=56〜63に対応する要素が並べられている。
図14の最左列の最上に位置するi=0(mod64)のフリップフロップ201、すなわちX0(=X64)は、上述した漸化式(3)より、i=9(=64−55)およびi=40(=64−24)のフリップフロップ201(すなわち、X9およびX40)の情報を参照して更新される。そこで、X0(=X64)のD入力には、X9とX40とのQ出力をXOR回路2023にてXORした値が入力される。また、X0(=X64)は、それぞれ1ビットの入力セレクト信号2024および2025の組み合わせに従って、現在のX0の値を保持、シードテーブル2022から出力されたビット(シード値)の値を保持、および、X9とX40とのQ出力をXORした値を保持、のいずれかを選択して動作する。このような動作は、他のX1〜X63のフリップフロップ201についても同様である。
また、上述したように、短周期の副乱数生成器を用いて長周期の主乱数生成器200に入力するシードを生成する場合、図16に示す入力回路202におけるセレクタ2021のシードテーブル入力A1または空きポートである入力A3に、副乱数生成器の出力が接続される。
図17に、X0、X1、X2、X7、X8、X56およびX63の入力構成例を示す。なお、図17で入力構成例が示されていないフリップフロップ201も同様の接続構成を備えている。また、図17における最右列の8ビットのフリップフロップ201には、出力タップ203がそれぞれ設けられている。この8つの出力タップ203から出力される値は、n=64の遅れフィボナッチ数列を64ビット単位で切り出した値のうちの最後の8ビットに相当する。すなわち、図17に示す主乱数生成器200は、n=64の遅れフィボナッチ数列を64ビット単位で切り出した値のうちの最後の8ビットを出力するように構成されている。ただし、この構成に限定されず、最初の8ビットを出力する構成や、途中の連続するまたは不連続な8ビットを出力する構成など、種々変形することが可能である。なお、最初の8ビットを出力する構成とした場合、2周目のデータ出力を迅速に行うことができる。
また、主乱数生成器が出力するビット数は、8ビットに限られるものではない。図18には、n=64の遅れフィボナッチ数列を64ビット単位で切り出した値のうちの最後の24ビットを出力するように構成された主乱数生成器210を示す。一般的に、遅れフィボナッチ数列は非常に特性のよい擬似乱数列を発生できることで知られている。たとえば図18に示すような、n=64の遅れフィボナッチ数列を64ビット単位で切り出した値のうちの最後の24ビットを出力する構成では、あるフリップフロップ201に保持されている情報が1サイクルで他のフリップフロップに到達することはないため、特に相関が小さい擬似乱数列を生成することができる。
また、24ビット出力とする場合、図18に示したような64ビット構成ではなく、後述の図19に示されるような72ビット構成(56より大きくかつ24の最小倍数)や、図20に示されるような96ビット構成(24の倍数)など、56ビットより大きくかつ24ビットの倍数となるビット数の構成としてもよい。その場合、24個の出力タップ203を出力用セレクタに対して1対1に接続することが可能となるため、ハードウエア実装を容易化することができる。また、同様の理由から、16ビット出力とする場合には、56ビット構成や72ビット構成よりも64ビット構成(56より大きくかつ16の最小倍数)とすることが好適であり、さらに、8ビット出力とする場合には、56ビット構成とすることが好適である。
図19および図20に、24ビット出力で構成された主乱数生成器の例を示す。なお、図19は、ハードウエア実装に好適な24ビット出力の64ビット遅れフィボナッチ乱数生成器で構成された主乱数生成器の概略構成例を示し、図20は、ソフトウエアモデルでの検証に好適な24ビット出力の64ビット遅れフィボナッチ乱数生成器で構成された主乱数生成器の概略構成例を示す。
図19に示す主乱数生成器220は、図15に示すフリップフロップ201と図16に示す入力回路202とよりなる72個の要素が8行9列の行列状に配置された構成を有する。この主乱数生成器220は、24ビットの出力を3ビットずつ8サイクルに分けて出力するように構成されている。そこで、主乱数生成器220は、3つの出力セレクタ221a〜221cを備えている。出力セレクタ221aは、8行9列の行列状に配置された要素におけるフリップフロップ201のうち、1列目と4列目と7列目のフリップフロップ201のQ出力に接続される。同様に、出力セレクタ221bは、2列目と5列目と8列目のフリップフロップ201のQ出力に接続され、出力セレクタ221cは、3列目と6列目と9列目のフリップフロップ201のQ出力に接続される。
各要素の入力回路202では、1サイクルで3列ずつ更新するように、セレクタ2021に入力する入力セレクト信号2024および2025が制御される。一方、出力セレクタ221a〜221cは、その出力の組み合わせが、1列目、2列目および3列目からの出力の組み合わせ、4列目、5列目および6列目からの出力の組み合わせ、または、7列目、8列目および9列目からの出力の組み合わせとなるように、2ビットの出力セレクト信号222に基づいて動作する。その際、出力セレクト信号222を、入力セレクト信号2024および2025を1サイクル(または2サイクル)遅延させた信号とすることで、出力セレクタ221a〜221cの出力を入力セレクト信号と同期させることが可能である。
このように、64ビット遅れフィボナッチ数列の配列要素をフリップフロップ201を用いて実装するハードウエア実装の場合には、64ビット遅れフィボナッチ乱数生成器を72ビット構成とすることで、擬似乱数列の生成効率を高めることができる。その一方で、64ビット遅れフィボナッチ乱数生成器をソフトウエアモデルで検証する場合には、図20に示す主乱数生成器220Aのように、配列要素を24個増やして合計96個(X0〜X95)とすることで、後続の配列を更新する際の参照先となる配列が後続の配列の更新の際に更新されない構成となるため、実装を容易化することができる。
また、8ビット出力および24ビット出力以外の構成として、16ビット出力で構成された主乱数生成器の例を図21に示す。図22には、図21に示す主乱数生成器のタイミングチャートを示す。
図21に示すように、主乱数生成器230は、フリップフロップ201と入力回路202とよりなる64個の要素が8行8列の行列状に配置された構成を有する。また、主乱数生成器230は、16ビットの出力を4ビットずつ4サイクルに分けて出力するための構成として、2つの出力セレクタ231aおよび231bを備える。出力セレクタ231aは、8行8列の行列状に配置された要素におけるフリップフロップ201のうち、1列目と3列目と5列目と7列目のフリップフロップ201のQ出力に接続され、出力セレクタ231bは、2列目と4列目と6列目と8列目のフリップフロップ201のQ出力に接続される。
16ビット出力の場合、1サイクルで2列ずつ更新されるように、入力回路202における2ビットの入力セレクト信号(図16の入力セレクト信号2024および2025参照)が制御される。また、図21および図22に示すように、出力セレクタ231aおよび231bからの出力が、8行8列の行列状に配置された要素のうちの1列目、2列目、3列目および4列目からの出力の組み合わせ、または、5列目、6列目、7列目および8列目からの出力の組み合わせとなるように、入力セレクト信号を1サイクル(または2サイクル)遅延させた出力セレクト信号232が制御される。これにより、出力セレクタ231aおよび231bの出力が入力セレクト信号と同期して切り替えられる。
なお、8ビット出力の場合には、1サイクルで1列ずつ更新されるように、入力回路202における3ビットの入力セレクト信号が制御されるとともに、出力セレクタからの出力が1列目、2列目、3列目、4列目、5列目、6列目、7列目および8列目からの出力となるように、入力セレクト信号を1サイクル(または2サイクル)遅延させた2ビットの出力セレクト信号が制御される。これにより、出力セレクタの出力が入力セレクト信号と同期して切り替えられる。
また、上述したように、第4実施形態において主乱数生成器に採用されている遅れフィボナッチ乱数生成器は、非常に質の良い擬似乱数列を生成する。しかしながら、遅れフィボナッチ乱数生成器は、生成方法(漸化式)が単純であり、また、たとえば距離が10以下などの近傍の要素でなく、遠くの要素を参照して擬似乱数列を生成するため、似たようなシード値を与えると、サイクル数が小さい領域(たとえば擬似乱数列の冒頭部分)では極めて似たシーケンスを出力する場合がある。表現を変えると、ランダムアクセス等に対応するために細かい単位でシードを指定する場合には、サイクル数が小さい部分ではシードの選び方次第で似たような擬似乱数列が生成されてしまい、検定結果の悪い擬似乱数列が生成されてしまう可能性がある。
そこで第4実施形態では、上述したように、たとえばCRC−32方式の線形帰還シフトレジスタ1(図4参照)を副乱数生成器として用い、この副乱数生成器に8組の67エントリからなるシードテーブルを用いて発生させた擬似乱数列から55ビット以上(たとえば56ビット)ずつ取り出し、そのうちの55ビットを64ビットの遅れフィボナッチ方式を用いる主乱数生成器のシードとして使用する。
このような、副乱数生成器で生成された擬似乱数列を主乱数生成器のシードとして使用する際の動作例を、以下に図面を用いて詳細に説明する。図23は、本動作説明において使用する8ビット出力の64ビット遅れフィボナッチ乱数生成器を用いた主乱数生成器の一例を示す図である。図24は、副乱数生成器で生成された擬似乱数列を図23に示す主乱数生成器のシードとして使用する際の動作例を示すフローチャートである。なお、図23に示す主乱数生成器200は、図14に示した主乱数生成器200と同一であってよい。
図23に示すように、本説明に用いる主乱数生成器200は、図14に示した構成の他に、1列目〜8列目までのフリップフロップ201のQ出力に接続された出力セレクタ204と、出力セレクタ204からデータ(擬似乱数列)を出力する出力タップ203とを備える。出力セレクタ204は、入力回路202における入力セレクト信号2024および2025を1サイクル(または2サイクル)遅延させた出力セレクト信号205に基づき、入力セレクト信号と同期してその出力を切り替える。
図23に示す主乱数生成器200は、たとえば図24および以下で説明するステップS101〜S122およびその自然拡張(ステップS123)で示される手順に従って動作することで、必要なサイズ分の擬似乱数列を生成する。
(ステップS101)まず、副乱数生成器用のシードテーブルから指定されたシードを取得し、このシードの値を副乱数生成器にセットする。
(ステップS102)副乱数生成器を指定の初期サイクル数、シフト動作させる。
(ステップS103)副乱数生成器から8ビット出力を取り出し、主乱数生成器200のX0〜X7にセットする。
(ステップS104)副乱数生成器を指定の通常サイクル数、シフト動作させる。
(ステップS105)副乱数生成器から8ビット出力を取り出し、主乱数生成器200のX8〜X15にセットする。
(ステップS106)副乱数生成器を指定の通常サイクル数、シフト動作させる。
(ステップS107)副乱数生成器から8ビット出力を取り出し、主乱数生成器200のX16〜X23にセットする。
(ステップS108)副乱数生成器を指定の通常サイクル数、シフト動作させる。
(ステップS109)副乱数生成器から8ビット出力を取り出し、主乱数生成器200のX24〜X31にセットする。
(ステップS110)副乱数生成器を指定の通常サイクル数、シフト動作させる。
(ステップS111)副乱数生成器から8ビット出力を取り出し、主乱数生成器200のX32〜X39にセットする。
(ステップS112)副乱数生成器を指定の通常サイクル数、シフト動作させる。
(ステップS113)副乱数生成器から8ビット出力を取り出し、主乱数生成器200のX40〜X47にセットする。
(ステップS114)副乱数生成器を指定の通常サイクル数、シフト動作させる。
(ステップS115)副乱数生成器から8ビット出力を取り出し、そのうちの7ビットを主乱数生成器200のX48〜X54にセットする。
(ステップS116)主乱数生成器200のX55値を、X0とX31との値を使ってセットする。なお、X55の入力は、遅れフィボナッチ法の漸化式(3)に従うXOR回路2023(図16参照)で実装されている。
(ステップS117)主乱数生成器200のX56〜X63を、X0〜X55の値を使って同時に更新する。なお、X56〜X63それぞれの入力は、遅れフィボナッチ法の漸化式(3)に従うXOR回路2023で実装されている。
(ステップS118)以上のようにして主乱数生成器200のX0〜X63に値がセットされた後、主乱数生成器200から必要なサイズのデータが出力される。
なお、図24のステップS118では、たとえば図25に示す動作が実行される。図25に示す動作では、まず、漸化式(3)の項を特定するjの値が0にリセットされる(ステップS1181)。
つづいて、出力セレクタ信号でXjmod64〜X(j+7)mod64を選択して8ビットのデータを出力するとともに、Xjmod64〜X(j+7)mod64をX(j+8)mod64〜X(j+63)mod64の値を用いて更新する(ステップS1182)。
つぎに、必要なサイズのデータを出力済みであるか否かを判断し(ステップS1183)、出力済みでない場合(ステップS1183;NO)、jを8インクリメントし(ステップS1184)、その後、ステップS1181へリターンする。一方、必要なサイズのデータを出力済みである場合(ステップS1183;YES)、本動作を終了する。
ここで、図24および図25に示す動作では、X(j)、X(j−24)およびX(j−55)には、それぞれjmod64、(j−24)mod64および(j−55)mod64に対応するインデックスiを持つXiが使用される。また、ステップS116では、X55のみの更新が実行されるが、ステップS117以降では、8個単位で更新が実行される。
また、図24および図25では、副乱数生成器に使用したCRC−32方式の擬似乱数生成器の通常のシフトサイクル数が1である場合を想定しているが、1以外の値を用いて別の擬似乱数列を生成することも可能である。
さらに、図24および図25に示す動作例では、1サイクルで8ビットずつ更新し、8ビットずつデータを取り出すように構成されているが、この構成は、主乱数生成器200がX0〜X63の64ビットのフリップフロップ201を有しているため、以下の理由から、必要な擬似乱数列を発生させるには十分であると考えられる。その1つ目は、更新する8ビットが更新しない56ビットを参照するので、漸化式(3)に従った動作を実行することが可能であることである。2つ目は、8ビットを更新すると、出力セレクト信号205で選択された8個のフリップフロップ201が今後参照されることはないので、次に更新する8ビットに割り当てることができることである。
第4実施形態において、副乱数生成器には副乱数生成器用のシードテーブル(たとえば図5のシードテーブル51参照)からシードが供給される。最初の短周期乱数出力では、シードを設定した後、最初のサイクルで出力されたデータ(擬似乱数列)から主乱数生成器のシードとして使用してもよい。副乱数生成器用のシードを使い果たした場合には、副乱数生成器にシードを設定後、副乱数生成器から出力されるデータのうち、別に指定するサイクル数分(例えば67サイクル分)のデータ(擬似乱数列)を捨ててから、それ以降(たとえば68サイクルから)のデータ(擬似乱数列)を主乱数生成器のシードとして使用してもよい。このようにすることで、副乱数生成器用のシードテーブルのサイズを小さくすることができる。
また、シードの別の拡張方法としては、副乱数生成器の出力を順番に使う方法の他に、たとえば副乱数生成器の出力を8ビット毎に分割し、8ビット内でビットの順番の入れ替え(ローテート)を行うことで、見かけ上、別の乱数系列を発生させる方法を採用することもできる。その場合、8ビットのビット順列を考慮すると、8の階乗(8!=4320)通りの新たな組み合わせを生成することができる。
なお、長周期の主乱数生成器からの出力が使用目的に沿っているか否かについては、事前に使用目的に沿った乱数検定を行って確認しておくとよい。その際、短周期の副乱数生成器から出力される擬似乱数列は、副乱数生成器に与えるシードによって一意に定まるので、副乱数生成器に与えるシードによって主乱数生成器に与えるシードが一意に決まり、結果、主乱数生成器が出力する擬似乱数列も一意に決まることを考慮すべきである。すなわち、副乱数生成器に与えるシードが決まると、主乱数生成器が出力する擬似乱数列も一意に決まることに注意が必要である。
また、主乱数生成器の定義によっては、不揮発性メモリへのデータの書き込みに使用する擬似乱数列が、主乱数生成器が出力できる擬似乱数列のうちの一部となる。その場合、使用目的に合わない擬似乱数列に対応している副乱数生成器用のシードをシードテーブルに登録しないように構成することも可能である。使用目的に合わない擬似乱数列の例としては、たとえば擬似乱数列に“0”が多数(たとえば8ビット以上)連続している場合や、複数の副乱数生成器用のシードに対して主乱数生成器が出力する擬似乱数列が相関を持っている場合などが挙げられる。
以上のように、第4実施形態によれば、主乱数生成器で発生させた擬似乱数列と、副乱数生成器で発生させた擬似乱数列とのXORをとって新たな乱数列を生成するように構成されているため、それぞれの擬似乱数生成器が持つ弱点を相殺して特性の良い乱数列を得ることが可能となる。
また、第4実施形態によれば、副乱数生成器にシードを与えることによって発生させた擬似乱数列を主乱数生成器のシードとして使用するように構成されているため、個々のシード長を短くすることができ、これにより、シードテーブルのサイズを縮小することが可能となる。
さらに、第4実施形態によれば、modnが同じフリップフロップは等価と見なして情報を格納するように構成されているため、主乱数生成器が備える要素の数を削減することができ、それにより、主乱数生成器の回路規模を縮小することが可能となるとともに、主乱数生成器ひいてはランダマイザのハードウエア実装を容易化することが可能となる。
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
第5実施形態
つぎに、第5実施形態にかかるランダマイザおよび半導体記憶装置について、以下に図面を参照して詳細に説明する。
上述した第4実施形態では、主乱数生成器に用いた遅れフィボナッチ数列から連続する数ビット(たとえば8ビット、16ビット、24ビット等)を出力する場合を例示したが、第5実施形態では、遅れフィボナッチ数列から不連続の数ビットを出力する場合を例に挙げて説明する。
図26は、第5実施形態にかかる遅れフィボナッチ乱数生成器を用いた主乱数生成器の一例を示す図である。なお、図26では、取り出し対象の不連続8ビットの例として、X0、X7、X14、X21、X28、X35、X42、X49が選択されている。
図26に例示される主乱数生成器240では、ビット取出し対象の8つの要素(フリップフロップ201および入力回路202)が素数である7ビット間隔で配置されている。第4実施形態で触れたように、遅れフィボナッチ数列では、あるビットに対し、24ビット前のビットと55ビット前のビットとが相関を持つ。そこで、24および55に対して互いに素である7ビット間隔でビットを取り出す構成とすることで、取り出したビット間の相関を非常に弱くすることができる。
また、取り出すビット数がたとえば16ビットである場合、56ビットが7ビットの8倍であるため、24および55に対して互いに素な別の素数、たとえば13ビット間隔でビットを取り出すとよい。その場合、得られる擬似乱数列は、たとえばX0、X13、X26、X39、X52、X9、X22、X35、X48、X5、X18、X31、X44、X1、X14、X27から取り出されたビット列となる。なお、ここでは、(52+13)mod56=(65)mod56=9などを用いて取り出し対象のビットが決定されている。
以上のように、遅れフィボナッチ数列において相関が現れるビット間隔(たとえば24ビット間隔および55ビット間隔)に対して互いに素となる素数のビット間隔で主乱数生成器240からビットを取り出すように構成することで、取り出したビット間の相関を非常に弱くすることができる。その結果、乱数性の良好な擬似乱数列を生成することが可能となる。
なお、遅れフィボナッチ数列では、漸化式(3)から分かるように、隣接するビット間の相関が無い、あるいは非常に弱い。そのため、8ビット出力であればX(7:0)、16ビット出力であればX(15:0)を使用することも可能である。
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
第6実施形態
上述した第4実施形態では、長周期の主乱数生成器のシードを1つの短周期の副乱数生成器で発生させる場合を例示したが、第6実施形態では、複数の副乱数生成器を使って主乱数生成器のシードを発生させる場合について、例を挙げて説明する。
複数の副乱数生成器の例としては、2個のM13系列の擬似乱数生成器、2個のM17系列の擬似乱数生成器、2個のM19系列の擬似乱数生成器、および、2個のM23系列の擬似乱数生成器の合計8個の副乱数生成器を挙げることができる。その場合のシードテーブルの例としては、以下の2通りの案を例示することができる。
・第1案:使用するM系列のうち最も長いシードが要求されるM系列(上記例ではM23系列)を含む1つ以上のM系列に対してそれぞれシードテーブルを用意し、他の系列については用意したシードテーブルのいずれかにおけるシードの一部を使う。
・第2案:M系列それぞれについて専用のシードテーブルを用意する。
上述した第1案の場合、シードテーブルサイズを小さくすることができるが、シードテーブルが用意されたM系列(たとえばM23系列)以外については発生する擬似乱数列に重なりが無いことが保証されない。一方で、第2案の場合には、重なりが出ないように擬似乱数列を発生することは可能であるが、シードテーブルサイズが大きくなる。
ただし、第6実施形態では、主乱数生成器のシードを生成することを目的として副乱数生成器を用いているため、副乱数生成器が生成するシード自体の乱数の質(乱数性)に対しては寛容である。これは、主乱数生成器の周期が使用対象のデータ(たとえばXORを取るデータ)の長さの100〜1000倍程度など非常に長い場合には、主乱数生成器の発生できる擬似乱数列のうち実際に使用する擬似乱数列の割合は小さいため、副乱数生成器に与えるシードの選択によって実際に使用する擬似乱数列に重なりが生じる可能性は非常に低いと考えられるためである。たとえばCRC−32方式の副乱数生成器に2つのシードを与えた際に生成される擬似乱数列が重なる可能性は、1/1000〜1/100程度の確率である。また、遅れフィボナッチの周期はCRC−32の周期の8M倍であるため、生成された2つの擬似乱数列が重なる可能性は、さらに1/8Mの確率となる。これは、他の実施形態についても同様である。
以上のように、主乱数生成器に与えるシードを複数の副乱数生成器を用いて生成する構成とすることで、主乱数生成器に与えるシードの乱数性を高めることができる。また、複数の副乱数生成器用に用意するシードテーブルのサイズを小さくしたい場合などにも柔軟に対応することが可能である。
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
第7実施形態
上述した第5実施形態のように、遅れフィボナッチ数列から不連続の数ビットを出力する場合、使用するフリップフロップを増やすことで、更に多くのビットを1サイクルで出力するように構成することができる。そこで第7実施形態では、1サイクルに16ビットのデータを出力することが可能なランダマイザおよび半導体記憶装置について、具体例を挙げて説明する。
図27に、第7実施形態にかかる主乱数生成器の一例を示し、図28に、副乱数生成器で生成された擬似乱数列を図27に示す主乱数生成器のシードとして使用する際の動作例を示す。なお、図27に示す主乱数生成器250は、1サイクルに16ビットのデータを出力するように構成された遅れフィボナッチ乱数生成器である。
図27に示すように、第7実施形態にかかる主乱数生成器250は、フリップフロップ201と入力回路202とよりなる80個の要素が8行10列の行列状に配置された構成を有する。また、主乱数生成器250は、1行目、3行目、5行目、7行目および9行目のフリップフロップ201のQ出力に接続された出力セレクタ251aと、2行目、4行目、6行目、8行目および10行目のフリップフロップ201のQ出力に接続された出力セレクタ251bを備えている。出力セレクタ251aおよび251bは、入力回路202における入力セレクト信号2024および2025を1サイクル(または2サイクル)遅延させた出力セレクト信号252に基づき、入力セレクト信号と同期してその出力を切り替える。
図27に示す主乱数生成器250は、たとえば図28および以下で説明するステップS501〜S521およびその自然拡張(ステップS522)で示される手順に従って動作することで、必要なサイズ分の擬似乱数列を生成する。なお、ステップS501〜S517までは、上述において図24のステップS101〜S117を用いて説明した動作と同様であるため、ここでは重複する説明を省略する。
(ステップS518)主乱数生成器250のX64〜X79を、X8〜X63の値を使って同時に更新する。なお、X(j)の値は、i=jmod80に対応するXiにセットされる。また、X64〜X79の入力は、X64〜X79に対応する遅れフィボナッチ法の漸化式(3)に従うXOR回路2023で実装されている。
(ステップS519)以上のようにして主乱数生成器250のX0〜X79に値がセットされた後、主乱数生成器250から必要なサイズのデータが出力される。
なお、図28のステップS519では、たとえば図29に示す動作が実行される。図29に示す動作では、まず、漸化式(3)の項を特定するjの値が0にリセットされる(ステップS5191)。
つづいて、出力セレクタ信号でXjmod80〜X(j+7)mod80およびX(j+8)mod80〜X(j+15)mod80を選択して16ビットのデータを出力するとともに、Xjmod80〜X(j+15)mod80をX(j+16)mod80〜X(j+79)mod80の値を用いて更新する(ステップS5192)。
つぎに、必要なサイズのデータを出力済みであるか否かを判断し(ステップS5193)、出力済みでない場合(ステップS5193;NO)、jを16インクリメントし(ステップS5194)、その後、ステップS5191へリターンする。一方、必要なサイズのデータを出力済みである場合(ステップS5193;YES)、本動作を終了する。
ここで、図28および図29に示す動作では、X(j)、X(j−24)およびX(j−55)には、それぞれjmod80、(j−24)mod80および(j−55)mod80に対応するインデックスiを持つXiが使用される。また、ステップS516ではX55の1個、ステップS517ではX56〜X63の8個の更新がそれぞれ実行されるが、ステップS518以降では、16個単位で更新が実行される。
さらに、図28および図29に示す動作例では、1サイクルで16ビットずつ更新し、16ビットずつデータを取り出すように構成されているが、この構成は、主乱数生成器250がX0〜X79の80ビットのフリップフロップ201を有しているため、以下の理由から、必要な擬似乱数列を発生させるには十分であると考えられる。その1つ目は、更新する16ビットが更新しない64ビットを参照するので、漸化式(3)に従った動作を実行することが可能であることである。2つ目は、16ビットを更新すると、出力セレクト信号252で選択された16個のフリップフロップ201が今後参照されることはないので、次に更新する16ビットに割り当てることができることである。
なお、フリップフロップ201から出力セレクタ251aおよび251bに出力される論理出力数(Fan out)を増やすことで、図27に示す主乱数生成器250のフリップフロップ201の数を8個削減して72個とすることが可能であるが、第7実施形態では、出力セレクタ251aおよび251bとフリップフロップ201とを結ぶ配線の数を1/2に削減するために、16ビット出力の5倍の80個のフリップフロップ201で主乱数生成器250を構成している。
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
第8実施形態
第8実施形態では、使用するフリップフロップを増やすことで、1サイクルに24ビットのデータを出力することを可能にしたランダマイザおよび半導体記憶装置について、具体例を挙げて説明する。
図30に、第8実施形態にかかる主乱数生成器の一例を示し、図31に、副乱数生成器で生成された擬似乱数列を図30に示す主乱数生成器のシードとして使用する際の動作例を示す。なお、図30に示す主乱数生成器260は、1サイクルに24ビットのデータを出力するように構成された遅れフィボナッチ乱数生成器である。
図30に示すように、第8実施形態にかかる主乱数生成器260は、フリップフロップ201と入力回路202とよりなる96個の要素が8行12列の行列状に配置された構成を有する。また、主乱数生成器260は、4つの出力セレクタ261a〜261dを備える。
出力セレクタ261aは、1行目、5行目および9行目のフリップフロップ201のQ出力に接続される。出力セレクタ261bは、2行目、6行目および10行目のフリップフロップ201のQ出力に接続される。出力セレクタ261cは、3行目、7行目および11行目のフリップフロップ201のQ出力に接続される。出力セレクタ261dは、4行目、8行目および12行目のフリップフロップ201のQ出力に接続される。各出力セレクタ261a〜261dは、入力回路202における入力セレクト信号2024および2025を1サイクル(または2サイクル)遅延させた出力セレクト信号262に基づき、入力セレクト信号と同期してその出力を切り替える。
図30に示す主乱数生成器260は、たとえば図31および以下で説明するステップS601〜S621およびその自然拡張(ステップS622)で示される手順に従って動作することで、必要なサイズ分の擬似乱数列を生成する。なお、ステップS601〜S616までは、上述において図24のステップS101〜S116を用いて説明した動作と同様であるため、ここでは重複する説明を省略する。
(ステップS617)主乱数生成器260のX56〜X71を、X0〜X55の値を使って同時に更新する。X56〜X71それぞれの入力は、遅れフィボナッチ法の漸化式(3)に従うXOR回路2023で実装されている。
(ステップS618)主乱数生成器260のX72〜X95を、X17〜X71の値を使って同時に更新する。なお、X(j)の値は、i=jmod96に対応するXiにセットされる。また、X72〜X95の入力は、X72〜X95に対応する遅れフィボナッチ法の漸化式(3)に従うXOR回路2023で実装されている。
(ステップS619)以上のようにして主乱数生成器260のX0〜X95に値がセットされた後、主乱数生成器260から必要なサイズのデータが出力される。
なお、図31のステップS619では、たとえば図32に示す動作が実行される。図32に示す動作では、まず、漸化式(3)の項を特定するjの値が0にリセットされる(ステップS6191)。
つづいて、出力セレクタ信号でXjmod96〜X(j+23)mod96を選択して24ビットのデータを出力するとともに、Xjmod96〜X(j+15)mod96をX(j+24)mod96〜X(j+95)mod96の値を用いて更新する(ステップS6192)。
つぎに、必要なサイズのデータを出力済みであるか否かを判断し(ステップS6193)、出力済みでない場合(ステップS6193;NO)、jを24インクリメントし(ステップS6194)、その後、ステップS6191へリターンする。一方、必要なサイズのデータを出力済みである場合(ステップS6193;YES)、本動作を終了する。
ここで、図31および図32に示す動作では、X(j)、X(j−24)およびX(j−55)には、それぞれjmod96、(j−24)mod96および(j−55)mod96に対応するインデックスiを持つXiが使用される。また、ステップS616ではX55の1個、ステップS617ではX56〜X71の16個の更新がそれぞれ実行されるが、ステップS618以降では、24個単位で更新が実行される。
さらに、図31および図32に示す動作では、1サイクルで24ビットずつを更新し、24ビットずつデータを取り出すように構成されているが、この構成は、主乱数生成器260がX0〜X95の96ビットのフリップフロップ201を有しているため、以下の理由から、必要な擬似乱数列を発生させるには十分であると考えられる。その1つ目は、更新する24ビットが更新しない72ビットを参照するので、漸化式(3)に従った動作を実行することが可能であることである。2つ目は、24ビットを更新すると、出力セレクト信号262で選択された24個のフリップフロップ201が今後参照されることはないので、次に更新する24ビットに割り当てることができることである。
なお、フリップフロップ201から出力セレクタ261a〜261dに出力される論理出力数(Fan out)を増やすことで、図30に示す主乱数生成器260のフリップフロップ201の数を16個削減して80個とすることが可能であるが、第8実施形態では、出力セレクタ261a〜261dとフリップフロップ201とを結ぶ配線数を1/3に削減するために、24ビット出力の3倍の96個のフリップフロップ201で主乱数生成器260を構成している。
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
第9実施形態
つぎに、第9実施形態にかかるランダマイザおよび半導体記憶装置について、以下に詳細に説明する。第9実施形態では、第4実施形態と同様に、短周期の副乱数生成器から出力される擬似乱数列と、長周期の主乱数生成器から出力される擬似乱数列とのXOR(またはXNOR)を取ることで、新たな擬似乱数列を生成する。
長周期の擬似乱数生成器は、一般的には生成した擬似乱数列の全てではなく一部がデータの書込み等に使用されるため、乱数の検定対象に対して全く独立した擬似乱数列を生成できる。ただし、生成された擬似乱数列の一部しか使われないことは、シードによっては擬似乱数列によって生成される部分数列のパターンの出現確率に偏りを生じさせる可能性があることを示唆している。簡単な例として、たとえばCRC−32方式の擬似乱数生成器では最大31ビット“0”が連続する可能性があるが、このような擬似乱数列は、8ビット以上の“0”が連続するケースを嫌う用途では不適切な擬似乱数列である。
一方、短周期の擬似乱数生成器が生成した擬似乱数列は、その大部分(たとえば1/2以上の部分)がたとえば4回以上繰り返して使用される。このため、短周期の擬似乱数生成器を用いた場合には、同じ擬似乱数列が複数回出現する反面、擬似乱数列によって生成される部分数列のパターンの出現確率がほぼ均一になる。また、生成される擬似乱数列の周期が短いため、連続する“0”の長さも長周期の擬似乱数生成器が生成する擬似乱数列の周期に比べて短くなる。さらに、短周期の擬似乱数生成器は回路規模が長周期の擬似乱数生成器よりも小さい。短周期の擬似乱数生成器の回路規模は、シフトレジスタ(LFSR)のビット数をcとすると、そのcに比例した規模となる(ランダウ記法を用いるとO(c)となる)。
そこで第9実施形態では、短周期の副乱数生成器から出力される擬似乱数列と、長周期の主乱数生成器から出力される擬似乱数列とのXOR(またはXNOR)を取ることで、新たな擬似乱数列を生成する。たとえばCRC−32方式の擬似乱数生成器が生成する擬似乱数列の周期は232−1であり、13ビットLFSRが生成する擬似乱数列の周期が213−1であるので、両者が完全に同期することはなく、弱い同期が発生する可能性も低い。そのため、短周期の副乱数生成器から出力される擬似乱数列と、長周期の主乱数生成器から出力される擬似乱数列とのXOR(またはXNOR)を取ることで、検定結果の良い擬似乱数列を生成することが可能となる。
また、通常、シードテーブルのサイズ制約等によりシード数を十分に確保できない場合には、シード値の撹拌やビットアサインの回転などを行うことで必要な数のシードが確保されるが、第9実施形態では、これらの操作として擬似乱数生成器ごとに別々の方式を採用する。たとえば長周期の主乱数生成器では、シード値を与えたあとで8サイクルの空回し処理を実行する。一方、短周期の副乱数生成器では、ビットアサインの回転を8ビットアラインで実行する。このように、撹拌処理についても擬似乱数生成器ごとに別々の処理を独立して行うことで、弱い同期が発生した場合に同期をキャンセルすることができ、その結果、検定結果の良い擬似乱数列を生成することが可能となる。なお、長周期の主乱数生成器のシードには、短周期の擬似乱数生成器で生成された擬似乱数列が用いられてもよい。その場合、主乱数生成器のシード作成に用いた短周期の擬似乱数生成器が、短周期の副乱数生成器として使い回されてもよい。
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
第10実施形態
つぎに、第10実施形態にかかるランダマイザおよび半導体記憶装置について、以下に詳細に説明する。第10実施形態では、長周期の主乱数生成器から出力される擬似乱数列と、同じく長周期の副乱数生成器から出力される擬似乱数列とのXOR(またはXNOR)をとることで、新たな擬似乱数列を生成する。ただし、主乱数生成器と副乱数生成器とは、互いに異なる周期を持つことが望ましい。
第10実施形態では、主乱数生成器として遅れフィボナッチ数列方式の擬似乱数生成器を用い、副乱数生成器としてCRC−32方式の擬似乱数生成器を用いた場合を例示する。主乱数生成器および副乱数生成器それぞれに用いるシードは、上述した実施形態で例示したように、これら2つの長周期の擬似乱数生成器とは別の短周期の擬似乱数生成器を用いて生成されてもよい。また、主乱数生成器および副乱数生成器が互いに異なる乱数系列であるため、これら2つの擬似乱数生成器に同じシードを入力してもよい。さらに、これら2つの擬似乱数生成器とは別の短周期の擬似乱数生成器に同じシードを与え、これにより生成された2系列の擬似乱数列を主乱数生成器および副乱数生成器にそれぞれシードとして入力してもよい。さらにまた、ハードウエア量の節減のため、別の短周期の擬似乱数生成器を主乱数生成器および副乱数生成器で共用し、短周期の擬似乱数生成器に入力するシードを変化させることで、主乱数生成器および副乱数生成器にそれぞれシードとして与える2系列の擬似乱数列を発生させてもよい。
また、上述したように、長周期の擬似乱数生成器は、一般的には生成した擬似乱数列の全てではなく一部がデータの書込み等に使用されるため、乱数の検定対象に対して全く独立した擬似乱数列を生成できる。ただし、生成された擬似乱数列の一部しか使われないことは、シードによっては擬似乱数列によって生成される部分数列のパターンの出現確率に偏りを生じさせる可能性があることを示唆している。
そこで第10実施形態では、2つの長周期の擬似乱数生成器から出力された擬似乱数列のXOR(またはXNOR)を取ることで、新たな擬似乱数列を生成する。たとえば遅れフィボナッチ数列の周期が255−1であり、CRC−32の周期が232−1であるので、両者が完全に同期することはなく、弱い同期が発生する可能性も低い。また、互いの周期が独立しているので、全体の周期はおよそ約287(≒(255−1)×(232−1))となる。
また、通常、シードテーブルのサイズ制約等によりシード数を十分に確保できない場合には、シード値の撹拌やビットアサインの回転などを行うことで必要な数のシードが確保されるが、第10実施形態では、これらの操作として擬似乱数生成器ごとに別々の方式を採用する。たとえば長周期の主乱数生成器では、シード値を与えたあとで8サイクルの空回し処理を実行する。さらに、長周期の副乱数生成器では、副乱数生成器の出力に対して、ビット並びの入れ替えを行なったものを主乱数生成器のシードとして用いてもよい。このビットの入れ替え方法では、たとえば、副乱数生成器が1サイクルで出力する8ビットが以下のルールで入れ替えられて、主乱数生成器のシードの一部として用いられる。なお、以下で例示するルールでは、左側が副乱数生成器の出力ビットの並び(ビット#0→#1→#2→#3→#4→#5→#6→#7の順)を示し、右側が入れ替え後のビットの並び、すなわち主乱数生成器として用いられるシードのビット並び(#6→#7→#4→#5→#2→#3→#0→#1の順)を示している。
(入れ替え前 → 入れ替え後)
ビット#0 → ビット#6
ビット#1 → ビット#7
ビット#2 → ビット#4
ビット#3 → ビット#5
ビット#4 → ビット#2
ビット#5 → ビット#3
ビット#6 → ビット#0
ビット#7 → ビット#1
上記に例示したルールを適用した場合、副乱数生成器から1サイクルで出力される“00101011”という8ビットの出力ビットは、“11101000”に置き換えられる。なお、この例では、副乱数生成器の1サイクルの出力の内部でビットの入れ替えを実行したが、主乱数生成器のシードのビット数である55ビットの内部で入れ替えを実行するなど、種々変形することが可能である。
このように、撹拌処理についても擬似乱数生成器ごとに別々の処理を独立して行うことで、弱い同期が発生した場合に同期をキャンセルすることができ、その結果、検定結果の良い擬似乱数列を生成することが可能となる。
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
第11実施形態
つぎに、第11実施形態にかかるランダマイザおよび半導体記憶装置について、以下に詳細に説明する。第11実施形態では、短周期の主乱数生成器から出力される擬似乱数列と、同じく短周期の副乱数生成器から出力される擬似乱数列とのXOR(またはXNOR)をとることで、新たな擬似乱数列を生成する。ただし、主乱数生成器と副乱数生成器とは、互いに異なる周期を持つことが望ましい。なお、以下の説明では、短周期の主乱数生成器としてM23系列を採用し、短周期の副乱数生成器としてM17系列を採用した場合を例示する。
上述したように、短周期の擬似乱数生成器が生成した擬似乱数列は、その大部分(たとえば1/2以上の部分)がたとえば4回以上繰り返して使用される。このため、短周期の擬似乱数生成器を用いた場合には、同じ擬似乱数列が複数回出現する反面、擬似乱数列によって生成される部分数列のパターンの出現確率がほぼ均一になる。また、生成される擬似乱数列の周期が短いため、連続する“0”の長さも長周期の擬似乱数生成器が生成する擬似乱数列の周期に比べて短くなる。さらに、短周期の擬似乱数生成器は回路規模が長周期の擬似乱数生成器よりも小さい。短周期の擬似乱数生成器の回路規模は、シフトレジスタ(LFSR)のビット数をcとすると、そのcに比例した規模となる(ランダウ記法を用いるとO(c)となる)。
そこで第11実施形態のように、短周期の擬似乱数生成器を2つ使用する場合、それぞれの擬似乱数生成器に用いるシフトレジスタの長さをK1およびK2とすると、生成される擬似乱数列の周期は、(2K1−1)×(2K2−1)=2(K1+K2)−2K1−2K2+1となり、その回路規模は、O(K1)+O(K2)=O(K1+K2)(ただし、O(K1)≒O(K2))となる。これらは、K1+K2のシフトレジスタ長をもつ短周期の擬似乱数生成器の周期2(K1+K2)、および、回路規模O(K1+K2)と比較すると、回路規模についてはほぼ同等と見なすことができ、また、周期についても、(2K1+2K2)程度短くなっているものの、ほぼ同等と見なすことができる。
以上のことから、2つ以上の短周期の擬似乱数生成器を組み合わせた場合、それぞれのシフトレジスタ長の合計と等しいシフトレジスタ長をもつ単一の擬似乱数生成器(LFSR)と比較して、回路規模が同等であり、周期がやや短いランダマイザおよび半導体記憶装置を実現することができる。また、2つ以上の短周期の擬似乱数生成器を組み合わせる構成とすることで、組み合わせる擬似乱数生成器の選択によって、生成される擬似乱数列の特性(検定結果等)を調整することが可能となるため、所望の乱数性の擬似乱数列を得るための設計自由度を高めることが可能となる。
また、通常、シードテーブルのサイズ制約等によりシード数を十分に確保できない場合には、シード値の撹拌やビットアサインの回転などを行うことで必要な数のシードが確保されるが、第11実施形態では、これらの操作として擬似乱数生成器ごとに別々の方式を採用する。たとえば短周期の主乱数生成器では、シード値を与えたあとで8サイクルの空回し処理を実行する。一方、短周期の副乱数生成器では、ビットアサインの回転を8ビットアラインで実行する。このように、撹拌処理についても擬似乱数生成器ごとに別々の処理を独立して行うことで、弱い同期が発生した場合に同期をキャンセルすることができ、その結果、検定結果の良い擬似乱数列を生成することが可能となる。なお、短周期の主乱数生成器のシードには、短周期の擬似乱数生成器で生成された擬似乱数列が用いられてもよい。その場合、主乱数生成器のシード作成に用いた短周期の擬似乱数生成器が、短周期の副乱数生成器として使い回されてもよい。
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
第12実施形態
つづいて、第12実施形態にかかるランダマイザおよび半導体記憶装置について、以下に図面を参照して詳細に説明する。なお、第12実施形態では、不揮発性メモリ(たとえばNANDメモリ)のページ間方向とカラム間方向との両方でデータをランダマイズする場合について、例を挙げて説明する。
不揮発性メモリの大容量化や高速化に伴い、メモリに格納するデータに対してランダマイズ処理を行なう機能に対しても、回路規模増大の抑制と同時に乱数性能の向上が求められている。一般的に、カラム間方向のランダマイズに適当なM系列などから生成された擬似乱数列を利用した場合、ページ間方向の乱数性能を十分なものとすることが課題となる。
ページ間方向の乱数性能を獲得するための手法としては、ページアドレス毎にM系列から生成される擬似乱数列を所定ビット(Nビット)シフトさせる方法が考えられる。しかしながら、この手法では、NANDメモリが大容量化するにつれて、シフト量Nのバリエーションを増やす必要があるため、バリエーションの増加に比例してシフト処理を行なう回路が増大してしまう。
また、ページ間方向の乱数性能を獲得するための他の手法としては、M系列に設定するシードをページ間方向で全て異なるようにすることも考えられる。しかしながら、この方法では、メモリが大容量化するにつれてページ数が増加した場合、シードが登録されたシードテーブルのサイズが比例的に増大する。そのため、上記手法と同様に、回路規模が増大してしまう。
そこで第12実施形態では、乱数性能の確保と回路規模の抑制とを両立させることが可能なランダマイザおよび半導体記憶装置について、例を挙げて説明する。以下で説明する第12実施形態によれば、不揮発性メモリに格納するデータを書き換える撹拌機能についても、簡単な回路構成で実現することができる。
第12実施形態では、回路規模の増大を抑制しつつ所望の乱数性能を実現するため、ランダマイザから生成される擬似乱数列に対して、シフト操作やビット回転操作を実行する。さらに、不揮発性メモリにおける個々のメモリセルに対して同一パターンのデータが繰り返し書き込まれることを防止する撹拌機能を実現するため、ランダマイザから出力されるデータ列に対して、多値度のページ単位のビット反転を実行する。
図33は、第12実施形態にかかる半導体記憶装置の概略構成例を示すブロック図である。図33に示すように、半導体記憶装置30は、図1に示した半導体記憶装置10と同様の構成において、図1のランダマイザ107がランダマイザ307に置き換えられている。また、半導体記憶装置30は、設定回路301をさらに備えている。
設定回路301は、たとえばホストからの書込み要求/読出し要求が入力されたコントローラ101からの指示に従い、指定されたページ番号、フレームオフセット番号および撹拌値を特定し、これらの値をランダマイザ307へ入力する。
図34に、第12実施形態にかかるランダマイザの概略構成例を示す。図34に示すように、ランダマイザ307は、シードテーブル311と、シード選択回路312と、シードシフト回路313と、擬似乱数列生成回路314と、出力ビット回転回路315と、出力ビット反転回路316と、XOR回路317とを備える。この構成において、擬似乱数列生成回路314は、上述した実施形態における2つまたはそれ以上の擬似乱数生成器で構成されている。
シードテーブル311は、擬似乱数列を生成するための複数のシードの値が格納されている。第12実施形態では、シードテーブル311にたとえば67個のシードが登録されている。各シードには、インデックスi=0〜66までの番号が付与されている。また、各シードは、M系列の次数に対応するビット数(たとえば20ビット)の乱数列で構成されている。
シード選択回路312は、設定回路301から入力されたフレームオフセット番号およびページ番号に基づいて使用するシードのインデックス(以下、インデックス番号またはシードインデックス番号ともいう)iを特定し、このインデックスiで特定されるシードをシードテーブル311から取得する。また、シード選択回路312は、取得したシードをシードシフト回路313へ入力する。
シードシフト回路313は、設定回路301から入力されたページ番号に基づいて、シード選択回路312から入力されたシードをシフトし、シフト後のシードを擬似乱数生成回路314に入力する。
擬似乱数列生成回路314は、たとえば上述した実施形態のいずれかのように、入力されたシードを用いて擬似乱数列を生成し、生成した擬似乱数列を出力ビット回転回路315へ入力する。なお、擬似乱数列生成回路314には、上述した実施形態のうちのいずれの構成が適用されてもよい。
出力ビット回転回路315は、設定回路301から入力されたページ番号に基づいて、擬似乱数列生成回路314で生成された擬似乱数列をシフトし、シフト後の擬似乱数列を出力ビット反転回路316へ入力する。
出力ビット反転回路316は、設定回路301から入力されたページ番号および撹拌値に基づいて、出力ビット回転回路315から入力された擬似乱数列のビット値を反転/非反転する撹拌処理を実行し、撹拌処理後の擬似乱数列をXOR回路317へ入力する。
XOR回路317は、不揮発性メモリ120に書き込むデータまたは不揮発性メモリ120から読み出したデータ(以下、共に入力データ列とする)と、出力ビット反転回路316から入力された擬似乱数列とのXORをとることによって、対象のデータに対するスクランブル/デスクランブル処理を実行する。
つづいて、シード選択回路312のより具体的な動作例について、図35を用いて詳細に説明する。図35は、第12実施形態にかかるシード選択回路の動作例を説明するための図であり、不揮発性メモリに書き込むデータのフレームサイズが512バイト単位のときのシード選択回路の動作例を説明するための図である。本説明では、フレームサイズが512バイトの場合、1ページあたりには32個のフレームが収納されるとする。したがって、本説明では、フレームオフセット番号が0から31の値をとることとなる。なお、図35において、横方向をフレームオフセット番号とし、縦方向をページ番号としたテーブルにおける各枠内に表記された数字は、シードのインデックス番号を表している。
擬似乱数列生成時に選択されるシードのインデックス番号iは、シードテーブル311のサイズまたは陽に設定されたシードの個数を素数pとし、シードのビット数をfとした場合、ページ番号およびフレームオフセット番号を入力として、以下の式(4)に従って決定することができる(図35参照)。なお、式(4)において、フレーム番号=ページ番号×f+フレームオフセット番号である。また、素数pはたとえば67であり、シードのビット数fはたとえば32ビットである。
上記式(4)を用いることにより、ページ番号およびフレームオフセット番号を入力としてシードインデックス番号iを即座に求めることが可能である。このことは、上記式(4)を用いたシード選択方法が、NANDメモリへのシーケンシャル・アクセスはもとより、ランダム・アクセスに対応した実装にも適した方法であることを示唆している。
なお、本説明において、使用するシードの個数を67個としているのは、シードの個数はカラム間方向のフレーム数(本説明では32個)よりも大きな素数とすることが望ましいためである。なお、シードの個数として素数を選択したのは、式(4)で素数の性質を利用しているためである。
図35に示されているように、素数の性質を利用することで、67ページ毎に、ページ間方向(縦方向)のシードの配列においては0から66のシードのインデックス番号iが一回ずつ出現し、隣接するページ間においてはインデックス番号iの並びが異なった組み合わせとなるように構成することができる。
たとえばページ番号が0〜66の範囲では、フレーム毎(横方向)にシードテーブルのインデックス番号iが1ずつインクリメントされているが、ページ番号が67〜133の範囲では、フレーム毎(横方向)にシードテーブルのインデックス番号iが2ずつインクリメントされている。さらに、ページ番号が134以上(たとえば200まで)の範囲では、フレーム毎(横方向)にシードテーブルのインデックス番号iが3ずつインクリメントされている。
図35に示すような選択方法とすることで、カラム間方向(横方向)の乱数性能を確保しつつ、ページ間方向(縦方向)の乱数性能を向上することが可能となる。なお、このような性質は、最大で67×66ページまで利用することができる。
また、図36〜図41を用いて、シード選択回路312によるシード選択方法をより詳細に説明する。図36〜図41は、フレームサイズが512バイト以上である場合のシード選択回路によるシード選択方法の一例を説明するための図であり、図36は、フレームサイズが512バイトである場合を示し、図37は、フレームサイズが1キロバイトである場合を示し、図38は、フレームサイズが2キロバイトである場合を示し、図39は、フレームサイズが4キロバイトである場合を示し、図40は、フレームサイズが8キロバイトである場合を示し、図41は、フレームサイズが16キロバイトである場合を示している。なお、図36〜図41においても、図35と同様に、横方向をフレームオフセット番号とし、縦方向をページ番号としたテーブルにおける各枠内に表記された数字は、インデックス番号を表している。
図36〜図41に示すように、第12実施形態では、フレームサイズが2倍になる毎に、シードインデックスiの間隔が2倍になっている。また、フレームサイズが大きい場合には、複数のシード間をまたがってM系列の擬似乱数生成器(擬似乱数列生成回路314)から生成される擬似乱数列が使用される。このように構成することで、M系列から生成される擬似乱数列において不使用となる部分が少なくなるため、異なるフレームサイズに対して共通にM系列の次数を小さく設計することが可能となる。また、フレームサイズに対して縦方向のシードの並び方が変化しないため、乱数性能がフレームサイズに対して影響を受け難いというメリットもある。
つぎに、シードシフト回路313のより具体的な動作例を、図面を参照して詳細に説明する。図42は、第12実施形態にかかるシードシフト回路の動作例を説明するための図である。なお、図42において、横方向をカラム(バイト)とし、縦方向をページ番号としたテーブルにおける各枠内に表記された数字は、シードテーブルから選択されたシードによって生成される擬似乱数列のバイトを表している。
図42に示すように、シードシフト回路313は、シード選択回路312から入力されたシードに対し、その値をバイト単位でシフトさせる操作を加える。たとえばページ番号が0〜67×8−1までの範囲では、設定されているシフト量が0であるため、シードに対するシフト操作は行なわれず、シード選択回路312から入力されたシードがそのまま使用される。一方、ページ番号が67×8〜67×8×2−1までの範囲では、設定されているシフト量が1であるため、シードの値がバイト単位で1つシフトされ、このシフト後のシードが擬似乱数列生成回路314に入力される。以降、ページ番号がテーブルサイズ(本例では67)の8倍に達する度に、シフト量が1インクリメントされ、そのシフト量に相当するバイト数でシフトされたシードが擬似乱数列生成回路314に入力される。
つぎに、出力ビット回転回路315のより具体的な動作例を、図面を参照して詳細に説明する。図43は、第12実施形態にかかる出力ビット回転回路の動作例を説明するための図である。なお、図43において、横方向に配列したページ番号それぞれに対して縦方向に配列したビット(bit0〜bit7)は、擬似乱数列の各ビットに対応しているものとする。
図43(a)に示すように、出力ビット回転回路315は、まず、擬似乱数列生成回路314から入力された擬似乱数列をバイト単位で区切り、これらをページ毎に並べる。つづいて、図43(b)に示すように、ページ番号がシードテーブルのテーブルサイズ(本例では67)の倍数に達する度に、擬似乱数列をバイト単位で1つずつ回転(巡回シフト)させる。たとえばページ番号が0〜66の範囲では、設定されている回転数が0であるため、擬似乱数列はカラム方向に回転されず、そのままの配列を保って出力ビット回転回路315から出力される。一方、ページ番号が67〜133の範囲では、設定されている回転数が1であるため、擬似乱数列がバイト単位で1つ回転され、回転後の擬似乱数列が出力ビット回転回路315から出力される。以降、ページ番号がテーブルサイズ(67)の倍数に達する度に、回転数が1インクリメントされ、その回転数に相当するバイト数で回転された擬似乱数列が出力ビット回転回路315から出力される。
第12実施形態において、所望のカラム方向の乱数性能を実現するためには、シード選択回路312、シードシフト回路313および出力ビット回転回路315の動作の切替わりがページ番号に連動しているとよい。すなわち、シード選択回路312、シードシフト回路313および出力ビット回転回路315のうち少なくとも1つの動作は、シードテーブル311のサイズまたは陽に設定されたシードの個数の整数倍の周期で切り替えられるとよい。具体的には、まず、シード選択回路312によって67ページ毎にシードテーブルに格納されている各シードが一回ずつ選択される。出力ビット回転回路315は、67ページ毎にカラムを1ビットずつずらすことにより、ページ間方向で同じシードが複数回選択されることにより擬似乱数列が連動することを、同一カラム内で実質的に回避する。ただし、出力ビット回転回路315は擬似乱数列の回転を1バイト(8ビット)区切りで行っているため、67ページの周期が8回に達すると、回転後の擬似乱数列の配列が元に戻ってしまう。それを補うため、シードシフト回路313は、67×8ページ毎に擬似乱数列を1バイトシフトさせる。これにより、67×8ページを超えてもページ間方向での擬似乱数列の連動を同一カラム内で実質的に回避できる。その結果、出力される擬似乱数列の乱数性能が低下することを抑制することが可能となる。
また、第12実施形態では、シードテーブル311のサイズと、シードシフト回路313のシフト数のバリエーションと、出力ビット回転回路315の回転数のバリエーションとが、ページ数に対して相乗的に効果を発揮するため、不揮発性メモリ(たとえばNANDメモリ)の大容量化に伴う回路規模の影響を小さくできるというメリットも得られる。
つぎに、出力ビット反転回路316のより具体的な動作例を、図面を参照して詳細に説明する。図44〜図51は、第12実施形態にかかる出力ビット反転回路の動作例を説明するための図である。図44は撹拌値を“0”とした場合を示し、図45は撹拌値を“1”とした場合を示し、図46は撹拌値を“2”とした場合を示し、図47は撹拌値を“3”とした場合を示し、図48は撹拌値を“4”とした場合を示し、図49は撹拌値を“5”とした場合を示し、図50は撹拌値を“6”とした場合を示し、図51は撹拌値を“7”とした場合を示している。なお、図44〜図51において、横方向をフレームオフセット番号とし、縦方向をページ番号としたテーブルにおける各枠は、図35において対応するインデックス番号Iのシードにより生成された擬似乱数列(ただし、シフト処理および回転処理後)に対応している。
図44〜図51では、不揮発性メモリのメモリセルにおける多値度が3ビットである場合を示している。メモリセルの多値度が3ビットである場合、撹拌値も3ビットで表すとよい。その場合、たとえば3ページを1つの区切りとして、ページ単位で擬似乱数列をビット反転するように構成することができる。図44〜図51に示す例では、各区切りに含まれる3ページのうちの最初のページを3ビットの撹拌値における最右のビットに対応させ、最後のページを撹拌値の最左のビットに対応させ、真ん中のページを撹拌値の真ん中のビットに対応させ、それぞれのページに対応する撹拌値のビットが“0”であればそのページの擬似乱数列を非反転とし、“1”であれば反転するというように構成されている。
なお、第12実施形態における撹拌機能とは、不揮発性メモリに格納するデータを書き換える際に個々のメモリセルの浮遊ゲートの電圧レベルが書き換え前後で同一となることを防ぐ機能を意味している。ここで図52に、撹拌値と浮遊ゲートの電圧レベルの入れ替わりとの関係例を示す。また、図53に、撹拌値を“0”から“7”に切り替えた際の浮遊ゲートの電圧レベルの入れ替わりを示す。図52および図53から分かるように、撹拌値を切り替えることで、浮遊ゲートの電圧レベルと各電圧レベルが対応するビット値とがスクランブルされ、それにより、不揮発性メモリにおける個々のメモリセルに同一パターンのデータが繰り返し書き込まれることを防止することが可能となる。
また、第12実施形態では、メモリセルにおける多値度が“3”であると仮定して3ページ毎に反転/非反転のパターンを繰り返す場合を例示したが、たとえば多値度が“2”の場合には2ページ毎に、多値度が“4”の場合には4ページ毎に、反転/非反転のパターンを繰り返すように構成するとよい。すなわち、メモリセルにおける多値度をM(Mは自然数)とした場合、Mページ毎に反転/非反転のパターンを繰り返すように構成するとよい。
出力ビット反転回路316で撹拌された擬似乱数列は、XOR回路(スクランブル回路)317に入力される。XOR回路317は、上述したように、不揮発性メモリ120に対して書込み/読出しをする入力データ列と、出力ビット反転回路316から入力された擬似乱数列とのXORをとることによって、対象のデータに対するスクランブル/デスクランブル処理を実行する。
以上のように構成および動作することで、第12実施形態によれば、回路規模の増大を抑制しつつ、ページ間方向とカラム間方向との両方で所望の乱数性能を実現することが可能となる。なお、撹拌機能が不要な場合には、出力ビット反転回路316を削除することも可能である。
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
第13実施形態
第12実施形態では、出力ビット反転回路316が、出力ビット回転回路315の出力とXOR回路317の入力との間に配置されて、入力データ列とのXORをとる前の擬似乱数列を撹拌するように構成されていたが、この構成に限られるものではない。
たとえば図54に示すように、出力ビット反転回路316をXOR回路317の出力側に配置することも可能である。その場合、出力ビット反転回路316は、入力データ列とのXORをとった後のデータ列を撹拌する。
また、たとえば図55に示すように、出力ビット反転回路316をXOR回路317の入力側に配置することも可能である。その場合、出力ビット反転回路316は、出力ビット回転回路315から出力された擬似乱数列とのXORをとる前の入力データ列を撹拌する。
さらにまた、出力ビット回転回路315の配置も、第12実施形態で例示した箇所(図34参照)に限られない。たとえば図56に示すように、出力ビット回転回路315をXOR回路317の出力側に配置することも可能である。その場合、出力ビット回転回路315は、XOR回路317から出力されたデータ列に対して上述した回転処理を実行するように構成される。ただし、出力ビット回転回路315がXOR回路317の出力側に配置されている場合、不揮発性メモリに書き込まれる入力データ列に対して実行される回転処理と、不揮発性メモリから読み出した入力データ列に対して実行される回転処理とで、回転の方向を逆にする必要がある。
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
第14実施形態
第14実施形態では、上述の実施形態において例示したランダマイザの検定結果について、いくつかの比較例を挙げつつ、図面を用いて詳細に説明する。
以下の説明においては、CRC−32方式の乱数生成器(第1例)、第1実施形態において図4に例示した線形帰還シフトレジスタ1(第2例)、図57に示す複数のM系列を組み合わせて構成された擬似乱数生成器(第3例)、および、フィボナッチ数列を用いた乱数生成器(第4例)の4タイプの擬似乱数生成器を比較例として挙げる。なお、図57に示すように、第3例として挙げる擬似乱数生成器5は、組み合わせる複数のM系列の擬似乱数生成器として、M13系列の擬似乱数生成器11と、M17系列の擬似乱数生成器12と、M19系列の擬似乱数生成器13と、M23系列の擬似乱数生成器14とを備え、また、各擬似乱数生成器11〜14から出力された擬似乱数列から所定ビット(本説明では8ビット)の擬似乱数列を生成する乱数出力部15とを備える。
一方、上述した実施形態にかかるランダマイザ、すなわち、互いに性質の異なる擬似乱数生成器から出力された擬似乱数列のXORをとることで新たな擬似乱数列を生成するランダマイザとしては、第2例として挙げた線形帰還シフトレジスタ1から出力された擬似乱数列(8ビット)と、第3例として挙げた複数のM系列を組み合わせて構成された擬似乱数生成器5から出力された擬似乱数列(8ビット)との出力のXORをとる擬似乱数生成器を例示する。
図58は、米国商務省標準技術局で既定されている統計的仮説検定(いわゆるNIST検定)を用いて検定した第1の結果(合格率)を示すグラフである。また、図59は、同検定を用いて検定した第2の結果(P値)を示すグラフである。なお、NIST検定では、3D構造NAND型フラッシュメモリを対象とし、その記憶素子の積層数(BiCSの層数)が64層、128層、256層および512層である場合を想定した。また、NIST検定では、たとえば積層数が64層の場合では、64層に相当する擬似乱数列の全体を検定対象とする場合(64層分割なし)と、64層に相当する擬似乱数列を64分割した各空間を検定対象とした場合(64層64分割)とのそれぞれについて検定を実行した。同様に、積層数が128層の場合、256層の場合、および、512層の場合についても、それぞれ擬似乱数列を分割しない場合と積層数で分割した場合とのそれぞれについて検定を実行した。
図58および図59において、“黒塗りの丸形”は第1例の検定結果を示し、“黒塗りの四角形”は第2例の検定結果を示し、“黒塗りの三角形”は第3例の検定結果を示し、“白抜きの四角形”は第4例の検定結果を示し、“白抜きの丸形”は上述した実施形態にかかるランダマイザの検定結果を示している。
図58から分かるように、4つの比較例のうちでは、第4例として挙げたフィボナッチ数列を用いた擬似乱数生成器により生成された擬似乱数列が最も良い乱数性を示している。一方、“白抜きの丸形”で示された上記実施形態にかかるランダマイザにより生成された擬似乱数列は、組み合わせられた元の擬似乱数生成器、すなわち第2例の擬似乱数生成器および第3例の擬似乱数生成器それぞれで生成された擬似乱数列よりもよい乱数性を示している。これは、上述した実施形態のように、互いに性質の異なる擬似乱数生成器から出力された擬似乱数列のXORをとることで、より乱数性に優れた新たな擬似乱数列が生成されることを意味している。また、互いに性質の異なる擬似乱数生成器から出力された擬似乱数列のXORをとることでより乱数性に優れた新たな擬似乱数列が生成されることは、図59に示すP値の変化からも明らかな効果である。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。