在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
EETOP诚邀模拟IC相关培训讲师 创芯人才网--重磅上线啦!
查看: 23557|回复: 6

[求助] PCIe Master DMA的疑问

[复制链接]
发表于 2010-8-20 12:11:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 cuizehan 于 2010-8-20 12:12 编辑

有几个疑问如下,后面附上我自己的理解,请批评指正。

      1. PCIe 设备怎么发起DMA?(不是由主机发起)

        我的理解:只要PCIe设备启动时,主机在设备配置空间的Command的寄存器的
                      第2位,也就是bus master enable 写的内容为1,就表明设备可以发
                      起读写请求。

                      ldd3上讲,设备发起的DMA过程大致是这样的:设备发中断,驱动程
                      序分配缓冲区,并把地址告诉设备;设备往该地址写数据;写完发中断
                      ,驱动通知用户程序来读取数据。

                      里面讲的只是软件层面上怎么实现,是不是只要软件上准备好了,只要
                      PCIe设备知道DMA要传送到的内存地址,并且bus master enable为
                      1,就可以构造Write Request的TLP。这样是不是就叫发起了DMA
                      呢?

                      DMA的本质就是设备不断的构造对连续地址的Write Request的TLP
                      ,对吗?

       2. PCIe 设备发出的Write Request最终到哪了?驱动还是直接到内存?

           我的理解:Write Request的TLP里已经包含了要写到的地址和包长,root
                         port 在收到这个TLP后应该有能力解析这个包,知道是要往内存
                         写多少长度的数据,然后它就向内存控制器发出写指令,把数据
                         写到内存中去,而不通知cpu,也就是驱动程序并不知道。

                         还有一种可能就是,这个包送到驱动,由驱动把包头去掉,并向内
                         存控制器发出写命令,不过我觉得这个不太可能,这样的话DMA就
                         需要cpu的参与了。

       3. 基于我的上述理解,现在设计了这样一个系统,大家提点批评意见。

          我的设计:
                        目标:把FPGA收的大量连续数据,不断的写到内存中去,然后cpu
                                从这段内存把数据读出来放到磁盘里。

                        思路:因为是大量连续数据,所以PCIe设备一直处于DMA写内存状
                                态,同时在用户程序通过mmap可以直接读取DMA缓冲区。
                                这种方法舍弃了中断,而是通过读写指针来确定有没有满。

                        实现:在FPGA里实现一个DMA engine,作用就是不断的计算地址
                                并构造Write Request的TLP,并定期更新内存中的一个写指
                                针,避免用户程序读错数据。

                        问题:这样是不是驱动在数据传输方面什么都不用做啊?那驱动还有
                                什么用?
发表于 2010-8-21 14:44:36 | 显示全部楼层
我也在做这个呢,交流一下吧。QQ:51273704,加我的时候请说您做DMA+PCIE
发表于 2010-11-23 15:07:09 | 显示全部楼层
期待答案
发表于 2011-1-19 12:04:33 | 显示全部楼层
期待有人解释一下!
发表于 2011-10-26 10:51:42 | 显示全部楼层
回复 1# cuizehan


     问题:这样是不是驱动在数据传输方面什么都不用做啊?那驱动还有什么用?

      驱动从内存中申请足够大的空间供pcie设备使用,同时要响应设备发起的中断。这是应用程序完成不了的。
发表于 2011-11-17 19:18:48 | 显示全部楼层
我也做到这里了,DMA没有成功,不知道需要配置些什么
发表于 2014-7-2 14:09:17 | 显示全部楼层
回复 6# wanbo8157


    请问dma是怎样成功的?需要配置什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-6 23:27 , Processed in 0.032203 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表