A parameterized synchronous FIFO verified using SymbiYosys + Z3 SMT solver.
- Parameterized
DATA_WIDTHandDEPTH(default 8-bit × 16-deep) - Extra-bit pointer method for full/empty disambiguation
- Active-low async reset (
rst_n) countoutput tracks occupancy in real time
- On reset:
empty=1,full=0,count=0 fullandemptynever simultaneously highcountalways in range[0, DEPTH]fulliffcount == DEPTHemptyiffcount == 0- No overflow — write ignored when full
- No underflow — read ignored when empty
- Count increments by 1 on write-only (not full)
- Count decrements by 1 on read-only (not empty)
- Count stable on simultaneous valid read + write
- FIFO reaches
fullstate - FIFO drains from non-empty to
empty - FIFO reaches half-full (
count == DEPTH/2)
fv-fifo/
├── fifo.sv # RTL + formal properties (ifdef FORMAL)
├── fifo.sby # SymbiYosys configuration
└── README.md
sby -f fifo.sbyExpected: DONE (PASS, rc=0)
- SymbiYosys — formal verification front-end
- Z3 — SMT solver backend
- OSS CAD Suite