3. Xcelium低功耗仿真环境搭建

低功耗仿真的环境搭建,本质上是在普通功能仿真流程上叠加三层信息:UPF电源意图、电源状态控制、以及功耗相关信号的记录。Xcelium通过-upf、-power等编译与运行选项把这三层接进来。环境搭错时,最常见的现象不是报语法错误,而是仿真能跑完却看不到电源状态变化、或者功耗信号全是X。因此本节按“编译选项 → UPF命令行参数 → 电源状态配置 → 波形记录 → 错误排查”的顺序,把每一步的输入、关键参数和判断依据讲清楚。

一、编译与运行选项:把UPF接进仿真

Xcelium的低功耗能力由xrun统一驱动,核心选项分三类。第一类是UPF接入:-upf <file.upf>指定电源意图文件,可多次出现以支持分层UPF;-upf_version 2.1或3.0声明UPF版本,必须与文件内语法一致,否则会在elaboration阶段报版本不匹配。第二类是低功耗仿真开关:-power开启功耗感知仿真,使电源域、电源开关、隔离单元等被真正建模;-power_domain相关选项用于指定默认域行为。第三类是调试与记录:-access +rwc保证信号可读写,-linedebug支持断点,-input指定运行脚本。

一个典型的编译命令如下,注意UPF顺序与设计层次一致:

xrun -64bit -sv -access +rwc \
     -upf_version 2.1 \
     -upf ./upf/top.upf \
     -upf ./upf/cpu_subsys.upf \
     -power \
     -top tb_top \
     -l xrun_lp.log

判断编译是否成功,不能只看“xrun: *E”是否出现,还要在日志中确认UPF file ... loaded、Power domain ... created这类信息。如果UPF被加载但域数量为0,说明create_power_domain的作用范围与设计层次没对上,此时仿真虽能启动,但电源状态不会生效。

二、UPF命令行参数与电源状态配置

UPF文件本身是声明式的,但仿真时还需要通过命令行或控制接口驱动电源状态切换。Xcelium提供-upf_control类选项,也支持在testbench中调用系统任务。实际工程中更常用的是在UPF里定义电源状态表(PST),再在仿真中通过set_power_state或$power_state切换。

电源状态配置的关键是“域—状态—供电”三者对应。例如一个CPU子系统有ON、RET、OFF三个状态,对应供电电压1.0V、0.8V、0V。在UPF中先定义:

create_power_domain PD_CPU -elements {u_cpu}
add_power_state PD_CPU -state {ON}  -supply {VDD 1.0}
add_power_state PD_CPU -state {RET} -supply {VDD 0.8}
add_power_state PD_CPU -state {OFF} -supply {VDD 0.0}

仿真运行时,通过-power_state_file或testbench中的$set_power_state("PD_CPU","RET")触发切换。切换后要观察三个量:域内信号是否被隔离为确定值、电源开关控制信号是否翻转、以及功耗信号是否随电压下降而变化。如果切换后信号仍为X,通常是隔离策略未定义或隔离使能信号未连接。

Xcelium低功耗仿真环境:编译—UPF—状态—波形 数据流 编译/运行选项 -upf / -upf_version -power -access +rwc -l xrun_lp.log UPF电源意图 create_power_domain add_power_state set_isolation / set_retention create_supply_net 电源状态控制 $set_power_state ON / RET / OFF VDD 1.0 / 0.8 / 0.0V -power_state_file 波形记录 VDD/VSS PST状态 隔离使能 开关控制 设计层次与电源域映射 PD_TOP always ON · 1.0V PD_CPU ON/RET/OFF PD_GPU ON/OFF PD_AON always ON 隔离与保持检查 ISO使能 → 输出确定值 RET使能 → 状态保持 否则信号为X 波形观察点 VDD_CPU电压曲线 PST状态跳变 ISO/RET控制信号 常见错误定位 UPF版本不匹配 域未创建/层次错位 信号全X/无功耗

三、波形记录功耗相关信号

低功耗调试最怕“看不到”。默认波形只记录testbench顶层信号,电源域内部的VDD、隔离使能、保持控制往往不在其中。需要在testbench或-input脚本中显式添加记录。推荐用$dumpvars或probe命令,按“供电—控制—状态”三类信号组织:

probe -create tb_top.u_cpu.VDD_CPU -depth all
probe -create tb_top.u_cpu.iso_en  -depth all
probe -create tb_top.u_cpu.ret_en  -depth all
probe -create tb_top.u_cpu.pwr_switch_ctrl -depth all
probe -create tb_top.pst_state -depth all

记录后要检查波形中VDD是否随状态切换而改变。如果VDD始终为1.0V,说明add_power_state中的supply没有真正驱动到该网络,常见原因是supply net未通过connect_supply_net连接到域端口。另一个高频问题是隔离使能信号在OFF状态下仍为X,导致隔离输出不确定,此时应检查隔离控制信号是否来自always-on域。

四、常见环境错误排查

低功耗环境错误大致分四类,排查时按“先看日志、再看域、再看状态、最后看波形”的顺序。

  • UPF版本不匹配:日志出现UPF version mismatch。解决方法是让-upf_version与文件头upf_version一致,UPF 2.1与3.0在电源状态语法上有差异,不能混用。
  • 电源域未创建:日志显示0 power domains。通常是create_power_domain的-elements路径与elaborate后的层次名不一致,可用-upf_dump导出实际域结构核对。
  • 信号全X:域内信号在OFF状态仍为X,说明隔离未生效。检查set_isolation是否指定了-isolation_signal和-isolation_sense,以及该信号是否在always-on域。
  • 功耗无变化:波形中VDD不变、功耗为0。检查-power是否开启、supply net是否连接、以及PST是否被真正触发。
排查时优先使用-l xrun_lp.log保留完整日志,并在日志中搜索UPF、power domain、isolation三个关键词,能快速定位80%以上的环境问题。

最后给出一个可复用的环境检查清单,按顺序执行即可覆盖本节全部关键点:编译日志中UPF加载成功且域数量大于0;-power已开启;PST中每个状态都有对应supply值;隔离与保持策略已定义且控制信号来自always-on域;波形中已记录VDD、ISO、RET、PST四类信号;切换状态后VDD与隔离输出符合预期。满足这六项,低功耗仿真环境才算真正搭好。