异步fifo深度 设计地址格雷码_格雷码在异步过渡中的作用

本文探讨了格雷码在多bit信号异步过渡中的应用,解释了如何通过格雷码编码避免采样错误,确保数据在不同时钟域间正确传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

格雷码经常被用于多bit信号的异步过渡,标准答案是因为格雷码相近码字只有1bit变化,因此可以用于异步过渡。但是还是有很多人有疑问,比如这个问题:

异步fifo格雷码同步问题?​www.zhihu.com

异步过渡表示数据和目的时钟没有确切的相位关系,那么在源时钟域的数据发生改变的时候,在目的时钟域进行采样,可能采样到改变前,也可能采样到改变后,甚至可能采样到本来不存在的中间状态。

假设我们过度一个2bit数据,没有采用格雷码,在源时钟域数据从2b01 -> 2'b10

那么在目的时钟域,对应某个时钟沿采样出的三种情况可能包括2'b01、2'b10、以及2'b00、或者2'b11;

其中2'b01和2'b10是我们预期希望的;2'b00和2'b11是错误的,要消除和避免的。

首先看一下为什么会出现后面两种错误的数据,根因就是在信号进行异步传输时,因为多bit数据的bit间传输延时可能不同,本来在源时钟域可以认为是相位相同的信号,在到达目的时钟域之后,就会出现相位差,如果这个相位差导致的中间状态正好被目的时钟采样,就会采样出中间状态。

那么我们来看2'b01 格雷码编码为2'b01 ;2'b10格雷码编码为2'b11,只有1bit变化,就保证了无论出现怎样的相位偏差,目的时钟域要么采样到的是2'b01,要么是2'b11,不会出现中间状态。

返回到之前的问题上去,问题提到在快时钟域打出的格雷码,可能在慢时钟域采样之间变化多次,那么不就违反了格雷码1bit变化的原则了?这就是没有真正理解格雷码在异步过渡中的作用导致的疑问。在慢时钟域采样时,只要本次采样的数据是正确的,预期的(也就是没有采样到中间状态),格雷码在异步过渡中就发挥了正确的作用;而慢时钟域的上次采样和本次采样并不是相邻码字,不关心,也不在意,因为本身时钟就不同,快时钟域的所有数据变化肯定不可能完全反映在慢时钟域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值