目录
3.Interconnect ordering 互连的排序要求
1.ordering model的概念
AXI4协议支持基于AXI ID事务标识符的排序模型。原则是对于具有相同ID的事务:
- 对于任何单个外设设备的事务,必须按照它们被发出的顺序到达外设,而不管事务的地址如何。
- 使用相同或重叠地址的内存事务必须按照它们被发出的顺序到达内存。
注意: 在具有多个主设备的AXI系统中,用于排序模型的AXI ID包括基础设施ID,这些ID可以唯一地识别每个主设备。这意味着排序模型独立地适用于系统中的每个主设备。
AXI排序模型还要求,具有相同ID的所有事务在同一方向上必须按照它们被发出的顺序提供响应。 读和写地址通道是独立的,并且在本规范中被定义为不同方向。 如果需要在具有相同ID但在不同方向上的两个事务之间建立排序关系,则主设备必须等待接收到第一个事务的响应后再发出第二个事务(对于Exclusive transaction来说AW AR的ID需要一样) 。如果主设备在接收到相反方向的早期事务的响应之前发出了一个方向上的事务,那么两个事务之间就没有排序保证。
注意: 在需要保证排序的情况下,需要对早期事务的响应,主设备必须确保它已经从系统的适当点接收到了响应。来自中间AXI组件的响应不能保证与下游中间缓冲区组件的排序。
2.Master ordering 主设备排序要求
一个主设备发出具有相同ID的多个相同方向的读写事务时,关于这些事务的排序有以下保证:
- 主设备对所有事务的响应顺序必须与发出顺序相同。
- 对于到设备内存的事务,到达从设备(slave)的顺序必须与发出顺序相同。
- 对于普通内存,到达从设备(slave)的事务如果地址相同或重叠,它们的顺序必须与发出顺序相同。这也适用于可缓存内存的事务,以及所有有效的,并且AxCACHE[3:1]字段不是0b000的事务。
两个事务访问相同或重叠地址的定义是,两个事务至少访问了同一单拷贝原子地址范围内的一个字节。
3.Interconnect ordering 互连的排序要求
为了满足排序模型的要求,互连(interconnect)必须确保:
- 具有相同ID的相同方向的事务到设备内存的顺序得到保持。
- 具有相同ID的相同方向的事务到相同或重叠地址的顺序得到保持。有关重叠地址的定义,请参见“主设备排序”。
- 具有相同ID的写响应的顺序得到保持。
- 具有相同ID的读响应的顺序得到保持。
- 与事务关联的AXI ID值的任何操作都必须确保原始ID值的排序要求得到维护。
- 任何在事务到达最终目的地之前给出事务响应的组件都必须确保本节中给出的排序要求一直得到维护,直到事务到达其最终目的地。
4.Slave ordering 从设备排序要求
为了满足排序模型的要求,从设备(slave)必须确保:
- 它发出响应的任何写事务都必须被随后的任何写或读事务观察到,不管事务ID如何。
- 它对设备内存的任何写事务都必须被具有相同ID的任何随后对设备内存的写事务观察到,即使尚未发出响应。
- 它对普通内存的任何写事务都必须被随后具有相同ID的对相同或重叠地址的任何写事务观察到,即使尚未给出响应。这也适用于可缓存内存的事务,并适用于所有有效的写事务,其中AWCACHE[3:1]不是0b000。
- 具有相同ID的多个写事务的响应必须按照事务到达的顺序发出。
- 具有不同ID的多个写事务的响应可以按任何顺序发出。
- 它发出响应的任何读事务都必须被随后的任何写或读事务观察到,不管事务ID如何。
- 它对设备内存的任何读事务都必须被具有相同ID的任何随后对设备内存的读事务观察到,即使尚未发出响应。
- 具有相同ID的多个读事务的响应必须按照事务到达的顺序发出。
- 具有不同ID的多个读事务的响应可以按任何顺序发出。
5.最终点之前的响应
当主设备需要在读写事务之间或具有不同ID的事务之间建立已知的排序关系时,它必须等待未完成的事务完成后才能发出任何依赖事务。事务完成意味着:
- 该事务对后续事务是可观察的。
- 对于不可缓冲的请求,事务已到达最终目的地。
- 对于可缓冲的事务,事务已到达一个可观察的中间点。
有可能中间组件会发出一些事务的响应,以提高系统性能。然而,它必须确保仍然满足可见性和排序保证。
5.1最终点之前的读响应
对于普通读事务,如果中间组件拥有与所有早期写入到相同或重叠地址的事务同步的最新数据,它可以从本地内存响应读数据。在这种情况下,请求不需要传播到最终目的地。
中间组件必须遵守ID排序规则,这意味着只有在所有具有相同ID的早期读事务都已经收到响应之后,才能发送读响应。
5.2最终点之前的写响应
对于可缓冲的写事务,响应可以由中间组件发出。在这种情况下,中间组件可以存储数据的本地副本,但在丢弃该数据之前必须将事务转发到下游。
中间组件必须遵守ID排序规则,这意味着只有在所有具有相同ID的早期写事务都已经收到响应之后,才能发送写响应。
在发送了早期写响应之后,组件必须负责该事务的排序和可观察性,直到写入操作已经传播到下游并且收到了写响应。在发送早期写响应和接收到下游响应之间的期间,组件必须确保:
- 如果对普通可缓冲事务给出了早期写响应,那么所有后续对相同或重叠地址的事务都必须在已经给出早期响应的写事务之后进行排序。
- 如果对设备可缓冲事务给出了早期写响应,那么所有后续事务都必须在已经给出早期响应的写事务之后进行排序。
6.有序的写观察
为了提高与支持不同排序模型的接口协议的兼容性,定义了一个Ordered_Write_Observation
属性,该属性可以为单个接口设置为TRUE或FALSE。
- TRUE:接口被定义为具有
Ordered_Write_Observation
属性。 - FALSE:不支持
Ordered_Write_Observation
属性的接口。如果未声明Ordered_Write_Observation
,则视为FALSE。
支持Ordered_Write_Observation
属性的接口可以支持生产者/消费者排序模型,从而提高性能。
如果系统中所有其他代理都以相同的顺序观察到两个具有相同ID的写事务,那么可以声明一个接口提供Ordered_Write_Observation
。
如果接口没有Ordered_Write_Observation
属性,那么写入的观察顺序仅保证对于相同外设的相同ID的一系列写入操作。要在没有Ordered_Write_Observation
的情况下支持生产者/消费者排序模型,必须在向不同外设发出较晚事务之前,先完成对一个外设的早期写入并提供BRESP响应。
PS:走过路过点个关注点个赞吧~ 会继续更新芯片设计相关文章