[X]关闭

[米联客-XILINX-H3_CZ08_7100] FPGA_PCIE通信(win)连载-05QT上位机读写FPGA内存

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

​ 软件版本: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概述如果读者对于前面demo还有一些疑惑,那么本节课的内容,可以让你更加简单地弄明白什么是BAR地址空间操作,什么是对开发板DDR内存地址空间操作。如果你掌握了如何通过XDMA读写BAR地址空间和DMA内存地址空间操作,那么基于XMDA的所有原理性设计都会变的soeasy!
2系统框图
本系统中通过XDMAIP将开发板及PCIE上位机识别连接。AXIInterconnectIP通过使用AXI-FULL及AXI-LITE总线将XDMA与内存部分DDR或者Bram连接。通过PCIE上位机发出读写指令控制XDMA对开发板内存进行读写操作。
57c90244c4ad4250aac9e3c67786c03f.jpg
3FPGA代码
FPGA可以用任何一个章节的,这里就用“03基于XDMA实现PCIE通信方案”的代码,简单。具体就不重复了,不清楚的可以看“03基于XDMA实现PCIE通信方案”相关部分教程内容。本方案中的上位机没有使用中断功能。
bd6ccbcc4a804ca4a8db8979dec00668.jpg
4上位机程序设计
以下代码中on_TestDDR_clicked是上是对AXI4接口的DDR或者BRAM测试。on_TestBAR_clicked是对用户的BAR空间测试。
  1. voidMainWindow::on_TestDDR_clicked()

  2. {
  3.   unsignedintbuf1[1024];
  4.   unsignedintbuf2[1024];
  5.   unsignedinti=0;

  6.   unsignedinterror_cnt=0;

  7.   for(i=0;i<1024;i++)
  8.   {
  9.     buf1[i]=i;
  10.   }

  11.   h2c_transfer(0,1024*4,(unsignedchar*)buf1);

  12.   c2h_transfer(0,1024*4,(unsignedchar*)buf2);

  13.   for(i=0;i<1024;i++)
  14.   {
  15.     if(buf1[i]!=buf2[i])
  16.       error_cnt++;
  17.   }
  18.   if(error_cnt)
  19.   {
  20.     QStringstr = QString("%1%2").arg("DDRbaddata=").arg(error_cnt);
  21.     ui->labelDDRPASS->setText(str);
  22.   }
  23.   else
  24.   {
  25.     m_pass1++;
  26.     QStringstr = QString("%1%2").arg("DDRPASSTimes=").arg(m_pass1);
  27.     ui->labelDDRPASS->setText(str);
  28.   }

  29. }

  30. voidMainWindow::on_TestBAR_clicked()
  31. {
  32.   unsignedintval;
  33.   unsignedinti=0;

  34.   unsignedinterror_cnt=0;

  35.   for(i=0;i<1024;i++)
  36.   {
  37.     user_write(0x10000+i*4,4,(unsignedchar*)&i);
  38.   }

  39.   for(i=0;i<1024;i++)
  40.   {
  41.     user_read(0x10000+i*4,4,(unsignedchar*)&val);
  42.     if(i!=val)
  43.       error_cnt++;
  44.   }


  45.   if(error_cnt)
  46.   {
  47.     QStringstr = QString("%1%2").arg("DDRbaddata=").arg(error_cnt);
  48.     ui->labelBARPASS->setText(str);
  49.   }
  50.   else
  51.   {
  52.     m_pass2++;
  53.     QStringstr = QString("%1%2").arg("DDRPASSTimes=").arg(m_pass2);
  54.     ui->labelBARPASS->setText(str);
  55.   }
  56. }
复制代码


5硬件安装
注意先下载程序,调试阶段下载bit文件,然后再开电脑。这样才能正确识别和后续测试工作正常开展。
8885bfe299ae4908a7250ca2e259eb5a.jpg
6实验结果

a2b74cd7c4a149c6b08cb1d34e0ca61a.jpg


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

本版积分规则