一、时钟基本模型
- Tclk: 一个时钟周期
- T1: 高电平脉冲时间宽度
- T2:低电平脉冲时间宽度
Tclk = T1+T2,占空比 = T1/Tclk 如果 T1 = T2 = Tclk/2 则占空比为50%。
时钟偏差:
-
晶振或内部PLL锁相环产生的时钟信号无法保证绝对的精准;
-
影响时钟周期准确性的因素有很多,如材料、工艺、温度以及各种噪声等;
-
晶振源固有的噪声和干扰通常会带来时钟信号的周期性偏差,称为时钟抖动,一般单位是ps;
-
所以FPGA时序分析中,也会将时钟抖动作为时钟不确定性(Uncertainty)的一部分加以约束。
二、建立时间与保持时间
-
建立时间(Tsu):在时钟上升沿到来之前数据必须保持稳定的时间;
-
保持时间(Th):在时钟上升沿到来后数据必须保持稳定的时间;
一个数据需要在时钟的上升沿被锁存,此数据必须在上升沿的建立时间和保持时间内稳定(数据在这段时间内不能发生变化);
违背建立保持时间的波形:
- 违背建立时间:输入数据在要求的建立时间内发生变化,导致时钟采样到不确定的数据,形成亚稳态;
- 违背保持时间:原本应该下一个时钟周期到达的数据在该时钟前一个时钟到来了,即数据传输的太快了,最终使得输出处于不确定状态;
无论是违背建立时间还是保持时间都最终会导致数据的误采样;进而引起功能上的问题;
三、寄存器到寄存器的时序路径分析
3.1 数据路径和时钟路径
约束对象:源寄存器(时序路径起点) -> 目的寄存器(时序路径终点)
对于reg2reg的路径,只需告诉编译工具其时钟频率,编译工具会将reg2reg路径的允许延迟范围计算出来,并以此为目标进行布线;
3.2 数据到达路径和数据需求路径
- 数据到达路径(Data arrival path):数据在两个寄存器直接传输的实际路径,由此可以知道数据在两个寄存器之间传输的实际时间;
- 数据需求路径(Data required path):为了确保稳定、可靠、有效的数据传输(不违背建立保持时间),数据在两个寄存器之间的理论传输时间;
3.3 启动沿、锁存沿、建立时间和保持时间关系
后一级寄存器锁存上一级寄存器的数据;
- 启动时钟:传输到源寄存器的时钟
- 锁存时钟:传输到目的寄存器的时钟
- 建立时间关系:对应的锁存沿与启动沿相差一个周期;
- 保持时间关系:当前锁存沿正在采样的信号,不被上一个寄存器同一个时钟周期对应的启动沿所传输的数据影响(信号不能传输太快);
- 时钟启动沿(Launch Edge):一般定义为0ns;
- 钟锁存沿(Latch Edge):一般定义为一个时钟周期Tclk;
3.4 寄存器到寄存器路径分析
- Tc2i:时钟源到reg1所需要的时间
- Tc2j:时钟源到reg2所需要的时间
- Td:数据由上一级(reg1)的输入端被锁存后到达下一级(reg2)输入端所经过的延迟;
Td包含了Tco,Tco为数据在寄存器内部传输的时间; - Tsu:目的寄存器的建立时间;
- Th:目的寄存器的保持时间;
数据到达时间:
Data Arival Time = Launch Edge + Tc2i(max) + Td
数据需求时间:
Data Required Time = Latch Edge + Tc2j(min) - Tsu
建立时间余量(setup time slack):
setup time slack = Data Required Time - Data Arival Time = Latch Edge - Launch Edge + Tc2j(min) - Tc2i(max) - Tsu - Td
CPR(Clock pessimism removal)时间:
时钟由时钟源扇出到源寄存器和目的寄存器的共同路径所消耗的时间;
CPR = Tcommon(max) - Tcommon(min)
- 修正后的建立时间余量(setup time slack):
Data Required Time = Latch Edge + Tc2j(min) - Tsu - Clock Uncertain Time + CPR
setup time slack = Data Required Time - Data Arival Time = Latch Edge - Launch Edge + Tc2j(min) - Tc2i(max) - Tsu - Td - CPR + Clock Uncertain Time
- 保持时间余量(hold time slack):
Data Arival Time = Launch Edge + Tc2i(min) + Td
Data Required Time = Latch Edge + Tc2j(max) + Th + CPR + Clock Uncertain Time
hold time slack = Data Arival Time - Data Required Time = Launch Edge - Latch Edge + Tc2i(min) - Tc2j(max) + Td - Th - CPR - Clock Uncertain Time
- 保持时间与建立时间是相对立的;