主要内容

为 Microchip 工作流定义自定义板和参考设计

R2026b

此示例说明如何在 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 工具,请将 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 板之间的关系。

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 主接口选择此配置:

  • Memory Interface Configuration Mode:Soft Memory Controller

  • Fabric Interface Settings:Use an AXI Interface

点击 OK。

5.双击 Reset Controller 以配置复位控制器,该控制器支持 MSS_RESET_N_M2M 和 MSS_RESET_N_M2F 参数。

Configuration pane for the Reset Controller.

6.保存 SmartFusion2_MSS_MSS 智能设计。右键点击 SmartFusion2_MSS_MSS IP 并选择 Update Component。

7.MSS IP 配置为使用 AXI 主接口和重置连接。将所有引脚提升到设计的顶层,然后点击 Generate Component。

View of the SmartFusion2_MSS_MSS IP.

8.在 Libero 工程文件夹 SmartFusion2_MSS\component\work\SmartFusion2_MSS_MSS 中生成 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)。

Image of a configured Libero project.

11.要将完成的模块设计导出为名为 design1_led.tcl 的 Tcl 脚本,请选择 Project>>Export Script File。

导出的 Tcl 脚本 (design1_led.tcl) 构成自定义参考设计。您在 HDL 工作流顾问的 HDL Coder SoC 工作流中使用此参考设计,以在 Microchip Libero 工程中重新创建模块设计并将生成的 HDL IP 核与模块设计集成。

在 HDL 工作流顾问中注册 SmartFusion2 板

要在 HDL 工作流顾问中注册 SmartFusion2 板,请按照以下步骤进行操作。

1.创建一个名为 hdlcoder_board_customization 的板卡注册文件,并将其添加到 MATLAB 路径。

板注册文件包含板插件列表。板插件是 MATLAB 包文件夹,其中包含板定义文件和与该板关联的所有参考设计插件。

以下代码描述包含 SmartFusion2Registration 板插件的板注册文件的内容,以在 HDL 工作流顾问中注册 SmartFusion2 板。该函数在 MATLAB 路径中查找具有指定名称的任何注册文件,并返回元胞数组,其中包含板插件的位置。板插件必须为可从您的 MATLAB 路径访问的包文件夹,其中包含板定义文件。

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

2.创建板定义文件。

板定义文件包含有关 SoC 板的信息。

创建一个名为 plugin_board.m 的 SmartFusion2 板定义文件,该文件位于板插件 SmartFusion2Registration 内。

有关 FPGA I/O 引脚位置 ('FPGAPin') 和标准 ('IOSTANDARD') 的信息,请参阅 Microchip 网站上的 SmartFusion2 约束文件。

属性 BoardName 在 HDL 工作流顾问中定义 SmartFusion2 板的名称。

function hB = plugin_board()
% Board definition
% Construct board object
hB = hdlcoder.Board;
hB.BoardName = 'Microsemi SmartFusion2 SoC FPGA Advanced Development 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.创建一个名为 hdlcoder_ref_design_customization.m 的参考设计注册文件,其中包含与 SoC 板关联的参考设计插件列表。

参考设计插件是 MATLAB 包文件夹,其中包含参考设计定义文件和与 SoC 设计工程关联的所有文件。参考设计注册文件还必须包含关联板的名称。

以下代码描述 SmartFusion2 参考设计注册文件的内容,其中包含参考设计插件 SmartFusion2Registration.Libero_12_6 和与 Microsemi SmartFusion2 SoC FPGA Advanced Development Kit 板关联的 SmartFusion2Registration.Libero_23_2,具体取决于您使用的 Microchip Libero SoC 工具版本。注册文件在板卡插件文件夹内或 MATLAB 路径中查找具有指定名称的文件。该函数返回一个元胞数组,其中包含参考设计插件的位置,以及包含关联板卡的名称的字符向量。参考设计插件必须是可从 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 Development Kit';
end

2.创建参考设计定义文件。

参考设计定义文件定义自定义参考设计与您生成的 HDL IP 核之间的接口。

创建一个 SmartFusion2 参考设计定义文件 plugin_rd.m 以与 Microsemi SmartFusion2 SoC FPGA Advanced Development Kit 板关联,该文件位于参考设计插件 SmartFusion2Registration.Libero_23_2 内。属性 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 Development 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 Register interfaces
hRD.addRegisterInterface( ...
    '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 和 addRegisterInterface 函数定义自定义参考设计与 HDL IP 核之间的接口连接:

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

为 SmartFusion2 板生成 HDL IP 核

使用自定义板和参考设计注册系统生成 HDL IP 核,以在 SmartFusion2 板上使 LED 闪烁。

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 子系统启动 HDL 工作流顾问,方法是右键点击 led_counter 子系统并选择 HDL Code>>HDL 工作流顾问。或者,点击模型中的启动 HDL 工作流顾问框。

在设置目标 > 设置目标器件和综合工具任务中,将目标工作流设置为 IP Core Generation,将目标平台设置为 Microsemi SmartFusion2 SoC FPGA Advanced Development Kit,将综合工具设置为 Microchip Libero SoC。

5.点击运行此任务以完成设置目标设备和综合工具任务。

6.在设置目标 > 设置目标参考设计任务中,将参考设计设置为 Default system,然后点击运行此任务。

7.在设置目标接口任务中,设置以下目标平台接口选项,然后点击运行此任务。

8.在设置目标频率任务中,将目标频率设置为 50 MHz。

9.要生成 IP 核并查看 IP 核生成报告,请右键点击生成 RTL 代码和 IP 核并选择运行到选定任务。生成自定义 IP 核后,IP 核文件位于您工程文件夹内的 ipcore 文件夹中。HTML 自定义 IP 核报告会随自定义 IP 核一起生成。该报告描述生成的自定义 IP 核的行为和内容。

Code Generation report showing the IP Core Generation Report section.

10.要将 IP 核集成到参考设计中并创建 Libero 工程,请按照 Get Started with IP Core Generation for Microchip PolarFire SoC Devices中将 IP 核与 Microsemi Libero SoC 环境集成部分的步骤 1 操作。

11.完成嵌入式系统集成下的创建工程任务后,检查 Microchip Libero SoC 工程。下图显示当您突出显示 HDL IP Core 时 SoC 工程的模块设计。将此模块设计与之前用于导出自定义参考设计的模块设计进行比较,以更深入地理解自定义参考设计与 HDL IP 核之间的关系。

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

12.按照 Get Started with IP Core Generation for Microchip PolarFire SoC Devices中将 IP 核与 Microsemi Libero SoC 环境集成部分的步骤 2 和 3,分别生成 FPGA 比特流并对目标器件进行编程。

13.加载比特流后,SmartFusion2 板上的 LED 开始闪烁。您可以通过按下滑动开关[0] 来更改 LED 闪烁的方向。

LEDs lit up on a SmartFusion2 board.

另请参阅