由于工作中接触最多的开发平台就是Linux + ARM
,因此平时有空也会学习和补充一些ARM相关硬件知识,其中
就包括ARM总线协议相关知识,因为通过工作会发现,有些疑难问题,单从软件层面是解释不了的,或者说有时根因不是软件问题,而是硬件层面(设计或者编码)的问题,所以只有在有具备了一些硬件工作原理知识的情况下,分析此类疑难问题才会有一些思路,想的也会更深入一些。
知识虽然是无穷尽的,但我们可以做到积少成多。今天就学习一下ARM AXI
总线相关知识。
ARM的AXI(Advanced eXtensible Interface)是一种高性能、高带宽、低延迟的片上通信协议,是ARM公司提出的AMBA
(Advanced Microcontroller Bus Architecture)总线架构的一部分。AXI协议旨在支持复杂片上系统(SoC
: System-on-Chip)中的高速数据传输,能够高效连接CPU、内存控制器、外设和其他高性能组件。AXI
协议的核心在于其分层和分离的设计,它将数据传输分解为地址/控制通道和数据通道,从而允许独立地处理地址和数据传输,提高了总线的效率和吞吐量。
AXI 原理和特点
-
分层结构:
AXI协议采用了层次化设计,包括AXI4
、AXI4-Lite
和AXI4-Stream
等多个变种,分别适用于不同应用场景。例如,AXI4
适用于高性能地址映射通信,AXI4-Lite
用于简单、低吞吐量的控制接口,AXI4-Stream
则用于无地址、连续数据流传输(如视频流)。 -
独立通道:
AXI采用了独立的地址、控制、读数据、写数据及写响应通道。这种分离的设计使得地址/控制信息与数据传输可以并行进行,极大地提升了数据传输效率。 -
异步时钟域支持:
AXI总线允许主设备和从设备使用不同的时钟源,通过握手信号进行跨时钟域同步,确保数据传输的正确性和稳定性。 -
分离的读写数据通道:
读写操作使用独立的通道,避免了读写操作间的相互干扰,允许读写操作同时进行,提高了系统的并发性能。 -
支持突发传输:
在进行连续的数据访问时,只需发送一次地址信息,随后就可以进行多次数据传输,减少了地址阶段的开销,特别适合于缓存行填充、连续内存区域访问等场景。 -
数据对齐与非对齐传输:
AXI支持任意字节对齐的数据传输,无需在硬件设计上严格遵循特定的地址对齐规则,增加了灵活性。 -
Outstanding传输访问与乱序完成:
主设备可以发出多个未完成的请求(Outstanding Transactions
),并允许这些请求按任意顺序完成(Out-of-Order Completion
)。这种机制允许从设备根据内部资源情况灵活调度响应,进一步提升带宽利用率和整体性能。 -
握手信号与状态报告:
通过一系列握手信号(如READ/WRITE VALID
,READY
等)实现数据传输的有效控制和确认。同时,从设备可以通过响应信号提供传输状态信息,如传输错误、缓存一致性状态等。
AXI协议定义了如下基本类型的通道:
- 读地址通道(Read Address Channel):用于传输读取请求的地址和控制信息。
- 读数据通道(Read Data Channel):用于返回从从设备读取的数据。
- 写地址通道(Write Address Channel):用于传输写入请求的地址和控制信息。
- 写数据通道(Write Data Channel):用于传输实际写入的数据。
- 写响应通道(Write Response Channel):用于确认写操作是否成功完成。
AXI协议不仅仅限于基本的读写通道,还包括额外的信号和特性,以支持复杂的系统交互和提高效率。
完整的AXI接口通常包含以下组成部分:
-
地址通道(AW、AR):分为写地址通道(
AW: Address Write
)和读地址通道(AR: Address Read
)。这两个通道负责传输请求的地址信息以及与之相关的控制信号,如突发长度(Burst Length
)、大小(Size
)、缓存属性(Cache Attributes
)等。 -
数据通道(W、R):写数据通道(
W: Write Data
)用于传输写操作的实际数据,而读数据通道(R: Read Data
)则用于传输由从设备返回的读取数据。每个数据通道还包含伴随的数据控制信号,如数据有效(Data Valid
)和最后一个数据传输标识(Last Beat
)。 -
写响应通道(B):用于
从设备
向主设备
发送写操作的完成状态,包括简单的完成确认或错误指示。 -
握手信号(Handshake Signals):每个通道都有自己的握手信号,如
ready
(ready信号表明从设备准备好接收或发送数据)和valid
(valid信号表明主设备提供的数据或命令有效),这些信号确保了数据传输的同步和可靠性。 -
控制和标识信号(Control and ID Signals):包括事务标识符(
ID
)用于区分并发的传输,以及一些控制信号,如排除(Exclude
)和锁定(Lock
),用于实现特定的传输属性或行为。
AXI传输通常遵循以下步骤:
- 地址传输:主设备通过读地址或写地址通道发送地址和控制信息。
- 数据传输:对于读操作,从设备通过读数据通道返回数据;对于写操作,主设备通过写数据通道发送数据。
- 确认/响应:从设备通过写响应通道确认写操作的成功或失败。
读
操作流程
-
地址阶段:主设备通过
AR
通道发送读地址和控制信息,包括地址、突发类型、大小等。ARVALID
信号被置为高电平,表示地址有效,等待从设备的响应。从设备通过ARREADY
信号确认其已准备好接收地址信息。 -
数据阶段:当从设备准备好数据后,会在
RVALID
信号上设置高电平,并通过RDATA
传输数据。同时,RRESP
信号携带事务的状态(如OK或Error)。主设备通过RREADY
信号通知从设备其已准备好接收数据。 -
完成:主设备确认数据接收完毕后,可以开始新的传输。这个过程可能涉及多次数据传输(突发传输),直到
RLAST
信号指示这是当前突发序列的最后一个数据。
写
操作流程
-
地址阶段:类似读操作,主设备通过
AW
通道发送写地址和控制信息,AWVALID
表明地址有效。从设备通过AWREADY
响应。 -
数据阶段:主设备随后通过
W
通道发送数据,WVALID
表明数据有效。WREADY
信号表明从设备准备接收数据。数据传输可能包含多个连续的数据包(突发传输)。 -
写响应阶段:数据传输完成后,从设备通过
B
通道发送写响应,BVALID
表示响应有效,BRESP
携带响应状态(如OK或Error)。主设备通过BREADY
确认收到响应,完成整个写操作。
附:AXI的高级特性
- 突发传输(Burst Transfers):允许一次性发送多个连续地址的读写请求,减少地址传输的开销。
- 流水线传输(Pipelining):不同阶段的操作可以重叠进行,进一步提升数据传输速率。
- 服务质量(QoS):通过优先级和仲裁机制,确保关键数据流得到优先处理。
- 保护域(Protection Domains):确保不同安全等级或权限的事务正确隔离。
综上所述,ARM AXI接口通过其细致的通道划分、丰富的控制信号和高级特性,为高性能SoC设计提供了强大的数据传输框架,支持高度并行和高效的片上通信。