条款 sdaccel 中英文版本如有歧义 环境用户指南 - …...sdaccel 环境用户指南...

131
SDAccel 环境用户指南 UG1023 (v2019.1) 2019 5 22 条款中英文版本如有歧义,概以英文本为准。

Upload: others

Post on 24-Dec-2019

29 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

SDAccel 环境用户指南UG1023 (v2019.1) 2019 年 5 月 22 日

条款中英文版本如有歧义,概以英文本为准。

Page 2: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

修订历史下表列出了本文档的修订历史。

章节 修订总结2019 年 5 月 20 日 2019.1 版

SDAccel 可执行模型 更新章节。SDAccel 构建进程 在 .xo 文件中添加内核描述。SDAccel 设计方法 更新以软件为中心的描述。第 2 章: 入门 新增 UG1352 链接和信息。创建应用工程 新增 jSch 和更新描述。第 4 章: 编程 SDAccel 更新章节。设置运行时间 更新 #4 代码描述。内核语言支持 更新章节。编写 C/C++ 内核 更新章节。scalar 更新章节。流传输 添加章节。构建主机应用 更新章节。连接主机应用 添加说明。构建硬件 删除链接并更新标题。创建内核的多个实例 新增 clCreateSubDevices 描述。将内核接口映射至存储器资源 更新章节。内核到内核流传输连接 添加章节。将计算单元分配给 SLR 新增内核 SLR 和 DDR 链接。系统估算报告 更新 report_level 代码。编译 新增 \ 到代码。连接 新增 \ 到代码并添加注释。编译 更新描述。连接 更新描述。使用 sdaccel.ini 文件 更新 sdaccel.ini 段并将 cpu_affinity 条目添加到"Runtime

Group"。内核软件要求 更新控制和中断表。RTL Kernel Wizard 常规设置 更新图。“Kernel Options" 新增内核控制接口。将 RTL 内核封装到赛灵思对象文件中 新增指向该部分末尾的链接。使用 Vivado HLS 创建 SDAccel 内核 更新"SDAccel Bottom Up"描述和器件选择 GUI。将 Vivado HLS 内核项目合并到 SDAccel 中 更新第一段。附录 A: 示例入门 添加 GitHub 链接和信息。附录 C: 有用命令行实用工具 更新并添加到 UG1279。

2019 年 1 月 24 日 2018.3 版SDAccel 加速最佳实践 更新描述。

修订历史

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 2

Send Feedback

Page 3: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

章节 修订总结XOCC 连接和编译选项 添加 SLR 链接。内核语言支持 添加 SystemVerilog。设置运行时间 更新 #5 描述。控制实现结果 更新描述。控制报告生成 更新描述。调试功能和技术 新增表格注释。第 9 章: RTL 内核 更新描述。将 RTL 设计用作 RTL 内核的要求 更新描述。内核接口要求 更新描述。内核软件要求 更新描述。中断 更新描述。scalar 实参 更新实参类型说明。RTL 内核类型项目流程 调整图像大小。管理 RTL 内核中的时钟 添加章节。使用 Vivado HLS 创建 SDAccel 内核 更新图像和说明。Xclbinutil 工具 更新描述。时钟 新增链接并更新代码。

2018 年 12 月 5 日 2018.3 版SDAccel 可执行模型 更新图。SDAccel 设计方法 将表移动到有序列表并更新描述。SDAccel 加速最佳实践 更新描述。第 3 章: 创建 SDAccel 工程 更新描述和图。创建应用工程 更新章节。理解 SDx GUI 更新图。SDx 辅助 更新图。XOCC 连接和编译选项 添加章节。导出 SDx 工程 更新导出文件名图像。导入 SDx 工程 新增导入类型图像。编码主机应用程序 更新描述。编写 C/C++ 内核 更新说明并将"Pointer Arguments"和"Scalars"拆分为多个章节。第 5 章: 构建系统 更新项目编辑器视图和章节标题。构建硬件 使用 $ 清除示例代码并更新 SDAccel 链接,实例化多个计算单元和"Assistant XOCC Compile Settings"图像。删除"Assistant

Top-Level"图像。将内核接口映射至存储器资源 更新描述。将计算单元分配给 SLR 更新描述。控制实现结果 更新描述。控制报告生成 更新描述。系统估算报告 更新标题和第一段。“Profile Summary”报告 更新描述。应用时间线 更新说明、提示和链接。

修订历史

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 3

Send Feedback

Page 4: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

章节 修订总结波形视图和实时波形查看器 更新描述。内核 SLR 和 DDR 存储器分配 添加章节。调试功能和技术 更新表。“System" 更新描述。第 8 章: 通过命令行构建应用 更新描述。编译 更新描述。构建硬件 更新多个章节中的说明。使用 sdaccel.ini 文件 拆分成三个表。内核软件要求 更新章节。内核接口要求 更新描述和 S_AXI_CONTROL 条目并添加寄存器。中断 添加链接。RTL Kernel Wizard 更新描述。“Kernel Options" 新增描述。“Streaming Interfaces”页面 添加章节。将 RTL 内核封装到赛灵思对象文件中 更新描述。第 10 章: HLS 内核设计集成到 SDAccel 中 添加章。有用命令行实用工具 添加附录。内核的 SLR 分配 删除附录。

2018 年 10 月 2 日 2018.2.xdf 版第 1 章: SDAccel 引言和简介 更新支持的平台,以包括 Alveo™ U200 和 U250 数据中心加速器卡。整个文档。 将 xbsak 和 xbinst 命令替换为 xbutil 命令。创建应用工程 新增有关需要单独安装所需平台的说明。附录 E: 移植到新的目标平台 添加附录。将内核接口映射至存储器资源 新增有关使用 --sp 选项分配内核的所有接口/端口的注释。

2018 年 8 月 13 日 2018.2 版附录 F:安装和调试开发板 删除开发板安装附录。

开发板安装程序可在相应的《开发板用户指南》中找到。请参阅《KCU1500 板用户指南》 (UG1260) 和 《VCU1525 可重新配置加速平台用户指南》 (UG1268)。

2018 年 7 月 2 日 2018.2 版整个文档 小修改。开发板安装和调试程序 将内容修改为基于命令行的安装流程。第 9 章: RTL 内核 删除多余的主题。第 7 章:第 7 章: 调试应用和内核 删除对“MicroBlaze Debug”的引用。

2018 年 6 月 20 日 2018.2 版安装、编程和调试开发板 添加附录。

2018 年 6 月 6 日 2018.2 版本文档经历了重大更新,其中大部分内容已更改。第 3 章: 创建 SDAccel 工程 新增对“Assistant”视图 的讨论。第 4 章: 编程 SDAccel 编码主机应用程序 中的新增内容。第 5 章: 构建系统 新增有关 构建主机应用 和 构建硬件 流程的详细信息。

修订历史

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 4

Send Feedback

Page 5: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

章节 修订总结第 7 章: 调试应用和内核 本章现在概述了调试过程,目前完全在单独的用户指南中介绍。第 8 章: 通过命令行构建应用 新增有关编译和链接主机代码和内核代码的命令的讨论。第 9 章: RTL 内核 此内容的重大更新。附录 B: 目录结构 描述应用程序项目的目录结构。内核的 SLR 分配 讨论使用 --xp 控制内核布局。附录 F: 私有调试网络的 JTAG 回读 讨论 RTL 内核的远程调试问题。

2018 年 4 月 4 日 2018.1 版xbsak 命令和选项 将 --apm 命令选项更改为 --spm。使用赛灵思 OpenCL 编译器编译 OpenCL 内核 将 --pk 命令选项更改为 --profile_kernel。

修订历史

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 5

Send Feedback

Page 6: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

目录修订历史..........................................................................................................................................................................2

第 1 章: SDAccel 引言和简介............................................................................................................................8SDAccel 软件加速............................................................................................................................................................8SDAccel 可执行模型........................................................................................................................................................9SDAccel 构建进程......................................................................................................................................................... 10SDAccel 设计方法......................................................................................................................................................... 13SDAccel 加速最佳实践.................................................................................................................................................. 15

第 2 章: 入门............................................................................................................................................................... 16

第 3 章: 创建 SDAccel 工程..............................................................................................................................17使用 SDx 工作空间........................................................................................................................................................ 17创建应用工程.................................................................................................................................................................18理解 SDx GUI................................................................................................................................................................ 21SDx 辅助........................................................................................................................................................................ 22导出和导入 SDx 工程.................................................................................................................................................... 27添加源文件.....................................................................................................................................................................32

第 4 章: 编程 SDAccel..........................................................................................................................................36编码主机应用程序......................................................................................................................................................... 36内核语言支持.................................................................................................................................................................38

第 5 章: 构建系统.................................................................................................................................................... 42构建主机应用.................................................................................................................................................................43构建硬件........................................................................................................................................................................ 44构建目标........................................................................................................................................................................ 52

第 6 章: 剖析和最优化..........................................................................................................................................54设计指导........................................................................................................................................................................ 55系统估算报告.................................................................................................................................................................56HLS 报告........................................................................................................................................................................ 57“Profile Summary”报告........................................................................................................................................... 58应用时间线.....................................................................................................................................................................60波形视图和实时波形查看器.......................................................................................................................................... 61内核 SLR 和 DDR 存储器分配....................................................................................................................................... 63

第 7 章: 调试应用和内核.................................................................................................................................... 67

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 6

Send Feedback

Page 7: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

调试功能和技术............................................................................................................................................................. 67

第 8 章: 通过命令行构建应用......................................................................................................................... 70构建主机........................................................................................................................................................................ 70构建硬件........................................................................................................................................................................ 71使用 sdaccel.ini 文件.................................................................................................................................................... 74emconfigutil 设置.........................................................................................................................................................76

第 9 章: RTL 内核.................................................................................................................................................... 77将 RTL 设计用作 RTL 内核的要求................................................................................................................................. 77RTL Kernel Wizard....................................................................................................................................................... 81RTL 内核的手动开发流程.............................................................................................................................................. 95有关设计 RTL 的建议.....................................................................................................................................................99

第 10 章: HLS 内核设计集成到 SDAccel 中........................................................................................102使用 Vivado HLS 创建 SDAccel 内核..........................................................................................................................102将 Vivado HLS 内核项目合并到 SDAccel 中.............................................................................................................. 106已知限制...................................................................................................................................................................... 106

附录 A: 示例入门................................................................................................................................................... 107安装示例...................................................................................................................................................................... 107使用本地副本...............................................................................................................................................................109

附录 B: 目录结构................................................................................................................................................... 110命令行..........................................................................................................................................................................110GUI.............................................................................................................................................................................. 111

附录 C: 有用命令行实用工具........................................................................................................................ 113

附录 D: 管理平台和库........................................................................................................................................114

附录 E: 移植到新的目标平台.........................................................................................................................116设计移植...................................................................................................................................................................... 116移植版本...................................................................................................................................................................... 121修改内核布局...............................................................................................................................................................122解决时序...................................................................................................................................................................... 127

附录 F: 私有调试网络的 JTAG 回读.......................................................................................................... 129JTAG 回读步骤............................................................................................................................................................. 129

附录 G: 附加资源与法律提示........................................................................................................................130赛灵思资源.................................................................................................................................................................. 130Documentation Navigator 与设计中心....................................................................................................................130参考资料...................................................................................................................................................................... 130请阅读:重要法律提示................................................................................................................................................131

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 7

Send Feedback

Page 8: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

第 1 章

SDAccel 引言和简介SDAccel™ 环境使用标准编程语言,提供开发和交付 FPGA 加速数据中心应用的框架。SDAccel 环境包括基于 Eclipse的综合开发环境 (IDE) 的熟悉的软件开发流程和能充分使用 FPGA 资源的架构最优化编译器。加速应用的开发者将使用一种熟悉的软件编程工作流程,利用 FPGA 加速,即使此前几乎没有 FPGA 或硬件设计经验也无妨。加速内核开发者可以使用以硬件为中心的方法,利用标准编程语言通过 HLS 编译器生成带有软件和硬件组件的异构应用。软件组件或应用在 C/C++ 中使用 OpenCL™ API 调用开发;硬件组件或内核在过 C/C++ OpenCL 或 RTL 中开发。SDAccel 环境适应各种方法,允许开发者从软件组件或硬件组件开始。赛灵思 FPGA 提供比传统 CPU/GPU 加速更多的优势,包括能够执行在处理器上运行任何功能的定制架构,从而在低功耗损耗的情况下得到更好的性能。为了实现赛灵思器件上软件加速的优势,您应注意加速硬件应用中的大型计算密集部分。在定制硬件上执行这些功能,让您实现性能和功耗的理想平衡。SDAccel 环境提供工具和报告,可以配置您主机应用的性能并确定存在加速机会的地方。这些工具还提供高速缓存、存储器和总线使用的自动化运行时间 (runtime) 检测,以追踪硬件上的实时性能。SDAccel 环境针对的目标是加速硬件平台,如赛灵思 Alveo™ 数据中心加速器卡等。此类加速平台设计用于各种计算密集型应用,特别是视频直播转码、数据分析和使用机器学的人工智能 (AI) 应用。还有很多可用的第三方加速平台可以兼容 SDAccel 环境。越来越多的 FPGA 加速库可以通过 SDAccel 环境获得,例如赛灵思机器学习 (ML) 套件,可最优化并配置加速 ML 推断应用。预定义加速器功能包括支持多种通用机器学习架构(如:Caffe、MxNet 和 TensorFlow;)的目标应用(如人工智能)、视频处理、加密和大数据分析。这些由赛灵思和第三方开发者提供的预定义加速器库可以与您的加速应用项目快速结合,以便加快开发。

SDAccel 软件加速与处理器架构对比时,赛灵思 FPGA 中包含可编程逻辑 (PL) 结构的架构在应用执行中能够启用高度的并行度。由SDAccel 生成的用于内核的定制处理架构呈现与 CPU 执行不同的执行范式,并提供获得重要性能提升的机会。虽然您可以将现有的 FPGA 加速应用在其他平台实现,但了解 FPGA 架构并适当地修正主机和内核代码将显著提高性能。如需了解更多有关编写主机和内核代码以及两者之间数据传输管理的信息,请参阅 《SDAccel 环境编程指南》(UG1277)。CPU 有固定的资源并为可任务或运算并行提供有限的机会。任何型号的处理器执行程序时,都将程序作为由处理器编译器工具生成的一系列指令,这些工具将 C/C++ 表达的算法转变成目标处理器自然理解的汇编语言结构。即使是简单的操作,如添加两个值,也会导致必须由多个时钟周期执行的多个汇编指令。因此软件工程师花费大量时间重建算法,以提高高速缓存命中率,并减少每一个指令使用的处理器周期。另一方面,FPGA 本质上是一种并行处理器件,可以执行在处理器上运行的任何功能。赛灵思 FPGA 拥有大量资源,经过编程和配置可以执行任何定制架构,并实现几乎任何水平的并行度。在处理器中,所有计算都共用一个 ALU,与之不同的是,FPGA 运算被分配至可配置的处理资源阵列,并在其中执行。FPGA 编译器为每一个应用或算法创建最优化的独特电路。FPGA 编程结构就像一块空白画布,定义并执行您的加速功能。SDAccel 编译器通过调度、流水线处理和数据流程进程使用 FPGA 结构的功能。

第 1 章: SDAccel 引言和简介

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 8

Send Feedback

Page 9: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

• 调度: 确定不同运算之间的数据和控制相依性的进程将决定每个执行时间。编译器分析相邻运算之间的相依性以及跨时间的相依性,并对运算分组,从而在可能的情况下在相同的时钟周期内执行,或者重叠数据流程相依性允许的函数调用。

• 流水线处理: 一种通过重叠运算或功能的独立阶段,在算法的硬件实现中提高指令级并行度的技术。原始软件实现中的数据相依性的保留是为了用于功能对等,但是需要的回路被分成了一系列独立阶段。该系列中的所有阶段都在同一个时钟周期内并行运行。流水线处理是一种高精度最优化,可消除需要当前函数调用的 CPU 限制或消除下一个操作开始需前彻底完成的操作。

• 数据流: 允许在 FPGA 中执行的多个函数以平行和流水线的方式执行,而不是循序地执行任务级并行度。编译器根据程序不同函数的输入和输出,对它们之间的交互进行评估,从而抽取该层级的并行度。在软件执行方面看,这种变换适用于单个内核中函数的并行执行。

赛灵思 FPGA 的另一个优势在于其能够进行动态重新配置。例如,将编译程序加载至处理器中或在运行时间过程中重新配置 FPGA,可以重新制定 FPGA 资源的目的,以便在加速应用运行时执行其他内核。这允许单个 SDAccel 加速器电路板在应用中为多个功能加速,可以是循序的,也可以是并行的。

SDAccel 可执行模型在 SDAccel 框架中,应用程序在主机应用程序和硬件加速的内核之间分配,它们之间具有通信通道。使用 C/C++ 编写并使用 API 抽象(如 OpenCL)的主机应用程序在 x86 服务器上运行,而硬件加速的内核在赛灵思 FPGA 内运行。由赛灵思运行时 (XRT) 管理的 API 调用用于与硬件加速器通信。主机 x86 机器和加速器电路板之间的通信,包括控制和数据传输,通过 PCIe 总线进行。当控制信息在硬件中的特定存储器位置之间传输时,全局存储器用于在主机应用程序和内核之间传输数据。主机处理器和硬件加速器都可以访问全局存储器,而主机存储器只能由主机应用程序访问。例如,在典型的应用程序中,主机首先将内核操作的数据从主机存储器传输到全局存储器。内核随后将对数据进行操作,将结果存储回全局存储器。内核完成后,主机会将结果传回主机存储器。主机和全局存储器之间的数据传输引入了时延,这对于整体加速来说可能是代价昂贵的。要在实际系统中实现加速,硬件加速内核所获得的收益必须超过数据传输的额外时延。此加速平台的常见结构如下图所示。

第 1 章: SDAccel 引言和简介

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 9

Send Feedback

Page 10: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 1: SDAccel 应用程序的架构

Custom Application

OpenCL API

Xilinx Runtime (XRT)

Drivers

Custom Kernels

AXI Interfaces

Global Memory

DMA

x86 Host CPU FPGA Device

PCIe

X21835-103118

右侧的 FPGA 硬件平台包含硬件加速的内核、全局存储器以及用于存储器传输的 DMA。内核是可编程的,可以拥有一个或者多个全局存储器接口。SDAccel 可执行模型可以分解为以下步骤:1. 主机应用程序通过 PCIe 接口将内核所需的数据写入连接器件的全局存储器中。2. 主机应用程序使用其输入参数设置内核。3. 主机应用程序触发 FPGA 上内核函数的执行。4. 必要时,内核在从全局存储器中读取数据时执行所需的计算。5. 内核将数据写入全局存储器并通知主机它已完成任务。6. 主机应用程序将数据从全局存储器读取到主机存储器,并根据需要继续处理。FPGA 可以同时容纳多个内核实例,这可能发生在不同类型的内核或同一内核的多个实例之间。XRT 透明地协调主机应用程序和加速器中的内核之间的通信。内核的实例数由编译选项决定。

SDAccel 构建进程SDAccel 环境提供标准软件开发环境的所有特性:• 用于主机应用的最优化编译器

第 1 章: SDAccel 引言和简介

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 10

Send Feedback

Page 11: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

• 用于 FPGA 的交叉编译器• 稳健的调试环境有助于发现并解决代码问题• 性能分析工具可确定瓶颈并最优化代码在此环境中,构建进程针对项目的软硬件元素使用的标准编译和链接进程。如下图所示,通过使用标准 GCC 编译器的流程构建主机应用,通过使用赛灵思 xocc 编译器的独立流程构建 FPGA 二进制文件。

图 2: 软件和硬件构建进程

X22015-112618

1. 使用 GCC 的主机应用构建进程:• 每个主机应用源文件都被编译至一个对象文件 (.o)。• 对象文件 (.o) 与赛灵思 SDAccel 运行时间 (runtime) 共享库链接来创建可执行程序 (.exe)。

2. FPGA 构建进程突出显示在下图中:• 每个内核都被独立地编译至赛灵思对象 (.xo) 文件。

○ 使用 xocc 编译器将 C/C++ 和 OpenCL C 内核编译用于 FPGA 上实现。该步骤利用 Vivado® HLS 编译器。由 Vivado HLS 支持的编译指示和属性可用于 C/C++ 和 OpenCL C 内核源代码,以指定想要的内核微架构并控制编译进程的结果。

○ 使用 package_xo 工具编译 RTL 内核。在 SDAccel 环境中的 RTL Kernel Wizard 可用于简化进程。• 内核 .xo 文件与硬件平台 (shell) 链接,以创建 FPGA 库 (.xclbin)。在链接步骤中决定重要的架构要素。特

别是,这是内核端口与全局内存 bank 建立连接的地方,也是指定每个内核实例数量的地方。○ 当构建目标为软件或硬件仿真时,如下所述,xocc 生成器件内容的仿真模型。○ 当构建目标为系统(实际硬件)时,xocc 生成器件 FPGA 二进制文件,利用 Vivado Design Suite 运行综合和实现。

第 1 章: SDAccel 引言和简介

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 11

Send Feedback

Page 12: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 3: FPGA 构建进程

xocc -link Shell

.xclbin

OpenCL

xocc -c

.xo

C/C++

xocc -c

.xo

RTL

package_xo

.xo

X21155-111518

注释: xocc 编译器自动使用 Vivado HLS 和 Vivado Design Suite 工具构建内核,在 FPGA 平台上运行。它使用这些具有预定义设置、经过证实能够提供优质结果的工具。使用 SDAccel 环境和 xocc 编译器无需了解这些工具;但是,了解硬件的开发者可以充分利用这些工具,并使用他们全部的可用功能来实现内核。构建目标SDAccel 工具构建进程生成主机应用可执行程序 (.exe) 和 FPGA 二进制文件 (.xclbin)。SDAccel 构建目标定义了构建过程生成的 FPGA 二进制文件的性质。SDAccel 工具提供三个不同的构建目标,其中两个仿真目标用于调试和验证,而默认的硬件目标则用于生成实际的FPGA 二进制文件:• 软件仿真 (sw_emu): 编译主机应用代码和内核代码在 x86 处理器上运行。这样允许通过快速构建和运行循环进行迭

代算法精细化。此目标可用于确定语法错误,进行与应用程序一起运行的内核代码的源代码级调试,并验证系统行为。

• 硬件仿真 (hw_emu): 将内核代码编译至硬件模型 (RTL) 并在专用仿真器上运行。该构建和运行循环需要更长时间,但是提供详细的、周期准确的内核活动视图。此目标可用于检测 FPGA 内逻辑的功能正确性以及获取初始性能评估。

• 系统 (hw): 将内核代码编译至硬件模型 (RTL),然后在 FPGA 器件上执行,得到的二进制文件将在实际 FPGA 上运行。

第 1 章: SDAccel 引言和简介

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 12

Send Feedback

Page 13: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

SDAccel 设计方法SDAccel 环境支持两种主要的使用案例:• 软件中心设计: 通过加速计算密集型函数或剖析应该定位瓶颈,这种以软件为中心的方法集中于改进软件编程师所

编写的应用的性能。• 硬件中心设计: 加速内核开发者创造了一种最优化内核,可能被应用开发者称之为库元素。内核语言不特定于方法。软件中心流程还可以在内核中使用 C/C++、OpenCL 或 RTL。两种方法的主要区别在于起点(软件应用或内核)和与之俱来的侧重点。

可以将两个使用案例结合起来,让软件和硬件开发者团队确定加速器内核并开发出使用它们的应用。这种组合方法涉及不同的应用组件,可能由来自不同公司的不同人员开发。您可以利用可用的预定义内核库,将其用于您的加速应用,或者在自己的团队中开发全部加速功能。

软件中心设计方法包括两个主要阶段:1. 构建应用2. 开发 C/C++ 内核在第一阶段,开发者先决定应将何种软件功能映射至 FPGA 内核、需要多少并行度以及传递方式,进而得出关于应用架构的关键决策。在第二阶段,开发者实现内核。这主要包括构建源代码和应用想要的编译器来编译指示,从而构建想要的内核架构并满足性能目标。

第 1 章: SDAccel 引言和简介

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 13

Send Feedback

Page 14: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 4: 方法简介

Baseline perfomance, establish goals

Identify which functions to accelerate

Identify parallelization needs in the FPGA device

Identify parallelization needs in the software application

Refine architectural details

Architecting the Application

Partition code in load, compute, store

Partition compute blocks into smaller blocks,

recursively

Identify loops for optimization

Reduce latency of loop

Improve initiation interval of loop

Developing C/C++ Accelerators

X22683-041819

如需了解有关 SDAccel 软件设计方法的信息,请参阅《SDAccel 软件设计方法》 (UG1346)。

硬件中心设计硬件中心流程首先集中于开发和优化内核,特别是利用先进的 FPGA 设计技术。如需了解更多信息,请参阅 《SDAccel环境剖析和最优化指南》 (UG1207)。硬件中心开发流程通常使用如下步骤:1. 为应用设定功能和性能基线,隔离将在硬件中加速的功能。2. 估算周期预算和性能需求,以确定加速器架构和接口。3. 开发加速器。4. 验证功能和性能。按需迭代。5. 优化时序和资源利用率。按需迭代。6. 将内核导入至 SDAccel。7. 开发示例主机代码,使用具有与真实内核相同接口的虚拟内核进行检测。8. 使用硬件仿真或在真实硬件上运行,验证内核与主机代码正确工作。按需迭代。9. 使用活动时间线、配置摘要和源代码中的定时器来测量性能,以最优化主机代码性能。按需迭代。

第 1 章: SDAccel 引言和简介

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 14

Send Feedback

Page 15: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

SDAccel 加速最佳实践下面是一些在 SDAccel 环境中开发应用代码和硬件功能时需要特别注意的事项。您可以在 《SDAccel 环境剖析和最优化指南》 (UG1207) 中查找附加信息。• 注意计算时间和输入、输出数据量比例较高的加速功能。使用 FPGA 内核可以大幅减少计算时间,但是数据量带来了传输时延。

• 加速具有独立控制结构且不需要与主机常规同步的功能。• 从主机传输大数据块至全局器件存储器。一个大型传输要比多个小型传输效率高。运行带宽测试发现最佳传输大

小。• 仅在必要时将数据复制回主机。由内核写入全局存储器的数据可以被另外一个内核直接读取。存储器资源包括

