OpenCL™ - BSP - 支持中心

英特尔® FPGA SDK for OpenCL™ 支持软件开发人员在采用英特尔 CPU 和 FPGA 的异构平台上提升其应用程序的速度。英特尔® FPGA SDK for OpenCL™ 可作为英特尔® Quartus® Prime 软件的一部分或作为独立软件包进行安装。您可以通过以下链接下载英特尔 FPGA SDK for OpenCL。

下载面向 OpenCL™ 的英特尔® FPGA SDK

欢迎访问 OpenCL™ BSP 支持页面!您将在这里找到有关如何规划、设计和实施 OpenCL™ BSP 的信息,并了解一些提示和技巧以进行调试。

您可以通过此页面逐步了解从开始开发 OpenCL™ 板级支持包 (BSP)(或设计/迁移 OpenCL 内核/算法)直至结束的整个流程。在“修改参考设计”部分中,您将找到有关如何将英特尔® 参考平台修改为自己的自定义平台以及如何在不出现时序故障的情况下编译扁平设计的资源。“平面布局和时序收敛”部分提供了有关如何对设计进行分区以及如何实现最高工作频率的指导信息。该部分还介绍了在设计中收敛时序以及在构建 BSP 的过程中可保证时序收敛的技巧。“MMD 和 OpenCL 实用程序”部分提供了用于重新构建 MMD 的步骤,同时提供了有关 OpenCL 实用程序的详细信息。“调试”部分为您提供了用于对可能遇到的问题进行调试的一些工具和资源。各部分中均列出了文档和培训课程,这些文档和课程在 BSP 开发过程中将很有帮助。

1. 修改参考设计

入门

要开始 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

2. 平面布局和时序收敛

入门

在 OpenCL 中,我们需要处理项目的两个不同修订版(扁平版和基础版)的时序。扁平修订版是不含分区或逻辑锁区域的修订版,并采用 hardware/flat.qsf 文件进行实施。而基础修订版是含有分区和逻辑锁的修订版,并采用 hardware/base.qsf 文件进行实施。我们建议开始时最好获取一个时序清零的扁平修订版,然后进行平面布局,获得一个时序清零的基本版设计。

欲了解有关编译流程的详情,请参阅《面向 OpenCL™ 的英特尔® FPGA SDK 板级支持包平面布局优化指南》中的 OpenCL™ BSP 编译流程章节。

平面布局分区

首先进行扁平编译,了解 BSP 所有主要组件的自然放置位置(尤其是带有 I/O 连接的知识产权 (IP) 模块,如 PCIe* 或 DDR 内存)。

有关此内容的更多指南,请参阅《面向 OpenCL™ 的英特尔® FPGA SDK 板级支持包平面布局优化指南》中的 OpenCL™ BSP 平面布局指南章节。

欲了解详情,还可以参阅《部分重配置用户指南》

修改 PR 区域

基础编译期间,首先对包含 freeze_wrapper_inst|kernel_system_inst 的内核上的逻辑锁区域进行编译。使用扁平编译和 Chip Planner 确定 BSP 硬件的大小和位置。通过使用逻辑锁区域,尝试保留 kernel_system 的更多资源。

有关此内容的更多指南,请参阅《面向 OpenCL™ 的英特尔® FPGA SDK 板级支持包平面布局优化指南》中的 OpenCL™ BSP 平面布局指南章节。

修复时序违规

要修复设计中的时序违规,您可能需要在 IP 内核之间添加管线级数。

欲获取更多指南,请参阅以下链接:

设置/保留约束

输出目录中的 .failing_paths.rpt 和 .failing_clocks.rpt 列出了设计中的主要故障。如果某些路径中始终出现某一故障,您可能需要为 /hardware/top.sdc 文件中的关键路径设置一个最小或最大延迟约束。

遇到相关问题,您可以参阅“知识数据库”页面上的以下变通方法 - 在 Arria 10 中如何收敛时序以对抗保持时间和建立时间违规?

3. MMD 和 OpenCL™ 实用程序

MMD 源开发或修改

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 层后,需要测试硬件设计。标准方法是生成 Boardtest 内核并在板上运行。

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

4. 调试

单板调配

这一节将帮助您在调配英特尔® 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 链中的第一台设备,您可以自定义该值。

ACL_PCIE_USE_JTAG_PROGRAMMING

设置该变量可迫使 MMD 使用 JTAG 线缆(而非部分重配置)对 FPGA 重新编程。

ACL_PCIE_DMA_USE_MSI

如果想使用 MSI 在 Windows* 上实现直接内存存取传输,您可以设置该变量。

Signal Tap 调试

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

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

如欲了解有关 Signal Tap 逻辑分析器的更多信息,请参阅《调试工具用户指南》中的使用 Signal Tap 逻辑分析器进行设计调试章节。

执行以下步骤,将 Signal Tap 文件添加到 BSP 设计中

1. 打开 Signal Tap GUI 并添加所有待分析的信号。

2. 将 STP 文件保存在与英特尔® Quartus® 软件项目文件相同的目录中。

3. 将以下命令行添加至您的 flat.qsf 中:

  • set_global_assignment -name ENABLE_SIGNALTAP ON
  • set_global_assignment -name USE_SIGNALTAP_FILE <file_name>.stp
  • set_global_assignment -name SIGNALTAP_FILE <file_name>.stp

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

已知问题

5. 推荐读物和培训

OpenCL™ 视频

标题

描述

OpenCL™ 入门第 1 部分

该视频描述了使用 Windows* 设备在 Cyclone® V SoC 上运行两个应用(OpenCL™ HelloWorld 和 OpenCL™ 快速傅立叶变换 (FFT))的即用程序。

OpenCL™ 入门第 2 部分

该视频描述了使用 Windows* 设备在 Cyclone® V SoC 上运行两个应用(OpenCL™ HelloWorld 和 OpenCL™ FFT)的即用程序。

OpenCL 入门第 3 部分

该视频描述了使用 Windows* 设备在 Cyclone® V SoC 上运行两个应用(OpenCL™ HelloWorld 和 OpenCL™ FFT)的即用程序。

OpenCL 入门第 4 部分

该视频描述了使用 Windows* 设备在 Cyclone® V SoC 上运行两个应用(OpenCL™ HelloWorld 和 OpenCL™ FFT)的即用程序。

OpenCL 入门第 5 部分

该视频描述了使用 Windows* 设备在 Cyclone® V SoC 上运行两个应用(OpenCL™ HelloWorld 和 OpenCL™ FFT)的即用程序。

如何以 OpenCL™ 库的形式封装自定义 Verilog 模块/设计

该视频探讨了客户为什么有可能使用该特性将自定义处理模块 (RTL) 置于 OpenCL 内核代码中。该视频还解释了生成文件、配置文件等设计示例,并阐述了编译流程。该视频还展示了设计示例的演示。

英特尔 FPGA 和 SoC FPGA(Linux 主机)上的 OpenCL™ - 第 1 部分 - 工具下载和安装

该视频向您展示了如何下载、安装和配置必要工具,以开发针对英特尔 FPGA 和 SoC FPGA 的 OpenCL™ 内核和主机代码。

英特尔 FPGA 和 SoC FPGA(Linux 主机)上的 OpenCL™ - 第 2 部分 - 基于仿真器运行矢量加法示例

该视频向您展示了如何下载和编译针对英特尔 FPGA OpenCL™ 内置仿真器的 OpenCL™ 应用示例。

英特尔 FPGA 和 SoC FPGA(Linux 主机)上的 OpenCL™ - 第 3 部分 - SoC FPGA 的内核和主机代码编译

该视频向您展示了如何编译针对 FPGA 和 Cyclone V SoC FPGA 处理器的内核和主机代码。

英特尔 FPGA 和 SoC FPGA(Linux 主机)上的 OpenCL™ - 第 4 部分 - 运行时环境的设置

该视频向您展示了如何设置 Cyclone® V SoC 主板,以运行 OpenCL™ 示例并在主板上执行主机代码和内核。

6. 获取帮助

OpenCL 认证服务提供商

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

Terasic Inc

OpenCL 和 OpenCL 标识是苹果公司的商标,需获得 Khronos 的许可方能使用。