【ARM AMBA Q_Channel 详细介绍】

news2024/10/1 19:27:30

文章目录

    • 1.1 Q_Channel 概述
    • 1.2 Q-Channel
      • 1.2.1 Q-Channel 接口
      • 1.2.2 Q-Channel 接口的握手状态
      • 1.2.3 握手信号规则
    • 1.3 P_Channel的握手协议
      • 1.3.1 device 接受 PMU 的 power 请求
      • 1.3.2 device 拒绝 PMU 的 power 请求
    • 1.4 device 复位信号与 Q _Channel 的结合
      • 1.4.1 RESETn 复位无效时 QREQn 为低
      • 1.4.2 RESETn 复位有效时 QREQn为高
    • 1.5 QACTIVE
      • 1.5.1 请求上电和请求下电
      • 1.5.2 PMU不允许断电
    • 1.6 Q_Channel的实现
    • 1.7 Q_Channel的向后兼容

转自:http://www.lujun.org.cn/?p=3634
如有侵权,联系删除

1.1 Q_Channel 概述

AMBA提供了,低功耗的接口。用于实现power控制功能。目前,AMBA里面,包含2种低功耗接口。

  • Q-Channel:实现简单的power控制,如上电,下电;
  • P-Channel:实现复杂的power控制,如全上电,半上电,1/4上电等。

ARM引入这2种低功耗接口,是为了满足不同的应用场景下,对power的控制。

在一些场景下,组件只有两种 power状态,分别为 power-uppower-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。

1.2 Q-Channel

Q-Channel是从AXI的低功耗接口中,演变过来。但是可以向后兼容。

1.2.1 Q-Channel 接口

以下是Q-Channel的接口:
在这里插入图片描述
分为 Device 端Power Controller 端(下文均简称为PMU)。

  • Device 端,就是需要被电源控制的组件,比如 core,外设等;
  • PMU端,就是提供电源管理的组件。

在 Q-Channel 中,将 device 的 power状态,分成了2 种:

  • operational 状态: device处于工作状态,简单理解为上电状态,下文称为上电状态
  • quiescent状态:device处于停止状态,简单理解为断电状态,下文称为断电状态

Q-channel 的接口信号很简单,只有四根,如下图所示(n代表低电平有效):

signalsDescription
QACTIVE提供给device,向 power controller 发送power请求,更改自己的 power 状态
  • 为高,表示 device 需要 PMU 将自己置为上电状态
  • 为低,表示 device 需要 PMU 将自己置为断点状态
QREQnpower controller 发送 power 请求信号
  • 为高,表示上电
  • 为低,表示断电
QACCEPTn为高,表示 device 接受外部 power 请求
QDENY为高,表示 device 拒绝外部 power 请求

设备端可以通过QACTIVE信号告诉控制器端自己的工作状态,QACTIVE为0时表示设备处于静止状态。但是,控制器端既可以根据QACTIVE 发出请求 QREQn,也可以根据其它的条件发出请求。也就是说控制器并不完全依赖于 QACTIVE。所以我们可以看到 Q-channel 的握手协议其实不依赖 QACTIVE。

对于QACTIVE信号,设备端需要有拉高QACTIVE信号的能力。再通俗一点,当设备处于时钟关断或者电源关断的状态下,需要有能力告诉控制器,自己需要启动了。如果设备没有这种能力,那就需要在系统级来做一些工作保证设备可以再运转。总之一句话,做设计的时候一定要避免设备睡下就再也起不来这种情况。

1.2.2 Q-Channel 接口的握手状态

ARM 对 Q-Channel 的 interface,定义了几种握手状态:

StateDescription
Q_RUNdevice 处于上电状态
Q_REQUESTdevice 处于上电状态,但是在 idle 状态时,可以接收 power request,进入断电状态
Q_STOPPEDdevice 进入了断电状态
Q_EXIT等待被提供时钟或者 power 的状态。当 device 得到外部提供的时钟或者 power 时,将 QACCEPTn 拉高,进入 Q_RUN 状态。
Q_DENIEDdevice 拒绝外部 power 的请求,不进入断电状态,而保持上电状态
Q_CONTINUEPMU 在 Q_DENIED 状态后,将 QREQn 拉高后的状态

以下是编码
在这里插入图片描述

下图是各个握手状态的切换
在这里插入图片描述

1.2.3 握手信号规则

对于握手信号,有以下的规则:

  • QREQn 只能在 QACCEPTn 为高并且 QDENY 为低时,才可以从高变为低;

  • QREQn 满足以下条件,才可以从低变为高:

    • QACCEPTn 和 QDENY 都为低;
    • QACCEPTn 和 QDENY 都为高。
  • QACCEPTn 只能在 QREQn 和 QDENY 都为低情况下,才可以从高变为低;

  • QACCEPTn 只能在 QREQn 和 QDENY 都为高情况下,才可以从低变为高;

  • QDENY 只能在 QREQn 和 QACCEPTn 都为高情况下,才可以从高变为低;

  • QDENY 只能在 QREQn 为低并且 QACCEPTn 为高情况下,才可以从低变为高。

