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

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

3天内不再提示

芯片跨时钟域设计案例简析(一)

全栈芯片工程师 来源:全栈芯片工程师 2024-01-18 09:24 次阅读

(一)单bit信号同步器

最经典的2DFF 1-bit同步器如下,下图结构通常用于单bit控制信号的异步处理:

3a796b5a-b54a-11ee-8b88-92fbcf53809c.png

绝大数情况下,当第一个寄存器R1进入亚稳态后,在第二级寄存器R2采样R1的输出前,R1的输出已经能稳定在0或1。

注意:

cdc_s信号必须做到glitch free,也就是我们通常说的寄存输出;

int_s信号链路禁止组合逻辑,其本质也是杜绝glitch的出现。

偏执狂的IC designer肯定会问,第一级寄存器R1的行为到底是啥样子的?由于cdc_s信号是Tx clock Domain,而R1寄存器的采用时钟是Rx clock Domain,当Rx clock采样时,若cdc_s正好跳变(不满足setup/hold),那么就会出现如下两种情况,而前仿真是无法仿真出下图2种行为的(具体见芯片设计之CDC异步电路(一)一文)。

3a8b93a2-b54a-11ee-8b88-92fbcf53809c.png

(二DMUX同步器 两级寄存器(先进工艺要求三级)的同步器通常用于控制信号的异步处理,但是data bus的异步处理呢?我们可以采用DMUX结构。

3a9e4b8c-b54a-11ee-8b88-92fbcf53809c.png

注意:

tx_sel、rx_sel有效时,cdc_d数据总线必须保持稳定;

(三握手处理

源时钟域先将数据发送到总线上,并给出一个valid信号,而目标时钟域同步valid信号后,若valid信号为高电平则采样总线数据,并返回一个ready信号给源时钟域。源时钟域再次同步该ready信号,若ready信号为高,则代表一次握手成功,数据传输完毕,开始进行下一次数据传输。

采用握手机制可以保证异步multi-bit数据传输不出现错误,但由于需要等待握手的完成再传输数据,因此传输效率较低。

3aae9bb8-b54a-11ee-8b88-92fbcf53809c.png

(四)异步FIFO

老生常谈的异步FIFO,其本质是采用格雷码,在地址连续的情况下,其对应格雷码每个周期只变化1bit,因此可以直接异步采样。

3ac449fe-b54a-11ee-8b88-92fbcf53809c.png

注意:

FIFO的overflow、underflow问题;

tx_addr是连续的,即地址hamming distance是1;

FIFO深度须2^n;

经典的FIFO结构如下:

3adb6062-b54a-11ee-8b88-92fbcf53809c.png

核心电路:是将FIFO读写地址指针的二进制码转成格雷码,方便同步器打两拍传递到对向时钟域去做空满判断。

3ae5ce9e-b54a-11ee-8b88-92fbcf53809c.png

空满判断:为了区别空满,我们增加1bit的地址(MSB),我习惯直接用Gray码比较读写指针判定空满:

当Gray码读写指针完全相等时,FIFO空;

当Gray码读写指针最高2bit相反,其余bit相同时,FIFO满; 通常二进制码比较空满是:最高bit不同,其余bit相同,则FIFO满,而格雷码则不同哈。

3af20dda-b54a-11ee-8b88-92fbcf53809c.png








审核编辑:刘清

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

    关注

    31

    文章

    5336

    浏览量

    120242
  • CDC
    CDC
    +关注

    关注

    0

    文章

    57

    浏览量

    17800
  • 同步器
    +关注

    关注

    1

    文章

    98

    浏览量

    14629
  • FIFO存储
    +关注

    关注

    0

    文章

    103

    浏览量

    5969
  • 异步处理
    +关注

    关注

    0

    文章

    7

    浏览量

    6550

原文标题:芯片跨时钟域设计(一)

文章出处:【微信号:全栈芯片工程师,微信公众号:全栈芯片工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

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

    时钟路径分析报告分析从时钟(源时钟)跨越到
    的头像 发表于 11-27 11:11 5865次阅读
    vivado约束案例:<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>路径分析报告

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

    1、时钟与亚稳态 时钟通俗地讲,就是模块之间有数据交互,但是模块用的不是同
    发表于 10-16 15:47 1150次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>控制信号传输设计方案

    关于时钟信号的处理方法

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

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

    时钟处理是FPGA设计中经常遇到的问题,而如何处理好时钟间的数据,可以说是每个FPGA初
    发表于 07-29 06:19

    两级DFF同步器时钟处理

    异步bus交互()— 两级DFF同步器时钟处理 & 亚稳态处理1.问题产生现在的芯片(比如SOC,片上系统)集成度和复杂度越来越高,通
    发表于 02-17 06:34

    FPGA时钟处理简介

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

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

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

    如何利用FPGA设计时钟的同步策略?

    基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时钟系统。但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块与外围芯片的通信中,
    的头像 发表于 09-01 08:29 5549次阅读
    如何利用FPGA设计<b class='flag-5'>一</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 3347次阅读

    关于时钟的详细解答

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

    时钟电路设计总结

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

    FPGA时钟处理方法()

    时钟是FPGA设计中最容易出错的设计模块,而且时钟
    的头像 发表于 05-25 15:06 1986次阅读
    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 1023次阅读
    FPGA<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>处理方法(二)

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

    fpga时钟通信时,慢时钟如何读取快时钟发送过来的数据? 在FPGA设计中,通常需要
    的头像 发表于 10-18 15:23 1067次阅读

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

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