当前位置: 首页 > news >正文

详细介绍:FPGA 中的 AXI 总线介绍

FPGA 中的 AXI 总线介绍

1. AXI 家族一张图

AXI4      —— 存储器映射,高带宽突发读写(DDR/HP端口)
AXI4-Lite —— 存储器映射,低带宽寄存器读写(控制/状态寄存器)
AXI4-Stream—— 纯数据流,无地址,适合高速流水线(DMA/视频/ADC数据)

分层理念

  • 控制面:AXI4-Lite(寄存器、启动/停止、阈值等)

  • 数据面:AXI4(到内存)或 AXI4-Stream(流→DMA→内存/外设)

  • 中间衔接:DMA / Interconnect / SmartConnect / Clock Converter / Protocol Converter

2. AXI 通道与握手:VALID/READY 的“一进一出”

AXI4/AXI4-Lite 有 5 条通道(读写各自独立):

  • 写地址 AW*、写数据 W*、写响应 B*

  • 读地址 AR*、读数据 R*

AXI4-Stream 只有数据通道TVALID/TREADY/TDATA/TLAST/TKEEP/TUSER

黄金法则只有当 VALID=1READY=1 的那个周期,数据/地址才被“传送”
背压(Backpressure)由 从属端通过拉低 READY 产生,上游必须_保持_当前拍数据与控制信号稳定直至握手达成。

3. 关键信号速查(常见子集)

3.1 AXI4/AXI4-Lite

3.2 AXI4-Stream

  • TDATA[N-1:0]TKEEPTLAST(分帧)、TUSER(带外/副通道)

  • TID/TDEST(路由/多路)

4. 吞吐/时延估算(常用公式,便于选型)

5. 设计套路:三大典型拓扑

5.1 “寄存器 + 流”的双面架构

5.2 “流→内存”的 DMA 架构

  • 流侧 AXIS:TVALID/TREADY/TLAST 分帧

  • DMA(如 Xilinx AXI DMA/Datamover、XDMA)把 AXIS 写入 DDR(AXI4),再由 CPU/PCIe 读

5.3 “内存→流”的回放架构

建议:控制面与数据面分时钟域、分层清晰;跨域用 AXI Clock ConverterAXIS FIFO(CDC)

6. 时序与约束:稳定系统的底线

  • 保持规则:当 VALID=1 且对端 READY=0所有负载信号必须保持不变(地址、数据、ID、LAST、KEEP…)。

  • Skid Buffer(单拍弹簧):在 READY 可能抖动的边界(如跨层/跨时钟)加一拍寄存器或小 FIFO,避免毛刺/违约。

  • 跨时钟域:优先用官方 CDC IP;手写 AXIS CDC 需用灰码计数 + 双口 RAM。

  • AXI4-Lite:地址与数据通道可乱序到达,但一次写的 AW/W 必须成对,常用“打拍对齐”以简化。

7. 常见突发(AXI4)与对齐

最佳实践:对齐到缓存线/DDR 突发边界LEN 选择让控制器最省开销(例如 16 或 32 beats)。

8. AXI4-Lite:寄存器地图与最小从机骨架

8.1 典型寄存器地图(可直接套用)

0x000 VERSION      R   固件版本
0x004 BUILD_TIME   R   构建时间戳
0x010 CTRL         RW  [0]start [1]stop [8]soft_rst
0x014 STATUS       R   [0]running [1]err [2]fifo_af
0x020 CFG0         RW  用户参数0
0x024 CFG1         RW  用户参数1
0x030 STAT_PKTS    R   包计数
0x034 STAT_DROP    R   丢包计数

8.2 Verilog:AXI-Lite 从机框架(片段,可直接改)

// reply 2
module axil_regs #(parameter ADDR_W = 12
)(input  wire         ACLK,input  wire         ARESETN,// AXI-Lite Slave interface (简化命名)input  wire [ADDR_W-1:0] S_AWADDR, input wire S_AWVALID, output wire S_AWREADY,input  wire [31:0]       S_WDATA,  input wire [3:0] S_WSTRB,input  wire              S_WVALID, output wire S_WREADY,output reg  [1:0]        S_BRESP,  output reg  S_BVALID, input wire S_BREADY,input  wire [ADDR_W-1:0] S_ARADDR, input wire S_ARVALID, output wire S_ARREADY,output reg  [31:0]       S_RDATA,  output reg  [1:0] S_RRESP,output reg               S_RVALID, input  wire S_RREADY,output reg  [31:0] reg_ctrl,input  wire [31:0] reg_status,output reg  [31:0] reg_cfg0,output reg  [31:0] reg_cfg1,input  wire [31:0] stat_pkts,input  wire [31:0] stat_drop
);// 省略握手状态机:建议用“一拍写、一拍应答”模板 + skid buffer// 写通道// ...(AW/W 对齐、WSTRB 应用、BRESP=OKAY)// 读通道always @(*) begincase (S_ARADDR[ADDR_W-1:0])12'h010: S_RDATA = reg_ctrl;12'h014: S_RDATA = reg_status;12'h020: S_RDATA = reg_cfg0;12'h024: S_RDATA = reg_cfg1;12'h030: S_RDATA = stat_pkts;12'h034: S_RDATA = stat_drop;default: S_RDATA = 32'hDEAD_BEEF;endcaseend// TODO: 完整握手与复位逻辑
endmodule

