嵌入式设计教程

教程 描述
Versal 自适应计算加速平台 (UG1305) 本教程旨在提供有关将赛灵思 Vivado® Design Suite 流程应用于 Versal™ VMK180/VCK190 评估板的指示信息。

© 2019-2020 年赛灵思公司版权所有

目录

嵌入式设计教程

按设计进程浏览内容

入门指南

硬件要求

安装要求

Vitis 集成设计环境和 Vivado Design Suite

PetaLinux 工具

要求

解压 PetaLinux 封装

Versal ACAP CIPS 和 NoC (DDR) IP 核配置

要求

CIPS IP 核配置

使用 Versal ACAP 创建全新的嵌入式工程

运行裸机 Hello World 应用

在 Vitis 软件平台中使用系统调试器以 JTAG 模式运行应用

NoC(和 DDR)IP 核配置

在现有工程内配置 NoC IP 核

在 DDR 内存上运行裸机 Hello World 应用

使用 Vitis 软件平台进行调试

赛灵思系统调试器

使用 Vitis 软件平台调试软件

使用 XSCT 执行调试

设置目标

使用 XSCT 加载应用

串口终端配置

使用 XSCT 运行和调试应用

启动和配置

系统软件

Platform Loader and Manager

U-Boot

Arm 可信固件

为独立应用生成启动镜像

SD 启动模式的启动顺序

QSPI 启动模式的启动顺序

使用标量引擎和自适应引擎的系统设计示例

设计示例:使用 AXI GPIO

配置应用

工程示例:含 RPU 的 FreeRTOS GPIO 应用工程

工程示例:使用 PetaLinux 创建 Linux 镜像

使用 BIF 文件将 FreeRTOS 与 APU 镜像进行组合

面向含 SmartLynq+ 模块的高速调试端口的系统设计示例

引言

设计示例:启用 HSDP

修改设计以启用 HSDP

综合、实现和生成器件镜像

导出硬件 (XSA)

使用 PetaLinux 创建启用 HSDP 的 Linux 镜像

设置 SmartLynq+ 模块

使用 SmartLynq+ 作为串行终端

通过 JTAG 或 HSDP 启动 Linux 镜像

实用链接

总结

附录:创建 PLM


本文档旨在提供有关将赛灵思 Vivado® Design Suite 流程应用于 Versal™ VMK180/VCK190 评估板的指示信息。所使用的工具为 Vivado Design Suite 和 Vitis™ 统一软件平台 2020.2 版。要安装 Vitis 统一软件平台,请参阅《Vitis 统一软件平台文档:嵌入式软件开发》(UG1400)。

注意:在本教程中,有关在硬件上启动 Linux 的指示信息仅适用于针对 2020.2 版发布的 PetaLinux 工具,这些工具将安装在 Linux 主机上用于实践本文档的 Linux 部分内容。

重要!VCK190/VMK180 评估板包含 Silicon Labs CP210x VCP USB-UART Bridge。请确保这些驱动均已完成安装。请参阅《Silicon Labs CP210x USB-to-UART 安装指南》(UG1033),以获取更多信息。

本文档中的示例是使用 Windows 10 64 位操作系统上运行的赛灵思工具、Vitis 软件平台和 Linux 64 位操作系统上的 PetaLinux 所创建的。使用其它 Windows 上运行的其它版本的工具进行安装所产生的结果可能与此处结果不尽相同。这些示例主要围绕嵌入式设计的以下方面来展开。

  • Versal ACAP CIPS 和 NoC (DDR) IP 核配置:描述如何使用 Versal™ ACAP Control, Interfaces, and Processing System (CIPS) IP 核与 NoC 来创建设计,以及如何在 Arm® Cortex™-A72 和 Cortex™-R5F 处理器上运行简单的“Hello World”应用。本章提供了使用简单设计作为示例的软硬件工具简介。

  • 使用 Vitis 软件平台进行调试:介绍赛灵思 Vitis 软件平台的调试功能。本章使用前述设计并在裸机(无操作系统)上运行软件以演示 Vitis IDE 的调试功能。本章还列出了 Versal ACAP 的调试配置。

  • 启动和配置:显示集成组件以便为 Versal ACAP 配置并创建启动镜像。本章旨在帮助您了解如何集成和加载引导加载程序。

  • 使用标量引擎和自适应引擎的系统设计示例:描述如何在 Versal ACAP 上使用可用工具和受支持的软件块来构建系统。本章演示了如何利用 Vivado 工具并使用 PL AXI GPIO 来创建嵌入式设计。其中还演示了如何在 Versal 器件上为基于 Arm Cortex-A72 核的 APU 配置并构建 Linux 操作系统。

本设计教程需使用多个赛灵思提供的文件。这些文件包含在 ZIP 文件内,此文件可从赛灵思网站下载。(请参阅入门指南)。本教程假定该 ZIP 文件的内容已解压至 C:\edt

按设计进程浏览内容

赛灵思文档按一组标准设计进程进行组织,以便帮助您查找当前开发任务相关的内容。本文档涵盖了以下设计进程:

  • 系统和解决方案规划:确认系统级别的组件、性能、I/O 和数据传输要求。包括解决方案到 PS、PL 和 AI 引擎的应用映射。

    • 在现有工程内配置 NoC IP 核
    • 使用标量引擎和自适应引擎的系统设计示例
  • 嵌入式软件开发:从硬件平台创建软件平台,并使用嵌入式 CPU 开发应用代码。还涵盖 XRT 和 Graph API。

    • 运行裸机 Hello World 应用
    • 在 Vitis 软件平台中使用系统调试器以 JTAG 模式运行应用
    • 在 DDR 内存上运行裸机 Hello World 应用
  • 硬件、IP 和平台开发:为硬件平台创建 PL IP 块、创建 PL 内核、子系统功能仿真以及评估 Vivado® 时序收敛、资源使用情况和功耗收敛。还涉及为系统集成开发硬件平台。本文档中适用于此设计进程的主题包括:

    • CIPS IP 核配置
    • NoC(和 DDR)IP 核配置
    • 设计示例:使用 AXI GPIO
  • 系统集成与验证:集成和验证系统功能性能,包括时序收敛、资源使用情况和功耗收敛。本文档中适用于此设计进程的主题包括:

    • 启动和配置
    • 工程示例:含 RPU 的 FreeRTOS GPIO 应用工程
    • 工程示例:使用 PetaLinux 创建 Linux 镜像

入门指南

请确保您已正确安装所需工具,并且您的环境符合要求。

硬件要求

本教程对应目标为 Versal ACAP VCK190 和 VMK 180 评估板。本教程中的示例已使用 VCK190 ES1 评估板经过测试。要使用本教程,您需要具备以下硬件项,这些硬件项均随附于该评估板中:

  • VCK 190/VMK 180 ES1 评估板
  • 交流电源适配器 (12 VDC)
  • USB Type-A 转 Micro USB 转接线(用于 UART 通信)
  • Micro USB 线用于通过 USB-Micro JTAG 连接进行编程和调试
  • SD-MMC 闪存卡,用于启动 Linux
  • QSPI 子卡 X_EBM-01 REV_A01
  • OSPI 子卡 X-EBM-03 REV_A02

安装要求

Vitis 集成设计环境和 Vivado Design Suite

请确保您已安装 Vitis 2020.2 软件开发平台。Vitis IDE 是赛灵思统一工具,以封装形式随附所有硬件和软件。安装 Vitis IDE 时,将自动获得 Vivado Design Suite 和 Vitis IDE。您无需在安装程序中执行任何其它选择。

注意:请访问 https://china.xilinx.com/support/download.html 以确认您的工具为最新版本。

如需获取有关安装 Vivado Design Suite 的更多信息,请参阅《Vitis 统一软件平台文档:嵌入式软件开发》(UG1400)。

PetaLinux 工具

安装 PetaLinux 工具,以便在本工具的 Linux 部分中运行这些工具。PetaLinux 工具在 Linux 主机系统下运行,此系统运行下列工具的任一版本:

  • Red Hat Enterprise Workstation/Server 7.4、7.5、7.6、7.7、7.8(64 位)
  • CentOS Workstation/Server 7.4、7.5、7.6、7.7、7.8(64 位)
  • Ubuntu Linux Workstation/Server 16.04.5、16.04.6、18.04.1、18.04.02、18.04.3、18.04.4(64 位)

您可使用专用 Linux 主机,或者也可以使用在 Windows 开发平台上运行以上任一 Linux 操作系统的虚拟机。

在您所选系统上安装 PetaLinux 工具时,必须执行下列操作:

  • 从赛灵思网站下载 PetaLinux 2020.2 软件。

  • 下载相应的 BSP,欲知详情,请参阅工程示例:使用 PetaLinux 创建 Linux 镜像。

  • 将常用系统封装和库添加到工作站或虚拟机上。如需了解更多信息,请参阅《PetaLinux 工具文档:参考指南》(UG1144) 中的“安装要求”以及 PetaLinux 版本说明:2020.2。

要求

  • 8 GB RAM(针对赛灵思工具推荐的最低要求)
  • 2 GHz CPU 时钟或同等频率(至少 8 核)。
  • 100 GB 可用 HDD 空间

解压 PetaLinux 封装

PetaLinux 工具采用直通式安装。PetaLinux 工具将被直接安装到当前工作目录中,无附加选项。或者,您也可以指定安装路径。

例如,要将 PetaLinux 工具安装至 /opt/pkg/petalinux/<petalinux-version> 下,请执行以下操作:

$ mkdir -p /opt/pkg/petalinux/<petalinux-version>
$ ./petalinux-v<petalinux-version>-final-installer.run --dir /opt/pkg/petalinux/<petalinux-version>

注意:切勿将安装目录权限更改为 CHMOD 775,否则将产生 BitBake 错误。这样即可将 PetaLinux 工具安装到 /opt/pkg/petalinux/<petalinux-version> 目录中。

如需了解更多信息,请参阅《PetaLinux 工具文档:参考指南》(UG1144)。

软件许可

赛灵思软件使用 FLEXnet 许可证。首次运行软件时,它会执行许可证验证流程。如果许可证验证并未找到有效许可证,那么“License”Wizard 会指导您逐步完成相应流程以获取许可证并确保该许可证可用于所安装的工具。如果您不需要完整版本的软件,则可使用评估许可证。如需了解安装指令和安装信息,请参阅《Vivado Design Suite 用户指南:版本说明、安装和许可》(UG973)。

教程设计文件

  1. 从赛灵思网站下载参考设计文件。

  2. 将 ZIP 文件内容解压至您具有可写权限的任何位置。

要查看 ZIP 文件的内容,请下载 ZIP 文件,并将其内容解压至 C:\edt。设计文件中包含 XSA 文件、源代码和预构建的镜像,适用于所有部分。

Versal ACAP CIPS 和 NoC (DDR) IP 核配置

Versal ACAP CIPS IP 核允许您配置处理器系统和 PMC 块,包括启动模式、外设、时钟、接口和中断等。

本章描述了如何执行以下任务:

  • 创建 Vivado® 工程以供 Versal™ ACAP 通过配置 CIPS IP 核来选择相应的启动器件和外设。
  • 在 Arm® Cortex™-A72 的片上存储器 (OCM) 上创建并运行 Hello World 软件应用。
  • 在 Arm Cortex- R5F 的紧密耦合内存 (TCM) 上创建并运行 Hello World 软件应用。

NoC IP 核可帮助配置 DDR 内存和跨 DDR 内存的数据路径,以及系统中的处理引擎(标量引擎 (Scalar Engine)、自适应引擎 (Adaptable Engine) 和 AI 引擎 (AI Engine))。

  • 在 Arm Cortex-A72 上使用 DDR 作为内存来创建并运行 Hello World 软件应用。
  • 在 Arm Cortex-R5F 上使用 DDR 作为内存来创建并运行 Hello World 软件应用。

要求

要创建并运行本章中所述 Hello World 应用,您需要安装 Vitis™ 统一软件平台。如需了解安装过程,请参阅《Vitis 统一软件平台文档:嵌入式软件开发》(UG1400)。

CIPS IP 核配置

