原创
【先挖坑,懂了再来填】遇到一个dsp和fpga交互的问题
最近遇到一个dsp和fpga交互的问题,虽然问题已经解决,但是原因还是没弄太懂,先挖一个坑,以后再填,或者看过这篇博文知道的答案的,希望能指教一二。
问题是这样的:dsp通过emif外挂了三个外设:sdram,flash,fpga,dsp和fpga也是通过emif进行交互,其中dsp是主,fpga为从处理器,控制emif交互的有CE,AOE,AWE三根控制线,和16跟地址线,32根数据线。画个图,好理解一点
那么问题来了,如果fpga先把程序下进去的时候,dsp下程序时刚好下到sdram空间时就会报错,如果fpga不下程序,dsp直接下进去程序就没问题。。
观察到的现象:用fpga的signaltap观察这些交互线,发现dsp发数和收数时,AOE也是大部分为低的,这就不正常了,因为低是有效的。。
这是出现这种错误的一个简单的测试模块,其中AOE是控制dsp读数的(低有效),,但是程序里面没有测试dsp读数,只是用AWE测试了dsp向fpga写数。AOE没有管,只是在qsf中绑定了管脚。。。但是在下载dsp时,AOE未低仍然是不正常的状态对于dsp来说
所以最终怀疑到是fpga的综合时把AOE自动综合为低了,然后改程序把AOE接到一个寄存器上,初始化为高,上面出现的问题就解决了。但是观察rtl图综合器是把AOE信号线优化掉了的。。。那么此时外部dsp管脚接到AOE是接到fpga哪里去了呢?用signaltap观察,为什么在99%的情况下为低呢?
(2)另外在这个问题的基础上还测试了一个正确的程序,是不会出现这个问题的。而其AOE管脚的rtl图是这样的
Dsp的AOE管脚信号直接进来是接FPGA的一个或门的,就不会出现这种问题,为什么了?反正就是当dsp没有通过emif进行读写操作时,dps的三个控制emif的管脚不能为低。
我认为出错原因可能是dsp下载程序到sdram或者进行传输等操作时,会检测dsp这三个管脚,如果管脚有效,当然dsp就认为此时EMIF为忙状态。此时再进行emif操作当然会报错。。。。
用户1771764 2015-4-13 10:14
大概看了一下,感觉是你的FPGA内部的DSP接口可能写得不完善,AOE应该是读使能,他应该与AWE写使能和CE结合起来确定DBUS的方向。只有为读FPGA(CE和AOE都为低)的情况下才能够DBUS驱动数据输出,否则应该为高阻。要不然可能会影响DSP对其他设备(SDRAM、FLASH)的操作。
从你的描述来看AOE被优化掉了,应该是没有使用这个信号吧。按理来说如果正确使用了CE信号,只是测试写情况,也应该是在CE为高的情况下,可以控制DBUS的输出为高阻。但是DSP的EMIF的接口的实现不太清楚,他有没有正确能够区分SDRAM和非SDRAM设备,因为SDRAM设备是要定时刷新的,在刷新的时候CE信号会拉低,此时你的FPGA就被激活了,就会对外驱动数据。可能会影响到其他设备的数据读写。
自己的一点经验,希望对你有用。
用户433170 2015-4-13 08:17