第一章:AXI总线概述

各位同学好,我是老李。做数字芯片设计十几年了,今天咱们聊聊AXI总线。

说实话,AXI总线在现在的SoC设计里,几乎是无处不在。我刚开始接触它的时候,也觉得协议挺复杂。但用久了你会发现,它其实就那三板斧。

1.1 三种AXI协议,你分得清吗?

AXI总线家族有三个兄弟:AXI4、AXI4-Lite、AXI4-Stream。它们各有各的脾气。

核心区别一句话总结:

  • AXI4:完整版,支持突发传输,适合DDR、DMA这类高带宽场景
  • AXI4-Lite:精简版,每次只传一个数据,适合配置寄存器
  • AXI4-Stream:流式版,没有地址,适合视频、音频数据流

我遇到过不少新手,上来就用AXI4去配寄存器。其实没必要,杀鸡用牛刀了。AXI4-Lite就够用,还省面积。

1.2 AXI4协议简介

AXI4是AMBA 3.0之后推出的高性能总线协议。它最大的特点就是分离的地址/数据通道,还有读写并行。

你想想看,传统的总线读写是串行的。读的时候不能写,写的时候不能读。AXI4就不一样了,它把读地址、读数据、写地址、写数据、写响应这五个通道全部分开。说白了,就是五条独立的高速公路。

我个人习惯把AXI4的通道关系画成下面这张图:

Master Slave 读地址通道 (AR) 读数据通道 (R) 写地址通道 (AW) 写数据通道 (W) 写响应通道 (B) AXI4 五通道架构图 五个通道独立工作,读写可同时进行

这张图我画了很多遍,每次给新人培训都用它。五个通道各走各的,互不干扰。这就是AXI4高性能的秘诀。

1.3 AXI4-Lite协议简介

AXI4-Lite,说白了就是AXI4的瘦身版。它不支持突发传输,每次只能传一个数据。但好处是控制逻辑简单,面积小。

我一般在什么场景用呢?配置寄存器。比如配置一个UART的波特率,或者配置一个GPIO的方向。这种场景数据量小,频率低,用AXI4-Lite最合适。

我的经验:AXI4-Lite的时序约束其实比AXI4更严格。因为它的地址和数据变化频率低,但建立时间要求反而更高。我曾经在一个项目里,AXI4-Lite接口的时序反而比AXI4更难收敛。

1.4 AXI4-Stream协议简介

AXI4-Stream就更有意思了。它没有地址通道,只有数据流。你想想看,视频数据一帧一帧地传,音频数据一段一段地流,根本不需要地址。

AXI4-Stream的核心信号就几个:

  • TVALID:发送方说「我有数据」
  • TREADY:接收方说「我准备好了」
  • TDATA:数据总线
  • TLAST:最后一个数据
  • TKEEP:字节使能

握手协议很简单:TVALID和TREADY同时为高,数据就传过去了。就这么简单。

注意:AXI4-Stream的时序约束,重点在TVALID到TREADY的路径上。我曾经遇到过一个bug,TREADY信号因为组合逻辑太长,导致握手失败。后来加了一级寄存器才解决。

1.5 时序约束为什么重要?

好,问题来了。我们为什么要花这么多精力去约束AXI总线的时序?

我直接说结论:时序约束决定了你的芯片能不能正常工作。

你想想看,AXI总线跑在几百兆甚至上GHz的频率上。地址、数据、控制信号在芯片内部飞来飞去。如果时序不满足,就会出现采样错误。轻则功能异常,重则芯片直接报废。

我记得有一次,一个同事设计的AXI4接口,仿真怎么跑都过。但流片回来,芯片在高温下就死机。查了两个月,最后发现是写数据通道的时序裕量不够。温度一高,延迟变大,数据就采错了。

从那以后,我对AXI总线的时序约束就特别上心。每个通道、每个信号,都要仔细检查。

1.6 时序约束的核心要点

做AXI时序约束,我个人习惯从这几个方面入手:

  1. 时钟约束:先定义好时钟,这是所有约束的基础
  2. 输入延迟:从片外到片内的路径,要约束好
  3. 输出延迟:从片内到片外的路径,也要约束好
  4. 跨时钟域:AXI总线经常跨时钟域,要小心处理
  5. 伪路径:有些路径不需要约束,比如测试模式

这些内容,咱们后面会一章一章地详细讲。今天先有个整体概念。

一句话总结本章:

AXI4、AXI4-Lite、AXI4-Stream各有各的用途。时序约束不是可有可无的步骤,而是芯片能否成功的关键。我见过太多因为时序问题导致流片失败的案例了。

嗯,今天就先聊到这里。下一章咱们开始动手,写第一个时序约束脚本。

课后思考:你的项目中,AXI总线跑在什么频率?有没有遇到过时序问题?欢迎在评论区交流。

可可精品资料库