引言
前面两篇博文从简单介绍的角度说明了 AXI协议规范。
AXI 总线协议学习笔记(2)
AXI 总线协议学习笔记(3)
从本篇开始,详细翻译并学习AXI协议的官方发布规范。
文档中的时序图说明:
AXI指:Advanced eXtensible Interface,高级可扩展接口。
Part A ——AMBA AXI 协议规范
A1:介绍
A1.1 关于 AXI 协议
AMBA AXI协议支持管理器和从属器组件之间的高性能,高频率通信。
AXI协议特点:
- 适合高带宽低延迟设计。
- 不用复杂的桥接就可以支持高频操作。
- 该协议满足各种组件的接口要求。
- 它适用于具有高初始访问延迟的存储器控制器。
- 提供了互连架构实现的灵活性。
- 它向后兼容AHB和APB接口。
AXI协议的关键特性是:
- 单独的地址/控制和数据阶段。
- 支持使用字节选通进行未对齐的数据传输。
- 使用仅发出起始地址的基于突发的事务。
- 独立的读写数据通道,可以提供低成本的直接内存访问(DMA)。
- 支持发出多个未完成的地址。
- 支持无序事务完成。
- 允许轻松添加寄存器级以提供时序收敛。
A1.2 AXI架构
AXI协议基于突发,定义了五个独立的事务通道:
- 读地址通道,该通道的信号名以AR开头;
- 读数据通道,该通道的信号名以R开头;
- 写地址通道,该通道的信号名以AW开头;
- 写数据通道,该通道的信号名以W开头;
- 写响应通道,该通道的信号名以B开头;
地址信道携带描述要传输的数据的性质的控制信息。数据通过以下任一方式在管理器和从属器组件之间传输:
- 管理者通过写数据通道向从属者传输数据。在一次写事务中,从属者通过写响应通道告知管理者数据传输完成。
- 管理者通过读数据通道向从属者拿取数据。
AXI协议:
- 允许在实际数据传输之前发布地址信息。
- 支持多个未完成事务。
- 支持事务无序完成。
下图所示,写通道架构:
读通道架构:
A1.2.1 通道定义
每个通道都包括一组信息信号,VALID 和 READY 信号提供了双向握手机制。
源端利用 VALID 信号表征此通道上地址、数据或控制信息何时有效。目的端利用 READY 信号表征何时准备好接收源端信息。读写数据通道均包含一个 LAST 信号,来表征传输事务中传输的最后一个数据。
读写地址通道
读写事务均包含自己的地址通道。对应的地址通道会传输一次事务中需要的地址和控制信息。
读数据通道
读数据通道同时携带读取的数据和读响应信息,由下属侧传至管理器侧。
包含:
- 数据总线信号,位宽可为,8,16,32,64,128,256,512,或1024;
- 一个读响应信号,表征读事务完成的状态。
写数据通道
写数据通道用于传输从管理器侧发往从属器侧的写数据。
包括:
- 数据总线信号,位宽可为,8,16,32,64,128,256,512,或1024;
- 每八个数据位的字节通道选通信号,指示有效数据的字节。
写入数据通道信息始终被视为缓冲,因此管理器可以执行写入事务,而无需从属确认先前的写入事务。
写响应通道
下属使用写响应通道来响应写事务。所有写入事务都需要写响应信道上的完成信令。仅对完整事务发出完成信号,而不是对事务中的每个数据传输发出完成信号。
A1.2.2 接口和互联
一个典型的系统由多个管理器和从属设备组成,这些设备通过某种形式的互连连接在一起,如图所示。
AXI协议为以下接口提供了单一接口定义:
- 管理器和互联器
- 从属器和互联器
- 管理器和从属器
上述的接口定义支持多种不同的互联实现。
设备之间的互连等同于另一个具有对称的管理器和从属端口的设备,真正的管理器设备和从属设备可以连接这些端口。
典型的系统拓扑结构
绝大部分系统使用如下3种的互联拓扑结构:
- 共享地址数据总线
- 共享地址总线和多条数据总线
- 多层,具有多个地址和数据总线
在大多数系统中,地址信道带宽要求明显小于数据信道带宽要求。这样的系统可以通过使用具有多个数据总线的共享地址总线来实现并行数据传输,从而在系统性能和互连复杂性之间实现良好的平衡。
A1.2.3 寄存器切片
每个AXI信道仅在一个方向上传输信息,并且该架构不需要信道之间的任何固定关系。这些特性意味着可以在任何通道的几乎任何点插入寄存器片,而代价是额外的延迟周期。
注意:
- 延迟周期和最大操作频率之间的权衡。
- 处理器和高性能内存之间的直接、快速连接,但使用简单的寄存器片来隔离到性能不太关键的外围设备的较长路径。
A1.3 术语
A1.3.1 AXI组件和拓扑结构
组件:具有至少一个AMBA接口的独特功能单元。组件可用作管理器、从属、外围和互连组件。
管理器组件:启动事务的组件。单个组件可能同时充当管理器组件和从属组件。例如,直接内存访问(DMA)组件在启动事务以移动数据时可以是管理器组件,在被编程时可以是从属组件。
从属器组件:一种接收事务并对其作出响应的组件。单个组件可以同时充当从属组件和管理器组件。例如,直接内存访问(DMA)组件在被编程时可以是从属组件,在启动事务以移动数据时可以是管理器组件。包括:存储器从属器件以及外设从属器件。
存储器从属器件:
内存从属组件或内存从属组件是具有以下属性的从属组件:
- 从内存从属存储器读取字节将返回写入该字节位置的最后一个值。
- 对从属存储器中字节位置的写入会将该位置的值更新为通过后续读取获得的新值。
- 多次读取一个位置对任何其他字节位置都没有副作用。
- 读取或写入一个字节位置对任何其他字节位置都没有副作用。
外设从属器件:
外围从属组件也称为外围从属组件。本规范建议外围从属设备具有通常在组件数据表中描述的“实施定义”访问方法。任何未定义为允许的访问都可能导致外围从属设备失败,但必须以协议正确的方式完成,以防止系统死锁。该协议不要求外围设备继续正确操作。
在本说明书中的描述上下文中,外围从属设备与外围设备、外围组件、外围设备和设备同义。
互联组件:具有多个AMBA接口的组件,将一个或多个管理器组件连接到一个或更多从属组件
互连组件可用于组合在一起:
- 一组管理器,使其显示为单个管理器界面。
- 一组从属项,使其显示为单个从属项界面。
A1.3.2 AXI 事务和存储器类型
当AXI管理器启动AXI操作时,以AXI从属器为通信目标:
- AXI总线上所需的一整套操作构成AXI事务(事务指:AXI管理器启动AXI事务以与AXI从属服务器通信。通常,交易需要在经理和下属之间通过多个渠道交换信息。所需的一整套信息交换构成AXI事务。)。
- 任何所需的有效载荷数据都作为AXI突发传输(Burst指:在AXI事务中,有效载荷数据在单个突发中传输,该突发可以包括多个节拍或单个数据传输。)
- 突发可以包括多个数据传输或AXI Beats(AXI Beats指:AXI突发内的单个数据传输。)
A1.3.3 缓存和缓存操作
本规范没有定义任何缓存参考工作中定义的标准缓存术语。
然而,缓存和缓存行的词汇表条目阐明了这些术语在本文档中的使用方式。
缓存:缓存管理器中的任何缓存、缓冲区或其他存储结构,可以保存特定地址位置。
缓存线:高速缓存中的基本存储单位。它的大小总是2的幂。缓存线必须与缓存线的大小对齐。缓存行的大小相当于一致性颗粒。
A2:信号描述
A2.1 全局信号
AXI3或者AXI4协议中的全局信号
信号名称:ACLK
源:时钟源
说明:全局时钟信号,同步信号在该全局时钟的上升边沿采样。
信号名称:ARESETn
源:复位源
说明:全局复位信号,低电平复位有效。
A2.2 写地址通道信号
除专门说明外,所有信号适用于AXI3和AXI4协议。
信号名称:AWID
源:管理器
说明:写事务的标识标记。
信号名称:AWADDR
源:管理器
说明:写入事务中第一次传输的地址。
信号名称:AWLEN
源:管理器
说明:突发写入长度,写入事务中数据传输的确切数量。该信息确定与地址相关联的数据传输次数。
信号名称:AWSIZE
源:管理器
说明:表示写事务中,所传输的每个数据所占的字节数。
信号名称:AWBURST
源:管理器
说明:突发类型。指定一次传输事务中,每次数据传输的地址变化规律。
信号名称:AWLOCK
源:管理器
说明:提供有关写事务原子特性。此信号在AXI第3、4代之间有变化。
信号名称:AWCACHE
源:管理器
说明:指示写入事务如何在系统中进行。
信号名称:AWPROT
源:管理器
说明:写事务的保护属性,包括 权限、安全级别和访问类型。
信号名称:AWQOS
源:管理器
说明:写事务服务质量标识。AXI3中未实现。
信号名称:AWREGION
源:管理器
说明:写入事务的区域指示符。AXI3中未实现。
信号名称:AWUSER
源:管理器
说明:写入事务的用户自定义扩展。AXI3中未实现。
信号名称:AWVALID
源:管理器
说明:指示写事务通道信号的有效性。
信号名称:AWREADY
源:从属器
说明:指示从属器可以接收写地址通道的传输。
A2.3 写数据通道信号
信号名 | 源 | 说明 |
WID | 管理器 | 写数据传输的ID标签,仅在AXI3中实现 |
WDATA | 管理器 | 写数据 |
WSTRB | 管理器 | 写选通,一位负责一个字节 |
WLAST | 管理器 | 表明写数据的最后一个数据 |
WUSER | 管理器 | 写数据通道的用户自定义信号 |
WVALID | 管理器 | 写数据通道有效信号 |
WREADY | 从属器 | 写数据通道的可接收状态信号 |
A2.4 写响应通道信号
信号名 | 源 | 说明 |
BID | 从属器 | 写响应的ID标签 |
BRESP | 从属器 | 写响应,表明写事务完成的状态 |
BUSER | 从属器 | 写响应通道的用户自定义信号 |
BVALID | 从属器 | 写响应通道有效信号 |
BREADY | 管理器 | 写响应通道的可接收状态信号 |
A2.5 读地址通道信号
除专门说明外,所有信号适用于AXI3和AXI4协议。
信号名称:ARID
源:管理器
说明:读事务的标识标记。
信号名称:ARADDR
源:管理器
说明:读事务中第一次传输的地址。
信号名称:ARLEN
源:管理器
说明:突发写入长度,读事务中数据传输的确切数量。该信息确定与地址相关联的数据传输次数。
信号名称:ARSIZE
源:管理器
说明:表示读事务中,所传输的每个数据所占的字节数。
信号名称:ARBURST
源:管理器
说明:突发类型。指定一次传输事务中,每次数据传输的地址变化规律。
信号名称:ARLOCK
源:管理器
说明:提供有关读事务原子特性。此信号在AXI第3、4代之间有变化。
信号名称:ARCACHE
源:管理器
说明:指示读事务如何在系统中进行。
信号名称:ARPROT
源:管理器
说明:读事务的保护属性,包括 权限、安全级别和访问类型。
信号名称:ARQOS
源:管理器
说明:读事务服务质量标识。AXI3中未实现。
信号名称:ARREGION
源:管理器
说明:读事务的区域指示符。AXI3中未实现。
信号名称:ARUSER
源:管理器
说明:读事务的用户自定义扩展。AXI3中未实现。
信号名称:ARVALID
源:管理器
说明:指示读事务通道信号的有效性。
信号名称:ARREADY
源:从属器
说明:指示从属器可以接收读地址通道的传输。
A2.6 读数据通道信号
信号名 | 源 | 说明 |
RID | 从属器 | 读数据和读响应的ID标签 |
RDATA | 从属器 | 读数据 |
RRESP | 从属器 | 读响应,表征读的状态 |
RLAST | 从属器 | 表明读数据的最后一个数据 |
RUSER | 从属器 | 读数据通道的用户自定义信号 |
RVALID | 从属器 | 读数据通道有效信号 |
RREADY | 管理器 | 读数据通道的可接收状态信号 |
A3:信号接口要求
A3.1 时钟和复位
时钟
每个AXI接口都只有一个时钟信号ACLK。所有的输入信号在ACLK的上升沿采样,所有的输出信号的变化发生在ACLK的上升沿之后。
在管理器和从属器接口上,输入和输出信号之间不能有组合路径。
复位
AXI协议使用仅使用一个低电平有效的复位信号,ARESETn。该信号可以异步断言,但是复位撤离时必须与ACLK的上升边沿同步。
复位期间,需满足如下的接口信号要求:
- 管理器接口必须将 ARVALID, AWVALID, WVALID 信号拉低。
- 从属器接口必须将 RVALID , BVALID 信号拉低。
- 其他信号可以为任意值。
管理器在复位信号撤离后最早可以将 ARVALID, AWVALID, WVALID 信号拉高的时刻是复位信号ARESETn 为高电平后 ACLK 的第一个上升边沿。如下时序图:
A3.2 基本读写事务
握手过程
AXI协议的5个通道全是用 VALID/READY 去完成数据、地址、控制信息传输过程的握手。这种双向流控制机制意味着管理器和从属器都可以控制信息在二者之间移动的速率。源端 产生VALID信号指示地址、数据、控制信息的有效性。目的端 产生READY信号指示其已准备好可以接受来自源端的信息。当且仅当VALID/READY信号均为高电平,成功握手时,才产生一次有效传输。在管理器和从属器接口上,输入和输出信号之间不能有组合路径。(一般都是直线连线)握手时序图,握手在T3时刻完成:
源端 在目的端接收到有效信息之前,应在总线上一直保持将要传输的有用信息。
源端 在断言VALID信号之前,不允许一直等待 READY信号的断言。
当VALID信号断言时,其应一直保持该信号的有效性直到握手发生,握手时刻发生在READY / VALID信号均断言的第一个时钟上升沿。下图是目的端在源端断言VALID信号之前断言READY的时序图,握手在T3时刻完成:
目的端 在断言对应的READY信号之前,允许一直等待源端VALID信号断言。
如果READY信号断言,那么在VALID信号断言之前可以取消断言READY信号。下图的时序图中,在T2时刻完成握手。
通道信号要求
每个通道都有各自的握手信号:
写地址通道
管理器给出有效的地址和控制信息时就可以将 AWVALID 信号断言,一旦断言 AWVALID 信号必须一直保持有效至 AWREADY 信号断言后的第一个时钟上升沿。
AWREADY 信号默认的状态可以是高电平也可以是低电平。协议规范建议的默认状态是高电平。当AWREADY 信号为高电平时,从属器必须有能力接受发给它的任何有效地址。
——注意——
协议规范之所以不推荐默认状态为低电平的原因在于,如果这样会迫使传输至少消耗2个时钟周期,一个周期断言AWVALID 一个周期断言 AWREADY。
写数据通道
在一次突发写入期间,管理器给出有效的写数据时就可以将 WVALID 信号断言,一旦断言 WVALID 信号必须一直保持有效至 WREADY 信号断言后的第一个时钟上升沿。
WREADY 信号默认的状态可以是高电平,唯有如此,从属器才可以在一个时钟周期接收写数据。
管理器必须在其写突发传输中给出最后一个写数据时断言 WLAST 信号。
协议规范建议将 WDATA 无效的字节通道置零。
写响应通道
从属器当且仅当其发出有效写响应时,断言 BVALID 信号。一旦断言 BVALID 信号必须一直保持有效至 BREADY 信号断言后的第一个时钟上升沿。
BREADY 信号默认的状态可以是高电平,唯有如此,管理器才可以在一个时钟周期接收写响应。
读地址通道
管理器给出有效的地址和控制信息时就可以将 ARVALID 信号断言,一旦断言 ARVALID 信号必须一直保持有效至 ARREADY 信号断言后的第一个时钟上升沿。
ARREADY 信号默认的状态可以是高电平也可以是低电平。协议规范建议的默认状态是高电平。当ARREADY 信号为高电平时,从属器必须有能力接受发给它的任何有效地址。
——注意——
协议规范之所以不推荐默认状态为低电平的原因在于,如果这样会迫使传输至少消耗2个时钟周期,一个周期断言ARVALID 一个周期断言 ARREADY。
读数据通道
从属器当且仅当其发出有效写响应时,断言 RVALID 信号。一旦断言 RVALID 信号必须一直保持有效至 RREADY 信号断言后的第一个时钟上升沿。尽管一个从属器只有一个数据读取的源端,但是同样必须断言 RVALID 信号以回应数据请求。
管理器通过断言 RREADY 信号去指示其可以接收数据。RREADY 信号的默认状态可以是高电平,但前提是管理器在启动读取事务时能够立即接受读取数据。
从属器必须在其读突发传输中给出最后一个写数据时断言 RLAST 信号。
协议规范建议将 RDATA 无效的字节通道置零。
A3.3 通道间的关系
AXI协议有如下的关系需要保持:
- 写响应必须紧跟在写事务最后一个数据传输之后。
- 读数据必须紧跟读取数据的地址之后。
- 信道握手必须符合 信道握手信号之间的依赖关系 中定义的依赖关系。
该协议没有定义任何其他的通道间关系。
通道间的依赖关系缺失意味着,在一个事务中,写数据可以先于写地址出现。如果写地址通道比写数据通道包含更多级的寄存器,这种情况可能发生。类似地,写数据可能和地址在相同的时钟周期出现。
——注意——
当互连需要确定目标地址空间或从属空间时,它必须重新对齐写地址和数据。需要这种重新排列以确保写入数据仅对其目的地的从属方有效。
————————
当管理器发出写请求时,它必须能够提供该事务的所有写数据,而不依赖于该管理器的其他事务。
当管理器发出读取请求时,它必须能够接受该事务的所有读取数据,而不依赖该管理器的其他事务。
请注意,管理器可以依赖使用相同ID的事务按顺序返回的读取数据,因此管理器只需要足够的存储空间来存储来自具有不同ID的事务的读取数据。
通道间握手信号的依赖关系
为了避免死锁状况,必须遵守握手信号之间存在的依赖性规则。
- 发送信息的AXI接口的 VALID 信号必须不依赖于接收该信息的AXI接口的 READY 信号。
- 正在接收信息的AXI接口可以等待直到它检测到 VALID 信号,然后才断言其相应的 READY 信号。
—— 注意 ——
在断言 READY 之前等待 VALID 被断言是可以接受的。在检测到相应的 VALID 之前断言READY也是可以接受的。这可以导致更有效的设计。
————————
此外,不同通道上的握手信号之间存在依赖性,AXI4定义了额外的写响应依赖性。以下小节定义了这些依赖关系:
- 读事务依赖关系
- AXI3写事务依赖关系
- AXI4和AXI5写事务依赖关系
在依赖关系的图中:
- 单箭头指向可以在 箭头开始处的信号 之前或者之后断言的信号
- 双箭头指向只能在 箭头开始处信号 之后断言的信号
读事务依赖关系
下图所示是读事务握手信号的依赖关系:
- 管理器在断言 ARVALID 信号之前禁止等待从属器断言 ARREADY 信号。
- 从属器在断言 ARREADY 信号之前可以等待 ARVALID 信号的断言。
- 从属器可以在 ARVALID 信号断言之前断言 ARREADY 信号。
- 从属器必须等待 ARVALID 信号 和 ARREADY 信号均断言,才可以断言 RVALID 信号。
- 从属器在断言 RVALID 信号之前禁止等待管理器断言 RREADY信号。
- 管理器在断言 RREADY信号之前可以一直等待 RVALID 信号的断言。
- 管理器可以在 RVALID 信号断言之前断言 RREADY。
AXI3写事务的依赖关系
下图所示是写事务握手信号的依赖关系:
- 管理器在断言 AWVALID 信号或 WVALID 信号之前禁止等待从属器断言 AWREADY 信号或 WREADY 信号。
- 从属器在断言 AWREADY 信号之前可以一直等待 AWVALID 信号 或 WVALID 信号。
- 从属器可以在 AWVALID 信号或 WVALID 信号断言之前断言 AWREADY信号。
- 从属器在断言 WREADY 信号之前一直等待 AWVALID 信号或 WVALID 信号。
- 从属器可以在 AWVALID 信号或 WVALID 信号断言之前断言 WREADY 信号。
- 从属器在断言 BVALID 信号之前,一定要等待 WVALID 信号和 WREADY 信号断言,完成握手。从属器在断言 BVALID 信号之前也必须等待 WLAST断言完成。这个等待是必须的,因为写响应 BRESP 必须在写事务最后一个数据传输完成后起作用。
- 从属器在断言 BVALID 信号之前禁止等待管理器断言 BREADY 信号。
- 管理器可以在断言 BREADY 信号之前一直等待 BVALID 信号的断言。
- 管理器可以在 BVALID 信号断言之前断言 BREADY 信号。
—— 注意 ——
为避免死锁状况必须遵守上述的依赖规则。例如,管理器在驱动(断言)WVALID 信号之前禁止一直等待 AWREADY 信号的断言。当此时从属器在断言 AWREADY 信号之前一直等待 WVALID 信号,就会出现死锁状况,导致一直无法握手,无法通信。
——————————
参考说明
【1】AMBA® AXI and ACE Protocol Specification.
未完结,持续更~