电源集句柄(Supply Set Handles)是为电源域隐式创建的抽象电源集。新创建的电源域为其主电源集、默认隔离电源集和默认保持电源集拥有电源集句柄。这些电源集句柄允许在为电源域创建任何电源集、电源网络和电源端口之前进行设计的合成。在这样一个设计可以物理实现之前,其电源集句柄必须被细化,或者与实际的电源集关联;并且这些电源集必须被细化,以便它们与实际的电源网络关联。
使用create_power_domain命令创建新的电源域时,隐式地创建了以下电源集句柄:
• primary(主电源) – 电源域的主电源集。
• default_isolation(默认隔离) – 应用于此电源域的任何隔离策略的默认隔离电源集,当隔离策略中未特别指定隔离电源或地线时使用。
• default_retention(默认保持) – 应用于此电源域的任何保持策略的默认保持电源集,当保持策略中未特别指定保持电源或地线时使用。
例如,当使用create_power_domain命令创建一个名为PD1的电源域时,该命令隐式地创建了电源集句柄、PD1.default_isolation和PD1.default_retention,提供了图34中显示的隐式电源供应网络。
图34 隐式电源供应网络
Primary Supply Set Handle
create_power_domain命令自动为该域创建一个主电源集句柄。电源域中的所有单元都被认为是连接到该电源集句柄的,因此它作为该域的默认主电源。
例如,考虑以下两个create_power_domain命令:
create_power_domain Top_PD -include_scope
create_power_domain BLOCK_PD -elements {myBlock}
第一个命令创建了名为Top_PD的电源域和一个名为primary的电源集句柄。电源域中的所有单元都被认为是连接到Top_PD.primary电源集的。主电源网络是Top_PD.primary.power,主地线网络是Top_PD.。
第二个命令创建了一个名为BLOCK_PD的电源域,它包括块myBlock,并为新域创建了一个名为primary的电源集句柄。myBlock块不再属于Top_PD电源域。myBlock中的所有下级单元都被认为是连接到BLOCK_PD.primary电源集的。在BLOCK_PD电源域内,主电源网络是BLOCK_PD.,主地线网络是BLOCK_PD.。
Isolation Supply Set Handle
create_power_domain命令自动为该域创建一个默认的隔离电源集句柄。这个电源集句柄用于任何没有明确指定隔离电源供应的隔离策略。
例如,考虑以下命令:
create_power_domain TOP
create_power_domain BlockPD -elements Block1
set_isolation blk_iso_out -domain BlockPD \
-clamp_value 1 -applies_to outputs
set_isolation_control blk_iso_out -domain BlockPD \
-isolation_signal iso_ctrl -isolation_sense high -location parent
第一个create_power_domain命令创建了TOP电源域,它包括当前作用域中的所有元素,并且还创建了一个名为default_isolation的电源集句柄。第二个create_power_domain命令创建了BlockPD电源域,它包括Block1块,并且还为该域创建了一个名为default_isolation的电源集句柄。
set_isolation命令为BlockPD电源域创建了一个输出隔离策略。set_isolation_control命令定义了隔离控制信号和隔离单元的位置策略。set_isolation命令没有指定隔离电源集或电源网络,而set_isolation_control命令将位置设置为parent,因此输出隔离单元使用父域的默认隔离电源集句柄来驱动隔离单元的扇出,如图35所示。
图35 默认隔离电源供应策略
策略隐式地将隔离单元连接到默认隔离电源集句柄的电源。这些电源是TOP.default_isolation.power和TOP.default_isolation.ground。没有必要使用set_isolation命令的-isolation_power_net、-isolation_ground_net或-isolation_supply选项。
或者,在set_isolation命令中,可以显式指定用于隔离源和汇的电源集。例如,
create_power_domain TOP
create_power_domain BlockPD -elements Block1
set_isolation blk_iso_out -domain BlockPD \
-source -sink
-clamp_value 1 -applies_to outputs
set_isolation_control blk_iso_out -domain BlockPD \
-isolation_signal iso_ctrl -isolation_sense high -location self
注意:
Synopsys工具允许在同一个set_isolation命令中将-applies_to选项与-source和-sink选项一起使用。然而,这种用法在IEEE 1801标准中是不受支持的。因此,如果计划与第三方工具一起使用UPF文件,应该使用指定隔离策略的源端、目的端和适用方面的替代方法。
在这个例子中,由于隔离位置被指定为self,隔离策略要求隔离单元位于BlockPD而不是父级TOP中。否则,隔离策略与前面图35中显示的例子相同。
Retention Supply Set Handle
create_power_domain命令会自动为该域创建一个默认的保持电源集句柄。这个电源集句柄用于任何没有明确指定保持电源供应的保持策略。
例如,考虑以下命令:
create_power_domain TOP
create_power_domain BlockPD -elements Block1
set_retention block_ret -domain BlockPD
set_retention_control block_ret -domain BlockPD \
-save_signal {Block1/all_save high} \
-restore_signal {Block1/all_restore low}
第一个create_power_domain命令创建了TOP电源域,它包括当前作用域中的所有元素。第二个create_power_domain命令创建了BlockPD电源域,它包括Block1块,并且还为该域创建了一个名为default_retention的电源集句柄。
set_retention命令为BlockPD电源域创建了一个保持策略。set_retention_control命令为策略指定了保存和恢复信号。set_retention命令没有指定保持电源集或电源网络,因此输出保持单元使用默认的保持电源集句柄,如图36所示。
图36 默认保持电源供应
策略隐式地将保持单元连接到默认保持电源集句柄的电源。这些电源是BlockPD.default_retention.power和BlockPD.default_retention.ground。没有必要使用set_retention命令的-retention_power_net、-retention_ground_net或-retention_supply选项。
User-Specified Supply Set Handles
除了为主电源、隔离和保持隐式创建的电源集句柄之外,还可以使用create_power_domain命令的-supply选项创建自己的电源集句柄。例如,
prompt> create_power_domain PD1 -elements {U1 U2} -supply {my_handle}
这会创建一个名为my_handle的电源集句柄。在这个例子中,可以引用电源集作为PD1.my_handle,并且引用电源网络作为PD1.my_handle.power和PD1.my_handle.ground。例如,
set_retention block_ret -domain BlockPD \
-retention_supply PD1.my_handle
或者
set_retention block_ret -domain BlockPD \
-retention_power_net PD1.my_handle.power \
-retention_ground_net PD1.my_handle.ground
以下是为特殊目的保留的电源集句柄名称:
• primary(主电源) – 电源域的主电源集。
• default_isolation(默认隔离) – 电源域的默认隔离电源集。
• default_retention(默认保持) – 电源域的默认保持电源集。
• extra_supplies_#(其中#代表一个整数) – 可用于电平转换器插入和始终开启综合的额外电源。
• extra_supplies ""(空字符串) – 导致电源域不使用任何额外的电源。
防止自动创建Supply set handles
如果不希望为每个新的电源域自动创建电源集句柄,在创建任何电源域之前执行以下命令:
prompt> set_app_var upf_create_implicit_supply_sets false
将此变量设置为false后,除非明确使用-supply选项,否则create_power_domain命令不会创建primary(主电源)、default_isolation(默认隔离)和default_retention(默认保持)电源集句柄。
注意:
此选项在IC Compiler II或Fusion Compiler工具中不可用。
创建第一个电源域后,该变量变为只读,无法更改。因此,需要在创建任何电源域之前设置该变量。
如果想防止某些电源域自动创建电源集句柄,但不是其他电源域,将upf_create_implicit_supply_sets变量保持为true。相反,使用set_design_attributes命令的suppress_iss属性列出不想使用的电源域。例如,
prompt> set_design_attributes -attribute suppress_iss "myBLOCK_PD"
这个例子防止了名为myBLOCK_PD的电源域自动创建电源集句柄。当使用电源集句柄的较新block和不使用电源集句柄的较旧block时,这很有用。要将电源连接到这些较旧block的电源端口,使用connect_supply_net命令。例如,
set_design_attributes -attribute suppress_iss "myBLOCK_PD"
# 电源域定义
create_power_domain Top_PD -supply {aolow}
create_power_domain myBLOCK_PD -elements {myBlock}
# 加载块UPF,对于myBLOCK_PD域没有电源集句柄
load_upf -scope myBlock
# 连接电源集到块端口
connect_supply_net Top_PD. –ports Block/AOVDD
connect_supply_net Top_PD. –ports Block/VSS
电源集句柄细化
在设计可以物理实现(放置和布线)之前,必须对电源集句柄进行细化,以便每个句柄有效地连接到一个电源集。细化是将电源集函数与句柄关联的过程。反过来,电源集函数本身也必须细化为实际的电源和地线电源网络。
可以使用以下命令来细化电源集句柄:
create_supply_set
associate_supply_set
create_power_domain
set_domain_supply_net
当出于此目的使用create_supply_set命令时,它为句柄创建一个电源集,并将该电源集直接与实际的电源和地线电源网络关联。另一方面,associate_supply_set命令在不将电源细化为实际的电源和地线电源网络的情况下,创建一个电源集句柄和电源集(或可能是另一个电源集句柄)之间的关联。电源集向电源网络的最终细化可以稍后完成,如在“细化电源集到电源网络”中所述。当使用create_power_domain命令创建电源域时,也可以立即进行关联。对于主电源集句柄,还可以使用set_domain_supply_net命令。
使用create_supply_set进行句柄细化
要将电源集句柄直接细化到电源网络,使用create_supply_set命令。例如,
create_supply_set \
-function {power VDD1} \
-function {ground VSS1) \
-update
这为电源集句柄创建了一个电源集,并将该电源集细化为特定的电源网络。由于电源集句柄已经存在,所以在命令中必须使用-update选项。
-function选项的参数必须是实际的电源网络,而不是另一个电源集的函数。例如,以下间接细化是不允许的:
create_supply_set SS1
create_supply_set \
-function {power } ;不允许
-function {ground } ;不允许
-update
然而,可以通过使用associate_supply_set命令来实现间接细化。
使用associate_supply_set进行句柄细化
要创建电源集句柄和电源集之间的关联,请使用associate_supply_set命令。例如,
create_supply_set SS1
create_power_domain PD1
associate_supply_set SS1 -handle
associate_supply_set命令有效地在SS1电源集和电源集句柄之间创建了一个连接。在进行物理实现之前,SS1电源集必须细化为实际的电源网络。
每个电源集句柄只能关联一次,因此在执行associate_supply_set命令之前,请确保关联是正确的。
在进行关联时,电源集句柄必须在电源集的作用域内。换句话说,电源集句柄必须存在于创建电源集的层次级别或更低级别。电源集句柄可以与更高级别的(但不能是更低级别的)电源集关联。
可以通过一个或多个其他电源集句柄间接创建关联。例如,
create_supply_set SS2
associate_supply_set SS2 –handle PD1.default_isolation
associate_supply_set PD1.default_isolation \
–handle PD1.default_retention
在这个例子中,PD1的默认保持策略句柄被细化为PD1的默认隔离策略,后者又细化为SS2电源集。在这种情况下,隔离和保持策略都被细化为电源集SS2,并共享相同的电源特性。
多个电源集句柄可以直接或间接地细化为相同的电源网络。然而,所有的细化最终必须解析为实际的电源集,因此不允许循环细化。同样,不允许从电源集到电源集句柄的逆向关联。参见图37。
图37 多个电源集句柄关联到同一个电源集
使用create_power_domain进行句柄细化
可以通过使用create_power_domain命令的-supply选项,在创建电源域的同时将电源集句柄与电源集关联起来。例如,
create_supply_set SS1
create_power_domain PD1 –elements {U1 U2} -supply {primary SS1}
或者,可以先创建电源域,然后稍后通过再次执行带有-update选项的create_power_domain命令,将电源集句柄细化为特定的电源集。例如,
create_power_domain PD1 -elements {U1 U2}
...
create_supply_set SS1
create_power_domain PD1 -supply {primary SS1} -update
-update选项只能与-supply选项一起使用,并且仅用于将电源集句柄与电源集关联。在更新中使用-elements选项是不必要的(或不允许的)。同样,不能更改电源集句柄的关联,因此在执行更新之前,请确保关联是正确的。
以下是对您提供的文本的翻译:
电源集句柄使用示例
以下示例展示了电源集句柄的使用。
## 电源域定义
create_power_domain TopPD -supply {aolow}
create_power_domain PD1 -elements {Block1}
# 关联
associate_supply_set PD1.default_isolation \
-handle PD1.default_retention
associate_supply_set \
-handle PD1.default_isolation
# 电源状态定义
add_power_state \
-state TOP_LV {-supply_expr {power == `{FULL_ON, 0.7}}}
add_power_state Top_PD.aolow \
-state GND {-supply_expr {ground == `{FULL_ON, 0.0}}}
...
# 隔离和保持策略
set_isolation iso1 -domain PD1 ...
set_isolation_control iso1 -domain PD1 ...
set_retention ret1 -domain PD1 ...
set_retention_control ret1 -domain PD1 ...
这个脚本创建了图38中显示的电源域、电源供应集句柄以及隔离和保持策略。
图38 电源集句柄使用示例
第一个create_power_domain命令创建了*电源域TopPD,并创建了一个名为aolow(始终开启的低电平)的用户定义电源集句柄。
两条associate_supply_set命令将电源域PD1的默认保持和隔离电源集句柄与*域的aolow电源集句柄关联起来。第一条命令将PD1.default_retention句柄与PD1.default_isolation句柄关联,而第二条命令将PD1.default_isolation句柄与句柄关联。
在进行物理实现之前,电源集句柄必须细化为实际的电源网络。
由于电源集句柄PD1.default_retention、PD1.default_isolation和之间的关联,这三个句柄代表相同的电源和地线供应,并共享相同的电源状态定义。可以使用这三个电源集句柄名称中的任何一个来引用相同的电源集。
由于TopPD和PD1域都是在同一作用域中创建的,因此TopPD的电源集可用于PD1域。两者都是在最顶层创建的,尽管PD1的范围是较低级别的块。
以下示例展示了一个不允许的关联。
## 电源域定义
create_power_domain TopPD -supply {aolow}
set_scope Block1
create_power_domain PD1
set_scope ..
# 关联
associate_supply_set Block1/PD1.default_isolation \
-handle PD1.default_retention ;错误,不允许
associate_supply_set \
-handle Block1/PD1.default_isolation ;允许
目标电源集(或目标电源集句柄)必须位于-handle参数指定的电源集句柄的作用域内或之上。
当使用create_power_domain命令的-scope选项指定较低级别的作用域时,同样的情况适用:
## 电源域定义
create_power_domain TopPD -supply {aolow}
create_power_domain PD1 -elements Block1 -scope Block1
# 关联
associate_supply_set Block1/PD1.default_isolation \
-handle PD1.default_retention ;错误,不允许
associate_supply_set \
-handle Block1/PD1.default_isolation ;允许
在Design Compiler层次化流程中的电源集句柄
以下示例演示了在层次化流程中使用电源集句柄的方法,使用characterize命令对块实例的电源供应环境进行表征,以及使用propagate_constraints命令将电源供应约束从较低层级传播到顶层。
假设使用以下脚本指定设计的电源意图:
create_power_domain TopPD -include_scope
create_power_domain PD1 -elements I_REG_FILE
associate_supply_set -handle TopPD.default_isolation
set_isolation block_iso_out -domain PD1 -clamp_value 1 \
-sink -isolation_supply TopPD.default_isolation
set_isolation_control block_iso_out -domain PD1 \
-isolation_signal enable_signal2 -isolation_sense high -location self
set_level_shifter myLS -domain PD1 -location self
这创建了*电源域TopPD和另一个电源域PD1,用于较低层级块实例I_REG_FILE。它还为PD1设置了隔离和电平转换器策略。
TopPD.default_isolation电源集与电源集关联,以便这两个电源集合并为一个单独的组。在顶层作用域中,有两个组:(还包括)和,即I_REG_FILE块的主电源。
在Design Compiler的GUI工具Design Vision中,可以以原理图形式查看当前的UPF电源意图,如图39所示。要显示图表,请启动GUI(gui_start),然后选择Power > UPF Diagram > New UPF Diagram View。或者,您可以选择Power > Visual UPF,然后点击Diagram标签。
图39 初始电源意图示意图
在这一点上,可以使用characterize命令来表征I_REG_FILE块的电源供应环境:
prompt> list_instances
...
I_REG_FILE (REG_FILE)
...
prompt> characterize I_REG_FILE
正在表征设计'REG_FILE'中的单元'I_REG_FILE'
I_REG_FILE/
I_REG_FILE/PD1.default_isolation
I_REG_FILE/PD1.default_retention
1
prompt> save_upf
当对块进行表征时,Design Compiler工具会自动为每个电源集句柄的电源和地线功能创建电源网络和电源端口。save_upf命令写出的UPF文件显示了工具插入的命令(在以下示例中以蓝色突出显示):
#由Design Compiler生成...
create_power_domain TopPD -include_scope
create_power_domain PD1 -elements I_REG_FILE
associate_supply_set -handle TopPD.default_isolation
create_supply_port I_REG_FILE/TopPD_primary_power_port -direction in
create_supply_port I_REG_FILE/TopPD_primary_ground_port -direction in
create_supply_port I_REG_FILE/PD1_primary_power_port -direction in
create_supply_port I_REG_FILE/PD1_primary_ground_port -direction in
create_supply_port I_REG_FILE/PD1_default_isolation_power_port -direction in
create_supply_port I_REG_FILE/PD1_default_isolation_ground_port -direction in
create_supply_port I_REG_FILE/PD1_default_retention_power_port -direction in
create_supply_port I_REG_FILE/PD1_default_retention_ground_port -direction in
connect_supply_net -ports
I_REG_FILE/TopPD_primary_power_port
connect_supply_net -ports
I_REG_FILE/TopPD_primary_ground_port
connect_supply_net -ports
I_REG_FILE/PD1_primary_power_port
connect_supply_net -ports
I_REG_FILE/PD1_primary_ground_port
connect_supply_net PD1.default_isolation.power \
-ports I_REG_FILE/PD1_default_isolation_power_port
connect_supply_net PD1.default_isolation.ground \
-ports I_REG_FILE/PD1_default_isolation_ground_port
connect_supply_net PD1.default_retention.power \
-ports I_REG_FILE/PD1_default_retention_power_port
connect_supply_net PD1.default_retention.ground \
-ports I_REG_FILE/PD1_default_retention_ground_port
set_isolation block_iso_out -domain PD1 -isolation_supply \
TopPD.default_isolation -clamp_value 1 -sink
set_isolation_control block_iso_out -domain PD1 -isolation_signal \
enable_signal2 -isolation_sense high -location self
set_port_attributes -ports {I_REG_FILE/TopPD_primary_power_port \
I_REG_FILE/TopPD_primary_ground_port I_REG_FILE/PD1_primary_power_port \
I_REG_FILE/PD1_primary_ground_port \
I_REG_FILE/PD1_default_isolation_power_port \
I_REG_FILE/PD1_default_isolation_ground_port \
I_REG_FILE/PD1_default_retention_power_port \
I_REG_FILE/PD1_default_retention_ground_port} \
-attribute snps_derived TRUE
set_level_shifter myLS -domain PD1 -location self
set_port_attributes命令为新创建的端口设置了snp_derived端口属性为TRUE。这个属性是一个指示器,表明端口是由工具而不是用户创建的。工具可以在后期优化中移除这些端口。
在Design Vision GUI中,可以看到被表征的块以及添加的电源网络和电源端口,如图40所示。
图40 表征后的电源意图图
在块表征完成后,可以使用propagate_constraints命令将电源供应约束从较低层级传播到顶层:
prompt> propagate_constraints -design REG_FILE
# Propagate Constraints from cell I_REG_FILE/ (REG_FILE) #
Info: Merging domains PD1 and I_REG_FILE/PD1
Removing Supply Set I_REG_FILE/TopPD_primary
Removing Supply Set I_REG_FILE/PD1_primary
Removing Supply Set I_REG_FILE/PD1_default_isolation
Removing Supply Set I_REG_FILE/PD1_default_retention
1
约束传播协调顶层和块级电源集,并将任何重复的电源集合并。它使用每个电源集句柄组的第一个成员,恢复策略命令中使用的电源集句柄名称。从组中选择的名称不一定是块的原始电源集句柄。