AXI协议之写对齐

张开发
2026/4/18 17:32:10 15 分钟阅读

分享文章

AXI协议之写对齐
AXI 总线协议中的写对齐在 AXI (Advanced eXtensible Interface) 协议中写操作的数据对齐是一个重要的概念它主要涉及地址、数据总线宽度和字节选通信号之间的关系。地址对齐AXI 协议规定传输的起始地址必须对齐到数据总线宽度的边界。例如对于一个数据总线宽度为 32 位 (4 字节) 的 AXI 接口有效地址的最低两位 (ADDR[1:0]) 必须为00(对齐到 4 字节边界)。对于一个数据总线宽度为 64 位 (8 字节) 的接口有效地址的最低三位 (ADDR[2:0]) 必须为000(对齐到 8 字节边界)。这是协议层面的要求。发起写操作的主机 (AWVALID和WVALID的发起者) 必须遵守此规则。数据有效性与字节选通即使起始地址是对齐的一次突发传输 (burst) 内的数据量也可能小于数据总线的宽度或者传输的数据可能不需要覆盖数据总线上的所有字节。字节选通信号WSTRB用于指示数据总线WDATA上哪些字节是有效的、需要写入存储器的。WSTRB的每一位对应WDATA的一个字节。例如在 32 位数据总线上WSTRB是一个 4 位的信号 (WSTRB[3:0])分别对应WDATA[31:24],WDATA[23:16],WDATA[15:8],WDATA[7:0]。在 64 位数据总线上WSTRB是一个 8 位的信号 (WSTRB[7:0])。当WSTRB[n]为1时表示对应的字节WDATA[8n7:8n]是有效的需要写入地址AWADDR n所指向的存储单元。WSTRB为0的字节位置即使WDATA上有数据也不会被写入存储器。写对齐的核心写对齐的核心在于WSTRB信号如何根据地址和数据量来设置。主机 (master) 负责在发起写传输时根据要写入的数据量、起始地址以及数据总线宽度正确设置每个写数据节拍 (beat) 的WSTRB信号。从机 (slave) 负责根据接收到的AWADDR和WSTRB将有效数据字节写入正确的存储器地址。例如在一个 32 位总线上主机想写入一个 16 位的数据到地址0x1000地址0x1000是 4 字节对齐的 (ADDR[1:0]00)。假设数据0x1234需要写入地址0x1000和0x1001(即低两个字节)。主机会在WDATA上放置数据例如0x00001234具体取决于字节序。主机设置WSTRB[1:0] 2b11如果WDATA[7:0]对应地址0x1000WDATA[15:8]对应0x1001而WSTRB[3:2] 2b00表示只有低两个字节有效。非对齐访问的处理虽然协议要求起始地址对齐但软件或用户程序可能请求一个未对齐的地址例如在 32 位总线上写入地址0x10010x1001 是 32 位总线非对齐地址AXI 协议本身不支持非对齐必须由 Master 拆分为两次对齐写入通过 AWSTRB 字节选通信号控制哪些字节有效完成跨地址的非对齐写入。在这种情况下负责发起 AXI 事务的主机 IP如 CPU 的写缓冲区或 DMA 控制器必须将其转换为一个或多个对齐的 AXI 传输。转换方式通常是将未对齐的访问拆分成两个对齐的访问。在第一个传输中写入地址对齐边界以下的有效字节设置对应的WSTRB。在第二个传输中写入地址对齐边界以上的有效字节设置对应的WSTRB。例如在 32 位总线上向0x1001写入 32 位数据第一次传输地址0x1000WSTRB 4b1110写入0x1001、0x1002、0x1003三个字节。第二次传输地址0x1004WSTRB 4b0001写入0x1004字节。注意地址递增到了下一个对齐边界0x1004。这个过程对从机是透明的从机看到的始终是对齐的起始地址和正确的WSTRB。写对齐关键在于协议要求起始地址必须对齐到数据总线宽度的边界 (AWADDR对齐)。数据总线 (WDATA) 上哪些字节有效由字节选通信号WSTRB精确控制。主机负责根据实际要写入的数据和地址正确设置WSTRB。如果用户请求的地址未对齐主机需要将其转换为一个或多个对齐的 AXI 传输并正确设置每个传输的WSTRB。从机根据AWADDR和WSTRB将有效数据字节写入正确的存储位置。理解WSTRB的作用和地址对齐的要求对于正确实现或使用 AXI 接口进行写操作至关重要。一句话总结AXI 从机不处理非对齐必须由主机CPU/DMA把非对齐访问拆成多次对齐访问拆分依靠 AWSTRB 字节选通 实现部分字节写入0x1001 写 32 位 → 拆成 0x1000 0x1004 两次对齐写

更多文章