【CMN】Power management

文章详细介绍了CMN-700的电源管理功能,包括预定义电源状态、HNF静态和动态retention、Powerdomains的划分与控制,以及状态转换规则和相关寄存器。核心内容涉及通过寄存器实现的电源状态管理和HNF组件控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        CMN-700包括几种电源管理能力,要么由外部控制,要么由SoC辅助。CMN-700具有以下电源管理功能:

(1)几个不同的预定义电源状态。这些状态包括SLC Tag和Data ram的all/half/none能否被powered up, powered down, or in retention。

memory retention:数据被保留,但是不能正常读写。

这些power状态降低了静态和动态的功率消耗。

(2)支持HNF中的static retention,其中SoC使SLC和SF ram处于retention状态。这样降低了静态功耗。

(3)支持in-pipeline的低延迟Data RAM retention控制,可用一个可编程的idle计数器来使SLC RAMs进入到retention状态。(也就是动态retention)

一、Power domains

CMN-700中的power domains包括:

Logic

        除HNF SLC Tag和Data ram和HNF SF ram外的所有逻辑。

System Level Cache RAM0

        HN-F中的SLC Tag 和 Data RAMs way[7:0]。每个HN-F分区中的RAM可以独立控制。

System Level Cache RAM1

        HN-F中的SLC Tag 和 Data RAMs way[15:8]。每个HN-F分区中的RAM可以独立控制。

Snoop filter only mode

        只有SF RAM,没有SLC RAM。每个HN-F分区中的RAM可以独立控制。

下图显示了一个电源域配置示例:

下图显示了另一个电源域配置示例,其中CXSDB组件位于同一个电源域中:

二、Power domain control

        CMN-700逻辑P-Channel控制除RAM和CXS电源域之外的所有电源域。除了控制逻辑域之外,P-Channel还允许HNF软件控制的电源域和逻辑域之间的同步。这个同步是通过一个配置状态来实现的,如下图所示:

有两条路径转换从OFF到ON状态:

Cold reset

        逻辑PSTATE OFF到ON转换也启动所有HNF分区的NOSFSLC到FAM转换。

Exit from HN-F Static Retention state

        逻辑PSTATE从OFF转换到CONFIG,这表明CMN-700正在退出Memory Retention状态,并且不启动任何HNF分区power转换。下表包含了域内组件的power模式和相关的PSTATE值。

三、HN-F power domains

        HNF有不同的 power状态。不同状态之间的转换就是使能或禁用HNF的不同部分。HNF有三种功率状态:

  1. 1.操作状态Operational states,,其中逻辑是打开的和启用的ram是正常运行的
  2. 2.功能保留状态Functional retention states,其中logic功能打开,启用的ram处于retention状态。
  3. 3.内存保留状态Memory Retention states,其中logic功能关闭,启用的ram处于retention状态。

在这些电源状态下,HNFs以四种模式运行:

FAM

        Full Associativity Mode (FAM), SF、SLC全部使能。

HAM

        Half-Associativity Mode (HAM), SF使能,SLC的lower half ways([7:0])使能,way[15:8]禁用且处于断电状态。

SFONLY

        Snoop filter only mode (SFONLY), SF使能,SLC处于 powered off。

NOSFSLC

        SF和SLC全部处于powered off。

(也就是对HN-F内部RAM(SLC0,SLC1,SF)的不同部分使能/禁用)

还有疑问可以看下表:

状态转换图如下:

        当HNF处于NOSFSLC状态时,SF不跟踪RNF的一致性。因此,由于功率状态转换到NOSFSLC,RNF在flush前必须处于静默。在从NOSFSLC转换到SFONLY、HAM或FAM状态之前,必须刷新RNF cache。

        这些HNF功率状态使用配置寄存器写入来进行转换,它必须针对SCG区域中的所有HNF。此外,逻辑域的P-Channel可以启动一个nosfslc的FAM转换。

注:CMN-700在SLC初始化完成之前不接受请求。

四、相关寄存器

cmn_hns_ppu_pwpr:power状态配置寄存器

cmn_hns_ppu_pwsr:power状态上报寄存器

cmn_hns_ppu_dyn_threshlod:动态retention转换时idle计数器的阈值寄存器

PS:如何实现power management模块的代码设计呢?

        CMN文档描述的很清楚了,可以通过寄存器配置,使其进入不同的power state,然后控制HN-F不同的组件power on/power off/retention。那么核心代码就是设计一个状态机,具体转换条件这里就不详细描述了。

        咱们下期见~

### CMN算法简介 CMN(Cepstral Mean Normalization,倒谱均值归一化)是一种广泛应用于语音识别系统的预处理技术。它通过消除声道特性中的长期趋势来提高特征的鲁棒性[^3]。 #### 原理概述 CMN的主要目标是对语音信号提取的特征向量进行归一化操作,从而减少由于说话人差异、背景噪声或其他因素引起的干扰。具体来说,CMN通过对整个话语或一段较长时间内的倒谱系数求平均值,并将其从每一帧的倒谱系数中减去,达到去除长期分量的效果。 #### 数学表达 假设输入的一帧语音经过MFCC(Mel-Frequency Cepstral Coefficients,梅尔频率倒谱系数)提取后得到一个D维特征向量 \(\mathbf{x}_t\) ,其中 \(t\) 表示时间索引,则CMN的操作可以表示为: \[ \tilde{\mathbf{x}}_t = \mathbf{x}_t - \bar{\mathbf{x}} \] 其中: - \(\tilde{\mathbf{x}}_t\) 是归一化后的特征; - \(\bar{\mathbf{x}}\) 是整段话或者滑动窗口内所有帧的倒谱均值。 对于全局CMN方法,\(\bar{\mathbf{x}}\) 可以定义为全部帧的平均值;而对于基于滑动窗的方法,仅考虑当前时刻附近若干帧的数据计算局部统计量。 #### 实现细节 以下是Python实现的一个简单例子,展示如何利用NumPy库完成基本形式的CMN运算: ```python import numpy as np def cmn(features, sliding_window=False, window_size=300): """ Apply cepstral mean normalization (CMN) to MFCC features. Parameters: features (numpy.ndarray): Input feature matrix of shape (T, D), where T is the number of frames and D is dimensionality. sliding_window (bool): Whether to use a sliding window approach instead of global statistics. window_size (int): Size of the sliding window when `sliding_window` is True. Returns: normalized_features (numpy.ndarray): Output after applying CMN with same dimensions as input. """ if not sliding_window: # Global CMN by subtracting overall mean across all frames mean_vector = np.mean(features, axis=0) normalized_features = features - mean_vector[np.newaxis, :] else: num_frames, dim = features.shape padded_features = np.pad(features, ((window_size//2, window_size//2),(0,0)), mode='edge') normalized_features = [] for i in range(num_frames): current_window = padded_features[i:i+window_size] local_mean = np.mean(current_window, axis=0) centered_frame = features[i] - local_mean normalized_features.append(centered_frame) normalized_features = np.array(normalized_features).reshape(-1,dim) return normalized_features ``` 上述代码提供了两种模式下的CMN功能——一种采用整体数据集上的静态均值估计,另一种则是动态调整每帧附近的短时上下文信息作为参考基准。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子墨祭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值