数字后端APR如何撒sparecell?
专栏:NanDigits June 23, 2026, 6:22 p.m. 7 阅读
以 innovus 为例,createSpareModule 创建 spare cell module 后,用placeSpareModule 来撒 spare cell。来看一下它他命令参数。

首先,祝大家端午安康!

再到今天的话题:“数字后端APR如何撒 sparecell?”。之前整理过《数字后端APR要撒哪些sparecell,撒多少合适》,那么今天来讨论一下如何把这些 sparecell 撒进去。

以 innovus 为例,createSpareModule 创建 spare cell module 后,用placeSpareModule 来撒 spare cell。来看一下它他命令参数。

placeSpareModule
    -moduleName <moduleName>
    {-numModules <integer|>-stepx <stepDistance> -stepy <stepDistance>}
    [-area <llx lly urx ury>]
    [-channel
        {-maxWidth <maxWidth>}
        {-minWidth <minWidth>}
        {-minLen <minLength>}]
        [-offsetx <offsetDistance>]
        [-offsety <offsetDistance>]
        [-powerDomain <powerDomainName>]
        [-prefix <prefix>]
        [-util <utilizationFactor>]

-moduleName <moduleName> 就是 createSpareModule 创建的 module 名字。

-numModules <interger> 用来指定 spare cell module 例化多少个。所以上面的 createSpareModule 创建时定义各个cell数量可以一个宏单元内部的,然后例化好几次;也可以是相对整个APR区域,定义好全局的数量,只例化一次。

offsetx、offsety、stepX、stepY 用来把 createSpareModule 这个宏单元例化成一个阵列,比如100um一组。搭配另一个参数-util来指定这个宏单元内部的松散程度,取值0.0~1.0之间,数字越大越紧凑(类似这个宏单元区域的密度)。man里的一个例子,在这个例子中,把SPGM这个宏单元摆成一个channel型阵列。

createSpareModule \ 
    -moduleName SPGM \ 
    -cell {DFFNSRX2 2 INVX4 4 NOR2X2 4 NANDX2 4}

placeSpareModule \ 
    -moduleName SPGM&nbsp;\ 
    -channel -minWidth 4.7 -maxWidth 10 -minLength 11 \ 
    -stepx 10 -stepy 10 \ 
    -util 0.6

另外还可以用 -area 指定一个区域,只放在这个区域内。

需要说明的是 placeSpareModule 命令也可以执行多次,多次在不同位置、按不同方式来添加 spare cell。在阵列的基础上,也可以再全局平均撒一些零散的。

另一个话题是“在什么阶段撒 sparecell”,place 之前、place 之后、route 之后?其实都可以。

place之前撒:好处是提前占位置,撒完后fix,这样sparecell更均匀。这个阶段 placeSpareModule 是无法立即看到效果,而是 place_design 之后才真正执行。所以,在place之前需要用 placeInstance 搭配 tcl 随机函数来指定随机坐标。

当密度较高时,工具在后续优化时可能会挪动 sparecell,甚至被挤到边缘。这种情况对后续ECO非常不利。可以用 dbSet 给 sparecell 提前加上 fixed 属性,防止挪动。这个问题,也是一个重要的 review 点。

如果是 gate array ECO cell,我们也要注意:要分析GA ECO cell最大的size是多少,ECO FILLER 或者 FILLER 电容的最大size是多少。要保证预留的 ECO FILLER 或者电容的大小,可以摆下最大的 GA Cell。有一些工艺 GA CELL是 double 高度的,在放 ECO FILLER时,就要考虑高度,以及 VDD 和 VSS 的方向,否则就可能出现 ECO FILLER 宽度或者高度不够的情况,导致无法使用某些大 size 的GA cell。GA FILLER 通常在place之前排成阵列,在route完后,找空挡再补插一些。

GA ECO Cell有个缺点,通常需要从Metal1开始重新绕线。当改动不大时,也许可以限制成Metal1 + Via1 + Metal2,改三层金属。而从成本角度来说,可能更希望改只上层金属、顶层金属。那么,我们可以在GA ECO Cell的基础上,再撒少量的 sparecell,来实现只改上层金属。当然还要配合一些其他手段来实现,比如把 sparecell 的线提前从上层穿过、甚至定制 sparecell 的出pin层。

image.png

感谢阅读,更多文章点击这里:【专栏:NanDigits】
最新20篇 开设专栏