01signal.com

时序 exceptions(Timing exceptions)

本页属于有关时序(timing)的一系列页面。前面的页面解释了时序计算背后的理论,讨论了时钟周期约束(clock period constraint),展示了时序收敛(timing closure)的原理,并介绍了几个重要的 Tcl 命令。本页解释了如何为特定的路径(paths)定义时序约束(timing constraints)。

介绍

编写时序约束的目标是它们应该简短、简洁且易于理解。这减少了混淆和错误的风险。如果可能, FPGA内部路径的时序约束应该只包含两种类型: 时钟周期约束(例如 create_clock)和 clock group 约束(例如set_clock_groups )。

但通常,特定的路径需要特定的规则。这些特定规则称为 Timing Exceptions。顾名思义,这些时序约束主要用于覆盖现有的时序约束。它们还可以用于指定路径的时序要求,否则路径将没有任何此类要求。

SDC 语法中用于这些目的的命令主要有这些:

使用不同语法的工具可能具有类似的命令。

这些命令的 arguments 定义(除其他外)哪条路径(paths)应受到影响。这将在下面解释。

在其他页面上讨论了两个相关主题:

False Paths

false path是工具忽略的路径,因为时序约束请求它。换句话说,这些工具故意不在 false path上强制执行任何时序要求,因为这是我们告诉他们要做的。

这不应与unconstrained paths混淆: 这些是路径,工具没有任何时序约束。就像 false paths一样,这些工具不会对这些路径强制执行任何时序要求,但原因不同: 缺乏执行不是一种选择,但工具不知道应用什么要求。

FPGA 设计中不应该有 unconstrained paths 。也就是说,我们通常希望工具忽略路径。这些路径应该凭借时序约束标记为 false path 。理由: 当我们读取时序报告(timing report)时,我们应该总是看到 unconstrained paths 的数字为零。如果这个数字不为零,我们应该寻找错误。如果我们习惯于接受 unconstrained paths的非零数字,就更容易忽略时序约束的问题。

所以声明 false paths可能有两个原因:

实际上,这两种情况都无所谓。如果路径上不需要时序要求(timing requirements),则应将其声明为 false path。

将 set_false_path 与跨时钟域(clock domain crossings)联系起来使用是一个常见的错误。稍后将更详细地讨论该主题。事实上,除了 I/O 端口之外,使用 set_false_path是正确的情况并不多。

为 set_false_path选择路径

有很多方法可以选择命令适用于哪条路径。尽管可能性范围很广,但路径的选择通常通过两 arguments来完成: -from 和 -to。例如:

set_false_path -from [get_cells source_reg] -to [get_cells dest_reg]

在此示例中, set_false_path 命令应用于路径,从 @source 寄存器开始并结束于 @dest 寄存器。

请注意, get_cells 提供 -from 和 -to ,对象(objects)代表逻辑单元(logic elements)。上一页讨论过的其他命令也可以使用: get_pins、 get_nets、 get_ports 和 get_clocks。但是,每个 FPGA 工具都有自己的规则,规定哪些内容可以与 -from 和 -to一起使用。

请注意,这些工具可能不会像人们自然期望的那样解释对对象的引用。这些工具还可能忽略部分或全部对象而不发出警告。事实上,如果 get_* 命令没有找到对象(例如由于 search pattern中的错误),则 timing exception中不会包含路径。即使这种情况也可能发生而不发出警告。

因此,使用时序报告来验证 timing exceptions 是否按预期应用非常重要。这意味着正确的路径受到影响,并且时序分析(timing analysis)实现了其准确的目的(不强制执行时序要求)。

选择路径还有一个有用的 argument : -through。顾名思义,这 argument 选择路径,经过特定的逻辑单元。

值得花时间阅读官方文档,以便了解所有功能。例如,也可以将命令的效果限制为仅对上升沿(rising clock edges)或下降沿(falling clock edges)进行分析。另一种可能性是将命令限制为仅对 tsetup 或仅对 thold进行分析。