创建 Versal ACAP 系统设计中包括配置 CIPS IP 核以选择相应的启动器件和外设。首先,如果 CIPS IP 核外设和可用的多路复用 I/O (MIO) 连接满足要求,则无需任何 PL 组件。本章将指导您逐步完成创建基于 CIPS IP 核的简单设计的过程。

使用 Versal ACAP 创建全新的嵌入式工程

对于本示例,请启动 Vivado® Design Suite 并创建顶层为嵌入式处理器系统的工程。

启动设计

  1. 启动 Vivado® Design Suite。

  2. 在 Tcl 控制台 (Tcl Console) 中,输入以下命令以启用 ES1 评估板:

    enable_beta_device
    

    按 Enter 键。

  3. 在 Vivado“Quick Start”页面中,单击“创建工程 (Create Project)”以打开“新建工程 (New Project)”Wizard。

  4. 使用下表中的信息在每个 Wizard 屏幕中选择相应选项。

    表 1:系统属性设置

    Wizard 屏幕系统 系统属性 所用设置或命令
    工程名称 (Project Name) 工程名称 (Project Name) edt_versal
    工程位置 (Project Location) C:/edt
    创建工程子目录 (Create Project Subdirectory) 保留勾选此项
    工程类型 (Project Type) 指定要创建的工程类型。您可从 RTL 或已综合的 EDIF 开始着手 RTL 工程 (RTL Project)
    “当前请勿指定源代码 (Do not specify sources at this time)”复选框 保留勾选此项
    “工程为可扩展 Vitit 平台 (Project is an extensible Vitis platform)”复选框 保留勾选此项
    添加源代码 (Add Sources) 请勿对此屏幕执行任何更改
    添加约束 (Add Constraints) 请勿对此屏幕执行任何更改
    默认器件 (Default Part) 选择 开发板
    显示名称 (Display Name) Versal VMK180/VCK190 评估平台
    工程摘要 (Project Summary) 工程摘要 (Project Summary) 复查工程摘要信息
  5. 单击“完成 (Finish)”。这样即可关闭“New Project”Wizard,并在 Vivado 设计工具中打开您刚创建的工程。

注意:选择开发板时,请勾选版本号。对于 ES1 硅片,开发板版本为 1.0,对于量产硅片,开发板版本为 2.0。请根据开发板上的硅片选择相应的版本。

创建嵌入式处理器工程

要创建嵌入式处理器工程,请执行以下操作:

  1. 在 Flow Navigator 中的 IP integrator 下,单击“创建块设计 (Create Block Design)”。

    这样即可打开“Create Block Design”Wizard。

  2. 在“Create Block Design”Wizard 中使用以下信息选择相应的选项。

    表 2:系统属性设置

    Wizard 屏幕 系统属性 所用设置或命令
    创建块设计 (Create Block Design) 设计名称 (Design Name) edt_versal
    目录 (Directory) <Local to Project>
    指定源代码集合 (Specify Source Set) 设计源代码
  3. 单击“确定 (OK)”。

    这样会打开“框图 (Diagram)”窗口视图,并显示消息称此设计为空。首先,添加来自 IP 目录的 IP。

  4. 单击“添加 IP (Add IP)”按钮 

  5. 在搜索框中,输入 CIPS 以查找 Control, Interfaces and Processing System。

  6. 双击“Control, Interface & Processing System IP”以将其添加到块设计中。CIPS IP 核会显示在“Diagram”视图中,如下图所示:

在 Vivado Design Suite 中管理 Versal ACAP CIPS IP 核

现在,您已将 Versal™ ACAP 的处理器系统添加到设计中,接下来即可开始管理可用选项。

  1. 双击“模块框图 (Block Diagram)”窗口中的 versal_cips_0。

  2. 在“开发板 (Board)”选项卡中选择“cips fixed io”,如下图所示。

  3. 单击“OK”。默认情况下,CIPS 中未启用任何控件或接口。应用开发板预设即可在 CIPS 上启用相应外设,在开发板上这些外设的 MIO 管脚均已连接。

  4. 双击“模块框图 (Block Diagram)”窗口中的 versal_cips_0。这样会打开“重新自定义 IP (Re-customize IP)”对话框,如下图所示。

  5. 展开“PS-PMC”下拉菜单。单击“IO 配置 (IO Configuration)”,如下图所示。这样会打开“IO Configuration”对话框。

    I/O Configuration 会启用处理器系统中的外设,并允许为关联的 MIO 选择管脚分配。外设配置如下图所示:

    注意:块自动化设置 (Block Automation) 不会显式运行。当“开发板接口 (Board interface)”从“定制 (Custom)”更改为“cips fixed io”时,会将其禁用。

  6. 单击“OK”以关闭 CIPS GUI。

验证设计并生成输出

要验证设计并生成输出文件,请执行以下步骤:

  1. 右键单击“Block Diagram”视图中的空白区域并选择“验证设计 (Validate Design)”。

    或者,您可按 F6 键。这样会显示如下消息对话框:

  2. 在“Block Design”视图中,单击“源代码 (Sources)”选项卡。

  3. 单击“层级 (Hierarchy)”。

  4. 在“设计源代码 (Design Sources)”下,右键单击 edt_versal 并选择“创建 HDL 封装器 (Create HDL Wrapper)”。

    这样会打开“Create HDL Wrapper”对话框。请使用此对话框来为处理器子系统创建 HDL 封装器文件。

    提示:HDL 封装器是设计工具所需的顶层实体。

  5. 选择“让 Vivado 管理封装器并自动更新 (Let Vivado manage wrapper and auto-update)”,然后单击“OK”。

  6. 在“块设计源代码 (Block Design Sources)”窗口中的“Design Sources”下,展开 edt_versal_wrapper

  7. 右键单击标题为 edt_versal_i: edt_versal 的顶层模块框图 (edt_versal.bd) 并选择“生成输出文件 (Generate Output Products)”。

    这样会打开“Generate Output Products”对话框,如下图所示。

    注意:如果在 Windows 上运行 Vivado® Design Suite,则“运行设置 (Run Settings)”下的选项可能与此处所示选项不同。在此情况下,请使用默认设置继续执行操作。

  8. 单击“生成 (Generate)”。

    此步骤将为所选源代码构建所有必需的输出文件。例如,您无需手动为 IP 处理器系统创建约束。当您选中“Generate Output Products”时,Vivado 工具会自动为处理器子系统生成 XDC 文件。

  9. 当“Generate Output Products”进程完成后,请单击“OK”。单击底部窗口的“设计运行 (Design Runs)”选项卡,以查看“OOC 模块运行/综合/实现运行 (OOC Module Runs/Synthesis/Implementation runs)”。

  10. 在“Block Design Sources”窗口中,单击“IP 源代码 (IP Sources)”选项卡。您可在此处查看刚生成的输出文件,如下图所示。

综合、实现和生成器件镜像

请遵循以下步骤为设计生成器件镜像。

  1. 转至“Flow Navigator → 编程与调试 (Program and Debug)”,并单击“生成器件镜像 (Generate Device Image)”。

  2. 这样会显示“无实现结果可用 (No Implementation Results Available)”菜单。单击“Yes”。

  3. 这样会显示“启动运行 (Launch Run)”菜单。单击“确定 (OK)”。

    当“Device Image Generation”完成后,会显示“器件镜像生成已完成 (Device Image Generation Completed)”对话框。

  4. 单击“取消 (Cancel)”关闭此窗口。

  5. 生成器件镜像后,请导出硬件。

注意:以下步骤为可选,您可跳过这些步骤并转至导出硬件部分。这些步骤提供了生成器件镜像的详细流程,包括先运行综合与实现,然后再生成器件镜像。如需了解生成器件镜像的流程,请遵循以下提供的步骤进行操作。

  1. 转至“Flow Navigator → 综合 (Synthesis)”、单击“运行综合 (Run Synthesis)”,然后单击“OK”。

  2. 如果 Vivado® 提示您在启动综合前保存工程,请单击“保存 (Save)”。

    运行综合时,在右上角窗口中会显示其状态栏。在整个设计进程中,此状态栏会因各种原因而呈现假脱机状态。此状态栏表示进程正在后台运行。当综合完成后,会打开“综合已完成 (Synthesis Completed)”对话框。

  3. 选择“运行实现 (Run Implementation)”,然后单击“OK”。

    当实现完成后,会打开“实现已完成 (Implementation Completed)”对话框。

  4. 选择“Generate Device Image”,然后单击“OK”。

    当“Device Image Generation”完成后,会显示“器件镜像生成已完成 (Device Image Generation Completed)”对话框。

  5. 单击“取消 (Cancel)”关闭此窗口。

    生成器件镜像后,请导出硬件。

导出硬件

  1. 在 Vivado 工具栏中,选择“文件 (File) → 导出 (Export) → 导出硬件 (Export Hardware)”。这样会打开“导出硬件 (Export Hardware)”对话框。

  2. 选择“包含器件镜像 (Include device image)”,然后单击“下一步 (Next)”。

  3. 为导出的文件提供名称(或者使用提供的默认名称)并选择导出位置。单击“下一步 (Next)”。

    如果硬件模块 (Hardware Module) 已导出,则会显示一条警告消息。如果显示覆盖消息,则请单击“是 (Yes)”以覆盖现有 XSA 文件。

  4. 单击“完成 (Finish)”。

运行裸机 Hello World 应用

在此示例中,您将了解如何管理开发板设置、连接电缆、通过系统将电缆连接至开发板以及如何在赛灵思 Vitis 软件平台中通过 Arm Cortex-A72 上的片上存储器 (OCM) 和 Arm Cortex- R5F 上的紧密耦合存储器 (OCM) 来运行 Hello World 软件应用。

以下步骤演示了按要求连接电缆、通过系统将电缆连接至开发板以及启动 Vitis 软件平台的过程。

  1. 将电源线缆连接到开发板。

  2. 在 Windows 主机与目标开发板上的 USB JTAG 连接器之间连接 Micro USB 线。此线缆用于 USB 到串口之间的传输。

    注意:请确保 SW1 开关设置为 JTAG 启动模式,如下图所示。

  3. 使用电源开关给 VMK180/VCK190 评估板上电,如下图所示。

    注意:如果 Vitis 软件平台已运行,请跳转到步骤 6。

  4. 选择“工具 (Tools) → 从 Vivado 启动 Vitis IDE (Launch Vitis IDE from Vivado)”以启动 Vitis 软件平台,并设置工作空间路径,在此例中,路径为 C:\edt\edt_vck190

    或者,您可打开含默认工作空间的 Vitis 软件平台,稍后再通过如下方式来将其切换至正确的工作空间:选择“文件 (File) → 切换工作空间 (Switch Workspace)”,然后选择工作空间。

  5. 打开对应系统上分配的 COM 端口的串行通信实用工具。Vitis 软件平台提供了 1 个串行终端实用工具,在本教程中均使用此工具,选择“窗口 (Window) → 显示视图 (Show View) → 赛灵思 (Xilinx) → Vitis 串口终端 (Vitis Serial Terminal)”即可将其打开。

  6. 单击 Vitis 终端上下文中的“连接到串口 (Connect to a serial port)”按钮  以设置串行配置并连接此端口。

  7. 在 Windows 器件管理器中验证此端口的详细信息。

    UART-0 终端对应于含“Interface-0”的 Com-Port。对于此示例,默认已设置 UART-0 终端,因此对于 Com-Port,请选择含 interface-0 的端口。下图显示了 Versal™ ACAP 处理器系统的标准配置。

注意:您可使用外部终端串口控制台,如 Tera Term 或 Putty。您可在“控制面板 (Control Panel)”的“器件管理器 (Device Manager)”菜单中找到相关 COM 端口信息。

为 Arm Cortex-A72 上的 OCM 创建 Hello World 应用

