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