[X]关闭

xdma中PCIE to DMA接口的地址映射问题

文档创建者:MOON
浏览次数:15706
最后更新:2023-06-08
我现在正在使用xdma做一个简单的读写ddr的工程,我尝试了AXI Lite和DMA Bypass接口,都可以正常工作,也明白了bar空间和fpga地址空间的映射关系。但是不明白PCIE to DMA接口是如何工作的,具体问题如下:
1. PCIE to DMA接口在xdma配置的时候并没有地址映射,那么如果我ddr的基址是0x8000_0000,那么我怎么通过上位机程序把数据写到DDR中呢?这个基址是通过什么方式进行配置的?

2.在教程CH07_IMAGE_LOOP中,有一个write_device的函数,后面有一个参数address,这边是应该写需要访问的DDR的偏移地址还是基址+偏移地址呢?比如要访问0x8000_0100,那么address应该是0x100,还是0x8000_0100。


3. 我现在的工程搭建好了之后,不管如何配置address,都访问不到DMA那一路,不知该如何debug。

希望各路大神帮忙指教,谢谢!!
Capture.JPG

发表评论已发布 5

菲尼克兔

发表于 2019-8-20 11:32:57 | 显示全部楼层

你好,我对于你问题的理解如下:
1. PCIE to DMA接口在xdma配置的时候并没有地址映射,那么如果我ddr的基址是0x8000_0000,那么我怎么通过上位机程序把数据写到DDR中呢?这个基址是通过什么方式进行配置的?
    如果在生成PCIe的IP的时候不勾选 "PCIe to AXI Lite master interface"的话,那么这个PCIe在主机端应该只有一个Bar,上位机的软件通过这个bar来配置PCIe IP中DMA的控制寄存器。关于上位机如何把数据写入 DDR中,当你调用相关的函数之后,上位机 驱动 会通过这个Bar配置DMA,简单的,配置start adress=上位机的malloc 出来的内存空间的物理地址, end_address = DDR的地址,size=传输数据块的大小,然后启动DMA,此时PCIe的IP会发起outbound memory read从主机读取数据,然后写入到DDR中
2.在教程CH07_IMAGE_LOOP中,有一个write_device的函数,后面有一个参数address,这边是应该写需要访问的DDR的偏移地址还是基址+偏移地址呢?比如要访问0x8000_0100,那么address应该是0x100,还是0x8000_0100。
    没用过,不知道。
3. 我现在的工程搭建好了之后,不管如何配置address,都访问不到DMA那一路,不知该如何debug。
    如果你说的是通过问题1中,我说的BAR空间访问DDR的控制寄存器的话,那么....这个是由驱动去控制访问的,自己...一般不会去访问,一定要访问的话,知道了bar地址,也能访问....

uisrc

发表于 2019-8-20 20:23:32 | 显示全部楼层

如果你的DDR基地址是0x8000_0000,显然,你得从0x8000_0000开始才能读取到正确的数据。
越努力越幸运!加油!

ICzhangwuji

发表于 2019-8-29 09:58:39 | 显示全部楼层

嗯嗯  如果DMA要访问DDR的话  这时候PCIe的BAR里面存储的是DMA的控制寄存器的地址   而不是DDR里面的地址 所以这时候访问DDR  地址得是0X8000_0000  所以这也就是为什么PCIe_DMA的过程中没有配置BAR选项的问题  BAR映射的是DMA的控制寄存器

Lh_qhq6T

发表于 2023-6-8 17:06:05 | 显示全部楼层

还没有没有弄懂ddr的地址不是从0开始的时候怎么通过pcie访问ddr呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则