メインコンテンツ

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

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

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

はじめに

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

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

要件

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

Zybo ボードの設定

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

1. ボードを設定します。

Zybo Z7-10

Image of a Zybo Z7-10 board with labels for component parts.

Zybo Z7-20

Image of a Zybo Z7-20 board with labels for component parts.

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

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

Image of a JP5 boot mode jumper

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

Image of a JP7 power source select jumper

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

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

7.使用しているボードに応じて Zybo Z7-10 Linux イメージまたは Zybo Z7-20 Linux イメージをダウンロードし、zip アーカイブを展開して内容を microSD カードにコピーし、microSD カードをコネクタ J4 に挿入します。HDL Coder IP コア ワークフロー用のカスタム Linux イメージのビルドに従って Linux イメージをビルドすることもできます。

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

hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', vivadopath);

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

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

h = zynq();

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

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

Figure showing the relationship between a reference design, an HDL IP core, and an SoC board

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

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

A New Project dashboard highlighting the selection of Zybo boards

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

A Run Bock Automation dashboard showing board preset options

ボード プリセットを適用したため、Zybo ボード定義に従って MIO のペリフェラルがマークされています。

a Re-customize IP dashboard showing a Zynq block design

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

A completed block design

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

4.[File][Export][Export Block Design] を選択して、完成したブロック設計を Tcl スクリプト design_led.tcl としてエクスポートします。

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

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

このプロセスには、ボード登録ファイルとボード定義ファイルの作成が含まれます。

1. ボード登録ファイルを作成します。

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

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

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

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', ...
      'ZyboZ720Registration.plugin_board'
     };
end

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

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

Zybo Z7-10

次のコードは、ボード プラグイン フォルダー 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'});

Zybo Z7-20

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

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

function hB = plugin_board()
% Board definition

%   Copyright 2024 The MathWorks, Inc.

% Construct board object
hB = hdlcoder.Board;

hB.BoardName    = 'ZYBO Z7-20';

% FPGA device information
hB.FPGAVendor   = 'Xilinx';
hB.FPGAFamily   = 'Zynq';
hB.FPGADevice   = 'xc7z020';
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'});

% LocalWords:  ZYBO Zynq xc Vivado JTAG IOSTANDARD LVCMOS

これで、HDL ワークフロー アドバイザーでのカスタム ボード プラグインの登録のプロセスは完了です。引き続き、次のセクションに進み、HDL ワークフロー アドバイザーで前に作成したカスタム リファレンス設計を登録できます。

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

このセクションでは、HDL ワークフロー アドバイザーでカスタム リファレンス設計を登録する方法について説明します。このプロセスには、カスタム リファレンス設計登録ファイルとカスタム リファレンス設計定義ファイルの作成が含まれます。

1. リファレンス設計登録ファイルを作成します。

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

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

Zybo Z7-10

次のコードは、ボード ZYBO Z7-10 に関連付けられたリファレンス設計プラグイン ZyboZ710Registration.Vivado2020_2 および ZyboZ710Registration.Vivado2022_1 を含む Zybo リファレンス設計登録ファイルの内容を記述したものです。プラグインは、MATLAB パスで登録している Vivado ツールのバージョンに応じたものになります。サポートされている Vivado のバージョンを直接示すフォルダー名ではない可能性があることに注意してください。現在、次に示すように 2 つのカスタム リファレンス設計のサポートがあります。

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', ...
      'ZyboZ710Registration.Vivado2022_1.plugin_rd', ...
      'ZyboZ710Registration.Vivado_Audio_filter_2020_2.plugin_rd', ...
      'ZyboZ710Registration.Vivado_Audio_filter_2022_1.plugin_rd'

     };
boardName = 'ZYBO Z7-10';
end

Zybo Z7-20

次のコードは、ボード ZYBO Z7-20 に関連付けられたリファレンス設計プラグイン ZyboZ720Registration.Vivado2023_1 を含む Zybo リファレンス設計登録ファイルの内容を記述したものです。プラグインは、MATLAB パスで登録している Vivado ツールのバージョンに応じたものになります。ZYBO Z7-20 ボードのサポートは Xilinx Vivado ツール version 2023.1 を使用して新たに追加されたため、フォルダー名に Vivado2023_1 が含まれています。

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

%   Copyright 2024 The MathWorks, Inc.

rd = { 'ZyboZ720Registration.Vivado2023_1.plugin_rd', ...

     };

boardName = 'ZYBO Z7-20';
end

% LocalWords:  plugins Zybo Vivado ZYBO

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

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

Zybo Z7-10

次のコードは、リファレンス設計プラグイン ZyboZ710Registration.Vivado2022_1 内にあるボード 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 = {'2022.1','2023.1'};
% 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.Vivado2022_1 に、前に 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');

A completed Zynq block design with labels for Clock Port, Reset Port, and Interface Port (DUT)

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

Zybo Z7-20

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

function hRD = plugin_rd()
% Reference design definition

%   Copyright 2024 The MathWorks, Inc.

% Construct reference design object
hRD = hdlcoder.ReferenceDesign('SynthesisTool', 'Xilinx Vivado');

hRD.ReferenceDesignName = 'Demo system';
hRD.BoardName = 'ZYBO Z7-20';

% Tool information
hRD.SupportedToolVersion = {'2023.1'};

% add custom Vivado design
hRD.addCustomVivadoDesign( ...
    'CustomBlockDesignTcl', 'design_led.tcl', ...
    'VivadoBoardPart',      'digilentinc.com:zybo-z7-20:part0:1.1');

%% 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';

% LocalWords:  Vivado ZYBO Tcl tcl digilentinc zybo wiz proc aresetn AXI axi
% LocalWords:  devicetree axilite dtb

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

カスタムのボードとリファレンス設計の登録システムを使用して、Zybo Z7-10/Zybo Z7-20 ボード上の 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');

Simulink block diagaram for 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 を選択します。[ターゲット プラットフォーム] として ZYBO Z7-20 を選択することもできます。このボードに対するサポートが HDL Coder Support Package for AMD FPGA and SoC Devices で新たに提供されています。

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

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

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

7.IP コアを生成して IP コアの生成レポートを表示するには、Simulink モデルからの IP コアの生成入門"Generate an HDL IP core using the HDL Workflow Advisor" セクションに記載されている手順 3 と手順 4 に従います。

8.リファレンス設計に IP コアを統合して Vivado プロジェクトを作成するには、Simulink モデルからの IP コアの生成入門"Integrate the IP core with the Xilinx Vivado environment" セクションに記載されている手順 1 に従います。

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

Block design of the SoC project

10. Simulink モデルからの IP コアの生成入門の例の "Integrate the IP core with the Xilinx Vivado environment" セクションに記載されている手順 2、3、4 にそれぞれ従って、ソフトウェア インターフェイス モデルを生成し、FPGA ビットストリームを生成し、ターゲット デバイスをプログラムします。

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

まとめ

この例では、HDL ワークフロー アドバイザーで Zynq ワークフロー用のカスタム ボードを定義して登録する方法を示します。この例では、Xilinx Vivado を使用したカスタム リファレンス設計の作成とエクスポート、および HDL ワークフロー アドバイザーでのリファレンス設計の登録のプロセスについても説明しています。