1 UPF的历史简介
UPF从不通用到现在的通用,主要经历了以下三个阶段:CPF->UPF1.0->UPF2.0,发展到现在已经更多的版本,发展历史可以参看以下链接,但其中具体的时间节点可能还需要进一步确认,但不影响我们使用UPF。
论功耗 | 一文搞懂 UPF2.1 编写Power Intent - 极术社区 - 连接开发者与智能计算生态 (aijishu.com)
注:由于不同版本,UPF版本不同,语法有点差异,但我们在实际使用时选择UPF版本应该根据我们使用的工具来确定,即使用的UPF版本很新,若工具不能识别,也是无用功。
不同版本的UPF的语法大同小异,下面给出UPF标准文件下载地址的链接(主要看第一个链接),方便学习了解:
一文读懂power intent的历史:从CPF/UPF到IEEE1801 (qq.com)
IEEE-1801 2009 标准 (UPF) - 后端资料区 - EETOP 创芯网论坛 (原名:电子顶级开发网) -
IEEE-1801 2018版&&2015版 - 后端资料区 - EETOP 创芯网论坛 (原名:电子顶级开发网) -
2 编写UPF的三大准备工作
2.1 芯片电源划分区域图
清楚top_power_domain的电源信号端口的具体数量、名字;清楚每个电源信号输入到模块内部后具体包含的内部子模块,即每个power_domain都包含了哪些子模块;每个power_domain中是否存在power_gate的情况;各个power_domain之间是否存在信号的交互,若存在则要考虑添加power cell,如level_shifter,如果存在power_gate,则需要考虑添加isolation,还要考虑是否需要添加retention cell用于在该power_domain掉电时保存某些寄存器的值。
一个好的power_domain划分图,能为UPF的编写省去很多时间。好的power_domain区域划分图需要标明每一个top层的电源信号,每一个power_domain的区域(即包含具体的module),需要具体到每一个需要的power cell(level_shifter\power_switch\isolation\retention),以及每一个cell的控制信号以及控制信号所在的power_domain,每一个cell的位置及作用域。
2.2 电源状态组合表
电源状态表是特别关键关键和重要的一环,完整细致的电源状态表能把每一种电源状态组合列出来,不会导致芯片在实际运行时出现电源状态缺失的情况。完整的电源状态表可以先把所有的top层电源和power gate后的电源横着一排列出来,再把这些电源各自可能出现的状态列在旁边,最后把所有可能出现的电源状态组合在一起便是一个完整的电源状态表了。
VDD1 VDD2 VDD3 VDD1G VDD3G VSS
PST1 1.2 1.0 0.8 1.2 0.8 GND
PST2 1.2 1.0 0.8 OFF 0.8 GND
PST3 1.2 1.0 0.8 1.2 OFF GND
2.3 低功耗电源cell
低功耗UPF用到的cell有四种:lever_shifter、power_switch、isolation、retention cell。下面简明扼要介绍这四种cell:
level shifter用于不同电压域之间信号的电平转换,相当于一个buffer,不具备任何逻辑功能,可参看如下链接:
SoC设计之功耗 -- Multi Voltage - 极术社区 - 连接开发者与智能计算生态 (aijishu.com)
power switch用于关断不需要工作的模块,可参看如下链接:
SoC设计之功耗 -- Power Gating - 极术社区 - 连接开发者与智能计算生态 (aijishu.com)
isolation用于断电后将输出值保持到某一个特定值,避免X态传播给下一级造成功能错误。
关于isolation cell可以参看下面的链接:
SoC设计之功耗 -- Power Gating - 极术社区 - 连接开发者与智能计算生态 (aijishu.com)
低功耗基础概念——isolation cell_时钟树上的小猴子的博客-CSDN博客
retention用于代替保存断电后某些需要保存值的寄存器。
关于power cell的一些讲解,还可以参看以下链接:
Synopsys- Multivoltage Flow User Guide-多电压域设计笔记 - 笑着刻印在那一张泛黄 - 博客园 (cnblogs.com)
论功耗 | 一文搞懂 UPF2.1 编写Power Intent - 极术社区 - 连接开发者与智能计算生态 (aijishu.com)
3 UPF的组成部分
虽然不同的UPF版本的语法不完全相同,但包含的主要部分是一样的,都有以下三个部分。
第一部分:create power domain
主要使用到的命令有:create_power_domain, create_supply_port, create_supply_net, connet_supply_net
第二部分:创建power cell
根据画出的电源区域划分图创建使用到的power cell,power cell的种类见2.3部分。
level_shifter的创建命令是:set_level_shifter
power_switch的创建命令是:create_power_switch
isolation的创建命令是:set_isolation
retention的创建命令是:set_retention
第三部分:创建power state table
使用到的命令:add_port_state, create_pst, add_pst_state
不同版本的UPF可能用的语法不一样,可以在Design Compiler中去查找具体命令的使用方法。
关于UPF的组成部分可以参考以下链接:
低功耗技术(三)UPF的使用_upf的sw_Andy_ICer的博客-CSDN博客
Lower power design & UPF 学习 - love小酒窝 - 博客园 (cnblogs.com)
4 完整UPF实例
下面链接是一个完整的UPF编写举例,不同UPF版本可能略有差异,但核心还是一样的。
UPF与低功耗设计实现实例 -- 附UPF与DC综合脚本-电子发烧友网 (elecfans.com)
5 UPF在整个芯片设计中的位置
UPF从功能仿真时就加入了,在综合时也需要带入UPF,在P&R阶段同样离不开UPF。下面的链接给出了UPF在功能仿真中的使用:
SoC设计之功耗 -- UPF - 极术社区 - 连接开发者与智能计算生态 (aijishu.com)
Synopsys- Multivoltage Flow User Guide-多电压域设计笔记 - 笑着刻印在那一张泛黄 - 博客园 (cnblogs.com)
使用VCS和Verdi的UPF低功耗仿真流程_upf流程_小破同学的博客-CSDN博客
ps:先记到这里吧,在以后的实践中,若有其他的提炼再补充吧~如有错误请提出,先谢过了~