第一次接触芯片物理设计时,我被Floorplan这个环节搞得晕头转向。直到参与实际项目后才明白,这就像装修房子前画设计图——既要考虑每个房间的功能分区,又要预留水电走线的空间。Floorplan的核心目标可以归纳为三点:确定芯片面积、规划I/O单元位置、摆放宏模块(Macro)。这些决策直接影响后续布线难度和芯片性能。
在开始动手前,需要准备几类关键文件:
read_verilog命令后立即用check_design验证tcl复制MACRO IV
CLASS CORE ;
ORIGIN 0 0 ;
SIZE 3 BY 12 ;
PIN A
DIRECTION INPUT ;
ANTENNAGATEAREA 1.4 ;
PORT
LAYER metal1 (0.5 5) (1.0 5.5) ;
END
END IV
read_liberty加载时指定-corner参数实际项目中我习惯先用report_lib检查库文件完整性,再用gui_start打开图形界面对照查看。曾经有个项目因为漏看LEF中的OBS(阻挡层)定义,导致后期绕线困难,这个坑希望大家避开。
Die Box、IO Box和Core Box的关系就像俄罗斯套娃。Die Box是芯片最外层边界,IO Box包裹着芯片四周的输入输出单元,Core Box则是核心逻辑区域。为什么Core和IO之间要留空隙?这是为了:
在Innovus工具中,用以下命令设置Box:
tcl复制create_floorplan \
-core_width 1000 -core_height 800 \
-left_io2core 50 -right_io2core 50 \
-top_io2core 60 -bottom_io2core 60
Row就像PCB上的焊盘阵列,定义在LEF的Site中。相邻Row通常会翻转(flip)摆放,这样能共享电源线。查看Row定义示例:
tcl复制SITE CoreSite CLASS CORE ;
SYMMETRY Y ;
SIZE 0.5 BY 6 ;
END CoreSite
Track则是布线资源的"隐形轨道",其pitch值(最小线宽+间距)决定布线密度。28nm工艺下metal1的典型pitch可能是0.1um。可以用report_track命令查看各层track信息,这对后期绕线拥堵分析很有帮助。
Memory、PLL等宏模块的摆放直接影响时序收敛。我的经验法则是:
create_halo命令设置曾经有个项目因为PLL摆放不当导致时钟偏差超标,后来用place_macro -name PLL_1 -x 100 -y 200 -orientation FN重新调整才解决。
当宏模块超过50个时,可以考虑自动摆放:
tcl复制plan_design -floorplan \
-power_driven \
-timing_driven \
-congestion_driven
关键参数说明:
-power_driven:优化供电网络-timing_driven:考虑关键路径延迟-congestion_driven:预防布线拥堵建议先用set_keepout_margin设置模块间距约束,否则工具可能把DDR和ADC摆得太近导致噪声耦合。
| 约束类型 | 所属模块单元 | 非所属模块单元 | 典型应用场景 |
|---|---|---|---|
| Guide | 可进出 | 可进入 | 初期模块分区 |
| Region | 必须在内 | 可进入 | 模拟数字隔离 |
| Fence | 必须在内 | 禁止进入 | 敏感电路保护 |
设置约束的Tcl示例:
tcl复制create_region -name Analog -xl 100 -yl 100 -xh 500 -yh 600
set_attribute [get_regions Analog] type fence
create_placement_blockage -type hard设置-density 30表示30%填充率-except_standard_cell参数有个项目在CPU核附近忘记设Partial Blockage,导致局部过热,后来用set_placement_blockage_density才修复。
在Floorplan阶段就要考虑供电:
tcl复制create_power_straps \
-direction vertical \
-width 2 -spacing 10 \
-nets {VDD VSS} \
-layer metal8
注意电源线宽度要满足IR drop要求,可用check_power_grid提前验证。
用set_max_delay -from A -to B 1.2约束关键路径后,可以通过place_opt -timing_driven让工具优先优化这些路径的模块摆放。曾经通过调整乘法器阵列的摆放位置,使关键路径延迟降低了18%。
每次Floorplan完成后,建议运行check_floorplan做全面检查,这个习惯帮我省去了至少三次设计返工。