低功耗技术及其后端物理实现--多阈值电压技术
本文转自:自己的微信公众号《集成电路设计及EDA教程》
理论:
漏电流随着阈值电压Vt的增加而指数下降,如下图所示:
我们可以通过在不同的时序路径上使用不同阈值电压的标准单元来降低漏电流。
低阈值电压标准单元:速度快、泄漏功耗高;
高阈值电压标准单元:速度慢、泄漏功耗低。
综合和布局布线工具可以根据功耗和时序的需求自动选择不同阈值的标准单元。例如,在时序的关键路径上采用低阈值电压单元,而在非关键路径上采用高阈值电压标准单元。
后端物理实现:
1、在设置MCMM的时候设置至少有一个scenario被用来优化leakage power:
set_scenario_status -leakage_power true
2、多阈值电压库单元由threshold_voltage_group属性标识。给定的库单元可能具有低阈值电压、常规阈值电压或高阈值电压。
如果在我们使用的参考库不具有threshold_voltage_group属性,则可以使用set_attribute命令给库里面的Cell设置这些属性。例如,要将名称以FAST开头的所有Cell的threshold_voltage_group属性设置为LVt(这里只是自己定义的一个属性,可以不必和真实的阈值种类相匹配),可以用下面的命令:
icc2_shell> set_attribute -objects [get_lib_cells */FAST*] \
-name threshold_voltage_group -value LVt
注意:
在get_lib_cells命令中引用库时,必须使用参考库的名称而不是逻辑库(.db库)的名称。要搜索所有库,需要在库名上使用星号(*)。
3、前面为库里面的Cell指定了threshold_voltage_group属性,但是工具并不能准确知道哪种属性是常规阈值,哪种是高阈值,哪种是低阈值。要标识与每个threshold_voltage_group属性值关联的阈值电压类型,可以使用下面的命令:
set_threshold_voltage_group_type
必须指定属性值并使用-type选项来指定阈值电压类型,该阈值电压类型是low_vt(低阈值电压),normal_vt(正常阈值电压)或high_vt(高阈值电压)之一。
例如,指定那些threshold_voltage_group属性值为LVt的Cell为低阈值电压Cell,可以使用以下命令:
icc2_shell> set_threshold_voltage_group_type -type low_vt LVt
两者不用非得对应,LVt只是一个自己打的标识或者库里面定义的一个标识。在设计库里面没有LVt的时候我们还可以把SVt的Cell标识成low_vt,也就是说两者没有必要一致,只是为了方便让工具识别出这种Cell在后边限制这种Cell的百分比。
注意:
set_threshold_voltage_group_type命令指定的设置未保存在Block中,必须在IC Compiler II工具的每个session中指定。
4、用下面的命令指定设计中的低阈值电压单元在设计中所占的最大比例
set_max_lvth_percentage
5、通过设置以下阈值电压百分比优化:
用set_app_options命令将以下两个应用程序选项设置成对应的值:
opt.power.leakage_type percentage_lvt
opt.power.mode leakage
6、做好以上设置之后工具便会在执行以下命令时做leakage power的优化:
place_opt , refine_opt , clock_opt