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

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

さて前回の続きで今回は USRP-RIO の FPGA に完全にストリームタイプの回路を追加したい場合の条件と追加処理についてみてみたいと思います。

完全にストリームタイプの回路について

ここで完全ストリームタイプの回路というのは以下のような入力 (または出力) をする回路を想定しています。


このタイミングチャートにあるように、ストリームデータはサンプリングクロックに完全に同期していて、連続して止まることなく入力することを要求するインターフェースです。
この手の回路は意外と多く、該当回路を将来実装するターゲットのボードが決まっていて、そのボードでは入力が ADコンバータから直接の入力だったりします。そして事前の確認のために USRP-RIO の FPGA に実装してみようということもあると思います。

USRP-RIO のデータのインターフェース (DDC 出力) のタイミングは、前回お見せしたバリッドベースのタイミングとなり、以下のようなタイミングになります。


前回のおさらいになってしまいますが、USRP-RIO では、バリアブルなサンプルレートを実現するために、ADクロックは固定レートですが、FPGA に実装された DDC 回路で実現しています。その為データとバリッド(データ有効) が対になって必要です。このバリッドは結構連続する場合も、お休みが長くなる場合もあり、結果的にサンプルレートになるようなタイミングでデータが出力されます。

このようにタイミングの要求が違うため、そのままでは接続できないのは明白です。何らかの対応をしなくてはなりません。

まず条件:回路が要求するクロックが派生クロックで生成可能か?

完全にストリームタイプに対応した回路の場合、先ほどのタイミングチャートにありますように、動作クロック = サンプリングクロック を想定しています。
そのため、そもそも該当回路を動かすための 動作クロックが派生クロックで作成できる必要があります。
事前に要求クロックが派生クロックで作成できるかどうかは確認可能です。生成できる場合は次のステップへ進めます。
もし生成できない場合には以下のような妥協?が必要になります。

妥協1:データが一部失われたり、ダブってしまっても良しとするか
妥協2: USRP の FPGA に実装する代わりに外部の FPGA モジュールでさらに同期させて処理させるか

という選択肢になります。
妥協2は以前の記事(USRPと信号処理 FPGA の処理クロックを同期させる)のようなものです。こちらも結構条件があるので、注意が必要です。
今回は派生クロックが生成できたとして進めます。

USRP 側との接続は非同期 FIFO で

派生クロックができたら、割と話は早いです。非同期 FIFO を用意して USRP のデータインターフェースと、ストリーム回路を接続します。
LabVIEW FPGA で使用できる非同期 FIFO はデュアルポート RAM ベースでできているので、書き込み側のクロックと読み出し側のクロックを非同期にできます。
イメージとしてはこのような感じです。

元の USRP 側のデータインターフェースは ADC クロックに対してデータとバリッドがサンプリングクロック相当のレートで来ています。これをライトイネーブルをバリッドとして非同期 FIFO に入力します。
非同期 FIFO の出力側は所望のサンプリングクロックで読み出しており、ある程度データが溜まったらリードイネーブルを立てて読み出せば OKです。

この方法なら、入力側でデータが書き込まれるレートと、読み出すレートは基本的に同期しますので、データ落ちや、ダブりの発生も起きず、ストリームで処理することができます。

まとめ

今回は追加回路のインターフェースが完全にストリームタイプの場合の条件と接続方法について解説してみました。
次回は追加回路がバーストタイプの場合を解説したいと思います。





0 件のコメント :

コメントを投稿