跨时钟域学习记录(一)

news2024/9/26 3:32:15

亚稳态

  亚稳态是电平介于高低电平之间的一种暂时状态。在同步系统中,当寄存器的信号无法满足建立时间和保持时间时,输出端的信号就可能出现亚稳态。在异步系统中,亚稳态并非一定在建立时间和保持时间无法满足时出现。
  受噪声、温度、电压纹波等因素的影响,多数情况下,信号在经过一段时间(受工作条件影响)后会从亚稳态回到一个稳定的状态,然而具体逻辑电平的值是不可预知的(0或1)。
  下图以滚球模型形式介绍了寄存器输出的三种可能状态。
在这里插入图片描述

  亚稳态发生时,寄存器输出信号存在0、1、亚稳态三种可能,可能会导致下级电路出现不可预测的故障行为。不从根本上遏制亚稳态的传输,会增大系统故障概率。

平均故障时间与故障概率

  • 平均故障时间

  衡量两次亚稳态导致系统故障的平均时间可以用平均故障时间(MTBF, mean time before failure)表示,
M T B F = e t M E T / C 2 C 1 f c l k 1 f c l k 2 MTBF=\frac {e^{t_{MET} / C_2}} {C_1 f_{clk1} f_{clk2}} MTBF=C1fclk1fclk2etMET/C2
  其中 C 1 C_1 C1 C 2 C_2 C2为与工艺、工作条件相关的常量, f c l k 1 f_{clk1} fclk1 f c l k 2 f_{clk2} fclk2为进行同步的两个时钟的时钟频率, t M E T t_{MET} tMET是同步链中所有寄存器输出信号时序裕量之和。由于指数关系,增加 T m e t T_{met} Tmet(提高同步链每级的时序裕量、增加同步链的级数)可以显著提高平均故障时间。
  除上述因素外,数据的翻转频率也会影响故障时间,翻转频率越高,故障概率越高。(稳定数据跨时钟传输不易出现亚稳态)

  • 故障概率

在这里插入图片描述
  如上图,单比特长电平信号的跨时钟域传输通常采用两级触发器同步器,经过两级触发器处理,亚稳态传输到下游触发器后继续输出亚稳态的概率会减小。两级触发器同步出现亚稳态的故障概率是平均故障时间的倒数:
q f a i l u r e = 1 M T B F q_{failure}=\frac {1} {MTBF} qfailure=MTBF1
  若设计中存在多个独立的跨时钟域信号,则系统的故障概率为:
Q f a i l u r e = ∑ q f a i l u r e = ∑ 1 M T B F Q_{failure}=\sum q_{failure} = \sum \frac {1} {MTBF} Qfailure=qfailure=MTBF1
  系统的平均故障时间为:
M T B F s y s = 1 ∑ 1 M T B F MTBF_{sys}=\frac 1 {\sum \frac {1} {MTBF}} MTBFsys=MTBF11

消除跨时钟域过程的亚稳态

单比特长脉冲、慢时钟到快时钟信号同步

1. 时序逻辑信号同步

  亚稳态主要在不同时钟域交界处出现,以下图为例,在某时钟上升沿处,D1的输入端已经建立稳定的逻辑电平,则c1能够正确输出结果;D2的输入端在时钟上升沿后稳定,则c2会比c1落后一个时钟周期,D3在时钟沿上升沿附近跳变,则c3会出现一个亚稳态。

在这里插入图片描述
  为了减少亚稳态发生的概率,通常采用多级触发器组成同步链的方式,如下图所示,这种方式可以显著增加平均故障时间。
在这里插入图片描述
   对于上两张图所示的跨时钟多径信号传输(clk1时钟域下信号a在clk2的扇出大于1),c1、c2、c3对于同一输入b可能产生不同的采样结果,因此对于多径信号传输最好采用先对跨时钟信号同步,再将同步后的信号分发的方式。
在这里插入图片描述

