[1]https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842098/Zynq+UltraScale+MPSoC+Cache+Coherency
[2]https://support.xilinx.com/s/article/69446?language=en_US
Versal與MPSoC在cache維護數據的架構上,有一定的相似性。所以在Versal器件里,我們仍然可以使用上述文檔 [1] 里8.1和8.2的checklist去檢測系統是否滿足一致性傳輸的條件。
本篇博客提供了一個基于VCK190 ES1開發板和2021.1 Vivado/Vitis的例子,用來簡單介紹在Versal里實現數據從PL 經過 FPD CCI 到達 NoC DDR的一致性傳輸。
這個例子與上面文檔[2]的例子類似,使用AXI CDMA IP實現數據的傳輸,通過修改AXI CDMA在Vitis里的參考設計,實現CPU直接讀寫AXI CDMA傳輸過來的數據,不必進行額外的cache操作。
這個例子里,AXI CDMA通過NOC連接到CIPS IP的NOC_FFD_CCI_1接口,這個接口是連接到PS內部的cache管理模塊CCI-500,下面是這個例子的Block Design截圖。更具體的block design,請新建一個VCK190 ES1的工程,然后運行附件的tcl文件創建完整的block design。
可以通過雙擊CIPS IP,選擇PS PMC,使能連接NoC的CCI接口。(另外,還可以使用PS與PL的ACP或ACE接口,這兩個接口也能實現數據的一致性傳輸。)
NoC的AXI Slave接口需要配置如下AxCache和AxProt的值,具體原因請參考文檔 [2]。
AxCache: 0xF
AxProt: 0x0
在Block Design創建后,由于工具的已知問題(https://support.xilinx.com/s/article/76566),需要在tcl里運行下面命令,否則AXI CDMA會訪問不到NoC DDR。運行完以下命令后,再重新分配地址。
set_property CONFIG.CONNECTIONS [list FPD_CCI_NOC_1] [get_bd_intf_pins /versal_cips_0/NOC_FPD_CCI_1]
最后把工程導出到Vitis,新建一個基于A72_0的應用工程。把(1)附件的xaxicdma_example_simple_poll.c導入到新的工程里,編譯出elf。
(2)附件的xaxicdma_example_simple_poll.c是基于AXI Cdma IP自帶的例子修改而來的。里面主要做了兩處修改,一是使能了CCI模塊S4接口的snooping,二是把例子里對cache的操作去掉。
下面是使能snooping的代碼:
Xil_Out32(0XFD005000,0x1);
dmb();
最后可以運行下面的bootgen命令,通過(3)附件的bif文件把pdi和elf文件打包成boot.bin, 然后拷貝到VCK190的SD卡上運行。
[以上123附件可在公眾號內回復“123附件”下載]
bootgen -arch versal -image long.bif -w -o boot.bin
下面是正常的輸出:
[4.021]PLM Initialization Time
[4.083]***********Boot PDI Load: Started***********
[4.161]Loading PDI from SD1_LS
[4.223]Monolithic/Master Device
[307.009]302.813 ms: PDI initialization time
[307.087]+++Loading Image#: 0x1, Name: lpd, Id: 0x04210002
[307.175]---Loading Partition#: 0x1, Id: 0xC
[332.064]****************************************
[336.419]Xilinx Versal Platform Loader and Manager
[340.945]Release 2021.1 Feb 11 2022 - 0903
[345.384]Platform Version: v1.0 PMC: v1.0, PS: v1.0
[349.908]BOOTMODE: 0xE, MULTIBOOT: 0xF0000000
[353.921]****************************************
[358.315] 51.029 ms for Partition#: 0x1, Size: 2336 Bytes
[363.312]---Loading Partition#: 0x2, Id: 0xB
[367.799] 0.527 ms for Partition#: 0x2, Size: 48 Bytes
[372.021]---Loading Partition#: 0x3, Id: 0xB
[379.571] 3.587 ms for Partition#: 0x3, Size: 60592 Bytes
[381.822]---Loading Partition#: 0x4, Id: 0xB
[387.173] 1.387 ms for Partition#: 0x4, Size: 5968 Bytes
[390.705]---Loading Partition#: 0x5, Id: 0xB
[395.390] 0.721 ms for Partition#: 0x5, Size: 80 Bytes
[399.482]+++Loading Image#: 0x2, Name: pl_cfi, Id: 0x18700000
[404.800]---Loading Partition#: 0x6, Id: 0x3
[11801.051] 11392.281 ms for Partition#: 0x6, Size: 863984 Bytes
[11803.906]---Loading Partition#: 0x7, Id: 0x5
[11872.509] 64.470 ms for Partition#: 0x7, Size: 467600 Bytes
[11875.153]+++Loading Image#: 0x3, Name: fpd, Id: 0x0420C003
[11880.401]---Loading Partition#: 0x8, Id: 0x8
[11885.475] 0.942 ms for Partition#: 0x8, Size: 1104 Bytes
[11889.911]+++Loading Image#: 0x4, Name: apu_ss, Id: 0x1C000000
[11895.178]---Loading Partition#: 0x9, Id: 0x0
[11908.765] 9.453 ms for Partition#: 0x9, Size: 176208 Bytes
[11911.365]***********Boot PDI Load: Done***********
[11915.925]194.206 ms: ROM Time
[11918.708]Total PLM Boot Time
--- Entering main() ----
Successfully ran AxiCdma_SimplePoll Example
--- Exiting main() ---
這篇博客只是著重介紹了在Versal工程里實現cache一致性傳輸的一些要點。
審核編輯 :李倩
-
數據
+關注
關注
8文章
6892瀏覽量
88828 -
檢測系統
+關注
關注
3文章
947瀏覽量
43015 -
Versal
+關注
關注
1文章
153瀏覽量
7645
原文標題:開發者分享|在Versal里實現cache一致性傳輸
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論