アプリケーションノート

Moku Cloud を MathWorks HDL Coder でコンパイルする

Moku:Pro での配置可能な VHDL コードの生成 パート 1 - MATLAB - MathWorks 日本

Liquid Instruments の Moku Cloud Compile ツールを使用すると、ユーザーは Moku:Pro FPGA に独自のカスタム デジタル信号処理 (DSP) を展開できます。 FPGA プログラミングは通常、ハードウェア記述言語 (HDL) を使用して行われます。 HDL コーディングの学習曲線は、ソフトウェア プログラミング言語に比べて急峻な場合があります。そのため、このチュートリアルでは、MATLAB と Simulink を使用して DSP 動作/アルゴリズムをプログラミングおよび構築し、Moku プラットフォームで実装するための VHDL コードを自動生成する方法について説明します。このチュートリアルのパート 1 では、MATLAB スクリプトを VHDL コードに変換する方法を説明します。 第2部 チュートリアルのこの部分では、Simulink モデルを VHDL コードに変換する方法を説明します。

印刷可能なバージョンをダウンロード


概要

Mokuクラウドコンパイル

Liquid Instruments の Moku Cloud Compile (MCC) ツールを使用すると、ユーザーは Moku プラットフォームに実装するカスタム機器を設計できます。 CPU および特定用途向け集積回路 (ASIC) ベースの DSP アプローチと比較して、FPGA は、CPU と同様にソフトウェア定義で再プログラム可能でありながら、ASIC レベルの入出力レイテンシを提供します。 FPGA プログラミングは通常、ハードウェア記述言語 (HDL) を使用して行われます。 HDL コーディングの学習曲線は、ソフトウェア プログラミング言語に比べて急勾配になる可能性がありますが、他のプログラミング言語のスクリプトを HDL に変換するために利用できるツールがいくつかあります。このチュートリアルでは、MathWorks HDL コーダーを使用して MATLAB コードを Moku:Pro に実装するための HDL コードに変換する方法を説明します。

このチュートリアルのパート I では、MATLAB HDL Coder を使用した VHDL コード生成のみに焦点を当てます。この方法は、MATLAB でのプログラミングにすでに慣れているユーザーにお勧めします。このチュートリアルのパート II では、Simulink モデルからの VHDL コード生成について説明します。 Simulink モデルのブロック ダイアグラム形式により、システムとデータ フローを簡単に視覚化でき、ユーザーは MATLAB 関数ブロックを設計に追加することもできます。より複雑なシステムの場合、両方のツールを利用すると、設計プロセスが大幅に合理化される可能性があります。

MATLAB HDL Coder メソッドの設計プロセスは、図 4 のように、DSP 設計、浮動小数点シミュレーション、HDL 生成、DSP の展開と検証の 1 つの最上位ステージに分類できます。以下の手順に従って、MATLAB HDL Coder を使用して Moku:Pro に実装するデジタル シュミット トリガーを構築します。


図 1: Cloud Compile + HDL Coder DSP 設計の推奨ワークフロー。

シュミットトリガー

シュミット トリガはコンパレータ回路のバリエーションです。入力が特定の電圧しきい値を上回るか下回るかに基づいて、1 ビットのデジタル出力を提供します。標準的なオペアンプベースのコンパレータには単一のしきい値があります。ノイズの多い入力信号の場合、入力がしきい値に近づくかしきい値を超えると、しきい値電圧で飛び跳ねて出力が不安定になる可能性があります。シュミット トリガには XNUMX つのしきい値があり、オンに切り替えるための高いしきい値と、オフに切り替えるための低いしきい値です。この場合、たとえノイズの多い入力がスイッチオンしきい値を超えて飛び戻ったとしても、上限と下限のしきい値の間のギャップによって「保護領域」が作成され、デジタル出力は変化しません。このデバイスは、デバイスのトリガーまたは正弦波から方形波へのコンバーターとして一般的に使用されます。


図 2: コンパレータとシュミット トリガの比較。

要件

