5.【UPF】UPF Supply Sets(UPF供电装置套件)
第一步UPF Supply Sets 分析与知识整理1. 为什么学习Supply Sets单个供电网络supply net代表电源或地连接但供电集supply set将这些网络按功能角色分组电源、地、nwell、pwell。对于将电源域与其完整的供电需求关联、实现高级功耗管理策略至关重要。2. 你将学到什么什么是供电集为什么需要它使用create_supply_set创建供电集并分配功能角色将供电集与电源域关联为不同电源状态使用多个供电集3. 什么是供电集定义供电集是按功能角色分组的供电网络集合。它将电源和地捆绑在一起表示一个完整的供电配置。包含内容电源power主电源网络如VDD地ground地参考如VSS可选nwell、pwell或其他专用供电本质回答“这个域正常工作需要哪些完整的电源连接”而不是分别说使用VDD和VSS。4. 为什么需要供电集逻辑分组电源和地天然配对供电集反映这种关系。状态管理不同电源状态可使用不同供电集活跃 vs 保持。更简洁的关联一条命令将完整供电与域关联。高级特性支持nwell/pwell偏置和多阈值设计。背景电源门控域可能有两个供电集SS_ACTIVE正常工作和SS_RETENTION断电时保持状态。供电集使状态相关的供电管理显式化、工具可读。5.create_supply_set语法基本形式create_supply_set set_name -function {role net_name} [additional_functions]参数set_name唯一标识符必须-function {role net_name}将供电网络分配给功能角色必须可重复标准功能角色角色用途示例power主电源VDD, VDD_CPUground地参考VSS, GNDnwellN阱偏置电源VDD 或 VDDNpwellP阱偏置电源VSS 或 VDDP使用变体基本电源地create_supply_set SS_TOP -function {power VDD_TOP} -function {ground VSS}带阱偏置create_supply_set SS_CPU -function {power VDD_CPU} -function {ground VSS} -function {nwell VDD_CPU} -function {pwell VSS}保持供电集create_supply_set SS_RET -function {power VDD_RET} -function {ground VSS}6. 创建基本供电集每个电源域至少需要一个定义其电源和地的供电集。单域示例create_power_domain PD_TOP -include_scope create_supply_net VDD -domain PD_TOP create_supply_net VSS -domain PD_TOP create_supply_set SS_TOP -function {power VDD} -function {ground VSS} associate_supply_set SS_TOP -handle PD_TOP7. 多域供电集示例每个域有自己的供电集反映其独特的电压和供电方式。完整示例顶层1.2V、CPU 1.0V、GPU 0.9V# 顶层 create_power_domain PD_TOP -include_scope create_supply_net VDD_TOP -domain PD_TOP; create_supply_net VSS -domain PD_TOP create_supply_set SS_TOP -function {power VDD_TOP} -function {ground VSS} associate_supply_set SS_TOP -handle PD_TOP # CPU域 create_power_domain PD_CPU -elements {cpu_inst} create_supply_net VDD_CPU -domain PD_CPU; create_supply_net VSS -domain PD_CPU create_supply_set SS_CPU -function {power VDD_CPU} -function {ground VSS} associate_supply_set SS_CPU -handle PD_CPU命名惯例使用SS_前缀与域名匹配如PD_CPU对应SS_CPU。8. 将供电集与域关联associate_supply_set语法associate_supply_set set_name -handle domain_name示例associate_supply_set SS_CPU -handle PD_CPU作用将抽象的供电集定义连接到具体的电源域。没有此关联供电集存在但未被使用。9. 每个域多个供电集单个域可以有多个供电集用于不同工作状态。活跃 vs 保持示例电源门控状态保持create_power_domain PD_GPU -elements {gpu_inst} create_supply_net VDD_GPU -domain PD_GPU # 主电源可开关 create_supply_net VDD_RET -domain PD_GPU # 保持电源常开 create_supply_net VSS -domain PD_GPU create_supply_set SS_GPU_ACTIVE -function {power VDD_GPU} -function {ground VSS} create_supply_set SS_GPU_RET -function {power VDD_RET} -function {ground VSS} associate_supply_set SS_GPU_ACTIVE -handle PD_GPU背景移动处理器中保持触发器使用独立的常开电源VDD_RET主电源关断时维持状态实现快速唤醒且显著节省漏电。10. 阱偏置Well Biasing标准阱偏置nwell接VDDpwell接VSScreate_supply_set SS_CPU -function {power VDD_CPU} -function {ground VSS} -function {nwell VDD_CPU} -function {pwell VSS}高级体偏置自适应/反向体偏置需要独立的阱电源create_supply_net VDDN -domain PD_CPU; create_supply_net VDDP -domain PD_CPU create_supply_set SS_CPU_ABB -function {power VDD_CPU} -function {ground VSS} -function {nwell VDDN} -function {pwell VDDP}注意大多数设计仅将阱接到电源和地。仅在工艺库要求或实现体偏置优化时才显式指定阱供电。11. 隔离和电平转换中的供电集隔离单元供电需要常开电源使用父域常开的供电集set_isolation ISO_GPU -domain PD_GPU -isolation_supply_set SS_TOP -clamp_value 0电平转换器供电跨越电压域需要两个域的电源由库单元自身处理UPF中通过-location parent等隐式使用父域供电。12. 完整示例多域供电集原教程提供了完整的3域示例PD_TOP常开1.2V、PD_CPU可门控1.0V带保持、PD_GPU可门控0.9V。创建了4个供电集SS_TOP、SS_CPU_ACTIVE、SS_CPU_RET、SS_GPU。13. 常见初学者错误错误1创建供电集但未关联到域 → 必须执行associate_supply_set。错误2供电集中忘记地ground功能 → 单元需要电源和地两者都必须指定。错误3引用不存在的供电网络 → 先创建create_supply_net再在供电集中引用。14. 实践练习要求PD_TOP常开1.2VVDD_AON, VSSPD_MODEM可门控1.0VVDD_MDM, VSS带保持VDD_RET, VSSPD_SENSOR常开0.9VVDD_SENSOR, VSS。创建相应的供电集和关联。15. 总结供电集按功能角色power, ground, nwell, pwell分组供电网络。create_supply_set定义供电集associate_supply_set将其连接到电源域。一个域可有多个供电集用于不同状态活跃、保持。供电集用于隔离、电平转换、保持策略中指定特殊单元的电源。高级设计可能包含阱偏置功能。第二步用费曼学习法学习UPF供电集供电集Supply Set就是芯片的“电源套餐”——不是单点一根线而是把电源、地、甚至阱偏置打包成一个“全家桶”。作为验证工程师我要确保每个电源域房间都点对了套餐活跃时用“大餐”主电源休眠时用“小食”保持电源并且隔离单元不能点到断电域的套餐。本文带你搞懂为什么需要供电集如何创建和关联多个供电集如何实现状态切换以及验证时最容易被忽视的阱偏置。我们着重讲什么需要关注什么为什么这样做好处如何学习使用着重讲解供电集是什么把分散的供电网络VDD、VSS、VDD_RET、VDDN等按角色打包成一个逻辑单元。为什么需要电源和地总是成对出现且不同工作状态需要不同电源组合活跃 vs 保持。供电集让UPF更简洁、更贴近硬件思维。好处代码可读性一眼看出域用了哪些电源。状态管理轻松切换活跃/保持供电集。支持阱偏置先进工艺必需。工具自动化综合、物理设计自动根据供电集选择正确单元。如何学习先背熟create_supply_set的三个基本角色power、ground、可选nwell/pwell。手写一个简单例子一个常开域SS_TOP和一个可关断域SS_SLEEP。然后加入保持供电集SS_RET练习一个域两个集。用UPF检查工具验证关联是否正确。下面按知识点展开每个部分都有通俗解释、代码示例和验证工程师的实战视角。一、供电集 vs 供电网络从“散装”到“套餐”通俗解释供电网络supply net就像一根根电线——VDD是火线VSS是零线VDD_RET是备用火线。供电集supply set把这些电线按用途打包成“套餐”。比如“正常工作套餐”包含VDDVSS“休眠保持套餐”包含VDD_RETVSS。为什么需要套餐芯片里的每个模块电源域工作时需要同时有火线和零线。你不可能只给一根线。而且有些模块在休眠时需要换另一套电源低压保持电源。如果每次都要单独指定每个网络UPF会又长又乱。供电集让代码变成这个域用SS_ACTIVE套餐。原教程示例对比散装写法没有供电集# 每次都要重复列出VDD和VSS且无法表达“保持状态”用不同电源套餐写法有供电集create_supply_set SS_CPU_ACTIVE -function {power VDD_CPU} -function {ground VSS} associate_supply_set SS_CPU_ACTIVE -handle PD_CPU验证工程师读UPF时看到SS_CPU_ACTIVE就知道这是CPU活跃时的电源配置比看到一堆create_supply_net然后猜测哪个是主电源要清晰得多。二、创建供电集三个核心角色必须有的两个角色-function {power 网络名}主电源通常是正电压。-function {ground 网络名}地0V。可选但重要的角色-function {nwell 网络名}N阱偏置。通常与power相同但先进工艺中可独立调节以控制阈值电压。-function {pwell 网络名}P阱偏置。通常与ground相同但也可独立调节。原教程基本示例create_supply_net VDD -domain PD_TOP create_supply_net VSS -domain PD_TOP create_supply_set SS_TOP -function {power VDD} -function {ground VSS}验证工程师的关注点是否每个供电集都同时包含power和ground缺一不可。如果只写power工具可能不报错但物理实现时单元没有地参考导致仿真X或芯片功能异常。供电集中的网络名是否已经用create_supply_net创建顺序很重要先有网络再打包。学习技巧把create_supply_set想象成打包指令把之前散装的create_supply_net装进一个盒子贴上标签供电集名。三、关联供电集到电源域associate_supply_set为什么需要这一步创建了供电集套餐后要告诉每个电源域房间“你点的是这个套餐”。没有关联供电集只是一个孤立的定义工具不知道哪个域使用它。语法associate_supply_set SS_CPU -handle PD_CPU原教程强调一个域可以有多个供电集但associate_supply_set只指定默认或主要供电集。其他供电集如保持集会在保留策略中通过-retention_supply_set等方式引用。验证检查我会运行report_supply_set -domain PD_CPU确认关联的供电集是预期的。如果发现域关联了错误的供电集比如CPU域关联了1.8V的I/O供电集会导致电压不匹配可能烧毁单元。常见错误创建了供电集但忘记关联。工具不会报致命错误但后续功耗分析时会因为域没有供电而失败。检查方法在UPF末尾加上check_mv_design命令Synopsys工具或等效检查。四、一个域多个供电集活跃 vs 保持场景一个GPU域正常工作时需要1.0V主电源VDD_GPU。当进入睡眠时我们希望关掉主电源以消除漏电但需要给保留寄存器提供一个常开的0.8V保持电源VDD_RET以便快速唤醒时恢复状态。原教程代码create_power_domain PD_GPU -elements {gpu_inst} create_supply_net VDD_GPU -domain PD_GPU create_supply_net VDD_RET -domain PD_GPU create_supply_net VSS -domain PD_GPU create_supply_set SS_GPU_ACTIVE -function {power VDD_GPU} -function {ground VSS} create_supply_set SS_GPU_RET -function {power VDD_RET} -function {ground VSS} associate_supply_set SS_GPU_ACTIVE -handle PD_GPU # 默认活跃集验证工程师的任务检查保留寄存器的电源引脚是否正确连接到了VDD_RET而不是VDD_GPU。在门级网表中查看保留触发器的RET引脚。检查电源开关VDD_GPU来自开关输出VDD_RET直接来自常开电源。检查状态转换当域从活跃进入保持时主电源先关断但VDD_RET必须保持。验证时要模拟这个序列确认保留寄存器的值没有丢失。好处这种“双供电集”设计让芯片在睡眠时漏电从几十毫瓦降到微瓦级同时唤醒时间在微秒级因为状态已保留。五、阱偏置给晶体管“穿背心”通俗解释晶体管除了源、漏、栅还有阱well。阱的偏置电压可以调节晶体管的阈值电压Vth。把N阱电压抬高比VDD还高可以降低Vth让晶体管跑得更快前向体偏置把P阱电压拉低比VSS还低可以升高Vth减少漏电反向体偏置。供电集中的nwell和pwell角色就是为这个准备的。原教程示例标准阱偏置最简单create_supply_set SS_CPU -function {power VDD_CPU} -function {ground VSS} -function {nwell VDD_CPU} -function {pwell VSS}这表示N阱接VDD_CPUP阱接VSS。绝大多数设计用这个就够了。高级体偏置需要独立阱电源create_supply_net VDDN -domain PD_CPU # N阱电源可能高于VDD_CPU create_supply_net VDDP -domain PD_CPU # P阱电源可能低于VSS create_supply_set SS_CPU_ABB -function {power VDD_CPU} -function {ground VSS} -function {nwell VDDN} -function {pwell VDDP}验证工程师注意阱电源的电压范围必须符合工艺允许值。给N阱加超过VDD0.3V可能导致闩锁效应。阱电源必须单独创建供电网络和供电集不能与主电源混淆。物理验证DRC会检查阱连接但UPF验证也要确保阱供电集与库单元的要求一致。学习建议初学者先掌握power和ground两个角色。阱偏置等遇到具体工艺需求再深入学习。六、供电集在隔离和电平转换中的使用隔离单元需要常开电源当一个域断电它的输出经过隔离单元钳位到固定值。隔离单元本身必须由不断电的电源供电否则它也无法工作。因此set_isolation命令中要用-isolation_supply_set指定一个常开域的供电集。原教程示例set_isolation ISO_GPU -domain PD_GPU -isolation_supply_set SS_TOP -clamp_value 0这里SS_TOP是顶层常开域的供电集确保隔离单元永远有电。验证检查我会确认隔离单元在版图中的电源连接确实来自常开电源轨而不是来自被隔离域的电源轨。如果错误地连到了VDD_GPU那么当GPU断电时隔离单元也失电X就会传播出去。电平转换器通常不需要显式指定供电集因为库单元内部已经定义了需要两个电源域源和目的。UPF中通过set_level_shifter的-location选项间接指定。但验证时要检查电平转换器是否真的插入了并且它的高电压侧连接到了正确的供电集。七、完整代码示例一个带保持的Modem域练习要求PD_TOP常开1.2VPD_MODEM可门控1.0V带保持VDD_RETPD_SENSOR常开0.9V。共享VSS。我的答案带详细注释和验证要点# # 1. 顶层域常开1.2V # create_power_domain PD_TOP -include_scope create_supply_net VDD_AON -domain PD_TOP # 1.2V create_supply_net VSS -domain PD_TOP create_supply_set SS_TOP -function {power VDD_AON} -function {ground VSS} associate_supply_set SS_TOP -handle PD_TOP # # 2. Modem域可门控1.0V带保持 # create_power_domain PD_MODEM -elements {modem_inst} create_supply_net VDD_MDM -domain PD_MODEM # 主电源开关 create_supply_net VDD_RET -domain PD_MODEM # 保持电源常开 create_supply_net VSS -domain PD_MODEM create_supply_set SS_MODEM_ACTIVE -function {power VDD_MDM} -function {ground VSS} create_supply_set SS_MODEM_RET -function {power VDD_RET} -function {ground VSS} associate_supply_set SS_MODEM_ACTIVE -handle PD_MODEM # 注意保持供电集将在后续保留策略中通过 -retention_supply_set 引用 # # 3. 传感器域常开0.9V # create_power_domain PD_SENSOR -elements {sensor_inst} create_supply_net VDD_SENSOR -domain PD_SENSOR # 0.9V create_supply_net VSS -domain PD_SENSOR create_supply_set SS_SENSOR -function {power VDD_SENSOR} -function {ground VSS} associate_supply_set SS_SENSOR -handle PD_SENSOR # # 验证命令伪代码取决于工具 # # check_mv_design -verbose # report_supply_set -all # report_power_domain -verbose验证工程师的测试用例正常模式Modem活跃检查VDD_MDM电压为1.0VVDD_RET也为1.0V或常开值。休眠模式关断VDD_MDM仅保留VDD_RET。验证Modem输出被隔离钳位到0内部保留寄存器状态不变。唤醒模式恢复VDD_MDM检查保留寄存器恢复的值正确Modem功能正常。八、学习路线和常见坑学习路线从易到难第1天掌握create_supply_net和create_supply_set的基本用法写一个单域UPF。第2天加入多域和associate_supply_set用工具报告验证关联。第3天实现一个带保持供电集的域了解set_retention如何引用保持集。第4天学习阱偏置如果有需求并在物理验证中检查阱连接。第5天阅读一个真实SoC的UPF文件分析其中的供电集设计。常见坑与避坑坑1供电集创建了但关联错域。例如把SS_CPU关联到了PD_GPU。避坑命名保持一致SS_CPU对应PD_CPU并用脚本检查每个域关联的供电集名称是否匹配。坑2在供电集中使用尚未创建的supply net。避坑严格遵守顺序先create_power_domain再create_supply_net再create_supply_set最后associate_supply_set。坑3多个供电集时混淆默认关联。避坑主供电集用associate_supply_set其他供电集通过策略命令如set_retention -retention_supply_set显式引用不要在多个地方重复associate。最终总结验证工程师的供电集检查清单每个电源域都有至少一个关联的供电集包含power和ground。每个供电集中的网络都已在相应域中用create_supply_net定义。如果域有保持功能已创建保持供电集并在保留策略中引用。隔离单元使用了常开域的供电集不是被隔离域本身的供电集。阱偏置如有的电压值符合工艺规则且与主电源电压关系正确。运行check_mv_design无致命错误。供电集是UPF中连接“电源网络”和“电源域”的桥梁。掌握了它你就真正理解了芯片如何按需配电。