这里记录一下我个人对AXI4主从模块的理解(这些理解主要来自阅读 Xilinx AXI_FULL_M_module 源码)...

先只考虑读请求:

以取指模块和内存模块为例,取指模块是发出请求的模块,因此为 Master,属于AXI4MasterModule;内存模块是响应请求的模块,因此为 Slave,属于AXI4SlaveModule

相关的通道有两个:

1. Read Address Channel

2. Read Data Channel

主模块中,读地址通道中的核心信号包括:

读地址(主模块 -> 从模块)

读地址有效(主模块 -> 从模块)

读地址准备(从模块 -> 主模块)

它们的工作模式如下:

======================= 1. 读地址有效(主模块 -> 从模块):========================

每一个时钟上升沿,做一次下面的判断

  情况1:当全局重置信号有效时,arvalid <= 0 --------------- 很好理解,不需要解释

  情况2:如果当前 arvalid寄存器为无效,且 “start_single_burst_read” 信号为有效,则置 arvalid <= 1  ----------------------- 即,在当前时钟上升沿过后,arvalid = 1,相当于告诉从模块这个周期的读地址信号是有效的,要从模块(内存模块)返回存放在这个周期的读地址的数据

  情况3:如果相连的从模块的 ARREADY(读地址准备)信号为高,且当前 arvalid 寄存器为有效(),则置 arvalid <= 0 (原因) ---------- 如果从模块的 ARREADY 信号为高,说明已经随时准备好接收读地址请求。那么,可以抱有信心,(当前周期 arvalid 有效)当前周期的 araddr 会在这个时钟上升沿之后被 从模块 顺利接收,所以 arvalid 可以在这个时钟上升沿之后置为0

  情况4:其它时候,arvalid 保持不变 ----------------- 当 arvalid 无效时,如果没有收到 “要开始下一次读了(start_single_burst_read)”,也应该保持;当 arvalid 为有效时,如果没有收到“读数据发送完毕”的信息,应该保持

============================================================================

(从0手撕不会去管 INIT_AXI_TXN 信号)

------------------------------- 补充 -----------------------------------

mst_exec_state (主模块状态机): 四种: IDLE, INIT_WRITE, INIT_READ, INIT_COMPARE

IDLE(0):           1

INIT_WRITE(1):         1

INIT_READ(2):           1

INIT_COMPARE(3):     1

--------------------------------------------------------------------------

======================= 0.3. “start_single_burst_read”:========================

============================================================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值