OpenCores
URL https://opencores.org/ocsvn/uart2bus_testbench/uart2bus_testbench/trunk

Subversion Repositories uart2bus_testbench

[/] [uart2bus_testbench/] [trunk/] [tb/] [agent/] [sequence/] [uart_sequence.svh] - Rev 2

Go to most recent revision | Compare with Previous | Blame | View Log

//-----------------------------------------------------------------------------
//
//                             UART2BUS VERIFICATION
//
//-----------------------------------------------------------------------------
// CREATOR    : HANY SALAH
// PROJECT    : UART2BUS UVM TEST BENCH
// UNIT       : SEQUENCE
//-----------------------------------------------------------------------------
// TITLE      : UART Sequence 
// DESCRIPTION: This 
//-----------------------------------------------------------------------------
// LOG DETAILS
//-------------
// VERSION      NAME        DATE        DESCRIPTION
//    1       HANY SALAH    01012016    FILE CREATION
//    2       HANY SALAH    02012016    ADD REST OF TESTS
//-----------------------------------------------------------------------------
// ALL COPYRIGHTS ARE RESERVED FOR THE PRODUCER ONLY .THIS FILE IS PRODUCED FOR
// OPENCORES MEMBERS ONLY AND IT IS PROHIBTED TO USE THIS MATERIAL WITHOUT THE 
// CREATOR'S PERMISSION
//-----------------------------------------------------------------------------


// Base Sequence Class that hold the common attributes to all sequences
class uart_base_sequence extends uvm_sequence #(uart_transaction);
  
  uart_transaction    trans;

  `uvm_object_utils(uart_base_sequence)

  function new (string name = "uart_base_sequence");
    super.new(name);
    trans = uart_transaction::type_id::create("trans");
  endfunction:new
endclass:uart_base_sequence

//-------------------------------------------------------
//
//      WRITE IN TEXT MODE
//
//-------------------------------------------------------

  // 1.1 Apply UART write request using capital W
  class seq_1p1 extends uart_base_sequence;
    
    `uvm_object_utils(seq_1p1)

    function new (string name = "seq_1p1");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 != wrong_space;
        _spacetype2 != wrong_space;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == write;
        _reqinc     == no;
        _arbit      == accept;
        _chartype   == cap;
      }; 
      finish_item(trans);
    endtask:body
  endclass:seq_1p1


  // 1.2 Apply UART write request using small w
  class seq_1p2 extends uart_base_sequence;
    
    `uvm_object_utils(seq_1p2)

    function new (string name = "seq_1p2");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 != wrong_space;
        _spacetype2 != wrong_space;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == write;
        _reqinc     == no;
        _arbit      == accept;
        _chartype   == smal;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_1p2


  // 1.3 Apply UART write request using single space only
  class seq_1p3 extends uart_base_sequence;
    
    `uvm_object_utils(seq_1p3)

    function new (string name = "seq_1p3");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 == single;
        _spacetype2 == single;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == write;
        _reqinc     == no;
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_1p3


  // 1.4 Apply UART write request using tab only.
  class seq_1p4 extends uart_base_sequence;
    
    `uvm_object_utils(seq_1p4)

    function new (string name = "seq_1p4");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 == tab;
        _spacetype2 == tab;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == write;
        _reqinc     == no;
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_1p4


  // 1.5 Apply UART write request using both single space and tab.
  class seq_1p5 extends uart_base_sequence;
    
    `uvm_object_utils(seq_1p5)

    function new (string name = "seq_1p5");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 != wrong_space;
        _spacetype2 != wrong_space;
        _spacetype2 != _spacetype1;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == write;
        _reqinc     == no;
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_1p5


  // 1.6 Apply UART write request using one wrong space.
  class seq_1p6 extends uart_base_sequence;
    
    `uvm_object_utils(seq_1p6)

    function new (string name = "seq_1p6");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        (_spacetype1 == wrong_space) -> (_spacetype2 inside {tab, single});
        (_spacetype1 != wrong_space) -> (_spacetype2 == wrong_space);  
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == write;
        _reqinc     == no;
        _arbit      == accept;
      }; 
      finish_item(trans);
    endtask:body
  endclass:seq_1p6


  // 1.7 Apply UART write request using two wrong spaces
  class seq_1p7 extends uart_base_sequence;
    
    `uvm_object_utils(seq_1p7)

    function new (string name = "seq_1p7");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 == wrong_space;
        _spacetype2 == wrong_space;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == write;
        _reqinc     == no;
        _arbit      == accept;
      }; 
      finish_item(trans);
    endtask:body
  endclass:seq_1p7


  // 1.8 Apply UART write request to address 0
  class seq_1p8 extends uart_base_sequence;
    
    `uvm_object_utils(seq_1p8)

    function new (string name = "seq_1p8");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 != wrong_space;
        _spacetype2 != wrong_space;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == write;
        address     == 16'b0;
        _reqinc     == no;
        _arbit      == accept;
      }; 
      finish_item(trans);
    endtask:body
  endclass:seq_1p8


  // 1.9 Apply UART write request to full range address
  class seq_1p9 extends uart_base_sequence;
    
    `uvm_object_utils(seq_1p9)

    function new (string name = "seq_1p9");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 != wrong_space;
        _spacetype2 != wrong_space;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == write;
        address     == 4'hFFFF;
        _reqinc     == no;
        _arbit      == accept;
      }; 
      finish_item(trans);
    endtask:body
  endclass:seq_1p9


  // 1.10 Apply UART write request with data equal 0.
  class seq_1p10 extends uart_base_sequence;
    
    `uvm_object_utils(seq_1p10)

    function new (string name = "seq_1p10");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 != wrong_space;
        _spacetype2 != wrong_space;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == write;
        _data [0]   == 8'b0;
        _reqinc     == no;
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_1p10


  // 1.11 Apply UART write request with full range data.
  class seq_1p11 extends uart_base_sequence;
    
    `uvm_object_utils(seq_1p11)

    function new (string name = "seq_1p11");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 != wrong_space;
        _spacetype2 != wrong_space;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == write;
        _data [0]   == 2'hff;
        _reqinc     == no;
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_1p11


