本节摘要:AXI(Advanced eXtensible Interface)是 ARM 定制的片上总线协议,也是 SoC FPGA 里 PS 与 PL 通信的"官方语言"。本节讲透 AXI 的通信模型:主从关系、读写通道分离、VALID/READY 握手,以及 AXI4、AXI4-Lite、AXI4-Stream 三种接口的分工。读完你能看懂 AXI 接口的信号,理解它为什么能支撑高速传输。
如果 PS 和 PL 各自定义一套通信接口,每合作一次就发明一次协议,系统集成会变成灾难:接口不统一、验证各搞一套、IP 没法复用。AXI 就是来解决这个问题的"普通话"——ARM 定义的标准,SoC 里的 PS、DDR 控制器、外设、自定义加速器全都说这门语言。你会 AXI,就等于会读 SoC 里所有"对话"。
AXI 的设计哲学一句话:读写分离、通道并行。它的核心不是一堆信号,而是一个清晰的通信模型——理解了模型,信号名都是顺理成章的。
AXI 通信双方分主(发起读写)和从(响应读写)。PS 的 CPU 通常是主,DDR 控制器是从,PL 里的加速器可以当主也可以当从(全看设计怎么配)。
一次完整的传输拆成五个独立通道:
写地址通道:主 → 从 (AW*) 写数据通道:主 → 从 (W*) 写响应通道:从 → 主 (B*) 读地址通道:主 → 从 (AR*) 读数据通道:从 → 主 (R*)
读操作只走两条通道(读地址 + 读数据),写操作走三条(写地址 + 写数据 + 写响应)。关键洞察:读和写是两套独立通道,可以同时进行——这和软件里"读写共享一个总线"的模型完全不同,正是 AXI 高带宽的来源。
每个通道的传输都靠一对信号完成握手:
数据在VALID 和 READY 同时为高的那个时钟沿被传递。这个机制让双方节奏自由:发送方可以等接收方就绪,接收方可以等发送方给数,谁都不会被对方"硬塞"。
// AXI 握手语义示意:数据在 VALID 与 READY 同时有效的沿传递 // 这是接口信号行为,不是完整实现 assign handshake_ok = awvalid && awready; // 一次地址传输完成
握手是 AXI 最简单的部分,但也是新手写 AXI 逻辑时最容易错的地方——忘了拉 VALID、或拉高后不放低,都会导致总线卡死。协议规范里有"握手不能卡住"的规则:VALID 一旦拉高不能等 READY 才放,必须持续到传输完成。
AXI 家族有三位成员,分工明确:
| 接口 | 特点 | 适用场景 |
|---|---|---|
| AXI4(全功能) | 支持突发传输,一次命令搬 1~256 拍 | 高带宽大数据搬运:DDR、DMA |
| AXI4-Lite | 无突发,一次一读写 | 控制寄存器、状态查询 |
| AXI4-Stream | 无地址,纯数据流 | 流式处理:视频、音频、加速器链 |
AXI4 是"货车",擅长整车拉货(突发)。AXI4-Lite 是"单车",一次一件,管理控制寄存器够用且简单。AXI4-Stream 最特别——没有地址,主从之间就是一根不断流的数据管道,非常适合加速器链(比如"图像处理流水线"),因为流式处理根本不需要"寻址",数据按顺序流过去即可。
三选一的判断方法:要控制(读状态、配参数)→ Lite;要搬运大块数据(内存)→ AXI4;要纯数据流(处理链)→ Stream。
AXI4 的突发(burst)把一次传输的开销摊薄:发送一次地址,后续连续传 N 拍数据。N 叫突发长度。这对 DDR 这类"一次命令开销大"的从设备尤其重要——5.2 说过 DDR 的命根子是大块顺序读写,AXI 突发正是那个"大块"的搬运方式。
突发长度和每次数据宽度决定一次传输的总量,也直接影响带宽利用率。工程经验:搬内存用满突发长度,别用 Lite 去搬数据——这是新手常犯的错,Lite 一次一读一写,带宽能差一个量级。
在 PL 里做一个 AXI 从设备,完整流程是:用工具生成 AXI 外设模板 → 按模板补逻辑 → 用验证 IP 仿真 → 挂到系统总线上。模板帮你把握手、地址译码、寄存器这些样板活干完,你只需填业务逻辑。第一次做完一个 AXI 外设,你会真切理解"AXI 是标准语言"这句话——因为模板里那些信号长得都一样,换一块板子、换一个 SoC,还是它们。
问:AXI 的握手和通道数量多,写起来繁琐,能不能自己定义简单的接口?答:短期的确能,长期强烈不建议。自己定义的接口,PS 侧不认——要么用软件去"模拟"握手(慢且易错),要么加一层转换逻辑(等于重写一遍 AXI)。更重要的是验证与复用:AXI 外设有现成的验证 IP 和大量参考案例,自定义接口没有。工程共识:除非极特殊场景,否则 PL 侧接口一律 AXI,繁琐感只在第一次,熟练后模板能省掉 90% 的样板代码。
⚠️ 常见坑:忘记响应通道。AXI 从设备收到写请求后必须回写响应(BVALID),收不到响应,主机就永远等在那里——总线卡死、系统挂起。生成模板时第一件事就是确认响应逻辑完整。
下一步进入 6.3:语言学会了,怎么分工合作?软硬件协同设计的划分判据与最小系统实战。