1. 程式人生 > >uvm學習雜記

uvm學習雜記

star starting 靜態類 平臺 化工 sta 使用 還要 body

  1. 一個類,只定義了而沒有實例化,是沒有任何意義的,但也有特殊情況,對於一個靜態類,即其成員變量都是靜態的,不實例化也可以正常使用;
  2. 類要想和DUT通信,不能在類裏定義接口,會報錯,只能在類裏定義虛擬接口;若直接基於sv的測試平臺中是在new函數中調用接口,在UVM中則通過uvm_config_db::get來得到從top module傳遞而來的interface;
  3. UVM中,各個component(driver,monitor等功能部件)通信使用TLM事務級模型方式,其中要發送信息的一方,使用uvm_analysis_port#(my_transaction),是UVM庫中的一個參數化的類;
  4. driver是最底層的,這裏不必進行實例化,只需在build_phase中,也要完成類的實例化工作,只需調用super.build_phase(phase);In_agent實現driver,monitor,sequencer的實例化,而In_agent的實例化則在env的build_phase中完成;
  5. build_phase中除了完成實例化之外,還要完成config_db機制的get行為,即把其它component設置給此component的一些參數接收過來;
  6. 任何一個派生自uvm_component類的主要的動作都是在main_phase中完成的,main_phase的第一句話是super.main_phase,即調用父類的main_phase;seq_item_port是用於連接driver和sequencer的一個端口,driver如果想要發送數據就要從這個端口獲得;sequence如果有數據要給driver,也要通過這個端口給driver;seq_item_port中my_driver的父類中,即uvm_driver類中,它的實例化也是在uvm_driver的build_phase中完成的;
  7. agent有兩種形式,UVM_PASSIVE和UVM_ACTIVE,以前者方式運轉的agent只監測總線而不驅動總線;以後者方式運行的agent驅動總線,也可以監測總線;
  8. uvm_blocking_get_port也是一個TLM事務級端口,用來接收一個uvm_analysis_port發送的信息,而uvm_analysis_port是發送信息的;uvm驗證平臺的各個組件之間通過這兩個端口來實現事務級別通信;
  9. scoreboard中一般使用一個隊列來暫存從reference model得到的期望數據;
  10. uvm驗證平臺可以使用uvm_tlm_analysis_fifo把uvm_blocking_get_port和uvm_analysis_port連接;
  11. 在uvm中,即使driver,monitor,reference model和scoreboard的main_phase都是無限循環的,但是也不需要顯式的調用$finish,只需要使用objection機制即可。在發包之前,通過調用starting_phase.raise_objection(this)告訴UVM可以開始發包了,當包發送完後,調用starting_phase.drop_objection(this)來告訴UVM可以使用$finish了;當調用drop_objection時,UVM會檢查其它的component的objection是否已經被drop了,直到被drop後,才會調用$finish.

uvm學習雜記