【时序约束】读懂用好Timing_report

13 篇文章 0 订阅
12 篇文章 2 订阅

一、静态时序分析:

静态时序分析(Static Timing Analysis)简称 STA,采用穷尽的分析方法来提取出整个电路存在的所有时序路径,计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足时序要求,通过对最大路径延时和最小路径延时的分析,找出违背时序约束的错误并报告。
STA 不需要输入向量就能穷尽所有的路径,且运行速度很快、占用内存较少、覆盖率极高,不仅可以对芯片设计进行全面的时序功能检查,而且还可以利用时序分析的结果来优化设计。所以 STA 不仅是数字集成电路
设计 Timing Sign-off 的必备手段,也越来越多地被用到设计的验证调试工作中。
STA 在 FPGA 设计中也一样重要,但不同于一般数字集成电路的设计,FPGA 设计中的静态时序分析工具一般都整合在芯片厂商提供的实现工具中。在 Vivado 中甚至没有一个独立的界面,而是通过几个特定的时序
报告命令来实现。

二、时序命令与报告

Vivado 中用于时序分析的命令主要有以下两条,且都有对应的图形化设置界面。

  • report_timing_summary 主要用于实现后的 timing sigh-off
  • report_timing 主要用于交互式的约束验证以及更细致具体的时序报告与分析
    1.report_timing_summary命令
    report_timing_summary 实际上隐含了 report_timing、report_clocks 、check_timing 以及部分的 report_clock_interaction 命令,所以我们最终看到的报告中也包含了这几部分的内容。
    report_clocks
    check_timing
    report_clock_interaction

Timing Summary 报告把路径按照时钟域分类,每个组别下缺省会报告 Setup、Hold 以及 Pulse Width 检查最差的各 10 条路径,还可以看到每条路径的具体延时报告。
每条路径具体的报告会分为 Summary、Source Clock Path、Data Path 和 Destination Clock Path 几部分,详细报告每部分的逻辑延时与连线延时。用户首先要关注的就是 Summary 中的几部分内容,发现问题后再根据具体情况来检查详细的延时数据。其中,Slack 显示路径是否有时序违例,Source 和 Destination 显示源驱动时钟和目的驱动时钟及其时钟频率, Requirement 显示这条路径的时序要求是多少,Data Path 显示数据路径上的延时,Logic Level 显示这条路径的逻辑级数,而 Clock Path Skew 和 Clock Uncertainty 则显示时钟路径上的不确定性。

report_timing_summary示例

report_timing_summary
INFO: [Timing 38-91] UpdateTimingParams: Speed grade: -2, Delay Type: min_max.
INFO: [Timing 38-191] Multithreading enabled for timing update using a maximum of 32 CPUs
Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
-----------------------------------------------------------------------------------------------
| Tool Version : Vivado v.2022.1 (lin64) Build 3526262 Mon Apr 18 15:47:01 MDT 2022
| Date         : Fri May 24 18:24:22 2024
| Host         : deep-PowerEdge-R730xd running 64-bit Ubuntu 20.04.6 LTS
| Command      : report_timing_summary
| Design       : single_bit_syn
| Device       : 7vx485t-ffg1157
| Speed File   : -2  PRODUCTION 1.12 2014-09-11
------------------------------------------------------------------------------------------------
Timing Summary Report
------------------------------------------------------------------------------------------------
| Timer Settings
| -----------------------------------------------------------------------------------------------
  Enable Multi Corner Analysis               :  Yes
  Enable Pessimism Removal                   :  Yes
  Pessimism Removal Resolution               :  Nearest Common Node
  Enable Input Delay Default Clock           :  No
  Enable Preset / Clear Arcs                 :  No
  Disable Flight Delays                      :  No
  Ignore I/O Paths                           :  No
  Timing Early Launch at Borrowing Latches   :  No
  Borrow Time for Max Delay Exceptions       :  Yes
  Merge Timing Exceptions                    :  Yes
  
  Corner    Analyze      Analyze  
  Name     Max Paths    Min Paths
  ------   ---------    --------- 
  Slow        Yes          Yes  
  Fast        Yes          Yes 
-----------------------------------------------------------------------------------------------------------
| Report Methodology
| ---------------------------------------------------------------------------------------------------------
Rule       Severity  Description                    Violations  
---------  --------  -----------------------------  ----------  
TIMING-9   Warning   Unknown CDC Logic              1 
TIMING-18  Warning   Missing input or output delay  2  

