1. ICC2设计流程总览
数字集成电路从寄存器传输级(RTL)描述走到可交付晶圆厂的GDSII版图,中间要经过综合、布局规划、布局、时钟树综合、布线、时序收敛、物理验证等一系列环节。Synopsys IC Compiler II(简称ICC2)承担的是其中"物理实现"这一段的核心工作:它接收综合后的门级网表、时序约束与物理库,输出经过时序与物理验证的版图数据。理解ICC2在整个链路中的位置,以及它内部的数据模型与工程组织方式,是后续所有布局布线与收敛操作的前提。
一、从RTL到GDSII的完整链路
整条实现链路可以划分为前后衔接的几个阶段。前端阶段由Design Compiler等综合工具完成:RTL经过逻辑综合、优化,映射到目标工艺库的标准单元,生成门级网表(.v)与设计约束(SDC)。此时设计只有逻辑连接关系,没有物理位置信息,称为"未布局"状态。
进入ICC2后,物理实现按以下顺序推进:
- 数据准备与设计导入:读入网表、SDC约束、逻辑库(.db)、物理库(LEF/NDM)、工艺文件(TLU+)等,建立设计数据库。
- 布局规划(Floorplan):确定芯片/模块的尺寸、形状,摆放宏单元(SRAM、IP核),规划电源网络与I/O位置。
- 布局(Placement):将标准单元放置到合法行(row)上,同时进行时序、拥塞、功耗的初步优化。
- 时钟树综合(CTS):构建时钟网络,插入缓冲器平衡各触发器时钟到达时间,控制偏斜(skew)与插入延迟。
- 布线(Routing):先全局布线规划走线通道,再详细布线确定每条网络的金属层与具体路径,最后做布线后优化。
- 签核与收敛:完成时序、信号完整性、DRC/LVS等检查,迭代修复违例,直到满足签核标准。
- 输出GDSII:导出最终版图数据交付制造。
需要强调的是,这条链路并非严格单向。时序收敛往往要求回到布局甚至布局规划阶段调整;布线拥塞可能迫使修改宏单元位置。ICC2的价值正在于把这些环节放在统一的数据库与优化引擎中,使跨阶段的迭代代价可控。
二、ICC2工具架构与数据模型
ICC2与上一代ICC最大的区别在于其统一的数据模型。传统流程中,布局、CTS、布线各阶段常需要把设计在不同格式间转换,容易造成信息丢失与不一致。ICC2采用NDM(New Data Model)作为统一的物理与逻辑数据库,把网表、时序库、物理库、约束、寄生参数等整合在同一容器中,各阶段共享同一份数据,优化引擎可以直接读写,无需反复导入导出。
从架构上看,ICC2由几个关键部分组成:
- 设计数据库(Design Database):存储网表、布局、布线、时序等全部设计信息,是各阶段操作的唯一数据源。
- 物理引擎:包括布局器、时钟树综合器、布线器,负责具体的几何操作与优化。
- 时序分析引擎:内嵌的STA能力,在布局、CTS、布线各阶段实时评估时序,驱动优化。
- 优化与修复引擎:针对setup/hold违例、DRC违例、拥塞等问题自动插入缓冲、调整尺寸、重布线。
- 命令与脚本接口:以Tcl为基础,提供icc2_shell交互环境与批处理脚本能力。
NDM库的准备是工程启动的关键一步。通常需要把工艺厂的LEF、GDS、TLU+、.db等文件通过library_manager或create_ndm命令编译成NDM格式,供ICC2直接调用。这一步做得好坏,直接影响后续读库速度与数据一致性。
三、启动一个ICC2工程的典型命令与目录结构
一个规范的ICC2工程通常按以下方式组织。首先建立工作目录,把库文件、约束、脚本分门别类放置:
project/
├── lib/ # NDM库、TLU+、.db
├── netlist/ # 综合后门级网表
├── sdc/ # 时序约束文件
├── scripts/ # Tcl实现脚本
├── run/ # 运行目录,存放日志与中间结果
└── output/ # 最终GDSII、报告
启动ICC2并完成基本设置的核心命令序列如下:
# 启动ICC2 shell
icc2_shell
# 设置搜索路径与库
set search_path [list ./lib /pdk/ndm]
set link_library [list stdcell.ndm sram.ndm]
set target_library stdcell.ndm
# 读入网表与约束
read_verilog ./netlist/top.v
current_design top
read_sdc ./sdc/top.sdc
# 读入物理库与寄生参数
read_parasitic_tech -tlup ./lib/tluplus.max -name maxTLU
# 检查设计状态
check_design
report_design -physical
执行完上述步骤后,设计已进入ICC2数据库,处于未布局状态。此时可以用report_timing查看初始时序,用check_design确认网表与约束的一致性。接下来才是布局规划、布局、CTS、布线等物理操作。
四、布局布线与收敛在流程中的位置
布局布线(P&R)是ICC2的主体工作,位于综合之后、签核之前。它把逻辑网表转化为具有物理位置和金属连线的版图。而"收敛"并不是一个独立阶段,而是贯穿布局、CTS、布线的持续目标:时序要收敛(满足setup/hold)、拥塞要收敛(布线资源足够)、功耗与面积要收敛(满足PPA目标)。
实际项目中,收敛往往是最耗时的部分。常见做法是:布局阶段先做粗略时序优化,CTS后重点修时钟偏斜与setup,布线后集中修hold与DRC。ICC2的place_opt、clock_opt、route_opt等命令把优化与物理操作绑定,使每次操作都朝收敛目标推进。理解这一点,就能明白为什么ICC2流程不是简单的"一步步走完",而是"边走边收敛、必要时回头"的迭代过程。