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

renyonggang 35 0

1.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 时序分析

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第2张

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

1)、源时钟路径

时钟从时钟原点到源(source)时钟输入端口的路径,如下图TsrcClk

2)、数据路径

    如下图所示,从Source Device reg的输出Q到FPGA的reg输入D

3)、目的时钟路径

    时钟从时钟原点到目的(destination)时钟输入端口的路径,如下图所示TdestClk

 

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第3张

我们通常说的launch edge(发送沿)就是数据由source clock 边沿发送出去;而capture edge(接收沿)就是数据由Destination Clock边沿抓取的数据。实际上在大部分情况下,Source Clock和Destination Clock是同一个时钟而某些情况下Source Clock和Destination Clock会是整数倍的时钟关系。

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第4张

         Vivado IDE 分析时序并且在时序路径终点时候报告时序裕量。时序裕量是指在时序路径终点数据

要求时间和抵达时间的差异。如果裕量为正,从时序的角度考虑此路径是有效的。Setup/Hold时序分析需要搞清楚一些概念。

launch edge 是源寄存器发送数据的时钟沿,是时序分析的起点。

captrue edge是目的寄存器捕获数据的时钟沿,是时序分析的终点。 

1.2.1时序裕度Stack(Setup)

 

Data Arrival Time(setup)

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

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

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第5张

 

Data Required Time (Setup)

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

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

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第6张

Stack(setup)的计算:

Stack(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时刻。重新整理公式后得到:

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

          = T-Tsu-Tcko-Tdata

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

 

1.2.2时序裕度Stack(Hold)

Data Arrival Time(hold)

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

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

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第7张

Data Required Time (hold):

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

Data Required Time (保持时间要求): 为能让数据打入寄存器,数据至少要保持到的时间点。所以在Clock Arrival Time  处加上Th ,即为Data Required Time (hold)

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第8张

Stack(hold)的计算:

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

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

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

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

          = Tcko+Tdata-Thd

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

1.3Input Delay类型和约束

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

 

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

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

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第9张

 

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

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

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

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第10张

计算公式如下:

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)

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第11张

计算公式:

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时序约束如下:

Create_clock –name sysclk –period 10 [get_ports clk]

Set_input_delay –clock sysclk –max 2.4 [get_ports din] -clock_fall;

Set_input_delay –clock sysclk –min 1.8 [get_ports din] -clock_fall;

 

3)、DDR系统同步输入(DDR System Synchronous Inputs)

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第12张

计算公式如下:

# Input Delay Constraint

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

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

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

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

 

举例:

时钟周期:T=10ns

上升沿触发器最大延迟:Trco(mini)=1ns

上升沿触发器最小延迟:Trco(max)=2ns

下降沿触发器最大延迟:Trco(mini)=1.5ns

下降沿触发器最小延迟:Trco(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]

Set_input_delay –clock sysclk –max 2.4 [get_ports din] -clock_fall;

Set_input_delay –clock sysclk –min 1.8 [get_ports din] -clock_fall;

1.3.2 Input源同步接口(Source Synchronous Interface)

   源同步方式是告知Thd 和Tsu的时间参数,然后FPGA时序设计上根据这两个参数设置约束条件,和系统同步方式相比,采用源同步的方式,可以让时序约束更加简化,但是要求采用源同步的器件具备在发送端就能把数据同步,并且提供Thd 和Tsu的时间参数。

数据的传输方式包括了SDR、DDR、中心对齐(Center Aligned)和边沿对齐(Edge Aligned)等多种方式。

至于采用系统同步还是源同步的方式根据实际情况而定,如果接口给出的是Tcko延迟那么就用系统同步方便,如果接口给出的是Thd和Tsu那就是系统同步方便。不论以何种方式来设置 Input 约束,作用是一样,时序报告的结果也应该是一致的。

1)、SDR源同步中心对齐上升沿(Center-Aligned Rising Edge Source Synchronous Inputs)

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第13张

上图中的dv_bre代表了上游发送器件上升沿前的有效数据窗口和上升沿后的有效数据窗口。

计算公式:

set_input_delay -clock $input_clock -max [expr $input_clock_period - $dv_bre] [get_ports $input_ports];

set_input_delay -clock $input_clock -min $dv_are                        [get_ports $input_ports];

可以看到-max为时钟周期减去dv_bre;-min为dv_are

针对上图所示中心对齐源同步 SDR 接口时序,分别按照两种方式来约束,需要的已知条件和计算方式虽然不同,但却可以得到完全一样的结果。

