准备/有效vs 2向握手vs 4向握手

问题描述

我对就绪/有效握手在功能上是否等同于req / ack(2路)握手感到困惑?在功能上是等效的,我的意思是,在所有我们可以使用req / ack(2路)握手进行的情况下,我们都可以使用就绪/有效握手进行数据传输,反之亦然?有什么方案可以使一种方案起作用而另一种方案不能起作用?

作为对同一问题的扩展,req / ack(2路)在功能上是否等同于req / ack(4路)握手?通常,我发现差异在于所需的硬件和速度方面。在任何情况下,我们必然会使用req / ack(4路)或req / ack(2路)。

总而言之,我想在这三个方案之间建立连接-一个方案将在哪里失败而另一个方案将在哪里工作。

问题在于同步设计和异步设计

A reference to handshaking.

解决方法

一个老问题,但为了以后类似的查询,我还是会回答。

1.什么时候使用?

4 相或 2 相 req/ack 协议在没有时钟的异步逻辑中是必要的。信号是对彼此的响应:两者都是 4 阶段协议中的响应,ack 是 2 阶段协议中的唯一响应。

valid/ready(或等效)协议由于时钟上升沿的同步,不需要归零相位,它只能用于同步逻辑。此外,只需要一个阶段,因为 validready 在当前传输中不是相互响应,它们只是在下一个周期更新。

2.他们如何比较?

所有3个协议都准确控制数据的传输,它们也可以传输背压。所以是的,它们在功能上是等效的

4 相 req/ack 信号切换两倍,从性能功耗的角度来看,这不是很好。但是同步电路具有块缓冲器,当扇出很大时可能会消耗很多,这会产生其他后果,例如 EMI、需要本地电容器和/或使用扩频技术。这一切都取决于电路的规模和技术。但总的来说,使用需要以两倍速率切换信号的协议会更难保持相同的吞吐量。

2-phased ack/req 也提供相同的功能,但实现有其缺点,与自然的 4-phased 协议相比,处理高/低的逻辑可能更复杂。它需要异或门和参考寄存器来输出转换而不是状态(改变极性而不是指示“我准备好了”)。它需要异或门来检测是否应该发生状态变化。

性能的角度来看,它需要更多资源并增加关键路径,但减少了阶段数。目前尚不清楚结果是否会提高性能,以进行检查,但这可能取决于技术。一种理由是在有限带宽的长线路或负载线路上传输协议,在这种情况下,以本地门区为代价提高这些线路的速率可能会很有趣。

3.它们可以互换吗?

可以在同步电路中使用 valid/ready 协议连接两个 req/ack 块。但是,为了在异步电路中将两个 req/ack 块与 valid/ready 协议连接起来,您需要第三个同步信号来实现传输周期的概念。

这个问题在大多数情况下是没有实际意义的,因为有惩罚并且没有优势。 valid/ready 或等效项将用于同步电路。在异步电路中,您必须在 2 相或 4 相 req/ack 之间进行选择。

可以将 2 相和 4 相 req/ack 块与异步电路中的 XOR 和 S/R 锁存器连接起来。

总结

当它们用于各自的同步/异步实现时,它们在功能上是等效的,但不能始终用于其他域(req/ack 可以用于同步域但性能不佳,valid/ready 不能用于在异步域中如此使用)。每种实现对性能、功耗和资源利用率都有不同的影响。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...