当前位置:文档之家› Quartus II 时钟约束概念

Quartus II 时钟约束概念

Quartus II Handbook, Volume 3 6-28时钟约束(Clock Specification):约束所有时钟(包括你的设计中特有的时钟)对准确的时序分析结果而言是必不可少的。

Quartus II TimeQuest Timing Analyzer为各种各样的时钟配置和典型时钟提供许多SDC命令。

这个章节将介绍SDC可用的应用编程接口,以及描述指定的时钟特性。

时钟(Clocks)使用create_clock命令为任何register, port或pin进行时钟特性描述,使其具有独一的时钟特性。

例6–2展示了create_clock命令:Example 6–2. create_clock Commandcreate_clock-period <period value>[-name <clock name>][-waveform <edge list>][-add]<targets>Table 6–6. create_clock Command OptionsExample 6–3 约束时钟频率100MHz,占空比50%,0ns上升沿,5ns下降沿。

Example 6–3. 100MHz Clock Creationcreate_clock –period 10 –waveform { 0 5 } clkExample 6–4和上例相差90度的相位。

Example 6–4. 100MHz Shifted by 90 Degrees Clock Creationcreate_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 Commandcreate_generated_clock[-name <clock name>]-source <master pin>[-edges <edge list>][-edge_shift <shift list>][-divide_by <factor>][-multiply_by <factor>][-duty_cycle <percent>][-add][-invert][-master_clock <clock>][-phase <phase>][-offset <offset>]<targets>Table 6–7. create_generated_clock Command Options源延时是由于从主时钟(不一定是主管脚)开始的时钟网络延时所致。

你可以使用set_clock_latency –source命令约束源延时。

Figure 6–17 展示了如何产生一个基于10ns时钟的反向生成时钟:Figure 6–17. Generating an Inverted Clockcreate_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 Clockcreate_clock -period 10 -waveform { 0 5} [get_ports clk]# Creates a divide-by-t clockcreate_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 Clockcreate_clock -period 10 -waveform { 0 5 } [get_ports clk]# Creates a multiply-by-2 clockcreate_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的虚拟时钟的命令。

虚拟时钟用于作为输出延时约束的时钟源。

在你产生虚拟时钟之后,你可以执行register-to-register的分析报告(在Altera 器件和外部器件的寄存器之间)。

Example 6–6. 虚拟时钟Example 1#create base clock for the designcreate_clock -period 5 [get_ports system_clk]#create the virtual clock for the external registercreate_clock -period 10 -name virt_clk -waveform { 0 5 }#set the output delay referencing the virtual clockset_output_delay -clock virt_clk -max 1.5 [get_ports dataout]Example 6–7 展示了产生一个周期为10ns,占空比为50%,相移90度虚拟时钟的命令。

Example 6–7. Virtual Clock Example 2create_clock -name virt_clk –period 10 –waveform { 2.5 7.5 }Quartus II Handbook, Volume 3 6-33多频时钟Multi-Frequency Clocks某些情况下在设计中会有很多个时钟源提供时钟信号。

增加的时钟也许扮演一个低频率低功耗时钟的角色。

在分析这种设计时,create_clock命令提供了–add 选项让你添加多个时钟节点。

Example 6–8展示了时钟周期为10ns的节点clk,然后对同一个节点添加时钟周期为15ns的时钟。

Quartus II TimeQuest Timing Analyzer在执行时序分析时两个时钟都用到了。

Example 6–8. Multi-Frequency Examplecreate_clock –period 10 –name clock_primary –waveform { 0 5 } [get_ports clk] create_clock –period 15 –name clock_secondary –waveform { 0 7.5 } [get_ports clk] -addQuartus II Handbook, Volume 3 6-34自动时钟检测Automatic Clock Detection想要为你的设计中所有的时钟节点自动添加时钟约束,那么就使用derive_clocks命令。

这个命令从管脚或者寄存器生成时钟以确保设计中的每个寄存器都有时钟。

Example 6–9 展示了derive_clocks命令选项。

Example 6–9. derive_clocks Commandderive_clocks[-period <period value>][-waveform <edge list>]Table 6–8 describes the options for the derive_clocks command.derive_clocks命令不能为PLLs输出时钟进行约束。

derive_clocks命令相当于使用create_clock命令为每个寄存器或者管脚产生时钟。

相关主题