1. 程式人生 > 實用技巧 >SV & UVM中的面向物件:應用

SV & UVM中的面向物件:應用

在UVM驗證環境中,對於一筆RTL transaction,在TB中會建立一個對應的sbx_trans。伴隨著RTL transaction在DUT中流動,運算,編解碼等,我們會對sbx_trans的下屬變數做對應的操作。SV的OOP特性很好的支援了這一點:

即對於一筆RTL transaction,只需建立一個sbx_trans物件,然後將sbx_trans的控制代碼通過analysis port廣播到不同的UVM component,那麼在不同的UVM component中,都可以通過sbx_trans的控制代碼訪問唯一的sbx_trans物件。如下圖所示:

參考如下程式碼:

  • 該程式碼來自於driver中setup data階段,首先建立一個sbx_trans物件;
  • 將sbx_trans物件的控制代碼廣播給component B,component B會修改sbx_trans的下屬變數;
  • 做一些其他的setup工作;
  • 最終將setup完成後的sbx_trans的控制代碼傳送給sbx。
function rddata_setup();
    sbx_trans = sbx_transaction::type_id::create("sbx_trans", this);
    
    // broadcast sbx_trans handle to component B.
    sbx_rddata_encode_ap.write(sbx_trans);

    
// do other things. // broadcast to sbx. sbx_rddata_ap.write(sbx_trans); endfunction

問題在於:

由於所有的步驟都是在function中完成的,所以是不耗時的。那麼在component B中對sbx_trans的修改,在通過sbx_rddata_ap廣播給sbx的時候是否已經完成呢?