面向 OpenCL™ 的英特尔® FPGA - 支持中心

欢迎访问 OpenCL™ BSP 支持页面!在这里您会了解有关如何规划、设计和实施 OpenCL™ BSP 的信息,以及一些调试技巧和建议。

本页面将从头至尾为您介绍开发 OpenCL™ 主板支持包 (BSP)(或设计/迁移 OpenCL 内核/算法)的整个过程。“修改参考设计”章节将提供关于如何将英特尔® 参考平台修改成自定义平台,以及如何在不出现时序故障的情况下编译扁平设计的资源。“平面布局”章节将提供关于如何为设计分区,以及如何达到最大运行频率的指南。“时序收敛”章节将提供一些有关设计的时序收敛,以及在根据 BSP 编译任何内核期间都有保证时序收敛的技巧。“测试硬件”章节将提供关于如何在主板上测试设计,以及验证结果的步骤。

“调试”章节将提供关于问题调试的工具和资源。所有章节中列出的文档和培训课程将为您的 BSP 开发流程提供很大的帮助。

面向 OpenCL™ 的英特尔® FPGA SDK 可支持软件开发人员提升其应用程序在使用英特尔® CPU 和 FPGA 构建的异构平台上的运行速度。您还可以单独从 Quartus® 软件中下载面向 OpenCL™ 的英特尔® FPGA SDK。

如欲开始开发 BSP,请务必执行以下步骤:

  1. 确保面向 OpenCL™ 的英特尔® FPGA SDK 和英特尔® Quartus® 软件已安装。
  2. 验证支持匹配 OpenCL™ 参考 BSP 的工具版本。
  3. 确认可访问完整的英特尔® Quartus® 软件许可证。

选择适合您的自定义平台的参考设计

英特尔支持可用于以下平台的 OpenCL™ 参考 BSP 设计。您还可以查看针对特定平台的 OpenCL™ BSP 移植指南:

按照 OpenCL BSP 移植指南中的步骤,开始为您的平台修改参考设计。建议在完成设计更改后,尝试编译第一个内核。我们通常使用名为“Boardtest”的内核,它可测试 BSP 的不同接口。  以下指南介绍了关于 Boardtest 和通用 BSP 构建步骤的信息:

面向 OpenCL™ 的英特尔® FPGA SDK 定制平台工具套件用户指南 (PDF)

构建 BSP 时建议采取以下步骤:

  1. 在“扁平”流程中编译 Boardtest,以生成时序收敛的 “.aocx” 文件
  2. 通过运行 Boardtest 验证 “.aocx”,并通过测试反复核对接口带宽期望值
  3. 开始进行关于“基础”构建的平面布局,以创建保证时序收敛的 OpenCL BSP

在 OpenCL 中,我们需要处理两个不同版本(扁平版和基础版)项目的时序。扁平版项目指没有任何分区或逻辑锁区域,而使用 hardware/flat.qsf 文件来实施的项目。基础版项目指包含分区和逻辑锁,并使用 hardware/base.qsf 文件来实施的项目。我们建议开始时首先获取时序清晰的扁平版,之后再进行平面布局,以得到时序清晰的基础版设计。 

更多关于编译流程的详细信息,请参阅《面向 OpenCL™ 的英特尔® FPGA SDK 主板支持包平面布局优化指南》中的“OpenCL™ 编译流程”一节。

从扁平编译开始了解如何妥善放置 BSP 的全部主要组件(尤其是知识产权 (IP) 块以及 I/O 连接,例如 PCIe* 或 DDR 内存)。

如欲获取更多指导原则,请参阅《面向 OpenCL™ 的英特尔® FPGA SDK 主板支持包平面布局优化指南》中的“OpenCL™ BSP 平面布局指南”一节。

详情请参阅《英特尔® Quartus® Prime 标准版手册》卷 1 中的“部分重配置设计布局”章节。

在基础编译过程中,首先从内核上包含freeze_wrapper_inst|kernel_system_inst 的逻辑锁区域开始。使用扁平编译和芯片规划工具确定 BSP 硬件的大小和位置。尝试使用逻辑锁区域保留更多 kernel_system 资源。

