时钟和复位
主从接口的输入输出之间不能是组合逻辑
可以异步复位,但是复位到低只能是在上升沿复位
复位时,主从输出通道的valid都必须拉低,其他信号无所谓
握手过程
源VALID发出后直到握手成功之前,不能改变VALID
A source is not permitted to wait until READY is asserted before asserting VALID.
目标端可以等待源VALID置高后再发出READY
A destination is permitted to wait for VALID to be asserted before asserting the corresponding READY.
与第一条相反,置高READY后,允许在置高VALID之前置低READY。
可以在同一周期内,VALID和READY同时置高,即该周期握手成功
通道信号解析
AWREADY 的默认状态可以是 HIGH 或 LOW
建议默认状态为 HIGH,本规范不建议将默认的 AWREADY 状态设置为 LOW,因为它会强制传输至少需要两个周期,一个用于断言 AWVALID,另一个用于断言 AWREADY
WREADY 的默认状态可以是 HIGH ,但前提是从站始终可以接受单个周期内的写入数据。
BREADY 的默认状态可以是 HIGH ,但前提是 master 始终可以在单个周期内接受写入响应
ARREADY 的默认状态可以是 HIGH 或 LOW。此规范建议默认状态为 HIGH
此规范不建议将默认 ARREADY 值设置为 LOW,因为它会强制传输至少需要两个周期,一个用于断言 ARVALID,另一个用于断言 ARREADY。
RREADY 的默认状态可以是 HIGH,但前提是主能够在启动读取事务时立即接受读取数据。
通道之间的关系
A write response must always follow the last write transfer in a write transaction.
Read data must always follow the read address of the data.
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>
第三条说明除上两条约定之外,所有握手信号之间还要满足一个依赖关系,如下。
通道握手信号之间的关系
概括为两条:
发送信息的 AXI 接口的 VALID 信号不得依赖于接收该信息的 AXI 接口的 READY 信号。
正在接收信息的 AXI 接口可以等待,直到检测到 VALID 信号后,再断言其相应的 READY 信号。
不推荐这样做
虽然在断言 READY 之前等待 VALID 被断言是可以接受的,但在检测相应的 VALID 之前断言 READY 也是可以接受的。这可以提高设计效率。
根据上述约定,可以画出以下关系图:
对于写传输,有两点细节可以单独说说:
AW通道和W通道的READY的置高可以依赖AW或W通道的VALID,或者两者都依赖,又或者都不依赖
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 通道握手都完成后才能发出