一、AXI总线概述:三种协议的区别与选择

大家好,我是老李,做FPGA图像加速这块有些年头了。今天咱们聊聊AXI总线,这是图像处理加速里绕不开的话题。

说实话,我刚接触AXI时也被它搞晕过——什么AXI4、AXI4-Lite、AXI4-Stream,名字长得像,用法却天差地别。后来踩了不少坑,才慢慢摸清门道。

1.1 三种协议的核心区别

先看一张图,这是我个人习惯的总结方式,把三种协议的关系画清楚:

AXI总线三种协议对比 AXI4 高性能内存映射 支持突发传输 独立地址/数据通道 AXI4-Lite 简化版内存映射 单次传输 适合寄存器配置 AXI4-Stream 无地址概念 连续数据流 最低延迟 复杂度:高 复杂度:中 复杂度:低 典型应用场景: DDR控制器、DMA引擎 大块数据搬运 寄存器配置、状态查询 控制通路 视频像素流、音频流 高速数据通路 箭头方向:功能复杂度递减,数据流效率递增

这张图我画了好几次才满意。你看,从左到右,功能越来越简单,但数据传输效率越来越高。说白了,这就是个取舍问题。

1.2 什么时候该用哪种?

我直接说结论,这是我在项目里摸爬滚打总结出来的:

协议类型 适合场景 不适合场景 我踩过的坑
AXI4 DDR读写、大块数据搬运 小数据量、频繁配置 突发长度设太大,导致延迟飙升
AXI4-Lite 寄存器配置、中断控制 大数据传输 用它传图像数据,带宽根本不够
AXI4-Stream 视频流、音频流、高速数据 需要随机访问的场景 忘记处理TLAST信号,丢帧了

核心原则:控制用Lite,数据用Stream,内存用Full。这个口诀我教过很多新人,基本不会出错。

1.3 AXI总线在图像处理中的优势

为什么图像处理偏爱AXI?我举个例子你就明白了。

你想想看,一张1080p的图像,1920×1080个像素,每个像素24位RGB。如果按传统总线一个个传,光地址开销就够受的。AXI4-Stream直接甩掉地址,像素数据像流水一样哗哗往里灌——这才是视频该有的样子。

我记得有个项目,客户要求做4K60帧的实时处理。数据量有多大?算一下:3840×2160×60×3字节 ≈ 1.5GB/s。用AXI4-Stream配合合适的时钟频率,轻松搞定。要是换成别的总线,光握手协议就能把你卡死。

小技巧:做图像处理时,我习惯把像素数据打包成AXI4-Stream,控制信号走AXI4-Lite。这样数据通路和控制通路完全分离,调试起来特别方便。

1.4 实际项目中的选择策略

这里我分享一个真实案例。之前做智能相机项目,需要同时处理三路视频流。我的方案是这样的:

  • 视频输入:三路MIPI转AXI4-Stream,直接进FPGA
  • 帧缓存:AXI4连接DDR控制器,突发传输效率拉满
  • 算法配置:AXI4-Lite控制各个IP核的参数
  • 输出显示:AXI4-Stream到HDMI接口

你看,三种协议各司其职,谁也别抢谁的活。这就是AXI总线的精髓——分层设计,各取所需。

注意:千万不要把AXI4-Lite当数据总线用!我曾经有个同事,图省事用Lite传图像数据,结果带宽只有几十MB/s,4K视频直接卡成PPT。后来改成Stream,问题瞬间解决。

1.5 带宽与延迟的权衡

做图像处理,最关心的就是两个指标:带宽和延迟。AXI三种协议在这方面的表现完全不同:

  1. AXI4:带宽高(支持突发),但延迟也高(地址握手开销)
  2. AXI4-Lite:带宽低(单次传输),延迟中等
  3. AXI4-Stream:带宽高(流水线),延迟最低(无地址)

我个人习惯是:实时性要求高的走Stream,吞吐量要求大的走Full,控制类的走Lite。这个原则帮我避开了很多坑。

嗯,说到避坑,我曾经在一个项目中把Stream的TREADY信号处理错了,导致数据断流。查了两天才发现是握手时序的问题。从那以后,我每次写Stream接口都会反复检查VALID和READY的依赖关系。

1.6 小结

AXI总线不是越复杂越好,关键是要选对。图像处理加速中,我90%的场景只用Stream和Lite两种,Full只在连DDR时才用。你想想看,是不是这个理?

下一章我会详细讲AXI4-Stream的握手协议,这是做图像加速的基础,也是我踩坑最多的地方。到时候咱们再细聊。

可可精品资料库