Main Content

Xilinx Zynq プラットフォームをターゲットにする方法の概要

この例では、ハードウェア ソフトウェア協調設計ワークフローを使用して Xilinx® Zynq® ZC702 評価キットにおいてさまざまな周波数で LED を点滅させる方法を示します。

はじめに

この例では、HDL Coder™ を使用して Xilinx Zynq ZC702 評価キットで LED を点滅させるカスタム HDL IP コアを生成する手順について順を追って説明します。また、Embedded Coder® を使用して、ARM® プロセッサで実行して LED 点滅周波数を制御する C コードを生成する方法を示します。

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

この例で示されているガイド付きワークフローを使用することで、HDL Coder を使用してプログラム可能なロジック用の HDL コードを自動生成し、Embedded Coder を使用して ARM 用の C コードを生成し、Xilinx Zynq プラットフォームに設計を実装します。

このワークフローでは、次の手順を実行します。

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

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

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

  4. IP コアを Xilinx Vivado プロジェクトに統合し、Zynq ハードウェアをプログラムします。

  5. ソフトウェア インターフェイス モデルを生成します。

  6. ソフトウェア インターフェイス モデルから C コードを生成し、ARM Cortex-A9 プロセッサでそのコードを実行します。

  7. パラメーターを調整し、エクスターナル モードを使用して Zynq ハードウェアから結果を取得します。

詳細については、その他の高度な例に加え、HDL Coder および Embedded Coder のドキュメンテーションを参照してください。

要件

  1. HDL の言語サポートおよびサポートされるサードパーティ製ツールとハードウェアにリストされている、サポートされているバージョンの Xilinx Vivado Design Suite

  2. Xilinx Zynq-7000 SoC ZC702 評価キット

  3. HDL Coder Support Package for Xilinx Zynq Platform

  4. Embedded Coder Support Package for Xilinx Zynq Platform

Zynq ハードウェアとツールの設定

1. 次の図に示されているように、Xilinx Zynq ZC702 評価キットを設定します。ZC702 ハードウェア セットアップの詳細については、このドキュメンテーションを参照してください。

2.Linux を SD カードから起動できるように SW16 スイッチが次の図に示されているように設定されていることを確認します。

3.Digilent USB-JTAG インターフェイス (U23) を使用できるように SW10 スイッチ (JTAG チェーン入力選択 2 位置 DIP スイッチ) が次の図に示されているように設定されていることを確認します。位置 1 はオフ、位置 2 はオンです。

4.マイクロ USB ケーブルを使用してコンピューターを USB UART コネクタに接続します。USB デバイス ドライバー (Silicon Labs CP210x USB to UART Bridge 用のものなど) が正しくインストールされていることを確認します。インストールされていない場合は、ドライバーをオンラインで検索してインストールします。

5.イーサネット ケーブルを使用してコンピューターと Zynq ボードを接続します。

6.まだインストールしていない場合は、HDL Coder/Embedded Coder Support Packages for Xilinx Zynq Platform をインストールします。インストーラーを開始するには、MATLAB ツールストリップに移動して [アドオン][ハードウェア サポート パッケージの入手] をクリックします。詳細については、Install Support for Xilinx Zynq Platform (Embedded Coder)を参照してください。

7.Embedded Coder Support Package for Xilinx Zynq Platform で提供される SD カード イメージを使用していることを確認します。SD カード イメージを更新する必要がある場合は、Install Support for Xilinx Zynq Platform (Embedded Coder)の「Hardware Setup」セクションを参照してください。

8.MATLAB コマンド ウィンドウで次のコマンドを入力して Zynq ハードウェア接続を設定します。

h = zynq

関数 zynq は COM ポートを介してハードウェアにログインし、ifconfig コマンドを実行してボードの IP アドレスを取得します。この関数はイーサネット接続のテストも行います。

9. オプションで、PuTTY™ などのプログラムで次の構成を使用してシリアル接続をテストできます。ボー レート: 115200、データ ビット: 8、ストップ ビット: 1、パリティ: None、フロー制御: None。Zynq ボードの電源をオフ/オンすると、シリアル コンソールで Linux 起動ログを確認できます。関数 zynq を再度使用する前に、このシリアル接続を閉じる必要があります。

10. MATLAB コマンド ウィンドウで次のコマンドを使用して Xilinx Vivado 合成ツール パスを設定します。コマンドを実行するときに独自の Vivado インストール パスを使用します。

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

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

Zynq ハードウェア ソフトウェア協調設計ワークフローの最初の手順では、プログラム可能なロジックで実装する設計の部分と ARM プロセッサで実行する部分を決定します。