以下步骤演示了为 Arm Cortex-A72 上的 OCM 创建 Hello World 应用的步骤。

  1. 选择“文件 (File) → 新建 (New) → 应用工程 (Application Project)”。这样会打开“新建应用工程 (Creating a New Application Project)”Wizard。如果这是首次启动 Vitis IDE,那么您可在“欢迎使用 (Welcome)”屏幕上选择“创建应用工程 (Create Application Project)”,如下图所示。

    注意:或者,您也可以选中“下次跳过欢迎屏幕 (Skip welcome page next time)”,这样即可每次启动时跳过欢迎页面。

  2. 根据以下信息在 Wizard 屏幕中选择相应的选项。

    表 3:系统属性设置

    Wizard 屏幕 系统属性 所用设置或命令
    平台 (Platform) 基于硬件创建新平台 (XSA) (Create a new platform from hardware (XSA)) 单击“Browse”按钮以添加 XSA 文件。
    平台名称 (Platform Name) vck190_platform
    应用工程详情 (Application Project Details) 应用工程名称 (Application project name) helloworld_a72
    选择系统工程 (Select a system project) +新建
    系统工程名称 (System project name) helloworld _system
    处理器 (Processor) psv_cortexa72_0
    域 (Domain) 选择域 (Select a domain) +新建
    名称 分配的默认名称
    显示名称 (Display Name) 分配的默认名称
    操作系统 (Operating System) 独立
    处理器 (Processor) psv_cortexa72_0
    架构 64 位
    模板 (Templates) 可用模板 (Available Templates) Hello World

    执行完上述步骤后,Vitis 软件平台就会为平台工程 (vck190_platform) 和系统工程 (helloworld_system) 创建开发板支持封装,其中包含名为 helloworld_a72 的应用工程,位于“Explorer”视图下。

  3. 右键单击 vck190_platform 并选择“Build Project”。或者,也可以单击 

    注意:如果无法看到 Project Explorer,请单击左侧面板上的复原图标  然后执行步骤 3。

修改 helloworld_a72 应用源代码

  1. 双击 helloworld_a72,然后双击 src 并选择 helloworld.c

    这样即可打开 helloworld_a72 应用的 helloworld.c 源代码文件。

  2. 修改 print 命令中的实参:

    print("Hello World from APU\n\r");
    print("Successfully ran Hello World application from APU\n\r");
    

  3. 单击  以构建该工程。

在平台工程中添加新的 RPU 域

