目錄
一、簡單介紹
1.1 概念
PMU,platform measurement unit,平臺管理單元。
很多人會將它當做power measurement unit(電源管理單元)的縮寫,認爲就是管理電源和功耗的。其實PMU除了電源管理功能,還具有其他功能。官方描述如下:
系統啓動前的初始化
電源管理
軟件測試庫執行(可選)
系統錯誤處理
1.2 總覽
在電源管理章節裏,我們簡單介紹了Zynq U+裏的4個功耗域。其中PMU模塊本身處在低功耗域,如下圖爲PMU的模塊框圖:
PMU包括以下子組件:
專用的、容錯率高的三模冗餘處理器
ROM中會存放PMU ROM代碼,功能包括PMU的啓動順序、處理電源開關請求的例程和中斷
用於存放代碼和數據的帶ECC功能的128kb內存
只能被PMU訪問的PMU本地寄存器
可以被PMU處理器和系統裏其他總線的master口訪問的PMU全局寄存器。包括所有電源、隔離和復位請求寄存器。還包括錯誤捕獲寄存器和系統電源狀態寄存器。
PMU外部的master接口可以通過32位的AXI slave接口訪問PMU的RAM和全局寄存器。
PMU中斷控制器管理了PMU的23箇中斷,其中四個來自處理器間的互連(IPI)
PMU/MIO/PL相連的GPI和GPO寄存器接口,以及其他PS和PMU的互聯信號:
1) 6個輸出,6個輸入
2) PMU端有32個GPO輸出到PL,PL端有32個GPI輸入到PMU
3) 47個系統錯誤到PMU
4) CSU的錯誤碼
5) 32個MBIST狀態信號和32個MBIST完成信號
6) 3個直接復位控制信號
7) 4個AIB狀態信號和4個AIB控制信號
8) 11個邏輯清除狀態信號
9) DDR保持控制信號
10) 3個從PL端到CSU的可編程配置信號
可以通過PSJTAG接口訪問使用PS TAP控制器的PMU MDM控制器
二、PMU功能
2.1 PMU處理器
PMU處理器是一個不帶cache的三模冗餘處理器。處理系統通過在PMU上應用冗餘和在RAM側應用ECC來提供容錯能力。
下圖爲PMU處理器的實現功能(實際主要是一個MicroBlaze核)。
2.2 PMU處理器接口
PMU提供輸入和輸出信號,這些信號按功能可以分組如下:
32位的AXI master接口和低功耗域(LPD)互連,允許PMU訪問其他PS資源,包括SLCR寄存器和IPI塊
通過LPD inbound switch的32位AXI slave接口,允許外部處理器訪問PMU全局寄存器和PMU RAM
PMU時鐘和復位信號。
和PS內所有islands相連的電源控制接口:
1) L2、OCM和TCM RAMs
2) APU_Cores[3:0]
3) 雙核Cortex®-R5實時處理器
4) USB0、USB1
5) GPU像素處理器PP0和PP1
6)全功率域和PL功率域的crossing bridges
2.3 PMU時鐘
PMU工作在SysOsc時鐘(180 MHz±15%),該時鐘由位於系統監視器(PS SYSMON)模塊內的內部環形振盪器(IRO)提供。時鐘一直被門控着直到POR模塊檢測到VCC_PSAUX升高。一旦電壓達到閾值,SysOsc便開始振盪工作。同時,PMU的處理器也跟着復位。復位需要一個時鐘沿的觸發,等到電壓升高,POR_B輸入也會跟着起來。這保證了PMU處理器GPOs在器件上電後能夠初始化。
2.4 PMU復位
PMU有兩個復位,POR復位和系統復位SRST,這兩個復位都來自於芯片的復位模塊。
POR復位可以完全清除PMU狀態,保證所有的電源域上電和所有的隔離被禁用。POR復位後,PMU在低功耗和全功耗域執行scan和BIST清除功能。
另一方面,SRST只能復位PMU處理器子系統、PMU互連以及局部和全局寄存器的一個子集,而將大多數局部和全局寄存器保留在復位之前的狀態。當通過SRST觸發PMU重啓時,將不會清除電源狀態,PS的電源狀態會被保留。
如果是直接上下電覆位,將清除所有RAMs和FIFO電源狀態。
2.5 PMU RAM
PMU的很多功能是由PMU處理器執行的軟件提供的。ROM內存包含提供默認功能的指令。用戶如果要擴展或替換這些功能,或者提供新功能,可以將軟件下載到PMU處理器的128kb RAM中。PMU包括一個128kb的RAM和32位的ECC,用於保存數據和代碼。PMU RAM可由PMU處理器和外部master接口通過PMU slave接口去訪問。
寫PMU RAM時,只支持以word爲單位,也就是4byte,不支持byte爲單位。如果寫入的數據少於4個byte,那麼必須先讀取、修改這4byte,然後將整個4byte數據寫回。
外部master通過APB接口訪問PMU RAM時PMU處理器必須處於休眠模式。如果PMU處理器沒有處於休眠狀態時訪問,PMU RAM將掛起系統。
2.6 PMU ROM
PMU內有一塊ROM空間,包含PMU的引導代碼、中斷向量和PMU可以執行的服務例程(根據請求執行)。PMU ROM負責PMU中的各種功能,以下是ROM代碼可以執行的任務列表:
1) Pre-boot任務
清除PMU RAM空間
使能系統監控器,檢查低功耗域是否供電
根據初始化設置配置PLL時鐘
觸發和排序必要的scan和PS的BIST清除
釋放CSU復位
2) Post-boot任務
PS內的功耗域上下電
使能和控制BISR(內置的自修復功能)
當要求或作爲主電源的一部分時,充當復位模塊
3) 根據要求執行固件代碼
2.7 MBIST功能
MBIST,memory built-in self test,存儲器內部自測試。
ROM代碼可以在除去PMU外的LP域或整個FP域上啓動MBIST clear操作。當使用MBIST測試或清除內存時,系統的其餘部分可以正常工作。
在用戶可以通過配置MBIST_RST、MBIST_PG_EN和MBIST_SETUP寄存器來啓動該特定塊上的MBIST進程。MBIST_DONE位被用來指示進程是否已經完成,MBIST_GOOD用來指示進程狀態,0表示失敗1表示成功。
關於MBIST模塊的具體功能,這裏不做過多描述和解析,可以參考ug1087相關文檔,以後有機會也可以單獨開章節學習。
2.8 Scan清除功能
歸零化過程中,所有的存儲元素都要移位歸零,然後再驗證該操作是否正確。這是由MBIST和scan清除功能實現的。scan清除引擎只能由PMU和CSU處理器通過直接接口進行控制,其他處理器如果要請求啓動任何特定的can清除引擎都必須通過SCAN_CLR_REQ寄存器。當scan清除引擎啓動時,來自引擎的完成狀態信號從1變成0,這個信號直接路由到PMU的LOGCLR_ACK寄存器,將引擎的完成狀態傳遞給PMU。當一個scan清除引擎完成它的操作時,它的完成狀態位從0變成1,生成一個到PMU的中斷信號。清除操作是否成功可以通過PMU LOGCLR_STATUS全局寄存器中的位來檢查。
2.9 PMU Interconnect
PMU包含一個2*3的互連,支持2個AXI master,2個APB slave和1個AXI slave。
2個AXI master口中,其中一個是32bit,來自三模冗餘處理器;另外一個master口來自低功耗電源域的主互連,該接口允許系統中的任何主機訪問PMU從機。
2個APB slave口是PMU RAM和PMU全局寄存器文件。
1個AXI slave口在路由到LPD交換機的端口上,只允許被PMU處理器發起訪問。
2.10 PMU I/O寄存器
PMU IO寄存器包括所有和中斷、GPI/GPO以及可編程間隔計時器PITs相關的寄存器。PMU_IOMODULE寄存器控制中斷控制器、GPI{0:3}、GPO{0-3}和PIT0-PIT3。PMU_GLOBAL寄存器使能系統處理器來控制中斷並觸發PMU服務請求。PMU處理器的Memory空間如下表:
2.11 PMU全局寄存器
全局寄存器集包括用作PMU和其他塊之間的通信手段的寄存器,以同步有關電源/系統管理和復位的活動。
2.12 GPIs和GPOs
PMU處理器包括4個本地的GPI banks和4個GPO banks。其中,GPI0和GPO0保留給專用的PMU處理器子系統特性,GPI3和GPO3保留給和PL的通信。GPI1、GPI2、GPO1和GPO2用於PS硬件特性與PMU之間的通信。具體的寄存器描述這邊不做深入研究,大家可以看看ug1085。
2.13 PITs
PMU處理器包括4個32bit的可編程間隔計時器PITs。PITs的時鐘源是PMU的固定系統振盪器SysOsc。這些是通用計時器,用於作爲延遲計數器或事件調度,可以通過GPO0配置。
2.14 PMU中斷
當PMU處理器接收到一箇中斷時,它會分流到PMU的ROM,ROM代碼必須在PMU I/O模塊的中斷控制器中檢查正在掛起的中斷寄存器並分流到ROM或RAM對應的中斷服務例程裏。掛起中斷之間的優先級可以由PMU固件強制執行,如果不存在,則由ROM來管理優先級。
2.15 PMU的錯誤處理和自救邏輯
PMU對每個錯誤負責獲取、上報並採取合適的處理。每個系統錯誤都定義在PMU_GLOBAL錯誤狀態寄存器中。PMU還包括處理此功能所需的寄存器、邏輯和接口。
具體如何處理和自救,這裏先不詳細描述,可以參考ug1085。