ZYNQ搭載 ADCボード「Cosmo-Z」>開発日記>2015年4月

2015年4月

東工大へ・・

平成27年4月24日

Cosmo-Zの件で東工大のある研究室に行ってきました。

可変解像度なADCと、リアルタイムなFFTと、LabViewとのインタフェースと、高速なDACを作ろうと思いました。

こういったあらゆる実験で使えそうな基本的で重要な要素は、どんどん実装して、世の中に広めていこうと思います。

 

Cosmo-Zの32ch動作に成功

平成27年4月24日

ついに、ZYNQ搭載ADCボード「Cosmo-Z」の32ch動作に成功しました。

Cosmoz32ch

何が苦労したかというと、消費電流と発熱です。

Cosmo-Z本体(ADC 8ch)は、現在のところ7W程度の消費電流ですが、8chの拡張ボードは1枚あたり4W程度も食うのです。32chフルに実装すると20Wにも達します。

5V4Aの電源から供給すればよいのですが、20Wの発熱をする物体がそこにあるともわーっとした空気を感じてしまいます。

拡張基板の何がそんなに無駄な電力をつかっているのかといろいろ調べました。基板のパターンをカットしたり、スイッチング電源を外して各部の電流を測ったりしたのですが・・

Cosmozpower

結局、無駄な電力を消費しているのはスイッチングレギュレータの後のLDOと、フロントエンドの高速OPアンプでした。

ひとまず、低消費電力化はあきらめ、FPGAの中身の開発を進めることにしました。

sun

すぐに動作確認したいときには、バウンダリスキャンを使ってLVDSの信号が来ているかどうかを調べると便利です。

CH1とCH2.。これはメイン基板です。LVDSの信号はバウンダリスキャンで見てもそれなりに対称的に見えますね。

Cosmoz32ch_2

拡張基板のCH3とCH4。これも問題なく信号が来ています。

Cosmoz32ch_3

拡張基板のCH5とCH6

Cosmoz32ch_4

最後にCH7とCH8

Cosmoz32ch_5

 

このように、全チャネルの端子にLVDSの信号が来ていることが確認できました。バウンダリスキャンって、便利ですね。

全チャネルにLVDSが来ていることが確認できたので、ソフトを起動してみたところ・・

Cosmoz32ch_1

バッチリ32個のCHのLVDSの同期が取れました。480MHzの差動信号が64本束ねられて送られてきて、デコードできたのですから、すごいものです。

ADC値を見てみると・・

Cosmoz32ch_6

このように、それなりに2048(0V)付近の値が見えていました。

動作も問題ないようです。.

 

現在の問題としてはADCのクロックを一番低い80MHzに設定しないとLVDSのロックが取れないことです。電力の問題なのか、それとも、LVDSのラインに誤って47Ω×2個のダンピング抵抗を挿入してしまったので、それが原因なのかもしれません。

 

Cosmo-Zの大幅な機能強化

平成27年4月22日

先月、学会でCosmo-Zを展示した反省点を踏まえ、大規模な機能の整理と向上を行っています。

もともとCosmoZは放射線、とりわけミューオンの検出用に開発したのですが、まずは柔軟なデータロガーとして動くように内部構造を整理しました。

次のようにすっきりとしました。

Csz1504_1

 

まず、可変クロック発生器(図の左下)というものがあって、こいつがすべてのADCのクロックの源を出しています。このクロック発生器は、単純に水晶から作っているのではなく、MMCMのダイナミックリコンフィギュレーションを用いて発振周波数を80MHz,100MHz,125MHzに動的に変えるのです。そして、Max 255分周の分周期でADCのサンプリングレートを1MHz~125MHzまで変えられるようにしています。

Gbpsに迫る速度でADCから送られてきたLVDSのデータをデコードするのが、ADC LVDSデコード回路の役割です。デコードされたデータは、オフセットと、ゲインをかけて補正を行い、その後、可変遅延回路に入ります。可変遅延回路というのは要はリングバッファです。

可変遅延回路を出力したデータはマルチプレクスされてメインメモリに格納されるというしくみです。

簡単に書いていますが、AXIバスは4本あります。ZYNQの中のAXI HPポートは高々64bit 250MHzまでしかいかないので、たった4Gbpsの帯域しかないのです。32ch同時に100MHzサンプリングしたらAXIバスが詰まってしまいます。

だから4本のAXIバスに分けてADからのデータをDDR3に送り込んでやろうというわけです。入口は狭いけど、きっと中は広いはず。

 

 

実際にどんな感じか、実験してみてみましょう。まず、Cosmo-Zの入力CH1とCH2をショートし、CH1とCH2に同じ信号が入るようにします。

Csz1504_2

