This project is a lightweight local sanity-check flow you can run before handing RTL to verification:
- Compile and simulate with VCS
- Open FSDB waveforms with Verdi
- Use one Makefile for compile, run, waveform viewing, and cleanup
.
├── Makefile
├── rtl/
│ └── async_fifo.sv
├── tb/
│ └── tb_async_fifo_smoke.sv
└── sim/
└── filelist.f
Make sure your environment provides:
vcsverdi- FSDB dump PLI support (typically provided by the Verdi setup)
make smokeExecution flow:
make compile: invoke VCS and generatesim/out/simvmake run: run simulation and producesim/out/run.logandsim/out/wave.fsdb
What this smoke test checks:
- Asynchronous write clock (
wr_clk=100MHz) and read clock (rd_clk≈71MHz) - Continuous writes for
TEST_NUM=DEPTH*4transactions - Scoreboard-style comparison on the read side (
expectedvsdout) - Immediate
$fatalon mismatch
make help # show help
make compile # compile only
make run # run only (requires compile first)
make verdi # open Verdi and load FSDB
make clean # remove simulation artifactsmake smoke SEED=123You can pass the following information to verification engineers:
- DUT:
rtl/async_fifo.sv - TB:
tb/tb_async_fifo_smoke.sv - filelist:
sim/filelist.f - smoke command:
make smoke - waveform viewer:
make verdi
If you later expand this into a regression flow (multiple tests, configs, and coverage), you can extend the existing Makefile with:
TEST=<case_name>COV=1switch (VCS coverage)- Regression scripts (batch run + PASS/FAIL summary)