メインコンテンツ

Speedgoat Simulink プログラム可能 I/O モジュールでの FPGA プログラミングと構成

この例では、HDL ワークフロー アドバイザーを使用して Simulink® アルゴリズムを Speedgoat® Simulink プログラム可能 I/O モジュールに実装する方法を説明します。Simulink Real-Time FPGA IO ワークフローを実行して、次を実行します。

  1. FPGA I/O モジュールとそのインターフェイスを指定します。

  2. FPGA プログラミング用に Simulink アルゴリズムを合成します。

  3. Simulink® Real-Time™ インターフェイス サブシステム モデルを生成します。

インターフェイス サブシステム モデルには、FPGA をプログラミングし、リアルタイム アプリケーションの実行中に PCIe バスを介して FPGA モジュールと通信するブロックが含まれます。生成したサブシステムを Simulink Real-Time ドメインのモデルに追加します。

この例では Speedgoat IO397-50k モジュールを使用します。HDL ワークフロー アドバイザーでの Speedgoat FPGA のサポートを参照してください。

セットアップと構成

アルゴリズムを Speedgoat IO モジュールに展開する前に、以下を行います。

1. HDL の言語サポートおよびサポートされるサードパーティ製ツールとハードウェアにリストされている Xilinx® Vivado® の最新バージョンをインストールします。

次に、関数hdlsetuptoolpathを使用して、インストールした Xilinx Vivado 実行可能ファイルへのツール パスを設定します。

hdlsetuptoolpath('ToolName','Xilinx Vivado','ToolPath','C:\Xilinx\Vivado\2019.2\bin\vivado.bat')

2. リアルタイム シミュレーション用に、開発環境とターゲット コンピューターの設定を行います。Get Started with Simulink Real-Time (Simulink Real-Time)を参照してください。

3. Speedgoat ライブラリおよび Speedgoat HDL Coder Integration Package をインストールします。Install Speedgoat HDL Coder Integration Packages を参照してください。

HDL ワークフロー アドバイザー

HDL ワークフロー アドバイザーは、HDL コード生成および FPGA 設計のプロセスをサポートします。このアドバイザーを使用して以下のことを行います。

  • モデルに HDL コード生成との互換性があるか確認し、非互換の設定を修正。

  • HDL コード、テスト ベンチ、およびそのコードとテスト ベンチをビルドして実行するスクリプトを生成。

  • 合成およびタイミングの解析を実行。

  • 生成されたコードを SoC、FPGA、Speedgoat I/O モジュールに展開。

モデル内のサブシステムに対して HDL ワークフロー アドバイザーを開くには、関数hdladvisorを使用します。

open_system('hdlcoder_slrt_loopback');
hdladvisor('hdlcoder_slrt_loopback/loopback')

アドバイザーの左側のペインには、関連タスクのグループを表すフォルダーが含まれます。フォルダーを展開してタスクを選択すると、そのタスクに関する情報が右側のペインに表示されます。右側のペインには、詳細設定パラメーターに対してタスクを実行するための単純なコントロールと、HDL コードとテスト ベンチの生成を制御するオプション設定が含まれます。各タスクの詳細については、そのタスクを右クリックし、[これはなに?] を選択します。HDL ワークフロー アドバイザーのご利用の前にを参照してください。

Simulink ループバック ドメインのモデル

このモデルが FPGA ドメインのモデルです。これは FPGA ボードのクロックのシミュレーションのサンプル レートを表します。loopback サブシステムには、FPGA を読み込むアルゴリズムが含まれます。データ型とモデルの入力行数と出力行数は、Speedgoat IO397-50k プラットフォームに合わせて設定されます。

open_system('hdlcoder_slrt_loopback')
set_param('hdlcoder_slrt_loopback', 'SimulationCommand', 'Update')

Speedgoat IO397 プラットフォームの Simulink Real-Time インターフェイス モデルの生成

1. loopback サブシステムの HDL ワークフロー アドバイザーを開きます。このサブシステムは FPGA に読み込まれます。

hdladvisor('hdlcoder_slrt_loopback/loopback')

2. [ターゲットを設定] フォルダーを展開します。[ターゲット デバイスおよび合成ツールを設定] タスクで、[ターゲット ワークフロー] を [Simulink Real-Time FPGA I/O] として、[ターゲット プラットフォーム] を [Speedgoat IO397-50k] として指定します。[ターゲットのリファレンス設計を設定] タスクを右クリックし、[選択したタスクまで実行] を選択します。

3. [ターゲット インターフェイスを設定] タスクで、端子 hwInhwOutIO397_TTL [0:13] および pciRead C0-C4 にマッピングし、pciWrite C0-C4PCIe interface にマッピングします。[このタスクを実行] をクリックします。

4. 既定値が [ターゲット周波数 (MHz)] に設定されている [ターゲット周波数を設定] タスクを実行します。ターゲット周波数は、範囲 [周波数範囲 (MHz)] 内でなければなりません。

5. [ターゲットにダウンロード] タスクを展開します。[Simulink Real-Time インターフェイスの生成] タスクを右クリックして [選択したタスクまで実行] を選択します。

このタスクは RTL コード、IP コア、FPGA ビットストリーム、および Simulink Real-Time インターフェイス モデルを生成します。[プロジェクトを作成] タスクで、Vivado プロジェクトを開いて、実装されているブロック設計を確認します。

Real-Time サブシステムの統合と実行

[Simulink Real-Time インターフェイスの生成] タスクが成功したら、リンクをクリックして Simulink Real-Time インターフェイス モデルを開きます。

Simulink Real-Time インターフェイス モデルには、Simulink FPGA ドメインのモデル内のサブシステムと同じ名前のマスク サブシステムが含まれます。このサブシステムは、FPGA に読み込まれるアルゴリズムを含む Simulink Real-Time インターフェイス サブシステムです。生成された Simulink Real-Time インターフェイス モデルを使用するか、Simulink Real-Time ドメインのモデルを作成して Simulink Real-Time インターフェイス サブシステムをそのモデルにコピーして、Speedgoat ターゲット マシンで FPGA アルゴリズムをシミュレートします。

Simulink Real-Time インターフェイス サブシステム マスクで、3 つのパラメーターを設定します。

  • デバイス インデックス

  • PCI スロット

  • サンプル時間

ターゲットに単一の FPGA I/O ボードがある場合、デバイス インデックスを既定値のままにします。FPGA I/O ボードが複数の場合、固有のデバイス インデックスを指定します。同じ種類のボードが 2 つ以上ある場合、各ボードの PCI スロットを指定します。

リアルタイム テストでは、信号をログに記録して、シミュレーション データ インスペクターでシミュレーション結果を表示します。

ターゲット マシンへの接続とリアルタイム シミュレーションの実行

これで、Speedgoat リアルタイム ターゲット マシンにモデルを展開できるようになりました。三相 2 レベル電圧源コンバーター モデルは、IO334 上の FPGA に自動的に読み込まれます。

Speedgoat リアルタイム ターゲット マシンに接続します。

tg = slrealtime;
connect(tg);

モデルをビルドしてターゲット マシンにダウンロードします。

model = 'generated_slrt_interface_model';
open_system(model);
modelSTF = getSTFName(tg);
set_param(model,"SystemTargetFile",modelSTF)
set_param(model,'FixedStep','.01');
evalc('slbuild(model)');

モデルの実行を開始します。

load(tg,model);
start(tg);
while strcmp(tg.status,'running')
    pause(10);
end

次に、シミュレーション データ インスペクターでシミュレーション結果を表示できます。

参考

トピック