本文逐步演示了如何使用 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 工程
打开 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 中,您需要综合、实现、生成比特流,并导出硬件。
选项 2:
按照以下步骤在 Vivado 中自行创建平台:
打开 Vivado,并使用 ZCU102 评估板创建一个新工程
将 Vitis HLS IP 添加到 IP 目录中:
打开 IP 目录,右键单击并选择“add Repo”。
浏览到导出 IP 的位置,并将“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 是否已启用。
使用设计辅助来运行自动连接。它将通过 AXI Interconnect 和 AXI SmartConnect 自动连接 Zynq 和 HLS IP。
须手动将 HLS IP 上的中断端口连接到 Zynq 上的 pl_ps_irq 端口。此时设计应与以下截屏相似:
打开“Address Editor”选项卡,确保已如下所示分配了所有地址。
确认该设计。如果没有错误,则运行综合、实现和生成比特流的步骤。完成后,选择“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”。
检查 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
+关注
关注
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开发者社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
FPGA高层次综合HLS之Vitis HLS知识库简析
使用Vitis HLS创建属于自己的IP相关资料分享
Vivado HLS和Vitis HLS 两者之间有什么区别
Vitis HLS工具简介及设计流程
使用AXI4-Lite将Vitis HLS创建的IP连接到PS

Vitis HLS知识库总结
HLS最全知识库
研讨会:利用编译器指令提升AMD Vitis? HLS 设计性能

评论