zedboard如何從PL端控制DDR讀寫(一)


    看了一段時間的DDR手冊,感覺大體有一點了解了,想要實際上板調試,然而實驗室可用的開發板不多,拿了一塊zynq板看了看,DDR確實有,但是已經集成了控制器,而且控制器還放到了PS端,PL只能通過AXI接口訪問。

    無奈另外兩塊開發板也這樣,索性就用AXI去控制吧,正好還能再復習一遍AXI。

    

    先簡單介紹一下zynq,其全稱是ZedBoard Zynq Evaluation and Development Kit  , FPGA芯片型號為xc7z020clg484-1。

    片內包含一個豐富特性的基於雙核ARM Cortex-A9的處理子系統(Processing System,PS)和Xilinx 28nm可編程邏輯(Programmable Logic,PL)。PS除了核心外還包括片上存儲器、外部存儲器接口以及大量外設連接接口。【引用:Zynq-7000 Overview】

   

   可以看到其存儲器規格為:512MB DDR3;256Mb Quad-SPI Flash;4GB SD Card;

   板卡結構框圖如下所示:從圖中我們也可以明顯的看到DDR位於PS端

 

    位於PS端的ARM直接有硬件支持AXI接口,而PL則需要使用邏輯實現相應的AXI協議。Xilinx提供現成IP如AXI-DMA,AXI-GPIO,AXI-Datamover都實現了相應的接口,使用時直接從XPS的IP列表中添加即可實現相應的功能。

有時,用戶需要開發自己定義的IP同PS進行通信,這時可以利用VIVADO向導生成對應的IP。VIVADO中用戶自定義IP核可以擁有AXI-Lite,AXI-FULL,AXI-Stream。

 

AXI-Lite具有輕量級,結構簡單的特點,適合小批量數據、簡單控制場合。不支持批量傳輸,讀寫時一次只能讀寫一個字(32bit)。

AXI4接口和AXI-Lite差不多,只是增加了一項功能就是批量傳輸,可以連續對一片地址進行一次性讀寫。

上面兩種均采用內存映射控制方式,即ARM將用戶自定義IP編入某一地址進行訪問,讀寫時就像在讀寫自己的片內RAM,編程也很方便,開發難度較低。代價就是資源占用過多,需要額外的讀地址線、寫地址線、讀數據線、寫數據線、寫應答線這些信號線。

另外一種AXI接口就是AXI-Stream,這是一種連續流接口,不需要地址線(很像FIFO,一直讀或一直寫就行)。對於這類IP,ARM不能通過上面的內存映射方式控制(FIFO根本沒有地址的概念),必須有一個轉換裝置,例如AXI-DMA模塊來實現內存映射到流式接口的轉換。AXI-Stream適用的場合有很多:視頻流處理;通信協議轉換;數字信號處理;無線通信等。其本質都是針對數值流構建的數據通路,從信源(例如ARM內存、DMA、無線接收前端等)到信宿(例如HDMI顯示器、音頻輸出等)構建起連續的數據流。這種接口適合做實時信號處理。

 

有了上面的這些官方IP和向導生成的自定義IP,用戶其實不需要對AXI時序了解太多(除非確實遇到問題),因為Xilinx已經將和AXI時序有關的細節都封裝起來,用戶只需要關注自己的邏輯實現即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM