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

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

さて前回の続きで今回は USRP の FPGA にバーストタイプの回路を追加したい場合の条件や設計のポイントについてみてみたいと思います。

バーストタイプの回路について

イメージとしては以下のようなデータ入力が必要な回路です。


ここでは、このように動作クロックに同期してデータは連続でひとまとまりにして入力させるような回路をバーストタイプの回路を呼ぶことにします。
ひとまとまりであることを示すために、通常データと同じく連続したイネーブル信号(バリッド信号)も一緒につけます。

入力の仕様としては比較的わかりやすいのですが、さらに条件が加わると結構難しくなる場合もあります。
例えば厳しい条件のものだと
・塊のデータは連続入力で、かつ、次の塊は前の続きでないといけない。
つまりデータ落ちが許されない場合が要求される場合があり、逆に緩い条件のものだと
・塊のデータは連続入力だが、次の塊は前と離れていてもいい。
つまり途中のデータが落ちても(捨てても) OKというのもあります。

実装のブロック図イメージとしてはこんな感じでしょうか。

設計のポイント

さて具体的にバーストタイプの回路を実装するために、設計のポイントを見ていきたいと思います。一番よく使う例でもありますが FFT のバーストモードを使う場合で考えてみます。
仕様として厳しいほうの、データ落ちは許されない仕様で考えてみます。(データ落ちしてもいいのはまぁ簡単なので)

設計上気を付けたいのは、サンプリングクロック、バーストサイズ、FFT のバーストモードのレイテンシ、動作クロックのそれぞれの関係です。
基本的にバーストタイプの場合で、データ落ちをさせないようにするためには上記 4つの要素の条件が

バーストサイズ/サンプリングクロック >= レイテンシ/動作クロック

になれば実現可能ということができます。(あくまで単純な例ですが)
つまり1回の FFT 処理にかかる時間がデータの転送時間より短くなるように設計すれば OK ということになります。

さて、通常はレイテンシはバーストサイズよりも時間がかかることが多いはずなので、条件を満たすには動作クロックをサンプリングクロックより大きくする必要があります。

FFT の実装例として、4つの要素のうち 3つの要素を以下の条件で当てはめて考えてみます。

・使用する FFT サイズは 64 ポイント (= バーストサイズ)
・サンプリングレートは 20Msps
・レイテンシは 429サイクル

さてこの場合、必要最小限の FFT 動作クロックを計算すると

429/(64/20M)=134.0625 MHz 

となり、これより高い動作クロックであれば間に合うことになります。
USRP-RIO の FPGA Kintex-7 であれば、おそらくこの動作クロックに対応可能でしょう。
ですので、この条件なら実装可能であるといえると思います。

では、さらに条件を厳しくして、FFTサイズが変わって 1024 ポイント、サンプルレートも 160MHz になったらどうでしょう。

・使用する FFT サイズは 1024 ポイント (= バーストサイズ)
・サンプリングレートは 160Msps
・レイテンシは 7341サイクル

さてこの場合、必要最小限の FFT 動作クロックを計算するとどうなるでしょう。

7341/(1024/160M)=1147.0313 MHz

動作クロックが 1GHz を超えないといけないとなります。USRP-RIO の FPGA ではこの動作クロックは流石に無理ですよね。
こうなったら不可能か。。。と思うのはもちろんまだ早いですね。
FPGA のリソースに十分空きがあるなら並列化で対応させることができます。

8並列にしてあげれば、上記の場合には 1/8 のレートになるのとほぼ同じになるので、

7341/(1024/160)/8=143.3789 MHz

が理論上は最低必要な動作周波数となり、これ以上のクロックで動作できれば OK になります。(実際はこのレートだと受け取るデータレートより動作クロックが低いため、並列回路に割り振る部分が大変になりそうです。私ならサンプルレートと同じ 160MHzで動作をさせる設計にすると思います。)
もちろん、8つの並列 FFT 回路に順にデータを入れて、結果を順に送り出す回路が別途必要にはなりますが、机上の計算ではリソースが許せば問題なく実装できると言えます。
逆にリソースがない場合なら、「実現できない(データ落ちさせないと無理)」ということになります。

まとめ

3回にわたりタイプ別の回路の FPGA 実装方法についてシェアさせていただきました。
具体的な細かいインターフェースの説明は割愛しましたが、設計の前の段階でざっくり実装可能性を検討する場合にはこの考え方は結構重要だと思います。
もちろん色々な仕様の回路があり、この通りに行かないものも多いと思いますが、対策例の参考になれば幸いです。

0 件のコメント :

コメントを投稿