set_false_path 命令要求 -from、 -to 或 -through 中至少有一个作为 argument (或具有类似含义的不同 argument )。当有多 argument时, timing exception 仅适用于满足所有 arguments条件的路径。

set_false_path的危险

false paths 的问题是很容易出错。特别是,存在包含比预期更多的路径的风险。出现这种情况时,有时序逻辑元件可能无法正常运行: 我们错误地期望这些工具保证满足 tsu 和 thold的要求。但实际上,这些工具的行为就像路径到这些时序逻辑元件是 false paths一样。因此,这些工具不会为它们制作任何时序分析。这是一种危险的情况,因为当工具说时序约束已实现时,它会造成一种一切都正常的假象。但实际上,触发器(flip-flops)和其他时序逻辑元件暴露在时序违反(timing violations)下而没有任何保护。

更糟糕的是,如果将路径声明为 false path,则此声明通常具有最高优先级。因此,如果路径被意外声明为 false path,这可能会否决其他要求相反的时序约束。即使 set_false_path 出现在另一个时序约束(timing constraint)之前,这通常也是如此。所以 set_false_path 被解释为“这些是 false paths,不管我之前需要什么或以后需要什么”。

set_min_delay 和 set_max_delay

我首先讨论了 false paths,它消除了一组选定的路径中的时序要求。通常,需要指定时序要求,而不是取消它们。这是通过 set_min_delay 和 set_max_delay完成的。例如,考虑这 Verilog 代码:

reg x, y;

always @(posedge clk)
  y <= x;

还有时序约束:

set_max_delay -from [get_cells x_reg] -to [get_cells y_reg] 3
set_min_delay -from [get_cells x_reg] -to [get_cells y_reg] 1

那么这些命令是什么意思呢?让我们从 set_max_delay开始。这 timing exception 的简短解释是它类似于时钟周期约束(create_clock),仅适用于特定的路径。

回想一下,当定义时钟周期约束时,工具会自动强制执行必要的时序要求: 相关路径的最大时延(delays)受到限制以满足 tsetup 要求。同样,最小的时延代表 thold受到限制。

在上面的例子中, set_max_delay 命令中出现的值是 3。这相当于 create_clock 命令等于时钟周期(clock period),等于 3 ns。但 set_max_delay的影响仅限于特定的路径组。这就是区别。

关于 set_min_delay,它有点复杂,所以在下面详细介绍。

请注意, set_max_delay 命令的名称具有误导性: 这个命令并不直接定义路径本身的最大时延。受影响的路径的时延并不像上例中那样通过命令限制 3 ns 。 3 ns 值用作时钟边沿(clock edges)之间允许的时间差。并且这个时间差不是在同步逻辑单元(synchronous elements)的时钟输入处测量的,而是在这些时钟的原点处测量的。这意味着锁相环(PLLs)、时钟缓冲器(clock buffers)和时钟布线(clock routing)的时延都包含在计算中: 与时钟周期约束类似,时序分析也考虑到了时钟时延(clock delays)。

-from、 -to、 -through 等 arguments 的含义与 set_false_path相同。但总的来说, set_min_delay 和 set_max_delay 是作为时钟周期约束的调整。据此,通常假设路径的两边都有时序逻辑元件。因此, -from 和 -to 应该代表同步逻辑单元。有很多方法可以引用这些: 代表同步逻辑单元本身的 cell 对象、时钟对象(clock object)等等。

关于 set_min_delay,还有一个类似的故事: 时钟周期约束的另一个结果是工具必须满足 thold 要求。为此,工具在相同时钟或related 时钟之间的所有路径上强制执行最小时延。如果路径的时序计算仅是 create_clock 的结果(两边具有相同的时钟),则这相当于值为零的 set_min_delay 。这反映了相同的时钟边沿到达两个时序逻辑元件(sequential elements)的想法。但是,这并不意味着这个时钟边沿(clock edge)与这些时序逻辑元件同时到达。相反,每个时序逻辑元件的时钟边沿在时钟的原点同时开始。在计算中考虑了从每个时钟的原点到时序逻辑元件的时延(类似于 tsetup的计算方式)。

set_min_delay 允许调整到达第二个时序逻辑元件的时钟边沿的时间。例如,上面的命令使得这个时钟边沿比第二个触发器(flip-flop)的 1 ns 晚到达。这使得 thold 的时序要求更难满足: 请参阅下面的时序报告示例。

使用 set_min_delay 和 set_max_delay可能有两个原因:

当使用这两个命令时,一定要仔细检查时序报告和路径的时序分析。特别要注意时钟路径(clock path)在计算中是如何发挥作用的。

本页底部有时序报告的例子,展示了 set_min_delay 和 set_max_delay的结果。

时延控制更精准

set_max_delay 和 set_min_delay 提供的控制级别并不明显优于时钟周期约束(如目前所示)。但是如果我们不想让时钟路径时延(clock path delay)干扰我们对时延的定义呢?如果我们想控制路径的某个段的时延呢?

有些 FPGA 工具无法满足这些需求。例如, Quartus 就不提供这种可能性(据我所知)。另一方面, Vivado具有一些功能,我将简要讨论一下。

其中一项功能是 datapath_only 选项: 有时需要使用 set_max_delay ,以便时序计算不包括时钟路径。比如路径介于 unrelated clocks之间,考虑时钟路径就没有意义了。

当使用 datapath_only 时,时序的计算方式是假设两个同步逻辑单元(synchronous elements)中的时钟路径时延为零。因此,计算仅包括路径中的逻辑单元中的时延。这些时延的总和必须小于 set_max_delay 命令中给出的数字(参见下面的时序报告示例)。

因此,当 set_max_delay 与 datapath_only一起使用时,其含义更接近于 command's 名称所暗示的含义。但请注意,路径仍必须以同步逻辑单元开始和结束。

此外, datapath_only 有一些特点: 如果使用,工具将不会强制执行与相关路径的 thold 有关的任何时序要求。换句话说,工具的行为就像存在一个仅应用于 thold 场景的 false path 约束。即使为相关路径添加了 set_min_delay 命令,也会忽略此命令。目前尚不清楚为什么 Vivado 拒绝在受 datapath_only影响的路径上强制执行最小时延。

datapath_only 在任何场景下都不能作为 argument 到 set_min_delay 来使用。

误导性特征

正如本节标题所暗示的,这些是一些不太可能有任何好处的可能性。请随意跳到下一节。

Vivado 允许更高级别的控制: 可以对路径的特定段的时延实施限制。例如,如果将不是时序逻辑元件的逻辑单元与 -from 和 -to一起使用,会发生什么情况?引脚和网络(nets)怎么样? set_min_delay 和 set_max_delay 会做什么?

当然,这取决于使用哪种 FPGA 工具。工具可能会默默忽略此类约束(constraints),因为没有路径符合要求。但 Vivado 不会忽略此类约束,尽管结果并非人们自然期望的那样: Vivado 将此情况视为“path segmentation”并发出 critical warning 作为响应。在大多数情况下,不值得使用此功能带来的并发症。有关更多信息,请参阅文档。

这是另一个可能会产生误导的特征: Quartus 有一个称为 set_net_delay的命令。它允许在设计中的不同逻辑单元之间定义最小和最大时延。但是,看起来工具并没有尝试在实现(implementation)期间实现这些时序要求。相反,可以使用“report_net_delay”(或使用图形用户界面(GUI))生成报告(report)。因此,如果满足使用 set_net_delay 定义的条件,则可以从此报告推断出来。因此, set_net_delay 可用于获取信息,但它作为时序约束则无用。换句话说: set_max_delay 和 set_min_delay 与时序约束一样有效,但 set_net_delay 则不然。

总之,它并没有比使用 set_max_delay 和 set_min_delay的简单方法好多少。看起来,唯一有趣的功能是 Vivado的 datapath_only。

时序约束的优先顺序

复杂时序约束的主要问题是,通常有路径受多个约束(constraint)影响。这些约束通常与时序要求相矛盾,与这些路径相矛盾。那么哪个约束会胜出呢?

每个 FPGA 工具都有自己的规则来解决此类冲突。它通常主要取决于约束的类型。其他因素也可能发挥作用,特别是路径的选择特异性。

对于基于 SDC的时序约束,优先级取决于约束的类型。例如, Vivado 根据此优先级顺序解决冲突。命令的优先级从高到低依次为:

请注意,前两个命令(set_clock_groups 和 set_false_path)创建了 false paths,它们具有最高优先级。因此,验证路径是否受到这些命令的错误影响尤为重要。这样的错误会默默关闭相关路径上所有时序要求的执行。

当同一个命令多次用于同一条路径时,最具体的命令获胜。例如,如果一个命令有“-from”和“-to”,但第二个命令只有“-from”,则第一个命令获胜。另一个示例: 如果一个命令根据逻辑单元定义路径(例如使用 get_cells),并且第二个命令根据时钟定义路径(使用 get_clocks),则第一个命令获胜。

如果两个命令非常相似,优先级没有差异,则出现的顺序可以解决冲突: 最后的命令获胜。

Quartus 和其他基于 SDC的工具使用类似的优先规则。

但无论您使用哪种工具,最好避免时序约束之间的任何矛盾(否决 create_clock除外)。复杂的时序约束是破坏性错误滋生的地方。

使用一些 FPGA 工具,可以解决优先级规则: 通过使用 -reset_path 属性,使用此属性(attribute)的命令将覆盖其适用的所有路径上的前一 timing exceptions 。例如:

set_max_delay -reset_path -from [get_cells source_reg] 2

结论

我在本页开始时说时序约束应该简短、简洁。通过添加 timing exceptions,时序约束不仅变得更长,而且更加复杂和难以理解。所以必要时使用 timing exceptions ,但要小心编写并保持整洁。

尝试以反映其目的并表达其背后想法的方式编写 timing exception 命令。 FPGA 工具通常提供用于创建时序约束的图形用户界面 wizards (GUI wizards)。它们可以作为起点。但在仔细考虑之前,不要使用由 wizard 创建的时序约束。即使这个约束在创建时是正确的,当逻辑设计进化并添加新的逻辑时,它是否还会继续忠实地工作?

对于受 timing exception影响的路径,请始终阅读时序报告。如果一条路径不止一个时序约束,这个就更重要了。还为可能具有不正确的时序要求的路径创建特定的时序报告。

记住: 创建和阅读时序报告并不是浪费时间。无论您多么仔细地阅读文档(这总是一个好主意),总会有出错的机会。特别是, false paths 可能出现在最意想不到的地方。

奖金: 时序报告的例子

为了帮助理解 set_min_delay 和 set_max_delay,这些是用 Vivado创建的几个时序报告(timing reports)。

回想一下上面提到的这些报告背后的 Verilog 代码是:

always @(posedge clk)
  y <= x;

还有时序约束:

set_max_delay -from [get_cells x_reg] -to [get_cells y_reg] 3
set_min_delay -from [get_cells x_reg] -to [get_cells y_reg] 1

报告适用于 tsetup:

Slack (MET) :             0.360ns  (required time - arrival time)
  Source:                 x_reg/C
                            (rising edge-triggered cell FDRE clocked by clk  {rise@0.000ns fall@2.000ns period=4.000ns})
  Destination:            y_reg/D
                            (rising edge-triggered cell FDRE clocked by clk  {rise@0.000ns fall@2.000ns period=4.000ns})
  Path Group:             clk
  Path Type:              Setup (Max at Slow Process Corner)
  Requirement:            3.000ns  (MaxDelay Path 3.000ns)
  Data Path Delay:        2.617ns  (logic 0.139ns (5.311%)  route 2.478ns (94.689%))
  Logic Levels:           0
  Clock Path Skew:        -0.053ns (DCD - SCD + CPR)
    Destination Clock Delay (DCD):    2.644ns
    Source Clock Delay      (SCD):    3.224ns
    Clock Pessimism Removal (CPR):    0.527ns
  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
  Clock Net Delay (Source):      1.392ns (routing 0.002ns, distribution 1.390ns)
  Clock Net Delay (Destination): 1.216ns (routing 0.002ns, distribution 1.214ns)
  Timing Exception:       MaxDelay Path 3.000ns

    Location             Delay type                Incr(ns)  Path(ns)    Netlist Resource(s)
  -------------------------------------------------------------------    -------------------
                         (clock clk rise edge)        0.000     0.000 r
    AG12                                              0.000     0.000 r  clk (IN)
                         net (fo=0)                   0.000     0.000    clk_IBUF_inst/I
    AG12                 INBUF (Prop_INBUF_HRIO_PAD_O)
                                                      0.738     0.738 r  clk_IBUF_inst/INBUF_INST/O
                         net (fo=1, routed)           0.105     0.843    clk_IBUF_inst/OUT
    AG12                 IBUFCTRL (Prop_IBUFCTRL_HRIO_I_O)
                                                      0.049     0.892 r  clk_IBUF_inst/IBUFCTRL_INST/O
                         net (fo=1, routed)           0.839     1.731    clk_IBUF
    BUFGCE_X1Y0          BUFGCE (Prop_BUFCE_BUFGCE_I_O)
                                                      0.101     1.832 r  clk_IBUF_BUFG_inst/O
    X2Y0 (CLOCK_ROOT)    net (fo=4, routed)           1.392     3.224    clk_IBUF_BUFG
    SLICE_X49Y57         FDRE                                         r  x_reg/C
  -------------------------------------------------------------------    -------------------
    SLICE_X49Y57         FDRE (Prop_DFF_SLICEL_C_Q)
                                                      0.139     3.363 r  x_reg/Q
                         net (fo=2, routed)           2.478     5.841    x
    SLICE_X49Y57         FDRE                                         r  y_reg/D
  -------------------------------------------------------------------    -------------------

                         max delay                    3.000     3.000
    AG12                                              0.000     3.000 r  clk (IN)
                         net (fo=0)                   0.000     3.000    clk_IBUF_inst/I
    AG12                 INBUF (Prop_INBUF_HRIO_PAD_O)
                                                      0.515     3.515 r  clk_IBUF_inst/INBUF_INST/O
                         net (fo=1, routed)           0.066     3.581    clk_IBUF_inst/OUT
    AG12                 IBUFCTRL (Prop_IBUFCTRL_HRIO_I_O)
                                                      0.034     3.615 r  clk_IBUF_inst/IBUFCTRL_INST/O
                         net (fo=1, routed)           0.722     4.337    clk_IBUF
    BUFGCE_X1Y0          BUFGCE (Prop_BUFCE_BUFGCE_I_O)
                                                      0.091     4.428 r  clk_IBUF_BUFG_inst/O
    X2Y0 (CLOCK_ROOT)    net (fo=4, routed)           1.216     5.644    clk_IBUF_BUFG
    SLICE_X49Y57         FDRE                                         r  y_reg/C
                         clock pessimism              0.527     6.171
                         clock uncertainty           -0.035     6.136
    SLICE_X49Y57         FDRE (Setup_EFF2_SLICEL_C_D)
                                                      0.065     6.201    y_reg
  -------------------------------------------------------------------
                         required time                          6.201
                         arrival time                          -5.841
  -------------------------------------------------------------------
                         slack                                  0.360

请注意,时延的值 (3 ns) 用作第二个触发器的时钟路径的开始时间。换句话说,就好像 3 ns有 period 约束一样。

另请注意,数据路径(data path)中的网络有一个巨大的时延: 2.478 ns。这是 set_min_delay 命令的结果: 为了满足 thold 的要求,工具被迫在这个网络(net)上插入一个长的时延。

说到这里,这是 thold的时序报告:

Slack (MET) :             0.057ns  (arrival time - required time)
  Source:                 x_reg/C
                            (rising edge-triggered cell FDRE clocked by clk  {rise@0.000ns fall@2.000ns period=4.000ns})
  Destination:            y_reg/D
                            (rising edge-triggered cell FDRE clocked by clk  {rise@0.000ns fall@2.000ns period=4.000ns})
  Path Group:             clk
  Path Type:              Hold (Min at Fast Process Corner)
  Requirement:            1.000ns  (MinDelay Path 1.000ns)
  Data Path Delay:        1.141ns  (logic 0.049ns (4.294%)  route 1.092ns (95.706%))
  Logic Levels:           0
  Clock Path Skew:        0.029ns (DCD - SCD - CPR)
    Destination Clock Delay (DCD):    1.684ns
    Source Clock Delay      (SCD):    1.258ns
    Clock Pessimism Removal (CPR):    0.398ns
  Clock Net Delay (Source):      0.502ns (routing 0.002ns, distribution 0.500ns)
  Clock Net Delay (Destination): 0.585ns (routing 0.002ns, distribution 0.583ns)
  Timing Exception:       MinDelay Path 1.000ns

    Location             Delay type                Incr(ns)  Path(ns)    Netlist Resource(s)
  -------------------------------------------------------------------    -------------------
                         (clock clk rise edge)        0.000     0.000 r
    AG12                                              0.000     0.000 r  clk (IN)
                         net (fo=0)                   0.000     0.000    clk_IBUF_inst/I
    AG12                 INBUF (Prop_INBUF_HRIO_PAD_O)
                                                      0.339     0.339 r  clk_IBUF_inst/INBUF_INST/O
                         net (fo=1, routed)           0.025     0.364    clk_IBUF_inst/OUT
    AG12                 IBUFCTRL (Prop_IBUFCTRL_HRIO_I_O)
                                                      0.015     0.379 r  clk_IBUF_inst/IBUFCTRL_INST/O
                         net (fo=1, routed)           0.350     0.729    clk_IBUF
    BUFGCE_X1Y0          BUFGCE (Prop_BUFCE_BUFGCE_I_O)
                                                      0.027     0.756 r  clk_IBUF_BUFG_inst/O
    X2Y0 (CLOCK_ROOT)    net (fo=4, routed)           0.502     1.258    clk_IBUF_BUFG
    SLICE_X49Y57         FDRE                                         r  x_reg/C
  -------------------------------------------------------------------    -------------------
    SLICE_X49Y57         FDRE (Prop_DFF_SLICEL_C_Q)
                                                      0.049     1.307 r  x_reg/Q
                         net (fo=2, routed)           1.092     2.399    x
    SLICE_X49Y57         FDRE                                         r  y_reg/D
  -------------------------------------------------------------------    -------------------

                         min delay                    1.000     1.000
    AG12                                              0.000     1.000 r  clk (IN)
                         net (fo=0)                   0.000     1.000    clk_IBUF_inst/I
    AG12                 INBUF (Prop_INBUF_HRIO_PAD_O)
                                                      0.595     1.595 r  clk_IBUF_inst/INBUF_INST/O
                         net (fo=1, routed)           0.042     1.637    clk_IBUF_inst/OUT
    AG12                 IBUFCTRL (Prop_IBUFCTRL_HRIO_I_O)
                                                      0.022     1.659 r  clk_IBUF_inst/IBUFCTRL_INST/O
                         net (fo=1, routed)           0.409     2.068    clk_IBUF
    BUFGCE_X1Y0          BUFGCE (Prop_BUFCE_BUFGCE_I_O)
                                                      0.031     2.099 r  clk_IBUF_BUFG_inst/O
    X2Y0 (CLOCK_ROOT)    net (fo=4, routed)           0.585     2.684    clk_IBUF_BUFG
    SLICE_X49Y57         FDRE                                         r  y_reg/C
                         clock pessimism             -0.398     2.286
    SLICE_X49Y57         FDRE (Hold_EFF2_SLICEL_C_D)
                                                      0.055     2.341    y_reg
  -------------------------------------------------------------------
                         required time                         -2.341
                         arrival time                           2.399
  -------------------------------------------------------------------
                         slack                                  0.057