シュミット トリガーの構築と実装を開始する前に、システムが次の要件を満たしていることを確認してください。 MATLAB スクリプトから VHDL コードを生成するには、HDL Coder および固定小数点コンバーターを備えた MATLAB が必要です。チュートリアルのパート II で Simulink を使用してシステムを構築する場合は、Simulink も必要になります。注: Mac ユーザーが HDL Coder を動作させるには、XCode もインストールする必要があります。 VHDL コードをコンパイルするには、Liquid Instruments Cloud Compile にアクセスする必要があります。コンパイルされた計測器ビットストリームを実装するには、ファームウェア バージョン 551 以降を実行している Moku:Pro、Moku:iPad アプリ、および Moku:Pro のマルチ計測器モードへのアクセスが必要です。

DSP設計

コンセプチュアルデザイン

シュミット トリガーには単一の入力と出力があります。アナログ入力信号は上限および下限のしきい値と比較されます。この例では、上限しきい値は正の入力範囲全体の 1/10 であり、下限しきい値は負の入力範囲全体の 1/10 です。入力信号が上限しきい値より高い場合、出力は 2^15-1 (出力が生成できる最大の 16 ビット符号付き整数) に設定されます。入力信号が下限しきい値よりも低い場合、出力は 0 に設定されます。または、これらの条件がいずれも満たされない場合は、前の状態のままになります。

浮動小数点 DSP 設計

このセクションでは、永続変数と if-elseif ステートメントを使用して、上記の概念設計を MATLAB 関数に変換します。

 

シュミット トリガー DSP 関数では、1 つの入力チャンネル (InputA) と 1 つの出力チャンネル (OutputA) だけが必要になります。単一の入力と出力を備えた MATLAB 'DSP' を作成します。 DSP モジュールは関数形式で設計する必要があることに注意してください。

関数 出力A = DSP(入力A)

次に、関数に永続変数 out0 と論理演算の if-elseif ステートメントを設定します。

浮動小数点シミュレーション

シミュレーションと検証は、FPGA 設計における重要なステップです。デジタル システムの応答を検証するには、シミュレートされた信号を入力してシス​​テムの応答を観察する「テストベンチ」を構築するのが一般的です。浮動小数点デザインを固定小数点デザインに変換するには、テストベンチが必要です。ネイティブ固定小数点設計の場合、テストベンチはオプションです。ただし、どのデザインに対しても常にテストベンチ シミュレーションを実行することを強くお勧めします。

テストベンチの構築

MATLAB では、テストベンチは、さまざまな入力を使用してループ内で関数 (つまり、このチュートリアルでは DSP 関数) を呼び出す MATLAB スクリプトと考えることができます。このチュートリアルでは、浮動小数点設計、固定小数点設計、HDL 設計の 3 ラウンドのテストベンチ検証を実行します。最初のテストベンチは浮動小数点モデルを検証するもので、2 つ目は固定小数点変換後のシステム動作を検証するもので、最後は EDA ソフトウェアでの VHDL シミュレーションを通じて HDL モデルを検証するものです。

テストベンチの最初の 2 ラウンドは、MATLAB で、同じテストベンチ スクリプトを使用してシミュレートされた入力信号を使用して実行されます。シミュレートされた信号は、ダイナミック レンジと精度の点で実際の入力信号に非常に近いものである必要があります。これは、MATLAB の固定小数点ツールが固定小数点モデルに最適な精度を決定するのに役立ちます。

DSP 関数テストベンチは、一連のサンプル データを入力信号としてロードすることによって機能します。この信号は、チュートリアルのパート II の Simulink モデルと一致しています。その後、DSP 関数が for ループで呼び出され、出力が図 3 にプロットされます。出力により、DSP 関数が設計したいシュミット トリガーと一致することが確認されたため、MATLAB HDL Coder を使用した HDL コードの生成に進むことができます。


図 3: MATLAB シミュレーションの出力

HDL コード生成

MATLAB HDL Coder は、ワークフロー アドバイザーを使用して、固定小数点変換、HDL 生成、および HDL テストベンチ生成プロセスを含む完全な HDL コード生成プロセスをユーザーにガイドします。 DSP 関数を HDL コードに変換するこのプロセスを開始するには、まず MATLAB で HDL Coder アプリを起動し、新しいプロジェクトを作成します。あるいは、MATLAB のコマンド ウィンドウに「hdlcoder」と入力することもできます。


図 4: HDL Coder アプリは [アプリ] タブにあり、新しい HDL Coder プロジェクトを作成できます。

