2018.03.17
2018.03.16
夜中の工作
明日からの展示会に備えて、夜中に会社に来て工作しました。
アクリルの板に穴をあけて、
ファンを取り付けてCosmo-K+に取り付けます。
これでCosmo-K+が冷却できるようになりました。
次は、1GSa/sのADC「HyperFADC」のケースです。
フロントパネルに同軸コネクタの穴をあけて、
正面だけは完成。
四角い穴をあけるのが大変なのでリアパネルはありません。
びんぼっちゃまみたいですね。
これでHyperFADCとCosmo-K+の展示用のができました。
最後は光センサ用のトランスインピーダンスアンプです。650MHzの帯域があるはずです。
残念ながらトランスインピーダンスアンプはうまく動きませんでした。
SFP+からFCコネクタへの変換ケーブルを作って、SFP+を10MHzくらいで点滅させましたが、この光センサからの出力は確認できませんでした。
SFPの出力は単純な強度変調ではないのかもしれません。
2018.03.13
LFSRの疑似乱数でコード変調の実験
開発中のCosmo-Z Miniに備わっているDAコンバータとADコンバータをループバックして、LFSRの実験をしてみました。
LFSRというのは線形フィードバックレジスタのことで、XORを使ってシフトレジスタをフィードバックしたものです。疑似乱数を作るときによく使われるもので、M系列というものになるように係数を設定すると都合がよくなります。詳しいことはググってください。
さて、X^14+x^13+x^12+x^2+1という多項式にするとM系列になるようなので、
ref_lfsr <= ref_lfsr(12 downto 0) & (ref_lfsr(13) xor ref_lfsr(12) xor ref_lfsr(11) xor ref_lfsr(1));
という式を書いて実際に試してみました。
125MHzの速度でLFSRを出力して、オシロで見ると、
このようなランダムな波形となります。HとLの高さんが2段階見えるのは、H→HとL→Hの場合とで落ち着く電圧が異なるためです。
この波形をCosmo-ZのADCで取り込んでみました。緑の線がLFSRの乱数の系列で、茶色の線がADCから受信した波形です。
ぱっと見た感じでは20~30クロック遅れて受信しているように思われます。L→L、L→Hで信号のレベルが異なっているのがわかります。
疑似乱数の系列を少しずつ遅延させていきます。
だいぶん位置が合うようになってきました。
LFSRの参照信号が1のときは1、0のときは-1を、ADCの信号に掛けます。そして、その掛け算した結果を1周期分積分します。
紫の線が乗算結果で、灰色の線がそれを総和したものです。特に灰色の線は0の付近で動いていません。
次の図は、参照信号と受信した波形の周期がぴったりと一致した場合です。
乗算結果のピンクの線が常に負の値となり、積算結果もぐんぐん伸びていきました。
より長い範囲で見てみます。参照信号の遅延がぴったりと一致している場合。
そこから1ビット遅れた場合。
このように、受信した信号と参照信号が一致した場合にのみ、灰色の線が0ではない値になります。
1クロックずつ参照信号のタイミングをずらしていって、結果としてどのような遅延時間のときにデコード出力が出るかを調べました。
上のグラフは、周期16383のLFSRで変調されたデータを、同じ系列のLFSRを0~16383まで遅延させて掛けて、積算したデコード結果です。
遅延がほぼ0のときにだけ大きな値が出ています。
この部分を拡大し、横軸を遅延時間、縦軸を電圧に換算したものが下の図です。DACとADCをつなぐケーブルを50cm、1m、2mの3種類に変えて実験しました。
その結果、ピークを中心に±1くらいの範囲でデコード出力が非ゼロになることがわかります。遅延時間が完全に一致しなくても出力が残るのは、波形が鈍るからでしょう。鈍った波形の中にも元の波形に由来する成分があるからです。
今回の実権の構成では、125MHzのクロックで125MHzまでのDACとADCを動かし、OPアンプ回路も100MHz程度の帯域しかありませんので、基本的にはアナログの帯域が足りておらず、理想的な矩形波にはなっていないでしょう。おそらく、かなり鈍った矩形波です。
それでも、遅延時間が一致した場合のみ出力が出るので、コード変調のS/Nの高さがうかがい知れます。
2018.03.11
1MポイントのハードウェアFFTが正しく動いた
ZYNQのPLにVHDLでガリガリと実装したハードウェアFFTが、ようやく当初の目標の1Mポイントで正しく動作するようになりました。昨日の段階では演算結果が一部正しくありませんでした。
下の図は、1MHzの正弦波を入力したところです。999.9kHzのところに1本、ピークが立っています。
なお、演算精度は16bit固定小数点なので、-90dBくらいのところに最低値があり、それより小さい値はマイナス無限大(-120dB)となっているので、レベルの低いところは粗くなっています。
990kHz~1010kHzの範囲を拡大します。
さらに999~1001kHzの範囲を拡大します。
さらに、999.9kHz~1000.1kHzを拡大しようと思ったのですが、計算の誤差であまりそこの範囲は拡大できませんでした。
なお、5MHzでサンプリングして、1Mポイントなので、周波数分解能は約5Hzです。
発振器が1MHzを出しているのにFFTでは正確には1MHzになりませんでした。ファンクションジェネレータが10年前に買った安物なので経時変化しているのと、Cosmo-Zの水晶の精度などがあるので、90ppmほどずれているようです。
正弦波ばかり見ていても面白くないので、AM変調させてみたのですが、、これもあまり面白くありませんでした。
FM変調させると、ダイナミックな動きをするので、見ていて面白いです。
このヒゲの1本1本が5Hzの間隔で100万本あるのです。
この画像はZYNQのPSでPNG画像として作ってホストPCに転送しているのですが、1Mポイントあると画像を作るのに時間がかかってしまいます。
画像化せずに生のデータをTCP/IPで送るような改良をしないといけないですね。
2018.03.10
ハードウェアFFTの実行時間
ZYNQのPLに実装したハードウェアFFT回路で、2ch 1048576ポイント 16bit固定小数のFFTができるようになりました。
一昨年作った回路だったのですが、64kバイトまでしかFFTできなかったので、改良を行ってきました。
1Mポイントのとき、1回あたりのFFTが160msで計算できます。サンプリング周波数が5MHzのとき、1048576ポイントのデータを蓄積するのに要する時間は208msなので、この速度の信号なら継ぎ目なく連続してFFTできます。
まとめた表を以下に示します。
5MHz程度であれば、1Mポイントでも余裕でいけることがわかります。
FFT実行フラグをLED(3)に表示し、データキャプチャ実行中フラグをLED(2)に表示し、それを波形で見てみました。
たしかに、データの蓄積よりもFFTの実行のほうが早く、連続して切れ目なくできていることがわかります。
2018.03.08
HyperFADCを使ってMPPCの波形を観測
開発中の1Gsps ADCボード「HyperFADC」を使って、プラスチックシンチレータとMPPCが出す波形をとらえることができました。
おそらく宇宙線だと思います。
ちゃんと1nsの分解能で見えています。少し波打っているのは、信号源となるMPPCアンプが長い同軸ケーブルの容量で発振しているせいではないかと思います。オシロだけをつないでも波打って見えたので、このADCの問題ではないでしょう。今までの高速ADCでは、この高い周波数の発振は見えませんでした。超高速ADCだからこそ発見できた問題といえます。
また、1Gspsだからエイリアシングのことを考えると500MHz弱で急峻にカットオフするのがベストです。周波数特性を測定したところ、約450MHzで切れて、しかもゲインにピークのほとんど生じていない良好な特性となりました。LCフィルタは偉大ですね。
FPGAの設計から、周波数特性の測定、波形の取得まで、すべて学生のスタッフさんがやってくれました。感謝感謝です。
2018.03.07
トランスインピーダンスアンプ基板
Cosmo-Z Miniの最初のお客様は、光ファイバから入力する用途なので、125MHz程度の帯域を持ったフォトダイオードアンプを作らなければなりません。
フォトダイオードの出力は電流で、それを電圧に変換するから、ゲインがV/AでΩの次元で表されます。それゆえ、この手のアンプは「トランスインピーダンスアンプ」といいます。
アルバイトさんに設計してもらって基板を作ろうと思ったのですが、トランスインピーダンスアンプというそのものズバリの名前のICがあるので、それを使った基板と比較してみることにしました。
それから、Cosmo-Z Miniの入力OPアンプを置き換える基板と、電源の実験用基板など、4種類の基板を面付けした基板を作りました。
左から、OPアンプによるトランスインピーダンスアンプ、トランスインピーダンスアンプという名のICを使ったアンプ、THS4520高速OPアンプ基板、3.3V大容量電源基板、です。
2018.03.06
Cosmo-Z Miniの周波数特性
開発中のZYNQ搭載小型ADC/DAC装置「Cosmo-Z Mini」の周波数特性を測ってみました。
なんと、20MHzにピークがあるかと思ったら、30MHzでゲインが下がってしまっています。
これはひどい!
このCosmo-Z Miniはフィールドで使うことも考えて低消費電力にしようと、ADCのフロントエンド回路のOPアンプを、TI社のTHS4521にしたのですが、THS4521の特性が予想したより悪かったのです。
次の図は、100kHzの正弦波をFFTしてみたところ。ひずみ率がなんと-60dBしかありません。
-60dBならいいじゃないか・・と思うかもしれませんが、1MHzにしてみると-40dBにまで下がってしまいました。
THS4521は、Cosmo-Zでも使っているTHS4520の低消費電力版なのですが、特性を比べてみると全然違いました。THS4520は10MHzでひずみ率が約-90dBですが、THS4521は-50dBです。
歪率は、スルーレート、信号の振幅でも変わってきますし、ゲインによっても変わってきます。Cosmo-Z Miniの歪率がこのグラフよりも悪いのは、回路の周囲の条件もわるいのでしょう。
一般的に、歪率は大きなゲインを大きな負帰還で抑え込めば下げられるはずですが、低消費電力のOPアンプには高い周波数で十分なゲインがないのでしょう。
なんとか頑張って、OPアンプの周辺のコンデンサを外したり、帰還抵抗の値を変えて特性が良くなるようにしてみました。
その結果、低消費電力のTHS4521を使った場合でも100MHz程度まではフラットな周波数特性が得られるようになりました。なんと、60dBも改善できたことになります。
THS4521はもともとバンド幅145MHzと書かれているので、無理すればこのくらいはできるようです。ただし、ノイズが増えたりひずみ率が悪くなったりしています。
上のグラフで青の線で描いているのは、参考用に出したCosmo-Z(THS4520)の特性です。LPFをかけているのでOPアンプの生の性能よりは速くゲインが落ちます。LPFを外せば200MHzくらいまではフラットになります。
一概には言えませんが、OPアンプが良好な特性を保ったまま使えるのは、バンド幅の3~5分の1くらいなのでしょう。
電流はケチってはいけないということがよくわかりました。
2018.03.05
2018.03.04
2つのHDMIを混ぜる装置
2つのHDMI入力を混ぜて出力する装置を作りました。
基板を設計していたのが2月18日ごろで、生基板が出来上がったのが2月26日だったので、実装も超特急です。どんなに急いでも出図から実装まではやはり、2週間くらいはかかります。
基板屋さんと実装屋さんに急いでもらったので、私も休日返上で急いで動作確認しました。
前回作った基板では720pまでしかいかなかったのですが、HDMIのクロックとD0の間にGNDのガードを設けることで、1080pが出るようになりました。クロストークってやつですね。
実装が上がったばかりの基板と、アルミを削り出しで作ったヒートシンクです。
ヒートシンクは、Kintex-7とDDR3 SDRAMの部分にちょうどあたるように出っ張ってできています。
このヒートシンクは、学生さんが3D CADで設計してくれました。
ヒートシンクで蓋をすると、こんなつるっとした感じになります。
2つの1080p 60fpsの画像をα:1-αで混ぜ合わせるFPGAの回路は、別の学生さんがVivado HLSで高位合成で作ってくれました。DDR3メモリの読み出しは8画素同時に出てくるので、8画素を同時に計算しているそうです。
2つの画像入力を一度DDR3メモリに蓄えて、それを演算しながら出すとい仕組みになっているようです。混ぜ合わせるところの処理はCで書かれているので、そこを変えれば、いろいろな処理(明るい方を選択とか・・)ができるのではないかと思います。
2018.03.03
Cosmo-ZがSCPIに対応?
測定器を操作するSCPI(スキッピ)という標準的なインタフェースがあります。Standard Commands for Programmable Instrumentsの略だそうです。
解説としては、Keysightのページなどがあります。
要するに、つまみを回すとか、そういうレベルのインタフェースを、ASCIIキャラクタベースのプロトコルで、GP-IBを彷彿とさせるようなコマンドをTCP/IP経由で流します。
インターンで来ている学生さんがPythonで実験的なSCPIサーバを作ってくれました。
クライアントはどうするかということですが、LabViewにSCPIのコンポーネントがあったので、それを使うことにしました。
ちゃんと動いて波形を取ることができるようになりました。
2018.03.02
HyperFADCの新基板が動作開始
1Gspsの高速ADCボード、HyperFADCの動作確認ができました。
このボードは、1Gsps 16bit 2chの超高速ADCボードで、AD変換結果を40Gbpsの光ファイバで出力します。
使用しているADCは、TI社のAD54J60という、1個あたり10万円以上するICです。
(ADCはスペック上は16biですが、インターリーブしている4つのサブチャネルのうちどれか1つは下位2bitに無意味な値が出るという仕様により、実際には14bitの精度しか出ません。改善してほしいですね。)
このADCはJESD204Bという形式で信号を出すので、光ファイバで送って、Kintex-7のボードで取り込んでそれをPCIeのDMAでパソコンに転送して波形を表示することができました。
このあたりのFPGAの設計とC#のサンプルアプリの開発は、アルバイトさんが全部やってくれました。
とても感謝です。
スイッチング電源のノイズがわずかに計測結果に乗っているようですが、これからさらに改善していきたいと思います。
2018.03.01
18bit 20chデータロガーが動き始めた
ようやく18bit 20ch AD変換ロガーの「AD360」新バージョンが動き始めました。
今回新しく作ったのはメイン基板で、5ch分のADCが乗っています。
本当は火曜日ごろには検査して、調整して出荷するつもりだったのですが、なぜかSDRAMが正しく読み書きできなくなっていたため、時間がかかってしまいました。
SDRAMのモードレジスタの設定(MRS)も、マイコンの設定も正しいのに、SDRAMがCASレイテンシ3として動作するのです。旧基板はCASをストローブした次の次のクロックでデータが出てくるのに、新基板はCASをストローブした次の次の次のクロックで出てきます。しかし、たまに動くときもあります。
RX63Nのクロック出力波形に問題があるのか、AS4C16M16SA-7TCNに問題があるのかわかりません。
気を取り直してアナログ的な特性を測ってみました。
まず、無信号時の波形を見てみましょう。
次はノイズのヒストグラムです。
ガウス型にならず、ギザギザしていますが、それはADコンバータのDNLが見えているためです。
±1Vの入力電圧範囲で18bitの分解能があるので、1LSB=2÷262144=7.6μVとなります。半値幅が約6LSBなので、ノイズレベルは±22.5μVということになります。
また、オーディオアナライザという機械を使って歪率も測ってみました。オーディオアナライザというのは、極めて綺麗な正弦波を出す装置です。
すると、二次高調波も三次高調波も、入力信号に対して-100dBという結果でした。
歪率は十分によさそうです。
この機械を今夜調整して、オフセットやゲインの誤差を測ったら、ようやく出荷です。
最近のコメント