PLRAM(小尺寸,快速访问,时延最低)、HBM(中等尺寸,访问速度存在一定时延)和 DDR (大尺寸,访问速度较慢,高时延)。

• 利用多个全局存储器资源优势,均匀地在各个内核之间分配带宽。• 通过执行 512 位宽突发,将内核和全局存储器之间的带宽利用率最大化。• 内核中本地存储器中的高速缓存数据。访问本地存储器比访问全局存储器快得多。• 在主机应用中,使用事件和未阻塞数据传输,以并行的和重叠的方式启动多个请求。• 在 FPGA 中,使用不同的内核利用任务级并行度,使用多个 CU 利用数据级并行度,从而并行执行多个任务并进一步提升性能。

• 在内核中,利用数据流的任务级并行度,利用循环展开和循环流水线的指令级并行度优势,将吞吐量最大化。• 某些赛灵思 FPGA 包含多个被称之为超级逻辑区域 (SLR) 的分区。将内核保存在与其访问的全局存储器 bank 相同

的 SLR 中。• 经常使用软件和硬件仿真来验证您的代码,确保其功能正确。• 经常审查 SDAccel 指南报告,因为其提供了关于您的项目缺陷的明确的、可执行的反馈。

第 1 章: SDAccel 引言和简介

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 15

Send Feedback

Page 16: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

第 2 章

入门根据 《SDAccel 环境版本说明、安装和许可指南》 (UG1238) 提供的说明下载并安装 SDAccel™ 工具套件。您可能还想查看 《Get Moving with Alveo》 (UG1352),它提供了易于理解的指导性介绍,帮助您了解为 FPGA 加速应用开发软件代码。您可以在赛灵思 GitHub 以及 附录 A: 示例入门 中找到有关下载和使用设计示例的详细信息。注释: SDAccel 工具套件包括整个工具堆栈,用于创建比特流、对象代码和可执行的文件。如果已单独安装赛灵思Vivado® Design Suite 和 软件开发套件 (SDK) 工具,则不应尝试将这些安装与 SDAccel 工具结合使用。确保您的工具源自 SDAccel 安装(包括 Vivado Design Suite 和 SDAccel 工具)。重要提示! SDAccel 应用仅在 Linux 操作系统上运行。有关 SDAccel 环境的软件要求的说明,请参阅 《SDAccel 环境版本说明、安装和许可指南》 (UG1238)。

第 2 章: 入门

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 16

Send Feedback

Page 17: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

第 3 章

创建 SDAccel 工程在 SDx™ 工具中,您可以使用 IDE GUI 创建 SDAccel™ 项目。以下主题说明如何设置 SDx 工作空间、创建 SDAccel 项目以及如何使用 IDE 的主要功能。除了 SDx IDE 之外,SDAccel 环境还提供了命令行接口来支持脚本化流程,如 第 8 章: 通过命令行构建应用 所述。查看完整的命令列表,请参阅《SDx 命令和工具参考指南》 (UG1279)。

使用 SDx 工作空间1. 直接从命令行启动 SDx IDE:

$ sdx

2. SDx IDE 将打开并提示您选择工作空间,如下图所示。图 5: 指定 SDx 工作空间

重要提示! 打开新 shell 以输入 SDx 命令时,请确保首先获取 settings64 和 setup 脚本以建立工具环境。如需了解更多信息,请参阅《SDAccel 环境版本说明、安装和许可指南》 (UG1238)。重要提示! 如果使用单台计算机同时执行开发和部署,请确保打开单独的终端以运行 SDx 工具和 xbutil 开发板安装实用程序。从同一终端运行这两个工具会对环境变量产生负面影响并导致工具问题。SDx 工作空间是在工具中工作时存储项目、源文件和结果的文件夹。您可以为每个项目定义单独的工作空间,或者为不同类型的项目设置工作空间。以下说明显示如何为 SDAccel 项目定义工作空间。1. 单击“Browse”按钮以导航到并指定工作空间,或在“Workspace”字段中键入相应的路径。2. 选中“Use this as the default and do not ask again”复选框将指定的工作空间设置为默认选项,并在后续使用

SDx 时不再显示此对话框。

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 17

Send Feedback

Page 18: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

3. 单击 “Launch”。提示: 您可以在 SDx IDE 中更改当前的工作空间,方法是选择“File → Switch Workspace”。

您现在已经创建了一个 SDx 工作空间,可以使用项目填充工作空间。创建了平台和应用程序项目以描述用于创建SDAccel 平台的 SDx 工具流程。

创建应用工程提示: 示例设计随 SDAccel 工具安装一起提供,也在赛灵思 GitHub 库中提供。如需了解更多信息,请参阅附录 A: 示例入门。1. 启动 SDx IDE 后,您可以创建新项目。选择“File → New → SDx Application Project”,如果这是首次启动 SDx

IDE,您可以在欢迎界面选择“Create Application Project”。2. 出现 New SDx Project Wizard。3. 在“Create a New SDx Application Project”页面中,您可以指定项目名称,如图所示。在“Project name” 段指

定项目名称。图 6: 创建新的 SDx 应用项目

4. 默认选择“Use default location”以确定项目在 SDx 工作空间中的文件夹位置。您可以取消勾选此复选框,以确定该项目在您选择的“Location”中创建。

5. 如果您指定了位置,可以使用“Choose file system”来选择“default”文件系统、或启用 Eclipse Remote FileSystem Explorer (“RSE”)。

重要提示! 项目位置不能是 SDx 工作空间的父文件夹。6. 单击 “Next”。平台对话框展示可用已安装平台,与下图所示的对话框相似。要安装其他平台,请参阅 《SDAccel 环境版本说明、安装和许可指南》 (UG1238) 中“Installing Platform-Specific Packages”一节。重要提示! 确保为您的项目选择了正确的平台,因为该选择决定了后续进程。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 18

Send Feedback

Page 19: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 7: 指定 SDAccel 平台

平台包括一个 shell,它描述了附加加速器到声明接口使用的基础硬件设计和元数据。SDAccel 为各种电路板提供平台。您可以将定制或第三方平台添加至库。如需了解更多信息,请参阅 附录 D: 管理平台和库。1. 要为您的项目选择目标平台,请选择满意的平台并单击“Next”。2. 出现系统配置页面,如下图所示。从已选平台的已定义列表中选择“System configuration”和“Runtime”。系统

配置决定在硬件平台运行的软件环境。它指定了硬件平台处理器的操作系统和可用的运行时间设置。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 19

Send Feedback

Page 20: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 8: 指定系统配置

3. 选择“System Configuration”并单击“Next” ,将出现模板页面,如下图所示。为新项目指定应用模板。 SDx工具安装中的 samples 目录包括多个源代码示例模板。

4. 首先,模板对话框有“Empty Application”和“Vector Addition”应用。要获取更多 SDAccel 示例,请单击“SDxExamples”按钮。

图 9: 应用模板

5. 当显示 SDx 示例对话框时,单击“Download”按钮获得 SDAccel 示例。然后单击“OK”。下载的示例现列于模板页面。注释: 根据网络配置,SDx 工具可能会从一个 GitHub repo 下载示例。可能需要特定的代理设置。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 20

Send Feedback

Page 21: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

6. 您可以将模板项目作为示例,学习 SDx 工具和加速内核,或是将其作为新项目的基础。注意:务必要选择模板。您可以选择“Empty Application”创建空项目,并将文件导入其中,重新建立项目。

7. 单击“Finish”关闭 New SDx Project Wizard 并显示项目。

理解 SDx GUI在 SDx IDE 中打开项目时,工作空间将安排在一系列不同的视图和编辑器中,也称为 IDE 中的透视图。打开该工具时,SDx(默认)透视图将显示在下图中。

图 10: SDx – 默认透视图

Editor Area

Project Explorer

Assistant Console

Outline

Target Connections

默认透视图中的一些关键视图/编辑器包括:• “Project Explorer”: 显示项目文件夹及其关联源文件的面向文件的树视图,以及构建文件和工具生成的报告。• “Assistant”: 提供一个中心位置,以查看/编辑设置,构建和运行 SDAccel 应用程序,启动性能分析和调试会话以及打开报告。

• “Editor Area”: 显示项目设置、构建配置,并提供对许多命令的访问,以便使用项目。• “Console Area”: 提供多个视图,包括命令控制台、设计指南、项目属性、日志和终端视图。• “Outline”: 显示在编辑器区域中打开的当前源文件的大纲。• “Target Connections”: 为连接到 SDx 工具的不同目标提供状态,例如 Vivado 硬件服务器、目标通信框架 (TCF)

和快速仿真器 (QEMU) 网络。要关闭视图,请单击视图选项卡上的“Close”按钮。要打开视图,请选择“Window → Show View”,然后选择一个视图。您可以通过将视图拖放到 IDE 中的新位置来安排视图以满足您的需求。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 21

Send Feedback

Page 22: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

为了将视图的排列保存为透视图,请选择“Window → Perspective → Save Perspective As”。这为初始项目编辑、报告分析和调试定义了不同的透视图。未保存为透视图的任何更改都将与工作空间一起存储。要恢复默认的视图排列,请选择“Window → Perspective → Reset Perspective”。要打开不同的透视图,请选择“Window → Perspective → Open Perspective”。

要恢复 SDx(默认)透视图,请单击主工具栏右侧的 SDx 按钮 。

SDx 辅助“Assistant”视图提供了一个以 SDx 为中心的项目树来管理设置、构建、运行时、配置文件、调试和报告。它是“Project Explorer”的伴随视图,默认情况下直接在“Project Explorer”视图下打开。“Assistant”及其树结构的示例视图如下所示。对于扩展的硬件仿真流程,它显示二进制容器内容和调试报告,包括“Profile Summary”, “Application Timeline”和“Waveform”。

图 11: “Assistant”树结构示例

树中的每个项目都有一个特定于类型的右键单击菜单,其中包含该项目的操作。这些操作可以打开对话框、报告或视图,启动进程或启动外部任务。例如,右键单击项目(下面的示例中的 “mixed_c_rtl”)将显示以下菜单:

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 22

Send Feedback

Page 23: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 12: “Assistant”右键单击

提示: 如果操作被禁用/变灰,则表示项目没有适用的信息。

选择“Settings”打开“Project Settings”对话框。图 13: 项目设置

您可以选择树中列出的各个项目的设置。例如,如果选择了 “Emulation-HW” 构建配置的设置,则会显示以下内容。通过“Assistant”可以轻松浏览设计对象并查看/更新其设置。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 23

Send Feedback

Page 24: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 14: “Emulation-HW"

“View Menu”包含影响“Assistant”视图行为的选项,但不影响项目数据。通过左键单击下图中显示的向下箭头选择此选项。

图 15: “Assistant”视图菜单

它显示下列选项:• “Show Reports”: 如果选中,则报告将显示在树中。如果未选中,报告将不会显示在树中。仅当报告存在于项目

中时才会在树中打开,通常在通过特定设置生成或运行项目之后。• “Show Active Build Configurations Only”: 如果选中,则树将仅显示每个项目的活动构建配置。“Assistant”中

的活动构建配置将是最近构建的配置。还可以更改活动构建配置以查看标准 CDT 方法(“Project → BuildConfigurations → Set Active”或“Project → Build Configurations → Manage”)。使用 Assistant 迭代特定构建时,仅查看当前构建配置会很有帮助。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 24

Send Feedback

Page 25: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

• “Link with Console”: 如果选择是针对构建配置,或者来自构建配置的树中的后代,则选中后,“Console”视图中的构建控制台会自动切换以匹配“Assistant”树中的当前选择。如果未选中,则在“Assistant”选项更改时,控制台不会自动切换。

• “Link with Guidance”: 如果选中,则“Console”区域中的“Guidance”会自动切换以匹配“Assistant”树中的当前选择。

图 16: “Assistant”与“Console ”视图菜单的链接

您可以看到,只需点击几下,就可以使用“Assistant”访问该工具的许多功能和特性。

XOCC 连接和编译选项使用“Assistant”窗口可以更新 xocc 编译和连接选项。首先,右键单击“Assistant”窗口中的 binary_container文件夹,选择 “Settings” 如下所示。

图 17: 从“Assistant”窗口的 XOCC 设置

出现如下二进制容器设置窗口。要添加连接器 xocc 选项,在 “XOCC linker options” 字段中直接输入该选项。您添加的选项在 makefile(位于 “Project Explorer” 下)中更新,并在构建过程中应用。此外,为了方便,更新的选项也显示在 “XOCC Linker Command Line” 方框中。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 25

Send Feedback

Page 26: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 18: XOCC 连接器选项

硬件仿真、软件仿真和系统配置的 xocc 连接器选项略有不同。特别是,该目标(-t 选项)与各个配置匹配,且“System”配置中未启用调试。要添加 xocc 编译选项至特定内核,请在 binary_container 文件夹下单击所需的内核。例如,在下面的图像中,在“System”配置中选择了 krnl_vadd 内核。可以在 “XOCC compile options” 字段中直接输入编译选项。您添加的选项仅适用于该内核,不会在内核之间共享。“XOCC Compiler Command Line” 显示了更新的选项。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 26

Send Feedback

Page 27: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 19: XOCC 编译器选项

有的选项可以设置内核实例(计算单元)的数量,有的可以设置端口数据宽度。修改这些选项时,会自动生成相关的xocc 编译选项,并为您添加至 xocc 编译器命令行。与 xocc 连接器选项类似,硬件仿真、软件仿真和系统配置的编译器选项略有不同。特别是,该目标(-t 选项)与各个配置匹配,且“System”配置中未启用调试。对于硬件仿真和系统配置,还显示了“Compute Unit Settings”区域(在上面的图像中用黄色标出),允许设置其他的连接器和编译选项。由于没有附加选项应用于软件仿真,该设置中未显示“Compute Unit Settings”区域。对于硬件仿真配置,仅显示了存储器和 SLR (参见 超级逻辑区域超级逻辑区域查看关于 SLR 的解释)的分配选项。然而,对于系统配置,显示了其他协议检查器和剖析逻辑选项。根据已选择的选项,此操作会导致对 xocc 连接器和编译选项进行更新。

导出和导入 SDx 工程SDx 提供了一种在工作空间中导出/导入一个或多个 SDx 项目的简化方法。您可以选择包含关联的项目构建文件夹。

导出 SDx 工程导出项目时,它会将项目归档为 zip 文件,其中包含导入另一个工作空间所需的所有相关文件。1. 要导出项目,请从主菜单中选择“File → Export”。2. 打开 Export Wizard 后,选择要在该文件夹下导入的项目,如下图所示,然后单击“Next”。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 27

Send Feedback

Page 28: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 20: 选择 Export Wizard

3. “Export SDx Projects”窗口打开后,将显示工作空间中的项目,如下图所示。通过选中相应的复选框,选择要包含在存档中的所需项目。输入存档文件的名称以及要保存文件的目录位置。此外,通过选中包括构建文件夹复选框,可以选择在存档中包含关联的项目构建文件夹。构建文件夹包括所有构建相关文件,例如报告和位文件。

4. 单击“Finish”保存存档 zip 文件。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 28

Send Feedback

Page 29: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 21: 导出文件名构建文件夹

SDx 项目已成功存档,可以导入到其他工作空间。

导入 SDx 工程1. 要导入 SDx 项目,请从顶部菜单中选择“File → Import”。2. 在“Import”窗口中,选择 赛灵思 文件夹下的 SDx Project Import Wizard,如下图所示,然后单击“Next”。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 29

Send Feedback

Page 30: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 22: 导入选择导入向导

3. 这将打开“Import Projects”窗口以选择导入文件类型。选择下图所示的 SDx 项目导出 zip 文件,然后单击“Next”。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 30

Send Feedback

Page 31: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 23: 导入项目 - 导入类型

4. 这将打开“Import SDx Projects”窗口。5. 浏览并选择所需的存档文件。它将显示已存档的项目。6. 使用复选框选择要导入的项目,然后单击“Next”。在下图中,两个项目都被选中进行导入。7. 单击“Finish”以将项目导入工作空间。

图 24: 导入存档文件名

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 31

Send Feedback

Page 32: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

添加源文件项目由许多不同的源文件组成,包括用于主机应用代码、内核函数甚至预先编译完成的 .xo 文件的源文件。在 SDx

IDE 中打开项目后,您可以在“Project Explorer”中左键单击 import sources icon 将这些源文件添加到项目中。出现下图中显示的“Import Sources”对话框。

图 25: “Import Sources”对话框

1. 在对话框中,单击“Browse”以选择要从中导入源文件的目录。选择所需的源文件并单击“Finish”。2. 出现该目录中的源文件。选择相应的复选框并单击“Finish”,选择要导入的所需源文件。在下面的图像中,C/C+

+、OpenCL™ 和报头文件将被导入到项目。重要提示! 将源文件导入工作空间时,会将文件复制到工作空间中。如果删除工作空间,对文件的任何更改都将丢失。3. 同样,您可以通过 “Import Sources” 选择将已编译的内核(.xo 文件)导入到项目。在下图中,

krnl_vadd.xo 文件将导入到项目。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 32

Send Feedback

Page 33: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 26: 导入 .xo 源文件

4. 除了导入源文件之外,您还可以在 GUI 中创建和编辑新的源文件。在 SDx IDE 中打开项目后,右键单击 src 文件夹并选择“New → File”,如下图所示。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 33

Send Feedback

Page 34: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 27: 新文件选择

5. 选择要在其中创建新文件的文件夹,然后输入文件名,如下图所示。单击“Finish”,将文件添加到项目。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 34

Send Feedback

Page 35: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 28: 新文件名

6. 将源文件添加到项目后,您就可以开始配置、编译和运行应用。您可以在“Project Explorer”中展开 src 文件夹并双击该文件来打开源文件。

第 3 章: 创建 SDAccel 工程

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 35

Send Feedback

Page 36: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

第 4 章

编程 SDAccelSDAccel™ 环境为在赛灵思 FPGA 上运行的内核生成的定制处理体系结构提供了显著的性能提升的机会。但是,您必须通过专门为 FPGA 加速编写主机和内核代码来利用这些机会。主机应用程序在 x86 服务器上运行,并使用 SDAccel 运行时来管理与 FPGA 内核的交互。主机应用程序使用 OpenCL™

API 以 C/C++ 编写。定制内核运行在 SDAccel 平台上的赛灵思 FPGA 中。SDAccel 硬件平台包含全局存储器 bank,用于在主机和内核之间传输数据。此外,在支持的平台上,主机和内核之间的直接流传输也可用于在主机和内核之间进行传输。主机 x86 机器和 SDAccel 加速器开发板之间的通信在 PCIe® 总线上进行。以下主题讨论如何为主机应用程序编写代码以建立赛灵思运行时间 (XRT),将内核二进制文件加载到 SDAccel 平台中,在主机应用程序和内核之间有效地传递数据,以及在适当的时间在主机应用程序中触发 FPGA 上的内核。FPGA 架构可以支持同时运行的多个内核。因此,您可以创建单个内核的多个实例,或在同一器件上配置多个内核,以提高主机应用程序的性能。在 FPGA 上运行的内核可以有一个或多个接口连接到平台或其他内核。指定在 FPGA 上运行的内核数量,内核访问的存储器 bank 连接以及主机和内核之间或内核之间的流传输连接是在构建过程中使用 xocc链接选项完成的。如需了解更多信息,请参阅 构建硬件 一节,或者如需了解更多详细信息,请参阅《SDAccel 环境编程指南》(UG1277)。有关主机应用程序、内核代码以及它们之间的交互的详细信息,请参阅该指南。

编码主机应用程序创建主机应用程序时,必须管理建立和配置 SDAccel 运行时间所需的开销,编程和启动内核,在主机应用程序和内核之间来回传递数据,以及解决应用程序的主要功能。

设置运行时间在每个主机应用中,您必须设置环境以确定 OpenCL 平台和器件 ID、指定文本、创建命令队列、构建程序,并调用一个或更多内核。该程序确定并配置内核,并在主机代码和内核之间传输数据。在主机代码中,该进程可以使用如下步骤。提示: 下面的代码示例选自 IDCT 示例设计。

1. 要设置 OpenCL 运行时间环境,您需要使用 clGetPlatformIDs 和 clGetPlatformInfo 命令来确定赛灵思平台。例如:cl_platform_id platform_id; // platform id

err = clGetPlatformIDs(16, platforms, &platform_count); // Find Xilinx Platform

第 4 章: 编程 SDAccel

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 36

Send Feedback

Page 37: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

