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

前面两周介绍了如何修复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的出现的原因,对症下药,才能更好地解决问题。

修复max capacitance的方法主要包括以下几个步骤: 1. 首先,需要确认max capacitance的violation是由于pin的load过大或者net太长导致的。对于输出pin上的max capacitance,常见的原因是fanout数目过大或者下一级net太长;对于输入pin上的max capacitance,常见的原因是上一级cell的驱动不够或者输入的net太长等等。 2. 确定了问题的原因后,可以采取相应的措施进行修复。对于输出pin上的max capacitance,可以考虑减小fanout数目或者缩短下一级net的长度。对于输入pin上的max capacitance,可以考虑增强上一级cell的驱动能力或者缩短输入的net长度。 3. 在ECO阶段,可以通过手动进行修复。根据具体情况,可以进行电路结构的优化,如增加buffer或者进行驱动增强等。此外,也可以通过调整pin的max capacitance属性来达到修复的目的。 4. 修复max capacitance时,可以参考set_max_capacitance命令。该命令可以设置连接到指定端口的线网或整个设计中所有线网的最大电容。通过设置max_capacitance属性,可以直接控制线网的电容值,使其满足约束条件。 总结起来,修复max capacitance的关键在于确定问题的原因,并采取相应的措施进行调整,如减小fanout数目、缩短net长度、增强驱动能力等。在ECO阶段,可以通过手动进行电路优化,并使用set_max_capacitance命令来设置max capacitance属性,以满足约束条件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [对症下药,方能药到病除——如何修复drv?](https://blog.csdn.net/b18821622297/article/details/119971905)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [DC学习-第七章](https://blog.csdn.net/zymwzgl/article/details/102940554)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值