FPGA QuartusII 时钟约束
时钟约束(Clock Specification):
约束所有时钟(包括你的设计中特有的时钟)对准确的时序分析结果而言是
必不可少的。Quartus II TimeQuest Timing Analyzer为各种各样的时钟配置和典型时钟提供许多SDC命令。
时钟(Clocks)
使用create_clock命令为任何register, port或pin进行时钟特性描述,使其具有独一的时钟特性。例6–2展示了create_clock命令: Example 6–2. create_clock Command
create_clock
-period
Table 6–6. create_clock Command Options
选项 -period
Example 6–3 约束时钟频率100MHz,占空比50%,0ns上升沿,5ns下降沿。 Example 6–3. 100MHz Clock Creation
create_clock –period 10 –waveform { 0 5 } clk
指定时钟周期 指定时钟名称(不一定是约束时钟的节点名称) 指定时钟上升沿/下降沿 可以对一个时钟节点进行多个时钟约束 指定你要约束的时钟(目标节点) 描述 这个章节将介绍SDC可用的应用编程接口,以及描述指定的时钟特性。
Example 6–4和上例相差90度的相位。
Example 6–4. 100MHz Shifted by 90 Degrees Clock Creation
create_clock –period 10 –waveform { 2.5 7.5 } clk_sys
使用create_clock命令约束时钟缺省的source Latency值为0。Quartus II TimeQuest Timing Analyzer自动为非虚拟时钟(non-virtual clocks)计算时钟网络延时(clock’s network latency)。
Quartus II Handbook, Volume 3 6-29 生成时钟(Generated Clocks)
Quartus II TimeQuest Timing Analyzer可以把修改或改变主时钟(或者引入时钟)特性的分频时钟、波纹时钟和电路作为生成时钟。
你可以定义这些电路的输出作为生成时钟。这些定义可以让Quartus II TimeQuest Timing Analyzer分析这些时钟以及关联的时钟网络延时(network latency)。
使用create_generated_clock命令定义生成时钟。 Example 6–5. create_generated_clock Command
create_generated_clock [-name
[-master_clock
[-offset
Table 6–7. create_generated_clock Command Options
选项 -name
源延时是由于从主时钟(不一定是主管脚)开始的时钟网络延时所致。你可以使用set_clock_latency –source命令约束源延时。
Figure 6–17 展示了如何产生一个基于10ns时钟的反向生成时钟: Figure 6–17. Generating an Inverted Clock create_clock -period 10 [get_ports clk]
create_generated_clock -divide_by 1 -invert -source [get_registers clk] \\ [get_registers gen|clkreg]
指定生成时钟的占空比 允许你对同一个管脚添加多个时钟约束 用于主管脚上有多个时钟存在时指定一个主时钟 指定生成时钟的相位 指定生成时钟的偏移 指定被分配到的目标管脚 描述
Figure 6–18 展示了如何使用-edges和-edge_shift选项以改变生成时钟。 Figure 6–18. Edges and Edge Shifting a Generated Clock create_clock -period 10 -waveform { 0 5} [get_ports clk] # Creates a divide-by-t clock
create_generated_clock -source [get_ports clk] -edges {1 3 5 } [get_registers \\ clkdivA|clkreg]
# Creates a divide-by-2 clock independent of the master clocks’ duty cycle (now 50%)
create_generated_clock -source [get_ports clk] -edges {1 1 5} -edge_shift { 0 2.5 0 } \\
Figure 6–19 展示了-multiply_by选项对生成时钟的影响。 Figure 6–19. Multiplying a Generated Clock
create_clock -period 10 -waveform { 0 5 } [get_ports clk]
# Creates a multiply-by-2 clock
create_generated_clock -source [get_ports clk] -multiply_by 2 [get_registers \\
Quartus II Handbook, Volume 3 6-32 虚拟时钟Virtual Clocks
虚拟时钟是一个在设计中没有真正源或者说与设计没有直接关系的一个时钟。例如,如果一个时钟不是设计中的时钟,而仅仅作为一个外部器件的时钟源,并且外部器件和该设计有输入或者输出的管脚,那么就认为这个时钟是虚拟时钟。
使用create_clock命令创造一个虚拟时钟,对源选项没有指定值。 你可以使用set_input_delay和set_output_delay约束虚拟时钟。
Figure 6–20展示了Quartus II TimeQuest Timing Analyzer若要正确的分析外部寄存器和内部设计逻辑之间的关系,在何处需要设置虚拟时钟的实例。虽然名为virt_clk的晶振没有和Altera器件直接相互作用,但是担当起了外部寄存器的源时钟的角色,所以时钟virt_clk必须申明。
Example 6–6 展示了定义一个周期10ns,名为virt_clk,50%占空比,上升沿在0ns的虚拟时钟的命令。虚拟时钟用于作为输出延时约束的时钟源。

