目录
一、关于 AXI 协议
1、AXI协议支持高性能、高频系统设计,用于主、从组件之间的通信。
- 适用于高带宽和低延迟的设计。
- 提供高频操作,无需使用复杂的桥。
- 满足多种组件的接口要求。
- 适用于初始访问延迟高的内存控制器。
- 在互连架构的实现中提供灵活性。
- 向后兼容AHB和APB接口。
2、AXI协议的主要特点是
- 独立的地址/控制和数据通道。
- 通过字节选通支持非对齐数据传输。
- 使用基于突发的事务,只发出起始地址。
- 独立的读写数据通道,可以提供低成本的直接内存访问(DMA)。
- 支持地址超发。
- 支持乱序事务。
- 允许添加寄存器级,以实现时序收敛。
二、架构
五个独立的传输通道
- 读地址 (AR)
- 读数据 (R)
- 写地址 (AW)
- 写数据 (W)
- 写响应 (B)
1) 写事务
写数据通道:
- 主端通过写数据通道向从端发送写数据
- 支持8、16、32、64、128、256、512、1024bit位宽
- 每个字节有一个字节选通信号用来指示该字节是否有效
写响应通道:
- 从端通过写响应告诉主端本次写事务(burst)完成,而不是一个事务中每次传输(beat)的完成。
2) 读事务
读数据通道:
- 从端通过读数据通道向主端发送读数据和读响应,读响应意味着本次事务的完成。
- 支持8、16、32、64、128、256、512、1024bit位宽
三、接口和互连
通过互连将几个主端和从端连在一起
1)全局信号
signal | discription |
ACLK | 全局时钟 |
ARESETn | 全局复位 |
2)写地址通道信号
AWID | 写事务的ID |
AWADDR | 一次写事务中,第一次传输的地址 |
AWLEN | 一次写事务中,进行几次传输 |
AWSIZE | 一次写事务中,每次数据传输的字节数 |
AWBURST | 突发类型,表明一次写事务中每次数据传输时地址的变化方式 |
AWLOCK | 提供关于写事务的原子特征的信息 |
AWCACHE | 指示写事务如何在系统中进行。 |
AWPROT | 写事务的保护属性:权限、安全级别和访问类型。 |
AWQOS | 写事务的服务质量标识符。 |
AWREGION | 写事务的区域指示器。 |
AWUSER | 用户自定义写地址通道扩展名。 |
AWVALID | 写地址通道的有效指示 |
AWREADY | 写地址通道的ready指示 |
3)写数据通道信号
WID | 写数据传输的ID |
WDATA | 写数据 |
WSTRB | 写选通,指示哪个字节有效 |
WLAST | 指示是否是一次写事务中的最后一次数据传输 |
WUSER | 用户自定义写数据通道扩展 |
WVALID | 写数据有效 |
WREADY | 写数据ready |
4)写响应通道信号
BID | 写响应通道的ID |
BRESP | 写响应,指示写事务的状态 |
BUSER | 用户自定义写响应通道扩展 |
BVALID | 写响应通道信号有效 |
BREADY | 写响应通道ready |
5)读地址通道信号
ARID | 读事务的ID |
ARADDR | 一次读事务中,第一次传输的地址 |
ARLEN | 一次读事务中,具体传输的数据量 |
ARSIZE | 一次读事务中,每次数据传输的字节 |
ARBURST | 突发类型,表明一次读事务中每次数据传输时地址的变化 |
ARLOCK | 提供关于读事务的原子特征的信息 |
ARCACHE | 指示读事务如何在系统中进行。 |
ARPROT | 读事务的保护属性:权限、安全级别和访问类型。 |
ARQOS | 读事务的服务质量标识符。 |
ARREGION | 读事务的区域指示器。 |
ARUSER | 用户自定义读地址通道扩展名。 |
ARVALID | 读地址通道的有效指示 |
ARREADY | 读地址通道的ready指示 |
6)读数据通道信号
RID | 读数据传输的ID |
RDATA | 写数据 |
RRESP | 读响应,指示读传输的状态 |
RLAST | 指示是否是一次写事务中的最后一次数据传输 |
RUSER | 用户自定义写数据通道扩展 |
RVALID | 写数据有效 |
RREADY | 写数据ready |
四、接口要求
1)时钟和复位
- 在主接口和从接口上,输入和输出信号之间不能有组合路径。??
- 在复位(低电平复位)期间,所有通道的VALID信号必须为低。VALID信号可以拉高的最早时机是复位信号拉高后的第一个时钟上升沿
2)通道间的关系
关于握手
- 五个通道都通过握手机制进行信息传输,握手可以实现双向流控。
- 主端信号有效时拉高VALID进行指示,从端可以接收时拉高READY进行指示。只有VALID和READY同时拉高时才进行信息的传输。
- VALID信号拉高时,数据会一直保持直到握手成功才会传输下一下数据。
- 主端发送VALID信号不能依赖于从端接收信息的READY信号,防止造成死锁。??
写事务
- 写地址和写数据是独立的,没有固定的先后关系
- 在写事务中,写响应要紧随最后一次写传输,BVALID只有在WVALID和WREADY都为高时才能拉高
单头箭头指向的信号可以在箭头开始处的信号之前或之后拉高
双头箭头指向的信号只有在箭头开始处的信号拉高后才能拉高
读事务
- 读数据必须要紧随数据的读地址(只有有了读地址才可能返回读数据),ARVALID和ARREADY是相互独立的,但RVALID只有在ARVALID和ARREADY都为高时才能拉高
单头箭头指向的信号可以在箭头开始处的信号之前或之后拉高
双头箭头指向的信号只有在箭头开始处的信号拉高后才能拉高
3)事务结构
burst len :突发长度,表示一次突发(burst)支持几个传输(beat)
burst size:表示一次传输(beat)支持的字节数
burst type:
一次突发不能越过4KB的边界
突发没法提前中止
五、事务ID
具有相同ID的事务必须按顺序读写,不同ID的事务间无顺序要求
有了ID,可以无需等待上一事务完成就能开始下一个事务。
参考AXI协议书