一、AXI总线概述:三种协议的区别与选择
大家好,我是老李,做FPGA图像加速这块有些年头了。今天咱们聊聊AXI总线,这是图像处理加速里绕不开的话题。
说实话,我刚接触AXI时也被它搞晕过——什么AXI4、AXI4-Lite、AXI4-Stream,名字长得像,用法却天差地别。后来踩了不少坑,才慢慢摸清门道。
1.1 三种协议的核心区别
先看一张图,这是我个人习惯的总结方式,把三种协议的关系画清楚:
这张图我画了好几次才满意。你看,从左到右,功能越来越简单,但数据传输效率越来越高。说白了,这就是个取舍问题。
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三种协议在这方面的表现完全不同:
- AXI4:带宽高(支持突发),但延迟也高(地址握手开销)
- AXI4-Lite:带宽低(单次传输),延迟中等
- AXI4-Stream:带宽高(流水线),延迟最低(无地址)
我个人习惯是:实时性要求高的走Stream,吞吐量要求大的走Full,控制类的走Lite。这个原则帮我避开了很多坑。
嗯,说到避坑,我曾经在一个项目中把Stream的TREADY信号处理错了,导致数据断流。查了两天才发现是握手时序的问题。从那以后,我每次写Stream接口都会反复检查VALID和READY的依赖关系。
1.6 小结
AXI总线不是越复杂越好,关键是要选对。图像处理加速中,我90%的场景只用Stream和Lite两种,Full只在连DDR时才用。你想想看,是不是这个理?
下一章我会详细讲AXI4-Stream的握手协议,这是做图像加速的基础,也是我踩坑最多的地方。到时候咱们再细聊。
可可精品资料库