10. Класс Scoreboard
Класс Scoreboard описан в файле Scoreboard.sv. Основной метод класса Scoreboard::start() последовательно берет посланные приемниками транзакции из почтовых ящиков:
rcvr2sb[0].get(old_trans); rcvr2sb[1].get(new_trans);
и сравнивает их:
if (old_trans.compare(new_trans)) begin
$display(" %0d : Scoreboard : Equal outputs ",$time);
end else begin
$display(" %0d : Scoreboard : **ERROR: Unequal outputs ",$time);
old_trans.errors++;
end
Для сравнения вызывается метод Transaction::compare. Если транзакции не совпадают, то вектор ошибок увеличивается на 1. Эти действия выполняются до тех пор, пока драйвер не выставит сигнал stop.
Код класса Scoreboard:
`ifndef _SCOREBOARD_
`define _SCOREBOARD_
class Scoreboard;
mailbox #(Transaction) rcvr2sb[2];
// Constructor
function new(mailbox #(Transaction) rcvr2sb[2]);
this.rcvr2sb = rcvr2sb;
endfunction : new
task start();
Transaction old_trans, new_trans;
while (!old_trans.stop) begin
rcvr2sb[0].get(old_trans);
rcvr2sb[1].get(new_trans);
$display(" %0d : Scoreboard : Transactions received ",$time);
$display(" %0d : Scoreboard : OLD scheme outputs: \n %s ", $time,
old_trans.display_outputs());
$display(" %0d : Scoreboard : NEW scheme outputs: \n %s ", $time,
new_trans.display_outputs());
if (old_trans.compare(new_trans)) begin
$display(" %0d : Scoreboard : Equal outputs ",$time);
end else begin
$display(" %0d : Scoreboard : **ERROR: Unequal outputs ",$time);
old_trans.errors++;
end
end
endtask : start
endclass
`endif
Описание этого класса при конфигурировании тестового окружения не изменяется.

Комментарии (0)