一、AXI总线概述:协议族与SoC核心地位
大家好,我是老李。做芯片设计十几年,跟各种总线打过交道。今天咱们聊聊AXI总线。
说实话,AXI协议是我见过最优雅的片上总线之一。它不复杂,但很强大。我刚开始接触时也觉得头大,后来发现,只要抓住几个核心思想,一切都顺了。
1.1 AXI协议族:三兄弟的故事
AXI协议族有三个成员:AXI4、AXI4-Lite、AXI4-Stream。它们各有各的脾气。
| 协议版本 | 特点 | 典型应用 |
|---|---|---|
| AXI4 | 完整版,支持突发传输、乱序传输 | 高性能主存、DMA、GPU |
| AXI4-Lite | 轻量版,不支持突发,一次只传一个数据 | 寄存器配置、控制状态寄存器 |
| AXI4-Stream | 流式版,没有地址,只有数据流 | 视频流、音频流、数据通路 |
AXI4 是大哥。它支持突发传输,一次地址请求可以传多个数据。我做过一个DDR控制器,用AXI4接口,突发长度设成16,带宽利用率直接拉满。
AXI4-Lite 是小弟。它简单,一次只传一个数据。我习惯用它来做寄存器配置。为什么?因为配置寄存器不需要高带宽,但需要简单可靠。你想想看,如果配置寄存器也用AXI4,那地址通道的握手逻辑就复杂多了,没必要。
AXI4-Stream 是二哥。它没有地址通道,只有数据通道。说白了,就是一根管子,数据从一头流进去,从另一头流出来。我在项目中遇到过视频处理模块,输入输出都是Stream接口,配合FIFO,数据流处理非常顺畅。
核心要点: 选对协议版本,比什么都重要。用AXI4-Lite做配置,用AXI4做数据搬运,用Stream做流式处理。别混着用。
1.2 AXI在SoC设计中的核心地位
为什么说AXI是SoC的核心?
嗯,这里要注意。SoC说白了就是把CPU、内存、外设这些IP核连在一起。用什么连?总线。而AXI就是目前最主流的总线标准。
我举个例子。你做一个AI芯片,里面有CPU、NPU、DDR控制器、PCIe控制器。这些模块之间怎么通信?
- CPU要读DDR里的数据
- NPU要把计算结果写回DDR
- PCIe要把外部数据搬进DDR
所有这些操作,都通过AXI总线完成。没有AXI,这些模块就是孤岛。
我个人习惯,在设计SoC时,先把AXI互联结构画出来。哪个master连哪个slave,带宽够不够,延迟能不能接受。这些想清楚了,后面的设计就顺了。
个人经验: 我曾经在一个项目中,因为AXI互联结构没设计好,导致CPU读DDR的延迟太大,系统跑不起来。后来加了AXI Interconnect的寄存器切片,才解决问题。所以,互联结构一定要提前规划。
1.3 AXI协议的核心思想
AXI协议有几个核心思想,理解了它们,你就掌握了AXI的精髓。
- 通道分离:读地址、读数据、写地址、写数据、写响应,五个通道独立。这允许了乱序传输。
- 握手机制:VALID/READY握手,简单可靠。发送方拉高VALID,接收方拉高READY,一拍完成传输。
- 突发传输:一次地址请求,多个数据传输。减少了地址通道的占用。
- 乱序传输:不同ID的事务可以乱序完成。提高了总线利用率。
你想想看,如果没有通道分离,读和写就得排队。如果没有突发传输,每个数据都要带地址。那效率得多低?
避坑指南: 我曾经在写AXI slave时,忘记处理WLAST信号。结果master发了一个突发写,slave不知道什么时候结束,一直等。最后超时了。所以,WLAST和RLAST这两个信号,一定要正确处理。
1.4 AXI协议族知识体系
下面这张图,是我自己总结的AXI协议族知识体系。你看一眼,就能知道整个协议族的结构。
这张图把AXI协议族的结构讲清楚了。三兄弟各有特点,但共享核心特性。在SoC中,它们通过AXI互联结构连接在一起。
1.5 一个简单的AXI4写事务示例
光说不练假把式。咱们看一个AXI4写事务的时序。
// AXI4 写事务示例
// 地址通道
AWVALID = 1;
AWREADY = 1;
AWADDR = 0x1000;
AWLEN = 3; // 突发长度4
// 数据通道
WVALID = 1;
WREADY = 1;
WDATA = {d0, d1, d2, d3};
WLAST = 1; // 最后一个数据
// 响应通道
BVALID = 1;
BREADY = 1;
BRESP = OKAY;
这个例子很简单。master发起写地址请求,slave接收。然后master连续发送4个数据,最后一个数据带WLAST信号。slave接收完后,返回写响应。
嗯,这里要注意。WLAST信号一定要在最后一个数据时拉高。我见过有人忘了拉高,结果slave一直等,系统卡死。
小技巧: 我习惯在写RTL时,用AXI VIP来做验证。VIP会自动检查协议规范,比如WLAST是否正确、地址对齐等。省心不少。
1.6 总结
AXI协议族是SoC设计的基石。AXI4用于高性能数据搬运,AXI4-Lite用于寄存器配置,AXI4-Stream用于流式数据处理。理解它们的区别和适用场景,是进阶的第一步。
我个人觉得,学AXI最好的方法就是动手。找个开源项目,看看AXI接口是怎么写的。或者自己写一个简单的AXI slave,跑仿真看看波形。实践出真知。
好了,这一章就到这里。下一章我们深入AXI4的通道结构,看看每个通道的信号和时序。