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

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

3天内不再提示

跨时钟域处理方式

CHANBAEK 来源:新芯设计 作者:新芯设计 2023-06-21 11:53 次阅读

引言

  类似于电源域(电源规划与时钟规划亦是对应的),假如设计中所有的 D 触发器都使用一个全局网络 GCLK ,比如 FPGA 的主时钟输入,那么我们说这个设计只有一个时钟域。假如设计有两个输入时钟,分别给不同的接口使用,那么我们说这个设计中有两个时钟域,不同的时钟域,有着不同的时钟频率和时钟相位。

  在实际的 FPGA 系统设计中,经常有多个不同的时钟源的参与,比如 FPGA 内部的 Clock Wizard 时钟分频 IP 核,连接到许多不同的频率输入的 IP 模块,这个在视频显示系统中是很常见的,毕竟,不同的视频显示格式需要不同的像素频率,也就需要不同的输入时钟。例如 640X480@60Hz 需要 25.175MHz 时钟,而 1280X720@60Hz 需要 74.2MHz 时钟等等。

一、跨时钟域处理方式

1、对于单比特数据的跨时钟域: 打两拍 (即定义两级寄存器对输入数据进行延拍,这个在解决 “亚稳态” 方式的随笔中已经提及)。

2、对于多比特数据的跨时钟域: 异步 FIFO(异步双口 RAM) 。例如前面一个模块的数据发送速率为 100MHz,而后面一个模块的数据接收速率为 50MHz,这样就是数据速率传输的不同步,那么,我们可以在中间插入一个异步 FIFO,一端接收前面的 100MHz 速率的数据进行缓存,另一端发送 50MHz 速率的数据,从而达到数据的同步接收与发送。当然,这里的 FIFO 的深度就需要自己计算了。

3、 握手协议 。由于两个异步时钟的频率关系不确定,所以,也就无法保证能否满足触发器之间的建立时间和保持时间,如果违反了建立时间或者保持时间的要求,那么接收域将会采样到处于亚稳态的数据,那么系统就可能崩溃了。

  因此,我们可以使如下用握手协议方式处理跨时钟域数据传输,只需要对双方的握手信号(req 和 ack)分别使用脉冲检测方法进行同步。如下所示,假设 req、ack、data 总线在初始化时都处于无效状态,发送域先把数据放入总线,随后发送有效的 req 信号给接收域,接收域在检测到有效的 req 信号后锁存数据总线,然后回送一个有效的 ack 信号表示读取完成应答,发送域在检测到有效 ack 信号后撤销当前的 req 信号,接收域在检测到 req 撤销后也相应撤销 ack 信号,此时完成一次正常握手通信

图片

基于握手协议的跨时钟域处理方式

  此后,发送域可以继续开始下一次握手通信,依次循环。该握手协议方式能够保证接收到的数据稳定可靠,有效的避免了亚稳态的出现,但是,控制信号握手检测会消耗通信双方较多的时间和资源。这样的通信协议类似于 AXI4-Stream 流协议,当然,前者是一次握手发送一次数据,后者是一次握手可以连续发送数据,AXI4-Stream 流协议的主要通信信号为 tvalid 和 tready,这个协议在视频流传输中非常重要且实用,大家可以去学一学。

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

    关注

    1622

    文章

    21522

    浏览量

    599649
  • fifo
    +关注

    关注

    3

    文章

    382

    浏览量

    43426
  • 时钟
    +关注

    关注

    10

    文章

    1685

    浏览量

    131055
  • 触发器
    +关注

    关注

    14

    文章

    1990

    浏览量

    60932
收藏 人收藏

    评论

    相关推荐

    关于时钟信号的处理方法

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

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

    以手到擒来。这里介绍的三种方法时钟处理方法如下:打两拍;异步双口 RAM;格雷码转换。01方法一:打两拍大家很清楚,处理
    发表于 09-22 10:24

    三种时钟处理的方法

    的三种方法时钟处理方法如下:  1. 打两拍;  2. 异步双口RAM;  3. 格雷码转换。  方法一:打两拍  大家很清楚,处理
    发表于 01-08 16:55

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

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

    如何处理时钟间的数据呢

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

    FPGA时钟处理简介

    (10)FPGA时钟处理1.1 目录1)目录2)FPGA简介3)Verilog HDL简介4)FPGA
    发表于 02-23 07:47

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

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

    总线半握手时钟处理

    总线半握手时钟处理 简要概述: 在上一篇讲了单bit脉冲同步器时钟
    的头像 发表于 04-04 12:32 2659次阅读
    总线半握手<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>处理</b>

    关于时钟的详细解答

    每一个做数字逻辑的都绕不开时钟处理,谈一谈SpinalHDL里用于时钟
    的头像 发表于 04-27 10:52 4166次阅读
    关于<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>的详细解答

    介绍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设计中经常遇到的问题,而如何处理
    的头像 发表于 10-18 09:12 7035次阅读

    时钟电路设计总结

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

    FPGA时钟处理方法(一)

    时钟是FPGA设计中最容易出错的设计模块,而且一旦时钟出现问题,定位排查会非常困难,因为
    的头像 发表于 05-25 15:06 1778次阅读
    FPGA<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>处理</b>方法(一)

    FPGA时钟处理方法(二)

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

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

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