感谢网友沉默的改良者,原文链接:https://www.cnblogs.com/chensimin1990/p/8526921.html
通过状态机来对axi_lite总写进行读写操作,分析得很好。
为进一步掌握AXI_Lite,在原文基础上进行功能仿真,因此这里先贴出原文,下一篇给出仿真工程及波形。
通过状态机来对axi_lite总线进行操作
状态跳转:
1.初始状态
将axi_lite读写两个信道分开进行控制,在初始状态,就根据读,写信号来判断应该跳转到那一个状态。
2.写状态
在写状态中不需要跳转条件,即写状态只需要消耗一个时钟周期,然后自动跳转到下一个状态。
3.写有效状态
当接收到slave端的awready 和 wready 即地址写准备和数据写准备信号后,跳转到write_ready状态。
4.write_ready状态
在write_ready状态中,等到slave端bvalid信号的到来,然后跳转到write_bready状态。
5.write_bready状态
WRITE_BREADY 状态不需要状态跳转条件,只需要消耗一个时钟周期,同时在这个状态中,也没有相关信号需要输出。
6.write_end状态
write_end状态也不需要状态跳转条件,写完数据之后,直接回到初始状态。
7.read_start状态
类比write_start状态
8.read_valid状态
类比write_valid信号,只是读数据的过程中不需要接收数据准备信号,在read_valid状态中,当接收到slave端的读地址准备信号后,跳转到read_ready状态。
9.read_ready
当slave端传回来读数据有效信号后,状态机跳转进read_finish状态。
10.read_finish状态
类比write_finish状态
11.read_end状态
类比write_end状态
总结axi_lite读写时序:
写:首先准备好访问地址,和需要写入的数据同时给出地址有效,数据有效,bready信号,
当接收到slave端的地址ready和数据ready信号后,表示可以进行下一写操作了,同时,还需要等待slave端的bvalid信号到来,表示一次写完成了,即slave端的一个写反馈过程
读:首先准备好访问地址,和地址有效信号先拉高,当接收到slave端的地址ready信号后,表示可以进行下一次读操作了,同时,当slave端传过来valid信号的同时,才可以接受axi_lite上读取的数据。
状态机输出控制:
1.在完成一次完整的状态后,必须对相关信号进行清除
2.初始状态不需要数据信号,write_start信号输出结果如下:
3.write_valid状态输出结果:
4.write_ready状态输出结果:
5.write_bready状态无需输出信号,write_end状态数据结果:
6.read_start状态输出结果:
7.read_valid状态输出结果:
8.read_ready状态中不需要输出,read_finish输出结果:
9.read_end状态中输出结果: