一、AXI互连概述:AXI协议基础、AXI互连结构、AXI通道介绍

各位同学,咱们今天聊聊AXI互连。说实话,这个主题我讲了不下二十遍了,但每次备课还是会翻翻当年的笔记。为什么?因为AXI总线这东西,你理解得越深,做出来的设计就越稳。我见过太多项目,前期对AXI协议一知半解,结果到了集成阶段,各种时序违例、数据错乱,改得人头皮发麻。

好,咱们正式开始。今天这一章,说白了就是打地基。地基不牢,后面盖什么楼都得塌。

1.1 AXI协议基础

AXI,全称是Advanced eXtensible Interface,是ARM公司推出的AMBA总线协议家族中的一员。它属于高性能、高带宽、低延迟的片内总线协议。你想想看,现在的SoC里,CPU、GPU、DSP、NPU,哪个不是吃带宽的大户?AXI就是为这种场景设计的。

我个人习惯把AXI协议的核心特点归纳为三点:

  • 独立通道架构:读地址、读数据、写地址、写数据、写响应,五个通道各走各的,互不干扰。
  • 乱序传输支持:事务可以乱序完成,只要带上ID标签,谁先回来谁先处理。
  • 突发传输:一次地址握手,后面跟一串数据,效率极高。

重要概念:AXI协议是点对点的。也就是说,一个Master只能直接连一个Slave。那多个Master和多个Slave怎么通信?这就需要AXI互连结构来帮忙了。

我记得刚入行那会儿,有个老工程师跟我说过一句话,我一直记到现在:「AXI协议本身不复杂,复杂的是怎么把它用对。」嗯,这句话我现在也送给你们。

1.2 AXI互连结构

AXI互连结构,说白了就是一套路由和仲裁的机制。它负责把多个Master的请求,正确地分发到对应的Slave,再把Slave的响应,正确地送回对应的Master。

常见的AXI互连结构有这几种:

结构类型 特点 适用场景
共享总线 所有Master共享一条总线,仲裁决定谁用 Master数量少,带宽要求不高
交叉开关 每个Master到每个Slave都有独立路径 多Master高并发,如多核处理器
多层互连 分层级联,兼顾性能和面积 大型SoC,需要平衡成本和性能

我曾经在一个AI芯片项目里,用过交叉开关结构。当时有四个DMA Master同时访问DDR,每个Master都要跑到2GB/s的带宽。如果用共享总线,带宽根本不够分。换成交叉开关后,每个Master都能拿到独立的通道,问题迎刃而解。当然,代价是面积大了不少,但性能摆在那里,值了。

下面这张图,是我手绘的AXI互连结构示意图,你们感受一下:

Master 0 Master 1 Master 2 AXI 互连 仲裁 + 路由 地址译码 数据通路 Slave 0 Slave 1 Slave 2 Master 发起请求 互连核心处理 Slave 响应请求

小提示:在设计AXI互连时,地址译码是关键。每个Slave的地址范围必须严格不重叠,否则会出现「多Slave同时响应」的致命错误。我建议你在RTL里加一个地址冲突检测逻辑,哪怕只是仿真时用,也能帮你省下大量调试时间。

1.3 AXI通道介绍

AXI协议有五个独立的通道。为什么是五个?因为读和写是分开的,地址和数据也是分开的。这样做的好处是,读操作和写操作可以完全并行,互不阻塞。

咱们一个一个来看:

1.3.1 读地址通道(AR通道)

Master通过这个通道,告诉Slave:「我要读数据,地址是XXX,长度是YYY。」

关键信号:ARADDR(地址)、ARLEN(突发长度)、ARSIZE(数据宽度)、ARID(事务ID)。

1.3.2 读数据通道(R通道)

Slave通过这个通道,把数据返回给Master。同时还会带上RLAST信号,告诉Master这是最后一个数据。

关键信号:RDATA(数据)、RRESP(响应状态)、RLAST(最后一笔)、RID(事务ID)。

1.3.3 写地址通道(AW通道)

和读地址通道类似,Master告诉Slave:「我要写数据了,地址是XXX。」

1.3.4 写数据通道(W通道)

Master把要写的数据,一笔一笔地发过来。注意,WLAST信号表示这是最后一笔数据。

1.3.5 写响应通道(B通道)

Slave在接收完所有写数据后,通过这个通道返回一个响应,告诉Master:「写完了,一切正常」或者「出错了」。

避坑指南:我曾经在一个项目中,遇到写响应迟迟不返回的问题。查了三天,最后发现是Slave的写数据缓冲没清空,导致B通道一直卡着。从那以后,我设计Slave时,一定会给写响应通道加一个超时计数器。超过一定周期没响应,就主动报错并复位状态机。这个习惯,帮我避免了好几次流片回来的尴尬。

好,咱们用一张表总结一下五个通道:

通道名称 方向 主要信号 作用
AR Master → Slave ARADDR, ARLEN, ARID 发送读请求地址
R Slave → Master RDATA, RRESP, RLAST 返回读数据
AW Master → Slave AWADDR, AWLEN, AWID 发送写请求地址
W Master → Slave WDATA, WSTRB, WLAST 发送写数据
B Slave → Master BRESP, BID 返回写响应

你想想看,五个通道各自独立,每个通道都有自己的握手信号(VALID/READY)。这意味着什么?意味着读操作和写操作可以同时进行,而且地址和数据的传输也可以重叠。这就是AXI高性能的根源所在。

嗯,今天的内容就到这里。记住一句话:AXI互连的核心,就是把多个Master的请求,通过仲裁和路由,正确地分发到对应的Slave。而五个独立通道的设计,保证了这一切可以高效地并行进行。

可可精品资料库