Vivado Design Suite 用户指南
高层次综合
UG902 (v2019.2) 2020 年 1 月 13 日
条款中英文版本如有歧义,概以英文版本为准。
修订历史
下表列出了本文档的修订历史。
章节
更新命令参考信息。
HLS 数学库和定点数学函数
移除假性依赖关系以改善循环流水线化
吞吐量最优化
将数组指定为乒乓缓存或 FIFO
Stable 数组、set_directive_stable
在数据流内使用 ap_ctrl_none
RTL 黑盒、RTL 黑盒 JSON 文件和 add_files
波形查看器
SSR FFT IP 库
修订历史
修订综述
2020 年 1 月 13 日 2019.2 版
更新命令。
2019 年 10 月 30 日 2019.2 版
移除 Gamma 函数。
2019 年 7 月 12 日 2019.1 版
澄清有关依赖关系的信息。
2019 年 5 月 22 日 2019.1 版
更新有关数据流和流水线化吞吐量部分的信息。
更新乒乓缓存的解释。
新增有关 stable 数组的信息。
新增有关在数据流内使用 ap_ctrl_none 的信息。
新增有关 RTL 黑盒新功能的信息、新增必需 JSON 文件的规格,
并更新 add_files 命令以包含 -blackbox 选项。
新增有关波形查看器 (Waveform Viewer) 的信息。
新增有关新超采样率 (SSR) FFT 的信息。
新增下列小节:
使用 SSR FFT 定点配置的建议流程
SSR FFT IP 库的使用
UG902 (v2019.2) 2020 年 1 月 13 日
高层次综合
china.xilinx.com
2
Send Feedback
目录
修订历史..........................................................................................................................................................................2
第 1 章:高层次综合...............................................................................................................................................5
高层次综合的优势........................................................................................................................................................... 5
高层次综合基础............................................................................................................................................................... 5
理解 Vivado HLS........................................................................................................................................................... 10
使用 Vivado HLS........................................................................................................................................................... 15
高效硬件的数据类型......................................................................................................................................................59
管理接口........................................................................................................................................................................ 65
对设计进行最优化......................................................................................................................................................... 97
验证 RTL...................................................................................................................................................................... 143
导出 RTL 设计..............................................................................................................................................................154
第 2 章:高层次综合 C 语言库.................................................................................................................... 160
任意精度数据类型库....................................................................................................................................................160
HLS 流传输库.............................................................................................................................................................. 172
HLS 数学库.................................................................................................................................................................. 179
HLS 视频库.................................................................................................................................................................. 188
HLS IP 库..................................................................................................................................................................... 188
HLS 线性代数库...........................................................................................................................................................214
HLS DSP 库..................................................................................................................................................................223
HLS SQL 库..................................................................................................................................................................225
第 3 章:高层次综合编码样式.....................................................................................................................226
不受支持的 C 语言构造............................................................................................................................................... 226
C 语言测试激励文件....................................................................................................................................................230
函数..............................................................................................................................................................................236
RTL 黑盒...................................................................................................................................................................... 237
循环..............................................................................................................................................................................242
数组..............................................................................................................................................................................248
数据类型...................................................................................................................................................................... 255
C 语言内置函数........................................................................................................................................................... 276
硬件高效型 C 语言代码............................................................................................................................................... 277
C++ 类和模板...............................................................................................................................................................292
断言..............................................................................................................................................................................299
SystemC 综合..............................................................................................................................................................301
第 4 章:高层次综合参考指南.....................................................................................................................318
命令参考...................................................................................................................................................................... 318
UG902 (v2019.2) 2020 年 1 月 13 日
高层次综合
china.xilinx.com
3
Send Feedback
GUI 参考......................................................................................................................................................................379
接口综合参考...............................................................................................................................................................383
AXI4-Lite 从接口 C 驱动参考...................................................................................................................................... 397
HLS 视频函数库...........................................................................................................................................................409
HLS 线性代数库函数................................................................................................................................................... 409
HLS DSP 库函数.......................................................................................................................................................... 417
HLS SQL 库函数.......................................................................................................................................................... 429
C 语言任意精度类型....................................................................................................................................................431
C++ 任意精度类型....................................................................................................................................................... 443
C++ 任意精度定点类型................................................................................................................................................460
SystemC 类型与 Vivado HLS 类型之比较..................................................................................................................479
RTL 黑盒 JSON 文件.................................................................................................................................................... 485
附录 A:附加资源与法律提示......................................................................................................................488
赛灵思资源.................................................................................................................................................................. 488
Documentation Navigator 与设计中心....................................................................................................................488
参考资料...................................................................................................................................................................... 488
请阅读:重要法律提示................................................................................................................................................489
UG902 (v2019.2) 2020 年 1 月 13 日
高层次综合
china.xilinx.com
4
Send Feedback
第 1 章:高层次综合
第 1 章
高层次综合
高层次综合的优势
赛灵思 Vivado® 高层次综合 (HLS) 工具将 C 语言规格转换为寄存器传输级 (RTL) 实现,供您综合到赛灵思现场可编程门
阵列 (FPGA) 中。您可使用 C、C++ 或 SystemC 来编写 C 语言规格,FPGA 可提供大规模并行处理架构,其性能、成本
和功耗都比传统处理器更胜一筹。本章提供了高层次综合概述。
注释:如需了解有关 FPGA 架构和 Vivado HLS 基本概念的更多信息,请参阅《采用 Vivado 高层次综合开展 FPGA 设
计的简介》(UG998)。
高层次综合将硬件域和软件域桥接在一起,从而提供如下主要优势:
• 提升硬件设计人员的工作效率
• 为软件设计人员提升系统性能
创建高性能硬件时,硬件设计人员可以在更高的抽象层次上开展工作。
软件开发者可以在新的编译目标(即 FPGA)上加速完成其算法的计算密集型部分操作。
通过使用高层次综合设计方法,您即可:
• 在 C 语言层次开发算法
从占用开发时间的实现细节中抽身
• 在 C 语言层次执行验证
以相比于传统硬件描述语言更快的速度验证设计的功能正确性。
• 通过最优化指令来控制 C 语言综合进程
创建特定的高性能硬件实现。
• 使用最优化指令从 C 语言源代码创建多种实现
浏览设计空间,提升找到最优化实现的可能性。
• 创建可读且可移植的 C 语言源代码
将 C 语言源代码目标调整为其它器件,并将 C 语言源代码整合到新工程中。
高层次综合基础
高层次综合所含阶段如下:
UG902 (v2019.2) 2020 年 1 月 13 日
高层次综合
china.xilinx.com
5
Send Feedback
第 1 章:高层次综合
• 调度
根据下列条件判定每个时钟周期内发生的操作:
• 时钟周期或时钟频率长度
• 操作完成所需时间(由目标器件来定义)
• 用户指定的最优化指令
如果时钟周期延长或者目标 FPGA 速度加快,那么在单一时钟周期内可完成更多操作,所有操作都可能在一个时钟
周期内完成。反之,如果时钟周期缩短或者目标 FPGA 速度减慢,那么高层次综合会自动将操作调度到更多个时钟
周期内完成,部分操作可能需要作为多周期资源来实现。
判定用于实现调度的每项操作所需的硬件资源。高层次综合会使用有关目标器件的信息来实现最优化解决方案。
提取控制逻辑以创建有限状态机 (FSM) 以便对 RTL 设计中的操作进行排序。
• 绑定
• 控制逻辑提取
高层次综合按如下方式综合 C 语言代码:
• 顶层函数实参综合到 RTL I/O 端口内
• C 语言函数综合到 RTL 层级内的块中
• C 语言函数中的循环默认情况下全部保持收起状态。
如果 C 语言代码包含子函数层级,那么最终 RTL 设计将包含与原始 C 语言函数层级具有一对一对应关系的模块或
实体层级。函数的所有实例都使用相同 RTL 实现或时钟。
收起循环时,综合会为循环的单次迭代创建逻辑,RTL 设计会为序列中循环的每次迭代都执行此逻辑。通过使用最
优化指令,即可展开循环以允许并行执行所有迭代。 循环还可通过如下任一方法实现流水线化:通过有限状态机细
颗粒度实现(循环流水线化)或者采用基于较粗颗粒度的握手的实现(数据流)。
如果数组位于顶层函数接口上,那么高层次综合可将此数组作为端口来实现,以便访问设计外部的块 RAM。
• C 语言代码中的数组可综合到最终 FPGA 设计中的块 RAM 或 UltraRAM 中
高层次综合可基于默认行为、约束和您指定的任意最优化指令来创建最优化的实现。您可使用最优化指令来修改和控制
内部逻辑和 I/O 端口的默认行为。这样您即可从相同 C 语言代码生成不同的硬件实现。
为判定设计是否满足您的要求,您可复查高层次综合生成的综合报告中的性能指标。分析报告后,您可使用最优化指令
来对实现进行调优。综合报告包含有关如下性能指标的信息:
• 面积:根据 FPGA 中可用资源(包括查找表 (LUT)、寄存器、块 RAM 和 DSP48)实现设计所需的硬件资源量。
• 时延:函数计算所有输出值所需的时钟周期数。
• 启动时间间隔 (II):函数接受新输入数据之前的时钟周期数。
• 循环迭代时延:完成循环的单次迭代所需的时钟周期数。
• 循环启动时间间隔:下一次循环迭代开始处理数据前的时钟周期数。
• 循环时延:执行所有循环迭代的周期数。
UG902 (v2019.2) 2020 年 1 月 13 日
高层次综合
china.xilinx.com
6
Send Feedback
第 1 章:高层次综合
调度和绑定示例
下图显示了此代码示例的调度和绑定阶段的示例:
int foo(char x, char a, char b, char c) {
char y;
y = x*a+b+c;
return y;
}
图 1:调度和绑定示例
Clock Cycle
Scheduling
Phase
1
*
a
x
b
c
2
3
+
y
+
Initial Binding
Phase
Target Binding
Phase
Mul
AddSub
AddSub
DSP48
AddSub
X14220-061518
在此示例的调度阶段,根据高层次综合的调度,在每个时钟周期内将执行以下操作:
• 第一个时钟周期:乘法和第一次加法
• 第二个时钟周期:第二次加法并生成输出
注释:在上图中,第一个和第二个时钟周期之间的方块指示内部寄存器存储变量的时间。在此示例中,高层次综合仅要
求在一个时钟周期内寄存加法的输出。第一个周期读取 x、a 和 b 数据端口。第二个周期读取数据端口 c 并生成输出
y。
在最终的硬件实现中,高层次综合将顶层函数的实参实现为输入和输出 (I/O) 端口。在此示例中,实参是简单数据端
口。因为每个输入变量都是 char 类型,所以输入数据端口位宽均为 8 位。return 函数为 32 位 int 数据类型,而输
出数据端口位宽为 32 位。
重要提示!在硬件中实现 C 语言代码的优点是所有运算都在更少的时钟周期内完成。在此示例中,完成运算仅需 2 个
时钟周期。在中央处理器 (CPU) 中,即使这个简单的代码示例也需要更多时钟周期才能完成。
在此示例的初始绑定阶段,高层次综合使用组合乘法器 (Mul) 实现乘法运算,并使用组合加法器/减法器 (AddSub) 实现
两次加法运算。
UG902 (v2019.2) 2020 年 1 月 13 日
高层次综合
china.xilinx.com
7
Send Feedback
第 1 章:高层次综合
在目标绑定阶段,高层次综合使用 DSP48 资源实现乘法器和其中一项加法运算。DSP48 资源是 FPGA 架构中可用的计
算块,可在高性能和高效实现之间达成理想的平衡。
控制逻辑提取和 I/O 端口实现示例
下图显示了对应此代码示例的控制逻辑的提取和 I/O 端口的实现过程:
void foo(int in[3], char a, char b, char c, int out[3]) {
int x,y;
for(int i = 0; i < 3; i++) {
x = in[i];
y = a*x + b + c;
out[i] = y;
}
}
图 2:控制逻辑提取和 I/O 端口实现示例
Clock
b
c
a
in_data
+
+
in_addr
in_ce
Finite State Machine (FSM)
C0
C1
C2
x3
y
out_data
+
*
x
out_addr
out_ce
out_we
C3
X14218
此代码示例执行的运算与前述示例相同。但它在 for 循环内执行运算,且 2 个函数实参为数组。调度此代码后,生成的
设计在 for 循环内执行 3 次该逻辑。高层次综合会从 C 语言代码自动提取控制逻辑,并在 RTL 设计中创建 FSM 以对这
些运算进行排序。高层次综合在最终 RTL 设计中将顶层函数实参作为端口来实现。类型为 char 的标量变量将映射到
标准 8 位数据总线端口。数组实参(如 in 和 out)包含完整数据集合。
在高层次综合中,数组默认综合到块 RAM 中,但有其它选项可供选择,例如,FIFO、分布式 RAM 和独立寄存器。使
用数组作为顶层函数中的实参时,高层次综合假定块 RAM 位于顶层函数外,并自动创建端口以访问位于设计外的块
RAM,例如,数据端口、地址端口和任何必需的芯片使能信号或写使能信号。
FSM 用于控制寄存器何时存储数据并控制任意 I/O 控制信号的状态。FSM 启动状态为 C0。在下一个时钟上,它会按
顺序依次进入 C1 状态、C2 状态和 C3 状态。它会返回 C1、C2 和 C3 状态总计 3 次,最后返回 C0 状态。
UG902 (v2019.2) 2020 年 1 月 13 日
高层次综合
china.xilinx.com
8
Send Feedback