9. AXI4-Stream:分帧、背压与 TKEEP

  • 分帧用 TLAST;字节有效用 TKEEP;副通道/标记用 TUSER

  • 背压:当下游 TREADY=0 时,上游必须保持当前 T*

  • 合规 FIFO:用官方 AXIS FIFO/RegSlice/SkidBuffer,既做 CDC 也做打拍。

Verilog:极简 AXIS 直连(带背压)

// reply 2
assign m_tdata  = s_tdata;
assign m_tkeep  = s_tkeep;
assign m_tlast  = s_tlast;
assign m_tvalid = s_tvalid;
assign s_tready = m_tready; // 背压直通

10. AXI 到 DDR:Datamover/DMA 的“正确打开方式”

  • 写 DDR(S2MM):AXIS→Datamover 写通道→AXI4(AW/W/B)

  • 读 DDR(MM2S):AXI4(AR/R)→Datamover 读通道→AXIS

  • 描述符环:主机/PS 侧准备物理地址+长度;FPGA 侧按 TLAST/帧界定填充

  • 性能关键:突发对齐、LEN 合理、足够 outstanding、避免小包抖动

11. Interconnect/SmartConnect 仲裁与并发

12. 常见问题清单(踩坑速救)

  1. VALID 稳定性违规:READY 拉低时仍改变负载 → 随机丢/错

  2. WSTRB 误用:半字/字节写未掩码 → 覆盖邻近寄存器/数据

  3. WLAST/RLAST 漏/多:突发粘包或过早终止 → 下游状态机异常

  4. 突发未对齐:穿越 DDR 突发边界 → 带宽骤降

  5. CDC 漏做:跨时钟域直接连 → 间歇性死锁/毛刺

  6. Outstanding 太少:高延迟 DDR 下吞吐拉胯

  7. Interconnect 饥饿:固定优先级压死低优口,统计计数器飙升

  8. AXIS 无缓冲:READY 抖动导致上游气泡,速率不达标

13. 约束与验证建议

14. 可复用模块清单(建议直接用 IP/骨架)

  • Clock/Protocol Converter:AXI Clock Converter、Protocol Converter

  • 流水稳态:AXI/AXIS RegSlice、Skid Buffer、AXIS FIFO(CDC)

  • 存储搬运:AXI DMA / Datamover / CDMA / XDMA(PCIe)

  • 互连:AXI Interconnect / SmartConnect(多主多从)

  • 验证:AXI VIP、AXIS VIP、Scoreboard + Coverage

15. 迷你模板:AXIS 到 AXI4 的“打包写”控制器(思路)

  1. 累计 BeatCnt 与字节数,遇到 TLAST 或计数达阈值 → 触发一次写突发

  2. 生成 AW*(地址、LEN、SIZE、BURST),随后打出 W* 序列并在最后一拍置 WLAST

  3. 等待 B* 应答;统计 BRESP 错误

  4. 地址按固定步长递增,跨页换描述符

结合 Datamover 可显著简化,实现上尽量复用官方 IP,自己写控制层逻辑即可。

16. 收尾:一条“黄金路径”

  1. 确定数据面/控制面分工(AXI-Stream + AXI4-Lite)

  2. 规划带宽与突发参数(对齐缓存线/DDR 突发)

  3. 插足够的 RegSlice/FIFO/CDC 保证稳定与时序

  4. 利用 DMA/Datamover 落地“流↔内存”

  5. 用统计计数器 + ILA 做长期压测与定位

  6. 把寄存器地图/协议写成文档,与上位机脚手架一并版本化

http://www.jsqmd.com/news/35278/

相关文章:

  • 深入解析:眼控交互:ErgoLAB新一代人机交互方式
  • 大模型、智能体和MCP服务间的交互
  • 2025年国内成人自考机构口碑推荐排行榜单:权威解析与选择指南
  • 大信息领域列式存储与云存储的融合发展
  • 2025年六安市成人自考机构口碑推荐排行榜
  • 分享一个Oracle 数据库信息收集脚本
  • 2025年11月杭州集训记
  • Bash 入门指南-简介和常见命令
  • 最小多项式与线性递推
  • Zabbix服务告警:More than 75% used in the configuration cache
  • to kill a mocking bird
  • mounriver studio WINDOWS启动报错解决
  • Linux 内核启动日志输出阶段分析
  • Python 潮流周刊#126:新一代静态网站生成器
  • 第二章数据预处理:公式Python代码完成
  • 《代码大全 2》观后感(七):代码重构 —— 让代码 “永葆青春”
  • 吸哎四匹 2025 游击
  • 百度网盘把Windows下的习惯带进了Linux
  • 深入解析:MySQL 存储引擎深度解析:InnoDB 架构与配置优化指南
  • 做题记录(Nov.)
  • 2025年安徽猪肉批发厂家口碑排行TOP5
  • [国家集训队] 飞飞侠 题解
  • 插槽vue/react - 详解
  • AI元人文的思想锻造之路:从“空白承诺”到“动力之源”
  • 251108 会议整理
  • AT_tokiomarine2020_e O(rand)
  • 阿里云智能集团首席科技官云栖大会要点总结
  • 自指自洽,天职天命,苦乐年华
  • 完整教程:Windows Pad平板对 Qt 的支持
  • 线段树(p1083)