上面的这些原则,在设计P-Channel时,需要遵守的

1.3 P_Channel的握手协议

1.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状 态。

1.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 状态。

1.4 device 复位信号与 Q _Channel 的结合

复位信号,需要和 Q_Channel 的信号,进行组合。一般来说,复位信号,也会由PMU来控制,组合分为下节 2 种情况。

1.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拉低。

1.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拉低。

1.5 QACTIVE

QACTIVE,是提供给device,给PMU发送power请求的信号。可以由多个来源的组合。如果为高,那么PMU要给自己上电,并且之后,不能给自己断电。

QACTIVE 和握手信号(QREQn,QACCEPTn,QDENY)是独立开的。

1.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状态。

1.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 进入断点状态。

1.6 Q_Channel的实现

一般来说,device和PMU的时钟是异步时钟。因此,需要一些同步化。

下图是同步化的框图:
在这里插入图片描述
ARM 提供了以下的一些实现指导:

  • 被使用的所有信号,都需要进行同步化;

  • 只有当Q_Channel进入Q_STOPPED状态是,才可以将时钟和power给关掉;

  • 为了保证握手信号的正确性,QREQn,QACCEPTn,QDENY需要使用寄存器直接输出;

  • QACTIVE使用寄存器直接输出,或者是相关寄存器输出的组合输出。ARM强烈建议组合输出,使用或门。

1.7 Q_Channel的向后兼容

Q_Channel是从AXI的低功耗结构,演化过来。但是Q_Channel也可以兼容AXI的低功耗接口。

如下图,device使用AXI的低功耗接口,PMU使用Q_Channel。只需要按照如下的连接进行连接即可。
在这里插入图片描述

如下图,device使用Q_Channel,PMU使用AXI的低功耗接口,只需要按照如下的连接进行连接即可。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1129038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

驱动开发5 阻塞IO实例、IO多路复用

1 阻塞IO 进程1 #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> #include <string.h>int main(int argc, char co…

真空室的内表面加工

真空室和部件的内表面是在高真空和超高真空下实现工作压力的重要因素。必须在该条件下进行加工&#xff0c;以最小化有效表面&#xff0c;并产生具有最小解吸率的表面。 真空室和部件的表面往往是在焊接和机械加工后经过精细玻璃珠喷砂的。具有限定直径的高压玻璃珠被吹到表面…

Python创建条形图加点重叠

目录 代码效果图 要使用Python的Seaborn库创建一个条形图加点重叠的统计图&#xff0c;可以使用 seaborn.barplot和 seaborn.stripplot函数。以下是一个论文级别的简单示例代码&#xff0c;演示如何创建这种效果的图 代码 import seaborn as sns import matplotlib.pyplot a…

05 MIT线性代数-转置,置换,向量空间Transposes, permutations, spaces

1. Permutations P: execute row exchanges becomes PA LU for any invertible A Permutations P identity matrix with reordered rows mn (n-1) ... (3) (2) (1) counts recordings, counts all nxn permuations 对于nxn矩阵存在着n!个置换矩阵 , 2. Transpose: 2.…

如何将 huggingface上的模型文件下载到本地

写在前面 缘由&#xff1a;国内的GPU服务器直接调取 huggingface 上模型经常会失败&#xff0c;因此下载到本地就能免去许多麻烦。 方法三基于知乎上一位博主所提出方法的基础上进行改进&#xff0c;可以将huggingface上模型由 Colab 存进 谷歌云盘 或者 百度云盘。特别是有些…

Appium+Python+pytest自动化测试框架的实战

本文主要介绍了AppiumPythonpytest自动化测试框架的实战&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 先简单介绍一下目录&#xff0c;再贴一些代码&#xff0c;代码里有注释 Basic目录下写的是一些公…

【文章学习系列之模型】Koopa

本章内容 文章概况模型结构主要结构实验结果消融实验模型效率分解效果定性分解效果定量算子稳定性 总结 文章概况 《Koopa: Learning Non-stationary Time Series Dynamics with Koopman Predictors》是2023年发表于NeurIPS的一篇论文。考虑到时序预测中训练和推理数据之间甚至…

网工内推 | 网络工程师,大专以上、HCIA认证即可,最高14薪

01 湖南口味王集团 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、负责园区内电脑日常维护&#xff1b; 2、负责园区内办公周边设备的日常维护&#xff0c;如打印机、投影仪等&#xff1b; 3、负责园区内电话日常维护&#xff1b; 4、负责园区内信息资产管理&#…

