4、单元对齐与网格规则:单元对齐要求、网格对齐规则、电源地轨对齐
好,咱们接着聊版图布局里一个特别基础、但又特别容易翻车的话题——对齐与网格。
你想想看,一个芯片里动辄几百万、几千万个标准单元。如果每个单元都随心所欲地放,那整个版图会乱成什么样?别说DRC过不了,后端工具跑起来都得卡死。说白了,对齐和网格,就是给所有单元定一个共同的“坐标系”。没有这个坐标系,后面所有的工作都是空中楼阁。
核心思想: 所有标准单元必须放置在统一的网格上,并且电源/地轨必须严格对齐。这是实现自动化布局布线的基石。
4.1 单元对齐要求
什么叫单元对齐?我举个例子你就明白了。
每个标准单元,比如一个反相器、一个与非门,它们的高度是固定的。在同一个工艺节点下,所有标准单元的高度必须一致。这就是所谓的“单元行”(Row)的概念。所有单元都“坐”在行上,顶部和底部对齐。
我在项目中遇到过一种情况:有个同事从第三方IP库里拿了一个定制单元,高度跟标准单元库差了那么零点几微米。结果呢?整个布局工具死活无法自动摆放,最后只能手动处理,浪费了两天时间。嗯,从那以后,我每次引入新单元,第一件事就是检查它的高度。
单元对齐的具体要求,我总结了一下:
- 行高一致: 同一行内的所有标准单元,物理高度必须完全相同。
- 垂直对齐: 单元内部的晶体管、有源区、多晶硅栅等关键层次,必须与单元边界保持固定的偏移量。
- 引脚对齐: 单元的输入/输出引脚,必须落在预设的网格交点上,方便后续布线。
我的小技巧: 在开始大规模布局之前,我会先用脚本跑一遍所有单元的LEF文件,提取它们的高度和引脚位置。一旦发现异常,立刻处理。别等到最后跑DRC了才后悔。
4.2 网格对齐规则
网格,就是版图的“格子纸”。
为什么要有网格?因为工具需要知道“哪里能放东西,哪里不能”。网格的粒度,通常由工艺决定。比如,一个工艺的布线最小间距是0.1微米,那网格可能就设成0.05微米或0.1微米。
我个人习惯把网格分成两类:
| 网格类型 | 粒度 | 用途 |
|---|---|---|
| 布局网格 | 通常为单元高度的1/2或1/4 | 确定标准单元的放置位置 |
| 布线网格 | 通常为最小线宽+最小间距 | 确定金属线的走向和位置 |
这里有个容易踩的坑:布局网格和布线网格必须兼容。说白了,就是单元引脚的位置,必须落在布线网格上。否则,工具在连线时会发现引脚“悬空”,连不上。
注意: 我曾经见过一个团队,为了省面积,把布局网格设得很小。结果布线时发现,很多引脚落在了布线网格的“缝隙”里,工具不得不绕大圈去连接,反而导致面积增大、时序变差。这就是典型的“捡了芝麻丢了西瓜”。
4.3 电源地轨对齐
电源和地,是芯片的“血管”。电源地轨(VDD/VSS Rail)的对齐,直接决定了整个芯片的供电质量。
在标准单元布局中,电源地轨通常是横向的金属线,贯穿整个单元行。每一行单元的顶部是VDD,底部是VSS(或者反过来)。相邻行的电源地轨会共享,形成“背靠背”的结构。
电源地轨对齐的要求,其实就一句话:所有行的电源地轨必须在同一水平位置上。
为什么?因为后续我们要在芯片四周或者内部打电源环(Power Ring),然后通过垂直的电源条带(Strap)把每一行的电源地轨连接起来。如果地轨不对齐,电源条带就没法垂直走,供电网络就会出问题。
我记得有一次,一个项目因为电源地轨没对齐,导致IR Drop(电压降)超标了20%。最后查出来,是单元库版本更新时,有一组单元的地轨位置偏移了0.1微米。就这0.1微米,让我们多花了一周时间重新布局。
检查清单:
- 所有标准单元的VDD/VSS轨道是否在同一水平线上?
- 轨道宽度是否满足电流需求?(通常由工艺库决定)
- 轨道之间是否有足够的接触孔(Via)连接到上层金属?
好了,关于单元对齐与网格规则,我就讲这么多。记住,这些规则看起来琐碎,但它们是整个版图设计的基础。基础不牢,地动山摇。