0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用axi_master接口指令端的几个静态参数的优化技巧

OpenFPGA 来源:OpenFPGA 作者:Wen Chen 2022-07-01 09:39 次阅读
Vitis HLS 在从Vivaido HLS的升级换代中,以axi_master接口为起点的设计正在变得更易上手,其中很重要的一点就是更多的MAXI端口设计参数可以让用户通过指令传达到。这些参数可以分为两类: 静态参数指标:这些参数会影响内存性能,可以在 C 综合期间的编译时从编译的结果中很清楚地知道,突发读写地长度、数据端口宽度加宽、对齐等。
动态参数指标:这些参数本质上是动态的,取决于系统。例如,与 DDR/HBM 的通信效率在C综合编译时是未知的。 本文给大家提供利用axi_master接口指令端的几个静态参数的优化技巧,从扩展总线接口数量,扩展总线位宽,循环展开等角度入手。最核心的优化思想就是以资源面积换取高带宽的以便并行计算。
熟记这本文几个关键的设计点,让你的HLS内核接口效率不再成为设计的瓶颈! 7946633e-f8d5-11ec-ba43-dac502259ad0.png   以上代码在进行了c综合后,我们所有的指针变量都会依据指令的设置映射到axi-master上,但是因为根据指令中所有的端口都绑定到了一条总线gmem上。所以在综合的警告里面会提示:   

WARNING: [HLS 200-885] The II Violation in module 'example_Pipeline_VITIS_LOOP_55_1' (loop 'VITIS_LOOP_55_1'):Unable to schedule bus request operation ('gmem_load_1_req', example.cpp:56) on port 'gmem' (example.cpp:56) due to limited memory ports(II = 1). Please consider using a memory core with more ports or partitioning the array.

因为在axi-master总线上最高只能支持一个读入和一个写出同时进行,如果绑定到一条总线则无法同时从总线读入两个数据,所以最终的循环的II=2。解决这个问题的方法就是用面积换速度,我们实例化两条axi总线gmem和gmem0,最终达到II=1。 79773856-f8d5-11ec-ba43-dac502259ad0.png   当总线数量满足了我们并行读入的要求后,读取数据的位宽就成为了我们优化的方向:  因为读取的数据格式是int类型,所以这里的数据位宽就是32bit。  79883822-f8d5-11ec-ba43-dac502259ad0.png   为了能够转移数据传输瓶颈,在Vitis kernel target flow中,数据位宽在512bit的时候能够达到最高的数据吞吐效率。在Vitis HLS 中的新增了 max_widen_bitwidth 选项来自动将较短的数据位宽拼接到设定的较长的数据位宽选项。在这里我们可以将位宽设置到512bit的位宽,但是同时要向编译器说明,原数据位宽和指定的扩展位宽成整数倍关系。这个操作很简单,在数据读取的循环边界上,用(size/16)*16示意编译器即可。  799551d8-f8d5-11ec-ba43-dac502259ad0.png   扩展位宽后的结果可以在综合报告的接口部分看到数据位宽已经从32位扩展到512位。   79ae9b16-f8d5-11ec-ba43-dac502259ad0.png   优化到这一步我们的设计可以进行大位宽的同步读写,但是发现循环的trip count还是执行了1024次, 也就是说虽然位宽拓展到512后,还是一个循环周期计算一次32bit的累加。实际上512bit的数据位宽可以允许16个累加计算并行执行。   79cb865e-f8d5-11ec-ba43-dac502259ad0.png   为了完成并行度的优化,我们需要在循环中添加系数为16的unroll 指令,这样就可以生成16个并行执行累加计算的硬件模块以及线程。   79eb29be-f8d5-11ec-ba43-dac502259ad0.png   在循环中并行执行的累加操作,我们可以从schedule viewer中观察到并行度,可以从bind_op窗口中观察到operation实现所使用的硬件资源,可以从循环的trip_count 降低到了1024/16=64个周期,以及大大缩小的模块的整个latency中得以证明。   7a0aef6a-f8d5-11ec-ba43-dac502259ad0.png  7a2d8d0e-f8d5-11ec-ba43-dac502259ad0.png   最后我们比较了一下并行执行16个累加计算前后的综合结果,可以发现由于有数据的按位读写拆分拼接等操作,整个模块的延迟虽然没有缩短为16分之一,但是缩短为5分之一也是性能的极大提升了。   7a5b5f68-f8d5-11ec-ba43-dac502259ad0.png   最后的最后,RTL级别的co-sim仿真才让我们更加确信了数据的从两个并行读写,循环执行的周期减小至了64个时钟周期。   7a756c82-f8d5-11ec-ba43-dac502259ad0.png   以上内容是设计者在AXI总线接口中使用传统的数据类型时,提升数据传输效率和带宽的一揽子有效方法:  第一,扩展总线接口数量,以便并行读写。第二,扩展总线位宽,增加读写带宽。第三,循环展开,例化更多计算资源以便并行计算。 本文的优化方式还是基于内核设计本身的,下一篇文章,我们将使用Alveo板卡做一些突发传输的实验,深度定制传输需求,以真实仿真波形和测得的传输速度,从系统级别强化我们对于突发读写效率的认知。 审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    7573

    浏览量

    148206
  • 静态
    +关注

    关注

    1

    文章

    27

    浏览量

    14481
  • 代码
    +关注

    关注

    30

    文章

    4536

    浏览量

    66496

