[X]关闭

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

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

​ 软件版本: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。米联客FPGAPCIE相关教程主要为解决用户对于基于FPGA的PCIE的方案接口应用。本方案提供了一种基于PCIE的可以用于加速的算法的通信构架,在这套构架下,用户可以快速搭建自己的加速应用方案。
2系统构架
        PC上位机发送数据通过PCIE接口经过XDMAIP写入到开发板的DDR中,之后通过AXI-GPIO通知开发板数据已经完成发送,数据处理模块接收到AXI-GPIO的信号后,开始从MiliankeuifdmadbufIP中获取DDR中的数据。数据经过处理后经过uifdmadbufIP写回到DDR中,并且通过XDMA的中断事件通知上位机数据已经处理完毕。
bef4a85016624f4cab81190371ea3860.jpg
3FPGA代码
f6f64859b77748e19c30d34d22b8c9c9.jpg
图形代码中关键的信号接口引出到顶层,并且编写代码修改PC发送过来的数据,并且回传给PC
b600e9eedc9342669ee15c01f543b47a.jpg
5dc70e1f6b25478c966cbf2f8e3ec2c8.jpg
4上位机程序设计
8516cc18de1644de9dac509bbe9ceeb2.jpg
上位机的地址分配必须确保和下位机的PCIE板卡中的地址一致
bfd5b3d3b5a6449f93e1fa66336a35e3.jpg
下位机的地址在uifdma_dbufIP中设置,关于更多FDMA使用的内容可以阅读米联客“AXI4总线入门篇”博文在线学习地址为:AXI4总线入门(2021) - UISRC工程师学习站 - Powered by uisrc.com!

        数据的收发代码如下,发送部分每次发送完数据,需要通过user_write函数写GPIO
  1. voidh2c_transfer(unsignedintsize,unsignedchar*buffer)
  2. {
  3.         unsignedcharvsbuf_ctr_val;

  4.         memcpy(h2c_align_mem_tmp,buffer,size);
  5.         write_device(h_h2c0,h2c_fpga_ddr_addr[wbuf],size,h2c_align_mem_tmp);
  6.         vsbuf_ctr_val=0x7f&wbuf;
  7.         user_write(ADDR_VSBUF_CTR,4,&vsbuf_ctr_val);

  8.         vsbuf_ctr_val=0x80|wbuf;
  9.         user_write(ADDR_VSBUF_CTR,4,&vsbuf_ctr_val);

  10.         if(wbuf>=2)
  11.                 wbuf=0;
  12.         else
  13.                 wbuf++;
  14. }

  15. unsignedintc2h_transfer(unsignedintsize)
  16. {
  17. doublebd=0;
  18. doubletime_sec;

  19. QueryPerformanceFrequency(&freq);
  20. QueryPerformanceCounter(&stop);
  21. time_sec=(unsignedlonglong)(stop.QuadPart-start.QuadPart)/(double)freq.QuadPart;
  22. bd=(int)(1.0/time_sec);;
  23. QueryPerformanceCounter(&start);
  24. read_device(h_c2h0,c2h_fpga_ddr_addr[fbuf],size,c2h_align_mem_tmp);
  25. return(unsignedint)bd;
  26. }
复制代码


7b39c28822f34546a0c739e010126672.jpg
5硬件安装
        注意确保TF卡里面没有程序,或者拔掉TF卡。
        先下载程序,调试阶段下载bit文件,然后再开电脑。这样才能正确识别和后续测试工作正常开展。
e65b3ebc30b44b8da8a84690296c1043.jpg
6实验结果
b468a4174c7045cbbb6e8bcf5d60e75f.jpg








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

本版积分规则