优化时钟网络之时钟偏移

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~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

npm镜像的常用操作

查看当前配置的 npm 镜像 npm config get registry切换官方镜像 npm config set registry https://registry.npmjs.org/切换淘宝镜像(推荐) npm config set registry https://registry.npmmirror.com/切换腾讯云镜像 npm config set registry http://mirrors.cloud.tencent…

Notepad++ 最新官网中文版在线下载 附文本编辑器安装与基础使用教程

Notepad (记事本)是一个简单的文本编辑器,预装在所有版本的 Microsoft Windows 操作系统中。它的主要功能是创建、编辑和存储纯文本文件,通常以 .txt 格式保存。Notepad 的设计旨在提供一个轻量级的文本处理工具,适合快…

Deprecated Gradle features were used in this build

前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 今天我使用gradle搭建springboot项目使用,报警告Deprecated Gradle features were used in this build, making it inco…

crond 任务调度 (Linux相关指令:crontab)

相关视频链接 crontab 进行 定时任务 的设置 概述 任务调度:是指系统在某个时间执行的特定的命令或程序 任务调度的分类: 1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等。 2.个别用户可能希望执行某些程序,比如…

比流计算资源效率最高提升 1000 倍,“增量计算”新模式能否颠覆数据分析?

作者 | 关涛 云器科技CTO 数据平台领域发展 20 年,逐渐成为每个企业的基础设施。作为一个进入“普惠期”的领域,当下的架构已经完美了吗,主要问题和挑战是什么?在 2023 年 AI 跃变式爆发的大背景下,数据平台又该如何演…

区块链技术在供应链管理中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 区块链技术在供应链管理中的应用 区块链技术在供应链管理中的应用 区块链技术在供应链管理中的应用 引言 区块链技术概述 定义与…

微搭低代码入门01变量

目录 1 变量的定义2 变量的赋值3 变量的类型4 算术运算符5 字符串的连接6 模板字符串7 检查变量的类型8 解构赋值8.1 数组的解构赋值8.2 对象的解构赋值 9 类型转换9.1 转换为字符串9.2 转换为数字9.3 转换为布尔值 总结 好些零基础的同学,在使用低代码的时候&#…

大数据机器学习算法与计算机视觉应用04:多项式

The Algorithm Magic of Polynomial PolynomialsThe Root of PolynomialA Delete ChannelPolynomials for Finding Maximum Matchings Polynomials 多项式 一个 d d d 次多项式可以用一个 d 1 d1 d1 元组 c i {c_i} ci​ 表达。在这种情况下,两个多项式相加的…

【Vue】Vue3.0(十九)Vue 3.0 中一种组件间通信方式-自定义事件

文章目录 一、自定义事件概念及使用场景二、代码解释三、新的示例 一、自定义事件概念及使用场景 概念 在 Vue 3.0 中,自定义事件是一种组件间通信的机制,允许子组件向父组件传递数据或触发父组件中的操作。子组件通过defineEmits函数定义可以触发的事件…

单片机入门知识

1单片机系统的int是16位 计算机系统的int是32位(数据总线) 2的16次方是65536 所以在单片机中,如果表示一个正整数,这个数字的范围是0~65535,总共有65536种可能 2内存条用于存储计算机运行时的数据,是连接…

【高等数学】6向量与空间几何

1. 向量及其运算 1.1. 单向量的计算 向量的模的计算 单位向量的计算 1. 计算模: 2. 向量除以它的模: 1.2. 向量的点乘 点乘的计算 点乘:算出来的是一个数,所以点乘又称为向量的数量积。 向量点乘的计算公式: 向量的夹角计算 向量的夹角公式: 向量间平行垂直的…

Linux进程信号(信号的产生)

目录 什么是信号? 信号的产生 信号产生方式1:键盘 前台进程 后台进程 查看信号 signal系统调用 案例 理解进程记录信号 软件层面 硬件层面 信号产生方式2:指令 信号产生方式3:系统调用 kill系统调用 案例 其他产生信号的函数调用 1.rais…

7.qsqlquerymodel 与 qtableview使用

目录 qtableview 委托QStyledItemDelegateQAbstractItemDelegateCheckBoxItemDelegate使用qtableview控制列宽,行高,隐藏拖拽行列 qtableview 委托 //设置单元格委托 void setItemDelegate(QAbstractItemDelegate *delegate); QAbstractItemDelegate *it…

利用 Avalonia UI 构建 Blazor 混合应用程序

Blazor 是一个 .NET 前端框架,用于仅使用 .NET 技术构建 Web 应用程序。2021 年,Blazor 扩展到桌面端,推出了 Blazor Hybrid(混合),使开发者可以在桌面平台上使用已有的技能。 Blazor 混合应用程序是传统的…

MFC中Excel的导入以及使用步骤

参考地址 在需要对EXCEL表进行操作的类中添加以下头文件:若出现大量错误将其放入stdafx.h中 #include "resource.h" // 主符号 #include "CWorkbook.h" //单个工作簿 #include "CRange.h" //区域类,对Excel大…

【深入浅出】Linux进程(三)

📃博客主页: 小镇敲码人 💚代码仓库,欢迎访问 🚀 欢迎关注:👍点赞 👂🏽留言 😍收藏 🌏 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧…

2024 第五次周赛

A: 直接遍历即可 #include<bits/stdc.h> using namespace std;typedef long long ll; typedef pair<ll, ll>PII; const int N 2e6 10; const int MOD 998244353; const int INF 0X3F3F3F3F;int n, m; int main() {cin >> n;int cnt 0;for(int i 0; i …

gitlab无法创建合并请求是所有分支都不显示

点击Merge Requests ------> New merge request 创建新的合并请求时&#xff0c;在Source branch和Target branch中一个分支都不显示 排查思路&#xff1a; 1.怀疑是权限问题。 发现只有我的一个账号出现&#xff0c;检查了账号的权限&#xff0c;尝试了master、develop角色…

Linux中给普通账户一次性提权

我在以前文章中Linux常见指令大全&#xff08;必要知识点&#xff09;-CSDN博客 写过sudo的概念与用法。其实本质就是提权用的但是在某些场景下就算提权了也不能使用。 例如&#xff1a;打开主工作目录 他不相信你这个用户&#xff0c;虽然你是erman 解决方法 使用root账号打开…

【C++】—掌握STL string类:string的模拟实现

文章目录 &#x1f49e;1.浅拷贝&#x1f49e;2.深拷贝&#x1f49e;3. string类的模拟实现&#x1f49e;3.1 string的构造函数&#x1f49e;3.2 string的析构函数&#x1f49e;3.3 string的拷贝构造&#x1f49e;3.4 string的size&#x1f49e;3.5 string的operator[]&#x1…