Uvm_sequencer usage

Hi All,

From above pdf, referring to Figure 1—Typical UVM Testbench Architecture

Generally uvm_sequencer is a part of uvm_agent.
But here it is inside uvm_env.

a) Can the uvm_sequencer be a part of uvm_env?

b) Also, in an uvm_tb, can we have only uvm_sequencer without uvm_driver?
In any TB, both driver and sequencer should be present for proper handshake.
Here only uvm_sequencer has been shown.

Is it possible to develop small uvm tb only with uvm_driver or only with sequencer?

Kindly share opinion on a and b.

Thank You,

I believe this is left over from the OVM which had a seperate virtual sequencer class. The UVM does make any type distinction between virtual sequencers (and sequences); but it is now leftover terminology for a sequence/sequencer that does not directly send items to a driver.

In most cases, you can start a sequence on a null sequencer handle instead of creating a separate virtual sequencer component.

but, the sequence should never be a null sequence. for the starting phase right that how we write code for the sequence right.

task pre_body();
if(starting_phase != null) begin
starting_phase.raise_objection(this); /the raise obj and drop obj which are helps to concurrency control/
starting_phase.phase_done.set_drain_time(this,100);
end
endtask