UVM Scoreboard
Table of Contents
The user-defined scoreboard is extended from uvm_scoreboard, uvm_scoreboard is inherited by uvm_component.
Writing Scoreboard
The scoreboard is written by extending the UVM_SCOREBOARD.
class mem_scoreboard extends uvm_scoreboard; `uvm_component_utils(mem_scoreboard) // new - constructor function new (string name, uvm_component parent); super.new(name, parent); endfunction : new endclass : mem_scoreboard
- the scoreboard will check the correctness of the DUT by comparing the DUT output with the expected values
- the scoreboard will receive the transactions from the Monitors implemented inside agents
- Monitor and scoreboard will communicate via TLM ports and exports
Scoreboard shall compare the DUT output values with,
- The golden reference values
- The values Generated from the reference model
Declare and Create TLM Analysis port, ( to receive transaction pkt from Monitor).
//Declaring port uvm_analysis_imp#(mem_seq_item, mem_scoreboard) item_collected_export; //creating port item_collected_export = new("item_collected_export", this);
analysis export of Scoreboard is connected to Monitor port
monitor.item_collected_port.connect(scoreboard.item_collected_export);
uvm scoreboard write function
write method of the scoreboard will receive the transaction packet from the monitor, on calling write method from the monitor.
//calling write method from monitor item_collected_port.write(pkt); //scoreboard write function virtual function void write(mem_seq_item pkt); pkt.print(); endfunction : write
UVM scoreboard code
Below is the complete scoreboard code.
class mem_scoreboard extends uvm_scoreboard; `uvm_component_utils(mem_scoreboard) uvm_analysis_imp#(mem_seq_item, mem_scoreboard) item_collected_export; // new - constructor function new (string name, uvm_component parent); super.new(name, parent); endfunction : new function void build_phase(uvm_phase phase); super.build_phase(phase); item_collected_export = new("item_collected_export", this); endfunction: build_phase // write virtual function void write(mem_seq_item pkt); $display("SCB:: Pkt recived"); pkt.print(); endfunction : write endclass : mem_scoreboard