Cosmo-ZをWindowsから操作するためのネイティブアプリを作っています。
TCP/IPのポート11068を使用して、計測した波形などをホストPCへ転送するという仕組みです。
いままで、Cosmo-Zは、ZYNQ上で動くプログラムと、WebインタフェースとJavaScriptで動いていましたが、さすがに限界を感じてきたのでWindows版のネイティブアプリを作っているというわけです。
通信部分だけをDLL化して、LabVIEWなどとも接続できるようにしたいと考えています。
1000ポイントをサンプリングした単純な波形ビューワ(オシロのような)とした場合、画面の更新は毎秒300回くらいできるので、速度的にも十分です。
会社のCosmo-Zに自宅からVPNで接続した場合でも毎秒20回くらいの画面更新ができるのでまあまあかも。
2016.03.28
ハードウェアFFTマシンの納入
今日は、Cosmo-Zで作ったハードウェアFFTマシンを納入しに、母校、東工大へ行ってきました。なにやら学位授与式をやっているみたいで、晴れ着姿やスーツ姿の若い人がたくさんいます。ほほえましいですね。
さて、Cosmo-Z上のZYNQのPLで、65536ポイントのFFTを行う回路が、ようやく動いたのです。徹夜でした。
このFPGAは、ハードウェアでリアルタイムに窓関数を掛けて、
それをリアルタイムにFFTしてくれます。
下のほうが荒いように思えますが、それは16bit固定小数点だからです。実数部・虚数部ともに0x0000~0xFFFFまでの16bitの値なので、どうしても-80dB以下の部分は荒くなります。
でも、65536ポイントで2ch分のFFTを7.2ms実行できるので、5MHzのADCから入ってきたデータを切れ目なくFFTできるようになっています。
もし、浮動小数点にするならば、メモリアクセスの時間が2倍になるので、速度が半分になるでしょう。とりあえずこれでも毎秒百数十回できます。
比べてみたら、ZYNQのPSで行うソフトウェアFFTよりも断然高速でした。
やっぱり気になるのは計算の精度の問題。
下の図は、ファンクションジェネレータで作った100kHzの正弦波を65536ポイントのハードウェアFFTしたものです。窓関数はナットール窓。
下の図は、同じものをZYNQ上のソフトウェアでFFTしたものです。
同じものを見ているのですが、-100dBまで見えています。だいたい-80dBくらいのところに計算精度によるノイズの壁(床?)があるのがわかります。
下の図は、CH1を指で触って、ノイズをFFTした結果です。
時間軸で見ると、このように
フルスケールに対してものすごく小さな信号を見ているわけなのですが・・
まずはハードウェアFFTの結果。数本のスペクトラムのピークが見えます。
より小さなピークまで、はっきりと見えています。
小さな信号を見る場合には、断然、浮動小数点のほうがよいですね。
固定小数点は、やはり粗いです。
これらの結果を踏まえて、今後、どうするかを考えていきたいと思います。
18bit 8ch A/Dの基板が実装上がる
先週末に実装業者に出した18bit 8ch 5MHzの基板の実装が上がってきました。
さて、動くでしょうか。
2016.03.22
応用物理学会2016の展示会に出展しました
3月19日から22日かけて、わが母校、東工大で応用物理学会が開催され、その展示会に出展しました。
展示物は、ZYNQ搭載のADCボード「Cosmo-Z」です。
前回の反省を踏まえて、展示物を展示台の上に乗せることにしました。
このような目立つ台の上に置いておけば、どれが商品なのか、一目瞭然となります。
相変わらずミューオン検出デモも行っていたのですが、前回、このデモ機が製品だと思われたことがあったので、そうならないようにするための工夫です。
4日間で、延べ26人くらいの方に見ていただきました。
いろいろな方からいただいた意見をまとめると、
- 4GHzくらいの超高速なのがほしい(1chでよい)
- 250MHzサンプリングが欲しい
- LabVIEWに対応してほしい
- D/A出力がほしい
- CFDやTFA、汎用のゲートジェネレータを搭載して、ON/OFFで回路を構築できるようにする
という意見を多くいただきました。これらは確実に対応すると思います。
また、現在のソースコードを解析しながら自分でFPGAの回路を作って、実際に実験に使われているというすごい方もいらっしゃいました。
少しずつですが、物理の計測にCosmo-Zが浸透していっている確かな感触を掴めました。
また、放射線だけではなく、いろいろな分野の研究者の方が来ていただきました。研究者の中には、自分の専門分野だけではなく幅広くいろいろな情報を集めている人もいるのだなと。
逆に、自分と教え子の研究室グループという狭い世界に閉じこもって、外から一切情報を得ようとしない人たちがいるのも何となく感じました。
特殊電子回路は、既存の研究に、何か新しい手法を取り入れたい人を応援していきたいと思います。
2016.03.14
18bit8ch 拡張AD変換ボードを出図
1週間ほど根詰めて設計していた基板がようやく出図できました。
出来上がりは19日。ちゃんとできているかハラハラします。
基板の設計がだいたい出来上がってから、実際に出図するまでには、
- 部品表記のゆれ(0.1uFにするか100nFにするか等)
- 基板の外周から内層プレーンがはみださないように、内層を縁取りする
- 基板番号や製造者をシルクで表示する
- ポリゴンの貼り付けと、VIA打ち
- REFDESの振り直し
- シルクの位置調整
- 面付け(捨て板)の追加
- 製造指示書の作成
などがあります。概ね4時間くらいかかります。
2016.03.12
18bit AD変換の配線がだいたい引けた
引き続き、18bit 8ch 5MHz A/D変換基板の設計を進めています。
昨日の失敗は、1つのLVDSバッファで2つのチャネルをドライブしようとしたことと、表裏の配線層を使ってしまったことです。
そこで、LVDSバッファ周辺を見直し、1つのバッファで1つのチャネルをドライブするようにしました。
その結果、LVDSの配線を部品面だけでできるようになり、はんだ面は各種制御信号用に使えるようになりました。
これなら4層基板で作れそうです。
2016.03.11
18bit AD変換基板の設計の続き
18bit 8ch 5MHzのAD変換基板を作っています。
LVDSのバッファを配置した。ADC1とADC2へ、クロックと変換開始信号を1個のLVDSバッファ(4ch回路)から供給する。
P板.comで作るので、15:30が締めの時間。
6層でチャッチャッと作って15:30に間に合わせても、じっくり時間をかけて4層にして翌日にスーパークイックで出しても、出来上がり日は同じなので、より時間をかけることにした。
下の図が16:30の時点。
LVDSのバッファを8ch分引き終わったが、しかし、ここで大きな問題が生じた。
基板の表(赤い線)と裏(青い線)で同じような場所に並行して配線すると、それを横切る配線が引けないのだ。
そのため、この配置・配線はボツとなった。
夕方、東大の地震研に行ってCosmo-Zのチューンしたものを納めてきた。
事務所を引っ越したので5分で行けるようになって便利になった。
その後、私が院のときにいた研究室の助教の先輩が、地震研の別のところで助教をしているらしかったので、ずっと気になっていた。訪ねていった。
私のことを覚えていてくれた。今年の3月で任期が切れて民間企業に移られるらしい。さびしい。
基板の出図
今日は基板を2種類出図しました。
まず、Cosmo-ZのAD拡張基板。今度の応物学会でデモ機に使う基板として必要だったので急ぎで発注することにしました。それから、光センサ基板。
下の図は面付けした状態の図です。以前、面付けで大失敗した(異種基板を面付けしたときに、複数の基板で内層のネットが異なっていて、接続されていない箇所が多数出た)ので今回はあまり多くの基板を面付けしないことにしました。
左にある4つの基板がComso-Zの拡張基板。右下のが光センサ基板です。
この基板は、4素子のアバランシェフォトダイオードを搭載するためのものです。目的はレーザ光の測定ですが、実験の種類によってレーザの強度はログスケールで変わってくるので、ゲインを変えられるようにしたほうがよいと考えました。
そこで、VCA810AIDRというTexasInstrumentsの可変ゲインアンプを使うことにしました。VCA810は見た目は8ピンのOPアンプですが、Vc(コントロール端子)に負の電圧を与えることで、ゲインを-40dB~+40dBまで変えられるという異色のICです。
つまり、Vcに-2Vを与えれば100倍に増幅される。0Vを与えれば100分の1になる、というわけです。
このアンプを使えばレーザのいろいろな実験に使えるでしょう。
昨日から作っていた18bit AD基板は、ADCとOPアンプまわりの配置配線を直しています。
だいぶんすっきりしてきました。
この基板は一緒に面付けはせずに、別の基板として出図することにします。
3月末納期なのに間に合うでしょうか。
18bit 8chのA/D変換ボード
18bit 8chのA/D変換ボードを作っています。A/D変換ボードとはいっても、Cosmo-Zに搭載するタイプの拡張ボードで、最大5Mサンプリング/毎秒です。
現状では、Cosmo-Zに搭載できる最高ランクのADCは、125MHz 16bitの「AD9653」です。
しかし、このAD変換は下3ビットくらいはいい加減な値が出てきます。下の図はデータシートに記載されているヒストグラムの図ですが、一定の電圧を入れても下の3~4ビットはノイズで揺らいていて、正規分布を作っているのがわかります。
AD9653 (16bit 125Mサンプリング)のノイズ
実機で測ってみるとさらに悪く、データシート(↑の図)の2倍くらいのノイズがあります。
さて、ここでCICフィルタというLPFを通して5MHzにダウンサンプリングすると、
ゆらぎは1LSB程度(≒15μV)に減ります。
時系列でみてもほとんど±1しか変化していません!
16bitの125MHzでサンプリングしてLPFとデシメーションすれば、5MHzの意外と良いADCとして使えてラッキーと思うかもしれません。私もそうでした。
しかし、これはノイズを減らしているだけなのであくまでもフェイクです。LPFではひずみ率や、INL/DNLは改善しないので、真の16bit性能が出るわけはありません。
高調波はだいたい-80dB以下でノイズに埋もれて観測できないのですが、個体差によって調子の悪いやつがいると、-75dBくらいの大きいのが見えることがあります。
では、最初から18bitで5MHzのADコンバータ「AD7960」はどうでしょう。
AD7960 (18bit 5Mサンプリング)のノイズ
揺らぎは±2LSBで16bit版に比べて半分ですが、16bit版に比べて分解能は4倍になっているので、ノイズは約8分の1になっています。
また、ひずみ率はAD9653が-90dBなのに対して、AD7960は-117dBです。30dBも良いのです。
つまり、16bitの高速ADCのデータをどう処理しても、最初から18bitには敵わないのです。
そこで、中速でもいいから高精度のがほしいという方のために拡張ボードとして18bitのA/D変換ボードを作ることにしました。
東工大のアルバイト君に任せていたら、だいぶん良い感じの基板を作ってくれていました。彼はこの基板でまだ2作目なのですが、よくここまでできたと思います。
ZYNQのTCP/IP速度
先日、産総研に行ってディジタル化された放射線計測装置をみてきました。
Cosmo-Zでもこのようなものを作りたいと思い、まずは、計測データをTCP/IPで操作用PCに転送するところから始めることにしました。
いったい、ZYNQのTCP/IPはどのくらいの速度が出るのでしょうか?
ZYNQは普通にLinuxが動くので、Socketを使ったプログラミングができるので、ZYNQ側をサーバにしてPCから接続し、sendで大きなデータを送ってみました。そして、ZYNQのほうでgettimeofday()関数を使ってus単位の実行時間を計ります。
struct timeval tv_start,tv_end; gettimeofday(&tv_start, NULL); for(int i=0;i<N;i++) { int stat = write(client,data,1048576); if(stat <= 0) break; } gettimeofday(&tv_end, NULL);
まず、100BASE-Tで接続し、TCP/IPで1048576バイトのデータを送ると、13.4Mbytes/secでした。それを10回繰り返して10.4Mbytesのデータを送ると12Mbytes/sec。256回繰り返して、トータルで256MBytesのデータを送ると11.9Mbytes/secでした。
ZYNQで普通に書いたプログラムのTCP/IPの速度は100BAST-TXでの接続ならば12MB/sec弱ということでした。
一方、1000BASEでつないで256Mbyteのデータを転送したときは、66.6 Mbytes/secでした。
結構速いですね。