【CDC 系列】跨时钟域处理(一)同步器

2023-11-09

目录

 

同步器

两种同步场景

两级触发同步器

平均故障前时间--MTBF

三级触发同步器

同步来自发送时钟域的信号

将信号同步到接收时钟域

说明


 

同步器

在时钟域之间传递信号时,要问的一个重要问题是,我是否需要对从一个时钟域传递到另一个时钟域的信号的每个值进行采样?

两种同步场景

跨 CDC 边界传递信号时可能出现两种情况,确定哪种情况适用于设计很重要:

(1) 允许错过在时钟域之间传递的样本。

(2) 必须对时钟域之间传递的每个信号进行采样。

第一种情况:有时不需要对每个值进行采样,但采样值准确很重要。一个例子是标准异步 FIFO 设计中使用的一组格雷码计数器。在适当设计的异步 FIFO 模型中,同步格雷码计数器不需要从相反的时钟域捕获每个有效值,但至关重要的是,采样值准确识别何时发生了满和空情况。

第二种情况:在允许对 CDC 信号进行更改之前,必须正确识别 CDC 信号。

在这两种情况下,CDC 信号都需要某种形式的同步到接收时钟域。

两级触发同步器

“同步器是一种对异步信号进行采样并输出具有与本地或采样时钟同步的转换信号的设备。”最常用的同步器是双触发器同步器,如下图所示。

第一个触发器将异步输入信号采样到新的时钟域并等待一个完整的时钟周期以允许第一级输出信号上的任何亚稳态衰减,然后由同一时钟将第一级信号采样到第二个阶段触发器,其预期目标是,阶段 2 信号现在是一个稳定且有效的信号,已同步并准备好在新时钟域内分发。

8452c9ea49e240669988f64b2643c93c.png

 

理论上,当信号被计时进入第二级时,第一级信号仍然足够亚稳态以使第二级输出信号也进入亚稳态。

同步故障间隔时间 (MTBF) 概率的计算是多个变量的函数,包括用于生成输入信号和为同步触发器提供时钟的时钟频率。

对于大多数同步操作,两个触发器同步器足以消除所有可能的亚稳态。

平均故障前时间--MTBF

MTBF(mean time before failure),对于大多数应用来说,计算任何跨越 CDC 边界的信号的平均故障前时间 (MTBF) 非常重要。从这个意义上说,故障意味着传递到同步触发器的信号,在第一级同步器触发器上进入亚稳态,并且在一个周期后当它被采样到第二级同步器触发器时继续亚稳态。由于信号在一个时钟周期后没有稳定到已知值,因此在采样并传递到接收时钟域时信号仍然可能是亚稳态的,从而导致相应逻辑的潜在故障。

在计算 MTBF 数字时,较大的数字优于较小的数字。较大的 MTBF 数字表示潜在故障之间的时间较长,而较小的 MTBF数字表明亚稳态可能经常发生,同样会导致设计失败。

Dally 和 Poulton 给出一个方程,对可以执行的计算进行了非常彻底的分析,以计算同步器电路的 MTBF。在不重复公式和分析的情况下,应该指出直接影响同步器电路 MTBF 的两个最重要因素是采样时钟频率(信号被采样到接收时钟域的速度)和数据更改频率(跨越 CDC 边界的数据更改速度有多快)。

ea9d23c767394ec9a115dda0eaabc1c6.png

 

从上面的方程可以看出,在更高速率的设计中,或者当采样数据更频繁地变化时,故障发生的频率更高(MTBF 更短)。

三级触发同步器

对于一些非常高速的设计,双触发器同步器的 MTBF 太短,并且添加了第三触发器以将 MTBF 增加到令人满意的持续时间。三级触发器在同步中使用比较少,两级触发器就足以应对绝大多数的设计。

68adce9efc174a19a35e140d7d48f673.png

 

同步来自发送时钟域的信号

有关 CDC 设计的常见问题:在将信号传递到接收时钟域之前寄存来自发送时钟域的信号是否是个好主意?问题中暗示 CDC 信号将同步到接收时钟域的假设;因此,它们不需要在发送时钟域中进行同步。这种合理化是不正确的,通常需要在发送时钟域中寄存信号。

