时钟和复位

  1. 主从接口的输入输出之间不能是组合逻辑

  2. 可以异步复位,但是复位到低只能是在上升沿复位

  3. 复位时,主从输出通道的valid都必须拉低,其他信号无所谓

握手过程

  1. 源VALID发出后直到握手成功之前,不能改变VALID

    A source is not permitted to wait until READY is asserted before asserting VALID.

  2. 目标端可以等待源VALID置高后再发出READY

    A destination is permitted to wait for VALID to be asserted before asserting the corresponding READY.

  3. 与第一条相反,置高READY后,允许在置高VALID之前置低READY。

  4. 可以在同一周期内,VALID和READY同时置高,即该周期握手成功

通道信号解析

  1. AWREADY 的默认状态可以是 HIGH 或 LOW

    建议默认状态为 HIGH,本规范不建议将默认的 AWREADY 状态设置为 LOW,因为它会强制传输至少需要两个周期,一个用于断言 AWVALID,另一个用于断言 AWREADY

  2. WREADY 的默认状态可以是 HIGH ,但前提是从站始终可以接受单个周期内的写入数据。

  3. BREADY 的默认状态可以是 HIGH ,但前提是 master 始终可以在单个周期内接受写入响应

  4. ARREADY 的默认状态可以是 HIGH 或 LOW。此规范建议默认状态为 HIGH

    此规范不建议将默认 ARREADY 值设置为 LOW,因为它会强制传输至少需要两个周期,一个用于断言 ARVALID,另一个用于断言 ARREADY。

  5. RREADY 的默认状态可以是 HIGH,但前提是主能够在启动读取事务时立即接受读取数据。

通道之间的关系

  1. A write response must always follow the last write transfer in a write transaction.

  2. Read data must always follow the read address of the data.

  3. Channel handshakes must conform to the dependencies defined in Dependencies between channel handshake signals.

前两条基本一个意思,就是写和读的回应信号必须在请求信号之后。对于写回应通道B,就是必须在W通道最后写入之后,对于读通道R,就是必须在AR通道之后。

📢CHATGPT:

AXI 协议中,5 个通道(AW, W, B, AR, R)各自独立握手,但在事务层面有顺序要求:

  • B 一定在 AW 和 W 之后。

  • R 一定在 AR 之后。

  • 通道之间不能乱交叉:比如先 AR 然后 AW 和 W,结果先给出 R 后马上给 B,这样是允许的,因为通道本身是独立的,但事务内部的顺序不能乱 </aside>

第三条说明除上两条约定之外,所有握手信号之间还要满足一个依赖关系,如下。

通道握手信号之间的关系

概括为两条:

  1. 发送信息的 AXI 接口的 VALID 信号不得依赖于接收该信息的 AXI 接口的 READY 信号。

  2. 正在接收信息的 AXI 接口可以等待,直到检测到 VALID 信号后,再断言其相应的 READY 信号。

    不推荐这样做

    虽然在断言 READY 之前等待 VALID 被断言是可以接受的,但在检测相应的 VALID 之前断言 READY 也是可以接受的。这可以提高设计效率。

根据上述约定,可以画出以下关系图:

对于写传输,有两点细节可以单独说说:

  1. AW通道和W通道的READY的置高可以依赖AW或W通道的VALID,或者两者都依赖,又或者都不依赖

  2. B通道VALID要在W通道握手之后(而不是AW)

针对第二点,AXI4和AXI5做出的额外的约定:

即:在断言 BVALID 之前,从必须等待 AWVALID、AWREADY、WVALID 和 WREADY 被断言

这其实是补上了AXI3的一个漏洞,让我们看看GPT怎么说:

📢CHATGPT:

在 AXI3 中,写事务的三个通道(AW, W, B)是完全解耦的,没有强制要求写响应(BVALID)必须等 AW 握手完成之后才可以发出。

所以,理论上你可以有一个 AXI3 从设备:

  • 它只看 WVALID 和 WREADY,就先接收完写数据;

  • 然后马上给出 BVALID;

  • 而此时主设备还没有发 AW 地址呢!

这种情况下,从设备可以 不等地址,就开始响应写事务 —— 这就很危险:数据写了,但地址不知道,还响应了……

同时,这里可能会对“等待 AWVALID、AWREADY、WVALID 和 WREADY 被断言”的描述存在误解:AW和W通道需要同时握手,BVALID才能置高。此时,不要忘记了,通道之间是完全解耦的,所以AW、W 通道可以分开握手,只是写响应(B 通道)必须在 AW 和 W 通道握手都完成后才能发出

芯片技术从业者,本站签约作者