基本读写事务
1. 握手的过程
2. 信道信令要求
3. 通道之间的关系
1. 握手的过程
当地址、数据或控制信息可用时,源端(source)产生VALID信号。终端(destination)生成READY信号,表示它可以接受该信息。传输只发生在VALID和READY信号都是HIGH的时候。
在主机和从机接口上,输入和输出信号之间不能有组合路径。
VALID 与READY握手的三种形式:
-
VALID在READY之前置位
握手的过程:源端在T1后呈现信息,并置位VALID信号。目的端在T2之后置位READY信号。源端必须保持其信息稳定,直到传输发生在T3。
源端不允许等到READY被置位后才置位VALID。
当VALID被置位时,它必须保持,直到VALID和READY都被置位时,在上升时钟边缘,握手发生。 -
VALID在READY之后置位
T1之后,地址、数据或控制信息还没有生效,终端就置位READY。该行为表明它可以接受该信息。源端在T2之后呈现信息并置位VALID,然后在T3识别该行为时进行传输。在这种情况下,传输发生在一个周期内。
允许终端在置位相应的READY之前等待VALID被拉高。
如果READY被置位,则允许在VALID被拉高之前取消READY。 -
VALID与READY同时置位
源端和终端碰巧都表示可以在T1之后传输地址、数据或控制信息。在这种情况下,传输发生在上升时钟沿,此时VALID和READY可以被识别。这意味着传输发生在T2。
2. 信道信令要求
此部分描述每个通道的握手信号和握手规则。
- 写地址通道(AW,AWVALID, AWREADY)
主机只有在驱动有效的地址和控制信息时才能置位AWVALID信号。当置位时,AWVALID必须保持,直到从机置位AWREADY后上升时钟边缘。
AWREADY的默认状态可以是HIGH或LOW。此规范建议默认状态为高。当AWREADY为HIGH时,从机必须能够接受提供给它的任何有效地址。(本规范不推荐默认的AWREADY状态为LOW,因为它强制传输至少需要两个周期,一个用于置位AWVALID,另一个用于断言AWREADY。) - 写数据通道(W,WVALID, WREADY)
在写突发期间,主机只有在驱动有效的写数据时才能置位WVALID信号。当被置位时,WVALID必须保持,直到从机置位WREADY后上升时钟边缘。
WREADY的默认状态可以是HIGH,但前提是从机在一个周期内总是可以接受写数据。
当主机在突发中驱动最后的写传输时,必须断言WLAST信号。
该规范建议将非活动字节通道的WDATA驱动为零 - 写响应通道(B,BVALID, BREADY)
从属只有在驱动一个有效的写响应时才能置位BVALID信号。当置位BVALID时,BVALID必须保持其状态,直到主机置位BREADY后的上升时钟边缘。
默认状态可以是HIGH,但前提是主机在一个周期内总能接受写响应。
-读地址通道(RW,ARVALID, ARREADY)
主机只有在驱动有效的地址和控制信息时才能置位ARVALID信号。当被置位时,ARVALID必须保持置位状态,直到从机置位ARREADY信号后上升时钟沿。
ARREADY的默认状态可以是HIGH或LOW。此规范建议默认状态为HIGH。如果ARREADY为HIGH,则从机必须能够接受提供给它的任何有效地址。(本规范不建议将默认的ARREADY值设置为LOW,因为它强制传输至少需要两个周期,一个周期断言ARVALID,另一个周期断言ARREADY。) - 读数据通道(R,RVALID, RREADY )
从机只有在驱动有效的读数据时才能置位RVALID信号。当其被置位时,RVALID必须保持其状态,直到主机置位RREADY后的上升时钟边缘。即使从机只有一个读数据源,它也必须仅在响应数据请求时置位RVALID信号。
主机接口使用RREADY信号来表示它接受数据。RREADY的默认状态可以是HIGH,但前提是主机在启动读事务时能够立即接受读数据。
当从机驱动突发中的最后读传输时,必须置位RLAST信号。
本规范建议对于非活动字节通道将RDATA驱动为零。
3. 通道之间的关系
AXI协议需要遵循以下关系:
- 写响应必须总是在写事务的最后一个写传输之后。
- 读数据必须总是跟在数据的读地址后面。
- 通道握手必须符合在通道握手信号之间的依赖中定义的依赖关系。
写数据可以出现在写地址之前,也可以与写地址同一个时钟周期
当主机发出写请求时,它必须能够为该事务提供所有写数据,而不依赖于该主机的其他事务。
当主机发出读请求时,它必须能够接受该事务的所有读数据,而不依赖于来自该主机的其他事务。
注意,主机可以依赖于按顺序从使用相同ID的事务返回的读取数据,因此主机只需要足够的存储空间来读取来自不同ID的事务的数据
信道握手信号之间的依赖关系
在任何事务中:
- 发送信息的AXI接口的VALID信号不能依赖于接收该信息的AXI接口的READY信号。
- 接收信息的AXI接口可以等待,直到它检测到一个VALID信号,然后才置位其相应的READY信号。
-
读事务中的依赖关系:
-
在置位ARVALID之前,主机不能等待从机置位ARREADY。 从机可以在置位ARREADY之前等待置位ARVALID。
-
从机可以在置位ARVALID之前置位ARREADY。
-
从机必须等待ARVALID和ARREADY都被置位,然后再置位RVALID,以表明有效数据可用。
-
从机不能等待主机置位RREADY才置位RVALID。 主机可以在置位RREADY之前等待RVALID被置位。
-
主机可以在RVALID生效之前置位RREADY。
-
-
写事务中的依赖关系:
AXI3
-
主机不能等待从机置位AWREADY或WREADY后再置位AWVALID或WVALID。
-
从机可以等待AWVALID或WVALID,或者两者都等待,然后再置位AWREADY。
-
从机可以在置位AWVALID或WVALID或两者之前置位AWREADY。
-
从机可以等待AWVALID或WVALID,或两者都等待,然后置位WREADY。
从机可以在置位AWVALID或WVALID或两者之前置位WREADY。 -
从机在置位BVALID之前必须等待WVALID和WREADY都被置位。
-
从机还必须在置位BVALID之前等待置位WLAST。等待是必需的,因为写响应(BRESP)必须在写事务的最后一次数据传输之后才发出信号。
-
从机不能等待主机置位BVALID之前置位BREADY。 主机可以在置位BREADY之前等待BVALID。
-
主机可以在置位BVALID之前置位BREADY。
AXI4,AXI5
-
主机不能等待从机置位AWREADY或WREADY后再置位AWVALID或WVALID。
-
在置位AWREADY之前,从机可以等待AWVALID或WVALID,或两者都等待。
-
从机可以在置位AWVALID或WVALID或两者之前置位AWREADY。
-
从机可以等待AWVALID或WVALID,或两者都等待,然后置位WREADY。
-
从机可以在置位AWVALID或WVALID或两者之前置位WREADY。
-
从机可以在置位AWVALID或WVALID或两者之前置位WREADY。
-
从机必须等待AWVALID、AWREADY、WVALID和WREADY被置位后,才能置位BVALID。
-
从机还必须在置位BVALID之前等待置位WLAST。这种等待是因为写响应(BRESP)必须在写事务的最后一次数据传输之后才发出信号。
-
从机不能等待主机置位BVALID之前置位BREADY。
-
主机可以在置位BREADY之前等待BVALID。
-
主机可以在BVALID之前置位BREADY
-
-
遗留问题
AXI4和AXI5写事务依赖中描述的附加依赖关系意味着,接受所有写数据并在接受地址之前提供写响应的AXI3从机与AXI4或AXI5不兼容。将一个AXI3遗留从机转换为AXI4或AXI5需要添加一个wrapper。该wrapper确保在从机接受适当的地址之前不提供返回的写响应。
[参考资料] IHI0022H_c_amba_axi_protocol_spec
【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~