前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FPGA中降低时钟skew的几种方法

FPGA中降低时钟skew的几种方法

作者头像
猫叔Rex
发布2024-03-20 21:33:52
1350
发布2024-03-20 21:33:52
举报
文章被收录于专栏:科学计算科学计算

本文参考自高亚军老师的《AMD FPGA设计优化宝典》

首先哪些因此会导致时钟skew过大呢?

  1. 不合理的时钟结构
  2. 时钟同时驱动I/O资源和Slice资源
  3. 时钟跨die

在时序报告中,会显示出clock path skew,如果时钟偏移超过0.5ns,就需要额外关注了。

img_v3_028t_b69c5ae2-70d4-4115-8dba-f17176b1b27g

书中列举了几个优化skew的方法:

  1. 移除时钟路径上多余的时钟buffer,如果出现了级联时钟Buffer,势必会导致时钟路径上的延迟增大。
  2. 移除时钟路径上的组合逻辑,一旦时钟路径上出现了组合逻辑,就意味着时钟布线采用了“常规布线资源+专用布线资源”的组合形式,从而显著增大了时钟延迟且时钟skew无法预测。同时,相比于专用时钟布线资源,常规布线资源对噪声更加敏感,这会使时钟质量下降。
  3. 输入时钟从clock capable的管脚输入,否则还是会出现“常规布线资源+专用布线资源”的组合形式。
  4. 如果设计中出现并行的MMCM/PLL时,应合理设置CLOCK_DEDICATED_ROUTE的值。

image-20240312225134442

如果BUFGCE和两个MMCM位于同列相邻的时钟区域,那么应为约束为SAME_CMT_COLUMN或BACKBONE,同时将MMCM的位置固定下来:

代码语言:javascript
复制
# FOR UltraScale/UltraScale+
set_property CLOCK_DEDICATED_ROUTE SAME_CMT_COLUMN [get_nets -of [get_pins BUFG_inst/O]] 
# FOR 7 series
set_property CLOCK_DEDICATED_ROUTE BACKBONE [get_nets -of [get_pins BUFG_inst/O]] 
set_property LOC MMCM3_ADV_X1Y2 [get_cells MMCM3_ADV_inst_0]
set_property LOC MMCM3_ADV_X1Y0 [get_cells MMCM3_ADV_inst_1]

image-20240312225611134

如果BUFGCE和两个MMCM位于不同列但相邻的时钟区域,那么应该设为ANY_CMT_COLUMN和FALSE。

代码语言:javascript
复制
# FOR UltraScale/UltraScale+
set_property CLOCK_DEDICATED_ROUTE ANY_CMT_COLUMN [get_nets -of [get_pins BUFG_inst/O]] 
# FOR 7 series
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets -of [get_pins BUFG_inst/O]] 
set_property LOC MMCM3_ADV_X1Y2 [get_cells MMCM3_ADV_inst_0]
set_property LOC MMCM3_ADV_X1Y0 [get_cells MMCM3_ADV_inst_1]

image-20240312225704903

  1. 对于7系列FPGA,避免使用BUFIO/BUFR/BUFH来驱动分散在不同时钟域内的逻辑。要评估设计中区域时钟缓冲器负载的个数,以保证这些负载可以被放置在一个时钟区域内。
  2. 对于UltraScale/UltraScale+和Versal的FPGA,避免使用MMCM/PLL对来自BUFG_GT的输出时钟执行简单的分频,可以使用BUFGCE_DIV、MBUFG这些带有分频功能的时钟BUFFER来代替。
  3. 对于UltraScale/UltraScale+和Versal的FPGA,对关键的同步跨时钟域路径添加CLOCK_DELAY_GROUP约束。什么是同步跨时钟域路径呢,比如MMCM输出的两个同步时钟。
  4. 对于UltraScale/UltraScale+的FPGA,修改时钟根节点的位置。Vivado在布局阶段会自动给每个时钟分配根节点的位置,以获取最佳的时序性能。通常情况下,时钟根节点位于其驱动负载的中心位置,如果不是,可以使用USER_CLOCK_ROOT调整。
  5. 避免关键路径穿越SLR或输入输出列。
  6. 对于UltraScale/UltraScale+的FPGA,使用CLOCK_LOW_FANOUT属性使时钟网线驱动的负载位于同一个时钟区域内。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 傅里叶的猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档