以下步骤演示了为 Arm Cortex-R5F 上的 TCM 创建裸机 Hello World 应用的过程。此应用需链接至域。创建应用工程前,请确保目标域软件环境可用。如果此环境不可用,请使用以下步骤将所需的域添加到您的平台中。

  1. 双击“Vitis Explorer”视图中的 platform.spr 文件。(在此示例中,即 vck190_platform → platform.spr

  2. 单击主视图中的  按钮。

  3. 根据以下信息在“域 (Domain)”Wizard 屏幕中选择相应的选项。

    表 4:新建域设置

    Wizard 屏幕 字段 所用设置或命令
    域 (Domain) 名称 r5_domain
    显示名称 (Display Name) 自动生成
    操作系统 (OS) 独立
    处理器 (Processor) psv_cortexr5_0
    受支持的运行时 (Supported Runtimes) C/C++
    架构 32 位
  4. 单击“确定 (OK)”。这样即可完成配置新生成的 r5_domain。

    注意:此时您会注意到在“Explorer”视图中的平台旁出现了“过期 (Out-of-date)”修饰器。

  5. 单击  图标以构建平台。“Explorer”视图会在平台工程内显示生成的镜像文件。

为 Arm Cortex-R5F 创建独立应用工程

以下步骤演示了为 Arm Cortex-R5F 创建 Hello World 应用的步骤。

  1. 选择“文件 (File) → 新建 (New) → 应用工程 (Application Project)”。这样会打开“新建应用工程 (Creating a New Application Project)”Wizard。如果这是首次启动 Vitis IDE,那么您可在“Welcome”屏幕上选择“Create Application Project”。

    注意:或者,您也可以选中“下次跳过欢迎屏幕 (Skip welcome page next time)”,这样即可每次启动时跳过欢迎页面。

  2. 根据以下信息在 Wizard 屏幕中选择相应的选项。

    表 5:系统属性设置

    Wizard 屏幕 系统属性 所用设置或命令
    平台 (Platform) 从存储库中选择平台 选择 vck190_platform
    应用工程详情 (Application Project Details) 应用工程名称 (Application project name) helloworld_r5
    选择系统工程 (Select a system project) helloworld_system
    系统工程名称 (System project name) helloworld _system
    目标处理器 (Target processor) psv_cortexr5_0
    域 (Domain) 选择域 (Select a domain) r5_domain
    名称 r5_domain
    显示名称 (Display Name) r5_domain
    操作系统 (Operating System) 独立
    处理器 (Processor) psv_cortexr5_0
    模板 (Templates) 可用模板 (Available Templates) Hello World

    注意:这样即可在现有系统工程 helloworld_system 内生成独立应用 helloworld_r5。

  3. 右键单击 vck190_platform 并选择“Build Project”。或者,您也可以单击  以构建工程。

修改 helloworld_r5 应用源代码

  1. 展开 helloworld_r5 并双击 src,然后选择 helloworld.c 以打开 helloworld_r5 应用的 helloworld.c 源代码文件。

  2. 修改 print 命令中的实参:

    print("Hello World from RPU\n\r");
    print("Successfully ran Hello World application from RPU\n\r");
    

  3. 单击  以构建该工程。

为应用工程 helloworld_r5 修改应用连接器脚本

以下步骤演示了为应用工程 helloworld_r5 修改应用连接器脚本 (Application Linker Script) 的过程。

注意:Vitis 软件平台提供了连接器脚本生成器用于简化为 GCC 创建连接器脚本的任务。连接器脚本生成器 GUI 会检验目标硬件平台并确认可用的存储器部分。您只需将 ELF 文件中的不同代码和数据部分分配至不同存储器区域即可。

  1. 在“Vitis Explorer”视图中选择相应的工程 (helloworld_r5)。

    注意:如果平台上存在 DDR 内存,则连接器将使用 DDR 内存,否则将默认使用片上存储器 (OCM)。

  2. 在 src 目录中,删除默认 lscript.ld 文件。

  3. 右键单击 helloworld_r5 并单击“生成连接器脚本 (Generate Linker Script)”。或者,您也可以选择“Xilinx → Generate Linker Script”。

    注意:在“Generate Linker Script”对话框中,左侧为只读,但“按如下方式修改工程构建设置 (Modify project build settings as follows)”字段中的“输出脚本名称 (Output Script name)”和工程构建设置除外。在右侧,有 2 个用于选择存储器分配方式的选项:“基本信息 (Basic)”选项卡或“高级 (Advanced)”选项卡。这 2 个选项执行的任务是相同的;但“Basic”选项卡粒度较低,将所有类型的数据都作为“数据”来处理,并将所有类型的指令都作为“代码”来处理。这通常足以完成大部分任务。使用“Advanced”选项卡可将软件块精准分配到各种类型的存储器中。

  4. 针对“Basic”选项卡下的 3 个部分,在其下拉菜单中选择 psv_r5_0_atcm_MEM_0,然后单击“生成 (Generate)”。

    注意:这样将在应用工程的 src 文件夹中生成新的连接器脚本 (lscript.ld)。

  5. 右键单击 helloworld _system,然后选择“构建工程 (Build Project)”,或者单击 。这样即可在 helloworld_r5 工程的 Debug 文件夹内生成工程的 elf 文件。

在 Vitis 软件平台中使用系统调试器以 JTAG 模式运行应用

要运行应用,则必须创建“运行配置 (Run configuration)”以采集用于执行应用的设置。您可为整个系统工程创建一种运行配置,或者也可以为各独立应用创建不同运行配置。

为系统工程创建运行配置

  1. 右键单击系统工程 helloworld_system 并选择“运行方式 (Run As) → 运行配置 (Run Configurations)”。这样会打开“Run configuration”对话框。

  2. 双击“系统工程调试 (System Project Debug)”以创建“Run Configuration”。

    Vitis 软件平台会创建新的运行配置,其名为:SystemDebugger_helloworld_system。对于其余选项,请参阅下表。

    表 6:创建、管理和运行配置设置

    Wizard 选项卡 系统属性 所用设置或命令
    主视图 (Main) 工程 (Project) helloworld_system
    目标 (Target) → 硬件服务器 (Hardware Server) 随附到运行中的目标(本地)。如果尚未添加目标,请使用“新建 (New)”按钮添加目标。
  3. 单击“运行 (Run)”。

    注意:如果存在现有启动配置,则会显示 1 个对话框,询问您是否要终止此流程。单击“Yes”。这样会在终端上显示以下日志。

为系统工程内的单一应用创建运行配置

您可通过 2 种方式来为系统工程内的单一应用创建运行配置:

方法 I

  1. 右键单击系统工程 helloworld_system 并选择“运行方式 (Run As) → 运行配置 (Run Configurations)”。这样会打开“Run configuration”对话框。

  2. 双击“系统工程调试 (System Project Debug)”以创建“Run Configuration”。

    Vitis 软件平台会创建新的运行配置,其名为:SystemDebugger_helloworld_system_1。将其重命名为 SystemDebugger_helloworld_system_A72。对于其余选项,请参阅下表。

    表 7:创建、管理和运行配置设置

    Wizard 选项卡 系统属性 所用设置或命令
    主视图 (Main) 工程 (Project) helloworld_system
    仅调试所选应用 (Debug only selected applications) 选中此框
    所选应用 (Selected Applications) 单击“编辑 (Edit)”按钮并勾选 helloworld_a72
    目标 (Target) → 硬件服务器 (Hardware Server) 随附到运行中的目标(本地)。如果尚未添加目标,请使用“新建 (New)”按钮添加目标。
  3. 单击“应用 (Apply)”。

  4. 单击“运行 (Run)”。

    注意:如果存在现有运行配置,则会显示 1 个对话框,询问您是否要终止此流程。单击“Yes”。这样会在终端上显示以下日志。

注意:APU 和 RPU 应用都会打印在相同控制台上,因为这两种应用使用的都是 UART0。应用软件会针对 APU 和 RPU 向 PS 部分的 UART0 外设发送 hello world 字符串。这些 hello world 字符串将从 UART0 逐字节发送到主机上运行的串行终端应用,在主机上会将其显示为字符串。

方法 II

  1. 右键单击应用工程 hello_world_r5 并选择“Run As → Run Configurations”。这样会打开“Run configuration”对话框。

  2. 双击“单工程调试 (Single Project Debug)”以创建运行配置。

    Vitis 软件平台会创建新的运行配置,其名为:Debugger_helloworld_r5-Default。对于其余选项,请参阅下表。

    表 8:创建、管理和运行配置设置

    Wizard 选项卡 系统属性 所用设置或命令
    主视图 (Main) 调试类型 (Debug Type) 独立应用调试 (Standalone Application Debug)
    连接 (Connection) 连接至开发板。如果尚未连接,请在此处选择连接。
    工程 (Project) helloworld_r5
    配置 (Configuration) 调试
  3. 单击“应用 (Apply)”。

  4. 单击“运行 (Run)”。

注意:如果存在现有运行配置,则会显示 1 个对话框,询问您是否要终止此流程。单击“Yes”。这样会在终端上显示以下日志。

NoC(和 DDR)IP 核配置

本章节描述了 NoC(和 DDR)配置以及搭配本章前文中配置的 CIPS 使用所需的相关连接的信息。Versal™ ACAP CIPS IP 核允许您配置 2 个基于多核 Arm® Cortex™-A72 的超标量 APU、2 个 Arm Cortex™-R5F RPU、1 个平台管理控制器 (PMC) 和 1 个 CCIX PCIe® 模块 (CPM)。NoC IP 核支持配置 NoC 并启用 DDR 内存控制器。

在现有工程内配置 NoC IP 核

对于此示例,请启动 Vivado® Design Suite 和工程,并按工程示例:使用 Versal ACAP 创建全新的嵌入式工程中所示完成该工程的基本 CIPS 配置。

配置设计

要配置设计,请执行以下步骤:

  1. 打开工程示例:使用 Versal ACAP 创建全新的嵌入式工程中创建的设计 edt_versal.xpr

  2. 然后打开块设计 edt_versal.bd

  3. 在 Vivado Design Suite 的 Tcl 控制台中输入以下命令:

    apply_bd_automation -rule xilinx.com:bd_rule:versal_cips -config { apply_board_preset {0} configure_noc {Add new AXI NoC} num_ddr {1} pcie0_lane_width {None} pcie0_mode {None} pcie0_port_type {Endpoint Device} pcie1_lane_width {None} pcie1_mode {None} pcie1_port_type {Endpoint Device} pl_clocks {None} pl_resets {None}}  [get_bd_cells versal_cips_0]
    
  4. 按 Enter 键。

  5. 打开 AXI NoC IP。

  6. 在“开发板 (Boards)”选项卡中,按下图所示配置设置,然后单击“OK”。

  7. 单击设计中的 sys_clk_0_0 管脚。

  8. 在“外部接口属性 (External Interface Properties)”窗口中,选择“属性 (Properties) → 配置 (CONFIG) → FREQ_HZ”,将频率更改为 200 MHz。

    这样即可添加 AXI NoC IP 以供 DDR 访问。

验证设计并生成输出

要验证设计并生成输出,请执行以下步骤:

  1. 右键单击“Diagram”窗口的空白区域,并选择“Validate Design”。或者,您可按 F6 键。这样会打开含以下消息的对话框:

  2. 单击“OK”以关闭此消息。

  3. 在“块设计源代码 (Block Design Sources)”窗口中的“Design Sources”下,展开 edt_versal_wrapper

  4. 右键单击标题为 edt_versal_i: edt_versal 的顶层模块框图 (edt_versal.bd) 并选择“Generate Output Products”。

    这样会打开“Generate Output Products”对话框,如下图所示。

    注意:如果在 Windows 上运行 Vivado Design Suite,则“Run Settings”下的选项可能与此处所示选项不同。在此情况下,请使用默认设置继续执行操作。

  5. 单击“生成 (Generate)”。

    此步骤将为所选源代码构建所有必需的输出文件。例如,您无需手动为 IP 处理器系统创建约束。当您选中“Generate Output Products”时,Vivado 工具会自动为处理器子系统生成 XDC 文件。

  6. 当“Generate Output Products”进程完成后,请单击“OK”。单击底部窗口的“设计运行 (Design Runs)”选项卡,以查看“OOC Module Runs/Synthesis/Implementation runs”。

  7. 在“Sources”窗口中,单击“IP Sources”视图。您可在此处查看刚生成的输出文件,如下图所示。

综合、实现和生成器件镜像

请遵循以下步骤为设计生成器件镜像。

  1. 转至“Flow Navigator → 编程与调试 (Program and Debug)”,并单击“生成器件镜像 (Generate Device Image)”。

  2. 这样会显示“无实现结果可用 (No Implementation Results Available)”菜单。单击“Yes”。

  3. 这样会显示“启动运行 (Launch Run)”菜单。单击“确定 (OK)”。

    当“Device Image Generation”完成后,会显示“器件镜像生成已完成 (Device Image Generation Completed)”对话框。

  4. 单击“取消 (Cancel)”关闭此窗口。

  5. 生成器件镜像后,请导出硬件,并单击“OK”。

注意:以下步骤为可选,您可跳过这些步骤并转至导出硬件部分。这些步骤提供了生成器件镜像的详细流程,包括先运行综合与实现,然后再生成器件镜像。如需了解生成器件镜像的流程,请遵循以下提供的步骤进行操作。

  1. 转至“Flow Navigator → Synthesis”,然后单击“Run Synthesis”。

  2. 如果 Vivado® 提示您在启动综合前保存工程,请单击“保存 (Save)”。

    运行综合时,在右上角窗口中会显示其状态栏。在整个设计进程中,此状态栏会因各种原因而呈现假脱机状态。此状态栏表示进程正在后台运行。当综合完成后,会打开“综合已完成 (Synthesis Completed)”对话框。

  3. 选择“运行实现 (Run Implementation)”,然后单击“OK”。

    当实现完成后,会打开“实现已完成 (Implementation Completed)”对话框。

  4. 选择“Generate Device Image”,然后单击“OK”。

    当“Device Image Generation”完成后,会显示“器件镜像生成已完成 (Device Image Generation Completed)”对话框。

  5. 单击“取消 (Cancel)”关闭此窗口。

    生成器件镜像后,请导出硬件。

导出硬件

  1. 在 Vivado 主菜单中,选择“File→ Export → Export Hardware”。这样会打开“导出硬件 (Export Hardware)”对话框。

  2. 选择“包含比特流 (Include bitstream)”,然后单击“Next”。

  3. 为导出的文件提供名称(或者使用提供的默认名称)并选择导出位置。单击“下一步 (Next)”。

    如果硬件模块已导出,则会显示一条警告消息。如果显示覆盖消息,则请单击“是 (Yes)”以覆盖现有 XSA 文件。

  4. 单击“完成 (Finish)”。

在 DDR 内存上运行裸机 Hello World 应用

在此示例中,您将了解如何管理开发板设置、连接电缆、通过 PC 将电缆连接至开发板以及如何在赛灵思 Vitis 软件平台中通过 Arm Cortex-A72 和 Arm Cortex- R5F 上的 DDR 内存来运行 Hello World 软件应用。

您将创建与运行裸机 Hello World 应用中相似的新 Vitis 工程,区别在于此次将使用默认连接器脚本,该脚本将引用 DDR 内存。

  1. 管理开发板设置、连接电缆、通过系统将电缆连接至开发板并按运行裸机 Hello World 应用中的步骤 1 至 7 所述启动 Vitis 软件平台。

    注意:需为此示例创建新的 Vitis 工作空间。请勿使用运行裸机 Hello World 应用中创建的工作空间。

  2. 为 Arm Cortex-A72 上运行的应用创建裸机 Hello World 系统工程,并按为 Arm Cortex-A72 上的 OCM 创建 Hello World 应用的步骤 1 到 3 和修改 helloworld_a72 应用源代码中的步骤 1 到 3 中所述,修改此应用的源代码。

  3. 右键单击 helloworld _system 并选择“Build Project”,或者单击  以在应用工程的 Debug 文件夹中生成项目 elf 文件。

  4. 按在平台工程中添加新的 RPU 域的步骤 2 中所述,为平台创建另一个 RPU 域。

  5. 在现有系统工程内创建在 Arm Cortex-R5F 上运行的裸机 Hello World 应用(在步骤 2 中构建),并按为 Arm Cortex-R5F 创建独立应用工程的步骤 1 到 3 和修改 helloworld_r5 应用源代码的步骤 1 到 3 中所述,修改此应用的源代码。

  6. 右键单击 helloworld _system 并选择“Build Project”,或者单击  以在应用工程的 Debug 文件夹中生成项目 elf 文件。

请参阅在 Vitis 软件平台中使用系统调试器以 JTAG 模式运行应用以了解如何在 Vitis 软件平台中使用系统调试器以 JTAG 模式运行以上构建的应用,并参阅为独立应用生成启动镜像以了解如何为独立应用生成启动镜像。

© 2020 年赛灵思公司版权所有。

使用 Vitis 软件平台进行调试

本章描述了对您所执行的设计流程可能出现的各种问题进行调试的方法。第一个选项是使用赛灵思 Vitis™ 软件平台进行调试。

Vitis 软件平台调试器提供了下列调试功能:

  • 支持在 Arm® Cortex™-A72、Arm Cortex-R5F 和 MicroBlaze™ 处理器架构(异构多处理器硬件系统调试)上调试程序。

  • 支持在硬件开发板上调试程序。

  • 支持在远程硬件系统上进行调试。

  • 提供功能丰富的 IDE 用于调试程序。

  • 提供工具命令语言 (Tcl) 界面,用于运行测试脚本和自动化操作。

Vitis 软件平台调试器支持您在程序执行时查看其中进行的操作。您可设置断点或观察点以停止处理器、单步调试程序执行、查看程序变量和堆栈以及查看系统中存储器的内容。

Vitis 软件平台支持通过赛灵思系统调试器进行调试。

赛灵思系统调试器

赛灵思 Vitis™ 软件平台调试器支持您对代码逐行进行单步调试。您可设置断点或观察点以停止处理器、单步调试程序执行、查看程序变量和堆栈以及查看系统中存储器的内容。

调试器支持通过单应用调试和 GNU 调试器 (GDB) 来进行调试。赛灵思自定义系统调试器衍生自开源工具并与 Vitis 软件平台集成。

赛灵思系统调试器使用赛灵思 hw_server 作为底层调试引擎。Vitis 软件平台可将每项用户界面操作转换为一连串目标通信框架 (TCF) 命令。随后,它会对系统调试器的输出进行处理,以显示所调试的程序的当前状态。它可使用赛灵思 hw_server 与硬件上的处理器进行通信。调试工作流程如下图所示。

图 1:系统调试器流程

调试工作流程由以下几个部分组成。

  • 可执行 ELF 文件:要调试应用,您必须使用专为调试而编译的 elf 文件。调试用 elf 文件包含额外调试信息,以供调试器在源代码与该源代码所生成的二进制文件之间建立直接关联。要管理构建配置,请右键单击软件应用并选择“构建配置 (Build Configurations) → 管理 (Manage)”。

  • 调试配置:要启动调试会话,您必须在 Vitis 软件平台中创建调试配置。此配置可捕获启动调试会话所需的选项,包括可执行文件名称、要调试的处理器目标及其它信息。要创建调试配置,请右键单击软件应用并选择“调试方式 (Debug As) → 调试配置 (Debug Configurations)”。

  • Vitis 软件平台调试透视图:通过使用“调试 (Debug)”透视图,您就可以在 Workbench 中管理程序的调试或运行。您可对程序的执行进行如下控制:包括设置断点、暂挂已启动的程序、单步调用代码并检验变量内容等。要查看“Debug”透视图,请依次选择“窗口 (Window) → 打开透视图 (Open Perspective) → 调试 (Debug)”。

在 Vitis 软件平台中,修改代码、构建可执行文件和调试程序的整个流程是可重复的。

注意:如果您在编译后对源代码进行编辑,则会更改行号,因为调试信息与源代码之间直接相连。同样,对已最优化的二进制文件进行调试还可能导致执行追踪过程中出现意外的跳步。

使用 Vitis 软件平台调试软件

此示例描述了如何调试 hello world 应用。

如果您尚未在 APU 或 RPU 上创建 hello world 应用,请遵循运行裸机 Hello World 应用或在 DDR 内存上运行裸机 Hello World 应用中的步骤创建此应用。

创建 Hello World 应用后,请逐步执行以下示例,使用 Vitis™ 软件平台来调试软件。

  1. 右键单击应用,然后单击“构建工程 (Build Project)”以构建应用。

  2. 右键单击应用工程并选择“调试方式 (Debug As) → 在硬件上启动(单应用调试)(Launch on Hardware (Single Application Debug))”,如下图所示。

    注意:“Debug”透视图也可通过选择“窗口 (Window) → 调试透视图 (Debug Perspective)”来启动。

    注意:此页面中所示地址可能与您的系统上所示地址略有不同。

    处理器当前置于 main() 方法开头,且程序执行暂挂于行 0x00000000fffc0cf0。您可在“反汇编 (Disassembly)”视图中确认此信息,在此视图中显示汇编级程序执行同样暂挂于 0x00000000fffc0cf0。

    注意:如果“Disassembly”视图未显示,请选择“窗口 (Window) → 反汇编 (Disassembly)”。

  3. helloworld.c 窗口同样显示执行暂挂于 C 语言代码中的首个可执行文件行上。选择“寄存器 (Registers)”视图可确认程序计数器 pc 寄存器包含 0x00000000fffc0cf0。

    注意:如果“Registers”视图未显示,请选择“窗口 (Window) → 寄存器 (Registers)”。

  4. 双击 helloworld.c 窗口中显示 printf("Hello World from APU\n\r"); 的代码行边缘(行号左侧)处。这样即可在 printf 命令处设置断点。要确认断点,请复查“断点 (Breakpoints)”视图。

    注意:如果“Breakpoints”视图未显示,请选择“窗口 (Window) → 断点 (Breakpoints)”。

  5. 选择“运行 (Run) → 单步进入 (Step Into)”以便对 init_platform() 例程执行单步进入。程序执行暂挂于 0x00000000fffc0cf0 位置。调用堆栈当前深度为 2 层。

  6. 选择“运行 (Run) → 恢复 (Resume)”以便继续运行程序直至断点。

    这样程序执行会止于包含 printf 命令的代码行。“Disassembly”和“Debug”窗口均显示程序执行止于 0x00000000fffc0cf4。

    注意:如果您对 helloworld 源代码执行了任何修改,那么您的调试窗口中的执行地址可能与此处所示不同。

  7. 请选择“Run → Resume”以便运行程序直至结束。

    当程序完成后,“Debug”窗口显示程序暂挂于“exit”例程中。如果您在调试器控制下运行程序,就会出现此结果。

  8. 请反复多次运行您的代码。尝试单步步进、检验存储器、断点、修改代码并添加 print 语句。尝试添加和移动视图。

    提示:您可使用 Vitis 软件平台调试快捷键来执行单步进入 (step-into) (F5)、单步返回 (step-return) (F7)、单步跳过 (step-over) (F6) 和恢复 (resume) (F8)。或者,您可使用工具栏按钮。

使用 XSCT 执行调试

您可在命令行模式下使用封装在 XSCT 内的 XSDB 来执行调试。此示例描述了如何使用 XSCT 来对裸机应用 hello_world_r5 执行调试。

以下步骤指示如何在 Arm Cortex-R5F 上使用 XSCT 加载裸机应用。

此示例仅用于演示使用 XSDB/XSCT 进行命令行调试时可能出现的情况。根据要求,您可在 XSCT 中选择使用系统调试器图形界面或使用命令行调试器来调试代码。所有 XSCT 命令均可脚本化,对于本示例中涵盖的命令都是如此。

设置目标

  1. 在目标上的 USB-JTAG 连接器与主机上的 USB 端口之间使用 USB 线进行连接。

  2. 在“JTAG 启动 (JTAG Boot)”模式下设置开发板,其中 SW1 设置如下图所示。

  3. 使用电源开关 SW13 给开发板上电。

  4. 单击 Vitis 软件平台工具栏中的“XSCT 控制台 (XSCT Console)”按钮,以打开“XSCT Console”视图。或者,也可依次单击“Xilinx → XSCT Console”以打开“XSCT Console”视图。

  5. 在“XSCT Console”视图中,使用 connect 命令通过 JTAG 连接至目标:

    xsct% connect

    connect 命令会返回连接的通道 ID。

  6. 加载 pdi/bin 文件:

    device program <path to .pdi file>

    注意:在 C:\edt\edt_versal\edt_versal.runs\impl_1\edt_versal_wrapper.pdi 中可找到此 PDI 文件。在 Windows 下,路径名应以括号(如,{C:\path\to\file.pdi})括起,以避免反斜杠被视为转义字符。对于 Linux 则无此要求,因为 Linux 使用正斜杠。

使用 XSCT 加载应用

以下是使用 XSCT 加载应用的步骤。

  1. 运行 xsct% targets

    targets 命令可列出可用目标,并允许您通过目标 ID 来选择相应目标。在 JTAG 链上发现目标时,会为其分配 ID,因此目标 ID 可能随会话不同而变。

    注意:对于非交互式使用(例如,脚本编制),可使用 -filter 选项来选择目标,以代替按 ID 选择目标。

    下图中列出了目标。

  2. 现在,请在 Arm® Cortex-R5F 核 0 上下载 hello_world_r5 应用。

  3. 选择 RPU Cortex™-R5F 核 0 目标 ID。

    xsct% targets 3
    xsct% rst -processor

    rst -processor 命令用于清除个别处理器核上的复位。此步骤的重要性在于当 Versal™ ACAP 启动 JTAG 启动模式时,所有 Cortex- A72 核与 Cortex-R5F 核都保持处于复位状态。您必须清除每个核上的复位,然后才能在这些核上执行调试。XSDB 中的 rst 命令可用于清除复位。

    注意:对于包含当前目标作为子项的组(例如,APU 或 RPU),运行 rst -cores 命令即可清除组中的所有处理器核上的复位。例如,如果当前目标为 Cortex-A72 #0,那么 rst -cores 可清除 APU 中的所有 Cortex-A72 核上的复位。

    xsct% dow {C:\edt\edt_vck190\helloworld_r5\Debug\helloworld_r5.elf}

    xsct% dow C:/edt/edt_vck190/helloworld_r5/Debug/helloworld_r5.elf

    此时,您可看到来自 elf 文件的各段均按顺序下载。下载成功后会显示 XSCT 提示。现在,请配置串口终端(Tera Term、Minicom 或用于 UART-0 USB 串口连接的 Vitis 软件平台串口终端接口)。

串口终端配置

  1. 根据所用主机使用 Tera Term 或 Minicom 启动终端会话,COM 端口和波特率如下图所示。

  2. 对于端口设置,请验证器件管理器中的 COM 端口。VCK190 评估板提供了 3 个公开的 USB UART 接口。请选择与编号最低的接口关联的 COM 端口。在此例中,对于 UART-0,请选择含 interface-0 的 com-port。

使用 XSCT 运行和调试应用

  1. 运行应用前,请在 main() 处设置断点。

    xsct% bpadd -addr &main

    此命令会返回断点 ID。您可使用 bplist 命令验证设置的断点。如需获取有关 XSCT 中的断点的详细信息,请在 XSCT 中输入 help breakpoint

  2. 恢复处理器核。

    xsct% con

    当核命中断点时,会显示以下消息。

    xsct% Info: Cortex-R5 \#0 Stopped at 0x10021C (Breakpoint)

  3. 此时,当核停止后,您即可查看寄存器。

    xsct% rrd

  4. 查看局部变量。

    xsct% locals

  5. 单步跳过源代码中的一行,并查看堆栈追踪。

    xsct% nxt
    Info: Cortex-R5 #0 Stopped at 0x100490 (Step)
    xsct% bt

    您可使用 help 命令来查找其它选项。

    }

    您可使用 help running 命令获取可用于利用 XSCT 运行或调试应用的选项列表。

  6. 现在,您可运行代码。

    xsct% con

    这样即可在 UART-0 终端上查看 Cortex-R5F 应用打印消息。

