semiconductor-pipeline / docs /USER_GUIDE.md
Sai Kumar Taraka
Add user guide, UVM VIP packaging, regression scripts
eb82b91

UVM Verification Framework — User Guide

Overview

Automated UVM testbench generation from YAML / FuseSoC .core specifications. Outputs a complete, ready-to-compile UVM environment for protocol interfaces (UART, SPI, I2C, APB, AXI4-Lite, Wishbone) with AI/ML-powered coverage optimization.

Architecture

Spec (.core / .yaml)
       |
       v
 Generation Engine (Jinja2 + ML)
       |
       v
 +----------------------------+
 |  Generated UVM Testbench  |
 |  +----------------------+ |
 |  | testbench.sv          | |
 |  | interface_{name}.sv   | |
 |  | sequence_item_{n}.sv  | |
 |  | driver_{name}.sv      | |
 |  | monitor_{name}.sv     | |
 |  | agent_{name}.sv       | |
 |  | env_{name}.sv         | |
 |  | scoreboard_{name}.sv  | |
 |  | coverage_collector.sv | |
 |  | protocol_checker.sv   | |
 |  | ral_model_{name}.sv   | |
 |  | base_sequence_{n}.sv  | |
 |  | test_{name}.sv        | |
 |  +----------------------+ |
 +----------------------------+

Quick Start

1. Install

pip install -r requirements.txt
pip install -r requirements-dev.txt   # optional: dev/lint

2. Generate a UVM testbench

# From YAML spec
python -m src.main --spec configs/uart_demo.yaml

# From FuseSoC .core spec
python -m src.main --spec configs/uart16550-1.5.core

# With auto-training (AI coverage optimization)
python -m src.main --spec configs/uart16550-1.5.core --auto-train --max-iterations 3

3. Output

output/{design_name}_tb/
  testbench.sv              # Top-level module
  interface_{name}.sv       # Clocking + modport
  sequence_item_{name}.sv   # Transaction object
  driver_{name}.sv          # Bus driver
  monitor_{name}.sv         # Bus monitor
  agent_{name}.sv           # Agent (sequencer + driver + monitor)
  environment_{name}.sv     # Env (agent + scoreboard + coverage + RAL)
  scoreboard_{name}.sv      # Scoreboard (TX/RX compare, error check)
  coverage_collector_{name}.sv  # Functional coverage groups
  protocol_checker_{name}.sv    # SVA assertions
  ral_model_{name}.sv       # RAL model + adapter + predictor
  base_sequence_{name}.sv   # Sequence library
  test_{name}.sv            # Test library
  compile.f                 # Compile file list
  sim_{name}.tcl            # Simulation script

Spec Format

YAML format

design_name: uart16550
protocol: uart

interfaces:
  - name: bus
    direction: slave
    protocol: wishbone
    signals:
      - {name: addr, direction: input, width: 3}
      - {name: data_in, direction: input, width: 8}
      - {name: data_out, direction: output, width: 8}

  - name: serial
    direction: master
    protocol: uart
    signals:
      - {name: tx, direction: output, width: 1}
      - {name: rx, direction: input, width: 1}

registers:
  - name: RBR
    address: 0x00
    access: ro
    size: 8
    description: Receiver Buffer Register
  - name: THR
    address: 0x00
    access: wo
    size: 8
  - name: IER
    address: 0x01
    access: rw
    size: 8
  - name: LCR
    address: 0x03
    access: rw
    size: 8
    reset: 0x03

clocks:
  clk: 50MHz
  reset: {name: rst_n, polarity: active_low}

FuseSoC .core format

See configs/uart16550-1.5.core for a complete example.

UVM VIP Integration

Packaging as a VIP

The generated output is structured as a self-contained UVM Verification IP:

