EasyAXI 第2期 - AXI 握手机制

EasyAXI 第2期 封面

协议文档

AMBA AXI and ACE Protocol Specification Version F.b

ARM 官方文档:https://developer.arm.com/documentation/ihi0022/fb/?lang=en
注意,这不是最新版的文档,版本号为F.b。
因为我讲的是AXI4协议,所以这个版本足够了。
EasyAXI 第2期 协议文档

我不会按协议顺序讲,而是讲到什么再去看协议。
协议手册是一种工具,在需要的时候知道去哪里查阅即可,并不需要背下来,也不可能背下来。

快速理解

AXI接口包含五个通道,每个通道的数据传输都是通过握手机制完成的。

握手,顾名思义,是两个角色之间的交互动作。在AXI协议中,交互的两个设备分别具有“主从”身份:请求的发起方是Master,接收方是Slave。数据传输的控制正是通过握手机制实现的,具体由两个关键信号完成:

  • VALID:由发送方驱动,表示数据、地址或控制信息已经准备就绪,并且相关信号(如数据信号、地址信号)已经稳定。VALID信号必须保持高电平,直到数据传输完成。

  • READY:由接收方驱动,表示接收方可以接收数据。READY信号可以在VALID之前或之后拉高。

握手机制有效解决了发送方和接收方速度不一致的问题,确保了数据传输的可靠性。

当VALID和READY同时为高时,握手成功,数据在这一拍完成传输。
EasyAXI 第2期 快速理解 握手

EasyAXI 第2期 快速理解 意义


实机演示

接下来,我以AR(地址读请求)通道为例,演示握手机制如何实现地址信息的传输。以下是两种常见的握手行为场景:
EasyAXI 第2期 实机演示

模式 1:READY 提前拉高,VALID 后拉高

  • 过程:接收方提前准备好接收数据(READY拉高),发送方一旦准备好(VALID拉高),数据传输立即完成。
  • 特点:这种场景下,接收方无需等待发送方的数据内容,只要自身有接收能力即可提前拉高READY。

当接收方确保自己能够接收任何数据时,可以提前拉高READY。

模式 2:VALID 先拉高,READY 后拉高

  • 过程:发送方先准备好数据(VALID拉高),接收方稍后响应(READY拉高),数据传输完成。
  • 特点:这种场景下,接收方需要根据发送方的数据内容决定是否拉高READY。

当接收方对数据有特定条件时,READY信号的拉高需要根据发送方的数据内容判断。例如:某个从设备只能接收地址在0x00 ~ 0xA范围内的读请求。此时,从设备拉高READY的前提是VALID有效期间,ADDR信号的值必须在0x00 ~ 0xA范围内。

模式1会比模式2早两拍完成握手,因此对于性能会有一定收益。
模式2必须确保valid的拉高不依赖ready,否则会出现挂死。这本身也是协议的规范。
并非设计上的优劣问题,而是实际应用中的约束所致。


遗留问题

留下两个思考题:

  1. 协议为什么要求VALID拉高后必须保持高电平?

    • 如果在握手成功前VALID信号撤离,可能会导致什么问题?在什么场景下会出现这种情况?
  2. VALID信号拉高后,数据是否可以再发生变化?

    • 如果在握手成功前数据发生变化,可能会导致什么问题?在什么场景下会出现这种情况?
      EasyAXI 第2期 遗留问题

EasyAXI 第2期 幻灯片7.PNG


EasyAXI 第2期 - AXI 握手机制
https://rongyel.github.io/posts/f5f06c5.html
作者
Rongye
发布于
2025年2月13日
许可协议