完成本模块后,您应能:
• 控制漏电功耗、动态功耗或总功耗的优化
• 应用多比特 banking 技术
• 控制ICG(电流控制单元)插入以降低动态功耗
功耗
CMOS电路中消耗的功率可以分为两大类:
• 静态功耗或漏电功耗
■ 当电路处于空闲状态时,由于漏电流造成的功耗
■ 漏电随着阈值电压的降低呈指数增长
• 动态功耗
■ 当电路处于活动状态,即向电路施加激励时消耗的功率
■ 内部功耗(-> Cell)
- 模拟了电路在开关过程中为充放电内部电容所消耗的功率
- 包括在电源轨之间暂时形成的短路路径所消耗的功率,也称为横梁功耗或瞬态功耗
■ 开关功耗(-> Net)
- 为充放电负载电容所消耗的功率
漏电功耗优化
• 权衡取舍:
更快速度、更高漏电的低阈值(low-Vth)单元,与
更慢速度、更低漏电的高阈值(high-Vth)单元之间。
• 漏电功耗成为整体优化成本的一个构成部分。
• 应提供多阈值(Multi-Vth/L)库以供使用。
• 在启用漏电功耗考量的场景中予以考虑。
1set_scenario_status {func.ff_125c} \
2-active true -leakage_power true
■ 控制计算漏电功耗所采用的方法:
power.leakage_mode ;# 默认值state
Vth = 阈值电压;Lshort/Long = 短/长沟道长度。
漏电功耗数据存储在标准单元库的表中。
Fusion Compiler 使用块中库单元的cell_leakage_power属性值来计算漏电功耗。如果某个单元没有cell_leakage_power属性,则工具会使用针对该单元的库级别default_cell_leakage_power属性值,否则使用0。
以下是可用于计算漏电功耗的方法(通过设置power.leakage_mode来指定):
平均法(Average):使用此方法时,计算基于所有状态的等权重概率。
无条件法(Unconditional):使用此方法时,计算纯粹基于属性值。
状态法(State):使用此方法时,计算基于每个实例的状态,该状态源自开关活动(见下几页)。
百分比漏电优化也可用,但强烈不推荐使用,因为它不能与总功耗优化同时使用。最初引入这一方法是因为多个库中没有漏电功耗的具体数值,因此工具会盲目地减少低阈值电压(LVT)单元的使用,或者限制LVT单元的使用数量。
动态功耗优化
• 多种技术手段:
■ 尺寸调整、引脚交换、(去)组合、面积恢复
■ 数据路径minPower优化
■ 多比特 banking
■ 低功耗布局
■ 时钟门控、自门控
• 在启用动态功耗优化的场景中予以考虑
1set_scenario_status (func.tt_60c) \
2-active true -dynamic_power true
总功耗优化
• 在先进工艺节点中,漏电功耗和动态功耗的趋势可能不同。
■ 用HVth单元替换LVth单元可以改善漏电功耗,但可能恶化单元内部功耗。
■ 过度的尺寸缩减可以改善漏电和开关功耗,但会降低转换速度,从而恶化单元内部功耗。
• Fusion Compiler 执行以下操作:
■ 总功耗感知的时序优化 - 以最低的功耗成本修复时序问题。
■ 总功耗恢复利用漏电和动态功耗作为成本函数。
当启用总功耗优化时,目前没有方法可以优先考虑漏电功耗优化与动态功耗优化之间的权衡。
功耗计算需要准确的开关活动信息:
• 通过读取仿真生成的SAIF文件来应用(推荐做法):
1set_scenario_status -dynamic_power true -leakage_power true func.tt_60c
2read_saif design_sim.saif -scenario func.tt_60c
■ 或者,通过“手动”方式对主要输入端口和黑盒输出端口应用翻转信息:
1current_scenario func.tt_60c
2set_switching_activity [get_ports "rst scan_en"] \
3-toggle_rate 0.0 -static_probability 0.0
4set_switching_activity [get_ports a] \
5-toggle_rate 0.02 -static_probability 0.7
6set_switching_activity [get_ports b] \
7-toggle_rate 0.06 -static_probability 0.3
■ 未注解的点将使用默认的开关活动(参见备注)。
• Fusion Compiler会将开关活动信息传播到整个设计中。
SAIF(Switching Activity Interchange Format)是一种开放标准。
以下是SAIF中使用的标准术语:
切换计数(Toggle Count, TC):切换是指逻辑状态的转换(0变为1或1变为0)。切换计数(TC)是这种切换的总数。
切换速率(Toggle Rate, Tr):单位时间内切换的次数(通常是仿真持续时间)。Tr等于TC除以持续时间。Synopsys提供了一个实用工具,用于将VCD(IEEE标准)转换为SAIF。
toggle_rate
指定开关活动中的切换速率值。该速率是一个浮点数,表示信号在一段时间内发生的无毛刺的0->1和1->0转换次数。您可以使用-period选项指定该时间段。或者,您可以使用-base_clock选项注解一个相关的时钟,此时指定的切换速率是相对于该相关时钟周期的。
static_probability
静态概率值表示信号处于逻辑状态'T'的时间百分比。例如,如果静态概率为0.25,则表示信号在25%的时间内处于逻辑状态'1',剩余75%的时间处于逻辑状态'0'。