AXI4-Lite接口信号详解
AXI4-Lite,说白了就是AXI4的轻量版。我刚开始接触AXI总线时,看到那么多信号线,说实话有点头大。但后来发现,Lite版本其实很友好——它去掉了突发传输,每次只传一笔数据。嗯,这就简单多了。
今天咱们就把AXI4-Lite的五个通道信号挨个捋一遍。你想想看,掌握了这些信号,写个简单的寄存器控制模块就不在话下了。
核心要点:AXI4-Lite有5个独立通道,每个通道都有VALID/READY握手信号。这是理解AXI的基础,也是最容易出错的地方。
写地址通道信号
写地址通道,负责把你要写的地址告诉从设备。三个信号:
- AWADDR:写地址。32位或64位,具体看你的总线宽度。我个人习惯用32位,够用。
- AWVALID:主设备发出的有效信号。拉高时表示AWADDR上的地址有效。
- AWREADY:从设备发出的就绪信号。拉高时表示从设备可以接收地址。
这里有个关键点:AWVALID和AWREADY必须同时为高,地址才算被成功传输。这就是AXI的握手协议。
我的经验:我在项目中遇到过一个问题——AWVALID拉高后,从设备还没准备好,AWREADY一直为低。这时候主设备必须保持AWVALID不变,直到握手成功。千万别中途把AWVALID拉低,否则从设备会认为你取消了这次传输。
写数据通道信号
写数据通道,负责传输你要写的数据。也是三个信号:
- WDATA:写数据。宽度可以是8、16、32、64、128、256、512或1024位。Lite版本通常用32位。
- WVALID:主设备发出的有效信号。拉高时表示WDATA上的数据有效。
- WREADY:从设备发出的就绪信号。拉高时表示从设备可以接收数据。
写数据和写地址是独立的通道,这意味着地址和数据可以同时发送。但要注意,从设备通常要求地址先到,数据后到,或者同时到。
避坑指南:我曾经在一个项目中,地址和数据同时发送,但从设备的内部逻辑是先处理地址再处理数据。结果地址还没处理完,数据就来了,导致数据丢失。后来我加了一个FIFO才解决。所以,设计时一定要考虑地址和数据的时序关系。
写响应通道信号
写响应通道,从设备告诉你写操作的结果。两个信号:
- BRESP:写响应。2位信号,表示写操作的状态:
- 00:OKAY,正常完成
- 01:EXOKAY,独占访问成功(Lite版本不用)
- 10:SLVERR,从设备错误
- 11:DECERR,地址译码错误
- BVALID:从设备发出的有效信号。拉高时表示BRESP上的响应有效。
- BREADY:主设备发出的就绪信号。拉高时表示主设备可以接收响应。
你想想看,为什么需要写响应?因为从设备可能因为各种原因无法完成写操作。比如地址不对、寄存器只读等等。没有响应,主设备就不知道写操作是否成功。
重要:写响应通道的握手顺序和地址/数据通道不同。地址和数据通道是主设备先发VALID,从设备回复READY。而写响应通道是从设备先发BVALID,主设备回复BREADY。这个顺序别搞反了。
读地址通道信号
读地址通道,和写地址通道几乎一样,只是信号名不同:
- ARADDR:读地址。
- ARVALID:主设备发出的有效信号。
- ARREADY:从设备发出的就绪信号。
握手规则和写地址通道完全一样:ARVALID和ARREADY同时为高时,地址传输成功。
读数据通道信号
读数据通道,从设备把读到的数据返回给主设备。三个信号:
- RDATA:读数据。
- RRESP:读响应。2位信号,含义和BRESP一样。
- RVALID:从设备发出的有效信号。
- RREADY:主设备发出的就绪信号。
读数据通道的握手顺序和写响应通道类似:从设备先发RVALID,主设备回复RREADY。这是因为读数据是从设备主动提供的。
我的习惯:设计读数据通道时,我通常会让RVALID和RREADY同时有效,这样读操作可以在一拍内完成。但如果从设备读取数据需要多个时钟周期,RVALID就要等到数据准备好再拉高。
握手协议总结
AXI的握手协议其实就三种情况:
| 通道 | 谁先发VALID | 谁发READY |
|---|---|---|
| 写地址 | 主设备 | 从设备 |
| 写数据 | 主设备 | 从设备 |
| 写响应 | 从设备 | 主设备 |
| 读地址 | 主设备 | 从设备 |
| 读数据 | 从设备 | 主设备 |
说白了,谁主动发起传输,谁就先发VALID。另一方准备好后发READY。就这么简单。
AXI4-Lite信号结构图
下面这张图展示了AXI4-Lite的五个通道及其信号关系:
从这张图可以清楚地看到,五个通道是独立的,每个通道都有自己的握手信号。箭头方向表示数据流向:主设备到从设备(写地址、写数据),或者从设备到主设备(写响应、读数据)。
记住:AXI4-Lite的五个通道可以独立工作,也可以同时工作。比如,你可以一边写数据,一边读数据,互不干扰。这就是AXI总线的高明之处。
好了,AXI4-Lite的信号就这些。你想想看,是不是比想象中简单?掌握了这些信号,你就可以开始设计自己的AXI4-Lite从设备了。下一章咱们会讲如何用Verilog实现一个简单的AXI4-Lite从设备,到时候这些信号都会用上。
最后提醒:我刚开始学AXI时,总觉得信号太多记不住。后来我发现一个规律——每个通道就三个信号:地址/数据、VALID、READY。记住这个规律,再复杂的AXI总线也能拆解成简单的握手协议。