| |
【本章问题】不同size的交易在读写总线上的传输;如何利用byte-invariant endianness来处理大小端混合交易。
【关键词】byte lane-字节通道;strobe-选通;beat-拍
每个有主机产生的交易必须拥有与总线相同或窄的数据交易宽度。
有了写选通信号,WSTRB,我们可以在写总线上进行稀疏的数据交易。每个write strobe信号对应于写总线上的一个字节。当其有效时,表明其对应的总线字节上包含了有效信息,需要更新至内存中。
主机必须保证仅仅是包含有效数据的byte lane对应的strobe被置为有效。
layout-grid-align: none;text-autospace:none">当主机产生一个比数据总线窄的交易时,地址和控制信息决定交易使用哪些byte lane。对于地址递增和地址卷回而且每拍数据宽度窄于数据总线的burst 传输,每次数据传输都在总线的不同的字节通道上。地址固定的burst 交易由于地址固定不变,每拍数据传输都使用相同的字节通道。
这个burst传5个数据;起始地址0;8-bit;在32位总线上传递。
这个burst含三个数据;起始地址为4;每次传32位;在64位总线上传递。
AXI协议使用byte-invariant endian机制来访问内存中的大小端混合的数据结构。
Byte-invariant endianness指放到相同的总线字节上的8-bit数据将被写到相同的地址。
仅有1个交易宽度的组件必须将其byte lanes连接至对应的总线byte lane上。支持多个交易宽度的组件可能需要一个复杂的接口来转换非自然的byte-invariant。
多数的小端组件能直接连至byte-invariant接口。仅支持大端交易的组件需要一个转换公式来进行byte-invariant操作。
一个需要byte-invariant访问的数据结构的例子。可能头信息是小端格式,但载荷是大端的。