Main Content

Zynq ワークフロー用のカスタムのボードとリファレンス設計の定義

この例では、Zynq® ワークフローでカスタムのボードとリファレンス設計を定義して登録する方法を示します。

はじめに

Zynq ワークフローの HDL ワークフロー アドバイザーで、Digilent® Zybo Z7-10 Zynq 開発ボードとカスタム リファレンス設計を登録できます。

この例では Zybo Z7-10 Zynq ボードを使用していますが、他の Zynq プラットフォーム用のカスタム ボードやカスタム リファレンス設計も定義して登録できます。

要件

メモ: この例では、Digilent® Zybo Z7-10 Zynq-7000 ARM/FPGA SoC トレーナー ボードを使用します。この例は、Zybo Z7-20 のカスタムのボードとリファレンス設計を作成する際の基準として使用できます。

Zybo ボードの設定

Zybo ボードの機能について理解するには、Zybo Z7-10 ボードのリファレンス マニュアルを参照してください。

1. Zybo Z7-10 ボードを設定します。

2.USB COM ポートのデバイス ドライバーがコンピューターに適切にインストールされていることを確認します。

3.JP5 ブート モード ジャンパーで、コネクタ J4 に接続された microSD カードからの Zynq Linux イメージの読み込みを有効にするように構成します。

4.JP7 電源選択ジャンパーで、電源として USB を使用するように構成します。

5.Zybo ボード上の共有 UART/JTAG USB ポートをコンピューターに接続します。

6.イーサネット ケーブルを使用して Zybo Z7-10 ボードをコンピューターに接続します。Zybo の既定の IP アドレスは 192.168.1.110 です。

7.Zybo Zynq Linux イメージをダウンロードし、zip アーカイブを展開して、内容を microSD カードにコピーします。microSD カードをコネクタ J4 に挿入します。MathWorks Buildroot を使用したカスタム Zynq ボードに対する Xilinx Zynq Linux イメージの作成に従って Linux イメージをビルドすることもできます。

8.次のコマンドを使用して Xilinx Vivado ツール パスを設定します。

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

コマンドを実行するときに独自の Xilinx Vivado インストール パスを使用します。

9. 次のコマンドを使用して Zynq ハードウェア接続を設定します。

h = zynq();

Xilinx Vivado ツールでの Zybo ボードの登録

既定では、Zybo ボードのファイルは Vivado 2020.2 ツールで事前にインストールされません。それらのボード ファイルを Xilinx のボード ストア GitHub からダウンロードします。zip の内容を解凍し、Vivado のインストール フォルダーに移動します。Zybo ボードの更新されたファイルを Xilinx Vivado ツールにコピーします。

C:\Xilinx\Vivado\2020.2\data\boards\board_files

ボード固有の Vivado プロジェクトを作成するときの開発ボードのリストに Zybo ボードのパーツが追加されます。

メモ: 上記のリンクが使用できない場合は、Digilent の Web サイトから Zybo ボードのファイルを入手してください。

Xilinx Vivado を使用したカスタム リファレンス設計の作成とエクスポート

リファレンス設計は SoC 設計の構造全体を取得したもので、さまざまなコンポーネントやそれらの相互接続を定義します。HDL Coder の SoC ワークフローで生成される IP コアがリファレンス設計と統合され、SoC ボードのプログラミングに使用されます。次の図は、リファレンス設計、HDL IP コア、および SoC ボードの関係を示しています。

Xilinx Vivado IP Integrator 環境を使用して簡単なリファレンス設計を作成してエクスポートするには、次の手順に従います。IP Integrator ツールの詳細については、Xilinx のドキュメンテーションを参照してください。

1. ボードのパーツ Zybo Z7-10 を既定のボードとして使用して空の Xilinx Vivado RTL プロジェクトを作成します。

2.空のブロック設計を作成し、ZYNQ7 Processing System IP ブロックを追加します。ブロック オートメーションを実行して Zybo Z7-10 のボード プリセットを設定します。これには、ZYNQ7 プロセッシング システム IP の MIO コンフィギュレーション、クロック コンフィギュレーション、および DDR コンフィギュレーションに関連するパラメーターが含まれます。

