HLS
HLS Developer
这个作者很懒,什么都没留下…
展开
-
HLS进阶——频率优化
频率优化对于HLS设计或是RTL设计其实都是分为两部分:逻辑(logic)和布线(route)优化。思路上和RTL开发是一致的,但是由于HLS的控制力度不同,所以执行策略上也会有一些区别,下面我就介绍一些常用的优化技巧。逻辑优化拆分为多个dataflow模块,减少一个模块内一拍执行的组合逻辑操作数量;如果不能拆分为多个dataflow模块,则通过状态机将部分操作切换到下一拍去执行;合理选择资源类型;平衡设计模块中的ii和latency,一般以最大吞吐率为目标;布线优化合理选择资源类型,原创 2021-07-03 17:22:13 · 571 阅读 · 0 评论 -
HLS相比RTL的优劣
HLS: xilinx公司推出的Vitis HLS开发, HLS工具是将HLS代码翻译成RTL,然后由Vivado编译生成bitstreamRTL: xilinx公司推出的Vivado开发优势开发周期短,非常适合前期功能、性能的验证,可以极大的节省时间成本和人力成本;新手入门门槛低,HLS代码由C++和pragma组成,相比Verilog和VHDL对软件工程师更友好(当然具有硬件思维的工程师设计的代码更有优势);模块可复用性强;平台可移植性强;劣势不适合高速接口开发;会存在一定的冗原创 2021-06-20 19:43:39 · 1796 阅读 · 0 评论 -
HLS进阶技巧——反压fifo
在Vitis HLS设计中,由于只能获取到fifo的empty、full信号,而不像RTL设计中还能拿到write/read count,所以在dataflow中,只能通过empty、full信号来进行数据驱动。反压fifo是通过fifo的full信号来控制程序的运行。下面介绍两种笔者涉及到的反压技巧。技巧1下图所示为dataflow中一个最基本的结构,在反压设计中,backPressStrm指定depth=2,那么Producer写入两个数后,如果Consumer没读取,则Producer会hang住原创 2020-12-19 11:11:55 · 3134 阅读 · 3 评论 -
FPGA中,Kernel Level的结构设计思路
对于一个或者部分在FPGA上设计实现的应用,设计实现之前应该从以下一个方面着手:Throughput- 对外读写数据的速率,比如xilinx的U200,CPU和FPGA读写DDR。都存在最大的数据吞吐量,那么设计上必然不能超过这个门限。- 内部单个计算单元最大的throughput,一共能放置多少个PU,这样也存在一个门限。木桶原理取决于最短的。Frequency- 频率主要取决于设计,算法实现逻辑复杂度和资源布线的连线复杂度都会影响频率。一般而言资源利用率越高会导致布线越困难,导致频率越原创 2020-07-27 21:50:56 · 522 阅读 · 0 评论 -
HLS中pragma的归纳总结(入门级)
unroll,如下代码所示,unroll是将for循环zhong的代码展开成8份,也相当于使用8倍的资源去实现这个结构。factor指定的unroll份数必须是可以被循环次数整除的数。factor也可以省略,default时unroll份数就是循环次数。for(int i=0;i<16;i++){#pragma HLS unroll factor=8 x[i] = y[i];}...原创 2019-10-13 13:57:29 · 11312 阅读 · 0 评论 -
HLS优化调试技巧
确定优化方向,分析数据流和数据间的dependency,综合考虑resource and throughput, 基本确定能达到的优化目标; 根据HLS synth report, 分析整体的latency以及其具体组成,然后从对latency影响最大的模块开始着手优化; 对于csim和cosim结果不一致的情况,一般原因均是因为变量、数组没有初始化引起的,因为未初始化的变......原创 2019-10-03 13:26:39 · 3992 阅读 · 6 评论 -
HLS中对于超过64bit的变量赋初值
ap_uint<128> P; P.range(127, 64) = 0xffffffffffffffff; P.range(63, 0) = 0xfffffffffffffffb;如上所示,为对于128bit的变量P赋值,如果直接写成P=0xfffffffffffffffffffffffffffffffb,那么等号右边只能存储64bit,所以赋给P的值也...原创 2019-10-04 23:06:14 · 591 阅读 · 0 评论