USRPと信号処理 FPGA の処理クロックを同期させる



こんにちは、ドルフィンシステムの笹生です。

前回はLabVIEW FPGA で任意の処理クロック周波数を作成する派生クロックについて紹介をしました。 

今回は、USRP のサンプリングクロックと信号処理 FPGAの FlexRIO の処理クロック(派生クロック) を同期させる方法について紹介したいと思います。  

どんな場合同期させる?ユースケース

よく用いられるソフトウェア無線の構成例として、USRP で取得した IQ データを別途信号処理用の FPGA でリアルタイム処理させるといったユースケースがあります。 

その場合、USRP-RIO とNI FlexRIO (FPGAボード) を組み合わせることが多いのですね。 そして USRP に設定したサンプリングレート(IQ レート) と、その後の信号処理で用いる FPGA の処理クロック(派生クロックで作成)を同期させたいニーズが結構あります。 



例えば、信号処理 FPGA が設計上USRP のサンプリングクロックに同期してパイプライン動作しないといけないケースなどです。
このようなケースの場合、もし非同期だと周波数の数値としては同一の派生クロックを作ったつもりでも、実際の絶対的な周波数は少しずれているのでだんだんずれていき、バッファで吸収してもデータが落ちてしまったり、データがダブってしまったりすることになります。それを防ぐためには、USRP 信号処理も FPGA も同じクロック源で同期させる必要があります。

(実は、同期させなくても元々のUSRP の IQ 信号はバリッドベースで 120MHz (or 200MHz) (ADCのレート) に対して論理的に設定されたサンプリングレートの割合だけデータ有効となる形式です。その為、FPGA もバリッドベースで作成していれば、サンプリングクロックよりも早い派生クロックなら、クロック周波数自体は非同期設定でも、論理的に同期することは可能です。これについてはまた機会をみて紹介したいと思います。)

同期の方法を考える

ハードウェアの構成によって同期させるには、クロックのルーティングをどうするか、追加ハードは必要か、などの方法は複数考えられます。
大きいところで、USRP がマスターのクロック源になるか、外部がマスターになるかというところもあると思います。実は USRP の 10MHz Ref Out は出力があまりよろしく無いようで、マスターには向いていないようです。(もちろんマスターになれないわけではありませんが追加でバッファ用のタイミングモジュールが必要になるなどそれなりに追加ハードが必要になります。)
今回は外部に 10MHzのクロック源、特に弊社でお勧めしているのが CDA-2990 OctoClock-G (https://www.ni.com/ja-jp/shop/hardware/products/clock-distribution-device.html?modelId=139073 の GPSDO付きのほう) を用意し、信号処理 FPGA は PXI シャーシでシャーシに 10MHz Ref In があるものを前提とします。
(シャーシに 10MHz Ref In があるのも割とポイントです。ないとタイミングモジュールが必要になります。)



この CDA-2990 OctoClock-G は、10MHz、PPS を内部生成しつつ最大 8分配まで分配できるものです。GPSアンテナをつなげれば GPS にも同期できます。弊社でも複数 USRP を同期させたい場合など多いので重宝しています。
今回はこれをマスターのクロック源にして、USRP と、PXIシャーシの 信号処理 FPGA (FlexRIO) を同期させたいと思います。

具体的な例

色々抽象的に説明するより具体的な例を挙げたほうがわかりやすいと思いますので、弊社で持っているの以下の構成で USRP と FlexRIO を同期させてみます。
●ハードウェアの紹介
USRP-2943
PXIe-1082 シャーシ (10MHz Ref INサポート)
FlexRIO PXIe-7976R (信号処理 FPGA)
MXI-IF (USRPとシャーシを接続する IF カード)
CDA-2990 OctoClock-G (10MHz Ref のマスター)

まずクロック系統の接続ですが、CDA-2990 がマスターになるので、CDA-2990 の 10MHz Out と USRP、同じく CDA-2990 の10MHz Out とシャーシの 10MHz Ref In を SMAケーブル等で接続します。
物理的なクロック系の接続は以上です。




USRP の実行時の設定
USRP の実行時の設定は、リファレンスクロックを REF IN にすることです。
これで外部 CDA-2990 から供給された 10MHz と同期してサンプリングが実行されます。



FlexRIO PXIe-7976 の設定
こちらは LabVIEW FPGA で開発時の派生クロックを 200MHz から作成したものにします。USRPと同じクロック設定を派生クロックで生成します。

この200MHz のクロックは FPGA の PLL で生成されていて、元のクロックのソースとして  "PXI Express 100MHz" が存在するときはそれをソースとして使用します。(以下の URL に解説があります。この図から、40MHzからでも100MHzからでも同期した派生クロックの生成は可能だと思います。

そして、その "PXI Express 100MHz" はシャーシが生成するクロックなのですが、シャーシの10MHz Ref IN と同期するため、 FlexRIO の派生クロックは外部の10MHz すなわち CDA-2990、= USRP と同期することが可能になります。

まとめ

今回紹介した方法はいくつかある同期方法の一つになります。条件等によってはより良いクロックルーティングが構成できることもあると思います。

そもそも前回少しご紹介したように派生クロックで USRP のサンプリングクロックと同じクロック周波数が作れない!といったことがあると同期のハードルが上がるかもしれません。
その場合はコストはかかりますが、さらにタイミングモジュールを追加するなどして対応することになると思います。
また一点注意ですが、USRP のサンプリングレート、FlexRIO の派生クロックのレートを同一に設定したつもりでも、実は PLL の仕組みの違い、設定レジスタのビット数の差、などで微妙な差が生まれる可能性があるそうです。今回そこまでの検証はしておりませんが、数時間とかの実験レベルではまぁ問題はないと思いますが、非常に長い目で見た場合ずれが影響する可能性もあるそうです。(NI の方からのご経験からの情報です。ありがとうございます。)


0 件のコメント :

コメントを投稿