0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用AMD Vitis HLS创建HLS IP

XILINX开发者社区 ? 来源:XILINX开发者社区 ? 2025-06-13 09:50 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文作者:AMD 工程师 Rachel Gaines

本文逐步演示了如何使用 AMD Vitis HLS 来创建一个 HLS IP,通过 AXI4 接口从存储器读取数据、执行简单的数学运算,然后将数据写回存储器。接着会在 AMD Vivado Design Suite 设计中使用此 HLS IP,并使用嵌入式 Vitis 应用控制此 HLS IP。

具体的运行和测试条件如下:

操作系统:Ubuntu 20.04

版本:2023.1

注释:请确保使用您的操作系统支持的版本 -受支持的操作系统

https://docs.amd.com/r/2023.1-English/ug973-vivado-release-notes-install-license/Supported-Operating-Systems

本文使用的工具流程为 Vitis HLS > Vivado > Vitis IDE。我们将使用 Vitis HLS 创建一个自定义 IP,将该 HLS IP 合并到 Vivado 的硬件设计中,然后创建一个与 HLS IP 通信的 Vitis 应用。该 Vitis 应用将按照自定义硬件上的嵌入式工程所需进行设置。应用代码将利用自动生成的 HLS API 驱动程序调用来控制 HLS IP 并与之通信。整个流程假设您已经安装了 Vitis、Vitis HLS 和 Vivado。

1下载并解压缩 ReferenceDocs 文件夹

将该文件夹保存在所需工作位置。vitis_hls 和 Vivado 各有单独的文件夹。稍后,可创建自己的 Vitis 应用工程文件夹。

2创建 HLS IP

打开 Linux 终端,执行以下命令以便:

进入 vitis_hls 文件夹 - 该文件夹包含 HLS IP 的源代码。

运行 TCL 脚本来设置 HLS 工程 - 该脚本还将运行 C 语言仿真、C 语言综合与协同仿真。

在 GUI 中打开 HLS 工程

f1e9ec60-45ea-11f0-b715-92fbcf53809c.png

打开 GUI 后,检查 example.cpp 源代码。HLS IP 使用 Volatile 指针和 Memcpy 函数在存储器上读取和写入数据。Memcpy 需要一个缓冲器来存储存储器传输事务的各项结果。m_axi 接口编译指示要求此 IP 使用存储器映射。深度设置为 50 意味着串流在给定时间最多可以容纳 50 个未完成的元素,选择该值是为了匹配缓冲器的大小。s_axilite 接口编译指示允许此 IP 接受应用的控制,并与 AMD Zynq SoC 器件通信。

使用 GUI 左下角的 Flow Navigator,以便在 GUI 中运行 C 语言仿真、C 语言综合与协同仿真,查看每项报告并熟悉 IDE。准备就绪后,可以通过在 Flow Navigator 中选择“Export RTL”来导出 HLS IP,以便在 Vivado 中使用。

3创建 Vivado 平台

有两种方法可用于创建 Vivado 平台。

选项 1:

使用以下所示命令从“Vivado”文件夹运行 Tcl 脚本。运行此脚本后,将创建一个 Vivado 工程,随后可在 GUI 中打开该工程。在 GUI 中,您需要综合、实现、生成比特流,并导出硬件。

f1f8dc0c-45ea-11f0-b715-92fbcf53809c.png

选项 2:

按照以下步骤在 Vivado 中自行创建平台:

打开 Vivado,并使用 ZCU102 评估板创建一个新工程

将 Vitis HLS IP 添加到 IP 目录中:

打开 IP 目录,右键单击并选择“add Repo”。

浏览到导出 IP 的位置,并将“ip”文件夹添加到目录中。默认路径为 /solution1/impl/IP。

注释:如果希望使用不同的位置将 HLS IP 添加到 IP 目录中,可以使用导出 HLS IP 时创建的export.zip文件:

https://docs.xilinx.com/r/en-US/ug1399-vitis-hls/Exporting-the-RTL-Design

它位于相同的默认路径中,但您可以将其移至期望的位置,并使用该位置代替“ip”文件夹,以添加到 IP 目录中。“ip”文件夹所含内容与解压后 IP 的内容相同。

创建一个新的块设计,并添加 HLS IP 和 Zynq UltraScale+ MPSoC。通过双击 Zynq,对其进行自定义。在该设计中,我们添加了 S_AXI_HP0_FPD 端口。该评估板默认启用 DDR,但请在“DDR Configurations”选项卡中确认 DDR 是否已启用。

