AXI协议种类
AXI协议分为AXI-Lite、AXI-Full、AXI-Stream三种,其中AXI-Lite、AXI-Full两种协议都有地址,针对特定的内存地址访问。
- AXI-Lite协议用于IP核初始化以及小批量数据传输
- AXI-Full协议用于高性能、大批量数据传输
- AXI-Stream协议没有地址,数据是数据流一次性发送到下端
AXI-Lite协议的6个通道
AXI-Lite协议握手原理
AXI-Lite协议基于握手的原理,也就是主机给从机发送请求信号,从机给主机发送准备好的信号,表示握手成功。在AXI-Lite协议数据传输的通道中valid表示请求信号(由主机发送给从机),ready表示准备好信号(接收从机回来的信号),valid和ready信号不分前后拉高顺序,只要二者同时为高电平表示握手成功,数据就会进行传输。
Global(全局通道)
- ACLK:同步时钟
- ARESETn:同步,低电平有效复位
Write Address(写地址通道 aw)[发送方提供VALID信号,接收方提供READY信号]
- AXI_AWADDR:输入,主机输入给从机写地址(1byte = 1地址)
- AXI_AWVALID:输入,主机输入给从机写请求信号
- AXI_AWREADY:输出,从机输出给主机写准备信号,VALID信号拉高之后,某一时钟周期检测到READY信号拉高时,则VALID信号拉低,也就是VALID信号和READY信号会同时持续一个周期的高电平。
Read Address(读地址通道 ar)
- AXI_ARADDR:输出,从机输出给主机读地址(1byte = 1地址)
- AXI_ARVALID:输出,从机输出给主机读请求信号,对于从机来说,从机向主机请求写一个地址
- AXI_ARREADY:输入,主机输入给从机读准备信号
Write Data(写数据通道 w)
- AXI_WDATA:输入,主机输入给从机
- AXI_WVALID:输入,主机输入给从机
- AXI_WREADY:输出,从机输出给主机
- AXI_WSTRB:输入,主机输入给从机,字节屏蔽,用于多字节传输。
WDATA[31:0]是32位宽数据,WSTRB[3:0]是4位宽的数据,则WDATA的32位被分为4给字节,WSTRB的每一位对应一个字节,当WSTRB其中一位为1的时候对应的字节有效,为0的时候对应的字节无效。
例如
WDATA[31:0] | [31:24] | [23:16] | [15:8] | [7:0] |
WSTRB[3:0] | 1 | 0 | 1 | 0 |
对应的字节是否有效 | 有效 | 无效 | 有效 | 无效 |
Read Data(读数据通道 r)
- AXI_RDATA:输出,从机输出给主机
- AXI_RVALID:输出,从机输出给主机,对于从机来说,从机向主机请求写一个数据
- AXI_RREADY:输入,主机输入给从机
- AXI_RRESP[1:0]:输出,从机输出给主机,用来标识读错误,包括4种状态
主要关注00和10状态
00: Okay
01:在AXI-Lite协议中不存在,在AXI-Full协议中存在
10:Slave Error 从机错误
11:Decode Error 总线解码错误
Write Response(写响应通道 b)将写入的结果状态反馈给主机
- AXI_BVALID:输出,从机输出给主机有效响应信号,如果写操作完成或产生错误从机会拉高VALID
- AXI_BREADY:输入,主机输入给从机准备响应信号,如果主机准备好接收写响应会拉高READY
- AXI_BRESP[1:0]:输出,从机输出给主机,用来标识读错误,包括4种状态
AXI-Lite协议数据传输流程
写数据:地址准备好数据准备好等待响应(过程包含VALID和READY同时拉高)
完成一次写数据传输的过程:
- 写地址完成一次传输 -> 写数据完成一次传输 -> 等待写响应
- 写数据完成一次传输 -> 写地址完成一次传输 -> 等待写响应
- 写数据和写地址同时完成一次传输 -> 等待写响应
读数据:地址准备好等待发来的数据(过程包含VALID和READY同时拉高)
完成一次读数据传输的过程:
- 读地址完成一次传输 -> 等待发来的数据