OCV的概念对于数字后端设计来说是非常重要的基础概念,读过小编文章的同学一定都不陌生。如果对此概念还不太熟悉,可以回顾以下两篇文章:
我们知道当工艺来到10nm以下时,variation变得更加复杂,而普遍应用在先进工艺下的高性能计算决定了设计本身不能使用过约束的方法来实现时序的收敛,因此如何合理地模拟variation变成了时序约束的重要课题。
我们知道7nm开始普遍引入POCV/SOCV的概念,而不同的signoff方式其实会使用不同的方法如:flat, pocv file, LVF,guardband, spatial POCV等。今天与大家一起分享一些先进工艺下典型的OCV设置包含哪些部分,以及各个部分是如何反映到设计中的。
下面的表格列举了典型的7nm工艺中可能存在的OCV组成,以及各个组成部分可选的signoff方法。
可以看到我们常说的POCV其实只是整体OCV组成的一部分,而且主要是工艺偏差(process variation)的部分。除此之外还有电压与温度,金属线以及可能使用的spatial OCV。那么这些部分具体是如何设置的呢?
工艺(Process)
这里的工艺的偏差特指对cell的影响,因为针对wire的工艺偏差会稍后介绍,将统一反映在wire derate上。cell的这部分工艺偏差,一般来说只要读取了LVF的liberty库并在timing分析中打开了POCV的开关,那么工具将会自动进行POCV的分析,并不需要做额外的设置。但是需要注意的是,POCV的sigma值可能需要根据实际需求做改动。如果sigma超过3.0精度可能有一定影响。
# ICC2
set_app_options -name time.pocvm_corner_sigma -value 3.0
# PT
set_app_var timing_pocvm_corner_sigma 3.0
set_app_var timing_pocvm_report_sigma 3.0
# Innovus Stylus
set_socv_reporting_nsigma_multiplier -setup 3.0 -hold 3.0
set_db timing_nsigma_multiplier 3.0
电压(Local Voltage)& 温度(Local Temperature)
电压和温度的OCV一般会在工艺的偏差之上额外得到体现,该处的数值一般通过spice仿真得到不同温度和电压变化下的derate数值,最终形成不同类型的cell在不同PVT条件下的derate表格,在实际应用中通过查表的方式得到每种类型的lib cell对应的derate。对此不同工具的设置方法可能略有不同,但是最终结果并没有根本区别。此处有个pocv guardband的概念,但是其作用基本就是在原来的POCV derate的基础上乘以guardbandderate。Innovus里面并不需要特殊选项来实现类似的功能。
# ICC2 & PT
set_timing_derate -pocvm_guardband -clock -cell_delay -clock -early $value $lib_cell
set_timing_derate -pocvm_guardband -data -cell_delay -data -late $value $lib_cell
# Innovus Stylus
set_timing_derate -delay_corner $delay_corner -cell_delay -clock -early $value $lib_cell
set_timing_derate -delay_corner $delay_corner -cell_delay -data -late $value $lib_cell
金属线(Wire)
我们知道先进工艺下的wire delay已经是时序收敛过程中不可忽视的部分,因此对wire也会有额外的OCV。不同的RC corner应该有不同的wire derate,当然也可以选择所有RC corner都加一个统一的数值,这个数值可能比较悲观,代价就是时序收敛需要付出更多的时间和精力。wire的derate一般采用flat的方式,也就是类似于最早的OCV设置方法,将整个设计中所有的net统一设置一个相同的derate数值:
# ICC2 & PT
set_timing_derate -delay_corner $delay_corner -net_delay -early [expr 1.0 - $x]
set_timing_derate -delay_corner $delay_corner -net_delay -late [expr 1.0 + $x]
# Innovus Stylus
set_timing_derate -corners $corner -net_delay -early [expr 1.0 - $x]
set_timing_derate -corners $corner -net_delay -late [expr 1.0 + $x]
Spatial POCV
关于Spatial POCV,据小编所知并不是所有的公司都会用。以下是SPOCV文件中的内容,可以看到和AOCV的table比较类似,会有一个根据distance得出的额外的derate数值。将该文件用read_ocvm命令读取即可。
此外Innovus中还需要做一些特殊的设置来开启该项分析:
# ICC2 & PT
read_ocvm distance.table
# Innovus Stylus
create_library_set -socv $socv_files
set_db timing_enable_spatial_derate_mode true
set_db timing_spatial_derate_distance_mode bounding_box/chip_size
结果
从结果上来说,最终我们看到的timing path上的derate可能如下图所示:LVF/POCV文件贡献部分cell derate (α,β分属clock和data),voltage和temperature额外贡献部分derate(X, Y, 可能只需要加在launch/capture一边即可),最后再加上launch/capture单边或双边的wire derate,组成完整的OCV设置。
总结:以上就是根据小编的项目经验总结的一套OCV设置策略。当然不同公司针对同种工艺可能采用不同的策略,比如是否选用SPOCV,使用LVF还是POCV文件等都有可能不同。希望大家可以对照着自己公司的设置来分析项目中采取了哪些OCV方法,以便加深对timing signoff的理解,对面试也更有帮助~
来源:数字后端设计芯讲堂
作者:数字后端设计芯讲堂
推荐阅读
- 后端进阶系列:Setup&Hold互卡问题和Useful Skew的影响
- 后端进阶系列:Innovus+ICC2对比7nm工艺的后端实现(QoR篇)
- 后端进阶系列:Innovus+ICC2对比7nm工艺的后端实现(物理篇)
如果大家有任何后端技术与职业发展方面的问题,抑或关于数字后端感兴趣的技术话题想要了解和探讨,欢迎关注我的知乎专栏: 数字IC后端设计工程师修炼之路
同时欢迎关注微信公众号:数字后端芯讲堂,一起探讨技术,共同提升!
本极术专栏也会同步更新芯片设计后端的技术干货,也请关注数字IC后端设计工程师修炼之路。