HDL コード生成ウィンドウが表示されたら、MATLAB 関数 (DSP) と対応するテストベンチを追加できます。ここで「タイプの自動定義」を使用して関数の入力変数タイプを定義することも、ワークフロー アドバイザでこれを完了することもできます。ほとんどの場合、入力変数は次のように定義できます。  、この時点ではモデルが浮動小数点であるためです。


図 5: DSP.m と DSP_tb.m は HDL 生成のソースとして使用されます。

これから開きます ワークフローアドバイザー シュミット トリガー HDL コードを生成します。

固定小数点変換

ソフトウェア モデルと FPGA モデルの主な違いの 1 つは、ソフトウェアの計算では通常浮動小数点数が使用されるのに対し、ほとんどの FPGA 計算では固定小数点数が必要であることです。 MATLAB のネイティブ形式は浮動小数点数です。したがって、この浮動小数点設計を HDL コード生成用の固定小数点モデルに変換する必要があります。

MathWorks の固定小数点ツールは、テストベンチの入力データ範囲に基づいて、浮動小数点モデルから固定小数点モデルへの自動変換を実行します。ユーザーは、必要に応じて、自動的に定義された範囲を手動でオーバーライドできます。 Moku Cloud Compile の場合、入力、出力、および制御信号タイプは、符号付き 16 ビット数値である Moku Cloud Compile インターフェイスと一致する必要があります。 MATLAB はこれを numerictype(1,16,0) として示します。ここで、「1」は信号を符号付き数値として指定し、「16」は語長を 16 ビットに指定し、「0」は XNUMX 進小数点スケーリングを指定しないことを意味します。

固定小数点変換を開始するには、まず [分析] ボタンをクリックし、HDL Coder がテストベンチ ファイルに基づいてデータ型と範囲を決定できるようにします。提案された型がハードウェア インターフェイス要件 (つまり、numerictype(1,16,0)) と一致しない場合は、変数の提案された型をクリックして numerictype(1,16,0) と入力することで、入力データ型と出力データ型を手動でオーバーライドします。 )。次に、「型の検証」をクリックしてデータ型を検証し、固定小数点モデルを生成します。


図 6: 1. テストベンチ入力信号を使用してデータ型を分析します。 2. 必要に応じて、データ型を手動でオーバーライドします。 3. 設計を検証し、固定小数点モデルを生成します。

固定小数点モデルの検証

固定小数点モデルの変換後、別のシミュレーションを実行して、固定小数点モデルが期待どおりに動作することを確認し、精度の損失を評価する必要があります。固定小数点モデルの検証は、「Test Numerics」ボタンを通じて実行されます。必ず「比較プロットの入力と出力を記録する」を選択してください。これにより、浮動小数点モデルの変数を固定小数点モデルの同じ変数と比較するためのプロットが生成されます。


図 7: 浮動小数点モデルと固定小数点モデル間の変数 OutputA の比較

許容できない精度の損失が観察された場合は、変数の精度を上げてから、固定小数点変換を繰り返します。入力、出力、および制御信号の精度はハードウェア インターフェイスと一致する必要があることに注意してください。

固定小数点モデルがテストベンチでの検証に合格したら、シュミット トリガー モデルの VHDL コードの生成に進むことができます。

VHDLコード生成

メニューの「コード生成ターゲットの選択」に進み、「汎用 ASIC/FPGA」のままにします。

「HDL コード生成」ステップでは、「ターゲット」と「クロックとポート」を構成する必要があります。

  • ターゲット:
    • 作成セッションプロセスで 言語設定 〜へ VHDL
  • クロックとポート:
    • 作成セッションプロセスで リセットタイプ 〜へ 同期
    • チェック クロックイネーブルを最小限に抑える
    • 作成セッションプロセスで 入力データ型 〜へ 署名済み/署名なし
    • 作成セッションプロセスで 出力データ型 〜へ 署名済み/署名なし

「実行」をクリックすると、システムの VHDL コードが下に表示されます。 …\ codegen\DSP\hdlsrc フォルダにコピーします。


図 8: VHDL へのターゲット言語を選択し、コード生成を実行する

サードパーティツールを使用した VHDL シミュレーション (オプション)

