Connect a sequence to a sequencer

Hello,
I’m an engineering student who currently study ovm environnement. I am facing an issue in my verif environnement. My test doesn’t want to start. I think the issue is when I want to “connect” the sequence to the sequencer (nothing happens).

seq.start(m_env.m_agent.m_sequencer)

Can we “connect” theses components through classes?
Thanks for you time.
Florian

You to put you r line of code in run method. You may want to look at www.verification-academy.org for some tutorials and examples.

Thanks dave_59, but I already put this line in the run method and it doesn’t work. I do some examples on www.verification-academy.org and I read Open Verification Methodology Cookbook. I’n trying to reuse a example which work, but in my case I have more classes and sub-classes as you can see below :

# //  QuestaSim-64 6.5f Jun 16 2010 Linux 2.6.9-89.ELsmp
# //
# //  Copyright 1991-2010 Mentor Graphics Corporation
# //              All Rights Reserved.
# //
# //  THIS WORK CONTAINS TRADE SECRET AND 
# //  PROPRIETARY INFORMATION WHICH IS THE PROPERTY
# //  OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS
# //  AND IS SUBJECT TO LICENSE TERMS.
# //
# vsim +CERTE_EXTRACT -L ieee -L moduleware_asp -L ovm_lib -L std -L synopsys -L tb_lib_ref -L work -do {run -all} -l transcript.txt -i -t ns work.top 
# Loading sv_std.std
# Loading sv_std.mti_fli
# Loading ovm_lib.ovm_pkg(fast)
# Loading work.txn_pkg(fast)
# Loading work.dut_model_pkg(fast)
# Loading work.analysis_group_pkg(fast)
# Loading work.agent_pkg(fast)
# Loading work.env_pkg(fast)
# Loading work.sequence1_pkg(fast)
# Loading work.test_pkg(fast)
# Loading work.top(fast)
# Loading work.dut_phase_mngt_top_struct_wrapper_pkg(fast)
# Loading work.my_if_sv_unit(fast)
# Loading work.my_if(fast)
# run -all 
# ----------------------------------------------------------------
# OVM-2.1.1
# (C) 2007-2009 Mentor Graphics Corporation
# (C) 2007-2009 Cadence Design Systems, Inc.
# ----------------------------------------------------------------
# OVM_INFO @ 0: reporter [RNTST] Running test test...
# OVM_INFO @ 0: ovm_test_top [ovm_test_top] Build
# OVM_INFO @ 0: ovm_test_top.m_env [ovm_test_top.m_env] Build
# OVM_INFO @ 0: ovm_test_top.m_env.m_agent [ovm_test_top.m_env.m_agent] Build
# OVM_INFO @ 0: ovm_test_top.m_env.m_agent.m_driver [ovm_test_top.m_env.m_agent.m_driver] Build
# OVM_INFO @ 0: ovm_test_top.m_env.m_agent.m_monitor [ovm_test_top.m_env.m_agent.m_monitor] Build
# OVM_INFO @ 0: ovm_test_top.m_env.m_agent.m_sequencer [ovm_test_top.m_env.m_agent.m_sequencer] Build
# OVM_INFO @ 0: ovm_test_top.m_env.m_analysis_group [ovm_test_top.m_env.m_analysis_group] Build
# OVM_INFO @ 0: ovm_test_top.m_env.m_analysis_group.m_coverage [ovm_test_top.m_env.m_analysis_group.m_coverage] Build
# OVM_INFO @ 0: ovm_test_top.m_env.m_analysis_group.m_scoreboard [ovm_test_top.m_env.m_analysis_group.m_scoreboard] Build
# OVM_INFO @ 0: ovm_test_top.m_env.m_agent [ovm_test_top.m_env.m_agent] Connect
# OVM_INFO @ 0: ovm_test_top.m_env.m_analysis_group.m_coverage [ovm_test_top.m_env.m_analysis_group.m_coverage] Connect
# OVM_INFO @ 0: ovm_test_top.m_env.m_analysis_group.m_scoreboard [ovm_test_top.m_env.m_analysis_group.m_scoreboard] Connect
# OVM_INFO @ 0: ovm_test_top.m_env.m_analysis_group [ovm_test_top.m_env.m_analysis_group] Connect
# OVM_INFO @ 0: ovm_test_top.m_env [ovm_test_top.m_env] Connect
# OVM_INFO @ 0: ovm_test_top.m_env [ovm_test_top.m_env] End of elaboration
# ----------------------------------------------------------------------
# Name                     Type                Size                Value
# ----------------------------------------------------------------------
# ovm_test_top             test                -          ovm_test_top@4
#   m_env                  env                 -                 m_env@6
#     m_agent              agent               -               m_agent@8
#       driv_ap            ovm_analysis_port   -              driv_ap@14
#       m_driver           driver              -             m_driver@18
#         driv_ap          ovm_analysis_port   -              driv_ap@56
#         rsp_port         ovm_analysis_port   -             rsp_port@22
#         seq_item_port    ovm_seq_item_pull_+ -        seq_item_port@54
#         sqr_pull_port    ovm_seq_item_pull_+ -        sqr_pull_port@20
#       m_monitor          monitor             -            m_monitor@16
#         mon_ap           ovm_analysis_port   -               mon_ap@58
#       m_sequencer        sequencer           -          m_sequencer@24
#         rsp_export       ovm_analysis_export -           rsp_export@26
#         seq_item_export  ovm_seq_item_pull_+ -      seq_item_export@50
#         default_sequence string              19    ovm_random_sequence
#         count            integral            32                     -1
#         max_random_count integral            32                   'd10
#         sequences        array               3                       -
#           [0]            string              19    ovm_random_sequence
#           [1]            string              23   ovm_exhaustive_sequ+
#           [2]            string              19    ovm_simple_sequence
#         max_random_depth integral            32                    'd4
#         num_last_reqs    integral            32                    'd1
#         num_last_rsps    integral            32                    'd1
#       mon_ap             ovm_analysis_port   -               mon_ap@12
#       is_active          ovm_active_passive+ 1              OVM_ACTIVE
#     m_analysis_group     analysis_group      -     m_analysis_group@10
#       driv_export        ovm_analysis_export -          driv_export@64
#       dut_export         ovm_analysis_export -           dut_export@62
#       m_coverage         coverage            -           m_coverage@66
#         driv_export      ovm_analysis_export -          driv_export@96
#         driv_fifo        tlm_analysis_fifo + -            driv_fifo@82
#           analysis_expo+ ovm_analysis_imp    -      analysis_export@92
#           get_ap         ovm_analysis_port   -               get_ap@90
#           get_peek_expo+ ovm_get_peek_imp    -      get_peek_export@86
#           put_ap         ovm_analysis_port   -               put_ap@88
#           put_export     ovm_put_imp         -           put_export@84
#         mon_export       ovm_analysis_export -           mon_export@94
#         mon_fifo         tlm_analysis_fifo + -             mon_fifo@70
#           analysis_expo+ ovm_analysis_imp    -      analysis_export@80
#           get_ap         ovm_analysis_port   -               get_ap@78
#           get_peek_expo+ ovm_get_peek_imp    -      get_peek_export@74
#           put_ap         ovm_analysis_port   -               put_ap@76
#           put_export     ovm_put_imp         -           put_export@72
#       m_scoreboard       scoreboard          -         m_scoreboard@68
#         dut_export       ovm_analysis_export -          dut_export@124
#         dut_fifo         tlm_analysis_fifo + -            dut_fifo@110
#           analysis_expo+ ovm_analysis_imp    -     analysis_export@120
#           get_ap         ovm_analysis_port   -              get_ap@118
#           get_peek_expo+ ovm_get_peek_imp    -     get_peek_export@114
#           put_ap         ovm_analysis_port   -              put_ap@116
#           put_export     ovm_put_imp         -          put_export@112
#         mon_export       ovm_analysis_export -          mon_export@122
#         mon_fifo         tlm_analysis_fifo + -             mon_fifo@98
#           analysis_expo+ ovm_analysis_imp    -     analysis_export@108
#           get_ap         ovm_analysis_port   -              get_ap@106
#           get_peek_expo+ ovm_get_peek_imp    -     get_peek_export@102
#           put_ap         ovm_analysis_port   -              put_ap@104
#           put_export     ovm_put_imp         -          put_export@100
#         check_response   integral            1                     'h1
#       mon_export         ovm_analysis_export -           mon_export@60
# ----------------------------------------------------------------------
# CERTE: CREATING BASE EXTRACTOR
# OVM_INFO @ 0: ovm_test_top [test] Starting test...
# ----------------------------------------------------------------------
# Name                     Type                Size                Value
# ----------------------------------------------------------------------
# sequence1                sequence1           -           sequence1@127
#   req                    object              -                  <null>
#   rsp                    object              -                  <null>
# ----------------------------------------------------------------------
# OVM_INFO @ 0: ovm_test_top [test] Test is working

