10 `uvm_object_utils_begin(cl_syoscb_compare_io)
11 `uvm_field_object(primary_item, UVM_DEFAULT)
17 extern function new(string name = "cl_syoscb_compare_io");
23 extern
protected virtual function void
count_producers(string producer = "");
28 function cl_syoscb_compare_io::new(string name = "cl_syoscb_compare_io");
40 `uvm_info("DEBUG", $sformatf("[%s]: cmp-io: number of queues: %0d", this.cfg.get_scb_name(), this.secondary_queues.size()+1), UVM_FULL);
41 `uvm_info("DEBUG", $sformatf("[%s]: cmp-io: primary queue: %s", this.cfg.get_scb_name(), this.primary_queue_name), UVM_FULL);
50 `uvm_info("DEBUG", $sformatf("[%s]: cmp-io: Now comparing primary transaction:\n%s",
51 this.cfg.get_scb_name(),
52 cl_syoscb_string_library::sprint_item(primary_item, this.cfg)),
75 foreach(this.secondary_queues[i]) begin
76 `uvm_info("DEBUG", $sformatf("[%s]: cmp-io: Looking at secondary queue: %s", this.cfg.get_scb_name(), this.secondary_queue_names[i]), UVM_FULL);
78 `uvm_info("DEBUG", $sformatf("[%s]: cmp-io: %0d items in queue: %s", this.cfg.get_scb_name(),secondary_queues[i].get_size(), this.secondary_queue_names[i]), UVM_FULL);
83 string sec_queue_name;
85 uvm_comparer comparer;
93 if(iter == null) begin
97 sec_proxy = iter.next();
100 comparer = this.
cfg.get_comparer(this.primary_queue_name, this.primary_item.get_producer());
101 if(comparer == null) begin
102 comparer = this.
cfg.get_default_comparer();
105 if(secondary_item.compare(this.primary_item, comparer) == 1'b1) begin
106 `uvm_info("DEBUG", $sformatf("[%s]: cmp-io: Secondary item found:\n%s",
107 this.cfg.get_scb_name(),
108 cl_syoscb_string_library::sprint_item(secondary_item, this.cfg)),
115 miscmp_table = this.
generate_miscmp_table(this.primary_item, secondary_item, sec_queue_name, comparer, "cmp-io");
116 `uvm_error("COMPARE_ERROR", $sformatf("\n%0s", miscmp_table))
virtual void primary_loop_do()
Compare Strategy API: Implementation of the in-order comparison algorithm.
cl_syoscb_queue_iterator_base primary_queue_iter
Iterator into primary queue.
The UVM scoreboard item which wraps uvm_sequence_item .
cl_syoscb_queue_base secondary_queues[]
Handles to secondary queues.
cl_syoscb_item primary_item
Scoreboard wrapper item from the primary queue.
Base class for all proxy items.
Base class for all compare algorithms.
virtual bit delete()
Compare Strategy API: Deletes matched items from the primary and all secondary queues if a match was ...
cl_syoscb_proxy_item_base secondary_item_found[string]
Associative array used to indicate if a matching item was found in a secondary queue.
string secondary_queue_names[]
Names of secondary queues.
cl_syoscb_proxy_item_base primary_item_proxy
Proxy item for the item being searched for in all secondary queue.
Queue iterator base class defining the iterator API used for iterating over queues.
cl_syoscb_queue_base primary_queue
Handle to primary queue.
virtual void count_producers(string producer="")
Compare Strategy API: Checks if the producer of the current item exists in all other queues...
virtual string generate_miscmp_table(cl_syoscb_item primary_item, cl_syoscb_item secondary_item, string sec_queue_name, uvm_comparer comparer, string cmp_name)
Generates a side-by-side comparison of the seq.
virtual void secondary_loop_do()
Compare Strategy API: Loop through all the secondary queues, checking if the first item in that secon...
cl_syoscb_cfg cfg
Handle to the configuration object.
Implementation of the in-order comparison algorithm for N queues.