支持任意精度,任意位宽的有/无符号数据类型
#include "ap_int.h"V
unsigned int : ap_uint
signed int : ap_int
unsigned fixed : ap_ufixed
signed fixed : ap_fixed
#pragma HLS RESOURCE variable=
#pragma HLS RESOURCE variable=temp core=AddSub_DSP //指定计算的资源类型
#pragma HLS RESOURCE variable=InitPara core=RAM_2P_BRAM //指定array InitPara的存储资源类型,包括RAM_2P_BRAM,RAM_2P_URAM,RAM_2P_LUTRAM,FIFO_LUTRAM等等
#pragma HLS array_partition variable=
name:划分的数组名
type :complete(打散分别存储) ,cyclic(按factor取模进行划分), block(按份数划分成几块) //划分方式
factor:划分的份数
dim=1,2,3...(dim=0) //划分的维度,0表示所有维度
#pragma HLS loop_tripcount min=
#pragma HLS UNROLL (factor=
#pragma HLS PIPELINE(II=
#pragma HLS dataflow //任务级流水化而不是顺序执行 默认用double-buffer来实现
#pragma HLS stream variable=
数据类型:hls::stream
#pragma HLS INLINE(off) //控制函数在被调用的时候是否内联
内联函数inline:引入内联函数的目的是为了解决程序中函数调用的效率问题,这么说吧,程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换,而对于其他的函数,都是在运行时候才被替代。这其实就是个空间代价换时间的i节省。所以内联函数一般都是1-5行的小函数。
#pragma HLS INTERFACE m_axi depth=32 port=Out_ddr
#pragma HLS INTERFACE <类型> depth=<大小> port=<名称>
#pragma HLS data_pack variable=<变量名> //以struct形式将数据封装,增加数据的位宽
不可以使用动态内存分配操作
不可以调用系统函数,如printf( )
标准库函数不是完整支持,例如math.h中的部分复杂函数
不要使用函数指针、虚函数等
不可以使用递归函数调用
循环体优化,如:复杂逻辑拆分、减少分支
应将目标功能切分为多个彼此独立的子模块,自底向上