当一位信息在两个不同的时钟域之间传输时,我们使用两个触发器或双同步器。但是,当我们在两个不同的时钟域之间传输多位信号时,为什么仅仅使用双同步器是不够的呢?为什么在这种情况下,我们需要特殊的握手信号/格雷码等以及使整个设置复杂化的双同步触发器?
2.
-
\$\begingroup\$ 多个比特意味着一个比特率,如果这个比特率没有充分同步(通过某种方式),那么最终会出现接收太多比特或丢失比特的错误。 \ \ endgroup \美元–安迪又名 19年5月20日7:58
-
\$\begingroup\$ 假设我们谈论的是公共汽车:关于时钟域交叉、亚稳态及其含义有很多资源。那么,关于这个主题是否有一些具体的东西和现有的解释是不清楚的,还是你只是缺少正确的搜索词?一些资源很好地解释,即使是双同步器通常也只是减少了被亚稳态击中的机会,但它仍然可以发生。或者cdc实际上意味着并非所有的信号交叉都表现出相同的/可能表现出不同的延迟和稳定性特征,这可能不清楚吗? \ \ endgroup \美元–基督教B。 19年5月20日9:22
添加一个评论
|
\$\begingroup\$
\ \ endgroup \美元
2.
传输单个位很简单。它只有两种状态,当转换发生时,它只能处于以前的状态或新的状态。因此,唯一关心的是亚稳态,而双触发器同步器通常足以解决这个问题。
然而,多位总线还有一个额外的问题——当跨越时钟域边界时,不同的位可能被认为在不同的时钟边缘上发生了变化,这是因为在逻辑和线路上的延迟有微小的差异。一些比特可能会变成亚稳态,而另一些不会,它们可能需要不同的时间来自行分解。现在你不只是有前一个状态和下一个状态你可以有任意数量的中间状态只有一些位有它们的新值,而一些位仍然有它们的旧值。
这个额外的数据一致性问题就是为什么需要额外的握手逻辑。这就是为什么双时钟或异步FIFO是涉及多个时钟域的数字系统的关键组成部分——它将所有需要的元素聚集到一个整洁的包中。
-
\$\begingroup\$ 这是一个很好的解释。除了Dave的答案之外,现在即使对有效负载使用FIFO机制,指针(用于FIFO的深度)仍然可能是多位信号,并且写入指针(发送时钟域)需要同步到读取/接收时钟域。这就是格雷码有用的地方,因为每个转换(或增量)都由一个位的变化来表示。通过这种方式,握手可以简化为同步(亚稳定性问题,而非数据一致性问题)两种状态变化的问题,如本答案第一部分所述。 \ \ endgroup \美元–拉杰什库马尔 19年5月21日10:59
-