以系统同步模式举例:

系统周期:T=10ns

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

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

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

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

Set_input_delay –clock sysclk –max 2.4 [get_ports din]

Set_input_delay –clock sysclk –min 1.3 [get_ports din]

 

以源同步模式举例:

系统周期:T=10ns

dv_dre = 7.6ns

dv_are = 1.3ns

Set_input_delay –clock sysclk –max 2.4 [get_ports din]

Set_input_delay –clock sysclk –min 1.3 [get_ports din]

可以看到以系统同步和源同步的方式效果是一样的,源同步的方式由于上游器件可以确保数据的同步,一般器件厂商会在datasheet里面给出这些阐述的,而参数很可能会以最小建立时间。

 

dv_dre其实就是我们所说的最小建立时间 Tsu-min

dv_are 其实就是我们所说的最小保持时间 Thd-min

满足最小建立,最小保持时间,数据才能被正确采样。

 

2)、SDR源同步中心对齐下降沿(Center-Aligned Rising Edge Source Synchronous Inputs)

 

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第14张

计算公式如下:

set_input_delay -clock $input_clock -max [expr $input_clock_period - $dv_bfe] [get_ports $input_ports] -clock_fall;

set_input_delay -clock $input_clock -min $dv_afe                         [get_ports $input_ports] -clock_fall;

源中心对齐下降沿和上升沿没什么差异,不在举例说明。

 

3)、Input源同步DDR 中心对齐约束(Center-Aligned Falling Edge Source Synchronous Inputs)

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第15张

计算公式如下:

set_input_delay -clock $input_clock -max [expr $input_clock_period/2 - $dv_bfe] [get_ports $input_ports];

set_input_delay -clock $input_clock -min $dv_are                          [get_ports $input_ports];

set_input_delay -clock $input_clock -max [expr $input_clock_period/2 - $dv_bre] [get_ports $input_ports] -clock_fall -add_delay;

set_input_delay -clock $input_clock -min $dv_afe                          [get_ports $input_ports] -clock_fall -add_delay;

 

DDR方式下数据数据的发送沿又是采样沿。实际的采样周期是时钟周期的一半;上升沿采样的数据(Rise Data)的 -max 是采样周期减去这个数据的发送沿(下降沿)之前的数据有效窗口值 dv_bfe,而对应的-min 就应该是上升沿之后的数据有效窗口值dv_are ;同理,下降沿采样的数据(Fall Data)的 -max 应该是采样周期减去这个数据的发送沿(上升沿)之前的数据有效窗口值 dv_bre,而对应的-min 就应该是下降沿之后的数据有效窗口值 dv_afe 。

举例:

T= 10ns, dv_bre = 2ns , dv_are= 2ns , dv_bfe = 2.5ns , dv_afe= 2ns

 

Create_clock –name  sysclk –period      10  [get_ports clk]

set_input_delay -clock sysclk  –max    7.5            [get_ports din]

set_input_delay -clock sysclk  –min    2    [get_ports din]

set_input_delay -clock sysclk  –max    8   [get_ports din] -clock_fall -add_delay

set_input_delay -clock sysclk  –min    2    [get_ports din] -clock_fall -add_delay

4)、input源同步使用MMCM/PLL SDR上升沿对齐(Rising Edge Source Synchronous Inputs Using MMCM/PLL)

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第16张

公式如下:

set_input_delay -clock $input_clock -max $skew_are  [get_ports $input_ports];

set_input_delay -clock $input_clock -min -$skew_bre [get_ports $input_ports];

举例:

T= 10ns, skew_bre = 2ns , dv_are= 3ns

Create_clock –name  sysclk –period      10  [get_ports clk]

set_input_delay -clock $input_clock -max 3  [get_ports $input_ports];

set_input_delay -clock $input_clock -min -2  [get_ports $input_ports];

发送端经过MMCM/PLL调整后,数据早于时钟1个周期并且边沿对齐,所以在采样沿之前的数据延迟为负数,代表数据早于采样沿,而采样沿之后的数据为正代表数据晚于采样沿。

 

5)、input源同步使用MMCM/PLL SDR下降沿(Falling Edge Source Synchronous Inputs Using MMCM/PLL)

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第17张

计算公式:

set_input_delay -clock $input_clock -max $skew_afe  [get_ports $input_ports] -clock_fall;

set_input_delay -clock $input_clock -min -$skew_bfe [get_ports $input_ports] -clock_fall;