考虑一个示例,其中发送时钟域中的信号在传递到接收时钟域之前未寄存,如图所示。

46c6673a0804436fb07dfacd22d6400a.png

 

在此示例中,来自发送时钟域的组合逻辑输出可能会在 CDC 边界处有一连串的组合逻辑输出。这种情况大大增加了数据变化频率,可能会产生小的振荡数据突发,从而增加在变化时可以采样的边沿的数量,相应地增加对变化数据进行采样和生成亚稳态信号的可能性。

将信号同步到接收时钟域

发送时钟域中的信号应在传递到 CDC 边界之前进行同步。来自发送时钟域的信号同步减少了可以在接收时钟域采样的边沿数量,有效地降低了 MTBF 方程中的数据变化频率,从而增加了计算故障之间的时间。

f03d51327fa34e3a843295944613e275.png

 

在上图中, aclk时钟域的逻辑在被传递到adat触发器之前稳定并建立bclk域。 adat触发器过滤掉触发器输入上的组合逻辑串(a),并将一个合适的信号传递给bclk时钟域。

说明

本文是对《Clock Domain Crossing (CDC) Design & Verification Techniques Using SystemVerilog》的文章的翻译及部分说明解释

 

 

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

【CDC 系列】跨时钟域处理(一)同步器 的相关文章

  • 哈希表(带图解)

    哈希表 常见的搜索方式 1 顺序搜索 O N 2 二分搜索 O log N 3 搜索树结构中的查找 二叉树搜索 O N AVL O log N 红黑树 O log N 以上都需要比较 那有没有不需要比较就能查找的方法呢 概念 顺序结构以及平

