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的五个通道及其信号关系:

主设备 (Master) 从设备 (Slave) AWADDR, AWVALID AWREADY WDATA, WVALID WREADY BRESP, BVALID BREADY ARADDR, ARVALID ARREADY RDATA, RVALID RREADY 图例说明 写地址通道 写数据通道 写响应通道 读地址通道 读数据通道

从这张图可以清楚地看到,五个通道是独立的,每个通道都有自己的握手信号。箭头方向表示数据流向:主设备到从设备(写地址、写数据),或者从设备到主设备(写响应、读数据)。

记住:AXI4-Lite的五个通道可以独立工作,也可以同时工作。比如,你可以一边写数据,一边读数据,互不干扰。这就是AXI总线的高明之处。

好了,AXI4-Lite的信号就这些。你想想看,是不是比想象中简单?掌握了这些信号,你就可以开始设计自己的AXI4-Lite从设备了。下一章咱们会讲如何用Verilog实现一个简单的AXI4-Lite从设备,到时候这些信号都会用上。

最后提醒:我刚开始学AXI时,总觉得信号太多记不住。后来我发现一个规律——每个通道就三个信号:地址/数据、VALID、READY。记住这个规律,再复杂的AXI总线也能拆解成简单的握手协议。