下降沿的计算和上升沿一样,所以不在重复举例。

 

6)、input源同步使用MMCM/PLL DDR边沿对齐

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第18张

计算公式:

set_input_delay -clock $input_clock -max $skew_are      [get_ports $input_ports];

set_input_delay -clock $input_clock -min -$skew_bre      [get_ports $input_ports];

set_input_delay -clock $input_clock -max $skew_afe      [get_ports $input_ports] -clock_fall -add_delay;

set_input_delay -clock $input_clock -min -$skew_bfe      [get_ports $input_ports] -clock_fall -add_delay;

 

举例:T= 10ns, skew_bre = 2ns , dv_are= 3ns ,skew_bfe = 2.5ns , dv_are= 2ns

Create_clock –name  sysclk  –period   10             [get_ports sysclk]

set_input_delay -clock $input_clock -max 3            [get_ports sysclk];

set_input_delay -clock $input_clock -min -2           [get_ports sysclk];

set_input_delay -clock $input_clock -max 2           [get_ports sysclk] -clock_fall -add_delay;

set_input_delay -clock $input_clock -min -2.5         [get_ports sysclk] -clock_fall -add_delay;

 

上升沿的 -max 是上升沿之后的数据 skew (skew_are ),对应的-min 就应该是负的上升沿之前的数据 skew (skew_bre );

下降沿的 -max 是下降沿之后的数据 skew (skew_afe ),对应的-min 就应该是负的下降沿之前的数据 skew (skew_bfe )。

负值并不代表延时真的为负,而是跟数据相对于时钟沿的方向有关。请一定牢记 set_input_delay 中 -max/-min 的定义,即时钟采样沿到达之后最大与最小的数据有效窗口(set_output_delay 中 -max/-min 的定义与之正好相反,)。由于jitter和skew 的存在,最差情况下,数据有效窗口在到达时钟采样沿之前就已经结束,所以会有负数出现在-min 之后。

大家会有个疑问,采用边沿对齐的方式,这样FPGA不是无法正确采集到数据了吗?对,如果直接采样肯定没法正确采集数据,所以我们一般会用到MMCM/PLL对数据进行相位调整,把边沿对齐变成中心对齐。

另外,在经过 MMCM/PLL 相移后的采样时钟跟同步接口输入的时钟之间需要做set_false_path 的约束(如下述例子)而把那些伪路径从时序报告中剔除,这里不再详述。如我们的纯FPGA的以太网UDP协议中有这样一段约束。

 

set_false_path -fall_from $tx_clk -rise_to [get_clocks phy_tx_clk] –setup

set_false_path -rise_from $tx_clk -fall_to [get_clocks phy_tx_clk] –setup

set_false_path -fall_from $tx_clk -fall_to [get_clocks phy_tx_clk] –hold

set_false_path -rise_from $tx_clk -rise_to [get_clocks phy_tx_clk] -hold

1.4 output 接口类型和约束

         和input IO时序约束类似,Output IO约束是考虑下游device的时序模型。另外在源同步接口中,需要使用set_generated_clock 先定义送出的随路时钟。和input时序分析类似,output 约束也系统同步和源同步时序分析,其中源同步时序又可以采取Setup/Hold Based Method 和Skew Based Method,我们下面会对这些方法做介绍。

 

1.4.1 output系统同步接口(System Synchronous Outputs)

         米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第19张

如上图所示,对于output delay FPGA变成了上游设备,而Device变成了下游设备,需要根据Device的时序参数设置正确的时序约束,告知VIVADO IDE。现在下游设备不是FPGA了,而是device了,大家要把视角切换过来,否作下面介绍的时序约束会有理解错误的。

