【硬件架构的艺术】学习笔记(1)亚稳态的世界

2023-11-14

目录

 

1. 亚稳态

1.1 什么是亚稳态?

1.2 亚稳态窗口

1.3 避免亚稳态

1.3.1 使用多级同步器

1.3.2 使用时钟倍频电路的多级同步器

1.4 亚稳态测试电路

1.5 同步器的类型

1.6 亚稳态综合性建议


 

1. 亚稳态

1.1 什么是亚稳态?

在之前的文章中有介绍,直接调用链接。

【亚稳态、建立时间和保持时间】亚稳态的产生原因、危害及解决方法

1.2 亚稳态窗口

亚稳态窗口( Metastability Window) 具有特定的时间长度,在这段时间内输入信号和时钟都应该保持不变。如果它们发生变化,输出就可能变成亚稳态。如下图所示,建立时间和保持时间共同决定亚稳态窗口的宽度。

ef9021b7b40340ad83ed0d7e9278b930.png

窗口越大,进入亚稳态的概率越高。在大多数情况下,较新的逻辑器件会有更小的亚稳态窗口,也就意味着器件进入亚稳态的概率会更小。

亚稳态窗口可以看作需要数据稳定的时长,因此需要数据稳定的时长越长,就越难满足要求,也就越容易出现亚稳态。

1.3 避免亚稳态

如上面所述,每当违背建立、保持时间时,亚稳态就会出现。在以下条件中,信号可能违背时序要求。

  • 输入信号是异步信号。
  • 时钟偏移/摆动(上升/下降时间)高于容限值。
  • 信号在两个不同频率或者相同频率但是相位和偏移不同的时钟域下跨时钟域工作。
  • 组合延迟使触发器的数据输入在亚稳态窗口内发生变化。

亚稳态会引起过多的传输延迟和系统故障,所有的触发器和寄存器都存在亚稳态。虽然亚稳态不能根除,但是可以减小亚稳态发生的概率。

在最简单的情况下,设计人员可以通过确保时钟周期足够长来避免亚稳态,这个时钟周期要大于准稳态的解析时间,也要大于通往下一级触发器的路径上的任何逻辑延迟。虽然这种方法简单,但在大多数现代设计的性能要求下并不实用。另一种避免亚稳态的方法就是使用同步器。

1.3.1 使用多级同步器

避免亚稳态最常见的方法是在跨时钟域的信号上加上一个或者多个同步触发器,如下图所示。这种方法用一个完整的时钟周期来解决第一级同步触发器的亚稳态问题(不包括第二级触发器的建立时间)。但是这种方式增加了观察同步逻辑输入的延迟。

86d33089eb5a4d58a935ed7775f3b2ab.png

 

1.3.2 使用时钟倍频电路的多级同步器

多级同步器的一个局限就是系统需要花费较长的时间去响应异步输入。解决这个问题的办法就是使用倍频时钟作为两个同步触发器的时钟输入。Altera 的 FPGA 中具有这项称为时钟倍频的技术。

d1383db6887740918a2f5c9218ea9c2c.png

 

这种方法不仅能够让系统在一个系统时钟周期内响应一个异步输入,而且改善了MTBF。尽管这种倍频时钟能够降低MTBF,但是这个影响要超过两级触发器引起的偏移量。两种方法都不能保证同步器阻止亚稳态传播下去,它们仅仅减少了亚稳态发生的概率。

这里采用倍频时钟的是因为用快时钟去采样慢时钟是能够将数据采集完整的,不会出现遗漏的问题,也不一定需要倍频两倍,比源时钟快即可,一般数据从慢时钟域跨到快时钟域的时候,解决方式都是采用打两拍,也就是使用两级同步器。

1.4 亚稳态测试电路

每当触发器采样一个异步输入时,触发器输出都可能会产生一个不可预测的延迟,虽然这个概率很低。这不仅会在输人违反建立、保持时间要求时发生,而且在触发器接收新的输人这-一小段时序窗口内也会发生。在这些情况下,触发器都会进人亚稳态。

