芯片在实际生产中,同一片晶圆上的不同区域的芯片,因为各种外部条件和生产条件的变化(variation),比如:工艺(Process),电压(Voltage),温度(Temperature)等,可能会产生不同的误差从而导致同一块晶圆上某些区域上的芯片里的晶体管整体速度变快或变慢,因此有了corner的概念。而与此同时,在同一块芯片上的不同区域,也会因为上述因素而有进一步的差异(variation),因此产生了OCV (On Chip Variation)的概念。

在设计中引入OCV的目的在于从设计角度考虑芯片在实际生产中可能出现的各种差异(variation),从而适度增加设计余量(margin),减少不必要的设计悲观量(pessimism)。那么在实际中是如何将OCV带入design的呢?

从OCV的概念出现至今,随着工艺的发展,OCV也经历了如下的一系列进化:

那么它们都是什么意思呢?在设计中又有什么不同呢?在详细解说之前我们先考虑以下一条timing path的setup分析:

在理想情况下,我们假设所有cell和net在实际生产后其delay都和我们设计中通过库和rc寄生参数计算出来的数值完全一样,那么setup应满足如下条件(如此处有疑问请复习一下setup hold的概念):

然而,在实际生产中,由于各种variation可能会出现如下情况:

此时的setup分析变成了下面的样子:

在x, y, z都是正数的时候,只满足理想状况下setup的电路是不一定能够满足上述条件的。这样就会导致实际生产出来的芯片有一定的概率不能满足需要的频率等条件,严重的甚至会导致芯片失效而降低良率。那么对此我们有什么解决办法呢?

OCV (On Chip Variation)

这是针对上述问题提出的第一个方法。它的基本理念是,对launch, capture和data line上的cell或者net加一个固定的derate数值,使得setup和hold等时序约束比理想状况更加悲观从而能够覆盖部分实际生产中所产生的variation。实际设计中的效果如下:

可以看到,对于launch clock,加上一个统一的大于1的derate值,就会在timing report中反映出来,相应的delay也会在原始值的基础上乘以这个derate值。

对于capture clock line,相应地就会加上一个小于1的derate来计算delay。通过这样的方法来让时序约束更加悲观,以此来覆盖生产中和实际应用中的各种variation,提高良率。

AOCV (Advanced On Chip Variation)

AOCV的概念之所以被提出来,是由于OCV存在以下缺点:在实际中的variation,绝少是一个统一的数值,而大概率是服从正态分布的。以一条timing path的data line为例,可能并不是所有的cell都因为variation而变慢或变快,而是大部分variation较小,少量variation较大。如果我们采用OCV的方式,就会引入不必要的悲观量使得设计更难收敛,同时可能增加不必要的面积和功耗。

针对这个问题,AOCV提出:对于一条path上,级数越多其variation分布越接近正态分布,因而这条path整体的variation也越小。在实际设计中,会根据一条line上cell的级数不同而设置不同的dereate值。实现这中设置的方法,是通过一种AOCV table来查表决定。这种table文件的内容格式大致如下:

有些AOCV表是depth和distance而对应derate数值的二维查表,有些只是depth对应derate的一维查表,上述例子属于后者。我们可以看出,级数(depth)越深,对应的derate越小。通过这种方式来剔除部分不必要的悲观量,使得设计在尽量覆盖实际情况的前提下更加容易收敛。

今天的OCV和AOCV就讲到这里。下篇将解说POCV和LVF的具体内容,敬请关注!

转载:https://mp.weixin.qq.com/s/MQDE1wfxxY5ch7eIVddfKQ

