优化时钟网络之时钟偏移

Note:文章内容以Xilinx 7系列FPGA进行讲解

1、基本介绍

        所谓时钟偏移(Clock Skew),是指在同步时序电路中,同一个时钟信号到达各个寄存器时钟端口的时间不一致的现象。如下图所示:

        时钟从源端到达寄存器FF1的时间点为Tclk1,到达寄存器FF2的时间点为Tclk2,因此时间偏移为Tclk2与Tclk1的。若clk源端记为零时刻点,那么Tclk1和Tclk2分别对应发送时钟路径延迟和捕获时钟路径延迟。

        时钟偏移可正可负。通常,若数据流向与时钟前进方向相同,则时钟偏移为;若数据流向与时钟前进方向相反,则时钟偏移为,如下图所示:


2、对时序的影响 

        从建立时间裕量和保持时间裕量两个角度进行分析,下面先以正向的时钟偏移为例。

  (1)建立时间裕量分析,如下图所示:

        发起沿和捕获沿相差一个时钟周期。由图中建立时间裕量表达式可以得知:正向的时钟偏移对建立时间收敛有利的,因为其增加了建立时间裕量,也相当于捕获寄存器的建立时间由Tsu减小至Tsu-Tskew

  (2)保持时间裕量分析,如下图所示:

        保持时间检查的发起沿和捕获沿为同一时钟沿(保持时间检查是基于建立时间检查的,要求当前发送沿发送的数据不能被前一个捕获沿捕获;下一个发送沿发送的数据不能被当前捕获沿捕获)。由图中保持时间裕量表达式可以得知:正向的时间偏移不利于保持时间收敛,因为其导致保持时间裕量减小,也相当于数据在有效沿到达之后还要稳定保持的时间变长了,由原来的Th变为Th+Tskew。这显然不利于保持时间收敛。 

        结合建立时间裕量表达式和保持时间裕量表达式可知,若Tskew为负,则建立时间收敛更加困难,保持时间收敛更加容易。


3、导致时钟偏移过大的因素

        (1)不合理的时钟结构(如级联的BUFG或时钟路径上出现组合逻辑) 

        (2)时钟同时驱动I/O资源和SLICE中的资源 

        (3)时钟跨die(在多die芯片中)

        通常,如果时钟偏移超过0.5ns,就要格外关注。一般在时序报告的总结部分会显示时钟偏移的具体数值,如下图所示:

        但是该数值未必是对应时钟最糟糕的时钟偏移情形,具体的数值我们也可以通过相关Tcl命令获得。 


