1. AXI协议基础回顾:AXI通道与握手信号、读写事务流程、突发传输与地址对齐

各位同学好,我是老李。做数字芯片设计这么多年,AXI总线可以说是打交道最多的协议之一了。今天咱们先来回顾一下AXI的基础知识。别小看这些基础,很多时序约束冲突的根源,恰恰就藏在这些看似简单的握手和传输规则里。

1.1 AXI的五个独立通道

AXI协议最大的特点,就是采用了通道分离的设计。说白了,就是读和写各自走各自的路,互不干扰。一共五个通道:

  • 读地址通道(AR)—— 发起读请求时,地址从这里走
  • 读数据通道(R) —— 读回来的数据,从这里返回
  • 写地址通道(AW)—— 写请求的地址通道
  • 写数据通道(W) —— 要写的数据,从这里发出去
  • 写响应通道(B) —— 写操作完成后,从设备返回状态

我个人习惯把AXI想象成一条双向四车道的高速公路。读和写是分开的,地址和数据也是分开的。这样设计的好处很明显——读写可以同时进行,效率高得多。

关键点:每个通道都有自己的VALID和READY握手信号。通道之间没有全局握手的说法,各走各的。

1.2 握手信号:VALID与READY

AXI的握手,说白了就是两个信号:

  • VALID —— 发送方说:“我准备好了,数据/地址有效!”
  • READY —— 接收方说:“我准备好了,你可以发过来了!”

只有VALID和READY同时为高的那个时钟沿,数据才算真正传输成功。嗯,这里要注意:

我曾经踩过一个坑:在设计一个DMA控制器时,我把VALID拉高后,READY迟迟不来,结果我忘了保持VALID稳定。等READY来的时候,VALID已经变低了。数据丢了,查了整整两天才找到原因。

教训:VALID一旦拉高,必须保持到握手成功为止。READY可以随时拉高拉低,但VALID不行。

握手有三种情况:

  1. VALID先来,READY后来 —— 最常见,发送方先准备好,等接收方
  2. READY先来,VALID后来 —— 接收方先准备好,等发送方
  3. 同时来 —— 一拍搞定,效率最高

1.3 读写事务流程

读事务的流程很简单:

  1. 主机在AR通道上发地址
  2. 从设备收到地址后,开始准备数据
  3. 数据通过R通道返回,可以分多拍返回(突发传输)
  4. 最后一笔数据带上RLAST信号,表示读完了

写事务稍微复杂一点:

  1. 主机在AW通道上发地址
  2. 同时在W通道上发数据
  3. 数据发完后,从设备在B通道上返回写响应
  4. 响应表示写操作成功还是失败

我个人的经验:写事务中,地址和数据可以乱序发送。比如先发数据再发地址,只要保证最终能对上就行。但实际设计中,我建议还是按顺序来,否则调试起来很头疼。

1.4 突发传输与地址对齐

突发传输是AXI提高效率的核心机制。一次突发可以传输1到16笔数据,每笔数据的大小由数据总线宽度决定。

突发传输有三个关键参数:

  • AxLEN —— 突发长度,表示一次突发传多少笔数据
  • AxSIZE —— 每笔数据的大小,以字节为单位
  • AxBURST —— 突发类型,有FIXED、INCR、WRAP三种

地址对齐,说白了就是起始地址必须与AxSIZE对齐。举个例子:

// 假设数据总线宽度为32位(4字节)
// AxSIZE = 2(表示每笔4字节)
// 起始地址必须为4的倍数,比如0x1000、0x1004、0x1008

// 正确的对齐:
起始地址 = 0x1000  // 4字节对齐,OK
起始地址 = 0x1004  // 4字节对齐,OK

// 错误的对齐:
起始地址 = 0x1001  // 不对齐,会出问题

我曾经遇到一个案例:一个同事在设计AXI从设备时,没有检查地址对齐。结果主机发了一个不对齐的地址,从设备直接死机了。查了三天,最后发现是地址对齐的问题。从那以后,我每个AXI接口都会加一个地址对齐检查的逻辑。

突发类型有三种:

类型 说明 典型应用
FIXED 地址固定不变,每次传同一地址 FIFO操作、状态寄存器
INCR 地址递增,每次加AxSIZE 内存读写、DMA传输
WRAP 地址递增,到边界后回绕 Cache line fill

我个人最常用的是INCR类型。WRAP类型在Cache设计中用得比较多,普通外设接口很少用到。

1.5 知识体系总览

下面这张图,是我自己总结的AXI基础知识框架。你看一眼,就能把今天讲的内容串起来:

AXI协议基础回顾 读地址通道 (AR) 读数据通道 (R) 写地址通道 (AW) 写数据通道 (W) 写响应通道 (B) 读事务流程 主机发地址 (AR) 从设备准备数据 数据返回 (R + RLAST) 写事务流程 主机发地址 (AW) 主机发数据 (W) 从设备返回响应 (B) 握手信号:VALID + READY 突发类型:FIXED / INCR / WRAP

这张图把今天讲的内容都串起来了。五个通道、读写流程、握手信号、突发传输,一目了然。你想想看,如果这些基础概念没搞清楚,后面做时序约束的时候,很容易出问题。

总结一下今天的内容:

  • AXI有五个独立通道,读写分离
  • 握手靠VALID和READY,两者同时为高才算传输成功
  • 读事务:发地址 → 等数据 → 收数据(带RLAST)
  • 写事务:发地址 + 发数据 → 收响应
  • 突发传输有三种类型,地址必须对齐AxSIZE

好了,这一章的基础回顾就到这里。下一章我们会深入讨论AXI时序约束的具体问题,特别是那些容易踩坑的地方。到时候我会结合我实际项目中遇到的案例,给大家讲讲怎么分析和解决。

可可精品资料库