Intel® Quartus® Prime Pro Edition用户指南: Timing Analyzer

ID 683243
日期 10/02/2023
Public
文档目录

2.6.5.7. 约束CDC路径

在您的设计中,对多比特时钟域交叉(CDC)路径应用时序约束是至关重要的。您可以使用以下约束对CDC路径进行约束:

注意: As of 从 Intel® Quartus® Prime Pro Edition软件版本21.3开始,set_false_path约束不覆盖set_max_skew约束。您现在可以在同一路径上(没有覆盖)应用set_false_pathset_max_skew
表 28.  CDC路径约束
约束 说明

set_false_path

set_clock_groups -asynchronous

这两个约束防止Compiler优化异步域交叉之间的时序裕量(slack)。set_clock_groups是最积极的约束(most aggressive constraint)。

  • 基于时钟的伪路径是不太积极的(less aggressive),因为这些约束只是在指定的from_clockto_clock顺序上截断时序。
  • 基于时钟的伪路径不同于在两个方向上都截断路径的时钟组。
  • 基于路径的伪路径是最具体的约束,因此它们仅截断指定的fromto节点。
set_max_skew 设置不同总线比特之间允许的偏斜上限。
  • 通过运行Report Max Skew Summary命令来检查您的时钟域交叉的时序。
  • 实际的偏斜要求取决于您的设计特性以及您如何处理时钟域交叉。

set_net_delay -max

set_data_delay

设置总线传输的任何比特上允许的数据路径延迟上限。

  • set_net_delay用于约束单个的时钟边沿和网络。请运行Report Net Delay Summary命令来报告此约束的数据。
  • set_data_delay用于约束整个路径。请运行Report Data Delay命令来报告此约束的数据。

以下命令显示在clk_a时钟域中的data_aclk_b时钟域中的data_b之间的时钟域交叉的约束示例:

create_clock -name clk_a -period 4.000 [get_ports {clk_a}]
create_clock -name clk_b -period 4.500 [get_ports {clk_b}]
set_clock_groups -asynchronous -group [get_clocks {clk_a}] -group \
     [get_clocks {clk_b}]
set_net_delay -from [get_registers {data_a[*]}] -to [get_registers \
     {data_b[*]}] -max -get_value_from_clock_period \
     dst_clock_period -value_multiplier 0.8
set_max_skew -from [get_keepers {data_a[*]}] -to [get_keepers \
     {data_b[*]}] -get_skew_value_from_clock_period min_clock_period \
     -skew_value_multiplier 0.8

下面示例显示了将set_false_path应用到一个包含DCFIFO模块的设计,以避免同步寄存器中的时序失败。这些示例用于约束单比特同步器CDC路径:

  • 对于从写入域到读取域的交叉路径,在delayed_wrptr_grs_dgwp寄存器之间应用一个false path assignment:
    set_false_path -from [get_registers {*dcfifo*delayed_wrptr_g[*]}] \
    -to [get_registers {*dcfifo*rs_dgwp*}]
  • 对于从读取域到写入域的交叉路径,在rdptr_gws_dgrp寄存器之间应用一个false path assignment:
    set_false_path -from [get_registers {*dcfifo*rdptr_g[*]}] \
    -to [get_registers {*dcfifo*ws_dgrp*}]