The test stops when I want to start the sequencement (sequence <=> sequencer)

When you say “nothing happens”, that is not descriptive enough to help. Something must be happening, you just can’t see it. You will need to debug your problem either by setting breakpoints in your code or putting in $display statements.

You’re right, something must be happening… Indeed, in my run task, I wrote:

task run();
    $display("in run test 1");
    seq = new();
    seq.print();
    $display("in run test 2");
    <font color=red>**seq.start(m_test_sequencer);**</font>
    $display("in run test 3");
    global_stop_request();
  endtask: run

I can see “in run test 1” and “in run test 2” but not “in run test 3”. I also put some display statements in my sequence but nothing is displayed.
Where goes the program after the line “seq.start(m_test_sequencer);” ? Directly into my sequence ?

I share my test environnement, if it can help:


Can you check if Driver is receiving the sequence item properly?

I assume below constructs in your driver. Can you confirm these are being printed properly?
Or better put breakpoints in driver’s run code and see how it is proceeding.
//Indriver
seq_item_port.get_next_item(req);

$display(“something”);

seq_item_port.item_done();
$display(“some other thing”);

Hi,

You need to give the exact path to the sequencer.

seq.start(m_env.m_agent.m_sequencer);

Try the above statement.

Regards,
Vaibhav

@seahawk12
I checked and the driver received nothing. The data flow is the following : sequence → sequencer → driver, isn’t ? So if the sequencer does nothing, the driver also.
Indeed, I don’t know where the program is after this code line

