| |
Resources/config db
uvm_config_db类是访问资源数据库的推荐方法。资源是在多个组件或object之间共享的任何信息。我们使用uvm_config_db :: set将某些内容放入数据库,并使用uvm_config_db :: get从数据库中检索信息。uvm_config_db类已参数化,因此数据库的行为就像将其分区为许多特定于类型的“迷你数据库”一样。对类型没有限制 - 它可以是类,uvm_object,内置类型,如位,字节或虚拟接口。
uvm_config_db有两种典型用法。第一种是将虚拟接口从DUT传递到test,第二种是将配置类传递到测试平台。
The set method
set方法的完整格式是void uvm_config_db #( type T = int )::set( uvm_component cntxt , string inst_name , string field_name , T value );
将虚拟接口放入配置数据库的示例如下所示:
interface ahb_if data_port_if( clk , reset );
interface ahb_if control_port_if( clk , reset );
...
uvm_config_db #( virtual ahb_if )::set( null , "uvm_test_top" , "data_port" , data_port_if );
uvm_config_db #( virtual ahb_if )::set( null , "uvm_test_top" , "control_port" , control_port_if );
此代码将两个AHB接口放入分层位置“uvm_test_top”的配置数据库中,该位置是run_test()创建的顶层测试组件的默认位置。使用两个不同的名称“data_port”和“control_port”将两个不同的接口放入数据库。
Notes:
在env中配置agents的示例如下所示:
class env extends uvm_env;
//
ahb_agent_config ahb_agent_config_h;
//
function void build_phase( uvm_phase phase );
...
m_ahb_agent = ahb_agent::type_id::create("m_ahb_agent" , this );
...
uvm_config_db #( ahb_agent_config )::set( this , "m_ahb_agent*" , "ahb_agent_config" , ahb_agent_config_h );
...
endfunction
endclass
此代码设置ahb agent及其所有子组件的配置。关于此代码需要注意两点:
The get method
get方法的完整格式是bit uvm_config_db #( type T = int )::get( uvm_component cntxt , string inst_name , string field_name , ref T value );