IEEE1801 UPF 编写指南-设计

时间:2024-11-18 07:00:19

动态电压频率缩放(DVFS)通过在不需要峰值性能时降低电压和频率来减少芯片中的功耗。

使用DVFS的设计可以被视为在多个设计模式下运行的MSV(多电源电压)设计的特例。

在纯MSV设计中,设计的不同部分在不同电压下运行,并且这些部分保持在其各自的操作电压下运行。

在DVFS设计中,某些部分可以根据设计模式动态更改为其他电压,甚至可以关闭。

因此,DVFS设计必须在不同设计模式下满足不同的约束条件。

DVFS设计的要求

DVFS设计需要可变的电源供应,该供应能够以最小的转换能量损失和快速的电压瞬态响应生成所需的电压水平。在缩放电压时,必须相应地缩放频率以满足信号传播延迟要求。电源调度器可以智能地计算执行各种应用程序所需的适当频率和电压水平。

图3-1 DVFS设计示例

dtmf_recvr_core设计如图3-1所示,"DVFS设计示例",包含一些其他模块,为了简化这里没有展示。然而,它们都与设计的*别在同一电压下运行。

最顶层设计的电压会根据设计请求的功能进行缩放。如果处理速度很关键,则使用较高的电压;如果处理速度不是关键,电压会与时钟频率一起动态降低,以节省电力。对于此设计,我们假设电压供应是由芯片外部动态控制的。最顶层和在同一电压下运行的模块的输入电源信号是VDD。

此处使用的设计同时采用了DVFS和PSO方法。

dtmf_recvr_core设计还包括:

- TDSP_CORE_INST模块

  这个数字信号处理模块运行在较低的电压下,因为它的处理速度并不关键。当该模块不需要运行时,它会关闭。

  该模块的电源输入是Vdd_TDSP_R。clk_enable信号在模块关闭时禁用时钟。

- PLLCLK_INST模块

  这个模块用于生成设计中所有模块所需的时钟。它有一个参考时钟ref_clk,用于生成所有其他时钟。

  由于设计使用了两种操作电压,因此创建了两个时钟信号:

  - low_clk时钟信号恒定频率较低,供给TDSP_CORE_INST模块。

  - var_clk时钟信号供给最顶层设计和其他模块,并且可以根据操作电压变化其时钟频率。

  freq_ctrl信号确保用于最顶层设计的var_clk信号的频率与电压成正比。

  注意:由于这个模块是模拟模块,需要在恒定电压下运行以确保正确功能。因此,指定了专用的电源输入Avdd。

- pm_inst模块

  这个模块为芯片生成所有电源控制信号,并与设计的*别在同一电压下运行。

在DVFS设计中,一组逻辑模块(层次实例)和叶实例使用相同的主电源,并且其电压和频率可以同时改变或关闭,它们属于同一电源域。

图3-1所示的"DVFS设计示例"具有以下电源域:

- PLLCLK_INST模块是设计中唯一以恒定电压0.99V运行的模块。这个模块属于电源域PLL。

- TDSP_CORE_INST模块运行在0.792V电压下,并且是唯一在某些时候关闭的模块。这个模块属于电源域TDSPCORE。

- pm_inst模块、最顶层设计和其余模块始终供电,但其运行电压和频率可以改变。它们属于电源域AO。

电源域PLL和AO永远不会关闭电源。它们被称为不可切换域。

电源域TDSPCORE可以关闭电源,称为可切换域。

设计的一种稳定状态,其中一些电源域开启而一些电源域关闭,称为电源状态。在电源状态下,每个电源域在特定电压和开关状态下运行。表3-1,"电源状态",显示了dtmf_recvr_core设计的三种电源状态下每个电源域的工作电压。此表中显示的电压对应于最坏情况电压。

表3-1 电源状态

为了在设计中运行在不同电压的部分之间传递信号,需要电平转换器。

为了防止关闭电源的电源域中的未知值传播到保持通电的域,需要隔离单元。这些隔离单元通常放置在关闭电源的电源域的边界上,或者是接收关闭电源信号的域的输入边界。然而,根据需要,也可以在中间域边界插入隔离单元。

