This file defines the following sequences.
OVM Sequences | |
This file defines the following sequences. | |
ovm_apb_rw_sequence | This simple APB transaction sequence generates num_trans sequence items (transactions). |
ovm_apb_rw_sequence_grab | Defines a contrived sequence that exercises the grab and ungrab feature. |
This simple APB transaction sequence generates num_trans sequence items (transactions). The convenience macos `ovm_do_with is not used in order that you see how to what the macro does behind the scenes.
class ovm_apb_rw_sequence extends ovm_sequence #(ovm_apb_item); `ovm_object_utils(ovm_apb_rw_sequence) rand int unsigned num_trans = 5; constraint max_count { num_trans <= m_sequencer.max_random_count; } function new(string name = "apb_random"); super.new(name); endfunction task body(); ovm_apb_tr req = super.req; ovm_report_info(get_full_name(), "Write sequence starting"); for (int i = 0; i < num_trans; i++) begin start_item(tr); void'(tr.randomize() with { addr[9:8] != 2'b11; addr[7:0] < 8'd100; addr[31:10] == 0; data < 8'd100; }); finish_item(tr); ovm_report_info(get_type_name(), $psprintf("Got response: cmd=%s addr=%h data=%h", req.cmd,req.addr,req.data)); end ovm_report_info(get_full_name(), "Write sequence completing"); endtask endclass
Defines a contrived sequence that exercises the grab and ungrab feature. A fixed address is used in order to better identify transactions coming from this sequence.
class ovm_apb_rw_sequence_grab extends ovm_sequence #(ovm_apb_item); `ovm_object_utils(ovm_apb_rw_sequence_grab) rand int unsigned fixed_addr; function new(string name = "apb_random"); super.new(name); endfunction task do_item(ovm_apb_item item, int unsigned _addr, int unsigned _data); start_item(item); void'(item.randomize() with { addr == _addr; data < _data; }); finish_item(item); endtask task body(); ovm_apb_rw req; ovm_report_info(get_full_name(), "Write sequence starting"); for (int i=0; i<5; i++) do_item(req, fixed_addr, 100); ovm_report_info("OVM APB Grab Sequence", "grabbing sequencer\n"); grab(); // use constant addresses to easily verify grab was successful for (int i=0; i<4; i++) do_item(req, 4, 100); ovm_report_info("OVM APB Grab Sequence", "ungrabbing sequencer\n"); ungrab(); for (int i=0; i<5; i++) do_item(req, fixed_addr, 100); ovm_report_info(get_full_name(), "Write sequence completing"); endtask endclass