seq.start(m_test_sequencer);

@Vaibhav Tekale
I have already try this statement and it doesn’t work. “m_test_sequencer” is replaced by “m_env.m_agent.m_sequencer” with

$cast(m_test_sequencer,ovm_top.find("*.m_sequencer"));

Thank you for your suggestions.

Hi,

Can you please Share the code. It will be helpful to look what the issue is exactly.

Regards,
Vaibhav

So, I share a part of my test environnement:

TOP

//----------------------------------------------------------------------
// top
//----------------------------------------------------------------------
module top;

  import ovm_pkg::*;
  import test_pkg::*;
  import dut_model_pkg::*;
  import dut_phase_mngt_top_struct_wrapper_pkg::*;
  `include "dut_phase_mngt_top_struct_wrapper.sv"
  `include "clock_reset.sv"
  import agent_pkg::*;
  import env_pkg::*;
  //--------------------------------------------------------------------
  // hardware instantiation
  //--------------------------------------------------------------------  
  pin_vif     vif;

  my_if     pif();
  
  clock_reset cr (pif);
  
  dut_phase_mngt_top_struct_wp  dut_wp (
          .ENPLL_WP(pif.ENPLL),
          .RST_N_WP(pif.rst_n), 
          .clk_high_PLLext_i_WP(pif.clk),
          .clk_nom_i_WP(pif.clk_nom_i),
          .clk_pll_ext_i_WP(pif.clk_pll_ext_i),
          .clk_red_i_WP(pif.clk_red_i),
          .config_0_A_WP(pif.config_0_A),
          .config_0_B_WP(pif.config_0_B),
          .config_0_C_WP(pif.config_0_C),
          .config_0_D_WP(pif.config_0_D),
          .config_180_A_WP(pif.config_180_A), 
          .config_180_B_WP(pif.config_180_B), 
          .config_180_C_WP(pif.config_180_C), 
          .config_180_D_WP(pif.config_180_D), 
          .config_pll_WP(pif.config_pll), 
          .disable_lock_ok_WP(pif.disable_lock_ok), 
          .max_i_WP(pif.max_i), 
          .mode_async_WP(pif.mode_async), 
          .mode_scan_WP(pif.mode_scan), 
          .nb_step_to_mngt_i_WP(pif.nb_step_to_mngt_i), 
          .sel_clk_i_WP(pif.sel_clk_i), 
          .sync_i_WP(pif.sync_i),
          .clk_out_o_WP(pif.clk_out_o), 
          .lock_ok_WP(pif.lock_ok), 
          .VCCPLL_WP(pif.VCCPLL),
          .VSSPLL_WP(pif.VSSPLL));    
          
  //--------------------------------------------------------------------
  // run the tests
  //--------------------------------------------------------------------  

  //test m_test;
  initial begin
    vif = new(pif);
    set_config_object("*","vif", vif, 0);
    //m_test=new("m_test");
    run_test("test"); 
  end