原文标题:开发者分享 | HLS, 巧用AXI_master总线接口指令的定制并提升数据带宽-面积换速度

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Xilinx FPGA IP之Block Memory Generator AXI接口说明

    之前的文章对Block Memory Generator的原生接口做了说明和仿真,本文对AXI接口进行说明。
    的头像 发表于 11-14 18:25 701次阅读
    Xilinx FPGA IP之Block Memory Generator <b class='flag-5'>AXI</b><b class='flag-5'>接口</b>说明

    ZYNQ的ARM和FPGA数据交互——AXI交互最重要的细节

    。 ③EMIO :由于MIO管脚有限,PS可以通过EMIO访问PL引脚。 ④GP :通用AXI接口,用来实现一般主从互联、数据交互,不用于高性能。 ⑤HP :是高性能/带宽的标准
    发表于 11-03 10:51

    AXI传输数据的过程

    AXI4为例,有AXI full/lite/stream之分。 在Xilinx系列FPGA及其有关IP核中,经常见到AXI总线接口AXI
    的头像 发表于 10-31 15:37 394次阅读
    <b class='flag-5'>AXI</b>传输数据的过程

    LogiCORE JTAG至AXI Master IP核简介

    LogiCORE JTAG至AXI Master IP核是一个可定制的核,可生成AXIAXI总线可用于处理和驱动系统中FPGA内部的AXI信号。AXI总线
    的头像 发表于 10-16 10:12 419次阅读
    LogiCORE JTAG至<b class='flag-5'>AXI</b> <b class='flag-5'>Master</b> IP核简介

    AXI IIC总线接口介绍

    LogiCORE™IPAXI IIC总线接口连接到AMBA®AXI规范,提供低速、两线串行总线接口,可连接大量流行的设备。
    的头像 发表于 09-28 15:56 4491次阅读

    什么是AXIAXI如何工作?

    Xilinx 从 Spartan-6 和 Virtex-6 器件开始采用高级可扩展接口 (AXI) 协议作为知识产权 (IP) 内核。Xilinx 继续将 AXI 协议用于针对 7 系列和 Zynq-7000 All Progr
    的头像 发表于 09-27 09:50 616次阅读
    什么是<b class='flag-5'>AXI</b>?<b class='flag-5'>AXI</b>如何工作?

    AMBA3.0 AXI总线接口协议的研究与应用

    本文介绍了AMBA3.0AXI的结构和特点,分析了新的AMBA3.0AXI协议相对于AMBA2.0的优点。它将革新未来高性能SOC总线互连技术,其特点使它更加适合未来的高性能、低延迟设计。最后介绍了基于AXI协议的设计实例,探讨
    发表于 09-20 08:30

    AXI VIP当作master时如何使用

      AXI接口虽然经常使用,很多同学可能并不清楚Vivado里面也集成了AXI的Verification IP,可以当做AXImaster
    的头像 发表于 07-27 09:19 640次阅读
    <b class='flag-5'>AXI</b> VIP当作<b class='flag-5'>master</b>时如何使用

    AXI VIP当作master时如何使用?

    AXI接口虽然经常使用,很多同学可能并不清楚Vivado里面也集成了AXI的Verification IP,可以当做AXImaster
    的头像 发表于 07-27 09:16 805次阅读
    <b class='flag-5'>AXI</b> VIP当作<b class='flag-5'>master</b>时如何使用?

    自定义AXI-Lite接口的IP及源码分析

    在 Vivado 中自定义 AXI4-Lite 接口的 IP,实现一个简单的 LED 控制功能,并将其挂载到 AXI Interconnect 总线互联结构上,通过 ZYNQ 主机控制,后面对 Xilinx 提供的整个
    发表于 06-25 16:31 1938次阅读
    自定义<b class='flag-5'>AXI</b>-Lite<b class='flag-5'>接口</b>的IP及源码分析

    Xilinx FPGA AXI4总线(二)用实例介绍5个读写通道

    AXI4协议是一个点对点的主从接口协议,数据可以同时在主机(Master)和从机(Slave)之间**双向** **传输** ,且数据传输大小可以不同。
    发表于 06-21 15:26 1479次阅读
    Xilinx FPGA <b class='flag-5'>AXI</b>4总线(二)用实例介绍5个读写通道

    简单讲解AXI Interconnect IP核的使用方法

    最近需要用到AXI接口的模块,xilinx的IP核很多都用到了AXI总线进行数据和指令传输。如果有多个设备需要使用AXI协议对
    的头像 发表于 06-19 15:45 4448次阅读
    简单讲解<b class='flag-5'>AXI</b> Interconnect IP核的使用方法

    AXI协议的几个关键特性

    AXI 协议有几个关键特性,旨在改善数据传输和事务的带宽和延迟
    的头像 发表于 05-06 09:49 723次阅读

    AXI channels介绍

    AXI 规范描述了两个接口之间的点对点协议:manager and subordinate接口
    的头像 发表于 05-05 11:42 469次阅读
    <b class='flag-5'>AXI</b> channels介绍

    AXI如何用于连接互连组件呢?

    AXI 是一种接口规范,它定义了 IP 块的接口,而不是互连本身。
    的头像 发表于 05-04 09:27 708次阅读
    <b class='flag-5'>AXI</b>如何用于连接互连组件呢?