プログラム可能なロジックで実装するすべてのブロックを Atomic サブシステムにグループ化します。この Atomic サブシステムは、ハードウェアとソフトウェアの分割の境界です。このサブシステム内のすべてのブロックはプログラム可能なロジックで実装され、このサブシステムの外にあるすべてのブロックは ARM プロセッサで実行されます。

この例では、サブシステム [led_counter] はハードウェア サブシステムです。これは、FPGA ボード上の LED を点滅させるカウンターをモデル化します。2 つの入力端子 [Blink_frequency] および [Blink_direction] は LED の点滅頻度および方向を決定する制御端子です。サブシステム [led_counter] の外側にあるすべてのブロックはソフトウェア実装用です。

Simulink で、[Slider Gain] ブロックまたは [Manual Switch] ブロックを使用してハードウェア サブシステムの入力値を調整できます。組み込みソフトウェアでは、これは AXI インターフェイスのアクセス可能なレジスタに書き込むことで、ARM プロセッサが生成された IP コアを制御することを意味します。ハードウェア サブシステムの出力ポート [LED] は、LED ハードウェアに接続します。出力端子 [Read_Back] を使用してデータを読み取ってプロセッサに戻すことができます。

open_system('hdlcoder_led_blinking');

HDL IP コアの生成

HDL Coder を使用して Simulink モデルから再利用可能な IP コア モジュールを生成できます。生成された IP コアは、FPGA デバイス上の組み込みプロセッサに接続するように設計されています。HDL Coder で、Simulink ブロックから HDL コードが生成され、また IP コアを組み込みプロセッサに接続する AXI インターフェイス ロジック用の HDL コードも生成されます。HDL Coder により、生成されたファイルが指定したフォルダーにパッケージ化されます。次に、生成された IP コアを Xilinx Vivado 環境の大規模な FPGA 組み込み設計と統合できます。

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

IP コア生成用のモデルの準備

hdlcoder_led_blinking/led_counter サブシステムから IP コアを生成するには、コンフィギュレーション パラメーターを使用してモデルを準備し、IP コア エディターを使用して設計を構成し、Simulink ツールストリップの [HDL コード] タブを使用して IP コアを生成します。

  1. [アプリ] タブで、[HDL Coder] をクリックします。[HDL コード] タブの [出力] セクションで、ドロップダウン ボタンを [IP コア] に設定します。

  2. この例のテスト対象デバイス (DUT) である led_counter サブシステムを選択します。[次のコード] がこのサブシステムに設定されていることを確認します。選択内容を記憶しておくために、このオプションは固定できます。hdlcoder_ip_core_tutorial_zynq_IPCoreToolstrip.png

  3. [設定] ボタンをクリックして、[コンフィギュレーション パラメーター] ダイアログ ボックスの [HDL コード生成]、[ターゲット] タブを開きます。

  4. [ターゲット プラットフォーム] パラメーターを Xilinx Zynq ZC702 evaluation kit に設定します。このオプションが表示されていない場合は、[Get more] を選択してサポート パッケージ インストーラーを開きます。サポート パッケージ インストーラーで、Xilinx Zynq プラットフォームを選択し、手順に従ってインストールを完了します。[合成ツール]Xilinx Vivado に設定されていることを確認します。

  5. [リファレンス設計] パラメーターが Default system に設定されていることを確認します。

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

  7. [OK] をクリックして、更新した設定を保存します。

hdlcoder_ip_core_tutorial_zynq_config_params.png

設計およびターゲット インターフェイスの構成

DUT 端子を IP コア ターゲット ハードウェアにマッピングし、DUT レベルの IP コア オプションを設定することで、ターゲット ハードウェアにマッピングするように設計を構成します。この例では、入力端子 [Blink_frequency] および [Blink_direction] が AXI4-Lite インターフェイスにマッピングされています。そのため、HDL Coder はそれらに対して AXI インターフェイスでアクセス可能なレジスタを生成します。出力端子 [LED] は、Zynq ボード上の LED ハードウェアに接続する外部インターフェイス LEDs General Purpose [0:7] にマッピングされています。

  1. Simulink で、[HDL コード] タブの [ターゲット インターフェイス] をクリックして IP コア エディターを開きます。

  2. [Interface Mapping] タブを選択して、各 DUT 端子を IP コアのターゲット インターフェイスのいずれかにマッピングします。生成された設計は、展開するとハードウェア システムの残りの部分と通信できます。マッピング テーブルが表示されない場合は、IP コア設定を再読み込みする code_mappings_update_icon.png ボタンをクリックし、モデルをコンパイルして DUT 端子およびそのデータ型を再び取り込みます。

  3. DUT 端子 [Blink_frequency][Blink_direction]、および [Read_back] について、[インターフェイス] 列内のセルを AXI4-Lite に設定します。

  4. [LED] 出力端子について、[インターフェイス] 列内のセルを LEDs General Purpose [0:7] に設定します。hdlcoder_ip_core_tutorial_zynq_IP_core_editor.png

  5. IP コア設定を検証する code_mappings_validate_icon.png ボタンをクリックして、設定を検証します。