endmodule: top

TEST_BASE

`ifndef __TEST_BASE
`define __TEST_BASE

//----------------------------------------------------------------------
// test_base
//----------------------------------------------------------------------
class test_base extends ovm_test;

  // internal components
  env	                                m_env;
  ovm_sequencer #(driv_tran)   m_test_sequencer;



  //--------------------------------------------------------------------
  // new
  //-------------------------------------------------------------------- 
  function new(string name, 
               ovm_component parent);
    super.new(name, parent);
  endfunction: new
  
  //--------------------------------------------------------------------
  // build
  //-------------------------------------------------------------------- 
  function void build();
    super.build();
    ovm_report_info(get_full_name(),"Build",OVM_LOG);   
    set_report_verbosity_level_hier(OVM_MEDIUM);
    set_config_int("*.m_scoreboard","check_response",1);
    set_config_string("*.m_agent", "is_active", "OVM_ACTIVE");
    m_env = new("m_env", this);
  endfunction: build

  //--------------------------------------------------------------------
  // end_of_elaboration
  //-------------------------------------------------------------------- 
  function void end_of_elaboration();
    super.end_of_elaboration();
    //Find the actual sequencer
    ovm_report_info(get_full_name(),"End of elaboration",OVM_LOG);   
    $cast(m_test_sequencer,ovm_top.find("*.m_sequencer"));
    m_test_sequencer.print();
  endfunction: end_of_elaboration
    
endclass: test_base

`endif

TEST

`ifndef __TEST
`define __TEST

//----------------------------------------------------------------------
// test
//----------------------------------------------------------------------
class test extends test_base;

  // declaration macros
  `ovm_component_utils_begin(test)    
  `ovm_component_utils_end  

  //--------------------------------------------------------------------
  // new
  //-------------------------------------------------------------------- 
  sequence1     seq;
 
  function new(string name, ovm_component parent = null);
    super.new(name, parent);
  endfunction: new

  //--------------------------------------------------------------------
  // build
  //-------------------------------------------------------------------- 
  function void build();
    super.build();
    ovm_report_info(get_full_name(),"Build",OVM_LOG);
  endfunction: build

  function void end_of_elaboration();
    print();
  endfunction

  //--------------------------------------------------------------------
  // run
  //-------------------------------------------------------------------- 
  task run();
    $display("in run test 1");
    seq = new();
    seq.print();
    $display("in run test 2");
    //ovm_report_info("test", "Test is working", OVM_LOW);
    // seq.start(m_env.m_agent.m_sequencer);
    seq.start(m_test_sequencer);
    $display("in run test 3");
    //ovm_report_info("test", "Test is done", OVM_LOW);
    global_stop_request();
    //ovm_report_info("test", "... test completed", OVM_LOW);
  endtask: run

endclass: test

`endif

