AXI4协议总结
AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0协议中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。
参考文献:AMBA_AXI_v2_0_protocol_spec(.pdf)
一、特点
单向通道体系结构:信息流只以单方向传输,简化时钟域间的桥接,减少门数量。当信号经过复杂的片上系统时,减少延时。
支持多项数据交换:通过并行执行猝发操作,极大地提高了数据吞吐能力,可在更短的时间内完成任务,在满足高性能要求的同时,又减少了功耗。
独立的地址和数据通道:地址和数据通道分开,能对每一个通道进行单独优化,可以根据需要控制时序通道,将时钟频率提到最高,并将延时降到最低。
二、AXI4 的变种
AXI4:是面向地址映射的接口,允许最大256轮的数据突发传输;
AXI4-lite: 是一个轻量级的地址映射单次传输接口,占用很少的逻辑单元;
AXI4-Steam: 去掉了地址项,允许无限制的数据突发传输规模;
三、接口信号描述
要了解总线协议原理及其如何工作,首先需要对接口信号有一个大概的了解,在这里,接口信号分为7个部分,后面将一一列出。然后,分析总线的工作模式(最快捷的方式就是利用读写操作的时序图)
5个通道信号
write address channel signals 写地址通道
write data channel signals 写数据通道
write response channel signals写响应通道
Read address channel signals 读地址通道
read data channel signals 读数据通道
额外通道信号介绍
Global signals 全局信号
Low-power interface signals 低功耗接口信号
每一个AXI传输通道都是单方向的
注意:Global signals
信号 |
源 |
描述 |
ACLK |
时钟源 |
全局时钟信号。所有的信号在全局时钟的上升沿采样。 |
ARESETn |
复位源 |
全局复位信号。该信号低有效。 |
1、write address channel
信号 |
源 |
描述 |
AWID[3:0] |
主 |
写地址ID。这个信号用于写地址信号组的标记。 |
AWADDR[31:0] |
主 |
写地址。写地址信号给出写突发事务的第一个传输地址。相关的控制信号线用于确定突发中剩余传输的地址。 |
AWLEN[3:0] |
主 |
突发长度。给出突发中准确的传输个数。该信号给出了和地址相关的数据传输数量。 |
AWSIZE[2:0] |
主 |
突发大小。这个信号确定突发中每个传输的大小。字节通道选通用来说明需要更新的字节通道。 |
AWBURST[1:0] |
主 |
突发类型。该信息和大小信息一起,表示在每次突发的传输中,地址是如何被计算的。 |
AWLOCK[1:0] |
主 |
锁类型。这个信号提供了关于传输原子特性的额外信息。 |
AWCACHE[3:0] |
主 |
缓存类型。这个信号表示可缓冲、可缓存、写通过、写回和分配事务属性。 |
AWPROT[2:0] |
主 |
保护类型。这个信号表示事务的普通、特权、或安全保护级,以及事务是数据访问还是指令访问。 |
AWVALID |
主 |
写地址有效。这个信号表示写地址有效和控制信息是可用的:1=地址和控制信息有效;0=地址和控制信息无效。该信号一直保持有效,直到响应信号AWREADY为高。 |
AWREADY |
从 |
写地址准备就绪。这个信号表示从设备准备接受地址和相关的控制信号:1=从设备准备就绪;0=从设备没准备就绪。 |
2、write data channel
信号 |
源 |
描述 |
WID[3:0] |
主 |
写ID号。这个信号表示写数据传输的ID号。WID值必须与AWID值匹配。 |
WDATA[31:0] |
主 |
写数据。写数据总线可以是8,16,32,64,128,256,512或者1024位宽度 |
WSTRB[3:0] |
主 |
写选通。用于表示更新存储器的字节选通。对于数据总线的每8位有一个写选通。 |
WLAST |
主 |
写最后一个。表示写突发中的最后一个传输。 |
WVALID |
主 |
写有效。这个信号表示有效的写数据和选通是可用的。 |
WREADY |
从 |
写准备。这个信号表示从设备能接受写数据。 |
3、write response channel
信号 |
源 |
描述 |
BID[3:0] |
从 |
响应ID。写响应识别标记。BID值必须匹配写事务的AWID值。 |
BRESP[1:0] |
从 |
写响应。这个信号表示写事务的状态。可允许的响应是OKAY,EXOKAY,SLVERR和DECERR。 |
BVALID |
从 |
写响应有效。这个信号表示有效写响应是可用的。 |
BREADY |
主 |
响应准备。这个信号表示主设备可以接受响应信息。 |
4、Read address channel
信号 |
源 |
描述 |
ARID[3:0] |
主 |
读地址ID。这个信号用于读地址信号组的标记。 |
ARADDR[31:0] |
主 |
读地址。读地址信号给出读突发事务的第一个传输地址。相关的控制信号线用于确定突发中剩余传输的地址。 |
ARLEN[3:0] |
主 |
突发长度。给出突发中准确的传输个数。该信号给出了和地址相关的数据传输数量。 |
ARSIZE[2:0] |
主 |
突发大小。这个信号确定突发中每个传输的大小。字节通道选通用来说明需要更新的字节通道。 |
ARBURST[1:0] |
主 |
突发类型。该信息和大小信息一起,表示在每次突发的传输中,地址是如何被计算的。 |
ARLOCK[1:0] |
主 |
锁类型。这个信号提供了关于传输原子特性的额外信息。 |
ARCACHE[3:0] |
主 |
缓存类型。这个信号表示可缓冲、可缓存、写通过、写回和分配事务属性。 |
ARPROT[2:0] |
主 |
保护类型。这个信号表示事务的普通、特权、或安全保护级,以及事务是数据访问还是指令访问。 |
ARVALID |
主 |
读地址有效。这个信号表示读地址有效和控制信息是可用的:1=地址和控制信息有效;0=地址和控制信息无效。该信号一直保持有效,直到响应信号ARREADY为高。 |
ARREADY |
从 |
读地址准备就绪。这个信号表示从设备准备接受地址和相关的控制信号:1=从设备准备就绪;0=从设备没准备就绪。 |
5、read data channel
信号 |
源 |
描述 |
RID[3:0] |
从 |
读ID号。这个信号表示读数据组的ID号。由从设备产生RID,RID必须和读事务中的ARID值匹配。 |
RDATA[31:0] |
从 |
读数据。读数据总线可以是8,16,32,64,128,256,512或者1024位宽度 |
RRESP{1:0] |
从 |
读响应。这个信号表示读事务的状态。可允许的响应是OKAY,EXOKAY,SLVERR和DECERR。 |
RLAST |
从 |
读最后一个。表示读突发中的最后一个传输。 |
RVALID |
从 |
读有效。这个信号表示所要求的读数据是可用的,能完成读传输。 |
RREADY |
主 |
读准备。这个信号表示主设备能接受读数据和响应信息。 |
6、Low-power interface signals
信号 |
源 |
描述 |
CSYSREQ |
时钟控制器 |
系统低功耗请求。这个信号来自系统时钟控制器使外设进入低功耗状态。 |
CSYSACK |
外设 |
低功耗请求响应信号。这个信号来自系统低功耗请求外设的响应信号 |
CACTIVE |
外设 |
时钟激活。该信号表示外设是否要用它的时钟信号:1=需要;0=不需要 |
四、握手机制
所有五个通道使用相同的 VALID/READY 握手来传输数据和控制信息。这种双向的流控制机制使得主设备和从设备都可以控制数据和控制信息的传输。源设备产生VALID 信号(VALID被拉高)标志着当前的数据和控制信息有效。目的设备产生READY 信号(READY被拉高)标志着可以接收主设备发来的数据和控制信息。只有当VALID 和READY 同时为高时,才能进行传输。
VALID和READY信号的先后顺序有一下三种形式:
3.1 VALID早于READY信号
3.2 READY信号早于VALID信号
3.3 VALID信号与READY信号同时
五、基本事务
1、突发式读(read burst)事务时序图
注:一些信号被忽略(如ARID、ARLEN等)
顺序为:主设备与从设备进行读地址通道握手,并传输地址内容(即ARVALID和ARREADY握手成功后,地址ARADDR被从设备接收)。然后进行读数据通道握手,并传输所读内容(即RVALID和RREADY握手成功后,数据RDATA被主设备读取)。时钟上升沿有效。
2、重叠突发式(overlapping read burst)读时序图
表示在从设备接收到第一个地址后,主设备继续驱动第二个地址。这就使得从设备在发送第一个读数据后马上进行第二个读数据操作的发送。
3、突发式写(write burst)时序图
顺序为:主设备与从设备进行写地址通道握手,并传输地址内容(即AWVALID和AWREADY握手成功后,地址AWADDR被从设备接收)。然后进行写数据通道握手,并传输所写内容(即WVALID和WREADY握手成功后,数据WDATA被从设备读取)。最后进行写回应通道握手,并传输写回应数据(即BVALID和BREADY握手成功后,响应数据BRESP被主设备读取)。时钟上升沿有效。
用户1816300 2016-2-15 09:57
用户1816300 2016-2-15 09:40
感谢博友的评论,你的评论对我帮助很大。刚开始学习AXI4协议的时候,感觉挺难,内容很多。但是学到后面发现,其实了解了“接口信号”和“时序图”基本就能使用这个总线协议了。其中最最重要的就是时序图,在编写代码时的依据就是时序图,可能我对AXI4的时序图流程描述不是很详细,我会进一步改进的。 首先对你提出的"valid拉高的时间点"进行解释:主要有两种方式:1)valid先于ready拉高:valid先拉高,然后等待ready信号高电平,在ready信号拉高一个或者几个时钟周期以后,valid拉低。2)valid后于ready拉高:ready先拉高,监测到ready高电平后,valid才会拉高。 然后对你提出的“数据变化”作出解释:数据或者地址在valid拉高的同时,数据或者地址 被驱动到相应信号线上。
sunyzz 2016-2-13 19:59