概述UVM驗證環(huán)境中的Component
時間:2021-11-05 13:44:31
手機看文章
掃描二維碼
隨時隨地手機看文章
[導讀]一個UVMtestbench是由從uvm_component基類擴展出來的對象構(gòu)建的。當創(chuàng)建一個uvm_component對象時,它將成為testbench層次結(jié)構(gòu)的一部分,并在仿真期間保持不變。與此不同的是,uvmsequence類層次結(jié)構(gòu)分支中的對象是短暫的,即在仿真過程中它...
一個UVM testbench是由從uvm_component基類擴展出來的對象構(gòu)建的。當創(chuàng)建一個uvm_component對象時,它將成為testbench 層次結(jié)構(gòu)的一部分,并在仿真期間保持不變。
與此不同的是,uvm sequence 類層次結(jié)構(gòu)分支中的對象是短暫的,即在仿真過程中它們會被創(chuàng)建,使用,然后內(nèi)存回收。
uvm_component靜態(tài)層次結(jié)構(gòu)由一個鏈表表示,該鏈表在創(chuàng)建每個組件時構(gòu)建,層次結(jié)構(gòu)中的組件位置由傳遞給其create 方法的參數(shù)決定。
例如,在spi_env中創(chuàng)建一個apb_agent組件,那么到apb_agent的層次結(jié)構(gòu)路徑將是“uvm_test_top.m_env.m_apb_agent”。
uvm_component基類針對每個UVM Phases都有一個虛擬方法,這些方法會根據(jù)需要重載,如果沒有實現(xiàn)相應phase的虛擬方法,那么該組件就不參與該phase。
為了提供testbench 組件構(gòu)建和配置的靈活性,可以將uvm_components注冊到UVM factory中,其可以支持將該組件替換為派生類型。
UVM package 包含了很多對uvm_component的擴展,但是這些擴展大多非常薄,可能僅僅只是代表不同的組件類型。下表總結(jié)了一些uvm_component派生類。
與此不同的是,uvm sequence 類層次結(jié)構(gòu)分支中的對象是短暫的,即在仿真過程中它們會被創(chuàng)建,使用,然后內(nèi)存回收。
uvm_component靜態(tài)層次結(jié)構(gòu)由一個鏈表表示,該鏈表在創(chuàng)建每個組件時構(gòu)建,層次結(jié)構(gòu)中的組件位置由傳遞給其create 方法的參數(shù)決定。
例如,在spi_env中創(chuàng)建一個apb_agent組件,那么到apb_agent的層次結(jié)構(gòu)路徑將是“uvm_test_top.m_env.m_apb_agent”。
class?spi_env?extends?uvm_env;
apb_agent?m_apb_agent;
function void build_phase(uvm_phase phase);
m_apb_agent = apb_agent::type_id::create("m_apb_agent", this);
endfunction: build_phase
endclass: spi_env
uvm_component類繼承自uvm_report_object,其中包含支持UVM消息傳遞所需的功能,可將組件的路徑添加到report字符串信息中。uvm_component基類針對每個UVM Phases都有一個虛擬方法,這些方法會根據(jù)需要重載,如果沒有實現(xiàn)相應phase的虛擬方法,那么該組件就不參與該phase。
為了提供testbench 組件構(gòu)建和配置的靈活性,可以將uvm_components注冊到UVM factory中,其可以支持將該組件替換為派生類型。
UVM package 包含了很多對uvm_component的擴展,但是這些擴展大多非常薄,可能僅僅只是代表不同的組件類型。下表總結(jié)了一些uvm_component派生類。