1. 程式人生 > >【先挖坑,懂了再來填】遇到一個dsp和fpga互動的問題

【先挖坑,懂了再來填】遇到一個dsp和fpga互動的問題

最近遇到一個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操作當然會報錯。。。。