简约是一切真正优雅的要义。
-- CocoChanel
Q-channel是ARM公司定义的一个低功耗接口,是从AXI的低功耗接口演变过来的,其用处是控制设备静止(quiescent)状态时的时钟和电源。
Q-channel的接口信号很简单,只有四根,如下图所示(n代表低电平有效):
图1 Q-channel信号
设备端可以通过QACTIVE信号告诉控制器端自己的工作状态,QACTIVE为0时表示设备处于静止状态。但是,控制器端既可以根据QACTIVE发出请求QREQn,也可以根据其它的条件发出请求。也就是说控制器并不完全依赖于QACTIVE。所以我们可以看到Q-channel的握手协议其实不依赖QACTIVE。
对于QACTIVE信号,ARM的spec里面有下图这么一句话。解释一下就是,设备端需要有拉高QACTIVE信号的能力。再通俗一点,当设备处于时钟关断或者电源关断的状态下,需要有能力告诉控制器,自己需要启动了。如果设备没有这种能力,那就需要在系统级来做一些工作保证设备可以再运转。总之一句话,做设计的时候一定要避免设备睡下就再也起不来这种情况。
图2 QACTIVE信号说明
接下来看看Q-channel的握手协议,其实挺简单的。先看接受请求的时序,参考下图。
图 3 Q-channel接受静止请求的时序
- 在T1时刻,QREQn和QACCEPTn为高,状态机处入Q\_RUN状态,设备处于工作(operational)状态,QDENY为低。
- 在T2时刻,控制器拉低QREQn,请求设备进入静止状态。此时进入Q\_REQUEST状态,设备处于工作(operational)状态,QDENY为低。
- 在T3时刻,设备响应请求,拉低QACCEPTn,表示自己进入了静止状态。此时状态机进入Q\_STOPPED状态。
- 在T4时刻,控制器拉高QREQn,请求设备进入工作状态。此时进入Q\_EXIT状态,设备处于静止状态。
- 在T5时刻,设备再次响应请求,拉高QACCEPTn,进入工作状态。此时状态机进入Q\_RUN状态。
根据协议,设备也可以是有脾气的,不是控制器让干啥就干啥的。正运行的热火朝天的时候,控制器发来静止请求,必须拒绝\~\~
图4 Q-channel拒绝静止请求的时序
- 在T1时刻,QREQn和QACCEPTn为高,进入Q\_RUN状态。
- 在T2时刻,控制器拉低QREQn,请求设备进入静止状态。此时进入Q\_REQUEST状态,设备处于工作(operational)状态,QDENY为低。
- 在T3时刻,设备拒绝请求,拉高QDENY,仍处于工作状态。此时状态机进入Q\_DENIED状态。
- 在T4时刻,控制器接收到设备的拒绝响应,将QREQn拉高,请求设备进入工作状态。此时进入Q\_CONTINUE状态。
- 在T5时刻,设备响应请求,拉低QDENY,保持工作状态。此时Q\_Channel进入Q\_RUN状态。
上面提到的Q\_RUN,Q\_REQUEST等状态间的转换可以参考下图
图5 Q-channel状态
依据QREQn,QACCEPTn和QDENY这三条握手信号线,ARM列举出所有的握手状态,并定义了以下规则:
图6 Q-channel握手状态
- 只有当QACCEPTn为高且QDENY为低时,QREQn才能从高变低。
- QREQn只能在以下任一情况下从低变高:
QACCEPTn和QDENY都为低。
QACCEPTn和QDENY都为高。
- QACCEPTn只能在QREQn为低且QDENY为低时从高变低。
- QACCEPTn只能在QREQn为高且QDENY为低时从低变高。
- QDENY只能在QREQn为高且QACCEPTn为高时从高变低。
- QDENY只能在QREQn为低且QACCEPTn为高时从低变高。
有了以上两张状态图,相信大家很快就能设计出Q-channel的状态机了。
另外,在做设计的时候要考虑QREQn和reset信号的关系。在reset信号释放的时候,QREQn可以为低,也可以为高,对应下面两张图。
图7 reset撤销时QREQn为低
图8 reset撤销时QREQn为高
考虑到控制器和设备很可能不在同一个时钟域,所以Q-channel协议建议这些信号在各自的输入端做两级同步,在输出端尽量保证寄存器直接输出。
图9 推荐的Q-channel跨时钟域(clock domain crossing)同步方法
综上,我们可以看出,Q-channel是一个比较简单灵活的接口。控制器可以根据设备的工作状态或系统状态,发出低功耗请求;设备可以根据自己的工作状态,从而决定是否接受请求。这就好比,老板可以根据员工和公司的情况发出休假请求,打工人可以接受,也可以由于过于热爱工作而坚持加班\~\~\~
需要注意的是,Q-channel只是一个接口,用于处理控制器和设备的握手,至于怎么控制clock gating和power gating还需要其它的逻辑设计。
Q-channel有一个缺点,就是过于简单了。对于时钟控制来说,只有打开和关闭两种状态就可以了。但是对于电源控制来说,只有ON和OFF两种状态,对于某些复杂的power控制场景来说就不够用了。比如,一些带L3 cache的大规模设计,为了达到更好的功耗控制,要对L3实现全上电,半上电,1/4上电等操作。这时,Q-channel就力不从心了,所以ARM又定义了另外一个接口P-channel来解决这个问题。
相比Q-channel,P-channel把PACTIVE信号加宽了,不再是一根信号,设备可以传递更多的工作状态给控制器;控制器会额外多发出一组PSTATE信号,描述切换power状态的请求。想了解具体的细节同学,可以去ARM官网下载文档《Low Power Interface Specification》。
PS:今天图有点多,并不是为了划水,协议这东西还是多看图,毕竟一图胜千言。
作者:老秦谈芯
来源:https://mp.weixin.qq.com/s/BESFFymOugQIo-X3OgIr9g
作者微信公众号
相关文章推荐
更多IC设计技术干货请关注IC设计技术专栏。