写在前面:
最近学习总线协议,涉及握手,因此整理本文。若内容有疑惑或错误之处,请在评论区指出,感谢!
1 什么是“握手”?
“握手协议”指让控制总线的主设备与从设备之间遵照各种协定进行高速而可靠的寻址和数据传输。主要通过控制每个总线周期中数据传送的开始和结束,以实现主/从设备间的协调和配合,保证数据传输的可靠性。
2 VALID/READY握手机制
本文主要介绍的是总线协议上常用的VALID/READY握手机制。本部分内容来源主要是知乎用户@ljgibbs的《深入AXI4总线(一)握手机制》。
通信双方分别扮演发送方(Source)和接收方(Destination):发送方的VALID信号拉高时,表示发送方已经将数据、地址或者控制信息准备就绪,并保持于通信总线上;接收方的READY信号拉高时,表示接收方已经做好接收准备。发送方拥有传输的主动权,注意拉高VALID与否是完全主动且独立的,不能有READY的约束(即不能说等到READY了,才VALID,因为READY是依赖VALID的,如果后者反过来又依赖前者,会造成死锁)。
一般情形下,当双方的VALID&READY信号同时为高,在时钟ACLK的上升沿就完成一次数据传输。所有数据传输结束后,双方同时拉低自己的握手信号。
双向流控机制指发送方通过拉高VALID信号来控制发送的时机和速度,接收方也通过READY信号的拉高与否来控制接收速度。当接收方在不具备接收能力时,也可以拉低READY信号停止传输。
3 Case study: Qchannel的握手协议
Qchannel是AMBA总线架构中的低功耗接口协议,本部分请见本人的另一篇博客《数字IC验证:ARM协议之AMBA低功耗接口Q-channel》