一、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是什么?它怎么来的?用在哪儿?
我个人觉得,理解AXI最好的方式,就是把它想象成一个快递系统。主设备是寄件人,从设备是收件人,地址是门牌号,数据是包裹。五个通道就是五个快递员——有人专门送地址,有人专门送数据。嗯,这个比喻后面还会用到。
学习建议:刚开始学AXI,别急着看时序图。先把概念搞清楚:通道、事务、突发、乱序。概念通了,时序图自然就懂了。
好了,这一章就到这里。下一章我们开始讲AXI的通道架构和握手协议——那是AXI最核心的部分。
可可精品资料库