22

Dskpimc? · 2020年09月03日

AXI协议之读写命令保序

总的保序模型(Definition of the ordering model)

为了提高总线数据传输带宽和利用率,AXI协议中masters可以outstanding传输,那么当多笔传输发生时,就需要保证每一笔都能按照预期的顺序来完成操作。AXI中当发生如下情况时,AXI必须做到保证先后顺序,即先发送的必须先到达目的地(device or memory),也先完成。

1、同时进行访问memory空间的多笔传输的地址(address)一样或有重叠(overlap);
2、访问同一个peripheral device空间时。

想象一下,如果多笔传输的memory读,不按照顺序来进行,可以后续发的读请求读到之前的数据,而先发送的读请求读到之后的数据,造成数据紊乱;对于peripheral device空间必须全部保序,不管地址,是因为device空间是带有额外属性的,即对device空间的读写操作,可能会影响该空间其他地址的数据变化,因此需要严格保序,否则数据一致性难以保证。

AXI通过何种方式来告知各个component是否是需要保证的transactions呢?答:通过ID号,即相同的ID号需要做到保序。另外保序只是针对同一个master来说,多个master之间传输的保序无法保证,可以通过软件来保证。

AXI保序要求所有相同方向且带有相同ID的transactions必须按顺序返回response,顺序就是他们发送的顺序。由于读通道和写通道是两个不同的方向,如果两个不同方向的transactions带有相同的ID需要保序,master必须接收到第一笔transaction的response信号后,才能发送第二笔transaction。如果不遵循这个约束,保序无法得到保证。

Master ordering

master发送同方向且相同ID的多笔读或写操作必须有如下保证:

  • transactions响应给master的顺序必须和master发送的顺序一致;
  • 对于访问Device memory,到达slave的顺序必须和transactions发送的顺序一致;
  • 对于访问Normal memory,到达same address或overlapping address的transactions的顺序必须和transactions发送的顺序一致。

这个同样适用于AxCACHE[3:1]不等于0的cacheable memory transactions。

Interconnect ordering

为了满足ordering model的需求,interconnect必须确保:

  • 访问Device memory的同方向同ID的transactions必须保持保序;
  • 访问same or overlapping address的同方向同ID的transactions必须保持保序;
  • 返回相同ID的写响应必须保持保序;
  • 返回相同ID的读响应必须保持保序;
  • 任何变换transactions的AXI ID值必须确保保持原始ID的保序需求;
  • 在该笔transaction没有到达最终的目的地,如果中间节点(component)提前返回响应,必须确保该笔传输会按照保序要求到达最终节点(final destination)

Slave ordering

为了满足ordering model的需求,slave必须确保:

  • 不管transaction IDs为何值,在slave节点任何写transaction已经返回响应的必须可以被接下来的读或写transaction观察到;
  • 任何访问Device memory的写transaction,即时slave还未发送response信号,也必须被接下来拥有同ID且访问Device memory的写传输观察到;
  • 任何访问Normal memory的写transaction,即时slave还未发送response信号,也必须被接下来拥有同ID且访问same or overlapping address的写传输观察到;这个原则同样适用于AWCACHE[3:1]不等于0的场景;
  • 对于多笔相同ID的写transactions的响应,slave必须按照接收到的顺序返回;
  • 对于多笔不同ID的写transactions的响应,slave可以乱序返回;
  • 不管transaction IDs为何值,任何读transaction已经发送响应的必须可以被后续

总的来说,对于slave已经返回响应的任何读写操作,都必须能被后续的读写操作观察到;任何还未返回响应的读或写操作,必须能被后续拥有相同ID的读或写操作观察到;多笔读或写操作在slave节点返回的响应,如果是同ID必须保序返回,如果不是同ID,则可以乱序。

Response before final destination

当master需要在读和写transactions之间或不同ID transactions之间(这个指的是多笔读有不同ID或多笔写有不同ID)有明确的顺序时,必须等到所有outstanding transactions完成后,master才发送后续相关的依赖transactions。

传输完成(transaction completion)意味着:

  • 该笔transaction可以被后续transaction观察到;
  • 对于non-bufferable请求,transaction必须到达最终节点(final destination);
  • 对于bufferable transactions,transaction必须到达可以被观察到的中间节点;

为了提升系统性能,一些transactions可能在中间节点会发送响应(response),但是,该节点必须确保visibility和ordering仍然满足。

Read response before final destination:

对于normal读传输,如果intermediate component(中间节点)关于之前写的same or overlapping address更新到最新值,那么中间节点可以返回来自local memory(存在于中间节点)的读数据响应。在这种情况下,request不需要传播到最终节点;

中间节点必须符合ID保序规则,这意味只有之前具有相同ID的读操作已经返回响应后,当前操作的读响应才能发出。

Write response before final destination:

对于Bufferable写传输,response(响应)可以从中间节点返回,在这种情况下,中间节点必须可以存储一份本地数据(a local copy of the data),且在丢弃该数据前,将该数据写到下游;

中间节点必须符合ID保序协议,这意味着只有之前具有相同ID的写传输已经返回响应后,当前操作的写响应才能发出;

在发送early write response后,中间节点必须保证该传输可以被保序和观察到,知道该写传输传播到下游并且收到写响应。在发送early write response和接收到下游的response之间,中间节点必须确保:

  • 对于Normal Bufferbale传输的early write response,如果response已经发送,所有接下来具有same or overlapping address的传输必须会被保序;
  • 对于Device Bufferable传输的early write response,如果response已经发送,所有接下来的传输必须会被保序;

