FPGA基础知识19(FPGA异步时钟设计中的同步策略 异步时钟 打两拍 握手机制)

2023-11-13

需求说明:IC设计基础

内容       :异步时钟处理方法

来自       :时间的诗


原文:https://wenku.baidu.com/view/586e8afb7e21af45b307a8b8.html

原文:http://ee.ofweek.com/2011-12/ART-11001-2800-28592636.html

1 引言

  基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时钟系统。但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免。如果对跨时钟域带来的亚稳态、采样丢失、潜在逻辑错误等等一系列问题处理不当,将导致系统无法运行。本文总结出了几种同步策略来解决跨时钟域问题。

2 异步设计中的亚稳态

  触发器是FPGA设计中最常用的基本器件。触发器工作过程中存在数据的建立(setup)和保持(hold)时间。对于使用上升沿触发的触发器来说,建立时间就是在时钟上升沿到来之前,触发器数据端数据保持稳定的最小时间。而保持时间是时钟上升沿到来之后,触发器数据端数据还应该继续保持稳定的最小时间。我们把这段时间成为setup-hold时间(如图1所示)。在这个时间参数内,输入信号在时钟的上升沿是不允许发生变化的。如果输入信号在这段时间内发生了变化,输出结果将是不可知的,即亚稳态 (Metastability)。

 

  

 

  一个信号在过渡到另一个时钟域时,如果仅仅用一个触发器将其锁存,那么采样的结果将可能是亚稳态。这也就是信号在跨时钟域时应该注意的问题。如图2所示。

 

  

 

  信号dat经过一个锁存器的输出数据为a_dat。用时钟b_clk进行采样的时候,如果a_dat正好在b_clk的setup-hold时间内发生变化,此时b_ dat就既不是逻辑“1”,也不是逻辑“0”,而是处于中间状态。经过一段时间之后,有可能回升到高电平,也有可能降低到低电平。输出信号处于中间状态到恢复为逻辑“1”或逻辑“0”的这段时间,我们称之为亚稳态时间。

  触发器进入亚稳态的时间可以用参数MTBF(Mean Time Between Failures)来描述,MTBF即触发器采样失败的时间间隔,表示为:

  

  其中fclock表示系统时钟频率,fdata代表异步输入信号的频率,tmet代表不会引起故障的最长亚稳态时间,C1和C2分别为与器件特性相关的常数。如果MTBF很大,就认为这个设计在实际工作中是能够正常运行的,不会因为亚稳态导致整个系统的失效。当触发器处于亚稳态,且处于亚稳态的时间超过了一个时钟周期,这种不确定的状态还会影响到下一级的触发器,最终导致连锁反应,从而使整个系统功能失常。

3 同步策略

  在异步设计中,完全避免亚稳态是不可能的。因此,设计的基本思路应该是:首先尽可能减少出现亚稳态的可能性,其次是尽可能减少出现亚稳态并给系统带来危害的可能性。以下是根据实际工作总结出来的几种同步策略。

3.1 双锁存器法

  为了避免进入亚稳态,应当使参数MTBF尽可能大。通常采用的方法是双锁存器法,即在一个信号进入另一个时钟域之前,将该信号用两个锁存器连续锁存两次(如图3所示)。理论研究表明这种设计可以将出现亚稳态的几率降低到一个很小的程度,但这种方法同时带来了对输入信号的一级延时,需要在设计时钟的时候加以注意。

 

  

 

  对于上面的双锁存器法,如果a_clk的频率比b_clk的频率高,将可能出现因为dat变化太快,而使b_clk无法采样的问题。即在信号从快时钟域向慢时钟域过渡的时候,如果信号变化太快,慢时钟将可能无法对该信号进行正确的采样,所以在使用双锁存器法的时候,应该使原始信号保持足够长的时间,以便另一个时钟域的锁存器可以正确地对其进行采样。

3.2 结绳法

  由于双锁存器法在快时钟域向慢时钟域过渡中可能存在采样失效的问题,我们引入了一种安全的跨时钟域的方法:结绳法。结绳法适合任何时钟域的过渡(clk1,clk2的频率和相位关系可以任意选定),如图4所示。

 

  

 

  图4中的_clk1表示该信号属于clk1时钟域,_clk2的信号表示该信号属于clk2时钟域。在两次src_req_clk1之间被src_vld_clk1结绳(Pluse2Toggle)。将src_vld—clk1用双锁存器同步以后,该信号转换为dst_req_clk2(Toggle2Pluse)。同理,用dst_vld_clk2将dat_req_clk2结绳,dst_vld_clk2表明在clk2时钟域中,src_dat_clk1已经可以进行正确的采样了。最后将dst_vld_clk2转换为dst_ack_clk1(Synchronizer and Toggle2Pluse)。dst_ack_clk表明src_dat_clk1已经被clk2正确采样了,此后clk1时钟域就可以安全地传输下一个数据了。可以看出,结绳法的关键是将信号结绳以后,使其保持足够长的时间,以便另一个时钟可以正确采样。图5描述了结绳法的具体实现,主要包括3个基本单元:Pluse2Toggle、Synchronizer和Toggle2Pluse。

 

  

 

  Pluse2Toggle模块负责将两个脉冲信号结绳,即将单脉冲信号延长;Synchronizer模块用双锁存器法将得到的信号过渡到另一个时钟域;Toggle2Pluse模块与Pluse2Toggle功能相对,即将延长的脉冲信号还原为单脉冲,这里用到了异或门。整体的设计思想就是用Pluse2Toggle将信号延长,用Synchronizer过渡,再用Toggle2Pluse还原,以保证另一个时钟域可以正确采样,而接收方用相反的流程送回响应信号。

  结绳法可以解决快时钟域向慢时钟域过渡的问题,且适用的范围很广。但是结绳法实现较复杂,在设计要求较高的场合应该慎用。

4 结束语

  本文主要把FPGA异步时钟设计中产生的问题,原因以及解决问题所采用的同步策略做了详细的分析。其中双锁存器法比较适用于只有少数信号跨时钟域;结绳法比较适用快时钟域向慢时钟过渡的情况。所以,在实际的应用中,应根据自身设计的特点选择适当的同步策略。


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

