Microchip ワークフロー用のカスタムのボードとリファレンス設計の定義
この例では、HDL ワークフロー アドバイザーの Microchip ワークフローで点滅 LED モデルのカスタムのボードとリファレンス設計を定義して登録する方法を示します。SmartFusion2® ボードを使用しますが、他の Microchip プラットフォーム用のカスタム ボードやカスタム リファレンス設計も定義して登録できます。
要件
この例を実行するには、以下にアクセスできる必要があります。
Microchip Libero SoC Design Suite。サポートされているバージョンのリストについては、HDL の言語サポートおよびサポートされるサードパーティ製ツールとハードウェアを参照してください。
Microchip SmartFusion2 開発ボードとアクセサリ キット。
HDL Coder™ Support Package for Microchip FPGA and SoC Devices。
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 ツールを設定するには、ToolName
を Microchip Libero SoC
、ToolPath
をインストール済みの Libero 実行可能ファイルのパスとして指定します。
hdlsetuptoolpath('ToolName', 'Microchip Libero SoC', 'ToolPath', liberopath);
Microchip Libero SoC を使用したカスタム リファレンス設計の作成とエクスポート
リファレンス設計は SoC 設計の構造全体を取得したもので、さまざまなコンポーネントやそれらの相互接続を定義します。HDL ワークフロー アドバイザーの HDL Coder の SoC ワークフローを使用して、リファレンス設計と統合する IP コアを生成し、SoC ボードをプログラムします。次の図は、リファレンス設計、HDL IP コア、および SoC ボードの関係を示しています。
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 をダブルクリックします。
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" パラメーターが有効になります。
6. "SmartFusion2_MSS_MSS" スマート設計を保存します。"SmartFusion2_MSS_MSS" IP をダブルクリックし、[Update Component] を選択します。
7. MSS IP は AXI Master インターフェイスとリセット接続で構成されます。すべてのピンを設計の最上位レベルにプロモートし、[Generate Component] をクリックします。
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_sd
で SmartFusion2_MSS_MSS
IP をインスタンス化します。すべてのピンを最上位レベルにプロモートして SmartFusion2_MSS_MSS
IP のコンポーネントを生成します。
10. スマート設計に OSC_C0
、FCCC_C0
、および COREAXI4INTERCONNECT_C0
の各 IP を追加します。オンチップ発振器のクロックをクロック調整回路 (CCC) に接続し、CCC の出力を使用して回路全体のクロック (GL0) を駆動します。
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 コアの動作と内容が記載されています。
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 コアの関係をさらに詳しく理解するには、このブロック設計をカスタム リファレンス設計のエクスポート時に使用した前のブロック設計と比較します。
12. Microchip PolarFire SoC デバイスの IP コアの生成入門の例の "Integrate IP Core with Microsemi Libero SoC Environment" セクションに記載されている手順 2 と 3 にそれぞれ従って、FPGA ビットストリームを生成し、ターゲット デバイスをプログラムします。
13. ビットストリームの読み込み後、SmartFusion2 ボード上の LED が点滅を開始します。[Slide Switch[0]] を押すと、LED が点滅する方向を変更できます。