数字设计小思 - 谈谈非理想时钟的时钟偏差

news2024/11/26 21:23:38

写在前面

本系列整理数字系统设计的相关知识体系架构,为了方便后续自己查阅与求职准备。在FPGA和ASIC设计中,时钟信号的好坏很大程度上影响了整个系统的稳定性,本文主要介绍了数字设计中的非理想时钟的偏差来源与影响。

(本文长度约三千字,请耐心阅读,本人水平有限,如有纰漏与错误,欢迎留言讨论)

理想时钟

在数字设计中的理想时钟如下图所示:

理想时钟

理想时钟的特点如下:

  • 时钟无重叠: 任意时刻下, Φ 与Φ非的与恒为零;
  • 全轨输出: VDD - V(Φ) = V (Φ非);
  • 时钟无延迟、无偏斜、无抖动

非理想性时钟

在数字设计中的非理想时钟如下图所示,和理想时钟相对立,如果不满足上述的理想时钟的相关特点,可认为其实一个非理想时钟。

非理想性时钟

对上图进行分析,假设CLK1、CLK2是同一个时钟树下的不同时钟,此时,两个时钟边沿的时间差就为时钟偏斜,同时,对于某一个时钟,在时钟变化边沿时,会有一定的随机性,所以这里随机的时钟周期变化叫做时钟抖动。

假设CLK1是CLK2的前级时钟,所以上图中两个时钟的边沿的时间差即为时钟延迟。

在上图中其实不能很准确体现出时钟延迟和时钟偏斜的概念区别,贴出另外一个图以供参考:

在下图中很容易理解时钟延迟和时钟偏斜的概念:

  • 时钟延迟(clock latency)是指从时钟源到终点所花费的总时间。

  • 时钟偏斜(clock skew)是指到达不同时钟树终点的时间差。

时钟偏斜主要来自时钟在空间上的不期望变化,时钟延迟和时钟抖动主要来自时钟在时间上的不期望变化。

时钟延迟(clock latency)

时钟延迟(clock latency)是指从时钟源到终点所花费的总时间,主要针对的是一个时钟,从时钟源端输出到所驱动的器件的时钟输入端的时间延迟。

时钟偏斜(clock skew)

时钟偏斜(clock latency)是一对物理时钟的标称时间差与实际时间差之间的区别。理想情况下,时钟应同时到达系统中所有的钟控元件(锁存器、触发器、存储器和动态门等),这样系统才有一个共同的参考时间。实际中,时钟到达各点的时间稍微有些差别,这个差别就叫时钟偏斜

两个不同时钟的时钟延迟,就是时钟偏斜。

时钟偏斜发生在两个时钟信号之间,一般不会引起电路实际时钟周期的变化,只会导致时钟相位的偏移;时钟抖动可以发生在一个时钟信号自身,会引起时钟周期的变化

时钟偏斜与时钟抖动统称为时钟偏差,二者之和也叫时钟不确定性(uncertainty)。边沿之间的时钟抖动有时也被归于与时间相关的时钟偏斜。

时钟抖动(clock jitter)

时钟抖动(clock jitter) 是指芯片的某一个给定点上时钟边沿发生暂时的随机变化,会导致时钟周期的缩短或加长。

时钟抖动

边界间抖动(edge-to-edge) :时钟边沿相对与理想时钟边沿的最大变化值,实际上是随时间变化的时钟偏斜。

 边界间抖动

长周期抖动(k-cycle):数个周期后边沿之间的最大变化值,主要影响芯片间的时序同步,也叫绝对抖动。

长周期抖动

周期间抖动(cycle-to-cycle) :相邻时钟周期间的时变偏离,主要影响芯片内时序同步,也叫相对抖动。

周期间抖动

随机抖动(random jitter):由器件和导线的固有噪声(如热噪声) 所致,为高斯分布,用均方根值(RMS)表征,无法预估。

随机绝对抖动的高斯分布

确定性抖动 (deterministic jitter): 确定性抖动由非理想传输效应、串扰、电源浪涌等所致,为非高斯分布,用峰峰值表征,可以预估。

在逻辑综合前,常采用理想时钟(逻辑时钟)+预设偏差的方式来模拟真实时钟;在物理设计时,完成实际时钟(物理时钟)的设计,其偏差必须满足系统要求。

  • 逻辑时钟(logical clock) :没有时钟偏斜的理想时钟,逻辑设计者在用硬件描述语言描述系统行为时使用。
  • 物理时钟(physical clock) :带有时钟偏斜的实际时钟,为了使系统达到预期行为,设计者不得不在时钟偏差、功耗、金属化资源利用率和设计代价之间寻求均衡。
  • 全局时钟(global clock) :为整个系统提供基准的单一时钟。

布线对时序的影响

同一个时钟下,驱动不同的触发器,都需要在实际设计时候都需要进行布线,所以不同的触发器之间布线长短也会有一定差异。

布线方向的影响:正偏差

时钟布线方向与数据通过流水线方向一致会使得时钟正偏差,也即,tskew > 0 。

好处:可采用更短的时钟周期从而得到更高的时钟频率,有利于提高数据通过率。

坏处:需采用更长的保持时间,以免出现冒险竞争。

布线方向的影响:负偏差

时钟布线方向与数据通过流水线方向相反会使得时钟负偏差,也即,tskew < 0 。

好处:冒险竞争不易发生,提高了电路的健壮性。

坏处:加长了最小时钟周期从而降低了时钟频率,不利于提高数据通过率。

布线方向的影响:双向电路

时钟布线方向与数据通过流水线方向可能相同也可能相反,从而使正负偏差都存在。

一个较为理想的设计目标是使正、负偏差都很小,零偏差最好。

时钟偏差的来源

时钟偏差的来源大致如下图所示:

时钟偏差分析

结合上图中的引起时钟偏差来源,大致可对时钟偏差进行分类,系统偏差、随机(random)偏差、漂移(drift)偏差、抖动(jitter)偏差,不同类型的偏差的原因如下:

  • 系统(systematic)偏差:时钟产生器、时钟门控器、电容负载、互连线的偏差,可预估并通过设计来纠正。

  • 随机(random)偏差:工艺离散引起元器件和互连线参数的随机变化,无法预估,但可以测试,并用可校准延时元件来补偿。

  • 漂移(drift)偏差:与时间有关的环境因素(如温度随时间变化、温度的空间梯度变化)变化所致,也可补偿,但需实时。

  • 抖动(jitter)偏差:高频环境变化(如电源浪涌、串扰)导致的电路延时随时间和空间的变化,最难以防范,因补偿电路来不及对它进行响应。

下面针对其中几个原因进行举例分析。

时钟线长度不一引入偏差

由于时钟在驱动不同单元时,不同单元布局分布在不同区域,所以使得时钟扇出的信号进行实际布线的长度长短不一,从而引起了时钟偏差,如下图所示,La和Lb长度不同,所以时钟对应到单元A和单元B的时钟延迟不同,使两个单元的时钟存在偏斜。

电源变化引入偏差

Itanium 2 处理器芯片电源电压的空间分布:1.2V标称电源电压下的最大变化为±100mV,由此导致的延时变化为13%/100mV。

Itanium 2电源电压的空间分布

温度变化引入偏差

对Itanium 2的仿真结果表明,温 度在芯片上的非 均匀分布达到 20℃时,会导致 1.5%的延时变化。

工艺变化引入偏差

工艺上变化也会引入时钟的偏差,如沟道长度、阈值电压和片上误差。

沟道长度: Itanium 2的标称值为180nm,工艺离散导致的偏差可能高达±12.5nm,这会导致±10%的延时变化。

阈值电压:0.18um工艺下,小nMOS管(W<12.5um)、小pMOS管、 大nMOS管、大pMOS管的标准偏差分别为16.8、14.6、7.9、3.5mV, 这会导致一个标准偏差为2%的延时分布。

片上误差 (on-chip variation, OCV)空间分布,相同的缓冲器单元因所处芯片位置 不同而产生的延迟误差。

门控器引入偏差

反相器链的延迟差以及C1与C2的差会导致时钟偏斜|t2 -t1 | 。采用逻辑努力技术合理设计反相器链的级数及门间面积比,可减少乃至消除此偏差。

下图的D锁存器的时钟偏斜来源于反相器的延迟以及C1与C2的差。通过调整两个NOR2门的面积 比,可对时钟偏斜进行补偿。

负载变化引入偏差