Note: This report is based on the most recent report_methodology run and may not be up-to-date. Run report_methodology on the current design for the latest report.
| check_timing report(check_timing)

Table of Contents
-----------------
1. checking no_clock (0)      // There are 0 register/latch pins with no clock.
2. checking constant_clock (0)// There are 0 register/latch pins with constant_clock.
3. checking pulse_width_clock (0)// There are 0 register/latch pins which need pulse_width check
4. checking unconstrained_internal_endpoints (0) // There are 0 pins that are not constrained for maximum delay.// There are 0 pins that are not constrained for maximum delay due to constant clock.
5. checking no_input_delay (0)//There are 0 input ports with no input delay specified. There are 0 input ports with no input delay but user has a false path constraint.
6. checking no_output_delay (0)// There are 0 ports with no output delay specified. There are 0 ports with no output delay but user has a false path constraint There are 0 ports with no output delay but with a timing clock defined on it or propagating through it
7. checking multiple_clock (0)//There are 0 register/latch pins with multiple clocks.
8. checking generated_clocks (0)// There are 0 generated clocks that are not connected to a clock source.
9. checking loops (0)// There are 0 combinational loops in the design.
10. checking partial_input_delay (0)// There are 0 input ports with partial input delay specified.
11. checking partial_output_delay (0)// There are 0 ports with partial output delay specified.
12. checking latch_loops (0)// There are 0 combinational latch loops in the design through latch input
------------------------------------------------------------------------------------------------
| Design Timing Summary
| ----------------------------------------------------------------------------------------------
    WNS(ns)      TNS(ns)  TNS Failing Endpoints  TNS Total Endpoints      WHS(ns)      THS(ns)  THS Failing Endpoints  THS Total Endpoints     WPWS(ns)     TPWS(ns)  TPWS Failing Endpoints  TPWS Total Endpoints 
     -------      -------  ---------------------  -------------------      -------      -------  ---------------------  -------------------     --------     --------  ----------------------  --------------------
     2.845        0.000                      0                    6        0.043        0.000                      0                    6        4.650        0.000                       0                     5  
All user specified timing constraints are met.
------------------------------------------------------------------------------------------------
| Clock Summary (report_clocks)
| -------------------------------------------------------------------------------------------------------------
Clock  Waveform(ns)       Period(ns)      Frequency(MHz)
-----  ------------       ----------      --------------
clk_a  {0.000 5.000}      10.000          100.000 
clk_b  {5.000 15.000}     20.000          50.000    
------------------------------------------------------------------------------------------------
| Intra Clock Table
| -----------------------------------------------------------------------------------------------------------------
Clock             WNS(ns)      TNS(ns)  TNS Failing Endpoints  TNS Total Endpoints      WHS(ns)      THS(ns)  THS Failing Endpoints  THS Total Endpoints     WPWS(ns)     TPWS(ns)  TPWS Failing Endpoints  TPWS Total Endpoints  
-----             -------      -------  ---------------------  -------------------      -------      -------  ---------------------  -------------------     --------     --------  ----------------------  --------------------  
clk_a               2.845        0.000                      0                    3        0.043        0.000                      0                    3        4.650        0.000                       0                     2  
clk_b              12.395        0.000                      0                    3        0.066        0.000                      0                    3        9.650        0.000                       0                     3  
------------------------------------------------------------------------------------------------

2.补充:工艺上的知识:OCV(在芯片上的不确定性) 与 PVT (工艺/电压/温度)

  • OCV:即便是同一种 FF(触发器),在同一个芯片上不同操作条件下的延时都不尽相同,我们称这种现象为 OCV(on-chip variation)。OCV 表示的是芯片内部的时序偏差,虽然很细小,但是也必须严格考虑到时序分析中去。

  • PVT(Process / Voltage / Temperature)三 个方面,而 STA 要做的就是针对不同工艺角(Process Corner)下特定的时 序模型来分析时序路径,从而保证设计在任何条件下都能满足时序要求, 可以正常工作。通常 PVT 对芯片性能的影响如下图所示, 栅极间的距离越小,温度越低,电压越高,电平变换和门延迟越小就越好。
    影响chip的三大因素

  • 通俗的来讲:由于工艺的原因,在这些cornor下可能会有不同的性能。在FPGA设计中的静态时序分析一般仅考虑Best Case和Worst Case,也称作Fast Process Corner 和Slow Process Corner,分别对应极端的PVT条件。
    最快最慢的依据

    Fast Corner Model: 最好的工艺+最低温度+最高电压下的模型;Slow Corner Model: 最差的工艺+最高温度+最低电压下的模型;在Vivado中,会对以上两个corner进行时序分析,并给出最差情况的报告。在setup中分析的是slow process corner,在hold中分析的是fast process corner。如果在在slow process corner模型下能满足setup的要求,那么其他模型也就都能满足;如果在fast process corner模型下能满足hold的要求,那么其他模型下也都能满足。
    

