.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时序约束如下: |
扫描关注,了解最新资讯