英特尔 - 徽标用于 OpenCL 的 FPGA SDK
用户指南

UG-OCL009
2017.05.08
英特尔® Quartus® Prime 设计套件的最新更新:17.0

RENPHO RF FM059HS WiFi 智能足部按摩器 - 图标 5订阅
SAMSUNG SM A136UZKZAIO Galaxy A13 5G 智能手机 - 图标 12发送反馈

面向 OpenCL™ 英特尔® Cyclone®V SoC 开发套件参考平台移植指南的英特尔® FPGA SDK

V SoC 开发套件参考平台移植指南描述了英特尔 Cyclone V SoC 开发套件参考平台 (c5soc) 的硬件和软件设计,用于与面向 OpenCL 的英特尔软件开发套件 (SDK) 一起使用 面向 OpenCL ™ 的英特尔® FPGA SDK 英特尔 Cyclone ® 。 在开始之前,英特尔强烈建议您熟悉以下文档的内容:

  1. 面向 OpenCL 的英特尔 FPGA SDK英特尔 Cyclone V SoC 入门指南
  2. 面向 OpenCL 定制平台工具包的英特尔 FPGA SDK 用户指南
  3. Cyclone V 器件手册,第 3 卷:硬核处理器系统技术参考手册 另外,请参考 Altera 的 Cyclone V SoC 开发套件和 SoC 嵌入式设计套件页面 web网站了解更多信息。 1 2

注意力: 英特尔假定您深入了解面向 OpenCL 自定义平台工具包的英特尔 FPGA SDK 用户指南。 Cyclone V SoC 开发套件参考平台移植指南没有描述如何使用 SDK 的自定义平台工具包为 Cyclone V SoC 开发套件实现自定义平台。 它仅描述了 Cyclone V SoC 开发套件上的 SDK 支持与用于 OpenCL 自定义平台的通用英特尔 FPGA SDK 之间的差异。

相关链接

  • 面向 OpenCL Cyclone V SoC 的英特尔 FPGA SDK 入门指南
  • 面向 OpenCL 定制平台工具包的英特尔 FPGA SDK 用户指南
  • Cyclone V 器件手册,第 3 卷:硬核处理器系统技术参考手册
  • Altera 上的 Cyclone V SoC 开发套件和 SoC 嵌入式设计套件页面 web地点
  1. OpenCL 和 OpenCL 徽标是 Apple Inc. 的商标,经 Khronos Group™ 许可使用。
  2. 面向 OpenCL 的英特尔 FPGA SDK 基于已发布的 Khronos 规范,并已通过 Khronos 一致性测试流程。 当前的一致性状态可以在以下位置找到 www.khronos.org/conformance.

英特尔公司。 版权所有。 英特尔、英特尔标识、Altera、Arria、Cyclone、Enpirion、MAX、Nios、Quartus 和 Stratix 文字和标识是英特尔公司或其子公司在美国和/或其他国家/地区的商标。 英特尔保证其 FPGA 和半导体产品的性能符合英特尔的标准保证,符合当前规格,但保留随时更改任何产品和服务的权利,恕不另行通知。 除非英特尔明确书面同意,否则英特尔不承担因应用或使用此处描述的任何信息、产品或服务而产生的任何责任或义务。 建议英特尔客户在依赖任何已发布的信息以及下订单购买产品或服务之前获取最新版本的设备规格。
*其他名称和品牌可能是其他所有者的财产。

1.1.1 Cyclone V SoC 开发套件参考平台板变体
面向 OpenCL Cyclone V SoC 开发套件参考平台的英特尔 FPGA SDK 包括两个板变体。

  • c5soc板
    此默认板提供对两个 DDR 内存组的访问。 HPS DDR 可由 FPGA 和 CPU 访问。 FPGA DDR 只能由 FPGA 访问。
  • c5soc_sharedonly 板
    此板变体仅包含 HPS DDR 连接。 FPGA DDR 不可访问。 由于支持一个 DDR 内存条所需的硬件更少,因此该板变体的面积效率更高。 c5soc_sharedonly 板也是用于具有单个 DDR 内存条的最终生产板的良好原型设计平台。
    要在编译 OpenCL 内核时针对此板变体,请在 aoc 命令中包含 -board c5soc_sharedonly 选项。
    有关 –board 的更多信息aoc 命令的选项,请参阅面向 OpenCL 的英特尔 FPGA SDK 编程指南。

相关链接
为特定的 FPGA 板编译内核(–board )
1.1.2 Cyclone V SoC开发套件参考平台内容
Cyclone V SoC 开发套件参考平台包括以下部分 files 和目录:

File 或目录 描述
board_env.xml 可扩展标记语言 (XML) file 将 c5soc 描述为面向 OpenCL 的英特尔 FPGA SDK。
linux_sd_card_image.tgz 压缩的 SD 闪存卡映像 file 其中包含 SDK 用户使用带有 SDK 的 Cyclone V SoC 开发套件所需的一切。
手臂32 包含以下内容的目录:

1.1.3 Cyclone V SoC开发套件相关特性

以下列表重点介绍了与面向 OpenCL 的英特尔 FPGA SDK 相关的 Cyclone V SoC 开发套件组件和特性:

  • 运行 9 位 Linux 的双核 ARM Cortex-A32 CPU。
  • HPS 和 FPGA 内核架构之间的高级可扩展接口 (AXI) 总线。
  • 两个强化的 DDR 内存控制器,每个都连接到一个 1 GB DDR3 SDRAM。
    — 一个 DDR 控制器只能由 FPGA 内核访问(即 FPGA DDR)。
    — 另一个 DDR 控制器可供 HPS 和 FPGA 访问(即 HPS DDR)。 该共享控制器允许在 CPU 和 FPGA 内核之间自由共享内存。
  • CPU 可以重新配置 FPGA 内核架构。