ボード プリセットを適用したため、Zybo ボード定義に従って MIO の周辺装置がマークされます。

3.ブロック設計を完了します。

ブロック設計には HDL IP コアに関する情報は含まれないことに注意してください。

4.次の図に示すように、完成したブロック設計を Tcl スクリプト design_led.tcl としてエクスポートします。

エクスポートした Tcl スクリプト (design_led.tcl) でカスタム リファレンス設計が構成されます。この Tcl スクリプトを HDL Coder の SoC ワークフローで使用して、ブロック設計を再作成し、生成された HDL IP コアを Xilinx Vivado プロジェクトのブロック設計と統合します。

HDL ワークフロー アドバイザーでの Zybo Z7-10 ボードの登録

HDL ワークフロー アドバイザーで Zybo Z7-10 ボードを登録します。

1. ボード登録ファイルを hdlcoder_board_customization.m という名前で作成し、MATLAB パスに追加します。

ボード登録ファイルにはボート プラグインのリストが含まれます。ボード プラグインは、ボード定義ファイルとボードに関連付けられたすべてのリファレンス設計プラグインを格納する MATLAB パッケージ フォルダーです。

次のコードは、HDL ワークフロー アドバイザーで Zybo ボードを登録するためのボード プラグイン ZyboZ710Registration を含むボード登録ファイルの内容を記述したものです。

function r = hdlcoder_board_customization
% Board plugin registration file
% 1. Any registration file with this name on MATLAB path will be picked up
% 2. Registration file returns a cell array pointing to the location of
%    the board plugins
% 3. Board plugin must be a package folder accessible from MATLAB path,
%    and contains a board definition file
r = { ...
      'ZyboZ710Registration.plugin_board', ...
     };
end

2.ボード定義ファイルを作成します。

ボード定義ファイルには SoC ボードに関する情報が格納されます。

次のコードは、ボード プラグイン ZyboZ710Registration 内にある Zybo ボード定義ファイル plugin_board.m の内容を記述したものです。

FPGA I/O ピンの位置 ('FPGAPin') と規格 ('IOSTANDARD') に関する情報は、Digilent の Web サイトの Zybo マスター制約ファイルから取得されます。

プロパティ BoardName で、HDL ワークフロー アドバイザーでの Zybo Z7-10 ボードの名前を ZYBO Z7-10 と定義しています。

function hB = plugin_board()
% Board definition
% Construct board object
hB = hdlcoder.Board;
hB.BoardName    = 'ZYBO Z7-10';
% FPGA device information
hB.FPGAVendor   = 'Xilinx';
hB.FPGAFamily   = 'Zynq';
hB.FPGADevice   = 'xc7z010';
hB.FPGAPackage  = 'clg400';
hB.FPGASpeed    = '-1';
% Tool information
hB.SupportedTool = {'Xilinx Vivado'};
% FPGA JTAG chain position
hB.JTAGChainPosition = 2;
%% Add interfaces
% Standard "External Port" interface
hB.addExternalPortInterface( ...
    'IOPadConstraint', {'IOSTANDARD = LVCMOS33'});
% Custom board external I/O interface
hB.addExternalIOInterface( ...
  'InterfaceID',    'LEDs General Purpose', ...
  'InterfaceType',  'OUT', ...
  'PortName',       'LEDs', ...
  'PortWidth',      4, ...
  'FPGAPin',        {'M14', 'M15', 'G14', 'D18'}, ...
  'IOPadConstraint', {'IOSTANDARD = LVCMOS33'});
hB.addExternalIOInterface( ...
   'InterfaceID',    'Push Buttons', ...
   'InterfaceType',  'IN', ...
   'PortName',       'PushButtons', ...
   'PortWidth',      4, ...
   'FPGAPin',        {'K18', 'P16', 'K19', 'Y16'}, ...
   'IOPadConstraint', {'IOSTANDARD = LVCMOS33'});
hB.addExternalIOInterface( ...
   'InterfaceID',    'Slide switches ', ...
   'InterfaceType',  'IN', ...
   'PortName',       'SlideSwitches', ...
   'PortWidth',      4, ...
   'FPGAPin',        {'G15', 'P15', 'W13', 'T16'}, ...
   'IOPadConstraint', {'IOSTANDARD = LVCMOS33'});

