目录
2、描述power domain的电源网络:Supply Network
8、level shifter cell 处理不同电压域之间信号的传递
一、低功耗实现方法
传统的低功耗实现方法有两种:加时钟门口、门级功耗优化
然而这两种方法作用有限,于是就有了用upf来实现低功耗的方法
具体的方法有5种
1、多电压域技术(Multi-Voltage)
在芯片设计时候,对于工作频率要求高的系统或者模块使用高电压,对于工作频率要求不高的系统或者模块使用相应的低电压也称Normal电压。比如手机基带芯片中的CPU或者GPU系统模块要在高电压状态下才能才能达到系统工作要求。又如高速数据通信接口模块(如LPDDR)想要获取很高的性能(这里指高的吞吐率)甚至可以加大电压去进行数据传输。而对于一般的只要求能够达到普通性能的模块则可以用较低的电压进行供给,比如系统中需要一直上电的Always-ON区域中的Timer计时器等等。
2、电源门控(MTCOMS Power Gating)
在整个SoC系统芯片中,芯片中的会有许多模块工作在同一电压下,但是在一些特殊情景下,比如手机芯片,当手机属于待机模式时,SoC系统中电源管理单元(Power Management Unit)会自动将手机芯片中的CPU关掉,而其它通信模块比如基带部分中的2G、3G、CDMA、LTE等通过awake—>sleep—>awake的方式间歇式的打开或关断其电源。
3、多电压+功耗控制+寄存器Retention技术
在这种技术中,SoC系统中的各个模块都可以工作在不同的电压下,同时某些模块的供电电源还可以切断,并且在电源切断的情况下还要保持掉电之前的状态,因此这就需要引入Retention寄存器,当掉电后的模块再次上电后,至少经过一个时钟周期,之前掉电的模块就可以恢复到掉电之前的正常状态。
4、低电压standby(Low-VDD Standby)
比如手机芯片中有一个电压域的供电电压值VDD为0.5V,并且使用该供电电压VDD为0.5V的模块一直都处于Always-On状态,在某种情况下,芯片中的其他模块需要进入sleep状态,这时候可以使用较低的电压来保持芯片可以工作,同时在0.5V电压域中放置一个小的控制单元(假如为一个小的CPU),一旦当系统需要全速工作,这时候我们可以用0.5V电压域中的小的控制单元去唤醒其他模块。
5、动态电压频率调节(DVFS,DVS,AVS,AVFS)
这是一种自适应的电压频率调节技术,根据系统中电压和工作频率之间的关系,可以有效的降低系统功耗。
二、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都没有被使用,则默认该电源域包含当前范围内的所有
举例:
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}}]
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}
举例:
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}}
今天的文章
低功耗设计精解_芯片设计中的低功耗设计方案分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/80570.html