Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

FPGA ボード上の LED を点滅させるための MATLAB からの IP コアの生成

この例では、MATLAB® HDL ワークフロー アドバイザーを使用して、FPGA ボード上の LED を点滅させるカスタマイズした IP コアを生成する方法を示します。この例では生成された IP コアを ZedBoard ハードウェアに展開しますが、任意の Xilinx® Zynq® プラットフォームまたは MicroBlaze プロセッサを搭載した Xilinx FPGA を使用できます。

はじめに

MATLAB を使用して、アプリケーションの設計、シミュレーション、検証、アルゴリズムを使用した what-if シナリオの実行、パラメーターの最適化を行うことができます。次に、FPGA ボードでのハードウェア実装とソフトウェア実装用にアプリケーション設計を準備し、プログラム可能なロジックで実行する要素と、プロセッサで実行する要素を決定できます。

この例では以下を実行できます。

  1. Zynq ハードウェアとツールを設定します。

  2. ハードウェア実装とソフトウェア実装用に設計を確認します。

  3. HDL Coder を使用して MATLAB アルゴリズムを HDL コードに変換します。

  4. MATLAB HDL ワークフロー アドバイザーを使用して HDL IP コアを生成します。

  5. IP コアを Zynq ハードウェアに展開します。

  6. 付属の MATLAB スクリプトを使用して Zynq ハードウェアのプロトタイプを作成します。

また、この IP コアを他の設計やプロジェクトで使用して、その機能に基づいて強化および構築することもできます。

前提条件

hdlsetuptoolpath('ToolName','Xilinx Vivado','ToolPath','C:\Xilinx\Vivado\2020.2\bin\vivado.bat');
open mlhdlc_ip_core_led_blinking.m
  • MATLAB テスト ベンチのローカル コピーを開いて保存します。

open mlhdlc_ip_core_led_blinking_tb.m

ハードウェア実装とソフトウェア実装用の設計の確認と分割

MATLAB アルゴリズムから IP コアを生成して展開するには、以下の 3 つのコンポーネントが必要です。

  1. ハードウェアで実行される MATLAB 関数。

  2. MATLAB で関数設計を実行する MATLAB テスト ベンチ。

  3. ハードウェア上の展開済みの MATLAB 関数のプロトタイプを作成する MATLAB スクリプト。MATLAB を使用したプロトタイピングはオプションですが、IP コア検証の追加手段が得られます。

設計を効果的に実装するには、以下を行う必要があります。

  • プログラム可能なロジックに適したアルゴリズムの部分と、ARM プロセッサに適した部分を区別する。

  • プログラム可能なロジック用のアルゴリズムの部分を MATLAB 関数にグループ化する。

  • ハードウェアとソフトウェアの分割用の境界として MATLAB 関数を使用する。

  • HDL Coder を使用してこの関数の MATLAB コードをプログラム可能なロジックに実装する。

関数 mlhdlc_ip_core_led_blinking を開いて、どのように分割するかを検討します。

open mlhdlc_ip_core_led_blinking.m

この関数は、FPGA ボード上の LED を点滅させるカウンターをモデル化します。2 つの入力 Blink_frequency および Blink_direction があります。これらの入力により、LED の点滅頻度および方向が決定されます。出力 LED がボード上の LED ハードウェアに接続され、出力 Read_back がカウント値に設定され、プロセッサに読み戻すことができます。

mlhdlc_ip_core_led_blinking_tb テスト ベンチを開いて、関数設計がどのように実行されるのかを調べます。

open mlhdlc_ip_core_led_blinking_tb.m

テスト ベンチは、関数 mlhdlc_ip_core_led_blinking に対する入力条件の範囲を示します。

付属の MATLAB スクリプト matlab_hdlcoder_led_blinking_interface.m および matlab_hdlcoder_led_blinking_setup.m を開きます。

open matlab_hdlcoder_led_blinking_interface.m
open matlab_hdlcoder_led_blinking_setup.m