SEQUENCE

`ifndef __SEQUENCE1
`define __SEQUENCE1

//----------------------------------------------------------------------
// sequence1
//----------------------------------------------------------------------
class sequence1 extends ovm_sequence #(driv_tran);

  // declaration macros
  `ovm_object_utils_begin(sequence1)
  `ovm_object_utils_end

  // variables  
  //rand int adress;
  //rand int data;
  //in_tran req;
  //out_tran rsp;

  //--------------------------------------------------------------------
  // new
  //--------------------------------------------------------------------   
  function new(string name = "sequence1");
    super.new(name);
  endfunction: new


  //--------------------------------------------------------------------
  // body
  //--------------------------------------------------------------------   
  task body();

    driv_tran t;
    $display("in run test 21");
  for(int unsigned i = 0; i < 10; i++) begin
     $display("in run test 22");
    wait_for_grant();
    t = new();
    assert(t.randomize());
    send_request(t);

//    ovm_report_info(get_type_name(),"Starting sequence1", OVM_LOW);
//    for(int unsigned i=0; i<10; i++) begin
//      wait_for_grant();
//      req=new();
//      assert(req.randomize());
//      send_request(req);
//      `ovm_do(req);
//      $display("%0t : sequence1() starting...",$time);
      //`ovm_do_with(req,{req.addr < 'h10; req.data == data; })
     // `ovm_do_with(req,{req.addr > 'h10; req.data == data; })
     //$display("%0t : sequence1() done !",$time);
      //assert($cast(req, create_item(in_tran::get_type(), m_sequencer, "req")));
      //start_item(req);
      //assert(req.randomize());
      //ovm_report_info("sequence1",{"Sending transaction ",req.convert2string()}, OVM_MEDIUM);
      //finish_item(req);
      //get_response(rsp);
    end

  endtask: body

endclass: sequence1

`endif

ENV

`ifndef __ENV
`define __ENV

//----------------------------------------------------------------------
// env
//----------------------------------------------------------------------
class env extends ovm_env;

  // declaration macros
  `ovm_component_utils_begin(env)
  `ovm_component_utils_end  

  // internal components 
  agent              m_agent;
  analysis_group     m_analysis_group;  
 // dut_model_env      m_dut_model_env;

  //--------------------------------------------------------------------
  // new
  //--------------------------------------------------------------------    
  function new(string name, 
               ovm_component parent);
    super.new(name, parent);      
  endfunction: new

  //--------------------------------------------------------------------
  // build
  //-------------------------------------------------------------------- 
  function void build();
    super.build();
     ovm_report_info(get_full_name(),"Build",OVM_LOG);
 //    m_dut_model_env   = dut_model_env::type_id::create("m_dut_model_env", this);
     //m_agent           = agent::type_id::create("m_agent", this);
     m_agent = new("m_agent",this);
     //m_analysis_group  = analysis_group::type_id::create("m_analysis_group", this);
     m_analysis_group = new("m_analysis_group",this);  
  endfunction: build

  //--------------------------------------------------------------------
  // connect
  //-------------------------------------------------------------------- 
  function void connect();
    super.connect();
      ovm_report_info(get_full_name(),"Connect",OVM_LOG);
      m_agent.driv_ap.connect(m_analysis_group.m_coverage.driv_export);
      m_agent.mon_ap.connect(m_analysis_group.mon_export);
     // m_agent.driv_ap.connect(m_dut_model_env.dut_export);
     // m_dut_model_env.dut_ap.connect(m_analysis_group.dut_export);
  endfunction: connect

  //--------------------------------------------------------------------
  // end_of_elaboration
  //-------------------------------------------------------------------- 
  function void end_of_elaboration();
    super.end_of_elaboration();
    ovm_report_info(get_full_name(),"End of elaboration",OVM_LOG);
  endfunction: end_of_elaboration
   
  //--------------------------------------------------------------------
  // report
  //-------------------------------------------------------------------- 
  virtual function void report();
    super.report();
  endfunction: report
  
//  task run();
//    seq = new();
//    seq.start(sqr);
//    global_stop_request();
//  endtask
   
endclass: env

`endif

AGENT

`ifndef __MY_AGENT
`define __MY_AGENT

//----------------------------------------------------------------------
// agent
//----------------------------------------------------------------------
class agent extends ovm_agent;

  // configuration items
  ovm_active_passive_enum is_active = OVM_ACTIVE;

  // declaration macros
  `ovm_component_utils_begin(agent)
    `ovm_field_enum(ovm_active_passive_enum, is_active, OVM_ALL_ON)        
  `ovm_component_utils_end    

  // external interfaces
  ovm_analysis_port #(mon_tran)    mon_ap;
  ovm_analysis_port #(driv_tran)    driv_ap;

  // internal components
  sequencer                         m_sequencer;
  monitor                           m_monitor;
  driver                            m_driver;




  //--------------------------------------------------------------------
  // new
  //--------------------------------------------------------------------
  function new(string name, 
               ovm_component parent);
    super.new(name, parent);
  endfunction: new

  //--------------------------------------------------------------------
  // build
  //--------------------------------------------------------------------
   function void build();
    super.build();
    ovm_report_info(get_full_name(),"Build",OVM_LOG);
    mon_ap      = new("mon_ap", this);
    driv_ap     = new("driv_ap", this);
    //m_monitor = monitor::type_id::create("m_monitor", this);
    m_monitor     = new("m_monitor", this);
    //if (is_active == OVM_ACTIVE) begin
      //m_driver     = driver::type_id::create("m_driver",this);
      m_driver     = new("m_driver", this);
      //m_sequencer  = sequencer::type_id::create("m_sequencer", this);
      m_sequencer     = new("m_sequencer", this);
    //end 
  endfunction: build

  //--------------------------------------------------------------------
  // connect
  //--------------------------------------------------------------------
  function void connect();
    super.connect();
    ovm_report_info(get_full_name(),"Connect",OVM_LOG);
    m_monitor.mon_ap.connect(mon_ap);
    m_driver.driv_ap.connect(driv_ap);
    //dut_ref_export.connect(m_analysis_group.dut_ref_export);   
    m_driver.rsp_port.connect(m_sequencer.rsp_export); // false
    m_sequencer.rsp_export.connect(m_sequencer.sqr_rsp_analysis_fifo.analysis_export);
    //if (is_active == OVM_ACTIVE) begin
      //m_driver.driv_ap.connect(driv_ap);
      //driv_ap.connect(m_driver.driv_ap);    
           // m_sequencer.seq_item_export.connect(
    m_driver.seq_item_port.connect(m_sequencer.seq_item_export); 
          //end     
  endfunction: connect

endclass: agent

`endif

SEQUENCER

`ifndef __SEQUENCER
`define __SEQUENCER

//----------------------------------------------------------------------
// sequencer
//----------------------------------------------------------------------
class sequencer extends ovm_sequencer #(driv_tran);



  // declaration macros
  `ovm_sequencer_utils_begin(sequencer)
  `ovm_sequencer_utils_end

