cpu-architecture - 就绪/有效 vs 2 次握手 vs 4 次握手
问题描述
我对准备/有效握手在功能上是否等同于 req/ack(2 路)握手感到困惑?通过在功能上等效,我的意思是我们可以在所有可以使用 req/ack(2-way)握手的情况下使用就绪/有效握手执行数据传输,反之亦然?是否存在一种方案有效而另一种方案无效的情况?
作为对同一问题的扩展,req/ack(2-way)在功能上是否等同于 req/ack(4-way)握手?大多数情况下,我发现不同之处在于所需的硬件,当然还有速度。是否存在我们必须使用 req/ack (4-way) 或 req/ack (2-way) 的场景。
总之,我想在三个方案之间建立联系——一个方案会失败,而另一个方案会起作用。
问题是在同步和异步设计的背景下
解决方案
一个老问题,但为了将来的类似查询,我还是会回答。
1. 什么时候使用?
req/ack
在没有时钟的情况下,异步逻辑中需要4 相或 2 相协议。信号是相互的响应:两者都是 4 阶段协议ack
中的响应,是 2 阶段协议中的唯一响应。
由于valid/ready
时钟上升沿上的同步,(或等效)协议不需要返回零相位,它只能用于同步逻辑。此外,只需要一个阶段,因为valid
和ready
不是在当前传输中相互响应,它们只是在下一个周期更新。
2. 他们如何比较?
所有 3 种协议都可以精确控制数据的传输,它们也可以传输背压。所以是的,它们在功能上是等效的。
4相信号req/ack
切换两倍,从性能和功耗的角度来看,这并不是很好。但是同步电路有块缓冲器,当扇出很大时可能会消耗很多,这会产生其他后果,例如 EMI、需要本地电容器和/或使用扩频技术。这完全取决于电路的规模和技术。不过,一般来说,使用需要以两倍速率切换信号的协议保持相同的吞吐量会更加困难。
2-phasedack/req
也提供相同的功能,但实现有其缺点,处理高/低的逻辑可能比自然的 4-phased 协议更复杂。它需要异或门和一个参考寄存器来输出转换而不是状态(改变极性而不是指示“我准备好了”)。它需要 XOR 门来检测是否应该发生状态变化。
从性能的角度来看,它占用了更多的资源并增加了关键路径,但减少了阶段的数量。目前尚不清楚结果是否会改善性能,但可能取决于技术。一个理由是在有限带宽的长或负载线路上传输协议,以牺牲本地网关面积为代价增加这些线路上的速率可能会很有趣。
3. 它们可以互换吗?
可以将两个valid/ready
模块与req/ack
同步电路中的协议连接起来。但是,为了将两个req/ack
模块与valid/ready
异步电路中的协议连接起来,您需要第三个同步信号来表示传输周期的概念。
在大多数情况下,这个问题没有实际意义,因为有惩罚,没有优势。valid/ready
或等效将用于同步电路。在异步电路中,您必须在 2-phased 或 4-phased 之间进行选择req/ack
。
可以将 2 相和 4 相req/ack
模块与异步电路中的 XOR 和 S/R 锁存器连接起来。
总之
它们在各自的同步/异步实现中使用时在功能上是等效的,但不能总是在其他域中使用(req/ack
可以在同步域中使用但性能不佳,valid/ready
不能在异步域中使用)。每种实施方式对性能、功耗和资源利用率都有不同的影响。
推荐阅读
- ruby-on-rails - 添加注册条件以设计
- r - ggplot2中的分组箱线图与点图相结合
- python - 如何使用 matplotlib 创建购买活动图?
- raspberry-pi3 - 如何在 Raspberry Pi 3 Model B+ 上安装 PfSense
- android - 处理 FirebaseUI 登录和离线 Firestore 数据?
- c - C 中的 XOR 相同数据导致非零值。为什么?
- jquery - Bower jquery 安装失败
- c# - C#解析文本文件会丢失每个文本文件的第一行
- python - paramiko 的 SFTP 挂起和身份验证失败
- python - 如何使用 TensorFlow 模型进行预测?