问答 店铺
热搜: ZYNQ FPGA discuz

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

切换到宽版
微信扫一扫 分享朋友圈

已有 17075 人浏览分享

开启左侧

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

[复制链接]
17075 4
我现在正在使用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呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

0

粉丝

1

主题
精彩推荐
热门资讯
网友晒图
图文推荐

  • 微信公众平台

  • 扫描访问手机版