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 综合所依赖的局部性和可分析性,使得编译器无法安全地执行许多硬件优化技术。以下从底层逻辑进行剖析。

相关推荐
荷蒲27 分钟前
【小白量化Qbuddy】用AI设计miniQMT指标公式计算量化平台
人工智能·python·机器人
猎头南楼28 分钟前
VLA 模型在双臂机器人操作中的工程落地:从 pi0 到 diffusion policy 的实践思考
人工智能·机器人
阿童木写作31 分钟前
跨境电商图片翻译工具,批量翻译视频字幕一键抠图
人工智能·python·音视频
ITmaster07311 小时前
从零开始实现一个 AI Agent CLI
人工智能
多弗朗皮卡丘1 小时前
算法详解4:买卖股票的最佳时机系列(上)
算法
user-猴子1 小时前
钛媒体测五款、光锥智能测WorkBuddy、用户测AiPy——三组实测交叉对比,哪款AI办公工具最值得下载?
人工智能
IT古董2 小时前
AI 资讯日报 | 2026年8月29日:开源大模型三连发,DeepSeek 500 亿融资落地
人工智能·开源
IT_陈寒2 小时前
Vite打包时的静态资源坑,我帮你踩过了
前端·人工智能·后端
IJCAST2 小时前
IJCAST最新一期已经发布
人工智能·深度学习·神经网络