亚稳态

触发器是FPGA设计中最常用的基本器件。触发器工作过程中存在数据的建立(setup)和保持(hold)时间。对于使用上升沿触发的触发器来说,建立时间就是在时钟上升沿到来之前,触发器数据端数据保持稳定的最小时间。而保持时间是时钟上升沿到来之后,触发器数据端数据还应该继续保持稳定的最小时间。我们把这段时间成为setup-hold时间(如图1所示)。在这个时间参数内,输入信号在时钟的上升沿是不允许发生变化的。如果输入信号在这段时间内发生了变化,输出结果将是不可知的,即亚稳态 (Metastability)。
 
 在异步设计中,完全避免亚稳态是不可能的。因此,设计的基本思路应该是:首先尽可能减少出现亚稳态的可能性,其次是尽可能减少出现亚稳态并给系统带来危害的可能性。以下是根据实际工作总结出来的几种同步策略。

1. 双锁存器法

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

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

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。

结束语

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

FPGA笔记2——跨时钟域同步信号方法相关推荐

  1. 异步fifo_跨时钟域同步(异步FIFO)

    本文使用 Zhihu On VSCode 创作并发布 跨时钟域同步(异步FIFO) 之前学习了跨时钟域下的单bit信号同步的方法,这些单bit信号多是作为控制信号或者标志信号来使用,再实际的项目中,处 ...

  2. 为什么多比特不能采用打两拍的方法进行跨时钟域同步?

    (1)为什么多比特不能采用打两拍的方法进行跨时钟域同步? 原因1:假设从时域A垮到时域B,是域A从00变到11,在时域B还能采样到从00变到11吗?在时域B中,时钟的上升沿来的时间是肯定一致的,但是各 ...

  3. 跨时钟域同步1---亚稳态的产生和解决方案

    以下内容参考自:<正点原子逻辑设计指南> 逻辑设计中一般存在多个时钟,那么信号在多个时钟之间如何切换呢?这个就涉及到了异步电路设计,异步电路设计也是逻辑设计中非常重要的设计,可以说异步处理 ...

  4. 跨时钟域同步-结绳法

    结绳法的主要思想是利用数据的边沿做时钟,将脉冲延长,直到采集到数据,然后复位. 上图是结绳法的电路示意图,这里需要注意的是,clkB域需要等待三个clkB才会在最后一个寄存器输出并完成输入端的复位.所 ...

  5. [FPGA][基础模块]跨时钟域传播脉冲信号

    clk_a 周期为10ns clk_b 周期为34ns 代码: module pulse(input clk_a,input clk_b,input signal_a,output reg signa ...

  6. 同步电路与跨时钟域电路设计1——单bit信号的跨时钟域传输(同步器)

    同步电路与全局异步电路 同步电路 同步电路的定义 即电路中的所有受时钟控制的单元(如触发器Flip Flop.寄存器Register),全部由一个统一的全局时钟控制. 例子: 两个触发器都受同一个时钟 ...

  7. 【读书笔记】Verilog的亚稳态现象和跨时钟域处理方法

    书※目:FPGA深度解析_第七章_樊继明著     高级FPGA设计结构.实现和优化_第六章_孟宪元译 文章目录 一.亚稳态 (1)跨时钟域的亚稳态现象 (2)亚稳态的多径传输 二.跨时钟域处理 2. ...

  8. FPGA跨时钟域处理的三大方法

    跨时钟域处理是FPGA设计中经常遇到的问题,而如何处理好跨时钟域间的数据,可以说是每个FPGA初学者的必修课.如果是还在校的本科生,跨时钟域处理也是面试中经常常被问到的一个问题. 在本篇文章中,主要介 ...

  9. FPGA设计中,跨时钟域问题的处理

    FPGA设计中,跨时钟域问题的处理 今天和大侠简单聊一聊FPGA设计中跨时钟域问题的处理,话不多说,上货. 跨时钟域处理是FPGA设计中经常遇到的问题,而如何处理好跨时钟域间的数据,可以说是每个FPG ...

最新文章

  1. lnmp shell安装脚本
  2. 鸿蒙0s是什么意思,华为官宣,鸿蒙0S正式来临?
  3. 沉默是金不如开口为银
  4. [Swift]LeetCode522. 最长特殊序列 II | Longest Uncommon Subsequence II
  5. 软件编程思想的些许感想
  6. 算法优化:最大m个子段和,问题规模从1个子段和扩展到m个,动态规划
  7. poj1330Nearest Common Ancestors(LCA小结)
  8. .Net转Java自学之路—基础巩固篇八—总结(封装、继承、多态)
  9. FreeBSD大败局
  10. java开源图像处理ku_83 项开源视觉 SLAM 方案够你用了吗?
  11. 我珍藏的内容分享给大家
  12. 2015年《大数据》高被引论文Top10文章No.10——我国大数据交易的主要问题及建议...
  13. 漫步线性代数十五——余弦和投影
  14. kibana从入门到精通-Kibana配置详解
  15. IP地址详解,网络分段
  16. MATLAB图像处理实验——细胞图像的分割和计数
  17. Android9.0 HAL 层开发
  18. 别人家的公司年终奖52个月工资-互联网企业年终裁员脸在哪
  19. 利用tushare平台,统计过去一年A股涨停板
  20. tm1650中文资料_TM1650+msp430单片机 调试及遇到问题的总结

热门文章

  1. Java设计模式-软件设计原则
  2. (争议)2006互联网人物盘点:十大风流人物 还看今朝
  3. 如何高效且优雅做笔记?
  4. 四、交换机的端口聚合配置
  5. CAD命令:修剪和延伸命令的使用技巧汇总(下)
  6. 站长工具里面的html转换功,阿里巴巴怎样设置站长工具
  7. windows下安装mmdetection
  8. 电力系统 matlab程序,电力系统稳定性分析matlab程序
  9. 织梦ajax跨域提交自定义表单
  10. Ubuntu22.04下安装OpenFOAM