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

写在前面

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

算术运算符

加减乘除基本操作。当处理定点数时候,要注意数据位宽的处理。原则遵循:大数据不溢出,小数据不损失。这样才能保证我们的数据运算结果的准确性。
HLS开发学习-07- Vivado HLS 中的 C++ 基本运算_第1张图片

算术赋值运算

让书写变得简洁,本质和算术运算差别不大。
HLS开发学习-07- Vivado HLS 中的 C++ 基本运算_第2张图片

示例

在示例中给出了这个操作函数的头文件,C文件还有部分的激励文件。
从函数的功能上,我们可以清楚的看出,仅仅是一个+常数的操作,但是这里要注意的一点就是,关于常数的类型的小tips。

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

HLS开发学习-07- Vivado HLS 中的 C++ 基本运算_第3张图片

自加、逻辑、条件运算

大家都学过,不解释了。
HLS开发学习-07- Vivado HLS 中的 C++ 基本运算_第4张图片

HLS开发学习-07- Vivado HLS 中的 C++ 基本运算_第5张图片
HLS开发学习-07- Vivado HLS 中的 C++ 基本运算_第6张图片

复数乘法示例

实现方法一

HLS开发学习-07- Vivado HLS 中的 C++ 基本运算_第7张图片

实现方法二

HLS开发学习-07- Vivado HLS 中的 C++ 基本运算_第8张图片

资源对比

两者实现的算法不同,消耗资源也不同。
HLS开发学习-07- Vivado HLS 中的 C++ 基本运算_第9张图片

最大公约数示例

下图的左侧我们可以看到,这里的算法实质,主要用到了取余的操作和判断条件。当b满足条件b==0时候,即可得到最大公约数。右边的流程图也很好理解。
HLS开发学习-07- Vivado HLS 中的 C++ 基本运算_第10张图片

代码示例

HLS开发学习-07- Vivado HLS 中的 C++ 基本运算_第11张图片

资源与接口分析

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

HLS开发学习-07- Vivado HLS 中的 C++ 基本运算_第12张图片

代码示例二(error)

这里用到了是递归操作,HLS工具不支持,所以无法完成算法的实现。
HLS开发学习-07- Vivado HLS 中的 C++ 基本运算_第13张图片

总结

Vivado HLS可以支持C/ c++中的所有基本运算符,在之前文章中提到了部分操作不支持,其余基本可以实现,可以满足算法复现的需求。
全面了解算法对于算法描述非常重要,只有在知道工具支持什么操作,我们才可以在复现算法的时候更加顺利。
Vivado HLS不支持递归函数
Vivado HLS不支持递归函数
Vivado HLS不支持递归函数
HLS开发学习-07- Vivado HLS 中的 C++ 基本运算_第14张图片

你可能感兴趣的:(#,HLS,开发)