Ordered write observation

为了提高支持不同ordering model的接口协议(interface protocols)的兼容性,对于单接口(single interface)定义了Ordered_Write_Observation属性可以是TRUE或FALSE。

  • TURE:interface拥有Ordered_Write_Observation属性;
  • FALSE:interface不支持Ordered_Write_Observation属性。如果Ordered_Write_Observation不指明,默认为FALSE;

支持Ordered_Write_Observation属性的接口可以支持Producer/Consumer保序模型来提高性能。如果两笔具有相同ID的写transactions可以被系统中其他agents以相同顺序(发送顺序)观察到,那么该接口(interface)可以宣称支持Ordered_Write_Observation属性。

如果一个接口不支持Ordered_Write_Observation属性,一系列访问相同peripheral且拥有相同ID的写操作才能保证保序观察。也就是说支不支持Ordered_Write_Observation决定了发出的多笔相同ID的写操作可以被观察到保序的范围,支持则相同ID写transactions可以被全局agent可以观察到,不支持则只有访问相同peripheral且相同ID的写可以被观察到保序。如果没有Ordered_Write_Observation,为了支持Producer/Consumer保序模型,在后续写transactions发送到另一个不同的peripheral前,之前的写peripheral操作必须完成且提供BRESP响应。

补充:

1、一个物理端口(physical port)通过使用许多logical ports,可以支持out-of-order transactions,每个logical port按顺序处理它的transactions,类似于多vc;

2、master和slave之间没有必要的需求使用AXI ID。在master和slave之间依次只处理一个transaction就不需要,肯定是保序的;

3、slave在收到来自master的AXI ID时,必须返回适当的BID和RID;

4、Read ordering:在master端口,同ID的读数据(read data)不允许间插,不同ID的读数据允许间插(interleaved);在slave端口,同ID的读数据必须保序返回(先到先返回),不同ID的读数据可以乱序返回,并且slave必须确保返回读数据的RID和ARID的值匹配。Interconnect必须确保一系列具有相同ARID(可能是不同的slave,也可能是相同的)的读操作返回的读数据被master按顺序(保序)接收。在slave端处通常有reorder buffer来处理读传输保序;

5、Normal write ordering:除非master知道slave支持写数据间插(interleaving),否则它必须按发送地址的顺序来发送写数据;大多数slave设计不支持写数据间插,因此slave必须按接收到的地址来顺序接收数据;如果Interconnect将多个masters的写transactions组合起来共同发往同一个slave,必须确保发到slave的数据也是按地址顺序;这些约束不仅仅限制于写传输具有不同的AWID,也适用于写传输来自不同的masters。

6、Write data interleaving:AXI4不支持写数据间插,所有的来自同一个transaction的所有写数据必须在写数据通道连续的提供数据,不被其他transaction插入。AXI3支持写数据间插,写间插必须是slave支持才行,slave接口支持不同AWID的写数据间插,写数据间插的深度等于slave可以接受间插数据的深度,同AWID不能被间插。对于支持写间插的slave,它接受到每笔transaction的第一笔写数据的顺序必须和接收到写请求的顺序一致。如果两笔写操作带有不同的AWID去访问same or overlapping地址,AXI3协议诶呦定义处理的顺序,更高级别的协议必须确保正确的处理顺序。为了避免死锁,支持写数据间插的slave接口必须能连续不断的接收写数据间插,不能拖延接收写数据来达到改变写数据的数据。当Interconnect联合(combine)多个写数据流传给同一个slave时,写数据间插可以防止stalling。例如,Interconnect可能联合一个慢master源的写数据和一个快master源的写数据,通过间插两个源头数据,可以提高系统性能。

7、Read and write interaction: AXI对读和写传输没有保序限制,不管ARID和AWID有没有一样,它们可以以任意顺序完成。如果读和写之间需要保序,那必须等一笔完成才能开始另一笔传输。对于读写到peripheral,必须保序,必须遵循一笔写(读)完成然后另一笔读(写)。对于读和写传输访问memory,master在实现时对outstanding传输可能有address check,来决定对一笔新传输是否可以拥有same or overlapping address。如果一笔读或写传输没有overlap or same address,那么可以直接开始传输,不需要等待前一笔传输的完成。

8、对于master连接到总线(interconnect)上时,interconnect会在ARID、AWID和WID上增加(append)额外的bits,用于区别不同masters。这样做有两个影响:(1) Masters不需要知道其他masters使用的ID值;(2) 在slave接口的ID域比master接口的宽。在读数据时,interconnect使用RID的额外bits去决定读数据该返回给哪个master端口,并在最终到达master端口时,interconnect会移除掉(remove)RID的额外bits。在写响应时,BID的处理方式和RID一致。

9、ID域的宽度根据实现来决定的,ARM specification建议master口的ID域为4bits,interconnect对于master ID附增4bits,slave口的ID域为8bits。

10、AXI4协议中不支持写数据间插,一个transaction内所有的写数据必须连续不断的在写数据通道传输,这意味着AXI4不支持WID。当然,如果AXI3 master把间插深度配置为1,就可以兼容AXI4了。

作者:谷公子
首发博客:https://blog.csdn.net/W1Z1Q/article/details/100068720
推荐阅读
关注数
7920
内容数
82
Arm AMBA协议集,APB,AHB,AXI,CHI等相关公开课回放及文章
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息