1. AXI协议基础:三大协议与握手信号详解
大家好,我是老李。做FPGA和ASIC设计十几年了,AXI协议可以说是我打交道最多的接口协议之一。今天咱们就来聊聊AXI协议的基础,特别是AXI4、AXI4-Lite和AXI4-Stream这三种协议的区别,以及它们的通道和握手信号。
说实话,刚接触AXI的时候,我也被那五条通道、复杂的握手规则搞得头大。但后来我发现,只要抓住几个核心点,这东西其实没那么玄乎。咱们一步步来。
1.1 为什么需要AXI协议?
你想想看,芯片内部各个模块之间怎么通信?总得有个标准吧。ARM公司搞出了AMBA总线协议,AXI就是其中的高端版本。它解决了几个关键问题:
- 高性能:支持独立地址/数据通道,读写可以并行
- 低延迟:流水线操作,一拍一拍往前推
- 灵活性:三种协议覆盖不同场景
我在项目中遇到过最典型的场景:一个视频处理芯片,需要同时从DDR读数据、往显示器送数据、还要响应CPU的配置指令。这时候AXI的分离通道设计就派上大用场了。
1.2 三种协议,各司其职
AXI家族有三个成员,每个都有自己的定位。我习惯这么理解:
| 协议 | 特点 | 典型应用 | 我常用的场景 |
|---|---|---|---|
| AXI4 | 全功能,支持突发传输 | DDR控制器、高速数据通路 | 视频帧缓存、大数据搬移 |
| AXI4-Lite | 轻量级,单次传输 | 寄存器配置、状态读取 | 控制寄存器、中断状态 |
| AXI4-Stream | 流式,无地址 | 数据流处理、DMA | 视频像素流、音频数据流 |
嗯,这里要注意:AXI4-Lite虽然功能简单,但它的握手信号和AXI4是完全一样的。所以学会了AXI4的握手,Lite也就拿下了。
1.3 通道结构:五条独立通道
AXI4和AXI4-Lite都有五条通道。我画了个图,帮你理清它们的关系:
看到没?读和写是分开的。这意味着你可以同时读和写,互不干扰。我做过一个项目,主设备一边从DDR读数据,一边往DDR写结果,效率直接翻倍。
1.4 握手信号:VALID和READY
这是AXI协议最核心的部分。说白了就是一句话:数据什么时候有效,对方什么时候准备好。
每个通道都有两个关键信号:
- VALID:发送方说「我准备好了,数据在线上」
- READY:接收方说「我准备好了,可以收数据」
数据只有在VALID和READY同时为高的那个时钟沿才被传输。这就是所谓的「握手成功」。
核心规则:
- 发送方不能等READY来了才置起VALID
- 接收方可以等VALID来了再置起READY
- 一旦VALID置起,必须保持到握手成功
我曾经踩过一个坑:写状态机的时候,VALID信号在握手成功前被拉低了。结果从设备一直等不到数据,整个总线卡死。嗯,从那以后我再也不敢乱动VALID了。
1.5 三种握手场景
实际工作中,握手有三种常见情况:
- 双方都准备好了:VALID和READY同时为高,一拍完成
- 发送方先准备好:VALID先高,等READY来了再传
- 接收方先准备好:READY先高,等VALID来了再传
你想想看,这就像两个人握手。你伸手了(VALID),对方也伸手了(READY),这才握上。光一个人伸手没用。
1.6 AXI4-Stream的特殊之处
AXI4-Stream跟上面两位不太一样。它只有一条数据通道,没有地址通道。为什么?因为它处理的是连续的数据流,不需要地址。
它的核心信号更简单:
- TVALID:数据有效
- TREADY:接收方就绪
- TDATA:数据总线
- TLAST:最后一个数据(可选)
- TKEEP:哪些字节有效(可选)
我在做视频处理时特别喜欢用Stream。像素数据一拍一拍地流进来,处理完一拍一拍地流出去,中间加个FIFO就能跨时钟域,太方便了。
我的小技巧:
写HLS代码时,如果数据是连续流,优先用hls::stream<>。它自动帮你处理TVALID和TREADY的握手,省心不少。
1.7 实际项目中的选择建议
说了这么多,到底怎么选?我一般这么判断:
| 需求 | 推荐协议 | 理由 |
|---|---|---|
| 配置寄存器、读状态 | AXI4-Lite | 简单,资源少,一次只传一个数据 |
| 大数据块传输 | AXI4 | 支持突发,效率高 |
| 流式数据处理 | AXI4-Stream | 无地址开销,适合流水线 |
| 混合场景 | AXI4 + AXI4-Lite | 数据通路用AXI4,控制用Lite |
举个例子:我做过一个图像缩放模块。控制寄存器用AXI4-Lite连接CPU,像素数据用AXI4-Stream连接DMA。这样CPU只管配参数,DMA只管搬数据,各司其职。
注意:
AXI4-Lite不支持突发传输。如果你试图用它搬大量数据,性能会惨不忍睹。我见过有人拿Lite搬一帧图像,结果总线利用率不到5%。
1.8 小结
好了,这一章的内容就这些。总结一下:
- AXI4是全功能版,适合高性能数据通路
- AXI4-Lite是精简版,适合寄存器配置
- AXI4-Stream是流式版,适合数据流处理
- 握手信号VALID和READY是核心,两者同时为高才传输
下一章我们会深入AXI4的突发传输细节,包括地址计算、数据对齐这些实战中经常遇到的问题。到时候我会拿一个实际的HLS代码例子来讲解,敬请期待。