图1.8所描述的测试电路可以用来确定触发器的亚稳态特征。下图给出了有一个异步输入“async_ jin” 的触发器“FF、", 再由时钟“clk" 的上升沿触发。下图中所示的触发器“FFp”和“FFc”都在时钟下降沿触发,这样做是为了捕捉FF的亚稳态事件。

8db8e3d58fb845cdacff59e6d97b4d6d.png

 

当两个互补的信号分别传递到“FFB” 和“FFC”的输入时,无论“FFA”什么时候出现亚稳态事件,异或非( XNOR)门的输出都会变为高电平。在触发器“FF。” 输出端捕捉到高电平就表明已经检测到亚稳态事件。

测试电路中所有节点的时序如下图所示。

278408037ce14817ac1bd9aa54428491.png

 

因为解析触发器(“FFB" 和“FFc") 由时钟下降沿触发,所以可以通过改变时钟高电平的时间(Δt)来控制所要求的稳定时间。稳定时间tmet由下式确定

tmet =Δt - tACN

式中,tscN是最小时钟周期,等于tco (FFA的时钟到输出延迟) + 解析触发器(FFg 或FFc)的建立时间tsu。

减少解析时间或者稳定时间的方法之一就是给建立/保持时间处的数据集中加入抖动。

异或非的逻辑如下

相同为 1,不同为 0,在 FFA 输出经过一个反相器输出到 FFC,如果正常的话,输入到 FFB 和 FFC 的数值是相反的,如果出现了亚稳态则两个输出就会变成一样,从而导致异或非输出为 1,这样就可以达到检测电路是否出现亚稳态。

A

B

OUT

0

0

1

0

1

0

1

0

0

1

1

1

1.5 同步器的类型

一个异步输入电路的 MTBF 和用于从亚稳态恢复的时间呈指数关系。用同步器构成的时间缓冲器可以帮助从亚稳态中恢复。

要注意,一个异步信号不应该被两个或者多个同步器所同步( 这样做会存在多级同步器输出产生不同信号的风险)。本节介绍两级同步器的两种不同的模式:模式A和模式B。

模式A是一个标准的电路,当异步输入信号比时钟周期大得多时最有效。

 

48642701796d4ddfa01b1e23f9ca00c6.png

7117788929a941408582792d1a25b4c0.png

 

注意,即使异步输入在建立时间区间之外稳定,它仍然需要由时钟驱动产生两个周期的延迟,否则 FF1 可能进人亚稳态。

如果亚稳态在不到一个时钟周期内就解析了,FF2 就会有稳定的输入,否则就需要更深层的级联。

但是,模式A不能用于异步输入信号的宽度小于时钟周期的情况。在这种情况下要采用模式 B,如图所示。

da11b0970d48456ab1d654b7b3ff9564.png

 

注意,对于同步器的模式 B,第一级触发器的输人 D 与 Vcc 相连,同时时钟信号是异步输人信号。另外两个触发器直接由系统时钟(clk) 控制。一个短脉冲让 q1 变成高电平,这个高电平在经过两个时钟(clk) 沿后从 sync__out 输出。

总结了如下规则

  • 当信号必须跨时钟域工作时,要采用同步器。
  • 如果 clk1

个人理解是:如果需要跨时钟域的数据的宽度比时钟大的多,则使用模式 A,如果数据宽度比时钟小,这时候使用再用时钟去采的话会导致数据采样丢失部分,这时候采用模式 B 进行同步,根据之前所学的知识也可以知道,也可以使用 FIFO 或者握手机制的方式进行数据跨时钟域处理。

1.6 亚稳态综合性建议