为了帮助关闭电源的块恢复正常操作,可以使用状态保持单元来保持一些顺序单元在关闭电源之前的先前状态。由于这些单元保留了它们的状态,它们在电源周期后不需要被重置或重新配置。这允许设备更快地恢复正常操作,在某些情况下,可以从其处理中断的地方继续。

对于可切换域,需要指示电源是如何连接和断开门电路的。

- 对于内部可切换域,必须添加电源开关逻辑。

- 对于外部可切换域,电源开关逻辑不是芯片的一部分,因此可能没有控制信号。在IEEE 1801中,`add_power_state`命令将定义状态,以指示哪些域可以关闭电源。在仿真中,测试台将驱动可切换引脚的电压。

在这个示例中,我们假设电源域TDSPCore是一个内部可切换域。

使用特殊的控制信号来控制供电电压、关闭电源域、启用状态保持、在电源域上电时恢复寄存器的状态,以及控制电源开关逻辑的工作。表3-2,“控制电源域的信号”,显示了这个设计示例中使用的信号。

表3-2 控制电源域的信号

当一个域是可切换的时候,它通过内部或外部电源开关逻辑从另一个电源域获取电力。

在这个例子中,电源域TDSPCore从电源域AO获取其电力。

一方面,电源域中的大多数实例由相同的电源供电。对于可切换域,属于该域的实例的主电源和地网络提供了单元的电源和地引脚(跟随引脚)的电力。

另一方面,隔离单元和状态保持单元由多个电源供电。这些特殊的低功耗实例可以有两组电源和地引脚,并且每组的供电集可以在IEEE 1801文件中明确定义。在使用`create_power_domain`命令指定电源域之后,`-isolation_supply_set`选项定义了隔离单元的默认附加供电,而`-retention_supply_set`选项定义了保持单元的附加供电。这些可以通过使用`set_isolation`和`set_retention`命令定义的明确供电集来覆盖。

3.1 DVFS示例的完整IEEE 1801文件

upf_version 2.0

### 创建电源端口和网络

create_supply_port VDD

create_supply_port VDDL

create_supply_port avdd

create_supply_port VSS

create_supply_net VDD_TDSP

create_supply_net VDD

create_supply_net VDDL

create_supply_net avdd

create_supply_net VSS

### 创建供电组

create_supply_set ss_AO    -function {power VDD}      -function {ground VSS}

create_supply_set ss_TDSP  -function {power VDD_TDSP} -function {ground VSS}

create_supply_set ss_PLL   -function {power avdd}     -function {ground VSS}

create_supply_set ss_VDDL  -function {power VDDL}    -function {ground VSS}

### 创建电源域

create_power_domain AO -include_scope -supply {primary ss_AO}

create_power_domain TDSPCore \

-supply {primary ss_TDSP} \

-elements {TDSP_CORE_INST0}

create_power_domain PLL  \

-supply {primary ss_PLL} \

-elements {PLLCLK_INST}

### 创建隔离和电平转换器策略

set_isolation ISORULE1 \

    -domain TDSPCore \

    -isolation_supply_set \

    -applies_to outputs \

    -isolation_signal {PM_INST/isolation_enable} \

    -isolation_sense low \

    -clamp_value 1 \

    -location parent

set_level_shifter LSRULE_L2H_CORE\

   -domain TDSPCore \

   -applies_to outputs \

   -input_supply_set ss_VDDL\

   -output_supply_set \

   -location parent

set_level_shifter LSRULE_H2L \

    -domain TDSPCore \

    -applies_to inputs \

    -location parent \

    -input_supply_set \

    -output_supply_set

set_level_shifter LSRULE_H2L_PLL \

    -domain PLL \

    -applies_to outputs \

    -location parent \

    -input_supply_set \

    -output_supply_set

set_level_shifter LSRULE_L2H_PLL \

    -domain PLL \

    -applies_to inputs \

    -location parent \

    -input_supply_set \

    -output_supply_set

### 创建保持策略

set_retention SRPG_TDSP \

    -domain TDSPCore \

    -restore_signal {PM_INST/state_retention_restore low} \

    -save_signal {PM_INST/state_retention_save high} \

    -retention_supply_set ss_VDDL

### 创建域级状态

add_power_state \

-state HIGH {-supply_expr {power == `{FULL_ON, 0.99} && ground == `{FULL_ON, 0.0}}  -simstate NORMAL}

add_power_state ss_VDDL \