1.1.3.1 Cyclone V SoC 开发套件参考平台设计目标和决策 Intel 将 Cyclone V SoC 开发套件参考平台的实施基于几个设计目标和决策。 英特尔建议您在将此参考平台移植到您的 SoC FPGA 板时考虑这些目标和决策。
以下是 c5soc 的设计目标:

  1. 在 FPGA 内核和 DDR 内存系统之间提供尽可能高的带宽。
  2. 确保 FPGA(即 OpenCL 内核)上的计算不会干扰可能包括服务外围设备的其他 CPU 任务。
  3. 为内核计算而不是接口组件保留尽可能多的 FPGA 资源。

以下是英特尔设计目标的直接结果的高级设计决策:

  1. 参考平台仅使用具有最广泛配置(256 位)的硬核 DDR 内存控制器。
  2. FPGA直接与HPS DDR内存控制器通信,不涉及HPS内部的AXI总线和L3开关。 直接通信为 DDR 提供了尽可能好的带宽,并防止 FPGA 计算干扰 CPU 与其外围设备之间的通信。
  3. 分散-聚集直接内存访问 (SG-DMA) 不是 FPGA 接口逻辑的一部分。 不是在 DDR 内存系统之间传输大量数据,而是将数据存储在共享的 HPS DDR 中。 FPGA 直接访问 CPU 内存比 DMA 更高效。 节省了硬件资源(即FPGA面积),简化了Linux内核驱动。
    警告: 共享 HPS DDR 系统和只能由 FPGA 访问的 DDR 系统之间的内存传输速度非常慢。 如果你选择
    以这种方式传输内存,仅将其用于非常少量的数据。
  4. 主机和设备通过 HPS 到 FPGA (H2F) 桥在彼此之间执行非 DMA 数据传输,仅使用一个 32 位端口。 原因是,没有 DMA,Linux 内核只能发出单个 32 位读或写请求,因此没有必要有更宽的连接。
  5. 主机通过轻型 H2F (LH2F) 桥向设备发送控制信号。
    由于从主机到设备的控制信号是低带宽信号,因此 LH2F 桥非常适合该任务。

1.2 将参考平台移植到您的 SoC FPGA 板上
要将 Cyclone V SoC 开发套件参考平台移植到您的 SoC FPGA 板,请执行以下任务:

  1. 选择一个 DDR 内存或两个 DDR 内存版本的 c5soc 参考平台作为您设计的起点。
  2. 更新 ALTERAOCLSDKROOT/board/c5soc/ 中的引脚位置/top.qsf file,其中 ALTERAOCLSDKROOT 是用于 OpenCL 安装的英特尔 FPGA SDK 的路径,以及是电路板变体的目录名称。 c5soc_sharedonly 目录适用于具有一个 DDR 内存系统的主板变体。 c5soc 目录用于具有两个 DDR 内存系统的电路板变体。
  3.  更新 ALTERAOCLSDKROOT/board/c5soc/ 中 HPS 和/或 FPGA SDRAM 块的 DDR 设置/系统.qsys file.
    4. 所有面向 OpenCL 的英特尔 FPGA SDK 首选板设计必须实现有保证的时序收敛。 因此,设计的布局必须时序清晰。 要将 c5soc 板分区 (acl_iface_partition.qxp) 移植到您的 SoC FPGA 板,请执行以下任务:
    有关修改和保留板分区的详细说明,请参阅 Quartus
    Quartus Prime 标准版手册的分层和基于团队设计章节的 Prime 增量编译。
    一种。 从 ALTERAOCLSDKROOT/board/c5soc/c5soc 目录中删除 acl_iface_partition.qxp。
    b. 通过将 Tcl 命令 set_global_assignment -name LL_ENABLED OFF -section_id acl_iface_region 更改为 set_global_assignment -name LL_ENABLED ON -section_id acl_iface_region 启用 acl_iface_region LogicLock™ 区域
    C。 为您的开发板编译一个 OpenCL 内核。
    d. 如有必要,调整 LogicLock 区域的大小和位置。
    e. 当您对设计的布局时序清洁感到满意时,将该分区导出为 acl_iface_partition.qxp Quartus Prime Exported Partition File.
    如 AIntel FPGA SDK for OpenCL Custom Platform Toolkit User Guide 的 Establishing Guaranteed Timing Flow 部分所述,通过导入此 .qxp  file 在顶层设计中,您满足了为电路板设计提供有保证的时序收敛流程的要求。
    有关可能影响导出分区结果质量 (QoR) 的因素,请参阅 Intel FPGA SDK for OpenCL Custom Platform Toolkit 用户指南中导出板分区的一般结果质量注意事项部分。
    F。 通过将步骤 2 中的命令恢复为 set_global_assignment -name LL_ENABLED OFF section_id acl_iface_region 来禁用 acl_iface_region LogicLock 区域。
  4. 如果您的 SoC FPGA 板使用不同的引脚和 HPS 块外围,请重新生成预加载器和设备树源 (DTS) file. 如果更改 HPS DDR 内存控制器设置,请重新生成预加载程序。
  5. 创建 SD 闪存卡映像。
  6. 创建您的自定义平台,其中包括 SD 闪存卡映像。
  7. 考虑为您的自定义平台创建一个运行时环境版本,以便与面向 OpenCL 的英特尔 FPGA 运行时环境 (RTE) 一起使用。 您的自定义平台的 RTE 版本不包括硬件目录和 SD 闪存卡映像。 该自定义平台加载到 SoC FPGA 系统上以允许主机应用程序运行。 相比之下,自定义平台的 SDK 版本是 SDK 编译 OpenCL 内核所必需的。
    提示:您可以为 RTE 使用自定义平台的 SDK 版本。 保存
    空间,从自定义平台的 RTE 版本中删除 SD 闪存卡映像。
  8. 测试您的自定义平台。
    有关更多信息,请参阅面向 OpenCL 自定义平台工具包用户指南的英特尔 FPGA SDK 的测试硬件设计部分。

