本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權歸本公司所有,如需轉載,需授權并注明出處。
適用于板卡型號:
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG
實驗Vivado工程目錄為“pl_read_write_ps_ddr/vivado”。
實驗vitis工程目錄為“pl_read_write_ps_ddr /vitis”。
PL和PS的高效交互是zynq soc開發(fā)的重中之重,我們常常需要將PL端的大量數(shù)據(jù)實時送到PS端處理,或者將PS端處理結果實時送到PL端處理,常規(guī)我們會想到使用DMA的方式來進行,但是各種協(xié)議非常麻煩,靈活性也比較差,本節(jié)課程講解如何直接通過AXI總線來讀寫PS端ddr的數(shù)據(jù),這里面涉及到AXI4協(xié)議,vivado的FPGA調(diào)試等。
FPGA工程師工作內(nèi)容
以下為FPGA工程師負責內(nèi)容。
1. ZYNQ的HP端口使用
zynq 7000 SOC的HP口是 High-Performance Ports的縮寫,如下圖所示,一共有4個HP口,HP口是AXI Slave設備,我們可以通過這4個HP接口實現(xiàn)高帶寬的數(shù)據(jù)交互。

2. 硬件環(huán)境搭建
1)基于“ps_hello”工程,在vivado的界面中HP的配置如下圖(HP0~HP3),這里面有使能控制,數(shù)據(jù)位寬選擇,可選擇32bit、64bit或128bit的位寬。我們的實驗啟用HP0配置為64bit位寬,使用的時鐘是150Mhz,HP的帶寬是150Mhz * 64bit,對于視頻處理,ADC數(shù)據(jù)采集等應用都有足夠的帶寬。不需要AXI HPM0 LPD,取消選擇。


2)添加復位模塊,用于復位

3)在空白處右鍵選擇”Creat Port”

配置如圖

4)連接時鐘和復位

5)選中引腳,點擊Make External,將信號導出

并修改引腳名稱如下圖

并選擇總線同步時鐘為axi_hp_clk

6)點開Address Editor,如果發(fā)現(xiàn)地址沒有分配,點擊自動分配地址按鈕

分配后的結果,可以看到訪問DDR, QSPI, OCM的地址空間

保存設計,重新Generate Ouput Product
7)添加hdl文件


點擊Finish

HDL層級關系更新結果

3. PL端AXI Master
AXI4相對復雜,但SOC開發(fā)者必須掌握,對于zynq的開發(fā)者,筆者建議能夠在一些已有的模板代碼基礎上修改。AXI協(xié)議的具體內(nèi)容可參考Xilinx UG761 AXI Reference Guide。在這里我們簡單了解一下。
AXI4所采用的是一種READY,VALID握手通信機制,即主從模塊進行數(shù)據(jù)通信前,先根據(jù)操作對各所用到的數(shù)據(jù)、地址通道進行握手。主要操作包括傳輸發(fā)送者A等到傳輸接受者B的READY信號后,A將數(shù)據(jù)與VALID信號同時發(fā)送給B,這是一種典型的握手機制。

AXI總線分為五個通道:
-
讀地址通道,包含ARVALID, ARADDR, ARREADY信號;
-
寫地址通道,包含AWVALID,AWADDR, AWREADY信號;
-
讀數(shù)據(jù)通道,包含RVALID, RDATA, RREADY, RRESP信號;
-
寫數(shù)據(jù)通道,包含WVALID, WDATA,WSTRB, WREADY信號;
-
寫應答通道,包含BVALID, BRESP, BREADY信號;
-
系統(tǒng)通道,包含:ACLK,ARESETN信號;
其中ACLK為axi總線時鐘,ARESETN是axi總線復位信號,低電平有效;讀寫數(shù)據(jù)與讀寫地址類信號寬度都為32bit;READY與VALID是對應的通道握手信號;WSTRB信號為1的bit對應WDATA有效數(shù)據(jù)字節(jié),WSTRB寬度是32bit/8=4bit;BRESP與RRESP分別為寫回應信號,讀回應信號,寬度都為2bit,‘h0代表成功,其他為錯誤。
讀操作順序為主與從進行讀地址通道握手并傳輸?shù)刂穬?nèi)容,然后在讀數(shù)據(jù)通道握手并傳輸所讀內(nèi)容以及讀取操作的回應,時鐘上升沿有效。如圖所示:

寫操作順序為主與從進行寫地址通道握手并傳輸?shù)刂穬?nèi)容,然后在寫數(shù)據(jù)通道握手并傳輸所讀內(nèi)容,最后再寫回應通道握手,并傳輸寫回應數(shù)據(jù),時鐘上升沿有效。如圖所示:

在我們不擅長寫FPGA的一些代碼時我們往往要借鑒別人的代碼或者使用IP core。在這里筆者從github上找到一個AXI master的代碼,地址是https://github.com/aquaxis/IPCORE/tree/master/aq_axi_vdma。這個工程是一個自己寫的VDMA,里面包含了大量可參考的代碼。筆者這里主要使用了aq_axi_master.v這個代碼用于AXI master讀寫操作。借鑒別人代碼有時會節(jié)省很多時間,但如果不能理解的去借鑒,出現(xiàn)問題了很難解決。具體可以參考aq_axi_master.v代碼,有部分修改。
4. ddr讀寫數(shù)據(jù)的檢驗
有了AXI Master讀寫接口以后比較編寫了一個簡單的驗證模塊,這個驗證模塊是用來驗證ddr ip的,通過寫入數(shù)據(jù),然后讀取出來比較。這里要注意的是PS端DDR的起始地址和大小,還有地址的單位是byte還是word,AXI總線的地址單位是byte,測試模塊的地址單位是word(這里的word不一定是4byte)。文件名mem_test.v。
5. Vivado軟件的調(diào)試技巧
AXI讀寫驗證模塊只有一個error信號用于指示錯誤,如果有數(shù)據(jù)錯誤我們希望能更精確的信息,altera的quartus II軟件中有signal tap工具,xilinx 的ISE中有chipscope工具,這些都是嵌入式邏輯分析儀,對我們調(diào)試有很大幫助,在vivado軟件中調(diào)試更加方便。在插入調(diào)試信號時有些信息可能會被優(yōu)化掉,或者信號名稱改變了就不容易識別,這個時候我們可以在程序代碼里加入*mark_debug="true"*這樣的屬性,如下圖的信號:

具體的添加方法在”PL的“Hello World”LED實驗”中已經(jīng)講過,可參考。
并在XDC文件里綁定error信號到PL端LED燈上。
6. Vitis工程開發(fā)
以hello world為模板新建vitis工程如下

通過vitis下載程序后,系統(tǒng)會復位并且下載FPGA的bit文件。然后回到vivado界面點擊Program and Debug欄自動連接目標如下圖所示:

自動連接硬件后可發(fā)現(xiàn)JTAG連上的設備,其中有一個hw_ila_1的設備,這個設備就是我們debug設備,選中后可點擊上方黃色三角按鈕捕捉波形。如果有些信號沒有顯示完整,可點擊波形旁邊的“+”按鈕添加。

點擊捕獲波形以后如下圖所示,如果error一直為低,并且讀寫狀態(tài)有變化,說明讀寫DDR數(shù)據(jù)正常,用戶在這里可以自己查看其它的信號來觀察寫入DDR的數(shù)據(jù)和從DDR讀出的數(shù)據(jù)。

7. 本章小結
zynq系統(tǒng)相對于單個FPGA或單個ARM要復雜很大,對開發(fā)者的基礎知識要求較高,本章內(nèi)容涉及到AXI協(xié)議、zynq的互聯(lián)資源、vivado的和Vitis的調(diào)試技巧。這些都僅僅是基礎知識,筆者在這里也僅僅是拋磚引玉,大家還是要多多練習,在不斷練習中掌握技巧.
-
FPGA
+關注
關注
1664文章
22509瀏覽量
639595 -
DDR
+關注
關注
11文章
762瀏覽量
69585 -
dma
+關注
關注
3文章
582瀏覽量
106303 -
Zynq
+關注
關注
10文章
633瀏覽量
49592 -
MPSoC
+關注
關注
0文章
203瀏覽量
25238
發(fā)布評論請先 登錄
AMD Zynq UltraScale+ RFSoC評估套件調(diào)試檢查表
AMD 推出第二代 Kintex UltraScale+ 中端FPGA,助力智能高性能系統(tǒng)
如何在Zynq UltraScale+ MPSoC平臺上通過JTAG啟動嵌入式Linux鏡像
AMD UltraScale架構:高性能FPGA與SoC的技術剖析
基于AXI DMA IP核的DDR數(shù)據(jù)存儲與PS端讀取
雙Zynq MPSoC PS側PCIe高速DMA互連解決方案
AMD Spartan UltraScale+ FPGA的優(yōu)勢和亮點
ZYNQ PS與PL數(shù)據(jù)交互方式
璞致電子 UltraScale+ RFSoC 架構下的軟件無線電旗艦開發(fā)平臺
【ZYNQ Ultrascale+ MPSOC FPGA教程】第三十二章PL讀寫PS端DDR數(shù)據(jù)
評論