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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4440|回复: 6

[求助] xilinx PCIe 启动DMA传输死机问题

[复制链接]
发表于 2015-9-3 16:28:47 | 显示全部楼层 |阅读模式

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

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

x
求助各位大神,本人使用K7 开发了一块PCIe板卡,DMA是自己开发的,目前出现的问题是:
如果只启动DMA写操作,PC机驱动不查询板卡BAR空间寄存器(即板卡不需要回复CPLD包),PC机不会死机(其中DMA所写到内存的数据也是正确的),但是一旦PC机定时查询BAR,那么PC机就会死机,此时发现板卡PCIe core的tx_buf_av已经为0(即发送buffer已经耗尽),用户构建的TLP包就无法发送出去了(此时也无法回复CPLD包),不知道什么原因造成了tx_buf_av突然就将为0了呢,有人说过没有进行流控,但是不知道如何进行流控呢?


发表于 2015-9-4 16:38:45 | 显示全部楼层
软件问题VERILOG
发表于 2015-9-6 08:43:29 | 显示全部楼层
1,检查lnk_up是否一直为高
2,在发送数据时加入tx_buf_av进行判断
3,我觉得可能是的DMA机制的问题:我们的方法是发Memory Write TLP和CPLD采用的是轮流的方式,也就是说你只有一个发送接口,但是你要控制这个发送接口轮流为这两个事务服务
4,我不知道你为什么定期查询BAR空间,我们都是用中断的方式来触发一次DMA读写的完成
 楼主| 发表于 2015-9-6 11:03:26 | 显示全部楼层
首先谢谢三楼的回复,针对你提出的问题,我解释一下:
1、在问题出现前后,lnk_up信号一直为高;
2、目前DMA写操作也是采用中断形式,不过驱动响应中断后首先查询BAR其中一个寄存器(查询内存是否新的数据),如果存在新的数据,就取走数据,否则不进行操作(目前的DMA为Block DMA形式,而非SG DMA)
发表于 2015-9-7 21:43:04 | 显示全部楼层
回复 3# xduryan
看描述第3点出问题的概率极大
补充一点,出口检测有没有发错误格式的包
 楼主| 发表于 2015-9-8 10:24:49 | 显示全部楼层
目前的实现机制也是DMA写和回复CPLD包轮训的形式进行的,抓取的发送TLP包,未发现异常包,但是在出现异常的时候,PCIe core 在接收到发送TLP后,tx_buf_av会一直减少,不会增加,直至为零,导致无法再发送TLP包。
发表于 2015-12-2 17:23:51 | 显示全部楼层
刚遇到这个问题,检查后发现是max_payload_size超过对端的接受能力了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-17 07:27 , Processed in 0.022861 second(s), 8 queries , Gzip On, Redis On.

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