作者:Darren H. Chen
方向:Backend Flow / 后端实现流程 / EDA 工具工程 / Low Power Intent
demo:LAY-BE-25_upf_cpf
标签:Backend Flow、EDA、UPF、CPF、Low Power、Power Intent、Power Domain、Isolation、Retention、Level Shifter、Power Switch
在上一篇文章中,我们讨论了低功耗结构如何进入后端实现:power domain、always-on、retention、isolation、level shifter、power switch 这些概念不是简单附加物,而是会真正改变 floorplan、placement、CTS、routing、STA、PV 和 signoff 的设计语义。
但还有一个更底层的问题必须继续展开:
这些低功耗意图到底是如何被 eda tool 理解的?
如果只看 RTL,设计表达的是逻辑功能:
输入信号如何影响输出信号 寄存器如何在时钟边沿更新 组合逻辑如何传递数据 模块之间如何连接RTL 本身通常不会完整表达:
哪些逻辑可以断电 哪些逻辑必须常开 哪些电源域之间需要隔离 哪些状态需要保留 哪些信号跨越不同电压域 哪些供电由 power switch 控制 哪些电源模式是合法的这些信息属于 power intent,也就是低功耗意图。
UPF / CPF 的作用,就是把这些本来散落在设计规范、架构文档、约束文件、实现脚本和工程经验里的低功耗语义,用一种可被 eda tool 解析、检查、传递和实现的形式表达出来。
本文从底层原理、架构模型和工程方法论角度解释:为什么低功耗意图必须被后端工具显式理解,而不能只靠工程师口头约定或脚本补丁。
一、低功耗意图不是实现细节,而是设计语义
很多人第一次接触 UPF / CPF 时,会把它理解为:
给工具看的低功耗配置文件这个理解不算错,但太浅。
更准确地说,UPF / CPF 是设计语义的一部分。
普通设计语义可以表达为:
Design = Logic + Timing + Physical低功耗设计中,设计语义至少要扩展为:
Design = Logic + Timing + Physical + Power Intent如果没有 power intent,eda tool 看到的是一个统一供电、统一电压、所有逻辑始终有效的普通设计。
但真实低功耗芯片不是这样。
例如,一个 SoC 中可能有:
CPU domain : 可动态调压,可局部断电 GPU domain : 高功耗计算域,可单独 power gating Always-on domain : 始终供电,负责唤醒和控制 Memory domain : 需要 retention 或特殊电源策略 Peripheral domain: 低速外设,可按需关闭这些 domain 之间的信号关系,不再只是普通 netlist 连接关系,而是带有电源语义的连接关系。
例如:
AON domain --> OFF domain OFF domain --> AON domain 0.8V domain --> 1.2V domain 1.2V domain --> 0.8V domain retention flop --> restore path power switch --> switched power rail同样是一根 net,跨不跨电源域、源端是否可能断电、目标端是否常开、电压是否一致,都会影响后端实现策略。
所以 power intent 不是“附加说明”,而是后端工具理解设计的必要语义层。
二、为什么 RTL 不能承担完整低功耗表达?
有人可能会问:既然设计最终来自 RTL,为什么不直接在 RTL 里写清低功耗结构?
原因是:RTL 主要表达逻辑功能,不适合直接绑定所有物理电源实现细节。
如果把低功耗实现强行写死在 RTL 里,会带来几个问题。
1. 功能逻辑和实现策略耦合
同一个 IP,在不同 SoC 中可能有不同电源策略。
例如同一个视频处理 IP:
手机 SoC 中:需要 power gating + retention 车规 SoC 中:可能保持常开,强调安全响应 低端芯片中:可能只有 clock gating 高端芯片中:可能有多个电压档位如果低功耗结构写死在 RTL 里,IP 复用会变得非常困难。
2. 抽象层次不匹配
RTL 关注的是:
寄存器 组合逻辑 模块层次 信号连接 时钟复位低功耗实现还涉及:
供电网络 power switch cell isolation cell level shifter cell retention cell always-on buffer power mode table 电源状态切换时序这些内容与标准单元库、工艺、电源网络、后端实现阶段强相关,不适合全部写在 RTL 中。
3. 后端阶段需要逐步细化
早期 RTL 阶段可能只知道:
这个 block 可以断电 这个信号跨 domain 这个状态需要保留到了后端阶段才会逐步确定:
power switch 放在哪里 isolation cell 插在哪里 level shifter 用哪种库单元 retention flop 替换哪些寄存器 always-on route 走哪些 layer power rail 如何连接所以低功耗意图天然需要一种“可逐步细化”的表达方式。
UPF / CPF 的意义就在这里:它让低功耗语义从架构阶段开始存在,又允许后端阶段逐步补充实现细节。
三、UPF / CPF 在后端工具中到底描述了什么?
从后端实现角度看,低功耗意图至少包含六类核心信息。
Power Domain : 逻辑分组和电源边界 Supply Network : 电源、地、开关电源、虚拟电源的连接关系 Power State : 每个 domain / supply set 的合法状态 Isolation : 断电 domain 输出如何被安全钳位 Level Shifter : 不同电压域之间如何转换信号电平 Retention : 断电前后哪些状态需要保存和恢复 Power Switch : 哪些单元控制电源通断这些信息一旦进入 eda tool,就会影响多个内部模型。
可以抽象为:
Power Intent File ↓ Power Intent Parser ↓ Power Intent Database ↓ Design Object Binding ↓ Implementation Strategy ↓ Check / Insert / Route / Report / Export其中最关键的是Design Object Binding。
低功耗意图不能停留在文本层面,它必须和设计对象绑定。
例如:
power domain PD_CPU extent: cpu_core/* isolation strategy ISO_CPU_OUT applies to: outputs of PD_CPU retention strategy RET_CPU_REG elements: cpu_core/state_reg[*]这些描述最终必须映射到工具内部对象:
module instance cell pin port net power net ground net library cell region row route shape如果绑定失败,后续所有实现动作都不可靠。
四、低功耗意图进入后端后的底层架构
可以把低功耗后端实现拆成四层架构。
┌────────────────────────────────────┐ │ Power Intent Specification Layer │ │ UPF / CPF / power architecture spec │ └────────────────────────────────────┘ ↓ ┌────────────────────────────────────┐ │ Power Intent Semantic Layer │ │ domain / supply / state / strategy │ └────────────────────────────────────┘ ↓ ┌────────────────────────────────────┐ │ Design Binding Layer │ │ instance / net / pin / port binding │ └────────────────────────────────────┘ ↓ ┌────────────────────────────────────┐ │ Physical Implementation Layer │ │ insert / place / route / check │ └────────────────────────────────────┘第一层是文件表达。
第二层是语义模型。
第三层是与设计数据库绑定。
第四层才是实际后端实现。
很多低功耗 flow 出问题,并不是因为插 cell 的命令不会写,而是前面几层语义没有建立干净。
例如:
power domain extent 错了 supply set 没绑定到正确 domain isolation 策略方向错了 level shifter 插入条件不完整 retention 元素选择范围过大 always-on cell 没有正确供电 power state table 缺少模式这些问题如果到 placement 或 routing 后才发现,修复成本会很高。
五、Power Domain 的本质:不是区域,而是供电语义集合
很多人会把 power domain 理解成版图上的一个矩形区域。
但严格来说,power domain 首先是逻辑对象集合,之后才可能映射成物理区域。
它的本质是:
一组在电源管理上被统一对待的设计实例集合例如:
PD_AON: always-on controller wakeup logic reset controller PD_CPU: cpu datapath cpu control cpu local memory wrapper PD_PERI: peripheral bus uart spi这些 domain 的边界会影响:
isolation 插入位置 level shifter 插入位置 power switch 控制范围 retention register 选择 always-on buffer 需求 电源网络连接 STA scenario 切换 PV 检查规则因此,power domain 的边界定义非常关键。
如果 domain 边界过大,会导致不必要的 isolation、level shifter 或 retention。
如果 domain 边界过小,会导致跨 domain 信号遗漏,甚至形成断电后信号不确定的问题。
好的 domain 定义应该满足:
逻辑职责清晰 供电策略一致 跨域接口可枚举 物理实现可落地 验证边界可检查六、Supply Set / Supply Net:把抽象电源变成可实现网络
低功耗意图中另一个核心是 supply。
一个 power domain 通常需要知道:
primary power primary ground retention power isolation power always-on power switch input power switch output power这些 supply 不只是名字,它们最终要进入物理电源网络。
抽象上可以表示为:
Power Intent Supply ↓ Design Supply Net ↓ Physical Power Rail ↓ Metal Shape / Via / Stripe / Ring ↓ IR / EM / DRC / LVS Check如果 supply 语义不清,后端会出现很多隐蔽问题。
例如:
isolation cell 放在断电域内,导致钳位信号也断电 always-on buffer 没接 always-on rail retention flop 的 retention pin 没有独立供电 power switch output 没有连接到 switched rail level shifter 的高低电压 pin 接反这些问题往往不是普通逻辑检查能发现的,需要 power-aware check 和物理验证配合。
七、Isolation 的底层语义:断电输出不能污染常开逻辑
当一个 domain 断电时,它的输出信号可能变成未知状态。
如果这些信号直接进入仍然工作的 domain,就可能导致:
错误状态传播 控制逻辑误触发 无效时钟门控 复位路径异常 低功耗模式退出失败Isolation 的作用就是在断电边界上提供确定值。
可以抽象为:
Powered-off domain output ↓ Isolation cell ↓ Clamp value 0 / 1 / latch ↓ Powered-on receiver domainIsolation 不是简单插一个 buffer。
它至少要回答几个问题:
插在哪里? 由哪个 control signal 控制? clamp 到 0 还是 1? isolation cell 由哪个 supply 供电? 是在 source domain 侧还是 sink domain 侧? 何时 enable?何时 release?如果这些问题没有被 power intent 明确表达,eda tool 就无法可靠推断。
八、Level Shifter 的底层语义:跨电压域信号需要电平转换
多电压设计中,两个 domain 可能工作在不同电压下。
例如:
PD_LOW : 0.75V PD_HIGH : 1.10V从低电压域到高电压域,信号的 high level 可能不足以被高电压域可靠识别。
从高电压域到低电压域,信号电平可能超过低电压域输入器件承受范围。
所以跨电压域信号需要 level shifter。
Level shifter 的插入条件取决于:
source domain voltage sink domain voltage signal direction library cell availability timing impact placement region power rail connectivity从工具架构看,这需要把 power intent、library model、netlist connectivity、physical domain 结合起来。
Net connectivity + power domain binding + voltage state + level shifter rule + library candidate + placement legality = level shifter insertion decision这不是单个脚本命令能可靠完成的事情,它需要 eda tool 内部显式理解 power intent。
九、Retention 的底层语义:断电不是丢失状态,而是选择性保存状态
Power gating 可以降低 leakage,但断电会丢失寄存器状态。
如果某些状态在唤醒后必须恢复,就需要 retention。
Retention 的基本语义是:
normal mode: register 正常工作 save mode: 状态保存到 retention latch / retention storage power off: 主电源关闭,retention supply 保持 restore mode: 状态恢复到 registerRetention 策略至少要定义:
哪些寄存器需要保存 保存控制信号是什么 恢复控制信号是什么 retention supply 是什么 使用哪类 retention cell 替换是否影响 scan / reset / timing从后端角度看,retention 会影响:
library cell mapping placement legality always-on power routing scan chain 结构 timing arc area / leakage formal equivalence因此 retention 绝不能只作为 RTL 注释处理。
十、Power State 的意义:不是所有组合都合法
低功耗芯片通常有多种工作模式。
例如:
ACTIVE IDLE CPU_SLEEP GPU_SLEEP DEEP_SLEEP WAKEUP TEST每个模式下,不同 domain 的 supply 状态不同。
可以表示成:
Mode PD_AON PD_CPU PD_GPU PD_PERI ACTIVE ON ON ON ON CPU_SLEEP ON OFF ON ON GPU_SLEEP ON ON OFF ON DEEP_SLEEP ON OFF OFF OFF TEST ON ON ON ONPower state 的作用是把合法状态组合明确下来。
否则后端和验证会面临一个问题:
哪些电源组合需要检查?哪些组合根本不会发生?
没有 power state,就很难做:
power-aware STA power-aware verification isolation coverage level shifter coverage retention check mode-based signoff十一、为什么低功耗意图必须贯穿多个阶段?
UPF / CPF 不是只在某一步读一次。
它应该贯穿整个 Backend Flow。
Design Import 读取 power intent,建立 domain / supply / strategy Link 将 power intent 绑定到设计对象 Floorplan 根据 power domain 规划物理区域和电源结构 Placement 插入并放置 isolation / level shifter / retention / switch CTS 处理跨 domain clock、always-on clock path、gating 结构 Routing 完成 signal route 和 power-aware connection STA 按 mode / voltage / corner 分析 timing PV / Signoff 检查 DRC / LVS / ERC / power connectivity Export 输出 netlist / DEF / GDS / power-aware handoff data这说明 power intent 不是一个“读入后就结束”的输入文件,而是一条贯穿全流程的语义线。
十二、工程方法论:如何判断 power intent 是否进入了工具语义?
判断一个低功耗 flow 是否成熟,不是看是否有 UPF / CPF 文件,而是看 power intent 是否真正进入了工具语义。
可以检查以下问题。
1. domain 是否可查询
是否能报告所有 power domain? 每个 domain 的 instance extent 是否清楚? domain 边界是否和设计层次一致?2. supply 是否可追踪
primary supply 是否绑定? ground 是否绑定? retention supply 是否存在? always-on supply 是否正确连接?3. strategy 是否可检查
isolation strategy 是否覆盖所有断电输出? level shifter strategy 是否覆盖所有跨电压路径? retention strategy 是否只覆盖必要状态? power switch strategy 是否连接到正确 supply?4. implementation 是否可验证
插入了哪些 cell? 这些 cell 放在哪里? 是否被正确供电? 是否影响 scan / timing / route?5. signoff 是否可闭环
power-aware STA 是否通过? PV 是否识别 power/ground connectivity? LVS 是否能匹配 low power inserted cells? ECO 后 power intent 是否保持一致?十三、Demo 25 应该验证什么?
LAY-BE-25_upf_cpf不应该追求完整低功耗 SoC 实现,而应该聚焦“低功耗意图是否能被识别、绑定、报告”。
一个合适的 demo 可以包含:
输入: sample netlist sample power intent file sample library view sample floorplan note 过程: 读取设计 读取 power intent 查询 power domain 查询 supply set / supply net 查询 isolation / retention / level shifter strategy 检查跨 domain net 生成 power intent summary 输出: reports/power_domain_summary.rpt reports/supply_connectivity_summary.rpt reports/strategy_coverage.rpt reports/cross_domain_signal.rpt reports/power_intent_check.rpt这个 demo 的重点不是“插入多少 cell”,而是建立 power intent 的工程可观察性。
如果 power intent 不能被查询、不能被报告、不能被检查,那么后续实现就只是黑箱。
十四、常见问题:为什么低功耗 flow 经常在后端变复杂?
低功耗 flow 复杂,通常不是因为概念多,而是因为它跨越了多层模型。
RTL hierarchy Power domain hierarchy Physical hierarchy Library view Timing scenario Power mode PV connectivity LEC equivalence这些层次任何一个不一致,都会产生问题。
例如:
RTL 层次变了,UPF scope 没更新 power domain 改了,floorplan region 没改 level shifter 插入了,但 timing scenario 没覆盖 retention cell 替换了,但 scan chain 没同步 power switch 加了,但 LVS rule 没识别 ECO 改了 netlist,但 power intent 没重新验证所以低功耗工程的核心方法论是:
每一次逻辑、物理、约束或模式变化,都要重新检查 power intent binding。
十五、总结
UPF / CPF 的价值不是“多一个输入文件”。
它们真正解决的是:
如何把低功耗架构意图转化为 eda tool 可以理解的设计语义从底层原理看,低功耗意图必须被显式理解,因为它会影响:
设计对象归属 跨域信号处理 供电网络连接 cell 插入和替换 placement 合法性 routing 连接方式 timing scenario PV 和 signoff ECO 后一致性如果没有 power intent,eda tool 只能看到普通逻辑和普通物理结构。
有了 power intent,工具才能理解:
哪些逻辑会断电 哪些逻辑必须常开 哪些路径需要隔离 哪些信号需要电平转换 哪些状态需要保存 哪些供电模式是合法的所以,低功耗后端实现的第一原则不是“先插 cell”,而是:
先让低功耗意图成为工具数据库中的一等语义。
结尾一句话
UPF / CPF 的本质,是把电源架构从工程师脑中的约定,变成 eda tool 可以解析、绑定、检查和实现的设计语义。