晶圆厂(FAB)提供的library一般有HVT/SVT/LVT,在cell delay方面,HVT>SVT>LVT; 而在power方面, HVT<SVT<LVT
一般出于功耗的考虑,综合时尽量使用HVT,避免使用LVT,甚至完全禁用LVT;如果timing无法满足,则可以考虑使用部分LVT cell。使用LVT cell有两种做法,一种是前端综合时完全禁用LVT,后端在修timing的时候,进行LVT cell的替换;另外一种就是在综合时,放开LVT cell的使用,尽量满足timing的要求。
这篇文章主要讲如何在综合的时候使用Multi-VT library,以及如何查看各个VT library在综合后的gate netlist中的占比(以Synopsis的Design Compiler为例)
1. 在综合时使用Multi-VT library
在target_library中加入相关VT的library
譬如,原来只有HVT的target_library:
set target_library "hvt_wc.db"
现在要加入LVT library,改成下面这样既可:
set target_library "hvt_wc.db lvt_wc.db"
2. 限制LVT or SVT cell的占比
可以使用set_multi_vth_constraint来约束LVT/SVT cell使用的比例,不过从实际应用来看,效果一般。建议不加这个约束,让Design Compiler根据timing driver自主决定使用LVT/SVT的比例
set_multi_vth_constraint -lvth_percentage 10.0 -lvth_groups {lvt} -type soft/hard
-type soft/hard: default是soft,表示timing优先,Design Compiler在满足timing的情况下,尽量满足LVT占比要求;如果改成hard,则以LVT占比为优先,这样timing可能会受到影响
3. 查看各个VT library在综合后gate netlist中的占比
我们比较关心使用LVT library后,LVT cell在整个gate netlist中的占比,如果占比过大,功耗方面可能没法接受。
可以使用report_threshold_voltage_group来查看各个VT library在综合后gate netlist中的占比
在使用这个command之前,要先设置HVT/LVT library,让tool可以清晰的知道要检查和区分的cell的类型
set_attribute [get_libs hvt_wc] -type string default_threshold_voltage_group hvt
set_attribute [get_libs lvt_wc] -type string default_threshold_voltage_group lvt
report_threshold_voltage_group -lvth_groups {hvt lvt}