相关链接

  • 测试硬件设计
  • 用于分层和基于团队的设计的 Quartus Prime 增量编译
  • 建立有保证的时间流程
  • 导出的板分区的一般结果质量注意事项

1.2.1 更新移植参考平台
在 Cyclone V SoC 开发套件参考平台的当前版本中,HPS 块位于定义所有非内核逻辑的分区内。 但是,您不能将 HPS 作为 .qxp 的一部分导出 file. 要更新您从以前版本的 c5soc 修改的现有自定义平台,请实施 QXP 保存流程,更新 SD 闪存卡映像以获取最新的运行时环境,并更新 board_spec.xml file 启用自动迁移。
用于 OpenCL 版本 14.1 及更高版本的 Altera® SDK 探测 board_spec.xml file 板信息,并实现自动更新。 因为你修改了
通过实施 QXP 保存流程进行设计,您必须更新 board_spec.xml file 到当前版本的格式。 更新 file 允许 SDK 区分未保留的自定义平台和当前基于 QXP 的自定义平台。 有关更多信息,请参阅面向 OpenCL 自定义平台工具包用户指南的英特尔 FPGA SDK 中的前向兼容性自定义平台自动迁移。

  1. 要在从先前版本的 c5soc 移植的 Cyclone V SoC FPGA 硬件设计中实施 QXP 保存流程,请执行以下步骤以创建子分区以从 .qxp 中排除 HPS file:
    一种。 在围绕非内核逻辑创建分区之前,在 .qsf Quartus Prime 设置中围绕 HPS 创建分区 File.
    例如amp乐:
    # 手动对模拟 HPS 专用 I/O 的实例进行分区 set_instance_assignment -name PARTITION_HIERARCHY borde_18261 -to “system:the_system|system_acl_iface:acl_iface|system_acl_iface_hps_0:hps_0|system_acl_iface_hps_0_hps_io:hps_io| system_acl_iface_hps_0_hps_io_border:border”-section_id “system_acl_iface_hps_0_hps_io_border:border”
    # 将分区设置为 HPS_PARTITION 类型,以便由 Quartus 的其余部分正确处理
    set_global_assignment -name PARTITION_TYPE HPS_PARTITION -section_id “system_acl_iface_hps_0_hps_io_border:border”
    quartus_cdb 顶部 -c 顶部
    –incremental_compilation_export=acl_iface_partition.qxp
    –incremental_compilation_export_partition_name=acl_iface_partition
    –incremental_compilation_export_post_synth=on
    –incremental_compilation_export_post_fit=on
    –incremental_compilation_export_routing=on
    –incremental_compilation_export_flatten=关闭
    从分区中排除 HPS 后,您可以导入 .qxp file 并编译你的设计。
  2. 通过执行以下任务,使用适用于 OpenCL 的英特尔 FPGA RTE 的当前版本更新 SD 闪存卡映像:
    一种。 挂载 file 分配表(fat32)和扩展 file 现有映像中的系统 (ext3) 分区作为环回设备。 有关详细说明,请参阅构建 SD 闪存卡映像中的步骤 2。
    b. 在 /home/root/opencl_arm32_rte 目录中,删除 file来自先前版本的 RTE。
    C。 下载 RTE 的当前版本并将其解压缩到 /home/root/opencl_arm32_rte 目录中。
    d. 在里面/驱动程序/version.h file 您的自定义平台,将 ACL_DRIVER_VERSION 分配更新为. (对于前ample,16.1.x,其中16.1为SDK版本,x为您设置的驱动版本)。
    e. 重建驱动程序。
    F。 删除自定义平台的硬件文件夹。 将自定义平台连同更新的驱动程序一起复制到 /home/root/opencl_arm_rte/board 目录。
    G。 复制 Altera.icd file 从 /home/root/opencl_arm32_rte 目录并将其添加到 /etc/OpenCL/vendors 目录。
    H。 卸载并测试新映像。 有关详细说明,请参阅构建 SD 闪存卡映像中的步骤 8 至 11。

相关链接

  • 创建 SD 闪存卡映像第 14 页
    您还可以选择创建新的 SD 闪存卡映像。
  • 用于向前兼容性的自定义平台自动迁移

