LabVIEW FPGA と Simulink System Generator の動作クロックの指定方法を比較

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

今回はFPGA 開発における、LabVIEW FPGA と Simulink + System Generator(以下 SysGen) の動作クロック指定の方法の違いを比較してみようと思います。

最近私も SysGenで FPGA 開発も本格的にするようになってまいりまして、その中で LabVIEW FPGA とは似て非なる部分も多いと感じ、特にクロックに関しては考え方が違うなぁと思った次第です。

LabVIEW FPGA と SysGenでは動作クロック指定の方法が違う

デジタル信号処理を実装する私のような FPGA 屋さんからすると、与えられたクロックを基本として、そのタイミングに同期して各回路が動作するようにイメージして設計・実装していきます。
テキスト言語である VHDL や Verilog HDL などでも、与えられたクロックで動作する内容をスコープ内に記述します。

LabVIEW FPGA も Simulink ベースの SysGen もどちらもブロックダイアグラムで FPGA の回路を記述していくことになるのですが、同じものを実現したいとしても、コーディング作法が違っており面白いです。
それでは見ていきましょう。

LabVIEW FPGA の場合はかなり明示的


LabVIEW FPGA では、タイミングをつかさどるストラクチャとして While ループと SCTL (シングルサイクルタイミングループ) があります。今回の様にFPGA ボードなどのターゲットデバイスの実際のクロックなどを指定したい場合は、SCTL というループストラクチャになります。
その SCTL を置きその中に処理を実装していきます。
この SCTL プロジェクトで作成したクロックを接続することで、この SCTL ループの中の処理がそのクロック 1クロックで1回動作します。
そういった意味では、HDL のスコープに近い感覚で記述できる方法だと思います。

非同期なクロック間でのデータ渡しは、2つの SCTL を用意して、それぞれに非同期用の FIFO を置くことで解決できます。
もちろん、FIFO の深さや制御には注意する必要があります。

Simulink (SysGen) の場合はブロックプロパティで指定


Simulink (SysGen) の場合、ずばりクロックという感じで大きなくくりの指定はせず、ブロックをダブルクリックして開く、ブロックパラメータの「サンプル時間」で指定します。
(モデルのプロパティで固定ステップサイズの指定はできるようですがこれは本当に全体の設定になるようなので今回は割愛します)

その際、デフォルトのサンプル時間はブロックによって違いがあるようで、-1 (継承する)という場合もあれば、1 が入っているものもあったりします。
なのでブロックを置くたびにサンプル時間を確認して必要があれば指定してあげなければなりません。
継承の場合でも結局どこかが大元のサンプルを刻むことになるのもちょっとわかりづらいところかなぁと個人的には思ったりしました。

ひとまず私の場合は新規でブロックを置いたら、「サンプル時間」の項目に特定の変数(例えば sampT といったもの) を割り当てるという独自ルールを設けて対処しています。この変数は MATLAB 側のワークスペースで変更できますし、Simulink のモデルプロパティのコールバックタブ、「PreLoadFnc」 で数値を代入指定しておくと起動時に sampT に自動的に値が割り当てられて便利です。



まとめ

個人的な感覚になってしまいますが、比較してみますとこんな感じです。
・LabVIEW の場合は結構割り切っていて、「クロック」は SCTL というスコープ内で統一して使用されていることがわかりやすい
・Simulink System Generator の場合は、そもそもマルチレートのサポートも前提だったりするので、各ブロックでのサンプル時間の指定が必要

それぞれ長所、短所はあると思いますが、個人的には LabVIEW のほうがクロック伝搬の範囲がわかりやすいです(慣れてしまっているというのが正直なところかもしれませんが)。Simulink System Generator は逆にパラメータとして裏に隠れるので、LabVIEWよりもすっきりしたブロック線図となり可読性が高まる傾向がある気がします。

ちょっと今回は時間が無かったのでこの程度の比較ですが、以前 HDL と LabVIEW FPGA で、同じ回路を実装したとしての開発時間の比較を行ったことがありまして、それに似た感じで同じ回路をLabVIEW と SysGenで実装してみて開発時間の比較をするのもいいかなと思いました。(SysGen にもっとなれたらですね。)



0 件のコメント :

コメントを投稿