前面两周介绍了如何修复setup和hold violation, 这次我们接着来讲下另外一个十分重要的violation——drv的修复。

首先,我们来了解下drv的基本概念,drv全称design rule violation,设计规则违反,主要包括max transition,max capacitance, max fanout, max length。 分别对pin的转换时间,电容,扇出,wire长度有要求。其中,max transition和capacitance的violation是我们必须要修复的,因为过大的slew和load都会造成lookup table查找表的数值较大且不精确。fanout和length并不是必须要修复的,但是数值过大的话,会影响前两者。接下来,我们来看看在ECO阶段时,如何来手动修复max transition和max capacitance。

首先来看max transition,通常我们也称为slew,可以看下概念介绍。

【时序分析基本概念介绍<Slew/Transition>】

有很多原因会造成slew的violation,但最主要的分为以下几类:

1)cell的驱动能力太弱

2)fanout数目过大

3)net长度太长

Cell驱动能力太弱

这是最常见的一类slew的violation,如果某个cell的驱动能力太弱,无法驱动下一级的cell,则比较容易产生比较大的delay。

如何来修呢? 也很简单,我们可以通过size up这个cell来提高驱动能力,比如X1的BUF换成X4, X8的等。

一般情况下,如果我们看到某个cell的output transition比input transition大很多,那说明这个cell的驱动不够,我们可以尝试size up一下。如下图所示:第一个X1的INV input transition是18.051,而输出transition是66.328。明显的是X1的INV推不动下面的14个fanout,可以考虑将X1的INV换成驱动更强的cell。

Fanout数目过大

这也是常见的一类容易造成slew violation的情况。过多的fanout会显著恶化pin的transition。

对于这种情况,我们可以通过插入buffer来减少fanout数目。如下图所示:

中间的output pin驱动了15个instance,分布在左右两边,如果该cell的驱动能力不强,整体的net长度又比较长的话,则比较容易引起max transition的violation。

对于这种情况,我们可以选择在该instance的右边插入一个buffer,由于buffer的驱动较强,所以让它来驱动右边的10几个instance,这样就能显著降低fanout的数目,修复max transition的violation。如下图所示:原来的instance的fanout由15个变成了4个。

这边推荐一个比较实用的小功能,在ECO窗口中,我们可以选择Listed terminals旁边的框框,然后在GUI界面上框住添加的buffer所需要驱动的cell的pin,工具就会自动会让buffer驱动这些pin,比我们通过命令抓取这些pin更简单快捷。

net长度太长

过长的net长度也会恶化slew,造成max transition的violation。如下图所示:

对于这种情况,我们可以在net的中间插入一个buffer来打断这根net,就可以解掉这个max transition的violation。


max capacitance代表pin的load(负载)太大了,超过了约束或者library里面的设置,同样会造成timing数据的不准确。修复的方法和transition一样,对于输出pin上的max capacitance来说,一般是fanout数目过大,或者下一级net太长;对于输入pin上的max capacitance来说,一般是上一级cell的驱动不够,或者输入的net太长等等,基本情况和max transition一样,这边就不过多介绍了。

修复drv并不困难,我们首先要做的事搞清楚violation的出现的原因,对症下药,才能更好地解决问题。

