返回文章列表
veriflowICC2物理设计Synopsys数字后端

ICC2 物理设计流程详解

2024-06-2015 min

概述

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,关断不活跃逻辑 |

最佳实践

  1. 模块化脚本:每个阶段独立,便于调试和复用
  2. 版本控制:关键节点保存数据库快照
  3. 自动化检查:每个阶段后进行 DMSA 检查
  4. 日志分析:保留完整日志用于问题追溯

总结

ICC2 物理设计流程是一个迭代优化的过程,需要根据实际违例情况灵活调整各阶段参数。建议在实际项目中积累经验,形成标准化的流程脚本。