上游器件提供时钟和数据,经过PCB走线,进入FPGA内部的寄存器。同寄存器级别的时序分析一样,对于IO接口的时序分析也是从建立时间和保持时间来分析的。
上图中的延时中,FPGA内部的延迟参数在使用FPGA时序分析工具时是已知的,而对于上游器件和PCB走线延迟是不确定的。为了解决这些未知参数对FPGA的影响,因此需要对FPGA的输入信号进行时序约束,这就是input_delay的必要性。
建立时间余量 = 数据要求到达时间 - 数据实际到达时间
数据要求到达时间 = latch edge Tcycle + Tcd + Tcbd + Tcfi - Tsu
数据实际到达时间 =Tco + Tdbd + Tdfi
setup slack = (Tcycle + Tcd + Tcbd + Tcfi - Tsu) - (Tco + Tdbd + Tdfi)。
将公式中的已知量和未知量分开组合,可以得到如下公式:
setup slack = (Tcycle + Tcd + Tcbd + Tcfi - Tsu) - (Tco + Tdbd + Tdfi)
= (Tcycle + Tcfi - Tsu - Tdfi) - (Tco + Tdbd - Tcd - Tcbd)
后半部分的未知量在时钟线上由于是一根线,信号不存在先后关系。但是数据线一般是多根线,信号根据布线的不同数据可能存在先后关系。设数据信号经过上游器件的延时Tco的时间范围为{Tcomin,Tcomax},经过PCB的时间延时Tdbd的时间范围为{TdbdMin,TdbdMax}。数据到达FPGA管脚的时间差记为{LrMin,LrMax}。则有如下公式:
LrMin = TcoMin + TdbdMin - Tcd - Tdbd
LrMax = TcoMax + TdbdMax - Tcd - Tcbd
Tco和Tdbd为数据线到达FPGA管脚的时间。Tcd和Tcbd为时钟线到达管脚的时间。因此:
Lr可以理解为时钟信号比数据信号早到FPGA管脚的时间
对于建立时间来说,Lr越大,建立时间越短,甚至可能出现时序违例,因此分析建立时间时Lr应该取LrMax。
保持时间余量 = 数据实际保持的时间 - 数据要求保持的时间
数据实际的保持时间 = Tco + Tdbd + Tdfi + Tcycle
数据要求保持的时间 = Tcd + Tcbd + Tcfi + Th
所以保持时间余量 hold slack = (Tco + Tdbd + Tdfi + Tcycle)-(Tcycle + Tcd + Tcbd + Tcfi + Th)
按照上面方式化简有 hold slack = ( Tdfi + Tcfi + Th)+(Tco + Tdbd - Tcd - Tcbd)
由
LrMin = TcoMin + TdbdMin - Tcd - Tdbd
LrMax = TcoMax + TdbdMax - Tcd - Tcbd
结合可知:要想保持时间大于0,Lr要取最小值。LrMin.
Lr为上游器件的时钟信号和数据信号到达FPGA管脚的时间差。数据信号由于是由多根信号线组成,到达时间不一,因此是一个范围值。根据计算可知当分析建立时间时,Lr取最大值。分析保持时间时,Lr取最小值。