必要に応じて、IP コア エディターで以下を行うことによって、ターゲット ハードウェアの DUT レベルの IP コア設定を調整できます。

  • [一般] タブを使用して、IP コアの名前や IP コア レポートを生成するかどうかなど、最上位の設定を構成する。

  • [Clock Settings] タブを使用してクロック関連の設定を構成する。

  • [Interface Settings] タブを使用して、レジスタ インターフェイスや FPGA Data Capture のプロパティなど、インターフェイス関連の設定を構成する。

IP コアの生成

設計の IP コア設定およびマッピングを構成した後には、IP コアを生成できます。Simulink ツールストリップの [HDL コード] タブで [IP コアを生成] をクリックします。カスタム IP コアを生成すると、IP コア ファイルが現在のディレクトリ内の ipcore フォルダーに配置されます。ipcore フォルダーを他の生成されるすべてのファイルと共に保存する最上位プロジェクト フォルダーを指定するには、[コンフィギュレーション パラメーター] ダイアログ ボックスで [HDL コード生成]、[ターゲット] タブ内の [プロジェクト フォルダー] パラメーターを使用します。[プロジェクト フォルダー] パラメーターが空の場合、HDL Coder では、生成されたファイルは現在のディレクトリに保存されます。

IP コアを生成すると、コード生成レポートも生成されます。[コード生成レポート] ウィンドウの左側のペインで、[IP コアの生成レポート] をクリックします。このレポートには、生成されたカスタム IP コアの動作と内容が記載されています。

IP コアと Xilinx Vivado 環境の統合

次に、プロジェクトを作成し、FPGA ビットストリームを生成し、ビットストリームを Zynq ハードウェアにダウンロードすることで、生成された IP コアを組み込みシステム リファレンス設計に挿入します。

リファレンス設計は事前定義の Xilinx Vivado プロジェクトです。このプロジェクトには、カスタム IP コアと組み込みソフトウェアを除く、Xilinx ソフトウェアで設計を Zynq プラットフォームに展開するために必要なすべての要素が含まれています。

IP コア プロジェクトの作成

IP コアに関連付けられているファイルを整理して維持する Vivado™ プロジェクトを作成して、生成された IP コアを Xilinx プラットフォームに統合します。Vivado プロジェクトを作成するには、Simulink ツールストリップの [HDL コード] タブで [ビットストリームの作成][IP コア プロジェクトの作成] を選択します。HDL Coder により、IP インテグレーター組み込み設計が生成され、診断ビューアーでその設計へのリンクが示されます。

simulink_interface_embedded_system_integration.png

展開設定の構成

次に、ビットストリームの作成の設定を構成します。Simulink ツールストリップの [HDL コード] タブで [ビットストリームの作成]、[展開の設定] を選択します。[展開の設定] ウィンドウの [ビットストリームの作成] セクションで [ビルド プロセスを外部で実行] を選択して、現在の MATLAB セッションではなく別のウィンドウで Xilinx 合成ツールを実行します。

simulink_interface_build_bitstream.png

[展開の設定] ウィンドウの [ターゲット デバイスをプログラム] セクションで以下のようにします。

  • [プログラミング メソッド]Download に設定して、ボードの電源をオフ/オンしたときに、ビットストリームをターゲット Zynq ボードの SD カードにダウンロードして設計が読み込まれるようにします。

  • [IP アドレス] をターゲット ボードの IP アドレスに設定します。

  • [SSH ユーザー名] および [SSH パスワード] をターゲット ボードの構成に設定します。

simulink_interface_program_target_device_settings.png

ビットストリームの生成およびターゲット デバイスのプログラム

ビットストリーム ファイルを生成するには、Simulink ツールストリップの [HDL コード] タブで [ビットストリームの作成] をクリックし、合成ツールが外部ウィンドウで実行されるまで待機します。

ビットストリームをダウンロードするには、Simulink ツールストリップの [HDL コード] タブで [ビットストリームの作成]、[ターゲット デバイスをプログラム] を選択します。

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

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

MATLAB を使用してホスト インターフェイス スクリプトを生成して、生成された IP コアをハードウェアで検証します。このスクリプトには、ハードウェアに接続して IP コアを操作する MATLAB コマンドが含まれています。ホスト インターフェイス スクリプト ファイルを生成するには、Simulink ツールストリップの [HDL コード] タブで [ホスト インターフェイス スクリプト]、[ホスト インターフェイス スクリプト] を選択します。

generate_host_interface_script.png