FPGA基础知识19(FPGA异步时钟设计中的同步策略 异步时钟 打两拍 握手机制) 的相关文章

  • ANT 安装使用及build.xml文档模板

    一 安装 下载地址 http archive apache org dist ant 0 前提 已经正确设定了JAVA HOME的系统变量 1 直接解压 到D apache ant 1 7 2 系统环境变量中设置 path 加上 D apa
  • chatgpt赋能powershell

    最近chatgpt非常火爆 获得超高曝光度的同时 也让大家对ai和ai工具有了新的认识 关于chatgpt 可以参考这篇文章 今天主要推荐一个可以与powershell集成的ai工具 其后端也是openai的服务 可以有效提高工作效率 Po
  • vue3 element plus NavMenu 导航无法选中(同级页面跳转,导航无法高亮)

    需求 导航选中的是公司信息 当跳转到公司信息编辑的时候 上面的导航公司信息还是要选中状态 点击导航 回到信息展示页面 下面是我的路由 在vue2里面 使用element ui 像下面这样做是可以的 动态给el menu item的index
  • 第十一届蓝桥杯大赛软件类省赛第二场 Java 大学 B试题 B: 寻找 2020 解答

    说明 以下介绍三种方法 三者的区别仅在于文件读取方式不同 方法1直接把 txt文件复制粘贴到console控制台上 使用了Scanner类 方法2和方法3都是从电脑文件夹读取文件 但是具体读取细节有些差别 方法2使用了io接口的三个包 Fi
  • Lua 数据类型 —— 表

    一 简介 表永远是匿名的 表本身和保存表的变量之间没有固定关系 对于一个表而言 当程序不再有变量指向他时 垃圾收集器会最终删除这个表并重用其占用的内存 Lua 不会进行隐藏拷贝或创建新表 操作的都是指向表的指针 二 元素 1 键 表的键可以
  • 2.7 深入理解ContentProvider

    第7章 深入理解ContentProvider 7 1 概述 本章重点分析ContentProvider SQLite Cursor query close函数的实现及ContentResolver openAssetFileDescrip
  • 线程安全(上)

    前言 在多线程中 并不是说知道怎么使用就完事了 学习完如何使用多线程之后 我们了解到多线程的并发性和随机调度的特性是我们程序员不容易控制的 所以一旦操作不当就会带来许多安全问题 那我们就开始学习线程安全吧 目录 1 使用多线程带来的风险 硬
  • Rust交叉编译简述 —— Arm

    使用系统 WSL2 Kali Microsoft Store 命令列表 rustup target list 当前官方支持的构建目标架构列表 rustup target add aarch64 unknown linux gnu 添加目标架
  • Tensorflow错误InvalidArgumentError see above for traceback): No OpKernel was registered to support Op

    调用tensorflow gpu运行错误 错误信息如下 2023 06 21 15 36 14 007389 I tensorflow core platform cpu feature guard cc 141 Your CPU supp
  • 十三、java版 SpringCloud分布式微服务云架构之Java Character 类

    Java Character 类 Character 类用于对单个字符进行操作 Character 类在对象中包装一个基本类型 实例 char ch a Unicode 字符表示形式 char uniChar u039A 字符数组 char
  • vs的运行库 MT MTd MD MDd区别

    MT mutithread Static 多线程库 编译器会从运行时库里面选择多线程静态连接库来解释程序中的代码 即连接LIBCMT lib库 MTd mutithread debug Static 多线程调试版 连接LIBMITD lib
  • 刷脸支付新技术必将带来全新体验

    刷脸支付充满前景 占领支付市场只是时间问题 新技术必将带来新体验 从前的人脸确认登录是证明你是你 而如今的人脸识别是在验证你是谁 刷脸支付的到来 用户连密码都不需要设置了 你自身便是一张行走的活体 秒识别 秒验证让支付生活更加方便快捷 与现
  • android系统的初始化失败怎么办,android初始化失败

    android初始化失败 03 08 16 56 53 235 19683 19711 F libc Fatal signal 6 SIGABRT code 6 in tid 19711 Thread 737 03 08 16 56 53
  • 推荐!国外程序员整理的 C++ 资源大全

    关于 C 框架 库和资源的一些汇总列表 由 fffaraz 发起和维护 内容包括 标准库 Web应用框架 人工智能 数据库 图片处理 机器学习 日志 代码分析等 标准库 C 标准库 包括了STL容器 算法和函数等 C Standard Li
  • 快速部署SpringBoot项目

    快速部署SpringBoot 1 使用宝塔安装 CentOS yum install y wget wget O install sh http download bt cn install install 6 0 sh sh instal
  • 【第十三届蓝桥杯】省赛C/C++ B组 题目+题解

    目录 A 九进制转十进制 B 顺子日期 C 刷题统计 D 修剪灌木 E X 进制减法 F 统计子矩阵 G 积木画 H 扫雷 I 李白打酒加强版 J 砍竹子 A 九进制转十进制 本题总分 5 分 问题描述 九进制正整数 2022 转换成十进制

