Drivers, Monitors and Bus Functional Models

The driver and monitor are the two components that touch the DUT’s pins. Together they form the bus functional model (BFM) — the translation layer between abstract transactions and the real protocol.

Driver: transaction → pins

A driver pulls a transaction from its sequencer and performs the exact handshake the protocol demands — assert valid, present data, wait for ready, deassert. It is the only component allowed to drive the interface. A monitor does the mirror image: it samples the same handshake and emits a reconstructed transaction to the scoreboard and coverage, driving nothing.

This example shows a valid/ready handshake being driven and simultaneously monitored, with the reconstructed transaction checked against what was sent:

module tb;
  reg clk=0, rst_n=0;
  reg        valid; reg [7:0] data;      // interface
  reg        ready = 1;
  always #5 clk = ~clk;

  // driver: send one byte with a valid/ready handshake
  task send(input [7:0] b);
    begin
      @(posedge clk); valid <= 1; data <= b;
      @(posedge clk); while (!ready) @(posedge clk);
      valid <= 0;
    end
  endtask

  // monitor: capture accepted bytes
  reg [7:0] seen; integer got = 0;
  always @(posedge clk) if (valid && ready) begin seen = data; got = got + 1; end

  initial begin
    valid=0; data=0; #3 rst_n=1;
    send(8'hA5); send(8'h3C);
    #10 $display("driver sent 2 bytes, monitor captured %0d, last=%h", got, seen);
    $finish;
  end
endmodule
driver sent 2 bytes, monitor captured 2, last=3c

Check yourself

What is a bus functional model (BFM)?

The driver+monitor pair that translates between abstract transactions and the actual pin-level protocol of an interface. The driver turns transactions into protocol-correct pin activity; the monitor turns observed pin activity back into transactions.

Why must driving and monitoring be in separate components rather than one?

So the monitor is an independent witness of what really happened on the bus, not an echo of what the driver intended. If one component both drove and reported, a driver bug could be masked. Separation also lets the monitor feed coverage and checking without affecting stimulus.

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