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
|