在两个相互异步系统的交界面亚稳态是不可避免的。但是下面的几点建议可以明显减小亚稳态发生的概率。

  1. 采用同步器。
  2. 采用响应更快的触发器(缩短亚稳态窗口Tw)。
  3. 使用亚稳态硬化触发器(专为高宽带设计并且减少为时钟域输入电路而优化的采样时间)。
  4. 使用级联触发器(两个或者多个)作为同步器。如果一个触发器的亚稳态失败概率为P,那么N个触发器的亚稳态失败率就是P"。
  5. 减少采样速率。
  6. 避免使用dV/dt低的输入信号。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【硬件架构的艺术】学习笔记(1)亚稳态的世界 的相关文章

  • mysql数据库之跨表复制

    背景说明 目标库 target db 目标数据表 target tb 将目标库的制定表复制到当前数据库中 包括一下几个方面 一 表结构复制 仅仅复制了表的结构 没有数据 create table current db new tb like
  • Logitech G系鼠标脚本编程,实现鼠标自动定位控制

    利用罗技官方提供的API来写一个鼠标自动定位移动脚本 点击脚本编辑器中的帮助选项 查看罗技官方提供的API说明 有很多实现好的鼠标功能 G series Lua API V8 45 Overview and Reference 下面是我写的
  • 深入解析SpringBoot启动原理

    1 启动类中的SpringApplication run方法会创建一个SpringApplication的实例 并做一些初始化工作 SpringBootApplication Slf4j public class HuotuUserServ
  • Linux C编程基础:获取时间

    1 前言 对于linux下的编程 无论是用户态还是内核态 时间获取都是经常需要使用到的 以下分别从用户态和内核态整理了几个常用的时间获取接口 供编写代码时快速查阅 linux时间子系统的发展历史及详细介绍 可以参考 深入理解Linux时间子
  • stm32 机械周期_STM32定时器周期计算

    STM32定时器周期计算 公式是 1 TIM Prescaler 时钟 1 TIM Period F103配置生成1ms的时钟 1 35 36M 1 999 1MS TIM TimeBaseInitTypeDef TIM TimeBaseS
  • LeNet-5识别数字

    LeNet识别数字 前言 环境 实现 结果 前言 实现经典卷积神经网络LeNet LeNet 5 识别数字 这里将激活函数从sigmoid换成ReLU 参考资料 动手学深度学习 环境 python pytorch 实现 import tor

