通常情况下IP提供商会提供多套不同的单元库,按照不同的VT值进行设计。如TSMC 90nm LP工艺的单元库,就会提供普通VT、High VT、Low VT以及Ultra Low VT四套单元库。下面TSMC 90nm LP的四套单元库进行分析:
area
(um*um)Average leakage(nW)Rise delay (0.04pf,ns)Typical Rise Energe (0.04pf,pJ)dbtcbn90lphdbwphvttc BUFFD1BWPHVT2.19520.0170.24440.002716dbtcbn 90lphdbwptcBUFFD1BWP2.19520.2140.2371760.00272dbtcbn90lphdbwplvttc BUFFD1B WPLVT2.19520.4120.2171840.002616dbtcbn90lphdbwpulvttc BUFFD1BWPULVT2.1952 5.0550.1935560.003624
表格中dbtcbn90lphdbwptc是正常VT的库,dbtcbn90lphdbwphvttc是High VT的库,dbtcbn90lphdbwplvttc是Low VT的库,dbtcbn90lphdbwpulvttc是Ultra Low VT的库。分析时使用1个门的Buffer来进行,面积上都是2.195um^2。
静态漏电功耗,High VT库中,1个门只有0.017nW,甚至比SMIC18 METRO 1个门的漏电功耗还低(参看3.2.1)。随着VT的减小,静态功耗逐渐变大,到Ultra Low VT时,其静态功耗,1个门就有5.055nW。但也因为VT很高,High VT的Buffer延时很慢,比Ultra Low VT减慢了约27%。
从表格看来,延时的变化并不非常明显,如果在时序上要求不是很高,则尽量还是需要使用High VT的库来实现
3.2.2.1. 常用EDA工具中Multi-VT的实现方法
从Synopsys Multi-VT实现过程主要是在逻辑综合(Logic Synthesis)阶段。DC完成Multi-VT的实现,主要是在target_library中找出可以使用的所有逻辑单元,并在满足时序约束的情况下,使用最低leakage power的单元进行实现。
其实现步骤可以如下:
#读入不同VT的逻辑单元作为target library,当DC有充分的选
择空间
set_target_library {dbtcbn90lphdbwptc.db
dbtcbn90lphdbwphvttc.db \
dbtcbn90lphdbwplvttc.db dbtcbn90lphdbwpulvttc.db}
#读入HDL代码
read_verilog design_include.v
#link design
current_design design_top
uniquify
11 / 26
link
#读入约束
source design_constraint.tcl
#其他设置
……
#设置最大漏电电流,该设置必须有,否则优化过程不考虑漏电的
优化
set_max_leakage_power 0 mw
#开始编译
compile_ultra
由于综合时,时序信息并不完全准确,特别是setup类的时序。因此可以对setup时序做稍紧一些的约束,使结果进入PR工具后还能够满足时序,如果进入PR后仍然无法满足setup时序,PR工具也可以利用类似的原理进行优化。
如在IC Compiler里,在布线后优化时可以使用如下语句来进行优化:
physopt –preserve_footprint –only_power_recovery –post_route –incremental
这里设置了-preserve_footprint以及-only_power_recovery,因此只是针对相同footprint的单元做漏电功耗优化,也就是说如果某个使用了High VT X2的Buffer需要减小延时,则可以替换成Low VT X2的Buffer,这样做可以保持原有的布线结果。
当出现Multi-VT的单元库后,每个单元库都会多一个default_threshold_voltage_group以及threshold_voltage_group属性来说明该单元库是High VT、标准VT还是Low VT。可以利用report_threshold_voltage_group(DC和IC Compiler都支持)指令报出设计中每种单元库单元占整个设计的百分比,如High VT的单元库占60%,标准VT占25%,等。这样做可以使设计者了解不同VT对自己设计的影响,如果速度不快,则Low VT的库可能占用很少,甚至没有使用,那么完全可以在设计过程中直接不使用该库。
如果库中没有default_threshold_voltage_group变量,我们可以在DC中设置:
set_attr -type string dbtcbn90lphdbwphvtwc.db: dbtcbn90lphdbwphvtwc default_threshold_voltage_group HVT
3.2.3 时钟门控减小不必要的动态功耗
时钟门控单元的插入在3.1.2已经有所描述,这里就不多进行描述了。同样的,标准单元库必须提供相应Cell的库才可以实现。
3.2.4 多供电电压,实现动态功耗与时序的平衡(Multi-Voltage)
我们知道,降低驱动电压VDD,是减小动态功耗最快的方法,因此在满足时序的情况下,适当降低驱动电压,可以有效的减小动态功耗。而设计中可以使用多驱动电压的设计方法,对于速度要求快的电路,供高一些的驱动电压,如 1.3V,而速度要求不高的模块,则只需要供比较低的驱动电压,如1.0V。
对于逻辑综合来说,DC中,首先需要对不同电压域的电路设置不同的operating_condition,综合工具就可以对该电压域电路进行初步分析和优化了。如果使用UPF,则可以直接使用load_upf,工具会根据UPF的描述自动寻找相应的库文件进行分析。如下所示:
set target_library “slow_14V slow 10V
……
read_verilog design_include.v
current_design design_top
link
#set_operating_condition –max slow_10V –max_library slow_10V
#uDesign/uDMA速度快,需要使用1.4V供电
#set_operating_condition –max slow_14V –max_library slow_14V
–object_list \
12 / 26
#uDesign/uDMA
load_upf power.upf
……
check_mv_design
compile –scan
check_mv_design
……
这里check_mv_design主要是检查UPF对设计的描述是否正确,在compile之后再做一次是为了查看compile后,电路结构域UPF的描述是否正确。
接着,需要在不同电压电路之间,添加Level_shifters,进行电压转换。如下所示:
check_level_shiftersinsert_level_shifters –all_clock_nets -verbose
DC会根据不同电压域设置operating condition中voltage的数值或者UPF中的描述,查找Level Shifter Cell中input_voltage_range和output_voltage_range满足这些电压域需求的元件,在2个电压域的数据交互信号上添加Level Shifter Cells。
3.2.
4.1. 常用EDA工具中Multi-VT的实现方法
Level Shifters主要是在多供电电压设计中,在2个不同电压域之间进行电压转换的器件,将某个电压域输出的逻辑电平转换成另外一个电压域可以识别的逻辑电平。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说医药卫生数字集成电路低功耗物理实现技术与UPF(5)在线全文阅读。
相关推荐: