0
\ \ begingroup \美元

在这里输入图像描述

在FIFO设计中,为了比较rptr和wptr,我们将一个信号输入到另一个时钟域。

从慢时钟域到快时钟域的rptr可以用同步触发器逻辑在开始时解释。

然而,wptr从快速时钟域到慢速时钟域,无法进行同步。

例如,如果写时钟比读时钟快10倍,那么sync_w2r不会采样基于wclk的wptr。

在这里输入图像描述正如你可以看到上面的波形,写(快)时钟上的din[10:0]被读时钟(慢)采样。而din是由Gray编码的写指针。dout[10:0]是一个通过读时钟同步的信号(慢)

实际上,灰色编码的指针信号(dout[10:0])看起来没有一个连续的采样通过读取时钟。你可以看到dout[10:0]。它会导致竞态条件问题。即使是灰度编码信号也由二级触发器同步。但是在每个边缘采样时钟上,灰度编码信号并不能避免竞争条件问题。1(采样)3-2-6(采样). .继续. .实际上是2位信号从2'b001变成了2'b110。

我们如何解释Gray编码信号可以用来避免竞态条件问题?

问题是如何解决的?

\ \ endgroup \美元
9
  • \ \ begingroup \美元 你说的"不取样"是什么意思? \ \ endgroup \美元- - - - - -user253751 2月16日15:53
  • \ \ begingroup \美元 @user253751 sync_w2r被rclk采样。对WPTR进行采样很慢 \ \ endgroup \美元- - - - - -卡特 2月17日1:12
  • 1
    \ \ begingroup \美元 卡明斯有一篇关于这个的论文。在线上有很多资源。关闭。 \ \ endgroup \美元- - - - - -Mitu拉吉 2月17日4点54分
  • \ \ begingroup \美元 没有“失踪”。即使写时钟快10倍,读时钟也会在将来的某个时间点对它进行采样。假设,当读时钟到达时,写指针刚刚从0数到3。由于灰色编码,读取时钟将永远不会取样“错误的”值。它可以是写指针的旧值2,也可以是写指针的当前值3。 \ \ endgroup \美元- - - - - -Mitu拉吉 2月17日6:49
  • 1
    \ \ begingroup \美元 @Carter,戴夫粗花呢已经回答了你的问题关于失踪的序号,即慢时钟总是会错过一些更快的时钟的时钟事件无论采样一个灰色的柜台或二进制计数器(和同步缓冲区将确保一个有效的样本是否推迟或电流)。至于种族,频率wclk需要低于FMAX保证时序闭合的设计,即防止未完成的组合逻辑生成wptr同步缓冲触发器的重叠设置和保持时间。 \ \ endgroup \美元- - - - - -蒂姆 2月18日15:58
4
\ \ begingroup \美元

显然,慢的一面FIFO不会看到每一个状态的快速一面计数器,当它计数在全速。幸运的是,通过适当的设计,例如使用Gray代码在时钟域之间传输值,这一点都不重要。当慢速样本出现时,它会一些快速计数器的有效值,或在最坏的情况下,如果一个位碰巧变成亚稳态,两个相邻值中的一个。

当然,一旦快端停止计数,慢端将在同步器延迟后得到正确的计数器最终值。

我在这里写的更详细:灰码时钟域跨越FIFO快到慢

\ \ endgroup \美元
2
  • \ \ begingroup \美元 长官,我的问题更新了。 \ \ endgroup \美元- - - - - -卡特 2月17日5点12分
  • 1
    \ \ begingroup \美元 你只是重复了你之前说过的话。既然你没有补充新的信息,我的回答就没有什么可补充的了。 \ \ endgroup \美元- - - - - -戴夫花呢 2月17日11:58

不是你想要的答案?浏览其他带标签的问题问你自己的问题