© 2020 年赛灵思公司版权所有。

启动和配置

本章用于演示如何为 Versal™ ACAP 集成和加载引导加载程序、裸机应用(针对 APU/RPU)和 Linux 操作系统。本章将讨论下列主题:

  • 系统软件:PLM、Arm® 可信固件 (ATF)、U-Boot

  • 为独立应用生成启动镜像的步骤。

  • SD 启动的启动顺序以及 QSPI 和 OSPI 启动模式。

您可使用赛灵思 Vitis™ 软件平台和 PetaLinux 工具流程来实现这些配置。第 2 章:Versal ACAP CIPS 和 NoC (DDR) IP 核配置主要围绕如何在 PS 中为每个处理器单元创建软件块,而本章则解释如何在更大规模的系统中加载这些块。

系统软件

以下系统软件块适用于本章中的大部分启动和配置。

Platform Loader and Manager

Platform Loader and Manager (PLM) 软件在 Versal ACAP 的平台管理控制器 (PMC) 块中的某一专用处理器上运行。它负责启动和运行时间管理,包括器件的平台管理、错误管理、部分重配置以及子系统重新启动。PLM 可重新加载镜像,并可加载部分 PDI 和服务中断。PLM 会从启动源代码读取可编程器件镜像,PLM 软件可配置系统组件(包括 NoC 初始化、DDR 内存初始化、可编程逻辑和处理器系统),然后完成器件启动。

U-Boot

U-Boot 充当辅助启动加载器。在 PLM 交接后,U-Boot 会将 Linux 加载到 Arm A72 APU 上并基于开发板配置对处理器系统中的其余外设进行配置。U-Boot 可从不同存储器来源(如 eMMC、SATA、TFTP、SD 和 QSPI)访存镜像。U-Boot 可使用 PetaLinux 工具流程来进行配置和构建。

Arm 可信固件

Arm 可信固件 (ATF) 是透明的裸机应用层,在 APU 上的异常级别 3 (Exception Level 3, EL3) 中执行。ATF 包含安全监控 (Secure Monitor) 层,用于在安全环境和非安全环境之间进行切换。鉴于需调用 Secure Monitor 和实现“可信开发板启动要求 (Trusted Board Boot Requirements, TBBR)”,导致 ATF 层成为在 Versal ACAP 的 APU 上加载 Linux 的必备条件。PLM 可加载将由 APU 执行的 ATF,ATF 将在 EL3 中保持运行并等待服务请求。PLM 还可将 U-Boot 加载到将由 APU 执行的 DDR 中,U-Boot 将在 APU 上以 SMP 模式加载 Linux 操作系统。默认情况下,ATF (bl31.elf) 在 PetaLinux 中执行构建,此文件可在 PetaLinux 工程镜像目录中找到。

为独立应用生成启动镜像

Vitis 软件平台不支持为 Versal 架构自动创建启动镜像。要生成可启动镜像,请使用 Bootgen,它是包含在 Vitis 软件平台封装内的命令行实用工具。Bootgen 的主要功能是用于集成可启动镜像的各分区。Bootgen 使用 Bootgen 镜像格式 (BIF) 文件作为输入,并以二进制 BIN 或 PDI 格式生成单一文件镜像。它可输出单一文件镜像,此文件镜像可加载到非易失性存储器 (NVM)(QSPI 或 SD 卡)中。请使用以下步骤生成 PDI/BIN 文件:

  1. 如果尚未打开“XSCT Console”视图,请在 Vitis IDE 中单击“窗口 (Window) → 显示视图 (Show View)”打开此视图。在“Show View”Wizard 的搜索栏中输入 xsct console。单击“Open”打开控制台。

  2. 创建文件夹,在“XSCT Console”中输入以下命令以便在该文件夹中生成启动镜像:

    mkdir bootimages
    cd bootimages/
    
  3. 将 <design-package>/<board-name>/standalone/<cips or cips_noc>/<apu or rpu>/ 目录中存在的 sd_boot.bif 文件、<Vitis platform project>/hw/<.pdi-file> 中存在的 PDI 文件以及 <Vitis application-project>/Debug 文件夹中存在的应用 elf 文件复制到步骤 2 中创建的文件夹内。

    注意:如果需要,您可在自己选择的文本编辑器内打开 sd_boot.bif 文件,并根据您的 Vitis 工程修改 PDI 或 elf 的名称。

  4. 在“XSCT Console”视图中运行以下命令。

    bootgen -image <bif filename>.bif -arch versal -o BOOT.BIN

    在“XSCT Console”视图中会显示以下日志。

SD 启动模式的启动顺序

以下步骤演示了 SD 启动模式的启动顺序。

  1. 要验证镜像,请将所需镜像复制到 SD 卡:

    • 对于独立应用,请将 BOOT.BIN 复制到 SD 卡。

    • 对于 Linux 镜像,请浏览至 <plnx-proj-root>/images/linux 并将 BOOT.BINimage.ub 和 boot.scr 复制到 SD 卡。

    注意:您可使用发布的封装路径中所含现成测试镜像 <design-package>/<vck190 or vmk180>/linux/bootimages 来启动 VCK190/VMK180 评估板,或者,还可参阅工程示例:使用 PetaLinux 创建 Linux 镜像,使用 PetaLinux 工具构建您自己的 Linux 镜像集合。

  2. 将 SD 卡加载到 VMK180/VCK190 评估板上的 J302 连接器中。

  3. 将 Micro USB 线一端连接到 VMK180/VCK190 评估板上的 Micro USB 端口 (J207),并将另一端连接到主机上打开的 USB 端口中。

  4. 按下图所示设置 SW1 开关,以将评估板配置为以 SD 启动模式来启动。

  5. 将 12V 电源连接到 VMK180/VCK190 6 针 Molex 连接器。

  6. 根据所用主机使用 Tera Term 或 Minicom 启动终端会话。为系统设置 COM 端口和波特率,如下图所示。

  7. 对于端口设置,请验证器件管理器中的 COM 端口并选择含 interface-0 的 com 端口。

  8. 使用电源开关 (SW13) 开启 VMK180/VCK190 评估板电源。

    注意:对于独立镜像,在终端上会显示相应的日志。对于 Linux 镜像,在终端上启动顺序执行完成后,您可使用 user: root 和 pw: root 登录。随后,在终端上运行 gpiotest。这样您将看到如下图所示的日志。

