OCV与CPPR模式的理解

【资料】

OCV模式和CPPR模式的技术层面解答:

OCV是on-chip variation. 是指在同一个芯片上, 由于制造工艺等原因造成的偏差. 具体表现在到两个ff的clk端的时钟路径. 本来时间应该是一样的. 但是因为制造工艺也就是OCV的原因, 造成工具无法计算的快慢偏差.

timing derate. 这个值就是告诉工具, OCV的影响有多大. 通常signoff的时候. derate会有5%到10%. 不同工艺不同设计, 由工程师的经验决定.
如果两个clk path 的长度都是1, 在OCV 分析模式下, 1.05和0.95的derate.
原本是0的 skew就变成了 1x1.05 - 1x0.95 = 0.1的skew.
以上就是OCV和timing derate的关系. 在.18um甚至.13um工艺下. ocv的影响很小, 基本可以不考虑. 但是90nm及以下,基本都会设.

cppr (clock path pessimism removal) 或者 crpr (clock reconveregence pessimism removal)是同一件事情的两种叫法. Cadence公司的叫前者, Synopsys公司的叫后者. 在开启OCV模式之后, 这个选项才有意义.

由于分析方式过于悲观了. 因为两个时钟可能有共同路径. 既然是共同路径, 逻辑上就不可能有偏差. cppr就是干这的. 去除共同路径上过于悲观的估计. 只计算不同路径的OCV影响.

为什么有OCV模式和OCV-CPPR模式?

首先因为有PVT,就是由于半导体器件的参数和很多因素有关,比如制造工艺/运行温度/电源电压等,相对于这些因素,工艺库就会针对不同的环境给出的不同的参数值,这些参数会影响线网和单元的时延delay值。

在不同温度工艺电压下,把时延相关信息分为三档:best,typical,worst

那么,为了保证时许验证的结果是保守的,会采取集中不同的分析模式。STA分析方式主要有三种:single,worst_best,OCV

Single:在单一的情况下进行分析,即在做setup/hold分析时用同一种PVT模式下的时延信息

Worst_best:在分析时同时读入worst和best情况下的延迟信息,用worst下的延迟信息计算

Setup constraints,用best下的PVT模式计算hold  time constraints

OCV(on_chip_variation):在分析时同时读入worst情况下的PVT,在进行setup计算时,clock skew采用考虑到加工工艺的不确定性对时延的影响,用PVT中best(shortest)情况下计算,data delay用PVT中worst(longest)情况进行计算。计算Hold时相反。这种分析方式对芯片的timing非常严格。

我的理解

在EDA工具对这个STA问题的处理时,引入了derate的概念,来对应worst和best的PVT时延影响,在不同path计算时可设置derate取其best或worst的时延delay。(在实际操作时,还可能只考虑一条路径上的悲观情况,另另一条路径derate=1,使约束条件更加乐观)

因为OCV模式过于严格,所以才用基于OCV分析方式下的CPPR模式来去除悲观路径的影响,而CPPR实际上还是保留了OCV模式的计算方法和原理,因此我当初理解是认为他们的最大差异在于是否考虑commom path的影响,OCV模式下计算简单电路时共同路径会影响slack的值(乘derate后共同路径延迟相减为负),而采用时cppr不会(共同路径延迟相减为0)。

然而,理解不透彻的是

实际上在工具中ocv模式和cppr都是针对delay来说的,这种情况下二者delay肯定都考虑共同路径的影响,否则delay计算不准确,区别在于是否考虑悲观影响。 

更准确地说:OCV模式考虑共同路径的悲观影响,本身过于悲观,CPPR不考虑common path的悲观估计(计算偏差)。

时间: 2024-08-08 14:15:35

OCV与CPPR模式的理解的相关文章

Vim的模式编辑器理解

看到很多资料说vim,感觉写的模式比较多,如果不好好理解,概念会容易搞错: 当我们打开一个文件的时候,其实进入到命令模式(普通模式,默认模式): Vim的三种模式: 命令模式(普通模式,默认模式,编辑模式) 插入模式(输入模式) 末行模式(提供的功能比命令模式来得更加强大) 关键是要把编辑模式看成是编辑命令,而不是编辑文本就好理解了 Vim的模式编辑器理解,布布扣,bubuko.com

模式经验/理解

