一、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互连结构示意图,你们感受一下:
小提示:在设计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。而五个独立通道的设计,保证了这一切可以高效地并行进行。
可可精品资料库