HDL Coder は、EDA ソフトウェアでシミュレーションを実行するための HDL テストベンチ ファイルを生成することもできます。サードパーティの HDL シミュレーターを使用してモデルを検証すると、設計に追加の保険が提供されます。この手順はオプションですが、複雑なシステムの場合は強くお勧めします。テストベンチ ファイルは、 ワークフローアドバイザー.


図 9: (a) HDL テストベンチ ファイルは HDL Coder で生成できます。 (b) Xilinx Vivado による HDL レベルのシミュレーション

コンパイルとデプロイメント

シュミット トリガーの VHDL コードが完成したので、Liquid Instruments の Moku Cloud Compile を使用して計測器をコンパイルし、Moku:Pro にデプロイする準備が整いました。

インストゥルメントラッパー

Moku Cloud Compile には、カスタム インストゥルメントが Moku の他の部分と対話できるようにする標準ラッパーが組み込まれています。標準ラッパーは、計測器の 4 つの入力チャンネルと出力チャンネルをすべて使用します。これは、入力が 1 つと出力が 1 つしかないシュミット トリガーの例とは一致しません。したがって、インストゥルメント用のカスタム ラッパーを作成する必要があります。

このチュートリアルには、MATLAB で生成された VHDL コードのラッパー テンプレートが提供されています。 3 つの異なるラッパー テンプレートが提供されています。1 つは MATLAB HDL Coder で生成された VHDL コード (つまり、このチュートリアル) 用に設計され、1 つは Simulink で生成された VHDL コード (つまり、このチュートリアルのパート II) 用に設計され、最後に 1 つはコード用です。が含まれています セアウト ポート。アプリケーションに適したラッパー テンプレートの選択に進む前に、VHDL コードのポート定義セクションを調べてください。

以下は、シュミット トリガー計測器のコンパイルに使用するカスタム ラッパーです。

計測器のコンパイルと展開

Moku Cloud Compile を使用して計測器のビットストリームを構築し、計測器を展開する方法の詳細な手順については、次のリンクを参照してください。 Moku Cloud Compile スタートガイド.

シュミット トリガーをコンパイルするには、Liquid Instruments の Moku Cloud Compile で新しいプロジェクトを作成します。このプロジェクトでは、シュミット トリガーの VHDL コードである DSP_fixpt.vhd のファイルを作成します。また、前のセクションのカスタム ラッパーのラッパー ファイルも作成します。ターゲット デバイスを 4 スロットの Moku:Pro として選択し、プロジェクトをビルドします。ビットストリームが構築されると、Web インターフェイスと iPad アプリを使用して Moku:Pro にシュミット トリガーを展開できるようになります。

シュミット トリガーが最初の概念設計どおりに機能していることを実証するために、マルチインストゥルメント モードの Moku: アプリを使用して、コンパイル済みの DSP をシステムに配置しました。スロット 1 には、シュミット トリガへの入力信号としてテストベンチで使用したのと同じ信号を生成する任意波形発生器を配置しました。スロット 2 にはシュミット トリガーを配置しました。スロット 3 にはオシロスコープを配置し、入力 1 にシュミット トリガーからの出力を表示し、入力 2 に任意波形発生器からの信号出力を表示して信号を比較しました。信号が 110 mV を超えたときにシュミット トリガーからの出力が High に切り替わり、信号が -110 mV を下回るまで High のままであることがわかります。これにより、シュミット トリガーが設計どおりに動作していることが確認されます。


図 10: (a) マルチ機器システム構成。 (b) シュミット トリガが設計どおりに機能していることを確認するオシロスコープ測定。

まとめ

このチュートリアルでは、MATLAB スクリプトを Moku プラットフォームで実装するためにコンパイルできる VHDL コードに変換する詳細なプロセスについて説明しました。このプロセスには、DSP 設計、浮動小数点シミュレーション、HDL 生成、DSP の導入と検証という 4 つのトップレベル プロセスが含まれます。このプロセスにより、HDL プログラミングを学習する必要がなくなり、ユーザーはすぐに独自のカスタム計測器の設計と作成に取り組むことができます。

コードの利用可能性

このプロジェクトのソースコードは次のコマンドでダウンロードできます。 このリンク.


質問・コメント

当社までご連絡ください: support@liquidinstruments.com