一、AXI总线概述:从入门到理解

1.1 什么是AXI总线

AXI,全称是Advanced eXtensible Interface。

说白了,它就是ARM公司推出的一种高性能总线协议。用来连接芯片内部的各种模块——CPU、GPU、DDR控制器、PCIe控制器等等。

我刚开始接触AXI时,觉得它挺复杂的。尤其是那五个独立通道,读地址、读数据、写地址、写数据、写响应,光通道握手就够喝一壶的。

但后来我发现,理解AXI的关键就一句话:它是一套约定好的通信规则。主设备怎么发请求,从设备怎么回数据,大家按规矩来,谁也别乱来。

AXI的核心特点:

  • 高性能:支持乱序传输、突发传输
  • 独立通道:读写分离,地址和数据通道分离
  • 灵活性强:可配置数据位宽、突发长度

嗯,这里要注意一点。AXI不是物理连线,它是一套接口规范。你可以在FPGA里实现它,也可以在ASIC里实现它。甚至用离散逻辑搭一个AXI接口,理论上也行——虽然没人这么干。

1.2 AXI的发展历史

ARM的总线协议,其实是一步步演进过来的。我按时间线捋一捋。

APB(Advanced Peripheral Bus)

APB是最简单的。它只有两个状态机:IDLE和SETUP。说白了就是慢速外设用的。我在项目中用APB挂过GPIO、UART、I2C这类低速设备。优点是简单,缺点是性能差——每次传输至少两个时钟周期。

AHB(Advanced High-performance Bus)

AHB比APB快多了。它支持流水线操作、突发传输。我记得第一次用AHB时,被它的split传输搞晕过。后来才明白,那是为了支持从设备延迟响应。

AHB的问题在于:它只有一个总线矩阵。多个主设备同时访问时,需要仲裁。说白了就是排队。这在多核系统里,性能瓶颈很明显。

AXI3

AXI3是革命性的。它引入了五个独立通道,支持乱序传输。为什么能乱序?因为每个事务都有ID标签。主设备发出去的事务,从设备可以不按顺序返回。这在DDR控制器场景下特别有用——读请求可以乱序返回,提高总线利用率。

我在一个项目中用过AXI3,当时遇到一个坑:AXI3的写响应通道是必须的,但有些IP核偷懒没实现,结果系统跑起来数据就错了。嗯,这个后面会细说。

AXI4

AXI4是AXI3的升级版。主要变化有:

  • 去掉了写交织功能(说实话,这个功能很少人用)
  • 增加了AXI4-Stream协议(面向数据流,没有地址)
  • 增加了AXI4-Lite协议(简化版,适合控制寄存器)

我个人习惯,新项目一律用AXI4。AXI3基本只用在老IP核的兼容上。

协议 特点 典型应用
APB 简单、低速、两周期传输 外设寄存器访问
AHB 流水线、突发、单总线矩阵 早期SoC内部互联
AXI3 五通道、乱序、ID标签 多核处理器系统
AXI4 AXI3改进版、支持Stream/Lite 现代SoC、DDR、PCIe

1.3 AXI的应用场景

你想想看,一个现代SoC芯片里,CPU、GPU、NPU、DDR、PCIe、USB、Ethernet……这么多模块,怎么连起来?

答案就是AXI互联网络。

SoC内部互联

这是AXI最核心的应用场景。ARM的CoreLink、Synopsys的DesignWare,都是基于AXI的总线互联IP。

我在一个AI芯片项目中,用AXI互联了四个Cortex-A76核、一个Mali GPU、一个NPU加速器。总线矩阵有8个主端口、12个从端口。调试起来确实头疼,但AXI的灵活性帮了大忙——每个主设备可以配置不同的优先级、不同的QoS等级。

避坑指南:我曾经在AXI互联中忘记配置地址映射表,结果CPU写DDR的数据,莫名其妙写到了PCIe的地址空间里。嗯,从那以后我每次都要检查地址映射表三遍。

DDR控制器

DDR控制器是AXI的典型从设备。为什么?因为DDR的访问模式非常适合AXI的突发传输。

你想想看,CPU读一段连续的内存,发一个AXI突发读请求,地址递增,数据连续返回。DDR控制器内部再转换成对DDR颗粒的行列访问。效率很高。

我记得有一次优化DDR带宽,发现AXI突发长度设置成16时,DDR效率最高。设成4时,带宽直接掉了一半。这就是AXI参数对性能的影响——后面章节会详细讲。

PCIe桥接

PCIe和AXI之间,经常需要桥接。为什么?因为PCIe是面向数据包的,AXI是面向地址的。

一个典型的场景:CPU通过AXI访问PCIe设备。CPU发一个AXI读请求,地址是PCIe设备的BAR空间。桥接逻辑把AXI请求转换成PCIe的TLP包,发出去。PCIe设备返回数据,再转成AXI的读响应。

这个桥接逻辑,我做过两次。第一次没处理好PCIe的完成超时,结果系统死锁了。第二次加了超时重传机制,才稳定下来。

注意:AXI和PCIe的桥接,最容易出问题的地方是地址翻译和事务ID映射。搞不好就会丢数据或者乱序。建议用现成的IP核,别自己手写。

1.4 本章知识体系

下面这张图,是我画的AXI总线知识体系。你可以把它当作整个课程的地图。

AXI总线概述 什么是AXI 高性能总线协议 五独立通道架构 主从设备通信规则 发展历史 APB → AHB → AXI3 → AXI4 APB:低速外设 AHB:高性能总线 AXI3/4:乱序、突发 应用场景 SoC内部互联 DDR控制器 PCIe桥接 核心:理解AXI就是理解一套高性能通信协议 以及它在SoC设计中的关键作用

这张图把本章内容串起来了。左边是AXI的定义,中间是发展脉络,右边是实际应用。你学完这一章,应该能回答三个问题:AXI是什么?它怎么来的?用在哪儿?

我个人觉得,理解AXI最好的方式,就是把它想象成一个快递系统。主设备是寄件人,从设备是收件人,地址是门牌号,数据是包裹。五个通道就是五个快递员——有人专门送地址,有人专门送数据。嗯,这个比喻后面还会用到。

学习建议:刚开始学AXI,别急着看时序图。先把概念搞清楚:通道、事务、突发、乱序。概念通了,时序图自然就懂了。

好了,这一章就到这里。下一章我们开始讲AXI的通道架构和握手协议——那是AXI最核心的部分。


可可精品资料库