reference
What is Setup and hold time in an FPGA?
Propagation delay in an FPGA or ASIC?
另外ug906的第五章介绍了时序分析的基础。最一开始介绍的就是timing path的概念,进而引出了时序分析的两个关键分析点setup slack analysis和hold slack analysis。
作为基础,本文的reference当中提到了setup time和hold time的概念:
setup time: Setup time is the amount of time required for the input to a Flip-Flop to be stable before a clock edge.
hold time: Hold time is the minimum amount of time required for the input to a Flip-Flop to be stable after a clock edge.
这里(t_{su})就是setup time,(t_h)就是那个hold time。setup time和hold time对于一个触发器来说是固定的参数。也就是说要完成一次正常的数据锁存,数据必须要在setup time和hold time的时候保持稳定。
在实际的电路当中一个触发器的运行周期必须满足:
这里只有(t_p)(传输延时)是可变的,与具体的电路结构设计有关。传输的延时越短,FPGA可运行的时钟速率就越高。
再来看xilinx当中的Setup/Recovery Relationship的概念。Xilinx说:
The setup check is performed only on the most pessimistic setup relationship between two clocks.
-ug906(v2016.4)P153
因为(dst的setup time)setup time是固定的,所以只要能保证在收发脉冲上升沿时间差值最短的时候保证没有问题,那么实际运行应该就不会出现问题。所以检查的是required_time - arrival_time。
即
Data Required Time(hold) =
capture edge time
+destination clock path delay
-clock uncertainty
-setup time
Data Arrival Time(hold) =
launch edge time
+source clock path delay
+datapath delay
Slack(hold) =
Data Required Time-Data Arrival Time
在接收端dst的hold time也是固定的,如果在hold时间还没结束的时候下个数据就被推过来了。在当前传输的数据就有可能被覆盖掉。所以hold check检查的是arrival_time - required_time。
Data Required Time(hold) =
capture edge time
+destination clock path delay
-clock uncertainty
+hold time
Data Arrival Time(hold) =
launch edge time
+source clock path delay
+datapath delay
Slack(hold) =
Data Arrival Time-Data Required Time
本来hold分许也叫作Min delay analysis,可以这样理解如果把setup Slack的计算公式当做是一种标准型,那么我们就希望Min delay这个值负的越多越好。当然这里实际是反过来了,取了个相反数,那就是越大越好。
陈小硕的那两个个cnblog的文章讲述的非常清晰,但是感觉理解起来有点过于复杂了,我觉得简化来说,setup slack就是指在数据setup time之前多久数据必须到达才行。hold slack就是在数据hold time之后数据必须保持多久,才能让下一个数据过来(hold是在说下一个launch edge了)。