Timing Analyzer 将修改或更改输入时钟或主机时钟特性的时钟分频器、行波时钟或电路视为生成时钟。应将这些电路的输出定义为生成时钟。此定义使 Timing Analyzer 可以分析这些时钟并解释与其相关的任何网络延迟。
可以使用 create_generated_clock 命令创建生成时钟。以下列表显示了 create_generated_clock 命令以及可用选项:
create_generated_clock [-name <clock name>] -source <host pin> [-edges <edge list>] [-edge_shift <shift list>] [-divide_by <factor>] [-multiply_by <factor>] [-duty_cycle <percent>] [-add] [-invert] [-host_clock <clock>] [-phase <phase>] [-offset <offset>] <source objects>
表 1 介绍了 create_generated_clock 命令的选项。
表 1.create_generated_clock 命令选项说明
选项 | 描述 |
---|---|
-name <clock name> | 生成时钟的名称,如 clk_x2。如果没有指定时钟名称,时钟名称将与分配了此时钟的第一个节点的名称相同。 |
-source <host pin> | <host pin> 指定设计中派生了时钟设置的节点。 |
-edges <edge list> |-edge_shift <shift list> | -edges 选项指定相对于主机时钟上升沿和下降沿的新上升沿和下降沿。主机时钟的上升沿和下降沿编号为 1..<n>,从第一个上升沿开始,例如,时钟沿 1。之后的第一个下降沿是时钟沿 2,下一个上升沿是时钟沿 3,依此类推。<edge list> 必须采用升序。同一个时钟沿可用于两个输入,表示独立于原始波形占空比的时钟脉冲。edge_shift 指定 <edge list> 中每个时钟沿的偏移量。应用 -edges 和 -edge_shifts 之后,可使用 -invert 选项对时钟进行反相。 |
-divide_by <factor> | -multiply_by <factor> | divide_by 和 multiply_by 系数基于时钟的第一个上升沿,可按指定系数扩展或收缩波形。例如,-divide_by 2 等同于 -edges {1 3 5}。也可以为倍频时钟指定占空比。Timing Analyzer 支持同时指定倍频系数和分频系数。 |
-duty_cycle <percent> | 指定生成时钟的占空比。最后应用占空比。 |
-add | 可以为同一个引脚指定多个时钟。 |
-invert | 在应用所有其它修改(占空比除外)后,在时钟的输出端应用反相。 |
-host_clock <clock> | host_clock 用于在主机引脚上存在多个时钟的情况下指定时钟。 |
-phase <phase> | 指定生成时钟的相位。 |
-offset <offset> | 指定生成时钟的偏移。 |
<source objects> | 指定赋值适用的端口或引脚。 |
源延迟基于主机时钟(不一定是主机引脚)的时钟网络延迟。可以使用 set_clock_latency -source 命令覆盖源延迟。
图 1 显示了以下 SDC 命令的波形,基于一个 10 ns 时钟创建了反相生成时钟。
create_clock -period 10 [get_ports clk] create_generated_clock -divide_by 1 -invert -source [get_registers clk] \ [get_registers gen|clkreg]
图 2 显示了以下 SDC 命令的波形,使用 -edges 和 -edge_shift 选项修改了生成时钟。
create_clock -period 10 -waveform { 0 5 } [get_ports clk] # 创建一个二分频时钟 create_generated_clock -source [get_ports clk] -edges { 1 3 5 } \ [get_registers clkdivA|clkreg] # 创建一个独立于 50% 主机时钟占空比的二分频时钟 create_generated_clock -source [get_ports clk] -edges { 1 1 5 } -edge_shift 0 5 0 } \ [get_registers clkdivB|clkreg]
图 3 显示了以下 SDC 命令的波形,展示了 -multiply 选项对生成时钟的影响。
create_clock -period 10 -waveform { 0 5 } [get_ports clk] # 创建一个二分频时钟 create_generated_clock -source [get_ports clk] -multiply_by 2 \ [get_registers clkmult|clkreg]