TIMING-7
:
相关时钟间无公共节点
时钟
<clock_name>
与
<clock_name>
之间相互关联
(
一起定时
),
但两者间无公共节点。此设置在硬件中可能失败。要查找这些时钟之间的时序路径,
请运行以下命令
:
report_timing -from [get_clocks <CLOCK_NAME1>] -to [get_clocks
<CLOCK_NAME2>]
描述
默认情况下
,
将报告的
2
个时钟视为相关联并以同步方式对其进行定时。
DRC
警告报告称时序引擎无法保证这些时钟在硬件中同步,
因为它无法确定
2
个时钟树之间的公共节点。
解决方案
解决办法取决于
2
个时钟域处于异步还是同步状态。对于异步时钟
,
时序例外
(
例如
,
set_max_delay - datapath_only、
set_clock_groups
或
set_false_path
)
应覆盖
2
个域之间的路径。
对于同步时钟
,
可豁免此
DRC
警告。 在模块的非关联 (OOC)
综合期间报告违例时
,
如果已知
2
个时钟在顶层具有公共节点
,
那么可通过如下概述的步骤来防止出现 TIMING-7
违例
:
1.
在首个输入时钟端口上将其中
1
个时钟定义为基准时钟。
2.
在第
2
个输入时钟端口上将第
2
个时钟定义为生成时钟。此时钟应参考步骤
1
中定义的基准时钟。
3.
在
2
个输入时钟端口上定义
HD.CLK_SRC
属性。
示例
在下图中
,
在
clk1
与
clk2
域之间存在同步时钟域交汇
(CDC)
。默认情况下
,
在
Vivado
中
clk1
和
clk2
已判定为同步。但由于 clk1
和
clk2
为输入端口
,
因此这
2
个时钟之间不存在公共节点关系。对此
,
Vivado Design Suite
无法保证 2
个时钟处于同步。
但是
,
如果模块以非关联
(OOC)
方式综合
,
并且
clk1
与
clk2
在顶层具有公共节点
,
那么
OOC
综合期间可能可通过定义如下约束来防止 TIMING-7
违例
:
create_clock -period 3.000 [get_ports clk1]
set_property HD.CLK_SRC BUFGCTRL_X0Y2 [get_ports clk1]
create_generated_clock -divide_by 2 -source [get_ports clk1] \
[get_ports clk2]
set_property HD.CLK_SRC BUFGCTRL_X0Y4 [get_ports clk2]
TIMING-8
:
相关时钟间无公共周期
发现时钟
<clock_name>
与
<clock_name>
之间存在关联
(
一起定时
),
但两者间无公共
(
可扩展
)
周期。
描述
默认情况下
,
将报告的
2
个时钟视为相关联并以同步方式对其进行定时。但时序引擎将
2
个时钟的波形扩展至超过1000 个周期后无法判定公共周期。在此情况下
,
这
1000
余个周期的最差建立时间关系将用于时序分析。但是
,
时序引擎无法确保这是最消极的情况。通常周期比特别小的时钟会发生这种情况。
解决方案
由于波形不允许在两个时钟之间执行安全时序分析
,
因此建议将这些时钟作为异步时钟来处理。有鉴于此
,
时序例外应涵盖两个时钟域之间的路径(
例如
,
set_max_delay -datapath_only
、
set_false_path
或
set_clock_groups
)
。
TIMING-9
:
未知
CDC
逻辑
在穿过
set_false_path
、
set_clock_groups
或
set_max_delay -datapath_only
约束的两个时钟域之间检测到一个或多个异步时钟域交汇。但在捕获时钟端未找到任何双寄存器逻辑同步器。建议运行 report_cdc
以实现完整详细的 CDC
覆盖。同时
,
请考虑使用
XPM_CDC
以避免出现严重性为“
Critical
”
(
严重
)
的问题。
描述
DRC 的用途是确保由时序例外加以约束的时钟间域在设计时包含安全的异步时钟域交汇电路。
解决方案
建议在相应的设计中使时钟间路径达成正确同步。为此
,
请添加至少
1
个双寄存器逻辑同步器。如果在路径上已定义FIFO 或高层次协议
,
则可安全忽略此
DRC
。要获取
CDC
违例的详细列表
,
请运行
report_cdc
。
示例
在下图中
,
在
clk1
与
clk2
之间存在异步时钟域。但
clk2
捕获域不包含用于同步数据的双寄存器逻辑同步器。