UVMArena

πŸ“‹ FIFO UVM Testbench

A comprehensive Universal Verification Methodology testbench for FIFO design verification

UVM SystemVerilog Verification FPGA

Project Overview

The FIFO UVM Testbench is a complete, production-ready verification environment for testing FIFO (First-In-First-Out) designs using the Universal Verification Methodology. This project demonstrates best practices in UVM testbench design with comprehensive stimulus generation, coverage collection, and verification.

The testbench supports parameterized data width (8 bits) and depth (16 elements) FIFO with full handshake protocol including write acknowledge and read valid signals. It includes directed tests, random stimulus generation, reference model verification, and an advanced FIFO Tracker component for real-time operation monitoring.

FIFO Specifications

8

Data Width (bits)

16

Depth (Elements)

11

UVM Components

3

Test Scenarios

✨ Key Features

🎯 Complete UVM Environment

Fully functional testbench with agent, driver, monitor, sequencer, scoreboard, reference model, and coverage components.

πŸ“Š Coverage Collection

Functional coverage metrics tracking FIFO operations, control signals, and edge cases for completeness assessment.

πŸ”„ Reference Model

Behavioral model implementation providing golden reference for scoreboard comparison and expected results generation.

πŸ“ Multiple Test Scenarios

Directed tests (fill, empty) and random stimulus generation for comprehensive and realistic verification coverage.

πŸ” FIFO Tracker (NEW)

Advanced transaction tracking with real-time occupancy monitoring, error detection, and detailed statistics reporting.

⚑ Efficient Constraints

Smart constraint distribution with weighted probability for realistic and comprehensive test stimulus generation.

πŸ› οΈ Technology Stack

Language

SystemVerilog

IEEE 1800 standard
Methodology

UVM 1.2

Universal Verification Methodology
Simulator

Riviera-PRO

Aldec SystemVerilog Simulator

πŸ—οΈ Testbench Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    TESTBENCH (tb_top)                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚           FIFO Environment                        β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚
β”‚  β”‚  β”‚        FIFO Agent                          β”‚  β”‚  β”‚
β”‚  β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚  β”‚
β”‚  β”‚  β”‚  β”‚  Sequencer  β”‚ Driver  β”‚ Monitor     β”‚  β”‚  β”‚  β”‚
β”‚  β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚
β”‚  β”‚                        β”‚                          β”‚  β”‚
β”‚  β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”‚  β”‚
β”‚  β”‚         β–Ό              β–Ό              β–Ό          β”‚  β”‚
β”‚  β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚  β”‚
β”‚  β”‚   β”‚Coverage  β”‚  β”‚Reference  β”‚  β”‚Scoreboardβ”‚     β”‚  β”‚
β”‚  β”‚   β”‚Collector β”‚  β”‚Model      β”‚  β”‚          β”‚     β”‚  β”‚
β”‚  β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚  β”‚
β”‚  β”‚                                                  β”‚  β”‚
β”‚  β”‚                   FIFO Tracker ◄─ Monitor       β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                        β”‚                                β”‚
β”‚                        β–Ό                                β”‚
β”‚               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                       β”‚
β”‚               β”‚   DUT (FIFO)    β”‚                       β”‚
β”‚               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”§ Main Components

Sequence Item

Base transaction class with write/read controls and response feedback.

fifo_seq_item.sv
Sequencer & Driver

Manages stimulus generation and applies transactions to DUT via virtual interface.

fifo_sequencer.sv, fifo_driver.sv
Monitor

Captures transactions from DUT on handshake signals. Non-intrusive observation.

fifo_monitor.sv
Agent

Hierarchical container connecting driver, monitor, and sequencer components.

fifo_agent.sv
Reference Model

Behavioral FIFO model generating expected outputs for comparison.

fifo_ref_model.sv
Scoreboard

Compares expected vs. actual results. Reports mismatches and statistics.

fifo_scoreboard.sv
Coverage Collector

Functional coverage tracking for states, operations, and edge cases.

fifo_coverage.sv
⭐ FIFO Tracker

Advanced transaction tracking with occupancy monitoring and statistics.

fifo_tracker.sv (NEW)

πŸ“‹ Test Scenarios

Directed Tests
  • Fill Sequence: Fills FIFO to capacity, tests full condition
  • Empty Sequence: Empties FIFO completely, tests empty condition
  • Covers boundary conditions and edge cases
Random Testing
  • Count: 20-200 transactions (configurable)
  • Distribution: 50% read, 50% write, 80% idle cycles
  • Comprehensive functional coverage

πŸ” FIFO Tracker - Key Capabilities

  • βœ“ Real-time Occupancy Tracking - Monitor FIFO size dynamically
  • βœ“ Transaction History Logging - Up to 1000 timestamped entries
  • βœ“ Error Detection - Write-while-full and read-while-empty
  • βœ“ Data Mismatch Detection - Verify data integrity
  • βœ“ Comprehensive Statistics - Auto-generated end-of-sim reports
  • βœ“ Public Query Methods - Dynamic access to occupancy and counts

πŸ“ Project Files

Design & Testbench

β”œβ”€β”€ design.sv (DUT FIFO implementation)

β”œβ”€β”€ testbench.sv (Top-level testbench)

└── fifo_if.sv (Virtual interface)


UVM Components

β”œβ”€β”€ fifo_pkg.sv (Package)

β”œβ”€β”€ fifo_seq_item.sv (Transaction)

β”œβ”€β”€ fifo_sequence.sv (Stimulus)

β”œβ”€β”€ fifo_sequencer.sv (Sequencer)

β”œβ”€β”€ fifo_driver.sv (Driver)

β”œβ”€β”€ fifo_monitor.sv (Monitor)

β”œβ”€β”€ fifo_agent.sv (Agent)

β”œβ”€β”€ fifo_env.sv (Environment)

└── fifo_test.sv (Test classes)


Verification Components

β”œβ”€β”€ fifo_ref_model.sv (Reference model)

β”œβ”€β”€ fifo_scoreboard.sv (Scoreboard)

β”œβ”€β”€ fifo_coverage.sv (Coverage)

└── fifo_tracker.sv (Transaction tracker) ⭐


Documentation & Scripts

β”œβ”€β”€ documentation.html (Full documentation)

└── run.sh (Simulation script)

βš™οΈ Quick Start

1. Compile the design and testbench:

vlib work
vlog -timescale 1ns/1ps design.sv testbench.sv

2. Run the simulation:

vsim -c tb_top -do "run -all; quit"

3. Run different test scenarios:

# Directed test (fill/empty)
vsim tb_top +UVM_TESTNAME=fifo_directed_test

# Random test
vsim tb_top +UVM_TESTNAME=fifo_rand_test

1000+

Lines of SystemVerilog

11

UVM Components

100%

Coverage Ready

Ready to Explore This Project?

Access the complete documentation, run simulations, and verify the FIFO design with comprehensive UVM testbench.

πŸ“– Full Documentation πŸ’» View on GitHub