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

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

3天内不再提示

CDC跨时钟域处理及相应的时序约束

冬至子 来源:FPGA探索者 作者:FPGA探索者 2023-06-21 14:59 次阅读

**CDC(Clock Domain Conversion)**跨时钟域分单bit和多bit传输,其中:

1. 单bit(慢时钟域到快时钟域) :用快时钟打两拍,直接采一拍大概率也是没问题的,两拍的主要目的是消除亚稳态;

其中:

(1)为了更长的平均无故障时间 MTBF( Mean Time Between Failures), 需要配合一个 ASYNC_REG 的约束 ,把用作简单同步器的多个寄存器放入同一个 SLICE,以降低走线延时的不一致和不确定性。

(* ASYNC_REG = "TRUE" *) reg rst_reg_0;
(* ASYNC_REG = "TRUE" *) reg rst_reg_1;

(2)或者:直接在约束文件里进行约束

set_property ASYNC_REG TRUE [get_cells [list rst_reg_0 rst_reg_1]]

2. 单bit(快时钟域到慢时钟域) :握手(脉冲展宽)、异步FIFO、异步双口RAM;快时钟域的信号脉宽较窄,慢时钟域不一定能采到,可以通过握手机制让窄脉冲展宽,慢时钟域采集到信号后再“告诉”快时钟域已经采集到信号,确保能采集到;

3. 多bit跨时钟域异步FIFO 、异步双口RAM、握手、格雷码;

(1)使用异步FIFO的IP

实际上是用 FPGA 内部的 BRAM 来搭建,所有的控制逻辑都在 BRAM 内部,是推荐的 FIFO 实现方式。

时序约束简单,进行时序例外约束, 只需要 set_clock_groups 将读写时钟约束为异步时钟组即可 ,简单高效。

set_property -asynchronous  -group [get_clocks write_clock] \\
                            -group [get_clocks read_clock]

(2)自己写外部控制逻辑的FIFO

格雷码做异步 FIFO 的跨时钟域处理,计数器和读写控制逻辑在 BRAM 或者 RAM 的外部,除了代码的合理设计以外,还需要进行额外的时序例外约束,不能简单使用 set_clock_groups 约束异步时钟组,还需要考虑外部的读写逻辑的约束。

Xilinx建议这里设置set_max_delay来约束跨时钟域路径,约束的原则是:最大路径延时等于或者略小于目的时钟的一个周期。

写逻辑从cell1到cell2的约束中,cell2的驱动时钟周期为5,如下所示,读逻辑约束进行相应约束。

set_max_delay 5from [get_cells cell1]to [get_cells cell2] –datapath_only

多bit中,强烈推荐使用异步FIFO的IP来实现 ,我在实际工程中使用多次,简单方便。

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

    关注

    9

    文章

    428

    浏览量

    26665
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1369

    浏览量

    115107
  • CDC
    CDC
    +关注

    关注

    0

    文章

    57

    浏览量

    17875
  • 同步器
    +关注

    关注

    1

    文章

    98

    浏览量

    14730
  • FIFO存储
    +关注

    关注

    0

    文章

    103

    浏览量

    6045
收藏 人收藏

    评论

    相关推荐

    vivado约束案例:时钟路径分析报告

    时钟路径分析报告分析从一个时钟(源时钟)跨越到另一个
    的头像 发表于 11-27 11:11 5953次阅读
    vivado<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 6473次阅读

    处理时钟CDC)信号同步的最常见方法

    时钟( **Clock Domain Crossing,CDC** )通俗地讲,就是 **模块之间数据交互时用的不是同一个时钟进行驱动*
    的头像 发表于 09-20 11:24 4267次阅读
    <b class='flag-5'>处理</b><b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>(<b class='flag-5'>CDC</b>)信号同步的最常见方法

    时钟时钟约束介绍

    ->Core Cock Setup:pll_c0为(Latch Clock) 这两个是时钟时钟,于是根据文中总结:对于
    发表于 07-03 11:59

    关于cdc时钟处理的知识点,不看肯定后悔

    关于cdc时钟处理的知识点,不看肯定后悔
    发表于 06-21 07:44

    XDC路径的鉴别、分析和约束方法

    我们知道XDC与UCF的根本区别之一就是对时钟路径(CDC)的缺省认识不同,那么碰到FPGA设计中常见的CDC路径,到底应该怎么
    发表于 11-18 04:04 6456次阅读
    XDC路径的鉴别、分析和<b class='flag-5'>约束</b>方法

    cdc路径方案帮您解决时钟难题

    这一章介绍一下CDC也就是时钟可能存在的一些问题以及基本的时钟
    的头像 发表于 11-30 06:29 7296次阅读
    <b class='flag-5'>cdc</b>路径方案帮您解决<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>难题

    关于FPGA中时钟的问题分析

    时钟问题(CDC,Clock Domain Crossing )是多时钟设计中的常见现象。在FPGA领域,互动的异步
    发表于 08-19 14:52 3422次阅读

    CDC单bit脉冲时钟处理介绍

    单bit 脉冲时钟处理 简要概述: 在上一篇讲了总线全握手时钟
    的头像 发表于 03-22 09:54 3601次阅读

    介绍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>方法

    CDC时钟的基础概念

    时钟clock domain:以寄存器捕获的时钟来划分时钟。 单时钟
    的头像 发表于 08-29 15:11 2580次阅读

    XDC约束技巧之CDC

    上一篇《XDC 约束技巧之时钟篇》介绍了 XDC 的优势以及基本语法,详细说明了如何根据时钟结构和设计要求来创建合适的时钟约束。我们知道 X
    的头像 发表于 04-03 11:41 2254次阅读

    FPGA时钟处理方法(二)

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

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

    时钟CDC)的应从对亚稳定性和同步性的基本了解开始。
    的头像 发表于 06-27 14:25 1166次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>电路设计—单比特信号传输

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

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