1. AXI总线基础:AXI4、AXI4-Lite、AXI4-Stream协议概述,信号定义与握手过程

大家好,我是你们的芯片验证工程师老K。今天咱们来聊聊AXI总线的基础知识。说实话,这玩意儿在芯片设计里太常见了,几乎每个SoC项目都离不开它。我刚开始接触AXI的时候,也被那一堆信号线搞得头大。但别担心,咱们一步步来,把这三个协议掰开揉碎了讲清楚。

1.1 为什么要有AXI总线?

先说说背景。ARM公司搞了个AMBA总线协议,AXI就是其中的高端版本。说白了,它就是一套规则,让芯片里的各个模块能高效地交换数据。你想想看,CPU、DMA、内存、外设,这些模块要协同工作,总得有个统一的沟通方式吧?AXI就是干这个的。

AXI家族有三个兄弟:AXI4、AXI4-Lite和AXI4-Stream。它们各有各的脾气,适用场景也不一样。我在项目中遇到过不少工程师把这三个搞混,结果设计出来的接口要么性能不够,要么资源浪费。嗯,这里要注意,选对协议很重要。

1.2 AXI4:高性能的“大哥”

AXI4是功能最全、性能最高的一个。它支持突发传输,一次握手就能传多个数据。我习惯把它比作“快递货车”——一次装货,多次送货,效率很高。

信号定义

AXI4有五个独立的通道,每个通道都有自己的握手信号。我列个表,大家看得更清楚:

通道名称 方向 主要信号 作用
写地址通道 主机→从机 AWADDR, AWVALID, AWREADY 发送写操作的起始地址
写数据通道 主机→从机 WDATA, WSTRB, WVALID, WREADY 发送要写入的数据
写响应通道 从机→主机 BRESP, BVALID, BREADY 返回写操作的状态
读地址通道 主机→从机 ARADDR, ARVALID, ARREADY 发送读操作的起始地址
读数据通道 从机→主机 RDATA, RRESP, RVALID, RREADY 返回读取的数据

每个通道都有VALID和READY信号,这就是握手的核心。VALID表示发送方数据有效,READY表示接收方准备好了。两者同时为高,数据就传过去了。

握手过程

握手过程其实很简单。我举个例子,写操作:

// 写地址握手
if (AWVALID && AWREADY) begin
    // 地址被成功接收
end

// 写数据握手
if (WVALID && WREADY) begin
    // 数据被成功接收
end

// 写响应握手
if (BVALID && BREADY) begin
    // 响应被成功接收
end

这里有个坑,我曾经踩过。VALID信号一旦拉高,就不能再变,直到握手成功。READY信号可以提前拉高,也可以等VALID来了再拉。我个人习惯让从机的READY在复位后默认拉高,这样主机发数据时不用等,延迟小一些。

重要提示:AXI4支持乱序传输。每个事务都有一个ID标签,从机可以根据ID返回数据。这个特性在DMA传输中特别有用,能显著提高总线利用率。

1.3 AXI4-Lite:轻量级的“小弟”

AXI4-Lite是AXI4的简化版。它不支持突发传输,一次只能传一个数据。说白了,就是“快递自行车”——一次只能送一件货,但胜在简单轻便。

AXI4-Lite的信号和AXI4基本一样,只是去掉了突发相关的信号,比如AWLEN、AWSIZE这些。地址宽度也固定为32位或64位。我一般用它来连接控制寄存器,比如配置DMA的源地址、目的地址这些。

适用场景

  • 配置寄存器:读写频率低,数据量小
  • 状态查询:读取设备的状态信息
  • 中断控制:使能/清除中断标志

我记得有一次,一个同事用AXI4去连一个简单的GPIO控制器,结果资源占用多了好几倍。我建议他换成AXI4-Lite,问题立马解决了。所以,别杀鸡用牛刀,选对协议很重要。

1.4 AXI4-Stream:流式传输的“水管”

AXI4-Stream和前面两个完全不同。它没有地址通道,只有数据通道。数据像水流一样,从上游流向下游。我习惯叫它“水管协议”——只管传数据,不管数据去哪。

信号定义

信号 方向 作用
TVALID 发送方→接收方 表示数据有效
TREADY 接收方→发送方 表示可以接收数据
TDATA 发送方→接收方 数据总线
TLAST 发送方→接收方 表示这是最后一个数据
TKEEP 发送方→接收方 指示哪些字节有效

AXI4-Stream的握手和AXI4一样,也是VALID+READY。但有个区别:Stream协议允许数据在传输过程中暂停。比如接收方忙不过来,可以拉低READY,发送方就得停住。

实战技巧:在DMA设计中,AXI4-Stream常用于连接高速数据源,比如ADC、DAC、视频接口。我曾经做过一个项目,用AXI4-Stream把摄像头数据直接灌进DDR,延迟只有几个时钟周期,效果非常好。

1.5 三种协议的对比

我画了个对比表,大家一目了然:

特性 AXI4 AXI4-Lite AXI4-Stream
突发传输 支持 不支持 支持(通过TLAST)
地址通道 有 有 无
数据宽度 8-1024位 32/64位 任意
乱序传输 支持 不支持 不支持
典型应用 DMA、内存控制器 寄存器配置 数据流处理

1.6 握手过程的细节

握手过程看起来简单,但实际设计时有很多细节。我总结了几点:

  1. VALID不能依赖READY:发送方拉高VALID后,必须保持到握手成功。不能因为READY没来就撤掉VALID。
  2. READY可以提前拉高:接收方可以提前拉高READY,表示“我随时可以收”。这样发送方发数据时不用等,延迟最小。
  3. 死锁问题:如果发送方等READY,接收方等VALID,就会死锁。我遇到过这种情况,最后发现是控制逻辑写反了。

避坑指南:我曾经在一个项目中,把AXI4的写数据通道和写地址通道的握手顺序搞反了。结果地址还没传完,数据就来了,从机直接报错。后来我养成了一个习惯:写操作先传地址,再传数据,最后等响应。这个顺序不能乱。

1.7 知识体系图

下面这张图展示了AXI总线协议的核心知识结构,我画了个SVG,方便大家理解:

AXI总线协议知识体系 AXI4 高性能,支持突发 AXI4-Lite 轻量级,单次传输 AXI4-Stream 流式传输,无地址 共同基础:VALID + READY 握手协议 AXI4 核心特性 5个独立通道 支持乱序传输 突发长度1-256 AXI4-Lite 核心特性 5个通道,无突发 固定数据宽度 适合寄存器访问 AXI4-Stream 核心特性 只有数据通道 TLAST标记结束 适合流式数据 典型应用:DMA传输、内存访问、外设控制、数据流处理

这张图把三个协议的关系和特点都串起来了。大家可以看到,它们共享相同的握手机制,但在通道数量和功能上各有侧重。搞懂了这些,后面学DMA传输就轻松多了。

1.8 小结

好了,这一章的内容就到这里。AXI4、AXI4-Lite、AXI4-Stream这三个协议,说白了就是一套规则,让芯片里的模块能高效通信。我个人觉得,理解握手过程是关键,信号定义可以查手册。记住:VALID和READY同时为高,数据就传过去了。就这么简单。

下一章咱们会深入讲AXI4的突发传输,到时候我会结合DMA的实际案例,带大家看看这些信号是怎么工作的。嗯,今天就到这儿,大家消化一下。

课后思考:如果你要设计一个DMA控制器,你会选择哪个协议来连接内存?哪个协议来连接外设?为什么?

可可精品资料库