upf 语法
UPF命令语法
在本文中,我们将讨论一些重要的UPF命令语法,这些语法用于为给定的电源意图编写UPF。
create_power_switch:它用于定义门控电源域中所需的开关。
语法:
create_power_switch switch_name
– domain domain_name
– input_supply_port port_name supply_net_name
– output_supply_port port_name supply_net_name
– control_port port_name net_name
– on_state state_name input_supply_port {Boolean_function}
参数 | 简要说明(开关指的是switch) |
switch_name | 它只是开关名称,因此用户可以给出任何名称 |
–domain domain_name | 包含开关的域 |
–input_supply_port port_name supply_net_name | 开关和连接该端口的net的输入电源端口 |
–output_supply_port port_name supply_net_name | 开关和连接该端口的net的输出电源端口。 |
–control_port port_name net_name | 开关的控制端口和连接该端口的net。 |
–on_state_name input_supply_port{Boolean_function} |
用户定义的状态、为其定义的输入supply端口以及相应的布尔函数。 |
set_isolation:它用于指定域中要使用指定策略隔离的元素。你可以在这里查看,为什么我们需要隔离。
语法:
set_isolation isolation_name – domain domain_name – isolation power_net net_name | isolation_ground_net net_name | isolation_power_net net_name \
-isolation_ground_net net_name | no_isolation – elements list – clamp_value < 0 | 1 | latch | Z > – applies_to < inputs | outputs | both >
参数 | 简要说明 |
isolation_name | 它只是隔离策略的名称,因此用户可以给出任何名称。 |
–domain_name | 应用策略的域。 |
–isolation power_net net_name | isolation_ground_net net_name| isolation_power_net net_name -isolation_ground_net net_name| no_sisolation |
用于提供此隔离策略推断的隔离逻辑的supply net。 |
–elements list | 应用策略的端口/net列表。 |
–clamp_value<0|1 | latch|Z> | 列表中提到的端口将被钳位到的值。默认值为0。 |
–applies_to<inputs|outputs|both> | 域的输入端口或输出端口或两者都是隔离的。默认为输出。 |
set_isolation_control: 它用于指定先前定义的隔离策略的控制信号。
语法:
set_isolation_control isolation_name
– domain domain_name
– isolation_signal signal_name
– isolation_sense < high | low >
– isolation < self | parent | sibling | fanout | automatic >
参数 | 简要说明 |
isolation_name | 相应的隔离策略名称。 |
–domain_name | 应用策略的域。 |
–isolation_signal signal_name | 导致指定元件驱动其箝位值的控制信号。 |
–isolation_sense<high|low> | 它指定隔离控制信号为高时还是低时启用隔离。 |
–isolation <self|parent|skill|fanout|automatic> | 隔离单元位于逻辑层次结构中的位置。默认为automatic |
set_level_shifter:它用于为从一个电压域到另一个电压区域的信号指定电平移位器策略。你可以在这里查看为什么我们需要电平转换器。
语法:
set_level_shifter level_shifter_name
– domain domain_name
– elements list
– applies_to < inputs | outputs | both >
– threshold value
– rule < low_to_high | high_to_low | both >
– location < self | parent | sibling | fanout | automatic >
论证简要说明
参数 | 简要说明 |
level_shifter_name | 它只是电平转换器策略的名称,因此用户可以给出任何名称。 |
–domain_name | 应用策略的域。 |
–elements list | 应用策略的端口/net列表。 |
–applies_to<inputs|outputs|both> | 域的输入端口、输出端口或两者都是电平移位的。默认为both |
– threshold value | 用于确定何时需要电平移位器的电压(V)阈值。默认值为0。 |
– rule < low_to_high | high_to_low | both > | 需要哪种类型的电平移位器。默认为both。 |
– isolation < self | parent | sibling | fanout | automatic > | 电平移位器位于逻辑层次结构中的位置。默认为automatic。 |
set_retention:它用于指定域中的元素,以便在电源门控时保留其值。
语法:
set_retention retention_name
– domain domain_name
– retention_power_net net_name
– retention_ground_net net_name
– elements list
参数 | 简要说明 |
retention_name | 它只是保留策略的名称,因此用户可以给出任何名称。 |
– domain domain_name | 应用策略的域。 |
– retention_power_net net_name | 用于提供此保留策略推断的保留逻辑的supply net。 |
– retention_ground_net net_name |
用于提供此保留策略推断的保留逻辑的接地net。 |
– elements list | 应用策略的寄存器列表。 |
set_retention_control:它用于指定先前定义的保留策略的控制信号。
语法:
set_retention_control retention_name
– domain domain_name
– save_signal signal < high | low >
– restore_signal signal < high | low >
参数 | 简要说明 |
retention_name | 相应的保留策略名称。 |
– domain domain_name | 应用策略的域。 |
– save_signal signal < high | low > | 使寄存器在电源门控之前保存其状态的控制信号。如果它是一个低电平有效或高电平有效的信号。 |
– restore_signal signal < high | low > | 在电源恢复后使寄存器恢复其保存状态的控制信号。如果它是一个低电平有效或高电平有效的信号。 |
注意:通常情况下,save_signal和restore_signal是相同的,但具有不同的活动电平。这个相同的信号连接到这里讨论的保持单元的SLEEP端口。
add_port_state:它用于指定供应net或端口可以接受的值。这些值被称为端口状态。
语法:
add_port_state port_name
– state(s) {name < voltage | off >}
参数 | 简要说明 |
port_name | 已经定义的端口的名称,我们正在指定其状态。 |
– state(s) {name < voltage | off >} | 用户定义的状态名称及其值。 |
create_pst:它用于创建电源状态表,其中包含电源net的特定顺序。电源状态表基本上定义了在设计运行期间可以同时存在的状态组合。
语法:
create_pst table_name
– supplies list
参数 | 简要说明 |
table_name | 用户定义的电源状态表名称。 |
– supplies list | 要包含在设计的每个电源状态中的电源net或端口的列表。 |
add_pst_state:它用于为设计的一种可能状态定义每个supply net的状态。
语法:
参数 | 简要说明 |
state_name |
用户定义的电源状态名称。 |
– pst table_name | 应用此状态的电源状态表。 |
– state supply_states | supply net状态名称列表[在add_port_state命令中定义],按与create_pst命令中列出的-supplies相同的顺序列出。 |
UPF 举例
UPF是统一电源格式的缩写,统一电源格式是用于指定电源意图的IEEE标准。在本文中,我们将了解如何为设计中给定的电源需求编写UPF。
考虑如下所示的设计——
图1:设计的逻辑层次结构
给定电源意图
主要有3个电源领域——
•aon_wrapper内部的逻辑(但不在aon_pgd_wrapper内)始终打开。
•pgd_wrapper内部的逻辑可以进行电源门控。
•aon_pgd_wrapper内部的逻辑可以进行电源门控,但在pgd_wraper通电时不会进行电源门控。
有两个电压域——
•aon_wrapper内部逻辑[但不在aon_pgd_wrapper内]和pgd_wraper内部逻辑的电源电压为0.9V。
•aon_pgd_wrapper内部逻辑的电源电压为1.1V。
有两个寄存器——reg A和reg B。reg A的状态需要保持在电源门控状态。
有六个信号sig1-sig6进出不同的逻辑,如图1所示。
现在让我们为给定的电源意图编写UPF——
首先,我将建议您了解这里讨论的一些重要的upf命令语法。
# Create Power Domains
create_power_domain pd_top -include_scope
create_power_domain pd_aon -elements {aon_wrapper}
create_power_domain pd_gated -elements {pgd_wrapper}
create_power_domain pd_gated_aon -elements {{aon_wrapper/aon_pgd_wrapper}}
# Create Supply Ports
create_supply_port VCCL -direction in -domain pd_top
create_supply_port VCCH -direction in -domain pd_top
create_supply_port GND -direction in -domain pd_top
# Create Supply Nets
create_supply_net VCCL -domain pd_top
create_supply_net VCCH -domain pd_top
create_supply_net GND -domain pd_top
create_supply_net VCCL -domain pd_aon -reuse
create_supply_net GND -domain pd_aon -reuse
create_supply_net VCCH -domain pd_gated_aon –reuse
create_supply_net VCCH_gated -domain pd_gated_aon
create_supply_net GND -domain pd_gated_aon -reuse
create_supply_net VCCL -domain pd_gated -reuse
create_supply_net VCCL_gated -domain pd_gated
create_supply_net GND -domain pd_gated -reuse
# Connect Supply Nets with corresponding Ports
connect_supply_net VCCL -ports VCCL
connect_supply_net VCCH -ports VCCH
connect_supply_net GND -ports GND
# Establish Connections
set_domain_supply_net pd_top -primary_power_net VCCL -primary_ground_net GND
set_domain_supply_net pd_aon -primary_power_net VCCL -primary_ground_net GND
set_domain_supply_net pd_gated_aon -primary_power_net VCCH_gated -primary_ground_net GND
set_domain_supply_net pd_gated -primary_power_net VCCL_gated -primary_ground_net GND
# Shut-Down Logic for pgd_wrapper & aon_pgd_wrapper
create_power_switch sw_pgd_wrapper \
-domain pd_gated \
-input_supply_port “sw_VCCL VCCL ” \
-output_supply_port “sw_VCCL_gated VCCL_gated” \
-control_port “sw_pgd_en aon_wrapper/pmu/pgd_en” \
-on_state “SW_PGD_ON sw_VCCL {!sw_pgd_en}”
create_power_switch sw_aon_pgd_wrapper \
-domain pd_gated_aon \
-input_supply_port “sw_VCCH VCCH ” \
-output_supply_port “sw_VCCH_gated VCCH_gated” \
-control_port “sw_aon_pgd_en aon_wrapper/pmu/aon_pgd_en” \
-on_state “SW_AONPGD_ON sw_VCCH {!sw_aon_pgd_en}”
# Isolation strategy
set_isolation isol_clamp1_sig_from_pgd \
-domain pd_gated \
-isolation_power_net VCCL \
-isolation_ground_net GND \
-clamp_value 1 \
-elements {pgd_wrapper/sig2}
set_isolation_control isol_clamp1_sig_from_pgd \
-domain pd_gated \
-isolation_signal aon_wrapper/pmu/isol_pgd_en \
-isolation_sense low \
-location parent
set_isolation isol_clamp0_sig_from_pgd \
-domain pd_gated \
-isolation_power_net VCCL \
-isolation_ground_net GND \
-clamp_value 0 \
-elements {pgd_wrapper/sig4}
set_isolation_control isol_clamp0_sig_from_pgd \
-domain pd_gated \
-isolation_signal aon_wrapper/pmu/isol_pgd_en \
-isolation_sense low \
-location parent
set_isolation isol_sig_from_aonpgd \
-domain pd_gated_aon \
-isolation_power_net VCCH \
-isolation_ground_net GND \
-clamp_value 1 \
-elements {aon_wrapper/aon_pgd_wrapper/sig5}
set_isolation_control isol_sig_from_aonpgd \
-domain pd_gated_aon \
-isolation_signal aon_wrapper/pmu/isol_aonpgd_en \
-isolation_sense low \
-location parent
# Level Shifter strategy
set_level_shifter LtoH_sig_to_aonpgd \
-domain pd_gated_aon \
-applies_to inputs \
-rule low_to_high \
-location self
set_level_shifter HtoL_sig_from_aonpgd \
-domain pd_gated_aon \
-applies_to outputs \
-rule high_to_low \
-location self
# Retention strategy
set_retention pgd_retain \
-domain pd_gated \
-retention_power_net VCCL \
-retention_ground_net GND \
-elements {pgd_wrapper/regA}
set_retention_control pgd_retain \
-domain pd_gated \
-save_signal {aon_wrapper/pmu/ret_en high} \
-restore_signal {aon_wrapper/pmu/ret_en low}
# Create Power State Table
add_port_state VDDH \
-state {HighVoltage 1.1}
add_port_state VDDL \
-state {LowVoltage 0.9}
add_port_state sw_aon_pgd_wrapper/sw_VCCH_gated \
-state {HighVoltage 1.1} \
-state {aonpgd_off off}
add_port_state sw_pgd_wrapper/sw_VCCL_gated \
-state {LowVoltage 0.9} \
-state {pgd_off off}
create_pst pwr_state_table \
-supplies {VCCH VCCL VDDH_gated VDDL_gated}
add_pst_state PRE_BOOT \
-pst pwr_state_table \
-state { HighVoltage LowVoltage aonpgd_off pgd_off}
add_pst_state AONPGD_ON \
-pst pwr_state_table \
-state { HighVoltage LowVoltage HighVoltage pgd_off}
add_pst_state PGD_ON \
-pst pwr_state_table \
-state { HighVoltage LowVoltage aonpgd_off LowVoltage}
add_pst_state ALL_ON \
-pst pwr_state_table \
-state { HighVoltage LowVoltage HighVoltage LowVoltage}