一、AXI总线概述

1.1 AXI总线的发展历史

AXI总线,全称是Advanced eXtensible Interface。它来自ARM公司。嗯,说到这个,我得先聊聊它的“家谱”。

最早的时候,ARM搞了个AMBA总线协议。AMBA 2.0时代,大家用的都是AHB和APB。AHB速度快,APB功耗低,配合得挺好。但到了2003年左右,芯片复杂度上来了,AHB开始有点吃力了。

为什么?因为AHB是单通道的。你想想看,读和写走同一条路,就像一条单车道公路,双向会车时就得等。这在当时的多媒体芯片里,瓶颈特别明显。

于是ARM在2003年推出了AMBA 3.0,其中最重要的就是AXI3。AXI3把读地址、读数据、写地址、写数据、写响应分成了五个独立的通道。说白了,就是把单车道变成了五车道并行。这个设计思路,我个人觉得非常漂亮。

到了2010年,ARM又发布了AMBA 4.0,带来了AXI4。AXI4在AXI3的基础上做了不少优化。我记得当时我刚接触AXI4时,第一反应是:“嗯,终于把突发长度的限制去掉了。”

再往后,还有AXI4-Lite和AXI4-Stream。前者是轻量版,适合配置寄存器;后者是流式接口,适合视频、音频这种数据流。不过这些咱们后面章节再细聊。

1.2 AXI协议在SoC设计中的地位

现在做SoC,几乎绕不开AXI。为什么?我给你说几个原因。

第一,它是事实上的标准。 不管是ARM自家的CPU、GPU,还是第三方IP,比如DDR控制器、PCIe控制器、以太网MAC,绝大多数都支持AXI接口。你设计一个SoC,总得把这些IP连起来吧?AXI就是那个“通用语言”。

第二,它性能高。 五通道并行、乱序传输、outstanding传输……这些特性让AXI能跑出很高的带宽。我在项目中遇到过,用AHB连DDR控制器,带宽死活上不去。换成AXI后,吞吐量直接翻倍。这不是夸张,是真的。

第三,它灵活。 AXI支持不同的数据宽度、不同的时钟域、不同的拓扑结构。你可以做点对点连接,也可以做共享总线,还可以做交叉开关(Crossbar)。甚至可以做网络片上网(NoC)。

说白了,AXI就是SoC的“高速公路网”。CPU是跑车,DMA是卡车,外设是小轿车。没有好的路网,再好的车也跑不起来。

核心观点: AXI协议是当代SoC设计的基石。不懂AXI,就很难做好高性能芯片设计。

1.3 AXI4与AXI3的主要区别

很多初学者会问:“AXI4和AXI3到底差在哪?”我直接给你列个表,一目了然。

特性 AXI3 AXI4
突发长度 1~16次传输 1~256次传输(INCR模式)
写响应通道 必须使用 必须使用(与AXI3相同)
窄传输(Narrow Transfer) 支持 支持(与AXI3相同)
非对齐传输 支持 支持(与AXI3相同)
写交错(Write Interleaving) 支持 不支持(被移除)
读ID支持 支持 支持(与AXI3相同)
原子操作 支持(独占访问) 支持(独占访问 + 锁定访问)
QoS信号 无 新增ARQOS/AWQOS
区域信号 无 新增ARREGION/AWREGION

我来挑几个重点说说。

第一个,突发长度。 AXI3最多只能发16笔。这在DDR控制器这种场景下,效率不够。AXI4把上限提到了256笔。你想想看,一次发256个数据,中间不用重新仲裁,带宽利用率能高多少?

第二个,写交错被移除了。 这个我得多说两句。写交错允许不同ID的写数据乱序到达。听起来很美好,但实际实现起来特别复杂。我在一个项目中吃过这个亏——从机不支持写交错,主机却发了交错数据,结果数据全乱了。AXI4干脆把这个特性去掉了,简化了设计。我个人觉得这是个明智的决定。

第三个,新增了QoS信号。 这个在复杂SoC里特别有用。比如CPU要读数据,GPU也要读数据。CPU对延迟敏感,GPU对带宽敏感。通过QoS信号,你可以告诉互连结构:“CPU的请求优先级更高,先处理它。”我在做车载芯片时,就靠这个信号保证了实时任务的响应时间。

避坑指南: 我曾经遇到一个坑——AXI3的从机接到AXI4的主机上。主机发了超过16笔的突发,从机直接罢工了。所以做IP集成时,一定要确认好突发长度的上限。建议在互连结构里加一个长度检查逻辑,超过上限就自动拆分。

1.4 AXI协议的核心架构图

下面我用一张SVG图,把AXI的五个通道和它们之间的关系画出来。这张图我建议你多看几遍,理解了它,AXI协议就掌握了一半。

AXI总线五通道架构图 Master Slave 写地址通道 (AW) 写数据通道 (W) 写响应通道 (B) 读地址通道 (AR) 读数据通道 (R) 图例说明 主机→从机(地址/数据) 从机→主机(响应/数据) 注:五个通道相互独立,支持乱序传输和outstanding操作

这张图里,蓝色箭头表示主机发给从机的信号,橙色箭头表示从机返回给主机的信号。写操作需要三个通道(AW、W、B),读操作需要两个通道(AR、R)。

你可能会问:“为什么写操作多一个响应通道?”因为写操作需要从机确认数据是否成功写入。读操作的数据通道本身就包含了响应信息,所以不需要单独的响应通道。

注意: 五个通道之间没有固定的时序关系。比如,主机可以先发写地址,再发写数据;也可以先发写数据,再发写地址。只要保证写数据在写响应之前到达就行。这个灵活性是AXI的一大优势,但也增加了验证的复杂度。

1.5 小结

这一章我们聊了AXI的来龙去脉、它在SoC里的地位,以及AXI4和AXI3的关键区别。说白了,AXI4就是AXI3的“增强版”,去掉了不实用的特性,增加了对高性能场景的支持。

我个人觉得,学AXI协议最好的方法就是“动手”。找个开源的AXI互连结构代码,跑一遍仿真,看看波形。你会发现,很多概念一下子就通了。

好了,这一章就到这里。记住这张五通道架构图,它是后面所有内容的基础。

一句话总结: AXI4是当前SoC设计的主流选择,理解它的五通道架构和与AXI3的差异,是入门的第一步。

可可精品资料库