Vivado如何计算关键路径的建立时间裕量?(实践篇)

上篇博文中已经提到了:

Vivado如何计算关键路径的建立时间裕量?(理论分析篇)

Vivado实际如何对建立时间裕量进行分析?

从中我们得知,数据达到时间以及数据要求时间的概念以及裕量是如何计算的。

这篇短文,从实践出发,看看Vivado是不是那么分析的呢?

本文依旧以Xilinx提供的example工程WaveGen出发,来一起看看:

对设计进行综合实现,之后打开实现结果:

Vivado如何计算关键路径的建立时间裕量?(实践篇)
随便找一条路径来看,这里以图中为例。

可见这是一条同步路径,双击Path 1,可见详情:

闲情可分为如下几部分:

  1. 时序总结:

Vivado如何计算关键路径的建立时间裕量?(实践篇)

这里指出了
1) 路径类型,是建立时间路径;
2) 源寄存器以及目的寄存器;
3)路径延迟及其组成成分
4) 组合逻辑数量,即lut级数
5) 时钟偏斜以及时钟不确定性等

点击裕量,可见其计算公式,即数据要求时间 - 数据到达时间。

Vivado如何计算关键路径的建立时间裕量?(实践篇)

  1. 源时钟路径延迟

Vivado如何计算关键路径的建立时间裕量?(实践篇)

源时钟路径的含义是从时钟源头(外部输入时钟)到源触发器的时钟端之间的延迟,可以清晰的看到,这个路径示例的这个时间是一个负值,下图红色部分,外部时钟上升沿为0时刻,到达源寄存器的时间竟然是一个负值,可见,这里经过了一个MMCM时钟管理模块,它的内部对是输入时钟进行了处理,见下图Incr画圈处的延迟增量是一个很大的负值。

Vivado如何计算关键路径的建立时间裕量?(实践篇)
FPGA内部根据时序约束的要求,这么调整时钟延迟来尽可能达到时序满足,如何时序比较宽裕,也许结果就不一样了。

  1. 数据路径延迟

Vivado如何计算关键路径的建立时间裕量?(实践篇)

可见,数据路径经历了这么多的LUT,也就是我们说的组合逻辑,这里面包含LUT延迟以及路径布线延迟,其中绝大多数情况,布线延迟会更大。

每一级小路径都会有延迟,路径延迟的计算起点是上述上述的源时钟路径的终点,这样二者叠加到一起就是数据从外部时钟0时刻(参考点)到达目的寄存器的数据输入端的时间,也就是数据到达时间。

  1. 目的时钟路径延迟

Vivado如何计算关键路径的建立时间裕量?(实践篇)

目的时钟路径的含义其实是时钟经过多久,到达目的寄存器的时钟输入端;
既然是目的时钟,当然参考时刻是外部输入时钟的目的时钟沿,是源时钟沿的下一个沿,自然相差一个周期,由于要预留好建立时间的,因此要减去一个建立时间;这样就得到一个具体的时刻,告诉布局布线工具,在这个时期之前,数据到达即可,不要超过这个时间,否则就满足不了时序,这样工具就会努力朝这个方向走。

无论是数据到达时间还是数据要求时间,时间的起点都是从外部时钟的时钟沿作为0时刻,开始分析,因此,最终到达源以及目的寄存器的时钟输入端,就有一个时钟偏差,就叫做时钟偏斜。

如下图:

Vivado如何计算关键路径的建立时间裕量?(实践篇)

clk1与clk2分别是到达源以及目的时钟端的时钟;
二者就有一个时钟偏斜,我们对时序的分析,也就有了上面常见的公式。

Vivado如何计算关键路径的建立时间裕量?(实践篇)

数据在蓝线之前到达即可。
从发起沿到蓝线的距离也是数据要求时间,即数据延迟允许的最大时间,给了规定,那么工具努力达到这一目标即可满足时序要求,这就是时序分析的原理。

最后,当然如果看上面的路径不方便不直观,可以打开任意一条路径的原理图,可以很清晰地看出时序模型,具体路径等等:

Vivado如何计算关键路径的建立时间裕量?(实践篇)

将上图组合路径那一块合起来:

Vivado如何计算关键路径的建立时间裕量?(实践篇)

大家自己去尝试下吧!对比理解很容易。

上一篇:点击Java Web服务:curl或URLConnection


下一篇:jfrog 关闭开放 bintray&&jcenter&&gocenter&&chartcenter 服务