在UVM中新增env

2021-07-25 13:31:18 字數 1086 閱讀 1744

在驗證平台中加入reference model、driver、scoreboard等元件後,如何在驗證平台中對它們進行例項化呢?顯然使用factory機制註冊後使用run_test(),已經不行啦,run_test最多只能例項化乙個元件。因此需要引入乙個容器類,這個容器類可以包含所有的元件,通過對容器類的例項,就可以實現對所有元件的例項化。這個容器類稱為uvm_env。所有的env都應該派生於uvm_env。

並且與my_driver一樣都是在**器中一直存在的,使用uvm_component_utils()巨集註冊實現factory機制。

乙個env如下:

`ifndef my_env__sv

`define my_env_sv

class my_env extends uvm_env;

my_driver drv;

my_monitor i_mon;

my_monitor o_mon;

function

new(string name = "my_env", uvm_component parent);//構造器

super.new(name, parent);

endfunction

virtual function

void

build_phase

(uvm_phase phase);//在build_phase中對包含的元件進行例項化

super.build_phase(phase);

drv = my_driver::type_id::create("drv", this); //不用使用new(),這種方式是factory機制帶來的便利,只有這種方式才能使用factory的過載機制

i_mon = my_monitor::type_id::create("i_mon", this);//this代指 my_env

o_mon = my_monitor::type_id::create("o_mon", this);

endfunction

`uvm_component_utils(my_env)

endclass

`endif

UVM 9 4 1 基於env 的重用

1.現代晶元分為兩個層次,模組級別和晶元級別。2.假設某晶元分為3個模組 3.在模組級別驗證時,分別有自己的driver 和sequencer 4.如果晶元級別驗證時,採用env 級別的重用,那麼b 和c 的driver 取消,通過設定各自i agt的is active 來控制 5.觀察上圖,o a...

UVM中Virtual sequence的作用

virtual sequence是用來實現sequence之間的同步。從字面上理解,即虛擬的sequence。虛擬的意思就是它根本就不傳送transaction,它只是控制其他的sequence,起統一排程的作用。如圖1所示,為了使用virtual sequence,一般需要乙個virtual se...

UVM 7 3 1 UVM 中前門訪問的實現

1.前門訪問操作只有兩種 讀操作和寫操作。2.對於參考模型來說,最大問題是如何在其中啟動乙個sequence。全域性變數和config db。3.除了這兩種方式之外,如果能在參考模型中得到sequencer 的指標,也可以啟動sequence。只要在其中設定p sqr變數,並在env 中將seque...