随机推荐

  • 设计模式八大原则知多少

    设计模式是一种通用的解决问题的经验 可以帮助我们设计出可重用 可维护和可扩展的软件 在设计模式中 有八个常见的原则 它们是 单一职责原则 SRP Single Responsibility Principle 一个类应该只有一个引起变化的原
  • AlexNet(深度学习模型)详解

    AlexNet是一种深度卷积神经网络 由Alex Krizhevsky Ilya Sutskever和Geoffrey Hinton于2012年在ImageNet图像分类竞赛中首次引入 这项竞赛是一个庞大的数据集 其中包含超过100万张图像
  • TP5学习(十三):其他

    一 缓存 设置 缓存支持采用驱动方式 所以缓存在使用之前 需要进行连接操作 也就是缓存初始化操作 options 缓存类型为File type gt File 缓存有效期为永久有效 expire gt 0 缓存前缀 prefix gt th
  • 快速排序和快速选择

    用同样的划分 完成不同的目的 快速排序在 的平均时间复杂度完成排序 快速选择在 的平均时间复杂度找出第 k 大的元素 因为 quickSelect 只需要对划分的其中一边递归 int partition int a int l int r
  • 如何在visio2010的框图中插入公式?

    如何在visio2010的框图中插入公式 其实很简单 也没必要下载Mathtype 先在world中用自带的公式编辑器将公式写好 如下图 此时选中公式 博文已经迁移到个人主页https guangmujun cn archives 143
  • SpringAOP+自定义注解模拟shiro框架实现

    一 概念 权限管理就是管理用户对于资源的操作 本 CRM 系统的权限 也称作资源 是基于角色操作权限来实现的 即RBAC Role Based Access Control 基于角色的访问控制 就是用户通过角色与权限进行关联 简单地说 一个
  • iOSWebview与js交互之调整字体大小

    先看效果图 iOS开发经常会跟Webview交互 主要调用的就是stringByEvaluatingJavaScriptFromString这个方法 也可以在 BOOL webView UIWebView webView shouldSta
  • NAT网关和NAT穿越原理

    转自 https blog csdn net chance yin article details 37913963 一 原理图 1 背景信息 1 我们模拟的情形是位于网络A下的内网主机UserA 想要和位于网络B下的内网主机UserB进行
  • 网页HTML5制作flex布局骰子,CSS3的Flexbox骰子布局的实现及分析

    这篇文章主要介绍了关于CSS3的Flexbox骰子布局的实现及分析 有着一定的参考价值 现在分享给大家 有需要的朋友可以参考一下 骰子布局顾名思义 就是好比骰子的一面最多可以放置9个点 而每个面放置的点数正好就是一个布局的模型图 这里我们就
  • 网站漏洞怎么修复代码漏洞

    jeecms 最近被爆出高危网站漏洞 可以导致网站被上传webshell木马文件 受影响的版本是jeecms V6 0版本到jeecmsV7 0版本 该网站系统采用的是JAVA语言开发 数据库使用的是oracle mysql sql数据库
  • python 类self详解

    class Box object def init this boxname size color this boxname boxname this size size this color color self就是用于存储对象属性的集合
  • PnP 问题

    欢迎访问我的博客首页 PnP 问题 1 DLT 2 P3P 3 G2O 求解 PnP 3 1 单目 3 2 双目 4 自定义顶点与边优化内参 4 1 二元边 4 2 三元边 4 3 总结 5 参考 PnP Perspective n Poi
  • C/C++ 头文件路径在编译时及工具中的设置

    使用 C CPP 避免不了要和各种头文件打交道 系统库还好 基本上不需要操心 已经被自动预置入头文件列表中了 棘手的是使用第三方库 这时就要手动指定其头文件位置与库文件位置 本文记录下在终端中手工编译与某些工具内编译的设置方式 终端中使用
  • arm 堆栈

    先转一篇 stm32 堆和栈 stm32 Heap Stack worldsing笔记 stm32堆栈 slj win的博客 CSDN博客 关于堆和栈已经是程序员的一个月经话题 大部分有是基于os层来聊的 那么 在赤裸裸的单片机下的堆和栈是
  • 根据印刷行业的特点,整理出MES管理系统解决方案

    印刷行业中 与ERP管理系统相关的功能模块主要包含销售预测 生产计划 物料需求等 作为ERP系统的下层信息系统 MES生产执行系统的计划执行来源于上层ERP系统中的生产订单 并在MES生产执行系统中生成生产任务单 然后分配到相应的生产车间
  • 未能连接服务器1004,FAILURE:Error Domain = NSURLErrorDomain Code = -1004"无法连接到服务器。"...

    在此之前 我想列出我已阅读的帖子并尝试实施答案 避免重复 我正在开发SDK 我已经创建了一些UI测试 我试图不连接到后端系统并通过在测试时在本地机器上运行的存根服务器来模拟它们 所有请求都必须转到此服务器 我创建了一个永远不会提交到App
  • 微信AR教程|鼓浪屿趣味地图

    KIVICUBE教程 鼓浪屿WebAR趣味地图 01 场景构想 首先需要注册kivicube账号 kivicube是一个WebXR在线制作工具 帮助用户通过在线可视化编辑即可快速制作AR场景 并可一键发布至web与微信小程序两个端口 通过微
  • 【hello C++】类和对象(下)

    目录 1 再谈构造函数 1 1 构造函数体赋值 1 2 初始化列表 1 3 explicit关键字 2 static成员 2 1 概念 2 2 特性 3 友元 3 1 友元函数 3 2 友元类 4 内部类 5 匿名对象 6 拷贝对象时的一些
  • 用sort 对结构体排序

    思路 先定义一个你想要的结构体 然后再自定义一个cmp函数 根据需要来进行大小比较的判断 最后在main函数中通过sort xxx xxx n cmp 来进行判断即可 实例 struct people string name string
  • 【硬件架构的艺术】学习笔记(1)亚稳态的世界

    目录 1 亚稳态 1 1 什么是亚稳态 1 2 亚稳态窗口 1 3 避免亚稳态 1 3 1 使用多级同步器 1 3 2 使用时钟倍频电路的多级同步器 1 4 亚稳态测试电路 1 5 同步器的类型 1 6 亚稳态综合性建议 1 亚稳态 1 1