3.【UPF】UPF Supply Networks(UPF供应网络)

张开发
2026/4/15 13:59:42 15 分钟阅读

分享文章

3.【UPF】UPF Supply Networks(UPF供应网络)
第一步UPF Supply Networks 原文逐行分析与知识整理1. 为什么学习Supply Networks电源域定义逻辑分组而供电网络supply networks指定实际的电源和地连接。对多电压设计、电源门控至关重要。确保UPF规范准确反映物理供电结构。2. 你将学到什么supply net与supply port的区别使用create_supply_net和create_supply_port创建供电网络定义主要的电源和地网络跨层次边界连接供电网络3. 理解Supply Networks定义供电网络是芯片的电源配送基础设施。组成Supply nets电源域内部的电源/地线如VDD, VSS, VDD_CPUSupply ports层次边界上的连接点Supply connections跨层次的端口与网络之间的关系类比供电网络是电源配送的“布线图”与功能信号分开。声明性UPF只描述存在什么电源连接不描述物理实现方式。物理实现工具据此构建实际电源网格。4. Supply Nets vs Supply Ports 对比表方面Supply NetSupply Port定义内部电源/地分配层次连接点范围电源域内部跨层次边界类比模块内部的导线模块的引脚示例VDD_TOP, VSSVDD (cpu_inst上的端口)物理供电背景多电压SoC中不同域通过独立电源轨获得不同电压。常开逻辑1.2VCPU核1.0VI/O 1.8V。UPF供电网络建模这些不同的电源轨。5.create_supply_net语法基本形式create_supply_net net_name -domain domain_name [options]参数net_name供电网络名必须-domain domain_name所属电源域必须-resolve {parallel|final}层次连接的分辨策略-reuse允许重用已存在的网络名使用变体基本create_supply_net VDD -domain PD_TOP域特定create_supply_net VDD_CPU -domain PD_CPU带分辨率策略create_supply_net VDD -domain PD_TOP -resolve final6. 创建主供电网络主电源VDD和地VSS通常在顶层电源域定义。create_power_domain PD_TOP -include_scope create_supply_net VDD -domain PD_TOP # 1.2V create_supply_net VSS -domain PD_TOP # 0V命名约定VDD/VSS主电源/地VDD_domain/VSS_domain域特定电源VDD_CPUVDDIOI/O电源VDD_RET保持电源断电期间仍供电VDD_SW开关电源电源开关输出建议使用描述性名称如VDD_1V0, VDD_CPU_SW, VDD_AON7. 多域供电网络示例三电压设计create_power_domain PD_TOP -include_scope create_supply_net VDD_TOP -domain PD_TOP # 1.2V create_supply_net VSS -domain PD_TOP create_power_domain PD_CPU -elements {cpu_inst} create_supply_net VDD_CPU -domain PD_CPU # 1.0V create_supply_net VSS -domain PD_CPU create_power_domain PD_IO -elements {io_subsystem} create_supply_net VDDIO -domain PD_IO # 1.8V create_supply_net VSS -domain PD_IO重要VSS地通常在所有域共享。虽然可以创建分离的VSS但物理实现通常连接到公共地平面。8.create_supply_port语法基本形式create_supply_port port_name -domain domain_name [options]参数port_name端口名必须-domain domain_name所属电源域必须-direction {in|out|inout}端口方向使用场景层次化设计子模块通过端口从父模块接收电源IP集成可复用块在其UPF中定义电源端口电源开关开关输入/输出端口连接到供电网络外部供电顶层端口连接到片外电源9. 层次化供电端口示例顶层create_power_domain PD_TOP -include_scope create_supply_net VDD -domain PD_TOP create_supply_net VSS -domain PD_TOP create_supply_port VDD_PIN -domain PD_TOP -direction in create_supply_port VSS_PIN -domain PD_TOP -direction in connect_supply_net VDD -ports {VDD_PIN} connect_supply_net VSS -ports {VSS_PIN}子模块cpu_instset_scope cpu_inst create_power_domain PD_CPU_INTERNAL -include_scope create_supply_net VDD_CPU -domain PD_CPU_INTERNAL create_supply_port VDD_CPU_PORT -domain PD_CPU_INTERNAL -direction in connect_supply_net VDD_CPU -ports {VDD_CPU_PORT} set_scope .IP可复用性IP块定义其供电端口SoC集成时将IP的供电端口连接到相应的SoC供电网络。10.connect_supply_net语法形式connect_supply_net net_name -ports {port_list}示例connect_supply_net VDD -ports {cpu_inst/VDD}电压兼容性警告供电端口连接必须遵守电压兼容性。UPF不验证电压设计师需确保供电连接与电源架构匹配。11. 分辨率策略parallel默认网络可以从多个源连接final网络不能再被进一步解析终端网络create_supply_net VDD -domain PD_TOP -resolve final # 顶层主电源 create_supply_net VDD_CPU -domain PD_CPU -resolve parallel实践中顶层芯片引脚或明确禁止进一步连接时使用-resolve final。12. 电源门控域的供电网络示例GPU域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_power_domain PD_GPU -elements {gpu_inst} create_supply_net VDD_GPU_SW -domain PD_GPU # 可开关的电源 create_supply_net VSS -domain PD_GPU双电源VDD_AON常开用于控制逻辑VDD_GPU_SW可关断以消除漏电。13. 常见命名模式总结模式用途示例VDD_domain域特定电源VDD_CPU, VDD_GPUVDD_voltage电压等级VDD_1V0, VDD_1V2VDD_function功能目的VDD_AON, VDD_RETVDD_SW开关电源VDD_GPU_SWVSS / GND地VSS, GNDVDDIOI/O电源VDDIO_1V814. 常见初学者错误错误1create_supply_net缺少-domain→ 必须指定域。错误2假设供电网络名与RTL信号名匹配 → UPF供电网络是抽象功耗意图不自动匹配Verilog信号名。错误3为每个域创建不必要的独立VSS → 地通常共享使用相同VSS名简化UPF。15. 实践练习要求为四个电源域创建供电网络PD_TOP(1.2V常开), PD_CPU(1.0V可关断), PD_DSP(0.9V可关断), PD_IO(1.8V常开)共享地。16. 总结供电网络包含supply net和supply portcreate_supply_net定义域内电源/地主电源VDD/VSS在顶层域定义多电压设计需要分离的VDD网络VSS通常共享create_supply_port和connect_supply_net处理层次连接描述性命名提高UPF可维护性第二步资深验证工程师用费曼学习法教你UPF供电网络供电网络Supply Networks就是芯片的“血管系统”——supply net是血管supply port是血管接口电源域是器官。没有正确的血管连接器官得不到能量就会坏死。作为验证工程师我要确保每个器官电源域都接到正确的电压动脉血地线静脉血共用并且开关电源时不会“缺血”。本文用5W原则帮你彻底搞懂什么是供电网络为什么需要它在哪里定义什么时候用谁来写然后教你手写一个多电压SoC的供电网络。我们要着重讲什么需要关注什么为什么这样做这样做的好处如何学习使用遵循5W5W原则应用What是什么供电网络是芯片内部电源和地的“地图”告诉工具哪里该有1.2V哪里该有0.9V哪里可以断电。Why为什么需要没有供电网络工具不知道VDD_CPU和VDD_TOP是不同的电压可能会把两个电源线短路在一起或者忘记给关断域恢复供电。Where在哪里定义在UPF文件中与电源域定义同时或之后。顶层域定义主电源和地每个子域定义自己的供电网络。When什么时候做架构阶段就要规划RTL开发初期写入UPF贯穿整个流程。Who谁负责功耗架构师定义策略验证工程师检查正确性物理设计工程师实现。好处避免电源短路或电压不匹配支持电源门控和DVFS实现IP级供电接口标准化便于复用自动化工具插入隔离、电平转换、电源开关学习路线背熟三个核心命令create_supply_net,create_supply_port,connect_supply_net画一个简单的层次化框图顶层CPUGPUI/O手写对应的供电网络用仿真工具跑一个测试检查断电时供电网络是否正确标记为OFF阅读一个真实IP如ARM CPU的UPF分析其供电端口命名和连接下面每个小标题深入讲解一个关键知识点。一、Supply Net vs Supply Port血管与血管接口通俗解释Supply Net就像人体内的血管负责把血液电能输送到器官逻辑模块的每一个细胞。在芯片里VDD网络给所有标准单元供电VSS网络是地。Supply Port就像血管穿过器官壁的地方——动脉从心脏出来进入肾脏时会有一个“接口”肾动脉入口。在芯片里子模块比如CPU有一个电源输入端口父模块通过这个端口把电源送进去。为什么需要区分因为层次化设计中子模块不知道自己上面还有父模块。子模块的UPF里只能定义自己内部的网络和对外端口父模块的UPF里负责把父级的网络连接到子模块的端口。这种分离保证了IP的独立性——IP设计者只需声明“我需要一个1.0V的电源进来叫VDD_PORT”而不需要知道SoC上的具体电源叫什么。验证工程师关注什么每个子模块的供电端口方向是否正确-direction in表示从父级取电-direction out表示向子级供电。父级连接时电压是否匹配比如CPU端口要求1.0V父级给了1.2V虽然UPF不报错但流片后会烧芯片。代码示例来自原教程加上注释# 子模块CPU的UPF在其自己的scope内 set_scope cpu_inst create_power_domain PD_CPU -include_scope # 内部网络VDD_CPU_CORE create_supply_net VDD_CPU_CORE -domain PD_CPU # 对外端口VDD_PORT方向是in从外面取电 create_supply_port VDD_PORT -domain PD_CPU -direction in # 把端口连接到内部网络 connect_supply_net VDD_CPU_CORE -ports {VDD_PORT} set_scope . # 顶层UPF create_power_domain PD_TOP -include_scope create_supply_net VDD_1V2 -domain PD_TOP # 顶层电压1.2V # 注意CPU需要1.0V不能直接连VDD_1V2。需要先降压通过电压调节器或LDO # 这里假设有一个电压调节器模块提供1.0V给CPU create_supply_net VDD_1V0 -domain PD_TOP # 1.0V网络 # 把顶层1.0V网络连接到CPU实例的VDD端口 connect_supply_net VDD_1V0 -ports {cpu_inst/VDD_PORT}二、create_supply_net给每个电源域建立专属“血管”核心语法create_supply_net 网络名 -domain 电源域为什么必须指定-domain因为同一个网络名比如VDD在不同域里可能代表不同的物理电压。在PD_TOP域VDD可能是1.2V在PD_CPU域VDD可能是1.0V。如果不指定域工具就不知道你指的是哪个。这就像两个人同名必须加上家庭地址才能区分。原教程示例三电压设计create_power_domain PD_TOP -include_scope create_supply_net VDD_TOP -domain PD_TOP # 1.2V create_power_domain PD_CPU -elements {cpu_inst} create_supply_net VDD_CPU -domain PD_CPU # 1.0V create_power_domain PD_IO -elements {io_subsystem} create_supply_net VDDIO -domain PD_IO # 1.8V验证视角我会检查每个电源域是否都有对应的create_supply_net。如果某个域没有定义任何供电网络工具会默认使用父域的网络但这往往不是设计意图。另外我会确保地网络VSS在所有域中名称一致以便物理设计时共享。好处明确区分电压域避免电源网络混淆。综合工具可以根据不同域使用不同电压的库单元比如低电压域用低Vt单元高电压域用高Vt单元。三、create_supply_port给IP开一扇“电源门”什么时候需要电源端口层次化设计中的子模块CPU、DSP、SRAM可复用的IP核设计时不知道将来会被放到哪个SoC电源开关的输入/输出芯片顶层连接到封装引脚原教程的IP集成示例一个CPU IP在其UPF中定义VDD_CPU_PORT作为输入端口。SoC集成时顶层UPF将VDD_1V0网络连接到这个端口。这样CPU IP的设计者完全不用关心SoC的电源命名只要声明端口即可。方向的含义-direction in这个端口接收电源大多数子模块用这个-direction out这个端口向外提供电源比如电源管理单元PMU输出-direction inout双向很少用验证检查我会检查子模块的供电端口是否都正确连接到了父级的某个供电网络。如果一个子模块有VDD端口但没有被connect_supply_net连接仿真时会报“悬空电源端口”但有些工具不报错导致模块实际没电。所以验证必须写脚本来检查所有端口的连通性。代码示例完整层次化连接# 顶层 create_supply_net VDD_MAIN -domain PD_TOP create_supply_port PAD_VDD -domain PD_TOP -direction in connect_supply_net VDD_MAIN -ports {PAD_VDD} # 从芯片引脚取电 # 子模块DSP set_scope dsp_inst create_supply_port VDD_IN -domain PD_DSP -direction in connect_supply_net VDD_DSP -ports {VDD_IN} set_scope . # 顶层连接 connect_supply_net VDD_MAIN -ports {dsp_inst/VDD_IN}四、地网络VSS共享的“静脉血”为什么通常共享VSS因为所有模块的地电位在物理上应该是相同的0V。如果为每个域创建独立的地网络VSS_CPU, VSS_GPU物理实现时最终也要把它们短接在一起否则信号跨域时没有参考地。所以UPF中简单地在每个域都创建同名的VSS网络物理设计工具会自动将它们连接成统一的地平面。原教程建议不要创建不必要的独立VSS。错误做法create_supply_net VSS_TOP -domain PD_TOP create_supply_net VSS_CPU -domain PD_CPU # 多余正确做法create_supply_net VSS -domain PD_TOP create_supply_net VSS -domain PD_CPU # 同名共享验证要点检查是否有任何电源域没有定义VSS。没有地电路无法工作。另外如果某个域使用了独立VSS名比如VSS_ISO用于隔离阱要确保最终在物理实现中与其他VSS连接否则会浮空。五、电源门控域的双电源常开开关为什么需要两种电源想象一个GPU大部分时间空闲。为了省电我们想关掉它的核心电源。但关掉之后如何再唤醒唤醒信号需要由某个一直有电的逻辑接收。所以GPU域里保留一小部分常开逻辑比如唤醒控制器用VDD_AON供电而大部分计算逻辑用VDD_GPU_SW供电通过电源开关控制通断。原教程示例# 顶层常开电源 create_supply_net VDD_AON -domain PD_TOP # GPU域内部 create_supply_net VDD_GPU_SW -domain PD_GPU # 开关电源后续还需要定义电源开关在另一个模块将VDD_AON连接到开关输入开关输出到VDD_GPU_SW。验证工程师的检查开关的控制信号必须来自常开域否则断电后无法控制开关。隔离单元必须接VDD_AON因为断电后只有常开电源还能驱动信号。保留寄存器retention register通常有两个电源主电源可关断和保留电源常开需要正确连接。命名规范使用VDD_AON,VDD_GPU_SW等描述性名称一看就知道用途。六、分辨率策略-resolve谁是最终电源来源概念在层次化设计中一个供电网络可能从多个地方得到连接。比如子模块内部有一个VDD网络同时父模块也连接了一个VDD到子模块的端口。-resolve决定当多个源冲突时怎么办。-resolve parallel默认允许多个源并行供电。实际上物理实现中多个电源驱动同一个网络是危险的除非它们是同一个电压。这个选项主要用于层次化组合让子模块的网络可以继承父级的连接。-resolve final这个网络是终端不能再被其他源连接。通常用于顶层芯片引脚——电源从引脚进来不能再有其他源驱动。原教程建议大多数情况用默认即可。-resolve final只在顶层主电源或明确要阻止进一步连接时使用。例子# 顶层主电源最终来源是芯片引脚 create_supply_net VDD_CHIP -domain PD_TOP -resolve final create_supply_port VDD_PIN -domain PD_TOP -direction in connect_supply_net VDD_CHIP -ports {VDD_PIN} # 现在VDD_CHIP不能再被其他网络连接验证注意如果错误地将内部网络设为-resolve final而父级又想连接它工具会报错。所以一般只对真正的“源”使用final。七、常见错误与验证实战错误1忘记写-domaincreate_supply_net VDD # 缺少-domain后果工具不知道这个网络属于哪个域可能导致错误或默认分配到当前域但当前域可能不是想要的。验证用UPF检查工具如check_upf -verbose会报warning。错误2假设UPF网络自动匹配RTL中的电源引脚误解RTL里有一个模块的电源引脚叫VDDUPF里创建了create_supply_net VDD就自动连上了。真相UPF的供电网络是抽象描述物理实现工具负责把UPF网络映射到实际的标准单元电源轨。对于模块的电源端口必须显式用connect_supply_net连接到模块的供电端口。验证在门级网表里检查模块的电源引脚是否连接到了正确的电源网络。错误3为每个域创建不同的VSS名create_supply_net VSS_TOP -domain PD_TOP create_supply_net GND_CPU -domain PD_CPU # 不同名后果物理设计工具会认为它们是不同的地网络可能产生地平面分裂或悬浮导致信号完整性问题。验证检查UPF中所有VSS/GND命名确保所有域使用同一个名字通常是VSS。如果确实需要隔离的地比如模拟域和数字域要明确使用隔离阱并在UPF中用不同名称并最终通过特殊连接合并。八、实战练习手写一个四域SoC的供电网络原练习要求为PD_TOP(1.2V常开), PD_CPU(1.0V可关断), PD_DSP(0.9V可关断), PD_IO(1.8V常开)创建供电网络共享地。答案带详细注释# # 1. 顶层域常开1.2V # create_power_domain PD_TOP -include_scope create_supply_net VDD_1V2 -domain PD_TOP # 1.2V 主电源 create_supply_net VSS -domain PD_TOP # 公共地 # 顶层可能需要外部供电端口假设从芯片引脚来 create_supply_port VDD12_PIN -domain PD_TOP -direction in create_supply_port VSS_PIN -domain PD_TOP -direction in connect_supply_net VDD_1V2 -ports {VDD12_PIN} connect_supply_net VSS -ports {VSS_PIN} # # 2. CPU域1.0V可关断 # create_power_domain PD_CPU -elements {cpu_cluster} create_supply_net VDD_1V0 -domain PD_CPU # 1.0V 开关电源 create_supply_net VSS -domain PD_CPU # 共享地 # 为CPU实例创建电源端口假设CPU核有VDD端口 create_supply_port VDD_CPU_PORT -domain PD_CPU -direction in connect_supply_net VDD_1V0 -ports {VDD_CPU_PORT} # 后续需要定义电源开关将VDD_1V2常开切换为VDD_1V0 # 注意CPU域还需要常开电源用于唤醒逻辑可单独加VDD_AON_CPU # 但本例简化假设CPU内部有独立的常开供电端口这里不展开 # # 3. DSP域0.9V可关断 # create_power_domain PD_DSP -elements {dsp_engine} create_supply_net VDD_0V9 -domain PD_DSP # 0.9V 开关电源 create_supply_net VSS -domain PD_DSP create_supply_port VDD_DSP_PORT -domain PD_DSP -direction in connect_supply_net VDD_0V9 -ports {VDD_DSP_PORT} # # 4. I/O域1.8V常开因为需要随时响应外部信号 # create_power_domain PD_IO -elements {io_subsystem} create_supply_net VDD_1V8 -domain PD_IO # 1.8V 常开 create_supply_net VSS -domain PD_IO create_supply_port VDD_IO_PORT -domain PD_IO -direction in connect_supply_net VDD_1V8 -ports {VDD_IO_PORT} # # 注意地网络VSS在所有域中名字相同物理实现会连接在一起 # 电源网络名清晰指示了电压等级VDD_1V2, VDD_1V0, VDD_0V9, VDD_1V8 # 这样可读性强避免错误。 # 验证方法使用仿真器如VCS UPF加载此UPF运行一个简单测试通过save_upf_supply_info命令打印所有电源网络的状态确保每个域都正确创建了所需的网络。最终总结验证工程师的供电网络检查清单每次流片前请确认以下事项每个create_power_domain都对应有create_supply_net为VDD和VSS至少VDD。所有层次化子模块的供电端口都通过connect_supply_net连接到父级网络。没有遗漏的-domain参数。地网络在所有域中命名一致通常为VSS除非有隔离阱的特殊要求。电源门控域同时定义了常开电源VDD_AON和开关电源VDD_SW。电源开关的控制信号来自常开域。电压等级与库单元要求匹配比如1.0V的域不能使用只支持1.2V的标准单元。UPF中的供电网络名称与物理实现中的电源引脚名称保持一致通过映射文件或约束。记住供电网络是芯片的命脉。验证供电网络就是验证芯片能否活过来。

更多文章