0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

跨时钟域电路设计—单比特信号传输

冬至子 来源:数字IC小站 作者:Eternity233 2023-06-27 14:25 次阅读
  • 亚稳态

时钟域(CDC)的应从对亚稳定性和同步性的基本了解开始。用普通的话来说,亚稳定性是指不稳定的中间状态,但是在此状态下,任何微小的扰动将导致最终状态变为稳定状态,但是并不能保证最终的状态就是设计所期待的状态,换句话就是可能发生传输错误。当应用于数字电路中的触发器时,它表示触发器的输出可能尚未稳定,不确定是否能到最终期望值的状态。

触发器进入亚稳态的一种方法是违反了其建立或保持时间。在异步时钟域跨越(CDC)中,其中源时钟和目标时钟没有频率关系,来自源域的信号在驱动目的域的触发器时,无法保证目的域的触发器能够满足建立时间和保持时间。当目的域的触发器的输出变为亚稳态并且在必须再次对其输出进行采样(由目标域中的第二个触发器完成)时尚未收敛,则将发生同步失败。更糟糕的是,下一个触发器也可能变为亚稳态,从而导致亚稳定性在设计中传播!

  • 跨时钟域同步器

同步器是跨时钟域中设计的一种常用电路,其目的是把同步失败的可能性降到最低。我们希望亚稳态在一个同步周期(目标时钟域的时钟周期)内解决,以便我们可以在目标时钟域中使得触发器的输出是安全采样值。在此我们把同步器的两次采样出现问题之间的时间间隔,称为平均故障间隔时间(MTBF)。

在跨时钟域(CDC)中出现亚稳态的概率与以下因素成正比:

  1. 目标时钟域的时钟频率
  2. 跨时钟边界的数据传输速率

根据上述因素,我们常用的同步器电路如下:

  • 两个触发器同步器

图片

最基本的同步器是两个串联的触发器,均由目的时钟域提供时钟。这个电路称为两个触发器同步器。如果输入数据的变化非常接近接收时钟边沿(在建立/保持时间内),则同步器中的第一个触发器可能会变为亚稳态,但是在信号被采样之前,仍然有一个完整的时钟使信号变得稳定--第二触发器。然后,目标时钟域的逻辑使用的是第二个触发器的输出。

两级触发器可防止亚稳态传播的原理:假设第一级触发器的输入不满足其建立/保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必须稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满足其建立保持时间。同步器有效的条件:第一级触发器进入亚稳态后的恢复时间 + 第二级触发器的建立时间 <= 时钟周期。如果不满足上述表达式,那么到第二个触发器开始,信号仍然可能是亚稳态的。在这种情况下,将发生同步错误,并且设计可能会发生故障,但是这种情况是很罕见的。

两个触发器同步器足以满足很大部分应用的需求了。为了进一步提高MTBF,有时会使用具有更好的建立/保持时间特性的库单元(其具有低阈值电压)构建两个触发器同步器。

图片

在跨时钟域(CDC)发送信号到同步器之前,通常先在源时钟域中使用寄存器保存信号。这也是为什么上图中介绍为什么在两个时域的触发器之间需要没有组合逻辑的原因,只有这样才可以首先消除了组合电路产生的毛刺。如下图所示:

图片

因为在组合逻辑电路中常常因为各个输入信号的不一致性以及各路径延迟的不一样,可能导致输出结果存在毛刺。

而在跨时钟域时,又不确定目的时钟域时钟上升沿什么时候到来,因此目的时钟域时钟的采样就更加无法保证。

因此必须保证两个时域的触发器之间没有组合逻辑。

  • 慢时钟域到快时钟域

最简单的情况是将信号从慢速时钟域传递到快速时钟域。只要快时钟的频率大于慢时钟频率的1.5-2倍,通常就不会有问题。快速目标时钟将简单地对慢速信号进行多次采样。在这些情况下,一个简单的两级串联触发器同步就足够了。

目的时钟域如果不采取任何操作,那么就会多次采样同一个值,这会导致一个问题--电路误以为这是多个操作。因此为了避免这种错误的发生,通常添加一些简单的逻辑使得同步后的采样值出现周期和原时钟域的一样。具体操作,在soc设计方法与实现书上有讲。

如果快时钟的频率小于慢时钟频率的1.5倍,也就是稍微快点,这个欢迎各位讨论,我觉得使用。

  • 快时钟域到慢时钟域

困难的情况是将快速信号传递到慢速时钟域。明显的问题是,如果快速信号上的脉冲短于慢速时钟的周期,则该脉冲可能会在被慢速时钟采样之前消失。下面的波形显示了这种情况。

图片

还有一个考虑较少的问题是,即使脉冲只是比慢时钟的周期稍宽,信号也会在目标触发器的建立/保持时间内(在慢时钟上)变化,这会违反时序并导致亚稳性。

在处理上述问题时,首先应该确认是否需要源信号中的每个值,如果可以不需要,那么采样在上文异步fifo中设计的格雷码就可以异步FIFO设计。当然如果需要在目的域中使用每个值,那么就得想办法设计新方法。

  • 还是使用两级触发器

一个简单的两个触发器同步器是跨时钟域交叉传输信号的最快方法。只要在快速时钟域中生成的信号比慢速时钟的周期时间宽,在许多应用中就足够了。例如,如果只需要同步缓慢变化的状态信号,则可能会起作用。一个安全的经验法则是信号必须大于目标时钟周期宽度的1.5倍。这保证了信号将被目标时钟的至少一个(但可能更多)时钟沿采样。可以使用SystemVerilog断言(SVA)轻松检查需求。

