lab216
驱动牛犊
驱动牛犊
  • 注册日期2004-12-14
  • 最后登录2008-03-30
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1866回复:2

PCI9054控制器的DMA阻塞问题

楼主#
更多 发布于:2008-03-06 11:51
用9054+FPGA制作了一块数据发送板,FPGA内有FIFO,还有一些控制/状态寄存器。

当9054以DMA写本地总线,而FPGA中的FIFO满时,本地总线会形成无休止的总线等待。
此时如果再访问FIFO上的寄存器,会死锁。

如果此刻FIFO有那怕一个空间,进行了一个写入操作,就能有机会访问到寄存器,而不会死锁。

手册写道:“在DMA传输中,当有PCI Target申请在等待时,PCI9054会释放本地总线”。
这应该是控制器自己就能解决的问题,但实际不行?难道“释放”必须在完成当前传送后?

如果在DMA未完成时需要访问本地总线,可以先暂停DMA操作,释放本地总线,访问结束后再重新
开启DMA操作。

具体地:在PCI设备驱动程序中实现这种机制:本地I/O地址访问前,查看是否有DMA运行,若有,
暂停DMA操作,然后访问本地I/O地址,完成后,重新开启DMA操作。

尽管PLX手册不建议在一个burst中这样做,也未指出这样做的后果。
问题是暂停DMA操作能否结束一个未完成的总线等待周期?

有高人能指点迷津?多谢了。
216_Lab. from Design2better
dable_cn
驱动牛犊
驱动牛犊
  • 注册日期2005-09-05
  • 最后登录2009-05-25
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-03-06 20:31
按说DMA的优先级是比较低的,9054应该会打断DMA,插入直接访问的呀。
这个问题没仔细研究过。另外,如果局部总线的带宽够大,FIFO总满这种现象不应该老出现啊!
765shm
驱动牛犊
驱动牛犊
  • 注册日期2007-09-28
  • 最后登录2008-05-28
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-04-02 13:32
楼主好像说的是FPGA内FIFO满而不是9054内的FIFO 满
汗水滋补智慧
游客

返回顶部