Cosmo-Zを起動したら、helpコマンドを打ってみましょう。

Csz1504_4

ソフトウェアのバージョンも0.5になって、だいぶん洗練されたと思います。

今回のバージョンからは、cosmozのソフトの中でコンソールを持つようになったので、毎回毎回cosmoz.elfを起動する必要がなくなりました。

adc helpと打つと、ADC関係のコマンドのヘルプが出ます。

Csz1504_5

adc freq 25と打つと、ADCのサンプリングレートを25MHzに変更できます。

adc dispmodeは、表示をHEXにするかDECにするかを指定します。

adcとだけ打つと、現在の値を表示します。

上の図では8ch分しかありませんが、adc boards コマンドでチャネル数を増やすこともできます。

captureコマンドを打つと、データをキャプチャして画面に表示してくれます。ファイルに保存するモードであれば、レートとチャネル数にもよりますが、数十Mサンプリングまでできます。

Csz1504_6

見てわかるとおり、信号を入れていないチャネルは信号が±1しか変化しません。ノイズの影響はほとんどありません。

sun

このように、ADCの速度をはじめとした様々なパラメータはLinuxのコンソールから行うのですが、波形はやはり画像で見たいものです。

そこで、Cosmo-ZのIPアドレスをブラウザに入力して、Web画面(のcgi-bin/pngwave.cgi)を開くと、現在のキャプチャされた波形が表示されるようにしました。

綺麗な正弦波ですね。

Csz1504_3

この波形キャプチャ画像ツールは、縦横の単位やサイズが自由自在に伸び縮みします。例えば、80MHzで10万ポイントをサンプリングして、横8000pixelの画像にすることもできます。

Csz1504_7


遅延時間や、ゲイン、オフセットはチャネルごとに個別に設定できるので、たとえば遅延時間を2つのチャネルでずらしてやると、同じ波形なのにこう見せたり、

Csz1504_8

こう見せたりできます。

Csz1504_9

 

これが何の役に立つのかというと、2つのチャネルから入ってきた信号を、どちらか一方だけ遅らせてトリガをかけるとか、信号の到達時間の差を補正するというのに使えるかと思います。

4月22日水曜日中には、この新しいデザインをリリースできるよう頑張りたいと思います。

sun

CosmoZの低速サンプリング

平成27年4月11日

Cosmo-Zをデータロガーとして使うときのために、80MHzとか125MHzとか高速なサンプリングではなく、2MHzや1MHzといった低速サンプリングができるようにしました。

1分の1から256分の1までコマンドで可変できます。

下の波形は、80MHzでサンプリングした波形を16回に1回、Valid信号を出して5MHz相当の信号として取り出している図です。

Lowspeed

5MHzで8chならば、32GBのSDカードに1時間程度記録できます。

このモードは、記録メディアの容量や速度が限られている場合に使う予定です。

Cosmo-Zのサンプリング周波数を動的に変更

平成27年4月10日

Cosmo-ZのADコンバータのサンプリング周波数を動的に変更できるようにしました。

Cosmo-ZのADコンバータはのサンプリング周波数は、80MHz、100MHz、125MHzと3種類の選択肢があります。

このADコンバータのクロックはPLL(MMCM)で作っているので、いままでは、FPGAのソースコードを変更して再ビルドしなければなりませんでした。そこで、この周波数を動的に変更しようと考えました。

基本的なやり方は、過去の記事「XILINX 7 シリーズにおけるMMCM周波数の動的変更」で書いたのですが、MMCMのDRP(ダイナミック・リコンフィギュレーション・ポート)を使います。

基本的にはDRPを通じてレジスタに設定値を送り込めばMMCMは新しい周波数で動作を開始するのですが、望みの周波数で発振させるためにはどんな設定値を書けばよいのか、わからないと思います。

そこで、まず、80MHz、100MHZ、125MHzで動作するMMCMをCoreGenで作って、DRPを通じて現在の値を読み出します。その値をVHDLでハードコーディングして、必要なときに送り込むようにすればよいというわけです。

このようにしてDRPポートに送り込んでいるときの波形は次のとおりです。

Clk_drp

こうして作ったクロックによって、Cosmo-ZのADCは80MHz/100MHz/125MHzを動的に切り替えられます。

クロックが変わったら、ADCから送られてくるシリアルデータをデコードする回路をリセットして、やらねばなりません。

次の図は、ISERDESのIDELAY_CEと、BitSlipのパルスです。

80MHzのとき。

Sync80

100MHzのとき。

Sync100

125MHzのとき。

Sync125

このように、動的に周波数を変更し、再同期を行うことができるようにしました。


© 2015 TokushuDenshiKairo Inc. All rights reserved