What is Functional Verification?

Functional verification answers one question: does the design do what the specification says — and nothing it shouldn’t? On a modern chip, verification is 60–70% of the total effort, because a bug that reaches silicon can cost a respin worth months and millions. This track teaches the methodology that finds those bugs before tape-out.

Directed vs constrained-random

A directed test hand-writes one stimulus and checks one expected result — clear, but you only find the bugs you thought to look for, and the number of tests explodes. Constrained-random verification (CRV) instead describes the legal space of stimulus and lets the tool generate thousands of randomised, legal scenarios, while functional coverage measures which interesting cases were actually hit. Random finds the bugs you did not anticipate; coverage tells you when you are done.

Every verification environment, however simple, has the same skeleton: generate stimulus, drive it into the DUT, observe the outputs, and check them against an independent reference. The runnable example is the smallest honest testbench — it drives a DUT and fails loudly on any mismatch:

module dut(input [3:0] a, b, output [4:0] sum);
  assign sum = a + b;                  // design under test
endmodule

module tb;
  reg [3:0] a, b; wire [4:0] sum; integer i, errors = 0;
  dut u(a, b, sum);
  initial begin
    for (i = 0; i < 16; i = i + 1) begin
      a = $random; b = $random;        // stimulus
      #1;
      if (sum !== (a + b)) begin       // self-checking against a reference
        errors = errors + 1;
        $display("MISMATCH a=%0d b=%0d got=%0d exp=%0d", a, b, sum, a+b);
      end
    end
    $display("ran 16 random vectors, errors=%0d %s", errors, errors? "FAIL":"PASS");
    $finish;
  end
endmodule
ran 16 random vectors, errors=0 PASS

Check yourself

Why has constrained-random verification largely replaced purely directed testing for complex blocks?

Directed tests only exercise scenarios the engineer thought of, and the count grows unmanageably with design complexity. Constrained-random generates many legal, unforeseen scenarios automatically, finding corner-case bugs directed tests miss; functional coverage then measures which scenarios were actually reached.

What are the four activities every testbench performs?

Generate stimulus, drive it into the DUT, monitor/observe the DUT’s behaviour, and check the results against an independent reference (a golden model or expected value). Coverage is layered on top to measure completeness.

Have questions about this topic?
Share your question in comments or talk to our mentor team for batch guidance.

Need Fee, Duration, or Demo Class Details?

Talk to our admin team for the latest batch plan and career guidance.

Contact Admin Team
▶ Try it in the ChipXpert Lab

Compile and simulate this in the browser — no install. Edit the code and re-run instantly.

Open in Verification Lab

Learn Verilog with mentors, labs and placement support

This free series is maintained by the ChipXpert training team in Hyderabad & Bengaluru. Go deeper with instructor-led courses on real EDA tools.

Explore VLSI Courses
Next batch starts 18th November 2026
Start your VLSI career with ChipXpert

Live online and classroom batches in Hyderabad & Bengaluru. Fill in your details and a counsellor will call you back.

  • Real EDA tools in your browser: industry-standard EDAReal EDA tools in your browser
  • Recorded sessions on the elearn portalRecorded sessions
  • Placement assistance: resume, mock interviewsPlacement assistance
  • Merit scholarship up to 60% · EMI optionsScholarship up to 60%
Hi! Ask me about courses, fees, batches or discounts. ×
BENGALURU
HYDERABAD