如欲获取更多指导原则,请参阅《面向 OpenCL™ 的英特尔® FPGA SDK 主板支持包平面布局优化指南》中的“OpenCL™ BSP 平面布局指南”一节。

如欲解决设计中的时序混乱问题,可能需要在 IP 核之间添加通道阶段。

更多指导原则请参考以下链接:

输出目录中的 .failing_paths.rpt 和 .failing_clocks.rpt 列举了设计中可能出现的主要故障。如果几条路径中一直出现某个故障,您可能想在 /hardware/top.sdc 文件中针对某条关键路径设置最小或最大延时限制。

相关问题请参阅知识库页面的变通方法 — Arria 10 中出现保留和设置混乱时如何收敛时序?

MMD 软件库实施主机和加速主板之间的基本输入/输出 (I/O),并提供各种接口,比如打开、读取和写入。MMD 库驱动程序以 Windows* 64 或 Linux* 64 的格式保存,且源代码保存在源文件夹中。

更多信息请参阅《面向 OpenCL™ 的英特尔® FPGA SDK 定制平台工具套件用户指南》中的“创建 MMD 库”一节。

OpenCL™ 实用程序支持您使用面向 OpenCL™ 的英特尔® FPGA SDK 执行主板访问。  具体包括 aocl 安装、aocl 卸载、 aocl 诊断、aocl 编程和 aocl 闪存。

更多信息请参阅《面向 OpenCL™ 的英特尔® FPGA SDK 定制平台工具套件用户指南》中的“提供面向 OpenCL™ 的英特尔® FPGA SDK 实用程序支持”一节。

创建软件实用程序和 MMD 层之后,需要测试硬件设计。标准方法是生成板测内核并在开发板上运行。

更多信息请参阅《面向 OpenCL™ 的英特尔® FPGA SDK 定制平台工具套件用户指南》中的“测试硬件设计”一节。

这一节将帮助您在调配英特尔® FPGA 开发套件或定制主板时排除故障。

如欲了解单板调配过程中可能遇到的已知问题,请参阅 AN 807:面向 OpenCL™ 的英特尔® FPGA SDK 配置英特尔® Arria® 10 GX FPGA 开发套件应用注释中的以下章节:

如欲获取关于使用静态逻辑的最小区域并为 OpenCL™ 内核留出更多空间的提示与技巧,可参阅 AN 824:面向 OpenCL™ 的英特尔® FPGA SDK 主板支持包平面布局优化指南

运行托管应用期间,部分环境变量可进行设置以获取更多调试信息。这些环境变量特定于面向 OpenCL™ 的英特尔® FPGA SDK,可帮助诊断定制平台设计中的问题。

下表列出并详细描述了这些环境变量。

环境变量 描述
ACL_HAL_DEBUG 在 1-5 之间设置该变量的值,可增加来自硬件抽象层 (HAL) 的调试输出,它可与 MMD 层直接通信。
ACL_PCIE_DEBUG 在 1-10000 之间设置该变量的值,可增加来自 MMD 的调试输出。该变量设置可用于确认版本 ID 寄存组是否读取准确,以及 UniPHY IP 核是否经过校准。
ACL_PCIE_JTAG_CABLE 设置该变量可覆写指定线缆编号的默认 quartus_pgm 参数。默认为线缆 1。如果有多条英特尔® FPGA 下载线缆,您可以通过设置该变量来指定某条特定的线缆。
ACL_PCIE_JTAG_DEVICE_INDEX 设置该变量可覆写指定 FPGA 设备索引号的默认 quartus_pgm 参数。默认情况下该变量的值为 1。如果 FPGA 不是 JTAG 链中的第 1 台设备,您可以自定义该值。
ACL_PCIE_USE_JTAG_PROGRAMMING 设置该变量可迫使 MMD 使用 JTAG 线缆(而非部分重配置)对 FPGA 重新编程。
ACL_PCIE_DMA_USE_MSI 如果想使用 MSI 在 Windows* 上实现直接内存存取传输,您可以设置该变量。
CL_CONTEXT_COMPILER_MODE_INTELFPGA 该变量可保持未设置状态,也可设置为 3。如有需要,OpenCL™ 主机运行时对 FPGA 重新编程,初始化期间至少进行一次。如欲放置托管应用对 FPGA 进行编程,可将该变量的值设为 3。

