オシレータとは
The maximum number of voices is equal to the sum of voices generated by all oscillators, multiplied by the maximum number of polyphonic notes.
You can accentuate the level of bass tones for example, or create PWM-like effects by modulating the phase of one of the oscillators.
これは、16 ポリフォニー時に、同時に最高 512 ヴォイスを発 することができることを意味します ! オシレータ は 、 それらの鮮明度、機敏性または特 性を失うことなく、非常に低くて(0.01Hz まで!)非常に高い(サンプルレートの最 高半分)周波数域で、極めてスムーズに機能します。
The oscillators perform extremely well in both the very low (down to 0.01Hz and below!) and very high (all the way up to half the samplerate) frequency オシレータとは regions without losing their sharpness, liveliness or character.
For over 45 years, The Connor-Winfield Corporation オシレータとは オシレータとは オシレータとは has designed and manufactured quartz based timing circuits and oscillators.
研究開発部門の専門家たちがDMAを選択する主な理由は、その精度の高さ、少量 の試料で足りる点、レファレンス オシレータ を 伴 オシレータとは う自動温度スキャン機能だと言えま す: 100分の1ステップで変更が可能なため、作業時間を大幅に [. ]
[. ] products but also offer a broad line of standard oscillator products and non-crystal based oscillators.
After incorporation in 1963, Connor-Winfield focused primarily on designing and manufacturing quartz based timing circuits and oscillators for use in a wide variety of electronics applications.
FTS125-COO GPS同期オシレータ - Connor-Winfieldは、新しいGPS同期 オシレータ を 発 売します。この新製品は、GPSによるタイミングおよび周波数製品で成功を収めたx125ファミリに追加されます。
FTS125-COO GPS Disciplined Oscillator - Connor-Winfield オシレータとは announces the release of a new GPS disciplined oscillator, [. ]
As experimental demonstration, the single オシレータとは side-band phase noise of RF signal from the VCO is locked to the mode-locked Ti:Sapphire laser in the spectrum covering the range of 10 kHz to 1 MHz.オシレータとは
Crystek Corporationの製品ラインには、クリスタル、クロッ ク オシレータ 、 OC XO、TCXO、VCXO、VCSO、VCO、PLL、RFケーブル(バルクケーブルおよびコネクタ実装済みケーブル)、ケーブルコネクタ、パワーディテクタ、フィルタ、アッテネータ、DCブロック、ダブラ、アンプ、VCO評価ボードなどがあります。
or connectorized), Cable Connectors, Power Detectors, Filters, Attenuators, DC オシレータとは Blocks, Doublers, Amplifiers, and VCO Evaluation Boards.
Eleven temperature chambers are used for both crystal オシレータとは オシレータとは オシレータとは and oscillators, along with three robotic stations that automatically test, tape, and reel 5 オシレータとは x 7 mm oscillators.
As a leading US manufacturer of oscillators and timing products, Connor-Winfield continually innovates to bring new crystal and non-crystal based oscillator products to the market.
レジスターの設定
CORE オシレータとは オシレータとは FUNCTION REGISTERS SUMMARY
SPECIAL FUNCTION REGISTERS SUMMARY
SPECIAL FUNCTION REGISTERS SUMMARY(続き)
オシレータとは PIC16(L)F1826/27 Data Sheet - DS41391D (Page.27-35)
- オシレーター(発振回路)の周波数
- 端子への機能の割り当てと動作モード
4-12-2.オシレーター(オシレータとは オシレータとは 発振回路)の周波数
#pragma config FOSC = INTOSC
OSCCON: OSCILLATOR CONTROL REGISTER
OSCSTAT: OSCILLATOR STATUS REGISTER
OSCTUNE: OSCILLATOR TUNING REGISTER
PIC16(L)F1826/27 Data Sheet - DS41391D (Page.65-67)
- OSCCON(オシレータとは Oscillator Control Register)
- OSCSTAT(Oscillator Status Register)
- OSCTUNE(Oscillator Tuning Register)
OSCCON: OSCILLATOR オシレータとは オシレータとは CONTROL REGISTER
PIC16(L)F1826/27 Data Sheet - DS41391D (Page.65)
SCS(bit 0-1)/System Clock Select bits
SCSは、使用するオシレーターを選択するビット(System Clock Select bits)です。
- 1x:内部オシレーター
- 01:Timer1オシレーター
- 00:コンフィギュレーションビットFOSCによって指定したオシレーター
IRCF(bit 3-6)/Internal Oscillator Frequency Select bits
IRCFは、内部オシレーターを使用する場合の、周波数を選択するビット(Internal Oscillator Frequency Select bits)です。
- 000x:31 kHz オシレータとは LF
- 0010:31.25 kHz MF
- 0011:31.25 kHz HF
- 0100:62.5 kHz MF
- 0101:125 kHz MF
- 0110:250 kHz MF
- 0111:500 kHz MF(初期値)
- 1000:125 kHz HF
- 1001:250 kHz HF
- 1010:500 kHz HF
- 1011:1 MHz HF
- 1100:2 MHz HF
- 1101:4 MHz HF
- 1110:8 MHz または 32 オシレータとは MHz HF
- 1111:16 MHz HF
初期値の500 kHz MFを使用するので「0111」となります。周波数の後ろに付いているLF・MF・HFは、周波数の発生源となる内部オシレーターを表しています。
- LF:LFINTOSC(31kHz・低周波数内部オシレータ)
- MF:MFINTOSC(500kHz・中周波数内部オシレータ)
- HF:HFINTOSC(16MHz・高周波数内部オシレータ)
SPLLEN(bit 7)/Software PLL Enable bit
SPLLENは、クロックの周波数を4倍にする「4倍クロックモード」を使用するかどうかをプログラムによって設定するビット(Software PLL Enable bit)オシレータとは です。コンフィギュレーションビットPLLENによって有効(1)になっている場合は、以下の設定は無視されます。
- 1:4倍クロックモードを有効にする
- 0:4倍クロックモードを無効にする
- SCS(bit 0-1)/System Clock Select bits:00 オシレータとは
- IRCF(bit 3-6)/Internal Oscillator Frequency Select bits:0111
- SPLLEN(bit 7)/Software PLL Enable オシレータとは bit:0
OSCTUNE: OSCILLATOR TUNING REGISTER
PIC16(L)F1826/27 Data Sheet - DS41391D (Page.67)
TUN(bit 0-5)/Frequency Tuning bits
TUNは、オシレーターの周波数を微調整するためのビット(Frequency Tuning bits)です。この設定は、HFINTOSC(HF)・MFINTOSC(MF)によって発生する周波数に影響します。LFINTOSC(LF)には影響を与えません。
ダイバージェンスを活用した取引方法
【SBI オシレータとは オシレータとは FXTRADE及び積立FX(店頭外国為替証拠金取引)】
店頭外国為替証拠金取引は、取引金額(約定代金)に対して少額の取引必要証拠金をもとに取引を行うため、取引必要証拠金に比べ多額の利益を得ることもありますが、その一方で短期間のうちに多額の損失を被る可能性があります。外貨での出金はできません。経済指標の結果によっては価格が急激に変動し、思わぬ損失が生ずるおそれがあります。また、その損失の額が預託した証拠金の額を上回ることもあります。取引価格、スワップポイント等は提供するサービスによって異なり、市場・金利情勢の変化等により変動しますので、将来にわたり保証されるものではありません。取引価格は、買値と売値に差があります。決済方法は反対売買による差金決済となります。店頭外国為替証拠金取引にあたっては必要な証拠金の額は提供するサービス及び取引通貨ペアごとに異なり、取引価格に応じた取引額に対して一定の証拠金率(「SBI FXTRADE」個人のお客様:4%(レバレッジ25倍)、ただし、ロシアルーブル/円およびブラジルレアル/円は10%(レバレッジ10倍)、法人のお客様:一般社団法人金融先物取引業協会が毎週発表する通貨ペアごとの為替リスク想定比率*(通貨ペアごとにそれぞれレバレッジが異なります)、「積立FX」個人および法人のお客様:100%(レバレッジ1倍)、50%(レバレッジ2倍)、33.334%(レバレッジ3倍))の証拠金が必要となります。
*為替リスク想定比率は、金融商品取引業等に関する内閣府令第117条第31項第1号に規定される定量的計算モデルを用い算出します。
【オプションFX(店頭通貨オプション取引)】
店頭通貨オプション取引は店頭外国為替証拠金取引の通貨を原資産とし、原資産の値動きやその変動率に対する予測を誤った場合等に損失が発生します。また、オプションの価値は時間の経過により減少します。当社が提示するオプションの取引価格は、買値と売値に差があります。当社の提供する店頭通貨オプション取引の決済方法は反対売買による清算となり、また、NDO(ノンデリバラブル・オプション)であるため権利行使日に権利行使価格と実勢価格による反対売買を行います。
【暗号資産CFD(店頭暗号資産証拠金取引)】
店頭暗号資産証拠金取引は、取引金額(約定代金)に対して少額の取引必要証拠金をもとに取引を行うため、取引必要証拠金に比べ多額の利益を得ることもありますが、その一方で短期間のうちに多額の損失を被る可能性があります。暗号資産の価格の変動によって思わぬ損失が生ずるおそれがあり、その損失の額が預託した証拠金の額を上回ることもあります。当社の取り扱う暗号資産は、本邦通貨または外国通貨ではありません。また、特定の国家または特定の者によりその価値が保証されているものではなく、代価の弁済を受ける者の同意がある場合に限り代価の弁済のために使用することができます。取引価格は、買値と売値に差(スプレッド)があります。スプレッドは暗号資産の価格の急変時や流動性の低下時には拡大することがあり、お客様の意図した取引が行えない可能性があります。決済方法は反対売買による差金決済となります。暗号資産の現物でのお預かり、お受取りはできません。店頭暗号資産証拠金取引を行う上で必要な証拠金の額は取り扱う暗号資産ごとに異なり、取引価格に応じた取引額に対して一定の証拠金率(個人のお客様:50%(レバレッジ2倍)、法人のお客様:一般社団法人日本暗号資産取引業協会が毎週発表する暗号資産ごとの暗号資産リスク想定比率*(暗号資産ごとにそれぞれレバレッジが異なります))の証拠金が必要となります。証拠金の詳細については、当社ホームページでご確認ください。取引にあたり手数料が発生することがあります。手数料の詳細については、当社ホームページでご確認ください。
*暗号資産リスク想定比率は、金融商品取引業等に関する内閣府令第117条第51項第1号に規定される定量的計算モデルを用い算出します。
【共通】
店頭暗号資産証拠金取引を除くその他のサービスは、原則、口座開設・維持費および取引手数料は無料です。ただし、当社が提供するその他の付随サービスをご利用いただく場合は、この限りではありません。また、元本及び利益が保証されるものではありません。決済方法は反対売買による差金決済又は清算となります。お取引を始めるに際しては、「契約締結前交付書面」、「取引約款」等をよくお読みのうえ、取引内容や仕組み、リスク等を十分にご理解いただき、ご自身の判断にてお取引くださるようお願いいたします。
SBI FXトレード株式会社(金融商品取引業者)
関東財務局長(金商)第2635号
加入協会:一般社団法人 金融先物取引業協会
一般社団法人 日本暗号資産取引業協会
FPGA と予測不可能性と乱数 (2)
リングオシレータの例 (3個の NOT ゲートが環状に接続されている)。
上図に示した3個の NOT ゲートからなる オシレータとは RO の動作について考えてみます。とはいえ、この回路には入力がないので、いずれかの信号の時刻ゼロにおける信号値を仮定して、そこから各信号の時間変化を求めてみます。ここでは各 NOT ゲートの出力を Q0、Q1、Q2 とし、回路の出力 Q は Q2 と定義します。また、各 NOT ゲートは τ の伝搬遅延をもつ (つまり、入力が変化してから オシレータとは τ 経過した後に出力が変化する) ものとします。
下図に、以上の仮定のもとで求めた RO のタイミングチャートを示します。
リングオシレータのタイミングチャートの例。
時刻0では、仮定どおり Q2 = ‘0’ として、Q0、Q1 は不定値とします。時刻 τ では、左側の NOT ゲートの入力 Q2 オシレータとは = ‘0’ より、Q0 は ‘1’ に変化します。その変化により、時刻 2τ では中央の NOT ゲートの出力 Q1 が ‘0’ に変化します。時刻 オシレータとは 3τ 以降も同様に、Q2 = ‘1’、Q0 = ‘0’、Q1 = ‘1’、……と変化します。
結果として、いつまで経ってもこの回路の信号はぐるぐると変化し続ける、つまり発振するということになります。環状 (リング) のゲートにより作られる発振回路 (オシレータ) なので、この回路をリングオシレータとよぶわけです。
ちなみに、NOT ゲートが偶数個の場合には、最終的に全ての NOT ゲートの出力値を安定に (オシレータとは オシレータとは 発振することなく) 定めることができます。これは、ある信号の値を ‘0’ と定めた場合でも、’1′ と定めた場合でも成り立ちます。こうした回路は、2つの安定状態をもつ回路、すなわち2安定 (バイステーブル) 回路といいます。2安定回路はフリップフロップや SRAM の記憶素子の基礎になっています。
ただ、先に示した RO はあくまで原理を説明するためのもので、そのまま使われることはまれです。特に、現実には発振するかどうかを決める有効入力がないと不便です。
そのため、NOT ゲートのうち1つを NAND ゲートで置き換えて、その一方の入力を有効入力とすることが多いです。また、このとき残った偶数個の NOT オシレータとは ゲートは、単に任意の個数のバッファ (入力をそのまま出力するゲート) としてしまっても、論理的に等価です。
実際のリングオシレータの例と、その回路ブロック。
ということで、実際に使われる RO は、上図に示す1個の NAND ゲートと任意個のバッファからなる構成をもつ場合が多いです。以降の説明では、これを1入力1出力の回路ブロック RO で表します。
今回の想定事項
今回紹介するサーベイ論文では、外部クロック入力も信頼できない (攻撃者によって操作されうる) ものとみなしています。つまり、TRNG で使うクロック信号は内部で作り出さなければならないということです。そのため今回は、クロック信号は RO を使って生成します。
リングオシレータを使った TRNG オシレータとは の例
下図に、基本的なリングオシレータ型 (ERO 型; Elementary RO) の TRNG の構造を示します。これは、2つの RO と分周比 K の分周回路、そして D フリップフロップ (D-FF) オシレータとは から構成されます。
基本的なリングオシレータ型 (ERO 型) の TRNG。
RO の出力周波数は一定ではありません。先に示したタイミングチャートでは全ての NOT ゲートの伝搬遅延を τ で一定とみなしました。しかし、実際には素子の細かな特性の違いによって伝搬遅延は少しずつ異なります。そのため、同じ形の RO でも、使うチップや素子の配置によってその出力周波数は異なります。
また、ある RO から出力される波形を細かく見れば、その周期にはほんの少しだけ (ピコ秒単位の) ばらつきがあります。これをジッタといいます。
これらの不確実性の影響によって、RO2 の出力を十分大きな K で分周した信号で RO1 の出力を D-FF でサンプリングすると、その出力からは ‘0’ と ‘1’ がほぼ半々の確率で、しかも予測不可能な形で現れます。K をどれくらい大きくするべきかは、確率的モデルから計算できます。具体的には、デバイスによっても異なりますが、数万~数十万程度のようです。
ERO 型の TRNG は、シンプルなハードウェアで実現できて、ランダム性も十分、デバイスや環境への非依存性も申し分ないのですが、 乱数の生成速度が極めて低いのが弱点 です。RO の出力周波数はおおむね数百 MHz なので、それを数万~数十万で分周するということは、数 kbit 毎秒程度でしか乱数が生成できないことを意味します。
じゃあそれを複数並べれば……と思った方は鋭いです。ただ、単に ERO 型の TRNG を複数並べるよりも、複数の RO の出力を XOR したものを乱数として使った方が、回路面積の面で効率が良くなります。それが下図に示す複数リングオシレータ型 (MURO 型; Multi RO) の TRNG です。
複数リングオシレータ型 (MURO 型) の TRNG。
多数の RO を使えば、それだけ分周比 K を小さくできます。論文では、120個の RO を使い、K を100に設定しています。ERO 型 TRNG を多数並べる場合と比べ、分周回路は1個だけで済みますし、K が小さいので分周回路自体も小さく作れます。これにより、数 Mbit 毎秒の速度での乱数生成が効率良く行えます。
また、複数個の RO の出力をサンプリングするのではなく、非同期回路のハンドシェイクで用いられる回路素子を使った Self-timed Ring (STR) というリングを構成し、その各出力をサンプリング、XOR する方法も提案されています。これを Self-timed Ring 型 (STR 型) の TRNG とよびます。論文では、255 素子の STR を用いることで、サンプリングクロックの分周が不要となることが示されています。つまり STR 型 TRNG では数百 Mbit 毎秒での乱数生成が可能です。
ただ、MURO 型と STR 型の TRNG は、必要な論理素子 (LUT や D-FF) の絶対数が多い (ともに百個単位) 点に注意が必要です。また オシレータとは STR 型では、望んだ動作をさせるために多くの素子を注意深く配置する必要があり、配置の自由度が低いということも、問題点として挙げられています。
コヒーレントサンプリング
2つの独立なクロック源を使う方法
次に紹介するのは、下図に示すコヒーレントサンプリング型 (COSO 型; Coherent Sampling RO) の TRNG です。今度は、2つの RO の出力が直接 D-FF のデータ入力 D とクロック入力に接続されています。詳しい原理は次回に説明したいと思いますが、ここでは簡単にその動きを紹介します。
コヒーレントサンプリング型 (COSO 型) の TRNG。
COSO 型 TRNG では、2つの RO から出力されるクロック信号がほんの少しだけ異なる周波数 (周期) をもつと考えます。そうすると、RO2 の出力によるサンプリングのたびに、RO1 の出力との間の位相が少しずつズレていきます (これがコヒーレントサンプリングです)。その結果、D-FF の出力は ‘0’ の連続と ‘1’ の連続を繰り返します。
実際に ‘0’ が何回連続するかには不確定性があります。この回数の偶奇を T フリップフロップ (T-FF) で数え、左の D-FF から ‘1’ が出力されたら、その結果を右の D-FF から出力します。これにより乱数を取り出すのが、COSO 型の TRNG です。
この COSO 型の TRNG は、周期が少しだけ異なる RO のペアを運良く見つけることができれば、1 Mbit 毎秒程度の乱数を極めて少ない数の論理素子 (オシレータとは LUT 20個と D-FF 3個程度) で実現できます。問題は、そうしたペアを見つけることが難しい、ということです。
サーベイ論文が発表された2016年時点では、この問題は未解決でした。しかし、2019年の FPL にてこの問題を解決する COSO 型 TRNG の改良が提案されています [2]。この論文は第5回で紹介する私の研究の土台にもなっているので、詳細はそのときに説明したいと思います。
1つのクロック源から周波数合成する方法
前述の通り、COSO 型 TRNG では周期が少しだけ異なる2つのクロック信号を用意する必要があります。実はその方法はもう1つあります。1つのクロック源 (RO) から PLL (Phase-locked Loop) を使って分周・逓倍を行い、そうしたクロック信号のペアを生み出すという方法です。この考えに基づくのが、下図に示す PLL を用いたコヒーレントサンプリング型 (PLL 型) TRNG です。
PLL を用いたコヒーレントサンプリング型 (PLL 型) の TRNG。
FPGA では、用途によっては様々な周波数のクロックが必要とされる場合があります。そのため、PLL などのクロッキング素子は FPGA 内にそれなりの個数存在しています。とはいえ、実際にその全てを使うことはまれですから、そのうちの2個をこうした用途で使用しても、ほとんどの場合問題はありません。
動作の基本原理は COSO 型と同様にコヒーレントサンプリングなので、COSO 型の利点の多くは PLL 型でも共通です。ただし、クロッキング素子は FPGA のメーカーや世代によって作りが変わっていることも多く、新しい世代の FPGA でこの手法が引き続き使用できるかどうかは、しっかりと検討しなければなりません。この辺りの詳しい話は、また次回することとします。
SR ラッチと TERO (遷移効果リングオシレータ)
SR ラッチの禁止状態
最後に紹介するのは、遷移効果リングオシレータ型 (TERO 型; Transition Effect RO) の TRNG ですが、その説明のために前回示した SR ラッチを再掲しておきます。
SR ラッチの回路図と特性表 (再掲)。
前回、この SR ラッチを禁止状態から一気に保持状態に移行させると何が起きるか……という話をしました。RO のタイミングチャートを検討したときと同様に考えてみると、Q と /Q とでそれぞれ時間 τ ごとに ‘0’ と ‘1’ とを繰り返す波形が得られます (オシレータとは オシレータとは 詳しくは第4回で検討します)。つまり、これも一種の発振回路として動作してしまうことになります。TERO 型 TRNG では、これを遷移効果リングオシレータとよんでいます。
ただ、現実にはこの発振は永遠には続きません。様々な要因により、どこかのタイミングで ‘0’ や ‘1’ の安定な状態に落ち着きます。回路をうまく調整してやると、最終的にどちらで安定するか (出力) や、安定するまでにどれくらい時間がかかるか (発振の回数) に不確実性が生まれます。このうち後者に着目したものが、TERO 型の TRNG オシレータとは オシレータとは です。
なお、前者に着目する、つまり SR ラッチの出力そのものに注目することでも TRNG を構成できます [3]。本コースでは、こうした TRNG について第4回で扱うことにします。ただし、この種の TRNG は厳密な確率的モデルが用意されているものではないため、今回のサーベイ論文では議論の対象外となっています。
TERO 型 TRNG
TERO 型の TRNG の構成例を下図に示します。左上に見える8の字状に接続された2つの NAND ゲートと任意個のバッファは、SR ラッチの2つの入力に同じ信号 /CTRL を接続した場合と論理的に等価です。
遷移効果リングオシレータ型 (TERO 型) の TRNG。
CTRL が ‘0’ の間は、ラッチは禁止状態で、両方の NAND ゲートが ‘0’ オシレータとは を出力します。CTRL が ‘1’ になると、ラッチは禁止状態から一気に保持状態に移行し、しばらくの間発振します。発振の回数の偶奇は、NAND ゲートの出力の立上りを T-FF で数えることで求めます。再び CTRL が ‘0’ になると、その結果が D-FF に取り込まれ、出力されます。これにより乱数を取り出すのが、TERO 型の TRNG です。
TERO 型の TRNG で十分なランダム性が取り出せるとき、発振する時間は概ね 1 マイクロ秒弱です。そのため、TERO 型の TRNG からはおよそ 1 Mbit 毎秒程度の乱数が取り出せます.必要な論理素子の数もかなり少なく済みます。
TERO 型の TRNG の問題点は、ちょうど良い回数の発振が起きるように回路を調整することが難しいことです。COSO 型と同様に、2016年時点でこの問題は未解決でした。しかし、2020年の FPL で発表した私の最近の研究で、回路の構成を工夫し、COSO 型 TRNG で行われたのと似た改良を施すことで、この問題も解決できることがわかりました [4]。詳細は、本コースの第5回で説明したいと思います。
今回は、FPGA 向けの TRNG の構成法のいくつかを概説するとともに、本コースで今後説明していく内容の導入を行いました。今回は、要点を挙げるかわりに、紹介した6種類の TRNG の利点・欠点を表にまとめておきます。
型 | 利点 | 欠点 |
---|---|---|
ERO 型 | 構成がシンプル,デバイス非依存性も良好 | 乱数の生成速度が極めて低い |
MURO 型 | デバイス非依存性が良好 | 使用する論理素子数が多い |
STR 型 | 乱数の生成速度が極めて高い | 使用する論理素子数が多い |
COSO オシレータとは 型 | 使用する論理素子数が少ない | 良好なクロックの組を見つけるのが難しい |
PLL 型 | 使用する論理素子数が少ない | 使用するクロッキング素子の影響が大きい |
TERO 型 | 使用する論理素子数が少ない | 回路の調整が難しい |
次回は、PLL 型の TRNG の動作についてもう少し詳しく説明したあと、これらを Xilinx 社の最近の FPGA でどうやれば活用できるかについて、我々の最近の研究成果をもとにお話したいと思います。
FPGA と予測不可能性と乱数 (2)
リングオシレータの例 (3個の NOT ゲートが環状に接続されている)。
上図に示した3個の NOT ゲートからなる RO の動作について考えてみます。とはいえ、この回路には入力がないので、いずれかの信号の時刻ゼロにおける信号値を仮定して、そこから各信号の時間変化を求めてみます。ここでは各 NOT ゲートの出力を Q0、Q1、Q2 とし、回路の出力 Q は Q2 と定義します。また、各 オシレータとは NOT ゲートは τ の伝搬遅延をもつ (つまり、入力が変化してから τ 経過した後に出力が変化する) ものとします。
下図に、以上の仮定のもとで求めた RO のタイミングチャートを示します。
リングオシレータのタイミングチャートの例。
時刻0では、仮定どおり Q2 = ‘0’ として、Q0、Q1 オシレータとは は不定値とします。時刻 τ では、左側の NOT ゲートの入力 Q2 = ‘0’ より、Q0 は ‘1’ に変化します。その変化により、時刻 2τ では中央の NOT ゲートの出力 Q1 が ‘0’ に変化します。時刻 3τ 以降も同様に、Q2 = ‘1’、Q0 = ‘0’、Q1 = ‘1’、……と変化します。
結果として、いつまで経ってもこの回路の信号はぐるぐると変化し続ける、つまり発振するということになります。環状 (リング) のゲートにより作られる発振回路 (オシレータ) なので、この回路をリングオシレータとよぶわけです。
ちなみに、NOT ゲートが偶数個の場合には、最終的に全ての NOT ゲートの出力値を安定に (発振することなく) 定めることができます。これは、ある信号の値を ‘0’ と定めた場合でも、’1′ と定めた場合でも成り立ちます。こうした回路は、2つの安定状態をもつ回路、すなわち2安定 (バイステーブル) 回路といいます。2安定回路はフリップフロップや SRAM の記憶素子の基礎になっています。
ただ、先に示した RO はあくまで原理を説明するためのもので、そのまま使われることはまれです。特に、現実には発振するかどうかを決める有効入力がないと不便です。
そのため、NOT ゲートのうち1つを NAND ゲートで置き換えて、その一方の入力を有効入力とすることが多いです。また、このとき残った偶数個の NOT ゲートは、単に任意の個数のバッファ (入力をそのまま出力するゲート) としてしまっても、論理的に等価です。
実際のリングオシレータの例と、その回路ブロック。
ということで、実際に使われる RO は、上図に示す1個の NAND ゲートと任意個のバッファからなる構成をもつ場合が多いです。以降の説明では、これを1入力1出力の回路ブロック RO で表します。
今回の想定事項
今回紹介するサーベイ論文では、外部クロック入力も信頼できない (攻撃者によって操作されうる) ものとみなしています。つまり、TRNG で使うクロック信号は内部で作り出さなければならないということです。そのため今回は、クロック信号は RO を使って生成します。
リングオシレータを使った TRNG の例
下図に、基本的なリングオシレータ型 (ERO 型; Elementary RO) の TRNG の構造を示します。これは、2つの RO と分周比 K の分周回路、そして D フリップフロップ (D-FF) から構成されます。
基本的なリングオシレータ型 (ERO 型) の TRNG。
RO の出力周波数は一定ではありません。先に示したタイミングチャートでは全ての NOT ゲートの伝搬遅延を τ で一定とみなしました。しかし、実際には素子の細かな特性の違いによって伝搬遅延は少しずつ異なります。そのため、同じ形の RO でも、使うチップや素子の配置によってその出力周波数は異なります。
また、ある RO から出力される波形を細かく見れば、その周期にはほんの少しだけ (ピコ秒単位の) ばらつきがあります。これをジッタといいます。
これらの不確実性の影響によって、RO2 の出力を十分大きな K で分周した信号で RO1 の出力を D-FF でサンプリングすると、その出力からは ‘0’ と オシレータとは オシレータとは ‘1’ がほぼ半々の確率で、しかも予測不可能な形で現れます。K をどれくらい大きくするべきかは、確率的モデルから計算できます。具体的には、デバイスによっても異なりますが、数万~数十万程度のようです。
ERO 型の TRNG は、シンプルなハードウェアで実現できて、ランダム性も十分、デバイスや環境への非依存性も申し分ないのですが、 乱数の生成速度が極めて低いのが弱点 です。RO の出力周波数はおおむね数百 MHz なので、それを数万~数十万で分周するということは、数 kbit 毎秒程度でしか乱数が生成できないことを意味します。
じゃあそれを複数並べれば……と思った方は鋭いです。ただ、単に ERO 型の オシレータとは TRNG を複数並べるよりも、複数の RO の出力を XOR したものを乱数として使った方が、回路面積の面で効率が良くなります。それが下図に示す複数リングオシレータ型 (MURO 型; Multi RO) の TRNG です。
複数リングオシレータ型 (MURO 型) の TRNG。
多数の RO を使えば、それだけ分周比 K を小さくできます。論文では、120個の RO を使い、K を100に設定しています。ERO 型 TRNG を多数並べる場合と比べ、分周回路は1個だけで済みますし、K が小さいので分周回路自体も小さく作れます。これにより、数 Mbit 毎秒の速度での乱数生成が効率良く行えます。
また、複数個の オシレータとは RO の出力をサンプリングするのではなく、非同期回路のハンドシェイクで用いられる回路素子を使った Self-timed Ring (STR) というリングを構成し、その各出力をサンプリング、XOR する方法も提案されています。これを Self-timed Ring 型 (STR 型) の TRNG とよびます。論文では、255 素子の STR を用いることで、サンプリングクロックの分周が不要となることが示されています。つまり STR 型 TRNG では数百 Mbit 毎秒での乱数生成が可能です。
ただ、MURO 型と STR 型の TRNG は、必要な論理素子 (LUT オシレータとは や D-FF) の絶対数が多い (ともに百個単位) 点に注意が必要です。また STR 型では、望んだ動作をさせるために多くの素子を注意深く配置する必要があり、配置の自由度が低いということも、問題点として挙げられています。
コヒーレントサンプリング
2つの独立なクロック源を使う方法
次に紹介するのは、下図に示すコヒーレントサンプリング型 (COSO 型; Coherent Sampling RO) の TRNG です。今度は、2つの RO の出力が直接 D-FF のデータ入力 D とクロック入力に接続されています。詳しい原理は次回に説明したいと思いますが、ここでは簡単にその動きを紹介します。
コヒーレントサンプリング型 (COSO 型) の TRNG。
COSO 型 TRNG では、2つの RO オシレータとは オシレータとは から出力されるクロック信号がほんの少しだけ異なる周波数 (周期) をもつと考えます。そうすると、RO2 の出力によるサンプリングのたびに、RO1 の出力との間の位相が少しずつズレていきます (これがコヒーレントサンプリングです)。その結果、D-FF の出力は ‘0’ の連続と ‘1’ の連続を繰り返します。
実際に ‘0’ が何回連続するかには不確定性があります。この回数の偶奇を T フリップフロップ (T-FF) で数え、左の D-FF から ‘1’ が出力されたら、その結果を右の D-FF から出力します。これにより乱数を取り出すのが、COSO 型の TRNG です。
この COSO 型の TRNG は、周期が少しだけ異なる RO のペアを運良く見つけることができれば、1 Mbit 毎秒程度の乱数を極めて少ない数の論理素子 (LUT 20個と D-FF 3個程度) で実現できます。問題は、そうしたペアを見つけることが難しい、ということです。
サーベイ論文が発表された2016年時点では、この問題は未解決でした。しかし、2019年の FPL にてこの問題を解決する COSO 型 TRNG の改良が提案されています [2]。この論文は第5回で紹介する私の研究の土台にもなっているので、詳細はそのときに説明したいと思います。
1つのクロック源から周波数合成する方法
前述の通り、COSO 型 TRNG では周期が少しだけ異なる2つのクロック信号を用意する必要があります。実はその方法はもう1つあります。1つのクロック源 (RO) から PLL (Phase-locked Loop) を使って分周・逓倍を行い、そうしたクロック信号のペアを生み出すという方法です。この考えに基づくのが、下図に示す PLL を用いたコヒーレントサンプリング型 (PLL 型) オシレータとは TRNG です。
PLL を用いたコヒーレントサンプリング型 (PLL 型) の TRNG。
FPGA では、用途によっては様々な周波数のクロックが必要とされる場合があります。そのため、PLL などのクロッキング素子は FPGA 内にそれなりの個数存在しています。とはいえ、実際にその全てを使うことはまれですから、そのうちの2個をこうした用途で使用しても、ほとんどの場合問題はありません。
動作の基本原理は COSO 型と同様にコヒーレントサンプリングなので、COSO 型の利点の多くは PLL 型でも共通です。ただし、クロッキング素子は FPGA のメーカーや世代によって作りが変わっていることも多く、新しい世代の FPGA でこの手法が引き続き使用できるかどうかは、しっかりと検討しなければなりません。この辺りの詳しい話は、また次回することとします。
SR ラッチと TERO (遷移効果リングオシレータ)
SR ラッチの禁止状態
最後に紹介するのは、遷移効果リングオシレータ型 (TERO 型; Transition Effect RO) オシレータとは オシレータとは の TRNG ですが、その説明のために前回示した SR ラッチを再掲しておきます。
SR ラッチの回路図と特性表 (再掲)。
前回、この SR ラッチを禁止状態から一気に保持状態に移行させると何が起きるか……という話をしました。RO のタイミングチャートを検討したときと同様に考えてみると、Q と /Q とでそれぞれ時間 τ ごとに ‘0’ と ‘1’ とを繰り返す波形が得られます (詳しくは第4回で検討します)。つまり、これも一種の発振回路として動作してしまうことになります。TERO 型 TRNG では、これを遷移効果リングオシレータとよんでいます。
ただ、現実にはこの発振は永遠には続きません。様々な要因により、どこかのタイミングで ‘0’ や ‘1’ の安定な状態に落ち着きます。回路をうまく調整してやると、最終的にどちらで安定するか (出力) や、安定するまでにどれくらい時間がかかるか (発振の回数) に不確実性が生まれます。このうち後者に着目したものが、TERO 型の TRNG です。
なお、前者に着目する、つまり SR ラッチの出力そのものに注目することでも TRNG を構成できます [3]。本コースでは、こうした TRNG について第4回で扱うことにします。ただし、この種の TRNG は厳密な確率的モデルが用意されているものではないため、今回のサーベイ論文では議論の対象外となっています。
TERO 型 TRNG
TERO 型の TRNG の構成例を下図に示します。左上に見える8の字状に接続された2つの NAND ゲートと任意個のバッファは、SR ラッチの2つの入力に同じ信号 /CTRL を接続した場合と論理的に等価です。
遷移効果リングオシレータ型 (TERO 型) の TRNG。
CTRL が オシレータとは ‘0’ の間は、ラッチは禁止状態で、両方の NAND ゲートが ‘0’ を出力します。CTRL が ‘1’ になると、ラッチは禁止状態から一気に保持状態に移行し、しばらくの間発振します。発振の回数の偶奇は、NAND ゲートの出力の立上りを T-FF で数えることで求めます。再び CTRL が ‘0’ になると、その結果が D-FF に取り込まれ、出力されます。これにより乱数を取り出すのが、TERO 型の TRNG です。
TERO 型の TRNG で十分なランダム性が取り出せるとき、発振する時間は概ね 1 マイクロ秒弱です。そのため、TERO 型の TRNG からはおよそ 1 Mbit 毎秒程度の乱数が取り出せます.必要な論理素子の数もかなり少なく済みます。
TERO 型の TRNG の問題点は、ちょうど良い回数の発振が起きるように回路を調整することが難しいことです。COSO 型と同様に、2016年時点でこの問題は未解決でした。しかし、2020年の FPL で発表した私の最近の研究で、回路の構成を工夫し、COSO 型 TRNG で行われたのと似た改良を施すことで、この問題も解決できることがわかりました [4]。詳細は、本コースの第5回で説明したいと思います。
今回は、FPGA 向けの TRNG の構成法のいくつかを概説するとともに、本コースで今後説明していく内容の導入を行いました。今回は、要点を挙げるかわりに、紹介した6種類の オシレータとは TRNG の利点・欠点を表にまとめておきます。
型 | 利点 | 欠点 |
---|---|---|
ERO 型 | 構成がシンプル,デバイス非依存性も良好 | 乱数の生成速度が極めて低い |
MURO 型 | デバイス非依存性が良好 | 使用する論理素子数が多い |
STR 型 | 乱数の生成速度が極めて高い | 使用する論理素子数が多い |
COSO 型 | 使用する論理素子数が少ない | 良好なクロックの組を見つけるのが難しい |
PLL 型 | 使用する論理素子数が少ない | 使用するクロッキング素子の影響が大きい |
TERO 型 | 使用する論理素子数が少ない | 回路の調整が難しい |
次回は、PLL 型の TRNG の動作についてもう少し詳しく説明したあと、これらを Xilinx 社の最近の FPGA でどうやれば活用できるかについて、我々の最近の研究成果をもとにお話したいと思います。
コメント