实验: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 可能不同,不要直接迁移这一假设。

实验:FIFO 仿真与边界条件验证:关键关系输入请求write / read边沿前标志full / empty参考队列push / pop输出比较数据 + 计数接受的写入数 − 接受的读出数 = 当前占用量
实验:FIFO 仿真与边界条件验证:关键关系(原创示意,非器件引脚图;窄屏可横向滑动)

动手步骤与预期结果

按下面的顺序执行,每一步都留下可复核的证据。若当前步骤的预期条件未满足,先停在该阶段定位原因;不要继续累积后续错误。涉及工具、板卡或专用硬件的步骤,需要使用本工程实际版本和配置,示例数值不能直接替代设备规格。

  1. 解压并阅读 README

    预期与判定:确认宽度、深度与同时读写语义;需要 iverilog 和 vvp。

  2. 执行 bash run.sh

    预期与判定:应以零退出码打印 PASS;编译和仿真产物在临时目录,不依赖旧输出。

  3. 按边界解释结果

    预期与判定:分别分析空读、填满、满写、同时读写和排空;验证次序而非只看最终数量。

  4. 注入错误验证检查器

    预期与判定:在副本中故意改变读数据或指针更新,测试应失败;保留正常版本供复测。

下载本站 FIFO 实验包并进入解压目录后执行。

Shell
bash run.sh
# 预期:PASS,退出码为 0。
# 非零退出必须视为失败,不能只依赖终端最后一行。

典型故障:从现象到复测

下面的案例是为说明定位方法而构造的教学场景,不代表真实客户事故或本平台设备实测。实践时先确认现象与证据相符,再采用相应修复;若证据不同,应回到前一步缩小范围,避免把同一种表象都归因于同一个问题。

bash
unzip fifo-simulation.zip
cd fifo-simulation
chmod +x run.sh
./run.sh

完成检查

  • 自检输出 PASS
  • 能解释满/空边界行为
  • 修改数据后仍保持顺序检查

延伸阅读与来源

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

继续阅读

实验

实验:FPGA FIFO 上板与调试

把已自检的 FIFO 作为板级验证对象,规划约束与探针。

10 分钟
实验

实验:最小 DUT 的硬件仿真实践

以同一个 FIFO 为基线,准备模式选择、编译运行和比对记录。

10 分钟
实验

实验:相同工作负载下的性能测量

用 CSV 和分析脚本分别计算端到端与运行阶段指标。

10 分钟