1.3 共享内存的软件支持
FPGA 和 CPU 之间的共享物理内存是在 SoC FPGA 上运行的 OpenCL 内核的首选内存。 由于 FPGA 访问共享物理内存,而不是共享虚拟内存,因此它无法访问将用户虚拟地址映射到物理页面地址的 CPU 页表。
在硬件方面,OpenCL 内核通过直接连接到 HPS DDR 硬内存控制器来访问共享物理内存。 就软件而言,支持共享物理内存涉及以下注意事项:

  1. 在 CPU 上分配内存的典型软件实现(例如amp例如,malloc() 函数)无法分配 FPGA 可能使用的内存区域。
    malloc() 函数分配的内存在虚拟内存地址空间中是连续的,但任何底层物理页面在物理上不太可能是连续的。 因此,主机必须能够分配物理上连续的内存区域。 然而,这种能力在 Linux 上的用户空间应用程序中是不存在的。 因此,Linux 内核驱动程序必须执行分配。
  2. OpenCL SoC FPGA Linux 内核驱动程序包括 mmap() 函数,用于分配共享物理内存并将其映射到用户空间。 mmap() 函数使用标准 Linux 内核调用 dma_alloc_coherent() 来请求物理上连续的内存区域以与设备共享。
  3. 在默认的 Linux 内核中,dma_alloc_coherent() 不会分配大小超过 0.5 兆字节 (MB) 的物理连续内存。 要允许 dma_alloc_coherent() 分配大量物理上连续的内存,请启用 Linux 内核的连续内存分配器 (CMA) 功能,然后重新编译 Linux 内核。
    对于 Cyclone V SoC 开发套件参考平台,CMA 管理 512 GB 物理内存中的 1 MB。 您可以增加或减少此值,具体取决于应用程序需要的共享内存量。 dma_alloc_coherent() 调用可能无法分配完整的 512 MB 物理连续内存; 但是,它通常可以获得大约 450 MB 的内存。
  4. CPU 可以缓存 dma_alloc_coherent() 调用分配的内存。 特别是,来自主机应用程序的写操作对 OpenCL 内核是不可见的。 OpenCL SoC FPGA Linux 内核驱动程序中的 mmap() 函数还包含对 pgprot_noncached() 或 remap_pf_range() 函数的调用,以显式禁用此内存区域的缓存。
  5. dma_alloc_coherent() 函数分配物理连续的内存后,mmap() 函数将虚拟地址返回到范围的开头,也就是你分配的内存的地址跨度。 主机应用程序需要这个虚拟地址来访问内存。 另一方面,OpenCL 内核需要物理地址。 Linux 内核驱动程序跟踪虚拟地址到物理地址的映射。 您可以通过向驱动程序添加查询将 mmap() 返回的物理地址映射到实际物理地址。
    aocl_mmd_shared_mem_alloc() MMD 应用程序编程接口 (API) 调用包含以下查询:
    一种。 分配内存并返回虚拟地址的 mmap() 函数。
    b. 将返回的虚拟地址映射到物理地址的额外查询。
    然后 aocl_mmd_shared_mem_alloc() MMD API 调用返回两个地址
    ——实际返回的地址是虚拟地址,物理地址到device_ptr_out。
    笔记: 驱动程序只能将 mmap() 函数返回的虚拟地址映射到物理地址。 如果您请求任何其他虚拟指针的物理地址,驱动程序将返回 NULL 值。

警告: 面向 OpenCL 运行时库的英特尔 FPGA SDK 假定共享内存是 board_spec.xml 中列出的第一个内存 file. 换句话说,Linux 内核驱动程序获得的物理地址成为 OpenCL 内核传递给 HPS SDRAM 的 Avalon® 地址。
对于运行时库,使用 clCreateBuffer() 调用按以下方式将共享内存分配为设备缓冲区:

  • 对于同时具有共享和非共享内存的双 DDR 板变体,如果您指定 CL_MEM_USE_HOST_PTR 标志,则 clCreateBuffer() 分配共享内存。 使用其他标志会导致 clCreateBuffer() 在非共享内存中分配缓冲区。
  • 对于仅具有共享内存的单 DDR 板变体,无论您指定哪个标志,clCreateBuffer() 都会分配共享内存。
    目前,ARM CPU 上的 32 位 Linux 支持决定了 SDK 运行时库中共享内存的支持范围。 换句话说,编译到其他环境的运行时库(例如ample、x86_64 Linux 或 64 位 Windows)不支持共享内存。
    C5soc没有实现异构内存来区分共享内存和非共享内存,原因如下:
    1. 历史——最初创建共享内存支持时,异构内存支持不可用。
    2. 统一接口——由于OpenCL是一个开放标准,英特尔在异构计算平台供应商之间保持一致性。 因此,使用与其他板供应商架构相同的接口来分配和使用共享内存。

1.4 FPGA 重构
对于 SoC FPGA,CPU 可以在不中断 CPU 操作的情况下重新配置 FPGA 内核架构。 跨越 HPS 和核心 FPGA 的 FPGA 管理器硬件块执行重新配置。 Linux 内核包含一个驱动程序,可以轻松访问 FPGA 管理器。

  • 到 view FPGA 内核的状态,调用 cat /sys/class/fpga/fpga0/ status 命令。
    Cyclone V SoC 开发套件参考平台提供的面向 OpenCL 的英特尔 FPGA SDK 程序实用程序使用此接口对 FPGA 进行编程。 使用运行中的 CPU 对 FPGA 内核重新编程时,程序实用程序执行以下所有任务:
    1. 在重新编程之前,禁用 FPGA 和 HPS 之间的所有通信桥,包括 H2F 和 LH2F 桥。
    重新编程完成后重新启用这些桥。
    注意:OpenCL 系统不使用 FPGA-to-HPS (F2H) 桥。 请参考 Cyclone V 器件手册第 3 卷中的 HPS-FPGA 接口部分:硬核处理器系统技术参考手册了解更多信息。
    2. 确保在重新编程期间禁用 FPGA 和 HPS DDR 控制器之间的链接。
    3. 确保在重新编程期间禁用 FPGA 上的 FPGA 中断。
    此外,通知驱动程序在重新编程期间拒绝来自 FPGA 的任何中断。

有关实际实施的详细信息,请参阅程序实用程序的源代码。

警告: 不要在 CPU 运行时更改 HPS DDR 控制器的配置。
这样做可能会导致致命的系统错误,因为当 CPU 有未完成的内存事务时,您可能会更改 DDR 控制器配置。 这意味着当 CPU 运行时,您不能使用在不同配置中使用 HPS DDR 的映像对 FPGA 内核进行重新编程。
请记住,OpenCL 系统和英特尔 SoC FPGA 嵌入式设计套件 (EDS) 提供的黄金硬件参考设计将 HPS DDR 设置为单一 256 位模式。
分支预测器或页表预取器等 CPU 系统部件可能会发出 DDR 命令,即使 CPU 上似乎没有任何运行。
因此,启动时间是设置 HPS DDR 控制器配置的唯一安全时间。
这也意味着 U-boot 必须有一个原始二进制文件 file (.rbf) 图像加载到内存中。 否则,您可能会在 FPGA 上使用未使用的端口启用 HPS DDR,然后可能会在之后更改端口配置。 因此,OpenCL Linux 内核驱动程序不再包含设置 HPS DDR 控制器配置所需的逻辑。
Cylone V SoC 开发套件上的 SW3 双列直插式封装 (DIP) 开关控制 .rbf 图像的预期形式(即,是否 file 被压缩和/或加密)。 C5soc 和 SoC EDS 提供的黄金硬件参考设计包括压缩但未加密的 .rbf 图像。 用于 OpenCL Cyclone V SoC 入门指南的英特尔 FPGA SDK 中描述的 SW3 DIP 开关设置与此 .rbf 图像配置相匹配。

相关链接

  • HPS-FPGA 接口
  • 配置 SW3 开关

1.4.1 FPGA 系统架构细节
对 Cyclone V SoC 开发套件参考平台的支持基于 Stratix® V 参考平台 (s5_ref),可用于 OpenCL 的英特尔 FPGA SDK。
c5soc Qsys 系统和内核驱动程序的整体组织与 s5_ref 中的非常相似。
以下FPGA核心组件在c5soc和s5_ref中都是一样的:

  • VERSION_ID 块
  • 休息机制
  • 记忆体分频器
  • 缓存监听接口
  • 内核时钟
  • 控制寄存器访问 (CRA) 块

1.5 构建 SD 闪存卡镜像
因为 Cyclone V SoC FPGA 是一个完整的片上系统,所以您有责任提供系统的完整定义。 英特尔建议您以 SD 闪存卡映像的形式提供它。 面向 OpenCL 的英特尔 FPGA SDK 用户只需将图像写入微型 SD 闪存卡,SoC FPGA 板即可使用。
修改现有 SD 闪存卡映像第 13 页
英特尔建议您只需修改 Cyclone V SoC 开发套件参考平台可用的映像。 您还可以选择创建新的 SD 闪存卡映像。
创建 SD 闪存卡映像第 14 页
您还可以选择创建新的 SD 闪存卡映像。

1.5.1 修改已有的 SD 闪存卡镜像
英特尔建议您只需修改 Cyclone V SoC 可用的映像
开发套件参考平台。 您还可以选择创建新的 SD 闪存卡映像。
c5soc linux_sd_card_image.tgz 镜像 file 位于ALTERAOCLSDKROOT/board/c5soc目录下,其中ALTERAOCLSDKROOT指向Intel FPGA SDK for OpenCL的安装目录路径。

注意力: 要修改 SD 闪存卡映像,您必须具有 root 或 sudo 权限。

  1. 解压$ALTERAOCLSDKROOT/board/c5soc/linux_sd_card_image.tgz file,运行 tar xvfzlinux_sd_card_image.tgz 命令。
  2. 编译 hello_world OpenCL examp使用自定义平台支持进行文件设计。 重命名 .rbf file 用于 OpenCL 离线编译器的英特尔 FPGA SDK 生成为 opencl.rbf,并将其放置在 SD 闪存卡映像中的 fat32 分区中。
    你可以下载 hello_world examp来自 OpenCL Design Ex 的设计ampAltera 上的 les 页 web地点。
  3. 放置 .rbf file 进入闪存卡映像的 fat32 分区。
    注意力: fat32 分区必须同时包含 zImage file 和.rbf file. 没有 .rbf file, 插入驱动程序时会发生致命错误。
  4. 创建 SD 卡映像后,通过调用以下命令将其写入微型 SD 卡:sudo dd if=/path/to/sdcard/image.bin of=/dev/sdcard
  5. 要测试您的 SD 闪存卡映像,请执行以下任务:
    一种。 将微型 SD 闪存卡插入 SoC FPGA 板。
    b. 给板子上电。
    C。 调用 aocl 诊断实用程序命令。

