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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5142|回复: 8

[原创] 关于跨时钟域的必要知识

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

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

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

x
一、为什么要跨时域?
如果一个设计中只用了一个clock,那就只有一个时钟域。如果在一个设计中有多个时钟去控制不同的接口,那就是有多个时钟域,我们在实际中都会遇到跨时钟域的问题。
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk3MzM5MQ==,size_16,color_FFFFFF,t_70.jpg
当时钟不匹配时,就需要进行同步化,否则可能出现亚稳态,从而造成整个设计的不稳定。
二、相关概念解释
1.脉冲信号:跟随时钟,信号发生转变
2.电平信号:不跟随信号,信号发生转变
3.亚稳态:数据的转变没有符合时钟采样所需要的setup/holdtime时间,在时钟的上升沿或下降沿到来时正好采到数据的变化状态,此时,由于数据并没有稳定,所以会导致采到的数据不停变化,而不是逻辑0或者逻辑1,此时采到的数据会一致抖动,直到隔一段时间稳定。
处理亚稳态的方法:
(1)相位控制;
(2)多级寄存器;
(3)异步FIFO缓存;
三、跨时序处理的原理及方法?
1.打两拍;
处理跨时域的数据有单字节和字节的区别,而打两拍的方式常见于处理单字节数据的跨时钟问题。所谓的打两拍,就是定义两级寄存器,对输入的数据进行延拍。
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk3MzM5MQ==,size_16,color_FFFFFF,t_70.jpg 那么为什么是打两拍,而不是打一拍,打三拍呢?
两级寄存器是一级寄存器的平方,两级并不能完全消除亚稳态危害,但是提高了可靠性,减少了其发生概率,总的来说,就是一级概率很大,三级改善不大。

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

复杂的握手协议后期再工作中继续学习会给出自己的理解,目前水平有限,就只有写出简单的握手协议。下图是自己对握手协议的理解:
70.jpg
图1.1 握手协议模型图
如上图所示,两个时域之间通过请求和应答信号线进行握手,时域A发送请求发送数据信号req,同时是准备好数据;时域B接收到时域A发送的请求信号后,回应一个应答信号ack,同时将数据接收进行寄存;时域A接收到应答信号后重新发送请求信号req,进行第二个数据传输,依次直到完成时域A数据发送完成。
但是要注意程序设计,不正确的程序设计将会发生数据漏取(快时域到慢时域)或者插入数据(慢时域到快时域)。这种握手信号设计是以牺牲时钟为代价而进行的设计,因为跨时域涉及到亚稳态,本文在接收数据时采用了两级寄存,以保证数据传输的准确性。

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

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

程序设计

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

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




发表于 2021-1-23 23:06:17 | 显示全部楼层
you're very strong...
发表于 2021-1-24 19:23:36 | 显示全部楼层
这个讨论如何?
1bit跨时钟域同步_99.99999%or100.00% —— 经典对答_pub.pdf (1.73 MB, 下载次数: 115 )
发表于 2021-2-18 16:08:59 | 显示全部楼层
:):)
发表于 2021-2-18 16:50:39 | 显示全部楼层
mark一下
发表于 2022-4-20 22:33:57 | 显示全部楼层
楼主NB
发表于 2022-8-11 11:16:18 | 显示全部楼层
cy。。。。
发表于 2022-8-11 20:25:12 | 显示全部楼层
mark下
发表于 2022-8-24 17:07:57 | 显示全部楼层
跨时钟域,可以参考这个文章,对所有的情况都有描述:https://mp.weixin.qq.com/s?__biz ... 78c539a234a72be1#rd
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-26 03:25 , Processed in 0.022485 second(s), 7 queries , Gzip On, Redis On.

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