后端基础概念:各种OCV一网打尽(上篇)相关推荐

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

    简而言之,OCV是由于芯片上因工艺(Process).电压(Voltage).温度(Temperature)而导致的各种误差而加入的余量,而AOCV在考虑到实际误差并非统一值的情况下将余量值变成cel ...

  2. Python+Dash快速web应用开发——基础概念篇

    作者:费弗里 来源:Python大数据分析 ❝本文示例代码与数据已上传至https://github.com/CNFeffery/DataScienceStudyNotes ❞ 1 简介 这是我的新系 ...

  3. Linux基础概念及常用命令

    Linux基础概念及常用命令 文章目录 Linux基础概念及常用命令 1 Linux概述 1.1 为什么要学Linux 1.2 Linux简介 1.3 Linux 发行版 1.4 Linux 应用领域 ...

  4. 区块链教程(二):基础概念介绍

    注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 本系列重点在于以太坊基础知识.以太坊客户端以及以太坊solidity编程,因此博客重点在于以太坊核心知识点的掌握,区块链部分的基础知识可以作为补充 ...

  5. 数字后端基本概念-合集

    个人将基本概念重新整理 原碎片来源:Tao_ZT 个人空间 https: //blog.csdn.net/Tao_ZT 数字后端基本概念 macro Box 坐标 方向 standard cell E ...

  6. 数字后端基本概念介绍——Row

    今天要介绍的数字后端基本概念是Row.我们知道row是表征Floorplan横向排列的一个重要网格,可以将它解释为"排",它对std cell的摆放起着限制约束作用.Row是pla ...

  7. 谷粒商城基础篇-1.分布式基础概念架构图与功能模块图

    一.分布式基础概念 1.微服务: 把一个单独的应用程序开发我i一套小服务,每个小服务运行在自己的进程中,并使用轻量级通信,如http API.这些服务围绕业务能力搭建,并通过完全自动化部署机制独立部署 ...

  8. React + webpack 开发单页面应用简明中文文档教程(一)一些基础概念

    React + webpack 开发单页面应用简明中文文档教程(一)一些基础概念 React 入门系列教程导航 React + webpack 开发单页面应用简明中文文档教程(一)一些基础概念 Rea ...

  9. 低功耗基础概念——ICG(Intergrated Clock Gating)

    转载来源: 低功耗设计基础:Clock Gating 后端Timing基础概念之:为何ICG容易出现setup violation? 为了节约动态功耗,最初有个十分简单的想法:在芯片实际工作过程中,有 ...

最新文章

  1. 几款自用的IDEA高效插件
  2. C#基础(七)虚函数
  3. ZOJ POJ题目分类
  4. 无人值守的自动 dump(一)
  5. garmin USB: linux USB host驱动
  6. C#基础:Lambda表达式
  7. js正则匹配闭合标签_我从Vue源码中学到的一些JS编程技巧
  8. 电脑开机一会就蓝屏怎么回事_电脑蓝屏怎么回事
  9. BSCI实验之十三:配置点到点链路OSPF及认证
  10. 软件项目可持续性运作地思考
  11. 微软商店下载的python 的 pip 不能修改 config 的解决方法
  12. 深度学习需要计算机配置,深度学习工作站配置推荐
  13. ios 博客及论坛整理
  14. 秀米推文添加附件的方法
  15. win7怎么修改锁定计算机时间,锁定Windows7系统时间教程
  16. 绕过CDN获取服务器真实IP地址
  17. 【Simapro软件教程】参数进行灵敏度分析
  18. 【渝粤教育】国家开放大学2018年秋季 2019T统计学原理 参考试题
  19. -- str --() 方法
  20. 斯坦福兔子和其他图形学模型数据下载

热门文章

  1. maven -- 解决“Could not calculate build plan”问题
  2. 异常mongodb:Invalid BSON field name XXXXXX:YYYYY.zz
  3. [Android Pro] java.lang.IllegalStateException: Fragment(XXFragment) not attached to Activity异常
  4. Vue首页加载过慢 解决方案
  5. iOS中 H5的input输入框focus()无法自动拉起键盘(解决方法)
  6. win11不显示缩略图怎么办 windows11不显示缩略图的解决方法
  7. MTK中断控制器简单记录
  8. windows c语言 socket通信
  9. linux c++ utf8 gbk,Linux C++ gbk转为utf-8
  10. 如何为服务器安装mysql数据库文件,如何为服务器安装mysql数据库