Vivado HLS #pragma 学习笔记(一)

 

https://www.xilinx.com/html_docs/xilinx2018_2/sdaccel_doc/hls-pragmas-okr1504034364623.html

数据精度

支持任意精度,任意位宽的有/无符号数据类型

#include "ap_int.h"V

unsigned int : ap_uint<width>

signed int : ap_int<width>

unsigned fixed : ap_ufixed<width,width_int>

signed fixed : ap_fixed<width,width_int>

资源类型

#pragma HLS RESOURCE variable=<temp> core=<Xilinx core>                //temp:变量名       Xilinx core :类型 

#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> factor=<int> dim=<int>   //指定一个数组中的数据如何在存储资源中进行排布

name:划分的数组名

type :complete(打散分别存储) ,cyclic(按factor取模进行划分), block(按份数划分成几块)       //划分方式

factor:划分的份数

dim=1,2,3...(dim=0)   //划分的维度,0表示所有维度

循环边界

#pragma HLS loop_tripcount min=<int> max=<int> avg=<int>     //HLS中循环迭代次数应为定值,否则Latency会等于?,设定循环迭代的最大值,最小值,平均值便于性能分析

 

循环展开

#pragma HLS UNROLL (factor=<int>)     //将循环体内的代码复制多份,需要占用更多硬件,和array_partition配合使用,未指定factor,则将循环完全展开

循环流水化

#pragma HLS PIPELINE(II=<int>)           //使循环的多个iteration并发执行,II为多个iteration的间隔,默认为1(即fully pipeline),在HLS中PIPELINE下面的循环会完全展开,因此可以去掉UNROLL

数据流

#pragma HLS dataflow     //任务级流水化而不是顺序执行    默认用double-buffer来实现

STREAM

#pragma HLS stream variable=<variable> depth=<int> dim=<int>      //以高性能FIFO代替高资源占用的double-buffered RAM,必须有一个producer和一个consumer

数据类型:hls::stream<stream_type> (+ &<参数>  当为函数参数)

函数内联

#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中的部分复杂函数

不要使用函数指针、虚函数等

不可以使用递归函数调用

循环体优化,如:复杂逻辑拆分、减少分支

应将目标功能切分为多个彼此独立的子模块,自底向上

 

 

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值