DSP

【先挖坑,懂了再来填】遇到一个dsp和fpga交互的问题

2019-07-13 09:38发布

最近遇到一个dspfpga交互的问题,虽然问题已经解决,但是原因还是没弄太懂,先挖一个坑,以后再填,或者看过这篇博文知道的答案的,希望能指教一二。   问题是这样的:dsp通过emif外挂了三个外设:sdramflashfpgadspfpga也是通过emif进行交互,其中dsp是主,fpga为从处理器,控制emif交互的有CEAOEAWE三根控制线,和16跟地址线,32根数据线。画个图,好理解一点
那么问题来了,如果fpga先把程序下进去的时候,dsp下程序时刚好下到sdram空间时就会报错,如果fpga不下程序,dsp直接下进去程序就没问题。。   观察到的现象:用fpgasignaltap观察这些交互线,发现dsp发数和收数时,AOE也是大部分为低的,这就不正常了,因为低是有效的。。
这是出现这种错误的一个简单的测试模块,其中AOE是控制dsp读数的(低有效),,但是程序里面没有测试dsp读数,只是用AWE测试了dspfpga写数。AOE没有管,只是在qsf中绑定了管脚。。。但是在下载dsp时,AOE未低仍然是不正常的状态对于dsp来说     所以最终怀疑到是fpga的综合时把AOE自动综合为低了,然后改程序把AOE接到一个寄存器上,初始化为高,上面出现的问题就解决了。但是观察rtl图综合器是把AOE信号线优化掉了的。。。那么此时外部dsp管脚接到AOE是接到fpga哪里去了呢?用signaltap观察,为什么在99%的情况下为低呢?
(2)另外在这个问题的基础上还测试了一个正确的程序,是不会出现这个问题的。而其AOE管脚的rtl图是这样的
DspAOE管脚信号直接进来是接FPGA的一个或门的,就不会出现这种问题,为什么了?反正就是当dsp没有通过emif进行读写操作时,dps的三个控制emif的管脚不能为低。 我认为出错原因可能是dsp下载程序到sdram或者进行传输等操作时,会检测dsp这三个管脚,如果管脚有效,当然dsp就认为此时EMIF为忙状态。此时再进行emif操作当然会报错。。。。