2. 组合逻辑信号同步

   组合逻辑各输入信号的时序弧和传输延时存在差异,使得组合逻辑输出端可能出现窄脉冲或毛刺,从而具有更高的信号的翻转率,更短寄存器同步链的故障时间,更高的故障概率。
在这里插入图片描述
在这里插入图片描述
   为了解决组合逻辑的问题,可以采用在源时钟域先采样寄存再同步的方式,能够显著消除毛刺、窄脉冲,降低输出信号的翻转率。
在这里插入图片描述

单比特短脉冲、快时钟到慢时钟信号同步

1. 延长脉冲宽度的同步

   如下几幅图所示,短、脉冲信号从快时钟同步到慢时钟时,可能出现信号丢失。

在这里插入图片描述
   clk1的整个脉冲落在clk2的一个时钟周期内,会出现信号丢失。
在这里插入图片描述
   clk1的整个脉冲正好落在clk2的一个完整时钟周期,由于信号变化出现在时钟沿附近,容易引起亚稳态,若亚稳态未因此输出信号从旧数据变到新数据,同样会出现信号丢失。
在这里插入图片描述
   通常情况下,只有当clk1的整个脉冲宽度达到clk2的1.5倍时钟周期时,才能保证脉动信号不被遗漏。

2. 带反馈的同步

   采用延长脉动宽度的同步方式依赖于clk1与clk2的周期关系,不具有广泛适用性和可移植性。如下图所示的采用反馈信号的同步方式更具有广泛适用性。
   当信号b从低电平翻转到高电平后,clk2对信号b进行两级触发器同步采样得到信号d,clk1通过两级触发器同步采样得到ack2,当ack2的值与a相同为高电平时,同步一定完成,此时信号b返回低电平,再次等到ack2返回低电平,完成一次脉冲信号的传输。
   这种采用反馈信号的方式能够保证不会出现信号丢失,然而反馈信号的引入会带来额外的延时,导致操作周期较长。
在这里插入图片描述
在这里插入图片描述

多比特信号同步

  由于亚稳态在传输过程中行为的随机性,多比特数据传输可能存在一个周期的不定态,以下图为例。信号s0, s1通过两级触发器从clk1同步到clk2的信号d0,d1。
  当{s0, s1}信号从{1’b0, 1’b1}变到{1’b1, 1’b0}时,{d0, d1}信号在从{1’b0, 1’b1}变到{1’b1, 1’b0}的过程中还可能出现一个周期的{1’b0, 1’b0}或{1’b1, 1’b1}状态。
在这里插入图片描述
在这里插入图片描述
  因此,通常多比特信号的同步需要引入额外的单比特信号作为有效信号。

在这里插入图片描述

  对于数据流场景,设计没有额外的时间传递同步有效信号,需要使用存储器件处理并行数据的跨时钟域转换,在FPGA上,并行多比特数据的跨时钟域转换需要用到FIFO或DPRAM(Dual Port RAM)。无论哪种方式,都需要保证源时钟域的带宽不高于目的时钟域的带宽,这样才能防止信号丢失。

1. FIFO

  采用FIFO进行数据同步还需要确保突发的数据写入量不会导致FIFO溢出,否则除了信号丢失外,还可能导致写指针跑飞。
   如下图所示,FIFO的Almost Full / Almost Empty信号在处理跨时钟域情景时能够提供灵活的FIFO控制方式。
在这里插入图片描述
   下面列举了三种依靠Almost Full / Almost Empty信号握手进行读写异步FIFO,进行数据同步的方式。

A. 慢写入、快读出

   这种方式持续写入数据,在Almost Full有效时开始读出数据,直到Almost Empty有效后结束读数据,依次往复。
在这里插入图片描述

B. 快写入、慢读出

   这种方式持续读出数据,在Almost Empty有效时开始写入数据,直到Almost Full有效后结束写数据,依次往复。
在这里插入图片描述

