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?
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