随机推荐

  • 前端面试之---link 引入css文件和@import引入css文件的区别

    css引入方式link与import的区别 1 link属于html标签 而 import是css提供的 只能加载CSS2 加载顺序 link在页面加载时被加载 import在页面加载完之后再加载3 link是html标签 因此没有兼容性
  • mysql中进行md5加密

    如果数据库表User中有一列为passwd 存放的是md5加密的数据 如何更新新的数据 update user set passwd md5 123321 where uName lihua 插入新的数据 insert into user
  • JavaScript 入门基础 - 对象(五)

    JavaScript 入门基础 对象 文章目录 JavaScript 入门基础 对象 1 对象 1 1 对象的基本理解 1 2 为什么需要变量 2 创建对象的方式 2 1 利用字面量创建对象 2 2 变量属性函数方法的区别 2 3 利用 n
  • 谷歌浏览器美化包

    下了CSDN浏览器助手后 浏览器竟然直接摊牌了 不装了 一 先言 对于常年混迹于CSDN社区的我来说 社区出了浏览器插件这事我怎么能错过 三下五除二下载使用一波 不得不说 又被圈粉啦 咱也不多说 先看下面张效果图为敬 欧No 这颜值还是我当
  • Python小甲鱼学习笔记01-05

    01开始 一 IDLE 二 print 1 print 的作用是什么 print 会在输出窗口中显示一些文本 在这一讲中 输出窗口就是IDLE shell窗口 2 例子 print 5 2 print well water print go
  • C语言把分钟数转换成小时和分钟

    题目 编写一个程序 把用分钟表示的时间转换成用小时和分钟表示的时间 使用 define或const创建一个表示60的符号常量或const变量 通过while循环让用户重复输入值 直到用户输入小于或等于0的值才停止循环 参考答案 includ
  • 【c++】程序设计第四周作业

    程序设计第四周作业 筛选法找素数 选择排序 输出杨辉三角 矩阵鞍点 折半查找 字符串复制 计算矩阵的和 筛选法找素数 题目描述 用筛选法求n以内 含n n lt 1000 的素数 并逆序输出 每10个一行 输入 n 输出 逆序输出n以内的素
  • (20201126已解决)WSL运行virtualenv venv创建虚拟环境出错

    问题描述 如题 在VS Code WSL中运行virtualenv venv出现下属错误 FileNotFoundError Errno 2 No such file or directory c users name anaconda3
  • Augmenting Existing Data structure 总结

    动态集合是指大小不固定的集合 会增加新的元素和删除已有的元素 队列 堆栈 树 vector map 等都属于动态集合 实现主要就是2种方向 1 基于node的 一维的就是链表 二维的就是二叉树 2 基于数组的 当数组被填满或大于一定的fac
  • Python基础综合案例:折线图可视化

    Python学习 折线图可视化 目录 Python学习 折线图可视化 Json数据格式 pyecharts模块 数据处理 案例 美日印疫情数据折线图 Json数据格式 一种轻量级的数据交互格式 负责在不同编程语言中的数据传递和交互 一种字符
  • 面试题之MyBatis缓存

    MyBatis缓存 什么是MyBatis缓存 Mybatis中有一级缓存和二级缓存 一级缓存又被称为本地缓存 是Session会话级别的 一级缓存是MyBatis内部实现的一个特性 用户不能配置 默认情况下一级缓存是开启的 而且是不能关闭的
  • c++使用类(友元)

    友元 友元全局函数 友元类 友元成员函数 如果要访问类的私有成员变量 调用类的公有成员函数是唯一的办法 而类的私有成员函数则无法访问 友元提供了另一访问类的私有成员的方案 友元全局函数 将main函数定义为友元函数 则在main函数内可以访
  • 代码review总结

    Code Review应该是软件工程最最有价值的一个活动 之前 本站发表过 简单实用的Code Review工具 那些工具主要是用来帮助更有效地进行这个活动 这里的这篇文章 我们主要想和大家分享一下Code Review代码审查的一些心得
  • 10月6日 新基建专题

    10月5日 新基建专题 中秋国庆双节盛典 新基建 新型基础设施建设 简称 新基建 主要包括5G基站建设 特高压 城际高速铁路和城市轨道交通 新能源汽车充电桩 大数据中心 人工智能 工业互联网七大领域 涉及诸多产业链 是以新发展理念为引领 以
  • C++实现一个简单student类和重载运算符

    在学习了C 后 感觉到其面向对象的思想与 C 的面向程序的不同之处 在对象内部定义对其的操作 只提供接口供用户使用 其操作对用户隐藏 所以我也仿写了一个简单的类及几个运算符的重载 但是还存在一个问题 我一直也没解决 就是我的几个重载运算符想
  • iOS开发 非常全的三方库、插件、大牛博客等等

    用到的组件 1 通过CocoaPods安装项目名称项目信息AFNetworking网络请求组件FMDB本地数据库组件SDWebImage多个缩略图缓存组件UICKeyChainStore存放用户账号密码组件Reachability监测网络状
  • 俄罗斯黑客挑战美国国家网络安全

    据环球网报道 俄罗斯黑客组织 Killnet 向美国网络安全发起攻击 并导致美国14家机场网站出现故障 其中包括最为繁忙的洛杉矶国际机场 给不少乘客带去困扰 此外 美国奥黑尔国际机场也遭遇攻击 截止当前已中断运营超过16个小时 值得一提的是
  • 非科班出身的我 如何靠自学编程 毕业拿大厂20k x 16 offer 自学java路线总结 经验分享

    文章目录 前言 了解自己 前置学习 java基础 java高阶 微服务SpringBoot 软硬数据库 项目实战 前言 对于很多和我一样的 非科班出身的小白来说 对于编程应该是一种向往但不可及的状态吧 我记得自己大一时就是这样的 心里知道编
  • Sonarqube与Gitlab集成

    1 Docker安装Sonarqube docker compose yml version 3 services sonarqube image sonarqube 8 9 7 community depends on db enviro
  • 【CDC 系列】跨时钟域处理(一)同步器

    目录 同步器 两种同步场景 两级触发同步器 平均故障前时间 MTBF 三级触发同步器 同步来自发送时钟域的信号 将信号同步到接收时钟域 说明 同步器 在时钟域之间传递信号时 要问的一个重要问题是 我是否需要对从一个时钟域传递到另一个时钟域的