C. 等速传输

   这种方式不依赖Almost Full / Almost Empty信号,保证FIFO不会溢出或读空,这种无握手的等速传输一般不如依赖Almost Full / Almost Empty信号可靠。
在这里插入图片描述

2. DPRAM

   在使用时与FIFO类似,不过需要设计异步时钟间握手信号的产生、同步方式、地址、控制信号的产生。可参考牛客网异步FIFO设计习题如何将DPRAM设计为异步FIFO。

在这里插入图片描述

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

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

相关文章

MongoDB高可用架构涉及常用功能整理

MongoDB高可用架构涉及常用功能整理 1. mongo架构和相关组件1.1. Master-Slave主从模式1.2. Replica Set 副本集模式1.3. Sharding 分片模式 2. Sharding 分片模式2.1. Hashed Sharding方式2.2. Range Sharding方式 3. 事务性4. 疑问和思考4.1. 怎么保证数据的高可靠&#xff1…

oracle 19c RAC补丁升级

1.停止集群件备份家目录 ----两节点分别操作 cd /u01/app/19.3.0/grid/bin/ crsctl stop crstar -zcvf /u01/app.tar.gz /u01/app/u01/app/19.0.0/grid/bin/crsctl start crs2.两节点 GI、DB OPatch 替换(都得执行) ----# 表示 root 用户,$…

UDP建立聊天群

参考网上代码 接收端 #include<myhead.h> #define PRINT_ERR(msg) \ do \ { \ printf("%s,…

docker 本地机 互通文件

查询容器name 查询容器Id 进行传输

Windows11 使用 VirtualBox 安装创建 Ubuntu虚拟机

〇、背景 开发者大比例习惯都是Windows下编辑代码&#xff0c;比如使用Windows的Visual Studio Code进行代码的开发。但不管是AOSP还是鸿蒙开发&#xff0c;目前都不支持windows本地环境编译的&#xff0c;建议使用Ubuntu操作系统环境对源码进行编译。 因此&#xff0c;没有U…

android emulator windows bat启动

android emulator windows bat启动 先上结果 // 模拟器路径 -netspeed full -avd 模拟器名称 C:\Users\name\AppData\Local\Android\Sdk\emulator\emulator.exe -netdelay none -netspeed full -avd Pixel_3a_API_34_extension_level_7_x86_64一般来说 windows 如果不做…

springcloud第4季 负载均衡的介绍3

一 loadbalance 1.1 负载均衡的介绍 使用注解loadbalance&#xff0c;是一个客户端的负载均衡器&#xff1b;通过之前已经从注册中心拉取缓存到本地的服务列表中&#xff0c;获取服务进行轮询负载请求服务列表中的数据。 轮询原理 1.2 loadbalance工作流程 loadBalance工作…

举4例说明Python如何使用正则表达式分割字符串

在Python中&#xff0c;你可以使用re模块的split()函数来根据正则表达式分割字符串。这个函数的工作原理类似于Python内置的str.split()方法&#xff0c;但它允许你使用正则表达式作为分隔符。 示例 1: 使用单个字符作为分隔符 假设你有一个由逗号分隔的字符串&#xff0c;你可…

JAVAEE——多线程的设计模式,生产消费模型,阻塞队列

文章目录 多线程设计模式什么是设计模式单例模式饿汉模式懒汉模式线程安全问题懒汉模式就一定安全吗&#xff1f;锁引发的效率问题jvm的优化引起的安全问题 阻塞队列阻塞队列是什么&#xff1f;生产消费者模型阻塞队列实现消费生产者模型可能遇到的异常 多线程设计模式 什么是…

网络套接字-TCP服务器

一 前言 前面已经写过udp服务器的实现了&#xff0c;那里说了很多编写服务器的所需知识&#xff0c;在tcp服务器实现中就不再赘述了。 二 服务端编写 大致接口如下。 ./server port端口号 启动时指明端口号 void usage(const std::string proc) {std::cout<<"Usa…

