本文参考《vivado从此开始—to learn vivado from here》高亚军编著
Vivado综合后的时序报告是可信的,也可在综合后添加时序约束后直接查看时序报告。
一、时序模型
一般时序模型由三部分组成,分别为:
- 发起寄存器
- 组合逻辑
- 捕获寄存器
由上述的时序分析模型的三个部分,构建出3部分时序路径,从而组成一个完整的时序分析路径。
- 源时钟路径(Source Clock Path)
- 数据路径(Data Path)
- 目的时钟路径 (Destination Clock Path)
所以,这个模型如下图所示:
二、时序分析中的基本概念
1、发起沿与捕获沿
发起沿与捕获沿通常差一个时钟(大概时序分析工具默认发起沿的下一个时钟捕获数据),发起沿和捕获沿共用一个时钟的的时序模型如下图所示:
-
Tco:时钟输出时间,发起沿有效至数据出现在发起沿寄存器Q端所需时间。
-
Tsu:捕获寄存器建立时间需求。
-
Th:捕获寄存器保持时间需求。
2、数据到达时间
以发起沿为时间基准点(通常定义是0时刻),数据达到时间为:
DataArrivalTime=LaunchEdge+Tclka+Tco+Tdata
如下图所示:
3、时钟到达时间
时钟到达时间是指捕获寄存器的时钟:
ClockArrivalTime=CaptureEdge+Tclkb
4、建立时间的数据需求时间
数据必须提前一定时间在捕获寄存器之前稳定存在于数据端口。
DataRequiredTime(Setup)=ClockArrivalTime−Tsu−ClockUncertainty
5、保持时间的数据需求时间
数据必须在时钟捕获沿之后依然稳定一段时间:
DataRequiredTime(Hold)=CLockArrivalTime+Th−ClockUncertainty
6、建立时间裕量
建立时间裕量指的是:数据在
Tsu之前的一段时间已经稳定
SetupSlack=DataRequiredTime(setup)−DataArrivalTime(Setup)
如下图所示:
7、保持时间裕量
保持时间裕量是指当前数据保持时间之后,下一数据到达之前的时间。
HoldSlack=DataArrivalTime(Hold)−DataRequiredTime(Hold)
如下图所示:
三、总结
将建立时间裕量和保持时间裕量放在一起分析:
建立时间决定了数据的最大延迟:
MaxDelay=T−Tsu
保持时间决定了数据的最小延迟:
MinDelay=Th
所以,建立时间和保持时间共同决定了数据的有效窗口。
进一步分析,系统时钟周期T需要满足:
T>=Tco+Tlogic+Trouting+Tsu−Tskew
一旦芯片确定(
Tco和
Tsu由工艺决定),那么只能修改
Tdata=Tlogic+Trouting来提系统频率。
Tlogic取决于代码风格;
Trouting和布局布线有很大关系。(同步设计不考虑时钟偏移)。