负载变化会引入时钟偏差,栅电容与所加电压有关,时钟负载与锁存器/寄存器的当前状态及下一个状态有关。如下图所示,不同电平变化会影响时钟负载的微小变化。

总结

  1. 时钟延迟(clock latency) 是指从时钟源到终点所花费的总时间。时钟偏斜(clock skew) 是指到达不同时钟树终点的时间差。时钟抖动(clock jitter) 是指芯片的某一个给定点上时钟边沿发生暂时的随机变化,会导致时钟周期的缩短或加长。
  2. 时钟偏斜 主要来自时钟在空间上的不期望变化,时钟延迟和时钟抖动 主要来自时钟在时间上的不期望变化。
  3. 时钟偏斜发生在两个时钟信号之间,一般不会引起电路实际时钟周期的变化,只会导致时钟相位的偏移;时钟抖动可以发生在一个时钟信号自身,会引起时钟周期的变化
  4. 时钟偏斜与时钟抖动统称为时钟偏差,二者之和也叫时钟不确定性(uncertainty)。边沿之间的时钟抖动有时也被归于与时间相关的时钟偏斜。
  5. 布线方向会对时序造成正负偏差的影响,一个较为理想的设计目标是使正、负偏差都很小,零偏差最好。
  6. 时钟偏差分为,系统偏差、随机(random)偏差、漂移(drift)偏差、抖动(jitter)偏差,不同偏差的原因不同,可通过合理的设计将相应的影响规避或影响降至最低。

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

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

相关文章

数据结构-排序-(直接插入、折半插入、希尔排序、冒泡、快速排序)

目录 一、直接插入排序 二、折半插入排序 三、希尔排序 四、冒泡排序 五、快速排序 *效率分析 一、直接插入排序 思想&#xff1a;每次将一个待排序的记录按其关键字大小插入到前面已经排好序中&#xff0c;直到全部记录插入完毕 保证稳定性 空间复杂度&#xff1a;O(1…

SpringBoot 基本介绍--依赖管理和自动配置--容器功能

目录 SpringBoot 基本介绍 官方文档 Spring Boot 是什么? SpringBoot 快速入门 需求/图解说明 完成步骤 创建MainApp.java SpringBoot 应用主程序 创建HelloController.java 控制器 运行MainApp.java 完成测试 快速入门小结 Spring SpringMVC SpringBoot 的关系 梳…

【论文阅读】RapSheet:端点检测和响应系统的战术来源分析(SP-2020)

Tactical Provenance Analysis for Endpoint Detection and Response Systems S&P-2022 伊利诺伊大学香槟分校 Hassan W U, Bates A, Marino D. Tactical provenance analysis for endpoint detection and response systems[C]//2020 IEEE Symposium on Security and Priva…

【YOLO系列】--YOLOv5网络结构超详细解读/总结

前言 官方源码仓库&#xff1a;GitHub - ultralytics/yolov5: YOLOv5 &#x1f680; in PyTorch > ONNX > CoreML > TFLite YOLOv5至今没有论文发表出来&#xff0c;YOLOv5项目的作者是Glenn Jocher并不是原作者Joseph Redmon。作者当时也有说准备在2021年的12月1号之…

linux pl320 mbox控制器驱动分析 - (1) pl320手册分析

linux pl320 mbox控制器驱动分析 1 pl320简介1.1 pl320用途1.2 pl320 IPCM 由以下部分组成&#xff1a;1.3 pl320 IPCM可配置的参数1.4 功能操作1.5 IPCM 操作流程1.6 Channel ID 2 Using mailboxes&#xff08;使用邮箱中断&#xff09;2.1 Defining source core2.2 Defining …

JNI中GetObjectArrayElement, GetStringUTFChars,ReleaseStringUTFChars函数讲解

文章目录 GetObjectArrayElement函数使用场景代码演示GetStringUTFChars 函数使用场景ReleaseStringUTFChars函数 GetObjectArrayElement函数 函数原型&#xff1a; jobject GetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index); Returns an element of a J…

STL容器之deque

文章目录 deque容器简介deque的操作 deque容器简介 deque是“double-ended queue”的缩写&#xff0c;和vector一样都是STL的容器 deque是双端数组&#xff0c;而vector是单端的deque在接口上和vector非常相似&#xff0c;在许多操作的地方都可以直接替换deque可以随机存取元…

C语言-【操作符二】

