总的保序模型(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的多笔读或写操作必须有如下保证:
Interconnect ordering:
为了满足ordering model的需求,interconnect必须确保:
Slave ordering:
为了满足ordering model的需求,slave必须确保:
总的来说,对于slave已经返回响应的任何读写操作,都必须能被后续的读写操作观察到;任何还未返回响应的读或写操作,必须能被后续拥有相同ID的读或写操作观察到;多笔读或写操作在slave节点返回的响应,如果是同ID必须保序返回,如果不是同ID,则可以乱序。
Response before final destination:
当master需要在读和写transactions之间或不同ID transactions之间(这个指的是多笔读有不同ID或多笔写有不同ID)有明确的顺序时,必须等到所有outstanding transactions完成后,master才发送后续相关的依赖transactions。
传输完成(transaction completion)意味着:
为了提升系统性能,一些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之间,中间节点必须确保:
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了。