output_delay 分析模型
output_delay 的时序分析模型如上图所示,可以看到再进行IO之间的时序分析时,其模型于前面介绍的input_delay时序分析的模型是十分类似的。只不过再output_delay的分析中,上游芯片换成了FPGA,其内部的时序参数在使用时序分析工具进行分析时是已知的。下游芯片和PCB走线延时的时序参数在时序分析工具中不确定,因此才有了对于FPGA的输出数据和时钟进行分析的必要。
时序参数如下:
名称 | 含义 |
---|---|
Tco | 数据在FPGA内部的延时 |
Td_bd | 数据在PCB上的走线延时 |
Tcd | 时钟在FPGA内部的延时 |
Tc_bd | 时钟在PCB上的走线延时 |
STsu | 下游芯片系统建立时间 |
STh | 下游芯片系统保持时间 |
建立时间分析
数据实际到达时间 data_arrival_time = Tco + Td_bd
数据要求到达时间 data_require_arrival_time = Tcycle + Tcd + Tc_bd - STsu
建立时间余量: slack_of_setup = data_require_arrival_time - data_arrival_time = (Tcycle + Tcd + Tc_bd - STsu) - (Tco + Td_bd)
slack_of_setup = Tcycle - STsu - (Tco + Td_bd - (Tcd + Tc_bd))
;
由于数据各bit位到达下游芯片管脚处有时间不一致。因此Tco ,Td_bd都存在最大值和最小值。因此
dMax = TcoMax + Td_bdMax - (Tcd + Tc_bd)
dMin = TcoMin + Td_bdMin - (Tcd + Tc_bd)
因此建立时间余量主要需要考虑的是dMax,当dMax越大,建立时间余量越小,建立时间越容易违例。
保持时间分析
数据实际结束时间 data_finish_time = Tco + Td_bd + Tcycle
数据要求结束时间 data_require_finish_time = Tcycle + Tcd + Tc_bd + STh
保持时间余量: slack_of_hold = data_finish_time - data_require_finish_time = (Tco + Td_bd -(Tcd + Tc_bd)) - STh
dMax = TcoMax + Td_bdMax - (Tcd + Tc_bd)
dMin = TcoMin + Td_bdMin - (Tcd + Tc_bd)
因此保持时间更需要考虑dMin因为dMin越小,保持时间余量越小,保持时间更容易违例。
通过skew来分析output_delay
那么多数情况我们不知道目标芯片 setup 门限值或者 hold 的门限值。需要假设输出信号的状态也就是时钟与数据的关系,这里假设的值是 SKEW,假设 SKEW 的目的是让综合工具知道输出的时钟采样沿不能落在 SKEW 的区间, 如果落在 SKEW 区间就出现时序违例,这样可以假定 SKEW 的大小来调节时钟与数据的关系。
通过添加skew来进行时序分析,最终就变成了,输出到FPGA管脚处的数据和时钟之间的分析。
数据实际到达时间 data_arrival_time = Tco + askew
数据要求到达时间 data_require_arrival_time = Tcycle + Tcd
建立时间余量: slack_of_setup = data_require_arrival_time - data_arrival_time = Tcycle + Tcd - Tco - askew
由于数据各bit位到达下游芯片管脚处有时间不一致,添加了skew就是将这些不止至全部包括在skew所处的区间中。因此
dMax = Tcycle - askew
因此建立时间余量主要需要考虑的是dMax,当dMax越大,建立时间余量越小,建立时间越容易违例。
数据实际结束时间 data_finish_time = Tco + Tcycle + bskew
数据要求结束时间 data_require_finish_time = Tcycle + Tcd
保持时间余量: slack_of_hold = data_finish_time - data_require_finish_time = Tco - Tcd + bskew
dMin = bskew
因此保持时间更需要考虑dMin因为dMin越小,保持时间余量越小,保持时间更容易违例。
参考资料:
V3学院时序分析课程