4、顶层Floorplan规划:芯片尺寸估算,IO Pad布局,宏单元(Memory/IP)摆放策略

好,咱们进入正题。顶层Floorplan,说白了就是给芯片“画地皮”。你想想看,一个芯片里要放那么多东西——标准单元、Memory、各种IP、还有一圈IO Pad,怎么安排才合理?这步要是没做好,后面跑时序、修DRC,那真是欲哭无泪。我这些年踩过的坑,有一半都跟Floorplan有关。

4.1 芯片尺寸估算:别太紧,也别太松

芯片尺寸怎么定?不是拍脑袋想的。我一般会先算一个“核心面积”,再算上IO环和封装的余量。

核心面积估算公式:

Core_Area = (Total_Std_Cell_Area + Total_Macro_Area) / Utilization_Target

这里的Utilization_Target(目标利用率)很关键。我个人习惯,对于一般的数字芯片,利用率设在0.7~0.8之间。为什么留这么多空?因为还要走电源网络、放时钟缓冲器、修天线效应,这些都要占地方。

经验值参考:

芯片类型目标利用率备注
低功耗IoT芯片0.65 ~ 0.75面积敏感,但布线资源要留足
高性能计算芯片0.70 ~ 0.80时钟树复杂,需要更多缓冲器空间
存储器周边逻辑0.75 ~ 0.85宏单元多,标准单元相对规整

算完核心面积,还要加上IO Pad占的环状区域。每个Pad的宽度一般是固定的(比如80μm或100μm),Pad pitch(间距)也要考虑进去。嗯,这里要注意:IO Pad的数量不是随便定的,你得先看芯片有多少个信号要进出,再加上电源和地Pad。

我的小技巧: 在估算阶段,我会把芯片的宽高比尽量控制在1:1到1.2:1之间。太扁的芯片,走线会非常痛苦,特别是跨芯片的长线。

4.2 IO Pad布局:信号与电源的排兵布阵

IO Pad布局,说白了就是给芯片“装门”。门装在哪里,信号就从哪里进出。这里有几个原则,我每次做项目都会反复检查。

第一,电源Pad要均匀分布。 我曾经在一个项目里,把电源Pad都堆在芯片一角,结果IR drop惨不忍睹。后来学乖了,每隔一段距离就放一组VDD/VSS Pad,形成“电源网格”的感觉。

第二,高速信号要远离噪声源。 比如DDR接口的IO,尽量放在芯片的一侧,跟其他慢速IO隔开。你想想看,一个几百兆赫兹的DDR信号,旁边要是挨着一个GPIO,串扰会让你哭都哭不出来。

第三,模拟和数字IO要分区。 模拟信号(比如ADC/DAC的输入输出)需要干净的电源和地,最好单独划一个区域,用双环隔离。

避坑指南: 我曾经在一个项目中,把时钟输入Pad放在了芯片角落,结果时钟信号绕了大半个芯片才到PLL,引入的jitter让整个芯片无法正常工作。从那以后,时钟Pad我一定放在离PLL最近的位置。

4.3 宏单元摆放策略:Memory和IP的“安家”之道

宏单元(Memory、IP)是芯片里的“大块头”。它们不像标准单元那样可以随便放,摆错了位置,后面布线就是一场噩梦。

摆放原则一:按数据流方向排列。 我一般会先看芯片的顶层数据流图。比如一个视频处理芯片,数据从DDR进来,经过图像处理IP,再到显示输出。那Memory就应该靠近DDR控制器,处理IP放在中间,显示接口放在另一端。这样数据流是“直来直去”的,不会绕路。

摆放原则二:留出走线通道。 宏单元之间要留出足够的“走廊”给走线。我见过有人把两个大Memory贴在一起放,结果中间连一根线都走不过去,只能绕外围,时序全崩了。

摆放原则三:考虑电源完整性。 大宏单元会消耗大量电流,它们周围要放足够的去耦电容(decap)。我习惯在宏单元周围留出10~20μm的“decap带”,专门放电容。

宏单元摆放检查清单:

  • 是否按数据流方向排列?
  • 宏单元之间是否有足够的走线通道?
  • 电源/地连接是否足够?有没有IR drop风险?
  • 时钟输入是否靠近时钟源?
  • 是否有热分布考虑?(大功率IP不要挤在一起)

4.4 知识体系:顶层Floorplan的核心逻辑

下面这张图,是我自己总结的顶层Floorplan决策流程。每次做新项目,我都会先过一遍这个逻辑。

顶层Floorplan规划核心逻辑 输入:网表 + 工艺库 + 约束 芯片尺寸估算 核心面积 = (标准单元面积 + 宏单元面积) / 利用率 IO Pad布局 电源均匀分布 | 高速信号隔离 | 模拟数字分区 宏单元(Memory/IP)摆放 数据流导向 | 留走线通道 | 考虑电源完整性 输出:Floorplan方案

你看,整个流程是串行的。先有输入,再算尺寸,然后摆IO,最后放宏单元。每一步都依赖上一步的结果。我见过有人跳步骤,先摆宏单元再算尺寸,结果芯片面积不够,IO Pad放不下,全部返工。

4.5 实战中的几个“坑”

最后,分享几个我亲身踩过的坑,希望能帮你省点时间。

  • 坑一:利用率算得太满。 我有个项目,利用率设到0.85,结果布线阶段发现很多区域走线拥塞,最后不得不把芯片面积扩大10%,重新做Floorplan。现在我的利用率很少超过0.8。
  • 坑二:IO Pad顺序没对齐封装。 有一次,我按自己的习惯排了IO Pad,结果封装工程师说他的BGA球栅顺序跟我不匹配,最后只能加一层转接板,成本飙升。从那以后,我都是先跟封装团队对齐再动手。
  • 坑三:宏单元挡住了时钟树。 我把一个大的SRAM放在了芯片正中央,结果时钟信号要绕一个大圈才能到另一侧的逻辑。时钟偏差(skew)大得离谱,修了整整两周。现在我会在Floorplan阶段就画好时钟树的“主干道”,确保宏单元不会挡路。

一句话总结: 顶层Floorplan不是一次就能搞定的。我一般会迭代2~3轮,每轮都跑一下快速评估(比如粗略的时序分析和IR drop分析),发现问题及时调整。别想着一步到位,那是不可能的。


专注资料整理