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

Arm 对齐/未对齐的AXI传输是什么意思,arm,cpu-architecture,Arm,Cpu Architecture,有人能解释对齐和未对齐数据传输之间的区别吗?它不仅限于AXI总线,它是一个通用术语,会影响总线传输并留下不希望的结果(性能影响)。但这在很大程度上取决于整体架构 如果地址以字节为单位,字节可寻址,则字节总是对齐的。假设一个字节是8位,那么如果它位于16位边界上,则16位传输将对齐,这意味着较低的地址位为零。覆盖地址0x1000和0x1001的16位值对齐,并被视为位于地址0x1000(大端或小端)。但覆盖地址0x1001和0x1002的16位值未对齐,它被认为位于地址0x1001。0x1002和

有人能解释对齐和未对齐数据传输之间的区别吗?

它不仅限于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或2的幂加奇偶校验位或ecc(32、33位或40)所有这些都对您隐藏,而不是您可能遇到的性能问题。当你有一个32位宽的内存,如果我把一个32位的值称为一个字,那么这个内存是可字寻址的。地址0x123是字地址,它的等效字节地址是0x123*4或0x48C。如果要将32位值写入字节地址0x48c,则该字节地址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位进行访问。这两条总线和解决方案可以针对每一侧进行优化,缓存作为转换器。

它不仅限于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或2的幂加奇偶校验位或ecc(32、33位或40)所有这些都对您隐藏,而不是您可能遇到的性能问题。当你有一个32位宽的内存,如果我把一个32位的值称为一个字,那么这个内存是可字寻址的。地址0x123是字地址,它的等效字节地址是0x123*4或0x48C。如果要将32位值写入字节地址0x48c,则该字节地址0x48c将变为单个字,并在该内存地址0x123处写入该内存。但是,如果要对字节地址0x48E执行字写入,则需要读取sram/内存中的字地址0x123,以替换正在写入的字中的两个字节。然后写回修改过的单词,然后你必须从单词地址0x124读取,修改两个字节,然后写回修改过的单词

各种公共汽车以各种方式工作。有些人会将单个字放在字大小的总线上,并允许未对齐的地址。32位宽的axi需要将0x48E字写入转换为两个axi传输,一个在字节掩码中启用两个字节通道,另一个在启用其他两个字节通道的情况下进行传输。64位宽的axi总线。让我们看看…10010001110…将需要执行两次axi传输一次