Класс Scoreboard

Класс Scoreboard

Класс Scoreboard описан в файле Scoreboard.sv. Основной метод класса Scoreboard::start() последовательно берет посланные приемниками транзакции из почтовых ящиков:

  1. rcvr2sb[0].get(old_trans);
  2. rcvr2sb[1].get(new_trans);

и сравнивает их:

  1. if (old_trans.compare(new_trans)) begin
  2. $display(" %0d : Scoreboard : Equal outputs ",$time);
  3. end else begin
  4. $display(" %0d : Scoreboard : **ERROR: Unequal outputs ",$time);
  5. old_trans.errors++;
  6. end

Для сравнения вызывается метод Transaction::compare. Если транзакции не совпадают, то вектор ошибок увеличивается на 1. Эти действия выполняются до тех пор, пока драйвер не выставит сигнал stop.
Код класса Scoreboard:

  1. `ifndef _SCOREBOARD_
  2. `define _SCOREBOARD_
  3.  
  4. class Scoreboard;
  5.  
  6. mailbox #(Transaction) rcvr2sb[2];
  7.  
  8. // Constructor
  9. function new(mailbox #(Transaction) rcvr2sb[2]);
  10. this.rcvr2sb = rcvr2sb;
  11. endfunction : new
  12.  
  13. task start();
  14.  
  15. Transaction old_trans, new_trans;
  16.  
  17. while (!old_trans.stop) begin
  18. rcvr2sb[0].get(old_trans);
  19. rcvr2sb[1].get(new_trans);
  20. $display(" %0d : Scoreboard : Transactions received ",$time);
  21. $display(" %0d : Scoreboard : OLD scheme outputs: \n %s ", $time,
  22. old_trans.display_outputs());
  23. $display(" %0d : Scoreboard : NEW scheme outputs: \n %s ", $time,
  24. new_trans.display_outputs());
  25. if (old_trans.compare(new_trans)) begin
  26. $display(" %0d : Scoreboard : Equal outputs ",$time);
  27. end else begin
  28. $display(" %0d : Scoreboard : **ERROR: Unequal outputs ",$time);
  29. old_trans.errors++;
  30. end
  31. end
  32.  
  33. endtask : start
  34.  
  35. endclass
  36.  
  37. `endif

Описание этого класса при конфигурировании тестового окружения не изменяется.

Share this post