QSPI 启动模式的启动顺序

本节旨在演示 QSPI 启动模式的启动顺序。对此,您需要按下图所示方式连接 QSPI 子卡(器件编号 X_EBM-01,REV_A01):

图 2:VCK190 上的子卡

注意:对于独立应用,请将 boot.bin 复制到 SD 卡。对于 Linux 镜像,您可使用发布的封装路径中所含现成测试镜像 <design-package>/<vck190 or vmk180>/linux/bootimages 来启动 VCK190/VMK180 评估板,或者,还可参阅工程示例:使用 PetaLinux 创建 Linux 镜像,使用 PetaLinux 工具构建您自己的 Linux 镜像集合。

您需遵循下列步骤将镜像刷写到子卡上:

  1. 请在子卡断电情况下安装子卡。

  2. 将启动模式开关 SW1 设置为 ON-OFF-OFF-OFF,如下图所示。

  3. 将 SD 卡插入开发板上的 SD 卡槽中,如下所示:

  4. 给开发板上电。在 U-Boot 阶段,出现“Hit any key to stop autoboot:”消息时,请按任意键,然后运行以下命令以将镜像刷写到 QSPI 子卡上:

    sf probe 0 0 0
    sf erase 0x0 0x10000000
    fatload mmc 0 0x80000 boot.bin
    sf write 0x80000 0x0 ${filesize}
    fatload mmc 0 0x80000 image.ub
    sf write 0x80000 0xF00000 0x6400000
    fatload mmc 0 0x80000 boot.scr
    sf write 0x80000 0x7F80000 0x999
    
  5. 刷写完镜像后,关闭板上电源开关,将启动模式管脚设置更改为 QSPI 模式,即 ON-OFF-ON-ON,如下所示:

  6. 重新给开发板上电。这样,开发板即可使用 QSPI 闪存中的镜像完成启动。

© 2020 年赛灵思公司版权所有。

使用标量引擎和自适应引擎的系统设计示例

本章将逐步指导您使用可用的工具和受支持的软件块来构建基于 Versal™ 器件的系统。本章演示了如何利用 Vivado® 工具并使用 PL AXI GPIO 来创建嵌入式设计。其中还演示了如何在 Versal 器件上为基于 Arm® Cortex™-A72 核的 APU 配置并构建 Linux 操作系统。

在本章中还提供了 PetaLinux 工具的使用示例。

设计示例:使用 AXI GPIO

Linux 应用使用基于 PL 的 AXI GPIO 接口来监控开发板的 DIP 开关,并对开发板 LED 进行相应的控制。LED 应用可在 VMK180/VCK190 上运行。

配置应用

此设计中的第一步是配置 PS 和 PL 部分。您可使用 Vivado® IP integrator 执行此配置。首先从 Vivado IP 目录添加所需 IP,然后将各组件连接到 PS 子系统中的各块。要配置硬件,请执行以下步骤:

注意:如果已打开 Vivado® Design Suite,请跳至步骤 3。

  1. 打开您在第 2 章:Versal ACAP CIPS 和 NoC (DDR) IP 核配置中创建的 Vivado 工程。

    C:/edt/edt_versal/edt_versal.xpr

  2. 在 Flow Navigator 中的 IP integrator 下,单击“打开块设计 (Open Block Design)”。

  3. 右键单击模块框图,然后选择“添加 IP (Add IP)”。

连接 IP 块以创建完整系统。

要连接 IP 块以创建系统,请遵循以下步骤进行操作。

  1. 双击 Versal™ ACAP CIPS IP 核。

  2. 单击“PS-PMC → PL-PS 接口 (PS-PMC → PL-PS Interfaces)”。

  3. 启用 M_AXI_FPD 接口,将“PL 复位数 (Number of PL Resets)”设置为 1,如下图所示。

  4. 单击“时钟配置 (Clock Configuration)”,然后单击“输出时钟 (Output Clocks)”选项卡。

  5. 展开“PMC 域时钟 (PMC Domain Clocks)”。然后展开“PL 架构时钟 (PL Fabric Clocks)”。按下图所示,配置 PL0_REF_CLK 时钟:

  6. 单击“OK”以完成配置并返回至模块框图。

添加并配置 IP 地址

要添加并配置 IP 地址,请执行以下操作:

  1. 右键单击模块框图,然后从 IP 目录中选择“添加 IP (Add IP)”。

  2. 搜索 AXI GPIO,然后双击“AXI GPIO IP”以将其添加到您的设计中。

  3. 将另一个 AXI GPIO IP 实例添加到设计中。

  4. 单击“块设计 (Block Design)”视图中的“运行自动连接 (Run Connection Automation)”。

    这样会打开“Run Connection Automation”对话框。

  5. 在“Run Connection Automation”对话框中,选择“全部自动化 (All Automation)”复选框。

    这样即可选中自动操作 AXI GPIO IP 的所有端口。

  6. 单击 axi_gpio_0 的“GPIO”,然后将“选择开发板器件接口 (Select Board Part Interface)”设置为“定制 (Custom)”,如下所示。

  7. 采用与 axi_gpio_1 的 GPIO 相同的设置。

  8. 单击 axi_gpio_0 的“S_AXI”。按下图所示设置配置:

  9. 采用与 axi_gpio_1 的 S_AXI 相同的配置。此配置将设置如下连接:

    • 将 AXI_GPIO 的 S_AXI 连接到 CIPS 的 M_AXI_FPD,在 CIPS 与 AXI GPIO IP 之间采用 SmartConnect 作为桥接 IP。

    • 启用处理器系统复位 IP。

    • 将 pl0_ref_clk 连接至处理器系统复位 AXI GPIO 和 SmartConnect IP 块。

    • 将 SmartConnect 和 AXI GPIO 的复位连接至处理器系统复位 IP 的 peripheral_aresetn。

  10. 单击“确定 (OK)”。

  11. 单击“Block Design”窗口中的“Run Connection Automation”,然后选中“All Automation”复选框。

  12. 单击“ext_reset_in”并配置设置,如下所示。

    这样即可将处理器系统复位 IP 的 ext_reset_in 连接到 CIPS 的 pl_resetn。

  13. 单击“确定 (OK)”。

  14. 断开 SmartConnect IP 的 aresetn 与处理器系统复位 IP 的 peripheral_aresetn 之间的连接。

  15. 将 SmartConnect IP 的 aresetn 连接到处理器系统复位 IP 的 interconnect_aresetn

  16. 双击 axi_gpio_0 IP 以将其打开。

  17. 转至“IP 配置 (IP Configuration)”选项卡并按下图所示配置设置。

  18. 采用与 axi_gpio_1 相同的设置。

  19. 再添加 4 个 slice IP 实例。

  20. 删除 AXI GPIO IP 的外部管脚,并展开接口。

  21. 将 axi_gpio_0 的输出管脚 gpio_io_0 连接到 slice 0 和 slice 1。

  22. 同样,将 axi_gpio_1 的输出管脚 gpio_io_0 连接到 slice 2 和 slice 3。

  23. 将 slice IP 的输出设置为“外部 (External)”。

  24. 按下图所示配置每个 slice IP。

总体块设计如下图所示:

验证设计并生成输出

要验证设计并生成输出文件,请执行以下步骤:

  1. 返回“Block Design”视图并保存块设计(按 Ctrl+S 键)。

  2. 右键单击“Block Diagram”视图中的空白区域,并选择“验证设计 (Validate Design)”。或者,您可按 F6 键。

    这样会打开含以下消息的对话框:

  3. 单击“OK”以关闭此消息。

  4. 单击“Sources”窗口。

    1. 展开“约束 (Constraints)”。
    2. 右键单击“constrs_1-> 添加源代码 (ADD Sources)”。这样会打开“Add Sources”窗口。
    3. 选择“添加或创建约束 (Add or Create Constraints)”选项,然后单击“下一步 (Next)”。
    4. 选择要添加的 .xdc 文件。

      注意:约束文件包含在封装内一起提供,位于 pl_axigpio/ constrs 文件夹下。

    5. 单击“完成 (Finish)”。
  5. 单击“层级 (Hierarchy)”。

  6. 在“Sources”窗口中的“设计源代码 (Design Sources)”下,展开“edt_versal_wrapper”。

  7. 右键单击顶层块设计 edt_versal_i : edt_versal (edt_versal.bd) 并选择“Generate Output Products”。

  8. 单击“生成 (Generate)”。

  9. 当“Generate Output Products”进程完成后,请单击“OK”。

  10. 在“Sources”窗口中,单击“IP Sources”视图。您可在此处查看刚生成的输出文件,如下图所示。

综合、实现和生成器件镜像

请遵循以下步骤为设计生成器件镜像。

  1. 转至“Flow Navigator → Program and Debug”,单击“Generate Device Image”,然后单击“OK”。

  2. 这样会显示“无实现结果可用 (No Implementation Results Available)”菜单。单击“Yes”。

  3. 这样会显示“启动运行 (Launch Run)”菜单。单击“确定 (OK)”。

    当“Device Image Generation”完成后,会显示“器件镜像生成已完成 (Device Image Generation Completed)”对话框。

  4. 单击“取消 (Cancel)”关闭此窗口。

  5. 生成器件镜像后,请导出硬件。

注意:以下步骤为可选,您可跳过这些步骤并转至导出硬件部分。这些步骤提供了生成器件镜像的详细流程,包括先运行综合与实现,然后再生成器件镜像。如需了解生成器件镜像的流程,请遵循以下提供的步骤进行操作。

  1. 转至“Flow Navigator → Synthesis”,然后单击“Run Synthesis”。

  2. 如果 Vivado® 提示您在启动综合前保存工程,请单击“保存 (Save)”。

    运行综合时,在右上角窗口中会显示其状态栏。在整个设计进程中,此状态栏会因各种原因而呈现假脱机状态。此状态栏表示进程正在后台运行。当综合完成后,会打开“综合已完成 (Synthesis Completed)”对话框。

  3. 选择“运行实现 (Run Implementation)”,然后单击“OK”。

    当实现完成后,会打开“实现已完成 (Implementation Completed)”对话框。

  4. 选择“Generate Device Image”,然后单击“OK”。

    当“Device Image Generation”完成后,会显示“器件镜像生成已完成 (Device Image Generation Completed)”对话框。

  5. 单击“取消 (Cancel)”关闭此窗口。

    生成器件镜像后,请导出硬件。

导出硬件

  1. 在 Vivado 主菜单中,选择“File→ Export → Export Hardware”。这样会打开“导出硬件 (Export Hardware)”对话框。

  2. 选择“包含比特流 (Include bitstream)”,然后单击“Next”。

  3. 为导出的文件提供名称(或者使用提供的默认名称)并选择导出位置。单击“下一步 (Next)”。

    如果硬件模块已导出,则会显示一条警告消息。如果显示覆盖消息,则请单击“是 (Yes)”以覆盖现有 XSA 文件。

  4. 单击“完成 (Finish)”。

工程示例:含 RPU 的 FreeRTOS GPIO 应用工程

本节解释了如何在 Versal™ 器件上为基于 Arm® Cortex™- R5F 核的 RPU 配置并构建 FreeRTOS 应用。

