对齐/未对齐 AXI 传输是什么意思

问题描述 投票:0回答:1

任何人都可以解释对齐和未对齐数据传输之间的区别吗

arm cpu-architecture
1个回答
3
投票

不限于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 的 2 的幂(32、33 位或 40)所有这些除了您可能遇到的性能影响之外,其他信息对您来说是隐藏的。 当您有一个 32 位宽的内存时,如果我将 32 位值称为字,那么该内存是可字寻址的,地址 0x123 是字地址,其等效字节地址是 0x123*4 或 0x48C。 如果要将 32 位值写入字节地址 0x48c,该值将成为单个字写入该内存的内存地址 0x123。 但是,如果您要对字节地址 0x48E 进行字写入,则需要在 sram/内存中读取字地址 0x123,替换您正在写入的字中的两个字节。 并将修改后的字写回,然后您必须从字地址 0x124 读取,修改两个字节并将修改后的字写回。

不同的公交车有不同的工作方式。 有些会将单个字放在字大小的总线上并允许未对齐的地址。 32 位宽 axi 需要将 0x48E 字写入转换为两个 axi 传输,其中一个传输在字节掩码中启用了两个字节通道,第二个传输则启用了其他两个字节通道。 64 位宽的 axi 总线;让我们看看.... 10010001110... 需要进行两次 axi 传输,一次传输 16 位数据,第二次传输其他 16 位数据,因为 32 位的位置。 但是地址 0x1001 处的字传输将/应该是 64 位 axi 总线上的单个传输,并且启用了中间的四个字节通道。

其他总线方案是这样工作的,有些不会,有些会让 32 位的东西适合 32 或 64 位总线,但另一端的内存控制器必须执行多个事务来缓存或在总线上创建多个事务下一趟巴士。

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

© www.soinside.com 2019 - 2024. All rights reserved.