低功耗设计(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)
在芯片设计时候,对于工作频率要求高的系统或者模块使用高电压,对于工作频率要求不高的系统或者模块使用相应的低电压也称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_TOPcreate_supply_net VDD_1d0 -domain PD_TOP
create_supply_net VDD_0d8 -domain PD_TOP
create_supply_net VDD_0d8 -domain PD_OR -reusecreate_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 VSScreate_supply_net VDD_0d8_SW -domain PD_ORset_domain_supply_net PD_TOP \-primary_power_net VDD_1d0 \-primary_ground_net VSSset_domain_supply_net PD_OR \-primary_power_net VDD_0d8_SW \-primary_ground_net VSScreate_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}}
低功耗设计(low power design)和UPF介绍(含代码示例)相关推荐
- partial函数介绍(含代码示例)
partial函数介绍 partial函数在python的functools模块中,这个函数原型如下: partial(func, *args, **keywords) 这个函数调用时,返回一个par ...
- Low Power Design in SoC Using Arm IP
Low Power Design in SoC Using Arm IP Documentation – Arm Developer Documentation – Arm Developer By ...
- python简单代码画曲线图教程-Python绘制折线图和散点图的详细方法介绍(代码示例)...
本篇文章给大家带来的内容是关于Python绘制折线图和散点图的详细方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.绘制折线图和散点图要用到matplotlib ...
- python画折线图代码-Python绘制折线图和散点图的详细方法介绍(代码示例)
本篇文章给大家带来的内容是关于Python绘制折线图和散点图的详细方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.绘制折线图和散点图要用到matplotlib ...
- Low Power之CPF/UPF
1 CPF The Common Power Format is a standard promoted by the Low Power Coalition at Si2. CPF is also ...
- STC89C52单片机DS1302介绍以及代码示例
目录 DS1302介绍 引脚定义与应用电路 内部结构框架图 寄存器定义 时序定义 BCD码 时间设置上的一些问题 代码示例: DS1302介绍 DS1302是由美国DALLAS公司推出的具有涓细电流充 ...
- BizTalk ESB Toolkit : 核心组件介绍及代码示例 (原创翻译)
为什么需要一个企业服务总线(Enterprise Service Bus,ESB) 从IT管理的角度看,随着企业内信息化系统的不断建立,企业已经充满了各种各样的业务系统(line-of-busines ...
- java原子变量的作用_AtomicInteger原子类的作用介绍(代码示例)
本篇文章给大家带来的内容是关于AtomicInteger原子类的作用介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. AtomicInteger 原子类的作用 多线程操 ...
- php中使用mysql的视图_MYSQL中视图的用法介绍(代码示例)
本篇文章给大家带来的内容是关于MYSQL中视图的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.什么是视图 执行一条SQL,将结果集保存在一张虚拟表中 (相关 ...
最新文章
- 前后端分离djangorestframework—— 在线视频平台接入第三方加密防盗录视频
- docker部署python web应用_在 Docker 中运行一个 Python 的 Web 应用
- android ndk x86 arm,How to use SIGRTMIN in x86 or armeabi-v7a abi in Android NDK?
- 老码农冒死揭开行业黑幕:如何编写无法维护的代码
- BZOJ 1101: [POI2007]Zap( 莫比乌斯反演 )
- 51CTO博客 NO.1 大奖赛之后感想---奖品
- java基础教程哪个好,面试必会
- Bootstrap列表组禁用和活动状态
- java编写程序_对输入的年月日_给出该天是该年的第多少天?_编写Java程序。当以年月日的格式输入一个日期时,输出该年是否是闰年,该月有几天,该日是星期几...
- Intel DCM 携手DELL共同推出关于DCIM的联合调研
- 【SDCC 2016】未来应用,IBOS、爱范儿、滴滴出行、腾讯云的微信开发之路
- Hadoop基础教程-第1章 环境安装配置(1.6 SSH免密登录)
- backtrack渗透测试中常用的命令总结
- 浏览器被hao123篡改怎么办?
- ipad无线怎么重新连接到服务器,iPad不能连接无线怎么办 iPad不能连接无线解决方法【详解】...
- word 宏命令批量把当前文件夹下的doc另存为docx格式
- ossec是干什么的?
- 刀片机服务器的虚拟化,刀片机服务器虚拟化
- 诸神之眼-nmap详细使用介绍1!基础使用与主机发现篇! (*╹▽╹*) 信息收集 ~ 其二
- 迁移学习和模型的微调