以下步骤演示了从 Arm Cortex-R5F 创建 FreeRTOS 应用的过程:

  1. 启动 Vitis IDE 并创建新的工作空间,例如,c:/edt/freertos

  2. 选择“文件 (File) → 新建 (New) → 应用工程 (Application Project)”。这样会打开“新建应用工程 (Creating a New Application Project)”Wizard。如果这是首次启动 Vitis™ IDE,那么您可在“欢迎使用 (Welcome)”屏幕上选择“创建应用工程 (Create Application Project)”,如下图所示。

    注意

    或者,您也可以选中“下次跳过欢迎屏幕 (Skip welcome page next time)”,这样即可每次启动时跳过欢迎页面。

  3. 在 Vitis IDE 中,每个应用工程均由 4 个部分组成:目标平台、系统工程、域和模板。要在 Vitis IDE 中创建新应用工程,请遵循以下步骤:

    1. 目标平台由基本硬件设计与在将加速器连接到声明的接口过程中所使用的元数据组成。根据从 Vivado® Design Suite 导出的 XSA 选择平台或者创建平台工程。

    2. 将应用工程置于系统工程内,并将其与处理器关联。

    3. 域负责定义用于在目标平台上运行主机程序的处理器和操作系统。

    4. 请为应用选择模板以便快速开始开发。根据以下信息在 Wizard 屏幕中选择相应的选项。

    表 9:Wizard 信息

    Wizard 屏幕 系统属性 所用设置或命令
    平台 (Platform) 基于硬件创建新平台 (XSA) (Create a new platform from hardware (XSA)) 单击“Browse”以添加 XSA 文件
    平台名称 (Platform Name) vck190_platform
    应用工程详情 (Application Project Detail) 应用工程名称 (Application project name) freertos_gpio_test
    选择系统工程 (Select a system project) +新建
    系统工程名称 (System project name) freertos_gpio_test_system
    处理器 (Processor) psv_cortexr5_0
    域 (Domain) 选择域 (Select a domain) +新建
    名称 分配的默认名称
    显示名称 (Display Name) 分配的默认名称
    操作系统 (Operating System) freertos10_xilinx
    处理器 (Processor) psv_cortexr5_0
    模板 (Templates) 可用 (Available) Freertos Hello
    模板 (Templates) world

    执行完上述步骤后,Vitis 软件平台就会为平台工程 (vck190_platform) 和系统工程 (freertos_gpio_test_system) 创建开发板支持封装,其中包含名为 freertos_gpio_test 的应用工程,位于“Explorer”视图下。

  4. 右键单击位于 src/ 下的 freertos_hello_world.c 文件,并将 freertos_hello_world.c 文件重命名为 freertos_gpio_test.c。将 freertos_gpio_test.c 文件从 FreeRTOS 工程路径复制到位于 src/ 下的 freertos_gpio_test.c

  5. 右键单击 vck190_platform 并选择“Build Project”。或者,也可以单击 

    注意

    如果无法看到 Project Explorer,请单击左侧面板上的复原图标,然后执行此步骤。

要了解如何构建 Linux 镜像并将 FreeRTOS elf 整合到镜像中,请参阅工程示例:使用 PetaLinux 创建 Linux 镜像。

工程示例:使用 PetaLinux 创建 Linux 镜像

本节解释了如何在 Versal™ 器件上,为基于 Arm® Cortex™-A72 核的 APU 配置并构建 Linux 操作系统。您可将 PetaLinux 工具用于特定于开发板的 BSP 以配置和构建 Linux 镜像。

此示例需要 Linux 主机。请参阅《PetaLinux 工具文档:参考指南》(UG1144),以了解有关 PetaLinux 工具的依赖关系和安装过程的信息。

