13 `uvm_component_utils_begin(cl_scb_test_ooo_md5_validate)
15 `uvm_component_utils_end
20 function new(string name = "cl_scb_test_ooo_md5_validate", uvm_component parent = null);
21 super.new(name, parent);
27 extern
virtual function void pre_build();
28 extern task run_phase(uvm_phase phase);
29 extern
virtual function void report_phase(uvm_phase phase);
33 function void cl_scb_test_ooo_md5_validate::pre_build();
36 this.syoscb_cfgs.syoscb_cfg[0].set_hash_compare_check(pk_syoscb::SYOSCB_HASH_COMPARE_VALIDATE_ALL);
37 this.syoscb_cfgs.syoscb_cfg[0].set_queue_type(pk_syoscb::SYOSCB_QUEUE_MD5);
38 this.syoscb_cfgs.syoscb_cfg[0].set_compare_type(pk_syoscb::SYOSCB_COMPARE_OOO);
39 this.syoscb_cfgs.syoscb_cfg[0].set_trigger_greediness(pk_syoscb::SYOSCB_COMPARE_GREEDY);
40 endfunction: pre_build
42 task cl_scb_test_ooo_md5_validate::run_phase(uvm_phase phase);
44 phase.raise_objection(this);
46 super.run_phase(phase);
48 uvm_top = uvm_root::get();
52 for(int i=0; i<10; i++) begin
53 cl_tb_seq_item item = cl_tb_seq_item::type_id::create("item");
55 scb_env.syoscb[0].add_item("Q1", "P1", item);
58 for(int i=9; i>=0; i--) begin
59 cl_tb_seq_item item = cl_tb_seq_item::type_id::create("item");
61 scb_env.syoscb[0].add_item("Q2", "P1", item);
70 uvm_top.set_report_severity_id_override(UVM_ERROR, "MISCMP_HASH", UVM_INFO);
71 this.syoscb_cfgs.syoscb_cfg[0].set_disable_clone(1'b1);
73 cl_tb_seq_item item1, item2;
74 item1 = cl_tb_seq_item::type_id::create("item1");
75 item2 = cl_tb_seq_item::type_id::create("item2");
80 scb_env.syoscb[0].add_item("Q1", "P1", item1);
84 scb_env.syoscb[0].add_item("Q2", "P1", item2);
87 this.scb_env.syoscb[0].flush_queues_all();
92 for(int i=0; i<20; i++) begin
93 cl_tb_seq_item item = cl_tb_seq_item::type_id::create("item");
94 if(!item.randomize()) begin
95 `uvm_fatal("RAND", "Unable to randomize seq item")
97 scb_env.syoscb[0].add_item("Q2", "P1", item);
104 cl_tb_seq_item item1, item2;
105 item1 = cl_tb_seq_item::type_id::create("item1");
106 item2 = cl_tb_seq_item::type_id::create("item2");
111 scb_env.syoscb[0].add_item("Q1", "P2", item1);
114 scb_env.syoscb[0].add_item("Q2", "P2", item2);
118 this.scb_env.syoscb[0].flush_queues_all();
120 uvm_top.set_report_severity_id_override(UVM_ERROR, "MISCMP_HASH", UVM_ERROR);
123 cl_tb_seq_item item1, item2;
124 item1 = cl_tb_seq_item::type_id::create("item1");
125 item2 = cl_tb_seq_item::type_id::create("item2");
127 if(!item1.randomize()) begin
128 `uvm_fatal("RAND", "Unable to randomize item1")
131 if(!item2.randomize()) begin
132 `uvm_fatal("RAND", "Unable to randomize item1")
135 scb_env.syoscb[0].add_item("Q1", "P2", item1);
136 scb_env.syoscb[0].add_item("Q2", "P2", item2);
140 this.scb_env.syoscb[0].flush_queues_all();
143 phase.drop_objection(this);
146 function void cl_scb_test_ooo_md5_validate::report_phase(uvm_phase phase);
147 uvm_report_server rs;
150 super.report_phase(phase);
153 rs = uvm_report_server::get_server();
154 cnt = rs.get_id_count("MISCMP_HASH");
155 if(rs.get_id_count("MISCMP_HASH") != 2) begin
156 `uvm_error("TEST", $sformatf("Did not get exactly two MISCMP_HASH messages as expected, got %0d", cnt));
158 endfunction: report_phase
Test to ensure that config knob cl_syoscb_cfg::hash_compare_check correctly controls MD5 validation b...