一、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的精髓。

  1. 通道分离:读地址、读数据、写地址、写数据、写响应,五个通道独立。这允许了乱序传输。
  2. 握手机制:VALID/READY握手,简单可靠。发送方拉高VALID,接收方拉高READY,一拍完成传输。
  3. 突发传输:一次地址请求,多个数据传输。减少了地址通道的占用。
  4. 乱序传输:不同ID的事务可以乱序完成。提高了总线利用率。

你想想看,如果没有通道分离,读和写就得排队。如果没有突发传输,每个数据都要带地址。那效率得多低?

避坑指南: 我曾经在写AXI slave时,忘记处理WLAST信号。结果master发了一个突发写,slave不知道什么时候结束,一直等。最后超时了。所以,WLAST和RLAST这两个信号,一定要正确处理。

1.4 AXI协议族知识体系

下面这张图,是我自己总结的AXI协议族知识体系。你看一眼,就能知道整个协议族的结构。

AXI协议族知识体系 AXI4 完整版 · 突发传输 · 乱序 AXI4-Lite 轻量版 · 单次传输 · 配置 AXI4-Stream 流式版 · 无地址 · 数据流 核心特性 通道分离 握手机制 突发传输 乱序传输 SoC核心地位 CPU ↔ AXI互联 ↔ DDR控制器 · PCIe · 外设 典型应用场景 DDR控制器 DMA引擎 视频处理 网络加速

这张图把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的通道结构,看看每个通道的信号和时序。

可可精品资料库