f20c94fe-45ea-11f0-b715-92fbcf53809c.png

使用设计辅助来运行自动连接。它将通过 AXI Interconnect 和 AXI SmartConnect 自动连接 Zynq 和 HLS IP。

须手动将 HLS IP 上的中断端口连接到 Zynq 上的 pl_ps_irq 端口。此时设计应与以下截屏相似:

f2221db0-45ea-11f0-b715-92fbcf53809c.png

打开“Address Editor”选项卡,确保已如下所示分配了所有地址。

f234a304-45ea-11f0-b715-92fbcf53809c.png

确认该设计。如果没有错误,则运行综合、实现和生成比特流的步骤。完成后,选择“File > Export > Export Hardware”导出设计,并将 XSA 文件保存到期望的位置。

注释:在导出硬件时,确保选择“Include bitstream”。

4创建 Vitis 应用

打开 Vitis 并选择“Create Application Project”- 这适用于独立的嵌入式系统

对于平台选择,请选择“Create a new platform from hardware (XSA)”选项卡,并浏览到您在上一节中创建的 XSA 文件所在位置。单击“Next”。

确保选中“Generate boot components”以及“psu_cortexa53_0”。在下一个框中按需更改平台名称,然后单击“Next”。

命名应用工程。系统名称将使用相同的标题。选择处理器“psu_cortexa53_0”。单击“Next”。

对于“Domain”选择,请确保操作系统设置为“standalone”,且架构为 64 位。单击“Next”。

对于模板,请选择“Empty C Application”。

设置源代码

在 GUI 中打开 Vitis 工程后,在左侧的“Explorer”选项卡中右键单击 projectName_system/projectName/src,然后选择“Import Sources”。在弹出窗口中,浏览至源代码所在的文件夹。

添加 helloworld.c,它位于“阅读原文”底部的压缩文件夹中,然后从文件列表中选择 helloworld.c,如下图所示。接着单击“Finish”。

f245094c-45ea-11f0-b715-92fbcf53809c.png

检查 helloworld.c。整个过程中都有注释用于解释每一节的作用。以“XExample”开头的数据类型和函数调用是自动生成的 API 调用,用来控制 HLS IP 并与之通信。

关键要点包括:须创建一个 Vitis HLS IP 实例,如第 14 行所示,并使用 API 调用来获取/设置 IP 与数据并且启动它(第 34、35 和 48 行)。

此时还须完成另一项不寻常的操作,即,使用 Xil_DCacheInvalidate() 函数,告诉处理器对 DDR(而非其高速缓存)执行读取/写入操作,以确保处理器和 HLS IP 在相同的位置执行读取/写入。

构建并运行工程

构建系统工程。这将构建整个工程,包括平台和应用。右键单击系统工程或选择锤子图标。还可以使用左下角的应用助手来构建和运行设计。

该工程未经软件仿真测试,因为这需要执行额外的步骤,不在本博客的讨论范围之内。但在 ZCU102 评估板上,已通过选择“Run As”选项中的“Launch Hardware”来对该工程进行了测试和验证。当连接到该评估板时,您还可以运行调试器并单步执行代码。您可使用终端连接到 UART (com0),以查看硬件上的输出。

参考文件

HLS - Tcl 脚本 - run_hls.tcl

HLS - 源代码 - example.cpp 和测试激励文件

Vivado - 从 write_project_tcl 创建的 Tcl 脚本

Vitis - 应用源代码

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • amd
    amd
    +关注

    关注

    25

    文章

    5594

    浏览量

    136574
  • 接口
    +关注

    关注

    33

    文章

    9032

    浏览量

    153972
  • Vivado
    +关注

    关注

    19

    文章

    835

    浏览量

    68970
  • Vitis
    +关注

    关注

    0

    文章

    150

    浏览量

    7979

原文标题:开发者分享|AMD Vitis? HLS 系列 1 - AMD Vivado? IP 流程(Vitis 传统 IDE)

