• 正文
  • 相关推荐
申请入驻 产业图谱

一文看懂AXI总线的ordering

06/24 09:04
449
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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

相关推荐