(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-03-27
(45)【発行日】2023-04-04
(54)【発明の名称】乱数生成器、半導体装置、及びプログラム
(51)【国際特許分類】
G06F 7/58 20060101AFI20230328BHJP
H03K 3/84 20060101ALI20230328BHJP
【FI】
G06F7/58
H03K3/84 A
(21)【出願番号】P 2019010295
(22)【出願日】2019-01-24
【審査請求日】2021-10-07
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】田宮 豊
【審査官】白石 圭吾
(56)【参考文献】
【文献】特開平11-136101(JP,A)
【文献】特開2001-166920(JP,A)
【文献】米国特許出願公開第2002/0181558(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 7/58
H03K 3/00 - 3/86
(57)【特許請求の範囲】
【請求項1】
M個(Mは2以上の整数)の乱数系列をそれぞれ生成する互いに独立なM個の乱数発生器と、
前記M個の乱数系列の間における相対的な時間差を調整することにより、N通り(Nは2以上の整数)の異なる相対的時間差をそれぞれ有するNセットのM個の乱数系列を出力する遅延調整部と、
前記NセットのM個の乱数系列の各セットについて当該セットに含まれるM個の乱数系列間での排他的論理和を演算する論理演算部と
を含
み、
前記M個の乱数発生器は第1の乱数発生器と第2の乱数発生器とを含む2個の乱数発生器であり、前記遅延調整部は、前記第1の乱数発生器が出力する乱数系列を入力とする第1のシフトレジスタと、前記第2の乱数発生器が出力する乱数系列を入力とする第2のシフトレジスタとを含み、前記第1のシフトレジスタに含まれるN-1個のフリップフロップによる遅延により生成された互いに異なる遅延量を有するN個の第1の乱数系列と、前記第2のシフトレジスタに含まれるN-1個のフリップフロップによる遅延により生成された互いに異なる遅延量を有するN個の第2の乱数系列との組み合わせにより、前記N通りの異なる相対的時間差を実現し、前記Nセットの2個の乱数系列のうちの任意の1つのセットは、前記Nセットの2個の乱数系列のうちの別の任意の1つのセットに対して、前記第1の乱数系列の遅延がより大きく、前記第2の乱数系列の遅延がより小さい、乱数生成器。
【請求項2】
前記
2個の乱数発生器の物理的位置から、前記論理演算部が演算した排他的論理和を入力とする回路の物理的位置迄の信号伝搬経路に沿って、前記
第1および第2のシフトレジスタに含まれるフリップフロップが配置される、請求項
1記載の乱数生成器。
【請求項3】
M個(Mは2以上の整数)の乱数系列をそれぞれ生成する互いに独立なM個の乱数発生器と、
前記M個の乱数系列の間における相対的な時間差を調整することにより、N通り(Nは2以上の整数)の異なる相対的時間差をそれぞれ有するNセットのM個の乱数系列を出力する遅延調整部と、
前記NセットのM個の乱数系列の各セットについて当該セットに含まれるM個の乱数系列間での排他的論理和を演算する論理演算部と、
前記論理演算部が演算した排他的論理和を入力とする回路と
を含
み、
前記M個の乱数発生器は第1の乱数発生器と第2の乱数発生器とを含む2個の乱数発生器であり、前記遅延調整部は、前記第1の乱数発生器が出力する乱数系列を入力とする第1のシフトレジスタと、前記第2の乱数発生器が出力する乱数系列を入力とする第2のシフトレジスタとを含み、前記第1のシフトレジスタに含まれるN-1個のフリップフロップによる遅延により生成された互いに異なる遅延量を有するN個の第1の乱数系列と、前記第2のシフトレジスタに含まれるN-1個のフリップフロップによる遅延により生成された互いに異なる遅延量を有するN個の第2の乱数系列との組み合わせにより、前記N通りの異なる相対的時間差を実現し、前記Nセットの2個の乱数系列のうちの任意の1つのセットは、前記Nセットの2個の乱数系列のうちの別の任意の1つのセットに対して、前記第1の乱数系列の遅延がより大きく、前記第2の乱数系列の遅延がより小さく、
前記
2個の乱数発生器の
うちの少なくとも1つの物理的位置から前記回路の物理的位置迄の信号伝搬経路に沿って前記
第1および第2のシフトレジスタのうちの少なくとも1つのシフトレジスタに含まれるフリップフロップが配置される半導体装置。
【請求項4】
前記フリップフロップが配置される信号伝搬経路は分岐を含む、請求項
3記載の半導体装置。
【請求項5】
互いに独立な
2個の乱数系列を生成し、
前記
2個の乱数系列の間における相対的な時間差を調整することにより、N通り(Nは2以上の整数)の異なる相対的時間差をそれぞれ有するNセットの
2個の乱数系列を出力し、
前記Nセットの
2個の乱数系列の各セットについて当該セットに含まれる
2個の乱数系列間での排他的論理和を演算
し、
前記2個の乱数系列の一方をN-1回所定時間遅延させることにより生成された互いに異なる遅延量を有するN個の第1の乱数系列と、前記2個の乱数系列の他方をN-1回所定時間遅延させることにより生成された互いに異なる遅延量を有するN個の第2の乱数系列との組み合わせにより、前記N通りの異なる相対的時間差を実現し、
前記Nセットの2個の乱数系列のうちの任意の1つのセットは、前記Nセットの2個の乱数系列のうちの別の任意の1つのセットに対して、前記第1の乱数系列の遅延がより大きく、前記第2の乱数系列の遅延がより小さい、
処理をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本願開示は、乱数生成器、半導体装置、及びプログラムに関する。
【背景技術】
【0002】
乱数発生器は、様々な分野において用いられる。真性乱数を回路により発生させることは困難であり、通常、線形帰還シフトレジスタやメルセンヌツイスタ等の疑似乱数生成器により、確定的な計算を実行して生成した疑似乱数が用いられる。乱数には規則性がないこと、即ち出現する乱数値間に空間的及び時間的に相関がないことが要求される。疑似乱数では、厳密な意味で無規則性を実現することは困難であるが、例えば非常に長い周期を実現する等により、実用的な意味で無規則性と見なせる状態を実現している。
【0003】
例えば金融工学等の分野において、複雑な性質を有するモデルを対象とするシミュレーションでは、モンテカルロシミュレーションと呼ばれる確率的な手法が多用される。モンテカルロシミュレーションでは、対象モデルの状態遷移を乱数で確率的に決める試行を基本として、この試行を多数回行うことによって対象モデルをシミュレーションする。
【0004】
また例えば計算機工学の分野において、ストカスティック演算を用いた計算アルゴリズムが、省電力、省スペース、及びエラー耐性の観点から最近注目されている。ストカスティック演算の1つの実装では、Stochastic Number(SN)と呼ばれる1と0とで構成された1つのランダムビット列により1つの変数を表現する。変数の有する値は、ビット列中における1の出現確率(0~1)により表現される。ビット列中での0及び1の順序と位置とは意味を持たず、ビット列が長いほど精度が向上する。一般の計算機で用いられる2進数をSN変数に変換するためには乱数発生器が用いられる。2つのSN変数同士の乗算は2入力ANDゲートにより実装され、2つのSN変数同士の加算は2入力の選択確率が0.5ずつである2入力マルチプレクサにより実装できる。この場合、加算器毎に乱数発生器が1つ必要になる。
【0005】
モンテカルロ・シミュレーションであってもストカスティック演算であっても、ハードウェアに実装するためには乱数発生器が必要になる。ハードウェアの性質を活かしてモンテカルロ・シミュレーションを並列化する場合、並列化されたシミュレーションが同じ乱数系列を使ってしまうと、全てが同じ試行になってしまい並列化の意味が無くなるという問題がある。またストカスティック演算において、互いに相関が無い変数同士で演算をする場合には、それぞれの変数に関与する乱数が互いに独立な乱数(互いに相関の無い乱数)でないと、演算精度が損なわれるという問題がある。
【0006】
複数の乱数を生成する乱数生成器は幾つか提案されている(特許文献1及び2並びに非特許文献1参照)。しかしながら、生成した複数の乱数系列間で相互相関が発生したり、或いは乱数系列毎に必要になる回路によるオーバーヘッドが大きかったりするという問題がある。
【先行技術文献】
【特許文献】
【0007】
【文献】特開平11-24894号公報
【文献】特開平4-46413号公報
【非特許文献】
【0008】
【文献】渡部信吾、阿部公輝、“疑似乱数生成器Mersenne TwisterのVLSI設計”、情報処理学会研究報告コンピュータセキュリティ(CSEC)、2005(41(2005-CSEC-029)),13-18(2005-05-19)
【発明の概要】
【発明が解決しようとする課題】
【0009】
以上を鑑みると、時間的にも相互相関がない複数の乱数を単純な構成で発生する乱数生成器が望まれる。
【課題を解決するための手段】
【0010】
乱数生成器は、M個(Mは2以上の整数)の乱数系列をそれぞれ生成する互いに独立なM個の乱数発生器と、前記M個の乱数系列の間における相対的な時間差を調整することにより、N通り(Nは2以上の整数)の異なる相対的時間差をそれぞれ有するNセットのM個の乱数系列を出力する遅延調整部と、前記NセットのM個の乱数系列の各セットについて当該セットに含まれるM個の乱数系列間での排他的論理和を演算する論理演算部とを含み、前記M個の乱数発生器は第1の乱数発生器と第2の乱数発生器とを含む2個の乱数発生器であり、前記遅延調整部は、前記第1の乱数発生器が出力する乱数系列を入力とする第1のシフトレジスタと、前記第2の乱数発生器が出力する乱数系列を入力とする第2のシフトレジスタとを含み、前記第1のシフトレジスタに含まれるN-1個のフリップフロップによる遅延により生成された互いに異なる遅延量を有するN個の第1の乱数系列と、前記第2のシフトレジスタに含まれるN-1個のフリップフロップによる遅延により生成された互いに異なる遅延量を有するN個の第2の乱数系列との組み合わせにより、前記N通りの異なる相対的時間差を実現し、前記Nセットの2個の乱数系列のうちの任意の1つのセットは、前記Nセットの2個の乱数系列のうちの別の任意の1つのセットに対して、前記第1の乱数系列の遅延がより大きく、前記第2の乱数系列の遅延がより小さい。
【発明の効果】
【0011】
少なくとも1つの実施例によれば、時間的にも相互相関がない複数の乱数を単純な構成で発生する乱数生成器が提供される。
【図面の簡単な説明】
【0012】
【
図1】乱数生成器の構成の一例を示すブロック図である。
【
図2】乱数生成器における乱数分配器12の一般的な構成の一例を示す図である。
【
図3】第1の実施例による乱数分配器12の構成の一例を示す図である。
【
図4】第2の実施例による乱数分配器12の構成の一例を示す図である。
【
図5】第3の実施例による乱数分配器12の構成の一例を示す図である。
【
図6】乱数生成装置を搭載する半導体装置の構成の一例を示す図である。
【
図7】乱数生成器をソフトウェアにより実装する装置の構成を示す図である。
【発明を実施するための形態】
【0013】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。以下の図において、同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
【0014】
図1は、乱数生成器の構成の一例を示すブロック図である。
図1及び以降の図において、各ボックスで示される各機能ブロックと他の機能ブロックとの境界は、基本的には機能的な境界を示すものであり、物理的な位置の分離、電気的な信号の分離、制御論理的な分離等に対応するとは限らない。乱数生成器は、各機能ブロックの機能を有する電子回路ブロックを組み合わせて実現したハードウェア構成でもよいし、電子回路である汎用のプロセッサにおいてソフトウェアを実行することにより各機能ブロックの機能を実現したソフトウェア構成でもよい。ハードウェアの場合、各機能ブロックは、他のブロックと物理的にある程度分離された1つのハードウェアモジュールであってもよいし、或いは他のブロックと物理的に一体となったハードウェアモジュール中の1つの機能を示したものであってもよい。ソフトウェアの場合、各機能ブロックは、他のブロックと論理的にある程度分離された1つのソフトウェアモジュールであってもよいし、或いは他のブロックと論理的に一体となったソフトモジュール中の1つの機能を示したものであってもよい。
【0015】
図1に示される乱数生成器は、乱数発生器10、乱数発生器11、及び乱数分配器12を含む。乱数発生器10、乱数発生器11、及び乱数分配器12は、クロック信号CLKに同期して動作する。乱数発生器10及び11は各乱数値がnビット(nは1以上の整数)である乱数系列(乱数時系列)を生成する。2個の乱数発生器10及び11がそれぞれ生成した乱数系列RND_A及び乱数系列RND_Bは乱数分配器12に入力される。乱数分配器12は、乱数系列RND_A及び乱数系列RND_Bに基づいて、各乱数値がnビットであるN個(Nは3以上の整数)以上の乱数系列RND_0乃至RND_(N-1)を生成する。
【0016】
図1では、2個の乱数発生器が設けられているが、乱数発生器の個数は2個に限定されない。一般的には、M個(Nは2以上の整数)の乱数系列をそれぞれ生成する互いに独立なM個の乱数発生器が設けられてよい。
【0017】
乱数発生器10及び乱数発生器11は、デバイス中の熱雑音などのように本質的にランダムな物理現象を利用することによって乱数を生成する物理乱数生成器であってもよいが、実用的に充分に規則性のない疑似乱数を生成する疑似乱数生成器であってよい。以下の説明において、乱数の性質について、独立である、相関が無い、無相関である、規則性がない、無規則である、周期性がない、無周期である、等の表現を用いる場合、実用的な意味においてそれらの性質を満たしていると言える状態を示す。
【0018】
ここで実用的な意味においてそれら性質が満たされていると言えるためには、使用が想定されている疑似乱数生成器が提供できる最善の状態が達成されていることが好ましい。例えば疑似乱数生成器としてメルセンヌツイスターを用いる場合、乱数の周期として219337-1等の非常に長い周期が得られるので、実用的な意味において、生成される乱数には周期性がなく時間的に無相関であると考えてよい。しかしながら、乱数発生器10及び11としてメルセンヌツイスターを用いた場合、生成される2つの乱数系列が1クロックずれた同一の乱数系列となっているような状態では、これら2つの乱数系列が実用的に無相関であるとは言えない。生成される2つの乱数系列が、例えば(219337)/2クロックずれた同一の乱数系列となっているような状態であれば、これら2つの乱数系列が実用的に無相関であると言える。
【0019】
上記の意味において、乱数発生器10及び乱数発生器11は互いに独立な乱数発生器であり、それぞれが生成する乱数系列RND_A及び乱数系列RND_Bは互いに無相関である。乱数系列RND_Aは、同一クロックサイクルで比較したときにn個のビット間の相関がなく、異なるクロックサイクル間で比較したときに同一ビット内での相関がなく且つ異なるビット間での相関もない。乱数系列RND_Bについても同様である。また乱数系列RND_Aと乱数系列RND_Bとの間においても、同一クロックサイクルで比較したときに任意のビット間の相関がなく、異なるクロックサイクル間で比較したときに任意のビット間の相関もない。
【0020】
乱数発生器10及び11としては、例えばメルセンヌツイスターやxorshift+等の疑似乱数生成器であってよい。またメルセンヌツイスターと比較して乱数の性能は劣ることになるが、例えば線形帰還シフトレジスタ等を疑似乱数生成器として用いることは、排除されるものではない。
【0021】
図1に示される乱数生成器において、乱数分配器12は、後述するようにフリップフロップ等による遅延調整及び排他的論理和演算により実現することが可能である。また2個の乱数生成器が設けられていれば、所望の数の互いに無相関な乱数系列RND_0乃至RND_(N-1)を生成することができる。従って、電子回路により乱数生成器を実装する場合であれば、単純な回路構成且つ小さな回路面積で、所望の個数の乱数系列を生成することができる。またソフトウェアにより乱数生成器を実装する場合であれば、単純なプログラム構成且つ小さなプログラムサイズで、所望の個数の乱数系列を生成することができる。
【0022】
図2は、乱数生成器における乱数分配器12の一般的な構成の一例を示す図である。
図2に示す乱数生成器において、乱数分配器12は、遅延調整部20、遅延調整部21、及びN個のXOR(排他的論理和)ゲート22-0乃至22-N-1を含む。遅延調整部20及び21は、クロック信号CLKに同期して2個の乱数系列RND_A及びRND_Bのそれぞれの遅延を調整することにより、2個の乱数系列RND_A及びRND_Bの間における相対的な時間差を調整する。遅延調整部20及び21は、2個の乱数系列RND_A及びRND_Bの間における相対的な時間差を調整することにより、N通り(Nは2以上の整数)の異なる相対的時間差をそれぞれ有するNセットの2個の乱数系列を出力する。
【0023】
説明の便宜上、各乱数系列が1ビットの乱数値であるとする。時刻t(クロックサイクルt)における乱数系列RND_Aの値をa(t)とし、時刻t(クロックサイクルt)における乱数系列RND_Bの値をb(t)とする。遅延調整部20及び21は、例えば、XORゲート22-k(k=0,1,2,・・・N-1)への入力としてa(t)及びb(t-k)を出力してよい。この場合、XORゲート22-0への入力であるa(t)とb(t)との相対的な時間差はゼロであり、XORゲート22-1への入力であるa(t)とb(t-1)との相対的な時間差は1クロックサイクルである。同様にして、0以上N-1以下の任意のkに対して、XORゲート22-kへのa(t)とb(t-k)との相対的な時間差はkクロックサイクルである。この例のように、遅延調整部20及び21は、N通りの異なる相対的時間差(この例では0,1,2,3,・・・N-1クロックサイクル差)をそれぞれ有するNセットの2個の乱数系列を出力する。なおN通りの異なる相対的時間差を実現する形態については、この例に限られない。
【0024】
論理演算部として機能するN個のXORゲート22-0乃至22-N-1は、Nセットの2個の乱数系列の各セットについて当該セットに含まれる2個の乱数系列間での排他的論理和を演算する。N個の排他的論理和出力は、各乱数値がnビットであるN個の乱数系列RND_0乃至RND_(N-1)となる。なおN個のXORゲート22-0乃至22-N-1の各々は、図示の都合上、1つのXORゲートとして示されているが、実際には、1ビットを処理する2入力のXORゲートがn個並列に設けられたものである。例えば各乱数系列が1ビットからなる場合、XORゲート22-0乃至22-N-1の各々は、1ビットを処理する1個の2入力XORゲートとなる。また例えば各乱数系列が10ビットからなる場合、XORゲート22-0乃至22-N-1の各々は、1ビットを処理する2入力XORゲートが10個並列に設けられたものとなる。
【0025】
なお
図2及び以降の図で示す構成において、論理演算部としてXORゲートによる排他的論理和演算を用いるが、N個の乱数系列RND_0乃至RND_(N-1)を生成するための演算としてはXORではなくXNOR(排他的論理和の反転値)であってもよい。論理演算部における演算としてXNORを用いる場合であっても、その演算は排他的論理和を演算してその反転値を計算していることと等価であるので、当該論理演算部においては排他的論理和を演算していると解釈することができる。従って、論理演算部による演算としてXNORを用いる構成も、本願が意図する権利範囲内に含まれる。
【0026】
上記のようにして生成されたN個の乱数系列RND_0乃至RND_(N-1)から取り出した任意の2ビットは、同一クロックサイクルで比較したときにビット間の相関がなく、異なるクロックサイクル間で比較したときにビット間での相関もない。これについて以下に簡単に説明する。
【0027】
まず説明の便宜上、前述のように各乱数系列が1ビットの乱数値であり、XORゲート22-k(k=0,1,2,・・・N-1)への入力がa(t)及びb(t-k)であるとする。この場合、例えば、乱数系列RND_iの1ビットの値はa(t)とb(t-i)とのXOR値であり、乱数系列RND_j(j≠i)の1ビットの値はa(t)とb(t-j)とのXOR値である。このときj≠iであるのでb(t-i)とb(t-j)との間の相関が存在しないとの前提から、直感的に、同一のクロックサイクルにおける上記2つのXOR値の間の相関はゼロとなることが分かる。
【0028】
また更に、異なるクロックサイクル間におけるこれら2つのXOR値の相互相関を考えるために、一方のXOR値を時間軸上でずらすことを考える。例えばa(t)とb(t-i)とのXOR値を時間軸上でずらしてi=jとなるサイクルに移動させた場合、この値はa(t+i-j)とb(t-j)とのXOR値となる。このa(t+i-j)とb(t-j)とのXOR値と、もう一方のa(t)とb(t-j)とのXOR値との間の相関は、a(t+i-j)とa(t)との間の相関が存在しないとの前提から、ゼロになることが分かる。時間軸上でのずれが上記以外の場合には、明らかに2つのXOR値の間に相関は発生しない。
【0029】
前述のように、一般的には、M個の乱数系列をそれぞれ生成する互いに独立なM個の乱数発生器が設けられてよい。そして、遅延調整部が、M個の乱数系列の間における相対的な時間差を調整することにより、N通りの異なる相対的時間差をそれぞれ有するNセットのM個の乱数系列を出力してよい。また更に、論理演算部(XORゲート群)が、NセットのM個の乱数系列の各セットについて当該セットに含まれるM個の乱数系列間での排他的論理和を演算してよい。しかしながら上述のように、2個の乱数発生器を用いるだけであっても、同一クロックサイクルにおいても、更には異なるクロックサイクル間においても、互いに相関のない任意の個数の乱数系列を発生することが可能である。従って、2個の乱数発生器を設ける構成により、少ない回路面積及び少ない計算量で、互いに相関のない所望の個数の乱数系列を発生することが可能である。
【0030】
なお最低でも2個の乱数発生器を用いることを鑑みると、出力乱数系列の個数Nは3以上であることが、乱数発生器の数よりも多くの乱数系列を生成するという意味において好ましい。但し、出力乱数系列の個数Nが2に等しい場合であっても、
図1又は
図2で説明した構成を適用することは可能である。また出力乱数系列RND_0乃至RND_(N-1)に加え、乱数発生器10の乱数系列RND_A及び乱数発生器11の乱数系列RND_Bを、乱数生成器の出力乱数系列として扱ってもよい。
【0031】
図3は、第1の実施例による乱数分配器12の構成の一例を示す図である。
図3に示す乱数生成器は、
図2に示す乱数生成器において、乱数分配器12の遅延調整部20及び遅延調整部21の具体的な構成を示したものに相当する。
【0032】
図3に示す乱数生成器において、乱数分配器12は、N-1個のフリップフロップ20-1乃至20-N-1、N-1個のフリップフロップ21-1乃至21-N-1、及びN個のXORゲート22-0乃至22-N-1を含む。N-1個のフリップフロップ20-1乃至20-N-1は、
図2の遅延調整部20に相当し、乱数発生器10が出力する乱数系列を入力とする第1のシフトレジスタとして機能する。N-1個のフリップフロップ21-1乃至21-N-1は、
図2の遅延調整部21に相当し、乱数発生器11が出力する乱数系列を入力とする第2のシフトレジスタとして機能する。各フリップフロップのクロック入力端子には、クロック信号CLKが印加される。
【0033】
第1及び第2のシフトレジスタは、2個の乱数系列RND_A及びRND_Bのそれぞれの遅延を調整することにより、2個の乱数系列RND_A及びRND_Bの間における相対的な時間差を調整する。このように2個の乱数系列RND_A及びRND_Bの間における相対的な時間差を調整することにより、N通り(Nは2以上の整数)の異なる相対的時間差をそれぞれ有するNセットの2個の乱数系列が得られる。
【0034】
より具体的には、第1のシフトレジスタに含まれるN-1個のフリップフロップ20-1乃至20-N-1による遅延により、互いに異なる遅延量を有するN個の第1の乱数系列が生成される。また第2のシフトレジスタに含まれるN-1個のフリップフロップ21-1乃至21-N-1による遅延により、互いに異なる遅延量を有するN個の第2の乱数系列が生成される。これら第1の乱数系列と第2の乱数系列との組み合わせにより、N通りの異なる相対的時間差を実現する。
【0035】
上述のN通りの異なる相対的時間差を実現するために、
図3に示される乱数分配器12では、XORゲート22-k(k=0,1,2,・・・N-1)への入力として、kが増加するに従い乱数系列RND_Aの遅延が大きくなる一方で乱数系列RND_Bの遅延が小さくなるように、各シフトレジスタの信号伝搬方向を設定する。ここで説明の便宜上、前述のように各乱数系列が1ビットの乱数値であるとする。XORゲート22-kに入力する乱数系列は、kクロックサイクル遅れた乱数系列RND_Aの値a(t-k)と、N-1-kクロックサイクル遅れた乱数系列RND_Bの値b(t+k-N+1)とである。従って、XORゲート22-kの出力である乱数系列RND_kは、
a(t-k)∧b(t+k-N+1)
となる。ここで演算子“∧”はXORを表す。同様にして、XORゲート22-m(m=0,1,2,・・・N-1)の出力である乱数系列RND_mは、
a(t-m)∧b(t+m-N+1)
となる。従って、互いにjクロックサイクルずれた乱数系列RND_kと乱数系列RND_mとの相互相関R(j)は、期待値E[・]を用いて、以下のように表される。
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)] (1)
ここで計算を簡単にするために、各ビットの値を[0,1]ではなく[-1,1]で表現する。この場合、乗算とXOR演算との関係はx・y=-x∧yとなる。従って、式(1)の値は以下のようになる。
R(j)=-E[a(t-k)∧b(t+k-N+1)∧a(t-m+j)∧b(t+m-N+1+j)] (2)
ここでj=m-kのとき、式(2)は更に以下のようになる。
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
何故なら同じ値a(t-k)同士のXORは-1になるからである。また更に、b(t+k-N+1)とb(t+2m-N+1-k)とは、乱数系列b(t)の異なるクロックサイクルの値であるので、互いの相関はゼロだからである。
【0036】
同様に、j=k-mのとき、式(2)の値は以下のようになる。
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
何故なら同じ値b(t+k-N+1)同士のXORは-1になるからである。また更に、a(t-k)とa(t-2m+k)とは、乱数系列a(t)の異なるクロックサイクルの値であるので、互いの相関はゼロだからである。
【0037】
またjの値が上記以外の場合には、式(2)のE[・]内部の各項は互いに相関がないことが明らかであり、式(2)の値はゼロになる。従って、jの値に関わらず、相互相関R(j)の値は常にゼロである。即ち、乱数系列RND_0乃至RND_(N-1)から選んだ任意の2つの乱数系列RND_k及び乱数系列RND_mの間に相関はないことが分かる。
【0038】
上述のように
図3に示す乱数生成器では、2つのシフトレジスタと複数のXORゲートを用いる単純な構成により乱数分配器12を実現できる。従って、単純な回路構成且つ小さな回路面積で、所望の個数の乱数系列を生成することができる。
【0039】
図4は、第2の実施例による乱数分配器12の構成の一例を示す図である。
図4に示す乱数生成器は、
図2に示す乱数生成器において、乱数分配器12の遅延調整部20及び遅延調整部21の具体的な構成を示したものに相当する。
【0040】
図4に示す乱数生成器において、乱数分配器12は、N-1個のフリップフロップ20-1乃至20-N-1及びN個のXORゲート22-0乃至22-N-1を含む。N-1個のフリップフロップ20-1乃至20-N-1は、
図2の遅延調整部20に相当し、乱数発生器10が出力する乱数系列を入力とするシフトレジスタとして機能する。
図4に示す乱数生成器の構成において、
図2の遅延調整部21は、乱数発生器11が発生する乱数系列RND_Bをそのままクロックサイクルの遅延無く供給する信号配線となる。
【0041】
シフトレジスタは、乱数系列RND_Aの遅延を調整することにより、2個の乱数系列RND_A及びRND_Bの間における相対的な時間差を調整する。このように2個の乱数系列RND_A及びRND_Bの間における相対的な時間差を調整することにより、N通り(Nは2以上の整数)の異なる相対的時間差をそれぞれ有するNセットの2個の乱数系列が得られる。
【0042】
より具体的には、乱数発生器10が生成する乱数系列RND_Aに対して、シフトレジスタに含まれるN-1個のフリップフロップ20-1乃至20-N-1による遅延により、互いに異なる遅延量を有するN個の乱数系列が生成される。このN個の乱数系列と、乱数発生器11が出力する遅延のない1つの乱数系列RND_Bとの組み合わせにより、N通りの異なる相対的時間差を実現する。
【0043】
図2及び
図3に示す乱数生成器の構成に関連して説明したように、N通りの互いに異なる相対的時間差を有するNセットの2個の乱数系列に対して、各セットにおける2個の乱数系列をXORして求められたN個の乱数系列は互いに相関がゼロである。
図4に示す乱数生成器においても、N個のXORゲート22-0乃至22-N-1により求められたN個の乱数系列RND_0乃至RND_(N-1)は、同一のクロックサイクルにおいても異なるクロックサイクル間においても互いに相関がない乱数系列となる。
【0044】
上述のように
図4に示す乱数生成器では、1つのシフトレジスタと複数のXORゲートを用いる単純な構成により乱数分配器12を実現できる。従って、単純な回路構成且つ小さな回路面積で、所望の個数の乱数系列を生成することができる。
【0045】
図5は、第3の実施例による乱数分配器12の構成の一例を示す図である。
図5に示す乱数生成器は、3個の乱数発生器により生成した3個の乱数系列に基づいて、N個の乱数系列RND_0乃至RND_(N-1)を生成する。
【0046】
図5に示す乱数生成器は、乱数発生器10、乱数発生器11、乱数発生器13、及び乱数分配器12を含む。乱数発生器10、乱数発生器11、及び乱数発生器13は互いに独立な乱数発生器であり、それぞれが生成する乱数系列RND_A、乱数系列RND_B、及び乱数系列RND_Cは互いに無相関である。各乱数系列は、同一クロックサイクルで比較したときにn個のビット間の相関がなく、異なるクロックサイクル間で比較したときに同一ビット内での相関がなく且つ異なるビット間での相関もない。また任意の2つの乱数系列の間においても、同一クロックサイクルで比較したときに任意のビット間の相関がなく、異なるクロックサイクル間で比較したときに任意のビット間の相関もない。
【0047】
乱数分配器12は、N-1個のフリップフロップ20-1乃至20-N-1、N-1個のフリップフロップ21-1乃至21-N-1、及びN-1個のフリップフロップ23-1乃至23-N-1を含む。乱数分配器12は更に、N個のXORゲート24-0乃至24-N-1を含む。
【0048】
N-1個のフリップフロップ20-1乃至20-N-1は、乱数発生器10が出力する乱数系列RND_Aを入力とする第1のシフトレジスタとして機能する。N-1個のフリップフロップ21-1乃至21-N-1は、乱数発生器11が出力する乱数系列RND_Bを入力とする第2のシフトレジスタとして機能する。N-1個のフリップフロップ23-1乃至23-N-1は、乱数発生器13が出力する乱数系列RND_Cを入力とする第3のシフトレジスタとして機能する。これら第1乃至第3のシフトレジスタが、3個の乱数系列RND_A、RND_B、及びRND_Cの間における相対的な時間差を調整することにより、N通りの異なる相対的時間差をそれぞれ有するNセットの3個の乱数系列を出力する。
【0049】
具体的には、第1のシフトレジスタに含まれるN-1個のフリップフロップ20-1乃至20-N-1による遅延により、互いに異なる遅延量を有するN個の第1の乱数系列が生成される。また第2のシフトレジスタに含まれるN-1個のフリップフロップ21-1乃至21-N-1による遅延により、互いに異なる遅延量を有するN個の第2の乱数系列が生成される。更に第3のシフトレジスタに含まれるN-1個のフリップフロップ23-1乃至23-N-1による遅延により、互いに異なる遅延量を有するN個の第2の乱数系列が生成される。これら第1乃至第3の乱数系列の組み合わせにより、N通りの異なる相対的時間差を実現する。
【0050】
論理演算部として機能するN個のXORゲート24-0乃至24-N-1は、Nセットの3個の乱数系列の各セットについて当該セットに含まれる3個の乱数系列間での排他的論理和を演算する。N個の排他的論理和出力は、各乱数値がnビットであるN個の乱数系列RND_0乃至RND_(N-1)となる。なおN個のXORゲート24-0乃至24-N-1の各々は、図示の都合上、1つのXORゲートとして示されているが、実際には、1ビットを処理する3入力のXORゲートがn個並列に設けられたものである。例えば各乱数系列が1ビットからなる場合、XORゲート24-0乃至24-N-1の各々は、1ビットを処理する1個の3入力XORゲートとなる。また例えば各乱数系列が10ビットからなる場合、XORゲート24-0乃至24-N-1の各々は、1ビットを処理する3入力XORゲートが10個並列に設けられたものとなる。
【0051】
図5に示される構成では、XORゲート22-k(k=0,1,2,・・・N-1)への入力として、kが増加するに従い乱数系列RND_A及びRND_Cの遅延が大きくなる一方で乱数系列RND_Bの遅延が小さくなるように、各シフトレジスタの信号伝搬方向を設定する。ここで説明の便宜上、前述のように各乱数系列が1ビットの乱数値であるとする。XORゲート22-kに入力する乱数系列は、kクロックサイクル遅れた乱数系列RND_Aの値a(t-k)及び乱数系列RND_Cの値c(t-k)と、N-1-kクロックサイクル遅れた乱数系列RND_Bの値b(t+k-N+1)とである。
【0052】
この場合、乱数系列RND_Bを基準に乱数系列RND_Aとの時間差TA及び乱数系列RND_Cとの時間差TCの組みを考えると、XORゲート22-kに入力する乱数系列の相対的時間差の組みは、(TA,TC)=(N-1-2k,N-1-2k)となる。この相対的時間差は、N個のXORゲート24-0乃至24-N-1毎に異なっている。従って、N個のXORゲート22-0乃至22-N-1により求められたN個の乱数系列RND_0乃至RND_(N-1)は、同一のクロックサイクルにおいても異なるクロックサイクル間においても互いに相関がない乱数系列となる。
【0053】
なお
図5に示される構成では、乱数系列RND_Aと乱数系列RND_Cとの相対的時間差はゼロに設定されている。代替的に、例えば乱数系列RND_Cについては、
図4における乱数系列RND_Bに対する扱いと同様に、乱数系列RND_Cをそのまま遅延無しの状態でXORゲートに入力する構成としてもよい。この場合、上記の乱数系列の相対的時間差の組みは、(TA,TC)=(N-1-2k,N-1-k)となる。
【0054】
図6は、乱数生成装置を搭載する半導体装置の構成の一例を示す図である。
図6に示す半導体装置100は、乱数発生器10、乱数発生器11、乱数分配器12、及び演算回路41乃至43を含む。乱数発生器10、乱数発生器11、及び乱数分配器12は、
図1乃至
図5を参照して説明したようにして、N個の乱数系列RND_0乃至RND_(N-1)を生成してよい。
図6では、図示の都合上、乱数系列RND_2、RAND_5、及びRND_6が示される。
【0055】
乱数分配器12は、フリップフロップ20-1乃至20-6及び20A-3乃至20A-5、フリップフロップ21-1乃至21-4及び21A-1、及びXORゲート31乃至33を含む。フリップフロップ20-1乃至20-6は、
図3のフリップフロップ20-1乃至20-N-1の一部又は全部に相当し、乱数発生器10が生成した乱数系列をクロック信号CLKに同期して遅延する。フリップフロップ21-1乃至21-4は、
図3のフリップフロップ21-1乃至21-N-1の一部又は全部に相当し、乱数発生器11が生成した乱数系列をクロック信号CLKに同期して遅延する。図示の都合上、各フリップフロップへのクロック信号の印加については、図示が省略されている。
【0056】
フリップフロップ20A-3乃至20A-5は、フリップフロップ20-1乃至20-6が配置される信号伝搬経路から枝分かれし、別の信号伝搬経路に沿って配置されている。論理的には、フリップフロップ20A-3乃至20A-5の出力値は、それぞれフリップフロップ20-3乃至20-5の出力値に等しい。同様に、フリップフロップ21A-1は、フリップフロップ21-1乃至21-4が配置される信号伝搬経路から枝分かれし、別の信号伝搬経路に沿って配置されている。論理的には、フリップフロップ21A-1の出力値は、フリップフロップ21-1の出力値に等しい。
【0057】
演算回路41、42、及び43は、それぞれXORゲート31、32、及び33が演算した排他的論理和を入力として受け取る。XORゲート31、32、及び33は、それぞれ対応する演算回路41、42、及び43の近傍(物理的に近い位置)に配置される。XORゲート31乃至33は、
図3のXORゲート22-0乃至22-N-1の一部に相当する。演算回路41、42、及び43は、それぞれ乱数系列RND_2、RAND_5、及びRND_6を用いた演算を行う。演算としては、例えばモンテカルロ・シミュレーションやストカスティック演算に関する演算であってよい。
【0058】
図6に示される構成では、2個の乱数発生器10及び11の物理的位置から演算回路41乃至43の物理的位置迄の信号伝搬経路に沿って、シフトレジスタに含まれるフリップフロップが配置される。ここで信号伝搬経路に沿ってフリップフロップが配置されるとは、複数のフリップフロップが信号の始点から終点までの間に略均等の間隔で配置されることを意味する。
【0059】
具体的には、乱数発生器10の物理的位置から演算回路41の物理的位置迄の信号伝搬経路に沿って、フリップフロップ20-1及び20-2が配置される。また乱数発生器10の物理的位置から演算回路42の物理的位置迄の信号伝搬経路に沿って、フリップフロップ20-1及び20-2並びに20A-3乃至20A-5が配置される。また乱数発生器10の物理的位置から演算回路43の物理的位置迄の信号伝搬経路に沿って、フリップフロップ20-1乃至20-6が配置される。
【0060】
同様に乱数発生器11の物理的位置から演算回路41の物理的位置迄の信号伝搬経路に沿って、フリップフロップ21-1乃至21-4が配置される。また乱数発生器11の物理的位置から演算回路42の物理的位置迄の信号伝搬経路に沿って、フリップフロップ21A-1が配置される。また乱数発生器11の物理的位置は演算回路43の物理的位置に近いため、演算回路43への信号伝搬経路にフリップフロップは配置されない。
【0061】
上記のように信号伝搬経路に沿ってフリップフロップを配置することにより、乱数系列を遅延させるという遅延調整部としての機能を実現すると同時に、信号線の引き延ばしに伴う波形の劣化に起因する誤動作を防ぐという効果を得ることができる。またフリップフロップの配置された信号伝搬経路を分岐することにより、信号線の無理な引き延ばしにより波形の劣化を引き起こすことなく、各演算回路に対応するXOR回路に対して、適切な遅延状態の信号(即ち所望の相対的時間差の信号)を供給できる。
【0062】
図7は、乱数生成器をソフトウェアにより実装する装置の構成を示す図である。前述のように、上述の乱数生成器による乱数生成動作は、ソフトウェアとして実装されてもよい。
【0063】
図7に示されるように、乱数生成器を実装する装置は、例えばパーソナルコンピュータ等のコンピュータにより実現される。
図7の装置は、コンピュータ510と、コンピュータ510に接続されるディスプレイ装置520、通信装置523、及び入力装置よりなる。入力装置は、例えばキーボード521及びマウス522を含む。コンピュータ510は、CPU511、RAM512、ROM513、ハードディスク等の二次記憶装置514、可換媒体記憶装置515、及びインターフェース516を含む。
【0064】
キーボード521及びマウス522は、ユーザとのインターフェースを提供するものであり、コンピュータ510を操作するための各種コマンドや要求されたデータに対するユーザ応答等が入力される。ディスプレイ装置520は、コンピュータ510で処理された結果等を表示すると共に、コンピュータ510を操作する際にユーザとの対話を可能にするために様々なデータ表示を行う。通信装置523は、周辺装置との通信又は遠隔地との通信を行なうためのものであり、例えばモデム、ネットワークインターフェース、USB(Universal Serial Bus)等よりなる。
【0065】
乱数生成器の機能は、コンピュータ510が実行可能なコンピュータプログラムとして提供される。このコンピュータプログラムは、可換媒体記憶装置515に装着可能な記憶媒体Mに記憶されており、記憶媒体Mから可換媒体記憶装置515を介して、RAM512或いは二次記憶装置514にロードされる。或いは、このコンピュータプログラムは、周辺装置又は遠隔地にある記憶媒体(図示せず)に記憶されており、この記憶媒体から通信装置523及びインターフェース516を介して、RAM512或いは二次記憶装置514にロードされる。
【0066】
キーボード521及び/又はマウス522を介してユーザからプログラム実行指示があると、CPU511は、記憶媒体M、周辺装置、遠隔地記憶媒体、或いは二次記憶装置514からプログラムをRAM512にロードする。CPU511は、RAM512の空き記憶空間をワークエリアとして使用して、RAM512にロードされたプログラムを実行し、適宜ユーザと対話しながら処理を進める。なおROM513は、コンピュータ510の基本動作を制御するための制御プログラムが格納されている。
【0067】
上記コンピュータプログラムを実行することにより、コンピュータ510が、上記各実施例で説明されたように乱数生成器の乱数生成動作を実行する。
【0068】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【符号の説明】
【0069】
10 乱数発生器
11 乱数発生器
12 乱数分配器
20 遅延調整部
21 遅延調整部
41 演算回路
42 演算回路
43 演算回路
510 コンピュータ
511 CPU
512 RAM
513 ROM
514 二次記憶装置
515 可換媒体記憶装置
516 インターフェース
520 ディスプレイ装置
521 キーボード
522 マウス
523 通信装置