メインコンテンツ

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

この例では、HDL ワークフロー アドバイザーの Microchip ワークフローで点滅 LED モデルのカスタムのボードとリファレンス設計を定義して登録する方法を示します。SmartFusion2® ボードを使用しますが、他の Microchip プラットフォーム用のカスタム ボードやカスタム リファレンス設計も定義して登録できます。

要件

この例を実行するには、以下にアクセスできる必要があります。

SmartFusion2 ボードの設定

SmartFusion2 ボードの機能について理解するには、SmartFusion2 ボードのリファレンス マニュアルを参照してください。SmartFusion2 ボードを設定するには、次の手順に従います。

1. USB COM ポートのデバイス ドライバーをコンピューターにインストールします。

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

3. "HDL Coder Support Package for Microchip FPGA and SoC Devices" をダウンロードしてインストールします。ハードウェア サポート パッケージにアクセスするには、MATLAB セッションの [ホーム] タブで [アドオン] をクリックし、[ハードウェア サポート パッケージの入手] をクリックします。

4. hdlsetuptoolpath関数を使用して Microchip Libero ツール パスを設定します。たとえば、Microchip Libero SoC ツールを設定するには、ToolNameMicrochip Libero SoCToolPath をインストール済みの Libero 実行可能ファイルのパスとして指定します。

hdlsetuptoolpath('ToolName', 'Microchip Libero SoC', 'ToolPath', liberopath);

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

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

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

Microchip Libero ツール環境を使用してリファレンス設計を作成してエクスポートするには、次の手順に従います。

1. 次の SmartFusion2 ボード設定を使用してマイクロコントローラー サブシステム (MSS) ベースの Microchip Libero SoC RTL プロジェクトを作成します。この Libero プロジェクトは、SmartFusion2 構成ファイルを生成するためだけに必要になります。

  • Family: SmartFusion2

  • Die: M2S150TS

  • Package: 1152 FC

  • Speed: -1

  • Core Voltage: All

  • Range: All

[Next] をクリックします。

2. [Design Template] ウィンドウで、[Create a microcontroller (MSS) based design] を選択して [Next] をクリックします。

3. [Finish] をクリックして、SmartFusion2 MSS コンポーネントを含むスマート設計を作成します。MSS を構成するには、"SmartFusion2_MSS_MSS" IP をダブルクリックします。

A smart design containing the SmartFusion2 MSS component.

4. 使用しないペリフェラルのチェック ボックスをオフにします。"MDDR" をダブルクリックし、次の構成を AXI Master インターフェイス用に選択します。

  • Memory Interface Configuration Mode: Soft Memory Controller

  • Fabric Interface Settings: Use an AXI Interface

[OK] をクリックします。

5. "Reset Controller" をダブルクリックしてリセット コントローラーを構成します。"MSS_RESET_N_M2F" パラメーターと "MSS_RESET_N_M2F" パラメーターが有効になります。

Configuration pane for the Reset Controller.

6. "SmartFusion2_MSS_MSS" スマート設計を保存します。"SmartFusion2_MSS_MSS" IP をダブルクリックし、[Update Component] を選択します。

7. MSS IP は AXI Master インターフェイスとリセット接続で構成されます。すべてのピンを設計の最上位レベルにプロモートし、[Generate Component] をクリックします。

View of the SmartFusion2_MSS_MSS IP.

8. "SmartFusion2_MSS_MSS" のコンポーネント ファイルを Libero プロジェクト フォルダー SmartFusion2_MSS\component\work\SmartFusion2_MSS_MSS に生成します。生成された SmartFusion2_MSS_MSS.cxf ファイルと SmartFusion2_MSS_MSS.sdb ファイルを Simulink® の点滅 LED モデルが保存されている同じフォルダーに保存します。

9. 同じ SmartFusion2 デバイス設定で新しい空の Libero プロジェクトを作成し、マイクロコントローラー サブシステム (MSS) プロセッサをインポートします。[File]、[Import]、[Components] を選択します。手順 8 で生成した SmartFusion2_MSS_MSS.cxf ファイルのパスを指定します。新しいスマート設計を Libero_sd という名前で作成し、Libero_sdSmartFusion2_MSS_MSS IP をインスタンス化します。すべてのピンを最上位レベルにプロモートして SmartFusion2_MSS_MSS IP のコンポーネントを生成します。

10. スマート設計に OSC_C0FCCC_C0、および COREAXI4INTERCONNECT_C0 の各 IP を追加します。オンチップ発振器のクロックをクロック調整回路 (CCC) に接続し、CCC の出力を使用して回路全体のクロック (GL0) を駆動します。

Image of a configured Libero project.

11. 完成したブロック設計を Tcl スクリプトとして design1_led.tcl という名前でエクスポートするには、[Project]、[Export Script File] を選択します。

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

HDL ワークフロー アドバイザーでの SmartFusion2 ボードの登録

