《我的第二個 UVM 代碼——連接 interface》中直接在 testcase 里驅動 interface,當代碼越來越多,需要考慮把環(huán)境拆分成多個小的環(huán)境,便于修改和維護。
如下圖,定義一個 driver,并例化在 testcase 里。把 interface 連接到 driver 里的 virtual interface,在 driver 里 toggle interface,實現協(xié)議功能。
第一步,在 build_phase 里連接 virtual interface。分兩次,tb 到 testcase,再從 testcase 里取出 interface 轉存到 driver。如下圖。注意,get 和 set 的路徑是由幾個參數共同組成的。例如,null、uvm_test_top、u_intf 組成了 uvm_test_top.u_intf。又如,this(uvm_test_top)、my_driver、u_intf 組成了 uvm_test_top.my_driver.u_intf。
在編譯時可以加入+UVM_CONFIG_DB_TRACE 來打印 config_db 的 set 和 get 的詳細信息。
第二步,在 driver 的 main_phase 里驅動 virtual interface。這一步與
《我的第二個 UVM 代碼——連接 interface》沒什么區(qū)別,只是把代碼從 testcase 里移到 driver 里而已。
第三步,編譯仿真。仿真命令(以 irun 為例)、波形、環(huán)境層次關系(verdi)如下。
實驗代碼:
https://github.com/chenfengrugao/uvm_lab
總結:在本示例中沒有 env、agent、sequencer、sequence 等組件,屬于一個簡化的驗證環(huán)境,主要是由于分步演示的需要。側面也說明 UVM 是一個靈活的驗證架構,可以根據自己的需要進行裁剪。