AXI-4总线协议学习
1、简介AXI4总线协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0协议中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。而所谓的总线、接口和协议,三个词常常被联系在一起,分别理解三个词的含义:总线: 是一组传输通道,是各种逻辑器件构成的传输数据的通道,一般由由数据线、地址线、控制线等构成。接口: 是一种连接标准,
1、简介
AXI4总线协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0协议中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。
而所谓的总线、接口和协议,三个词常常被联系在一起,分别理解三个词的含义:
- 总线: 是一组传输通道,是各种逻辑器件构成的传输数据的通道,一般由由数据线、地址线、控制线等构成。
- 接口: 是一种连接标准,又常常被称之为物理接口。
- 协议: 是传输数据的规则。
常用的AXI总线有:AXI4.0、 AXI4.0_Lite、AXI4.0_Stream。
- AXI4.0:主要面向高性能地址映射通信的需求,允许最大256轮的数据突发传输;
- AXI4.0-Lite:是一个轻量级的地址映射单次传输接口,占用很少的逻辑单元;
- AXI4.0-Stream:面向高速流数据传输,去掉了地址项,允许无限制的数据突发传输规模。
AXI4总线分为主、从两端,两者间可以连续的进行通信。
1.1 AXI 协议特点
AMBA AXI协议支持支持高性能、高频率系统设计。
- 适合高带宽低延时设计;
- 无需复杂的桥就能实现高频操作;
- 能满足大部分器件的接口要求;
- 适合高初始延时的存储控制器;
- 提供互联架构的灵活性和独立性;
- 向下兼容已有的AHB和APB接口。
关键特点:
- 分离的地址/控制、数据相位;
- 使用字节选通,支持非对齐的数据传输;
- 基于burst传输,只传输首地址;
- 读写数据通道分离,可以提供低功耗DMA;
- 支持多种寻址方式;
- 支持乱序传输;
- 易于添加寄存器级来进行时序收敛。
1.2 AXI 架构
AXI协议是基于突发的,定义了以下5个独立的通道:
- 读地址通道 read address (主机—>从机)
- 读数据通道 read data (从机—>主机)
- 写地址通道 write address (主机—>从机)
- 写数据通道 write data (主机—>从机)
- 写响应通道 write response (从机—>主机)
其中,地址通道携带控制消息,用于描述被传输的数据属性;数据传输使用写通道来实现master到slave的传输,slave使用写响应通道来完成一次写传输;读通道用来实现数据从slave到master的传输。
图1-1 读传输
图1-2 写传输
AXI使用基于VALID/READY的握手机制数据传输协议,传输源端使用VALID 表明地址/控制信号、数据是有效的,目的端使用READY表明自己能够接受信息。
- 读/写地址通道:读、写传输每个都有自己的地址通道,对应的地址通道承载着对应传输的地址控制信息。
- 读数据通道:读数据通道承载着读数据和读响应信号包括数据总线8/16/32/64/128/256/512/1024 bit 和指示读传输完成的读响应信号。
- 写数据通道:写数据通道的数据信息被认为是缓冲(buffered)了的,master无需等待slave对上次写传输的确认即可发起一次新的写传输。写通道包括数据总线(8/16…1024 bit)和字节线(用于指示8 bit 数据信号的有效性)。
- 写响应通道:slave使用写响应通道对写传输进行响应。所有的写传输需要写响应通道的完成信号。
1.3 AXI 接口互联
AXI协议提供单一的接口定义,能用在下述三种接口之一:
- AXI master - AXI interconnect的连接
- AXI slave - AXI interconnect的连接
- AXI master - AXI slave的连接
可以使用以下几种典型的系统拓扑架构:
- 共享地址与数据总线
- 共享地址总线,多数据总线
- multilayer多层,多地址总线,多数据总线
在大多数系统中,地址通道的带宽要求没有数据通道高,因此可以使用共享地址总线,多数据总线结构来对系统性能和互联复杂度进行平衡。
寄存器片(Register Slices):
每个AXI通道使用单一方向传输信息,并且各个通道直接没有任何固定关系。因此可以可以在任何通道任何点插入寄存器片,当然这会导致额外的周期延迟。
使用寄存器片可以实现周期延迟(cycles of latency)和最大操作频率的折中;使用寄存器片可以分割低速外设的长路径。
2、信号描述
2.1 全局信号
表2-1 为全局信号,用在AXI-3 和AXI-4两种协议接口。所有的信号都是用全局时钟的上升沿进行采样。
信号 | 源 | 描述 |
---|---|---|
ACLK | 时钟源 | 全局时钟信号 |
ARESETn | 复位源 | 全局复位信号,低有效 |
2.2 写地址通道信号
表2-2 为AXI写地址通道信号
信号 | 源 | 描述 |
---|---|---|
AWID | Master | 写地址ID, 用来标志一组写信号 |
AWADDR | Master | 写地址,一次突发写的首地址 |
AWLEN | Master | 突发长度,一次突发写传输数据的个数 |
AWSIZE | Master | 突发大小,每一次突发传输的字节数 |
AWBURST | Master | 突发类型,FIXED,INCR,WRAP,决定每一次突发以哪种法师计算 |
AWLOCK | Master | 总线锁信号,normal, exclusive, locked |
AWCACHE | Master | Cache类型,表明一次事务是怎样通过系统的bufferable, cacheable, read-allocate, write-allocate |
AWPORT | Master | 保护类型,,传输的特权级及安全等级 |
AWQOS | Master | 质量服务QoS,可作为安全级标志 |
AWREGION | Master | 域标记,可以实现一个物理地址与多个逻辑地址的映射,也可以对某些地址进行保护 |
AWUSER | Master | 用户自定义信号 |
AWVALID | Master | 有效信号,表明此通道的地址控制信号有效 |
AWREADY | Slave | 从设备已经准备好接受地址和控制信息 |
2.3 写数据通道信号
信号名 | 源 | 描述 |
---|---|---|
WID | Master | 一次写传输的ID |
WDATA | Master | 写数据 |
WSTRB | Master | 写数据有效的字节线,用来表明哪8bits数据是有效的 |
WLAST | Master | 突发写传输的最后一个数据 |
WUSER | Master | 用户自定义信号 |
WVALID | Master | 写有效 |
WREADY | Slave | 表明从机可以接收写数据 |
2.4 写响应通道信号
信号名 | 源 | 描述 |
---|---|---|
BID | Slave | 写响应ID |
BRESP | Slave | 写响应,表明写事务的状态OKAY,EXOKAY,SLVERR,DECERR |
BUSER | Slave | 用户自定义信号 |
BVALID | Slave | 写响应有效 |
BREADY | Master | 表明主机能够接收写响应 |
2.5 读地址通道信号
信号名 | 源 | 描述 |
---|---|---|
ARID | Master | 读地址ID,用来标志一组写信号 |
ARADDR | Master | 读地址,一次突发读的首地址 |
ARLEN | Master | 突发长度,突发读传输数据个数 |
ARSIZE | Master | 突发大小,每次突发传输的字节数 |
ARBURST | Master | 突发类型,FIXED,INCR,WRAP |
ARLOCK | Master | Master |
ARCACHE | Master | Cache类型,表明一次事务是怎样通过系统的bufferable,cacheable,read-allocate,write-allocate |
ARPORT | Master | 保护类型,传输的特权级及安全等级 |
ARQOS | Master | 质量服务Qos,可作为安全级标志 |
ARREGION | Master | 域标记,可以实现一个物理地址和多个逻辑地址映射,也可以对某些地址进行保护 |
ARUSER | Master | 用户自定义信号 |
ARVALID | Master | 有效信号,表明此通道地址控制信号有效 |
ARREADY | Slave | 从设备已经准备好接受地址和控制信息 |
2.6 读数据通道信号
信号名 | 源 | 描述 |
---|---|---|
RID | Master | 一次读传输ID |
RDATA | Master | 读数据 |
RRESP | Master | 读响应,表明读传输状态 |
RLAST | Master | 突发读传输的最后一个数据 |
RUSER | Master | 用户自定义信号 |
RVALID | Master | 读有效 |
RREADY | Slave | 表明从机可以接收读数据 |
2.7 低功耗接口信号
信号名 | 源 | 描述 |
---|---|---|
CSYSREQ | 时钟控制器 | 系统退出低功耗请求,此信号从时钟控制器到外设 |
CSYSACK | 外设 | 退出低功耗状态确认 |
CACTIVE | 外设 | 外设请求时钟有效 |
3、信号接口要求
3.1 时钟和复位
Clock
每个AXI interface都有一个时钟信号ACLK,所有的输入信号在ACLK的上升沿采样,所有的输出信号在ACLK的上升沿之后发生变化。
在master和slave interface上,输入与输出信号之间必须没有组合逻辑路径。
Reset
AXI协议使用低电平有效的复位信号ARESETn。复位信号可以被异步置位,但是复位的释放必须与ACLK的上升沿是同步的。复位时,接口要求如下:
- 一个主接口必须驱动ARVALID, AWVALID和WVALID LOW
- 从接口必须驱动RVALID和BVALID LOW
- 所有其他信号可以驱动到任何值。
在复位之后,master被允许驱动ARVALID, AWVALID, or WVALID 为高电平的最早的时刻是ARESETn为高电平之后的一个ACLK的上升沿,如下图所示。
3.2 基本读写时序
握手机制
5个传输通道均使用VALID/READY信号对传输过程的地址、数据、控制信号进行握手。使用双向握手机制,传输仅仅发生在VALID、READY同时有效的时候。VALID和READY的先后关系具有三种情况:
- VALID先有效,等待READY有效后完成传输(VALID一旦有效后在传输完成前不可取消)。
- READY先有效,等待VALID有效后完成传输(READY可以在VALID有效前撤销)。
- VALID和READY同时有效,立刻完成传输。
此外,需要注意的是允许READY信号等待VALID信号再有效,即即使从机准备好,也可以不提供READY信号,等到主机发送VALID信号再提供READY信号。对应的VALID信号不允许等待READY信号,即不允许VALID等待READY信号拉高后再拉高,否则容易产生死锁现象。
下图是几种握手机制:
图2-1 VALID 先有效握手机制
图2-2 READY 先有效握手机制
图2-3 VALID和READY 同时有效握手机制
3.3 通道信号要求
通道握手信号:每个通道有自己的xVALID/xREADY握手信号对。
- 写地址通道:当主机驱动有效的地址和控制信号时,主机可以发起AWVALID,一旦发起,需要保持AWVALID的信号状态,直到时钟上升沿采样到从机的AWREADY。AWREADY默认值可高可低,推荐为高(如果为低,一次传输至少需要两个周期,一个用来发起AWVALID,一个用来发起AWREADY);当AWREADY为高时,从机必须能够接受提供给它的有效地址。
- 写数据通道:在写突发传输过程中,主机只能在它提供有效的写数据时发起WVALID,一旦发起,需要保持信号状态,直到时钟上升沿采样到从机的WREADY。WREADY默认值可以为高,这要求从机总能够在单个周期内接受写数据。主机在驱动最后一次写突发传输是需要发起WLAST信号。
- 写响应通道:从机只能在回应主机写响应有效时发起BVALID,一旦发起需要保持状态,直到时钟上升沿采样到主机的BREADY信号。当主机总能在一个周期内接受写响应信号时,可以将BREADY的默认值设为高。
- 读地址通道:当主机驱动有效的地址和控制信号时,主机可以发起ARVALID,一旦发起,需要保持ARVALID的状态,直到时钟上升沿采样到从机的ARREADY。ARREADY默认值可高可低,推荐为高(如果为低,一次传输至少需要两个周期,一个用来发ARVALID,一个用来发ARREADY);当ARREADY为高时,从机必须能够接受提供给它的有效地址。
- 读数据通道:只有当从机驱动有效的读数据时从机才可以发RVALID,一旦发起需要保持直到时钟上升沿采样到主机的BREADY。BREADY默认值可以为高,此时需要主机任何时候一旦开始读传输就能立马接受读数据。当最后一次突发读传输时,从机需要断言RLAST。
AXI协议要求通道间满足如下关系:
- 写响应必须跟随最后一次burst的的写传输。
- 读数据必须跟随数据对应的地址。
- 通道握手信号需要确认一些依赖关系。
3.4.通道依赖关系
为了防止死锁,必须遵守握手信号之间的依赖规则。
- VALID信号不能依赖READY信号。
- AXI接口可以等到检测到VALID有效对应的READY,也可以检测到VALID之前就使能READY信号。
下面有几个图表明依赖关系,单箭头指向的信号能在箭头起点信号之前或之后变成有效;双箭头指向的信号必须在箭头起点信号有效之后变成有效。
读传输握手信号依赖关系如图3-1所示,从图中可以看出,在一个读传输中:
上面的图表示ARVALID与ARREADY并无指定的有效顺序,但RVALID需要等待ARVALID与AREADY均有效后才能变为有效,RVALID与RREADY之间也并无指定的有效顺序。也可以理解为读数据操作需要在给出读地址操作之后才能执行,但读数据通道与读地址通道中的握手信号无规定的先后顺序。
写传输握手信号依赖关系如图3-2所示,涉及到的信号有AWVALID, WVALID, BVALID, AWREADY, WREADY, BREADY。
图3-2,写传输握手示意图
图3-3, 写响应传输示意图
写传输过程也可以大致分为两个部分,一是写信息过程,一是写回应部分。在写回应BVALID有效前,必须要使得写地址通道与写数据通道的握手信号均有效,且写数据通道的WVALID信号必须为最后一个写入数据的有效信号。BREADY信号可在BVALID信号前后有效。而写地址通道与写数据通道的四个握手信号之间无必须要求的时间前后关系。
从上面这些可以看出,AXI4协议的信号驱动模式是有一定自由空间的,因此可以在协议给出的约束之下,结合自身系统进行一定程度的改动,达到更好的效果。
3.5 传输结构
3.5.1 地址结构
AXI协议是基于突发的。主机通过驱动控制信息和地址来开始每一次突发从第一个字节到从机。随着突发的进行,从机slave必须计算burst中传输的地址序列。
突发不能跨越4KB的地址边界。
Burst Length:
突发长度指定为:
- ARLEN[7:0],用于读传输
- AWLEN[7:0],用于写传输。
下文中的AxLEN表示ARLEN或AWLEN。AXI4对INCR突发类型的突发长度支持扩展到1 ~ 256。支持所有其他突发类型。AXI4仍然是1到16次传输。
AXI4的突发长度定义为:
Burst_Length = AxLEN[7:0] + 1,以适应axi4中INCR突发类型的扩展突发长度。AXI有以下规则来管理突发的使用:
- 对于wrapping burst, 突发长度必须是2, 4,8或16
- 突发不能超过4KB地址边界
- 不支持wrapping burst提前终止
没有事务可以提前终止突发。然而,为了减少写突发中的数据传输数量
Master可以通过取消所有写strobe来禁用进一步写操作。在这种情况下,master必须完成burst中剩余的传输。在一个读突发中,主机可以丢弃读数据,但它必须完成突发中所有的传输。
注意:在访问对读敏感的设备(如FIFO)时,如果丢弃不需要的读数据,可能会导致数据丢失。当访问这样的设备时,主机必须使用与所需大小完全匹配的突发长度数据传输。
Burst Size:
每个数据传输的最大字节数(即脉冲)由以下参数指定:
- ARSIZE[2:0],用于读传输
- AWSIZE[2:0],用于写传输。
在这个规范中,AxSIZE表示ARSIZE或AWSIZE。图3-4表示AxSIZE编码格式。
图3-4, AxSIZE编码格式
如果AXI总线比突发大小宽,AXI接口必须从传输地址确定哪个字节数据总线用于每次传输的通道。任何传输的大小都不能超过事务中任何一个代理的数据总线宽度。
Burst Type:
- FIXED: 在固定突发中,突发中的每一次传输都是相同的地址。这种burst类型用于重复访问相同的位置,例如在加载或清空时一个FIFO。
- INCR: 递增。在递增突发中,突发中每次传输的地址为的增量上次传输的地址。增量值取决于传输的大小。例如,在一个大小为4字节的突发中,每个传输的地址是前一个地址的加四。这种突发类型用于访问正常的顺序内存。
- WRAP: wrapping burst 模式突发类似于递增爆炸,除了地址wrap aroud 到一个更低的位置地址,如果达到地址上限。
以下限制适用于wrap 突发:
• 起始地址必须与每个传输的大小对齐
• burst的长度必须是2、4、8或16传输。
Wrap突发行为:
• burst使用的最低地址与要传输的数据的总大小对齐,即((burst中每次传输的大小)× (burst中传输的数量))。这地址被定义为换行边界。
• 每次传输后,地址增量的方式与INCR突发相同。然而,
如果这个增量的地址是((wrap boundary) +(要传输的数据的总大小))
然后地址绕到绕边界。
•在突发中的第一个传输可以使用高于wrap边界的地址,主适用于wrap突发的限制。这意味着地址封装了任何第一个地址高于WRAP边界的WRAP突发。这种突发类型用于缓存线路访问。
Burst 类型信号:
- ARBURST[1:0], 读传输
- AWBURST[1:0], 写传输.
AxBURST 表示 ARBURST or AWBURST. 如图3-5 突发类型:
Burst Address:
本节提供了在突发中确定传输地址和字节通道的方法。涉及变量如表3-6如下:
3.5.2 读写数据结构
write strobe:
当WSTRB[n:0]信号为HIGH时,指定数据总线中包含有效信息的字节通道。写数据总线每8位有一个写strobe,因此WSTRB[n]对应于WDATA[(8n)+7: (8n)]。
主机必须确保写strobe只有在包含有效数据的字节通道时才为HIGH。当WVALID为LOW时,写strobe可以取任何值,尽管协议这样说,但是要么被压低,要么被保持在先前的价值。
Narrow transfers:
当主机产生一个比它的数据总线窄的传输时,地址和控制信息就确定了
传输使用哪个字节通道:
- 在增量或wrap突发,不同的字节通道被用于突发的每一个节拍
- 在固定的突发中,每个节拍使用相同的字节通道。
下面给出两个字节通道使用的例子。灰色的单元格表示字节不传输。
图A3-7:
- burst有5个传输
- 起始地址为0
- 每次传输8位
- 传输在32位总线上
- 突发类型为INCR。
图3-8:
- 突发三次传输
- 起始地址位4
- 每一次传输32bit数据
- 传输在64bit的总线上
3.5.3 读写响应结构
AXI协议为读和写事务提供响应信号:
- 对于读事务,从站的响应信息在读数据通道上发出信号
- 对于写事务,响应信息在写响应通道上发出信号。
响应信号:
- RRESP[1:0],用于读传输
- BRESP[1:0],用于写传输。
响应:
- OKAY 正常访问成功。正常访问成功。也可以表示独占访问失败。
- EXOKAY 独占访问。表示独占访问的读或写部分已经成功。
- SLVERR 从机错误。当访问成功到达从机,但从机希望返回一个错误条件给原始主机时使用。
- DECERR 解码错误。通常由互连组件生成,表示在事务地址没有从站。
下图表明了RRESP和BRESP的编码结构:
对于写事务,对于整个突发而不是突发中的每个数据传输,都有一个响应信号。
在读事务中,从机可以对不同的传输发出不同的响应信号。例如,在一次16次读传输中,slave可能会对其中15次传输返回一个OKAY响应,对其中一次传输返回一个SLVERR响应。
该协议规定,即使报告了错误,也必须执行所需的数据传输数量。例如,如果从一个slave请求读8次数据传输,但该slave有一个错误条件,该slave必须执行8次数据传输,每一次都有一个错误响应。如果从站给出一个单次脉冲,剩余的脉冲不会被取消错误的回应。
OKAY, 正常访问成功
OKAY响应代表下面任意一种:
- 正常访问成功
- 独占访问失败
- 对不支持独占访问的slave的独占访问。
OKAY是大多数事务的响应。
EXOKAY, 独占访问成功
SLVERR,从机错误
SLVERR响应表示一次不成功的传输。
为了简化系统监控和调试,建议错误响应仅用于错误条件,而不是用于正常的、预期的事件。从错误条件的例子如下:
- FIFO或缓冲区溢出或欠运行状态
- 不支持的传输大小尝试
- 对只读位置的写访问尝试
- 从机的超时条件
- 访问被禁用或下电的功能。
DECERR解码错误
DECERR响应表示互连不能成功解码从机访问。
如果互连不能成功解码从机访问,它必须返回DECERR响应。建议互连将访问路由到一个默认从站,并且默认从站返回DECERR响应。
AXI协议要求事务的所有数据传输都已完成,即使出现了错误条件。任何给出DECERR响应的组件都必须满足这个要求。
4、传输特性
AXI从机分为两种:
- 存储器从机(Memory Slave):需要支持所有传输特性
- 外设从机(Peripheral Slave):仅需要支持指定的操作,但是可以保证所有类型的传输完成(不要求非指定的操作响应正确)
AxCACHE用于指定传输特性,传输特性用于标定传输如何在系统中进行和系统级缓存如何处理传输。
4.1 存储器特性
存储器特性包括4个位,如下所示:
-
AxCACHE[0](Bufferable):AxCACHE[0]表示传输过程中是否有缓存,当该位置为1时,表示表示传输路径上具有buffer(可延迟transaction到达最终点的时间)
-
AxCACHE[1](Modifiable):标记传输是否可以被修改/优化,当其置0时,每个传输将不会被更改,具体来说,AxADDR、AxSIZE、AxLEN、- -AxBURST、AxLOCK和AxPROT信号不会被修改(地址,突发传输信息,传输隐私信息不被修改)。但是AxCACHE[0]、ID和QoS可能被修改,同时,一个突发长度长于16的突发传输可能被切开,但是保证传输效果相同。当该位置1时,除了以上可能发生的改变,另外:
– 多个传输可能被合并为一个传输,一个传输可能被切分为多个传输
读传输在从机端读出的数据可能多于主机的请求(多的数据被保存在cache中用于优化数据访问)
– 写传输可能访问到超过主机请求的地址范围,妥善使用WSTRB保证仅有需要的地址被覆盖
另外,AxLOCK和AxPROT信号仍然不能被改变,同时需要注意的是:AxCACHE[0]=0,具有相同的AXI ID和指向相同的从机的一系列传输的顺序不能改变。 -
AxCACHE[2](Read-allocate)和AxCACHE[3](Write-allocate):读写操作前是否检查缓存以优化传输
4.2 存储器类型
通过ARCACHE和AWCACHE的不同定义不同的存储器类型
5、举例
内存类型的从机:
支持AXI4总线的从机大致可以分为两种类型,一种是内存类型的从机(memory slave),一种是外设类型的从机(peripheral slave)。但是说到底,这两种类型的从机就是一个地址空间下的寄存器阵列,本质上没有区别。区别只在于内存类型的从机工作的内容就是将写入的数据存储,再按照地址索引读出,而外设类型的从机寄存器与外设本身的动作有关。
仿真波形:
写地址通道:
写数据和写响应通道:
读地址和读数据通道:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)