pcie读写ddr_(WIN)S06-CH03 PCIE 读写BAR和DDR

本文通过VIVADO2017.4在Windows环境下,介绍如何使用FPGA进行PCIe BAR地址和DDR内存的读写操作。内容包括FPGA代码实现、QT程序设计,用于验证写入和读取数据的一致性,帮助理解PCIe与DDR的交互机制。
摘要由CSDN通过智能技术生成

软件版本:VIVADO2017.4

操作系统:WIN10 64bit

硬件平台:适用米联客 ZYNQ系列开发板

米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!!

3.1概述

如果读者对于CH02和CH03还有一些疑惑,那么本节课的内容,可以让你更加简单地弄明白什么是BAR地址空间操作,什么是对开发板DDR内存地址空间操作。如果你掌握了如何通过XDMA读写BAR地址空间和DMA 内存地址空间操作,那么基于XMDA的所有原理性设计都会变的so easy!

3.2 FPGA 代码

FPGA可以用任何一个章节的,这里继续CH01的代码,并且增加了在线逻辑分析仪IP方便观察FPGA的内部信号。具体就不重复了,不清楚的可以看CH01部分教程内容。

8a87a187dea203e3ea62f17f4fbf3641.png

3.3 QT程序设计

如果你足够细心,你会发现在CH01里面的BRAM 和DDR我们在前面的课程中没有用到。那么这节课就可以用起来了。测试的原理是分别往BAR地址空间和DDR地址空间写入测试数据,然后读出看看写入的和读出的十分一致。同理,。程序比较简单,读者可以自己阅读QT源码。

读写代码void MainWindow::on_TestDDR_clicked()

{

unsigned char buf1[4096];

unsigned int i=0;

unsigned int error_cnt =0;

for(i=0;i<4096;i++)

{

buf1[i]=i;

}

put_data_to_fpga_ddr(FPGA_AXI_START_ADDR,buf1,4096);

get_data_from_fpga_ddr(FPGA_AXI_START_ADDR,c2h_align_mem_tmp,4096);

unsigned char *buf2= c2h_align_mem_tmp;

for(i=0;i<4096;i++)

{

if(buf1[i]!=*buf2)

error_cnt++;

buf2++;

}

if(error_cnt)

{

m_ddrpass++;

QString str  =  QString("%1 %2").arg("AXI4 bad data = ").arg(error_cnt);

ui->labelDDRPASS->setText(str);

}

else

{

m_ddrpass++;

QString str  =  QString("%1 %2").arg("AXI4 PASS Times = ").arg(m_ddrpass);

ui->labelDDRPASS->setText(str);

}

}

3.4 测试结果

883d24103843ba1fc6e63e22f800a915.png

我们可以采用断点调试方法,直观的观察每次的读写情况

4422aa2a58f2ef9eeda72bf156db574d.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值