当源和目标的相对时钟频率固定时,很容易实现1.5x的周期宽度。但是在现实世界中,情况并非如此。目标时钟可以采用多种不同的频率,它们可以与源时钟更快/更低/相同。在那种情况下,设计时钟域交叉信号来满足最慢目标时钟的1.5倍周期宽度并不容易。

  • 采用具有反馈信号的同步器

图片

上图中,源域通过两个触发器同步器将信号发送到目的时钟域,然后通过另一个两个触发器同步器将同步信号传递回源时钟域,作为反馈确认。下图显示了同步器的波形。

图片

该解决方案非常安全,但是由于在允许再次更改信号之前需要在两个方向上进行同步,因此确实存在增加延迟的代价。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SoC设计
    +关注

    关注

    1

    文章

    147

    浏览量

    18750
  • MTBF
    +关注

    关注

    1

    文章

    29

    浏览量

    13553
  • CDC
    CDC
    +关注

    关注

    0

    文章

    56

    浏览量

    17747
  • 触发器
    +关注

    关注

    14

    文章

    1995

    浏览量

    61002
  • 同步器
    +关注

    关注

    1

    文章

    91

    浏览量

    14597
收藏 人收藏

    评论

    相关推荐

    时钟设计之控制信号传输工作原理

    时钟通俗地讲,就是模块之间有数据交互,但是模块用的不是同一个时钟进行驱动。
    的头像 发表于 10-08 17:00 2585次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>设计之控制<b class='flag-5'>信号</b><b class='flag-5'>传输</b>工作原理

    时钟控制信号传输设计方案

    clk2的时钟。当clk1比clk2的频率高时,则称模块1(相对于模块2)为快时钟,而模块2位为慢时钟
    发表于 10-16 15:47 1129次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>控制<b class='flag-5'>信号</b><b class='flag-5'>传输</b>设计方案

    关于时钟信号的处理方法

    我在知乎看到了多bit信号时钟的问题,于是整理了一下自己对于时钟
    的头像 发表于 10-09 10:44 5878次阅读

    看看Stream信号里是如何做时钟握手的

    target,hit这种单比特信号时钟交互来进行信息的交互。基于这对信使,双方各自定义了各自的行动规则作为
    发表于 07-07 17:25

    时钟信号的几种同步方法研究

    时钟信号的同步方法应根据源时钟与目标时钟的相位关系、该
    发表于 05-09 15:21 63次下载
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>信号</b>的几种同步方法研究

    电路的角度出发,提出了一种新的SOC时钟同步电路设计的方法

    针对当前SOC内部时钟越来越复杂、接口越来越多以及亚稳态、漏信号等常见的各种问题,分析了以往的优化方法的优缺点,然后从电路的角度出发,提出了一种新的SOC
    的头像 发表于 02-09 14:30 6643次阅读
    从<b class='flag-5'>电路</b>的角度出发,提出了一种新的SOC<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>同步<b class='flag-5'>电路设计</b>的方法

    单位宽信号如何时钟

    单位宽(Single bit)信号即该信号的位宽为1,通常控制信号居多。对于此类信号,如需时钟
    的头像 发表于 04-13 09:11 1257次阅读

    单bit信号时钟传输可以使用两级同步但后果呢?

    看的东西多了,发现有些并未领会到位。单bit信号时钟传输,可以使用两级同步,但后果呢?
    的头像 发表于 05-10 10:08 800次阅读
    单bit<b class='flag-5'>信号</b>的<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>传输</b>可以使用两级同步但后果呢?

    时钟电路设计:多位宽数据通过FIFO时钟

    FIFO是实现多位宽数据的异步时钟操作的常用方法,相比于握手方式,FIFO一方面允许发送端在每个时钟周期都发送数据,另一方面还可以对数据进行缓存。需要注意的是对FIFO控制
    的头像 发表于 05-11 14:01 2859次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>电路设计</b>:多位宽数据通过FIFO<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>

    时钟电路设计总结

    时钟操作包括同步时钟操作和异步
    的头像 发表于 05-18 09:18 685次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>电路设计</b>总结

    从处理单bit时钟信号同步问题来入手

    在数字电路中,时钟处理是个很庞大的问题,因此将会作为一个专题来陆续分享。今天先来从处理单bit时钟
    发表于 06-27 11:25 1525次阅读
    从处理单bit<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>信号</b>同步问题来入手

    所有的单比特信号时钟都可以用敲两级DFF的办法处理吗?

    用敲两级DFF的办法(两级DFF同步器)可以实现单比特信号时钟处理。但你或许会有疑问,是所有的单比特
    的头像 发表于 06-28 11:39 1035次阅读
    所有的<b class='flag-5'>单比特</b><b class='flag-5'>信号</b><b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>都可以用敲两级DFF的办法处理吗?

    时钟电路设计:单位宽信号如何时钟

    单位宽(Single bit)信号即该信号的位宽为1,通常控制信号居多。对于此类信号,如需时钟
    的头像 发表于 08-16 09:53 1181次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>电路设计</b>:单位宽<b class='flag-5'>信号</b>如何<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>

    fpga时钟通信时,慢时钟如何读取快时钟发送过来的数据?

    时,由于时钟频率不同,所以可能会产生元件的不稳定情况,导致传输数据的错误。此时我们需要采取一些特殊的措施,来保证时钟
    的头像 发表于 10-18 15:23 970次阅读

    如何处理时钟这些基础问题

    对于数字设计人员来讲,只要信号从一个时钟跨越到另一个时钟,那么就可能发生亚稳态。我们称为“
    发表于 01-08 09:39 557次阅读
    如何处理<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>这些基础问题