(57)【要約】【課題】時間的にも相互相関がない複数の乱数を単純な構成で発生する乱数生成器を提供する。【解決手段】  乱数生成器は、Ｍ個（Ｍは２以上の整数）の乱数系列をそれぞれ生成する互いに独立なＭ個の乱数発生器と、Ｍ個の乱数系列の間における相対的な時間差を調整することにより、Ｎ通り（Ｎは２以上の整数）の異なる相対的時間差をそれぞれ有するＮセットのＭ個の乱数系列を出力する遅延調整部と、ＮセットのＭ個の乱数系列の各セットについて当該セットに含まれるＭ個の乱数系列間での排他的論理和を演算する論理演算部とを含む。【選択図】図２
2020119313.tif 000002
【特許請求の範囲】
【請求項１】
Ｍ個（Ｍは２以上の整数）の乱数系列をそれぞれ生成する互いに独立なＭ個の乱数発生器と、
前記Ｍ個の乱数系列の間における相対的な時間差を調整することにより、Ｎ通り（Ｎは２以上の整数）の異なる相対的時間差をそれぞれ有するＮセットのＭ個の乱数系列を出力する遅延調整部と、
前記ＮセットのＭ個の乱数系列の各セットについて当該セットに含まれるＭ個の乱数系列間での排他的論理和を演算する論理演算部と
を含む乱数生成器。
【請求項２】
前記Ｍ個の乱数発生器は第１の乱数発生器と第２の乱数発生器とを含む２個の乱数発生器である、請求項１記載の乱数生成器。
【請求項３】
前記遅延調整部は前記第１の乱数発生器が出力する乱数系列を入力とする１つのシフトレジスタであり、前記シフトレジスタに含まれるＮ−１個のフリップフロップによる遅延により生成された互いに異なる遅延量を有するＮ個の乱数系列と、前記第２の乱数発生器が出力する１つの乱数系列との組み合わせにより、前記Ｎ通りの異なる相対的時間差を実現する、請求項２記載の乱数生成器。
【請求項４】
前記遅延調整部は、前記第１の乱数発生器が出力する乱数系列を入力とする第１のシフトレジスタと、前記第２の乱数発生器が出力する乱数系列を入力とする第２のシフトレジスタとを含み、前記第１のシフトレジスタに含まれるＮ−１個のフリップフロップによる遅延により生成された互いに異なる遅延量を有するＮ個の第１の乱数系列と、前記第２のシフトレジスタに含まれるＮ−１個のフリップフロップによる遅延により生成された互いに異なる遅延量を有するＮ個の第２の乱数系列との組み合わせにより、前記Ｎ通りの異なる相対的時間差を実現する、請求項２記載の乱数生成器。
【請求項５】
前記Ｍ個の乱数発生器の物理的位置から、前記論理演算部が演算した排他的論理和を入力とする回路の物理的位置迄の信号伝搬経路に沿って、前記シフトレジスタに含まれるフリップフロップが配置される、請求項３又は４記載の乱数生成器。
【請求項６】
Ｍ個（Ｍは２以上の整数）の乱数系列をそれぞれ生成する互いに独立なＭ個の乱数発生器と、
前記Ｍ個の乱数系列の間における相対的な時間差を調整することにより、Ｎ通り（Ｎは２以上の整数）の異なる相対的時間差をそれぞれ有するＮセットのＭ個の乱数系列を出力する遅延調整部と、
前記ＮセットのＭ個の乱数系列の各セットについて当該セットに含まれるＭ個の乱数系列間での排他的論理和を演算する論理演算部と、
前記論理演算部が演算した排他的論理和を入力とする回路と
を含み、前記遅延調整部は前記Ｍ個の乱数系列の少なくとも１つを入力とする少なくとも１つのシフトレジスタであり、前記Ｍ個の乱数発生器の物理的位置から前記回路の物理的位置迄の信号伝搬経路に沿って前記シフトレジスタに含まれるフリップフロップが配置される半導体装置。
【請求項７】
前記フリップフロップが配置される信号伝搬経路は分岐を含む、請求項６記載の半導体装置。
【請求項８】
互いに独立なＭ個（Ｍは２以上の整数）の乱数系列を生成し、
前記Ｍ個の乱数系列の間における相対的な時間差を調整することにより、Ｎ通り（Ｎは２以上の整数）の異なる相対的時間差をそれぞれ有するＮセットのＭ個の乱数系列を出力し、
前記ＮセットのＭ個の乱数系列の各セットについて当該セットに含まれるＭ個の乱数系列間での排他的論理和を演算する
処理をコンピュータに実行させるためのプログラム。
【請求項９】
前記Ｍ個の乱数系列は２個の乱数系列である、請求項８記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願開示は、乱数生成器、半導体装置、及びプログラムに関する。
【背景技術】
【０００２】
乱数発生器は、様々な分野において用いられる。真性乱数を回路により発生させることは困難であり、通常、線形帰還シフトレジスタやメルセンヌツイスタ等の疑似乱数生成器により、確定的な計算を実行して生成した疑似乱数が用いられる。乱数には規則性がないこと、即ち出現する乱数値間に空間的及び時間的に相関がないことが要求される。疑似乱数では、厳密な意味で無規則性を実現することは困難であるが、例えば非常に長い周期を実現する等により、実用的な意味で無規則性と見なせる状態を実現している。
【０００３】
例えば金融工学等の分野において、複雑な性質を有するモデルを対象とするシミュレーションでは、モンテカルロシミュレーションと呼ばれる確率的な手法が多用される。モンテカルロシミュレーションでは、対象モデルの状態遷移を乱数で確率的に決める試行を基本として、この試行を多数回行うことによって対象モデルをシミュレーションする。
【０００４】
また例えば計算機工学の分野において、ストカスティック演算を用いた計算アルゴリズムが、省電力、省スペース、及びエラー耐性の観点から最近注目されている。ストカスティック演算の１つの実装では、Stochastic  Number（ＳＮ）と呼ばれる１と０とで構成された１つのランダムビット列により１つの変数を表現する。変数の有する値は、ビット列中における１の出現確率（０〜１）により表現される。ビット列中での０及び１の順序と位置とは意味を持たず、ビット列が長いほど精度が向上する。一般の計算機で用いられる２進数をＳＮ変数に変換するためには乱数発生器が用いられる。２つのＳＮ変数同士の乗算は２入力ＡＮＤゲートにより実装され、２つのＳＮ変数同士の加算は２入力の選択確率が０．５ずつである２入力マルチプレクサにより実装できる。この場合、加算器毎に乱数発生器が１つ必要になる。
【０００５】
モンテカルロ・シミュレーションであってもストカスティック演算であっても、ハードウェアに実装するためには乱数発生器が必要になる。ハードウェアの性質を活かしてモンテカルロ・シミュレーションを並列化する場合、並列化されたシミュレーションが同じ乱数系列を使ってしまうと、全てが同じ試行になってしまい並列化の意味が無くなるという問題がある。またストカスティック演算において、互いに相関が無い変数同士で演算をする場合には、それぞれの変数に関与する乱数が互いに独立な乱数（互いに相関の無い乱数）でないと、演算精度が損なわれるという問題がある。
【０００６】
複数の乱数を生成する乱数生成器は幾つか提案されている（特許文献１及び２並びに非特許文献１参照）。しかしながら、生成した複数の乱数系列間で相互相関が発生したり、或いは乱数系列毎に必要になる回路によるオーバーヘッドが大きかったりするという問題がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１１−２４８９４号公報
【特許文献２】特開平４−４６４１３号公報
【非特許文献】
【０００８】
【非特許文献１】渡部信吾、阿部公輝、“疑似乱数生成器Mersenne  TwisterのVLSI設計”、情報処理学会研究報告コンピュータセキュリティ（ＣＳＥＣ）、２００５（４１（２００５−ＣＳＥＣ−０２９）），１３−１８（２００５−０５−１９）
【発明の概要】
【発明が解決しようとする課題】
【０００９】
以上を鑑みると、時間的にも相互相関がない複数の乱数を単純な構成で発生する乱数生成器が望まれる。
【課題を解決するための手段】
【００１０】
乱数生成器は、Ｍ個（Ｍは２以上の整数）の乱数系列をそれぞれ生成する互いに独立なＭ個の乱数発生器と、前記Ｍ個の乱数系列の間における相対的な時間差を調整することにより、Ｎ通り（Ｎは２以上の整数）の異なる相対的時間差をそれぞれ有するＮセットのＭ個の乱数系列を出力する遅延調整部と、前記ＮセットのＭ個の乱数系列の各セットについて当該セットに含まれるＭ個の乱数系列間での排他的論理和を演算する論理演算部とを含む。
【発明の効果】
【００１１】
少なくとも１つの実施例によれば、時間的にも相互相関がない複数の乱数を単純な構成で発生する乱数生成器が提供される。
【図面の簡単な説明】
【００１２】
【図１】乱数生成器の構成の一例を示すブロック図である。
【図２】乱数生成器における乱数分配器１２の一般的な構成の一例を示す図である。
【図３】第１の実施例による乱数分配器１２の構成の一例を示す図である。
【図４】第２の実施例による乱数分配器１２の構成の一例を示す図である。
【図５】第３の実施例による乱数分配器１２の構成の一例を示す図である。
【図６】乱数生成装置を搭載する半導体装置の構成の一例を示す図である。
【図７】乱数生成器をソフトウェアにより実装する装置の構成を示す図である。
【発明を実施するための形態】
【００１３】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。以下の図において、同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
【００１４】
図１は、乱数生成器の構成の一例を示すブロック図である。図１及び以降の図において、各ボックスで示される各機能ブロックと他の機能ブロックとの境界は、基本的には機能的な境界を示すものであり、物理的な位置の分離、電気的な信号の分離、制御論理的な分離等に対応するとは限らない。乱数生成器は、各機能ブロックの機能を有する電子回路ブロックを組み合わせて実現したハードウェア構成でもよいし、電子回路である汎用のプロセッサにおいてソフトウェアを実行することにより各機能ブロックの機能を実現したソフトウェア構成でもよい。ハードウェアの場合、各機能ブロックは、他のブロックと物理的にある程度分離された１つのハードウェアモジュールであってもよいし、或いは他のブロックと物理的に一体となったハードウェアモジュール中の１つの機能を示したものであってもよい。ソフトウェアの場合、各機能ブロックは、他のブロックと論理的にある程度分離された１つのソフトウェアモジュールであってもよいし、或いは他のブロックと論理的に一体となったソフトモジュール中の１つの機能を示したものであってもよい。
【００１５】
図１に示される乱数生成器は、乱数発生器１０、乱数発生器１１、及び乱数分配器１２を含む。乱数発生器１０、乱数発生器１１、及び乱数分配器１２は、クロック信号ＣＬＫに同期して動作する。乱数発生器１０及び１１は各乱数値がｎビット（ｎは１以上の整数）である乱数系列（乱数時系列）を生成する。２個の乱数発生器１０及び１１がそれぞれ生成した乱数系列ＲＮＤ＿Ａ及び乱数系列ＲＮＤ＿Ｂは乱数分配器１２に入力される。乱数分配器１２は、乱数系列ＲＮＤ＿Ａ及び乱数系列ＲＮＤ＿Ｂに基づいて、各乱数値がｎビットであるＮ個（Ｎは３以上の整数）以上の乱数系列ＲＮＤ＿０乃至ＲＮＤ＿（Ｎ−１）を生成する。
【００１６】
図１では、２個の乱数発生器が設けられているが、乱数発生器の個数は２個に限定されない。一般的には、Ｍ個（Ｎは２以上の整数）の乱数系列をそれぞれ生成する互いに独立なＭ個の乱数発生器が設けられてよい。
【００１７】
乱数発生器１０及び乱数発生器１１は、デバイス中の熱雑音などのように本質的にランダムな物理現象を利用することによって乱数を生成する物理乱数生成器であってもよいが、実用的に充分に規則性のない疑似乱数を生成する疑似乱数生成器であってよい。以下の説明において、乱数の性質について、独立である、相関が無い、無相関である、規則性がない、無規則である、周期性がない、無周期である、等の表現を用いる場合、実用的な意味においてそれらの性質を満たしていると言える状態を示す。
【００１８】
ここで実用的な意味においてそれら性質が満たされていると言えるためには、使用が想定されている疑似乱数生成器が提供できる最善の状態が達成されていることが好ましい。例えば疑似乱数生成器としてメルセンヌツイスターを用いる場合、乱数の周期として２１９３３７−１等の非常に長い周期が得られるので、実用的な意味において、生成される乱数には周期性がなく時間的に無相関であると考えてよい。しかしながら、乱数発生器１０及び１１としてメルセンヌツイスターを用いた場合、生成される２つの乱数系列が１クロックずれた同一の乱数系列となっているような状態では、これら２つの乱数系列が実用的に無相関であるとは言えない。生成される２つの乱数系列が、例えば（２１９３３７）／２クロックずれた同一の乱数系列となっているような状態であれば、これら２つの乱数系列が実用的に無相関であると言える。
【００１９】
上記の意味において、乱数発生器１０及び乱数発生器１１は互いに独立な乱数発生器であり、それぞれが生成する乱数系列ＲＮＤ＿Ａ及び乱数系列ＲＮＤ＿Ｂは互いに無相関である。乱数系列ＲＮＤ＿Ａは、同一クロックサイクルで比較したときにｎ個のビット間の相関がなく、異なるクロックサイクル間で比較したときに同一ビット内での相関がなく且つ異なるビット間での相関もない。乱数系列ＲＮＤ＿Ｂについても同様である。また乱数系列ＲＮＤ＿Ａと乱数系列ＲＮＤ＿Ｂとの間においても、同一クロックサイクルで比較したときに任意のビット間の相関がなく、異なるクロックサイクル間で比較したときに任意のビット間の相関もない。
【００２０】
乱数発生器１０及び１１としては、例えばメルセンヌツイスターやｘｏｒｓｈｉｆｔ＋等の疑似乱数生成器であってよい。またメルセンヌツイスターと比較して乱数の性能は劣ることになるが、例えば線形帰還シフトレジスタ等を疑似乱数生成器として用いることは、排除されるものではない。
【００２１】
図１に示される乱数生成器において、乱数分配器１２は、後述するようにフリップフロップ等による遅延調整及び排他的論理和演算により実現することが可能である。また２個の乱数生成器が設けられていれば、所望の数の互いに無相関な乱数系列ＲＮＤ＿０乃至ＲＮＤ＿（Ｎ−１）を生成することができる。従って、電子回路により乱数生成器を実装する場合であれば、単純な回路構成且つ小さな回路面積で、所望の個数の乱数系列を生成することができる。またソフトウェアにより乱数生成器を実装する場合であれば、単純なプログラム構成且つ小さなプログラムサイズで、所望の個数の乱数系列を生成することができる。
【００２２】
図２は、乱数生成器における乱数分配器１２の一般的な構成の一例を示す図である。図２に示す乱数生成器において、乱数分配器１２は、遅延調整部２０、遅延調整部２１、及びＮ個のＸＯＲ（排他的論理和）ゲート２２−０乃至２２−Ｎ−１を含む。遅延調整部２０及び２１は、クロック信号ＣＬＫに同期して２個の乱数系列ＲＮＤ＿Ａ及びＲＮＤ＿Ｂのそれぞれの遅延を調整することにより、２個の乱数系列ＲＮＤ＿Ａ及びＲＮＤ＿Ｂの間における相対的な時間差を調整する。遅延調整部２０及び２１は、２個の乱数系列ＲＮＤ＿Ａ及びＲＮＤ＿Ｂの間における相対的な時間差を調整することにより、Ｎ通り（Ｎは２以上の整数）の異なる相対的時間差をそれぞれ有するＮセットの２個の乱数系列を出力する。
【００２３】
説明の便宜上、各乱数系列が１ビットの乱数値であるとする。時刻ｔ（クロックサイクルｔ）における乱数系列ＲＮＤ＿Ａの値をａ（ｔ）とし、時刻ｔ（クロックサイクルｔ）における乱数系列ＲＮＤ＿Ｂの値をｂ（ｔ）とする。遅延調整部２０及び２１は、例えば、ＸＯＲゲート２２−ｋ（ｋ＝０，１，２，・・・Ｎ−１）への入力としてａ（ｔ）及びｂ（ｔ−ｋ）を出力してよい。この場合、ＸＯＲゲート２２−０への入力であるａ（ｔ）とｂ（ｔ）との相対的な時間差はゼロであり、ＸＯＲゲート２２−１への入力であるａ（ｔ）とｂ（ｔ−１）との相対的な時間差は１クロックサイクルである。同様にして、０以上Ｎ−１以下の任意のｋに対して、ＸＯＲゲート２２−ｋへのａ（ｔ）とｂ（ｔ−ｋ）との相対的な時間差はｋクロックサイクルである。この例のように、遅延調整部２０及び２１は、Ｎ通りの異なる相対的時間差（この例では０，１，２，３，・・・Ｎ−１クロックサイクル差）をそれぞれ有するＮセットの２個の乱数系列を出力する。なおＮ通りの異なる相対的時間差を実現する形態については、この例に限られない。
【００２４】
論理演算部として機能するＮ個のＸＯＲゲート２２−０乃至２２−Ｎ−１は、Ｎセットの２個の乱数系列の各セットについて当該セットに含まれる２個の乱数系列間での排他的論理和を演算する。Ｎ個の排他的論理和出力は、各乱数値がｎビットであるＮ個の乱数系列ＲＮＤ＿０乃至ＲＮＤ＿（Ｎ−１）となる。なおＮ個のＸＯＲゲート２２−０乃至２２−Ｎ−１の各々は、図示の都合上、１つのＸＯＲゲートとして示されているが、実際には、１ビットを処理する２入力のＸＯＲゲートがｎ個並列に設けられたものである。例えば各乱数系列が１ビットからなる場合、ＸＯＲゲート２２−０乃至２２−Ｎ−１の各々は、１ビットを処理する１個の２入力ＸＯＲゲートとなる。また例えば各乱数系列が１０ビットからなる場合、ＸＯＲゲート２２−０乃至２２−Ｎ−１の各々は、１ビットを処理する２入力ＸＯＲゲートが１０個並列に設けられたものとなる。
【００２５】
なお図２及び以降の図で示す構成において、論理演算部としてＸＯＲゲートによる排他的論理和演算を用いるが、Ｎ個の乱数系列ＲＮＤ＿０乃至ＲＮＤ＿（Ｎ−１）を生成するための演算としてはＸＯＲではなくＸＮＯＲ（排他的論理和の反転値）であってもよい。論理演算部における演算としてＸＮＯＲを用いる場合であっても、その演算は排他的論理和を演算してその反転値を計算していることと等価であるので、当該論理演算部においては排他的論理和を演算していると解釈することができる。従って、論理演算部による演算としてＸＮＯＲを用いる構成も、本願が意図する権利範囲内に含まれる。
【００２６】
上記のようにして生成されたＮ個の乱数系列ＲＮＤ＿０乃至ＲＮＤ＿（Ｎ−１）から取り出した任意の２ビットは、同一クロックサイクルで比較したときにビット間の相関がなく、異なるクロックサイクル間で比較したときにビット間での相関もない。これについて以下に簡単に説明する。
【００２７】
まず説明の便宜上、前述のように各乱数系列が１ビットの乱数値であり、ＸＯＲゲート２２−ｋ（ｋ＝０，１，２，・・・Ｎ−１）への入力がａ（ｔ）及びｂ（ｔ−ｋ）であるとする。この場合、例えば、乱数系列ＲＮＤ＿ｉの１ビットの値はａ（ｔ）とｂ（ｔ−ｉ）とのＸＯＲ値であり、乱数系列ＲＮＤ＿ｊ（ｊ≠ｉ）の１ビットの値はａ（ｔ）とｂ（ｔ−ｊ）とのＸＯＲ値である。このときｊ≠ｉであるのでｂ（ｔ−ｉ）とｂ（ｔ−ｊ）との間の相関が存在しないとの前提から、直感的に、同一のクロックサイクルにおける上記２つのＸＯＲ値の間の相関はゼロとなることが分かる。
【００２８】
また更に、異なるクロックサイクル間におけるこれら２つのＸＯＲ値の相互相関を考えるために、一方のＸＯＲ値を時間軸上でずらすことを考える。例えばａ（ｔ）とｂ（ｔ−ｉ）とのＸＯＲ値を時間軸上でずらしてｉ＝ｊとなるサイクルに移動させた場合、この値はａ（ｔ＋ｉ−ｊ）とｂ（ｔ−ｊ）とのＸＯＲ値となる。このａ（ｔ＋ｉ−ｊ）とｂ（ｔ−ｊ）とのＸＯＲ値と、もう一方のａ（ｔ）とｂ（ｔ−ｊ）とのＸＯＲ値との間の相関は、ａ（ｔ＋ｉ−ｊ）とａ（ｔ）との間の相関が存在しないとの前提から、ゼロになることが分かる。時間軸上でのずれが上記以外の場合には、明らかに２つのＸＯＲ値の間に相関は発生しない。
【００２９】
前述のように、一般的には、Ｍ個の乱数系列をそれぞれ生成する互いに独立なＭ個の乱数発生器が設けられてよい。そして、遅延調整部が、Ｍ個の乱数系列の間における相対的な時間差を調整することにより、Ｎ通りの異なる相対的時間差をそれぞれ有するＮセットのＭ個の乱数系列を出力してよい。また更に、論理演算部（ＸＯＲゲート群）が、ＮセットのＭ個の乱数系列の各セットについて当該セットに含まれるＭ個の乱数系列間での排他的論理和を演算してよい。しかしながら上述のように、２個の乱数発生器を用いるだけであっても、同一クロックサイクルにおいても、更には異なるクロックサイクル間においても、互いに相関のない任意の個数の乱数系列を発生することが可能である。従って、２個の乱数発生器を設ける構成により、少ない回路面積及び少ない計算量で、互いに相関のない所望の個数の乱数系列を発生することが可能である。
【００３０】
なお最低でも２個の乱数発生器を用いることを鑑みると、出力乱数系列の個数Ｎは３以上であることが、乱数発生器の数よりも多くの乱数系列を生成するという意味において好ましい。但し、出力乱数系列の個数Ｎが２に等しい場合であっても、図１又は図２で説明した構成を適用することは可能である。また出力乱数系列ＲＮＤ＿０乃至ＲＮＤ＿（Ｎ−１）に加え、乱数発生器１０の乱数系列ＲＮＤ＿Ａ及び乱数発生器１１の乱数系列ＲＮＤ＿Ｂを、乱数生成器の出力乱数系列として扱ってもよい。
【００３１】
図３は、第１の実施例による乱数分配器１２の構成の一例を示す図である。図３に示す乱数生成器は、図２に示す乱数生成器において、乱数分配器１２の遅延調整部２０及び遅延調整部２１の具体的な構成を示したものに相当する。
【００３２】
図３に示す乱数生成器において、乱数分配器１２は、Ｎ−１個のフリップフロップ２０−１乃至２０−Ｎ−１、Ｎ−１個のフリップフロップ２１−１乃至２１−Ｎ−１、及びＮ個のＸＯＲゲート２２−０乃至２２−Ｎ−１を含む。Ｎ−１個のフリップフロップ２０−１乃至２０−Ｎ−１は、図２の遅延調整部２０に相当し、乱数発生器１０が出力する乱数系列を入力とする第１のシフトレジスタとして機能する。Ｎ−１個のフリップフロップ２１−１乃至２１−Ｎ−１は、図２の遅延調整部２１に相当し、乱数発生器１１が出力する乱数系列を入力とする第２のシフトレジスタとして機能する。各フリップフロップのクロック入力端子には、クロック信号ＣＬＫが印加される。
【００３３】
第１及び第２のシフトレジスタは、２個の乱数系列ＲＮＤ＿Ａ及びＲＮＤ＿Ｂのそれぞれの遅延を調整することにより、２個の乱数系列ＲＮＤ＿Ａ及びＲＮＤ＿Ｂの間における相対的な時間差を調整する。このように２個の乱数系列ＲＮＤ＿Ａ及びＲＮＤ＿Ｂの間における相対的な時間差を調整することにより、Ｎ通り（Ｎは２以上の整数）の異なる相対的時間差をそれぞれ有するＮセットの２個の乱数系列が得られる。
【００３４】
より具体的には、第１のシフトレジスタに含まれるＮ−１個のフリップフロップ２０−１乃至２０−Ｎ−１による遅延により、互いに異なる遅延量を有するＮ個の第１の乱数系列が生成される。また第２のシフトレジスタに含まれるＮ−１個のフリップフロップ２１−１乃至２１−Ｎ−１による遅延により、互いに異なる遅延量を有するＮ個の第２の乱数系列が生成される。これら第１の乱数系列と第２の乱数系列との組み合わせにより、Ｎ通りの異なる相対的時間差を実現する。
【００３５】
上述のＮ通りの異なる相対的時間差を実現するために、図３に示される乱数分配器１２では、ＸＯＲゲート２２−ｋ（ｋ＝０，１，２，・・・Ｎ−１）への入力として、ｋが増加するに従い乱数系列ＲＮＤ＿Ａの遅延が大きくなる一方で乱数系列ＲＮＤ＿Ｂの遅延が小さくなるように、各シフトレジスタの信号伝搬方向を設定する。ここで説明の便宜上、前述のように各乱数系列が１ビットの乱数値であるとする。ＸＯＲゲート２２−ｋに入力する乱数系列は、ｋクロックサイクル遅れた乱数系列ＲＮＤ＿Ａの値ａ（ｔ−ｋ）と、Ｎ−１−ｋクロックサイクル遅れた乱数系列ＲＮＤ＿Ｂの値ｂ（ｔ＋ｋ−Ｎ＋１）とである。従って、ＸＯＲゲート２２−ｋの出力である乱数系列ＲＮＤ＿ｋは、
a(t-k)∧b(t+k-N+1)
となる。ここで演算子“∧”はＸＯＲを表す。同様にして、ＸＯＲゲート２２−ｍ（ｍ＝０，１，２，・・・Ｎ−１）の出力である乱数系列ＲＮＤ＿ｍは、
a(t-m)∧b(t+m-N+1)
となる。従って、互いにｊクロックサイクルずれた乱数系列ＲＮＤ＿ｋと乱数系列ＲＮＤ＿ｍとの相互相関Ｒ（ｊ）は、期待値Ｅ［・］を用いて、以下のように表される。
R(j)=E[RND_k(t)・RND_m(t+j)]
=E[a(t-k)∧b(t+k-N+1)・a(t-m+j)∧b(t+m-N+1+j)]            （１）
ここで計算を簡単にするために、各ビットの値を［０，１］ではなく［−１，１］で表現する。この場合、乗算とＸＯＲ演算との関係はｘ・ｙ＝−ｘ∧ｙとなる。従って、式（１）の値は以下のようになる。
R(j)=-E[a(t-k)∧b(t+k-N+1)∧a(t-m+j)∧b(t+m-N+1+j)]            （２）
ここでｊ＝ｍ−ｋのとき、式（２）は更に以下のようになる。
R(j)=-E[a(t-k)∧b(t+k-N+1)∧a(t-k)∧b(t+2m-N+1-k)]
=E[b(t+k-N+1)∧b(t+2m-N+1-k)]
=0
何故なら同じ値ａ（ｔ−ｋ）同士のＸＯＲは−１になるからである。また更に、ｂ（ｔ＋ｋ−Ｎ＋１）とｂ（ｔ＋２ｍ−Ｎ＋１−ｋ）とは、乱数系列ｂ（ｔ）の異なるクロックサイクルの値であるので、互いの相関はゼロだからである。
【００３６】
同様に、ｊ＝ｋ−ｍのとき、式（２）の値は以下のようになる。
R(j)=-E[a(t-k)∧b(t+k-N+1)∧a(t-2m+k)∧b(t+k-N+1)]
=E[b(t+k-N+1)∧b(t+2m-N+1-k)]
=0
何故なら同じ値ｂ（ｔ＋ｋ−Ｎ＋１）同士のＸＯＲは−１になるからである。また更に、ａ（ｔ−ｋ）とａ（ｔ−２ｍ＋ｋ）とは、乱数系列ａ（ｔ）の異なるクロックサイクルの値であるので、互いの相関はゼロだからである。
【００３７】
またｊの値が上記以外の場合には、式（２）のＥ［・］内部の各項は互いに相関がないことが明らかであり、式（２）の値はゼロになる。従って、ｊの値に関わらず、相互相関Ｒ（ｊ）の値は常にゼロである。即ち、乱数系列ＲＮＤ＿０乃至ＲＮＤ＿（Ｎ−１）から選んだ任意の２つの乱数系列ＲＮＤ＿ｋ及び乱数系列ＲＮＤ＿ｍの間に相関はないことが分かる。
【００３８】
上述のように図３に示す乱数生成器では、２つのシフトレジスタと複数のＸＯＲゲートを用いる単純な構成により乱数分配器１２を実現できる。従って、単純な回路構成且つ小さな回路面積で、所望の個数の乱数系列を生成することができる。
【００３９】
図４は、第２の実施例による乱数分配器１２の構成の一例を示す図である。図４に示す乱数生成器は、図２に示す乱数生成器において、乱数分配器１２の遅延調整部２０及び遅延調整部２１の具体的な構成を示したものに相当する。
【００４０】
図４に示す乱数生成器において、乱数分配器１２は、Ｎ−１個のフリップフロップ２０−１乃至２０−Ｎ−１及びＮ個のＸＯＲゲート２２−０乃至２２−Ｎ−１を含む。Ｎ−１個のフリップフロップ２０−１乃至２０−Ｎ−１は、図２の遅延調整部２０に相当し、乱数発生器１０が出力する乱数系列を入力とするシフトレジスタとして機能する。図４に示す乱数生成器の構成において、図２の遅延調整部２１は、乱数発生器１１が発生する乱数系列ＲＮＤ＿Ｂをそのままクロックサイクルの遅延無く供給する信号配線となる。
【００４１】
シフトレジスタは、乱数系列ＲＮＤ＿Ａの遅延を調整することにより、２個の乱数系列ＲＮＤ＿Ａ及びＲＮＤ＿Ｂの間における相対的な時間差を調整する。このように２個の乱数系列ＲＮＤ＿Ａ及びＲＮＤ＿Ｂの間における相対的な時間差を調整することにより、Ｎ通り（Ｎは２以上の整数）の異なる相対的時間差をそれぞれ有するＮセットの２個の乱数系列が得られる。
【００４２】
より具体的には、乱数発生器１０が生成する乱数系列ＲＮＤ＿Ａに対して、シフトレジスタに含まれるＮ−１個のフリップフロップ２０−１乃至２０−Ｎ−１による遅延により、互いに異なる遅延量を有するＮ個の乱数系列が生成される。このＮ個の乱数系列と、乱数発生器１１が出力する遅延のない１つの乱数系列ＲＮＤ＿Ｂとの組み合わせにより、Ｎ通りの異なる相対的時間差を実現する。
【００４３】
図２及び図３に示す乱数生成器の構成に関連して説明したように、Ｎ通りの互いに異なる相対的時間差を有するＮセットの２個の乱数系列に対して、各セットにおける２個の乱数系列をＸＯＲして求められたＮ個の乱数系列は互いに相関がゼロである。図４に示す乱数生成器においても、Ｎ個のＸＯＲゲート２２−０乃至２２−Ｎ−１により求められたＮ個の乱数系列ＲＮＤ＿０乃至ＲＮＤ＿（Ｎ−１）は、同一のクロックサイクルにおいても異なるクロックサイクル間においても互いに相関がない乱数系列となる。
【００４４】
上述のように図４に示す乱数生成器では、１つのシフトレジスタと複数のＸＯＲゲートを用いる単純な構成により乱数分配器１２を実現できる。従って、単純な回路構成且つ小さな回路面積で、所望の個数の乱数系列を生成することができる。
【００４５】
図５は、第３の実施例による乱数分配器１２の構成の一例を示す図である。図５に示す乱数生成器は、３個の乱数発生器により生成した３個の乱数系列に基づいて、Ｎ個の乱数系列ＲＮＤ＿０乃至ＲＮＤ＿（Ｎ−１）を生成する。
【００４６】
図５に示す乱数生成器は、乱数発生器１０、乱数発生器１１、乱数発生器１３、及び乱数分配器１２を含む。乱数発生器１０、乱数発生器１１、及び乱数発生器１３は互いに独立な乱数発生器であり、それぞれが生成する乱数系列ＲＮＤ＿Ａ、乱数系列ＲＮＤ＿Ｂ、及び乱数系列ＲＮＤ＿Ｃは互いに無相関である。各乱数系列は、同一クロックサイクルで比較したときにｎ個のビット間の相関がなく、異なるクロックサイクル間で比較したときに同一ビット内での相関がなく且つ異なるビット間での相関もない。また任意の２つの乱数系列の間においても、同一クロックサイクルで比較したときに任意のビット間の相関がなく、異なるクロックサイクル間で比較したときに任意のビット間の相関もない。
【００４７】
乱数分配器１２は、Ｎ−１個のフリップフロップ２０−１乃至２０−Ｎ−１、Ｎ−１個のフリップフロップ２１−１乃至２１−Ｎ−１、及びＮ−１個のフリップフロップ２３−１乃至２３−Ｎ−１を含む。乱数分配器１２は更に、Ｎ個のＸＯＲゲート２４−０乃至２４−Ｎ−１を含む。
【００４８】
Ｎ−１個のフリップフロップ２０−１乃至２０−Ｎ−１は、乱数発生器１０が出力する乱数系列ＲＮＤ＿Ａを入力とする第１のシフトレジスタとして機能する。Ｎ−１個のフリップフロップ２１−１乃至２１−Ｎ−１は、乱数発生器１１が出力する乱数系列ＲＮＤ＿Ｂを入力とする第２のシフトレジスタとして機能する。Ｎ−１個のフリップフロップ２３−１乃至２３−Ｎ−１は、乱数発生器１３が出力する乱数系列ＲＮＤ＿Ｃを入力とする第３のシフトレジスタとして機能する。これら第１乃至第３のシフトレジスタが、３個の乱数系列ＲＮＤ＿Ａ、ＲＮＤ＿Ｂ、及びＲＮＤ＿Ｃの間における相対的な時間差を調整することにより、Ｎ通りの異なる相対的時間差をそれぞれ有するＮセットの３個の乱数系列を出力する。
【００４９】
具体的には、第１のシフトレジスタに含まれるＮ−１個のフリップフロップ２０−１乃至２０−Ｎ−１による遅延により、互いに異なる遅延量を有するＮ個の第１の乱数系列が生成される。また第２のシフトレジスタに含まれるＮ−１個のフリップフロップ２１−１乃至２１−Ｎ−１による遅延により、互いに異なる遅延量を有するＮ個の第２の乱数系列が生成される。更に第３のシフトレジスタに含まれるＮ−１個のフリップフロップ２３−１乃至２３−Ｎ−１による遅延により、互いに異なる遅延量を有するＮ個の第２の乱数系列が生成される。これら第１乃至第３の乱数系列の組み合わせにより、Ｎ通りの異なる相対的時間差を実現する。
【００５０】
論理演算部として機能するＮ個のＸＯＲゲート２４−０乃至２４−Ｎ−１は、Ｎセットの３個の乱数系列の各セットについて当該セットに含まれる３個の乱数系列間での排他的論理和を演算する。Ｎ個の排他的論理和出力は、各乱数値がｎビットであるＮ個の乱数系列ＲＮＤ＿０乃至ＲＮＤ＿（Ｎ−１）となる。なおＮ個のＸＯＲゲート２４−０乃至２４−Ｎ−１の各々は、図示の都合上、１つのＸＯＲゲートとして示されているが、実際には、１ビットを処理する３入力のＸＯＲゲートがｎ個並列に設けられたものである。例えば各乱数系列が１ビットからなる場合、ＸＯＲゲート２４−０乃至２４−Ｎ−１の各々は、１ビットを処理する１個の３入力ＸＯＲゲートとなる。また例えば各乱数系列が１０ビットからなる場合、ＸＯＲゲート２４−０乃至２４−Ｎ−１の各々は、１ビットを処理する３入力ＸＯＲゲートが１０個並列に設けられたものとなる。
【００５１】
図５に示される構成では、ＸＯＲゲート２２−ｋ（ｋ＝０，１，２，・・・Ｎ−１）への入力として、ｋが増加するに従い乱数系列ＲＮＤ＿Ａ及びＲＮＤ＿Ｃの遅延が大きくなる一方で乱数系列ＲＮＤ＿Ｂの遅延が小さくなるように、各シフトレジスタの信号伝搬方向を設定する。ここで説明の便宜上、前述のように各乱数系列が１ビットの乱数値であるとする。ＸＯＲゲート２２−ｋに入力する乱数系列は、ｋクロックサイクル遅れた乱数系列ＲＮＤ＿Ａの値ａ（ｔ−ｋ）及び乱数系列ＲＮＤ＿Ｃの値ｃ（ｔ−ｋ）と、Ｎ−１−ｋクロックサイクル遅れた乱数系列ＲＮＤ＿Ｂの値ｂ（ｔ＋ｋ−Ｎ＋１）とである。
【００５２】
この場合、乱数系列ＲＮＤ＿Ｂを基準に乱数系列ＲＮＤ＿Ａとの時間差ＴＡ及び乱数系列ＲＮＤ＿Ｃとの時間差ＴＣの組みを考えると、ＸＯＲゲート２２−ｋに入力する乱数系列の相対的時間差の組みは、（ＴＡ，ＴＣ）＝（Ｎ−１−２ｋ，Ｎ−１−２ｋ）となる。この相対的時間差は、Ｎ個のＸＯＲゲート２４−０乃至２４−Ｎ−１毎に異なっている。従って、Ｎ個のＸＯＲゲート２２−０乃至２２−Ｎ−１により求められたＮ個の乱数系列ＲＮＤ＿０乃至ＲＮＤ＿（Ｎ−１）は、同一のクロックサイクルにおいても異なるクロックサイクル間においても互いに相関がない乱数系列となる。
【００５３】
なお図５に示される構成では、乱数系列ＲＮＤ＿Ａと乱数系列ＲＮＤ＿Ｃとの相対的時間差はゼロに設定されている。代替的に、例えば乱数系列ＲＮＤ＿Ｃについては、図４における乱数系列ＲＮＤ＿Ｂに対する扱いと同様に、乱数系列ＲＮＤ＿Ｃをそのまま遅延無しの状態でＸＯＲゲートに入力する構成としてもよい。この場合、上記の乱数系列の相対的時間差の組みは、（ＴＡ，ＴＣ）＝（Ｎ−１−２ｋ，Ｎ−１−ｋ）となる。
【００５４】
図６は、乱数生成装置を搭載する半導体装置の構成の一例を示す図である。図６に示す半導体装置１００は、乱数発生器１０、乱数発生器１１、乱数分配器１２、及び演算回路４１乃至４３を含む。乱数発生器１０、乱数発生器１１、及び乱数分配器１２は、図１乃至図５を参照して説明したようにして、Ｎ個の乱数系列ＲＮＤ＿０乃至ＲＮＤ＿（Ｎ−１）を生成してよい。図６では、図示の都合上、乱数系列ＲＮＤ＿２、ＲＡＮＤ＿５、及びＲＮＤ＿６が示される。
【００５５】
乱数分配器１２は、フリップフロップ２０−１乃至２０−６及び２０Ａ−３乃至２０Ａ−５、フリップフロップ２１−１乃至２１−４及び２１Ａ−１、及びＸＯＲゲート３１乃至３３を含む。フリップフロップ２０−１乃至２０−６は、図３のフリップフロップ２０−１乃至２０−Ｎ−１の一部又は全部に相当し、乱数発生器１０が生成した乱数系列をクロック信号ＣＬＫに同期して遅延する。フリップフロップ２１−１乃至２１−４は、図３のフリップフロップ２１−１乃至２１−Ｎ−１の一部又は全部に相当し、乱数発生器１１が生成した乱数系列をクロック信号ＣＬＫに同期して遅延する。図示の都合上、各フリップフロップへのクロック信号の印加については、図示が省略されている。
【００５６】
フリップフロップ２０Ａ−３乃至２０Ａ−５は、フリップフロップ２０−１乃至２０−６が配置される信号伝搬経路から枝分かれし、別の信号伝搬経路に沿って配置されている。論理的には、フリップフロップ２０Ａ−３乃至２０Ａ−５の出力値は、それぞれフリップフロップ２０−３乃至２０−５の出力値に等しい。同様に、フリップフロップ２１Ａ−１は、フリップフロップ２１−１乃至２１−４が配置される信号伝搬経路から枝分かれし、別の信号伝搬経路に沿って配置されている。論理的には、フリップフロップ２１Ａ−１の出力値は、フリップフロップ２１−１の出力値に等しい。
【００５７】
演算回路４１、４２、及び４３は、それぞれＸＯＲゲート３１、３２、及び３３が演算した排他的論理和を入力として受け取る。ＸＯＲゲート３１、３２、及び３３は、それぞれ対応する演算回路４１、４２、及び４３の近傍（物理的に近い位置）に配置される。ＸＯＲゲート３１乃至３３は、図３のＸＯＲゲート２２−０乃至２２−Ｎ−１の一部に相当する。演算回路４１、４２、及び４３は、それぞれ乱数系列ＲＮＤ＿２、ＲＡＮＤ＿５、及びＲＮＤ＿６を用いた演算を行う。演算としては、例えばモンテカルロ・シミュレーションやストカスティック演算に関する演算であってよい。
【００５８】
図６に示される構成では、２個の乱数発生器１０及び１１の物理的位置から演算回路４１乃至４３の物理的位置迄の信号伝搬経路に沿って、シフトレジスタに含まれるフリップフロップが配置される。ここで信号伝搬経路に沿ってフリップフロップが配置されるとは、複数のフリップフロップが信号の始点から終点までの間に略均等の間隔で配置されることを意味する。
【００５９】
具体的には、乱数発生器１０の物理的位置から演算回路４１の物理的位置迄の信号伝搬経路に沿って、フリップフロップ２０−１及び２０−２が配置される。また乱数発生器１０の物理的位置から演算回路４２の物理的位置迄の信号伝搬経路に沿って、フリップフロップ２０−１及び２０−２並びに２０Ａ−３乃至２０Ａ−５が配置される。また乱数発生器１０の物理的位置から演算回路４３の物理的位置迄の信号伝搬経路に沿って、フリップフロップ２０−１乃至２０−６が配置される。
【００６０】
同様に乱数発生器１１の物理的位置から演算回路４１の物理的位置迄の信号伝搬経路に沿って、フリップフロップ２１−１乃至２１−４が配置される。また乱数発生器１１の物理的位置から演算回路４２の物理的位置迄の信号伝搬経路に沿って、フリップフロップ２１Ａ−１が配置される。また乱数発生器１１の物理的位置は演算回路４３の物理的位置に近いため、演算回路４３への信号伝搬経路にフリップフロップは配置されない。
【００６１】
上記のように信号伝搬経路に沿ってフリップフロップを配置することにより、乱数系列を遅延させるという遅延調整部としての機能を実現すると同時に、信号線の引き延ばしに伴う波形の劣化に起因する誤動作を防ぐという効果を得ることができる。またフリップフロップの配置された信号伝搬経路を分岐することにより、信号線の無理な引き延ばしにより波形の劣化を引き起こすことなく、各演算回路に対応するＸＯＲ回路に対して、適切な遅延状態の信号（即ち所望の相対的時間差の信号）を供給できる。
【００６２】
図７は、乱数生成器をソフトウェアにより実装する装置の構成を示す図である。前述のように、上述の乱数生成器による乱数生成動作は、ソフトウェアとして実装されてもよい。
【００６３】
図７に示されるように、乱数生成器を実装する装置は、例えばパーソナルコンピュータ等のコンピュータにより実現される。図７の装置は、コンピュータ５１０と、コンピュータ５１０に接続されるディスプレイ装置５２０、通信装置５２３、及び入力装置よりなる。入力装置は、例えばキーボード５２１及びマウス５２２を含む。コンピュータ５１０は、ＣＰＵ５１１、ＲＡＭ５１２、ＲＯＭ５１３、ハードディスク等の二次記憶装置５１４、可換媒体記憶装置５１５、及びインターフェース５１６を含む。
【００６４】
キーボード５２１及びマウス５２２は、ユーザとのインターフェースを提供するものであり、コンピュータ５１０を操作するための各種コマンドや要求されたデータに対するユーザ応答等が入力される。ディスプレイ装置５２０は、コンピュータ５１０で処理された結果等を表示すると共に、コンピュータ５１０を操作する際にユーザとの対話を可能にするために様々なデータ表示を行う。通信装置５２３は、周辺装置との通信又は遠隔地との通信を行なうためのものであり、例えばモデム、ネットワークインターフェース、ＵＳＢ（Universal  Serial  Bus）等よりなる。
【００６５】
乱数生成器の機能は、コンピュータ５１０が実行可能なコンピュータプログラムとして提供される。このコンピュータプログラムは、可換媒体記憶装置５１５に装着可能な記憶媒体Ｍに記憶されており、記憶媒体Ｍから可換媒体記憶装置５１５を介して、ＲＡＭ５１２或いは二次記憶装置５１４にロードされる。或いは、このコンピュータプログラムは、周辺装置又は遠隔地にある記憶媒体（図示せず）に記憶されており、この記憶媒体から通信装置５２３及びインターフェース５１６を介して、ＲＡＭ５１２或いは二次記憶装置５１４にロードされる。
【００６６】
キーボード５２１及び／又はマウス５２２を介してユーザからプログラム実行指示があると、ＣＰＵ５１１は、記憶媒体Ｍ、周辺装置、遠隔地記憶媒体、或いは二次記憶装置５１４からプログラムをＲＡＭ５１２にロードする。ＣＰＵ５１１は、ＲＡＭ５１２の空き記憶空間をワークエリアとして使用して、ＲＡＭ５１２にロードされたプログラムを実行し、適宜ユーザと対話しながら処理を進める。なおＲＯＭ５１３は、コンピュータ５１０の基本動作を制御するための制御プログラムが格納されている。
【００６７】
上記コンピュータプログラムを実行することにより、コンピュータ５１０が、上記各実施例で説明されたように乱数生成器の乱数生成動作を実行する。
【００６８】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【符号の説明】
【００６９】
１０  乱数発生器
１１  乱数発生器
１２  乱数分配器
２０  遅延調整部
２１  遅延調整部
４１  演算回路
４２  演算回路
４３  演算回路
５１０  コンピュータ
５１１  ＣＰＵ
５１２  ＲＡＭ
５１３  ＲＯＭ
５１４  二次記憶装置
５１５  可換媒体記憶装置
５１６  インターフェース
５２０  ディスプレイ装置
５２１  キーボード
５２２  マウス
５２３  通信装置
【図１】
2020119313.tif 000003
【図２】
2020119313.tif 000004
【図３】
2020119313.tif 000005
【図４】
2020119313.tif 000006
【図５】
2020119313.tif 000007
【図６】
2020119313.tif 000008
【図７】
2020119313.tif 000009