HLS开发学习-07- Vivado HLS 中的 C++ 基本运算

简介: HLS开发学习-07- Vivado HLS 中的 C++ 基本运算

写在前面


本文是本系列专题的第七篇,参考高亚军老师的视频教程以及课程的ppt,主要介绍了vivado HLS的C++ 基本运算处理。

算术运算符


加减乘除基本操作。当处理定点数时候,要注意数据位宽的处理。原则遵循:大数据不溢出,小数据不损失。这样才能保证我们的数据运算结果的准确性。

image.png

算术赋值运算


让书写变得简洁,本质和算术运算差别不大。

image.png

示例


在示例中给出了这个操作函数的头文件,C文件还有部分的激励文件。

从函数的功能上,我们可以清楚的看出,仅仅是一个+常数的操作,但是这里要注意的一点就是,关于常数的类型的小tips。

  • 当分配常数涉及到运算符时,常数必须首先转换为ap_(u)固定类型,否则,Vivado HLS将文字解释为整数或float或者是double类型,可能无法找到合适的操作,从而产生错误。

image.png

自加、逻辑、条件运算


大家都学过,不解释了。

image.png

image.png

image.png

复数乘法示例


实现方法一


image.png

image.png

资源对比


两者实现的算法不同,消耗资源也不同。

image.png

最大公约数示例


下图的左侧我们可以看到,这里的算法实质,主要用到了取余的操作和判断条件。当b满足条件b==0时候,即可得到最大公约数。右边的流程图也很好理解。

image.png

代码示例


image.png

资源与接口分析


在HLS下,很容易就可以把这个算法给描述出来。

image.png

代码示例二(error)


这里用到了是递归操作,HLS工具不支持,所以无法完成算法的实现。

image.png

总结


Vivado HLS可以支持C/ c++中的所有基本运算符,在之前文章中提到了部分操作不支持,其余基本可以实现,可以满足算法复现的需求。

全面了解算法对于算法描述非常重要,只有在知道工具支持什么操作,我们才可以在复现算法的时候更加顺利。

Vivado HLS不支持递归函数

Vivado HLS不支持递归函数

Vivado HLS不支持递归函数

image.png

目录
相关文章
WK
|
16天前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
38 1
|
22天前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
1月前
|
Rust 资源调度 安全
为什么使用 Rust over C++ 进行 IoT 解决方案开发
为什么使用 Rust over C++ 进行 IoT 解决方案开发
66 7
WK
|
15天前
|
开发框架 移动开发 Java
C++和Java哪个更适合开发移动应用
本文对比了C++和Java在移动应用开发中的优劣,从市场需求、学习难度、开发效率、跨平台性和应用领域等方面进行了详细分析。Java在Android开发中占据优势,而C++则适合对性能要求较高的场景。选择应根据具体需求和个人偏好综合考虑。
WK
30 0
WK
|
16天前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
19 0
|
1月前
|
Java 编译器 C++
c++学习,和友元函数
本文讨论了C++中的友元函数、继承规则、运算符重载以及内存管理的重要性,并提到了指针在C++中的强大功能和使用时需要注意的问题。
19 1
|
1月前
|
NoSQL API Redis
如何使用 C++ 开发 Redis 模块
如何使用 C++ 开发 Redis 模块
|
2月前
|
物联网 C# C语言
物联网开发中C、C++和C#哪个更好用
在物联网(IoT)开发中,C、C++和C#各有优缺点,适用场景不同。C语言性能高、资源占用低,适合内存和计算能力有限的嵌入式系统,但开发复杂度高,易出错。C++支持面向对象编程,性能优秀,适用于复杂应用,但学习曲线陡峭,编译时间长。C#易于学习,与.NET框架结合紧密,适合快速开发Windows应用,但性能略低,平台支持有限。选择语言需根据具体项目需求、复杂性和团队技术栈综合考虑。
|
6天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
29 4
|
7天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
26 4