(57)【特許請求の範囲】
【請求項１】
一連の発振器出力パルス信号を生成するドリフト発振器と、
前記ドリフト発振器の出力するパルス信号の各論理レベルの変化に応答してラッチパルス信号を発生するエッジ検出器と、
クロックパルス信号をカウントするカウンタと、
前記ラッチパルス信号に応答して前記カウンタからの前記クロックパルスのカウントをラッチするラッチと、
を含む装置。
【請求項２】
前記エッジ検出器は、
前記ドリフト発振器に結合された第１入力と、遅延要素を介して前記ドリフト発振器に結合された第２入力とを有する排他ＯＲゲート、
を含む、請求項１記載の装置。
【請求項３】
前記遅延要素は、
複数個の直列接続のインバータ、
を含む、請求項２記載の装置。
【請求項４】
前記ラッチは、
前記カウンタからのカウントを受け、前記エッジ検出器から出力される前記ラッチパルス信号によりゲートされるレジスタ、
を含む、請求項１記載の装置。
【請求項５】
さらに
前記ラッチに以前にラッチしたカウントを記憶するレジスタと、
前記ラッチに現在ラッチされたカウントと前記レジスタに記憶された前記以前にラッチされたカウントとの間の差を決定する論理回路、
を含む、請求項１記載の装置。
【請求項６】
前記カウンタは、
ベース１カウンタ、
を含む、請求項１記載の装置。
【請求項７】
前記ベース１カウンタは、
シフトレジスタ、
を備える、請求項６記載の装置。
【請求項８】
前記カウンタは前記ドリフト発振器の出力する各パルス信号の論理レベルの変化に応答して再始動する、請求項１記載の装置。
【請求項９】
前記クロックパルス信号の周波数は前記ドリフト発振器の出力するパルス信号の論理レベルの変化の周波数より高い、請求項１記載の装置。
【請求項１０】
クロックパルスをカウントする段階と、
エッジ検出器を用いて、ドリフト発振器の一連の出力パルスの論理レベルの各変化に応答してラッチパルスを生成する段階と、
前記ラッチパルスに応答して前記クロックパルスのカウントをラッチする段階と、
を含む方法。
【請求項１１】
前記ドリフト発振器の出力の論理レベルの各変化は、前記エッジ検出器として、前記発振器に結合された第１入力と遅延要素を介して前記ドリフト発振器に結合された第２入力とを有する排他ＯＲゲートを使用して検出される、請求項１０記載の方法。
【請求項１２】
前記カウントはレジスタに記憶され、前記エッジ検出器からの出力に応答して前記レジスタをゲートすることにより該カウントがラッチされる、請求項１０記載の方法。
【請求項１３】
前記クロックパルスをカウントする段階は、各前記ラッチパルス発生後に該カウントをリセットする、請求項１０記載の方法。
【請求項１４】
前記クロックパルスはベース１カウンタを使用してカウントされる、請求項１０記載の方法。
【請求項１５】
以前にラッチしたカウントを記憶する段階と、
現在ラッチしたカウントと前記以前にラッチしたカウントとの間の差を決定する段階、
をさらに含む、請求項１０記載の方法。
【請求項１６】
前記クロックパルスの周波数は前記ラッチパルスの周波数より高い、請求項１０記載の方法。
【請求項１７】
前記カウントをラッチする段階は、
割り込み信号をプロセッサに印加する段階、
を含む、請求項１０記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
複数個のビットを含む乱数の高速発生を必要とする多数のアプリケーションがある。このようなアプリケーションは、キーサーバー、セッションキー、ノンスでの暗号キー発生、シミュレーション、モンテカルロまたは乱数計算、ディザリング、賭博及びゲームを含む。しばしば、バッファされた、オフライン生成の乱数を使用可能であるが、これは巨大なバッファを必要とし、バッファを充填する前に相当な初期遅延（すなわち、待ち時間）がある。
【背景技術】
【０００２】
多数の物理（すなわち、真の）乱数発生器は一定レートでサンプルされる低品質（ドリフト）発振器を使用する。発振器は位相雑音とジッタを受ける。位相雑音とジッタは共に発振器の出力における時間的不確定性の尺度である。位相雑音は発振器の周波数領域不確定性を指し、一方ジッタは時間領域の発振器不確定性の尺度である。少なくとも1周期でドリフト可能である発振器の位相に対して十分遅いサンプル速度で発振器信号をサンプルした場合、サンプルは乱数である。
【０００３】
位相雑音とジッタのソースはランダム（例えば、雑音）または決定的（例えば、外乱により発生）である。位相雑音とジッタは振幅及び位相変移を生じる。位相変移は時間で蓄積し、制限なしにドリフトする。位相雑音とジッタは非定常ランダム過程としてモデル化可能である。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ランダム・ジッタは多数の原因から起因する。これらの要因は、熱雑音（例えば、半導体結晶構造の振動）、半導体プロセス変動による不完全性、なだれ雑音、ショット雑音、等を含む。
【０００５】
決定論的ジッタは、隣接信号トレース間の漏話のような干渉信号、電磁干渉（ＥＭＩ）輻射、交流（ＡＣ）電力線、無線周波数（ＲＦ）信号源、振動、複数層基盤の電力層の雑音、回路の他の部分により発生する負荷変動、等により発生される。雑音は信号電圧レベルを変調し、論理ゲートの閾値電圧を変更し、または接地基準を変更可能であり、ゲートをスイッチするために必要な電圧の変動を発生し、これにより有限のスルーレート信号のスイッチング時点を変更する。
【０００６】
ドリフト発振器は、出力を最初のインバータに帰還した、直列接続の（すなわちリングの）奇数段のインバータ（またはその他のインバーティング・ゲート）を含むリング発振器として構成可能である。インバータまたはゲートはチップ製造業者により提供される標準ディジタル部品ライブラリから構成可能である。しかしながら、これらのゲートは、雑音に対して感度が低く、電源電圧に対して非常に依存度が低く、大きなアナログ利得を有しており、スイッチング点は非常に安定している。十分なドリフトを見るためには、数百万のスイッチング事象を発生させなければならない。
【０００７】
期待される位相ドリフトが出力の1全期間に到達するようなレートでｎ段リング発振器出力をサンプルした場合、回路の複雑度はインバータの数ｎと線形に増大し、電力消費は2乗的に増大し、スループット（すなわち、単位時間に発生されるランダムビットの数）は2乗的に減少する。最大のスループットは可能な最短のリングの発振器を使用して達成される。安定した発振には、インバータのアナログ利得の積が発振周波数で１より相当大きくなければならない。利得の積が１に近い場合、回路は小出力信号振幅の正弦波発振器を生成し、利得が１より小さい場合、回路は中間の直流電圧に安定し、その両方とも大きな電力消費を発生する。
【０００８】
例えば、入力容量と共に積分器を形成する、大きな抵抗をその入力と直列に挿入することにより、ゲートを遅くすることも可能である。これは大きな雑音感度を生じ、大きな位相ドリフトを発生する。しかしながら、抵抗は標準のディジタル部品ライブラリの部品ではなく、有限抵抗のアナログ・スイッチを使用するような、何らかの回避方法が必要である。抵抗値は変動し、常に完全に指定できないため、発振器の再現性を困難にし、製造過程の各微細変更時に再設計が必要となる。
【課題を解決するための手段】
【０００９】
ある面で、本発明は、発振器、パルスをカウントするカウンタ、発振器の出力の論理レベルの変化に応答してカウンタからのカウントをラッチするラッチを含む装置を提供する。本装置は、発振器の出力の論理レベルの変動に応答してラッチ信号を発生するエッジ検出器をさらに含む。
【００１０】
他の面では、本発明は、パルスをカウントする段階と、発振器の出力の論理レベルの変化を検出する段階と、発振器の出力の論理レベルの変化に応答してカウントをラッチする段階と、を含む方法を提供する。
【００１１】
他の面では、本発明は、ドリフト発振器、発振器の出力をサンプルするサンプラ、発振器の出力のサンプルを記憶するシフトレジスタとを含み、シフトレジスタの状態が乱数を表す装置を提供する。
【００１２】
これらの及び各種のその他の機能と利点は以下の詳細な説明の読取から明らかとなる。
【実施例】
【００１３】
図１は本発明のある面により構成された乱数発生器１０の概略図である。図１の例では、ドリフト発振器１２が線路１４上に発振出力信号を供給する。ドリフト発振器は、例えば、互いに電気的に直列に接続された奇数段のインバータまたはゲート１６、１８、２０を含むリング発振器が可能である。あるインバータの出力が他のインバータの入力に帰還されてリングを形成する。
【００１４】
線路１４上の発振信号は排他ＯＲゲート２４の第１入力２２に供給される。遅延要素２６を使用して排他ＯＲゲート２４の第２入力２８に発振信号の遅延版を与える。遅延要素は、例えば、直列接続の（偶数個の）インバータ３０、３２、３４、または任意数のバッファ・ゲートから構成可能である。１例では、遅延要素は２から８インバータを含む。
【００１５】
遅延要素と排他ＯＲゲートの組合せは、発振器出力信号の上昇及び下降エッジに応答して線路３８上にパルスを発生するエッジ検出器３６を形成する。パルスは論理０−１または論理１−０から変化するレベルで正パルスである。これらのパルスはレジスタ４２のラッチ入力４０に与えられる。
【００１６】
高速クロック４４は線路４６上に複数個のパルスを有するクロック信号を発生する。クロック・パルスはカウンタ４８によりカウントされて線路５０上にカウント値を発生する。このカウント値は入力Ａ−Ｈ上でレジスタに入力される。レジスタがエッジ検出器からラッチ信号を受け取ると、レジスタの出力５２が現在のカウンタ値でラッチされる。発振器のエッジのタイミングの変動により、ラッチ出力５２は乱数となる。十分な乱数性を達成するため、クロック信号４６はドリフト発振器のエッジ３８より高周波数でなければならない。
【００１７】
図１の例では、高速３−８ビット自走カウンタの現在のカウントがエッジ検出器パルスによりラッチされ、レジスタから出力される。ある種のマイクロプロセッサは組み込み高速カウンタを有する。カウンタ値のいくつかの最小桁ビットをリングバッファでマスクし収集して周期的にハッシュする時、発振器の検出されたパルス・エッジを割り込みとして使用可能である。
【００１８】
図２は発振器出力とエッジ検出器出力を図示する波形図である。波形６０は図１の線路１４上の発振器の出力を表し、一連のパルス６２を含む。波形６４は図１の遅延要素２６により遅延された後の発振器出力を表し、一連のパルス６６を含む。波形６８は図１の線路３８上の排他ＯＲゲートの出力を表し、一連のエッジ検出器パルス７０を含む。パルス７０は図１のレジスタをラッチするために使用される。波形６０はジッタを受けるため、上昇及び下降エッジのタイミングは予測不能である。それ故、パルス７０のタイミングも予測不能となり、レジスタの出力は乱数となる。図２の波形は矩形パルスであることが図示されているが、これらの波形はエッジ検出器の動作を図示するために与えられたもので、実際のシステムではパルスは矩形ではないかもしれないことを理解すべきである。
【００１９】
発振器出力の論理レベルの変化の間の時間間隔の変動がジッタである。これは正規分布に近く、従ってエントロピーは一様分布の位相ジッタ値より小さい。
【００２０】
ある面では、本発明は従来のクロック・サンプリング技術の改良を提供する。ドリフト発振器出力の変化（すなわち、上昇または下降）時に、高速増分カウンタをラッチする。これは、発振器の出力の論理レベルの変化でのジッタの正確な測定を基にした、乱数発生器アーキテクチャを提供する。
【００２１】
ドリフト発振器の伝統的な遅いサンプリングの代わりに、多発振周期後に一連の時間点付近でサンプルのバーストを取って発振器出力が変化する最近接の瞬間を見出すことも可能である。このようにして、サンプルのバーストで値を検査して、エッジ検出を論理回路またはソフトウェアにより行う。
【００２２】
その他の実装の可能性は、高速サンプリングを連続的に実行することである。再度、０と１の生成列で、論理回路または何らかのソフトウェアが異なる近接ビットを定めて、ドリフト発振器信号が論理レベルを変化する時点を告げることも可能である。
【００２３】
カウンタ値Ｃ０をラッチした後にカウンタを０にリセットする、またはレジスタＣ１またはＣ２に最後のまたは最後から２番目のラッチされたカウンタ値を保持し、第１次または第２次の差：Ｃ１−Ｃ０、またはＣ２−Ｃ０の各々を返す、というような同様の発想の多数の実装可能性がある。
【００２４】
カウンタ・クロックは非常に正確である必要はないことに注意された。クロック・ジッタは回路出力の全体乱数性を改善する。
【００２５】
暗号応用では、発生列を安全にハッシュしなければならない、これは列を白色化する。８ビット・サンプルが２ビット以上のエントロピーを与える場合、ビットレートの４対１縮減が完全な乱数列に近いものを与える。例えば、任意のキー（ＣＢＣ−ＭＡＣ）を使用した、ＡＥＳによる４段ＣＢＣ暗号により、５１２ビット入力が１２８ビット出力に変換される。
【００２６】
乱数発生器により発生される秒あたりのビットの歩留まりは、ドリフト発振器の周波数Ｆ、ジッタＪ、クロック周波数Ｆｃ、及びカウンタ周期Ｃを基に決定可能である。期間［−Ｊ、Ｊ］の長さがクロック周期と大体同じである時に、カウンタ分解能当たりの最適乱数性が達成され、
0004893895.tif 000002
【００２７】
乱数発生器の歩留まりは約１／（２Ｆ）時間でｌｏｇ２Ｃビット、すなわち、
歩留まり＝２Ｆ・ｌｏｇ２Ｃビット／秒
【００２８】
上述した乱数発生器の１例の実装では、発振周期＝２０％、Ｆ＝２０ＭＨｚ、Ｆｃ＝１ＧＨｚ、及びＣ＝１６に対して、ジッタがスイッチング時間変動の標準偏差である歩留まりを決定可能である。発振器出力信号のエッジはＪ／√２  （１４％）によりジッタする。
【００２９】
この例では、４ビット・カウンタはＣ＝１６を与え、
0004893895.tif 000003
これは４＊４０Ｍｂ／ｓ＝１６０Ｍｂ／ｓの乱数ビットの歩留まりを与える。
【００３０】
他の例では、Ｂビット・カウンタのカウンタ周期Ｃは２Ｂである。６ビット・カウンタを使用した場合（Ｃ＝６４）、対応するクロック周波数は４．５ＧＨｚである、これは通常の応用例には高速すぎる。３ビット・カウンタがより現実的で、Ｃ＝８とＦｃ＝５６６ＭＨｚは１２０Ｍｂ／ｓの歩留まりを、または２ビット・カウンタでＦｃ＝２８３ＭＨｚクロックでは、８０Ｍｂ／ｓの歩留まりを与える。これは高速クロック（〜１ビット・カウンタ）によるサンプリングを使用したドリフト発振器が与えるものより２倍の秒当たり乱数ビットである。
【００３１】
もちろん、最適クロック周波数より低い値で大きなカウンタを使用可能である。残念ながら、サンプルは相関がある。大きなカウンタと更なるハッシュ操作の犠牲の下で、ハッシュは最適クロック周波数より僅かに大きな歩留まりを提供可能である。
【００３２】
この型式の乱数発生器の利点は、ジッタが発振器周波数に依存していないため、外部信号への発振器周波数の同期が乱数性を劣化させない点である。外部信号によるジッタの変調は常に存在するランダムなジッタへ単に加算することであり、従って容易に検出可能である、この影響が非常に大きくなるまで乱数性は影響されない。例えば、発生器の他の同一なコピーを組み込み可能である。２個の発生器が相関出力を与えた場合、強力な外乱が検出される。他の可能性は位相ジッタ値の列の信号処理であり、雑音下限を監視し、または強力な周期周波数成分を探索する。
【００３３】
ある面では、本発明は、ジッタにより変動する時間で自走カウンタをサンプルすることにより乱数発生用に発振器位相ジッタを使用する有効な方法を提供する。生成した乱数発生器は実用に一般的に使用される発振器サンプリングを基にしたものより高速であり、１個の発振器のみを使用して内部同期の問題を回避している。
【００３４】
他の面では、本発明は高品質、それでも安価かつ高速な乱数発生器を提供し、これは多くの応用例での安全なバッファリングの必要性を除去する。
【００３５】
同様の乱数性を与えるが、特殊な条件下で実装利点を提供する、他の可能な実装がある。図３は本発明の他の面による乱数発生器８０のブロック線図である。図３の例では、ドリフト発振器１２が線路１４上に発振信号出力を供給する。図１のように、ドリフト発振器は、例えば、リング発振器が可能である。
【００３６】
線路１４上の発振信号は排他ＯＲゲート２４の第１入力２２に供給される。遅延要素２６を使用して排他ＯＲゲート２４の第２入力２８に発振信号の遅延版を与える。図１のように、遅延要素は、例えば、直列接続のインバータを含む。１例では、遅延要素は２から８インバータを含む。
【００３７】
遅延要素と排他ＯＲゲートの組合せは、発振器出力信号の上昇及び下降エッジに応答して線路３８上にパルスを発生するエッジ検出器３６を形成する。パルスは、論理０−１または論理１−０から変化するレベルの正パルスが可能である。これらのパルスはレジスタ４２のラッチ入力４０に与えられる。
【００３８】
高速クロック４４は線路４６上に複数個のパルスを有するクロック信号を発生する。クロック・パルスはカウンタ４８によりカウントされて線路５０上にカウント値を発生する。このカウント値は入力Ａ−Ｈ上でレジスタに入力される。レジスタがエッジ検出器からラッチ信号を受け取ると、レジスタの出力５２は現在のカウンタ値にラッチされる。エッジのタイミングの変動により、ラッチされた出力は乱数である。図３の回路では、線路３８上のパルスがカウンタを再始動するようにエッジ検出器の出力はカウンタのリセット入力５４に接続される。
【００３９】
図４は本発明の他の面による乱数発生器９０のブロック線図である。図３の例では、ドリフト発振器１２が線路１４上に発振出力信号を供給する。図１のように、ドリフト発振器は、例えばリング発振器が可能である。
【００４０】
線路１４上の発振信号は排他ＯＲゲート２４の第１入力２２に供給される。遅延要素２６を使用して、排他ＯＲゲート２４の第２入力２８に発振信号の遅延版を与える。図１のように、遅延要素は、例えば直列接続のインバータを含むことが可能である。１例では、遅延要素は２から８インバータを含む。
【００４１】
遅延要素と排他ＯＲゲートの組合せは、発振器出力信号の上昇及び下降エッジに応答して線路３８上にパルスを発生するエッジ検出器３６を形成する。パルスは、論理０−１または論理１−０から変化するレベルの正パルスが可能である。これらのパルスはレジスタ４２のラッチ入力４０に与えられる。
【００４２】
高速クロック４４は線路４６上に複数個のパルスを有するクロック信号を発生する。クロック・パルスはカウンタ４８によりカウントされて線路５０上にカウント値を発生する。このカウント値は入力Ａ−Ｈ上でレジスタに入力される。レジスタがエッジ検出器からラッチ信号を受け取ると、レジスタの出力５２は現在のカウンタ値にラッチされる。エッジのタイミングの変動により、ラッチされた出力は乱数である。
【００４３】
論理回路９２は出力５２を受け取り、線路９６上に乱数９４を発生する。レジスタ９８はラッチされたカウント出力５２を記憶する。次いで論理回路は現在のラッチされたカウント出力５２と以前にラッチされたカウント出力の両方を使用して乱数を発生する。例えば、論理回路はラッチされたカウンタ値の差または２次差を計算して乱数出力を発生可能である。
【００４４】
図５は本発明の他の面による乱数発生器１００のブロック線図である。図５の例では、ドリフト発振器１２が線路１４上に発振出力信号を供給する。図１のように、ドリフト発振器は、例えばリング発振器が可能である。
【００４５】
線路１４上の発振信号は排他ＯＲゲート２４の第１入力に供給される。遅延要素２６を使用して、排他ＯＲゲート２４の第２入力２８に発振信号の遅延版を与える。図１のように、遅延要素は、例えば直列接続のインバータを含むことが可能である。１例では、遅延要素は２から８インバータを含む。
【００４６】
遅延要素と排他ＯＲゲートの組合せは、発振器出力信号の上昇及び下降エッジに応答して線路３８上にパルスを発生するエッジ検出器３６を形成する。パルスは、論理０−１または論理１−０から変化するレベルの正パルスが可能である。これらのパルスはレジスタ４２のラッチ入力４０に与えられる。
【００４７】
高速クロック４４は線路４６上に複数個のパルスを有するクロック信号を発生する。クロック・パルスはベース１カウンタ１０２によりカウントされて線路５０上にカウント値を発生する。ベース１カウンタは単一の１値と複数個のゼロを含むシフトレジスタが可能である。各クロック・パルスにより、１はシフトレジスタ内をシフトされる。１値の位置がカウント値を決定する。このカウント値が入力Ａ−Ｈ上でレジスタに入力される。レジスタがエッジ検出器からのラッチ信号を受け取ると、レジスタの出力５２が現在のカウンタ値でラッチされる。エッジのタイミングの変動により、ラッチされた出力は乱数である。
【００４８】
図５の回路はベース１カウンタ（例えば、シフトレジスタ）を使用し、ラッチの前後にのみ出力をデコードする。
【００４９】
図６は本発明の他の面による乱数発生器１１０のブロック線図である。図６の例では、ドリフト発振器１１２が線路１１４上に発振出力信号を供給する。図１のように、ドリフト発振器は、例えばリング発振器が可能である。
【００５０】
線路１１４上の発振信号は、発振エッジのみの代わりに、クロック１１８による高周波数で、サンプラ１１６により図示するように、連続的にサンプルされる。サンプルされた値は、論理レベルの変化を捕える、リングバッファ１２０に記憶される。この例では、リングバッファは複数個のフリップフロップ回路１２２を含み、各フリップフロップの状態が線路１２４上で読み出し可能である。次いでこのフリップフロップ値が定期的間隔でデコードされる。
【００５１】
各側面で、本発明は標準のドリフト発振器に加えて標準の論理部品を使用可能である。これはサンプルされるリング発振器より数桁倍高速である。これはジッタ信号によりサンプルされる高速発振器より数倍高速である。これは単一のドリフト発振器を使用して実装可能であるため、異なる発振器間での相互相関の問題はない。これはまた、多数の発振期間後の位相ドリフトのサンプリングより強力な外乱に対してより敏感ではない。
【００５２】
上述した実装とその他の実装は添付の特許請求の範囲内である。
【図面の簡単な説明】
【００５３】
【図１】本発明のある面による乱数発生器の概略図。
【図２】発振器出力とエッジ検出器出力を図示する波形図。
【図３】本発明の他の面による乱数発生器の概略図。
【図４】本発明の他の面による乱数発生器の概略図。
【図５】本発明の他の面による乱数発生器の概略図。
【図６】本発明の他の面による乱数発生器の概略図。
【符号の説明】
【００５４】
１２  ドリフト発振器
２４  排他ＯＲゲート
２６  遅延要素
４２  レジスタ
４４  高速クロック
４８  カウンタ
【図１】
0004893895.tif 000004
【図２】
0004893895.tif 000005
【図３】
0004893895.tif 000006
【図４】
0004893895.tif 000007
【図５】
0004893895.tif 000008
【図６】
0004893895.tif 000009