对症下药,方能药到病除——如何修复drv?相关推荐

  1. bin文件如何编辑_每日学习:Linux文件与目录管理常用命令解析

    关注并标星大同学吧 每天1次,打卡学习 积累1个新知识,增1分职场底气 作者称谓:Jack xu 个人介绍:不断学习的数字后端工程师 微信公众号:志芯 半导体知识分享第25期 技能升级,从这里开始 1 ...

  2. 史上最全canOpenURL: failed问题解决办法

    史上最全canOpenURL: failed问题解决办法 由于苹果在IOS9.0开始规定在App中使用Https协议与服务器进行数据交互,导致很多原本正常的功能,莫名的就崩掉了.查看控制台 就会看到各 ...

  3. Xcode 史上最全canOpenURL: failed问题解决办法

    由于苹果在IOS9.0开始规定在App中使用Https协议与服务器进行数据交互,导致很多原本正常的功能,莫名的就崩掉了.查看控制台 就会看到各种错误提示,例如:-canOpenURL: failed ...

  4. Less is more——如何修复setup violation?

    对于setup violation,大家一定都非常熟悉,网上也有很多相关的资料.今天我们来介绍下对于项目后期ECO阶段,我们如何来修复setup violation. 首先我们来回顾一下setup的定 ...

  5. 简单实用的模糊照片修复方法,小白也能轻松上手

    相信每位小伙伴家中都有老一辈人留存下来的照片,但是大部分已经变得泛黄或是模糊不清.如果是照片泛黄的话,只需将其存放在相册中,减少与外界空气接触即可.但若是模糊,较大可能是因为当时的摄像技术还不够发达, ...

  6. 模糊的图片怎么变清晰?分享两种好用的修复方法

    怎么把模糊的图片修复清晰呢?当大家拍摄照片时,如果你不小心晃动了相机,或者你的相机不够稳定,那么你的照片可能会模糊不清.此外,如果你的镜头没有清洁干净,或者你的光线不足,照片也可能会变得模糊.快门速度 ...

  7. 怎么把模糊图片变清晰?试试这几种简单有效的修复方法

    模糊的图片可能是由于摄影技术不佳.设备质量差.运动模糊.手抖等原因导致的.修复模糊的图片可以使其更加清晰.细腻.有质感,让人们更容易欣赏和喜欢.如果您是一名摄影师或设计师,修复模糊的图片可以使您的作品 ...

  8. 多种方法解决计算机程序中出现.DLL文件丢失的问题

    title: DLL-lose date: 2019-11-21 15:55:47 description: 解决计算机程序中出现.DLL文件丢失的问题   在安装某些软件,我们正准备开开心心地打开, ...

  9. C语言运行时电脑白屏怎么办,win10电脑白屏死机无响怎么回事_win10电脑白屏死机无响七种解决方法...

    win10专业版使用一段时间后出现白屏死机的问题,开机后不是登录界面,而是白色屏幕,尝试多次还是一样,怎么办呢?此故障原因无非是硬件或软件两大原因,有什么办法解决呢?此文小编告诉大家解决win10电脑 ...

最新文章

  1. [原创]KVM虚拟化管理平台的实现
  2. oracle 创建空文件系统,六分钟学会创建Oracle表空间的实现步骤
  3. 机器学习实战-决策树-22
  4. Counting Triangles
  5. “行到水穷处,坐看云起时.“
  6. UITableView 系列四 :项目中行的操作 (添加移动和删除)(实例)
  7. godaddy最新域名优惠码永久有效
  8. 《深入理解分布式事务》第五章 强一致性分布式解决方案
  9. CleanMyMac X2021专业苹果电脑系统优化工具
  10. 使用Eclipse远程调试
  11. 单片机c语言fft函数,单片机ADC采样FFT计算试验
  12. 如何利用计算机截屏快捷键,电脑怎么截图 电脑选区域截图怎么截 电脑截图快捷键是什么...
  13. acmclub 2081 班级聚会上的游戏
  14. Dijkstra迪杰斯特算法(C++版本和JAVA版本)
  15. 游戏ui切图,颜色通道_什么是ui通道设计,为什么如此重要
  16. java1.8日期类_JDK1.8-日期使用
  17. 【java】查重类的实现
  18. 错误 “Avoided redundant navigation to current location...” 的解决方案
  19. 网页抓取实例之wildberries电商平台数据抓取
  20. 聊天室加入用户名查重功能

热门文章

  1. 解决文件夹无限嵌套无法删除的问题---最新办法
  2. Retrofit 使用flatmap操作符时处理错误、异常
  3. ORACLE数据库占用大量硬盘空间常规解决方法
  4. idea maven sync Cannot resolve xxx 的解决方案
  5. 如何在GitHub上搜索提交消息?
  6. Android:如何使用资源名称从资源中获取字符串?
  7. 在razor视图引擎中转义@字符
  8. Python的__init__和self是做什么的?
  9. 面试题目_数据分析之hive sql面试题目
  10. 在普通类中获取spring容器中的bean