本篇博客展示了如何訪問 NPI 為 NoC(片上網(wǎng)絡(luò))公開的 Performance Monitor(性能監(jiān)控器)寄存器,這些寄存器用于監(jiān)控 NoC 的性能。
NoC 包含以下組件:
NMU(NoC 主單元)
NSU(NoC 從單元)
上述每個組件都有自己的一組 Performance Monitor 寄存器。
什么是 Performance Monitor?
Performance Monitor 是在每個 NoC 中嵌入的一組寄存器,允許用戶通過一組給定的指標(biāo)來觀察流量。這些指標(biāo)包括:
突發(fā)計數(shù)
待處理的傳輸事務(wù)數(shù)
溢出和字節(jié)計數(shù)(下限和上限)
最大/最小時延值
累積時延(下限和上限)
解決方案:
除了使用基于 Python 的 ChipScoPy 方案外,還可以通過 XSDB(使用 Tcl)或系統(tǒng)上運行的應(yīng)用程序 (C/C++) 來訪問這些指標(biāo)寄存器。
在本演示中選擇通過 XSDB 運行 Tcl 腳本。將該腳本轉(zhuǎn)換為 C++ 相對簡單,隨后即可將其作為應(yīng)用程序來運行。
該腳本包含:
硬編碼的寄存器地址(這些地址與器件相關(guān),本例中器件為 VPK120)
讀寫函數(shù)
鎖定和解鎖函數(shù)
循環(huán)函數(shù)
演示設(shè)計 (VPK120):

該設(shè)計包含一個 NoC 和兩個可綜合的 Performance AXI Traffic Generator (TG),用于驅(qū)動 AXI 傳輸事務(wù)流量。這些 TG 共享同一個 CSV 文件:

該 CSV 包含兩個場景。第一個場景包括一次寫入事務(wù)、一次讀/寫事務(wù)和一次讀取事務(wù);第二個場景(本演示重點)是循環(huán)讀/寫傳輸事務(wù)。
我們通過切換 Virtual Input/Output 來啟用流量生成器并選擇 CSV 場景。
設(shè)置演示:
下載 recreate.tcl 和 Custom.csv
使用 Source 命令運行 recreate.tcl(打開 AMD Vivado 設(shè)計套件,在 Tcl 控制臺中運行 source recreate.tcl)
在 Vivado 中,打開生成工程的 XPR
右鍵單擊 design_1,然后單擊“Create HDL Wrapper”(創(chuàng)建 HDL 封裝文件)。選擇“Let Vivado manage wrapper and auto-update”(讓 Vivado 管理封裝文件并自動更新)選項
運行綜合與實現(xiàn)
生成器件鏡像
打開硬件管理器
如何運行演示:
我們將啟動器件,并使其做好連接準(zhǔn)備 (JTAG) 工作,以便允許我們通過直接連接或者通過遠(yuǎn)程硬件服務(wù)器來進(jìn)行調(diào)試。隨后,我們將為自己的設(shè)計完成 Vivado 硬件管理器設(shè)置,并連接到目標(biāo)硬件。
我們通過使用 VIO 來觸發(fā) Traffic Generator 運行 CSV 中的第二個場景(循環(huán)讀/寫)。
返回到器件后,我們將使用 XSDB(賽靈思調(diào)試實用工具)來運行腳本并觀察輪詢到的傳輸事務(wù)指標(biāo)。
在器件上:
無論您如何管理器件,請啟動它并確保其可連接到 Vivado 硬件管理器。
這里需要運行 hw_server 以便遠(yuǎn)程連接。
在 Vivado 中:
注釋:您可以為其他器件重做此設(shè)計,但請確保將腳本中的寄存器值更新為正確的目標(biāo)寄存器。
如果您對應(yīng)使用哪些寄存器存有疑問,請參閱:000035076 - Versal NoC:哪些 NPI 地址與 NoC/DDRMC site 位置有關(guān)聯(lián)?:
https://adaptivesupport.amd.com/s/article/000035076?language=zh_CN
打開 Vivado 并轉(zhuǎn)至 Vivado 硬件管理器。打開到您的開發(fā)板的目標(biāo)連接(通過遠(yuǎn)程 hw_server 或 localhost):

您應(yīng)在藍(lán)色下拉欄中看到“Program device”(器件燒錄)選項:

選中“Program device”時,它會自動檢測您的 PDI 和調(diào)試探針。如未執(zhí)行自動檢測,請嘗試重新生成器件鏡像:

如果在后續(xù)選項卡中未看到 VIO,請使用 (+) 符號添加。
將全部 3 個 VIO 都翻轉(zhuǎn)為 0 值,然后將 VIO_2 重新翻轉(zhuǎn)為 0。提供的 CSV 包含兩個場景;我們需要使用第二個場景,即持續(xù)讀/寫循環(huán)。
這樣可以確保我們有流量可供測量:

選擇“Toggle auto-retrigger mode for this ILA core”(為此 ILA 核切換自動重新觸發(fā)模式),然后選擇旁邊的“Run trigger for this ILA core”(為此 ILA 核運行觸發(fā)器),即播放按鈕。
這樣應(yīng)該會在波形窗口中出現(xiàn)活動,并且應(yīng)無限循環(huán)。

在器件上:
現(xiàn)在器件中已有循環(huán)運行的流量,我們可以在您的器件命令行上運行 xsdb 來打開 XSDB,在 XSDB 中運行“connect”,然后運行“ta 1”,導(dǎo)航到您的腳本的存儲位置(本演示附帶的腳本),并通過“source

NoC性能監(jiān)控器調(diào)試指南