HLS高层次综合设计技巧--C++类和模板

一、C++类的综合和不可综合设计

1.HLS支持对C++的class类的综合;

2.注意的是,HLS是不支持对顶层类的综合的,HLS只支持对顶层函数的综合;

3.关于类的成员函数的综合,需要先将类进行实例化,然后才能综合类的函数

为什么HLS只是支持对顶层函数进行综合呢,而不支持对顶层的类进行综合呢?

因为综合要是资源确定的,函数的返回值,函数的类型都是确定的;但是类只是一个模板,

其需要实例化才能使用,你怎么让类作为顶层呢?

4.类本身是数据类型和方法的封装,但HLS只综合函数,不综合类。

5.HLS综合是基于函数调用的层次结构,类只是组织代码的方式。类的构造函数、成员函数等会在实例化后被综合为相应的硬件模块。

二、不支持对位于顶层的类和类成员函数进行综合。请例化顶层函数中的类。

函数作为HLS综合的基本单元

1.vivado hls将函数作为综合的基本单元

2.综合的国产是将c/c++代码中的函数调用层次转化为硬件模块

3.综合工具从指定的顶层函数开始,分析顶层函数和内部的所有子函数

4.递归的方式将所有的函数综合为对于的硬件模块;

c++类不是HLS的综合单元

1.类只是一种数据类型和方法的封装,它本身并不直接对应硬件模块,综合工具是无法将

一个类直接映射为硬件,智能综合类中的成员函数或者成员方法。

2.综合入口必须为函数是有道理的,函数作为入口,有明确的输入和输出接口以及调用语义;

类的实例化是一个对象,没有独立的调用概念,如果类或者类的实例化对象作为顶层,HLS综合工具

无法确定哪些成员函数应该综合,这些成员函数的调度顺序是怎么样的,顶层接口应该是怎么样的,

类的那个成员函数作为对外的top或者接口。

三、类是如何被综合工具综合的

1.类的综合方式

一般是在顶层函数中对类进行实例化,然后调用类的成员函数

要使类的成员函数被综合,必须在一个 顶层函数 内部创建该类的对象,并调用其方法。这样,成员函数就成为了顶层函数调用层次中的一部分,综合器会像处理普通子函数一样处理它们。

2.类综合的全流程

其中,类的构造函数被综合一个初始化过程,对参数进行初始化或者清理;这个在顶层函数的

类实例化的时候执行一次;

类中被调用得分方法综合为module块;

类的私有数据成员 taps 和 shift_reg 被映射为 FPGA 上的寄存器或分布式 RAM(取决于综合优化选择)。

四、类和顶层的综合

C++ 的类是一种代码组织和数据封装机制,它本身并不具备上述硬件属性:

类没有统一的"调用"概念:一个类可以包含多个成员函数,哪个成员函数应该被综合?它们的启动顺序和相互关系如何?

类没有单一的输入/输出接口:类的数据成员和成员函数的参数共同构成状态和通信,综合器无法从类的定义中自动推断出硬件端口。

类的生命周期不明确:类对象的创建、使用和销毁是软件概念,硬件中没有对应的对象生命周期管理机制。

Vivado HLS 基于 LLVM/clang 前端将 C/C++ 代码转换为中间表示(IR),然后进行硬件综合。其核心目标是生成静态、可预测的 RTL 电路,即所有函数调用、数据类型、内存访问等在综合时都必须完全确定。虚拟函数和多态性本质上是运行时动态分派机制,与静态综合的理念存在冲突。然而,Vivado HLS 在一定限制下支持虚拟函数,其根本原理是:在编译时(综合前)将虚函数调用静态解析为具体的函数实现,从而消除运行时的不确定性。

五、全局变量的最优化

在 Vivado HLS 中,全局变量(包括类的静态成员变量,其行为等同于全局变量)的使用会显著限制综合器的优化能力。根本原因在于:全局变量破坏了 HLS 综合所依赖的局部性和可分析性,使得编译器无法安全地执行许多硬件优化技术。以下从底层逻辑进行剖析。

相关推荐
Gigavision42 分钟前
基于BUAA-MIHR数据集的噪声解耦对比学习算法
人工智能·python·深度学习·算法
鹿角片ljp1 小时前
LeetCode 64:最小路径和复盘|二维 DP 与 ACM 模式完整写法
java·数据结构·算法
红海云1 小时前
Kimi 双端接入 CloudBase 的工程价值
人工智能·语言模型
计算机编程-吉哥2 小时前
YOLO26 vs YOLO11 vs YOLOv8:深度学习咖啡果实成熟度分割系统【计算机毕业设计选题推荐】
人工智能·python·深度学习·yolo·django·毕业设计
冬奇Lab2 小时前
一年前没启动 AI 提效的团队,今年在付什么钱?
人工智能
彧azz2 小时前
算法设计与分析:贪心与动态规划
数据结构·学习·算法·贪心算法·动态规划
NeoGressAI外贸数字化3 小时前
IOR新规9月18日生效:Form 5106六项资料自查清单
人工智能
Beyond_System|系统之外3 小时前
【学编程】Python基础编程题100道(21-60)
开发语言·python·算法
根目录下的猫3 小时前
RK3588适配的轻量级AI模型推荐
人工智能·后端·python·目标检测
weixin_6683 小时前
Cursor 插件使用说明:Linear 与 Figma
人工智能·cursor