-state LOW {-supply_expr {power == `{FULL_ON, 0.792} && ground == `{FULL_ON, 0.0}} -simstate NORMAL}

add_power_state \

-state HIGH {-supply_expr {power == `{FULL_ON, 0.99} && ground == `{FULL_ON, 0.0}} -simstate NORMAL} \

-state LOW {-supply_expr {power == `{FULL_ON, 0.792} && ground == `{FULL_ON, 0.0}} -simstate NORMAL}

add_power_state \

-state LOW {-supply_expr {power == `{FULL_ON, 0.792} && ground == `{FULL_ON, 0.0}} -simstate NORMAL} \

-state OFF {-supply_expr {power == `{OFF} && ground == `{FULL_ON, 0.0}} \

-simstate CORRUPT}

### 创建系统级模式

add_power_state AO \

-state FULL {-logic_expr { == HIGH && == LOW && == HIGH && ss_VDDL == LOW}}

add_power_state AO \

-state SLOW {-logic_expr { == LOW && == LOW && == HIGH && ss_VDDL == LOW}} \

-update

add_power_state AO \

-state SLEEP {-logic_expr { == LOW && == OFF && == HIGH && ss_VDDL == LOW}} \

-update

### 创建电源开关、电平转换器、隔离单元

create_power_switch TDSP_sw -domain TDSPCore \

    -output_supply_port {vddo } \

    -input_supply_port {vddi VDDL} \

    -control_port {EN PM_INST/power_switch_enable} \

    -on_state {full_on vddi EN} \

-off_state {off !EN}

3.2 为DVFS设计创建IEEE 1801文件的步骤

本节描述了在为使用DVFS(动态电压频率缩放)方法的设计创建IEEE 1801文件时应包含的信息。本节中始终使用图3-1所示的“DVFS设计示例”。

设计创建和逻辑验证需要以下信息:

- 指定电源域

- 指定电源和地网络以及端口

- 指定供电组

- 将供电组与电源域关联

- 指定每个域允许的电压状态

- 定义系统级电源状态

- 指定创建电平转换器逻辑的规则

- 指定创建隔离逻辑的规则

- 指定创建状态保持逻辑的规则

- 指定电源开关逻辑

- 指定低功耗库单元属性

3.2.1 指定电源域

为了识别设计中在同一电压下操作且可以同时打开或关闭的部分,使用`create_power_domain`命令和以下语法来指定电源域及其关联的实例:

create_power_domain power_domain

[-elements instance_list]

[-exclude_elements instance_list]

[-include_scope]

[-supply {supply_set_handle [supply_set_ref]}]

对于图3-1所示的“DVFS设计示例”:

create_power_domain AO -include_scope

create_power_domain TDSPCore -elements {TDSP_CORE_INST}

create_power_domain PLL -elements {PLLCLK_INST}

在这些命令中:

- `create_power_domain` 用于创建一个新的电源域。

- `-elements` 指定属于电源域的实例列表。

- `-exclude_elements` 指定要从电源域中排除的实例列表。

- `-include_scope` 表示包含整个设计范围。

- `-supply` 指定电源域使用的供电集。

3.2.2 指定电源和地网络以及端口

对于IEEE 1801,可以定义设计中使用的供电端口和网络(电源和地)。供电端口是提供设备电压供应的外部端口。供电网络是将用于连接设计中的域和各个组件的电源引脚的内部网络。一旦指定,这些电源或地供应可以与电源域关联,并作为特殊单元的连接。

使用以下语法定义电源和地供应:

create_supply_port supply_port_name

create_supply_net supply_net_name

然后,如下所示将供电端口连接到供电网络:

connect_supply_net supply_net_name -port supply_port_name

有关这些命令的完整描述,请参阅IEEE 1801-2013规范。

3.2.3 指定供电组

对于IEEE 1801,低功耗意图的一个基本构建块是供电组。由于供电组是供电网络的捆绑,可以使用供电组来简化供电网络与电源域和特殊单元的连接。也就是说,而不是单独指定每个供电网络,可以使用供电组。

使用以下语法为每个电源域定义供电组:

create_supply_set ss_name [-function {supply_function supply_net}]*

供电组定义了一组功能,如主电源和主地,然后定义哪些供电网络提供这些功能。例如,要指定ss_AON的主电源由供电网络VDD提供,地功能由VSS提供,使用以下`create_supply_set`命令:

create_supply_set ss_AO -function {power VDD} -function {ground VSS}

create_supply_set ss_TDSP -function {power VDD_TDSP_CORE} -function {ground VSS}

create_supply_set ss_PLL -function {power Avdd} -function {ground Avss}

在这些命令中:

- `create_supply_set` 创建一个新的供电组。

- `ss_name` 是您为供电组指定的名称。

- `supply_function` 指定供电网络的功能,如电源或地。

- `supply_net` 是提供指定功能的供电网络的名称。

3.2.4 将供电组与电源域关联

要将供电组与电源域关联,请使用`associate_supply_set`命令和以下语法:

associate_supply_set ss_name -handle power_domain.handle

例如:

associate_supply_set ss_AO -handle

此关联的供电组定义了AO域中任何单元的所有主电源和地引脚将连接到在ss_PD1供电组中定义的网络。在这种情况下,这意味着PD1域中的所有主电源引脚将连接到供电网络VDD。

3.2.5 指定每个域允许的电压状态

对于IEEE 1801,建议为每个电源域使用`add_power_state`命令。使用此命令定义每个指定域的允许操作电压。虽然这不是必需的,但它确实为更复杂的设计提供了非常清晰的电源意图定义。

要指定设计中使用的操作电压,请使用`add_power_state`命令。例如:

add_power_state \

    -state HIGH { -supply_expr {power == `{FULL_ON, 0.99} && ground == `{FULL_ON, 0.0}} -simstate NORMAL} \

    -state LOW { -supply_expr {power == `{FULL_ON, 0.792} && ground == `{FULL_ON, 0.0}} -simstate NORMAL}

