深度解析ug1292(8)

2019-10-30 19:32:28 浏览数 (1)

过大的Clock Skew也可能导致时序违例,尤其是其数值超过0.5ns时。如下三个命令生成的报告中均可显示Clock Skew的具体数值。

report_design_analysis

report_timing_summary

report_timing

降低Clock Skew可采用如下流程操作。

图片来源: page 8, ug1292

1

异步跨时钟域路径是否被安全合理地约束

时钟关系有两种:同步时钟和异步时钟。如果发送时钟和接收时钟是同源的,例如来自于同一个MMCM,则认为二者是同步时钟,否则就按异步时钟处理。对于异步跨时钟域路径,可采用如下三者之一进行约束:

set_clock_groups

set_false_path

set_max_delay -datapath_only

2

发送时钟和接收时钟的时钟树结构是否平衡

时钟树结构其实就是时钟的拓扑结构。从发送时钟和接收时钟的角度看,平衡的时钟树结构是指二者“走过相同或等效的路径”。如下图所示,发送时钟和接收时钟来自级联的BUFG的不同位置上,这就是典型的不平衡时钟树。在设计中要避免这种情形。通过Tcl命令report_methodology可检查出设计中级联的BUFG。

<不推荐>

同时,还要利用好BUFG_GT和BUFGCE_DIV,两者均可实现简单地分频。如下图所示,利用BUFG_GT实现二分频,从而节省了MMCM。

此外,还要保持时钟路径“干净”,即不能在时钟路径上存在组合逻辑。在时序报告中,点击如下图标记的按钮,按下F4,在显示时序路径的同时也会显示该路径的时钟拓扑结构。

3

检查Clock Skew是否小于0.5ns

CLOCK_DELAY_GROUP可有效改善同步跨时钟域路径的Clock Skew,因此,Xilinx建议对于关键的同步跨时钟域路径,可通过设置该属性降低Clock Skew,即使发送时钟和接收时钟具有相同的CLOCK_ROOT值。CLOCK_DELAY_GROUP的具体使用方法如下图所示,其中clk1_net和clk2_net是Clock Buffer的输出端连接的net。但是,避免过多使用该属性,否则会适得其反。

4

时钟是否同时驱动I/O和Slice中的逻辑资源

如果时钟同时驱动I/O和Slice中的逻辑资源,且负载小于2000时,可通过CLOCK_LOW_FANOUT属性对相应的时钟net进行设置,最终可使工具将该时钟驱动的所有负载放置在同一个时钟域内。通过命令report_clock_utilization生成的报告可查看每个时钟的负载,如下图所示。

CLOCK_LOW_FANOUT的具体使用方法如下图所示。

5

检查数据路径是否穿越SLR或I/O Column

如果时钟负载较小且穿越SLR或I/O Column时,可通过Pblock实施位置约束,将负载限定在一定区域内,例如在一个SLR内,以避免穿越一些特殊列,例如I/O Column。相反地,如果数据路径并未穿越SLR或I/O Column,可尝试对相应的MMCM或PLL做位置约束,使其位于这些负载的中央。

0 人点赞