微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > Board从入门到精通系列(八)

Board从入门到精通系列(八)

时间:02-11 来源:网络整理 点击:
极限了呢???答案是否定的。我们进入Analysis视图,看一下还有哪些地方可以优化的。经过对比发现bb也需要分解,于是按照上面的方法对bb进行资源优化,也用ROM-2P类型,也做全分解,再次综合,结果如下:

发现延迟进一步降低到8个时钟周期了!!!老师,能不能再给力点?可以的!!!!我们进入分析视图,发现cc这个回写的步骤阻塞了整体流程,于是我们将cc也进行上述资源优化,只不过资源类型要变为RAM_2P,因为它是需要写入的。综合结果:

整体延迟已经降低到6个clk周期了!!!再看Analysis视图:

延迟已经被压缩到极限了。。。。老师,还能再给力点嘛?答案是可以的!!!!我们前面的所有运算都是基于整形数int,如果将数值精度降低,将大大节省资源。注意现在DSP48E1需要100个!看我们如何将资源再降下来。这就需要借助"任意精度"数据类型了。HLS中除了C中定义的char,shrot,int,long,long long 之外,还有任意bit长度的int类型。我们将代码开头的data_type定义改为:[cpp] 

 

#include <ap_cint.h>  

typedef uint15 data_type;  

由于matlab生成的随机数在1~100以内,乘积范围不会超过10000,于是取15bit就能满足要求。首先验证下结果的正确性,用C Simulation试一下。结果如下:

看来结果是正确的(当然也不排除数位不够,溢出后的结果相减也是0,需要你自己决定数值位宽)综合一下,结果如下:

延迟缩短了一半,DSP48E1减少到原来的1/4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!我和我的小伙伴们都震惊了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!再看Analysis视图

可以发现我们的资源利用率已经达到极致,时序已经压缩到无以复加,实现了全并行计算,系统时钟完全可以达到100MHz,延迟仅3CLK,约30ns,相比matlab,得到约数百倍加速(matlab进行矩阵——向量相乘时采用浮点计算)。通过本文实验,可以发现利用Vivado HLS实现从最初的C串行实现到全并行实现的步步优化,总结一下优化步骤:(1)粗优化(循环展开、子函数内联)(2)访存优化(块存储分散化、多端口存取)(3)精优化(数值位宽优化、流水线优化)(4)总线化(利用AXI4、AXI-Stream总线接口,降低整体访存需求)利用HLS可以将原来的C算法快速部署到FPGA上,减少直接进行硬件编程的工作量。在很多情况下,优化手段可以和CUDA进行类比,相互借鉴。CUDA其实更接近软件接口,而HLS更接近硬件编程接口,或许今后两者会在新的层次上融合为统一架构语言。来源:卜居的博客

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top