これらのスクリプトは、AXI でアクセス可能なレジスタに書き込むことで、生成されて展開された IP コアを設定し、そのインターフェイスとなります。

MATLAB HDL Coder プロジェクトの作成

MATLAB コマンド ウィンドウで次のコマンドを入力して、HDL Coder プロジェクトを作成します。

coder -hdlcoder -new blinkingLEDmatlab

MATLAB HDL Coder プロジェクトの作成と入力に関する包括的なチュートリアルについては、MATLAB から HDL へのワークフロー入門を参照してください。

あるいは、[アプリ] タブで、[HDL Coder] をクリックします。[HDL コード生成] ペインで以下のようにします。

  1. [MATLAB 関数] をローカルに保存されている MATLAB 関数 mlhdlc_ip_core_led_blinking に設定します。

  2. [MATLAB テスト ベンチ] をローカルに保存されている MATLAB テスト ベンチ mlhdlc_ip_core_led_blinking_tb に設定します。

  3. [MATLAB 関数] セクションで [型の自動定義] をクリックして入力の型を自動的に定義します。

  4. [ワークフロー アドバイザー] をクリックします。

[ワークフロー アドバイザー] を使用して、固定小数点変換を実行します。

  1. [固定小数点の変換] タスクで [詳細設定] をクリックし、[シミュレーションの最小/最大値に対する安全余裕 (%)] が 0 になっていることを確認します。

  2. 下のペインの [変数] タブの [推奨された型] 列で、「numerictype(0, 24, 0)」と入力することで、変数 freqCounter の推奨された型を符号なし 24 ビット整数に設定します。

  3. [固定小数点の変換] タスクを右クリックして [このタスクを実行] を選択します。

固定小数点変換の概要については、浮動小数点から固定小数点への変換を参照してください。

コード生成ターゲットの定義

MATLAB HDL ワークフロー アドバイザーを使用して、共有可能および再利用可能な IP コアを生成できます。HDL Coder と Xilinx Vivado IDE の統合により、FPGA 設計への生成された IP コアの組み込みが容易になります。

特定のハードウェア プラットフォーム用の IP コアを生成する方法の概要については、FPGA および SoC ハードウェアをターゲットにする方法の概要を参照してください。

MATLAB HDL ワークフロー アドバイザーを使用して IP コアの生成を実行します。

  1. MATLAB HDL ワークフロー アドバイザーで [コード生成ターゲットを選択] をクリックします。

  2. [ワークフロー]IP Core Generation に設定します。

プラットフォームの指定

生成された IP コアをリファレンス設計に統合するために、[プラットフォーム] をターゲット プラットフォームに設定します。

  • Generic Xilinx Platform: これは、汎用 Xilinx IP コアを生成する、ボードに依存しないオプションです。ただし、IP コアを既存の Xilinx Vivado プロジェクトに手動で統合する必要があります。

  • ボード固有のプラットフォーム: これらのオプションは Xilinx ボードに固有であり、IP コアを事前定義のリファレンス設計に統合します。この統合では、組み込みシステム ツールとして IP インテグレーターを搭載した Xilinx Vivado が使用されます。

この例では、ZedBoard プラットフォームをターゲットにします。以下のパラメーターを設定します。

  1. [プラットフォーム]ZedBoard に設定します。

  2. [合成ツール]Xilinx Vivado に設定します。

  3. [ターゲット周波数 (MHz)]50 に設定します。

  4. [IP コア設定][リファレンス設計]Default system に設定します。

mlhdlc_select_target_device_72dpi.png

ターゲット インターフェイスの構成

次に、[ターゲット インターフェイスを設定] サブタスクを使用して、MATLAB 設計関数内の各入出力を IP コアのターゲット インターフェイスのいずれかにマッピングします。

