USRP-RIO の FPGA に回路を追加したい -インターフェース・タイミングについて- (1)


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

USRP-RIO シリーズ (NI USRP-294x, 295x 等) を使って信号処理をする場合、USRPに搭載しているFPGA上にプログラムをして信号処理をする場合があります。FPGAでリアルタイムの信号処理をする場合などです。

USRP-RIOに搭載されているFPGAのプログラムは、既にRF制御部分やPCとやりとりする部分が実装されており、ユーザはここに追加する形で実装します。主に実装する箇所は、ADC(DDC)から出てきた受信IQデータに対する処理か、DAC(DUC)に渡す送信IQデータの加工・生成になります。

ここに重要なポイントが潜んでいます。
「ADC(DDC)にIQデータから受信するタイミング」、「DAC(DUC)にIQデータを送信タイミング」です。
FPGAの設計を大きく左右する重要なポイントで、特に既に開発しているVHDLやVerilogをUSRP上に移植する場合には注意が必要です。

ちょっと内容が多くなるため数回に分けてお送りします。

まずは USRP-RIO の内部で IQ データのインターフェースはどのようになっているか、その構造とタイミングについて解説します。

そして、追加したい回路の入力(もしくは出力)のよくあるインターフェース

・完全ストリームタイプの回路

・バースト転送タイプの回路

について、実装のための条件や必要な追加処理を解説します。


USRP-RIO の受信側の IQ データパス・タイミングについて

まずは受信側の IQ データパスとタイミングについてみてみたいと思います。


デフォルトの FPGA の構造は以下の様になっています。



データは左から右に
・USRP-RIO ADコンバータからの入力 IQデータ
・デジタルダウンコンバータ (DDC)
・制御回路
・ホスト (ソフトウェア)転送用の DMA FIFO
これらは ADコンバータのクロックレートで全て動作しています。
USRP-RIO のソフトウェアでサンプルレート(IQレート) を指定しますが、実はADコンバータは常に固定レートでサンプリングしており、設定はこの FPGA の DDC (の内部のデシメータ) に設定しているレートになります。

ここにユーザーの回路を追加するとするとイメージ的にはこのようになります。

DDC の出力を横取りして追加回路に接続するイメージです。
出力は IQデータ 16bit x4 とその出力バリッド 1bit のポートだけという至ってシンプルなインターフェースです。

ポートは単純でも複雑なタイミング


さてDDC の出力インターフェースのエンティティ自体は単純なものの、追加したい回路側の要求する入力タイミングはもちろん千差万別で、そのまま接続できる回路のほうが少ないかもしれません。そういう理由もあり、別途インターフェース・タイミング変換の回路が必要になることが多いです。

このように回路を追加するためには DDC の出力のタイミングがどのようなものなのかを理解する必要があります。残念ながら DDC の回路のヘルプや、タイミングチャートが見つけられませんでしたが、イメージとしては以下の様になります。(数字が有効データ、Xは無効なデータ)


DDC の回路では最終的にユーザーから設定された所望のサンプルレートにデシメーションしており、この Valid (出力有効) の時のデータが有効となります。
実はこのValid の間隔やタイミングは所望のレートになっているものの、結構連続で出ていたり、だいぶ間隔が空いたりすることもあるようです。

さてこのようなタイミングなので、追加回路の入力の想定が完全にクロック同期のものや、バースト的に要求するものはそのままでは接続できないことがお分かりになるかと思います。
ただソフトウェア無線としてみればこのタイミングの考え方は大変優れており、バリアブルなサンプリングレートを実現することが可能です。

まとめ

今回は USRP-RIO FPGA に回路を追加するために、デフォルト FPGA での受信側の DDC の出力についてみてみました。
ポートは単純ですが、タイミングはちょっと複雑ですので、回路を追加したい場合には多くの場合、単純に接続させることが困難であることがわかると思います。
次回以降は、追加させたい回路のタイプと接続のための条件・方法を解説したいと思います。


0 件のコメント :

コメントを投稿