add_power_state \

    -state ON { -supply_expr {power == `{FULL_ON, 0.792} && ground == `{FULL_ON, 0.0} -simstate NORMAL} \

    -state OFF { -supply_expr {power == `{OFF} && ground == `{FULL_ON, 0.0}} -simstate CORRUPT}

add_power_state \

    -state ON { -supply_expr {power == `{FULL_ON, 0.99} && ground == `{FULL_ON, 0.0}} -simstate NORMAL}

add_power_state ss_TDSPCore_ref \

    -state ON { -supply_expr {power == `{FULL_ON, 0.99} && ground == `{FULL_ON, 0.0}} -simstate NORMAL}

对于域AON,定义了两个状态,HIGH和LOW,它们反映了DVFS的高电压和低电压情况。对于TSDPCore,ON和OFF状态反映了该域的电源关闭能力。

如果设计具有pmos或nmos偏置,您也可以使用`supply_expr`选项来指定这些偏置。

3.2.6 定义系统级电源状态

`add_power_state`命令还可以定义系统级的电源状态。系统级电源状态定义了域之间的交互,而不是每个域允许的状态。在IEEE 1801中,电源状态主要用于验证。在仿真中,电源状态用于覆盖率和创建断言。在低功耗设计检查中,电源状态可以用来验证是否在电源意图中指定了所有必需的电平转换和隔离。

VC引脚是电压控制引脚,用于定义AO域是处于高电压状态还是低电压状态。可以在`add_power_state`命令中使用此信号来区分这些模式。例如:

add_power_state PD1 \

-state full {-logic_expr { VC== 1 && == HIGH && ss_TDSPCore_ref == ON && == ON && == ON }}

add_power_state PD1 \

-state slow {-logic_expr { VC == 0 && == LOW && ss_TDSPCore_ref == ON && == ON && == ON }}

add_power_state PD1 \

-state sleep {-logic_expr { VC == 0 && == LOW && ss_TDSPCore_ref == ON && == ON && == OFF }}

要将名义条件与电源域关联起来,请使用`create_power_mode`命令。上述`add_power_state`命令仅涉及电源域状态。这是系统级电源状态推荐的风格。如果这是一个IEEE 1801层次化流程,`-logic_expr`选项也可以引用其他较低级别的系统状态。通过这种方式,顶层状态可以利用更高级别的抽象,而不需要知道每个域或子系统的所有低级细节。

3.2.7 指定创建电平转换器逻辑的规则

根据技术需求,在传递信号时可能需要电平转换器:

- 从电压较低的电源域到电压较高的电源域。

- 从电压较高的电源域到电压较低的电源域。

在这两种情况下,要创建一个用于电源域之间或一组引脚的电平转换器规则,需要使用`set_level_shifter`命令,其中最常见的选项和值包括:

set_level_shifter strategy_name

    -domain domain_name \

    -applies_to <inputs|outputs|both> \

    -location <parent|self|other> \

    -input_supply_set supply_set_name \

    -output_supply_set supply_set_name \

    -threshold <value|list>

电平转换器策略通常适用于`-applies_to`选项指定的特定域的输入或输出。`-location`选项提供了实现工具应放置电平转换单元的指导:要么在指定域的内部(`self`),要么在层次结构的外部(`other`)。`-threshold`选项定义了何时插入电平转换。也可以使用它来避免在电压差异较小时进行电平转换。

对于图3-1所示的“DVFS设计示例”:

set_level_shifter LS_AON_L2H \

-domain AO -applies_to inputs \

    -location parent \

-input_supply_set \

-output_supply_set

set_level_shifter LS_AON_H2L \

-domain AO -applies_to outputs \

    -location self \

-input_supply_set \

-output_supply_set ss_TDSPCore.primary

set_level_shifter LS_PLL_H2L \

-domain PLL -applies_to outputs \

    -location self \

-input_supply_set \

-output_supply_set

在这些示例命令中:

- `set_level_shifter` 创建了一个电平转换器策略。

- `-domain` 指定了电平转换策略适用的电源域。

- `-applies_to` 指定了策略是应用于输入、输出还是两者。

- `-location` 指定了电平转换单元放置的位置。

- `-input_supply_set` 和 `-output_supply_set` 指定了电平转换器的输入和输出供电集。

- `LS_AON_L2H`、`LS_AON_H2L` 和 `LS_PLL_H2L` 是电平转换器策略的名称,表示从AO域到TDSPCore域的低到高电平转换、从AO域到TDSPCore域的高到低电平转换,以及从PLL域到TDSPCore域的高到低电平转换。

3.2.8 指定创建隔离逻辑的规则

隔离用于防止未知状态从一个关闭电源的域传播到设计中仍然通电的逻辑。在IEEE 1801中,插入隔离单元的电源意图称为隔离策略。隔离策略通常定义了当该引脚的驱动器关闭电源时引脚的值。要定义何时必须添加隔离单元或指定必须隔离哪些引脚,请使用`set_isolation`命令。下面列出了常见的选项和值:

set_isolation strategy_name

    -domain domain_name

    -isolation_signal expression

    [{-applies_to {inputs|outputs|both}}]

    [-elements pin_list |

     -from power_domain_list |

     -to power_domain_list]...

    [-clamp_value { 0 | 1 | latch | Z}]

    [{-isolation_supply_set supply_set_list}]

    [{-location {self other parent fanout}}]

    [-diff_supply_only]

    [{-source <source_domain_name | source_supply_ref>}]

    [{-sink <sink_domain_name | sink_supply_ref>}]

隔离策略始终与电源域相关。默认情况下,它适用于策略中指定域的所有输入和输出,但可以根据多个参数进行过滤。

特定的引脚或实例列表:

- `-diff_supply_only` —— 仅当引脚的驱动器和接收器来自不同的电源供应时才进行隔离。此选项防止不必要的隔离插入。

- `-source/-sink` —— 基于引脚的驱动器或接收器指定约束。这些选项提供了更多的灵活性和对隔离的控制,但在大多数设计中不常见。

隔离的功能由`-clamp_value`和`-isolation_signal`选项定义。

- `-clamp_value`定义了引脚在隔离时应采取的逻辑值。最常见的参数是0、1和latch(保持)。

- `-isolation_signal`定义了隔离的控制信号。当隔离信号激活时,将指定的值驱动到引脚上。

- `-location`指定了在层次结构中应插入隔离的位置。通常,这将在指定域(self)内或指定域外的引脚上(other)。

参见图2-2,“使用位置选项”,以获取插图说明。

`-isolation_supply_set`定义了将连接到插入的隔离单元的次级电源引脚(如果有的话)的电源供应。

通常,需要隔离逻辑来隔离从正在关闭的电源域到保持通电的电源域的信号。如果关闭电源域的输入需要稳定的信号以满足电气原因,即使信号从通电域到关闭电源域,也需要隔离。

在图3-1,“DVFS设计示例”中,在睡眠电源模式下,将需要隔离逻辑,用于从TDSPcore电源域到其他域的任何网络。例如:

set_isolation ISORULE -domain TDSPCore -applies_to outputs \

    -isolation_supply_set ss_TDSPCore_ref \

    -location parent \

    -isolation_signal {pm_inst/ice_enable[0]} \

    -clamp_value 0

在这个示例命令中:

- `ISORULE`是隔离策略的名称。

- `TDSPCore`是应用隔离策略的电源域。

- `-applies_to outputs`指定策略适用于输出引脚。

- `-isolation_supply_set ss_TDSPCore_ref`定义了隔离单元的次级电源供应。

- `-location parent`指定隔离单元应放置在TDSPCore域的父级层次结构中。

- `-isolation_signal {pm_inst/ice_enable[0]}`定义了控制隔离单元的信号。

- `-clamp_value 0`定义了隔离时引脚应采取的逻辑值为0。

3.2.9 指定创建状态保持逻辑的规则

状态保持是一种设计方法论,它允许一组寄存在上电或下电序列中被保留。状态保持有两种常见应用:

- 保留配置寄存器 — 通过电源序列保留特定一组配置寄存器。这允许域以相同的配置启动,并加快了上电周期。如果没有保持,设备需要重新配置,这在许多情况下会给系统软件增加开销。

- 域的完全恢复 — 允许设备以完全相同的状态启动,就像它被关闭电源时一样。也就是说,域中的任何操作在电源关闭期间基本上暂停,然后在电源上电后立即恢复。

在许多情况下,可以保存设计中的所有寄存器。这确保了设备完全已知的状态被恢复。然而,IEEE 1801不要求保留所有寄存器,可能尝试优化一组部分寄存器。这部分组提供的设计面积更小,但存在遗漏寄存器有不完整或不正确恢复的风险。

要定义一个规则,用于替换指定电源域中选定的寄存器或所有寄存器为具有状态保持的寄存器,请使用`set_retention`命令。常见选项包括:

set_retention strategy_name

    -domain power_domain

    [-elements element_list]

    [{-exclude_elements element_list}]

    [-save_signal {logic_net <high | low | posedge | negedge>}]

    [-restore_signal {logic_net <high | low | posedge | negedge>}]

    [-restore_condition expr]

    [-save_condition expr]

    [-retention_condition expr]

    [{-retention_supply_set supply_set_ref}]

保持策略是每个域定义的,并指定应保留哪些元素以及对保持的控制。`-save_signal`和`-restore_signal`选项分别定义触发保存和恢复操作的控制信号。`-save_condition`、`restore_condition`和`-retention_condition`选项由仿真和静态检查使用,作为对保持操作的额外检查。例如,要确保在保存时钟保持低电平,指定`-save_condition {!clk}`。

保持单元有一个单独的保持电源,在域关闭时保持活动。这个保持电源用`-retention_supply_set`选项指定。

对于图3-1所示的“DVFS设计示例”,使用以下命令:

set_retention SRPG_TDSP \

-domain TDSPCore \

    -save_signal {PM_INST/pg_restore[0] high} \

    -restore_signal {PM_INST/pg_enable[0] low} \

    -retention_supply_set SS_TDSPCore_Ref

在这个命令中:

- `SRPG_TDSP` 是保持策略的名称。

- `TDSPCore` 是应用保持策略的电源域。

- `-save_signal` 定义了触发保存操作的控制信号。

- `-restore_signal` 定义了触发恢复操作的控制信号。

- `-retention_supply_set SS_TDSPCore_Ref` 指定了保持单元使用的电源供应。

3.2.10 指定电源开关逻辑

在DVFS设计中,必须定义控制域关闭行为的电源开关。这包括输入和输出电源网络、控制端口以及电源开关的每种允许状态。

要指定电源开关,请使用`create_power_switch`命令。

create_power_switch

    -domain power_domain

    -output_supply_port {port supply_net_name}

    {-input_supply_port {port supply_net_name}}*

    {-control_port {port_name [net_name]}}*

    {-on_state {state_name input_supply_port {boolean_expression}}}*

    [{-off_state {state_name {boolean_expression}}}]*

    [-ack_port {port_name net_name [logic_value]}]*

    [-ack_delay {port_name delay}]*

典型的电源开关将具有一个控制信号,该信号定义了何时将输入电源连接到输出电源。`-on_state`和`-off_state`选项用于定义该控制逻辑。高级语法允许定义更复杂的开关,例如多个输入电压和多个控制信号。

`-ack_port`选项定义了一个确认信号,当输出电源完全恢复时生成一个值。您可能将其用作其他电源开关的输入,或作为等待域完全恢复后再进入下一个状态的FSM(有限状态机)的输入。

对于图3-1所示的“DVFS设计示例”,使用以下命令:

create_power_switch PD2_sw -domain PD2 \

    -output_supply_port {vddo } \

    -input_supply_port {vddi ss_TDSPCore_ref.power} \

    -control_port {EN PM_INST/ps_enable } \

    -on_state {full_on vddi {!EN}} \

    -off_state {full_off {EN}}

在这个命令中:

- `PD2_sw` 是电源开关的名称。

- `-domain PD2` 指定电源开关适用的电源域。

- `-output_supply_port {vddo }` 定义了输出电源端口和网络。

- `-input_supply_port {vddi ss_TDSPCore_ref.power}` 定义了输入电源端口和网络。

- `-control_port {EN PM_INST/ps_enable }` 定义了控制电源开关的端口和信号。

- `-on_state {full_on vddi {!EN}}` 定义了电源开关接通时的状态和逻辑。

- `-off_state {full_off {EN}}` 定义了电源开关断开时的状态和逻辑。

3.2.11 指定低功耗库单元属性

1801-2013规范允许以两种不同的方式定义库属性:

- 原生1801命令

- 技术Liberty定义中的属性

IEEE-2013的建议是使用原生1801命令,因为该格式完全在1801规范之内。虽然Liberty格式是库信息的事实标准,但它不是由IEEE标准协会或任何其他开放标准机构控制的格式。

对于具有PSO的DVFS设计,常见的低功耗单元包括:

- define_always_on_cell:定义始终开启的单元

- define_level_shifter_cell:定义电平转换器单元

- define_isolation_cell:定义隔离单元

- define_retention_cell:定义保持单元

1801低功耗单元的示例:

define_always_on_cell -cells LP_AON -power VDD -ground VSS

define_level_shifter_cell -cells LS_HTL \

-input_voltage_range {{1.0 1.1}} \

-output_voltage_range {{0.8 0.9}} \

-input_power_pin VDD \

-ground VSS \

-output_power_pin VDDL \

-direction high_to_low \

-valid_location source

define_level_shifter_cell -cells LS_LTH \

-input_voltage_range {{0.8 0.9}} \

-output_voltage_range {{1.0 1.1}} \

-input_power_pin VDD \

-ground VSS \

-output_power_pin VDDH \

-direction low_to_high \

-valid_location source

define_isolation_cell -cells ISO_ON \

-power VDD \

-ground VSS \

    -enable EN \

    -valid_location on

define_isolation_cell -cells ISO_OFF \

-power VDD \

-ground VSS \

    -power_switchable VDD_SW \

    -enable EN \

    -valid_location off

define_retention_cell -cells RET1 \

-power VDD \

-ground VSS \

    -power_switchable VDD_SW \

    -clock_pin CK \

    -always_on_pin Q \

    -save_function {SV posedge}

在这些示例命令中:

- `define_always_on_cell` 创建了一个始终开启的单元`LP_AON`,它使用`VDD`作为电源和`VSS`作为地。

- `define_level_shifter_cell` 创建了两个电平转换器单元`LS_HTL`和`LS_LTH`,分别代表高到低和低到高的电平转换。这些单元指定了输入和输出电压范围、电源引脚、地引脚、电平转换方向以及有效位置。

- `define_isolation_cell` 创建了两个隔离单元`ISO_ON`和`ISO_OFF`,分别代表启用和禁用隔离的情况。这些单元指定了电源、地、使能信号`EN`以及有效位置。

- `define_retention_cell` 创建了一个保持单元`RET1`,它使用`VDD`作为电源、`VSS`作为地,指定了可开关电源`VDD_SW`、时钟引脚`CK`、始终开启的引脚`Q`,以及保存功能的触发方式(例如,`SV`在上升沿保存)。