低功耗设计(low power design)和UPF介绍(含代码示例)

目录

一、低功耗实现方法

1、多电压域技术(Multi-Voltage)

2、电源门控(MTCOMS Power Gating)

3、多电压+功耗控制+寄存器Retention技术

4、低电压standby(Low-VDD Standby)

5、动态电压频率调节(DVFS,DVS,AVS,AVFS)

二、UPF原理及使用

1、设置power domain

2、描述power domain的电源网络:Supply Network

3、创建Power Switch

4、设定Supply Port的电压值

5、创建Power State Table

6、替换 Retention Register Cell

7、插入isolation cell

8、level shifter cell 处理不同电压域之间信号的传递

三、UPF示例


 

一、低功耗实现方法

传统的低功耗实现方法有两种:加时钟门口、门级功耗优化

然而这两种方法作用有限,于是就有了用upf来实现低功耗的方法

具体的方法有5种

1、多电压域技术(Multi-Voltage)

addc450a3c26436b828e6a2b32683b4b.png 

 在芯片设计时候,对于工作频率要求高的系统或者模块使用高电压,对于工作频率要求不高的系统或者模块使用相应的低电压也称Normal电压。比如手机基带芯片中的CPU或者GPU系统模块要在高电压状态下才能才能达到系统工作要求。又如高速数据通信接口模块(如LPDDR)想要获取很高的性能(这里指高的吞吐率)甚至可以加大电压去进行数据传输。而对于一般的只要求能够达到普通性能的模块则可以用较低的电压进行供给,比如系统中需要一直上电的Always-ON区域中的Timer计时器等等。

2、电源门控(MTCOMS Power Gating)

eb08d474a03b4683896f26e4a070f0fd.png

 在整个SoC系统芯片中,芯片中的会有许多模块工作在同一电压下,但是在一些特殊情景下,比如手机芯片,当手机属于待机模式时,SoC系统中电源管理单元(Power Management Unit)会自动将手机芯片中的CPU关掉,而其它通信模块比如基带部分中的2G、3G、CDMA、LTE等通过awake—>sleep—>awake的方式间歇式的打开或关断其电源。

3、多电压+功耗控制+寄存器Retention技术

e3c2bee4fa11470a812cf47ab2e0282b.png

 在这种技术中,SoC系统中的各个模块都可以工作在不同的电压下,同时某些模块的供电电源还可以切断,并且在电源切断的情况下还要保持掉电之前的状态,因此这就需要引入Retention寄存器,当掉电后的模块再次上电后,至少经过一个时钟周期,之前掉电的模块就可以恢复到掉电之前的正常状态。

4、低电压standby(Low-VDD Standby)

5ecde62b6eb64c9ea0216d704fa8f470.png

比如手机芯片中有一个电压域的供电电压值VDD为0.5V,并且使用该供电电压VDD为0.5V的模块一直都处于Always-On状态,在某种情况下,芯片中的其他模块需要进入sleep状态,这时候可以使用较低的电压来保持芯片可以工作,同时在0.5V电压域中放置一个小的控制单元(假如为一个小的CPU),一旦当系统需要全速工作,这时候我们可以用0.5V电压域中的小的控制单元去唤醒其他模块。

5、动态电压频率调节(DVFS,DVS,AVS,AVFS)

0a4576bf7bf74de6be42d5134558954e.png

这是一种自适应的电压频率调节技术,根据系统中电压和工作频率之间的关系,可以有效的降低系统功耗。

二、UPF原理及使用

1、设置power domain

我们将工作在同一电压下的模块归为一个组,这就是我们通常在UPF中讲到的PowerDomain即电源域。每一个电源域可以简单理解为供电逻辑的划分,在该逻辑划分中既包含了设计的物理实体(module)同时也包含了电源线间的连接关系。在基于UPF标准的低功耗设计过程中,必须存在至少一个电源域,并且顶层的电源域必须在进行任何与电源相关的分析或者综合之前预先定义出来,同时还需要将电源域定义在层次化模块之上。需要注意的是设计中的任何逻辑只能属于一个电源域,设计过程中也可以嵌套的定义电源域。

首先我们需要定义一个顶层的电源域,在定义顶层电源域时不需要指定哪些模块被包含在该电源域中,定义顶层电源域的UPF命令为:

                                 create_power_domain  PD_TOP

