罗风 · 2021年02月04日

STA | Logical DRC

本文源于一个问题:min capacitance DRC violation 需要fix 吗?

答:min Capacitance DRC violation 理论上当然要fix, 但实际上,min Capacitance 极可能是库K 得不对导致的,所以遇到min Capacitance DRC violation 尤其是很多的情况时,请先找library 的提供者去确认,先排除library 的问题,如果是真实的violation 是必须要修掉的。

微信图片_20210204110655.jpg

数字实现中有多种DRC, 可回顾《数字电路实现中的DRC》。所谓的logical DRC 指:

  • max/min transition
  • max/min fanout
  • max/min capacitance

Logical DRC 的目的是限制std cell 的行为在library 仿真范围之内,据说目前有两种主流的K 库方式,一种是基于SPICE 仿真:精确但代价大;一种是AI K库:代价小但是不够精确。不论哪种方式,library 中都只给出transition 跟load 在一定范围内的table, 在STA 分析时,对于transition/ load 在表范围内的用内插得到对应的delay/ transition/ SOCV等值;对于 transition/ load 在表范围外的用外插方式得到对应的delay/ transition/ SOCV 等值。而外插往往会导致精度损失,所以在实现过程中要保证Logical DRC 在库的范围内,或代工厂大爷要求的范围内。

  • The foundry guarantees the certainty in behavior of the cells over this particular range only. <代工厂大爷只保证cell 在表内的行为。>
  • The upper and lower limits of characterization range are sufficiently large/small so that the cell is expected to go beyond this very-very rarely. Since, characterization has its own cost, it may not be economically feasible to characterize the cell to extreme loads and transitions. <代工厂大爷给出的表值基本覆盖了大部分需求,超出这个范围的需求不大,而如果要K 范围更大的库,代价太大。>

微信图片_20210204110702.jpg



Max/min Transition time: 用于约束信号翻转时上升或下降过程所允许的最大或最小时间,在数字电路实现过程中,该值可以从library 中读出,或用命令set\_max\_transition, set\_min\_transition 进行设置。如果两个值同时存在,工具在优化或检查时以最紧的为标杆,在电路中,通常input port 的transition 是通过driving cell 或set\_input\_transition 设置的,第一级std cell input pin 的transition 根据对应net 的RC 计算得到,第一级std cell output pin 的transition 通过查表\<cell output transition = F (cell input transition , cell output load )>得到,以此类推。任何一个结点的transition 超过表值,都会报violation, 都必须要修掉。

微信图片_20210204110704.jpg

Max/Min Fanout: 在老工艺的lib 中通常会有fanout 的定义,在新工艺的library 中通常都没有fanout 的定义,所以在工具解析library 时会报max fanout 未定义的警告,在实现过程中通常用命令set\_max\_fanout/ set\_min\_fanout 来约束。据说在先进工艺节点,只要把max transition 跟max capcitance 修干净,max\_fanout 并不是一个必须要遵守的hard rule.

微信图片_20210204110706.jpg

Max/Min Capcitance: 定义cell inout 或output port 能够驱动的最大和最小负载电容,负载电容包括该pin 所驱动的net 电容跟pin 电容总和,在数字电路实现过程中,该值可以从library 中读出,或用命令set\_max\_capacitance, set\_min\_capcitance 定义,通常用命令设置的值不应该大于library 中定义的值。同样在library 中通常会有default\_max\_capacitance 的定义,在pin 上有max\_capacitance 跟min\_capacitance 的定义,先进工艺的lib 中max\_capacitance 跟min\_capacitance 可能是一张一维或二维的表格,比如:因为负载电容会随频率变化,所以会在多个频点去K 对应的max/ min capacitance 值,此时library 中的max/ min capacitance 就是一张以频率为index 的一维表。

微信图片_20210204110708.jpg

微信图片_20210204110710.png

微信图片_20210204110713.png
微信图片_20210204110717.jpg

举个例子:下图是一颗cell 上升delay 的table, 从表中可以得到,如果该cell input pin 的 transition 小于0.0016ns 或大于0.329ns 或该cell 的load 小于0.0001pf 或大于0.563557pf 就需要外插,一旦外插就要承担delay 精确度损失的风险。

微信图片_20210204110719.png

再回到文章开头的问题,min capacitance DRC violation 是否要fix? 通过上面一通啰嗦,可知,所谓的logical DRC 只是为了保证表值的精确度,如果超了表是否一定就会变石头?!当然不会,假设通过实测或仿真得到,在某个工艺点,外插可以导致20% 精确度的损失,如果DRC violation 造成的delay 偏差已通过其他方式『挤』回来了,比如加了更大的uncertainty 且没有min period 《论STA | clock min period check》或min pulse width 《论STA | min pulse width》等违规,那这些DRC violation 不修也不会变石头的。但是,强烈建议有DRC violaiton 一定要修!

那么问题来了,修DRC 通常有哪些办法呢?通常,max logical DRC 常用办法有:

  • 不论是修DRC 还是修timing 还是修power, 先修Cross talk!
  • 增加cell 驱动:
  • Upsize Cell to higher drive strength
  • Swap Cell to lower channel length
  • Swap Cell to Lower Vt
  • 动物理位置或线长:Fixing it physically in implementation tool
  • Deploy similar approach (as applied for driver cell) for the logic in driver fan-in cone.
  • Load Splitting (Adding Buffers)
  • Try to de-congest the congested area by the movement of spare cells / less timing critical logic.

Min logical DRC 修起来就比较简单,down size cell 或swap 成慢的pin 电容大的cell, 或者走一段蚯蚓线把电容增加,或者插个buffer.

作者:陌上风骑驴
来源:https://mp.weixin.qq.com/s/ameEyZ-V5BzP2dx9FwCJbQ
作者微信公众号
捕获.PNG

相关文章推荐

library | std cell delay
STA | SOCV:Transition Variation

更多IC设计技术干货请关注IC设计技术专栏。




推荐阅读
关注数
20187
内容数
1307
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息