在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4952|回复: 14

[资料] 关于跨时钟域的问题CDC

[复制链接]
发表于 2021-1-23 14:52:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 羽无芯 于 2021-1-25 10:27 编辑

一、为什么要跨时域?
如果一个设计中只用了一个clock,那就只有一个时钟域。如果在一个设计中有多个时钟去控制不同的接口,那就是有多个时钟域,我们在实际中都会遇到跨时钟域的问题。
144815maknp5zpahvdh4nv.jpg
当时钟不匹配时,就需要进行同步化,否则可能出现亚稳态,从而造成整个设计的不稳定。

数字系统中(FPGA,数字芯片尤为突出)一旦出现CDC的问题,可能会导致以下后果:
• 逻辑功能发生错误,比如控制信号,握手信号错位
• 数据发生错误,比如data bus的值,memory中存的值发生错误
• 发生错误的时间可能随机,很难以复现相同的错误
• 很难以通过软件修复,即使能够修复,也可能需要牺牲性能和功耗

二、相关概念解释
1.脉冲信号:跟随时钟,信号发生转变
2.电平信号:不跟随信号,信号发生转变
3.亚稳态:数据的转变没有符合时钟采样所需要的setup/holdtime时间,在时钟的上升沿或下降沿到来时正好采到数据的变化状态,此时,由于数据并没有稳定,所以会导致采到的数据不停变化,而不是逻辑0或者逻辑1,此时采到的数据会一致抖动,直到隔一段时间稳定。
处理亚稳态的方法:
(1)相位控制;
(2)多级寄存器;
(3)异步fifo缓存;

三、跨时序处理的原理及方法
1.打两拍;
处理跨时域的数据有单字节和字节的区别,而打两拍的方式常见于处理单字节数据的跨时钟问题。所谓的打两拍,就是定义两级寄存器,对输入的数据进行延拍。
144815b2ttdfblhc1rsbzd.jpg

下面通过一个时序示意图加强理解:

2009544Z7_0.jpg

data是时钟域1的数据,需要传到时钟域2(clk)进行处理,寄存器1和寄存器2使用的时钟都为clk。假设在clk的上升沿正好采到data的跳变沿(从0变1的上升沿,实际上的数据跳变不可能是瞬时的,所以有短暂的跳变时间),那这时作为寄存器1的输入到底应该是0还是1呢?这是一个不确定的问题。所以Q1的值也不能确定,但至少可以保证,在clk的下一个上升沿,Q1基本可以满足第二级寄存器的保持时间和建立时间要求,出现亚稳态的概率得到了很大的改善。

那么为什么是打两拍,而不是打一拍,打三拍呢?
两级寄存器是一级寄存器的平方,两级并不能完全消除亚稳态危害,但是提高了可靠性,减少了其发生概率,总的来说,就是一级概率很大,第三级寄存器在很大程度上可以说只是对于第二级寄存器的延拍,所以意义不大


2.异步双口RAM;
处理多字节数据的跨时钟域,一般采用异步双口RAM。我们假设有一个信号采集平台。ADC芯片提供源同步时钟60MHz,ADC芯片输出的数据在60MHz时钟上升沿变化,而FPGA内部需要使用100MHz的时钟来处理ADC采集到的数据。
在这样类似的场景中,我们便可以使用异步双口RAM来做跨时域处理。先利用ADC芯片提供的60MHz时钟将ADC输出的数据写入异步双口RAM,然后使用100MHz的时钟从RAM中读出。在使用异步双口RAM来处理跨时域的应用中,也可以使用异步fifo来达到同样的目的。


3.格雷码转换;
我们将ADC采样的数据写入RAM时,需要产生RAM的写地址,但是我们读出RAM中的数据时,肯定不是一上电就直接读取,而是要等RAM中有ADC的数据之后才去读RAM。这就需要100MHz的时钟对RAM的写地址进行判断,当写地址大于某个值之后再去读取RAM。
如果先将RAM的写地址转为格雷码,然后再将地址的格雷码进行打两拍,之后再用RAM的读时钟域将格雷码恢复成10进制。这种处理就相当于对单字节数据的跨时域处理了。


4.握手信号

4.1快时域到慢时域-Freq=100m/Freq=50m

复杂的握手协议后期再工作中继续学习会给出自己的理解,目前水平有限,就只有写出简单的握手协议。下图是自己对握手协议的理解:
144815s0hz68z36e06tdd1.jpg


                        握手协议模型图
