(57)【要約】【課題】データに対する信頼性を高めること。【解決手段】実施形態にかかるランダマイザは、複数の擬似乱数生成器１３１〜１３Ｎと、複数の擬似乱数生成器１３１〜１３Ｎのうち少なくとも２つの擬似乱数生成器で生成された少なくとも２つの擬似乱数列を演算することで新たな擬似乱数列を生成するＸＯＲ回路１５０とを備える。【選択図】図１１
2018045501.tif 000002
【特許請求の範囲】
【請求項１】
複数の擬似乱数生成器と、
前記複数の擬似乱数生成器のうち少なくとも２つの擬似乱数生成器で生成された少なくとも２つの第１擬似乱数列を演算することで第２擬似乱数列を生成する演算器と、
を備えるランダマイザ。
【請求項２】
前記複数の擬似乱数生成器のうち少なくとも２つは、互いに性質の異なる擬似乱数生成器である請求項１に記載のランダマイザ。
【請求項３】
前記複数の擬似乱数生成器それぞれと前記演算器との接続状態を導通／非導通のいずれかに切り替える複数のスイッチ回路をさらに備える請求項１に記載のランダマイザ。
【請求項４】
前記複数の擬似乱数生成器のうち少なくとも１つは、Ｍ系列の擬似乱数生成器である請求項１に記載のランダマイザ。
【請求項５】
複数のシードが登録されたシードテーブルと、
入力されたシードに基づいて擬似乱数列を生成する擬似乱数生成器と、
前記シードテーブルから前記複数のシードのうちのいずれかを選択して前記擬似乱数生成器に入力するシード選択回路と、
を備え、
前記複数のシードそれぞれは、固定ビットと、可変ビットとで構成され、
前記シードテーブルは、１つの前記固定ビットと、互いに重複しない複数の前記可変ビットとを登録し、
前記シード選択回路は、前記固定ビットと、前記複数の可変ビットのうちのいずれかを前記シードとして選択する
ランダマイザ。
【請求項６】
第１擬似乱数生成器と、
前記第１擬似乱数生成器とは性質の異なる第２擬似乱数生成器と
を備え、
前記第１擬似乱数生成器が生成した第１擬似乱数列が前記第２擬似乱数生成器にシードとして入力されるランダマイザ。
【請求項７】
前記第１擬似乱数生成器の第１周期は、前記第２擬似乱数生成器の第２周期よりも短い周期である請求項６に記載のランダマイザ。
【請求項８】
前記第１擬似乱数生成器の前記第１周期は、乱数性の検定対象のデータサイズ以下であり、
前記第２擬似乱数生成器の前記第２周期は、前記乱数性の検定対象のデータサイズ以上である
請求項７に記載のランダマイザ。
【請求項９】
前記第２擬似乱数生成器は、互いに２段以上の論理演算を経由して到達する要素からの出力を用いて第２擬似乱数列を生成する請求項６に記載のランダマイザ。
【請求項１０】
前記第２擬似乱数生成器は、ｍ＝２、ｎ＞５５、０≦ｉ≦ｎ−１、ｊ＝ｉ＋ｎ（ｉ＜ｎのとき）、ｊ＝ｉ（ｉ＞ｎ＋１のとき）、および、Ｘ（ｊ）＝Ｘ（ｉ）を条件として、１クロックサイクルで８ビットの擬似乱数列を出力するように、以下の漸化式（１）を６４個のフリップフロップを用いて構成した遅れフィボナッチ乱数生成器である
【数１】
2018045501.tif 000007
請求項６に記載のランダマイザ。
【請求項１１】
前記第２擬似乱数生成器は、ｍ＝２、ｎ＞５５、０≦ｉ≦ｎ−１、ｊ＝ｉ＋ｎ（ｉ＜ｎのとき）、ｊ＝ｉ（ｉ＞ｎ＋１のとき）、および、Ｘ（ｊ）＝Ｘ（ｉ）を条件として、１クロックサイクルで１６ビットの擬似乱数列を出力するように、以下の漸化式（２）を８０個のフリップフロップを用いて構成した遅れフィボナッチ乱数生成器である
【数２】
2018045501.tif 000008
請求項６に記載のランダマイザ。
【請求項１２】
前記第２擬似乱数生成器は、ｍ＝２、ｎ＞５５、０≦ｉ≦ｎ−１、ｊ＝ｉ＋ｎ（ｉ＜ｎのとき）、ｊ＝ｉ（ｉ＞ｎ＋１のとき）、および、Ｘ（ｊ）＝Ｘ（ｉ）を条件として、１クロックサイクルで２４ビットの擬似乱数列を出力するように、以下の漸化式（３）を９６個のフリップフロップを用いて構成した遅れフィボナッチ乱数生成器である
【数３】
2018045501.tif 000009
請求項６に記載のランダマイザ。
【請求項１３】
第１擬似乱数生成器と、
前記第１擬似乱数生成器とは性質の異なる第２擬似乱数生成器と、
前記第１擬似乱数生成器が生成した第１擬似乱数列と、前記第２擬似乱数生成器が生成した第２擬似乱数列とを演算して第３擬似乱数列を生成する演算器と
を備えるランダマイザ。
【請求項１４】
前記第１擬似乱数生成器が生成した前記第１擬似乱数列が前記第２擬似乱数生成器にシードとして入力される請求項１３に記載のランダマイザ。
【請求項１５】
１つ以上のシードを格納するシードテーブルと、
前記シードテーブルからシードを選択するシード選択回路と、
前記シード選択回路により選択された前記シードをシフトさせるシードシフト回路と、
前記シフト後のシードに基づいて擬似乱数列を生成する擬似乱数列生成回路と、
前記擬似乱数列生成回路で生成された前記擬似乱数列に対して所定ビット単位の回転操作を実行する出力ビット回転回路と、
を備えるランダマイザ。
【請求項１６】
前記シードテーブルのサイズまたは陽に設定されたシードの個数を素数ｐとし、シードのビット数をｆとし、前記シード選択回路により選択される前記シードのインデックス番号をｉとし、フレーム番号＝ページ番号×ｆ＋フレームオフセット番号とした場合、ページ番号およびフレームオフセット番号を入力として、以下の式（４）を用いて、ユーザデータの書込み先となる不揮発性メモリにおけるページ番号およびフレームオフセット番号と、前記シード選択回路により選択される前記シードとを関連付ける
【数４】
2018045501.tif 000010
請求項１５に記載のランダマイザ。
【請求項１７】
前記シードテーブルのサイズまたは前記陽に設定されたシードの前記個数の整数倍の周期で、前記シードシフト回路および前記出力ビット回転回路のうち少なくとも一方の動作を切り替える請求項１６に記載のランダマイザ。
【請求項１８】
前記出力ビット回転回路は、前記シードシフト回路の動作を切り替える周期の整数倍で、動作を切り替える請求項１７に記載のランダマイザ。
【請求項１９】
前記シードシフト回路は、前記出力ビット回転回路の動作を切り替える周期の整数倍で、動作を切り替える請求項１７に記載のランダマイザ。
【請求項２０】
前記シード選択回路は、フレームサイズが倍になるたびに選択するシードのインデックス間隔を倍にする請求項１６に記載のランダマイザ。
【請求項２１】
前記出力ビット回転回路から出力された前記回転操作後の擬似乱数列のビット値をページ単位で反転／非反転する出力ビット反転回路をさらに備える請求項１５に記載のランダマイザ。
【請求項２２】
前記出力ビット反転回路が前記回転操作後の擬似乱数列を反転／非反転する周期はメモリセルの多値度に関連付けられている請求項２１に記載のランダマイザ。
【請求項２３】
前記出力ビット反転回路から出力された前記反転後の擬似乱数列とユーザデータとの論理演算を実行するスクランブル回路をさらに備える請求項２２に記載のランダマイザ。
【請求項２４】
１つ以上のシードを格納するシードテーブルと、
前記シードテーブルからシードを選択するシード選択回路と、
前記シード選択回路により選択された前記シードをシフトさせるシードシフト回路と、
前記シフト後のシードに基づいて擬似乱数列を生成する擬似乱数列生成回路と、
前記擬似乱数列生成回路で生成された前記擬似乱数列に対して所定ビット単位の回転操作を実行する出力ビット回転回路と、
前記出力ビット回転回路から出力された前記回転操作後の擬似乱数列とユーザデータとの論理演算を実行するスクランブル回路と、
前記スクランブル回路から出力されたデータのビット値をページ単位で反転／非反転する出力ビット反転回路と、
を備えるランダマイザ。
【請求項２５】
１つ以上のシードを格納するシードテーブルと、
前記シードテーブルからシードを選択するシード選択回路と、
前記シード選択回路により選択された前記シードをシフトさせるシードシフト回路と、
前記シフト後のシードに基づいて擬似乱数列を生成する擬似乱数列生成回路と、
前記擬似乱数列生成回路で生成された前記擬似乱数列に対して所定ビット単位の回転操作を実行する出力ビット回転回路と、
ユーザデータのビット値をページ単位で反転／非反転する出力ビット反転回路と、
前記出力ビット回転回路から出力された前記回転操作後の擬似乱数列と前記出力ビット反転回路から出力された前記反転後のユーザデータとの論理演算を実行するスクランブル回路と、
を備えるランダマイザ。
【請求項２６】
１つ以上のシードを格納するシードテーブルと、
前記シードテーブルからシードを選択するシード選択回路と、
前記シード選択回路により選択された前記シードをシフトさせるシードシフト回路と、
前記シフト後のシードに基づいて擬似乱数列を生成する擬似乱数列生成回路と、
ユーザデータのビット値をページ単位で反転／非反転する出力ビット反転回路と、
前記出力ビット反転回路から出力された前記反転後のユーザデータと前記擬似乱数列生成回路から出力された前記擬似乱数列との論理演算を実行するスクランブル回路と、
前記スクランブル回路から出力されたデータに対して所定ビット単位の回転操作を実行する出力ビット回転回路と、
を備えるランダマイザ。
【請求項２７】
複数のメモリセルを備える不揮発性メモリと、
請求項１〜２６のいずれか１項に記載のランダマイザと、
書込み対象のデータを前記ランダマイザから出力された前記擬似乱数列でスクランブルするスクランブル回路と、
前記スクランブル回路から出力された前記スクランブル後のデータを不揮発性メモリへ書き込むメモリインタフェースと
を備える半導体記憶装置。
【請求項２８】
複数のメモリセルを備える不揮発性メモリと、
それぞれ固定ビットと可変ビットとで構成された複数のシードが登録されたシードテーブルと、
入力されたシードに基づいて擬似乱数列を生成する擬似乱数生成器と、
前記シードテーブルから前記複数のシードのうちのいずれかを選択して前記擬似乱数生成器に入力するシード選択回路と、
書込み対象のデータを前記擬似乱数生成器から出力された前記擬似乱数列でスクランブルするスクランブル回路と、
前記スクランブル回路から出力された前記スクランブル後のデータを不揮発性メモリへ書き込むメモリインタフェースと、
前記複数のシードそれぞれのビット列におけるいずれの１つ以上のビットを前記可変ビットとするかを決定するコントローラと、
を備え、
前記シードテーブルは、１つの前記固定ビットと、互いに重複しない複数の前記可変ビットとを登録し、
前記シード選択回路は、前記固定ビットと、前記複数の可変ビットのうちのいずれかを前記シードとして選択する
半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ランダマイザおよび半導体記憶装置に関する。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤメモリという）などの不揮発性メモリでは、メモリセルから読み出されたデータの信頼性を向上させるために、書込み対象のユーザデータが乱数列でスクランブルされた後、メモリセルに書き込まれる。その際、使用する乱数列の特性（乱数性）が悪いと、データ読出時のエラー発生率が高くなり、不揮発性メモリを搭載した製品の信頼性が低下することがある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−２１４６１号公報
【特許文献２】特開２００９−１５７８３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の一つの実施形態は、データに対する信頼性を高めることが可能なランダマイザおよび半導体記憶装置を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の一つの実施形態によれば、ランダマイザは、複数の擬似乱数生成器と、前記複数の擬似乱数生成器のうち少なくとも２つの擬似乱数生成器で生成された少なくとも２つの第１擬似乱数列を演算することで第２擬似乱数列を生成する演算器と、を備える。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１実施形態にかかる半導体記憶装置（メモリシステム）の概略構成例を示すブロック図である。
【図２】図２は、第１実施形態にかかるランダマイザの概略構成例を示すブロック図である。
【図３】図３は、単一の擬似乱数生成器で生成された擬似乱数列の確率分布と、２つの擬似乱数生成器で生成された擬似乱数列の排他的論理和をとった場合の乱数列の確率分布とを示す図である。
【図４】図４は、第１実施形態にかかる擬似乱数生成器に適用可能なＭ系列の線形帰還シフトレジスタの一例を示す図である。
【図５】図５は、図４に示す線形帰還シフトレジスタを用いた乱数生成器の概略構成例を示す図である。
【図６】図６は、第１実施形態にかかるＸＯＲ回路の概略構成例を示す図である。
【図７】図７は、第１実施形態にかかるＸＯＲ回路（スクランブル回路）の概略構成例を示す図である。
【図８】図８は、第１実施形態におけるインデックスとページ番号とフレームオフセット番号との対応関係の一例を示す図である。
【図９】図９は、第１実施形態にかかるシードテーブルの一例を示す図である。
【図１０】図１０は、第１実施形態において入出力ごとにシードを変化させた場合の不揮発性メモリにおける使用領域の一例を示す図である。
【図１１】図１１は、第２実施形態にかかるランダマイザの概略構成例を示すブロック図である。
【図１２】図１２は、第３実施形態にかかるシードテーブルの一例を示す図である。
【図１３】図１３は、第３実施形態においてシードテーブルを格納するメモリ空間に記憶されるデータの一例を示す模式図である。
【図１４】図１４は、第４実施形態において主乱数生成器として使用する６４ビット遅れフィボナッチ乱数生成器の一例を示す図である。
【図１５】図１５は、図１４の６４ビット遅れフィボナッチ乱数生成器で使用するフリップフロップの一例を示す図である。
【図１６】図１６は、図１４の各フリップフロップの入力段に設けられる入力回路の一例を示す図である。
【図１７】図１７は、図１４に示す主乱数生成器におけるＸ０、Ｘ１、Ｘ２、Ｘ７、Ｘ８、Ｘ５６およびＸ６３の入力構成例を示す図である。
【図１８】図１８は、ｎ＝６４の遅れフィボナッチ数列を６４ビット単位で切り出した値のうちの最後の２４ビットを出力するように構成された主乱数生成器の一例を示す図である。
【図１９】図１９は、第４実施形態にかかる７２ビット構成とした主乱数生成器の概略構成例を示す図である。
【図２０】図２０は、第４実施形態にかかる９６ビット構成とした主乱数生成器の概略構成例を示す図である。
【図２１】図２１は、第４実施形態にかかる１６ビット出力で構成された主乱数生成器の例を示す図である。
【図２２】図２２は、図２１に示す主乱数生成器のタイミングチャートを示す図である。
【図２３】図２３は、第４実施形態における８ビット出力の６４ビット遅れフィボナッチ乱数生成器を用いた主乱数生成器の一例を示す図である。
【図２４】図２４は、副乱数生成器で生成された擬似乱数列を図２３に示す主乱数生成器のシードとして使用する際の動作例を示すフローチャートである。
【図２５】図２５は、図２４のステップＳ１１８に示す動作の具体例を示すフローチャートである。
【図２６】図２６は、第５実施形態にかかる遅れフィボナッチ乱数生成器を用いた主乱数生成器の一例を示す図である。
【図２７】図２７は、第７実施形態にかかる主乱数生成器の一例を示す図である。
【図２８】図２８は、副乱数生成器で生成された擬似乱数列を図２７に示す主乱数生成器のシードとして使用する際の動作例を示すフローチャートである。
【図２９】図２９は、図２８のステップＳ５１９に示す動作の具体例を示すフローチャートである。
【図３０】図３０は、第８実施形態にかかる主乱数生成器の一例を示す図である。
【図３１】図３１は、副乱数生成器で生成された擬似乱数列を図３０に示す主乱数生成器のシードとして使用する際の動作例を示すフローチャートである。
【図３２】図３２は、図３１のステップＳ６１９に示す動作の具体例を示すフローチャートである。
【図３３】図３３は、第１２実施形態にかかる半導体記憶装置の概略構成例を示すブロック図である。
【図３４】図３４は、第１２実施形態にかかるランダマイザの概略構成例を示す図である。
【図３５】図３５は、第１２実施形態にかかるシード選択回路の動作例を説明するための図である。
【図３６】図３６は、第１２実施形態においてフレームサイズが５１２バイト以上である場合のシード選択回路によるシード選択方法の一例を説明するための図であり、フレームサイズが５１２バイトである場合を示す図である。
【図３７】図３７は、第１２実施形態においてフレームサイズが５１２バイト以上である場合のシード選択回路によるシード選択方法の一例を説明するための図であり、フレームサイズが１キロバイトである場合を示す図である。
【図３８】図３８は、第１２実施形態においてフレームサイズが５１２バイト以上である場合のシード選択回路によるシード選択方法の一例を説明するための図であり、フレームサイズが２キロバイトである場合を示す図である。
【図３９】図３９は、第１２実施形態においてフレームサイズが５１２バイト以上である場合のシード選択回路によるシード選択方法の一例を説明するための図であり、フレームサイズが４キロバイトである場合を示す図である。
【図４０】図４０は、第１２実施形態においてフレームサイズが５１２バイト以上である場合のシード選択回路によるシード選択方法の一例を説明するための図であり、フレームサイズが８キロバイトである場合を示す図である。
【図４１】図４１は、第１２実施形態においてフレームサイズが５１２バイト以上である場合のシード選択回路によるシード選択方法の一例を説明するための図であり、フレームサイズが１６キロバイトである場合を示す図である。
【図４２】図４２は、第１２実施形態にかかるシードシフト回路の動作例を説明するための図である。
【図４３】図４３は、第１２実施形態にかかる出力ビット回転回路の動作例を説明するための図である。
【図４４】図４４は、第１２実施形態にかかる出力ビット反転回路の動作例を説明するための図であり、撹拌値を０とした場合を示す図である。
【図４５】図４５は、第１２実施形態にかかる出力ビット反転回路の動作例を説明するための図であり、撹拌値を１とした場合を示す図である。
【図４６】図４６は、第１２実施形態にかかる出力ビット反転回路の動作例を説明するための図であり、撹拌値を２とした場合を示す図である。
【図４７】図４７は、第１２実施形態にかかる出力ビット反転回路の動作例を説明するための図であり、撹拌値を３とした場合を示す図である。
【図４８】図４８は、第１２実施形態にかかる出力ビット反転回路の動作例を説明するための図であり、撹拌値を４とした場合を示す図である。
【図４９】図４９は、第１２実施形態にかかる出力ビット反転回路の動作例を説明するための図であり、撹拌値を５とした場合を示す図である。
【図５０】図５０は、第１２実施形態にかかる出力ビット反転回路の動作例を説明するための図であり、撹拌値を６とした場合を示す図である。
【図５１】図５１は、第１２実施形態にかかる出力ビット反転回路の動作例を説明するための図であり、撹拌値を７とした場合を示す図である。
【図５２】図５２は、第１２実施形態における撹拌値と浮遊ゲートの電圧レベルの入れ替わりとの関係例を示す図である。
【図５３】図５３は、第１２実施形態における撹拌値を“０”から“７”に切り替えた際の浮遊ゲートの電圧レベルの入れ替わりを示す図である。
【図５４】図５４は、第１３実施形態にかかるランダマイザの概略構成例を示す図である。
【図５５】図５５は、第１３実施形態にかかる他のランダマイザの概略構成例を示す図である。
【図５６】図５６は、第１３実施形態にかかるさらに他のランダマイザの概略構成例を示す図である。
【図５７】図５７は、第１４実施形態において第３例として例示する擬似乱数生成器の概略構成例を示す図である。
【図５８】図５８は、米国商務省標準技術局で既定されている統計的仮説検定を用いて検定した第１の結果（合格率）を示すグラフである。
【図５９】図５９は、米国商務省標準技術局で既定されている統計的仮説検定を用いて検定した第２の結果（Ｐ値）を示すグラフである。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態に係るランダマイザおよび半導体記憶装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００８】
第１実施形態
ＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤメモリという）などの不揮発性メモリ、特に１つのメモリセルに２ビット以上の多値データを書き込むことが可能な不揮発性メモリでは、メモリセルから読み出されたデータの信頼性を向上させるために、書込み対象のデータ（ユーザデータ。以下、単にデータという）と乱数列との論理演算（たとえば排他的論理和や加算や乗算等）により得られた値がメモリセルに書き込まれる。その際、使用する乱数列の特性（乱数性）が悪いと、データ読出時のエラー発生率が高くなったり、メモリセルの劣化の進行が早くなったり等の不具合が発生し、結果として不揮発性メモリを搭載した製品の信頼性が低下することがある。そのため、不揮発性メモリを備えた半導体記憶装置に搭載されるランダマイザには、乱数性の高い乱数列を発生できることが求められる。
【０００９】
ランダマイザは、一般的には不揮発性メモリに対する書込み／読出しを制御するメモリコントローラに搭載される。近年では、不揮発性メモリに対する書込み／読出しを実行するメモリインタフェース（Ｉ／Ｆ）が高速化されたことに伴い、ランダマイザにも高速動作が要求されている。このような要求に対する一つの解決策としては、ランダマイザを専用のハードウエアで実装することが考えられる。
【００１０】
また、不揮発性メモリに対する読出し動作では、不連続なアドレスからの読み出しが必要になる場合がある。そのような場合に対応するために、メモリコントローラに搭載されたランダマイザは、指定されたアドレスに対応する乱数のシードをテーブルで持っている。この乱数のシードテーブルには、以下のような制約がある。
（１）連続なアドレスパターンでアクセスされた場合であってシードが陽に定義されていないアドレスにアクセスされた場合、シードの種類が少ないと、シードが陽に定義されたアドレスとシードが陽に定義されていないアドレスとの差分を使って乱数列を発生させる必要があるが、そのような場合、アクセスのレイテンシが長くなるため、必要十分な種類のシードが必要である。
（２）そこでシードテーブルには、不揮発性メモリに対するデータ消去の単位である消去ブロックの大きさ（典型的には６ＭＢ（メガバイト））をデータの書き込み単位の大きさ（典型的には４ｋＢ（キロバイト））で割った値と同程度の大きさ、もしくはその値の平方根と同程度の大きさが要求される。
（３）ただし、異なるフレーム間で乱数生成のためのシードが重なると、ランダム検定で相関（異常値）が現れる。シードの重なりを防ぐためには、シードの種類（数）を十分に確保しておく必要があるが、そのような場合、シードテーブルが大きくなる。
（４）また、周期の長い擬似乱数生成器は、長い擬似乱数列を発生させる場合には乱数検定に対して良い検定結果を得られるが、短い擬似乱数列を発生させる場合には同じ乱数列が複数回出現するので検定の種類によっては良い検定結果が得られるとは限らない。
【００１１】
そこで以下の実施形態では、不揮発性メモリから読み出されたデータの信頼性を確保するために、複数の擬似乱数列を論理演算（以下の説明では、明確化のため、論理演算を排他的論理和（ＸＯＲ）とする）することで得られた新たな擬似乱数列を用いて書込み対象のデータをスクランブルする。
【００１２】
ただし、データをスクランブルするための擬似乱数列に規則性があると、その規則性が不揮発性メモリの信頼性を低下させるパターンと一致する場合がある。そのような場合、不揮発性メモリから読み出されたデータの信頼性が低下したり、メモリセルの劣化の進行が早まったり等の不具合が発生する。そこで以下の実施形態では、後述する手法にてスクランブルに使用する擬似乱数列の質を向上させる。
【００１３】
図１は、第１実施形態にかかる半導体記憶装置（メモリシステム）の概略構成例を示すブロック図である。図１に示すように、半導体記憶装置１０は、メモリコントローラ１００と不揮発性メモリ１２０とがメモリバス１１０で接続された構成を備える。
【００１４】
不揮発性メモリ１２０は、データを不揮発に記憶できる半導体メモリであり、たとえばＮＡＮＤ型フラッシュメモリ（以下、単にＮＡＮＤメモリという）である。ＮＡＮＤメモリでは、ページ単位でデータの書き込みおよび読み出しが実行される。また、ＮＡＮＤメモリでは、ブロック単位でデータの消去が実行される。ＮＡＮＤメモリを不揮発性メモリ１２０に用いた場合、そのメモリセルは、１ビットの記憶が可能なシングルレベルセルであってもよいし、２ビット以上の記憶が可能なマルチレベルセルであってもよい。
【００１５】
メモリコントローラ１００は、パーソナルコンピュータや携帯端末などの外部装置であるホストからの要求に応じてメモリに対するデータの書込み／読出しを制御するコントローラである。図１に示すように、メモリコントローラ１００は、コントローラ１０１と、ＲＡＭ（Random Access Memory）１０２と、ホストインタフェース（ホストＩ／Ｆ）１０３と、バッファメモリ１０４と、ＥＣＣ（Error Check and Correction）回路１０５と、メモリインタフェース（メモリＩ／Ｆ）１０６と、ランダマイザ１０７とが内部バス１０８を介して相互に接続された構成を備える。
【００１６】
ホストＩ／Ｆ１０３は、ホストから受信したコマンドやユーザデータ（書込みデータ）などを内部バス１０８に出力する。また、ホストＩ／Ｆ１０３は、不揮発性メモリ１２０から読み出されたユーザデータ（読出しデータ）やコントローラ１０１からの応答などをホストへ送信する。
【００１７】
メモリＩ／Ｆ１０６は、コントローラ１０１からの指示に基づいて、ユーザデータ等を不揮発性メモリ１２０へ書込む処理および不揮発性メモリ１２０から読み出す処理を制御する。
【００１８】
コントローラ１０１は、半導体記憶装置１０を統括的に制御する。コントローラ１０１は、たとえばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）等であってよい。コントローラ１０１は、ホストからホストＩ／Ｆ１０３経由でコマンドを受け付けると、そのコマンドに従って各部を制御する。たとえばコントローラ１０１は、ホストからのコマンドに従い、不揮発性メモリ１２０へのユーザデータの書き込みをメモリＩ／Ｆ１０６へ指示する。また、コントローラ１０１は、ホストからのコマンドに従い、不揮発性メモリ１２０からのユーザデータの読み出しをメモリＩ／Ｆ１０６へ指示する。
【００１９】
ホストＩ／Ｆ１０３がホストから書込みデータとして受信したユーザデータは、一時的にバッファメモリ１０４に蓄積される。コントローラ１０１は、バッファメモリ１０４に蓄積されるユーザデータに対して不揮発性メモリ１２０のメモリ領域を決定し、この決定されたメモリ領域内にユーザデータを書き込むことをメモリＩ／Ｆ１０６に指示する。一方、コントローラ１０１は、ホストからの読出しコマンドを受信した場合、読出しコマンドに含まれるアドレスからのユーザデータの読み出しをメモリＩ／Ｆ１０６へ指示する。これにより不揮発性メモリ１２０から読み出されたユーザデータは、一時的にバッファメモリ１０４に蓄積された後、ホストＩ／Ｆ１０３を介してホストへ送信される。
【００２０】
不揮発性メモリ１２０に対する書込み／読出しの際にユーザデータ等を一時的に蓄積するバッファメモリ１０４には、たとえばＳＲＡＭ（Static Random Access Memory）やＤＲＡＭ（Dynamic Random Access Memory）などの揮発性メモリを用いることができる。
【００２１】
ＥＣＣ回路１０５は、たとえば誤り訂正機能を備えた符号化／復号回路であり、不揮発性メモリ１２０へ書き込むユーザデータをＢＣＨ符号などの誤り訂正符号で符号化し、また、不揮発性メモリ１２０から読み出された符号化されたユーザデータを復号して元のユーザデータを取得する。
【００２２】
ランダマイザ１０７は、不揮発性メモリ１２０の同一ページに書込まれる所定サイズのユーザデータをランダマイズし、ＥＣＣ回路１０５に送る。ＥＣＣ回路１０５はランダマイズされたユーザデータを符号化する。また、不揮発性メモリ１２０の同一ページから読み出された所定サイズのユーザデータは、ＥＣＣ回路１０５により復号された後、ランダマイザ１０７に送られる。ランダマイザ１０７は、ランダマイズされたユーザデータのランダマイズを解除して、元のユーザデータを復元する。
【００２３】
つづいて、図１におけるランダマイザ１０７について、以下に図面を参照して詳細に説明する。図２は、第１実施形態にかかるランダマイザの概略構成例を示すブロック図である。図２に示すように、ランダマイザ１０７は、２つの擬似乱数生成器１０７１および１０７２と、２つのＸＯＲ回路（演算器）１０７３およびＸＯＲ回路（スクランブル回路）１０７４とを備える。
【００２４】
２つの擬似乱数生成器１０７１および１０７２は、それぞれ擬似乱数列を生成可能な乱数生成器であって、互いに性質の異なる擬似乱数生成器である。互いに性質が異なるとは、たとえば擬似乱数生成器１０７１および１０７２がＭ系列の擬似乱数生成器であれば、それぞれの周期が異なるなど、互いに確率性や規則性等が異なることであってよい。また、２つの擬似乱数生成器１０７１および１０７２のうち、一方をＭ系列である擬似乱数生成器とし、他方をＭ系列でない擬似乱数生成器とすることも可能である。
【００２５】
擬似乱数生成器１０７１および１０７２を同じＭ系列の擬似乱数生成器とした場合、シフト加法性により、生成されるデータ系列の乱数性能が元のＭ系列の性能に維持される。そこで図２に示すように、異なる性質の擬似乱数生成器１０７１および１０７２から出力された擬似乱数列の排他的論理和をとることで、Ｍ系列のシフト加法性を崩して新たな乱数列を生成する。それにより、非着目の次元での規則性や乱数の偏りなどの発生を抑制することが可能となる。
【００２６】
図３に、単一の擬似乱数生成器で生成された擬似乱数列の確率分布（累積確率分布：ＣＤＦ）と、２つの擬似乱数生成器で生成された擬似乱数列の排他的論理和をとった場合の乱数列の確率分布（累積確率分布：ＣＤＦ）とを示す。図３に示すように、２つの擬似乱数生成器で生成された擬似乱数列の排他的論理和をとった場合の乱数列の累積確率分布は、単一の擬似乱数生成器で生成された擬似乱数列の累積確率分布よりも急峻な傾きとなっている。これは、２つの擬似乱数生成器で生成された擬似乱数列の排他的論理和をとった場合の方が規則性や乱数の偏りなどが排除されて乱数性の高い乱数列が生成されることを示している。
【００２７】
また、Ｍ系列のシフト加法性を崩して新たな乱数列を生成することで、不揮発性メモリ１２０の仕様（たとえばＮＡＮＤメモリにおけるＮＡＮＤの仕様）の影響を最小限に抑えることが可能となる。それにより、不揮発性メモリ１２０の世代を超えて使用することが可能なランダマイザ１０７を実現することができる。すなわち、不揮発性メモリ１２０の仕様が変更された場合でも、ランダマイザ１０７の設計を変更することなくそのまま使用することが可能である。その結果、不揮発性メモリ１２０を構成するセルに与える負荷を軽減することが可能になるとともに、設計変更によるコスト増加や再設計に要する手間や時間等を抑えることが可能となる。
【００２８】
つづいて図４に、擬似乱数生成器１０７１および／または１０７２に適用可能なＭ系列の線形帰還シフトレジスタ（Linear Feedback Shift Register：ＬＦＳＲ）の一例を示す。図４に示す線形帰還シフトレジスタ１は、Ｍ系列の擬似乱数生成回路であり、具体的にはＣＲＣ−３２で用いられる３２次の多項式を用いた割り算回路である。なお、図４には、３２次の原始多項式で割り算した余りを乱数で表す線形帰還シフトレジスタを例示するが、これに限定されず、ｄ（ｄは２以上の整数）次の原始多項式で割り算した余りを乱数で表す線形帰還シフトレジスタを用いることが可能である。また、図４に示す線形帰還シフトレジスタ１は、一部または全部をハードウエアで構成することも可能であるし、一部または全部をファームウエアで構成することも可能である。
【００２９】
図４に示すように、線形帰還シフトレジスタ１は、Ｘ１〜Ｘ３２の３２個のレジスタ２および１３個のＸＯＲ演算部３を備える。各レジスタ２には、たとえばフリップフロップ回路が用いられる。このような構成を備える線形帰還シフトレジスタ１は、以下の式（１）で表される３２次の原始多項式Ｍ（Ｘ）で割り算した余りを擬似乱数列として出力する。出力される擬似乱数列の周期は、２３２−１となる。
【数１】
2018045501.tif 000003
【００３０】
線形帰還シフトレジスタ１を構成する３２個のレジスタ２は、それぞれ原始多項式Ｍ（Ｘ）の１次の項Ｘ１から３２次の項Ｘ３２に対応している。ＸＯＲ演算部３は、原始多項式Ｍ（Ｘ）の係数が１である項のうち最終段の項Ｘ３２以外の項Ｘ１、Ｘ２、Ｘ４、Ｘ５、Ｘ７、Ｘ８、Ｘ１０、Ｘ１１、Ｘ１２、Ｘ１６、Ｘ２２、Ｘ２３およびＸ２６に対応するレジスタ２の後段にそれぞれ設けられる。各ＸＯＲ演算部３は、３２個のレジスタ２のうちの最終段のレジスタ２のレジスタ出力ｂ７と、そのＸＯＲ演算部３の前段のレジスタ２のレジスタ出力とのＸＯＲをとり、その結果を後段のレジスタ２に出力する。したがって、図４に示す線形帰還シフトレジスタ１では、原始多項式Ｍ（Ｘ）の係数が１である１３個の項Ｘ１、Ｘ２、Ｘ４、Ｘ５、Ｘ７、Ｘ８、Ｘ１０、Ｘ１１、Ｘ１２、Ｘ１６、Ｘ２２、Ｘ２３およびＸ２６それぞれについて、ＸＯＲ演算の結果が１サイクルごとに生成される。
【００３１】
線形帰還シフトレジスタ１には、乱数出力部４が設けられている。乱数出力部４は、線形帰還シフトレジスタ１の帰還ループ上で生成される１３個のＸＯＲ演算結果のうちのｋ（ｋは１以上１２以下の整数）個を擬似乱数列として出力する。図４には、項Ｘ３２に対応する最終段のレジスタ２に加え、原始多項式Ｍ（Ｘ）の項Ｘ３、Ｘ７、Ｘ１１、Ｘ１５、Ｘ１９、Ｘ２３およびＸ２６に対応する７個（ｋ＝７）のレジスタ２から、１サイクルごとに合計８ビットのレジスタ出力ｂ０〜ｂ７を擬似乱数列として取り出す例が示されている。
【００３２】
なお、たとえば項Ｘ１２のＸＯＲ演算結果は、項Ｘ１３→項Ｘ１４→項Ｘ１５→項Ｘ１６という順序で１サイクルごとにシフトされるが、そのシフトによっては項Ｘ１２のＸＯＲ演算結果が変化しない。そのため、項Ｘ１２のＸＯＲ演算結果は、各項Ｘ１３、Ｘ１４、Ｘ１５およびＸ１６のうちのいずれの項からも取り出すことが可能である。
【００３３】
また、図４では、８ビットの擬似乱数列を取り出すために、各項Ｘ３、Ｘ７、Ｘ１１、Ｘ１５、Ｘ１９、Ｘ２３、Ｘ２６およびＸ３２からレジスタ出力ｂ０〜ｂ７を取り出す構成を例示したが、この構成に限られない。たとえばレジスタ出力ｂ７を除く他のレジスタ出力ｂ０〜ｂ６については、１３個の項Ｘ１、Ｘ２、Ｘ４、Ｘ５、Ｘ７、Ｘ８、Ｘ１０、Ｘ１１、Ｘ１２、Ｘ１６、Ｘ２２、Ｘ２３およびＸ２６のうちのどの７個の項が選択されてもよい。
【００３４】
図４に示す線形帰還シフトレジスタ１で擬似乱数列を発生させる場合、各レジスタ２に初期値としてのシードが設定される。各レジスタ２の値は、１サイクルごとに次段に１つずつシフトされる。その際に、各ＸＯＲ演算部３によるＸＯＲ演算結果を擬似乱数として取り出すことで、乱数性の低下を抑えつつ、線形帰還シフトレジスタ１から複数の擬似乱数列を取り出すことが可能である。
【００３５】
また、不揮発性メモリ１２０としてＮＡＮＤメモリを用いた場合、線形帰還シフトレジスタ１の次数ｄは、その線形帰還シフトレジスタ１が発生する擬似乱数列の周期ＹがＮＡＮＤメモリのブロックサイズＳよりも大きくなるように決定されることが好ましい。それにより、ＮＡＮＤメモリの同一ブロックに書き込まれるデータが周期性を持つのを防止できるため、ＮＡＮＤメモリの同一ブロック内におけるセル間干渉を低減することが可能となる。その結果、ＮＡＮＤメモリの信頼性が向上する。
【００３６】
図５に、図４に示す線形帰還シフトレジスタ１を用いた乱数生成器の概略構成例を示す。図５に示す擬似乱数生成器５０は、図２における擬似乱数生成器１０７１または１０７２として使用される乱数生成器である。
【００３７】
図５に示すように、擬似乱数生成器５０は、シードテーブル５１と、レジスタ５２と、シード選択部５３と、シード設定部５４と、巡回制御部５５とを備える。
【００３８】
擬似乱数生成器５０には、たとえばＫ（Ｋは２以上の整数）個のシードテーブル５１が格納されている。各シードテーブル５１には、たとえば３２ビットのシードが６７個登録されている。各シードには、インデックスＩが対応づけられている。インデックスＩは、シードテーブル５１におけるシードを特定するための番号である。なお、各シードテーブル５１に登録されるシードの個数（本例では６７個）は、後述において説明するように、メモリセルの物理的な配置と相関が得にくい素数であることが好ましい。
【００３９】
レジスタ５２には、不揮発性メモリ１２０のページ番号５２Ａおよびフレームオフセット番号５２Ｂが保持される。なお、ページとは、不揮発性メモリ１２０に対する書き込み単位または読み出し単位である。また、フレームとは、ＥＣＣ回路１０５の処理単位（以下、ＥＣＣ単位という）である。
【００４０】
シード選択部５３は、ページ番号５２Ａおよびフレームオフセット番号５２Ｂに基づいてインデックスＩを求め、そのインデックスＩに割り当てられたシードをシードテーブル５１から選択する。
【００４１】
シード設定部５４は、シードテーブル５１から使用するシードを取り出し、取り出したシードを線形帰還シフトレジスタ１に設定する。なお、擬似乱数生成器５０は、Ｋ個の線形帰還シフトレジスタ１を備えることが可能である。その場合、シード設定部５４は、Ｋ個の線形帰還シフトレジスタ１それぞれに対して、シードテーブル５１からシードを取り出し、取り出したシードを設定する。
【００４２】
線形帰還シフトレジスタ１は、設定されたシードに基づいて擬似乱数列を生成し、生成した擬似乱数列を巡回制御部５５に入力する。巡回制御部５５は、線形帰還シフトレジスタ１の値を１サイクルごとに１ビットずつ巡回させる。その結果、巡回制御部５５からは８ビットの擬似乱数列が出力される。なお、図５では、説明の都合上、乱数生成器１０７１の８ビットのレジスタ出力をｂ０ａ〜ｂ７ａとし、乱数生成器１０７２の８ビットのレジスタ出力をｂ０ｂ〜ｂ７ｂとしている。
【００４３】
以上のようにして乱数生成器１０７１および１０７２からそれぞれ出力された８ビットの擬似乱数列は、図２に示すＸＯＲ回路１０７３に入力される。ここで図６に、ＸＯＲ回路１０７３の概略構成例を示す。図６に示すように、ＸＯＲ回路１０７３は、乱数生成器１０７１および１０７２それぞれの８ビットのレジスタ出力ｂ０ａ〜ｂ７ａおよびｂ０ｂ〜ｂ７ｂの組み合わせそれぞれに対応する８個のＸＯＲ演算回路５７を備える。各ＸＯＲ演算回路５７は、入力された２つの擬似乱数列のうち該当する２つのビット値のＸＯＲをとり、その演算結果を出力する。それにより、ＸＯＲ回路１０７３からは、８ビットの擬似乱数列が出力される。なお、説明の都合上、ＸＯＲ回路１０７３の８ビットの出力をｂ０ｃ〜ｂ７ｃとする。
【００４４】
ＸＯＲ回路１０７３から出力された擬似乱数列は、ＸＯＲ回路１０７４に入力される。ＸＯＲ回路１０７４には、不揮発性メモリ１２０に対して書込み／読出しをする８ビットの入力データ列Ｄｉｎ［７：０］も入力される。図７に、ＸＯＲ回路１０７４の概略構成例を示す。図７に示すように、ＸＯＲ回路１０７４は、図６に示すＸＯＲ回路１０７３と同様、ＸＯＲ回路１０７３の８ビットの出力ｂ０ｃ〜ｂ７ｃと入力データ列Ｄｉｎ［７：０］の８ビットとの組み合わせそれぞれに対応する８個のＸＯＲ演算回路５８を備える。このような構成を備えることで、ＸＯＲ回路１０７４は、ＸＯＲ回路１０７３の出力ｂ０ｃ〜ｂ７ｃに基づいて入力データ列Ｄｉｎ［７：０］をランダマイズすることができる。
【００４５】
入力データ列Ｄｉｎ［７：０］のランダマイズを行う場合、入力データ列Ｄｉｎ［７：０］のページ番号５２Ａおよびフレームオフセット番号５２Ｂが、図５に示すレジスタ５２に格納される。そして、そのページ番号５２Ａおよびフレームオフセット番号５２Ｂに基づいて、インデックスＩが算出される。そして、そのインデックスＩをキーとしてシードテーブル５１からシードが選択され、線形帰還シフトレジスタ１に設定される。
【００４６】
ここで、インデックスＩをＩｎｄｅｘ、ページ番号５２Ａをｓｈｉｆｔｎｕｍ、フレームオフセット番号５２Ｂをｏｆｆｓｅｔ、１ページ当たりのＥＣＣ単位数をｆｒａｍｅ＿ｍａｘとすると、これらの関係は、例えば、以下の式（２）で与えることができる。また、図８には、式（２）で特定されるインデックスＩ（Ｉｎｄｅｘ）とページ番号５２Ａ（ｓｈｉｆｔｎｕｍ）とフレームオフセット番号５２Ｂ（ｏｆｆｓｅｔ）との対応関係の一例を示す。なお、図８では、シードの個数を６７個としている。また、ＥＣＣフレームサイズを１ｋＢとし、ページサイズを１６ｋＢとすることで、１ページ内に書き込むことができるＥＣＣフレームの数（１ページ当たりのＥＣＣ単位数（ｆｒａｍｅ＿ｍａｘ））を１６としている。したがって、図８では、フレームオフセット番号５２Ｂは、０〜１５の値を取り得る。
【数２】
2018045501.tif 000004
【００４７】
図８に示すように、たとえばフレームオフセット番号５２Ｂ（ｏｆｆｓｅｔ）を８とし、ページ番号５２Ａ（ｓｈｉｆｔｎｕｍ）を１３とした場合、上記式（２）から、インデックスＩ（Ｉｎｄｅｘ）は１５と求まる。なお、不揮発性メモリ１２０のメモリセルが３ビットのＴＬＣ（Triple Level Cell）である場合には、ＴＬＣでは３ページ単位で１ワードラインに換算されるため、不揮発性メモリ１２０における該当個所は５ワードライン（Ｍｉｄｄｌｅレイヤ）に相当することとなる。
【００４８】
各乱数生成器１０７１および１０７２においてシードテーブル５１から選択されたシードが線形帰還シフトレジスタ１に設定されると、入力データ列Ｄｉｎ［７：０］の入力サイクルに従って線形帰還シフトレジスタ１の値が１ビットずつ巡回され、その時のレジスタ出力ｂ０〜ｂ７が線形帰還シフトレジスタ１からＸＯＲ回路１０７３に入力される。ＸＯＲ回路１０７３では、擬似乱数生成器１０７１における線形帰還シフトレジスタ１のレジスタ出力ｂ０ａ〜ｂ７ａと、擬似乱数生成器１０７２における線形帰還シフトレジスタ１のレジスタ出力ｂ０ｂ〜ｂ７ｂとのＸＯＲがとられることで、Ｍ系列のシフト加法性が崩された新たな擬似乱数列が生成される。生成された擬似乱数列は、ＸＯＲ回路１０７３の出力ｂ０ｃ〜ｂ７ｃを介してＸＯＲ回路１０７４へ入力される。
【００４９】
ＸＯＲ回路１０７４では、入力データ列Ｄｉｎ［７：０］の各ビットとＸＯＲ回路１０７３の出力ｂ０ｃ〜ｂ７ｃとのＸＯＲがとられることで、入力データ列Ｄｉｎ［７：０］がランダマイズされた出力データ列Ｄｏｕｔ［７：０］が生成される。
【００５０】
ここで、ページ番号５２Ａおよびフレームオフセット番号５２Ｂに基づいて線形帰還シフトレジスタ１に与えるシードを変化させることにより、不揮発性メモリ１２０を消去した後に同一のメモリセルに同一データを書き込む場合においても、その同一のメモリセルに書き込まれるデータを別の値に変化させることができる。このため、不揮発性メモリ１２０の同一メモリセルに同一の値が何度も繰り返し書き込まれるのを防止することができ、結果的に、半導体記憶装置１０の信頼性の低下を抑制することができる。
【００５１】
つぎに、第１実施形態にかかるシードテーブルの例について、以下に図面を用いて詳細に説明する。図９は、第１実施形態にかかるシードテーブルの一例を示す図である。なお、図９では、シードテーブル５１に登録された３２ビットのシードが１６進数で表されている。図９に示すように、シードテーブル５１には、３２ビットのシードが６７個登録されている。インデックス順に並べた際のシードのビット数の間隔は、均等であることが好ましい。
【００５２】
各シードには、それぞれのシードを特定するためのインデックスＩが対応づけられている。また、１つのシードテーブル５１に登録するシードの個数（本例では６７）は、素数である。各シードテーブル５１に登録するシードの個数を素数とすることで、不揮発性メモリ１２０におけるページ間、カラム間またはレイヤ間でのデータの再現性の周期をシードの周期と一致し難くすることができる。それにより、不揮発性メモリ１２０における隣接ページ間、隣接カラム間または隣接レイヤ間でのデータの周期を異ならしめることができ、結果的に、ＮＡＮＤメモリのセル間の干渉を抑制することができる。
【００５３】
また、シードのビット数の間隔を均等とすることにより、シードのビット数の最小間隔を大きくすることができる。それにより、線形帰還シフトレジスタ１に与えるシードが変更された場合においても、線形帰還シフトレジスタ１が発生する乱数の周期がシードの変更前後で重なり難くすることができる。
【００５４】
線形帰還シフトレジスタ１に設定可能なシードの個数をＰとすると、この個数Ｐは、線形帰還シフトレジスタ１が発生する擬似乱数列の周期Ｙおよび不揮発性メモリ１２０のブロックサイズＳとを用いて、Ｙ／Ｐ＞Ｓという条件を満たすことが好ましい。たとえば不揮発性メモリ１２０のブロックサイズＳを４Ｍバイト〜６Ｍバイト程度とし、線形帰還シフトレジスタ１に設定可能なシードの個数Ｐを６７とした場合、Ｙ／Ｐ＝（２３２−１）／６７≒８Ｍバイトとなり、Ｙ／Ｐ＞Ｓという条件を満たす。この場合、不揮発性メモリ１２０のブロックの書き込みデータの周期をブロックサイズＳと同等以上に設定することが可能となるため、不揮発性メモリ１２０の同一ブロックでのセル間干渉を抑制することが可能となる。
【００５５】
なお、シードの個数Ｐは、不揮発性メモリ１２０の物理構造および論理構造を特徴付ける数（たとえばワードライン数、ＢｉＣＳ（Bit Cost Scalable）の層数、ＢｉＣＳのＦｉｎｇｅｒを構成する数、１ワードラインに含まれるＥＣＣフレームの数など）と互いに素である（公約数を持たない）数であることが望ましい。素数は、その定義上、公約数を持たないため、ワードライン数、ＢｉＣＳの層数、Ｆｉｎｇｅｒ数などの公倍数になることはなく、シードの個数Ｐに素数を用いることは生成される擬似乱数列の乱数性を高めるという点で有効である。
【００５６】
また、シードの個数Ｐは、ワードライン数と同程度の数であることが望ましい。ここで言う「同程度」とは、１桁程度の差の範囲内であることを意味する。これは、シードの個数Ｐが小さすぎると、同一のシードが多数回使用されることとなり、その結果、同じ並びを持つ擬似乱数列が多数回出現して相関が現れてしまうためである。また、シードの個数Ｐが大きすぎると、シードテーブル５１のサイズが大きくなり、その結果、シードテーブル５１を格納するために多くのメモリ領域が必要となるため、シードの個数Ｐは大きすぎない数であることが好ましい。
【００５７】
さらに、不揮発性メモリ１２０として使用される一般的なＮＡＮＤメモリでは、ＮＡＮＤ構造が２のべき乗である２、４、８、１６、…、１２８の整数倍で特徴付けられる構造となっている。ここで、このようなＮＡＮＤ構造に冗長部を付加すると、２＋１＝３、４＋１＝５、８＋１＝９＝３×３、１６＋１＝１７というように、３や５や１７といった比較的小さな値の素数が出現する。そのため、シードの個数Ｐには、これらのような比較的小さな素数が用いられないようにする必要がある。
【００５８】
これらのような条件を考慮すると、上述において例示した“６７”は、たとえば浮遊ゲートＮＡＮＤの６４ワードライン、８６ワードラインまたは１２８ワードライン、ならびに、ＢｉＣＳの４８層、６４層または１２８層と同程度の大きさの素数であって比較的小さな素数ではないため、シードの個数Ｐとしては好適な数であると言える。
【００５９】
つぎに、入出力ごとにシードを変化させた場合の不揮発性メモリ１２０における使用領域について説明する。図１０は、入出力ごとにシードを変化させた場合の不揮発性メモリにおける使用領域の一例を示す図である。なお、図１０を説明するにあたり、不揮発性メモリ１２０には、線形帰還シフトレジスタ１の周期Ｙ＝２３２−１以下の容量を持つメモリ領域ＭＲが設けられているものとする。このメモリ領域ＭＲには、使用領域と不使用領域があってもよい。また、シードテーブル５１および線形帰還シフトレジスタ１の個数Ｎを４とする。その場合、メモリ領域ＭＲの入出力ＩＯ＃１、ＩＯ＃２、ＩＯ＃３およびＩＯ＃４ごとに、４個のシードテーブル５１を別個に定義することができる。４個のシードテーブル５１は、４個の線形帰還シフトレジスタ１にそれぞれ対応付けられているものとする。
【００６０】
不揮発性メモリ１２０に対する書込み動作では、入出力ＩＯ＃１、ＩＯ＃２、ＩＯ＃３およびＩＯ＃４ごとに別個のシードテーブル５１から４個のシードが選択され、これら４個のシードが４個の線形帰還シフトレジスタ１に与えられる。このような動作により、１サイクル当たり４個の入力データ列Ｄｉｎ［７：０］がランダマイズされる。
【００６１】
また、入出力ＩＯ＃１、ＩＯ＃２、ＩＯ＃３およびＩＯ＃４ごとにシードテーブル５１を別個に定義することで、各入出力ＩＯ＃１、ＩＯ＃２、ＩＯ＃３およびＩＯ＃４に不使用領域がある場合においても、線形帰還シフトレジスタ１の最長周期を効率的に利用することができる。その結果、出力データＤｏｕｔ［７：０］の乱数性を向上させることが可能となる。
【００６２】
以上のように構成および動作することで、第１実施形態によれば、Ｍ系列のシフト加法性を崩して新たな乱数列が生成されるため、非着目の次元での規則性や乱数の偏りなどの発生を抑制することが可能となる。その結果、乱数性の高い擬似乱数列を生成することが可能となり、不揮発性メモリ１２０の同一ブロック内におけるセル間干渉を低減することが可能となるため、ＮＡＮＤメモリの信頼性を向上させることが可能となる。
【００６３】
また、Ｍ系列のシフト加法性を崩して新たな乱数列を生成することで、不揮発性メモリ１２０の仕様（たとえばＮＡＮＤメモリにおけるＮＡＮＤの仕様）の影響を最小限に抑えることが可能となるため、不揮発性メモリ１２０の世代を超えて使用することが可能なランダマイザ１０７を実現することができる。すなわち、不揮発性メモリ１２０の仕様が変更された場合でも、ランダマイザ１０７の設計を変更することなくそのまま使用することが可能である。その結果、不揮発性メモリ１２０を構成するセルに与える負荷を軽減することが可能になるとともに、設計変更によるコスト増加や再設計に要する手間や時間等を抑えることが可能となる。
【００６４】
第２実施形態
上述した第１実施形態では、互いに性質の異なる２つの擬似乱数生成器で生成された２つの擬似乱数列のＸＯＲをとることで、新たな擬似乱数列を生成する場合を例示した。これに対し、第２実施形態では、複数の擬似乱数生成器から１つまたは２つ以上の擬似乱数生成器を適宜選択して擬似乱数列を生成する場合について説明する。
【００６５】
図１１は、第２実施形態にかかるランダマイザの概略構成例を示すブロック図である。図１１に示すように、第２実施形態にかかるランダマイザは、Ｎ個（Ｎは２以上の整数）の擬似乱数生成器１３１〜１３Ｎと、入力された２つ以上の擬似乱数列のＸＯＲをとって新たな擬似乱数列を生成するＸＯＲ回路１５０と、各擬似乱数生成器１３１〜１３ＮとＸＯＲ回路１５０との接続状態を導通／非導通のいずれかに切り替えるスイッチ回路１４１〜１４Ｎとを備える。
【００６６】
各擬似乱数生成器１３１〜１３Ｎは、第１実施形態で例示した擬似乱数生成器１０７１または１０７２と同様であってよい。また、擬似乱数生成器１３１〜１３Ｎは、第１実施形態と同様に、互いに性質の異なる擬似乱数生成器であるとよい。ただし、このことは、同一の性質を持つ擬似乱数生成器が２つ以上含まれることを除外するものではない。
【００６７】
スイッチ回路１４１〜１４Ｎは、たとえばメモリコントローラ１００におけるコントローラ１０１からの制御に従い、擬似乱数生成器１３１〜１３Ｎにおけるいずれか１つまたは２つ以上をＸＯＲ回路１５０に接続する。
【００６８】
ＸＯＲ回路１５０は、スイッチ回路１４１〜１４Ｎのうち２つ以上が導通することで２つ以上の擬似乱数列が入力された場合、これらのＸＯＲをとることで新たな擬似乱数列を生成する。ただし、ＸＯＲ回路１５０は、スイッチ回路１４１〜１４Ｎのうちの１つが導通することで１つの擬似乱数列が入力された場合には、入力された擬似乱数列をそのまま出力する。
【００６９】
以上のように、新たな擬似乱数列を生成するために組み合わせる擬似乱数生成器を適宜選択することが可能な構成とすることで、不揮発性メモリ１２０の仕様に対してより柔軟に対応することが可能となるため、不揮発性メモリ１２０の世代を超えて使用することが可能なランダマイザを実現することができる。
【００７０】
なお、その他の構成、動作および効果は、第１実施形態と同様であるため、ここでは重複する説明を省略する。
【００７１】
第３実施形態
つぎに、第３実施形態にかかるランダマイザおよび半導体記憶装置について、例を挙げて説明する。上述した実施形態では、シードテーブル５１に３２ビットのシードが必要個数（たとえば６７個）登録されている場合を例示した。その場合、シードの個数を６７個とすると、１つのシードテーブル５１を保持するために、３２ビット×６７個の計２１４４ビットのメモリ空間が必要となる。一方で、たとえばＭ系列の擬似乱数生成器では、シード数を増やすことで乱数性能を向上させることができることが知られている。しかしながら、通常では、シード数が増加すれば必要なメモリ空間も増加してしまう。そこで第３実施形態では、シードテーブルの格納に必要となるメモリ空間の増大を抑えつつシード数を増加させることが可能なランダマイザおよび半導体記憶装置について、図面を用いて詳細に説明する。
【００７２】
図１２は、第３実施形態にかかるシードテーブルの一例を示す図である。図１２に示すように、第３実施形態では、１つのシードテーブル１６０に、３２ビットのシード１６１が２５６個（＝２８個）登録されている。
【００７３】
各シード１６１は、３２ビットのうちの一部のビットが可変ビット１６２と定義され、残りのビットが固定ビット１６３および１６４と定義される。本例では、３２ビットのうち、８ビットが可変ビット１６２と定義され、残りの２４ビットが固定ビット１６３および１６４と定義されている。固定ビット１６３および１６４は、１つのシードテーブル１６０に登録された２５６個のシード１６１間で共通のビット値により構成されている。一方、可変ビット１６２は、１つのシードテーブル１６０に登録された２５６個のシード１６１間で同一の値が存在しないビット値で構成されている。
【００７４】
可変ビット１６２を８ビットとした場合、この可変ビット１６２のビット値のパターンは２８通り、すなわち２５６通り存在する。この場合、各シード１６１間の距離（サイクル）が必要サイクル以上離れていることを確保できれば、３２ビット中の一部である８ビットを可変ビット１６２とした場合でも、生成される擬似乱数列の性能が劣化することを抑制できる。
【００７５】
なお、本例では、可変ビット１６２をシード１６１における途中の８ビットとしているが、これに限定されず、たとえばシード１６１の先頭ビットを含む連続する２ビット以上を可変ビットとしてもよいし、末尾ビットを含む連続する２ビット以上を可変ビットとしてもよい。また、本例では、可変ビット１６２を連続する８ビットとしているが、これに限定されず、たとえば１つのシード１６１における不連続の２ビット以上を可変ビットとすることも可能である。
【００７６】
さらに、本例では、可変ビット１６２を８ビットとしているため、１つのシードテーブル１６０に登録されるシード１６１の個数を２５６個（＝２８個）としているが、可変ビット１６２のビット数を増やすことで、より多くのシード１６１を１つのシードテーブル１６０に登録することが可能である。たとえば可変ビット１６２を１０ビットとした場合、２１０個、すなわち１０２４個のシード１６１を１つのシードテーブル１６０に登録することが可能である。
【００７７】
図１３は、第３実施形態においてシードテーブルを格納するメモリ空間に記憶されるデータの一例を示す模式図である。図１３に示すように、第３実施形態では、固定ビット１６３および１６４は、１つのシードテーブル１６０に登録された全てのシード１６１で共通のため、シードテーブル１６０を格納するメモリ空間では重複する固定ビット１６３および１６４が省かれている。したがって、第３実施形態において１つのシードテーブル１６０を格納するのに必要となるメモリ空間は、固定ビット１６３および１６４の２４ビットに、２８通りの可変ビット１６２を格納するための２８×８ビット、すなわち２０４８ビットを加えた、合計２０７２ビットとなる。これは、固定ビット１６３および１６４を設けない場合のシード６４個分に略相当することから、第３実施形態によれば、１つのシードテーブル１６０を約４倍に拡張できることを意味している。
【００７８】
以上のように、シード１６１を構成する３２ビットのうちの一部を可変ビット１６２として、１つのシードテーブル１６０に同一のシード１６１が存在しないように構成することで、シードテーブル１６０の格納に必要となるメモリ空間の増大を抑えつつシード数を増加させることが可能となる。
【００７９】
なお、シード１６１におけるいずれのビットを可変ビットとするかは、メモリコントローラ１００におけるコントローラ１０１などが適宜設定できるとよい。その場合、コントローラ１０１は、たとえばホストからの要求や不揮発性メモリ１２０の仕様等に応じて必要なシードの個数を決定し、少なくとも決定した個数分の重複しないビットパターンを得るのに必要となるビット数を特定し、特定した数のビットをシードのビット列からランダムもしくは所定のルールにしたがって選択するとともに、特定したビット数の重複しないビットパターンを生成する。このように生成されたビットパターンおよび固定ビットとするビットパターンは、シードテーブル１６０を格納する所定のメモリに格納される。なお、可変ビットとする複数のビットパターンおよび固定ビットのビットパターンは、コントローラ１０１またはランダマイザ１０７によって適宜生成されてよい。
【００８０】
また、第３実施形態では、第１実施形態で例示した構成、すなわち、ランダマイザ１０７が２つの擬似乱数生成器１０７１および１０７２を備える場合を引用したが、この構成に限定されるものではない。すなわち、第３実施形態で例示した、シードの一部を固定ビットとする構成は、上述したような、原始多項式（生成多項式）を用いた種々の擬似乱数生成器に対して適用することが可能である。これは、ランダマイザ１０７が単一の擬似乱数生成器を備えた構成である場合にも同様である。
【００８１】
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
【００８２】
第４実施形態
つぎに、第４実施形態にかかるランダマイザおよび半導体記憶装置について、図面を参照して詳細に説明する。なお、以下の説明において、上述した実施形態と同様の構成および動作については、同一の符号を付し、その重複する説明を省略する。
【００８３】
第４実施形態にかかる半導体記憶装置の概略構成例は、第１実施形態において図１を用いて説明した構成と実質的に同一である。
【００８４】
ただし、第４実施形態では、ランダマイザ１０７において組み合わせられる擬似乱数生成器それぞれが持つ欠点を解消して乱数性の高い新たな擬似乱数列を生成するために、組み合わせる擬似乱数生成器に対して以下のような条件を与える。
（Ａ）周期が乱数性の検定対象のデータサイズのａ倍以上（ａは１以上の数であって、たとえば１００）である長周期の擬似乱数生成器
（Ｂ）周期が乱数性の検定対象のデータサイズの１／ｂ以下（ｂは１以上の数であって、たとえば８）である短周期の擬似乱数生成器
【００８５】
項目（Ａ）の擬似乱数生成器は、生成される擬似乱数列に重なりが発生しないように使うことができるが、擬似乱数生成器に与えるシードによっては局所的に特性の悪い擬似乱数列を発生させる場合がある。また、必要なシードの長さが長いため、多数のシードを持つ場合にはシードテーブルのサイズが大きくなる。
【００８６】
項目（Ｂ）の擬似乱数生成器は、原理上、発生させる擬似乱数列に重なりが発生するため、乱数列としての特性が悪くなる可能性がある。その一方で、発生する擬似乱数列に重なりが多数発生することは、擬似乱数列をたとえば８ビット単位で区切った小データで考えたときに、小データの発生確率が（Ａ）の擬似乱数生成器に比べて一様分布に近くなり易いという特徴も有する。
【００８７】
そこで第４実施形態では、（Ａ）の擬似乱数生成器で発生させた擬似乱数列と、（Ｂ）の擬似乱数生成器で発生させた擬似乱数列とのＸＯＲをとることで、両者の持つ弱点を相殺して特性の良い乱数列を得る。
【００８８】
また、第４実施形態では、（Ｂ）の擬似乱数生成器にシードを与えることによって発生させた擬似乱数列を（Ａ）の擬似乱数生成器のシードとして使う。このような構成により、個々のシード長を短くできるため、シードテーブルのサイズを縮小することが可能となる。
【００８９】
（Ａ）の長周期の乱数生成器（これを主乱数生成器（第２擬似乱数生成器）という）としては、ＣＲＣ−３２または後述するルールに従って擬似乱数列を生成する５６ビット（または６４ビット）の遅れフィボナッチ方式の乱数生成器（以下、単に遅れフィボナッチ乱数生成器という）を用いることができる。（Ｂ）の短周期の乱数生成器（これを副乱数生成器（第１擬似乱数生成器）という）としては、ＣＲＣ−８またはＣＲＣ−１６（またはＣＲＣ−３２）の擬似乱数生成器を用いることができる。なお、第４の実施形態では、不揮発性メモリ１２０への書込み対象のデータとして、最終的に生成する擬似乱数列の全体周期の１／２以上の長さのデータを使う場合を例に挙げる。また、第４実施形態における主乱数生成器および副乱数生成器は、たとえば第１実施形態における２つの擬似乱数生成器１０７１および１０７２に相当するものである。
【００９０】
たとえば６４ビット遅れフィボナッチ乱数生成器は、６４個のフリップフロップと６４個のＸＯＲ回路とで構成されるため、２倍強の回路規模で２３２倍（約４×１０３倍）の周期をもつ擬似乱数列を発生することができる。また、遅れフィボナッチ乱数生成器は、ＸＯＲ回路が各フリップフロップ間で１段だけ使われる点、フリップフロップの出力の論理出力数（Ｆａｎ  ｏｕｔ）が外部への出力および自己へのフィードバックを含めて４つである点、および、フリップフロップ間の配線数がフリップフロップの２倍の１２８本程度である点を有しているため、ハードウエア実装に向いた構成であるとも考えられる。
【００９１】
そこで第４実施形態では、主乱数生成器に６４ビット遅れフィボナッチ乱数生成器を用いることとする。主乱数生成器を遅れフィボナッチ乱数生成器で構成する場合、擬似乱数列を生成する際のルールでは、ハードウエア実装を考慮して、ｎ項の数列を２ｎ項に拡張した以下の式（３）（漸化式）で生成される遅れフィボナッチ（Ｌａｇｇｅｄ  Ｆｉｂｏｎａｃｃｉ）数列が用いられる。
【数３】
2018045501.tif 000005
【００９２】
ただし、上記の漸化式（３）の条件は、ｍ＝２、ｎ＞５５、０≦ｉ≦ｎ−１、ｊ＝ｉ＋ｎ（ｉ＜ｎのとき）、ｊ＝ｉ（ｉ＞ｎ＋１のとき）、および、Ｘ（ｊ）＝Ｘ（ｉ）である。
【００９３】
上述した条件のうち、０≦ｉ≦ｎ−１、ｊ＝ｉ＋ｎ（ｉ＜ｎのとき）およびｊ＝ｉ（ｉ＞ｎ＋１のとき）の条件から、ｎ≦ｊ≦２ｎ−１となる。さらに、ｍ＝２の条件から、Ｘ（ｉ）＝｛０，１｝となる。
【００９４】
以上のような漸化式（３）を用いた場合に生成される擬似乱数列は、２５５−１の周期を持つ。擬似乱数列を適用する不揮発性メモリの消去ブロックサイズは、概ね１２８Ｍバイト（メガバイト）（≒１Ｇビット（ギガビット））＝２３０）程度であるので、擬似乱数列の周期は、不揮発性メモリの消去ブロックサイズに対し、約２２５（≒（２５５−１）／２３０）倍の長さとなる。また、この周期は、不揮発性メモリチップの容量を１Ｔビット（テラビット）（≒２４０ビット）とした場合でも、約２１５（≒（２５５−１）／２４０）倍の長さとなり、１０００（≒２１０）倍以上の長さを持つことになる。
【００９５】
なお、本説明では、主乱数生成器のハードウエア実装を容易化するために、遅れフィボナッチ数列を生成するための漸化式（３）にＸＯＲ演算が用いられているが、加算、乗算など、別の論理演算を用いることも可能である。また、ハードウエア量を考慮しなければ、Ｘ（ｉ）の要素には、ｍ＝２のビット｛０，１｝ではなく、もっと大きな単位、たとえばｍ＝８のバイト｛００００_００００，００００_０００１，００００_００１０，…，１１１１_１１１１｝を用いることも可能である。
【００９６】
さらに、本説明では、漸化式（３）における遅れフィボナッチの「遅れ」の組み合わせを（２４，５５）と表記する。その場合、その他の「遅れ」の組み合わせとしては、（５，１７）、（１３，３１）、（３３，６８）、（３３，９７）、（３７，１００）、（８３，２５８）等を用いることも可能である。このような組み合わせとすることで、互いに２段以上の論理演算（ＸＯＲ）を経由しないと到達できない要素からの出力を用いて擬似乱数列を生成することが可能となるため、より相関の低い擬似乱数列を生成することが可能となる。なお、遅れの組を（ａ，ｂ）（ただし、ｂ＞ａ）とした場合、その周期は２ｂ−１となる。
【００９７】
第４実施形態では、周期が擬似乱数列の適用対象の大きさに対して十分に長いこと、および、８ビット以上を同時に使うことの２つを要件とし、この要件を満たすために、「遅れ」の組み合わせを（２４，５５）としている。これらの要件を満たすことで、後述において触れるように、遅れの組（ａ，ｂ）に対して、ａビットまでを同時に出力することが可能なハードウエア構成を容易に実装することが可能となる。
【００９８】
また、第４実施形態では、副乱数生成器として、第１実施形態において図４を用いた説明したＣＲＣ−３２方式の線形帰還シフトレジスタ１を用いた擬似乱数生成器を用いた場合を例に挙げて説明する。
【００９９】
第１実施形態において説明したように、図４に示した線形帰還シフトレジスタ１は、式（１）に示した原始多項式Ｍ（Ｘ）で定義される。そこで第４実施形態では、この線形帰還シフトレジスタ１を用いて副乱数生成器を構成し、あらかじめ定義しておいた３２ビットのシードをこの副乱数生成器に入力することで、６４ビットの擬似乱数列を８ビット×７周期で生成する。副乱数生成器が８ビット×７周期で生成した６４ビットの擬似乱数列は、主乱数生成器である６４ビット遅れフィボナッチ乱数生成器にシードとして与えられる。
【０１００】
ＣＲＣ−３２で擬似乱数列を発生させるのに必要なシードが３２ビットであり、主乱数生成器である６４ビット遅れフィボナッチ乱数生成器で必要なシードが６４ビットであることから、ＣＲＣ−３２方式の副乱数生成器で生成した擬似乱数列を主乱数生成器である６４ビット遅れフィボナッチ乱数生成器のシードとして用いることは、シードのサイズを約１／２に削減できることを意味している。
【０１０１】
また、ＣＲＣ−３２方式の副乱数生成器は、３２ビットの短周期の擬似乱数生成器であるため、ＣＲＣ−３２方式の副乱数生成器の出力を主乱数生成器のシードとして順に用いることで、２６（＝６４≒５５）ビットのシードを約６４００万（≒２２６＝２３２／２６≒（２３２−１）／６４）個生成することができる。
【０１０２】
さらに、５５ビットシードが不足する場合にも、副乱数生成器に入力する３２ビットのシードの他に、副乱数生成器から出力を取り出すまでにオフセットとして与える出力を捨てる回数を調整することで、別系列の５５ビットシードを生成することができるため、その不足を解消することが可能である。
【０１０３】
なお、ＣＲＣ−３２方式の副乱数生成器に与えるシードは、第１実施形態において図５を用いて説明したように、たとえば６７エントリ（６７個のシード）のシードテーブル５１のインデックスｉと、インデックスｉに対するフレームオフセット番号とを指定することで特定することができる。
【０１０４】
図１４に、第４実施形態において主乱数生成器として使用する６４ビット遅れフィボナッチ乱数生成器の一例を示す。また、図１５に、図１４の６４ビット遅れフィボナッチ乱数生成器で使用するフリップフロップの一例を示し、図１６に、図１４の各フリップフロップの入力段に設けられる入力回路の一例を示す。
【０１０５】
図１４に例示する６４ビット遅れフィボナッチ乱数生成器（以下、単に主乱数生成器という）２００は、インデックスｉが０から６３（すなわち、Ｘ０〜Ｘ６３）にそれぞれ対応する計６４個のフリップフロップ２０１と、６４個のフリップフロップ２０１それぞれの入力段に設けられた入力回路２０２とを備える。なお、本説明では、インデックスｉのフリップフロップ２０１を“Ｘｉ”または“Ｘ（ｉ）”と称する場合がある。
【０１０６】
個々のフリップフロップ２０１は、図１５に示すように、たとえばＤ型フリップフロップであり、その端子として、Ｃ（クロック）端子と、Ｄ入力と、Ｑ出力と、Ｑバー（反転）出力と、ＣＬＲ（クリア）端子とを備える。
【０１０７】
また、各フリップフロップ２０１の入力段に設けられる入力回路２０２は、図１６に示すように、セレクタ２０２１と、シードテーブル２０２２と、ＸＯＲ回路２０２３とを備える。なお、図１６には、インデックスｉ＝０に対応するフリップフロップ２０１の入力段に設けられた入力回路２０２が示されているが、他のインデックスｉ＝１〜６３それぞれに対応するフリップフロップ２０１についても同様の入力回路２０２が設けられている。
【０１０８】
一般的な６４ビット遅れフィボナッチ乱数生成器では、ｉ＝０〜６３のフリップフロップが順に使用された後に、ｉ＝６４〜１２７のフリップフロップが順に使用される。しかしながら、たとえばｉ＝０〜７のフリップフロップに格納された情報を使って当該ｉ＝０〜７のフリップフロップを参照する後続のフリップフロップを更新した後は、ｉ＝０〜７のフリップフロップは、以降、後続のフリップフロップから参照されることは無い。そこで第４実施形態にかかる主乱数生成器２００では、たとえばｉ＝０〜７のフリップフロップ２０１に格納された情報を使って当該ｉ＝０〜７のフリップフロップ２０１を参照する後続のフリップフロップ２０１を更新した後は、ｉ＝０〜７のフリップフロップ２０１がｉ＝６４〜７１の情報を格納するフリップフロップとして使用される。同様に、ｉ＝８〜５５までのフリップフロップ２０１は、ｉ＝７２〜１１９までの情報を順次格納するフリップフロップとして使用される。すなわち、第４実施形態では、６４個のフリップフロップ２０１のうち、「モジュロｎ（以下、ｍｏｄｎと記す）が同じフリップフロップは等価」と見なして情報が格納される。
【０１０９】
図１４は、ｉ＝０のフリップフロップ２０１を含む要素に着目した図であり、その他のｉ＝１〜６３のフリップフロップ２０１それぞれを含む要素も同様の接続構成を備える。したがって、第４実施形態にかかる主乱数生成器２００は、それぞれ１つのフリップフロップ２０１とその入力段に設けられた１つの入力回路２０２とで構成された要素が８行８列の行列状に配置された構成を有する。図１４に示される構成では、図面中、最左列（これを１列目とする）の上から下にかけてｉ＝０〜７に対応する要素が並べられ、左から２列目には上から下にかけてｉ＝８〜１５に対応する要素が並べられ、以降同様にして、最右列（すなわち、左から８列目）には上から下にかけてｉ＝５６〜６３に対応する要素が並べられている。
【０１１０】
図１４の最左列の最上に位置するｉ＝０（ｍｏｄ６４）のフリップフロップ２０１、すなわちＸ０（＝Ｘ６４）は、上述した漸化式（３）より、ｉ＝９（＝６４−５５）およびｉ＝４０（＝６４−２４）のフリップフロップ２０１（すなわち、Ｘ９およびＸ４０）の情報を参照して更新される。そこで、Ｘ０（＝Ｘ６４）のＤ入力には、Ｘ９とＸ４０とのＱ出力をＸＯＲ回路２０２３にてＸＯＲした値が入力される。また、Ｘ０（＝Ｘ６４）は、それぞれ１ビットの入力セレクト信号２０２４および２０２５の組み合わせに従って、現在のＸ０の値を保持、シードテーブル２０２２から出力されたビット（シード値）の値を保持、および、Ｘ９とＸ４０とのＱ出力をＸＯＲした値を保持、のいずれかを選択して動作する。このような動作は、他のＸ１〜Ｘ６３のフリップフロップ２０１についても同様である。
【０１１１】
また、上述したように、短周期の副乱数生成器を用いて長周期の主乱数生成器２００に入力するシードを生成する場合、図１６に示す入力回路２０２におけるセレクタ２０２１のシードテーブル入力Ａ１または空きポートである入力Ａ３に、副乱数生成器の出力が接続される。
【０１１２】
図１７に、Ｘ０、Ｘ１、Ｘ２、Ｘ７、Ｘ８、Ｘ５６およびＸ６３の入力構成例を示す。なお、図１７で入力構成例が示されていないフリップフロップ２０１も同様の接続構成を備えている。また、図１７における最右列の８ビットのフリップフロップ２０１には、出力タップ２０３がそれぞれ設けられている。この８つの出力タップ２０３から出力される値は、ｎ＝６４の遅れフィボナッチ数列を６４ビット単位で切り出した値のうちの最後の８ビットに相当する。すなわち、図１７に示す主乱数生成器２００は、ｎ＝６４の遅れフィボナッチ数列を６４ビット単位で切り出した値のうちの最後の８ビットを出力するように構成されている。ただし、この構成に限定されず、最初の８ビットを出力する構成や、途中の連続するまたは不連続な８ビットを出力する構成など、種々変形することが可能である。なお、最初の８ビットを出力する構成とした場合、２周目のデータ出力を迅速に行うことができる。
【０１１３】
また、主乱数生成器が出力するビット数は、８ビットに限られるものではない。図１８には、ｎ＝６４の遅れフィボナッチ数列を６４ビット単位で切り出した値のうちの最後の２４ビットを出力するように構成された主乱数生成器２１０を示す。一般的に、遅れフィボナッチ数列は非常に特性のよい擬似乱数列を発生できることで知られている。たとえば図１８に示すような、ｎ＝６４の遅れフィボナッチ数列を６４ビット単位で切り出した値のうちの最後の２４ビットを出力する構成では、あるフリップフロップ２０１に保持されている情報が１サイクルで他のフリップフロップに到達することはないため、特に相関が小さい擬似乱数列を生成することができる。
【０１１４】
また、２４ビット出力とする場合、図１８に示したような６４ビット構成ではなく、後述の図１９に示されるような７２ビット構成（５６より大きくかつ２４の最小倍数）や、図２０に示されるような９６ビット構成（２４の倍数）など、５６ビットより大きくかつ２４ビットの倍数となるビット数の構成としてもよい。その場合、２４個の出力タップ２０３を出力用セレクタに対して１対１に接続することが可能となるため、ハードウエア実装を容易化することができる。また、同様の理由から、１６ビット出力とする場合には、５６ビット構成や７２ビット構成よりも６４ビット構成（５６より大きくかつ１６の最小倍数）とすることが好適であり、さらに、８ビット出力とする場合には、５６ビット構成とすることが好適である。
【０１１５】
図１９および図２０に、２４ビット出力で構成された主乱数生成器の例を示す。なお、図１９は、ハードウエア実装に好適な２４ビット出力の６４ビット遅れフィボナッチ乱数生成器で構成された主乱数生成器の概略構成例を示し、図２０は、ソフトウエアモデルでの検証に好適な２４ビット出力の６４ビット遅れフィボナッチ乱数生成器で構成された主乱数生成器の概略構成例を示す。
【０１１６】
図１９に示す主乱数生成器２２０は、図１５に示すフリップフロップ２０１と図１６に示す入力回路２０２とよりなる７２個の要素が８行９列の行列状に配置された構成を有する。この主乱数生成器２２０は、２４ビットの出力を３ビットずつ８サイクルに分けて出力するように構成されている。そこで、主乱数生成器２２０は、３つの出力セレクタ２２１ａ〜２２１ｃを備えている。出力セレクタ２２１ａは、８行９列の行列状に配置された要素におけるフリップフロップ２０１のうち、１列目と４列目と７列目のフリップフロップ２０１のＱ出力に接続される。同様に、出力セレクタ２２１ｂは、２列目と５列目と８列目のフリップフロップ２０１のＱ出力に接続され、出力セレクタ２２１ｃは、３列目と６列目と９列目のフリップフロップ２０１のＱ出力に接続される。
【０１１７】
各要素の入力回路２０２では、１サイクルで３列ずつ更新するように、セレクタ２０２１に入力する入力セレクト信号２０２４および２０２５が制御される。一方、出力セレクタ２２１ａ〜２２１ｃは、その出力の組み合わせが、１列目、２列目および３列目からの出力の組み合わせ、４列目、５列目および６列目からの出力の組み合わせ、または、７列目、８列目および９列目からの出力の組み合わせとなるように、２ビットの出力セレクト信号２２２に基づいて動作する。その際、出力セレクト信号２２２を、入力セレクト信号２０２４および２０２５を１サイクル（または２サイクル）遅延させた信号とすることで、出力セレクタ２２１ａ〜２２１ｃの出力を入力セレクト信号と同期させることが可能である。
【０１１８】
このように、６４ビット遅れフィボナッチ数列の配列要素をフリップフロップ２０１を用いて実装するハードウエア実装の場合には、６４ビット遅れフィボナッチ乱数生成器を７２ビット構成とすることで、擬似乱数列の生成効率を高めることができる。その一方で、６４ビット遅れフィボナッチ乱数生成器をソフトウエアモデルで検証する場合には、図２０に示す主乱数生成器２２０Ａのように、配列要素を２４個増やして合計９６個（Ｘ０〜Ｘ９５）とすることで、後続の配列を更新する際の参照先となる配列が後続の配列の更新の際に更新されない構成となるため、実装を容易化することができる。
【０１１９】
また、８ビット出力および２４ビット出力以外の構成として、１６ビット出力で構成された主乱数生成器の例を図２１に示す。図２２には、図２１に示す主乱数生成器のタイミングチャートを示す。
【０１２０】
図２１に示すように、主乱数生成器２３０は、フリップフロップ２０１と入力回路２０２とよりなる６４個の要素が８行８列の行列状に配置された構成を有する。また、主乱数生成器２３０は、１６ビットの出力を４ビットずつ４サイクルに分けて出力するための構成として、２つの出力セレクタ２３１ａおよび２３１ｂを備える。出力セレクタ２３１ａは、８行８列の行列状に配置された要素におけるフリップフロップ２０１のうち、１列目と３列目と５列目と７列目のフリップフロップ２０１のＱ出力に接続され、出力セレクタ２３１ｂは、２列目と４列目と６列目と８列目のフリップフロップ２０１のＱ出力に接続される。
【０１２１】
１６ビット出力の場合、１サイクルで２列ずつ更新されるように、入力回路２０２における２ビットの入力セレクト信号（図１６の入力セレクト信号２０２４および２０２５参照）が制御される。また、図２１および図２２に示すように、出力セレクタ２３１ａおよび２３１ｂからの出力が、８行８列の行列状に配置された要素のうちの１列目、２列目、３列目および４列目からの出力の組み合わせ、または、５列目、６列目、７列目および８列目からの出力の組み合わせとなるように、入力セレクト信号を１サイクル（または２サイクル）遅延させた出力セレクト信号２３２が制御される。これにより、出力セレクタ２３１ａおよび２３１ｂの出力が入力セレクト信号と同期して切り替えられる。
【０１２２】
なお、８ビット出力の場合には、１サイクルで１列ずつ更新されるように、入力回路２０２における３ビットの入力セレクト信号が制御されるとともに、出力セレクタからの出力が１列目、２列目、３列目、４列目、５列目、６列目、７列目および８列目からの出力となるように、入力セレクト信号を１サイクル（または２サイクル）遅延させた２ビットの出力セレクト信号が制御される。これにより、出力セレクタの出力が入力セレクト信号と同期して切り替えられる。
【０１２３】
また、上述したように、第４実施形態において主乱数生成器に採用されている遅れフィボナッチ乱数生成器は、非常に質の良い擬似乱数列を生成する。しかしながら、遅れフィボナッチ乱数生成器は、生成方法（漸化式）が単純であり、また、たとえば距離が１０以下などの近傍の要素でなく、遠くの要素を参照して擬似乱数列を生成するため、似たようなシード値を与えると、サイクル数が小さい領域（たとえば擬似乱数列の冒頭部分）では極めて似たシーケンスを出力する場合がある。表現を変えると、ランダムアクセス等に対応するために細かい単位でシードを指定する場合には、サイクル数が小さい部分ではシードの選び方次第で似たような擬似乱数列が生成されてしまい、検定結果の悪い擬似乱数列が生成されてしまう可能性がある。
【０１２４】
そこで第４実施形態では、上述したように、たとえばＣＲＣ−３２方式の線形帰還シフトレジスタ１（図４参照）を副乱数生成器として用い、この副乱数生成器に８組の６７エントリからなるシードテーブルを用いて発生させた擬似乱数列から５５ビット以上（たとえば５６ビット）ずつ取り出し、そのうちの５５ビットを６４ビットの遅れフィボナッチ方式を用いる主乱数生成器のシードとして使用する。
【０１２５】
このような、副乱数生成器で生成された擬似乱数列を主乱数生成器のシードとして使用する際の動作例を、以下に図面を用いて詳細に説明する。図２３は、本動作説明において使用する８ビット出力の６４ビット遅れフィボナッチ乱数生成器を用いた主乱数生成器の一例を示す図である。図２４は、副乱数生成器で生成された擬似乱数列を図２３に示す主乱数生成器のシードとして使用する際の動作例を示すフローチャートである。なお、図２３に示す主乱数生成器２００は、図１４に示した主乱数生成器２００と同一であってよい。
【０１２６】
図２３に示すように、本説明に用いる主乱数生成器２００は、図１４に示した構成の他に、１列目〜８列目までのフリップフロップ２０１のＱ出力に接続された出力セレクタ２０４と、出力セレクタ２０４からデータ（擬似乱数列）を出力する出力タップ２０３とを備える。出力セレクタ２０４は、入力回路２０２における入力セレクト信号２０２４および２０２５を１サイクル（または２サイクル）遅延させた出力セレクト信号２０５に基づき、入力セレクト信号と同期してその出力を切り替える。
【０１２７】
図２３に示す主乱数生成器２００は、たとえば図２４および以下で説明するステップＳ１０１〜Ｓ１２２およびその自然拡張（ステップＳ１２３）で示される手順に従って動作することで、必要なサイズ分の擬似乱数列を生成する。
【０１２８】
（ステップＳ１０１）まず、副乱数生成器用のシードテーブルから指定されたシードを取得し、このシードの値を副乱数生成器にセットする。
【０１２９】
（ステップＳ１０２）副乱数生成器を指定の初期サイクル数、シフト動作させる。
【０１３０】
（ステップＳ１０３）副乱数生成器から８ビット出力を取り出し、主乱数生成器２００のＸ０〜Ｘ７にセットする。
【０１３１】
（ステップＳ１０４）副乱数生成器を指定の通常サイクル数、シフト動作させる。
【０１３２】
（ステップＳ１０５）副乱数生成器から８ビット出力を取り出し、主乱数生成器２００のＸ８〜Ｘ１５にセットする。
【０１３３】
（ステップＳ１０６）副乱数生成器を指定の通常サイクル数、シフト動作させる。
【０１３４】
（ステップＳ１０７）副乱数生成器から８ビット出力を取り出し、主乱数生成器２００のＸ１６〜Ｘ２３にセットする。
【０１３５】
（ステップＳ１０８）副乱数生成器を指定の通常サイクル数、シフト動作させる。
【０１３６】
（ステップＳ１０９）副乱数生成器から８ビット出力を取り出し、主乱数生成器２００のＸ２４〜Ｘ３１にセットする。
【０１３７】
（ステップＳ１１０）副乱数生成器を指定の通常サイクル数、シフト動作させる。
【０１３８】
（ステップＳ１１１）副乱数生成器から８ビット出力を取り出し、主乱数生成器２００のＸ３２〜Ｘ３９にセットする。
【０１３９】
（ステップＳ１１２）副乱数生成器を指定の通常サイクル数、シフト動作させる。
【０１４０】
（ステップＳ１１３）副乱数生成器から８ビット出力を取り出し、主乱数生成器２００のＸ４０〜Ｘ４７にセットする。
【０１４１】
（ステップＳ１１４）副乱数生成器を指定の通常サイクル数、シフト動作させる。
【０１４２】
（ステップＳ１１５）副乱数生成器から８ビット出力を取り出し、そのうちの７ビットを主乱数生成器２００のＸ４８〜Ｘ５４にセットする。
【０１４３】
（ステップＳ１１６）主乱数生成器２００のＸ５５値を、Ｘ０とＸ３１との値を使ってセットする。なお、Ｘ５５の入力は、遅れフィボナッチ法の漸化式（３）に従うＸＯＲ回路２０２３（図１６参照）で実装されている。
【０１４４】
（ステップＳ１１７）主乱数生成器２００のＸ５６〜Ｘ６３を、Ｘ０〜Ｘ５５の値を使って同時に更新する。なお、Ｘ５６〜Ｘ６３それぞれの入力は、遅れフィボナッチ法の漸化式（３）に従うＸＯＲ回路２０２３で実装されている。
【０１４５】
（ステップＳ１１８）以上のようにして主乱数生成器２００のＸ０〜Ｘ６３に値がセットされた後、主乱数生成器２００から必要なサイズのデータが出力される。
【０１４６】
なお、図２４のステップＳ１１８では、たとえば図２５に示す動作が実行される。図２５に示す動作では、まず、漸化式（３）の項を特定するｊの値が０にリセットされる（ステップＳ１１８１）。
【０１４７】
つづいて、出力セレクタ信号でＸｊｍｏｄ６４〜Ｘ（ｊ＋７）ｍｏｄ６４を選択して８ビットのデータを出力するとともに、Ｘｊｍｏｄ６４〜Ｘ（ｊ＋７）ｍｏｄ６４をＸ（ｊ＋８）ｍｏｄ６４〜Ｘ（ｊ＋６３）ｍｏｄ６４の値を用いて更新する（ステップＳ１１８２）。
【０１４８】
つぎに、必要なサイズのデータを出力済みであるか否かを判断し（ステップＳ１１８３）、出力済みでない場合（ステップＳ１１８３；ＮＯ）、ｊを８インクリメントし（ステップＳ１１８４）、その後、ステップＳ１１８１へリターンする。一方、必要なサイズのデータを出力済みである場合（ステップＳ１１８３；ＹＥＳ）、本動作を終了する。
【０１４９】
ここで、図２４および図２５に示す動作では、Ｘ（ｊ）、Ｘ（ｊ−２４）およびＸ（ｊ−５５）には、それぞれｊｍｏｄ６４、（ｊ−２４）ｍｏｄ６４および（ｊ−５５）ｍｏｄ６４に対応するインデックスｉを持つＸｉが使用される。また、ステップＳ１１６では、Ｘ５５のみの更新が実行されるが、ステップＳ１１７以降では、８個単位で更新が実行される。
【０１５０】
また、図２４および図２５では、副乱数生成器に使用したＣＲＣ−３２方式の擬似乱数生成器の通常のシフトサイクル数が１である場合を想定しているが、１以外の値を用いて別の擬似乱数列を生成することも可能である。
【０１５１】
さらに、図２４および図２５に示す動作例では、１サイクルで８ビットずつ更新し、８ビットずつデータを取り出すように構成されているが、この構成は、主乱数生成器２００がＸ０〜Ｘ６３の６４ビットのフリップフロップ２０１を有しているため、以下の理由から、必要な擬似乱数列を発生させるには十分であると考えられる。その１つ目は、更新する８ビットが更新しない５６ビットを参照するので、漸化式（３）に従った動作を実行することが可能であることである。２つ目は、８ビットを更新すると、出力セレクト信号２０５で選択された８個のフリップフロップ２０１が今後参照されることはないので、次に更新する８ビットに割り当てることができることである。
【０１５２】
第４実施形態において、副乱数生成器には副乱数生成器用のシードテーブル（たとえば図５のシードテーブル５１参照）からシードが供給される。最初の短周期乱数出力では、シードを設定した後、最初のサイクルで出力されたデータ（擬似乱数列）から主乱数生成器のシードとして使用してもよい。副乱数生成器用のシードを使い果たした場合には、副乱数生成器にシードを設定後、副乱数生成器から出力されるデータのうち、別に指定するサイクル数分（例えば６７サイクル分）のデータ（擬似乱数列）を捨ててから、それ以降（たとえば６８サイクルから）のデータ（擬似乱数列）を主乱数生成器のシードとして使用してもよい。このようにすることで、副乱数生成器用のシードテーブルのサイズを小さくすることができる。
【０１５３】
また、シードの別の拡張方法としては、副乱数生成器の出力を順番に使う方法の他に、たとえば副乱数生成器の出力を８ビット毎に分割し、８ビット内でビットの順番の入れ替え（ローテート）を行うことで、見かけ上、別の乱数系列を発生させる方法を採用することもできる。その場合、８ビットのビット順列を考慮すると、８の階乗（８！＝４３２０）通りの新たな組み合わせを生成することができる。
【０１５４】
なお、長周期の主乱数生成器からの出力が使用目的に沿っているか否かについては、事前に使用目的に沿った乱数検定を行って確認しておくとよい。その際、短周期の副乱数生成器から出力される擬似乱数列は、副乱数生成器に与えるシードによって一意に定まるので、副乱数生成器に与えるシードによって主乱数生成器に与えるシードが一意に決まり、結果、主乱数生成器が出力する擬似乱数列も一意に決まることを考慮すべきである。すなわち、副乱数生成器に与えるシードが決まると、主乱数生成器が出力する擬似乱数列も一意に決まることに注意が必要である。
【０１５５】
また、主乱数生成器の定義によっては、不揮発性メモリへのデータの書き込みに使用する擬似乱数列が、主乱数生成器が出力できる擬似乱数列のうちの一部となる。その場合、使用目的に合わない擬似乱数列に対応している副乱数生成器用のシードをシードテーブルに登録しないように構成することも可能である。使用目的に合わない擬似乱数列の例としては、たとえば擬似乱数列に“０”が多数（たとえば８ビット以上）連続している場合や、複数の副乱数生成器用のシードに対して主乱数生成器が出力する擬似乱数列が相関を持っている場合などが挙げられる。
【０１５６】
以上のように、第４実施形態によれば、主乱数生成器で発生させた擬似乱数列と、副乱数生成器で発生させた擬似乱数列とのＸＯＲをとって新たな乱数列を生成するように構成されているため、それぞれの擬似乱数生成器が持つ弱点を相殺して特性の良い乱数列を得ることが可能となる。
【０１５７】
また、第４実施形態によれば、副乱数生成器にシードを与えることによって発生させた擬似乱数列を主乱数生成器のシードとして使用するように構成されているため、個々のシード長を短くすることができ、これにより、シードテーブルのサイズを縮小することが可能となる。
【０１５８】
さらに、第４実施形態によれば、ｍｏｄｎが同じフリップフロップは等価と見なして情報を格納するように構成されているため、主乱数生成器が備える要素の数を削減することができ、それにより、主乱数生成器の回路規模を縮小することが可能となるとともに、主乱数生成器ひいてはランダマイザのハードウエア実装を容易化することが可能となる。
【０１５９】
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
【０１６０】
第５実施形態
つぎに、第５実施形態にかかるランダマイザおよび半導体記憶装置について、以下に図面を参照して詳細に説明する。
【０１６１】
上述した第４実施形態では、主乱数生成器に用いた遅れフィボナッチ数列から連続する数ビット（たとえば８ビット、１６ビット、２４ビット等）を出力する場合を例示したが、第５実施形態では、遅れフィボナッチ数列から不連続の数ビットを出力する場合を例に挙げて説明する。
【０１６２】
図２６は、第５実施形態にかかる遅れフィボナッチ乱数生成器を用いた主乱数生成器の一例を示す図である。なお、図２６では、取り出し対象の不連続８ビットの例として、Ｘ０、Ｘ７、Ｘ１４、Ｘ２１、Ｘ２８、Ｘ３５、Ｘ４２、Ｘ４９が選択されている。
【０１６３】
図２６に例示される主乱数生成器２４０では、ビット取出し対象の８つの要素（フリップフロップ２０１および入力回路２０２）が素数である７ビット間隔で配置されている。第４実施形態で触れたように、遅れフィボナッチ数列では、あるビットに対し、２４ビット前のビットと５５ビット前のビットとが相関を持つ。そこで、２４および５５に対して互いに素である７ビット間隔でビットを取り出す構成とすることで、取り出したビット間の相関を非常に弱くすることができる。
【０１６４】
また、取り出すビット数がたとえば１６ビットである場合、５６ビットが７ビットの８倍であるため、２４および５５に対して互いに素な別の素数、たとえば１３ビット間隔でビットを取り出すとよい。その場合、得られる擬似乱数列は、たとえばＸ０、Ｘ１３、Ｘ２６、Ｘ３９、Ｘ５２、Ｘ９、Ｘ２２、Ｘ３５、Ｘ４８、Ｘ５、Ｘ１８、Ｘ３１、Ｘ４４、Ｘ１、Ｘ１４、Ｘ２７から取り出されたビット列となる。なお、ここでは、（５２＋１３）ｍｏｄ５６＝（６５）ｍｏｄ５６＝９などを用いて取り出し対象のビットが決定されている。
【０１６５】
以上のように、遅れフィボナッチ数列において相関が現れるビット間隔（たとえば２４ビット間隔および５５ビット間隔）に対して互いに素となる素数のビット間隔で主乱数生成器２４０からビットを取り出すように構成することで、取り出したビット間の相関を非常に弱くすることができる。その結果、乱数性の良好な擬似乱数列を生成することが可能となる。
【０１６６】
なお、遅れフィボナッチ数列では、漸化式（３）から分かるように、隣接するビット間の相関が無い、あるいは非常に弱い。そのため、８ビット出力であればＸ（７：０）、１６ビット出力であればＸ（１５：０）を使用することも可能である。
【０１６７】
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
【０１６８】
第６実施形態
上述した第４実施形態では、長周期の主乱数生成器のシードを１つの短周期の副乱数生成器で発生させる場合を例示したが、第６実施形態では、複数の副乱数生成器を使って主乱数生成器のシードを発生させる場合について、例を挙げて説明する。
【０１６９】
複数の副乱数生成器の例としては、２個のＭ１３系列の擬似乱数生成器、２個のＭ１７系列の擬似乱数生成器、２個のＭ１９系列の擬似乱数生成器、および、２個のＭ２３系列の擬似乱数生成器の合計８個の副乱数生成器を挙げることができる。その場合のシードテーブルの例としては、以下の２通りの案を例示することができる。
・第１案：使用するＭ系列のうち最も長いシードが要求されるＭ系列（上記例ではＭ２３系列）を含む１つ以上のＭ系列に対してそれぞれシードテーブルを用意し、他の系列については用意したシードテーブルのいずれかにおけるシードの一部を使う。
・第２案：Ｍ系列それぞれについて専用のシードテーブルを用意する。
【０１７０】
上述した第１案の場合、シードテーブルサイズを小さくすることができるが、シードテーブルが用意されたＭ系列（たとえばＭ２３系列）以外については発生する擬似乱数列に重なりが無いことが保証されない。一方で、第２案の場合には、重なりが出ないように擬似乱数列を発生することは可能であるが、シードテーブルサイズが大きくなる。
【０１７１】
ただし、第６実施形態では、主乱数生成器のシードを生成することを目的として副乱数生成器を用いているため、副乱数生成器が生成するシード自体の乱数の質（乱数性）に対しては寛容である。これは、主乱数生成器の周期が使用対象のデータ（たとえばＸＯＲを取るデータ）の長さの１００〜１０００倍程度など非常に長い場合には、主乱数生成器の発生できる擬似乱数列のうち実際に使用する擬似乱数列の割合は小さいため、副乱数生成器に与えるシードの選択によって実際に使用する擬似乱数列に重なりが生じる可能性は非常に低いと考えられるためである。たとえばＣＲＣ−３２方式の副乱数生成器に２つのシードを与えた際に生成される擬似乱数列が重なる可能性は、１／１０００〜１／１００程度の確率である。また、遅れフィボナッチの周期はＣＲＣ−３２の周期の８Ｍ倍であるため、生成された２つの擬似乱数列が重なる可能性は、さらに１／８Ｍの確率となる。これは、他の実施形態についても同様である。
【０１７２】
以上のように、主乱数生成器に与えるシードを複数の副乱数生成器を用いて生成する構成とすることで、主乱数生成器に与えるシードの乱数性を高めることができる。また、複数の副乱数生成器用に用意するシードテーブルのサイズを小さくしたい場合などにも柔軟に対応することが可能である。
【０１７３】
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
【０１７４】
第７実施形態
上述した第５実施形態のように、遅れフィボナッチ数列から不連続の数ビットを出力する場合、使用するフリップフロップを増やすことで、更に多くのビットを１サイクルで出力するように構成することができる。そこで第７実施形態では、１サイクルに１６ビットのデータを出力することが可能なランダマイザおよび半導体記憶装置について、具体例を挙げて説明する。
【０１７５】
図２７に、第７実施形態にかかる主乱数生成器の一例を示し、図２８に、副乱数生成器で生成された擬似乱数列を図２７に示す主乱数生成器のシードとして使用する際の動作例を示す。なお、図２７に示す主乱数生成器２５０は、１サイクルに１６ビットのデータを出力するように構成された遅れフィボナッチ乱数生成器である。
【０１７６】
図２７に示すように、第７実施形態にかかる主乱数生成器２５０は、フリップフロップ２０１と入力回路２０２とよりなる８０個の要素が８行１０列の行列状に配置された構成を有する。また、主乱数生成器２５０は、１行目、３行目、５行目、７行目および９行目のフリップフロップ２０１のＱ出力に接続された出力セレクタ２５１ａと、２行目、４行目、６行目、８行目および１０行目のフリップフロップ２０１のＱ出力に接続された出力セレクタ２５１ｂを備えている。出力セレクタ２５１ａおよび２５１ｂは、入力回路２０２における入力セレクト信号２０２４および２０２５を１サイクル（または２サイクル）遅延させた出力セレクト信号２５２に基づき、入力セレクト信号と同期してその出力を切り替える。
【０１７７】
図２７に示す主乱数生成器２５０は、たとえば図２８および以下で説明するステップＳ５０１〜Ｓ５２１およびその自然拡張（ステップＳ５２２）で示される手順に従って動作することで、必要なサイズ分の擬似乱数列を生成する。なお、ステップＳ５０１〜Ｓ５１７までは、上述において図２４のステップＳ１０１〜Ｓ１１７を用いて説明した動作と同様であるため、ここでは重複する説明を省略する。
【０１７８】
（ステップＳ５１８）主乱数生成器２５０のＸ６４〜Ｘ７９を、Ｘ８〜Ｘ６３の値を使って同時に更新する。なお、Ｘ（ｊ）の値は、ｉ＝ｊｍｏｄ８０に対応するＸｉにセットされる。また、Ｘ６４〜Ｘ７９の入力は、Ｘ６４〜Ｘ７９に対応する遅れフィボナッチ法の漸化式（３）に従うＸＯＲ回路２０２３で実装されている。
【０１７９】
（ステップＳ５１９）以上のようにして主乱数生成器２５０のＸ０〜Ｘ７９に値がセットされた後、主乱数生成器２５０から必要なサイズのデータが出力される。
【０１８０】
なお、図２８のステップＳ５１９では、たとえば図２９に示す動作が実行される。図２９に示す動作では、まず、漸化式（３）の項を特定するｊの値が０にリセットされる（ステップＳ５１９１）。
【０１８１】
つづいて、出力セレクタ信号でＸｊｍｏｄ８０〜Ｘ（ｊ＋７）ｍｏｄ８０およびＸ（ｊ＋８）ｍｏｄ８０〜Ｘ（ｊ＋１５）ｍｏｄ８０を選択して１６ビットのデータを出力するとともに、Ｘｊｍｏｄ８０〜Ｘ（ｊ＋１５）ｍｏｄ８０をＸ（ｊ＋１６）ｍｏｄ８０〜Ｘ（ｊ＋７９）ｍｏｄ８０の値を用いて更新する（ステップＳ５１９２）。
【０１８２】
つぎに、必要なサイズのデータを出力済みであるか否かを判断し（ステップＳ５１９３）、出力済みでない場合（ステップＳ５１９３；ＮＯ）、ｊを１６インクリメントし（ステップＳ５１９４）、その後、ステップＳ５１９１へリターンする。一方、必要なサイズのデータを出力済みである場合（ステップＳ５１９３；ＹＥＳ）、本動作を終了する。
【０１８３】
ここで、図２８および図２９に示す動作では、Ｘ（ｊ）、Ｘ（ｊ−２４）およびＸ（ｊ−５５）には、それぞれｊｍｏｄ８０、（ｊ−２４）ｍｏｄ８０および（ｊ−５５）ｍｏｄ８０に対応するインデックスｉを持つＸｉが使用される。また、ステップＳ５１６ではＸ５５の１個、ステップＳ５１７ではＸ５６〜Ｘ６３の８個の更新がそれぞれ実行されるが、ステップＳ５１８以降では、１６個単位で更新が実行される。
【０１８４】
さらに、図２８および図２９に示す動作例では、１サイクルで１６ビットずつ更新し、１６ビットずつデータを取り出すように構成されているが、この構成は、主乱数生成器２５０がＸ０〜Ｘ７９の８０ビットのフリップフロップ２０１を有しているため、以下の理由から、必要な擬似乱数列を発生させるには十分であると考えられる。その１つ目は、更新する１６ビットが更新しない６４ビットを参照するので、漸化式（３）に従った動作を実行することが可能であることである。２つ目は、１６ビットを更新すると、出力セレクト信号２５２で選択された１６個のフリップフロップ２０１が今後参照されることはないので、次に更新する１６ビットに割り当てることができることである。
【０１８５】
なお、フリップフロップ２０１から出力セレクタ２５１ａおよび２５１ｂに出力される論理出力数（Ｆａｎ  ｏｕｔ）を増やすことで、図２７に示す主乱数生成器２５０のフリップフロップ２０１の数を８個削減して７２個とすることが可能であるが、第７実施形態では、出力セレクタ２５１ａおよび２５１ｂとフリップフロップ２０１とを結ぶ配線の数を１／２に削減するために、１６ビット出力の５倍の８０個のフリップフロップ２０１で主乱数生成器２５０を構成している。
【０１８６】
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
【０１８７】
第８実施形態
第８実施形態では、使用するフリップフロップを増やすことで、１サイクルに２４ビットのデータを出力することを可能にしたランダマイザおよび半導体記憶装置について、具体例を挙げて説明する。
【０１８８】
図３０に、第８実施形態にかかる主乱数生成器の一例を示し、図３１に、副乱数生成器で生成された擬似乱数列を図３０に示す主乱数生成器のシードとして使用する際の動作例を示す。なお、図３０に示す主乱数生成器２６０は、１サイクルに２４ビットのデータを出力するように構成された遅れフィボナッチ乱数生成器である。
【０１８９】
図３０に示すように、第８実施形態にかかる主乱数生成器２６０は、フリップフロップ２０１と入力回路２０２とよりなる９６個の要素が８行１２列の行列状に配置された構成を有する。また、主乱数生成器２６０は、４つの出力セレクタ２６１ａ〜２６１ｄを備える。
【０１９０】
出力セレクタ２６１ａは、１行目、５行目および９行目のフリップフロップ２０１のＱ出力に接続される。出力セレクタ２６１ｂは、２行目、６行目および１０行目のフリップフロップ２０１のＱ出力に接続される。出力セレクタ２６１ｃは、３行目、７行目および１１行目のフリップフロップ２０１のＱ出力に接続される。出力セレクタ２６１ｄは、４行目、８行目および１２行目のフリップフロップ２０１のＱ出力に接続される。各出力セレクタ２６１ａ〜２６１ｄは、入力回路２０２における入力セレクト信号２０２４および２０２５を１サイクル（または２サイクル）遅延させた出力セレクト信号２６２に基づき、入力セレクト信号と同期してその出力を切り替える。
【０１９１】
図３０に示す主乱数生成器２６０は、たとえば図３１および以下で説明するステップＳ６０１〜Ｓ６２１およびその自然拡張（ステップＳ６２２）で示される手順に従って動作することで、必要なサイズ分の擬似乱数列を生成する。なお、ステップＳ６０１〜Ｓ６１６までは、上述において図２４のステップＳ１０１〜Ｓ１１６を用いて説明した動作と同様であるため、ここでは重複する説明を省略する。
【０１９２】
（ステップＳ６１７）主乱数生成器２６０のＸ５６〜Ｘ７１を、Ｘ０〜Ｘ５５の値を使って同時に更新する。Ｘ５６〜Ｘ７１それぞれの入力は、遅れフィボナッチ法の漸化式（３）に従うＸＯＲ回路２０２３で実装されている。
【０１９３】
（ステップＳ６１８）主乱数生成器２６０のＸ７２〜Ｘ９５を、Ｘ１７〜Ｘ７１の値を使って同時に更新する。なお、Ｘ（ｊ）の値は、ｉ＝ｊｍｏｄ９６に対応するＸｉにセットされる。また、Ｘ７２〜Ｘ９５の入力は、Ｘ７２〜Ｘ９５に対応する遅れフィボナッチ法の漸化式（３）に従うＸＯＲ回路２０２３で実装されている。
【０１９４】
（ステップＳ６１９）以上のようにして主乱数生成器２６０のＸ０〜Ｘ９５に値がセットされた後、主乱数生成器２６０から必要なサイズのデータが出力される。
【０１９５】
なお、図３１のステップＳ６１９では、たとえば図３２に示す動作が実行される。図３２に示す動作では、まず、漸化式（３）の項を特定するｊの値が０にリセットされる（ステップＳ６１９１）。
【０１９６】
つづいて、出力セレクタ信号でＸｊｍｏｄ９６〜Ｘ（ｊ＋２３）ｍｏｄ９６を選択して２４ビットのデータを出力するとともに、Ｘｊｍｏｄ９６〜Ｘ（ｊ＋１５）ｍｏｄ９６をＸ（ｊ＋２４）ｍｏｄ９６〜Ｘ（ｊ＋９５）ｍｏｄ９６の値を用いて更新する（ステップＳ６１９２）。
【０１９７】
つぎに、必要なサイズのデータを出力済みであるか否かを判断し（ステップＳ６１９３）、出力済みでない場合（ステップＳ６１９３；ＮＯ）、ｊを２４インクリメントし（ステップＳ６１９４）、その後、ステップＳ６１９１へリターンする。一方、必要なサイズのデータを出力済みである場合（ステップＳ６１９３；ＹＥＳ）、本動作を終了する。
【０１９８】
ここで、図３１および図３２に示す動作では、Ｘ（ｊ）、Ｘ（ｊ−２４）およびＸ（ｊ−５５）には、それぞれｊｍｏｄ９６、（ｊ−２４）ｍｏｄ９６および（ｊ−５５）ｍｏｄ９６に対応するインデックスｉを持つＸｉが使用される。また、ステップＳ６１６ではＸ５５の１個、ステップＳ６１７ではＸ５６〜Ｘ７１の１６個の更新がそれぞれ実行されるが、ステップＳ６１８以降では、２４個単位で更新が実行される。
【０１９９】
さらに、図３１および図３２に示す動作では、１サイクルで２４ビットずつを更新し、２４ビットずつデータを取り出すように構成されているが、この構成は、主乱数生成器２６０がＸ０〜Ｘ９５の９６ビットのフリップフロップ２０１を有しているため、以下の理由から、必要な擬似乱数列を発生させるには十分であると考えられる。その１つ目は、更新する２４ビットが更新しない７２ビットを参照するので、漸化式（３）に従った動作を実行することが可能であることである。２つ目は、２４ビットを更新すると、出力セレクト信号２６２で選択された２４個のフリップフロップ２０１が今後参照されることはないので、次に更新する２４ビットに割り当てることができることである。
【０２００】
なお、フリップフロップ２０１から出力セレクタ２６１ａ〜２６１ｄに出力される論理出力数（Ｆａｎ  ｏｕｔ）を増やすことで、図３０に示す主乱数生成器２６０のフリップフロップ２０１の数を１６個削減して８０個とすることが可能であるが、第８実施形態では、出力セレクタ２６１ａ〜２６１ｄとフリップフロップ２０１とを結ぶ配線数を１／３に削減するために、２４ビット出力の３倍の９６個のフリップフロップ２０１で主乱数生成器２６０を構成している。
【０２０１】
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
【０２０２】
第９実施形態
つぎに、第９実施形態にかかるランダマイザおよび半導体記憶装置について、以下に詳細に説明する。第９実施形態では、第４実施形態と同様に、短周期の副乱数生成器から出力される擬似乱数列と、長周期の主乱数生成器から出力される擬似乱数列とのＸＯＲ（またはＸＮＯＲ）を取ることで、新たな擬似乱数列を生成する。
【０２０３】
長周期の擬似乱数生成器は、一般的には生成した擬似乱数列の全てではなく一部がデータの書込み等に使用されるため、乱数の検定対象に対して全く独立した擬似乱数列を生成できる。ただし、生成された擬似乱数列の一部しか使われないことは、シードによっては擬似乱数列によって生成される部分数列のパターンの出現確率に偏りを生じさせる可能性があることを示唆している。簡単な例として、たとえばＣＲＣ−３２方式の擬似乱数生成器では最大３１ビット“０”が連続する可能性があるが、このような擬似乱数列は、８ビット以上の“０”が連続するケースを嫌う用途では不適切な擬似乱数列である。
【０２０４】
一方、短周期の擬似乱数生成器が生成した擬似乱数列は、その大部分（たとえば１／２以上の部分）がたとえば４回以上繰り返して使用される。このため、短周期の擬似乱数生成器を用いた場合には、同じ擬似乱数列が複数回出現する反面、擬似乱数列によって生成される部分数列のパターンの出現確率がほぼ均一になる。また、生成される擬似乱数列の周期が短いため、連続する“０”の長さも長周期の擬似乱数生成器が生成する擬似乱数列の周期に比べて短くなる。さらに、短周期の擬似乱数生成器は回路規模が長周期の擬似乱数生成器よりも小さい。短周期の擬似乱数生成器の回路規模は、シフトレジスタ（ＬＦＳＲ）のビット数をｃとすると、そのｃに比例した規模となる（ランダウ記法を用いるとＯ（ｃ）となる）。
【０２０５】
そこで第９実施形態では、短周期の副乱数生成器から出力される擬似乱数列と、長周期の主乱数生成器から出力される擬似乱数列とのＸＯＲ（またはＸＮＯＲ）を取ることで、新たな擬似乱数列を生成する。たとえばＣＲＣ−３２方式の擬似乱数生成器が生成する擬似乱数列の周期は２３２−１であり、１３ビットＬＦＳＲが生成する擬似乱数列の周期が２１３−１であるので、両者が完全に同期することはなく、弱い同期が発生する可能性も低い。そのため、短周期の副乱数生成器から出力される擬似乱数列と、長周期の主乱数生成器から出力される擬似乱数列とのＸＯＲ（またはＸＮＯＲ）を取ることで、検定結果の良い擬似乱数列を生成することが可能となる。
【０２０６】
また、通常、シードテーブルのサイズ制約等によりシード数を十分に確保できない場合には、シード値の撹拌やビットアサインの回転などを行うことで必要な数のシードが確保されるが、第９実施形態では、これらの操作として擬似乱数生成器ごとに別々の方式を採用する。たとえば長周期の主乱数生成器では、シード値を与えたあとで８サイクルの空回し処理を実行する。一方、短周期の副乱数生成器では、ビットアサインの回転を８ビットアラインで実行する。このように、撹拌処理についても擬似乱数生成器ごとに別々の処理を独立して行うことで、弱い同期が発生した場合に同期をキャンセルすることができ、その結果、検定結果の良い擬似乱数列を生成することが可能となる。なお、長周期の主乱数生成器のシードには、短周期の擬似乱数生成器で生成された擬似乱数列が用いられてもよい。その場合、主乱数生成器のシード作成に用いた短周期の擬似乱数生成器が、短周期の副乱数生成器として使い回されてもよい。
【０２０７】
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
【０２０８】
第１０実施形態
つぎに、第１０実施形態にかかるランダマイザおよび半導体記憶装置について、以下に詳細に説明する。第１０実施形態では、長周期の主乱数生成器から出力される擬似乱数列と、同じく長周期の副乱数生成器から出力される擬似乱数列とのＸＯＲ（またはＸＮＯＲ）をとることで、新たな擬似乱数列を生成する。ただし、主乱数生成器と副乱数生成器とは、互いに異なる周期を持つことが望ましい。
【０２０９】
第１０実施形態では、主乱数生成器として遅れフィボナッチ数列方式の擬似乱数生成器を用い、副乱数生成器としてＣＲＣ−３２方式の擬似乱数生成器を用いた場合を例示する。主乱数生成器および副乱数生成器それぞれに用いるシードは、上述した実施形態で例示したように、これら２つの長周期の擬似乱数生成器とは別の短周期の擬似乱数生成器を用いて生成されてもよい。また、主乱数生成器および副乱数生成器が互いに異なる乱数系列であるため、これら２つの擬似乱数生成器に同じシードを入力してもよい。さらに、これら２つの擬似乱数生成器とは別の短周期の擬似乱数生成器に同じシードを与え、これにより生成された２系列の擬似乱数列を主乱数生成器および副乱数生成器にそれぞれシードとして入力してもよい。さらにまた、ハードウエア量の節減のため、別の短周期の擬似乱数生成器を主乱数生成器および副乱数生成器で共用し、短周期の擬似乱数生成器に入力するシードを変化させることで、主乱数生成器および副乱数生成器にそれぞれシードとして与える２系列の擬似乱数列を発生させてもよい。
【０２１０】
また、上述したように、長周期の擬似乱数生成器は、一般的には生成した擬似乱数列の全てではなく一部がデータの書込み等に使用されるため、乱数の検定対象に対して全く独立した擬似乱数列を生成できる。ただし、生成された擬似乱数列の一部しか使われないことは、シードによっては擬似乱数列によって生成される部分数列のパターンの出現確率に偏りを生じさせる可能性があることを示唆している。
【０２１１】
そこで第１０実施形態では、２つの長周期の擬似乱数生成器から出力された擬似乱数列のＸＯＲ（またはＸＮＯＲ）を取ることで、新たな擬似乱数列を生成する。たとえば遅れフィボナッチ数列の周期が２５５−１であり、ＣＲＣ−３２の周期が２３２−１であるので、両者が完全に同期することはなく、弱い同期が発生する可能性も低い。また、互いの周期が独立しているので、全体の周期はおよそ約２８７（≒（２５５−１）×（２３２−１））となる。
【０２１２】
また、通常、シードテーブルのサイズ制約等によりシード数を十分に確保できない場合には、シード値の撹拌やビットアサインの回転などを行うことで必要な数のシードが確保されるが、第１０実施形態では、これらの操作として擬似乱数生成器ごとに別々の方式を採用する。たとえば長周期の主乱数生成器では、シード値を与えたあとで８サイクルの空回し処理を実行する。さらに、長周期の副乱数生成器では、副乱数生成器の出力に対して、ビット並びの入れ替えを行なったものを主乱数生成器のシードとして用いてもよい。このビットの入れ替え方法では、たとえば、副乱数生成器が１サイクルで出力する８ビットが以下のルールで入れ替えられて、主乱数生成器のシードの一部として用いられる。なお、以下で例示するルールでは、左側が副乱数生成器の出力ビットの並び（ビット＃０→＃１→＃２→＃３→＃４→＃５→＃６→＃７の順）を示し、右側が入れ替え後のビットの並び、すなわち主乱数生成器として用いられるシードのビット並び（＃６→＃７→＃４→＃５→＃２→＃３→＃０→＃１の順）を示している。
（入れ替え前  →  入れ替え後）
ビット＃０  →    ビット＃６
ビット＃１  →    ビット＃７
ビット＃２  →    ビット＃４
ビット＃３  →    ビット＃５
ビット＃４  →    ビット＃２
ビット＃５  →    ビット＃３
ビット＃６  →    ビット＃０
ビット＃７  →    ビット＃１
【０２１３】
上記に例示したルールを適用した場合、副乱数生成器から１サイクルで出力される“００１０１０１１”という８ビットの出力ビットは、“１１１０１０００”に置き換えられる。なお、この例では、副乱数生成器の１サイクルの出力の内部でビットの入れ替えを実行したが、主乱数生成器のシードのビット数である５５ビットの内部で入れ替えを実行するなど、種々変形することが可能である。
【０２１４】
このように、撹拌処理についても擬似乱数生成器ごとに別々の処理を独立して行うことで、弱い同期が発生した場合に同期をキャンセルすることができ、その結果、検定結果の良い擬似乱数列を生成することが可能となる。
【０２１５】
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
【０２１６】
第１１実施形態
つぎに、第１１実施形態にかかるランダマイザおよび半導体記憶装置について、以下に詳細に説明する。第１１実施形態では、短周期の主乱数生成器から出力される擬似乱数列と、同じく短周期の副乱数生成器から出力される擬似乱数列とのＸＯＲ（またはＸＮＯＲ）をとることで、新たな擬似乱数列を生成する。ただし、主乱数生成器と副乱数生成器とは、互いに異なる周期を持つことが望ましい。なお、以下の説明では、短周期の主乱数生成器としてＭ２３系列を採用し、短周期の副乱数生成器としてＭ１７系列を採用した場合を例示する。
【０２１７】
上述したように、短周期の擬似乱数生成器が生成した擬似乱数列は、その大部分（たとえば１／２以上の部分）がたとえば４回以上繰り返して使用される。このため、短周期の擬似乱数生成器を用いた場合には、同じ擬似乱数列が複数回出現する反面、擬似乱数列によって生成される部分数列のパターンの出現確率がほぼ均一になる。また、生成される擬似乱数列の周期が短いため、連続する“０”の長さも長周期の擬似乱数生成器が生成する擬似乱数列の周期に比べて短くなる。さらに、短周期の擬似乱数生成器は回路規模が長周期の擬似乱数生成器よりも小さい。短周期の擬似乱数生成器の回路規模は、シフトレジスタ（ＬＦＳＲ）のビット数をｃとすると、そのｃに比例した規模となる（ランダウ記法を用いるとＯ（ｃ）となる）。
【０２１８】
そこで第１１実施形態のように、短周期の擬似乱数生成器を２つ使用する場合、それぞれの擬似乱数生成器に用いるシフトレジスタの長さをＫ１およびＫ２とすると、生成される擬似乱数列の周期は、（２Ｋ１−１）×（２Ｋ２−１）＝２（Ｋ１＋Ｋ２）−２Ｋ１−２Ｋ２＋１となり、その回路規模は、Ｏ（Ｋ１）＋Ｏ（Ｋ２）＝Ｏ（Ｋ１+Ｋ２）（ただし、Ｏ（Ｋ１）≒Ｏ（Ｋ２））となる。これらは、Ｋ１＋Ｋ２のシフトレジスタ長をもつ短周期の擬似乱数生成器の周期２（Ｋ１＋Ｋ２）、および、回路規模Ｏ（Ｋ１＋Ｋ２）と比較すると、回路規模についてはほぼ同等と見なすことができ、また、周期についても、（２Ｋ１＋２Ｋ２）程度短くなっているものの、ほぼ同等と見なすことができる。
【０２１９】
以上のことから、２つ以上の短周期の擬似乱数生成器を組み合わせた場合、それぞれのシフトレジスタ長の合計と等しいシフトレジスタ長をもつ単一の擬似乱数生成器（ＬＦＳＲ）と比較して、回路規模が同等であり、周期がやや短いランダマイザおよび半導体記憶装置を実現することができる。また、２つ以上の短周期の擬似乱数生成器を組み合わせる構成とすることで、組み合わせる擬似乱数生成器の選択によって、生成される擬似乱数列の特性（検定結果等）を調整することが可能となるため、所望の乱数性の擬似乱数列を得るための設計自由度を高めることが可能となる。
【０２２０】
また、通常、シードテーブルのサイズ制約等によりシード数を十分に確保できない場合には、シード値の撹拌やビットアサインの回転などを行うことで必要な数のシードが確保されるが、第１１実施形態では、これらの操作として擬似乱数生成器ごとに別々の方式を採用する。たとえば短周期の主乱数生成器では、シード値を与えたあとで８サイクルの空回し処理を実行する。一方、短周期の副乱数生成器では、ビットアサインの回転を８ビットアラインで実行する。このように、撹拌処理についても擬似乱数生成器ごとに別々の処理を独立して行うことで、弱い同期が発生した場合に同期をキャンセルすることができ、その結果、検定結果の良い擬似乱数列を生成することが可能となる。なお、短周期の主乱数生成器のシードには、短周期の擬似乱数生成器で生成された擬似乱数列が用いられてもよい。その場合、主乱数生成器のシード作成に用いた短周期の擬似乱数生成器が、短周期の副乱数生成器として使い回されてもよい。
【０２２１】
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
【０２２２】
第１２実施形態
つづいて、第１２実施形態にかかるランダマイザおよび半導体記憶装置について、以下に図面を参照して詳細に説明する。なお、第１２実施形態では、不揮発性メモリ（たとえばＮＡＮＤメモリ）のページ間方向とカラム間方向との両方でデータをランダマイズする場合について、例を挙げて説明する。
【０２２３】
不揮発性メモリの大容量化や高速化に伴い、メモリに格納するデータに対してランダマイズ処理を行なう機能に対しても、回路規模増大の抑制と同時に乱数性能の向上が求められている。一般的に、カラム間方向のランダマイズに適当なＭ系列などから生成された擬似乱数列を利用した場合、ページ間方向の乱数性能を十分なものとすることが課題となる。
【０２２４】
ページ間方向の乱数性能を獲得するための手法としては、ページアドレス毎にＭ系列から生成される擬似乱数列を所定ビット（Ｎビット）シフトさせる方法が考えられる。しかしながら、この手法では、ＮＡＮＤメモリが大容量化するにつれて、シフト量Ｎのバリエーションを増やす必要があるため、バリエーションの増加に比例してシフト処理を行なう回路が増大してしまう。
【０２２５】
また、ページ間方向の乱数性能を獲得するための他の手法としては、Ｍ系列に設定するシードをページ間方向で全て異なるようにすることも考えられる。しかしながら、この方法では、メモリが大容量化するにつれてページ数が増加した場合、シードが登録されたシードテーブルのサイズが比例的に増大する。そのため、上記手法と同様に、回路規模が増大してしまう。
【０２２６】
そこで第１２実施形態では、乱数性能の確保と回路規模の抑制とを両立させることが可能なランダマイザおよび半導体記憶装置について、例を挙げて説明する。以下で説明する第１２実施形態によれば、不揮発性メモリに格納するデータを書き換える撹拌機能についても、簡単な回路構成で実現することができる。
【０２２７】
第１２実施形態では、回路規模の増大を抑制しつつ所望の乱数性能を実現するため、ランダマイザから生成される擬似乱数列に対して、シフト操作やビット回転操作を実行する。さらに、不揮発性メモリにおける個々のメモリセルに対して同一パターンのデータが繰り返し書き込まれることを防止する撹拌機能を実現するため、ランダマイザから出力されるデータ列に対して、多値度のページ単位のビット反転を実行する。
【０２２８】
図３３は、第１２実施形態にかかる半導体記憶装置の概略構成例を示すブロック図である。図３３に示すように、半導体記憶装置３０は、図１に示した半導体記憶装置１０と同様の構成において、図１のランダマイザ１０７がランダマイザ３０７に置き換えられている。また、半導体記憶装置３０は、設定回路３０１をさらに備えている。
【０２２９】
設定回路３０１は、たとえばホストからの書込み要求／読出し要求が入力されたコントローラ１０１からの指示に従い、指定されたページ番号、フレームオフセット番号および撹拌値を特定し、これらの値をランダマイザ３０７へ入力する。
【０２３０】
図３４に、第１２実施形態にかかるランダマイザの概略構成例を示す。図３４に示すように、ランダマイザ３０７は、シードテーブル３１１と、シード選択回路３１２と、シードシフト回路３１３と、擬似乱数列生成回路３１４と、出力ビット回転回路３１５と、出力ビット反転回路３１６と、ＸＯＲ回路３１７とを備える。この構成において、擬似乱数列生成回路３１４は、上述した実施形態における２つまたはそれ以上の擬似乱数生成器で構成されている。
【０２３１】
シードテーブル３１１は、擬似乱数列を生成するための複数のシードの値が格納されている。第１２実施形態では、シードテーブル３１１にたとえば６７個のシードが登録されている。各シードには、インデックスｉ＝０〜６６までの番号が付与されている。また、各シードは、Ｍ系列の次数に対応するビット数（たとえば２０ビット）の乱数列で構成されている。
【０２３２】
シード選択回路３１２は、設定回路３０１から入力されたフレームオフセット番号およびページ番号に基づいて使用するシードのインデックス（以下、インデックス番号またはシードインデックス番号ともいう）ｉを特定し、このインデックスｉで特定されるシードをシードテーブル３１１から取得する。また、シード選択回路３１２は、取得したシードをシードシフト回路３１３へ入力する。
【０２３３】
シードシフト回路３１３は、設定回路３０１から入力されたページ番号に基づいて、シード選択回路３１２から入力されたシードをシフトし、シフト後のシードを擬似乱数生成回路３１４に入力する。
【０２３４】
擬似乱数列生成回路３１４は、たとえば上述した実施形態のいずれかのように、入力されたシードを用いて擬似乱数列を生成し、生成した擬似乱数列を出力ビット回転回路３１５へ入力する。なお、擬似乱数列生成回路３１４には、上述した実施形態のうちのいずれの構成が適用されてもよい。
【０２３５】
出力ビット回転回路３１５は、設定回路３０１から入力されたページ番号に基づいて、擬似乱数列生成回路３１４で生成された擬似乱数列をシフトし、シフト後の擬似乱数列を出力ビット反転回路３１６へ入力する。
【０２３６】
出力ビット反転回路３１６は、設定回路３０１から入力されたページ番号および撹拌値に基づいて、出力ビット回転回路３１５から入力された擬似乱数列のビット値を反転／非反転する撹拌処理を実行し、撹拌処理後の擬似乱数列をＸＯＲ回路３１７へ入力する。
【０２３７】
ＸＯＲ回路３１７は、不揮発性メモリ１２０に書き込むデータまたは不揮発性メモリ１２０から読み出したデータ（以下、共に入力データ列とする）と、出力ビット反転回路３１６から入力された擬似乱数列とのＸＯＲをとることによって、対象のデータに対するスクランブル／デスクランブル処理を実行する。
【０２３８】
つづいて、シード選択回路３１２のより具体的な動作例について、図３５を用いて詳細に説明する。図３５は、第１２実施形態にかかるシード選択回路の動作例を説明するための図であり、不揮発性メモリに書き込むデータのフレームサイズが５１２バイト単位のときのシード選択回路の動作例を説明するための図である。本説明では、フレームサイズが５１２バイトの場合、１ページあたりには３２個のフレームが収納されるとする。したがって、本説明では、フレームオフセット番号が０から３１の値をとることとなる。なお、図３５において、横方向をフレームオフセット番号とし、縦方向をページ番号としたテーブルにおける各枠内に表記された数字は、シードのインデックス番号を表している。
【０２３９】
擬似乱数列生成時に選択されるシードのインデックス番号ｉは、シードテーブル３１１のサイズまたは陽に設定されたシードの個数を素数ｐとし、シードのビット数をｆとした場合、ページ番号およびフレームオフセット番号を入力として、以下の式（４）に従って決定することができる（図３５参照）。なお、式（４）において、フレーム番号＝ページ番号×ｆ＋フレームオフセット番号である。また、素数ｐはたとえば６７であり、シードのビット数ｆはたとえば３２ビットである。
【数４】
2018045501.tif 000006
【０２４０】
上記式（４）を用いることにより、ページ番号およびフレームオフセット番号を入力としてシードインデックス番号ｉを即座に求めることが可能である。このことは、上記式（４）を用いたシード選択方法が、ＮＡＮＤメモリへのシーケンシャル・アクセスはもとより、ランダム・アクセスに対応した実装にも適した方法であることを示唆している。
【０２４１】
なお、本説明において、使用するシードの個数を６７個としているのは、シードの個数はカラム間方向のフレーム数（本説明では３２個）よりも大きな素数とすることが望ましいためである。なお、シードの個数として素数を選択したのは、式（４）で素数の性質を利用しているためである。
【０２４２】
図３５に示されているように、素数の性質を利用することで、６７ページ毎に、ページ間方向（縦方向）のシードの配列においては０から６６のシードのインデックス番号ｉが一回ずつ出現し、隣接するページ間においてはインデックス番号ｉの並びが異なった組み合わせとなるように構成することができる。
【０２４３】
たとえばページ番号が０〜６６の範囲では、フレーム毎（横方向）にシードテーブルのインデックス番号ｉが１ずつインクリメントされているが、ページ番号が６７〜１３３の範囲では、フレーム毎（横方向）にシードテーブルのインデックス番号ｉが２ずつインクリメントされている。さらに、ページ番号が１３４以上（たとえば２００まで）の範囲では、フレーム毎（横方向）にシードテーブルのインデックス番号ｉが３ずつインクリメントされている。
【０２４４】
図３５に示すような選択方法とすることで、カラム間方向（横方向）の乱数性能を確保しつつ、ページ間方向（縦方向）の乱数性能を向上することが可能となる。なお、このような性質は、最大で６７×６６ページまで利用することができる。
【０２４５】
また、図３６〜図４１を用いて、シード選択回路３１２によるシード選択方法をより詳細に説明する。図３６〜図４１は、フレームサイズが５１２バイト以上である場合のシード選択回路によるシード選択方法の一例を説明するための図であり、図３６は、フレームサイズが５１２バイトである場合を示し、図３７は、フレームサイズが１キロバイトである場合を示し、図３８は、フレームサイズが２キロバイトである場合を示し、図３９は、フレームサイズが４キロバイトである場合を示し、図４０は、フレームサイズが８キロバイトである場合を示し、図４１は、フレームサイズが１６キロバイトである場合を示している。なお、図３６〜図４１においても、図３５と同様に、横方向をフレームオフセット番号とし、縦方向をページ番号としたテーブルにおける各枠内に表記された数字は、インデックス番号を表している。
【０２４６】
図３６〜図４１に示すように、第１２実施形態では、フレームサイズが２倍になる毎に、シードインデックスｉの間隔が２倍になっている。また、フレームサイズが大きい場合には、複数のシード間をまたがってＭ系列の擬似乱数生成器（擬似乱数列生成回路３１４）から生成される擬似乱数列が使用される。このように構成することで、Ｍ系列から生成される擬似乱数列において不使用となる部分が少なくなるため、異なるフレームサイズに対して共通にＭ系列の次数を小さく設計することが可能となる。また、フレームサイズに対して縦方向のシードの並び方が変化しないため、乱数性能がフレームサイズに対して影響を受け難いというメリットもある。
【０２４７】
つぎに、シードシフト回路３１３のより具体的な動作例を、図面を参照して詳細に説明する。図４２は、第１２実施形態にかかるシードシフト回路の動作例を説明するための図である。なお、図４２において、横方向をカラム（バイト）とし、縦方向をページ番号としたテーブルにおける各枠内に表記された数字は、シードテーブルから選択されたシードによって生成される擬似乱数列のバイトを表している。
【０２４８】
図４２に示すように、シードシフト回路３１３は、シード選択回路３１２から入力されたシードに対し、その値をバイト単位でシフトさせる操作を加える。たとえばページ番号が０〜６７×８−１までの範囲では、設定されているシフト量が０であるため、シードに対するシフト操作は行なわれず、シード選択回路３１２から入力されたシードがそのまま使用される。一方、ページ番号が６７×８〜６７×８×２−１までの範囲では、設定されているシフト量が１であるため、シードの値がバイト単位で１つシフトされ、このシフト後のシードが擬似乱数列生成回路３１４に入力される。以降、ページ番号がテーブルサイズ（本例では６７）の８倍に達する度に、シフト量が１インクリメントされ、そのシフト量に相当するバイト数でシフトされたシードが擬似乱数列生成回路３１４に入力される。
【０２４９】
つぎに、出力ビット回転回路３１５のより具体的な動作例を、図面を参照して詳細に説明する。図４３は、第１２実施形態にかかる出力ビット回転回路の動作例を説明するための図である。なお、図４３において、横方向に配列したページ番号それぞれに対して縦方向に配列したビット（ｂｉｔ０〜ｂｉｔ７）は、擬似乱数列の各ビットに対応しているものとする。
【０２５０】
図４３（ａ）に示すように、出力ビット回転回路３１５は、まず、擬似乱数列生成回路３１４から入力された擬似乱数列をバイト単位で区切り、これらをページ毎に並べる。つづいて、図４３（ｂ）に示すように、ページ番号がシードテーブルのテーブルサイズ（本例では６７）の倍数に達する度に、擬似乱数列をバイト単位で１つずつ回転（巡回シフト）させる。たとえばページ番号が０〜６６の範囲では、設定されている回転数が０であるため、擬似乱数列はカラム方向に回転されず、そのままの配列を保って出力ビット回転回路３１５から出力される。一方、ページ番号が６７〜１３３の範囲では、設定されている回転数が１であるため、擬似乱数列がバイト単位で１つ回転され、回転後の擬似乱数列が出力ビット回転回路３１５から出力される。以降、ページ番号がテーブルサイズ（６７）の倍数に達する度に、回転数が１インクリメントされ、その回転数に相当するバイト数で回転された擬似乱数列が出力ビット回転回路３１５から出力される。
【０２５１】
第１２実施形態において、所望のカラム方向の乱数性能を実現するためには、シード選択回路３１２、シードシフト回路３１３および出力ビット回転回路３１５の動作の切替わりがページ番号に連動しているとよい。すなわち、シード選択回路３１２、シードシフト回路３１３および出力ビット回転回路３１５のうち少なくとも１つの動作は、シードテーブル３１１のサイズまたは陽に設定されたシードの個数の整数倍の周期で切り替えられるとよい。具体的には、まず、シード選択回路３１２によって６７ページ毎にシードテーブルに格納されている各シードが一回ずつ選択される。出力ビット回転回路３１５は、６７ページ毎にカラムを１ビットずつずらすことにより、ページ間方向で同じシードが複数回選択されることにより擬似乱数列が連動することを、同一カラム内で実質的に回避する。ただし、出力ビット回転回路３１５は擬似乱数列の回転を１バイト（８ビット）区切りで行っているため、６７ページの周期が８回に達すると、回転後の擬似乱数列の配列が元に戻ってしまう。それを補うため、シードシフト回路３１３は、６７×８ページ毎に擬似乱数列を１バイトシフトさせる。これにより、６７×８ページを超えてもページ間方向での擬似乱数列の連動を同一カラム内で実質的に回避できる。その結果、出力される擬似乱数列の乱数性能が低下することを抑制することが可能となる。
【０２５２】
また、第１２実施形態では、シードテーブル３１１のサイズと、シードシフト回路３１３のシフト数のバリエーションと、出力ビット回転回路３１５の回転数のバリエーションとが、ページ数に対して相乗的に効果を発揮するため、不揮発性メモリ（たとえばＮＡＮＤメモリ）の大容量化に伴う回路規模の影響を小さくできるというメリットも得られる。
【０２５３】
つぎに、出力ビット反転回路３１６のより具体的な動作例を、図面を参照して詳細に説明する。図４４〜図５１は、第１２実施形態にかかる出力ビット反転回路の動作例を説明するための図である。図４４は撹拌値を“０”とした場合を示し、図４５は撹拌値を“１”とした場合を示し、図４６は撹拌値を“２”とした場合を示し、図４７は撹拌値を“３”とした場合を示し、図４８は撹拌値を“４”とした場合を示し、図４９は撹拌値を“５”とした場合を示し、図５０は撹拌値を“６”とした場合を示し、図５１は撹拌値を“７”とした場合を示している。なお、図４４〜図５１において、横方向をフレームオフセット番号とし、縦方向をページ番号としたテーブルにおける各枠は、図３５において対応するインデックス番号Ｉのシードにより生成された擬似乱数列（ただし、シフト処理および回転処理後）に対応している。
【０２５４】
図４４〜図５１では、不揮発性メモリのメモリセルにおける多値度が３ビットである場合を示している。メモリセルの多値度が３ビットである場合、撹拌値も３ビットで表すとよい。その場合、たとえば３ページを１つの区切りとして、ページ単位で擬似乱数列をビット反転するように構成することができる。図４４〜図５１に示す例では、各区切りに含まれる３ページのうちの最初のページを３ビットの撹拌値における最右のビットに対応させ、最後のページを撹拌値の最左のビットに対応させ、真ん中のページを撹拌値の真ん中のビットに対応させ、それぞれのページに対応する撹拌値のビットが“０”であればそのページの擬似乱数列を非反転とし、“１”であれば反転するというように構成されている。
【０２５５】
なお、第１２実施形態における撹拌機能とは、不揮発性メモリに格納するデータを書き換える際に個々のメモリセルの浮遊ゲートの電圧レベルが書き換え前後で同一となることを防ぐ機能を意味している。ここで図５２に、撹拌値と浮遊ゲートの電圧レベルの入れ替わりとの関係例を示す。また、図５３に、撹拌値を“０”から“７”に切り替えた際の浮遊ゲートの電圧レベルの入れ替わりを示す。図５２および図５３から分かるように、撹拌値を切り替えることで、浮遊ゲートの電圧レベルと各電圧レベルが対応するビット値とがスクランブルされ、それにより、不揮発性メモリにおける個々のメモリセルに同一パターンのデータが繰り返し書き込まれることを防止することが可能となる。
【０２５６】
また、第１２実施形態では、メモリセルにおける多値度が“３”であると仮定して３ページ毎に反転／非反転のパターンを繰り返す場合を例示したが、たとえば多値度が“２”の場合には２ページ毎に、多値度が“４”の場合には４ページ毎に、反転／非反転のパターンを繰り返すように構成するとよい。すなわち、メモリセルにおける多値度をＭ（Ｍは自然数）とした場合、Ｍページ毎に反転／非反転のパターンを繰り返すように構成するとよい。
【０２５７】
出力ビット反転回路３１６で撹拌された擬似乱数列は、ＸＯＲ回路（スクランブル回路）３１７に入力される。ＸＯＲ回路３１７は、上述したように、不揮発性メモリ１２０に対して書込み／読出しをする入力データ列と、出力ビット反転回路３１６から入力された擬似乱数列とのＸＯＲをとることによって、対象のデータに対するスクランブル／デスクランブル処理を実行する。
【０２５８】
以上のように構成および動作することで、第１２実施形態によれば、回路規模の増大を抑制しつつ、ページ間方向とカラム間方向との両方で所望の乱数性能を実現することが可能となる。なお、撹拌機能が不要な場合には、出力ビット反転回路３１６を削除することも可能である。
【０２５９】
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
【０２６０】
第１３実施形態
第１２実施形態では、出力ビット反転回路３１６が、出力ビット回転回路３１５の出力とＸＯＲ回路３１７の入力との間に配置されて、入力データ列とのＸＯＲをとる前の擬似乱数列を撹拌するように構成されていたが、この構成に限られるものではない。
【０２６１】
たとえば図５４に示すように、出力ビット反転回路３１６をＸＯＲ回路３１７の出力側に配置することも可能である。その場合、出力ビット反転回路３１６は、入力データ列とのＸＯＲをとった後のデータ列を撹拌する。
【０２６２】
また、たとえば図５５に示すように、出力ビット反転回路３１６をＸＯＲ回路３１７の入力側に配置することも可能である。その場合、出力ビット反転回路３１６は、出力ビット回転回路３１５から出力された擬似乱数列とのＸＯＲをとる前の入力データ列を撹拌する。
【０２６３】
さらにまた、出力ビット回転回路３１５の配置も、第１２実施形態で例示した箇所（図３４参照）に限られない。たとえば図５６に示すように、出力ビット回転回路３１５をＸＯＲ回路３１７の出力側に配置することも可能である。その場合、出力ビット回転回路３１５は、ＸＯＲ回路３１７から出力されたデータ列に対して上述した回転処理を実行するように構成される。ただし、出力ビット回転回路３１５がＸＯＲ回路３１７の出力側に配置されている場合、不揮発性メモリに書き込まれる入力データ列に対して実行される回転処理と、不揮発性メモリから読み出した入力データ列に対して実行される回転処理とで、回転の方向を逆にする必要がある。
【０２６４】
その他の構成、動作および効果は、上述した実施形態と同様であるため、ここでは重複する説明を省略する。
【０２６５】
第１４実施形態
第１４実施形態では、上述の実施形態において例示したランダマイザの検定結果について、いくつかの比較例を挙げつつ、図面を用いて詳細に説明する。
【０２６６】
以下の説明においては、ＣＲＣ−３２方式の乱数生成器（第１例）、第１実施形態において図４に例示した線形帰還シフトレジスタ１（第２例）、図５７に示す複数のＭ系列を組み合わせて構成された擬似乱数生成器（第３例）、および、フィボナッチ数列を用いた乱数生成器（第４例）の４タイプの擬似乱数生成器を比較例として挙げる。なお、図５７に示すように、第３例として挙げる擬似乱数生成器５は、組み合わせる複数のＭ系列の擬似乱数生成器として、Ｍ１３系列の擬似乱数生成器１１と、Ｍ１７系列の擬似乱数生成器１２と、Ｍ１９系列の擬似乱数生成器１３と、Ｍ２３系列の擬似乱数生成器１４とを備え、また、各擬似乱数生成器１１〜１４から出力された擬似乱数列から所定ビット（本説明では８ビット）の擬似乱数列を生成する乱数出力部１５とを備える。
【０２６７】
一方、上述した実施形態にかかるランダマイザ、すなわち、互いに性質の異なる擬似乱数生成器から出力された擬似乱数列のＸＯＲをとることで新たな擬似乱数列を生成するランダマイザとしては、第２例として挙げた線形帰還シフトレジスタ１から出力された擬似乱数列（８ビット）と、第３例として挙げた複数のＭ系列を組み合わせて構成された擬似乱数生成器５から出力された擬似乱数列（８ビット）との出力のＸＯＲをとる擬似乱数生成器を例示する。
【０２６８】
図５８は、米国商務省標準技術局で既定されている統計的仮説検定（いわゆるＮＩＳＴ検定）を用いて検定した第１の結果（合格率）を示すグラフである。また、図５９は、同検定を用いて検定した第２の結果（Ｐ値）を示すグラフである。なお、ＮＩＳＴ検定では、３Ｄ構造ＮＡＮＤ型フラッシュメモリを対象とし、その記憶素子の積層数（ＢｉＣＳの層数）が６４層、１２８層、２５６層および５１２層である場合を想定した。また、ＮＩＳＴ検定では、たとえば積層数が６４層の場合では、６４層に相当する擬似乱数列の全体を検定対象とする場合（６４層分割なし）と、６４層に相当する擬似乱数列を６４分割した各空間を検定対象とした場合（６４層６４分割）とのそれぞれについて検定を実行した。同様に、積層数が１２８層の場合、２５６層の場合、および、５１２層の場合についても、それぞれ擬似乱数列を分割しない場合と積層数で分割した場合とのそれぞれについて検定を実行した。
【０２６９】
図５８および図５９において、“黒塗りの丸形”は第１例の検定結果を示し、“黒塗りの四角形”は第２例の検定結果を示し、“黒塗りの三角形”は第３例の検定結果を示し、“白抜きの四角形”は第４例の検定結果を示し、“白抜きの丸形”は上述した実施形態にかかるランダマイザの検定結果を示している。
【０２７０】
図５８から分かるように、４つの比較例のうちでは、第４例として挙げたフィボナッチ数列を用いた擬似乱数生成器により生成された擬似乱数列が最も良い乱数性を示している。一方、“白抜きの丸形”で示された上記実施形態にかかるランダマイザにより生成された擬似乱数列は、組み合わせられた元の擬似乱数生成器、すなわち第２例の擬似乱数生成器および第３例の擬似乱数生成器それぞれで生成された擬似乱数列よりもよい乱数性を示している。これは、上述した実施形態のように、互いに性質の異なる擬似乱数生成器から出力された擬似乱数列のＸＯＲをとることで、より乱数性に優れた新たな擬似乱数列が生成されることを意味している。また、互いに性質の異なる擬似乱数生成器から出力された擬似乱数列のＸＯＲをとることでより乱数性に優れた新たな擬似乱数列が生成されることは、図５９に示すＰ値の変化からも明らかな効果である。
【０２７１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２７２】
１…線形帰還シフトレジスタ、２…レジスタ、３…ＸＯＲ演算部、４…乱数出力部、１０，３０…半導体記憶装置、５０，１３１〜１３Ｎ，１０７１，１０７２…擬似乱数生成器、５１，１６０，３１１，２０２２…シードテーブル、５２…レジスタ、５２Ａ…ページ番号、５２Ｂ…フレームオフセット番号、５３…シード選択部、５４…シード設定部、５５…巡回制御部、５７，５８…ＸＯＲ演算回路、１００…メモリコントローラ、１０１…コントローラ、１０２…ＲＡＭ、１０３…ホストインタフェース、１０４…バッファメモリ、１０５…ＥＣＣ回路、１０６…メモリインタフェース、１０７，３０７…ランダマイザ、１１０…メモリバス、１２０…不揮発性メモリ、１４１〜１４Ｎ…スイッチ回路、１５０，３１７，１０７３，１０７４，２０２３…ＸＯＲ回路、１６１…シード、１６２…可変ビット、１６３，１６４…固定ビット、２００，２１０，２２０，２２０Ａ，２３０，２４０，２５０，２６０…主乱数生成器、２０１…フリップフロップ、２０２…入力回路、２０３…出力タップ、２０４，２２１ａ〜２２１ｃ，２３１ａ〜２３１ｂ，２５１ａ〜２５１ｂ，２６１ａ〜２６１ｄ…出力セレクタ、２０５，２２２，２３２，２５２，２６２…出力セレクト信号、３１２…シード選択回路、３１３…シードシフト回路、３１４…擬似乱数列生成回路、３１５…出力ビット回転回路、３１６…出力ビット反転回路、２０２１…セレクタ、２０２４，２０２５…入力セレクト信号
【図１】
2018045501.tif 000011
【図２】
2018045501.tif 000012
【図３】
2018045501.tif 000013
【図４】
2018045501.tif 000014
【図５】
2018045501.tif 000015
【図６】
2018045501.tif 000016
【図７】
2018045501.tif 000017
【図８】
2018045501.tif 000018
【図９】
2018045501.tif 000019
【図１０】
2018045501.tif 000020
【図１１】
2018045501.tif 000021
【図１２】
2018045501.tif 000022
【図１３】
2018045501.tif 000023
【図１４】
2018045501.tif 000024
【図１５】
2018045501.tif 000025
【図１６】
2018045501.tif 000026
【図１７】
2018045501.tif 000027
【図１８】
2018045501.tif 000028
【図１９】
2018045501.tif 000029
【図２０】
2018045501.tif 000030
【図２１】
2018045501.tif 000031
【図２２】
2018045501.tif 000032
【図２３】
2018045501.tif 000033
【図２４】
2018045501.tif 000034
【図２５】
2018045501.tif 000035
【図２６】
2018045501.tif 000036
【図２７】
2018045501.tif 000037
【図２８】
2018045501.tif 000038
【図２９】
2018045501.tif 000039
【図３０】
2018045501.tif 000040
【図３１】
2018045501.tif 000041
【図３２】
2018045501.tif 000042
【図３３】
2018045501.tif 000043
【図３４】
2018045501.tif 000044
【図３５】
2018045501.tif 000045
【図３６】
2018045501.tif 000046
【図３７】
2018045501.tif 000047
【図３８】
2018045501.tif 000048
【図３９】
2018045501.tif 000049
【図４０】
2018045501.tif 000050
【図４１】
2018045501.tif 000051
【図４２】
2018045501.tif 000052
【図４３】
2018045501.tif 000053
【図４４】
2018045501.tif 000054
【図４５】
2018045501.tif 000055
【図４６】
2018045501.tif 000056
【図４７】
2018045501.tif 000057
【図４８】
2018045501.tif 000058
【図４９】
2018045501.tif 000059
【図５０】
2018045501.tif 000060
【図５１】
2018045501.tif 000061
【図５２】
2018045501.tif 000062
【図５３】
2018045501.tif 000063
【図５４】
2018045501.tif 000064
【図５５】
2018045501.tif 000065
【図５６】
2018045501.tif 000066
【図５７】
2018045501.tif 000067
【図５８】
2018045501.tif 000068
【図５９】
2018045501.tif 000069