[X]关闭
5

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三)

摘要: 1.1概述I/O约束主要是关于设置IO delay的延迟,以便让VIVADO IDE工具可以知道延迟参数去优化布局布线的路径,当布局布线后的路径无法满足设置的IO delay要求时,就会报告时序错误。对于满足时序要求的设计,就是建立 ...

.1概述

I/O约束主要是关于设置IO delay的延迟,以便让VIVADO IDE工具可以知道延迟参数去优化布局布线的路径,当布局布线后的路径无法满足设置的IO delay要求时,就会报告时序错误。对于满足时序要求的设计,就是建立时间(Setup)和保持时间(Hold)都要满足要求。所以正确设置,时序约束,也会提高VIVADO IDE的编译速度,错误的时序约束可能会导致VIVADO IDE穷尽一些办法无法完成布局布线,而导致编译时间太长。另外请注意,程序能够正确运行,取决于正确的代码设计和正确的时序约束,而不是依靠时序报告,时序报告只是代表告知VIVADO IDE编译器的时序条件,在布局布线后满足要求。

本文主要参考了官方文档“ug903-vivado-using-constraints.pdf”和” ug906-vivado-design-analysis.pdf”,结合官方文档,2篇内容里面的重点内容,整理成学习笔记。

 

1.2 Setup/Hold 时序分析

上图是一个的典型时序路径示意图,时序分析需要注意以下3条路径:

1)、源时钟路径

2)、数据路径

3)、目的时钟路径

         在进行时序分析之前,需要了解时序分析的一些基本概念,如时钟抖动、时钟偏斜(Tskew)、建立时间(Tsu)、保持时间(Thd)等。时序分析也就是分析每一个触发器(寄存器)是否满足建立时间/保持时间,而时序的设计的实质就是满足每一个触发器的建立时间/保持时间的要求。

        

1.2.1时钟抖动

  时钟信号边沿变化的不确定时间称为时钟抖动,一般情况下的时序分析是不考虑时钟抖动,如果考虑时钟抖动,则建立时间应该是Tsu+T1,保持时间应该是Thd+T2。

1.2.2时钟偏斜

  时钟的分析起点是源寄存器(RegA),终点是目标寄存器(RegB)。时钟在图中的结构中传输也会有延迟,时钟信号从时钟源传输到源寄存器的延时为TsrcClk,传输到目标寄存器的延时为TdestClk。时钟网络的延时为TsrcClk与TdestClk之差,即Tskew=TdestClk-TsrcClk。

1.2.3 建立时间和保持时间

建立时间(Setup Time):在capture上升沿到来之前,数据需要保持稳定不变的时间,如果建立时间不满足,数据不能在capture沿打入触发器;

保持时间(Hold Time):在capture上升沿到来后,数据需要保持不变的时间,如果保持时间不够,数据同样不能打入触发器。


 

1.2.4发送沿和捕获沿

  (1)发送沿(Launch Edge):发送数据对应的时钟沿,是时序分析的起点;

  (2)捕获沿(Capture Edge):捕获数据对应的时钟沿,是时序分析的终点,相对于launch Edge通常为一个时钟周期,但不绝对,如多周期。

1.2.5时序裕度Slack(Setup)

Data Arrival Time(setup)

Data Arrival Time(setup) = launch edge +TsrcClk + TcKo + Tdata 

如上图所示,Data Arrival Time为从源时钟的Launch edge开始,经过Tsrcclk延迟、Tcko延迟、Tdata数据延迟的总和;

Data Required Time (Setup) = capture edge + TdestClk -Tsu

Data Required Time(建立时间要求):为能让数据打入寄存器,数据准备好的最晚时间点。所以从Clock Arrival Time 减去Tsu ,即为Data Required Time (setup)。

 

Slack(setup)= Data Required Time (Setup)- Data Arrival Time(Setup)

          = capture edge + TdestClk -Tsu –(launch edge +TsrcClk + TcKo + Tdata )

为了更直观的得到结果,假设时钟延迟TdestClk= TsrcClk,launch edge时刻为0时刻,capture edge时刻为周期T时刻。重新整理公式后得到:

Slack(setup)= Data Required Time (Setup)- Data Arrival Time(Setup)

          = T-Tsu-Tcko-Tdata

Slack(setup)为正表示时序满足要求,通过计算公式也再次证明,如果Tcko和Tdata延迟变大,建立时间Slack (setup)裕度越小,反之越大。

1.2.6时序裕度Stack(Hold)

Data Arrival Time = launch edge +TsrcClk + TcKo + Tdata 

