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

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

3天内不再提示

跨时钟域信号如何处理?

8ECz_icstudy 来源:lq 2019-02-04 15:52 次阅读

之前有一篇文章讲述了跨时钟信号的处理第1篇,IC面试中常被问到——跨时钟域信号如何处理?这是第2篇。

前面提到,用敲两级DFF的办法(两级DFF同步器)可以实现单比特信号跨时钟域处理。但你或许会有疑问,是所有的单比特信号跨时钟域都可以这么处理吗?

NO!两级DFF同步器,是对信号有一定的要求的。

想象一下,如果频率较高的时钟域A中的信号D1 要传到频率较低的时钟域B,但是D1只有一个时钟脉冲宽度(1T),clkb 就有几率采不到D1了,如图1。

图1 快时钟域信号传递到慢时钟域

因此只有当D1 在很长一段时间内为1或0,确保一定可以被clkb采样到,才能用两级DFF同步器处理。

如果信号D1 只有1T或几个T的脉宽,又需要传到时钟频率较低甚至或快或慢不确定的时钟域B,这种情况该怎么如何处理呢?

1

握手协议(handshake)异步信号处理是一种常见的异步信号处理方法。常见的握手协议异步信号处理行为波形图大致如下图2:

图2 一种handshake电路波形

信号d_in 所处时钟域是clk_in,且d_in只有1T 的宽度,想要传送到clk_out 时钟域(clk_out 跟clk_in不相关)。

因为clk_out 和 clk_in相位关系不确定,时钟周期大小关系不确定,无法保证一定能采样到d_in。

因此需要把d_in展宽,产生d_req 信号;

d_req 信号一直拉高,经过clk_out时钟域两级DFF 同步器后,得到d_reg_sync;

取d_req_sync 上升沿1T,即可得到传送到clk_out 时钟域的d_out。

此时,d_in 从clk_in 传送到clk_out 的任务就算是结束了。

但对于handshake 电路来说,任务还没结束,因为d_req 还一直是高电平。

因此,需要把d_req_sync 信号再用两级DFF同步器,传回clk_in 时钟域,得到d_ack信号;

当clk_in 看到d_ack拉高后,就可以把d_req 信号拉低,到这里一个handshake电路行为才算是结束了。

2

根据上面的波形图,可以看到握手协议异步信号处理并不复杂,但是细心的朋友应该会注意到,这个处理方法信号传递的速度相对较慢。

从图2 的波形来看,至少需要3个clk_in 和2个clk_out时钟周期。根据不同的应用需求,人们会对图2的波形做不同的改造。但万变不离其宗,原理都是一样的,电路也大同小异。

最后留4个问题供大家思考,以增进对handshake电路的理解:

1. 图2中的d_req的逻辑怎么实现?

2. 图2中的d_out的逻辑怎么实现?

3. 假设时钟域clka比clkb 频率高,如果输入信号的两个相邻脉冲D0和D1非常较近,如下图所示,如果使用握手协议处理,会发生怎样的事情?

4.问题3里面,如果要确保D1数据一定要被能传送到clkb,电路该如何实现?

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

    关注

    11

    文章

    2790

    浏览量

    76734
  • 时钟脉冲
    +关注

    关注

    0

    文章

    19

    浏览量

    12681

原文标题:IC面试中常被问到:跨时钟域信号处理——握手协议(handshake)

文章出处:【微信号:icstudy,微信公众号:跟IC君一起学习集成电路】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    何处理时钟信号

    最近是IC相关专业学生找工作的高峰期,大家可以在文章末尾或者知识星球留言讨论笔试或者面试题哦。时钟处理在面试中常常被问到,今天IC君就来聊一聊这个话题。
    的头像 发表于 09-25 09:39 7717次阅读

    关于时钟信号处理方法

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

    时钟信号何处理 时钟电路设计

    在一个复杂的SoC(System on Chip)系统中,不可能只有一个时钟。我们一般认为,一个时钟控制的所有寄存器集合处于该时钟时钟域中。
    的头像 发表于 08-01 15:48 2268次阅读
    <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设计中有多个时钟时如何处理

    FPGA设计中有多个时钟时如何处理时钟的基本设计方法是:(1)对于单个
    发表于 02-24 15:47

    何处理好FPGA设计中时钟问题?

    时钟处理是 FPGA 设计中经常遇到的问题,而如何处理
    发表于 09-22 10:24

    何处理好FPGA设计中时钟间的数据

    时钟处理是FPGA设计中经常遇到的问题,而如何处理
    发表于 07-29 06:19

    何处理时钟间的数据呢

    时钟处理是什么意思?如何处理时钟
    发表于 11-01 07:44

    如何解决异步FIFO时钟亚稳态问题?

    时钟的问题:前一篇已经提到要通过比较读写指针来判断产生读空和写满信号,但是读指针是属于读时钟
    的头像 发表于 09-05 14:29 6056次阅读

    揭秘FPGA时钟处理的三大方法

    时钟处理是 FPGA 设计中经常遇到的问题,而如何处理
    的头像 发表于 12-05 16:41 1644次阅读

    介绍3种方法时钟处理方法

    时钟处理是FPGA设计中经常遇到的问题,而如何处理
    的头像 发表于 09-18 11:33 2.2w次阅读
    介绍3种方法<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>处理</b>方法

    基于FPGA的时钟信号处理——MCU

    问题,不过请注意,今后的这些关于异步信号处理的文 章里将会重点从工程实践的角度出发,以一些特权同学遇到过的典型案例的设计为依托,从代码的角度来剖析一些特权同学认为经典的时钟
    发表于 11-01 16:24 11次下载
    基于FPGA的<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>——MCU

    三种时钟处理的方法

    时钟处理是FPGA设计中经常遇到的问题,而如何处理
    的头像 发表于 10-18 09:12 7757次阅读

    FPGA时钟处理方法(二)

    上一篇文章已经讲过了单bit时钟处理方法,这次解说一下多bit的时钟
    的头像 发表于 05-25 15:07 1023次阅读
    FPGA<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>处理</b>方法(二)

    时钟信号该如何处理呢?

    时钟是如何产生的呢?现在的芯片(比如SOC,片上系统)集成度和复杂度越来越高,通常一颗芯片上会有许多不同的信号工作在不同的时钟频率下。
    的头像 发表于 06-27 11:39 1568次阅读
    <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>呢?

    何处理时钟这些基础问题

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