【Xilinx Vivado时序分析/约束系列1】FPGA开发时序分析/约束-寄存器间时序分析

目录

基本概念

建立时间

保持时间

时序分析的基本模型

时间延时和数据延时

时钟延时Tclk

数据延时Tdata


基本概念

建立时间

从下图可以看到,时钟会通过传输线传递到目的寄存器2的时钟端,数据会通过数据线,也可能是组合逻辑传递到目的寄存器的数据端,数据从寄存器1传递到寄存器2的过程中,图中蓝色的箭头为数据的发射沿,蓝色时钟上升沿通过采数据将数据发送出去,而红色箭头就是作为目的寄存器2的数据采样沿,按照基本的定义,在一般的情况下,定义为发射沿和采样沿是相差一个时钟周期。

【Xilinx Vivado时序分析/约束系列1】FPGA开发时序分析/约束-寄存器间时序分析_第1张图片

经过传递后,在下图可以看到,数据通过数据线传递到了寄存器2的D端,采样沿到达寄存器2的时钟端(在此先不考虑建立时间和保持时间的门限),可以看到,采样沿和数据结束的位置是对齐的,并且它与数据开始的位置之间的差的绝对值是一个时钟周期。因此我们定义为:采样沿到达数据据开始这个位置,也就是红色箭头距离数据刚开始的这段时间称为建立时间,在理想的情况下,建立时间就是一个时钟周期。

【Xilinx Vivado时序分析/约束系列1】FPGA开发时序分析/约束-寄存器间时序分析_第2张图片

保持时间

同样的在图中,采样沿达到数据结束的位置称为保持时间,此时的理想情况下,保持时间为0,此时就是时钟和数据同时达到寄存器2的D端。保持时间为0,建立时间为整个时钟周期。

但是这是在理想情况下,实际的并不是这样。

再来分析一组保持时间为一个时钟周期的情况,当数据传递到了寄存器2的D端时,此时红色箭头也就是采样沿距离数据结束为一个时钟周期,即保持时间为一个时钟周期,数据从左运动到右边,在右边所处的位置越靠右,就认为它延时越大,即delay越大,delay越大,并不是说它的速度越快,反而理解它应该是速度越慢,也即延时越大。换种理解方式,从寄存器1到寄存器2的长度是数据传递的时间,它越长的话,表示数据传递的时间消耗越长,延时也就越大。同样的上升沿到达的位置更短,时间也就更短。此时采样沿刚好和数据的起始处于同一位置,这种现象就称为“沿打沿”现象,这种情况就属于建立时间出现违例,因为假定的理想模型保持时间的门限和建立时间的门限都没有设置值。

【Xilinx Vivado时序分析/约束系列1】FPGA开发时序分析/约束-寄存器间时序分析_第3张图片

 上一个例子是保持时间的最大值,下图为建立时间处于最大值,也就是采样沿和数据的末端位置对齐,此时容易产生保持时间的违例。

【Xilinx Vivado时序分析/约束系列1】FPGA开发时序分析/约束-寄存器间时序分析_第4张图片

理想最优的采样状态如下图所示,采样沿处于数据的中间位置,此时采样得到的数据是最稳定的。

【Xilinx Vivado时序分析/约束系列1】FPGA开发时序分析/约束-寄存器间时序分析_第5张图片

时序分析的基本模型

时序分析始对两个节点之间及逆行时序分析,模型分为以下四种:

  • 寄存器与寄存器之间
  • 输入PAD(输入时钟)与寄存器之间
  • 寄存器与输出 PAD (输出时钟)之间
  • 输入PAD(输入时钟)与输出PAD(输出时钟)

时间延时和数据延时

时钟延时Tclk

时钟输入clock in到达寄存器1的延时叫Tclk1,到达寄存器2的延时叫Tclk2。

【Xilinx Vivado时序分析/约束系列1】FPGA开发时序分析/约束-寄存器间时序分析_第6张图片

利用全局时钟网络可以减少时钟的偏斜。

时钟的偏斜指的是源端寄存器和目的寄存器之间的时钟的延时差,源端都是全局时钟,目的端是各个寄存器的时钟端,也就是时钟的偏斜=Tclk2-Tclk1得到的。

数据延时Tdata

从Q端传递到目标寄存器的D端所经历的延时称为Tdata。

因此,时序分析简单的来说就是分析计算时钟达到目的寄存器的延时和数据到达目标寄存器的延时。

如下图:

Clock pad:芯片管脚的时钟,也就是上图的Clock in;

Clock in reg1:延时Tclk1达到寄存器1的时钟;

Rrg1 Q:在寄存器内部经过寄存器延时时间Tco,达到寄存器1的Q端;

Reg2 D:在经过数据路径的延时时间或者是组合逻辑电路的延时时间Tdata,到达寄存器2的D端。

【Xilinx Vivado时序分析/约束系列1】FPGA开发时序分析/约束-寄存器间时序分析_第7张图片

 因此实际数据达到的时间(Data arrival time)的表示为Tclk1、Tco、Tdata之和。

Tco:寄存器更新数据延迟

Tsu、Th:寄存器建立时间门限和保持时间门限

这就是数据的总延时。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

接下来分析时钟的延时

 可以看到时钟达到时间(Clock arrival time)为Tclk2.

Tsu:(set up)建立时间,就称这个为建立时间的门限,就是上升沿到来之前数据所需要稳定的最小时间。

Lunch edge:发射沿,一般称为0时刻

Latch edge:锁存沿,一般称为时刻一个时钟周期。

【Xilinx Vivado时序分析/约束系列1】FPGA开发时序分析/约束-寄存器间时序分析_第8张图片

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

 从时序图可以看出,数据所被要求达到的时间为:Tcycle+Tclk2-Tsu

建立时间的余量:Setup Slack

 建立时间的余量简单来说就是数据晚来这么一段时间,时钟也是能够采到的,反过来说,时钟早来这么一段时间也是可以的。

把数据到来的时间和数据所被要求到达的时间放在一起比较的时序图

【Xilinx Vivado时序分析/约束系列1】FPGA开发时序分析/约束-寄存器间时序分析_第9张图片

分析:

首先看数据到达Reg2的时间,从起始的Clock pad开始,达到Reg2之前延时了Tclk1、Tco、Tdata三个时钟延时

再看数据所被要求达到的时间,采样上升沿latch edge,经过了Tclk2的延时,再减去最小的建立时间Tsu,这就是数据所被要求到达的的时间。

这时候可以看到数据达到的时间和数据被要求到达的时间这两者有一个时间差,即图中黄绿色的部分,这部分时间就被称为建立时间余量,也就是说数据再往右延时黄绿色这么多的时间段,时钟也是能够采到的,换句话说时钟再提前多么多的时间段,同样能够正常采到数据。

下图便是建立时间余量的计算公式,vivado中时序计算也是这么算的。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

 练习题:

【Xilinx Vivado时序分析/约束系列1】FPGA开发时序分析/约束-寄存器间时序分析_第10张图片

你可能感兴趣的