如下图所示,Data Arrival Time为从源时钟的Next Launch edge开始,经过Tsrcclk延迟、Tcko延迟、Tdata数据延迟的总和,这里分析的时候一定注意,是Next Launch edge开始的

 

Data Required Time (hold)= capture edge + TdestClk+Thd 

Data Required Time (保持时间要求)为能让数据打入寄存器,数据至少要保持到的时间点,是capture edge、TdestClk和Thd的总和。在Next Launch edge下一个数据打出来前,当前数据需要保持的时间。

 

Slack(hold)的计算:

Slack(hold)= Data Arrival Time(hold) -Data Required Time (hold)

          = launch edge +TsrcClk + TcKo + Tdata -(capture edge + TdestClk+Thd)

为了简化分析,假设时钟的延迟TsrcClk=TdestClk,另外capture edge 和 Next Launch edge是同一个上升沿,重新计算公式:

Slack(hold)= Data Required Time (Setup)- Data Arrival Time(hold)

          = launch edge +TsrcClk + TcKo + Tdata -(capture edge + TdestClk+Thd)

                     = TcKo + Tdata - Thd

Slack(hold)为正表示时序满足要求,通过计算公式也再次证明,如果Tcko和Tdata延迟变大,建立时间Stack (hold)裕度越大,反之越小。

 

1.3Input Delay类型和约束

从系统级设计方式来讲可分为系统同步和源同步两种,但是他们的约束结果都是一样的,选取那种方法可以根据习惯和方便性选择,下面我们分别介绍这两种方法。

 

1.3.1 Input Delay系统同步输入(System Synchronous)

以FPGA 做接收侧来举例,上游器件仅仅传递数据信号到 FPGA 中,时钟信号则完全依靠系统板级来同步。采用这种方式需要考虑板级时钟的延迟、时钟的skew、数据的延迟三重因素,使用起来相对来说比较麻烦,设计的速度无法达到最大,大部分情况仅应用于SDR 方式。

 

下面的例子中,涉及到tco延迟参数的和tcko是一致的,请注意。

1)、SDR上升沿同步输入(SDR Rising Edge System Synchronous Inputs)

对系统同步接口做 Input 约束相对容易,只需要考虑上游器件的 Tcko 和数据在板级的延时即可。下图是一个 SDR 上升沿采样系统同步接口的 Input 约束示例。

计算公式如下:

set_input_delay -clock $input_clock -max [expr $tco_max + $trce_dly_max] [get_ports $input_ports];

set_input_delay -clock $input_clock -min [expr $tco_min + $trce_dly_min] [get_ports $input_ports];

 

举例:

时钟周期:T=10ns

触发器最小延迟:Tco(mini)=1ns

触发器最大延迟:Tco(max)=2ns

走线最小延迟:Ttrace(mini)=0.3ns

走线最大延迟:Ttrace(max)=0.4ns

输入延迟的input delay时序约束如下:

Create_clock –name sysclk –period 10 [get_ports clk]

Set_input_delay –clock sysclk –max 2.4 [get_ports din]

Set_input_delay –clock sysclk –min 1.3 [get_ports din]

 

2)、SDR 下降沿同步输入(SDR Falling Edge System Synchronous Inputs)

计算公式:

set_input_delay -clock $input_clock -max [expr $tco_max + $trce_dly_max] [get_ports $input_ports] -clock_fall;

set_input_delay -clock $input_clock -min [expr $tco_min + $trce_dly_min] [get_ports $input_ports] -clock_fall;

举例:

时钟周期:T=10ns

触发器最小延迟:Tco(mini)=1.5ns

触发器最大延迟:Tco(max)=2ns

走线最小延迟:Ttrace(mini)=0.3ns

走线最大延迟:Ttrace(max)=0.4ns

输入延迟的input delay时序约束如下:

3

路过
1

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (4 人)

发表评论

最新评论

引用 I'mpossible 2020-4-1 16:28
感谢分享
引用 DBG 2020-3-26 18:29
学习
引用 云海 2020-3-9 17:35
不错
引用 拼4694 2019-12-2 17:33
谢谢
引用 su3752@qq.com 2019-10-29 10:40
写的不错,够用了

查看全部评论(5)

本文作者
2019-10-26 00:19
  • 7
    粉丝
  • 7000
    阅读
  • 5
    回复

关注米联客

扫描关注,了解最新资讯

联系人:汤经理
电话:0519-80699907
EMAIL:270682667@qq.com
地址:常州溧阳市天目云谷3号楼北楼201B
相关分类
热门评论
排行榜