Hello&#xff0c;大家好&#xff0c;前面的文章里边介绍了算术、赋值以及移位操作符&#xff0c;这篇文章呢&#xff0c;就介绍一下C语言中的其他操作符吧&#xff5e; 目录 位操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用&#xff0c;函…

C++11多线程:windows临界区和Linux互斥锁、递归锁的区别与使用。

文章目录 前言一、windows临界区1.1 基本概念1.2 函数使用 二、使用步骤1.代码示例1 总结 前言 多线程windows临界区和Linux互斥锁 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、windows临界区 1.1 基本概念 Linux下有递归锁&#xff0c;递归锁…

着重讲解一下自动化测试框架的思想与构建策略,让你重新了解自动化测试框架

目录 序言&#xff1a; 一、简述自动化测试框架 二、自动化测试框架思想 三、构建自动化测试框架的策略 四、自动化测试框架的发展趋势 序言&#xff1a; 也许到现在大家对所谓的“自动化测试框架”仍然觉得是一种神秘的东西&#xff0c;仍然觉得其与各位很远&#xff1b;…

【JavaScript】ES6新特性(1)

1. let 声明变量 let 声明的变量只在 let 命令所在的代码块内有效 块级作用域 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…

08-04 中间件和平台运行期监控

缓存中间件的三大坑 缓存击穿 用户访问热点数据&#xff0c;并且缓存中没有热点数据&#xff0c;大量访问直接到DB&#xff0c;热点击穿采用Canal做数据异构方案&#xff0c;把数据库中的值全部放到缓存热点缓存策略&#xff1a;通过分析调用日志获取热点数据&#xff0c;放到…

PMP项目管理-[第十一章]风险管理

风险管理知识体系&#xff1a; 规划风险管理&#xff1a; 识别风险&#xff1a; 实施定性风险分析&#xff1a; 实施定量风险分析&#xff1a; 监督风险&#xff1a; 11.1 风险 定义&#xff1a;是一种不确定的事件或条件&#xff0c;一旦发生&#xff0c;就会对一个或多个项目…

Elasticsearch(二)

Clasticsearch&#xff08;二&#xff09; DSL查询语法 文档 文档&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html 常见查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数据&#xff0c;一般测试用。如&#xff1a…

eNSP模拟器下VRRP+MSTP实验配置

①&#xff1a;底层配置&#xff1a; vlan trunk 略 ②&#xff1a;MSTP配置&#xff1a; 所有交换机&#xff1a; stp region-configuration region-name aa revision-level 1 instance 1 vlan 2 to 3 instance 2 vlan 4 to 5 active region-configuration 核心1&…

Java笔记_21(网络编程)

Java笔记_21 一、网路编程1.1、初始网络编程1.2、网络编程三要素1.3、IP1.4、端口号1.5、协议1.6、UDP协议 一、网路编程 1.1、初始网络编程 什么是网络编程 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输。 应用场景:即时通信、网游对战…

(一)SAS初识

1、SAS常用工作窗口 “结果”&#xff08;Result&#xff09;窗口——管理SAS程序的输出结果&#xff1b; “日志”&#xff08;Log&#xff09;窗口——记录程序的运行情况&#xff1b; “SAS资源管理器”&#xff08;Explore&#xff09;窗口&#xff1b; “输出”&#xff0…

洛谷P1217-回文质数 Prime Palindromes

洛谷P1217-回文质数 Prime Palindromes 这个题目我做出来了但是超时了&#xff0c;时间复杂度有点高&#xff0c;主要是因为我用了大量的循环&#xff0c; 所以我这个是比较暴力的解法&#xff0c;下面我分析我的暴力代码 首先是判断回文数的函数 第一步将标识传入参数是不是…

[数据集][目标检测]篮球数据集VOC格式7398张

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;7398 标注数量(xml文件个数)&#xff1a;7398 标注类别数&#xff1a;1 标注类别名称:["basketball"]…

详解MNIST数据集下载、解析及显示的Python实现

Content MNIST数据集基本介绍下载MNIST数据集到本地解析MNIST数据集显示MNIST数据集中训练集的前9张图片和标签 随着图像处理、计算机视觉、机器学习&#xff0c;甚至深度学习的蓬勃发展&#xff0c;一个良好的数据集作为学习和测试相关算法非常重要。MNIST数据集对于想要学习和…