阅读:1866回复:2
PCI9054控制器的DMA阻塞问题
用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操作能否结束一个未完成的总线等待周期? 有高人能指点迷津?多谢了。 |
|
|
沙发#
发布于:2008-03-06 20:31
按说DMA的优先级是比较低的,9054应该会打断DMA,插入直接访问的呀。
这个问题没仔细研究过。另外,如果局部总线的带宽够大,FIFO总满这种现象不应该老出现啊! |
|
板凳#
发布于:2008-04-02 13:32
楼主好像说的是FPGA内FIFO满而不是9054内的FIFO 满
|
|
|