对于占空比改变或相移的约束:使用-edge_shift -edge_shift不能与如下列命令同时使用:-divide_by -multiply_by -invert。 示例:
create_clock -name clkin -period 10 [get_ports clkin]create_generated_clock -name clkshift -source [get_pins mmcm0/CLKIN] -edges{1 2 3}\-edge_shift {2.5 0 2.5} [get_pins mmcm0/CLKOUT]
-edge_shift的值可以是正数也可以是负数。 -multiply_by和divide_by可同时使用以产生非整数倍频/分频。 create_generated_clock -name <generated_clock_name>\-source <master_clock_source_pin_or_port>\-multiply_by <mult_fractor>\-divide_by <div_fractor>\<pin_or_port>
衍生时钟路径上组合逻辑的约束:-combinational; 示例: 假定master_clock驱动一个基于寄存器的二分频时钟电路和一个二选一驱动器的时钟选择器用于选择master和二分频时钟,对于主时钟到衍生时钟有时序路径也有组合路径,对于组合逻辑路径可以进行-combinational约束 create_generated_clock -name clkout -source [get_pins mmcm0/CLKIN] -combinational [get_pins MUX/O] 1.3.1 自动衍生时钟 在定义了master_clock后,对于Clock modifying Blocks所输出产生的时钟,VIVADO可以自动进行约束。 对于7系列设备,CMB包含MMCM/PLL,BUFR,PHASER。对于UltraScale系列,CMBS包含MMCM/PLL*,BUFGGT/BUFGCE_DIV,GT*_COMMON/ GT*_CHANNEL/ IBUFDS_GET3,BITSLICE_CONTROL/RX*_BITSLICE,ISERDESE3。 衍生时钟的重命名: create_generated_clock -name new_name [-source master_pin] [-master_clock master_clk] source_object
newname和sourceobject必须被制定。sourceobject指衍生时钟的对象(CMB output pin,GT output pin for UltraScale等)。当有多个时钟传递至source pin时应制定-source和-master_clock。 If any of the -edges/-edge_shift/-divide_by/-multiply_by/-combinational/-duty_cycle /-invert options is passed to the create_generated_clock command, the generated clock is not renamed. Instead a new generated clock is created with the specified characteristics. 自动衍生的时钟重命名只能在它的发源处重命名,不能经过任何原语器件。主时钟和用户定义的时钟不能被重命名。 The auto-derived clocks can be renamed at any time inside the XDC, even after they have been referenced by some timing constraints。 时钟重命名可以在XDC文件中任何地方重命名。 1.4 时钟组(clock group) 默认情况下,vivado分析各时钟下所有的路径(除非制定或使用clock group 或false path约束)。 时钟组约束set_clock_groups将关断指定的时钟组之间的时序分析,但并不关断时钟组内各时钟之间的时钟约束。set_false_path约束是单向的,但set_clock_group时序分析忽略是双向的。 set_clockgroups在有至少有两个有效非空时钟组是才有效。可以使用schematic viewer,clock_network_report观察决定哪些时钟不能一块儿分析。 对于异步时钟和不可预测时钟(unexpandable clocks,在1000个内时钟沿无法对齐),可采用set_clock_groups进行约束(set_clock_groups优先级比常规的时序例外高,若想分析两个异步时钟之间的的一些路径则不应该使用时钟组约束,应只使用timeing_exceptions)。
|