|Timing Details (report_timing)
From Clock: clk_a To Clock: clk_a

Setup :            0  Failing Endpoints,  Worst Slack        2.845ns,  Total Violation        0.000ns//暂无时序违例
Hold  :            0  Failing Endpoints,  Worst Slack        0.043ns,  Total Violation        0.000ns
PW    :            0  Failing Endpoints,  Worst Slack        4.650ns,  Total Violation        0.000ns

Max Delay Paths// 最大Timing_path

--------------------------------------------------------------------------------------
Slack (MET) :             2.845ns  (required time - arrival time)
Source:                 data_in
                (input port clocked by clk_a  {rise@0.000ns fall@5.000ns period=10.000ns})
Destination:            d1
                 (output port clocked by clk_a  {rise@0.000ns fall@5.000ns period=10.000ns})
  Path Group:             clk_a  
  Path Type:              Max at Slow Process Corner //最差大的工艺,最高温度,最低电压下的模型
  Requirement:            10.000ns  (clk_a rise@10.000ns - clk_a rise@0.000ns)   //要求你的时序路径在规定delay要到达的要求;目前是同一个时钟域就是clka的时钟周期,不同时钟域路径就是2个clk之间的最小时钟沿的差距。
  Data Path Delay:        3.120ns  (logic 2.653ns (85.050%)  route 0.466ns (14.950%)) //Data Path Delay主要分为logic delay + route delay,一般各占比50%左右表示最优,若建立时间违例且占比严重不均匀,则需要进行优化
  Logic Levels:           2  (IBUF=1 OBUF=1) 
  Input Delay:            2.000ns 
  Output Delay:           2.000ns
  Clock Uncertainty:      0.035ns  ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE//Uncertainty: 该值来自SDC, 通常signoff uncertainty = foundry requirest margin + PLL jitter + IR-drop modeling.    
  Total System Jitter     (TSJ):    0.071ns
  Total Input Jitter      (TIJ):    0.000ns
  Discrete Jitter          (DJ):    0.000ns
  Phase Error              (PE):    0.000ns

最大Timing_path
最大timing_path

 Location             Delay type                Incr(ns)  Path(ns)    Netlist Resource(s)  //通过该单元的延时是Incr;
-------------------------------------------------------------------    -------------------
                      (clock clk_a rise edge)      0.000     0.000 r      //r代表上升延迟;f代表下降延迟。
                      input delay                  2.000     2.000        //输入延迟        
                                                   0.000     2.000 r  data_in (IN) //芯片输入端口到芯片内部真正数据输入端之间的线延时,是2.000ns。(可以认为是管脚的延时)
                        net (fo=0)                 0.000     2.000    data_in
                        IBUF (Prop_ibuf_I_O)       0.620     2.620 r  inst_0/O
                        net (fo=2, unplaced)       0.466     3.086    d1_OBUF
                        OBUF (Prop_obuf_I_O)       2.034     5.120 r  d1_OBUF_inst/O
                         net (fo=0)                0.000     5.120    d1
                                                                   r  d1 (OUT)
-------------------------------------------------------------------    -------------------
                     (clock clk_a rise edge)      10.000    10.000 r
                     clock pessimism               0.000    10.000
                      clock uncertainty           -0.035     9.965 
                      output delay                -2.000     7.965
-------------------------------------------------------------------
                      required time                          7.965  //required time 在此时间内达到时序要求的时间
                      arrival time                          -5.120  //arrival time 是实际到达的时间
-------------------------------------------------------------------
                      slack                                  2.845  //arrival time - required time

路径分析

Min Delay Paths// 最小Timing_path

--------------------------------------------------------------------------------------

Slack (MET) :             0.043ns  (arrival time - required time)
  Source:                 data_in
               (input port clocked by clk_a  {rise@0.000ns fall@5.000ns period=10.000ns})
