OCV全称是on chip variation,指的是在同一片wafer上,因为片上工艺的误差,导致不同位置的chip性能不一样。另外对于同一块chip,不同位置上的同一类cell的性能也会有差异。这些差异所影响最大的就是timing相关的东西,delay、transition什么的都会有所影响。为此我们引入OCV的概念,用来在设计阶段模拟这些片上误差。
举一个具体的例子让大家更好理解OCV的概念,比如一个cell的lib中的延时是10ns,同样的电路,同样的input和output,这颗cell做出来的实际延时可能是9.9ns,也可能是10.1ns,一般不会刚刚好就是某一个确定的数值,而是会在10ns左右浮动。注意这个浮动并不是PVT影响的,纯粹是片上工艺偏差所带来的,就是说在同一个corner下,因为有OCV,一个cell的delay就不是固定的值。这对我们timing的分析至关重要,如果不考虑OCV的影响,所分析出来的timing结果会过于乐观。而我们一般signoff的时候都希望芯片在最悲观的时候还可以正常工作才行。
为此,最传统、朴素的想法就是给chip中的所有cell加上一个derate值,所有的delay都根据这个derate值来缩放。什么意思呢,比如说在算setup检查的时候,launch path要delay最大,capture path要delay最小,我们就放大launch path上所有cell的delay值,减小capture path上所有cell的delay值。也就是说假设derate设为0.1,那么launch path和data path所有cell的delay要在原来lib的基础上乘1.1,capture path上的cell要乘0.9。这样做出来的setup检查才足够悲观,如果要是hold检查则加的derate正相反。一般来说,我们会分别定义setup和hold检查所用的derate值,而其中的early derate和late derate也会分别定义,并且对于每一种情况,clock path上的derate和data path上的derate也会分别定义。具体的值是怎么来的我不知道,可能是经验,也可能是经过复杂的模拟得出的。
好了,到这里已经介绍完了OCV的基本内容了,其中蕴含的基本思想已经介绍完毕。但这是远远不够的,因为现在用的OCV已经不再是传统的直接加上一个derate那么简单了,随着工艺的进步,人们后来又用了AOCV,目前又是主流POCV/SOCV。我这里就快速简要介绍一下这两种模式。
AOCV是advanced OCV,在传统OCV的基础上加入了cell级数和距离的考量,认为一个cell级数越深,和前一级cell距离越大,derate相应越大,反之derate越小。等于说AOCV模式会根据具体的design来动态调整derate值。而POCV是认为所有的delay都是一个正态分布,我们算path的delay时是用delay的分布来加加减减,最终得出的整条path delay也对应一个分布,在最悲观的情况下,如果需要取最大delay就用这个分布偏大的某个点,一般是mean值加3倍sigma;最小delay就是mean值减3倍sigma。而现在,最新的技术已经不再用标准的高斯分布来模拟了,会再在原高斯分布的基础上加一定偏移量,得出一个不对称的分布来模拟delay。
有关POCV的内容不是三言两语就能讲完的,之后可能会再写专门介绍POCV。
微信公众号:伟酱的芯片后端之路。