第1章:AXI通道信号详解

各位同学,今天我们来聊聊AXI总线最核心的东西——五个独立通道的信号定义与时序。说实话,我刚接触AXI时也被这五个通道搞得有点晕,但后来发现,只要理解了每个通道的「职责」,一切就清晰了。

1.1 为什么是五个通道?

AXI协议把读写操作拆成了五个独立的通道。你想想看,这就像一条高速公路,把不同方向的车流分开,互不干扰。这样做的好处很明显:

  • 读地址通道(AR):发送读请求的地址和控制信息
  • 读数据通道(R):返回读到的数据
  • 写地址通道(AW):发送写请求的地址和控制信息
  • 写数据通道(W):发送要写入的数据
  • 写响应通道(B):返回写操作的完成状态

我个人习惯把这五个通道分成两组:读操作(AR+R)和写操作(AW+W+B)。这样记起来方便,调试时也容易定位问题。

核心要点:五个通道都是独立的,每个通道都有自己的握手信号(VALID/READY),可以独立控制传输节奏。

1.2 读地址通道(AR)

读地址通道负责告诉从设备:「我要读哪个地址的数据」。它的信号其实不多,但每个都很关键。

信号 宽度 描述
ARID 可配置 读事务ID,用于匹配读请求和读数据
ARADDR 32/64位 读起始地址
ARLEN 8位 突发长度,表示一次突发传输的数据个数
ARSIZE 3位 每次传输的数据宽度
ARBURST 2位 突发类型:FIXED/INCR/WRAP
ARVALID 1位 主设备表示地址有效
ARREADY 1位 从设备准备好接收地址

嗯,这里要注意ARLEN和ARSIZE的配合。我在项目中遇到过一个问题:ARLEN设成了3(表示4次传输),但ARSIZE设成了4(32位),结果从设备只返回了2个数据就停了。后来发现是从设备的地址对齐没处理好。

经验之谈:ARADDR必须与ARSIZE对齐。比如ARSIZE=4(32位),地址的低2位必须是0。我曾经因为地址没对齐,浪费了一整天调试时间。

1.3 读数据通道(R)

读数据通道是从设备返回数据的通道。它和读地址通道是一一对应的,通过RID来匹配。

信号 宽度 描述
RID 可配置 读事务ID,必须与ARID一致
RDATA 8/16/32/64/128位 读回的数据
RRESP 2位 读响应状态:OKAY/EXOKAY/SLVERR/DECERR
RLAST 1位 最后一次传输的指示
RVALID 1位 从设备表示数据有效
RREADY 1位 主设备准备好接收数据

读数据通道的时序其实很简单:从设备在RVALID有效时给出数据,主设备在RREADY有效时接收。但要注意,RLAST信号只在最后一次传输时拉高。我见过有人把RLAST和RVALID搞混,结果数据少收了一个。

避坑指南:我曾经在验证一个DMA控制器时,发现读数据总是少一个。查了半天,原来是RLAST信号在倒数第二个数据就拉高了。后来发现是从设备的突发长度计算有bug。

1.4 写地址通道(AW)

写地址通道和读地址通道几乎一样,只是方向不同。它告诉从设备:「我要往这个地址写数据」。

信号 宽度 描述
AWID 可配置 写事务ID
AWADDR 32/64位 写起始地址
AWLEN 8位 突发长度
AWSIZE 3位 每次传输的数据宽度
AWBURST 2位 突发类型
AWVALID 1位 主设备表示地址有效
AWREADY 1位 从设备准备好接收地址

说白了,AW通道和AR通道就是一对双胞胎。唯一的区别是,写操作还需要额外的W通道和B通道来完成整个事务。

1.5 写数据通道(W)

写数据通道负责传输要写入的数据。它和写地址通道是独立的,但通常我们会让它们并行工作。

信号 宽度 描述
WID 可配置 写事务ID(注意:有些协议版本已弃用)
WDATA 8/16/32/64/128位 要写入的数据
WSTRB WDATA宽度/8 字节选通信号,指示哪些字节有效
WLAST 1位 最后一次传输的指示
WVALID 1位 主设备表示数据有效
WREADY 1位 从设备准备好接收数据

WSTRB这个信号很有意思。它允许你只写入数据中的某些字节。比如你想写一个32位寄存器的低8位,就可以把WSTRB设成4'b0001。我刚开始做验证时,经常忘记检查WSTRB,结果发现数据写错了位置。

重要提醒:WLAST信号必须在最后一次数据传输时拉高。如果WLAST和WVALID不同时有效,从设备可能不知道传输何时结束。

1.6 写响应通道(B)

写响应通道是写操作的「收尾」通道。从设备通过它告诉主设备:「写操作完成了,结果如何」。

信号 宽度 描述
BID 可配置 写事务ID,必须与AWID一致
BRESP 2位 写响应状态:OKAY/EXOKAY/SLVERR/DECERR
BVALID 1位 从设备表示响应有效
BREADY 1位 主设备准备好接收响应

写响应通道只有一个响应信号,但它必须在整个突发传输完成后才返回。也就是说,从设备要等到WLAST和WVALID都有效,并且所有数据都接收完毕,才会给出BVALID。

调试技巧:我建议在验证时,重点关注B通道的时序。如果BVALID迟迟不来,很可能是WLAST信号有问题,或者从设备内部处理超时了。

1.7 五个通道的时序关系

好了,现在我们把五个通道串起来看看。下面这张图展示了读操作和写操作的完整时序流程:

AXI五个通道时序关系图 读操作 AR通道 ARVALID + ARREADY 发送地址和控制信息 R通道 RVALID + RREADY 返回数据(含RLAST) 写操作 AW通道 AWVALID + AWREADY 发送地址和控制信息 W通道 WVALID + WREADY 发送数据(含WLAST) B通道 BVALID + BREADY 返回写响应状态 说明:AW和W通道可以并行工作,但B通道必须在WLAST之后才返回 读操作中,AR和R通道是串行的,先发地址再收数据

从这张图可以看出:

  • 读操作:先通过AR通道发送地址,然后从R通道接收数据。AR和R是串行的,但可以流水线化(即发完一个AR请求后,不等数据返回就可以发下一个)。
  • 写操作:AW和W通道可以同时进行,但B通道必须在所有数据发送完毕(WLAST有效)后才返回响应。

1.8 握手协议:VALID和READY

每个通道都有一对握手信号:VALID和READY。它们的组合决定了数据传输的时机。有三种情况:

  1. VALID先有效,READY后有效:发送方先准备好数据,等待接收方就绪。
  2. READY先有效,VALID后有效:接收方先表示可以接收,发送方随后给出数据。
  3. VALID和READY同时有效:双方一拍即合,数据立即传输。

我个人建议在验证时,三种情况都要覆盖到。我曾经只测了第一种情况,结果流片后发现从设备在第二种情况下会丢数据。嗯,那次的教训挺深刻的。

重要规则:VALID信号一旦拉高,必须保持到握手完成(即VALID和READY同时有效)。不能中途撤销!这是AXI协议的铁律。

1.9 小结

好了,这一章的内容就到这里。五个通道的信号定义和时序,说白了就是:

  • 读操作:AR发地址,R收数据
  • 写操作:AW发地址,W发数据,B收响应
  • 每个通道都有VALID/READY握手,独立控制节奏

下一章我们会深入讲突发传输的细节,包括INCR、WRAP和FIXED三种模式的区别。到时候我会用实际项目中的例子来说明,保证让你印象深刻。

可可精品资料库