当前位置: 首页 > news >正文

《硬件架构的艺术》读书笔记:Chapter 1 亚稳态的世界

Chapter 1 亚稳态的世界

chapter1_亚稳态的世界

一、简介

  • 同步系统中,数据和时钟有固定的因果关系(在同一时钟域(Clock Domains))中,只要数据和时钟满足建立时间和保持时间的要求,不会产生亚稳态(meastable)

    静态时序分析(STA) 就是基于同步电路设计模型而出现的,其目的一方面是增加同步时钟的稳定性,从而减少亚稳态的发生,另一方面通过附加约束可以控制逻辑的综合(DC)、映射(Map)、布局(Place)、布线(Route),以减少逻辑和布线延时,从而提高工作频率。

  • 异步系统中,数据和时钟关系不固定,可能违反建立保持时间,就会输出介于两个有效状态之间的中间级电平,且无法确定停留在中间状态的时间,或者过了一定的延迟后才能正常转换,这就是亚稳态

二、亚稳态理论

1.产生原因及现象

  • 亚稳态产生原因:违背了触发器的建立时间或保持时间。
  • 现象:触发器的输出产生毛刺(输出在高低电平之间波动),或者暂时保持在不稳定状态且需要较长时间才能回到稳定状态。

image-20230317200051333

tsu:建立时间(setup time)

th:保持时间(hold time)

tco:时钟到输出的延迟(clock-to-output delay)

tMET:亚稳态输出恢复到稳定状态所需的超过tco的额外时间部分(settling time)

  • 并非所有不满足建立时间和保持时间的输入变化都会导致亚稳态,触发器是否进入亚稳态和返回稳态的时间还取决于生产工艺和外界环境。
  • 一般来说,触发器在进入亚稳态之后,一两个周期就会回到稳态

2.同步失败

​ 如下图,信号在一个时钟域(src_data_in)里变换,在另一个时钟域(dest_data_in)内采样,导致输出变成亚稳态。

image-20230317202127933

三、亚稳态窗口

image-20230317202219028
  • 亚稳态窗口(Metastability Windows)具有特定的时间长度,在这段时间内输入信号的数据保持不变。如果发生变化,输出就可能编程亚稳态。如上图1.4所示,建立时间和保持时间共同决定了亚稳态窗口的宽度。

  • 窗口越大,进入亚稳态的概率越大,因此一般新的逻辑器件都会有更小的亚稳态窗口。

四、计算MTBF(故障率倒数)

  • MTBF(Mean/Average Time Between Failures,平均无故障时间),即故障率倒数.

  • 对于单级同步器
    1FailureRate=MTBF1=e(tr/τ)Wfcfd\frac{1}{FailureRate}=MTBF_1=\frac{e(t_r/\tau)}{Wf_cf_d} FailureRate1=MTBF1=Wfcfde(tr/τ)

    公式成立条件:该同步器具有跟定的时钟频率,并且在该时钟周期内具有均匀概率密度

​ 式中,tr=t_r=tr=允许超出器件正常传输延迟时间的解析时间

τ=\tau=τ=触发器的亚稳态(解析)时间常数

W=W=W=亚稳态窗口

fc=f_c=fc=时钟频率

fd=f_d=fd=异步信号边沿频率

  • 对于两级同步器
    MTBF2=e(tr1/τ)Wfcfd×e(tr2/τ)MTBF_2=\frac{e(t_{r1}/\tau)}{Wf_cf_d}×e(t_{r2}/\tau) MTBF2=Wfcfde(tr1/τ)×e(tr2/τ)
    tr1t_{r1}tr1是第一级同步器的解析时间

    tr2t_{r2}tr2是第二级同步器的解析时间

可以看出,增大同步级数可以显著提高MTBF

五、避免亚稳态

  • 避免亚稳态,当然要从能造成亚稳态的条件入手——违背建立/保持时间,以下条件中,信号可能违背时序要求:

    • 输入信号是异步信号

    • 时钟偏移(Clock Skew)和时钟抖动(Clock jitter 上升/下降时间)高于容限值。

    • 信号在两个不同频率或者相同频率但是相位和偏移不同的时钟域下跨时钟工作。

    • 组合延迟使触发器的数据输入在亚稳态窗口内发生变化。

  • 亚稳态不能根除,但是可以减小亚稳态发生的概率。

  • 最简单的情况下减小亚稳态概率的方法:确保时钟周期足够长,但是会影响性能,并不实用

另一种避免亚稳态的方法就是使用同步器:

1.使用多级同步器

  • 避免亚稳态最常见的方法:在跨时钟域的信号上加一个或多个同步触发器。

    **缺点:**增加了观察同步逻辑输入的延迟。

image-20230317214242801

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

  • 多级同步器**缺点:**系统需要花较长时间去响应异步输入。

    **解决方法:**使用倍频时钟作为两个同步触发器的时钟输入。Altera的FPGA中就具有这项技术。

image-20230317214346141

​ 这样不仅能让系统一个周期响应一个异步输入,而且改善了MTBF。然而倍频时钟会降低MTBF,这个影响比两个触发器引起的偏移 量要大。

​ 两种方法都不能保证同步器阻止亚稳态传播下去,它们仅仅减少了亚稳态发生的概率

3.消除亚稳态常用方法

  • 对异步信号进行同步处理;
  • 采用FIFO对跨时钟域数据通信进行缓冲设计;
  • 对复位电路采用异步复位、同步释放方式处理。

六、亚稳态测试电路

image-20230317214936072

图中,asynv_in的触发器FFAFF_AFFA是时钟上升沿触发,FFBFF_BFFBFFCFF_CFFC都在时钟下降沿触发,这样做是为了捕捉FFAFF_AFFA的亚稳态事件。

  • 当发生亚稳态时,异或非门会输出高电平,所以FFDFF_DFFD捕捉到高电平就代表检测到亚稳态,时序图如下。
image-20230317215547807
  • 由于FFBFF_BFFBFFCFF_CFFC两个触发器是下降沿触发,所以高电平时间减去FFAFF_AFFAtcot_cotcoFFBFF_BFFBFFCFF_CFFC的建立时间等于稳定时间tMETt_{MET}tMET

tMET=Δt−tACNt_{MET} = \Delta t \ -\ t_{ACN} tMET=Δt  tACN

七、同步器的类型

一个异步信号不应被两个或者多个同步器所同步,一开始不太理解这句话,google了一下:一个信号扇出到多个同步器之后同步所需的时间不同,可能出现竞争冒险。

  • **模式A:**当异步输入信号比时钟周期大得多时最有效:下面这张图才应该是模式A,图标错了。
image-20230317220152589

**模式B:**第一级触发器输入直接与Vcc相连,输入信号直接连触发器时钟。输入信号短脉冲把q1置为1之后,便会一直保持,直到输出高电平。下面这张图才是模式B。

image-20230317220255283
  • 总结:

    • 信号跨时钟,要采用同步器。

    • clk1<clk2,采用模式A,否则采用模式B。

八、亚稳态/综合性建议

  • 采用同步器。
  • 采用响应更块的触发器(缩短亚稳态窗口TWT_WTW)。
  • 使用亚稳态硬化触发器 (专为高宽带设计并减少为时钟域输入电路而优化的采样时间)。
  • 如图1.6所示,使用级联触发器(两个或多个)作为同步器。如果一个触发器的亚稳态失败概率为PPP,那么N个触发器的亚稳态失败率就是PNP^NPN
  • 减少采样速率。
  • 避免使用 dV/dt 低的输入信号。

九、[整理]跨时钟域处理方法总结

  • 见另一博客跨时钟域CDC
  • 转载自mhq_martin 亚稳态的产生机理、消除办法 (可以理解为什么打拍)

相关文章:

《硬件架构的艺术》读书笔记:Chapter 1 亚稳态的世界

Chapter 1 亚稳态的世界 一、简介 同步系统中&#xff0c;数据和时钟有固定的因果关系(在同一时钟域(Clock Domains))中&#xff0c;只要数据和时钟满足建立时间和保持时间的要求&#xff0c;不会产生亚稳态(meastable) 静态时序分析(STA) 就是基于同步电路设计模型而出现的&am…...

开箱即用的密码框组件

写了一个小玩具&#xff0c;分享一下 - 组件功能&#xff1a; 初次进入页面时&#xff0c;密码隐藏显示&#xff0c;且无法查看真实密码 当修改密码时&#xff0c;触发键盘&#xff0c;输入框则会直接清空 此时输入密码&#xff0c;可以设置密码的隐藏或显示&#xff1a; …...

ChatGPT能否取代程序员?

目录ChatGPT能否取代程序员&#xff1f;ChatGPT和程序员的工作内容和工作方式ChatGPT和程序员的共同点程序员的优势程序员的实力ChatGPT和程序员的关系结论惊喜ChatGPT能否取代程序员&#xff1f; ChatGPT是一种非常普遍的人工智能&#xff08;AI&#xff09;系统&#xff0c;…...

案例分享 | 金融微服务场景下如何提升运维可观测性

​云原生环境下金融业务的微服务化改造以及分布式架构的部署&#xff0c;使得业务与开发部门的关联更为紧密&#xff0c;传统运维监控已满足不了业务运营需求&#xff0c;亟需建设具备可观测性的运维体系。所以这次我们以某金融客户的实践案例为例&#xff0c;跟大家说一说在金…...

CentOS8提高篇3:Centos8安装播放器(mplayer vlc)

1. 准备工作&#xff08;需要配置epel, rpmfusion源&#xff09;; 配置epel源 下载epel dnf install epel-release 配置rpmfusion源 下载rpmforge dnf install rpmfusion-free-release-8.noarch.rpm 2. 安装mplayer和vlc 直接dnf安装 # dnf install mplayer # dnf install v…...

MySQL-存储过程

什么是存储过程我们前面所学习的MySQL语句都是针对一个表或几个表的单条 SQL 语句&#xff0c;但是在数据库的实际操作中&#xff0c;并非所有操作都那么简单&#xff0c;经常会有一个完整的操作需要多条SQL语句处理多个表才能完成。例如&#xff0c;为了确认学生能否毕业&…...

经典七大比较排序算法 · 下 + 附计数和基数排序

经典七大比较排序算法 下 附计数和基数排序1 插入排序1.1 算法思想1.2 代码实现1.3 插入排序特性2 希尔排序2.1 算法思想2.2 代码实现2.3 希尔排序特性3 七大比较排序特性总结4 计数排序4.1 算法思想4.2 代码实现4.3 计数排序特性5 基数排序5.1 算法思想5.2 代码实现1 插入排…...

HTTPS协议,看这篇就够了

不安全的HTTP 近些年来&#xff0c;越来越多的网站使用 HTTPS 协议进行数据传输&#xff0c;原因在于 HTTPS 相较于 HTTP 能够提供更加安全的服务。 很多浏览器对于使用 HTTP 协议的网站会加上『警告』的标志表示数据传输不安全&#xff0c;而对于使用 HTTPS 协议的网站会加上…...

C语言学习之路--结构体篇

目录一、前言二、结构体的声明1、结构的基础知识2、结构的声明3、结构体成员的类型4、结构体变量的定义和初始化三、结构体成员的访问四、结构体传参一、前言 本人是一名小白&#xff0c;这一篇是记录我C语言学习中的结构体的所学所得&#xff0c;仅为简单的认识下C语言中的各…...

【LINUX】初识文件系统

文章目录一、前言二、回顾C语言文件操作三、初识系统调用openreadwriteclose四、文件系统初识五、结语一、前言 二、回顾C语言文件操作 int main() {FILE* fp fopen("log.txt", "w");if (fp NULL){perror("fopen");}int cnt 0;fputs("…...

金三银四Java面试题及答案整理(2023最新版) 持续更新

作为一名优秀的程序员&#xff0c;技术面试是不可避免的一个环节&#xff0c;一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识。 如果你参加过一些大厂面试&#xff0c;肯定会遇到一些这样的问题&#xff1a; 1、看你项目都用的框架&#xff0c;熟悉 …...

7个角度,用 ChatGPT 玩转机器学习

大家好&#xff0c;我是机器学习科普创作者章北海mlpy&#xff0c;探索更高效的学习方法是我一直等追求。现在的初学者太幸福了&#xff0c;可以利用ChatGPT来帮助你学习机器学习的各个方面。 比如【个人首测】百度文心一言 VS GPT-4这篇文章中&#xff0c;我就用文心一言、GP…...

关于多层板,你了解多少?

01 前言 大家好&#xff0c;我是张巧龙。好久没写原创了&#xff0c;记得之前刚接触PCB时&#xff0c;还在用腐蚀单层板&#xff0c;类似这种。 慢慢随着电子产品功能越来越多&#xff0c;产品越来越薄&#xff0c;对PCB设计要求越来越高了&#xff0c;复杂程度也随之增加。因此…...

使用sqlalchemy-gbasedbt连接GBase 8s数据库

测试环境&#xff1a; 操作系统&#xff1a;CentOS 7.9 64-bit数据库版本&#xff1a;GBase8sV8.8_AEE_3.0.0_1&#xff0c;对应的CSDK版本为3.0.0_1 1&#xff0c;确认安装python3 确认已经安装python3和python3-devel [rootlocalhost test]# python3 -V Python 3.6.8如果…...

前端如何丢掉你的饭碗?

对于后端而言&#xff0c;我们常有“删库跑路”的说法&#xff0c;这说明后端的操作对于信息系统而言通常影响很大&#xff0c;可以轻易使信息系统宕机、崩溃&#xff0c;直接导致项目失败。所以&#xff0c;不要去逼后端程序员&#xff01; 作为前端程序员&#xff0c;我们似…...

栈、队列、优先级队列的模拟实现

优先级队列的模拟实现栈stack的模拟实现push()pop()top()size()empty()swap()stack总代码队列queue的模拟实现push()pop()front()back()empty()size()swap()queue总代码优先级队列(堆)push()pop()top()empty()size()swap()priority_queue总代码deque的了解栈 在CSTL中栈并不属…...

JMM内存模型

JMM内存模型JMM内存模型定义三大特性原子性可见性有序性volatile语义JMM规则操作系统实现术语缓存一致性要求缓存一致性机制写传播事务串行化重排序as-if-serial 语义&#xff08;像是有序的&#xff09;happens-before 原则happens-before 原则的八大子原则内存屏障总结finalf…...

Linux- 系统随你玩之--玩出花活的命令浏览器-双生姐妹花

文章目录1、背景2、命令浏览器-双生姐妹花2.1、姐妹花简介2.2 、验名正身2.3、常用功能选项3、常用实操3.1、发送请求获取文件3.1.1、抓取页面内容到一个文件中3.1.2、多个文件下载3.1.3、下载ftp文件3.1.4、断点续传3.1.5、上传文件3.1.6、内容输出3.2 、利用curl测试接口3.3 …...

【深度学习】基于Hough变化的答题卡识别(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。⛳座右铭&#…...

Linux - 进程控制(创建和终止)

1.进程创建fork函数初识 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。返回值&#xff1a;子进程返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1getpid()获取子进程id&#xff0c…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...