概述
ICC2(IC Compiler II)是 Synopsys 提供的先进物理设计工具,支持从网表到 GDSII 的完整实现流程。本文基于实际项目脚本,详解各阶段核心命令和参数设置。
完整流程阶段
1. 初始化阶段(Init)
# 02.dirtyinit.tcl - 脏启动初始化
source 02.dirtyinit.tcl
# 主要任务:
# - 创建工作目录
# - 设置时序库文件
# - 加载设计数据
# 03.init.tcl - 完整初始化
source 03.init.tcl
# 核心设置
set_app_var init_layout_catalog {./layout_catalog}
set_app_var init_mw_lib $target_library
set_app_var search_path $search_path
关键参数:
| 参数 | 说明 | 典型值 | |------|------|--------| | init_layout_catalog | layout 目录 | ./layout_catalog | | init_mw_lib | 目标库 | $target_library | | search_path | 搜索路径 | 指向上游输出 |
2. Floorplan 阶段
# 04.floorplan.tcl
source 04.floorplan.tcl
核心操作:
# 创建 Core 和 DIE 区域
create_floorplan \
-width 500 \
-height 500 \
-core_width 10 \
-core_height 10
# 放置 RAM/ROM/IP
create_arrayed_instances \
-template $ram_template \
-rows 4 \
-cols 2
# 电源网络综合
synthesize_floorplan -power_plan
3. Placement 阶段
3.1 门级布局
# 15.place.tcl
source 15.place.tcl
# 标准单元布局
place_design -effort high
# 布局优化
optimize_design -effort medium
3.2 CCD 时钟感知布局
# 16.placeccd.tcl
source 16.placeccd.tcl
# CCD 布局
place_design -clock_aware -effort high
3.3 Filler 放置
# 14.placeffm.tcl
source 14.placeffm.tcl
create_cell_fillers
4. PPO 阶段(Post-Placement Optimization)
# 17.ppo.tcl
source 17.ppo.tcl
# 布局后优化
repair_design -setup
optimize_design -post_place
5. CTS 阶段(Clock Tree Synthesis)
# 18.cts.tcl
source 18.cts.tcl
# 时钟树综合
create_clock_tree \
-spec $cts_spec_file \
-method cluster_clock
# 时钟树后优化
clock_opt -fix_slew
MCTS 变体:
# 18.mcts.tcl - 多时钟树综合
source 18.mcts.tcl
6. CCD 阶段(Clock Data Complexity)
# 19.ccd.tcl
source 19.ccd.tcl
# CCD 优化
route_clock -global
opt_clock -CCD
7. Route 阶段
# 31.route.tcl
source 31.route.tcl
# 全局布线
route_design -global
# 详细布线
route_design -detail
8. 提孔与优化
8.1 CTO(Clock Tree Optimization)
# 22.cto.tcl
source 22.cto.tcl
clock_opt -fix_slew -fix_capacitance
8.2 CT CCD
# 24.ctoccd.tcl
source 24.ctoccd.tcl
route_clock -global
opt_clock -CCD
8.3 Hold Fix
# 26.ctohold.tcl
source 26.ctohold.tcl
fix_hold -buffer
9. 功耗优化
# 28.ctopwr.tcl
source 28.ctopwr.tcl
# 功耗优化
optimize_design -power -effort high
10. 布线后优化
# 32.pro.tcl
source 32.pro.tcl
# 布线后时序优化
route_design -global
opt_design -post_route
11. DFM 优化
# 37.dfm.tcl
source 37.dfm.tcl
# 添加天线二极管
insert_antenna_diode -auto
# 金属填充
add_filler -cell $filler_cells
12. 最终时序修复
# 38.timfix.tcl
source 38.timfix.tcl
# 修复剩余时序违例
fix_timing -setup -hold
输出文件
GDSII 输出
# 50.libgen.tcl
write_gds -output $output_dir/${design}.gds
Netlist 输出
write -format verilog -output $output_dir/${design}.v
流程参数配置
# project_setup.tcl
set target_library "stdcell.db"
set link_library "* $target_library"
set search_path "/path/to/blocks"
set Milkyway_dir "./work/${design}.mw"
常见问题与解决方案
| 问题 | 原因 | 解决方案 | |------|------|----------| | Setup 违例 | 布局不合理 | 调整 floorplan,重新布局 | | Hold 违例 | 时钟树不平衡 | 修复时钟树,增加 buffer | | 布线阻塞 | 拥塞区域 | 调整布局,添加 spare cells | | 功耗过高 | 切换活动过多 | 使用 MTCMOS,关断不活跃逻辑 |
最佳实践
- 模块化脚本:每个阶段独立,便于调试和复用
- 版本控制:关键节点保存数据库快照
- 自动化检查:每个阶段后进行 DMSA 检查
- 日志分析:保留完整日志用于问题追溯
总结
ICC2 物理设计流程是一个迭代优化的过程,需要根据实际违例情况灵活调整各阶段参数。建议在实际项目中积累经验,形成标准化的流程脚本。