然后我们在PD_TOP电源域中嵌套定义一个名为PD1的电源域并且同时指定模块实例u_cpu_core位于PD1电源域中,其对应的UPF命令为:

                  create_power_domain    PD1  -elements { u_cpu_core }

方法:

create_power_domain domain_name
[-elements list]
[-include_scope]

-elements  列表中的元素被指定给当前电源域

-include_scope  整个层级都被指定给当前电源域

若-elemens和-include_scope都没有被使用,则默认该电源域包含当前范围内的所有

举例:

0a305c6a123440fe9969443d4ba3c2c4.png

 

create_power_domain  PD_TOP

set_scope Video_SB

create_power_domain  Video_PD -include_scope

create_power_domain V1_PD -elements {V1}  //默认情况下将会对模块V1进行遍历操作,即模块V1中所有例化的子模块都将和模块V1处于同一个电源域V1_PD中

create_power_domain LV12_PD -elements {V1/LV1 V1/LV2}   //模块LV1和LV2都被例化在模块V1中,但是模块V1属于V1_PD电源域,而模块LV1和LV2属于LV12_PD电源域,此时可以通过-elements选项显示的为模块LV1和LV2指定电源域LV12_PD

2、描述power domain的电源网络:Supply Network

create_supply_net net_name
-domain domain_name

create_supply_port port_name
[-domain domain_name | domain_object]
[-direction in | out]

 

supply port 是设计层次结构的两个相邻层次之间、层次结构的父块和子块之间的电源连接点。

supply net 是在给定的电源区域内承载电源电压或接地的导体,跨越多个电压域的net被定义为“reused”

主要是通过下面四个进行电源网络的连接

create_supply_port VDD -direction in

create_supply_port VSS -direction in  //申明 VDD、VSS 等电压端口

 

create_supply_net Pwr -domain Video_PD

create_supply_net Gnd -domain Video_PD //申明每个电压域中的电源网络

 

connect_supply_net Pwr -ports (VDD)

connect_supply_net Gnd -ports (VSS)  //将电源网络和电源端口连接起来

 

set_domain_supply_net Video_PD \   //为每个电源域申明主电源网络来源
-primary_power_net Pwr \
-primary_ground_net Gnd

3、创建Power Switch

create_power_switch switch_name
-domain domain_name
-output_supply_port {port_name supply_net_name}
{-
input_supply_port {port_name supply_net_name}}*
{-
control_port {port_name net_name}}*
{-
on_state {state_name input_supply_port {boolean_function}}}*
[-
off_state {state_name {boolean_function}}]

428f536736c142d49237d8f76ec97771.png

 

power switch是一个装置,打开和关闭电源的供应网络。一个开关有一个输入供应网,一个输出供应网,以及至少一个用于控制开关的输入信号,可以通过多个信号控制,也可以输出多个信号

create_supply_net VDDsw -domain V_PD  //定义switch产生的supply_net

create_power_switch SW

-domain V_PD \
-input_supply_port {pwin Pwr} \
-output_supply_prt {pwout VDDsw } \
-control_port {swctrl sw_ctrl} \
-on_state {Pwon swctrl} \
-off_state {Pwoff !swctrl}

set_domain_supply_net V_PD \      //V_PD的primary_power_net为switch产生的net
-primary_power_net VDDsw \
-primary_ground_net Gnd

 

4、设定Supply Port的电压值

add_port_state supply_port_name

-state {state_name state_value}

 

add_port_state VDD -state {ON_10 1.0}         //VDD只有一种常开的状态,其电压值为1.0v

add_port_state VSS -state {ON_00 0.0}         //VSS处于常开状态(ON),电压 0v

add_port_state SW/VDDsw -state {ON_10 1.0} -state {OFF off}  //#switch开关电压VDDsw,存在ON和OFF两种状态

5、创建Power State Table

create_pst table_name
-supplies list

add_pst_state 命令列出了设计中允许的状态组合

add_pst_state state_name

-pst table_name

-state supply_states

举例:

create_pst PST1 -supplies {VDD, VDDsw, VDD2, VSS}

add_pst_state Normal -pst PST1 -state {ON_10, ON_10, ON_08, ON_00}
add_pst_state Sleep -pst PST1 -state {ON_10, OFF, ON_08, ON_00}
add_pst_state Normal -pst PST1 -state {ON_10, OFF, OFF, ON_00}

