1. Request ordering
AXI是基于相同通道且相同ID来保序的:
-
- 相同AWID的写请求的响应必须按照请求顺序来返回。相同ARID的读请求的数据必须按照请求顺序来返回。
-
- AXI ordering模型不保证以下事务的order:
-
- 来自不同Master的事务。读事务和写事物之间。不同ID的事务。到不同Peripheral region的事务。到不同Memory location的事务。
-
如果Master需要对AXI协议不保序的事务进行保序,Master必须要等response。
1.1 Memory地址和Peripheral地址
AMBA协议里的address map分为Peripheral region和Memory location。
Memory location具有以下所有属性:
从memory位置读取字节时,返回最后一次写入的值。
对memory位置的写操作会更新该位置的值,对该位置的后续读操作会获取到新值。
对memory地址的读取或写入不会对其他memory地址产生副作用。
对每个memory location提供Observation保证。
memory location的大小等于该组件的单副本原子性(single-copy atomicity)大小。
Peripheral region具有以下所有属性:
对Peripheral region的读操作不一定返回最后写入该地址的值。
访问Peripheral region内的地址可能会对该region内的其他地址产生副作用。
对每个Peripheral region提供Observation保证。
Peripheral region的大小是实现定义的,但必须在一个slave组件内。
一个事务会有一个或多个地址location。
只有访问相同memory location、相同Peripheral region才会保序。
对一个Peripheral region的访问必须全部在该region内。
跨越多个memory location的事务有多个ordering保证。
1.2 Device和Normal请求
device事务:请求的axcache[1]为0。device事务可以访问memory location和Peripheral region。
normal事务:请求的axcache[1]为1。normal事务用来访问memory location,不期望访问Peripheral region。对Peripheral region的正常访问必须以符合协议的方式完成,但其结果是由实现定义的。
1.3 Observation和completion的定义
访问Peripheral region时:
当device读/写DRW1比DRW2先到达slave时,DRW1被DRW2观察到。
访问Memory location时:
如果写W2在W1之后生效,那么W1被W2观察到。
当W2在W3之后时,如果R1返回W3的数据,那么R1被W2观察到。
当W3在W1之后,如果R2返回W1或W3的数据,那么W1被R2观察到。
写操作的completion响应:bvalid和bready都拉高的cycle。
读操作的completion响应:rvalid、rready、rlast都拉高的cycle。
1.4 Manager ordering保证
Manager ordering有3种类型的ordering model:
-
-
- 收到completion响应之前的Observability保证。来自completion响应的Observability保证。Response ordering保证。
-
收到completion响应之前的Observability保证
以下保序适用于相同Master且相同ID的事务:
当device写操作DW2在DW1之后发送,且访问相同Peripheral region时,保证DW1在DW2之前到达目的地。
当device读操作DR2在DR1之后发送,且访问相同Peripheral region时,保证DR1在DR2之前到达目的地。
当写请求W2在W1之后发送,且访问相同Memory location时,保证W1被W2观察到。当读请求R3在R2之后发送,且访问相同Memory location时,保证被R2观察到的W1被R3观察到。
来自completion响应的Observability保证
对于读请求,completion响应保证该请求被后续来自任何Manager的读/写请求可观察到。
对于Non-bufferable写请求,completion响应保证该请求被后续来自任何Manager的读/写请求可观察到。
对于bufferable写请求,completion响应可以来自中间节点,它不保证写操作在endpoint完成,但保证observability:
-
-
-
- Non-shareable:只对发送的Manager保证observable。
- Shareable:对shareable domain的所有Manager保证observable。
- System:对所有Manager保证observable。
-
-
Response ordering保证
-
-
- 当读请求R2在R1之后发送,且Master相同、ID相同时,保证先收到R1响应,后收到R2响应。
-
- 当写请求W2在W1之后发送,且Master相同、ID相同时,保证先收到W1响应,后收到W2响应。
-
1.5 slave ordering要求
为了满足Manager的ordering保证,slave必须满足以下要求。
Peripheral location:
-
-
- 访问Peripheral location的执行顺序是实现定义的。通常期望执行顺序与到达顺序一致,但这并非强制要求。
-
Memory location:
先收到W1后收到W2,且相同ID,访问相同Memory location时,W1必须在W2之前保序。
在给出W1的completion响应后收到W2,且访问相同Memory location时,W1必须在W2之前保序。
在给出W1的completion响应后收到R2,且访问相同Memory location时,W1必须在R2之前保序。
在给出R1的completion响应后收到W2,且访问相同Memory location时,R1必须在W2之前保序。
Response ordering要求
-
-
- 先收到R1后收到R2,且ID相同时,必须先返回R1响应,后返回R2响应。先收到W1后收到W2,且ID相同时,必须先返回W1响应,后返回W2响应。
-
1.6 Interconnect ordering要求
当Interconnect发送请求或响应时,必须符合以下要求:
先收到R1后收到R2请求,且相同ID,相同location时,必须先发送R1请求,后发送R2请求。
先收到W1后收到W2请求,且相同ID,相同location时,必须先发送W1请求,后发送W2请求。
先收到device读请求DR1后收到DR2,且相同ID,相同Peripheral region时,必须先发送DR1请求,后发送DR2请求。
先收到device写请求DW1后收到DW2,且相同ID,相同Peripheral region时,必须先发送DW1请求,后发送DW2请求。
先收到R1后收到R2请求,且相同ID时,必须先发送R1响应,后发送R2响应。
先收到W1后收到W2请求,且相同ID时,必须先发送W1响应,后发送W2响应。
1.7 到达endpoint之前的响应
为了提升系统性能,允许中间组件发送响应,即early response。中间组件发送early response必须保证visibility和ordering。
Early read response
对于Normal read请求,如果数据是最新的,那么中间组件可以返回读数据。这种情况下,不需要将请求传到中间组件之外。
中间组件必须遵守ID保序规则:只有在之前的相同ID读请求都已经有响应的情况下,才可以发送读响应。
Early write response
对于bufferable写操作(awcache[0]为1),中间组件可以发送early write response。中间组件必须遵守ID保序规则。
在发送early写响应之后,中间组件必须负责该事务的ordering和observability,直到写操作已向下传送并收到写响应为止。在发送early写响应和收到下游响应之间,组件必须确保:
-
-
- 对于Normal事务的early写响应,后续到相同Memory location的事务都在该early响应的写事务之后排序。对于device事务的early写响应,后续到相同Peripheral region的事务都在该early响应的写事务之后排序。
-
当为Device Bufferable事务提供early写响应时,中间组件应该传播写事务,而不依赖其他事务。在传播上一个device写操作之前,中间组件不能等待另一个读或写操作到达。
1.8 Ordered write observation(OWO)
slave接口可以对写事务提供更强的顺序保证,即Ordered Write Observation(OWO)。
OWO保证:来自相同Master的相同ID写事务,先发送W1后发送W2,保证W1被W2观察到。
当使用OWO时,Manager可以发送多个相同ID的写请求而不用等写响应,并且这些写请求会按照发送顺序来保证observe。当使用Producer-Consumer保序模型时,OWO可以提高性能。
如果没有OWO,为了支持Producer-Consumer保序模型,Manager需要等待写响应,才能发送后续的相同ID的写请求。
参考:AMBA AXI Protocol Specification
448