目录
1.Introduction
AXI是一种面向高性能、高带宽、低延迟的片内总线。它的地址/控制和数据相位是分离的,支持不对齐的数据传输,同时在突发传输中,只需要首地址,同时分离的读写数据通道、并支持显著传输访问和乱序访问,并更加容易就行时序收敛。
特点
- 单向通道体系结构。信息流只以单方向传输,简化时钟域间的桥接,减少门数量。当信号经过复杂的片上系统时,减少延时。
- 支持多项数据交换。通过并行执行猝发操作,极大地提高了数据吞吐能力,可在更短的时间内完成任务,在满足高性能要求的同时,又减少了功耗。
- 独立的地址和数据通道。地址和数据通道分开,能对每一个通道进行单独优化,可以根据需要控制时序通道,将时钟频率提到最高,并将延时降到最低。
Channel architecture
AXI协议是基于burst传输的。每个transaction在地址通道上都有地址和控制信息,这些信息描述了要传输的数据的性质。使用到slave的写数据通道或到master的读数据通道在master和slave之间传输数据。在写操作中,所有的数据都从master流向slave,AXI协议有一个额外的写响应通道,允许slave向master发送完成写操作的信号。
在AXI协议中:(1)地址信息要在实际数据传输之前发布。(2)支持多个未完成的事务。(3)支持乱序完成事务。
-
读操作使用读地址和读数据通道。
-
写操作使用写地址、写数据和写响应通道。
-
通道定义
5个独立通道中的每一个都由一组信息信号组成,并使用双向的VALID和READY握手机制。信息源使用VALID信号来显示通道上何时可用有效数据或控制信息。目的地使用READY信号来显示它何时可以接受数据。读数据通道和写数据通道还包括LAST信号,用于指示transaction中最终数据项的传输何时发生。
-
Read and write address channels:
读写事务都有自己的地址通道。适当的地址通道携带事务所需的所有地址和控制信息。
AXI协议支持以下机制:
• 可变长度的burst传输,每个burst 1-16个data。
• 传输大小为8-1024位。
• wrapping、incrementing和non-incrementing burst。
• 使用排他或锁定访问。
• 系统级缓存和缓冲控制(system-level caching and buffering control)。
• 安全和特权访问。 -
Read data channel:
读数据通道将读数据和slave的任何读响应信息传送回给master。读取数据通道包括:
• 数据总线,可为8、16、32、64、128、256、512或1024位宽。
• 一个读响应,表示读操作的完成状态。 -
Write data channel:
写数据通道将写数据从master传送到slave,包括:
• 数据总线,可为8、16、32、64、128、256、512或1024位宽。
• 每8个数据位有一个字节的lane strobe,表示数据总线的哪些字节是有效的。
写数据通道信息总是作为缓冲处理,以便master可以在slave无需确认先前的写事务的情况下执行写事务。 -
Write response channel:
写响应通道为slave提供了一种响应写事务的方式。所有写事务都使用完成信号。
完成信号在每个burst中发生一次,而不是针对burst内的每个单独的data传输。
- 接口和互连
一个典型的系统由许多master和slave设备互连在一起,如下图。
AXI提供的接口可以:
•在master和interconnect之间连接。
•在slave和interconnect之间连接。
•在master和slave之间连接。
多数系统使用的互连方法有以下三种:
•共享地址和数据总线
•共享地址总线和多个数据总线
•多层,具有多个地址和数据总线。
在大多数系统中,地址通道带宽需求明显小于数据通道带宽需求。这样的系统可以通过使用共享地址总线和多个数据总线的方法来实现并行数据传输,从而在系统性能和互连复杂性之间实现良好的平衡。
Basic transactions
当VALID和READY信号都为高时,才会发生地址信息或数据的传输。
Read burst example
上图是一个4次的读burst传输。在这个例子中,master驱动地址,slave在一个周期后接受它。
当地址出现在地址总线后,传输的数据将出现在读数据通道上。slave保持VALID为低直到读数据有效。为了表明一次burst式传输的完成,slave用RLAST信号来表示最后一个被传输的数据。
Overlapping read burst example
上图显示了master如何在slave接受第一个地址后驱动另一个burst地址。这使slave能够在第一次burst传输的完成时并行地开始处理第二次burst的数据。
Write burst example
上图展示了一个写事务。当master在写地址通道上发送地址和控制信息时,该进程开始。然后,master通过写数据通道发送每个写数据项。当master发送最后一个数据项时,WLAST信号变为HIGH。当slave接受了所有的数据项后,它驱动一个写响应OKAY返回给master,以表明写事务已经完成。
Transaction ordering
AXI协议支持乱序传输。他给每一个通过接口的事务一个ID tag。协议要求相同ID tag的事务必须有序完成,而不同ID tag可以乱序完成。
2.Signal Descriptions
Global signals
信号 | 源 | 描述 |
---|---|---|
ACLK | Clock source | 全局时钟信号,所有信号都在时钟的上升沿采样。 |
ARESETn | Reset source | 全局重置信号,低电平有效。 |
Write address channel signals
信号 | 源 | 描述 |
---|---|---|
AWID[3:0] | Master | 写地址ID。这个信号是写地址信号组的ID tag。 |
AWADDR[31:0] | Master | 写地址。写地址总线给出burst写事务中第一个传输的地址。相关的控制信号用于确定burst传输中剩余传输的地址。 |
AWLEN[3:0] | Master | burst长度。此长度决定burst式写所传输的数据的个数。 |
AWSIZE[2:0] | Master | burst的大小。表示burst中每个传输的大小。 |
AWBURST[1:0] | Master | burst类型。 |
AWLOCK[1:0] | Master | 锁类型。 |
AWCACHE[3:0] | Master | 缓存类型。该信号表示事务的bufferable、cacheable、write-through、write-back、allocate attributes属性。 |
AWPROT[2:0] | Master | 保护类型。该信号指示事务的正常、特权或安全保护级别,以及事务是数据访问还是指令访问。 |
AWVALID | Master | 写地址有效。1 = 地址和控制信息有效。0 = 地址和控制信息无效。这个信号会一直保持,直到AWREADY变为高。 |
AWREADY | Slave | 写地址准备好。这个信号用来指明slave已经准备好接受地址和控制信息了。1 = 准备好。0 = 没准备好。 |
Write data channel signals
信号 | 源 | 描述 |
---|---|---|
WID[3:0] | Master | 写ID tag。这个信号是写数据传输的ID标记。WID值必须与AWID值匹配。 |
WDATA[31:0] | Master | 写数据。写数据总线可以是8、16、32、64、128、256、512、1024位宽。 |
WSTRB[3:0] | Master | 该信号指示要在内存中更新的字节通道。写数据总线的每8位有一个写strobe。 |
WLAST | Master | 该信号表示burst中的最后一次传输。 |
WVALID | Master | 写有效。该信号表示有效的写数据和可用的strobe信号: 1 =可用。0 =不可用。 |
WREADY | Slave | 写就绪。该信号表示slave可以接受写数据: 1 =准备好了。0 =没有准备好。 |
Write response channel signals
信号 | 源 | 描述 |
---|---|---|
BID[3:0] | Slave | 响应ID。写响应的ID tag。BID值必须与slave正在响应的写事务的AWID值相匹配。 |
BRESP[1:0] | Slave | 写响应。这个信号表示写事务的状态。分别为OKAY、EXOKAY、SLVERR和DECERR。 |
BVALID | Slave | 写响应有效。1 = 写响应有效。0 = 写响应无效。 |
BREADY | Master | 接受响应就绪。该信号表示master已经能够接受响应信息。1 = 就绪。0 = 未就绪。 |
Read address channel signals
信号 | 源 | 描述 |
---|---|---|
AWID[3:0] | Master | 读地址ID。该信号是读地址信号组的ID tag。 |
AWADDR[31:0] | Master | 读地址。只提供burst的起始地址和与地址一起发出的控制信号,控制信号详细说明如何为剩余的传输计算地址。 |
AWLEN[3:0] | Master | burst长度。该信息确定与该地址相关联的数据传输的数量。 |
AWSIZE[2:0] | Master | burst的大小。表示burst中每个传输的大小。 |
AWBURST[1:0] | Master | burst类型。 |
AWLOCK[1:0] | Master | 锁类型。 |
AWCACHE[3:0] | Master | 缓存类型。 |
AWPROT[2:0] | Master | 保护类型。 |
AWVALID | Master | 读地址有效。信号一直保持,直到ARREADY为高。1 = 地址和控制信息有效。0 = 地址和控制信息无效。 |
AWREADY | Slave | 读地址就绪。指明slave已经准备好接受数据了。1 = 就绪。0 = 未就绪。 |
Read data channel signals
信号 | 源 | 描述 |
---|---|---|
RID[3:0] | Slave | 读ID tag。这个信号是读数据传输的ID标记。RID值必须与ARID值匹配。 |
RDATA[31:0] | Slave | 读数据。读数据总线可以是8、16、32、64、128、256、512、1024位宽。 |
RRESP[1:0] | Slave | 读响应。这个信号指明读传输的状态:OKAY、EXOKAY、SLVERR、DECERR。 |
RLAST | Slave | 该信号表示burst中的最后一次传输。 |
RVALID | Slave | 读数据有效。1 = 读数据有效。0 = 读数据无效。 |
RREADY | Master | 读就绪。该信号表示master可以接收读数据和读响应: 1 =就绪。0 =没有就绪。 |
Low-power interface signals
信号 | 源 | 描述 |
---|---|---|
CSYSREQ | Clock controller | 系统低功耗的请求。此信号来自系统时钟控制器,使外围设备进入低功耗状态。 |
CSYSACK | 外围设备 | 低功耗请求确认。这个信号是一个系统低功耗请求的外设确认。 |
CACTIVE | 外围设备 | Clock active :1 = 需要外设时钟。0 = 不需要外设时钟。 |
3.Channel Handshake
Handshake process
所有五个通道都使用相同的VALID/READY握手来传输数据和控制信息。这种双向流控制机制使主从双方都能够控制数据和控制信息移动的速率。传输源生成VALID信号,以指示数据或控制信息何时可用。目的源生成READY信号,表示它接受数据或控制信息。只有当VALID和READY信号都为HIGH时,才会发生传输。
VALID和READY信号的出现有三种关系。
- VALID before READY handshake
传输源显示数据或控制信息,并驱动VALID信号为HIGH。来自传输源的数据或控制信息保持稳定直到目的源驱动READY信号为HIGH,表明它接受数据或控制信息。transfer在箭头处发生。 - READY before VALID handshake
在数据或控制信息有效之前,目的源驱动READY为HIGH。这表示一旦数据或控制信息生效,目的源就可以在单个周期内接受这些数据或控制信息。transfer在箭头处发生。 - VALID with READY handshake
传输源和目的源都在同一个cycle中表示它们可以传输数据或控制信息。在这种情况下,transfer立即发生。transfer在箭头处发生。
单个AXI协议通道握手机制描述如下:
- Write address channel
master只有在驱动有效地址和控制信息时才能断言AWVALID信号。它必须保持断言,直到slave接受地址和控制信息并断言相关的AWREADY信号。 - Write data channel
在写操作的burst期间,只有当master驱动有效的写数据时,才可以断言WVALID信号。WVALID必须保持断言状态,直到slave接收到写数据并断言WREADY信号。
当master驱动burst中的最后一个写传输时,它必须断言WLAST信号。 - Write response channel
只有当slave驱动一个有效的写响应时,它才能断言BVALID信号。BVALID必须保持断言状态,直到master接受写响应并断言BREADY。 - Read address channel
master只有在驱动有效地址和控制信息时才能断言ARVALID信号。它必须保持断言,直到slave接受地址和控制信息,并断言相关的ARREADY信号。 - Read data channel
只有当slave驱动有效的读数据时,它才能断言RVALID信号。RVALID必须保持断言,直到master接受数据并断言RREADY信号。即使一个slave只有一个读数据的源,它也必须在响应数据请求时断言RVALID信号。
master使用RREADY信号表示它接受数据。
当slave驱动突发中的最后一个读传输时,它必须断言RLAST信号。
Relationships between the channels
地址、读、写和写响应通道之间的关系是灵活的。
例如,写入数据可以出现在与之相关的写入地址之前的接口上。当写地址通道比写数据通道包含更多的寄存器阶段时,就会发生这种情况。写入数据也可能出现在与地址相同的周期中。
通道的关系中必须遵守的两点是:
• 读取数据必须始终遵循与数据相关的地址。
• 写响应必须始终跟随在写事务中最后一个与写响应相关的写传输。
Dependencies between channel handshake signals
为了防止死锁情况,必须观察握手信号之间存在的依赖关系。
在任何transaction中:
• 一个AXI组件的VALID信号不能依赖于事务中另一个组件的READY信号。
• READY信号可以等待VALID信号的断言。
握手信号的依赖关系如下所示。单箭头信号表示其指向的信号可以在箭头起始信号置起之前或之后置起;双箭头信号表示其指向的信号必须在箭头起始信号置起之后置起。
- Read transaction handshake dependencies
在读事务中:
• slave可以在ARVALID出现的时候在给出ARREADY信号,也可以先给出ARREADY信号,再等待ARVALID信号。
• slave必须等待ARVALID和ARREADY都被断言,然后才开始通过断言RVALID返回读数据。 - Read transaction handshake dependencies
在写事务中:
• master必须不能够等待slave先给出AWREADY或WREADY信号后再给出信号AWVALID或WVLAID。
• 在断言AWREADY之前,slave可以等待AWVALID或WVALID,或两者同时等待。
• 在断言WREADY之前,slave可以等待AWVALID或WVALID,或两者同时等待。
• 在断言BVALID之前,slave必须同时等待WVALID和WREADY被断言。
很重要的一点是,在写事务期间,master不能在驱动WVALID之前等待AWREADY被断言。如果slave在断言AWREADY之前相反地等待WVALID,则可能导致死锁。
4.Addressing Options
AXI协议是burst-based,master通过驱动传输控制信息和传输中第一个字节的地址来开始每个burst。随着burst事务的进行,在每个burst事务中计算后续传输的地址是slave的责任。
Burst不能跨越4KB的边界,以防止它们跨越slave之间的边界,并限制slave内部所需的地址增量的大小。
Burst length
AWLEN或ARLEN信号指定在每次burst transaction中发生的数据传输的数量。如下表所示,每个burst可以有1-16个transfer。
- 对于wrapping bursts,长度必须为2、4、8或16个transfer。
- 每个transaction必须有由ARLEN或AWLEN指定的传输数量。
- 没有组件可以提前终止burst以减少数据传输的数量。
- 在写操作burst期间,master可以通过取消所有write strobes的断言来禁用进一步的写,但它必须在burst期间完成剩余的传输。在读操作burst期间,master可以丢弃进一步的读数据,但它必须在burst期间完成剩余的传输。
Burst size
下表显示了ARSIZE或AWSIZE信号如何指定burst内每个节拍或数据传输的最大数据字节数。
Burst type
AXI协议定义了三种突发类型,描述如下:
- Fixed burst
在fixed burst中,在burst中的每次传输中地址保持不变。这种burst类型用于重复访问同一位置,例如当加载或清空外设FIFO时。 - Incrementing burst
在incrementing burst中,burst中每次传输的地址都是前一个传输地址的增量。增量值取决于传输的大小。例如,每次burst大小为4字节的传输的地址是前一个地址加上4。 - Wrapping burst
Wrapping burst类似于incrementing burst,因为burst中每次传输的地址都是前一个传输地址的增量。但是,在wrapping burst中,当到达封装边界时,地址会换行到较低的地址。
封装边界为burst中每个传输的大小乘以burst中传输的总数量。
有两个限制适用于wrapping burst:
• 起始地址必须与传输的大小对齐。
• burst的长度必须为2、4、8或16。
ARBURST或AWBURST信号如何选择burst类型如下所示。
5.Additional Control Information
Cache support
ARCACHE[3:0]或AWCACHE[3:0]信号通过提供事务的buffable、cacheable和allocate属性来支持系统级缓存:
-
Bufferable (B) bit, ARCACHE[0] and AWCACHE[0]
-
Cacheable (C ) bit, ARCACHE[1] and AWCACHE[1]
-
Read Allocate (RA) bit, ARCACHE[2] and AWCACHE[2]
-
Write Allocate (WA) bit, ARCACHE[3] and AWCACHE[3]
Protection unit support
AWPROT或ARPROT信号提供三种级别的访问保护:
- 普通或特权, ARPROT[0] and AWPROT[0]
LOW表示正常接入。
HIGH表示特权访问。 - 安全或不安全, ARPROT[1] and AWPROT[1]
LOW表示安全访问。
HIGH表示非安全访问。 - 指令或数据, ARPROT[2] and AWPROT[2]
LOW表示数据访问。
HIGH表示指令访问。
6.Response Signaling
对于读事务,slave的响应信息与读数据本身一起传递,但是对于写事务,响应信息沿着写响应通道传递。
RRESP[1:0]和BRESP[1:0]信号编码如下所示。
RRESP[1:0] BRESP[1:0] | Response | Meaning |
---|---|---|
b00 | OKAY | Normal access okay表示正常访问是否成功。也可以指示独占访问失败。 |
b01 | EXOKAY | Exclusive access okay表示独占访问的读或写部分已经成功。 |
b10 | SLVERR | 当访问成功到达slave,但slave希望返回一个错误条件给原始master时,使用slave error。 |
b11 | DECERR | Decode error通常由互连组件生成,以表明在事务地址上没有slave。 |
7.Clock and Reset
Clock
每个AXI interface都有一个时钟信号ACLK,所有的输入信号在ACLK的上升沿采样,所有的输出信号在ACLK的上升沿之后发生变化。
在master和slave interface上,输入与输出信号之间必须没有组合逻辑路径。
Reset
AXI协议使用低电平有效的复位信号ARESETn。。复位信号可以异步断言,但是复位的释放必须与ACLK的上升沿是同步的。
在复位过程中应遵循以下接口要求:
- master必须驱动ARVALID, AWVALID和WVALID为低。
- slave必须驱动RVALID和BVALID为低。
- 所有其他信号都可以被驱动为任意值。
当ARESETn为高后,master必须在上升的ACLK边缘开始驱动ARVALID、AWVALID或WVALID 为高。下图显示了复位后ARVALID、AWVALID或WVALID可以被驱动为高的第一个点。