再次注意,时延的值(1 ns)用作第二个触发器的时钟路径的开始时间。当没有 set_min_delay 命令(即只有时钟周期约束)时,这是 0 ns。

数据路径中网络的时延为 1.092 ns。这刚好可以满足 thold 的要求。为什么之前是 2.478 ns ?因为 tsetup 的最坏情况计算是针对“Max at Slow Process Corner”完成的。因此 2.478 ns 是相关网络可能最长的时延,而 1.092 ns 是可能最短的时延(“Min at Fast Process Corner”)。有关更多信息,请参阅有关 Multi-corner 时序分析的讨论

第三个例子演示的是 datapath_only,所以约束是:

set_max_delay -datapath_only -from [get_cells x_reg] -to [get_cells y_reg] 3

没有 set_min_delay,因为无论如何它都会被忽略(即使它是在 set_max_delay 命令之后写的)。

报告现已替换为 tsetup :

Slack (MET) :             2.482ns  (required time - arrival time)
  Source:                 x_reg/C
                            (rising edge-triggered cell FDRE clocked by clk  {rise@0.000ns fall@2.000ns period=4.000ns})
  Destination:            y_reg/D
                            (rising edge-triggered cell FDRE clocked by clk  {rise@0.000ns fall@2.000ns period=4.000ns})
  Path Group:             clk
  Path Type:              Setup (Max at Slow Process Corner)
  Requirement:            3.000ns  (MaxDelay Path 3.000ns)
  Data Path Delay:        0.583ns  (logic 0.139ns (23.842%)  route 0.444ns (76.158%))
  Logic Levels:           0
  Timing Exception:       MaxDelay Path 3.000ns -datapath_only

    Location             Delay type                Incr(ns)  Path(ns)    Netlist Resource(s)
  -------------------------------------------------------------------    -------------------
    SLICE_X49Y57                                      0.000     0.000 r  x_reg/C
    SLICE_X49Y57         FDRE (Prop_DFF_SLICEL_C_Q)
                                                      0.139     0.139 r  x_reg/Q
                         net (fo=2, routed)           0.444     0.583    x
    SLICE_X49Y57         FDRE                                         r  y_reg/D
  -------------------------------------------------------------------    -------------------

                         max delay                    3.000     3.000
    SLICE_X49Y57         FDRE (Setup_EFF2_SLICEL_C_D)
                                                      0.065     3.065    y_reg
  -------------------------------------------------------------------
                         required time                          3.065
                         arrival time                          -0.583
  -------------------------------------------------------------------
                         slack                                  2.482

请注意,此时序报告的结构与之前相同,但已删除与时钟路径相关的所有内容。

网络的时延很小,因为工具没有理由插入长时延: 没有 thold 要求。

我没有显示 thold的时序报告,因为没有时序要求(最小的时延被视为 false path)。


关于 timing exceptions的一般性讨论到此结束。下一页继续介绍跨时钟域所必需的 timing exceptions 。

此页面由英文自动翻译。 如果有不清楚的地方,请参考原始页面
Copyright © 2021-2024. All rights reserved. (b4b9813f)