如何解决单bit和多bit跨时钟处理问题?

描述

一、简要概述:

在芯片设计过程中,一个系统通常是同步电路和异步电路并存,这里经常会遇到CDC也就是跨时钟域处理的问题,常见的处理方法,可能大家也已经比较熟悉了,主要有单bit跨时钟处理、多bit跨时钟处理两大类,本文以一个总线全握手跨时钟域处理为例解析,单bit和多bit跨时钟处理。这里需要注意是多bit含义比较广泛和总线不是一个概念,如果多个bit之间互相没有任何关系,其实,也就是位宽大于1的单bit跨时钟处理问题,如果多个bit之间有关系,作为一个整体,那么我们就叫做总线。因此,大家常说的“多bit跨时钟处理”也就是总线跨时钟处理。

二、总线全握手应用场景:

适用慢速总线信号跨时钟域。慢到快,快到慢均可,只要保证源信号更新时间大于同步时间即可。同步周期为6或者8个慢时钟周期。

三、总线全握手原理框图:

总线全握手跨时钟域原理图如下所示,使用了两个单bit同步器模块,因为是请求和响应都是电平信号,所以这里采用单bit同步器(寄存器打2拍或者3拍)。这里反馈过来的dst_ack_sync信号,经过一定处理可以得到src_req和sync_ok信号,图中我未画出。可以确定的是当请求和响应均为低电平时,表明一次同步完成。

两级触发器同步原理:假设第一级触发器的输入不满足其建立保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必须稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满足其建立保持时间。同步器有效的条件:第一级触发器进入亚稳态后的恢复时间 + 第二级触发器的建立时间 < = 时钟周期。

注意:在芯片设计中,单bit同步器通常不是私自直接打两拍处理的,而是使用专用的同步器单元,这样做的好处是方便后端(PR)可以把两级触发器视为一个整体,把两级触发器放的很近(线延时比较小)。这是因为能更好的满足第二级触发器建立时间,有效的减少亚稳态传播。

四、总线全握手仿真测试 :

场景1:源时钟100Mhz,目的时钟25Mhz,2级同步器。

从上图可以看出,同步完成需要6个目的时钟周期,也就是说完成一次全握手需要6个目的时钟周期的时间,这就要求源时钟数据信号的更新时间,必须大于同步时间。如果变化太快中间的数据会漏采。

场景2:源时钟25Mhz,目的时钟100Mhz,2级同步器

从上图可以看出,同步完成需要6个源时钟周期,也就是说完成一次全握手需要6个源时钟周期的时间,这就要求源时钟数据信号的更新时间,必须大于同步时间。如果变化太快中间的数据会漏采。

场景3:源时钟25Mhz,目的时钟100Mhz,3级同步器

从上图可以看出,同步完成需要8个源时钟周期,也就是说使用3级同步器完成一次全握手需要6+2个源时钟周期的时间。

结论:在使用总线全握手同步器时,不管源时钟与目的时钟多大,同步的时间均是慢时钟的6个时钟周期,如果使用3级同步器则是8个慢速时钟周期。这就要求源时钟信号不能变化太快。

 

原文标题:CDC(一) 总线全握手跨时钟域处理

文章出处:【微信公众号:FPGA自习室】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分