UVM學習筆記--概覽

  1. 使用UVM的第一條原則:驗證平臺中所有的組件均應派生自UVM中的類。
  2. factory機制:必須用宏 uvm_component_utils,uvm_object_utils, uvm_object_utils_begin … end 註冊後才能使用。
  3. UVM factory機制會維護一個註冊表,這些宏可以把用戶定義的類註冊到該表中。
  4. 在top tb中使用run_test("your_test_name"),它會自動創建和運行類,該對象的名字是uvm_test_top。也可以在run的命令行中添加:+UVM_TESTNAME=my_case 來指定運行某個case。
  5. config_db 機制:由於UVM通過run_test語句實例化了一個脫離了top tb層次結構的實例,建立了脫離了硬件世界的軟件天地,爲了對這片天地裏的信號等進行配置,UVM引入了config_db機制。
    config_db分爲setget兩部操作。
  6. 在main_phase中,raise_objection() 應該放在第一個消耗時間的語句前,否則無法起到作用。當然,標準的基於uvm 的testbench只應該在sequence裏 raise/drop objection.
  7. 執行順序
    build_phase時是從樹根到葉子,有在每級節點創建完成後纔開始下級結點的創建。同一級下的component創建先後順序不確定 (?)
    具體參考build_phase執行順序的實驗結果
    connect_phase時是從葉子到樹根的順序.
  8. interface在class中使用會引起編譯錯誤。爲了在class中使用,SystemVerilog創造了virtual interface
  9. 使用UVM宏語句的結尾不用分號結尾也可,如 uvm_info, uvm_fatal, uvm_component_utils 等。
  10. UVM test類的三個主要作用:1.例化頂層驗證環境 2.通過factory overrides或config db的方式配置驗證環境 3.通過引入Sequence來完成test的具體測試內容。
  11. UVM env類: 一個soc top env下可能由許多 dedicated的env,如PCIe Env, USB env, Memory controller Env等。
  12. filed automation機制: 提供copy()compare()print()等函數,以及pack_bytes(),unpack_bytes()等。
    tr.pack_bytes(data_q)將tr中所有的字段變成byte流放入data_q中,其放入順序是根據uvm_filed系列宏的書寫順序排列的。
    tr.unpack_bytes(data_array) 函數將data_array數組中的byte流轉化成tr中已被filed automation註冊過的各個字段
  13. 在定義component 時使用參數化的定義之名使用的transcation類型,這樣可以使用其預定義好的成員變量,如driver中的req
  14. sequence不屬於驗證平臺的任何一部分。sequence就像彈夾,裏面的子彈是transcation,而sqeuencer是一把槍。彈夾用完就扔掉沒用了,但槍只有戰鬥結束纔不用。
  15. uvm_do宏做如下事:
    1.創建一個transcation的實例。
    2.將其隨機化。
    3.最終將其送給sequencer。
  16. driver從sequencer中獲取item的方法:
    seq_item_port.get_next_item(req)是阻塞的
    seq_item_port.try_next_item(req)是非阻塞的
    try_next_item的行爲更接近真實的driver的行爲,當由數據時就驅動數據到總線,否則總線就處於空閒狀態。
  17. 通過set default_sequence的方式啓動sequence。
  18. starting_phase是uvm_sequence基類中的uvm_phase類型的成員變量。sequencer在啓動default_sequence時,會將自身的phase賦值給seq.starting_phase. 因此sequence中可以使用starting_phase進行raise/drop objection。

參考
UVM實戰(卷1) (張強 著)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章