如上图所示,两个时域之间通过请求和应答信号线进行握手,时域A发送请求发送数据信号req,同时是准备好数据;时域B接收到时域A发送的请求信号后,回应一个应答信号ack,同时将数据接收进行寄存;时域A接收到应答信号后重新发送请求信号req,进行第二个数据传输,依次直到完成时域A数据发送完成。
但是要注意程序设计,不正确的程序设计将会发生数据漏取(快时域到慢时域)或者插入数据(慢时域到快时域)。这种握手信号设计是以牺牲时钟为代价而进行的设计,因为跨时域涉及到亚稳态,本文在接收数据时采用了两级寄存,以保证数据传输的准确性。


4.2快时域发送数据,慢时域接收数据设计方案设计方案

在本实际案列中使用100mHz频率作为快时域A,A时域控制ROM地址变化,读取ROM的数据,发送到慢时域B,B时域使用50mHz接收时域A的数据。
144815vb5bm367gov3mcp1.jpg


                                       架构设计


程序设计

A时域检测应答信号 ack为低电平时拉高发送请求信号req(高有效),发送数据,A时域检测到应答信号ack上升沿到来时则拉低请求信号req。
B时域检测到 A时域 req请求信号上升沿到来时拉高应答信号ack,接收数据。
设计顶层模块进行仿真测试。

参考:https://blog.csdn.net/weixin_43386200/article/details/83212181


发表于 2021-1-24 19:24:40 | 显示全部楼层
看看这个呗?
1bit跨时钟域同步_99.99999%or100.00% —— 经典对答_pub.pdf (1.73 MB, 下载次数: 171 )
发表于 2021-1-25 08:40:02 | 显示全部楼层
感谢
 楼主| 发表于 2021-1-25 09:56:51 | 显示全部楼层


666,互相交流
发表于 2022-5-13 10:16:21 | 显示全部楼层
握手协议,为啥不能慢到快呢?
发表于 2022-5-14 20:37:45 | 显示全部楼层
good thx
发表于 2022-5-14 23:28:42 | 显示全部楼层
楼主这个是原创还是引用哦?

看了下文末CSDN的链接,原文热度挺高,153的收藏数,在CSDN中不算低了。文章的文字内容短小精干,猜测是详实的代码获得了较多的收藏,窃以为文中给出的代码有几处值得探讨。

首先声明:本帖完全并且纯粹的仅就技术问题交换理解思路!!!绝无对本帖楼主及原文作者的任何其它看法!!!

对于CDC的问题,结合文章中的主要内容,我在平时的工作中有着这样的理解:
1)、基于握手协议设计的多比特跨时钟域电路,我会在设计上确保握手信号所声明的事件,在各自时钟域内部不晚于握手信号的事件输出。这类似于异步FIFO中空、满标志的产生是基于保守逻辑设计的;
2)、不管我选择几级(2或3)触发器来降低亚稳态概率,我会仔细设计(并控制)预计会发生不可接受亚稳态概率的触发器的扇出;
3)、用于CDC的握手信号是关键的关键,怎么谨慎对待都不为过。

比如文中A时域输出数据data_out[7:0]就比其输出的req信号在A时域内晚了一个周期,代码如下:

image.png

握手信号在代码中直接驱动握手信号,我会避免这种设计,文中代码如下:

image.png        image.png

比如ack信号,作者本来的设计意图是收到req上升沿,表明有数据发送的请求,拉高ack,通知数据源端(A时域)数据已经成功接收,可以撤掉req请求了,然后等待A时域拉低req,再然后B时域撤掉ack信号。但不幸的是,在A时域发送数据拉高req时,req的这一上升沿对B时域的ack这个触发器而言,是非常标准的一个异步信号,虽然代码逻辑是req==0才执行拉低ack的动作,貌似没问题,但触发器亚稳态的本质是在其时钟边沿时刻定义的采样窗口期间其输入端(D、CE)的信号必须稳定,若不稳定,则触发器可能发生亚稳态事件,退出亚稳态状态后其输出端会稳定在0还是1是不可预知的,那么,问题就来了,这个代码,req的上升沿可能导致ack触发器发生亚稳态事件,并且可能在这次亚稳态事件结束时稳定到1状态,从而,出现A时域拉高req后,很短的时间内B时域意外的拉高ack信号,严重违背设计者本来的意图。

同理,ack信号对req信号也有类似的潜在风险。更为严重的是,req信号作为了A时域data_out[7:0]这组数据总线的使能信号,由于req信号在设计上可以理解为没有进行CDC的同步化设计,这就违背多比特CDC电路通过握手协议减少需要跨时钟域同步化处理的信号数量的原则了。


发表于 2022-5-15 00:37:21 来自手机 | 显示全部楼层
学习
发表于 2023-4-3 16:08:36 | 显示全部楼层
感谢分享
发表于 2023-4-4 20:00:39 | 显示全部楼层
感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 04:16 , Processed in 0.032832 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表