Xilinx 電源管理庫(kù) (XilPM)介紹及使用
掃描二維碼
隨時(shí)隨地手機(jī)看文章
AMD-Xilinx MPSoC 和 Versal ACAP 系列均具有復(fù)雜的內(nèi)部電源結(jié)構(gòu),其中包括全功率域 (FPD) 、低功耗域 (LPD) 、單個(gè)處理器電源域、外設(shè)等節(jié)點(diǎn)以及存儲(chǔ)器電源域。

這些域可以通過(guò)通、斷電,優(yōu)化整個(gè)解決方案的功耗。并且允許在運(yùn)行時(shí)進(jìn)行動(dòng)態(tài)電源管理,為當(dāng)前用例實(shí)現(xiàn)最低功耗。在 MPSoC 和 Versal 器件中,系統(tǒng)電源管理均由專(zhuān)用 MicroBlaze 處理器控制。它由 MPSoC 器件中的平臺(tái)管理單元 (PMU) 和 Versal 器件中的平臺(tái)管理控制器 (PMC) 執(zhí)行。
PMU 在 MPSoC 的運(yùn)行中扮演著多種角色。這些角色可以概括為平臺(tái)管理:
-
在引導(dǎo)期間執(zhí)行初始化。此過(guò)程使用 Sysmon 檢查電源、初始化 PLL、運(yùn)行內(nèi)置測(cè)試并在釋放 CSU 之前檢查錯(cuò)誤。
-
在操作期間執(zhí)行電源管理。PMU 可以關(guān)閉電源域或單個(gè)電源島或進(jìn)入深度睡眠模式。一旦進(jìn)入深度睡眠模式,PMU 也會(huì)暫停。只有 PMU 可以接收喚醒觸發(fā)信號(hào)。
-
監(jiān)視系統(tǒng)的錯(cuò)誤,并能夠通過(guò)專(zhuān)用 MIO 上的 PS_ERROR_STATUS 引腳在內(nèi)部和外部報(bào)告這些錯(cuò)誤。
-
為功能安全應(yīng)用程序可能需要的更高級(jí)別的系統(tǒng)管理提供支持。例如,用戶可以上傳自己的更高級(jí)的PMU軟件來(lái)運(yùn)行軟件測(cè)試庫(kù)(STL)。
電源管理角色很有趣,因?yàn)樘幚砥髦袛嘣试S APU、RPU 或 PL MicroBlaze 等電源主設(shè)備管理電源從設(shè)備。
首先,我們需要?jiǎng)?chuàng)建 PMU 固件,該固件是在 Vitis 中的新應(yīng)用程序向?qū)е嗅槍?duì) PMU 處理器創(chuàng)建的??驁D非常簡(jiǎn)單,只使用 PS即可。


如果我們需要對(duì) PMU 固件進(jìn)行更改確保調(diào)試可見(jiàn)性,可以使用多個(gè)標(biāo)志指示。這些在Zynq UltraScale+ MPSoC 軟件開(kāi)發(fā)人員指南 UG1137 的第 139 頁(yè)上進(jìn)行了定義,并且可以作為符號(hào)添加到 PMU 固件的 C/C++ 設(shè)置中。

構(gòu)建 PMU 固件后,我們需要在板支持設(shè)置中啟用 XilPM 庫(kù)。

