在驗證平台中加入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...