Hello all,
I am new to UVM. I couldn’t see the info message printing from the scoreboard when i run the test case. Below is my Code for reference.
The complete code is available in FIFO_WORKING_Apr_25 - EDA Playground
`uvm_analysis_imp_decl(_wr_collected)
`uvm_analysis_imp_decl(_rd_collected)
class my_scoreboard extends uvm_scoreboard;
`uvm_component_utils(my_scoreboard)
uvm_phase m_phase;
my_seq_item sq_qu_w[$];
my_seq_item sq_qu_r[$];
//my_seq_item sq_qw[$];
//my_seq_item sq_qwj[$];
int sq_qw[$];
int sq_qwj[$];
//my_seq_item sq_qr[$];
//my_seq_item sq_qrj[$];
int sq_qr[$];
int sq_qrj[$];
uvm_analysis_imp_wr_collected #(my_seq_item, my_scoreboard) item_wr_collected_export;
uvm_analysis_imp_rd_collected #(my_seq_item, my_scoreboard) item_rd_collected_export;
bit sbd_error;
function new(string name, uvm_component parent);
super.new(name,parent);
endfunction
function void build_phase(uvm_phase phase);
item_wr_collected_export = new("item_wr_collected_export",this);
item_rd_collected_export = new("item_rd_collected_export",this);
endfunction
virtual task run_phase(uvm_phase phase);
`uvm_info(get_name(), "scoreboard run phase started",UVM_DEBUG)
this.m_phase = phase;
fork
coll_data_compare();
join
endtask
virtual task automatic coll_data_compare();
my_seq_item wr_sqi;
my_seq_item rd_sqi;
logic [7:0] w_sqi;
logic [7:0] r_sqi;
forever
begin
fork
wait(sq_qu_w.size() > 0);
wait(sq_qu_r.size() > 0);
join
if((sq_qu_w.size() > 0) && (sq_qu_r.size() > 0))
begin
wr_sqi = sq_qu_w.pop_front();
rd_sqi = sq_qu_r.pop_front();
if(wr_sqi.wr_en)
sq_qw.push_back(wr_sqi.data_in);
else
sq_qwj.push_back(wr_sqi.data_in);
if(rd_sqi.rd_en)
sq_qr.push_back(rd_sqi.data_out);
else
sq_qrj.push_back(rd_sqi.data_out);
fork
wait(sq_qw.size() > 0);
wait(sq_qr.size() > 0);
join
if((sq_qw.size() > 0) && (sq_qr.size() > 0))
begin
w_sqi = sq_qw.pop_front;
r_sqi = sq_qr.pop_front;
compare_data(w_sqi,r_sqi);
end
else
`uvm_info("",$sformatf("No more valid data items in comparing queue"),UVM_HIGH);
end
else
`uvm_info("",$sformatf("No more all data items in comparing queue"),UVM_HIGH);
end
endtask
virtual task automatic compare_data(input logic [7:0] w_data,input logic [7:0] r_data);
//my_seq_item w_sqi;
//my_seq_item r_sqi;
if( w_data == r_data )
begin
sbd_error = 0;
`uvm_info("",$sformatf("MATCHED"),UVM_MEDIUM);
`uvm_info(get_type_name(),$sformatf("Expected Data: %0h Actual Data: %0h",w_data,r_data),UVM_HIGH)
end
else
begin
sbd_error = 1;
`uvm_error("","MISMATCHED");
`uvm_info(get_type_name(),$sformatf("Expected Data: %0h Actual Data: %0h",w_data,r_data),UVM_HIGH)
end
/*else
begin
sbd_error = 0;
`uvm_info("",$sformatf("No more data items in comparing queue"),UVM_HIGH);
end*/
endtask
virtual function void write_rd_collected(my_seq_item rd_sqi);
sq_qu_r.push_back(rd_sqi);
endfunction
virtual function void write_wr_collected(my_seq_item wr_sqi);
sq_qu_w.push_back(wr_sqi);
endfunction
endclass