定义时钟约束
定义时钟约束
必须首先定义时钟,以便为其它约束所用。时序约束创建流程的第一步是确定必须在哪里定义时钟以及应该定义为
“
主
时钟
”
还是
“
生成时钟
”
。
重要提示:
定义具有特定名字的时钟时 (
-name
选项),必须确认时钟名称未被另一个时钟约束所使用或被已有的自
动生成时钟使用。当一个时钟名称用于多个时钟约束时,
Vivado Design Suite
时序引擎会发出提示,提警告您第一个
时钟定义被覆盖。如果同一个时钟名称使用两次,那么第一个时钟定义就会丢失,所有对应于该名称、在两个时钟定
义间输入的约束也会丢失。赛灵思建议您避免覆盖时钟定义,除非能确保其他约束均不受影响,而且所有时序路径都
保持受约束。
识别时钟源
用下面的两个报告识别设计中未约束的时钟源:
•
“
时钟网络报告
”
•
“
检查时序报告
”
时钟网络报告
约束和未约束的时钟源点在两个不同类别中列出。对于每个未约束的时钟源点,必须确定定义为主时钟还是生成时钟。
% report_clock_networks
Unconstrained Clocks
Clock sysClk (endpoints: 15633 clock, 0 nonclock)
Port sysClk
Clock TXOUTCLK (endpoints: 148 clock, 0 nonclock)
GTXE2_CHANNEL/TXOUTCLK
(mgtEngine/ROCKETIO_WRAPPER_TILE_i/gt0_ROCKETIO_WRAPPER_TILE_i/gtxe2_i)
Clock Q (endpoints: 8 clock, 0 nonclock)
FDRE/Q (usbClkDiv2_reg)
检查时序报告
no_clock
检查可报告没有时钟定义的生效叶节点
(leaf)
时钟引脚组。每个组关联一个时钟源点,而且必须在该点定义
一个时钟以清除此问题。
% check_timing -override_defaults no_clock
1. checking no_clock
--------------------
There are 15633 register/latch pins with no clock driven by root clock pin: sysClk
(HIGH)
There are 148 register/latch pins with no clock driven by root clock pin:
mgtEngine/ROCKETIO_WRAPPER_TILE_i/gt0_ROCKETIO_WRAPPER_TILE_i/gtxe2_i/TXOUTCLK
(HIGH)
There are 8 register/latch pins with no clock driven by root clock pin:
usbClkDiv2_reg/C (HIGH)
利用
check_timing
,可以使相同时钟源引脚或端口出现在若干个组中,具体数量取决于整个时钟树的拓扑结构。这
种情况下,在选定时钟源引脚或端口建立一个时钟就可以解决所有相关组中遗漏时钟定义的问题。