【问题标题】:How are bytes mapped to AXI4 bus on a little endian system字节如何映射到小端系统上的 AXI4 总线
【发布时间】:2015-11-13 19:31:29
【问题描述】:

如果在小端处理器上运行的程序将值 0xaabbccdd 写入地址 0,并且处理器使用 32 位宽的 AXI4 总线,那么 WDATA 的 31-24 位是 0xaa 还是 0xdd?

AXI 不公开字节可寻址存储器——它只能读取或写入完整的数据总线宽度(在本例中为 32 位)。问题是它如何将字节值的地址映射到数据总线位。

AXI spec (rev E) 的 A3.4.3 节讨论了“字节不变”字节序,但似乎没有解释数据总线上的字节顺序。

【问题讨论】:

    标签: hardware endianness cpu-architecture amba


    【解决方案1】:

    如果小端处理器通过 32 位宽的 AXI4 总线将值 0xaabbccdd uncached 写入地址 0,WDATA 的位 31-24 是 0xaa 还是 0xdd?

    WDATA 的 31-24 位为 0xAA,与处理器字节序无关。但是内存中字节的顺序是由字节序决定的。有关字节不变字节序的解释,请参见 this answer

    【讨论】:

    • 从链接的答案中,您所描述的听起来更像是数据不变性:具体来说,“数据是一个 32 位字,其值始终为 0xddccbbaa,与字节顺序无关。”对于地址不变性,该答案意味着字节可寻址内存,但这里不是这种情况。似乎两种映射(31-24 或 7-0)都与那里给出的定义兼容。
    • 好吧,链接的答案可能有点误导,因为我们是从内存的角度考虑示例,而我们是在 AXI 总线端。 AXI 确实支持窄传输,您可以通过掩码传输 0xXXXX1122 覆盖地址 0(AXI 地址空间)处值为 0x1122 的两个字节,并获得 0xAABB1122(内存中的地址 0,1,2,3,大端)或 0x2211BBAA(小-字节序)。读取地址 3(AXI 地址空间)的字节将始终返回 0xAA (0xAAXXXXXX)。
    • 我在大端机器上写0xaabbccdd在0,读字节地址3,应该是0xdd。在小端机器上,它应该是 0xaa。在这种情况下,您的第一个答案是 31-24 对于 32 位写入始终为 0xaa,而第二个评论认为读取字节地址 3 将始终返回 0xaa 似乎不兼容:对于大端机器来说,它会被破坏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 2019-03-02
    • 1970-01-01
    相关资源
    最近更新 更多