1)、output系统同步SDR接口上升沿对齐(Rising Edge System Synchronous Outputs

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第20张

对于系统同步接口,和input类似,计算公式:

set_output_delay -clock $destination_clock -max [expr $trce_dly_max + $tsu] [get_ports $output_ports];

set_output_delay -clock $destination_clock -min [expr $trce_dly_min - $thd] [get_ports $output_ports];

即:

-max 为最大走线延迟(trce_dly_max)+建立时间(Tsu)

-mini 为最小走线延迟(trce_dly_min)-保持时间(Ttd)  -mini为负值代表数据在采样延后

举例:

时钟周期:T=10ns

下游Device建立时间:Tsu =1ns

下游Device保持时间:Thd=2ns

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

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

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

Create_clock –name sysclk –period 10 [get_ports clk]

#以下定义了一个虚拟时钟

Create_clock –name virtual_clk –period 10

Set_output_delay –clock virtual_clk –max 2.4 [get_ports dout]

Set_output_delay –clock virtual_clk –min -0.7 [get_ports dout]

         这里我定义了一个虚拟时钟,虚拟时钟和FPGA的发送时钟同频同相位,有利于简化时钟的分析。当然如果这个时钟是和FPGA的发送时钟是同一个时钟,我们也可以用发送时钟作为参考的。

从output delay 约束分析开始,如果非特别说明下游设备就是指的Device外设

 

2)、output系统同步SDR接口下降沿对齐(#Falling Edge System Synchronous Outputs

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第21张

计算公式:

set_output_delay -clock $destination_clock -max [expr $trce_dly_max + $tsu] [get_ports $output_ports] -clock_fall;

set_output_delay -clock $destination_clock -min [expr $trce_dly_min - $thd] [get_ports $output_ports] -clock_fall;

由于下降沿和上升沿一样的计算只是多了-clock_fall命令,我们这里不再举例说明。

 

3)、output系统同步DDR接口

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第22张

计算公式:

set_output_delay -clock $destination_clock -max [expr $trce_dly_max + $tsu_r] [get_ports $output_ports] ;

set_output_delay -clock $destination_clock -min [expr $trce_dly_min - $thd_r] [get_ports $output_ports] ;

set_output_delay -clock $destination_clock -max [expr $trce_dly_max + $tsu_f] [get_ports $output_ports] -clock_fall -add_delay;

set_output_delay -clock $destination_clock -min [expr $trce_dly_min - $thd_f] [get_ports $output_ports] -clock_fall -add_delay;

DDR 计算需要分别对上升沿和下降沿同时计算。

大部分情况下,更加推荐源源同步的方法,源同步的方法只要知道下游期间的Tsu和Thd就可以。

举例:

时钟周期:T=10ns

下游Devcie上升沿建立时间:Tsu_r =1ns

下游Device上升沿保持时间:Thd_r =2ns

下游Devcie下降沿建立时间:Tsu_f =1.5ns

下游Device下降沿保持时间:Thd_f =2.5ns

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

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

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

Create_clock –name sysclk –period 10 [get_ports clk]

#以下定义了一个虚拟时钟和下游device的时钟同频同相

Create_clock –name sysclk –period 10 [get_ports clk]

Create_clock –name virtual_clk –period 10

set_output_delay -clock virtual_clk –max 1.4 [get_ports dout] ;

set_output_delay -clock virtual_clk -min -1.7 [get_ports dout] ;

set_output_delay -clock virtual_clk -max 1.5 [get_ports dout] -clock_fall -add_delay;

set_output_delay -clock virtual_clk -min -2.2 [get_ports dout] -clock_fall -add_delay;

1.4.2 output源同步接口(Source Synchronous Outputs)

1)、Setup/Hold方法-SDR接口上升沿(SDR-Rising Edge Source Synchronous Outputs)

 

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第23张

计算公式如下:

set_output_delay -clock $fwclk -max [expr $trce_dly_max + $tsu] [get_ports $output_ports];

set_output_delay -clock $fwclk -min [expr $trce_dly_min - $thd] [get_ports $output_ports];

举例:

时钟周期:T=10ns

下游Device建立时间:Tsu =1ns

下游Device保持时间:Thd=2ns

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

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

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

Create_clock –name sysclk –period 10 [get_ports clk]

Create_clock –name virtual_clk –period 10

Set_output_delay –clock virtual_clk –max 2.4 [get_ports dout]

Set_output_delay –clock virtual_clk –min -0.7 [get_ports dout]

 

2)、Setup/Hold方法-SDR接口下降沿(SDR-Falling Edge Source Synchronous Outputs)

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第24张

计算公式如下:

set_output_delay -clock $fwclk -max [expr $trce_dly_max + $tsu] [get_ports $output_ports] -clock_fall;

set_output_delay -clock $fwclk -min [expr $trce_dly_min - $thd] [get_ports $output_ports] -clock_fall;

由于下降沿和上升沿一样的计算只是多了-clock_fall命令,我们这里不再举例说明。

 

3)、Setup/Hold方法-DDR接口上升沿(Setup/Hold-DDR Rising Edge Source Synchronous Outputs)

 

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第25张

计算公式如下:

set_output_delay -clock $fwclk -max [expr $trce_dly_max + $tsu_r]           [get_ports $output_ports];