{design_name}_vip/
  pkg/
    {design_name}_vip_pkg.sv       # UVM package (all files)
    {design_name}_reg_pkg.sv        # RAL package
  src/
    {design_name}_if.sv             # Interface
    {design_name}_agent.sv          # Agent
    {design_name}_env.sv            # Environment
    {design_name}_driver.sv         # Driver
    {design_name}_monitor.sv        # Monitor
    {design_name}_scoreboard.sv     # Scoreboard
    {design_name}_coverage.sv       # Coverage collector
    {design_name}_checker.sv        # Protocol checker
    {design_name}_ral.sv            # RAL model
    {design_name}_sequences.sv      # Sequence library
    {design_name}_tests.sv          # Test library
  sim/
    compile.f                       # Compile list
    sim.do                          # Questa script
    sim.tcl                         # Generic TCL script
  examples/
    smoke_test.sv                   # Standalone testbench

Integration into a larger SoC environment

// 1. Import the VIP
import uart_vip_pkg::*;

// 2. Instantiate interface
uart_if uart_if_inst (
  .clk   (sys_clk),
  .rst_n (sys_rst_n),
  .tx    (uart_tx),
  .rx    (uart_rx)
);

// 3. Configure via config_db
initial begin
  uvm_config_db#(virtual uart_if)::set(
    null, "uvm_test_top", "vif", uart_if_inst
  );
end

// 4. Run test
initial begin
  run_test("uart_smoke_test");
end

Configuration parameters

Parameter Type Default Description
protocol string "uart" Protocol selection
model_type string "v2" Generation model (template / v2)
rl_strategy string "ucb" RL exploration strategy
enable_learning bool true Enable RL + coverage feedback
strict_uvm bool true Generate IEEE 1800.2 compliant code
max_iterations int 1 Auto-training iterations

AI/ML Features

Coverage Prediction

The coverage predictor uses a 3-model ensemble (RandomForest + GradientBoosting + LinearRegression) with Ridge meta-blender to predict functional coverage gaps and suggest targeted sequences.

Reinforcement Learning

Q-learning with:

  • Double Q-learning (two independent Q-tables)
  • Prioritized experience replay
  • N-step returns
  • Eligibility traces
  • 5 exploration strategies (epsilon-greedy, softmax, UCB, Thompson, NoisyNet)

States are encoded as {protocol}:{file_type}:{complexity}.

Auto-Training Loop

1. Generate UVM testbench
2. Run simulation (or stub)
3. Predict coverage gaps
4. Generate targeted sequences
5. Re-train RL model
6. Repeat until coverage target met

Regression Management

Running regressions

# Single test
python -m src.main --spec configs/uart16550-1.5.core \
  --test smoke

# All tests
python regression/run_regression.py \
  --spec configs/uart16550-1.5.core

# Multi-seed regression
python regression/run_regression.py \
  --spec configs/uart16550-1.5.core \
  --seeds 100 \
  --tests smoke,loopback,interrupt

YAML regression spec

regression:
  name: uart_full_regression
  spec: configs/uart16550-1.5.core
  tests:
    - uart_smoke_test
    - uart_reg_access_test
    - uart_loopback_test
    - uart_interrupt_test
    - uart_fifo_test
    - uart_random_test
  seeds: [10, 20, 30, 50, 100]
  simulator: questa
  coverage: true
  output: results/

Simulator Support

Simulator Status Notes
Questa/ModelSim Full support via .do / .tcl script
VCS Compatible (IEEE 1800.2 compliant)
Xcelium Compatible
Icarus Verilog Basic support (stub mode)

Project Structure

UVM-verification/
  configs/             # Spec files (.yaml, .core)
  docs/                # Documentation
  frontend/            # React UI
  protocols/           # Protocol definitions (UART, SPI, I2C, etc.)
  regression/          # Regression scripts
  src/                 # Core engine
    features/          # Spec feature extraction
    generation/        # Template engine
      templates/       # Jinja2 UVM templates
    models/            # ML models (RL, coverage predictor, etc.)
    evaluation/        # Quality scoring, SV checking
    pipeline.py        # Auto-training pipeline
  vip/                 # Packaged VIP files
  output/              # Generated testbenches

Testing

# Run unit tests
python -m pytest tests/

# Test coverage prediction
python -m pytest tests/test_coverage_predictor.py -v

# Test RL learner
python -m pytest tests/test_rl_learner.py -v

# Test pipeline end-to-end
python test_pipeline.py

Docker

docker-compose up --build
# Frontend: http://localhost:7860
# API:      http://localhost:8000/docs

License

MIT License — see LICENSE file.