PTPX分析功耗(一)

2 篇文章 12 订阅
2 篇文章 1 订阅

ps. 写本文的目的仅为了整理笔记,好记性不如烂笔头~

参考来源:

  1. https://blog.csdn.net/u011729865/article/details/54138703
  2. https://zhuanlan.zhihu.com/p/149914903
  3. https://www.cnblogs.com/IClearner/p/6898463.html
  4. http://blog.sina.com.cn/s/blog_cdd8559a0102uycf.html
  5. https://mp.weixin.qq.com/s/RIlpkvitgux9AWHP5S7hKQ
  6. https://www.sohu.com/a/112956139_485357
  7. https://blog.csdn.net/mikiah/article/details/8061532


前言

PTPX,是基于primetime环境(简称pt),对全芯片进行power静态和动态功耗分析的工具。包括门级的平均功耗和峰值功耗。可以说PTPX就是pt工具的一个附加工具。
PT如果report_power需要额外的PTPX的licence,可以通过以下变量打开:

set_app_var power_enable_analysis true (默认是false)

PrimeTime PX支持两种功耗分析模式: averaged mode和time-based mode。


一、电路的功耗分类

功耗大致包括:

total power = leakage power +internal power + switching power
(其中internal power + switch power = dynamic power)

  1. Leakage power,即漏电功耗和本身工艺库特性相关,由标准单元库的cell .db提供相关数据。是指cell不发生switching开关切换的时候,去计算得出。ptpx,完全使用单元库(.db文件)的漏电流功耗查找表得出结果。
    (当这个模块不工作的时候,可以进行断电,从而大大降低芯片的漏电功耗。)
  2. Internal power,内部的概念,是指cell以内。包括充放电导致的功耗和短路功耗。充放电的意思是,管子的寄生电容,导致充放电;短路功耗的意思是,栅极在切换的时候,使得P管、N管同时导通,从而引起电源到地的通路。(由标准单元库的cell .db提供相关数据,但与激励有关系。)
    简单的库单元,动态功耗主要来自短路功耗。
    复杂的库单元,动态功耗主要来自充放电。
  3. Switch power,即开关功耗,负载电容的充放电过程所导致的。具体原因:P管导通,负载电容充电;因为管子输入端口switching,N管导通,负载电容开始放电。正是由于上述充放电,导致产生了switching开关功耗。(与内部功耗的子类—充放电功耗,区别是范围不限于cell内部。)
    一般情况下,需要读入SPEF文件,从而抽取每个节点上的RC参数用于计算switch power。

二、PTPX功耗分析模式及流程

Averaged mode: SAIF, VCD, set_switching_activity, Tool defaults
Time-based mode: RTL-VCD, Gate-Level VCD (Peak power)
在这里插入图片描述
在这里插入图片描述

1. Averaged power analysis

平均功耗,是基于翻转率toggle rate来分析的。
翻转率的标注,可以是默认翻转率、用户定义switching activity、SAIF文件或者VCD文件。功耗结果期望准确的话,首先要保证翻转率的标注要准确。这意味着需要后端布局布线、时钟树等已经完全稳定了。前期做功耗分析,可能只是一个评估作用。
工具支持基于仿真的switching activity文件类型,包括:

  • VCD
  • FSDB
  • VPD
  • SAIF
    如果没有上述文件,那可以使用user-define switching activity commands,来提供一个现实的activity去精确power结果。

所需文件:(5个)

1. logic库文件,必须是.db格式;
2. 网表文件,支持verilog、vhdl网表,db、ddc、Milkyway格式的网表也可以;
3. sdc文件,为了计算平均功耗;
4. spef文件,寄生参数信息。
5. VCD/saif文件,记录翻转率(若没有,需要人为设置翻转率)。

脚本如下(示例):

