SyoSil ApS UVM Scoreboard  1.0.3.0
cl_scb_test_io_std_simple.svh
1 /// Simple IO compare test using the function based API
2 
3 class cl_scb_test_io_std_simple extends cl_scb_test_single_scb;
4  //-------------------------------------
5  // UVM Macros
6  //-------------------------------------
7  `uvm_component_utils(cl_scb_test_io_std_simple)
8 
9  //-------------------------------------
10  // Constructor
11  //-------------------------------------
12  extern function new(string name = "cl_scb_test_io_std_simple", uvm_component parent = null);
13 
14  //-------------------------------------
15  // UVM Phase methods
16  //-------------------------------------
17  extern task run_phase(uvm_phase phase);
19 
20 function cl_scb_test_io_std_simple::new(string name = "cl_scb_test_io_std_simple",
21  uvm_component parent = null);
22  super.new(name, parent);
23 endfunction : new
24 
25 task cl_scb_test_io_std_simple::run_phase(uvm_phase phase);
26  phase.raise_objection(this);
27 
28  super.run_phase(phase);
29 
30  fork
31  for(int unsigned i=0; i<10; i++) begin
32  cl_tb_seq_item item1;
33  item1 = cl_tb_seq_item::type_id::create("item1");
34  item1.int_a = i;
35  scb_env.syoscb[0].add_item("Q1", "P1", item1);
36  end
37 
38  for(int unsigned i=0; i<10; i++) begin
39  cl_tb_seq_item item1;
40  item1 = cl_tb_seq_item::type_id::create("item1");
41  item1.int_a = i;
42  scb_env.syoscb[0].add_item("Q2", "P1", item1);
43  end
44  join
45 
46  //Ensure that we really are only comparing the first item in each queue
47  //Demote errors of type COMPARE_ERROR, as this should fail
48  uvm_root::get().set_report_severity_id_override(UVM_ERROR, "COMPARE_ERROR", UVM_INFO);
49  //Add items with int_a=0, int_a=1 to Q1 (in that order)
50  for(int i=0; i<2; i++) begin
51  cl_tb_seq_item item1;
52  item1 = cl_tb_seq_item::type_id::create("item1");
53  item1.int_a = i;
54  scb_env.syoscb[0].add_item("Q1", "P1", item1);
55  end
56 
57 
58  //Add items with int_a=1, int_a=0 to Q2 (in that order)
59  for(int i=1; i>=0; i--) begin
60  cl_tb_seq_item item1;
61  item1 = cl_tb_seq_item::type_id::create("item1");
62  item1.int_a = i;
63  scb_env.syoscb[0].add_item("Q2", "P1", item1);
64  end
65 
66  begin
67  int cnt = uvm_report_server::get_server().get_id_count("COMPARE_ERROR");
68  //Ensure that exactly two compare errors were triggered
69  if(cnt != 2) begin
70  `uvm_error("ERR", $sformatf(
71  "Did not provoke 2x compare error, got %0d x, io comparisons are broken. Primary queue: '%0s'",
72  cnt,
73  this.syoscb_cfgs.syoscb_cfg[0].get_primary_queue())
74  )
75  end else begin
76  //If the errors did show up, we can happily flush queues
77  this.scb_env.syoscb[0].flush_queues_all();
78  end
79  end
80 
81  phase.drop_objection(this);
82 endtask: run_phase
Simple IO compare test using the function based API.

Project: SyoSil ApS UVM Scoreboard, Revision: 1.0.3.0

Copyright 2014-2022 SyoSil ApS
All Rights Reserved Worldwide

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
doxygen
Doxygen Version: 1.8.14
Generated with IDV SV Filter Version: 2.6.3
Fri Sep 2 2022 14:37:19
Find a documentation bug? Report bugs to: scoreboard@syosil.com