一、核心问题:时钟与数据路径复用的冲突
在芯片设计中,同一网络(net)可能同时用于时钟路径和数据路径,典型场景:
- 寄存器
d1
(时钟分频触发器)的输出,既驱动f1
的时钟端(时钟路径),又连接到f2
的扫描输入(SI
,数据路径,用于扫描链测试)。
此时存在关键矛盾:
- 该网络属于时钟树图(Clock Tree Graph),数据路径优化(如 “保持时间修复”
datapath hold fixing
)默认无法操作它; - 若
f2
输入出现保持时间违规(Hold Violation),数据路径优化因网络属于时钟树而无法插入缓冲器修复,导致时序问题无法解决。
二、默认限制:时钟树引脚的 “排除” 机制
f2
的 SI
输入默认被标记为 时钟树排除引脚(clock tree exclude pin),即:
- 该引脚关联的网络属于时钟树图,但数据路径优化工具会跳过它,避免干扰时钟时序。
但这也导致:若 f2
输入因时钟树延迟出现保持时间违规,数据路径优化无法通过插入缓冲器修复(因为工具被限制操作时钟树网络)。
三、解决方案:添加 “隔离缓冲器(Exclusion Buffer)”
通过命令 ccopt_add_exclusion_drivers
插入隔离缓冲器,实现:
-
隔离时钟树与数据路径:
- 缓冲器的输入被标记为 时钟树忽略引脚(clock tree ignore pin),脱离时钟树图的约束;
- 缓冲器的输出连接
f2
的SI
输入,使f2
输入与原时钟树网络解耦。
-
恢复数据路径优化能力:
- 隔离后,缓冲器与
f2
之间的网络不再属于时钟树图,数据路径优化(如保持时间修复)可自由操作该段网络,插入缓冲器修复时序违规。
- 隔离后,缓冲器与
四、流程与命令解析
1. 问题场景(修复前)
- 网络
d1_out
同时属于时钟路径(驱动f1
时钟)和数据路径(驱动f2
SI
); f2
SI
输入因d1_out
延迟出现保持时间违规,但数据路径优化无法操作d1_out
。
2. 插入隔离缓冲器命令
tcl
ccopt_add_exclusion_drivers -pins [get_pins f2/SI]
- 作用:为
f2
的SI
引脚插入隔离缓冲器,将其输入标记为时钟树忽略引脚。
3. 修复后效果
- 隔离缓冲器输入(原
d1_out
网络部分)仍属时钟树,但输出到f2
的网络脱离时钟树约束; - 数据路径优化工具可在隔离缓冲器与
f2
之间插入缓冲器,修复保持时间违规。
五、工程价值与验证
1. 设计收益
- 时序收敛:解决时钟与数据路径复用导致的优化冲突,允许修复原本无法处理的保持时间违规;
- 测试兼容性:支持扫描链测试需求(
SI
引脚的数据路径功能),同时保证时钟路径的时序完整性。
2. 验证方法
-
检查隔离缓冲器:
tcl
report_ccopt_exclusion_drivers -pins [get_pins f2/SI]
确认缓冲器已插入,且输入被标记为时钟树忽略引脚。
-
时序修复验证:
tcl
report_timing -hold -from [get_pins d1/Q] -to [get_pins f2/SI]
修复前:保持时间违规;插入隔离缓冲器并优化后:违规消失。
六、总结
“共享时钟与数据路径” 的核心矛盾是优化域的冲突(时钟树 vs 数据路径),通过 ccopt_add_exclusion_drivers
插入隔离缓冲器:
- 解耦时钟树约束与数据路径优化;
- 既保证时钟时序不受数据路径操作干扰,又允许修复数据路径的时序违规。
这是扫描链测试(Scan Chain)与时钟树综合(CTS)协同设计中必须的关键步骤,直接影响芯片的测试覆盖率和时序收敛。