HDL ワークフロー アドバイザーで SmartFusion2 ボードを登録するには、次の手順に従います。

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

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

次のコードは、HDL ワークフロー アドバイザーで SmartFusion2 ボードを登録するための SmartFusion2Registration ボード プラグインを含むボード登録ファイルの内容を記述したものです。この関数は、指定された名前の登録ファイルを MATLAB パス上で探し、ボード プラグインの場所を含む cell 配列を返します。ボード プラグインは、MATLAB パスからアクセスできるパッケージ フォルダーでなければならず、ボード定義ファイルが含まれていなければなりません。

function r = hdlcoder_board_customization
% Board plugin registration file
r = { ...
      'SmartFusion2Registration.plugin_board', ...
     };
end

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

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

ボード プラグイン SmartFusion2Registration 内に配置される SmartFusion2 ボード定義ファイルを plugin_board.m という名前で作成します。

FPGA I/O ピンの位置 ('FPGAPin') と規格 ('IOSTANDARD') の詳細については、Microchip の Web サイトの SmartFusion2 制約ファイルを参照してください。

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

function hB = plugin_board()
% Board definition
% Construct board object
hB = hdlcoder.Board;
hB.BoardName = 'Microsemi SmartFusion2 SoC FPGA Advanced Developement Kit';
% FPGA device information
hB.FPGAVendor = 'Microchip';
hB.FPGAFamily = 'SmartFusion2';
hB.FPGADevice = 'M2S150TS';
hB.FPGAPackage = '1152 FC';
hB.FPGASpeed  = '-1';
% Tool information
hB.SupportedTool = {'Microchip Libero SoC'};
% 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', 8, ...
   'FPGAPin', {'D26', 'F26', 'A27', 'C26', 'C28', 'B27', 'C27', 'E26'}, ...
   'IOPadConstraint', {'IOSTANDARD = LVCMOS33'});
hB.addExternalIOInterface( ...
   'InterfaceID', 'Push Buttons', ...
   'InterfaceType', 'IN', ...
   'PortName', 'PushButtons', ...
   'PortWidth', 4, ...
   'FPGAPin', {'J25', 'H25', 'J24', 'H23'}, ...
   'IOPadConstraint', {'IOSTANDARD = LVCMOS25'});
hB.addExternalIOInterface( ...
  'InterfaceID', 'Slide switches ', ...
  'InterfaceType', 'IN', ...
  'PortName', 'SlideSwitches', ...
  'PortWidth', 8, ...
  'FPGAPin', {'F25', 'G25', 'J23', 'J22', 'G27' , 'H27' , 'F23' , 'G23'}, ...
  'IOPadConstraint', {'IOSTANDARD = LVCMOS25'});

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

HDL ワークフロー アドバイザーでカスタム リファレンス設計を登録するには、次の手順に従います。

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

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

次のコードは、Microsemi SmartFusion2 SoC FPGA Advanced Developement Kit ボードに関連付けられたリファレンス設計プラグイン SmartFusion2Registration.Libero_12_6 および SmartFusion2Registration.Libero_23_2 を含む SmartFusion2 リファレンス設計登録ファイルの内容を記述したものです。プラグインは、使用している Microchip Libero SoC ツールのバージョンに応じたものになります。登録ファイルで、指定された名前のファイルをボード プラグイン フォルダー内または MATLAB パス上から探します。この関数は、リファレンス設計プラグインの場所を含む cell 配列と、関連付けられたボード名を含む文字ベクトルを返します。リファレンス設計プラグインは、MATLAB パスからアクセスできるパッケージ フォルダーでなければならず、リファレンス設計定義ファイルが含まれていなければなりません。

function [rd,boardName] = hdlcoder_ref_design_customization
% Reference design plugin registration file
rd = {
        'SmartFusion2Registration.Libero_12_6.plugin_rd', ...
     };
boardName = 'Microsemi SmartFusion2 SoC FPGA Advanced Developement Kit';
end

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

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

リファレンス設計プラグイン SmartFusion2Registration.Libero_23_2 内にある Microsemi SmartFusion2 SoC FPGA Advanced Developement Kit ボードに関連付ける SmartFusion2 リファレンス設計定義ファイル plugin_rd.m を作成します。ReferenceDesignName プロパティで、HDL ワークフロー アドバイザーでのリファレンス設計の名前を Default system と定義しています。

function hRD = plugin_rd()
% Reference design definition
% Construct reference design object
hRD = hdlcoder.ReferenceDesign('SynthesisTool', 'Microchip Libero SoC');
hRD.ReferenceDesignName = 'Default system';
hRD.BoardName = 'Microsemi SmartFusion2 SoC FPGA Advanced Developement Kit';
% Tool information
hRD.SupportedToolVersion = {'12.0','12.6','2022.1','2023.2','2024.1'}; 
%% Add custom design files
% Add custom Libero  design
hRD.addCustomLiberoDesign( ...
    'CustomBlockDesignTcl', 'design1_led.tcl');
