第一部分:
支持多项数据交换。通过并行执行猝发操作,极大地提高了数据吞吐能力,可在更短的时间内完成任务,在满足高性能要求的同时,又减少了功耗。
独立的地址和数据通道。地址和数据通道分开,能对每一个通道进行单独优化,可以根据需要控制时序通道,将时钟频率提到最高,并将延时降到最低。
第二部分:
本部分对AXI1.0协议的各章进行整理。
第一章
本章主要介绍AXI协议和AXI协议定义的基础事务。
1、 AXI总线共有5个通道分别是read address channel 、 write address channel 、 read data channel 、 write data channel、 write response channel。每一个AXI传输通道都是单方向的。
当地址出现在地址总线后,传输的数据将出现在读数据通道上。设备保持VALID为低直到读数据有效。为了表明一次突发式读写的完成,设备用RLAST信号来表示最后一个被传输的数据。
设备会在第一次突发式读完成后处理第二次突发式读数据。也就意味着,主机一开始传送了两个地址给设备。设备在完全处理完第一个地址的数据之后才开始处理第二个地址的数据。
这一过程的开始时,主机发送地址和控制信息到写地址通道中,然后主机发送每一个写数据到写数据通道中。当主机发送最后一个数据时,WLAST信号就变为高。当设备接收完所有数据之后他将一个写响应发送回主机来表明写事务完成。
第二章
本章主要介绍一些信号描述,其中包括全局信号、写地址通道信号、写数据通道信号、写响应通道信号、读地址通道信号、读数据通道信号、低功耗接口信号。本章的所有表都是以32位的数据总线、4位的写数据闸门、4位的ID段。
信号 |
源 |
描述 |
ACLK |
Clock source |
全局时钟信号 |
ARESETn |
Reset source |
全局复位信号,低电平有效 |
信号 |
源 |
描述 |
AWID[3:0] |
主机 |
写地址ID,这个信号是写地址信号组的ID tag。 |
AWADDR[31:0] |
主机 |
写地址。 |
AWLEN[3:0] |
主机 |
突发式写的长度。此长度决定突发式写所传输的数据的个数。 |
AWSIZE[2:0] |
主机 |
突发式写的大小。 |
AWBURST[1:0] |
主机 |
突发式写的类型。 |
AWLOCK[1:0] |
主机 |
锁类型。 |
AWCACHE[3:0] |
主机 |
Cache类型。这信号指明事务的bufferable、cacheable、write-through、write-back、allocate attributes信息。 |
AWPROT[2:0] |
主机 |
保护类型。 |
AWVALID |
主机 |
写地址有效。 1 = 地址和控制信息有效 0 = 地址和控制信息无效 这个信号会一直保持,直到AWREADY变为高。 |
AWREADY |
设备 |
写地址准备好。这个信号用来指明设备已经准备好接受地址和控制信息了。 1 = 设备准备好 0 = 设备没准备好 |
信号 |
源 |
描述 |
WID[3:0] |
主机 |
写ID tag,WID的值必须与AWID的值匹配 |
WDATA[31:0] |
主机 |
写的数据。 |
WSTRB[3:0] |
主机 |
写阀门。WSTRB[n]标示的区间为WDATA[(8*n)+7:(8*n)]
|
WLAST |
主机 |
写的最后一个数据。 |
WVALID |
主机 |
写有效 1 = 写数据和阀门有效 0 = 写数据和阀门无效 |
WREADY |
设备 |
写就绪。指明设备已经准备好接受数据了 1 = 设备就绪 0 = 设备未就绪 |
信号 |
源 |
描述 |
BID[3:0] |
设备 |
响应ID , 这个数值必须与AWID的数值匹配。 |
BRESP[1:0] |
设备 |
写响应。这个信号指明写事务的状态。可能有的响应:OKAY、EXOKAY、SLVERR、DECERR。 |
BVALID |
设备 |
写响应有效。 1 = 写响应有效 0 = 写响应无效 |
BREADY |
主机 |
接受响应就绪。该信号表示主机已经能够接受响应信息。 1 = 主机就绪 0 = 主机未就绪 |
5、读地址通道信号
信号 |
源 |
描述 |
ARID[3:0] |
主机 |
读地址ID。 |
ARADDR[31:0] |
主机 |
读地址。 |
ARLEN[3:0] |
主机 |
突发式读长度。 |
ARSIZE[2:0] |
主机 |
突发式读大小。 |
ARBURST[1:0] |
主机 |
突发式读类型。 |
ARLOCK[1:0] |
主机 |
锁类型。 |
ARCACHE[3:0] |
主机 |
Cache类型。 |
ARPROT[2:0] |
主机 |
保护类型。 |
ARVLID |
主机 |
读地址有效。信号一直保持,直到ARREADY为高。 1 = 地址和控制信息有效 0 = 地址和控制信息无效 |
ARREADY |
设备 |
读地址就绪。指明设备已经准备好接受数据了。 1 = 设备就绪 0 = 设备未就绪 |
信号 |
源 |
描述 |
RID[3:0] |
设备 |
读ID tag。RID的数值必须与ARID的数值匹配。 |
RDATA[31:0] |
设备 |
读数据。 |
RRESP[1:0] |
设备 |
读响应。这个信号指明读传输的状态:OKAY、EXOKAY、SLVERR、DECERR。 |
RLAST |
设备 |
读事务传送的最后一个数据。 |
RVALID |
设备 |
读数据有效。 1 = 读数据有效。 0 = 读数据无效。 |
RREADY |
主机 |
读数据就绪。 1 = 主机就绪 0 = 主机未就绪 |
信号 |
源 |
描述 |
CSYSREQ |
CLOCK controller |
系统低功耗请求。此信号来自系统时钟控制器,使外围设备进入低功耗状态。 |
CSYSACK |
外围设备 |
低功耗请求应答。 |
CACTIVE |
外围设备 |
Clock active 1 = 外围设备时钟请求 0 = 外围设备时钟无请求 |
第三章
本章介绍主机/设备之间的握手过程以及READY和VALD握手信号的关系以及默认值。
在箭头处信息传输发生。
同样在箭头处信息传输发生。
在这种情况下,信息传输立马发生,如图箭头处指明信息传输发生。
地址、读、写和写响应通道之间的关系是灵活的。
例如,写数据可以出现在接口上早于与其相关联的写地址。也有可能写数据与写地址在一个周期中出现。
两种关系必须被保持:
(1)读数据必须总是跟在与其数据相关联的地址之后。
(2)写响应必须总是跟在与其相关联的写事务的最后出现。
读事务握手依赖关系如图:
写事务握手依赖关系如图:
第四章
本章主要介绍AXI突发式读写的类型和在一次突发式读写事务内如何计算地址和byte lanes。
具体信息如下图:
具体信息如下图:
需要注意的是任何传输的SIZE都不能超过数据总线的宽度。
包装式突发读写有两个限制:
1起始地址必须以传输的size对齐。
2突发式读写的长度必须是2、4、8或者16。
Start_Address 主机发送的起始地址
Number_Bytes 每一次数据传输所能传输的数据byte的最大数量
Data_Bus_Bytes 数据总线上面byte lanes的数量
Aligned_Address 对齐版本的起始地址
Burst_Length 一次突发式读写所传输的数据的个数
Address_N 每一次突发式读写所传输的地址数量,范围是2-16
Wrap_Boundary 包装式突发读写的最低地址
Lower_Byte_Lane 传输的最低地址的byte lane
Upper_Byte_Lane 传输的最高地址的byte lane
INT(x) 对x进行向下取整
下面是计算公式:
Start_Address = ADDR
Number_Bytes = 2SIZE
Burst_Length = LEN + 1
Aligned_Address = (INT(Start_Address / Number_Bytes) ) x Number_Bytes
Address_1 = Start_Address
Address_N = Aligned_Address + (N – 1) x Number_Bytes
Wrap_Boundary = (INT(Start_Address / (Number_Bytes x Burst_Length)))
x (Number_Bytes x Burst_Length)
如果有Address_N = Wrap_Boundary + (Number_Bytes x Burst_Length),则后面的公式成立Address_N = Wrap_Boundary。
第一次突发式读写:
Lower_Byte_Lane = Start_Address - (INT(Start_Address / Data_Bus_Bytes))
x Data_Bus_Bytes
Upper_Byte_Lane = Aligned_Address + (Number_Bytes - 1) -
(INT(Start_Address / Data_Bus_Bytes)) x Data_Bus_Bytes
除了第一次读写之后的读写:
Lower_Byte_Lane = Address_N – (INT(Address_N / Data_Bus_Bytes))
x Data_Bus_Bytes
Upper_Byte_Lane = Lower_Byte_Lane + Number_Bytes – 1
DATA[(8 x Upper_Byte_Lane) + 7 : (8 x Lower_Byte_Lane)]。
第五章
本章描述了AXI协议支持的系统级的Cache和保护单元。
在一些情况下,信号AWACAHE可以用来确定哪个部件来提供写响应。如果写事务被指定为bufferable ,那么他接受来自桥或者系统级的cache提供的写响应。如果事务被指定为non-bufferable,那么写响应必须有最终目的源提供。
信号ARPROT[2:0] 和 信号AWPROT[2:0]的编码如下图:
第六章
本章描述了AXI协议工具的独占式存取和锁存取机制。
我们通过信号ARLOCK[1:0]或AWLOCK[1:0]来选择独占式存取,用信号RRESP[1:0]或BRESP[1:0]来指明独占式存取的成功与否。
第七章
本章描述了AXI读写事务的四个设备响应。
协议规定请求的需要传输的数据数量必须被执行,即使有错误报告。在一次突发式读写的剩余数据不会被取消传输,即使有单个错误报告。
第八章
本章描述AXI协议用事务ID tags来处理多地址和乱序传输。
1当从相同设备读相同的ARID时,设备必须确保读数据按照相同的地址顺序接受。
2当从不同的设备读相同的ARID时,接口处必须确保读数据按照主机发送的相同的地址顺序。
3、当一个主机接口与interconnect相连时,interconnect会在信号ARID、AWID、WID段添加一位,每一个主机端口都是独一无二的。
这样做有两个影响:
对于读数据,interconnect附加一位到RID段中,用来判断哪个主机端口读取数据。Interconnect会移除RID段中的这一位在将RID的值送往正确的主机端口之前。
第九章
本章描述了AXI读写数据总线传输的不同大小和接口如何用字节不变endian去握手混合endian传输。
Example 1:
Example 2:
数据不变性确保在数据结构中little-endian存取头信息的部分不会破坏其他big-endian数据。
第十章
本章描述AXI协议不对齐握手传输。
第十一章
本章主要描述AXI时钟和复位信号的时序。
第十二章
本章主要描述AXI协议在进入和离开低功耗状态期间的时钟控制接口。
下面是CSYSREQ和CSYSACK信号之间的时序图:
系统时钟控制器在T1时刻发出请求,外围设备在T2时刻给予应答,此时进入低功耗状态。在T3时刻,CSYSREQ变高,请求离开低功耗状态,在T4时刻得到应答,此时离开低功耗状态进入正常模式。
接受请求的情况:
不接受请求的情况:
5、既可以通过系统也可以通过外围设备来退出低功耗状态。只要置信号CACTIVE和CSYSREQ这两个信号中的一个为高就可以退出低功耗模式。
而系统可以通过置CSYSREQ为高来退出低功耗模式。