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

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

2.6.5.5.3. set_clock_groups约束技巧

当您使用derive_pll_clocks创建时钟时,确定要包含在set_clock_groups约束中的所有时钟名称可能非常耗时。然而,即便您不知道所有的时钟名称,也可以使用以下技巧在某种程度上自动创建时钟约束。

  1. 创建一个包含建议的初始SDC约束的基本.sdc文件,除非现在省略set_clock_groups约束。
  2. .sdc添加到工程中,点击Assignments > Settings > Timing Analyzer。在SDC files to include in the project下指定.sdc文件。
  3. 若要打开Timing Analyzer,请点击Tools > Timing Analyzer
  4. Task窗格中,双击Report Clocks。Timing Analyzer读取您的.sdc,应用约束(包含derive_pll_clocks)和报告所有时钟。
  5. 从Clocks Summary报告中,复制第一列中的所有时钟名称。此报告以正确的格式列出时钟名称 ,以便在Timing Analyzer中进行识别。
  6. 打开.sdc文件,将时钟名称粘贴到文件中,每行一个时钟名称。
  7. 通过将时钟名称剪切并粘贴到相应组中,将时钟名称列表格式化为set_clock_groups命令。接下来,将以下模板粘贴到.sdc文件中:
    set_clock_groups -asynchronous -group { \  
    } \
     -group { \ 
    } \  
    -group  { \
    } \ 
    -group { \
    } 
  8. 将时钟名称剪切并粘贴到组中以定义它们的关系,根据需要添加或删除组。对组进行格式化以使代码可读。
    注: 此命令在一行中很难读取。您可以使用Tcl行继续字符“\”来使其更具可读性。在最后一个字符后面放置一个空格,然后将“\”字符放在该行的末尾。请注意不要在转义字符后包含任何空格,否则空格将成为转义字符,而不是行尾字符。
    set_clock_groups -asynchronous \  
        -group {adc_clk \ 
           the_adc_pll|altpll_component_autogenerated|pll|clk[0] \
           the_adc_pll|altpll_component_autogenerated|pll|clk[1] \
           the_adc_pll|altpll_component_autogenerated|pll|clk[2] \
        } \
        -group {sys_clk \ 
           the_system_pll|altpll_component_autogenerated|pll|clk[0] \
           the_system_pll|altpll_component_autogenerated|pll|clk[1] \
        } \  
        -group {the_system_pll|altpll_component_autogenerated|pll|clk[2] \
        }
注: 最后一组有一个PLL输出 system_pll|..|clk[2],而输入时钟和其他PLL输出位于不同的组中。如果使用PLL,并且输入时钟频率与PLL输出的频率无关,那么必须异步地处理PLL。通常情况下,一个PLL的输出都是相关的,并在同一组中,但这不是必需的。

对于包含复杂时钟的设计,创建时钟组可能是一个迭代过程。例如,包含两个DDR3内核和高速收发器的设计可以有三十个或更多的时钟。在这种情况下,首先添加手动创建的时钟。由于Timing Analyzer假定命令中没有出现的时钟与每个时钟有关,因此保守地将已知时钟分组。如果设计中无关的时钟域之间仍有故障路径,那么可以根据需要开始添加新的时钟域。在这种情况下,set_clock_groups命令中没有大量的时钟,因为它们要么在.sdc文件中被剪切用于IP(例如DDR3内核生成的.sdc文件),要么只连接到相关时钟域。

对于很多设计而言,这些全部就是限制IP所必需的。