6、替换 Retention Register Cell

将关断电源后需要保留数据的寄存器替换为 Retention Register Cell,它可以在掉电的时候保持住一个数值,用于对后面电路的控制

set_retention retention_strategy_name
-domain power_domain
[-retention_power_net retention_power_net]
[-retention_ground_net retention_ground_net]

set_retention_control retention_strategy_name
-domain power_domain
-save_signal {save_signal high | low}
-restore_signal {restore_signal high | low}

举例:

ab7261f639ba475483b0b1bae073e4d6.png

 set_retention V_PD_retention \ #所以V_PD domain的状态都要能被恢复
-domain V_PD \
-retention_power_net Pwr \
-retention_ground_net Gnd

set_retention_control V_PD_retention \
-domain V_PD \
-save_signal {SRctrl posedge} \
-restore_signal {SRctrl negedge}

-save_signal参数用于指定在断电之前用于将数据保存到shadow register中的net、port、pin,以及触发该操作的信号逻辑状态(低电平或高电平)信号。

-restore_signal参数用于指定在上电之前用于从shadow registe中恢复数据的net、port、pin,以及触发该操作的信号逻辑状态(低电平或高电平)信号。

7、插入isolation cell

主要用于不同的电源域之间,其中一个电源域断电后,不对另外一个电源域造成影响。主要是将断电后电源域的输出信号钳位到高或者低电平,防止掉电后的叉态传播。

set_isolation isolation_strategy_name                    //指定新的UPF隔离名称

-domain power_domain                                            //指定为隔离单元供电的电源域

[-isolation_power_net isolation_power_net]          //指定为隔离单元供电的电源

[-isolation_ground_net isolation_ground_net]      //指定为隔离单元连接的地

[-clamp_value 0 | 1 | latch]                                       //启用隔离单元时,隔离单元输出0、1或latch。latch在隔离期间保持当前数值且保持不变

[-applies_to inputs | outputs | both]  

指定隔离控制信号以及该信号的逻辑状态

set_isolation_control isolation_strategy_name
-domain power_domain
-isolation_signal isolation_signal
[-isolation_sense 0 | 1 ]
[-location self | parent ]

-isolation_signal 指定的隔离信号,可以是一个 net(网)或一个 pin/port(引脚/端口),其中 net 具有较高的优先级。隔离信号不一定需要存在于隔离单元插入的逻辑层次结构中。综合或实现工具可以根据需要执行端口插入操作,以进行连接。端口插入是指自动创建端口,从一个层次级别连接到下一个层次级别。这些插入的端口不会考虑隔离或电平转换,尽管在创建端口之后,这些端口位于隔离或电平转换策略的覆盖范围内。

-isolation_sense 选项用于指定将隔离单元置于隔离模式的隔离控制信号的逻辑状态,可以是 0 或 1。默认值为 1。

-location 选项用于定义隔离单元在逻辑层次结构中的放置位置:默认值为 self,表示将隔离单元放置在正在隔离的模块/单元内部;而 parent 表示将隔离单元放置在正在隔离的模块/单元的父级内部。

-clamp_value 选项用于指定隔离输出的常量值:0、1、latch 或 Z。当隔离信号变为有效时,latch 设置会导致非隔离端口的值被锁存。

-applies_to 选项用于指定被隔离的电源域的部分:输入、输出或两者兼有。默认值为输出。

举例:

set_isolation V_PD_isolation \
-domain V_PD \
-applies_to outputs \
-clamp_value 0 \
-isolation_power_net Pwr \
-isolation_ground_net Gnd

set_isolation_control V_PD_isolation \
-domain V_PD \
-isolation_signal vISO \
-isolation_sense high \
-location parent

8、level shifter cell 处理不同电压域之间信号的传递

set_level_shifter 命令可以用于在实现过程中设置电平转换器的策略。综合和实现工具会根据指定的策略,在源信号和汇信号操作在不同电压的情况下,在信号上插入电平转换器。如果在特定的电源域中没有指定电平转换器策略,则默认的电平转换器策略将应用于电源域中的所有元素,并使用默认的策略设置。

