Differences between Active and Passive agents in OVM

Typically Any OVM active agent will contain
1.Env
2.Driver
3.monitor
4.Scoreboard
5.coverage collector
6.sequencer

so what will a passive agent consists of? are the below items correct?
or am I missing anything.
1.Env
2.-------
3.monitor
4.Scoreboard
5.coverage collector
6.--------

Thanks in advance
Ramid

That’s correct. The clue is in the labels Passive and Active for the two basic configurations. Active can drive and monitor stimulus, passive can only monitor.

In reply to mperyer:

Below is one more difference in active and passive agent with respect to monitor.

In Active agent monitor will not shout any protocol error, instead give warnings. Whereas passive agent will shout for any protocol error.

In reply to Vaibhav Tekale:

For an active BFM, why do we actually require a monitor? We are not going to check the OVM agent.

Why can’t we have following configuration?

function void build();
  super.build();
  if(cfg_obj.i_active == OVM_ACTIVE)
  begin
    seqr = my_seqr::type_id::create("seqr", this);
    drvr = my_drvr::type_id::create("drvr", this);
  end
  else
    montr = my_montr::type_id::create("montr", this);
endfunction: build

The role of the monitor is to analyze what’s going on on the interface and convert that activity to analysis transactions, effectively a mirror of what the driver does. The reason is that you should be analyzing/checking what is happening on the interface independently of what the driver does. This helps to make your agent reusable for both passive and active cases.

Regarding your list of agent components:

Each agent should have:
agent - container for the following
driver (active only)
sequencer (active only)
monitor (active/passive)
configuration object (active/passive)

You might add protocol specific components that it should be possible to optionally compile:
functional coverage collector (active/passive)
scoreboard (active/passive)