Averaged Power Analysis Mode Script:
#####################################################
# Set the Power Analysis Mode
#####################################################
set power_enable_analysis TRUE
set power_analysis_mode averaged
#####################################################
# Read and link the Gate Level Netlist
#####################################################
set search_path "../src/hdl/gate ../src/lib/snps . "
set link_library " * core_typ.db"
read_verilog mac.v
current_design mac
link
#####################################################
# Read SDC and set transition time or annotate parasitics
#####################################################
read_sdc ../src/hdl/gate/mac.sdc
set_disable_timing [get_lib_pins ssc_core_typ/*/G]
read_parasitics ../src/annotate/mac.spef
#####################################################
# check, update, or report the timing
#####################################################
check_timing
update_timing
report_timing
#####################################################
# read switching activity file
#####################################################
read_vcd ../sim/mac.vcd -strip_path tb/uut  //读后仿产生的VCD/SAIF文件将真实的翻转率反标到Net上,在read_vcd或者read_saif时要注意通过-stripe_path选项指定合适的hierarchical层次,否则activity反标不上。
report_switching_activity -list_not_annotated  //列出没有被反标的对象
#####################################################
# check or update or report power
#####################################################
check_power
update_power   //使用update_power来将其反标
report_power -hierarchy
quit

2.Time-based power analysis

在该模式下,需要提供VCD或FSDB文件,工具会分析峰值功耗,并生成功耗波形等。SAIF格式对此不支持。

流程和Averaged类似。

脚本如下(示例):

Time-Based Power Analysis Mode Script:
#####################################################
# Set the Power Analysis Mode
#####################################################
set power_enable_analysis TRUE
set power_analysis_mode time_based
#####################################################
# link design
##############################################
set search_path "../src/hdl/gate../src/lib/snps . "
set link_library " *core_typ.db"
read_verilog mac.v
current_design mac
link
#####################################################
# set transition time /annotate parasitics
#####################################################
read_sdc ../src//hdl/gate/mac.sdc
set_disable_timing [get_lib_pins ssc_core_typ/*/G]
read_parasitics ../src/annotate/mac.spef
#####################################################
check_timing
update_timing
report_timing
#####################################################
# read switching activityfile
#####################################################
read_vcd -strip_path tb/uut ../sim/mac.vcd
#####################################################
# analyze power
#####################################################
check_power
set_power_analysis_options -waveform_format fsdb -waveform_output vcd  //写出功耗分析文件,文件格式可为fsdb,out
update_power
report_power
quit

至于如何查看功耗曲线图,请待下回讲解


二、VCS生成功耗分析文件

功耗分析文件可通过VCS仿真产生。

1. saif文件的生成

要从RTL或Netlist生成SAIF文件,需要使用toggle系统任务指定需要记录的开关活动信息(时间范围和模块)。

$set_toggle_region:指定记录模块

$toggle_start:开始记录

$toggle_stop:停止记录

$toggle_report:写SAIF文件

testbench测试平台主要是调用门级网表、SDF文件、库SAIF文件。testbench中,用$sdf_annotate(“my. sdf”, dut)命令作SDF标记,以保证时序的正确性,从而得到正确的翻转数目。

比较RTL和门级网表生成的saif文件,可以得出门级网表生成的saif文件更加具体,包含了设计中更多的开关活动信息,提高功耗分析的准确性,同时也意味着增加了Runtime。

门级网表生成的saif文件(示例):

timescale 1ns / 1ps

module MyDesign_tb;

reg clk;

MyDesign uut (
// design ports
);

initial

$sdf_annotate("MyDesign.sdf",uut)
end

always #50 clk = !clk;

initial 
begin

# //read the library saif file 
# //$read_lib_saif("WHATEVER_YOU_NEED.saif");

//read the design saif file
$read_rtl_saif("./MyDesign_fw.saif", "MyDesign_tb.uut");

//monitor gates=ON to record toggles
$set_gate_level_monitoring("ON");

//specify part of the design for which toggle info is collected - for entire design use UUT_DESIGN  
$set_toggle_region("MyDesign_tb.uut");

//start toggle recording
$toggle_start;

clk = 0;

// Have your test bench here
   ........

//done toggle recording
$toggle_stop;

//write out a backward saif file
$toggle_report("MyDesign_bw.saif", 1.0e-9, "MyDesign_tb.uut");

//end simulation
$finish;
end
      
endmodule

(参考:

  1. https://mp.weixin.qq.com/s/toRkh2jSoeYHYTULQ-r2fw?st=B397D77E2F901A6470182E2907607142563FD287D2C127167DCA7562D4691409B1D86815B75C82E619BD011A6D12F096862281451DC635576AFBD5266E50929DED8B4321C296AB7B1DC801AC2AD91F380F600935C9192FCA7FEA98F7F30A6D311B417BA10BE0AE2687CB27D859BF041135D4E96D13C8033F74408760C999EB59C84F1832DDB9355969E22EC4F8DCC81C&vid=1688851264355576&cst=BDBA16244C3A60B94FADE6554CC0FD8D18E1B52B04D32BF3E18686D6C039AD6DB707E7C6063E0F146FD1B52E7560F20A&deviceid=96cb15a7-3b3f-4a05-9fe5-0b3535930007&version=3.0.36.2008&platform=win
  2. http://blog.sina.com.cn/s/blog_59a154290102v5tj.html)

2. VCD文件的生成

vcd文件是通过仿真得到的波形文件,里面记载着待分析模块的所有端口和内部线网的跳变信息。从而确定待分析模块的switching功耗。

门级网表生成的VCD文件(示例):

module testbench;

······
test uut(....);

initial

  $sdf_annotate("test.sdf",uut)

initial begin

  $dumpfile("test.vcd");

  $dumpvars(0,test); //test是要记录信号的模块名,0表示抓取模块内的所有信号,1表示抓取当前层的信号

······

endmodule

总结

本文主要介绍了PTPX的两种功耗分析模式(Averaged/Timed),并给出相应的脚本,另外还介绍了如何通过VCS仿真生成saif/VCD功耗分析波形文件。

  • 45
    点赞
  • 329
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值