Destination:            inst_8/D  
(rising edge-triggered cell FDRE clocked by clk_a  {rise@0.000ns fall@5.000ns period=10.000ns})
Path Group:             clk_a
Path Type:              Hold (Min at Slow Process Corner)//对于hold check来说,它会检测最短最快的组合逻辑路径和最晚的arrival time。
Requirement:            0.000ns  (clk_a rise@0.000ns - clk_a rise@0.000ns)
Data Path Delay:        0.957ns  (logic 0.513ns (53.678%)  route 0.443ns (46.322%))
Logic Levels:           1  (IBUF=1)
Input Delay:            1.000ns
Clock Path Skew:        1.763ns (DCD - SCD - CPR)
Destination Clock Delay (DCD):    1.763ns
Source Clock Delay      (SCD):    0.000ns
Clock Pessimism Removal (CPR):    -0.000ns
Clock Uncertainty:      0.035ns  ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE
Total System Jitter     (TSJ):    0.071ns
Total Input Jitter      (TIJ):    0.000ns
Discrete Jitter          (DJ):    0.000ns
Phase Error              (PE):    0.000ns

Location Delay type Incr(ns) Path(ns) Netlist Resource(s)


                  (clock clk_a rise edge)      0.000     0.000 r 
                  input delay                  1.000     1.000
                                               0.000     1.000 r  data_in (IN)
                  net (fo=0)                   0.000     1.000    data_in
                  IBUF (Prop_ibuf_I_O)         0.513     1.513 r  inst_0/O
                  net (fo=2, unplaced)         0.443     1.957    d1_OBUF
                  FDRE                                         r  inst_8/D

                  (clock clk_a rise edge)      0.000     0.000 r 
                                               0.000     0.000 r  clk_a (IN)
                  net (fo=0)                   0.000     0.000    clk_a
                  IBUF (Prop_ibuf_I_O)         0.620     0.620 r  inst_2/O
                  net (fo=1, unplaced)         0.466     1.086    wire_0
                  BUFG (Prop_bufg_I_O)         0.093     1.179 r  inst_3/O
                  net (fo=1, unplaced)         0.584     1.763    wire_6
                  FDRE                                         r  inst_8/C
                  clock pessimism              0.000     1.763
                  clock uncertainty            0.035     1.799
                  FDRE (Hold_fdre_C_D)         0.115     1.914    inst_8

                   required time                         -1.914//同一寄存器inst_8完成从D到Q的数据传输后的-1.914s
                   arrival time                           1.957//同一寄存器inst_8完成从D到Q的数据传输后的1.957

                   slack                                  0.043

要求时间和到达时间分析与标注

这里required time 是负的指的是inst_8寄存器开始从D 到Q开始启动的(launch event)之前就要从clka端口开始走,因此是在启动之前,所以用负号。对于slack=实际时间arrival time-要求时间required time的数值对应数值是第21行和第8行的数值进行计算。

Pulse Width Checks//脉冲宽度检查:默认情况下,这些时钟未被选中,因为它们仅用于报告目的,不影响实现工具的结果质量。

--------------------------------------------------------------------------------------
Clock Name:         clk_a
Waveform(ns):       { 0.000 5.000 }
Period(ns):         10.000
Sources:            { clk_a }
Check Type        Corner  Lib Pin  Reference Pin  Required(ns)  Actual(ns)  Slack(ns)  Location  Pin
Min Period        n/a     BUFG/I   n/a            1.408         10.000      8.591                inst_3/I
Low Pulse Width   Slow    FDRE/C   n/a            0.350         5.000       4.650                inst_8/C
High Pulse Width  Slow    FDRE/C   n/a            0.350         5.000       4.650                inst_8/C

From Clock: clk_b To Clock: clk_b

Setup :            0  Failing Endpoints,  Worst Slack       12.395ns,  Total Violation        0.000ns//暂无时序违例
Hold  :            0  Failing Endpoints,  Worst Slack        0.066ns,  Total Violation        0.000ns
PW    :            0  Failing Endpoints,  Worst Slack        9.650ns,  Total Violation        0.000ns

(1)Max Delay Paths //最大Timing_path


--------------------------------------------------------------------------------------
Slack (MET) :             12.395ns  (required time - arrival time)
Source:                 inst_10/C
    (rising edge-triggered cell FDRE clocked by clk_b  {rise@5.000ns fall@15.000ns period=20.000ns})
