通过supply_on/supply_off可以给UPF中定义的supply_port上电和掉电。
例如在upf中定义了:
create_supply_port VDD_DIG
create_supply_net VDD_DIG
connect_supply_net VDD_DIG -ports VDD_DIG
create_supply_port VSS_DIG
create_supply_net VSS_DIG -resolve parallel
connect_supply_net VSS_DIG -ports VSS_DIG
create_power_domain VDD -update -supply { primary VDD_SS}
create_supply_set VDD_SS \
-function {power VDD_DIG} \
-function {ground VSS_DIG} \
-function {nwell VDD_DIG}
add_power_state VDD_SS -sate MEM_NOM \
{\
-supply_expr { power == `{ FULL_ON, 0.848 }} \
-simstate NORMAL \
}
add_power_state VDD_SS -sate MEM_RET \
{\
-supply_expr { power == `{ FULL_ON, 0.488 }} \
-simstate NORMAL \
}
add_power_state VDD_SS -sate MEM_TURBO \
{\
-supply_expr { power == `{ FULL_ON, 0.904 }} \
-simstate NORMAL \
}
add_power_state VDD_SS -sate off \
{\
-supply_expr { power == `{ OFF }} \
-simstate CORRUPT \
}
在tb_top.sv中,通过supply_on/supply_off上电或掉电:
initial begin
if(power_on)
supply_on("tb_top/dut/VDD_DIG",0.904);
else
supply_off("tb_top/dut/VDD_DIG");
end
需要注意的是supply_on/off作用的是在upf中定义的port,且用到的电压值也应该在upf中有定义。
注意在tb_top中使用UPF内容时候需要import UPF::*
上面例子中的add_power_state语句如果采用create_pst add_pst_state实现的话,可写成以下方式:
add_port_state VDD_DIG \
-state { VDD_NORMAL 0.848 } \
-state { VDD_RET 0.488 } \
-state { VDD_TURBO 0.904 } \
-state { OFF off }
add_port_state VSS_DIG -state { gnd 0 }
create pst pt -supplies { VDD_DIG VSS_DIG }
add_pst_state POWER_NORMAL -pst pt -state {VDD_NORMAL gnd}
add_pst_state POWER_RET -pst pt -state {VDD_RET gnd}
add_pst_state POWER_TURBO -pst pt -state {VDD_TURBO gnd}
add_pst_state POWER_CORRUPT -pst pt -state { OFF gnd}