標籤:
看了一段時間的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時序有關的細節都封裝起來,使用者只需要關注自己的邏輯實現即可。
zedboard如何從PL端控制DDR讀寫(一)