使用set_clock_groups命令指明相互排斥或者异步的时钟。Example 6–12 展示了set_clock_groups命令及选项。
Example 6–12. set_clock_groups Command set_clock_groups
[-asynchronous | -exclusive] -group
Table 6–10 describes the options for the set_clock_groups command.
选项 -asynchronous 描述 异步时钟——两个时钟没有相位关系并且不在同一时刻激活 -exclusive 专有时钟——两个时钟中仅有一个在特定时间激活。2选1时钟就是专有时钟的一个实例 -group
Example 6–13展示了set_clock_groups命令和等价命令set_false_path的用法。 Example 6–13. set_clock_groups Example
# Clocks A and C are never active when clocks B and D are active set_clock_groups -exclusive -group {A C} -group {B D} # Equivalent specification using false paths
set_false_path -from [get_clocks A] -to [get_clocks B] set_false_path -from [get_clocks A] -to [get_clocks D] set_false_path -from [get_clocks C] -to [get_clocks B] set_false_path -from [get_clocks C] -to [get_clocks D] set_false_path -from [get_clocks B] -to [get_clocks A] set_false_path -from [get_clocks B] -to [get_clocks C] set_false_path -from [get_clocks D] -to [get_clocks A]
指定相互独有的时钟名。
Quartus II Handbook, Volume 3 6-39 影响时钟特性 Clock Effect Characteristics
create_clock和create_generated_clock命令产生不涉及板级影响的理想时钟。这个章节描述如何计算影响时钟特性的时钟延时(clock latency)和时钟不确定时间(clock uncertainty)。
时钟延时
Clock Latency
时钟延时(clock latency)由两部分组成:源(source)和网络(network)。源延时(Source latency),是指从源时钟到目的时钟端的传播延时(例如,一个时钟端口),而网络延时(network latency)是指从一个定义点时钟到一个寄存器时钟端口的传播延时。寄存器时钟节点总的延时是时钟路径上源和网络延时之和。
set_clock_latency命令仅仅支持源延时。当使用该命令时,-source选项需指定。 使用set_clock_latency命令指定设计中的任意时钟端口的源延时Example 6–14展示了set_clock_latency命令选项。
Example 6–14. set_clock_latency Command set_clock_latency -source
[-clock
Quartus II TimeQuest Timing Analyzer自动计算网络延时;因此,set_clock_latency命令仅仅指定源延时。
时钟不确定时间 Clock Uncertainty
set_clock_uncertainty命令为时钟或者时钟到时钟传输指定了时钟不确定时间或时钟偏斜。可以为个别的建立和保持时间指定不确定时间,也可以为个别时钟传输指定上升沿或下降沿。Quartus II TimeQuest Timing Analyzer为每个合适路径数据需要时间(data required time)里扣除建立不确定时间,为每个合适路径的数据需要时间加上保持不确定时间。
使用set_clock_uncertainty命令指定时钟管脚的任意时钟不确定时间。Example 6–15展示了set_clock_uncertainty命令及选项。
Example 6–15. set_clock_uncertainty Command and Options set_clock_uncertainty
[-rise_from
[-rise_to
Quartus II Handbook, Volume 3 6-41 获得时钟不确定时间
Derive Clock Uncertainty
使用derive_clock_uncertainty命令应用于交互时钟(inter-clock)、内部时钟(intra-clock)和I/O接口的不确定时间的自动检测。建立和保持不确定时间都适合于时钟到时钟的传输。Example 6–16展示了derive_clock_uncertainty命令选项。
Example 6–16. derive_clock_uncertainty Command derive_clock_uncertainty [-overwrite] [-dtw]
Quartus II TimeQuest Timing Analyzer自动的添加设计中时钟到时钟传输的时钟不确定时间。随着set_clock_uncertainty命令已被应用于源和目的时钟对中的任何时钟不确定时间约束,比起由derive_clock_uncertainty命令约束的时钟不确定
时间具有更高的优先权。例如,如果set_clock_uncertainty命令先指定了源时钟CLKA和目的时钟CLKB之间的时钟网络延时。那么derive_clock_uncertainty命令次之,由derive_clock_uncertainty命令计算出的由源时钟CLKA到目的时钟CLKB的不确定时间将被忽略。
你可以使用-overwrite命令覆盖原先的时钟不确定时间分配,后者手动添加remove_clock_uncertainty命令进行移除。
在以下的时钟到时钟传输类型中,时钟必然能够出现,它们被derive_clock_uncertainty命令自动归类。
■ Inter-clock ■ Intra-clock ■ I/O Interface
交互时钟传输 Inter-Clock Transfers
交互时钟传输(Inter-clock transfers)发生在FPGA核和来自内部PLL输出节点或管脚的源与目的时钟的寄存器到寄存器传输。Figure 6–22展示了一个交互时钟传输的例子。
内部时钟传输 Intra-Clock Transfers
内部时钟传输(Intra-clock transfers)发生在FPGA核和来自内部PLL输出节点或管脚的源与目的时钟的寄存器到寄存器传输。Figure 6–22展示了一个内部时钟传输的例子。
I/O接口时钟传输
I/O Interface Clock Transfers
I/O接口时钟传输发生在数据从I/O端口到FPGA核(input)或者从FPGA核到I/O端口(output)时的时钟传输。Figure 6–24展示了一个I/O端口时钟传输的例子。
约束I/O总线不确定时间,你必须生成一个虚拟时钟来约束输入和输出管脚(使用以虚拟时钟作为参考的set_input_delay和set_output_delay命令)。当set_input_delay或者set_output_delay命令以PLL输出作为参考时钟管脚时,虚拟时钟需阻止derive_clock_uncertainty命令应用于交互或者内部时钟传输在I/O总线时钟传输的确定时钟。
产生的虚拟时钟应该和驱动I/O端口的源时钟具有相同的属性。例如,Figure 6–25展示了一个典型的具有时钟说明的输入I/O接口。
Example 6–17展示了用SDC命令来约束Figure 6–25中的I/O接口。 Example 6–17. SDC Commands to Constrain the I/O Interface # Create the base clock for the clock port
create_clock –period 10 –name clk_in [get_ports clk_in]
# Create a virtual clock with the same properties of the base clock driving # the source register
create_clock –period 10 –name virt_clk_in
# Create the input delay referencing the virtual clock and not the base # clock
# DO NOT use set_input_delay –clock clk_in
set_input_delay –clock virt_clk_in