在我們的應(yīng)用程序 BSP 中啟用該庫(kù)時(shí)就允許應(yīng)用程序與 PMU 及其電源管理軟件進(jìn)行通信。運(yùn)行該軟件使我們能夠觀察電源域和島的狀態(tài),并根據(jù)需要關(guān)閉和打開(kāi)域/島的電源。API 調(diào)用的完整列表在UG643中的操作系統(tǒng)和庫(kù)文檔集中有詳細(xì)說(shuō)明。
?https://docs.xilinx.com/r/en-US/oslib_rm/BSP-and-Libraries-Overview
?
對(duì)于這個(gè)簡(jiǎn)單的示例,創(chuàng)建一個(gè)應(yīng)用程序,該應(yīng)用程序?qū)⒀h(huán)檢查所有電源島和域,并輸出節(jié)點(diǎn)狀態(tài)報(bào)告。
以下是上面使用的術(shù)語(yǔ)的一些定義
-
要求Requirements – 這些是每個(gè)節(jié)點(diǎn)的特定要求,并且對(duì)于每個(gè)節(jié)點(diǎn)/島/域來(lái)說(shuō)都是不同的。
-
狀態(tài)Status - 顯示島、域或節(jié)點(diǎn)的狀態(tài)。對(duì)于 CPU 節(jié)點(diǎn),顯示 CPU 狀態(tài)為 CPU OFF(0)、CPU Active (1)、CPU Sleep (2) 或 CPU suspending (3)。對(duì)于電源島,它只是位于打開(kāi) (1) 或關(guān)閉 (0) 的島。節(jié)點(diǎn)有三種狀態(tài):開(kāi) (1)、關(guān) (0) 和保留 (2)。
-
使用情況Usage – 節(jié)點(diǎn)當(dāng)前未使用(0),由調(diào)用者獨(dú)占使用(1),節(jié)點(diǎn)被其他權(quán)力使用
該應(yīng)用程序查看 Zynq MPSoC 中的所有 70 個(gè)電源島、節(jié)點(diǎn)和域,并通過(guò)XilPM 客戶端的源代碼pm_defs.h(https://github.com/Xilinx/embeddedsw/blob/master/lib/sw_services/xilpm/src/zynqmp/client/common/pm_defs.h)進(jìn)行到節(jié)點(diǎn)的映射。

在加載 PMU 固件時(shí),配置內(nèi)存有兩個(gè)選項(xiàng)。
-
引導(dǎo) ROM 加載 – 在這種情況下,PMU 由引導(dǎo) ROM 加載并在 FSBL 之前開(kāi)始運(yùn)行。由于設(shè)備 IO 尚未配置,因此不會(huì)有終端輸出。但是,如果未找到 PMU 固件,F(xiàn)SBL 將報(bào)告警告。
-
由 FSBL 加載 - 在這種情況下,F(xiàn)SBL 加載 PMU 固件,然后 PMU 將能夠輸出其版本等。
這些選擇引導(dǎo) ROM 或 FSBL 加載由引導(dǎo)文件創(chuàng)建(bif 文件)中 PMU elf 的標(biāo)記方式控制。如果 PMU elf 分區(qū)被定義為發(fā)往 PMU 的數(shù)據(jù)文件,它將由 FSBL 加載。

如果我們將分區(qū)類(lèi)型設(shè)置為由引導(dǎo)ROM加載的PMU,它將由引導(dǎo)ROM加載。

如果我們想要調(diào)試應(yīng)用程序,我們首先需要確保 PMU 在 FSBL 等之前加載并運(yùn)行。這是因?yàn)槿绻粍h除安全門(mén),PU MicroBlaze 在 XSDB 中不可見(jiàn)。
為此,我們可以使用 XSCT 并創(chuàng)建一個(gè)簡(jiǎn)單的 TCL 腳本,如下所示。請(qǐng)注意,需要在應(yīng)用程序中編輯軟件的名稱(chēng)和路徑。
#Disable Security gates to view PMU MB target targets -set -filter {name =~ "PSU"} mwr 0xffca0038 0x1ff after 500 #Load and run PMU FW targets -set -filter {name =~ "MicroBlaze PMU"} dow xpfw.elf con after 500 #Reset A53, load and run FSBL targets -set -filter {name =~ "Cortex-A53 #0"} rst -processor dow fsbl_a53.elf con #Give FSBL time to run after 5000 stop
今天關(guān)于 PMU 就介紹到這里,后續(xù)我們會(huì)更詳細(xì)的介紹其功能。