サンディスクウルトラ PLUS SDHC™/SDXC™ UHS-Iメモリー …...最 読取り速度80MB/秒の 速性 能 サンディスク ウルトラ プラス SDXCおよびSDHC UHS-I
パルスジェネレーター(MAX10による高速化) 取...
Transcript of パルスジェネレーター(MAX10による高速化) 取...
-1-
パルスジェネレーター(MAX10 による高速化) 取説 2017/3細田
FPGA(MAX10) と AVR マ イ コ ン(Mega168) + 8 行 21 文 字 OLED(Winstar:
WEX012864,128x64dotsgraphicOLED)表示器を使った簡易型パルスジェネレーターの取
説を示す。本システムは Inter-net で筆者が紹介した CPLD による簡易型パルスジェネレーター
(参考検索項目=電子回路の自作)をMAX10 のボード(MAX10-FB) を利用して高速化したも
のである。また、100MHz の周波数カウンターも含む。
はじめに
CQ出版から出ているMAX10 の「FPGA 電子工作スーパーキット」という本を買ったのだが、
付属のMAX10-FB 基板の使い道に困ってしまった。本の例題だけをやるのは面倒だし、別にや
らなくても理解できる。というわけで、MAX10-FB ボードはお蔵入りになりかけた。もったい
ないので、何か実用になる装置が無いかと思って考えたのが高速なパルスジェネレーターとカ
ウンターを作ることだった。これまで筆者が Internet で紹介してきたパルスジェネレーターは
CPLD を利用して、周波数max=20MHz 程度、パルス幅min=20ns 程度の物だった。これを
100MHz,5ns まで伸ばす。また、カウンター機能も同包して、200MHz 程度までの周波数カウ
ンターも簡単に実装できた。筆者は fsモードロックレーザーを使ったことがあり、その際に発
振周波数(80MHz 付近)を計測したが、今回の装置があれば、低価格で簡単に計測できる。
なお、MAX10-FB 基板は本の付録を使わなくても、マルツで売っている。
パルスジェネレーターの設計は前に紹介した CPLD によるものと類似であり、詳細はそちら
の資料を参照されたい。
以下、仕様を示す。
(1)仕様
1-1 パルスジェネレーター
5ns分解能のパルス設定可能。最高繰り返し周波数=100MHz=10ns 周期。最大時間幅=5秒。
出力レベル:3VCMOSor50-ohm終端の場合は約 1.8V。
最小パルス幅= 5ns。精度= -1nsto+1ns。
外部トリガー入力:3.3VLVTTLor5VTTL(入力バッファー IC= 74LCX125)
外部トリガーから、パルス出力までのジッター= 0〜 5ns。
(デジタル型で 200MHz でサンプリングしているため。)
外部トリガーからパルス出力が出るまでの遅延時間=約 20ns +上記ジッター。(注:加えて、
同軸ケーブルの遅延=通常、5ns/m)
1-2 周波数カウンター
周波数max.=250MHz。なお、設計上はそうなのだが、実際には 100MHz までしか試して
-2-
いない。( パルス源がなかった。)また、single-end 入力の後に 5VTTL 入力を許容するために
74LCX125 を介しているが、これがどこまでの周波数に追従するかは未定。200MHz まで可能
とする場合は、FPGA の LVDS 入力に直接、LVDS バッファーを介して入れる必要があるかも。
入力レベル:3.3VLVTTL,CMOS,or5VTTL(入力バッファー IC= 74LCX125)
周波数精度:一応、デジタル的には 1HZなのだが、MAX10-FB ボード上の 48MHz クリスタル
発振器の精度によって、確度は変わる。(7 桁程度か?)
周波数計測下限:1Hz
その他、FPGA の設計を変えれば、例えば 1Hz 以下のレシプロカル・カウンターや、単なるパ
ルス計数器も可能。( 読者で工夫してみて。)
1-3 その他
一応、FPGA の内部クロックは 48MHzXtal-OSC から PLL で 200MHz 発生としてあるが、
MAX10 は高速なので、400MHz 発生でも動く可能性有り。
その場合は、上記の 2倍の周波数や1/2のパルス幅も可能かも?
でも、そこまでやると、発生したパルスに応答できるデジタル IC や、またカウンターに対して
もパルス発生源が無いかも。したがって、200MHz の内部クロックで実用上十分と思われる。
(2)特徴
高精度に長時間(5秒)から短時間(min.5ns)までのパルスを発生できる。2パルス出力。2
パルス出力間の遅延時間も 5ns 間隔で設定可能。外部トリガーからの遅延時間も高精度設定可
能。(分解能= 5ns なので、例えば外部トリガーパルスから 4.00000001 秒遅れた 5ns パルス
幅のパルス発生も可能。ただし、デジタル回路上の問題で外部トリガーパルスからの遅延には
max.5ns のジッターがある。)
(3)取説
写真1 系の全体
左シャーシ:本体。本体 PCB 上中央
に青色基板の MAX10-FB が見える。
各パラメータ値は有機 LED(Organic
LED=OLED)に標示される。
右の小さなシャーシ:パルス出力部
(2チャンネルのパルスは SMAコネク
ターから出力)
本体とパルス出力部とは Catagoly5
以上の LAN ケーブルで接続。詳細は
後述の章を参照。
本体シャーシの内部には +3.3V の定
電圧電源(300mA)しかない。なお、
スイッチ類と BNC コネクターは本体
シャーシにマウントされている。
-3-
写真1のように本体基板下部の4つのプッシュスイッチとロータリエンコーダでパラメー
ターの設定を行う。また、シャーシ前面 ( 写真 2)の二つの小さなスナップスイッチによって
外部トリガー /内部トリガー(Ext/Int)の設定と外部トリガーの極性設定(Edge=+ / −=
立ち上がりエッジ /立ち下がりエッジ)を行う。
写真に示したパネル前面のトグルスイッチは以下の機能。右側スイッチ=電源の ON/OFF。
左側上のスイッチ=外部/内部トリガー切り替え、その下のスイッチ=外部トリガー極性選択
(トリガー=立ち上がり /立ち下がりエッジ)。外部トリガー・パルス入力レベルは 3.3V-LVTTL
やCMOSレベルか5V-TTLレベル。外部トリガー入力のBNCコネクターはシャーシ裏面にある。
5Vレベルも許容できるように 74LCX125 がバッファーとして入っている。
パルス発生のON/OFF、パルス周期やパルス幅等のパラメーター設定は基板上にある4つの
プッシュスイッチ、およびロータリエンコーダ(ParameterChange)によって設定する。
以下、4つのプッシュスイッチとロータリーエンコーダーの働きを示す。
3-0 プッシュスイッチ1(SW1)、一番右のプッシュスイッチ:パルス発生のON/OFF を行う。
押すごとにON/OFF のトグル動作を行う。パルス発生時は赤色 LED(Run/Stop)が点灯する。
Single 動作(単発パルス発生)においては、非常に長いパルス周期(例:4秒間周期)を設定
した場合などにおいて、その取り消し(OFF)にも使われる。(Single 動作では動作中(パルス
発生が起こるまで)は LEDが点灯している。取り消すと LEDは消灯する。また、外部トリガー
が来ない場合にも点灯しっぱなしになるが、もう一度押すとそれを取り消せる。)
3-1 プッシュスイッチ2(SW2)、2番目のプッシュスイッチ= Down:パラメーター設定行
を下に移動する。選択された項目の最初の文字の下にはカーソルマーク(*文字)が表示される。
選択した項目の値はロータリーエンコーダー(ParameterChange)で変えられる。右回しで設
定した増減値分(後述)で増加、左回しでその分、減少。また、パルス極性(Polarity)が選択
されていれば、正極性と負極性の選択。右回しで+、左回しで−となる。パルス発生モードを
写真2 本体の表パネル面。 写真 3 本体の裏パネル面。
-4-
選択していれば、右回しで Conti(Continuous:連続発生)、左回しで Single(単パルス発生)。
3-2 プッシュスイッチ3(SW3)、3番目のプッシュスイッチ= Lineup:パラメーター設定
行を上に移動する。選択された項目の最初の文字の下にはカーソルマーク(*文字)が表示さ
れる。選択した項目の値は上記したようにロータリーエンコーダーで変えられる。
3-3 プッシュスイッチ4(SW4)、4番目のプッシュスイッチ=Digit:パラメータの増減値を
選択。SW4を「押し続けながら」、ロータリーエンコーダーを回すと、選択した項目の増減値
を設定できる。10進一桁ごとに、右回しで増加、左回しで減少。
3-4 SW2と SW3でパラメーター項目を選択したら、以下のように選択できる。
Tp:メインパルス周期設定。ロータリエンコーダで増減。
Tw:メインパルス幅設定。ロータリエンコーダで増減。
Conti./Single:メインパルスの発生モード設定。ロータリエンコーダで Continuous 発生/
Single 発生を選択。(右回しで Continuous(連続発生)、左回しで Single(単発発生)。)
Pol:メインパルス極性(Polarity)の選択。ロータリエンコーダで変更。Pol+で正論理、Pol-
で負論理パルス。(右回しで Pol+、左回しで Pol-。)
Td:サブパルス遅延時間。トリガーがかかった後、どれぐらいの時間遅延でサブパルスを発生
するかを決定。ロータリエンコーダで増減。
STw:サブパルス幅。ロータリエンコーダで増減。
SPol:サブパルス極性。ロータリエンコーダで切り替え。
選択したパラメーター数値をロータリエンコーダで変更できる場合(OLED 画面でパラメーター
文字の最初の文字に*が標示される。)、SW4を押しながらロータリーエンコーダーを回すと、
増減値を切り替えることができる(10進一桁ごと)。右回転で増加、左回転で減少。
3-5 内部トリガーと外部トリガーによるパルス発生
3-5-1 内部トリガー選択の場合
パネル前面の Ext/Intトリガー選択スイッチが Internal(下側)であった場合、以下の動作と
なる。
SW1によって、パルス発生のON/OFF がトグルされる。押すと LED が点灯すれば、ON。消灯
していれば、パルス出力はOFF。SW1を押すごとに切り替わる。パルス発生モードはトリガー
が内部/外部の選択と Continuous(Conti)か Single 選択の場合により、以下に述べる動作
の違いが生じる。内部トリガーなら、Conti の場合、連続してパルスが発生する。Single なら
SW1プッシュごとに一発のみ発生する。パルス発生時でもパルスパラメーターは変更できる。
SW2や SW3によって項目を切り替え、パラメーター設定をロータリーエンコーダー等によっ
-5-
て変えると、即、その変更は反映される。
パルスの発生は図 1のようになる。メインパルス(P1) は FPGA の counter-cnt=0 をサンプ
リングして、そこから P1を ONする。したがって、スタートから 1CK(5ns)遅れて出力される。
P1パルスの幅は T1パラメーター(5ns の数)によって決定され、CPLD 内部のカウンター(cnt)
がT1に達した後、5nsサンプリングにより、OFFされる。したがって、P1パルス幅はT1パラメー
ターで決定される。
第 2 パルス(遅延パルス= P2)のスタートは T3 値(サブパルス遅延時間)に
よ り 決 定 さ れ る。 そ の OFF タ イ ミ ン グ は T4 パ ラ メ ー タ ー で 決 定 さ れ る。(T4
-T3 が サ ブ パ ル ス の 幅 に な る。) 両 者 は FPGA 内 部 の cnt 値 で ON/OFF さ れ る。
全体の周期は T2 パラメーターで決定される。FPGA 内部のカウンターである cnt(5ns
おきに更新)が T2 に達すると、cnt をゼロクリアーして、次の連続パルス周期に入る。
以上は連続パルス発生の Conti モードであったが、Single(単パルス)モードでは、SW1を
プッシュするごとに 1パルスのみを出力する。遅延パルスである P2も、遅延して出力される。
ここで、パルス出力を中断したい場合は、いつでも SW1を再度押せば、パルス出力を取り
消せる。パルス出力がイネーブルされている際は LED1 が点灯しているが、いつでも SW1を
押せば、出力をディスエーブルできる。パルス出力の中断は、例えば 5秒間のように長い周期
を設定した場合に有効である。
パルス発生をしている間にパラメーター設定を変えて、そのエラーが生じると、OLED にエ
ラーメッセージが表示され、パルス発生は停止される(LED=OFF)。その場合は、パルスパラメー
ターを設定し直し、エラーを消した後に再度 SW1をプッシュすればパルス発生が始まる。
3-5-2 外部トリガーモードを選択した場合
パネル前面の Ext/Intトリガー選択スイッチが External であった場合は、以下の動作となる。
Continuous 発生の場合は、SW1によってパルス発生が ONになると、LED が点灯する。パネ
ル前面の外部トリガー極性スイッチがH側の場合、外部トリガー入力が立ち上がりエッジにな
るとパルスが出力される。極性スイッチが L側の場合は、トリガー信号が立下がると、パルス
が出力される。以後、外部トリガーパルスが来るごとに、上記動作を繰り返す。トリガーパル
スの周期はT2で設定された発生周期よりも長いことが望まれる。それよりも短いと、再トリガー
図1 パルス発生とパラメーター(Polarity=+=正極性パルスの場合。)
-6-
の開始がランダムに起こり、パルス発生にジッターが発生するので T2や T4を適切に設定する
こと。
External 選択で Single 出力の場合、SW1によってパルス発生状態を表す LED が点灯してい
る場合、極性スイッチがH側である場合は外部トリガーの立ち上がりエッジで1組(2パルス
発生なので。ただし、サブパルス幅=0の場合は、1個のパルス。)のパルスが出力される。極
性スイッチが L側の場合は立ち下がりエッジでパルスが出力される。Single の場合は、一発、
1組のパルスが発生し終わった時に LEDは消灯し、次の外部トリガーではパルスは発生しない。
この場合、再度、パルス発生したい場合は、SW1を押して LED を点灯し、外部トリガーパル
ス待ちとすること。
(作成した回路やプログラミング的には、Single モードで外部トリガーの場合、外部トリガー
が来て、パルス発生が終了した場合は、FPGA から、その終了信号(FPGA 側では EndN2、AVR
では EndN)によって、AVR に INT1 インタラプトがかかり、それによって LED を消灯し、パ
ルス発生が終了したことを知らせる。)
外部トリガー選択で Single モードの場合、もし、あまりに長時間、トリガーパルスが来ない
ことが LED の点灯しっぱなしによって分かる場合には、再度 SW1を押せば、外部トリガーに
よるパルス発生を取り消せる(LEDは消灯する)。
(4)パルス設定パラメーターと発生パルスとの関係(回路やロジック設計の説明:読み飛ばし
てもOK。その場合は、5章に飛ぶ。)
CPLD の論理設計概要(図 1参照)
全体の周期= T2
T2を FPGA 内部のカウンター(cnt:5ns おきに増加)を越えると次の周期。
メインパルス消滅までの時間= T1:cnt=0 から T1まで、Pulse1 を ON。実際には 5ns サンプ
ルのクロックサンプル遅れがあるので、5ns 遅れる。
サブパルス発生までの時間 =T3:遅延パルスである pulse-2 の開始時間を cnt 値で示す。この
値を超えると第 2パルスがONになる。
サブパルスの幅を決める時間=T4:第2パルスをOFFする時間をcnt値で示す。T4>T2の場合は、
T2になった段階でOFF される。
FPGA の内部には 30-bit のカウンター(Quartusproject ファイルの block-diagram 回路の
PGen5_1.v 内部の cnt)があり、200MHz(=5ns) のクロックでカウントアップしている。パ
ルス発生が AVR 側から指令される(StartN 信号 =L)前はゼロクリアされている。パルス発生
enable 線(StartN)が AVR によって enable = L にされるとカウンター値は 5ns おきに増加し
ていく。FPGA 内部には別に4個の比較器(T1~T4 に対応:Quartusproject:PGen1_5AC の
PulGen.v モジュール(VerilogHDL)を参照)がある。
図1の P1パルス(メインパルス)は cnt>=1 になるとHになる。その後、cnt=T1 に達す
ると P1値はゼロクリアされる。パルス発生周期は T2で決まり、cnt がそこに達すると cnt=0
-7-
となり、また最初からカウントアップを始める。以上より、T1と T2 のカウント値を設定する
事により、メインパルスの周期と時間が決まる。
サブパルス(P2)の場合は、周期はメインパルスの T2で決まっているので、T3と T4 を設
定してサブパルスをメインとは別に出力させる事ができる。発生法はメインと同様、cnt 値の
比較であり、cnt>=T3 で Hになり、cnt>=T4 で Lとなる。P2の幅がゼロ(P2を発生させな
い選択)の場合は、AVR側から T3=T4 と設定する。サブパルスのパルス幅がゼロに設定され
た場合はサブパルスを出さない設定なので、その場合は BASCOMプログラム側で判定し、サブ
パルス出力を Disable する。(BASCOMのプログラム参照。)その他、設計の詳細についてはイ
ンターネットページの PulGenver.7 を参照。(簡易型パルスジェネレーターや自作電子回路な
どのキーワードでひっかかる。そのwww.a-phys.eng.osaka-cu.ac.jp/hosoda-g/のアドレスに入っ
てパルスジェネレーターについてググっていくと見つかる。)なお、その ver.7 を改良している
ので、若干、回路や制御プログラム(byBASCOM)は少し違う(もし、必要なら、当方にコン
タクトされたい)。
(5)その他、使用上のヒントなど
パルス発生下や SW1でパルス発生起動時に、パラメーターの設定に矛盾があるとエラーメッ
セージがOLED 標示の 1行目に出て、LED は消灯し、パルス発生が止まる。パラメーターを正
しく設定し直すとエラーメッセージは消えて、SW1の再プッシュによってパルス発生を起こせ
る。
サブパルスを出力したくない場合は、サブパルス幅をゼロに設定すること。
サブパルスをメインパルスと同時に出すことも出来、その際は遅延時間=0を設定すればよ
い。
周期 T2よりもサブパルス終了時間= T4が長い場合は、サブパルスは中途(T2=サイクル
ピリオド)で打ち切られる。
メインパルスを pre-pulse として使用し、サブパルスを本体のパルスとする使用法もある。
要はメインパルスを pre-trigger パルスとして使用し、サブパルスを本体パルスとして使用する
使用法。
(6)カウンターとパルスジェネレーターのモード切替
最初に SW4を押しながら、SW3を押して離すとモードが切り替わる。トグル動作で切り替
わる。カウンターモードになると、周波数を表示する。
パルスジェネレーターの出力をしながらモードをカウンターに切り替えると、パルス出力を
維持できる。その際、SW1によってパルス出力をON/OFF できる。
(7)昔のパルスジェネレーターとの違い
MAX10 の高速性を使ったので、パルス出力部を以下のように変更した。写真 1の全体図に
あるように本体とパルス発生部に分かれており、それを(シールド付きLANケーブル、Cat5以上)
-8-
で接続している。これはパルスのディーティー比を保持するためにLVDS規格の伝送方式を使っ
たためである。(MAX10 では高速の LVDS 出力ピンを持っていて、400Mbps 以上の速度を保
証している。)要は G-bitE-ther に使うようなケーブルでパルスを伝送し、それを使用する場所
の近くで普通の single-end のパルス出力に変換しようとする方式である。
写真4にヘッド部の写真を示す。電源は本体から余った LANコネクターの線で供給。シャー
シ GNDは Daisen 基板裏側でシールドから上側 4-pin の余ったパッドにつないでおき、それか
らシャーシ GNDへ(写真参照。)
写真 5は LVDS から変換された 100MHz 繰り返し、5ns パルス幅の信号。観測はオシロの
1M-ohm入力。少しなまりが見られる。
写真 6は 50-ohm終端した同出力。立ち上がり、立ち下がりともちゃんと出ているが、レベ
ル的には 1Vに下がる。(DS90LV028A は 50-ohm 終端しても動作していた。なお、これはア
マチュア的動作法であり、あくまでメーカー保証ではないので注意。実際にやったところ、IC
の発熱はほとんど無かった。)1V程度しか出力がないので、このままでは 3V系ロジックは動
写真4 パルス出力ヘッド
Daisen の LAN コネクター変換基板と DS90LV028A
(LVDS-3Vsingle-end 変換 IC)の変換基板。
写真 5LVDS から 3VCMOS に変換された信号。
CH1,2とも 5nspulse、100MHz 繰り返し。
オシロの縦軸は 2V。
写真 6LVDS から single-end に変換された信号。
CH1,2とも 5nspulse、100MHz 繰り返し。
オシロで 50-ohm終端。オシロの縦軸は 1V。
写真 7LVDS から single-end に変換された信号。
CH1,2とも 5nspulse、30ns 繰り返し。
CH間遅延は 5ns に設定。
-9-
かない。最適負荷は 470 オームであった。これなら、3V系はほとんど動くと思われ、かつリ
ンギングは少なかったので、3V系ロジックを動作させるにはターゲット IC の近傍で 470 オー
ムで終端してください。または、パルス幅が 20ns 以上なら、終端無しでも動くかも。
写真7は 30ns 周期で CH1,2 ともパルス幅が 5ns、CH2 は CH1から 5ns 遅延の例。(50オー
ム終端)
(8)周波数カウンターの実際
写真8は本器のパルスジェネレーターで 100MHz のパルス列を発生させて、それをカウン
ター部に入れて計測した例。( 写真の取り方が悪いので、少し、にじんでいる。)何故か、ジャ
スト 100MHz ではなく、1HZ 少ない 99.999999MHz と表示されている。(誤差範囲?)とこ
ろが、写真9では 50MHz がジャスト 50MHz となっている。両者とも、パルスジェネレーター
モードで発生したパルスをカウンターモードで計測。1Hz のずれは、おそらく、FPGA のカウ
ンター回路の設計に問題があると思われるが、直していない。(50MHz 以下は正常に表示され
る。) 直さなかったのは、元々、MAX10-FB ボード上に載っている XTAL-OSC(48MHz) の絶対
精度が 9桁は無いから。要は信頼できる確度は 6〜 8桁程度か?より高確度化には温度制御付
きの Xtal-OSC を使わないといけないが、今回はそこまでやる必要は無いと思われた。( 高い周
波数を、ある程度の精度で測れただけで十分。なお、Ti-Sapphire レーザーの 82MHz を測る際
に使用した回路や本体の回路等を次ページ以降に付録で記しておく。)
(9)システムの設計資料
Internet の、このシステムの紹介ページに設計資料を載せておきます。
パルス発生の Verirog ファイルには、昔のバージョンとは以下の違いがあります。
200MHz=5ns でカウント(cnt 変数)の判定をダイレクトに行うと Compare ミスが出るときが
あり、double-buffer 方式に変更しました。すなわち、cnt<=cnt+1; でインクリメントするが、
判定はそれをD-FF でラッチした一つ前の cnt 値で判定する。要は、上記 +1の前の行に cn2<=
写真8100MHz の周波数カウンター計測
99.999999MHz と表示されている。( 写真の取り方が
悪く、にじんでしまっている。)
写真 9 50MHz の周波数カウンター計測
ジャスト 50MHz と表示されている。
-10-
cnt; を入れて、cnt2 を判定する。
その他に、カウンター部の FPGA 設計も添付した。これらを見るにはQuartus15 以上が必要。
(フリーの Lite でもよい。)
以下、参考回路図。(GNDから多数のパッドに接続があるのは、両面基板での GND強化のため。)
図2 本体の回路
AVR=ATMega168 とMAX10-FB、および制御スイッチなど。表示器= GraphicOLED=128x64pixels=Winstar
WEX012864EGPP3N00000(Kyohritsu-Eleshop) は SPII/F で制御。その詳細は筆者のHPにあり。
-11-
図 3 LVDStosingle-endパルス発生部。DS90LV028 により2CH出力。
図 4 Ti-Sapphire-laseroptical-pulse から周波数カウンターへの入力信号を発生する回路の例。高速 PDの例として
は、浜ホト、S5973-01。それを回路図、左下の toPD 端子に接続。PDケース GNDが真ん中の端子。注:P4,P6 の
接続極性に注意。逆につなぐと PDが壊れる。逆バイアスにすること。PDの pin1( カタログ参照)が+側=回路図の
P4ピン。この回路では検出部とパルス発生部は LANコネクター(LVDSI/F)で分離されているが、検出部と周波数
カウンターの距離が近ければ、ADCMP601 の出力をカウンター入力に直接入れるようにしてもよい。