Destination:            data_out
    (output port clocked by clk_b  {rise@5.000ns fall@15.000ns period=20.000ns})
 Path Group:             clk_b
 Path Type:              Max at Slow Process Corner
 Requirement:            20.000ns  (clk_b rise@25.000ns - clk_b rise@5.000ns)
 Data Path Delay:        2.806ns  (logic 2.340ns (83.378%)  route 0.466ns (16.622%))
 Logic Levels:           1  (OBUF=1)
 Output Delay:           3.000ns
 Clock Path Skew:        -1.763ns (DCD - SCD + CPR)
 Destination Clock Delay (DCD):    0.000ns = ( 25.000 - 25.000 )
 Source Clock Delay      (SCD):    1.763ns = ( 6.763 - 5.000 )
 Clock Pessimism Removal (CPR):    0.000ns
 Clock Uncertainty:      0.035ns  ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE
 Total System Jitter     (TSJ):    0.071ns
 Total Input Jitter      (TIJ):    0.000ns
 Discrete Jitter          (DJ):    0.000ns
 Phase Error              (PE):    0.000ns
 
 Location             Delay type                Incr(ns)  Path(ns)    Netlist Resource(s)
 -------------------------------------------------------------------    -------------------
                     (clock clk_b rise edge)      5.000     5.000 r
                                                  0.000     5.000 r  clk_b (IN)
                     net (fo=0)                   0.000     5.000    clk_b
                     IBUF (Prop_ibuf_I_O)         0.620     5.620 r  inst_4/O
                     net (fo=1, unplaced)         0.466     6.086    wire_1 
                     BUFG (Prop_bufg_I_O)         0.093     6.179 r  inst_5/O
                     net (fo=2, unplaced)         0.584     6.763    wire_7 
                     FDRE                                         r  inst_10/C 
-------------------------------------------------------------------    -------------------
                     FDRE (Prop_fdre_C_Q)         0.223     6.986 r  inst_10/Q
                     net (fo=2, unplaced)         0.466     7.453    q3_OBUF
                     OBUF (Prop_obuf_I_O)         2.117     9.569 r  inst_1/O
                     net (fo=0)                   0.000     9.569    data_out
                                                                  r  data_out (OUT)
-------------------------------------------------------------------    -------------------
                     (clock clk_b rise edge)     25.000    25.000 r 
                     clock pessimism              0.000    25.000 
                     clock uncertainty           -0.035    24.965
                     output delay                -3.000    21.965
       -------------------------------------------------------------------
                     required time                         21.965
                     arrival time                          -9.569     
       ------------------------------------------------------------------- 
                     slack                                 12.395     

(2)Min Delay Paths// 最小Timing_path

--------------------------------------------------------------------------------------
Slack (MET) :             0.066ns  (arrival time - required time)
Source:                 inst_9/C
 (rising edge-triggered cell FDRE clocked by clk_b  {rise@5.000ns fall@15.000ns period=20.000ns})
Destination:            inst_10/D
(rising edge-triggered cell FDRE clocked by clk_b  {rise@5.000ns fall@15.000ns period=20.000ns})
Path Group:             clk_b
Path Type:              Hold (Min at Fast Process Corner)
Requirement:            0.000ns  (clk_b rise@5.000ns - clk_b rise@5.000ns)
Data Path Delay:        0.194ns  (logic 0.100ns (51.619%)  route 0.094ns (48.381%))
Logic Levels:           0  Clock Path Skew:        0.145ns (DCD - SCD - CPR)
Destination Clock Delay (DCD):    0.825ns = ( 5.825 - 5.000 )
Source Clock Delay      (SCD):    0.498ns = ( 5.498 - 5.000 )
Clock Pessimism Removal (CPR):    0.182ns

