最近遇到一个
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操作当然会报错。。。。