summaryrefslogtreecommitdiff
path: root/homework_2/SRC/gen_item_seq.sv
blob: ce3c3f515966c3ec4ed0bb4e0534e64a203a3451 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// The generator class is replaced by a sequence
class gen_item_seq extends uvm_sequence;
  `uvm_object_utils(gen_item_seq)
  function new(string name = "gen_item_seq");
    super.new(name);
  endfunction

  rand int num;  // Config total number of items to be sent

  constraint c1 {soft num inside {[300 : 500]};}

  virtual task body();
    bit seed_bits [$] = '{1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0};
    int total_num;

    total_num = (num < seed_bits.size()) ? seed_bits.size() : num;

    for (int i = 0; i < total_num; i++) begin
      Item m_item = Item::type_id::create($sformatf("m_item_%0d", i));

      start_item(m_item);

      if (i < seed_bits.size()) begin
        m_item.inp = seed_bits[i];
      end else begin
        if (!m_item.randomize()) `uvm_fatal("SEQ", "Randomization failure for sequence item")
      end

      `uvm_info("SEQ", $sformatf("Generate new item: %s", m_item.convert2str()), UVM_HIGH)

      finish_item(m_item);
    end

    `uvm_info("SEQ", $sformatf("Done generation of %0d items", total_num), UVM_LOW)
  endtask
endclass