I have coded a scoreboard
class scoreboard extends uvm_scoreboard;
seq_item tx;
uvm_analysis_imp#(seq_item,scoreboard) imp;
bit [65:0]entxd;
`uvm_component_utils(scoreboard)
function new(string name,uvm_component parent);
super.new(name,parent);
endfunction
function void build_phase(uvm_phase phase);
imp=new(“imp”,this);
tx=seq_item::type_id::create(“tx”);
compare();
endfunction
function void write(seq_item tx1);
this.tx=tx1;
compare();
endfunction
virtual function void compare();
if(tx.rst==1)
begin
entxd=66’b0;
if(entxd==tx.entxd)
begin
$display( "Result match", "tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
end
else
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
end
else if(tx.txc==16'h00)
begin
entxd={tx.txd[63:56],tx.txd[55:48],tx.txd[47:40],tx.txd[39:32],tx.txd[31:24],tx.txd[23:16],tx.txd[15:8],tx.txd[7:0],2'b01};
$display("entxd=%h",entxd);
$display("tx.entxd=%h",tx.entxd);
if(tx.entxd==entxd)
$display( "Result match", "tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
else
$display( "Result mismatch" ,"tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
end
else if(tx.txc==16'hff)
begin
entxd={tx.txd[63:56],tx.txd[56:50],tx.txd[49:43],tx.txd[42:36],tx.txd[35:29],tx.txd[28:22],tx.txd[21:15],tx.txd[14:8],16'h1e ,2'b10};
if(entxd==tx.entxd)
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
else
$display( "Result mismatch","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
end
else if(tx.txc==16'h01)
begin
entxd={tx.txd[63:56],tx.txd[55:48],tx.txd[47:40],tx.txd[39:32],tx.txd[31:24],tx.txd[23:16],tx.txd[15:8],16'h78,2'b10};
if(entxd==tx.entxd)
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
else
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
end
else if(tx.txc==16'hf1)
begin
entxd={28'b0,tx.txd[36:32],tx.txd[31:24],tx.txd[23:16],tx.txd[15:8],16'h4b,2'b10};
if(entxd==tx.entxd)
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
else
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
end
else if(tx.txc==16'hff)
begin
entxd={tx.txd[63:56],tx.txd[56:50],tx.txd[49:43],tx.txd[42:36],tx.txd[35:29],tx.txd[28:22],tx.txd[21:15],7'b0000000,16'h87,2'b10};
if(entxd==tx.entxd)
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
else
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
end
else if(tx.txc==16'hfe)
begin
entxd={tx.txd[63:57],tx.txd[56:50],tx.txd[49:43],tx.txd[42:36],tx.txd[35:29],tx.txd[28:22],6'b000000,tx.txd[15:8],16'h99,2'b10};
if(entxd==tx.entxd)
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
else
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
end
else if(tx.txc==16'hfc)
begin
entxd={tx.txd[63:57],tx.txd[56:50],tx.txd[49:43],tx.txd[42:36],tx.txd[35:29],5'b00000,tx.txd[23:16],tx.txd[15:8],16'haa,2'b10};
if(entxd==tx.entxd)
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
else
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
end
else if(tx.txc==16'hf8)
begin
entxd={tx.txd[63:57],tx.txd[56:50],tx.txd[49:43],tx.txd[42:36],4'b0000,tx.txd[31:24],tx.txd[23:16],tx.txd[15:8],16'hb4,2'b10};
if(entxd==tx.entxd)
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
else
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
end
else if(tx.txc==16'hf0)
begin
entxd={tx.txd[63:57],tx.txd[56:50],tx.txd[49:43],3'b000,tx.txd[39:32],tx.txd[31:24],tx.txd[23:16],tx.txd[15:8],16'hcc,2'b10};
if(entxd==tx.entxd)
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
else
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
end
else if(tx.txc==16'he0)
begin
entxd={tx.txd[63:57],tx.txd[56:50],2'b00,tx.txd[47:40],tx.txd[39:32],tx.txd[31:24],tx.txd[23:16],tx.txd[15:8],16'hd2,2'b10};
if(entxd==tx.entxd)
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
else
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
end
else if(tx.txc==16'hc0)
begin
entxd={tx.txd[63:57],1'b0,tx.txd[55:48],tx.txd[47:40],tx.txd[39:32],tx.txd[31:24],tx.txd[23:16],tx.txd[15:8],16'he1,2'b10};
if(entxd==tx.entxd)
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
else
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
end
else if(tx.txc==16'h80)
begin
entxd={tx.txd[63:56],tx.txd[55:48],tx.txd[47:40],tx.txd[39:32],tx.txd[31:24],tx.txd[23:16],tx.txd[15:8],16'hd2,2'b10};
if(entxd==tx.entxd)
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
else
$display( "Result match","tx.entxd=%0d & entxd=%0d $time=%t",tx.entxd,entxd,$time);
end
endfunction
endclass
I have write 5 transaction packet in sequence body task in repeat
class base_seq extends uvm_sequence#(seq_item);
seq_item tx;
`uvm_object_utils(base_seq)
function new(string name=“base_seq”);
super.new(name);
endfunction
task body();
repeat(5) begin
tx=seq_item::type_id::create("tx");
start_item(tx);
assert(tx.randomize);
tx.print();
finish_item(tx);
end
endtask
endclass
after the simulation only one packet is displayed in scoreboard is my campare logic is wrong?