本文将介绍高级可扩展接口 (AXI),它是 AMBA 的扩展。
AXI 协议最初是为高频系统设计的,旨在满足各种组件的接口要求,同时允许这些组件的互连方式具有灵活性。适用于高频、低延迟设计,AXI 保持与之前 AMBA 版本的 AHB 和 APB 向后兼容。
了解 AXI 将使您深入了解 SoC 的工作原理,同时使您成为一名多才多艺的全面设计师。
AXI 架构
回想一下,AHB(高级高性能总线)是一个单通道总线,多个主机和从机使用它来交换信息。优先级仲裁器确定当前哪个主机使用总线,而中央解码器执行从机选择。操作以突发方式执行,可能需要多个总线周期才能完成。每个突发传输都包含一个地址和控制阶段,然后是一个数据阶段。
AXI 的设计理念类似,但使用多个专用通道进行读写。AXI 与其前身一样是基于突发的,并且在数据交换之前使用类似的地址和控制阶段。AXI 还包括许多新功能,包括乱序事务、未对齐的数据传输、缓存支持信号和低功耗接口。
AXI 通道
AXI 主设备和从设备之间有五个独立的通道。他们是:
读取地址通道
读取数据通道
写地址通道
写数据通道
写响应通道
地址通道用于在主机和从机之间执行基本握手时发送地址和控制信息。数据通道是放置要交换的信息的地方。
主机从从机读取数据并将数据写入从机。读响应信息放在读数据通道上,而写响应信息有一个专用通道。这样,master 可以验证写入事务是否已完成。
图 1 显示了通过五个 AXI 通道连接的 AXI 主设备和从设备。
图 1. AXI 通道
每次数据交换都称为事务。事务包括地址和控制信息、发送的数据以及任何响应信息。实际数据以包含多次传输的突发形式发送。图 1 显示了由 4 个节拍或数据传输组成的读取和写入突发。
我们将在本文后面更详细地讨论爆发。
AXI 信号
与之前 AMBA 版本中的 AHB、ASB 和 APB 信号非常相似,每个 AXI 通道都有许多与之关联的信号。有两个称为 ACLK 和 ARESETn 的全局信号。它们分别是系统的全局时钟和复位信号。ARESETn 上的“n”后缀表示该信号低电平有效。
图 2 显示了对应于读取通道的信号以及全局信号。
图 2. 读取地址、读取数据和全局信号
每个通道都有一个用于乱序交易的 ID 标签。任何具有相同 ID 的事务必须保持顺序,但具有不同 ID 的事务可以按任何顺序完成。这允许较快的事务在较慢的事务之前完成,即使较慢的事务是先发出的。例如,如果一个 master 正在向多个 slave 写入数据,事务 ID 将允许更快的 slave 更快地完成。
总线宽度是特定于实现的,但这些信号以 32 位总线宽度显示。从机使用 RLAST 信号向主机发送最后一个数据项正在传输的信号。
其他值得注意的信号包括突发大小、长度和类型。VALID 和 READY 信号用于主从之间的握手。这些将在本文后面讨论。
缓存、锁定和保护信号分别用于缓存、独占访问(原子操作)和非法访问保护。
图 3. 写地址、数据和响应信号
图 3 显示了写地址、数据和响应信号。这些信号反映了上面的读取信号,但被主机用来向从机发送数据。WLAST 向从站发出最后一个数据项正在发送的信号。专用的写响应信号允许主机知道写事务成功完成。
有关这些信号的更详细说明,请参阅 AMBA 版本 3.0,特别是AMBA AXI 协议 v1.0 规范。
AXI 交易
如前所述,AXI 数据传输称为事务。事务可以采用读取或写入的形式,包括地址/控制信息、数据和响应。数据以突发的形式发送,其中包括称为节拍的多个数据项。为了同步数据的发送和接收,AXI 主机和从机在事务开始时使用 READY 和 VALID 信号执行握手。
频道握手
每个 AXI 通道都包含一个 VALID 和一个 READY 信号。这些用于同步和控制传输速率。这里要记住的重要一点是源或发送者使用 VALID 信号来指示数据或控制信息可用。目的地或接收者在实际能够使用该信息时发出 READY 信号。因此,只有当 VALID 和 READY 信号都被断言时,才会发生传输。
图 4 显示了工作中的 AXI 握手。注意信息传输(用箭头表示)仅在 VALID 和 READY 都为高时发生,无论哪个先被断言。另请注意,AXI 对所有传输都使用时钟上升沿。
图 4. AXI 握手机制(改编自 AXI 规范 v1.0)
AXI 规范中的一个重要注意事项是,一个组件的 VALID 信号绝不能依赖于另一个组件的 READY 信号。READY 可以等待 VALID 信号,但不是必须的。遵循这些规则可以消除发生死锁的可能性。如果 VALID 依赖于 READY 并且 READY 依赖于 VALID,那么很容易看出这两个信号都不会被断言,因为每个信号都在等待另一个信号。
AXI 突发
AXI 中的数据交换采用突发的形式。每个突发由多个节拍或数据传输组成。在事务开始时发送的控制信息指示正在传输的突发的长度、大小和类型。
AXLEN[3:0],X 代表 R 或 W,表示突发中的节拍数。由于 4 位宽,这意味着一个突发中最多可以有 16 次传输。AXLEN = b0000 表示每连拍一拍。b0001、b0010、b0011的值分别代表2拍、3拍、4拍。这种格局一直延续到十六岁。组件必须完成 AXLEN 指定的所有节拍,无论是否使用数据。
AXSIZE[2:0]指定突发的每个节拍中有多少字节。AXSIZE 中的每个位代表 2 的另一个幂,“000”代表每拍 1 个字节,“111”代表每拍最多 128 个字节。这些节拍的大小不能超过总线宽度。
AXBURST[1:0]确定将执行的突发类型。
AXI 中有三种类型的突发。他们是:
固定爆发
递增爆发
包裹爆发
在固定突发中,每个节拍的地址都不会改变。一个典型的应用是 FIFO 队列/缓冲区。
递增突发表示更典型的传输类型,其中传输地址在每个节拍后递增。您可以将其视为与基地址的偏移量。
最后的突发类型是环绕突发。回绕突发类似于递增突发,不同之处在于存在回绕边界,其中一旦地址递增到该点,它就会回绕到较低地址。
图 5 显示了三种不同类型的 AXI 突发的简化视图。
图 5. AXI 突发类型
AXI 互连
AXI 互连允许多个主设备和/或多个从设备相互连接。AXI 规范定义了主机和从机、主机和互连以及从机和互连之间的接口。
实际上,互连包含连接到 AXI 主设备的从接口和连接到 AXI 从设备的主接口。互连中发生的事情——即不同的主机如何与不同的从机通信——取决于实现。互连可以允许共享地址总线、共享数据总线、两者共享或都不共享。
在下一篇文章中,我们将了解 AXI 互连、它们的工作原理以及如何在设计中使用它们。
结论
本文是对高级可扩展接口 (AXI) 协议的基本介绍。我们查看了 AMBA 第三版中指定的旧版 AXI。正如我上面提到的,您可以参考AMBA AXI 协议 v1.0(大约一百页)来更深入地了解 AXI 的第一个版本。AXI 在 AMBA 修订版 4 中出现了一些重大变化,其中包含 AXI4、AXI4-Lite 和 AXI4-Stream 等新版本的 AXI。
未来的 AMBA 文章将讨论 AXI4 和用于组件之间系统级缓存一致性的 ACE 协议(AXI Coherency Extensions)。AXI 已成为现代 SoC 设计中广泛使用的协议。在学习 AXI 时,像 Avalon 和 Wishbone 这样更简单的总线协议会变得容易得多。
这里还没有内容,您有什么问题吗?