1.5.2 创建 SD 闪存卡镜像
您还可以选择创建新的 SD 闪存卡映像。 GSRD v14.0.2 – RocketBoards.org 的 SD 卡页面上提供了有关构建新 SD 闪存卡映像和重建现有 SD 闪存卡映像的通用说明 web地点。
以下步骤描述了从黄金系统参考设计 (GSRD) SD 闪存卡映像创建 linux_sd_card_image.tgz 映像的过程:
笔记:
要从 c5soc 映像创建映像,请执行此过程中概述的所有适用任务。

  1. 从 Rocketboards.org 下载并解压缩 GSRD SD 闪存卡映像版本 14.0。
  2. 安装 file 分配表(fat32)和扩展 file 此映像中的系统 (ext3) 分区作为环回设备。 要挂载分区,请执行以下步骤:
    一种。 通过调用 /sbin/fdisk -lu image_ 确定映像中分区的字节开始file 命令。
    例如amp例如,W1 FAT 类型的分区号 95 的块偏移量为 2121728。每个块有 512 字节,字节偏移量为 512 字节 x 2121728 = 1086324736 字节。
    b. 识别自由循环设备(例如ample, /dev/loop0) 通过键入 losetup -f 命令。
    C。 假设 /dev/loop0 是自由循环设备,通过调用 losetup /dev/loop0 image_ 将闪存卡图像分配给循环块设备file -0 1086324736 命令。
    d. 通过调用 mount /dev/loop0 /media/disk1 命令挂载循环设备。
    图片内 file, /media/disk1 现在是挂载的 fat32 分区。
    e. 对 ext3 分区重复步骤 a 到 d。
  3. 从 Altera 上的下载中心下载面向 OpenCL 包的英特尔 FPGA 运行时环境的 Cyclone V SoC FPGA 版本 web地点。
    一种。 单击 Quartus Prime 软件版本旁边的下载按钮。
    b. 指定发布版本、操作系统和下载方法。
    C。 点击Additional Software选项卡,选择下载Intel FPGA
    OpenCL Linux Cyclone V SoC TGZ 的运行时环境。
    d. 下载 aocl-rte- 后.arm32.tgz file, 解压到
    您拥有的目录。
  4. 将解压后的 aocl-rte- .arm32 目录到映像的 ext32 分区上的 /home/root/opencl_arm3_rte 目录中 file.
  5. 删除自定义平台的硬件文件夹,然后将自定义平台放入 /home/root/opencl_arm32_rte 的板子目录中。
  6. 创建 init_opencl.sh file 在 /home/root 目录中包含以下内容: export ALTERAOCLSDKROOT=/home/root/opencl_arm32_rte export AOCL_BOARD_PACKAGE_ROOT=$ALTERAOCLSDKROOT/board/ 导出 PATH=$ALTERAOCLSDKROOT/bin:$PATH 导出 LD_LIBRARY_PATH=$ALTERAOCLSDKROOT/host/arm32/lib:$LD_LIBRARY_PATH insmod $AOCL_BOARD_PACKAGE_ROOT/driver/aclsoc_drv.ko
    SDK用户运行source ./init_opencl.sh命令加载环境变量和OpenCL Linux内核驱动。
  7. 如果需要更新预加载器,DTS files 或 Linux 内核,您需要来自 SoC EDS 的 arm-linux-gnueabihf-gcc 编译器。 按照英特尔 SoC FPGA 嵌入式设计套件用户指南中概述的说明获取软件、重新编译它们并更新相关的 files 在挂载的 fat32 分区上。
    注意力: 如果您的自定义平台与 c5soc 中的引脚用法不同,则很可能需要更新预加载器。
    切记:如果重新编译Linux内核,请使用相同的Linux内核源代码重新编译Linux内核驱动程序 file秒。 如果 Linux 内核驱动程序与 Linux 内核不匹配,则不会加载驱动程序。 此外,您必须启用 CMA。
    有关详细信息,请参阅重新编译 Linux 内核。
  8. 编译 hello_world OpenCL examp使用自定义平台支持进行文件设计。 重命名 .rbf file 用于 OpenCL 离线编译器的英特尔 FPGA SDK 生成为 opencl.rbf,并将其放置在 SD 闪存卡映像中的 fat32 分区中。
    你可以下载 hello_world examp来自 OpenCL Design Ex 的设计ampAltera 上的 les 页 web地点。
    9. 储存所有必需品后 files 到闪存卡图像上,调用以下命令:
    一种。 同步
    b. 卸载/media/disk1
    C。 卸载在哪里是您用于在第 3 页的 3 中挂载 ext3 分区的目录名称(例如amp文件,/media/disk2)。
    d.丢失设置-d /dev/loop0
    e. losetup -d /dev/loop1
  9. 通过调用以下命令压缩 SD 闪存卡映像:tar cvfz .tgz linux_sd_card_image
  10. 交付.tgz file 在自定义平台的根目录中。
  11. 要测试您的 SD 闪存卡映像,请执行以下任务:
    一种。 将生成的未压缩图像写入微型 SD 闪存卡。
    b. 将微型 SD 闪存卡插入 SoC FPGA 板。
    C。 给板子上电。
    d. 调用 aocl 诊断实用程序命令。

相关链接

  • 英特尔 SoC FPGA 嵌入式设计套件用户指南
  • OpenCL 设计实例ampAltera 上的 les 页 web地点
  • 重新编译 Linux 内核(第 16 页)
    要启用 CMA,您必须首先重新编译 Linux 内核。
  • 查询 FPGA 板的设备名称(诊断)

1.6 为 Cyclone V SoC FPGA 编译 Linux 内核
在 Cyclone V SoC FPGA 板上运行 OpenCL 应用程序之前,您必须编译 Linux 内核源代码,并编译和安装 OpenCL Linux 内核驱动程序。

  1. 重新编译 Linux 内核(第 16 页)
    要启用 CMA,您必须首先重新编译 Linux 内核。
  2. 编译和安装 OpenCL Linux 内核驱动程序第 17 页根据已编译的内核源代码编译 OpenCL Linux 内核驱动程序。