% Add custom MSS Config
hRD.addCustomComponentFiles(...
    'CustomMSSCxfFile','SF2_MSS_MSS.cxf',...
    'CustomMSSSdbFile','SF2_MSS_MSS.sdb');
%% Add interfaces
% Add clock interface
hRD.addClockInterface( ...
    'ClockConnection', 'FCCC_C0_0/GL0', ...
    'ResetConnection', 'SF2_MSS_MSS_0/MSS_RESET_N_M2F',...
    'DefaultFrequencyMHz', 50,...
    'MinFrequencyMHz', 5,...
    'MaxFrequencyMHz', 500,...
    'ClockModuleInstance', 'FCCC_C0_0',...
    'ClockNumber', 1);
% Add AXI4 and AXI4-Lite slave interfaces
hRD.addAXI4SlaveInterface( ...
    'InterfaceConnection', 'COREAXI4INTERCONNECT_C0_0/AXI4mslave0', ...
    'BaseAddress', '0xA0000000');
% Disable 'Generate Software Interface Model' task
hRD.HasProcessingSystem = false;

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

SmartFusion2 リファレンス設計プラグイン フォルダー SmartFusion2Registration.Libero_23_2 に、Microchip Libero プロジェクトからエクスポートした Tcl スクリプト design1_led.tcl を含める必要があります。SmartFusion2 リファレンス設計定義ファイル plugin_rd.m で、addCustomLiberoDesign 関数を使用して SoC 設計プロジェクト ファイルを識別します。

hRD.addCustomLiberoDesign('CustomBlockDesignTcl', 'design1_led.tcl');

さらに、リファレンス設計定義ファイル plugin_rd.m で、addClockInterface 関数と addAXI4SlaveInterface 関数を使用して、カスタム リファレンス設計と HDL IP コアの間のインターフェイス接続を定義します。

hRD.addClockInterface( ...
     'ClockConnection', 'FCCC_C0_0/GL0', ...
     'ResetConnection', 'SF2_MSS_MSS_0/MSS_RESET_N_M2F',...
hRD.addAXI4SlaveInterface( ...
     'InterfaceConnection', 'COREAXI4INTERCONNECT_C0_0/AXI4mslave0', ...
     'BaseAddress', '0xA0000000');

SmartFusion2 ボードの HDL IP コアの生成

カスタムのボードとリファレンス設計の登録システムを使用して、SmartFusion2 ボード上の LED を点滅させる HDL IP コアを生成します。

1. 次のコマンドを使用して、SmartFusion2 ボード登録ファイルを MATLAB パスに追加します。

hdlcoder_microchip_examples_root;
addpath(fullfile(hdlcoder_microchip_examples_root,'SmartFusion2'));

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

open_system('hdlcoder_led_blinking')

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

[ターゲットを設定][ターゲット デバイスおよび合成ツールを設定] タスクで、[ターゲット ワークフロー]IP Core Generation[ターゲット プラットフォーム]Microsemi SmartFusion2 SoC FPGA Advanced Developement Kit[合成ツール]Michrochip Libero SoC に設定します。

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

6. [ターゲットを設定][ターゲットのリファレンス設計を設定] タスクで、[リファレンス設計]Default system に設定し、[このタスクを実行] をクリックします。

7. [ターゲット インターフェイスを設定] タスクで、ターゲット プラットフォーム インターフェイス オプションを次のように設定し、[このタスクを実行] をクリックします。

8. [ターゲット周波数を設定] タスクで、[ターゲット周波数] を 50 MHz に設定します。

9. IP コアを生成して IP コアの生成レポートを表示するには、[RTL コードと IP コアの生成] を右クリックして [選択したタスクまで実行] を選択します。カスタム IP コアを生成すると、IP コア ファイルがプロジェクト フォルダー内の ipcore フォルダーに配置されます。カスタム IP コアと一緒に HTML カスタム IP コア レポートが生成されます。このレポートには、生成されたカスタム IP コアの動作と内容が記載されています。

Code Generation report showing the IP Core Generation Report section.

10. リファレンス設計に IP コアを統合して Libero プロジェクトを作成するには、Microchip PolarFire SoC デバイスの IP コアの生成入門"Integrate IP Core with Microsemi Libero SoC Environment" セクションに記載されている手順 1 に従います。

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

The block design of the SoC project when you highlight the HDL IP Core.

12. Microchip PolarFire SoC デバイスの IP コアの生成入門の例の "Integrate IP Core with Microsemi Libero SoC Environment" セクションに記載されている手順 2 と 3 にそれぞれ従って、FPGA ビットストリームを生成し、ターゲット デバイスをプログラムします。

13. ビットストリームの読み込み後、SmartFusion2 ボード上の LED が点滅を開始します。[Slide Switch[0]] を押すと、LED が点滅する方向を変更できます。

LEDs lit up on a SmartFusion2 board.

参考