理解 FPGA 的 Output Delay(输出延迟)约束,核心在于明白它不是在让信号物理上延时,而是在告诉时序分析工具(如 Vivado/Quartus):“外部芯片需要我的数据在时钟边沿之前或之后保持多久的稳定”。它是连接 FPGA 内部时序 与 外部器件时序要求 的桥梁
我们可以把 FPGA 输出延迟约束 (Output Delay) 想象成 “外卖小哥送奶茶” 的故事
FPGA (你):奶茶店的店员。你的任务是把做好的奶茶(数据)递出去。
外部芯片 (顾客):站在店门口的顾客。他手里拿着表,只在特定的时间点(时钟沿)伸手接奶茶。
时钟 (Clock):顾客看表的节奏。比如每 10 秒看一眼表,伸手一次。
PCB 走线 (路途):从你手里的柜台到顾客手中的距离。这段路需要时间(比如快递员跑腿,或者信号在导线里飞)。
Output Delay (约束):店长给你的“死命令”,告诉你必须什么时候把奶茶递出柜台
场景一:建立时间 (Setup Time) -> output_delay -max
情境:
顾客是个急性子,但他有个怪癖:他在伸手接奶茶之前的 2 秒 ( Tsu ),手就必须伸在那里等着,如果你晚于这个时间递过来,他就接不住,奶茶会洒(数据出错)。
另外,柜台离顾客还有一段路,快递员跑过去需要 0.5 秒 ( Ttrace)
店长的死命令 (-max):
店长对你说:“听着!顾客在 10:00:10 伸手。
他提前 2秒 就把手伸出来了。
快递员跑过去还要 0.5秒。
所以,你必须在 10:00:07.5 之前把奶茶递出柜台!绝不能晚于这个时间!”
对应公式:最晚递出时间=伸手时刻-(Tsu+Ttrace)
output_delay_max=Tsu+Ttrace
如果违例了?
如果你在 10:00:08 才递出去,加上路程 0.5 秒,10:00:08.5 才到顾客手里。
此时顾客已经在 10:00:08 (10秒-2秒) 就把手定住了,你没赶上他的“稳定窗口”,奶茶洒了
场景二:保持时间 (Hold Time) -> output_delay -min
情境:
顾客还有个怪癖:他伸手接住奶茶后,手必须稳稳地拿住 0.5 秒 ( Thold)才能松开或去拿下一杯。如果你太快把上一杯收走,或者太快把下一杯塞过来干扰他,他就会手滑(数据出错)。
同样,路途需要 0.5 秒 (Ttrace)
店长的死命令 (-min):
店长对你说:“听着!顾客在 10:00:10 伸手接茶。
他接住后需要稳 0.5秒。
但是!因为路途有 0.5秒 的延迟,你在柜台这边的动作传导过去会变慢。
所以,你在柜台这边,最早可以在 10:00:10 这一刻改变动作(比如收回手或给下一个信号)。”
计算逻辑:
如果顾客需要稳 0.5 秒,而路途消耗了 0.5 秒。
意味着:你在柜台哪怕立刻 (0秒后) 就变卦,等信号传到顾客那里也过了 0.5 秒,刚好满足他的要求。
output_delay_min=Thold - Ttrace = 0.5 - 0.5 = 0
极端情况(负数):
假如路途特别远,要跑 2秒 ( Ttrace)而顾客只需要稳 0.5秒
店长会说:“你可以在 10:00:09.5 (伸手前 0.5 秒) 就赶紧把奶茶撤走!因为等你撤走的动作传到顾客那,已经过了 2 秒了,那时候顾客早就拿稳了。”
这时候 output_delay -min 就是 负数 (0.5-2 = -1.5)
总结公式:
output_delay_max=Tsu+Ttrace
直观理解:你告诉工具,“我的数据在路上要花 Ttrace的时间,而且到了对方门口还要提前
Tsu站稳,所以请你把这部分时间预留出来,剩下的时间才给你做内部逻辑。
output_delay_min=Thold - Ttrace
数据必须在外部芯片的时钟采样沿到来之后,继续保持 Thold 的时间不变

206

被折叠的 条评论
为什么被折叠?



