和PCB一样,FPGA内部的信号传递也需要时间,通过逻辑门也需要一定的延迟。这些延迟在低时钟频率下可以忽略不计,但是在高时钟频率和复杂的时序逻辑下可能会导致数据比时钟慢一个时钟周期导致时序违例。为了防止出现时序违例,就需要对FPAG内部的延迟和走线进行分析。使数据和时钟更好的吻合。
时序分析是对两个节点之间的信号进行时序分析,模型通常分为一下几种:
1.寄存器和寄存器之间
2.输入PAD(FPGA的接口)与寄存器之间。
3.寄存器与输出PAD之间。
4.输入PAD与输出PAD之间。

信号传递过程:
假设data_in和clock_in是源同步时钟。时钟信号经过Tclk1和Tclk2时间的延迟分别到达reg1和reg2。
数据信号进过Tdata1到达reg1的D端。等待时钟信号到来,到来后经过Tco通过reg1到达reg1的Q端。然后经过Tdata2到达reg2的D端。如果在clock_in到来reg2之前的Tsu时间到达D端并在clock_in到来之后保持Th的时间则能被采样到reg2的Q端。
要求到达或者保持的时间以时钟信号为准,实际到达的时间以数据信号为准。所以分析要求时间时沿时钟信号路线分析,实际时间时沿数据信号路线分析。
1.时钟的偏斜(Tskew):同一时钟到达不同的寄存器之间的时间差称为时钟的偏斜。称为Skew。
全局时钟网络:该时钟到达每个寄存器之间的时间大致相同。可通过PLL或者bufg配置。
计数器的分频走的是数据线,到达寄存器之间的延迟可能过大。
2.数据延迟(Tdata):数据在数据线之间的传输延迟。Tdata。
3.寄存器更新数据延迟(Tco):当寄存器的采样时钟可以采样时到数据从D端采样到Q端稳定的时间。
4.建立时间门限和保持时间门限(Tsu/Th):寄存器时钟上升沿到来之前数据应该在D端保持的时间和上升沿到来之后时钟采集数据时数据应该保持的时间。
lunch edge:时钟发射沿,默认的是时钟和数据同步发送的时间点。默认为0。
latch edge:时钟锁存沿,第一个时钟发射数据。第二个时钟周期锁存数据,通常是一个时钟周期的时间。
数据到达时间:数据由发射沿时钟到达目标采样寄存器D端的时间。
Data arrival time = Tclk1 + Tco + Tdata
锁存沿的延时:Tsu锁存沿来临前最小的数据建立时间。
数据要求到达的时间:寄存器时钟来临的时间 - 寄存器时钟来临前数据应该保持的时间。
Data Required time = latch edge + Tclk2 - Tsu
建立时间余量:数据要求到达的时间 - 数据实际到达的时间
Tsu slack = (latch edge + Tclk2 - Tsu)- (lunch edge + Tclk1 + Tco + Tdata2)
保持时间余量:数据实际结束时刻 - 数据要求结束时刻
数据实际结束时刻 = 数据到达的时间 + 一个时钟周期
Th slack = ((lunch clock + Tclock1 + Tco + Tdata) + Tcycle)- (latch clock + Tclock2 - Th)
相移时钟:同源同频时钟相移可以构建时钟偏斜。一个时钟周期时360o。正角度右移,负角度左移。
时钟最快频率:保持时间余量公式中消除了Tcycle。说明保持时间余量和时钟频率没有关系。建立时间和时钟周期有关,建立时间余量为0时时钟周期最快。
根据数据要求到达时间 - 数据实际到达时间 = 0解出Tcycle即可求得最快时钟频率。
保持时间用min at fast process corner
建立时间用max at fast process corner