对尾端的定义,AXI采用了所谓的“byte invariant”方案。可以理解为一种“little endian”方案。因为这种方案对于小端的实现是比较方便的。
所谓“byte invariant”,即字节所在的位置于大小端定义无关。完全按照其地址所对应的偏移来决定其采用哪一个字节通道(byte lane)来传输。换句话说,在AXI中,认为所有的传输都是以byte为单位的,每次传输都是传了多少个byte。因此也就没有尾端的问题了。
而在AHB规范中,对大小端是敏感的。对一个32位的总线,系统认为每次传输都是在传送一个32位字,只不过通过地址可以知道哪些字节通道是有效的。
byte invariant的实现是依靠如下信号来完成的:
AWADDR/AWLEN/AWSIZE
ARADDR/ARLEN/ARSIZE
对一次数据请求,地址会根据SIZE决定对齐。在第一次传输后,对齐问题就解决了。随后的传输就会是按SIZE完成的。一共传输LEN次。因此对byte invariant的实现,要求总路线的接口逻辑根据这些信号来完成。相关计算在4.5节(Burst address)中,有详细描述。对于非对齐传输,在第十章(Unaligned Transfers)有详细描述。
WSTRB[n] 指示了在这次写传输中哪些字节通道是有效的,这是为了所谓的sparse transfer定义的。虽然这个信号会指示出哪些字节通道是有效的,但byte invariant似乎并不依赖于这个信号。