Virtuoso计算器中调用当前仿真温度
在 Virtuoso ADE Explorer / Assembler 的 Calculator 或输出表达式中,可以使用 VAR("temp") 获取当前仿真点对应的温度。
VAR("temp")
返回值的单位为摄氏度,即 °C。
基本用法
例如,在输出表达式中直接显示当前仿真温度:
VAR("temp")
将当前仿真温度转换为开尔文:
VAR("temp") + 273.15
将某个仿真结果与当前温度组合计算:
VDC("/out") / VAR("temp")
也可以对瞬态波形中的指定时间点进行计算:
value(VT("/out") 1u) * (VAR("temp") - 27)
温度扫描
当 ADE 中配置了温度扫描、Corner 仿真或其他依赖性仿真时,VAR("temp") 会引用当前结果对应的温度。
例如,温度扫描条件为:
-40 °C
27 °C
85 °C
125 °C
对于每一个仿真结果,表达式:
VAR("temp")
会分别得到:
-40
27
85
125
因此,可以直接建立与温度相关的归一化表达式,例如:
VDC("/out") / (VAR("temp") + 273.15)
与 calcVal 配合使用
在 ADE Assembler 中,可以通过 calcVal() 引用其他 Test、Corner 或参数组合下的输出结果。
例如:
calcVal(
"y_end"
"sim_t22_c3_pll_tb_esd_windows_1"
?cornerName "tt"
?matchParams list(
list("t1_cycle" "2")
list("t2_cycle" "3")
)
?ignoreParams "rest"
)
如果被引用的输出表达式内部包含:
VAR("temp")
那么该温度通常对应被引用结果自身的仿真条件,而不是当前表达式所在 Test 的温度。
为了避免歧义,可以先在源 Test 中建立独立输出:
输出名称:sim_temp
表达式:VAR("temp")
然后使用 calcVal() 明确引用该温度输出:
calcVal(
"sim_temp"
"sim_t22_c3_pll_tb_esd_windows_1"
?cornerName "tt"
?matchParams list(
list("t1_cycle" "2")
list("t2_cycle" "3")
)
?ignoreParams "rest"
)
这种写法适合检查跨 Test、跨 Corner 或参数匹配后的实际仿真温度。
不同环境中的温度变量
不同 Cadence 使用环境中,温度变量的写法并不相同。
| 使用位置 | 写法 | 单位 |
|---|---|---|
| ADE Calculator / Outputs | VAR("temp") |
°C |
| Spectre 表达式或行为源 | temp |
°C |
| Verilog-A 模型 | $temperature |
K |
例如,在 Verilog-A 中将温度换算为摄氏度:
real temp_c;
analog begin
temp_c = $temperature - 273.15;
end
注意事项
1. VAR("temp")不是器件结温
VAR("temp") 表示当前仿真设置中的环境温度或仿真温度,不一定等于器件在自热模型下的实际结温。
如果器件模型支持自热,需要根据模型提供的内部节点、输出参数或专用测量方式读取结温。
2. 瞬态变温仿真
如果在一次瞬态仿真过程中动态改变温度,VAR("temp") 通常不能作为随时间变化的温度波形使用。
VAR("temp") 更适合以下场景:
- 单一温度仿真;
- Temperature Sweep;
- Corner 温度;
- Monte Carlo 或参数化仿真中的固定温度条件。
对于随时间变化的温度,需要保存并读取对应的动态温度信号或模型内部温度变量。
3. 避免除零
表达式中直接使用:
1 / VAR("temp")
当仿真温度为 0 °C 时会出现除零问题。
需要进行物理温度相关计算时,通常应先转换为开尔文:
1 / (VAR("temp") + 273.15)
常用公式汇总
获取摄氏温度:
VAR("temp")
获取开尔文温度:
VAR("temp") + 273.15
计算相对于室温 27 °C 的温差:
VAR("temp") - 27
计算输出相对于室温的变化率:
(
VDC("/out") -
value(VDC("/out") VAR("temp") 27)
) / value(VDC("/out") VAR("temp") 27)
实际表达式需要根据输出结果的数据维度以及温度是否为波形横轴进行调整。