Hard Macro的Float Pin设错了,skew balance全白干
📅 2026/7/29 5:08:34
👁️ 阅读次数
📝 编程学习
设计里挂了几个Hard Macro(比如PLL、Memory),它们的时钟输入pin怎么处理,直接影响整个clock tree的balance效果。
很多人图省事,直接把macro的CLK pin设成stop pin。工具确实会balance这个pin的insertion delay,但问题是——macro内部还有一层时钟树啊!工具不知道macro里面的延迟,balance出来的结果只是"表面平衡",macro内部的FF和外部FF的时钟到达时间其实差得远。
正确的做法是设成float pin,把macro内部的时钟延迟告诉工具。
| Pin类型 | 工具行为 | 适用场景 |
|---|---|---|
| Stop Pin | Balance skew + minimize insertion delay | 普通FF的CLK pin |
| Exclude Pin | 忽略,不balance | 数据引脚、复位引脚 |
| Non-stop Pin | 穿过该pin找真正的sink | 分频寄存器的CLK pin |
| Float Pin | Balance时计入内部延迟 | Hard Macro的CLK pin |
# Float Pin设置示例(macro内部延迟500ps)
set_clock_tree_exceptions -float_pins [get_pins PLL_1/CLK] \\
-float_pin_max_delay_rise0.5 \\
-float_pin_max_delay_fall0.5
# 负float pin(macro内部延迟比预期小)
set_clock_tree_exceptions -float_pins [get_pins MEM_1/CLK] \\
-float_pin_max_delay_rise-0.2 \\
-float_pin_max_delay_fall-0.2
💡 关键提醒:Float pin的延迟值从哪来?看macro的.lib时序模型,或者让IP vendor提供内部clock tree的延迟数据。别瞎猜,差100ps就可能导致hold violation。
编程学习
技术分享
实战经验