Automated Checking
Scoreboard collects transactions from monitor, predicts output, and compares actual.
class fifo_scoreboard extends uvm_scoreboard;
uvm_analysis_export #(fifo_transaction) wr_port;
uvm_analysis_export #(fifo_transaction) rd_port;
int wr_count = 0, rd_count = 0;
fifo_transaction wr_queue[$];
function void build_phase(uvm_phase phase);
super.build_phase(phase);
wr_port = new("wr_port", this);
rd_port = new("rd_port", this);
endfunction
function void connect_phase(uvm_phase phase);
super.connect_phase(phase);
wr_port.connect(write_imp.analysis_export);
rd_port.connect(read_imp.analysis_export);
endfunction
virtual function void write_wr(fifo_transaction tr);
wr_queue.push_back(tr);
wr_count++;
endfunction
virtual function void write_rd(fifo_transaction tr);
fifo_transaction pred;
if(wr_queue.size() > 0) begin
pred = wr_queue.pop_front();
if(pred.data != tr.data) begin
`uvm_error("FIFO", $sformatf("Mismatch: expected %0x, got %0x",
pred.data, tr.data));
end
end
rd_count++;
endfunction
endclassKey Takeaways
- ✅ Scoreboard = automated checker
- ✅ Multiple analysis ports = multiple streams
- ✅ Predict expected output, compare actual
Day 24: Config database and advanced UVM.