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

目录

基本概念

建立时间

保持时间

时序分析的基本模型

时间延时和数据延时

时钟延时Tclk

数据延时Tdata


 

基本概念

建立时间

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

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

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

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

保持时间

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

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

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

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

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

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

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

 

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

 

时序分析的基本模型

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

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

时间延时和数据延时

时钟延时Tclk

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

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

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

时钟的偏斜指的是源端寄存器和目的寄存器之间的时钟的延时差,源端都是全局时钟,目的端是各个寄存器的时钟端,也就是时钟的偏斜=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端。

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

 因此实际数据达到的时间(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

接下来分析时钟的延时

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:锁存沿,一般称为时刻一个时钟周期。

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

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

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

建立时间的余量:Setup Slack

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

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

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

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

分析:

首先看数据到达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

 练习题:

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

 

  • 7
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vivado中,ODDR(双端数据输出寄存器约束是用于定义时序约束的一种方式。它通过限制时钟数据路径之的延迟来确保数据时钟边沿之前到达目标寄存器。 具体来说,ODDR约束用于描述ODDR实例之时钟数据路径延迟。在引用所提到的例子中,rx_clk_IBUF_inst/I -> rx_clk_IBUF_inst/O和rx_clk_IBUF_BUFG_inst/I -> rx_clk_IBUF_BUFG_inst/O是时钟数据的共同路径。然而,由于数据到达的路径和时钟的路径经历的延迟是不同的,因此需要定义时钟的悲观度来衡量这两者之的差值。这个悲观度的值是综合整个系统给出的,它反映了时钟路径和数据路径之的延迟差异。 此外,在ODDR约束中还可以指定ODDR输入到输出的延迟,例如引用中提到的rx_clk_IBUF_BUFG_inst/I -> rx_clk_IBUF_BUFG_inst/O路径的延迟。 综上所述,Vivado中的ODDR约束用于定义时钟数据路径之的延迟,以确保数据时钟边沿之前到达目标寄存器。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【Xilinx Vivado时序分析/约束系列4】FPGA开发时序分析/约束-实验工程上手实操](https://blog.csdn.net/m0_61298445/article/details/123406769)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linest-5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值