UVM Scoreboard

2023-12-10
UVM

What is a scoreboard?

UVM scoreboard是包含checker並驗證design的functionality的驗證元件。它通常透過 TLM Analysis Ports接收從 DUT interface擷取的transaction level的object。

例如,從屬性為RW的register寫入和讀取的值應該會match。當對design執行寫入操作時,scoreboard接收到該寫入動作的packet並且是預期值(expected value)。之後從design中讀取相同的register的,並且將實際值(actual value)的資料傳送到 UVM scoreboard。然後scoreboard就可以比較(expected value)和(actual value)是否相等。

What is a reference model?

接收到data object後,scoreboard可以執行計算並預測期望值(expected value),也可以將其發送到reference model以獲​​得期望值(expected value)。reference model也稱為predictor,他可以模仿design的functionality。

最終任務是比較預期結果與DUT的實際輸出結果 。

建議繼承 uvm_scoreboard而不是繼承uvm_component,這樣就會有uvm_scoreboard的各種feature。

Steps to create a UVM scoreboard

  1. 建立一個繼承uvm_scoreboard的class,然後註冊到factory上

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class my_scoreboard extends uvm_scoreboard;

    `uvm_component_utils (my_scoreboard)

    function new (string name = "my_scoreboard", uvm_component parent = null);
    super.new (name, parent);
    endfunction

    ...
    endclass
  2. 新增必要的TLM Analysis Port以接收來自其他components的transaction,然後在 build_phase 產生 TLM Analysis Port的instance

    1
    2
    3
    4
    5
    6
    7
    8
    9
    class my_scoreboard extends uvm_scoreboard;
    ...
    uvm_analysis_imp #(apb_pkt, my_scoreboard) ap_imp;

    function void build_phase (uvm_phase phase);
    ap_imp = new ("ap_imp", this);
    endfunction
    ...
    endclass
  3. 定義從analysis port接收到資料時要採取的動作

    1
    2
    3
    4
    5
    6
    7
    class my_scoreboard extends uvm_scoreboard;
    ..
    virtual function void write (apb_pkt data);
    `uvm_info ("write", $sformatf("Data received = 0x%0h", data), UVM_MEDIUM)
    endfunction
    ..
    endclass
  4. check_phase 執行檢查

    1
    2
    3
    4
    5
    6
    7
    class my_scoreboard extends uvm_scoreboard;
    ...
    virtual function void check_phase (uvm_phase phase);
    ...
    endfunction
    ...
    endclass
  5. 在environment中,將scoreboard與的其他components連接起來

    1
    2
    3
    4
    5
    6
    7
    8
    class my_env extends uvm_env;
    ...
    virtual function void connect_phase(uvm_phase phase);
    super.connect_phase(phase);
    m_apb_agent.m_apb_mon.analysis_port.connect(m_scbd.ap_imp);
    endfunction
    ...
    endclass

testbench的其他component透過呼叫analysis port的 write method將資料傳送到scoreboard。

例如,monitor從bus interface收集data packet。當bus operation已接收或發送與傳輸相關的所有資料時,packet就準備完成了。monitor在有完整的packet後會呼叫analysis port的write方法。由於environment中monitor和scoreboard的analysis port是相連的,所以scoreboard會通過analysis port收到packet。