HomeDay 23

UVM Scoreboard

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 endclass

Key Takeaways

Day 24: Config database and advanced UVM.