文章出处:【微信号:gh_2d1c7e2d540e,微信公众号:XILINX开发者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用AMD Vitis Unified IDE创建HLS组件

    这篇文章在开发者分享|AMD Vitis HLS 系列 1 - AMD Vivado IP 流程(Vit
    的头像 发表于 06-20 10:06 ?1085次阅读
    使用<b class='flag-5'>AMD</b> <b class='flag-5'>Vitis</b> Unified IDE<b class='flag-5'>创建</b><b class='flag-5'>HLS</b>组件

    如何在Unified IDE中创建视觉库HLS组件

    Vivado IP 流程(Vitis Unified),在这篇 AMD Vitis HLS 系列 3 中,我们将介绍如何使用 Unifie
    的头像 发表于 07-02 10:55 ?577次阅读
    如何在Unified IDE中<b class='flag-5'>创建</b>视觉库<b class='flag-5'>HLS</b>组件

    FPGA高层次综合HLSVitis HLS知识库简析

    1、HLS最全知识库介绍高层次综合(High-level Synthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。对于AMD Xilinx而言
    发表于 09-07 15:21

    使用Vitis HLS创建属于自己的IP相关资料分享

    1、使用Vitis HLS创建属于自己的IP高层次综合(High-level Synthesis)简称HLS,指的是将高层次语言描述的逻辑结
    发表于 09-09 16:45

    如何在Vitis HLS中使用C语言代码创建AXI4-Lite接口

    在本教程中,我们将来聊一聊有关如何在 Vitis HLS 中使用 AXI4-Lite 接口创建定制 IP 的基础知识。
    的头像 发表于 09-13 10:04 ?6958次阅读
    如何在<b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b>中使用C语言代码<b class='flag-5'>创建</b>AXI4-Lite接口

    Vivado HLSVitis HLS 两者之间有什么区别

    Vitis HLS下,一个Solution的Flow Target可以是Vivado IP Flow Target,也可以是VitisKernel Flow Target,如下图所示。前者最终导出来
    的头像 发表于 11-05 17:43 ?4w次阅读

    Vitis HLS工具简介及设计流程

    Vitis HLS 是一种高层次综合工具,支持将 C、C++ 和 OpenCL 函数硬连线到器件逻辑互连结构和 RAM/DSP 块上。Vitis HLS 可在
    的头像 发表于 05-25 09:43 ?2865次阅读

    Vitis HLS如何添加HLS导出的.xo文件

    HLS导出的.xo文件如何导入到Vitis里面?需要把.xo文件解压,然后把文件夹导入到Vitis Kernel/src文件夹下吗?
    的头像 发表于 08-03 11:20 ?3528次阅读
    <b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b>如何添加<b class='flag-5'>HLS</b>导出的.xo文件

    使用AXI4-Lite将Vitis HLS创建IP连接到PS

    在 AXI 基础第 6 讲 - Vitis HLS 中的 AXI4-Lite 简介中,使用 C 语言在 HLS创建包含 AXI4-Lite 接口的
    发表于 08-02 09:43 ?1020次阅读
    使用AXI4-Lite将<b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b><b class='flag-5'>创建</b>的<b class='flag-5'>IP</b>连接到PS

    Vitis HLS知识库总结

    对于AMD Xilinx而言,Vivado 2019.1之前(包括),HLS工具叫Vivado HLS,之后为了统一将HLS集成到Vitis
    的头像 发表于 09-02 09:06 ?4095次阅读

    HLS最全知识库

    对于AMD Xilinx而言,Vivado 2019.1之前(包括),HLS工具叫Vivado HLS,之后为了统一将HLS集成到Vitis
    的头像 发表于 01-15 11:27 ?3431次阅读

    AMD全新Vitis HLS资源现已推出

    AMD Vitis HLS 工具允许用户通过将 C/C++ 函数综合成 RTL,轻松创建复杂的 FPGA 算法。Vitis
    的头像 发表于 04-23 10:41 ?1452次阅读
    <b class='flag-5'>AMD</b>全新<b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b>资源现已推出

    关于HLS IP无法编译解决方案

    Xilinx平台的Vivado HLSVitis HLS 使用的 export_ip 命令会无法导出 IP
    的头像 发表于 07-07 14:14 ?1274次阅读
    关于<b class='flag-5'>HLS</b> <b class='flag-5'>IP</b>无法编译解决方案

    Vitis HLS移植指南

    电子发烧友网站提供《Vitis HLS移植指南.pdf》资料免费下载
    发表于 09-13 09:21 ?0次下载
    <b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b>移植指南

    研讨会:利用编译器指令提升AMD Vitis? HLS 设计性能

    /C++ 代码为 AMD 设备上可编程逻辑的 RTL 代码加速 IP 创建。 在 Vitis HLS 中,优化指令脱颖而出成为最强大的工具之
    的头像 发表于 12-05 09:10 ?896次阅读
    研讨会:利用编译器指令提升<b class='flag-5'>AMD</b> <b class='flag-5'>Vitis</b>? <b class='flag-5'>HLS</b> 设计性能