)
相关阅读Power Compilerhttps://blog.csdn.net/weixin_45791458/category_13013065.html?spm1001.2014.3001.5482本文将对Power Compiler功耗分析时考虑的三种功耗漏电功耗、内部功耗、切换功耗及它们的计算方式(Non-Linear Power Model, NLPM)进行详细介绍。功耗分类电路中的功耗大致可分为两类静态功耗(Static Power)和动态功耗(Dynamic Power)。静态功耗静态功耗是指当电路不在切换、即处于非活动或静态状态时产生的功耗。静态功耗由多个部分组成其中最大比例来自源极到漏极的亚阈值漏电电流这类漏电是由于降低的阈值电压使单元无法完全关闭而产生的此外当扩散层与衬底之间发生漏电时也会产生静态功耗。因此静态功耗通常也被称为漏电功耗(Leakage Power)。动态功耗动态功耗是指当电路处于活动状态时产生的功耗。只要由于输入激励导致某个线网上的电压发生变化电路就被视为是活动的。即使某个输入线网的电压发生变化但并未引起输出逻辑状态的变化仍可能会产生动态功耗。动态功耗可继续细分为两类内部功耗(Internal Power)和切换功耗(Switching Power)。内部功耗内部功耗是指在单元内部产生的所有功耗。在切换过程中电路通过对单元内部的各种电容进行充放电产生内部功耗。内部功耗包括短路功耗(Short-Circuit Power)即在单元翻转时P型和N型晶体管之间暂时形成的短路电流对于信号转换时间较快的电路短路功耗较小但对于转换时间较慢的电路短路功耗可能占整个单元功耗的30%左右短路功耗还受晶体管尺寸和输出负载电容的影响。在大多数简单的单元中内部功耗主要来自短路功耗而在较复杂的单元中内部电容的充放电可能成为主要的内部功耗来源。切换功耗切换功耗是指驱动单元在其输出端对总负载电容充放电所产生的功耗总负载电容包含了输出端的线网互连电容和被驱动单元的输入引脚电容。由于充放电过程源于逻辑状态的切换因此切换功耗会随逻辑翻转次数的增加而增加。因此切换功耗与输出总负载电容以及逻辑翻转率成正比。图1显示了一个简单的单元并说明了静态功耗和动态功耗的产生位置。图1 功耗的组成功耗计算功耗分析是基于本节的公式进行计算和报告的。Power Compiler使用这些公式并结合在逻辑库中的功耗信息对设计的功耗进行评估。静态功耗Power Compiler通过对设计中所有单元的漏电功耗进行求和来计算设计的总漏电功耗其公式如下逻辑库种可以指定单元的漏电功耗可分为状态无关的漏电功耗和状态相关的漏电功耗。状态无关的漏电功耗可以使用库属性default_cell_leakage_power或库单元属性cell_leakage_power优先级高于库属性指定单元的漏电功耗默认情况下单元的漏电功耗为0。漏电功耗的单位由库属性leakage_power_unit决定。状态相关的漏电功耗使用leakage_power组即可通过布尔表达式来定义不同状态下的漏电功耗状态相关的漏电功耗优先级高于状态无关的漏电功耗。对于每种状态工具将其对应的功耗值乘以该状态所占的时间百分比可以通过翻转活动性推导并进行求和得到该单元的总漏电功耗。如果某一状态在leakage_power组中未定义则工具会使用库属性default_cell_leakage_power或库单元属性cell_leakage_power的值来估算该状态下的漏电功耗贡献。下面展示了一个具体的状态相关的漏电功耗的计算过程。// 逻辑库节选 cell_leakage_power : 4934.853000; leakage_power() { when :!A !B; value : 4934.853000; } leakage_power() { when :!A B; value : 9903.773000; } leakage_power() { when :A !B; value : 8956.541000; } leakage_power() { when :A B; value : 8839.259000; }图2 示意图使用report_power_calculation即可查看具体功耗计算过程如下所示。dc_shell report_power_calculation [get_cells u1] -verbose **************************************** Report : power_calculation u1 -verbose Design : AND Version: W-2024.09-SP2 Date : Fri Jul 25 20:07:31 2025 **************************************** State Dependent Cell Leakage Power Calculation cell: u1 state condition: A B State Dependent Leakage Power 1234. cell leakage power leakage power value * state probability Leakage Power Value 4935. library model: scalar value 4935. (no scaling since the library has no leakage power k-factors) State Probability 0.2500 (estimated) -------------------------------------------------------------------------------- State Dependent Cell Leakage Power Calculation cell: u1 state condition: A B State Dependent Leakage Power 2476. cell leakage power leakage power value * state probability Leakage Power Value 9904. library model: scalar value 9904. (no scaling since the library has no leakage power k-factors) State Probability 0.2500 (estimated) -------------------------------------------------------------------------------- State Dependent Cell Leakage Power Calculation cell: u1 state condition: A B State Dependent Leakage Power 2239. cell leakage power leakage power value * state probability Leakage Power Value 8957. library model: scalar value 8957. (no scaling since the library has no leakage power k-factors) State Probability 0.2500 (estimated) -------------------------------------------------------------------------------- State Dependent Cell Leakage Power Calculation cell: u1 state condition: A B State Dependent Leakage Power 2210. cell leakage power leakage power value * state probability Leakage Power Value 8839. library model: scalar value 8839. (no scaling since the library has no leakage power k-factors) State Probability 0.2500 (estimated) -------------------------------------------------------------------------------- Default Cell Leakage Power Calculation cell: u1 Default Leakage Power 0.000 cell leakage power leakage power value * state probability Leakage Power Value 4935. library model: scalar value 4935. (no scaling since the library has no leakage power k-factors) Default State Probability 0.000 Total Leakage Power for Cell u1 8159. 由于线网a、b使用的是默认的翻转活动性由变量power_default_static_probability和power_default_toggle_rate指定因此四种输入状态的概率都是0.25由于不存在未定义的状态默认漏电功耗的概率为0。动态功耗内部功耗逻辑库中的internal_power组及其相关的属性和子组定义了引脚的内部功耗非线性查找表(NLPM)及其缩放因子单元的内部功耗是该单元中所有输入与输出引脚的内部功耗之和。关于查表计算的过程 内部功耗非线性查找表类似于非线性延迟查找表可以参考下面的博客。Design Compiler线性延迟模型和非线性延迟模型https://blog.csdn.net/weixin_45791458/article/details/146131977?ops_request_misc%257B%2522request%255Fid%2522%253A%2522caa8a27e7d5fb63019b47e3552950773%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_idcaa8a27e7d5fb63019b47e3552950773biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-146131977-null-null.nonecaseutm_term%E9%9D%9E%E7%BA%BF%E6%80%A7spm1018.2226.3001.4450值得注意的是内部功耗非线性查找表可以是一维、二维和三维查找表表1显示了这些查找表的类型和适用引脚方向并说明了它们的索引方式。表格类型引脚方向索引一维查找表输入输入引脚转换时间输出总负载电容二维查找表输出输入引脚转换时间和总负载电容三维查找表输出输出引脚转换时间和两个输出引脚的总负载电容适用于触发器对于内部功耗一般考虑其状态相关形式下面展示了输入和输出引脚的内部功耗计算方式。需要注意的是其中的指的是由对应输入引脚导致的输出引脚翻转率。当一个信号发生转换时上升沿转换所对应的内部功耗与下降沿转换所对应的内部功耗是不同的允许根据转换方向分别指定上升沿和下降沿的查找表。下面展示了一个具体的状态相关的内部功耗的计算过程依旧以图2为例。// 逻辑库节选 pin(B) { direction : input; internal_power() { power(energy_template_7x1) { index_1 (0.012, 0.02, 0.034, 0.062, 0.118, 0.232, 0.46); values (0.002054, 0.002069, 0.002110, 0.002177, 0.002289, 0.002467, 0.002803); } } } pin(Y) { direction : output; internal_power() { related_pin : A; power(energy_template_7x7) { index_1 (0.012, 0.02, 0.034, 0.062, 0.118, 0.232, 0.46); index_2 (0.0005825, 0.001398, 0.0031455, 0.006524, 0.0133975, 0.0271445, 0.054755); values ( \ 0.002054, 0.002069, 0.002110, 0.002177, 0.002289, 0.002467, 0.002803, \ 0.002057, 0.002069, 0.002106, 0.002172, 0.002284, 0.002462, 0.002793, \ 0.002115, 0.002119, 0.002143, 0.002196, 0.002302, 0.002481, 0.002801, \ 0.002304, 0.002288, 0.002287, 0.002319, 0.002406, 0.002582, 0.002917, \ 0.002819, 0.002759, 0.002699, 0.002695, 0.002749, 0.002907, 0.003230, \ 0.003988, 0.003871, 0.003768, 0.003721, 0.003648, 0.003748, 0.004035, \ 0.006493, 0.006291, 0.006050, 0.005887, 0.005845, 0.005715, 0.005946); } } internal_power() { related_pin : B; power(energy_template_7x7) { index_1 (0.012, 0.02, 0.034, 0.062, 0.118, 0.232, 0.46); index_2 (0.0005825, 0.001398, 0.0031455, 0.006524, 0.0133975, 0.0271445, 0.054755); values ( \ 0.002040, 0.002056, 0.002098, 0.002168, 0.002282, 0.002461, 0.002787, \ 0.002031, 0.002044, 0.002083, 0.002153, 0.002263, 0.002448, 0.002783, \ 0.002062, 0.002069, 0.002097, 0.002159, 0.002267, 0.002450, 0.002784, \ 0.002195, 0.002188, 0.002198, 0.002242, 0.002342, 0.002525, 0.002852, \ 0.002651, 0.002607, 0.002552, 0.002571, 0.002645, 0.002806, 0.003137, \ 0.003732, 0.003639, 0.003561, 0.003546, 0.003499, 0.003623, 0.003931, \ 0.006131, 0.005957, 0.005758, 0.005635, 0.005639, 0.005545, 0.005807); } } }使用report_power_calculation即可查看具体功耗计算过程如下所示。dc_shell report_power_calculation [get_cells u1] -verbose **************************************** Report : power_calculation u1 -verbose Design : AND Version: W-2024.09-SP2 Date : Fri Jul 25 20:07:31 2025 **************************************** Pin Internal Power Calculation cell: u1 pin: B Rise Pin Internal Power 0.0001016 pin internal power internal energy * pin toggle rate Rise/fall internal energy per transition 0.002032 library model: NLPM table variables: X input_net_transition 0.000 relevant portion of lookup table: (X) 0.0120000 (X) 0.0200000 (Y) 1.0000000 (Z) 0.0020540 (Z) 0.0020690 Z A B*X A 0.0020315 B 0.0018750 Z 0.0020315 (no scaling since the library has no internal power k-factors) Rise Pin Toggle Rate 0.05000 rise pin toggle rate 0.5 * net toggle rate net toggle rate 0.1000 (default value) Fall Pin Internal Power 0.0001016 pin internal power internal energy * pin toggle rate Rise/fall internal energy per transition 0.002032 library model: NLPM table variables: X input_net_transition 0.000 relevant portion of lookup table: (X) 0.0120000 (X) 0.0200000 (Y) 1.0000000 (Z) 0.0020540 (Z) 0.0020690 Z A B*X A 0.0020315 B 0.0018750 Z 0.0020315 (no scaling since the library has no internal power k-factors) Fall Pin Toggle Rate 0.05000 fall pin toggle rate 0.5 * net toggle rate net toggle rate 0.1000 (default value) Total Internal Power for Pin u1/B 0.0002032 Path Dependent Pin Internal Power Calculation cell: u1 pin: Y path source: A Path Dependent Rise Pin Internal Power 5.061e-05 pin internal power internal energy * pin toggle rate Rise/fall internal energy per transition 0.002036 library model: NLPM table variables: X input_net_transition 0.000 Y total_output_net_capacitance 0.000 relevant portion of lookup table: (X) 0.0120000 (X) 0.0200000 (Y) 0.0005825 (Z) 0.0020540 (Z) 0.0020570 (Y) 0.0013980 (Z) 0.0020690 (Z) 0.0020690 Z A B*X C*Y D*X*Y A 0.0020356 B 0.0006429 C 0.0239116 D -0.4598441 Z 0.0020356 (no scaling since the library has no internal power k-factors) Path Dependent Rise Pin Toggle Rate 0.02486 (estimated) Path Dependent Fall Pin Internal Power 5.061e-05 pin internal power internal energy * pin toggle rate Rise/fall internal energy per transition 0.002036 library model: NLPM table variables: X input_net_transition 0.000 Y total_output_net_capacitance 0.000 relevant portion of lookup table: (X) 0.0120000 (X) 0.0200000 (Y) 0.0005825 (Z) 0.0020540 (Z) 0.0020570 (Y) 0.0013980 (Z) 0.0020690 (Z) 0.0020690 Z A B*X C*Y D*X*Y A 0.0020356 B 0.0006429 C 0.0239116 D -0.4598441 Z 0.0020356 (no scaling since the library has no internal power k-factors) Path Dependent Fall Pin Toggle Rate 0.02486 (estimated) -------------------------------------------------------------------------------- Path Dependent Pin Internal Power Calculation cell: u1 pin: Y path source: B Path Dependent Rise Pin Internal Power 5.069e-05 pin internal power internal energy * pin toggle rate Rise/fall internal energy per transition 0.002039 library model: NLPM table variables: X input_net_transition 0.000 Y total_output_net_capacitance 0.000 relevant portion of lookup table: (X) 0.0120000 (X) 0.0200000 (Y) 0.0005825 (Z) 0.0020400 (Z) 0.0020310 (Y) 0.0013980 (Z) 0.0020560 (Z) 0.0020440 Z A B*X C*Y D*X*Y A 0.0020389 B -0.0008571 C 0.0251386 D -0.4598798 Z 0.0020389 (no scaling since the library has no internal power k-factors) Path Dependent Rise Pin Toggle Rate 0.02486 (estimated) Path Dependent Fall Pin Internal Power 5.069e-05 pin internal power internal energy * pin toggle rate Rise/fall internal energy per transition 0.002039 library model: NLPM table variables: X input_net_transition 0.000 Y total_output_net_capacitance 0.000 relevant portion of lookup table: (X) 0.0120000 (X) 0.0200000 (Y) 0.0005825 (Z) 0.0020400 (Z) 0.0020310 (Y) 0.0013980 (Z) 0.0020560 (Z) 0.0020440 Z A B*X C*Y D*X*Y A 0.0020389 B -0.0008571 C 0.0251386 D -0.4598798 Z 0.0020389 (no scaling since the library has no internal power k-factors) Path Dependent Fall Pin Toggle Rate 0.02486 (estimated) Total Internal Power for Pin u1/Y 0.0002026 Total Internal Power for Cell u1 0.0004058使用get_switching_activity命令即可查看翻转活动性可以看出输出线网的转换率就是上述报告中四种转换率之和4*0.024860.09944。dc_shell get_switching_activity [get_nets y] (y: probability 0.2507, toggle_rate 0.0995, type propagated)切换功耗切换功耗的计算比较简单与漏电功耗和内部功耗不同的是Power Compiler在线网上计算切换功耗计算公式如下所示。下面展示了一个具体的切换功耗的计算过程。dc_shell report_power_calculation [get_nets y] **************************************** Report : power_calculation y Design : AND Version: W-2024.09-SP2 Date : Fri Jul 25 23:00:46 2025 **************************************** Net Switching Power Calculation net: y driver: u1/Y Switching power 0.000 net switching power switching energy * net toggle rate Switching Energy Per Transition 0.000 switching energy 0.5 * capacitance * voltage ^ 2 total net capacitance 0.000 voltage 1.100 Net Toggle Rate 0.09946 (propagated)动态功耗的单位之前说到漏电功耗的单位由库属性leakage_power_unit决定而动态功耗的单位需要按步骤进行计算假设存在以下的库属性。capacitive_load_unit (0.35, ff); voltage_unit: 1V time_unit: 1ns;1、使用逻辑库中的电容单位、电压单位和时间单位进行以下计算。2、从MKS单位范围中选择一个单位使乘数能转换为整数例如nW。3、从1、10、100等10的幂中选择一个最接近转换后整数的幂例如100。4、将单位和幂组合得到动态功耗的单位100nW。使用CCSP描述功耗信息本文只介绍了使用NLPM计算功耗的方式更先进的CCSP(Composite Current Source Power Model)包含了用于功耗与电源轨分析及优化的统一库数据从而实现一致的分析结果与简化的分析流程通过在逻辑库中捕获电流波形可以更准确地识别潜在的问题区域。如需了解有关CCSP及其生成方式的更多信息请参阅《Library Compiler User Guide》。