2. 布局概念入门:物理设计流程、标准单元、宏单元与IO规划
好,我们正式开始聊布局。很多做RTL的朋友,一听到“物理设计”就觉得头大,觉得那是后端工程师的事。我个人习惯相反——我建议做验证和前端的人,越早了解布局,越能提前发现那些藏在代码里的“坑”。
说白了,布局就是把你的逻辑代码,变成一块真正的、有形状的、能跑出性能的硅片。你写的每一行Verilog,最终都会落在这张“硅图”上。
2.1 物理设计流程:一张图看懂全局
我们先来个大框架。物理设计流程,我把它分成几个核心步骤。这不是什么“标准答案”,而是这些年我在项目里反复走下来的经验总结。
核心流程(6个关键阶段):
- 综合(Synthesis):把RTL代码映射成门级网表(标准单元+宏单元)。
- 布局(Floorplanning):决定芯片“长什么样”——放宏单元、放IO、规划电源网络。
- 单元放置(Placement):把标准单元一个个摆到规划好的位置上。
- 时钟树综合(CTS):给所有时序单元搭建时钟网络。
- 布线(Routing):用金属线把单元连起来。
- 物理验证(Physical Verification):检查DRC/LVS,确保能生产。
你看,布局是第二步。但说实话,我遇到过很多项目,因为前端不懂布局,导致综合完的网表根本没法放——面积爆了、端口划不开。嗯,这里要敲黑板:布局阶段的决策,决定了整个芯片的成败。
2.2 标准单元:数字电路的“乐高积木”
什么叫标准单元?你可以把它想象成数字电路里的“乐高积木块”。每个积木块是一个预先设计好的、有固定高度的逻辑功能——比如与非门、或非门、触发器、多路选择器。它们的高度是统一的,宽度根据驱动能力可以不同。
我曾经在一个项目里,因为综合工具选了“最小面积”策略,结果一堆驱动能力极弱的单元挤在一起,后端的时序收敛死活做不通。你想想看,一个驱动能力不足的单元,就像小马拉大车,能不翻车吗?
| 参数 | 说明 | 我的经验值 |
|---|---|---|
| 单元高度 | 固定(例如 7 轨 / 9 轨高度) | 选9轨,布线更轻松 |
| 单元宽度 | 可变(与驱动强度成正比) | X2 ~ X8 最常用 |
| 电源轨 | 上下贯穿的 VDD / VSS | 布局时要对齐 |
| 时序模型 | Liberty (.lib) 文件 | 检查 transition 上限 |
小技巧:在项目早期,我用一个脚本统计网表中标准单元的实例数。如果发现某些驱动强度为X1的单元超过总量的10%,我会重新约束综合,强制使用X2以上。这能省下后期物理优化的大量时间。
2.3 宏单元与IP:芯片里的“大块头”
宏单元跟标准单元不同。它们可能是SRAM、PLL、ADC、DDR控制器——这些模块面积大、形状固定、引脚多。你怎么摆它们,直接影响整个芯片的布局质量。
我记得有一次,一个团队把SRAM阵列摆在了芯片正中心,结果数据通路要绕一大圈才能连到IO。那项目修了整整三个月。为什么会这样?因为没给宏单元留“通路走廊”。
宏单元放置的核心原则:
- 引脚方向要一致:宏单元的数据输入引脚朝向数据来源,输出引脚朝向数据目的。
- 留出布线通道:宏单元之间至少保持 10-20 microns 的间距。
- 关注电源完整性:大SRAM功耗高,需要在周围布置密集的去耦电容。
- 避免形成“热岛”:高功耗宏单元要分散放置,不能堆在一起。
2.4 IO规划:芯片的“门户”设计
IO规划,说白了就是芯片的“门”往哪开。数字信号、模拟信号、电源、时钟——它们从芯片边界进出的位置,必须仔细规划。我见过一个惨痛的案例:一个高速接口的IO被放在了电源IO旁边,噪声直接耦合到了信号线上。那板子甚至没法正常工作。
嗯,这里要注意几个点:
- 分区规划:数字IO、模拟IO、电源IO要分区放置,避免串扰。
- 时钟IO要优先:时钟IO需要最短、最干净的路径到PLL。
- ESD保护结构:每个IO pad周围都需要ESD保护,这会影响IO间距。
- 遵守foundry规则:每个工艺节点对IO pad的间距、金属层连接都有严格规定。
避坑指南:我曾经掉进过一个坑——在早期规划时忘了给IO的供电Ring留够宽度。结果后来说供电IR drop超标,只能重新改IO环,整个布局几乎重来。血的教训:IO供电环的宽度,最好在布局阶段就按峰值电流的1.5倍计算。
好了,这一章的内容就是这样。布局是个“谋定而后动”的活。你前期想得越清楚,后期越省心。标准单元是你的“士兵”,宏单元是你的“重型装备”,IO是你的“城门”。怎么排兵布阵,你想好了吗?