[X]关闭

[米联客-XILINX-H3_CZ08_7100] FPGA_PCIE通信(linux)连载-13PCIE与PL数据交互加速构架

文档创建者:FPGA课程
浏览次数:180
最后更新:2024-09-20
文档课程分类-AMD-ZYNQ
AMD-ZYNQ: ZYNQ-FPGA部分 » 2_FPGA实验篇(仅旗舰) » 7-FPGA PCIE通信(Linux)
本帖最后由 FPGA课程 于 2024-9-20 13:04 编辑

​ 软件版本:VIVADO2021.1
操作系统:WIN10 64bit
硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA
实验平台:米联客-MLK-H3-CZ08-7100开发板
板卡获取平台:https://milianke.tmall.com/
登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!



1概述
FPGA硬件加速是FPGA的重要应用,基于PCIE的硬件加速需要通过PC上位机把需要计算的数据PCIE接口发送给FPGA,FPGA做完运算后,再传送给PC。米联客FPGA PCIE相关教程主要为解决用户对于基于FPGA的PCIE的方案接口应用。本方案提供了一种基于PCIE的可以用于加速的算法的通信构架,在这套构架下,用户可以快速搭建自己的加速应用方案。
2系统构架
PC上位机发送数据通过PCIE接口经过XDMA IP 写入到开发板的DDR中,之后通过AXI-GPIO通知开发板数据已经完成发送,数据处理模块接收到AXI-GPIO的信号后,开始从Milianke uifdmadbuf IP中获取DDR中的数据。数据经过处理后经过uifdmadbuf IP写回到DDR中,并且通过XDMA的中断事件通知上位机数据已经处理完毕。
a28f02d61d6845218c1303ca63334073.jpg
3FPGA代码
9325296e376c4cef80225164b0bdbdd2.jpg
图形代码中关键的信号接口引出到顶层,并且编写代码修改PC发送过来的数据,并且回传给PC

747b38464f9b4519a7f861712963f185.jpg
4上位机程序设计
800196fbb6d4487aade7e18ca8ef0529.jpg
上位机的地址分配必须确保和下位机的PCIE板卡中的地址一致
4bc67a246d054ffba35a9b3d242e36f9.jpg
下位机的地址在uifdma_dbuf IP中设置,关于更多FDMA使用的内容可以阅读米联客“AXI4总线入门篇”博文在线学习地址为:AXI4总线入门(2021) - UISRC工程师学习站 - Powered by uisrc.com!

数据的收发代码如下,发送部分每次发送完数据,需要通过user_write函数写GPIO
  1. unsigned int c2h_transfer(unsigned int size)
  2. {
  3.     double bd=0;
  4.     long s=0;
  5.     long ns=0;
  6.     static struct timespec ts_start, ts_end;
  7.     read_device(h_c2h0,c2h_fpga_ddr_addr[fbuf],size,c2h_align_mem_tmp);
  8.     clock_gettime(CLOCK_MONOTONIC, &ts_end);
  9.     timespec_sub(&ts_end, &ts_start);
  10.     s = ts_end.tv_sec;
  11.     ns = ts_end.tv_nsec;
  12.     bd = 1/(double)(s+(double)ns/1000000000.0);
  13.     clock_gettime(CLOCK_MONOTONIC, &ts_start);
  14.     return (unsigned int)bd;
  15. }
  16. void h2c_transfer(unsigned int size,unsigned char *buffer)
  17. {

  18.     unsigned int vsbuf_ctr_val;

  19.     memcpy(h2c_align_mem_tmp, buffer, size);
  20.     write_device(h_h2c0, h2c_fpga_ddr_addr[wbuf], size, h2c_align_mem_tmp);
  21.     vsbuf_ctr_val = 0x7f & wbuf;
  22.     user_write(ADDR_VSBUF_CTR,vsbuf_ctr_val);

  23.     vsbuf_ctr_val = 0x80 | wbuf ;
  24.     user_write(ADDR_VSBUF_CTR, vsbuf_ctr_val);

  25.     if (wbuf >= 2)
  26.         wbuf = 0;
  27.     else
  28.         wbuf++;
  29. }
复制代码


edbc378647aa4144b018f70502981e35.jpg
5硬件安装
注意确保TF卡里面没有程序吗,或者拔掉TF卡。
先下载程序,调试阶段下载bit文件,然后再开电脑。这样才能正确识别和后续测试工作正常开展。
68e0ac907cd0430bb05db5199f461879.jpg
6实验结果
图片偏粉色是因为Liunx端上截图导致
e74c0b39e30342f78388df34b64cff81.jpg



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则