1.high level code
2.parsing
3.source code optimizations
4.CDFG generation
5.scheduling and binding
6.rtl generation
7.rtl code
说明
vivado hls高层次综合步骤:
1.high level code
重点是设计可以综合测C代码,这个是HLS设计的基础。
使用c/c++/system c来描述电路和算法行为,在这个阶段避免使用动态内存分配,递归,不明确的指针操作等。
2.parsing
捷尔西奇涉及到编译器的前端的工作原理,这里有LLVM/Clang的参与。
这个部分需要将源代码的字符流分解为有意义的词素,关键字,标识符,运算符等。将c/c++的语法规则,
将词素组合程抽象的语法树,使用Clang/LLVM,输出AST。
此阶段在 LLVM IR 层面操作,是HLS流程中的关键预处理环节。其主要优化包括:
循环规范化:将循环转换为标准形式(如从0开始,步长为1),便于后续的循环分析和流水线/展开操作。
函数内联:将小函数或标记了 inline 的函数调用处直接展开,消除调用开销,通常能增加优化机会,但可能增加面积。
常量传播与死代码消除:简化逻辑。
特定于HLS的分析:如识别出可以转换为流水线或完全展开的循环结构。
3.source code optimizations
这个是LLVM层的HLS特定优化,循环转换和内联等优化
4.CDFG generation
生成关键的数据结构,从而链接软件分析和硬件综合
功能:创建设计的核心硬件行为模型,这是连接软件描述和硬件结构的桥梁。
原理与实现:
数据流图:表示数据如何通过操作(节点)流动。例如 c = a + b 会生成两个输入节点 (a, b),一个操作节点 (+),一个输出节点 (c)。
控制流图:表示控制的执行顺序,基本块为节点,跳转条件为边。
CDFG:将DFG嵌入到CFG的每个基本块中,形成一个统一的表示。它完整描述了“在什么条件下,数据执行哪些操作并流向何处”。HLS调度器将直接基于CDFG进行工作。
5.scheduling and binding
HLS的核心算法,决定了硬件的性能和资源使用
6.rtl generation
7.rtl code 这些步骤每个步骤的功能和具体实现步骤和原理详细说明一下
二、c语言和rtl的关系