【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 系列】跨时钟域处理(一)同步器 的相关文章

  • verilog 基本语法 {}大括号的使用

    的基本使用是两个 一个是拼接 一个是复制 下面列举了几种常见用法 基本用法 表示拼接 第一位 第二位 表示复制 4 a 等同于 a a a a 所以 13 1 b1 就表示将13个1拼接起来 即13 b1111111111111 拼接语法详
  • BUCK电路分析(二)

    BUCK电路分析 二 PSIM仿真同步BUCK电路 在上片文章中 初步的分析了BUCK电路的工作原理 本章使用PSIM软件仿真BUCK电路 观察分析BUCK电路器件关键波形 图1是同步BUCK电路图 开关频率设置为200K 固定占空比 在仿
  • 【数字IC】从零开始的Verilog SPI设计

    从零开始的Verilog SPI协议设计 一 写在前面 1 1 协议标准 1 2 数字IC组件代码 1 3 设计要求 1 4 其他协议解读 1 4 1 UART协议 1 4 2 SPI协议 1 4 3 I2C协议 1 4 4 AXI协议 二
  • Lattice Diamond安装

    1 下载 到Lattice官网 http www latticesemi com 注册一个lattice的账号后就可以去下载Diamond 登陆后如下图 根据自己系统情况选择对应的版本 我用的是32位win8 Diamond软件安装包和La
  • 蓝桥杯真题:迷宫

    目录 题目描述 运行限制 dfs bfs 结果 题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 下图给出了一个迷宫的平面图 其中标记为 11 的为障碍 标记为 00 的为可以通行的地方 010000 000
  • 64 位 ALU 输出在 TestBench 波上显示高阻抗

    我必须制作一个 64 位 ALU 它接受 A 和 B 64 位输入 进位输入输入并输出 64 位结果以及 1 位进位输出 还有一个 5 位功能选择 FS 其中 FS 0 控制 B 是否反转 使用 2to1 多路复用器 F 1 对 A 执行相
  • 硬核 | 从零制作一个激光雷达需要多久?

    编辑 ADS智库 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 硬件交流 技术交流群 本文只做学术分享 如有侵权 联系删文 激光雷达 LiDAR 是激光探测及测距系统的简称 目前广泛应用在无
  • [Verilog] Verilog 基本格式和语法

    主页 元存储博客 全文 3000 字 文章目录 1 声明格式 1 1 模块声明 1 2 输入输出声明 1 3 内部信号声明 1 4 内部逻辑声明
  • 用于 Verilog 或 SystemVerilog 的 TAP(测试任何协议)模块

    是否有 TAP 测试任何协议 http testanything org Verilog 的实现 那就太好了 因为这样我就可以使用证明来自动检查我的结果 更新 10 9 09 有人问为什么不使用断言 部分 TAP 为我提供了一些很好的报告
  • VHDL门控时钟如何避免

    我收到了避免使用门控时钟的建议 因为它可能会导致松弛和时序限制问题 但我想问一下我可以认为什么是门控时钟 例如 此代码对时钟进行门控 因为 StopCount 对它进行门控 process ModuleCLK begin if rising
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二
  • Linux驱动程序DMA传输到PC作为主机的PCIe卡

    我正在开发一个 DMA 例程 将数据从 PC 传输到 PCIe 卡上的 FPGA 我阅读了 DMA API txt 和 LDD3 ch 15 详细信息 但是 我不知道如何从 PC 到 PCIe 卡上的一致 iomem 块进行 DMA 传输
  • MINI-UTDE 10 BASE-T 集成控制器

    MINI UTDE 10 BASE T 集成控制器 MINI UTDE 10 BASE T 拥有多达三个本地I O板和远程I OS总线通信 为用户提供了一系列生产单元功能的单一控制点 包括诸如夹头 反馈器和辅助机器等外围生产设备 支持所有主
  • PyOpenCL 中的时间测量

    我正在 FPGA 和 GPU 中使用 PyOpenCL 运行内核 为了测量执行所需的时间 我使用 t1 time event mykernel queue c width c height block size block size d c
  • file:/// 到 http:// 通过 IFrame 进行通信

    也许你们中的一些人可能遇到了我遇到的同样的问题 假设您的计算机上有一个文件 file c test html 该文件中有一个 IFrame 您需要指示 IFrame 内容是否已加载 基本上 我们这里有 1 无法从 file 访问位置 hre
  • 您可以使用类 C 语言对 FPGA 进行编程吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在大学里 我用类似 C 的语言编写了 FPGA 不过 我也知道人们通常使用 Verilog 或 VHD
  • VHDL 中的 BRAM_INIT

    我正在模拟基于处理器的设计 其中程序存储器内容保存在 BRAM 中 我正在使用 VHDL 推断 BRAM 实现程序存储器 我试图避免使用 CoreGen 因为我想保持设计的可移植性 最终该设计将进入 FPGA 我想看看是否有一种方法可以使用
  • FPGA 有哪些实际应用?

    我对我的程序为一个小型七段显示器提供动力感到非常兴奋 但是当我向不在现场的人展示它时 他们总是说 那么你能用它做什么 我永远无法给他们一个简洁的答案 谁能帮我吗 第一 它们不需要具有易失性存储器 事实上 大厂商 Xilinx Altera
  • FPGA大输入数据

    我正在尝试向 FPGA 发送 4 KB 字符串 最简单的方法是什么 是我正在使用的fpga的链接 我正在使用 Verilog 和 Quartus 您的问题的答案在很大程度上取决于将数据输入 FPGA 的内容 即使没有您需要遵守的特定协议 S
  • 可以购买哪些 FPGA(现场可编程门阵列)在家中进行实验? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 什么是 FPGA 在哪里可以买到 它们要花多少钱 您需要什么样的系统来试验它们 如何对它们进行编程 如果这是正确的术语 您能否使用普通 M

随机推荐

  • 前端面试之---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 三级触发同步器 同步来自发送时钟域的信号 将信号同步到接收时钟域 说明 同步器 在时钟域之间传递信号时 要问的一个重要问题是 我是否需要对从一个时钟域传递到另一个时钟域的