1.6.1 重新编译 Linux 内核
要启用 CMA,您必须首先重新编译 Linux 内核。

  1. 单击 RocketBoards.org 资源页面上的 GSRD v14.0 – 编译 Linux 链接 web站点以访问有关下载和重建 Linux 内核源代码的说明。
    要与面向 OpenCL 的™英特尔 FPGA SDK 一起使用,请将 socfpga-3.13-rel14.0 指定为.
  2. 注意:构建过程创建 arch/arm/configs/socfpga_defconfig file。 这 file 指定 socfpga 默认配置的设置。
    将以下行添加到 arch/arm/configs/socfpga_defconfig 的底部 file.
    CONFIG_MEMORY_ISOLATION=y
    配置_CMA=y
    CONFIG_DMA_CMA=y
    CONFIG_CMA_DEBUG=y
    CONFIG_CMA_SIZE_MBYTES=512
    CONFIG_CMA_SIZE_SEL_MBYTES=y
    CONFIG_CMA_ALIGNMENT=8
    CONFIG_CMA_AREAS=7
    CONFIG_CMA_SIZE_MBYTES 配置值设置可用物理连续内存总数的上限。 如果您需要更多内存,您可以增加此值。
  3. 注意力: SoC FPGA 板上的 ARM 处理器可用的物理内存总量为 1 GB。 Intel 不建议您将 CMA 管理器设置为接近 1 GB。
  4. 运行 make mrproper 命令以清除当前配置。
  5. 运行 make ARCH=arm socfpga_deconfig 命令。
    ARCH=arm 表示要配置ARM架构。
    socfpga_defconfig 表示您要使用默认的 socfpga 配置。
  6. 运行 export CROSS_COMPILE=arm-linux-gnueabihf- 命令。
    此命令设置 CROSS_COMPILE 环境变量以指定所需工具链的前缀。
  7. 运行 make ARCH=arm zImage 命令。 生成的图像在 arch/arm/boot/zImage 中可用 file.
  8. 放置 zImage file 进入闪存卡映像的 fat32 分区。 有关详细说明,请参阅 Rocketboards.org 上的 Cyclone V SoC FPGA 特定 GSRD 用户手册。
  9. 注意:要正确插入 OpenCL Linux 内核驱动程序,首先加载一个 SDKgenerated.rbf file 到 FPGA 上。
    创建 .rbf file, 编译一个SDK design examp文件以 Cyclone V SoC 开发套件参考平台作为目标定制平台。
    9. 放置 .rbf file 进入闪存卡映像的 fat32 分区。
    注意:fat32 分区必须同时包含 zImage file 和.rbf file. 没有 .rbf file, 插入驱动程序时会发生致命错误。
  10. 将包含您之前修改或创建的 SD 卡映像的已编程 micro SD 卡插入 Cyclone V SoC 开发套件,然后为 SoC FPGA 板加电。
  11. 通过运行 uname -r 命令验证已安装的 Linux 内核的版本。
  12. 要验证您是否已在内核中成功启用 CMA,并在 SoC FPGA 板上加电,请运行 grep init_cma /proc/kallsyms 命令。
    如果输出非空,则启用 CMA。
  13. 要将重新编译的 Linux 内核与 SDK 一起使用,请编译并安装 Linux 内核驱动程序。

相关链接

  • 黄金系统参考设计 (GSRD) 用户手册
  • 构建 SD 闪存卡映像第 13 页
    因为 Cyclone V SoC FPGA 是一个完整的片上系统,所以您有责任提供系统的完整定义。

1.6.2 编译安装OpenCL Linux内核驱动
针对已编译的内核源代码编译 OpenCL Linux 内核驱动程序。

驱动程序源在面向 OpenCL 的英特尔 FPGA 运行时环境的 Cyclone V SoC FPGA 版本中可用。 此外,确保您已为 OpenCL 生成的 .rbf 加载英特尔 FPGA SDK file 进入 FPGA 以防止错误安装 Linux 内核模块。

  1. 从 Altera 上的下载中心下载面向 OpenCL 包的英特尔 FPGA 运行时环境的 Cyclone V SoC FPGA 版本 web地点。
    一种。 单击 Quartus Prime 软件版本旁边的下载按钮。
    b. 指定发布版本、操作系统和下载方法。
    C。 点击Additional Software选项卡,选择下载Intel FPGA
    OpenCL Linux Cyclone V SoC TGZ 的运行时环境。
    d. 下载 aocl-rte- 后.arm32.tgz file, 解压到
    您拥有的目录。
    驱动源码在aocl-rte- .arm32/board/c5soc/驱动目录。
  2. 要重新编译 OpenCL Linux 内核驱动程序,请在驱动程序的 Make 中设置 KDIR 值file 到包含 Linux 内核源代码的目录 files.
  3. 运行 export CROSS_COMPILE=arm-linux-gnueabihf- 命令以指示您的工具链的前缀。
  4. 运行 make clean 命令。
  5. 运行 make 命令创建 aclsoc_drv.ko file.
  6. 将 opencl_arm32_rte 目录传输到 Cyclone V SoC FPGA 板。
    运行 scp -r root@your-ipaddress: 命令将运行环境放在/home/root 目录中。
  7. 运行您在构建 SD 卡映像时创建的 init_opencl.sh 脚本。
  8.  调用 aocl 诊断实用程序命令。 成功运行 init_opencl.sh 后,诊断实用程序将返回一个通过的结果。

