1. AXI事务标识符
AXI协议包括AXI ID事务标识符。master可以使用这些标识符来识别必须按顺序返回的独立事务。
所有具有给定AXI ID值的事务必须保持有序,但对于不同ID值的事务则没有排序限制。这意味着一个物理端口可以通过充当多个逻辑端口来支持无序事务,每个逻辑端口都按顺序处理其事务。
通过使用AXI ID,master可以在不等待早期事务完成的情况下发出事务。这可以提高系统性能,因为它允许事务的并行处理。
注意
没有要求slave或master必须使用AXI事务ID。maser和slave可以一次处理一个事务,这意味着事务是按照它们被发出的顺序进行处理的。
slave需要在适当的BID(响应ID)或RID(读取ID)响应中反映从master接收到的AXI ID。
2. 事务ID
每个事务通道都有自己的事务ID。表格A5-1显示了这些指定的信号。
事务通道 | 事务ID |
---|---|
写地址通道 | AWID |
写数据通道(仅限AXI3) | WIDA |
写响应通道 | BID |
读地址通道 | ARID |
读数据通道 | RID |
a. WID信号仅在AXI3中实现。
注意 AXI4协议支持基于AXI ID事务标识符的扩展排序模型。
3. 事务排序
master可以使用AWID(写地址ID)和ARID(读地址ID)事务ID来指示其排序要求。事务排序的规则如下:
- 不同master之间的事务没有排序限制。它们可以以任何顺序完成。
- 来自同一master,但具有不同ID值的事务没有排序限制。它们可以以任何顺序完成。
- 对于具有相同ARID值的一系列读事务,必须按照master发出地址的顺序返回数据传输。
- 对于具有相同AWID值的一系列写事务,必须按照master发出地址的顺序完成数据传输。
- 使用相同值的AWID和ARID读写事务之间没有排序限制。
- 第A5-82页的“互连使用事务标识符”描述了AXI总线如何扩展由AXI master和slave发出的事务ID值。
3.1 读排序
在master接口处,具有相同ARID(读地址ID)值的事务返回的读数据必须按照master发出地址的顺序到达。具有不同ARID值的读事务数据可以以任何顺序到达,不同ARID值的事务的读数据可以交错到达。
slave必须按照接收到地址的顺序返回具有相同ARID值的一系列事务的读数据。在一系列具有不同ARID值的读事务中,slave可以以任何顺序返回读数据,而不管事务到达的顺序如何。
slave必须确保任何返回数据的RID(读数据ID)值与它响应的地址的ARID值相匹配。
互连必须确保针对不同slave的一系列具有相同ARID值的事务的读数据,按照master发出地址的顺序被master接收。
读数据重排序深度是在slave中可以重新排序的待处理地址的数量。按顺序处理所有事务的slave具有一个读数据重排序深度为一。读数据重排序深度是一个静态值,必须由slave的设计者指定。
注意 没有机制让master可以确定slave的读数据重排序深度。
3.2 正常写排序
除非master知道slave支持写数据交错,否则它必须按照发出事务地址的相同顺序发出写事务的数据。
注意
- 没有机制让master可以确定从设备是否支持写数据交错。在AXI4中,不支持写数据交错。
- 大多数slave设计不支持写数据交错,因此必须按照接收地址的顺序接收写数据。
如果互连将来自不同master的写事务组合到一个slave,它必须确保按地址顺序转发写数据。
3.3 AXI3写数据交错
警告 AXI4去除了对写数据交错的支持。在AXI4中,一个事务的所有写数据必须在写数据通道上连续传输。
使用写数据交错时,slave接口可以接受具有不同AWID(写地址ID)值的交错写数据。写数据交错深度是从一个slave可以接受交错数据的地址数量。
当访问支持写数据交错的slave时,使用相同AWID的不同事务的写数据不能交错。
注意 没有机制可以让master或任何其他AXI组件确定slave是否支持写数据交错。同样,也没有机制可以确定slave的写数据交错深度。
对于支持写数据交错的slave,它接收每个事务的第一个数据项的顺序必须与它接收事务地址的顺序相同。
注意 如果两个具有不同AWID值的写事务访问相同或重叠的地址,那么AXI3规范没有定义这些访问的处理顺序,必须有一个更高级别的协议确保事务处理的正确顺序。
使用单一AWID值生成写数据的master接口会按照它发出写地址的顺序生成所有写数据。然而,如果slave接口的写数据交错深度大于一,master接口可以交错具有不同WID(写数据ID)值的写数据。
为了避免可能的死锁,支持写数据交错的slave接口必须连续接受交错的写数据。它绝不能为了改变写数据的顺序而暂停接受写数据。
写数据交错的使用模型
写数据交错可以防止互连将多个写数据流合并到同一个slave时发生阻塞。例如,互连可能会将来自慢速源的写数据流与来自快速源的另一个写数据流合并。通过交错这两个写数据流,互连可以提高系统性能。
对于大多数可以控制写数据生成的master,写数据交错并不是必需的。这样的master可以按照它生成地址的顺序生成写数据。然而,一个正在从不同速度的不同源传输写数据的master接口可能会交错这些源,以最大限度地利用互连。
3.4 读写交互
AXI协议对读写事务之间没有排序限制。它们可以以任何顺序完成,即使读事务的ARID(读地址ID)值与写事务的AWID(写地址ID)值相同。
如果master需要在读写事务之间建立特定的关系,那么它必须确保在发出后续事务之前,早期的事务已经完成。master只能在以下情况下认为早期事务已经完成:
- 对于读事务,接收到最后的读数据。
- 对于写事务,接收到写响应。
发送完事务的所有写数据不应被视为该事务完成的指示。
注意 通常,在写入外设时,master必须等待早期事务完成后才能在必须有序的读写事务之间切换。
对于内存的读写,master可能会实现对未完成事务的地址检查,以确定新事务是否可能针对相同或重叠的内存地址。如果读写事务不重叠,那么master可以在不等待早期事务完成的情况下启动新事务。
3.5 互连使用事务标识符
当master连接到互连时,互连会向ARID、AWID和WID(写数据ID)标识符添加对该master端口唯一的附加位。这有两个作用:
- master不需要知道其他master使用的ID值,因为互连通过在原始标识符后附加master编号,使每个master使用的ID值唯一。
- 在slave接口处的ID标识符宽度比在master口处的ID标识符宽度大。
对于读数据,互连使用RID(读数据ID)标识符的附加位来确定读数据是针对哪个master端口的。互连在将RID值传递给正确的master端口之前,会移除这些附加位。
对于写响应,互连使用BID(写响应ID)标识符的附加位来确定写响应是针对哪个master端口的。互连在将BID值传递给正确的master端口之前,会移除这些附加位。
3.6 事务ID字段的宽度
事务ID字段的宽度是硬件设计定义的。然而,本规范推荐以下事务ID字段宽度:
- 对于master组件,实现多达四个字节的事务ID字段。
- 对于互连中的master端口号,实现多达四个字节的事务ID字段的附加位。
- 对于slave组件,实现支持八个字节的事务ID字段。
对于只支持单个有序接口的master,将事务ID字段输出绑定到一个恒定值是可以接受的,例如绑定到零。
对于不使用排序信息并且按顺序处理所有事务的slave,可以在不改变slave的基本功能的情况下添加事务ID功能。
4. 去除写交错支持
如前所述,在AXI4协议中去除了对写数据交错的支持。在AXI4中,一个事务的所有写数据必须在写数据通道上连续传输。 这意味着WID(写数据ID)在AXI4中不被支持。
4.1 去除WID
去除写交错使得WID信号上传递的信息变得多余,所有写数据必须与相关的写地址顺序相同。 为了减少接口的引脚数量,AXI4去除了WID信号。
4.2 遗留问题考虑
大多数AXI3 master不支持写交错,并且不需要更新以满足AXI4对无写交错的要求。
任何支持写交错的AXI3主设备必须已经支持一种方法来配置写交错深度,将其设置为1,以支持与不支持写交错的slave的操作。 任何此类AXI3 master必须将其写交错深度配置为1,以与AXI4兼容。 任何AXI3 slave都可以接受非交错的写数据,因此对于AXI3 slave没有遗留问题考虑。
注意 任何需要WID信号的AXI3组件都可以从AWID(写地址ID)值生成此信号。