Класс 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
Описание этого класса при конфигурировании тестового окружения не изменяется.