阎浮提 · 2021年01月11日

后端进阶系列:POCV的应用和结果分析

OCV大家应该都了解,对应的AOCV想必也不陌生。之前小编也专门介绍各类OCV的概念,如果还有同学不太了解则可以温习一下这两篇文章:

后端基础概念:各种OCV一网打尽(上篇)!
后端基础概念:各种OCV一网打尽(下篇)!

在工艺进入7nm及以下之后,又出现了POCV/SOCV等概念来模拟越来越复杂的variation。今天我们就一起来了解一下POCV的实际应用。一般来说设计中的POCV有两个主要来源:POCV文件和LVF库。二者有何区别又有什么联系呢?

POCV文件

和AOCV文件类似,POCV文件也是一种特定的文本文件。对于每一种类型的标准单元库,其不同PVT条件均有不同的POCV文件。之前的文章中我们讲过,在使用POCV文件的情况下,cell delay的计算遵从如下公式,其中P代表正态分布,而C称为POCV coefficient:

# POCV参数计算delay(左右划动)
delay = nominal_delay + (C * nominal_delay) * P

而POCV文件中所能查到的内容正是上述公式中的参数C。一般在同一个PVT条件下的某个cell,都会有late-rise, late-fall, early-rise, early-fall等四种参数,这四种参数分别应用在setup和hold的rise/fall分析中。下图中展示了某一个buffer在ff/0.825v/0c条件下的四种POCV参数值:

image.png

通过POCV文件得到上述参数C后工具即可计算出不同cell在不同条件下的delay。

LVF库文件

尽管POCV文件可以获得POCV分析所需要数据,但是在实际项目中小编观察到LVF库的应用更多。所谓LVF库是Liberty Variation Format的缩写,其主要特点是把POCV variation的相关参数集成在.lib库文件中。在之前的文章中讲过,LVF环境下的POCV delay计算公式如下:

# LVF条件下delay计算
delay = nominal_delay + σ * P

其中σ(sigma)可以直接从LVF库文件中获取。那么sigma是如何定义在.lib库文件中呢?目前根据不同的variation模型主要分为两种:正态分布(高斯分布)和Moment-Based模型。在先进工艺如7nm问世初期,主要采用正态分布的模型来模拟variation,并在.lib文件中的的cell的'timing'描述中增加ocv\_sigma*的语法:
image.png
上述LVF的内容和语法可以和POCV文件中的语法找到如下一一对应的关系:

image.png

而随着对先进工艺的研究数据越来越多,逐渐发现工艺的variation尤其是低电压工艺下的variation并不是严格的正态分布,而是像下图所示的略有不对称:

image.png
而为了更精确地描述这种不对称,采用了新的模型来模拟,也就是moment-based LVF。对应的LVF库文件中也增加了新的语法来描述这种不对称,分别是:Mean Shift, Standard Deviation和Skewness。它们各自的数学定义分别如下:

# Moment-Based LVF(左右滑动)
Mean = E[x] = x1p1+x2p2+...+xkpk
Standard Deviation = (E[(X-E[X])2])1/2
Skewness = (E[(X-E[X])3])1/3

如果大家手头上正在做使用LVF库的项目,可以对照上面的ocv\_sigma*和以下moment-based语法看看是属于哪种LVF库。 
image.png

POCV分析流程

有了POCV的文件或者LVF,如何将它们应用在设计中,又怎样开启POCV的分析呢?以PrimeTime为例,标准的POCV分析流程如下:

# PrimeTime POCV流程
pt_shell> set_app_var timing_library_derate_is_scenario_specific true
pt_shell> set_app_var timing_pocvm_enable_analysis true
pt_shell> set_app_var timing_pocvm_corner_sigma 3 ;# default
pt_shell> set_app_var timing_pocvm_report_sigma 3 ;# default
pt_shell> set_app_var timing_pocvm_precedence "file" ;# default
pt_shell> read_aocvm ${lib}_${pvt}.pocv
pt_shell> set_timing_derate -cell_delay -pocvm_guardband -early 0.95 ;# optional
pt_shell> set_timing_derate -cell_delay -pocvm_guardband -late 1.05 ;# optional

其中timing\_pocvm\_corner\_sigma和timing\_pocvm\_report\_sigma用来定义variation分布的sigma值,默认为3 sigma,数字越大越悲观。LVF库文件中一般以3 sigma为标准,调高sigma的数值可以让EDA工具以某种算法更悲观地计算delay和transition等,但是却要牺牲一点精度。timing\_pocvm\_precedence定义POCV文件和LVF同时存在时的优先级,默认以lib\_cell的POCV文件优先级最高,LVF优先级最低,可以通过改变其数值来决定优先级顺序:

image.png

POCV结果查看

按照以上流程开启PT中的POCV分析之后,可以通过以下命令报出所设置的POCV参数和POCV guardband:

pt_shell> report_ocvm –type pocvm -nosplit
pt_shell> report_timing_derate -pocvm_guardband

在update\_timing之后,就可以通过report\_timing -variation来获取timing path中的POCV信息:

pt_shell> report_timing -variation -from $startpoint -to $endpoint 

示例report如下所示,请注意Incr和Path两部分与一般report的区别:

image.png

至于timing report的读法和具体的delay计算方法,我们将在后续文章中陆续介绍,敬请关注!

重磅消息:后端设计学习小组持续招募中!

近期小编召集了一个后端学习小组,大家可以在包含了多种开源45nm/32nm/14nm的工艺库和多个实验项目的一台服务器上学习后端知识。每个人可以有一个独立账号随时随地用VNC远程访问服务器,里面的所有资源包括我开发的一些脚本都免费使用,只需分担部分服务器的购置费用即可。小编还会带着有需要的同学做一个小实验来帮助大家深入理解后端的工作内容,而且不会是跑流程就能完成的实验,需要大家用从基础开始把设计做起来。

来源:https://mp.weixin.qq.com/s/sG...

推荐阅读


如果大家有任何后端技术与职业发展方面的问题,抑或关于数字后端感兴趣的技术话题想要了解和探讨,欢迎关注我的知乎专栏: 数字IC后端设计工程师修炼之路
同时欢迎关注微信公众号:数字后端芯讲堂,一起探讨技术,共同提升!
本极术专栏也会同步更新芯片设计后端的技术干货,也请关注数字IC后端设计工程师修炼之路
推荐阅读
关注数
3845
内容数
46
本专栏致力于将数字芯片后端设计的技术,经验和技巧介绍给想入门或提高的你。一方面从基础知识方面的讲解使初学者少走弯路,另一方面用实际工作中的经验技巧方便从业者提高和交流。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息