随机推荐

  • 使用Python接口自动化测试post请求和get请求,获取请求返回值

    目录 引言 请求接口为Post时 传参方法 方法一 通过json dunps body 转化成json格式的字符串 然后传递给data 方法二 在传参时直接格式化成json格式传参 获取接口请求响应数据 request 接口请求时 不对数据
  • github提交失败:error: failed to push some refs to https://github.com/***/git.git

    1 问题 在github远程创建仓库后 利用gitbash进行提交本地文件的时候出现如下错误 报错 error failed to push some refs to https github com git git 2 原因 远程仓库与本
  • AD里面PCB怎样设置原点

    在PCB图中 点击EDIT 选择ORIGIN 点击set 设置原点 如果是元器件封装时 点击EDIT 选择set reference 有三个选项 下面细讲 1 选择pin1 会将原点自动设置在pin1的中心 2 选择 center 会将原点
  • jquery如何获取表单全部数据

    Jquery 如何获取表单的全部数据 用于ajax提交 var formData var t Form serializeArray each t function formData this name this value console
  • [Node] Node.js 包管理工具详解npm yarn cnpm npx pnpm

    Node js专栏 Node js 初级知识 个人简介 一个不甘平庸的平凡人 个人主页 CoderHing的个人主页 格言 路漫漫其修远兮 吾将上下而求索 你的一键三连是我更新的最大动力 目录 1 npm包管理工具 包管理工具npm 常见的
  • 淘宝装修HTML代码大全

    http blog sina com cn s blog 506f1f940100hv9d html 淘宝网店装修HTML代码大全 包括淘宝装修代码 插入图片代码 公告滚动代码 不不一定要懂网站知识 不一定要懂HTML语言 看完这个就可以装
  • 五线谱音名和组别对照表_利用吉他指板快速识记五线谱

    如果你开始读五线谱 最重要的建议就是读五线谱时 忘记六线谱 忘记 忘记 忘记 因为五线谱和六线谱完全是两个不同的概念 虽然六线谱只比五线谱多出一条横线 关键是二者记谱的机理风马牛不相及 五线谱是采用音高记谱 而六线谱是音位记谱 虽然音高和音
  • Linux kernel 关机的底层操作

    Linux关机相关命令如 halt shutdown poweroff和reboot 其实它们底层都是调用名为reboot的system call 其具体实现是在内核目录的kernel sys c中的 SYSCALL DEFINE4 reb
  • 用python怎么输出个人信息,python怎么输出个人信息

    大家好 给大家分享一下python输入自己的姓名 输出hello 某某某同学 很多人还不知道这一点 下面详细解释一下 现在让我们来看看 1 python要求用户输入姓名并输出 name input 请输入姓名 print 你好 name 代
  • 内核hwmon驱动框架详解以及海思芯片温度驱动分析

    1 hwmon驱动框架介绍 hwmon即hardware monitoring framework 硬件监视框架 可以把温度传感器 风扇 电源管理等设备的驱动都利用hwmon框架去实现 在设备的归类上比较容易理解 2 hwmon驱动框架分析
  • 解决ubuntu22.04不能使用todesk问题(显示没有x11桌面)

    这个版本默认使用的是Wayland 所以可能有点问题 x11的适配比较好 也懒得对比了 毕竟todesk好用多了 sudo nano etc gdm custom conf 将WaylandEnable false前面的注释去掉 ctrl
  • Tuning Muxers

    Tuning Muxers WebLogic Server uses software modules called muxers to read incoming requests on the server and incoming r
  • C++ 通讯录管理系统

    include showMenu h using namespace std void showMenu cout lt lt lt lt endl cout lt lt 1 添加联系人 lt lt endl cout lt lt 2 显示
  • Deep Learning Tutorials(一):开头语

    万事开头难 当你开始看这些时候 有可能你已经开始了研究生生活 不在像本科时候过着那种得过且过 考试不挂科的日子 你整天盲目 漫无目的的过日子实际上是在浪费自己的生命 所以坚持每天进步吧 回到正事 你可能开始从事深度学习研究或者有关机器学习方
  • 在PyCharm中查看调用函数的说明文档

    说明文档对函数进行说明解释 帮助更好理解函数的功能 在PyCharm编写代码时 可以通过鼠标悬停 查看调用函数的说明文档 可以查看python内置函数的说明文档 我们也可以给自己创建的函数添加说明文档 辅助理解函数的作用 如下
  • 为什么计算机是32位64位,64位是x86还是x64_为什么64位是X64,32位是X86?

    其它网友回答 windows系统64位的是x64 说明这个系统是可以向下兼容32位程序的64位系统 32位的不是x32而是x86说明该系统是可以向上兼容非32位程序的32位系统 其它网友回答 同意楼上说法 其它网友回答 1 x86的由来 8
  • 时序预测

    时序预测 MATLAB实现时间序列回归之Bootstrapped测试 目录 时序预测 MATLAB实现时间序列回归之Bootstrapped测试 基本介绍 程序设计 学习小结 参考资料 基本介绍 对传统规格测试中尺寸失真的另一种反应是自举
  • idea连接MYSQL报错汇总

    idea连接MYSQL报错汇总 The last packet sent successfully to the server was 0 milliseconds ago The driver has not received any p
  • Face_Recognition 人脸识别函数详解

    加载人脸图片文件 load image file file mode RGB 通过 PIL image open 加载图片文件 mode 有两种模式 RGB 3通道 和 L 单通道 返回 numpy array 查找人脸位置 人脸分割 fa
  • FPGA基础知识19(FPGA异步时钟设计中的同步策略 异步时钟 打两拍 握手机制)

    需求说明 IC设计基础 内容 异步时钟处理方法 来自 时间的诗 原文 https wenku baidu com view 586e8afb7e21af45b307a8b8 html 原文 http ee ofweek com 2011 1