对齐/不对齐的AXI传输是什么意思

时间:2019-05-07 05:37:59

标签: arm cpu-architecture

谁能解释对齐和不对齐的数据传输之间的区别

1 个答案:

答案 0 :(得分:1)

它不仅限于AXI总线,它是一个通用术语,会影响总线传输并留下不希望的结果(性能下降)。但这在很大程度上取决于整体架构。

如果地址以字节为单位,可字节寻址,则字节始终对齐。假设一个字节为8位,则如果它在16位边界上,则将对齐16位传输,这意味着低位地址位为零。覆盖地址0x1000和0x1001的16位值已对齐,并被视为位于地址0x1000(大端或小端)。但是覆盖地址0x1001和0x1002的16位值未对齐,被认为是地址0x1001。 0x1002和0x1003将对齐。 32位值的两个低地址位需要为零才能对齐。将0x1000处的32位值对齐,但0x1001、0x1002、0x1003都将不对齐。

从接口的角度以及几何形状来看,内存通常不宽8位,这取决于哪种类型的内存或存储在何处。分阶段传输到慢速dram的处理器中的高速缓存很可能为32或64或更宽,具有2的幂或具有奇偶校验位或ecc(32、33位或40)的所有2的幂对您而言是隐藏的,而不是您可能遇到的性能问题。当您有一个32位宽的存储器,并且如果我将一个32位值称为一个字,则该存储器是可字寻址的,地址0x123是一个字地址,其等效字节地址为0x123 * 4或0x48C。如果要向字节地址0x48c写入32位值,该值将成为一个字,则在该存储器地址0x123处写入该存储器。但是,如果要对字节地址0x48E进行字写入,则需要读取字地址0x123,因为该sram / memory会替换要写入的字中的两个字节。然后将修改后的字写回去,那么您将不得不从字地址0x124读取,修改两个字节并写回修改后的字。

各种公共汽车以各种方式工作。有些会将单个字放在字长的总线上,并允许不对齐的地址。一个32位宽的轴将需要将0x48E字写入分为两个轴传输,一个在字节掩码中启用了两个字节通道,而第二个传输则启用了其他两个字节通道。 64位宽的AXI总线。让我们看看.... 10010001110 ...需要进行两次轴传输,一次传输使用16位数据,而第二次传输使用其他16位数据,因为这32位在哪里。但是地址0x1001上的字传输将/应该是在启用了中间四个字节通道的64位axi总线上的单次传输。

其他总线方案的工作方式如下,有些不使32位的东西适合32或64位总线,但是另一端的内存控制器必须执行多个事务才能缓存或创建多个事务。下一班车。

尽管就某些标准部件和总线而言,在技术上可以将地址dram字节化,但高速缓存为您带来的另一件事是,较小且未对齐的事务可以达到更快的sram,但是高速缓存行的读取和逐出可以针对下一条总线或外部存储器进行了优化,因此例如对于我们使用的大多数系统,dram始终可以以台式机和服务器的总线宽度(64或64 + ecc)的倍数对齐,而对于嵌入式系统则可以以32或16位的倍数对齐,笔记本电脑,电话。缓存是翻译器,因此可以针对每一端优化两个总线和解决方案。