原創(chuàng)聲明:
本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處(www.alinx.com)。
適用于板卡型號:
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG
實驗Vivado工程目錄為“bram_test /vivado”。
實驗vitis工程目錄為“bram_test /vitis”。
有時CPU需要與PL進行小批量的數(shù)據(jù)交換,可以通過BRAM模塊,也就是Block RAM實現(xiàn)此要求。本章通過Zynq的GP Master接口讀寫PL端的BRAM,實現(xiàn)與PL的交互。在本實驗中加入了自定義的FPGA程序,并利用AXI4總線進行配置,通知其何時讀寫B(tài)RAM。
以下為本實驗原理圖,CPU通過AXI BRAM Controller讀取BRAM數(shù)據(jù),CPU僅配置自定義的PL BRAM Controller的寄存器,不通過它讀寫數(shù)據(jù)。

FPGA工程師工作內(nèi)容
以下為FPGA工程師負(fù)責(zé)內(nèi)容。
1. 硬件環(huán)境搭建
以“ps_hello”為基礎(chǔ),另存為一份工程,并配置打開ZYNQ的中斷
1)首先添加AXI BRAM Controller模塊,用于PS端控制BRAM,雙擊打開配置,連接AXI總線,可用于讀寫B(tài)RAM模塊,AXI模式設(shè)置為AXI4,數(shù)據(jù)寬度設(shè)置為32位,memory depth不在這里設(shè)置,需要在Address Editor里設(shè)置。BRAM端口數(shù)量設(shè)置為1個,用于連接雙口RAM的PORTA。不使能ECC功能。

由于AXI4總線為字節(jié)詢址,BRAM數(shù)據(jù)寬度設(shè)置也是32位,同樣都是32位數(shù)據(jù)寬度,因此在映射到BRAM地址時,需要按4字節(jié)詢址,即去掉最后兩位,下圖為BRAM控制器與BRAM的映射關(guān)系。

2)添加BRAM模塊,BRAM設(shè)置如下,有兩種模式選擇,standalon模式,此模式可以自由配置RAM的數(shù)據(jù)寬度和深度。BRAM Controller模式,此模式下地址線和數(shù)據(jù)端口默認(rèn)為32位,本實驗因為用到了BRAM控制器,因此選擇BRAM Controller模式。Memory類型選擇雙口RAM,一端連BRAM控制器,一端連PL RAM控制器。

3) 添加自定義的PL RAM控制器pl_ram_ctrl,功能很簡單,start信號有效后開始讀取BRAM的數(shù)據(jù),可通過ILA邏輯分析儀觀察讀取的數(shù)據(jù),PL RAM控制器讀BRAM結(jié)束后,開始向BRAM寫數(shù)據(jù),寫完數(shù)據(jù)使能intr信號,即中斷信號,CPU即可讀取BRAM的數(shù)據(jù)。將PL控制器信號與BRAM的PORTB連接。自定義IP在ip_repo文件夾中。

如果想添加自定義IP到IP庫中,點擊IP Catalog,在Vivado Repository右鍵點擊Add Repository

找到自定義IP所在文件夾,點擊Select

跳出窗口,選擇IP,點擊OK

即可看到,出現(xiàn)了剛添加的IP

4)連接AXI BRAM Controller的BRAM_PORTA到BRAM的PORTA,連接pl_bram_ctrl的BRAM_PORT到BRAM的PORTB。連接pl_bram_ctrl模塊的中斷信號intr到ZYNQ的中斷口。并點擊自動連接

5)在Address Editor里選擇BRAM詢址大小,如設(shè)置4K空間,即可詢址BRAM空間為1K深度。

Block Design添加邏輯分析儀方法
1)再介紹一種添加邏輯分析儀的方法,選中BRAM_PORT總線和intr中斷,右鍵選擇Debug

2)可以看到總線上多了小昆蟲,點擊Run Connection Automation,自動連接

自動添加了一個ILA模塊,并且有一個總線接口,一個信號接口

3)保存設(shè)計,之后點擊Generate Bitsream生成bit文件,并導(dǎo)出Hardware信息。

