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

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

2.6.1.4. Set Clock Groups (set_clock_groups)

Set Clock Groups (set_clock_groups)约束使您能够指定设计中的哪些时钟是不相关的。默认情况下,Timing Analyzer假设所有具有公共基本(common base)或父时钟(parent clock)的时钟都相关,并且这些时钟域之间的所有传输都适用于时序分析。您可以通过切割时钟组(cutting clock groups)来排除时序分析中特定时钟域之间的传输。

相反,没有公共父时钟或基本时钟的时钟总是不相关的,但是时序分析包括这些时钟之间的传输,除非这些时钟在不同的时钟组中(或者如果它们的所有路径都被假路径约束切断)。

您要定义包含在每个Group (-group)中的时钟信号,然后指定不同组之间的关系, 并指定这些组是Logically exclusive (-logically_exclusive),Physically exclusive (-physically_exclusive或者Asynchronous ( -asynchronous)。

set_clock_groups -asynchronous -group {<clock1>...<clockn>} ... \
    -group {<clocka>...<clockn>}
  • -logically_exclusive—定义在逻辑上独占(exclusive)并且同时又无效(not active)的时钟,例如多路复用时钟。
  • -physically_exclusive—定义那些不能同时在物理上位于器件上的时钟。
  • -asynchronous—定义完全不相关的时钟,这些时钟有不同的理想时钟源。此标志表示两个时钟都在切换,但不是以同步传递数据的方式进行切换。

例如,如果在8ns时钟与10ns时钟之间存在路径,那么即使时钟完全异步,Timing Analyzer也会尝试在这些时钟之间满足2ns设置关系,除非您指定它们是不相关的。

下面显示了一个具有两个输入,多速率时钟以及逻辑和物理排他性的相应组合的时钟多路复用器的示例约束:

# First profile
create_clock -name clk_a1 -period 10 [get_ports clk_a]
create_clock -name clk_b1 -period 20 [get_ports clk_b]

# Second profile
create_clock -name clk_a2 -period 100 [get_ports clk_a] -add
create_clock -name clk_b2 -period 200 [get_ports clk_b] -add

# Mark base clocks as asynchronous to each other
set_clock_groups -asynchronous -group {clk_a?} -group {clk_b?}

# Define muxed clocks for each profile
set muxout [get_pins -compatibility_mode {mux*|combout}]
foreach profile {1 2} {
     set mux_clk_a "mux_clk_a${profile}"
     set mux_clk_b "mux_clk_b${profile}"
     
     create_generated_clock -name $mux_clk_a -source [get_ports clk_a] \
          -master_clock "clk_a${profile}" $muxout -add
     create_generated_clock -name $mux_clk_b -source [get_ports clk_b] \
          -master_clock "clk_b${profile}" $muxout -add
     
     # Mark each muxed clock as logically exclusive to each other
     set_clock_groups -logically_exclusive -group $mux_clk_a \
          -group $mux_clk_b
}

# Mark profile clocks as physically exclusive to each other
# (Do this after defining the derived clocks so they get cut too)
set_clock_groups -physically_exclusive -group {*clk_?1} \
     -group {*clk_?2}
图 92. 示例约束设计拓扑结构

尽管Set Clock Groups对话框只允许两个时钟组,但您也可以在.sdc文件中指定任意数量的-group {<group of clocks>}选项。如果从assignment中省略了不相关的时钟,那么Timing Analyzer会保守地执行操作,并根据与该时钟连接的所有其他域的关系对该时钟进行分析。

Timing Analyzer当前没有明确地对串扰进行分析。相反,时序模型使用额外的保护频带来解决任何潜在的串扰引起的延迟。对于与串扰相关的分析,Timing Analyzer对待-asynchronous-exclusive选项相同,但是对于诸如最大偏斜报告和同步器检测之类的操作,对待异步和排斥时钟组则有所不同。

在单一assignment中,一个时钟不能在多个组(-group)内;但是可以有多个set_clock_groups assignments。

另一种缩短时钟之间时序的方法是使用set_false_path。要缩短sys_clkdsp_clk之间的时序,可以使用:

set_false_path -from [get_clocks sys_clk] -to [get_clocks dsp_clk]
set_false_path -from [get_clocks dsp_clk] -to [sys_clk]

如果只有几个时钟,那么这种技术是有效的,但是在大量约束下可能变得无法管理。在包含三个具有多输出的PLL的简单设计中,set_clock_groups命令可以在十行内切断时钟之间的时序,而set_false_path命令可能需要50行以上。