在 2023 年 12 月 23 日举行的在线研讨会|利用编译器指令提升 AMD Vitis™ HLS 设计性能的网络研讨会中,我们介绍了 AMD Vitis™ HLS,了解了不同类型的优化指令以及它们如何影响综合结果,探索了有助于分析和可视化结果的不同分析器,并演示了设计 Demo 并演示优化指令的应用以创建一系列 IP 解决方案。
本次研讨会中我们收到了来自广大用户和网友的热情提问,针对代表性较强的问题,专家在线进行了集中答疑,研讨会后我们另精选出部分高频问题在本文中做出进一步解答。若您需要学习全部直播内容,欢迎点击观看回放。
答疑专家:
Lauren Gao(高亚军)
AMD 资深战略应用工程师
1. 您好,HRS 在实现图像数据统计的时候的问题, 因为图像统计的时候需要,需要反复对 RAM 的同一个地址进行读写操作,但是 RAM 同一个地址的读写需要两个周期来完成,对于 RTL 代码来说,我们可以用乒乓两个 RAM 来实现每个周期都可以操作同一个地址,但是 HLS 要如何实现呢?
C/C++ 是从算法级来考虑的,而 RTL 要从时序角度考虑,用 HLS 实现要考虑的是如何将算法用 C/C++ 高效描述出来。这种对 RAM 的读写操作从 C/C++ 角度来看就是对数组的访问。算法该如何访问就如何访问,RTL 细节工具会根据算法要求进行转化。
2. RTL 协同仿真,您的 PPT 里展示有波形,是需要写 Verilog 的 Testbench 吗,还是 C 的 Testbench 转换了呢?
不需要。只需要提供 C Testbench 即可。工具会根据 C Testbench 生成 RTL 仿真所需要的激励。
3. 如果要做基于 FPGA 的算法加速,便于优化,是否应该优先考虑用 HLS 实现核心模块呢?
是的。先考虑核心模块,看核心模块采用 HLS 能带来多大收益(资源,速度)。
4. 请问综合报告里的 Slack 什么含义,有负值需要解决吗?
Slack = Target - (Estimated + Uncertainty),如果 Slack 小于0,说明设计无法达到期望的 Fmax(Target 对应的时钟频率),只有当 Slack 大于等于0时,时序收敛。Vitis HLS Synthesis 报告里 Slack 若为负,可以运行后续的 AMD Vivado™ Synthesis/Implementation,如果 Vivado 仍为负就需要回到 Vitis HLS 下优化。
5. 一个函数内有 loop1、loop2、loop3,loop1 产生 temp 变量会用于 loop2 和 loop3,这样整个函数不可以使用 dataflow,之前您说过可以把 temp 复制成temp2、temp3 分别应用进 loop2、loop3,这样就可以 DATAFLOW,这是必须要修改源码吗?有没有什么指令也有识别并复制变量的作用呢?
是的,要修改代码。DATAFLOW 要遵循一个 producer 对应一个 consumer 原则。
6. 最新的 Vitis HLS 还会用 system gen 模型吗?
Vitis HLS 可将生成的 RTL 代码封装为 SysGen 所支持的 IP 形式。