实验:FIFO 仿真与边界条件验证
运行原创同步 FIFO 自检,观察容量、顺序和同时读写语义。
先修知识掌握 Verilog、时钟与复位。
适用环境通用 RTL 方法;具体工具与器件选项以项目版本为准
验证状态官方资料对照与原创教学示例 · 板卡 / Palladium 步骤待设备验证
实验目标和环境
使用附件中的四深度同步 FIFO 与自检 Testbench。需要 Icarus Verilog 和 vvp;运行 ./run.sh。工程不依赖客户 RTL。测试通过时输出 PASS,任何断言不满足会以失败状态退出。
逐步运行
先检查空状态,再连续写满四项;尝试满时写入,确认拒绝且计数不变;依次读出并检查顺序;最后验证空读、复位和部分占用时同时读写。先预测计数和输出,再对照测试结果。
理解边界语义
本示例在周期开始时根据 full/empty 判定请求是否接受。满时同时读写只接受读,空时同时读写只接受写;不是 fall-through FIFO。修改实现以支持其他语义时,必须同时修改规范和测试预期。
原理与信号关系
FIFO 的检查器应维护独立的期望队列。写入是否成功由写使能与 full 的采样前状态决定,读出是否成功由读使能与 empty 决定;不能仅按请求数推断队列大小。边界同时读写的行为必须事先定义:本站深度 4 的教学实现使用边沿前标志,满时同时读写只读,空时同时读写只写。其他 FIFO IP 可能不同,不要直接迁移这一假设。
动手步骤与预期结果
按下面的顺序执行,每一步都留下可复核的证据。若当前步骤的预期条件未满足,先停在该阶段定位原因;不要继续累积后续错误。涉及工具、板卡或专用硬件的步骤,需要使用本工程实际版本和配置,示例数值不能直接替代设备规格。
- 解压并阅读 README
预期与判定:确认宽度、深度与同时读写语义;需要 iverilog 和 vvp。
- 执行 bash run.sh
预期与判定:应以零退出码打印 PASS;编译和仿真产物在临时目录,不依赖旧输出。
- 按边界解释结果
预期与判定:分别分析空读、填满、满写、同时读写和排空;验证次序而非只看最终数量。
- 注入错误验证检查器
预期与判定:在副本中故意改变读数据或指针更新,测试应失败;保留正常版本供复测。
下载本站 FIFO 实验包并进入解压目录后执行。
bash run.sh
# 预期:PASS,退出码为 0。
# 非零退出必须视为失败,不能只依赖终端最后一行。典型故障:从现象到复测
下面的案例是为说明定位方法而构造的教学场景,不代表真实客户事故或本平台设备实测。实践时先确认现象与证据相符,再采用相应修复;若证据不同,应回到前一步缩小范围,避免把同一种表象都归因于同一个问题。
unzip fifo-simulation.zip
cd fifo-simulation
chmod +x run.sh
./run.sh完成检查
- 自检输出 PASS
- 能解释满/空边界行为
- 修改数据后仍保持顺序检查
延伸阅读与来源
本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。
继续阅读
实验实验:FPGA FIFO 上板与调试
把已自检的 FIFO 作为板级验证对象,规划约束与探针。
实验:最小 DUT 的硬件仿真实践
以同一个 FIFO 为基线,准备模式选择、编译运行和比对记录。
实验:相同工作负载下的性能测量
用 CSV 和分析脚本分别计算端到端与运行阶段指标。
黄河电子