• 支付宝首页搜索框搜索“572484805”,可领十元红包!
  •    4个月前 (01-13)  数字后端实现 |   1 条评论  192 
    文章评分 1 次,平均分 5.0

    Innovus中via应该怎么打?DFM double via

     

           本文主要讲讲关于打via的时候碰到的一些问题及相应的解决办法。本文所提的只是小小的一部分,还有更多的方面还需要大家去多做才能发现。

    Innovus中via应该怎么打?DFM double via

    DFM-via

    Innovus中via应该怎么打?DFM double via

            

            首先来看看signal上面的VIA。为了提高最后的yield,需要提高DFM-via的比例。首先得定义什么是DFM-via。

            如下图所示,右边的VIA是最常见的单孔VIA,一定是正方形,左边的VIA也是比较常见的VIA,是长方形,其大小是一定的,不能随意改变,这种VIA也叫做double-via (double-cut一个意思)。

    Innovus中via应该怎么打?DFM double via   

          我们可以从LEF文件中得到这两个孔的定义:

    Innovus中via应该怎么打?DFM double via

           一个长方形叫double-via,两个正方形孔合起来也叫double-via,或者换个名词,叫做multi-via。但multi-via不等同于DFM-via。部分single-via也属于DFM-via。

            如下图所示,右边两个via,其bottom和top-layer都比一般的via要宽或长一点。所以最右边两个属于DFM-via。

    Innovus中via应该怎么打?DFM double via

         总之就是multi-via一定是DFM-via,而single-via一部分属于DFM-via。了解了这个概念,我们就来看看如何提高DFM-via的ratio。

           首先就要设置VIA的weight。默认的所有的weight是0。这样的话只有multi-via被认为是DFM-via,所有single-via都不是DFM-via。只要定义weight大于1,那么就被认为是DFM-via。下面就是设置的方法:

    Innovus中via应该怎么打?DFM double via

         除了via的weight之外,还需要设置其他的一些选项:

    Innovus中via应该怎么打?DFM double via

         一般情况下这就够了,在绕线的时候就可以很好的得到较高的DFM-via ratio。或者我们可以额外的再优化一次:

            routeDesign -viaOpt

    Innovus中via应该怎么打?DFM double via

    viapillar

    Innovus中via应该怎么打?DFM double via

            有的时候,仅仅是double-via是不够的,需要用到stack-via。这种VIA直接从M1打到M4或者其他高层金属,而不是M1到M2。这种VIA也叫做viapillar。这不仅仅是为了DFM角度的考虑,也是为了timing方面的考虑。不过一般的工艺下不需要,这里也就不讲了,等以后开专题再讲。

    Innovus中via应该怎么打?DFM double via

    PG-via

    Innovus中via应该怎么打?DFM double via

            由于我们摆放的macro遮挡等的原因,在打powerplan的时候,在cell-row的末端,经常会发生一些DRC的问题,下面举一个例子:

            如图蓝色代表M1-rail,红色代表M5-strap。中间只交叉了一半。

    Innovus中via应该怎么打?DFM double via

          这种交叉会造成几个问题:

            1, 打VIA的时候,不会打上任何的VIA,

            2, 打的VIA有DRC问题

            3, 由于stack-via-rule的原因(此stack-via非viapillar),M5-M6再不能打上VIA了,

          先看看tech-lef中关于stack-via的rule:

    Innovus中via应该怎么打?DFM double via

          关于这个Stack-via的rule,可以去看看LEF的文档,里面有更详细更全面的rule。总之就是从低层到高层金属的single-via堆叠不能超过一定数目,一定要是double-via。为了解决这个问题,我们可以写个很简答的脚本,去拉长M1,拉到和M5完全覆盖为止。这个脚本很简单,本文这里可以写一个简单的示范:

        通过M5的box,得到与之交叉的所有M1,然后对M1进行过滤,对不符合的M1进行相应的拉长。

     

    Innovus中via应该怎么打?DFM double via

       

    Innovus中via应该怎么打?DFM double via

    自定义VIA

    Innovus中via应该怎么打?DFM double via

          在后面place或者做优化的时候,有时候会碰到std-cell和PG 的问题。 如下图所示,蓝色的表示M1rail。黑框表示std-cell,上面的红框表示floorplan打的VIA1,下面的红框表示Std-cell自带的VIA1。这种情况下,上排的VIA会和下排的VIA产生DRC。

          解决办法很简单,我们可以在这个std-cell上面设置一个pg-keepout,防止放在PG附近。

     

            但是如果在后面signoff阶段才发现,为了防止移动std-cell产生各种问题,我们可以改变PG的via,当然这种方法只是没办法中的办法。

    Innovus中via应该怎么打?DFM double via

     

    Innovus中via应该怎么打?DFM double via

    替换VIA

    Innovus中via应该怎么打?DFM double via

            在替换VIA前,我们先创建想要的VIA。有两种方式,一是通过LEF,另一是通过自带的命令,这里就讲讲如何通过自带的命令定义VIA。通过LEF的方式也类似,就不再讲了。

            我们先看看原来的VIA的定义,假设原来的VIA的名字叫做VIA12。我们先运行一下下面的命令:

    Innovus中via应该怎么打?DFM double via

            然后我们就可以得到topRects, botRects, cutRects这些属性。再仔细观察这些属性,可以发现这些VIA都是以中心点为坐标原点进行描述。我们照猫画虎,就可以定义自定的VIA了。例如:

    Innovus中via应该怎么打?DFM double via

            定义好之后,我们就可以换了:

            editChangeVia -from VIA12 -to VIA12_user_gen

    Innovus中via应该怎么打?DFM double via

    举一反三

    Innovus中via应该怎么打?DFM double via

            我们还可以更近一步,再扩展一下。假如在signoff阶段,假如仍然像上面的例子,只是需要替换的VIA不同,例如下图所示,最左边的PG VIA会和std-cell的VIA产生DRC。只是需要替换的目标VIA不同。我们可以写个简单的脚本,根据已有的DRC-violation,自动生成并替换成相应的VIA。

    Innovus中via应该怎么打?DFM double via

            作者这里也提供一个简单的实现方式:

    Innovus中via应该怎么打?DFM double via

           

     

     

    除特别注明外,本站所有文章均为吾爱IC社区原创,转载请注明出处来自http://www.52-ic.com/?p=3526

    关于

    发表评论

    表情 格式
    1. 哇塞,居然是沙发?留个名

      61o 评论达人 LV.1 2周前 (05-12) [0] [0]
    切换注册

    登录

    忘记密码 ?

    您也可以使用第三方帐号快捷登录

    切换登录

    注册

    扫一扫二维码分享