Simulink 診断ビューアーに、生成されたホスト インターフェイス スクリプト ファイルへのリンクが表示されます。

2 つの MATLAB ファイルが現在のフォルダー内に生成されます。これらのファイルにより、生成された IP コアのプロトタイプを MATLAB から直接作成できます。

generated_host_interface_script_files.png

Simulink 診断ビューアーのリンクをクリックして、生成されたインターフェイス スクリプト ファイルを開きます。このファイルにより、データを読み書きするための FPGA ハードウェアへの接続が作成され、[ターゲット インターフェイス] テーブルでマッピングされたのと同じ端子とインターフェイスを使用して fpga ハードウェア オブジェクトが構成されます。この関数を独自のスクリプトで再利用して、この構成を再作成できます。たとえば、関数 gs_hdlcoder_led_blinking_interface.m の 33 行目のコメントを解除し、LED の点滅頻度を変更します。変更したスクリプトを実行し、LED の点滅頻度がハードウェアで変更されるのを確認します。また、関数 gs_hdlcoder_led_blinking_interface.m の 35 行目のコメントを解除してデータ値を読み戻し、値の変化を確認します。

ソフトウェア インターフェイス モデルを使用したプロセッサへの展開

ARM プロセッサの設計の一部をターゲットにするには、ソフトウェア インターフェイス モデルを生成します。ソフトウェア インターフェイス モデルには、設計内のソフトウェアで実行される部分が含まれます。これには HDL サブシステムの外側にあるすべてのブロックが含まれており、HDL サブシステムは AXI ドライバー ブロックに置き換えられます。Embedded Coder ライセンスを保有している場合は、ソフトウェア インターフェイス モデルから組み込みコードを自動的に生成してビルドし、ARM プロセッサ上の Linux で実行可能ファイルを実行できます。生成される組み込みソフトウェアには、AXI ドライバー ブロックから生成される、HDL IP コアを制御する AXI ドライバー コードが含まれています。ソフトウェア インターフェイス モデルは、IP コア生成および IP コア統合プロセスのどの段階でも生成できます。

ソフトウェア インターフェイス モデルを生成するには、Simulink ツールストリップの [HDL コード] タブで [ビットストリームの作成]、[ソフトウェア インターフェイス モデル] を選択します。Simulink 診断ビューアーに、生成されたソフトウェア インターフェイス モデルへのリンクが表示されます。

link_to_software_interface_model.png

生成されたソフトウェア インターフェイス モデルで、led_counter サブシステムは、ARM プロセッサと FPGA 間のインターフェイス ロジックを生成する AXI ドライバー ブロックに置き換えられます。

Zynq ZC702 ハードウェアでのソフトウェア インターフェイス モデルの実行

次に、生成されたソフトウェア インターフェイス モデルを構成し、組み込み C コードを生成し、エクスターナル モードを使用して Zynq ハードウェア上の ARM プロセッサでモデルを実行します。

アルゴリズムのプロトタイピングおよび開発を行う場合は、アルゴリズムをハードウェアで実行しながらアルゴリズムを監視および調整すると便利です。エクスターナル モードを使用して、アルゴリズムを Zynq ハードウェアの ARM プロセッサに展開してから、イーサネット接続を介してホスト コンピューター上の Simulink モデルにアルゴリズムをリンクできます。

Simulink モデルは、ハードウェア上で実行されているアルゴリズムを調整および監視します。ARM プロセッサは AXI インターフェイスを介して HDL IP コアに接続されているため、エクスターナル モードを使用してパラメーターを調整し、FPGA からデータを取得できます。

  1. 生成されたモデルで、[ハードウェア] タブの [ハードウェア設定] をクリックして、[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  2. [ソルバー] ペインで [終了時間]inf に設定します。[OK] をクリックします。

  3. [ハードウェア] タブで [監視と調整] をクリックして、エクスターナル モードを使用して Zynq ZC702 ハードウェア内の ARM プロセッサでモデルを実行します。Embedded Coder は、モデルを構築し、ARM 実行可能ファイルを Zynq ZC702 ハードウェアにダウンロードして、これを実行し、モデルをこの実行可能ファイルに接続します。

  4. Slider Gain ブロックをダブルクリックします。スライダーを変更し、Zynq ZC702 ハードウェアで点滅している LED アレイの頻度の変化を監視します。Manual Switch ブロックをダブルクリックして、点滅している LED の方向を切り替えます。

  5. 出力端子 [Read_back] に接続されている Scope ブロックをダブルクリックします。Scope ブロックは、FPGA IP コアの出力データを取得します。

  6. モデル パラメーターの変更が終わったら、ツールストリップの [停止] ボタンをクリックし、システム コマンド ウィンドウを閉じます。

関連するトピック