LabVIEW FPGA で任意の周波数クロックを作る!派生クロック生成の注意点


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

 LabVIEW FPGA に限らず、FPGA を開発する際には使用するクロックを念頭に置く必要がありますよね。 基本的に FPGA 開発では実装する回路のスループットや、性能面を決めて、必要なクロック周波数を計算して使うことも多いと思います。 

LabVIEW で FPGA 開発できるボード等は、既にクロックは搭載済みで、ユーザーがその周波数を変更することはできません。 したがって、希望する周波数を得るためにはデフォルトのクロックを分周したりして生成するのですが、その機能が LabVIEW FPGA でも使用できます。
それが派生クロックという機能です。 

派生クロックは便利

派生クロックは、FPAG ベースクロックを分周して任意の周波数のクロックを作成できる便利な機能です。 例えば、200MHz のベースクロックから 17MHz のクロックを作成してみます。  




このように、作りたい周波数を指定するだけで簡単に生成してくれます。ベースクロックに除数と乗数を乗算して作りたい周波数を生成しているようですね。
200MHz から 17MHz を生成するので、200で割って 17 掛けて生成しているようです。
恐らく実態は Xilinx の MMCM のような IP を使っているものと思われます。
ただ、難しい設定を理解しなくても自動で簡単に生成できるのは非常にありがたいです。


LabVIEW プロジェクトのほうでも親クロックと派生クロックの関係がわかりやすくなっています。200MHz のベースクロックの下に 17MHz の派生クロックが作成できました。
もちろん、派生したクロックは LabVIEW FPGA の VI の SCTL (シングルサイクルタイミングループ)のクロックとして使用可能です。

単純な例ですが、この VI をコンパイルしてみた結果がこちら。

17MHz のクロック周波数がきちんとコンパイル制約に含まれて Met していることがわかります。
上記の例ではベースクロックより低い周波数を生成しましたが、ベースクロックより高い周波数も生成できます
とても便利な派生クロック生成ですが、注意も必要です。

派生クロックを作るうえでの注意点

派生クロックはこのように自由に指定した周波数を作れるのですが、感の良い方はお分かりかと思いますが、実は任意のすべての周波数が作れるわけではありません。除数、乗数にも限度があり、それに対応できない周波数は生成できません。
例えばですが、先ほど使った 200MHzベースクロックから 201MHz の派生クロックは残念ながら生成できないようです。


200MHz から 201MHz を作成しようとするのですが、除数に 203、乗数に 204 を指定しており、実際に生成されるクロック周波数は 200.98522... MHz と所望の 201MHz に対して 14.778... kHz の誤差が生じてしまうようです。
(先ほど 17MHz の時は 17/200 で生成できたので、今回も 201/200 で生成できそうに思うのですが。。。なぜ 204/203 になるのかは不明です。できないのですから、しょうがないですが。)
この除数、乗数はユーザから指定はできないようです。この辺りは仕様ですから仕方ないですね。

このように派生クロックでも生成できない周波数もありますので、事前に生成できるか確認しておくことは重要かもしれません。
所望の周波数が生成できない場合でも、ハンドシェイク型で回路を組んでおけば、バリアブルなレートでの演算に対応できますが、これはまた機会があれば記事にしたいと思います。

もう一点、派生クロックを生成できるベースクロックと、派生クロックを生成できないベースクロックもあるので、こちらも注意です。これは、外部クロックと同期を取りたい時などに問題となることもあります。回避策もあるので、こちらはまた改めて記事にしたいと思います。

まとめ

派生クロックは任意の周波数を生成できる便利な機能です。
ただし、生成できない周波数もあるので、事前に生成可能かどうか調べておくことが必要です。




0 件のコメント :

コメントを投稿