4、降低时钟偏移的方法

  (1)移除时钟路径上多余的时钟缓冲器

        之所以会出现多余的时钟缓冲器,是因为设计中出现了级联时钟缓冲器,如下图所示:

        对于BUFGCE级联的情形可优化为BUFGCE并联,但更好的方法是移除不必要的BUFGCE 。不过目前Vivado已经相当智能,在opt_design阶段可自动移除时钟路径上多余的缓冲器。

  (2)合并并联的时钟缓冲器为单一的时钟缓冲器

        并联时钟缓冲器常见的情形是两个并联的BUFGCE,一个使能端恒接高电平,另一个使能端受其他信号控制,如下图所示:

        此时,可将这两个BUFGCE合并,将原本的使能信号连接到寄存器的使能端。

  (3) 移除时钟路径上的组合逻辑

        一旦时钟路径上出现了组合逻辑,就意味着时钟布线采用了“常规布线资源+专用时钟布线资源”的组合形式,从而显著增大时钟延迟并使得时钟偏移无法被预测。同时,相比专用时钟布线资源,常规布线资源对噪声更加敏感,这使得时钟质量显著下降。时钟路径上出现组合逻辑的常见场景是工程师试图通过组合逻辑的形式实现门控时钟的功能,以节省能耗。此时,可将组合逻辑从时钟路径上移除,将其输出连接到寄存器时钟使能端口。如下图所示:

  (4)避免使用约束CLOCK_DEDICATED_ROUTE=FALSE

         CLOCK_DEDICATED_ROUTE=FALSE意味着时钟布线采用了“常规布线资源+专用时钟布线资源”的组合形式,和在时钟路径上使用组合逻辑类似,也会很大程度上增大时钟偏移,如下图所示:

        在上图中,右侧使用了专用时钟布线资源,而左侧没有使用。之所以Vivado会要求设置此约束,是因为设计中的某个时钟网线不是由全局时钟缓冲器驱动的,而是直接由时钟网络的某部分驱动的,例如MMCM/PLL的时钟输出端口或输入缓冲器IBUF的输出端口,相关约束命令如下图所示:

         一个典型的设计失误是时钟信号未从全局时钟管脚进入FPGA,而从通用输入端口进入FPGA。此时,只能添加此约束,否则在布局布线阶段会报错。(这种设计失误一般是硬件设计问题)

  (5)当设计中出现并联的MMCM/PLL时,应合理设置CLOCK_DEDICATED_ROUTE的值

        当设计中出现了一个BUFGCE输出驱动两个MMCM或PLL时,如下图所示:

        此时,应根据三者的位置合理设置CLOCK_DEDICATED_ROUTE约束,以保证时钟布线仅使用专用时钟布线资源。

        情形一:BUFGCE和两个MMCM或PLL位于同列相邻的时钟区域

                

        此时,应将CLOCK_DEDICATED_ROUTE设置为SAM_CMT_COLUMN(针对UltraScale/UltraScale+ FPGA)或BACKBONE(针对7系列FPGA),同时,最好固定两个MMCM或PLL的位置(通过属性LOC实现),相关约束命令如下图所示:

         情形二:BUFGCE和两个MMCM位于不同列但相邻的时钟区域

        此时,应将CLOCK_DEDICATED_ROUTE设置为ANY_CMT_COLUMN(针对UltraScale/UltraScale+ FPGA)或FALSE(针对7系列FPGA),同时,最好固定两个MMCM或PLL的位置(通过属性LOC实现),相关约束命令如下图所示:

  (6)避免使用区域时钟缓冲器(如BUFIO、BUFR或BUFH)驱动分散在不同时钟区域内的逻辑(该方法只针对7系列FPGA

        使用7系列FPGA中的区域时钟缓冲器时要格外小心。首先,要明确区域时钟缓冲器的作用域。例如,BUFR只能驱动其所在时钟区域内的逻辑资源。其次,要评估设计中区域时钟缓冲器负载的个数,以保证这些负载可以被放置在一个时钟区域内。最后,添加合理的位置约束,保证区域时钟缓冲器与其负载在同一个时钟区域内。这可通过手工布局(画PBLOCK)的方式实现。

  (7)避免关键路径穿越SLR或输入输出列

        如果时序违例根本原因在于时钟偏移过大,那么首先检查该路径是否跨die(穿越多个SLR)或是否穿过输入/输出列。若是,则可采用手工布局的方式将关键路径封闭同一个SLR内避免穿过输入/输出列


~End~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/11514.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

华为ENSP路由器出现41解决方法之一

我解决这个问题的方法: 这个方法很简单 一,首先我们打开电脑上的Oracle VM VirtualBox,找到AR_Base(ARse_Link) ,右键删除 二,打开ENSP模拟器,选择一个AR系列路由器并启动,在时候ENSP会提示:未…

17RAL_Visual-Inertial Monocular SLAM with Map Reuse

文章目录 累啊Abstract1.Introduction2.视觉-惯性基本原理 (VISUAL-INERTIAL PRELIMINARIES)3. 视觉惯性 ORB-SLAM (VISUAL-INERTIAL ORB-SLAM)A.TrackingB. Local MappingC. Loop Closing 4.IMU INITIALIZATIONA. 陀螺仪偏置估计B. 尺度和重力的近似(无加速度计偏置…

鸿蒙应用开发实践示例:创建首页

鸿蒙应用开发实践示例:创建首页 效果示例图示例代码 效果示例图 示例代码 import { window } from kit.ArkUI;Entry Component struct Index {//Provide和Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景Pr…

StringUtils 工具类

在日常的编程工作中,字符串(String)处理是一个非常常见且重要的任务。无论是字符串的判空、截取、转换大小写、分隔、比较,还是去除多余空格、拼接、使用正则表达式等操作,都需要我们编写大量的代码来处理各种边界情况…

【视觉SLAM】Windows下编译Pangolin-0.5,显示SLAM运动轨迹

1. 三方库配置 Pangolin v0.5 eigen3 v3.3.8 glew v2.1.0 1.1 glew eigen3 glew:直接下载预编译版本即可(注意:查看自己电脑显卡支持的OpenGL版本,下载支持对应版本的glew,不然无法显示窗口);e…

人工智能、机器学习与深度学习:层层递进的技术解读

引言 在当今科技快速发展的时代,人工智能(AI)已经成为一个热门话题,几乎渗透到了我们生活的方方面面。从智能手机的语音助手,到自动驾驶汽车,再到医疗诊断中的图像识别,人工智能的应用正在改变我…

如何构建数仓中的维度拉链表

1 什么是拉链表 1)拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。 2)使用拉链表既能满足反应数据的历史状…

后端SpringBoot学习项目-项目基础搭建

IDEA创建SpringBoot项目 大佬文章,有基础者可以直接打开参考。我这个记录的是纯纯小白的步骤 创建项目 按钮新建 点击按钮-----新建项目 弹窗配置–生成器 弹窗中选择生成器 ---- Spring Initializr ○ 服务器URL修改为 start.springboot.io start.aliyun.co…

Android CarrierConfig 参数项和正则匹配逻辑

背景 在编写CarrierConfig的时候经常出现配置不生效的情况,比如运营商支持大范围的imsi,或者是测试人员写卡位数的问题等等,因此就需要模式匹配(包含但不限于正则表达式)。 基本概念: 模式匹配涉及定义一个“模式”&a…

《青牛科技 GC6125:驱动芯片中的璀璨之星,点亮 IPcamera 和云台控制(替代 BU24025/ROHM)》

一、GC6125 在 IPcamera 和云台控制中的卓越表现 驱动能力:为监控注入强劲动力 GC6125 作为一款专为 IPcamera 和云台控制而设计的驱动芯片,拥有令人惊叹的驱动能力。在云台电机的驱动方面,它就像一位技艺精湛的驭手,能精准地掌控…

qt QUndoView详解

1、概述 QUndoView 是 Qt 框架中用于显示 QUndoStack(撤销堆栈)内容的视图类。它通常与 QUndoStack 一起使用,为用户提供了一个可视化的界面来查看和操作撤销/重做历史。QUndoView 可以显示堆栈中的每个命令,并允许用户通过界面进…

spring:Spring Security实践过程中的报错总结

文章目录 问题1报错解决 问题2报错解决 问题3报错解决 问题4报错解决 问题5报错解决 问题6报错解决 问题1 报错 You have entered a password with no PasswordEncoder. If that is your intent, it should be prefixed with {noop}. 解决 Spring Security 期望密码使用 Pa…

目前对于后期的打算

在完成了 Python 基本语法的学习后,我犹如推开了编程世界的一扇大门,初窥门径却也深知前方还有广袤无垠的知识天地等待我去探索。Python 作为一门广泛应用于软件开发、数据分析和人工智能等领域的高级编程语言,在当今数字化时代具有举足轻重的…

多种算法解决组合优化问题平台

🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月11日7点12分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id17302099790265&uidef7618fa204346ff9…

C/C++逆向:结构体逆向分析

在C/C程序的逆向分析中,结构体的逆向分析是非常重要的。结构体是C/C中管理和组织数据的一种主要方式。了解它们的布局可以帮助你理解程序是如何存储、处理和传递数据的,结构体常用于组织和管理复杂的数据,理解结构体有助于我们更好地还原程序…

Kettle启动闪退(Couldn‘t read the database cache)

强制关机之后,kettle启动闪退 具体可以用debug模式运行脚本来定位问题 启动之后查看运行日志 DEBUG: Using JAVA_HOME DEBUG: _PENTAHO_JAVA_HOMEC:\Application\JDK DEBUG: _PENTAHO_JAVAC:\Application\JDK\bin\java.exeC:\Application\Kettle\data-integratio…

【机器学习】任务十:从函数分析到机器学习应用与BP神经网络

目录 1.从函数分析到机器学习应用 1.1 3D曲面图可视化报告 1.1.1 目标 1.1.2 代码分析 1.1.3 结果分析 1.1.4 观察与总结 1.1.5 结论 1.2 一元函数梯度计算报告 1.2.1 目标 1.2.2 代码分析 1.2.4 计算结果 1.2.5 优势与意义 1.2.6 结论 1.3 一元函数梯度和二阶导…

写一段python程序,利用时间序列分析的方法,预测股价的趋势

要使用时间序列分析来预测股价趋势,你需要使用统计学方法来分析历史股价数据,并基于这些数据来预测未来的股价走势。以下是一个简单的Python程序,使用ARIMA(自回归积分滑动平均模型)来预测股价趋势。 首先,…

C++初阶——类和对象(中)

目录 1、类的默认成员函数 2、构造函数 3、析构函数 4、拷贝构造函数 5、赋值运算符重载函数 5.1 运算符重载 5.2 赋值运算符重载函数 6、取地址运算符重载函数 6.1 const成员函数 6.2 取地址运算符重载函数 1、类的默认成员函数 默认成员函数就是用户没有显式实现&a…

蓝牙电话-如何做到无人值守(方案探讨)

蓝牙电话-如何做到无人值守(方案探讨) 一、前言 在蓝牙电话出现和在市场上使用的过程中,有好多的客户和友商隐晦或含蓄的咨询,问说蓝牙方案及其构建的体系,能不能做到无人值守?就是那种因业务原因需要把设备…