AXI学习记录(5)------AXI事务顺序模型介绍
前言
本文将介绍AXI事务顺序模型相关内容,主要涵盖了顺序模型和乱序模型下事务处理流程。
1 AXI事务标识符介绍
Master可以使用AXI事务标识符来标识必须按顺序返回的单独事务。
对于ID的唯一性:
- 在同一通道内,同一Master发送的不同事务必须使用唯一ID;
- 在不同通道间,同一ID可以跨通道复用,即同一Master的读写通道可以使用同样的ID。
事务排序需要遵守:
- ID相同的连续事务需要按照顺序完成。
- ID唯一的不同事务,可以乱序(顺序就是指必须等前一个事务发送完,才能执行后面事务;乱序就是指发送到较快memory区域的事务,不用等待前一个发送到较慢memory区域事务的完成,就可以提前完成)完成。
使用ID有什么好处?不就是最大化总线利用率吗。
每个事务通道都有自己的ID,5个·事务ID信号如下图所示:
注意:在AXI4中删除了AXI3中有的WID信号(为什么AXI3中要有呢?),写数据只需要依赖AWID就能与写地址通道同步。
2 事务处理顺序介绍
首先介绍几个名词的概念:
- Outstanding:超前传输,也就是主机不用等待前一个事务完成就能发送下一个事务的地址。因为这种功能允许并行处理事务,因此可以提高系统性能。
2.1 事务类型与排序规则
首先介绍一下地址空间,包括Memory空间和外设区域,如下:
- Memory空间:
- 读操作返回最后一次更新的值;
- 写操作更新存储值,且不影响其他位置;
- 原子性粒度(这是什么东西?)由单拷贝原子性大小定义;
- 外设区域:
- 事务必须包含在区域内;
- 访问可能产生副作用(如寄存器触发操作);
- 不支持原子性保证。
对于上面两种地址空间,在不同事务类型中有如下要求:
- Device事务(AxCACHE[1]=0):用于外设或Memory访问,且同一ID的事务按照提交顺序到达;
- Normal事务(AxCACHE[1]=1):用于Memory访问,需要保证对同一存储位置的写入顺序。
对于这两种地址空间,如何确认访问顺序和访问response:
- Memory:写寄存器A事务W1->写寄存器B事务W2,则W1的结果在W2处可见;写地址X事务W1->写地址X事务W2->读地址X事务R1,则R1返回W2的值;写地址X事务W1->读地址X事务R1->读地址X事务R2,则R1和R2返回W1的值。
- 写完成响应:写响应通道中BVALID和BREADY同时有效;同一Master发出的使用相同ID的写请求,返回的响应也按照请求顺序返回。
- 读完成响应:最后一次读数据通道的握手信号RLAST、RVALID和RREADY同时有效。读/写完成响应之后,后续操作都能观察到先前结果。同一Master发出的使用相同ID的读请求,返回的响应也按照请求顺序返回。
2.2 读顺序
对于不支持outstanding或者outstanding=1,Master读的顺序是读地址->读数据->读地址->读数据…重复进行。如果outstanding>1的话,那么读操作是可以一次性发送N个读地址命令,接着等待返回的读数据,返回多少个(<=N)个读数据,Master可以继续发送几个读地址命令。
对于顺序传输模型,读事务中Slave返回的读数据必须按照读事务顺序返回;如果是乱序传输模型的话,那就随意顺序返回即可。对于一次Burst传输,返回数据中间不能插入其他读事务数据,如果允许插入的话,说明支持交错读数据。
2.3 写顺序
对于不支持outstanding或者outstanding=1,向Slave中写操作的顺序是写地址->写数据->等待写响应返回->写地址->写数据->等待写响应返回…重复进行。如果outstanding>1的话,那么写操作是可以一次性发送N个写地址命令,接着等待返回的写响应,返回多少个(<=N)个写响应,Master可以继续向Slave发送几个写地址命令。
大部分Slave都被设计成不支持写数据交错(非乱序写入吧),即Slave必须按照其接收地址的顺序来接收写数据。当然,也会有一些Slave支持写数据交错,即Slave接收到不同的AWID值的写事务时,Master可以向Slave中交错写入数据。
简单总结一下:outstanding是对地址起作用,顺序/乱序是相对于传输事务(例如:Master先向A发送读指令,再向B发送读指令。顺序模型这Master应该先收到A返回的数据,再收到B返回的数据;但是乱序模型可先收到B返回的数据,再收到A返回的数据),交错也是相对于传输事务(例如:Master先向A写数据,再向B写数据。不支持交错则应该A0->A1->B0->B1,如支持交错则可以A0->B0->A1->B1)。
注意:我看了AXI4 Spec A6中描述,并没有描述乱序,交错相关内容(这些内容在AXI3中详细描述),这说明AXI4的重点是顺序模型。
总结
上述文章介绍了AXI事务顺序和乱序模型。总结就是在AXI4中,相同ID的事务,按照顺序处理;不同ID的事务可以乱序处理。在AXI3中,可以进行不同ID之间的写交错处理,但是该种功能容易出错,所以AXI4中被删除了。