Location Delay type Incr(ns) Path(ns) Netlist Resource(s)


                      (clock clk_b rise edge)      5.000     5.000 r                                     
                                                   0.000     5.000 r  clk_b (IN)
                      net (fo=0)                   0.000     5.000    clk_b
                      IBUF (Prop_ibuf_I_O)         0.126     5.126 r  inst_4/O
                      net (fo=1, unplaced)         0.231     5.358    wire_1
                      BUFG (Prop_bufg_I_O)         0.026     5.384 r  inst_5/O
                      net (fo=2, unplaced)         0.114     5.498    wire_7
                      FDRE                                         r  inst_9/C

                      FDRE (Prop_fdre_C_Q)         0.100     5.598 r  inst_9/Q
                      net (fo=1, unplaced)         0.094     5.692    wire_4
                      FDRE                                         r  inst_10/D

                      (clock clk_b rise edge)      5.000     5.000 r
                                                   0.000     5.000 r  clk_b (IN)
                      net (fo=0)                   0.000     5.000    clk_b
                      IBUF (Prop_ibuf_I_O)         0.293     5.293 r  inst_4/O
                      net (fo=1, unplaced)         0.243     5.536    wire_1
                      BUFG (Prop_bufg_I_O)         0.030     5.566 r  inst_5/O
                      net (fo=2, unplaced)         0.259     5.825    wire_7
                      FDRE                                         r  inst_10/C
                      clock pessimism             -0.182     5.643                   
                      FDRE (Hold_fdre_C_D)        -0.017     5.626    inst_10
    -------------------------------------------------------------------
                      required time                         -5.626      
                      arrival time                           5.692
    -------------------------------------------------------------------
                      slack                                  0.066    

Pulse Width Checks 检查时钟波形的占空比

Clock Name:         clk_b
Waveform(ns):       { 5.000 15.000 }
Period(ns):         20.000
Sources:            { clk_b }

Check Type        Corner  Lib Pin  Reference Pin  Required(ns)  Actual(ns)  Slack(ns)  Location  Pin
Min Period           n/a   BUFG/I      n/a            1.408            20.000      18.591       inst_5/I
Low Pulse Width     Slow  FDRE/C       n/a             0.350           10.000       9.650        inst_10/C
High Pulse Width    Slow  FDRE/C       n/a             0.350           10.000       9.650        inst_10/C

3.report_timing命令
report_timing 是更具体的时序报告命令,经常用来报告某一条或是某些共享特定节点的路径。用户可以在
设计的任何阶段使用 report_timing,甚至是一边设置 XDC,一边用其来验证约束的可行性与优先级。
在进行 Setup Check 时会加上一定的 clock pessimism,而 Hold Check 时则会减去一定的 clock pessimism。
report_timing示例

report_timing
INFO: [Timing 38-91] UpdateTimingParams: Speed grade: -2, Delay Type: max.
INFO: [Timing 38-191] Multithreading enabled for timing update using a maximum of 32 CPUs
INFO: [Timing 38-78] ReportTimingParams: -max_paths 1 -nworst 1 -delay_type max -sort_by slack.
Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
------------------------------------------------------------------------------------
| Tool Version : Vivado v.2022.1 (lin64) Build 3526262 Mon Apr 18 15:47:01 MDT 2022
| Date         : Fri May 24 18:39:15 2024//注意看清日期避免低级错误
| Host         : deep-PowerEdge-R730xd running 64-bit Ubuntu 20.04.6 LTS
| Command      : report_timing
| Design       : single_bit_syn
| Device       : 7vx485t-ffg1157
| Speed File   : -2  PRODUCTION 1.12 2014-09-11
------------------------------------------------------------------------------------

Timing Report
 --------------------------------------------------------------------------------------------------------------
