`ifndef scoreboard
`define scoreboard
`include"transaction.sv"
class scoreboard ;
transaction ref_data , rmon_data , rc_data;
event DONE ;
int ref_data_count=0;
int rmon_data_count=0;
int data_verified=0;
int no_of_transaction = 50 ;
mailbox#(transaction) ref2sb ;
mailbox#(transaction) rmon2sb ;
function new(mailbox#(transaction) ref2sb , mailbox#(transaction) rmon2sb);
this.ref2sb = ref2sb ;
this.rmon2sb = rmon2sb ;
endfunction
task start ();
fork
while(1) // it will act as forever loop
begin
ref2sb.get(ref_data); // line no 34
ref_data_count++;
rmon2sb.get(rmon_data);
rmon_data_count++;
check_data( rc_data);
end
join_none
endtask
virtual task check_data(transaction rc_data);
string diff;
if(rc_data.re==1)
begin
if(rc_data.data_out ==0)
$display ("============== DATA not randomized in transaction class ============" , $time ) ;
else if(rc_data.re ==1 && rc_data.data_out !=0)
begin
if(!ref_data.compare( rc_data , diff ) )
begin
rc_data.display("SCOREBOARD : RECEIVED DATA ");
rc_data.display("SCOREBOARD : DATA SENT TO DUT ");
$finish ;
end
else
$display ( "==========CHECKER===================================");
end
data_verified++;
if(data_verified >= no_of_transaction)
begin
->DONE ;
end
end
endtask
function void report ();
$display("======================================SUCESSFULLY COMPARED========================");
$display("========= %dref_data_count , %drmon_data_count , %ddata_verified =========", ref_data_count , rmon_data_count, data_verified);
endfunction
endclass
`endif
//=============================================================================================================//
** Fatal: (SIGSEGV) Bad handle or reference.