AMD-Xilinx MPSoC 和 Versal ACAP 系列均具有復雜的內部電源結構,其中包括全功率域 (FPD) 、低功耗域 (LPD) 、單個處理器電源域、外設等節點以及存儲器電源域。
?
這些域可以通過通、斷電,優化整個解決方案的功耗。并且允許在運行時進行動態電源管理,為當前用例實現最低功耗。在 MPSoC 和 Versal 器件中,系統電源管理均由專用 MicroBlaze 處理器控制。它由 MPSoC 器件中的平臺管理單元 (PMU) 和 Versal 器件中的平臺管理控制器 (PMC) 執行。
PMU 在 MPSoC 的運行中扮演著多種角色。這些角色可以概括為平臺管理:
在引導期間執行初始化。此過程使用 Sysmon 檢查電源、初始化 PLL、運行內置測試并在釋放 CSU 之前檢查錯誤。
在操作期間執行電源管理。PMU 可以關閉電源域或單個電源島或進入深度睡眠模式。一旦進入深度睡眠模式,PMU 也會暫停。只有 PMU 可以接收喚醒觸發信號。
監視系統的錯誤,并能夠通過專用 MIO 上的 PS_ERROR_STATUS 引腳在內部和外部報告這些錯誤。
為功能安全應用程序可能需要的更高級別的系統管理提供支持。例如,用戶可以上傳自己的更高級的PMU軟件來運行軟件測試庫(STL)。
電源管理角色很有趣,因為處理器中斷允許 APU、RPU 或 PL MicroBlaze 等電源主設備管理電源從設備。
首先,我們需要創建 PMU 固件,該固件是在 Vitis 中的新應用程序向導中針對 PMU 處理器創建的。框圖非常簡單,只使用 PS即可。
如果我們需要對 PMU 固件進行更改確保調試可見性,可以使用多個標志指示。這些在Zynq UltraScale+ MPSoC 軟件開發人員指南 UG1137 的第 139 頁上進行了定義,并且可以作為符號添加到 PMU 固件的 C/C++ 設置中。
構建 PMU 固件后,我們需要在板支持設置中啟用 XilPM 庫。
在我們的應用程序 BSP 中啟用該庫時就允許應用程序與 PMU 及其電源管理軟件進行通信。運行該軟件使我們能夠觀察電源域和島的狀態,并根據需要關閉和打開域/島的電源。API 調用的完整列表在UG643中的操作系統和庫文檔集中有詳細說明。
對于這個簡單的示例,創建一個應用程序,該應用程序將循環檢查所有電源島和域,并輸出節點狀態報告。
以下是上面使用的術語的一些定義
要求Requirements – 這些是每個節點的特定要求,并且對于每個節點/島/域來說都是不同的。
狀態Status - 顯示島、域或節點的狀態。對于 CPU 節點,顯示 CPU 狀態為 CPU OFF(0)、CPU Active (1)、CPU Sleep (2) 或 CPU suspending (3)。對于電源島,它只是位于打開 (1) 或關閉 (0) 的島。節點有三種狀態:開 (1)、關 (0) 和保留 (2)。
使用情況Usage – 節點當前未使用(0),由調用者獨占使用(1),節點被其他權力使用
該應用程序查看 Zynq MPSoC 中的所有 70 個電源島、節點和域,并通過XilPM 客戶端的源代碼pm_defs.h(https://github.com/Xilinx/embeddedsw/blob/master/lib/sw_services/xilpm/src/zynqmp/client/common/pm_defs.h)進行到節點的映射。
在加載 PMU 固件時,配置內存有兩個選項。
引導 ROM 加載 – 在這種情況下,PMU 由引導 ROM 加載并在 FSBL 之前開始運行。由于設備 IO 尚未配置,因此不會有終端輸出。但是,如果未找到 PMU 固件,FSBL 將報告警告。
由 FSBL 加載 - 在這種情況下,FSBL 加載 PMU 固件,然后 PMU 將能夠輸出其版本等。
這些選擇引導 ROM 或 FSBL 加載由引導文件創建(bif 文件)中 PMU elf 的標記方式控制。如果 PMU elf 分區被定義為發往 PMU 的數據文件,它將由 FSBL 加載。
如果我們將分區類型設置為由引導ROM加載的PMU,它將由引導ROM加載。
如果我們想要調試應用程序,我們首先需要確保 PMU 在 FSBL 等之前加載并運行。這是因為如果不刪除安全門,PU MicroBlaze 在 XSDB 中不可見。
為此,我們可以使用 XSCT 并創建一個簡單的 TCL 腳本,如下所示。請注意,需要在應用程序中編輯軟件的名稱和路徑。
?
#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
?
今天關于 PMU 就介紹到這里。
?
審核編輯:劉清
評論