Slack (MET) :             2.845ns  (required time - arrival time)
  Source:                 data_in
                            (input port clocked by clk_a  {rise@0.000ns fall@5.000ns period=10.000ns})
  Destination:            d1
                            (output port clocked by clk_a  {rise@0.000ns fall@5.000ns period=10.000ns})
  Path Group:             clk_a//这里我们做CDC的隔离了,一个clk一个group;大多数工具默认会为每一个clock 定义一个path group,用户可以根据需求自定义path group, 如无用户自定义的path group 某条path 会被归为该path endpoint 驱动时钟对应的group.
  Path Type:              Max at Slow Process Corner //Max=max delay analysis 最大延迟分析;=setup
  Requirement:            10.000ns  (clk_a rise@10.000ns - clk_a rise@0.000ns)
  Data Path Delay:        3.120ns  (logic 2.653ns (85.050%)  route 0.466ns (14.950%))//Data Path Delay主要分为logic delay + route delay,一般各占比50%左右表示最优,若建立时间违例且占比严重不均匀,则需要进行优化。
  Logic Levels:           2  (IBUF=1 OBUF=1)//逻辑级数大或者扇出导致的;使用流水线,在过于冗长的组合逻辑增加寄存器进行打拍子。
  Input Delay:            2.000ns
  Output Delay:           2.000ns
  Clock Uncertainty:      0.035ns  ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE
    Total System Jitter     (TSJ):    0.071ns
    Total Input Jitter      (TIJ):    0.000ns
    Discrete Jitter          (DJ):    0.000ns
    Phase Error              (PE):    0.000ns

    Location             Delay type                Incr(ns)  Path(ns)    Netlist Resource(s)
  -------------------------------------------------------------------    -------------------
                         (clock clk_a rise edge)      0.000     0.000 r  
                         input delay                  2.000     2.000    
                                                      0.000     2.000 r  data_in (IN)
                         net (fo=0)                   0.000     2.000    data_in
                         IBUF (Prop_ibuf_I_O)         0.620     2.620 r  inst_0/O
                         net (fo=2, unplaced)         0.466     3.086    d1_OBUF
                         OBUF (Prop_obuf_I_O)         2.034     5.120 r  d1_OBUF_inst/O
                         net (fo=0)                   0.000     5.120    d1
                                                                      r  d1 (OUT)
  -------------------------------------------------------------------    -------------------

                         (clock clk_a rise edge)     10.000    10.000 r  
                         clock pessimism              0.000    10.000    //在进行 Setup Check 时会加上一定的 clock pessimism,而 Hold Check 时则会减去一定的 clock pessimism。
                         clock uncertainty           -0.035     9.965   //该值来自SDC, 通常signoff uncertainty = foundry requirest margin + PLL jitter + IR-drop modeling. 
                         output delay                -2.000     7.965    
  -------------------------------------------------------------------
                         required time                          7.965    
                         arrival time                          -5.120    
  -------------------------------------------------------------------
                         slack                                  2.845   //首先,确认所有路径的时序裕量(slack)都为正,确保没有时序违例。

4.get_timing_paths
Vivado 中还提供一个 get_timing_paths 的命令,可以根据指定的条件找到一些特定的路径。我们可以利用其返回值中的一些属性来快速定位设计中的问题。
例如逻辑级数(Logic Levels)这个影响 FPGA 性能的一大因素,因为经常隐藏在时序报告后很难被发现。在 Vivado 中,除了 借助综合后的报告来找到那些可能因为逻辑级数较高而导致的时序难满足的路径外,还有一个更直接的办法,可 以一次性报告出设计中那些高逻辑级数的路径,方便我们有针对性的深入分析和优化。
report_property -all [get_timing_paths ]示例

Property                     Type    Read-only  Value
ARRIVAL_TIME                 double  true       6.739
CLASS                        string  true       timing_path
CLOCK_PESSIMISM              double  true       0.000
CORNER                       string  true       Slow
DATAPATH_DELAY               double  true       4.739
DATAPATH_LOGIC_DELAY         double  true       2.615
DATAPATH_NET_DELAY           double  true       2.124
DELAY_TYPE                   string  true       max
ENDPOINT_CLOCK               clock   true       clk_a
ENDPOINT_CLOCK_DELAY         double  true       0.000
ENDPOINT_CLOCK_EDGE          double  true       10.000
ENDPOINT_CLOCK_ROOT          string  true
ENDPOINT_PIN                 port    true       d1
EXCEPTION                    string  true       
EXCEPTION_ID                 int*    true       
GROUP                        string  true       clk_a
INPUT_DELAY                  double  true       2.000
INTER_SLR_COMPENSATION       double  true  
LOGIC_LEVELS                 int     true       2 
MAX_FANOUT                   int     true       2
NAME                         string  true       {data_in --> d1}
OUTPUT_DELAY                 double  true       2.000
REQUIRED_TIME                double  true       7.965
REQUIREMENT                  double  true       10.000
ROUTABLE_NETS                int     true       unset***
SKEW                         double  true
SLACK                        double  true       1.225
STARTPOINT_CLOCK             clock   true       clk_a
STARTPOINT_CLOCK_DELAY       double  true       0.000
STARTPOINT_CLOCK_EDGE        double  true       0.000
STARTPOINT_CLOCK_ROOT        string  true  
STARTPOINT_PIN               port    true       data_in
TIME_BORROWED_FROM_ENDPOINT  double  true       
TIME_GIVEN_TO_STARTPOINT     double  true       
UNCERTAINTY                  double  true       0.035
USER_UNCERTAINTY             double  true     

我们现在可以看一下不同颜色标记出来的地方就是我们可以关注去优化的点。

  • 13
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你的信号里没有噪声

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

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

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

打赏作者

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

抵扣说明:

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

余额充值