天天看點

ARM PMU低功耗之 P_Channel

為了滿足複雜的power管理的需求,arm提供了P_Channel的低功耗接口,來滿足這樣的應用場景。

一、P_Channel

P_Channel,提出了一個概念,叫power state transition,power狀态的切換。在P_Channel的應用場景中,power的狀态有很多,這個是實作自己定義的。power的各個狀态之間,是可以切換的。

2個最基本的狀态:

  • lower-power狀态:在這個狀态下,power消耗比較少,device處于低功耗狀态(具有部分功能)
  • higher-power狀态:在這個狀态,power消耗比較大,device處于正常狀态(具有完整功能)

1、接口

以下是P_Channel接口。

ARM PMU低功耗之 P_Channel

分為device端和power控制端(下文簡稱PMU)。

信号 說明 驅動端
PACTIVE [N-1:0] 提供wakeup功能 device
PSTATE [M-1:0] 需要切換的目的power狀态 PMU
PREQ 為高,表示power狀态切換請求 PMU
PACCEPT 為高,表示device接受power狀态切換請求 device
PDENY 為高,表示device拒絕power狀态切換請求 device

PACCEPT和PDENY在握手中,隻能有一個為高。PACCEPT表示接受請求,PDENY表示拒絕請求。

PACCEPT,PDENY,PREQ,PSTATE,必須是從寄存器直接輸出。

2、P_Channel接口握手狀态    

對P_Channel的接口,arm也定義了一些握手狀态。不過狀态,有加入了RESETn信号的影響。

  • P_RESET: device處于reset狀态
  • P_STABLE: device處于非reset狀态,并且PMU沒有發送power狀态切換請求
  • P_REQUEST: PMU向device發送power狀态切換請求
  • P_ACCEPT: device接受PMU的power狀态切換請求
  • P_DENIED: device拒絕PMU的power狀态切換請求
  • P_COMPLETE: device接受PMU的power狀态切換請求後,PMU取消power狀态切換請求
  • P_CONTINUE: device拒絕PMU的power狀态切換請求後,PMU取消power狀态切換請求

編碼:

ARM PMU低功耗之 P_Channel

以下是狀态轉移圖:

ARM PMU低功耗之 P_Channel

握手協定規則:

  • PREQ隻有在PACCEPT和PDENY都為低情況下,才可以從低變為高
  • PREQ要滿足以下的任意條件,才可以從高變為低:
  • PACCETP是高,PDENY為低
  • PACCEPT為低,PDENY為高
  • PSTATE滿足以下的任意條件,才可以變化:
  • PREQ,PACCEPT,PDENY都為低
  • PREQ和PDENY為高,PACCEPT為低
  • PACCEPT隻有在PREQ為高,并且PDENY為低,才可以從低變為高
  • PACCETP隻有在PREQ為低,并且PDENY為低,才可以從高變為低
  • PDENY隻有在PREQ為高,并且PACCEPT為低,才可以從低變為高
  • PDENY隻有在PREQ為低,并且PACCEPT為低,才可以從高變為低

3、P_Channel的握手協定

握手協定,涉及到PREQ,PSTATE,PACCEPT,PENDY這4個信号。

3.1、device接受power狀态切換

下圖是該時序圖:

ARM PMU低功耗之 P_Channel

在T2時刻之前,P_Channel處于P_STATBLE狀态。

T2時刻,PMU拉高PREQ,将PSTATE置為STATE B。向device發送power狀态切換請求,請求将device切換到STATE B的power狀态。P_Channel進入P_REQUEST狀态。

T3時刻,device将PACCEPT拉高,表示接受PMU的power狀态切換請求。P_Channel進入P_ACCEPT狀态。

T4時刻,PMU接收device的PACCEPT響應,拉低PREQ,取消請求。P_Channel進入P_COMPLETE狀态。

T5時刻,device将PACCEPT拉低,表示完成power狀态切換。P_Channel進入P_STABLE狀态。

3.2、device拒絕power狀态切換

下圖是時序圖:

ARM PMU低功耗之 P_Channel

T2時刻以前,P_Channel處于P_STABLE狀态。

T2時刻,PMU将PREQ拉高,将PSTATE置為STATE B。向device發送power狀态切換請求,請求将device切換到STATE B的power狀态。P_Channel進入P_REQUEST狀态。

T3時刻,device将PDENY拉高,表示拒絕PMU的power切換請求。P_Channel進入P_DENIED狀态。

T4時刻,PMU接收到device的PDENY響應,将PREQ拉低,取消請求,并且把PSTATE置為STATE A。P_Channel進入P_CONTINUE狀态。

T5時刻,device将PDENY拉低,P_Channel進入P_STABLE狀态。

4、device的複位和初始化

device在複位時,必須将PACCEPT和PDENY置為低,但對PACTIVE沒有要求。

P_Channel的狀态為P_STABLE時,device的複位信号,才可以設定為有效。

當device的複位無效時,device要進入初始化,此時PMU要設定PSTATE信号值,device會在複位之後,采樣該信号值,進而采用合适的初始化流程。PSTATE要在複位信号無效後要保持穩定。

device,要提供一個初始化周期時間,tinit。用來表示,複位之後,PSTATE需要保持多久時間,供device初始化使用。PSTATE在tinit時間之内,必須要保持穩定。

以下是時序圖:

ARM PMU低功耗之 P_Channel

