目录
HLS 简介
HLS: High-Level Synthesis
简单来说,HLS 是为了免去硬件设计者使用 HDL 编程 FPGA的步骤,用 C 语言完成算法设计、验证、综合过程控制,利用 FPGA 实现所需逻辑。
1. 工作过程
HLS 的工作主要分为以下三段:
1.1 Scheduling 部署
这一部分决定了运算操作在哪一个时钟周期完成。分配取决于:
a. 时钟周期的长度、频率
b. 由目标设备所定义的,运算操作完成所需的时间
c. 用户指定的优化指令
如果时钟周期足够长,或者目标设备足够快,将会有更多的运算操作在一个周期内完成。反之,有些运算操作将在多个周期完成。
1.2 Binding 捆绑
指定完成运算的硬件资源,HLS 需要目标设备的信息来完成此步骤。
1.3 Control logic extraction 控制逻辑提取
提取控制逻辑,建立有限状态机(FSM),以在 RTL 设计中顺序完成运算。
2. 综合过程
HLS 的对 C 程序的综合主要包含以下内容
- 将顶层函数的变量综合为 RTL 的 I/O 接口
- 将 C 函数综合成为 RTL 层次的块(Blocks) 。 如果 C 函数中有子函数的话,形成的RTL也由有对应的子模块组成。
- C 函数中的循环 Loop 默认没有展开(rolled)。如果希望展开循环,并行执行的话,需要使用优化指令(optimization directivities)。Loop 也可以流水化执行。
- C 语言数组在最终的 FPGA 设计中将被综合成为 RAM 块,或者UltraRAN块。如果数组是顶层函数接口,那么数组将被综合成为 ports 来访问设计外的 RAM 块。
HLS的综合会在默认行为,限制constraints,以及用户指定的优化指令(optimization directivities)的基础上建立一个优化过的实现。优化指令(optimization directivities)可以用来修改或者控制内部逻辑和 I/O ports的默认行为。这使得运用相同 C 代码生成不同硬件实现成为可能。
3. 性能参数
为了判断设计是否符合要求,综合报告会包含以下信息
- 面积 Area:包括查找表 LUT,寄存器 registers&