set_level_shifter strategy_name
-domain domain_name
[-elements port_pin_list]
[-
applies_to inputs | outputs | both]
[-threshold float]
[-rule
low_to_high | high_to_low | both]
[-location self | parent | fanout | automatic]

-threshold选项定义了在驱动器和接收器之间的电压差异必须多大才会插入电平转换器,该设置会覆盖单元库中的任何类似规定。

-rule选项可以设置为low_to_high、high_to_low或both。如果指定了low_to_high,当电压差异超过-threshold值时,从较低电压到较高电压的信号会得到电平转换器。类似地,如果指定了high_to_low,当电压差异超过-threshold值时,从较高电压到较低电压的信号会得到电平转换器。默认行为是both,这意味着在任何情况下都会插入电平转换器。

-location选项指定了电平转换器单元在逻辑层次结构中的放置位置:

• self – 电平转换器单元被放置在正在进行转换的模型/单元内部。

• parent – 电平转换器单元被放置在正在进行转换的模型/单元的父级内部。

举例:

set_level_shifter LV_PD_LS
-domain LV_PD \
-threshold 0.1 \
-applies_to both \
-rule both \
-location self

三、UPF示例

 以下为一段可以运行的*.upf文件

供参考

upf_version 2.0
set_design_top design_top
set_scope .

create_power_domain PD_TOP
create_power_domain PD_OR  -elements {orGate}

create_supply_port VDD_1d0 -domain PD_TOP
create_supply_port VDD_0d8 -domain PD_TOP
create_supply_port VSS     -domain PD_TOP

create_supply_net VDD_1d0 -domain PD_TOP
create_supply_net VDD_0d8 -domain PD_TOP
create_supply_net VDD_0d8 -domain PD_OR  -reuse

create_supply_net VSS -domain PD_TOP
create_supply_net VSS -domain PD_OR  -reuse

# Connect Supply Nets to top level Supply Ports
connect_supply_net VDD_1d0 -ports VDD_1d0
connect_supply_net VDD_0d8 -ports VDD_0d8
connect_supply_net VSS     -ports VSS

create_supply_net VDD_0d8_SW -domain PD_OR

set_domain_supply_net PD_TOP \
    -primary_power_net VDD_1d0 \
    -primary_ground_net VSS

set_domain_supply_net PD_OR \
    -primary_power_net VDD_0d8_SW \
    -primary_ground_net VSS

create_power_switch or_sw \
    -domain PD_OR \
    -output_supply_port {vout_p VDD_0d8_SW} \
    -input_supply_port {vin_p VDD_0d8} \
    -control_port {ctrl_p top_pwr_sw} \
    -on_state {normal_working vin_p {ctrl_p}} \
    -off_state {off_state {!ctrl_p}}

 

 

  • 15
    点赞
  • 182
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
低功耗设计方法学中,UPF(Unified Power Format)理论和实践培训班是一种有效的培训方式。UPF是一种硬件描述语言,用于描述电子系统的功耗要求和管理策略。通过学习UPF理论和实践,可以有效地提高电子系统的功耗管理能力,实现低功耗设计UPF理论培训主要包括对UPF的基本概念和语法进行讲解。学员可以了解UPF的层次结构,从整体到细节的掌握UPF描述电子系统功耗管理的方法。此外,培训还会介绍UPF中的各种特性和功能,如电源域、功耗状态和功耗意识设计等,使学员能够全面理解UPF的应用。 UPF实践培训主要通过实际案例进行演练。学员将在实际项目中应用UPF进行功耗管理。培训班会提供一些常见的案例和实际问题,学员需要通过编写和调试UPF代码来解决这些问题。通过实际操作,学员可以提高自己的实践能力和解决问题的能力。 UPF理论和实践培训班的目标是培养学员掌握低功耗设计方法学的能力。通过学习UPF理论,学员可以了解低功耗设计的基本原理和方法。通过实践培训,学员可以将所学知识应用到实际项目中,解决实际问题,提高电子系统的功耗管理能力。 总之,UPF理论和实践培训班是一种重要的培训方式,能够有效提高低功耗设计方法学的能力。学员通过学习UPF的基本概念和语法,掌握UPF的应用方法,并通过实际案例进行实践演练,不仅可以提高自己的理论水平,还能够提升实际操作能力,从而更好地应用于低功耗设计
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值