微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > <求助>PCIE_DMA问题

<求助>PCIE_DMA问题

时间:10-02 整理:3721RD 点击:
小弟最近做项目,采用xilinx K7325t的FPGA的开发板,该卡通过X8的PCIE插在某linux环境下的服务器上。
例化了它的PCIE硬核对服务器内存进行DMA操作时发现,对某大小的数据发起操作时发现回来的数据有地址偏移现象,比如我访问的地址(64位)是0x000000635400000,它返回的数据却是存放在0x000000635490000那块内存的,而且这和数据大小有关系,并不是所有大小的会出现这问题,基本小于一页的不会出现这问题,大于一页的有些有问题有些没问题,大小是页的整数倍的基本没问题,我chipscope抓过读请求的数据包基本没问题,返回的包头也是没问题,但就是数据内容不是我想要的值,而是另一块地址的值(偏的比较大,常见的地址偏移是0x90000或0x80000大小),而且我这chipscope抓包能看见对这块地址没有发起过任何读操作(之后可能会对这地址操作,但出现错误的时候还没有对这地址操作,这个地址以数据的形式曾在链路上出现过,我用来DMA读取访问地址连标的),现在苦于没有很好的定位方法,也并不清楚是软件问题还是逻辑问题,急死我了

看了几遍,大致看明白了。
你说的某大小的数据是指读取数据的长度吧?比如一下子读取1KBYTE长度的数?
感觉你这个问题不是PCIE的问题,而是在返回内存的时候,内存的页地址空间有限,就是说比如1个页空间有10K大,而你现在要返回写在的地址在页空间的中间位置,那么读1K的数据回来,那就放在5K到6K的地方。要是很大,12K,那按理说应该放在5K到下一个页的7K的位置,但是如果内存页不支持这样,必须要从页头地址开始放的话,那数据就放到下一个页的头地址开始,一直到下下页的2K位置了。
以上我的表述纯属猜想,对内存不熟悉。
在DDR2 的操作上见过如果读写地址不对齐的情况下,真实的操作会分为两部分,先写小的补完,然后大的从下一个完整地址开始整段地写。

菜鸟想请教小编FPGA pcie 的一些问题,能否赐教
我现在做的是实现pc通过pcie与FPGA间的通信,但是生成IP core 就不知道如何下手了,还望赐教
我的qq58269603

谢谢你的答复,正如你所说的确实是内存分页问题,发帖第二天我们软件那边终于发现自己的bug了,就是分配的内存少了几页,这问题困扰了我们半个月,还是这牛人多啊,以后碰到问题还请多多指导,先谢了,呵呵

    建议先熟悉下核的用户手册,PC那端得能写底层驱动,能够配置设备(bios是否已做完这些我不清楚),FPGA那一端的接口信号都是可以抓出来看的,链路通了以后可以进行简单的寄存器读写操作了

你好!请教一下,你们的DMA模块是基于官网下载的开发历程k7_pcie_dma_ddr3_base_trd_13.4里面的dma_back_end_axi模块开发,还是xilinx官方或者安福利提供DMA核,或是基于XAPP859开发的。开发历程k7_pcie_dma_ddr3_base_trd_13.4里面的dma_back_end_axi模块,这个源代码52万行,如果需要修改,修改什么地方,难度怎么样


想向您请教一些有关PCIE的问题,能教我一下吗,感谢了!


朋友你好,我也是做PCIE相关的,想和你交流一下看看方不方便,我的微信15201617874,qq1127813989,交个朋友吧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top