HLS之pragma

本文主要涉及与HLS常用pragma的一些知识


前言

本文主要涉及与HLS相关的一些知识


提示:以下是本篇文章正文内容。

一、HLS重点Pragma

          HLS中Pragma主要涉及三个方面的应用,主要是硬件资源,数据流设计,接口设计。

1.硬件资源指定(RESOURCE)

    指定向FPGA硬件资源映射时的资源类型

    关键字:RESOURCE

    文法:

#pragma HLS RESOURCE variable=<temp> core=<Xilinx core>

    Examples:

int A[1024];
#pragma HLS RESOURCE variable=A core=RAM_T2P_BRAM

     如上例所示,例如我们申明了一个数组,而我们需要用一个双口的BRAM来存储数组里的数据,我们可以使用pragma,<temp>处填上变量名,<core>处填上对应的硬件资源类型。

注:数组可以存储为片上的存储单元/Buffer/Scratchpad Memory

       一般的硬件资源类型有两种:

      (1)Flip-flop(FF)

  • 单个时钟周期内可以并行访问多个地址;
  • 单个时钟周期内可完成度,写操作;
  • 容量有限,典型值大约在100Kbytes;                

      (2)Block RAM(BRAM)

  • 高容量:典型值在Mbytes级别
  • 访问性能受限:端口有限

2.数组划分(array_partition)

    指定一个线上资源的存储,如何在线上资源中进行排布

    关键字:array_partition

    文法:

#pragma HLS array_partition variable=<name><type> factor=<int> dim=<int>

 <name>:划分的数组名;

 <factor>:划分的份数;

 <type>:划分方式:其中包含:

  • block:按照factor平均分割;
  • cyclic:按取模的方式划分;
  • complete:将数组打散为N个元素分别存储

<dim>:多维数组中指定划分的维度;

3.循环边界(loop_tripcount )

    用于指定循环边界,在HLS综合过程中,循环迭代次数要求为定值,否则无法获得性能估计结果。此时我们可以利用loop_tripcount来指定循环迭代的最小值,最大值和平均值,用于比较准确的性能分析。

   关键字:loop_tripcount 

   文法:

#pragma HLS loop_tripcount min=<int> max=<int> avg=<int>

4.循环展开(UNROLL)

    用于循环并行优化,根据设定的factor,将循环体内的代码复制多份,指定不同的硬件资源来实现循环结构,复制多份代码并行处理同一任务,以硬件资源的消耗换取性能的提升

    关键字:UNROLL

    文法:

#pragma HLS UNROLL(factor=<int>)

5.循环流水化(PIPELINE/dataflow)

    1.PIPELINE

   将循环中的操作划分为多个流水级,从而使多个iteration并发执行

    关键字:PIPELINE

    文法:

#pragma HLS PIPELINE (II = <int>)

(默认II为1)

   2.dataflow

    任务级流水化,比PIPELINE颗粒更大,作用于不同的子函数

    关键字:dataflow

    文法:

#pragma HLS dataflow

6.函数内联(INLINE)

    控制函数在调用时是否内联

    关键字:INLINE

    文法:

#pragma HLS INLINE(off)

二、数值精度

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

头文件:"ap_int.h","ap_fixed.h"

精度处理文法: 在cpp文件中添加头文件后,可定义(width为位宽):

  • Unsigned int :     ap_uint<width>
  • Signed int :    ap_int<width>
  • Unsigned fixed:    ap_ufixed<width , width_int>
  • Signed fixed:   ap_fixed<width , width_int>

在优化硬件算法时,可合理分配数据位宽,注意硬件资源,效率与运算精度的平衡。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值