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)建的。框圖非常簡(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ō)明。
對(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 就介紹到這里。
?
審核編輯:劉清
評(píng)論