AMBA提供了,低功耗的接口。用于实现power控制功能。目前,AMBA里面,包含2种低功耗接口。
- Q-Channel:实现简单的power控制,如上电,下电。
- P-Channel:实现复杂的power控制,如全上电,半上电,1/4上电等。
ARM引入这2种低功耗接口,是为了满足不同的应用场景下,对power的控制。
在一些场景下,组件只有两种power状态,分别为power-up,power-down。因此对这种组件的power控制,只需要对其上电,断电即可。用Q-Channel,即可实现。
而在另外的场景下,组件拥有多种power状态,比如全上电,半上电,1/4上电等。因此对这种组件的power控制,就要复杂很多,不能简单的对其上电,断电即可,还需要额外的一些控制。此时,用Q-Channel,就不合适了,需要使用P-Channel。
比如在DynamlQ技术中,引入了L3 cache,并且每个core拥有自己的L1 cache,L2 cache,这样,整个系统中,cache的容量就变大了,相应的,消耗在cache上的功耗,也增多了。此时,就需要复杂的对cache的power控制,来实现低功耗,比如对L3 cache,1/4上电,也就是只有1/4的L3 cache工作,其余的都断电,以此来节省功耗。此时,就要用到P-Channel。
一、Q-Channel
Q-Channel是从AXI的低功耗接口中,演变过来。但是可以向后兼容。
1、接口
以下是Q-Channel的接口:
分为device端和power controller端(下文均简称为PMU)。device端,就是需要被电源控制的组件,比如core,外设等。PMU端,就是提供电源管理的组件。
在Q-Channel中,将device的power状态,分成了2种,
- operational状态: device处于工作状态,简单理解为上电状态,下文称为上电状态
- quiescent状态:device处于停止状态,简单理解为断电状态,下文称为断电状态
接口如下:
信号说明QACTIVE提供给device,向PMU发送power请求,更改自己的power状态
为高,表示device需要PMU将自己置为上电状态
为低,表示device需要PMU将自己置为断点状态QREQnpower controller发送power请求信号
为高,表示上电
为低,表示断电QACCEPTn为高,表示device接受外部power请求QDENY为高,表示device拒绝外部power请求
2、Q-Channel接口的握手状态
ARM对Q-Channel的interface,定义了几种握手状态:
- Q_RUN: device处于上电状态。
- Q_REQUEST: device处于上电状态,但是在idle状态时,可以接收power request,进入断电状态。
- Q_STOPPED: device进入了断电状态。
- Q_EXIT: 等待被提供时钟或者power的状态。当device得到外部提供的时钟或者power时,将QACCEPTn拉高,进入Q_RUN状态。
- Q_DENIED: device拒绝外部power的请求,不进入断电状态,而保持上电状态。
- Q_CONTINUE: PMU在Q_DENIED状态后,将QREQn拉高后的状态。
以下是编码:
下图是各个握手状态的切换:
对于握手信号,有以下的规则:
- QREQn只能在QACCEPTn为高并且QDENY为低时,才可以从高变为低。
- QREQn满足以下条件,才可以从低变为高
- QACCEPTn和QDENY都为低
- QACCEPTn和QDENY都为高
- QACCEPTn只能在QREQn和QDENY都为低情况下,才可以从高变为低
- QACCEPTn只能在QREQn和QDENY都为高情况下,才可以从低变为高
- QDENY只能在QREQn和QACCEPTn都为高情况下,才可以从高变为低
- QDENY只能在QREQn为低并且QACCEPTn为高情况下,才可以从低变为高
上面的这些原则,在设计P-Channel时,需要遵守的。
3、P_Channel的握手协议
3.1、device接受PMU的power请求
以下是握手协议时序图:
在T1,QREQn和QACCEPTn为高,Q_Channel进入Q_RUN状态。
在T2,QREQn为低,PMU请求device进入断电状态,然后等待外设响应,此时Q_Channel进入Q_REQUEST状态。
在T3,QACCEPTn为低,表示device接收PMU的请求,将自己进入断电状态。此时Q_Channel进入Q_STOPPED状态。
在T4,QREQn为高,PMU请求device进入上电状态,然后等待外设响应。此时Q_Channel进入Q_EXIT状态。
在T5,QACCEPTn为高,表示device接收PMU的请求,将自己进入上电状态。此时Q_Channel进入Q_RUN状态。
3.2、device拒绝PMU的power请求
当外部PMU给device发送power请求,device可以拒绝该power请求。PMU收到device的拒绝响应后,应取消该power请求。
在T1,QREQn和QACCEPTn为高,Q_Channel进入Q_RUN状态。
在T2,QREQn为低,PMU请求device进入断电状态,然后等待外设响应,此时Q_Channel进入Q_REQUEST状态。
在T3,QDENY为高,表示device拒绝PMU的请求,自己保持上电状态。此时Q_Channel进入Q_DENIED状态。
在T4,PMU接收到device的拒绝响应,将QREQn拉高,PMU请求device进入上电状态,然后等待外设响应。此时Q_Channel进入Q_CONTINUE状态。
在T5,QDENY为低,表示device接收PMU的上电请求,将自己保持上电状态。此时Q_Channel进入Q_RUN状态。
4、device复位信号与Q_Channel的结合
复位信号,需要和Q_Channel的信号,进行组合。一般来说,复位信号,也会由PMU来控制。
组合分为以下2种情况。
4.1、RESETn复位无效时,QREQn为低
T2时刻,RESETn为高,复位取消。
T3时刻,QREQn为高,PMU向device请求上电。Q_Channel进入Q_EXIT状态。
T4时刻,QACCEPTn为高,device接受PMU的上电请求。Q_Channel进入Q_RUN状态。
T5时刻,QREQn为低,PMU向device请求断电,Q_Channel进入Q_REQUEST状态。T6时刻,QACCEPTn为低,device接受PMU的断电请求。Q_Channel进入Q_STOPPED。
T7时刻,将RESETn拉低。
4.2、RESETn复位有效时,QREQn为高
T2时刻,QREQn拉高,PMU向device请求上电。Q_Channel进入Q_EXIT状态。
T3时刻,因为RESETn为低,复位有效,device将QACCEPTn保持为低,Q_Channel保持Q_EXIT状态。
T4时刻,因为RESETn为高,复位无效。device将QACCEPTn拉低,响应PMU的上电请求。Q_Channel进入Q_RUN状态。
T5时刻,QREQn拉低,PMU向device请求断电,Q_Channel进入Q_REQUEST状态。
T6时刻,device将QACCEPTn拉低,响应PMU的断电请求。Q_Channel进入Q_STOPPED状态。
T7时刻,RESETn拉低。
5、QACTIVE
QACTIVE,是提供给device,给PMU发送power请求的信号。可以由多个来源的组合。如果为高,那么PMU要给自己上电,并且之后,不能给自己断电。
QACTIVE和握手信号(QREQn,QACCEPTn,QDENY)是独立开的。
5.1、请求上电和请求下电
T1时刻,device将QACTIVE拉高,向PMU发起退出断电请求。T2时刻,PMU将QREQn拉高,Q_Channel进入Q_EXIT状态,T3时刻,进入Q_RUN状态。
T4时刻,device将QACTIVE拉低,device向PMU发起进入断电请求。T5时刻,PMU将QREQn拉低,Q_Channel进入Q_REQUEST状态,在T6时刻,进入Q_STOPPED状态。
5.2、PMU不允许断电
T1时刻,device将QACTIVE拉高,向PMU发起上电请求。T2时刻,PMU将QREQn拉高,Q_Channel进入Q_EXIT状态,T3时刻,进入Q_RUN状态。之后,device处于上电状态。
T4时刻,PMU将QREQn拉低,PMU想让device进入断电状态,但是QACTIVE为高,表示device要一直处于上电状态。因此QACCEPTn持续保持高,Q_Channel一直维持在Q_REQUEST状态。device维持在上电状态。
T5时刻,因为之前QACTIVE拉低,device想进入断电状态,device将QACCEPTn拉低,响应PMU的断电请求,然后Q_Channel进入Q_STOPPED状态。device进入断点状态。
6、Q_Channel的实现
一般来说,device和PMU的时钟是异步时钟。因此,需要一些同步化。
下图是同步化的框图:
ARM提供了以下的一些实现指导:
- 被使用的所有信号,都需要进行同步化
- 只有当Q_Channel进入Q_STOPPED状态是,才可以将时钟和power给关掉
- 为了保证握手信号的正确性,QREQn,QACCEPTn,QDENY需要使用寄存器直接输出
- QACTIVE使用寄存器直接输出,或者是相关寄存器输出的组合输出。ARM强烈建议组合输出,使用或门。
7、Q_Channel的向后兼容
Q_Channel是从AXI的低功耗结构,演化过来。但是Q_Channel也可以兼容AXI的低功耗接口。
如下图,device使用AXI的低功耗接口,PMU使用Q_Channel。只需要按照如下的连接进行连接即可。
如下图,device使用Q_Channel,PMU使用AXI的低功耗接口,只需要按照如下的连接进行连接即可。