set_output_delay -clock $fwclk -min [expr $trce_dly_min - $thd_r]   [get_ports $output_ports];

set_output_delay -clock $fwclk -max [expr $trce_dly_max + $tsu_f]           [get_ports $output_ports] -clock_fall -add_delay;

set_output_delay -clock $fwclk -min [expr $trce_dly_min - $thd_f]   [get_ports $output_ports] -clock_fall -add_delay;

举例:

时钟周期:T=10ns

下游Devcie上升沿建立时间:Tsu_r =1ns

下游Device上升沿保持时间:Thd_r =2ns

下游Devcie下降沿建立时间:Tsu_f =1.5ns

下游Device下降沿保持时间:Thd_f =2.5ns

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

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

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

Create_clock –name sysclk –period 10 [get_ports clk]

#以下定义了一个虚拟时钟和下游device的时钟同频同相

Create_clock –name sysclk –period 10 [get_ports clk]

Create_clock –name virtual_clk –period 10

set_output_delay -clock virtual_clk –max 1.4 [get_ports dout] ;

set_output_delay -clock virtual_clk -min -1.7 [get_ports dout] ;

set_output_delay -clock virtual_clk -max 1.5 [get_ports dout] -clock_fall -add_delay;

set_output_delay -clock virtual_clk -min -2.2 [get_ports dout] -clock_fall -add_delay;

 

4)、Max Skew-SDR接口上升沿(Max Skew-SDR-Rising Edge Source Synchronous Outputs)

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第26张

计算公式如下:

set_output_delay -clock $fwclk -max [expr $fwclk_period - $are_skew] [get_ports $output_ports];

set_output_delay -clock $fwclk -min $bre_skew                   [get_ports $output_ports];

举例:

时钟周期:T=10ns

bre_skew=4ns

are_skew=3ns

output delay时序约束如下:

Create_clock –name sysclk –period 10 [get_ports clk]

Create_clock –name virtual_clk –period 10

Set_output_delay –clock virtual_clk –max 7 [get_ports dout]

Set_output_delay –clock virtual_clk –min 4 [get_ports dout]

 

5)、Max Skew-SDR接口上升沿(Max Skew-SDR-Rising Edge Source Synchronous Outputs)

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第27张

计算公式:

set_output_delay -clock $fwclk -max [expr $fwclk_period - $afe_skew] [get_ports $output_ports] -clock_fall;

set_output_delay -clock $fwclk -min $bfe_skew                   [get_ports $output_ports] -clock_fall;

和上升沿模式类似不再举例

 

6)、Max Skew-DDR接口(Max Skew-DDR- Source Synchronous Outputs)

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第28张

计算公式如下:

set_output_delay -clock $fwclk -max [expr $fwclk_period/2 - $afe_skew] [get_ports $output_ports];

set_output_delay -clock $fwclk -min $bre_skew                     [get_ports $output_ports];

set_output_delay -clock $fwclk -max [expr $fwclk_period/2 - $are_skew] [get_ports $output_ports] -clock_fall -add_delay;

set_output_delay -clock $fwclk -min $bfe_skew                     [get_ports $output_ports] -clock_fall -add_delay;

举例:

bre_skew=1.1ns,are_skew=1.5ns

bfe_skew=1ns ,afe_skew=1.8ns

Create_clock –name sysclk –period 10 [get_ports clk]

Create_clock –name virtual_clk –period 10

set_output_delay -clock virtual_clk -max 2.2          [get_ports dout];

set_output_delay -clock virtual_clk -min 1.1           [get_ports dout];

set_output_delay -clock virtual_clk -max 3.9            [get_ports dout] -clock_fall -add_delay;

set_output_delay -clock virtual_clk -min 1        [get_ports dout] -clock_fall -add_delay;

1.5 VIVADO IDE提供的时序模板

         到目前位置,我们时序约束讲解的主线除了官方的ug903和ug906外,还有VIVADO IDE也提供了时序模板方便我们在编写代码的时候查阅时序约束规则。如果我们对时序约束规则公式有不清楚的可以在VIVADO IDE下很容易的查阅到。下一篇还有一些关于时序约束的基本概念讲完我们就结合实际的工程实战分析。

米联客(MSXBO)基于VIVADO FPGA时序笔记之I/O约束(三) -图片-人工智能博客-专注人工智能、智慧生态城市和5G智能新生态的网站  第29张

打赏 支付宝打赏 微信打赏

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~

请先 登录 再评论,若不是会员请先 注册