// internal components 
driv_tran    req_txn;
  //--------------------------------------------------------------------
  // new
  //--------------------------------------------------------------------  
  function new(string name, 
               ovm_component parent);
    super.new(name, parent);
    `ovm_update_sequence_lib_and_item(driv_tran)
  endfunction: new

  function void build();
  super.build();
  ovm_report_info(get_full_name(),"Build",OVM_LOG);   
endfunction: build
endclass: sequencer

`endif

DRIVER

`ifndef __DRIVER
`define __DRIVER

//----------------------------------------------------------------------
// driver
//----------------------------------------------------------------------
class driver extends ovm_driver #(driv_tran);

  // declaration macros
  `ovm_component_utils_begin(driver)
  `ovm_component_utils_end    

  ovm_seq_item_pull_port #(driv_tran) seq_item_port;
  driv_tran t;
  // external interfaces
  ovm_analysis_port #(driv_tran)  driv_ap;

  // internal components 
  in_tran    req_txn;
  out_tran   rsp_txn;

  // interface  
  virtual my_if  vif;

  // local variables
  //int tests = 0;

  //--------------------------------------------------------------------
  // new
  //--------------------------------------------------------------------    
  function new (string name,
                ovm_component parent);
    super.new(name,parent);
  endfunction: new

  //--------------------------------------------------------------------
  // build
  //--------------------------------------------------------------------   
  function void build();
//    ovm_object tmp;
    pin_vif v;
    super.build();
    seq_item_port = new("seq_item_port", this);
    driv_ap = new("driv_ap", this);
    ovm_report_info(get_full_name(),"Build",OVM_LOG);
    //driv_ap = new("driv_ap",this);
//    if(!get_config_object("vif", tmp, 0)) begin
//      ovm_report_error("build", "no virtual interface available");
//    end
//    else begin
//      if(!$cast(v, tmp)) begin
//        ovm_report_error("build", "virtual interface is incorrect type");
//      end
//      else begin
//        vif = v.m_vif;
//      end
//    end 
  endfunction: build

  //--------------------------------------------------------------------
  // run
  //--------------------------------------------------------------------  
  task run();
   $display("in run test 22");
   //forever begin
     //seq_item_port.get(t);
     seq_item_port.get_next_item(t);
    $display("in run test 23");
     //ovm_report_info("get request", t.do_sprint());
    // #1;
  //end
  endtask: run

  //--------------------------------------------------------------------
  // reset_dut
  //--------------------------------------------------------------------  
  task reset_dut();
    vif.addr <= 8'bx;
    vif.data <= 8'bx;
  endtask: reset_dut
  
endclass: driver

`endif

DRIV_TRAN

`ifndef __DRIV_TRAN
`define __DRIV_TRAN

//----------------------------------------------------------------------
// driv_tran
//----------------------------------------------------------------------
class driv_tran extends ovm_sequence_item;

  // variables
  // --- Example code ---
  rand bit [7:0] data;
  rand bit [15:0] addr;

  // declaration macros
  `ovm_object_utils_begin(driv_tran)
    //`ovm_field_int(result, OVM_ALL_ON)
  `ovm_object_utils_end

  //--------------------------------------------------------------------
  // new
  //-------------------------------------------------------------------- 
  function new (string name = "driv_tran");
    super.new(name);
  endfunction: new

  //--------------------------------------------------------------------
  // do_print
  //--------------------------------------------------------------------  
  function string do_sprint(ovm_printer printer=null);
    string s;
    $sformat(s, "addr = %02x  data = %1x", addr, data);
    return s;
  endfunction

  //--------------------------------------------------------------------
  // convert2string
  //-------------------------------------------------------------------- 
  function string convert2string();
    string str;
   // $sformat(str, "RESULT: %0d", result);
    return str;
  endfunction: convert2string

endclass: driv_tran

`endif

I found my issue. The problem was not between my sequence and my sequencer, it was in my coverage module which have an infinite loop (but I don’t work with this module for the moment).