for (unsigned int iplat=0; iplat<platform_count; iplat++) { err = clGetPlatformInfo(platforms[iplat], CL_PLATFORM_VENDOR, 1000, (void *)cl_platform_vendor, NULL);

if (strcmp(cl_platform_vendor, "Xilinx") == 0) { // Xilinx Platform found platform_id = platforms[iplat]; }}

2. 确定平台上可用于排列内核的赛灵思器件,方法是使用 clGetDeviceIDs 命令。发现器件 ID 需要前面步骤中发现的平台 ID。例如:clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_ACCELERATOR, 1, &device_id, NULL);

3. 使用 clCreateContext 建立上下文。上下文是工作项目执行的环境,可识别将从命令队列分配传输事务的器件。下面的示例显示了上下文的创建:cl_context cntxt = clCreateContext(0, 1, &device_id, NULL, NULL, &err);

4. 使用 clCreateCommandQueue 定义命令队列。命令队列是一系列等待在器件中执行的命令。您可以建立命令队列,按提交的顺序处理命令,或者不按顺序,尽快处理某个命令。将不按顺序的命令队列或多个按顺序的命令队列,用于 FPGA 上的并行内核执行。下面的示例:// Create out-of-order Command Queuecl_command_queue commands = clCreateCommandQueue(context, device_id, CL_QUEUE_PROFILING_ENABLE | CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &err);

5. 最后,在主机代码中您需要设置程序,其包含并配置将由主机应用传递至命令队列的内核。load_file_to_memory 功能用于在主机存储器空间中加载文件内容。clCreateProgramWithBinary 命令下载 FPGA 二进制 (.xclbin) 至器件,并返回 cl_program 句柄。下例展示了使用这些 API 调用创建程序:char *fpga_bin;size_t fpga_bin_size;fpga_bin_size = load_file_to_memory(binaryName, &fpga_bin);

cl_program program = clCreateProgramWithBinary(context, 1, (const cl_device_id* ) &device_id, &fpga_bin_size, (const unsigned char**) &fpga_bin, NULL, &err);

向 FPGA 器件传输数据或从 FPGA 器件传输数据建立程序后,您可以在触发内核之前将内核所需的数据传输到 SDAccel 平台。从内核来回发送数据的最简单方法是使用 clCreateBuffer、clEnqueueReadBuffer 和 clEnqueueWriteBuffer 命令。但是,要在数据传输事务之前传输所需的数据,请使用 clEnqueueMigrateMemObjects 命令。使用此命令可以减少应用的时延。以下代码示例演示了这一点:int host_mem_ptr[MAX_LENGTH]; // host memory for input vector // Fill the memory inputfor(int i=0; i<MAX_LENGTH; i++) { host_mem_ptr[i] = <... > }

cl_mem dev_mem_ptr = clCreateBuffer(context,

第 4 章: 编程 SDAccel

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 37

Send Feedback

Page 38: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR, sizeof(int) * number_of_words, host_mem_ptr, NULL);

clSetKernelArg(kernel, 0, sizeof(cl_mem), &dev_mem_ptr);

err = clEnqueueMigrateMemObjects(commands, 1, dev_mem_ptr, 0, 0, NULL, NULL);

提示: 默认情况下,来自所有内核的所有存储器接口都连接到单个全局存储器 bank。您可以通过修改默认连接来自定义全局存储器 bank 连接。这可以通过使多个内核从单独的全局存储器 bank 同时读写数据来提高内核性能。如需了解更多信息,请参阅 将内核接口映射至存储器资源。

设置内核建立程序后,您可以建立内核,执行内核,并管理主机应用程序和内核之间的事件同步。1. 使用 clCreateKernel 命令从程序和加载的 FPGA 二进制文件创建内核:

// Create Kernelcl_kernel krnl = clCreateKernel(program, "krnl_idct", &err);

2. 使用 clSetKernelArg 设置内核实参。您可以使用此命令设置内核的实参。// Set the kernel argumentsclSetKernelArg(mKernel, 0, sizeof(cl_mem), &mInBuffer[0]);clSetKernelArg(mKernel, 1, sizeof(cl_mem), &mInBuffer[1]);clSetKernelArg(mKernel, 2, sizeof(cl_mem), &mOutBuffer[0]);clSetKernelArg(mKernel, 3, sizeof(int), &m_dev_ignore_dc);clSetKernelArg(mKernel, 4, sizeof(unsigned int), &mNumBlocks64);

3. 内核计划使用 clEnqueueTask 在 FPGA 上运行。执行内核的请求被放入命令队列后,它将等待执行,或者在准备就绪时执行,具体情况取决于队列的性质。clEnqueueTask(mQ, mKernel, 1, &inEvVec[mCount], &runEvVec[mCount]);

4. 由于 clEnqueueTask(以及 clEnqueueMigrateMemObjects)命令本质上是异步的,并且在命令进入命令队列后立即返回,因此您可能需要管理主机应用程序中事件的调度。要解决主机应用程序中命令之间的相依性,可以使用 clWaitForEvents 或 clFinish 命令暂停或阻止主机程序的执行。例如:// Execution waits until all commands in the command queue are finishedclFinish(command_queue);

clWaitForEvents(1, &readevent); // Wait for clEnqueueReadBuffer event to finish

如需了解更多有关设置内核的信息,请参阅《SDAccel 环境编程指南》 (UG1277)。

内核语言支持SDAccel 环境支持以 OpenCL C、C/C++ 和 RTL(SystemVerilog、Verilog 或 VHDL)表示的内核。您可以在同一个应用程序中使用不同的内核类型。但是,每个内核都有特定的要求和应该使用的编码样式。从 OpenCL C 和 C/C++ 创建的内核非常适合软件和算法开发者。它使从现有的 C/C++ 应用程序启动并加速其某一部分更容易。

第 4 章: 编程 SDAccel

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 38

Send Feedback

Page 39: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

所有内核都需要以下内容:• 用于访问控制寄存器的从设备 AXI4-Lite 接口(用于传递 scalar 实参并启动/停止内核)• 至少有一个下列接口(可以同时有两个接口):

○ AXI4 主接口,用于与全局存储器通信。○ AXI4-Stream 接口,用于在内核之间或直接与主机传输数据。

编写 OpenCL C 内核SDAccel 环境支持 OpenCL C 语言从 OpenCL 1.0 嵌入式配置文件构造和内置函数。以下是可以使用 SDAccel 环境编译的矩阵乘法的 OpenCL C 内核示例。__kernel __attribute__ ((reqd_work_group_size(16,16,1))) void mult(__global int* a, __global int* b, __global int* output){ int r = get_local_id(0); int c = get_local_id(1); int rank = get_local_size(0); int running = 0; for(int index = 0; index < 16; index++){ int aIndex = r*rank + index; int bIndex = index*rank + c; running += a[aIndex] * b[bIndex]; } output[r*rank + c] = running; return;

}

重要提示! 诸如 math.h 之类的标准 C 库不能在 OpenCL C 内核中使用。请改用 OpenCL 内置 C 函数。

对于 OpenCL C 内核,AXI4-Lite 接口是自动生成的,而 AXI4-Lite 内存映射接口是根据函数定义中的 __global 指令生成的。

编写 C/C++ 内核SDAccel 环境支持用 C/C++ 编写的内核。上述矩阵乘法内核可以用 C/C++ 代码表示,如下所示。对于以这种方式捕获的内核,SDAccel 环境支持 Vivado® HLS 中可用的所有最优化技术。您只需牢记以这种方式表达内核需要遵守特定的函数签名样式。务必要记住,默认情况下,使用 C/C++ 捕获的 HLS 的内核对用于传输函数参数数据的物理接口没有任何固有的假设。HLS 使用嵌入在代码中的编译指示对编译器进行有关为函数端口生成物理接口的指导。要将函数视为有效的 HLS C/C++ 内核,每个函数实参都应具有有效的 HLS 接口编译指示。void mmult(int *a, int *b, int *output){#pragma HLS INTERFACE m_axi port=a offset=slave bundle=gmem#pragma HLS INTERFACE m_axi port=b offset=slave bundle=gmem#pragma HLS INTERFACE m_axi port=output offset=slave bundle=gmem#pragma HLS INTERFACE s_axilite port=a bundle=control#pragma HLS INTERFACE s_axilite port=b bundle=control#pragma HLS INTERFACE s_axilite port=output bundle=control#pragma HLS INTERFACE s_axilite port=return bundle=control

第 4 章: 编程 SDAccel

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 39

Send Feedback

Page 40: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

const int rank = 16; int running = 0; int bufa[256]; int bufb[256]; int bufc[256]; memcpy(bufa, (int *) a, 256*4); memcpy(bufb, (int *) b, 256*4);

for (unsigned int c=0;c<rank;c++){ for (unsigned int r=0;r<rank;r++){ running=0; for (int index=0; index<rank; index++) { #pragma HLS pipeline int aIndex = r*rank + index; int bIndex = index*rank + c; running += bufa[aIndex] * bufb[bIndex]; } bufc[r*rank + c] = running; } }

memcpy((int *) output, bufc, 256*4); return;}void mmult(int *a, int *b, int *output)

通过 C++ 定义内核时,在目标为内核的函数周围使用 extern“C”{...}。通过 extern“C” 指示编译器/连接器使用 C命名和调用约定。对于 C/C++ 内核,使用接口编译指示映射到 AXI4-Lite 和 AXI4 存储器映射接口。对于 RTL 内核,您负责添加这些接口。

指针实参所有指针都映射到全局存储器。数据通过可以映射到不同 bank 的 AXI 接口访问。存储器接口规格需要以下两个编译指示:1. 第一个是定义访问 AXI 内存映射接口的实参。始终需要偏移。offset=slave 意味着阵列 <variable_name>

的偏移将通过内核的 AXI 从接口提供。#pragma HLS INTERFACE m_axi port=<variable name> offset=slave bundle=<AXI_MM_name>

2. AXI 从接口的第二个编译指示。scalar(和指针偏移)映射到一个必须命名为 control 的 AXI 从控制接口。#pragma HLS INTERFACE s_axilite port=<variable name> bundle=control

注释: 使用版本 4.x 或更早版本的平台时,通过让 arg_name 大写与原始大写无关并使用 M_AXI_ 前缀从而使用接口名称 M_AXI_ARG_NAME。使用当前平台(版本 5.x 或更高版本)时,使用接口名称 m_axi_arg_name;arg_name 的原始大写必须是小写,并使用 m_axi_ 前缀。

scalarscalar 被认为是常量输入,也应该映射到 s_axilite。控制接口规格由以下命令生成:#pragma HLS INTERFACE s_axilite port=<variable name> bundle=control

第 4 章: 编程 SDAccel

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 40

Send Feedback

Page 41: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

有关如何使用这些编译指示的详细信息,请参阅《SDx 编译指示参考指南》 (UG1253)。C++ 任意精度数据类型可用于内核的全局内存指针。对于按值传递的 scalar 内核输入,不支持这些数据类型。

流传输流传输提供了直接将数据流式传输到内核而无需使用全局存储器的功能。由于未使用全局存储器,因此流传输可以提供更高的性能和能力,但需要额外的 FPGA 存储器(块 RAM)。流传输可以分为两种不同的类型:1. 主机到卡 (H2C) 和卡到主机 (C2H) 流传输2. 内核到内核 (K2K) 流传输在 H2C 和 C2H 中,数据在主机和卡上的内核之间流传输。H2C 和 C2H 流传输仅适用于部分 QDMA 平台,例如xilinx_u200_qdma_201910_1。对于 H2C 和 C2H 之间的流传输,您没有显式建立连接 - 系统连接器自动建立连接。除了主机和卡之间的流传输数据外,还支持内核到内核 (K2K) 流传输。它在内核之间提供直接流传输。与 H2C 和 C2H流传输不同,所有平台都支持 K2K 流传输。但是,使用 K2K 进行流传输时,必须指定源和目标内核流传输接口之间的连接。这在 xocc 进行链接期间完成。必须为每个流传输接口指定以下编译指示,如下所示:#pragma HLS interface axis port=<port_name>

《SDAccel 环境编程指南》 (UG1277) 中的“SDAccel Streaming Platform”附录提供了有关流传输的完整详细信息,包括主机/内核和内核/内核之间传输的主机和内核编码指南。另外,如需了解更多有关 C/C++ 内核的信息,请参阅《SDAccel 环境编程指南》 (UG1277) 中的“Programming C/C++ Kernels”一章。

编写 RTL 内核在 SDAccel 环境框架中使用 RTL 内核应满足软件和硬件要求。在软件方面,RTL 内核必须运行并遵守 内核软件要求 中描述的寄存器定义。在硬件方面,它需要 内核接口要求 中概述的接口。如需了解有关创建和使用 RTL 内核的完整详细信息,请参阅 第 9 章: RTL 内核。

第 4 章: 编程 SDAccel

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 41

Send Feedback

Page 42: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

第 5 章

构建系统构建系统需要同时构建系统的硬件(内核)和软件(主机代码)方面。下面显示的“Project Editor”视图提供构建配置的顶层视图。还提供了有关活动的构建配置的一般信息,包括项目名称、当前平台和选择的系统配置(OS 和运行时间)。它还显示了若干构建选项,包括选择的构建目标及启用主机和内核调试的选项。如需了解有关构建目标的详情,请参阅 构建目标,同时 第 7 章: 调试应用和内核 提供关于使用调试选项的详情。

图 29: “Project Editor”视图

“Project Editor”视图的底部列出了当前在项目中使用的内核。二进制容器中列出了内核。在上例中,内核krnl_vadd 已被添加至 binary_container_1。要添加二进制容器,请左键单击 图标。您可以通过单击默认名称并输入新名称重新命名二进制容器。

要将内核添加至二进制容器,请左键单击位于“Hardware Functions”窗口的 图标。它将显示在项目中定义的内核列表。从“Add Hardware Functions”对话框选择内核,如下图所示。

第 5 章: 构建系统

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 42

Send Feedback

Page 43: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 30: 将硬件函数添加至二进制容器

在内核旁边的 “Compute Units” 栏中,输入一个值来实例化多个内核实例(称之为计算单元),如 创建内核的多个实例 中所述。

在指定了各种活动构建配置选项后,您可以单击构建 ( ) 命令开始构建进程。SDAccel™ 构建进程生成主机应用可执行程序 (.exe) 和 FPGA 二进制文件 (.xclbin)。SDAccel 环境管理两个独立的构建流程:• 主机代码(软件)构建• 内核代码(硬件)构建SDAccel 针对项目的软件和硬件元素使用标准编译和链接进程。以下章节描述了构建主机和内核代码以生成选择的构建目标的步骤。

构建主机应用使用 OpenCL™ API 调用并用 C/C++ 编写的主机应用程序,是使用基于 GNU 编译器集合 (GCC) 的赛灵思 C++ 编译器(xcpp) 构建的应用程序。将每个源文件编译成对象文件 (.o) 并与赛灵思 SDAccel 运行时间共享库链接,以创建可执行程序 (.exe),后者即可在主机 CPU 上运行。提示: xcpp 基于 GCC,因此支持许多标准 GCC 选项,本文档未记录这些选项。如需了解有关信息,请参阅 GCC 选项索引。

第 5 章: 构建系统

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 43

Send Feedback

Page 44: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

编译主机应用使用 -c 选项编译每个主机应用程序源文件,并生成对象文件 (.o)。xcpp ... -c <file_name1> ... <file_nameN>

可以使用 -o 选项指定输出对象文件的名称。xcpp ... -o <outut_file_name>

您可以使用 -g 选项生成调试信息。xcpp ... -g

连接主机应用生成的对象文件 (.o) 与赛灵思 SDAccel 运行时间共享库链接以创建可执行程序 (.exe)。使用 -l 选项执行链接。xcpp ... -l <object_file1.o> ... <object_fileN.o>

注释: 主机编译和链接可以集成到一个步骤中。-c 和 -l 选项不是必需的,只需要源输入文件。

在 GUI 流程中,通过单击构建 ( ) 命令来编译和链接主机代码和内核代码。

构建硬件内核代码用 C、C++、OpenCL C 或 RTL 编写,并由 xocc 编译器构建;命令行实用程序在 GCC 后建模。xocc 的最后输出是生成 FPGA 二进制文件 (.xclbin),它连接内核 .xo 文件和硬件平台 (.dsa)。生成 .xclbin 是一个需要内核编译和链接的两步构建过程。xocc 可以单独使用(或理想情况下,在脚本或类似 make 的构建系统中使用),并且 SDx™ IDE 也完全支持。

构建目标编译取决于所选的构建目标,这在 构建目标 中有更详细的讨论。可以使用 xocc –target 选项指定构建目标,如下所示。xocc --target sw_emu|hw_emu|hw ...

• 进行软件仿真 (sw_emu) 时,在仿真期间将使用内核源代码。• 进行硬件仿真 (hw_emu) 时,在硬件仿真流程的仿真中将使用综合 RTL 代码。• 构建系统 (hw) 时,xocc 生成可以在硬件上运行的 FPGA 二进制文件和系统。

第 5 章: 构建系统

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 44

Send Feedback

Page 45: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

编译内核在编译期间,xocc 将内核加速器函数(用 C/C ++ 或 OpenCL 语言编写)编译为 赛灵思 对象 (.xo) 文件。每个内核都编译成单独的 .xo 文件。这是 xocc 的 -c/--compile 模式。以 RTL 编写的内核使用 package_xo 命令行实用程序编译。与 xocc -c 类似,此实用程序还生成随后在链接阶段使用的 .xo 文件。如需了解更多信息,请参阅 第 9 章: RTL 内核。

连接内核如上所述,无论内核是用 OpenCL C、C、C++ 或 RTL 描述,内核编译过程都会产生一个赛灵思对象文件 (.xo)。在链接阶段,来自不同内核的 .xo 文件与 shell 链接,以创建主机代码所需的 FPGA 二进制容器文件 (.xclbin)。链接文件的 xocc 命令是:$ xocc -l <kernel_object_file>.xo -o <binary_platform_file>.xclbin

其中还提供一个输入 kernel_object_file,binary_platform_file 是 xclbin 输出文件的名称。

创建内核的多个实例在链接阶段,您可以通过 --nk xocc 开关指定内核实例的数量,称为计算单元。这允许相同的内核函数在应用程序运行时并行运行,以使用 FPGA 上的不同器件资源来提高主机应用程序的性能。注释: 如需了解更多有关 --nk 选项的信息,请参阅《SDAccel 环境编程指南》 (UG1277) 和《SDx 命令和工具参考指南》 (UG1279)。在命令行流程中,xocc --nk 选项指定要实例化到 .xclbin 文件中的给定内核的实例数。该命令的语法为:$ xocc –nk <kernel name>:<no of instances>:<name1>.<name2>…<nameN>

例如,内核 foo 使用计算单元名称 fooA、fooB 和 fooC 实例化三次:$ xocc --nk foo:3:fooA.fooB.fooC

提示: 虽然内核实例名是可选填,但强烈建议指定一个,因为它是 --sp 等选项所必需的。

在 GUI 流程中,可以通过右键单击 “Assistant” 视图中的顶层内核,然后选择“Settings”来指定计算单元的数量。在“Project Settings”对话框中,选择所需的内核以实例化并更新“计算单位”值。在下图中,内核 krnl_vadd 将实例化三次(即三个 CU)。

第 5 章: 构建系统

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 45

Send Feedback

Page 46: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 31: 实例化多个计算单元

在上图中,krnl_vadd 内核的三个计算单元将链接到 FPGA 二进制文件 (.xclbin),地址为 krnl_vadd_1、krnl_vadd_2 和 krnl_vadd_3。要访问内核的各个实例,请使用主机代码中的 OpenCL API clCreateSubDevices 将器件划分为多个子器件,每个子器件包含一个内核实例。如需了解有关具体细节,请参阅《SDAccel 环境编程指南》 (UG1277) 中的“子器件”章节。

将内核接口映射至存储器资源链接相位即为内核的存储器端口连接至存储器资源的时间,包括 PLRAM 和 DDR。如未指定,与这些资源的连接将在xocc 链接期间自动完成。然而,赛灵思 为了实现最佳性能,建议指定了这些连接。如需了解更多信息,请参阅《SDAccel 环境编程指南》 (UG1277) 和《SDx 命令和工具参考指南》 (UG1279)。SDAccel 平台可以获取多个存储器资源。例如,将计算单元的输入和输出端口映射至不同的存储器资源,您可以通过启用同时访问输入和输出数据提升整体性能。在链接期间使用 xocc --sp 选项,将接口从计算单元映射至存储器资源。主机应用编码详情请参见 《SDAccel 环境编程指南》 (UG1277) 中“至/自 FPGA 器件的存储器数据传输”章节。将计算单元的存储器接口分配至存储器资源的指令是:--sp <compute_unit>.<mem_interface>:<memory>

其中,• compute_unit 是计算单元的名称 (CU)

• mem_interface 是计算单元的一个存储器接口或函数实参的名称

第 5 章: 构建系统

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 46

Send Feedback

Page 47: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

• memory 是存储器资源必须为每个存储器接口连接提供一个独立的指令。提示: 如果您有 .xo 文件或 platforminfo,或如果您有 .xclbin 文件,应使用命令行工具 kernelinfo 来获得内核信息,包括内核、端口和实参名称。如需了解更多有关工具的信息,请参阅 《SDx 命令和工具参考指南》(UG1279)。下面的示例将名为 m_axi_gmem 的存储器接口从一个名为 vadd_1 的 CU 分配至 DDR[3] 存储器:xocc … --sp vadd_1.m_axi_gmem:DDR[3]

在 SDx GUI 中,--sp 开关可以通过 SDx GUI 添加,类似 创建内核的多个实例 中概述的进程。右键单击“Assistant” 视图中的顶层内核,并选择 “Settings”。在“Project Settings”对话框中,在 “XOCC LinkerOptions” 字段中输入 --sp 选项。要在 “Assistant” 中通过 GUI 将指令添加至 xocc 编译,请右键单击 “System” 下所需的内核并选择设置。由此显示硬件功能设置对话窗口,您可以在 “Compute Unit Settings” 区域内改变存储器接口。为了特定实参改变存储器资源映射,单击 “Memory” 各个实参的设置,变更至所需的存储器资源。下图显示了选中的实参。

图 32: 计算单元存储器设置

为所有 CU 实参选择完全相同的存储器资源,单击 CU 存储器资源(即,上例中的 kernl_vadd_1)并选择想要的存储器资源。重要提示! 当使用 --sp 选项将内核接口分配至存储器 bank 时,您必须为内核中的全部接口指定 --sp 选项。如需了解更多信息,请参阅 《SDAccel 环境编程指南》 (UG1277) 中的“定制 DDR Bank 内核连接”。

第 5 章: 构建系统

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 47

Send Feedback

Page 48: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

内核到内核流传输连接内核到内核 (K2K) 流传输在内核之间提供直接流传输。必须指定源和目标内核流传输接口之间的流传输连接。这是在进行 xocc 链接期间通过 –sc 选项完成的,如下所示:xocc -l --sc <kernel_instance_name>.<source streaming port>:<kernel_instance_name><destination streaming port>

例如,要连接以下两个内核的两个流传输端口:1. 实例名称 CU_A,带有名为 data_out 的输出流传输端口。2. 实例名称 CU_B,带有一个名为 data_in 的输入流传输端口。使用下列命令:xocc -l --sc CU_A.data_out:CU_B.data_in

将计算单元分配给 SLR在 xocc 链接使用 --slr 指令期间,计算单元 (CU) 被分配给超级逻辑区域 (SLR)。命令行指令的语法是:--slr <compute_unit>:<SLR_NUM>

其中 compute_unit 是 CU 的名称,SLR_NUM 是 CU 被分配到的 SLR 的编号。例如,xocc … --slr vadd_1:SLR2 将名称为 vadd_1 的 CU 分配给 SLR2。必须为设计中的每个 CU 单独应用 --slr 指令。例如,在下面的示例中,三次调用 --slr 指令将所有三个 CU 分配给SLR;krnl_vadd_1 和 krnl_vadd_2 被分配给 SLR1,而 krnl_vadd_3 被分配给 SLR2。--slr krnl_vadd_1:SLR1 --slr krnl_vadd_2:SLR1 --slr krnl_vadd_3:SLR2

如果某个 CU 缺少 --slr 指令,工具会把该 CU 自由地分配给任何 SLR。如需了解有关 CU SLR 映射的建议,请参阅 内核 SLR 和 DDR 存储器分配。在 SDx GUI 中,要把 CU 分配给 GUI 流程中的 SLR,请在“System”或“Emulation-HW”配置下右键单击所需的内核,然后选择“Settings”,如下图所示。

第 5 章: 构建系统

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 48

Send Feedback

Page 49: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 33: xocc 链接设置

这将显示硬件功能设置对话框窗口。在“Compute Unit Settings”区域下,您可以通过单击相应 CU 的 “SLR” 设置并从菜单中选择所需的 SLR 来更改将 CU 分配到的 SLR,如图所示。选择“Auto”可允许工具自由地将 CU 分配给任何 SLR。

图 34: 计算单元 SLR 设置

控制实现结果编译或链接时,高精度控制硬件由 SDAccel 生成,用于硬件仿真,系统构建可以使用 --xp 开关指定。--xp 开关与参数配对,以设置 Vivado® Design Suite。例如,--xp 开关可以配置最优化、布局和硬件实现的时序结果。

第 5 章: 构建系统

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 49

Send Feedback

Page 50: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

--xp 还可以用于建立仿真和编译选项。这些参数的具体示例包括设置时钟边界、指定用于内核数据流区域的 FIFO 深度,指定内核 AXI 接口缓存的待处理写入和读取数量。有关参数和有效值的完整清单,可在 《SDx 命令和工具参考指南》 (UG1279) 中找到。提示: 要充分利用这些参数,必需熟悉 《Vivado Design Suite 用户指南:高层次综合》 (UG902) 和工具集。如需了解更多信息,请参阅《Vivado Design Suite 用户指南:实现》 (UG904)。在命令行流程中,参数被指定为 param:<param_name>=<value>,其中:• param:需要的关键字。• param_name:拟应用参数的名称。• value:用于参数的适当值。重要提示! xocc 连接器不检测参数或值的有效性。小心应用有效值,否则下游工具可能不会正常工作。

例如:$ xocc -–xp param:compiler.enableDSAIntegrityCheck=true -–xp param:prop:kernel.foo.kernel_flags="-std=c++0x"您必须为 xocc 命令中使用的每个 param 重复 --xp 开关,如下所示:$ xocc -–xp param:compiler.enableDSAIntegrityCheck=true-–xp param:prop:kernel.foo.kernel_flags="-std=c++0x"您可以指定 xocc.ini 文件中的 param 值,每一个选项都用独立行指定(没有 --xp 开关)。xocc.ini 是初始化文件,包括 --xp 设置。将该文件放置在与构建配置相同的目录下。param:compiler.enableDSAIntegrityCheck=trueparam:prop:kernel.foo.kernel_flags="-std=c++0x"

在 GUI 流程中,如果不存在 xocc.ini,应用将使用 GUI 构建设置。在 Makefile 流程中,如果不存在 xocc.ini文件,将使用 Makefile 内的设置。在 SDx GUI 中,--xp 开关可以通过 GUI 添加,类似于 创建内核的多个实例 中所述。右键单击 “Assistant” 视图中的顶层内核,并选择 “Settings”。在“Project Settings”对话框中,在 “XOCC Linker Options” 字段中输入 --xp选项。您还可以通过右键单击“Assistant”视图中的内核,将 xocc 编译器选项和 --xp 参数添加至内核。下图像展示了krnl_vadd 内核的 --xp 设置。

第 5 章: 构建系统

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 50

Send Feedback

Page 51: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 35: Assistant XOCC 编译设置

控制报告生成xocc-R 开关控制硬件仿真和系统目标的链接阶段的报告生成级别。生成较少报告的构建通常会运行得更快。命令行选项如下:$ xocc -R <report_level>

其中 <report_level> 是以下 report_level 选项之一:• -R0:最小报告,并且没有中间设计检查点 (DCP)

• -R1:包括 R0 报告,以及:○ 标识要为每个内核查看的设计特征 (report_failfast)

○ 标识要为全部设计选择后检查的设计特征 (report_failfast)

○ 保持选择后 DCP

• -R2 :包括 R1 报告,以及:

第 5 章: 构建系统

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 51

Send Feedback

Page 52: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

○ 每个实施步骤后的 Vivado 默认报告包括 DCP

○ 布局后要检查的每个 SLR 的设计特征 (report_failfast)

提示: report_failfast 是一种实用工具,突出显示潜在的器件利用率问题、时钟约束问题以及潜在的无法达到的目标频率 (MHz) 。也可以通过 SDx GUI 添加 -R 开关,如 创建内核的多个实例 所述:• 右键单击“Assistant”视图中的顶层内核,然后选择“Settings”。• 在“Project Settings”对话框中,在 “XOCC Linker Options” 字段中输入 -R 选项。

构建目标SDAccel 构建目标定义了构建过程生成的 FPGA 二进制文件的性质。有三种不同的构建目标,两个仿真目标(软件和硬件仿真)用于调试和验证目的,而默认硬件目标用于生成实际的 FPGA 二进制文件。

软件仿真软件仿真的主要目标是确保功能正确并将应用程序分区到内核。对于软件仿真,主机代码和内核代码都编译为在主机x86 处理器上运行。通过快速编译和运行循环的迭代算法细化的程序员模型得以保留。软件仿真的编译和执行时间与CPU 相同。如需了解有更多软件仿真的信息,请参阅《SDAccel 环境调试指南》 (UG1281)。在 SDAccel 开发环境中,CPU 上的软件仿真与 CPU/GPU 编程的典型迭代开发过程相同。在这种类型的开发风格中,程序员在开发时不断编译和运行应用程序。对于 RTL 内核,如果 C 模型与内核关联,则可以支持软件仿真。RTL Kernel Wizard 封装步骤提供了将 C 模型文件与RTL 内核相关联的选项,以支持软件仿真流程。

硬件仿真虽然软件仿真流程是衡量功能正确性的一个很好的指标,但它并不能保证 FPGA 执行目标的正确性。硬件仿真流程使程序员能够在部署到硬件之前检查为定制计算单元生成的逻辑的正确性,其中计算单元是内核的实例。SDAccel 环境为应用程序中的每个内核生成至少一个定制计算单元。每个内核都编译为硬件模型 (RTL)。在仿真期间,内核使用硬件仿真器执行,但系统的其余部分仍使用 C 仿真器。这允许 SDAccel 环境能够测试将在 FPGA 计算结构上执行的逻辑的功能。此外,硬件仿真还提供性能和资源估算,使程序员能够深入了解设计。在硬件仿真中,软件仿真的编译和执行时间较长,因此赛灵思建议您使用小数据集进行调试和验证。重要提示! DDR 存储器模型和硬件仿真中使用的存储器接口生成器 (MIG) 模型是高级仿真模型。这些模型有利于模拟性能,但是它们近似时延值并且不像内核那样具有周期精确性。因此,配置文件摘要报告中显示的任何性能数据都是近似的,只可用作比较不同内核实现之间的相对性能的一般指导。

第 5 章: 构建系统

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 52

Send Feedback

Page 53: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

“System"构建目标是系统时,xocc 通过在设计上运行综合和实现来为器件生成 FPGA 二进制文件。二进制文件包含二进制容器中每个计算单元的定制逻辑。因此,此构建步骤比 SDAccel 构建流中的其他步骤运行更长的时间是正常的。但是,由于内核将在实际硬件上运行,因此它们的执行时间将非常快。生成定制计算单元使用 Vivado 高层次综合 (HLS) 工具,该工具是应用编译流程中的计算单元生成器。如果没有编译器的额外用户输入,则无法对所有编码样式自动最优化计算单元以获得最大性能。《SDAccel 环境剖析和最优化指南》(UG1207) 讨论了可以提供给 SDAccel 环境的额外用户输入,以最优化内核操作到定制计算单元的实现。生成所有计算单元后,这些单元将连接到由解决方案中目标器件提供的基础架构元素。器件中的基础结构元素是器件开发者为支持 OpenCL 应用而定义的所有存储器、控制和 I/O 数据平面。SDAccel 环境将定制计算单元和基础器件基础结构相结合,以生成 FPGA 二进制文件,用于在应用程序执行期间对赛灵思器件进行编程。重要提示! SDAccel 环境始终生成有效的 FPGA 硬件设计,并执行从内核到全局存储器的默认连接。赛灵思建议明确定义最佳连接。欲知详情,请参见 内核 SLR 和 DDR 存储器分配。

指定目标您可以使用以下命令从命令行指定目标构建:xocc --target sw_emu|hw_emu|hw ...

同样,在 GUI 中,可以在“Project Editor”窗口中选择 “Active build configuration” 下拉选项卡来指定构建目标。这里提供三种选择(见下图):• “Emulation-SW"• “Emulation-HW"• “System"

图 36: 主动构建配置

提示: 您还可以从构建 ( ) 命令或 “Project → Build Configurations → Set Active” 菜单命令分配编译目标。设置活动的构建配置后,从“Project → Build Project”菜单命令构建系统。推荐的构建流程详见 调试流程。

第 5 章: 构建系统

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 53

Send Feedback

Page 54: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

第 6 章

剖析和最优化SDAccel™ 环境在编译期间生成各种系统和内核资源性能报告。它还在仿真和系统模式配置的应用执行期间收集剖析数据。报告的数据示例包括:• 主机和器件时间线事件• OpenCL™ API 调用序列• 内核执行序列• FPGA 追踪数据包括 AXI 数据传输• 内核开始和停止信号可以同时使用报告和剖析数据来隔离应用中的性能瓶颈并最优化设计,改进性能。最优化应用需要同时优化应用主机代码和任何硬件加速内核。必须最优化主机代码,促进数据传输和内核执行,同时应最优化内核以提升性能和资源利用率。当在 SDAccel 中进行算法最优化时,应考虑四个明显的区域:系统资源利用和性能、内核最优化、主机最优化和PCIe® 带宽最优化。下面的 SDAccel 报告和图形工具支持您描述和最优化这些区域:• 系统估算• 设计指导• HLS 报告• “Profile Summary”• “Application Timeline”窗口• 波形视图和实时波形查看器在通过 SDAccel GUI 或 xocc Makefile 流程运行主动构建后,会自动生成报告。为全部三个构建配置生成几个独立的报告组,可在各个报告目录中找到。重要提示! 仅为硬件仿真生成高层次综合 (HLS) 报告和 HLS 指南,为 C 和 OpenCL 内核而非 RTL 内核生成系统构建配置。为全部三个构建配置生成“Profile Summary”和“Application Timeline”线报告,并位于默认的应用子目录中。可以在浏览器或电子数据表查看器中查看报告 SDAccel GUI。要从 SDx™ 集成的设计环境访问这些报告,请确保“Assistant”视图是可见的并双击想要的报告。下面的章节简要介绍了各种报告和图形可视化工具,以及如何使用它们来描述和最优化您的设计。如需了解有关每一个报告的完整详情,以及最优化步骤和编码指南,请参阅 《SDAccel 环境剖析和最优化指南》 (UG1207)。

第 6 章: 剖析和最优化

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 54

Send Feedback

Page 55: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

设计指导SDAccel 环境具有全面的设计指导工具,可为软件应用开发者提供针对其设计中检测到的问题的即时可操作指导。从xocc 调用时,根据 HLS、SDx 分析工具和 Vivado® Design Suite 生成向导。生成的设计指南可以有多个严重性级别;在软件仿真、硬件仿真和系统构建期间提供错误、建议、警告和严重警告。该指南包括超链接、示例和文档链接。通过快速突出问题并帮助新用户加速成为使用 SDAccel 工具的专家,该指南可以提高当前用户的工作效率。在 SDx GUI 中构建或运行设计后,将自动生成设计指南,其结果包含在 SDx GUI 控制台区域中的“Guidance”视图中。将鼠标悬停在指导上将突出显示解决方案和建议。下图显示了 SDx GUI 提供的指导示例。它详细介绍了增加内核带宽使用的方法。单击链接将显示可操作指南的展开视图。在此情况下,它显示最大限度使用全局内存带宽的指导。

图 37: 设计指导示例

提示: 在“Assistant”中,您可以右键单击构建配置并选择“Show Guidance”。

xocc 的每个命令行运行都有一个 HTML 指导报告,包括编译和链接。报告文件生成在在 --report_dir 位置下,具有特定的 .xo 名称。报告文件的名称如下所示,其中 <output> 是 .xo 名称:• xocc 编译的 xocc_compile_<output>_guidance.html

• xocc 链接的 xocc_link_t_guidance.html

配置设计指导帮助您解释剖析结果,并了解可以提高性能确切之处。有关报告的具体细节和其他设计指导的详细信息,请参阅 《SDAccel 环境剖析和最优化指南》 (UG1207)。

第 6 章: 剖析和最优化

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 55

Send Feedback

Page 56: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

系统估算报告SDAccel HLS 生成系统估算报告,提供有关 FPGA 资源使用情况和硬件加速内核可运行频率的估计。该报告为硬件仿真和系统构建自动生成,可以在下面显示的辅助视图的相应目录下找到。提示: 在硬件仿真构建中生成系统估算报告的时间比提供实际和非估计资源的系统的构建期间短得多。赛灵思建议在执行系统构建之前迭代硬件仿真和优化。

图 38: 系统估算“Assistant”视图

该报告包含用户内核高级详细信息,包括资源使用情况和估计频率。结果可用于指导设计最优化。例如,如果不满足目标频率,则可能需要重新访问源代码。示例报告如下图所示。它显示了 krnl_vadd 内核:• 估计其工作频率为 411 MHz,超过 300 MHz 目标频率。• 在最好的情况下,它具有一个周期的时延。• 估计 FPGA 资源使用 2353 FF、3948 LUT,无 DSP 和三个块 RAM。

第 6 章: 剖析和最优化

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 56

Send Feedback

Page 57: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 39: 系统估算

使用命令行流程时,您可以使用以下选项生成各种报告,包括系统估算报告:xocc .. --report_level <arg>

其中 arg 指定生成的报告级别。有关“系统估算”报告的其他详细信息,请参阅 《SDAccel 环境剖析和最优化指南》 (UG1207)。如需了解有关 --report_level xocc 选项的信息,请参阅 《SDx 命令和工具参考指南》 (UG1279)。

HLS 报告HLS 报告提供有关用户内核的高层次综合 (HLS) 过程的详细信息,并在硬件仿真和系统构建中生成。此过程将 C/C++和 OpenCL 内核转换为负责在 FPGA 上实现功能的硬件描述语言。它提供了定制生成的硬件逻辑的估算 FPGA 资源使用率、工作频率、时延和接口信号信息。这些详细信息在指导最优化内核方面为程序员提供了很多见解。可以通过在“Assistant”中选择报告并双击来打开 HLS 报告。以下是 HLS 报告的一个示例。

第 6 章: 剖析和最优化

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 57

Send Feedback

Page 58: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 40: HLS 报告

从命令行运行时,可以在以下目录中找到此报告:_x/<kernel_name>.<target>.<platform>/<kernel_name>/<kernel_name>/solution/syn/report

如需了解有关“系统估算”报告的其他详情,请参阅《SDAccel 环境剖析和最优化指南》 (UG1207)。

“Profile Summary”报告“Profile Summary”提供有关整体应用性能的注释详细信息。在执行程序期间生成的所有数据都按 SDAccel 收集并按类别分组。配置摘要使程序员可以深入了解实际的数据传输和内核执行数字以及统计信息。提示: 将为所有构建配置自动生成“Profile Summary”报告。但是,通过软件仿真构建,报告将不包括内核执行效率和数据传输效率下的任何数据传输详细信息。此信息仅在硬件仿真或系统构建配置中生成。要在 SDx IDE 中打开“Profile Summary”报告,请双击“Assistant”下的“Profile Summary”报告,如下图所示。

第 6 章: 剖析和最优化

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 58

Send Feedback

Page 59: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 41: 打开“Profile Summary”报告

此处显示的是“Profile Summary”报告的示例。图 42: “Profile Summary”

该报告有多个可以选择的选项卡。下表提供了每个选项卡的描述。表 1: “Profile Summary”

标签 描述“Top Operations" 内核和全局的存储器。此选项卡显示顶层操作的摘要。它显示 FPGA 和器件存储器之间的顶层数据传输的配置数据。“Kernels & Compute Units" 显示所有内核和计算单元的配置数据。“Data Transfers" 主机和全局的存储器。此表显示通过 PCIe 链接在主机和器件存储器之间进行的所有读写传输的配置数据。它还显示内核和全局内存之间的数据传输(如果已启用)。“OpenCL APIs" 显示在主机应用中执行的所有 OpenCL C 主机 API 函数调用的配置数据。

第 6 章: 剖析和最优化

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 59

Send Feedback

Page 60: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

对于命令行用户,在连接阶段使用 --profile_kernel 选项生成配置摘要数据。--profile_kernel 语法如下:--profile_kernel <[data]:<[kernel_name|all]:[compute_unit_name|all]:[interface_name|all]:[counters|all]>

完整详细信息,请参阅《SDAccel 环境剖析和最优化指南》 (UG1207)。

应用时间线“Application Timeline”在公共时间轴上收集和显示主机和器件事件,以帮助您了解和可视化系统的整体运行状况和性能。这些事件包括:• 来自主机代码的 OpenCL API 调用。• 器件跟踪数据,包括计算单元、AXI 传输事务启动/停止。• 主机事件和内核启动/停止。此图形表示使程序员能够识别有关内核同步和高效并发执行的问题。提示: 默认情况下,仅在硬件仿真期间收集时间轴和器件跟踪数据,而不是在系统构建期间收集。打开系统构建的器件分析是侵入性的,可能会对整体性能产生负面影响。此功能仅应在系统性能调试时使用。要在系统测试期间收集数据,请更新运行配置设置。《SDAccel 环境剖析和最优化指南》 (UG1207)中说明了详细情况。双击“Reports”窗口中的“Application Timeline”以打开“Application Timeline”窗口。以下是“Application Timeline”窗口的快照,该窗口显示公共时间轴上的主机和器件事件。主机活动显示在图像的顶部,内核活动显示在图像的底部。主机活动包括创建程序、运行内核以及全局存储器和主机之间的数据传输。内核活动包括读取/写入访问以及全局存储器和内核之间的传输。此信息可帮助您了解应用程序执行的详细信息并确定可能的改进领域。

第 6 章: 剖析和最优化

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 60

Send Feedback

Page 61: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 43: “Application Timeline”窗口

可以通过命令行流程启用和收集时间轴数据,但是,必须通过 GUI 查看。《SDAccel 环境剖析和最优化指南》(UG1207) 中提供了通过命令和 GUI 流程启用和显示时间轴数据收集的完整说明。

波形视图和实时波形查看器运行硬件仿真时,SDx 开发环境可以生成波形视图。它显示系统级别、计算单元 (CU) 级别和功能级别上的有关仿真结果的详细信息。详细信息包括内核和全局内存之间的数据传输以及通过内核间管道的数据流。这些详细信息提供了从系统级到单个函数调用的性能瓶颈的许多见解,以帮助开发者最优化其应用。实时波形查看器与波形视图类似,但它提供更低级别的细节。它也可以使用 xsim 打开,这是硬件设计师使用的赛灵思工具。默认情况下,不收集波形视图和实时波形查看器数据,因为它要求运行时间在硬件仿真期间生成仿真波形,这会消耗更多的时间和磁盘空间。《SDAccel 环境剖析和最优化指南》 (UG1207) 描述了为 GUI 和命令行启用波形视图和实时波形查看器的数据收集所需的建立。双击“Assistant”视图中的“Waveform”(如下图所示)以打开“Waveform View ”窗口。

第 6 章: 剖析和最优化

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 61

Send Feedback

Page 62: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 44: 打开波形图视图

波形图视图示例显示如下。图 45: 波形图视图示例

如果在“Run Configuration Main”标签中选择 “Launch Live Waveform”,则可以查看实时波形查看器。或者,如果未选择“Launch Live Waveform”,则可以通过 Linux 命令行打开带有 xsim 的波形图 (.wdb)。.wdb 文件位于项目目录中的子目录 Emulation-HW/<kernel_name>-Default 中。使用以下 Linux 行命令打开 xsim:xsim -gui <filename.wdb> &

xsim 实时波形查看器的示例如下图所示。

第 6 章: 剖析和最优化

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 62

Send Feedback

Page 63: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 46: 实时波形图视图示例

内核 SLR 和 DDR 存储器分配从频率和资源而言,内核计算单元 (CU) 实例和 DDR 存储器资源布局规划对于满足设计结果质量非常关键。布局规划包含显式分配 CU(内核实例)至 SLR 和映射 CU 至 DDR 存储器资源。在进行布局规划时,需要考虑 CU 资源使用和DDR 存储器带宽要求。最大的赛灵思 FPGA 由多个堆叠硅片裸片组成。每一个堆栈都被称为超级逻辑区域 (SLR),具有固定量的资源和存储器,包括 DDR 接口。提供的可用于定制逻辑的器件 SLR 资源可以在 《SDAccel 环境版本说明、安装和许可指南》(UG1238) 中找到,或者使用 《SDx 命令和工具参考指南》 (UG1279) 中描述的实用工具 platforminfo 来显示。您可以使用实际内核资源利用率值帮助在 SLR 中分配 CU,从而降低任何 SLR 中的拥塞。系统估算报告列出了在设计周期早期由内核使用的资源数量(查找表、触发器、块 RAM 等)。报告在可硬件仿真和系统编译期间通过命令行或GUI 生成,并已在 系统估算报告 中描述。使用该信息及可用的 SLR 资源,可帮助分配 CU 至 SLR,这样就不会过度使用任何 SLR。SLR 中的拥塞越少,工具就能越好地将设计映射至 FPGA 资源并满足您的性能目标。关于映射存储器资源和 CU,请参阅 将内核接口映射至存储器资源 和 将计算单元分配给 SLR。注释: 虽然计算单元可以连接至任何可用的 DDR 存储器资源,但是在分配至 SLR 时还必须考虑内核的带宽要求。《SDAccel 环境剖析和最优化指南》 (UG1207) 提供关于分配和优化 DDR 带宽的详情。在将您的 CU 分配至 SLR 后,将任何 CU 主控制器 AXI (端口)映射至 DDR 存储器资源。赛灵思推荐连接至与 CU 相同的 SLR 中的 DDR 存储器资源。这样可以减少了对于有限的 SLR 交汇连接资源的竞争。此外,SLR 之间的连接使用超长线路 (SLL) 布线资源,会造成了比标准内部 SLR 布线更大的延迟。可能有必要横跨一个 SLR 区域,连接不同的 SLR 中的 DDR 资源。然而,如果 --sp 和 --slr 指令都已显式定义,则工具会自动添加附加的交汇逻辑,以便将 SLL 延迟的影响降到最低并促进时序收敛。

第 6 章: 剖析和最优化

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 63

Send Feedback

Page 64: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

访问多个存储器 bank 的内核指南DDR 存储器资源分布在平台的超级逻辑区域 (SLR) 上。由于可用于 SLR 之间交汇的连接数量有限,因此一般指导是将内核放置在与其具有最多连接的 DDR 存储器资源相同的 SLR 中。这减少了对 SLR 交汇连接的竞争,并避免消耗与 SLR交汇相关的额外逻辑资源。

图 47: 同一 SLR 中的内核和存储器

Memory Bank 3

Memory Bank 2

Memory Bank 1

Memory Bank 0Kernel

SLR1

SLR0

Memory Bank 3

Memory Bank 2

Memory Bank 1

Memory Bank 0Kernel

SLR1

SLR0

X22194-010919

注释: 左侧的图像显示了映射到单个存储器 bank 的单个 AXI 接口。右侧的图像显示了映射到同一存储器 bank 的多个AXI 接口。如上图所示,当内核具有仅映射单个存储器 bank 的单个 AXI 接口时,《SDx 命令和工具参考指南》 (UG1279) 中描述的 platforminfo 实用程序列出了与内核的存储器 bank 相关联的 SLR,因此,最好将内核放置在该 SLR 中。在这种情况下,设计工具可能会自动将内核放置在该 SLR 中而无需额外输入;但是,在以下条件下您可能需要为某些内核提供显式 SLR 分配:• 如果设计包含大量访问同一存储器 bank 的内核。• 内核需要一些在存储器 bank 所在的 SLR 中不可用的专用逻辑资源。当一个内核有多个 AXI 接口并且内核的所有接口都访问同一个存储器 bank 时,可以通过一个 AXI 接口以非常类似的方式处理内核,并且内核应该驻留在与其 AXI 接口正在映射的存储器 bank 相同的 SLR 中。

第 6 章: 剖析和最优化

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 64

Send Feedback

Page 65: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 48: 相邻 SLR 中的存储器 bank

Memory Bank 3

Memory Bank 2

Memory Bank 1

Memory Bank 0Kernel

SLR1

SLR0

Memory Bank 3

Memory Bank 2

Memory Bank 1

Memory Bank 0

Kernel

SLR1

SLR0

X22195-010919

注释: 左侧的图像显示当内核放置在 SLR0 中时需要一个 SLR 交汇。右边的图像显示内核访问存储器 bank 需要两个SLR 交汇。当内核在不同的 SLR 中有多个 AXI 接口连接到多个存储器 bank 时,建议将内核放置在具有内核访问的大部分存储器bank 的 SLR 中(如上图所示)。这样可以最大限度地减少此内核所需的 SLR 交汇数量,从而使更多 SLR 交汇资源可用于设计中的其他内核访问存储器 bank。当内核映射来自不同 SLR 的存储器 bank 时,应显式指定 SLR 分配,如 内核 SLR 和 DDR 存储器分配 中所述。

第 6 章: 剖析和最优化

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 65

Send Feedback

Page 66: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 49: 存储器 bank 外有两个 SLR

Memory Bank 3

Memory Bank 2

Memory Bank 1

Memory Bank 0

Kernel

SLR2

SLR1

SLR0

Memory Bank 3

Memory Bank 2

Memory Bank 1

Memory Bank 0Kernel

SLR2

SLR1

SLR0

X22196-010919

注释: 左侧图像显示了访问所有映射的存储器 bank 需要两个 SLR 交汇。右侧图像显示了访问所有映射的存储器 bank 需要三个 SLR 交汇。如上图所示,当平台包含两个以上的 SLR 时,内核可能会将不在紧邻的 SLR 中的存储器 bank 映射到其最常映射的存储器 bank。当出现这种情况时,对远程存储器 bank 的存储器访问必须跨多个 SLR 边界并将产生额外的 SLR 交汇资源成本。为了避免此类成本,将内核放置在中间 SLR 中可能会更好,在此它进入相邻的 SLR 只需要成本较低的交汇。

第 6 章: 剖析和最优化

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 66

Send Feedback

Page 67: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

第 7 章

调试应用和内核SDAccel™ 环境提供应用程序级调试功能和技术,允许调试主机代码、内核代码及其交互。这些功能和技术分为以软件为中心和更详细的以低级硬件为中心的流程。此外,对于以硬件为中心的调试,可以使用赛灵思虚拟电缆 (XVC) 的 PCIe® 和使用 USB-JTAG 电缆的 JTAG,对在硬件上运行的设计进行调试,并且无需更改设计。

调试功能和技术您可以使用几种功能和技术来调试设计。下表列出了可在三种构建配置中用于调试的功能或技术。每个功能和技术都在《SDAccel 环境调试指南》 (UG1281) 中进行了更详细地描述。表 2: 调试不同构建配置的功能和技术

功能和技术 OS 主机 内核 FPGA (平台)

软件仿真 dmesg GDB GDB xbutil

硬件仿真 dmesg GDB GDB内核波形查看器 xbutil

“System" dmesg GDB内核波形查看器

ILAxbutil

注释:1. dmesg 是 Linux 命令。2. GDB 是 GNU 调试器。3. xbutil 是赛灵思提供的实用程序。

这些功能和技术可分为以软件和硬件为中心的调试功能,如下表所示。表 3: 软件和硬件调试功能和技术

软件中心 硬件中心GNU 调试器 (GDB) 内核波形查看器赛灵思工具 xbutil ILA (Integrated Logic Analyzer)

Linux dmesg 不适用

使用以软件为中心和以硬件为中心的调试功能,您可以隔离和识别功能问题、协议问题以及故障排除。

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 67

Send Feedback

Page 68: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

调试流程推荐的应用程序级调试流程包括三个级别的调试:• 执行软件仿真 (sw_emu) 以确认算法功能。• 执行硬件仿真 (hw_emu) 以创建定制硬件并确认在 FPGA 上生成的逻辑和性能的正确性。• 执行系统构建(硬件)hw 以实现定制硬件。每个级别都提供了对设计的具体见解,使调试更容易。所有流程都通过集成的 GUI 流程以及使用基本编译时间和运行时间建立选项的批处理流程来获得支持。下面简要介绍每个流程。

软件仿真软件仿真可用于验证(用 C/C++ 或 OpenCL™ 编写的)主机和内核的功能正确性。GDB 可用于调试主机和内核代码。建议在软件仿真中进行迭代,直到应用程序在所有操作模式下正常运行,这需要很少的编译时间并且可迅速执行。

硬件仿真硬件仿真可用于验证主机代码、配置文件主机和内核性能,估计 FPGA 资源使用情况以及使用精确的硬件模型 (RTL) 验证内核。硬件仿真的执行时间比软件仿真花费的时间更长,因此赛灵思建议您使用小数据集进行调试和验证。同样,GDB 可用于调试主机和内核。迭代硬件仿真,直到估计的内核性能足够(如需了解有关最优化的详细信息,请参阅《SDAccel 环境剖析和最优化指南》 (UG1207))。

“System"最后,在硬件执行(系统)中,在实际硬件上验证整个系统,以确保内核正确执行并满足系统性能。SDAccel 提供特定的硬件调试功能,包括波形分析、内核活动报告和存储器访问分析,以隔离这些关键的硬件问题。硬件调试需要将额外的逻辑合并到整个硬件模型中,并将影响 FPGA 资源和性能。可以在最终编译中删除此附加逻辑。

GNU 调试对于 GNU 调试 (GDB),您可以添加断点,检查变量以及调试内核或主机代码。这种常见的软件调试流程允许快速调试以验证功能。SDAccel 还提供了特殊的 GDB 扩展,以便从应用程序主机检查 OpenCL 运行时环境的争夺情况。这些可用于调试主机和内核之间的协议同步问题。SDAccel 环境支持所有流程中的 GDB 主机程序调试,但内核调试仅限于软件和硬件仿真流程。需要首先在二进制容器中生成调试信息,方法是将 -g 选项传递给 xocc 命令行可执行程序,或者通过在 GUI 选项中设置相应的选择框来启用调试信息。在软件和硬件仿真流程中,对加速内核代码调试交互存在限制。由于此代码在软件仿真流程中进行了预处理,并在硬件仿真流程中转换为硬件描述语言 (HDL),因此并非总能在所有位置设置断点,尤其是在硬件仿真中。如需了解更多详情息,请参阅《SDAccel 环境调试指南》 (UG1281)。

Linux “dmesg”在系统中挂起调试可能很困难,但是 SDAccel 提供了一种使用 dmesg Linux 命令调试与 Linux 和硬件平台交互的方法。

第 7 章: 调试应用和内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 68

Send Feedback

Page 69: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

当软件或硬件似乎锁定时,您可以使用 dmesg 命令来打印传输事务和内核信息消息的记录。详细报告有助于隔离和解决问题。

内核波形查看器SDAccel 通过硬件仿真模式下的 GUI 流程提供基于波形的 HDL 调试。波形在 Vivado® 波形查看器中打开,Vivado 用户应该熟悉此查看器。借助该查看器,可以显示内核接口和内部信号,并包括调试控件,如重启、HDL 断点,以及HDL 代码查找和波形标记。此外,它还提供顶层 DDR 数据传输(每个 bank)以及特定于内核的详细信息,包括计算单元停顿、循环流水线活动和数据传输。欲知详情,请参阅《SDAccel 环境剖析和最优化指南》 (UG1207)。

ILASDAccel 可将系统集成逻辑分析仪 (ILA) 插入设计,以使用内核和全局存储器之间的接口信号捕获和查看 AXI 数据传输级别活动。例如,ILA 提供根据一个或多个信号的定制事件触发,以允许以系统速度进行波形捕获。可以在查看器中分析波形,并用于调试硬件问题,如协议违规或性能问题,这对于调试应用挂起等困难情况至关重要。Vivado 用户应熟悉这种低层、以硬件为中心的调试技术。完整详细信息,请参阅《Vivado Design Suite 用户指南:编程和调试》(UG908)。注释: ILA 核需要系统资源,包括逻辑和本地存储器来捕获和存储信号数据。可以使用带 -–dk 选项的 xocc 命令将系统 ILA 插入到设计中。例如:$ xocc --dk chipscope:<compute_unit_name>:<interface_name>

可以使用 Vivado 工具通过赛灵思虚拟电缆 (XVC) 访问捕获的数据。

第 7 章: 调试应用和内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 69

Send Feedback

Page 70: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

第 8 章

通过命令行构建应用除了使用 SDAccel™ GUI 创建项目并构建硬件加速应用之外,还可以在命令或 shell 窗口中使用命令行接口调用 SDx™

系统工具,其中已设置工具的路径。提示: 要配置命令 shell,请从 <install_dir>/SDx/<version> 目录中获取 Linux 上的 settings64.sh 或settings64.csh 文件,其中 <install_dir> 是 SDx 软件的安装文件夹,<version> 是软件版本。您将从 第 5 章: 构建系统 回顾,SDAccel 应用项目是通过两部分过程进行编译:主机应用的软件构建过程,以及加速内核的硬件构建过程。主机应用使用与 GCC 兼容的编译器 xcpp 进行编译。SDAccel 赛灵思 开放代码编译器 (xocc) xocc 是命令行编译器,它接收源代码并通过 Vivado® 实现工具运行此编译器,以生成比特流和对基于 FPGA 加速器卡编程所需的文件。它支持用 OpenCL™ C、C ++ 和 RTL(SystemVerilog、Verilog 或 VHDL)表示的内核。本章将介绍命令行流程,并说明如何根据命令行或脚本构建软件和硬件组件。有关 《SDx 命令和工具参考指南》(UG1279) 工具和相关选项的详细信息,请参阅 xocc。

构建主机编译主机代码(使用 OpenCL API 编写的 C/C++)由赛灵思 C++ (xcpp) 编译器编译并生成主机可执行程序(.exe 文件),该可执行程序在主机 CPU 上执行。xcpp 是一个封装,它使用标准 gcc 编译器和标准 gcc 开关和命令行实参,软件开发者应该熟悉这些内容,此处不再详述。提示: xcpp 基于 GCC,因此支持许多标准 GCC 选项,本文档未记录这些选项。如需了解有关信息,请参阅 GCC 选项索引。下面给出了用于编译设计的 xcpp 命令的示例:xcpp -DSDX_PLATFORM=xilinx_vcu1525_dynamic_5_1 \-I/${XILINX_XRT}/include/ \-I/${XILINX_VIVADO}/include/ -g -Wall -c -o vadd.o vadd.cpp \

使用的各种选项在括号的右侧详细说明。表 4: 主机代码编译

代码 描述xcpp

-DSDX_PLATFORM=xilinx_vcu1525_dynamic_5_1 (定义宏)

第 8 章: 通过命令行构建应用

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 70

Send Feedback

Page 71: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

表 4: 主机代码编译 (续)

代码 描述-I/${XILINX_XRT}/include/ (包括报头文件的目录)-I/${XILINX_VIVADO}/include/ (包括报头文件的目录)-I<user include directory> (用户包含文件目录)-g (产生调试信息)-Wall (所有警告)-c (编译)-o vadd.o (指定输出文件 vadd.o)vadd.cpp (源文件)

连接生成的对象文件 (.o) 与赛灵思 SDAccel 运行时间共享库链接以创建可执行程序 (.exe)。下面给出了用于链接设计的 xcpp 命令的示例:xcpp -o vadd.exe -W1 -lxilinxopencl -lpthread -lrt -lstdc++ \-L/${XILINX_XRT}/lib/ \-rpath,/lnx64/lib/csim vadd.o \

注释: 将主机应用程序与 -lxilinxopencl 链接时,需要 -rpath-link。与 -lOpenCL 链接时则不需要 -rpath-link。使用的各种选项在括号的右侧详细说明。表 5: 链接主机代码

代码 描述xcpp

-o vadd.exe (创建输出文件 vadd.exe)-Wl (指定警告级别)-lxilinxopencl -lpthread -lrt -lstdcc++ (链接指定的库文件)-L/${XILINX_XRT}/lib/ (搜索库文件的目录)-rpath,/lnx64/lib/csim (指定运行时间搜索路径)vadd.o (对象代码文件)

构建硬件编译构建任何系统的第一个阶段是编译内核加速器函数。使用 xocc 编译器完成编译。为了正确编译内核,需要使用多个xocc 选项。此处讨论这些选项。

第 8 章: 通过命令行构建应用

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 71

Send Feedback

Page 72: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

• 通过直接列出源文件,在 xocc 命令中指定了内核源文件。可以添加多个源文件。• -k / --kernel 选项用于指定与源文件关联的内核名称。

xocc … -k <kernel_name> <kernel_source_file> … <kernel_source_file>

• 必须指定要在其上定位内核的平台。使用 -–platform xocc 选项指定平台。xocc … --platform <platform_name>

• 必须指定构建目标。使用 -t / -–target xocc 选项指定。xocc … -t <build_target>

默认情况下,将 build_target 设置为 hw。然而,如在 构建目标 中所述,build_target 可以是以下任何一项:• sw_emu,用于软件仿真• hw_emu,用于硬件仿真• hw,用于构建目标开发板

• 可以使用 -o 选项指定生成的输出文件的名称。默认的输出文件名是 <kernel>.xo。xocc .. -o <xo_kernel_name> .xo

• 可以使用 –R/–report_level 选项生成系统和估算报告。此外,还可以使用 –report_dir、--log_dir 和 –temp_dir 选项分别指定报告、日志和临时目录。这些对于组织生成的文件很有用。xocc ... --report_level 2 --report_dir <report_dir_name>

• 最后,使用 xocc -c/--compile 选项编译内核。这会生成一个 .xo 文件,可以在后续链接阶段使用。xocc ... –c

下面的示例中将它们放在一起:xocc -c -k krnl_vadd --platform xilinx_u200 -t sw_emu vadd.cl vadd.h \-o krnl_vadd.xo --report_level 2 --report_dir reports

这将执行以下操作:• 编译内核:-c• 命名内核:-k krnl_vadd• 指定平台:--platform xilinx_u200 平台• 目标软件仿真:-t sw_emu• 源输入文件:vadd.cl 和 vadd.h

• 指定输出文件名称:-o krnl_vadd.xo• 生成 2 级报告并写入 reports 目录 --report_level 2 --report_dir reports

第 8 章: 通过命令行构建应用

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 72

Send Feedback

Page 73: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

连接如 第 5 章: 构建系统 所述,构建过程的第二部分将一个或多个内核链接到平台以创建二进制容器 xclbin 文件。与编译类似,链接需要几个选项。• 通过直接列出源文件在 .xo 命令中指定 xocc 源文件。可以添加多个源文件。

xocc … <kernel_xo_file.xo> … <kernel_xo_file.xo>

• 您必须使用 –-platform 选项指定平台。指定的平台必须与编译期间指定的平台相同。xocc … --platform <platform_name>

• 您必须使用 -t 选项指定构建目标。指定的目标必须与编译期间指定的目标相同。xocc … -t <build_target>

• 与编译阶段一样,您可以使用 -o 选项指定生成的输出文件的名称。链接阶段中的输出文件将是 .xclbin 文件。默认输出名称是 a.xclbin。xocc .. -o <xclbin_name>.xclbin

• 如 创建内核的多个实例 所述,--nk 选项实例化 .xclbin 文件给定内核的指定数量的计算单元。虽然计算单元实例名称是可选项,但赛灵思建议添加一个。xocc ... --nk <kernel_name>: <compute_units>:<kernel_name1>:…:<kernel_nameN>

• 如 将内核接口映射至存储器资源 所述,您可以选择使用 -–sp 选项来指定内核接口与目标 DDR bank 的连接。可以指定多个 --sp 选项以将每个接口映射到特定 bank。xocc ... --sp <kernel_instance_name>.<interface_name>:<bank name>

• 使用 -l/--link 选项也可以完成链接。xocc ... -l

下面的示例中将它们放在一起:xocc -l --platform xilinx_u200 -t sw_emu –-nk krnl_vadd:1:krnl_vadd1 \--sp krnl_vadd1.m_axi_gmem:DDR[3] -o vadd.xclbin krnl_vadd.xo

这将执行以下操作:• 连接内核:-l• 指定平台:--platform xilinx_u200• 目标软件仿真:-t sw_emu• 创建一个名为 krnl_vadd1 的计算单元:

-–nk krnl_vadd:1:krnl_vadd1• 将 krnl_vadd1、端口 m_axi_gmem 映射到 DDR bank3:

--sp krnl_vadd1.m_axi_gmem:DDR[3]

• 指定输出文件名:-o vadd.xclbin• 源输入文件:krnl_vadd.xo

第 8 章: 通过命令行构建应用

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 73

Send Feedback

Page 74: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

使用 sdaccel.ini 文件SDAccel 运行库使用各种参数来控制软件仿真、硬件仿真和在加速开发板上运行系统时主机应用程序和内核执行期间的调试、剖析和消息记录。这些控制参数在运行时间初始化文件中指定。对于命令行用户,需要手动创建运行时间初始化文件并命名为 sdaccel.ini。可以通过使用文件所在目录的路径定义环境变量 SDACCEL_INI_PATH 来指定文件的位置。默认情况下,工具将依次查看 SDACCEL_INI_PATH、.exe 路径和当前目录,以寻找 .ini 文件。如果它不存在,则返回一个空字符串。对于 SDx GUI 用户,项目经理根据您的运行配置自动创建 sdaccel.ini 文件,并将其保存在主机可执行程序件旁边。运行库检查 sdaccel.ini 是否与主机可执行程序存在于同一目录中,如果找到了,将在启动时自动从文件中读取参数。

运行时间初始化文件格式运行时间初始化文件是包含键组及其值的文本文件。以分号 (;) 或井号 (#) 开头的任何行都是注释。组名、键和键值都区分大小写。以下是打开概要文件时间轴追踪并将运行时间日志消息发送到控制台的简单示例。#Start of Debug group [Debug] timeline_trace = true

#Start of Runtime group [Runtime] runtime_log = console

下表列出了所有支持的组、键、有效键值以及键功能的简短说明。表 6: 调试组

键 有效值 描述debug [true|false] 启用或禁用内核调试。

• true:启用• false:禁用• 默认:false

profile [true|false] 启用或禁用 OpenCL 代码剖析。• true:启用• false:禁用• 默认:false

timeline_trace [true|false] 启用或禁用配置文件时间轴追踪• true:启用• false:禁用• 默认:false

device_profile [true|false] 启用或禁用器件配置文件。• true:启用• false:禁用• 默认:false

第 8 章: 通过命令行构建应用

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 74

Send Feedback

Page 75: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

表 7: 运行时间组键 有效值 描述

api_checks [true|false] 启用或禁用 OpenCL API 检查。• true:启用• false:禁用• 默认值:true

runtime_log null console syslog filename 指定运行时间日志的打印位置• null:不打印任何日志。• console:在 stdout 中打印日志• syslog:在 Linux syslog 中打印日志• 文件名:在指定的文件中打印日志。例如,runtime_log=my_run.log

• 默认值:null

cpu_affinity 一个或多个整数 将所有运行时间时线程固定到指定的 CPU。例如,cpu_affinity = {4,5,6}

polling_throttle 一个整数 指定运行库轮询器件状态的时间间隔(以微秒为单位)。默认值:0

表 8: 仿真組键 有效值 描述

aliveness_message_interval 任何整数 指定需要打印活动消息的时间间隔(以秒为单位)默认值:300

print_infos_in_console [true|false] 控制在用户控制台中打印仿真信息消息。仿真信息消息始终记录在名为emulation_debug.log 的文件中• true = 在用户控制台中打印• false = 不在用户控制台中打印• 默认值:true

print_warnings_in_console [true|false] 控制在用户控制台中打印仿真警告消息。仿真警告消息始终记录在名为emulation_debug.log 的文件中。• true = 在用户控制台中打印• false = 不在用户控制台中打印• 默认值:true

print_errors_in_console [true|false] 控制在用户控制台中打印仿真错误消息。仿真错误消息始终记录在名为emulation_debug.log 的文件中。• true = 在用户控制台中打印• false = 不在用户控制台中打印• 默认值:true

enable_oob [true|false] 在仿真期间启用或禁用对出站访问的诊断。如果有任何越界访问,则会报告警告。• true:启用• false:禁用• 默认:false

第 8 章: 通过命令行构建应用

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 75

Send Feedback

Page 76: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

表 8: 仿真組 (续)

键 有效值 描述launch_waveform [off|batch|gui] 指定在仿真期间如何保存和显示波形。

• off:不启动仿真器波形 GUI,也不保存wdb 文件

• batch:不启动仿真器波形 GUI,但保存wdb 文件

• gui:启动仿真器波形 GUI,并保存 wdb文件

• 默认值:off

注释: 内核需要在调试启用 (xocc -g) 的情况下进行编译,以便保存波形并在仿真器 GUI 中显示。

emconfigutil 设置可以在“Command”字段中提供 emconfigutil 命令和选项,以创建仿真配置文件,该字段位于 emconfigutil下。如需了解更多有关 emconfigutil 及其选项的信息,请参阅 《SDx 命令和工具参考指南》 (UG1279) 中的“emconfigutil(仿真配置)实用程序”部分。

图 50: emconfigutil 设置

第 8 章: 通过命令行构建应用

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 76

Send Feedback

Page 77: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

第 9 章

RTL 内核许多硬件工程师都有现成的 RTL IP(包括基于 Vivado® IP 集成器 的设计),或者只是觉得很容易在 RTL 中实现内核并使用 Vivado 来开发它。SDAccel™ 允许使用 RTL 设计,但是它们必须符合在工具流程和运行库中使用的软件和硬件要求。提示: 应使用 《UltraFAST 设计方法指南(适用于 Vivado Design Suite)》 (UG949) 中的建议编写、设计和测试 RTL内核。

将 RTL 设计用作 RTL 内核的要求RTL 设计必须满足接口和软件要求,才能在 SDAccel 框架内用作 RTL 内核。可能需要添加或修改原始 RTL 设计以满足这些要求,这些要求将在以下各节中概述。

内核接口要求为了满足 SDAccel 执行模型,RTL 内核必须遵守如下接口要求:• 使用唯一一个 AXI4-Lite 接口访问控制信号并传递实参。• 下面的至少一个接口(可两者都选):

○ AXI4 主控制器接口,与存储器通信。○ AXI4-Stream 接口,在内核和/或主机之间通信。注释: 如果有 ap_ctrl_none 内核控制接口选项,则不能使用 AXI4 主控制器接口。

• 至少一个时钟接口端口。下表对各种接口需求进行了总结。注释: 在一些情况下,必须精确写入端口名称。表 9: RTL 内核的接口和端口要求接口或端口 描述 评述

ap_clk 主时钟输入端口 • 名称必须精确。• 需要的端口。

ap_clk_2 辅助可选时钟输入端口 • 名称必须精确。• 可选端口。

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 77

Send Feedback

Page 78: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

表 9: RTL 内核的接口和端口要求 (续)

接口或端口 描述 评述

ap_rst_n 主低电平有效复位输入端口• 名称必须精确。• 可选端口。• 该信号应经过内部流水线处理,以提升时序。• 该信号由 ap_clk 时钟域中的同步复位驱动。

ap_rst_n_2 辅助可选低电平有效复位输入• 名称必须精确。• 可选端口。• 该信号应经过内部流水线处理,以提升时序。• 该信号由 ap_clk_2 时钟域中的同步复位驱动。

interrupt 高电平有效中断。 • 名称必须精确。• 可选端口。如未使用,端口一定要省略。

s_axi_control 唯一一个 AXI4-Lite 从器件控制接口 • 名称必须精确;区分大小写。• 必需的端口接口。

AXI4_MASTER 一个或更多用于全局存储器访问的 AXI4 主接口。

• 所有 AXI4 主接口必须具备 64 位地址。• 内核开发者负责对全局存储器空间进行分区。全局存储器中

的每一个分区都成为内核实参。每个分区的存储器偏移必须由控制寄存器设置,可以通过 AXI4-Lite 从接口进行编程。

• AXI4 主控制器不能使用 Wrap 或 Fixed 突发类型,也不能使用窄(小)突发,即 AxSIZE 应匹配 AXI 数据总线的宽度。

• 任何不符合上述要求的用户逻辑或 RTL 代码都必须被封装或桥接,以满足这些要求。

内核软件要求RTL 内核与 OpenCL™ 和 C/C++ 具有相同的软件接口模型。即主机应用将其视为具有 void 返回值、scalar 实参和指针实参的函数。例如:void mmult(unsigned int length, int *a, int *b, int *output)

SDAccel 执行模型指示如下内容:• Scalar 实参通过 AXI4-Lite 从接口直接写入内核。• 指针实参与内存进行往来传输。• 预计内核通过一个或多个 AXI4 内存映射和/或直接通过主机和内核之间的流在全局存储器中读取/写入数据。• 内核由主机应用通过 AXI4-Lite 从接口从控制寄存器(如下所示)进行控制。如果 RTL 设计具有不同的执行模型,则必须对其进行调整以确保以这种方式完成。下表定义了在 SDAccel 环境中使用的内核所需的寄存器映射。所有内核都需要控制寄存器,而中断相关寄存器仅适用于具有中断的设计。所有用户定义的寄存器必须从位置 0x10 开始;下面的位置将被保留。表 10: 地址映射

地址 名称 描述0x0 Control 控制并提供内核状态。0x4 Global Interrupt Enable 用于启用对主机的中断。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 78

Send Feedback

Page 79: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

表 10: 地址映射 (续)

地址 名称 描述0x8 IP Interrupt Enable 用于控制使用哪个 IP 生成的信号生成中断。0xC IP Interrupt Status 提供中断状态。0x10 内核实参从地址 0x10 开始 包括 scalar 和全局内存实参。

“Control”寄存器位的定义取决于内核运行以下三种操作模式中的哪一种(如需了解有关这些操作模式的详细说明,请参阅 《Vivado Design Suite 用户指南:高层次综合》 (UG902))。• ap_ctrl_none(即自由运行的内核)• ap_ctrl_hs(即顺序内核)• ap_ctrl_chain(即流水线内核)通过遵守下面定义的相应“Control ”寄存器的定义,开发者可选择内核的操作模式。

ap_ctrl_none对于 ap_ctrl_none 模式,只要内核没有复位就会启动,永不停止。仅适用于流传输内核(请参阅“StreamingInterfaces”页面)。表 11: 在 ap_ctrl_none 模式下控制 (0x0)

比特 名称 描述31:0 保留 保留

ap_ctrl_hs在 ap_ctrl_hs 模式下,驱动在 ap_start 写入一个 1,然后等待 ap_start 被无效(保证完全处理输入数据),等待 ap_done 被有效(保证完全生成输出数据)。在此操作模式下,控制寄存器位的定义如下表所示。ap_ctrl_hs 内核可以而且应该只在它们完成后重新启动。它们不允许流水线化/重叠执行。表 12: 在 ap_ctrl_hs 模式下控制 (0x0)

比特 名称 描述0 ap_start 当内核可以开始处理数据时由主机有效。在与 ap_ready 握手时由内核清除。1 ap_done 内核在生成输出数据后有效。在主机读取后清除。2 ap_idle 内核在空闲时有效(不建议使用)。3 ap_ready 内核在处理完输入数据后有效。立即自我清除。6:4 保留 保留7 auto_restart1 如果已有效,则内核保持 ap_start 有效。主机的读取/写入访问权限。31:8 保留 保留注释:1. 赛灵思运行时不使用 auto_restart 位。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 79

Send Feedback

Page 80: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

ap_ctrl_chain在 ap_ctrl_chain 操作模式中,驱动有效 ap_start 并等待:• ap_start 被无效(保证已完全处理输入数据),从而允许开始下一个批处理或• ap_done 被有效(保证已完全生成输出数据),然后有效 ap_continue(以允许内核继续操作)如果需要流水线执行,建议使用此模式。ap_ctrl_chain 模式的“Control”寄存器位的定义如下表所示。表 13: 在 ap_ctrl_chain 模式下控制 (0x0)

比特 名称 描述0 ap_start 当内核可以开始处理数据时由主机有效。在与 ap_ready 握手时由内核清除。1 ap_done 内核在生成输出数据后有效。在与 ap_continue 握手时由内核清除。2 ap_idle 内核在空闲时有效(不建议使用)。3 ap_ready 内核在处理完输入数据后有效。立即自我清除。4 ap_continue 当内核可以继续操作时由主机有效。由内核立即清除。

6:5 保留 保留7 auto_restart1 如果已有效 ap_start 并且 ap_continue 被保持有效。主机的读取/写入访问权限。

31:8 保留 保留注释:1. 赛灵思运行时不使用 auto_restart 位。

中断寄存器仅当内核有中断时,才需要以下与中断相关的寄存器。表 14: Global Interrupt Enable (0x4)

比特 名称 描述0 Global Interrupt

Enable被主机有效并具有任何“IP Interrupt Enable”位时,该中断启用。主机的读取/写入访问权限。

31:1 保留 保留

表 15: IP Interrupt Enable (0x8)

比特 名称 描述0 通道 0 (ap_done) 当与“Global Interrupt Enable”用位一起被有效时,将在 ap_done 声明进行中断声明。主机读取/写入访问,并且只被内核读取。1 通道 1 (ap_ready) 当与“Global Interrupt Enable”位一起被有效时,将在 ap_ready 声明进行中断声明。主机读取/写入访问,并且只被内核读取。

31:2 保留 保留

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 80

Send Feedback

Page 81: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

表 16: IP Interrupt Status (0xC)

比特 名称 描述0 通道 0 (ap_done) 由于 ap_done 导致中断被有效时,内核会有效此中断状态位。如果在 ap_done 上禁用中断,内核绝不会有效该位。主机必须通过写入 1 清除该位。1 通道 1 (ap_ready) 由于 ap_ready 导致中断被有效时,内核会有效此中断状态位。如果在 ap_ready 上禁用中断,内核绝不会有效该位。主机必须通过写入 1 清除该位。

31:2 保留 保留

中断RTL 内核可以拥有一个包含单个中断的中断端口。端口名称必须称为 interrupt 并且为高电平有效。当 GlobalInterrupt Enable (GIE) 和 Interrupt Enable Register (IER) 位都被有效时,它被启用。此外,只有在向 IP 中断状态寄存器的有效位写入 1 时,才会清除中断。如果向内核添加了一个 interrupt 端口,则需要使用此信息更新 kernel.xml 文件。使用 RTL Kernel Wizard 时会自动生成 kernel.xml。如需了解有关该文件的详情,请参阅 创建内核描述 XML 文件。

RTL Kernel WizardRTL Kernel Wizard 自动执行一些步骤,以确保将 RTL IP 封装到可以集成到 SDAccel 系统的内核中。使用向导的好处在于:• 自动执行必须采取的一些步骤,以确保将 RTL IP 封装到可以集成到 SDAccel 系统的内核中。• 逐步引导您完成为 RTL 内核指定软件功能模型和接口模型的过程。• 根据提供的接口信息,为内核生成满足 RTL 内核接口要求的 RTL 封装器。• 自动生成包括控制逻辑和寄存器文件的 AXI4-Lite 接口模块。AXI4-Lite 接口模块包含在生成的顶层 RTL 内核封装器

中。• 在封装器中包含一个示例内核 IP 模块,您需要将其替换为 RTL IP 设计。RTL IP 开发者必须确保 RTL IP 与封装器模板之间的正确连接。

• 生成 kernel.xml 文件以匹配向导中指定的软件函数原型和行为。RTL Kernel Wizard 生成一个 Vivado 项目,其中包含一个示例设计,该设计由一个简单的加法器 RTL IP 组成,称为VADD。此外,它还根据用户向导输入生成与所需接口、控制逻辑和寄存器映射(如上所述)匹配的关联 RTL 封装器。您可以使用此封装器将 RTL IP 封装到 SDAccel 框架可访问的 RTL 内核中。注释: 不需要使用向导生成的代码。只要满足上面概述的软件和接口要求,您就可以完全生成自己的 RTL 内核。如果使用生成的封装器,则需要将生成的 RTL IP (VADD) 替换为 RTL IP 并连接到封装器。连接包括时钟、复位、AXI4-Lite 接口、存储器接口和可选的流传输接口。连接数将取决于提供给内核向导的接口信息(例如,选择两个 AXI4 存储器接口)。有必要手动建立与 IP 的连接并验证设计。RTL Kernel Wizard 为顶层 RTL 内核封装器和生成的文件生成 Vivado 项目。这使您可以轻松更新和最优化 RTL 内核。此外,RTL Kernel Wizard 还为生成的 RTL 内核封装器生成一个简单的测试平台,并为示例 RTL 内核生成示例主机代码。必须修改此示例测试平台和主机代码,以相应地测试您的 RTL IP 设计。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 81

Send Feedback

Page 82: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

以下小节介绍了如何使用 RTL Kernel Wizard。

启动 RTL Kernel Wizard可以使用两种不同的方法启动 RTL Kernel Wizard:从 SDx™ 开发环境或 Vivado 集成设计环境 (IDE)。SDx 开发环境自动将生成的内核/示例主机代码重新导入 SDx 项目,从而提供更加流畅的体验。要从 SDx 开发环境启动 RTL Kernel Wizard,请执行以下操作:1. 启动 SDx 开发环境。2. 创建 SDx 项目(应用项目类型)。3. 单击“Xilinx → RTL Kernel Wizard”。要从 Vivado IDE 启动 RTL Kernel Wizard,请执行以下操作:1. 创建一个新 Vivado 项目,选择与目标平台已有器件相同的器件。如果您不知道目标器件,请选择默认器件。2. 单击 “IP catalog”按钮转到 IP 目录。3. 在 IP 目录搜索框内键入 wizard。4. 双击“SDx Kernel Wizard”以启动向导。注释: 使用来自 SDx 安装的 Vivado,已确保工具版本相同。

使用 RTL Kernel Wizard该向导被组织成页面,分解了将内核创建为较小步骤的过程。要在页面之间导航,请单击“Next”,然后选择“Back”。要根据向导的输入完成内核并构建项目,请单击“OK”。以下每个部分都描述了每个页面及其输入选项。

RTL Kernel Wizard 常规设置下图显示了“General Settings”选项卡中的三个设置。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 82

Send Feedback

Page 83: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 51: RTL Kernel Wizard “General Settings”页

“Kernel Identification"

以下是“General Settings”选项卡中的三个设置。• “Kernel name”: 内核名称。这将是 IP、顶层模块名称、内核和 C/C++ 函数模型的名称。该标识符应符合 C 和

Verilog 标识符命名规则。它还必须符合 Vivado IP 集成器命名规则,该规则禁止使用下划线,除非置于字母数字字符之间。

• “Kernel vendor”: 供应商名称。用于 《Vivado Design Suite 用户指南:采用 IP 进行设计》 (UG896) 中描述的供应商/库/名称/版本 (VLNV) 格式。

• “Kernel library”: 库名称。用于 VLNV。必须符合相同的标识符规则。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 83

Send Feedback

Page 84: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

“Kernel Options"

• “Kernel type”: RTL 内核类型包括带有 Verilog 控制寄存器模块的 Verilog RTL 顶层模块,以及顶层模块内的Verilog 内核示例。块设计内核类型还提供了 Verilog RTL 顶层模块,但它实例化了 Verilog RTL 顶层模块内部的 IP集成器原理图。块设计包括 MicroBlaze™ 子系统,该子系统使用块 RAM 交换存储器来模拟控制寄存器。示例软件MicroBlaze 随项目一起提供,以演示如何使用 MicroBlaze 控制内核。

• “Kernel control interface”: 选择内核操作模式。选择包括 ap_ctrl_hs、ap_ctrl_none 和ap_ctrl_chain。如需了解更多信息,请参阅 内核软件要求。

• “Enable MicroBlaze debug” (仅适用于选择配置): 将 MicroBlaze 调试模块 (MDM) 添加到块设计内核类型示例。MDM 模块的边界扫描接口连接到内核的顶层。调试接口连接到 MicroBlaze 实例。此选项仅适用于支持通过赛灵思 虚拟电缆进行系统调试的平台,并且要将 “Kernel type” 设置为 “Block Design”。

时钟和复位选项• “Number of clocks”: 设置内核使用的时钟数。每个内核都有一个主时钟和复位,称为 ap_clk 和 ap_rst_n。

内核上的所有 AXI 接口都由此时钟驱动并复位。选择 “Number of clocks” 为 2 时,提供辅助时钟和相关复位以供内核内部使用。辅助时钟和复位分别称为 ap_clk_2 和 ap_rst_n_2。该辅助时钟支持独立的频率缩放,并且独立于主时钟。如果内核时钟需要以比 AXI4 接口更快或更慢的速率运行,辅助时钟非常有用,并且必须根据主时钟计时。采用多时钟设计时,必须使用适当的时钟域交汇技术来确保所有时钟频率场景下的数据完整性。

• “Has reset”: 指定是否包含内核的顶层复位输入端口。省略复位对于提升大型设计的布线拥塞非常有用。通常在设计中具有复位的任何寄存器都应具有适当的初始值以确保正确性。如果启用,则每个时钟都包含一个复位端口。“Block Design” 类型内核必须有一个复位输入。

scalar 实参scalar 实参用于将控制类型的信息传递给内核。无法从主机读取 scalar 实参。对于指定的每个实参,创建相应的寄存器以便于将实参从软件传递到硬件。参见下面的图:

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 84

Send Feedback

Page 85: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 52: Kernel Wizard “scalar”

• “Number of scalar kernel input arguments”: 指定要传递给内核的 scalar 输入实参的数量。对于指定的每个数字,将生成一个表行,允许定制实参名称和实参类型。scalar 数目没有下限,向导允许的最大数目为 64 个。

scalar 输入实参定义以下是 scalar 输入实参的定义:• “Argument name”: 实参名称在生成的 Verilog 控制寄存器模块中用作输出信号。为每个实参分配一个 ID 值。此

ID 值用于从主机软件访问该实参。可以在此向导的摘要页面上找到 ID 值分配。为确保最大兼容性,实参名称遵循与内核名称相同的标识符规则。

• “Argument type”: 指定实参的数据类型,从而指定位宽。这会影响生成的 Verilog 模块中的寄存器宽度。可用的数据类型仅限于“6.1.1 内置 scalar 数据类型”部分中的 OpenCL C 规范版本 2.0 指定的数据类型。规范为每种数据类型指定了相关的位宽。无论实参类型如何,RTL 向导都会在寄存器映射中为所有 scalar 保留 64 位。如果实参类型为 32 位或更少,则"RTL Wizard"将(分配的 64 位中的)前 32 位设置为保留地址位置。位宽大于 32 位的数据类型需要对控制寄存器进行两次写入操作。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 85

Send Feedback

Page 86: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

全局存储器内核通过 AXI4 主接口访问全局存储器(参见下图)。

图 53: 全局存储器

每个 AXI4 接口彼此独立地运行,并且每个 AXI4 接口可以连接到一个或多个存储器控制器以连接到诸如 DDR4 的片外存储器。全局存储器主要用于从主机向内核传递大型数据集。它还可以用于在内核之间传递数据。如需了解有关如何设计这些接口以获得最优化性能的建议,请参阅 AXI4 接口的内存性能最优化 一节。对于每个接口,示例 AXI 主逻辑在RTL 内核中生成以提供起始点,并且如果不使用则可以被丢弃。在全局存储器对话框中,可以指定内核中存在的“Number of AXI master interfaces”。最多 16 个接口。对于每个接口,您可以定制接口名称、数据宽度和关联实参的数量。每个接口都包含所有读写通道。RTL Kernel Wizard 建议的默认名称是 m00_axi 和 m01_axi。如果不更改,则在通过 --sp 选项分配 DDR 库时必须使用这些名称。“AXI master definition"

• “Interface name”: 指定接口的名称。为确保最大兼容性,实参名称遵循与内核名称相同的标识符规则。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 86

Send Feedback

Page 87: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

• “Width (in bytes)”: 指定 AXI 数据通道的数据宽度。赛灵思 建议匹配内存控制器 AXI4 从设备接口的本机数据宽度。内存控制器从设备接口通常为 64 个字节(512 位)宽。

• “Number of arguments”: 指定与此接口关联的实参数目。每个实参表示一个指向内核可以访问的全局存储器的数据指针。

“Argument Definition"

• “Interface”: 指定当前行中相应列所关联的 AXI 接口的名称。该值不能直接修改;它是从上一个表中定义的接口名称复制来的。

• “Argument name”: 指定函数原型签名上显示的指针实参的名称。为每个实参分配一个 ID 值。此 ID 值用于从主机软件访问该实参。可以在此向导的摘要页面上找到 ID 值分配。为确保最大兼容性,实参名称遵循与内核名称相同的标识符规则。实参名称在生成的 Verilog 控制寄存器模块中用作输出信号。

“Streaming Interfaces”页面通过流传输接口页面可以配置 AXI4-Stream 内核上的接口。流传输接口可用于内核之间或与主机之间的总线连接(仅限某些基于 QDMA 的平台)。对于内核到内核的通信,AXI4-Stream 信号集和协议应该在内核之间匹配。用于主机到内核和内核到主机直接通信的流传输接口必须遵循严格的协议和信号声明。QDMA AXI4-Stream 协议使用 AXI4-Stream 协议的 TDATA/TKEEP/TLAST 信号。流数据传输事务由一系列传输组成,其中最终传输用 TLAST 信号的有效终止。下图显示了配置选项。与主机之间的流传输必须遵守以下原则:• TVALID/TREADY 两个都被有效时发生 AXI4-Stream 传输。• TDATA 必须是 8、16、32、64、128、256 或 512 位宽。• TLAST 为 0 时,TKEEP(每个字节)必须全部为 1。• TLAST 为 1 时,TKEEP 可用于发出不整齐的尾部信号。例如,在 4 字节接口上,TKEEP 只能是 0b0001、

0b0011、0b0111 或 0b1111,以指定最后一次传输的大小分别为 1 字节、2 字节、3 字节或 4 字节。• TKEEP 不能全为零(即使 TLAST 是 1)。• TLAST 必须在数据包的末尾有效。• 如果未启动内核,则 TREADY 输入/TVALID 输出应为低,以避免丢失传输。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 87

Send Feedback

Page 88: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 54: “Streaming Interfaces”页面

• “Number of AXI4-Stream interfaces”: 指定内核存在的 AXI4-Stream 接口数。每个内核最多可以启用 32 个接口。赛灵思建议尽量减少接口数量,以减少消耗的逻辑资源。

流设置• “Name”: 指定接口的名称。为确保最大兼容性,实参名称遵循与内核名称相同的标识符规则。• “Mode”: 指定接口的方向。只读的接口是 AXI4-Stream 从接口,并可以使用 clWriteStream API 发送数据。只写入的接口是 AXI4-Stream 主接口,并且主机可以通过 clReadStream API 接口接收数据。

• “Width (bytes)”: 指定 AXI4-Stream 接口的 TDATA 宽度(以字节为单位)。此接口宽度限制为 1- 64 个字节(2次幂)。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 88

Send Feedback

Page 89: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

总结本节总结了 VLNV、软件功能原型设计,以及在前页选中的选项创建的硬件控制寄存器。如果函数原型设计是 C 函数,则会传递内核调用的内容。请参阅主机代码生成的示例,了解如何为内核调用设置内核实参。寄存器映射显示主机软件 ID、实参名称、硬件寄存器偏移、类型和相关接口之间的关系。在继续生成内核之前,请查看本节以了解正确性。

图 55: Kernel Wizard“Summary”页面

从 RTL Wizard 完成并生成内核如果从 SDx 启动 RTL Kernel Wizard,则在单击“OK”后,将打开示例 Vivado 项目。如果从 Vivado 启动 RTL Kernel Wizard,则在单击“OK”后执行以下操作:1. 出现“Generate Output Products”窗口时,选择“Global”综合选项并单击“Generate”,然后单击“OK”。2. 在 Vivado 的“Design Sources”视图中右键单击 .xci 文件,然后选择 “Open IP Example Design”。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 89

Send Feedback

Page 90: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

3. 在打开的示例设计窗口中,选择输出目录(或接受默认值)并单击“OK”。这将打开带有示例设计的新 Vivado项目。

4. 您现在可以关闭从中调用 RTL Kernel Wizard 的当前 Vivado 项目。

中断默认情况下,RTL Kernel Wizard 会创建一个名为 interrupt 的中断端口,以及“Control Register”块中的中断逻辑。生成的 Verilog 代码和关联的 component.xml 和 kernel.xml 文件会体现这一点。中断为高电平有效,并通过设置 Global Interrupt Enable (GIE) 和 Interrupt Enable (IER) 寄存器来启用。默认情况下,IER 使用内部 ap_done 和 ap_ready 信号来触发中断。当由写入命令切换触发,ISR 寄存器的所有定义位均为零时,中断被清除。

RTL Kernel Wizard Vivado 项目RTL Kernel Wizard 配置对话框通过指定其 I/O、控制寄存器和 AXI4 接口来自定义 RTL 内核的规范。该过程的下一步是自定义内核的内容,然后将这些内容封装到赛灵思对象 (xo) 文件中。完成 RTL Kernel Wizard 配置 GUI 后,将生成一个 Vivado 内核项目,并使用创建 RTL 内核所需的文件进行填充。顶层 Verilog 文件包含预期的输入/输出信号和参数。这些顶层端口与内核规范文件 (kernel.xml) 匹配,当与 RTL/块的其余部分结合使用时,设计将变成加速内核。在顶层文件中定义的 AXI4 接口包含生成高效、高吞吐量接口所需的最小 AXI4 信号子集。在连接到 AXI 系统的其余部分时,忽略的信号会继承最优化的默认值。这些最优化的默认值允许系统忽略不需要的 AXI 功能,从而节省区域并降低复杂性。如果从包含未在端口列表中列出的 AXI 信号的现有代码开始,则可以将这些信号添加到顶层端口,并且 IP 封装器将进行相应的调整。根据所选 “Kernel Type”,顶层文件的内容将使用 Verilog 示例和控制寄存器或实例化 IP 集成器 块设计进行填充。

RTL 内核类型项目流程RTL 内核类型提供顶层 Verilog 设计,包括控制寄存器和 Vadd 子模块示例设计。Vadd子 模块由一个简单的加法器函数,一个 AXI4 读取主控制器,两个 AXI4-Stream 接口和一个 AXI4 写入主控制器组成,如下图所示。每个定义的 AXI4接口都有一个独立的示例加法器代码。每个接口的第一个关联实参用作示例的数据指针。每个示例读取 16 KB 数据,执行 32 位加一操作,然后将 16 KB 数据写入原位(读写地址相同)。如果修改了控制寄存器模块以确保它仍然与位于Vivado 内核项目的导入目录中的 kernel.xml 文件保持一致,则应该小心。示例子模块可以替换为您的定制逻辑,或用作设计的起点。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 90

Send Feedback

Page 91: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 56: 内核类型 RTL Top

Kernel Top (Kernel Name)

Control Register Block (Do Not Modify)

Example Block (Replace or Modify)

Interrupt

control_s_axi

example

interrupt

m00_axi

m01_axi

Control Signals(ap_ctrl_hs or ap_ctrl_chain

Scalar Arguments

Global Memory Arguments

AXI4-Lite Slave Interface

axi_aresetn

axi_aclk

AXI4 Memory Mapped Master

Interface

Control Signals

Scalar Arguments

Global Memory Arguments

axi_aclk

axi_aresetn

krnl_clkAXI4 Memory

Mapped Master Interfacekrnl_rst_n

ap_clk_2

ap_rst_n_2

ap_clk

ap_rst_n

ap_s

tart

ap_i

dle

ap_d

one

scal

ar0

scal

ar1

scal

arN

axi0

0_pt

r0

axi0

0_pt

r1

axi0

1_pt

rN

s_axi_control

ap_r

eady

ap_c

ontin

ue

(ap_

ctrl_

chai

n on

ly)

AXI4-Stream Slave Interface

axis01 AXI4-Stream Master Interface axis00

X22079-051019

Vadd 子模块由一个简单的加法器函数、一个 AXI4 读取主控制器和一个 AXI4 写入主控制器组成,如下图所示。每个定义的 AXI4加一操作,然后将 16 KB 的数据写入原位(读写地址相同)。接口具有独立的示例加法器代码。每个接口的第一个关联实参用作示例的数据指针。每个示例读取 16 KB 的数据,执行 32 位

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 91

Send Feedback

Page 92: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 57: 内核类型 RTL 示例Example Block

ap_start, ap_idle, ap_done control logic

AXI4 Read MasterVectorAdder(+1)

AXI4 Write MasterAXI4-Stream AXI4-Stream

AXI4 Read MasterVectorAdder(+1)

AXI4 Write MasterAXI4-Stream AXI4-Stream

ap_clk (AXI) Domain

vadd_example_0

ap_clk2 (Kernel) Domain

ap_clk (AXI) Domainvadd_example_1

ap_clk2 (Kernel) Domain

M_AXI AR Channel

M_AXI R Channel

M_AXI AR Channel

M_AXI R Channel

M_AXI AW Channel

M_AXI W Channel

M_AXI B Channel

M_AXI AW Channel

M_AXI W Channel

M_AXI B Channel

m00

_axi

m01

_axi

X22080-011019

下表描述了与内核 Vivado 项目根相关的重要文件,其中 <kernel_name> 是在向导中选择的内核的名称。表 17: RTL Kernel Wizard 的源文件和测试平台文件

文件名 描述 提供内核类型接口有独立的示例 add<内核_名称> _ex.xpr Vivado 工程文件 全部

imports 目录<kernel_name>.v 内核顶层模块 全部<kernel_name>_control_s_axi.v RTL 控制寄存器模块 RTL

<kernel_name>_example.sv RTL 采集的块 RTL

<kernel_name>_example_vadd.sv RTL 示例 AXI4 矢量添加块 RTL

<kernel_name>_example_axi_read_master.sv RTL 示例 AXI4 读取主控制器 RTL

<kernel_name>_example_axi_write_master.sv RTL 示例 AXI4 写入主控制器 RTL

<kernel_name>_example_adder.sv RTL 示例 AXI4-Stream 加法器块 RTL

<kernel_name>_example_counter.sv RTL 示例计数器 RTL

<kernel_name>_exdes_tb_basic.sv 仿真测试平台 全部<kernel_name>_cmodel.cpp 用于软件仿真的软件 C 模型示例。 全部<kernel_name>_ooc.xdc 非关联赛灵思约束文件 全部

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 92

Send Feedback

Page 93: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

表 17: RTL Kernel Wizard 的源文件和测试平台文件 (续)

文件名 描述 提供内核类型<kernel_name>_user.xdc 用于内核用户约束的 赛灵思 约束文件。 全部kernel.xml 内核描述文件 全部package_kernel.tcl 内核封装脚本 proc 定义 全部post_synth_impl.tcl Tcl 后实现文件 全部

sdx_imports directory

src/host_example.cpp 主机代码实例 全部makefile makefile 实例 全部

<kernel_name>_ex.sdk/<kernel_name>_control/src directory

kernel_control.h MicroBlaze C 报头文件 块设计kernel_control.c MicroBlaze C 文件 块设计

<kernel_name>_ex.sdk/<kernel_name>_control/Debug directory

<kernel_name>_control.elf MicroBlaze elf 文件 块设计<kernel_name>_ex.src/sources_1/<kernel_name>_bd directory

<kernel_name>_bd.bd Vivado 原理图文件 块设计

块设计内核类型项目流程块设计内核类型提供 IP 集成器 块设计 (BD) 作为内核的基础。MicroBlaze 处理器子系统用于对控制寄存器进行采样并控制内核的流量。MicroBlaze 处理器系统使用块 RAM 作为主机和内核(而不是寄存器文件)之间的交换存储器。对于每个 AXI 接口,创建 DMA 和数学运算子块以提供如何控制内核执行的示例。该示例使用 MicroBlaze AXI4-Stream 接口来控制 AXI DataMover IP,以创建与 RTL 内核类型相同的示例。此外,还包括一个 SDK 项目,用于编译和链接 MicroBlaze 核的 ELF 文件。该 ELF 文件加载到 Vivado 内核项目中并直接初始化到 MicroBlaze 指令存储器中。以下步骤可用于修改 MicroBlaze 处理器程序:1. 如果设计已更新,则可能需要运行“Export Hardware”选项。该选项可在“File → Export → Export Hardware”

菜单位置找到。出现导出硬件对话框后,单击“OK”。2. 现在可以调用软件开发套件 (SDK) 应用。从 Vivado 菜单中选择“File → Launch → SDK”。3. 出现赛灵思 SDK GUI 后,单击“Welcome”标签文本右侧的 “X”,以关闭欢迎对话框。这样可显示下面已加载

的 SDK 项目。4. 在“Project Explorer”中,源文件位于 <Kernel Name>_control/src 部分下方。根据需要修改这些内容。5. 更新完成后,通过选择菜单选项“Project → Build All → Check for errors/warnings and resolve if necessary”编译源。ELF 文件在 GUI 中自动更新。

6. 运行仿真以测试更新的程序并在必要时进行调试。

仿真测试平台当生成 SystemVerilog 仿真测试平台时,将运行内核以确保其功能正常。它使用检查器函数填充以验证加一操作。这个生成的测试平台可以用作验证内核功能的起点。它从控制寄存器写入/读取并多次执行内核,同时还包括简单的复位测试。它还可用于调试 AXI 问题、复位问题、多次迭代期间的错误以及内核功能。与硬件仿真相比,它对硬件极端情况执行更严格的测试,但不测试主机代码和内核之间的交互。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 93

Send Feedback

Page 94: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

要运行仿真,请单击“Vivado Flow Navigator → Run Simulation”,其位于 GUI 的左侧,然后选择“Run BehavioralSimulation”。如果行为仿真按预期工作,则可以运行综合后功能仿真以确保综合与行为模型匹配。

非关联综合Vivado 内核项目配置为在非关联 (OOC) 模式下运行综合和实现。设计中填充了赛灵思设计约束 (XDC) 文件,以便为此目的提供默认时钟频率。运行综合有助于确定内核是否综合而没有错误。它还提供使用情况和频率的估算。内核应该能够在封装之前成功运行综合。否则在链接期间会发生错误,并且可能更难调试。将内核封装为网表而不是 RTL 时,可以使用综合输出。如果在内核中使用块设计,则必须将内核封装为网表。要运行 OOC 综合,请单击“Run Synthesis”,位置为“Vivado FlowNavigator → Synthesis”菜单。

软件模型和主机代码示例导入目录中提供了加一操作示例的 C++ 软件模型。它与内核具有相同的名称,并具有 cpp 文件扩展名。可以修改该软件模型以模拟内核的功能。在封装步骤中,此模型可以包含在内核中。当使用 SDx 时,允许软件仿真与内核一起执行。硬件仿真和系统连接器始终使用内核的硬件描述。在 sdx_imports 目录中,提供了示例 C 主机代码,称为 main.c。主机代码将二进制容器作为程序的实参。这可在主机代码加载到 SDx GUI 后,通过选择“Automatically add binary container(s) to arguments”(位于“RunConfiguration → Arguments”中)自动指定。然后,主机代码将二进制文件作为 init 函数的一部分加载。主机代码实例化内核、分配缓存、设置内核参数、执行内核,然后收集并检查示例加一函数的结果。

封装 RTL 内核在 Vivado 中设计和测试内核后,生成 RTL 内核的最后一步是封装 Vivado 内核项目以便与 SDx 一起使用。要开始此流程,请单击“Generate RTL Kernel”,位置为“Vivado Flow Navigator → Project Manager”菜单。将打开一个弹出对话框,其中包含三个主要封装选项:• 仅源内核直接使用 RTL 设计源对内核进行封装。• 预综合内核将内核与 RTL 设计源封装在一起,可以在流程中稍后使用综合高速缓存输出,以避免重新综合。如果目

标平台发生更改,则封装的内核可能会回退到 RTL 设计源,而不是使用高速缓存的输出。• 使用由内核的综合输出生成的网表,基于网表、设计检查点 (DCP) 的内核将内核封装为块。如有必要,可以选择加密此输出。如果目标平台发生更改,则内核可能无法重新定位新器件,并且必须从源重新生成。如果设计包含块设计,则基于网表 (DCP) 的内核是唯一可用的封装选项。

可选地,所有内核封装类型都可以与能在软件仿真中使用的软件模型一起封装。如果软件模型包含多个文件,请在“Source”文件列表中的每个文件之间键入一个空格,或者在选择文件时使用 GUI 以使用 “CTRL” 键选择多个文件。单击“OK”后,将生成内核输出产品。如果选择了预综合的内核或网表内核选项,则可以运行综合。如果先前已经运行了综合,它将使用这些输出,无论它们是否过时。内核赛灵思对象 .xo 文件生成在 Vivado 内核项目的sdx_imports 目录中。此时,您可以关闭 Vivado 内核项目。如果从 SDx GUI 调用 Vivado 内核项目,则称为 main.c 的示例主机代码和内核赛灵思对象 (.xo) 文件将自动导入到 SDx 源文件夹。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 94

Send Feedback

Page 95: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

修改从向导生成的现有 RTL 内核从 SDx GUI 可以修改现有的已生成内核。生成内核后,通过调用 赛灵思 RTL Kernel Wizard 菜单选项,可打开一个对话框,该对话框提供修改现有内核的选项。选择“Edit Existing Kernel Contents”可重新打开 Vivado 项目,然后您可以再次修改并生成内核内容。选择“Re-customize Existing Kernel Interfaces”可重新访问 RTL Kernel Wizard 配置对话框。可以修改“Kernel Name”以外的选项,并替换先前的 Vivado 项目。重要提示! 生成更新的 Vivado 内核项目时,前一个项目中的所有文件和更改都将丢失。

RTL 内核的手动开发流程强烈建议使用 RTL Kernel Wizard 创建 RTL 内核;但是可以在不使用向导的情况下创建 RTL 内核。本节提供有关手动开发流程的每个步骤的详细信息。将 RTL 设计封装为 SDAccel 应用的 RTL 内核的三个步骤是:1. 将 RTL 块封装为 Vivado IP。2. 创建内核描述 XML 文件。3. 将 RTL 内核封装到赛灵思对象 (.xo) 文件中。这些步骤是 RTL Kernel Wizard 的自动使用。完全封装的 RTL 内核作为 .xo 文件提供,并且文件扩展名为 .xo。此文件是封装 Vivado IP 对象(包括源文件)和关联内核 XML 文件的容器。.xo 文件可以编译到平台中,并在硬件或硬件仿真流程中运行。

将 RTL 块作为 Vivado IP 封装RTL 内核必须作为 Vivado IP 封装,适用于 IP 集成器。请参阅 《Vivado Design Suite 用户指南:创建和封装定制 IP》(UG1118) 查看有关 Vivado IP 封装详情。RTL 内核需要下面的接口封装:• AXI4-Lite 接口名称必须作为 S_AXI_CONTROL 封装,但是下面的 AXI 端口可以用不同的方式命名。• AXI4 接口必须作为带 64 位地址支持的 AXI4 主端点封装。建议: 赛灵思强烈推荐 AXI4 接口与 AXI 元数据 HAS_BURST=0 和 SUPPORTS_NARROW_BURST=0 一起封装。这些属性可以在 IP 级 bd.tcl 文件中设置。这表明并未使用包裹和修复突发类型,也未使用窄传输(小突发)。• ap_clk 和 ap_clk_2 必须作为时钟接口封装。• ap_rst_n 和 ap_rst_n_2 必须作为低电平有效复位接口封装。• ap_clk 必须与所有的 AXI4-Lite、AXI4 和 AXI4-Stream 接口关联封装。为检测 RTL 内核是否为 IP 集成器 正确封装,请尝试实例化 IP 集成器 中的封装内核。在 GUI 中,它应表现为仅具有时钟、复位、AXI4-Lite 从设备、AXI4 主控制器和 AXI4 从设备的接口。在画布视图中不应出现其他端口。AXI 接口属性可以通过选择画布上的接口查看。然后在 “Block Interface Properties” 窗口中,选择属性标签并展开 CONFIG 表入口。如果接口为只读或只写入,可以移除未使用的 AXI 通道,将 READ_WRITE_MODE 设置为只读或只写。重要提示! 如果 RTL 内核具有约束,且涉及静态区域(如时钟)中的约束,则 RTL 内核约束文件需被标记为稍后处理次序,以确保 RTL 内核约束正确应用。有两种方法可将约束标记为稍后处理次序:

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 95

Send Feedback

Page 96: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

1. 如果约束以 .ttcl 文件提供,添加 <: setFileProcessingOrder "late" :> 至 .ttcl 文件的序言章节,如下所示:<: set ComponentName [getComponentNameString] :><: setOutputDirectory "./" :><: setFileName $ComponentName :><: setFileExtension ".xdc" :><: setFileProcessingOrder "late" :>

2. 如果约束以 .xdc 文件提供,则添加在 component.xml 中从 <spirit:define> 开始往下的四行。component.xml 中的四行需要靠近 .xdc 文件调用区域。在下例中,my_ip_constraint.xdc 文件根据已定义的稍后处理次序被调用。<spirit:file> <spirit:name>ttcl/my_ip_constraint.xdc</spirit:name> <spirit:userFileType>ttcl</spirit:userFileType> <spirit:userFileType>USED_IN_implementation</spirit:userFileType> <spirit:userFileType>USED_IN_synthesis</spirit:userFileType> <spirit:define> <spirit:name>processing_order</spirit:name> <spirit:value>late</spirit:value> </spirit:define></spirit:file>

创建内核描述 XML 文件需要为每个 RTL 内核创建内核描述 XML 文件,以便可以在 SDAccel 环境中使用它。该文件必须称为 kernel.xml。XML 文件指定内核属性,如运行时间和 SDAccel 流程所需的寄存器映射和端口。以下是 kernel.xml 文件的示例。<?xml version="1.0" encoding="UTF-8"?><root versionMajor="1" versionMinor="6"> <kernel name="sdx_kernel_wizard_0" language="ip_c" vlnv="mycompany.com:kernel:sdx_kernel_wizard_0:1.0" attributes="" preferredWorkGroupSizeMultiple="0" workGroupSize="1" interrupt="true"> <ports> <port name="s_axi_control" mode="slave" range="0x1000" dataWidth="32" portType="addressable" base="0x0"/> <port name="m00_axi" mode="master" range="0xFFFFFFFFFFFFFFFF" dataWidth="512" portType="addressable" base="0x0"/> </ports> <args> <arg name="axi00_ptr0" addressQualifier="1" id="0" port="m00_axi" size="0x8" offset="0x010" type="int*" hostOffset="0x0" hostSize="0x8"/> </args> </kernel></root>

下表详细描述了内核 XML 的格式:表 18: 内核 XML 格式

标签 属性 描述

<root>versionMajor 当前版本的 SDAccel 设置为 1。versionMinor 当前版本的 SDAccel 设置为 6。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 96

Send Feedback

Page 97: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

表 18: 内核 XML 格式 (续)

标签 属性 描述

<kernel>

name 内核名称language 对于 RTL 内核,始终将其设置为 ip_c。

vlnv

必须与 IP 的 component.xml 中的供应商、库、名称和版本属性匹配。例如,如果 component.xml 有以下标签:<spirit:vendor>xilinx.com</spirit:vendor>

<spirit:library>hls</spirit:library>

<spirit:name>test_sincos</spirit:name>

<spirit:version>1.0</spirit:version>

内核 XML 中的 vlnv 属性必须设置为:xilinx.com:hls:test_sincos:1.0

attributes 保留。将其设置为空字符串。preferredWorkGroupSizeMultiple 保留。将其设置为 0。workGroupSize 保留。将其设置为 1。interrupt 如果存在中断,则设置为等于“true”(即,中断 =“true”),否则忽略。

<port>

name端口名称。至少需要一个 AXI4 主端口和一个 AXI4-Lite 从端口。可选地,可以将 AXI4-Stream 端口指定为在内核之间流传输数据。AXI4-Lite 接口的名称必须为 S_AXI_CONTROL。

mode

• 对于 AXI4 主端口,将其设置为“master”。• 对于 AXI4 从端口,将其设置为“slave”。• 对于 AXI4-Stream 主端口,将其设置为“write_only”。• 对于 AXI4-Stream 从端口,将其设置为“read_only”。

range 端口的地址空间范围。dataWidth 通过端口的数据宽度,默认为 32 位。portType 指示端口是否可寻址或流传输。

• 对于 AXI4 主端口和从端口,将其设置为“addressable”。• 对于 AXI4-Stream 端口,将其设置为“stream”。

base 对于 AXI4 主端口和从端口,将其设置为 0x0。此标签不适用于 AXI4-Stream 端口。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 97

Send Feedback

Page 98: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

表 18: 内核 XML 格式 (续)

标签 属性 描述

<arg>

name 内核实参名。

addressQualifier

有效值:0:scalar 内核输入实参1:全局存储器2:本地存储器3:常数存储器4::管道

id仅适用于 AXI4 主端口和从端口。ID 应是有顺序的。它用于确定内核实参的顺序。不适用于 AXI4-Stream 端口。

port 指示与 arg 连接的端口。size 实参的大小。默认值为 4 个字节。offset 表示寄存器存储器地址。type 实参的 C 数据类型。例如:int*,float*。hostOffset 保留。设置为 0x0。hostSize 实参的大小。默认值为 4 个字节。memSize 不适用于 AXI4 主端口和从端口。

对于 AXI4-Stream 端口,memSize 设置创建的 FIFO 的深度。以下标签指定 AXI4-Stream 端口的其他信息。它们不适用于 AXI4 主端口或从端口。

<pipe>

对于计算单元中的每个管道,编译器插入 FIFO 以缓存数据。管道标签描述了 FIFO 的配置。name 指定为 AXI4-Stream 端口插入的 FIFO 的名称。此名称在同一计算单元中使用的所有管道中必须是唯一的。width 指定 FIFO 的宽度(以字节为单位)。例如,0x4 代表 32 位 FIFO。depth 它以字数指定 FIFO 的深度。linkage 始终设置为内部。

<connection>

连接标签描述硬件中从内核到为 PIPE 插入的 FIFO 或从 FIFO 到内核的实际连接。srcInst 指定连接的源实例。srcPort 指定连接的源实例上的端口。dstInst 指定连接的目标实例。dstPort 指定连接的目标实例上的端口。

将 RTL 内核封装到赛灵思对象文件中最后一步是将 RTL IP 和关联的内核 XML 文件封装到赛灵思对象文件 (.xo) 中,以便 SDAccel 编译器可以使用。以下示例命令行将 test_sincos RTL IP 和 kernel.xml 封装到名为 test.xo 的对象文件中。package_xo -xo_path test.xo -kernel_name test_sincos -kernel_xmlkernel.xml -ip_directory ./ip/

如需了解有关 package_xo 的更多信息,请参阅 《SDx 命令和工具参考指南》 (UG1279) 中的“package_xoCommand”部分。另外,有关使用 package_xo 命令的示例,请参阅赛灵思 GitHub 库。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 98

Send Feedback

Page 99: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

有关设计 RTL 的建议虽然 RTL Kernel Wizard 有助于封装在 SDx 流程中使用的 RTL 设计,但底层 RTL 内核应该根据 《UltraFAST 设计方法指南(适用于 Vivado Design Suite)》 (UG949) 的建议进行设计。除了遵守接口和封装要求外,内核的设计应考虑到性能目标。特别是:• AXI4 接口的内存性能最优化• 结果质量考虑因素• 调试和验证的考虑因素这些主题的介绍见下列子章节。

AXI4 接口的内存性能最优化AXI4 接口通常连接到平台中的 DDR 存储器控制器。建议: 为了获得最佳频率和资源使用率,建议每个存储器存控制器使用一个接口。

为了获得存储器控制器的最佳性能,以下是推荐的 AXI 接口行为:• 使用与本机存储器控制器 AXI 数据宽度匹配的 AXI 数据宽度,通常为 512 位。• 请勿使用 WRAP、FIXED 或子大小的突发。• 使用尽可能大的突发传输(最多 4k 字节 AXI4 协议限制)。• 避免使用无效的写入选通。无效的写入选通可以使 DDR 存储器控制器中的纠错码 (ECC) 逻辑执行读取 - 修改 - 写入

操作。• 使用流水线 AXI 交易。• 如果 AXI 接口仅连接到一个 DDR 控制器,请避免使用线程。• 如果内核无法提供完整写入传输事务(非阻塞写入请求),请避免生成写入地址命令。• 如果内核不能在无背压的情况下(非阻塞读取请求)接受所有读取数据,则避免生成读取地址命令。• 如果需要只读或只写接口,则在将项目封装到内核之前,可以在顶层 RTL 文件中注出未使用通道的端口。• 使用多个线程可能导致内核和存储器控制器之间的基础结构 IP 中的资源需求增加。

管理 RTL 内核中的时钟RTL 内核最多可以有两个外部时钟接口;一个主时钟 ap_clk,以及一个可选辅助时钟 ap_clk_2。两个时钟都可用于为内部逻辑提供时钟。但是,所有外部 RTL 内核接口必须在主时钟上提供时钟。主时钟和辅助时钟都支持独立的自动频率调整。如果在 RTL 内核中需要额外的时钟,可以在 RTL 内核中实例化频率综合器,如 Clocking Wizard IP 或 MMCM/PLL 原语。因此,您的 RTL 内核只能使用主时钟、主时钟和辅助时钟、或主时钟和辅助时钟以及内部频率综合器。以下显示了使用这三种 RTL 内核时钟方法的优缺点:

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 99

Send Feedback

Page 100: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

• 单输入时钟:ap_clk○ 外部接口和内部内核逻辑以相同的频率运行。○ 无时钟域交汇 (CDC) 问题。○ ap_clk 的频率可以自动缩放以允许内核满足时序。

• 两个输入时钟:ap_clk 和 ap_clk_2

○ 内核逻辑可以按任一时钟频率运行。○ 需要适当的 CDC 技术才能从一个频率切换到另一个频率。○ ap_clk 和 ap_clk_2 都可以独立自动调整其频率,以使内核满足时序要求。

• 在内核中使用频率综合器:○ 生成时钟所需的其他器件资源。○ 必须有 ap_clk 接口,可以拥有 ap_clk_2 接口。○ 生成的时钟可以针对不同的 CU 具有不同的频率。○ 内核逻辑可以在任何可用的时钟频率下运行。○ 需要适当的 CDC 技术才能从一个频率切换到另一个频率。

在 RTL 内核中使用频率综合器时,您应该注意一些约束:1. RTL 外部接口的时钟为 ap_clk。2. 频率综合器可以有多个输出时钟,用作 RTL 内核的内部时钟。3. 您必须提供 Tcl 脚本以降低 Vivado 布局中的时钟资源布局 DRC,以防止发生 Vivado DRC 错误。以下是 Tcl 命令

的一个例子:set_property CLOCK_DEDICATED_ROUTE ANY_CMT_COLUMN [get_nets pfm_top_i/static_region/base_clocking/clkwiz_kernel/inst/CLK_CORE_DRP_I/clk_inst/clk_out1

注释: 应编辑此约束以反映平台的 shell 时钟结构。4. 在最优化之后,使用 xocc --xp 选项指定上面的 Tcl 脚本以供 Vivado 实现使用。例如:

--xp vivado_prop:run.impl_1.STEPS.OPT_DESIGN.TCL.POST={<PATH>/<TCL Script>}

5. 指定内核可以使用的两个全局时钟输入频率(基于 RTL 或 HLS)。使用 xocc --kernel_frequency 选项确保内核输入时钟频率符合预期。例如,指定一个时钟使用:xocc --kernel_frequency 250

对于两个时钟,您可以按照时钟 ID 指定多个频率。主时钟的时钟 ID 为 0,辅助时钟的时钟 ID 为 1。xocc --kernel_frequency 0:250|1:500

提示: 确保在 RTL 内核操作之前锁定 PLL 或 MMCM 输出时钟。使用 RTL 内核中的锁定信号确保时钟正常运行。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 100

Send Feedback

Page 101: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

将频率综合器添加到 RTL 内核后,生成的时钟不会自动扩展。确保 RTL 内核通过了时序要求,否则 xocc 将返回如下错误:ERROR: [VPL-1] design did not meet timing - Design did not meet timing. One or more unscalable system clocks did not meet their required target frequency. Please try specifying a clock frequency lower than 300 MHz using the '--kernel_frequency' switch for the next compilation. For all system clocks, this design is using 0 nanoseconds as the threshold worst negative slack (WNS) value. List of system clocks with timing failure.

在这种情况下,您需要更改内部时钟频率,或最优化内核逻辑以满足时序要求。

结果质量考虑因素以下建议有助于提升时间和区域的结果:• 流水线全部复位输入并在内部分配复位,避免高扇出网络。• 仅复位基本控制逻辑触发器 (FF)。• 尽可能考虑注册输入和输出信号。• 了解内核相对于目标平台容量的大小,以确保适合,尤其是在实例化多个内核的情况下。• 识别使用堆栈硅片互联 (SSI) 技术的平台。这些器件具有多个裸片,并且必须跨其之间的任何逻辑应该是 FF 到 FF

时序路径。

调试和验证的考虑因素• 应使用先进的验证技术(包括验证组件、随机化和协议检查器)在自己的测试平台中验证 RTL 内核。Vivado IP 目

录提供 AXI 验证 IP (VIP),可帮助验证 AXI 接口。RTL 内核示例设计包含带有样本激励文件的基于 AXI VIP 的测试平台。

• 硬件仿真流程不应用于功能验证,因为它不能准确表示硬件的真实 AXI 流量产生的可能的协议信令条件的范围。硬件仿真应该用于测试主机代码软件集成或查看多个内核之间的交互。

第 9 章: RTL 内核

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 101

Send Feedback

Page 102: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

第 10 章

HLS 内核设计集成到 SDAccel 中本指南以应用程序为中心的方法中描述的主要流程涉及加速器内核,该内核加速器在自顶向下模型中开发并集成到项目的主机应用程序中。这意味着,所有源代码都呈现给 SDAccel™,其中的部分专用于综合到加速器模块中。此流程调用Vivado® 高层次综合 (HLS) 工具将该函数转换为硬件可实现的加速器代码。或者,SDAccel 提供自下而上的流程,其中通过从 Vivado HLS 项目导入直接创建基于 HLS 的硬件内核。这允许您执行最优化并在 Vivado HLS 项目中验证内核性能。当内核符合性能和资源要求时,即可移交赛灵思对象文件 (.xo) 以便纳入 SDx™ 项目中。在移交期间,将维持所有的内核 Vivado HLS 最优化。

图 58: Vivado HLS 设计流程

K2K2.xoHLS

HLS Project

K1 K2.xo

SDx GUI Project

Iterative Design ProcessX21852-110718

自下而上流程的好处包括:• 设计师可以在集成到整个 SDAccel 项目之前设计、验证和最优化内核。• 为每个内核维护特定的内核最优化。• 独立的 Vivado HLS 和项目位置允许分离应用程序和内核。• VHLS 项目可以由多个不同的项目使用,例如库实例化。• 允许团队协作以提高工作效率。

使用 Vivado HLS 创建 SDAccel 内核依照常规 Vivado HLS 流程,运行 Vivado HLS 以从 C/C++ 为 SDAccel 生成内核。但是,由于内核应该作为 SDAccel中的加速器运行,因此需要遵循 SDAccel 内核建模指南(参见 C/C++ 建模指南)。最重要的是,需要将接口建模为AXI 存储器接口,但是由值调用的 scalar 参数除外,它们映射到 AXI4-Lite 接口。这在下面的示例中进行了说明:void krnl_idct(const ap_int<512> *block, const ap_uint<512> *q, ap_int<512> *voutp, int ignore_dc, unsigned int blocks) { #pragma HLS INTERFACE m_axi port=block offset=slave

第 10 章: HLS 内核设计集成到 SDAccel 中

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 102

Send Feedback

Page 103: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

bundle=p0 depth=512 #pragma HLS INTERFACE s_axilite port=block bundle=control #pragma HLS INTERFACE m_axi port=q offset=slave bundle=p1 depth=2 #pragma HLS INTERFACE s_axilite port=q bundle=control #pragma HLS INTERFACE m_axi port=voutp offset=slave bundle=p2 depth=512 #pragma HLS INTERFACE s_axilite port=voutp bundle=control #pragma HLS INTERFACE s_axilite port=ignore_dc bundle=control #pragma HLS INTERFACE s_axilite port=blocks bundle=control #pragma HLS INTERFACE s_axilite port=return bundle=control

建议: 在接口中使用 ap-datatypes 需要使用 HLS 测试平台中的 ap-datatypes。这可能会导致 C/C++ 仿真速度较慢,因此应该考虑映射到本机 C/C++。由于大多数主机代码都基于本机数据类型,因此建议在内核接口中使用它们。如需了解有关创建新项目的更多信息,请参阅《Vivado Design Suite 用户指南:高层次综合》 (UG902)。对于 SDAccel内核项目,必须选中 “SDAccel Bottom Up Flow”复选框并指定“Clock Period”和“Part Selection”,如下图所示。

图 59: 新建 Vivado HLS 项目

通过单击“Browse”按钮选择平台,打开“Device Selection”对话框,然后从“Device”列表中选择加速器开发板。

第 10 章: HLS 内核设计集成到 SDAccel 中

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 103

Send Feedback

Page 104: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 60: 器件选择

完成后,可以继续进行迭代最优化过程,直到获得可能的最佳实现结果。如需了解更多信息,请参阅《Vivado DesignSuite 用户指南:高层次综合》 (UG902)。完成最优化设计的综合后,需要将其导出到 SDAccel 工具链中。“Main Toolbar → Solution → Export RTL”菜单项中提供了导出命令。

第 10 章: HLS 内核设计集成到 SDAccel 中

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 104

Send Feedback

Page 105: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 61: 将 RTL 导出为 IP

只需要确认 XO 文件的位置,该位置将在下一节中导入 SDAccel 生成的 XO 文件命名为 XO-File。注释: 上一节中显示的大多数选项也可以通过“Main Menu → Solution → Solution Settings”从正在运行的项目中进行设置和更改。“Synthesis”和“Export”部分具有与本文档中先前显示的内容相同的内容。SDAccel 的 HLS 综合部分到此结束。在下一节中,将介绍命令行流程的一些必需的详细信息。

用于 SDAccel 综合的典型 Vivado HLS 脚本如果通过命令行脚本运行 HLS 综合,则以下 Tcl 代码等效于之前显示的 GUI 流程:open_project guiProjset_top krnl_idctadd_files src/krnl_idct.cppadd_files -tb src/idct.cppopen_solution "solution1"set_part {xcu200-fsgd2104-2-e} -tool vivadocreate_clock -period 10 -name defaultconfig_sdx -optimization_level none -target xoccconfig_schedule -effort medium -enable_dsp_full_regconfig_compile -name_max_length 256 -pipeline_loops 64#source "./guiProj/solution1/directives.tcl"

第 10 章: HLS 内核设计集成到 SDAccel 中

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 105

Send Feedback

Page 106: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

csim_designcsynth_designcosim_designexport_design -rtl verilog -format ip_catalog -xo \ /wrk/bugs/xoFlow/idct_hls/krnl_idct.xo

将 Vivado HLS 内核项目合并到 SDAccel 中Vivado HLS 输出是作为赛灵思对象文件 (xo) 导出的内核代码。通过选择对象文件作为输入,可以将此文件无缝集成到SDAccel 中(有关更多信息,请参阅 添加源文件)。当 SDAccel 导入 xo 文件时,会自动提取内核名称,以便主机代码可以开始应用加速器。在 SDAccel 编译期间,可以从内核创建多个计算单元,但实现与 Vivado HLS 运行期间设计的相同。在 SDAccel 中,此流程完全支持常规调试和分析功能。可以构建硬件仿真流程以详细测试和调试实现并调整系统构建主机代码的性能。注释: 目前不支持纯软件仿真模式,因为重复的报头文件相依性可能会产生问题。

已知限制此流程具有自上而下流程中不存在的某些限制:• 没有软件仿真支持带有 xo 文件(可能丢失和重复的报头文件)的项目。• 不支持硬件仿真流程中的 GDB 内核调试。• HLS 分析功能仅在 Vivado HLS 项目中可用,并且不来自 SDAccel。

第 10 章: HLS 内核设计集成到 SDAccel 中

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 106

Send Feedback

Page 107: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

附录 A

示例入门所有赛灵思 SDx™ 环境都提供了示例设计。这些示例可以:• 成为 SDx IDE 和编译流程(如 makefile 流程)的有用学习工具。• 帮助您快速开始创建新的应用项目。• 演示有用的编码风格。• 突出重要的最优化技术。SDx 环境提供的每个平台都包含帮助您入门的样本设计,并且可以通过如 创建应用工程 中所述的项目创建流程访问。此外,<SDx_Install_Dir>/samples 显示的每个设计都提供 makefile,因此您可以根据需要构建、模拟和运行完全在命令行上运行的代码(如果您愿意)。可以从赛灵思 GitHub 库下载许多示例设计和教程。示例设计库 包含最新的示例,可帮助您了解针对赛灵思 PCIe®

FPGA 加速电路板的应用最优化。所有示例都可以通过 SDAccel™ 支持的电路板和加速云服务合作伙伴进行编译和执行。此外,教程库提供了一系列主题的逐步说明,包括构建应用、仿真,以及混合 C++ 和 RTL 内核等高级主题,以及优化主机代码。

安装示例完成“New SDx Project”向导时,选择新项目的模板。通过选择“Xilinx → SDx Examples”,还可以从现有项目中加载模板项目。

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 107

Send Feedback

Page 108: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 62: SDAccel 示例 – 空

对话框的左侧显示 SDAccel™ 示例,并为每个类别提供下载命令。对话框的右侧显示下载示例的目录以及下载示例的URL。使用 使用本地副本 章节中的说明定制下载目录的位置。单击 SDAccel 示例旁边的“Download”以下载示例并填充对话框。下载示例如下图所示。

图 63: SDAccel 示例 – 已填充

附录 A: 示例入门

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 108

Send Feedback

Page 109: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

SDx 示例对话框左下角的命令菜单提供了两个用于管理示例库的命令:• “Refresh”: 刷新下载示例列表,从 GitHub 库下载任何更新。• “Reset”: 从.Xilinx 文件夹中删除下载的示例。注释: 公司防火墙可以限制出站连接。可能需要特定的代理设置。

使用本地副本虽然您必须在创建新项目时下载示例以添加模板,但 SDx IDE 始终会将示例下载到您的本地 .Xilinx/SDx/<version> 文件夹中:• Linux 上:~/.Xilinx/SDx/<version>无法从 SDx 示例对话框更改下载目录。您可能希望将示例文件下载到 .Xilinx 文件夹的其他位置。要执行此操作,请使用命令 shell 中的 git 命令为下载的示例指定新的目标文件夹:git clone https://github.com/Xilinx/SDAccel_Examples <workspace>/examples

如上所示,当您使用 git 命令克隆示例时,您可以将示例文件用作应用程序和内核代码的资源,以便在您自己的项目中使用。但是,许多文件使用包含语句来包含在各种示例的 makefile 中管理的其他示例文件。当通过 New SDx ProjectWizard 添加模板时,这些包含文件会自动填充到项目的 src 文件夹中。要使文件成为本地文件,请找到文件并手动将它们设置为项目的本地文件。您可以通过从克隆存储器 bank 的位置搜索文件来查找所需的文件。例如,您可以从 examples 文件夹运行以下命令,以查找 xcl2.hpp 文件,这是 vadd 示例所需的文件:find -name xcl2.hpp

附录 A: 示例入门

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 109

Send Feedback

Page 110: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

附录 B

目录结构由 GUI 和 make 流程生成的目录结构已经过组织,以便您轻松查找和访问文件。通过在各个 compile、link、logs和 reports 目录中导航,您可以轻松访问生成的文件。同样,每个内核也将创建一个目录结构。

命令行在命令行上使用 xocc 时,默认情况下它会在编译和链接期间创建目录结构。始终在工作目录中生成 .xo和 .xclbin。所有中间文件都创建在 _x 目录下(temp_dir 的默认名称)。以下示例显示了为两个 xocc 编译运行(k1 和 k2)和一个 xocc 链接 (design.xclbin) 生成的目录结构。k1.xo、k2.xo 和 design.xclbin 文件位于工作目录中。_x 目录包含关联的 k1 和 k2 内核编译子目录。link、logs 和reports 目录包含有关构建的相应信息。

图 64: 命令行目录结构

附录 B: 目录结构

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 110

Send Feedback

Page 111: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

您可以选择使用以下 xocc 选项更改目录结构:--log_dir <dir_name (full or relative path)>

-–report_dir <dir_name (full or relative path)>-–temp_dir <dir_name (full or relative path)>如需了解有关 xocc 命令选项的详情,请参阅《SDx 命令和工具参考指南》 (UG1279)。

GUI虽然类似,但默认目录命名和结构与 makefile 流程创建的不同。以下示例显示了两个 xocc 编译运行(k1 和 k2)的生成目录结构,以及 GUI 流程中自动生成的一个 xocc 链接 (design.xclbin)。k1.xo、k2.xo 和 design.xclbin文件位于工作目录中。_x 目录包含关联的 k1 和 k2 内核编译子目录。同样,链接、日志和报告目录包含有关构建的相应信息。

图 65: GUI 目录结构

附录 B: 目录结构

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 111

Send Feedback

Page 112: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

GUI 使用以下 xocc 命令规格来管理目录结构的创建,这些规范可以在 makefile 中找到:–-temp_dir–-report_dir–-log_dir

有关 xocc 命令选项的详细信息,请参阅 《SDx 命令和工具参考指南》 (UG1279)。

附录 B: 目录结构

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 112

Send Feedback

Page 113: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

附录 C

有用命令行实用工具有几个赛灵思命令行实用程序可提供详细信息,以帮助构建 xocc 命令行并提供有关平台的数据,包括 SLR 资源可用性。包括 platforminfo、kernelinfo、xclbinutil、仿真配置、赛灵思开发板和 SDSoC™ 实用程序。如需了解更多有关这些命令行实用工具,请参阅《SDx 命令和工具参考指南》 (UG1279)。

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 113

Send Feedback

Page 114: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

附录 D

管理平台和库SDx™ 环境带有内置平台。如果在项目中使用定制平台,则必须使该平台可用于应用实现。在创建项目时,可以从 SDx New Project Wizard 的“Platform Selection”页面管理可在 SDAccel™ 应用项目中使用的平台。这使您可以在创建项目时为其添加新平台。

图 66: 浏览 SDAccel 平台

这将打开“New SDx Project”对话框,您可以在其中管理可用的平台和平台存储器 bank 。

附录 D: 管理平台和库

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 114

Send Feedback

Page 115: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 67: 指定 SDAccel 平台

• “Add Custom Platform”: 将您自己的平台添加到可用平台列表中。导航到定制平台的顶层目录,选中它,然后单击“OK”以添加新平台。可以从可用平台列表中立即选择定制平台。选择“Xilinx → Add Custom Platform”直接向工具添加定制平台。

• “Manage Repositories”: 添加或删除标准和定制平台。如果添加了定制平台,则新平台的路径将自动添加到存储器 bank 。从存储器 bank 列表中删除任何平台会从可用平台列表中删除该平台。

• “Add Devices/Platforms”: 管理要安装的赛灵思器件和平台。如果在安装过程中未选择器件或平台,则可在稍后使用此命令添加它。此命令启动 SDx 安装程序以允许您选择要安装的额外内容。选择“Help → Add Devices/Platforms”直接向工具添加定制平台。

附录 D: 管理平台和库

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 115

Send Feedback

Page 116: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

附录 E

移植到新的目标平台此移植指南适用于需要将加速 SDAccel™ 环境应用从一个目标平台移植到另一个目标平台的用户。例如,将应用从Virtex® UltraScale+™ VCU1525 加速开发板移至 U200 加速开发板。以下主题将作为其中的一部分进行处理:• 设计移植过程概述(包括 FPGA 器件的物理方面)。• 使用新版本时对主机代码和设计约束进行的任何更改。• 控制内核布局和 DDR 接口连接。• 新 shell 中的时序问题可能需要其他选项才能实现性能。

设计移植将在一个目标平台中实现的应用程序移植到另一个目标平台时,了解目标平台之间的差异以及这些差异对设计的影响非常重要。关键考虑因素:• 发布中是否有变化?• 新目标平台是否包含不同的 shell?• 内核是否需要在超级逻辑区域 (SLR) 中重新分配?• 设计是否满足新平台所需的频率(时序)性能?下图总结了本指南中描述的移植流程以及移植过程中要考虑的主题。

附录 E: 移植到新的目标平台

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 116

Send Feedback

Page 117: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 68: Shell 移植流程图

Start

Host code migration

Migrate Release?

Release migration

New shell target?

Modify kernel placement

Synthesize and run design

Timing met?Address timing

Done

Yes

Yes

Yes

No

No

No

X21401-120318

重要提示! 在开始移植设计之前,了解 FPGA 和 shell 的架构非常重要。

理解 FPGA 架构在将任何设计移植到新的目标平台之前,您应该对 FPGA 架构有基本的了解。下图显示了赛灵思 FPGA 器件的布局规划。要理解的概念是:• SSI 器件• SLR

• SLR 的布线资源• 存储器接口

附录 E: 移植到新的目标平台

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 117

Send Feedback

Page 118: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 69: 具有四个 SLR 区域的赛灵思 FPGA 的物理视图

Memory Bank 3

SLR3

Memory Bank 2

SLR2

Memory Bank 1

SLR1

Memory Bank 0

SLR0

Intra SLR Route

SLR Route

X22081-120418

提示: 上面显示的 FPGA 布局规划适用于具有四个 SLR 的 SSI 器件,其中每个 SLR 包含一个 DDR 存储器接口。

堆叠硅片互联 (SSI) 器件在 SSI 器件中,有多个硅裸片经由硅互联连接到一起并且封装到单个器件中。SSI 器件通过提供更多数量的连接来实现多个裸片之间的高带宽连接。与多 FPGA 或多芯片模块方法相比,它还具有更低的时延和功耗,同时可在单个封装内集成大量互联连逻辑、收发器和片上资源。《赛灵思堆叠硅片互联 (SSIT) 提供了突破性的 FPGA 容量、带宽和电源效率》中详细介绍了 SSI 器件的优势。

超级逻辑区域 (SLR)

SLR 是 SSI 技术 FPGA 中的单个器件裸片 slice。组装多个 SLR 组件以组成 SSI 器件。每个 SLR 都包含大多数赛灵思FPGA 器件通用的有源电路。该电路包括大量的:• LUT

• 寄存器• I/O 组件

附录 E: 移植到新的目标平台

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 118

Send Feedback

Page 119: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

• 千兆位收发器• 块存储器• DSP 块可以在 SLR 内实现一个或多个内核。单个内核可能无法跨多个 SLR 实现。

SLR 的布线资源FPGA 上实现的定制硬件通过片上路由资源连接。SSI 器件中有两种类型的路由资源:• 内部 SLR 资源: 内部 SLR 路由资源是用于连接硬件逻辑的快速资源。SDAccel 环境在实现内核时自动使用最佳资源

来连接硬件元素。• 超长线路 (SLL) 资源: SLL 是在 SLR 之间运行的路由资源,用于将逻辑从一个区域连接到下一个区域。这些路由资源比 SLR 内路由慢。但是,当内核放置在一个 SLR 中,并且它连接的 DDR 位于另一个 SLR 中时,SDAccel 环境会自动实现专用硬件以使用 SLL 路由资源而不会对性能产生任何影响。如需了解有关管理布局的更多详情息,请参阅 修改内核布局。

存储器接口每个 SLR 包含一个或多个存储器接口。这些存储器接口用于连接 DDR 存储器,在内核执行之前复制主机缓存中的数据。每个内核都将从 DDR 存储器中读取数据,并将结果写入相同的 DDR 存储器。存储器接口连接到 FPGA 上的引脚,其中包括存储器控制器逻辑。

理解 shell在 SDAccel 开发环境中,shell 是在添加任何定制逻辑或加速器之前在 FPGA 上执行的硬件设计。shell 定义了目标平台中使用的 FPGA 的属性,它由两个区域组成:• 静态区域,包含内核和器件管理逻辑。• 动态区域,其中放置了加速内核的定制逻辑。下图显示应用了 shell 的 FPGA。

附录 E: 移植到新的目标平台

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 119

Send Feedback

Page 120: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 70: 具有四个 SLR 区域的 FPGA 上的 Shell

Static Region (Shell)

Memory Bank 3

SLR3

Memory Bank 2

SLR2

Memory Bank 1

SLR1

Memory Bank 0

SLR0

Dynamic Region

X22082-120418

Shell 是一个无法由用户修改的静态区域,包含操作 FPGA 所需的逻辑,以及与动态区域之间传输数据的逻辑。上面以灰色显示的静态区域可能存在于单个 SLR 中,或者如上例所示,可能跨多个 SLR。静态区域包含:• DDR 存储器接口控制器• PCIe® 接口逻辑• XDMA 逻辑• 防火墙逻辑等动态区域是上面白色显示的区域。该区域包含 shell 的所有可重新配置组件,并且是放置所有加速器内核的区域。由于静态区域消耗器件上可用的一些硬件资源,因此要在动态区域中实现的定制逻辑只能使用剩余资源。在上面显示的示例中,shell 定义了可以使用 FPGA 上的所有四个 DDR 存储器接口。这将需要 DDR 接口中使用的存储器控制器的资源。在《SDAccel 环境版本说明、安装和许可指南》 (UG1238) 中提供了可以在每个 shell 的动态区域中实现多少逻辑的详细信息。本指南后面的修改内核布局中也介绍了此主题。

附录 E: 移植到新的目标平台

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 120

Send Feedback

Page 121: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

移植版本在迁移到新目标平台之前,还应确定是否需要将新平台定位到不同版本的 SDAccel 环境。如果您打算定位新版本,强烈建议首先使用新软件版本定位现有平台,以确认不需要进行任何更改,然后移植到新的目标平台。使用现有平台定位新版本时,需要遵循两个步骤:• 主机代码移植• 版本移植重要提示! 在移植到新版本之前,建议您查看 《SDAccel 环境版本说明、安装和许可指南》 (UG1238)。

主机代码移植在 2018.3 版本的 SDAccel 环境中,对赛灵思运行时间 (XRT) 环境和 shell 的安装方式进行了一些根本性的更改。在以前的版本中,XRT 环境和 shell 都随 SDAccel 环境自动安装。这对编译主机代码所需的建立有影响。有关 2018.3 安装的详情,请参阅 《SDAccel 环境版本说明、安装和许可指南》 (UG1238)。XILINX_XRT 环境变量用于指定 XRT 环境的位置,必须在编译主机代码之前进行设置。安装 XRT 环境后,可以通过适当地获取 /opt/xilinx/xrt/setup.csh 或 /opt/xilinx/xrt/setup.sh 文件来建立 XILINX_XRT 环境变量。其次,确保您的 LD_LIBRARY_PATH 变量也指向 XRT 安装区域。要编译并运行主机代码,请确保从 SDAccel 安装中获取 <SDX_INSTALL_DIR>/settings64.csh 或<SDX_INSTALL_DIR>/settings64.sh 文件。如果您正在使用 GUI,它将自动合并新的 XRT 位置,并在您构建项目时生成 makefile。但是,如果您使用自己的定制 makefile,则需要进行以下更改:• 在您的 makefile 中,不要使用以前版本中使用的 XILINX_SDX 环境变量。• 必须将 XILINX_SDX 变量和路径更新为 XILINX_XRT 环境变量:

○ 包含目录现在指定为 -I${XILINX_XRT}/include 和 -I${XILINX_XRT}/include/CL

○ 库路径现在是:-L${XILINX_XRT}/lib○ OpenCL™ 库将是:libxilinxopencl.so。因此,在您的 makefile 中使用 -lxilinxopencl

版本移植移植主机代码后,使用新版本的 SDAccel 开发环境在现有目标平台上构建代码。验证您是否可以使用新版本在SDAccel 环境中运行项目,并确保它能成功完成且满足时序要求。使用新版本时可能出现的问题包括:• 对 C 库或库文件的更改。• 对内核路径名的更改。• 对内核代码中嵌入的 HLS 编译指示或编译指示选项的更改。• 对 C/C++/OpenCL 编译器支持的更改。

附录 E: 移植到新的目标平台

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 121

Send Feedback

Page 122: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

• 对内核性能的更改:这可能需要调整现有内核代码中的编译指示。使用在开发任何内核期间使用的相同技术解决这些问题。在此阶段,确保使用新版本的目标平台的吞吐量性能满足您的要求。如果最终时序(最大时钟频率)发生变化,您可以在移动到新目标平台后解决这些问题。在 解决时序 中对此进行了说明。

修改内核布局定位新平台时的主要问题是确保现有内核布局在新目标平台中可正常工作。每个目标平台都有一个由 shell 定义的FPGA。如下图所示,shell 可以是不同的。• 左侧原始平台的 shell 有四个 SLR,静态区域分布在所有四个 SLR 上。• 右侧目标平台的 shell 只有三个 SLR,静态区域完全包含在 SLR1 中。

图 71: 硬件平台的 shell 比较

Static Region (Shell)

Memory Bank 3

SLR3

Memory Bank 2

SLR2

Memory Bank 1

SLR1

Memory Bank 0

SLR0

Dynamic Region

Static Region (Shell)

Memory Bank 2

SLR2

Memory Bank 1

SLR1

Memory Bank 0

SLR0

Dynamic Region

X22083-120418

本节介绍如何修改内核布局。

附录 E: 移植到新的目标平台

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 122

Send Feedback

Page 123: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

新硬件平台的含义下图突出显示了移植到新目标平台或 shell 时内核布局的问题。在下面的示例中:• 现有内核 kernel_B 太大,无法适应新目标平台的 SLR2,因为大多数 SLR 都被静态区域使用。• 必须将现有内核 kernel_D 重新定位到新 SLR,因为新目标平台没有像现有平台那样的四个 SLR。

图 72: 移植平台 - 内核布局

Static Region (Shell)

Memory Bank 3

SLR3

Memory Bank 2

SLR2

Memory Bank 1

SLR1

Memory Bank 0

SLR0

Static Region (Shell)

Memory Bank 2

SLR2

Memory Bank 1

SLR1

Memory Bank 0

SLR0

kernel_D

kernel_C

kernel_B

kernel_A

kernel_D

kernel_C

kernel_B

kernel_A

X

X

X22084-120418

移植到新平台时,您需要执行以下操作:• 了解新目标平台的每个 SLR 中可用的资源,如 《SDAccel 环境版本说明、安装和许可指南》 (UG1238) 所述。• 了解设计中每个内核所需的资源。• 使用 xocc 连接器选项(--slr 和 --sp)指定每个内核所在的 SLR 以及每个内核连接的 DDR bank。本章节的其余部分将介绍这些项目。

附录 E: 移植到新的目标平台

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 123

Send Feedback

Page 124: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

确定内核的放置位置要确定放置内核的位置,需要两条信息:• 硬件平台的 shell 的每个 SLR 中可用的资源 (.dsa)。• 每个内核所需的资源。通过这两条信息,您将确定可以在 shell 的每个 SLR 中放置哪些内核。请记住,在执行这些计算时,系统基础结构可以使用 10% 的可用资源:• 如果必须跨 SLR 边界,则可以使用基础结构逻辑将内核连接到 DDR 接口。• 在 FPGA 中,资源也用于信号路由。永远不可能在 FPGA 中使用 100% 的所有可用资源,因为信号路由也需要资源。

可用的 SLR 资源赛灵思提供的每个 SLR 中可用的资源可以在《SDAccel 环境版本说明、安装和许可指南》 (UG1238) 中找到。下图所示的即为 shell 示例。在此示例中,您可以看到:• SLR 描述指出哪个 SLR 包含静态和/或动态区域。• 列出了每个 SLR 中可用的资源(LUT、寄存器、RAM 等)。这允许您确定每个 SLR 中可用的资源。表 19: 硬件平台的 SLR 资源

应用范围 SLR 0 SLR 1 SLR 2

SLR 描述 器件底部;专属于动态区域。 器件中间;由动态和静态区域资源共享。 器件顶部;专属于动态区域。

动态区域 Pblock名称 pfa_top_i_dynamic_region_pblock_dynamic_SLR0

pfa_top_i_dynamic_region_pblock_dynamic_SLR1

pfa_top_i_dynamic_region_pblock_dynamic_SLR2

计算单元布局语法 set_propertyCONFIG.SLR_ASSIGNMENTSSLR0[get_bd_cells<cu_name>]

set_propertyCONFIG.SLR_ASSIGNMENTSSLR1[get_bd_cells<cu_name>]

set_propertyCONFIG.SLR_ASSIGNMENTSSLR2[get_bd_cells<cu_name>]

动态区域中可用的全局存储器资源存储器通道;系统端口名称 bank0 (16 GB DDR4) bank1(16 GB DDR4,位于静态区域)

bank2(16 GB DDR4,位于动态区域)

bank3 (16 GB DDR4)

动态区域中的近似可用结构资源CLB LUT 388K 199K 388K

CLB 寄存器 776K 399K 776K

块 RAM 块 720 420 720

UltraRAM 320 160 320

DSP 2280 1320 2280

内核资源每个内核可从“System Estimate”报告中获得资源。

附录 E: 移植到新的目标平台

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 124

Send Feedback

Page 125: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

完成硬件仿真或系统运行后,“System Estimate”即可在“Assistant”视图中可用。此报告的示例如下所示。图 73: 系统估算报告

• FF 是指每个 SLR 的平台资源中记录的 CLB 寄存器。• LUT 指的是每个 SLR 的平台资源中记录的 CLB LUT。• DSP 指的是每个 SLR 的平台资源中记录的 DSP。• BRAM 是指每个 SLR 的平台资源中记录的块 RAM 片。此信息可帮助您确定每个内核的正确 SLR 分配。

将内核分配给 SLR可以使用 xocc --slr 命令行选项将设计中的每个内核分配到 SLR 区域以指定布局文件。放置内核时,建议还使用xocc --sp 命令行选项分配内核将连接的特定 DDR 存储器 bank 。可以使用示例来演示这两个命令行选项。在下图显示的示例中,现有目标平台 shell 具有四个 SLR,新目标平台具有包含三个 SLR 的 shell,并且静态区域在目标平台之间的结构也不同。在此移植示例中:• Kernel_A 映射到 SLR0。• 不再适合 SLR1 的 Kernel_B 被重新映射到 SLR0,其中有可用资源。• Kernel_C 映射到 SLR2。• Kernel_D 被重新映射到 SLR2,其中有可用资源。内核映射如下图所示。

附录 E: 移植到新的目标平台

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 125

Send Feedback

Page 126: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

图 74: 跨 SLR 的内核映射

Static Region (Shell)

Memory Bank 3

SLR3

Memory Bank 2

SLR2

Memory Bank 1

SLR1

Memory Bank 0

SLR0

Static Region (Shell)

Memory Bank 2

SLR2

Memory Bank 1

SLR1

Memory Bank 0

SLR0

kernel_D

kernel_C

kernel_B

kernel_A

kernel_D

kernel_C

kernel_B

kernel_A

X22085-120418

指定内核布局对于上面的示例,使用以下 xocc 命令选项放置内核。xocc --slr kernel_A:SLR0 \ --slr kernel_B:SLR0 \ --slr kernel_C:SLR2 \ --slr kernel_D:SLR2

使用这些命令行选项可放置每个内核,如上图所示。

指定内核 DDR 接口在指定内核布局时,还应指定内核 DDR 存储器接口。指定 DDR 接口可确保在不同 SLR 中自动连接流水线化到 DDR接口的连接。这确保了时序不会降级,时序降级会降低最大时钟频率。在此示例中,使用上图中的内核布局:• Kernel_A 连接到存储器 bank 0。

附录 E: 移植到新的目标平台

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 126

Send Feedback

Page 127: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

• Kernel_B 连接到存储器 bank 1。• Kernel_C 连接到存储器 bank 2。• Kernel_D 连接到存储器 bank 1。以下 xocc 命令行执行这些连接:xocc --sp kernel_A.arg1:bank0 \ --sp kernel_B.arg1:bank1 \ --sp kernel_C.arg1:bank2 \ --sp kernel_D.arg1:bank1

重要提示! 使用 --sp 选项将内核端口分配给存储器 bank 时,必须为内核的所有接口/端口指定 --sp 选项。如需了解更多信息,请参阅 《SDAccel 环境编程指南》 (UG1277) 中的“定制 DDR Bank 内核连接”。

解决时序执行系统运行,如果完成且没有违规,则移植成功。如果未满足时序,则可能需要指定一些定制约束以帮助满足时序要求。如需了解有关满足时序的信息,请参阅《UltraFAST 设计方法指南(适用于 Vivado Design Suite)》 (UG949)。

定制约束使用定制布局和时序约束的 xocc -xp 选项将定制约束传递给 Vivado® 工具。需要在新目标平台 (.dsa) 的上下文中查看用于内核布局规划的定制 Tcl 约束。例如,如果将内核移动到新 shell 中的其他 SLR,还需要修改该内核的相应布局约束。通常,预计在基于 9P Virtex UltraScale 器件的不同目标平台之间的时序是可比较的。需要对时序收敛的任何定制 Tcl约束进行评估,并且可能需要针对新平台进行修改。此外,需要为此新 shell 更新任何传递给 xocc 或使用 xocc --xp 开关的 Vivado 工具的非默认选项。

时序收敛的考虑因素在跨 SDx™ 版本或 shell 移动时,设计性能和时序收敛可能会有所不同,尤其是在满足下列条件之一时:• 需要布局规划约束来收敛时序。• 器件或 SLR 资源利用率高于典型指导:

○ LUT 利用率高于 70%

○ DSP、RAMB 和 UltraRAM 利用率高于 80%

○ FD 利用率高于 50%

• 需要大工作量编译策略来收敛时序。利用率指南提供了一个阈值,高于该阈值,设计的编译可能需要更长时间,或者性能可能低于最初估计。对于通常需要使用多个 SLR 的较大设计,请在 xocc 命令行上指定内核/ DDR 关联,同时验证任何布局规划约束确保符合以下内容:

附录 E: 移植到新的目标平台

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 127

Send Feedback

Page 128: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

• 每个 SLR 的使用率低于建议指导。• 如果一种类型的硬件资源需要高于指导标准,则在 SLR 之间平衡利用率。对于具有整体高利用率的设计,以更高的时延为代价增加内核中的流水线处理量可以极大帮助实现时序收敛并实现更高的性能。要快速查看上面列出的所有方面,请在使用以下两个选项之一时,在整个 SDx 流使用快速失败报告:• xocc –R 1

○ report_failfast 在每个内核综合步骤结束时运行○ report_fafailst 在整个设计的 opt_design 之后运行○ opt_design DCP 已保存

• xocc –R 2○ 与带 -R 1 相同的报告,以及:○ report_failfast 是每个 SLR 的后置布局○ 生成其他报告和中间 DCP

所有报告和 DCP 都可以在实现目录中找到,包括内核综合报告:<runDir>/_x/link/vivado/prj/prj.runs/impl_1

如需了解更多有关时序收敛和快速失败报告的信息,请参阅《UltraFast 设计方法学时序收敛快捷参考指南》(UG1292)。

附录 E: 移植到新的目标平台

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 128

Send Feedback

Page 129: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

附录 F

私有调试网络的 JTAG 回读由于开发板物理 JTAG 连接器的典型不可访问性,数据中心环境中的 RTL 内核和平台调试通常使用 XVC-over-PCIe® 连接。尽管 XVC-over-PCIe 允许您远程调试系统,某些调试方案(如 AXI 互连系统挂起)可能会阻止您访问依赖于这些PCIe/AXI 功能的设计调试功能。能够调试这些场景对于平台设计师来说尤其重要。JTAG 回读功能旨在提供对以前只能通过 XVC-over-PCIe 访问的调试网络的访问。JTAG 回读功能无需在平台设计中更改基于 XVC-over-PCIe 的调试网络即可启用。在主机端,当 Vivado® 用户通过 hw_server 连接到被测器件 (DUT) 的物理 JTAG 插脚的 JTAG 电缆时,hw_server禁用 XVC-over-PCIe 到 DUT 的路径。当您断开与 JTAG 电缆的连接时,hw_server 会重新启用 XVC-overPCIe 到 DUT的路径。

JTAG 回读步骤以下是启用 JTAG 回读所需的步骤:1. 启用调试网络的“Debug Bridge”(AXI 到 BSCAN 模式)主控制器的 JTAG 回读功能,该调试网络为您要为其提

供 JTAG 访问的网络。此步骤在此“Debug Bridge”实例上启用 BSCAN 从接口。2. 在平台设计的静态逻辑分区中实例化另一个“Debug Bridge”(BSCAN Primitive 模式)。3. 将步骤 2 的“Debug Bridge”的 BSCAN 主端口(BSCAN 原语模式)连接到步骤 1 的“Debug Bridge”的

BSCAN 从接口(AXI-to-BSCAN 模式)。

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 129

Send Feedback

Page 130: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

附录 G

附加资源与法律提示

赛灵思资源如需了解答复记录、技术文档、下载以及论坛等支持性资源,请参阅赛灵思技术支持。

Documentation Navigator 与设计中心赛灵思 Documentation Navigator (DocNav) 提供了访问赛灵思文档、视频和支持资源的渠道,您可以在其中筛选搜索信息。DocNav 使用 SDSoC™ 和 SDAccel™ 开发环境安装。打开 DocNav 的方法:• 在 Windows 中,单击“Start → All Programs → Xilinx Design Tools → DocNav”。• 在 Linux 命令提示中输入“docnav”。赛灵思设计中心提供了根据设计任务和其他话题整理的文档链接,您可以使用链接了解关键概念以及常见问题解答。访问设计中心:• 在 DocNav 中,单击“Design Hub View”标签。• 在赛灵思网站上,查看设计中心页面。注释: 如需了解更多有关 DocNav 的信息,请参阅赛灵思网站上的 Documentation Navigotor。

参考资料1. 《SDAccel 环境版本说明、安装和许可指南》 (UG1238)

2. 《SDAccel 环境剖析和最优化指南》 (UG1207)

3. 《SDAccel 环境入门教程》 (UG1021)

4. SDAccel™ 开发环境网页5. Vivado® Design Suite 文档6. 《Vivado Design Suite 用户指南:采用 IP 集成器设计 IP 子系统》 (UG994)

7. 《Vivado Design Suite 用户指南:创建和封装定制 IP》 (UG1118)

8. 《Vivado Design Suite 用户指南:部分重配置》 (UG909)

附录 G: 附加资源与法律提示

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 130

Send Feedback

Page 131: 条款 SDAccel 中英文版本如有歧义 环境用户指南 - …...SDAccel 环境用户指南 UG1023 (v2019.1) 2019 年 5 月 22 日 条款中英文版本如有歧义,概以英文本为准。修订历史

9. 《Vivado Design Suite 用户指南:高层次综合》 (UG902)

10. 《UltraFAST 设计方法指南(适用于 Vivado Design Suite)》 (UG949)

11. 《Vivado Design Suite 属性参考指南》 (UG912)

12. Khronos Group 网页:OpenCL 的文档13. 赛灵思 Virtex® UltraScale+™ FPGA VCU1525 加速开发套件14. 赛灵思 Kintex® UltraScale™ FPGA KCU1500 加速开发套件15. 赛灵思 Alveo™ 网页

请阅读:重要法律提示本文向贵司/您所提供的信息(下称“资料”)仅在对赛灵思产品进行选择和使用时参考。在适用法律允许的最大范围内:(1)资料均按“现状”提供,且不保证不存在任何瑕疵,赛灵思在此声明对资料及其状况不作任何保证或担保,无论是明示、暗示还是法定的保证,包括但不限于对适销性、非侵权性或任何特定用途的适用性的保证;且(2)赛灵思对任何因资料发生的或与资料有关的(含对资料的使用)任何损失或赔偿(包括任何直接、间接、特殊、附带或连带损失或赔偿,如数据、利润、商誉的损失或任何因第三方行为造成的任何类型的损失或赔偿),均不承担责任,不论该等损失或者赔偿是何种类或性质,也不论是基于合同、侵权、过失或是其他责任认定原理,即便该损失或赔偿可以合理预见或赛灵思事前被告知有发生该损失或赔偿的可能。赛灵思无义务纠正资料中包含的任何错误,也无义务对资料或产品说明书发生的更新进行通知。未经赛灵思公司的事先书面许可,贵司/您不得复制、修改、分发或公开展示本资料。部分产品受赛灵思有限保证条款的约束,请参阅赛灵思销售条款:https://china.xilinx.com/legal.htm#tos;IP 核可能受赛灵思向贵司/您签发的许可证中所包含的保证与支持条款的约束。赛灵思产品并非为故障安全保护目的而设计,也不具备此故障安全保护功能,不能用于任何需要专门故障安全保护性能的用途。如果把赛灵思产品应用于此类特殊用途,贵司/您将自行承担风险和责任。请参阅赛灵思销售条款:https://china.xilinx.com/legal.htm#tos。

关于与汽车相关用途的免责声明如将汽车产品(部件编号中含“XA”字样)用于部署安全气囊或用于影响车辆控制的应用(“安全应用”),除非有符合 ISO 26262 汽车安全标准的安全概念或冗余特性(“安全设计”),否则不在质保范围内。客户应在使用或分销任何包含产品的系统之前为了安全的目的全面地测试此类系统。在未采用安全设计的条件下将产品用于安全应用的所有风险,由客户自行承担,并且仅在适用的法律法规对产品责任另有规定的情况下,适用该等法律法规的规定。

商标© Copyright 2015-2019 赛灵思公司版权所有。Xilinx、赛灵思标识、Alveo、Artix、Kintex、Spartan、Versal、Virtex、Vivado、Zynq 本文提到的其它指定品牌均为赛灵思在美国及其它国家的商标。 “OpenCL”和“OpenCL”标识均为 Apple Inc.的商标,经 Khronos 许可后方能使用。 “HDMI”、“HDMI”标识以及“High Defin itionMultimedia Interface”为 HDMI Licensing LLC 拥有的商标。 “AMBA”、“AMBA Designer”、“Arm”、“ARM1176JZ-SV”、“CoreSight”、“Cortex”、“PrimeCell”、“Mali”和“MPCore”为 Arm Limited 在欧盟及其它国家的注册商标。 所有其它商标均为各自所有方所属财产。

附录 G: 附加资源与法律提示

UG1023 (v2019.1) 2019 年 5 月 22 日 china.xilinx.comSDAccel 环境用户指南 131

Send Feedback