T1時刻之前,RESETn為低,複位有效,P_Channel處于P_RESET狀态。

T1時刻,RESETn為高,PMU将PSTATE置為STATE A。P_Channel進入P_STABLE狀态。

T2時刻,由于tinit的限制,PMU要将PSTATE一直保持在STATE A,以便device正确的初始化。device必須要在tinit時間内,采樣PSTATE。此後,PMU就可以發送power切換請求了。

T3時刻,PMU将PREQ置高,并且将PSTATE置為STATE B,發送power切換請求。P_Channel進入P_REQUEST狀态。

T4時刻,device将PACCEPT拉高,表示接受PMU的power狀态切換請求。P_Channel進入P_ACCEPT狀态。

T5時刻,PMU接收device的PACCEPT響應,拉低PREQ,取消請求。P_Channel進入P_COMPLETE狀态。

T6時刻,device将PACCEPT拉低,表示完成power狀态切換。P_Channel進入P_STABLE狀态。

T7時刻,P_Channel在P_STATBLE狀态,可以進行複位,外部拉低RESETn,P_Channel進入P_RESET狀态。

下圖,展示了,當複位時,PMU發送power切換情況的時序圖。

ARM PMU低功耗之 P_Channel

T1時刻,PMU将PREQ拉高,并置PSTATE為STATE A,但是複位信号有效,device不接收PMU請求。P_Channel保持為P_RESET狀态。

T2時刻,複位信号釋放,因為PREQ為高,P_Channel進入P_REQUEST狀态。device接收PMU的power切換請求。

之後的就和上面的分析原理是一樣的了。

下圖,展示了,複位後,PMU發送使device進入STATE A的power狀态請求,當該轉換完成後,PMU又繼續發送使device進入STATE B的power狀态請求。

ARM PMU低功耗之 P_Channel

PMU在發送下一個power切換請求前,必須保證上一個power切換請求,傳輸完畢。

5、多個power狀态切換

利用P_Channel,PMU可以使device,來回切換不同的power狀态。

ARM PMU低功耗之 P_Channel

在T0,device處于STATE A狀态。

在T1到T4,通過P_Channel,使device進入STATE B狀态。在T4,P_Channel進入P_STABLE狀态。

在T5-T8,通過P_Channel,使device進入STATE C狀态。在T8,P_Channel進入P_STABLE狀态。

6、PACTIVE

PACTIVE,提供給device給PMU發送請求。PACTIVE的每一個bit,表示一種請求。bit為高,表示device發送請求給PMU,讓PMU處理,bit為低,表示device沒有發送請求給PMU處理。

PACTIVE和握手協定,是獨立開的。PACTIVE是設計自定義的,請求完全自己定義。當然,也可以不使用PACTIVE,如果不是用PACTIVE,需要将PACTIVE置為0。

以下是PACTIVE的例子:

ARM PMU低功耗之 P_Channel

PACTIVE有3個bit,每個bit,映射到一個power狀态,MSB具有高優先級。

  • PACTIVE[2]:  STATE C
  • PACTIVE[1]:     STATE B
  • PACTIVE[0]:  STATE A

T1時刻,device将PACTIVE設定為3'b011,表示device向PMU發送power切換請求,将自己切換為STATE B。

PMU接收到device的請求後,從T2到T5,向device發送power切換請求,并且切換到STATE B狀态。最後P_Channel進入P_STABLE狀态。

T6時刻,device将PACTIVE設定為3'b111,表示device向PMU發送power切換請求,将自己切換為STATE C。

PMU接收到device的請求後,從T7到T10,向device發送power切換請求,并且切換到STATE C狀态。最後P_Channel進入P_STABLE狀态。

7、對于device,需要提供的資訊

為了PMU的設計的正确性,device需要向PMU提供以下的一些資訊:

  • device支援的power狀态,包括以下:
  • PSTATE定義和編碼
  • PACTIVE每個bit代表的請求
  • 用于初始化power狀态,推薦的PACTIVE輸出
  • PACTIVE需要被忽略,或者一直置0的bit資訊
  • power狀态的切換,包括以下:
  • power狀态切換之後的device行為
  • device拒絕power狀态切換的條件
  • 複位釋放後,用于初始化device的PSTATE的合理值
  • tinit值

8、實作

對于device和PMU來說,有各自的時鐘,是以他們的時鐘,是當成異步來進行處理的,是以需要同步化的操作。

下圖展示了,P_Channel的實作框圖:

對于PSTATE,PREQ,PACCETP,PDENY,需要從寄存器直接輸出,在接收端,需要使用同步器,對異步輸入信号進行同步化輸出。

對于PACTIVE,如果是多個來源的組合,ARM建議使用或門來實作。并且每個對PACTIVE貢獻的來源,必須是寄存器直接輸出。

ARM PMU低功耗之 P_Channel

9、P_Channel使用例子

以下是P_Channel使用的2個例子。

9.1、獨立的power domain使用P_Channel

device0處于power domain0,PMU使用PD0來控制。

device1處于power domain1和power domain2,PMU使用PD1和PD2來分别控制。

ARM PMU低功耗之 P_Channel

9.2、父子關系的power domain使用P_Channel

device1内部有3個power domain,分别為power domain0,power domain1,power domain2,但是domain0是domain1和domain2的父domain,也就是domain0控制domain1和domain2。

PMU和device1有3個P_Channel接口,但是都是在power domain0中。

繼續閱讀