//-------------------------------------------------------
//
//      READ IN TEXT MODE
//
//-------------------------------------------------------

  // 2.1 Apply UART read request using capital R
  class seq_2p1 extends uart_base_sequence;
    
    `uvm_object_utils(seq_2p1)

    function new (string name = "seq_2p1");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 != wrong_space;
        _spacetype2 != wrong_space;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == read;
        _reqinc     == no;
        _arbit      == accept;
        _chartype   == cap;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_2p1


  // 2.2 Apply UART read request using small r
  class seq_2p2 extends uart_base_sequence;
    
    `uvm_object_utils(seq_2p2)

    function new (string name = "seq_2p2");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 != wrong_space;
        _spacetype2 != wrong_space;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == read;
        _reqinc     == no;
        _arbit      == accept;
        _chartype   == smal;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_2p2


  // 2.3 Apply UART read request using single space only
  class seq_2p3 extends uart_base_sequence;
    
    `uvm_object_utils(seq_2p3)

    function new (string name = "seq_2p3");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 == single;
        _spacetype2 == single;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == read;
        _reqinc     == no;
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_2p3


  // 2.4 Apply UART read request using tab only.
  class seq_2p4 extends uart_base_sequence;
    
    `uvm_object_utils(seq_2p4)

    function new (string name = "seq_2p4");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 == tab;
        _spacetype2 == tab;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == read;
        _reqinc     == no;
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_2p4


  // 2.5 Apply UART read request using both single space and tab.
  class seq_2p5 extends uart_base_sequence;
    
    `uvm_object_utils(seq_2p5)

    function new (string name = "seq_2p5");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 != wrong_space;
        _spacetype2 != wrong_space;
        _spacetype2 != _spacetype1;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == read;
        _reqinc     == no;
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_2p5


  // 2.6 Apply UART read request using one wrong space.
  class seq_2p6 extends uart_base_sequence;
    
    `uvm_object_utils(seq_2p6)

    function new (string name = "seq_2p6");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        (_spacetype1 == wrong_space) -> (_spacetype2 inside {tab, single});
        (_spacetype1 != wrong_space) -> (_spacetype2 == wrong_space);  
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == read;
        _reqinc     == no;
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_2p6


  // 2.7 Apply UART read request using two wrong spaces
  class seq_2p7 extends uart_base_sequence;
    
    `uvm_object_utils(seq_2p7)

    function new (string name = "seq_2p7");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 == wrong_space;
        _spacetype2 == wrong_space;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == read;
        _reqinc     == no;
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_2p7


  // 2.8 Apply UART read request to address 0
  class seq_2p8 extends uart_base_sequence;
    
    `uvm_object_utils(seq_2p8)

    function new (string name = "seq_2p8");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 != wrong_space;
        _spacetype2 != wrong_space;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == read;
        address     == 16'b0;
        _reqinc     == no;
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_2p8


  // 2.9 Apply UART read request to full range address
  class seq_2p9 extends uart_base_sequence;
    
    `uvm_object_utils(seq_2p9)

    function new (string name = "seq_2p9");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 != wrong_space;
        _spacetype2 != wrong_space;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == read;
        address     == 4'hFFFF;
        _reqinc     == no;
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_2p9


  // 2.10 Apply UART read request with data equal 0.
  class seq_2p10 extends uart_base_sequence;
    
    `uvm_object_utils(seq_2p10)

    function new (string name = "seq_2p10");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 != wrong_space;
        _spacetype2 != wrong_space;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == read;
        _data [0]   == 8'b0;
        _reqinc     == no;
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_2p10


  // 2.11 Apply UART read request with full range data.
  class seq_2p11 extends uart_base_sequence;
    
    `uvm_object_utils(seq_2p11)

    function new (string name = "seq_2p11");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == text;
        _spacetype1 != wrong_space;
        _spacetype2 != wrong_space;
        length_data == 1;
        _eoltype    != wrong_eol;
        _command    == read;
        _data [0]   == 2'hff;
        _reqinc     == no;
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_2p11

//-------------------------------------------------------
//
//      NOP IN COMMAND MODE
//
//-------------------------------------------------------

  // 3.1 Apply UART NOP command with acknowledge request and right command
  //     mode prefix
  class seq_3p1 extends uart_base_sequence;
    
    `uvm_object_utils(seq_3p1)

    function new (string name = "seq_3p1");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == binary;
        _command    == nop;
        (length_data > 1) -> (_reqinc == yes);
        _arbit      == accept;
        _reqack     == yes;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_3p1

  // 3.2 Apply UART NOP command with acknowledge request and wrong command
  //     mode prefix
  class seq_3p2 extends uart_base_sequence;
    
    `uvm_object_utils(seq_3p2)

    function new (string name = "seq_3p2");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == wrong_mode;
        _command    == nop;
        address[15:7] != 2'h00;
        (length_data > 1) -> (_reqinc == yes);
        _arbit      == accept;
        _reqack     == yes;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_3p2

  // 3.3 Apply several UART NOP command to different locations with different
  //     data lengths
  class seq_3p3 extends uart_base_sequence;
    
    rand int unsigned num_of_comands;

    `uvm_object_utils(seq_3p3)

    function new (string name = "seq_3p3");
      super.new(name);
    endfunction:new

    constraint num_iter {
      num_of_comands inside {[1:5]};
    }

    virtual task body ();
      randomize();
      start_item(trans);
      repeat (num_of_comands)
        begin
        trans.randomize() with {
          _mode       == binary;
          _command    == nop;
          (length_data > 1) -> (_reqinc == yes);
          _arbit      == accept;
          _reqack     == yes;
        } ;
        end
      finish_item(trans);
    endtask:body
  endclass:seq_3p3

  // 4.1 Apply UART NOP command with non-acknowledge request and right command
  //     mode prefix
  class seq_4p1 extends uart_base_sequence;
    
    `uvm_object_utils(seq_4p1)

    function new (string name = "seq_4p1");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == binary;
        _command    == nop;
        (length_data > 1) -> (_reqinc == yes);
        _arbit      == accept;
        _reqack     == no;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_4p1

  // 4.2 Apply UART NOP command with non-acknowledge request and wrong command
  //     mode prefix
  class seq_4p2 extends uart_base_sequence;
    
    `uvm_object_utils(seq_4p2)

    function new (string name = "seq_4p2");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == wrong_mode;
        _command    == nop;
        address[15:7] != 2'h00;
        (length_data > 1) -> (_reqinc == yes);
        _arbit      == accept;
        _reqack     == no;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_4p2

  // 4.3 Apply several UART NOP command to different locations with different
  //     data lengths and non-acknowledge request
  class seq_4p3 extends uart_base_sequence;
    
    rand int unsigned num_of_comands;

    `uvm_object_utils(seq_4p3)

    function new (string name = "seq_4p3");
      super.new(name);
    endfunction:new

    constraint num_iter {
      num_of_comands inside {[1:5]};
    }

    virtual task body ();
      randomize();
      start_item(trans);
      repeat (num_of_comands)
        begin
        trans.randomize() with {
          _mode       == binary;
          _command    == nop;
          (length_data > 1) -> (_reqinc == yes);
          _arbit      == accept;
          _reqack     == no;
        } ;
        end
      finish_item(trans);
    endtask:body
  endclass:seq_4p3 

//-------------------------------------------------------
//
//      WRITE IN COMMAND MODE
//
//-------------------------------------------------------

  // 5.1 Apply UART write command with wrong prefix.
  class seq_5p1 extends uart_base_sequence;

    `uvm_object_utils(seq_5p1)

    function new (string name="seq_5p1");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == wrong_mode;
        _command    == write;
        address[15:7] != 2'h00;
        (length_data > 1) -> (_reqinc == yes);
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_5p1

  // 5.2 Apply UART write commands to different addresses.
  class seq_5p2 extends uart_base_sequence;

    rand int unsigned num_of_comands;

    `uvm_object_utils(seq_5p2)

    function new (string name="seq_5p2");
      super.new(name);
    endfunction:new
    
    constraint num_iter {
      num_of_comands inside {[1:5]};
    }

    virtual task body ();
      randomize();
      start_item(trans);
      repeat (num_of_comands)
        begin
        trans.randomize() with {
                _mode       == binary;
                _command    == write;
                (length_data > 1) -> (_reqinc == yes);
                _arbit      == accept;
              }; 
        end
      finish_item(trans);
    endtask:body
  endclass:seq_5p2

  // 5.3 Apply UART write commands with several data lengths
  class seq_5p3 extends uart_base_sequence;

    rand int unsigned num_of_comands;

    `uvm_object_utils(seq_5p3)

    function new (string name="seq_5p3");
      super.new(name);
    endfunction:new
    
    constraint num_iter {
      num_of_comands inside {[1:5]};
    }

    virtual task body ();
      randomize();
      start_item(trans);
      repeat (num_of_comands)
        begin
        trans.randomize() with {
                _mode       == binary;
                _command    == write;
                (length_data > 1) -> (_reqinc == yes);
                _arbit      == accept;
              } ;
        end
      finish_item(trans);
    endtask:body
  endclass:seq_5p3

  // 5.4 Apply UART write command to address 0 with random data.
  class seq_5p4 extends uart_base_sequence;

    `uvm_object_utils(seq_5p4)

    function new (string name="seq_5p4");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    == write;
              address     == 16'b0;
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_5p4

  // 5.5 Apply UART write command to address 0xFFFF with random data.
  class seq_5p5 extends uart_base_sequence;

    `uvm_object_utils(seq_5p5)

    function new (string name="seq_5p5");
      super.new(name);
    endfunction:new
    
    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    == write;
              address     == 4'hffff;
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_5p5

  // 5.6 Apply UART write command with acknowledge request.
  class seq_5p6 extends uart_base_sequence;

    `uvm_object_utils(seq_5p6)

    function new (string name="seq_5p6");
      super.new(name);
    endfunction:new
    
    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    == write;
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
              _reqack     == yes;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_5p6

  // 5.7 Apply UART write command with non-acknowledge request.
  class seq_5p7 extends uart_base_sequence;

    `uvm_object_utils(seq_5p7)

    function new (string name="seq_5p7");
      super.new(name);
    endfunction:new
    
    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    == write;
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
              _reqack     == no;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_5p7

  // 5.8 Apply UART write command including single byte.
  class seq_5p8 extends uart_base_sequence;

    `uvm_object_utils(seq_5p8)

    function new (string name="seq_5p8");
      super.new(name);
    endfunction:new
    
    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    == write;
              length_data == 1;
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_5p8

  // 5.9 Apply UART write command including non-incremental address bit.
  class seq_5p9 extends uart_base_sequence;

    `uvm_object_utils(seq_5p9)

    function new (string name="seq_5p9");
      super.new(name);
    endfunction:new
    
    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    == write;
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
              _reqinc     == no;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_5p9

  // 5.10 Apply UART write command including incremental address bit.
  class seq_5p10 extends uart_base_sequence;

    `uvm_object_utils(seq_5p10)

    function new (string name="seq_5p10");
      super.new(name);
    endfunction:new
    
    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    == write;
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
              _reqinc     == yes;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_5p10


//-------------------------------------------------------
//
//      READ IN COMMAND MODE
//
//-------------------------------------------------------

  // 6.1 Apply UART read command with wrong prefix.
  class seq_6p1 extends uart_base_sequence;

    `uvm_object_utils(seq_6p1)

    function new (string name="seq_6p1");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
        _mode       == wrong_mode;
        _command    == read;
        address[15:7] != 2'h00;
        (length_data > 1) -> (_reqinc == yes);
        _arbit      == accept;
      } ;
      finish_item(trans);
    endtask:body
  endclass:seq_6p1

  // 6.2 Apply UART read commands to different addresses.
  class seq_6p2 extends uart_base_sequence;

    rand int unsigned num_of_comands;

    `uvm_object_utils(seq_6p2)

    function new (string name="seq_6p2");
      super.new(name);
    endfunction:new
    
    constraint num_iter {
      num_of_comands inside {[1:5]};
    }

    virtual task body ();
      randomize();
      start_item(trans);
      repeat (num_of_comands)
        begin
        trans.randomize() with {
                _mode       == binary;
                _command    == read;
                (length_data > 1) -> (_reqinc == yes);
                _arbit      == accept;
              } ;
        end
      finish_item(trans);
    endtask:body
  endclass:seq_6p2

  // 6.3 Apply UART read commands with several data lengths
  class seq_6p3 extends uart_base_sequence;

    rand int unsigned num_of_comands;

    `uvm_object_utils(seq_6p3)

    function new (string name="seq_6p3");
      super.new(name);
    endfunction:new
    
    constraint num_iter {
      num_of_comands inside {[1:5]};
    }

    virtual task body ();
      randomize();
      start_item(trans);
      repeat (num_of_comands)
        begin
        trans.randomize() with {
                _mode       == binary;
                _command    == read;
                (length_data > 1) -> (_reqinc == yes);
                _arbit      == accept;
              } ;
        end
      finish_item(trans);
    endtask:body
  endclass:seq_6p3

  // 6.4 Apply UART read command to address 0 with random data.
  class seq_6p4 extends uart_base_sequence;

    `uvm_object_utils(seq_6p4)

    function new (string name="seq_6p4");
      super.new(name);
    endfunction:new

    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    == read;
              address     == 16'b0;
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_6p4

  // 6.5 Apply UART read command to address 0xFFFF with random data.
  class seq_6p5 extends uart_base_sequence;

    `uvm_object_utils(seq_6p5)

    function new (string name="seq_6p5");
      super.new(name);
    endfunction:new
    
    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    == read;
              address     == 4'hffff;
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_6p5

  // 6.6 Apply UART read command with acknowledge request.
  class seq_6p6 extends uart_base_sequence;

    `uvm_object_utils(seq_6p6)

    function new (string name="seq_6p6");
      super.new(name);
    endfunction:new
    
    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    == read;
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
              _reqack     == yes;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_6p6

  // 6.7 Apply UART read command with non-acknowledge request.
  class seq_6p7 extends uart_base_sequence;

    `uvm_object_utils(seq_6p7)

    function new (string name="seq_6p7");
      super.new(name);
    endfunction:new
    
    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    == read;
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
              _reqack     == no;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_6p7

  // 6.8 Apply UART read command including single byte.
  class seq_6p8 extends uart_base_sequence;

    `uvm_object_utils(seq_6p8)

    function new (string name="seq_6p8");
      super.new(name);
    endfunction:new
    
    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    == read;
              length_data == 1;
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_6p8

  // 6.9 Apply UART read command including non-incremental address bit.
  class seq_6p9 extends uart_base_sequence;

    `uvm_object_utils(seq_6p9)

    function new (string name="seq_6p9");
      super.new(name);
    endfunction:new
    
    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    == read;
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
              _reqinc     == no;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_6p9

  // 6.10 Apply UART read command including incremental address bit.
  class seq_6p10 extends uart_base_sequence;

    `uvm_object_utils(seq_6p10)

    function new (string name="seq_6p10");
      super.new(name);
    endfunction:new
    
    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    == read;
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
              _reqinc     == yes;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_6p10

//-------------------------------------------------------
//
//      INTERNAL BUS
//
//-------------------------------------------------------

  // 7.1 Apply UART read or write commands and give the UART the bus grant.
  class seq_7p1 extends uart_base_sequence;

    `uvm_object_utils(seq_7p1)

    function new (string name="seq_7p1");
      super.new(name);
    endfunction:new
    
    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    inside {write,read};
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == accept;
              _reqinc     == yes;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_7p1

  // 7.2 Apply UART read or write commands and give no agreement to access internal bus
  class seq_7p2 extends uart_base_sequence;

    `uvm_object_utils(seq_7p2)

    function new (string name="seq_7p2");
      super.new(name);
    endfunction:new
    
    virtual task body ();
      start_item(trans);
      trans.randomize() with {
              _mode       == binary;
              _command    inside {write,read};
              (length_data > 1) -> (_reqinc == yes);
              _arbit      == declain;
              _reqinc     == yes;
            } ;
      finish_item(trans);
    endtask:body
  endclass:seq_7p2

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.