使用IC Compiler II加速设计收敛:拥塞驱动重构、并发时钟数据优化和多源时钟树综合
📑 目录
使用IC Compiler II加速设计收敛
会议: SNUG India 2017
作者: Prashant Aggarwal, KT Santosh, Sagar Patel, Ujjwal Prakash (Qualcomm India)
页数: 27
源文件: SNUG_TPC_CCD_Aggarwal_Microsoft_PowerPoint_WB21_28_GPU_SNUG_2017_v09_002pptx_paper.pdf
Page 1
使用IC Compiler II加速设计收敛
Prashant Aggarwal, KT Santosh, Sagar Patel, Ujjwal Prakash Qualcomm India Private Limited 2017年7月12-13日, SNUG India
Page 2
议程
- 设计概述 - 容量与运行时间——合并模块 - 拥塞驱动重构(CDR) - 并发时钟数据优化(CCD) - 多源时钟树综合(MSCTS) - 结论
Page 3
概述
- 目标:提供同类最佳的PPA 功耗性能面积 - 满足严苛的进度——上市时间是关键 - 设计:子系统范围从10M到25M实例 - 频率范围500 MHz到1 GHz - 多个电源域 Power Domain - 多场景收敛 - 挑战:复杂单元周围高引脚接入拥塞 - 高逻辑深度的关键路径 Critical Path - 签核的长收敛周期
Page 4
IC Compiler II ——工具箱
- 容量与运行时间 - 拥塞驱动重构(CDR) - 多源CTS(MSCTS) - 并发时钟数据优化(CCD)
Page 5
容量与运行时间——合并模块
- 在物理实现期间将子层次折叠到父层次中
- ICC2能够在<5天的周转时间内处理3M到5M实例
- 考虑因素:Bounds——我们需要吗?Hard vs Soft
- 边界优化——允许还是不允许?
- set_freeze_ports –data|clock|all
- 好处:更快的接口时序收敛、减少资源和开销
- create_placement期间使用Hard bound,其余步骤使用Soft bound
Page 6
合并模块——结果
| Bound类型 | 拥塞(%) | WNS(ns) | TNS(ns) | FEP |
| 无bounds | 0.51% | 0.226 | 127.982 | 8733 |
| Soft bound | 0.52% | 0.258 | 77.571 | 7192 |
| Exclusive Hard bound | 0.53% | 0.236 | 118.989 | 9400 |
Page 7-8
CDR——拥塞驱动重构
- 网表重新布线以减少导线交叉和导线长度 - 此外可以将复杂逻辑重新映射为更简单的逻辑结构 - 在处理复杂单元周围的引脚接入拥塞方面非常有效 - 修改了place_opt流程,多次调用CDR以获得最佳拥塞效果
Page 9
多遍创建布局(CP)和CDR
Initial Place:
create_placement -timing_driven -congestion -congestion_effort high -effort high
create_placement -congestion_driven_restructuring -use_seed_locs
Initial HFN:
create_placement -effort high -use_seed_locs -congestion -congestion_effort high
create_placement -congestion_driven_restructuring -use_seed_locs
Initial Opto:
create_placement -congestion_driven_restructuring -use_seed_locs
Page 10
多遍CDR——结果
拥塞得分(越低越好):
| Both Dirs % | Horizontal % | Vertical % | |
| 无CDR | 1.610 | 2.810 | 0.510 |
| 单遍CDR | 1.131 | 2.100 | 0.163 |
| 多遍CDR | 0.943 | 1.754 | 0.133 |
时序对比:
| Path Group | 无CDR WNS(ns) | 无CDR TNS(ns) | 无CDR FEP | 多遍CDR WNS(ns) | 多遍CDR TNS(ns) | 多遍CDR FEP |
| Group A | 0.094 | 0.204 | 9 | 0.101 | 0.241 | 13 |
| Group B | 0.819 | 973.716 | 2638 | 0.881 | 986.751 | 2765 |
- 拥塞显著降低(1.61 → 0.94) - 时序有非常轻微的恶化
Page 11-12
多源CTS(MSCTS)
为什么使用MSCTS?
传统CTS: - 优点:易于实现,无需定制工作;支持所有类型的时钟结构 - 缺点:QoR不是最好的
Mesh Based CTS: - 优点:低延迟、低抖动和更好的OCV容忍度 - 缺点:时钟树面积/功耗更高;因定制而难以实现;不支持多种时钟结构/拓扑
多源CTS结合了两者的优点: - 实现简便 - 更好的QoR——延迟、偏斜、抖动 - 更低的时钟树面积/功耗 - 定制:用H-tree替代mesh - 几乎但不完全是零偏斜到达抽头驱动器 - 抽头位置和数量经过迭代精炼以实现均匀的sink分布
Page 13
MSCTS——步骤
# 1. 创建抽头点
create_clock_drivers -loads [get_nets ] \
-lib_cell [get_lib_cells ] \
-locations -prefix mscts_tap_<>
2. Sink分配
3. H-Tree实现低延迟、零偏斜到达抽头点
synthesize_multisource_clock_taps -clocks
4. 标记don't touch并锁定,继续常规CTS
set_dont_touch $meshNets true
set_dont_touch $mscts_insts true
set_attribute -objects $mscts_insts -name physical_status -value locked
set_attribute -objects $smeshNets -name physical_status -value locked
Page 14
MSCTS——结果
>20%的Skew降低 10-20%的Latency降低 时钟面积略小
CTS QoR对比:
| 传统CTS Skew(ns) | 传统CTS Latency(ns) | MSCTS Skew(ns) | MSCTS Latency(ns) | |
| Setup A | 0.073 | 0.495 | 0.057 | 0.432 |
| Setup B | 0.049 | 0.427 | 0.042 | 0.354 |
| Hold A | 0.059 | 0.292 | 0.042 | 0.223 |
| Hold B | 0.039 | 0.242 | 0.034 | 0.193 |
15-20%的Hold TNS降低,Setup时序几乎相同 时钟单元面积(平方微米):传统CTS 2726.737 → MSCTS 2707.259
Page 15-16
CCD——并发时钟和数据优化
- 在所有设计阶段并发优化时钟和数据 - 基于q/d slack生成(并实现)偏斜偏移 - 通过利用相邻阶段的可用slack帮助改善WNS并实现更高频率(通常在时序ECO期间手动完成) - 有助于抑制对可能增加面积/拥塞/功耗的长数据通路的激进优化 - 与MSCTS配合良好
- place_opt:可与或不与trial CTS一起使用,计算的偏移将在clock_opt中实现 - clock_opt:第一遍默认CTS,基于可用slack推导偏移;第二遍CTS使用推导的偏移 - route_opt
Page 17
CCD——选项与命令
# place_opt
place_opt.flow.enable_ccd true
place_opt.flow.enable_ccd_useful_skew_max_prepone 0.050
place_opt.flow.enable_ccd_useful_skew_max_postpone 0.050
place_opt -from final_opto -to final_opto
cts
clock_opt.flow.enable_ccd true
clock_opt -to build_clock
clock_opt -from route_clock –to route_clock
clock_opt
clock_opt.flow.enable_ccd true
clock_opt.flow.enable_ccd_route_clock true
clock_opt -from final_opto
route_opt
route_opt.flow.enable_ccd true
route_opt.flow.enable_cto true
route_opt
Page 18
CCD——结果
布局阶段:
| 不使用CCD | 使用CCD | |
| WNS (ns) | 0.150 | 0.099 |
| TNS (ns) | 346 | 97 |
| FEP | 19739 | 8737 |
| 拥塞 % | 1.15 | 1.05 |
布线后:
| 不使用CCD | 使用CCD | |
| Setup WNS (ns) | 0.189 | 0.143 |
| Setup TNS (ns) | 792 | 57 |
| Setup FEP | 18740 | 6488 |
| Hold WNS (ns) | 0.129 | 0.158 |
| Hold TNS (ns) | 6.1 | 6.5 |
| DRC Count | 5013 | 2524 |
| 标准单元面积 | X | X-1% |
- Setup TNS提升13倍! - DRC减少2倍 - 标准单元面积改善1% - 偏移限制在+/-50ps
Page 19
CCD——时钟插入延迟变化
CCD后时钟插入延迟delta分布图,显示prepone sinks和postpone sinks的数量分布。
Page 20
CCD——注意事项
- 在设计周期早期启用CCD可能掩盖网表、库、布图规划问题
- 建议在不使用CCD的情况下完成布局以获得合理良好的QoR,然后启用CCD
- 布局阶段计算的偏移可能无法在CTS中实现——我们将偏移限制在+/-50ps,此值会因时钟树而异
- CCD可能对未在ICC2中启用的场景中的setup/hold时序产生不利影响
- ccd.skip_path_groups可用于跳过设计中不想启用CCD的部分
Page 21-22
未来工作与增强请求
CDR: - 为设计中的特定模块启用CDR(后续版本2016+已支持)
MSCTS: - 为克隆/合并单元提供映射列表以帮助形式验证(FV)
CCD: - 更多直观的消息/摘要报告,提供面积增加、级数变化、对setup/hold的影响等信息
Page 23-24
总结
| 特性 | 面积 | 时序 | 功耗 | 进度 | 备注 |
| 容量与运行时间 | + | + | + | 减少开销,更快接口收敛 | |
| MSCTS | + | + | + | 跨角点更好扩展,降低Hold TNS | |
| CCD | + | + | + | + | 减少标准单元面积,降低拥塞,更好WNS,更高Fmax |
| CDR | + | + | 重映射/重布线减少引脚接入拥塞 |
Page 25
结论
- ICC2的容量和运行时间改进允许合并模块并以最少资源加速收敛 - 在布局期间进行多遍CDR可以减少拥塞,不影响时序 - 从布局到布线后所有设计阶段有效使用CCD可以帮助提高Fmax和/或优化功耗、面积 - 多源CTS提供更好的CTS和时序QoR,同时保持传统CTS的简便性
Page 26-27
致谢 与 谢谢!
图片索引
本文共114张图片,存放于 SNUG_TPC_CCD_Aggarwal_Microsoft_PowerPoint_WB21_28_GPU_SNUG_2017_v09_002pptx_paper_images/ 目录。