FPGA 进阶实战 · 01 从 FIFO 到 AXI 跨域工程

沿用原有工程方法,明确 AXI4-Lite 寄存器、双向握手邮箱和双时钟工作单元的边界。

先修知识完成 FPGA FIFO 六章基础实战;理解同步时序、非阻塞赋值与 ready/valid。

适用环境Basys 3 / xc7a35tcpg236-1;板上 100/50 MHz 同源时钟;Icarus Verilog、Python 3;Vivado 2024.1 命令参考。

验证状态三组时钟 RTL 测试、两类负向测试及板上自检器的软件模型已通过;Vivado、物理 CDC 和 ILA 上板尚需实测。

本文目录先定义要解决的工程问题协议选择与适用范围搭好可复现的学习环境典型故障:把写响应当作工作完成

先定义要解决的工程问题

本课程让控制端通过寄存器发出一个三十二位命令,另一时钟域对数据变换并经过 FIFO 后返回结果。我们保留上一课程四深度 FIFO 的沿前满空判断和注册读输出,把位宽扩为三十二位,并沿用冻结构建、发布清单和按钮复位验收。新增复杂度集中在接口和跨域边界,便于工程师沿着同一笔事务查明问题。

同一事务横跨 AXI 域与 worker 域,数据与控制采用不同的跨域处理。AXI4-LiteDATA / START请求邮箱锁存 payload / req工作域 FIFO异或变换 / 注册读结果邮箱ack / RESULT一个命令在途;B 响应确认接受,STATUS 确认完成
同一事务横跨 AXI 域与 worker 域,数据与控制采用不同的跨域处理。(原创示意,非器件引脚图;窄屏可横向滑动)

协议选择与适用范围

这里选择 AXI4-Lite 作为寄存器控制接口,并不实现突发传输、DMA 或 AXI4-Stream。跨域部分使用单槽握手邮箱,同一时间最多处理一个命令;工作域内部仍是同步 FIFO,不应称为异步 FIFO。低吞吐控制场景可以先理解这一结构,高吞吐连续数据流则需要另一套队列、指针与容量管理设计,不能简单提高发命令速度。

工程接口与验收依据
部分实现与限制
AXI 数据 / 地址32 位数据、8 位局部地址,AW/W 独立缓存
工作负载输入 0x12340000 + i*17 + 3,异或 0x5a5aa5a5
板上时钟Clocking Wizard 从 100 MHz 生成 100/50 MHz
软件时钟10/14、14/10、10/22 ns 三组周期与不同初相位
吞吐 / 复位单命令往返;两域共同复位,取消在途事务

在解压后的 fpga-advanced 目录执行。软件仿真不需要 Vivado;硬件步骤需目标工具与板卡。

bash
python3 flow.py sim
python3 flow.py bist
# sim:每组 ADV_PASS transactions=66,最终 ADV_MATRIX_PASS clocks=3
# bist:两次 ADV_BIST_PASS,每次 transactions=64 led=01

搭好可复现的学习环境

先解压独立进阶工程,确认 Python、iverilog 和 vvp 可用,再保存软件基线日志。软件测试不需要板卡;硬件路径则需要准确的 Basys 3 器件支持和 Vivado IP。不要把旧课程生成的位流或探针文件复制过来,新的时钟结构、接口和调试核已经改变,必须在本工程独立完成综合、实现与审查。

  1. 确认先修

    预期与判定:能解释上一课程 FIFO 注册读输出为什么延后一拍。

  2. 运行基线

    预期与判定:三组时钟测试均有 ADV_PASS,日志无未预期失败。

  3. 读取接口

    预期与判定:明确 B 响应与跨域完成不是同一个事件。

  4. 冻结构建

    预期与判定:保存 BUILD_ID、器件、时钟配置和输入摘要。

在解压后的 fpga-advanced 目录执行。软件仿真不需要 Vivado;硬件步骤需目标工具与板卡。

bash
python3 --version
iverilog -V
python3 flow.py sim > rtl-baseline.log
python3 flow.py prepare baseline --ila
# 预期创建 build/baseline/manifest.json 与 config.tcl

典型故障:把写响应当作工作完成

AXI 写响应在寄存器操作接受后即可返回,而目的域还可能在等待同步请求、读 FIFO 或传回结果。若收到 B 响应就立即读 RESULT,读到的是上次完成结果或复位值,这并不一定是跨域数据丢失。调用方必须使用本工程的 STATUS 契约判断完成,并在新启动被接受后等待 done 再取结果。

完成检查

  • 知道邮箱与异步 FIFO 的区别。
  • 三组软件基线已保存。
  • 独立构建与版本记录已建立。

延伸阅读与来源

本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。

继续阅读

FPGA

从 RTL 到板上运行的完整流程

建立约束、实现、下载与观测的最小工程闭环。

10 分钟
FPGA

第一个工程的引脚与时钟约束

区分电气连接与时间要求,避免“能生成位流就算正确”。

11 分钟
FPGA

如何读懂时序报告

从起点、终点、时钟和裕量找出失败路径的原因。

10 分钟