news 2026/5/9 12:11:50

AXI协议之写对齐

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AXI协议之写对齐

AXI 总线协议中的写对齐

在 AXI (Advanced eXtensible Interface) 协议中,写操作的数据对齐是一个重要的概念,它主要涉及地址数据总线宽度字节选通信号之间的关系。

  1. 地址对齐:

    • AXI 协议规定,传输的起始地址必须对齐到数据总线宽度的边界
    • 例如,对于一个数据总线宽度为 32 位 (4 字节) 的 AXI 接口:
      • 有效地址的最低两位 (ADDR[1:0]) 必须为00(对齐到 4 字节边界)。
      • 对于一个数据总线宽度为 64 位 (8 字节) 的接口,有效地址的最低三位 (ADDR[2:0]) 必须为000(对齐到 8 字节边界)。
    • 这是协议层面的要求。发起写操作的主机 (AWVALIDWVALID的发起者) 必须遵守此规则。
  2. 数据有效性与字节选通:

    • 即使起始地址是对齐的,一次突发传输 (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[8n+7:8n]是有效的,需要写入地址AWADDR + n所指向的存储单元。
    • WSTRB0的字节位置,即使WDATA上有数据,也不会被写入存储器。
  3. 写对齐的核心:

    • 写对齐的核心在于WSTRB信号如何根据地址和数据量来设置
    • 主机 (master) 负责在发起写传输时,根据要写入的数据量、起始地址以及数据总线宽度,正确设置每个写数据节拍 (beat) 的WSTRB信号。
    • 从机 (slave) 负责根据接收到的AWADDRWSTRB,将有效数据字节写入正确的存储器地址。
    • 例如,在一个 32 位总线上,主机想写入一个 16 位的数据到地址0x1000
      • 地址0x1000是 4 字节对齐的 (ADDR[1:0]=00)。
      • 假设数据0x1234需要写入地址0x10000x1001(即低两个字节)。
      • 主机会在WDATA上放置数据(例如0x00001234,具体取决于字节序)。
      • 主机设置WSTRB[1:0] = 2'b11(如果WDATA[7:0]对应地址0x1000WDATA[15:8]对应0x1001),而WSTRB[3:2] = 2'b00,表示只有低两个字节有效。
  4. 非对齐访问的处理:

    • 虽然协议要求起始地址对齐,但软件或用户程序可能请求一个未对齐的地址(例如,在 32 位总线上写入地址0x1001);0x1001 是 32 位总线非对齐地址,AXI 协议本身不支持非对齐,必须由 Master 拆分为两次对齐写入,通过 AWSTRB 字节选通信号控制哪些字节有效,完成跨地址的非对齐写入
    • 在这种情况下,负责发起 AXI 事务的主机 IP(如 CPU 的写缓冲区或 DMA 控制器)必须将其转换为一个或多个对齐的 AXI 传输
    • 转换方式通常是:
      • 将未对齐的访问拆分成两个对齐的访问。
      • 在第一个传输中写入地址对齐边界以下的有效字节(设置对应的WSTRB)。
      • 在第二个传输中写入地址对齐边界以上的有效字节(设置对应的WSTRB)。
      • 例如,在 32 位总线上向0x1001写入 32 位数据:
        • 第一次传输:地址0x1000WSTRB = 4'b1110(写入0x1001、0x1002、0x1003三个字节)。
        • 第二次传输:地址0x1004WSTRB = 4'b0001(写入0x1004字节)。注意地址递增到了下一个对齐边界0x1004
    • 这个过程对从机是透明的,从机看到的始终是对齐的起始地址和正确的WSTRB

写对齐关键在于:

  1. 协议要求起始地址必须对齐到数据总线宽度的边界 (AWADDR对齐)。
  2. 数据总线 (WDATA) 上哪些字节有效,由字节选通信号WSTRB精确控制。
  3. 主机负责根据实际要写入的数据和地址,正确设置WSTRB
  4. 如果用户请求的地址未对齐,主机需要将其转换为一个或多个对齐的 AXI 传输并正确设置每个传输的WSTRB
  5. 从机根据AWADDRWSTRB将有效数据字节写入正确的存储位置。

理解WSTRB的作用和地址对齐的要求,对于正确实现或使用 AXI 接口进行写操作至关重要。

一句话总结

  1. AXI 从机不处理非对齐
  2. 必须由主机(CPU/DMA)把非对齐访问拆成多次对齐访问
  3. 拆分依靠 AWSTRB 字节选通 实现部分字节写入
  4. 0x1001 写 32 位 → 拆成 0x1000 + 0x1004 两次对齐写
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 2:58:52

2026-04-09

AI时代程序员生存指南:要么拥抱要么淘汰用AI编程半年了,今天分享一些真实感受。前言 作为一个有年代码经验的程序员,我曾经也是"百度党"和"复制粘贴党"中的一员。但自从用了AI编程辅助工具后,我的开发效率直接…

作者头像 李华
网站建设 2026/4/10 2:57:49

PHP 8.9命名空间增强全场景手册:从单文件脚本到微服务架构,覆盖13类真实项目结构的零错误迁移方案(含GitHub私有仓库迁移模板)

第一章:PHP 8.9命名空间增强的核心机制与语义演进PHP 8.9 引入了命名空间语义的实质性演进,核心在于支持嵌套命名空间声明的隐式解析与跨作用域别名继承。该机制不再要求每个子命名空间都显式使用 use 语句引入父级上下文,而是通过编译器在 A…

作者头像 李华
网站建设 2026/4/10 2:48:36

opencode镜像部署避坑指南:Python调用大模型参数详解

opencode镜像部署避坑指南:Python调用大模型参数详解 1. 项目概述与核心价值 OpenCode是2024年开源的一款AI编程助手框架,采用Go语言编写,主打"终端优先、多模型、隐私安全"的设计理念。它将大语言模型包装成可插拔的Agent&#…

作者头像 李华
网站建设 2026/4/10 2:47:01

3步搞定城通网盘高速下载:ctfileGet直链提取工具完全指南

3步搞定城通网盘高速下载:ctfileGet直链提取工具完全指南 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘的龟速下载而烦恼吗?ctfileGet城通网盘直链提取工具为你…

作者头像 李华