HDL ワークフロー アドバイザーでのカスタム リファレンス設計の登録

HDL ワークフロー アドバイザーでカスタム リファレンス設計を登録します。

1. SoC ボードに関連付けられたリファレンス設計プラグインのリストを格納するリファレンス設計登録ファイルを hdlcoder_ref_design_customization.m という名前で作成します。

リファレンス設計プラグインは、リファレンス設計定義ファイルと SoC 設計プロジェクトに関連付けられたすべてのファイルを格納する MATLAB パッケージ フォルダーです。リファレンス設計登録ファイルには、関連付けられたボードの名前も含める必要があります。

次のコードは、ボード ZYBO Z7-10 に関連付けられたリファレンス設計プラグイン ZyboZ710Registration.Vivado2020_2 を含む Zybo リファレンス設計登録ファイルの内容を記述したものです。

function [rd, boardName] = hdlcoder_ref_design_customization
% Reference design plugin registration file
% 1. The registration file with this name inside of a board plugin folder
%    will be picked up
% 2. Any registration file with this name on MATLAB path will also be picked up
% 3. The registration file returns a cell array pointing to the location of
%    the reference design plugins
% 4. The registration file also returns its associated board name
% 5. Reference design plugin must be a package folder accessible from
%    MATLAB path, and contains a reference design definition file
rd = {'ZyboZ710Registration.Vivado2020_2.plugin_rd', ...
     };
boardName = 'ZYBO Z7-10';
end

2.リファレンス設計定義ファイルを作成します。

リファレンス設計定義ファイルは、カスタム リファレンス設計と HDL Coder の SoC ワークフローで生成される HDL IP コアの間のインターフェイスを定義します。

次のコードは、リファレンス設計プラグイン ZyboZ710Registration.Vivado2020_2 内にあるボード ZYBO Z7-10 に関連付けられた Zybo Z7-10 リファレンス設計定義ファイル plugin_rd.m の内容を記述したものです。プロパティ ReferenceDesignName で、HDL ワークフロー アドバイザーでのリファレンス設計の名前を Demo system と定義しています。

function hRD = plugin_rd()
% Reference design definition
% Construct reference design object
hRD = hdlcoder.ReferenceDesign('SynthesisTool', 'Xilinx Vivado');
hRD.ReferenceDesignName = 'Demo system';
hRD.BoardName = 'ZYBO Z7-10';
% Tool information
hRD.SupportedToolVersion = {'2020.2'};
% add custom Vivado design
hRD.addCustomVivadoDesign( ...
    'CustomBlockDesignTcl', 'design_led.tcl', ...
    'VivadoBoardPart','digilentinc.com:zybo-z7-10:part0:1.0');
%% Add interfaces
% add clock interface
hRD.addClockInterface( ...
  'ClockConnection',   'core_clkwiz/clk_out1', ...
  'ResetConnection',   'sys_core_rstgen/peripheral_aresetn');
% add AXI4 and AXI4-Lite slave interfaces
hRD.addAXI4SlaveInterface( ...
    'InterfaceConnection', 'axi_cpu_interconnect/M00_AXI', ...
    'BaseAddress',         '0x40010000', ...
    'MasterAddressSpace',  'sys_cpu/Data');
hRD.DeviceTreeName = 'devicetree_axilite.dtb';

リファレンス設計プラグインには、SoC 設計プロジェクト ファイルも含める必要があります。

Zybo リファレンス設計プラグイン フォルダー ZyboZ710Registration.Vivado2020_2 に、前に Xilinx Vivado プロジェクトからエクスポートした Tcl スクリプト design_led.tcl を含める必要があります。Zybo リファレンス設計定義ファイル plugin_rd.m で、SoC 設計プロジェクト ファイルを次のステートメントで識別します。

hRD.addCustomVivadoDesign('CustomBlockDesignTcl', 'design_led.tcl');

さらに、plugin_rd.m で、カスタム リファレンス設計と HDL IP コアの間のインターフェイス接続を次のステートメントで定義します。

