说来惭愧,相当于半路出家的我入职之前对总线一无所知,入职后便开始看verdi,只知道看波形就要拉出valid/ready信号,而自己在设计电路的时候并不知道这个神奇的握手协议的用处。这两天读了几篇文章有点醍醐灌顶的意思,所以整理一下。
在数据传输中,各级寄存器是如何传输的?在时钟下一直传输吗?如果前级数据没有准备好怎么办(比如有些情况下读取存储器需要多个周期)?如果前级数据准备好了,但是后级还在忙还不能接收怎么办?前级数据会不会因为执行下一个操作造成当前数据丢失?这些就引出了数据传输的节奏控制,空操作,后级对前级的反压问题。解决这些问题就要用到数据传输中的握手协议(就像处理器流水线中的空泡操作插入NOP指令一样,没有准备好就停下来等)。
在“硅谷老李”写的一篇公众号中讲到了三种握手协议:valid-ready握手、4-phase握手、2-phase握手,也是不同模块之间传输数据最基本的协议,它们并不是复杂的网络传输协议如TCP的三次握手协议等。
01 Valid-Ready Handshake
基于Valid-Ready握手的典型的总线协议就是AXI协议了,其优势在于master和slave的相对独立性很好ÿ