軟件工程師工作內(nèi)容
以下為軟件工程師負(fù)責(zé)內(nèi)容。
2. Vitis程序開發(fā)
1)程序設(shè)計流程為:輸入起始地址和長度CPU通過BRAM控制器寫入BRAM數(shù)據(jù)通知PL控制器讀取BRAM數(shù)據(jù)PL內(nèi)部讀完后向相同位置寫入數(shù)據(jù),初始數(shù)據(jù)由CPU告知寫完后使能write_end信號,觸發(fā)GPIO中斷中斷讀取BRAM數(shù)據(jù),打印顯示
2)進入Vitis后,在Vitis下新建項目,已經(jīng)準(zhǔn)備好程序。程序也比較簡單,首先中斷設(shè)置

3)While語句中需要輸入起始地址和長度,之后調(diào)用bram_write函數(shù)

4)在bram_read_write();函數(shù)里先通過BRAM控制器寫入數(shù)據(jù),數(shù)據(jù)初值為TEST_START_VAL,之后配置PL RAM控制器參數(shù),有長度,起始地址,初始數(shù)據(jù),以及開始信號。并在函數(shù)中判斷測試長度是否超出BRAM控制器地址范圍,如果超出,會報錯,需要重新輸入地址和長度。

5)中斷服務(wù)程序中,BRAM控制器讀取BRAM的數(shù)據(jù),并打印

3. 實驗現(xiàn)象
1)打開串口

2)通過Run Configurations下載程序

3)打開Vivado的Hardware Manager(與PL端聯(lián)合調(diào)試),設(shè)置將intr中斷信號作為觸發(fā)信號,選擇上升沿觸發(fā),點擊開始按鈕,可以看到hw_ila_1變成了Waiting for trigger狀態(tài)

4)在串口軟件中,輸入起始地址,由于BRAM詢址為1K,那么可以設(shè)置為0~1023,長度設(shè)置為1~1024,注意起始地址+長度不要超過1024,因為超出了詢址空間。

5)輸入的數(shù)據(jù)為十進制數(shù),輸入結(jié)束按回車

6)打開ILA邏輯分析儀,可以看到已經(jīng)觸發(fā),首先是PL控制器從BRAM讀數(shù)據(jù),之后是寫數(shù)據(jù),可以看到紅色為PL讀出的BRAM數(shù)據(jù),正是CPU寫入的數(shù)據(jù),從12開始,共10個數(shù)據(jù),PL寫入的數(shù)據(jù)為黃色部分從1開始,共10個數(shù)據(jù),正與上圖CPU讀BRAM的數(shù)據(jù)相符。

同樣也能看到中斷信號的狀態(tài)

7)如果超出范圍,打印錯誤信息,需要重新輸入有效信息

4. 本章小結(jié)
以上就是PS與PL通過BRAM實現(xiàn)低帶寬數(shù)據(jù)交互的實驗,兩者通過GP口進行數(shù)據(jù)互連,可以實現(xiàn)小批量的數(shù)據(jù)交互。
知識點為邏輯分析儀的使用,中斷的使用,自定義IP等。
-
FPGA
+關(guān)注
關(guān)注
1645文章
22049瀏覽量
618407 -
cpu
+關(guān)注
關(guān)注
68文章
11080瀏覽量
217062 -
Zynq
+關(guān)注
關(guān)注
10文章
615瀏覽量
48250 -
MPSoC
+關(guān)注
關(guān)注
0文章
200瀏覽量
24748 -
BRAM
+關(guān)注
關(guān)注
0文章
41瀏覽量
11307
發(fā)布評論請先 登錄
如何調(diào)試Zynq UltraScale+ MPSoC VCU DDR控制器
如何調(diào)試Zynq UltraScale+ MPSoC VCU DDR控制器
閑話Zynq UltraScale+ MPSoC(連載1)

閑話Zynq UltraScale+ MPSoC(連載5)

Xilinx基于ARM的Zynq-7000和Zynq UltraScale+ MPSoC及RFSoC器件是否存在安全漏洞
Zynq UltraScale+ MPSoC的發(fā)售消息
米爾科技Zynq UltraScale+ MPSoC技術(shù)參考手冊介紹

如何調(diào)試 Zynq UltraScale+ MPSoC VCU DDR 控制器?

米爾電子zynq ultrascale+ mpsoc底板外設(shè)資源清單分享

ZYNQ Ultrascale+ MPSoC系列FPGA芯片設(shè)計
Zynq UltraScale+ MPSoC中的隔離方法

Zynq UltraScale+ MPSoC的隔離設(shè)計示例

Zynq UltraScale+ MPSoC驗證數(shù)據(jù)手冊

評論