hRD.addClockInterface( ...
  'ClockConnection',   'core_clkwiz/clk_out1', ...
  'ResetConnection',   'sys_core_rstgen/peripheral_aresetn');
hRD.addAXI4SlaveInterface( ...
    'InterfaceConnection', 'axi_cpu_interconnect/M00_AXI', ...
    'BaseAddress',         '0x40010000', ...
    'MasterAddressSpace',  'sys_cpu/Data');

メモ: AXI4 インターフェイスの 'BaseAddress' は、'MasterAddressSpace' にある有効なアドレスでなければなりません。カスタム リファレンス設計に含まれる他のアドレスベースの周辺装置と競合するアドレスは使用できません。

Zybo ボードの SoC ワークフローの実行

カスタムのボードとリファレンス設計の登録システムを使用して、Zybo Z7-10 ボード上の LED を点滅させる HDL IP コアを生成します。使用する必要なファイルは ZYBO フォルダーにあります。

1. Zybo ボード登録ファイルを MATLAB パスに追加します。

example_root = (hdlcoder_amd_examples_root)
cd (example_root)
addpath(genpath('ZYBO'));

2.LED の点滅を実装する Simulink モデルを開きます。

open_system('hdlcoder_led_blinking_4bit');

3.hdlcoder_led_blinking_4bit/led_counter サブシステムから led_counter サブシステムを右クリックして [HDL コード][HDL ワークフロー アドバイザー] を選択し、HDL ワークフロー アドバイザーを起動します。あるいは、モデルの [Launch HDL Workflow Advisor] ボックスをクリックできます。

[ターゲットを設定][ターゲット デバイスおよび合成ツールを設定] タスクで、[ターゲット ワークフロー] として [IP Core Generation] を選択します。[ターゲット プラットフォーム] のドロップダウン リストに ZYBO Z7-10 が表示されます。[ターゲット プラットフォーム] として ZYBO Z7-10 を選択します。

4.[このタスクを実行] をクリックして [ターゲット デバイスおよび合成ツールを設定] タスクを完了します。

5.[ターゲットを設定][ターゲットのリファレンス設計を設定] タスクで、[リファレンス設計] フィールドにカスタム リファレンス設計 Demo system が表示されます。Demo system を選択し、[このタスクを実行] をクリックします。

6.タスク 1.3 の [ターゲット インターフェイスを設定] で、接続を選択し、[このタスクを実行] をクリックします。

7.IP コアを生成して IP コアの生成レポートを表示するには、Xilinx Zynq プラットフォームをターゲットにする方法の概要"Generate an HDL IP core using the HDL Workflow Advisor" の節に記載されている手順 3 と手順 4 に従います。

8.リファレンス設計に IP コアを統合して Vivado プロジェクトを作成するには、Xilinx Zynq プラットフォームをターゲットにする方法の概要"Integrate the IP core with the Xilinx Vivado environment" の節に記載されている手順 1 に従います。

9. [組み込みシステムの統合][プロジェクトを作成] タスクが完了したら、SoC ワークフローで作成された Xilinx Vivado プロジェクトを確認します。次の図は、HDL IP コアを強調表示した SoC プロジェクトのブロック設計を示しています。カスタム リファレンス設計と HDL IP コアの関係をさらに詳しく理解するには、このブロック設計をカスタム リファレンス設計のエクスポート時に使用した前のブロック設計と比較します。

10. Xilinx Zynq プラットフォームをターゲットにする方法の概要の例の "Integrate the IP core with the Xilinx Vivado environment" の節に記載されている手順 2、3、4 にそれぞれ従って、ソフトウェア インターフェイス モデルを生成し、FPGA ビットストリームを生成し、ターゲット デバイスをプログラムします。

11. ビットストリームの読み込み後、Zybo Z7-10 ボード上の LED が点滅を開始します。Zynq ARM プロセッサでソフトウェア インターフェイス モデルを実行して LED の点滅頻度および方向を制御できます。生成されたソフトウェア インターフェイス モデルから LED の点滅頻度および方向を制御するには、Xilinx Zynq プラットフォームをターゲットにする方法の概要の例の "Generate a software interface model" の節を参照してください。