重要:此示例使用 VCK190 PetaLinux BSP 来创建 PetaLinux 工程。请确保您已下载适用于 PetaLinux (VCK190/VMK180) 的相应 BSP。

  • 如果您使用的是 VCK190 开发板,请从 https://china.xilinx.com/member/vck190_headstart.html 下载 xilinx-vck190-v2020.2-final.bsp 文件。

  • 如果您使用的是 VMK180 开发板,请从 https://china.xilinx.com/member/vmk180_headstart.html 下载 VMK180 PetaLinux 2020.2 BSP (xilinx- vmk180-v2020.2-final.bsp)。

  1. 将对应开发板的 PetaLinux BSP 复制到当前目录。

  2. 使用以下命令创建 PetaLinux 工程。

    注意:对于 VMK180 开发板,请在命令中的 -s 选项后使用 xilinx-vmk180-vxxyy.z-final.bsp

  3. 使用以下命令切换至 PetaLinux 工程目录。

    \$cd led_example

  4. 将硬件平台工程 XSA 复制到 Linux 主机。

    注意:对于 VMK180 开发板,请使用设计示例:使用 AXI GPIO 中生成的 XSA 文件。

  5. 使用以下命令重新配置 BSP。

    此命令会打开“PetaLinux 配置 (PetaLinux Configuration)”窗口。对于此示例,无需在此窗口中执行任何更改。

  6. 请选择“Save”,然后选择“OK”保存以上配置,然后选择“Exit”以退出“Configuration”Wizard。

  7. 使用以下命令,在 PetaLinux 工程内创建名为 gpiotest 的 Linux 应用。

    \$petalinux-create -t apps \--template install \--name gpiotest\--enable

  8. 使用以下命令将应用文件从 <design-package>/<vck190 or vmk180>/linux/bootimages 复制到工程。

    $cp <design-package>/vck190/linux/design_files/gpiotest_app/files/* <plnx-proj-root>/projectspec/meta-user/recipes-apps/gpiotest/files/
    $cp <design-package>/vck190/linux/design_files/gpiotest_app/gpiotest.bb <plnx-proj-root>/projectspec/meta-user/recipes-apps/gpiotest/gpiotest.bb
    $cp <design-package>/vck190/linux/design_files/device_tree/system-user.dtsi
    
  9. 在内核配置中启用 GPIO 支持。

    \$petalinux-config -c kernel

    注意:此命令会为 PetaLinux 工程打开“内核配置 (Kernel Configuration)”Wizard。

  10. 浏览至“器件驱动 (Device drivers) → GPIO 支持 (GPIO Support)”,并按 Y 键将其启用。按 Enter 键并按 Y 键,启用“调试 GPIO 调用 (Debug GPIO calls)”和 /sys/class/gpio/... (sysfs interface) 条目,如下图所示。

  11. 浏览至“存储器映射 GPIO 驱动 (Memory mapped GPIO drivers)”,并按 Y 键,启用“赛灵思 GPIO 支持 (Xilinx GPIO support)”和“赛灵思 Zynq GPIO 支持 (Xilinx Zynq GPIO support)”,如下图所示。

  12. 单击“Save”保存以上配置,然后单击“Exit”选项以退出“Configuration”Wizard。

  13. 使用以下命令构建 Linux 镜像。

    $ petalinux-build

使用 BIF 文件将 FreeRTOS 与 APU 镜像进行组合

  1. 在 Vitis IDE 工作空间内打开 XSCT 控制台。

  2. 浏览至 PetaLinux 工程的 images/linux 目录。

    $ cd <petalinux-project>/images/linux/

  3. 将 bootgen.bif 文件从 <design-package>/path 复制到 images/linux 目录。

    $ cp <design-package>/path/bootgen.bif

  4. 运行以下命令以创建 BOOT.BIN

    $ bootgen -image bootgen.bif -arch versal -o BOOT.BIN -w

    这样会在 <petalinux-project>/images/linux/ 目录中创建 BOOT.BIN 镜像文件。

注意:要了解如何使用 SD 启动模式运行镜像,请参阅 SD 启动模式的启动顺序。

© 2020 年赛灵思公司版权所有。

面向含 SmartLynq+ 模块的高速调试端口的系统设计示例

引言

本章旨在演示如何基于 Versal™ 来构建同时使用 SmartLynq+ 模块和高速调试端口 (HSDP) 的系统。您还将了解到如何使用 JTAG 或 HSDP 来设置 SmartLynq+ 模块和下载 Linux 镜像。

重要:本教程需要使用 SmartLynq+ 模块、VCK190 或 VMK180 评估板以及 Linux 主机。

设计示例:启用 HSDP

要启用 HSDP,请首先使用您在前一章中构建的 VCK190 或 VMK180 工程(或者设计包 <design-package>/smartlynq_plus/vck190/design_files/vck190_edt_versal_hsdp.xpr.zip 中提供的预构建工程),修改此工程,使其包含 HSDP 支持。

修改设计以启用 HSDP

此设计使用使用标量引擎和自适应引擎的系统设计示例中构建的工程,并启用 HSDP 接口。您可使用 Vivado IP integrator 执行此配置。

  1. 打开您在第 5 章:使用标量引擎和自适应引擎的系统设计示例中创建的 Vivado 工程。

    C:/edt/edt_versal/edt_versal.xpr

  2. 在 Flow Navigator 中的 IP integrator 下,单击“打开块设计 (Open Block Design)”。

  3. 双击 Versal ACAP CIPS IP 核,然后单击“调试 (Debug) → 调试配置 (Debug Configuration)”。

  4. 在“高速调试端口 (High-Speed Debug Port (HSDP))”下,选择“AURORA”作为“往来调试包控制器的路径 (Pathway to/from Debug Packet Controller (DPC))”。

  5. 设置以下选项:

    • GT 选择 (GT Selection)”设为“HSDP1 GT
    • GT 参考时钟选择 (GT Refclk Selection)”设为 REFCLK1
    • GT 参考时钟频率 (GT Refclk Freq (MHz))”设为 156.25

    注意:线速率固定为 10.0 Gb/s。

  6. 单击“确定 (OK)”保存更改。这样会在 CIPS IP 上创建 2 个端口:gt_refclk1 和 HSDP1_GT

  7. 在“IP Integrator”页面上右键单击 gt_refclk1 并选择“设为外部端口 (Make External)”。对 HSDP1_GT 执行相同的操作。

  8. 单击“验证设计 (Validate Design)”,然后单击“保存 (Save)”。

综合、实现和生成器件镜像

  1. 在 Flow Navigator 中的“编程和调试 (Programming and Debug)”下,单击“生成器件镜像 (Generate Device Image)”以启动实现。

    当完成器件镜像生成后,会显示“器件镜像生成已完成 (Device Image Generation Completed)”对话框。

导出硬件 (XSA)

  1. 从 Vivado 工具栏中选择“文件 (File) → 导出 (Export) → 导出硬件 (Export Hardware)”。这样会打开“导出硬件 (Export Hardware)”对话框。

  2. 选择“固定 (Fixed)”,然后单击“下一步 (Next)”。

  3. 选择“包含器件镜像 (Include Device Image)”,然后单击“下一步 (Next)”。

  4. 为导出的文件提供名称(例如:edt_versal_wrapper_with_hsdp)。单击“下一步 (Next)”。

  5. 单击“完成 (Finish)”。

使用 PetaLinux 创建启用 HSDP 的 Linux 镜像

此示例使用上一步中构建的启用 HSDP 的 XSA 重新构建 PetaLinux 工程。假定已根据使用标量引擎和自适应引擎的系统设计示例中的指示信息创建 PetaLinux 工程。

重要:如果您构建本教程时,在上一章中未创建 PetaLinux 工程,请遵循工程示例:使用 PetaLinux 创建 Linux 镜像章节中的步骤 1 至 12 创建新的 PetaLinux 工程。

此示例需要 Linux 主机。请参阅《PetaLinux 工具文档:参考指南》(UG1144),以了解有关 PetaLinux 工具的依赖关系和安装过程的信息。

  1. 使用以下命令切换至工程示例:使用 PetaLinux 创建 Linux 镜像中创建的 PetaLinux 工程目录。

    $ cd led_example

  2. 将新的硬件平台工程 XSA 复制到 Linux 主机中,置于 PetaLinux 构建根目录上一层的目录中。

    注意:请确保您使用的是上一步中生成的已更新的 XSA 文件。

  3. 使用以下命令重新配置 BSP。

    petalinux-config --get-hw-description=<path till the directory containing the respective xsa file>
    
  4. 使用以下命令构建 Linux 镜像。

    $ petalinux-build
    
  5. 构建完成后,请使用以下命令封装 boot 镜像:

    $ petalinux-package --force --boot --atf --u-boot
    

    注意:封装的 Linux 启动镜像置于 PetaLinux 构建根目录中的 <PetaLinux-project>/images/Linux/ 目录下。请记住此目录位置,因为在后续步骤中将使用此目录。如果要用于下载 Linux 启动镜像(使用 martLynq+)的机器并非先前用于构建 PetaLinux 的机器(例如,基于 Windows 的 PC),那么应先将此目录的内容传输至该机器,然后再继续本教程。

设置 SmartLynq+ 模块

构建并封装 Linux 镜像后,即可使用 JTAG 或 HSDP 将这些镜像加载到 VCK190 或 VMK180评估板上。要设置 SmartLynq+ 模块以便使用 HSDP 建立链接,请遵循下列步骤:

  1. 使用 USB-C 线来连接 VCK190 USB-C 连接器与 SmartLynq+ 模块。

  2. 将 SmartLynq+ 连接至以太网或 USB。

    • 使用以太网:在 SmartLynq+ 上的以太网端口与局域网之间使用以太网电缆进行连接。
    • 使用 USB:在 SmartLynq+ 上的 USB 端口与您的 PC 之间使用提供的 USB 线进行连接。
  3. 将电源适配器连接到 SmartLynq+,并对 VCK190/VMK180 开发板上电。

  4. 当 SmartLynq+ 完成启动后,会在屏幕上的 eth0 或 usb0 下显示 IP 地址。请记录此 IP 地址,因为在使用以太网和使用 USB 的情况下都将使用此 IP 地址连接到 SmartLynq+。

    注意:如果使用以太网,那么 SmartLynq+ 会从网络上找到的 DHCP 服务器获取 IP 地址。如果使用 USB,那么 USB 端口采用固定 IP 地址:10.0.0.2

  5. 从设计包 <design-package>/smartlynq_plus/xsdb 复制 Linux 下载脚本。

使用 SmartLynq+ 作为串行终端

SmartLynq+ 也可用作为串行终端来远程查看来自 VCK190 的 UART 输出。如果无法以物理方式访问远程设置,则可使用此功能。SmartLynq+ 模块已预安装 minicom 应用,此应用可用于直接连接至 VCK190 上的 UART。

  1. 使用 SSH 客户端(例如,Windows 上的 PuTTY 或 基于 Unix 的系统上的 ssh),使用 SSH 连接至 SmartLynq+ 显示的 IP 地址。

    • 用户名:xilinx
    • 密码:xilinx

    例如,如果 SmartLynq+ 显示的 IP 地址为 192.168.0.10,那么您应发出以下命令:ssh xilinx@192.168.0.10

  2. 默认情况下,minicom 应用使用硬件流程控制。由于在 VCK190 UART 上不使用硬件流程控制,因此要成功连接至赛灵思开发板上的 UART,应将其禁用。要禁用硬件流程控制,请发出 sudo minicom -s 以进入 minicom 设置模式并禁用该功能。或者,以 root 用户身份发出以下命令以修改 minicom 默认配置:

    echo "pu rtscts No" | sudo tee -a /etc/minicom/minirc.dfl
    
  3. 最后,要连接到 VCK190/VMK180 串行终端输出,请执行以下操作:

    sudo minicom --device /dev/ttyUSB1
    
  4. 使该终端保持打开状态,继续下一章。

通过 JTAG 或 HSDP 启动 Linux 镜像

SmartLynq+ 可用于将 Linux 镜像直接下载至 VCK190/VMK180,无需使用 SD 卡。Linux 镜像可使用 JTAG 或 HSDP 来加载。

通过使用本教程随附的设计包中所含脚本,即可使用 SmartLynq+ 模块来下载先前步骤中创建的 Linux 镜像。此脚本可使用 JTAG 或 HSDP。

  1. 在可访问 SmartLynq+ 模块的机器上,打开 Vivado tcl shell。

  2. 如果在用于构建 PetaLinux 的机器上工作,请将工作目录切换至 PetaLinux 构建根目录,或者切换至先前步骤中已传输至本地机器的 images/Linux 目录所在的位置。

  3. 在 Vivado tcl shell 中,发出以下命令使用 HSDP 下载镜像:

    xsdb Linux_download.tcl <smartlynq+ ip> images/Linux HSDP
    

    这样即可使用 JTAG 加载 BOOT.BIN,然后将自动协商 HSDP 链接,并使用 HSDP 加载其余启动镜像。这比使用 JTAG 要快得多。

    注意:您也可以通过将此脚本的最后一个实参更改为 FTDI-JTAG 来使用 JTAG 下载 Linux 镜像,如下图所示:xsdb Linux-download <smartlynq+ ip> images/Linux FTDI-JTAG。这样即可使用 JTAG 对所有 Linux 启动镜像进行编程。请注意此操作与使用 HSDP 下载时的速度差异。

  4. 在上一章中打开的终端上,可通过 VCK190 UART 查看 Versal 启动消息:

  5. 使用 JTAG 或 HSDP 完成 Linux 启动后,将显示以下登录屏幕:

实用链接

  • 如需了解有关实用 PL 硬件调试核(例如,AXIS-ILA、AXIS-VIO、PCIe™ Debugger 和/或 DDRMC 校准接口)的更多信息,请参阅《Vivado Design Suite 用户指南:编程与调试》(UG908)。

  • 如需了解有关 SmartLynq+ 模块的更多信息,请参阅《SmartLynq+ 模块用户指南》。

总结

在本章中,您已完成下列操作:构建使用 HSDP 的设计、连接至 SmartLynq+ 模块、配置 SmartLynq+ 以执行远程 UART 访问,以及使用 HSDP 将 Linux 镜像下载到开发板上。

© 2020 年赛灵思公司版权所有。

附录:创建 PLM

以下是在 Vitis™ 软件平台中创建 Platform Loader and Manager (PLM) elf 文件的步骤。在 Versal™ 器件中,PLM 在 PMC 内执行,并用于引导 APU 和 RPU。

  1. 选择“文件 (File) → 新建 (New) → 应用工程 (Application Project)”。这样会打开“新建应用工程 (New ApplicationProject)”Wizard。

  2. 根据下表中的信息在 Wizard 屏幕中选择相应的选项。

    表 10:系统属性设置

    Wizard 屏幕 系统属性 所用设置或命令
    平台 (Platform) 基于硬件创建新平台 (XSA) (Create a new platform from hardware (XSA)) 单击“Browse”按钮以添加 XSA 文件。
    平台名称 (Platform Name) plm_platform
    应用工程详情 (Application Project Details) 应用工程名称 (Application project name) plm
    选择系统工程 (Select a system project) +新建
    系统工程名称 (System project name) plm_system
    目标处理器 (Target processor) psv_pmc_0
    域 (Domain) 选择域 (Select a domain) +新建
    名称 分配的默认名称
    显示名称 (Display Name) 分配的默认名称
    操作系统 (Operating System) 独立
    处理器 (Processor) psv_pmc_0
    注意:如果在处理器列表下未显示 psv_pmc_0 选项,那么请选中“硬件规格 (Hardware Specification)”选项中的“显示所有处理器 (Show all processors)”旁的复选框,以查看该应用工程可用的所有目标处理器。
    架构 32 位
    模板 (Templates) 可用模板 (Available Templates) Versal PLM

Vitis™ 软件平台会在“资源管理器 (Explorer)”视图下创建 plm 应用工程和 edt_versal_wrapper 平台。右键单击平台工程,然后选择“构建工程 (Build Project)”。构建平台工程后,请右键单击 plm_system 工程,然后单击“Build Project”。这样即可在应用工程的 Debug 文件夹下生成 plm.elf 文件。构建好工程后,还请构建平台。

© 2020 年赛灵思公司版权所有。

赛灵思 Xilinx Versal 自适应计算加速平台嵌入式设计教程相关推荐

  1. 重磅推出开发者计划、App Store,赛灵思普及自适应计算的一大步

    得开发者得天下.尤其随着AI技术落地趋势加剧,其中大部分创新来自软件应用,市场对软件开发者有着极大需求.因此,无论是互联网公司还是传统的IT厂商都在尝试将开发者沉淀到自己的平台. 作为FPGA的开创者 ...

  2. 赛灵思推7nm加速平台:面向所有场景、所有开放者,AI推理性能提升8倍

    安妮 发自 北京国际饭店 量子位 出品 | 公众号 QbitAI 今年赛灵思开发者大会的参会成员,与往年有很大不同:不仅硬件开发者多,软件开发者也不少. 巧合么?不一定.回顾今天上午的整场发布会可以发 ...

  3. Xilinx FPGA平台DDR3设计保姆式教程(3)MIG IP核使用教程及DDR读写时序

    干货来了,用DDR搬砖,只需要会用IP就好,Xilinx官方YYDS! ---------------------------------------------------------------- ...

  4. KRIA SOM,赛灵思自适应计算最近一发“王炸”!

    随着 AI.5G 和云计算时代到来,互联网与传统企业智能化转型已"箭在弦上".为解决海量数据爆发的处理需求,将 AI 部署于边缘端成为企业服务降本增效的有效手段之一.如何在边缘端更 ...

  5. AI解决方案:边缘计算和GPU加速平台

    AI解决方案:边缘计算和GPU加速平台 一.适用于边缘 AI 的解决方案 AI 在边缘蓬勃发展.AI 和云原生应用程序.物联网及其数十亿的传感器以及 5G 网络现已使得在边缘大规模部署 AI 成为可能 ...

  6. 云知声 Atlas 超算平台: 基于 Fluid + Alluxio 的计算加速实践

    Fluid 是云原生基金会 CNCF 下的云原生数据编排和加速项目,由南京大学.阿里云及 Alluxio 社区联合发起并开源.本文主要介绍云知声 Atlas 超算平台基于 Fluid + Alluxi ...

  7. AMD于2022年完成并购赛灵思XILINX,7系列产品生命周期延长至2035年

    AMD 于 1969 年在硅谷创立,最初只有几十名员工,从那时起 AMD 便踏上创新之路,并始终处在半导体产品领域的最前沿. 从成立之初的一家不起眼的公司开始,AMD 如今已经成长为一家全球公司,凭借 ...

  8. 【实测】基于开源硬加速平台RIFFA架构的PCIe DMA性能测试及分析

    众所周知,GPU出现的最初目的仅仅是为了图像和视频并行处理的加速,但随着OpenCL 和 NVIDIA 的 CUDA 语言和工具链的出现使 GPU 更易于使用,目前已经成为一种通用的并行加速平台.然而 ...

  9. AMD在CES 2023开幕主题演讲中强调高性能和自适应计算的未来

    在CES 2023上,AMD董事会主席兼首席执行官苏姿丰博士(Dr. Lisa Su)详细介绍了高性能计算和自适应计算在创造解决方案以应对全球最重要的挑战时所发挥的重要作用.在她的现场主题演讲中,苏姿 ...

最新文章

  1. 为何那么多人的网名都叫易天啊
  2. FPGA之道(9)BLOCK RAM以及DSP硬核
  3. 几种简单的滤波方式(未完)
  4. R语言观察日志(part3)--repeat循环
  5. DTW动态时间规整算法
  6. html中隐式转换成数字,关于 JS 类型隐式转换的完整总结
  7. 零基础想学Python,明白这2点,越快年薪30W!
  8. Sharding-JDBC水平分表(最终测试)_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记009
  9. Spring配置中的classpath:与classpath*:的区别研究(转)
  10. 谈谈金融行业的开源风险管理
  11. 关于antd table展开行expandable的坑和解决办法
  12. 魔百盒B863AV3.2-M,B863AV3.1-M2线刷+卡刷精简固件(S905L3A-B)
  13. VMware虚拟机磁盘文件vmdk单文件转多文件相互转换
  14. SRP Batcher:提升您的渲染性能
  15. 【工作记录】springboot项目通过qq邮箱发送邮件
  16. 神经网络低比特量化——LSQ
  17. python-九九乘法表(矩形)
  18. 编程之美1.3-翻烙饼问题
  19. 智慧农业·智能灌溉系统
  20. python ai教程_带有Python的AI教程

热门文章

  1. “人生苦短,我用Python“——网络嗅探与欺骗
  2. 论文笔记 EMNLP 2020|Graph Transformer Networks with Syntactic and Semantic Structures for Event Argument
  3. Oracle BI产品线
  4. eMMC之分区管理、总线协议和工作模式【转】
  5. Uva 1151 Buy or Build 二进制枚举+最小生成树
  6. 手把手Verilog HDL同步Vaild-Ready握手FIFO机制
  7. perplexity和预训练时用的loss的区别
  8. 自编译最新稳定版 128M NAND WNDR4300V1 Openwrt Lean固件
  9. 数据库连接_由浅入深搭建Mybatis框架
  10. 修改电脑ip为固定ip不能上网