zynq開發遇到的相關問題

問題1:使用第三方平臺提供的開發板,核心版未提供管教說明,而IP開發時,需要用外部復位,因此無法分管腳。

解決方法: 1、用VIO,VIO可以固定初始值

                   2、自己做一個上電覆位模塊,reg初始值固定時0或者1,在始終穩定後,計數達到特定值後,拉高或者拉低(根據復位信號極性確定),從而實現復位


問題2: 在某些自己定製的IP中,添加了VIO或者xilinx提供的IP,但是在IP添加到總工程中時,綜合時,被告知缺少文件。

解決方案: 1、以vio爲例,假如,我自己設計的ip名字叫做myip,myip中有vio或者ila,那麼我在myip中首先需要添加這兩個ip的xci文件。

                         其次,在總工程中也添加ila和vio的xci文件,雙保險,綜合一定沒有問題。

問題3: VDMA的出現status異常

解決方案: 1、讀取vmdaSR的狀態值,初步判斷時由什麼造成其異常,以我的工程爲例,我讀到0x1c000,很明顯,每一行的計數超過了hsize設定的值,因此我判斷時tlast沒有收到。雖然VMDA的sync全部配置稱none,且沒有Enable同步,但是VDMA還是需要tlast信號,因此我在自己的ip接口出加了tlast信號,從而使IP正常。


問題4: VDMA取數據異常

       硬件配置: VDMA配置未全自由模式,讀寫通道全部配置稱none對齊模式,且都配置稱master

       軟件配置: 配置稱單幀模式,不循環。

       異常: 取數據有問題。 我設置的VDMA從DDR取數據的起始地址是0x22000000,並將0x22000000附近地址的內容全部設定爲0x55555555,我通過vivado抓取AXImater口讀通道的數據,地址通道第一個取的地址是0x22000000,達到預期,但是data通道的數據不對,不是0x55555555,並且去了多個值後,纔是0x55555555。我一直懷疑時系統未配置好,不是VDMA的問題,因爲VDMA取的地址時正確的,只是回的數據有問題。找了好久沒有找到解決之道。後來沒辦法,在VDMA中加入同步信號,自己的IP也產生同步信號給VDMA,後期一切正常。目前問題雖然繞過去了,但是還未解決正在分析。

       後續實驗分析:懷疑是一幀結束後,加設我自己的IP已經停止要數據了,但是中間路徑上的fifo依然要數據,而VDMA會單幀循環向外界灌數據,因此會繼續向fifo寫數據知道fifo滿了,整個系統纔會不動。後面我復位一下整個系統,但是PS AXI總線的outstanding狀態不會改變,因此即使我重新從0x22000000開始發數據,收到的數據也不是0x22000000. 而是將前面的outstanding的數據補齊後再發送0x22000000地址內的內容。

     事情總結是: 1、凡是做事,一開始就應該用最完善的方法,而不是簡陋的方法,會留下很多坑。

                            2、踩在巨人的肩膀上會省很多事,可以借鑑別人的設計和軟件環境,配置和軟件都一樣,先搭建一套平臺出來。這樣效率會比從0開始高很多。











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章