1.7 已知问题
目前,将面向 OpenCL 的英特尔 FPGA SDK 与 Cyclone V SoC 开发套件参考平台一起使用存在某些限制。

  1. 您不能覆盖 clGetDeviceInfo() 调用的 CL_DEVICE_VENDOR 和 CL_DEVICE_NAME 字符串报告的供应商和电路板名称。
  2. 如果主机在共享DDR系统(即HPS DDR)中分配常量内存,并在内核执行后修改常量内存,则内存中的数据可能会过时。 出现此问题是因为 FPGA 内核无法窥探 CPU 到 HPS DDR 事务。
    为防止后续内核执行访问过时数据,请实施以下解决方法之一:
    • 不要在初始化后修改常量内存。
    • 如果您需要多个__constant 数据集,请创建多个常量内存缓冲区。
    • 如果可用,在加速器板上的FPGA DDR 中分配常量内存。
  3. ARM 上的 SDK 实用程序仅支持编程和诊断实用程序命令。
    闪存、安装和卸载实用程序命令不适用于 Cyclone V SoC 开发套件,原因如下:
    一种。 安装实用程序必须编译 aclsoc_drv Linux 内核驱动程序并在 SoC FPGA 上启用它。 开发机器必须执行编译; 但是,它已经包含 SoC FPGA 的 Linux 内核源代码。 开发机器的 Linux 内核源与 SoC FPGA 的不同。 SDK 用户可能不知道 SoC FPGA 的 Linux 内核源代码的位置。 同样,Cyclone V SoC 开发套件也无法使用卸载实用程序。
    此外,向 SoC 板提供 aclsoc_drv 具有挑战性,因为 Cyclone V SoC 开发套件的默认分发不包含 Linux 内核 include files 或 GNU 编译器集合 (GCC) 编译器。
    b. Flash 实用程序需要放置一个 .rbf file 将 OpenCL 设计复制到微型 SD 闪存卡的 FAT32 分区上。 目前,当 SDK 用户给板子上电时,这个分区不会挂载。 因此,更新分区最好的方法是使用闪存卡读卡器和开发机。
  4. 在用于 OpenCL 离线编译器可执行文件的英特尔 FPGA SDK 之间切换时 files (.aocx) 对应于不同的板变体(即 c5soc 和 c5soc_sharedonly),您必须使用 SDK 的程序实用程序加载.aocx file 第一次用于新的电路板变体。 如果您只是使用新的电路板变体运行主机应用程序,但 FPGA 包含来自另一个电路板变体的图像,则可能会发生致命错误。
  5. .qxp file 不包括接口分区分配,因为 Quartus Prime 软件始终满足该分区的时序要求。
  6. 当您给开发板加电时,它的媒体访问控制 (MAC) 地址被设置为一个随机数。 如果您的 LAN 策略不允许此行为,请通过执行以下任务来设置 MAC 地址:
    一种。 在 U-Boot 上电过程中,按任意键进入 U-Boot 命令提示符。
    b. 在命令提示符下键入 setenv ethaddr 00:07:ed:00:00:03。
    您可以选择任何 MAC 地址。
    C。 键入 saveenv 命令。
    d. 重启板子。

1.8 文档修订历史
表 1.
用于 OpenCL Cyclone V SoC 的英特尔 FPGA SDK 的文档修订历史
开发套件参考平台移植指南

日期 版本 更改
17 月 XNUMX 日 2017.05.08 •维护发布。
十月 2016 2016.10.31 • 将Altera SDK for OpenCL 更名为Intel FPGA SDK for OpenCL。
• 将Altera 离线编译器更名为Intel FPGA SDK for OpenCL 离线编译器。
16 月 XNUMX 日 2016.05.02 •修改了构建和修改SD 闪存卡映像的说明。
•修改了重新编译Linux 内核和OpenCL Linux 内核驱动程序的说明。
15 年 XNUMX 月 2015.11.02 •维护版本,并将Quartus II 的实例更改为Quartus Prime。
15 月 XNUMX 日 15.0.0 •在FPGA Reconfiguration中,删除了对FPGA内核重新编程的指令
与一个。 通过调用猫的 rbf 图像 file名称>。 rbf
> /dev/ fpga0 命令,因为不推荐使用此方法。
14年XNUMX月 14.1.0 •将文档重命名为Altera Cyclone V SoC Development Kit Reference Platform Porting Guide。
•更新了 aocl 程序的重新编程实用程序filename>.aocx 实用程序命令。
•将诊断实用程序更新为 aocl 诊断和 aocl 诊断实用程序命令。
•更新了将参考平台移植到您的SoC 电路板部分中的程序,以包括有关移植和修改c5soc 电路板分区的说明,以便为有保证的时序收敛流程创建时序清洁分区。
•插入主题更新移植参考平台以概述以下任务的过程:
1.不包括板分区中的硬处理器系统(HPS)块
2.更新SD闪存卡镜像
•更新了构建SD 闪存卡映像部分。 建议使用 14.0 版的黄金系统参考设计 (GSRD) 图像作为起点,而不是 SoC 嵌入式设计套件 (EDS) 提供的图像。
•更新了重新编译Linux 内核和OpenCL Linux 内核驱动程序部分:
1.增加了设置CROSS COMPILE变量的指令。
2.更改了您运行的命令以验证CMA 已成功启用。
14 月 XNUMX 日 14.0.0 •初始发行。

文件/资源

面向 OpenCL 的英特尔 FPGA SDK [pdf] 用户指南
用于 OpenCL 的 FPGA SDK, FPGA SDK, 用于 OpenCL 的 SDK, SDK

参考

发表评论

您的电子邮件地址不会被公开。 必填字段已标记 *