物理设计全流程技能 - 从floorplan到GDSII,完整数字芯片物理设计指导
当用户需要进行数字芯片物理设计时,启用此技能。提供从 floorplan 到 GDSII 全流程指导,涵盖问题调试和优化。
| 参数 | 28nm | 16nm | 7nm | 说明 |
|---|---|---|---|---|
| Core 利用率 | 70-80% | 65-75% | 60-70% | 先进节点需更低 |
| 布线拥塞度 | < 85% | < 80% | < 75% | 超过需重新规划 |
| 标准单元密度 | < 85% | < 80% | < 75% | 局部密度 |
| 时钟树级数 | 3-5级 | 3-5级 | 4-6级 | 平衡 skew 和功耗 |
| 时钟 Skew |
| < 150ps |
| < 100ps |
| < 50ps |
| 同时钟域内 |
| 参数 | 典型值 | 说明 |
|---|---|---|
| IR 降上限 | < 5% Vdd | 必须满足 |
| EM 电流密度 | < spec limit | 按工艺规则 |
| 电源环宽度 | 2-5um | 取决于电流 |
| 电源带间距 | 50-100um | 取决于 IR 要求 |
| 参数 | 7nm | 5nm | 说明 |
|---|---|---|---|
| 金属密度范围 | 40-60% | 45-55% | CMP 要求 |
| 通孔冗余 | 单通孔禁止 | 双通孔 | 可靠性 |
| 线端扩展 | > 10nm | > 12nm | 制造余量 |
诊断步骤:
# 1. 检查时序报告
report_timing -max_paths 20 -slack_lesser_than 0
# 2. 分析拥塞
report_congestion -hotspot
# 3. 检查布局密度
report_design_density
判断标准:
| 症状 | 可能原因 | 诊断动作 |
|---|---|---|
| WNS 大且路径集中 | 关键路径问题 | 分析路径延迟组成 |
| TNS 大且分散 | 整体设计问题 | 检查利用率、拥塞 |
| 拥塞热点与时序违例重叠 | 布局问题 | 调整布局 |
根本原因定位:
| 根本原因 | 诊断特征 | 解决方案 |
|---|---|---|
| 利用率过高 | > 80% | 增加面积或优化逻辑 |
| 拥塞严重 | > 85% | 重新规划布局 |
| 时钟 Skew 大 | > 150ps | 重做 CTS |
| Macro 摆放不合理 | 数据流绕远 | 重新摆放 Macro |
诊断步骤:
# 检查全局拥塞
report_congestion
# 检查局部拥塞热点
report_congestion -hotspot
# 检查布线资源
report_routing_resources
判断标准:
| 拥塞度 | 判断 | 行动 |
|---|---|---|
| < 70% | 正常 | 继续 |
| 70-85% | 轻度 | 关注热点区域 |
| 85-95% | 严重 | 必须优化 |
| > 95% | 极严重 | 需重新规划 |
根本原因定位:
| 根本原因 | 诊断特征 | 解决方案 |
|---|---|---|
| 标准单元密度过高 | 局部密度 > 85% | 分散摆放、增加通道 |
| Macro 太密集 | Macro 间距 < 50um | 重新摆放 Macro |
| 总线走线冲突 | 高位宽总线重叠 | 留专用通道 |
| 电源网格太密 | PDN 占用过多 | 优化 PDN 间距 |
诊断步骤:
# 运行 IR 降分析
run_ir_drop_analysis
# 检查 IR 热点
report_ir_drop -threshold 0.05
# 检查电源网格
report_power_grid
判断标准:
| IR 降 | 判断 | 行动 |
|---|---|---|
| < 3% | 良好 | 继续 |
| 3-5% | 边缘 | 关注热点 |
| 5-7% | 严重 | 必须优化 |
| > 7% | 极严重 | 需重新设计 PDN |
根本原因定位:
| 根本原因 | 诊断特征 | 解决方案 |
|---|---|---|
| 电源带宽不足 | 电源环电流密度高 | 加宽电源环 |
| 电源带间距过大 | 局部 IR 高 | 增加电源带 |
| 高功耗模块远离电源 | 模块处 IR 高 | 调整布局 |
| 电源通孔不足 | 过孔处电阻高 | 增加过孔 |
诊断步骤:
# 运行 DRC
verify_drc
# 分类统计
report_drc -type {spacing width density}
# 定位热点
report_drc -hotspot
分类处理:
| 违规类型 | 占比高 | 处理优先级 |
|---|---|---|
| 间距违规 | 拥塞导致 | 先解决拥塞 |
| 密度违规 | 填充问题 | 自动填充 |
| 天线违规 | 长线导致 | 跳线或二极管 |
| 过孔违规 | 布线问题 | 调整布线 |
物理设计结果
│
├── 时序不收敛?
│ │
│ ├── WNS > -500ps?
│ │ ├── 是 → 局部优化(换驱动、有用偏斜)
│ │ └── 否 → 继续
│ │
│ ├── WNS -500ps ~ -1ns?
│ │ ├── 是 → 中等优化(重摆放、复制寄存器)
│ │ └── 否 → 继续
│ │
│ ├── WNS < -1ns?
│ │ ├── 逻辑级数 > 10? → RTL 重构
│ │ ├── 拥塞 > 80%? → 重新规划布局
│ │ └── 线延迟 > 50%? → 重新摆放模块
│ │
│ └── 多工艺角问题?
│ ├── SS 违例,FF OK → 建立时间优化
│ └── FF 违例,SS OK → 保持时间优化
│
├── 拥塞严重?
│ │
│ ├── 全局拥塞 70-80%?
│ │ └── 轻度优化(增加 padding)
│ │
│ ├── 全局拥塞 80-90%?
│ │ └── 中度优化(调整模块密度)
│ │
│ └── 全局拥塞 > 90%?
│ ├── 增加面积 5-10%
│ ├── 重新规划 Macro 位置
│ └── 分解大模块
│
├── IR 降过大?
│ │
│ ├── IR 降 3-5%?
│ │ └── 增加电源带宽
│ │
│ └── IR 降 > 5%?
│ ├── 重新设计 PDN
│ ├── 增加电源带
│ └── 高功耗模块重摆放
│
└── DRC 违规?
│
├── 违规 < 100?
│ └── 自动修复
│
├── 违规 100-1000?
│ └── 分类修复
│
└── 违规 > 1000?
└── 分析根本原因,可能需要重新布线
| 阶段 | 正常迭代次数 | 迭代内容 |
|---|---|---|
| Floorplan | 2-3 次 | 面积、模块位置、电源网格 |
| Placement | 2-4 次 | 拥塞、时序、密度 |
| CTS | 1-2 次 | skew、latency |
| Routing | 1-2 次 | DRC、天线 |
| Timing Closure | 3-5 次 | 建立时间、保持时间 |
好的信号:
坏的信号:
迭代停止条件:
1. 分阶段验证
Floorplan 后:验证 IR、模块位置
Placement 后:验证拥塞、初始时序
CTS 后:验证时钟 skew、latency
Routing 后:验证时序、DRC
Signoff 前:全量验证
2. 增量优化
# 只优化问题区域,不做全局优化
place_opt -incremental
route_opt -incremental
# 只优化关键路径
opt_design -post_route -critical_path_only
3. 热点修复
1. 识别热点区域(拥塞、时序、IR)
2. 只修复热点,不影响其他区域
3. 验证修复效果
4. 检查是否引入新问题
| 版本 | 日期 | WNS | TNS | 拥塞 | IR降 | DRC | 修改内容 |
|---|---|---|---|---|---|---|---|
| v1.0 | 01/01 | -800ps | -50ns | 85% | 4% | 500 | 初始 |
| v1.1 | 01/02 | -400ps | -20ns | 80% | 4% | 200 | 调整 Macro |
| v1.2 | 01/03 | -150ps | -5ns | 75% | 3% | 50 | 优化 Placement |
| v1.3 | 01/04 | +20ps | 0 | 72% | 3% | 0 | 时序优化 |
| v1.4 | 01/05 | +50ps | 0 | 70% | 2% | 0 | 最终签收 |
Timing Summary:
WNS: -1.2ns (SS corner)
TNS: -45ns
NP: 128 paths
关键路径:packet_parser -> packet_buffer
逻辑级数:15级
步骤1:分析拥塞
全局拥塞:78%
局部拥塞热点:packet_parser 区域 95%
结论:拥塞严重,导致绕线延迟大
步骤2:分析布局
packet_parser 位置:(100, 100)
packet_buffer 位置:(900, 900)
距离:约 1.2mm
结论:模块距离过远
步骤3:分析逻辑
逻辑级数:15级(超过建议的 8-10 级)
结论:逻辑级数过多
| 问题 | 解决方案 | 效果 |
|---|---|---|
| 拥塞 95% | 增加 10% 面积 | 拥塞降至 80% |
| 距离 1.2mm | 移动 packet_buffer 靠近 parser | 距离降至 300um |
| 逻辑级数 15 | 插入流水级 | 逻辑级数降至 8 |
Timing Summary:
WNS: +50ps (SS corner)
TNS: 0
NP: 0
时序收敛,流片成功。
需要准备:
检查:
在正式布局前,进行布局预估可以减少迭代次数。
1. 基于综合结果预估
综合后面积 × 预估系数 = 物理设计面积
预估系数参考:
- 28nm: 1.3 - 1.5
- 16nm: 1.4 - 1.6
- 7nm: 1.5 - 1.8
2. 基于模块预估
| 模块类型 | 面积系数 | 说明 |
|---|---|---|
| 纯逻辑 | 1.2 - 1.4 | 标准单元为主 |
| SRAM 密集 | 1.1 - 1.2 | 存储器面积稳定 |
| 混合模块 | 1.3 - 1.5 | 逻辑+存储器 |
| 模拟模块 | 1.5 - 2.0 | 需要保护带 |
3. 布线资源预估
布线轨道需求 = (标准单元高度 × 单元数 × 引脚因子) / 金属层效率
引脚因子: 2.5 - 3.5 (取决于连接密度)
金属层效率: 0.7 - 0.8 (考虑 DRC 限制)
1. 全局拥塞预估
# 基于布线资源计算
report_routing_resources
# 预估拥塞度
拥塞度 = 已用轨道数 / 总轨道数
目标值:
- 28nm: < 80%
- 16nm: < 75%
- 7nm: < 70%
2. 局部拥塞预估
局部拥塞 = 模块内单元密度 × 布线复杂度
布线复杂度:
- 简单逻辑: 1.0
- 中等复杂度: 1.2
- 高复杂度: 1.5 (高位宽总线、多端口存储器)
1. 数据流驱动摆放
输入 → 模块A → 模块B → 模块C → 输出
(靠近) (靠近) (靠近)
原则:数据流方向紧凑摆放
2. 时钟域分组
时钟域A 模块:
- CPU核心
- 缓存
时钟域B 模块:
- DDR控制器
- 外设接口
原则:同时钟域模块靠近摆放
3. 功耗密度平衡
高功耗模块分散摆放:
- CPU核心 (分散四角)
- DSP模块 (分散摆放)
- 存储器阵列 (均匀分布)
避免热点:
- 功耗密度 > 1W/mm² 需要散热考虑
步骤:
检查清单 ✅
Floorplan 最佳实践:
# ============================================
# 1. 创建 Floorplan
# ============================================
# 设置芯片尺寸和核心区域
initialize_floorplan -core_utilization 0.7 \
-core_aspect_ratio 1.0 \
-core_margins {{left 10} {right 10} {top 10} {bottom 10}}
# 或者直接指定尺寸
initialize_floorplan -core_area {0 0 1000 1000}
# ============================================
# 2. IO 摆放
# ============================================
# 自动摆放 IO
place_pins -self
# 手动摆放 IO
set_pin_physical_constraint -pins {pin_name} -layers {M4} -sides {1}
# 按约束文件摆放
read_io_constraints io_constraints.iof
# ============================================
# 3. 电源环创建
# ============================================
# 创建电源环
create_pg_ring_pattern ring_pattern \
-horizontal_layer M8 \
-vertical_layer M9 \
-horizontal_width {2.0} \
-vertical_width {2.0} \
-horizontal_spacing {0.5} \
-vertical_spacing {0.5}
set_pg_strategy ring_strategy \
-pattern {{name: ring_pattern} {nets: {VDD VSS}} \
-core_offset {{inter_semiconductor_space: 1.0}}}
create_pg_mesh_region ring_strategy
# ============================================
# 4. 电源带创建
# ============================================
# 创建电源带
create_pg_mesh_pattern mesh_pattern \
-horizontal_layer M6 \
-vertical_layer M7 \
-horizontal_width {0.5} \
-vertical_width {0.5} \
-horizontal_pitch {50} \
-vertical_pitch {50}
# ============================================
# 5. Hard Macro 摆放
# ============================================
# 设置 Macro 约束
set_macro_constraint -allowed_orientations {R0 R180 MX MY}
# 手动摆放 Macro
place_cell -inst_name macro_inst1 -location {100 200} -orientation R0
# 自动摆放 Macro
place_macros
# 设置 Macro Keepout
create_keepout_margin -type hard -outer {5 5 5 5} macro_inst1
# ============================================
# Innovus Floorplan 流程
# ============================================
# 设置设计
loadDesign design.dc
# 创建 floorplan
floorPlan -coreUtilization 0.7 \
-coreAspect 1.0 \
-coreMargin 10
# 或者指定尺寸
floorPlan -site core -d 1000 1000 10 10 10 10
# IO 摆放
loadIoFile io_constraints.iof
# 创建电源环
addRing -nets {VDD VSS} \
-layer {top M8 bottom M8 left M9 right M9} \
-width 2.0 \
-spacing 0.5 \
-offset 1.0
# 创建电源带
addStripe -nets {VDD VSS} \
-layer M6 \
-direction horizontal \
-width 0.5 \
-spacing 0.5 \
-set_to_set_distance 50
# Macro 摆放
placeInstance macro_inst1 100 200 R0
# 创建 blockage
createPlaceBlockage -type hard -boundary {{0 0} {100 100}}
# ============================================
# OpenROAD Floorplan 流程
# ============================================
# 初始化 floorplan
initialize_floorplan -utilization 0.7 \
-aspect_ratio 1.0 \
-core_space 10
# IO 摆放
place_pins -hor_layers M4 -ver_layers M3
# 创建电源网格
add_global_connection -net VDD -pin_pattern {VDD} -power
add_global_connection -net VSS -pin_pattern {VSS} -ground
# 电源网格定义
define_pdng_grid -name grid1 \
-starts_with POWER \
-layers {M8 M9} \
-widths 2.0 \
-pitches 100
# Macro 摆放
place_macro -macro_name macro_inst1 -x 100 -y 200 -orientation R0
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 面积过大 | 利用率设置过低 | 提高利用率,重新规划 |
| 拥塞严重 | Macro 摆放过密 | 调整 Macro 间距,增加通道 |
| IR 降过大 | 电源网格不足 | 增加电源带宽,减少间距 |
| 时序不收敛 | Macro 位置不合理 | 根据 dataflow 重新摆放 |
步骤:
检查清单 ✅
拥塞过高怎么办?
# ============================================
# 1. 全局 Placement
# ============================================
# 设置 placement 目标
set_placement_spacing_label -name S -side both -lib_cells [get_lib_cells]
# 运行全局 placement
place_opt -from initial
# 或者分步执行
legalize_placement -incremental
# ============================================
# 2. 拥塞分析
# ============================================
# 检查拥塞
report_congestion
# 查看详细拥塞
report_congestion -layers {M1 M2 M3 M4 M5 M6}
# 生成拥塞热点报告
report_congestion -hotspot
# ============================================
# 3. 拥塞优化
# ============================================
# 如果拥塞严重,增加目标密度
set_placement_spacing_label -name S -side both -lib_cells [get_lib_cells]
set_placement_density_limit 0.75
# 拥塞驱动的 placement
place_opt -congestion_effort high
# 使用 padding 缓解拥塞
set_placement_padding -global -left 2 -right 2
# ============================================
# 4. 时序驱动 Placement
# ============================================
# 使能时序优化
set_optimize_effort -high
# 运行时序驱动的 placement
place_opt -from initial -timing_effort high
# 检查初始时序
report_timing -max_paths 10
# ============================================
# Innovus Placement 流程
# ============================================
# 全局 placement
placeDesign -inplace_opt
# 拥塞分析
routeDesign -globalDetailRoute -congestionMapOnly
# 查看拥塞
encounter 13> win select CongestionViewer
encounter 14> congestionViewer -showCongestion
# 拥塞优化
setPlaceMode -timingDriven true -congestion true
placeDesign
# 时序检查
reportTiming
# 优化 placement
optDesign -preCTS
| 检查项 | 目标值 | 检查方法 |
|---|---|---|
| 全局拥塞 | < 5% | report_congestion |
| 局部拥塞 | < 80% | report_congestion -hotspot |
| 初始 WNS | > -500ps | report_timing |
| 最大线长 | 合理范围 | report_net_lengths |
| 单元密度 | < 85% | report_design_density |
| 问题 | 现象 | 解决方法 |
|---|---|---|
| 拥塞热点 | 局部密度 > 90% | 增加 padding,调整 Macro 位置 |
| 时序差 | WNS < -1ns | 使能 timing-driven placement |
| 线长过长 | 关键路径延迟大 | 调整权重,优化关键路径摆放 |
| 重叠 | 单元重叠 | 运行 legalize_placement |
步骤:
目标:
| 指标 | 目标 |
|---|---|
| 时钟 skew | < 100ps (先进工艺) |
| 时钟 latency | 满足设计要求 |
| 转换时间 | < 最大允许值 |
| 时钟功耗 | 在预算内 |
检查清单 ✅
CTS 最佳实践:
# ============================================
# 1. 时钟树设置
# ============================================
# 定义时钟
create_clock -name clk -period 10 [get_ports clk]
# 设置时钟树目标
set_clock_tree_options -target_skew 0.1
set_clock_tree_options -target_max_latency 2.0
set_clock_tree_options -target_min_latency 0.5
# 设置时钟树约束
set_clock_tree_constraints -max_transition 0.2
set_clock_tree_constraints -max_capacitance 0.5
# ============================================
# 2. 时钟树综合
# ============================================
# 综合时钟树
clock_tree_synthesis
# 或者使用 opt 设计
compile_clock_tree
# ============================================
# 3. 时钟树分析
# ============================================
# 报告时钟树状态
report_clock_tree -status
# 报告时钟 skew
report_clock_tree -skew
# 报告时钟 latency
report_clock_tree -latency
# 详细报告
report_clock_timing -type summary
# ============================================
# 4. 时钟树优化
# ============================================
# skew 优化
optimize_clock_tree -skew
# power 优化
optimize_clock_tree -power
# latency 优化
optimize_clock_tree -latency
# ============================================
# 5. 时钟树验证
# ============================================
# 检查时钟树
check_clock_tree
# 验证时钟网络
verify_clock_tree
# ============================================
# Innovus CTS 流程
# ============================================
# 创建时钟
createClock -name clk -period 10 [getPorts clk]
# 设置 CTS 目标
setCCOptTarget -skew 0.1
setCCOptTarget -maxLatency 2.0
# 运行 CTS
ccopt_design
# 分析时钟树
report_ccopt_clock_trees
# 验证
verifyClockNets
| 指标 | 定义 | 目标值 |
|---|---|---|
| Clock Skew | 同一时钟域内时钟到达时间差 | < 100ps (先进工艺) |
| Clock Latency | 时钟从源到寄存器的延迟 | 满足设计约束 |
| Insertion Delay | 时钟树插入延迟 | 越小越好,但需平衡 |
| Transition Time | 时钟信号转换时间 | < 最大允许值 |
| Clock Power | 时钟网络功耗 | 在预算内 |
| 问题 | 原因 | 解决方法 |
|---|---|---|
| Skew 过大 | 时钟树不平衡 | 增加平衡 buffer,调整树结构 |
| Latency 过大 | 时钟树级数太多 | 减少级数,使用更大驱动 |
| 功耗过大 | 时钟网络负载大 | 使用门控时钟,减少翻转 |
| Transition 过大 | 驱动能力不足 | 增加 buffer,使用更大驱动 |
步骤:
检查清单 ✅
常见问题修复:
# ============================================
# 1. 全局布线
# ============================================
# 检查布线拥塞
report_route_quality
# 设置布线层约束
set_ignored_layers -min_layer M1 -max_layer M8
# 全局布线
route_global
# ============================================
# 2. 详细布线
# ============================================
# 运行详细布线
route_auto
# 或分步执行
route_track
route_detail
# ============================================
# 3. 天线修复
# ============================================
# 检查天线违反
report_antenna_violations
# 自动修复天线违反
route_opt -repair_antenna
# 插入天线二极管
insert_antenna_diodes -all
# ============================================
# 4. 布线优化
# ============================================
# 优化布线
route_opt -size_only
# 修布线 DRC
route_opt -drc_effort high
# ============================================
# 5. 布线验证
# ============================================
# 检查布线完成度
report_route_status
# 检查未布线网络
report_unconnected_nets
# 检查短路和开路
verify_routing
# ============================================
# Innovus Routing 流程
# ============================================
# 设置布线层
setNanoRouteMode -drouteMinLayer M1
setNanoRouteMode -drouteMaxLayer M8
# 全局布线
globalDetailRoute
# 详细布线
detailRoute
# 天线修复
setNanoRouteMode -drouteFixAntenna true
routeDesign
# 检查布线
verifyConnectivity
verifyGeometry
| 检查项 | 目标 | 命令 |
|---|---|---|
| 布线完成率 | 100% | report_route_status |
| 天线违反 | 0 | report_antenna_violations |
| 短路 | 0 | verify_routing |
| 开路 | 0 | verify_routing |
| DRC 违反 | 0 | verify_geometry |
步骤:
优化优先级
检查清单 ✅
# ============================================
# 1. 时序分析
# ============================================
# 基本时序报告
report_timing -max_paths 10
# 详细时序报告
report_timing -max_paths 10 -delay_type max -input_pins -nets -caps
# 建立/保持时间报告
report_timing -delay_type max -max_paths 10 # 建立
report_timing -delay_type min -max_paths 10 # 保持
# 报告 WNS/TNS
report_timing -summary
# ============================================
# 2. 修复建立时间违例
# ============================================
# 自动优化
opt_design -post_route
# 具体优化策略
# 2.1 增加驱动
size_cell -cell_name <cell> -new_cell <larger_cell>
# 2.2 复制高扇出
clone_cell -cell_name <cell>
# 2.3 重新摆放关键路径
place_opt -timing_effort high -critical_path_endpoints
# 2.4 有用偏斜
set_clock_latency -max 0.2 [get_clocks clk] -source
set_clock_latency -min 0.1 [get_clocks clk] -source
# ============================================
# 3. 修复保持时间违例
# ============================================
# 自动修复
opt_design -post_route -hold
# 插入延迟单元
insert_buffer -cell_name <buffer_cell> -net <net_name>
# 调整驱动大小(用更小驱动)
size_cell -cell_name <cell> -new_cell <smaller_cell>
# ============================================
# 4. 多工艺角分析
# ============================================
# 设置工艺角
set_operating_conditions -analysis_type on_chip_variation
# 运行多工艺角分析
report_timing -corners {ss ff tt}
# OCV 分析
set_timing_derate -early 0.9 -cell_delay
set_timing_derate -late 1.1 -cell_delay
report_timing -max_paths 10
# ============================================
# Innovus 时序优化流程
# ============================================
# 时序报告
reportTiming
# 建立时间优化
optDesign -postCTS -setup
# 保持时间优化
optDesign -postCTS -hold
# 后布线优化
optDesign -postRoute -setup -hold
# 多工艺角
setAnalysisMode -analysisType onChipVariation
reportTiming -corners {ss ff tt}
时序违例
│
├── 建立时间违例 (Setup Violation)
│ │
│ ├── 组合逻辑延迟太大?
│ │ ├── 是 → 流水线分割
│ │ └── 否 → 继续分析
│ │
│ ├── 驱动不足?
│ │ ├── 是 → 增加驱动
│ │ └── 否 → 继续分析
│ │
│ ├── 线长太长?
│ │ ├── 是 → 重新摆放
│ │ └── 否 → 有用偏斜
│ │
│ └── 高扇出?
│ └── 是 → 复制寄存器
│
└── 保持时间违例 (Hold Violation)
│
├── 路径太快?
│ ├── 是 → 插入延迟单元
│ └── 否 → 继续分析
│
├── 时钟偏斜问题?
│ ├── 是 → 调整有用偏斜
│ └── 否 → 增加线长
│
└── 驱动过大?
└── 是 → 减小驱动
必须做:
检查清单 ✅
生成:
文档:
优先级从高到低:
解决方法:
解决方法(按效果排序):
解决方法:
重要: 修复保持时间后必须重新检查建立时间,修复保持可能影响建立。
解决方法:
常见 LVS 错误:
| 任务 | 商业工具 | 开源工具 |
|---|---|---|
| 布局布线 | IC Compiler II (Synopsys), Innovus (Cadence) | OpenROAD |
| 静态时序分析 | PrimeTime (Synopsys), Tempus (Cadence) | OpenSTA |
| 物理验证 | Calibre (Siemens), ICV (Synopsys), PVS (Cadence) | - |
❌ 跳过检查:"先流片回来再说" → 流片回来错了几百万就没了 ❌ 忽略保持时间:建立时间对了就完事 → 保持时间错了芯片不工作 ❌ 不检查所有工艺角:只检查典型工艺角 → 最坏情况不满足 ❌ 电源规划太早不优化 → IR 降不够时序都错了 ❌ 最后一分钟做大改动 → 引入新错误,没时间验证
physical-design-engineer 代理进行物理设计实现timing-analysis 技能进行时序分析和修复power-analysis 技能进行功耗和 IR 降分析physical-design-engineer 代理进行物理验证问题调试