Hard Macro的Float Pin设错了,skew balance全白干

📅 2026/7/29 5:08:34 👁️ 阅读次数 📝 编程学习
Hard Macro的Float Pin设错了,skew balance全白干

设计里挂了几个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 PinBalance skew + minimize insertion delay普通FF的CLK pin
Exclude Pin忽略,不balance数据引脚、复位引脚
Non-stop Pin穿过该pin找真正的sink分频寄存器的CLK pin
Float PinBalance时计入内部延迟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。