Professional Documents
Culture Documents
# 这个是一级标题
# 这个是一级标题
UPF介绍
功耗意图(Power Intent)是指实现芯片低功耗设计所需要的思想和方法。UPF 语言提供了一种描述芯
片功耗要求的方法,但是却没有精确的描述这些要求是如何实现的。UPF 语言描述了如何连接每一个设
计单元的供电电源,供电网络的模型,以及电路的逻辑功能如何来支持动态电压切换等等,但却没有任
何关于布局布线的描述。UPF 语言独立于RTL 语言,并且像RTL 语言一样都是设计的输入文件。
UPF DEMO
为了让大家有个更清晰的认识,编了一个小的demo。SoC构成非常简单,一个MCU作为控制器,一个
功能模块U1,一个功耗控制器U2。假设,U1工作在高电压1.2V,MCU和U2工作在低电压1.0V。当系
统处于空闲状态时,可以关闭U1的供电,以减少静态功耗,电源开关的控制信号由U2模块给出。为了
简化描述,本demo中不支持DVFS,并省略功耗控制的逻辑设计部分。
有了上面的约定条件,我们可以知道,现在有了两个电源域,分别定义为VH(下图红色)和TOP(蓝色
还记得前面提到的,在RTL里面可是看不到供电信息的,我们必须把这个信息告诉工具才行。
所以,第一步就是描述电源信息。
现在,EDA工具里的视图就是下面的样子。
由于U1模块可以做电源关闭,所以要加上power gating,开关信号由功耗控制单元U2给出(忽略具体
添加PG信息后的视图
因为U1模块可以关电,所以至少要对其输出信号要做隔离,以保证U1下电后不会影响其它模块正常工作
添加isolation信息后的视图
为了保存U1模块下电前的状态,以便U1再次上电后恢复状态,要添加一些retention cell。
添加retention信息后的视图
接下来,是对高低电压间的信号转换添加level shifter。
添加level shifter信息后的视图
到此,还差最关键的一步,需要建立一张power table。
以上仅仅是展示一个使用UPF1.0语法的demo,在upf最新的3.0中删除了部分1.0的语法支持,增加丰富
了更多的语法支持。推荐学习和使用upf3.0。
在实际的项目中,电源域可能会更加复杂。需要designer提前考虑好电源域的划分与摆放,遇到问题耐
心debug。
UPF在数字前端设计流程中注意事项
1.vcs仿真(前仿/后仿)
vcs加入编译选项
+define+UPF :定义UPF的宏;
-upf upf_filename.upf :导入UPF文件(irun中的选项是 - upf_1801);
-power_top TOP:指定UPF供电的顶层。这一条也可以在UPF文件中进行指定。
在顶层导入UPF库并供电
`ifdef UPF
import UPF::*;
initial beign
supply_on("VDD", 1.1);//on
supply_on("GND", 0);
//supply_off("VDD_G");//off
end
`endif
注意:在生成fasb的时候,fsdbDumpvar选择“+all”或者“+power”
verdi 使用demo
verdi tb_ChipTop.v -f filelist -sverilog -upf UPF/ChipTop.upf -power_top ChipTop +define+UPF -ssf
test.fsdb &
2.xrun/irun/ncverilog仿真
irun加入编译选项
load_upf ${UPF_PATH}/xxx.upf
设置工作电压,注意需要与upf中定义电压保持一致。
如果工作电压是浮动电压,例如1.1-1.9v,定义如下
如果时钟需要插入levelshift
4.ptpx
给出一个求peak功耗的参考tcl脚本
set search_path ". ../../ref/saed_libs"
set link_library "* saed90nm_max_hth_lvt.db saed90nm_max_hth_cg_lvt.db saed90nm_m
read_verilog ../dc/top_gates.v
#source -e -v ../dc/top_gates.link
current_design TOP
link
define_scaling_lib_group {saed90nm_max_hth_lvt.db saed90nm_max_lvt.db}
define_scaling_lib_group {saed90nm_max_hth_cg_lvt.db saed90nm_max_cg_lvt.db}
define_scaling_lib_group {saed90nm_max_hth_lvt_rdsr.db saed90nm_max_lvt_rdsr.db}
define_scaling_lib_group {saed90nm_max_hthn_lvt_lsh.db saed90nm_max_htln_lvt_lsh.
create_clock -p 4 clk
set_input_delay 1 -clock clk [remove_from_collection [all_inputs] [get_ports clk]
set_output_delay 1 -clock clk [all_outputs]
set upf_create_implicit_supply_sets false
load_upf ../dc/top_gates.upf
#####################################
## Multi Rail Analysis Power Reports
#####################################
set power_enable_multi_rail_analysis true
source ../dc/map.ptpx
set_power_analysis_options -waveform_output multirail_capp -multi_rail_waveform "V
read_vcd -strip_path tb/MUT ../annotate/rtl.vcd
report_switching_activity -include_only rtl
update_power