13PCIE与PL数据交互加速构架方案
软件版本:vitis2021.1(vivado2021.1)
操作系统:WIN10 64bit
硬件平台:适用XILINX A7/K7/Z7/ZU/KU系列FPGA
登录"米联客"FPGA社区-www.uisrc.com视频课程、答疑解惑!
13.1概述
FPGA硬件加速是FPGA的重要应用,基于PCIE的硬件加速需要通过PC上位机把需要计算的数据PCIE接口发送给FPGA,FPGA做完运算后,再传送给PC。米联客FPGA PCIE相关教程主要为解决用户对于基于FPGA的PCIE的方案接口应用。本方案提供了一种基于PCIE的可以用于加速的算法的通信构架,在这套构架下,用户可以快速搭建自己的加速应用方案。
13.2系统构架
PC上位机发送数据通过PCIE接口经过XDMA IP 写入到开发板的DDR中,之后通过AXI-GPIO通知开发板数据已经完成发送,数据处理模块接收到AXI-GPIO的信号后,开始从Milianke uifdmadbuf IP中获取DDR中的数据。数据经过处理后经过uifdmadbuf IP写回到DDR中,并且通过XDMA的中断事件通知上位机数据已经处理完毕。
13.3FPGA代码
图形代码中关键的信号接口引出到顶层,并且编写代码修改PC发送过来的数据,并且回传给PC
13.4上位机程序设计
上位机的地址分配必须确保和下位机的PCIE板卡中的地址一致
下位机的地址在uifdma_dbuf IP中设置,关于更多FDMA使用的内容可以阅读米联客"AXI4总线入门篇"博文在线学习地址为:https://www.uisrc.com/portal.php?mod=list&catid=81
数据的收发代码如下,发送部分每次发送完数据,需要通过user_write函数写GPIO
void h2c_transfer(unsigned int size, unsigned char *buffer) { unsigned char vsbuf_ctr_val;
memcpy(h2c_align_mem_tmp, buffer, size); write_device(h_h2c0, h2c_fpga_ddr_addr[wbuf], size, h2c_align_mem_tmp); vsbuf_ctr_val = 0x7f & wbuf; user_write(ADDR_VSBUF_CTR, 4, &vsbuf_ctr_val);
vsbuf_ctr_val = 0x80 | wbuf; user_write(ADDR_VSBUF_CTR, 4, &vsbuf_ctr_val);
if (wbuf >= 2) wbuf = 0; else wbuf++; }
unsigned int c2h_transfer(unsigned int size) { double bd=0; double time_sec;
QueryPerformanceFrequency(&freq); QueryPerformanceCounter(&stop); time_sec = (unsigned long long)(stop.QuadPart - start.QuadPart) / (double)freq.QuadPart; bd = (int)(1.0/time_sec);; QueryPerformanceCounter(&start); read_device(h_c2h0,c2h_fpga_ddr_addr[fbuf],size,c2h_align_mem_tmp); return (unsigned int)bd; } |
13.5硬件安装
注意确保TF卡里面没有程序,或者拔掉TF卡。
先下载程序,调试阶段下载bit文件,然后再开电脑。这样才能正确识别和后续测试工作正常开展。
13.6实验结果
本文来米联客(milianke),作者:米联客(milianke),转载请注明原文链接:https://www.cnblogs.com/milianke/p/17936668.html