600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > vivado hls 笔记

vivado hls 笔记

时间:2023-07-22 18:58:14

相关推荐

vivado hls 笔记

reference:

VIVADO HLS TrainingCreating a simple AXI-master interface for testing with Vivado HLS如何使用Vivado HLS加速FPGA算法开发米联客XILINX_ZYNQ-7000系列(第四期) HLS入门参考戴书画给的百度网盘文件里面的“04_XILINX7 系列FPGA HLS入门.pdf”

四种PS-PL接口

PS指的是ARM核,PL指的是FPGAaxi-lite接口,PS可以读写IP核里面的单个变量,参考:VIVADO HLS Training - AXI Lite slave floating point #5bram接口,bram是FPGA内部的ram,bram的地址映射到了指定地址空间供PS访问,相当于PS核PL之间的共享内存,参考:VIVADO HLS Training - BRAM interface #06

注:实验发现单个数组的大小不能超过一个BRAM的大小,一个BRAM大小参考/blog//100016569.htmlaxi stream接口,数据流的形式,结合DMA实现,参考:VIVADO HLS Training AXI Stream interface #07axi master接口,IP核可以直接访问PS的地址空间,使用axi master作为接口很方便,但是读写速度较慢,因为要经过AXI总线,参考:Creating a simple AXI-master interface for testing with Vivado HLS总结最便捷的做法:使用axi master作为PS和PL之间的接口,在IP核的内部将PS内部的数据拷贝一份到bram(即在HLS中声明的变量或者数组里面),然后处理bram中的数据,最后通过axi master接口写回到PS的内存空间,注意在xilinx sdk的代码中要在IP核的驱动函数前后都加上Xil_DCacheFlush()。

循环加速

pipline/全展开/部分展开循环加速后会使用更多的硬件资源,通过观察c synthesis的结果中的资源占用量的变化可以看出来。pipeline可以针对函数,也可以针对循环/多层循环。注意,针对函数或者多层循环的pipeline deractive内部所有的子循环都要pipeline,所以先对每一个最内层的循环pipeline,然后依次向上层加pipeline,直到pipeline失效。

数组优化

reference: /video/BV1J5411t7uE?p=20

数组分割,分割后各个子数组可以并行读写,打破内存墙的限制,提高并行度数组重组,通过合并数组,减少资源利用率hls中声明为const的数据类型,会被存在ROM里面。hls中声明为static的数据类型,会用memory实现。数组可以用bram或者lutram的资源,bram可以存下int[100000],lutram可以存下int[20000],但是使用lutram会有各种问题,所以建议使用bram;可以用#pragma HLS RESOURCE指定数组使用哪种资源在不同函数中声明的局部数组占用的空间不会释放,所以尽量不要使用局部的数组,临时使用的数组建议放在全局的buffer里面

算法模块

排序

参考Leetcode堆排序,https://leetcode-/problems/sort-an-array/solution/pai-xu-shu-zu-by-leetcode-solution/双调排序,/mmxsrup/bitonic-sort

其他

vivado hls会将c/c++的程序转化为fpga上的一个ip核,根据入口函数的输入和输出自动生成ip核的输入输出接口。注意在使用xlinx sdk调试程序的时候要勾选"debug cofigurations"里面的"reset entire system"。因为这个问题卡了两周!!bram接口的数据类型最小是4个字节,不能用char数组,可以用int数组

debug记录

IP核不起作用的可能原因:1)在使用xlinx sdk的时候忘记勾选"debug cofigurations"里面的"reset entire system",2)IP核内部出现错误,比如数组越界等,可以通过获取ip核函数的return值来判断IP核内部是否发生错误。在使用stream数组作为fifo的时候,虽然形式上数组可以开得很大,但是必须连续访问fifo数组,否则即使编译没有报错,最后在FPGA上运行的时候也会出错。hls fifo的例子:/medalotte/HLS-canny-edge-detection

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。