5. 对两种不同大Data Pack Mode进行比较
我们可发现这两种方式的效果是差不多的,而且Data Pack可以可以减少延迟(latency)和初始间隔(interval),即提高吞吐量(throughput)。之所以可以提高,是因为把for循环做了一个展开。
6. 枚举类型(Enumerated Type)
所谓枚举类型,就是把一个数值定义为一个符号常量,需要用到关键词enum;对于枚举类型,其中的元素为被自动的分配一个整数,那么起始值为0,后续的会比前面的大1。
7. 总结
第六讲 Vivado HLS中的C++基本运算
1 . 算数运算
当我们操作数是定点数,我们需要注意数据位宽的处理,总体原则是大数据不溢出小数据不损失
2. 算数赋值运算
目的是书写的简洁
案例分析:添加一个常量
我们定义了一个无符号定点数,字长为10bit,整数部分为2bit。这个程序也比较简就是加一个常数0.25,再赋值。需要说明的是常数0.25参与在数据运算中,所以要进行数据类型的转换,明确告诉HLS它的数据类型,这是因为常数在HLS在参与到算数运算时,我们要明确告知数据类型,否则可能会把这个数判断成整数,单精度或者双精度的浮点数,从而导致一些错误。
3. 自增和自减关系运算符
4. 条件和关系运算
5. 逻辑运算和位运算
案例分析:欧几里得算法
在数学中,欧几里得算法或欧几里得算法是计算两个数的最大公约数(GCD)的有效方法
另一种实现方法,递归但是需要强调的是,HLS是不支持递归算法的。
6. 总结:
- Vivado HLS是支持C++中所用的基本运算。
- 我们在描述算法时,对算法的理解是非常的重要。
- Vivado HLS是不支持递归算法的。