
FPGA提供时钟和数据,经过PCB走线,进入上游器件的寄存器。同input_delay的时序分析一样,对于output_delay也是从建立时间和保持时间来分析的。
上图延时中FPGA内部的时序是已知的,外部走线和下游器件内部是不确定的。因此需要FPGA输出合适的数据信号和时钟信号来让下游器件可以接收到数据。这就是output_delay的目的。

建立时间余量 = 数据要求到达时间 - 数据实际到达时间
数据实际到达时间 = Tco + Tdbd + Tdfi
数据要求到达时间 =Tcycle + Tcd + Tcbd + Tcfi - Tsu
因此建立时间余量 setup slack = (Tcycle + Tcd + Tcbd + Tcfi - Tsu)-( Tco + Tdbd + Tdfi)
= (Tcycle + Tcd - Tco)-( (Tdbd + Tdfi)-(Tcbd + Tcfi)+ Tsu)
dMax = Td_bdMax + TdfiMax -Tcbd - Tcfi
dMin = Td_bdMin + TdfiMin -Tcbd - Tcfi
对于建立时间来说,d越大,setup slcak越小,当d取最大值时setup slack大于0时时序满足建立时间余量。
保持时间余量 = 数据实际保持时间 - 数据要求保持时间
数据实际保持时间 = Tco + Tdbd + Tdfi + Tcycle
数据要求保持时间 = Tcycle + Tcd + Tdbd + Tcfi + Th
hold slcak = (Tco + Tdbd + Tdfi + Tcycle)-( Tcycle + Tcd + Tdbd + Tcfi + Th)
= (Tco - Tcd)+( (Tdbd + Tdfi)-(Tcbd + Tcfi)- Th)
dMax = Td_bdMax + TdfiMax -Tcbd - Tcfi
dMin = Td_bdMin + TdfiMin -Tcbd - Tcfi
对于保持时间来说,d越小,hold slcak越小,当d取最小值时hold slack大于0时时序满足保持时间余量。
d是下游器件需求的时钟信号和数据信号的时间差。在分析建立时间时,d越大,建立时间越小,因此分析建立时间余量的时候d取最大值。在分析保持时间时,d越小,保持时间越小,因此分析保持时间余量是d取最小值