# 流水线 总线 #
# 本文是在知乎作者lawliet的文章上总结出的,原始文章如下链接:
https://zhuanlan.zhihu.com/p/649735464
1. 背景:
在AXI总线,交换数据采取的是握手协议,也就是valid 和ready,这种方式也常常出现在数据流链路中,其特点是数据不会被污染,泄露,覆盖等,我们可以把其这个握手做成一个单独的模块,封装起来后直接调用。
2. 设计原理:
设计注意:i_ready 是不能直接寄存器打拍的
如果下一级没有接受能力,也就是i_ready拉为0,如果直接将i_ready打一拍,那在当前周期,上一级还没看到i_ready拉为0,还会继续给本级输入数据,此时本级内部的数据会污染(因为下一级没法接受数据了)
解决办法就是采用DMUX方式:如下图
也就是内部加入一个暂存寄存器,如果下一级没法接受,那我就会把数据暂存在内部的一个寄存器,如果下一级恢复接受后,先将内部的数据输出,然后在输出input数据;
代码如下:
代码里的输入输出的命令