TIMING-1 : 时钟修改块上的时钟波形无效
在 <cell_type> 输出 <pin_name> 上指定的时钟 <clock_name> 的时钟波形无效 , 与时钟修改块 (CMB) 设置不匹配。该时钟波形为 <VALUE> 。期望的波形为 <VALUE> 。
描述
Vivado Design Suite 会根据 CMB 设置和传入主时钟的特性 , 在 CMB 输出上自动衍生时钟。如果用户在 CMB 输出上定义生成时钟, 那么 Vivado 不会在同一定义点 ( 信号线或管脚 ) 上自动衍生生成时钟。 DRC 警告报告称用户定义的生成时钟与 Vivado 将自动创建的自动衍生时钟不匹配。这可能导致硬件故障 , 因为设计的时序约束与器件上所发生的约束不匹配。
解决方案
如果无需用户定义的生成时钟 , 请移除约束并改为使用自动衍生时钟。如果需要约束 , 请验证生成时钟约束与自动衍生时钟波形是否匹配, 或者修改 CMB 属性以与期望的时钟波形相匹配。如果要强制设置自动衍生时钟的名称 , 建议使用仅定义 -name 选项的 create_generated_clock 约束以及定义该时钟的对象 ( 通常为 CMB 的输出管脚 ) 的名称。
示例
在下图中 , 在 MMCM 实例管脚 CLKOUT0 上定义了 create_generated_clock 约束 , 但此约束与 Vivado 从MMCM 属性设置生成的自动衍生波形不匹配。如需仅对自动衍生时钟进行重命名, 请在约束文件中的主时钟定义后使用以下约束 :
create_generated_clock -name clkName [get_pins clk_gen_i0/clk_core_i0/inst/
mmcme3_adv_inst/CLKOUT0]
TIMING-2 : 基准时钟源管脚无效
在错误的管脚 <pin_name> 上创建了基准时钟 <clock_name> 。建议仅在适当的时钟根 ( 不含时序弧的输入端口或原语输出管脚) 上创建基准时钟。
描述
基准时钟必须在时钟树的源时钟上定义。例如 , 源时钟可能是设计的输入端口。如果在逻辑路径中间定义基准时钟 , 时序分析准确性可能降低, 因为它会忽略位于基准时钟源点之前的插入延迟 , 从而导致无法正确执行偏差计算。因此 , 最好不要在内部驱动程序管脚上创建基准时钟。否则可能导致硬件故障。
解决方案
修改 create_clock 约束以使用实际时钟树源。
示例
在下图中 , 基准时钟定义 create_clock 约束布局在 IBUFCTRL 实例的输出管脚上。如果使用 clk_pin_p 时钟对输入或输出端口路径进行定时, 则裕量将不准确 , 因为将缺失时钟树插入延迟部分。差分输入缓冲器的基准时钟定义应布局在顶层端口 clk_pin_p 上。
TIMING-3 : 时钟修改块上的基准时钟无效
在时钟修改块的输出管脚或信号线 <pin/net_name> 上会创建基准时钟 <clock_name> 。
描述
Vivado 会根据 CMB 设置和传入主时钟的特性 , 在 CMB 输出上自动衍生时钟。如果用户在 CMB 输出上定义基准时钟, 那么 Vivado 不会在相同输出上自动衍生时钟。此 DRC 报告显示在 CMB 的输出上已创建基准时钟 , 导致与传入时钟之间的联系中断, 并阻碍时钟插入延迟的正常计算。不建议如此行为 , 因为它可能导致时序分析不准确和硬件行为错误。
解决方案
修改约束以移除 CMB 输出上的 create_clock 约束。如需强制设置自动生成时钟的名称 , AMD 建议使用create_generated_clock 约束 , 其中仅含 -name 选项和 CMB 输出管脚。
示例
在下图中 , 在 MMCM 实例管脚 CLKOUT0 上已定义 create_clock 约束。这将覆盖由 Vivado 创建的自动衍生时钟, 导致与传入时钟之间的所有关系丢失。如需仅对自动衍生时钟进行重命名, 请在约束文件中的主时钟定义后使用以下约束 :
create_generated_clock -name clkName [get_pins clk_gen_i0/clk_core_i0/inst/
mmcme3_adv_inst/CLKOUT0]