一、核心转换机制1.C代码是顺序执行的RTL代码是并行执行的流水线化的和时钟clock同步2.C代码转为RTL代码的步骤步骤1:前端解析LLVM/CLang IR生成步骤2schedule调度和bind绑定通过调度的定时分析和功能单元的资源绑定步骤3存储单元和互联结构的分配步骤4CDFG控制数据流图的提取步骤5有限状态机FSM生成 Datapath数据路径 Control控制逻辑步骤6RTL的生成和输出主要HLS不是翻译而是通过硬件的调度和资源分配的约束下的架构综合。核心概念包括基本块数据控制流图时间调度空间绑定资源的分配以及pragma指令驱动和引导。二、构建机制1.前端编译和数据流图的提取使用Clang/LLVM产生IR中间表示2.scheduling进行时钟映射3.bingding allocation绑定和分配进行空间映射4.FSMDatapath数据路径5.基于约束的后端优化与RTL实例化处理pipeline,unroll,dataflow三、从“时间串行”到“空间并行”的映射C语言是冯·诺依曼模型指令按时间顺序串行执行而RTL是数据流模型强调逻辑门在物理空间上的并发与时钟周期的对齐。HLS工具将抽象的时间顺序翻译为确定的时钟周期Time和硬件单元Space的二维坐标系。它是通过构建控制数据流图CDFG来实现的。1.前端解析与中间表示IR生成动作Vivado HLS调用底层的 Clang/LLVM 编译器将C/C代码解析为抽象语法树AST并生成 LLVM IR中间表示。逻辑意义在这个阶段所有C面向对象的特性重载、模板等被剥离只剩下纯粹的数学运算、内存读写、分支和循环。这步与软件编译器完全一致。2.高级综合分析与控制数据流图CDFG提取动作工具对LLVM IR进行数据流分析Dataflow Analysis和依赖分析Dependency Analysis。提取出控制流图CFG和数据依赖图DDG两者合并为 CDFG。逻辑意义这是硬件化最关键的一步。工具识别出哪些数组需要映射成BRAM/URAM哪些循环体存在可并行的数据依赖以及哪些计算在数据准备好之前可以提前执行。同时进行指针别名分析Pointer Alias Analysis确定是否存在内存冲突。3.调度Scheduling—— 解决“何时做”动作调度器以目标时钟周期如 -clk 3ns为度量衡将CDFG中的每个操作加减乘除、比较分配到具体的时钟周期Cycle上。底层逻辑如果某个操作如浮点除法需要5个周期调度器会将其展开到5个连续周期或者放入流水线。模调度Modulo Scheduling当您加了PIPELINE II1时工具会计算“循环依赖距离”。它会在不违反数据依赖的前提下将迭代错开。例如A[i] B[i] C[i]调度器会实现Cycle 0读B和CCycle 1加法Cycle 2写回A同时Cycle 1又开始读下一轮的B和C。这就是II1的物理实现。4.绑定Binding与分配Allocation—— 解决“用什么做放哪做”动作决定了物理硬件资源的映射。比如这个加法器用 DSP48 还是纯 LUT 实现这个数组用 BRAM、URAM 还是 LUTRAM底层逻辑这是一个线性规划或二次规划的最优搜索过程。如果在 UNROLL complete 下使用了3个加法如果DSP资源有限绑定器可能让这3个加法共享1个DSP代价是引入多路复用器MUX增加延迟或者在空间上展开3个DSP。您加的 #pragma HLS RESOURCE 和 #pragma HLS ARRAY_PARTITION 就是在这个阶段给出强引导强制工具进行某种特定的分配。5.数据路径和控制逻辑的生成图和图论在高层次综合中广泛应用
高层次综合C代码转为RTL代码
一、核心转换机制1.C代码是顺序执行的RTL代码是并行执行的流水线化的和时钟clock同步2.C代码转为RTL代码的步骤步骤1:前端解析LLVM/CLang IR生成步骤2schedule调度和bind绑定通过调度的定时分析和功能单元的资源绑定步骤3存储单元和互联结构的分配步骤4CDFG控制数据流图的提取步骤5有限状态机FSM生成 Datapath数据路径 Control控制逻辑步骤6RTL的生成和输出主要HLS不是翻译而是通过硬件的调度和资源分配的约束下的架构综合。核心概念包括基本块数据控制流图时间调度空间绑定资源的分配以及pragma指令驱动和引导。二、构建机制1.前端编译和数据流图的提取使用Clang/LLVM产生IR中间表示2.scheduling进行时钟映射3.bingding allocation绑定和分配进行空间映射4.FSMDatapath数据路径5.基于约束的后端优化与RTL实例化处理pipeline,unroll,dataflow三、从“时间串行”到“空间并行”的映射C语言是冯·诺依曼模型指令按时间顺序串行执行而RTL是数据流模型强调逻辑门在物理空间上的并发与时钟周期的对齐。HLS工具将抽象的时间顺序翻译为确定的时钟周期Time和硬件单元Space的二维坐标系。它是通过构建控制数据流图CDFG来实现的。1.前端解析与中间表示IR生成动作Vivado HLS调用底层的 Clang/LLVM 编译器将C/C代码解析为抽象语法树AST并生成 LLVM IR中间表示。逻辑意义在这个阶段所有C面向对象的特性重载、模板等被剥离只剩下纯粹的数学运算、内存读写、分支和循环。这步与软件编译器完全一致。2.高级综合分析与控制数据流图CDFG提取动作工具对LLVM IR进行数据流分析Dataflow Analysis和依赖分析Dependency Analysis。提取出控制流图CFG和数据依赖图DDG两者合并为 CDFG。逻辑意义这是硬件化最关键的一步。工具识别出哪些数组需要映射成BRAM/URAM哪些循环体存在可并行的数据依赖以及哪些计算在数据准备好之前可以提前执行。同时进行指针别名分析Pointer Alias Analysis确定是否存在内存冲突。3.调度Scheduling—— 解决“何时做”动作调度器以目标时钟周期如 -clk 3ns为度量衡将CDFG中的每个操作加减乘除、比较分配到具体的时钟周期Cycle上。底层逻辑如果某个操作如浮点除法需要5个周期调度器会将其展开到5个连续周期或者放入流水线。模调度Modulo Scheduling当您加了PIPELINE II1时工具会计算“循环依赖距离”。它会在不违反数据依赖的前提下将迭代错开。例如A[i] B[i] C[i]调度器会实现Cycle 0读B和CCycle 1加法Cycle 2写回A同时Cycle 1又开始读下一轮的B和C。这就是II1的物理实现。4.绑定Binding与分配Allocation—— 解决“用什么做放哪做”动作决定了物理硬件资源的映射。比如这个加法器用 DSP48 还是纯 LUT 实现这个数组用 BRAM、URAM 还是 LUTRAM底层逻辑这是一个线性规划或二次规划的最优搜索过程。如果在 UNROLL complete 下使用了3个加法如果DSP资源有限绑定器可能让这3个加法共享1个DSP代价是引入多路复用器MUX增加延迟或者在空间上展开3个DSP。您加的 #pragma HLS RESOURCE 和 #pragma HLS ARRAY_PARTITION 就是在这个阶段给出强引导强制工具进行某种特定的分配。5.数据路径和控制逻辑的生成图和图论在高层次综合中广泛应用