握⼿协议(HandshakeProtocol)
1、概念
通讯设备之间任何实际应⽤信息的传送总是伴随着⼀些控制信息的传递,它们按照既定的通讯协议⼯作,将应⽤信息安全、可靠、⾼效地传送到⽬的地。握⼿协议就是在两个设备在通信之前,要互相的认识⼀下,然后才能互相传送。
在计算机的概念中,握⼿(Handshaking)预⽰着硬件或软件确⽴或维持两个机器或程序在同步中。握⼿经常需要在两个系统之间的信息或数据的交换。在两台计算机之间的硬件握⼿信号被电压⽔平或在电线中的脉冲携带。软件握⼿有很多握⼿协议。基本上,这个握⼿协议发送⼀个"hello"信息给接收系统,然后获得⼀个 "ok" 响应。当这个在两个系统之间的通信完成后,⼀个 "finish"信息应当被发送和被双⽅的系统证实。
2、原理
(1)、The master generates the VALID signal to indicate when the data is available.
(2)、The slave generates the READY signal to indicate that it accepts the data.
(3)、Transfer occurs only when both the VALID and READY signals are HIGH.
(4)、RESPONSE signal indicates one transaction is completed.
3、valid_ready协议详解:
(1)、当nder端有数据要发送时,将valid置1,并保证数据有效,可以不⽤检测ready;
(2)、当receiver模块允许接受数据,将ready置1,可以不⽤检测valid是否有效;
(3)、在任⼀个cycle,如果valid=1 && ready=1, 则接受端将会在紧接着的下⼀个clock podge将数据采⼊,并通过ready信号来表⽰⾃⼰是否可以接受新的数据;
(4)、在任⼀个cycle,如果valid=1 && ready=1,如果发送端仍有数据需要发送,则会在下⼀个clock podge将新数据放⼊data bus,来表⽰⾃⼰有新的数据需要发送。如果没有新的数据需要发送,则将valid置0,表⽰没有数据需要发送。如果前⼀次的数据没有被接受端接受,即 ready=0,发送端需要保持valid=1,否则,数据将被丢弃,并没有被接收端收到。
如上图所⽰,c1周期,发送端有数据想要发送,将valid置1,并将D0稳定;可是c1周期接收端不肯接受数据(可能因为他正在忙于其他事务的处理), 数据没有被接受,发送端只能继续将valid置1,并保持D0不变。c2周期,接受端不再繁忙,可以接受数据了,于是他
将ready置1,表明这个周期他 可以接受新数据。于是D0便在c2结束的那个上升沿被接收端取⾛。尽管接受端还想接受数据(c3周
期,ready仍为1),但是发送端没有新数据需要发送,于是接收端继续保持ready=1,表明⾃⼰仍可以接受数据。紧接着,发送端在c4周期⼜有数据需要发送,于是就置vliad=1,⽽此时接收端正在等着呢,于是这个数据D1在c4周期,就传送完成。这次发送⽅发送完D1,紧接着还有D2需要发送,可是接收端不⼲了,他不能、不想、不愿意接受新的数据,于是D2和表明D2有效的valid只能⼀直保持
在那⾥,等啊等,等啊等……直到c7,接收端可以接受了。于是D2终于传过去了。(这段作者描述的⾮常有趣.....注:⾮本⼈所写!)