1.命令模式:简而言之:服务员-命令-厨师-做烤肉 2.门面模式:就是客户端只需要跟一个类打交道就可以获得很多底层类的功能,比如service中的某个类实现了dao包中很多个dao类的某些功能的调用等处理,客户端如果想使用dao包中这些类的这些功能,那么只需要跟service这个类打交道即可 . 3.桥接模式:允许了service包中有各种功能各异的类,同时也允许dao中有各种功能各异的类,要想得到不同的产品,那么把这些各异的类组装起来即可,比如在service包中某个类加入dao包中某些类的父

我对standard、singleTop、singleTask和singleInstance四种Activity启动模式的理解

之前自学android的时候,单从视频和书本上对这四种启动模式仅仅有了初步的字面上的理解.最近实战了下,也对这四种启动模式有了比较清晰的概念. 首先说下什么是Activity,按照我的理解,我们在手机上看到的每一个页面都是一个Activity,包括系统的桌面,也是一个Activity. 要启动一个Activity有四种模式:standard(标准启动模式).singleTop.singleTask.singleInstance. 注: Aty1_1和Aty2_1为两个不同的Activity,At

设计模式之abstract factory工厂模式的理解

研究了一下工厂模式,对它的应用场景和网上的众多说法进行了思考,总结如下. 几个疑问点: 1.网上说用factory,就可以不用自己new了,但是疑问在于,不直接依赖,转而间接依赖,作用是什么?节省了代码量?易于扩展? 2.书上说,一个系统要独立于它的产品的创建.组合和表示时.一个系统要由多个产品系列中的一个来配置时.当你要强调一系列相关的产品对象的设计以便进行联合使用时.当你提供一个产品类库,而只想显示它们的接口而不是实现时,就应该使用工厂模式.但是疑问在于,这他妈说的都是啥? 于是开始了我的思

关于java中生产者消费者模式的理解

在说生产者消费者模式之前,我觉得有必要理解一下 Obj.wait(),与Obj.notify()方法.wait()方法是指在持有对象锁的线程调用此方法时,会释放对象锁,同时休眠本线程.notify()方法是持有相同的对象锁来唤醒休眠的线程,使其具有抢占cpu的资格.可以理解同步方法,同步方法的对象锁就是谁调用这个方法,这个对象就是对象锁. 根据李兴华老师的视频讲解,建立一个生产者类,一个消费者类,还有一个Info类,贴上代码: 1.生产者类 package com.company; /** *

重构、重载和重写,mvc模式大概理解

重构重写和重载的区别: 重写:1.父类与子类之间的多态性,对父类的函数进行重新定义.如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 .方法重写又称方法覆盖. 2.若子类中的方法与父类中的某一方法具有相同的方法名.返回类型和参数表,则新方法将覆盖原有的方法. 3.子类函数的访问修饰权限不能少于父类的: 重载: 1.方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数.重载是一个类中多态性的一种表现. 2.重载的时候,方法名要一样,但是参数

发布订阅模式的理解

发布---订阅模式它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知. 发布订阅模式的优点: 支持简单的广播通信,当对象状态发生改变时,会自动通知已经订阅过的对象. 发布者与订阅者耦合性降低,发布者只管发布一条消息出去,它不关心这条消息如何被订阅者使用,同时,订阅者只监听发布者的事件名,只要发布者的事件名不变,它不管发布者如何改变: 对于第一点,我们日常工作中也经常使用到,比如我们的ajax请求,请求有成功(succes

js对于工厂模式的理解

有很多人对工厂模式有着这样或者那样不理解的地方,今天我就和大家分享一下我的心得. 其实工厂模式是基于面向对象的一种模式.大家先看这样的一段代码: 其实这个程序很简单,学过js的人都会写,基本没什么问题.但是大家马上会意识到一个问题就是如果有100的对象会出现什么效果呢,没有错!代码会变得相当的多,这样加载起来会相当的慢,那么怎么解决这个问题呢?我相信大家都想到了吧!没错,就是把他封装起来,代码如下: 这个就是封装后的代码,其实这个就是一个简单的工厂模式,为什么这么说呢因为他的工作原理很像是在工厂

工厂模式的理解

工厂模式的定义 工厂模式叫虚拟构造,多态工厂,工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式.它定义一个用于创建对象的接口,由子类决定实例化哪一个类 用UML的类图如下:看附件 工厂方法创建对象的接口,工厂方法把实例推迟到子类 为了更好的理解工厂模式,我举一个例子,在一个在一个医院里有不同的科室,创建一个医院接口,实现两个不同的科室实现医院的接口,方法是创建新的对象,就是创建不同的医生对象,然后再创建一个医生接口,实现不一样的医生,在工厂中创建,然后