由于 OpenCL™ 设计不支持仿真特性,因此最佳方法是使用 Signal Tap 逻辑分析器来对这些设计进行调试。

如欲调试出现内核宕机、内存接口问题或 aocl 诊断故障的设计,建议使用 Signal Tap 逻辑分析器。

如欲了解更多关于 Signal Tap 逻辑分析器的信息,请参阅《英特尔® Quartus® Prime 专业版手册》卷 3 的“使用 Signal Tap 逻辑分析器进行设计调试”一节。

执行以下步骤将 Signal Tap 文件添加至 BSP 设计:

  1. 打开 Signal Tap GUI 以及所有待分析的信号。
  2. 将 STP 文件保存在与英特尔® Quartus® 软件项目文件相同的目录中。
  3. 将以下命令行添加至您的 flat.qsf 之中:

o    set_global_assignment -name ENABLE_SIGNALTAP ON

o    set_global_assignment -name USE_SIGNALTAP_FILE <file_name>.stp

o    set_global_assignment -name SIGNALTAP_FILE <file_name>.stp

     4. 通过 AOCL 命令行重新编译内核。

标题 描述
OpenCL™ 入门第 1 部分 该视频主要介绍两个线程的流程,用于使用在 Windows* 设备的的 Cyclone® V SoC 上运行两款应用:OpenCL™ HelloWorld and OpenCL™ 快速傅立叶变换 (FFT)。
OpenCL™ 入门第 2 部分 该视频主要介绍两个线程的流程,用于使用在 Windows* 设备的的 Cyclone® V SoC 上运行两款应用:OpenCL™ HelloWorld and OpenCL™ (FFT)。
OpenCL™ 入门第 3 部分 该视频主要介绍两个线程的流程,用于使用在 Windows* 设备的的 Cyclone® V SoC 上运行两款应用:OpenCL™ HelloWorld and OpenCL™ (FFT)。
OpenCL™ 入门第 4 部分 该视频主要介绍两个线程的流程,用于使用在 Windows* 设备的的 Cyclone® V SoC 上运行两款应用:OpenCL™ HelloWorld and OpenCL™ (FFT)。
OpenCL™ 入门第 5 部分 该视频主要介绍两个线程的流程,用于使用在 Windows* 设备的的 Cyclone® V SoC 上运行两款应用:OpenCL™ HelloWorld and OpenCL™ (FFT)。
如何以 OpenCL™ 库的形式封装自定义 Verilog 模块/设计 该视频探讨了客户为何可能使用该特性在 OpenCL™ 内核代码中包含其自定义处理模块 (RTL)。该视频还解释了生成文件、配置文件等设计示例,并阐述了编译流程。该视频还展示了设计示例的演示。
Altera® SoC FPGA(Linux 主机)上的 OpenCL™ – 第 1 部分 – 工具下载和设置 该视频介绍了如何面向 Altera® SoC FPGA 下载、安装和配置开发 OpenCL™ 内核和主机代码时所需的工具。
Altera® SoC FPGA(Linux 主机)上的 OpenCL™ – 第 2 部分 – 基于仿真器运行矢量加法示例 该视频介绍了如何面向在 Altera® OpenCL™ 中构建的仿真器下载和编译示例 OpenCL™ 应用。
Altera® SoC FPGA(Linux 主机)上的 OpenCL™ – 第 2 部分 – 基于仿真器运行矢量加法示例 该视频介绍了如何面向 FPGA 和 Cyclone® V SoC FPGA 的处理器编译 OpenCL™ 内核和主机代码。
Altera® SoC FPGA(Linux 主机)上的 OpenCL™ – 第 4 部分 – 设置运行时环境 该视频介绍如何设置 Cyclone® V SoC 主板,以运行 OpenCL™ 示例并在主板上执行主机代码和内核。

英特尔建议您联系以下经过认证的服务提供商,以帮助您开发面向英特尔® FPGA 主板的 OpenCL™ 主板支持包。这些提供商在开发高质量 OpenCL 主板支持包、驱动程序以及英特尔 FPGA 主板的设计迁移方面拥有丰富的经验:

Terasic Inc

REFLEX CES

其他技术

OpenCL和OpenCL徽标是由Khronos许可使用的Apple Inc.的商标。