Py之scikit-learn-extra:scikit-learn-extra的简介、安装、案例应用之详细攻略

Py之scikit-learn-extra&#xff1a;scikit-learn-extra的简介、安装、案例应用之详细攻略 目录 scikit-learn-extra的简介 scikit-learn-extra的安装 scikit-learn-extra的案例应用 1、使用 scikit-learn-extra 中的 IsolationForest 模型进行异常检测 scikit-learn-extra…

Orbit 使用指南 10|在机器人上安装传感器 | Isaac Sim | Omniverse

如是我闻&#xff1a; 资产类&#xff08;asset classes&#xff09;允许我们创建和模拟机器人&#xff0c;而传感器 (sensors) 则帮助我们获取关于环境的信息&#xff0c;获取不同的本体感知和外界感知信息。例如&#xff0c;摄像头传感器可用于获取环境的视觉信息&#xff0c…

【小沐学Python】Python实现Web图表功能(Lux)

文章目录 1、简介2、安装3、测试3.1 入门示例3.2 入门示例2 结语 1、简介 https://github.com/lux-org/lux 用于智能可视化发现的 Python API Lux 是一个 Python 库&#xff0c;通过自动化可视化和数据分析过程来促进快速简便的数据探索。通过简单地在 Jupyter 笔记本中打印出…

我的风采——android studio

目录 实现“我的风采”页面要求理论代码生成apk文件 实现“我的风采”页面 要求 要求利用’java框架的边框布局实现“找的风采 ”页而&#xff0c;其中中间为你的生活照&#xff0c;左右和下面为按钮&#xff0c;上面为标签 理论 Java GUI编程是Java程序设计的重要组成部分…

QT(C++)-error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”

1、项目场景&#xff1a; 在VS中采用QT&#xff08;C&#xff09;调试时&#xff0c;出现error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”错误 2、解决方案&#xff1a; 在“解决方案资源管理器”中选中出现此类BUG的项目&#xff0c;右键-…

uniapp-Form示例(uviewPlus)

示例说明 Vue版本&#xff1a;vue3 组件&#xff1a;uviewPlus&#xff08;Form 表单 | uview-plus 3.0 - 全面兼容nvue的uni-app生态框架 - uni-app UI框架&#xff09; 说明&#xff1a;表单组建、表单验证、提交验证等&#xff1b; 截图&#xff1a; 示例代码 <templat…

PCIe总线-PCIe总线简介(一)

1.概述 早期的计算机使用PCI&#xff08;Peripheral Component Interconnect&#xff09;总线与外围设备相连&#xff0c;PCI总线使用单端并行信号进行数据传输&#xff0c;由于单端信号很容易被外部系统干扰&#xff0c;其总线频率很难进一步提高。目前&#xff0c;为了提高总…

k8s笔记27--快速了解 k8s pod和cgroup的关系

k8s笔记27--快速了解 k8s pod和 cgroup 的关系 介绍pod & cgroup注意事项说明 介绍 随着云计算、云原生技术的成熟和广泛应用&#xff0c;K8S已经成为容器编排的事实标准&#xff0c;学习了解容器、K8S技术对于新时代的IT从业者显得极其重要了。 之前在文章 docker笔记13–…

UDS升级入门,手把手教你——开篇

前面关于OTA的文章&#xff0c;写的比较乱&#xff0c;索性整了一个专栏&#xff0c;来认真梳理下&#xff0c;话不多开整。 准备工作&#xff1a; 1、QT环境 上位机开发 2、MDK环境&#xff0c;STM32F103&#xff0c;vscode MCU开发环境&#xff0c;调试 3、JFlash环境安…

【C语言数据结构】排序

1.排序的概念 在深入研究各个排序算法之前&#xff0c;首先&#xff0c;我们要对排序有个大概的了解&#xff0c;即与排序相关的一些概念 Q&#xff1a;什么是排序&#xff1f; A&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小…