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 的沿前满空判断和注册读输出,把位宽扩为三十二位,并沿用冻结构建、发布清单和按钮复位验收。新增复杂度集中在接口和跨域边界,便于工程师沿着同一笔事务查明问题。
协议选择与适用范围
这里选择 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;硬件步骤需目标工具与板卡。
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。不要把旧课程生成的位流或探针文件复制过来,新的时钟结构、接口和调试核已经改变,必须在本工程独立完成综合、实现与审查。
- 确认先修
预期与判定:能解释上一课程 FIFO 注册读输出为什么延后一拍。
- 运行基线
预期与判定:三组时钟测试均有 ADV_PASS,日志无未预期失败。
- 读取接口
预期与判定:明确 B 响应与跨域完成不是同一个事件。
- 冻结构建
预期与判定:保存 BUILD_ID、器件、时钟配置和输入摘要。
在解压后的 fpga-advanced 目录执行。软件仿真不需要 Vivado;硬件步骤需目标工具与板卡。
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 的区别。
- 三组软件基线已保存。
- 独立构建与版本记录已建立。
延伸阅读与来源
本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。
- Arm AMBA AXI / ACE IHI0022H
A3 通道握手;B1 AXI4-Lite。寄存器行为与示例实现为本文原创设计。
- AMD UG903 · Constraining Asynchronous Signals
跨域数据路径最大延时与时钟组例外的优先级。
- AMD UG908 · Programming and Debugging
Hardware Manager 与 ILA 配置、触发及采集。
继续阅读
FPGA从 RTL 到板上运行的完整流程
建立约束、实现、下载与观测的最小工程闭环。
第一个工程的引脚与时钟约束
区分电气连接与时间要求,避免“能生成位流就算正确”。
如何读懂时序报告
从起点、终点、时钟和裕量找出失败路径的原因。
黄河电子