この例では、入力 Blink_frequency Blink_direction を出力 Read_back と共に AXI4-Lite インターフェイスにマッピングします。HDL Coder はそれらに対して AXI でアクセス可能なレジスタを生成します。LED 出力を、ZedBoard の LED ハードウェアに接続された外部インターフェイス LEDs General Purpose [0:7] にマッピングします。

  1. 下のペインの [端子] タブの [ターゲット プラットフォーム インターフェイス] 列で、変数 Blink_frequencyBlink_direction、および Read_back のターゲット プラットフォーム インターフェイスを AXI4-Lite インターフェイスに設定します。

  2. 下のペインの [端子] タブの [ターゲット プラットフォーム インターフェイス] 列で、変数 LED のターゲット プラットフォーム インターフェイスを LEDs General Purpose [0:7] 外部インターフェイスに設定します。

  3. [ターゲット インターフェイスを設定] サブタスクを右クリックし、[選択したタスクまで実行] を選択します。

mlhdlc_set_target_interface_72dpi.png

IP コアおよび IP コア レポートを生成するには、[HDL コード生成] タスクを右クリックして [このタスクを実行] を選択します。

mlhdlc_generate_hdl_code_72dpi.png

生成された IP コアと Xilinx Vivado 環境の統合

IP コアを生成した後に、MATLAB HDL ワークフロー アドバイザー内で、その IP コアをリファレンス設計と統合してから、ビットストリームを合成して FPGA にダウンロードします。

1. [組み込みシステムの統合] タスクで [プロジェクトを作成] サブタスクを右クリックし、[このタスクを実行] を選択します。IP インテグレーター組み込みシステム ツールを利用して IP コアを事前定義のリファレンス設計に統合する Xilinx Vivado プロジェクトが生成されます。ダイアログ ボックスに、Vivado でプロジェクトを開くためのリンクが含まれています。

mlhdlc_create_ip_project_pt2_72dpi.png

2.[組み込みシステムのビルド] サブタスクで [ビルド プロセスを外部で実行] を選択してから、[実行] をクリックします。Xilinx 合成ツールは MATLAB の外部の別プロセスとして実行されます。合成ツールが完了するまで待機します。

mlhdlc_build_embedded_system_72dpi.png

3.ビットストリームの生成後、[ターゲット デバイスをプログラム] サブタスクを右クリックし、[このタスクを実行] を選択して ZedBoard をプログラムします。

mlhdlc_program_target_device_72dpi.png

4.FPGA ハードウェアをプログラムした後に、ZedBoard で LED の点滅が開始します。

ハードウェアでの IP コアのプロトタイピングと検証

生成された IP コアを ZedBoard ハードウェアで検証するには、付属の手書きの MATLAB ファイル matlab_hdlcoder_led_blinking_interface.m および matlab_hdlcoder_led_blinking_setup.m を使用します。これらのファイルには、ハードウェアに接続して IP コアを操作する MATLAB コマンドが含まれています。

インターフェイス ファイルおよびセットアップ ファイルを開いて、ローカル コピーを保存します。

open matlab_hdlcoder_led_blinking_interface.m
open matlab_hdlcoder_led_blinking_setup.m

matlab_hdlcoder_led_blinking_interface.m スクリプトは FPGA ハードウェアへの接続を確立し、関数 matlab_hdlcoder_led_blinking_setup を使用してデータの読み書きができるようにします。スクリプトはそのために、[ターゲット インターフェイスを設定] サブタスクからのマッピングされた端子とインターフェイスを使用して fpga ハードウェア オブジェクトを構成します。

この関数を独自のスクリプトで再利用して、同じ構成を複製できます。たとえば、matlab_hdlcoder_led_blinking_interface.m スクリプトで次の行のコメントを解除し、LED の点滅頻度を変更します。

% writePort(testFPGA, "Blink_frequency_1", 0);

変更したスクリプトを実行し、LED の点滅頻度がハードウェアで変更されるのを確認します。また、matlab_hdlcoder_led_blinking_interface.m スクリプトで次の行のコメントを解除してからスクリプトを実行し、MATLAB ワークスペース内の変数 data_Read_back の変化を確認します。

% data_Read_back = readPort(testFPGA, "Read_back");

関連するトピック