时钟
在设计中说明时钟信号的SDC指令时creat_clock。
该指令的BNF为:
creat_clock -period period_value
[source]
[-nameclock_name]
[-waveformedge_list]
[-add]
[-commentcomment_string]
- creat_clock 为设计中的源对象声明。
这些对象可以是端口、引脚、网络。在命令里分别是[get_ports X] 、[get_nets X]、[get_pinsX]。 - period 定义时钟周期的(必须>0)。**
时钟周期单位由库时间单位推导出。在此为ns。 - name clock_name 给时钟起一个名字 **
当提到该时钟名称的时候,该时钟信号的所有特征就知道了,也可以不起名字,但其实工具会自己帮你取一个。 - waveform{rise_edge fall_edge} 占空比。**
- 只能先上升沿后下降沿
- 如果需要模拟复杂波形只能用偶数个
eg:creat_clock -period 10 -name CLK -waveform {0 5} [get_ports A] creat_clock -period 10 -name CLK -waveform {3 5 8 9} [get_pinw FF/P]
- add同源多时钟
情况:假设一个多路选择器驱动始终端口,输入为两个不同特征的时钟。
分析:首先如果先要在静态时序分析中考虑所有时钟,在代表此时一个端口的这两个时钟都要分析到。但是在一般情况下,对同一个时钟的定义,后一个会自动覆盖前一个。
想要不被覆盖,就要在后面一条加上 –add。同时为了区两个时钟信号,此时就必须给两个时钟起名字。
eg:creat_clock - name C1 –period 10 –waveform{0 5} –[get_portsA] creat_clock - name C2 –period 15 –waveform{0 7.5} –[get_portsA] –add
- comment 用一个字符串作为变量。用来是显示时钟的文档信息,不影响综合和时序。
eg:creat_clock –period 10 -name clk [pet_ports clk]\ -comment“Clock for usb block generated by PLL”
虚拟时钟 在某些情况下,电路单元中没有时钟信号的端口或者引脚,而是被片外的信号所触发。
此时需要模拟一个时钟,它在物理上不存在,但是它表示影响该电路时序的外部触发器。虚拟时钟没有特定的时钟源。所以在用creat_clock 模拟虚拟时钟的时候,只有period、waveform、 name而没有源对象。
eg:crea_clock –period 10 –name v_clk - waveform{05}
生成时钟
来自某个源时钟,经过倍频、分频、移相或者兼有之得到的时钟,成为生成时钟或派生时钟。
在设计中说明时钟信号的SDC指令时creat_generated_clock。
该指令的BNF为:
creat_generated_clock
[source] #源时钟引脚
[-master_clock master_clockname] #源时钟名字
[-name generated_clock_name]#派生时钟名字
[-edges edge_list]
[-divide_by factor]
[-multiply_by factor]
[-invert]
[-edge_shift shift_list]
[-duty_cycle percent]
[-combinational]
[-add]
[-comment comment_string]
- name 同上可取可不取
- edges 以源时钟边缘为参考,表明生成时钟的边沿。(必须为奇数个 && >3个)上下交替
- divide_by 通过参数分频 eg:-divide_by2 代表2分频
eg :creat_generated_clock –name CLK1 –source[get_ports clk]\ -divide_by 2 [get_pins AN1/Z]
- multiply_by 通过参数倍频
eg :creat_generated_clock –name CLK2 –source[get_ports clk]\ -multiply_by 2 [get_pins AN1/Z]
- invert 取反(不会导致源时钟沿发生变化,而是改变生成时钟起始是上升沿还是下降沿)
eg :creat_generated_clock–name CLK3 –source[get_ports clk]\ -divide_by 2 - invert [get_pins AN1/Z]
- edge_shift 时钟沿位移用一组浮点数来表示时间单元内相对每一个源时钟沿位移 思考:假设有一个源时钟
period10 waveform{0 5} creat_generated_clock –name CLK4 –source[get_ports clk]\ -edges{1 1 3} –edge_shift{0 2 0} [get_pins AN1/Z] 试着画出该派生时钟的波形
-
master_clock 源时钟名字
eg : `creat_generated_clock –name CLK5 –source[get_ports clk] - master_clock C1 [get_pins AN1/Z]`
-
combinational 在某些情况下源引脚到生成时钟的路径是纯组合电路,同时又存在时序电路,则常用的定义方法creat_generated_clock会失效。在何种情况下,阻隔时序电路很重要,因为组合电路时钟有效。也就是说通过-combinational定义的生成时钟已经生效。如图:
creat_generated_clock –name clkout –combinational –source[get_pinsFF1/Q] [get_ports clkout]