ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SoC低功耗手册中文化实践:UPF与电源域隔离策略

SoC低功耗手册中文化实践:UPF与电源域隔离策略 简介Low Power Methodology Manual for System-on-Chip Design 的中文翻译文档面向数字IC设计工程师、SoC架构师及低功耗方向初学者系统梳理芯片功耗问题的来源、动态与静态功耗的组成并给出Multi-Vt、Power Gating、VTCMOS、Stack Effect等降低功耗的常见思路。压缩包内包含1个doc文件体积约178KB便于直接阅读、批注和按章节检索虽体量不大但覆盖功耗分析与低功耗设计核心概念。该资源已有1231人学习适合在项目功耗优化或面试备考前快速建立知识框架。文档对开关功耗、短路功耗、漏电流分类及低功耗技术适用场景均有展开可作为英文原版手册的辅助中文参考。1. 这本 SoC 低功耗手册为什么需要中文翻译团队接了一款集成 DDR 控制器的 ARM SoC 主控项目评审深睡功耗时发现漏电超标定位到隔离单元使能时序晚于主电源关断。翻英文手册每个单词都认识但到底是先改 UPF 还是先改 RTL前后端吵了一晚上。这时候真正缺的不是逐字翻译而是把 Low Power Methodology Manual for System-on-Chip Design 这套方法学变成团队能照着执行的中文工作文档。我理解的“中文翻译”不是换一种语言而是把电源域、隔离策略、状态保持这些概念连同 UPF 代码、约束和检查单一起消化落到 SoC 设计流程里。这篇博文面向 SoC 架构师、数字前端、低功耗验证和后端物理实现工程师也适合刚接手主控 SoC 选型、想弄懂功耗规格底层逻辑的人。2. 读懂 System-On-Chip 低功耗方法学的四条主线先把方法学拆成四条线再动笔翻译。低功耗设计不是零碎技巧而是功耗来源、功耗意图、设计手段、SoC 运行状态四个层面互相咬合。下面按阅读顺序展开。2.1 功耗从哪里来动态功耗、静态功耗和 soc 天梯图之外的排序SoC 功耗分动态和静态两部分。动态功耗来自内部节点翻转时对电容充放电写成公式是 P α·C·V²·fα 是翻转率C 是节点电容V 是工作电压f 是时钟频率。静态功耗主要是漏电功耗先进工艺下亚阈值漏电和栅极漏电占比越来越高导致 CPU 不动时功耗墙也很可观。理解这个公式才能看懂手册为什么反复强调降电压、降翻转率、关空闲模块。所谓手机 soc 天梯图并不只是看跑分排名我一般会给团队画一张按模式拆分的功耗排序表把 CPU、GPU、DDR 控制器、NPU、外设接口在 Active、Sleep、Deep Sleep 下的平均功耗和峰值功耗排出来看分位数就能知道该先动哪块。这个动作和主控 SoC 选型直接相关选型时不能只比较数据手册里某个模式电流要看整条状态迁移路径上的功耗分布。2.2 功耗意图UPF 是 RTL 与物理实现之间的共同语言方法学手册最核心的概念是 Power Intent中文常译作功耗意图。过去每个工具自带一套电源域描述方式前端写一套后端改一套验证再猜一套低功耗改动经常在流程传递中失真。手册给出的解法是用 UPF 在 RTL 阶段把“哪些逻辑属于哪个电压域、什么时候隔离、什么时候保持”写成一个独立文件让综合、布局布线、形式验证和仿真共同消费它。UPF 模型包括电源域、供电网、电源状态、隔离策略、电平转换、状态保持单元。下面是最小的一段 UPF 示例用来理解“功耗意图也是代码”set_scope rtl_top create_power_domain PD_CPU create_supply_port VDDCPU create_supply_net VDDCPU_N -domain PD_CPU connect_supply_net VDDCPU_N -port VDDCPU这段代码在 rtl_top 范围内创建名为 PD_CPU 的电源域定义一个供电端口 VDDCPU 和与之相连的内部供电网 VDDCPU_N。后面所有隔离、保持、电源状态命令都挂在已经存在的域名和供电网名上。看到了吧UPF 不需要 RTL 源代码但工具会按照这些名字去 RTL 网表里找对象。翻译手册时如果不把 UPF 命令原样保留只翻译“创建电源域 PD_CPU”后端脚本就会断链。所以方法学手册的中文版必须把命令和解释分成两层。2.3 低功耗设计手段时钟门控、电源门控、多电压域手册里频繁出现三类手段。时钟门控抑制动态功耗把不工作模块的时钟用 ICG 单元关掉常在综合时自动插入也可以由前端在 RTL 里显式实例化。电源门控关掉供电用 MTCMOS 开关管实现关断后数据丢失必须配套隔离单元和状态保持单元。多电压域让不同模块跑不同电压通过电平转换器处理跨域信号再配合 DVFS 在运行时动态调压调频。这三者互相补充一个 SoC 被切成多个电压域每个域内部再挂电源开关域内的寄存器组用保留电源维持状态外围组合逻辑输出用隔离单元钳到固定电平。翻译时要注意“power switch”不是普通电气意义上的“电源开关”而是特指“电源开关单元”“isolation cell”是“隔离单元”不是“隔离小区”。这类词一旦译错中文版读起来很通顺后端照着做却发现和工具报告对不上。2.4 方法学手册里反复出现的 SoC 动作启动、休眠、DDR 保持低功耗方法学不仅描述静态结构也描述 SoC 运行时的状态迁移。芯片启动是典型场景先从常开域启动供电稳定后释放复位再唤醒二级电源域最后才允许 CPU 访问 DDR。休眠路径与之相反先让 DDR 控制器进入自刷新再保存片上状态做隔离最后关主电源域。集成 DDR 的 ARM SoC 尤其要处理“DDR 颗粒需要刷新系统不能完全断电”的矛盾要么保留一个常开域专门维持控制器刷新要么把整块 DDR 放在自刷新模式并用外部时钟源维持。方法学手册把这些运行动作映射成电源状态表让架构师和验证工程师在同一张表上对齐。手册关注点要回答的问题对应 SoC 动作电源域划分哪些模块必须常开启动时 PMU 上电顺序电源状态定义Deep Sleep 下谁供电谁断电DDR 自刷新、唤醒源隔离策略域断电时输出如何钳制防止总线下穿状态保持哪些寄存器需要断电后恢复唤醒上下文恢复复位释放供电稳定多久才能撤复位启动时序签核我通常建议翻译团队先按上面这张表把手册目录过一遍每条主线对应一张附录表翻译出来后再回头检查是否成闭环。3. 翻译 Low Power Methodology Manual 的技术决策翻译这份手册最容易翻车的地方不是语法而是技术决策。下面三个问题如果能在动笔前定好中文版可用性会高很多。3.1 必须保留英文的技术词UPF、ISO、LS、SRPG不是所有英文都要翻译。UPF 是 Unified Power Format 的缩写中文叫“统一功耗格式”但实际使用中保留 UPF 更安全因为综合、仿真、签核工具的命令、报错和脚本全是 UPF。ISO 可以译成“隔离单元”但网表里常写成 ISO_CELL_*正文翻译了报告没翻译反而增加对读成本。LS 指 Level Shifter译为电平转换器没问题但属性名 level_shift_control 保留英文。SRPG 是 State Retention Power Gating 的缩写没有通行的中文叫法建议直接说 SRPG。我的做法是首次出现给中文全称加括号英文后续正文用中文凡是命令名、信号名、工具属性名一律保留英文。比如“把 iso_en 配置为高有效”比“把隔离使能配置为高有效”更不容易看错。英文中文建议正文使用场景UPF统一功耗格式UPF命令、文件、脚本中保留 UPFPower Domain电源域架构描述、流程图Isolation Cell隔离单元网表中可保留 ISOLevel Shifter电平转换器跨电压域信号说明Retention Cell状态保持单元SRPG 策略描述Always-on Domain常开电源域启动时序、唤醒管理3.2 用术语表统一中文表达避免一人一个译法翻译类文档在团队里扯皮最多的是同一个英文词出现多种中文说法前端叫“电源域”验证叫“供电域”后端叫“电源岛”。建立术语表是性价比最高的一步。步骤很固定先把原手册目录和每章粗读一遍提取所有英文技术名词再为每个名词定义唯一中文译名并列出不允许出现的译法然后把术语表存进仓库的 docs/glossary.csv在翻译 PR 评审时强制检查最后每翻完一章回填一次新词表。下面是一个可以直接提交的 CSV 样例term,cn,keep_en,usage Power Domain,电源域,No,PD_CPU UPF,统一功耗格式,Yes,UPF 文件 Isolation Cell,隔离单元,ISO,isolation strategy Level Shifter,电平转换器,LS,level_shift_control Retention Cell,状态保持单元,SRPG,retention strategykeep_en为 Yes 表示即使有中文首次出现也要带英文或者命令和属性名直接用英文。usage列填一两个常见搭配方便译者照抄。这个动作看似花时间实际上是把翻译标准前置比事后统一重改要省得多。3.3 代码块与命令中文注释放在英文命令之外UPF、SDC、SVA 都是工具语言不能翻译命令本身。常见错误是有人把 create_power_domain 写成“创建电源域”导致脚本直接 dump。正确的翻译策略是命令原样保留在命令上方或右侧加中文注释解释用途。看下面这组对比# 错误示例命令本身被翻译不能执行 创建电源域 PD_CPU 创建电源端口 VDDCPU # 正确示例命令保持英文中文注释解释行为 create_power_domain PD_CPU create_supply_port VDDCPU -domain PD_CPU # 创建 CPU 电源域 PD_CPUVDDCPU 是该域的主供电端口-domain参数把供电端口归属到指定电源域在 SoC 启动场景里常开域供电要最先稳定所以 VDD_AO 这类端口通常由 PMU 直接控制。翻译代码块时我会要求所有参数名、模块名、信号名与英文版完全一致中文只出现在#注释里。这样读者既能看懂行为又能把代码直接拷进 EDA 环境跑通。4. 把低功耗方法学落到 SoC 设计流程里中文手册有了还得让方法学在设计流程里生效。UPF 的落地顺序一般是先写电源域和供电网再定义隔离与保持最后补电源状态然后用仿真和静态检查验证。4.1 一个可扩展的最小 UPF 示例电源域、隔离、状态保持下面是一个比最小示例更接近工程的 UPF 片段覆盖常开域、可关断域、隔离和状态保持可以直接作为新项目的模板起点set_design top # 常开电源域负责 PMU、复位、DDR 自刷新控制 create_power_domain PD_ALWAYS_ON create_supply_port VDD_AO create_supply_net VDD_AO_N -domain PD_ALWAYS_ON connect_supply_net VDD_AO_N -port VDD_AO # 可关断的 CPU 域包含 CPU 核心和 GIC create_power_domain PD_CPU -elements {cpu_top gic} create_supply_port VDD_CPU create_supply_net VDD_CPU_N -domain PD_CPU connect_supply_net VDD_CPU_N -port VDD_CPU # CPU 域关断后输出必须钳位到 0防止下游浮空 set_isolation iso_cpu_out -domain PD_CPU -isolation_signal iso_en -clamp_value 0 # CPU 域断电时内部关键寄存器从常开电源取电保存状态 set_retention ret_internal -domain PD_CPU -retention_signal ret_n -retention_power_net VDD_AO_N这段 UPF 先建了 PD_ALWAYS_ON 和 PD_CPU 两个电源域-elements列出属于该域的 RTL 逻辑不写则默认整个设计。set_isolation把域内输出在断电时钳到 0-clamp_value指定钳位电平-isolation_signal指定由 PMU 送来的隔离使能。set_retention让保留寄存器在 VDD_CPU 关断后从 VDD_AO_N 取电-retention_signal是保留信号低电平进入保存状态高电平恢复。需要注意set_retention 必须依赖综合库里的保留单元不能只用这一句就把普通寄存器变成可保留的后面在做 Low Power 综合时要配合retention_cell库映射。4.2 低功耗仿真验证入口命令和检查点UPF 写完后验证阶段要同时跑功能仿真和低功耗检查。以 Synopsys VCS 为例常见入口是vcs -sverilog -upf top.upf -power_switch_aware defineSIM_UPF \ tb_test.sv top.sv -o simv ./simv -fsdb psl_assertions-upf指定功耗意图文件-power_switch_aware让仿真器感知电源开关状态defineSIM_UPF是 RTL 里的条件编译开关用于让设计在被断电时进入指定行为。仿真中至少要确认四个检查点第一每个电源状态的供电合法性已经声明比如睡眠态下 VDD_CPU 不允许带电第二隔离信号要先于主电源关断生效晚于主电源恢复撤销第三保留信号要先于电源关断拉高并在电源恢复稳定后再拉低释放第四跨电压域的信号全部经过电平转换单元不能在 VDD_CPU 恢复前发生翻转。这些检查点可以写进 SystemVerilog 断言也可以在波形上肉眼核对。项目时间紧时我倾向于只抓第一个和第二个其余交给静态功耗签核工具去查。4.3 主控 SoC 选型从方法学手册到提问清单做硬件选型时方法学手册能变成一套提问清单。评估一颗“集成 DDR 的 ARM SoC”不要只看 peak 电流要问清楚低功耗状态的完整画面常开域里包含了哪些外设CPU 域断电后是只做隔离还是带状态保持DDR 自刷新由哪颗芯片的哪个模块供电从唤醒源事件到 CPU 取到第一条指令要经过多少个时钟在被隔离的域里有没有 DMA 强写导致总线数据被钳位。把这些问题列成表格选型会上逐条打分提问项我真正关心的方法学概念常开域包含哪些外设Power Domain 划分是否包含 DDR 控制器Deep Sleep 唤醒时间Power State 切换序唤醒源到 CPU 取指周期DDR 自刷新由谁供电Always-on DomainRetention 策略隔离信号由 PMU 还是软件控制Isolation Control启动时 iso_en 时序唤醒后 CPU 是否需要重新训练 DDR复位释放顺序DDRPHY 初始化路径有了这张表原厂 FAE 给的“待机电流 20µA”就不会被当成单一数字接受而是会追问在哪个电源状态、DDR 处于自刷新还是掉电、哪一相供电还开着。这才是把 Low Power Methodology Manual 的方法学反向用到了选型。5. 用 check_power 和启动时序验证让翻译不流于纸面翻译工作最后一步是让方法学可以自动检查不然中文文档会变成“读时点头、合入时跳过”的摆设。5.1 用脚本抽查 UPF 里的电源状态覆盖我会在 CI 里放一个极简单的 Python 脚本扫描 UPF 文件检查每个电源域是否都配了隔离和保持策略。正则不完美但作为冒烟检查足够#!/usr/bin/env python3 import re, sys text open(sys.argv[1]).read() domains re.findall(rcreate_power_domain\s(\S), text) isolated set(re.findall(rset_isolation\s(\S)\s-domain\s(\S), text)) retentions set(re.findall(rset_retention\s(\S)\s-domain\s(\S), text)) for d in domains: has_iso any(d x[1] for x in isolated) has_ret any(d x[1] for x in retentions) print(f{d}: iso{has_iso}, ret{has_ret})脚本对set_isolation和set_retention的书写顺序有要求必须让-domain紧跟策略名之后。你可以在项目里约定这种书写规范然后把它塞进 git pre-commit 钩子。这样任何人在新加一个电源域却忘写隔离策略时合并请求会直接刷红。中文手册里写的“每个可关断域必须有隔离单元”到这里变成了真正的门禁。5.2 用启动波形核对唤醒时序静态脚本抓不到时序还需要看动态波形。SoC 芯片启动、唤醒进入 CPU 之前重点盯四条信号沿的相对位置常开域供电 VDD_AO 爬升完成reset 释放iso_en 撤销VDD_CPU 达到有效阈值。正确的顺序是 reset 释放必须在 VDD_AO 稳定后iso_en 撤销要晚于 VDD_CPU 有效ret_n 释放则要更晚并等待 CPU 内部供电完全稳定。把这三条时序关系写成断言每次仿真回归结束直接输出 pass/fail再配合report_power -verbose看各域有无反向漏电。我一般还会把图上所有电压切换点导出成 CSV和 UPF 里的电源状态表逐条比对。中文手册里就算只写了“隔离信号必须早于电源关断”落地后也变成了一个不再需要人工盯示波器的自动检查项。本文还有配套的精品资源点击获取
返回列表