一、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协议就掌握了一半。
这张图里,蓝色箭头表示主机发给从机的信号,橙色箭头表示从机返回给主机的信号。写操作需要三个通道(AW、W、B),读操作需要两个通道(AR、R)。
你可能会问:“为什么写操作多一个响应通道?”因为写操作需要从机确认数据是否成功写入。读操作的数据通道本身就包含了响应信息,所以不需要单独的响应通道。
注意: 五个通道之间没有固定的时序关系。比如,主机可以先发写地址,再发写数据;也可以先发写数据,再发写地址。只要保证写数据在写响应之前到达就行。这个灵活性是AXI的一大优势,但也增加了验证的复杂度。
1.5 小结
这一章我们聊了AXI的来龙去脉、它在SoC里的地位,以及AXI4和AXI3的关键区别。说白了,AXI4就是AXI3的“增强版”,去掉了不实用的特性,增加了对高性能场景的支持。
我个人觉得,学AXI协议最好的方法就是“动手”。找个开源的AXI互连结构代码,跑一遍仿真,看看波形。你会发现,很多概念一下子就通了。
好了,这一章就到这里。记住这张五通道架构图,它是后面所有内容的基础。
一句话总结: AXI4是当前SoC设计的主流选择,理解它的五通道架构和与AXI3的差异,是入门的第一步。
可可精品资料库