我正在完成一个项目,要求是处理器内部功能单元之间的双向握手。我知道它是什么,但是有没有任何“标准”或一个简单的例子?
我唯一能想到的就是两个单元之间,当它们之间有一条数据线并且当 X 发送到 Y 时,会给出一个单独的“发送”信号。当 Y 接收到“已接收”信号时,信号会通过另一条电线发送到 X。一旦 X 读取到接收到的信号,它就会停止在数据线上发送数据,并将发送线设置为 0 或 Z。然后 Y 也将接收到的信号设置为 0 或 Z。
这都是同步的(在同一时钟上)。
这是解决这个问题的有效方法吗?我认为它在大规模上会变得非常混乱,但我只在基于简单累加器的处理器上工作。
单个时钟域最常见的简单握手是有效/准备好握手。
如果“X”发送到“Y”,则 X 的输出为data
and valid
,Y 的输出为ready
.
当 X 有数据要发送时,它断言有效,并查看就绪状态。如果 posege 时钟上的 valid 和 ready 为高电平,则 X 将考虑要发送的数据,Y 将考虑要接收的数据。
该方案的优点是每个时钟周期可以发送一个数据而无需任何停机时间。如果在有效/就绪为高电平后的下一个周期有效仍然为高电平,则这被认为是第二个数据包。
此外,不要求 Y 在断言就绪之前等待看到有效,Y 可以在可接收数据的任何时候断言就绪。
您描述的方案就是我所说的“req/ack 4 相握手”,因为发送一个数据需要四个时钟周期
1. req=1 ack=0
2. req=1 ack=1
3. req=0 ack=1
4. req=0 ack=0
当跨时钟边界执行异步请求时,这种接口会更好,因为它消除了两次解释数据包的可能性。但对于完全同步的接口,您不需要它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)