vcomp100.dll丢失的解决方法,一键修复vcomp100.dll丢失问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“vcomp100.dll丢失”。这个错误通常会导致某些程序无法正常运行&#xff0c;给用户带来困扰。为了解决这个问题&#xff0c;我整理了以下五个解决方法&#xff0c;希望能对大家有所帮助。 一…

Python-----for循环基本语法及其应用---对序列进行遍历循环

for循环基本语法 for循环结构主要用于&#xff08;序列 &#xff1a;包括 字符串、列表、元组、集合以及字典&#xff09;类型数据的遍历&#xff08;循环&#xff09;操作。 遍历(Traversal)&#xff0c;是指沿着某条搜索路线&#xff0c;依次对树&#xff08;或图&#…

《深入理解java虚拟机 第三版》学习笔记三

第 8 章 虚拟机字节码执行引擎 代码编译的结果从本地机器码转变为字节码&#xff0c;是存储格式发展的一小步&#xff0c;却是编程语言发展的一大步。 8.1 概述 执行引擎是 Java 虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念&#xff0c;这两种机器都…

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

这篇文章主要介绍了Python3 Appium 安卓模拟器实现APP自动化测试并生成测试报告,本文给大家介绍的非常详细&#xff0c;对大家的学习或工作具有一定的参考借鉴价值&#xff0c;需要的朋友可以参考下 正文 一、安装Python3 直接登录Python官网https://www.python.org/&…

C++数据结构X篇_21_插入排序(稳定的排序)

文章目录 1. 插入排序原理2. 算法图解3. 核心代码&#xff1a;4. 插入排序整体代码实现 1. 插入排序原理 插入排序是一种最简单直观的排序算法&#xff0c;它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相…

Unity 自定义小地图

最近工作做了个小地图&#xff0c;再此记录下思路。 1、准备所需素材 显示为地图&#xff08;我们取顶视图&#xff09;。创建一个Cube&#xff0c;缩放到可以把实际地图包住。实际地图的尺寸和偏移量 。我这里长宽都是25&#xff0c;偏移量&#xff08;1&#xff0c;0&…

MySQL进阶(数据库引擎)——MyISAM和InnoDB引擎的区别

1.是否支持行级锁 MyISAM 只有表级锁&#xff0c;而InnoDB 支持行级锁和表级锁&#xff0c;默认为行级锁。 &#xff08;1&#xff09;MySQL大致可以归纳为以下3种锁&#xff1a; 表级锁&#xff1a;开销小&#xff0c;加锁快&#xff1b;不会出现死锁&#xff1b;锁的粒度大…

C# FileInfo类的使用方法及常用操作(附代码示例)

在C#编程中&#xff0c;处理文件操作是一项常见而重要的任务。为了更好地管理和操作文件&#xff0c;C#提供了一个强大且灵活的FileInfo类。本文将深入探讨C# FileInfo类的使用方法&#xff0c;并为您提供一些实用的代码示例。 目录 一、什么是FileInfo类&#xff1f;二、使用F…

CLion使用SSH远程连接Linux服务器

最近要一直用实验室的服务器写Linux下的C代码, 本来一直用VScode(SSH)连接服务器, 但是我以前还是用JetBrains的IDE用的多, 毕竟他家的IDE代码提示和功能在某些细节上更加丰富。所以这次我使用了Clion里的远程连接(同样也是SSH工具)连接上了我的服务器, 实现了和VScode上同样的…

NOIP2023模拟1联测22 黑暗料理

NOIP2023模拟1联测22 黑暗料理 题目大意 自己看 思路 两个数相加能够产生质数的情况就是&#xff1a;11 或者 偶数质数 那么 1 1 1 不能保留超过一个 建一个图&#xff0c;原点连向所有奇数点&#xff0c;所有偶数点连向汇点&#xff0c;奇数点和偶数点的和为奇数的就相连 …

分布式事务 学习

分布式事务 关系型数据库事务&#xff08;本地事务&#xff09; 原子性&#xff1a;构成事务的所有操作&#xff0c;要么都执行完成&#xff0c;要么都不执行/一致性&#xff1a;在事务执行前后&#xff0c;数据库的一致性约束没有被破坏。隔离性&#xff1a;并发的两个事务的…

『第一章』命运的齿轮开始转动:雨燕(Swift)诞生!

在本篇博文中,您将学到如下内容: 1. 破茧成“燕”2. 持续进化&#xff01;3. Swift 5.0&#xff1a;ABI 稳定性4. Swift 5.1&#xff1a;模块稳定性和库进化5. Swift 5.9 来了6. 登高望远&#xff1a;Swift 6.0总结 雨燕翻新幕&#xff0c;风鹃绕旧枝 金鹊徒为滞&#xff0c;雨…